diff options
Diffstat (limited to 'drivers/net/netxen/netxen_nic_niu.c')
| -rw-r--r-- | drivers/net/netxen/netxen_nic_niu.c | 114 | 
1 files changed, 60 insertions, 54 deletions
diff --git a/drivers/net/netxen/netxen_nic_niu.c b/drivers/net/netxen/netxen_nic_niu.c index a3bc7cc67a6..4cb8f4a1cf4 100644 --- a/drivers/net/netxen/netxen_nic_niu.c +++ b/drivers/net/netxen/netxen_nic_niu.c @@ -46,9 +46,8 @@ static int phy_lock(struct netxen_adapter *adapter)  	int done = 0, timeout = 0;  	while (!done) { -		done = -		    readl(pci_base_offset -			  (adapter, NETXEN_PCIE_REG(PCIE_SEM3_LOCK))); +		done = netxen_nic_reg_read(adapter, +				NETXEN_PCIE_REG(PCIE_SEM3_LOCK));  		if (done == 1)  			break;  		if (timeout >= phy_lock_timeout) { @@ -63,14 +62,14 @@ static int phy_lock(struct netxen_adapter *adapter)  		}  	} -	writel(PHY_LOCK_DRIVER, -	       NETXEN_CRB_NORMALIZE(adapter, NETXEN_PHY_LOCK_ID)); +	netxen_crb_writelit_adapter(adapter, +			NETXEN_PHY_LOCK_ID, PHY_LOCK_DRIVER);  	return 0;  }  static int phy_unlock(struct netxen_adapter *adapter)  { -	readl(pci_base_offset(adapter, NETXEN_PCIE_REG(PCIE_SEM3_UNLOCK))); +	adapter->pci_read_immediate(adapter, NETXEN_PCIE_REG(PCIE_SEM3_UNLOCK));  	return 0;  } @@ -109,7 +108,7 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg,  	 * so it cannot be in reset  	 */ -	if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(0), +	if (adapter->hw_read_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(0),  				  &mac_cfg0, 4))  		return -EIO;  	if (netxen_gb_get_soft_reset(mac_cfg0)) { @@ -119,7 +118,7 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg,  		netxen_gb_rx_reset_pb(temp);  		netxen_gb_tx_reset_mac(temp);  		netxen_gb_rx_reset_mac(temp); -		if (netxen_nic_hw_write_wx(adapter, +		if (adapter->hw_write_wx(adapter,  					   NETXEN_NIU_GB_MAC_CONFIG_0(0),  					   &temp, 4))  			return -EIO; @@ -129,22 +128,22 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg,  	address = 0;  	netxen_gb_mii_mgmt_reg_addr(address, reg);  	netxen_gb_mii_mgmt_phy_addr(address, phy); -	if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_ADDR(0), +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_ADDR(0),  				   &address, 4))  		return -EIO;  	command = 0;		/* turn off any prior activity */ -	if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0), +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0),  				   &command, 4))  		return -EIO;  	/* send read command */  	netxen_gb_mii_mgmt_set_read_cycle(command); -	if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0), +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0),  				   &command, 4))  		return -EIO;  	status = 0;  	do { -		if (netxen_nic_hw_read_wx(adapter, +		if (adapter->hw_read_wx(adapter,  					  NETXEN_NIU_GB_MII_MGMT_INDICATE(0),  					  &status, 4))  			return -EIO; @@ -154,7 +153,7 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg,  		 && (timeout++ < NETXEN_NIU_PHY_WAITMAX));  	if (timeout < NETXEN_NIU_PHY_WAITMAX) { -		if (netxen_nic_hw_read_wx(adapter, +		if (adapter->hw_read_wx(adapter,  					  NETXEN_NIU_GB_MII_MGMT_STATUS(0),  					  readval, 4))  			return -EIO; @@ -163,7 +162,7 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg,  		result = -1;  	if (restore) -		if (netxen_nic_hw_write_wx(adapter, +		if (adapter->hw_write_wx(adapter,  					   NETXEN_NIU_GB_MAC_CONFIG_0(0),  					   &mac_cfg0, 4))  			return -EIO; @@ -201,7 +200,7 @@ int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, long reg,  	 * cannot be in reset  	 */ -	if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(0), +	if (adapter->hw_read_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(0),  				  &mac_cfg0, 4))  		return -EIO;  	if (netxen_gb_get_soft_reset(mac_cfg0)) { @@ -212,7 +211,7 @@ int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, long reg,  		netxen_gb_tx_reset_mac(temp);  		netxen_gb_rx_reset_mac(temp); -		if (netxen_nic_hw_write_wx(adapter, +		if (adapter->hw_write_wx(adapter,  					   NETXEN_NIU_GB_MAC_CONFIG_0(0),  					   &temp, 4))  			return -EIO; @@ -220,24 +219,24 @@ int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, long reg,  	}  	command = 0;		/* turn off any prior activity */ -	if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0), +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0),  				   &command, 4))  		return -EIO;  	address = 0;  	netxen_gb_mii_mgmt_reg_addr(address, reg);  	netxen_gb_mii_mgmt_phy_addr(address, phy); -	if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_ADDR(0), +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_ADDR(0),  				   &address, 4))  		return -EIO; -	if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_CTRL(0), +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_CTRL(0),  				   &val, 4))  		return -EIO;  	status = 0;  	do { -		if (netxen_nic_hw_read_wx(adapter, +		if (adapter->hw_read_wx(adapter,  					  NETXEN_NIU_GB_MII_MGMT_INDICATE(0),  					  &status, 4))  			return -EIO; @@ -252,7 +251,7 @@ int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, long reg,  	/* restore the state of port 0 MAC in case we tampered with it */  	if (restore) -		if (netxen_nic_hw_write_wx(adapter, +		if (adapter->hw_write_wx(adapter,  					   NETXEN_NIU_GB_MAC_CONFIG_0(0),  					   &mac_cfg0, 4))  			return -EIO; @@ -401,14 +400,16 @@ int netxen_niu_gbe_init_port(struct netxen_adapter *adapter, int port)  {  	int result = 0;  	__u32 status; + +	if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) +		return 0; +  	if (adapter->disable_phy_interrupts)  		adapter->disable_phy_interrupts(adapter);  	mdelay(2); -	if (0 == -	    netxen_niu_gbe_phy_read(adapter, -				    NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS, -				    &status)) { +	if (0 == netxen_niu_gbe_phy_read(adapter, +			NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS, &status)) {  		if (netxen_get_phy_link(status)) {  			if (netxen_get_phy_speed(status) == 2) {  				netxen_niu_gbe_set_gmii_mode(adapter, port, 1); @@ -456,12 +457,12 @@ int netxen_niu_gbe_init_port(struct netxen_adapter *adapter, int port)  int netxen_niu_xg_init_port(struct netxen_adapter *adapter, int port)  { -	u32 portnum = adapter->physical_port; - -	netxen_crb_writelit_adapter(adapter, -		NETXEN_NIU_XGE_CONFIG_1+(0x10000*portnum), 0x1447); -	netxen_crb_writelit_adapter(adapter, -		NETXEN_NIU_XGE_CONFIG_0+(0x10000*portnum), 0x5); +	if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { +		netxen_crb_writelit_adapter(adapter, +			NETXEN_NIU_XGE_CONFIG_1+(0x10000*port), 0x1447); +		netxen_crb_writelit_adapter(adapter, +			NETXEN_NIU_XGE_CONFIG_0+(0x10000*port), 0x5); +	}  	return 0;  } @@ -581,10 +582,10 @@ static int netxen_niu_macaddr_get(struct netxen_adapter *adapter,  	if ((phy < 0) || (phy > 3))  		return -EINVAL; -	if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_0(phy), +	if (adapter->hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_0(phy),  				  &stationhigh, 4))  		return -EIO; -	if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_1(phy), +	if (adapter->hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_1(phy),  				  &stationlow, 4))  		return -EIO;  	((__le32 *)val)[1] = cpu_to_le32(stationhigh); @@ -613,14 +614,14 @@ int netxen_niu_macaddr_set(struct netxen_adapter *adapter,  		temp[0] = temp[1] = 0;  		memcpy(temp + 2, addr, 2);  		val = le32_to_cpu(*(__le32 *)temp); -		if (netxen_nic_hw_write_wx -		    (adapter, NETXEN_NIU_GB_STATION_ADDR_1(phy), &val, 4)) +		if (adapter->hw_write_wx(adapter, +				NETXEN_NIU_GB_STATION_ADDR_1(phy), &val, 4))  			return -EIO;  		memcpy(temp, ((u8 *) addr) + 2, sizeof(__le32));  		val = le32_to_cpu(*(__le32 *)temp); -		if (netxen_nic_hw_write_wx -		    (adapter, NETXEN_NIU_GB_STATION_ADDR_0(phy), &val, 4)) +		if (adapter->hw_write_wx(adapter, +				NETXEN_NIU_GB_STATION_ADDR_0(phy), &val, 4))  			return -2;  		netxen_niu_macaddr_get(adapter, @@ -654,7 +655,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter,  	mac_cfg0 = 0;  	netxen_gb_soft_reset(mac_cfg0); -	if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),  				   &mac_cfg0, 4))  		return -EIO;  	mac_cfg0 = 0; @@ -666,7 +667,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter,  	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), +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),  				   &mac_cfg0, 4))  		return -EIO;  	mac_cfg1 = 0; @@ -679,7 +680,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter,  	if (mode == NETXEN_NIU_10_100_MB) {  		netxen_gb_set_intfmode(mac_cfg1, 1); -		if (netxen_nic_hw_write_wx(adapter, +		if (adapter->hw_write_wx(adapter,  					   NETXEN_NIU_GB_MAC_CONFIG_1(port),  					   &mac_cfg1, 4))  			return -EIO; @@ -692,7 +693,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter,  	} else if (mode == NETXEN_NIU_1000_MB) {  		netxen_gb_set_intfmode(mac_cfg1, 2); -		if (netxen_nic_hw_write_wx(adapter, +		if (adapter->hw_write_wx(adapter,  					   NETXEN_NIU_GB_MAC_CONFIG_1(port),  					   &mac_cfg1, 4))  			return -EIO; @@ -704,7 +705,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter,  	}  	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), +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_CONFIG(port),  				   &mii_cfg, 4))  		return -EIO;  	mac_cfg0 = 0; @@ -713,7 +714,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter,  	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), +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),  				   &mac_cfg0, 4))  		return -EIO;  	return 0; @@ -730,7 +731,7 @@ int netxen_niu_disable_gbe_port(struct netxen_adapter *adapter)  		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), +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),  				   &mac_cfg0, 4))  		return -EIO;  	return 0; @@ -746,7 +747,7 @@ int netxen_niu_disable_xg_port(struct netxen_adapter *adapter)  		return -EINVAL;  	mac_cfg = 0; -	if (netxen_nic_hw_write_wx(adapter, +	if (adapter->hw_write_wx(adapter,  		NETXEN_NIU_XGE_CONFIG_0 + (0x10000 * port), &mac_cfg, 4))  		return -EIO;  	return 0; @@ -763,7 +764,7 @@ int netxen_niu_set_promiscuous_mode(struct netxen_adapter *adapter,  		return -EINVAL;  	/* save previous contents */ -	if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_DROP_WRONGADDR, +	if (adapter->hw_read_wx(adapter, NETXEN_NIU_GB_DROP_WRONGADDR,  				  ®, 4))  		return -EIO;  	if (mode == NETXEN_NIU_PROMISC_MODE) { @@ -801,7 +802,7 @@ int netxen_niu_set_promiscuous_mode(struct netxen_adapter *adapter,  			return -EIO;  		}  	} -	if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_DROP_WRONGADDR, +	if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_DROP_WRONGADDR,  				   ®, 4))  		return -EIO;  	return 0; @@ -826,13 +827,13 @@ int netxen_niu_xg_macaddr_set(struct netxen_adapter *adapter,  	case 0:  	    memcpy(temp + 2, addr, 2);  	    val = le32_to_cpu(*(__le32 *)temp); -	    if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_1, +	    if (adapter->hw_write_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_1,  				&val, 4))  		return -EIO;  	    memcpy(&temp, ((u8 *) addr) + 2, sizeof(__le32));  	    val = le32_to_cpu(*(__le32 *)temp); -	    if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_HI, +	    if (adapter->hw_write_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_HI,  				&val, 4))  		return -EIO;  	    break; @@ -840,13 +841,13 @@ int netxen_niu_xg_macaddr_set(struct netxen_adapter *adapter,  	case 1:  	    memcpy(temp + 2, addr, 2);  	    val = le32_to_cpu(*(__le32 *)temp); -	    if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XG1_STATION_ADDR_0_1, +	    if (adapter->hw_write_wx(adapter, NETXEN_NIU_XG1_STATION_ADDR_0_1,  				&val, 4))  		return -EIO;  	    memcpy(&temp, ((u8 *) addr) + 2, sizeof(__le32));  	    val = le32_to_cpu(*(__le32 *)temp); -	    if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XG1_STATION_ADDR_0_HI, +	    if (adapter->hw_write_wx(adapter, NETXEN_NIU_XG1_STATION_ADDR_0_HI,  				&val, 4))  		return -EIO;  	    break; @@ -877,10 +878,10 @@ int netxen_niu_xg_macaddr_get(struct netxen_adapter *adapter,  	if (phy != 0)  		return -EINVAL; -	if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_HI, +	if (adapter->hw_read_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_HI,  				  &stationhigh, 4))  		return -EIO; -	if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_1, +	if (adapter->hw_read_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_1,  				  &stationlow, 4))  		return -EIO;  	((__le32 *)val)[1] = cpu_to_le32(stationhigh); @@ -901,7 +902,7 @@ int netxen_niu_xg_set_promiscuous_mode(struct netxen_adapter *adapter,  	if (port > NETXEN_NIU_MAX_XG_PORTS)  		return -EINVAL; -	if (netxen_nic_hw_read_wx(adapter, +	if (adapter->hw_read_wx(adapter,  		NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port), ®, 4))  			return -EIO;  	if (mode == NETXEN_NIU_PROMISC_MODE) @@ -909,6 +910,11 @@ int netxen_niu_xg_set_promiscuous_mode(struct netxen_adapter *adapter,  	else  		reg = (reg & ~0x2000UL); +	if (mode == NETXEN_NIU_ALLMULTI_MODE) +		reg = (reg | 0x1000UL); +	else +		reg = (reg & ~0x1000UL); +  	netxen_crb_writelit_adapter(adapter,  		NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port), reg);  |