qlcnic: Changes to VLAN code
[pandora-kernel.git] / drivers / net / qlcnic / qlcnic_main.c
1 /*
2  * QLogic qlcnic NIC Driver
3  * Copyright (c)  2009-2010 QLogic Corporation
4  *
5  * See LICENSE.qlcnic for copyright and licensing details.
6  */
7
8 #include <linux/slab.h>
9 #include <linux/vmalloc.h>
10 #include <linux/interrupt.h>
11
12 #include "qlcnic.h"
13
14 #include <linux/swab.h>
15 #include <linux/dma-mapping.h>
16 #include <net/ip.h>
17 #include <linux/ipv6.h>
18 #include <linux/inetdevice.h>
19 #include <linux/sysfs.h>
20 #include <linux/aer.h>
21
22 MODULE_DESCRIPTION("QLogic 1/10 GbE Converged/Intelligent Ethernet Driver");
23 MODULE_LICENSE("GPL");
24 MODULE_VERSION(QLCNIC_LINUX_VERSIONID);
25 MODULE_FIRMWARE(QLCNIC_UNIFIED_ROMIMAGE_NAME);
26
27 char qlcnic_driver_name[] = "qlcnic";
28 static const char qlcnic_driver_string[] = "QLogic 1/10 GbE "
29         "Converged/Intelligent Ethernet Driver v" QLCNIC_LINUX_VERSIONID;
30
31 static struct workqueue_struct *qlcnic_wq;
32 static int qlcnic_mac_learn;
33 module_param(qlcnic_mac_learn, int, 0444);
34 MODULE_PARM_DESC(qlcnic_mac_learn, "Mac Filter (0=disabled, 1=enabled)");
35
36 static int use_msi = 1;
37 module_param(use_msi, int, 0444);
38 MODULE_PARM_DESC(use_msi, "MSI interrupt (0=disabled, 1=enabled");
39
40 static int use_msi_x = 1;
41 module_param(use_msi_x, int, 0444);
42 MODULE_PARM_DESC(use_msi_x, "MSI-X interrupt (0=disabled, 1=enabled");
43
44 static int auto_fw_reset = 1;
45 module_param(auto_fw_reset, int, 0644);
46 MODULE_PARM_DESC(auto_fw_reset, "Auto firmware reset (0=disabled, 1=enabled");
47
48 static int load_fw_file;
49 module_param(load_fw_file, int, 0444);
50 MODULE_PARM_DESC(load_fw_file, "Load firmware from (0=flash, 1=file");
51
52 static int qlcnic_config_npars;
53 module_param(qlcnic_config_npars, int, 0444);
54 MODULE_PARM_DESC(qlcnic_config_npars, "Configure NPARs (0=disabled, 1=enabled");
55
56 static int __devinit qlcnic_probe(struct pci_dev *pdev,
57                 const struct pci_device_id *ent);
58 static void __devexit qlcnic_remove(struct pci_dev *pdev);
59 static int qlcnic_open(struct net_device *netdev);
60 static int qlcnic_close(struct net_device *netdev);
61 static void qlcnic_tx_timeout(struct net_device *netdev);
62 static void qlcnic_attach_work(struct work_struct *work);
63 static void qlcnic_fwinit_work(struct work_struct *work);
64 static void qlcnic_fw_poll_work(struct work_struct *work);
65 static void qlcnic_schedule_work(struct qlcnic_adapter *adapter,
66                 work_func_t func, int delay);
67 static void qlcnic_cancel_fw_work(struct qlcnic_adapter *adapter);
68 static int qlcnic_poll(struct napi_struct *napi, int budget);
69 static int qlcnic_rx_poll(struct napi_struct *napi, int budget);
70 #ifdef CONFIG_NET_POLL_CONTROLLER
71 static void qlcnic_poll_controller(struct net_device *netdev);
72 #endif
73
74 static void qlcnic_create_sysfs_entries(struct qlcnic_adapter *adapter);
75 static void qlcnic_remove_sysfs_entries(struct qlcnic_adapter *adapter);
76 static void qlcnic_create_diag_entries(struct qlcnic_adapter *adapter);
77 static void qlcnic_remove_diag_entries(struct qlcnic_adapter *adapter);
78
79 static void qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding);
80 static void qlcnic_clr_all_drv_state(struct qlcnic_adapter *adapter, u8);
81 static int qlcnic_can_start_firmware(struct qlcnic_adapter *adapter);
82
83 static irqreturn_t qlcnic_tmp_intr(int irq, void *data);
84 static irqreturn_t qlcnic_intr(int irq, void *data);
85 static irqreturn_t qlcnic_msi_intr(int irq, void *data);
86 static irqreturn_t qlcnic_msix_intr(int irq, void *data);
87
88 static struct net_device_stats *qlcnic_get_stats(struct net_device *netdev);
89 static void qlcnic_restore_indev_addr(struct net_device *dev, unsigned long);
90 static int qlcnic_start_firmware(struct qlcnic_adapter *);
91
92 static void qlcnic_alloc_lb_filters_mem(struct qlcnic_adapter *adapter);
93 static void qlcnic_free_lb_filters_mem(struct qlcnic_adapter *adapter);
94 static void qlcnic_dev_set_npar_ready(struct qlcnic_adapter *);
95 static int qlcnicvf_config_led(struct qlcnic_adapter *, u32, u32);
96 static int qlcnicvf_config_bridged_mode(struct qlcnic_adapter *, u32);
97 static int qlcnicvf_start_firmware(struct qlcnic_adapter *);
98 static void qlcnic_set_netdev_features(struct qlcnic_adapter *,
99                                 struct qlcnic_esw_func_cfg *);
100 static void qlcnic_vlan_rx_add(struct net_device *, u16);
101 static void qlcnic_vlan_rx_del(struct net_device *, u16);
102
103 /*  PCI Device ID Table  */
104 #define ENTRY(device) \
105         {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, (device)), \
106         .class = PCI_CLASS_NETWORK_ETHERNET << 8, .class_mask = ~0}
107
108 #define PCI_DEVICE_ID_QLOGIC_QLE824X  0x8020
109
110 static DEFINE_PCI_DEVICE_TABLE(qlcnic_pci_tbl) = {
111         ENTRY(PCI_DEVICE_ID_QLOGIC_QLE824X),
112         {0,}
113 };
114
115 MODULE_DEVICE_TABLE(pci, qlcnic_pci_tbl);
116
117
118 inline void
119 qlcnic_update_cmd_producer(struct qlcnic_adapter *adapter,
120                 struct qlcnic_host_tx_ring *tx_ring)
121 {
122         writel(tx_ring->producer, tx_ring->crb_cmd_producer);
123 }
124
125 static const u32 msi_tgt_status[8] = {
126         ISR_INT_TARGET_STATUS, ISR_INT_TARGET_STATUS_F1,
127         ISR_INT_TARGET_STATUS_F2, ISR_INT_TARGET_STATUS_F3,
128         ISR_INT_TARGET_STATUS_F4, ISR_INT_TARGET_STATUS_F5,
129         ISR_INT_TARGET_STATUS_F6, ISR_INT_TARGET_STATUS_F7
130 };
131
132 static const
133 struct qlcnic_legacy_intr_set legacy_intr[] = QLCNIC_LEGACY_INTR_CONFIG;
134
135 static inline void qlcnic_disable_int(struct qlcnic_host_sds_ring *sds_ring)
136 {
137         writel(0, sds_ring->crb_intr_mask);
138 }
139
140 static inline void qlcnic_enable_int(struct qlcnic_host_sds_ring *sds_ring)
141 {
142         struct qlcnic_adapter *adapter = sds_ring->adapter;
143
144         writel(0x1, sds_ring->crb_intr_mask);
145
146         if (!QLCNIC_IS_MSI_FAMILY(adapter))
147                 writel(0xfbff, adapter->tgt_mask_reg);
148 }
149
150 static int
151 qlcnic_alloc_sds_rings(struct qlcnic_recv_context *recv_ctx, int count)
152 {
153         int size = sizeof(struct qlcnic_host_sds_ring) * count;
154
155         recv_ctx->sds_rings = kzalloc(size, GFP_KERNEL);
156
157         return recv_ctx->sds_rings == NULL;
158 }
159
160 static void
161 qlcnic_free_sds_rings(struct qlcnic_recv_context *recv_ctx)
162 {
163         if (recv_ctx->sds_rings != NULL)
164                 kfree(recv_ctx->sds_rings);
165
166         recv_ctx->sds_rings = NULL;
167 }
168
169 static int
170 qlcnic_napi_add(struct qlcnic_adapter *adapter, struct net_device *netdev)
171 {
172         int ring;
173         struct qlcnic_host_sds_ring *sds_ring;
174         struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
175
176         if (qlcnic_alloc_sds_rings(recv_ctx, adapter->max_sds_rings))
177                 return -ENOMEM;
178
179         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
180                 sds_ring = &recv_ctx->sds_rings[ring];
181
182                 if (ring == adapter->max_sds_rings - 1)
183                         netif_napi_add(netdev, &sds_ring->napi, qlcnic_poll,
184                                 QLCNIC_NETDEV_WEIGHT/adapter->max_sds_rings);
185                 else
186                         netif_napi_add(netdev, &sds_ring->napi,
187                                 qlcnic_rx_poll, QLCNIC_NETDEV_WEIGHT*2);
188         }
189
190         return 0;
191 }
192
193 static void
194 qlcnic_napi_del(struct qlcnic_adapter *adapter)
195 {
196         int ring;
197         struct qlcnic_host_sds_ring *sds_ring;
198         struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
199
200         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
201                 sds_ring = &recv_ctx->sds_rings[ring];
202                 netif_napi_del(&sds_ring->napi);
203         }
204
205         qlcnic_free_sds_rings(adapter->recv_ctx);
206 }
207
208 static void
209 qlcnic_napi_enable(struct qlcnic_adapter *adapter)
210 {
211         int ring;
212         struct qlcnic_host_sds_ring *sds_ring;
213         struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
214
215         if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
216                 return;
217
218         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
219                 sds_ring = &recv_ctx->sds_rings[ring];
220                 napi_enable(&sds_ring->napi);
221                 qlcnic_enable_int(sds_ring);
222         }
223 }
224
225 static void
226 qlcnic_napi_disable(struct qlcnic_adapter *adapter)
227 {
228         int ring;
229         struct qlcnic_host_sds_ring *sds_ring;
230         struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
231
232         if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
233                 return;
234
235         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
236                 sds_ring = &recv_ctx->sds_rings[ring];
237                 qlcnic_disable_int(sds_ring);
238                 napi_synchronize(&sds_ring->napi);
239                 napi_disable(&sds_ring->napi);
240         }
241 }
242
243 static void qlcnic_clear_stats(struct qlcnic_adapter *adapter)
244 {
245         memset(&adapter->stats, 0, sizeof(adapter->stats));
246 }
247
248 static void qlcnic_set_msix_bit(struct pci_dev *pdev, int enable)
249 {
250         u32 control;
251         int pos;
252
253         pos = pci_find_capability(pdev, PCI_CAP_ID_MSIX);
254         if (pos) {
255                 pci_read_config_dword(pdev, pos, &control);
256                 if (enable)
257                         control |= PCI_MSIX_FLAGS_ENABLE;
258                 else
259                         control = 0;
260                 pci_write_config_dword(pdev, pos, control);
261         }
262 }
263
264 static void qlcnic_init_msix_entries(struct qlcnic_adapter *adapter, int count)
265 {
266         int i;
267
268         for (i = 0; i < count; i++)
269                 adapter->msix_entries[i].entry = i;
270 }
271
272 static int
273 qlcnic_read_mac_addr(struct qlcnic_adapter *adapter)
274 {
275         u8 mac_addr[ETH_ALEN];
276         struct net_device *netdev = adapter->netdev;
277         struct pci_dev *pdev = adapter->pdev;
278
279         if (qlcnic_get_mac_address(adapter, mac_addr) != 0)
280                 return -EIO;
281
282         memcpy(netdev->dev_addr, mac_addr, ETH_ALEN);
283         memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
284         memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len);
285
286         /* set station address */
287
288         if (!is_valid_ether_addr(netdev->perm_addr))
289                 dev_warn(&pdev->dev, "Bad MAC address %pM.\n",
290                                         netdev->dev_addr);
291
292         return 0;
293 }
294
295 static int qlcnic_set_mac(struct net_device *netdev, void *p)
296 {
297         struct qlcnic_adapter *adapter = netdev_priv(netdev);
298         struct sockaddr *addr = p;
299
300         if ((adapter->flags & QLCNIC_MAC_OVERRIDE_DISABLED))
301                 return -EOPNOTSUPP;
302
303         if (!is_valid_ether_addr(addr->sa_data))
304                 return -EINVAL;
305
306         if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) {
307                 netif_device_detach(netdev);
308                 qlcnic_napi_disable(adapter);
309         }
310
311         memcpy(adapter->mac_addr, addr->sa_data, netdev->addr_len);
312         memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
313         qlcnic_set_multi(adapter->netdev);
314
315         if (test_bit(__QLCNIC_DEV_UP, &adapter->state)) {
316                 netif_device_attach(netdev);
317                 qlcnic_napi_enable(adapter);
318         }
319         return 0;
320 }
321
322 static const struct net_device_ops qlcnic_netdev_ops = {
323         .ndo_open          = qlcnic_open,
324         .ndo_stop          = qlcnic_close,
325         .ndo_start_xmit    = qlcnic_xmit_frame,
326         .ndo_get_stats     = qlcnic_get_stats,
327         .ndo_validate_addr = eth_validate_addr,
328         .ndo_set_multicast_list = qlcnic_set_multi,
329         .ndo_set_mac_address    = qlcnic_set_mac,
330         .ndo_change_mtu    = qlcnic_change_mtu,
331         .ndo_tx_timeout    = qlcnic_tx_timeout,
332         .ndo_vlan_rx_add_vid    = qlcnic_vlan_rx_add,
333         .ndo_vlan_rx_kill_vid   = qlcnic_vlan_rx_del,
334 #ifdef CONFIG_NET_POLL_CONTROLLER
335         .ndo_poll_controller = qlcnic_poll_controller,
336 #endif
337 };
338
339 static struct qlcnic_nic_template qlcnic_ops = {
340         .config_bridged_mode = qlcnic_config_bridged_mode,
341         .config_led = qlcnic_config_led,
342         .start_firmware = qlcnic_start_firmware
343 };
344
345 static struct qlcnic_nic_template qlcnic_vf_ops = {
346         .config_bridged_mode = qlcnicvf_config_bridged_mode,
347         .config_led = qlcnicvf_config_led,
348         .start_firmware = qlcnicvf_start_firmware
349 };
350
351 static void
352 qlcnic_setup_intr(struct qlcnic_adapter *adapter)
353 {
354         const struct qlcnic_legacy_intr_set *legacy_intrp;
355         struct pci_dev *pdev = adapter->pdev;
356         int err, num_msix;
357
358         if (adapter->msix_supported) {
359                 num_msix = (num_online_cpus() >= MSIX_ENTRIES_PER_ADAPTER) ?
360                         MSIX_ENTRIES_PER_ADAPTER : 2;
361         } else
362                 num_msix = 1;
363
364         adapter->max_sds_rings = 1;
365
366         adapter->flags &= ~(QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED);
367
368         legacy_intrp = &legacy_intr[adapter->ahw->pci_func];
369
370         adapter->int_vec_bit = legacy_intrp->int_vec_bit;
371         adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter,
372                         legacy_intrp->tgt_status_reg);
373         adapter->tgt_mask_reg = qlcnic_get_ioaddr(adapter,
374                         legacy_intrp->tgt_mask_reg);
375         adapter->isr_int_vec = qlcnic_get_ioaddr(adapter, ISR_INT_VECTOR);
376
377         adapter->crb_int_state_reg = qlcnic_get_ioaddr(adapter,
378                         ISR_INT_STATE_REG);
379
380         qlcnic_set_msix_bit(pdev, 0);
381
382         if (adapter->msix_supported) {
383
384                 qlcnic_init_msix_entries(adapter, num_msix);
385                 err = pci_enable_msix(pdev, adapter->msix_entries, num_msix);
386                 if (err == 0) {
387                         adapter->flags |= QLCNIC_MSIX_ENABLED;
388                         qlcnic_set_msix_bit(pdev, 1);
389
390                         adapter->max_sds_rings = num_msix;
391
392                         dev_info(&pdev->dev, "using msi-x interrupts\n");
393                         return;
394                 }
395
396                 if (err > 0)
397                         pci_disable_msix(pdev);
398
399                 /* fall through for msi */
400         }
401
402         if (use_msi && !pci_enable_msi(pdev)) {
403                 adapter->flags |= QLCNIC_MSI_ENABLED;
404                 adapter->tgt_status_reg = qlcnic_get_ioaddr(adapter,
405                                 msi_tgt_status[adapter->ahw->pci_func]);
406                 dev_info(&pdev->dev, "using msi interrupts\n");
407                 adapter->msix_entries[0].vector = pdev->irq;
408                 return;
409         }
410
411         dev_info(&pdev->dev, "using legacy interrupts\n");
412         adapter->msix_entries[0].vector = pdev->irq;
413 }
414
415 static void
416 qlcnic_teardown_intr(struct qlcnic_adapter *adapter)
417 {
418         if (adapter->flags & QLCNIC_MSIX_ENABLED)
419                 pci_disable_msix(adapter->pdev);
420         if (adapter->flags & QLCNIC_MSI_ENABLED)
421                 pci_disable_msi(adapter->pdev);
422 }
423
424 static void
425 qlcnic_cleanup_pci_map(struct qlcnic_adapter *adapter)
426 {
427         if (adapter->ahw->pci_base0 != NULL)
428                 iounmap(adapter->ahw->pci_base0);
429 }
430
431 static int
432 qlcnic_init_pci_info(struct qlcnic_adapter *adapter)
433 {
434         struct qlcnic_pci_info *pci_info;
435         int i, ret = 0;
436         u8 pfn;
437
438         pci_info = kcalloc(QLCNIC_MAX_PCI_FUNC, sizeof(*pci_info), GFP_KERNEL);
439         if (!pci_info)
440                 return -ENOMEM;
441
442         adapter->npars = kzalloc(sizeof(struct qlcnic_npar_info) *
443                                 QLCNIC_MAX_PCI_FUNC, GFP_KERNEL);
444         if (!adapter->npars) {
445                 ret = -ENOMEM;
446                 goto err_pci_info;
447         }
448
449         adapter->eswitch = kzalloc(sizeof(struct qlcnic_eswitch) *
450                                 QLCNIC_NIU_MAX_XG_PORTS, GFP_KERNEL);
451         if (!adapter->eswitch) {
452                 ret = -ENOMEM;
453                 goto err_npars;
454         }
455
456         ret = qlcnic_get_pci_info(adapter, pci_info);
457         if (ret)
458                 goto err_eswitch;
459
460         for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) {
461                 pfn = pci_info[i].id;
462                 if (pfn > QLCNIC_MAX_PCI_FUNC) {
463                         ret = QL_STATUS_INVALID_PARAM;
464                         goto err_eswitch;
465                 }
466                 adapter->npars[pfn].active = (u8)pci_info[i].active;
467                 adapter->npars[pfn].type = (u8)pci_info[i].type;
468                 adapter->npars[pfn].phy_port = (u8)pci_info[i].default_port;
469                 adapter->npars[pfn].min_bw = pci_info[i].tx_min_bw;
470                 adapter->npars[pfn].max_bw = pci_info[i].tx_max_bw;
471         }
472
473         for (i = 0; i < QLCNIC_NIU_MAX_XG_PORTS; i++)
474                 adapter->eswitch[i].flags |= QLCNIC_SWITCH_ENABLE;
475
476         kfree(pci_info);
477         return 0;
478
479 err_eswitch:
480         kfree(adapter->eswitch);
481         adapter->eswitch = NULL;
482 err_npars:
483         kfree(adapter->npars);
484         adapter->npars = NULL;
485 err_pci_info:
486         kfree(pci_info);
487
488         return ret;
489 }
490
491 static int
492 qlcnic_set_function_modes(struct qlcnic_adapter *adapter)
493 {
494         u8 id;
495         u32 ref_count;
496         int i, ret = 1;
497         u32 data = QLCNIC_MGMT_FUNC;
498         void __iomem *priv_op = adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE;
499
500         /* If other drivers are not in use set their privilege level */
501         ref_count = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE);
502         ret = qlcnic_api_lock(adapter);
503         if (ret)
504                 goto err_lock;
505
506         if (qlcnic_config_npars) {
507                 for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) {
508                         id = i;
509                         if (adapter->npars[i].type != QLCNIC_TYPE_NIC ||
510                                 id == adapter->ahw->pci_func)
511                                 continue;
512                         data |= (qlcnic_config_npars &
513                                         QLC_DEV_SET_DRV(0xf, id));
514                 }
515         } else {
516                 data = readl(priv_op);
517                 data = (data & ~QLC_DEV_SET_DRV(0xf, adapter->ahw->pci_func)) |
518                         (QLC_DEV_SET_DRV(QLCNIC_MGMT_FUNC,
519                         adapter->ahw->pci_func));
520         }
521         writel(data, priv_op);
522         qlcnic_api_unlock(adapter);
523 err_lock:
524         return ret;
525 }
526
527 static void
528 qlcnic_check_vf(struct qlcnic_adapter *adapter)
529 {
530         void __iomem *msix_base_addr;
531         void __iomem *priv_op;
532         u32 func;
533         u32 msix_base;
534         u32 op_mode, priv_level;
535
536         /* Determine FW API version */
537         adapter->fw_hal_version = readl(adapter->ahw->pci_base0 +
538                                         QLCNIC_FW_API);
539
540         /* Find PCI function number */
541         pci_read_config_dword(adapter->pdev, QLCNIC_MSIX_TABLE_OFFSET, &func);
542         msix_base_addr = adapter->ahw->pci_base0 + QLCNIC_MSIX_BASE;
543         msix_base = readl(msix_base_addr);
544         func = (func - msix_base)/QLCNIC_MSIX_TBL_PGSIZE;
545         adapter->ahw->pci_func = func;
546
547         /* Determine function privilege level */
548         priv_op = adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE;
549         op_mode = readl(priv_op);
550         if (op_mode == QLC_DEV_DRV_DEFAULT)
551                 priv_level = QLCNIC_MGMT_FUNC;
552         else
553                 priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw->pci_func);
554
555         if (priv_level == QLCNIC_NON_PRIV_FUNC) {
556                 adapter->op_mode = QLCNIC_NON_PRIV_FUNC;
557                 dev_info(&adapter->pdev->dev,
558                         "HAL Version: %d Non Privileged function\n",
559                         adapter->fw_hal_version);
560                 adapter->nic_ops = &qlcnic_vf_ops;
561         } else
562                 adapter->nic_ops = &qlcnic_ops;
563 }
564
565 static int
566 qlcnic_setup_pci_map(struct qlcnic_adapter *adapter)
567 {
568         void __iomem *mem_ptr0 = NULL;
569         resource_size_t mem_base;
570         unsigned long mem_len, pci_len0 = 0;
571
572         struct pci_dev *pdev = adapter->pdev;
573
574         /* remap phys address */
575         mem_base = pci_resource_start(pdev, 0); /* 0 is for BAR 0 */
576         mem_len = pci_resource_len(pdev, 0);
577
578         if (mem_len == QLCNIC_PCI_2MB_SIZE) {
579
580                 mem_ptr0 = pci_ioremap_bar(pdev, 0);
581                 if (mem_ptr0 == NULL) {
582                         dev_err(&pdev->dev, "failed to map PCI bar 0\n");
583                         return -EIO;
584                 }
585                 pci_len0 = mem_len;
586         } else {
587                 return -EIO;
588         }
589
590         dev_info(&pdev->dev, "%dMB memory map\n", (int)(mem_len>>20));
591
592         adapter->ahw->pci_base0 = mem_ptr0;
593         adapter->ahw->pci_len0 = pci_len0;
594
595         qlcnic_check_vf(adapter);
596
597         adapter->ahw->ocm_win_crb = qlcnic_get_ioaddr(adapter,
598                 QLCNIC_PCIX_PS_REG(PCIX_OCM_WINDOW_REG(
599                         adapter->ahw->pci_func)));
600
601         return 0;
602 }
603
604 static void get_brd_name(struct qlcnic_adapter *adapter, char *name)
605 {
606         struct pci_dev *pdev = adapter->pdev;
607         int i, found = 0;
608
609         for (i = 0; i < NUM_SUPPORTED_BOARDS; ++i) {
610                 if (qlcnic_boards[i].vendor == pdev->vendor &&
611                         qlcnic_boards[i].device == pdev->device &&
612                         qlcnic_boards[i].sub_vendor == pdev->subsystem_vendor &&
613                         qlcnic_boards[i].sub_device == pdev->subsystem_device) {
614                                 sprintf(name, "%pM: %s" ,
615                                         adapter->mac_addr,
616                                         qlcnic_boards[i].short_name);
617                                 found = 1;
618                                 break;
619                 }
620
621         }
622
623         if (!found)
624                 sprintf(name, "%pM Gigabit Ethernet", adapter->mac_addr);
625 }
626
627 static void
628 qlcnic_check_options(struct qlcnic_adapter *adapter)
629 {
630         u32 fw_major, fw_minor, fw_build;
631         struct pci_dev *pdev = adapter->pdev;
632
633         fw_major = QLCRD32(adapter, QLCNIC_FW_VERSION_MAJOR);
634         fw_minor = QLCRD32(adapter, QLCNIC_FW_VERSION_MINOR);
635         fw_build = QLCRD32(adapter, QLCNIC_FW_VERSION_SUB);
636
637         adapter->fw_version = QLCNIC_VERSION_CODE(fw_major, fw_minor, fw_build);
638
639         dev_info(&pdev->dev, "firmware v%d.%d.%d\n",
640                         fw_major, fw_minor, fw_build);
641         if (adapter->ahw->port_type == QLCNIC_XGBE) {
642                 if (adapter->flags & QLCNIC_ESWITCH_ENABLED) {
643                         adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_VF;
644                         adapter->max_rxd = MAX_RCV_DESCRIPTORS_VF;
645                 } else {
646                         adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_10G;
647                         adapter->max_rxd = MAX_RCV_DESCRIPTORS_10G;
648                 }
649
650                 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G;
651                 adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G;
652
653         } else if (adapter->ahw->port_type == QLCNIC_GBE) {
654                 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_1G;
655                 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G;
656                 adapter->max_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G;
657                 adapter->max_rxd = MAX_RCV_DESCRIPTORS_1G;
658         }
659
660         adapter->msix_supported = !!use_msi_x;
661
662         adapter->num_txd = MAX_CMD_DESCRIPTORS;
663
664         adapter->max_rds_rings = MAX_RDS_RINGS;
665 }
666
667 static int
668 qlcnic_initialize_nic(struct qlcnic_adapter *adapter)
669 {
670         int err;
671         struct qlcnic_info nic_info;
672
673         err = qlcnic_get_nic_info(adapter, &nic_info, adapter->ahw->pci_func);
674         if (err)
675                 return err;
676
677         adapter->physical_port = (u8)nic_info.phys_port;
678         adapter->switch_mode = nic_info.switch_mode;
679         adapter->max_tx_ques = nic_info.max_tx_ques;
680         adapter->max_rx_ques = nic_info.max_rx_ques;
681         adapter->capabilities = nic_info.capabilities;
682         adapter->max_mac_filters = nic_info.max_mac_filters;
683         adapter->max_mtu = nic_info.max_mtu;
684
685         if (adapter->capabilities & BIT_6)
686                 adapter->flags |= QLCNIC_ESWITCH_ENABLED;
687         else
688                 adapter->flags &= ~QLCNIC_ESWITCH_ENABLED;
689
690         return err;
691 }
692
693 static void
694 qlcnic_set_vlan_config(struct qlcnic_adapter *adapter,
695                 struct qlcnic_esw_func_cfg *esw_cfg)
696 {
697         if (esw_cfg->discard_tagged)
698                 adapter->flags &= ~QLCNIC_TAGGING_ENABLED;
699         else
700                 adapter->flags |= QLCNIC_TAGGING_ENABLED;
701
702         if (esw_cfg->vlan_id)
703                 adapter->pvid = esw_cfg->vlan_id;
704         else
705                 adapter->pvid = 0;
706 }
707
708 static void
709 qlcnic_vlan_rx_add(struct net_device *netdev, u16 vid)
710 {
711         struct qlcnic_adapter *adapter = netdev_priv(netdev);
712         set_bit(vid, adapter->vlans);
713 }
714
715 static void
716 qlcnic_vlan_rx_del(struct net_device *netdev, u16 vid)
717 {
718         struct qlcnic_adapter *adapter = netdev_priv(netdev);
719
720         qlcnic_restore_indev_addr(netdev, NETDEV_DOWN);
721         clear_bit(vid, adapter->vlans);
722 }
723
724 static void
725 qlcnic_set_eswitch_port_features(struct qlcnic_adapter *adapter,
726                 struct qlcnic_esw_func_cfg *esw_cfg)
727 {
728         adapter->flags &= ~(QLCNIC_MACSPOOF | QLCNIC_MAC_OVERRIDE_DISABLED |
729                                 QLCNIC_PROMISC_DISABLED);
730
731         if (esw_cfg->mac_anti_spoof)
732                 adapter->flags |= QLCNIC_MACSPOOF;
733
734         if (!esw_cfg->mac_override)
735                 adapter->flags |= QLCNIC_MAC_OVERRIDE_DISABLED;
736
737         if (!esw_cfg->promisc_mode)
738                 adapter->flags |= QLCNIC_PROMISC_DISABLED;
739
740         qlcnic_set_netdev_features(adapter, esw_cfg);
741 }
742
743 static int
744 qlcnic_set_eswitch_port_config(struct qlcnic_adapter *adapter)
745 {
746         struct qlcnic_esw_func_cfg esw_cfg;
747
748         if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED))
749                 return 0;
750
751         esw_cfg.pci_func = adapter->ahw->pci_func;
752         if (qlcnic_get_eswitch_port_config(adapter, &esw_cfg))
753                         return -EIO;
754         qlcnic_set_vlan_config(adapter, &esw_cfg);
755         qlcnic_set_eswitch_port_features(adapter, &esw_cfg);
756
757         return 0;
758 }
759
760 static void
761 qlcnic_set_netdev_features(struct qlcnic_adapter *adapter,
762                 struct qlcnic_esw_func_cfg *esw_cfg)
763 {
764         struct net_device *netdev = adapter->netdev;
765         unsigned long features, vlan_features;
766
767         features = (NETIF_F_SG | NETIF_F_IP_CSUM |
768                         NETIF_F_IPV6_CSUM | NETIF_F_GRO);
769         vlan_features = (NETIF_F_SG | NETIF_F_IP_CSUM |
770                         NETIF_F_IPV6_CSUM | NETIF_F_HW_VLAN_FILTER);
771
772         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) {
773                 features |= (NETIF_F_TSO | NETIF_F_TSO6);
774                 vlan_features |= (NETIF_F_TSO | NETIF_F_TSO6);
775         }
776         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO)
777                 features |= NETIF_F_LRO;
778
779         if (esw_cfg->offload_flags & BIT_0) {
780                 netdev->features |= features;
781                 adapter->rx_csum = 1;
782                 if (!(esw_cfg->offload_flags & BIT_1))
783                         netdev->features &= ~NETIF_F_TSO;
784                 if (!(esw_cfg->offload_flags & BIT_2))
785                         netdev->features &= ~NETIF_F_TSO6;
786         } else {
787                 netdev->features &= ~features;
788                 adapter->rx_csum = 0;
789         }
790
791         netdev->vlan_features = (features & vlan_features);
792 }
793
794 static int
795 qlcnic_check_eswitch_mode(struct qlcnic_adapter *adapter)
796 {
797         void __iomem *priv_op;
798         u32 op_mode, priv_level;
799         int err = 0;
800
801         err = qlcnic_initialize_nic(adapter);
802         if (err)
803                 return err;
804
805         if (adapter->flags & QLCNIC_ADAPTER_INITIALIZED)
806                 return 0;
807
808         priv_op = adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE;
809         op_mode = readl(priv_op);
810         priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw->pci_func);
811
812         if (op_mode == QLC_DEV_DRV_DEFAULT)
813                 priv_level = QLCNIC_MGMT_FUNC;
814         else
815                 priv_level = QLC_DEV_GET_DRV(op_mode, adapter->ahw->pci_func);
816
817         if (adapter->flags & QLCNIC_ESWITCH_ENABLED) {
818                 if (priv_level == QLCNIC_MGMT_FUNC) {
819                         adapter->op_mode = QLCNIC_MGMT_FUNC;
820                         err = qlcnic_init_pci_info(adapter);
821                         if (err)
822                                 return err;
823                         /* Set privilege level for other functions */
824                         qlcnic_set_function_modes(adapter);
825                         dev_info(&adapter->pdev->dev,
826                                 "HAL Version: %d, Management function\n",
827                                 adapter->fw_hal_version);
828                 } else if (priv_level == QLCNIC_PRIV_FUNC) {
829                         adapter->op_mode = QLCNIC_PRIV_FUNC;
830                         dev_info(&adapter->pdev->dev,
831                                 "HAL Version: %d, Privileged function\n",
832                                 adapter->fw_hal_version);
833                 }
834         }
835
836         adapter->flags |= QLCNIC_ADAPTER_INITIALIZED;
837
838         return err;
839 }
840
841 static int
842 qlcnic_set_default_offload_settings(struct qlcnic_adapter *adapter)
843 {
844         struct qlcnic_esw_func_cfg esw_cfg;
845         struct qlcnic_npar_info *npar;
846         u8 i;
847
848         if (adapter->need_fw_reset)
849                 return 0;
850
851         for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) {
852                 if (adapter->npars[i].type != QLCNIC_TYPE_NIC)
853                         continue;
854                 memset(&esw_cfg, 0, sizeof(struct qlcnic_esw_func_cfg));
855                 esw_cfg.pci_func = i;
856                 esw_cfg.offload_flags = BIT_0;
857                 esw_cfg.mac_override = BIT_0;
858                 esw_cfg.promisc_mode = BIT_0;
859                 if (adapter->capabilities  & QLCNIC_FW_CAPABILITY_TSO)
860                         esw_cfg.offload_flags |= (BIT_1 | BIT_2);
861                 if (qlcnic_config_switch_port(adapter, &esw_cfg))
862                         return -EIO;
863                 npar = &adapter->npars[i];
864                 npar->pvid = esw_cfg.vlan_id;
865                 npar->mac_override = esw_cfg.mac_override;
866                 npar->mac_anti_spoof = esw_cfg.mac_anti_spoof;
867                 npar->discard_tagged = esw_cfg.discard_tagged;
868                 npar->promisc_mode = esw_cfg.promisc_mode;
869                 npar->offload_flags = esw_cfg.offload_flags;
870         }
871
872         return 0;
873 }
874
875 static int
876 qlcnic_reset_eswitch_config(struct qlcnic_adapter *adapter,
877                         struct qlcnic_npar_info *npar, int pci_func)
878 {
879         struct qlcnic_esw_func_cfg esw_cfg;
880         esw_cfg.op_mode = QLCNIC_PORT_DEFAULTS;
881         esw_cfg.pci_func = pci_func;
882         esw_cfg.vlan_id = npar->pvid;
883         esw_cfg.mac_override = npar->mac_override;
884         esw_cfg.discard_tagged = npar->discard_tagged;
885         esw_cfg.mac_anti_spoof = npar->mac_anti_spoof;
886         esw_cfg.offload_flags = npar->offload_flags;
887         esw_cfg.promisc_mode = npar->promisc_mode;
888         if (qlcnic_config_switch_port(adapter, &esw_cfg))
889                 return -EIO;
890
891         esw_cfg.op_mode = QLCNIC_ADD_VLAN;
892         if (qlcnic_config_switch_port(adapter, &esw_cfg))
893                 return -EIO;
894
895         return 0;
896 }
897
898 static int
899 qlcnic_reset_npar_config(struct qlcnic_adapter *adapter)
900 {
901         int i, err;
902         struct qlcnic_npar_info *npar;
903         struct qlcnic_info nic_info;
904
905         if (!adapter->need_fw_reset)
906                 return 0;
907
908         /* Set the NPAR config data after FW reset */
909         for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) {
910                 npar = &adapter->npars[i];
911                 if (npar->type != QLCNIC_TYPE_NIC)
912                         continue;
913                 err = qlcnic_get_nic_info(adapter, &nic_info, i);
914                 if (err)
915                         return err;
916                 nic_info.min_tx_bw = npar->min_bw;
917                 nic_info.max_tx_bw = npar->max_bw;
918                 err = qlcnic_set_nic_info(adapter, &nic_info);
919                 if (err)
920                         return err;
921
922                 if (npar->enable_pm) {
923                         err = qlcnic_config_port_mirroring(adapter,
924                                                         npar->dest_npar, 1, i);
925                         if (err)
926                                 return err;
927                 }
928                 err = qlcnic_reset_eswitch_config(adapter, npar, i);
929                 if (err)
930                         return err;
931         }
932         return 0;
933 }
934
935 static int qlcnic_check_npar_opertional(struct qlcnic_adapter *adapter)
936 {
937         u8 npar_opt_timeo = QLCNIC_DEV_NPAR_OPER_TIMEO;
938         u32 npar_state;
939
940         if (adapter->op_mode == QLCNIC_MGMT_FUNC)
941                 return 0;
942
943         npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE);
944         while (npar_state != QLCNIC_DEV_NPAR_OPER && --npar_opt_timeo) {
945                 msleep(1000);
946                 npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE);
947         }
948         if (!npar_opt_timeo) {
949                 dev_err(&adapter->pdev->dev,
950                         "Waiting for NPAR state to opertional timeout\n");
951                 return -EIO;
952         }
953         return 0;
954 }
955
956 static int
957 qlcnic_set_mgmt_operations(struct qlcnic_adapter *adapter)
958 {
959         int err;
960
961         if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED) ||
962                     adapter->op_mode != QLCNIC_MGMT_FUNC)
963                 return 0;
964
965         err = qlcnic_set_default_offload_settings(adapter);
966         if (err)
967                 return err;
968
969         err = qlcnic_reset_npar_config(adapter);
970         if (err)
971                 return err;
972
973         qlcnic_dev_set_npar_ready(adapter);
974
975         return err;
976 }
977
978 static int
979 qlcnic_start_firmware(struct qlcnic_adapter *adapter)
980 {
981         int err;
982
983         err = qlcnic_can_start_firmware(adapter);
984         if (err < 0)
985                 return err;
986         else if (!err)
987                 goto check_fw_status;
988
989         if (load_fw_file)
990                 qlcnic_request_firmware(adapter);
991         else {
992                 err = qlcnic_check_flash_fw_ver(adapter);
993                 if (err)
994                         goto err_out;
995
996                 adapter->fw_type = QLCNIC_FLASH_ROMIMAGE;
997         }
998
999         err = qlcnic_need_fw_reset(adapter);
1000         if (err == 0)
1001                 goto check_fw_status;
1002
1003         err = qlcnic_pinit_from_rom(adapter);
1004         if (err)
1005                 goto err_out;
1006
1007         err = qlcnic_load_firmware(adapter);
1008         if (err)
1009                 goto err_out;
1010
1011         qlcnic_release_firmware(adapter);
1012         QLCWR32(adapter, CRB_DRIVER_VERSION, QLCNIC_DRIVER_VERSION);
1013
1014 check_fw_status:
1015         err = qlcnic_check_fw_status(adapter);
1016         if (err)
1017                 goto err_out;
1018
1019         QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_READY);
1020         qlcnic_idc_debug_info(adapter, 1);
1021
1022         err = qlcnic_check_eswitch_mode(adapter);
1023         if (err) {
1024                 dev_err(&adapter->pdev->dev,
1025                         "Memory allocation failed for eswitch\n");
1026                 goto err_out;
1027         }
1028         err = qlcnic_set_mgmt_operations(adapter);
1029         if (err)
1030                 goto err_out;
1031
1032         qlcnic_check_options(adapter);
1033         adapter->need_fw_reset = 0;
1034
1035         qlcnic_release_firmware(adapter);
1036         return 0;
1037
1038 err_out:
1039         QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_FAILED);
1040         dev_err(&adapter->pdev->dev, "Device state set to failed\n");
1041
1042         qlcnic_release_firmware(adapter);
1043         return err;
1044 }
1045
1046 static int
1047 qlcnic_request_irq(struct qlcnic_adapter *adapter)
1048 {
1049         irq_handler_t handler;
1050         struct qlcnic_host_sds_ring *sds_ring;
1051         int err, ring;
1052
1053         unsigned long flags = 0;
1054         struct net_device *netdev = adapter->netdev;
1055         struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
1056
1057         if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) {
1058                 handler = qlcnic_tmp_intr;
1059                 if (!QLCNIC_IS_MSI_FAMILY(adapter))
1060                         flags |= IRQF_SHARED;
1061
1062         } else {
1063                 if (adapter->flags & QLCNIC_MSIX_ENABLED)
1064                         handler = qlcnic_msix_intr;
1065                 else if (adapter->flags & QLCNIC_MSI_ENABLED)
1066                         handler = qlcnic_msi_intr;
1067                 else {
1068                         flags |= IRQF_SHARED;
1069                         handler = qlcnic_intr;
1070                 }
1071         }
1072         adapter->irq = netdev->irq;
1073
1074         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
1075                 sds_ring = &recv_ctx->sds_rings[ring];
1076                 sprintf(sds_ring->name, "%s[%d]", netdev->name, ring);
1077                 err = request_irq(sds_ring->irq, handler,
1078                                   flags, sds_ring->name, sds_ring);
1079                 if (err)
1080                         return err;
1081         }
1082
1083         return 0;
1084 }
1085
1086 static void
1087 qlcnic_free_irq(struct qlcnic_adapter *adapter)
1088 {
1089         int ring;
1090         struct qlcnic_host_sds_ring *sds_ring;
1091
1092         struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
1093
1094         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
1095                 sds_ring = &recv_ctx->sds_rings[ring];
1096                 free_irq(sds_ring->irq, sds_ring);
1097         }
1098 }
1099
1100 static void
1101 qlcnic_init_coalesce_defaults(struct qlcnic_adapter *adapter)
1102 {
1103         adapter->coal.flags = QLCNIC_INTR_DEFAULT;
1104         adapter->coal.normal.data.rx_time_us =
1105                 QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US;
1106         adapter->coal.normal.data.rx_packets =
1107                 QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS;
1108         adapter->coal.normal.data.tx_time_us =
1109                 QLCNIC_DEFAULT_INTR_COALESCE_TX_TIME_US;
1110         adapter->coal.normal.data.tx_packets =
1111                 QLCNIC_DEFAULT_INTR_COALESCE_TX_PACKETS;
1112 }
1113
1114 static int
1115 __qlcnic_up(struct qlcnic_adapter *adapter, struct net_device *netdev)
1116 {
1117         int ring;
1118         struct qlcnic_host_rds_ring *rds_ring;
1119
1120         if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
1121                 return -EIO;
1122
1123         if (test_bit(__QLCNIC_DEV_UP, &adapter->state))
1124                 return 0;
1125         if (qlcnic_set_eswitch_port_config(adapter))
1126                 return -EIO;
1127
1128         if (qlcnic_fw_create_ctx(adapter))
1129                 return -EIO;
1130
1131         for (ring = 0; ring < adapter->max_rds_rings; ring++) {
1132                 rds_ring = &adapter->recv_ctx->rds_rings[ring];
1133                 qlcnic_post_rx_buffers(adapter, rds_ring);
1134         }
1135
1136         qlcnic_set_multi(netdev);
1137         qlcnic_fw_cmd_set_mtu(adapter, netdev->mtu);
1138
1139         adapter->ahw->linkup = 0;
1140
1141         if (adapter->max_sds_rings > 1)
1142                 qlcnic_config_rss(adapter, 1);
1143
1144         qlcnic_config_intr_coalesce(adapter);
1145
1146         if (netdev->features & NETIF_F_LRO)
1147                 qlcnic_config_hw_lro(adapter, QLCNIC_LRO_ENABLED);
1148
1149         qlcnic_napi_enable(adapter);
1150
1151         qlcnic_linkevent_request(adapter, 1);
1152
1153         adapter->reset_context = 0;
1154         set_bit(__QLCNIC_DEV_UP, &adapter->state);
1155         return 0;
1156 }
1157
1158 /* Usage: During resume and firmware recovery module.*/
1159
1160 static int
1161 qlcnic_up(struct qlcnic_adapter *adapter, struct net_device *netdev)
1162 {
1163         int err = 0;
1164
1165         rtnl_lock();
1166         if (netif_running(netdev))
1167                 err = __qlcnic_up(adapter, netdev);
1168         rtnl_unlock();
1169
1170         return err;
1171 }
1172
1173 static void
1174 __qlcnic_down(struct qlcnic_adapter *adapter, struct net_device *netdev)
1175 {
1176         if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
1177                 return;
1178
1179         if (!test_and_clear_bit(__QLCNIC_DEV_UP, &adapter->state))
1180                 return;
1181
1182         smp_mb();
1183         spin_lock(&adapter->tx_clean_lock);
1184         netif_carrier_off(netdev);
1185         netif_tx_disable(netdev);
1186
1187         qlcnic_free_mac_list(adapter);
1188
1189         if (adapter->fhash.fnum)
1190                 qlcnic_delete_lb_filters(adapter);
1191
1192         qlcnic_nic_set_promisc(adapter, QLCNIC_NIU_NON_PROMISC_MODE);
1193
1194         qlcnic_napi_disable(adapter);
1195
1196         qlcnic_fw_destroy_ctx(adapter);
1197
1198         qlcnic_reset_rx_buffers_list(adapter);
1199         qlcnic_release_tx_buffers(adapter);
1200         spin_unlock(&adapter->tx_clean_lock);
1201 }
1202
1203 /* Usage: During suspend and firmware recovery module */
1204
1205 static void
1206 qlcnic_down(struct qlcnic_adapter *adapter, struct net_device *netdev)
1207 {
1208         rtnl_lock();
1209         if (netif_running(netdev))
1210                 __qlcnic_down(adapter, netdev);
1211         rtnl_unlock();
1212
1213 }
1214
1215 static int
1216 qlcnic_attach(struct qlcnic_adapter *adapter)
1217 {
1218         struct net_device *netdev = adapter->netdev;
1219         struct pci_dev *pdev = adapter->pdev;
1220         int err;
1221
1222         if (adapter->is_up == QLCNIC_ADAPTER_UP_MAGIC)
1223                 return 0;
1224
1225         err = qlcnic_napi_add(adapter, netdev);
1226         if (err)
1227                 return err;
1228
1229         err = qlcnic_alloc_sw_resources(adapter);
1230         if (err) {
1231                 dev_err(&pdev->dev, "Error in setting sw resources\n");
1232                 goto err_out_napi_del;
1233         }
1234
1235         err = qlcnic_alloc_hw_resources(adapter);
1236         if (err) {
1237                 dev_err(&pdev->dev, "Error in setting hw resources\n");
1238                 goto err_out_free_sw;
1239         }
1240
1241         err = qlcnic_request_irq(adapter);
1242         if (err) {
1243                 dev_err(&pdev->dev, "failed to setup interrupt\n");
1244                 goto err_out_free_hw;
1245         }
1246
1247         qlcnic_init_coalesce_defaults(adapter);
1248
1249         qlcnic_create_sysfs_entries(adapter);
1250
1251         adapter->is_up = QLCNIC_ADAPTER_UP_MAGIC;
1252         return 0;
1253
1254 err_out_free_hw:
1255         qlcnic_free_hw_resources(adapter);
1256 err_out_free_sw:
1257         qlcnic_free_sw_resources(adapter);
1258 err_out_napi_del:
1259         qlcnic_napi_del(adapter);
1260         return err;
1261 }
1262
1263 static void
1264 qlcnic_detach(struct qlcnic_adapter *adapter)
1265 {
1266         if (adapter->is_up != QLCNIC_ADAPTER_UP_MAGIC)
1267                 return;
1268
1269         qlcnic_remove_sysfs_entries(adapter);
1270
1271         qlcnic_free_hw_resources(adapter);
1272         qlcnic_release_rx_buffers(adapter);
1273         qlcnic_free_irq(adapter);
1274         qlcnic_napi_del(adapter);
1275         qlcnic_free_sw_resources(adapter);
1276
1277         adapter->is_up = 0;
1278 }
1279
1280 void qlcnic_diag_free_res(struct net_device *netdev, int max_sds_rings)
1281 {
1282         struct qlcnic_adapter *adapter = netdev_priv(netdev);
1283         struct qlcnic_host_sds_ring *sds_ring;
1284         int ring;
1285
1286         clear_bit(__QLCNIC_DEV_UP, &adapter->state);
1287         if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) {
1288                 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
1289                         sds_ring = &adapter->recv_ctx->sds_rings[ring];
1290                         qlcnic_disable_int(sds_ring);
1291                 }
1292         }
1293
1294         qlcnic_fw_destroy_ctx(adapter);
1295
1296         qlcnic_detach(adapter);
1297
1298         adapter->diag_test = 0;
1299         adapter->max_sds_rings = max_sds_rings;
1300
1301         if (qlcnic_attach(adapter))
1302                 goto out;
1303
1304         if (netif_running(netdev))
1305                 __qlcnic_up(adapter, netdev);
1306 out:
1307         netif_device_attach(netdev);
1308 }
1309
1310 static int qlcnic_alloc_adapter_resources(struct qlcnic_adapter *adapter)
1311 {
1312         int err = 0;
1313         adapter->ahw = kzalloc(sizeof(struct qlcnic_hardware_context),
1314                                 GFP_KERNEL);
1315         if (!adapter->ahw) {
1316                 dev_err(&adapter->pdev->dev,
1317                         "Failed to allocate recv ctx resources for adapter\n");
1318                 err = -ENOMEM;
1319                 goto err_out;
1320         }
1321         adapter->recv_ctx = kzalloc(sizeof(struct qlcnic_recv_context),
1322                                 GFP_KERNEL);
1323         if (!adapter->recv_ctx) {
1324                 dev_err(&adapter->pdev->dev,
1325                         "Failed to allocate recv ctx resources for adapter\n");
1326                 kfree(adapter->ahw);
1327                 adapter->ahw = NULL;
1328                 err = -ENOMEM;
1329         }
1330 err_out:
1331         return err;
1332 }
1333
1334 static void qlcnic_free_adapter_resources(struct qlcnic_adapter *adapter)
1335 {
1336         kfree(adapter->recv_ctx);
1337         adapter->recv_ctx = NULL;
1338
1339         kfree(adapter->ahw);
1340         adapter->ahw = NULL;
1341 }
1342
1343 int qlcnic_diag_alloc_res(struct net_device *netdev, int test)
1344 {
1345         struct qlcnic_adapter *adapter = netdev_priv(netdev);
1346         struct qlcnic_host_sds_ring *sds_ring;
1347         struct qlcnic_host_rds_ring *rds_ring;
1348         int ring;
1349         int ret;
1350
1351         netif_device_detach(netdev);
1352
1353         if (netif_running(netdev))
1354                 __qlcnic_down(adapter, netdev);
1355
1356         qlcnic_detach(adapter);
1357
1358         adapter->max_sds_rings = 1;
1359         adapter->diag_test = test;
1360
1361         ret = qlcnic_attach(adapter);
1362         if (ret) {
1363                 netif_device_attach(netdev);
1364                 return ret;
1365         }
1366
1367         ret = qlcnic_fw_create_ctx(adapter);
1368         if (ret) {
1369                 qlcnic_detach(adapter);
1370                 netif_device_attach(netdev);
1371                 return ret;
1372         }
1373
1374         for (ring = 0; ring < adapter->max_rds_rings; ring++) {
1375                 rds_ring = &adapter->recv_ctx->rds_rings[ring];
1376                 qlcnic_post_rx_buffers(adapter, rds_ring);
1377         }
1378
1379         if (adapter->diag_test == QLCNIC_INTERRUPT_TEST) {
1380                 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
1381                         sds_ring = &adapter->recv_ctx->sds_rings[ring];
1382                         qlcnic_enable_int(sds_ring);
1383                 }
1384         }
1385         set_bit(__QLCNIC_DEV_UP, &adapter->state);
1386
1387         return 0;
1388 }
1389
1390 /* Reset context in hardware only */
1391 static int
1392 qlcnic_reset_hw_context(struct qlcnic_adapter *adapter)
1393 {
1394         struct net_device *netdev = adapter->netdev;
1395
1396         if (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state))
1397                 return -EBUSY;
1398
1399         netif_device_detach(netdev);
1400
1401         qlcnic_down(adapter, netdev);
1402
1403         qlcnic_up(adapter, netdev);
1404
1405         netif_device_attach(netdev);
1406
1407         clear_bit(__QLCNIC_RESETTING, &adapter->state);
1408         return 0;
1409 }
1410
1411 int
1412 qlcnic_reset_context(struct qlcnic_adapter *adapter)
1413 {
1414         int err = 0;
1415         struct net_device *netdev = adapter->netdev;
1416
1417         if (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state))
1418                 return -EBUSY;
1419
1420         if (adapter->is_up == QLCNIC_ADAPTER_UP_MAGIC) {
1421
1422                 netif_device_detach(netdev);
1423
1424                 if (netif_running(netdev))
1425                         __qlcnic_down(adapter, netdev);
1426
1427                 qlcnic_detach(adapter);
1428
1429                 if (netif_running(netdev)) {
1430                         err = qlcnic_attach(adapter);
1431                         if (!err)
1432                                 __qlcnic_up(adapter, netdev);
1433                 }
1434
1435                 netif_device_attach(netdev);
1436         }
1437
1438         clear_bit(__QLCNIC_RESETTING, &adapter->state);
1439         return err;
1440 }
1441
1442 static int
1443 qlcnic_setup_netdev(struct qlcnic_adapter *adapter,
1444                 struct net_device *netdev, u8 pci_using_dac)
1445 {
1446         int err;
1447         struct pci_dev *pdev = adapter->pdev;
1448
1449         adapter->rx_csum = 1;
1450         adapter->mc_enabled = 0;
1451         adapter->max_mc_count = 38;
1452
1453         netdev->netdev_ops         = &qlcnic_netdev_ops;
1454         netdev->watchdog_timeo     = 5*HZ;
1455
1456         qlcnic_change_mtu(netdev, netdev->mtu);
1457
1458         SET_ETHTOOL_OPS(netdev, &qlcnic_ethtool_ops);
1459
1460         netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM |
1461                 NETIF_F_IPV6_CSUM | NETIF_F_GRO | NETIF_F_HW_VLAN_RX);
1462         netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM |
1463                 NETIF_F_IPV6_CSUM | NETIF_F_HW_VLAN_FILTER);
1464
1465         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) {
1466                 netdev->features |= (NETIF_F_TSO | NETIF_F_TSO6);
1467                 netdev->vlan_features |= (NETIF_F_TSO | NETIF_F_TSO6);
1468         }
1469
1470         if (pci_using_dac) {
1471                 netdev->features |= NETIF_F_HIGHDMA;
1472                 netdev->vlan_features |= NETIF_F_HIGHDMA;
1473         }
1474
1475         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_FVLANTX)
1476                 netdev->features |= (NETIF_F_HW_VLAN_TX);
1477
1478         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_HW_LRO)
1479                 netdev->features |= NETIF_F_LRO;
1480         netdev->irq = adapter->msix_entries[0].vector;
1481
1482         netif_carrier_off(netdev);
1483
1484         err = register_netdev(netdev);
1485         if (err) {
1486                 dev_err(&pdev->dev, "failed to register net device\n");
1487                 return err;
1488         }
1489
1490         return 0;
1491 }
1492
1493 static int qlcnic_set_dma_mask(struct pci_dev *pdev, u8 *pci_using_dac)
1494 {
1495         if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) &&
1496                         !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)))
1497                 *pci_using_dac = 1;
1498         else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) &&
1499                         !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)))
1500                 *pci_using_dac = 0;
1501         else {
1502                 dev_err(&pdev->dev, "Unable to set DMA mask, aborting\n");
1503                 return -EIO;
1504         }
1505
1506         return 0;
1507 }
1508
1509 static int __devinit
1510 qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1511 {
1512         struct net_device *netdev = NULL;
1513         struct qlcnic_adapter *adapter = NULL;
1514         int err;
1515         uint8_t revision_id;
1516         uint8_t pci_using_dac;
1517         char brd_name[QLCNIC_MAX_BOARD_NAME_LEN];
1518
1519         err = pci_enable_device(pdev);
1520         if (err)
1521                 return err;
1522
1523         if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM)) {
1524                 err = -ENODEV;
1525                 goto err_out_disable_pdev;
1526         }
1527
1528         err = qlcnic_set_dma_mask(pdev, &pci_using_dac);
1529         if (err)
1530                 goto err_out_disable_pdev;
1531
1532         err = pci_request_regions(pdev, qlcnic_driver_name);
1533         if (err)
1534                 goto err_out_disable_pdev;
1535
1536         pci_set_master(pdev);
1537         pci_enable_pcie_error_reporting(pdev);
1538
1539         netdev = alloc_etherdev(sizeof(struct qlcnic_adapter));
1540         if (!netdev) {
1541                 dev_err(&pdev->dev, "failed to allocate net_device\n");
1542                 err = -ENOMEM;
1543                 goto err_out_free_res;
1544         }
1545
1546         SET_NETDEV_DEV(netdev, &pdev->dev);
1547
1548         adapter = netdev_priv(netdev);
1549         adapter->netdev  = netdev;
1550         adapter->pdev    = pdev;
1551
1552         if (qlcnic_alloc_adapter_resources(adapter))
1553                 goto err_out_free_netdev;
1554
1555         adapter->dev_rst_time = jiffies;
1556         revision_id = pdev->revision;
1557         adapter->ahw->revision_id = revision_id;
1558
1559         rwlock_init(&adapter->ahw->crb_lock);
1560         mutex_init(&adapter->ahw->mem_lock);
1561
1562         spin_lock_init(&adapter->tx_clean_lock);
1563         INIT_LIST_HEAD(&adapter->mac_list);
1564
1565         err = qlcnic_setup_pci_map(adapter);
1566         if (err)
1567                 goto err_out_free_hw;
1568
1569         /* This will be reset for mezz cards  */
1570         adapter->portnum = adapter->ahw->pci_func;
1571
1572         err = qlcnic_get_board_info(adapter);
1573         if (err) {
1574                 dev_err(&pdev->dev, "Error getting board config info.\n");
1575                 goto err_out_iounmap;
1576         }
1577
1578         err = qlcnic_setup_idc_param(adapter);
1579         if (err)
1580                 goto err_out_iounmap;
1581
1582         adapter->flags |= QLCNIC_NEED_FLR;
1583
1584         err = adapter->nic_ops->start_firmware(adapter);
1585         if (err) {
1586                 dev_err(&pdev->dev, "Loading fw failed.Please Reboot\n");
1587                 goto err_out_decr_ref;
1588         }
1589
1590         if (qlcnic_read_mac_addr(adapter))
1591                 dev_warn(&pdev->dev, "failed to read mac addr\n");
1592
1593         if (adapter->portnum == 0) {
1594                 get_brd_name(adapter, brd_name);
1595
1596                 pr_info("%s: %s Board Chip rev 0x%x\n",
1597                                 module_name(THIS_MODULE),
1598                                 brd_name, adapter->ahw->revision_id);
1599         }
1600
1601         qlcnic_clear_stats(adapter);
1602
1603         qlcnic_setup_intr(adapter);
1604
1605         err = qlcnic_setup_netdev(adapter, netdev, pci_using_dac);
1606         if (err)
1607                 goto err_out_disable_msi;
1608
1609         pci_set_drvdata(pdev, adapter);
1610
1611         qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY);
1612
1613         switch (adapter->ahw->port_type) {
1614         case QLCNIC_GBE:
1615                 dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n",
1616                                 adapter->netdev->name);
1617                 break;
1618         case QLCNIC_XGBE:
1619                 dev_info(&adapter->pdev->dev, "%s: XGbE port initialized\n",
1620                                 adapter->netdev->name);
1621                 break;
1622         }
1623
1624         qlcnic_alloc_lb_filters_mem(adapter);
1625         qlcnic_create_diag_entries(adapter);
1626
1627         return 0;
1628
1629 err_out_disable_msi:
1630         qlcnic_teardown_intr(adapter);
1631
1632 err_out_decr_ref:
1633         qlcnic_clr_all_drv_state(adapter, 0);
1634
1635 err_out_iounmap:
1636         qlcnic_cleanup_pci_map(adapter);
1637
1638 err_out_free_hw:
1639         qlcnic_free_adapter_resources(adapter);
1640
1641 err_out_free_netdev:
1642         free_netdev(netdev);
1643
1644 err_out_free_res:
1645         pci_release_regions(pdev);
1646
1647 err_out_disable_pdev:
1648         pci_set_drvdata(pdev, NULL);
1649         pci_disable_device(pdev);
1650         return err;
1651 }
1652
1653 static void __devexit qlcnic_remove(struct pci_dev *pdev)
1654 {
1655         struct qlcnic_adapter *adapter;
1656         struct net_device *netdev;
1657
1658         adapter = pci_get_drvdata(pdev);
1659         if (adapter == NULL)
1660                 return;
1661
1662         netdev = adapter->netdev;
1663
1664         qlcnic_cancel_fw_work(adapter);
1665
1666         unregister_netdev(netdev);
1667
1668         qlcnic_detach(adapter);
1669
1670         if (adapter->npars != NULL)
1671                 kfree(adapter->npars);
1672         if (adapter->eswitch != NULL)
1673                 kfree(adapter->eswitch);
1674
1675         qlcnic_clr_all_drv_state(adapter, 0);
1676
1677         clear_bit(__QLCNIC_RESETTING, &adapter->state);
1678
1679         qlcnic_free_lb_filters_mem(adapter);
1680
1681         qlcnic_teardown_intr(adapter);
1682
1683         qlcnic_remove_diag_entries(adapter);
1684
1685         qlcnic_cleanup_pci_map(adapter);
1686
1687         qlcnic_release_firmware(adapter);
1688
1689         pci_disable_pcie_error_reporting(pdev);
1690         pci_release_regions(pdev);
1691         pci_disable_device(pdev);
1692         pci_set_drvdata(pdev, NULL);
1693
1694         qlcnic_free_adapter_resources(adapter);
1695         free_netdev(netdev);
1696 }
1697 static int __qlcnic_shutdown(struct pci_dev *pdev)
1698 {
1699         struct qlcnic_adapter *adapter = pci_get_drvdata(pdev);
1700         struct net_device *netdev = adapter->netdev;
1701         int retval;
1702
1703         netif_device_detach(netdev);
1704
1705         qlcnic_cancel_fw_work(adapter);
1706
1707         if (netif_running(netdev))
1708                 qlcnic_down(adapter, netdev);
1709
1710         qlcnic_clr_all_drv_state(adapter, 0);
1711
1712         clear_bit(__QLCNIC_RESETTING, &adapter->state);
1713
1714         retval = pci_save_state(pdev);
1715         if (retval)
1716                 return retval;
1717
1718         if (qlcnic_wol_supported(adapter)) {
1719                 pci_enable_wake(pdev, PCI_D3cold, 1);
1720                 pci_enable_wake(pdev, PCI_D3hot, 1);
1721         }
1722
1723         return 0;
1724 }
1725
1726 static void qlcnic_shutdown(struct pci_dev *pdev)
1727 {
1728         if (__qlcnic_shutdown(pdev))
1729                 return;
1730
1731         pci_disable_device(pdev);
1732 }
1733
1734 #ifdef CONFIG_PM
1735 static int
1736 qlcnic_suspend(struct pci_dev *pdev, pm_message_t state)
1737 {
1738         int retval;
1739
1740         retval = __qlcnic_shutdown(pdev);
1741         if (retval)
1742                 return retval;
1743
1744         pci_set_power_state(pdev, pci_choose_state(pdev, state));
1745         return 0;
1746 }
1747
1748 static int
1749 qlcnic_resume(struct pci_dev *pdev)
1750 {
1751         struct qlcnic_adapter *adapter = pci_get_drvdata(pdev);
1752         struct net_device *netdev = adapter->netdev;
1753         int err;
1754
1755         err = pci_enable_device(pdev);
1756         if (err)
1757                 return err;
1758
1759         pci_set_power_state(pdev, PCI_D0);
1760         pci_set_master(pdev);
1761         pci_restore_state(pdev);
1762
1763         err = adapter->nic_ops->start_firmware(adapter);
1764         if (err) {
1765                 dev_err(&pdev->dev, "failed to start firmware\n");
1766                 return err;
1767         }
1768
1769         if (netif_running(netdev)) {
1770                 err = qlcnic_up(adapter, netdev);
1771                 if (err)
1772                         goto done;
1773
1774                 qlcnic_restore_indev_addr(netdev, NETDEV_UP);
1775         }
1776 done:
1777         netif_device_attach(netdev);
1778         qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY);
1779         return 0;
1780 }
1781 #endif
1782
1783 static int qlcnic_open(struct net_device *netdev)
1784 {
1785         struct qlcnic_adapter *adapter = netdev_priv(netdev);
1786         int err;
1787
1788         err = qlcnic_attach(adapter);
1789         if (err)
1790                 return err;
1791
1792         err = __qlcnic_up(adapter, netdev);
1793         if (err)
1794                 goto err_out;
1795
1796         netif_start_queue(netdev);
1797
1798         return 0;
1799
1800 err_out:
1801         qlcnic_detach(adapter);
1802         return err;
1803 }
1804
1805 /*
1806  * qlcnic_close - Disables a network interface entry point
1807  */
1808 static int qlcnic_close(struct net_device *netdev)
1809 {
1810         struct qlcnic_adapter *adapter = netdev_priv(netdev);
1811
1812         __qlcnic_down(adapter, netdev);
1813         return 0;
1814 }
1815
1816 static void
1817 qlcnic_alloc_lb_filters_mem(struct qlcnic_adapter *adapter)
1818 {
1819         void *head;
1820         int i;
1821
1822         if (!qlcnic_mac_learn)
1823                 return;
1824
1825         spin_lock_init(&adapter->mac_learn_lock);
1826
1827         head = kcalloc(QLCNIC_LB_MAX_FILTERS, sizeof(struct hlist_head),
1828                                                                 GFP_KERNEL);
1829         if (!head)
1830                 return;
1831
1832         adapter->fhash.fmax = QLCNIC_LB_MAX_FILTERS;
1833         adapter->fhash.fhead = (struct hlist_head *)head;
1834
1835         for (i = 0; i < adapter->fhash.fmax; i++)
1836                 INIT_HLIST_HEAD(&adapter->fhash.fhead[i]);
1837 }
1838
1839 static void qlcnic_free_lb_filters_mem(struct qlcnic_adapter *adapter)
1840 {
1841         if (adapter->fhash.fmax && adapter->fhash.fhead)
1842                 kfree(adapter->fhash.fhead);
1843
1844         adapter->fhash.fhead = NULL;
1845         adapter->fhash.fmax = 0;
1846 }
1847
1848 static void qlcnic_change_filter(struct qlcnic_adapter *adapter,
1849                 u64 uaddr, __le16 vlan_id, struct qlcnic_host_tx_ring *tx_ring)
1850 {
1851         struct cmd_desc_type0 *hwdesc;
1852         struct qlcnic_nic_req *req;
1853         struct qlcnic_mac_req *mac_req;
1854         struct qlcnic_vlan_req *vlan_req;
1855         u32 producer;
1856         u64 word;
1857
1858         producer = tx_ring->producer;
1859         hwdesc = &tx_ring->desc_head[tx_ring->producer];
1860
1861         req = (struct qlcnic_nic_req *)hwdesc;
1862         memset(req, 0, sizeof(struct qlcnic_nic_req));
1863         req->qhdr = cpu_to_le64(QLCNIC_REQUEST << 23);
1864
1865         word = QLCNIC_MAC_EVENT | ((u64)(adapter->portnum) << 16);
1866         req->req_hdr = cpu_to_le64(word);
1867
1868         mac_req = (struct qlcnic_mac_req *)&(req->words[0]);
1869         mac_req->op = vlan_id ? QLCNIC_MAC_VLAN_ADD : QLCNIC_MAC_ADD;
1870         memcpy(mac_req->mac_addr, &uaddr, ETH_ALEN);
1871
1872         vlan_req = (struct qlcnic_vlan_req *)&req->words[1];
1873         vlan_req->vlan_id = vlan_id;
1874
1875         tx_ring->producer = get_next_index(producer, tx_ring->num_desc);
1876         smp_mb();
1877 }
1878
1879 #define QLCNIC_MAC_HASH(MAC)\
1880         ((((MAC) & 0x70000) >> 0x10) | (((MAC) & 0x70000000000ULL) >> 0x25))
1881
1882 static void
1883 qlcnic_send_filter(struct qlcnic_adapter *adapter,
1884                 struct qlcnic_host_tx_ring *tx_ring,
1885                 struct cmd_desc_type0 *first_desc,
1886                 struct sk_buff *skb)
1887 {
1888         struct ethhdr *phdr = (struct ethhdr *)(skb->data);
1889         struct qlcnic_filter *fil, *tmp_fil;
1890         struct hlist_node *tmp_hnode, *n;
1891         struct hlist_head *head;
1892         u64 src_addr = 0;
1893         __le16 vlan_id = 0;
1894         u8 hindex;
1895
1896         if (!compare_ether_addr(phdr->h_source, adapter->mac_addr))
1897                 return;
1898
1899         if (adapter->fhash.fnum >= adapter->fhash.fmax)
1900                 return;
1901
1902         /* Only NPAR capable devices support vlan based learning*/
1903         if (adapter->flags & QLCNIC_ESWITCH_ENABLED)
1904                 vlan_id = first_desc->vlan_TCI;
1905         memcpy(&src_addr, phdr->h_source, ETH_ALEN);
1906         hindex = QLCNIC_MAC_HASH(src_addr) & (QLCNIC_LB_MAX_FILTERS - 1);
1907         head = &(adapter->fhash.fhead[hindex]);
1908
1909         hlist_for_each_entry_safe(tmp_fil, tmp_hnode, n, head, fnode) {
1910                 if (!memcmp(tmp_fil->faddr, &src_addr, ETH_ALEN) &&
1911                             tmp_fil->vlan_id == vlan_id) {
1912
1913                         if (jiffies >
1914                             (QLCNIC_READD_AGE * HZ + tmp_fil->ftime))
1915                                 qlcnic_change_filter(adapter, src_addr, vlan_id,
1916                                                                 tx_ring);
1917                         tmp_fil->ftime = jiffies;
1918                         return;
1919                 }
1920         }
1921
1922         fil = kzalloc(sizeof(struct qlcnic_filter), GFP_ATOMIC);
1923         if (!fil)
1924                 return;
1925
1926         qlcnic_change_filter(adapter, src_addr, vlan_id, tx_ring);
1927
1928         fil->ftime = jiffies;
1929         fil->vlan_id = vlan_id;
1930         memcpy(fil->faddr, &src_addr, ETH_ALEN);
1931         spin_lock(&adapter->mac_learn_lock);
1932         hlist_add_head(&(fil->fnode), head);
1933         adapter->fhash.fnum++;
1934         spin_unlock(&adapter->mac_learn_lock);
1935 }
1936
1937 static int
1938 qlcnic_tx_pkt(struct qlcnic_adapter *adapter,
1939                 struct cmd_desc_type0 *first_desc,
1940                 struct sk_buff *skb)
1941 {
1942         u8 opcode = 0, hdr_len = 0;
1943         u16 flags = 0, vlan_tci = 0;
1944         int copied, offset, copy_len;
1945         struct cmd_desc_type0 *hwdesc;
1946         struct vlan_ethhdr *vh;
1947         struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring;
1948         u16 protocol = ntohs(skb->protocol);
1949         u32 producer = tx_ring->producer;
1950
1951         if (protocol == ETH_P_8021Q) {
1952                 vh = (struct vlan_ethhdr *)skb->data;
1953                 flags = FLAGS_VLAN_TAGGED;
1954                 vlan_tci = vh->h_vlan_TCI;
1955         } else if (vlan_tx_tag_present(skb)) {
1956                 flags = FLAGS_VLAN_OOB;
1957                 vlan_tci = vlan_tx_tag_get(skb);
1958         }
1959         if (unlikely(adapter->pvid)) {
1960                 if (vlan_tci && !(adapter->flags & QLCNIC_TAGGING_ENABLED))
1961                         return -EIO;
1962                 if (vlan_tci && (adapter->flags & QLCNIC_TAGGING_ENABLED))
1963                         goto set_flags;
1964
1965                 flags = FLAGS_VLAN_OOB;
1966                 vlan_tci = adapter->pvid;
1967         }
1968 set_flags:
1969         qlcnic_set_tx_vlan_tci(first_desc, vlan_tci);
1970         qlcnic_set_tx_flags_opcode(first_desc, flags, opcode);
1971
1972         if (*(skb->data) & BIT_0) {
1973                 flags |= BIT_0;
1974                 memcpy(&first_desc->eth_addr, skb->data, ETH_ALEN);
1975         }
1976         opcode = TX_ETHER_PKT;
1977         if ((adapter->netdev->features & (NETIF_F_TSO | NETIF_F_TSO6)) &&
1978                         skb_shinfo(skb)->gso_size > 0) {
1979
1980                 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
1981
1982                 first_desc->mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
1983                 first_desc->total_hdr_length = hdr_len;
1984
1985                 opcode = (protocol == ETH_P_IPV6) ? TX_TCP_LSO6 : TX_TCP_LSO;
1986
1987                 /* For LSO, we need to copy the MAC/IP/TCP headers into
1988                 * the descriptor ring */
1989                 copied = 0;
1990                 offset = 2;
1991
1992                 if (flags & FLAGS_VLAN_OOB) {
1993                         first_desc->total_hdr_length += VLAN_HLEN;
1994                         first_desc->tcp_hdr_offset = VLAN_HLEN;
1995                         first_desc->ip_hdr_offset = VLAN_HLEN;
1996                         /* Only in case of TSO on vlan device */
1997                         flags |= FLAGS_VLAN_TAGGED;
1998
1999                         /* Create a TSO vlan header template for firmware */
2000
2001                         hwdesc = &tx_ring->desc_head[producer];
2002                         tx_ring->cmd_buf_arr[producer].skb = NULL;
2003
2004                         copy_len = min((int)sizeof(struct cmd_desc_type0) -
2005                                 offset, hdr_len + VLAN_HLEN);
2006
2007                         vh = (struct vlan_ethhdr *)((char *) hwdesc + 2);
2008                         skb_copy_from_linear_data(skb, vh, 12);
2009                         vh->h_vlan_proto = htons(ETH_P_8021Q);
2010                         vh->h_vlan_TCI = htons(vlan_tci);
2011
2012                         skb_copy_from_linear_data_offset(skb, 12,
2013                                 (char *)vh + 16, copy_len - 16);
2014
2015                         copied = copy_len - VLAN_HLEN;
2016                         offset = 0;
2017
2018                         producer = get_next_index(producer, tx_ring->num_desc);
2019                 }
2020
2021                 while (copied < hdr_len) {
2022
2023                         copy_len = min((int)sizeof(struct cmd_desc_type0) -
2024                                 offset, (hdr_len - copied));
2025
2026                         hwdesc = &tx_ring->desc_head[producer];
2027                         tx_ring->cmd_buf_arr[producer].skb = NULL;
2028
2029                         skb_copy_from_linear_data_offset(skb, copied,
2030                                  (char *) hwdesc + offset, copy_len);
2031
2032                         copied += copy_len;
2033                         offset = 0;
2034
2035                         producer = get_next_index(producer, tx_ring->num_desc);
2036                 }
2037
2038                 tx_ring->producer = producer;
2039                 smp_mb();
2040                 adapter->stats.lso_frames++;
2041
2042         } else if (skb->ip_summed == CHECKSUM_PARTIAL) {
2043                 u8 l4proto;
2044
2045                 if (protocol == ETH_P_IP) {
2046                         l4proto = ip_hdr(skb)->protocol;
2047
2048                         if (l4proto == IPPROTO_TCP)
2049                                 opcode = TX_TCP_PKT;
2050                         else if (l4proto == IPPROTO_UDP)
2051                                 opcode = TX_UDP_PKT;
2052                 } else if (protocol == ETH_P_IPV6) {
2053                         l4proto = ipv6_hdr(skb)->nexthdr;
2054
2055                         if (l4proto == IPPROTO_TCP)
2056                                 opcode = TX_TCPV6_PKT;
2057                         else if (l4proto == IPPROTO_UDP)
2058                                 opcode = TX_UDPV6_PKT;
2059                 }
2060         }
2061         first_desc->tcp_hdr_offset += skb_transport_offset(skb);
2062         first_desc->ip_hdr_offset += skb_network_offset(skb);
2063         qlcnic_set_tx_flags_opcode(first_desc, flags, opcode);
2064
2065         return 0;
2066 }
2067
2068 static int
2069 qlcnic_map_tx_skb(struct pci_dev *pdev,
2070                 struct sk_buff *skb, struct qlcnic_cmd_buffer *pbuf)
2071 {
2072         struct qlcnic_skb_frag *nf;
2073         struct skb_frag_struct *frag;
2074         int i, nr_frags;
2075         dma_addr_t map;
2076
2077         nr_frags = skb_shinfo(skb)->nr_frags;
2078         nf = &pbuf->frag_array[0];
2079
2080         map = pci_map_single(pdev, skb->data,
2081                         skb_headlen(skb), PCI_DMA_TODEVICE);
2082         if (pci_dma_mapping_error(pdev, map))
2083                 goto out_err;
2084
2085         nf->dma = map;
2086         nf->length = skb_headlen(skb);
2087
2088         for (i = 0; i < nr_frags; i++) {
2089                 frag = &skb_shinfo(skb)->frags[i];
2090                 nf = &pbuf->frag_array[i+1];
2091
2092                 map = pci_map_page(pdev, frag->page, frag->page_offset,
2093                                 frag->size, PCI_DMA_TODEVICE);
2094                 if (pci_dma_mapping_error(pdev, map))
2095                         goto unwind;
2096
2097                 nf->dma = map;
2098                 nf->length = frag->size;
2099         }
2100
2101         return 0;
2102
2103 unwind:
2104         while (--i >= 0) {
2105                 nf = &pbuf->frag_array[i+1];
2106                 pci_unmap_page(pdev, nf->dma, nf->length, PCI_DMA_TODEVICE);
2107         }
2108
2109         nf = &pbuf->frag_array[0];
2110         pci_unmap_single(pdev, nf->dma, skb_headlen(skb), PCI_DMA_TODEVICE);
2111
2112 out_err:
2113         return -ENOMEM;
2114 }
2115
2116 static void
2117 qlcnic_unmap_buffers(struct pci_dev *pdev, struct sk_buff *skb,
2118                         struct qlcnic_cmd_buffer *pbuf)
2119 {
2120         struct qlcnic_skb_frag *nf = &pbuf->frag_array[0];
2121         int nr_frags = skb_shinfo(skb)->nr_frags;
2122         int i;
2123
2124         for (i = 0; i < nr_frags; i++) {
2125                 nf = &pbuf->frag_array[i+1];
2126                 pci_unmap_page(pdev, nf->dma, nf->length, PCI_DMA_TODEVICE);
2127         }
2128
2129         nf = &pbuf->frag_array[0];
2130         pci_unmap_single(pdev, nf->dma, skb_headlen(skb), PCI_DMA_TODEVICE);
2131 }
2132
2133 static inline void
2134 qlcnic_clear_cmddesc(u64 *desc)
2135 {
2136         desc[0] = 0ULL;
2137         desc[2] = 0ULL;
2138         desc[7] = 0ULL;
2139 }
2140
2141 netdev_tx_t
2142 qlcnic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
2143 {
2144         struct qlcnic_adapter *adapter = netdev_priv(netdev);
2145         struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring;
2146         struct qlcnic_cmd_buffer *pbuf;
2147         struct qlcnic_skb_frag *buffrag;
2148         struct cmd_desc_type0 *hwdesc, *first_desc;
2149         struct pci_dev *pdev;
2150         struct ethhdr *phdr;
2151         int i, k;
2152
2153         u32 producer;
2154         int frag_count;
2155         u32 num_txd = tx_ring->num_desc;
2156
2157         if (!test_bit(__QLCNIC_DEV_UP, &adapter->state)) {
2158                 netif_stop_queue(netdev);
2159                 return NETDEV_TX_BUSY;
2160         }
2161
2162         if (adapter->flags & QLCNIC_MACSPOOF) {
2163                 phdr = (struct ethhdr *)skb->data;
2164                 if (compare_ether_addr(phdr->h_source,
2165                                         adapter->mac_addr))
2166                         goto drop_packet;
2167         }
2168
2169         frag_count = skb_shinfo(skb)->nr_frags + 1;
2170
2171         if (unlikely(qlcnic_tx_avail(tx_ring) <= TX_STOP_THRESH)) {
2172                 netif_stop_queue(netdev);
2173                 if (qlcnic_tx_avail(tx_ring) > TX_STOP_THRESH)
2174                         netif_start_queue(netdev);
2175                 else {
2176                         adapter->stats.xmit_off++;
2177                         return NETDEV_TX_BUSY;
2178                 }
2179         }
2180
2181         producer = tx_ring->producer;
2182         pbuf = &tx_ring->cmd_buf_arr[producer];
2183
2184         pdev = adapter->pdev;
2185
2186         first_desc = hwdesc = &tx_ring->desc_head[producer];
2187         qlcnic_clear_cmddesc((u64 *)hwdesc);
2188
2189         if (qlcnic_map_tx_skb(pdev, skb, pbuf)) {
2190                 adapter->stats.tx_dma_map_error++;
2191                 goto drop_packet;
2192         }
2193
2194         pbuf->skb = skb;
2195         pbuf->frag_count = frag_count;
2196
2197         qlcnic_set_tx_frags_len(first_desc, frag_count, skb->len);
2198         qlcnic_set_tx_port(first_desc, adapter->portnum);
2199
2200         for (i = 0; i < frag_count; i++) {
2201
2202                 k = i % 4;
2203
2204                 if ((k == 0) && (i > 0)) {
2205                         /* move to next desc.*/
2206                         producer = get_next_index(producer, num_txd);
2207                         hwdesc = &tx_ring->desc_head[producer];
2208                         qlcnic_clear_cmddesc((u64 *)hwdesc);
2209                         tx_ring->cmd_buf_arr[producer].skb = NULL;
2210                 }
2211
2212                 buffrag = &pbuf->frag_array[i];
2213
2214                 hwdesc->buffer_length[k] = cpu_to_le16(buffrag->length);
2215                 switch (k) {
2216                 case 0:
2217                         hwdesc->addr_buffer1 = cpu_to_le64(buffrag->dma);
2218                         break;
2219                 case 1:
2220                         hwdesc->addr_buffer2 = cpu_to_le64(buffrag->dma);
2221                         break;
2222                 case 2:
2223                         hwdesc->addr_buffer3 = cpu_to_le64(buffrag->dma);
2224                         break;
2225                 case 3:
2226                         hwdesc->addr_buffer4 = cpu_to_le64(buffrag->dma);
2227                         break;
2228                 }
2229         }
2230
2231         tx_ring->producer = get_next_index(producer, num_txd);
2232         smp_mb();
2233
2234         if (unlikely(qlcnic_tx_pkt(adapter, first_desc, skb)))
2235                 goto unwind_buff;
2236
2237         if (qlcnic_mac_learn)
2238                 qlcnic_send_filter(adapter, tx_ring, first_desc, skb);
2239
2240         qlcnic_update_cmd_producer(adapter, tx_ring);
2241
2242         adapter->stats.txbytes += skb->len;
2243         adapter->stats.xmitcalled++;
2244
2245         return NETDEV_TX_OK;
2246
2247 unwind_buff:
2248         qlcnic_unmap_buffers(pdev, skb, pbuf);
2249 drop_packet:
2250         adapter->stats.txdropped++;
2251         dev_kfree_skb_any(skb);
2252         return NETDEV_TX_OK;
2253 }
2254
2255 static int qlcnic_check_temp(struct qlcnic_adapter *adapter)
2256 {
2257         struct net_device *netdev = adapter->netdev;
2258         u32 temp, temp_state, temp_val;
2259         int rv = 0;
2260
2261         temp = QLCRD32(adapter, CRB_TEMP_STATE);
2262
2263         temp_state = qlcnic_get_temp_state(temp);
2264         temp_val = qlcnic_get_temp_val(temp);
2265
2266         if (temp_state == QLCNIC_TEMP_PANIC) {
2267                 dev_err(&netdev->dev,
2268                        "Device temperature %d degrees C exceeds"
2269                        " maximum allowed. Hardware has been shut down.\n",
2270                        temp_val);
2271                 rv = 1;
2272         } else if (temp_state == QLCNIC_TEMP_WARN) {
2273                 if (adapter->temp == QLCNIC_TEMP_NORMAL) {
2274                         dev_err(&netdev->dev,
2275                                "Device temperature %d degrees C "
2276                                "exceeds operating range."
2277                                " Immediate action needed.\n",
2278                                temp_val);
2279                 }
2280         } else {
2281                 if (adapter->temp == QLCNIC_TEMP_WARN) {
2282                         dev_info(&netdev->dev,
2283                                "Device temperature is now %d degrees C"
2284                                " in normal range.\n", temp_val);
2285                 }
2286         }
2287         adapter->temp = temp_state;
2288         return rv;
2289 }
2290
2291 void qlcnic_advert_link_change(struct qlcnic_adapter *adapter, int linkup)
2292 {
2293         struct net_device *netdev = adapter->netdev;
2294
2295         if (adapter->ahw->linkup && !linkup) {
2296                 netdev_info(netdev, "NIC Link is down\n");
2297                 adapter->ahw->linkup = 0;
2298                 if (netif_running(netdev)) {
2299                         netif_carrier_off(netdev);
2300                         netif_stop_queue(netdev);
2301                 }
2302         } else if (!adapter->ahw->linkup && linkup) {
2303                 netdev_info(netdev, "NIC Link is up\n");
2304                 adapter->ahw->linkup = 1;
2305                 if (netif_running(netdev)) {
2306                         netif_carrier_on(netdev);
2307                         netif_wake_queue(netdev);
2308                 }
2309         }
2310 }
2311
2312 static void qlcnic_tx_timeout(struct net_device *netdev)
2313 {
2314         struct qlcnic_adapter *adapter = netdev_priv(netdev);
2315
2316         if (test_bit(__QLCNIC_RESETTING, &adapter->state))
2317                 return;
2318
2319         dev_err(&netdev->dev, "transmit timeout, resetting.\n");
2320
2321         if (++adapter->tx_timeo_cnt >= QLCNIC_MAX_TX_TIMEOUTS)
2322                 adapter->need_fw_reset = 1;
2323         else
2324                 adapter->reset_context = 1;
2325 }
2326
2327 static struct net_device_stats *qlcnic_get_stats(struct net_device *netdev)
2328 {
2329         struct qlcnic_adapter *adapter = netdev_priv(netdev);
2330         struct net_device_stats *stats = &netdev->stats;
2331
2332         stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts;
2333         stats->tx_packets = adapter->stats.xmitfinished;
2334         stats->rx_bytes = adapter->stats.rxbytes + adapter->stats.lrobytes;
2335         stats->tx_bytes = adapter->stats.txbytes;
2336         stats->rx_dropped = adapter->stats.rxdropped;
2337         stats->tx_dropped = adapter->stats.txdropped;
2338
2339         return stats;
2340 }
2341
2342 static irqreturn_t qlcnic_clear_legacy_intr(struct qlcnic_adapter *adapter)
2343 {
2344         u32 status;
2345
2346         status = readl(adapter->isr_int_vec);
2347
2348         if (!(status & adapter->int_vec_bit))
2349                 return IRQ_NONE;
2350
2351         /* check interrupt state machine, to be sure */
2352         status = readl(adapter->crb_int_state_reg);
2353         if (!ISR_LEGACY_INT_TRIGGERED(status))
2354                 return IRQ_NONE;
2355
2356         writel(0xffffffff, adapter->tgt_status_reg);
2357         /* read twice to ensure write is flushed */
2358         readl(adapter->isr_int_vec);
2359         readl(adapter->isr_int_vec);
2360
2361         return IRQ_HANDLED;
2362 }
2363
2364 static irqreturn_t qlcnic_tmp_intr(int irq, void *data)
2365 {
2366         struct qlcnic_host_sds_ring *sds_ring = data;
2367         struct qlcnic_adapter *adapter = sds_ring->adapter;
2368
2369         if (adapter->flags & QLCNIC_MSIX_ENABLED)
2370                 goto done;
2371         else if (adapter->flags & QLCNIC_MSI_ENABLED) {
2372                 writel(0xffffffff, adapter->tgt_status_reg);
2373                 goto done;
2374         }
2375
2376         if (qlcnic_clear_legacy_intr(adapter) == IRQ_NONE)
2377                 return IRQ_NONE;
2378
2379 done:
2380         adapter->diag_cnt++;
2381         qlcnic_enable_int(sds_ring);
2382         return IRQ_HANDLED;
2383 }
2384
2385 static irqreturn_t qlcnic_intr(int irq, void *data)
2386 {
2387         struct qlcnic_host_sds_ring *sds_ring = data;
2388         struct qlcnic_adapter *adapter = sds_ring->adapter;
2389
2390         if (qlcnic_clear_legacy_intr(adapter) == IRQ_NONE)
2391                 return IRQ_NONE;
2392
2393         napi_schedule(&sds_ring->napi);
2394
2395         return IRQ_HANDLED;
2396 }
2397
2398 static irqreturn_t qlcnic_msi_intr(int irq, void *data)
2399 {
2400         struct qlcnic_host_sds_ring *sds_ring = data;
2401         struct qlcnic_adapter *adapter = sds_ring->adapter;
2402
2403         /* clear interrupt */
2404         writel(0xffffffff, adapter->tgt_status_reg);
2405
2406         napi_schedule(&sds_ring->napi);
2407         return IRQ_HANDLED;
2408 }
2409
2410 static irqreturn_t qlcnic_msix_intr(int irq, void *data)
2411 {
2412         struct qlcnic_host_sds_ring *sds_ring = data;
2413
2414         napi_schedule(&sds_ring->napi);
2415         return IRQ_HANDLED;
2416 }
2417
2418 static int qlcnic_process_cmd_ring(struct qlcnic_adapter *adapter)
2419 {
2420         u32 sw_consumer, hw_consumer;
2421         int count = 0, i;
2422         struct qlcnic_cmd_buffer *buffer;
2423         struct pci_dev *pdev = adapter->pdev;
2424         struct net_device *netdev = adapter->netdev;
2425         struct qlcnic_skb_frag *frag;
2426         int done;
2427         struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring;
2428
2429         if (!spin_trylock(&adapter->tx_clean_lock))
2430                 return 1;
2431
2432         sw_consumer = tx_ring->sw_consumer;
2433         hw_consumer = le32_to_cpu(*(tx_ring->hw_consumer));
2434
2435         while (sw_consumer != hw_consumer) {
2436                 buffer = &tx_ring->cmd_buf_arr[sw_consumer];
2437                 if (buffer->skb) {
2438                         frag = &buffer->frag_array[0];
2439                         pci_unmap_single(pdev, frag->dma, frag->length,
2440                                          PCI_DMA_TODEVICE);
2441                         frag->dma = 0ULL;
2442                         for (i = 1; i < buffer->frag_count; i++) {
2443                                 frag++;
2444                                 pci_unmap_page(pdev, frag->dma, frag->length,
2445                                                PCI_DMA_TODEVICE);
2446                                 frag->dma = 0ULL;
2447                         }
2448
2449                         adapter->stats.xmitfinished++;
2450                         dev_kfree_skb_any(buffer->skb);
2451                         buffer->skb = NULL;
2452                 }
2453
2454                 sw_consumer = get_next_index(sw_consumer, tx_ring->num_desc);
2455                 if (++count >= MAX_STATUS_HANDLE)
2456                         break;
2457         }
2458
2459         if (count && netif_running(netdev)) {
2460                 tx_ring->sw_consumer = sw_consumer;
2461
2462                 smp_mb();
2463
2464                 if (netif_queue_stopped(netdev) && netif_carrier_ok(netdev)) {
2465                         if (qlcnic_tx_avail(tx_ring) > TX_STOP_THRESH) {
2466                                 netif_wake_queue(netdev);
2467                                 adapter->stats.xmit_on++;
2468                         }
2469                 }
2470                 adapter->tx_timeo_cnt = 0;
2471         }
2472         /*
2473          * If everything is freed up to consumer then check if the ring is full
2474          * If the ring is full then check if more needs to be freed and
2475          * schedule the call back again.
2476          *
2477          * This happens when there are 2 CPUs. One could be freeing and the
2478          * other filling it. If the ring is full when we get out of here and
2479          * the card has already interrupted the host then the host can miss the
2480          * interrupt.
2481          *
2482          * There is still a possible race condition and the host could miss an
2483          * interrupt. The card has to take care of this.
2484          */
2485         hw_consumer = le32_to_cpu(*(tx_ring->hw_consumer));
2486         done = (sw_consumer == hw_consumer);
2487         spin_unlock(&adapter->tx_clean_lock);
2488
2489         return done;
2490 }
2491
2492 static int qlcnic_poll(struct napi_struct *napi, int budget)
2493 {
2494         struct qlcnic_host_sds_ring *sds_ring =
2495                 container_of(napi, struct qlcnic_host_sds_ring, napi);
2496
2497         struct qlcnic_adapter *adapter = sds_ring->adapter;
2498
2499         int tx_complete;
2500         int work_done;
2501
2502         tx_complete = qlcnic_process_cmd_ring(adapter);
2503
2504         work_done = qlcnic_process_rcv_ring(sds_ring, budget);
2505
2506         if ((work_done < budget) && tx_complete) {
2507                 napi_complete(&sds_ring->napi);
2508                 if (test_bit(__QLCNIC_DEV_UP, &adapter->state))
2509                         qlcnic_enable_int(sds_ring);
2510         }
2511
2512         return work_done;
2513 }
2514
2515 static int qlcnic_rx_poll(struct napi_struct *napi, int budget)
2516 {
2517         struct qlcnic_host_sds_ring *sds_ring =
2518                 container_of(napi, struct qlcnic_host_sds_ring, napi);
2519
2520         struct qlcnic_adapter *adapter = sds_ring->adapter;
2521         int work_done;
2522
2523         work_done = qlcnic_process_rcv_ring(sds_ring, budget);
2524
2525         if (work_done < budget) {
2526                 napi_complete(&sds_ring->napi);
2527                 if (test_bit(__QLCNIC_DEV_UP, &adapter->state))
2528                         qlcnic_enable_int(sds_ring);
2529         }
2530
2531         return work_done;
2532 }
2533
2534 #ifdef CONFIG_NET_POLL_CONTROLLER
2535 static void qlcnic_poll_controller(struct net_device *netdev)
2536 {
2537         int ring;
2538         struct qlcnic_host_sds_ring *sds_ring;
2539         struct qlcnic_adapter *adapter = netdev_priv(netdev);
2540         struct qlcnic_recv_context *recv_ctx = adapter->recv_ctx;
2541
2542         disable_irq(adapter->irq);
2543         for (ring = 0; ring < adapter->max_sds_rings; ring++) {
2544                 sds_ring = &recv_ctx->sds_rings[ring];
2545                 qlcnic_intr(adapter->irq, sds_ring);
2546         }
2547         enable_irq(adapter->irq);
2548 }
2549 #endif
2550
2551 static void
2552 qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding)
2553 {
2554         u32 val;
2555
2556         val = adapter->portnum & 0xf;
2557         val |= encoding << 7;
2558         val |= (jiffies - adapter->dev_rst_time) << 8;
2559
2560         QLCWR32(adapter, QLCNIC_CRB_DRV_SCRATCH, val);
2561         adapter->dev_rst_time = jiffies;
2562 }
2563
2564 static int
2565 qlcnic_set_drv_state(struct qlcnic_adapter *adapter, u8 state)
2566 {
2567         u32  val;
2568
2569         WARN_ON(state != QLCNIC_DEV_NEED_RESET &&
2570                         state != QLCNIC_DEV_NEED_QUISCENT);
2571
2572         if (qlcnic_api_lock(adapter))
2573                 return -EIO;
2574
2575         val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2576
2577         if (state == QLCNIC_DEV_NEED_RESET)
2578                 QLC_DEV_SET_RST_RDY(val, adapter->portnum);
2579         else if (state == QLCNIC_DEV_NEED_QUISCENT)
2580                 QLC_DEV_SET_QSCNT_RDY(val, adapter->portnum);
2581
2582         QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
2583
2584         qlcnic_api_unlock(adapter);
2585
2586         return 0;
2587 }
2588
2589 static int
2590 qlcnic_clr_drv_state(struct qlcnic_adapter *adapter)
2591 {
2592         u32  val;
2593
2594         if (qlcnic_api_lock(adapter))
2595                 return -EBUSY;
2596
2597         val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2598         QLC_DEV_CLR_RST_QSCNT(val, adapter->portnum);
2599         QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
2600
2601         qlcnic_api_unlock(adapter);
2602
2603         return 0;
2604 }
2605
2606 static void
2607 qlcnic_clr_all_drv_state(struct qlcnic_adapter *adapter, u8 failed)
2608 {
2609         u32  val;
2610
2611         if (qlcnic_api_lock(adapter))
2612                 goto err;
2613
2614         val = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE);
2615         QLC_DEV_CLR_REF_CNT(val, adapter->portnum);
2616         QLCWR32(adapter, QLCNIC_CRB_DRV_ACTIVE, val);
2617
2618         if (failed) {
2619                 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_FAILED);
2620                 dev_info(&adapter->pdev->dev,
2621                                 "Device state set to Failed. Please Reboot\n");
2622         } else if (!(val & 0x11111111))
2623                 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_COLD);
2624
2625         val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2626         QLC_DEV_CLR_RST_QSCNT(val, adapter->portnum);
2627         QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
2628
2629         qlcnic_api_unlock(adapter);
2630 err:
2631         adapter->fw_fail_cnt = 0;
2632         clear_bit(__QLCNIC_START_FW, &adapter->state);
2633         clear_bit(__QLCNIC_RESETTING, &adapter->state);
2634 }
2635
2636 /* Grab api lock, before checking state */
2637 static int
2638 qlcnic_check_drv_state(struct qlcnic_adapter *adapter)
2639 {
2640         int act, state;
2641
2642         state = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2643         act = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE);
2644
2645         if (((state & 0x11111111) == (act & 0x11111111)) ||
2646                         ((act & 0x11111111) == ((state >> 1) & 0x11111111)))
2647                 return 0;
2648         else
2649                 return 1;
2650 }
2651
2652 static int qlcnic_check_idc_ver(struct qlcnic_adapter *adapter)
2653 {
2654         u32 val = QLCRD32(adapter, QLCNIC_CRB_DRV_IDC_VER);
2655
2656         if (val != QLCNIC_DRV_IDC_VER) {
2657                 dev_warn(&adapter->pdev->dev, "IDC Version mismatch, driver's"
2658                         " idc ver = %x; reqd = %x\n", QLCNIC_DRV_IDC_VER, val);
2659         }
2660
2661         return 0;
2662 }
2663
2664 static int
2665 qlcnic_can_start_firmware(struct qlcnic_adapter *adapter)
2666 {
2667         u32 val, prev_state;
2668         u8 dev_init_timeo = adapter->dev_init_timeo;
2669         u8 portnum = adapter->portnum;
2670         u8 ret;
2671
2672         if (test_and_clear_bit(__QLCNIC_START_FW, &adapter->state))
2673                 return 1;
2674
2675         if (qlcnic_api_lock(adapter))
2676                 return -1;
2677
2678         val = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE);
2679         if (!(val & (1 << (portnum * 4)))) {
2680                 QLC_DEV_SET_REF_CNT(val, portnum);
2681                 QLCWR32(adapter, QLCNIC_CRB_DRV_ACTIVE, val);
2682         }
2683
2684         prev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);
2685         QLCDB(adapter, HW, "Device state = %u\n", prev_state);
2686
2687         switch (prev_state) {
2688         case QLCNIC_DEV_COLD:
2689                 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_INITIALIZING);
2690                 QLCWR32(adapter, QLCNIC_CRB_DRV_IDC_VER, QLCNIC_DRV_IDC_VER);
2691                 qlcnic_idc_debug_info(adapter, 0);
2692                 qlcnic_api_unlock(adapter);
2693                 return 1;
2694
2695         case QLCNIC_DEV_READY:
2696                 ret = qlcnic_check_idc_ver(adapter);
2697                 qlcnic_api_unlock(adapter);
2698                 return ret;
2699
2700         case QLCNIC_DEV_NEED_RESET:
2701                 val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2702                 QLC_DEV_SET_RST_RDY(val, portnum);
2703                 QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
2704                 break;
2705
2706         case QLCNIC_DEV_NEED_QUISCENT:
2707                 val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2708                 QLC_DEV_SET_QSCNT_RDY(val, portnum);
2709                 QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
2710                 break;
2711
2712         case QLCNIC_DEV_FAILED:
2713                 dev_err(&adapter->pdev->dev, "Device in failed state.\n");
2714                 qlcnic_api_unlock(adapter);
2715                 return -1;
2716
2717         case QLCNIC_DEV_INITIALIZING:
2718         case QLCNIC_DEV_QUISCENT:
2719                 break;
2720         }
2721
2722         qlcnic_api_unlock(adapter);
2723
2724         do {
2725                 msleep(1000);
2726                 prev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);
2727
2728                 if (prev_state == QLCNIC_DEV_QUISCENT)
2729                         continue;
2730         } while ((prev_state != QLCNIC_DEV_READY) && --dev_init_timeo);
2731
2732         if (!dev_init_timeo) {
2733                 dev_err(&adapter->pdev->dev,
2734                         "Waiting for device to initialize timeout\n");
2735                 return -1;
2736         }
2737
2738         if (qlcnic_api_lock(adapter))
2739                 return -1;
2740
2741         val = QLCRD32(adapter, QLCNIC_CRB_DRV_STATE);
2742         QLC_DEV_CLR_RST_QSCNT(val, portnum);
2743         QLCWR32(adapter, QLCNIC_CRB_DRV_STATE, val);
2744
2745         ret = qlcnic_check_idc_ver(adapter);
2746         qlcnic_api_unlock(adapter);
2747
2748         return ret;
2749 }
2750
2751 static void
2752 qlcnic_fwinit_work(struct work_struct *work)
2753 {
2754         struct qlcnic_adapter *adapter = container_of(work,
2755                         struct qlcnic_adapter, fw_work.work);
2756         u32 dev_state = 0xf;
2757
2758         if (qlcnic_api_lock(adapter))
2759                 goto err_ret;
2760
2761         dev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);
2762         if (dev_state == QLCNIC_DEV_QUISCENT ||
2763             dev_state == QLCNIC_DEV_NEED_QUISCENT) {
2764                 qlcnic_api_unlock(adapter);
2765                 qlcnic_schedule_work(adapter, qlcnic_fwinit_work,
2766                                                 FW_POLL_DELAY * 2);
2767                 return;
2768         }
2769
2770         if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC) {
2771                 qlcnic_api_unlock(adapter);
2772                 goto wait_npar;
2773         }
2774
2775         if (adapter->fw_wait_cnt++ > adapter->reset_ack_timeo) {
2776                 dev_err(&adapter->pdev->dev, "Reset:Failed to get ack %d sec\n",
2777                                         adapter->reset_ack_timeo);
2778                 goto skip_ack_check;
2779         }
2780
2781         if (!qlcnic_check_drv_state(adapter)) {
2782 skip_ack_check:
2783                 dev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);
2784
2785                 if (dev_state == QLCNIC_DEV_NEED_RESET) {
2786                         QLCWR32(adapter, QLCNIC_CRB_DEV_STATE,
2787                                                 QLCNIC_DEV_INITIALIZING);
2788                         set_bit(__QLCNIC_START_FW, &adapter->state);
2789                         QLCDB(adapter, DRV, "Restarting fw\n");
2790                         qlcnic_idc_debug_info(adapter, 0);
2791                 }
2792
2793                 qlcnic_api_unlock(adapter);
2794
2795                 if (!adapter->nic_ops->start_firmware(adapter)) {
2796                         qlcnic_schedule_work(adapter, qlcnic_attach_work, 0);
2797                         adapter->fw_wait_cnt = 0;
2798                         return;
2799                 }
2800                 goto err_ret;
2801         }
2802
2803         qlcnic_api_unlock(adapter);
2804
2805 wait_npar:
2806         dev_state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);
2807         QLCDB(adapter, HW, "Func waiting: Device state=%u\n", dev_state);
2808
2809         switch (dev_state) {
2810         case QLCNIC_DEV_READY:
2811                 if (!adapter->nic_ops->start_firmware(adapter)) {
2812                         qlcnic_schedule_work(adapter, qlcnic_attach_work, 0);
2813                         adapter->fw_wait_cnt = 0;
2814                         return;
2815                 }
2816         case QLCNIC_DEV_FAILED:
2817                 break;
2818         default:
2819                 qlcnic_schedule_work(adapter,
2820                         qlcnic_fwinit_work, FW_POLL_DELAY);
2821                 return;
2822         }
2823
2824 err_ret:
2825         dev_err(&adapter->pdev->dev, "Fwinit work failed state=%u "
2826                 "fw_wait_cnt=%u\n", dev_state, adapter->fw_wait_cnt);
2827         netif_device_attach(adapter->netdev);
2828         qlcnic_clr_all_drv_state(adapter, 0);
2829 }
2830
2831 static void
2832 qlcnic_detach_work(struct work_struct *work)
2833 {
2834         struct qlcnic_adapter *adapter = container_of(work,
2835                         struct qlcnic_adapter, fw_work.work);
2836         struct net_device *netdev = adapter->netdev;
2837         u32 status;
2838
2839         netif_device_detach(netdev);
2840
2841         /* Dont grab rtnl lock during Quiscent mode */
2842         if (adapter->dev_state == QLCNIC_DEV_NEED_QUISCENT) {
2843                 if (netif_running(netdev))
2844                         __qlcnic_down(adapter, netdev);
2845         } else
2846                 qlcnic_down(adapter, netdev);
2847
2848         status = QLCRD32(adapter, QLCNIC_PEG_HALT_STATUS1);
2849
2850         if (status & QLCNIC_RCODE_FATAL_ERROR)
2851                 goto err_ret;
2852
2853         if (adapter->temp == QLCNIC_TEMP_PANIC)
2854                 goto err_ret;
2855
2856         if (qlcnic_set_drv_state(adapter, adapter->dev_state))
2857                 goto err_ret;
2858
2859         adapter->fw_wait_cnt = 0;
2860
2861         qlcnic_schedule_work(adapter, qlcnic_fwinit_work, FW_POLL_DELAY);
2862
2863         return;
2864
2865 err_ret:
2866         dev_err(&adapter->pdev->dev, "detach failed; status=%d temp=%d\n",
2867                         status, adapter->temp);
2868         netif_device_attach(netdev);
2869         qlcnic_clr_all_drv_state(adapter, 1);
2870 }
2871
2872 /*Transit NPAR state to NON Operational */
2873 static void
2874 qlcnic_set_npar_non_operational(struct qlcnic_adapter *adapter)
2875 {
2876         u32 state;
2877
2878         state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE);
2879         if (state == QLCNIC_DEV_NPAR_NON_OPER)
2880                 return;
2881
2882         if (qlcnic_api_lock(adapter))
2883                 return;
2884         QLCWR32(adapter, QLCNIC_CRB_DEV_NPAR_STATE, QLCNIC_DEV_NPAR_NON_OPER);
2885         qlcnic_api_unlock(adapter);
2886 }
2887
2888 /*Transit to RESET state from READY state only */
2889 static void
2890 qlcnic_dev_request_reset(struct qlcnic_adapter *adapter)
2891 {
2892         u32 state;
2893
2894         adapter->need_fw_reset = 1;
2895         if (qlcnic_api_lock(adapter))
2896                 return;
2897
2898         state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);
2899
2900         if (state == QLCNIC_DEV_READY) {
2901                 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_NEED_RESET);
2902                 QLCDB(adapter, DRV, "NEED_RESET state set\n");
2903                 qlcnic_idc_debug_info(adapter, 0);
2904         }
2905
2906         QLCWR32(adapter, QLCNIC_CRB_DEV_NPAR_STATE, QLCNIC_DEV_NPAR_NON_OPER);
2907         qlcnic_api_unlock(adapter);
2908 }
2909
2910 /* Transit to NPAR READY state from NPAR NOT READY state */
2911 static void
2912 qlcnic_dev_set_npar_ready(struct qlcnic_adapter *adapter)
2913 {
2914         if (qlcnic_api_lock(adapter))
2915                 return;
2916
2917         QLCWR32(adapter, QLCNIC_CRB_DEV_NPAR_STATE, QLCNIC_DEV_NPAR_OPER);
2918         QLCDB(adapter, DRV, "NPAR operational state set\n");
2919
2920         qlcnic_api_unlock(adapter);
2921 }
2922
2923 static void
2924 qlcnic_schedule_work(struct qlcnic_adapter *adapter,
2925                 work_func_t func, int delay)
2926 {
2927         if (test_bit(__QLCNIC_AER, &adapter->state))
2928                 return;
2929
2930         INIT_DELAYED_WORK(&adapter->fw_work, func);
2931         queue_delayed_work(qlcnic_wq, &adapter->fw_work,
2932                                         round_jiffies_relative(delay));
2933 }
2934
2935 static void
2936 qlcnic_cancel_fw_work(struct qlcnic_adapter *adapter)
2937 {
2938         while (test_and_set_bit(__QLCNIC_RESETTING, &adapter->state))
2939                 msleep(10);
2940
2941         cancel_delayed_work_sync(&adapter->fw_work);
2942 }
2943
2944 static void
2945 qlcnic_attach_work(struct work_struct *work)
2946 {
2947         struct qlcnic_adapter *adapter = container_of(work,
2948                                 struct qlcnic_adapter, fw_work.work);
2949         struct net_device *netdev = adapter->netdev;
2950         u32 npar_state;
2951
2952         if (adapter->op_mode != QLCNIC_MGMT_FUNC) {
2953                 npar_state = QLCRD32(adapter, QLCNIC_CRB_DEV_NPAR_STATE);
2954                 if (adapter->fw_wait_cnt++ > QLCNIC_DEV_NPAR_OPER_TIMEO)
2955                         qlcnic_clr_all_drv_state(adapter, 0);
2956                 else if (npar_state != QLCNIC_DEV_NPAR_OPER)
2957                         qlcnic_schedule_work(adapter, qlcnic_attach_work,
2958                                                         FW_POLL_DELAY);
2959                 else
2960                         goto attach;
2961                 QLCDB(adapter, DRV, "Waiting for NPAR state to operational\n");
2962                 return;
2963         }
2964 attach:
2965         if (netif_running(netdev)) {
2966                 if (qlcnic_up(adapter, netdev))
2967                         goto done;
2968
2969                 qlcnic_restore_indev_addr(netdev, NETDEV_UP);
2970         }
2971
2972 done:
2973         netif_device_attach(netdev);
2974         adapter->fw_fail_cnt = 0;
2975         clear_bit(__QLCNIC_RESETTING, &adapter->state);
2976
2977         if (!qlcnic_clr_drv_state(adapter))
2978                 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work,
2979                                                         FW_POLL_DELAY);
2980 }
2981
2982 static int
2983 qlcnic_check_health(struct qlcnic_adapter *adapter)
2984 {
2985         u32 state = 0, heartbeat;
2986         struct net_device *netdev = adapter->netdev;
2987
2988         if (qlcnic_check_temp(adapter))
2989                 goto detach;
2990
2991         if (adapter->need_fw_reset)
2992                 qlcnic_dev_request_reset(adapter);
2993
2994         state = QLCRD32(adapter, QLCNIC_CRB_DEV_STATE);
2995         if (state == QLCNIC_DEV_NEED_RESET) {
2996                 qlcnic_set_npar_non_operational(adapter);
2997                 adapter->need_fw_reset = 1;
2998         } else if (state == QLCNIC_DEV_NEED_QUISCENT)
2999                 goto detach;
3000
3001         heartbeat = QLCRD32(adapter, QLCNIC_PEG_ALIVE_COUNTER);
3002         if (heartbeat != adapter->heartbeat) {
3003                 adapter->heartbeat = heartbeat;
3004                 adapter->fw_fail_cnt = 0;
3005                 if (adapter->need_fw_reset)
3006                         goto detach;
3007
3008                 if (adapter->reset_context && auto_fw_reset) {
3009                         qlcnic_reset_hw_context(adapter);
3010                         adapter->netdev->trans_start = jiffies;
3011                 }
3012
3013                 return 0;
3014         }
3015
3016         if (++adapter->fw_fail_cnt < FW_FAIL_THRESH)
3017                 return 0;
3018
3019         qlcnic_dev_request_reset(adapter);
3020
3021         if (auto_fw_reset)
3022                 clear_bit(__QLCNIC_FW_ATTACHED, &adapter->state);
3023
3024         dev_info(&netdev->dev, "firmware hang detected\n");
3025
3026 detach:
3027         adapter->dev_state = (state == QLCNIC_DEV_NEED_QUISCENT) ? state :
3028                 QLCNIC_DEV_NEED_RESET;
3029
3030         if (auto_fw_reset &&
3031                 !test_and_set_bit(__QLCNIC_RESETTING, &adapter->state)) {
3032
3033                 qlcnic_schedule_work(adapter, qlcnic_detach_work, 0);
3034                 QLCDB(adapter, DRV, "fw recovery scheduled.\n");
3035         }
3036
3037         return 1;
3038 }
3039
3040 static void
3041 qlcnic_fw_poll_work(struct work_struct *work)
3042 {
3043         struct qlcnic_adapter *adapter = container_of(work,
3044                                 struct qlcnic_adapter, fw_work.work);
3045
3046         if (test_bit(__QLCNIC_RESETTING, &adapter->state))
3047                 goto reschedule;
3048
3049
3050         if (qlcnic_check_health(adapter))
3051                 return;
3052
3053         if (adapter->fhash.fnum)
3054                 qlcnic_prune_lb_filters(adapter);
3055
3056 reschedule:
3057         qlcnic_schedule_work(adapter, qlcnic_fw_poll_work, FW_POLL_DELAY);
3058 }
3059
3060 static int qlcnic_is_first_func(struct pci_dev *pdev)
3061 {
3062         struct pci_dev *oth_pdev;
3063         int val = pdev->devfn;
3064
3065         while (val-- > 0) {
3066                 oth_pdev = pci_get_domain_bus_and_slot(pci_domain_nr
3067                         (pdev->bus), pdev->bus->number,
3068                         PCI_DEVFN(PCI_SLOT(pdev->devfn), val));
3069                 if (!oth_pdev)
3070                         continue;
3071
3072                 if (oth_pdev->current_state != PCI_D3cold) {
3073                         pci_dev_put(oth_pdev);
3074                         return 0;
3075                 }
3076                 pci_dev_put(oth_pdev);
3077         }
3078         return 1;
3079 }
3080
3081 static int qlcnic_attach_func(struct pci_dev *pdev)
3082 {
3083         int err, first_func;
3084         struct qlcnic_adapter *adapter = pci_get_drvdata(pdev);
3085         struct net_device *netdev = adapter->netdev;
3086
3087         pdev->error_state = pci_channel_io_normal;
3088
3089         err = pci_enable_device(pdev);
3090         if (err)
3091                 return err;
3092
3093         pci_set_power_state(pdev, PCI_D0);
3094         pci_set_master(pdev);
3095         pci_restore_state(pdev);
3096
3097         first_func = qlcnic_is_first_func(pdev);
3098
3099         if (qlcnic_api_lock(adapter))
3100                 return -EINVAL;
3101
3102         if (adapter->op_mode != QLCNIC_NON_PRIV_FUNC && first_func) {
3103                 adapter->need_fw_reset = 1;
3104                 set_bit(__QLCNIC_START_FW, &adapter->state);
3105                 QLCWR32(adapter, QLCNIC_CRB_DEV_STATE, QLCNIC_DEV_INITIALIZING);
3106                 QLCDB(adapter, DRV, "Restarting fw\n");
3107         }
3108         qlcnic_api_unlock(adapter);
3109
3110         err = adapter->nic_ops->start_firmware(adapter);
3111         if (err)
3112                 return err;
3113
3114         qlcnic_clr_drv_state(adapter);
3115         qlcnic_setup_intr(adapter);
3116
3117         if (netif_running(netdev)) {
3118                 err = qlcnic_attach(adapter);
3119                 if (err) {
3120                         qlcnic_clr_all_drv_state(adapter, 1);
3121                         clear_bit(__QLCNIC_AER, &adapter->state);
3122                         netif_device_attach(netdev);
3123                         return err;
3124                 }
3125
3126                 err = qlcnic_up(adapter, netdev);
3127                 if (err)
3128                         goto done;
3129
3130                 qlcnic_restore_indev_addr(netdev, NETDEV_UP);
3131         }
3132  done:
3133         netif_device_attach(netdev);
3134         return err;
3135 }
3136
3137 static pci_ers_result_t qlcnic_io_error_detected(struct pci_dev *pdev,
3138                                                 pci_channel_state_t state)
3139 {
3140         struct qlcnic_adapter *adapter = pci_get_drvdata(pdev);
3141         struct net_device *netdev = adapter->netdev;
3142
3143         if (state == pci_channel_io_perm_failure)
3144                 return PCI_ERS_RESULT_DISCONNECT;
3145
3146         if (state == pci_channel_io_normal)
3147                 return PCI_ERS_RESULT_RECOVERED;
3148
3149         set_bit(__QLCNIC_AER, &adapter->state);
3150         netif_device_detach(netdev);
3151
3152         cancel_delayed_work_sync(&adapter->fw_work);
3153
3154         if (netif_running(netdev))
3155                 qlcnic_down(adapter, netdev);
3156
3157         qlcnic_detach(adapter);
3158         qlcnic_teardown_intr(adapter);
3159
3160         clear_bit(__QLCNIC_RESETTING, &adapter->state);
3161
3162         pci_save_state(pdev);
3163         pci_disable_device(pdev);
3164
3165         return PCI_ERS_RESULT_NEED_RESET;
3166 }
3167
3168 static pci_ers_result_t qlcnic_io_slot_reset(struct pci_dev *pdev)
3169 {
3170         return qlcnic_attach_func(pdev) ? PCI_ERS_RESULT_DISCONNECT :
3171                                 PCI_ERS_RESULT_RECOVERED;
3172 }
3173
3174 static void qlcnic_io_resume(struct pci_dev *pdev)
3175 {
3176         struct qlcnic_adapter *adapter = pci_get_drvdata(pdev);
3177
3178         pci_cleanup_aer_uncorrect_error_status(pdev);
3179
3180         if (QLCRD32(adapter, QLCNIC_CRB_DEV_STATE) == QLCNIC_DEV_READY &&
3181             test_and_clear_bit(__QLCNIC_AER, &adapter->state))
3182                 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work,
3183                                                 FW_POLL_DELAY);
3184 }
3185
3186 static int
3187 qlcnicvf_start_firmware(struct qlcnic_adapter *adapter)
3188 {
3189         int err;
3190
3191         err = qlcnic_can_start_firmware(adapter);
3192         if (err)
3193                 return err;
3194
3195         err = qlcnic_check_npar_opertional(adapter);
3196         if (err)
3197                 return err;
3198
3199         err = qlcnic_initialize_nic(adapter);
3200         if (err)
3201                 return err;
3202
3203         qlcnic_check_options(adapter);
3204
3205         err = qlcnic_set_eswitch_port_config(adapter);
3206         if (err)
3207                 return err;
3208
3209         adapter->need_fw_reset = 0;
3210
3211         return err;
3212 }
3213
3214 static int
3215 qlcnicvf_config_bridged_mode(struct qlcnic_adapter *adapter, u32 enable)
3216 {
3217         return -EOPNOTSUPP;
3218 }
3219
3220 static int
3221 qlcnicvf_config_led(struct qlcnic_adapter *adapter, u32 state, u32 rate)
3222 {
3223         return -EOPNOTSUPP;
3224 }
3225
3226 static ssize_t
3227 qlcnic_store_bridged_mode(struct device *dev,
3228                 struct device_attribute *attr, const char *buf, size_t len)
3229 {
3230         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3231         unsigned long new;
3232         int ret = -EINVAL;
3233
3234         if (!(adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG))
3235                 goto err_out;
3236
3237         if (!test_bit(__QLCNIC_DEV_UP, &adapter->state))
3238                 goto err_out;
3239
3240         if (strict_strtoul(buf, 2, &new))
3241                 goto err_out;
3242
3243         if (!adapter->nic_ops->config_bridged_mode(adapter, !!new))
3244                 ret = len;
3245
3246 err_out:
3247         return ret;
3248 }
3249
3250 static ssize_t
3251 qlcnic_show_bridged_mode(struct device *dev,
3252                 struct device_attribute *attr, char *buf)
3253 {
3254         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3255         int bridged_mode = 0;
3256
3257         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG)
3258                 bridged_mode = !!(adapter->flags & QLCNIC_BRIDGE_ENABLED);
3259
3260         return sprintf(buf, "%d\n", bridged_mode);
3261 }
3262
3263 static struct device_attribute dev_attr_bridged_mode = {
3264        .attr = {.name = "bridged_mode", .mode = (S_IRUGO | S_IWUSR)},
3265        .show = qlcnic_show_bridged_mode,
3266        .store = qlcnic_store_bridged_mode,
3267 };
3268
3269 static ssize_t
3270 qlcnic_store_diag_mode(struct device *dev,
3271                 struct device_attribute *attr, const char *buf, size_t len)
3272 {
3273         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3274         unsigned long new;
3275
3276         if (strict_strtoul(buf, 2, &new))
3277                 return -EINVAL;
3278
3279         if (!!new != !!(adapter->flags & QLCNIC_DIAG_ENABLED))
3280                 adapter->flags ^= QLCNIC_DIAG_ENABLED;
3281
3282         return len;
3283 }
3284
3285 static ssize_t
3286 qlcnic_show_diag_mode(struct device *dev,
3287                 struct device_attribute *attr, char *buf)
3288 {
3289         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3290
3291         return sprintf(buf, "%d\n",
3292                         !!(adapter->flags & QLCNIC_DIAG_ENABLED));
3293 }
3294
3295 static struct device_attribute dev_attr_diag_mode = {
3296         .attr = {.name = "diag_mode", .mode = (S_IRUGO | S_IWUSR)},
3297         .show = qlcnic_show_diag_mode,
3298         .store = qlcnic_store_diag_mode,
3299 };
3300
3301 static int
3302 qlcnic_sysfs_validate_crb(struct qlcnic_adapter *adapter,
3303                 loff_t offset, size_t size)
3304 {
3305         size_t crb_size = 4;
3306
3307         if (!(adapter->flags & QLCNIC_DIAG_ENABLED))
3308                 return -EIO;
3309
3310         if (offset < QLCNIC_PCI_CRBSPACE) {
3311                 if (ADDR_IN_RANGE(offset, QLCNIC_PCI_CAMQM,
3312                                         QLCNIC_PCI_CAMQM_END))
3313                         crb_size = 8;
3314                 else
3315                         return -EINVAL;
3316         }
3317
3318         if ((size != crb_size) || (offset & (crb_size-1)))
3319                 return  -EINVAL;
3320
3321         return 0;
3322 }
3323
3324 static ssize_t
3325 qlcnic_sysfs_read_crb(struct file *filp, struct kobject *kobj,
3326                 struct bin_attribute *attr,
3327                 char *buf, loff_t offset, size_t size)
3328 {
3329         struct device *dev = container_of(kobj, struct device, kobj);
3330         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3331         u32 data;
3332         u64 qmdata;
3333         int ret;
3334
3335         ret = qlcnic_sysfs_validate_crb(adapter, offset, size);
3336         if (ret != 0)
3337                 return ret;
3338
3339         if (ADDR_IN_RANGE(offset, QLCNIC_PCI_CAMQM, QLCNIC_PCI_CAMQM_END)) {
3340                 qlcnic_pci_camqm_read_2M(adapter, offset, &qmdata);
3341                 memcpy(buf, &qmdata, size);
3342         } else {
3343                 data = QLCRD32(adapter, offset);
3344                 memcpy(buf, &data, size);
3345         }
3346         return size;
3347 }
3348
3349 static ssize_t
3350 qlcnic_sysfs_write_crb(struct file *filp, struct kobject *kobj,
3351                 struct bin_attribute *attr,
3352                 char *buf, loff_t offset, size_t size)
3353 {
3354         struct device *dev = container_of(kobj, struct device, kobj);
3355         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3356         u32 data;
3357         u64 qmdata;
3358         int ret;
3359
3360         ret = qlcnic_sysfs_validate_crb(adapter, offset, size);
3361         if (ret != 0)
3362                 return ret;
3363
3364         if (ADDR_IN_RANGE(offset, QLCNIC_PCI_CAMQM, QLCNIC_PCI_CAMQM_END)) {
3365                 memcpy(&qmdata, buf, size);
3366                 qlcnic_pci_camqm_write_2M(adapter, offset, qmdata);
3367         } else {
3368                 memcpy(&data, buf, size);
3369                 QLCWR32(adapter, offset, data);
3370         }
3371         return size;
3372 }
3373
3374 static int
3375 qlcnic_sysfs_validate_mem(struct qlcnic_adapter *adapter,
3376                 loff_t offset, size_t size)
3377 {
3378         if (!(adapter->flags & QLCNIC_DIAG_ENABLED))
3379                 return -EIO;
3380
3381         if ((size != 8) || (offset & 0x7))
3382                 return  -EIO;
3383
3384         return 0;
3385 }
3386
3387 static ssize_t
3388 qlcnic_sysfs_read_mem(struct file *filp, struct kobject *kobj,
3389                 struct bin_attribute *attr,
3390                 char *buf, loff_t offset, size_t size)
3391 {
3392         struct device *dev = container_of(kobj, struct device, kobj);
3393         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3394         u64 data;
3395         int ret;
3396
3397         ret = qlcnic_sysfs_validate_mem(adapter, offset, size);
3398         if (ret != 0)
3399                 return ret;
3400
3401         if (qlcnic_pci_mem_read_2M(adapter, offset, &data))
3402                 return -EIO;
3403
3404         memcpy(buf, &data, size);
3405
3406         return size;
3407 }
3408
3409 static ssize_t
3410 qlcnic_sysfs_write_mem(struct file *filp, struct kobject *kobj,
3411                 struct bin_attribute *attr,
3412                 char *buf, loff_t offset, size_t size)
3413 {
3414         struct device *dev = container_of(kobj, struct device, kobj);
3415         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3416         u64 data;
3417         int ret;
3418
3419         ret = qlcnic_sysfs_validate_mem(adapter, offset, size);
3420         if (ret != 0)
3421                 return ret;
3422
3423         memcpy(&data, buf, size);
3424
3425         if (qlcnic_pci_mem_write_2M(adapter, offset, data))
3426                 return -EIO;
3427
3428         return size;
3429 }
3430
3431
3432 static struct bin_attribute bin_attr_crb = {
3433         .attr = {.name = "crb", .mode = (S_IRUGO | S_IWUSR)},
3434         .size = 0,
3435         .read = qlcnic_sysfs_read_crb,
3436         .write = qlcnic_sysfs_write_crb,
3437 };
3438
3439 static struct bin_attribute bin_attr_mem = {
3440         .attr = {.name = "mem", .mode = (S_IRUGO | S_IWUSR)},
3441         .size = 0,
3442         .read = qlcnic_sysfs_read_mem,
3443         .write = qlcnic_sysfs_write_mem,
3444 };
3445
3446 static int
3447 validate_pm_config(struct qlcnic_adapter *adapter,
3448                         struct qlcnic_pm_func_cfg *pm_cfg, int count)
3449 {
3450
3451         u8 src_pci_func, s_esw_id, d_esw_id;
3452         u8 dest_pci_func;
3453         int i;
3454
3455         for (i = 0; i < count; i++) {
3456                 src_pci_func = pm_cfg[i].pci_func;
3457                 dest_pci_func = pm_cfg[i].dest_npar;
3458                 if (src_pci_func >= QLCNIC_MAX_PCI_FUNC
3459                                 || dest_pci_func >= QLCNIC_MAX_PCI_FUNC)
3460                         return QL_STATUS_INVALID_PARAM;
3461
3462                 if (adapter->npars[src_pci_func].type != QLCNIC_TYPE_NIC)
3463                         return QL_STATUS_INVALID_PARAM;
3464
3465                 if (adapter->npars[dest_pci_func].type != QLCNIC_TYPE_NIC)
3466                         return QL_STATUS_INVALID_PARAM;
3467
3468                 s_esw_id = adapter->npars[src_pci_func].phy_port;
3469                 d_esw_id = adapter->npars[dest_pci_func].phy_port;
3470
3471                 if (s_esw_id != d_esw_id)
3472                         return QL_STATUS_INVALID_PARAM;
3473
3474         }
3475         return 0;
3476
3477 }
3478
3479 static ssize_t
3480 qlcnic_sysfs_write_pm_config(struct file *filp, struct kobject *kobj,
3481         struct bin_attribute *attr, char *buf, loff_t offset, size_t size)
3482 {
3483         struct device *dev = container_of(kobj, struct device, kobj);
3484         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3485         struct qlcnic_pm_func_cfg *pm_cfg;
3486         u32 id, action, pci_func;
3487         int count, rem, i, ret;
3488
3489         count   = size / sizeof(struct qlcnic_pm_func_cfg);
3490         rem     = size % sizeof(struct qlcnic_pm_func_cfg);
3491         if (rem)
3492                 return QL_STATUS_INVALID_PARAM;
3493
3494         pm_cfg = (struct qlcnic_pm_func_cfg *) buf;
3495
3496         ret = validate_pm_config(adapter, pm_cfg, count);
3497         if (ret)
3498                 return ret;
3499         for (i = 0; i < count; i++) {
3500                 pci_func = pm_cfg[i].pci_func;
3501                 action = !!pm_cfg[i].action;
3502                 id = adapter->npars[pci_func].phy_port;
3503                 ret = qlcnic_config_port_mirroring(adapter, id,
3504                                                 action, pci_func);
3505                 if (ret)
3506                         return ret;
3507         }
3508
3509         for (i = 0; i < count; i++) {
3510                 pci_func = pm_cfg[i].pci_func;
3511                 id = adapter->npars[pci_func].phy_port;
3512                 adapter->npars[pci_func].enable_pm = !!pm_cfg[i].action;
3513                 adapter->npars[pci_func].dest_npar = id;
3514         }
3515         return size;
3516 }
3517
3518 static ssize_t
3519 qlcnic_sysfs_read_pm_config(struct file *filp, struct kobject *kobj,
3520         struct bin_attribute *attr, char *buf, loff_t offset, size_t size)
3521 {
3522         struct device *dev = container_of(kobj, struct device, kobj);
3523         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3524         struct qlcnic_pm_func_cfg pm_cfg[QLCNIC_MAX_PCI_FUNC];
3525         int i;
3526
3527         if (size != sizeof(pm_cfg))
3528                 return QL_STATUS_INVALID_PARAM;
3529
3530         for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) {
3531                 if (adapter->npars[i].type != QLCNIC_TYPE_NIC)
3532                         continue;
3533                 pm_cfg[i].action = adapter->npars[i].enable_pm;
3534                 pm_cfg[i].dest_npar = 0;
3535                 pm_cfg[i].pci_func = i;
3536         }
3537         memcpy(buf, &pm_cfg, size);
3538
3539         return size;
3540 }
3541
3542 static int
3543 validate_esw_config(struct qlcnic_adapter *adapter,
3544         struct qlcnic_esw_func_cfg *esw_cfg, int count)
3545 {
3546         u32 op_mode;
3547         u8 pci_func;
3548         int i;
3549
3550         op_mode = readl(adapter->ahw->pci_base0 + QLCNIC_DRV_OP_MODE);
3551
3552         for (i = 0; i < count; i++) {
3553                 pci_func = esw_cfg[i].pci_func;
3554                 if (pci_func >= QLCNIC_MAX_PCI_FUNC)
3555                         return QL_STATUS_INVALID_PARAM;
3556
3557                 if (adapter->op_mode == QLCNIC_MGMT_FUNC)
3558                         if (adapter->npars[pci_func].type != QLCNIC_TYPE_NIC)
3559                                 return QL_STATUS_INVALID_PARAM;
3560
3561                 switch (esw_cfg[i].op_mode) {
3562                 case QLCNIC_PORT_DEFAULTS:
3563                         if (QLC_DEV_GET_DRV(op_mode, pci_func) !=
3564                                                 QLCNIC_NON_PRIV_FUNC) {
3565                                 if (esw_cfg[i].mac_anti_spoof != 0)
3566                                         return QL_STATUS_INVALID_PARAM;
3567                                 if (esw_cfg[i].mac_override != 1)
3568                                         return QL_STATUS_INVALID_PARAM;
3569                                 if (esw_cfg[i].promisc_mode != 1)
3570                                         return QL_STATUS_INVALID_PARAM;
3571                         }
3572                         break;
3573                 case QLCNIC_ADD_VLAN:
3574                         if (!IS_VALID_VLAN(esw_cfg[i].vlan_id))
3575                                 return QL_STATUS_INVALID_PARAM;
3576                         if (!esw_cfg[i].op_type)
3577                                 return QL_STATUS_INVALID_PARAM;
3578                         break;
3579                 case QLCNIC_DEL_VLAN:
3580                         if (!esw_cfg[i].op_type)
3581                                 return QL_STATUS_INVALID_PARAM;
3582                         break;
3583                 default:
3584                         return QL_STATUS_INVALID_PARAM;
3585                 }
3586         }
3587         return 0;
3588 }
3589
3590 static ssize_t
3591 qlcnic_sysfs_write_esw_config(struct file *file, struct kobject *kobj,
3592         struct bin_attribute *attr, char *buf, loff_t offset, size_t size)
3593 {
3594         struct device *dev = container_of(kobj, struct device, kobj);
3595         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3596         struct qlcnic_esw_func_cfg *esw_cfg;
3597         struct qlcnic_npar_info *npar;
3598         int count, rem, i, ret;
3599         u8 pci_func, op_mode = 0;
3600
3601         count   = size / sizeof(struct qlcnic_esw_func_cfg);
3602         rem     = size % sizeof(struct qlcnic_esw_func_cfg);
3603         if (rem)
3604                 return QL_STATUS_INVALID_PARAM;
3605
3606         esw_cfg = (struct qlcnic_esw_func_cfg *) buf;
3607         ret = validate_esw_config(adapter, esw_cfg, count);
3608         if (ret)
3609                 return ret;
3610
3611         for (i = 0; i < count; i++) {
3612                 if (adapter->op_mode == QLCNIC_MGMT_FUNC)
3613                         if (qlcnic_config_switch_port(adapter, &esw_cfg[i]))
3614                                 return QL_STATUS_INVALID_PARAM;
3615
3616                 if (adapter->ahw->pci_func != esw_cfg[i].pci_func)
3617                         continue;
3618
3619                 op_mode = esw_cfg[i].op_mode;
3620                 qlcnic_get_eswitch_port_config(adapter, &esw_cfg[i]);
3621                 esw_cfg[i].op_mode = op_mode;
3622                 esw_cfg[i].pci_func = adapter->ahw->pci_func;
3623
3624                 switch (esw_cfg[i].op_mode) {
3625                 case QLCNIC_PORT_DEFAULTS:
3626                         qlcnic_set_eswitch_port_features(adapter, &esw_cfg[i]);
3627                         break;
3628                 case QLCNIC_ADD_VLAN:
3629                         qlcnic_set_vlan_config(adapter, &esw_cfg[i]);
3630                         break;
3631                 case QLCNIC_DEL_VLAN:
3632                         esw_cfg[i].vlan_id = 0;
3633                         qlcnic_set_vlan_config(adapter, &esw_cfg[i]);
3634                         break;
3635                 }
3636         }
3637
3638         if (adapter->op_mode != QLCNIC_MGMT_FUNC)
3639                 goto out;
3640
3641         for (i = 0; i < count; i++) {
3642                 pci_func = esw_cfg[i].pci_func;
3643                 npar = &adapter->npars[pci_func];
3644                 switch (esw_cfg[i].op_mode) {
3645                 case QLCNIC_PORT_DEFAULTS:
3646                         npar->promisc_mode = esw_cfg[i].promisc_mode;
3647                         npar->mac_override = esw_cfg[i].mac_override;
3648                         npar->offload_flags = esw_cfg[i].offload_flags;
3649                         npar->mac_anti_spoof = esw_cfg[i].mac_anti_spoof;
3650                         npar->discard_tagged = esw_cfg[i].discard_tagged;
3651                         break;
3652                 case QLCNIC_ADD_VLAN:
3653                         npar->pvid = esw_cfg[i].vlan_id;
3654                         break;
3655                 case QLCNIC_DEL_VLAN:
3656                         npar->pvid = 0;
3657                         break;
3658                 }
3659         }
3660 out:
3661         return size;
3662 }
3663
3664 static ssize_t
3665 qlcnic_sysfs_read_esw_config(struct file *file, struct kobject *kobj,
3666         struct bin_attribute *attr, char *buf, loff_t offset, size_t size)
3667 {
3668         struct device *dev = container_of(kobj, struct device, kobj);
3669         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3670         struct qlcnic_esw_func_cfg esw_cfg[QLCNIC_MAX_PCI_FUNC];
3671         u8 i;
3672
3673         if (size != sizeof(esw_cfg))
3674                 return QL_STATUS_INVALID_PARAM;
3675
3676         for (i = 0; i < QLCNIC_MAX_PCI_FUNC; i++) {
3677                 if (adapter->npars[i].type != QLCNIC_TYPE_NIC)
3678                         continue;
3679                 esw_cfg[i].pci_func = i;
3680                 if (qlcnic_get_eswitch_port_config(adapter, &esw_cfg[i]))
3681                         return QL_STATUS_INVALID_PARAM;
3682         }
3683         memcpy(buf, &esw_cfg, size);
3684
3685         return size;
3686 }
3687
3688 static int
3689 validate_npar_config(struct qlcnic_adapter *adapter,
3690                                 struct qlcnic_npar_func_cfg *np_cfg, int count)
3691 {
3692         u8 pci_func, i;
3693
3694         for (i = 0; i < count; i++) {
3695                 pci_func = np_cfg[i].pci_func;
3696                 if (pci_func >= QLCNIC_MAX_PCI_FUNC)
3697                         return QL_STATUS_INVALID_PARAM;
3698
3699                 if (adapter->npars[pci_func].type != QLCNIC_TYPE_NIC)
3700                         return QL_STATUS_INVALID_PARAM;
3701
3702                 if (!IS_VALID_BW(np_cfg[i].min_bw) ||
3703                     !IS_VALID_BW(np_cfg[i].max_bw))
3704                         return QL_STATUS_INVALID_PARAM;
3705         }
3706         return 0;
3707 }
3708
3709 static ssize_t
3710 qlcnic_sysfs_write_npar_config(struct file *file, struct kobject *kobj,
3711         struct bin_attribute *attr, char *buf, loff_t offset, size_t size)
3712 {
3713         struct device *dev = container_of(kobj, struct device, kobj);
3714         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3715         struct qlcnic_info nic_info;
3716         struct qlcnic_npar_func_cfg *np_cfg;
3717         int i, count, rem, ret;
3718         u8 pci_func;
3719
3720         count   = size / sizeof(struct qlcnic_npar_func_cfg);
3721         rem     = size % sizeof(struct qlcnic_npar_func_cfg);
3722         if (rem)
3723                 return QL_STATUS_INVALID_PARAM;
3724
3725         np_cfg = (struct qlcnic_npar_func_cfg *) buf;
3726         ret = validate_npar_config(adapter, np_cfg, count);
3727         if (ret)
3728                 return ret;
3729
3730         for (i = 0; i < count ; i++) {
3731                 pci_func = np_cfg[i].pci_func;
3732                 ret = qlcnic_get_nic_info(adapter, &nic_info, pci_func);
3733                 if (ret)
3734                         return ret;
3735                 nic_info.pci_func = pci_func;
3736                 nic_info.min_tx_bw = np_cfg[i].min_bw;
3737                 nic_info.max_tx_bw = np_cfg[i].max_bw;
3738                 ret = qlcnic_set_nic_info(adapter, &nic_info);
3739                 if (ret)
3740                         return ret;
3741                 adapter->npars[i].min_bw = nic_info.min_tx_bw;
3742                 adapter->npars[i].max_bw = nic_info.max_tx_bw;
3743         }
3744
3745         return size;
3746
3747 }
3748 static ssize_t
3749 qlcnic_sysfs_read_npar_config(struct file *file, struct kobject *kobj,
3750         struct bin_attribute *attr, char *buf, loff_t offset, size_t size)
3751 {
3752         struct device *dev = container_of(kobj, struct device, kobj);
3753         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3754         struct qlcnic_info nic_info;
3755         struct qlcnic_npar_func_cfg np_cfg[QLCNIC_MAX_PCI_FUNC];
3756         int i, ret;
3757
3758         if (size != sizeof(np_cfg))
3759                 return QL_STATUS_INVALID_PARAM;
3760
3761         for (i = 0; i < QLCNIC_MAX_PCI_FUNC ; i++) {
3762                 if (adapter->npars[i].type != QLCNIC_TYPE_NIC)
3763                         continue;
3764                 ret = qlcnic_get_nic_info(adapter, &nic_info, i);
3765                 if (ret)
3766                         return ret;
3767
3768                 np_cfg[i].pci_func = i;
3769                 np_cfg[i].op_mode = (u8)nic_info.op_mode;
3770                 np_cfg[i].port_num = nic_info.phys_port;
3771                 np_cfg[i].fw_capab = nic_info.capabilities;
3772                 np_cfg[i].min_bw = nic_info.min_tx_bw ;
3773                 np_cfg[i].max_bw = nic_info.max_tx_bw;
3774                 np_cfg[i].max_tx_queues = nic_info.max_tx_ques;
3775                 np_cfg[i].max_rx_queues = nic_info.max_rx_ques;
3776         }
3777         memcpy(buf, &np_cfg, size);
3778         return size;
3779 }
3780
3781 static ssize_t
3782 qlcnic_sysfs_get_port_stats(struct file *file, struct kobject *kobj,
3783         struct bin_attribute *attr, char *buf, loff_t offset, size_t size)
3784 {
3785         struct device *dev = container_of(kobj, struct device, kobj);
3786         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3787         struct qlcnic_esw_statistics port_stats;
3788         int ret;
3789
3790         if (size != sizeof(struct qlcnic_esw_statistics))
3791                 return QL_STATUS_INVALID_PARAM;
3792
3793         if (offset >= QLCNIC_MAX_PCI_FUNC)
3794                 return QL_STATUS_INVALID_PARAM;
3795
3796         memset(&port_stats, 0, size);
3797         ret = qlcnic_get_port_stats(adapter, offset, QLCNIC_QUERY_RX_COUNTER,
3798                                                                 &port_stats.rx);
3799         if (ret)
3800                 return ret;
3801
3802         ret = qlcnic_get_port_stats(adapter, offset, QLCNIC_QUERY_TX_COUNTER,
3803                                                                 &port_stats.tx);
3804         if (ret)
3805                 return ret;
3806
3807         memcpy(buf, &port_stats, size);
3808         return size;
3809 }
3810
3811 static ssize_t
3812 qlcnic_sysfs_get_esw_stats(struct file *file, struct kobject *kobj,
3813         struct bin_attribute *attr, char *buf, loff_t offset, size_t size)
3814 {
3815         struct device *dev = container_of(kobj, struct device, kobj);
3816         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3817         struct qlcnic_esw_statistics esw_stats;
3818         int ret;
3819
3820         if (size != sizeof(struct qlcnic_esw_statistics))
3821                 return QL_STATUS_INVALID_PARAM;
3822
3823         if (offset >= QLCNIC_NIU_MAX_XG_PORTS)
3824                 return QL_STATUS_INVALID_PARAM;
3825
3826         memset(&esw_stats, 0, size);
3827         ret = qlcnic_get_eswitch_stats(adapter, offset, QLCNIC_QUERY_RX_COUNTER,
3828                                                                 &esw_stats.rx);
3829         if (ret)
3830                 return ret;
3831
3832         ret = qlcnic_get_eswitch_stats(adapter, offset, QLCNIC_QUERY_TX_COUNTER,
3833                                                                 &esw_stats.tx);
3834         if (ret)
3835                 return ret;
3836
3837         memcpy(buf, &esw_stats, size);
3838         return size;
3839 }
3840
3841 static ssize_t
3842 qlcnic_sysfs_clear_esw_stats(struct file *file, struct kobject *kobj,
3843         struct bin_attribute *attr, char *buf, loff_t offset, size_t size)
3844 {
3845         struct device *dev = container_of(kobj, struct device, kobj);
3846         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3847         int ret;
3848
3849         if (offset >= QLCNIC_NIU_MAX_XG_PORTS)
3850                 return QL_STATUS_INVALID_PARAM;
3851
3852         ret = qlcnic_clear_esw_stats(adapter, QLCNIC_STATS_ESWITCH, offset,
3853                                                 QLCNIC_QUERY_RX_COUNTER);
3854         if (ret)
3855                 return ret;
3856
3857         ret = qlcnic_clear_esw_stats(adapter, QLCNIC_STATS_ESWITCH, offset,
3858                                                 QLCNIC_QUERY_TX_COUNTER);
3859         if (ret)
3860                 return ret;
3861
3862         return size;
3863 }
3864
3865 static ssize_t
3866 qlcnic_sysfs_clear_port_stats(struct file *file, struct kobject *kobj,
3867         struct bin_attribute *attr, char *buf, loff_t offset, size_t size)
3868 {
3869
3870         struct device *dev = container_of(kobj, struct device, kobj);
3871         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3872         int ret;
3873
3874         if (offset >= QLCNIC_MAX_PCI_FUNC)
3875                 return QL_STATUS_INVALID_PARAM;
3876
3877         ret = qlcnic_clear_esw_stats(adapter, QLCNIC_STATS_PORT, offset,
3878                                                 QLCNIC_QUERY_RX_COUNTER);
3879         if (ret)
3880                 return ret;
3881
3882         ret = qlcnic_clear_esw_stats(adapter, QLCNIC_STATS_PORT, offset,
3883                                                 QLCNIC_QUERY_TX_COUNTER);
3884         if (ret)
3885                 return ret;
3886
3887         return size;
3888 }
3889
3890 static ssize_t
3891 qlcnic_sysfs_read_pci_config(struct file *file, struct kobject *kobj,
3892         struct bin_attribute *attr, char *buf, loff_t offset, size_t size)
3893 {
3894         struct device *dev = container_of(kobj, struct device, kobj);
3895         struct qlcnic_adapter *adapter = dev_get_drvdata(dev);
3896         struct qlcnic_pci_func_cfg pci_cfg[QLCNIC_MAX_PCI_FUNC];
3897         struct qlcnic_pci_info *pci_info;
3898         int i, ret;
3899
3900         if (size != sizeof(pci_cfg))
3901                 return QL_STATUS_INVALID_PARAM;
3902
3903         pci_info = kcalloc(QLCNIC_MAX_PCI_FUNC, sizeof(*pci_info), GFP_KERNEL);
3904         if (!pci_info)
3905                 return -ENOMEM;
3906
3907         ret = qlcnic_get_pci_info(adapter, pci_info);
3908         if (ret) {
3909                 kfree(pci_info);
3910                 return ret;
3911         }
3912
3913         for (i = 0; i < QLCNIC_MAX_PCI_FUNC ; i++) {
3914                 pci_cfg[i].pci_func = pci_info[i].id;
3915                 pci_cfg[i].func_type = pci_info[i].type;
3916                 pci_cfg[i].port_num = pci_info[i].default_port;
3917                 pci_cfg[i].min_bw = pci_info[i].tx_min_bw;
3918                 pci_cfg[i].max_bw = pci_info[i].tx_max_bw;
3919                 memcpy(&pci_cfg[i].def_mac_addr, &pci_info[i].mac, ETH_ALEN);
3920         }
3921         memcpy(buf, &pci_cfg, size);
3922         kfree(pci_info);
3923         return size;
3924 }
3925 static struct bin_attribute bin_attr_npar_config = {
3926         .attr = {.name = "npar_config", .mode = (S_IRUGO | S_IWUSR)},
3927         .size = 0,
3928         .read = qlcnic_sysfs_read_npar_config,
3929         .write = qlcnic_sysfs_write_npar_config,
3930 };
3931
3932 static struct bin_attribute bin_attr_pci_config = {
3933         .attr = {.name = "pci_config", .mode = (S_IRUGO | S_IWUSR)},
3934         .size = 0,
3935         .read = qlcnic_sysfs_read_pci_config,
3936         .write = NULL,
3937 };
3938
3939 static struct bin_attribute bin_attr_port_stats = {
3940         .attr = {.name = "port_stats", .mode = (S_IRUGO | S_IWUSR)},
3941         .size = 0,
3942         .read = qlcnic_sysfs_get_port_stats,
3943         .write = qlcnic_sysfs_clear_port_stats,
3944 };
3945
3946 static struct bin_attribute bin_attr_esw_stats = {
3947         .attr = {.name = "esw_stats", .mode = (S_IRUGO | S_IWUSR)},
3948         .size = 0,
3949         .read = qlcnic_sysfs_get_esw_stats,
3950         .write = qlcnic_sysfs_clear_esw_stats,
3951 };
3952
3953 static struct bin_attribute bin_attr_esw_config = {
3954         .attr = {.name = "esw_config", .mode = (S_IRUGO | S_IWUSR)},
3955         .size = 0,
3956         .read = qlcnic_sysfs_read_esw_config,
3957         .write = qlcnic_sysfs_write_esw_config,
3958 };
3959
3960 static struct bin_attribute bin_attr_pm_config = {
3961         .attr = {.name = "pm_config", .mode = (S_IRUGO | S_IWUSR)},
3962         .size = 0,
3963         .read = qlcnic_sysfs_read_pm_config,
3964         .write = qlcnic_sysfs_write_pm_config,
3965 };
3966
3967 static void
3968 qlcnic_create_sysfs_entries(struct qlcnic_adapter *adapter)
3969 {
3970         struct device *dev = &adapter->pdev->dev;
3971
3972         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG)
3973                 if (device_create_file(dev, &dev_attr_bridged_mode))
3974                         dev_warn(dev,
3975                                 "failed to create bridged_mode sysfs entry\n");
3976 }
3977
3978 static void
3979 qlcnic_remove_sysfs_entries(struct qlcnic_adapter *adapter)
3980 {
3981         struct device *dev = &adapter->pdev->dev;
3982
3983         if (adapter->capabilities & QLCNIC_FW_CAPABILITY_BDG)
3984                 device_remove_file(dev, &dev_attr_bridged_mode);
3985 }
3986
3987 static void
3988 qlcnic_create_diag_entries(struct qlcnic_adapter *adapter)
3989 {
3990         struct device *dev = &adapter->pdev->dev;
3991
3992         if (device_create_bin_file(dev, &bin_attr_port_stats))
3993                 dev_info(dev, "failed to create port stats sysfs entry");
3994
3995         if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC)
3996                 return;
3997         if (device_create_file(dev, &dev_attr_diag_mode))
3998                 dev_info(dev, "failed to create diag_mode sysfs entry\n");
3999         if (device_create_bin_file(dev, &bin_attr_crb))
4000                 dev_info(dev, "failed to create crb sysfs entry\n");
4001         if (device_create_bin_file(dev, &bin_attr_mem))
4002                 dev_info(dev, "failed to create mem sysfs entry\n");
4003         if (device_create_bin_file(dev, &bin_attr_pci_config))
4004                 dev_info(dev, "failed to create pci config sysfs entry");
4005         if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED))
4006                 return;
4007         if (device_create_bin_file(dev, &bin_attr_esw_config))
4008                 dev_info(dev, "failed to create esw config sysfs entry");
4009         if (adapter->op_mode != QLCNIC_MGMT_FUNC)
4010                 return;
4011         if (device_create_bin_file(dev, &bin_attr_npar_config))
4012                 dev_info(dev, "failed to create npar config sysfs entry");
4013         if (device_create_bin_file(dev, &bin_attr_pm_config))
4014                 dev_info(dev, "failed to create pm config sysfs entry");
4015         if (device_create_bin_file(dev, &bin_attr_esw_stats))
4016                 dev_info(dev, "failed to create eswitch stats sysfs entry");
4017 }
4018
4019 static void
4020 qlcnic_remove_diag_entries(struct qlcnic_adapter *adapter)
4021 {
4022         struct device *dev = &adapter->pdev->dev;
4023
4024         device_remove_bin_file(dev, &bin_attr_port_stats);
4025
4026         if (adapter->op_mode == QLCNIC_NON_PRIV_FUNC)
4027                 return;
4028         device_remove_file(dev, &dev_attr_diag_mode);
4029         device_remove_bin_file(dev, &bin_attr_crb);
4030         device_remove_bin_file(dev, &bin_attr_mem);
4031         device_remove_bin_file(dev, &bin_attr_pci_config);
4032         if (!(adapter->flags & QLCNIC_ESWITCH_ENABLED))
4033                 return;
4034         device_remove_bin_file(dev, &bin_attr_esw_config);
4035         if (adapter->op_mode != QLCNIC_MGMT_FUNC)
4036                 return;
4037         device_remove_bin_file(dev, &bin_attr_npar_config);
4038         device_remove_bin_file(dev, &bin_attr_pm_config);
4039         device_remove_bin_file(dev, &bin_attr_esw_stats);
4040 }
4041
4042 #ifdef CONFIG_INET
4043
4044 #define is_qlcnic_netdev(dev) (dev->netdev_ops == &qlcnic_netdev_ops)
4045
4046 static void
4047 qlcnic_config_indev_addr(struct qlcnic_adapter *adapter,
4048                         struct net_device *dev, unsigned long event)
4049 {
4050         struct in_device *indev;
4051
4052         indev = in_dev_get(dev);
4053         if (!indev)
4054                 return;
4055
4056         for_ifa(indev) {
4057                 switch (event) {
4058                 case NETDEV_UP:
4059                         qlcnic_config_ipaddr(adapter,
4060                                         ifa->ifa_address, QLCNIC_IP_UP);
4061                         break;
4062                 case NETDEV_DOWN:
4063                         qlcnic_config_ipaddr(adapter,
4064                                         ifa->ifa_address, QLCNIC_IP_DOWN);
4065                         break;
4066                 default:
4067                         break;
4068                 }
4069         } endfor_ifa(indev);
4070
4071         in_dev_put(indev);
4072 }
4073
4074 static void
4075 qlcnic_restore_indev_addr(struct net_device *netdev, unsigned long event)
4076 {
4077         struct qlcnic_adapter *adapter = netdev_priv(netdev);
4078         struct net_device *dev;
4079         u16 vid;
4080
4081         qlcnic_config_indev_addr(adapter, netdev, event);
4082
4083         for_each_set_bit(vid, adapter->vlans, VLAN_N_VID) {
4084                 dev = vlan_find_dev(netdev, vid);
4085                 if (!dev)
4086                         continue;
4087                 qlcnic_config_indev_addr(adapter, dev, event);
4088         }
4089 }
4090
4091 static int qlcnic_netdev_event(struct notifier_block *this,
4092                                  unsigned long event, void *ptr)
4093 {
4094         struct qlcnic_adapter *adapter;
4095         struct net_device *dev = (struct net_device *)ptr;
4096
4097 recheck:
4098         if (dev == NULL)
4099                 goto done;
4100
4101         if (dev->priv_flags & IFF_802_1Q_VLAN) {
4102                 dev = vlan_dev_real_dev(dev);
4103                 goto recheck;
4104         }
4105
4106         if (!is_qlcnic_netdev(dev))
4107                 goto done;
4108
4109         adapter = netdev_priv(dev);
4110
4111         if (!adapter)
4112                 goto done;
4113
4114         if (!test_bit(__QLCNIC_DEV_UP, &adapter->state))
4115                 goto done;
4116
4117         qlcnic_config_indev_addr(adapter, dev, event);
4118 done:
4119         return NOTIFY_DONE;
4120 }
4121
4122 static int
4123 qlcnic_inetaddr_event(struct notifier_block *this,
4124                 unsigned long event, void *ptr)
4125 {
4126         struct qlcnic_adapter *adapter;
4127         struct net_device *dev;
4128
4129         struct in_ifaddr *ifa = (struct in_ifaddr *)ptr;
4130
4131         dev = ifa->ifa_dev ? ifa->ifa_dev->dev : NULL;
4132
4133 recheck:
4134         if (dev == NULL)
4135                 goto done;
4136
4137         if (dev->priv_flags & IFF_802_1Q_VLAN) {
4138                 dev = vlan_dev_real_dev(dev);
4139                 goto recheck;
4140         }
4141
4142         if (!is_qlcnic_netdev(dev))
4143                 goto done;
4144
4145         adapter = netdev_priv(dev);
4146
4147         if (!adapter)
4148                 goto done;
4149
4150         if (!test_bit(__QLCNIC_DEV_UP, &adapter->state))
4151                 goto done;
4152
4153         switch (event) {
4154         case NETDEV_UP:
4155                 qlcnic_config_ipaddr(adapter, ifa->ifa_address, QLCNIC_IP_UP);
4156                 break;
4157         case NETDEV_DOWN:
4158                 qlcnic_config_ipaddr(adapter, ifa->ifa_address, QLCNIC_IP_DOWN);
4159                 break;
4160         default:
4161                 break;
4162         }
4163
4164 done:
4165         return NOTIFY_DONE;
4166 }
4167
4168 static struct notifier_block    qlcnic_netdev_cb = {
4169         .notifier_call = qlcnic_netdev_event,
4170 };
4171
4172 static struct notifier_block qlcnic_inetaddr_cb = {
4173         .notifier_call = qlcnic_inetaddr_event,
4174 };
4175 #else
4176 static void
4177 qlcnic_restore_indev_addr(struct net_device *dev, unsigned long event)
4178 { }
4179 #endif
4180 static struct pci_error_handlers qlcnic_err_handler = {
4181         .error_detected = qlcnic_io_error_detected,
4182         .slot_reset = qlcnic_io_slot_reset,
4183         .resume = qlcnic_io_resume,
4184 };
4185
4186 static struct pci_driver qlcnic_driver = {
4187         .name = qlcnic_driver_name,
4188         .id_table = qlcnic_pci_tbl,
4189         .probe = qlcnic_probe,
4190         .remove = __devexit_p(qlcnic_remove),
4191 #ifdef CONFIG_PM
4192         .suspend = qlcnic_suspend,
4193         .resume = qlcnic_resume,
4194 #endif
4195         .shutdown = qlcnic_shutdown,
4196         .err_handler = &qlcnic_err_handler
4197
4198 };
4199
4200 static int __init qlcnic_init_module(void)
4201 {
4202         int ret;
4203
4204         printk(KERN_INFO "%s\n", qlcnic_driver_string);
4205
4206         qlcnic_wq = create_singlethread_workqueue("qlcnic");
4207         if (qlcnic_wq == NULL) {
4208                 printk(KERN_ERR "qlcnic: cannot create workqueue\n");
4209                 return -ENOMEM;
4210         }
4211
4212 #ifdef CONFIG_INET
4213         register_netdevice_notifier(&qlcnic_netdev_cb);
4214         register_inetaddr_notifier(&qlcnic_inetaddr_cb);
4215 #endif
4216
4217         ret = pci_register_driver(&qlcnic_driver);
4218         if (ret) {
4219 #ifdef CONFIG_INET
4220                 unregister_inetaddr_notifier(&qlcnic_inetaddr_cb);
4221                 unregister_netdevice_notifier(&qlcnic_netdev_cb);
4222 #endif
4223                 destroy_workqueue(qlcnic_wq);
4224         }
4225
4226         return ret;
4227 }
4228
4229 module_init(qlcnic_init_module);
4230
4231 static void __exit qlcnic_exit_module(void)
4232 {
4233
4234         pci_unregister_driver(&qlcnic_driver);
4235
4236 #ifdef CONFIG_INET
4237         unregister_inetaddr_notifier(&qlcnic_inetaddr_cb);
4238         unregister_netdevice_notifier(&qlcnic_netdev_cb);
4239 #endif
4240         destroy_workqueue(qlcnic_wq);
4241 }
4242
4243 module_exit(qlcnic_exit_module);