• Home
  • Raw
  • Download

Lines Matching refs:adapter

71 static void netxen_schedule_work(struct netxen_adapter *adapter,
73 static void netxen_cancel_fw_work(struct netxen_adapter *adapter);
79 static void netxen_create_sysfs_entries(struct netxen_adapter *adapter);
80 static void netxen_remove_sysfs_entries(struct netxen_adapter *adapter);
81 static void netxen_create_diag_entries(struct netxen_adapter *adapter);
82 static void netxen_remove_diag_entries(struct netxen_adapter *adapter);
83 static int nx_dev_request_aer(struct netxen_adapter *adapter);
84 static int nx_decr_dev_ref_cnt(struct netxen_adapter *adapter);
85 static int netxen_can_start_firmware(struct netxen_adapter *adapter);
122 netxen_nic_update_cmd_producer(struct netxen_adapter *adapter, in netxen_nic_update_cmd_producer() argument
125 NXWRIO(adapter, tx_ring->crb_cmd_producer, tx_ring->producer); in netxen_nic_update_cmd_producer()
134 netxen_nic_update_cmd_consumer(struct netxen_adapter *adapter, in netxen_nic_update_cmd_consumer() argument
137 NXWRIO(adapter, tx_ring->crb_cmd_consumer, tx_ring->sw_consumer); in netxen_nic_update_cmd_consumer()
151 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_nic_disable_int() local
153 NXWRIO(adapter, sds_ring->crb_intr_mask, 0); in netxen_nic_disable_int()
158 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_nic_enable_int() local
160 NXWRIO(adapter, sds_ring->crb_intr_mask, 0x1); in netxen_nic_enable_int()
162 if (!NETXEN_IS_MSI_FAMILY(adapter)) in netxen_nic_enable_int()
163 NXWRIO(adapter, adapter->tgt_mask_reg, 0xfbff); in netxen_nic_enable_int()
184 netxen_napi_add(struct netxen_adapter *adapter, struct net_device *netdev) in netxen_napi_add() argument
188 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_add()
190 if (netxen_alloc_sds_rings(recv_ctx, adapter->max_sds_rings)) in netxen_napi_add()
193 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_add()
203 netxen_napi_del(struct netxen_adapter *adapter) in netxen_napi_del() argument
207 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_del()
209 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_del()
214 netxen_free_sds_rings(&adapter->recv_ctx); in netxen_napi_del()
218 netxen_napi_enable(struct netxen_adapter *adapter) in netxen_napi_enable() argument
222 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_enable()
224 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_enable()
232 netxen_napi_disable(struct netxen_adapter *adapter) in netxen_napi_disable() argument
236 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_napi_disable()
238 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_napi_disable()
246 static int nx_set_dma_mask(struct netxen_adapter *adapter) in nx_set_dma_mask() argument
248 struct pci_dev *pdev = adapter->pdev; in nx_set_dma_mask()
251 adapter->pci_using_dac = 0; in nx_set_dma_mask()
256 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in nx_set_dma_mask()
267 adapter->pci_using_dac = 1; in nx_set_dma_mask()
276 nx_update_dma_mask(struct netxen_adapter *adapter) in nx_update_dma_mask() argument
280 struct pci_dev *pdev = adapter->pdev; in nx_update_dma_mask()
284 shift = NXRD32(adapter, CRB_DMA_SHIFT); in nx_update_dma_mask()
288 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) && (shift > 9)) in nx_update_dma_mask()
290 else if ((adapter->ahw.revision_id == NX_P2_C1) && (shift <= 4)) in nx_update_dma_mask()
303 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in nx_update_dma_mask()
321 netxen_check_hw_init(struct netxen_adapter *adapter, int first_boot) in netxen_check_hw_init() argument
327 NXWR32(adapter, NETXEN_CAM_RAM(0x1fc), NETXEN_BDINFO_MAGIC); in netxen_check_hw_init()
329 if (!NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_check_hw_init()
333 first_boot = NXRD32(adapter, NETXEN_PCIE_REG(0x4)); in netxen_check_hw_init()
336 NXWR32(adapter, NETXEN_PCIE_REG(0x4), first_boot); in netxen_check_hw_init()
337 NXRD32(adapter, NETXEN_PCIE_REG(0x4)); in netxen_check_hw_init()
341 first_boot = NXRD32(adapter, NETXEN_ROMUSB_GLB_SW_RESET); in netxen_check_hw_init()
344 NXWR32(adapter, NETXEN_CAM_RAM(0x1fc), 0); in netxen_check_hw_init()
349 val = NXRD32(adapter, NETXEN_ROMUSB_GLB_PEGTUNE_DONE); in netxen_check_hw_init()
350 NXWR32(adapter, NETXEN_ROMUSB_GLB_PEGTUNE_DONE, val | 0x1); in netxen_check_hw_init()
354 val = NXRD32(adapter, NETXEN_CAM_RAM(0x1fc)); in netxen_check_hw_init()
364 static void netxen_set_port_mode(struct netxen_adapter *adapter) in netxen_set_port_mode() argument
368 val = adapter->ahw.board_type; in netxen_set_port_mode()
373 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data); in netxen_set_port_mode()
376 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data); in netxen_set_port_mode()
379 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data); in netxen_set_port_mode()
382 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data); in netxen_set_port_mode()
385 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data); in netxen_set_port_mode()
394 NXWR32(adapter, NETXEN_WOL_PORT_MODE, wol_port_mode); in netxen_set_port_mode()
400 static void netxen_pcie_strap_init(struct netxen_adapter *adapter) in netxen_pcie_strap_init() argument
409 pdev = adapter->pdev; in netxen_pcie_strap_init()
411 chicken = NXRD32(adapter, NETXEN_PCIE_REG(PCIE_CHICKEN3)); in netxen_pcie_strap_init()
425 dev_info(&adapter->pdev->dev, "Gen2 strapping detected\n"); in netxen_pcie_strap_init()
430 dev_info(&adapter->pdev->dev, "Gen1 strapping detected\n"); in netxen_pcie_strap_init()
431 if (adapter->ahw.revision_id == NX_P3_B0) in netxen_pcie_strap_init()
437 NXWR32(adapter, NETXEN_PCIE_REG(PCIE_CHICKEN3), chicken); in netxen_pcie_strap_init()
469 static void netxen_init_msix_entries(struct netxen_adapter *adapter, int count) in netxen_init_msix_entries() argument
474 adapter->msix_entries[i].entry = i; in netxen_init_msix_entries()
478 netxen_read_mac_addr(struct netxen_adapter *adapter) in netxen_read_mac_addr() argument
483 struct net_device *netdev = adapter->netdev; in netxen_read_mac_addr()
484 struct pci_dev *pdev = adapter->pdev; in netxen_read_mac_addr()
486 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_read_mac_addr()
487 if (netxen_p3_get_mac_addr(adapter, &mac_addr) != 0) in netxen_read_mac_addr()
490 if (netxen_get_flash_mac_addr(adapter, &mac_addr) != 0) in netxen_read_mac_addr()
498 memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len); in netxen_read_mac_addr()
510 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_set_mac() local
518 netxen_napi_disable(adapter); in netxen_nic_set_mac()
521 memcpy(adapter->mac_addr, addr->sa_data, netdev->addr_len); in netxen_nic_set_mac()
523 adapter->macaddr_set(adapter, addr->sa_data); in netxen_nic_set_mac()
527 netxen_napi_enable(adapter); in netxen_nic_set_mac()
534 struct netxen_adapter *adapter = netdev_priv(dev); in netxen_set_multicast_list() local
536 adapter->set_multi(dev); in netxen_set_multicast_list()
554 struct netxen_adapter *adapter = netdev_priv(dev); in netxen_set_features() local
563 if (netxen_config_hw_lro(adapter, hw_lro)) in netxen_set_features()
566 if (!(features & NETIF_F_LRO) && netxen_send_lro_cleanup(adapter)) in netxen_set_features()
594 static inline void netxen_set_interrupt_mode(struct netxen_adapter *adapter, in netxen_set_interrupt_mode() argument
597 NXWR32(adapter, NETXEN_INTR_MODE_REG, mode); in netxen_set_interrupt_mode()
600 static inline u32 netxen_get_interrupt_mode(struct netxen_adapter *adapter) in netxen_get_interrupt_mode() argument
602 return NXRD32(adapter, NETXEN_INTR_MODE_REG); in netxen_get_interrupt_mode()
606 netxen_initialize_interrupt_registers(struct netxen_adapter *adapter) in netxen_initialize_interrupt_registers() argument
611 if (adapter->ahw.revision_id >= NX_P3_B0) in netxen_initialize_interrupt_registers()
612 legacy_intrp = &legacy_intr[adapter->ahw.pci_func]; in netxen_initialize_interrupt_registers()
619 adapter->int_vec_bit = legacy_intrp->int_vec_bit; in netxen_initialize_interrupt_registers()
620 adapter->tgt_status_reg = netxen_get_ioaddr(adapter, tgt_status_reg); in netxen_initialize_interrupt_registers()
621 adapter->tgt_mask_reg = netxen_get_ioaddr(adapter, in netxen_initialize_interrupt_registers()
623 adapter->pci_int_reg = netxen_get_ioaddr(adapter, in netxen_initialize_interrupt_registers()
625 adapter->isr_int_vec = netxen_get_ioaddr(adapter, ISR_INT_VECTOR); in netxen_initialize_interrupt_registers()
627 if (adapter->ahw.revision_id >= NX_P3_B1) in netxen_initialize_interrupt_registers()
628 adapter->crb_int_state_reg = netxen_get_ioaddr(adapter, in netxen_initialize_interrupt_registers()
631 adapter->crb_int_state_reg = netxen_get_ioaddr(adapter, in netxen_initialize_interrupt_registers()
635 static int netxen_setup_msi_interrupts(struct netxen_adapter *adapter, in netxen_setup_msi_interrupts() argument
638 struct pci_dev *pdev = adapter->pdev; in netxen_setup_msi_interrupts()
642 if (adapter->msix_supported) { in netxen_setup_msi_interrupts()
643 netxen_init_msix_entries(adapter, num_msix); in netxen_setup_msi_interrupts()
644 err = pci_enable_msix_range(pdev, adapter->msix_entries, in netxen_setup_msi_interrupts()
647 adapter->flags |= NETXEN_NIC_MSIX_ENABLED; in netxen_setup_msi_interrupts()
650 if (adapter->rss_supported) in netxen_setup_msi_interrupts()
651 adapter->max_sds_rings = num_msix; in netxen_setup_msi_interrupts()
660 value = msi_tgt_status[adapter->ahw.pci_func]; in netxen_setup_msi_interrupts()
661 adapter->flags |= NETXEN_NIC_MSI_ENABLED; in netxen_setup_msi_interrupts()
662 adapter->tgt_status_reg = netxen_get_ioaddr(adapter, value); in netxen_setup_msi_interrupts()
663 adapter->msix_entries[0].vector = pdev->irq; in netxen_setup_msi_interrupts()
672 static int netxen_setup_intr(struct netxen_adapter *adapter) in netxen_setup_intr() argument
674 struct pci_dev *pdev = adapter->pdev; in netxen_setup_intr()
677 if (adapter->rss_supported) in netxen_setup_intr()
683 adapter->max_sds_rings = 1; in netxen_setup_intr()
684 adapter->flags &= ~(NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED); in netxen_setup_intr()
686 netxen_initialize_interrupt_registers(adapter); in netxen_setup_intr()
690 if (!netxen_setup_msi_interrupts(adapter, num_msix)) in netxen_setup_intr()
691 netxen_set_interrupt_mode(adapter, NETXEN_MSI_MODE); in netxen_setup_intr()
693 netxen_set_interrupt_mode(adapter, NETXEN_INTX_MODE); in netxen_setup_intr()
695 if (netxen_get_interrupt_mode(adapter) == NETXEN_MSI_MODE && in netxen_setup_intr()
696 netxen_setup_msi_interrupts(adapter, num_msix)) { in netxen_setup_intr()
702 if (!NETXEN_IS_MSI_FAMILY(adapter)) { in netxen_setup_intr()
703 adapter->msix_entries[0].vector = pdev->irq; in netxen_setup_intr()
710 netxen_teardown_intr(struct netxen_adapter *adapter) in netxen_teardown_intr() argument
712 if (adapter->flags & NETXEN_NIC_MSIX_ENABLED) in netxen_teardown_intr()
713 pci_disable_msix(adapter->pdev); in netxen_teardown_intr()
714 if (adapter->flags & NETXEN_NIC_MSI_ENABLED) in netxen_teardown_intr()
715 pci_disable_msi(adapter->pdev); in netxen_teardown_intr()
719 netxen_cleanup_pci_map(struct netxen_adapter *adapter) in netxen_cleanup_pci_map() argument
721 if (adapter->ahw.db_base != NULL) in netxen_cleanup_pci_map()
722 iounmap(adapter->ahw.db_base); in netxen_cleanup_pci_map()
723 if (adapter->ahw.pci_base0 != NULL) in netxen_cleanup_pci_map()
724 iounmap(adapter->ahw.pci_base0); in netxen_cleanup_pci_map()
725 if (adapter->ahw.pci_base1 != NULL) in netxen_cleanup_pci_map()
726 iounmap(adapter->ahw.pci_base1); in netxen_cleanup_pci_map()
727 if (adapter->ahw.pci_base2 != NULL) in netxen_cleanup_pci_map()
728 iounmap(adapter->ahw.pci_base2); in netxen_cleanup_pci_map()
732 netxen_setup_pci_map(struct netxen_adapter *adapter) in netxen_setup_pci_map() argument
739 struct pci_dev *pdev = adapter->pdev; in netxen_setup_pci_map()
740 int pci_func = adapter->ahw.pci_func; in netxen_setup_pci_map()
741 struct netxen_hardware_context *ahw = &adapter->ahw; in netxen_setup_pci_map()
749 adapter->ahw.crb_win = -1; in netxen_setup_pci_map()
750 adapter->ahw.ocm_win = -1; in netxen_setup_pci_map()
796 netxen_setup_hwops(adapter); in netxen_setup_pci_map()
800 if (NX_IS_REVISION_P3P(adapter->ahw.revision_id)) { in netxen_setup_pci_map()
801 adapter->ahw.ocm_win_crb = netxen_get_ioaddr(adapter, in netxen_setup_pci_map()
804 } else if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_setup_pci_map()
805 adapter->ahw.ocm_win_crb = netxen_get_ioaddr(adapter, in netxen_setup_pci_map()
809 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_setup_pci_map()
831 adapter->ahw.db_base = db_ptr; in netxen_setup_pci_map()
832 adapter->ahw.db_len = db_len; in netxen_setup_pci_map()
836 netxen_cleanup_pci_map(adapter); in netxen_setup_pci_map()
841 netxen_check_options(struct netxen_adapter *adapter) in netxen_check_options() argument
848 struct pci_dev *pdev = adapter->pdev; in netxen_check_options()
850 adapter->driver_mismatch = 0; in netxen_check_options()
855 err = netxen_rom_fast_read(adapter, offset, &val); in netxen_check_options()
858 adapter->driver_mismatch = 1; in netxen_check_options()
865 fw_major = NXRD32(adapter, NETXEN_FW_VERSION_MAJOR); in netxen_check_options()
866 fw_minor = NXRD32(adapter, NETXEN_FW_VERSION_MINOR); in netxen_check_options()
867 fw_build = NXRD32(adapter, NETXEN_FW_VERSION_SUB); in netxen_check_options()
868 prev_fw_version = adapter->fw_version; in netxen_check_options()
869 adapter->fw_version = NETXEN_VERSION_CODE(fw_major, fw_minor, fw_build); in netxen_check_options()
872 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_check_options()
873 if (adapter->mdump.md_template == NULL || in netxen_check_options()
874 adapter->fw_version > prev_fw_version) { in netxen_check_options()
875 kfree(adapter->mdump.md_template); in netxen_check_options()
876 adapter->mdump.md_template = NULL; in netxen_check_options()
877 err = netxen_setup_minidump(adapter); in netxen_check_options()
879 dev_err(&adapter->pdev->dev, in netxen_check_options()
884 if (adapter->portnum == 0) { in netxen_check_options()
885 if (netxen_nic_get_brd_name_by_type(adapter->ahw.board_type, in netxen_check_options()
891 brd_name, serial_num, adapter->ahw.revision_id); in netxen_check_options()
894 if (adapter->fw_version < NETXEN_VERSION_CODE(3, 4, 216)) { in netxen_check_options()
895 adapter->driver_mismatch = 1; in netxen_check_options()
901 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_check_options()
902 i = NXRD32(adapter, NETXEN_SRE_MISC); in netxen_check_options()
903 adapter->ahw.cut_through = (i & 0x8000) ? 1 : 0; in netxen_check_options()
908 adapter->ahw.cut_through ? "cut-through" : "legacy"); in netxen_check_options()
910 if (adapter->fw_version >= NETXEN_VERSION_CODE(4, 0, 222)) in netxen_check_options()
911 adapter->capabilities = NXRD32(adapter, CRB_FW_CAPABILITIES_1); in netxen_check_options()
913 if (adapter->ahw.port_type == NETXEN_NIC_XGBE) { in netxen_check_options()
914 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_10G; in netxen_check_options()
915 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G; in netxen_check_options()
916 } else if (adapter->ahw.port_type == NETXEN_NIC_GBE) { in netxen_check_options()
917 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_1G; in netxen_check_options()
918 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G; in netxen_check_options()
921 adapter->msix_supported = 0; in netxen_check_options()
922 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_check_options()
923 adapter->msix_supported = !!use_msi_x; in netxen_check_options()
924 adapter->rss_supported = !!use_msi_x; in netxen_check_options()
927 netxen_rom_fast_read(adapter, in netxen_check_options()
932 switch (adapter->ahw.board_type) { in netxen_check_options()
935 adapter->msix_supported = !!use_msi_x; in netxen_check_options()
936 adapter->rss_supported = !!use_msi_x; in netxen_check_options()
944 adapter->num_txd = MAX_CMD_DESCRIPTORS; in netxen_check_options()
946 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_check_options()
947 adapter->num_lro_rxd = MAX_LRO_RCV_DESCRIPTORS; in netxen_check_options()
948 adapter->max_rds_rings = 3; in netxen_check_options()
950 adapter->num_lro_rxd = 0; in netxen_check_options()
951 adapter->max_rds_rings = 2; in netxen_check_options()
956 netxen_start_firmware(struct netxen_adapter *adapter) in netxen_start_firmware() argument
959 struct pci_dev *pdev = adapter->pdev; in netxen_start_firmware()
962 err = nx_set_dma_mask(adapter); in netxen_start_firmware()
966 err = netxen_can_start_firmware(adapter); in netxen_start_firmware()
974 first_boot = NXRD32(adapter, NETXEN_CAM_RAM(0x1fc)); in netxen_start_firmware()
976 err = netxen_check_hw_init(adapter, first_boot); in netxen_start_firmware()
982 netxen_request_firmware(adapter); in netxen_start_firmware()
984 err = netxen_need_fw_reset(adapter); in netxen_start_firmware()
991 NXWR32(adapter, CRB_CMDPEG_STATE, 0); in netxen_start_firmware()
992 netxen_pinit_from_rom(adapter); in netxen_start_firmware()
996 NXWR32(adapter, CRB_DMA_SHIFT, 0x55555555); in netxen_start_firmware()
997 NXWR32(adapter, NETXEN_PEG_HALT_STATUS1, 0); in netxen_start_firmware()
998 NXWR32(adapter, NETXEN_PEG_HALT_STATUS2, 0); in netxen_start_firmware()
1000 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_start_firmware()
1001 netxen_set_port_mode(adapter); in netxen_start_firmware()
1003 err = netxen_load_firmware(adapter); in netxen_start_firmware()
1007 netxen_release_firmware(adapter); in netxen_start_firmware()
1009 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_start_firmware()
1013 if (adapter->ahw.port_type == NETXEN_NIC_XGBE) in netxen_start_firmware()
1015 NXWR32(adapter, NETXEN_MAC_ADDR_CNTL_REG, val); in netxen_start_firmware()
1019 err = netxen_init_dummy_dma(adapter); in netxen_start_firmware()
1029 NXWR32(adapter, CRB_DRIVER_VERSION, val); in netxen_start_firmware()
1032 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_start_firmware()
1033 netxen_pcie_strap_init(adapter); in netxen_start_firmware()
1037 err = netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE); in netxen_start_firmware()
1039 netxen_free_dummy_dma(adapter); in netxen_start_firmware()
1043 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_READY); in netxen_start_firmware()
1045 nx_update_dma_mask(adapter); in netxen_start_firmware()
1047 netxen_check_options(adapter); in netxen_start_firmware()
1049 adapter->need_fw_reset = 0; in netxen_start_firmware()
1054 netxen_release_firmware(adapter); in netxen_start_firmware()
1059 netxen_nic_request_irq(struct netxen_adapter *adapter) in netxen_nic_request_irq() argument
1066 struct net_device *netdev = adapter->netdev; in netxen_nic_request_irq()
1067 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_nic_request_irq()
1069 if (adapter->flags & NETXEN_NIC_MSIX_ENABLED) in netxen_nic_request_irq()
1071 else if (adapter->flags & NETXEN_NIC_MSI_ENABLED) in netxen_nic_request_irq()
1077 adapter->irq = netdev->irq; in netxen_nic_request_irq()
1079 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_nic_request_irq()
1092 netxen_nic_free_irq(struct netxen_adapter *adapter) in netxen_nic_free_irq() argument
1097 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_nic_free_irq()
1099 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_nic_free_irq()
1106 netxen_nic_init_coalesce_defaults(struct netxen_adapter *adapter) in netxen_nic_init_coalesce_defaults() argument
1108 adapter->coal.flags = NETXEN_NIC_INTR_DEFAULT; in netxen_nic_init_coalesce_defaults()
1109 adapter->coal.normal.data.rx_time_us = in netxen_nic_init_coalesce_defaults()
1111 adapter->coal.normal.data.rx_packets = in netxen_nic_init_coalesce_defaults()
1113 adapter->coal.normal.data.tx_time_us = in netxen_nic_init_coalesce_defaults()
1115 adapter->coal.normal.data.tx_packets = in netxen_nic_init_coalesce_defaults()
1121 __netxen_nic_up(struct netxen_adapter *adapter, struct net_device *netdev) in __netxen_nic_up() argument
1125 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in __netxen_nic_up()
1128 err = adapter->init_port(adapter, adapter->physical_port); in __netxen_nic_up()
1131 netxen_nic_driver_name, adapter->portnum); in __netxen_nic_up()
1134 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in __netxen_nic_up()
1135 adapter->macaddr_set(adapter, adapter->mac_addr); in __netxen_nic_up()
1137 adapter->set_multi(netdev); in __netxen_nic_up()
1138 adapter->set_mtu(adapter, netdev->mtu); in __netxen_nic_up()
1140 adapter->ahw.linkup = 0; in __netxen_nic_up()
1142 if (adapter->max_sds_rings > 1) in __netxen_nic_up()
1143 netxen_config_rss(adapter, 1); in __netxen_nic_up()
1145 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in __netxen_nic_up()
1146 netxen_config_intr_coalesce(adapter); in __netxen_nic_up()
1149 netxen_config_hw_lro(adapter, NETXEN_NIC_LRO_ENABLED); in __netxen_nic_up()
1151 netxen_napi_enable(adapter); in __netxen_nic_up()
1153 if (adapter->capabilities & NX_FW_CAPABILITY_LINK_NOTIFICATION) in __netxen_nic_up()
1154 netxen_linkevent_request(adapter, 1); in __netxen_nic_up()
1156 netxen_nic_set_link_parameters(adapter); in __netxen_nic_up()
1158 set_bit(__NX_DEV_UP, &adapter->state); in __netxen_nic_up()
1165 netxen_nic_up(struct netxen_adapter *adapter, struct net_device *netdev) in netxen_nic_up() argument
1171 err = __netxen_nic_up(adapter, netdev); in netxen_nic_up()
1179 __netxen_nic_down(struct netxen_adapter *adapter, struct net_device *netdev) in __netxen_nic_down() argument
1181 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in __netxen_nic_down()
1184 if (!test_and_clear_bit(__NX_DEV_UP, &adapter->state)) in __netxen_nic_down()
1191 if (adapter->capabilities & NX_FW_CAPABILITY_LINK_NOTIFICATION) in __netxen_nic_down()
1192 netxen_linkevent_request(adapter, 0); in __netxen_nic_down()
1194 if (adapter->stop_port) in __netxen_nic_down()
1195 adapter->stop_port(adapter); in __netxen_nic_down()
1197 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in __netxen_nic_down()
1198 netxen_p3_free_mac_list(adapter); in __netxen_nic_down()
1200 adapter->set_promisc(adapter, NETXEN_NIU_NON_PROMISC_MODE); in __netxen_nic_down()
1202 netxen_napi_disable(adapter); in __netxen_nic_down()
1204 netxen_release_tx_buffers(adapter); in __netxen_nic_down()
1210 netxen_nic_down(struct netxen_adapter *adapter, struct net_device *netdev) in netxen_nic_down() argument
1214 __netxen_nic_down(adapter, netdev); in netxen_nic_down()
1220 netxen_nic_attach(struct netxen_adapter *adapter) in netxen_nic_attach() argument
1222 struct net_device *netdev = adapter->netdev; in netxen_nic_attach()
1223 struct pci_dev *pdev = adapter->pdev; in netxen_nic_attach()
1229 if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) in netxen_nic_attach()
1232 err = netxen_init_firmware(adapter); in netxen_nic_attach()
1236 adapter->flags &= ~NETXEN_FW_MSS_CAP; in netxen_nic_attach()
1237 if (adapter->capabilities & NX_FW_CAPABILITY_MORE_CAPS) { in netxen_nic_attach()
1238 capab2 = NXRD32(adapter, CRB_FW_CAPABILITIES_2); in netxen_nic_attach()
1240 adapter->flags |= NETXEN_FW_MSS_CAP; in netxen_nic_attach()
1243 err = netxen_napi_add(adapter, netdev); in netxen_nic_attach()
1247 err = netxen_alloc_sw_resources(adapter); in netxen_nic_attach()
1254 err = netxen_alloc_hw_resources(adapter); in netxen_nic_attach()
1261 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_nic_attach()
1262 tx_ring = adapter->tx_ring; in netxen_nic_attach()
1263 tx_ring->crb_cmd_producer = netxen_get_ioaddr(adapter, in netxen_nic_attach()
1264 crb_cmd_producer[adapter->portnum]); in netxen_nic_attach()
1265 tx_ring->crb_cmd_consumer = netxen_get_ioaddr(adapter, in netxen_nic_attach()
1266 crb_cmd_consumer[adapter->portnum]); in netxen_nic_attach()
1271 netxen_nic_update_cmd_producer(adapter, tx_ring); in netxen_nic_attach()
1272 netxen_nic_update_cmd_consumer(adapter, tx_ring); in netxen_nic_attach()
1275 for (ring = 0; ring < adapter->max_rds_rings; ring++) { in netxen_nic_attach()
1276 rds_ring = &adapter->recv_ctx.rds_rings[ring]; in netxen_nic_attach()
1277 netxen_post_rx_buffers(adapter, ring, rds_ring); in netxen_nic_attach()
1280 err = netxen_nic_request_irq(adapter); in netxen_nic_attach()
1287 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_nic_attach()
1288 netxen_nic_init_coalesce_defaults(adapter); in netxen_nic_attach()
1290 netxen_create_sysfs_entries(adapter); in netxen_nic_attach()
1292 adapter->is_up = NETXEN_ADAPTER_UP_MAGIC; in netxen_nic_attach()
1296 netxen_release_rx_buffers(adapter); in netxen_nic_attach()
1297 netxen_free_hw_resources(adapter); in netxen_nic_attach()
1299 netxen_free_sw_resources(adapter); in netxen_nic_attach()
1304 netxen_nic_detach(struct netxen_adapter *adapter) in netxen_nic_detach() argument
1306 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in netxen_nic_detach()
1309 netxen_remove_sysfs_entries(adapter); in netxen_nic_detach()
1311 netxen_free_hw_resources(adapter); in netxen_nic_detach()
1312 netxen_release_rx_buffers(adapter); in netxen_nic_detach()
1313 netxen_nic_free_irq(adapter); in netxen_nic_detach()
1314 netxen_napi_del(adapter); in netxen_nic_detach()
1315 netxen_free_sw_resources(adapter); in netxen_nic_detach()
1317 adapter->is_up = 0; in netxen_nic_detach()
1321 netxen_nic_reset_context(struct netxen_adapter *adapter) in netxen_nic_reset_context() argument
1324 struct net_device *netdev = adapter->netdev; in netxen_nic_reset_context()
1326 if (test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_nic_reset_context()
1329 if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) { in netxen_nic_reset_context()
1334 __netxen_nic_down(adapter, netdev); in netxen_nic_reset_context()
1336 netxen_nic_detach(adapter); in netxen_nic_reset_context()
1339 err = netxen_nic_attach(adapter); in netxen_nic_reset_context()
1341 err = __netxen_nic_up(adapter, netdev); in netxen_nic_reset_context()
1351 clear_bit(__NX_RESETTING, &adapter->state); in netxen_nic_reset_context()
1356 netxen_setup_netdev(struct netxen_adapter *adapter, in netxen_setup_netdev() argument
1360 struct pci_dev *pdev = adapter->pdev; in netxen_setup_netdev()
1362 adapter->mc_enabled = 0; in netxen_setup_netdev()
1363 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_setup_netdev()
1364 adapter->max_mc_count = 38; in netxen_setup_netdev()
1366 adapter->max_mc_count = 16; in netxen_setup_netdev()
1378 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) in netxen_setup_netdev()
1383 if (adapter->pci_using_dac) { in netxen_setup_netdev()
1388 if (adapter->capabilities & NX_FW_CAPABILITY_FVLANTX) in netxen_setup_netdev()
1391 if (adapter->capabilities & NX_FW_CAPABILITY_HW_LRO) in netxen_setup_netdev()
1396 netdev->irq = adapter->msix_entries[0].vector; in netxen_setup_netdev()
1398 INIT_WORK(&adapter->tx_timeout_task, netxen_tx_timeout_task); in netxen_setup_netdev()
1400 if (netxen_read_mac_addr(adapter)) in netxen_setup_netdev()
1417 static void netxen_read_ula_info(struct netxen_adapter *adapter) in netxen_read_ula_info() argument
1422 if (adapter->portnum != 0) in netxen_read_ula_info()
1425 temp = NXRD32(adapter, NETXEN_ULA_KEY); in netxen_read_ula_info()
1428 dev_info(&adapter->pdev->dev, "ULA adapter"); in netxen_read_ula_info()
1431 dev_info(&adapter->pdev->dev, "non ULA adapter"); in netxen_read_ula_info()
1441 static void netxen_mask_aer_correctable(struct netxen_adapter *adapter) in netxen_mask_aer_correctable() argument
1443 struct pci_dev *pdev = adapter->pdev; in netxen_mask_aer_correctable()
1451 if (adapter->ahw.board_type != NETXEN_BRDTYPE_P3_4_GB_MM && in netxen_mask_aer_correctable()
1452 adapter->ahw.board_type != NETXEN_BRDTYPE_P3_10G_TP) in netxen_mask_aer_correctable()
1470 struct netxen_adapter *adapter = NULL; in netxen_nic_probe() local
1506 adapter = netdev_priv(netdev); in netxen_nic_probe()
1507 adapter->netdev = netdev; in netxen_nic_probe()
1508 adapter->pdev = pdev; in netxen_nic_probe()
1509 adapter->ahw.pci_func = pci_func_id; in netxen_nic_probe()
1512 adapter->ahw.revision_id = revision_id; in netxen_nic_probe()
1514 rwlock_init(&adapter->ahw.crb_lock); in netxen_nic_probe()
1515 spin_lock_init(&adapter->ahw.mem_lock); in netxen_nic_probe()
1517 spin_lock_init(&adapter->tx_clean_lock); in netxen_nic_probe()
1518 INIT_LIST_HEAD(&adapter->mac_list); in netxen_nic_probe()
1519 INIT_LIST_HEAD(&adapter->ip_list); in netxen_nic_probe()
1521 err = netxen_setup_pci_map(adapter); in netxen_nic_probe()
1526 adapter->portnum = pci_func_id; in netxen_nic_probe()
1528 err = netxen_nic_get_board_info(adapter); in netxen_nic_probe()
1535 netxen_mask_aer_correctable(adapter); in netxen_nic_probe()
1539 switch (adapter->ahw.board_type) { in netxen_nic_probe()
1543 adapter->portnum = pci_func_id - 2; in netxen_nic_probe()
1549 err = netxen_check_flash_fw_compatibility(adapter); in netxen_nic_probe()
1553 if (adapter->portnum == 0) { in netxen_nic_probe()
1554 val = NXRD32(adapter, NX_CRB_DEV_REF_COUNT); in netxen_nic_probe()
1556 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, 0); in netxen_nic_probe()
1557 adapter->need_fw_reset = 1; in netxen_nic_probe()
1561 err = netxen_start_firmware(adapter); in netxen_nic_probe()
1568 adapter->physical_port = adapter->portnum; in netxen_nic_probe()
1569 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_nic_probe()
1570 i = NXRD32(adapter, CRB_V2P(adapter->portnum)); in netxen_nic_probe()
1572 adapter->physical_port = i; in netxen_nic_probe()
1575 netxen_nic_clear_stats(adapter); in netxen_nic_probe()
1577 err = netxen_setup_intr(adapter); in netxen_nic_probe()
1580 dev_err(&adapter->pdev->dev, in netxen_nic_probe()
1585 netxen_read_ula_info(adapter); in netxen_nic_probe()
1587 err = netxen_setup_netdev(adapter, netdev); in netxen_nic_probe()
1591 pci_set_drvdata(pdev, adapter); in netxen_nic_probe()
1593 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY); in netxen_nic_probe()
1595 switch (adapter->ahw.port_type) { in netxen_nic_probe()
1597 dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n", in netxen_nic_probe()
1598 adapter->netdev->name); in netxen_nic_probe()
1601 dev_info(&adapter->pdev->dev, "%s: XGbE port initialized\n", in netxen_nic_probe()
1602 adapter->netdev->name); in netxen_nic_probe()
1606 netxen_create_diag_entries(adapter); in netxen_nic_probe()
1611 netxen_teardown_intr(adapter); in netxen_nic_probe()
1613 netxen_free_dummy_dma(adapter); in netxen_nic_probe()
1616 nx_decr_dev_ref_cnt(adapter); in netxen_nic_probe()
1619 netxen_cleanup_pci_map(adapter); in netxen_nic_probe()
1633 void netxen_cleanup_minidump(struct netxen_adapter *adapter) in netxen_cleanup_minidump() argument
1635 kfree(adapter->mdump.md_template); in netxen_cleanup_minidump()
1636 adapter->mdump.md_template = NULL; in netxen_cleanup_minidump()
1638 if (adapter->mdump.md_capture_buff) { in netxen_cleanup_minidump()
1639 vfree(adapter->mdump.md_capture_buff); in netxen_cleanup_minidump()
1640 adapter->mdump.md_capture_buff = NULL; in netxen_cleanup_minidump()
1646 struct netxen_adapter *adapter; in netxen_nic_remove() local
1649 adapter = pci_get_drvdata(pdev); in netxen_nic_remove()
1650 if (adapter == NULL) in netxen_nic_remove()
1653 netdev = adapter->netdev; in netxen_nic_remove()
1655 netxen_cancel_fw_work(adapter); in netxen_nic_remove()
1659 cancel_work_sync(&adapter->tx_timeout_task); in netxen_nic_remove()
1661 netxen_free_ip_list(adapter, false); in netxen_nic_remove()
1662 netxen_nic_detach(adapter); in netxen_nic_remove()
1664 nx_decr_dev_ref_cnt(adapter); in netxen_nic_remove()
1666 if (adapter->portnum == 0) in netxen_nic_remove()
1667 netxen_free_dummy_dma(adapter); in netxen_nic_remove()
1669 clear_bit(__NX_RESETTING, &adapter->state); in netxen_nic_remove()
1671 netxen_teardown_intr(adapter); in netxen_nic_remove()
1672 netxen_set_interrupt_mode(adapter, 0); in netxen_nic_remove()
1673 netxen_remove_diag_entries(adapter); in netxen_nic_remove()
1675 netxen_cleanup_pci_map(adapter); in netxen_nic_remove()
1677 netxen_release_firmware(adapter); in netxen_nic_remove()
1680 netxen_cleanup_minidump(adapter); in netxen_nic_remove()
1690 static void netxen_nic_detach_func(struct netxen_adapter *adapter) in netxen_nic_detach_func() argument
1692 struct net_device *netdev = adapter->netdev; in netxen_nic_detach_func()
1696 netxen_cancel_fw_work(adapter); in netxen_nic_detach_func()
1699 netxen_nic_down(adapter, netdev); in netxen_nic_detach_func()
1701 cancel_work_sync(&adapter->tx_timeout_task); in netxen_nic_detach_func()
1703 netxen_nic_detach(adapter); in netxen_nic_detach_func()
1705 if (adapter->portnum == 0) in netxen_nic_detach_func()
1706 netxen_free_dummy_dma(adapter); in netxen_nic_detach_func()
1708 nx_decr_dev_ref_cnt(adapter); in netxen_nic_detach_func()
1710 clear_bit(__NX_RESETTING, &adapter->state); in netxen_nic_detach_func()
1715 struct netxen_adapter *adapter = pci_get_drvdata(pdev); in netxen_nic_attach_func() local
1716 struct net_device *netdev = adapter->netdev; in netxen_nic_attach_func()
1727 adapter->ahw.crb_win = -1; in netxen_nic_attach_func()
1728 adapter->ahw.ocm_win = -1; in netxen_nic_attach_func()
1730 err = netxen_start_firmware(adapter); in netxen_nic_attach_func()
1737 err = netxen_nic_attach(adapter); in netxen_nic_attach_func()
1741 err = netxen_nic_up(adapter, netdev); in netxen_nic_attach_func()
1749 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY); in netxen_nic_attach_func()
1753 netxen_nic_detach(adapter); in netxen_nic_attach_func()
1755 nx_decr_dev_ref_cnt(adapter); in netxen_nic_attach_func()
1762 struct netxen_adapter *adapter = pci_get_drvdata(pdev); in netxen_io_error_detected() local
1767 if (nx_dev_request_aer(adapter)) in netxen_io_error_detected()
1770 netxen_nic_detach_func(adapter); in netxen_io_error_detected()
1793 struct netxen_adapter *adapter = pci_get_drvdata(pdev); in netxen_nic_shutdown() local
1795 netxen_nic_detach_func(adapter); in netxen_nic_shutdown()
1800 if (netxen_nic_wol_supported(adapter)) { in netxen_nic_shutdown()
1812 struct netxen_adapter *adapter = pci_get_drvdata(pdev); in netxen_nic_suspend() local
1815 netxen_nic_detach_func(adapter); in netxen_nic_suspend()
1821 if (netxen_nic_wol_supported(adapter)) { in netxen_nic_suspend()
1841 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_open() local
1844 if (adapter->driver_mismatch) in netxen_nic_open()
1847 err = netxen_nic_attach(adapter); in netxen_nic_open()
1851 err = __netxen_nic_up(adapter, netdev); in netxen_nic_open()
1860 netxen_nic_detach(adapter); in netxen_nic_open()
1869 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_close() local
1871 __netxen_nic_down(adapter, netdev); in netxen_nic_close()
2058 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_xmit_frame() local
2059 struct nx_host_tx_ring *tx_ring = adapter->tx_ring; in netxen_nic_xmit_frame()
2104 pdev = adapter->pdev; in netxen_nic_xmit_frame()
2116 netxen_set_tx_port(first_desc, adapter->portnum); in netxen_nic_xmit_frame()
2153 adapter->stats.txbytes += skb->len; in netxen_nic_xmit_frame()
2154 adapter->stats.xmitcalled++; in netxen_nic_xmit_frame()
2156 netxen_nic_update_cmd_producer(adapter, tx_ring); in netxen_nic_xmit_frame()
2161 adapter->stats.txdropped++; in netxen_nic_xmit_frame()
2166 static int netxen_nic_check_temp(struct netxen_adapter *adapter) in netxen_nic_check_temp() argument
2168 struct net_device *netdev = adapter->netdev; in netxen_nic_check_temp()
2172 temp = NXRD32(adapter, CRB_TEMP_STATE); in netxen_nic_check_temp()
2184 if (adapter->temp == NX_TEMP_NORMAL) { in netxen_nic_check_temp()
2192 if (adapter->temp == NX_TEMP_WARN) { in netxen_nic_check_temp()
2199 adapter->temp = temp_state; in netxen_nic_check_temp()
2203 void netxen_advert_link_change(struct netxen_adapter *adapter, int linkup) in netxen_advert_link_change() argument
2205 struct net_device *netdev = adapter->netdev; in netxen_advert_link_change()
2207 if (adapter->ahw.linkup && !linkup) { in netxen_advert_link_change()
2210 adapter->ahw.linkup = 0; in netxen_advert_link_change()
2215 adapter->link_changed = !adapter->has_link_events; in netxen_advert_link_change()
2216 } else if (!adapter->ahw.linkup && linkup) { in netxen_advert_link_change()
2219 adapter->ahw.linkup = 1; in netxen_advert_link_change()
2224 adapter->link_changed = !adapter->has_link_events; in netxen_advert_link_change()
2228 static void netxen_nic_handle_phy_intr(struct netxen_adapter *adapter) in netxen_nic_handle_phy_intr() argument
2232 port = adapter->physical_port; in netxen_nic_handle_phy_intr()
2234 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_nic_handle_phy_intr()
2235 val = NXRD32(adapter, CRB_XG_STATE_P3); in netxen_nic_handle_phy_intr()
2236 val = XG_LINK_STATE_P3(adapter->ahw.pci_func, val); in netxen_nic_handle_phy_intr()
2239 val = NXRD32(adapter, CRB_XG_STATE); in netxen_nic_handle_phy_intr()
2244 netxen_advert_link_change(adapter, linkup); in netxen_nic_handle_phy_intr()
2249 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_tx_timeout() local
2251 if (test_bit(__NX_RESETTING, &adapter->state)) in netxen_tx_timeout()
2255 schedule_work(&adapter->tx_timeout_task); in netxen_tx_timeout()
2260 struct netxen_adapter *adapter = in netxen_tx_timeout_task() local
2263 if (!netif_running(adapter->netdev)) in netxen_tx_timeout_task()
2266 if (test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_tx_timeout_task()
2269 if (++adapter->tx_timeo_cnt >= NX_MAX_TX_TIMEOUTS) in netxen_tx_timeout_task()
2273 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { in netxen_tx_timeout_task()
2275 netxen_napi_disable(adapter); in netxen_tx_timeout_task()
2277 netxen_napi_enable(adapter); in netxen_tx_timeout_task()
2279 netif_wake_queue(adapter->netdev); in netxen_tx_timeout_task()
2281 clear_bit(__NX_RESETTING, &adapter->state); in netxen_tx_timeout_task()
2283 clear_bit(__NX_RESETTING, &adapter->state); in netxen_tx_timeout_task()
2284 if (netxen_nic_reset_context(adapter)) { in netxen_tx_timeout_task()
2289 netif_trans_update(adapter->netdev); in netxen_tx_timeout_task()
2294 adapter->need_fw_reset = 1; in netxen_tx_timeout_task()
2295 clear_bit(__NX_RESETTING, &adapter->state); in netxen_tx_timeout_task()
2301 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_get_stats() local
2303 stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts; in netxen_nic_get_stats()
2304 stats->tx_packets = adapter->stats.xmitfinished; in netxen_nic_get_stats()
2305 stats->rx_bytes = adapter->stats.rxbytes; in netxen_nic_get_stats()
2306 stats->tx_bytes = adapter->stats.txbytes; in netxen_nic_get_stats()
2307 stats->rx_dropped = adapter->stats.rxdropped; in netxen_nic_get_stats()
2308 stats->tx_dropped = adapter->stats.txdropped; in netxen_nic_get_stats()
2316 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_intr() local
2319 status = readl(adapter->isr_int_vec); in netxen_intr()
2321 if (!(status & adapter->int_vec_bit)) in netxen_intr()
2324 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { in netxen_intr()
2326 status = readl(adapter->crb_int_state_reg); in netxen_intr()
2333 our_int = readl(adapter->crb_int_state_reg); in netxen_intr()
2336 if (!test_and_clear_bit((7 + adapter->portnum), &our_int)) in netxen_intr()
2340 writel((our_int & 0xffffffff), adapter->crb_int_state_reg); in netxen_intr()
2346 writel(0xffffffff, adapter->tgt_status_reg); in netxen_intr()
2348 readl(adapter->isr_int_vec); in netxen_intr()
2349 readl(adapter->isr_int_vec); in netxen_intr()
2359 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_msi_intr() local
2362 writel(0xffffffff, adapter->tgt_status_reg); in netxen_msi_intr()
2381 struct netxen_adapter *adapter = sds_ring->adapter; in netxen_nic_poll() local
2386 tx_complete = netxen_process_cmd_ring(adapter); in netxen_nic_poll()
2395 if (test_bit(__NX_DEV_UP, &adapter->state)) in netxen_nic_poll()
2407 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_nic_poll_controller() local
2408 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx; in netxen_nic_poll_controller()
2410 disable_irq(adapter->irq); in netxen_nic_poll_controller()
2411 for (ring = 0; ring < adapter->max_sds_rings; ring++) { in netxen_nic_poll_controller()
2413 netxen_intr(adapter->irq, sds_ring); in netxen_nic_poll_controller()
2415 enable_irq(adapter->irq); in netxen_nic_poll_controller()
2420 nx_incr_dev_ref_cnt(struct netxen_adapter *adapter) in nx_incr_dev_ref_cnt() argument
2423 if (netxen_api_lock(adapter)) in nx_incr_dev_ref_cnt()
2426 count = NXRD32(adapter, NX_CRB_DEV_REF_COUNT); in nx_incr_dev_ref_cnt()
2428 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, ++count); in nx_incr_dev_ref_cnt()
2430 netxen_api_unlock(adapter); in nx_incr_dev_ref_cnt()
2435 nx_decr_dev_ref_cnt(struct netxen_adapter *adapter) in nx_decr_dev_ref_cnt() argument
2438 if (netxen_api_lock(adapter)) in nx_decr_dev_ref_cnt()
2441 count = NXRD32(adapter, NX_CRB_DEV_REF_COUNT); in nx_decr_dev_ref_cnt()
2444 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, --count); in nx_decr_dev_ref_cnt()
2445 state = NXRD32(adapter, NX_CRB_DEV_STATE); in nx_decr_dev_ref_cnt()
2448 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_COLD); in nx_decr_dev_ref_cnt()
2450 netxen_api_unlock(adapter); in nx_decr_dev_ref_cnt()
2455 nx_dev_request_aer(struct netxen_adapter *adapter) in nx_dev_request_aer() argument
2460 if (netxen_api_lock(adapter)) in nx_dev_request_aer()
2463 state = NXRD32(adapter, NX_CRB_DEV_STATE); in nx_dev_request_aer()
2468 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_NEED_AER); in nx_dev_request_aer()
2472 netxen_api_unlock(adapter); in nx_dev_request_aer()
2477 nx_dev_request_reset(struct netxen_adapter *adapter) in nx_dev_request_reset() argument
2482 if (netxen_api_lock(adapter)) in nx_dev_request_reset()
2485 state = NXRD32(adapter, NX_CRB_DEV_STATE); in nx_dev_request_reset()
2490 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_NEED_RESET); in nx_dev_request_reset()
2491 adapter->flags |= NETXEN_FW_RESET_OWNER; in nx_dev_request_reset()
2495 netxen_api_unlock(adapter); in nx_dev_request_reset()
2501 netxen_can_start_firmware(struct netxen_adapter *adapter) in netxen_can_start_firmware() argument
2506 if (netxen_api_lock(adapter)) { in netxen_can_start_firmware()
2507 nx_incr_dev_ref_cnt(adapter); in netxen_can_start_firmware()
2511 count = NXRD32(adapter, NX_CRB_DEV_REF_COUNT); in netxen_can_start_firmware()
2518 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_INITALIZING); in netxen_can_start_firmware()
2521 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, ++count); in netxen_can_start_firmware()
2523 netxen_api_unlock(adapter); in netxen_can_start_firmware()
2529 netxen_schedule_work(struct netxen_adapter *adapter, in netxen_schedule_work() argument
2532 INIT_DELAYED_WORK(&adapter->fw_work, func); in netxen_schedule_work()
2533 schedule_delayed_work(&adapter->fw_work, delay); in netxen_schedule_work()
2537 netxen_cancel_fw_work(struct netxen_adapter *adapter) in netxen_cancel_fw_work() argument
2539 while (test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_cancel_fw_work()
2542 cancel_delayed_work_sync(&adapter->fw_work); in netxen_cancel_fw_work()
2548 struct netxen_adapter *adapter = container_of(work, in netxen_attach_work() local
2550 struct net_device *netdev = adapter->netdev; in netxen_attach_work()
2554 err = netxen_nic_attach(adapter); in netxen_attach_work()
2558 err = netxen_nic_up(adapter, netdev); in netxen_attach_work()
2560 netxen_nic_detach(adapter); in netxen_attach_work()
2570 adapter->fw_fail_cnt = 0; in netxen_attach_work()
2571 clear_bit(__NX_RESETTING, &adapter->state); in netxen_attach_work()
2572 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY); in netxen_attach_work()
2578 struct netxen_adapter *adapter = container_of(work, in netxen_fwinit_work() local
2582 dev_state = NXRD32(adapter, NX_CRB_DEV_STATE); in netxen_fwinit_work()
2583 if (adapter->flags & NETXEN_FW_RESET_OWNER) { in netxen_fwinit_work()
2584 count = NXRD32(adapter, NX_CRB_DEV_REF_COUNT); in netxen_fwinit_work()
2587 if (adapter->mdump.md_enabled) { in netxen_fwinit_work()
2589 netxen_dump_fw(adapter); in netxen_fwinit_work()
2592 adapter->flags &= ~NETXEN_FW_RESET_OWNER; in netxen_fwinit_work()
2593 if (netxen_api_lock(adapter)) { in netxen_fwinit_work()
2594 clear_bit(__NX_RESETTING, &adapter->state); in netxen_fwinit_work()
2595 NXWR32(adapter, NX_CRB_DEV_STATE, in netxen_fwinit_work()
2599 count = NXRD32(adapter, NX_CRB_DEV_REF_COUNT); in netxen_fwinit_work()
2600 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, --count); in netxen_fwinit_work()
2601 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_COLD); in netxen_fwinit_work()
2603 netxen_api_unlock(adapter); in netxen_fwinit_work()
2610 if (!netxen_start_firmware(adapter)) { in netxen_fwinit_work()
2611 netxen_schedule_work(adapter, netxen_attach_work, 0); in netxen_fwinit_work()
2618 netxen_schedule_work(adapter, in netxen_fwinit_work()
2624 nx_incr_dev_ref_cnt(adapter); in netxen_fwinit_work()
2628 if (netxen_api_lock(adapter)) { in netxen_fwinit_work()
2629 clear_bit(__NX_RESETTING, &adapter->state); in netxen_fwinit_work()
2632 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_FAILED); in netxen_fwinit_work()
2633 netxen_api_unlock(adapter); in netxen_fwinit_work()
2634 dev_err(&adapter->pdev->dev, "%s: Device initialization Failed\n", in netxen_fwinit_work()
2635 adapter->netdev->name); in netxen_fwinit_work()
2637 clear_bit(__NX_RESETTING, &adapter->state); in netxen_fwinit_work()
2643 struct netxen_adapter *adapter = container_of(work, in netxen_detach_work() local
2645 struct net_device *netdev = adapter->netdev; in netxen_detach_work()
2651 netxen_nic_down(adapter, netdev); in netxen_detach_work()
2654 netxen_nic_detach(adapter); in netxen_detach_work()
2657 status = NXRD32(adapter, NETXEN_PEG_HALT_STATUS1); in netxen_detach_work()
2662 if (adapter->temp == NX_TEMP_PANIC) in netxen_detach_work()
2665 if (!(adapter->flags & NETXEN_FW_RESET_OWNER)) in netxen_detach_work()
2666 ref_cnt = nx_decr_dev_ref_cnt(adapter); in netxen_detach_work()
2673 adapter->fw_wait_cnt = 0; in netxen_detach_work()
2674 netxen_schedule_work(adapter, netxen_fwinit_work, delay); in netxen_detach_work()
2679 clear_bit(__NX_RESETTING, &adapter->state); in netxen_detach_work()
2683 netxen_check_health(struct netxen_adapter *adapter) in netxen_check_health() argument
2687 struct net_device *netdev = adapter->netdev; in netxen_check_health()
2689 state = NXRD32(adapter, NX_CRB_DEV_STATE); in netxen_check_health()
2693 if (netxen_nic_check_temp(adapter)) in netxen_check_health()
2696 if (adapter->need_fw_reset) { in netxen_check_health()
2697 if (nx_dev_request_reset(adapter)) in netxen_check_health()
2708 adapter->need_fw_reset = 1; in netxen_check_health()
2709 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_check_health()
2713 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_check_health()
2716 heartbit = NXRD32(adapter, NETXEN_PEG_ALIVE_COUNTER); in netxen_check_health()
2717 if (heartbit != adapter->heartbit) { in netxen_check_health()
2718 adapter->heartbit = heartbit; in netxen_check_health()
2719 adapter->fw_fail_cnt = 0; in netxen_check_health()
2720 if (adapter->need_fw_reset) in netxen_check_health()
2725 if (++adapter->fw_fail_cnt < FW_FAIL_THRESH) in netxen_check_health()
2728 if (nx_dev_request_reset(adapter)) in netxen_check_health()
2731 clear_bit(__NX_FW_ATTACHED, &adapter->state); in netxen_check_health()
2734 peg_status = NXRD32(adapter, NETXEN_PEG_HALT_STATUS1); in netxen_check_health()
2735 dev_err(&adapter->pdev->dev, "Dumping hw/fw registers\n" in netxen_check_health()
2741 NXRD32(adapter, NETXEN_PEG_HALT_STATUS2), in netxen_check_health()
2742 NXRD32(adapter, NETXEN_CRB_PEG_NET_0 + 0x3c), in netxen_check_health()
2743 NXRD32(adapter, NETXEN_CRB_PEG_NET_1 + 0x3c), in netxen_check_health()
2744 NXRD32(adapter, NETXEN_CRB_PEG_NET_2 + 0x3c), in netxen_check_health()
2745 NXRD32(adapter, NETXEN_CRB_PEG_NET_3 + 0x3c), in netxen_check_health()
2746 NXRD32(adapter, NETXEN_CRB_PEG_NET_4 + 0x3c)); in netxen_check_health()
2748 dev_err(&adapter->pdev->dev, in netxen_check_health()
2753 !test_and_set_bit(__NX_RESETTING, &adapter->state)) in netxen_check_health()
2754 netxen_schedule_work(adapter, netxen_detach_work, 0); in netxen_check_health()
2761 struct netxen_adapter *adapter = container_of(work, in netxen_fw_poll_work() local
2764 if (test_bit(__NX_RESETTING, &adapter->state)) in netxen_fw_poll_work()
2767 if (test_bit(__NX_DEV_UP, &adapter->state) && in netxen_fw_poll_work()
2768 !(adapter->capabilities & NX_FW_CAPABILITY_LINK_NOTIFICATION)) { in netxen_fw_poll_work()
2769 if (!adapter->has_link_events) { in netxen_fw_poll_work()
2771 netxen_nic_handle_phy_intr(adapter); in netxen_fw_poll_work()
2773 if (adapter->link_changed) in netxen_fw_poll_work()
2774 netxen_nic_set_link_parameters(adapter); in netxen_fw_poll_work()
2778 if (netxen_check_health(adapter)) in netxen_fw_poll_work()
2782 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY); in netxen_fw_poll_work()
2790 struct netxen_adapter *adapter = netdev_priv(net); in netxen_store_bridged_mode() local
2794 if (!(adapter->capabilities & NX_FW_CAPABILITY_BDG)) in netxen_store_bridged_mode()
2797 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in netxen_store_bridged_mode()
2803 if (!netxen_config_bridged_mode(adapter, !!new)) in netxen_store_bridged_mode()
2815 struct netxen_adapter *adapter; in netxen_show_bridged_mode() local
2818 adapter = netdev_priv(net); in netxen_show_bridged_mode()
2820 if (adapter->capabilities & NX_FW_CAPABILITY_BDG) in netxen_show_bridged_mode()
2821 bridged_mode = !!(adapter->flags & NETXEN_NIC_BRIDGE_ENABLED); in netxen_show_bridged_mode()
2836 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_store_diag_mode() local
2842 if (!!new != !!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)) in netxen_store_diag_mode()
2843 adapter->flags ^= NETXEN_NIC_DIAG_ENABLED; in netxen_store_diag_mode()
2852 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_show_diag_mode() local
2855 !!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)); in netxen_show_diag_mode()
2865 netxen_sysfs_validate_crb(struct netxen_adapter *adapter, in netxen_sysfs_validate_crb() argument
2870 if (!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)) in netxen_sysfs_validate_crb()
2874 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_sysfs_validate_crb()
2896 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_sysfs_read_crb() local
2901 ret = netxen_sysfs_validate_crb(adapter, offset, size); in netxen_sysfs_read_crb()
2905 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) && in netxen_sysfs_read_crb()
2908 netxen_pci_camqm_read_2M(adapter, offset, &qmdata); in netxen_sysfs_read_crb()
2911 data = NXRD32(adapter, offset); in netxen_sysfs_read_crb()
2924 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_sysfs_write_crb() local
2929 ret = netxen_sysfs_validate_crb(adapter, offset, size); in netxen_sysfs_write_crb()
2933 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) && in netxen_sysfs_write_crb()
2937 netxen_pci_camqm_write_2M(adapter, offset, qmdata); in netxen_sysfs_write_crb()
2940 NXWR32(adapter, offset, data); in netxen_sysfs_write_crb()
2947 netxen_sysfs_validate_mem(struct netxen_adapter *adapter, in netxen_sysfs_validate_mem() argument
2950 if (!(adapter->flags & NETXEN_NIC_DIAG_ENABLED)) in netxen_sysfs_validate_mem()
2965 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_sysfs_read_mem() local
2969 ret = netxen_sysfs_validate_mem(adapter, offset, size); in netxen_sysfs_read_mem()
2973 if (adapter->pci_mem_read(adapter, offset, &data)) in netxen_sysfs_read_mem()
2986 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_sysfs_write_mem() local
2990 ret = netxen_sysfs_validate_mem(adapter, offset, size); in netxen_sysfs_write_mem()
2996 if (adapter->pci_mem_write(adapter, offset, data)) in netxen_sysfs_write_mem()
3023 struct netxen_adapter *adapter = dev_get_drvdata(dev); in netxen_sysfs_read_dimm() local
3024 struct net_device *netdev = adapter->netdev; in netxen_sysfs_read_dimm()
3035 val = NXRD32(adapter, NETXEN_DIMM_CAPABILITY); in netxen_sysfs_read_dimm()
3147 netxen_create_sysfs_entries(struct netxen_adapter *adapter) in netxen_create_sysfs_entries() argument
3149 struct device *dev = &adapter->pdev->dev; in netxen_create_sysfs_entries()
3151 if (adapter->capabilities & NX_FW_CAPABILITY_BDG) { in netxen_create_sysfs_entries()
3161 netxen_remove_sysfs_entries(struct netxen_adapter *adapter) in netxen_remove_sysfs_entries() argument
3163 struct device *dev = &adapter->pdev->dev; in netxen_remove_sysfs_entries()
3165 if (adapter->capabilities & NX_FW_CAPABILITY_BDG) in netxen_remove_sysfs_entries()
3170 netxen_create_diag_entries(struct netxen_adapter *adapter) in netxen_create_diag_entries() argument
3172 struct pci_dev *pdev = adapter->pdev; in netxen_create_diag_entries()
3188 netxen_remove_diag_entries(struct netxen_adapter *adapter) in netxen_remove_diag_entries() argument
3190 struct pci_dev *pdev = adapter->pdev; in netxen_remove_diag_entries()
3204 netxen_destip_supported(struct netxen_adapter *adapter) in netxen_destip_supported() argument
3206 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) in netxen_destip_supported()
3209 if (adapter->ahw.cut_through) in netxen_destip_supported()
3216 netxen_free_ip_list(struct netxen_adapter *adapter, bool master) in netxen_free_ip_list() argument
3220 list_for_each_entry_safe(cur, tmp_cur, &adapter->ip_list, list) { in netxen_free_ip_list()
3223 netxen_config_ipaddr(adapter, cur->ip_addr, in netxen_free_ip_list()
3229 netxen_config_ipaddr(adapter, cur->ip_addr, NX_IP_DOWN); in netxen_free_ip_list()
3237 netxen_list_config_ip(struct netxen_adapter *adapter, in netxen_list_config_ip() argument
3252 list_for_each(head, &adapter->ip_list) { in netxen_list_config_ip()
3266 list_add_tail(&cur->list, &adapter->ip_list); in netxen_list_config_ip()
3267 netxen_config_ipaddr(adapter, ifa->ifa_address, NX_IP_UP); in netxen_list_config_ip()
3272 &adapter->ip_list, list) { in netxen_list_config_ip()
3276 netxen_config_ipaddr(adapter, ifa->ifa_address, in netxen_list_config_ip()
3288 netxen_config_indev_addr(struct netxen_adapter *adapter, in netxen_config_indev_addr() argument
3293 if (!netxen_destip_supported(adapter)) in netxen_config_indev_addr()
3303 netxen_list_config_ip(adapter, ifa, NX_IP_UP); in netxen_config_indev_addr()
3306 netxen_list_config_ip(adapter, ifa, NX_IP_DOWN); in netxen_config_indev_addr()
3320 struct netxen_adapter *adapter = netdev_priv(netdev); in netxen_restore_indev_addr() local
3325 netxen_config_indev_addr(adapter, netdev, event); in netxen_restore_indev_addr()
3327 list_for_each_entry_safe(pos, tmp_pos, &adapter->ip_list, list) { in netxen_restore_indev_addr()
3328 netxen_config_ipaddr(adapter, pos->ip_addr, ip_event); in netxen_restore_indev_addr()
3335 struct netxen_adapter *adapter; in netxen_config_checkdev() local
3339 adapter = netdev_priv(dev); in netxen_config_checkdev()
3340 if (!adapter) in netxen_config_checkdev()
3342 if (!netxen_destip_supported(adapter)) in netxen_config_checkdev()
3344 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) in netxen_config_checkdev()
3358 struct netxen_adapter *adapter = netdev_priv(dev); in netxen_config_master() local
3370 netxen_config_indev_addr(adapter, master, event); in netxen_config_master()
3374 netxen_config_indev_addr(adapter, slave, event); in netxen_config_master()
3383 netxen_free_ip_list(adapter, true); in netxen_config_master()
3389 struct netxen_adapter *adapter; in netxen_netdev_event() local
3409 adapter = netdev_priv(slave); in netxen_netdev_event()
3410 netxen_config_indev_addr(adapter, in netxen_netdev_event()
3417 adapter = netdev_priv(dev); in netxen_netdev_event()
3421 netxen_config_indev_addr(adapter, orig_dev, event); in netxen_netdev_event()
3432 struct netxen_adapter *adapter; in netxen_inetaddr_event() local
3454 adapter = netdev_priv(slave); in netxen_inetaddr_event()
3455 netxen_list_config_ip(adapter, ifa, ip_event); in netxen_inetaddr_event()
3461 adapter = netdev_priv(dev); in netxen_inetaddr_event()
3462 netxen_list_config_ip(adapter, ifa, ip_event); in netxen_inetaddr_event()
3481 netxen_free_ip_list(struct netxen_adapter *adapter, bool master) in netxen_free_ip_list() argument