• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/net/netxen/

Lines Matching refs:adapter

76 static void netxen_schedule_work(struct netxen_adapter *adapter,
78 static void netxen_cancel_fw_work(struct netxen_adapter *adapter);
84 static void netxen_create_sysfs_entries(struct netxen_adapter *adapter);
85 static void netxen_remove_sysfs_entries(struct netxen_adapter *adapter);
86 static void netxen_create_diag_entries(struct netxen_adapter *adapter);
87 static void netxen_remove_diag_entries(struct netxen_adapter *adapter);
89 static int nx_dev_request_aer(struct netxen_adapter *adapter);
90 static int nx_decr_dev_ref_cnt(struct netxen_adapter *adapter);
91 static int netxen_can_start_firmware(struct netxen_adapter *adapter);
124 netxen_nic_update_cmd_producer(struct netxen_adapter *adapter,
127 NXWRIO(adapter, tx_ring->crb_cmd_producer, tx_ring->producer);
130 netif_stop_queue(adapter->netdev);
141 netxen_nic_update_cmd_consumer(struct netxen_adapter *adapter,
144 NXWRIO(adapter, tx_ring->crb_cmd_consumer, tx_ring->sw_consumer);
158 struct netxen_adapter *adapter = sds_ring->adapter;
160 NXWRIO(adapter, sds_ring->crb_intr_mask, 0);
165 struct netxen_adapter *adapter = sds_ring->adapter;
167 NXWRIO(adapter, sds_ring->crb_intr_mask, 0x1);
169 if (!NETXEN_IS_MSI_FAMILY(adapter))
170 NXWRIO(adapter, adapter->tgt_mask_reg, 0xfbff);
193 netxen_napi_add(struct netxen_adapter *adapter, struct net_device *netdev)
197 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
199 if (netxen_alloc_sds_rings(recv_ctx, adapter->max_sds_rings))
202 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
212 netxen_napi_del(struct netxen_adapter *adapter)
216 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
218 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
223 netxen_free_sds_rings(&adapter->recv_ctx);
227 netxen_napi_enable(struct netxen_adapter *adapter)
231 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
233 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
241 netxen_napi_disable(struct netxen_adapter *adapter)
245 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
247 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
255 static int nx_set_dma_mask(struct netxen_adapter *adapter)
257 struct pci_dev *pdev = adapter->pdev;
260 adapter->pci_using_dac = 0;
265 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
276 adapter->pci_using_dac = 1;
285 nx_update_dma_mask(struct netxen_adapter *adapter)
289 struct pci_dev *pdev = adapter->pdev;
293 shift = NXRD32(adapter, CRB_DMA_SHIFT);
297 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) && (shift > 9))
299 else if ((adapter->ahw.revision_id == NX_P2_C1) && (shift <= 4))
312 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
330 netxen_check_hw_init(struct netxen_adapter *adapter, int first_boot)
336 NXWR32(adapter, NETXEN_CAM_RAM(0x1fc), NETXEN_BDINFO_MAGIC);
338 if (!NX_IS_REVISION_P2(adapter->ahw.revision_id))
341 first_boot = NXRD32(adapter, NETXEN_PCIE_REG(0x4));
344 NXWR32(adapter, NETXEN_PCIE_REG(0x4), first_boot);
345 NXRD32(adapter, NETXEN_PCIE_REG(0x4));
349 first_boot = NXRD32(adapter, NETXEN_ROMUSB_GLB_SW_RESET);
352 NXWR32(adapter, NETXEN_CAM_RAM(0x1fc), 0);
357 val = NXRD32(adapter, NETXEN_ROMUSB_GLB_PEGTUNE_DONE);
358 NXWR32(adapter, NETXEN_ROMUSB_GLB_PEGTUNE_DONE, val | 0x1);
362 val = NXRD32(adapter, NETXEN_CAM_RAM(0x1fc));
372 static void netxen_set_port_mode(struct netxen_adapter *adapter)
376 val = adapter->ahw.board_type;
381 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data);
384 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data);
387 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data);
390 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data);
393 NXWR32(adapter, NETXEN_PORT_MODE_ADDR, data);
402 NXWR32(adapter, NETXEN_WOL_PORT_MODE, wol_port_mode);
422 static void netxen_init_msix_entries(struct netxen_adapter *adapter, int count)
427 adapter->msix_entries[i].entry = i;
431 netxen_read_mac_addr(struct netxen_adapter *adapter)
436 struct net_device *netdev = adapter->netdev;
437 struct pci_dev *pdev = adapter->pdev;
439 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
440 if (netxen_p3_get_mac_addr(adapter, &mac_addr) != 0)
443 if (netxen_get_flash_mac_addr(adapter, &mac_addr) != 0)
452 memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len);
464 struct netxen_adapter *adapter = netdev_priv(netdev);
472 netxen_napi_disable(adapter);
475 memcpy(adapter->mac_addr, addr->sa_data, netdev->addr_len);
477 adapter->macaddr_set(adapter, addr->sa_data);
481 netxen_napi_enable(adapter);
488 struct netxen_adapter *adapter = netdev_priv(dev);
490 adapter->set_multi(dev);
509 netxen_setup_intr(struct netxen_adapter *adapter)
512 struct pci_dev *pdev = adapter->pdev;
515 if (adapter->rss_supported) {
521 adapter->max_sds_rings = 1;
523 adapter->flags &= ~(NETXEN_NIC_MSI_ENABLED | NETXEN_NIC_MSIX_ENABLED);
525 if (adapter->ahw.revision_id >= NX_P3_B0)
526 legacy_intrp = &legacy_intr[adapter->ahw.pci_func];
530 adapter->int_vec_bit = legacy_intrp->int_vec_bit;
531 adapter->tgt_status_reg = netxen_get_ioaddr(adapter,
533 adapter->tgt_mask_reg = netxen_get_ioaddr(adapter,
535 adapter->pci_int_reg = netxen_get_ioaddr(adapter,
537 adapter->isr_int_vec = netxen_get_ioaddr(adapter, ISR_INT_VECTOR);
539 if (adapter->ahw.revision_id >= NX_P3_B1)
540 adapter->crb_int_state_reg = netxen_get_ioaddr(adapter,
543 adapter->crb_int_state_reg = netxen_get_ioaddr(adapter,
548 if (adapter->msix_supported) {
550 netxen_init_msix_entries(adapter, num_msix);
551 err = pci_enable_msix(pdev, adapter->msix_entries, num_msix);
553 adapter->flags |= NETXEN_NIC_MSIX_ENABLED;
556 if (adapter->rss_supported)
557 adapter->max_sds_rings = num_msix;
570 adapter->flags |= NETXEN_NIC_MSI_ENABLED;
571 adapter->tgt_status_reg = netxen_get_ioaddr(adapter,
572 msi_tgt_status[adapter->ahw.pci_func]);
574 adapter->msix_entries[0].vector = pdev->irq;
579 adapter->msix_entries[0].vector = pdev->irq;
583 netxen_teardown_intr(struct netxen_adapter *adapter)
585 if (adapter->flags & NETXEN_NIC_MSIX_ENABLED)
586 pci_disable_msix(adapter->pdev);
587 if (adapter->flags & NETXEN_NIC_MSI_ENABLED)
588 pci_disable_msi(adapter->pdev);
592 netxen_cleanup_pci_map(struct netxen_adapter *adapter)
594 if (adapter->ahw.db_base != NULL)
595 iounmap(adapter->ahw.db_base);
596 if (adapter->ahw.pci_base0 != NULL)
597 iounmap(adapter->ahw.pci_base0);
598 if (adapter->ahw.pci_base1 != NULL)
599 iounmap(adapter->ahw.pci_base1);
600 if (adapter->ahw.pci_base2 != NULL)
601 iounmap(adapter->ahw.pci_base2);
605 netxen_setup_pci_map(struct netxen_adapter *adapter)
612 struct pci_dev *pdev = adapter->pdev;
613 int pci_func = adapter->ahw.pci_func;
614 struct netxen_hardware_context *ahw = &adapter->ahw;
622 adapter->ahw.crb_win = -1;
623 adapter->ahw.ocm_win = -1;
669 netxen_setup_hwops(adapter);
673 if (NX_IS_REVISION_P3P(adapter->ahw.revision_id)) {
674 adapter->ahw.ocm_win_crb = netxen_get_ioaddr(adapter,
677 } else if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
678 adapter->ahw.ocm_win_crb = netxen_get_ioaddr(adapter,
682 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
704 adapter->ahw.db_base = db_ptr;
705 adapter->ahw.db_len = db_len;
709 netxen_cleanup_pci_map(adapter);
714 netxen_check_options(struct netxen_adapter *adapter)
721 struct pci_dev *pdev = adapter->pdev;
723 adapter->driver_mismatch = 0;
728 if (netxen_rom_fast_read(adapter, offset, &val) == -1) {
730 adapter->driver_mismatch = 1;
737 fw_major = NXRD32(adapter, NETXEN_FW_VERSION_MAJOR);
738 fw_minor = NXRD32(adapter, NETXEN_FW_VERSION_MINOR);
739 fw_build = NXRD32(adapter, NETXEN_FW_VERSION_SUB);
741 adapter->fw_version = NETXEN_VERSION_CODE(fw_major, fw_minor, fw_build);
743 if (adapter->portnum == 0) {
744 get_brd_name_by_type(adapter->ahw.board_type, brd_name);
748 brd_name, serial_num, adapter->ahw.revision_id);
751 if (adapter->fw_version < NETXEN_VERSION_CODE(3, 4, 216)) {
752 adapter->driver_mismatch = 1;
758 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
759 i = NXRD32(adapter, NETXEN_SRE_MISC);
760 adapter->ahw.cut_through = (i & 0x8000) ? 1 : 0;
765 adapter->ahw.cut_through ? "cut-through" : "legacy");
767 if (adapter->fw_version >= NETXEN_VERSION_CODE(4, 0, 222))
768 adapter->capabilities = NXRD32(adapter, CRB_FW_CAPABILITIES_1);
770 adapter->flags &= ~NETXEN_NIC_LRO_ENABLED;
772 if (adapter->ahw.port_type == NETXEN_NIC_XGBE) {
773 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_10G;
774 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_10G;
775 } else if (adapter->ahw.port_type == NETXEN_NIC_GBE) {
776 adapter->num_rxd = DEFAULT_RCV_DESCRIPTORS_1G;
777 adapter->num_jumbo_rxd = MAX_JUMBO_RCV_DESCRIPTORS_1G;
780 adapter->msix_supported = 0;
781 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
782 adapter->msix_supported = !!use_msi_x;
783 adapter->rss_supported = !!use_msi_x;
786 netxen_rom_fast_read(adapter,
791 switch (adapter->ahw.board_type) {
794 adapter->msix_supported = !!use_msi_x;
795 adapter->rss_supported = !!use_msi_x;
803 adapter->num_txd = MAX_CMD_DESCRIPTORS;
805 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
806 adapter->num_lro_rxd = MAX_LRO_RCV_DESCRIPTORS;
807 adapter->max_rds_rings = 3;
809 adapter->num_lro_rxd = 0;
810 adapter->max_rds_rings = 2;
815 netxen_start_firmware(struct netxen_adapter *adapter)
818 struct pci_dev *pdev = adapter->pdev;
821 err = nx_set_dma_mask(adapter);
825 if (!netxen_can_start_firmware(adapter))
828 first_boot = NXRD32(adapter, NETXEN_CAM_RAM(0x1fc));
830 err = netxen_check_hw_init(adapter, first_boot);
836 netxen_request_firmware(adapter);
838 err = netxen_need_fw_reset(adapter);
845 NXWR32(adapter, CRB_CMDPEG_STATE, 0);
846 netxen_pinit_from_rom(adapter);
850 NXWR32(adapter, CRB_DMA_SHIFT, 0x55555555);
851 NXWR32(adapter, NETXEN_PEG_HALT_STATUS1, 0);
852 NXWR32(adapter, NETXEN_PEG_HALT_STATUS2, 0);
854 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
855 netxen_set_port_mode(adapter);
857 err = netxen_load_firmware(adapter);
861 netxen_release_firmware(adapter);
863 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
867 if (adapter->ahw.port_type == NETXEN_NIC_XGBE)
869 NXWR32(adapter, NETXEN_MAC_ADDR_CNTL_REG, val);
873 err = netxen_init_dummy_dma(adapter);
883 NXWR32(adapter, CRB_DRIVER_VERSION, val);
887 err = netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE);
889 netxen_free_dummy_dma(adapter);
893 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_READY);
895 nx_update_dma_mask(adapter);
897 netxen_check_options(adapter);
899 adapter->need_fw_reset = 0;
904 netxen_release_firmware(adapter);
909 netxen_nic_request_irq(struct netxen_adapter *adapter)
916 struct net_device *netdev = adapter->netdev;
917 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
919 if (adapter->flags & NETXEN_NIC_MSIX_ENABLED)
921 else if (adapter->flags & NETXEN_NIC_MSI_ENABLED)
927 adapter->irq = netdev->irq;
929 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
942 netxen_nic_free_irq(struct netxen_adapter *adapter)
947 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
949 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
956 netxen_nic_init_coalesce_defaults(struct netxen_adapter *adapter)
958 adapter->coal.flags = NETXEN_NIC_INTR_DEFAULT;
959 adapter->coal.normal.data.rx_time_us =
961 adapter->coal.normal.data.rx_packets =
963 adapter->coal.normal.data.tx_time_us =
965 adapter->coal.normal.data.tx_packets =
971 __netxen_nic_up(struct netxen_adapter *adapter, struct net_device *netdev)
975 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC)
978 err = adapter->init_port(adapter, adapter->physical_port);
981 netxen_nic_driver_name, adapter->portnum);
984 if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
985 adapter->macaddr_set(adapter, adapter->mac_addr);
987 adapter->set_multi(netdev);
988 adapter->set_mtu(adapter, netdev->mtu);
990 adapter->ahw.linkup = 0;
992 if (adapter->max_sds_rings > 1)
993 netxen_config_rss(adapter, 1);
995 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
996 netxen_config_intr_coalesce(adapter);
998 if (adapter->capabilities & NX_FW_CAPABILITY_HW_LRO)
999 netxen_config_hw_lro(adapter, NETXEN_NIC_LRO_ENABLED);
1001 netxen_napi_enable(adapter);
1003 if (adapter->capabilities & NX_FW_CAPABILITY_LINK_NOTIFICATION)
1004 netxen_linkevent_request(adapter, 1);
1006 netxen_nic_set_link_parameters(adapter);
1008 set_bit(__NX_DEV_UP, &adapter->state);
1015 netxen_nic_up(struct netxen_adapter *adapter, struct net_device *netdev)
1021 err = __netxen_nic_up(adapter, netdev);
1029 __netxen_nic_down(struct netxen_adapter *adapter, struct net_device *netdev)
1031 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC)
1034 if (!test_and_clear_bit(__NX_DEV_UP, &adapter->state))
1038 spin_lock(&adapter->tx_clean_lock);
1042 if (adapter->stop_port)
1043 adapter->stop_port(adapter);
1045 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
1046 netxen_p3_free_mac_list(adapter);
1048 adapter->set_promisc(adapter, NETXEN_NIU_NON_PROMISC_MODE);
1050 netxen_napi_disable(adapter);
1052 netxen_release_tx_buffers(adapter);
1053 spin_unlock(&adapter->tx_clean_lock);
1059 netxen_nic_down(struct netxen_adapter *adapter, struct net_device *netdev)
1063 __netxen_nic_down(adapter, netdev);
1069 netxen_nic_attach(struct netxen_adapter *adapter)
1071 struct net_device *netdev = adapter->netdev;
1072 struct pci_dev *pdev = adapter->pdev;
1077 if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC)
1080 err = netxen_init_firmware(adapter);
1084 err = netxen_napi_add(adapter, netdev);
1088 err = netxen_alloc_sw_resources(adapter);
1095 err = netxen_alloc_hw_resources(adapter);
1102 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
1103 tx_ring = adapter->tx_ring;
1104 tx_ring->crb_cmd_producer = netxen_get_ioaddr(adapter,
1105 crb_cmd_producer[adapter->portnum]);
1106 tx_ring->crb_cmd_consumer = netxen_get_ioaddr(adapter,
1107 crb_cmd_consumer[adapter->portnum]);
1112 netxen_nic_update_cmd_producer(adapter, tx_ring);
1113 netxen_nic_update_cmd_consumer(adapter, tx_ring);
1116 for (ring = 0; ring < adapter->max_rds_rings; ring++) {
1117 rds_ring = &adapter->recv_ctx.rds_rings[ring];
1118 netxen_post_rx_buffers(adapter, ring, rds_ring);
1121 err = netxen_nic_request_irq(adapter);
1128 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
1129 netxen_nic_init_coalesce_defaults(adapter);
1131 netxen_create_sysfs_entries(adapter);
1133 adapter->is_up = NETXEN_ADAPTER_UP_MAGIC;
1137 netxen_release_rx_buffers(adapter);
1138 netxen_free_hw_resources(adapter);
1140 netxen_free_sw_resources(adapter);
1145 netxen_nic_detach(struct netxen_adapter *adapter)
1147 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC)
1150 netxen_remove_sysfs_entries(adapter);
1152 netxen_free_hw_resources(adapter);
1153 netxen_release_rx_buffers(adapter);
1154 netxen_nic_free_irq(adapter);
1155 netxen_napi_del(adapter);
1156 netxen_free_sw_resources(adapter);
1158 adapter->is_up = 0;
1162 netxen_nic_reset_context(struct netxen_adapter *adapter)
1165 struct net_device *netdev = adapter->netdev;
1167 if (test_and_set_bit(__NX_RESETTING, &adapter->state))
1170 if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) {
1175 __netxen_nic_down(adapter, netdev);
1177 netxen_nic_detach(adapter);
1180 err = netxen_nic_attach(adapter);
1182 err = __netxen_nic_up(adapter, netdev);
1192 clear_bit(__NX_RESETTING, &adapter->state);
1197 netxen_setup_netdev(struct netxen_adapter *adapter,
1201 struct pci_dev *pdev = adapter->pdev;
1203 adapter->rx_csum = 1;
1204 adapter->mc_enabled = 0;
1205 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
1206 adapter->max_mc_count = 38;
1208 adapter->max_mc_count = 16;
1221 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
1226 if (adapter->pci_using_dac) {
1231 if (adapter->capabilities & NX_FW_CAPABILITY_FVLANTX)
1234 if (adapter->capabilities & NX_FW_CAPABILITY_HW_LRO)
1237 netdev->irq = adapter->msix_entries[0].vector;
1239 INIT_WORK(&adapter->tx_timeout_task, netxen_tx_timeout_task);
1241 if (netxen_read_mac_addr(adapter))
1260 struct netxen_adapter *adapter = NULL;
1297 adapter = netdev_priv(netdev);
1298 adapter->netdev = netdev;
1299 adapter->pdev = pdev;
1300 adapter->ahw.pci_func = pci_func_id;
1303 adapter->ahw.revision_id = revision_id;
1305 rwlock_init(&adapter->ahw.crb_lock);
1306 spin_lock_init(&adapter->ahw.mem_lock);
1308 spin_lock_init(&adapter->tx_clean_lock);
1309 INIT_LIST_HEAD(&adapter->mac_list);
1311 err = netxen_setup_pci_map(adapter);
1316 adapter->portnum = pci_func_id;
1318 err = netxen_nic_get_board_info(adapter);
1325 switch (adapter->ahw.board_type) {
1329 adapter->portnum = pci_func_id - 2;
1335 err = netxen_start_firmware(adapter);
1342 adapter->physical_port = adapter->portnum;
1343 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
1344 i = NXRD32(adapter, CRB_V2P(adapter->portnum));
1346 adapter->physical_port = i;
1349 netxen_nic_clear_stats(adapter);
1351 netxen_setup_intr(adapter);
1353 err = netxen_setup_netdev(adapter, netdev);
1357 pci_set_drvdata(pdev, adapter);
1359 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY);
1361 switch (adapter->ahw.port_type) {
1363 dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n",
1364 adapter->netdev->name);
1367 dev_info(&adapter->pdev->dev, "%s: XGbE port initialized\n",
1368 adapter->netdev->name);
1372 netxen_create_diag_entries(adapter);
1377 netxen_teardown_intr(adapter);
1379 netxen_free_dummy_dma(adapter);
1382 nx_decr_dev_ref_cnt(adapter);
1385 netxen_cleanup_pci_map(adapter);
1401 struct netxen_adapter *adapter;
1404 adapter = pci_get_drvdata(pdev);
1405 if (adapter == NULL)
1408 netdev = adapter->netdev;
1410 netxen_cancel_fw_work(adapter);
1414 cancel_work_sync(&adapter->tx_timeout_task);
1416 netxen_nic_detach(adapter);
1418 nx_decr_dev_ref_cnt(adapter);
1420 if (adapter->portnum == 0)
1421 netxen_free_dummy_dma(adapter);
1423 clear_bit(__NX_RESETTING, &adapter->state);
1425 netxen_teardown_intr(adapter);
1427 netxen_remove_diag_entries(adapter);
1429 netxen_cleanup_pci_map(adapter);
1431 netxen_release_firmware(adapter);
1443 static void netxen_nic_detach_func(struct netxen_adapter *adapter)
1445 struct net_device *netdev = adapter->netdev;
1449 netxen_cancel_fw_work(adapter);
1452 netxen_nic_down(adapter, netdev);
1454 cancel_work_sync(&adapter->tx_timeout_task);
1456 netxen_nic_detach(adapter);
1458 if (adapter->portnum == 0)
1459 netxen_free_dummy_dma(adapter);
1461 nx_decr_dev_ref_cnt(adapter);
1463 clear_bit(__NX_RESETTING, &adapter->state);
1468 struct netxen_adapter *adapter = pci_get_drvdata(pdev);
1469 struct net_device *netdev = adapter->netdev;
1480 adapter->ahw.crb_win = -1;
1481 adapter->ahw.ocm_win = -1;
1483 err = netxen_start_firmware(adapter);
1490 err = netxen_nic_attach(adapter);
1494 err = netxen_nic_up(adapter, netdev);
1502 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY);
1506 netxen_nic_detach(adapter);
1508 nx_decr_dev_ref_cnt(adapter);
1515 struct netxen_adapter *adapter = pci_get_drvdata(pdev);
1520 if (nx_dev_request_aer(adapter))
1523 netxen_nic_detach_func(adapter);
1546 struct netxen_adapter *adapter = pci_get_drvdata(pdev);
1548 netxen_nic_detach_func(adapter);
1553 if (netxen_nic_wol_supported(adapter)) {
1565 struct netxen_adapter *adapter = pci_get_drvdata(pdev);
1568 netxen_nic_detach_func(adapter);
1574 if (netxen_nic_wol_supported(adapter)) {
1594 struct netxen_adapter *adapter = netdev_priv(netdev);
1597 if (adapter->driver_mismatch)
1600 err = netxen_nic_attach(adapter);
1604 err = __netxen_nic_up(adapter, netdev);
1613 netxen_nic_detach(adapter);
1622 struct netxen_adapter *adapter = netdev_priv(netdev);
1624 __netxen_nic_down(adapter, netdev);
1810 struct netxen_adapter *adapter = netdev_priv(netdev);
1811 struct nx_host_tx_ring *tx_ring = adapter->tx_ring;
1835 pdev = adapter->pdev;
1847 netxen_set_tx_port(first_desc, adapter->portnum);
1884 netxen_nic_update_cmd_producer(adapter, tx_ring);
1886 adapter->stats.txbytes += skb->len;
1887 adapter->stats.xmitcalled++;
1892 adapter->stats.txdropped++;
1897 static int netxen_nic_check_temp(struct netxen_adapter *adapter)
1899 struct net_device *netdev = adapter->netdev;
1903 temp = NXRD32(adapter, CRB_TEMP_STATE);
1915 if (adapter->temp == NX_TEMP_NORMAL) {
1923 if (adapter->temp == NX_TEMP_WARN) {
1930 adapter->temp = temp_state;
1934 void netxen_advert_link_change(struct netxen_adapter *adapter, int linkup)
1936 struct net_device *netdev = adapter->netdev;
1938 if (adapter->ahw.linkup && !linkup) {
1941 adapter->ahw.linkup = 0;
1946 adapter->link_changed = !adapter->has_link_events;
1947 } else if (!adapter->ahw.linkup && linkup) {
1950 adapter->ahw.linkup = 1;
1955 adapter->link_changed = !adapter->has_link_events;
1959 static void netxen_nic_handle_phy_intr(struct netxen_adapter *adapter)
1963 port = adapter->physical_port;
1965 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
1966 val = NXRD32(adapter, CRB_XG_STATE_P3);
1967 val = XG_LINK_STATE_P3(adapter->ahw.pci_func, val);
1970 val = NXRD32(adapter, CRB_XG_STATE);
1975 netxen_advert_link_change(adapter, linkup);
1980 struct netxen_adapter *adapter = netdev_priv(netdev);
1982 if (test_bit(__NX_RESETTING, &adapter->state))
1986 schedule_work(&adapter->tx_timeout_task);
1991 struct netxen_adapter *adapter =
1994 if (!netif_running(adapter->netdev))
1997 if (test_and_set_bit(__NX_RESETTING, &adapter->state))
2000 if (++adapter->tx_timeo_cnt >= NX_MAX_TX_TIMEOUTS)
2004 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
2006 netxen_napi_disable(adapter);
2008 netxen_napi_enable(adapter);
2010 netif_wake_queue(adapter->netdev);
2012 clear_bit(__NX_RESETTING, &adapter->state);
2014 clear_bit(__NX_RESETTING, &adapter->state);
2015 if (netxen_nic_reset_context(adapter)) {
2020 adapter->netdev->trans_start = jiffies;
2025 adapter->need_fw_reset = 1;
2026 clear_bit(__NX_RESETTING, &adapter->state);
2031 struct netxen_adapter *adapter = netdev_priv(netdev);
2034 stats->rx_packets = adapter->stats.rx_pkts + adapter->stats.lro_pkts;
2035 stats->tx_packets = adapter->stats.xmitfinished;
2036 stats->rx_bytes = adapter->stats.rxbytes;
2037 stats->tx_bytes = adapter->stats.txbytes;
2038 stats->rx_dropped = adapter->stats.rxdropped;
2039 stats->tx_dropped = adapter->stats.txdropped;
2047 struct netxen_adapter *adapter = sds_ring->adapter;
2050 status = readl(adapter->isr_int_vec);
2052 if (!(status & adapter->int_vec_bit))
2055 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
2057 status = readl(adapter->crb_int_state_reg);
2064 our_int = readl(adapter->crb_int_state_reg);
2067 if (!test_and_clear_bit((7 + adapter->portnum), &our_int))
2071 writel((our_int & 0xffffffff), adapter->crb_int_state_reg);
2077 writel(0xffffffff, adapter->tgt_status_reg);
2079 readl(adapter->isr_int_vec);
2080 readl(adapter->isr_int_vec);
2090 struct netxen_adapter *adapter = sds_ring->adapter;
2093 writel(0xffffffff, adapter->tgt_status_reg);
2112 struct netxen_adapter *adapter = sds_ring->adapter;
2117 tx_complete = netxen_process_cmd_ring(adapter);
2123 if (test_bit(__NX_DEV_UP, &adapter->state))
2135 struct netxen_adapter *adapter = netdev_priv(netdev);
2136 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
2138 disable_irq(adapter->irq);
2139 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
2141 netxen_intr(adapter->irq, sds_ring);
2143 enable_irq(adapter->irq);
2148 nx_incr_dev_ref_cnt(struct netxen_adapter *adapter)
2151 if (netxen_api_lock(adapter))
2154 count = NXRD32(adapter, NX_CRB_DEV_REF_COUNT);
2156 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, ++count);
2158 netxen_api_unlock(adapter);
2163 nx_decr_dev_ref_cnt(struct netxen_adapter *adapter)
2166 if (netxen_api_lock(adapter))
2169 count = NXRD32(adapter, NX_CRB_DEV_REF_COUNT);
2172 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, --count);
2175 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_COLD);
2177 netxen_api_unlock(adapter);
2182 nx_dev_request_aer(struct netxen_adapter *adapter)
2187 if (netxen_api_lock(adapter))
2190 state = NXRD32(adapter, NX_CRB_DEV_STATE);
2195 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_NEED_AER);
2199 netxen_api_unlock(adapter);
2204 nx_dev_request_reset(struct netxen_adapter *adapter)
2209 if (netxen_api_lock(adapter))
2212 state = NXRD32(adapter, NX_CRB_DEV_STATE);
2217 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_NEED_RESET);
2221 netxen_api_unlock(adapter);
2227 netxen_can_start_firmware(struct netxen_adapter *adapter)
2232 if (netxen_api_lock(adapter))
2235 count = NXRD32(adapter, NX_CRB_DEV_REF_COUNT);
2242 NXWR32(adapter, NX_CRB_DEV_STATE, NX_DEV_INITALIZING);
2245 NXWR32(adapter, NX_CRB_DEV_REF_COUNT, ++count);
2247 netxen_api_unlock(adapter);
2253 netxen_schedule_work(struct netxen_adapter *adapter,
2256 INIT_DELAYED_WORK(&adapter->fw_work, func);
2257 schedule_delayed_work(&adapter->fw_work, delay);
2261 netxen_cancel_fw_work(struct netxen_adapter *adapter)
2263 while (test_and_set_bit(__NX_RESETTING, &adapter->state))
2266 cancel_delayed_work_sync(&adapter->fw_work);
2272 struct netxen_adapter *adapter = container_of(work,
2274 struct net_device *netdev = adapter->netdev;
2278 err = netxen_nic_attach(adapter);
2282 err = netxen_nic_up(adapter, netdev);
2284 netxen_nic_detach(adapter);
2294 adapter->fw_fail_cnt = 0;
2295 clear_bit(__NX_RESETTING, &adapter->state);
2296 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY);
2302 struct netxen_adapter *adapter = container_of(work,
2306 dev_state = NXRD32(adapter, NX_CRB_DEV_STATE);
2311 if (!netxen_start_firmware(adapter)) {
2312 netxen_schedule_work(adapter, netxen_attach_work, 0);
2319 if (++adapter->fw_wait_cnt < FW_POLL_THRESH) {
2320 netxen_schedule_work(adapter,
2327 nx_incr_dev_ref_cnt(adapter);
2331 clear_bit(__NX_RESETTING, &adapter->state);
2337 struct netxen_adapter *adapter = container_of(work,
2339 struct net_device *netdev = adapter->netdev;
2345 netxen_nic_down(adapter, netdev);
2348 netxen_nic_detach(adapter);
2351 status = NXRD32(adapter, NETXEN_PEG_HALT_STATUS1);
2356 if (adapter->temp == NX_TEMP_PANIC)
2359 ref_cnt = nx_decr_dev_ref_cnt(adapter);
2366 adapter->fw_wait_cnt = 0;
2367 netxen_schedule_work(adapter, netxen_fwinit_work, delay);
2372 clear_bit(__NX_RESETTING, &adapter->state);
2376 netxen_check_health(struct netxen_adapter *adapter)
2379 struct net_device *netdev = adapter->netdev;
2381 state = NXRD32(adapter, NX_CRB_DEV_STATE);
2385 if (netxen_nic_check_temp(adapter))
2388 if (adapter->need_fw_reset) {
2389 if (nx_dev_request_reset(adapter))
2400 adapter->need_fw_reset = 1;
2401 if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
2405 if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
2408 heartbit = NXRD32(adapter, NETXEN_PEG_ALIVE_COUNTER);
2409 if (heartbit != adapter->heartbit) {
2410 adapter->heartbit = heartbit;
2411 adapter->fw_fail_cnt = 0;
2412 if (adapter->need_fw_reset)
2417 if (++adapter->fw_fail_cnt < FW_FAIL_THRESH)
2420 if (nx_dev_request_reset(adapter))
2423 clear_bit(__NX_FW_ATTACHED, &adapter->state);
2429 !test_and_set_bit(__NX_RESETTING, &adapter->state))
2430 netxen_schedule_work(adapter, netxen_detach_work, 0);
2437 struct netxen_adapter *adapter = container_of(work,
2440 if (test_bit(__NX_RESETTING, &adapter->state))
2443 if (test_bit(__NX_DEV_UP, &adapter->state)) {
2444 if (!adapter->has_link_events) {
2446 netxen_nic_handle_phy_intr(adapter);
2448 if (adapter->link_changed)
2449 netxen_nic_set_link_parameters(adapter);
2453 if (netxen_check_health(adapter))
2457 netxen_schedule_work(adapter, netxen_fw_poll_work, FW_POLL_DELAY);
2465 struct netxen_adapter *adapter = netdev_priv(net);
2469 if (!(adapter->capabilities & NX_FW_CAPABILITY_BDG))
2472 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC)
2478 if (!netxen_config_bridged_mode(adapter, !!new))
2490 struct netxen_adapter *adapter;
2493 adapter = netdev_priv(net);
2495 if (adapter->capabilities & NX_FW_CAPABILITY_BDG)
2496 bridged_mode = !!(adapter->flags & NETXEN_NIC_BRIDGE_ENABLED);
2511 struct netxen_adapter *adapter = dev_get_drvdata(dev);
2517 if (!!new != !!(adapter->flags & NETXEN_NIC_DIAG_ENABLED))
2518 adapter->flags ^= NETXEN_NIC_DIAG_ENABLED;
2527 struct netxen_adapter *adapter = dev_get_drvdata(dev);
2530 !!(adapter->flags & NETXEN_NIC_DIAG_ENABLED));
2540 netxen_sysfs_validate_crb(struct netxen_adapter *adapter,
2545 if (!(adapter->flags & NETXEN_NIC_DIAG_ENABLED))
2549 if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
2571 struct netxen_adapter *adapter = dev_get_drvdata(dev);
2576 ret = netxen_sysfs_validate_crb(adapter, offset, size);
2580 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) &&
2583 netxen_pci_camqm_read_2M(adapter, offset, &qmdata);
2586 data = NXRD32(adapter, offset);
2599 struct netxen_adapter *adapter = dev_get_drvdata(dev);
2604 ret = netxen_sysfs_validate_crb(adapter, offset, size);
2608 if (NX_IS_REVISION_P3(adapter->ahw.revision_id) &&
2612 netxen_pci_camqm_write_2M(adapter, offset, qmdata);
2615 NXWR32(adapter, offset, data);
2622 netxen_sysfs_validate_mem(struct netxen_adapter *adapter,
2625 if (!(adapter->flags & NETXEN_NIC_DIAG_ENABLED))
2640 struct netxen_adapter *adapter = dev_get_drvdata(dev);
2644 ret = netxen_sysfs_validate_mem(adapter, offset, size);
2648 if (adapter->pci_mem_read(adapter, offset, &data))
2661 struct netxen_adapter *adapter = dev_get_drvdata(dev);
2665 ret = netxen_sysfs_validate_mem(adapter, offset, size);
2671 if (adapter->pci_mem_write(adapter, offset, data))
2694 netxen_create_sysfs_entries(struct netxen_adapter *adapter)
2696 struct net_device *netdev = adapter->netdev;
2699 if (adapter->capabilities & NX_FW_CAPABILITY_BDG) {
2709 netxen_remove_sysfs_entries(struct netxen_adapter *adapter)
2711 struct net_device *netdev = adapter->netdev;
2714 if (adapter->capabilities & NX_FW_CAPABILITY_BDG)
2719 netxen_create_diag_entries(struct netxen_adapter *adapter)
2721 struct pci_dev *pdev = adapter->pdev;
2735 netxen_remove_diag_entries(struct netxen_adapter *adapter)
2737 struct pci_dev *pdev = adapter->pdev;
2750 netxen_destip_supported(struct netxen_adapter *adapter)
2752 if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
2755 if (adapter->ahw.cut_through)
2765 struct netxen_adapter *adapter = netdev_priv(dev);
2767 if (!netxen_destip_supported(adapter))
2777 netxen_config_ipaddr(adapter,
2781 netxen_config_ipaddr(adapter,
2795 struct netxen_adapter *adapter;
2810 adapter = netdev_priv(dev);
2812 if (!adapter)
2815 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC)
2827 struct netxen_adapter *adapter;
2846 adapter = netdev_priv(dev);
2848 if (!adapter || !netxen_destip_supported(adapter))
2851 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC)
2856 netxen_config_ipaddr(adapter, ifa->ifa_address, NX_IP_UP);
2859 netxen_config_ipaddr(adapter, ifa->ifa_address, NX_IP_DOWN);