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