qlcnic: additional driver statistics.
[safe/jmp/linux-2.6] / drivers / net / qlcnic / qlcnic_main.c
1 /*
2  * Copyright (C) 2009 - QLogic Corporation.
3  * All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18  * MA  02111-1307, USA.
19  *
20  * The full GNU General Public License is included in this distribution
21  * in the file called "COPYING".
22  *
23  */
24
25 #include <linux/vmalloc.h>
26 #include <linux/interrupt.h>
27
28 #include "qlcnic.h"
29
30 #include <linux/dma-mapping.h>
31 #include <linux/if_vlan.h>
32 #include <net/ip.h>
33 #include <linux/ipv6.h>
34 #include <linux/inetdevice.h>
35 #include <linux/sysfs.h>
36
37 MODULE_DESCRIPTION("QLogic 10 GbE Converged Ethernet Driver");
38 MODULE_LICENSE("GPL");
39 MODULE_VERSION(QLCNIC_LINUX_VERSIONID);
40 MODULE_FIRMWARE(QLCNIC_UNIFIED_ROMIMAGE_NAME);
41
42 char qlcnic_driver_name[] = "qlcnic";
43 static const char qlcnic_driver_string[] = "QLogic Converged Ethernet Driver v"
44     QLCNIC_LINUX_VERSIONID;
45
46 static int port_mode = QLCNIC_PORT_MODE_AUTO_NEG;
47
48 /* Default to restricted 1G auto-neg mode */
49 static int wol_port_mode = 5;
50
51 static int use_msi = 1;
52 module_param(use_msi, int, 0644);
53 MODULE_PARM_DESC(use_msi, "MSI interrupt (0=disabled, 1=enabled");
54
55 static int use_msi_x = 1;
56 module_param(use_msi_x, int, 0644);
57 MODULE_PARM_DESC(use_msi_x, "MSI-X interrupt (0=disabled, 1=enabled");
58
59 static int auto_fw_reset = AUTO_FW_RESET_ENABLED;
60 module_param(auto_fw_reset, int, 0644);
61 MODULE_PARM_DESC(auto_fw_reset, "Auto firmware reset (0=disabled, 1=enabled");
62
63 static int __devinit qlcnic_probe(struct pci_dev *pdev,
64                 const struct pci_device_id *ent);
65 static void __devexit qlcnic_remove(struct pci_dev *pdev);
66 static int qlcnic_open(struct net_device *netdev);
67 static int qlcnic_close(struct net_device *netdev);
68 static void qlcnic_tx_timeout(struct net_device *netdev);
69 static void qlcnic_tx_timeout_task(struct work_struct *work);
70 static void qlcnic_attach_work(struct work_struct *work);
71 static void qlcnic_fwinit_work(struct work_struct *work);
72 static void qlcnic_fw_poll_work(struct work_struct *work);
73 static void qlcnic_schedule_work(struct qlcnic_adapter *adapter,
74                 work_func_t func, int delay);
75 static void qlcnic_cancel_fw_work(struct qlcnic_adapter *adapter);
76 static int qlcnic_poll(struct napi_struct *napi, int budget);
77 #ifdef CONFIG_NET_POLL_CONTROLLER
78 static void qlcnic_poll_controller(struct net_device *netdev);
79 #endif
80
81 static void qlcnic_create_sysfs_entries(struct qlcnic_adapter *adapter);
82 static void qlcnic_remove_sysfs_entries(struct qlcnic_adapter *adapter);
83 static void qlcnic_create_diag_entries(struct qlcnic_adapter *adapter);
84 static void qlcnic_remove_diag_entries(struct qlcnic_adapter *adapter);
85
86 static void qlcnic_clr_all_drv_state(struct qlcnic_adapter *adapter);
87 static int qlcnic_can_start_firmware(struct qlcnic_adapter *adapter);
88
89 static irqreturn_t qlcnic_tmp_intr(int irq, void *data);
90 static irqreturn_t qlcnic_intr(int irq, void *data);
91 static irqreturn_t qlcnic_msi_intr(int irq, void *data);
92 static irqreturn_t qlcnic_msix_intr(int irq, void *data);
93
94 static struct net_device_stats *qlcnic_get_stats(struct net_device *netdev);
95 static void qlcnic_config_indev_addr(struct net_device *dev, unsigned long);
96
97 /*  PCI Device ID Table  */
98 #define ENTRY(device) \
99         {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, (device)), \
100         .class = PCI_CLASS_NETWORK_ETHERNET << 8, .class_mask = ~0}
101
102 #define PCI_DEVICE_ID_QLOGIC_QLE824X  0x8020
103
104 static DEFINE_PCI_DEVICE_TABLE(qlcnic_pci_tbl) = {
105         ENTRY(PCI_DEVICE_ID_QLOGIC_QLE824X),
106         {0,}
107 };
108
109 MODULE_DEVICE_TABLE(pci, qlcnic_pci_tbl);
110
111
112 void
113 qlcnic_update_cmd_producer(struct qlcnic_adapter *adapter,
114                 struct qlcnic_host_tx_ring *tx_ring)
115 {
116         writel(tx_ring->producer, tx_ring->crb_cmd_producer);
117
118         if (qlcnic_tx_avail(tx_ring) <= TX_STOP_THRESH) {
119                 netif_stop_queue(adapter->netdev);
120                 smp_mb();
121                 adapter->stats.xmit_off++;
122         }
123 }
124
125 static const u32 msi_tgt_status[8] = {
126         ISR_INT_TARGET_STATUS, ISR_INT_TARGET_STATUS_F1,
127         ISR_INT_TARGET_STATUS_F2, ISR_INT_TARGET_STATUS_F3,
128         ISR_INT_TARGET_STATUS_F4, ISR_INT_TARGET_STATUS_F5,
129         ISR_INT_TARGET_STATUS_F6, ISR_INT_TARGET_STATUS_F7
130 };
131
132 static const
133 struct qlcnic_legacy_intr_set legacy_intr[] = QLCNIC_LEGACY_INTR_CONFIG;
134
135 static inline void qlcnic_disable_int(struct qlcnic_host_sds_ring *sds_ring)
136 {
137         writel(0, sds_ring->crb_intr_mask);
138 }
139
140 static inline void qlcnic_enable_int(struct qlcnic_host_sds_ring *sds_ring)
141 {
142         struct qlcnic_adapter *adapter = sds_ring->adapter;
143
144         writel(0x1, sds_ring->crb_intr_mask);
145
146         if (!QLCNIC_IS_MSI_FAMILY(adapter))
147                 writel(0xfbff, adapter->tgt_mask_reg);
148 }
149
150 static int
151 qlcnic_alloc_sds_rings(struct qlcnic_recv_context *recv_ctx, int count)
152 {
153         int size = sizeof(struct qlcnic_host_sds_ring) * count;
154
155         recv_ctx->sds_rings = kzalloc(size, GFP_KERNEL);
156
157         return (recv_ctx->sds_rings == NULL);
158 }
159
160 static void
161 qlcnic_free_sds_rings(struct qlcnic_recv_context *recv_ctx)
162 {
163         if (recv_ctx->sds_rings != NULL)
164                 kfree(recv_ctx->sds_rings);
165
166         recv_ctx->sds_rings = NULL;
167 }
168
169 static int
170 qlcnic_napi_add(struct qlcnic_adapter *adapter, struct net_device *netdev)
171 {
172         int ring;
173         struct qlcnic_host_sds_ring *sds_ring;
174         struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx;
175
176         if (qlcnic_alloc_sds_rings(recv_ctx, adapter->max_sds_rings))
177                 return -ENOMEM;
178
179         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
180                 sds_ring = &recv_ctx->sds_rings[ring];
181                 netif_napi_add(netdev, &sds_ring->napi,
182                                 qlcnic_poll, QLCNIC_NETDEV_WEIGHT);
183         }
184
185         return 0;
186 }
187
188 static void
189 qlcnic_napi_del(struct qlcnic_adapter *adapter)
190 {
191         int ring;
192         struct qlcnic_host_sds_ring *sds_ring;
193         struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx;
194
195         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
196                 sds_ring = &recv_ctx->sds_rings[ring];
197                 netif_napi_del(&sds_ring->napi);
198         }
199
200         qlcnic_free_sds_rings(&adapter->recv_ctx);
201 }
202
203 static void
204 qlcnic_napi_enable(struct qlcnic_adapter *adapter)
205 {
206         int ring;
207         struct qlcnic_host_sds_ring *sds_ring;
208         struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx;
209
210         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
211                 sds_ring = &recv_ctx->sds_rings[ring];
212                 napi_enable(&sds_ring->napi);
213                 qlcnic_enable_int(sds_ring);
214         }
215 }
216
217 static void
218 qlcnic_napi_disable(struct qlcnic_adapter *adapter)
219 {
220         int ring;
221         struct qlcnic_host_sds_ring *sds_ring;
222         struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx;
223
224         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
225                 sds_ring = &recv_ctx->sds_rings[ring];
226                 qlcnic_disable_int(sds_ring);
227                 napi_synchronize(&sds_ring->napi);
228                 napi_disable(&sds_ring->napi);
229         }
230 }
231
232 static void qlcnic_clear_stats(struct qlcnic_adapter *adapter)
233 {
234         memset(&adapter->stats, 0, sizeof(adapter->stats));
235         return;
236 }
237
238 static int qlcnic_set_dma_mask(struct qlcnic_adapter *adapter)
239 {
240         struct pci_dev *pdev = adapter->pdev;
241         u64 mask, cmask;
242
243         adapter->pci_using_dac = 0;
244
245         mask = DMA_BIT_MASK(39);
246         cmask = mask;
247
248         if (pci_set_dma_mask(pdev, mask) == 0 &&
249                         pci_set_consistent_dma_mask(pdev, cmask) == 0) {
250                 adapter->pci_using_dac = 1;
251                 return 0;
252         }
253
254         return -EIO;
255 }
256
257 /* Update addressable range if firmware supports it */
258 static int
259 qlcnic_update_dma_mask(struct qlcnic_adapter *adapter)
260 {
261         int change, shift, err;
262         u64 mask, old_mask, old_cmask;
263         struct pci_dev *pdev = adapter->pdev;
264
265         change = 0;
266
267         shift = QLCRD32(adapter, CRB_DMA_SHIFT);
268         if (shift > 32)
269                 return 0;
270
271         if (shift > 9)
272                 change = 1;
273
274         if (change) {
275                 old_mask = pdev->dma_mask;
276                 old_cmask = pdev->dev.coherent_dma_mask;
277
278                 mask = DMA_BIT_MASK(32+shift);
279
280                 err = pci_set_dma_mask(pdev, mask);
281                 if (err)
282                         goto err_out;
283
284                 err = pci_set_consistent_dma_mask(pdev, mask);
285                 if (err)
286                         goto err_out;
287                 dev_info(&pdev->dev, "using %d-bit dma mask\n", 32+shift);
288         }
289
290         return 0;
291
292 err_out:
293         pci_set_dma_mask(pdev, old_mask);
294         pci_set_consistent_dma_mask(pdev, old_cmask);
295         return err;
296 }
297
298 static void qlcnic_set_port_mode(struct qlcnic_adapter *adapter)
299 {
300         u32 val, data;
301
302         val = adapter->ahw.board_type;
303         if ((val == QLCNIC_BRDTYPE_P3_HMEZ) ||
304                 (val == QLCNIC_BRDTYPE_P3_XG_LOM)) {
305                 if (port_mode == QLCNIC_PORT_MODE_802_3_AP) {
306                         data = QLCNIC_PORT_MODE_802_3_AP;
307                         QLCWR32(adapter, QLCNIC_PORT_MODE_ADDR, data);
308                 } else if (port_mode == QLCNIC_PORT_MODE_XG) {
309                         data = QLCNIC_PORT_MODE_XG;
310                         QLCWR32(adapter, QLCNIC_PORT_MODE_ADDR, data);
311                 } else if (port_mode == QLCNIC_PORT_MODE_AUTO_NEG_1G) {
312                         data = QLCNIC_PORT_MODE_AUTO_NEG_1G;
313                         QLCWR32(adapter, QLCNIC_PORT_MODE_ADDR, data);
314                 } else if (port_mode == QLCNIC_PORT_MODE_AUTO_NEG_XG) {
315                         data = QLCNIC_PORT_MODE_AUTO_NEG_XG;
316                         QLCWR32(adapter, QLCNIC_PORT_MODE_ADDR, data);
317                 } else {
318                         data = QLCNIC_PORT_MODE_AUTO_NEG;
319                         QLCWR32(adapter, QLCNIC_PORT_MODE_ADDR, data);
320                 }
321
322                 if ((wol_port_mode != QLCNIC_PORT_MODE_802_3_AP) &&
323                         (wol_port_mode != QLCNIC_PORT_MODE_XG) &&
324                         (wol_port_mode != QLCNIC_PORT_MODE_AUTO_NEG_1G) &&
325                         (wol_port_mode != QLCNIC_PORT_MODE_AUTO_NEG_XG)) {
326                         wol_port_mode = QLCNIC_PORT_MODE_AUTO_NEG;
327                 }
328                 QLCWR32(adapter, QLCNIC_WOL_PORT_MODE, wol_port_mode);
329         }
330 }
331
332 static void qlcnic_set_msix_bit(struct pci_dev *pdev, int enable)
333 {
334         u32 control;
335         int pos;
336
337         pos = pci_find_capability(pdev, PCI_CAP_ID_MSIX);
338         if (pos) {
339                 pci_read_config_dword(pdev, pos, &control);
340                 if (enable)
341                         control |= PCI_MSIX_FLAGS_ENABLE;
342                 else
343                         control = 0;
344                 pci_write_config_dword(pdev, pos, control);
345         }
346 }
347
348 static void qlcnic_init_msix_entries(struct qlcnic_adapter *adapter, int count)
349 {
350         int i;
351
352         for (i = 0; i < count; i++)
353                 adapter->msix_entries[i].entry = i;
354 }
355
356 static int
357 qlcnic_read_mac_addr(struct qlcnic_adapter *adapter)
358 {
359         int i;
360         unsigned char *p;
361         u64 mac_addr;
362         struct net_device *netdev = adapter->netdev;
363         struct pci_dev *pdev = adapter->pdev;
364
365         if (qlcnic_get_mac_addr(adapter, &mac_addr) != 0)
366                 return -EIO;
367
368         p = (unsigned char *)&mac_addr;
369         for (i = 0; i < 6; i++)
370                 netdev->dev_addr[i] = *(p + 5 - i);
371
372         memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
373         memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len);
374
375         /* set station address */
376
377         if (!is_valid_ether_addr(netdev->perm_addr))
378                 dev_warn(&pdev->dev, "Bad MAC address %pM.\n",
379                                         netdev->dev_addr);
380
381         return 0;
382 }
383
384 static int qlcnic_set_mac(struct net_device *netdev, void *p)
385 {
386         struct qlcnic_adapter *adapter = netdev_priv(netdev);
387         struct sockaddr *addr = p;
388
389         if (!is_valid_ether_addr(addr->sa_data))
390                 return -EINVAL;
391
392         if (netif_running(netdev)) {
393                 netif_device_detach(netdev);
394                 qlcnic_napi_disable(adapter);
395         }
396
397         memcpy(adapter->mac_addr, addr->sa_data, netdev->addr_len);
398         memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
399         qlcnic_set_multi(adapter->netdev);
400
401         if (netif_running(netdev)) {
402                 netif_device_attach(netdev);
403                 qlcnic_napi_enable(adapter);
404         }
405         return 0;
406 }
407
408 static const struct net_device_ops qlcnic_netdev_ops = {
409         .ndo_open          = qlcnic_open,
410         .ndo_stop          = qlcnic_close,
411         .ndo_start_xmit    = qlcnic_xmit_frame,
412         .ndo_get_stats     = qlcnic_get_stats,
413         .ndo_validate_addr = eth_validate_addr,
414         .ndo_set_multicast_list = qlcnic_set_multi,
415         .ndo_set_mac_address    = qlcnic_set_mac,
416         .ndo_change_mtu    = qlcnic_change_mtu,
417         .ndo_tx_timeout    = qlcnic_tx_timeout,
418 #ifdef CONFIG_NET_POLL_CONTROLLER
419         .ndo_poll_controller = qlcnic_poll_controller,
420 #endif
421 };
422
423 static void
424 qlcnic_setup_intr(struct qlcnic_adapter *adapter)
425 {
426         const struct qlcnic_legacy_intr_set *legacy_intrp;
427         struct pci_dev *pdev = adapter->pdev;
428         int err, num_msix;
429
430         if (adapter->rss_supported) {
431                 num_msix = (num_online_cpus() >= MSIX_ENTRIES_PER_ADAPTER) ?
432                         MSIX_ENTRIES_PER_ADAPTER : 2;
433         } else
434                 num_msix = 1;
435
436         adapter->max_sds_rings = 1;
437
438         adapter->flags &= ~(QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED);
439
440         legacy_intrp = &legacy_intr[adapter->ahw.pci_func];
441
442         adapter->int_vec_bit = legacy_intrp->int_vec_bit;
443         adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter,
444                         legacy_intrp->tgt_status_reg);
445         adapter->tgt_mask_reg = qlcnic_get_ioaddr(adapter,
446                         legacy_intrp->tgt_mask_reg);
447         adapter->isr_int_vec = qlcnic_get_ioaddr(adapter, ISR_INT_VECTOR);
448
449         adapter->crb_int_state_reg = qlcnic_get_ioaddr(adapter,
450                         ISR_INT_STATE_REG);
451
452         qlcnic_set_msix_bit(pdev, 0);
453
454         if (adapter->msix_supported) {
455
456                 qlcnic_init_msix_entries(adapter, num_msix);
457                 err = pci_enable_msix(pdev, adapter->msix_entries, num_msix);
458                 if (err == 0) {
459                         adapter->flags |= QLCNIC_MSIX_ENABLED;
460                         qlcnic_set_msix_bit(pdev, 1);
461
462                         if (adapter->rss_supported)
463                                 adapter->max_sds_rings = num_msix;
464
465                         dev_info(&pdev->dev, "using msi-x interrupts\n");
466                         return;
467                 }
468
469                 if (err > 0)
470                         pci_disable_msix(pdev);
471
472                 /* fall through for msi */
473         }
474
475         if (use_msi && !pci_enable_msi(pdev)) {
476                 adapter->flags |= QLCNIC_MSI_ENABLED;
477                 adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter,
478                                 msi_tgt_status[adapter->ahw.pci_func]);
479                 dev_info(&pdev->dev, "using msi interrupts\n");
480                 adapter->msix_entries[0].vector = pdev->irq;
481                 return;
482         }
483
484         dev_info(&pdev->dev, "using legacy interrupts\n");
485         adapter->msix_entries[0].vector = pdev->irq;
486 }
487
488 static void
489 qlcnic_teardown_intr(struct qlcnic_adapter *adapter)
490 {
491         if (adapter->flags & QLCNIC_MSIX_ENABLED)
492                 pci_disable_msix(adapter->pdev);
493         if (adapter->flags & QLCNIC_MSI_ENABLED)
494                 pci_disable_msi(adapter->pdev);
495 }
496
497 static void
498 qlcnic_cleanup_pci_map(struct qlcnic_adapter *adapter)
499 {
500         if (adapter->ahw.pci_base0 != NULL)
501                 iounmap(adapter->ahw.pci_base0);
502 }
503
504 static int
505 qlcnic_setup_pci_map(struct qlcnic_adapter *adapter)
506 {
507         void __iomem *mem_ptr0 = NULL;
508         resource_size_t mem_base;
509         unsigned long mem_len, pci_len0 = 0;
510
511         struct pci_dev *pdev = adapter->pdev;
512         int pci_func = adapter->ahw.pci_func;
513
514         /*
515          * Set the CRB window to invalid. If any register in window 0 is
516          * accessed it should set the window to 0 and then reset it to 1.
517          */
518         adapter->ahw.crb_win = -1;
519         adapter->ahw.ocm_win = -1;
520
521         /* remap phys address */
522         mem_base = pci_resource_start(pdev, 0); /* 0 is for BAR 0 */
523         mem_len = pci_resource_len(pdev, 0);
524
525         if (mem_len == QLCNIC_PCI_2MB_SIZE) {
526
527                 mem_ptr0 = pci_ioremap_bar(pdev, 0);
528                 if (mem_ptr0 == NULL) {
529                         dev_err(&pdev->dev, "failed to map PCI bar 0\n");
530                         return -EIO;
531                 }
532                 pci_len0 = mem_len;
533         } else {
534                 return -EIO;
535         }
536
537         dev_info(&pdev->dev, "%dMB memory map\n", (int)(mem_len>>20));
538
539         adapter->ahw.pci_base0 = mem_ptr0;
540         adapter->ahw.pci_len0 = pci_len0;
541
542         adapter->ahw.ocm_win_crb = qlcnic_get_ioaddr(adapter,
543                 QLCNIC_PCIX_PS_REG(PCIX_OCM_WINDOW_REG(pci_func)));
544
545         return 0;
546 }
547
548 static void get_brd_name(struct qlcnic_adapter *adapter, char *name)
549 {
550         struct pci_dev *pdev = adapter->pdev;
551         int i, found = 0;
552
553         for (i = 0; i < NUM_SUPPORTED_BOARDS; ++i) {
554                 if (qlcnic_boards[i].vendor == pdev->vendor &&
555                         qlcnic_boards[i].device == pdev->device &&
556                         qlcnic_boards[i].sub_vendor == pdev->subsystem_vendor &&
557                         qlcnic_boards[i].sub_device == pdev->subsystem_device) {
558                                 strcpy(name, qlcnic_boards[i].short_name);
559                                 found = 1;
560                                 break;
561                 }
562
563         }
564
565         if (!found)
566                 name = "Unknown";
567 }
568
569 static void
570 qlcnic_check_options(struct qlcnic_adapter *adapter)
571 {
572         u32 fw_major, fw_minor, fw_build;
573         char brd_name[QLCNIC_MAX_BOARD_NAME_LEN];
574         char serial_num[32];
575         int i, offset, val;
576         int *ptr32;
577         struct pci_dev *pdev = adapter->pdev;
578
579         adapter->driver_mismatch = 0;
580
581         ptr32 = (int *)&serial_num;
582         offset = QLCNIC_FW_SERIAL_NUM_OFFSET;
583         for (i = 0; i < 8; i++) {
584                 if (qlcnic_rom_fast_read(adapter, offset, &val) == -1) {
585                         dev_err(&pdev->dev, "error reading board info\n");
586                         adapter->driver_mismatch = 1;
587                         return;
588                 }
589                 ptr32[i] = cpu_to_le32(val);
590                 offset += sizeof(u32);
591         }
592
593         fw_major = QLCRD32(adapter, QLCNIC_FW_VERSION_MAJOR);
594         fw_minor = QLCRD32(adapter, QLCNIC_FW_VERSION_MINOR);
595         fw_build = QLCRD32(adapter, QLCNIC_FW_VERSION_SUB);
596
597         adapter->fw_version = QLCNIC_VERSION_CODE(fw_major, fw_minor, fw_build);
598
599         if (adapter->portnum == 0) {
600                 get_brd_name(adapter, brd_name);
601
602                 pr_info("%s: %s Board Chip rev 0x%x\n",
603                                 module_name(THIS_MODULE),
604                                 brd_name, adapter->ahw.revision_id);
605         }
606
607         if (adapter->fw_version < QLCNIC_VERSION_CODE(3, 4, 216)) {
608                 adapter->driver_mismatch = 1;
609                 dev_warn(&pdev->dev, "firmware version %d.%d.%d unsupported\n",
610                                 fw_major, fw_minor, fw_build);
611                 return;
612         }
613
614         i = QLCRD32(adapter, QLCNIC_SRE_MISC);
615         adapter->ahw.cut_through = (i & 0x8000) ? 1 : 0;
616
617         dev_info(&pdev->dev, "firmware v%d.%d.%d [%s]\n",
618                         fw_major, fw_minor, fw_build,
619                         adapter->ahw.cut_through ? "cut-through" : "legacy");
620
621         if (adapter->fw_version >= QLCNIC_VERSION_CODE(4, 0, 222))
622                 adapter->capabilities = QLCRD32(adapter, CRB_FW_CAPABILITIES_1);
623
624         adapter->flags &= ~QLCNIC_LRO_ENABLED;
625
626         if (adapter->ahw.port_type == QLCNIC_XGBE) {
627                 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_10G;
628                 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G;
629         } else if (adapter->ahw.port_type == QLCNIC_GBE) {
630                 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_1G;
631                 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G;
632         }
633
634         adapter->msix_supported = !!use_msi_x;
635         adapter->rss_supported = !!use_msi_x;
636
637         adapter->num_txd = MAX_CMD_DESCRIPTORS;
638
639         adapter->num_lro_rxd = 0;
640         adapter->max_rds_rings = 2;
641 }
642
643 static int
644 qlcnic_start_firmware(struct qlcnic_adapter *adapter)
645 {
646         int val, err, first_boot;
647
648         err = qlcnic_set_dma_mask(adapter);
649         if (err)
650                 return err;
651
652         if (!qlcnic_can_start_firmware(adapter))
653                 goto wait_init;
654
655         first_boot = QLCRD32(adapter, QLCNIC_CAM_RAM(0x1fc));
656         if (first_boot == 0x55555555)
657                 /* This is the first boot after power up */
658                 QLCWR32(adapter, QLCNIC_CAM_RAM(0x1fc), QLCNIC_BDINFO_MAGIC);
659
660         qlcnic_request_firmware(adapter);
661
662         err = qlcnic_need_fw_reset(adapter);
663         if (err < 0)
664                 goto err_out;
665         if (err == 0)
666                 goto wait_init;
667
668         if (first_boot != 0x55555555) {
669                 QLCWR32(adapter, CRB_CMDPEG_STATE, 0);
670                 qlcnic_pinit_from_rom(adapter);
671                 msleep(1);
672         }
673
674         QLCWR32(adapter, CRB_DMA_SHIFT, 0x55555555);
675         QLCWR32(adapter, QLCNIC_PEG_HALT_STATUS1, 0);
676         QLCWR32(adapter, QLCNIC_PEG_HALT_STATUS2, 0);
677
678         qlcnic_set_port_mode(adapter);
679
680         err = qlcnic_load_firmware(adapter);
681         if (err)
682                 goto err_out;
683
684         qlcnic_release_firmware(adapter);
685
686         val = (_QLCNIC_LINUX_MAJOR << 16)
687                 | ((_QLCNIC_LINUX_MINOR << 8))
688                 | (_QLCNIC_LINUX_SUBVERSION);
689         QLCWR32(adapter, CRB_DRIVER_VERSION, val);
690
691 wait_init:
692         /* Handshake with the card before we register the devices. */
693         err = qlcnic_phantom_init(adapter);
694         if (err)
695                 goto err_out;
696
697         QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_READY);
698
699         qlcnic_update_dma_mask(adapter);
700
701         qlcnic_check_options(adapter);
702
703         adapter->need_fw_reset = 0;
704
705         /* fall through and release firmware */
706
707 err_out:
708         qlcnic_release_firmware(adapter);
709         return err;
710 }
711
712 static int
713 qlcnic_request_irq(struct qlcnic_adapter *adapter)
714 {
715         irq_handler_t handler;
716         struct qlcnic_host_sds_ring *sds_ring;
717         int err, ring;
718
719         unsigned long flags = 0;
720         struct net_device *netdev = adapter->netdev;
721         struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx;
722
723         if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) {
724                 handler = qlcnic_tmp_intr;
725                 if (!QLCNIC_IS_MSI_FAMILY(adapter))
726                         flags |= IRQF_SHARED;
727
728         } else {
729                 if (adapter->flags & QLCNIC_MSIX_ENABLED)
730                         handler = qlcnic_msix_intr;
731                 else if (adapter->flags & QLCNIC_MSI_ENABLED)
732                         handler = qlcnic_msi_intr;
733                 else {
734                         flags |= IRQF_SHARED;
735                         handler = qlcnic_intr;
736                 }
737         }
738         adapter->irq = netdev->irq;
739
740         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
741                 sds_ring = &recv_ctx->sds_rings[ring];
742                 sprintf(sds_ring->name, "%s[%d]", netdev->name, ring);
743                 err = request_irq(sds_ring->irq, handler,
744                                   flags, sds_ring->name, sds_ring);
745                 if (err)
746                         return err;
747         }
748
749         return 0;
750 }
751
752 static void
753 qlcnic_free_irq(struct qlcnic_adapter *adapter)
754 {
755         int ring;
756         struct qlcnic_host_sds_ring *sds_ring;
757
758         struct qlcnic_recv_context *recv_ctx = &adapter->recv_ctx;
759
760         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
761                 sds_ring = &recv_ctx->sds_rings[ring];
762                 free_irq(sds_ring->irq, sds_ring);
763         }
764 }
765
766 static void
767 qlcnic_init_coalesce_defaults(struct qlcnic_adapter *adapter)
768 {
769         adapter->coal.flags = QLCNIC_INTR_DEFAULT;
770         adapter->coal.normal.data.rx_time_us =
771                 QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US;
772         adapter->coal.normal.data.rx_packets =
773                 QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS;
774         adapter->coal.normal.data.tx_time_us =
775                 QLCNIC_DEFAULT_INTR_COALESCE_TX_TIME_US;
776         adapter->coal.normal.data.tx_packets =
777                 QLCNIC_DEFAULT_INTR_COALESCE_TX_PACKETS;
778 }
779
780 static int
781 __qlcnic_up(struct qlcnic_adapter *adapter, struct net_device *netdev)
782 {
783         if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
784                 return -EIO;
785
786         qlcnic_set_multi(netdev);
787         qlcnic_fw_cmd_set_mtu(adapter, netdev->mtu);
788
789         adapter->ahw.linkup = 0;
790
791         if (adapter->max_sds_rings > 1)
792                 qlcnic_config_rss(adapter, 1);
793
794         qlcnic_config_intr_coalesce(adapter);
795
796         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO)
797                 qlcnic_config_hw_lro(adapter, QLCNIC_LRO_ENABLED);
798
799         qlcnic_napi_enable(adapter);
800
801         qlcnic_linkevent_request(adapter, 1);
802
803         set_bit(__QLCNIC_DEV_UP, &adapter->state);
804         return 0;
805 }
806
807 /* Usage: During resume and firmware recovery module.*/
808
809 static int
810 qlcnic_up(struct qlcnic_adapter *adapter, struct net_device *netdev)
811 {
812         int err = 0;
813
814         rtnl_lock();
815         if (netif_running(netdev))
816                 err = __qlcnic_up(adapter, netdev);
817         rtnl_unlock();
818
819         return err;
820 }
821
822 static void
823 __qlcnic_down(struct qlcnic_adapter *adapter, struct net_device *netdev)
824 {
825         if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
826                 return;
827
828         if (!test_and_clear_bit(__QLCNIC_DEV_UP, &adapter->state))
829                 return;
830
831         smp_mb();
832         spin_lock(&adapter->tx_clean_lock);
833         netif_carrier_off(netdev);
834         netif_tx_disable(netdev);
835
836         qlcnic_free_mac_list(adapter);
837
838         qlcnic_nic_set_promisc(adapter, QLCNIC_NIU_NON_PROMISC_MODE);
839
840         qlcnic_napi_disable(adapter);
841
842         qlcnic_release_tx_buffers(adapter);
843         spin_unlock(&adapter->tx_clean_lock);
844 }
845
846 /* Usage: During suspend and firmware recovery module */
847
848 static void
849 qlcnic_down(struct qlcnic_adapter *adapter, struct net_device *netdev)
850 {
851         rtnl_lock();
852         if (netif_running(netdev))
853                 __qlcnic_down(adapter, netdev);
854         rtnl_unlock();
855
856 }
857
858 static int
859 qlcnic_attach(struct qlcnic_adapter *adapter)
860 {
861         struct net_device *netdev = adapter->netdev;
862         struct pci_dev *pdev = adapter->pdev;
863         int err, ring;
864         struct qlcnic_host_rds_ring *rds_ring;
865
866         if (adapter->is_up == QLCNIC_ADAPTER_UP_MAGIC)
867                 return 0;
868
869         err = qlcnic_init_firmware(adapter);
870         if (err)
871                 return err;
872
873         err = qlcnic_napi_add(adapter, netdev);
874         if (err)
875                 return err;
876
877         err = qlcnic_alloc_sw_resources(adapter);
878         if (err) {
879                 dev_err(&pdev->dev, "Error in setting sw resources\n");
880                 return err;
881         }
882
883         err = qlcnic_alloc_hw_resources(adapter);
884         if (err) {
885                 dev_err(&pdev->dev, "Error in setting hw resources\n");
886                 goto err_out_free_sw;
887         }
888
889
890         for (ring = 0; ring < adapter->max_rds_rings; ring++) {
891                 rds_ring = &adapter->recv_ctx.rds_rings[ring];
892                 qlcnic_post_rx_buffers(adapter, ring, rds_ring);
893         }
894
895         err = qlcnic_request_irq(adapter);
896         if (err) {
897                 dev_err(&pdev->dev, "failed to setup interrupt\n");
898                 goto err_out_free_rxbuf;
899         }
900
901         qlcnic_init_coalesce_defaults(adapter);
902
903         qlcnic_create_sysfs_entries(adapter);
904
905         adapter->is_up = QLCNIC_ADAPTER_UP_MAGIC;
906         return 0;
907
908 err_out_free_rxbuf:
909         qlcnic_release_rx_buffers(adapter);
910         qlcnic_free_hw_resources(adapter);
911 err_out_free_sw:
912         qlcnic_free_sw_resources(adapter);
913         return err;
914 }
915
916 static void
917 qlcnic_detach(struct qlcnic_adapter *adapter)
918 {
919         if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
920                 return;
921
922         qlcnic_remove_sysfs_entries(adapter);
923
924         qlcnic_free_hw_resources(adapter);
925         qlcnic_release_rx_buffers(adapter);
926         qlcnic_free_irq(adapter);
927         qlcnic_napi_del(adapter);
928         qlcnic_free_sw_resources(adapter);
929
930         adapter->is_up = 0;
931 }
932
933 void qlcnic_diag_free_res(struct net_device *netdev, int max_sds_rings)
934 {
935         struct qlcnic_adapter *adapter = netdev_priv(netdev);
936         struct qlcnic_host_sds_ring *sds_ring;
937         int ring;
938
939         if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) {
940                 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
941                         sds_ring = &adapter->recv_ctx.sds_rings[ring];
942                         qlcnic_disable_int(sds_ring);
943                 }
944         }
945
946         qlcnic_detach(adapter);
947
948         adapter->diag_test = 0;
949         adapter->max_sds_rings = max_sds_rings;
950
951         if (qlcnic_attach(adapter))
952                 return;
953
954         if (netif_running(netdev))
955                 __qlcnic_up(adapter, netdev);
956
957         netif_device_attach(netdev);
958 }
959
960 int qlcnic_diag_alloc_res(struct net_device *netdev, int test)
961 {
962         struct qlcnic_adapter *adapter = netdev_priv(netdev);
963         struct qlcnic_host_sds_ring *sds_ring;
964         int ring;
965         int ret;
966
967         netif_device_detach(netdev);
968
969         if (netif_running(netdev))
970                 __qlcnic_down(adapter, netdev);
971
972         qlcnic_detach(adapter);
973
974         adapter->max_sds_rings = 1;
975         adapter->diag_test = test;
976
977         ret = qlcnic_attach(adapter);
978         if (ret)
979                 return ret;
980
981         if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) {
982                 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
983                         sds_ring = &adapter->recv_ctx.sds_rings[ring];
984                         qlcnic_enable_int(sds_ring);
985                 }
986         }
987
988         return 0;
989 }
990
991 int
992 qlcnic_reset_context(struct qlcnic_adapter *adapter)
993 {
994         int err = 0;
995         struct net_device *netdev = adapter->netdev;
996
997         if (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state))
998                 return -EBUSY;
999
1000         if (adapter->is_up == QLCNIC_ADAPTER_UP_MAGIC) {
1001
1002                 netif_device_detach(netdev);
1003
1004                 if (netif_running(netdev))
1005                         __qlcnic_down(adapter, netdev);
1006
1007                 qlcnic_detach(adapter);
1008
1009                 if (netif_running(netdev)) {
1010                         err = qlcnic_attach(adapter);
1011                         if (!err)
1012                                 err = __qlcnic_up(adapter, netdev);
1013
1014                         if (err)
1015                                 goto done;
1016                 }
1017
1018                 netif_device_attach(netdev);
1019         }
1020
1021 done:
1022         clear_bit(__QLCNIC_RESETTING, &adapter->state);
1023         return err;
1024 }
1025
1026 static int
1027 qlcnic_setup_netdev(struct qlcnic_adapter *adapter,
1028                 struct net_device *netdev)
1029 {
1030         int err;
1031         struct pci_dev *pdev = adapter->pdev;
1032
1033         adapter->rx_csum = 1;
1034         adapter->mc_enabled = 0;
1035         adapter->max_mc_count = 38;
1036
1037         netdev->netdev_ops         = &qlcnic_netdev_ops;
1038         netdev->watchdog_timeo     = 2*HZ;
1039
1040         qlcnic_change_mtu(netdev, netdev->mtu);
1041
1042         SET_ETHTOOL_OPS(netdev, &qlcnic_ethtool_ops);
1043
1044         netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);
1045         netdev->features |= (NETIF_F_GRO);
1046         netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO);
1047
1048         netdev->features |= (NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
1049         netdev->vlan_features |= (NETIF_F_IPV6_CSUM | NETIF_F_TSO6);
1050
1051         if (adapter->pci_using_dac) {
1052                 netdev->features |= NETIF_F_HIGHDMA;
1053                 netdev->vlan_features |= NETIF_F_HIGHDMA;
1054         }
1055
1056         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_FVLANTX)
1057                 netdev->features |= (NETIF_F_HW_VLAN_TX);
1058
1059         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO)
1060                 netdev->features |= NETIF_F_LRO;
1061
1062         netdev->irq = adapter->msix_entries[0].vector;
1063
1064         INIT_WORK(&adapter->tx_timeout_task, qlcnic_tx_timeout_task);
1065
1066         if (qlcnic_read_mac_addr(adapter))
1067                 dev_warn(&pdev->dev, "failed to read mac addr\n");
1068
1069         netif_carrier_off(netdev);
1070         netif_stop_queue(netdev);
1071
1072         err = register_netdev(netdev);
1073         if (err) {
1074                 dev_err(&pdev->dev, "failed to register net device\n");
1075                 return err;
1076         }
1077
1078         return 0;
1079 }
1080
1081 static int __devinit
1082 qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1083 {
1084         struct net_device *netdev = NULL;
1085         struct qlcnic_adapter *adapter = NULL;
1086         int err;
1087         int pci_func_id = PCI_FUNC(pdev->devfn);
1088         uint8_t revision_id;
1089
1090         err = pci_enable_device(pdev);
1091         if (err)
1092                 return err;
1093
1094         if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
1095                 err = -ENODEV;
1096                 goto err_out_disable_pdev;
1097         }
1098
1099         err = pci_request_regions(pdev, qlcnic_driver_name);
1100         if (err)
1101                 goto err_out_disable_pdev;
1102
1103         pci_set_master(pdev);
1104
1105         netdev = alloc_etherdev(sizeof(struct qlcnic_adapter));
1106         if (!netdev) {
1107                 dev_err(&pdev->dev, "failed to allocate net_device\n");
1108                 err = -ENOMEM;
1109                 goto err_out_free_res;
1110         }
1111
1112         SET_NETDEV_DEV(netdev, &pdev->dev);
1113
1114         adapter = netdev_priv(netdev);
1115         adapter->netdev  = netdev;
1116         adapter->pdev    = pdev;
1117         adapter->ahw.pci_func  = pci_func_id;
1118
1119         revision_id = pdev->revision;
1120         adapter->ahw.revision_id = revision_id;
1121
1122         rwlock_init(&adapter->ahw.crb_lock);
1123         mutex_init(&adapter->ahw.mem_lock);
1124
1125         spin_lock_init(&adapter->tx_clean_lock);
1126         INIT_LIST_HEAD(&adapter->mac_list);
1127
1128         err = qlcnic_setup_pci_map(adapter);
1129         if (err)
1130                 goto err_out_free_netdev;
1131
1132         /* This will be reset for mezz cards  */
1133         adapter->portnum = pci_func_id;
1134
1135         err = qlcnic_get_board_info(adapter);
1136         if (err) {
1137                 dev_err(&pdev->dev, "Error getting board config info.\n");
1138                 goto err_out_iounmap;
1139         }
1140
1141
1142         err = qlcnic_start_firmware(adapter);
1143         if (err)
1144                 goto err_out_decr_ref;
1145
1146         /*
1147          * See if the firmware gave us a virtual-physical port mapping.
1148          */
1149         adapter->physical_port = adapter->portnum;
1150
1151         qlcnic_clear_stats(adapter);
1152
1153         qlcnic_setup_intr(adapter);
1154
1155         err = qlcnic_setup_netdev(adapter, netdev);
1156         if (err)
1157                 goto err_out_disable_msi;
1158
1159         pci_set_drvdata(pdev, adapter);
1160
1161         qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY);
1162
1163         switch (adapter->ahw.port_type) {
1164         case QLCNIC_GBE:
1165                 dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n",
1166                                 adapter->netdev->name);
1167                 break;
1168         case QLCNIC_XGBE:
1169                 dev_info(&adapter->pdev->dev, "%s: XGbE port initialized\n",
1170                                 adapter->netdev->name);
1171                 break;
1172         }
1173
1174         qlcnic_create_diag_entries(adapter);
1175
1176         return 0;
1177
1178 err_out_disable_msi:
1179         qlcnic_teardown_intr(adapter);
1180
1181 err_out_decr_ref:
1182         qlcnic_clr_all_drv_state(adapter);
1183
1184 err_out_iounmap:
1185         qlcnic_cleanup_pci_map(adapter);
1186
1187 err_out_free_netdev:
1188         free_netdev(netdev);
1189
1190 err_out_free_res:
1191         pci_release_regions(pdev);
1192
1193 err_out_disable_pdev:
1194         pci_set_drvdata(pdev, NULL);
1195         pci_disable_device(pdev);
1196         return err;
1197 }
1198
1199 static void __devexit qlcnic_remove(struct pci_dev *pdev)
1200 {
1201         struct qlcnic_adapter *adapter;
1202         struct net_device *netdev;
1203
1204         adapter = pci_get_drvdata(pdev);
1205         if (adapter == NULL)
1206                 return;
1207
1208         netdev = adapter->netdev;
1209
1210         qlcnic_cancel_fw_work(adapter);
1211
1212         unregister_netdev(netdev);
1213
1214         cancel_work_sync(&adapter->tx_timeout_task);
1215
1216         qlcnic_detach(adapter);
1217
1218         qlcnic_clr_all_drv_state(adapter);
1219
1220         clear_bit(__QLCNIC_RESETTING, &adapter->state);
1221
1222         qlcnic_teardown_intr(adapter);
1223
1224         qlcnic_remove_diag_entries(adapter);
1225
1226         qlcnic_cleanup_pci_map(adapter);
1227
1228         qlcnic_release_firmware(adapter);
1229
1230         pci_release_regions(pdev);
1231         pci_disable_device(pdev);
1232         pci_set_drvdata(pdev, NULL);
1233
1234         free_netdev(netdev);
1235 }
1236 static int __qlcnic_shutdown(struct pci_dev *pdev)
1237 {
1238         struct qlcnic_adapter *adapter = pci_get_drvdata(pdev);
1239         struct net_device *netdev = adapter->netdev;
1240         int retval;
1241
1242         netif_device_detach(netdev);
1243
1244         qlcnic_cancel_fw_work(adapter);
1245
1246         if (netif_running(netdev))
1247                 qlcnic_down(adapter, netdev);
1248
1249         cancel_work_sync(&adapter->tx_timeout_task);
1250
1251         qlcnic_detach(adapter);
1252
1253         qlcnic_clr_all_drv_state(adapter);
1254
1255         clear_bit(__QLCNIC_RESETTING, &adapter->state);
1256
1257         retval = pci_save_state(pdev);
1258         if (retval)
1259                 return retval;
1260
1261         if (qlcnic_wol_supported(adapter)) {
1262                 pci_enable_wake(pdev, PCI_D3cold, 1);
1263                 pci_enable_wake(pdev, PCI_D3hot, 1);
1264         }
1265
1266         return 0;
1267 }
1268
1269 static void qlcnic_shutdown(struct pci_dev *pdev)
1270 {
1271         if (__qlcnic_shutdown(pdev))
1272                 return;
1273
1274         pci_disable_device(pdev);
1275 }
1276
1277 #ifdef CONFIG_PM
1278 static int
1279 qlcnic_suspend(struct pci_dev *pdev, pm_message_t state)
1280 {
1281         int retval;
1282
1283         retval = __qlcnic_shutdown(pdev);
1284         if (retval)
1285                 return retval;
1286
1287         pci_set_power_state(pdev, pci_choose_state(pdev, state));
1288         return 0;
1289 }
1290
1291 static int
1292 qlcnic_resume(struct pci_dev *pdev)
1293 {
1294         struct qlcnic_adapter *adapter = pci_get_drvdata(pdev);
1295         struct net_device *netdev = adapter->netdev;
1296         int err;
1297
1298         err = pci_enable_device(pdev);
1299         if (err)
1300                 return err;
1301
1302         pci_set_power_state(pdev, PCI_D0);
1303         pci_set_master(pdev);
1304         pci_restore_state(pdev);
1305
1306         adapter->ahw.crb_win = -1;
1307         adapter->ahw.ocm_win = -1;
1308
1309         err = qlcnic_start_firmware(adapter);
1310         if (err) {
1311                 dev_err(&pdev->dev, "failed to start firmware\n");
1312                 return err;
1313         }
1314
1315         if (netif_running(netdev)) {
1316                 err = qlcnic_attach(adapter);
1317                 if (err)
1318                         goto err_out;
1319
1320                 err = qlcnic_up(adapter, netdev);
1321                 if (err)
1322                         goto err_out_detach;
1323
1324
1325                 qlcnic_config_indev_addr(netdev, NETDEV_UP);
1326         }
1327
1328         netif_device_attach(netdev);
1329         qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY);
1330         return 0;
1331
1332 err_out_detach:
1333         qlcnic_detach(adapter);
1334 err_out:
1335         qlcnic_clr_all_drv_state(adapter);
1336         return err;
1337 }
1338 #endif
1339
1340 static int qlcnic_open(struct net_device *netdev)
1341 {
1342         struct qlcnic_adapter *adapter = netdev_priv(netdev);
1343         int err;
1344
1345         if (adapter->driver_mismatch)
1346                 return -EIO;
1347
1348         err = qlcnic_attach(adapter);
1349         if (err)
1350                 return err;
1351
1352         err = __qlcnic_up(adapter, netdev);
1353         if (err)
1354                 goto err_out;
1355
1356         netif_start_queue(netdev);
1357
1358         return 0;
1359
1360 err_out:
1361         qlcnic_detach(adapter);
1362         return err;
1363 }
1364
1365 /*
1366  * qlcnic_close - Disables a network interface entry point
1367  */
1368 static int qlcnic_close(struct net_device *netdev)
1369 {
1370         struct qlcnic_adapter *adapter = netdev_priv(netdev);
1371
1372         __qlcnic_down(adapter, netdev);
1373         return 0;
1374 }
1375
1376 static void
1377 qlcnic_tso_check(struct net_device *netdev,
1378                 struct qlcnic_host_tx_ring *tx_ring,
1379                 struct cmd_desc_type0 *first_desc,
1380                 struct sk_buff *skb)
1381 {
1382         u8 opcode = TX_ETHER_PKT;
1383         __be16 protocol = skb->protocol;
1384         u16 flags = 0, vid = 0;
1385         u32 producer;
1386         int copied, offset, copy_len, hdr_len = 0, tso = 0, vlan_oob = 0;
1387         struct cmd_desc_type0 *hwdesc;
1388         struct vlan_ethhdr *vh;
1389         struct qlcnic_adapter *adapter = netdev_priv(netdev);
1390
1391         if (protocol == cpu_to_be16(ETH_P_8021Q)) {
1392
1393                 vh = (struct vlan_ethhdr *)skb->data;
1394                 protocol = vh->h_vlan_encapsulated_proto;
1395                 flags = FLAGS_VLAN_TAGGED;
1396
1397         } else if (vlan_tx_tag_present(skb)) {
1398
1399                 flags = FLAGS_VLAN_OOB;
1400                 vid = vlan_tx_tag_get(skb);
1401                 qlcnic_set_tx_vlan_tci(first_desc, vid);
1402                 vlan_oob = 1;
1403         }
1404
1405         if ((netdev->features & (NETIF_F_TSO | NETIF_F_TSO6)) &&
1406                         skb_shinfo(skb)->gso_size > 0) {
1407
1408                 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
1409
1410                 first_desc->mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
1411                 first_desc->total_hdr_length = hdr_len;
1412                 if (vlan_oob) {
1413                         first_desc->total_hdr_length += VLAN_HLEN;
1414                         first_desc->tcp_hdr_offset = VLAN_HLEN;
1415                         first_desc->ip_hdr_offset = VLAN_HLEN;
1416                         /* Only in case of TSO on vlan device */
1417                         flags |= FLAGS_VLAN_TAGGED;
1418                 }
1419
1420                 opcode = (protocol == cpu_to_be16(ETH_P_IPV6)) ?
1421                                 TX_TCP_LSO6 : TX_TCP_LSO;
1422                 tso = 1;
1423
1424         } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
1425                 u8 l4proto;
1426
1427                 if (protocol == cpu_to_be16(ETH_P_IP)) {
1428                         l4proto = ip_hdr(skb)->protocol;
1429
1430                         if (l4proto == IPPROTO_TCP)
1431                                 opcode = TX_TCP_PKT;
1432                         else if (l4proto == IPPROTO_UDP)
1433                                 opcode = TX_UDP_PKT;
1434                 } else if (protocol == cpu_to_be16(ETH_P_IPV6)) {
1435                         l4proto = ipv6_hdr(skb)->nexthdr;
1436
1437                         if (l4proto == IPPROTO_TCP)
1438                                 opcode = TX_TCPV6_PKT;
1439                         else if (l4proto == IPPROTO_UDP)
1440                                 opcode = TX_UDPV6_PKT;
1441                 }
1442         }
1443
1444         first_desc->tcp_hdr_offset += skb_transport_offset(skb);
1445         first_desc->ip_hdr_offset += skb_network_offset(skb);
1446         qlcnic_set_tx_flags_opcode(first_desc, flags, opcode);
1447
1448         if (!tso)
1449                 return;
1450
1451         /* For LSO, we need to copy the MAC/IP/TCP headers into
1452          * the descriptor ring
1453          */
1454         producer = tx_ring->producer;
1455         copied = 0;
1456         offset = 2;
1457
1458         if (vlan_oob) {
1459                 /* Create a TSO vlan header template for firmware */
1460
1461                 hwdesc = &tx_ring->desc_head[producer];
1462                 tx_ring->cmd_buf_arr[producer].skb = NULL;
1463
1464                 copy_len = min((int)sizeof(struct cmd_desc_type0) - offset,
1465                                 hdr_len + VLAN_HLEN);
1466
1467                 vh = (struct vlan_ethhdr *)((char *)hwdesc + 2);
1468                 skb_copy_from_linear_data(skb, vh, 12);
1469                 vh->h_vlan_proto = htons(ETH_P_8021Q);
1470                 vh->h_vlan_TCI = htons(vid);
1471                 skb_copy_from_linear_data_offset(skb, 12,
1472                                 (char *)vh + 16, copy_len - 16);
1473
1474                 copied = copy_len - VLAN_HLEN;
1475                 offset = 0;
1476
1477                 producer = get_next_index(producer, tx_ring->num_desc);
1478         }
1479
1480         while (copied < hdr_len) {
1481
1482                 copy_len = min((int)sizeof(struct cmd_desc_type0) - offset,
1483                                 (hdr_len - copied));
1484
1485                 hwdesc = &tx_ring->desc_head[producer];
1486                 tx_ring->cmd_buf_arr[producer].skb = NULL;
1487
1488                 skb_copy_from_linear_data_offset(skb, copied,
1489                                  (char *)hwdesc + offset, copy_len);
1490
1491                 copied += copy_len;
1492                 offset = 0;
1493
1494                 producer = get_next_index(producer, tx_ring->num_desc);
1495         }
1496
1497         tx_ring->producer = producer;
1498         barrier();
1499         adapter->stats.lso_frames++;
1500 }
1501
1502 static int
1503 qlcnic_map_tx_skb(struct pci_dev *pdev,
1504                 struct sk_buff *skb, struct qlcnic_cmd_buffer *pbuf)
1505 {
1506         struct qlcnic_skb_frag *nf;
1507         struct skb_frag_struct *frag;
1508         int i, nr_frags;
1509         dma_addr_t map;
1510
1511         nr_frags = skb_shinfo(skb)->nr_frags;
1512         nf = &pbuf->frag_array[0];
1513
1514         map = pci_map_single(pdev, skb->data,
1515                         skb_headlen(skb), PCI_DMA_TODEVICE);
1516         if (pci_dma_mapping_error(pdev, map))
1517                 goto out_err;
1518
1519         nf->dma = map;
1520         nf->length = skb_headlen(skb);
1521
1522         for (i = 0; i < nr_frags; i++) {
1523                 frag = &skb_shinfo(skb)->frags[i];
1524                 nf = &pbuf->frag_array[i+1];
1525
1526                 map = pci_map_page(pdev, frag->page, frag->page_offset,
1527                                 frag->size, PCI_DMA_TODEVICE);
1528                 if (pci_dma_mapping_error(pdev, map))
1529                         goto unwind;
1530
1531                 nf->dma = map;
1532                 nf->length = frag->size;
1533         }
1534
1535         return 0;
1536
1537 unwind:
1538         while (--i >= 0) {
1539                 nf = &pbuf->frag_array[i+1];
1540                 pci_unmap_page(pdev, nf->dma, nf->length, PCI_DMA_TODEVICE);
1541         }
1542
1543         nf = &pbuf->frag_array[0];
1544         pci_unmap_single(pdev, nf->dma, skb_headlen(skb), PCI_DMA_TODEVICE);
1545
1546 out_err:
1547         return -ENOMEM;
1548 }
1549
1550 static inline void
1551 qlcnic_clear_cmddesc(u64 *desc)
1552 {
1553         desc[0] = 0ULL;
1554         desc[2] = 0ULL;
1555 }
1556
1557 netdev_tx_t
1558 qlcnic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
1559 {
1560         struct qlcnic_adapter *adapter = netdev_priv(netdev);
1561         struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring;
1562         struct qlcnic_cmd_buffer *pbuf;
1563         struct qlcnic_skb_frag *buffrag;
1564         struct cmd_desc_type0 *hwdesc, *first_desc;
1565         struct pci_dev *pdev;
1566         int i, k;
1567
1568         u32 producer;
1569         int frag_count, no_of_desc;
1570         u32 num_txd = tx_ring->num_desc;
1571
1572         frag_count = skb_shinfo(skb)->nr_frags + 1;
1573
1574         /* 4 fragments per cmd des */
1575         no_of_desc = (frag_count + 3) >> 2;
1576
1577         if (unlikely(no_of_desc + 2 > qlcnic_tx_avail(tx_ring))) {
1578                 netif_stop_queue(netdev);
1579                 adapter->stats.xmit_off++;
1580                 return NETDEV_TX_BUSY;
1581         }
1582
1583         producer = tx_ring->producer;
1584         pbuf = &tx_ring->cmd_buf_arr[producer];
1585
1586         pdev = adapter->pdev;
1587
1588         if (qlcnic_map_tx_skb(pdev, skb, pbuf))
1589                 goto drop_packet;
1590
1591         pbuf->skb = skb;
1592         pbuf->frag_count = frag_count;
1593
1594         first_desc = hwdesc = &tx_ring->desc_head[producer];
1595         qlcnic_clear_cmddesc((u64 *)hwdesc);
1596
1597         qlcnic_set_tx_frags_len(first_desc, frag_count, skb->len);
1598         qlcnic_set_tx_port(first_desc, adapter->portnum);
1599
1600         for (i = 0; i < frag_count; i++) {
1601
1602                 k = i % 4;
1603
1604                 if ((k == 0) && (i > 0)) {
1605                         /* move to next desc.*/
1606                         producer = get_next_index(producer, num_txd);
1607                         hwdesc = &tx_ring->desc_head[producer];
1608                         qlcnic_clear_cmddesc((u64 *)hwdesc);
1609                         tx_ring->cmd_buf_arr[producer].skb = NULL;
1610                 }
1611
1612                 buffrag = &pbuf->frag_array[i];
1613
1614                 hwdesc->buffer_length[k] = cpu_to_le16(buffrag->length);
1615                 switch (k) {
1616                 case 0:
1617                         hwdesc->addr_buffer1 = cpu_to_le64(buffrag->dma);
1618                         break;
1619                 case 1:
1620                         hwdesc->addr_buffer2 = cpu_to_le64(buffrag->dma);
1621                         break;
1622                 case 2:
1623                         hwdesc->addr_buffer3 = cpu_to_le64(buffrag->dma);
1624                         break;
1625                 case 3:
1626                         hwdesc->addr_buffer4 = cpu_to_le64(buffrag->dma);
1627                         break;
1628                 }
1629         }
1630
1631         tx_ring->producer = get_next_index(producer, num_txd);
1632
1633         qlcnic_tso_check(netdev, tx_ring, first_desc, skb);
1634
1635         qlcnic_update_cmd_producer(adapter, tx_ring);
1636
1637         adapter->stats.txbytes += skb->len;
1638         adapter->stats.xmitcalled++;
1639
1640         return NETDEV_TX_OK;
1641
1642 drop_packet:
1643         adapter->stats.txdropped++;
1644         dev_kfree_skb_any(skb);
1645         return NETDEV_TX_OK;
1646 }
1647
1648 static int qlcnic_check_temp(struct qlcnic_adapter *adapter)
1649 {
1650         struct net_device *netdev = adapter->netdev;
1651         u32 temp, temp_state, temp_val;
1652         int rv = 0;
1653
1654         temp = QLCRD32(adapter, CRB_TEMP_STATE);
1655
1656         temp_state = qlcnic_get_temp_state(temp);
1657         temp_val = qlcnic_get_temp_val(temp);
1658
1659         if (temp_state == QLCNIC_TEMP_PANIC) {
1660                 dev_err(&netdev->dev,
1661                        "Device temperature %d degrees C exceeds"
1662                        " maximum allowed. Hardware has been shut down.\n",
1663                        temp_val);
1664                 rv = 1;
1665         } else if (temp_state == QLCNIC_TEMP_WARN) {
1666                 if (adapter->temp == QLCNIC_TEMP_NORMAL) {
1667                         dev_err(&netdev->dev,
1668                                "Device temperature %d degrees C "
1669                                "exceeds operating range."
1670                                " Immediate action needed.\n",
1671                                temp_val);
1672                 }
1673         } else {
1674                 if (adapter->temp == QLCNIC_TEMP_WARN) {
1675                         dev_info(&netdev->dev,
1676                                "Device temperature is now %d degrees C"
1677                                " in normal range.\n", temp_val);
1678                 }
1679         }
1680         adapter->temp = temp_state;
1681         return rv;
1682 }
1683
1684 void qlcnic_advert_link_change(struct qlcnic_adapter *adapter, int linkup)
1685 {
1686         struct net_device *netdev = adapter->netdev;
1687
1688         if (adapter->ahw.linkup && !linkup) {
1689                 dev_info(&netdev->dev, "NIC Link is down\n");
1690                 adapter->ahw.linkup = 0;
1691                 if (netif_running(netdev)) {
1692                         netif_carrier_off(netdev);
1693                         netif_stop_queue(netdev);
1694                 }
1695         } else if (!adapter->ahw.linkup && linkup) {
1696                 dev_info(&netdev->dev, "NIC Link is up\n");
1697                 adapter->ahw.linkup = 1;
1698                 if (netif_running(netdev)) {
1699                         netif_carrier_on(netdev);
1700                         netif_wake_queue(netdev);
1701                 }
1702         }
1703 }
1704
1705 static void qlcnic_tx_timeout(struct net_device *netdev)
1706 {
1707         struct qlcnic_adapter *adapter = netdev_priv(netdev);
1708
1709         if (test_bit(__QLCNIC_RESETTING, &adapter->state))
1710                 return;
1711
1712         dev_err(&netdev->dev, "transmit timeout, resetting.\n");
1713         schedule_work(&adapter->tx_timeout_task);
1714 }
1715
1716 static void qlcnic_tx_timeout_task(struct work_struct *work)
1717 {
1718         struct qlcnic_adapter *adapter =
1719                 container_of(work, struct qlcnic_adapter, tx_timeout_task);
1720
1721         if (!netif_running(adapter->netdev))
1722                 return;
1723
1724         if (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state))
1725                 return;
1726
1727         if (++adapter->tx_timeo_cnt >= QLCNIC_MAX_TX_TIMEOUTS)
1728                 goto request_reset;
1729
1730         clear_bit(__QLCNIC_RESETTING, &adapter->state);
1731         if (!qlcnic_reset_context(adapter)) {
1732                 adapter->netdev->trans_start = jiffies;
1733                 return;
1734
1735                 /* context reset failed, fall through for fw reset */
1736         }
1737
1738 request_reset:
1739         adapter->need_fw_reset = 1;
1740         clear_bit(__QLCNIC_RESETTING, &adapter->state);
1741 }
1742
1743 static struct net_device_stats *qlcnic_get_stats(struct net_device *netdev)
1744 {
1745         struct qlcnic_adapter *adapter = netdev_priv(netdev);
1746         struct net_device_stats *stats = &netdev->stats;
1747
1748         memset(stats, 0, sizeof(*stats));
1749
1750         stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts;
1751         stats->tx_packets = adapter->stats.xmitfinished;
1752         stats->rx_bytes = adapter->stats.rxbytes;
1753         stats->tx_bytes = adapter->stats.txbytes;
1754         stats->rx_dropped = adapter->stats.rxdropped;
1755         stats->tx_dropped = adapter->stats.txdropped;
1756
1757         return stats;
1758 }
1759
1760 static irqreturn_t qlcnic_clear_legacy_intr(struct qlcnic_adapter *adapter)
1761 {
1762         u32 status;
1763
1764         status = readl(adapter->isr_int_vec);
1765
1766         if (!(status & adapter->int_vec_bit))
1767                 return IRQ_NONE;
1768
1769         /* check interrupt state machine, to be sure */
1770         status = readl(adapter->crb_int_state_reg);
1771         if (!ISR_LEGACY_INT_TRIGGERED(status))
1772                 return IRQ_NONE;
1773
1774         writel(0xffffffff, adapter->tgt_status_reg);
1775         /* read twice to ensure write is flushed */
1776         readl(adapter->isr_int_vec);
1777         readl(adapter->isr_int_vec);
1778
1779         return IRQ_HANDLED;
1780 }
1781
1782 static irqreturn_t qlcnic_tmp_intr(int irq, void *data)
1783 {
1784         struct qlcnic_host_sds_ring *sds_ring = data;
1785         struct qlcnic_adapter *adapter = sds_ring->adapter;
1786
1787         if (adapter->flags & QLCNIC_MSIX_ENABLED)
1788                 goto done;
1789         else if (adapter->flags & QLCNIC_MSI_ENABLED) {
1790                 writel(0xffffffff, adapter->tgt_status_reg);
1791                 goto done;
1792         }
1793
1794         if (qlcnic_clear_legacy_intr(adapter) == IRQ_NONE)
1795                 return IRQ_NONE;
1796
1797 done:
1798         adapter->diag_cnt++;
1799         qlcnic_enable_int(sds_ring);
1800         return IRQ_HANDLED;
1801 }
1802
1803 static irqreturn_t qlcnic_intr(int irq, void *data)
1804 {
1805         struct qlcnic_host_sds_ring *sds_ring = data;
1806         struct qlcnic_adapter *adapter = sds_ring->adapter;
1807
1808         if (qlcnic_clear_legacy_intr(adapter) == IRQ_NONE)
1809                 return IRQ_NONE;
1810
1811         napi_schedule(&sds_ring->napi);
1812
1813         return IRQ_HANDLED;
1814 }
1815
1816 static irqreturn_t qlcnic_msi_intr(int irq, void *data)
1817 {
1818         struct qlcnic_host_sds_ring *sds_ring = data;
1819         struct qlcnic_adapter *adapter = sds_ring->adapter;
1820
1821         /* clear interrupt */
1822         writel(0xffffffff, adapter->tgt_status_reg);
1823
1824         napi_schedule(&sds_ring->napi);
1825         return IRQ_HANDLED;
1826 }
1827
1828 static irqreturn_t qlcnic_msix_intr(int irq, void *data)
1829 {
1830         struct qlcnic_host_sds_ring *sds_ring = data;
1831
1832         napi_schedule(&sds_ring->napi);
1833         return IRQ_HANDLED;
1834 }
1835
1836 static int qlcnic_process_cmd_ring(struct qlcnic_adapter *adapter)
1837 {
1838         u32 sw_consumer, hw_consumer;
1839         int count = 0, i;
1840         struct qlcnic_cmd_buffer *buffer;
1841         struct pci_dev *pdev = adapter->pdev;
1842         struct net_device *netdev = adapter->netdev;
1843         struct qlcnic_skb_frag *frag;
1844         int done;
1845         struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring;
1846
1847         if (!spin_trylock(&adapter->tx_clean_lock))
1848                 return 1;
1849
1850         sw_consumer = tx_ring->sw_consumer;
1851         hw_consumer = le32_to_cpu(*(tx_ring->hw_consumer));
1852
1853         while (sw_consumer != hw_consumer) {
1854                 buffer = &tx_ring->cmd_buf_arr[sw_consumer];
1855                 if (buffer->skb) {
1856                         frag = &buffer->frag_array[0];
1857                         pci_unmap_single(pdev, frag->dma, frag->length,
1858                                          PCI_DMA_TODEVICE);
1859                         frag->dma = 0ULL;
1860                         for (i = 1; i < buffer->frag_count; i++) {
1861                                 frag++;
1862                                 pci_unmap_page(pdev, frag->dma, frag->length,
1863                                                PCI_DMA_TODEVICE);
1864                                 frag->dma = 0ULL;
1865                         }
1866
1867                         adapter->stats.xmitfinished++;
1868                         dev_kfree_skb_any(buffer->skb);
1869                         buffer->skb = NULL;
1870                 }
1871
1872                 sw_consumer = get_next_index(sw_consumer, tx_ring->num_desc);
1873                 if (++count >= MAX_STATUS_HANDLE)
1874                         break;
1875         }
1876
1877         if (count && netif_running(netdev)) {
1878                 tx_ring->sw_consumer = sw_consumer;
1879
1880                 smp_mb();
1881
1882                 if (netif_queue_stopped(netdev) && netif_carrier_ok(netdev)) {
1883                         __netif_tx_lock(tx_ring->txq, smp_processor_id());
1884                         if (qlcnic_tx_avail(tx_ring) > TX_STOP_THRESH) {
1885                                 netif_wake_queue(netdev);
1886                                 adapter->tx_timeo_cnt = 0;
1887                                 adapter->stats.xmit_on++;
1888                         }
1889                         __netif_tx_unlock(tx_ring->txq);
1890                 }
1891         }
1892         /*
1893          * If everything is freed up to consumer then check if the ring is full
1894          * If the ring is full then check if more needs to be freed and
1895          * schedule the call back again.
1896          *
1897          * This happens when there are 2 CPUs. One could be freeing and the
1898          * other filling it. If the ring is full when we get out of here and
1899          * the card has already interrupted the host then the host can miss the
1900          * interrupt.
1901          *
1902          * There is still a possible race condition and the host could miss an
1903          * interrupt. The card has to take care of this.
1904          */
1905         hw_consumer = le32_to_cpu(*(tx_ring->hw_consumer));
1906         done = (sw_consumer == hw_consumer);
1907         spin_unlock(&adapter->tx_clean_lock);
1908
1909         return done;
1910 }
1911
1912 static int qlcnic_poll(struct napi_struct *napi, int budget)
1913 {
1914         struct qlcnic_host_sds_ring *sds_ring =
1915                 container_of(napi, struct qlcnic_host_sds_ring, napi);
1916
1917         struct qlcnic_adapter *adapter = sds_ring->adapter;
1918
1919         int tx_complete;
1920         int work_done;
1921
1922         tx_complete = qlcnic_process_cmd_ring(adapter);
1923
1924         work_done = qlcnic_process_rcv_ring(sds_ring, budget);
1925
1926         if ((work_done < budget) && tx_complete) {
1927                 napi_complete(&sds_ring->napi);
1928                 if (test_bit(__QLCNIC_DEV_UP, &adapter->state))
1929                         qlcnic_enable_int(sds_ring);
1930         }
1931
1932         return work_done;
1933 }
1934
1935 #ifdef CONFIG_NET_POLL_CONTROLLER
1936 static void qlcnic_poll_controller(struct net_device *netdev)
1937 {
1938         struct qlcnic_adapter *adapter = netdev_priv(netdev);
1939         disable_irq(adapter->irq);
1940         qlcnic_intr(adapter->irq, adapter);
1941         enable_irq(adapter->irq);
1942 }
1943 #endif
1944
1945 static void
1946 qlcnic_set_drv_state(struct qlcnic_adapter *adapter, int state)
1947 {
1948         u32  val;
1949
1950         WARN_ON(state != QLCNIC_DEV_NEED_RESET &&
1951                         state != QLCNIC_DEV_NEED_QUISCENT);
1952
1953         if (qlcnic_api_lock(adapter))
1954                 return ;
1955
1956         val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
1957
1958         if (state == QLCNIC_DEV_NEED_RESET)
1959                 val |= ((u32)0x1 << (adapter->portnum * 4));
1960         else if (state == QLCNIC_DEV_NEED_QUISCENT)
1961                 val |= ((u32)0x1 << ((adapter->portnum * 4) + 1));
1962
1963         QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
1964
1965         qlcnic_api_unlock(adapter);
1966 }
1967
1968 static int
1969 qlcnic_clr_drv_state(struct qlcnic_adapter *adapter)
1970 {
1971         u32  val;
1972
1973         if (qlcnic_api_lock(adapter))
1974                 return -EBUSY;
1975
1976         val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
1977         val &= ~((u32)0x3 << (adapter->portnum * 4));
1978         QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
1979
1980         qlcnic_api_unlock(adapter);
1981
1982         return 0;
1983 }
1984
1985 static void
1986 qlcnic_clr_all_drv_state(struct qlcnic_adapter *adapter)
1987 {
1988         u32  val;
1989
1990         if (qlcnic_api_lock(adapter))
1991                 goto err;
1992
1993         val = QLCRD32(adapter, QLCNIC_CRB_DEV_REF_COUNT);
1994         val &= ~((u32)0x1 << (adapter->portnum * 4));
1995         QLCWR32(adapter, QLCNIC_CRB_DEV_REF_COUNT, val);
1996
1997         if (!(val & 0x11111111))
1998                 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_COLD);
1999
2000         val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2001         val &= ~((u32)0x3 << (adapter->portnum * 4));
2002         QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
2003
2004         qlcnic_api_unlock(adapter);
2005 err:
2006         adapter->fw_fail_cnt = 0;
2007         clear_bit(__QLCNIC_START_FW, &adapter->state);
2008         clear_bit(__QLCNIC_RESETTING, &adapter->state);
2009 }
2010
2011 static int
2012 qlcnic_check_drv_state(struct qlcnic_adapter *adapter)
2013 {
2014         int act, state;
2015
2016         state = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2017         act = QLCRD32(adapter, QLCNIC_CRB_DEV_REF_COUNT);
2018
2019         if (((state & 0x11111111) == (act & 0x11111111)) ||
2020                         ((act & 0x11111111) == ((state >> 1) & 0x11111111)))
2021                 return 0;
2022         else
2023                 return 1;
2024 }
2025
2026 static int
2027 qlcnic_can_start_firmware(struct qlcnic_adapter *adapter)
2028 {
2029         u32 val, prev_state;
2030         int cnt = 0;
2031         int portnum = adapter->portnum;
2032
2033         if (qlcnic_api_lock(adapter))
2034                 return -1;
2035
2036         val = QLCRD32(adapter, QLCNIC_CRB_DEV_REF_COUNT);
2037         if (!(val & ((int)0x1 << (portnum * 4)))) {
2038                 val |= ((u32)0x1 << (portnum * 4));
2039                 QLCWR32(adapter, QLCNIC_CRB_DEV_REF_COUNT, val);
2040         } else if (test_and_clear_bit(__QLCNIC_START_FW, &adapter->state)) {
2041                 goto start_fw;
2042         }
2043
2044         prev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);
2045
2046         switch (prev_state) {
2047         case QLCNIC_DEV_COLD:
2048 start_fw:
2049                 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_INITALIZING);
2050                 qlcnic_api_unlock(adapter);
2051                 return 1;
2052
2053         case QLCNIC_DEV_READY:
2054                 qlcnic_api_unlock(adapter);
2055                 return 0;
2056
2057         case QLCNIC_DEV_NEED_RESET:
2058                 val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2059                 val |= ((u32)0x1 << (portnum * 4));
2060                 QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
2061                 break;
2062
2063         case QLCNIC_DEV_NEED_QUISCENT:
2064                 val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2065                 val |= ((u32)0x1 << ((portnum * 4) + 1));
2066                 QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
2067                 break;
2068
2069         case QLCNIC_DEV_FAILED:
2070                 qlcnic_api_unlock(adapter);
2071                 return -1;
2072         }
2073
2074         qlcnic_api_unlock(adapter);
2075         msleep(1000);
2076         while ((QLCRD32(adapter, QLCNIC_CRB_DEV_STATE) != QLCNIC_DEV_READY) &&
2077                         ++cnt < 20)
2078                 msleep(1000);
2079
2080         if (cnt >= 20)
2081                 return -1;
2082
2083         if (qlcnic_api_lock(adapter))
2084                 return -1;
2085
2086         val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2087         val &= ~((u32)0x3 << (portnum * 4));
2088         QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
2089
2090         qlcnic_api_unlock(adapter);
2091
2092         return 0;
2093 }
2094
2095 static void
2096 qlcnic_fwinit_work(struct work_struct *work)
2097 {
2098         struct qlcnic_adapter *adapter = container_of(work,
2099                         struct qlcnic_adapter, fw_work.work);
2100         int dev_state;
2101
2102         if (++adapter->fw_wait_cnt > FW_POLL_THRESH)
2103                 goto err_ret;
2104
2105         if (test_bit(__QLCNIC_START_FW, &adapter->state)) {
2106
2107                 if (qlcnic_check_drv_state(adapter)) {
2108                         qlcnic_schedule_work(adapter,
2109                                         qlcnic_fwinit_work, FW_POLL_DELAY);
2110                         return;
2111                 }
2112
2113                 if (!qlcnic_start_firmware(adapter)) {
2114                         qlcnic_schedule_work(adapter, qlcnic_attach_work, 0);
2115                         return;
2116                 }
2117
2118                 goto err_ret;
2119         }
2120
2121         dev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);
2122         switch (dev_state) {
2123         case QLCNIC_DEV_READY:
2124                 if (!qlcnic_start_firmware(adapter)) {
2125                         qlcnic_schedule_work(adapter, qlcnic_attach_work, 0);
2126                         return;
2127                 }
2128         case QLCNIC_DEV_FAILED:
2129                 break;
2130
2131         default:
2132                 qlcnic_schedule_work(adapter,
2133                         qlcnic_fwinit_work, 2 * FW_POLL_DELAY);
2134                 return;
2135         }
2136
2137 err_ret:
2138         qlcnic_clr_all_drv_state(adapter);
2139 }
2140
2141 static void
2142 qlcnic_detach_work(struct work_struct *work)
2143 {
2144         struct qlcnic_adapter *adapter = container_of(work,
2145                         struct qlcnic_adapter, fw_work.work);
2146         struct net_device *netdev = adapter->netdev;
2147         u32 status;
2148
2149         netif_device_detach(netdev);
2150
2151         qlcnic_down(adapter, netdev);
2152
2153         rtnl_lock();
2154         qlcnic_detach(adapter);
2155         rtnl_unlock();
2156
2157         status = QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS1);
2158
2159         if (status & QLCNIC_RCODE_FATAL_ERROR)
2160                 goto err_ret;
2161
2162         if (adapter->temp == QLCNIC_TEMP_PANIC)
2163                 goto err_ret;
2164
2165         qlcnic_set_drv_state(adapter, adapter->dev_state);
2166
2167         adapter->fw_wait_cnt = 0;
2168
2169         qlcnic_schedule_work(adapter, qlcnic_fwinit_work, FW_POLL_DELAY);
2170
2171         return;
2172
2173 err_ret:
2174         qlcnic_clr_all_drv_state(adapter);
2175
2176 }
2177
2178 static void
2179 qlcnic_dev_request_reset(struct qlcnic_adapter *adapter)
2180 {
2181         u32 state;
2182
2183         if (qlcnic_api_lock(adapter))
2184                 return;
2185
2186         state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);
2187
2188         if (state != QLCNIC_DEV_INITALIZING && state != QLCNIC_DEV_NEED_RESET) {
2189                 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_NEED_RESET);
2190                 set_bit(__QLCNIC_START_FW, &adapter->state);
2191         }
2192
2193         qlcnic_api_unlock(adapter);
2194 }
2195
2196 static void
2197 qlcnic_schedule_work(struct qlcnic_adapter *adapter,
2198                 work_func_t func, int delay)
2199 {
2200         INIT_DELAYED_WORK(&adapter->fw_work, func);
2201         schedule_delayed_work(&adapter->fw_work, round_jiffies_relative(delay));
2202 }
2203
2204 static void
2205 qlcnic_cancel_fw_work(struct qlcnic_adapter *adapter)
2206 {
2207         while (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state))
2208                 msleep(10);
2209
2210         cancel_delayed_work_sync(&adapter->fw_work);
2211 }
2212
2213 static void
2214 qlcnic_attach_work(struct work_struct *work)
2215 {
2216         struct qlcnic_adapter *adapter = container_of(work,
2217                                 struct qlcnic_adapter, fw_work.work);
2218         struct net_device *netdev = adapter->netdev;
2219         int err;
2220
2221         if (netif_running(netdev)) {
2222                 err = qlcnic_attach(adapter);
2223                 if (err)
2224                         goto done;
2225
2226                 err = qlcnic_up(adapter, netdev);
2227                 if (err) {
2228                         qlcnic_detach(adapter);
2229                         goto done;
2230                 }
2231
2232                 qlcnic_config_indev_addr(netdev, NETDEV_UP);
2233         }
2234
2235         netif_device_attach(netdev);
2236
2237 done:
2238         adapter->fw_fail_cnt = 0;
2239         clear_bit(__QLCNIC_RESETTING, &adapter->state);
2240
2241         if (!qlcnic_clr_drv_state(adapter))
2242                 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work,
2243                                                         FW_POLL_DELAY);
2244 }
2245
2246 static int
2247 qlcnic_check_health(struct qlcnic_adapter *adapter)
2248 {
2249         u32 state = 0, heartbit;
2250         struct net_device *netdev = adapter->netdev;
2251
2252         if (qlcnic_check_temp(adapter))
2253                 goto detach;
2254
2255         if (adapter->need_fw_reset) {
2256                 qlcnic_dev_request_reset(adapter);
2257                 goto detach;
2258         }
2259
2260         state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);
2261         if (state == QLCNIC_DEV_NEED_RESET || state == QLCNIC_DEV_NEED_QUISCENT)
2262                 adapter->need_fw_reset = 1;
2263
2264         heartbit = QLCRD32(adapter, QLCNIC_PEG_ALIVE_COUNTER);
2265         if (heartbit != adapter->heartbit) {
2266                 adapter->heartbit = heartbit;
2267                 adapter->fw_fail_cnt = 0;
2268                 if (adapter->need_fw_reset)
2269                         goto detach;
2270                 return 0;
2271         }
2272
2273         if (++adapter->fw_fail_cnt < FW_FAIL_THRESH)
2274                 return 0;
2275
2276         qlcnic_dev_request_reset(adapter);
2277
2278         clear_bit(__QLCNIC_FW_ATTACHED, &adapter->state);
2279
2280         dev_info(&netdev->dev, "firmware hang detected\n");
2281
2282 detach:
2283         adapter->dev_state = (state == QLCNIC_DEV_NEED_QUISCENT) ? state :
2284                 QLCNIC_DEV_NEED_RESET;
2285
2286         if ((auto_fw_reset == AUTO_FW_RESET_ENABLED) &&
2287                         !test_and_set_bit(__QLCNIC_RESETTING, &adapter->state))
2288                 qlcnic_schedule_work(adapter, qlcnic_detach_work, 0);
2289
2290         return 1;
2291 }
2292
2293 static void
2294 qlcnic_fw_poll_work(struct work_struct *work)
2295 {
2296         struct qlcnic_adapter *adapter = container_of(work,
2297                                 struct qlcnic_adapter, fw_work.work);
2298
2299         if (test_bit(__QLCNIC_RESETTING, &adapter->state))
2300                 goto reschedule;
2301
2302
2303         if (qlcnic_check_health(adapter))
2304                 return;
2305
2306 reschedule:
2307         qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY);
2308 }
2309
2310 static ssize_t
2311 qlcnic_store_bridged_mode(struct device *dev,
2312                 struct device_attribute *attr, const char *buf, size_t len)
2313 {
2314         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
2315         unsigned long new;
2316         int ret = -EINVAL;
2317
2318         if (!(adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG))
2319                 goto err_out;
2320
2321         if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
2322                 goto err_out;
2323
2324         if (strict_strtoul(buf, 2, &new))
2325                 goto err_out;
2326
2327         if (!qlcnic_config_bridged_mode(adapter, !!new))
2328                 ret = len;
2329
2330 err_out:
2331         return ret;
2332 }
2333
2334 static ssize_t
2335 qlcnic_show_bridged_mode(struct device *dev,
2336                 struct device_attribute *attr, char *buf)
2337 {
2338         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
2339         int bridged_mode = 0;
2340
2341         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG)
2342                 bridged_mode = !!(adapter->flags & QLCNIC_BRIDGE_ENABLED);
2343
2344         return sprintf(buf, "%d\n", bridged_mode);
2345 }
2346
2347 static struct device_attribute dev_attr_bridged_mode = {
2348        .attr = {.name = "bridged_mode", .mode = (S_IRUGO | S_IWUSR)},
2349        .show = qlcnic_show_bridged_mode,
2350        .store = qlcnic_store_bridged_mode,
2351 };
2352
2353 static ssize_t
2354 qlcnic_store_diag_mode(struct device *dev,
2355                 struct device_attribute *attr, const char *buf, size_t len)
2356 {
2357         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
2358         unsigned long new;
2359
2360         if (strict_strtoul(buf, 2, &new))
2361                 return -EINVAL;
2362
2363         if (!!new != !!(adapter->flags & QLCNIC_DIAG_ENABLED))
2364                 adapter->flags ^= QLCNIC_DIAG_ENABLED;
2365
2366         return len;
2367 }
2368
2369 static ssize_t
2370 qlcnic_show_diag_mode(struct device *dev,
2371                 struct device_attribute *attr, char *buf)
2372 {
2373         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
2374
2375         return sprintf(buf, "%d\n",
2376                         !!(adapter->flags & QLCNIC_DIAG_ENABLED));
2377 }
2378
2379 static struct device_attribute dev_attr_diag_mode = {
2380         .attr = {.name = "diag_mode", .mode = (S_IRUGO | S_IWUSR)},
2381         .show = qlcnic_show_diag_mode,
2382         .store = qlcnic_store_diag_mode,
2383 };
2384
2385 static int
2386 qlcnic_sysfs_validate_crb(struct qlcnic_adapter *adapter,
2387                 loff_t offset, size_t size)
2388 {
2389         if (!(adapter->flags & QLCNIC_DIAG_ENABLED))
2390                 return -EIO;
2391
2392         if ((size != 4) || (offset & 0x3))
2393                 return  -EINVAL;
2394
2395         if (offset < QLCNIC_PCI_CRBSPACE)
2396                 return -EINVAL;
2397
2398         return 0;
2399 }
2400
2401 static ssize_t
2402 qlcnic_sysfs_read_crb(struct kobject *kobj, struct bin_attribute *attr,
2403                 char *buf, loff_t offset, size_t size)
2404 {
2405         struct device *dev = container_of(kobj, struct device, kobj);
2406         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
2407         u32 data;
2408         int ret;
2409
2410         ret = qlcnic_sysfs_validate_crb(adapter, offset, size);
2411         if (ret != 0)
2412                 return ret;
2413
2414         data = QLCRD32(adapter, offset);
2415         memcpy(buf, &data, size);
2416         return size;
2417 }
2418
2419 static ssize_t
2420 qlcnic_sysfs_write_crb(struct kobject *kobj, struct bin_attribute *attr,
2421                 char *buf, loff_t offset, size_t size)
2422 {
2423         struct device *dev = container_of(kobj, struct device, kobj);
2424         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
2425         u32 data;
2426         int ret;
2427
2428         ret = qlcnic_sysfs_validate_crb(adapter, offset, size);
2429         if (ret != 0)
2430                 return ret;
2431
2432         memcpy(&data, buf, size);
2433         QLCWR32(adapter, offset, data);
2434         return size;
2435 }
2436
2437 static int
2438 qlcnic_sysfs_validate_mem(struct qlcnic_adapter *adapter,
2439                 loff_t offset, size_t size)
2440 {
2441         if (!(adapter->flags & QLCNIC_DIAG_ENABLED))
2442                 return -EIO;
2443
2444         if ((size != 8) || (offset & 0x7))
2445                 return  -EIO;
2446
2447         return 0;
2448 }
2449
2450 static ssize_t
2451 qlcnic_sysfs_read_mem(struct kobject *kobj, struct bin_attribute *attr,
2452                 char *buf, loff_t offset, size_t size)
2453 {
2454         struct device *dev = container_of(kobj, struct device, kobj);
2455         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
2456         u64 data;
2457         int ret;
2458
2459         ret = qlcnic_sysfs_validate_mem(adapter, offset, size);
2460         if (ret != 0)
2461                 return ret;
2462
2463         if (qlcnic_pci_mem_read_2M(adapter, offset, &data))
2464                 return -EIO;
2465
2466         memcpy(buf, &data, size);
2467
2468         return size;
2469 }
2470
2471 static ssize_t
2472 qlcnic_sysfs_write_mem(struct kobject *kobj, struct bin_attribute *attr,
2473                 char *buf, loff_t offset, size_t size)
2474 {
2475         struct device *dev = container_of(kobj, struct device, kobj);
2476         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
2477         u64 data;
2478         int ret;
2479
2480         ret = qlcnic_sysfs_validate_mem(adapter, offset, size);
2481         if (ret != 0)
2482                 return ret;
2483
2484         memcpy(&data, buf, size);
2485
2486         if (qlcnic_pci_mem_write_2M(adapter, offset, data))
2487                 return -EIO;
2488
2489         return size;
2490 }
2491
2492
2493 static struct bin_attribute bin_attr_crb = {
2494         .attr = {.name = "crb", .mode = (S_IRUGO | S_IWUSR)},
2495         .size = 0,
2496         .read = qlcnic_sysfs_read_crb,
2497         .write = qlcnic_sysfs_write_crb,
2498 };
2499
2500 static struct bin_attribute bin_attr_mem = {
2501         .attr = {.name = "mem", .mode = (S_IRUGO | S_IWUSR)},
2502         .size = 0,
2503         .read = qlcnic_sysfs_read_mem,
2504         .write = qlcnic_sysfs_write_mem,
2505 };
2506
2507 static void
2508 qlcnic_create_sysfs_entries(struct qlcnic_adapter *adapter)
2509 {
2510         struct device *dev = &adapter->pdev->dev;
2511
2512         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG)
2513                 if (device_create_file(dev, &dev_attr_bridged_mode))
2514                         dev_warn(dev,
2515                                 "failed to create bridged_mode sysfs entry\n");
2516 }
2517
2518 static void
2519 qlcnic_remove_sysfs_entries(struct qlcnic_adapter *adapter)
2520 {
2521         struct device *dev = &adapter->pdev->dev;
2522
2523         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG)
2524                 device_remove_file(dev, &dev_attr_bridged_mode);
2525 }
2526
2527 static void
2528 qlcnic_create_diag_entries(struct qlcnic_adapter *adapter)
2529 {
2530         struct device *dev = &adapter->pdev->dev;
2531
2532         if (device_create_file(dev, &dev_attr_diag_mode))
2533                 dev_info(dev, "failed to create diag_mode sysfs entry\n");
2534         if (device_create_bin_file(dev, &bin_attr_crb))
2535                 dev_info(dev, "failed to create crb sysfs entry\n");
2536         if (device_create_bin_file(dev, &bin_attr_mem))
2537                 dev_info(dev, "failed to create mem sysfs entry\n");
2538 }
2539
2540
2541 static void
2542 qlcnic_remove_diag_entries(struct qlcnic_adapter *adapter)
2543 {
2544         struct device *dev = &adapter->pdev->dev;
2545
2546         device_remove_file(dev, &dev_attr_diag_mode);
2547         device_remove_bin_file(dev, &bin_attr_crb);
2548         device_remove_bin_file(dev, &bin_attr_mem);
2549 }
2550
2551 #ifdef CONFIG_INET
2552
2553 #define is_qlcnic_netdev(dev) (dev->netdev_ops == &qlcnic_netdev_ops)
2554
2555 static int
2556 qlcnic_destip_supported(struct qlcnic_adapter *adapter)
2557 {
2558         if (adapter->ahw.cut_through)
2559                 return 0;
2560
2561         return 1;
2562 }
2563
2564 static void
2565 qlcnic_config_indev_addr(struct net_device *dev, unsigned long event)
2566 {
2567         struct in_device *indev;
2568         struct qlcnic_adapter *adapter = netdev_priv(dev);
2569
2570         if (!qlcnic_destip_supported(adapter))
2571                 return;
2572
2573         indev = in_dev_get(dev);
2574         if (!indev)
2575                 return;
2576
2577         for_ifa(indev) {
2578                 switch (event) {
2579                 case NETDEV_UP:
2580                         qlcnic_config_ipaddr(adapter,
2581                                         ifa->ifa_address, QLCNIC_IP_UP);
2582                         break;
2583                 case NETDEV_DOWN:
2584                         qlcnic_config_ipaddr(adapter,
2585                                         ifa->ifa_address, QLCNIC_IP_DOWN);
2586                         break;
2587                 default:
2588                         break;
2589                 }
2590         } endfor_ifa(indev);
2591
2592         in_dev_put(indev);
2593         return;
2594 }
2595
2596 static int qlcnic_netdev_event(struct notifier_block *this,
2597                                  unsigned long event, void *ptr)
2598 {
2599         struct qlcnic_adapter *adapter;
2600         struct net_device *dev = (struct net_device *)ptr;
2601
2602 recheck:
2603         if (dev == NULL)
2604                 goto done;
2605
2606         if (dev->priv_flags & IFF_802_1Q_VLAN) {
2607                 dev = vlan_dev_real_dev(dev);
2608                 goto recheck;
2609         }
2610
2611         if (!is_qlcnic_netdev(dev))
2612                 goto done;
2613
2614         adapter = netdev_priv(dev);
2615
2616         if (!adapter)
2617                 goto done;
2618
2619         if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
2620                 goto done;
2621
2622         qlcnic_config_indev_addr(dev, event);
2623 done:
2624         return NOTIFY_DONE;
2625 }
2626
2627 static int
2628 qlcnic_inetaddr_event(struct notifier_block *this,
2629                 unsigned long event, void *ptr)
2630 {
2631         struct qlcnic_adapter *adapter;
2632         struct net_device *dev;
2633
2634         struct in_ifaddr *ifa = (struct in_ifaddr *)ptr;
2635
2636         dev = ifa->ifa_dev ? ifa->ifa_dev->dev : NULL;
2637
2638 recheck:
2639         if (dev == NULL || !netif_running(dev))
2640                 goto done;
2641
2642         if (dev->priv_flags & IFF_802_1Q_VLAN) {
2643                 dev = vlan_dev_real_dev(dev);
2644                 goto recheck;
2645         }
2646
2647         if (!is_qlcnic_netdev(dev))
2648                 goto done;
2649
2650         adapter = netdev_priv(dev);
2651
2652         if (!adapter || !qlcnic_destip_supported(adapter))
2653                 goto done;
2654
2655         if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
2656                 goto done;
2657
2658         switch (event) {
2659         case NETDEV_UP:
2660                 qlcnic_config_ipaddr(adapter, ifa->ifa_address, QLCNIC_IP_UP);
2661                 break;
2662         case NETDEV_DOWN:
2663                 qlcnic_config_ipaddr(adapter, ifa->ifa_address, QLCNIC_IP_DOWN);
2664                 break;
2665         default:
2666                 break;
2667         }
2668
2669 done:
2670         return NOTIFY_DONE;
2671 }
2672
2673 static struct notifier_block    qlcnic_netdev_cb = {
2674         .notifier_call = qlcnic_netdev_event,
2675 };
2676
2677 static struct notifier_block qlcnic_inetaddr_cb = {
2678         .notifier_call = qlcnic_inetaddr_event,
2679 };
2680 #else
2681 static void
2682 qlcnic_config_indev_addr(struct net_device *dev, unsigned long event)
2683 { }
2684 #endif
2685
2686 static struct pci_driver qlcnic_driver = {
2687         .name = qlcnic_driver_name,
2688         .id_table = qlcnic_pci_tbl,
2689         .probe = qlcnic_probe,
2690         .remove = __devexit_p(qlcnic_remove),
2691 #ifdef CONFIG_PM
2692         .suspend = qlcnic_suspend,
2693         .resume = qlcnic_resume,
2694 #endif
2695         .shutdown = qlcnic_shutdown
2696 };
2697
2698 static int __init qlcnic_init_module(void)
2699 {
2700
2701         printk(KERN_INFO "%s\n", qlcnic_driver_string);
2702
2703 #ifdef CONFIG_INET
2704         register_netdevice_notifier(&qlcnic_netdev_cb);
2705         register_inetaddr_notifier(&qlcnic_inetaddr_cb);
2706 #endif
2707
2708
2709         return pci_register_driver(&qlcnic_driver);
2710 }
2711
2712 module_init(qlcnic_init_module);
2713
2714 static void __exit qlcnic_exit_module(void)
2715 {
2716
2717         pci_unregister_driver(&qlcnic_driver);
2718
2719 #ifdef CONFIG_INET
2720         unregister_inetaddr_notifier(&qlcnic_inetaddr_cb);
2721         unregister_netdevice_notifier(&qlcnic_netdev_cb);
2722 #endif
2723 }
2724
2725 module_exit(qlcnic_exit_module);