Ejemplo n.º 1
0
/*
 * 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");
}
Ejemplo n.º 2
0
	  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 */
	 {
Ejemplo n.º 3
0
/* 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;
}