diff options
-rw-r--r-- | drivers/net/netxen/netxen_nic.h | 12 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_ethtool.c | 33 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_hw.c | 108 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_hw.h | 1 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_init.c | 2 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_main.c | 38 |
6 files changed, 85 insertions, 109 deletions
diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h index cde8e70b6b08..618507074bdd 100644 --- a/drivers/net/netxen/netxen_nic.h +++ b/drivers/net/netxen/netxen_nic.h | |||
@@ -90,7 +90,6 @@ | |||
90 | (sizeof(struct netxen_rx_buffer) * rds_ring->max_rx_desc_count) | 90 | (sizeof(struct netxen_rx_buffer) * rds_ring->max_rx_desc_count) |
91 | #define find_diff_among(a,b,range) ((a)<(b)?((b)-(a)):((b)+(range)-(a))) | 91 | #define find_diff_among(a,b,range) ((a)<(b)?((b)-(a)):((b)+(range)-(a))) |
92 | 92 | ||
93 | #define NETXEN_NETDEV_STATUS 0x1 | ||
94 | #define NETXEN_RCV_PRODUCER_OFFSET 0 | 93 | #define NETXEN_RCV_PRODUCER_OFFSET 0 |
95 | #define NETXEN_RCV_PEG_DB_ID 2 | 94 | #define NETXEN_RCV_PEG_DB_ID 2 |
96 | #define NETXEN_HOST_DUMMY_DMA_SIZE 1024 | 95 | #define NETXEN_HOST_DUMMY_DMA_SIZE 1024 |
@@ -795,21 +794,19 @@ struct netxen_hardware_context { | |||
795 | void __iomem *pci_base0; | 794 | void __iomem *pci_base0; |
796 | void __iomem *pci_base1; | 795 | void __iomem *pci_base1; |
797 | void __iomem *pci_base2; | 796 | void __iomem *pci_base2; |
798 | unsigned long first_page_group_end; | ||
799 | unsigned long first_page_group_start; | ||
800 | void __iomem *db_base; | 797 | void __iomem *db_base; |
801 | unsigned long db_len; | 798 | unsigned long db_len; |
802 | unsigned long pci_len0; | 799 | unsigned long pci_len0; |
803 | 800 | ||
804 | u8 cut_through; | ||
805 | int qdr_sn_window; | 801 | int qdr_sn_window; |
806 | int ddr_mn_window; | 802 | int ddr_mn_window; |
807 | unsigned long mn_win_crb; | 803 | unsigned long mn_win_crb; |
808 | unsigned long ms_win_crb; | 804 | unsigned long ms_win_crb; |
809 | 805 | ||
806 | u8 cut_through; | ||
810 | u8 revision_id; | 807 | u8 revision_id; |
811 | u16 board_type; | 808 | u16 port_type; |
812 | struct netxen_board_info boardcfg; | 809 | int board_type; |
813 | u32 linkup; | 810 | u32 linkup; |
814 | /* Address of cmd ring in Phantom */ | 811 | /* Address of cmd ring in Phantom */ |
815 | struct cmd_desc_type0 *cmd_desc_head; | 812 | struct cmd_desc_type0 *cmd_desc_head; |
@@ -1260,6 +1257,7 @@ struct netxen_adapter { | |||
1260 | u32 temp; | 1257 | u32 temp; |
1261 | 1258 | ||
1262 | u32 fw_major; | 1259 | u32 fw_major; |
1260 | u32 fw_version; | ||
1263 | 1261 | ||
1264 | u8 msix_supported; | 1262 | u8 msix_supported; |
1265 | u8 max_possible_rss_rings; | 1263 | u8 max_possible_rss_rings; |
@@ -1272,7 +1270,6 @@ struct netxen_adapter { | |||
1272 | u16 state; | 1270 | u16 state; |
1273 | u16 link_autoneg; | 1271 | u16 link_autoneg; |
1274 | int rx_csum; | 1272 | int rx_csum; |
1275 | int status; | ||
1276 | 1273 | ||
1277 | struct netxen_cmd_buffer *cmd_buf_arr; /* Command buffers for xmit */ | 1274 | struct netxen_cmd_buffer *cmd_buf_arr; /* Command buffers for xmit */ |
1278 | 1275 | ||
@@ -1391,6 +1388,7 @@ void netxen_nic_write_w1(struct netxen_adapter *adapter, u32 index, u32 value); | |||
1391 | void netxen_nic_read_w1(struct netxen_adapter *adapter, u32 index, u32 *value); | 1388 | void netxen_nic_read_w1(struct netxen_adapter *adapter, u32 index, u32 *value); |
1392 | 1389 | ||
1393 | int netxen_nic_get_board_info(struct netxen_adapter *adapter); | 1390 | int netxen_nic_get_board_info(struct netxen_adapter *adapter); |
1391 | void netxen_nic_get_firmware_info(struct netxen_adapter *adapter); | ||
1394 | 1392 | ||
1395 | int netxen_nic_hw_read_wx_128M(struct netxen_adapter *adapter, | 1393 | int netxen_nic_hw_read_wx_128M(struct netxen_adapter *adapter, |
1396 | ulong off, void *data, int len); | 1394 | ulong off, void *data, int len); |
diff --git a/drivers/net/netxen/netxen_nic_ethtool.c b/drivers/net/netxen/netxen_nic_ethtool.c index f811880a57c5..8b4bdfd6a117 100644 --- a/drivers/net/netxen/netxen_nic_ethtool.c +++ b/drivers/net/netxen/netxen_nic_ethtool.c | |||
@@ -115,10 +115,9 @@ static int | |||
115 | netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) | 115 | netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) |
116 | { | 116 | { |
117 | struct netxen_adapter *adapter = netdev_priv(dev); | 117 | struct netxen_adapter *adapter = netdev_priv(dev); |
118 | struct netxen_board_info *boardinfo = &adapter->ahw.boardcfg; | ||
119 | 118 | ||
120 | /* read which mode */ | 119 | /* read which mode */ |
121 | if (adapter->ahw.board_type == NETXEN_NIC_GBE) { | 120 | if (adapter->ahw.port_type == NETXEN_NIC_GBE) { |
122 | ecmd->supported = (SUPPORTED_10baseT_Half | | 121 | ecmd->supported = (SUPPORTED_10baseT_Half | |
123 | SUPPORTED_10baseT_Full | | 122 | SUPPORTED_10baseT_Full | |
124 | SUPPORTED_100baseT_Half | | 123 | SUPPORTED_100baseT_Half | |
@@ -137,7 +136,7 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) | |||
137 | ecmd->duplex = adapter->link_duplex; | 136 | ecmd->duplex = adapter->link_duplex; |
138 | ecmd->autoneg = adapter->link_autoneg; | 137 | ecmd->autoneg = adapter->link_autoneg; |
139 | 138 | ||
140 | } else if (adapter->ahw.board_type == NETXEN_NIC_XGBE) { | 139 | } else if (adapter->ahw.port_type == NETXEN_NIC_XGBE) { |
141 | u32 val; | 140 | u32 val; |
142 | 141 | ||
143 | adapter->hw_read_wx(adapter, NETXEN_PORT_MODE_ADDR, &val, 4); | 142 | adapter->hw_read_wx(adapter, NETXEN_PORT_MODE_ADDR, &val, 4); |
@@ -169,7 +168,7 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) | |||
169 | ecmd->phy_address = adapter->physical_port; | 168 | ecmd->phy_address = adapter->physical_port; |
170 | ecmd->transceiver = XCVR_EXTERNAL; | 169 | ecmd->transceiver = XCVR_EXTERNAL; |
171 | 170 | ||
172 | switch ((netxen_brdtype_t) boardinfo->board_type) { | 171 | switch ((netxen_brdtype_t)adapter->ahw.board_type) { |
173 | case NETXEN_BRDTYPE_P2_SB35_4G: | 172 | case NETXEN_BRDTYPE_P2_SB35_4G: |
174 | case NETXEN_BRDTYPE_P2_SB31_2G: | 173 | case NETXEN_BRDTYPE_P2_SB31_2G: |
175 | case NETXEN_BRDTYPE_P3_REF_QG: | 174 | case NETXEN_BRDTYPE_P3_REF_QG: |
@@ -185,7 +184,7 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) | |||
185 | ecmd->supported |= SUPPORTED_TP; | 184 | ecmd->supported |= SUPPORTED_TP; |
186 | ecmd->advertising |= ADVERTISED_TP; | 185 | ecmd->advertising |= ADVERTISED_TP; |
187 | ecmd->port = PORT_TP; | 186 | ecmd->port = PORT_TP; |
188 | ecmd->autoneg = (boardinfo->board_type == | 187 | ecmd->autoneg = (adapter->ahw.board_type == |
189 | NETXEN_BRDTYPE_P2_SB31_10G_CX4) ? | 188 | NETXEN_BRDTYPE_P2_SB31_10G_CX4) ? |
190 | (AUTONEG_DISABLE) : (adapter->link_autoneg); | 189 | (AUTONEG_DISABLE) : (adapter->link_autoneg); |
191 | break; | 190 | break; |
@@ -212,7 +211,7 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) | |||
212 | ecmd->autoneg = AUTONEG_DISABLE; | 211 | ecmd->autoneg = AUTONEG_DISABLE; |
213 | break; | 212 | break; |
214 | case NETXEN_BRDTYPE_P3_10G_TP: | 213 | case NETXEN_BRDTYPE_P3_10G_TP: |
215 | if (adapter->ahw.board_type == NETXEN_NIC_XGBE) { | 214 | if (adapter->ahw.port_type == NETXEN_NIC_XGBE) { |
216 | ecmd->autoneg = AUTONEG_DISABLE; | 215 | ecmd->autoneg = AUTONEG_DISABLE; |
217 | ecmd->supported |= (SUPPORTED_FIBRE | SUPPORTED_TP); | 216 | ecmd->supported |= (SUPPORTED_FIBRE | SUPPORTED_TP); |
218 | ecmd->advertising |= | 217 | ecmd->advertising |= |
@@ -228,7 +227,7 @@ netxen_nic_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd) | |||
228 | break; | 227 | break; |
229 | default: | 228 | default: |
230 | printk(KERN_ERR "netxen-nic: Unsupported board model %d\n", | 229 | printk(KERN_ERR "netxen-nic: Unsupported board model %d\n", |
231 | (netxen_brdtype_t) boardinfo->board_type); | 230 | (netxen_brdtype_t)adapter->ahw.board_type); |
232 | return -EIO; | 231 | return -EIO; |
233 | } | 232 | } |
234 | 233 | ||
@@ -242,7 +241,7 @@ netxen_nic_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd) | |||
242 | __u32 status; | 241 | __u32 status; |
243 | 242 | ||
244 | /* read which mode */ | 243 | /* read which mode */ |
245 | if (adapter->ahw.board_type == NETXEN_NIC_GBE) { | 244 | if (adapter->ahw.port_type == NETXEN_NIC_GBE) { |
246 | /* autonegotiation */ | 245 | /* autonegotiation */ |
247 | if (adapter->phy_write | 246 | if (adapter->phy_write |
248 | && adapter->phy_write(adapter, | 247 | && adapter->phy_write(adapter, |
@@ -430,7 +429,7 @@ static u32 netxen_nic_test_link(struct net_device *dev) | |||
430 | int val; | 429 | int val; |
431 | 430 | ||
432 | /* read which mode */ | 431 | /* read which mode */ |
433 | if (adapter->ahw.board_type == NETXEN_NIC_GBE) { | 432 | if (adapter->ahw.port_type == NETXEN_NIC_GBE) { |
434 | if (adapter->phy_read | 433 | if (adapter->phy_read |
435 | && adapter->phy_read(adapter, | 434 | && adapter->phy_read(adapter, |
436 | NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS, | 435 | NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS, |
@@ -440,7 +439,7 @@ static u32 netxen_nic_test_link(struct net_device *dev) | |||
440 | val = netxen_get_phy_link(status); | 439 | val = netxen_get_phy_link(status); |
441 | return !val; | 440 | return !val; |
442 | } | 441 | } |
443 | } else if (adapter->ahw.board_type == NETXEN_NIC_XGBE) { | 442 | } else if (adapter->ahw.port_type == NETXEN_NIC_XGBE) { |
444 | val = adapter->pci_read_normalize(adapter, CRB_XG_STATE); | 443 | val = adapter->pci_read_normalize(adapter, CRB_XG_STATE); |
445 | return (val == XG_LINK_UP) ? 0 : 1; | 444 | return (val == XG_LINK_UP) ? 0 : 1; |
446 | } | 445 | } |
@@ -483,7 +482,7 @@ netxen_nic_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ring) | |||
483 | rds_rings[RCV_DESC_JUMBO_CTXID].max_rx_desc_count; | 482 | rds_rings[RCV_DESC_JUMBO_CTXID].max_rx_desc_count; |
484 | ring->tx_pending = adapter->max_tx_desc_count; | 483 | ring->tx_pending = adapter->max_tx_desc_count; |
485 | 484 | ||
486 | if (adapter->ahw.board_type == NETXEN_NIC_GBE) | 485 | if (adapter->ahw.port_type == NETXEN_NIC_GBE) |
487 | ring->rx_max_pending = MAX_RCV_DESCRIPTORS_1G; | 486 | ring->rx_max_pending = MAX_RCV_DESCRIPTORS_1G; |
488 | else | 487 | else |
489 | ring->rx_max_pending = MAX_RCV_DESCRIPTORS_10G; | 488 | ring->rx_max_pending = MAX_RCV_DESCRIPTORS_10G; |
@@ -501,7 +500,7 @@ netxen_nic_get_pauseparam(struct net_device *dev, | |||
501 | __u32 val; | 500 | __u32 val; |
502 | int port = adapter->physical_port; | 501 | int port = adapter->physical_port; |
503 | 502 | ||
504 | if (adapter->ahw.board_type == NETXEN_NIC_GBE) { | 503 | if (adapter->ahw.port_type == NETXEN_NIC_GBE) { |
505 | if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS)) | 504 | if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS)) |
506 | return; | 505 | return; |
507 | /* get flow control settings */ | 506 | /* get flow control settings */ |
@@ -524,7 +523,7 @@ netxen_nic_get_pauseparam(struct net_device *dev, | |||
524 | pause->tx_pause = !(netxen_gb_get_gb3_mask(val)); | 523 | pause->tx_pause = !(netxen_gb_get_gb3_mask(val)); |
525 | break; | 524 | break; |
526 | } | 525 | } |
527 | } else if (adapter->ahw.board_type == NETXEN_NIC_XGBE) { | 526 | } else if (adapter->ahw.port_type == NETXEN_NIC_XGBE) { |
528 | if ((port < 0) || (port > NETXEN_NIU_MAX_XG_PORTS)) | 527 | if ((port < 0) || (port > NETXEN_NIU_MAX_XG_PORTS)) |
529 | return; | 528 | return; |
530 | pause->rx_pause = 1; | 529 | pause->rx_pause = 1; |
@@ -535,7 +534,7 @@ netxen_nic_get_pauseparam(struct net_device *dev, | |||
535 | pause->tx_pause = !(netxen_xg_get_xg1_mask(val)); | 534 | pause->tx_pause = !(netxen_xg_get_xg1_mask(val)); |
536 | } else { | 535 | } else { |
537 | printk(KERN_ERR"%s: Unknown board type: %x\n", | 536 | printk(KERN_ERR"%s: Unknown board type: %x\n", |
538 | netxen_nic_driver_name, adapter->ahw.board_type); | 537 | netxen_nic_driver_name, adapter->ahw.port_type); |
539 | } | 538 | } |
540 | } | 539 | } |
541 | 540 | ||
@@ -547,7 +546,7 @@ netxen_nic_set_pauseparam(struct net_device *dev, | |||
547 | __u32 val; | 546 | __u32 val; |
548 | int port = adapter->physical_port; | 547 | int port = adapter->physical_port; |
549 | /* read mode */ | 548 | /* read mode */ |
550 | if (adapter->ahw.board_type == NETXEN_NIC_GBE) { | 549 | if (adapter->ahw.port_type == NETXEN_NIC_GBE) { |
551 | if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS)) | 550 | if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS)) |
552 | return -EIO; | 551 | return -EIO; |
553 | /* set flow control */ | 552 | /* set flow control */ |
@@ -591,7 +590,7 @@ netxen_nic_set_pauseparam(struct net_device *dev, | |||
591 | break; | 590 | break; |
592 | } | 591 | } |
593 | netxen_nic_write_w0(adapter, NETXEN_NIU_GB_PAUSE_CTL, val); | 592 | netxen_nic_write_w0(adapter, NETXEN_NIU_GB_PAUSE_CTL, val); |
594 | } else if (adapter->ahw.board_type == NETXEN_NIC_XGBE) { | 593 | } else if (adapter->ahw.port_type == NETXEN_NIC_XGBE) { |
595 | if ((port < 0) || (port > NETXEN_NIU_MAX_XG_PORTS)) | 594 | if ((port < 0) || (port > NETXEN_NIU_MAX_XG_PORTS)) |
596 | return -EIO; | 595 | return -EIO; |
597 | netxen_nic_read_w0(adapter, NETXEN_NIU_XG_PAUSE_CTL, &val); | 596 | netxen_nic_read_w0(adapter, NETXEN_NIU_XG_PAUSE_CTL, &val); |
@@ -610,7 +609,7 @@ netxen_nic_set_pauseparam(struct net_device *dev, | |||
610 | } else { | 609 | } else { |
611 | printk(KERN_ERR "%s: Unknown board type: %x\n", | 610 | printk(KERN_ERR "%s: Unknown board type: %x\n", |
612 | netxen_nic_driver_name, | 611 | netxen_nic_driver_name, |
613 | adapter->ahw.board_type); | 612 | adapter->ahw.port_type); |
614 | } | 613 | } |
615 | return 0; | 614 | return 0; |
616 | } | 615 | } |
diff --git a/drivers/net/netxen/netxen_nic_hw.c b/drivers/net/netxen/netxen_nic_hw.c index b564d69cfa45..a93ab589d9ce 100644 --- a/drivers/net/netxen/netxen_nic_hw.c +++ b/drivers/net/netxen/netxen_nic_hw.c | |||
@@ -728,9 +728,8 @@ int netxen_is_flash_supported(struct netxen_adapter *adapter) | |||
728 | static int netxen_get_flash_block(struct netxen_adapter *adapter, int base, | 728 | static int netxen_get_flash_block(struct netxen_adapter *adapter, int base, |
729 | int size, __le32 * buf) | 729 | int size, __le32 * buf) |
730 | { | 730 | { |
731 | int i, addr; | 731 | int i, v, addr; |
732 | __le32 *ptr32; | 732 | __le32 *ptr32; |
733 | u32 v; | ||
734 | 733 | ||
735 | addr = base; | 734 | addr = base; |
736 | ptr32 = buf; | 735 | ptr32 = buf; |
@@ -2089,47 +2088,44 @@ u32 netxen_nic_pci_read_normalize_2M(struct netxen_adapter *adapter, u64 off) | |||
2089 | 2088 | ||
2090 | int netxen_nic_get_board_info(struct netxen_adapter *adapter) | 2089 | int netxen_nic_get_board_info(struct netxen_adapter *adapter) |
2091 | { | 2090 | { |
2092 | int rv = 0; | 2091 | int offset, board_type, magic, header_version; |
2093 | int addr = NETXEN_BRDCFG_START; | 2092 | struct pci_dev *pdev = adapter->pdev; |
2094 | struct netxen_board_info *boardinfo; | ||
2095 | int index; | ||
2096 | int *ptr32; | ||
2097 | 2093 | ||
2098 | boardinfo = &adapter->ahw.boardcfg; | 2094 | offset = NETXEN_BRDCFG_START + |
2099 | ptr32 = (int *) boardinfo; | 2095 | offsetof(struct netxen_board_info, magic); |
2096 | if (netxen_rom_fast_read(adapter, offset, &magic)) | ||
2097 | return -EIO; | ||
2100 | 2098 | ||
2101 | for (index = 0; index < sizeof(struct netxen_board_info) / sizeof(u32); | 2099 | offset = NETXEN_BRDCFG_START + |
2102 | index++) { | 2100 | offsetof(struct netxen_board_info, header_version); |
2103 | if (netxen_rom_fast_read(adapter, addr, ptr32) == -1) { | 2101 | if (netxen_rom_fast_read(adapter, offset, &header_version)) |
2104 | return -EIO; | 2102 | return -EIO; |
2105 | } | 2103 | |
2106 | ptr32++; | 2104 | if (magic != NETXEN_BDINFO_MAGIC || |
2107 | addr += sizeof(u32); | 2105 | header_version != NETXEN_BDINFO_VERSION) { |
2108 | } | 2106 | dev_err(&pdev->dev, |
2109 | if (boardinfo->magic != NETXEN_BDINFO_MAGIC) { | 2107 | "invalid board config, magic=%08x, version=%08x\n", |
2110 | printk("%s: ERROR reading %s board config." | 2108 | magic, header_version); |
2111 | " Read %x, expected %x\n", netxen_nic_driver_name, | 2109 | return -EIO; |
2112 | netxen_nic_driver_name, | ||
2113 | boardinfo->magic, NETXEN_BDINFO_MAGIC); | ||
2114 | rv = -1; | ||
2115 | } | ||
2116 | if (boardinfo->header_version != NETXEN_BDINFO_VERSION) { | ||
2117 | printk("%s: Unknown board config version." | ||
2118 | " Read %x, expected %x\n", netxen_nic_driver_name, | ||
2119 | boardinfo->header_version, NETXEN_BDINFO_VERSION); | ||
2120 | rv = -1; | ||
2121 | } | 2110 | } |
2122 | 2111 | ||
2123 | if (boardinfo->board_type == NETXEN_BRDTYPE_P3_4_GB_MM) { | 2112 | offset = NETXEN_BRDCFG_START + |
2113 | offsetof(struct netxen_board_info, board_type); | ||
2114 | if (netxen_rom_fast_read(adapter, offset, &board_type)) | ||
2115 | return -EIO; | ||
2116 | |||
2117 | adapter->ahw.board_type = board_type; | ||
2118 | |||
2119 | if (board_type == NETXEN_BRDTYPE_P3_4_GB_MM) { | ||
2124 | u32 gpio = netxen_nic_reg_read(adapter, | 2120 | u32 gpio = netxen_nic_reg_read(adapter, |
2125 | NETXEN_ROMUSB_GLB_PAD_GPIO_I); | 2121 | NETXEN_ROMUSB_GLB_PAD_GPIO_I); |
2126 | if ((gpio & 0x8000) == 0) | 2122 | if ((gpio & 0x8000) == 0) |
2127 | boardinfo->board_type = NETXEN_BRDTYPE_P3_10G_TP; | 2123 | board_type = NETXEN_BRDTYPE_P3_10G_TP; |
2128 | } | 2124 | } |
2129 | 2125 | ||
2130 | switch ((netxen_brdtype_t) boardinfo->board_type) { | 2126 | switch ((netxen_brdtype_t)board_type) { |
2131 | case NETXEN_BRDTYPE_P2_SB35_4G: | 2127 | case NETXEN_BRDTYPE_P2_SB35_4G: |
2132 | adapter->ahw.board_type = NETXEN_NIC_GBE; | 2128 | adapter->ahw.port_type = NETXEN_NIC_GBE; |
2133 | break; | 2129 | break; |
2134 | case NETXEN_BRDTYPE_P2_SB31_10G: | 2130 | case NETXEN_BRDTYPE_P2_SB31_10G: |
2135 | case NETXEN_BRDTYPE_P2_SB31_10G_IMEZ: | 2131 | case NETXEN_BRDTYPE_P2_SB31_10G_IMEZ: |
@@ -2145,7 +2141,7 @@ int netxen_nic_get_board_info(struct netxen_adapter *adapter) | |||
2145 | case NETXEN_BRDTYPE_P3_10G_SFP_QT: | 2141 | case NETXEN_BRDTYPE_P3_10G_SFP_QT: |
2146 | case NETXEN_BRDTYPE_P3_10G_XFP: | 2142 | case NETXEN_BRDTYPE_P3_10G_XFP: |
2147 | case NETXEN_BRDTYPE_P3_10000_BASE_T: | 2143 | case NETXEN_BRDTYPE_P3_10000_BASE_T: |
2148 | adapter->ahw.board_type = NETXEN_NIC_XGBE; | 2144 | adapter->ahw.port_type = NETXEN_NIC_XGBE; |
2149 | break; | 2145 | break; |
2150 | case NETXEN_BRDTYPE_P1_BD: | 2146 | case NETXEN_BRDTYPE_P1_BD: |
2151 | case NETXEN_BRDTYPE_P1_SB: | 2147 | case NETXEN_BRDTYPE_P1_SB: |
@@ -2154,20 +2150,19 @@ int netxen_nic_get_board_info(struct netxen_adapter *adapter) | |||
2154 | case NETXEN_BRDTYPE_P3_REF_QG: | 2150 | case NETXEN_BRDTYPE_P3_REF_QG: |
2155 | case NETXEN_BRDTYPE_P3_4_GB: | 2151 | case NETXEN_BRDTYPE_P3_4_GB: |
2156 | case NETXEN_BRDTYPE_P3_4_GB_MM: | 2152 | case NETXEN_BRDTYPE_P3_4_GB_MM: |
2157 | adapter->ahw.board_type = NETXEN_NIC_GBE; | 2153 | adapter->ahw.port_type = NETXEN_NIC_GBE; |
2158 | break; | 2154 | break; |
2159 | case NETXEN_BRDTYPE_P3_10G_TP: | 2155 | case NETXEN_BRDTYPE_P3_10G_TP: |
2160 | adapter->ahw.board_type = (adapter->portnum < 2) ? | 2156 | adapter->ahw.port_type = (adapter->portnum < 2) ? |
2161 | NETXEN_NIC_XGBE : NETXEN_NIC_GBE; | 2157 | NETXEN_NIC_XGBE : NETXEN_NIC_GBE; |
2162 | break; | 2158 | break; |
2163 | default: | 2159 | default: |
2164 | printk("%s: Unknown(%x)\n", netxen_nic_driver_name, | 2160 | dev_err(&pdev->dev, "unknown board type %x\n", board_type); |
2165 | boardinfo->board_type); | 2161 | adapter->ahw.port_type = NETXEN_NIC_XGBE; |
2166 | rv = -ENODEV; | ||
2167 | break; | 2162 | break; |
2168 | } | 2163 | } |
2169 | 2164 | ||
2170 | return rv; | 2165 | return 0; |
2171 | } | 2166 | } |
2172 | 2167 | ||
2173 | /* NIU access sections */ | 2168 | /* NIU access sections */ |
@@ -2213,7 +2208,7 @@ void netxen_nic_set_link_parameters(struct netxen_adapter *adapter) | |||
2213 | return; | 2208 | return; |
2214 | } | 2209 | } |
2215 | 2210 | ||
2216 | if (adapter->ahw.board_type == NETXEN_NIC_GBE) { | 2211 | if (adapter->ahw.port_type == NETXEN_NIC_GBE) { |
2217 | adapter->hw_read_wx(adapter, | 2212 | adapter->hw_read_wx(adapter, |
2218 | NETXEN_PORT_MODE_ADDR, &port_mode, 4); | 2213 | NETXEN_PORT_MODE_ADDR, &port_mode, 4); |
2219 | if (port_mode == NETXEN_PORT_MODE_802_3_AP) { | 2214 | if (port_mode == NETXEN_PORT_MODE_802_3_AP) { |
@@ -2268,17 +2263,14 @@ void netxen_nic_set_link_parameters(struct netxen_adapter *adapter) | |||
2268 | } | 2263 | } |
2269 | } | 2264 | } |
2270 | 2265 | ||
2271 | void netxen_nic_flash_print(struct netxen_adapter *adapter) | 2266 | void netxen_nic_get_firmware_info(struct netxen_adapter *adapter) |
2272 | { | 2267 | { |
2273 | u32 fw_major = 0; | 2268 | u32 fw_major, fw_minor, fw_build; |
2274 | u32 fw_minor = 0; | ||
2275 | u32 fw_build = 0; | ||
2276 | char brd_name[NETXEN_MAX_SHORT_NAME]; | 2269 | char brd_name[NETXEN_MAX_SHORT_NAME]; |
2277 | char serial_num[32]; | 2270 | char serial_num[32]; |
2278 | int i, addr; | 2271 | int i, addr; |
2279 | int *ptr32; | 2272 | int *ptr32; |
2280 | 2273 | struct pci_dev *pdev = adapter->pdev; | |
2281 | struct netxen_board_info *board_info = &(adapter->ahw.boardcfg); | ||
2282 | 2274 | ||
2283 | adapter->driver_mismatch = 0; | 2275 | adapter->driver_mismatch = 0; |
2284 | 2276 | ||
@@ -2302,23 +2294,31 @@ void netxen_nic_flash_print(struct netxen_adapter *adapter) | |||
2302 | adapter->hw_read_wx(adapter, NETXEN_FW_VERSION_SUB, &fw_build, 4); | 2294 | adapter->hw_read_wx(adapter, NETXEN_FW_VERSION_SUB, &fw_build, 4); |
2303 | 2295 | ||
2304 | adapter->fw_major = fw_major; | 2296 | adapter->fw_major = fw_major; |
2297 | adapter->fw_version = NETXEN_VERSION_CODE(fw_major, fw_minor, fw_build); | ||
2305 | 2298 | ||
2306 | if (adapter->portnum == 0) { | 2299 | if (adapter->portnum == 0) { |
2307 | get_brd_name_by_type(board_info->board_type, brd_name); | 2300 | get_brd_name_by_type(adapter->ahw.board_type, brd_name); |
2308 | 2301 | ||
2309 | printk(KERN_INFO "NetXen %s Board S/N %s Chip rev 0x%x\n", | 2302 | printk(KERN_INFO "NetXen %s Board S/N %s Chip rev 0x%x\n", |
2310 | brd_name, serial_num, adapter->ahw.revision_id); | 2303 | brd_name, serial_num, adapter->ahw.revision_id); |
2311 | printk(KERN_INFO "NetXen Firmware version %d.%d.%d\n", | ||
2312 | fw_major, fw_minor, fw_build); | ||
2313 | } | 2304 | } |
2314 | 2305 | ||
2315 | if (NETXEN_VERSION_CODE(fw_major, fw_minor, fw_build) < | 2306 | if (adapter->fw_version < NETXEN_VERSION_CODE(3, 4, 216)) { |
2316 | NETXEN_VERSION_CODE(3, 4, 216)) { | ||
2317 | adapter->driver_mismatch = 1; | 2307 | adapter->driver_mismatch = 1; |
2318 | printk(KERN_ERR "%s: firmware version %d.%d.%d unsupported\n", | 2308 | dev_warn(&pdev->dev, "firmware version %d.%d.%d unsupported\n", |
2319 | netxen_nic_driver_name, | ||
2320 | fw_major, fw_minor, fw_build); | 2309 | fw_major, fw_minor, fw_build); |
2321 | return; | 2310 | return; |
2322 | } | 2311 | } |
2312 | |||
2313 | dev_info(&pdev->dev, "firmware version %d.%d.%d\n", | ||
2314 | fw_major, fw_minor, fw_build); | ||
2315 | |||
2316 | if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) { | ||
2317 | adapter->hw_read_wx(adapter, | ||
2318 | NETXEN_MIU_MN_CONTROL, &i, 4); | ||
2319 | adapter->ahw.cut_through = (i & 0x4) ? 1 : 0; | ||
2320 | dev_info(&pdev->dev, "firmware running in %s mode\n", | ||
2321 | adapter->ahw.cut_through ? "cut-through" : "legacy"); | ||
2322 | } | ||
2323 | } | 2323 | } |
2324 | 2324 | ||
diff --git a/drivers/net/netxen/netxen_nic_hw.h b/drivers/net/netxen/netxen_nic_hw.h index 9fb51627ee54..04b47a7993cd 100644 --- a/drivers/net/netxen/netxen_nic_hw.h +++ b/drivers/net/netxen/netxen_nic_hw.h | |||
@@ -57,7 +57,6 @@ struct netxen_adapter; | |||
57 | 57 | ||
58 | struct netxen_port; | 58 | struct netxen_port; |
59 | void netxen_nic_set_link_parameters(struct netxen_adapter *adapter); | 59 | void netxen_nic_set_link_parameters(struct netxen_adapter *adapter); |
60 | void netxen_nic_flash_print(struct netxen_adapter *adapter); | ||
61 | 60 | ||
62 | typedef u8 netxen_ethernet_macaddr_t[6]; | 61 | typedef u8 netxen_ethernet_macaddr_t[6]; |
63 | 62 | ||
diff --git a/drivers/net/netxen/netxen_nic_init.c b/drivers/net/netxen/netxen_nic_init.c index bd5e0d692230..120b480c1e82 100644 --- a/drivers/net/netxen/netxen_nic_init.c +++ b/drivers/net/netxen/netxen_nic_init.c | |||
@@ -316,7 +316,7 @@ err_out: | |||
316 | 316 | ||
317 | void netxen_initialize_adapter_ops(struct netxen_adapter *adapter) | 317 | void netxen_initialize_adapter_ops(struct netxen_adapter *adapter) |
318 | { | 318 | { |
319 | switch (adapter->ahw.board_type) { | 319 | switch (adapter->ahw.port_type) { |
320 | case NETXEN_NIC_GBE: | 320 | case NETXEN_NIC_GBE: |
321 | adapter->enable_phy_interrupts = | 321 | adapter->enable_phy_interrupts = |
322 | netxen_niu_gbe_enable_phy_interrupts; | 322 | netxen_niu_gbe_enable_phy_interrupts; |
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c index 3b4d923f947d..9445277321d7 100644 --- a/drivers/net/netxen/netxen_nic_main.c +++ b/drivers/net/netxen/netxen_nic_main.c | |||
@@ -212,7 +212,7 @@ nx_update_dma_mask(struct netxen_adapter *adapter) | |||
212 | 212 | ||
213 | static void netxen_check_options(struct netxen_adapter *adapter) | 213 | static void netxen_check_options(struct netxen_adapter *adapter) |
214 | { | 214 | { |
215 | switch (adapter->ahw.boardcfg.board_type) { | 215 | switch (adapter->ahw.board_type) { |
216 | case NETXEN_BRDTYPE_P3_HMEZ: | 216 | case NETXEN_BRDTYPE_P3_HMEZ: |
217 | case NETXEN_BRDTYPE_P3_XG_LOM: | 217 | case NETXEN_BRDTYPE_P3_XG_LOM: |
218 | case NETXEN_BRDTYPE_P3_10G_CX4: | 218 | case NETXEN_BRDTYPE_P3_10G_CX4: |
@@ -250,7 +250,7 @@ static void netxen_check_options(struct netxen_adapter *adapter) | |||
250 | 250 | ||
251 | case NETXEN_BRDTYPE_P3_10G_TP: | 251 | case NETXEN_BRDTYPE_P3_10G_TP: |
252 | adapter->msix_supported = !!use_msi_x; | 252 | adapter->msix_supported = !!use_msi_x; |
253 | if (adapter->ahw.board_type == NETXEN_NIC_XGBE) | 253 | if (adapter->ahw.port_type == NETXEN_NIC_XGBE) |
254 | adapter->max_rx_desc_count = MAX_RCV_DESCRIPTORS_10G; | 254 | adapter->max_rx_desc_count = MAX_RCV_DESCRIPTORS_10G; |
255 | else | 255 | else |
256 | adapter->max_rx_desc_count = MAX_RCV_DESCRIPTORS_1G; | 256 | adapter->max_rx_desc_count = MAX_RCV_DESCRIPTORS_1G; |
@@ -261,7 +261,7 @@ static void netxen_check_options(struct netxen_adapter *adapter) | |||
261 | adapter->max_rx_desc_count = MAX_RCV_DESCRIPTORS_1G; | 261 | adapter->max_rx_desc_count = MAX_RCV_DESCRIPTORS_1G; |
262 | 262 | ||
263 | printk(KERN_WARNING "Unknown board type(0x%x)\n", | 263 | printk(KERN_WARNING "Unknown board type(0x%x)\n", |
264 | adapter->ahw.boardcfg.board_type); | 264 | adapter->ahw.board_type); |
265 | break; | 265 | break; |
266 | } | 266 | } |
267 | 267 | ||
@@ -330,7 +330,7 @@ static void netxen_set_port_mode(struct netxen_adapter *adapter) | |||
330 | { | 330 | { |
331 | u32 val, data; | 331 | u32 val, data; |
332 | 332 | ||
333 | val = adapter->ahw.boardcfg.board_type; | 333 | val = adapter->ahw.board_type; |
334 | if ((val == NETXEN_BRDTYPE_P3_HMEZ) || | 334 | if ((val == NETXEN_BRDTYPE_P3_HMEZ) || |
335 | (val == NETXEN_BRDTYPE_P3_XG_LOM)) { | 335 | (val == NETXEN_BRDTYPE_P3_XG_LOM)) { |
336 | if (port_mode == NETXEN_PORT_MODE_802_3_AP) { | 336 | if (port_mode == NETXEN_PORT_MODE_802_3_AP) { |
@@ -523,8 +523,6 @@ netxen_setup_pci_map(struct netxen_adapter *adapter) | |||
523 | void __iomem *mem_ptr2 = NULL; | 523 | void __iomem *mem_ptr2 = NULL; |
524 | void __iomem *db_ptr = NULL; | 524 | void __iomem *db_ptr = NULL; |
525 | 525 | ||
526 | unsigned long first_page_group_end; | ||
527 | unsigned long first_page_group_start; | ||
528 | unsigned long mem_base, mem_len, db_base, db_len = 0, pci_len0 = 0; | 526 | unsigned long mem_base, mem_len, db_base, db_len = 0, pci_len0 = 0; |
529 | 527 | ||
530 | struct pci_dev *pdev = adapter->pdev; | 528 | struct pci_dev *pdev = adapter->pdev; |
@@ -562,14 +560,10 @@ netxen_setup_pci_map(struct netxen_adapter *adapter) | |||
562 | SECOND_PAGE_GROUP_SIZE); | 560 | SECOND_PAGE_GROUP_SIZE); |
563 | mem_ptr2 = ioremap(mem_base + THIRD_PAGE_GROUP_START, | 561 | mem_ptr2 = ioremap(mem_base + THIRD_PAGE_GROUP_START, |
564 | THIRD_PAGE_GROUP_SIZE); | 562 | THIRD_PAGE_GROUP_SIZE); |
565 | first_page_group_start = FIRST_PAGE_GROUP_START; | ||
566 | first_page_group_end = FIRST_PAGE_GROUP_END; | ||
567 | } else if (mem_len == NETXEN_PCI_32MB_SIZE) { | 563 | } else if (mem_len == NETXEN_PCI_32MB_SIZE) { |
568 | mem_ptr1 = ioremap(mem_base, SECOND_PAGE_GROUP_SIZE); | 564 | mem_ptr1 = ioremap(mem_base, SECOND_PAGE_GROUP_SIZE); |
569 | mem_ptr2 = ioremap(mem_base + THIRD_PAGE_GROUP_START - | 565 | mem_ptr2 = ioremap(mem_base + THIRD_PAGE_GROUP_START - |
570 | SECOND_PAGE_GROUP_START, THIRD_PAGE_GROUP_SIZE); | 566 | SECOND_PAGE_GROUP_START, THIRD_PAGE_GROUP_SIZE); |
571 | first_page_group_start = 0; | ||
572 | first_page_group_end = 0; | ||
573 | } else if (mem_len == NETXEN_PCI_2MB_SIZE) { | 567 | } else if (mem_len == NETXEN_PCI_2MB_SIZE) { |
574 | adapter->hw_write_wx = netxen_nic_hw_write_wx_2M; | 568 | adapter->hw_write_wx = netxen_nic_hw_write_wx_2M; |
575 | adapter->hw_read_wx = netxen_nic_hw_read_wx_2M; | 569 | adapter->hw_read_wx = netxen_nic_hw_read_wx_2M; |
@@ -589,8 +583,6 @@ netxen_setup_pci_map(struct netxen_adapter *adapter) | |||
589 | return -EIO; | 583 | return -EIO; |
590 | } | 584 | } |
591 | pci_len0 = mem_len; | 585 | pci_len0 = mem_len; |
592 | first_page_group_start = 0; | ||
593 | first_page_group_end = 0; | ||
594 | 586 | ||
595 | adapter->ahw.ddr_mn_window = 0; | 587 | adapter->ahw.ddr_mn_window = 0; |
596 | adapter->ahw.qdr_sn_window = 0; | 588 | adapter->ahw.qdr_sn_window = 0; |
@@ -611,8 +603,6 @@ netxen_setup_pci_map(struct netxen_adapter *adapter) | |||
611 | 603 | ||
612 | adapter->ahw.pci_base0 = mem_ptr0; | 604 | adapter->ahw.pci_base0 = mem_ptr0; |
613 | adapter->ahw.pci_len0 = pci_len0; | 605 | adapter->ahw.pci_len0 = pci_len0; |
614 | adapter->ahw.first_page_group_start = first_page_group_start; | ||
615 | adapter->ahw.first_page_group_end = first_page_group_end; | ||
616 | adapter->ahw.pci_base1 = mem_ptr1; | 606 | adapter->ahw.pci_base1 = mem_ptr1; |
617 | adapter->ahw.pci_base2 = mem_ptr2; | 607 | adapter->ahw.pci_base2 = mem_ptr2; |
618 | 608 | ||
@@ -679,7 +669,7 @@ netxen_start_firmware(struct netxen_adapter *adapter) | |||
679 | 669 | ||
680 | /* Initialize multicast addr pool owners */ | 670 | /* Initialize multicast addr pool owners */ |
681 | val = 0x7654; | 671 | val = 0x7654; |
682 | if (adapter->ahw.board_type == NETXEN_NIC_XGBE) | 672 | if (adapter->ahw.port_type == NETXEN_NIC_XGBE) |
683 | val |= 0x0f000000; | 673 | val |= 0x0f000000; |
684 | netxen_crb_writelit_adapter(adapter, | 674 | netxen_crb_writelit_adapter(adapter, |
685 | NETXEN_MAC_ADDR_CNTL_REG, val); | 675 | NETXEN_MAC_ADDR_CNTL_REG, val); |
@@ -870,7 +860,6 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
870 | struct netxen_adapter *adapter = NULL; | 860 | struct netxen_adapter *adapter = NULL; |
871 | int i = 0, err; | 861 | int i = 0, err; |
872 | int first_driver; | 862 | int first_driver; |
873 | u32 val; | ||
874 | int pci_func_id = PCI_FUNC(pdev->devfn); | 863 | int pci_func_id = PCI_FUNC(pdev->devfn); |
875 | uint8_t revision_id; | 864 | uint8_t revision_id; |
876 | 865 | ||
@@ -936,7 +925,6 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
936 | 925 | ||
937 | /* This will be reset for mezz cards */ | 926 | /* This will be reset for mezz cards */ |
938 | adapter->portnum = pci_func_id; | 927 | adapter->portnum = pci_func_id; |
939 | adapter->status &= ~NETXEN_NETDEV_STATUS; | ||
940 | adapter->rx_csum = 1; | 928 | adapter->rx_csum = 1; |
941 | adapter->mc_enabled = 0; | 929 | adapter->mc_enabled = 0; |
942 | if (NX_IS_REVISION_P3(revision_id)) | 930 | if (NX_IS_REVISION_P3(revision_id)) |
@@ -974,7 +962,7 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
974 | netxen_initialize_adapter_ops(adapter); | 962 | netxen_initialize_adapter_ops(adapter); |
975 | 963 | ||
976 | /* Mezz cards have PCI function 0,2,3 enabled */ | 964 | /* Mezz cards have PCI function 0,2,3 enabled */ |
977 | switch (adapter->ahw.boardcfg.board_type) { | 965 | switch (adapter->ahw.board_type) { |
978 | case NETXEN_BRDTYPE_P2_SB31_10G_IMEZ: | 966 | case NETXEN_BRDTYPE_P2_SB31_10G_IMEZ: |
979 | case NETXEN_BRDTYPE_P2_SB31_10G_HMEZ: | 967 | case NETXEN_BRDTYPE_P2_SB31_10G_HMEZ: |
980 | if (pci_func_id >= 2) | 968 | if (pci_func_id >= 2) |
@@ -1007,15 +995,7 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1007 | 995 | ||
1008 | nx_update_dma_mask(adapter); | 996 | nx_update_dma_mask(adapter); |
1009 | 997 | ||
1010 | netxen_nic_flash_print(adapter); | 998 | netxen_nic_get_firmware_info(adapter); |
1011 | |||
1012 | if (NX_IS_REVISION_P3(revision_id)) { | ||
1013 | adapter->hw_read_wx(adapter, | ||
1014 | NETXEN_MIU_MN_CONTROL, &val, 4); | ||
1015 | adapter->ahw.cut_through = (val & 0x4) ? 1 : 0; | ||
1016 | dev_info(&pdev->dev, "firmware running in %s mode\n", | ||
1017 | adapter->ahw.cut_through ? "cut through" : "legacy"); | ||
1018 | } | ||
1019 | 999 | ||
1020 | /* | 1000 | /* |
1021 | * See if the firmware gave us a virtual-physical port mapping. | 1001 | * See if the firmware gave us a virtual-physical port mapping. |
@@ -1066,7 +1046,7 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
1066 | 1046 | ||
1067 | pci_set_drvdata(pdev, adapter); | 1047 | pci_set_drvdata(pdev, adapter); |
1068 | 1048 | ||
1069 | switch (adapter->ahw.board_type) { | 1049 | switch (adapter->ahw.port_type) { |
1070 | case NETXEN_NIC_GBE: | 1050 | case NETXEN_NIC_GBE: |
1071 | dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n", | 1051 | dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n", |
1072 | adapter->netdev->name); | 1052 | adapter->netdev->name); |
@@ -1460,7 +1440,7 @@ static void netxen_nic_handle_phy_intr(struct netxen_adapter *adapter) | |||
1460 | linkup = (val == XG_LINK_UP_P3); | 1440 | linkup = (val == XG_LINK_UP_P3); |
1461 | } else { | 1441 | } else { |
1462 | val = adapter->pci_read_normalize(adapter, CRB_XG_STATE); | 1442 | val = adapter->pci_read_normalize(adapter, CRB_XG_STATE); |
1463 | if (adapter->ahw.board_type == NETXEN_NIC_GBE) | 1443 | if (adapter->ahw.port_type == NETXEN_NIC_GBE) |
1464 | linkup = (val >> port) & 1; | 1444 | linkup = (val >> port) & 1; |
1465 | else { | 1445 | else { |
1466 | val = (val >> port*8) & 0xff; | 1446 | val = (val >> port*8) & 0xff; |