8 #include <linux/slab.h>
14 #include <linux/swab.h>
17 #include <linux/ipv6.h>
29 static const char qlcnic_driver_string[] =
"QLogic 1/10 GbE "
33 static int qlcnic_mac_learn;
37 static int use_msi = 1;
41 static int use_msi_x = 1;
45 static int auto_fw_reset = 1;
47 MODULE_PARM_DESC(auto_fw_reset,
"Auto firmware reset (0=disabled, 1=enabled");
49 static int load_fw_file;
53 static int qlcnic_config_npars;
55 MODULE_PARM_DESC(qlcnic_config_npars,
"Configure NPARs (0=disabled, 1=enabled");
60 static int qlcnic_open(
struct net_device *netdev);
61 static int qlcnic_close(
struct net_device *netdev);
62 static void qlcnic_tx_timeout(
struct net_device *netdev);
71 #ifdef CONFIG_NET_POLL_CONTROLLER
72 static void qlcnic_poll_controller(
struct net_device *netdev);
90 static void qlcnic_restore_indev_addr(
struct net_device *
dev,
unsigned long);
104 #define ENTRY(device) \
105 {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, (device)), \
106 .class = PCI_CLASS_NETWORK_ETHERNET << 8, .class_mask = ~0}
108 #define PCI_DEVICE_ID_QLOGIC_QLE824X 0x8020
125 static const u32 msi_tgt_status[8] = {
176 if (qlcnic_alloc_sds_rings(recv_ctx, adapter->
max_sds_rings))
205 qlcnic_free_sds_rings(adapter->
recv_ctx);
220 napi_enable(&sds_ring->
napi);
221 qlcnic_enable_int(sds_ring);
237 qlcnic_disable_int(sds_ring);
239 napi_disable(&sds_ring->
napi);
248 static void qlcnic_set_msix_bit(
struct pci_dev *pdev,
int enable)
255 pci_read_config_dword(pdev, pos, &control);
260 pci_write_config_dword(pdev, pos, control);
268 for (i = 0; i <
count; i++)
288 if (!is_valid_ether_addr(netdev->
perm_addr))
295 static int qlcnic_set_mac(
struct net_device *netdev,
void *
p)
303 if (!is_valid_ether_addr(addr->
sa_data))
308 qlcnic_napi_disable(adapter);
317 qlcnic_napi_enable(adapter);
323 .ndo_open = qlcnic_open,
324 .ndo_stop = qlcnic_close,
326 .ndo_get_stats = qlcnic_get_stats,
329 .ndo_set_mac_address = qlcnic_set_mac,
333 .ndo_tx_timeout = qlcnic_tx_timeout,
334 .ndo_vlan_rx_add_vid = qlcnic_vlan_rx_add,
335 .ndo_vlan_rx_kill_vid = qlcnic_vlan_rx_del,
336 #ifdef CONFIG_NET_POLL_CONTROLLER
337 .ndo_poll_controller = qlcnic_poll_controller,
342 .ndo_open = qlcnic_open,
348 .start_firmware = qlcnic_start_firmware
352 .config_bridged_mode = qlcnicvf_config_bridged_mode,
353 .config_led = qlcnicvf_config_led,
354 .start_firmware = qlcnicvf_start_firmware
364 qlcnic_set_msix_bit(pdev, 0);
368 qlcnic_init_msix_entries(adapter, num_msix);
372 qlcnic_set_msix_bit(pdev, 1);
389 static void qlcnic_enable_msi_legacy(
struct qlcnic_adapter *adapter)
394 if (use_msi && !pci_enable_msi(pdev)) {
397 msi_tgt_status[adapter->
ahw->pci_func]);
403 legacy_intrp = &legacy_intr[adapter->
ahw->pci_func];
429 if (!qlcnic_enable_msix(adapter, num_msix))
432 qlcnic_enable_msi_legacy(adapter);
447 if (adapter->
ahw->pci_base0 !=
NULL)
464 if (!adapter->
npars) {
481 pfn = pci_info[
i].
id;
482 if (pfn >= QLCNIC_MAX_PCI_FUNC) {
526 if (qlcnic_config_npars) {
530 id == adapter->
ahw->pci_func)
532 data |= (qlcnic_config_npars &
536 data =
readl(priv_op);
539 adapter->
ahw->pci_func));
563 msix_base =
readl(msix_base_addr);
569 op_mode =
readl(priv_op);
578 "HAL Version: %d Non Privileged function\n",
580 adapter->
nic_ops = &qlcnic_vf_ops;
582 adapter->
nic_ops = &qlcnic_ops;
590 unsigned long mem_len, pci_len0 = 0;
601 if (mem_ptr0 ==
NULL) {
602 dev_err(&pdev->
dev,
"failed to map PCI bar 0\n");
610 dev_info(&pdev->
dev,
"%dMB memory map\n", (
int)(mem_len>>20));
612 adapter->
ahw->pci_base0 = mem_ptr0;
613 adapter->
ahw->pci_len0 = pci_len0;
615 qlcnic_check_vf(adapter);
619 adapter->
ahw->pci_func)));
631 qlcnic_boards[i].device == pdev->
device &&
636 qlcnic_boards[i].short_name);
650 u32 fw_major, fw_minor, fw_build, prev_fw_version;
669 "Supports FW dump capability\n");
674 fw_major, fw_minor, fw_build);
717 adapter->
max_mtu = nic_info.max_mtu;
776 qlcnic_set_netdev_features(adapter, esw_cfg);
790 qlcnic_set_vlan_config(adapter, &esw_cfg);
791 qlcnic_set_eswitch_port_features(adapter, &esw_cfg);
836 err = qlcnic_initialize_nic(adapter);
844 op_mode =
readl(priv_op);
855 err = qlcnic_init_pci_info(adapter);
859 qlcnic_set_function_modes(adapter);
861 "HAL Version: %d, Management function\n",
866 "HAL Version: %d, Privileged function\n",
877 qlcnic_set_default_offload_settings(
struct qlcnic_adapter *adapter)
898 npar = &adapter->
npars[
i];
945 npar = &adapter->
npars[
i];
951 nic_info.min_tx_bw = npar->
min_bw;
952 nic_info.max_tx_bw = npar->
max_bw;
963 err = qlcnic_reset_eswitch_config(adapter, npar, i);
970 static int qlcnic_check_npar_opertional(
struct qlcnic_adapter *adapter)
983 if (!npar_opt_timeo) {
985 "Waiting for NPAR state to opertional timeout\n");
1000 err = qlcnic_set_default_offload_settings(adapter);
1004 err = qlcnic_reset_npar_config(adapter);
1008 qlcnic_dev_set_npar_ready(adapter);
1018 err = qlcnic_can_start_firmware(adapter);
1022 goto check_fw_status;
1036 goto check_fw_status;
1055 qlcnic_idc_debug_info(adapter, 1);
1057 err = qlcnic_check_eswitch_mode(adapter);
1060 "Memory allocation failed for eswitch\n");
1063 err = qlcnic_set_mgmt_operations(adapter);
1067 qlcnic_check_options(adapter);
1075 dev_err(&adapter->
pdev->dev,
"Device state set to failed\n");
1088 unsigned long flags = 0;
1093 handler = qlcnic_tmp_intr;
1099 handler = qlcnic_msix_intr;
1101 handler = qlcnic_msi_intr;
1104 handler = qlcnic_intr;
1107 adapter->
irq = netdev->
irq;
1113 flags, sds_ring->
name, sds_ring);
1148 if (qlcnic_set_eswitch_port_config(adapter))
1161 rds_ring = &adapter->
recv_ctx->rds_rings[ring];
1168 adapter->
ahw->linkup = 0;
1178 qlcnic_napi_enable(adapter);
1195 if (netif_running(netdev))
1196 err = __qlcnic_up(adapter, netdev);
1214 netif_tx_disable(netdev);
1218 if (adapter->
fhash.fnum)
1223 qlcnic_napi_disable(adapter);
1239 if (netif_running(netdev))
1240 __qlcnic_down(adapter, netdev);
1255 err = qlcnic_napi_add(adapter, netdev);
1261 dev_err(&pdev->
dev,
"Error in setting sw resources\n");
1262 goto err_out_napi_del;
1267 dev_err(&pdev->
dev,
"Error in setting hw resources\n");
1268 goto err_out_free_sw;
1271 err = qlcnic_request_irq(adapter);
1273 dev_err(&pdev->
dev,
"failed to setup interrupt\n");
1274 goto err_out_free_hw;
1277 qlcnic_create_sysfs_entries(adapter);
1287 qlcnic_napi_del(adapter);
1297 qlcnic_remove_sysfs_entries(adapter);
1301 qlcnic_free_irq(adapter);
1302 qlcnic_napi_del(adapter);
1317 sds_ring = &adapter->
recv_ctx->sds_rings[ring];
1318 qlcnic_disable_int(sds_ring);
1324 qlcnic_detach(adapter);
1329 if (qlcnic_attach(adapter))
1332 if (netif_running(netdev))
1333 __qlcnic_up(adapter, netdev);
1338 static int qlcnic_alloc_adapter_resources(
struct qlcnic_adapter *adapter)
1343 if (!adapter->
ahw) {
1345 "Failed to allocate recv ctx resources for adapter\n");
1353 "Failed to allocate recv ctx resources for adapter\n");
1367 static void qlcnic_free_adapter_resources(
struct qlcnic_adapter *adapter)
1372 if (adapter->
ahw->fw_dump.tmpl_hdr) {
1373 vfree(adapter->
ahw->fw_dump.tmpl_hdr);
1374 adapter->
ahw->fw_dump.tmpl_hdr =
NULL;
1390 if (netif_running(netdev))
1391 __qlcnic_down(adapter, netdev);
1393 qlcnic_detach(adapter);
1398 ret = qlcnic_attach(adapter);
1406 qlcnic_detach(adapter);
1412 rds_ring = &adapter->
recv_ctx->rds_rings[ring];
1418 sds_ring = &adapter->
recv_ctx->sds_rings[ring];
1419 qlcnic_enable_int(sds_ring);
1424 adapter->
ahw->loopback_state = 0;
1444 qlcnic_down(adapter, netdev);
1446 qlcnic_up(adapter, netdev);
1467 if (netif_running(netdev))
1468 __qlcnic_down(adapter, netdev);
1470 qlcnic_detach(adapter);
1472 if (netif_running(netdev)) {
1473 err = qlcnic_attach(adapter);
1475 __qlcnic_up(adapter, netdev);
1476 qlcnic_restore_indev_addr(netdev,
NETDEV_UP);
1526 dev_err(&pdev->
dev,
"failed to register net device\n");
1533 static int qlcnic_set_dma_mask(
struct pci_dev *pdev,
u8 *pci_using_dac)
1542 dev_err(&pdev->
dev,
"Unable to set DMA mask, aborting\n");
1552 adapter->
msix_entries = kcalloc(count,
sizeof(
struct msix_entry),
1558 dev_err(&adapter->
pdev->dev,
"failed allocating msix_entries\n");
1578 goto err_out_disable_pdev;
1581 err = qlcnic_set_dma_mask(pdev, &pci_using_dac);
1583 goto err_out_disable_pdev;
1587 goto err_out_disable_pdev;
1595 goto err_out_free_res;
1600 adapter = netdev_priv(netdev);
1604 err = qlcnic_alloc_adapter_resources(adapter);
1606 goto err_out_free_netdev;
1610 adapter->
ahw->revision_id = revision_id;
1617 INIT_LIST_HEAD(&adapter->
mac_list);
1619 err = qlcnic_setup_pci_map(adapter);
1621 goto err_out_free_hw;
1628 dev_err(&pdev->
dev,
"Error getting board config info.\n");
1629 goto err_out_iounmap;
1634 goto err_out_iounmap;
1638 err = adapter->
nic_ops->start_firmware(adapter);
1640 dev_err(&pdev->
dev,
"Loading fw failed. Please Reboot\n"
1641 "\t\tIf reboot doesn't help, try flashing the card\n");
1642 goto err_out_maintenance_mode;
1645 if (qlcnic_read_mac_addr(adapter))
1646 dev_warn(&pdev->
dev,
"failed to read mac addr\n");
1649 get_brd_name(adapter, brd_name);
1651 pr_info(
"%s: %s Board Chip rev 0x%x\n",
1653 brd_name, adapter->
ahw->revision_id);
1656 qlcnic_clear_stats(adapter);
1658 err = qlcnic_alloc_msix_entries(adapter, adapter->
max_rx_ques);
1660 goto err_out_decr_ref;
1662 qlcnic_setup_intr(adapter);
1664 err = qlcnic_setup_netdev(adapter, netdev, pci_using_dac);
1666 goto err_out_disable_msi;
1668 pci_set_drvdata(pdev, adapter);
1670 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work,
FW_POLL_DELAY);
1672 switch (adapter->
ahw->port_type) {
1674 dev_info(&adapter->
pdev->dev,
"%s: GbE port initialized\n",
1678 dev_info(&adapter->
pdev->dev,
"%s: XGbE port initialized\n",
1686 qlcnic_create_diag_entries(adapter);
1690 err_out_disable_msi:
1691 qlcnic_teardown_intr(adapter);
1695 qlcnic_clr_all_drv_state(adapter, 0);
1698 qlcnic_cleanup_pci_map(adapter);
1701 qlcnic_free_adapter_resources(adapter);
1703 err_out_free_netdev:
1709 err_out_disable_pdev:
1710 pci_set_drvdata(pdev,
NULL);
1714 err_out_maintenance_mode:
1715 netdev->
netdev_ops = &qlcnic_netdev_failed_ops;
1719 dev_err(&pdev->
dev,
"failed to register net device\n");
1720 goto err_out_decr_ref;
1722 pci_set_drvdata(pdev, adapter);
1723 qlcnic_create_diag_entries(adapter);
1732 adapter = pci_get_drvdata(pdev);
1733 if (adapter ==
NULL)
1736 netdev = adapter->
netdev;
1738 qlcnic_cancel_fw_work(adapter);
1742 qlcnic_detach(adapter);
1749 qlcnic_clr_all_drv_state(adapter, 0);
1753 qlcnic_free_lb_filters_mem(adapter);
1755 qlcnic_teardown_intr(adapter);
1758 qlcnic_remove_diag_entries(adapter);
1760 qlcnic_cleanup_pci_map(adapter);
1767 pci_set_drvdata(pdev,
NULL);
1769 qlcnic_free_adapter_resources(adapter);
1772 static int __qlcnic_shutdown(
struct pci_dev *pdev)
1780 qlcnic_cancel_fw_work(adapter);
1782 if (netif_running(netdev))
1783 qlcnic_down(adapter, netdev);
1785 qlcnic_clr_all_drv_state(adapter, 0);
1801 static void qlcnic_shutdown(
struct pci_dev *pdev)
1803 if (__qlcnic_shutdown(pdev))
1815 retval = __qlcnic_shutdown(pdev);
1824 qlcnic_resume(
struct pci_dev *pdev)
1838 err = adapter->
nic_ops->start_firmware(adapter);
1840 dev_err(&pdev->
dev,
"failed to start firmware\n");
1844 if (netif_running(netdev)) {
1845 err = qlcnic_up(adapter, netdev);
1849 qlcnic_restore_indev_addr(netdev,
NETDEV_UP);
1853 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work,
FW_POLL_DELAY);
1858 static int qlcnic_open(
struct net_device *netdev)
1865 netdev_err(netdev,
"Device in FAILED state\n");
1871 err = qlcnic_attach(adapter);
1875 err = __qlcnic_up(adapter, netdev);
1879 netif_start_queue(netdev);
1884 qlcnic_detach(adapter);
1891 static int qlcnic_close(
struct net_device *netdev)
1895 __qlcnic_down(adapter, netdev);
1904 if (adapter->
fhash.fmax && adapter->
fhash.fhead)
1917 for (i = 0; i < adapter->
fhash.fmax; i++)
1921 static void qlcnic_free_lb_filters_mem(
struct qlcnic_adapter *adapter)
1923 if (adapter->
fhash.fmax && adapter->
fhash.fhead)
1927 adapter->
fhash.fmax = 0;
1961 #define QLCNIC_MAC_HASH(MAC)\
1962 ((((MAC) & 0x70000) >> 0x10) | (((MAC) & 0x70000000000ULL) >> 0x25))
1981 if (adapter->
fhash.fnum >= adapter->
fhash.fmax)
1989 head = &(adapter->
fhash.fhead[hindex]);
1993 tmp_fil->
vlan_id == vlan_id) {
1997 qlcnic_change_filter(adapter, src_addr, vlan_id,
2008 qlcnic_change_filter(adapter, src_addr, vlan_id, tx_ring);
2014 hlist_add_head(&(fil->
fnode), head);
2015 adapter->
fhash.fnum++;
2025 u16 flags = 0, vlan_tci = 0;
2026 int copied,
offset, copy_len;
2049 vlan_tci = adapter->
pvid;
2061 skb_shinfo(skb)->gso_size > 0) {
2063 hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
2091 skb_copy_from_linear_data(skb, vh, 12);
2095 skb_copy_from_linear_data_offset(skb, 12,
2096 (
char *)vh + 16, copy_len - 16);
2112 skb_copy_from_linear_data_offset(skb, copied,
2113 (
char *) hwdesc + offset, copy_len);
2123 adapter->
stats.lso_frames++;
2129 l4proto = ip_hdr(skb)->protocol;
2136 l4proto = ipv6_hdr(skb)->nexthdr;
2152 qlcnic_map_tx_skb(
struct pci_dev *pdev,
2160 nr_frags = skb_shinfo(skb)->nr_frags;
2163 map = pci_map_single(pdev, skb->
data,
2165 if (pci_dma_mapping_error(pdev, map))
2169 nf->
length = skb_headlen(skb);
2171 for (i = 0; i < nr_frags; i++) {
2172 frag = &skb_shinfo(skb)->frags[
i];
2175 map = skb_frag_dma_map(&pdev->
dev, frag, 0, skb_frag_size(frag),
2181 nf->
length = skb_frag_size(frag);
2204 int nr_frags = skb_shinfo(skb)->nr_frags;
2207 for (i = 0; i < nr_frags; i++) {
2218 qlcnic_clear_cmddesc(
u64 *
desc)
2243 netif_stop_queue(netdev);
2253 frag_count = skb_shinfo(skb)->nr_frags + 1;
2260 delta += skb_frag_size(&skb_shinfo(skb)->frags[
i]);
2265 frag_count = 1 + skb_shinfo(skb)->nr_frags;
2269 netif_stop_queue(netdev);
2271 netif_start_queue(netdev);
2273 adapter->
stats.xmit_off++;
2281 pdev = adapter->
pdev;
2283 first_desc = hwdesc = &tx_ring->
desc_head[producer];
2284 qlcnic_clear_cmddesc((
u64 *)hwdesc);
2286 if (qlcnic_map_tx_skb(pdev, skb, pbuf)) {
2287 adapter->
stats.tx_dma_map_error++;
2297 for (i = 0; i < frag_count; i++) {
2301 if ((k == 0) && (i > 0)) {
2305 qlcnic_clear_cmddesc((
u64 *)hwdesc);
2331 if (
unlikely(qlcnic_tx_pkt(adapter, first_desc, skb)))
2335 qlcnic_send_filter(adapter, tx_ring, first_desc, skb);
2337 adapter->
stats.txbytes += skb->
len;
2338 adapter->
stats.xmitcalled++;
2345 qlcnic_unmap_buffers(pdev, skb, pbuf);
2347 adapter->
stats.txdropped++;
2355 u32 temp, temp_state, temp_val;
2365 "Device temperature %d degrees C exceeds"
2366 " maximum allowed. Hardware has been shut down.\n",
2372 "Device temperature %d degrees C "
2373 "exceeds operating range."
2374 " Immediate action needed.\n",
2380 "Device temperature is now %d degrees C"
2381 " in normal range.\n", temp_val);
2384 adapter->
temp = temp_state;
2392 if (adapter->
ahw->linkup && !linkup) {
2393 netdev_info(netdev,
"NIC Link is down\n");
2394 adapter->
ahw->linkup = 0;
2395 if (netif_running(netdev)) {
2397 netif_stop_queue(netdev);
2399 }
else if (!adapter->
ahw->linkup && linkup) {
2400 netdev_info(netdev,
"NIC Link is up\n");
2401 adapter->
ahw->linkup = 1;
2402 if (netif_running(netdev)) {
2404 netif_wake_queue(netdev);
2409 static void qlcnic_tx_timeout(
struct net_device *netdev)
2416 dev_err(&netdev->
dev,
"transmit timeout, resetting.\n");
2461 static irqreturn_t qlcnic_tmp_intr(
int irq,
void *data)
2473 if (qlcnic_clear_legacy_intr(adapter) ==
IRQ_NONE)
2478 qlcnic_enable_int(sds_ring);
2482 static irqreturn_t qlcnic_intr(
int irq,
void *data)
2487 if (qlcnic_clear_legacy_intr(adapter) ==
IRQ_NONE)
2490 napi_schedule(&sds_ring->
napi);
2495 static irqreturn_t qlcnic_msi_intr(
int irq,
void *data)
2503 napi_schedule(&sds_ring->
napi);
2507 static irqreturn_t qlcnic_msix_intr(
int irq,
void *data)
2511 napi_schedule(&sds_ring->
napi);
2515 static int qlcnic_process_cmd_ring(
struct qlcnic_adapter *adapter)
2517 u32 sw_consumer, hw_consumer;
2532 while (sw_consumer != hw_consumer) {
2536 pci_unmap_single(pdev, frag->
dma, frag->
length,
2541 pci_unmap_page(pdev, frag->
dma, frag->
length,
2546 adapter->
stats.xmitfinished++;
2556 if (count && netif_running(netdev)) {
2561 if (netif_queue_stopped(netdev) && netif_carrier_ok(netdev)) {
2563 netif_wake_queue(netdev);
2564 adapter->
stats.xmit_on++;
2599 tx_complete = qlcnic_process_cmd_ring(adapter);
2603 if ((work_done < budget) && tx_complete) {
2606 qlcnic_enable_int(sds_ring);
2612 static int qlcnic_rx_poll(
struct napi_struct *napi,
int budget)
2622 if (work_done < budget) {
2625 qlcnic_enable_int(sds_ring);
2631 #ifdef CONFIG_NET_POLL_CONTROLLER
2632 static void qlcnic_poll_controller(
struct net_device *netdev)
2642 qlcnic_intr(adapter->
irq, sds_ring);
2654 val |= encoding << 7;
2718 "Device state set to Failed. Please Reboot\n");
2719 }
else if (!(val & 0x11111111))
2738 int act,
state, active_mask;
2744 active_mask = (~(1 << (adapter->
ahw->pci_func * 4)));
2745 act = act & active_mask;
2748 if (((state & 0x11111111) == (act & 0x11111111)) ||
2749 ((act & 0x11111111) == ((state >> 1) & 0x11111111)))
2760 dev_warn(&adapter->
pdev->dev,
"IDC Version mismatch, driver's"
2782 if (!(val & (1 << (portnum * 4)))) {
2788 QLCDB(adapter, HW,
"Device state = %u\n", prev_state);
2790 switch (prev_state) {
2794 qlcnic_idc_debug_info(adapter, 0);
2799 ret = qlcnic_check_idc_ver(adapter);
2816 dev_err(&adapter->
pdev->dev,
"Device in failed state.\n");
2835 if (!dev_init_timeo) {
2837 "Waiting for device to initialize timeout\n");
2848 ret = qlcnic_check_idc_ver(adapter);
2869 qlcnic_schedule_work(adapter, qlcnic_fwinit_work,
2881 dev_info(&adapter->
pdev->dev,
"Detected state change from "
2882 "DEV_NEED_RESET, skipping ack check\n");
2883 goto skip_ack_check;
2887 dev_info(&adapter->
pdev->dev,
"Reset:Failed to get ack %d sec\n",
2889 goto skip_ack_check;
2892 if (!qlcnic_check_drv_state(adapter)) {
2900 QLCDB(adapter, DRV,
"Restarting fw\n");
2901 qlcnic_idc_debug_info(adapter, 0);
2910 if (adapter->
ahw->fw_dump.enable &&
2912 QLCDB(adapter, DRV,
"Take FW dump\n");
2919 if (!adapter->
nic_ops->start_firmware(adapter)) {
2920 qlcnic_schedule_work(adapter, qlcnic_attach_work, 0);
2931 QLCDB(adapter, HW,
"Func waiting: Device state=%u\n", dev_state);
2933 switch (dev_state) {
2935 if (!adapter->
nic_ops->start_firmware(adapter)) {
2936 qlcnic_schedule_work(adapter, qlcnic_attach_work, 0);
2943 qlcnic_schedule_work(adapter,
2949 dev_err(&adapter->
pdev->dev,
"Fwinit work failed state=%u "
2950 "fw_wait_cnt=%u\n", dev_state, adapter->
fw_wait_cnt);
2952 qlcnic_clr_all_drv_state(adapter, 0);
2967 if (netif_running(netdev))
2968 __qlcnic_down(adapter, netdev);
2970 qlcnic_down(adapter, netdev);
2976 "Detaching the device: peg halt status1=0x%x\n",
2981 "On board active cooling fan failed. "
2982 "Device has been halted.\n");
2984 "Replace the adapter.\n");
2991 dev_err(&adapter->
pdev->dev,
"Detaching the device: temp=%d\n",
2998 if (qlcnic_set_drv_state(adapter, adapter->
dev_state)) {
3000 "Failed to set driver state,"
3001 "detaching the device.\n");
3008 qlcnic_schedule_work(adapter, qlcnic_fwinit_work,
FW_POLL_DELAY);
3014 qlcnic_clr_all_drv_state(adapter, 1);
3047 dev_info(&adapter->
pdev->dev,
"Pause control frames disabled"
3055 netdev_err(adapter->
netdev,
3056 "Device is in FAILED state, Please Reboot\n");
3064 QLCDB(adapter, DRV,
"NEED_RESET state set\n");
3065 qlcnic_idc_debug_info(adapter, 0);
3080 QLCDB(adapter, DRV,
"NPAR operational state set\n");
3103 if (!adapter->
fw_work.work.func)
3120 qlcnic_clr_all_drv_state(adapter, 0);
3122 qlcnic_schedule_work(adapter, qlcnic_attach_work,
3126 QLCDB(adapter, DRV,
"Waiting for NPAR state to operational\n");
3130 if (netif_running(netdev)) {
3131 if (qlcnic_up(adapter, netdev))
3134 qlcnic_restore_indev_addr(netdev,
NETDEV_UP);
3143 if (!qlcnic_clr_drv_state(adapter))
3144 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work,
3154 if (qlcnic_check_temp(adapter))
3162 qlcnic_set_npar_non_operational(adapter);
3175 qlcnic_reset_hw_context(adapter);
3192 dev_err(&adapter->
pdev->dev,
"firmware hang detected\n");
3193 dev_err(&adapter->
pdev->dev,
"Dumping hw/fw registers\n"
3194 "PEG_HALT_STATUS1: 0x%x, PEG_HALT_STATUS2: 0x%x,\n"
3195 "PEG_NET_0_PC: 0x%x, PEG_NET_1_PC: 0x%x,\n"
3196 "PEG_NET_2_PC: 0x%x, PEG_NET_3_PC: 0x%x,\n"
3197 "PEG_NET_4_PC: 0x%x\n",
3208 "Firmware aborted with error code 0x00006700. "
3209 "Device is being reset.\n");
3214 if (auto_fw_reset &&
3217 qlcnic_schedule_work(adapter, qlcnic_detach_work, 0);
3218 QLCDB(adapter, DRV,
"fw recovery scheduled.\n");
3234 if (qlcnic_check_health(adapter))
3237 if (adapter->
fhash.fnum)
3241 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work,
FW_POLL_DELAY);
3244 static int qlcnic_is_first_func(
struct pci_dev *pdev)
3247 int val = pdev->
devfn;
3251 (pdev->
bus), pdev->
bus->number,
3265 static int qlcnic_attach_func(
struct pci_dev *pdev)
3267 int err, first_func;
3281 first_func = qlcnic_is_first_func(pdev);
3290 QLCDB(adapter, DRV,
"Restarting fw\n");
3294 err = adapter->
nic_ops->start_firmware(adapter);
3298 qlcnic_clr_drv_state(adapter);
3299 qlcnic_setup_intr(adapter);
3301 if (netif_running(netdev)) {
3302 err = qlcnic_attach(adapter);
3304 qlcnic_clr_all_drv_state(adapter, 1);
3310 err = qlcnic_up(adapter, netdev);
3314 qlcnic_restore_indev_addr(netdev,
NETDEV_UP);
3338 if (netif_running(netdev))
3339 qlcnic_down(adapter, netdev);
3341 qlcnic_detach(adapter);
3342 qlcnic_teardown_intr(adapter);
3358 static void qlcnic_io_resume(
struct pci_dev *pdev)
3366 qlcnic_schedule_work(adapter, qlcnic_fw_poll_work,
3375 err = qlcnic_can_start_firmware(adapter);
3379 err = qlcnic_check_npar_opertional(adapter);
3383 err = qlcnic_initialize_nic(adapter);
3387 qlcnic_check_options(adapter);
3389 err = qlcnic_set_eswitch_port_config(adapter);
3411 qlcnic_store_bridged_mode(
struct device *
dev,
3427 if (!adapter->
nic_ops->config_bridged_mode(adapter, !!
new))
3435 qlcnic_show_bridged_mode(
struct device *dev,
3439 int bridged_mode = 0;
3444 return sprintf(buf,
"%d\n", bridged_mode);
3449 .
show = qlcnic_show_bridged_mode,
3450 .
store = qlcnic_store_bridged_mode,
3454 qlcnic_store_diag_mode(
struct device *dev,
3470 qlcnic_show_diag_mode(
struct device *dev,
3481 .
show = qlcnic_show_diag_mode,
3482 .
store = qlcnic_store_diag_mode,
3487 if (!use_msi_x && !use_msi) {
3488 netdev_info(netdev,
"no msix or msi support, hence no rss\n");
3493 netdev_info(netdev,
"rss_ring valid range [2 - %x] in "
3494 " powers of 2\n", max_hw);
3510 if (netif_running(netdev))
3511 __qlcnic_down(adapter, netdev);
3512 qlcnic_detach(adapter);
3513 qlcnic_teardown_intr(adapter);
3515 if (qlcnic_enable_msix(adapter, data)) {
3516 netdev_info(netdev,
"failed setting max_rss; rss disabled\n");
3517 qlcnic_enable_msi_legacy(adapter);
3520 if (netif_running(netdev)) {
3521 err = qlcnic_attach(adapter);
3524 err = __qlcnic_up(adapter, netdev);
3527 qlcnic_restore_indev_addr(netdev,
NETDEV_UP);
3539 *rate =
LSB(beacon);
3540 *state =
MSB(beacon);
3542 QLCDB(adapter, DRV,
"rate %x state %x\n", *rate, *state);
3557 qlcnic_store_beacon(
struct device *dev,
3567 dev_warn(dev,
"LED test not supported for non "
3568 "privilege function\n");
3572 if (len !=
sizeof(
u16))
3576 err = qlcnic_validate_beacon(adapter, beacon, &b_state, &b_rate);
3580 if (adapter->
ahw->beacon_state == b_state)
3585 if (!adapter->
ahw->beacon_state)
3607 adapter->
ahw->beacon_state = b_state;
3614 if (!adapter->
ahw->beacon_state)
3622 qlcnic_show_beacon(
struct device *dev,
3627 return sprintf(buf,
"%d\n", adapter->
ahw->beacon_state);
3632 .
show = qlcnic_show_beacon,
3633 .
store = qlcnic_store_beacon,
3638 loff_t offset,
size_t size)
3640 size_t crb_size = 4;
3653 if ((size != crb_size) || (offset & (crb_size-1)))
3660 qlcnic_sysfs_read_crb(
struct file *filp,
struct kobject *kobj,
3662 char *buf, loff_t offset,
size_t size)
3670 ret = qlcnic_sysfs_validate_crb(adapter, offset, size);
3676 memcpy(buf, &qmdata, size);
3678 data =
QLCRD32(adapter, offset);
3679 memcpy(buf, &data, size);
3685 qlcnic_sysfs_write_crb(
struct file *filp,
struct kobject *kobj,
3687 char *buf, loff_t offset,
size_t size)
3695 ret = qlcnic_sysfs_validate_crb(adapter, offset, size);
3700 memcpy(&qmdata, buf, size);
3703 memcpy(&data, buf, size);
3704 QLCWR32(adapter, offset, data);
3711 loff_t offset,
size_t size)
3716 if ((size != 8) || (offset & 0x7))
3723 qlcnic_sysfs_read_mem(
struct file *filp,
struct kobject *kobj,
3725 char *buf, loff_t offset,
size_t size)
3732 ret = qlcnic_sysfs_validate_mem(adapter, offset, size);
3739 memcpy(buf, &data, size);
3745 qlcnic_sysfs_write_mem(
struct file *filp,
struct kobject *kobj,
3747 char *buf, loff_t offset,
size_t size)
3754 ret = qlcnic_sysfs_validate_mem(adapter, offset, size);
3758 memcpy(&data, buf, size);
3769 .
read = qlcnic_sysfs_read_crb,
3770 .
write = qlcnic_sysfs_write_crb,
3776 .
read = qlcnic_sysfs_read_mem,
3777 .
write = qlcnic_sysfs_write_mem,
3785 u8 src_pci_func, s_esw_id, d_esw_id;
3789 for (i = 0; i <
count; i++) {
3792 if (src_pci_func >= QLCNIC_MAX_PCI_FUNC
3793 || dest_pci_func >= QLCNIC_MAX_PCI_FUNC)
3802 s_esw_id = adapter->
npars[src_pci_func].phy_port;
3803 d_esw_id = adapter->
npars[dest_pci_func].phy_port;
3805 if (s_esw_id != d_esw_id)
3814 qlcnic_sysfs_write_pm_config(
struct file *filp,
struct kobject *kobj,
3815 struct bin_attribute *attr,
char *buf, loff_t offset,
size_t size)
3830 ret = validate_pm_config(adapter, pm_cfg, count);
3833 for (i = 0; i <
count; i++) {
3843 for (i = 0; i <
count; i++) {
3853 qlcnic_sysfs_read_pm_config(
struct file *filp,
struct kobject *kobj,
3854 struct bin_attribute *attr,
char *buf, loff_t offset,
size_t size)
3861 if (size !=
sizeof(pm_cfg))
3871 memcpy(buf, &pm_cfg, size);
3886 for (i = 0; i <
count; i++) {
3888 if (pci_func >= QLCNIC_MAX_PCI_FUNC)
3895 switch (esw_cfg[i].op_mode) {
3899 if (esw_cfg[i].mac_anti_spoof != 0)
3901 if (esw_cfg[i].mac_override != 1)
3903 if (esw_cfg[i].promisc_mode != 1)
3914 if (!esw_cfg[i].op_type)
3925 qlcnic_sysfs_write_esw_config(
struct file *
file,
struct kobject *kobj,
3926 struct bin_attribute *attr,
char *buf, loff_t offset,
size_t size)
3941 ret = validate_esw_config(adapter, esw_cfg, count);
3945 for (i = 0; i <
count; i++) {
3950 if (adapter->
ahw->pci_func != esw_cfg[i].
pci_func)
3958 switch (esw_cfg[i].op_mode) {
3960 qlcnic_set_eswitch_port_features(adapter, &esw_cfg[i]);
3963 qlcnic_set_vlan_config(adapter, &esw_cfg[i]);
3967 qlcnic_set_vlan_config(adapter, &esw_cfg[i]);
3975 for (i = 0; i <
count; i++) {
3978 switch (esw_cfg[i].op_mode) {
3999 qlcnic_sysfs_read_esw_config(
struct file *file,
struct kobject *kobj,
4000 struct bin_attribute *attr,
char *buf, loff_t offset,
size_t size)
4007 if (size !=
sizeof(esw_cfg))
4017 memcpy(buf, &esw_cfg, size);
4028 for (i = 0; i <
count; i++) {
4030 if (pci_func >= QLCNIC_MAX_PCI_FUNC)
4044 qlcnic_sysfs_write_npar_config(
struct file *file,
struct kobject *kobj,
4045 struct bin_attribute *attr,
char *buf, loff_t offset,
size_t size)
4060 ret = validate_npar_config(adapter, np_cfg, count);
4064 for (i = 0; i <
count ; i++) {
4070 nic_info.min_tx_bw = np_cfg[
i].
min_bw;
4071 nic_info.max_tx_bw = np_cfg[
i].
max_bw;
4075 adapter->
npars[
i].min_bw = nic_info.min_tx_bw;
4076 adapter->
npars[
i].max_bw = nic_info.max_tx_bw;
4083 qlcnic_sysfs_read_npar_config(
struct file *file,
struct kobject *kobj,
4084 struct bin_attribute *attr,
char *buf, loff_t offset,
size_t size)
4092 if (size !=
sizeof(np_cfg))
4104 np_cfg[i].
port_num = nic_info.phys_port;
4105 np_cfg[i].
fw_capab = nic_info.capabilities;
4106 np_cfg[i].
min_bw = nic_info.min_tx_bw ;
4107 np_cfg[i].
max_bw = nic_info.max_tx_bw;
4111 memcpy(buf, &np_cfg, size);
4116 qlcnic_sysfs_get_port_stats(
struct file *file,
struct kobject *kobj,
4117 struct bin_attribute *attr,
char *buf, loff_t offset,
size_t size)
4127 if (offset >= QLCNIC_MAX_PCI_FUNC)
4146 qlcnic_sysfs_get_esw_stats(
struct file *file,
struct kobject *kobj,
4147 struct bin_attribute *attr,
char *buf, loff_t offset,
size_t size)
4157 if (offset >= QLCNIC_NIU_MAX_XG_PORTS)
4160 memset(&esw_stats, 0, size);
4171 memcpy(buf, &esw_stats, size);
4176 qlcnic_sysfs_clear_esw_stats(
struct file *file,
struct kobject *kobj,
4177 struct bin_attribute *attr,
char *buf, loff_t offset,
size_t size)
4183 if (offset >= QLCNIC_NIU_MAX_XG_PORTS)
4200 qlcnic_sysfs_clear_port_stats(
struct file *file,
struct kobject *kobj,
4201 struct bin_attribute *attr,
char *buf, loff_t offset,
size_t size)
4208 if (offset >= QLCNIC_MAX_PCI_FUNC)
4225 qlcnic_sysfs_read_pci_config(
struct file *file,
struct kobject *kobj,
4226 struct bin_attribute *attr,
char *buf, loff_t offset,
size_t size)
4234 if (size !=
sizeof(pci_cfg))
4237 pci_info = kcalloc(QLCNIC_MAX_PCI_FUNC,
sizeof(*pci_info),
GFP_KERNEL);
4248 pci_cfg[
i].pci_func = pci_info[
i].
id;
4249 pci_cfg[
i].func_type = pci_info[
i].
type;
4255 memcpy(buf, &pci_cfg, size);
4262 .
read = qlcnic_sysfs_read_npar_config,
4263 .
write = qlcnic_sysfs_write_npar_config,
4269 .
read = qlcnic_sysfs_read_pci_config,
4276 .
read = qlcnic_sysfs_get_port_stats,
4277 .
write = qlcnic_sysfs_clear_port_stats,
4283 .
read = qlcnic_sysfs_get_esw_stats,
4284 .
write = qlcnic_sysfs_clear_esw_stats,
4290 .
read = qlcnic_sysfs_read_esw_config,
4291 .
write = qlcnic_sysfs_write_esw_config,
4297 .
read = qlcnic_sysfs_read_pm_config,
4298 .
write = qlcnic_sysfs_write_pm_config,
4309 "failed to create bridged_mode sysfs entry\n");
4328 dev_info(dev,
"failed to create port stats sysfs entry");
4333 dev_info(dev,
"failed to create diag_mode sysfs entry\n");
4335 dev_info(dev,
"failed to create crb sysfs entry\n");
4337 dev_info(dev,
"failed to create mem sysfs entry\n");
4343 dev_info(dev,
"failed to create pci config sysfs entry");
4345 dev_info(dev,
"failed to create beacon sysfs entry");
4350 dev_info(dev,
"failed to create esw config sysfs entry");
4354 dev_info(dev,
"failed to create npar config sysfs entry");
4356 dev_info(dev,
"failed to create pm config sysfs entry");
4358 dev_info(dev,
"failed to create eswitch stats sysfs entry");
4390 #define is_qlcnic_netdev(dev) (dev->netdev_ops == &qlcnic_netdev_ops)
4396 struct in_device *indev;
4398 indev = in_dev_get(dev);
4415 } endfor_ifa(indev);
4421 qlcnic_restore_indev_addr(
struct net_device *netdev,
unsigned long event)
4427 qlcnic_config_indev_addr(adapter, netdev, event);
4433 qlcnic_config_indev_addr(adapter, dev, event);
4438 unsigned long event,
void *
ptr)
4452 if (!is_qlcnic_netdev(dev))
4455 adapter = netdev_priv(dev);
4463 qlcnic_config_indev_addr(adapter, dev, event);
4470 unsigned long event,
void *ptr)
4475 struct in_ifaddr *ifa = (
struct in_ifaddr *)ptr;
4477 dev = ifa->ifa_dev ? ifa->ifa_dev->
dev :
NULL;
4488 if (!is_qlcnic_netdev(dev))
4491 adapter = netdev_priv(dev);
4523 qlcnic_restore_indev_addr(
struct net_device *dev,
unsigned long event)
4527 .error_detected = qlcnic_io_error_detected,
4528 .slot_reset = qlcnic_io_slot_reset,
4529 .resume = qlcnic_io_resume,
4534 .id_table = qlcnic_pci_tbl,
4535 .probe = qlcnic_probe,
4538 .suspend = qlcnic_suspend,
4539 .resume = qlcnic_resume,
4541 .shutdown = qlcnic_shutdown,
4542 .err_handler = &qlcnic_err_handler
4546 static int __init qlcnic_init_module(
void)
4553 if (qlcnic_wq ==
NULL) {
4563 ret = pci_register_driver(&qlcnic_driver);
4577 static void __exit qlcnic_exit_module(
void)