net/qlge: Convert to SPDX license identifiers
[linux-2.6-microblaze.git] / drivers / staging / qlge / qlge_main.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * QLogic qlge NIC HBA Driver
4  * Copyright (c)  2003-2008 QLogic Corporation
5  * Author:     Linux qlge network device driver by
6  *                      Ron Mercer <ron.mercer@qlogic.com>
7  */
8 #include <linux/kernel.h>
9 #include <linux/bitops.h>
10 #include <linux/types.h>
11 #include <linux/module.h>
12 #include <linux/list.h>
13 #include <linux/pci.h>
14 #include <linux/dma-mapping.h>
15 #include <linux/pagemap.h>
16 #include <linux/sched.h>
17 #include <linux/slab.h>
18 #include <linux/dmapool.h>
19 #include <linux/mempool.h>
20 #include <linux/spinlock.h>
21 #include <linux/kthread.h>
22 #include <linux/interrupt.h>
23 #include <linux/errno.h>
24 #include <linux/ioport.h>
25 #include <linux/in.h>
26 #include <linux/ip.h>
27 #include <linux/ipv6.h>
28 #include <net/ipv6.h>
29 #include <linux/tcp.h>
30 #include <linux/udp.h>
31 #include <linux/if_arp.h>
32 #include <linux/if_ether.h>
33 #include <linux/netdevice.h>
34 #include <linux/etherdevice.h>
35 #include <linux/ethtool.h>
36 #include <linux/if_vlan.h>
37 #include <linux/skbuff.h>
38 #include <linux/delay.h>
39 #include <linux/mm.h>
40 #include <linux/vmalloc.h>
41 #include <linux/prefetch.h>
42 #include <net/ip6_checksum.h>
43
44 #include "qlge.h"
45
46 char qlge_driver_name[] = DRV_NAME;
47 const char qlge_driver_version[] = DRV_VERSION;
48
49 MODULE_AUTHOR("Ron Mercer <ron.mercer@qlogic.com>");
50 MODULE_DESCRIPTION(DRV_STRING " ");
51 MODULE_LICENSE("GPL");
52 MODULE_VERSION(DRV_VERSION);
53
54 static const u32 default_msg =
55         NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK |
56         NETIF_MSG_IFDOWN |
57         NETIF_MSG_IFUP |
58         NETIF_MSG_RX_ERR |
59         NETIF_MSG_TX_ERR |
60         NETIF_MSG_HW | NETIF_MSG_WOL | 0;
61
62 static int debug = -1;  /* defaults above */
63 module_param(debug, int, 0664);
64 MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
65
66 #define MSIX_IRQ 0
67 #define MSI_IRQ 1
68 #define LEG_IRQ 2
69 static int qlge_irq_type = MSIX_IRQ;
70 module_param(qlge_irq_type, int, 0664);
71 MODULE_PARM_DESC(qlge_irq_type, "0 = MSI-X, 1 = MSI, 2 = Legacy.");
72
73 static int qlge_mpi_coredump;
74 module_param(qlge_mpi_coredump, int, 0);
75 MODULE_PARM_DESC(qlge_mpi_coredump,
76                  "Option to enable MPI firmware dump. Default is OFF - Do Not allocate memory. ");
77
78 static int qlge_force_coredump;
79 module_param(qlge_force_coredump, int, 0);
80 MODULE_PARM_DESC(qlge_force_coredump,
81                  "Option to allow force of firmware core dump. Default is OFF - Do not allow.");
82
83 static const struct pci_device_id qlge_pci_tbl[] = {
84         {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QLGE_DEVICE_ID_8012)},
85         {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, QLGE_DEVICE_ID_8000)},
86         /* required last entry */
87         {0,}
88 };
89
90 MODULE_DEVICE_TABLE(pci, qlge_pci_tbl);
91
92 static int ql_wol(struct ql_adapter *);
93 static void qlge_set_multicast_list(struct net_device *);
94 static int ql_adapter_down(struct ql_adapter *);
95 static int ql_adapter_up(struct ql_adapter *);
96
97 /* This hardware semaphore causes exclusive access to
98  * resources shared between the NIC driver, MPI firmware,
99  * FCOE firmware and the FC driver.
100  */
101 static int ql_sem_trylock(struct ql_adapter *qdev, u32 sem_mask)
102 {
103         u32 sem_bits = 0;
104
105         switch (sem_mask) {
106         case SEM_XGMAC0_MASK:
107                 sem_bits = SEM_SET << SEM_XGMAC0_SHIFT;
108                 break;
109         case SEM_XGMAC1_MASK:
110                 sem_bits = SEM_SET << SEM_XGMAC1_SHIFT;
111                 break;
112         case SEM_ICB_MASK:
113                 sem_bits = SEM_SET << SEM_ICB_SHIFT;
114                 break;
115         case SEM_MAC_ADDR_MASK:
116                 sem_bits = SEM_SET << SEM_MAC_ADDR_SHIFT;
117                 break;
118         case SEM_FLASH_MASK:
119                 sem_bits = SEM_SET << SEM_FLASH_SHIFT;
120                 break;
121         case SEM_PROBE_MASK:
122                 sem_bits = SEM_SET << SEM_PROBE_SHIFT;
123                 break;
124         case SEM_RT_IDX_MASK:
125                 sem_bits = SEM_SET << SEM_RT_IDX_SHIFT;
126                 break;
127         case SEM_PROC_REG_MASK:
128                 sem_bits = SEM_SET << SEM_PROC_REG_SHIFT;
129                 break;
130         default:
131                 netif_alert(qdev, probe, qdev->ndev, "bad Semaphore mask!.\n");
132                 return -EINVAL;
133         }
134
135         ql_write32(qdev, SEM, sem_bits | sem_mask);
136         return !(ql_read32(qdev, SEM) & sem_bits);
137 }
138
139 int ql_sem_spinlock(struct ql_adapter *qdev, u32 sem_mask)
140 {
141         unsigned int wait_count = 30;
142
143         do {
144                 if (!ql_sem_trylock(qdev, sem_mask))
145                         return 0;
146                 udelay(100);
147         } while (--wait_count);
148         return -ETIMEDOUT;
149 }
150
151 void ql_sem_unlock(struct ql_adapter *qdev, u32 sem_mask)
152 {
153         ql_write32(qdev, SEM, sem_mask);
154         ql_read32(qdev, SEM);   /* flush */
155 }
156
157 /* This function waits for a specific bit to come ready
158  * in a given register.  It is used mostly by the initialize
159  * process, but is also used in kernel thread API such as
160  * netdev->set_multi, netdev->set_mac_address, netdev->vlan_rx_add_vid.
161  */
162 int ql_wait_reg_rdy(struct ql_adapter *qdev, u32 reg, u32 bit, u32 err_bit)
163 {
164         u32 temp;
165         int count;
166
167         for (count = 0; count < UDELAY_COUNT; count++) {
168                 temp = ql_read32(qdev, reg);
169
170                 /* check for errors */
171                 if (temp & err_bit) {
172                         netif_alert(qdev, probe, qdev->ndev,
173                                     "register 0x%.08x access error, value = 0x%.08x!.\n",
174                                     reg, temp);
175                         return -EIO;
176                 } else if (temp & bit) {
177                         return 0;
178                 }
179                 udelay(UDELAY_DELAY);
180         }
181         netif_alert(qdev, probe, qdev->ndev,
182                     "Timed out waiting for reg %x to come ready.\n", reg);
183         return -ETIMEDOUT;
184 }
185
186 /* The CFG register is used to download TX and RX control blocks
187  * to the chip. This function waits for an operation to complete.
188  */
189 static int ql_wait_cfg(struct ql_adapter *qdev, u32 bit)
190 {
191         int count;
192         u32 temp;
193
194         for (count = 0; count < UDELAY_COUNT; count++) {
195                 temp = ql_read32(qdev, CFG);
196                 if (temp & CFG_LE)
197                         return -EIO;
198                 if (!(temp & bit))
199                         return 0;
200                 udelay(UDELAY_DELAY);
201         }
202         return -ETIMEDOUT;
203 }
204
205 /* Used to issue init control blocks to hw. Maps control block,
206  * sets address, triggers download, waits for completion.
207  */
208 int ql_write_cfg(struct ql_adapter *qdev, void *ptr, int size, u32 bit,
209                  u16 q_id)
210 {
211         u64 map;
212         int status = 0;
213         int direction;
214         u32 mask;
215         u32 value;
216
217         if (bit & (CFG_LRQ | CFG_LR | CFG_LCQ))
218                 direction = DMA_TO_DEVICE;
219         else
220                 direction = DMA_FROM_DEVICE;
221
222         map = dma_map_single(&qdev->pdev->dev, ptr, size, direction);
223         if (dma_mapping_error(&qdev->pdev->dev, map)) {
224                 netif_err(qdev, ifup, qdev->ndev, "Couldn't map DMA area.\n");
225                 return -ENOMEM;
226         }
227
228         status = ql_sem_spinlock(qdev, SEM_ICB_MASK);
229         if (status)
230                 goto lock_failed;
231
232         status = ql_wait_cfg(qdev, bit);
233         if (status) {
234                 netif_err(qdev, ifup, qdev->ndev,
235                           "Timed out waiting for CFG to come ready.\n");
236                 goto exit;
237         }
238
239         ql_write32(qdev, ICB_L, (u32)map);
240         ql_write32(qdev, ICB_H, (u32)(map >> 32));
241
242         mask = CFG_Q_MASK | (bit << 16);
243         value = bit | (q_id << CFG_Q_SHIFT);
244         ql_write32(qdev, CFG, (mask | value));
245
246         /*
247          * Wait for the bit to clear after signaling hw.
248          */
249         status = ql_wait_cfg(qdev, bit);
250 exit:
251         ql_sem_unlock(qdev, SEM_ICB_MASK);      /* does flush too */
252 lock_failed:
253         dma_unmap_single(&qdev->pdev->dev, map, size, direction);
254         return status;
255 }
256
257 /* Get a specific MAC address from the CAM.  Used for debug and reg dump. */
258 int ql_get_mac_addr_reg(struct ql_adapter *qdev, u32 type, u16 index,
259                         u32 *value)
260 {
261         u32 offset = 0;
262         int status;
263
264         switch (type) {
265         case MAC_ADDR_TYPE_MULTI_MAC:
266         case MAC_ADDR_TYPE_CAM_MAC: {
267                 status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
268                 if (status)
269                         break;
270                 ql_write32(qdev, MAC_ADDR_IDX,
271                            (offset++) | /* offset */
272                                    (index << MAC_ADDR_IDX_SHIFT) | /* index */
273                                    MAC_ADDR_ADR | MAC_ADDR_RS |
274                                    type); /* type */
275                 status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MR, 0);
276                 if (status)
277                         break;
278                 *value++ = ql_read32(qdev, MAC_ADDR_DATA);
279                 status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
280                 if (status)
281                         break;
282                 ql_write32(qdev, MAC_ADDR_IDX,
283                            (offset++) | /* offset */
284                                    (index << MAC_ADDR_IDX_SHIFT) | /* index */
285                                    MAC_ADDR_ADR | MAC_ADDR_RS |
286                                    type); /* type */
287                 status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MR, 0);
288                 if (status)
289                         break;
290                 *value++ = ql_read32(qdev, MAC_ADDR_DATA);
291                 if (type == MAC_ADDR_TYPE_CAM_MAC) {
292                         status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX,
293                                                  MAC_ADDR_MW, 0);
294                         if (status)
295                                 break;
296                         ql_write32(qdev, MAC_ADDR_IDX,
297                                    (offset++) | /* offset */
298                                            (index
299                                             << MAC_ADDR_IDX_SHIFT) | /* index */
300                                            MAC_ADDR_ADR |
301                                            MAC_ADDR_RS | type); /* type */
302                         status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX,
303                                                  MAC_ADDR_MR, 0);
304                         if (status)
305                                 break;
306                         *value++ = ql_read32(qdev, MAC_ADDR_DATA);
307                 }
308                 break;
309         }
310         case MAC_ADDR_TYPE_VLAN:
311         case MAC_ADDR_TYPE_MULTI_FLTR:
312         default:
313                 netif_crit(qdev, ifup, qdev->ndev,
314                            "Address type %d not yet supported.\n", type);
315                 status = -EPERM;
316         }
317         return status;
318 }
319
320 /* Set up a MAC, multicast or VLAN address for the
321  * inbound frame matching.
322  */
323 static int ql_set_mac_addr_reg(struct ql_adapter *qdev, u8 *addr, u32 type,
324                                u16 index)
325 {
326         u32 offset = 0;
327         int status = 0;
328
329         switch (type) {
330         case MAC_ADDR_TYPE_MULTI_MAC: {
331                 u32 upper = (addr[0] << 8) | addr[1];
332                 u32 lower = (addr[2] << 24) | (addr[3] << 16) | (addr[4] << 8) |
333                             (addr[5]);
334
335                 status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
336                 if (status)
337                         break;
338                 ql_write32(qdev, MAC_ADDR_IDX,
339                            (offset++) | (index << MAC_ADDR_IDX_SHIFT) | type |
340                                    MAC_ADDR_E);
341                 ql_write32(qdev, MAC_ADDR_DATA, lower);
342                 status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
343                 if (status)
344                         break;
345                 ql_write32(qdev, MAC_ADDR_IDX,
346                            (offset++) | (index << MAC_ADDR_IDX_SHIFT) | type |
347                                    MAC_ADDR_E);
348
349                 ql_write32(qdev, MAC_ADDR_DATA, upper);
350                 status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
351                 break;
352         }
353         case MAC_ADDR_TYPE_CAM_MAC: {
354                 u32 cam_output;
355                 u32 upper = (addr[0] << 8) | addr[1];
356                 u32 lower = (addr[2] << 24) | (addr[3] << 16) | (addr[4] << 8) |
357                             (addr[5]);
358                 status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
359                 if (status)
360                         break;
361                 ql_write32(qdev, MAC_ADDR_IDX,
362                            (offset++) | /* offset */
363                                    (index << MAC_ADDR_IDX_SHIFT) | /* index */
364                                    type); /* type */
365                 ql_write32(qdev, MAC_ADDR_DATA, lower);
366                 status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
367                 if (status)
368                         break;
369                 ql_write32(qdev, MAC_ADDR_IDX,
370                            (offset++) | /* offset */
371                                    (index << MAC_ADDR_IDX_SHIFT) | /* index */
372                                    type); /* type */
373                 ql_write32(qdev, MAC_ADDR_DATA, upper);
374                 status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
375                 if (status)
376                         break;
377                 ql_write32(qdev, MAC_ADDR_IDX,
378                            (offset) | /* offset */
379                                    (index << MAC_ADDR_IDX_SHIFT) | /* index */
380                                    type); /* type */
381                 /* This field should also include the queue id
382                  * and possibly the function id.  Right now we hardcode
383                  * the route field to NIC core.
384                  */
385                 cam_output = (CAM_OUT_ROUTE_NIC |
386                               (qdev->func << CAM_OUT_FUNC_SHIFT) |
387                               (0 << CAM_OUT_CQ_ID_SHIFT));
388                 if (qdev->ndev->features & NETIF_F_HW_VLAN_CTAG_RX)
389                         cam_output |= CAM_OUT_RV;
390                 /* route to NIC core */
391                 ql_write32(qdev, MAC_ADDR_DATA, cam_output);
392                 break;
393         }
394         case MAC_ADDR_TYPE_VLAN: {
395                 u32 enable_bit = *((u32 *)&addr[0]);
396                 /* For VLAN, the addr actually holds a bit that
397                  * either enables or disables the vlan id we are
398                  * addressing. It's either MAC_ADDR_E on or off.
399                  * That's bit-27 we're talking about.
400                  */
401                 status = ql_wait_reg_rdy(qdev, MAC_ADDR_IDX, MAC_ADDR_MW, 0);
402                 if (status)
403                         break;
404                 ql_write32(qdev, MAC_ADDR_IDX,
405                            offset | /* offset */
406                                    (index << MAC_ADDR_IDX_SHIFT) | /* index */
407                                    type | /* type */
408                                    enable_bit); /* enable/disable */
409                 break;
410         }
411         case MAC_ADDR_TYPE_MULTI_FLTR:
412         default:
413                 netif_crit(qdev, ifup, qdev->ndev,
414                            "Address type %d not yet supported.\n", type);
415                 status = -EPERM;
416         }
417         return status;
418 }
419
420 /* Set or clear MAC address in hardware. We sometimes
421  * have to clear it to prevent wrong frame routing
422  * especially in a bonding environment.
423  */
424 static int ql_set_mac_addr(struct ql_adapter *qdev, int set)
425 {
426         int status;
427         char zero_mac_addr[ETH_ALEN];
428         char *addr;
429
430         if (set) {
431                 addr = &qdev->current_mac_addr[0];
432                 netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
433                              "Set Mac addr %pM\n", addr);
434         } else {
435                 eth_zero_addr(zero_mac_addr);
436                 addr = &zero_mac_addr[0];
437                 netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
438                              "Clearing MAC address\n");
439         }
440         status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
441         if (status)
442                 return status;
443         status = ql_set_mac_addr_reg(qdev, (u8 *)addr,
444                                      MAC_ADDR_TYPE_CAM_MAC,
445                                      qdev->func * MAX_CQ);
446         ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
447         if (status)
448                 netif_err(qdev, ifup, qdev->ndev,
449                           "Failed to init mac address.\n");
450         return status;
451 }
452
453 void ql_link_on(struct ql_adapter *qdev)
454 {
455         netif_err(qdev, link, qdev->ndev, "Link is up.\n");
456         netif_carrier_on(qdev->ndev);
457         ql_set_mac_addr(qdev, 1);
458 }
459
460 void ql_link_off(struct ql_adapter *qdev)
461 {
462         netif_err(qdev, link, qdev->ndev, "Link is down.\n");
463         netif_carrier_off(qdev->ndev);
464         ql_set_mac_addr(qdev, 0);
465 }
466
467 /* Get a specific frame routing value from the CAM.
468  * Used for debug and reg dump.
469  */
470 int ql_get_routing_reg(struct ql_adapter *qdev, u32 index, u32 *value)
471 {
472         int status = 0;
473
474         status = ql_wait_reg_rdy(qdev, RT_IDX, RT_IDX_MW, 0);
475         if (status)
476                 goto exit;
477
478         ql_write32(qdev, RT_IDX,
479                    RT_IDX_TYPE_NICQ | RT_IDX_RS | (index << RT_IDX_IDX_SHIFT));
480         status = ql_wait_reg_rdy(qdev, RT_IDX, RT_IDX_MR, 0);
481         if (status)
482                 goto exit;
483         *value = ql_read32(qdev, RT_DATA);
484 exit:
485         return status;
486 }
487
488 /* The NIC function for this chip has 16 routing indexes.  Each one can be used
489  * to route different frame types to various inbound queues.  We send broadcast/
490  * multicast/error frames to the default queue for slow handling,
491  * and CAM hit/RSS frames to the fast handling queues.
492  */
493 static int ql_set_routing_reg(struct ql_adapter *qdev, u32 index, u32 mask,
494                               int enable)
495 {
496         int status = -EINVAL; /* Return error if no mask match. */
497         u32 value = 0;
498
499         switch (mask) {
500         case RT_IDX_CAM_HIT:
501                 {
502                         value = RT_IDX_DST_CAM_Q |      /* dest */
503                             RT_IDX_TYPE_NICQ |  /* type */
504                             (RT_IDX_CAM_HIT_SLOT << RT_IDX_IDX_SHIFT);/* index */
505                         break;
506                 }
507         case RT_IDX_VALID:      /* Promiscuous Mode frames. */
508                 {
509                         value = RT_IDX_DST_DFLT_Q |     /* dest */
510                             RT_IDX_TYPE_NICQ |  /* type */
511                             (RT_IDX_PROMISCUOUS_SLOT << RT_IDX_IDX_SHIFT);/* index */
512                         break;
513                 }
514         case RT_IDX_ERR:        /* Pass up MAC,IP,TCP/UDP error frames. */
515                 {
516                         value = RT_IDX_DST_DFLT_Q |     /* dest */
517                             RT_IDX_TYPE_NICQ |  /* type */
518                             (RT_IDX_ALL_ERR_SLOT << RT_IDX_IDX_SHIFT);/* index */
519                         break;
520                 }
521         case RT_IDX_IP_CSUM_ERR: /* Pass up IP CSUM error frames. */
522                 {
523                         value = RT_IDX_DST_DFLT_Q | /* dest */
524                                 RT_IDX_TYPE_NICQ | /* type */
525                                 (RT_IDX_IP_CSUM_ERR_SLOT <<
526                                 RT_IDX_IDX_SHIFT); /* index */
527                         break;
528                 }
529         case RT_IDX_TU_CSUM_ERR: /* Pass up TCP/UDP CSUM error frames. */
530                 {
531                         value = RT_IDX_DST_DFLT_Q | /* dest */
532                                 RT_IDX_TYPE_NICQ | /* type */
533                                 (RT_IDX_TCP_UDP_CSUM_ERR_SLOT <<
534                                 RT_IDX_IDX_SHIFT); /* index */
535                         break;
536                 }
537         case RT_IDX_BCAST:      /* Pass up Broadcast frames to default Q. */
538                 {
539                         value = RT_IDX_DST_DFLT_Q |     /* dest */
540                             RT_IDX_TYPE_NICQ |  /* type */
541                             (RT_IDX_BCAST_SLOT << RT_IDX_IDX_SHIFT);/* index */
542                         break;
543                 }
544         case RT_IDX_MCAST:      /* Pass up All Multicast frames. */
545                 {
546                         value = RT_IDX_DST_DFLT_Q |     /* dest */
547                             RT_IDX_TYPE_NICQ |  /* type */
548                             (RT_IDX_ALLMULTI_SLOT << RT_IDX_IDX_SHIFT);/* index */
549                         break;
550                 }
551         case RT_IDX_MCAST_MATCH:        /* Pass up matched Multicast frames. */
552                 {
553                         value = RT_IDX_DST_DFLT_Q |     /* dest */
554                             RT_IDX_TYPE_NICQ |  /* type */
555                             (RT_IDX_MCAST_MATCH_SLOT << RT_IDX_IDX_SHIFT);/* index */
556                         break;
557                 }
558         case RT_IDX_RSS_MATCH:  /* Pass up matched RSS frames. */
559                 {
560                         value = RT_IDX_DST_RSS |        /* dest */
561                             RT_IDX_TYPE_NICQ |  /* type */
562                             (RT_IDX_RSS_MATCH_SLOT << RT_IDX_IDX_SHIFT);/* index */
563                         break;
564                 }
565         case 0:         /* Clear the E-bit on an entry. */
566                 {
567                         value = RT_IDX_DST_DFLT_Q |     /* dest */
568                             RT_IDX_TYPE_NICQ |  /* type */
569                             (index << RT_IDX_IDX_SHIFT);/* index */
570                         break;
571                 }
572         default:
573                 netif_err(qdev, ifup, qdev->ndev,
574                           "Mask type %d not yet supported.\n", mask);
575                 status = -EPERM;
576                 goto exit;
577         }
578
579         if (value) {
580                 status = ql_wait_reg_rdy(qdev, RT_IDX, RT_IDX_MW, 0);
581                 if (status)
582                         goto exit;
583                 value |= (enable ? RT_IDX_E : 0);
584                 ql_write32(qdev, RT_IDX, value);
585                 ql_write32(qdev, RT_DATA, enable ? mask : 0);
586         }
587 exit:
588         return status;
589 }
590
591 static void ql_enable_interrupts(struct ql_adapter *qdev)
592 {
593         ql_write32(qdev, INTR_EN, (INTR_EN_EI << 16) | INTR_EN_EI);
594 }
595
596 static void ql_disable_interrupts(struct ql_adapter *qdev)
597 {
598         ql_write32(qdev, INTR_EN, (INTR_EN_EI << 16));
599 }
600
601 static void ql_enable_completion_interrupt(struct ql_adapter *qdev, u32 intr)
602 {
603         struct intr_context *ctx = &qdev->intr_context[intr];
604
605         ql_write32(qdev, INTR_EN, ctx->intr_en_mask);
606 }
607
608 static void ql_disable_completion_interrupt(struct ql_adapter *qdev, u32 intr)
609 {
610         struct intr_context *ctx = &qdev->intr_context[intr];
611
612         ql_write32(qdev, INTR_EN, ctx->intr_dis_mask);
613 }
614
615 static void ql_enable_all_completion_interrupts(struct ql_adapter *qdev)
616 {
617         int i;
618
619         for (i = 0; i < qdev->intr_count; i++)
620                 ql_enable_completion_interrupt(qdev, i);
621 }
622
623 static int ql_validate_flash(struct ql_adapter *qdev, u32 size, const char *str)
624 {
625         int status, i;
626         u16 csum = 0;
627         __le16 *flash = (__le16 *)&qdev->flash;
628
629         status = strncmp((char *)&qdev->flash, str, 4);
630         if (status) {
631                 netif_err(qdev, ifup, qdev->ndev, "Invalid flash signature.\n");
632                 return  status;
633         }
634
635         for (i = 0; i < size; i++)
636                 csum += le16_to_cpu(*flash++);
637
638         if (csum)
639                 netif_err(qdev, ifup, qdev->ndev,
640                           "Invalid flash checksum, csum = 0x%.04x.\n", csum);
641
642         return csum;
643 }
644
645 static int ql_read_flash_word(struct ql_adapter *qdev, int offset, __le32 *data)
646 {
647         int status = 0;
648         /* wait for reg to come ready */
649         status = ql_wait_reg_rdy(qdev,
650                                  FLASH_ADDR, FLASH_ADDR_RDY, FLASH_ADDR_ERR);
651         if (status)
652                 goto exit;
653         /* set up for reg read */
654         ql_write32(qdev, FLASH_ADDR, FLASH_ADDR_R | offset);
655         /* wait for reg to come ready */
656         status = ql_wait_reg_rdy(qdev,
657                                  FLASH_ADDR, FLASH_ADDR_RDY, FLASH_ADDR_ERR);
658         if (status)
659                 goto exit;
660         /* This data is stored on flash as an array of
661          * __le32.  Since ql_read32() returns cpu endian
662          * we need to swap it back.
663          */
664         *data = cpu_to_le32(ql_read32(qdev, FLASH_DATA));
665 exit:
666         return status;
667 }
668
669 static int ql_get_8000_flash_params(struct ql_adapter *qdev)
670 {
671         u32 i, size;
672         int status;
673         __le32 *p = (__le32 *)&qdev->flash;
674         u32 offset;
675         u8 mac_addr[6];
676
677         /* Get flash offset for function and adjust
678          * for dword access.
679          */
680         if (!qdev->port)
681                 offset = FUNC0_FLASH_OFFSET / sizeof(u32);
682         else
683                 offset = FUNC1_FLASH_OFFSET / sizeof(u32);
684
685         if (ql_sem_spinlock(qdev, SEM_FLASH_MASK))
686                 return -ETIMEDOUT;
687
688         size = sizeof(struct flash_params_8000) / sizeof(u32);
689         for (i = 0; i < size; i++, p++) {
690                 status = ql_read_flash_word(qdev, i + offset, p);
691                 if (status) {
692                         netif_err(qdev, ifup, qdev->ndev,
693                                   "Error reading flash.\n");
694                         goto exit;
695                 }
696         }
697
698         status = ql_validate_flash(qdev,
699                                    sizeof(struct flash_params_8000) /
700                                    sizeof(u16),
701                                    "8000");
702         if (status) {
703                 netif_err(qdev, ifup, qdev->ndev, "Invalid flash.\n");
704                 status = -EINVAL;
705                 goto exit;
706         }
707
708         /* Extract either manufacturer or BOFM modified
709          * MAC address.
710          */
711         if (qdev->flash.flash_params_8000.data_type1 == 2)
712                 memcpy(mac_addr,
713                        qdev->flash.flash_params_8000.mac_addr1,
714                        qdev->ndev->addr_len);
715         else
716                 memcpy(mac_addr,
717                        qdev->flash.flash_params_8000.mac_addr,
718                        qdev->ndev->addr_len);
719
720         if (!is_valid_ether_addr(mac_addr)) {
721                 netif_err(qdev, ifup, qdev->ndev, "Invalid MAC address.\n");
722                 status = -EINVAL;
723                 goto exit;
724         }
725
726         memcpy(qdev->ndev->dev_addr,
727                mac_addr,
728                qdev->ndev->addr_len);
729
730 exit:
731         ql_sem_unlock(qdev, SEM_FLASH_MASK);
732         return status;
733 }
734
735 static int ql_get_8012_flash_params(struct ql_adapter *qdev)
736 {
737         int i;
738         int status;
739         __le32 *p = (__le32 *)&qdev->flash;
740         u32 offset = 0;
741         u32 size = sizeof(struct flash_params_8012) / sizeof(u32);
742
743         /* Second function's parameters follow the first
744          * function's.
745          */
746         if (qdev->port)
747                 offset = size;
748
749         if (ql_sem_spinlock(qdev, SEM_FLASH_MASK))
750                 return -ETIMEDOUT;
751
752         for (i = 0; i < size; i++, p++) {
753                 status = ql_read_flash_word(qdev, i + offset, p);
754                 if (status) {
755                         netif_err(qdev, ifup, qdev->ndev,
756                                   "Error reading flash.\n");
757                         goto exit;
758                 }
759
760         }
761
762         status = ql_validate_flash(qdev,
763                                    sizeof(struct flash_params_8012) /
764                                    sizeof(u16),
765                                    "8012");
766         if (status) {
767                 netif_err(qdev, ifup, qdev->ndev, "Invalid flash.\n");
768                 status = -EINVAL;
769                 goto exit;
770         }
771
772         if (!is_valid_ether_addr(qdev->flash.flash_params_8012.mac_addr)) {
773                 status = -EINVAL;
774                 goto exit;
775         }
776
777         memcpy(qdev->ndev->dev_addr,
778                qdev->flash.flash_params_8012.mac_addr,
779                qdev->ndev->addr_len);
780
781 exit:
782         ql_sem_unlock(qdev, SEM_FLASH_MASK);
783         return status;
784 }
785
786 /* xgmac register are located behind the xgmac_addr and xgmac_data
787  * register pair.  Each read/write requires us to wait for the ready
788  * bit before reading/writing the data.
789  */
790 static int ql_write_xgmac_reg(struct ql_adapter *qdev, u32 reg, u32 data)
791 {
792         int status;
793         /* wait for reg to come ready */
794         status = ql_wait_reg_rdy(qdev,
795                                  XGMAC_ADDR, XGMAC_ADDR_RDY, XGMAC_ADDR_XME);
796         if (status)
797                 return status;
798         /* write the data to the data reg */
799         ql_write32(qdev, XGMAC_DATA, data);
800         /* trigger the write */
801         ql_write32(qdev, XGMAC_ADDR, reg);
802         return status;
803 }
804
805 /* xgmac register are located behind the xgmac_addr and xgmac_data
806  * register pair.  Each read/write requires us to wait for the ready
807  * bit before reading/writing the data.
808  */
809 int ql_read_xgmac_reg(struct ql_adapter *qdev, u32 reg, u32 *data)
810 {
811         int status = 0;
812         /* wait for reg to come ready */
813         status = ql_wait_reg_rdy(qdev,
814                                  XGMAC_ADDR, XGMAC_ADDR_RDY, XGMAC_ADDR_XME);
815         if (status)
816                 goto exit;
817         /* set up for reg read */
818         ql_write32(qdev, XGMAC_ADDR, reg | XGMAC_ADDR_R);
819         /* wait for reg to come ready */
820         status = ql_wait_reg_rdy(qdev,
821                                  XGMAC_ADDR, XGMAC_ADDR_RDY, XGMAC_ADDR_XME);
822         if (status)
823                 goto exit;
824         /* get the data */
825         *data = ql_read32(qdev, XGMAC_DATA);
826 exit:
827         return status;
828 }
829
830 /* This is used for reading the 64-bit statistics regs. */
831 int ql_read_xgmac_reg64(struct ql_adapter *qdev, u32 reg, u64 *data)
832 {
833         int status = 0;
834         u32 hi = 0;
835         u32 lo = 0;
836
837         status = ql_read_xgmac_reg(qdev, reg, &lo);
838         if (status)
839                 goto exit;
840
841         status = ql_read_xgmac_reg(qdev, reg + 4, &hi);
842         if (status)
843                 goto exit;
844
845         *data = (u64)lo | ((u64)hi << 32);
846
847 exit:
848         return status;
849 }
850
851 static int ql_8000_port_initialize(struct ql_adapter *qdev)
852 {
853         int status;
854         /*
855          * Get MPI firmware version for driver banner
856          * and ethool info.
857          */
858         status = ql_mb_about_fw(qdev);
859         if (status)
860                 goto exit;
861         status = ql_mb_get_fw_state(qdev);
862         if (status)
863                 goto exit;
864         /* Wake up a worker to get/set the TX/RX frame sizes. */
865         queue_delayed_work(qdev->workqueue, &qdev->mpi_port_cfg_work, 0);
866 exit:
867         return status;
868 }
869
870 /* Take the MAC Core out of reset.
871  * Enable statistics counting.
872  * Take the transmitter/receiver out of reset.
873  * This functionality may be done in the MPI firmware at a
874  * later date.
875  */
876 static int ql_8012_port_initialize(struct ql_adapter *qdev)
877 {
878         int status = 0;
879         u32 data;
880
881         if (ql_sem_trylock(qdev, qdev->xg_sem_mask)) {
882                 /* Another function has the semaphore, so
883                  * wait for the port init bit to come ready.
884                  */
885                 netif_info(qdev, link, qdev->ndev,
886                            "Another function has the semaphore, so wait for the port init bit to come ready.\n");
887                 status = ql_wait_reg_rdy(qdev, STS, qdev->port_init, 0);
888                 if (status) {
889                         netif_crit(qdev, link, qdev->ndev,
890                                    "Port initialize timed out.\n");
891                 }
892                 return status;
893         }
894
895         netif_info(qdev, link, qdev->ndev, "Got xgmac semaphore!.\n");
896         /* Set the core reset. */
897         status = ql_read_xgmac_reg(qdev, GLOBAL_CFG, &data);
898         if (status)
899                 goto end;
900         data |= GLOBAL_CFG_RESET;
901         status = ql_write_xgmac_reg(qdev, GLOBAL_CFG, data);
902         if (status)
903                 goto end;
904
905         /* Clear the core reset and turn on jumbo for receiver. */
906         data &= ~GLOBAL_CFG_RESET;      /* Clear core reset. */
907         data |= GLOBAL_CFG_JUMBO;       /* Turn on jumbo. */
908         data |= GLOBAL_CFG_TX_STAT_EN;
909         data |= GLOBAL_CFG_RX_STAT_EN;
910         status = ql_write_xgmac_reg(qdev, GLOBAL_CFG, data);
911         if (status)
912                 goto end;
913
914         /* Enable transmitter, and clear it's reset. */
915         status = ql_read_xgmac_reg(qdev, TX_CFG, &data);
916         if (status)
917                 goto end;
918         data &= ~TX_CFG_RESET;  /* Clear the TX MAC reset. */
919         data |= TX_CFG_EN;      /* Enable the transmitter. */
920         status = ql_write_xgmac_reg(qdev, TX_CFG, data);
921         if (status)
922                 goto end;
923
924         /* Enable receiver and clear it's reset. */
925         status = ql_read_xgmac_reg(qdev, RX_CFG, &data);
926         if (status)
927                 goto end;
928         data &= ~RX_CFG_RESET;  /* Clear the RX MAC reset. */
929         data |= RX_CFG_EN;      /* Enable the receiver. */
930         status = ql_write_xgmac_reg(qdev, RX_CFG, data);
931         if (status)
932                 goto end;
933
934         /* Turn on jumbo. */
935         status =
936             ql_write_xgmac_reg(qdev, MAC_TX_PARAMS, MAC_TX_PARAMS_JUMBO | (0x2580 << 16));
937         if (status)
938                 goto end;
939         status =
940             ql_write_xgmac_reg(qdev, MAC_RX_PARAMS, 0x2580);
941         if (status)
942                 goto end;
943
944         /* Signal to the world that the port is enabled.        */
945         ql_write32(qdev, STS, ((qdev->port_init << 16) | qdev->port_init));
946 end:
947         ql_sem_unlock(qdev, qdev->xg_sem_mask);
948         return status;
949 }
950
951 static inline unsigned int ql_lbq_block_size(struct ql_adapter *qdev)
952 {
953         return PAGE_SIZE << qdev->lbq_buf_order;
954 }
955
956 static struct qlge_bq_desc *qlge_get_curr_buf(struct qlge_bq *bq)
957 {
958         struct qlge_bq_desc *bq_desc;
959
960         bq_desc = &bq->queue[bq->next_to_clean];
961         bq->next_to_clean = QLGE_BQ_WRAP(bq->next_to_clean + 1);
962
963         return bq_desc;
964 }
965
966 static struct qlge_bq_desc *ql_get_curr_lchunk(struct ql_adapter *qdev,
967                                                struct rx_ring *rx_ring)
968 {
969         struct qlge_bq_desc *lbq_desc = qlge_get_curr_buf(&rx_ring->lbq);
970
971         dma_sync_single_for_cpu(&qdev->pdev->dev, lbq_desc->dma_addr,
972                                 qdev->lbq_buf_size, DMA_FROM_DEVICE);
973
974         if ((lbq_desc->p.pg_chunk.offset + qdev->lbq_buf_size) ==
975             ql_lbq_block_size(qdev)) {
976                 /* last chunk of the master page */
977                 dma_unmap_page(&qdev->pdev->dev, lbq_desc->dma_addr,
978                                ql_lbq_block_size(qdev), DMA_FROM_DEVICE);
979         }
980
981         return lbq_desc;
982 }
983
984 /* Update an rx ring index. */
985 static void ql_update_cq(struct rx_ring *rx_ring)
986 {
987         rx_ring->cnsmr_idx++;
988         rx_ring->curr_entry++;
989         if (unlikely(rx_ring->cnsmr_idx == rx_ring->cq_len)) {
990                 rx_ring->cnsmr_idx = 0;
991                 rx_ring->curr_entry = rx_ring->cq_base;
992         }
993 }
994
995 static void ql_write_cq_idx(struct rx_ring *rx_ring)
996 {
997         ql_write_db_reg(rx_ring->cnsmr_idx, rx_ring->cnsmr_idx_db_reg);
998 }
999
1000 static const char * const bq_type_name[] = {
1001         [QLGE_SB] = "sbq",
1002         [QLGE_LB] = "lbq",
1003 };
1004
1005 /* return 0 or negative error */
1006 static int qlge_refill_sb(struct rx_ring *rx_ring,
1007                           struct qlge_bq_desc *sbq_desc, gfp_t gfp)
1008 {
1009         struct ql_adapter *qdev = rx_ring->qdev;
1010         struct sk_buff *skb;
1011
1012         if (sbq_desc->p.skb)
1013                 return 0;
1014
1015         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1016                      "ring %u sbq: getting new skb for index %d.\n",
1017                      rx_ring->cq_id, sbq_desc->index);
1018
1019         skb = __netdev_alloc_skb(qdev->ndev, SMALL_BUFFER_SIZE, gfp);
1020         if (!skb)
1021                 return -ENOMEM;
1022         skb_reserve(skb, QLGE_SB_PAD);
1023
1024         sbq_desc->dma_addr = dma_map_single(&qdev->pdev->dev, skb->data,
1025                                             SMALL_BUF_MAP_SIZE,
1026                                             DMA_FROM_DEVICE);
1027         if (dma_mapping_error(&qdev->pdev->dev, sbq_desc->dma_addr)) {
1028                 netif_err(qdev, ifup, qdev->ndev, "PCI mapping failed.\n");
1029                 dev_kfree_skb_any(skb);
1030                 return -EIO;
1031         }
1032         *sbq_desc->buf_ptr = cpu_to_le64(sbq_desc->dma_addr);
1033
1034         sbq_desc->p.skb = skb;
1035         return 0;
1036 }
1037
1038 /* return 0 or negative error */
1039 static int qlge_refill_lb(struct rx_ring *rx_ring,
1040                           struct qlge_bq_desc *lbq_desc, gfp_t gfp)
1041 {
1042         struct ql_adapter *qdev = rx_ring->qdev;
1043         struct qlge_page_chunk *master_chunk = &rx_ring->master_chunk;
1044
1045         if (!master_chunk->page) {
1046                 struct page *page;
1047                 dma_addr_t dma_addr;
1048
1049                 page = alloc_pages(gfp | __GFP_COMP, qdev->lbq_buf_order);
1050                 if (unlikely(!page))
1051                         return -ENOMEM;
1052                 dma_addr = dma_map_page(&qdev->pdev->dev, page, 0,
1053                                         ql_lbq_block_size(qdev),
1054                                         DMA_FROM_DEVICE);
1055                 if (dma_mapping_error(&qdev->pdev->dev, dma_addr)) {
1056                         __free_pages(page, qdev->lbq_buf_order);
1057                         netif_err(qdev, drv, qdev->ndev,
1058                                   "PCI mapping failed.\n");
1059                         return -EIO;
1060                 }
1061                 master_chunk->page = page;
1062                 master_chunk->va = page_address(page);
1063                 master_chunk->offset = 0;
1064                 rx_ring->chunk_dma_addr = dma_addr;
1065         }
1066
1067         lbq_desc->p.pg_chunk = *master_chunk;
1068         lbq_desc->dma_addr = rx_ring->chunk_dma_addr;
1069         *lbq_desc->buf_ptr = cpu_to_le64(lbq_desc->dma_addr +
1070                                          lbq_desc->p.pg_chunk.offset);
1071
1072         /* Adjust the master page chunk for next
1073          * buffer get.
1074          */
1075         master_chunk->offset += qdev->lbq_buf_size;
1076         if (master_chunk->offset == ql_lbq_block_size(qdev)) {
1077                 master_chunk->page = NULL;
1078         } else {
1079                 master_chunk->va += qdev->lbq_buf_size;
1080                 get_page(master_chunk->page);
1081         }
1082
1083         return 0;
1084 }
1085
1086 /* return 0 or negative error */
1087 static int qlge_refill_bq(struct qlge_bq *bq, gfp_t gfp)
1088 {
1089         struct rx_ring *rx_ring = QLGE_BQ_CONTAINER(bq);
1090         struct ql_adapter *qdev = rx_ring->qdev;
1091         struct qlge_bq_desc *bq_desc;
1092         int refill_count;
1093         int retval;
1094         int i;
1095
1096         refill_count = QLGE_BQ_WRAP(QLGE_BQ_ALIGN(bq->next_to_clean - 1) -
1097                                     bq->next_to_use);
1098         if (!refill_count)
1099                 return 0;
1100
1101         i = bq->next_to_use;
1102         bq_desc = &bq->queue[i];
1103         i -= QLGE_BQ_LEN;
1104         do {
1105                 netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1106                              "ring %u %s: try cleaning idx %d\n",
1107                              rx_ring->cq_id, bq_type_name[bq->type], i);
1108
1109                 if (bq->type == QLGE_SB)
1110                         retval = qlge_refill_sb(rx_ring, bq_desc, gfp);
1111                 else
1112                         retval = qlge_refill_lb(rx_ring, bq_desc, gfp);
1113                 if (retval < 0) {
1114                         netif_err(qdev, ifup, qdev->ndev,
1115                                   "ring %u %s: Could not get a page chunk, idx %d\n",
1116                                   rx_ring->cq_id, bq_type_name[bq->type], i);
1117                         break;
1118                 }
1119
1120                 bq_desc++;
1121                 i++;
1122                 if (unlikely(!i)) {
1123                         bq_desc = &bq->queue[0];
1124                         i -= QLGE_BQ_LEN;
1125                 }
1126                 refill_count--;
1127         } while (refill_count);
1128         i += QLGE_BQ_LEN;
1129
1130         if (bq->next_to_use != i) {
1131                 if (QLGE_BQ_ALIGN(bq->next_to_use) != QLGE_BQ_ALIGN(i)) {
1132                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1133                                      "ring %u %s: updating prod idx = %d.\n",
1134                                      rx_ring->cq_id, bq_type_name[bq->type],
1135                                      i);
1136                         ql_write_db_reg(i, bq->prod_idx_db_reg);
1137                 }
1138                 bq->next_to_use = i;
1139         }
1140
1141         return retval;
1142 }
1143
1144 static void ql_update_buffer_queues(struct rx_ring *rx_ring, gfp_t gfp,
1145                                     unsigned long delay)
1146 {
1147         bool sbq_fail, lbq_fail;
1148
1149         sbq_fail = !!qlge_refill_bq(&rx_ring->sbq, gfp);
1150         lbq_fail = !!qlge_refill_bq(&rx_ring->lbq, gfp);
1151
1152         /* Minimum number of buffers needed to be able to receive at least one
1153          * frame of any format:
1154          * sbq: 1 for header + 1 for data
1155          * lbq: mtu 9000 / lb size
1156          * Below this, the queue might stall.
1157          */
1158         if ((sbq_fail && QLGE_BQ_HW_OWNED(&rx_ring->sbq) < 2) ||
1159             (lbq_fail && QLGE_BQ_HW_OWNED(&rx_ring->lbq) <
1160              DIV_ROUND_UP(9000, LARGE_BUFFER_MAX_SIZE)))
1161                 /* Allocations can take a long time in certain cases (ex.
1162                  * reclaim). Therefore, use a workqueue for long-running
1163                  * work items.
1164                  */
1165                 queue_delayed_work_on(smp_processor_id(), system_long_wq,
1166                                       &rx_ring->refill_work, delay);
1167 }
1168
1169 static void qlge_slow_refill(struct work_struct *work)
1170 {
1171         struct rx_ring *rx_ring = container_of(work, struct rx_ring,
1172                                                refill_work.work);
1173         struct napi_struct *napi = &rx_ring->napi;
1174
1175         napi_disable(napi);
1176         ql_update_buffer_queues(rx_ring, GFP_KERNEL, HZ / 2);
1177         napi_enable(napi);
1178
1179         local_bh_disable();
1180         /* napi_disable() might have prevented incomplete napi work from being
1181          * rescheduled.
1182          */
1183         napi_schedule(napi);
1184         /* trigger softirq processing */
1185         local_bh_enable();
1186 }
1187
1188 /* Unmaps tx buffers.  Can be called from send() if a pci mapping
1189  * fails at some stage, or from the interrupt when a tx completes.
1190  */
1191 static void ql_unmap_send(struct ql_adapter *qdev,
1192                           struct tx_ring_desc *tx_ring_desc, int mapped)
1193 {
1194         int i;
1195
1196         for (i = 0; i < mapped; i++) {
1197                 if (i == 0 || (i == 7 && mapped > 7)) {
1198                         /*
1199                          * Unmap the skb->data area, or the
1200                          * external sglist (AKA the Outbound
1201                          * Address List (OAL)).
1202                          * If its the zeroeth element, then it's
1203                          * the skb->data area.  If it's the 7th
1204                          * element and there is more than 6 frags,
1205                          * then its an OAL.
1206                          */
1207                         if (i == 7) {
1208                                 netif_printk(qdev, tx_done, KERN_DEBUG,
1209                                              qdev->ndev,
1210                                              "unmapping OAL area.\n");
1211                         }
1212                         dma_unmap_single(&qdev->pdev->dev,
1213                                          dma_unmap_addr(&tx_ring_desc->map[i],
1214                                                         mapaddr),
1215                                          dma_unmap_len(&tx_ring_desc->map[i],
1216                                                        maplen),
1217                                          DMA_TO_DEVICE);
1218                 } else {
1219                         netif_printk(qdev, tx_done, KERN_DEBUG, qdev->ndev,
1220                                      "unmapping frag %d.\n", i);
1221                         dma_unmap_page(&qdev->pdev->dev,
1222                                        dma_unmap_addr(&tx_ring_desc->map[i],
1223                                                       mapaddr),
1224                                        dma_unmap_len(&tx_ring_desc->map[i],
1225                                                      maplen), DMA_TO_DEVICE);
1226                 }
1227         }
1228
1229 }
1230
1231 /* Map the buffers for this transmit.  This will return
1232  * NETDEV_TX_BUSY or NETDEV_TX_OK based on success.
1233  */
1234 static int ql_map_send(struct ql_adapter *qdev,
1235                        struct ob_mac_iocb_req *mac_iocb_ptr,
1236                        struct sk_buff *skb, struct tx_ring_desc *tx_ring_desc)
1237 {
1238         int len = skb_headlen(skb);
1239         dma_addr_t map;
1240         int frag_idx, err, map_idx = 0;
1241         struct tx_buf_desc *tbd = mac_iocb_ptr->tbd;
1242         int frag_cnt = skb_shinfo(skb)->nr_frags;
1243
1244         if (frag_cnt) {
1245                 netif_printk(qdev, tx_queued, KERN_DEBUG, qdev->ndev,
1246                              "frag_cnt = %d.\n", frag_cnt);
1247         }
1248         /*
1249          * Map the skb buffer first.
1250          */
1251         map = dma_map_single(&qdev->pdev->dev, skb->data, len, DMA_TO_DEVICE);
1252
1253         err = dma_mapping_error(&qdev->pdev->dev, map);
1254         if (err) {
1255                 netif_err(qdev, tx_queued, qdev->ndev,
1256                           "PCI mapping failed with error: %d\n", err);
1257
1258                 return NETDEV_TX_BUSY;
1259         }
1260
1261         tbd->len = cpu_to_le32(len);
1262         tbd->addr = cpu_to_le64(map);
1263         dma_unmap_addr_set(&tx_ring_desc->map[map_idx], mapaddr, map);
1264         dma_unmap_len_set(&tx_ring_desc->map[map_idx], maplen, len);
1265         map_idx++;
1266
1267         /*
1268          * This loop fills the remainder of the 8 address descriptors
1269          * in the IOCB.  If there are more than 7 fragments, then the
1270          * eighth address desc will point to an external list (OAL).
1271          * When this happens, the remainder of the frags will be stored
1272          * in this list.
1273          */
1274         for (frag_idx = 0; frag_idx < frag_cnt; frag_idx++, map_idx++) {
1275                 skb_frag_t *frag = &skb_shinfo(skb)->frags[frag_idx];
1276
1277                 tbd++;
1278                 if (frag_idx == 6 && frag_cnt > 7) {
1279                         /* Let's tack on an sglist.
1280                          * Our control block will now
1281                          * look like this:
1282                          * iocb->seg[0] = skb->data
1283                          * iocb->seg[1] = frag[0]
1284                          * iocb->seg[2] = frag[1]
1285                          * iocb->seg[3] = frag[2]
1286                          * iocb->seg[4] = frag[3]
1287                          * iocb->seg[5] = frag[4]
1288                          * iocb->seg[6] = frag[5]
1289                          * iocb->seg[7] = ptr to OAL (external sglist)
1290                          * oal->seg[0] = frag[6]
1291                          * oal->seg[1] = frag[7]
1292                          * oal->seg[2] = frag[8]
1293                          * oal->seg[3] = frag[9]
1294                          * oal->seg[4] = frag[10]
1295                          *      etc...
1296                          */
1297                         /* Tack on the OAL in the eighth segment of IOCB. */
1298                         map = dma_map_single(&qdev->pdev->dev, &tx_ring_desc->oal,
1299                                              sizeof(struct oal),
1300                                              DMA_TO_DEVICE);
1301                         err = dma_mapping_error(&qdev->pdev->dev, map);
1302                         if (err) {
1303                                 netif_err(qdev, tx_queued, qdev->ndev,
1304                                           "PCI mapping outbound address list with error: %d\n",
1305                                           err);
1306                                 goto map_error;
1307                         }
1308
1309                         tbd->addr = cpu_to_le64(map);
1310                         /*
1311                          * The length is the number of fragments
1312                          * that remain to be mapped times the length
1313                          * of our sglist (OAL).
1314                          */
1315                         tbd->len =
1316                             cpu_to_le32((sizeof(struct tx_buf_desc) *
1317                                          (frag_cnt - frag_idx)) | TX_DESC_C);
1318                         dma_unmap_addr_set(&tx_ring_desc->map[map_idx], mapaddr,
1319                                            map);
1320                         dma_unmap_len_set(&tx_ring_desc->map[map_idx], maplen,
1321                                           sizeof(struct oal));
1322                         tbd = (struct tx_buf_desc *)&tx_ring_desc->oal;
1323                         map_idx++;
1324                 }
1325
1326                 map = skb_frag_dma_map(&qdev->pdev->dev, frag, 0, skb_frag_size(frag),
1327                                        DMA_TO_DEVICE);
1328
1329                 err = dma_mapping_error(&qdev->pdev->dev, map);
1330                 if (err) {
1331                         netif_err(qdev, tx_queued, qdev->ndev,
1332                                   "PCI mapping frags failed with error: %d.\n",
1333                                   err);
1334                         goto map_error;
1335                 }
1336
1337                 tbd->addr = cpu_to_le64(map);
1338                 tbd->len = cpu_to_le32(skb_frag_size(frag));
1339                 dma_unmap_addr_set(&tx_ring_desc->map[map_idx], mapaddr, map);
1340                 dma_unmap_len_set(&tx_ring_desc->map[map_idx], maplen,
1341                                   skb_frag_size(frag));
1342
1343         }
1344         /* Save the number of segments we've mapped. */
1345         tx_ring_desc->map_cnt = map_idx;
1346         /* Terminate the last segment. */
1347         tbd->len = cpu_to_le32(le32_to_cpu(tbd->len) | TX_DESC_E);
1348         return NETDEV_TX_OK;
1349
1350 map_error:
1351         /*
1352          * If the first frag mapping failed, then i will be zero.
1353          * This causes the unmap of the skb->data area.  Otherwise
1354          * we pass in the number of frags that mapped successfully
1355          * so they can be umapped.
1356          */
1357         ql_unmap_send(qdev, tx_ring_desc, map_idx);
1358         return NETDEV_TX_BUSY;
1359 }
1360
1361 /* Categorizing receive firmware frame errors */
1362 static void ql_categorize_rx_err(struct ql_adapter *qdev, u8 rx_err,
1363                                  struct rx_ring *rx_ring)
1364 {
1365         struct nic_stats *stats = &qdev->nic_stats;
1366
1367         stats->rx_err_count++;
1368         rx_ring->rx_errors++;
1369
1370         switch (rx_err & IB_MAC_IOCB_RSP_ERR_MASK) {
1371         case IB_MAC_IOCB_RSP_ERR_CODE_ERR:
1372                 stats->rx_code_err++;
1373                 break;
1374         case IB_MAC_IOCB_RSP_ERR_OVERSIZE:
1375                 stats->rx_oversize_err++;
1376                 break;
1377         case IB_MAC_IOCB_RSP_ERR_UNDERSIZE:
1378                 stats->rx_undersize_err++;
1379                 break;
1380         case IB_MAC_IOCB_RSP_ERR_PREAMBLE:
1381                 stats->rx_preamble_err++;
1382                 break;
1383         case IB_MAC_IOCB_RSP_ERR_FRAME_LEN:
1384                 stats->rx_frame_len_err++;
1385                 break;
1386         case IB_MAC_IOCB_RSP_ERR_CRC:
1387                 stats->rx_crc_err++;
1388         default:
1389                 break;
1390         }
1391 }
1392
1393 /**
1394  * ql_update_mac_hdr_len - helper routine to update the mac header length
1395  * based on vlan tags if present
1396  */
1397 static void ql_update_mac_hdr_len(struct ql_adapter *qdev,
1398                                   struct ib_mac_iocb_rsp *ib_mac_rsp,
1399                                   void *page, size_t *len)
1400 {
1401         u16 *tags;
1402
1403         if (qdev->ndev->features & NETIF_F_HW_VLAN_CTAG_RX)
1404                 return;
1405         if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V) {
1406                 tags = (u16 *)page;
1407                 /* Look for stacked vlan tags in ethertype field */
1408                 if (tags[6] == ETH_P_8021Q &&
1409                     tags[8] == ETH_P_8021Q)
1410                         *len += 2 * VLAN_HLEN;
1411                 else
1412                         *len += VLAN_HLEN;
1413         }
1414 }
1415
1416 /* Process an inbound completion from an rx ring. */
1417 static void ql_process_mac_rx_gro_page(struct ql_adapter *qdev,
1418                                        struct rx_ring *rx_ring,
1419                                        struct ib_mac_iocb_rsp *ib_mac_rsp,
1420                                        u32 length, u16 vlan_id)
1421 {
1422         struct sk_buff *skb;
1423         struct qlge_bq_desc *lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
1424         struct napi_struct *napi = &rx_ring->napi;
1425
1426         /* Frame error, so drop the packet. */
1427         if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1428                 ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1429                 put_page(lbq_desc->p.pg_chunk.page);
1430                 return;
1431         }
1432         napi->dev = qdev->ndev;
1433
1434         skb = napi_get_frags(napi);
1435         if (!skb) {
1436                 netif_err(qdev, drv, qdev->ndev,
1437                           "Couldn't get an skb, exiting.\n");
1438                 rx_ring->rx_dropped++;
1439                 put_page(lbq_desc->p.pg_chunk.page);
1440                 return;
1441         }
1442         prefetch(lbq_desc->p.pg_chunk.va);
1443         __skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags,
1444                              lbq_desc->p.pg_chunk.page,
1445                              lbq_desc->p.pg_chunk.offset,
1446                              length);
1447
1448         skb->len += length;
1449         skb->data_len += length;
1450         skb->truesize += length;
1451         skb_shinfo(skb)->nr_frags++;
1452
1453         rx_ring->rx_packets++;
1454         rx_ring->rx_bytes += length;
1455         skb->ip_summed = CHECKSUM_UNNECESSARY;
1456         skb_record_rx_queue(skb, rx_ring->cq_id);
1457         if (vlan_id != 0xffff)
1458                 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_id);
1459         napi_gro_frags(napi);
1460 }
1461
1462 /* Process an inbound completion from an rx ring. */
1463 static void ql_process_mac_rx_page(struct ql_adapter *qdev,
1464                                    struct rx_ring *rx_ring,
1465                                    struct ib_mac_iocb_rsp *ib_mac_rsp,
1466                                    u32 length, u16 vlan_id)
1467 {
1468         struct net_device *ndev = qdev->ndev;
1469         struct sk_buff *skb = NULL;
1470         void *addr;
1471         struct qlge_bq_desc *lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
1472         struct napi_struct *napi = &rx_ring->napi;
1473         size_t hlen = ETH_HLEN;
1474
1475         skb = netdev_alloc_skb(ndev, length);
1476         if (!skb) {
1477                 rx_ring->rx_dropped++;
1478                 put_page(lbq_desc->p.pg_chunk.page);
1479                 return;
1480         }
1481
1482         addr = lbq_desc->p.pg_chunk.va;
1483         prefetch(addr);
1484
1485         /* Frame error, so drop the packet. */
1486         if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1487                 ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1488                 goto err_out;
1489         }
1490
1491         /* Update the MAC header length*/
1492         ql_update_mac_hdr_len(qdev, ib_mac_rsp, addr, &hlen);
1493
1494         /* The max framesize filter on this chip is set higher than
1495          * MTU since FCoE uses 2k frames.
1496          */
1497         if (skb->len > ndev->mtu + hlen) {
1498                 netif_err(qdev, drv, qdev->ndev,
1499                           "Segment too small, dropping.\n");
1500                 rx_ring->rx_dropped++;
1501                 goto err_out;
1502         }
1503         skb_put_data(skb, addr, hlen);
1504         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1505                      "%d bytes of headers and data in large. Chain page to new skb and pull tail.\n",
1506                      length);
1507         skb_fill_page_desc(skb, 0, lbq_desc->p.pg_chunk.page,
1508                            lbq_desc->p.pg_chunk.offset + hlen, length - hlen);
1509         skb->len += length - hlen;
1510         skb->data_len += length - hlen;
1511         skb->truesize += length - hlen;
1512
1513         rx_ring->rx_packets++;
1514         rx_ring->rx_bytes += skb->len;
1515         skb->protocol = eth_type_trans(skb, ndev);
1516         skb_checksum_none_assert(skb);
1517
1518         if ((ndev->features & NETIF_F_RXCSUM) &&
1519             !(ib_mac_rsp->flags1 & IB_MAC_CSUM_ERR_MASK)) {
1520                 /* TCP frame. */
1521                 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T) {
1522                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1523                                      "TCP checksum done!\n");
1524                         skb->ip_summed = CHECKSUM_UNNECESSARY;
1525                 } else if ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_U) &&
1526                                 (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_V4)) {
1527                         /* Unfragmented ipv4 UDP frame. */
1528                         struct iphdr *iph =
1529                                 (struct iphdr *)((u8 *)addr + hlen);
1530                         if (!(iph->frag_off &
1531                                 htons(IP_MF | IP_OFFSET))) {
1532                                 skb->ip_summed = CHECKSUM_UNNECESSARY;
1533                                 netif_printk(qdev, rx_status, KERN_DEBUG,
1534                                              qdev->ndev,
1535                                              "UDP checksum done!\n");
1536                         }
1537                 }
1538         }
1539
1540         skb_record_rx_queue(skb, rx_ring->cq_id);
1541         if (vlan_id != 0xffff)
1542                 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_id);
1543         if (skb->ip_summed == CHECKSUM_UNNECESSARY)
1544                 napi_gro_receive(napi, skb);
1545         else
1546                 netif_receive_skb(skb);
1547         return;
1548 err_out:
1549         dev_kfree_skb_any(skb);
1550         put_page(lbq_desc->p.pg_chunk.page);
1551 }
1552
1553 /* Process an inbound completion from an rx ring. */
1554 static void ql_process_mac_rx_skb(struct ql_adapter *qdev,
1555                                   struct rx_ring *rx_ring,
1556                                   struct ib_mac_iocb_rsp *ib_mac_rsp,
1557                                   u32 length, u16 vlan_id)
1558 {
1559         struct qlge_bq_desc *sbq_desc = qlge_get_curr_buf(&rx_ring->sbq);
1560         struct net_device *ndev = qdev->ndev;
1561         struct sk_buff *skb, *new_skb;
1562
1563         skb = sbq_desc->p.skb;
1564         /* Allocate new_skb and copy */
1565         new_skb = netdev_alloc_skb(qdev->ndev, length + NET_IP_ALIGN);
1566         if (!new_skb) {
1567                 rx_ring->rx_dropped++;
1568                 return;
1569         }
1570         skb_reserve(new_skb, NET_IP_ALIGN);
1571
1572         dma_sync_single_for_cpu(&qdev->pdev->dev, sbq_desc->dma_addr,
1573                                 SMALL_BUF_MAP_SIZE, DMA_FROM_DEVICE);
1574
1575         skb_put_data(new_skb, skb->data, length);
1576
1577         skb = new_skb;
1578
1579         /* Frame error, so drop the packet. */
1580         if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1581                 ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1582                 dev_kfree_skb_any(skb);
1583                 return;
1584         }
1585
1586         /* loopback self test for ethtool */
1587         if (test_bit(QL_SELFTEST, &qdev->flags)) {
1588                 ql_check_lb_frame(qdev, skb);
1589                 dev_kfree_skb_any(skb);
1590                 return;
1591         }
1592
1593         /* The max framesize filter on this chip is set higher than
1594          * MTU since FCoE uses 2k frames.
1595          */
1596         if (skb->len > ndev->mtu + ETH_HLEN) {
1597                 dev_kfree_skb_any(skb);
1598                 rx_ring->rx_dropped++;
1599                 return;
1600         }
1601
1602         prefetch(skb->data);
1603         if (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) {
1604                 netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1605                              "%s Multicast.\n",
1606                              (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1607                              IB_MAC_IOCB_RSP_M_HASH ? "Hash" :
1608                              (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1609                              IB_MAC_IOCB_RSP_M_REG ? "Registered" :
1610                              (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1611                              IB_MAC_IOCB_RSP_M_PROM ? "Promiscuous" : "");
1612         }
1613         if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_P)
1614                 netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1615                              "Promiscuous Packet.\n");
1616
1617         rx_ring->rx_packets++;
1618         rx_ring->rx_bytes += skb->len;
1619         skb->protocol = eth_type_trans(skb, ndev);
1620         skb_checksum_none_assert(skb);
1621
1622         /* If rx checksum is on, and there are no
1623          * csum or frame errors.
1624          */
1625         if ((ndev->features & NETIF_F_RXCSUM) &&
1626             !(ib_mac_rsp->flags1 & IB_MAC_CSUM_ERR_MASK)) {
1627                 /* TCP frame. */
1628                 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T) {
1629                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1630                                      "TCP checksum done!\n");
1631                         skb->ip_summed = CHECKSUM_UNNECESSARY;
1632                 } else if ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_U) &&
1633                                 (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_V4)) {
1634                         /* Unfragmented ipv4 UDP frame. */
1635                         struct iphdr *iph = (struct iphdr *)skb->data;
1636
1637                         if (!(iph->frag_off &
1638                                 htons(IP_MF | IP_OFFSET))) {
1639                                 skb->ip_summed = CHECKSUM_UNNECESSARY;
1640                                 netif_printk(qdev, rx_status, KERN_DEBUG,
1641                                              qdev->ndev,
1642                                              "UDP checksum done!\n");
1643                         }
1644                 }
1645         }
1646
1647         skb_record_rx_queue(skb, rx_ring->cq_id);
1648         if (vlan_id != 0xffff)
1649                 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_id);
1650         if (skb->ip_summed == CHECKSUM_UNNECESSARY)
1651                 napi_gro_receive(&rx_ring->napi, skb);
1652         else
1653                 netif_receive_skb(skb);
1654 }
1655
1656 static void ql_realign_skb(struct sk_buff *skb, int len)
1657 {
1658         void *temp_addr = skb->data;
1659
1660         /* Undo the skb_reserve(skb,32) we did before
1661          * giving to hardware, and realign data on
1662          * a 2-byte boundary.
1663          */
1664         skb->data -= QLGE_SB_PAD - NET_IP_ALIGN;
1665         skb->tail -= QLGE_SB_PAD - NET_IP_ALIGN;
1666         memmove(skb->data, temp_addr, len);
1667 }
1668
1669 /*
1670  * This function builds an skb for the given inbound
1671  * completion.  It will be rewritten for readability in the near
1672  * future, but for not it works well.
1673  */
1674 static struct sk_buff *ql_build_rx_skb(struct ql_adapter *qdev,
1675                                        struct rx_ring *rx_ring,
1676                                        struct ib_mac_iocb_rsp *ib_mac_rsp)
1677 {
1678         u32 length = le32_to_cpu(ib_mac_rsp->data_len);
1679         u32 hdr_len = le32_to_cpu(ib_mac_rsp->hdr_len);
1680         struct qlge_bq_desc *lbq_desc, *sbq_desc;
1681         struct sk_buff *skb = NULL;
1682         size_t hlen = ETH_HLEN;
1683
1684         /*
1685          * Handle the header buffer if present.
1686          */
1687         if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV &&
1688             ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS) {
1689                 netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1690                              "Header of %d bytes in small buffer.\n", hdr_len);
1691                 /*
1692                  * Headers fit nicely into a small buffer.
1693                  */
1694                 sbq_desc = qlge_get_curr_buf(&rx_ring->sbq);
1695                 dma_unmap_single(&qdev->pdev->dev, sbq_desc->dma_addr,
1696                                  SMALL_BUF_MAP_SIZE, DMA_FROM_DEVICE);
1697                 skb = sbq_desc->p.skb;
1698                 ql_realign_skb(skb, hdr_len);
1699                 skb_put(skb, hdr_len);
1700                 sbq_desc->p.skb = NULL;
1701         }
1702
1703         /*
1704          * Handle the data buffer(s).
1705          */
1706         if (unlikely(!length)) {        /* Is there data too? */
1707                 netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1708                              "No Data buffer in this packet.\n");
1709                 return skb;
1710         }
1711
1712         if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DS) {
1713                 if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS) {
1714                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1715                                      "Headers in small, data of %d bytes in small, combine them.\n",
1716                                      length);
1717                         /*
1718                          * Data is less than small buffer size so it's
1719                          * stuffed in a small buffer.
1720                          * For this case we append the data
1721                          * from the "data" small buffer to the "header" small
1722                          * buffer.
1723                          */
1724                         sbq_desc = qlge_get_curr_buf(&rx_ring->sbq);
1725                         dma_sync_single_for_cpu(&qdev->pdev->dev,
1726                                                 sbq_desc->dma_addr,
1727                                                 SMALL_BUF_MAP_SIZE,
1728                                                 DMA_FROM_DEVICE);
1729                         skb_put_data(skb, sbq_desc->p.skb->data, length);
1730                 } else {
1731                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1732                                      "%d bytes in a single small buffer.\n",
1733                                      length);
1734                         sbq_desc = qlge_get_curr_buf(&rx_ring->sbq);
1735                         skb = sbq_desc->p.skb;
1736                         ql_realign_skb(skb, length);
1737                         skb_put(skb, length);
1738                         dma_unmap_single(&qdev->pdev->dev, sbq_desc->dma_addr,
1739                                          SMALL_BUF_MAP_SIZE,
1740                                          DMA_FROM_DEVICE);
1741                         sbq_desc->p.skb = NULL;
1742                 }
1743         } else if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DL) {
1744                 if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS) {
1745                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1746                                      "Header in small, %d bytes in large. Chain large to small!\n",
1747                                      length);
1748                         /*
1749                          * The data is in a single large buffer.  We
1750                          * chain it to the header buffer's skb and let
1751                          * it rip.
1752                          */
1753                         lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
1754                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1755                                      "Chaining page at offset = %d, for %d bytes  to skb.\n",
1756                                      lbq_desc->p.pg_chunk.offset, length);
1757                         skb_fill_page_desc(skb, 0, lbq_desc->p.pg_chunk.page,
1758                                            lbq_desc->p.pg_chunk.offset, length);
1759                         skb->len += length;
1760                         skb->data_len += length;
1761                         skb->truesize += length;
1762                 } else {
1763                         /*
1764                          * The headers and data are in a single large buffer. We
1765                          * copy it to a new skb and let it go. This can happen with
1766                          * jumbo mtu on a non-TCP/UDP frame.
1767                          */
1768                         lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
1769                         skb = netdev_alloc_skb(qdev->ndev, length);
1770                         if (!skb) {
1771                                 netif_printk(qdev, probe, KERN_DEBUG, qdev->ndev,
1772                                              "No skb available, drop the packet.\n");
1773                                 return NULL;
1774                         }
1775                         dma_unmap_page(&qdev->pdev->dev, lbq_desc->dma_addr,
1776                                        qdev->lbq_buf_size,
1777                                        DMA_FROM_DEVICE);
1778                         skb_reserve(skb, NET_IP_ALIGN);
1779                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1780                                      "%d bytes of headers and data in large. Chain page to new skb and pull tail.\n",
1781                                      length);
1782                         skb_fill_page_desc(skb, 0, lbq_desc->p.pg_chunk.page,
1783                                            lbq_desc->p.pg_chunk.offset,
1784                                            length);
1785                         skb->len += length;
1786                         skb->data_len += length;
1787                         skb->truesize += length;
1788                         ql_update_mac_hdr_len(qdev, ib_mac_rsp,
1789                                               lbq_desc->p.pg_chunk.va,
1790                                               &hlen);
1791                         __pskb_pull_tail(skb, hlen);
1792                 }
1793         } else {
1794                 /*
1795                  * The data is in a chain of large buffers
1796                  * pointed to by a small buffer.  We loop
1797                  * thru and chain them to the our small header
1798                  * buffer's skb.
1799                  * frags:  There are 18 max frags and our small
1800                  *         buffer will hold 32 of them. The thing is,
1801                  *         we'll use 3 max for our 9000 byte jumbo
1802                  *         frames.  If the MTU goes up we could
1803                  *          eventually be in trouble.
1804                  */
1805                 int size, i = 0;
1806
1807                 sbq_desc = qlge_get_curr_buf(&rx_ring->sbq);
1808                 dma_unmap_single(&qdev->pdev->dev, sbq_desc->dma_addr,
1809                                  SMALL_BUF_MAP_SIZE, DMA_FROM_DEVICE);
1810                 if (!(ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS)) {
1811                         /*
1812                          * This is an non TCP/UDP IP frame, so
1813                          * the headers aren't split into a small
1814                          * buffer.  We have to use the small buffer
1815                          * that contains our sg list as our skb to
1816                          * send upstairs. Copy the sg list here to
1817                          * a local buffer and use it to find the
1818                          * pages to chain.
1819                          */
1820                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1821                                      "%d bytes of headers & data in chain of large.\n",
1822                                      length);
1823                         skb = sbq_desc->p.skb;
1824                         sbq_desc->p.skb = NULL;
1825                         skb_reserve(skb, NET_IP_ALIGN);
1826                 }
1827                 do {
1828                         lbq_desc = ql_get_curr_lchunk(qdev, rx_ring);
1829                         size = min(length, qdev->lbq_buf_size);
1830
1831                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1832                                      "Adding page %d to skb for %d bytes.\n",
1833                                      i, size);
1834                         skb_fill_page_desc(skb, i,
1835                                            lbq_desc->p.pg_chunk.page,
1836                                            lbq_desc->p.pg_chunk.offset, size);
1837                         skb->len += size;
1838                         skb->data_len += size;
1839                         skb->truesize += size;
1840                         length -= size;
1841                         i++;
1842                 } while (length > 0);
1843                 ql_update_mac_hdr_len(qdev, ib_mac_rsp, lbq_desc->p.pg_chunk.va,
1844                                       &hlen);
1845                 __pskb_pull_tail(skb, hlen);
1846         }
1847         return skb;
1848 }
1849
1850 /* Process an inbound completion from an rx ring. */
1851 static void ql_process_mac_split_rx_intr(struct ql_adapter *qdev,
1852                                          struct rx_ring *rx_ring,
1853                                          struct ib_mac_iocb_rsp *ib_mac_rsp,
1854                                          u16 vlan_id)
1855 {
1856         struct net_device *ndev = qdev->ndev;
1857         struct sk_buff *skb = NULL;
1858
1859         QL_DUMP_IB_MAC_RSP(ib_mac_rsp);
1860
1861         skb = ql_build_rx_skb(qdev, rx_ring, ib_mac_rsp);
1862         if (unlikely(!skb)) {
1863                 netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1864                              "No skb available, drop packet.\n");
1865                 rx_ring->rx_dropped++;
1866                 return;
1867         }
1868
1869         /* Frame error, so drop the packet. */
1870         if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) {
1871                 ql_categorize_rx_err(qdev, ib_mac_rsp->flags2, rx_ring);
1872                 dev_kfree_skb_any(skb);
1873                 return;
1874         }
1875
1876         /* The max framesize filter on this chip is set higher than
1877          * MTU since FCoE uses 2k frames.
1878          */
1879         if (skb->len > ndev->mtu + ETH_HLEN) {
1880                 dev_kfree_skb_any(skb);
1881                 rx_ring->rx_dropped++;
1882                 return;
1883         }
1884
1885         /* loopback self test for ethtool */
1886         if (test_bit(QL_SELFTEST, &qdev->flags)) {
1887                 ql_check_lb_frame(qdev, skb);
1888                 dev_kfree_skb_any(skb);
1889                 return;
1890         }
1891
1892         prefetch(skb->data);
1893         if (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) {
1894                 netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev, "%s Multicast.\n",
1895                              (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1896                              IB_MAC_IOCB_RSP_M_HASH ? "Hash" :
1897                              (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1898                              IB_MAC_IOCB_RSP_M_REG ? "Registered" :
1899                              (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1900                              IB_MAC_IOCB_RSP_M_PROM ? "Promiscuous" : "");
1901                 rx_ring->rx_multicast++;
1902         }
1903         if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_P) {
1904                 netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1905                              "Promiscuous Packet.\n");
1906         }
1907
1908         skb->protocol = eth_type_trans(skb, ndev);
1909         skb_checksum_none_assert(skb);
1910
1911         /* If rx checksum is on, and there are no
1912          * csum or frame errors.
1913          */
1914         if ((ndev->features & NETIF_F_RXCSUM) &&
1915             !(ib_mac_rsp->flags1 & IB_MAC_CSUM_ERR_MASK)) {
1916                 /* TCP frame. */
1917                 if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T) {
1918                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1919                                      "TCP checksum done!\n");
1920                         skb->ip_summed = CHECKSUM_UNNECESSARY;
1921                 } else if ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_U) &&
1922                                 (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_V4)) {
1923                 /* Unfragmented ipv4 UDP frame. */
1924                         struct iphdr *iph = (struct iphdr *)skb->data;
1925
1926                         if (!(iph->frag_off &
1927                                 htons(IP_MF | IP_OFFSET))) {
1928                                 skb->ip_summed = CHECKSUM_UNNECESSARY;
1929                                 netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
1930                                              "TCP checksum done!\n");
1931                         }
1932                 }
1933         }
1934
1935         rx_ring->rx_packets++;
1936         rx_ring->rx_bytes += skb->len;
1937         skb_record_rx_queue(skb, rx_ring->cq_id);
1938         if (vlan_id != 0xffff)
1939                 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_id);
1940         if (skb->ip_summed == CHECKSUM_UNNECESSARY)
1941                 napi_gro_receive(&rx_ring->napi, skb);
1942         else
1943                 netif_receive_skb(skb);
1944 }
1945
1946 /* Process an inbound completion from an rx ring. */
1947 static unsigned long ql_process_mac_rx_intr(struct ql_adapter *qdev,
1948                                             struct rx_ring *rx_ring,
1949                                             struct ib_mac_iocb_rsp *ib_mac_rsp)
1950 {
1951         u32 length = le32_to_cpu(ib_mac_rsp->data_len);
1952         u16 vlan_id = ((ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V) &&
1953                         (qdev->ndev->features & NETIF_F_HW_VLAN_CTAG_RX)) ?
1954                         ((le16_to_cpu(ib_mac_rsp->vlan_id) &
1955                         IB_MAC_IOCB_RSP_VLAN_MASK)) : 0xffff;
1956
1957         QL_DUMP_IB_MAC_RSP(ib_mac_rsp);
1958
1959         if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV) {
1960                 /* The data and headers are split into
1961                  * separate buffers.
1962                  */
1963                 ql_process_mac_split_rx_intr(qdev, rx_ring, ib_mac_rsp,
1964                                              vlan_id);
1965         } else if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DS) {
1966                 /* The data fit in a single small buffer.
1967                  * Allocate a new skb, copy the data and
1968                  * return the buffer to the free pool.
1969                  */
1970                 ql_process_mac_rx_skb(qdev, rx_ring, ib_mac_rsp, length,
1971                                       vlan_id);
1972         } else if ((ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DL) &&
1973                 !(ib_mac_rsp->flags1 & IB_MAC_CSUM_ERR_MASK) &&
1974                 (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T)) {
1975                 /* TCP packet in a page chunk that's been checksummed.
1976                  * Tack it on to our GRO skb and let it go.
1977                  */
1978                 ql_process_mac_rx_gro_page(qdev, rx_ring, ib_mac_rsp, length,
1979                                            vlan_id);
1980         } else if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DL) {
1981                 /* Non-TCP packet in a page chunk. Allocate an
1982                  * skb, tack it on frags, and send it up.
1983                  */
1984                 ql_process_mac_rx_page(qdev, rx_ring, ib_mac_rsp, length,
1985                                        vlan_id);
1986         } else {
1987                 /* Non-TCP/UDP large frames that span multiple buffers
1988                  * can be processed corrrectly by the split frame logic.
1989                  */
1990                 ql_process_mac_split_rx_intr(qdev, rx_ring, ib_mac_rsp,
1991                                              vlan_id);
1992         }
1993
1994         return (unsigned long)length;
1995 }
1996
1997 /* Process an outbound completion from an rx ring. */
1998 static void ql_process_mac_tx_intr(struct ql_adapter *qdev,
1999                                    struct ob_mac_iocb_rsp *mac_rsp)
2000 {
2001         struct tx_ring *tx_ring;
2002         struct tx_ring_desc *tx_ring_desc;
2003
2004         QL_DUMP_OB_MAC_RSP(mac_rsp);
2005         tx_ring = &qdev->tx_ring[mac_rsp->txq_idx];
2006         tx_ring_desc = &tx_ring->q[mac_rsp->tid];
2007         ql_unmap_send(qdev, tx_ring_desc, tx_ring_desc->map_cnt);
2008         tx_ring->tx_bytes += (tx_ring_desc->skb)->len;
2009         tx_ring->tx_packets++;
2010         dev_kfree_skb(tx_ring_desc->skb);
2011         tx_ring_desc->skb = NULL;
2012
2013         if (unlikely(mac_rsp->flags1 & (OB_MAC_IOCB_RSP_E |
2014                                         OB_MAC_IOCB_RSP_S |
2015                                         OB_MAC_IOCB_RSP_L |
2016                                         OB_MAC_IOCB_RSP_P | OB_MAC_IOCB_RSP_B))) {
2017                 if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_E) {
2018                         netif_warn(qdev, tx_done, qdev->ndev,
2019                                    "Total descriptor length did not match transfer length.\n");
2020                 }
2021                 if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_S) {
2022                         netif_warn(qdev, tx_done, qdev->ndev,
2023                                    "Frame too short to be valid, not sent.\n");
2024                 }
2025                 if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_L) {
2026                         netif_warn(qdev, tx_done, qdev->ndev,
2027                                    "Frame too long, but sent anyway.\n");
2028                 }
2029                 if (mac_rsp->flags1 & OB_MAC_IOCB_RSP_B) {
2030                         netif_warn(qdev, tx_done, qdev->ndev,
2031                                    "PCI backplane error. Frame not sent.\n");
2032                 }
2033         }
2034         atomic_inc(&tx_ring->tx_count);
2035 }
2036
2037 /* Fire up a handler to reset the MPI processor. */
2038 void ql_queue_fw_error(struct ql_adapter *qdev)
2039 {
2040         ql_link_off(qdev);
2041         queue_delayed_work(qdev->workqueue, &qdev->mpi_reset_work, 0);
2042 }
2043
2044 void ql_queue_asic_error(struct ql_adapter *qdev)
2045 {
2046         ql_link_off(qdev);
2047         ql_disable_interrupts(qdev);
2048         /* Clear adapter up bit to signal the recovery
2049          * process that it shouldn't kill the reset worker
2050          * thread
2051          */
2052         clear_bit(QL_ADAPTER_UP, &qdev->flags);
2053         /* Set asic recovery bit to indicate reset process that we are
2054          * in fatal error recovery process rather than normal close
2055          */
2056         set_bit(QL_ASIC_RECOVERY, &qdev->flags);
2057         queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0);
2058 }
2059
2060 static void ql_process_chip_ae_intr(struct ql_adapter *qdev,
2061                                     struct ib_ae_iocb_rsp *ib_ae_rsp)
2062 {
2063         switch (ib_ae_rsp->event) {
2064         case MGMT_ERR_EVENT:
2065                 netif_err(qdev, rx_err, qdev->ndev,
2066                           "Management Processor Fatal Error.\n");
2067                 ql_queue_fw_error(qdev);
2068                 return;
2069
2070         case CAM_LOOKUP_ERR_EVENT:
2071                 netdev_err(qdev->ndev, "Multiple CAM hits lookup occurred.\n");
2072                 netdev_err(qdev->ndev, "This event shouldn't occur.\n");
2073                 ql_queue_asic_error(qdev);
2074                 return;
2075
2076         case SOFT_ECC_ERROR_EVENT:
2077                 netdev_err(qdev->ndev, "Soft ECC error detected.\n");
2078                 ql_queue_asic_error(qdev);
2079                 break;
2080
2081         case PCI_ERR_ANON_BUF_RD:
2082                 netdev_err(qdev->ndev, "PCI error occurred when reading "
2083                                         "anonymous buffers from rx_ring %d.\n",
2084                                         ib_ae_rsp->q_id);
2085                 ql_queue_asic_error(qdev);
2086                 break;
2087
2088         default:
2089                 netif_err(qdev, drv, qdev->ndev, "Unexpected event %d.\n",
2090                           ib_ae_rsp->event);
2091                 ql_queue_asic_error(qdev);
2092                 break;
2093         }
2094 }
2095
2096 static int ql_clean_outbound_rx_ring(struct rx_ring *rx_ring)
2097 {
2098         struct ql_adapter *qdev = rx_ring->qdev;
2099         u32 prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
2100         struct ob_mac_iocb_rsp *net_rsp = NULL;
2101         int count = 0;
2102
2103         struct tx_ring *tx_ring;
2104         /* While there are entries in the completion queue. */
2105         while (prod != rx_ring->cnsmr_idx) {
2106
2107                 netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
2108                              "cq_id = %d, prod = %d, cnsmr = %d\n",
2109                              rx_ring->cq_id, prod, rx_ring->cnsmr_idx);
2110
2111                 net_rsp = (struct ob_mac_iocb_rsp *)rx_ring->curr_entry;
2112                 rmb();
2113                 switch (net_rsp->opcode) {
2114
2115                 case OPCODE_OB_MAC_TSO_IOCB:
2116                 case OPCODE_OB_MAC_IOCB:
2117                         ql_process_mac_tx_intr(qdev, net_rsp);
2118                         break;
2119                 default:
2120                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
2121                                      "Hit default case, not handled! dropping the packet, opcode = %x.\n",
2122                                      net_rsp->opcode);
2123                 }
2124                 count++;
2125                 ql_update_cq(rx_ring);
2126                 prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
2127         }
2128         if (!net_rsp)
2129                 return 0;
2130         ql_write_cq_idx(rx_ring);
2131         tx_ring = &qdev->tx_ring[net_rsp->txq_idx];
2132         if (__netif_subqueue_stopped(qdev->ndev, tx_ring->wq_id)) {
2133                 if ((atomic_read(&tx_ring->tx_count) > (tx_ring->wq_len / 4)))
2134                         /*
2135                          * The queue got stopped because the tx_ring was full.
2136                          * Wake it up, because it's now at least 25% empty.
2137                          */
2138                         netif_wake_subqueue(qdev->ndev, tx_ring->wq_id);
2139         }
2140
2141         return count;
2142 }
2143
2144 static int ql_clean_inbound_rx_ring(struct rx_ring *rx_ring, int budget)
2145 {
2146         struct ql_adapter *qdev = rx_ring->qdev;
2147         u32 prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
2148         struct ql_net_rsp_iocb *net_rsp;
2149         int count = 0;
2150
2151         /* While there are entries in the completion queue. */
2152         while (prod != rx_ring->cnsmr_idx) {
2153
2154                 netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
2155                              "cq_id = %d, prod = %d, cnsmr = %d\n",
2156                              rx_ring->cq_id, prod, rx_ring->cnsmr_idx);
2157
2158                 net_rsp = rx_ring->curr_entry;
2159                 rmb();
2160                 switch (net_rsp->opcode) {
2161                 case OPCODE_IB_MAC_IOCB:
2162                         ql_process_mac_rx_intr(qdev, rx_ring,
2163                                                (struct ib_mac_iocb_rsp *)
2164                                                net_rsp);
2165                         break;
2166
2167                 case OPCODE_IB_AE_IOCB:
2168                         ql_process_chip_ae_intr(qdev, (struct ib_ae_iocb_rsp *)
2169                                                 net_rsp);
2170                         break;
2171                 default:
2172                         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
2173                                      "Hit default case, not handled! dropping the packet, opcode = %x.\n",
2174                                      net_rsp->opcode);
2175                         break;
2176                 }
2177                 count++;
2178                 ql_update_cq(rx_ring);
2179                 prod = ql_read_sh_reg(rx_ring->prod_idx_sh_reg);
2180                 if (count == budget)
2181                         break;
2182         }
2183         ql_update_buffer_queues(rx_ring, GFP_ATOMIC, 0);
2184         ql_write_cq_idx(rx_ring);
2185         return count;
2186 }
2187
2188 static int ql_napi_poll_msix(struct napi_struct *napi, int budget)
2189 {
2190         struct rx_ring *rx_ring = container_of(napi, struct rx_ring, napi);
2191         struct ql_adapter *qdev = rx_ring->qdev;
2192         struct rx_ring *trx_ring;
2193         int i, work_done = 0;
2194         struct intr_context *ctx = &qdev->intr_context[rx_ring->cq_id];
2195
2196         netif_printk(qdev, rx_status, KERN_DEBUG, qdev->ndev,
2197                      "Enter, NAPI POLL cq_id = %d.\n", rx_ring->cq_id);
2198
2199         /* Service the TX rings first.  They start
2200          * right after the RSS rings.
2201          */
2202         for (i = qdev->rss_ring_count; i < qdev->rx_ring_count; i++) {
2203                 trx_ring = &qdev->rx_ring[i];
2204                 /* If this TX completion ring belongs to this vector and
2205                  * it's not empty then service it.
2206                  */
2207                 if ((ctx->irq_mask & (1 << trx_ring->cq_id)) &&
2208                     (ql_read_sh_reg(trx_ring->prod_idx_sh_reg) !=
2209                      trx_ring->cnsmr_idx)) {
2210                         netif_printk(qdev, intr, KERN_DEBUG, qdev->ndev,
2211                                      "%s: Servicing TX completion ring %d.\n",
2212                                      __func__, trx_ring->cq_id);
2213                         ql_clean_outbound_rx_ring(trx_ring);
2214                 }
2215         }
2216
2217         /*
2218          * Now service the RSS ring if it's active.
2219          */
2220         if (ql_read_sh_reg(rx_ring->prod_idx_sh_reg) !=
2221                                         rx_ring->cnsmr_idx) {
2222                 netif_printk(qdev, intr, KERN_DEBUG, qdev->ndev,
2223                              "%s: Servicing RX completion ring %d.\n",
2224                              __func__, rx_ring->cq_id);
2225                 work_done = ql_clean_inbound_rx_ring(rx_ring, budget);
2226         }
2227
2228         if (work_done < budget) {
2229                 napi_complete_done(napi, work_done);
2230                 ql_enable_completion_interrupt(qdev, rx_ring->irq);
2231         }
2232         return work_done;
2233 }
2234
2235 static void qlge_vlan_mode(struct net_device *ndev, netdev_features_t features)
2236 {
2237         struct ql_adapter *qdev = netdev_priv(ndev);
2238
2239         if (features & NETIF_F_HW_VLAN_CTAG_RX) {
2240                 ql_write32(qdev, NIC_RCV_CFG, NIC_RCV_CFG_VLAN_MASK |
2241                                  NIC_RCV_CFG_VLAN_MATCH_AND_NON);
2242         } else {
2243                 ql_write32(qdev, NIC_RCV_CFG, NIC_RCV_CFG_VLAN_MASK);
2244         }
2245 }
2246
2247 /**
2248  * qlge_update_hw_vlan_features - helper routine to reinitialize the adapter
2249  * based on the features to enable/disable hardware vlan accel
2250  */
2251 static int qlge_update_hw_vlan_features(struct net_device *ndev,
2252                                         netdev_features_t features)
2253 {
2254         struct ql_adapter *qdev = netdev_priv(ndev);
2255         int status = 0;
2256         bool need_restart = netif_running(ndev);
2257
2258         if (need_restart) {
2259                 status = ql_adapter_down(qdev);
2260                 if (status) {
2261                         netif_err(qdev, link, qdev->ndev,
2262                                   "Failed to bring down the adapter\n");
2263                         return status;
2264                 }
2265         }
2266
2267         /* update the features with resent change */
2268         ndev->features = features;
2269
2270         if (need_restart) {
2271                 status = ql_adapter_up(qdev);
2272                 if (status) {
2273                         netif_err(qdev, link, qdev->ndev,
2274                                   "Failed to bring up the adapter\n");
2275                         return status;
2276                 }
2277         }
2278
2279         return status;
2280 }
2281
2282 static int qlge_set_features(struct net_device *ndev,
2283                              netdev_features_t features)
2284 {
2285         netdev_features_t changed = ndev->features ^ features;
2286         int err;
2287
2288         if (changed & NETIF_F_HW_VLAN_CTAG_RX) {
2289                 /* Update the behavior of vlan accel in the adapter */
2290                 err = qlge_update_hw_vlan_features(ndev, features);
2291                 if (err)
2292                         return err;
2293
2294                 qlge_vlan_mode(ndev, features);
2295         }
2296
2297         return 0;
2298 }
2299
2300 static int __qlge_vlan_rx_add_vid(struct ql_adapter *qdev, u16 vid)
2301 {
2302         u32 enable_bit = MAC_ADDR_E;
2303         int err;
2304
2305         err = ql_set_mac_addr_reg(qdev, (u8 *)&enable_bit,
2306                                   MAC_ADDR_TYPE_VLAN, vid);
2307         if (err)
2308                 netif_err(qdev, ifup, qdev->ndev,
2309                           "Failed to init vlan address.\n");
2310         return err;
2311 }
2312
2313 static int qlge_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid)
2314 {
2315         struct ql_adapter *qdev = netdev_priv(ndev);
2316         int status;
2317         int err;
2318
2319         status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
2320         if (status)
2321                 return status;
2322
2323         err = __qlge_vlan_rx_add_vid(qdev, vid);
2324         set_bit(vid, qdev->active_vlans);
2325
2326         ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
2327
2328         return err;
2329 }
2330
2331 static int __qlge_vlan_rx_kill_vid(struct ql_adapter *qdev, u16 vid)
2332 {
2333         u32 enable_bit = 0;
2334         int err;
2335
2336         err = ql_set_mac_addr_reg(qdev, (u8 *)&enable_bit,
2337                                   MAC_ADDR_TYPE_VLAN, vid);
2338         if (err)
2339                 netif_err(qdev, ifup, qdev->ndev,
2340                           "Failed to clear vlan address.\n");
2341         return err;
2342 }
2343
2344 static int qlge_vlan_rx_kill_vid(struct net_device *ndev, __be16 proto, u16 vid)
2345 {
2346         struct ql_adapter *qdev = netdev_priv(ndev);
2347         int status;
2348         int err;
2349
2350         status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
2351         if (status)
2352                 return status;
2353
2354         err = __qlge_vlan_rx_kill_vid(qdev, vid);
2355         clear_bit(vid, qdev->active_vlans);
2356
2357         ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
2358
2359         return err;
2360 }
2361
2362 static void qlge_restore_vlan(struct ql_adapter *qdev)
2363 {
2364         int status;
2365         u16 vid;
2366
2367         status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
2368         if (status)
2369                 return;
2370
2371         for_each_set_bit(vid, qdev->active_vlans, VLAN_N_VID)
2372                 __qlge_vlan_rx_add_vid(qdev, vid);
2373
2374         ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
2375 }
2376
2377 /* MSI-X Multiple Vector Interrupt Handler for inbound completions. */
2378 static irqreturn_t qlge_msix_rx_isr(int irq, void *dev_id)
2379 {
2380         struct rx_ring *rx_ring = dev_id;
2381
2382         napi_schedule(&rx_ring->napi);
2383         return IRQ_HANDLED;
2384 }
2385
2386 /* This handles a fatal error, MPI activity, and the default
2387  * rx_ring in an MSI-X multiple vector environment.
2388  * In MSI/Legacy environment it also process the rest of
2389  * the rx_rings.
2390  */
2391 static irqreturn_t qlge_isr(int irq, void *dev_id)
2392 {
2393         struct rx_ring *rx_ring = dev_id;
2394         struct ql_adapter *qdev = rx_ring->qdev;
2395         struct intr_context *intr_context = &qdev->intr_context[0];
2396         u32 var;
2397         int work_done = 0;
2398
2399         /* Experience shows that when using INTx interrupts, interrupts must
2400          * be masked manually.
2401          * When using MSI mode, INTR_EN_EN must be explicitly disabled
2402          * (even though it is auto-masked), otherwise a later command to
2403          * enable it is not effective.
2404          */
2405         if (!test_bit(QL_MSIX_ENABLED, &qdev->flags))
2406                 ql_disable_completion_interrupt(qdev, 0);
2407
2408         var = ql_read32(qdev, STS);
2409
2410         /*
2411          * Check for fatal error.
2412          */
2413         if (var & STS_FE) {
2414                 ql_disable_completion_interrupt(qdev, 0);
2415                 ql_queue_asic_error(qdev);
2416                 netdev_err(qdev->ndev, "Got fatal error, STS = %x.\n", var);
2417                 var = ql_read32(qdev, ERR_STS);
2418                 netdev_err(qdev->ndev, "Resetting chip. "
2419                                         "Error Status Register = 0x%x\n", var);
2420                 return IRQ_HANDLED;
2421         }
2422
2423         /*
2424          * Check MPI processor activity.
2425          */
2426         if ((var & STS_PI) &&
2427             (ql_read32(qdev, INTR_MASK) & INTR_MASK_PI)) {
2428                 /*
2429                  * We've got an async event or mailbox completion.
2430                  * Handle it and clear the source of the interrupt.
2431                  */
2432                 netif_err(qdev, intr, qdev->ndev,
2433                           "Got MPI processor interrupt.\n");
2434                 ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16));
2435                 queue_delayed_work_on(smp_processor_id(),
2436                                       qdev->workqueue, &qdev->mpi_work, 0);
2437                 work_done++;
2438         }
2439
2440         /*
2441          * Get the bit-mask that shows the active queues for this
2442          * pass.  Compare it to the queues that this irq services
2443          * and call napi if there's a match.
2444          */
2445         var = ql_read32(qdev, ISR1);
2446         if (var & intr_context->irq_mask) {
2447                 netif_info(qdev, intr, qdev->ndev,
2448                            "Waking handler for rx_ring[0].\n");
2449                 napi_schedule(&rx_ring->napi);
2450                 work_done++;
2451         } else {
2452                 /* Experience shows that the device sometimes signals an
2453                  * interrupt but no work is scheduled from this function.
2454                  * Nevertheless, the interrupt is auto-masked. Therefore, we
2455                  * systematically re-enable the interrupt if we didn't
2456                  * schedule napi.
2457                  */
2458                 ql_enable_completion_interrupt(qdev, 0);
2459         }
2460
2461         return work_done ? IRQ_HANDLED : IRQ_NONE;
2462 }
2463
2464 static int ql_tso(struct sk_buff *skb, struct ob_mac_tso_iocb_req *mac_iocb_ptr)
2465 {
2466
2467         if (skb_is_gso(skb)) {
2468                 int err;
2469                 __be16 l3_proto = vlan_get_protocol(skb);
2470
2471                 err = skb_cow_head(skb, 0);
2472                 if (err < 0)
2473                         return err;
2474
2475                 mac_iocb_ptr->opcode = OPCODE_OB_MAC_TSO_IOCB;
2476                 mac_iocb_ptr->flags3 |= OB_MAC_TSO_IOCB_IC;
2477                 mac_iocb_ptr->frame_len = cpu_to_le32((u32)skb->len);
2478                 mac_iocb_ptr->total_hdrs_len =
2479                     cpu_to_le16(skb_transport_offset(skb) + tcp_hdrlen(skb));
2480                 mac_iocb_ptr->net_trans_offset =
2481                     cpu_to_le16(skb_network_offset(skb) |
2482                                 skb_transport_offset(skb)
2483                                 << OB_MAC_TRANSPORT_HDR_SHIFT);
2484                 mac_iocb_ptr->mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
2485                 mac_iocb_ptr->flags2 |= OB_MAC_TSO_IOCB_LSO;
2486                 if (likely(l3_proto == htons(ETH_P_IP))) {
2487                         struct iphdr *iph = ip_hdr(skb);
2488
2489                         iph->check = 0;
2490                         mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP4;
2491                         tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr,
2492                                                                  iph->daddr, 0,
2493                                                                  IPPROTO_TCP,
2494                                                                  0);
2495                 } else if (l3_proto == htons(ETH_P_IPV6)) {
2496                         mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP6;
2497                         tcp_hdr(skb)->check =
2498                             ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
2499                                              &ipv6_hdr(skb)->daddr,
2500                                              0, IPPROTO_TCP, 0);
2501                 }
2502                 return 1;
2503         }
2504         return 0;
2505 }
2506
2507 static void ql_hw_csum_setup(struct sk_buff *skb,
2508                              struct ob_mac_tso_iocb_req *mac_iocb_ptr)
2509 {
2510         int len;
2511         struct iphdr *iph = ip_hdr(skb);
2512         __sum16 *check;
2513
2514         mac_iocb_ptr->opcode = OPCODE_OB_MAC_TSO_IOCB;
2515         mac_iocb_ptr->frame_len = cpu_to_le32((u32)skb->len);
2516         mac_iocb_ptr->net_trans_offset =
2517                 cpu_to_le16(skb_network_offset(skb) |
2518                 skb_transport_offset(skb) << OB_MAC_TRANSPORT_HDR_SHIFT);
2519
2520         mac_iocb_ptr->flags1 |= OB_MAC_TSO_IOCB_IP4;
2521         len = (ntohs(iph->tot_len) - (iph->ihl << 2));
2522         if (likely(iph->protocol == IPPROTO_TCP)) {
2523                 check = &(tcp_hdr(skb)->check);
2524                 mac_iocb_ptr->flags2 |= OB_MAC_TSO_IOCB_TC;
2525                 mac_iocb_ptr->total_hdrs_len =
2526                     cpu_to_le16(skb_transport_offset(skb) +
2527                                 (tcp_hdr(skb)->doff << 2));
2528         } else {
2529                 check = &(udp_hdr(skb)->check);
2530                 mac_iocb_ptr->flags2 |= OB_MAC_TSO_IOCB_UC;
2531                 mac_iocb_ptr->total_hdrs_len =
2532                     cpu_to_le16(skb_transport_offset(skb) +
2533                                 sizeof(struct udphdr));
2534         }
2535         *check = ~csum_tcpudp_magic(iph->saddr,
2536                                     iph->daddr, len, iph->protocol, 0);
2537 }
2538
2539 static netdev_tx_t qlge_send(struct sk_buff *skb, struct net_device *ndev)
2540 {
2541         struct tx_ring_desc *tx_ring_desc;
2542         struct ob_mac_iocb_req *mac_iocb_ptr;
2543         struct ql_adapter *qdev = netdev_priv(ndev);
2544         int tso;
2545         struct tx_ring *tx_ring;
2546         u32 tx_ring_idx = (u32)skb->queue_mapping;
2547
2548         tx_ring = &qdev->tx_ring[tx_ring_idx];
2549
2550         if (skb_padto(skb, ETH_ZLEN))
2551                 return NETDEV_TX_OK;
2552
2553         if (unlikely(atomic_read(&tx_ring->tx_count) < 2)) {
2554                 netif_info(qdev, tx_queued, qdev->ndev,
2555                            "%s: BUG! shutting down tx queue %d due to lack of resources.\n",
2556                            __func__, tx_ring_idx);
2557                 netif_stop_subqueue(ndev, tx_ring->wq_id);
2558                 tx_ring->tx_errors++;
2559                 return NETDEV_TX_BUSY;
2560         }
2561         tx_ring_desc = &tx_ring->q[tx_ring->prod_idx];
2562         mac_iocb_ptr = tx_ring_desc->queue_entry;
2563         memset((void *)mac_iocb_ptr, 0, sizeof(*mac_iocb_ptr));
2564
2565         mac_iocb_ptr->opcode = OPCODE_OB_MAC_IOCB;
2566         mac_iocb_ptr->tid = tx_ring_desc->index;
2567         /* We use the upper 32-bits to store the tx queue for this IO.
2568          * When we get the completion we can use it to establish the context.
2569          */
2570         mac_iocb_ptr->txq_idx = tx_ring_idx;
2571         tx_ring_desc->skb = skb;
2572
2573         mac_iocb_ptr->frame_len = cpu_to_le16((u16)skb->len);
2574
2575         if (skb_vlan_tag_present(skb)) {
2576                 netif_printk(qdev, tx_queued, KERN_DEBUG, qdev->ndev,
2577                              "Adding a vlan tag %d.\n", skb_vlan_tag_get(skb));
2578                 mac_iocb_ptr->flags3 |= OB_MAC_IOCB_V;
2579                 mac_iocb_ptr->vlan_tci = cpu_to_le16(skb_vlan_tag_get(skb));
2580         }
2581         tso = ql_tso(skb, (struct ob_mac_tso_iocb_req *)mac_iocb_ptr);
2582         if (tso < 0) {
2583                 dev_kfree_skb_any(skb);
2584                 return NETDEV_TX_OK;
2585         } else if (unlikely(!tso) && (skb->ip_summed == CHECKSUM_PARTIAL)) {
2586                 ql_hw_csum_setup(skb,
2587                                  (struct ob_mac_tso_iocb_req *)mac_iocb_ptr);
2588         }
2589         if (ql_map_send(qdev, mac_iocb_ptr, skb, tx_ring_desc) !=
2590                         NETDEV_TX_OK) {
2591                 netif_err(qdev, tx_queued, qdev->ndev,
2592                           "Could not map the segments.\n");
2593                 tx_ring->tx_errors++;
2594                 return NETDEV_TX_BUSY;
2595         }
2596         QL_DUMP_OB_MAC_IOCB(mac_iocb_ptr);
2597         tx_ring->prod_idx++;
2598         if (tx_ring->prod_idx == tx_ring->wq_len)
2599                 tx_ring->prod_idx = 0;
2600         wmb();
2601
2602         ql_write_db_reg_relaxed(tx_ring->prod_idx, tx_ring->prod_idx_db_reg);
2603         netif_printk(qdev, tx_queued, KERN_DEBUG, qdev->ndev,
2604                      "tx queued, slot %d, len %d\n",
2605                      tx_ring->prod_idx, skb->len);
2606
2607         atomic_dec(&tx_ring->tx_count);
2608
2609         if (unlikely(atomic_read(&tx_ring->tx_count) < 2)) {
2610                 netif_stop_subqueue(ndev, tx_ring->wq_id);
2611                 if ((atomic_read(&tx_ring->tx_count) > (tx_ring->wq_len / 4)))
2612                         /*
2613                          * The queue got stopped because the tx_ring was full.
2614                          * Wake it up, because it's now at least 25% empty.
2615                          */
2616                         netif_wake_subqueue(qdev->ndev, tx_ring->wq_id);
2617         }
2618         return NETDEV_TX_OK;
2619 }
2620
2621 static void ql_free_shadow_space(struct ql_adapter *qdev)
2622 {
2623         if (qdev->rx_ring_shadow_reg_area) {
2624                 dma_free_coherent(&qdev->pdev->dev,
2625                                   PAGE_SIZE,
2626                                   qdev->rx_ring_shadow_reg_area,
2627                                   qdev->rx_ring_shadow_reg_dma);
2628                 qdev->rx_ring_shadow_reg_area = NULL;
2629         }
2630         if (qdev->tx_ring_shadow_reg_area) {
2631                 dma_free_coherent(&qdev->pdev->dev,
2632                                   PAGE_SIZE,
2633                                   qdev->tx_ring_shadow_reg_area,
2634                                   qdev->tx_ring_shadow_reg_dma);
2635                 qdev->tx_ring_shadow_reg_area = NULL;
2636         }
2637 }
2638
2639 static int ql_alloc_shadow_space(struct ql_adapter *qdev)
2640 {
2641         qdev->rx_ring_shadow_reg_area =
2642                 dma_alloc_coherent(&qdev->pdev->dev, PAGE_SIZE,
2643                                    &qdev->rx_ring_shadow_reg_dma, GFP_ATOMIC);
2644         if (!qdev->rx_ring_shadow_reg_area) {
2645                 netif_err(qdev, ifup, qdev->ndev,
2646                           "Allocation of RX shadow space failed.\n");
2647                 return -ENOMEM;
2648         }
2649
2650         qdev->tx_ring_shadow_reg_area =
2651                 dma_alloc_coherent(&qdev->pdev->dev, PAGE_SIZE,
2652                                    &qdev->tx_ring_shadow_reg_dma, GFP_ATOMIC);
2653         if (!qdev->tx_ring_shadow_reg_area) {
2654                 netif_err(qdev, ifup, qdev->ndev,
2655                           "Allocation of TX shadow space failed.\n");
2656                 goto err_wqp_sh_area;
2657         }
2658         return 0;
2659
2660 err_wqp_sh_area:
2661         dma_free_coherent(&qdev->pdev->dev,
2662                           PAGE_SIZE,
2663                           qdev->rx_ring_shadow_reg_area,
2664                           qdev->rx_ring_shadow_reg_dma);
2665         return -ENOMEM;
2666 }
2667
2668 static void ql_init_tx_ring(struct ql_adapter *qdev, struct tx_ring *tx_ring)
2669 {
2670         struct tx_ring_desc *tx_ring_desc;
2671         int i;
2672         struct ob_mac_iocb_req *mac_iocb_ptr;
2673
2674         mac_iocb_ptr = tx_ring->wq_base;
2675         tx_ring_desc = tx_ring->q;
2676         for (i = 0; i < tx_ring->wq_len; i++) {
2677                 tx_ring_desc->index = i;
2678                 tx_ring_desc->skb = NULL;
2679                 tx_ring_desc->queue_entry = mac_iocb_ptr;
2680                 mac_iocb_ptr++;
2681                 tx_ring_desc++;
2682         }
2683         atomic_set(&tx_ring->tx_count, tx_ring->wq_len);
2684 }
2685
2686 static void ql_free_tx_resources(struct ql_adapter *qdev,
2687                                  struct tx_ring *tx_ring)
2688 {
2689         if (tx_ring->wq_base) {
2690                 dma_free_coherent(&qdev->pdev->dev, tx_ring->wq_size,
2691                                   tx_ring->wq_base, tx_ring->wq_base_dma);
2692                 tx_ring->wq_base = NULL;
2693         }
2694         kfree(tx_ring->q);
2695         tx_ring->q = NULL;
2696 }
2697
2698 static int ql_alloc_tx_resources(struct ql_adapter *qdev,
2699                                  struct tx_ring *tx_ring)
2700 {
2701         tx_ring->wq_base =
2702             dma_alloc_coherent(&qdev->pdev->dev, tx_ring->wq_size,
2703                                &tx_ring->wq_base_dma, GFP_ATOMIC);
2704
2705         if (!tx_ring->wq_base ||
2706             tx_ring->wq_base_dma & WQ_ADDR_ALIGN)
2707                 goto pci_alloc_err;
2708
2709         tx_ring->q =
2710             kmalloc_array(tx_ring->wq_len, sizeof(struct tx_ring_desc),
2711                           GFP_KERNEL);
2712         if (!tx_ring->q)
2713                 goto err;
2714
2715         return 0;
2716 err:
2717         dma_free_coherent(&qdev->pdev->dev, tx_ring->wq_size,
2718                           tx_ring->wq_base, tx_ring->wq_base_dma);
2719         tx_ring->wq_base = NULL;
2720 pci_alloc_err:
2721         netif_err(qdev, ifup, qdev->ndev, "tx_ring alloc failed.\n");
2722         return -ENOMEM;
2723 }
2724
2725 static void ql_free_lbq_buffers(struct ql_adapter *qdev, struct rx_ring *rx_ring)
2726 {
2727         struct qlge_bq *lbq = &rx_ring->lbq;
2728         unsigned int last_offset;
2729
2730         last_offset = ql_lbq_block_size(qdev) - qdev->lbq_buf_size;
2731         while (lbq->next_to_clean != lbq->next_to_use) {
2732                 struct qlge_bq_desc *lbq_desc =
2733                         &lbq->queue[lbq->next_to_clean];
2734
2735                 if (lbq_desc->p.pg_chunk.offset == last_offset)
2736                         dma_unmap_page(&qdev->pdev->dev, lbq_desc->dma_addr,
2737                                        ql_lbq_block_size(qdev),
2738                                        DMA_FROM_DEVICE);
2739                 put_page(lbq_desc->p.pg_chunk.page);
2740
2741                 lbq->next_to_clean = QLGE_BQ_WRAP(lbq->next_to_clean + 1);
2742         }
2743
2744         if (rx_ring->master_chunk.page) {
2745                 dma_unmap_page(&qdev->pdev->dev, rx_ring->chunk_dma_addr,
2746                                ql_lbq_block_size(qdev), DMA_FROM_DEVICE);
2747                 put_page(rx_ring->master_chunk.page);
2748                 rx_ring->master_chunk.page = NULL;
2749         }
2750 }
2751
2752 static void ql_free_sbq_buffers(struct ql_adapter *qdev, struct rx_ring *rx_ring)
2753 {
2754         int i;
2755
2756         for (i = 0; i < QLGE_BQ_LEN; i++) {
2757                 struct qlge_bq_desc *sbq_desc = &rx_ring->sbq.queue[i];
2758
2759                 if (!sbq_desc) {
2760                         netif_err(qdev, ifup, qdev->ndev,
2761                                   "sbq_desc %d is NULL.\n", i);
2762                         return;
2763                 }
2764                 if (sbq_desc->p.skb) {
2765                         dma_unmap_single(&qdev->pdev->dev, sbq_desc->dma_addr,
2766                                          SMALL_BUF_MAP_SIZE,
2767                                          DMA_FROM_DEVICE);
2768                         dev_kfree_skb(sbq_desc->p.skb);
2769                         sbq_desc->p.skb = NULL;
2770                 }
2771         }
2772 }
2773
2774 /* Free all large and small rx buffers associated
2775  * with the completion queues for this device.
2776  */
2777 static void ql_free_rx_buffers(struct ql_adapter *qdev)
2778 {
2779         int i;
2780
2781         for (i = 0; i < qdev->rx_ring_count; i++) {
2782                 struct rx_ring *rx_ring = &qdev->rx_ring[i];
2783
2784                 if (rx_ring->lbq.queue)
2785                         ql_free_lbq_buffers(qdev, rx_ring);
2786                 if (rx_ring->sbq.queue)
2787                         ql_free_sbq_buffers(qdev, rx_ring);
2788         }
2789 }
2790
2791 static void ql_alloc_rx_buffers(struct ql_adapter *qdev)
2792 {
2793         int i;
2794
2795         for (i = 0; i < qdev->rss_ring_count; i++)
2796                 ql_update_buffer_queues(&qdev->rx_ring[i], GFP_KERNEL,
2797                                         HZ / 2);
2798 }
2799
2800 static int qlge_init_bq(struct qlge_bq *bq)
2801 {
2802         struct rx_ring *rx_ring = QLGE_BQ_CONTAINER(bq);
2803         struct ql_adapter *qdev = rx_ring->qdev;
2804         struct qlge_bq_desc *bq_desc;
2805         __le64 *buf_ptr;
2806         int i;
2807
2808         bq->base = dma_alloc_coherent(&qdev->pdev->dev, QLGE_BQ_SIZE,
2809                                       &bq->base_dma, GFP_ATOMIC);
2810         if (!bq->base) {
2811                 netif_err(qdev, ifup, qdev->ndev,
2812                           "ring %u %s allocation failed.\n", rx_ring->cq_id,
2813                           bq_type_name[bq->type]);
2814                 return -ENOMEM;
2815         }
2816
2817         bq->queue = kmalloc_array(QLGE_BQ_LEN, sizeof(struct qlge_bq_desc),
2818                                   GFP_KERNEL);
2819         if (!bq->queue)
2820                 return -ENOMEM;
2821
2822         buf_ptr = bq->base;
2823         bq_desc = &bq->queue[0];
2824         for (i = 0; i < QLGE_BQ_LEN; i++, buf_ptr++, bq_desc++) {
2825                 bq_desc->p.skb = NULL;
2826                 bq_desc->index = i;
2827                 bq_desc->buf_ptr = buf_ptr;
2828         }
2829
2830         return 0;
2831 }
2832
2833 static void ql_free_rx_resources(struct ql_adapter *qdev,
2834                                  struct rx_ring *rx_ring)
2835 {
2836         /* Free the small buffer queue. */
2837         if (rx_ring->sbq.base) {
2838                 dma_free_coherent(&qdev->pdev->dev, QLGE_BQ_SIZE,
2839                                   rx_ring->sbq.base, rx_ring->sbq.base_dma);
2840                 rx_ring->sbq.base = NULL;
2841         }
2842
2843         /* Free the small buffer queue control blocks. */
2844         kfree(rx_ring->sbq.queue);
2845         rx_ring->sbq.queue = NULL;
2846
2847         /* Free the large buffer queue. */
2848         if (rx_ring->lbq.base) {
2849                 dma_free_coherent(&qdev->pdev->dev, QLGE_BQ_SIZE,
2850                                   rx_ring->lbq.base, rx_ring->lbq.base_dma);
2851                 rx_ring->lbq.base = NULL;
2852         }
2853
2854         /* Free the large buffer queue control blocks. */
2855         kfree(rx_ring->lbq.queue);
2856         rx_ring->lbq.queue = NULL;
2857
2858         /* Free the rx queue. */
2859         if (rx_ring->cq_base) {
2860                 dma_free_coherent(&qdev->pdev->dev,
2861                                   rx_ring->cq_size,
2862                                   rx_ring->cq_base, rx_ring->cq_base_dma);
2863                 rx_ring->cq_base = NULL;
2864         }
2865 }
2866
2867 /* Allocate queues and buffers for this completions queue based
2868  * on the values in the parameter structure.
2869  */
2870 static int ql_alloc_rx_resources(struct ql_adapter *qdev,
2871                                  struct rx_ring *rx_ring)
2872 {
2873
2874         /*
2875          * Allocate the completion queue for this rx_ring.
2876          */
2877         rx_ring->cq_base =
2878             dma_alloc_coherent(&qdev->pdev->dev, rx_ring->cq_size,
2879                                &rx_ring->cq_base_dma, GFP_ATOMIC);
2880
2881         if (!rx_ring->cq_base) {
2882                 netif_err(qdev, ifup, qdev->ndev, "rx_ring alloc failed.\n");
2883                 return -ENOMEM;
2884         }
2885
2886         if (rx_ring->cq_id < qdev->rss_ring_count &&
2887             (qlge_init_bq(&rx_ring->sbq) || qlge_init_bq(&rx_ring->lbq))) {
2888                 ql_free_rx_resources(qdev, rx_ring);
2889                 return -ENOMEM;
2890         }
2891
2892         return 0;
2893 }
2894
2895 static void ql_tx_ring_clean(struct ql_adapter *qdev)
2896 {
2897         struct tx_ring *tx_ring;
2898         struct tx_ring_desc *tx_ring_desc;
2899         int i, j;
2900
2901         /*
2902          * Loop through all queues and free
2903          * any resources.
2904          */
2905         for (j = 0; j < qdev->tx_ring_count; j++) {
2906                 tx_ring = &qdev->tx_ring[j];
2907                 for (i = 0; i < tx_ring->wq_len; i++) {
2908                         tx_ring_desc = &tx_ring->q[i];
2909                         if (tx_ring_desc && tx_ring_desc->skb) {
2910                                 netif_err(qdev, ifdown, qdev->ndev,
2911                                           "Freeing lost SKB %p, from queue %d, index %d.\n",
2912                                           tx_ring_desc->skb, j,
2913                                           tx_ring_desc->index);
2914                                 ql_unmap_send(qdev, tx_ring_desc,
2915                                               tx_ring_desc->map_cnt);
2916                                 dev_kfree_skb(tx_ring_desc->skb);
2917                                 tx_ring_desc->skb = NULL;
2918                         }
2919                 }
2920         }
2921 }
2922
2923 static void ql_free_mem_resources(struct ql_adapter *qdev)
2924 {
2925         int i;
2926
2927         for (i = 0; i < qdev->tx_ring_count; i++)
2928                 ql_free_tx_resources(qdev, &qdev->tx_ring[i]);
2929         for (i = 0; i < qdev->rx_ring_count; i++)
2930                 ql_free_rx_resources(qdev, &qdev->rx_ring[i]);
2931         ql_free_shadow_space(qdev);
2932 }
2933
2934 static int ql_alloc_mem_resources(struct ql_adapter *qdev)
2935 {
2936         int i;
2937
2938         /* Allocate space for our shadow registers and such. */
2939         if (ql_alloc_shadow_space(qdev))
2940                 return -ENOMEM;
2941
2942         for (i = 0; i < qdev->rx_ring_count; i++) {
2943                 if (ql_alloc_rx_resources(qdev, &qdev->rx_ring[i]) != 0) {
2944                         netif_err(qdev, ifup, qdev->ndev,
2945                                   "RX resource allocation failed.\n");
2946                         goto err_mem;
2947                 }
2948         }
2949         /* Allocate tx queue resources */
2950         for (i = 0; i < qdev->tx_ring_count; i++) {
2951                 if (ql_alloc_tx_resources(qdev, &qdev->tx_ring[i]) != 0) {
2952                         netif_err(qdev, ifup, qdev->ndev,
2953                                   "TX resource allocation failed.\n");
2954                         goto err_mem;
2955                 }
2956         }
2957         return 0;
2958
2959 err_mem:
2960         ql_free_mem_resources(qdev);
2961         return -ENOMEM;
2962 }
2963
2964 /* Set up the rx ring control block and pass it to the chip.
2965  * The control block is defined as
2966  * "Completion Queue Initialization Control Block", or cqicb.
2967  */
2968 static int ql_start_rx_ring(struct ql_adapter *qdev, struct rx_ring *rx_ring)
2969 {
2970         struct cqicb *cqicb = &rx_ring->cqicb;
2971         void *shadow_reg = qdev->rx_ring_shadow_reg_area +
2972                 (rx_ring->cq_id * RX_RING_SHADOW_SPACE);
2973         u64 shadow_reg_dma = qdev->rx_ring_shadow_reg_dma +
2974                 (rx_ring->cq_id * RX_RING_SHADOW_SPACE);
2975         void __iomem *doorbell_area =
2976             qdev->doorbell_area + (DB_PAGE_SIZE * (128 + rx_ring->cq_id));
2977         int err = 0;
2978         u64 tmp;
2979         __le64 *base_indirect_ptr;
2980         int page_entries;
2981
2982         /* Set up the shadow registers for this ring. */
2983         rx_ring->prod_idx_sh_reg = shadow_reg;
2984         rx_ring->prod_idx_sh_reg_dma = shadow_reg_dma;
2985         *rx_ring->prod_idx_sh_reg = 0;
2986         shadow_reg += sizeof(u64);
2987         shadow_reg_dma += sizeof(u64);
2988         rx_ring->lbq.base_indirect = shadow_reg;
2989         rx_ring->lbq.base_indirect_dma = shadow_reg_dma;
2990         shadow_reg += (sizeof(u64) * MAX_DB_PAGES_PER_BQ(QLGE_BQ_LEN));
2991         shadow_reg_dma += (sizeof(u64) * MAX_DB_PAGES_PER_BQ(QLGE_BQ_LEN));
2992         rx_ring->sbq.base_indirect = shadow_reg;
2993         rx_ring->sbq.base_indirect_dma = shadow_reg_dma;
2994
2995         /* PCI doorbell mem area + 0x00 for consumer index register */
2996         rx_ring->cnsmr_idx_db_reg = (u32 __iomem *)doorbell_area;
2997         rx_ring->cnsmr_idx = 0;
2998         rx_ring->curr_entry = rx_ring->cq_base;
2999
3000         /* PCI doorbell mem area + 0x04 for valid register */
3001         rx_ring->valid_db_reg = doorbell_area + 0x04;
3002
3003         /* PCI doorbell mem area + 0x18 for large buffer consumer */
3004         rx_ring->lbq.prod_idx_db_reg = (u32 __iomem *)(doorbell_area + 0x18);
3005
3006         /* PCI doorbell mem area + 0x1c */
3007         rx_ring->sbq.prod_idx_db_reg = (u32 __iomem *)(doorbell_area + 0x1c);
3008
3009         memset((void *)cqicb, 0, sizeof(struct cqicb));
3010         cqicb->msix_vect = rx_ring->irq;
3011
3012         cqicb->len = cpu_to_le16(QLGE_FIT16(rx_ring->cq_len) | LEN_V |
3013                                  LEN_CPP_CONT);
3014
3015         cqicb->addr = cpu_to_le64(rx_ring->cq_base_dma);
3016
3017         cqicb->prod_idx_addr = cpu_to_le64(rx_ring->prod_idx_sh_reg_dma);
3018
3019         /*
3020          * Set up the control block load flags.
3021          */
3022         cqicb->flags = FLAGS_LC |       /* Load queue base address */
3023             FLAGS_LV |          /* Load MSI-X vector */
3024             FLAGS_LI;           /* Load irq delay values */
3025         if (rx_ring->cq_id < qdev->rss_ring_count) {
3026                 cqicb->flags |= FLAGS_LL;       /* Load lbq values */
3027                 tmp = (u64)rx_ring->lbq.base_dma;
3028                 base_indirect_ptr = rx_ring->lbq.base_indirect;
3029                 page_entries = 0;
3030                 do {
3031                         *base_indirect_ptr = cpu_to_le64(tmp);
3032                         tmp += DB_PAGE_SIZE;
3033                         base_indirect_ptr++;
3034                         page_entries++;
3035                 } while (page_entries < MAX_DB_PAGES_PER_BQ(QLGE_BQ_LEN));
3036                 cqicb->lbq_addr = cpu_to_le64(rx_ring->lbq.base_indirect_dma);
3037                 cqicb->lbq_buf_size =
3038                         cpu_to_le16(QLGE_FIT16(qdev->lbq_buf_size));
3039                 cqicb->lbq_len = cpu_to_le16(QLGE_FIT16(QLGE_BQ_LEN));
3040                 rx_ring->lbq.next_to_use = 0;
3041                 rx_ring->lbq.next_to_clean = 0;
3042
3043                 cqicb->flags |= FLAGS_LS;       /* Load sbq values */
3044                 tmp = (u64)rx_ring->sbq.base_dma;
3045                 base_indirect_ptr = rx_ring->sbq.base_indirect;
3046                 page_entries = 0;
3047                 do {
3048                         *base_indirect_ptr = cpu_to_le64(tmp);
3049                         tmp += DB_PAGE_SIZE;
3050                         base_indirect_ptr++;
3051                         page_entries++;
3052                 } while (page_entries < MAX_DB_PAGES_PER_BQ(QLGE_BQ_LEN));
3053                 cqicb->sbq_addr =
3054                     cpu_to_le64(rx_ring->sbq.base_indirect_dma);
3055                 cqicb->sbq_buf_size = cpu_to_le16(SMALL_BUFFER_SIZE);
3056                 cqicb->sbq_len = cpu_to_le16(QLGE_FIT16(QLGE_BQ_LEN));
3057                 rx_ring->sbq.next_to_use = 0;
3058                 rx_ring->sbq.next_to_clean = 0;
3059         }
3060         if (rx_ring->cq_id < qdev->rss_ring_count) {
3061                 /* Inbound completion handling rx_rings run in
3062                  * separate NAPI contexts.
3063                  */
3064                 netif_napi_add(qdev->ndev, &rx_ring->napi, ql_napi_poll_msix,
3065                                64);
3066                 cqicb->irq_delay = cpu_to_le16(qdev->rx_coalesce_usecs);
3067                 cqicb->pkt_delay = cpu_to_le16(qdev->rx_max_coalesced_frames);
3068         } else {
3069                 cqicb->irq_delay = cpu_to_le16(qdev->tx_coalesce_usecs);
3070                 cqicb->pkt_delay = cpu_to_le16(qdev->tx_max_coalesced_frames);
3071         }
3072         err = ql_write_cfg(qdev, cqicb, sizeof(struct cqicb),
3073                            CFG_LCQ, rx_ring->cq_id);
3074         if (err) {
3075                 netif_err(qdev, ifup, qdev->ndev, "Failed to load CQICB.\n");
3076                 return err;
3077         }
3078         return err;
3079 }
3080
3081 static int ql_start_tx_ring(struct ql_adapter *qdev, struct tx_ring *tx_ring)
3082 {
3083         struct wqicb *wqicb = (struct wqicb *)tx_ring;
3084         void __iomem *doorbell_area =
3085             qdev->doorbell_area + (DB_PAGE_SIZE * tx_ring->wq_id);
3086         void *shadow_reg = qdev->tx_ring_shadow_reg_area +
3087             (tx_ring->wq_id * sizeof(u64));
3088         u64 shadow_reg_dma = qdev->tx_ring_shadow_reg_dma +
3089             (tx_ring->wq_id * sizeof(u64));
3090         int err = 0;
3091
3092         /*
3093          * Assign doorbell registers for this tx_ring.
3094          */
3095         /* TX PCI doorbell mem area for tx producer index */
3096         tx_ring->prod_idx_db_reg = (u32 __iomem *)doorbell_area;
3097         tx_ring->prod_idx = 0;
3098         /* TX PCI doorbell mem area + 0x04 */
3099         tx_ring->valid_db_reg = doorbell_area + 0x04;
3100
3101         /*
3102          * Assign shadow registers for this tx_ring.
3103          */
3104         tx_ring->cnsmr_idx_sh_reg = shadow_reg;
3105         tx_ring->cnsmr_idx_sh_reg_dma = shadow_reg_dma;
3106
3107         wqicb->len = cpu_to_le16(tx_ring->wq_len | Q_LEN_V | Q_LEN_CPP_CONT);
3108         wqicb->flags = cpu_to_le16(Q_FLAGS_LC |
3109                                    Q_FLAGS_LB | Q_FLAGS_LI | Q_FLAGS_LO);
3110         wqicb->cq_id_rss = cpu_to_le16(tx_ring->cq_id);
3111         wqicb->rid = 0;
3112         wqicb->addr = cpu_to_le64(tx_ring->wq_base_dma);
3113
3114         wqicb->cnsmr_idx_addr = cpu_to_le64(tx_ring->cnsmr_idx_sh_reg_dma);
3115
3116         ql_init_tx_ring(qdev, tx_ring);
3117
3118         err = ql_write_cfg(qdev, wqicb, sizeof(*wqicb), CFG_LRQ,
3119                            (u16)tx_ring->wq_id);
3120         if (err) {
3121                 netif_err(qdev, ifup, qdev->ndev, "Failed to load tx_ring.\n");
3122                 return err;
3123         }
3124         return err;
3125 }
3126
3127 static void ql_disable_msix(struct ql_adapter *qdev)
3128 {
3129         if (test_bit(QL_MSIX_ENABLED, &qdev->flags)) {
3130                 pci_disable_msix(qdev->pdev);
3131                 clear_bit(QL_MSIX_ENABLED, &qdev->flags);
3132                 kfree(qdev->msi_x_entry);
3133                 qdev->msi_x_entry = NULL;
3134         } else if (test_bit(QL_MSI_ENABLED, &qdev->flags)) {
3135                 pci_disable_msi(qdev->pdev);
3136                 clear_bit(QL_MSI_ENABLED, &qdev->flags);
3137         }
3138 }
3139
3140 /* We start by trying to get the number of vectors
3141  * stored in qdev->intr_count. If we don't get that
3142  * many then we reduce the count and try again.
3143  */
3144 static void ql_enable_msix(struct ql_adapter *qdev)
3145 {
3146         int i, err;
3147
3148         /* Get the MSIX vectors. */
3149         if (qlge_irq_type == MSIX_IRQ) {
3150                 /* Try to alloc space for the msix struct,
3151                  * if it fails then go to MSI/legacy.
3152                  */
3153                 qdev->msi_x_entry = kcalloc(qdev->intr_count,
3154                                             sizeof(struct msix_entry),
3155                                             GFP_KERNEL);
3156                 if (!qdev->msi_x_entry) {
3157                         qlge_irq_type = MSI_IRQ;
3158                         goto msi;
3159                 }
3160
3161                 for (i = 0; i < qdev->intr_count; i++)
3162                         qdev->msi_x_entry[i].entry = i;
3163
3164                 err = pci_enable_msix_range(qdev->pdev, qdev->msi_x_entry,
3165                                             1, qdev->intr_count);
3166                 if (err < 0) {
3167                         kfree(qdev->msi_x_entry);
3168                         qdev->msi_x_entry = NULL;
3169                         netif_warn(qdev, ifup, qdev->ndev,
3170                                    "MSI-X Enable failed, trying MSI.\n");
3171                         qlge_irq_type = MSI_IRQ;
3172                 } else {
3173                         qdev->intr_count = err;
3174                         set_bit(QL_MSIX_ENABLED, &qdev->flags);
3175                         netif_info(qdev, ifup, qdev->ndev,
3176                                    "MSI-X Enabled, got %d vectors.\n",
3177                                    qdev->intr_count);
3178                         return;
3179                 }
3180         }
3181 msi:
3182         qdev->intr_count = 1;
3183         if (qlge_irq_type == MSI_IRQ) {
3184                 if (pci_alloc_irq_vectors(qdev->pdev, 1, 1, PCI_IRQ_MSI) >= 0) {
3185                         set_bit(QL_MSI_ENABLED, &qdev->flags);
3186                         netif_info(qdev, ifup, qdev->ndev,
3187                                    "Running with MSI interrupts.\n");
3188                         return;
3189                 }
3190         }
3191         qlge_irq_type = LEG_IRQ;
3192         set_bit(QL_LEGACY_ENABLED, &qdev->flags);
3193         netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
3194                      "Running with legacy interrupts.\n");
3195 }
3196
3197 /* Each vector services 1 RSS ring and and 1 or more
3198  * TX completion rings.  This function loops through
3199  * the TX completion rings and assigns the vector that
3200  * will service it.  An example would be if there are
3201  * 2 vectors (so 2 RSS rings) and 8 TX completion rings.
3202  * This would mean that vector 0 would service RSS ring 0
3203  * and TX completion rings 0,1,2 and 3.  Vector 1 would
3204  * service RSS ring 1 and TX completion rings 4,5,6 and 7.
3205  */
3206 static void ql_set_tx_vect(struct ql_adapter *qdev)
3207 {
3208         int i, j, vect;
3209         u32 tx_rings_per_vector = qdev->tx_ring_count / qdev->intr_count;
3210
3211         if (likely(test_bit(QL_MSIX_ENABLED, &qdev->flags))) {
3212                 /* Assign irq vectors to TX rx_rings.*/
3213                 for (vect = 0, j = 0, i = qdev->rss_ring_count;
3214                                          i < qdev->rx_ring_count; i++) {
3215                         if (j == tx_rings_per_vector) {
3216                                 vect++;
3217                                 j = 0;
3218                         }
3219                         qdev->rx_ring[i].irq = vect;
3220                         j++;
3221                 }
3222         } else {
3223                 /* For single vector all rings have an irq
3224                  * of zero.
3225                  */
3226                 for (i = 0; i < qdev->rx_ring_count; i++)
3227                         qdev->rx_ring[i].irq = 0;
3228         }
3229 }
3230
3231 /* Set the interrupt mask for this vector.  Each vector
3232  * will service 1 RSS ring and 1 or more TX completion
3233  * rings.  This function sets up a bit mask per vector
3234  * that indicates which rings it services.
3235  */
3236 static void ql_set_irq_mask(struct ql_adapter *qdev, struct intr_context *ctx)
3237 {
3238         int j, vect = ctx->intr;
3239         u32 tx_rings_per_vector = qdev->tx_ring_count / qdev->intr_count;
3240
3241         if (likely(test_bit(QL_MSIX_ENABLED, &qdev->flags))) {
3242                 /* Add the RSS ring serviced by this vector
3243                  * to the mask.
3244                  */
3245                 ctx->irq_mask = (1 << qdev->rx_ring[vect].cq_id);
3246                 /* Add the TX ring(s) serviced by this vector
3247                  * to the mask.
3248                  */
3249                 for (j = 0; j < tx_rings_per_vector; j++) {
3250                         ctx->irq_mask |=
3251                         (1 << qdev->rx_ring[qdev->rss_ring_count +
3252                         (vect * tx_rings_per_vector) + j].cq_id);
3253                 }
3254         } else {
3255                 /* For single vector we just shift each queue's
3256                  * ID into the mask.
3257                  */
3258                 for (j = 0; j < qdev->rx_ring_count; j++)
3259                         ctx->irq_mask |= (1 << qdev->rx_ring[j].cq_id);
3260         }
3261 }
3262
3263 /*
3264  * Here we build the intr_context structures based on
3265  * our rx_ring count and intr vector count.
3266  * The intr_context structure is used to hook each vector
3267  * to possibly different handlers.
3268  */
3269 static void ql_resolve_queues_to_irqs(struct ql_adapter *qdev)
3270 {
3271         int i = 0;
3272         struct intr_context *intr_context = &qdev->intr_context[0];
3273
3274         if (likely(test_bit(QL_MSIX_ENABLED, &qdev->flags))) {
3275                 /* Each rx_ring has it's
3276                  * own intr_context since we have separate
3277                  * vectors for each queue.
3278                  */
3279                 for (i = 0; i < qdev->intr_count; i++, intr_context++) {
3280                         qdev->rx_ring[i].irq = i;
3281                         intr_context->intr = i;
3282                         intr_context->qdev = qdev;
3283                         /* Set up this vector's bit-mask that indicates
3284                          * which queues it services.
3285                          */
3286                         ql_set_irq_mask(qdev, intr_context);
3287                         /*
3288                          * We set up each vectors enable/disable/read bits so
3289                          * there's no bit/mask calculations in the critical path.
3290                          */
3291                         intr_context->intr_en_mask =
3292                             INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
3293                             INTR_EN_TYPE_ENABLE | INTR_EN_IHD_MASK | INTR_EN_IHD
3294                             | i;
3295                         intr_context->intr_dis_mask =
3296                             INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
3297                             INTR_EN_TYPE_DISABLE | INTR_EN_IHD_MASK |
3298                             INTR_EN_IHD | i;
3299                         intr_context->intr_read_mask =
3300                             INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
3301                             INTR_EN_TYPE_READ | INTR_EN_IHD_MASK | INTR_EN_IHD |
3302                             i;
3303                         if (i == 0) {
3304                                 /* The first vector/queue handles
3305                                  * broadcast/multicast, fatal errors,
3306                                  * and firmware events.  This in addition
3307                                  * to normal inbound NAPI processing.
3308                                  */
3309                                 intr_context->handler = qlge_isr;
3310                                 sprintf(intr_context->name, "%s-rx-%d",
3311                                         qdev->ndev->name, i);
3312                         } else {
3313                                 /*
3314                                  * Inbound queues handle unicast frames only.
3315                                  */
3316                                 intr_context->handler = qlge_msix_rx_isr;
3317                                 sprintf(intr_context->name, "%s-rx-%d",
3318                                         qdev->ndev->name, i);
3319                         }
3320                 }
3321         } else {
3322                 /*
3323                  * All rx_rings use the same intr_context since
3324                  * there is only one vector.
3325                  */
3326                 intr_context->intr = 0;
3327                 intr_context->qdev = qdev;
3328                 /*
3329                  * We set up each vectors enable/disable/read bits so
3330                  * there's no bit/mask calculations in the critical path.
3331                  */
3332                 intr_context->intr_en_mask =
3333                     INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK | INTR_EN_TYPE_ENABLE;
3334                 intr_context->intr_dis_mask =
3335                     INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK |
3336                     INTR_EN_TYPE_DISABLE;
3337                 if (test_bit(QL_LEGACY_ENABLED, &qdev->flags)) {
3338                         /* Experience shows that when using INTx interrupts,
3339                          * the device does not always auto-mask INTR_EN_EN.
3340                          * Moreover, masking INTR_EN_EN manually does not
3341                          * immediately prevent interrupt generation.
3342                          */
3343                         intr_context->intr_en_mask |= INTR_EN_EI << 16 |
3344                                 INTR_EN_EI;
3345                         intr_context->intr_dis_mask |= INTR_EN_EI << 16;
3346                 }
3347                 intr_context->intr_read_mask =
3348                     INTR_EN_TYPE_MASK | INTR_EN_INTR_MASK | INTR_EN_TYPE_READ;
3349                 /*
3350                  * Single interrupt means one handler for all rings.
3351                  */
3352                 intr_context->handler = qlge_isr;
3353                 sprintf(intr_context->name, "%s-single_irq", qdev->ndev->name);
3354                 /* Set up this vector's bit-mask that indicates
3355                  * which queues it services. In this case there is
3356                  * a single vector so it will service all RSS and
3357                  * TX completion rings.
3358                  */
3359                 ql_set_irq_mask(qdev, intr_context);
3360         }
3361         /* Tell the TX completion rings which MSIx vector
3362          * they will be using.
3363          */
3364         ql_set_tx_vect(qdev);
3365 }
3366
3367 static void ql_free_irq(struct ql_adapter *qdev)
3368 {
3369         int i;
3370         struct intr_context *intr_context = &qdev->intr_context[0];
3371
3372         for (i = 0; i < qdev->intr_count; i++, intr_context++) {
3373                 if (intr_context->hooked) {
3374                         if (test_bit(QL_MSIX_ENABLED, &qdev->flags)) {
3375                                 free_irq(qdev->msi_x_entry[i].vector,
3376                                          &qdev->rx_ring[i]);
3377                         } else {
3378                                 free_irq(qdev->pdev->irq, &qdev->rx_ring[0]);
3379                         }
3380                 }
3381         }
3382         ql_disable_msix(qdev);
3383 }
3384
3385 static int ql_request_irq(struct ql_adapter *qdev)
3386 {
3387         int i;
3388         int status = 0;
3389         struct pci_dev *pdev = qdev->pdev;
3390         struct intr_context *intr_context = &qdev->intr_context[0];
3391
3392         ql_resolve_queues_to_irqs(qdev);
3393
3394         for (i = 0; i < qdev->intr_count; i++, intr_context++) {
3395                 if (test_bit(QL_MSIX_ENABLED, &qdev->flags)) {
3396                         status = request_irq(qdev->msi_x_entry[i].vector,
3397                                              intr_context->handler,
3398                                              0,
3399                                              intr_context->name,
3400                                              &qdev->rx_ring[i]);
3401                         if (status) {
3402                                 netif_err(qdev, ifup, qdev->ndev,
3403                                           "Failed request for MSIX interrupt %d.\n",
3404                                           i);
3405                                 goto err_irq;
3406                         }
3407                 } else {
3408                         netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
3409                                      "trying msi or legacy interrupts.\n");
3410                         netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
3411                                      "%s: irq = %d.\n", __func__, pdev->irq);
3412                         netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
3413                                      "%s: context->name = %s.\n", __func__,
3414                                      intr_context->name);
3415                         netif_printk(qdev, ifup, KERN_DEBUG, qdev->ndev,
3416                                      "%s: dev_id = 0x%p.\n", __func__,
3417                                      &qdev->rx_ring[0]);
3418                         status =
3419                             request_irq(pdev->irq, qlge_isr,
3420                                         test_bit(QL_MSI_ENABLED, &qdev->flags)
3421                                                 ? 0
3422                                                 : IRQF_SHARED,
3423                                         intr_context->name, &qdev->rx_ring[0]);
3424                         if (status)
3425                                 goto err_irq;
3426
3427                         netif_err(qdev, ifup, qdev->ndev,
3428                                   "Hooked intr 0, queue type RX_Q, with name %s.\n",
3429                                   intr_context->name);
3430                 }
3431                 intr_context->hooked = 1;
3432         }
3433         return status;
3434 err_irq:
3435         netif_err(qdev, ifup, qdev->ndev, "Failed to get the interrupts!!!\n");
3436         ql_free_irq(qdev);
3437         return status;
3438 }
3439
3440 static int ql_start_rss(struct ql_adapter *qdev)
3441 {
3442         static const u8 init_hash_seed[] = {
3443                 0x6d, 0x5a, 0x56, 0xda, 0x25, 0x5b, 0x0e, 0xc2,
3444                 0x41, 0x67, 0x25, 0x3d, 0x43, 0xa3, 0x8f, 0xb0,
3445                 0xd0, 0xca, 0x2b, 0xcb, 0xae, 0x7b, 0x30, 0xb4,
3446                 0x77, 0xcb, 0x2d, 0xa3, 0x80, 0x30, 0xf2, 0x0c,
3447                 0x6a, 0x42, 0xb7, 0x3b, 0xbe, 0xac, 0x01, 0xfa
3448         };
3449         struct ricb *ricb = &qdev->ricb;
3450         int status = 0;
3451         int i;
3452         u8 *hash_id = (u8 *)ricb->hash_cq_id;
3453
3454         memset((void *)ricb, 0, sizeof(*ricb));
3455
3456         ricb->base_cq = RSS_L4K;
3457         ricb->flags =
3458                 (RSS_L6K | RSS_LI | RSS_LB | RSS_LM | RSS_RT4 | RSS_RT6);
3459         ricb->mask = cpu_to_le16((u16)(0x3ff));
3460
3461         /*
3462          * Fill out the Indirection Table.
3463          */
3464         for (i = 0; i < 1024; i++)
3465                 hash_id[i] = (i & (qdev->rss_ring_count - 1));
3466
3467         memcpy((void *)&ricb->ipv6_hash_key[0], init_hash_seed, 40);
3468         memcpy((void *)&ricb->ipv4_hash_key[0], init_hash_seed, 16);
3469
3470         status = ql_write_cfg(qdev, ricb, sizeof(*ricb), CFG_LR, 0);
3471         if (status) {
3472                 netif_err(qdev, ifup, qdev->ndev, "Failed to load RICB.\n");
3473                 return status;
3474         }
3475         return status;
3476 }
3477
3478 static int ql_clear_routing_entries(struct ql_adapter *qdev)
3479 {
3480         int i, status = 0;
3481
3482         status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
3483         if (status)
3484                 return status;
3485         /* Clear all the entries in the routing table. */
3486         for (i = 0; i < 16; i++) {
3487                 status = ql_set_routing_reg(qdev, i, 0, 0);
3488                 if (status) {
3489                         netif_err(qdev, ifup, qdev->ndev,
3490                                   "Failed to init routing register for CAM packets.\n");
3491                         break;
3492                 }
3493         }
3494         ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
3495         return status;
3496 }
3497
3498 /* Initialize the frame-to-queue routing. */
3499 static int ql_route_initialize(struct ql_adapter *qdev)
3500 {
3501         int status = 0;
3502
3503         /* Clear all the entries in the routing table. */
3504         status = ql_clear_routing_entries(qdev);
3505         if (status)
3506                 return status;
3507
3508         status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
3509         if (status)
3510                 return status;
3511
3512         status = ql_set_routing_reg(qdev, RT_IDX_IP_CSUM_ERR_SLOT,
3513                                     RT_IDX_IP_CSUM_ERR, 1);
3514         if (status) {
3515                 netif_err(qdev, ifup, qdev->ndev,
3516                           "Failed to init routing register for IP CSUM error packets.\n");
3517                 goto exit;
3518         }
3519         status = ql_set_routing_reg(qdev, RT_IDX_TCP_UDP_CSUM_ERR_SLOT,
3520                                     RT_IDX_TU_CSUM_ERR, 1);
3521         if (status) {
3522                 netif_err(qdev, ifup, qdev->ndev,
3523                           "Failed to init routing register for TCP/UDP CSUM error packets.\n");
3524                 goto exit;
3525         }
3526         status = ql_set_routing_reg(qdev, RT_IDX_BCAST_SLOT, RT_IDX_BCAST, 1);
3527         if (status) {
3528                 netif_err(qdev, ifup, qdev->ndev,
3529                           "Failed to init routing register for broadcast packets.\n");
3530                 goto exit;
3531         }
3532         /* If we have more than one inbound queue, then turn on RSS in the
3533          * routing block.
3534          */
3535         if (qdev->rss_ring_count > 1) {
3536                 status = ql_set_routing_reg(qdev, RT_IDX_RSS_MATCH_SLOT,
3537                                             RT_IDX_RSS_MATCH, 1);
3538                 if (status) {
3539                         netif_err(qdev, ifup, qdev->ndev,
3540                                   "Failed to init routing register for MATCH RSS packets.\n");
3541                         goto exit;
3542                 }
3543         }
3544
3545         status = ql_set_routing_reg(qdev, RT_IDX_CAM_HIT_SLOT,
3546                                     RT_IDX_CAM_HIT, 1);
3547         if (status)
3548                 netif_err(qdev, ifup, qdev->ndev,
3549                           "Failed to init routing register for CAM packets.\n");
3550 exit:
3551         ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
3552         return status;
3553 }
3554
3555 int ql_cam_route_initialize(struct ql_adapter *qdev)
3556 {
3557         int status, set;
3558
3559         /* If check if the link is up and use to
3560          * determine if we are setting or clearing
3561          * the MAC address in the CAM.
3562          */
3563         set = ql_read32(qdev, STS);
3564         set &= qdev->port_link_up;
3565         status = ql_set_mac_addr(qdev, set);
3566         if (status) {
3567                 netif_err(qdev, ifup, qdev->ndev, "Failed to init mac address.\n");
3568                 return status;
3569         }
3570
3571         status = ql_route_initialize(qdev);
3572         if (status)
3573                 netif_err(qdev, ifup, qdev->ndev, "Failed to init routing table.\n");
3574
3575         return status;
3576 }
3577
3578 static int ql_adapter_initialize(struct ql_adapter *qdev)
3579 {
3580         u32 value, mask;
3581         int i;
3582         int status = 0;
3583
3584         /*
3585          * Set up the System register to halt on errors.
3586          */
3587         value = SYS_EFE | SYS_FAE;
3588         mask = value << 16;
3589         ql_write32(qdev, SYS, mask | value);
3590
3591         /* Set the default queue, and VLAN behavior. */
3592         value = NIC_RCV_CFG_DFQ;
3593         mask = NIC_RCV_CFG_DFQ_MASK;
3594         if (qdev->ndev->features & NETIF_F_HW_VLAN_CTAG_RX) {
3595                 value |= NIC_RCV_CFG_RV;
3596                 mask |= (NIC_RCV_CFG_RV << 16);
3597         }
3598         ql_write32(qdev, NIC_RCV_CFG, (mask | value));
3599
3600         /* Set the MPI interrupt to enabled. */
3601         ql_write32(qdev, INTR_MASK, (INTR_MASK_PI << 16) | INTR_MASK_PI);
3602
3603         /* Enable the function, set pagesize, enable error checking. */
3604         value = FSC_FE | FSC_EPC_INBOUND | FSC_EPC_OUTBOUND |
3605             FSC_EC | FSC_VM_PAGE_4K;
3606         value |= SPLT_SETTING;
3607
3608         /* Set/clear header splitting. */
3609         mask = FSC_VM_PAGESIZE_MASK |
3610             FSC_DBL_MASK | FSC_DBRST_MASK | (value << 16);
3611         ql_write32(qdev, FSC, mask | value);
3612
3613         ql_write32(qdev, SPLT_HDR, SPLT_LEN);
3614
3615         /* Set RX packet routing to use port/pci function on which the
3616          * packet arrived on in addition to usual frame routing.
3617          * This is helpful on bonding where both interfaces can have
3618          * the same MAC address.
3619          */
3620         ql_write32(qdev, RST_FO, RST_FO_RR_MASK | RST_FO_RR_RCV_FUNC_CQ);
3621         /* Reroute all packets to our Interface.
3622          * They may have been routed to MPI firmware
3623          * due to WOL.
3624          */
3625         value = ql_read32(qdev, MGMT_RCV_CFG);
3626         value &= ~MGMT_RCV_CFG_RM;
3627         mask = 0xffff0000;
3628
3629         /* Sticky reg needs clearing due to WOL. */
3630         ql_write32(qdev, MGMT_RCV_CFG, mask);
3631         ql_write32(qdev, MGMT_RCV_CFG, mask | value);
3632
3633         /* Default WOL is enable on Mezz cards */
3634         if (qdev->pdev->subsystem_device == 0x0068 ||
3635             qdev->pdev->subsystem_device == 0x0180)
3636                 qdev->wol = WAKE_MAGIC;
3637
3638         /* Start up the rx queues. */
3639         for (i = 0; i < qdev->rx_ring_count; i++) {
3640                 status = ql_start_rx_ring(qdev, &qdev->rx_ring[i]);
3641                 if (status) {
3642                         netif_err(qdev, ifup, qdev->ndev,
3643                                   "Failed to start rx ring[%d].\n", i);
3644                         return status;
3645                 }
3646         }
3647
3648         /* If there is more than one inbound completion queue
3649          * then download a RICB to configure RSS.
3650          */
3651         if (qdev->rss_ring_count > 1) {
3652                 status = ql_start_rss(qdev);
3653                 if (status) {
3654                         netif_err(qdev, ifup, qdev->ndev, "Failed to start RSS.\n");
3655                         return status;
3656                 }
3657         }
3658
3659         /* Start up the tx queues. */
3660         for (i = 0; i < qdev->tx_ring_count; i++) {
3661                 status = ql_start_tx_ring(qdev, &qdev->tx_ring[i]);
3662                 if (status) {
3663                         netif_err(qdev, ifup, qdev->ndev,
3664                                   "Failed to start tx ring[%d].\n", i);
3665                         return status;
3666                 }
3667         }
3668
3669         /* Initialize the port and set the max framesize. */
3670         status = qdev->nic_ops->port_initialize(qdev);
3671         if (status)
3672                 netif_err(qdev, ifup, qdev->ndev, "Failed to start port.\n");
3673
3674         /* Set up the MAC address and frame routing filter. */
3675         status = ql_cam_route_initialize(qdev);
3676         if (status) {
3677                 netif_err(qdev, ifup, qdev->ndev,
3678                           "Failed to init CAM/Routing tables.\n");
3679                 return status;
3680         }
3681
3682         /* Start NAPI for the RSS queues. */
3683         for (i = 0; i < qdev->rss_ring_count; i++)
3684                 napi_enable(&qdev->rx_ring[i].napi);
3685
3686         return status;
3687 }
3688
3689 /* Issue soft reset to chip. */
3690 static int ql_adapter_reset(struct ql_adapter *qdev)
3691 {
3692         u32 value;
3693         int status = 0;
3694         unsigned long end_jiffies;
3695
3696         /* Clear all the entries in the routing table. */
3697         status = ql_clear_routing_entries(qdev);
3698         if (status) {
3699                 netif_err(qdev, ifup, qdev->ndev, "Failed to clear routing bits.\n");
3700                 return status;
3701         }
3702
3703         /* Check if bit is set then skip the mailbox command and
3704          * clear the bit, else we are in normal reset process.
3705          */
3706         if (!test_bit(QL_ASIC_RECOVERY, &qdev->flags)) {
3707                 /* Stop management traffic. */
3708                 ql_mb_set_mgmnt_traffic_ctl(qdev, MB_SET_MPI_TFK_STOP);
3709
3710                 /* Wait for the NIC and MGMNT FIFOs to empty. */
3711                 ql_wait_fifo_empty(qdev);
3712         } else {
3713                 clear_bit(QL_ASIC_RECOVERY, &qdev->flags);
3714         }
3715
3716         ql_write32(qdev, RST_FO, (RST_FO_FR << 16) | RST_FO_FR);
3717
3718         end_jiffies = jiffies + usecs_to_jiffies(30);
3719         do {
3720                 value = ql_read32(qdev, RST_FO);
3721                 if ((value & RST_FO_FR) == 0)
3722                         break;
3723                 cpu_relax();
3724         } while (time_before(jiffies, end_jiffies));
3725
3726         if (value & RST_FO_FR) {
3727                 netif_err(qdev, ifdown, qdev->ndev,
3728                           "ETIMEDOUT!!! errored out of resetting the chip!\n");
3729                 status = -ETIMEDOUT;
3730         }
3731
3732         /* Resume management traffic. */
3733         ql_mb_set_mgmnt_traffic_ctl(qdev, MB_SET_MPI_TFK_RESUME);
3734         return status;
3735 }
3736
3737 static void ql_display_dev_info(struct net_device *ndev)
3738 {
3739         struct ql_adapter *qdev = netdev_priv(ndev);
3740
3741         netif_info(qdev, probe, qdev->ndev,
3742                    "Function #%d, Port %d, NIC Roll %d, NIC Rev = %d, "
3743                    "XG Roll = %d, XG Rev = %d.\n",
3744                    qdev->func,
3745                    qdev->port,
3746                    qdev->chip_rev_id & 0x0000000f,
3747                    qdev->chip_rev_id >> 4 & 0x0000000f,
3748                    qdev->chip_rev_id >> 8 & 0x0000000f,
3749                    qdev->chip_rev_id >> 12 & 0x0000000f);
3750         netif_info(qdev, probe, qdev->ndev,
3751                    "MAC address %pM\n", ndev->dev_addr);
3752 }
3753
3754 static int ql_wol(struct ql_adapter *qdev)
3755 {
3756         int status = 0;
3757         u32 wol = MB_WOL_DISABLE;
3758
3759         /* The CAM is still intact after a reset, but if we
3760          * are doing WOL, then we may need to program the
3761          * routing regs. We would also need to issue the mailbox
3762          * commands to instruct the MPI what to do per the ethtool
3763          * settings.
3764          */
3765
3766         if (qdev->wol & (WAKE_ARP | WAKE_MAGICSECURE | WAKE_PHY | WAKE_UCAST |
3767                         WAKE_MCAST | WAKE_BCAST)) {
3768                 netif_err(qdev, ifdown, qdev->ndev,
3769                           "Unsupported WOL parameter. qdev->wol = 0x%x.\n",
3770                           qdev->wol);
3771                 return -EINVAL;
3772         }
3773
3774         if (qdev->wol & WAKE_MAGIC) {
3775                 status = ql_mb_wol_set_magic(qdev, 1);
3776                 if (status) {
3777                         netif_err(qdev, ifdown, qdev->ndev,
3778                                   "Failed to set magic packet on %s.\n",
3779                                   qdev->ndev->name);
3780                         return status;
3781                 }
3782                 netif_info(qdev, drv, qdev->ndev,
3783                            "Enabled magic packet successfully on %s.\n",
3784                            qdev->ndev->name);
3785
3786                 wol |= MB_WOL_MAGIC_PKT;
3787         }
3788
3789         if (qdev->wol) {
3790                 wol |= MB_WOL_MODE_ON;
3791                 status = ql_mb_wol_mode(qdev, wol);
3792                 netif_err(qdev, drv, qdev->ndev,
3793                           "WOL %s (wol code 0x%x) on %s\n",
3794                           (status == 0) ? "Successfully set" : "Failed",
3795                           wol, qdev->ndev->name);
3796         }
3797
3798         return status;
3799 }
3800
3801 static void ql_cancel_all_work_sync(struct ql_adapter *qdev)
3802 {
3803
3804         /* Don't kill the reset worker thread if we
3805          * are in the process of recovery.
3806          */
3807         if (test_bit(QL_ADAPTER_UP, &qdev->flags))
3808                 cancel_delayed_work_sync(&qdev->asic_reset_work);
3809         cancel_delayed_work_sync(&qdev->mpi_reset_work);
3810         cancel_delayed_work_sync(&qdev->mpi_work);
3811         cancel_delayed_work_sync(&qdev->mpi_idc_work);
3812         cancel_delayed_work_sync(&qdev->mpi_core_to_log);
3813         cancel_delayed_work_sync(&qdev->mpi_port_cfg_work);
3814 }
3815
3816 static int ql_adapter_down(struct ql_adapter *qdev)
3817 {
3818         int i, status = 0;
3819
3820         ql_link_off(qdev);
3821
3822         ql_cancel_all_work_sync(qdev);
3823
3824         for (i = 0; i < qdev->rss_ring_count; i++)
3825                 napi_disable(&qdev->rx_ring[i].napi);
3826
3827         clear_bit(QL_ADAPTER_UP, &qdev->flags);
3828
3829         ql_disable_interrupts(qdev);
3830
3831         ql_tx_ring_clean(qdev);
3832
3833         /* Call netif_napi_del() from common point.
3834          */
3835         for (i = 0; i < qdev->rss_ring_count; i++)
3836                 netif_napi_del(&qdev->rx_ring[i].napi);
3837
3838         status = ql_adapter_reset(qdev);
3839         if (status)
3840                 netif_err(qdev, ifdown, qdev->ndev, "reset(func #%d) FAILED!\n",
3841                           qdev->func);
3842         ql_free_rx_buffers(qdev);
3843
3844         return status;
3845 }
3846
3847 static int ql_adapter_up(struct ql_adapter *qdev)
3848 {
3849         int err = 0;
3850
3851         err = ql_adapter_initialize(qdev);
3852         if (err) {
3853                 netif_info(qdev, ifup, qdev->ndev, "Unable to initialize adapter.\n");
3854                 goto err_init;
3855         }
3856         set_bit(QL_ADAPTER_UP, &qdev->flags);
3857         ql_alloc_rx_buffers(qdev);
3858         /* If the port is initialized and the
3859          * link is up the turn on the carrier.
3860          */
3861         if ((ql_read32(qdev, STS) & qdev->port_init) &&
3862             (ql_read32(qdev, STS) & qdev->port_link_up))
3863                 ql_link_on(qdev);
3864         /* Restore rx mode. */
3865         clear_bit(QL_ALLMULTI, &qdev->flags);
3866         clear_bit(QL_PROMISCUOUS, &qdev->flags);
3867         qlge_set_multicast_list(qdev->ndev);
3868
3869         /* Restore vlan setting. */
3870         qlge_restore_vlan(qdev);
3871
3872         ql_enable_interrupts(qdev);
3873         ql_enable_all_completion_interrupts(qdev);
3874         netif_tx_start_all_queues(qdev->ndev);
3875
3876         return 0;
3877 err_init:
3878         ql_adapter_reset(qdev);
3879         return err;
3880 }
3881
3882 static void ql_release_adapter_resources(struct ql_adapter *qdev)
3883 {
3884         ql_free_mem_resources(qdev);
3885         ql_free_irq(qdev);
3886 }
3887
3888 static int ql_get_adapter_resources(struct ql_adapter *qdev)
3889 {
3890         if (ql_alloc_mem_resources(qdev)) {
3891                 netif_err(qdev, ifup, qdev->ndev, "Unable to  allocate memory.\n");
3892                 return -ENOMEM;
3893         }
3894         return ql_request_irq(qdev);
3895 }
3896
3897 static int qlge_close(struct net_device *ndev)
3898 {
3899         struct ql_adapter *qdev = netdev_priv(ndev);
3900         int i;
3901
3902         /* If we hit pci_channel_io_perm_failure
3903          * failure condition, then we already
3904          * brought the adapter down.
3905          */
3906         if (test_bit(QL_EEH_FATAL, &qdev->flags)) {
3907                 netif_err(qdev, drv, qdev->ndev, "EEH fatal did unload.\n");
3908                 clear_bit(QL_EEH_FATAL, &qdev->flags);
3909                 return 0;
3910         }
3911
3912         /*
3913          * Wait for device to recover from a reset.
3914          * (Rarely happens, but possible.)
3915          */
3916         while (!test_bit(QL_ADAPTER_UP, &qdev->flags))
3917                 msleep(1);
3918
3919         /* Make sure refill_work doesn't re-enable napi */
3920         for (i = 0; i < qdev->rss_ring_count; i++)
3921                 cancel_delayed_work_sync(&qdev->rx_ring[i].refill_work);
3922
3923         ql_adapter_down(qdev);
3924         ql_release_adapter_resources(qdev);
3925         return 0;
3926 }
3927
3928 static void qlge_set_lb_size(struct ql_adapter *qdev)
3929 {
3930         if (qdev->ndev->mtu <= 1500)
3931                 qdev->lbq_buf_size = LARGE_BUFFER_MIN_SIZE;
3932         else
3933                 qdev->lbq_buf_size = LARGE_BUFFER_MAX_SIZE;
3934         qdev->lbq_buf_order = get_order(qdev->lbq_buf_size);
3935 }
3936
3937 static int ql_configure_rings(struct ql_adapter *qdev)
3938 {
3939         int i;
3940         struct rx_ring *rx_ring;
3941         struct tx_ring *tx_ring;
3942         int cpu_cnt = min(MAX_CPUS, (int)num_online_cpus());
3943
3944         /* In a perfect world we have one RSS ring for each CPU
3945          * and each has it's own vector.  To do that we ask for
3946          * cpu_cnt vectors.  ql_enable_msix() will adjust the
3947          * vector count to what we actually get.  We then
3948          * allocate an RSS ring for each.
3949          * Essentially, we are doing min(cpu_count, msix_vector_count).
3950          */
3951         qdev->intr_count = cpu_cnt;
3952         ql_enable_msix(qdev);
3953         /* Adjust the RSS ring count to the actual vector count. */
3954         qdev->rss_ring_count = qdev->intr_count;
3955         qdev->tx_ring_count = cpu_cnt;
3956         qdev->rx_ring_count = qdev->tx_ring_count + qdev->rss_ring_count;
3957
3958         for (i = 0; i < qdev->tx_ring_count; i++) {
3959                 tx_ring = &qdev->tx_ring[i];
3960                 memset((void *)tx_ring, 0, sizeof(*tx_ring));
3961                 tx_ring->qdev = qdev;
3962                 tx_ring->wq_id = i;
3963                 tx_ring->wq_len = qdev->tx_ring_size;
3964                 tx_ring->wq_size =
3965                     tx_ring->wq_len * sizeof(struct ob_mac_iocb_req);
3966
3967                 /*
3968                  * The completion queue ID for the tx rings start
3969                  * immediately after the rss rings.
3970                  */
3971                 tx_ring->cq_id = qdev->rss_ring_count + i;
3972         }
3973
3974         for (i = 0; i < qdev->rx_ring_count; i++) {
3975                 rx_ring = &qdev->rx_ring[i];
3976                 memset((void *)rx_ring, 0, sizeof(*rx_ring));
3977                 rx_ring->qdev = qdev;
3978                 rx_ring->cq_id = i;
3979                 rx_ring->cpu = i % cpu_cnt;     /* CPU to run handler on. */
3980                 if (i < qdev->rss_ring_count) {
3981                         /*
3982                          * Inbound (RSS) queues.
3983                          */
3984                         rx_ring->cq_len = qdev->rx_ring_size;
3985                         rx_ring->cq_size =
3986                             rx_ring->cq_len * sizeof(struct ql_net_rsp_iocb);
3987                         rx_ring->lbq.type = QLGE_LB;
3988                         rx_ring->sbq.type = QLGE_SB;
3989                         INIT_DELAYED_WORK(&rx_ring->refill_work,
3990                                           &qlge_slow_refill);
3991                 } else {
3992                         /*
3993                          * Outbound queue handles outbound completions only.
3994                          */
3995                         /* outbound cq is same size as tx_ring it services. */
3996                         rx_ring->cq_len = qdev->tx_ring_size;
3997                         rx_ring->cq_size =
3998                             rx_ring->cq_len * sizeof(struct ql_net_rsp_iocb);
3999                 }
4000         }
4001         return 0;
4002 }
4003
4004 static int qlge_open(struct net_device *ndev)
4005 {
4006         int err = 0;
4007         struct ql_adapter *qdev = netdev_priv(ndev);
4008
4009         err = ql_adapter_reset(qdev);
4010         if (err)
4011                 return err;
4012
4013         qlge_set_lb_size(qdev);
4014         err = ql_configure_rings(qdev);
4015         if (err)
4016                 return err;
4017
4018         err = ql_get_adapter_resources(qdev);
4019         if (err)
4020                 goto error_up;
4021
4022         err = ql_adapter_up(qdev);
4023         if (err)
4024                 goto error_up;
4025
4026         return err;
4027
4028 error_up:
4029         ql_release_adapter_resources(qdev);
4030         return err;
4031 }
4032
4033 static int ql_change_rx_buffers(struct ql_adapter *qdev)
4034 {
4035         int status;
4036
4037         /* Wait for an outstanding reset to complete. */
4038         if (!test_bit(QL_ADAPTER_UP, &qdev->flags)) {
4039                 int i = 4;
4040
4041                 while (--i && !test_bit(QL_ADAPTER_UP, &qdev->flags)) {
4042                         netif_err(qdev, ifup, qdev->ndev,
4043                                   "Waiting for adapter UP...\n");
4044                         ssleep(1);
4045                 }
4046
4047                 if (!i) {
4048                         netif_err(qdev, ifup, qdev->ndev,
4049                                   "Timed out waiting for adapter UP\n");
4050                         return -ETIMEDOUT;
4051                 }
4052         }
4053
4054         status = ql_adapter_down(qdev);
4055         if (status)
4056                 goto error;
4057
4058         qlge_set_lb_size(qdev);
4059
4060         status = ql_adapter_up(qdev);
4061         if (status)
4062                 goto error;
4063
4064         return status;
4065 error:
4066         netif_alert(qdev, ifup, qdev->ndev,
4067                     "Driver up/down cycle failed, closing device.\n");
4068         set_bit(QL_ADAPTER_UP, &qdev->flags);
4069         dev_close(qdev->ndev);
4070         return status;
4071 }
4072
4073 static int qlge_change_mtu(struct net_device *ndev, int new_mtu)
4074 {
4075         struct ql_adapter *qdev = netdev_priv(ndev);
4076         int status;
4077
4078         if (ndev->mtu == 1500 && new_mtu == 9000)
4079                 netif_err(qdev, ifup, qdev->ndev, "Changing to jumbo MTU.\n");
4080         else if (ndev->mtu == 9000 && new_mtu == 1500)
4081                 netif_err(qdev, ifup, qdev->ndev, "Changing to normal MTU.\n");
4082         else
4083                 return -EINVAL;
4084
4085         queue_delayed_work(qdev->workqueue,
4086                            &qdev->mpi_port_cfg_work, 3 * HZ);
4087
4088         ndev->mtu = new_mtu;
4089
4090         if (!netif_running(qdev->ndev))
4091                 return 0;
4092
4093         status = ql_change_rx_buffers(qdev);
4094         if (status) {
4095                 netif_err(qdev, ifup, qdev->ndev,
4096                           "Changing MTU failed.\n");
4097         }
4098
4099         return status;
4100 }
4101
4102 static struct net_device_stats *qlge_get_stats(struct net_device
4103                                                *ndev)
4104 {
4105         struct ql_adapter *qdev = netdev_priv(ndev);
4106         struct rx_ring *rx_ring = &qdev->rx_ring[0];
4107         struct tx_ring *tx_ring = &qdev->tx_ring[0];
4108         unsigned long pkts, mcast, dropped, errors, bytes;
4109         int i;
4110
4111         /* Get RX stats. */
4112         pkts = mcast = dropped = errors = bytes = 0;
4113         for (i = 0; i < qdev->rss_ring_count; i++, rx_ring++) {
4114                 pkts += rx_ring->rx_packets;
4115                 bytes += rx_ring->rx_bytes;
4116                 dropped += rx_ring->rx_dropped;
4117                 errors += rx_ring->rx_errors;
4118                 mcast += rx_ring->rx_multicast;
4119         }
4120         ndev->stats.rx_packets = pkts;
4121         ndev->stats.rx_bytes = bytes;
4122         ndev->stats.rx_dropped = dropped;
4123         ndev->stats.rx_errors = errors;
4124         ndev->stats.multicast = mcast;
4125
4126         /* Get TX stats. */
4127         pkts = errors = bytes = 0;
4128         for (i = 0; i < qdev->tx_ring_count; i++, tx_ring++) {
4129                 pkts += tx_ring->tx_packets;
4130                 bytes += tx_ring->tx_bytes;
4131                 errors += tx_ring->tx_errors;
4132         }
4133         ndev->stats.tx_packets = pkts;
4134         ndev->stats.tx_bytes = bytes;
4135         ndev->stats.tx_errors = errors;
4136         return &ndev->stats;
4137 }
4138
4139 static void qlge_set_multicast_list(struct net_device *ndev)
4140 {
4141         struct ql_adapter *qdev = netdev_priv(ndev);
4142         struct netdev_hw_addr *ha;
4143         int i, status;
4144
4145         status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
4146         if (status)
4147                 return;
4148         /*
4149          * Set or clear promiscuous mode if a
4150          * transition is taking place.
4151          */
4152         if (ndev->flags & IFF_PROMISC) {
4153                 if (!test_bit(QL_PROMISCUOUS, &qdev->flags)) {
4154                         if (ql_set_routing_reg
4155                             (qdev, RT_IDX_PROMISCUOUS_SLOT, RT_IDX_VALID, 1)) {
4156                                 netif_err(qdev, hw, qdev->ndev,
4157                                           "Failed to set promiscuous mode.\n");
4158                         } else {
4159                                 set_bit(QL_PROMISCUOUS, &qdev->flags);
4160                         }
4161                 }
4162         } else {
4163                 if (test_bit(QL_PROMISCUOUS, &qdev->flags)) {
4164                         if (ql_set_routing_reg
4165                             (qdev, RT_IDX_PROMISCUOUS_SLOT, RT_IDX_VALID, 0)) {
4166                                 netif_err(qdev, hw, qdev->ndev,
4167                                           "Failed to clear promiscuous mode.\n");
4168                         } else {
4169                                 clear_bit(QL_PROMISCUOUS, &qdev->flags);
4170                         }
4171                 }
4172         }
4173
4174         /*
4175          * Set or clear all multicast mode if a
4176          * transition is taking place.
4177          */
4178         if ((ndev->flags & IFF_ALLMULTI) ||
4179             (netdev_mc_count(ndev) > MAX_MULTICAST_ENTRIES)) {
4180                 if (!test_bit(QL_ALLMULTI, &qdev->flags)) {
4181                         if (ql_set_routing_reg
4182                             (qdev, RT_IDX_ALLMULTI_SLOT, RT_IDX_MCAST, 1)) {
4183                                 netif_err(qdev, hw, qdev->ndev,
4184                                           "Failed to set all-multi mode.\n");
4185                         } else {
4186                                 set_bit(QL_ALLMULTI, &qdev->flags);
4187                         }
4188                 }
4189         } else {
4190                 if (test_bit(QL_ALLMULTI, &qdev->flags)) {
4191                         if (ql_set_routing_reg
4192                             (qdev, RT_IDX_ALLMULTI_SLOT, RT_IDX_MCAST, 0)) {
4193                                 netif_err(qdev, hw, qdev->ndev,
4194                                           "Failed to clear all-multi mode.\n");
4195                         } else {
4196                                 clear_bit(QL_ALLMULTI, &qdev->flags);
4197                         }
4198                 }
4199         }
4200
4201         if (!netdev_mc_empty(ndev)) {
4202                 status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
4203                 if (status)
4204                         goto exit;
4205                 i = 0;
4206                 netdev_for_each_mc_addr(ha, ndev) {
4207                         if (ql_set_mac_addr_reg(qdev, (u8 *)ha->addr,
4208                                                 MAC_ADDR_TYPE_MULTI_MAC, i)) {
4209                                 netif_err(qdev, hw, qdev->ndev,
4210                                           "Failed to loadmulticast address.\n");
4211                                 ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
4212                                 goto exit;
4213                         }
4214                         i++;
4215                 }
4216                 ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
4217                 if (ql_set_routing_reg
4218                     (qdev, RT_IDX_MCAST_MATCH_SLOT, RT_IDX_MCAST_MATCH, 1)) {
4219                         netif_err(qdev, hw, qdev->ndev,
4220                                   "Failed to set multicast match mode.\n");
4221                 } else {
4222                         set_bit(QL_ALLMULTI, &qdev->flags);
4223                 }
4224         }
4225 exit:
4226         ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
4227 }
4228
4229 static int qlge_set_mac_address(struct net_device *ndev, void *p)
4230 {
4231         struct ql_adapter *qdev = netdev_priv(ndev);
4232         struct sockaddr *addr = p;
4233         int status;
4234
4235         if (!is_valid_ether_addr(addr->sa_data))
4236                 return -EADDRNOTAVAIL;
4237         memcpy(ndev->dev_addr, addr->sa_data, ndev->addr_len);
4238         /* Update local copy of current mac address. */
4239         memcpy(qdev->current_mac_addr, ndev->dev_addr, ndev->addr_len);
4240
4241         status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
4242         if (status)
4243                 return status;
4244         status = ql_set_mac_addr_reg(qdev, (u8 *)ndev->dev_addr,
4245                                      MAC_ADDR_TYPE_CAM_MAC,
4246                                      qdev->func * MAX_CQ);
4247         if (status)
4248                 netif_err(qdev, hw, qdev->ndev, "Failed to load MAC address.\n");
4249         ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
4250         return status;
4251 }
4252
4253 static void qlge_tx_timeout(struct net_device *ndev, unsigned int txqueue)
4254 {
4255         struct ql_adapter *qdev = netdev_priv(ndev);
4256
4257         ql_queue_asic_error(qdev);
4258 }
4259
4260 static void ql_asic_reset_work(struct work_struct *work)
4261 {
4262         struct ql_adapter *qdev =
4263             container_of(work, struct ql_adapter, asic_reset_work.work);
4264         int status;
4265
4266         rtnl_lock();
4267         status = ql_adapter_down(qdev);
4268         if (status)
4269                 goto error;
4270
4271         status = ql_adapter_up(qdev);
4272         if (status)
4273                 goto error;
4274
4275         /* Restore rx mode. */
4276         clear_bit(QL_ALLMULTI, &qdev->flags);
4277         clear_bit(QL_PROMISCUOUS, &qdev->flags);
4278         qlge_set_multicast_list(qdev->ndev);
4279
4280         rtnl_unlock();
4281         return;
4282 error:
4283         netif_alert(qdev, ifup, qdev->ndev,
4284                     "Driver up/down cycle failed, closing device\n");
4285
4286         set_bit(QL_ADAPTER_UP, &qdev->flags);
4287         dev_close(qdev->ndev);
4288         rtnl_unlock();
4289 }
4290
4291 static const struct nic_operations qla8012_nic_ops = {
4292         .get_flash              = ql_get_8012_flash_params,
4293         .port_initialize        = ql_8012_port_initialize,
4294 };
4295
4296 static const struct nic_operations qla8000_nic_ops = {
4297         .get_flash              = ql_get_8000_flash_params,
4298         .port_initialize        = ql_8000_port_initialize,
4299 };
4300
4301 /* Find the pcie function number for the other NIC
4302  * on this chip.  Since both NIC functions share a
4303  * common firmware we have the lowest enabled function
4304  * do any common work.  Examples would be resetting
4305  * after a fatal firmware error, or doing a firmware
4306  * coredump.
4307  */
4308 static int ql_get_alt_pcie_func(struct ql_adapter *qdev)
4309 {
4310         int status = 0;
4311         u32 temp;
4312         u32 nic_func1, nic_func2;
4313
4314         status = ql_read_mpi_reg(qdev, MPI_TEST_FUNC_PORT_CFG,
4315                                  &temp);
4316         if (status)
4317                 return status;
4318
4319         nic_func1 = ((temp >> MPI_TEST_NIC1_FUNC_SHIFT) &
4320                         MPI_TEST_NIC_FUNC_MASK);
4321         nic_func2 = ((temp >> MPI_TEST_NIC2_FUNC_SHIFT) &
4322                         MPI_TEST_NIC_FUNC_MASK);
4323
4324         if (qdev->func == nic_func1)
4325                 qdev->alt_func = nic_func2;
4326         else if (qdev->func == nic_func2)
4327                 qdev->alt_func = nic_func1;
4328         else
4329                 status = -EIO;
4330
4331         return status;
4332 }
4333
4334 static int ql_get_board_info(struct ql_adapter *qdev)
4335 {
4336         int status;
4337
4338         qdev->func =
4339             (ql_read32(qdev, STS) & STS_FUNC_ID_MASK) >> STS_FUNC_ID_SHIFT;
4340         if (qdev->func > 3)
4341                 return -EIO;
4342
4343         status = ql_get_alt_pcie_func(qdev);
4344         if (status)
4345                 return status;
4346
4347         qdev->port = (qdev->func < qdev->alt_func) ? 0 : 1;
4348         if (qdev->port) {
4349                 qdev->xg_sem_mask = SEM_XGMAC1_MASK;
4350                 qdev->port_link_up = STS_PL1;
4351                 qdev->port_init = STS_PI1;
4352                 qdev->mailbox_in = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC2_MBI;
4353                 qdev->mailbox_out = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC2_MBO;
4354         } else {
4355                 qdev->xg_sem_mask = SEM_XGMAC0_MASK;
4356                 qdev->port_link_up = STS_PL0;
4357                 qdev->port_init = STS_PI0;
4358                 qdev->mailbox_in = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC0_MBI;
4359                 qdev->mailbox_out = PROC_ADDR_MPI_RISC | PROC_ADDR_FUNC0_MBO;
4360         }
4361         qdev->chip_rev_id = ql_read32(qdev, REV_ID);
4362         qdev->device_id = qdev->pdev->device;
4363         if (qdev->device_id == QLGE_DEVICE_ID_8012)
4364                 qdev->nic_ops = &qla8012_nic_ops;
4365         else if (qdev->device_id == QLGE_DEVICE_ID_8000)
4366                 qdev->nic_ops = &qla8000_nic_ops;
4367         return status;
4368 }
4369
4370 static void ql_release_all(struct pci_dev *pdev)
4371 {
4372         struct net_device *ndev = pci_get_drvdata(pdev);
4373         struct ql_adapter *qdev = netdev_priv(ndev);
4374
4375         if (qdev->workqueue) {
4376                 destroy_workqueue(qdev->workqueue);
4377                 qdev->workqueue = NULL;
4378         }
4379
4380         if (qdev->reg_base)
4381                 iounmap(qdev->reg_base);
4382         if (qdev->doorbell_area)
4383                 iounmap(qdev->doorbell_area);
4384         vfree(qdev->mpi_coredump);
4385         pci_release_regions(pdev);
4386 }
4387
4388 static int ql_init_device(struct pci_dev *pdev, struct net_device *ndev,
4389                           int cards_found)
4390 {
4391         struct ql_adapter *qdev = netdev_priv(ndev);
4392         int err = 0;
4393
4394         memset((void *)qdev, 0, sizeof(*qdev));
4395         err = pci_enable_device(pdev);
4396         if (err) {
4397                 dev_err(&pdev->dev, "PCI device enable failed.\n");
4398                 return err;
4399         }
4400
4401         qdev->ndev = ndev;
4402         qdev->pdev = pdev;
4403         pci_set_drvdata(pdev, ndev);
4404
4405         /* Set PCIe read request size */
4406         err = pcie_set_readrq(pdev, 4096);
4407         if (err) {
4408                 dev_err(&pdev->dev, "Set readrq failed.\n");
4409                 goto err_out1;
4410         }
4411
4412         err = pci_request_regions(pdev, DRV_NAME);
4413         if (err) {
4414                 dev_err(&pdev->dev, "PCI region request failed.\n");
4415                 return err;
4416         }
4417
4418         pci_set_master(pdev);
4419         if (!dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
4420                 set_bit(QL_DMA64, &qdev->flags);
4421                 err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64));
4422         } else {
4423                 err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
4424                 if (!err)
4425                         err = dma_set_coherent_mask(&pdev->dev,
4426                                                     DMA_BIT_MASK(32));
4427         }
4428
4429         if (err) {
4430                 dev_err(&pdev->dev, "No usable DMA configuration.\n");
4431                 goto err_out2;
4432         }
4433
4434         /* Set PCIe reset type for EEH to fundamental. */
4435         pdev->needs_freset = 1;
4436         pci_save_state(pdev);
4437         qdev->reg_base =
4438                 ioremap(pci_resource_start(pdev, 1), pci_resource_len(pdev, 1));
4439         if (!qdev->reg_base) {
4440                 dev_err(&pdev->dev, "Register mapping failed.\n");
4441                 err = -ENOMEM;
4442                 goto err_out2;
4443         }
4444
4445         qdev->doorbell_area_size = pci_resource_len(pdev, 3);
4446         qdev->doorbell_area =
4447                 ioremap(pci_resource_start(pdev, 3), pci_resource_len(pdev, 3));
4448         if (!qdev->doorbell_area) {
4449                 dev_err(&pdev->dev, "Doorbell register mapping failed.\n");
4450                 err = -ENOMEM;
4451                 goto err_out2;
4452         }
4453
4454         err = ql_get_board_info(qdev);
4455         if (err) {
4456                 dev_err(&pdev->dev, "Register access failed.\n");
4457                 err = -EIO;
4458                 goto err_out2;
4459         }
4460         qdev->msg_enable = netif_msg_init(debug, default_msg);
4461         spin_lock_init(&qdev->stats_lock);
4462
4463         if (qlge_mpi_coredump) {
4464                 qdev->mpi_coredump =
4465                         vmalloc(sizeof(struct ql_mpi_coredump));
4466                 if (!qdev->mpi_coredump) {
4467                         err = -ENOMEM;
4468                         goto err_out2;
4469                 }
4470                 if (qlge_force_coredump)
4471                         set_bit(QL_FRC_COREDUMP, &qdev->flags);
4472         }
4473         /* make sure the EEPROM is good */
4474         err = qdev->nic_ops->get_flash(qdev);
4475         if (err) {
4476                 dev_err(&pdev->dev, "Invalid FLASH.\n");
4477                 goto err_out2;
4478         }
4479
4480         /* Keep local copy of current mac address. */
4481         memcpy(qdev->current_mac_addr, ndev->dev_addr, ndev->addr_len);
4482
4483         /* Set up the default ring sizes. */
4484         qdev->tx_ring_size = NUM_TX_RING_ENTRIES;
4485         qdev->rx_ring_size = NUM_RX_RING_ENTRIES;
4486
4487         /* Set up the coalescing parameters. */
4488         qdev->rx_coalesce_usecs = DFLT_COALESCE_WAIT;
4489         qdev->tx_coalesce_usecs = DFLT_COALESCE_WAIT;
4490         qdev->rx_max_coalesced_frames = DFLT_INTER_FRAME_WAIT;
4491         qdev->tx_max_coalesced_frames = DFLT_INTER_FRAME_WAIT;
4492
4493         /*
4494          * Set up the operating parameters.
4495          */
4496         qdev->workqueue = alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM,
4497                                                   ndev->name);
4498         if (!qdev->workqueue) {
4499                 err = -ENOMEM;
4500                 goto err_out2;
4501         }
4502
4503         INIT_DELAYED_WORK(&qdev->asic_reset_work, ql_asic_reset_work);
4504         INIT_DELAYED_WORK(&qdev->mpi_reset_work, ql_mpi_reset_work);
4505         INIT_DELAYED_WORK(&qdev->mpi_work, ql_mpi_work);
4506         INIT_DELAYED_WORK(&qdev->mpi_port_cfg_work, ql_mpi_port_cfg_work);
4507         INIT_DELAYED_WORK(&qdev->mpi_idc_work, ql_mpi_idc_work);
4508         INIT_DELAYED_WORK(&qdev->mpi_core_to_log, ql_mpi_core_to_log);
4509         init_completion(&qdev->ide_completion);
4510         mutex_init(&qdev->mpi_mutex);
4511
4512         if (!cards_found) {
4513                 dev_info(&pdev->dev, "%s\n", DRV_STRING);
4514                 dev_info(&pdev->dev, "Driver name: %s, Version: %s.\n",
4515                          DRV_NAME, DRV_VERSION);
4516         }
4517         return 0;
4518 err_out2:
4519         ql_release_all(pdev);
4520 err_out1:
4521         pci_disable_device(pdev);
4522         return err;
4523 }
4524
4525 static const struct net_device_ops qlge_netdev_ops = {
4526         .ndo_open               = qlge_open,
4527         .ndo_stop               = qlge_close,
4528         .ndo_start_xmit         = qlge_send,
4529         .ndo_change_mtu         = qlge_change_mtu,
4530         .ndo_get_stats          = qlge_get_stats,
4531         .ndo_set_rx_mode        = qlge_set_multicast_list,
4532         .ndo_set_mac_address    = qlge_set_mac_address,
4533         .ndo_validate_addr      = eth_validate_addr,
4534         .ndo_tx_timeout         = qlge_tx_timeout,
4535         .ndo_set_features       = qlge_set_features,
4536         .ndo_vlan_rx_add_vid    = qlge_vlan_rx_add_vid,
4537         .ndo_vlan_rx_kill_vid   = qlge_vlan_rx_kill_vid,
4538 };
4539
4540 static void ql_timer(struct timer_list *t)
4541 {
4542         struct ql_adapter *qdev = from_timer(qdev, t, timer);
4543         u32 var = 0;
4544
4545         var = ql_read32(qdev, STS);
4546         if (pci_channel_offline(qdev->pdev)) {
4547                 netif_err(qdev, ifup, qdev->ndev, "EEH STS = 0x%.08x.\n", var);
4548                 return;
4549         }
4550
4551         mod_timer(&qdev->timer, jiffies + (5 * HZ));
4552 }
4553
4554 static int qlge_probe(struct pci_dev *pdev,
4555                       const struct pci_device_id *pci_entry)
4556 {
4557         struct net_device *ndev = NULL;
4558         struct ql_adapter *qdev = NULL;
4559         static int cards_found;
4560         int err = 0;
4561
4562         ndev = alloc_etherdev_mq(sizeof(struct ql_adapter),
4563                                  min(MAX_CPUS,
4564                                      netif_get_num_default_rss_queues()));
4565         if (!ndev)
4566                 return -ENOMEM;
4567
4568         err = ql_init_device(pdev, ndev, cards_found);
4569         if (err < 0) {
4570                 free_netdev(ndev);
4571                 return err;
4572         }
4573
4574         qdev = netdev_priv(ndev);
4575         SET_NETDEV_DEV(ndev, &pdev->dev);
4576         ndev->hw_features = NETIF_F_SG |
4577                             NETIF_F_IP_CSUM |
4578                             NETIF_F_TSO |
4579                             NETIF_F_TSO_ECN |
4580                             NETIF_F_HW_VLAN_CTAG_TX |
4581                             NETIF_F_HW_VLAN_CTAG_RX |
4582                             NETIF_F_HW_VLAN_CTAG_FILTER |
4583                             NETIF_F_RXCSUM;
4584         ndev->features = ndev->hw_features;
4585         ndev->vlan_features = ndev->hw_features;
4586         /* vlan gets same features (except vlan filter) */
4587         ndev->vlan_features &= ~(NETIF_F_HW_VLAN_CTAG_FILTER |
4588                                  NETIF_F_HW_VLAN_CTAG_TX |
4589                                  NETIF_F_HW_VLAN_CTAG_RX);
4590
4591         if (test_bit(QL_DMA64, &qdev->flags))
4592                 ndev->features |= NETIF_F_HIGHDMA;
4593
4594         /*
4595          * Set up net_device structure.
4596          */
4597         ndev->tx_queue_len = qdev->tx_ring_size;
4598         ndev->irq = pdev->irq;
4599
4600         ndev->netdev_ops = &qlge_netdev_ops;
4601         ndev->ethtool_ops = &qlge_ethtool_ops;
4602         ndev->watchdog_timeo = 10 * HZ;
4603
4604         /* MTU range: this driver only supports 1500 or 9000, so this only
4605          * filters out values above or below, and we'll rely on
4606          * qlge_change_mtu to make sure only 1500 or 9000 are allowed
4607          */
4608         ndev->min_mtu = ETH_DATA_LEN;
4609         ndev->max_mtu = 9000;
4610
4611         err = register_netdev(ndev);
4612         if (err) {
4613                 dev_err(&pdev->dev, "net device registration failed.\n");
4614                 ql_release_all(pdev);
4615                 pci_disable_device(pdev);
4616                 free_netdev(ndev);
4617                 return err;
4618         }
4619         /* Start up the timer to trigger EEH if
4620          * the bus goes dead
4621          */
4622         timer_setup(&qdev->timer, ql_timer, TIMER_DEFERRABLE);
4623         mod_timer(&qdev->timer, jiffies + (5 * HZ));
4624         ql_link_off(qdev);
4625         ql_display_dev_info(ndev);
4626         atomic_set(&qdev->lb_count, 0);
4627         cards_found++;
4628         return 0;
4629 }
4630
4631 netdev_tx_t ql_lb_send(struct sk_buff *skb, struct net_device *ndev)
4632 {
4633         return qlge_send(skb, ndev);
4634 }
4635
4636 int ql_clean_lb_rx_ring(struct rx_ring *rx_ring, int budget)
4637 {
4638         return ql_clean_inbound_rx_ring(rx_ring, budget);
4639 }
4640
4641 static void qlge_remove(struct pci_dev *pdev)
4642 {
4643         struct net_device *ndev = pci_get_drvdata(pdev);
4644         struct ql_adapter *qdev = netdev_priv(ndev);
4645
4646         del_timer_sync(&qdev->timer);
4647         ql_cancel_all_work_sync(qdev);
4648         unregister_netdev(ndev);
4649         ql_release_all(pdev);
4650         pci_disable_device(pdev);
4651         free_netdev(ndev);
4652 }
4653
4654 /* Clean up resources without touching hardware. */
4655 static void ql_eeh_close(struct net_device *ndev)
4656 {
4657         int i;
4658         struct ql_adapter *qdev = netdev_priv(ndev);
4659
4660         if (netif_carrier_ok(ndev)) {
4661                 netif_carrier_off(ndev);
4662                 netif_stop_queue(ndev);
4663         }
4664
4665         /* Disabling the timer */
4666         ql_cancel_all_work_sync(qdev);
4667
4668         for (i = 0; i < qdev->rss_ring_count; i++)
4669                 netif_napi_del(&qdev->rx_ring[i].napi);
4670
4671         clear_bit(QL_ADAPTER_UP, &qdev->flags);
4672         ql_tx_ring_clean(qdev);
4673         ql_free_rx_buffers(qdev);
4674         ql_release_adapter_resources(qdev);
4675 }
4676
4677 /*
4678  * This callback is called by the PCI subsystem whenever
4679  * a PCI bus error is detected.
4680  */
4681 static pci_ers_result_t qlge_io_error_detected(struct pci_dev *pdev,
4682                                                pci_channel_state_t state)
4683 {
4684         struct net_device *ndev = pci_get_drvdata(pdev);
4685         struct ql_adapter *qdev = netdev_priv(ndev);
4686
4687         switch (state) {
4688         case pci_channel_io_normal:
4689                 return PCI_ERS_RESULT_CAN_RECOVER;
4690         case pci_channel_io_frozen:
4691                 netif_device_detach(ndev);
4692                 del_timer_sync(&qdev->timer);
4693                 if (netif_running(ndev))
4694                         ql_eeh_close(ndev);
4695                 pci_disable_device(pdev);
4696                 return PCI_ERS_RESULT_NEED_RESET;
4697         case pci_channel_io_perm_failure:
4698                 dev_err(&pdev->dev,
4699                         "%s: pci_channel_io_perm_failure.\n", __func__);
4700                 del_timer_sync(&qdev->timer);
4701                 ql_eeh_close(ndev);
4702                 set_bit(QL_EEH_FATAL, &qdev->flags);
4703                 return PCI_ERS_RESULT_DISCONNECT;
4704         }
4705
4706         /* Request a slot reset. */
4707         return PCI_ERS_RESULT_NEED_RESET;
4708 }
4709
4710 /*
4711  * This callback is called after the PCI buss has been reset.
4712  * Basically, this tries to restart the card from scratch.
4713  * This is a shortened version of the device probe/discovery code,
4714  * it resembles the first-half of the () routine.
4715  */
4716 static pci_ers_result_t qlge_io_slot_reset(struct pci_dev *pdev)
4717 {
4718         struct net_device *ndev = pci_get_drvdata(pdev);
4719         struct ql_adapter *qdev = netdev_priv(ndev);
4720
4721         pdev->error_state = pci_channel_io_normal;
4722
4723         pci_restore_state(pdev);
4724         if (pci_enable_device(pdev)) {
4725                 netif_err(qdev, ifup, qdev->ndev,
4726                           "Cannot re-enable PCI device after reset.\n");
4727                 return PCI_ERS_RESULT_DISCONNECT;
4728         }
4729         pci_set_master(pdev);
4730
4731         if (ql_adapter_reset(qdev)) {
4732                 netif_err(qdev, drv, qdev->ndev, "reset FAILED!\n");
4733                 set_bit(QL_EEH_FATAL, &qdev->flags);
4734                 return PCI_ERS_RESULT_DISCONNECT;
4735         }
4736
4737         return PCI_ERS_RESULT_RECOVERED;
4738 }
4739
4740 static void qlge_io_resume(struct pci_dev *pdev)
4741 {
4742         struct net_device *ndev = pci_get_drvdata(pdev);
4743         struct ql_adapter *qdev = netdev_priv(ndev);
4744         int err = 0;
4745
4746         if (netif_running(ndev)) {
4747                 err = qlge_open(ndev);
4748                 if (err) {
4749                         netif_err(qdev, ifup, qdev->ndev,
4750                                   "Device initialization failed after reset.\n");
4751                         return;
4752                 }
4753         } else {
4754                 netif_err(qdev, ifup, qdev->ndev,
4755                           "Device was not running prior to EEH.\n");
4756         }
4757         mod_timer(&qdev->timer, jiffies + (5 * HZ));
4758         netif_device_attach(ndev);
4759 }
4760
4761 static const struct pci_error_handlers qlge_err_handler = {
4762         .error_detected = qlge_io_error_detected,
4763         .slot_reset = qlge_io_slot_reset,
4764         .resume = qlge_io_resume,
4765 };
4766
4767 static int __maybe_unused qlge_suspend(struct device *dev_d)
4768 {
4769         struct net_device *ndev = dev_get_drvdata(dev_d);
4770         struct ql_adapter *qdev = netdev_priv(ndev);
4771         int err;
4772
4773         netif_device_detach(ndev);
4774         del_timer_sync(&qdev->timer);
4775
4776         if (netif_running(ndev)) {
4777                 err = ql_adapter_down(qdev);
4778                 if (!err)
4779                         return err;
4780         }
4781
4782         ql_wol(qdev);
4783
4784         return 0;
4785 }
4786
4787 static int __maybe_unused qlge_resume(struct device *dev_d)
4788 {
4789         struct net_device *ndev = dev_get_drvdata(dev_d);
4790         struct ql_adapter *qdev = netdev_priv(ndev);
4791         int err;
4792
4793         pci_set_master(to_pci_dev(dev_d));
4794
4795         device_wakeup_disable(dev_d);
4796
4797         if (netif_running(ndev)) {
4798                 err = ql_adapter_up(qdev);
4799                 if (err)
4800                         return err;
4801         }
4802
4803         mod_timer(&qdev->timer, jiffies + (5 * HZ));
4804         netif_device_attach(ndev);
4805
4806         return 0;
4807 }
4808
4809 static void qlge_shutdown(struct pci_dev *pdev)
4810 {
4811         qlge_suspend(&pdev->dev);
4812 }
4813
4814 static SIMPLE_DEV_PM_OPS(qlge_pm_ops, qlge_suspend, qlge_resume);
4815
4816 static struct pci_driver qlge_driver = {
4817         .name = DRV_NAME,
4818         .id_table = qlge_pci_tbl,
4819         .probe = qlge_probe,
4820         .remove = qlge_remove,
4821         .driver.pm = &qlge_pm_ops,
4822         .shutdown = qlge_shutdown,
4823         .err_handler = &qlge_err_handler
4824 };
4825
4826 module_pci_driver(qlge_driver);