/* * netxen_niu_gbe_set_gmii_mode- Set GbE Mode for GbE MAC */ void netxen_niu_gbe_set_gmii_mode(struct netxen_adapter *adapter, int port, long enable) { netxen_crb_writelit_adapter(adapter, NETXEN_NIU_MODE, 0x2); netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), 0x80000000); netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), 0x0000f0025); netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB_MAC_CONFIG_1(port), 0xf2ff); netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB0_MII_MODE + (port << 3), 0); netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB0_GMII_MODE + (port << 3), 1); netxen_crb_writelit_adapter(adapter, (NETXEN_NIU_GB0_HALF_DUPLEX + port * 4), 0); netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB_MII_MGMT_CONFIG(port), 0x7); if (enable) { /* * Do NOT enable flow control until a suitable solution for * shutting down pause frames is found. */ netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), 0x5); } if (netxen_niu_gbe_enable_phy_interrupts(adapter, port)) printk(KERN_ERR PFX "ERROR enabling PHY interrupts\n"); if (netxen_niu_gbe_clear_phy_interrupts(adapter, port)) printk(KERN_ERR PFX "ERROR clearing PHY interrupts\n"); }
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, }
/* Enable a GbE interface */ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter, int port, netxen_niu_gbe_ifmode_t mode) { __u32 mac_cfg0; __u32 mac_cfg1; __u32 mii_cfg; if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS)) return -EINVAL; mac_cfg0 = 0; netxen_gb_soft_reset(mac_cfg0); if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), &mac_cfg0, 4)) return -EIO; mac_cfg0 = 0; netxen_gb_enable_tx(mac_cfg0); netxen_gb_enable_rx(mac_cfg0); netxen_gb_unset_rx_flowctl(mac_cfg0); netxen_gb_tx_reset_pb(mac_cfg0); netxen_gb_rx_reset_pb(mac_cfg0); netxen_gb_tx_reset_mac(mac_cfg0); netxen_gb_rx_reset_mac(mac_cfg0); if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), &mac_cfg0, 4)) return -EIO; mac_cfg1 = 0; netxen_gb_set_preamblelen(mac_cfg1, 0xf); netxen_gb_set_duplex(mac_cfg1); netxen_gb_set_crc_enable(mac_cfg1); netxen_gb_set_padshort(mac_cfg1); netxen_gb_set_checklength(mac_cfg1); netxen_gb_set_hugeframes(mac_cfg1); if (mode == NETXEN_NIU_10_100_MB) { netxen_gb_set_intfmode(mac_cfg1, 1); if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_1(port), &mac_cfg1, 4)) return -EIO; /* set mii mode */ netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB0_GMII_MODE + (port << 3), 0); netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB0_MII_MODE + (port << 3), 1); } else if (mode == NETXEN_NIU_1000_MB) { netxen_gb_set_intfmode(mac_cfg1, 2); if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_1(port), &mac_cfg1, 4)) return -EIO; /* set gmii mode */ netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB0_MII_MODE + (port << 3), 0); netxen_crb_writelit_adapter(adapter, NETXEN_NIU_GB0_GMII_MODE + (port << 3), 1); } mii_cfg = 0; netxen_gb_set_mii_mgmt_clockselect(mii_cfg, 7); if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_CONFIG(port), &mii_cfg, 4)) return -EIO; mac_cfg0 = 0; netxen_gb_enable_tx(mac_cfg0); netxen_gb_enable_rx(mac_cfg0); netxen_gb_unset_rx_flowctl(mac_cfg0); netxen_gb_unset_tx_flowctl(mac_cfg0); if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), &mac_cfg0, 4)) return -EIO; return 0; }