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