GNU Linux-libre 4.9.309-gnu1
[releases.git] / drivers / net / fjes / fjes_main.c
1 /*
2  *  FUJITSU Extended Socket Network Device driver
3  *  Copyright (c) 2015 FUJITSU LIMITED
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, see <http://www.gnu.org/licenses/>.
16  *
17  * The full GNU General Public License is included in this distribution in
18  * the file called "COPYING".
19  *
20  */
21
22 #include <linux/module.h>
23 #include <linux/types.h>
24 #include <linux/nls.h>
25 #include <linux/platform_device.h>
26 #include <linux/netdevice.h>
27 #include <linux/interrupt.h>
28
29 #include "fjes.h"
30
31 #define MAJ 1
32 #define MIN 1
33 #define DRV_VERSION __stringify(MAJ) "." __stringify(MIN)
34 #define DRV_NAME        "fjes"
35 char fjes_driver_name[] = DRV_NAME;
36 char fjes_driver_version[] = DRV_VERSION;
37 static const char fjes_driver_string[] =
38                 "FUJITSU Extended Socket Network Device Driver";
39 static const char fjes_copyright[] =
40                 "Copyright (c) 2015 FUJITSU LIMITED";
41
42 MODULE_AUTHOR("Taku Izumi <izumi.taku@jp.fujitsu.com>");
43 MODULE_DESCRIPTION("FUJITSU Extended Socket Network Device Driver");
44 MODULE_LICENSE("GPL");
45 MODULE_VERSION(DRV_VERSION);
46
47 static int fjes_request_irq(struct fjes_adapter *);
48 static void fjes_free_irq(struct fjes_adapter *);
49
50 static int fjes_open(struct net_device *);
51 static int fjes_close(struct net_device *);
52 static int fjes_setup_resources(struct fjes_adapter *);
53 static void fjes_free_resources(struct fjes_adapter *);
54 static netdev_tx_t fjes_xmit_frame(struct sk_buff *, struct net_device *);
55 static void fjes_raise_intr_rxdata_task(struct work_struct *);
56 static void fjes_tx_stall_task(struct work_struct *);
57 static void fjes_force_close_task(struct work_struct *);
58 static irqreturn_t fjes_intr(int, void*);
59 static struct rtnl_link_stats64 *
60 fjes_get_stats64(struct net_device *, struct rtnl_link_stats64 *);
61 static int fjes_change_mtu(struct net_device *, int);
62 static int fjes_vlan_rx_add_vid(struct net_device *, __be16 proto, u16);
63 static int fjes_vlan_rx_kill_vid(struct net_device *, __be16 proto, u16);
64 static void fjes_tx_retry(struct net_device *);
65
66 static int fjes_acpi_add(struct acpi_device *);
67 static int fjes_acpi_remove(struct acpi_device *);
68 static acpi_status fjes_get_acpi_resource(struct acpi_resource *, void*);
69
70 static int fjes_probe(struct platform_device *);
71 static int fjes_remove(struct platform_device *);
72
73 static int fjes_sw_init(struct fjes_adapter *);
74 static void fjes_netdev_setup(struct net_device *);
75 static void fjes_irq_watch_task(struct work_struct *);
76 static void fjes_watch_unshare_task(struct work_struct *);
77 static void fjes_rx_irq(struct fjes_adapter *, int);
78 static int fjes_poll(struct napi_struct *, int);
79
80 static const struct acpi_device_id fjes_acpi_ids[] = {
81         {"PNP0C02", 0},
82         {"", 0},
83 };
84 MODULE_DEVICE_TABLE(acpi, fjes_acpi_ids);
85
86 static struct acpi_driver fjes_acpi_driver = {
87         .name = DRV_NAME,
88         .class = DRV_NAME,
89         .owner = THIS_MODULE,
90         .ids = fjes_acpi_ids,
91         .ops = {
92                 .add = fjes_acpi_add,
93                 .remove = fjes_acpi_remove,
94         },
95 };
96
97 static struct platform_driver fjes_driver = {
98         .driver = {
99                 .name = DRV_NAME,
100         },
101         .probe = fjes_probe,
102         .remove = fjes_remove,
103 };
104
105 static struct resource fjes_resource[] = {
106         {
107                 .flags = IORESOURCE_MEM,
108                 .start = 0,
109                 .end = 0,
110         },
111         {
112                 .flags = IORESOURCE_IRQ,
113                 .start = 0,
114                 .end = 0,
115         },
116 };
117
118 static int fjes_acpi_add(struct acpi_device *device)
119 {
120         struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL};
121         char str_buf[sizeof(FJES_ACPI_SYMBOL) + 1];
122         struct platform_device *plat_dev;
123         union acpi_object *str;
124         acpi_status status;
125         int result;
126
127         status = acpi_evaluate_object(device->handle, "_STR", NULL, &buffer);
128         if (ACPI_FAILURE(status))
129                 return -ENODEV;
130
131         str = buffer.pointer;
132         result = utf16s_to_utf8s((wchar_t *)str->string.pointer,
133                                  str->string.length, UTF16_LITTLE_ENDIAN,
134                                  str_buf, sizeof(str_buf) - 1);
135         str_buf[result] = 0;
136
137         if (strncmp(FJES_ACPI_SYMBOL, str_buf, strlen(FJES_ACPI_SYMBOL)) != 0) {
138                 kfree(buffer.pointer);
139                 return -ENODEV;
140         }
141         kfree(buffer.pointer);
142
143         status = acpi_walk_resources(device->handle, METHOD_NAME__CRS,
144                                      fjes_get_acpi_resource, fjes_resource);
145         if (ACPI_FAILURE(status))
146                 return -ENODEV;
147
148         /* create platform_device */
149         plat_dev = platform_device_register_simple(DRV_NAME, 0, fjes_resource,
150                                                    ARRAY_SIZE(fjes_resource));
151         if (IS_ERR(plat_dev))
152                 return PTR_ERR(plat_dev);
153
154         device->driver_data = plat_dev;
155
156         return 0;
157 }
158
159 static int fjes_acpi_remove(struct acpi_device *device)
160 {
161         struct platform_device *plat_dev;
162
163         plat_dev = (struct platform_device *)acpi_driver_data(device);
164         platform_device_unregister(plat_dev);
165
166         return 0;
167 }
168
169 static acpi_status
170 fjes_get_acpi_resource(struct acpi_resource *acpi_res, void *data)
171 {
172         struct acpi_resource_address32 *addr;
173         struct acpi_resource_irq *irq;
174         struct resource *res = data;
175
176         switch (acpi_res->type) {
177         case ACPI_RESOURCE_TYPE_ADDRESS32:
178                 addr = &acpi_res->data.address32;
179                 res[0].start = addr->address.minimum;
180                 res[0].end = addr->address.minimum +
181                         addr->address.address_length - 1;
182                 break;
183
184         case ACPI_RESOURCE_TYPE_IRQ:
185                 irq = &acpi_res->data.irq;
186                 if (irq->interrupt_count != 1)
187                         return AE_ERROR;
188                 res[1].start = irq->interrupts[0];
189                 res[1].end = irq->interrupts[0];
190                 break;
191
192         default:
193                 break;
194         }
195
196         return AE_OK;
197 }
198
199 static int fjes_request_irq(struct fjes_adapter *adapter)
200 {
201         struct net_device *netdev = adapter->netdev;
202         int result = -1;
203
204         adapter->interrupt_watch_enable = true;
205         if (!delayed_work_pending(&adapter->interrupt_watch_task)) {
206                 queue_delayed_work(adapter->control_wq,
207                                    &adapter->interrupt_watch_task,
208                                    FJES_IRQ_WATCH_DELAY);
209         }
210
211         if (!adapter->irq_registered) {
212                 result = request_irq(adapter->hw.hw_res.irq, fjes_intr,
213                                      IRQF_SHARED, netdev->name, adapter);
214                 if (result)
215                         adapter->irq_registered = false;
216                 else
217                         adapter->irq_registered = true;
218         }
219
220         return result;
221 }
222
223 static void fjes_free_irq(struct fjes_adapter *adapter)
224 {
225         struct fjes_hw *hw = &adapter->hw;
226
227         adapter->interrupt_watch_enable = false;
228         cancel_delayed_work_sync(&adapter->interrupt_watch_task);
229
230         fjes_hw_set_irqmask(hw, REG_ICTL_MASK_ALL, true);
231
232         if (adapter->irq_registered) {
233                 free_irq(adapter->hw.hw_res.irq, adapter);
234                 adapter->irq_registered = false;
235         }
236 }
237
238 static const struct net_device_ops fjes_netdev_ops = {
239         .ndo_open               = fjes_open,
240         .ndo_stop               = fjes_close,
241         .ndo_start_xmit         = fjes_xmit_frame,
242         .ndo_get_stats64        = fjes_get_stats64,
243         .ndo_change_mtu         = fjes_change_mtu,
244         .ndo_tx_timeout         = fjes_tx_retry,
245         .ndo_vlan_rx_add_vid    = fjes_vlan_rx_add_vid,
246         .ndo_vlan_rx_kill_vid = fjes_vlan_rx_kill_vid,
247 };
248
249 /* fjes_open - Called when a network interface is made active */
250 static int fjes_open(struct net_device *netdev)
251 {
252         struct fjes_adapter *adapter = netdev_priv(netdev);
253         struct fjes_hw *hw = &adapter->hw;
254         int result;
255
256         if (adapter->open_guard)
257                 return -ENXIO;
258
259         result = fjes_setup_resources(adapter);
260         if (result)
261                 goto err_setup_res;
262
263         hw->txrx_stop_req_bit = 0;
264         hw->epstop_req_bit = 0;
265
266         napi_enable(&adapter->napi);
267
268         fjes_hw_capture_interrupt_status(hw);
269
270         result = fjes_request_irq(adapter);
271         if (result)
272                 goto err_req_irq;
273
274         fjes_hw_set_irqmask(hw, REG_ICTL_MASK_ALL, false);
275
276         netif_tx_start_all_queues(netdev);
277         netif_carrier_on(netdev);
278
279         return 0;
280
281 err_req_irq:
282         fjes_free_irq(adapter);
283         napi_disable(&adapter->napi);
284
285 err_setup_res:
286         fjes_free_resources(adapter);
287         return result;
288 }
289
290 /* fjes_close - Disables a network interface */
291 static int fjes_close(struct net_device *netdev)
292 {
293         struct fjes_adapter *adapter = netdev_priv(netdev);
294         struct fjes_hw *hw = &adapter->hw;
295         unsigned long flags;
296         int epidx;
297
298         netif_tx_stop_all_queues(netdev);
299         netif_carrier_off(netdev);
300
301         fjes_hw_raise_epstop(hw);
302
303         napi_disable(&adapter->napi);
304
305         spin_lock_irqsave(&hw->rx_status_lock, flags);
306         for (epidx = 0; epidx < hw->max_epid; epidx++) {
307                 if (epidx == hw->my_epid)
308                         continue;
309
310                 if (fjes_hw_get_partner_ep_status(hw, epidx) ==
311                     EP_PARTNER_SHARED)
312                         adapter->hw.ep_shm_info[epidx]
313                                    .tx.info->v1i.rx_status &=
314                                 ~FJES_RX_POLL_WORK;
315         }
316         spin_unlock_irqrestore(&hw->rx_status_lock, flags);
317
318         fjes_free_irq(adapter);
319
320         cancel_delayed_work_sync(&adapter->interrupt_watch_task);
321         cancel_work_sync(&adapter->unshare_watch_task);
322         adapter->unshare_watch_bitmask = 0;
323         cancel_work_sync(&adapter->raise_intr_rxdata_task);
324         cancel_work_sync(&adapter->tx_stall_task);
325
326         cancel_work_sync(&hw->update_zone_task);
327         cancel_work_sync(&hw->epstop_task);
328
329         fjes_hw_wait_epstop(hw);
330
331         fjes_free_resources(adapter);
332
333         return 0;
334 }
335
336 static int fjes_setup_resources(struct fjes_adapter *adapter)
337 {
338         struct net_device *netdev = adapter->netdev;
339         struct ep_share_mem_info *buf_pair;
340         struct fjes_hw *hw = &adapter->hw;
341         unsigned long flags;
342         int result;
343         int epidx;
344
345         mutex_lock(&hw->hw_info.lock);
346         result = fjes_hw_request_info(hw);
347         switch (result) {
348         case 0:
349                 for (epidx = 0; epidx < hw->max_epid; epidx++) {
350                         hw->ep_shm_info[epidx].es_status =
351                             hw->hw_info.res_buf->info.info[epidx].es_status;
352                         hw->ep_shm_info[epidx].zone =
353                             hw->hw_info.res_buf->info.info[epidx].zone;
354                 }
355                 break;
356         default:
357         case -ENOMSG:
358         case -EBUSY:
359                 adapter->force_reset = true;
360
361                 mutex_unlock(&hw->hw_info.lock);
362                 return result;
363         }
364         mutex_unlock(&hw->hw_info.lock);
365
366         for (epidx = 0; epidx < (hw->max_epid); epidx++) {
367                 if ((epidx != hw->my_epid) &&
368                     (hw->ep_shm_info[epidx].es_status ==
369                      FJES_ZONING_STATUS_ENABLE)) {
370                         fjes_hw_raise_interrupt(hw, epidx,
371                                                 REG_ICTL_MASK_INFO_UPDATE);
372                 }
373         }
374
375         msleep(FJES_OPEN_ZONE_UPDATE_WAIT * hw->max_epid);
376
377         for (epidx = 0; epidx < (hw->max_epid); epidx++) {
378                 if (epidx == hw->my_epid)
379                         continue;
380
381                 buf_pair = &hw->ep_shm_info[epidx];
382
383                 spin_lock_irqsave(&hw->rx_status_lock, flags);
384                 fjes_hw_setup_epbuf(&buf_pair->tx, netdev->dev_addr,
385                                     netdev->mtu);
386                 spin_unlock_irqrestore(&hw->rx_status_lock, flags);
387
388                 if (fjes_hw_epid_is_same_zone(hw, epidx)) {
389                         mutex_lock(&hw->hw_info.lock);
390                         result =
391                         fjes_hw_register_buff_addr(hw, epidx, buf_pair);
392                         mutex_unlock(&hw->hw_info.lock);
393
394                         switch (result) {
395                         case 0:
396                                 break;
397                         case -ENOMSG:
398                         case -EBUSY:
399                         default:
400                                 adapter->force_reset = true;
401                                 return result;
402                         }
403                 }
404         }
405
406         return 0;
407 }
408
409 static void fjes_free_resources(struct fjes_adapter *adapter)
410 {
411         struct net_device *netdev = adapter->netdev;
412         struct fjes_device_command_param param;
413         struct ep_share_mem_info *buf_pair;
414         struct fjes_hw *hw = &adapter->hw;
415         bool reset_flag = false;
416         unsigned long flags;
417         int result;
418         int epidx;
419
420         for (epidx = 0; epidx < hw->max_epid; epidx++) {
421                 if (epidx == hw->my_epid)
422                         continue;
423
424                 mutex_lock(&hw->hw_info.lock);
425                 result = fjes_hw_unregister_buff_addr(hw, epidx);
426                 mutex_unlock(&hw->hw_info.lock);
427
428                 if (result)
429                         reset_flag = true;
430
431                 buf_pair = &hw->ep_shm_info[epidx];
432
433                 spin_lock_irqsave(&hw->rx_status_lock, flags);
434                 fjes_hw_setup_epbuf(&buf_pair->tx,
435                                     netdev->dev_addr, netdev->mtu);
436                 spin_unlock_irqrestore(&hw->rx_status_lock, flags);
437
438                 clear_bit(epidx, &hw->txrx_stop_req_bit);
439         }
440
441         if (reset_flag || adapter->force_reset) {
442                 result = fjes_hw_reset(hw);
443
444                 adapter->force_reset = false;
445
446                 if (result)
447                         adapter->open_guard = true;
448
449                 hw->hw_info.buffer_share_bit = 0;
450
451                 memset((void *)&param, 0, sizeof(param));
452
453                 param.req_len = hw->hw_info.req_buf_size;
454                 param.req_start = __pa(hw->hw_info.req_buf);
455                 param.res_len = hw->hw_info.res_buf_size;
456                 param.res_start = __pa(hw->hw_info.res_buf);
457                 param.share_start = __pa(hw->hw_info.share->ep_status);
458
459                 fjes_hw_init_command_registers(hw, &param);
460         }
461 }
462
463 static void fjes_tx_stall_task(struct work_struct *work)
464 {
465         struct fjes_adapter *adapter = container_of(work,
466                         struct fjes_adapter, tx_stall_task);
467         struct net_device *netdev = adapter->netdev;
468         struct fjes_hw *hw = &adapter->hw;
469         int all_queue_available, sendable;
470         enum ep_partner_status pstatus;
471         int max_epid, my_epid, epid;
472         union ep_buffer_info *info;
473         int i;
474
475         if (((long)jiffies -
476                 dev_trans_start(netdev)) > FJES_TX_TX_STALL_TIMEOUT) {
477                 netif_wake_queue(netdev);
478                 return;
479         }
480
481         my_epid = hw->my_epid;
482         max_epid = hw->max_epid;
483
484         for (i = 0; i < 5; i++) {
485                 all_queue_available = 1;
486
487                 for (epid = 0; epid < max_epid; epid++) {
488                         if (my_epid == epid)
489                                 continue;
490
491                         pstatus = fjes_hw_get_partner_ep_status(hw, epid);
492                         sendable = (pstatus == EP_PARTNER_SHARED);
493                         if (!sendable)
494                                 continue;
495
496                         info = adapter->hw.ep_shm_info[epid].tx.info;
497
498                         if (!(info->v1i.rx_status & FJES_RX_MTU_CHANGING_DONE))
499                                 return;
500
501                         if (EP_RING_FULL(info->v1i.head, info->v1i.tail,
502                                          info->v1i.count_max)) {
503                                 all_queue_available = 0;
504                                 break;
505                         }
506                 }
507
508                 if (all_queue_available) {
509                         netif_wake_queue(netdev);
510                         return;
511                 }
512         }
513
514         usleep_range(50, 100);
515
516         queue_work(adapter->txrx_wq, &adapter->tx_stall_task);
517 }
518
519 static void fjes_force_close_task(struct work_struct *work)
520 {
521         struct fjes_adapter *adapter = container_of(work,
522                         struct fjes_adapter, force_close_task);
523         struct net_device *netdev = adapter->netdev;
524
525         rtnl_lock();
526         dev_close(netdev);
527         rtnl_unlock();
528 }
529
530 static void fjes_raise_intr_rxdata_task(struct work_struct *work)
531 {
532         struct fjes_adapter *adapter = container_of(work,
533                         struct fjes_adapter, raise_intr_rxdata_task);
534         struct fjes_hw *hw = &adapter->hw;
535         enum ep_partner_status pstatus;
536         int max_epid, my_epid, epid;
537
538         my_epid = hw->my_epid;
539         max_epid = hw->max_epid;
540
541         for (epid = 0; epid < max_epid; epid++)
542                 hw->ep_shm_info[epid].tx_status_work = 0;
543
544         for (epid = 0; epid < max_epid; epid++) {
545                 if (epid == my_epid)
546                         continue;
547
548                 pstatus = fjes_hw_get_partner_ep_status(hw, epid);
549                 if (pstatus == EP_PARTNER_SHARED) {
550                         hw->ep_shm_info[epid].tx_status_work =
551                                 hw->ep_shm_info[epid].tx.info->v1i.tx_status;
552
553                         if (hw->ep_shm_info[epid].tx_status_work ==
554                                 FJES_TX_DELAY_SEND_PENDING) {
555                                 hw->ep_shm_info[epid].tx.info->v1i.tx_status =
556                                         FJES_TX_DELAY_SEND_NONE;
557                         }
558                 }
559         }
560
561         for (epid = 0; epid < max_epid; epid++) {
562                 if (epid == my_epid)
563                         continue;
564
565                 pstatus = fjes_hw_get_partner_ep_status(hw, epid);
566                 if ((hw->ep_shm_info[epid].tx_status_work ==
567                      FJES_TX_DELAY_SEND_PENDING) &&
568                     (pstatus == EP_PARTNER_SHARED) &&
569                     !(hw->ep_shm_info[epid].rx.info->v1i.rx_status &
570                       FJES_RX_POLL_WORK)) {
571                         fjes_hw_raise_interrupt(hw, epid,
572                                                 REG_ICTL_MASK_RX_DATA);
573                 }
574         }
575
576         usleep_range(500, 1000);
577 }
578
579 static int fjes_tx_send(struct fjes_adapter *adapter, int dest,
580                         void *data, size_t len)
581 {
582         int retval;
583
584         retval = fjes_hw_epbuf_tx_pkt_send(&adapter->hw.ep_shm_info[dest].tx,
585                                            data, len);
586         if (retval)
587                 return retval;
588
589         adapter->hw.ep_shm_info[dest].tx.info->v1i.tx_status =
590                 FJES_TX_DELAY_SEND_PENDING;
591         if (!work_pending(&adapter->raise_intr_rxdata_task))
592                 queue_work(adapter->txrx_wq,
593                            &adapter->raise_intr_rxdata_task);
594
595         retval = 0;
596         return retval;
597 }
598
599 static netdev_tx_t
600 fjes_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
601 {
602         struct fjes_adapter *adapter = netdev_priv(netdev);
603         struct fjes_hw *hw = &adapter->hw;
604
605         int max_epid, my_epid, dest_epid;
606         enum ep_partner_status pstatus;
607         struct netdev_queue *cur_queue;
608         char shortpkt[VLAN_ETH_HLEN];
609         bool is_multi, vlan;
610         struct ethhdr *eth;
611         u16 queue_no = 0;
612         u16 vlan_id = 0;
613         netdev_tx_t ret;
614         char *data;
615         int len;
616
617         ret = NETDEV_TX_OK;
618         is_multi = false;
619         cur_queue = netdev_get_tx_queue(netdev, queue_no);
620
621         eth = (struct ethhdr *)skb->data;
622         my_epid = hw->my_epid;
623
624         vlan = (vlan_get_tag(skb, &vlan_id) == 0) ? true : false;
625
626         data = skb->data;
627         len = skb->len;
628
629         if (is_multicast_ether_addr(eth->h_dest)) {
630                 dest_epid = 0;
631                 max_epid = hw->max_epid;
632                 is_multi = true;
633         } else if (is_local_ether_addr(eth->h_dest)) {
634                 dest_epid = eth->h_dest[ETH_ALEN - 1];
635                 max_epid = dest_epid + 1;
636
637                 if ((eth->h_dest[0] == 0x02) &&
638                     (0x00 == (eth->h_dest[1] | eth->h_dest[2] |
639                               eth->h_dest[3] | eth->h_dest[4])) &&
640                     (dest_epid < hw->max_epid)) {
641                         ;
642                 } else {
643                         dest_epid = 0;
644                         max_epid = 0;
645                         ret = NETDEV_TX_OK;
646
647                         adapter->stats64.tx_packets += 1;
648                         hw->ep_shm_info[my_epid].net_stats.tx_packets += 1;
649                         adapter->stats64.tx_bytes += len;
650                         hw->ep_shm_info[my_epid].net_stats.tx_bytes += len;
651                 }
652         } else {
653                 dest_epid = 0;
654                 max_epid = 0;
655                 ret = NETDEV_TX_OK;
656
657                 adapter->stats64.tx_packets += 1;
658                 hw->ep_shm_info[my_epid].net_stats.tx_packets += 1;
659                 adapter->stats64.tx_bytes += len;
660                 hw->ep_shm_info[my_epid].net_stats.tx_bytes += len;
661         }
662
663         for (; dest_epid < max_epid; dest_epid++) {
664                 if (my_epid == dest_epid)
665                         continue;
666
667                 pstatus = fjes_hw_get_partner_ep_status(hw, dest_epid);
668                 if (pstatus != EP_PARTNER_SHARED) {
669                         ret = NETDEV_TX_OK;
670                 } else if (!fjes_hw_check_epbuf_version(
671                                 &adapter->hw.ep_shm_info[dest_epid].rx, 0)) {
672                         /* version is NOT 0 */
673                         adapter->stats64.tx_carrier_errors += 1;
674                         hw->ep_shm_info[dest_epid].net_stats
675                                                 .tx_carrier_errors += 1;
676
677                         ret = NETDEV_TX_OK;
678                 } else if (!fjes_hw_check_mtu(
679                                 &adapter->hw.ep_shm_info[dest_epid].rx,
680                                 netdev->mtu)) {
681                         adapter->stats64.tx_dropped += 1;
682                         hw->ep_shm_info[dest_epid].net_stats.tx_dropped += 1;
683                         adapter->stats64.tx_errors += 1;
684                         hw->ep_shm_info[dest_epid].net_stats.tx_errors += 1;
685
686                         ret = NETDEV_TX_OK;
687                 } else if (vlan &&
688                            !fjes_hw_check_vlan_id(
689                                 &adapter->hw.ep_shm_info[dest_epid].rx,
690                                 vlan_id)) {
691                         ret = NETDEV_TX_OK;
692                 } else {
693                         if (len < VLAN_ETH_HLEN) {
694                                 memset(shortpkt, 0, VLAN_ETH_HLEN);
695                                 memcpy(shortpkt, skb->data, skb->len);
696                                 len = VLAN_ETH_HLEN;
697                                 data = shortpkt;
698                         }
699
700                         if (adapter->tx_retry_count == 0) {
701                                 adapter->tx_start_jiffies = jiffies;
702                                 adapter->tx_retry_count = 1;
703                         } else {
704                                 adapter->tx_retry_count++;
705                         }
706
707                         if (fjes_tx_send(adapter, dest_epid, data, len)) {
708                                 if (is_multi) {
709                                         ret = NETDEV_TX_OK;
710                                 } else if (
711                                            ((long)jiffies -
712                                             (long)adapter->tx_start_jiffies) >=
713                                             FJES_TX_RETRY_TIMEOUT) {
714                                         adapter->stats64.tx_fifo_errors += 1;
715                                         hw->ep_shm_info[dest_epid].net_stats
716                                                                 .tx_fifo_errors += 1;
717                                         adapter->stats64.tx_errors += 1;
718                                         hw->ep_shm_info[dest_epid].net_stats
719                                                                 .tx_errors += 1;
720
721                                         ret = NETDEV_TX_OK;
722                                 } else {
723                                         netif_trans_update(netdev);
724                                         netif_tx_stop_queue(cur_queue);
725
726                                         if (!work_pending(&adapter->tx_stall_task))
727                                                 queue_work(adapter->txrx_wq,
728                                                            &adapter->tx_stall_task);
729
730                                         ret = NETDEV_TX_BUSY;
731                                 }
732                         } else {
733                                 if (!is_multi) {
734                                         adapter->stats64.tx_packets += 1;
735                                         hw->ep_shm_info[dest_epid].net_stats
736                                                                 .tx_packets += 1;
737                                         adapter->stats64.tx_bytes += len;
738                                         hw->ep_shm_info[dest_epid].net_stats
739                                                                 .tx_bytes += len;
740                                 }
741
742                                 adapter->tx_retry_count = 0;
743                                 ret = NETDEV_TX_OK;
744                         }
745                 }
746         }
747
748         if (ret == NETDEV_TX_OK) {
749                 dev_kfree_skb(skb);
750                 if (is_multi) {
751                         adapter->stats64.tx_packets += 1;
752                         hw->ep_shm_info[my_epid].net_stats.tx_packets += 1;
753                         adapter->stats64.tx_bytes += 1;
754                         hw->ep_shm_info[my_epid].net_stats.tx_bytes += len;
755                 }
756         }
757
758         return ret;
759 }
760
761 static void fjes_tx_retry(struct net_device *netdev)
762 {
763         struct netdev_queue *queue = netdev_get_tx_queue(netdev, 0);
764
765         netif_tx_wake_queue(queue);
766 }
767
768 static struct rtnl_link_stats64 *
769 fjes_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats)
770 {
771         struct fjes_adapter *adapter = netdev_priv(netdev);
772
773         memcpy(stats, &adapter->stats64, sizeof(struct rtnl_link_stats64));
774
775         return stats;
776 }
777
778 static int fjes_change_mtu(struct net_device *netdev, int new_mtu)
779 {
780         struct fjes_adapter *adapter = netdev_priv(netdev);
781         bool running = netif_running(netdev);
782         struct fjes_hw *hw = &adapter->hw;
783         unsigned long flags;
784         int ret = -EINVAL;
785         int idx, epidx;
786
787         for (idx = 0; fjes_support_mtu[idx] != 0; idx++) {
788                 if (new_mtu <= fjes_support_mtu[idx]) {
789                         new_mtu = fjes_support_mtu[idx];
790                         if (new_mtu == netdev->mtu)
791                                 return 0;
792
793                         ret = 0;
794                         break;
795                 }
796         }
797
798         if (ret)
799                 return ret;
800
801         if (running) {
802                 spin_lock_irqsave(&hw->rx_status_lock, flags);
803                 for (epidx = 0; epidx < hw->max_epid; epidx++) {
804                         if (epidx == hw->my_epid)
805                                 continue;
806                         hw->ep_shm_info[epidx].tx.info->v1i.rx_status &=
807                                 ~FJES_RX_MTU_CHANGING_DONE;
808                 }
809                 spin_unlock_irqrestore(&hw->rx_status_lock, flags);
810
811                 netif_tx_stop_all_queues(netdev);
812                 netif_carrier_off(netdev);
813                 cancel_work_sync(&adapter->tx_stall_task);
814                 napi_disable(&adapter->napi);
815
816                 msleep(1000);
817
818                 netif_tx_stop_all_queues(netdev);
819         }
820
821         netdev->mtu = new_mtu;
822
823         if (running) {
824                 for (epidx = 0; epidx < hw->max_epid; epidx++) {
825                         if (epidx == hw->my_epid)
826                                 continue;
827
828                         spin_lock_irqsave(&hw->rx_status_lock, flags);
829                         fjes_hw_setup_epbuf(&hw->ep_shm_info[epidx].tx,
830                                             netdev->dev_addr,
831                                             netdev->mtu);
832
833                         hw->ep_shm_info[epidx].tx.info->v1i.rx_status |=
834                                 FJES_RX_MTU_CHANGING_DONE;
835                         spin_unlock_irqrestore(&hw->rx_status_lock, flags);
836                 }
837
838                 netif_tx_wake_all_queues(netdev);
839                 netif_carrier_on(netdev);
840                 napi_enable(&adapter->napi);
841                 napi_schedule(&adapter->napi);
842         }
843
844         return ret;
845 }
846
847 static int fjes_vlan_rx_add_vid(struct net_device *netdev,
848                                 __be16 proto, u16 vid)
849 {
850         struct fjes_adapter *adapter = netdev_priv(netdev);
851         bool ret = true;
852         int epid;
853
854         for (epid = 0; epid < adapter->hw.max_epid; epid++) {
855                 if (epid == adapter->hw.my_epid)
856                         continue;
857
858                 if (!fjes_hw_check_vlan_id(
859                         &adapter->hw.ep_shm_info[epid].tx, vid))
860                         ret = fjes_hw_set_vlan_id(
861                                 &adapter->hw.ep_shm_info[epid].tx, vid);
862         }
863
864         return ret ? 0 : -ENOSPC;
865 }
866
867 static int fjes_vlan_rx_kill_vid(struct net_device *netdev,
868                                  __be16 proto, u16 vid)
869 {
870         struct fjes_adapter *adapter = netdev_priv(netdev);
871         int epid;
872
873         for (epid = 0; epid < adapter->hw.max_epid; epid++) {
874                 if (epid == adapter->hw.my_epid)
875                         continue;
876
877                 fjes_hw_del_vlan_id(&adapter->hw.ep_shm_info[epid].tx, vid);
878         }
879
880         return 0;
881 }
882
883 static void fjes_txrx_stop_req_irq(struct fjes_adapter *adapter,
884                                    int src_epid)
885 {
886         struct fjes_hw *hw = &adapter->hw;
887         enum ep_partner_status status;
888         unsigned long flags;
889
890         status = fjes_hw_get_partner_ep_status(hw, src_epid);
891         switch (status) {
892         case EP_PARTNER_UNSHARE:
893         case EP_PARTNER_COMPLETE:
894         default:
895                 break;
896         case EP_PARTNER_WAITING:
897                 if (src_epid < hw->my_epid) {
898                         spin_lock_irqsave(&hw->rx_status_lock, flags);
899                         hw->ep_shm_info[src_epid].tx.info->v1i.rx_status |=
900                                 FJES_RX_STOP_REQ_DONE;
901                         spin_unlock_irqrestore(&hw->rx_status_lock, flags);
902
903                         clear_bit(src_epid, &hw->txrx_stop_req_bit);
904                         set_bit(src_epid, &adapter->unshare_watch_bitmask);
905
906                         if (!work_pending(&adapter->unshare_watch_task))
907                                 queue_work(adapter->control_wq,
908                                            &adapter->unshare_watch_task);
909                 }
910                 break;
911         case EP_PARTNER_SHARED:
912                 if (hw->ep_shm_info[src_epid].rx.info->v1i.rx_status &
913                     FJES_RX_STOP_REQ_REQUEST) {
914                         set_bit(src_epid, &hw->epstop_req_bit);
915                         if (!work_pending(&hw->epstop_task))
916                                 queue_work(adapter->control_wq,
917                                            &hw->epstop_task);
918                 }
919                 break;
920         }
921 }
922
923 static void fjes_stop_req_irq(struct fjes_adapter *adapter, int src_epid)
924 {
925         struct fjes_hw *hw = &adapter->hw;
926         enum ep_partner_status status;
927         unsigned long flags;
928
929         set_bit(src_epid, &hw->hw_info.buffer_unshare_reserve_bit);
930
931         status = fjes_hw_get_partner_ep_status(hw, src_epid);
932         switch (status) {
933         case EP_PARTNER_WAITING:
934                 spin_lock_irqsave(&hw->rx_status_lock, flags);
935                 hw->ep_shm_info[src_epid].tx.info->v1i.rx_status |=
936                                 FJES_RX_STOP_REQ_DONE;
937                 spin_unlock_irqrestore(&hw->rx_status_lock, flags);
938                 clear_bit(src_epid, &hw->txrx_stop_req_bit);
939                 /* fall through */
940         case EP_PARTNER_UNSHARE:
941         case EP_PARTNER_COMPLETE:
942         default:
943                 set_bit(src_epid, &adapter->unshare_watch_bitmask);
944                 if (!work_pending(&adapter->unshare_watch_task))
945                         queue_work(adapter->control_wq,
946                                    &adapter->unshare_watch_task);
947                 break;
948         case EP_PARTNER_SHARED:
949                 set_bit(src_epid, &hw->epstop_req_bit);
950
951                 if (!work_pending(&hw->epstop_task))
952                         queue_work(adapter->control_wq, &hw->epstop_task);
953                 break;
954         }
955 }
956
957 static void fjes_update_zone_irq(struct fjes_adapter *adapter,
958                                  int src_epid)
959 {
960         struct fjes_hw *hw = &adapter->hw;
961
962         if (!work_pending(&hw->update_zone_task))
963                 queue_work(adapter->control_wq, &hw->update_zone_task);
964 }
965
966 static irqreturn_t fjes_intr(int irq, void *data)
967 {
968         struct fjes_adapter *adapter = data;
969         struct fjes_hw *hw = &adapter->hw;
970         irqreturn_t ret;
971         u32 icr;
972
973         icr = fjes_hw_capture_interrupt_status(hw);
974
975         if (icr & REG_IS_MASK_IS_ASSERT) {
976                 if (icr & REG_ICTL_MASK_RX_DATA)
977                         fjes_rx_irq(adapter, icr & REG_IS_MASK_EPID);
978
979                 if (icr & REG_ICTL_MASK_DEV_STOP_REQ)
980                         fjes_stop_req_irq(adapter, icr & REG_IS_MASK_EPID);
981
982                 if (icr & REG_ICTL_MASK_TXRX_STOP_REQ)
983                         fjes_txrx_stop_req_irq(adapter, icr & REG_IS_MASK_EPID);
984
985                 if (icr & REG_ICTL_MASK_TXRX_STOP_DONE)
986                         fjes_hw_set_irqmask(hw,
987                                             REG_ICTL_MASK_TXRX_STOP_DONE, true);
988
989                 if (icr & REG_ICTL_MASK_INFO_UPDATE)
990                         fjes_update_zone_irq(adapter, icr & REG_IS_MASK_EPID);
991
992                 ret = IRQ_HANDLED;
993         } else {
994                 ret = IRQ_NONE;
995         }
996
997         return ret;
998 }
999
1000 static int fjes_rxframe_search_exist(struct fjes_adapter *adapter,
1001                                      int start_epid)
1002 {
1003         struct fjes_hw *hw = &adapter->hw;
1004         enum ep_partner_status pstatus;
1005         int max_epid, cur_epid;
1006         int i;
1007
1008         max_epid = hw->max_epid;
1009         start_epid = (start_epid + 1 + max_epid) % max_epid;
1010
1011         for (i = 0; i < max_epid; i++) {
1012                 cur_epid = (start_epid + i) % max_epid;
1013                 if (cur_epid == hw->my_epid)
1014                         continue;
1015
1016                 pstatus = fjes_hw_get_partner_ep_status(hw, cur_epid);
1017                 if (pstatus == EP_PARTNER_SHARED) {
1018                         if (!fjes_hw_epbuf_rx_is_empty(
1019                                 &hw->ep_shm_info[cur_epid].rx))
1020                                 return cur_epid;
1021                 }
1022         }
1023         return -1;
1024 }
1025
1026 static void *fjes_rxframe_get(struct fjes_adapter *adapter, size_t *psize,
1027                               int *cur_epid)
1028 {
1029         void *frame;
1030
1031         *cur_epid = fjes_rxframe_search_exist(adapter, *cur_epid);
1032         if (*cur_epid < 0)
1033                 return NULL;
1034
1035         frame =
1036         fjes_hw_epbuf_rx_curpkt_get_addr(
1037                 &adapter->hw.ep_shm_info[*cur_epid].rx, psize);
1038
1039         return frame;
1040 }
1041
1042 static void fjes_rxframe_release(struct fjes_adapter *adapter, int cur_epid)
1043 {
1044         fjes_hw_epbuf_rx_curpkt_drop(&adapter->hw.ep_shm_info[cur_epid].rx);
1045 }
1046
1047 static void fjes_rx_irq(struct fjes_adapter *adapter, int src_epid)
1048 {
1049         struct fjes_hw *hw = &adapter->hw;
1050
1051         fjes_hw_set_irqmask(hw, REG_ICTL_MASK_RX_DATA, true);
1052
1053         adapter->unset_rx_last = true;
1054         napi_schedule(&adapter->napi);
1055 }
1056
1057 static int fjes_poll(struct napi_struct *napi, int budget)
1058 {
1059         struct fjes_adapter *adapter =
1060                         container_of(napi, struct fjes_adapter, napi);
1061         struct net_device *netdev = napi->dev;
1062         struct fjes_hw *hw = &adapter->hw;
1063         struct sk_buff *skb;
1064         int work_done = 0;
1065         int cur_epid = 0;
1066         int epidx;
1067         size_t frame_len;
1068         void *frame;
1069
1070         spin_lock(&hw->rx_status_lock);
1071         for (epidx = 0; epidx < hw->max_epid; epidx++) {
1072                 if (epidx == hw->my_epid)
1073                         continue;
1074
1075                 if (fjes_hw_get_partner_ep_status(hw, epidx) ==
1076                     EP_PARTNER_SHARED)
1077                         adapter->hw.ep_shm_info[epidx]
1078                                    .tx.info->v1i.rx_status |= FJES_RX_POLL_WORK;
1079         }
1080         spin_unlock(&hw->rx_status_lock);
1081
1082         while (work_done < budget) {
1083                 prefetch(&adapter->hw);
1084                 frame = fjes_rxframe_get(adapter, &frame_len, &cur_epid);
1085
1086                 if (frame) {
1087                         skb = napi_alloc_skb(napi, frame_len);
1088                         if (!skb) {
1089                                 adapter->stats64.rx_dropped += 1;
1090                                 hw->ep_shm_info[cur_epid].net_stats
1091                                                          .rx_dropped += 1;
1092                                 adapter->stats64.rx_errors += 1;
1093                                 hw->ep_shm_info[cur_epid].net_stats
1094                                                          .rx_errors += 1;
1095                         } else {
1096                                 memcpy(skb_put(skb, frame_len),
1097                                        frame, frame_len);
1098                                 skb->protocol = eth_type_trans(skb, netdev);
1099                                 skb->ip_summed = CHECKSUM_UNNECESSARY;
1100
1101                                 netif_receive_skb(skb);
1102
1103                                 work_done++;
1104
1105                                 adapter->stats64.rx_packets += 1;
1106                                 hw->ep_shm_info[cur_epid].net_stats
1107                                                          .rx_packets += 1;
1108                                 adapter->stats64.rx_bytes += frame_len;
1109                                 hw->ep_shm_info[cur_epid].net_stats
1110                                                          .rx_bytes += frame_len;
1111
1112                                 if (is_multicast_ether_addr(
1113                                         ((struct ethhdr *)frame)->h_dest)) {
1114                                         adapter->stats64.multicast += 1;
1115                                         hw->ep_shm_info[cur_epid].net_stats
1116                                                                  .multicast += 1;
1117                                 }
1118                         }
1119
1120                         fjes_rxframe_release(adapter, cur_epid);
1121                         adapter->unset_rx_last = true;
1122                 } else {
1123                         break;
1124                 }
1125         }
1126
1127         if (work_done < budget) {
1128                 napi_complete(napi);
1129
1130                 if (adapter->unset_rx_last) {
1131                         adapter->rx_last_jiffies = jiffies;
1132                         adapter->unset_rx_last = false;
1133                 }
1134
1135                 if (((long)jiffies - (long)adapter->rx_last_jiffies) < 3) {
1136                         napi_reschedule(napi);
1137                 } else {
1138                         spin_lock(&hw->rx_status_lock);
1139                         for (epidx = 0; epidx < hw->max_epid; epidx++) {
1140                                 if (epidx == hw->my_epid)
1141                                         continue;
1142                                 if (fjes_hw_get_partner_ep_status(hw, epidx) ==
1143                                     EP_PARTNER_SHARED)
1144                                         adapter->hw.ep_shm_info[epidx].tx
1145                                                    .info->v1i.rx_status &=
1146                                                 ~FJES_RX_POLL_WORK;
1147                         }
1148                         spin_unlock(&hw->rx_status_lock);
1149
1150                         fjes_hw_set_irqmask(hw, REG_ICTL_MASK_RX_DATA, false);
1151                 }
1152         }
1153
1154         return work_done;
1155 }
1156
1157 /* fjes_probe - Device Initialization Routine */
1158 static int fjes_probe(struct platform_device *plat_dev)
1159 {
1160         struct fjes_adapter *adapter;
1161         struct net_device *netdev;
1162         struct resource *res;
1163         struct fjes_hw *hw;
1164         int err;
1165
1166         err = -ENOMEM;
1167         netdev = alloc_netdev_mq(sizeof(struct fjes_adapter), "es%d",
1168                                  NET_NAME_UNKNOWN, fjes_netdev_setup,
1169                                  FJES_MAX_QUEUES);
1170
1171         if (!netdev)
1172                 goto err_out;
1173
1174         SET_NETDEV_DEV(netdev, &plat_dev->dev);
1175
1176         dev_set_drvdata(&plat_dev->dev, netdev);
1177         adapter = netdev_priv(netdev);
1178         adapter->netdev = netdev;
1179         adapter->plat_dev = plat_dev;
1180         hw = &adapter->hw;
1181         hw->back = adapter;
1182
1183         /* setup the private structure */
1184         err = fjes_sw_init(adapter);
1185         if (err)
1186                 goto err_free_netdev;
1187
1188         INIT_WORK(&adapter->force_close_task, fjes_force_close_task);
1189         adapter->force_reset = false;
1190         adapter->open_guard = false;
1191
1192         adapter->txrx_wq = alloc_workqueue(DRV_NAME "/txrx", WQ_MEM_RECLAIM, 0);
1193         if (unlikely(!adapter->txrx_wq)) {
1194                 err = -ENOMEM;
1195                 goto err_free_netdev;
1196         }
1197
1198         adapter->control_wq = alloc_workqueue(DRV_NAME "/control",
1199                                               WQ_MEM_RECLAIM, 0);
1200         if (unlikely(!adapter->control_wq)) {
1201                 err = -ENOMEM;
1202                 goto err_free_txrx_wq;
1203         }
1204
1205         INIT_WORK(&adapter->tx_stall_task, fjes_tx_stall_task);
1206         INIT_WORK(&adapter->raise_intr_rxdata_task,
1207                   fjes_raise_intr_rxdata_task);
1208         INIT_WORK(&adapter->unshare_watch_task, fjes_watch_unshare_task);
1209         adapter->unshare_watch_bitmask = 0;
1210
1211         INIT_DELAYED_WORK(&adapter->interrupt_watch_task, fjes_irq_watch_task);
1212         adapter->interrupt_watch_enable = false;
1213
1214         res = platform_get_resource(plat_dev, IORESOURCE_MEM, 0);
1215         if (!res) {
1216                 err = -EINVAL;
1217                 goto err_free_control_wq;
1218         }
1219         hw->hw_res.start = res->start;
1220         hw->hw_res.size = resource_size(res);
1221         hw->hw_res.irq = platform_get_irq(plat_dev, 0);
1222         if (hw->hw_res.irq < 0) {
1223                 err = hw->hw_res.irq;
1224                 goto err_free_control_wq;
1225         }
1226
1227         err = fjes_hw_init(&adapter->hw);
1228         if (err)
1229                 goto err_free_control_wq;
1230
1231         /* setup MAC address (02:00:00:00:00:[epid])*/
1232         netdev->dev_addr[0] = 2;
1233         netdev->dev_addr[1] = 0;
1234         netdev->dev_addr[2] = 0;
1235         netdev->dev_addr[3] = 0;
1236         netdev->dev_addr[4] = 0;
1237         netdev->dev_addr[5] = hw->my_epid; /* EPID */
1238
1239         err = register_netdev(netdev);
1240         if (err)
1241                 goto err_hw_exit;
1242
1243         netif_carrier_off(netdev);
1244
1245         return 0;
1246
1247 err_hw_exit:
1248         fjes_hw_exit(&adapter->hw);
1249 err_free_control_wq:
1250         destroy_workqueue(adapter->control_wq);
1251 err_free_txrx_wq:
1252         destroy_workqueue(adapter->txrx_wq);
1253 err_free_netdev:
1254         free_netdev(netdev);
1255 err_out:
1256         return err;
1257 }
1258
1259 /* fjes_remove - Device Removal Routine */
1260 static int fjes_remove(struct platform_device *plat_dev)
1261 {
1262         struct net_device *netdev = dev_get_drvdata(&plat_dev->dev);
1263         struct fjes_adapter *adapter = netdev_priv(netdev);
1264         struct fjes_hw *hw = &adapter->hw;
1265
1266         cancel_delayed_work_sync(&adapter->interrupt_watch_task);
1267         cancel_work_sync(&adapter->unshare_watch_task);
1268         cancel_work_sync(&adapter->raise_intr_rxdata_task);
1269         cancel_work_sync(&adapter->tx_stall_task);
1270         if (adapter->control_wq)
1271                 destroy_workqueue(adapter->control_wq);
1272         if (adapter->txrx_wq)
1273                 destroy_workqueue(adapter->txrx_wq);
1274
1275         unregister_netdev(netdev);
1276
1277         fjes_hw_exit(hw);
1278
1279         netif_napi_del(&adapter->napi);
1280
1281         free_netdev(netdev);
1282
1283         return 0;
1284 }
1285
1286 static int fjes_sw_init(struct fjes_adapter *adapter)
1287 {
1288         struct net_device *netdev = adapter->netdev;
1289
1290         netif_napi_add(netdev, &adapter->napi, fjes_poll, 64);
1291
1292         return 0;
1293 }
1294
1295 /* fjes_netdev_setup - netdevice initialization routine */
1296 static void fjes_netdev_setup(struct net_device *netdev)
1297 {
1298         ether_setup(netdev);
1299
1300         netdev->watchdog_timeo = FJES_TX_RETRY_INTERVAL;
1301         netdev->netdev_ops = &fjes_netdev_ops;
1302         fjes_set_ethtool_ops(netdev);
1303         netdev->mtu = fjes_support_mtu[3];
1304         netdev->flags |= IFF_BROADCAST;
1305         netdev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
1306 }
1307
1308 static void fjes_irq_watch_task(struct work_struct *work)
1309 {
1310         struct fjes_adapter *adapter = container_of(to_delayed_work(work),
1311                         struct fjes_adapter, interrupt_watch_task);
1312
1313         local_irq_disable();
1314         fjes_intr(adapter->hw.hw_res.irq, adapter);
1315         local_irq_enable();
1316
1317         if (fjes_rxframe_search_exist(adapter, 0) >= 0)
1318                 napi_schedule(&adapter->napi);
1319
1320         if (adapter->interrupt_watch_enable) {
1321                 if (!delayed_work_pending(&adapter->interrupt_watch_task))
1322                         queue_delayed_work(adapter->control_wq,
1323                                            &adapter->interrupt_watch_task,
1324                                            FJES_IRQ_WATCH_DELAY);
1325         }
1326 }
1327
1328 static void fjes_watch_unshare_task(struct work_struct *work)
1329 {
1330         struct fjes_adapter *adapter =
1331         container_of(work, struct fjes_adapter, unshare_watch_task);
1332
1333         struct net_device *netdev = adapter->netdev;
1334         struct fjes_hw *hw = &adapter->hw;
1335
1336         int unshare_watch, unshare_reserve;
1337         int max_epid, my_epid, epidx;
1338         int stop_req, stop_req_done;
1339         ulong unshare_watch_bitmask;
1340         unsigned long flags;
1341         int wait_time = 0;
1342         int is_shared;
1343         int ret;
1344
1345         my_epid = hw->my_epid;
1346         max_epid = hw->max_epid;
1347
1348         unshare_watch_bitmask = adapter->unshare_watch_bitmask;
1349         adapter->unshare_watch_bitmask = 0;
1350
1351         while ((unshare_watch_bitmask || hw->txrx_stop_req_bit) &&
1352                (wait_time < 3000)) {
1353                 for (epidx = 0; epidx < hw->max_epid; epidx++) {
1354                         if (epidx == hw->my_epid)
1355                                 continue;
1356
1357                         is_shared = fjes_hw_epid_is_shared(hw->hw_info.share,
1358                                                            epidx);
1359
1360                         stop_req = test_bit(epidx, &hw->txrx_stop_req_bit);
1361
1362                         stop_req_done = hw->ep_shm_info[epidx].rx.info->v1i.rx_status &
1363                                         FJES_RX_STOP_REQ_DONE;
1364
1365                         unshare_watch = test_bit(epidx, &unshare_watch_bitmask);
1366
1367                         unshare_reserve = test_bit(epidx,
1368                                                    &hw->hw_info.buffer_unshare_reserve_bit);
1369
1370                         if ((!stop_req ||
1371                              (is_shared && (!is_shared || !stop_req_done))) &&
1372                             (is_shared || !unshare_watch || !unshare_reserve))
1373                                 continue;
1374
1375                         mutex_lock(&hw->hw_info.lock);
1376                         ret = fjes_hw_unregister_buff_addr(hw, epidx);
1377                         switch (ret) {
1378                         case 0:
1379                                 break;
1380                         case -ENOMSG:
1381                         case -EBUSY:
1382                         default:
1383                                 if (!work_pending(
1384                                         &adapter->force_close_task)) {
1385                                         adapter->force_reset = true;
1386                                         schedule_work(
1387                                                 &adapter->force_close_task);
1388                                 }
1389                                 break;
1390                         }
1391                         mutex_unlock(&hw->hw_info.lock);
1392
1393                         spin_lock_irqsave(&hw->rx_status_lock, flags);
1394                         fjes_hw_setup_epbuf(&hw->ep_shm_info[epidx].tx,
1395                                             netdev->dev_addr, netdev->mtu);
1396                         spin_unlock_irqrestore(&hw->rx_status_lock, flags);
1397
1398                         clear_bit(epidx, &hw->txrx_stop_req_bit);
1399                         clear_bit(epidx, &unshare_watch_bitmask);
1400                         clear_bit(epidx,
1401                                   &hw->hw_info.buffer_unshare_reserve_bit);
1402                 }
1403
1404                 msleep(100);
1405                 wait_time += 100;
1406         }
1407
1408         if (hw->hw_info.buffer_unshare_reserve_bit) {
1409                 for (epidx = 0; epidx < hw->max_epid; epidx++) {
1410                         if (epidx == hw->my_epid)
1411                                 continue;
1412
1413                         if (test_bit(epidx,
1414                                      &hw->hw_info.buffer_unshare_reserve_bit)) {
1415                                 mutex_lock(&hw->hw_info.lock);
1416
1417                                 ret = fjes_hw_unregister_buff_addr(hw, epidx);
1418                                 switch (ret) {
1419                                 case 0:
1420                                         break;
1421                                 case -ENOMSG:
1422                                 case -EBUSY:
1423                                 default:
1424                                         if (!work_pending(
1425                                                 &adapter->force_close_task)) {
1426                                                 adapter->force_reset = true;
1427                                                 schedule_work(
1428                                                         &adapter->force_close_task);
1429                                         }
1430                                         break;
1431                                 }
1432                                 mutex_unlock(&hw->hw_info.lock);
1433
1434                                 spin_lock_irqsave(&hw->rx_status_lock, flags);
1435                                 fjes_hw_setup_epbuf(
1436                                         &hw->ep_shm_info[epidx].tx,
1437                                         netdev->dev_addr, netdev->mtu);
1438                                 spin_unlock_irqrestore(&hw->rx_status_lock,
1439                                                        flags);
1440
1441                                 clear_bit(epidx, &hw->txrx_stop_req_bit);
1442                                 clear_bit(epidx, &unshare_watch_bitmask);
1443                                 clear_bit(epidx, &hw->hw_info.buffer_unshare_reserve_bit);
1444                         }
1445
1446                         if (test_bit(epidx, &unshare_watch_bitmask)) {
1447                                 spin_lock_irqsave(&hw->rx_status_lock, flags);
1448                                 hw->ep_shm_info[epidx].tx.info->v1i.rx_status &=
1449                                                 ~FJES_RX_STOP_REQ_DONE;
1450                                 spin_unlock_irqrestore(&hw->rx_status_lock,
1451                                                        flags);
1452                         }
1453                 }
1454         }
1455 }
1456
1457 /* fjes_init_module - Driver Registration Routine */
1458 static int __init fjes_init_module(void)
1459 {
1460         int result;
1461
1462         pr_info("%s - version %s - %s\n",
1463                 fjes_driver_string, fjes_driver_version, fjes_copyright);
1464
1465         result = platform_driver_register(&fjes_driver);
1466         if (result < 0)
1467                 return result;
1468
1469         result = acpi_bus_register_driver(&fjes_acpi_driver);
1470         if (result < 0)
1471                 goto fail_acpi_driver;
1472
1473         return 0;
1474
1475 fail_acpi_driver:
1476         platform_driver_unregister(&fjes_driver);
1477         return result;
1478 }
1479
1480 module_init(fjes_init_module);
1481
1482 /* fjes_exit_module - Driver Exit Cleanup Routine */
1483 static void __exit fjes_exit_module(void)
1484 {
1485         acpi_bus_unregister_driver(&fjes_acpi_driver);
1486         platform_driver_unregister(&fjes_driver);
1487 }
1488
1489 module_exit(fjes_exit_module);