diff -u linux-2.6.16.20/drivers/net/netxen/netxen_nic_ethtool.c linux-2.6.16.20/drivers/net/netxen/netxen_nic_ethtool.c --- linux-2.6.16.20/drivers/net/netxen/netxen_nic_ethtool.c 2006-06-06 06:58:11.000000000 -0700 +++ linux-2.6.16.20/drivers/net/netxen/netxen_nic_ethtool.c 2006-06-08 06:52:09.000000000 -0700 @@ -240,6 +240,95 @@ return NETXEN_NIC_REGS_LEN; } +struct netxen_niu_regs { + netxen_crbword_t reg[NETXEN_NIC_REGS_COUNT]; +}; + +static struct netxen_niu_regs niu_registers[] = { + { + /* GB Mode */ + { + NETXEN_NIU_GB_SERDES_RESET, + NETXEN_NIU_GB0_MII_MODE, + NETXEN_NIU_GB1_MII_MODE, + NETXEN_NIU_GB2_MII_MODE, + NETXEN_NIU_GB3_MII_MODE, + NETXEN_NIU_GB0_GMII_MODE, + NETXEN_NIU_GB1_GMII_MODE, + NETXEN_NIU_GB2_GMII_MODE, + NETXEN_NIU_GB3_GMII_MODE, + NETXEN_NIU_REMOTE_LOOPBACK, + NETXEN_NIU_GB0_HALF_DUPLEX, + NETXEN_NIU_GB1_HALF_DUPLEX, + NETXEN_NIU_RESET_SYS_FIFOS, + NETXEN_NIU_GB_CRC_DROP, + NETXEN_NIU_GB_DROP_WRONGADDR, + NETXEN_NIU_TEST_MUX_CTL, + + NETXEN_NIU_GB_MAC_CONFIG_0(0), + NETXEN_NIU_GB_MAC_CONFIG_1(0), + NETXEN_NIU_GB_HALF_DUPLEX_CTRL(0), + NETXEN_NIU_GB_MAX_FRAME_SIZE(0), + NETXEN_NIU_GB_TEST_REG(0), + NETXEN_NIU_GB_MII_MGMT_CONFIG(0), + NETXEN_NIU_GB_MII_MGMT_COMMAND(0), + NETXEN_NIU_GB_MII_MGMT_ADDR(0), + NETXEN_NIU_GB_MII_MGMT_CTRL(0), + NETXEN_NIU_GB_MII_MGMT_STATUS(0), + NETXEN_NIU_GB_MII_MGMT_INDICATE(0), + NETXEN_NIU_GB_INTERFACE_CTRL(0), + NETXEN_NIU_GB_INTERFACE_STATUS(0), + NETXEN_NIU_GB_STATION_ADDR_0(0), + NETXEN_NIU_GB_STATION_ADDR_1(0), + -1, + } + }, + { + /* XG Mode */ + { + NETXEN_NIU_XG_SINGLE_TERM, + NETXEN_NIU_XG_DRIVE_HI, + NETXEN_NIU_XG_DRIVE_LO, + NETXEN_NIU_XG_DTX, + NETXEN_NIU_XG_DEQ, + NETXEN_NIU_XG_WORD_ALIGN, + NETXEN_NIU_XG_RESET, + NETXEN_NIU_XG_POWER_DOWN, + NETXEN_NIU_XG_RESET_PLL, + NETXEN_NIU_XG_SERDES_LOOPBACK, + NETXEN_NIU_XG_DO_BYTE_ALIGN, + NETXEN_NIU_XG_TX_ENABLE, + NETXEN_NIU_XG_RX_ENABLE, + NETXEN_NIU_XG_STATUS, + NETXEN_NIU_XG_PAUSE_THRESHOLD, + NETXEN_NIU_XGE_CONFIG_0, + NETXEN_NIU_XGE_CONFIG_1, + NETXEN_NIU_XGE_IPG, + NETXEN_NIU_XGE_STATION_ADDR_0_HI, + NETXEN_NIU_XGE_STATION_ADDR_0_1, + NETXEN_NIU_XGE_STATION_ADDR_1_LO, + NETXEN_NIU_XGE_STATUS, + NETXEN_NIU_XGE_MAX_FRAME_SIZE, + NETXEN_NIU_XGE_PAUSE_FRAME_VALUE, + NETXEN_NIU_XGE_TX_BYTE_CNT, + NETXEN_NIU_XGE_TX_FRAME_CNT, + NETXEN_NIU_XGE_RX_BYTE_CNT, + NETXEN_NIU_XGE_RX_FRAME_CNT, + NETXEN_NIU_XGE_AGGR_ERROR_CNT, + NETXEN_NIU_XGE_MULTICAST_FRAME_CNT, + NETXEN_NIU_XGE_UNICAST_FRAME_CNT, + NETXEN_NIU_XGE_CRC_ERROR_CNT, + NETXEN_NIU_XGE_OVERSIZE_FRAME_ERR, + NETXEN_NIU_XGE_UNDERSIZE_FRAME_ERR, + NETXEN_NIU_XGE_LOCAL_ERROR_CNT, + NETXEN_NIU_XGE_REMOTE_ERROR_CNT, + NETXEN_NIU_XGE_CONTROL_CHAR_CNT, + NETXEN_NIU_XGE_PAUSE_FRAME_CNT, + -1, + } + } +}; + static void netxen_nic_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p) { @@ -248,6 +337,7 @@ netxen_crbword_t mode, *regs_buff = p; unsigned long flags; void *addr; + int i, window; memset(p, 0, NETXEN_NIC_REGS_LEN); regs->version = (1 << 24) | (adapter->ahw.revision_id << 16) | @@ -260,176 +350,18 @@ /* Common registers to all the modes */ NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_STRAP_VALUE_SAVE_HIGHER, ®s_buff[2]); - switch (mode) { - case 4:{ /* XGB Mode */ - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_SINGLE_TERM, - ®s_buff[3]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_DRIVE_HI, - ®s_buff[4]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_DRIVE_LO, - ®s_buff[5]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_DTX, - ®s_buff[6]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_DEQ, - ®s_buff[7]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_WORD_ALIGN, - ®s_buff[8]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_RESET, - ®s_buff[9]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_POWER_DOWN, - ®s_buff[10]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_RESET_PLL, - ®s_buff[11]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XG_SERDES_LOOPBACK, ®s_buff[12]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_DO_BYTE_ALIGN, - ®s_buff[13]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_TX_ENABLE, - ®s_buff[14]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_RX_ENABLE, - ®s_buff[15]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_STATUS, - ®s_buff[16]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XG_PAUSE_THRESHOLD, ®s_buff[17]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_CONFIG_0, - ®s_buff[18]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_CONFIG_1, - ®s_buff[19]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_IPG, - ®s_buff[20]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_STATION_ADDR_0_HI, ®s_buff[21]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_STATION_ADDR_0_1, ®s_buff[22]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_STATION_ADDR_1_LO, ®s_buff[23]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_STATUS, - ®s_buff[24]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_MAX_FRAME_SIZE, ®s_buff[25]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_PAUSE_FRAME_VALUE, ®s_buff[26]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_TX_BYTE_CNT, - ®s_buff[27]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_TX_FRAME_CNT, - ®s_buff[28]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_RX_BYTE_CNT, - ®s_buff[29]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_RX_FRAME_CNT, - ®s_buff[30]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_AGGR_ERROR_CNT, ®s_buff[31]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_MULTICAST_FRAME_CNT, - ®s_buff[32]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_UNICAST_FRAME_CNT, ®s_buff[33]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_CRC_ERROR_CNT, - ®s_buff[34]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_OVERSIZE_FRAME_ERR, ®s_buff[35]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_UNDERSIZE_FRAME_ERR, - ®s_buff[36]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_LOCAL_ERROR_CNT, ®s_buff[37]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_REMOTE_ERROR_CNT, ®s_buff[38]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_CONTROL_CHAR_CNT, ®s_buff[39]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_XGE_PAUSE_FRAME_CNT, ®s_buff[40]); - break; - } + /* GB/XGB Mode */ + mode = (mode/2) - 1; + window = 0; + if(mode <= 1) { + for ( i = 3; niu_registers[mode].reg[i - 3] != -1; i++) { + /* GB: port specific registers */ + if(mode == 0 && i >= 19) + window = port->portnum * 0x10000; - case 2:{ /* GB Mode */ - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_SERDES_RESET, - ®s_buff[3]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB0_MII_MODE, - ®s_buff[4]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB1_MII_MODE, - ®s_buff[5]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB2_MII_MODE, - ®s_buff[6]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB3_MII_MODE, - ®s_buff[7]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB0_GMII_MODE, - ®s_buff[8]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB1_GMII_MODE, - ®s_buff[9]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB2_GMII_MODE, - ®s_buff[10]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB3_GMII_MODE, - ®s_buff[11]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_REMOTE_LOOPBACK, - ®s_buff[12]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB0_HALF_DUPLEX, - ®s_buff[13]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB1_HALF_DUPLEX, - ®s_buff[14]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_RESET_SYS_FIFOS, - ®s_buff[15]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_CRC_DROP, - ®s_buff[16]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_DROP_WRONGADDR, - ®s_buff[17]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_TEST_MUX_CTL, - ®s_buff[18]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_MAC_CONFIG_0 - (port->portnum), - ®s_buff[19]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_MAC_CONFIG_1 - (port->portnum), - ®s_buff[20]); - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_GB_HALF_DUPLEX_CTRL(port->portnum), - ®s_buff[21]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_MAX_FRAME_SIZE - (port->portnum), - ®s_buff[22]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_TEST_REG - (port->portnum), - ®s_buff[23]); - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_MII_MGMT_CONFIG - (port->portnum), - ®s_buff[24]); NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_GB_MII_MGMT_COMMAND(port->portnum), - ®s_buff[25]); - - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_MII_MGMT_ADDR - (port->portnum), - ®s_buff[26]); - - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_MII_MGMT_CTRL - (port->portnum), - ®s_buff[27]); - - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_MII_MGMT_STATUS - (port->portnum), - ®s_buff[28]); - - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_GB_MII_MGMT_INDICATE(port->portnum), - ®s_buff[29]); - - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_INTERFACE_CTRL - (port->portnum), - ®s_buff[30]); - - NETXEN_NIC_LOCKED_READ_REG - (NETXEN_NIU_GB_INTERFACE_STATUS(port->portnum), - ®s_buff[31]); - - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_STATION_ADDR_0 - (port->portnum), - ®s_buff[32]); - - NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_GB_STATION_ADDR_1 - (port->portnum), - ®s_buff[33]); - break; + (niu_registers[mode].reg[i - 3] + window, + ®s_buff[i]); } } write_unlock_irqrestore(&adapter->adapter_lock, flags);
On Wed, 2006-06-07 at 11:49 +0200, Andi Kleen wrote: > On Wednesday 07 June 2006 11:39, Linsys Contractor Amit S. Kale wrote: > > > + switch (mode) { > > ... You could save a lot of code by using a table and a loop over the > registers. > > > > + case 4:{ /* XGB Mode */ > > + NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XG_SINGLE_TERM, > > + ®s_buff[3]); > > > -Andi > > -- pradeep - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html