Lines Matching +full:master +full:- +full:stats
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Copyright (C) 2003 - 2009 NetXen, Inc.
4 * Copyright (C) 2009 - QLogic Corporation.
15 #include <linux/dma-mapping.h>
33 /* Default to restricted 1G auto-neg mode */
74 struct rtnl_link_stats64 *stats);
105 NXWRIO(adapter, tx_ring->crb_cmd_producer, tx_ring->producer); in netxen_nic_update_cmd_producer()
117 NXWRIO(adapter, tx_ring->crb_cmd_consumer, tx_ring->sw_consumer); in netxen_nic_update_cmd_consumer()
131 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_nic_disable_int()
133 NXWRIO(adapter, sds_ring->crb_intr_mask, 0); in netxen_nic_disable_int()
138 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_nic_enable_int()
140 NXWRIO(adapter, sds_ring->crb_intr_mask, 0x1); in netxen_nic_enable_int()
143 NXWRIO(adapter, adapter->tgt_mask_reg, 0xfbff); in netxen_nic_enable_int()
151 recv_ctx->sds_rings = kzalloc(size, GFP_KERNEL); in netxen_alloc_sds_rings()
153 return recv_ctx->sds_rings == NULL; in netxen_alloc_sds_rings()
159 kfree(recv_ctx->sds_rings); in netxen_free_sds_rings()
160 recv_ctx->sds_rings = NULL; in netxen_free_sds_rings()
168 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_add()
170 if (netxen_alloc_sds_rings(recv_ctx, adapter->max_sds_rings)) in netxen_napi_add()
171 return -ENOMEM; in netxen_napi_add()
173 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_add()
174 sds_ring = &recv_ctx->sds_rings[ring]; in netxen_napi_add()
175 netif_napi_add(netdev, &sds_ring->napi, netxen_nic_poll); in netxen_napi_add()
186 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_del()
188 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_del()
189 sds_ring = &recv_ctx->sds_rings[ring]; in netxen_napi_del()
190 netif_napi_del(&sds_ring->napi); in netxen_napi_del()
193 netxen_free_sds_rings(&adapter->recv_ctx); in netxen_napi_del()
201 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_enable()
203 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_enable()
204 sds_ring = &recv_ctx->sds_rings[ring]; in netxen_napi_enable()
205 napi_enable(&sds_ring->napi); in netxen_napi_enable()
215 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_disable()
217 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_disable()
218 sds_ring = &recv_ctx->sds_rings[ring]; in netxen_napi_disable()
220 napi_synchronize(&sds_ring->napi); in netxen_napi_disable()
221 napi_disable(&sds_ring->napi); in netxen_napi_disable()
227 struct pci_dev *pdev = adapter->pdev; in nx_set_dma_mask()
230 adapter->pci_using_dac = 0; in nx_set_dma_mask()
235 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in nx_set_dma_mask()
242 if (dma_set_mask(&pdev->dev, mask) == 0 && in nx_set_dma_mask()
243 dma_set_coherent_mask(&pdev->dev, cmask) == 0) { in nx_set_dma_mask()
244 adapter->pci_using_dac = 1; in nx_set_dma_mask()
248 return -EIO; in nx_set_dma_mask()
257 struct pci_dev *pdev = adapter->pdev; in nx_update_dma_mask()
265 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) && (shift > 9)) in nx_update_dma_mask()
267 else if ((adapter->ahw.revision_id == NX_P2_C1) && (shift <= 4)) in nx_update_dma_mask()
271 old_mask = pdev->dma_mask; in nx_update_dma_mask()
272 old_cmask = pdev->dev.coherent_dma_mask; in nx_update_dma_mask()
276 err = dma_set_mask(&pdev->dev, mask); in nx_update_dma_mask()
280 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in nx_update_dma_mask()
282 err = dma_set_coherent_mask(&pdev->dev, mask); in nx_update_dma_mask()
286 dev_info(&pdev->dev, "using %d-bit dma mask\n", 32+shift); in nx_update_dma_mask()
292 dma_set_mask(&pdev->dev, old_mask); in nx_update_dma_mask()
293 dma_set_coherent_mask(&pdev->dev, old_cmask); in nx_update_dma_mask()
306 if (!NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_check_hw_init()
309 /* PCI bus master workaround */ in netxen_check_hw_init()
322 return -EIO; in netxen_check_hw_init()
334 return -EIO; in netxen_check_hw_init()
345 val = adapter->ahw.board_type; in netxen_set_port_mode()
386 pdev = adapter->pdev; in netxen_pcie_strap_init()
392 * if gen1 and B0, set F1020 - if gen 2, do nothing in netxen_pcie_strap_init()
402 dev_info(&adapter->pdev->dev, "Gen2 strapping detected\n"); in netxen_pcie_strap_init()
407 dev_info(&adapter->pdev->dev, "Gen1 strapping detected\n"); in netxen_pcie_strap_init()
408 if (adapter->ahw.revision_id == NX_P3_B0) in netxen_pcie_strap_init()
419 pdevfuncsave = pdev->devfn; in netxen_pcie_strap_init()
427 pdev->devfn++; in netxen_pcie_strap_init()
429 pdev->devfn = pdevfuncsave; in netxen_pcie_strap_init()
436 if (pdev->msix_cap) { in netxen_set_msix_bit()
437 pci_read_config_dword(pdev, pdev->msix_cap, &control); in netxen_set_msix_bit()
442 pci_write_config_dword(pdev, pdev->msix_cap, control); in netxen_set_msix_bit()
451 adapter->msix_entries[i].entry = i; in netxen_init_msix_entries()
460 struct net_device *netdev = adapter->netdev; in netxen_read_mac_addr()
461 struct pci_dev *pdev = adapter->pdev; in netxen_read_mac_addr()
464 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_read_mac_addr()
466 return -EIO; in netxen_read_mac_addr()
469 return -EIO; in netxen_read_mac_addr()
474 addr[i] = *(p + 5 - i); in netxen_read_mac_addr()
477 memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len); in netxen_read_mac_addr()
481 if (!is_valid_ether_addr(netdev->dev_addr)) in netxen_read_mac_addr()
482 dev_warn(&pdev->dev, "Bad MAC address %pM.\n", netdev->dev_addr); in netxen_read_mac_addr()
492 if (!is_valid_ether_addr(addr->sa_data)) in netxen_nic_set_mac()
493 return -EADDRNOTAVAIL; in netxen_nic_set_mac()
500 memcpy(adapter->mac_addr, addr->sa_data, netdev->addr_len); in netxen_nic_set_mac()
501 eth_hw_addr_set(netdev, addr->sa_data); in netxen_nic_set_mac()
502 adapter->macaddr_set(adapter, addr->sa_data); in netxen_nic_set_mac()
515 adapter->set_multi(dev); in netxen_set_multicast_list()
536 if (!((dev->features ^ features) & NETIF_F_LRO)) in netxen_set_features()
543 return -EIO; in netxen_set_features()
546 return -EIO; in netxen_set_features()
582 if (adapter->ahw.revision_id >= NX_P3_B0) in netxen_initialize_interrupt_registers()
583 legacy_intrp = &legacy_intr[adapter->ahw.pci_func]; in netxen_initialize_interrupt_registers()
587 tgt_status_reg = legacy_intrp->tgt_status_reg; in netxen_initialize_interrupt_registers()
590 adapter->int_vec_bit = legacy_intrp->int_vec_bit; in netxen_initialize_interrupt_registers()
591 adapter->tgt_status_reg = netxen_get_ioaddr(adapter, tgt_status_reg); in netxen_initialize_interrupt_registers()
592 adapter->tgt_mask_reg = netxen_get_ioaddr(adapter, in netxen_initialize_interrupt_registers()
593 legacy_intrp->tgt_mask_reg); in netxen_initialize_interrupt_registers()
594 adapter->pci_int_reg = netxen_get_ioaddr(adapter, in netxen_initialize_interrupt_registers()
595 legacy_intrp->pci_int_reg); in netxen_initialize_interrupt_registers()
596 adapter->isr_int_vec = netxen_get_ioaddr(adapter, ISR_INT_VECTOR); in netxen_initialize_interrupt_registers()
598 if (adapter->ahw.revision_id >= NX_P3_B1) in netxen_initialize_interrupt_registers()
599 adapter->crb_int_state_reg = netxen_get_ioaddr(adapter, in netxen_initialize_interrupt_registers()
602 adapter->crb_int_state_reg = netxen_get_ioaddr(adapter, in netxen_initialize_interrupt_registers()
609 struct pci_dev *pdev = adapter->pdev; in netxen_setup_msi_interrupts()
613 if (adapter->msix_supported) { in netxen_setup_msi_interrupts()
615 err = pci_enable_msix_range(pdev, adapter->msix_entries, in netxen_setup_msi_interrupts()
618 adapter->flags |= NETXEN_NIC_MSIX_ENABLED; in netxen_setup_msi_interrupts()
621 if (adapter->rss_supported) in netxen_setup_msi_interrupts()
622 adapter->max_sds_rings = num_msix; in netxen_setup_msi_interrupts()
624 dev_info(&pdev->dev, "using msi-x interrupts\n"); in netxen_setup_msi_interrupts()
631 value = msi_tgt_status[adapter->ahw.pci_func]; in netxen_setup_msi_interrupts()
632 adapter->flags |= NETXEN_NIC_MSI_ENABLED; in netxen_setup_msi_interrupts()
633 adapter->tgt_status_reg = netxen_get_ioaddr(adapter, value); in netxen_setup_msi_interrupts()
634 adapter->msix_entries[0].vector = pdev->irq; in netxen_setup_msi_interrupts()
635 dev_info(&pdev->dev, "using msi interrupts\n"); in netxen_setup_msi_interrupts()
639 dev_err(&pdev->dev, "Failed to acquire MSI-X/MSI interrupt vector\n"); in netxen_setup_msi_interrupts()
640 return -EIO; in netxen_setup_msi_interrupts()
645 struct pci_dev *pdev = adapter->pdev; in netxen_setup_intr()
648 if (adapter->rss_supported) in netxen_setup_intr()
654 adapter->max_sds_rings = 1; in netxen_setup_intr()
655 adapter->flags &= ~(NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED); in netxen_setup_intr()
660 if (adapter->portnum == 0) { in netxen_setup_intr()
668 dev_err(&pdev->dev, "Co-existence of MSI-X/MSI and INTx interrupts is not supported\n"); in netxen_setup_intr()
669 return -EIO; in netxen_setup_intr()
674 adapter->msix_entries[0].vector = pdev->irq; in netxen_setup_intr()
675 dev_info(&pdev->dev, "using legacy interrupts\n"); in netxen_setup_intr()
683 if (adapter->flags & NETXEN_NIC_MSIX_ENABLED) in netxen_teardown_intr()
684 pci_disable_msix(adapter->pdev); in netxen_teardown_intr()
685 if (adapter->flags & NETXEN_NIC_MSI_ENABLED) in netxen_teardown_intr()
686 pci_disable_msi(adapter->pdev); in netxen_teardown_intr()
692 if (adapter->ahw.db_base != NULL) in netxen_cleanup_pci_map()
693 iounmap(adapter->ahw.db_base); in netxen_cleanup_pci_map()
694 if (adapter->ahw.pci_base0 != NULL) in netxen_cleanup_pci_map()
695 iounmap(adapter->ahw.pci_base0); in netxen_cleanup_pci_map()
696 if (adapter->ahw.pci_base1 != NULL) in netxen_cleanup_pci_map()
697 iounmap(adapter->ahw.pci_base1); in netxen_cleanup_pci_map()
698 if (adapter->ahw.pci_base2 != NULL) in netxen_cleanup_pci_map()
699 iounmap(adapter->ahw.pci_base2); in netxen_cleanup_pci_map()
710 struct pci_dev *pdev = adapter->pdev; in netxen_setup_pci_map()
711 int pci_func = adapter->ahw.pci_func; in netxen_setup_pci_map()
712 struct netxen_hardware_context *ahw = &adapter->ahw; in netxen_setup_pci_map()
720 adapter->ahw.crb_win = -1; in netxen_setup_pci_map()
721 adapter->ahw.ocm_win = -1; in netxen_setup_pci_map()
730 ahw->pci_base0 = ioremap(mem_base, FIRST_PAGE_GROUP_SIZE); in netxen_setup_pci_map()
731 ahw->pci_base1 = ioremap(mem_base + SECOND_PAGE_GROUP_START, in netxen_setup_pci_map()
733 ahw->pci_base2 = ioremap(mem_base + THIRD_PAGE_GROUP_START, in netxen_setup_pci_map()
735 if (ahw->pci_base0 == NULL || ahw->pci_base1 == NULL || in netxen_setup_pci_map()
736 ahw->pci_base2 == NULL) { in netxen_setup_pci_map()
737 dev_err(&pdev->dev, "failed to map PCI bar 0\n"); in netxen_setup_pci_map()
738 err = -EIO; in netxen_setup_pci_map()
742 ahw->pci_len0 = FIRST_PAGE_GROUP_SIZE; in netxen_setup_pci_map()
746 ahw->pci_base1 = ioremap(mem_base, SECOND_PAGE_GROUP_SIZE); in netxen_setup_pci_map()
747 ahw->pci_base2 = ioremap(mem_base + THIRD_PAGE_GROUP_START - in netxen_setup_pci_map()
749 if (ahw->pci_base1 == NULL || ahw->pci_base2 == NULL) { in netxen_setup_pci_map()
750 dev_err(&pdev->dev, "failed to map PCI bar 0\n"); in netxen_setup_pci_map()
751 err = -EIO; in netxen_setup_pci_map()
757 ahw->pci_base0 = pci_ioremap_bar(pdev, 0); in netxen_setup_pci_map()
758 if (ahw->pci_base0 == NULL) { in netxen_setup_pci_map()
759 dev_err(&pdev->dev, "failed to map PCI bar 0\n"); in netxen_setup_pci_map()
760 return -EIO; in netxen_setup_pci_map()
762 ahw->pci_len0 = mem_len; in netxen_setup_pci_map()
764 return -EIO; in netxen_setup_pci_map()
769 dev_info(&pdev->dev, "%dMB memory map\n", (int)(mem_len>>20)); in netxen_setup_pci_map()
771 if (NX_IS_REVISION_P3P(adapter->ahw.revision_id)) { in netxen_setup_pci_map()
772 adapter->ahw.ocm_win_crb = netxen_get_ioaddr(adapter, in netxen_setup_pci_map()
775 } else if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_setup_pci_map()
776 adapter->ahw.ocm_win_crb = netxen_get_ioaddr(adapter, in netxen_setup_pci_map()
780 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_setup_pci_map()
789 err = -EIO; in netxen_setup_pci_map()
797 err = -EIO; in netxen_setup_pci_map()
802 adapter->ahw.db_base = db_ptr; in netxen_setup_pci_map()
803 adapter->ahw.db_len = db_len; in netxen_setup_pci_map()
819 struct pci_dev *pdev = adapter->pdev; in netxen_check_options()
821 adapter->driver_mismatch = 0; in netxen_check_options()
828 dev_err(&pdev->dev, "error reading board info\n"); in netxen_check_options()
829 adapter->driver_mismatch = 1; in netxen_check_options()
839 prev_fw_version = adapter->fw_version; in netxen_check_options()
840 adapter->fw_version = NETXEN_VERSION_CODE(fw_major, fw_minor, fw_build); in netxen_check_options()
843 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_check_options()
844 if (adapter->mdump.md_template == NULL || in netxen_check_options()
845 adapter->fw_version > prev_fw_version) { in netxen_check_options()
846 kfree(adapter->mdump.md_template); in netxen_check_options()
847 adapter->mdump.md_template = NULL; in netxen_check_options()
850 dev_err(&adapter->pdev->dev, in netxen_check_options()
855 if (adapter->portnum == 0) { in netxen_check_options()
856 if (netxen_nic_get_brd_name_by_type(adapter->ahw.board_type, in netxen_check_options()
862 brd_name, serial_num, adapter->ahw.revision_id); in netxen_check_options()
865 if (adapter->fw_version < NETXEN_VERSION_CODE(3, 4, 216)) { in netxen_check_options()
866 adapter->driver_mismatch = 1; in netxen_check_options()
867 dev_warn(&pdev->dev, "firmware version %d.%d.%d unsupported\n", in netxen_check_options()
872 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_check_options()
874 adapter->ahw.cut_through = (i & 0x8000) ? 1 : 0; in netxen_check_options()
877 dev_info(&pdev->dev, "Driver v%s, firmware v%d.%d.%d [%s]\n", in netxen_check_options()
879 adapter->ahw.cut_through ? "cut-through" : "legacy"); in netxen_check_options()
881 if (adapter->fw_version >= NETXEN_VERSION_CODE(4, 0, 222)) in netxen_check_options()
882 adapter->capabilities = NXRD32(adapter, CRB_FW_CAPABILITIES_1); in netxen_check_options()
884 if (adapter->ahw.port_type == NETXEN_NIC_XGBE) { in netxen_check_options()
885 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_10G; in netxen_check_options()
886 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G; in netxen_check_options()
887 } else if (adapter->ahw.port_type == NETXEN_NIC_GBE) { in netxen_check_options()
888 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_1G; in netxen_check_options()
889 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G; in netxen_check_options()
892 adapter->msix_supported = 0; in netxen_check_options()
893 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_check_options()
894 adapter->msix_supported = !!use_msi_x; in netxen_check_options()
895 adapter->rss_supported = !!use_msi_x; in netxen_check_options()
903 switch (adapter->ahw.board_type) { in netxen_check_options()
906 adapter->msix_supported = !!use_msi_x; in netxen_check_options()
907 adapter->rss_supported = !!use_msi_x; in netxen_check_options()
915 adapter->num_txd = MAX_CMD_DESCRIPTORS; in netxen_check_options()
917 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_check_options()
918 adapter->num_lro_rxd = MAX_LRO_RCV_DESCRIPTORS; in netxen_check_options()
919 adapter->max_rds_rings = 3; in netxen_check_options()
921 adapter->num_lro_rxd = 0; in netxen_check_options()
922 adapter->max_rds_rings = 2; in netxen_check_options()
930 struct pci_dev *pdev = adapter->pdev; in netxen_start_firmware()
949 dev_err(&pdev->dev, "error in init HW init sequence\n"); in netxen_start_firmware()
971 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_start_firmware()
980 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_start_firmware()
984 if (adapter->ahw.port_type == NETXEN_NIC_XGBE) in netxen_start_firmware()
1003 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_start_firmware()
1020 adapter->need_fw_reset = 0; in netxen_start_firmware()
1037 struct net_device *netdev = adapter->netdev; in netxen_nic_request_irq()
1038 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_nic_request_irq()
1040 if (adapter->flags & NETXEN_NIC_MSIX_ENABLED) in netxen_nic_request_irq()
1042 else if (adapter->flags & NETXEN_NIC_MSI_ENABLED) in netxen_nic_request_irq()
1048 adapter->irq = netdev->irq; in netxen_nic_request_irq()
1050 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_nic_request_irq()
1051 sds_ring = &recv_ctx->sds_rings[ring]; in netxen_nic_request_irq()
1052 sprintf(sds_ring->name, "%s[%d]", netdev->name, ring); in netxen_nic_request_irq()
1053 err = request_irq(sds_ring->irq, handler, in netxen_nic_request_irq()
1054 flags, sds_ring->name, sds_ring); in netxen_nic_request_irq()
1068 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_nic_free_irq()
1070 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_nic_free_irq()
1071 sds_ring = &recv_ctx->sds_rings[ring]; in netxen_nic_free_irq()
1072 free_irq(sds_ring->irq, sds_ring); in netxen_nic_free_irq()
1079 adapter->coal.flags = NETXEN_NIC_INTR_DEFAULT; in netxen_nic_init_coalesce_defaults()
1080 adapter->coal.normal.data.rx_time_us = in netxen_nic_init_coalesce_defaults()
1082 adapter->coal.normal.data.rx_packets = in netxen_nic_init_coalesce_defaults()
1084 adapter->coal.normal.data.tx_time_us = in netxen_nic_init_coalesce_defaults()
1086 adapter->coal.normal.data.tx_packets = in netxen_nic_init_coalesce_defaults()
1096 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in __netxen_nic_up()
1097 return -EIO; in __netxen_nic_up()
1099 err = adapter->init_port(adapter, adapter->physical_port); in __netxen_nic_up()
1102 netxen_nic_driver_name, adapter->portnum); in __netxen_nic_up()
1105 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in __netxen_nic_up()
1106 adapter->macaddr_set(adapter, adapter->mac_addr); in __netxen_nic_up()
1108 adapter->set_multi(netdev); in __netxen_nic_up()
1109 adapter->set_mtu(adapter, netdev->mtu); in __netxen_nic_up()
1111 adapter->ahw.linkup = 0; in __netxen_nic_up()
1113 if (adapter->max_sds_rings > 1) in __netxen_nic_up()
1116 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in __netxen_nic_up()
1119 if (netdev->features & NETIF_F_LRO) in __netxen_nic_up()
1124 if (adapter->capabilities & NX_FW_CAPABILITY_LINK_NOTIFICATION) in __netxen_nic_up()
1129 set_bit(__NX_DEV_UP, &adapter->state); in __netxen_nic_up()
1152 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in __netxen_nic_down()
1155 if (!test_and_clear_bit(__NX_DEV_UP, &adapter->state)) in __netxen_nic_down()
1162 if (adapter->capabilities & NX_FW_CAPABILITY_LINK_NOTIFICATION) in __netxen_nic_down()
1165 if (adapter->stop_port) in __netxen_nic_down()
1166 adapter->stop_port(adapter); in __netxen_nic_down()
1168 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in __netxen_nic_down()
1171 adapter->set_promisc(adapter, NETXEN_NIU_NON_PROMISC_MODE); in __netxen_nic_down()
1193 struct net_device *netdev = adapter->netdev; in netxen_nic_attach()
1194 struct pci_dev *pdev = adapter->pdev; in netxen_nic_attach()
1200 if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) in netxen_nic_attach()
1207 adapter->flags &= ~NETXEN_FW_MSS_CAP; in netxen_nic_attach()
1208 if (adapter->capabilities & NX_FW_CAPABILITY_MORE_CAPS) { in netxen_nic_attach()
1211 adapter->flags |= NETXEN_FW_MSS_CAP; in netxen_nic_attach()
1221 netdev->name); in netxen_nic_attach()
1228 netdev->name); in netxen_nic_attach()
1232 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_nic_attach()
1233 tx_ring = adapter->tx_ring; in netxen_nic_attach()
1234 tx_ring->crb_cmd_producer = netxen_get_ioaddr(adapter, in netxen_nic_attach()
1235 crb_cmd_producer[adapter->portnum]); in netxen_nic_attach()
1236 tx_ring->crb_cmd_consumer = netxen_get_ioaddr(adapter, in netxen_nic_attach()
1237 crb_cmd_consumer[adapter->portnum]); in netxen_nic_attach()
1239 tx_ring->producer = 0; in netxen_nic_attach()
1240 tx_ring->sw_consumer = 0; in netxen_nic_attach()
1246 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in netxen_nic_attach()
1247 rds_ring = &adapter->recv_ctx.rds_rings[ring]; in netxen_nic_attach()
1253 dev_err(&pdev->dev, "%s: failed to setup interrupt\n", in netxen_nic_attach()
1254 netdev->name); in netxen_nic_attach()
1258 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_nic_attach()
1263 adapter->is_up = NETXEN_ADAPTER_UP_MAGIC; in netxen_nic_attach()
1277 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in netxen_nic_detach()
1288 adapter->is_up = 0; in netxen_nic_detach()
1295 struct net_device *netdev = adapter->netdev; in netxen_nic_reset_context()
1297 if (test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_nic_reset_context()
1298 return -EBUSY; in netxen_nic_reset_context()
1300 if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) { in netxen_nic_reset_context()
1322 clear_bit(__NX_RESETTING, &adapter->state); in netxen_nic_reset_context()
1331 struct pci_dev *pdev = adapter->pdev; in netxen_setup_netdev()
1333 adapter->mc_enabled = 0; in netxen_setup_netdev()
1334 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_setup_netdev()
1335 adapter->max_mc_count = 38; in netxen_setup_netdev()
1337 adapter->max_mc_count = 16; in netxen_setup_netdev()
1339 netdev->netdev_ops = &netxen_netdev_ops; in netxen_setup_netdev()
1340 netdev->watchdog_timeo = 5*HZ; in netxen_setup_netdev()
1342 netxen_nic_change_mtu(netdev, netdev->mtu); in netxen_setup_netdev()
1344 netdev->ethtool_ops = &netxen_nic_ethtool_ops; in netxen_setup_netdev()
1346 netdev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | in netxen_setup_netdev()
1349 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_setup_netdev()
1350 netdev->hw_features |= NETIF_F_IPV6_CSUM | NETIF_F_TSO6; in netxen_setup_netdev()
1352 netdev->vlan_features |= netdev->hw_features; in netxen_setup_netdev()
1354 if (adapter->pci_using_dac) { in netxen_setup_netdev()
1355 netdev->features |= NETIF_F_HIGHDMA; in netxen_setup_netdev()
1356 netdev->vlan_features |= NETIF_F_HIGHDMA; in netxen_setup_netdev()
1359 if (adapter->capabilities & NX_FW_CAPABILITY_FVLANTX) in netxen_setup_netdev()
1360 netdev->hw_features |= NETIF_F_HW_VLAN_CTAG_TX; in netxen_setup_netdev()
1362 if (adapter->capabilities & NX_FW_CAPABILITY_HW_LRO) in netxen_setup_netdev()
1363 netdev->hw_features |= NETIF_F_LRO; in netxen_setup_netdev()
1365 netdev->features |= netdev->hw_features; in netxen_setup_netdev()
1367 netdev->irq = adapter->msix_entries[0].vector; in netxen_setup_netdev()
1369 INIT_WORK(&adapter->tx_timeout_task, netxen_tx_timeout_task); in netxen_setup_netdev()
1372 dev_warn(&pdev->dev, "failed to read mac addr\n"); in netxen_setup_netdev()
1378 dev_err(&pdev->dev, "failed to register net device\n"); in netxen_setup_netdev()
1393 if (adapter->portnum != 0) in netxen_read_ula_info()
1399 dev_info(&adapter->pdev->dev, "ULA adapter"); in netxen_read_ula_info()
1402 dev_info(&adapter->pdev->dev, "non ULA adapter"); in netxen_read_ula_info()
1414 struct pci_dev *pdev = adapter->pdev; in netxen_mask_aer_correctable()
1415 struct pci_dev *root = pdev->bus->self; in netxen_mask_aer_correctable()
1422 if (adapter->ahw.board_type != NETXEN_BRDTYPE_P3_4_GB_MM && in netxen_mask_aer_correctable()
1423 adapter->ahw.board_type != NETXEN_BRDTYPE_P3_10G_TP) in netxen_mask_aer_correctable()
1443 int pci_func_id = PCI_FUNC(pdev->devfn); in netxen_nic_probe()
1447 if (pdev->revision >= NX_P3_A0 && pdev->revision <= NX_P3_B1) { in netxen_nic_probe()
1448 pr_warn("%s: chip revisions between 0x%x-0x%x will not be enabled\n", in netxen_nic_probe()
1450 return -ENODEV; in netxen_nic_probe()
1457 err = -ENODEV; in netxen_nic_probe()
1468 err = -ENOMEM; in netxen_nic_probe()
1472 SET_NETDEV_DEV(netdev, &pdev->dev); in netxen_nic_probe()
1475 adapter->netdev = netdev; in netxen_nic_probe()
1476 adapter->pdev = pdev; in netxen_nic_probe()
1477 adapter->ahw.pci_func = pci_func_id; in netxen_nic_probe()
1479 revision_id = pdev->revision; in netxen_nic_probe()
1480 adapter->ahw.revision_id = revision_id; in netxen_nic_probe()
1482 rwlock_init(&adapter->ahw.crb_lock); in netxen_nic_probe()
1483 spin_lock_init(&adapter->ahw.mem_lock); in netxen_nic_probe()
1485 spin_lock_init(&adapter->tx_clean_lock); in netxen_nic_probe()
1486 INIT_LIST_HEAD(&adapter->mac_list); in netxen_nic_probe()
1487 INIT_LIST_HEAD(&adapter->ip_list); in netxen_nic_probe()
1494 adapter->portnum = pci_func_id; in netxen_nic_probe()
1498 dev_err(&pdev->dev, "Error getting board config info.\n"); in netxen_nic_probe()
1507 switch (adapter->ahw.board_type) { in netxen_nic_probe()
1511 adapter->portnum = pci_func_id - 2; in netxen_nic_probe()
1521 if (adapter->portnum == 0) { in netxen_nic_probe()
1525 adapter->need_fw_reset = 1; in netxen_nic_probe()
1534 * See if the firmware gave us a virtual-physical port mapping. in netxen_nic_probe()
1536 adapter->physical_port = adapter->portnum; in netxen_nic_probe()
1537 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_nic_probe()
1538 i = NXRD32(adapter, CRB_V2P(adapter->portnum)); in netxen_nic_probe()
1540 adapter->physical_port = i; in netxen_nic_probe()
1543 /* MTU range: 0 - 8000 (P2) or 9600 (P3) */ in netxen_nic_probe()
1544 netdev->min_mtu = 0; in netxen_nic_probe()
1545 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_nic_probe()
1546 netdev->max_mtu = P3_MAX_MTU; in netxen_nic_probe()
1548 netdev->max_mtu = P2_MAX_MTU; in netxen_nic_probe()
1555 dev_err(&adapter->pdev->dev, in netxen_nic_probe()
1570 switch (adapter->ahw.port_type) { in netxen_nic_probe()
1572 dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n", in netxen_nic_probe()
1573 adapter->netdev->name); in netxen_nic_probe()
1576 dev_info(&adapter->pdev->dev, "%s: XGbE port initialized\n", in netxen_nic_probe()
1577 adapter->netdev->name); in netxen_nic_probe()
1610 kfree(adapter->mdump.md_template); in netxen_cleanup_minidump()
1611 adapter->mdump.md_template = NULL; in netxen_cleanup_minidump()
1613 if (adapter->mdump.md_capture_buff) { in netxen_cleanup_minidump()
1614 vfree(adapter->mdump.md_capture_buff); in netxen_cleanup_minidump()
1615 adapter->mdump.md_capture_buff = NULL; in netxen_cleanup_minidump()
1628 netdev = adapter->netdev; in netxen_nic_remove()
1634 cancel_work_sync(&adapter->tx_timeout_task); in netxen_nic_remove()
1641 if (adapter->portnum == 0) in netxen_nic_remove()
1644 clear_bit(__NX_RESETTING, &adapter->state); in netxen_nic_remove()
1654 if (NX_IS_REVISION_P3(pdev->revision)) in netxen_nic_remove()
1665 struct net_device *netdev = adapter->netdev; in netxen_nic_detach_func()
1674 cancel_work_sync(&adapter->tx_timeout_task); in netxen_nic_detach_func()
1678 if (adapter->portnum == 0) in netxen_nic_detach_func()
1683 clear_bit(__NX_RESETTING, &adapter->state); in netxen_nic_detach_func()
1689 struct net_device *netdev = adapter->netdev; in netxen_nic_attach_late_func()
1694 adapter->ahw.crb_win = -1; in netxen_nic_attach_late_func()
1695 adapter->ahw.ocm_win = -1; in netxen_nic_attach_late_func()
1699 dev_err(&pdev->dev, "failed to start firmware\n"); in netxen_nic_attach_late_func()
1808 if (adapter->driver_mismatch) in netxen_nic_open()
1809 return -EIO; in netxen_nic_open()
1829 * netxen_nic_close - Disables a network interface entry point
1846 __be16 protocol = skb->protocol; in netxen_tso_check()
1856 protocol = vh->h_vlan_encapsulated_proto; in netxen_tso_check()
1866 if ((netdev->features & (NETIF_F_TSO | NETIF_F_TSO6)) && in netxen_tso_check()
1867 skb_shinfo(skb)->gso_size > 0) { in netxen_tso_check()
1871 first_desc->mss = cpu_to_le16(skb_shinfo(skb)->gso_size); in netxen_tso_check()
1872 first_desc->total_hdr_length = hdr_len; in netxen_tso_check()
1874 first_desc->total_hdr_length += VLAN_HLEN; in netxen_tso_check()
1875 first_desc->tcp_hdr_offset = VLAN_HLEN; in netxen_tso_check()
1876 first_desc->ip_hdr_offset = VLAN_HLEN; in netxen_tso_check()
1885 } else if (skb->ip_summed == CHECKSUM_PARTIAL) { in netxen_tso_check()
1889 l4proto = ip_hdr(skb)->protocol; in netxen_tso_check()
1896 l4proto = ipv6_hdr(skb)->nexthdr; in netxen_tso_check()
1905 first_desc->tcp_hdr_offset += skb_transport_offset(skb); in netxen_tso_check()
1906 first_desc->ip_hdr_offset += skb_network_offset(skb); in netxen_tso_check()
1915 producer = tx_ring->producer; in netxen_tso_check()
1922 hwdesc = &tx_ring->desc_head[producer]; in netxen_tso_check()
1923 tx_ring->cmd_buf_arr[producer].skb = NULL; in netxen_tso_check()
1925 copy_len = min((int)sizeof(struct cmd_desc_type0) - offset, in netxen_tso_check()
1930 vh->h_vlan_proto = htons(ETH_P_8021Q); in netxen_tso_check()
1931 vh->h_vlan_TCI = htons(vid); in netxen_tso_check()
1933 (char *)vh + 16, copy_len - 16); in netxen_tso_check()
1935 copied = copy_len - VLAN_HLEN; in netxen_tso_check()
1938 producer = get_next_index(producer, tx_ring->num_desc); in netxen_tso_check()
1943 copy_len = min((int)sizeof(struct cmd_desc_type0) - offset, in netxen_tso_check()
1944 (hdr_len - copied)); in netxen_tso_check()
1946 hwdesc = &tx_ring->desc_head[producer]; in netxen_tso_check()
1947 tx_ring->cmd_buf_arr[producer].skb = NULL; in netxen_tso_check()
1955 producer = get_next_index(producer, tx_ring->num_desc); in netxen_tso_check()
1958 tx_ring->producer = producer; in netxen_tso_check()
1971 nr_frags = skb_shinfo(skb)->nr_frags; in netxen_map_tx_skb()
1972 nf = &pbuf->frag_array[0]; in netxen_map_tx_skb()
1974 map = dma_map_single(&pdev->dev, skb->data, skb_headlen(skb), in netxen_map_tx_skb()
1976 if (dma_mapping_error(&pdev->dev, map)) in netxen_map_tx_skb()
1979 nf->dma = map; in netxen_map_tx_skb()
1980 nf->length = skb_headlen(skb); in netxen_map_tx_skb()
1983 frag = &skb_shinfo(skb)->frags[i]; in netxen_map_tx_skb()
1984 nf = &pbuf->frag_array[i+1]; in netxen_map_tx_skb()
1986 map = skb_frag_dma_map(&pdev->dev, frag, 0, skb_frag_size(frag), in netxen_map_tx_skb()
1988 if (dma_mapping_error(&pdev->dev, map)) in netxen_map_tx_skb()
1991 nf->dma = map; in netxen_map_tx_skb()
1992 nf->length = skb_frag_size(frag); in netxen_map_tx_skb()
1998 while (--i >= 0) { in netxen_map_tx_skb()
1999 nf = &pbuf->frag_array[i+1]; in netxen_map_tx_skb()
2000 dma_unmap_page(&pdev->dev, nf->dma, nf->length, DMA_TO_DEVICE); in netxen_map_tx_skb()
2001 nf->dma = 0ULL; in netxen_map_tx_skb()
2004 nf = &pbuf->frag_array[0]; in netxen_map_tx_skb()
2005 dma_unmap_single(&pdev->dev, nf->dma, skb_headlen(skb), DMA_TO_DEVICE); in netxen_map_tx_skb()
2006 nf->dma = 0ULL; in netxen_map_tx_skb()
2009 return -ENOMEM; in netxen_map_tx_skb()
2023 struct nx_host_tx_ring *tx_ring = adapter->tx_ring; in netxen_nic_xmit_frame()
2034 u32 num_txd = tx_ring->num_desc; in netxen_nic_xmit_frame()
2036 frag_count = skb_shinfo(skb)->nr_frags + 1; in netxen_nic_xmit_frame()
2043 for (i = 0; i < (frag_count - NETXEN_MAX_FRAGS_PER_TX); i++) { in netxen_nic_xmit_frame()
2044 frag = &skb_shinfo(skb)->frags[i]; in netxen_nic_xmit_frame()
2051 frag_count = 1 + skb_shinfo(skb)->nr_frags; in netxen_nic_xmit_frame()
2063 producer = tx_ring->producer; in netxen_nic_xmit_frame()
2064 pbuf = &tx_ring->cmd_buf_arr[producer]; in netxen_nic_xmit_frame()
2066 pdev = adapter->pdev; in netxen_nic_xmit_frame()
2071 pbuf->skb = skb; in netxen_nic_xmit_frame()
2072 pbuf->frag_count = frag_count; in netxen_nic_xmit_frame()
2074 first_desc = hwdesc = &tx_ring->desc_head[producer]; in netxen_nic_xmit_frame()
2077 netxen_set_tx_frags_len(first_desc, frag_count, skb->len); in netxen_nic_xmit_frame()
2078 netxen_set_tx_port(first_desc, adapter->portnum); in netxen_nic_xmit_frame()
2087 hwdesc = &tx_ring->desc_head[producer]; in netxen_nic_xmit_frame()
2089 tx_ring->cmd_buf_arr[producer].skb = NULL; in netxen_nic_xmit_frame()
2092 buffrag = &pbuf->frag_array[i]; in netxen_nic_xmit_frame()
2094 hwdesc->buffer_length[k] = cpu_to_le16(buffrag->length); in netxen_nic_xmit_frame()
2097 hwdesc->addr_buffer1 = cpu_to_le64(buffrag->dma); in netxen_nic_xmit_frame()
2100 hwdesc->addr_buffer2 = cpu_to_le64(buffrag->dma); in netxen_nic_xmit_frame()
2103 hwdesc->addr_buffer3 = cpu_to_le64(buffrag->dma); in netxen_nic_xmit_frame()
2106 hwdesc->addr_buffer4 = cpu_to_le64(buffrag->dma); in netxen_nic_xmit_frame()
2111 tx_ring->producer = get_next_index(producer, num_txd); in netxen_nic_xmit_frame()
2115 adapter->stats.txbytes += skb->len; in netxen_nic_xmit_frame()
2116 adapter->stats.xmitcalled++; in netxen_nic_xmit_frame()
2123 adapter->stats.txdropped++; in netxen_nic_xmit_frame()
2130 struct net_device *netdev = adapter->netdev; in netxen_nic_check_temp()
2143 netdev->name, temp_val); in netxen_nic_check_temp()
2146 if (adapter->temp == NX_TEMP_NORMAL) { in netxen_nic_check_temp()
2151 netdev->name, temp_val); in netxen_nic_check_temp()
2154 if (adapter->temp == NX_TEMP_WARN) { in netxen_nic_check_temp()
2157 " in normal range.\n", netdev->name, in netxen_nic_check_temp()
2161 adapter->temp = temp_state; in netxen_nic_check_temp()
2167 struct net_device *netdev = adapter->netdev; in netxen_advert_link_change()
2169 if (adapter->ahw.linkup && !linkup) { in netxen_advert_link_change()
2171 netxen_nic_driver_name, netdev->name); in netxen_advert_link_change()
2172 adapter->ahw.linkup = 0; in netxen_advert_link_change()
2177 adapter->link_changed = !adapter->has_link_events; in netxen_advert_link_change()
2178 } else if (!adapter->ahw.linkup && linkup) { in netxen_advert_link_change()
2180 netxen_nic_driver_name, netdev->name); in netxen_advert_link_change()
2181 adapter->ahw.linkup = 1; in netxen_advert_link_change()
2186 adapter->link_changed = !adapter->has_link_events; in netxen_advert_link_change()
2194 port = adapter->physical_port; in netxen_nic_handle_phy_intr()
2196 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_nic_handle_phy_intr()
2198 val = XG_LINK_STATE_P3(adapter->ahw.pci_func, val); in netxen_nic_handle_phy_intr()
2213 if (test_bit(__NX_RESETTING, &adapter->state)) in netxen_tx_timeout()
2216 dev_err(&netdev->dev, "transmit timeout, resetting.\n"); in netxen_tx_timeout()
2217 schedule_work(&adapter->tx_timeout_task); in netxen_tx_timeout()
2225 if (!netif_running(adapter->netdev)) in netxen_tx_timeout_task()
2228 if (test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_tx_timeout_task()
2231 if (++adapter->tx_timeo_cnt >= NX_MAX_TX_TIMEOUTS) in netxen_tx_timeout_task()
2235 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_tx_timeout_task()
2241 netif_wake_queue(adapter->netdev); in netxen_tx_timeout_task()
2243 clear_bit(__NX_RESETTING, &adapter->state); in netxen_tx_timeout_task()
2245 clear_bit(__NX_RESETTING, &adapter->state); in netxen_tx_timeout_task()
2251 netif_trans_update(adapter->netdev); in netxen_tx_timeout_task()
2256 adapter->need_fw_reset = 1; in netxen_tx_timeout_task()
2257 clear_bit(__NX_RESETTING, &adapter->state); in netxen_tx_timeout_task()
2261 struct rtnl_link_stats64 *stats) in netxen_nic_get_stats() argument
2265 stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts; in netxen_nic_get_stats()
2266 stats->tx_packets = adapter->stats.xmitfinished; in netxen_nic_get_stats()
2267 stats->rx_bytes = adapter->stats.rxbytes; in netxen_nic_get_stats()
2268 stats->tx_bytes = adapter->stats.txbytes; in netxen_nic_get_stats()
2269 stats->rx_dropped = adapter->stats.rxdropped; in netxen_nic_get_stats()
2270 stats->tx_dropped = adapter->stats.txdropped; in netxen_nic_get_stats()
2276 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_intr()
2279 status = readl(adapter->isr_int_vec); in netxen_intr()
2281 if (!(status & adapter->int_vec_bit)) in netxen_intr()
2284 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_intr()
2286 status = readl(adapter->crb_int_state_reg); in netxen_intr()
2293 our_int = readl(adapter->crb_int_state_reg); in netxen_intr()
2296 if (!test_and_clear_bit((7 + adapter->portnum), &our_int)) in netxen_intr()
2300 writel((our_int & 0xffffffff), adapter->crb_int_state_reg); in netxen_intr()
2306 writel(0xffffffff, adapter->tgt_status_reg); in netxen_intr()
2308 readl(adapter->isr_int_vec); in netxen_intr()
2309 readl(adapter->isr_int_vec); in netxen_intr()
2311 napi_schedule(&sds_ring->napi); in netxen_intr()
2319 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_msi_intr()
2322 writel(0xffffffff, adapter->tgt_status_reg); in netxen_msi_intr()
2324 napi_schedule(&sds_ring->napi); in netxen_msi_intr()
2332 napi_schedule(&sds_ring->napi); in netxen_msix_intr()
2341 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_nic_poll()
2354 napi_complete_done(&sds_ring->napi, work_done); in netxen_nic_poll()
2355 if (test_bit(__NX_DEV_UP, &adapter->state)) in netxen_nic_poll()
2367 return -EIO; in nx_incr_dev_ref_cnt()
2382 return -EIO; in nx_decr_dev_ref_cnt()
2387 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, --count); in nx_decr_dev_ref_cnt()
2401 int ret = -EINVAL; in nx_dev_request_aer()
2423 int ret = -EINVAL; in nx_dev_request_reset()
2434 adapter->flags |= NETXEN_FW_RESET_OWNER; in nx_dev_request_reset()
2451 return -1; in netxen_can_start_firmware()
2475 INIT_DELAYED_WORK(&adapter->fw_work, func); in netxen_schedule_work()
2476 schedule_delayed_work(&adapter->fw_work, delay); in netxen_schedule_work()
2482 while (test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_cancel_fw_work()
2485 cancel_delayed_work_sync(&adapter->fw_work); in netxen_cancel_fw_work()
2493 struct net_device *netdev = adapter->netdev; in netxen_attach_work()
2513 adapter->fw_fail_cnt = 0; in netxen_attach_work()
2514 clear_bit(__NX_RESETTING, &adapter->state); in netxen_attach_work()
2526 if (adapter->flags & NETXEN_FW_RESET_OWNER) { in netxen_fwinit_work()
2530 if (adapter->mdump.md_enabled) { in netxen_fwinit_work()
2535 adapter->flags &= ~NETXEN_FW_RESET_OWNER; in netxen_fwinit_work()
2537 clear_bit(__NX_RESETTING, &adapter->state); in netxen_fwinit_work()
2543 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, --count); in netxen_fwinit_work()
2572 clear_bit(__NX_RESETTING, &adapter->state); in netxen_fwinit_work()
2577 dev_err(&adapter->pdev->dev, "%s: Device initialization Failed\n", in netxen_fwinit_work()
2578 adapter->netdev->name); in netxen_fwinit_work()
2580 clear_bit(__NX_RESETTING, &adapter->state); in netxen_fwinit_work()
2588 struct net_device *netdev = adapter->netdev; in netxen_detach_work()
2605 if (adapter->temp == NX_TEMP_PANIC) in netxen_detach_work()
2608 if (!(adapter->flags & NETXEN_FW_RESET_OWNER)) in netxen_detach_work()
2611 if (ref_cnt == -EIO) in netxen_detach_work()
2616 adapter->fw_wait_cnt = 0; in netxen_detach_work()
2622 clear_bit(__NX_RESETTING, &adapter->state); in netxen_detach_work()
2630 struct net_device *netdev = adapter->netdev; in netxen_check_health()
2639 if (adapter->need_fw_reset) { in netxen_check_health()
2651 adapter->need_fw_reset = 1; in netxen_check_health()
2652 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_check_health()
2656 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_check_health()
2660 if (heartbit != adapter->heartbit) { in netxen_check_health()
2661 adapter->heartbit = heartbit; in netxen_check_health()
2662 adapter->fw_fail_cnt = 0; in netxen_check_health()
2663 if (adapter->need_fw_reset) in netxen_check_health()
2668 if (++adapter->fw_fail_cnt < FW_FAIL_THRESH) in netxen_check_health()
2674 clear_bit(__NX_FW_ATTACHED, &adapter->state); in netxen_check_health()
2676 dev_err(&netdev->dev, "firmware hang detected\n"); in netxen_check_health()
2678 dev_err(&adapter->pdev->dev, "Dumping hw/fw registers\n" in netxen_check_health()
2691 dev_err(&adapter->pdev->dev, in netxen_check_health()
2696 !test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_check_health()
2707 if (test_bit(__NX_RESETTING, &adapter->state)) in netxen_fw_poll_work()
2710 if (test_bit(__NX_DEV_UP, &adapter->state) && in netxen_fw_poll_work()
2711 !(adapter->capabilities & NX_FW_CAPABILITY_LINK_NOTIFICATION)) { in netxen_fw_poll_work()
2712 if (!adapter->has_link_events) { in netxen_fw_poll_work()
2716 if (adapter->link_changed) in netxen_fw_poll_work()
2735 int ret = -EINVAL; in netxen_store_bridged_mode()
2737 if (!(adapter->capabilities & NX_FW_CAPABILITY_BDG)) in netxen_store_bridged_mode()
2740 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in netxen_store_bridged_mode()
2763 if (adapter->capabilities & NX_FW_CAPABILITY_BDG) in netxen_show_bridged_mode()
2764 bridged_mode = !!(adapter->flags & NETXEN_NIC_BRIDGE_ENABLED); in netxen_show_bridged_mode()
2783 return -EINVAL; in netxen_store_diag_mode()
2785 if (!!new != !!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)) in netxen_store_diag_mode()
2786 adapter->flags ^= NETXEN_NIC_DIAG_ENABLED; in netxen_store_diag_mode()
2798 !!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)); in netxen_show_diag_mode()
2813 if (!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)) in netxen_sysfs_validate_crb()
2814 return -EIO; in netxen_sysfs_validate_crb()
2817 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_sysfs_validate_crb()
2818 return -EINVAL; in netxen_sysfs_validate_crb()
2824 return -EINVAL; in netxen_sysfs_validate_crb()
2827 if ((size != crb_size) || (offset & (crb_size-1))) in netxen_sysfs_validate_crb()
2828 return -EINVAL; in netxen_sysfs_validate_crb()
2848 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) && in netxen_sysfs_read_crb()
2876 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) && in netxen_sysfs_write_crb()
2893 if (!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)) in netxen_sysfs_validate_mem()
2894 return -EIO; in netxen_sysfs_validate_mem()
2897 return -EIO; in netxen_sysfs_validate_mem()
2916 if (adapter->pci_mem_read(adapter, offset, &data)) in netxen_sysfs_read_mem()
2917 return -EIO; in netxen_sysfs_read_mem()
2939 if (adapter->pci_mem_write(adapter, offset, data)) in netxen_sysfs_write_mem()
2940 return -EIO; in netxen_sysfs_write_mem()
2967 struct net_device *netdev = adapter->netdev; in netxen_sysfs_read_dimm()
2972 if (size < attr->size) { in netxen_sysfs_read_dimm()
2974 return -EINVAL; in netxen_sysfs_read_dimm()
3069 netdev_err(netdev, "Invalid data-width %x\n", dw); in netxen_sysfs_read_dimm()
3092 struct device *dev = &adapter->pdev->dev; in netxen_create_sysfs_entries()
3094 if (adapter->capabilities & NX_FW_CAPABILITY_BDG) { in netxen_create_sysfs_entries()
3106 struct device *dev = &adapter->pdev->dev; in netxen_remove_sysfs_entries()
3108 if (adapter->capabilities & NX_FW_CAPABILITY_BDG) in netxen_remove_sysfs_entries()
3115 struct pci_dev *pdev = adapter->pdev; in netxen_create_diag_entries()
3118 dev = &pdev->dev; in netxen_create_diag_entries()
3133 struct pci_dev *pdev = adapter->pdev; in netxen_remove_diag_entries()
3134 struct device *dev = &pdev->dev; in netxen_remove_diag_entries()
3144 #define is_netxen_netdev(dev) (dev->netdev_ops == &netxen_netdev_ops)
3149 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_destip_supported()
3152 if (adapter->ahw.cut_through) in netxen_destip_supported()
3159 netxen_free_ip_list(struct netxen_adapter *adapter, bool master) in netxen_free_ip_list() argument
3163 list_for_each_entry_safe(cur, tmp_cur, &adapter->ip_list, list) { in netxen_free_ip_list()
3164 if (master) { in netxen_free_ip_list()
3165 if (cur->master) { in netxen_free_ip_list()
3166 netxen_config_ipaddr(adapter, cur->ip_addr, in netxen_free_ip_list()
3168 list_del(&cur->list); in netxen_free_ip_list()
3172 netxen_config_ipaddr(adapter, cur->ip_addr, NX_IP_DOWN); in netxen_free_ip_list()
3173 list_del(&cur->list); in netxen_free_ip_list()
3188 dev = ifa->ifa_dev ? ifa->ifa_dev->dev : NULL; in netxen_list_config_ip()
3195 list_for_each(head, &adapter->ip_list) { in netxen_list_config_ip()
3198 if (cur->ip_addr == ifa->ifa_address) in netxen_list_config_ip()
3207 cur->master = !!netif_is_bond_master(dev); in netxen_list_config_ip()
3208 cur->ip_addr = ifa->ifa_address; in netxen_list_config_ip()
3209 list_add_tail(&cur->list, &adapter->ip_list); in netxen_list_config_ip()
3210 netxen_config_ipaddr(adapter, ifa->ifa_address, NX_IP_UP); in netxen_list_config_ip()
3215 &adapter->ip_list, list) { in netxen_list_config_ip()
3216 if (cur->ip_addr == ifa->ifa_address) { in netxen_list_config_ip()
3217 list_del(&cur->list); in netxen_list_config_ip()
3219 netxen_config_ipaddr(adapter, ifa->ifa_address, in netxen_list_config_ip()
3272 list_for_each_entry_safe(pos, tmp_pos, &adapter->ip_list, list) { in netxen_restore_indev_addr()
3273 netxen_config_ipaddr(adapter, pos->ip_addr, ip_event); in netxen_restore_indev_addr()
3289 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in netxen_config_checkdev()
3296 * netxen_config_master - configure addresses based on master
3302 struct net_device *master, *slave; in netxen_config_master() local
3306 master = netdev_master_upper_dev_get_rcu(dev); in netxen_config_master()
3313 if (master && netif_is_bond_master(master) && in netxen_config_master()
3315 netxen_config_indev_addr(adapter, master, event); in netxen_config_master()
3318 vlan_dev_real_dev(slave) == master) in netxen_config_master()
3327 if (!master && dev->priv_flags & IFF_BONDING) in netxen_config_master()
3348 /* If this is a bonding device, look for netxen-based slaves*/ in netxen_netdev_event()
3382 dev = ifa->ifa_dev ? ifa->ifa_dev->dev : NULL; in netxen_inetaddr_event()
3393 /* If this is a bonding device, look for netxen-based slaves*/ in netxen_inetaddr_event()
3426 netxen_free_ip_list(struct netxen_adapter *adapter, bool master) in netxen_free_ip_list() argument