]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/net/netxen/netxen_nic_niu.c
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
[linux-2.6-omap-h63xx.git] / drivers / net / netxen / netxen_nic_niu.c
index a3bc7cc67a6fd1c2c57c14e5bff6ef52e7c513cf..27f07f6a45b1229f8a53afd8c4026f59bbcdb055 100644 (file)
@@ -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);
@@ -609,18 +610,21 @@ int netxen_niu_macaddr_set(struct netxen_adapter *adapter,
        int i;
        DECLARE_MAC_BUF(mac);
 
+       if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
+               return 0;
+
        for (i = 0; i < 10; i++) {
                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 +658,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 +670,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 +683,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 +696,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 +708,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 +717,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;
@@ -726,11 +730,14 @@ int netxen_niu_disable_gbe_port(struct netxen_adapter *adapter)
        __u32 mac_cfg0;
        u32 port = adapter->physical_port;
 
+       if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
+               return 0;
+
        if (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),
+       if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),
                                   &mac_cfg0, 4))
                return -EIO;
        return 0;
@@ -742,11 +749,14 @@ int netxen_niu_disable_xg_port(struct netxen_adapter *adapter)
        __u32 mac_cfg;
        u32 port = adapter->physical_port;
 
+       if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
+               return 0;
+
        if (port > NETXEN_NIU_MAX_XG_PORTS)
                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;
@@ -754,7 +764,7 @@ int netxen_niu_disable_xg_port(struct netxen_adapter *adapter)
 
 /* Set promiscuous mode for a GbE interface */
 int netxen_niu_set_promiscuous_mode(struct netxen_adapter *adapter,
-                                   netxen_niu_prom_mode_t mode)
+               u32 mode)
 {
        __u32 reg;
        u32 port = adapter->physical_port;
@@ -763,7 +773,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,
                                  &reg, 4))
                return -EIO;
        if (mode == NETXEN_NIU_PROMISC_MODE) {
@@ -801,7 +811,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,
                                   &reg, 4))
                return -EIO;
        return 0;
@@ -818,6 +828,9 @@ int netxen_niu_xg_macaddr_set(struct netxen_adapter *adapter,
        u8 temp[4];
        u32 val;
 
+       if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
+               return 0;
+
        if ((phy < 0) || (phy > NETXEN_NIU_MAX_XG_PORTS))
                return -EIO;
 
@@ -826,13 +839,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 +853,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 +890,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);
@@ -893,7 +906,7 @@ int netxen_niu_xg_macaddr_get(struct netxen_adapter *adapter,
 #endif  /*  0  */
 
 int netxen_niu_xg_set_promiscuous_mode(struct netxen_adapter *adapter,
-                                      netxen_niu_prom_mode_t mode)
+               u32 mode)
 {
        __u32 reg;
        u32 port = adapter->physical_port;
@@ -901,7 +914,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), &reg, 4))
                        return -EIO;
        if (mode == NETXEN_NIU_PROMISC_MODE)
@@ -909,6 +922,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);