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,
static int netxen_nic_reg_test(struct net_device *dev) { struct netxen_port *port = netdev_priv(dev); struct netxen_adapter *adapter = port->adapter; u32 data_read, data_written, save; __u32 mode; /* * first test the "Read Only" registers by writing which mode */ netxen_nic_read_w0(adapter, NETXEN_NIU_MODE, &mode); if (netxen_get_niu_enable_ge(mode)) { /* GB Mode */ netxen_nic_read_w0(adapter, NETXEN_NIU_GB_MII_MGMT_STATUS(port->portnum), &data_read); save = data_read; if (data_read) data_written = data_read & NETXEN_NIC_INVALID_DATA; else data_written = NETXEN_NIC_INVALID_DATA; netxen_nic_write_w0(adapter, NETXEN_NIU_GB_MII_MGMT_STATUS(port-> portnum), data_written); netxen_nic_read_w0(adapter, NETXEN_NIU_GB_MII_MGMT_STATUS(port->portnum), &data_read); if (data_written == data_read) { netxen_nic_write_w0(adapter, NETXEN_NIU_GB_MII_MGMT_STATUS(port-> portnum), save); return 0; } /* netxen_niu_gb_mii_mgmt_indicators is read only */ netxen_nic_read_w0(adapter, NETXEN_NIU_GB_MII_MGMT_INDICATE(port-> portnum), &data_read); save = data_read; if (data_read) data_written = data_read & NETXEN_NIC_INVALID_DATA; else data_written = NETXEN_NIC_INVALID_DATA; netxen_nic_write_w0(adapter, NETXEN_NIU_GB_MII_MGMT_INDICATE(port-> portnum), data_written); netxen_nic_read_w0(adapter, NETXEN_NIU_GB_MII_MGMT_INDICATE(port-> portnum), &data_read); if (data_written == data_read) { netxen_nic_write_w0(adapter, NETXEN_NIU_GB_MII_MGMT_INDICATE (port->portnum), save); return 0; } /* netxen_niu_gb_interface_status is read only */ netxen_nic_read_w0(adapter, NETXEN_NIU_GB_INTERFACE_STATUS(port-> portnum), &data_read); save = data_read; if (data_read) data_written = data_read & NETXEN_NIC_INVALID_DATA; else data_written = NETXEN_NIC_INVALID_DATA; netxen_nic_write_w0(adapter, NETXEN_NIU_GB_INTERFACE_STATUS(port-> portnum), data_written); netxen_nic_read_w0(adapter, NETXEN_NIU_GB_INTERFACE_STATUS(port-> portnum), &data_read); if (data_written == data_read) { netxen_nic_write_w0(adapter, NETXEN_NIU_GB_INTERFACE_STATUS (port->portnum), save); return 0; } } /* GB Mode */ return 1; }