Lines Matching full:adapter
73 static void netxen_schedule_work(struct netxen_adapter *adapter,
75 static void netxen_cancel_fw_work(struct netxen_adapter *adapter);
81 static void netxen_create_sysfs_entries(struct netxen_adapter *adapter);
82 static void netxen_remove_sysfs_entries(struct netxen_adapter *adapter);
83 static void netxen_create_diag_entries(struct netxen_adapter *adapter);
84 static void netxen_remove_diag_entries(struct netxen_adapter *adapter);
86 static int nx_dev_request_aer(struct netxen_adapter *adapter);
87 static int nx_decr_dev_ref_cnt(struct netxen_adapter *adapter);
88 static int netxen_can_start_firmware(struct netxen_adapter *adapter);
125 netxen_nic_update_cmd_producer(struct netxen_adapter *adapter, in netxen_nic_update_cmd_producer() argument
128 NXWRIO(adapter, tx_ring->crb_cmd_producer, tx_ring->producer); in netxen_nic_update_cmd_producer()
137 netxen_nic_update_cmd_consumer(struct netxen_adapter *adapter, in netxen_nic_update_cmd_consumer() argument
140 NXWRIO(adapter, tx_ring->crb_cmd_consumer, tx_ring->sw_consumer); in netxen_nic_update_cmd_consumer()
154 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_nic_disable_int() local
156 NXWRIO(adapter, sds_ring->crb_intr_mask, 0); in netxen_nic_disable_int()
161 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_nic_enable_int() local
163 NXWRIO(adapter, sds_ring->crb_intr_mask, 0x1); in netxen_nic_enable_int()
165 if (!NETXEN_IS_MSI_FAMILY(adapter)) in netxen_nic_enable_int()
166 NXWRIO(adapter, adapter->tgt_mask_reg, 0xfbff); in netxen_nic_enable_int()
189 netxen_napi_add(struct netxen_adapter *adapter, struct net_device *netdev) in netxen_napi_add() argument
193 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_add()
195 if (netxen_alloc_sds_rings(recv_ctx, adapter->max_sds_rings)) in netxen_napi_add()
198 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_add()
208 netxen_napi_del(struct netxen_adapter *adapter) in netxen_napi_del() argument
212 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_del()
214 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_del()
219 netxen_free_sds_rings(&adapter->recv_ctx); in netxen_napi_del()
223 netxen_napi_enable(struct netxen_adapter *adapter) in netxen_napi_enable() argument
227 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_enable()
229 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_enable()
237 netxen_napi_disable(struct netxen_adapter *adapter) in netxen_napi_disable() argument
241 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_disable()
243 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_disable()
251 static int nx_set_dma_mask(struct netxen_adapter *adapter) in nx_set_dma_mask() argument
253 struct pci_dev *pdev = adapter->pdev; in nx_set_dma_mask()
256 adapter->pci_using_dac = 0; in nx_set_dma_mask()
261 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in nx_set_dma_mask()
272 adapter->pci_using_dac = 1; in nx_set_dma_mask()
281 nx_update_dma_mask(struct netxen_adapter *adapter) in nx_update_dma_mask() argument
285 struct pci_dev *pdev = adapter->pdev; in nx_update_dma_mask()
289 shift = NXRD32(adapter, CRB_DMA_SHIFT); in nx_update_dma_mask()
293 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) && (shift > 9)) in nx_update_dma_mask()
295 else if ((adapter->ahw.revision_id == NX_P2_C1) && (shift <= 4)) in nx_update_dma_mask()
308 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in nx_update_dma_mask()
326 netxen_check_hw_init(struct netxen_adapter *adapter, int first_boot) in netxen_check_hw_init() argument
332 NXWR32(adapter, NETXEN_CAM_RAM(0x1fc), NETXEN_BDINFO_MAGIC); in netxen_check_hw_init()
334 if (!NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_check_hw_init()
338 first_boot = NXRD32(adapter, NETXEN_PCIE_REG(0x4)); in netxen_check_hw_init()
341 NXWR32(adapter, NETXEN_PCIE_REG(0x4), first_boot); in netxen_check_hw_init()
342 NXRD32(adapter, NETXEN_PCIE_REG(0x4)); in netxen_check_hw_init()
346 first_boot = NXRD32(adapter, NETXEN_ROMUSB_GLB_SW_RESET); in netxen_check_hw_init()
349 NXWR32(adapter, NETXEN_CAM_RAM(0x1fc), 0); in netxen_check_hw_init()
354 val = NXRD32(adapter, NETXEN_ROMUSB_GLB_PEGTUNE_DONE); in netxen_check_hw_init()
355 NXWR32(adapter, NETXEN_ROMUSB_GLB_PEGTUNE_DONE, val | 0x1); in netxen_check_hw_init()
359 val = NXRD32(adapter, NETXEN_CAM_RAM(0x1fc)); in netxen_check_hw_init()
369 static void netxen_set_port_mode(struct netxen_adapter *adapter) in netxen_set_port_mode() argument
373 val = adapter->ahw.board_type; in netxen_set_port_mode()
378 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data); in netxen_set_port_mode()
381 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data); in netxen_set_port_mode()
384 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data); in netxen_set_port_mode()
387 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data); in netxen_set_port_mode()
390 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data); in netxen_set_port_mode()
399 NXWR32(adapter, NETXEN_WOL_PORT_MODE, wol_port_mode); in netxen_set_port_mode()
405 static void netxen_pcie_strap_init(struct netxen_adapter *adapter) in netxen_pcie_strap_init() argument
414 pdev = adapter->pdev; in netxen_pcie_strap_init()
416 chicken = NXRD32(adapter, NETXEN_PCIE_REG(PCIE_CHICKEN3)); in netxen_pcie_strap_init()
430 dev_info(&adapter->pdev->dev, "Gen2 strapping detected\n"); in netxen_pcie_strap_init()
435 dev_info(&adapter->pdev->dev, "Gen1 strapping detected\n"); in netxen_pcie_strap_init()
436 if (adapter->ahw.revision_id == NX_P3_B0) in netxen_pcie_strap_init()
442 NXWR32(adapter, NETXEN_PCIE_REG(PCIE_CHICKEN3), chicken); in netxen_pcie_strap_init()
476 static void netxen_init_msix_entries(struct netxen_adapter *adapter, int count) in netxen_init_msix_entries() argument
481 adapter->msix_entries[i].entry = i; in netxen_init_msix_entries()
485 netxen_read_mac_addr(struct netxen_adapter *adapter) in netxen_read_mac_addr() argument
490 struct net_device *netdev = adapter->netdev; in netxen_read_mac_addr()
491 struct pci_dev *pdev = adapter->pdev; in netxen_read_mac_addr()
493 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_read_mac_addr()
494 if (netxen_p3_get_mac_addr(adapter, &mac_addr) != 0) in netxen_read_mac_addr()
497 if (netxen_get_flash_mac_addr(adapter, &mac_addr) != 0) in netxen_read_mac_addr()
506 memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len); in netxen_read_mac_addr()
518 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_set_mac() local
526 netxen_napi_disable(adapter); in netxen_nic_set_mac()
529 memcpy(adapter->mac_addr, addr->sa_data, netdev->addr_len); in netxen_nic_set_mac()
531 adapter->macaddr_set(adapter, addr->sa_data); in netxen_nic_set_mac()
535 netxen_napi_enable(adapter); in netxen_nic_set_mac()
542 struct netxen_adapter *adapter = netdev_priv(dev); in netxen_set_multicast_list() local
544 adapter->set_multi(dev); in netxen_set_multicast_list()
562 struct netxen_adapter *adapter = netdev_priv(dev); in netxen_set_features() local
571 if (netxen_config_hw_lro(adapter, hw_lro)) in netxen_set_features()
574 if (!(features & NETIF_F_LRO) && netxen_send_lro_cleanup(adapter)) in netxen_set_features()
598 netxen_setup_intr(struct netxen_adapter *adapter) in netxen_setup_intr() argument
601 struct pci_dev *pdev = adapter->pdev; in netxen_setup_intr()
604 if (adapter->rss_supported) { in netxen_setup_intr()
610 adapter->max_sds_rings = 1; in netxen_setup_intr()
612 adapter->flags &= ~(NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED); in netxen_setup_intr()
614 if (adapter->ahw.revision_id >= NX_P3_B0) in netxen_setup_intr()
615 legacy_intrp = &legacy_intr[adapter->ahw.pci_func]; in netxen_setup_intr()
619 adapter->int_vec_bit = legacy_intrp->int_vec_bit; in netxen_setup_intr()
620 adapter->tgt_status_reg = netxen_get_ioaddr(adapter, in netxen_setup_intr()
622 adapter->tgt_mask_reg = netxen_get_ioaddr(adapter, in netxen_setup_intr()
624 adapter->pci_int_reg = netxen_get_ioaddr(adapter, in netxen_setup_intr()
626 adapter->isr_int_vec = netxen_get_ioaddr(adapter, ISR_INT_VECTOR); in netxen_setup_intr()
628 if (adapter->ahw.revision_id >= NX_P3_B1) in netxen_setup_intr()
629 adapter->crb_int_state_reg = netxen_get_ioaddr(adapter, in netxen_setup_intr()
632 adapter->crb_int_state_reg = netxen_get_ioaddr(adapter, in netxen_setup_intr()
637 if (adapter->msix_supported) { in netxen_setup_intr()
639 netxen_init_msix_entries(adapter, num_msix); in netxen_setup_intr()
640 err = pci_enable_msix(pdev, adapter->msix_entries, num_msix); in netxen_setup_intr()
642 adapter->flags |= NETXEN_NIC_MSIX_ENABLED; in netxen_setup_intr()
645 if (adapter->rss_supported) in netxen_setup_intr()
646 adapter->max_sds_rings = num_msix; in netxen_setup_intr()
659 adapter->flags |= NETXEN_NIC_MSI_ENABLED; in netxen_setup_intr()
660 adapter->tgt_status_reg = netxen_get_ioaddr(adapter, in netxen_setup_intr()
661 msi_tgt_status[adapter->ahw.pci_func]); in netxen_setup_intr()
663 adapter->msix_entries[0].vector = pdev->irq; in netxen_setup_intr()
668 adapter->msix_entries[0].vector = pdev->irq; in netxen_setup_intr()
672 netxen_teardown_intr(struct netxen_adapter *adapter) in netxen_teardown_intr() argument
674 if (adapter->flags & NETXEN_NIC_MSIX_ENABLED) in netxen_teardown_intr()
675 pci_disable_msix(adapter->pdev); in netxen_teardown_intr()
676 if (adapter->flags & NETXEN_NIC_MSI_ENABLED) in netxen_teardown_intr()
677 pci_disable_msi(adapter->pdev); in netxen_teardown_intr()
681 netxen_cleanup_pci_map(struct netxen_adapter *adapter) in netxen_cleanup_pci_map() argument
683 if (adapter->ahw.db_base != NULL) in netxen_cleanup_pci_map()
684 iounmap(adapter->ahw.db_base); in netxen_cleanup_pci_map()
685 if (adapter->ahw.pci_base0 != NULL) in netxen_cleanup_pci_map()
686 iounmap(adapter->ahw.pci_base0); in netxen_cleanup_pci_map()
687 if (adapter->ahw.pci_base1 != NULL) in netxen_cleanup_pci_map()
688 iounmap(adapter->ahw.pci_base1); in netxen_cleanup_pci_map()
689 if (adapter->ahw.pci_base2 != NULL) in netxen_cleanup_pci_map()
690 iounmap(adapter->ahw.pci_base2); in netxen_cleanup_pci_map()
694 netxen_setup_pci_map(struct netxen_adapter *adapter) in netxen_setup_pci_map() argument
701 struct pci_dev *pdev = adapter->pdev; in netxen_setup_pci_map()
702 int pci_func = adapter->ahw.pci_func; in netxen_setup_pci_map()
703 struct netxen_hardware_context *ahw = &adapter->ahw; in netxen_setup_pci_map()
711 adapter->ahw.crb_win = -1; in netxen_setup_pci_map()
712 adapter->ahw.ocm_win = -1; in netxen_setup_pci_map()
758 netxen_setup_hwops(adapter); in netxen_setup_pci_map()
762 if (NX_IS_REVISION_P3P(adapter->ahw.revision_id)) { in netxen_setup_pci_map()
763 adapter->ahw.ocm_win_crb = netxen_get_ioaddr(adapter, in netxen_setup_pci_map()
766 } else if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_setup_pci_map()
767 adapter->ahw.ocm_win_crb = netxen_get_ioaddr(adapter, in netxen_setup_pci_map()
771 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_setup_pci_map()
793 adapter->ahw.db_base = db_ptr; in netxen_setup_pci_map()
794 adapter->ahw.db_len = db_len; in netxen_setup_pci_map()
798 netxen_cleanup_pci_map(adapter); in netxen_setup_pci_map()
803 netxen_check_options(struct netxen_adapter *adapter) in netxen_check_options() argument
810 struct pci_dev *pdev = adapter->pdev; in netxen_check_options()
812 adapter->driver_mismatch = 0; in netxen_check_options()
817 if (netxen_rom_fast_read(adapter, offset, &val) == -1) { in netxen_check_options()
819 adapter->driver_mismatch = 1; in netxen_check_options()
826 fw_major = NXRD32(adapter, NETXEN_FW_VERSION_MAJOR); in netxen_check_options()
827 fw_minor = NXRD32(adapter, NETXEN_FW_VERSION_MINOR); in netxen_check_options()
828 fw_build = NXRD32(adapter, NETXEN_FW_VERSION_SUB); in netxen_check_options()
830 adapter->fw_version = NETXEN_VERSION_CODE(fw_major, fw_minor, fw_build); in netxen_check_options()
832 if (adapter->portnum == 0) { in netxen_check_options()
833 get_brd_name_by_type(adapter->ahw.board_type, brd_name); in netxen_check_options()
837 brd_name, serial_num, adapter->ahw.revision_id); in netxen_check_options()
840 if (adapter->fw_version < NETXEN_VERSION_CODE(3, 4, 216)) { in netxen_check_options()
841 adapter->driver_mismatch = 1; in netxen_check_options()
847 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_check_options()
848 i = NXRD32(adapter, NETXEN_SRE_MISC); in netxen_check_options()
849 adapter->ahw.cut_through = (i & 0x8000) ? 1 : 0; in netxen_check_options()
854 adapter->ahw.cut_through ? "cut-through" : "legacy"); in netxen_check_options()
856 if (adapter->fw_version >= NETXEN_VERSION_CODE(4, 0, 222)) in netxen_check_options()
857 adapter->capabilities = NXRD32(adapter, CRB_FW_CAPABILITIES_1); in netxen_check_options()
859 if (adapter->ahw.port_type == NETXEN_NIC_XGBE) { in netxen_check_options()
860 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_10G; in netxen_check_options()
861 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G; in netxen_check_options()
862 } else if (adapter->ahw.port_type == NETXEN_NIC_GBE) { in netxen_check_options()
863 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_1G; in netxen_check_options()
864 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G; in netxen_check_options()
867 adapter->msix_supported = 0; in netxen_check_options()
868 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_check_options()
869 adapter->msix_supported = !!use_msi_x; in netxen_check_options()
870 adapter->rss_supported = !!use_msi_x; in netxen_check_options()
873 netxen_rom_fast_read(adapter, in netxen_check_options()
878 switch (adapter->ahw.board_type) { in netxen_check_options()
881 adapter->msix_supported = !!use_msi_x; in netxen_check_options()
882 adapter->rss_supported = !!use_msi_x; in netxen_check_options()
890 adapter->num_txd = MAX_CMD_DESCRIPTORS; in netxen_check_options()
892 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_check_options()
893 adapter->num_lro_rxd = MAX_LRO_RCV_DESCRIPTORS; in netxen_check_options()
894 adapter->max_rds_rings = 3; in netxen_check_options()
896 adapter->num_lro_rxd = 0; in netxen_check_options()
897 adapter->max_rds_rings = 2; in netxen_check_options()
902 netxen_start_firmware(struct netxen_adapter *adapter) in netxen_start_firmware() argument
905 struct pci_dev *pdev = adapter->pdev; in netxen_start_firmware()
908 err = nx_set_dma_mask(adapter); in netxen_start_firmware()
912 if (!netxen_can_start_firmware(adapter)) in netxen_start_firmware()
915 first_boot = NXRD32(adapter, NETXEN_CAM_RAM(0x1fc)); in netxen_start_firmware()
917 err = netxen_check_hw_init(adapter, first_boot); in netxen_start_firmware()
923 netxen_request_firmware(adapter); in netxen_start_firmware()
925 err = netxen_need_fw_reset(adapter); in netxen_start_firmware()
932 NXWR32(adapter, CRB_CMDPEG_STATE, 0); in netxen_start_firmware()
933 netxen_pinit_from_rom(adapter); in netxen_start_firmware()
937 NXWR32(adapter, CRB_DMA_SHIFT, 0x55555555); in netxen_start_firmware()
938 NXWR32(adapter, NETXEN_PEG_HALT_STATUS1, 0); in netxen_start_firmware()
939 NXWR32(adapter, NETXEN_PEG_HALT_STATUS2, 0); in netxen_start_firmware()
941 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_start_firmware()
942 netxen_set_port_mode(adapter); in netxen_start_firmware()
944 err = netxen_load_firmware(adapter); in netxen_start_firmware()
948 netxen_release_firmware(adapter); in netxen_start_firmware()
950 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_start_firmware()
954 if (adapter->ahw.port_type == NETXEN_NIC_XGBE) in netxen_start_firmware()
956 NXWR32(adapter, NETXEN_MAC_ADDR_CNTL_REG, val); in netxen_start_firmware()
960 err = netxen_init_dummy_dma(adapter); in netxen_start_firmware()
970 NXWR32(adapter, CRB_DRIVER_VERSION, val); in netxen_start_firmware()
973 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_start_firmware()
974 netxen_pcie_strap_init(adapter); in netxen_start_firmware()
978 err = netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE); in netxen_start_firmware()
980 netxen_free_dummy_dma(adapter); in netxen_start_firmware()
984 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_READY); in netxen_start_firmware()
986 nx_update_dma_mask(adapter); in netxen_start_firmware()
988 netxen_check_options(adapter); in netxen_start_firmware()
990 adapter->need_fw_reset = 0; in netxen_start_firmware()
995 netxen_release_firmware(adapter); in netxen_start_firmware()
1000 netxen_nic_request_irq(struct netxen_adapter *adapter) in netxen_nic_request_irq() argument
1007 struct net_device *netdev = adapter->netdev; in netxen_nic_request_irq()
1008 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_nic_request_irq()
1010 if (adapter->flags & NETXEN_NIC_MSIX_ENABLED) in netxen_nic_request_irq()
1012 else if (adapter->flags & NETXEN_NIC_MSI_ENABLED) in netxen_nic_request_irq()
1018 adapter->irq = netdev->irq; in netxen_nic_request_irq()
1020 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_nic_request_irq()
1033 netxen_nic_free_irq(struct netxen_adapter *adapter) in netxen_nic_free_irq() argument
1038 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_nic_free_irq()
1040 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_nic_free_irq()
1047 netxen_nic_init_coalesce_defaults(struct netxen_adapter *adapter) in netxen_nic_init_coalesce_defaults() argument
1049 adapter->coal.flags = NETXEN_NIC_INTR_DEFAULT; in netxen_nic_init_coalesce_defaults()
1050 adapter->coal.normal.data.rx_time_us = in netxen_nic_init_coalesce_defaults()
1052 adapter->coal.normal.data.rx_packets = in netxen_nic_init_coalesce_defaults()
1054 adapter->coal.normal.data.tx_time_us = in netxen_nic_init_coalesce_defaults()
1056 adapter->coal.normal.data.tx_packets = in netxen_nic_init_coalesce_defaults()
1062 __netxen_nic_up(struct netxen_adapter *adapter, struct net_device *netdev) in __netxen_nic_up() argument
1066 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in __netxen_nic_up()
1069 err = adapter->init_port(adapter, adapter->physical_port); in __netxen_nic_up()
1072 netxen_nic_driver_name, adapter->portnum); in __netxen_nic_up()
1075 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in __netxen_nic_up()
1076 adapter->macaddr_set(adapter, adapter->mac_addr); in __netxen_nic_up()
1078 adapter->set_multi(netdev); in __netxen_nic_up()
1079 adapter->set_mtu(adapter, netdev->mtu); in __netxen_nic_up()
1081 adapter->ahw.linkup = 0; in __netxen_nic_up()
1083 if (adapter->max_sds_rings > 1) in __netxen_nic_up()
1084 netxen_config_rss(adapter, 1); in __netxen_nic_up()
1086 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in __netxen_nic_up()
1087 netxen_config_intr_coalesce(adapter); in __netxen_nic_up()
1090 netxen_config_hw_lro(adapter, NETXEN_NIC_LRO_ENABLED); in __netxen_nic_up()
1092 netxen_napi_enable(adapter); in __netxen_nic_up()
1094 if (adapter->capabilities & NX_FW_CAPABILITY_LINK_NOTIFICATION) in __netxen_nic_up()
1095 netxen_linkevent_request(adapter, 1); in __netxen_nic_up()
1097 netxen_nic_set_link_parameters(adapter); in __netxen_nic_up()
1099 set_bit(__NX_DEV_UP, &adapter->state); in __netxen_nic_up()
1106 netxen_nic_up(struct netxen_adapter *adapter, struct net_device *netdev) in netxen_nic_up() argument
1112 err = __netxen_nic_up(adapter, netdev); in netxen_nic_up()
1120 __netxen_nic_down(struct netxen_adapter *adapter, struct net_device *netdev) in __netxen_nic_down() argument
1122 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in __netxen_nic_down()
1125 if (!test_and_clear_bit(__NX_DEV_UP, &adapter->state)) in __netxen_nic_down()
1129 spin_lock(&adapter->tx_clean_lock); in __netxen_nic_down()
1133 if (adapter->capabilities & NX_FW_CAPABILITY_LINK_NOTIFICATION) in __netxen_nic_down()
1134 netxen_linkevent_request(adapter, 0); in __netxen_nic_down()
1136 if (adapter->stop_port) in __netxen_nic_down()
1137 adapter->stop_port(adapter); in __netxen_nic_down()
1139 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in __netxen_nic_down()
1140 netxen_p3_free_mac_list(adapter); in __netxen_nic_down()
1142 adapter->set_promisc(adapter, NETXEN_NIU_NON_PROMISC_MODE); in __netxen_nic_down()
1144 netxen_napi_disable(adapter); in __netxen_nic_down()
1146 netxen_release_tx_buffers(adapter); in __netxen_nic_down()
1147 spin_unlock(&adapter->tx_clean_lock); in __netxen_nic_down()
1153 netxen_nic_down(struct netxen_adapter *adapter, struct net_device *netdev) in netxen_nic_down() argument
1157 __netxen_nic_down(adapter, netdev); in netxen_nic_down()
1163 netxen_nic_attach(struct netxen_adapter *adapter) in netxen_nic_attach() argument
1165 struct net_device *netdev = adapter->netdev; in netxen_nic_attach()
1166 struct pci_dev *pdev = adapter->pdev; in netxen_nic_attach()
1171 if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) in netxen_nic_attach()
1174 err = netxen_init_firmware(adapter); in netxen_nic_attach()
1178 err = netxen_napi_add(adapter, netdev); in netxen_nic_attach()
1182 err = netxen_alloc_sw_resources(adapter); in netxen_nic_attach()
1189 err = netxen_alloc_hw_resources(adapter); in netxen_nic_attach()
1196 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_nic_attach()
1197 tx_ring = adapter->tx_ring; in netxen_nic_attach()
1198 tx_ring->crb_cmd_producer = netxen_get_ioaddr(adapter, in netxen_nic_attach()
1199 crb_cmd_producer[adapter->portnum]); in netxen_nic_attach()
1200 tx_ring->crb_cmd_consumer = netxen_get_ioaddr(adapter, in netxen_nic_attach()
1201 crb_cmd_consumer[adapter->portnum]); in netxen_nic_attach()
1206 netxen_nic_update_cmd_producer(adapter, tx_ring); in netxen_nic_attach()
1207 netxen_nic_update_cmd_consumer(adapter, tx_ring); in netxen_nic_attach()
1210 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in netxen_nic_attach()
1211 rds_ring = &adapter->recv_ctx.rds_rings[ring]; in netxen_nic_attach()
1212 netxen_post_rx_buffers(adapter, ring, rds_ring); in netxen_nic_attach()
1215 err = netxen_nic_request_irq(adapter); in netxen_nic_attach()
1222 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_nic_attach()
1223 netxen_nic_init_coalesce_defaults(adapter); in netxen_nic_attach()
1225 netxen_create_sysfs_entries(adapter); in netxen_nic_attach()
1227 adapter->is_up = NETXEN_ADAPTER_UP_MAGIC; in netxen_nic_attach()
1231 netxen_release_rx_buffers(adapter); in netxen_nic_attach()
1232 netxen_free_hw_resources(adapter); in netxen_nic_attach()
1234 netxen_free_sw_resources(adapter); in netxen_nic_attach()
1239 netxen_nic_detach(struct netxen_adapter *adapter) in netxen_nic_detach() argument
1241 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in netxen_nic_detach()
1244 netxen_remove_sysfs_entries(adapter); in netxen_nic_detach()
1246 netxen_free_hw_resources(adapter); in netxen_nic_detach()
1247 netxen_release_rx_buffers(adapter); in netxen_nic_detach()
1248 netxen_nic_free_irq(adapter); in netxen_nic_detach()
1249 netxen_napi_del(adapter); in netxen_nic_detach()
1250 netxen_free_sw_resources(adapter); in netxen_nic_detach()
1252 adapter->is_up = 0; in netxen_nic_detach()
1256 netxen_nic_reset_context(struct netxen_adapter *adapter) in netxen_nic_reset_context() argument
1259 struct net_device *netdev = adapter->netdev; in netxen_nic_reset_context()
1261 if (test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_nic_reset_context()
1264 if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) { in netxen_nic_reset_context()
1269 __netxen_nic_down(adapter, netdev); in netxen_nic_reset_context()
1271 netxen_nic_detach(adapter); in netxen_nic_reset_context()
1274 err = netxen_nic_attach(adapter); in netxen_nic_reset_context()
1276 err = __netxen_nic_up(adapter, netdev); in netxen_nic_reset_context()
1286 clear_bit(__NX_RESETTING, &adapter->state); in netxen_nic_reset_context()
1291 netxen_setup_netdev(struct netxen_adapter *adapter, in netxen_setup_netdev() argument
1295 struct pci_dev *pdev = adapter->pdev; in netxen_setup_netdev()
1297 adapter->mc_enabled = 0; in netxen_setup_netdev()
1298 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_setup_netdev()
1299 adapter->max_mc_count = 38; in netxen_setup_netdev()
1301 adapter->max_mc_count = 16; in netxen_setup_netdev()
1313 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_setup_netdev()
1318 if (adapter->pci_using_dac) { in netxen_setup_netdev()
1323 if (adapter->capabilities & NX_FW_CAPABILITY_FVLANTX) in netxen_setup_netdev()
1326 if (adapter->capabilities & NX_FW_CAPABILITY_HW_LRO) in netxen_setup_netdev()
1331 netdev->irq = adapter->msix_entries[0].vector; in netxen_setup_netdev()
1333 INIT_WORK(&adapter->tx_timeout_task, netxen_tx_timeout_task); in netxen_setup_netdev()
1335 if (netxen_read_mac_addr(adapter)) in netxen_setup_netdev()
1350 static void netxen_mask_aer_correctable(struct netxen_adapter *adapter) in netxen_mask_aer_correctable() argument
1352 struct pci_dev *pdev = adapter->pdev; in netxen_mask_aer_correctable()
1356 if (adapter->ahw.board_type != NETXEN_BRDTYPE_P3_4_GB_MM && in netxen_mask_aer_correctable()
1357 adapter->ahw.board_type != NETXEN_BRDTYPE_P3_10G_TP) in netxen_mask_aer_correctable()
1375 struct netxen_adapter *adapter = NULL; in netxen_nic_probe() local
1413 adapter = netdev_priv(netdev); in netxen_nic_probe()
1414 adapter->netdev = netdev; in netxen_nic_probe()
1415 adapter->pdev = pdev; in netxen_nic_probe()
1416 adapter->ahw.pci_func = pci_func_id; in netxen_nic_probe()
1419 adapter->ahw.revision_id = revision_id; in netxen_nic_probe()
1421 rwlock_init(&adapter->ahw.crb_lock); in netxen_nic_probe()
1422 spin_lock_init(&adapter->ahw.mem_lock); in netxen_nic_probe()
1424 spin_lock_init(&adapter->tx_clean_lock); in netxen_nic_probe()
1425 INIT_LIST_HEAD(&adapter->mac_list); in netxen_nic_probe()
1426 INIT_LIST_HEAD(&adapter->vlan_ip_list); in netxen_nic_probe()
1428 err = netxen_setup_pci_map(adapter); in netxen_nic_probe()
1433 adapter->portnum = pci_func_id; in netxen_nic_probe()
1435 err = netxen_nic_get_board_info(adapter); in netxen_nic_probe()
1442 netxen_mask_aer_correctable(adapter); in netxen_nic_probe()
1446 switch (adapter->ahw.board_type) { in netxen_nic_probe()
1450 adapter->portnum = pci_func_id - 2; in netxen_nic_probe()
1456 err = netxen_check_flash_fw_compatibility(adapter); in netxen_nic_probe()
1460 if (adapter->portnum == 0) { in netxen_nic_probe()
1461 val = NXRD32(adapter, NX_CRB_DEV_REF_COUNT); in netxen_nic_probe()
1463 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, 0); in netxen_nic_probe()
1464 adapter->need_fw_reset = 1; in netxen_nic_probe()
1468 err = netxen_start_firmware(adapter); in netxen_nic_probe()
1475 adapter->physical_port = adapter->portnum; in netxen_nic_probe()
1476 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_nic_probe()
1477 i = NXRD32(adapter, CRB_V2P(adapter->portnum)); in netxen_nic_probe()
1479 adapter->physical_port = i; in netxen_nic_probe()
1482 netxen_nic_clear_stats(adapter); in netxen_nic_probe()
1484 netxen_setup_intr(adapter); in netxen_nic_probe()
1486 err = netxen_setup_netdev(adapter, netdev); in netxen_nic_probe()
1490 pci_set_drvdata(pdev, adapter); in netxen_nic_probe()
1492 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY); in netxen_nic_probe()
1494 switch (adapter->ahw.port_type) { in netxen_nic_probe()
1496 dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n", in netxen_nic_probe()
1497 adapter->netdev->name); in netxen_nic_probe()
1500 dev_info(&adapter->pdev->dev, "%s: XGbE port initialized\n", in netxen_nic_probe()
1501 adapter->netdev->name); in netxen_nic_probe()
1505 netxen_create_diag_entries(adapter); in netxen_nic_probe()
1510 netxen_teardown_intr(adapter); in netxen_nic_probe()
1512 netxen_free_dummy_dma(adapter); in netxen_nic_probe()
1515 nx_decr_dev_ref_cnt(adapter); in netxen_nic_probe()
1518 netxen_cleanup_pci_map(adapter); in netxen_nic_probe()
1534 struct netxen_adapter *adapter; in netxen_nic_remove() local
1537 adapter = pci_get_drvdata(pdev); in netxen_nic_remove()
1538 if (adapter == NULL) in netxen_nic_remove()
1541 netdev = adapter->netdev; in netxen_nic_remove()
1543 netxen_cancel_fw_work(adapter); in netxen_nic_remove()
1547 cancel_work_sync(&adapter->tx_timeout_task); in netxen_nic_remove()
1549 netxen_free_vlan_ip_list(adapter); in netxen_nic_remove()
1550 netxen_nic_detach(adapter); in netxen_nic_remove()
1552 nx_decr_dev_ref_cnt(adapter); in netxen_nic_remove()
1554 if (adapter->portnum == 0) in netxen_nic_remove()
1555 netxen_free_dummy_dma(adapter); in netxen_nic_remove()
1557 clear_bit(__NX_RESETTING, &adapter->state); in netxen_nic_remove()
1559 netxen_teardown_intr(adapter); in netxen_nic_remove()
1561 netxen_remove_diag_entries(adapter); in netxen_nic_remove()
1563 netxen_cleanup_pci_map(adapter); in netxen_nic_remove()
1565 netxen_release_firmware(adapter); in netxen_nic_remove()
1577 static void netxen_nic_detach_func(struct netxen_adapter *adapter) in netxen_nic_detach_func() argument
1579 struct net_device *netdev = adapter->netdev; in netxen_nic_detach_func()
1583 netxen_cancel_fw_work(adapter); in netxen_nic_detach_func()
1586 netxen_nic_down(adapter, netdev); in netxen_nic_detach_func()
1588 cancel_work_sync(&adapter->tx_timeout_task); in netxen_nic_detach_func()
1590 netxen_nic_detach(adapter); in netxen_nic_detach_func()
1592 if (adapter->portnum == 0) in netxen_nic_detach_func()
1593 netxen_free_dummy_dma(adapter); in netxen_nic_detach_func()
1595 nx_decr_dev_ref_cnt(adapter); in netxen_nic_detach_func()
1597 clear_bit(__NX_RESETTING, &adapter->state); in netxen_nic_detach_func()
1602 struct netxen_adapter *adapter = pci_get_drvdata(pdev); in netxen_nic_attach_func() local
1603 struct net_device *netdev = adapter->netdev; in netxen_nic_attach_func()
1614 adapter->ahw.crb_win = -1; in netxen_nic_attach_func()
1615 adapter->ahw.ocm_win = -1; in netxen_nic_attach_func()
1617 err = netxen_start_firmware(adapter); in netxen_nic_attach_func()
1624 err = netxen_nic_attach(adapter); in netxen_nic_attach_func()
1628 err = netxen_nic_up(adapter, netdev); in netxen_nic_attach_func()
1636 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY); in netxen_nic_attach_func()
1640 netxen_nic_detach(adapter); in netxen_nic_attach_func()
1642 nx_decr_dev_ref_cnt(adapter); in netxen_nic_attach_func()
1649 struct netxen_adapter *adapter = pci_get_drvdata(pdev); in netxen_io_error_detected() local
1654 if (nx_dev_request_aer(adapter)) in netxen_io_error_detected()
1657 netxen_nic_detach_func(adapter); in netxen_io_error_detected()
1680 struct netxen_adapter *adapter = pci_get_drvdata(pdev); in netxen_nic_shutdown() local
1682 netxen_nic_detach_func(adapter); in netxen_nic_shutdown()
1687 if (netxen_nic_wol_supported(adapter)) { in netxen_nic_shutdown()
1699 struct netxen_adapter *adapter = pci_get_drvdata(pdev); in netxen_nic_suspend() local
1702 netxen_nic_detach_func(adapter); in netxen_nic_suspend()
1708 if (netxen_nic_wol_supported(adapter)) { in netxen_nic_suspend()
1728 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_open() local
1731 if (adapter->driver_mismatch) in netxen_nic_open()
1734 err = netxen_nic_attach(adapter); in netxen_nic_open()
1738 err = __netxen_nic_up(adapter, netdev); in netxen_nic_open()
1747 netxen_nic_detach(adapter); in netxen_nic_open()
1756 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_close() local
1758 __netxen_nic_down(adapter, netdev); in netxen_nic_close()
1944 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_xmit_frame() local
1945 struct nx_host_tx_ring *tx_ring = adapter->tx_ring; in netxen_nic_xmit_frame()
1990 pdev = adapter->pdev; in netxen_nic_xmit_frame()
2002 netxen_set_tx_port(first_desc, adapter->portnum); in netxen_nic_xmit_frame()
2039 adapter->stats.txbytes += skb->len; in netxen_nic_xmit_frame()
2040 adapter->stats.xmitcalled++; in netxen_nic_xmit_frame()
2042 netxen_nic_update_cmd_producer(adapter, tx_ring); in netxen_nic_xmit_frame()
2047 adapter->stats.txdropped++; in netxen_nic_xmit_frame()
2052 static int netxen_nic_check_temp(struct netxen_adapter *adapter) in netxen_nic_check_temp() argument
2054 struct net_device *netdev = adapter->netdev; in netxen_nic_check_temp()
2058 temp = NXRD32(adapter, CRB_TEMP_STATE); in netxen_nic_check_temp()
2070 if (adapter->temp == NX_TEMP_NORMAL) { in netxen_nic_check_temp()
2078 if (adapter->temp == NX_TEMP_WARN) { in netxen_nic_check_temp()
2085 adapter->temp = temp_state; in netxen_nic_check_temp()
2089 void netxen_advert_link_change(struct netxen_adapter *adapter, int linkup) in netxen_advert_link_change() argument
2091 struct net_device *netdev = adapter->netdev; in netxen_advert_link_change()
2093 if (adapter->ahw.linkup && !linkup) { in netxen_advert_link_change()
2096 adapter->ahw.linkup = 0; in netxen_advert_link_change()
2101 adapter->link_changed = !adapter->has_link_events; in netxen_advert_link_change()
2102 } else if (!adapter->ahw.linkup && linkup) { in netxen_advert_link_change()
2105 adapter->ahw.linkup = 1; in netxen_advert_link_change()
2110 adapter->link_changed = !adapter->has_link_events; in netxen_advert_link_change()
2114 static void netxen_nic_handle_phy_intr(struct netxen_adapter *adapter) in netxen_nic_handle_phy_intr() argument
2118 port = adapter->physical_port; in netxen_nic_handle_phy_intr()
2120 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_nic_handle_phy_intr()
2121 val = NXRD32(adapter, CRB_XG_STATE_P3); in netxen_nic_handle_phy_intr()
2122 val = XG_LINK_STATE_P3(adapter->ahw.pci_func, val); in netxen_nic_handle_phy_intr()
2125 val = NXRD32(adapter, CRB_XG_STATE); in netxen_nic_handle_phy_intr()
2130 netxen_advert_link_change(adapter, linkup); in netxen_nic_handle_phy_intr()
2135 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_tx_timeout() local
2137 if (test_bit(__NX_RESETTING, &adapter->state)) in netxen_tx_timeout()
2141 schedule_work(&adapter->tx_timeout_task); in netxen_tx_timeout()
2146 struct netxen_adapter *adapter = in netxen_tx_timeout_task() local
2149 if (!netif_running(adapter->netdev)) in netxen_tx_timeout_task()
2152 if (test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_tx_timeout_task()
2155 if (++adapter->tx_timeo_cnt >= NX_MAX_TX_TIMEOUTS) in netxen_tx_timeout_task()
2159 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_tx_timeout_task()
2161 netxen_napi_disable(adapter); in netxen_tx_timeout_task()
2163 netxen_napi_enable(adapter); in netxen_tx_timeout_task()
2165 netif_wake_queue(adapter->netdev); in netxen_tx_timeout_task()
2167 clear_bit(__NX_RESETTING, &adapter->state); in netxen_tx_timeout_task()
2169 clear_bit(__NX_RESETTING, &adapter->state); in netxen_tx_timeout_task()
2170 if (netxen_nic_reset_context(adapter)) { in netxen_tx_timeout_task()
2175 adapter->netdev->trans_start = jiffies; in netxen_tx_timeout_task()
2180 adapter->need_fw_reset = 1; in netxen_tx_timeout_task()
2181 clear_bit(__NX_RESETTING, &adapter->state); in netxen_tx_timeout_task()
2187 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_get_stats() local
2189 stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts; in netxen_nic_get_stats()
2190 stats->tx_packets = adapter->stats.xmitfinished; in netxen_nic_get_stats()
2191 stats->rx_bytes = adapter->stats.rxbytes; in netxen_nic_get_stats()
2192 stats->tx_bytes = adapter->stats.txbytes; in netxen_nic_get_stats()
2193 stats->rx_dropped = adapter->stats.rxdropped; in netxen_nic_get_stats()
2194 stats->tx_dropped = adapter->stats.txdropped; in netxen_nic_get_stats()
2202 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_intr() local
2205 status = readl(adapter->isr_int_vec); in netxen_intr()
2207 if (!(status & adapter->int_vec_bit)) in netxen_intr()
2210 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_intr()
2212 status = readl(adapter->crb_int_state_reg); in netxen_intr()
2219 our_int = readl(adapter->crb_int_state_reg); in netxen_intr()
2222 if (!test_and_clear_bit((7 + adapter->portnum), &our_int)) in netxen_intr()
2226 writel((our_int & 0xffffffff), adapter->crb_int_state_reg); in netxen_intr()
2232 writel(0xffffffff, adapter->tgt_status_reg); in netxen_intr()
2234 readl(adapter->isr_int_vec); in netxen_intr()
2235 readl(adapter->isr_int_vec); in netxen_intr()
2245 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_msi_intr() local
2248 writel(0xffffffff, adapter->tgt_status_reg); in netxen_msi_intr()
2267 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_nic_poll() local
2272 tx_complete = netxen_process_cmd_ring(adapter); in netxen_nic_poll()
2278 if (test_bit(__NX_DEV_UP, &adapter->state)) in netxen_nic_poll()
2290 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_poll_controller() local
2291 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_nic_poll_controller()
2293 disable_irq(adapter->irq); in netxen_nic_poll_controller()
2294 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_nic_poll_controller()
2296 netxen_intr(adapter->irq, sds_ring); in netxen_nic_poll_controller()
2298 enable_irq(adapter->irq); in netxen_nic_poll_controller()
2303 nx_incr_dev_ref_cnt(struct netxen_adapter *adapter) in nx_incr_dev_ref_cnt() argument
2306 if (netxen_api_lock(adapter)) in nx_incr_dev_ref_cnt()
2309 count = NXRD32(adapter, NX_CRB_DEV_REF_COUNT); in nx_incr_dev_ref_cnt()
2311 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, ++count); in nx_incr_dev_ref_cnt()
2313 netxen_api_unlock(adapter); in nx_incr_dev_ref_cnt()
2318 nx_decr_dev_ref_cnt(struct netxen_adapter *adapter) in nx_decr_dev_ref_cnt() argument
2321 if (netxen_api_lock(adapter)) in nx_decr_dev_ref_cnt()
2324 count = NXRD32(adapter, NX_CRB_DEV_REF_COUNT); in nx_decr_dev_ref_cnt()
2327 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, --count); in nx_decr_dev_ref_cnt()
2330 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_COLD); in nx_decr_dev_ref_cnt()
2332 netxen_api_unlock(adapter); in nx_decr_dev_ref_cnt()
2337 nx_dev_request_aer(struct netxen_adapter *adapter) in nx_dev_request_aer() argument
2342 if (netxen_api_lock(adapter)) in nx_dev_request_aer()
2345 state = NXRD32(adapter, NX_CRB_DEV_STATE); in nx_dev_request_aer()
2350 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_NEED_AER); in nx_dev_request_aer()
2354 netxen_api_unlock(adapter); in nx_dev_request_aer()
2359 nx_dev_request_reset(struct netxen_adapter *adapter) in nx_dev_request_reset() argument
2364 if (netxen_api_lock(adapter)) in nx_dev_request_reset()
2367 state = NXRD32(adapter, NX_CRB_DEV_STATE); in nx_dev_request_reset()
2372 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_NEED_RESET); in nx_dev_request_reset()
2376 netxen_api_unlock(adapter); in nx_dev_request_reset()
2382 netxen_can_start_firmware(struct netxen_adapter *adapter) in netxen_can_start_firmware() argument
2387 if (netxen_api_lock(adapter)) in netxen_can_start_firmware()
2390 count = NXRD32(adapter, NX_CRB_DEV_REF_COUNT); in netxen_can_start_firmware()
2397 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_INITALIZING); in netxen_can_start_firmware()
2400 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, ++count); in netxen_can_start_firmware()
2402 netxen_api_unlock(adapter); in netxen_can_start_firmware()
2408 netxen_schedule_work(struct netxen_adapter *adapter, in netxen_schedule_work() argument
2411 INIT_DELAYED_WORK(&adapter->fw_work, func); in netxen_schedule_work()
2412 schedule_delayed_work(&adapter->fw_work, delay); in netxen_schedule_work()
2416 netxen_cancel_fw_work(struct netxen_adapter *adapter) in netxen_cancel_fw_work() argument
2418 while (test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_cancel_fw_work()
2421 cancel_delayed_work_sync(&adapter->fw_work); in netxen_cancel_fw_work()
2427 struct netxen_adapter *adapter = container_of(work, in netxen_attach_work() local
2429 struct net_device *netdev = adapter->netdev; in netxen_attach_work()
2433 err = netxen_nic_attach(adapter); in netxen_attach_work()
2437 err = netxen_nic_up(adapter, netdev); in netxen_attach_work()
2439 netxen_nic_detach(adapter); in netxen_attach_work()
2449 adapter->fw_fail_cnt = 0; in netxen_attach_work()
2450 clear_bit(__NX_RESETTING, &adapter->state); in netxen_attach_work()
2451 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY); in netxen_attach_work()
2457 struct netxen_adapter *adapter = container_of(work, in netxen_fwinit_work() local
2461 dev_state = NXRD32(adapter, NX_CRB_DEV_STATE); in netxen_fwinit_work()
2466 if (!netxen_start_firmware(adapter)) { in netxen_fwinit_work()
2467 netxen_schedule_work(adapter, netxen_attach_work, 0); in netxen_fwinit_work()
2474 if (++adapter->fw_wait_cnt < FW_POLL_THRESH) { in netxen_fwinit_work()
2475 netxen_schedule_work(adapter, in netxen_fwinit_work()
2482 nx_incr_dev_ref_cnt(adapter); in netxen_fwinit_work()
2486 clear_bit(__NX_RESETTING, &adapter->state); in netxen_fwinit_work()
2492 struct netxen_adapter *adapter = container_of(work, in netxen_detach_work() local
2494 struct net_device *netdev = adapter->netdev; in netxen_detach_work()
2500 netxen_nic_down(adapter, netdev); in netxen_detach_work()
2503 netxen_nic_detach(adapter); in netxen_detach_work()
2506 status = NXRD32(adapter, NETXEN_PEG_HALT_STATUS1); in netxen_detach_work()
2511 if (adapter->temp == NX_TEMP_PANIC) in netxen_detach_work()
2514 ref_cnt = nx_decr_dev_ref_cnt(adapter); in netxen_detach_work()
2521 adapter->fw_wait_cnt = 0; in netxen_detach_work()
2522 netxen_schedule_work(adapter, netxen_fwinit_work, delay); in netxen_detach_work()
2527 clear_bit(__NX_RESETTING, &adapter->state); in netxen_detach_work()
2531 netxen_check_health(struct netxen_adapter *adapter) in netxen_check_health() argument
2534 struct net_device *netdev = adapter->netdev; in netxen_check_health()
2536 state = NXRD32(adapter, NX_CRB_DEV_STATE); in netxen_check_health()
2540 if (netxen_nic_check_temp(adapter)) in netxen_check_health()
2543 if (adapter->need_fw_reset) { in netxen_check_health()
2544 if (nx_dev_request_reset(adapter)) in netxen_check_health()
2555 adapter->need_fw_reset = 1; in netxen_check_health()
2556 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_check_health()
2560 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_check_health()
2563 heartbit = NXRD32(adapter, NETXEN_PEG_ALIVE_COUNTER); in netxen_check_health()
2564 if (heartbit != adapter->heartbit) { in netxen_check_health()
2565 adapter->heartbit = heartbit; in netxen_check_health()
2566 adapter->fw_fail_cnt = 0; in netxen_check_health()
2567 if (adapter->need_fw_reset) in netxen_check_health()
2572 if (++adapter->fw_fail_cnt < FW_FAIL_THRESH) in netxen_check_health()
2575 if (nx_dev_request_reset(adapter)) in netxen_check_health()
2578 clear_bit(__NX_FW_ATTACHED, &adapter->state); in netxen_check_health()
2584 !test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_check_health()
2585 netxen_schedule_work(adapter, netxen_detach_work, 0); in netxen_check_health()
2592 struct netxen_adapter *adapter = container_of(work, in netxen_fw_poll_work() local
2595 if (test_bit(__NX_RESETTING, &adapter->state)) in netxen_fw_poll_work()
2598 if (test_bit(__NX_DEV_UP, &adapter->state)) { in netxen_fw_poll_work()
2599 if (!adapter->has_link_events) { in netxen_fw_poll_work()
2601 netxen_nic_handle_phy_intr(adapter); in netxen_fw_poll_work()
2603 if (adapter->link_changed) in netxen_fw_poll_work()
2604 netxen_nic_set_link_parameters(adapter); in netxen_fw_poll_work()
2608 if (netxen_check_health(adapter)) in netxen_fw_poll_work()
2612 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY); in netxen_fw_poll_work()
2620 struct netxen_adapter *adapter = netdev_priv(net); in netxen_store_bridged_mode() local
2624 if (!(adapter->capabilities & NX_FW_CAPABILITY_BDG)) in netxen_store_bridged_mode()
2627 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in netxen_store_bridged_mode()
2633 if (!netxen_config_bridged_mode(adapter, !!new)) in netxen_store_bridged_mode()
2645 struct netxen_adapter *adapter; in netxen_show_bridged_mode() local
2648 adapter = netdev_priv(net); in netxen_show_bridged_mode()
2650 if (adapter->capabilities & NX_FW_CAPABILITY_BDG) in netxen_show_bridged_mode()
2651 bridged_mode = !!(adapter->flags & NETXEN_NIC_BRIDGE_ENABLED); in netxen_show_bridged_mode()
2666 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_store_diag_mode() local
2672 if (!!new != !!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)) in netxen_store_diag_mode()
2673 adapter->flags ^= NETXEN_NIC_DIAG_ENABLED; in netxen_store_diag_mode()
2682 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_show_diag_mode() local
2685 !!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)); in netxen_show_diag_mode()
2695 netxen_sysfs_validate_crb(struct netxen_adapter *adapter, in netxen_sysfs_validate_crb() argument
2700 if (!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)) in netxen_sysfs_validate_crb()
2704 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_sysfs_validate_crb()
2726 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_sysfs_read_crb() local
2731 ret = netxen_sysfs_validate_crb(adapter, offset, size); in netxen_sysfs_read_crb()
2735 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) && in netxen_sysfs_read_crb()
2738 netxen_pci_camqm_read_2M(adapter, offset, &qmdata); in netxen_sysfs_read_crb()
2741 data = NXRD32(adapter, offset); in netxen_sysfs_read_crb()
2754 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_sysfs_write_crb() local
2759 ret = netxen_sysfs_validate_crb(adapter, offset, size); in netxen_sysfs_write_crb()
2763 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) && in netxen_sysfs_write_crb()
2767 netxen_pci_camqm_write_2M(adapter, offset, qmdata); in netxen_sysfs_write_crb()
2770 NXWR32(adapter, offset, data); in netxen_sysfs_write_crb()
2777 netxen_sysfs_validate_mem(struct netxen_adapter *adapter, in netxen_sysfs_validate_mem() argument
2780 if (!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)) in netxen_sysfs_validate_mem()
2795 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_sysfs_read_mem() local
2799 ret = netxen_sysfs_validate_mem(adapter, offset, size); in netxen_sysfs_read_mem()
2803 if (adapter->pci_mem_read(adapter, offset, &data)) in netxen_sysfs_read_mem()
2816 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_sysfs_write_mem() local
2820 ret = netxen_sysfs_validate_mem(adapter, offset, size); in netxen_sysfs_write_mem()
2826 if (adapter->pci_mem_write(adapter, offset, data)) in netxen_sysfs_write_mem()
2849 netxen_create_sysfs_entries(struct netxen_adapter *adapter) in netxen_create_sysfs_entries() argument
2851 struct net_device *netdev = adapter->netdev; in netxen_create_sysfs_entries()
2854 if (adapter->capabilities & NX_FW_CAPABILITY_BDG) { in netxen_create_sysfs_entries()
2864 netxen_remove_sysfs_entries(struct netxen_adapter *adapter) in netxen_remove_sysfs_entries() argument
2866 struct net_device *netdev = adapter->netdev; in netxen_remove_sysfs_entries()
2869 if (adapter->capabilities & NX_FW_CAPABILITY_BDG) in netxen_remove_sysfs_entries()
2874 netxen_create_diag_entries(struct netxen_adapter *adapter) in netxen_create_diag_entries() argument
2876 struct pci_dev *pdev = adapter->pdev; in netxen_create_diag_entries()
2890 netxen_remove_diag_entries(struct netxen_adapter *adapter) in netxen_remove_diag_entries() argument
2892 struct pci_dev *pdev = adapter->pdev; in netxen_remove_diag_entries()
2905 netxen_destip_supported(struct netxen_adapter *adapter) in netxen_destip_supported() argument
2907 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_destip_supported()
2910 if (adapter->ahw.cut_through) in netxen_destip_supported()
2917 netxen_free_vlan_ip_list(struct netxen_adapter *adapter) in netxen_free_vlan_ip_list() argument
2920 struct list_head *head = &adapter->vlan_ip_list; in netxen_free_vlan_ip_list()
2924 netxen_config_ipaddr(adapter, cur->ip_addr, NX_IP_DOWN); in netxen_free_vlan_ip_list()
2931 netxen_list_config_vlan_ip(struct netxen_adapter *adapter, in netxen_list_config_vlan_ip() argument
2948 list_for_each(head, &adapter->vlan_ip_list) { in netxen_list_config_vlan_ip()
2958 adapter->netdev->name); in netxen_list_config_vlan_ip()
2963 list_add_tail(&cur->list, &adapter->vlan_ip_list); in netxen_list_config_vlan_ip()
2967 &adapter->vlan_ip_list, list) { in netxen_list_config_vlan_ip()
2977 netxen_config_indev_addr(struct netxen_adapter *adapter, in netxen_config_indev_addr() argument
2982 if (!netxen_destip_supported(adapter)) in netxen_config_indev_addr()
2992 netxen_config_ipaddr(adapter, in netxen_config_indev_addr()
2994 netxen_list_config_vlan_ip(adapter, ifa, NX_IP_UP); in netxen_config_indev_addr()
2997 netxen_config_ipaddr(adapter, in netxen_config_indev_addr()
2999 netxen_list_config_vlan_ip(adapter, ifa, NX_IP_DOWN); in netxen_config_indev_addr()
3013 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_restore_indev_addr() local
3018 netxen_config_indev_addr(adapter, netdev, event); in netxen_restore_indev_addr()
3020 list_for_each_entry_safe(pos, tmp_pos, &adapter->vlan_ip_list, list) { in netxen_restore_indev_addr()
3021 netxen_config_ipaddr(adapter, pos->ip_addr, ip_event); in netxen_restore_indev_addr()
3028 struct netxen_adapter *adapter; in netxen_netdev_event() local
3044 adapter = netdev_priv(dev); in netxen_netdev_event()
3046 if (!adapter) in netxen_netdev_event()
3049 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in netxen_netdev_event()
3052 netxen_config_indev_addr(adapter, orig_dev, event); in netxen_netdev_event()
3061 struct netxen_adapter *adapter; in netxen_inetaddr_event() local
3080 adapter = netdev_priv(dev); in netxen_inetaddr_event()
3082 if (!adapter || !netxen_destip_supported(adapter)) in netxen_inetaddr_event()
3085 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in netxen_inetaddr_event()
3090 netxen_config_ipaddr(adapter, ifa->ifa_address, NX_IP_UP); in netxen_inetaddr_event()
3091 netxen_list_config_vlan_ip(adapter, ifa, NX_IP_UP); in netxen_inetaddr_event()
3094 netxen_config_ipaddr(adapter, ifa->ifa_address, NX_IP_DOWN); in netxen_inetaddr_event()
3095 netxen_list_config_vlan_ip(adapter, ifa, NX_IP_DOWN); in netxen_inetaddr_event()
3117 netxen_free_vlan_ip_list(struct netxen_adapter *adapter) in netxen_free_vlan_ip_list() argument