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 a3bc7cc67a6f..4cb8f4a1cf4b 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) | |||
46 | int done = 0, timeout = 0; | 46 | int done = 0, timeout = 0; |
47 | 47 | ||
48 | while (!done) { | 48 | while (!done) { |
49 | done = | 49 | done = netxen_nic_reg_read(adapter, |
50 | readl(pci_base_offset | 50 | NETXEN_PCIE_REG(PCIE_SEM3_LOCK)); |
51 | (adapter, NETXEN_PCIE_REG(PCIE_SEM3_LOCK))); | ||
52 | if (done == 1) | 51 | if (done == 1) |
53 | break; | 52 | break; |
54 | if (timeout >= phy_lock_timeout) { | 53 | if (timeout >= phy_lock_timeout) { |
@@ -63,14 +62,14 @@ static int phy_lock(struct netxen_adapter *adapter) | |||
63 | } | 62 | } |
64 | } | 63 | } |
65 | 64 | ||
66 | writel(PHY_LOCK_DRIVER, | 65 | netxen_crb_writelit_adapter(adapter, |
67 | NETXEN_CRB_NORMALIZE(adapter, NETXEN_PHY_LOCK_ID)); | 66 | NETXEN_PHY_LOCK_ID, PHY_LOCK_DRIVER); |
68 | return 0; | 67 | return 0; |
69 | } | 68 | } |
70 | 69 | ||
71 | static int phy_unlock(struct netxen_adapter *adapter) | 70 | static int phy_unlock(struct netxen_adapter *adapter) |
72 | { | 71 | { |
73 | readl(pci_base_offset(adapter, NETXEN_PCIE_REG(PCIE_SEM3_UNLOCK))); | 72 | adapter->pci_read_immediate(adapter, NETXEN_PCIE_REG(PCIE_SEM3_UNLOCK)); |
74 | 73 | ||
75 | return 0; | 74 | return 0; |
76 | } | 75 | } |
@@ -109,7 +108,7 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg, | |||
109 | * so it cannot be in reset | 108 | * so it cannot be in reset |
110 | */ | 109 | */ |
111 | 110 | ||
112 | if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(0), | 111 | if (adapter->hw_read_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(0), |
113 | &mac_cfg0, 4)) | 112 | &mac_cfg0, 4)) |
114 | return -EIO; | 113 | return -EIO; |
115 | if (netxen_gb_get_soft_reset(mac_cfg0)) { | 114 | if (netxen_gb_get_soft_reset(mac_cfg0)) { |
@@ -119,7 +118,7 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg, | |||
119 | netxen_gb_rx_reset_pb(temp); | 118 | netxen_gb_rx_reset_pb(temp); |
120 | netxen_gb_tx_reset_mac(temp); | 119 | netxen_gb_tx_reset_mac(temp); |
121 | netxen_gb_rx_reset_mac(temp); | 120 | netxen_gb_rx_reset_mac(temp); |
122 | if (netxen_nic_hw_write_wx(adapter, | 121 | if (adapter->hw_write_wx(adapter, |
123 | NETXEN_NIU_GB_MAC_CONFIG_0(0), | 122 | NETXEN_NIU_GB_MAC_CONFIG_0(0), |
124 | &temp, 4)) | 123 | &temp, 4)) |
125 | return -EIO; | 124 | return -EIO; |
@@ -129,22 +128,22 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg, | |||
129 | address = 0; | 128 | address = 0; |
130 | netxen_gb_mii_mgmt_reg_addr(address, reg); | 129 | netxen_gb_mii_mgmt_reg_addr(address, reg); |
131 | netxen_gb_mii_mgmt_phy_addr(address, phy); | 130 | netxen_gb_mii_mgmt_phy_addr(address, phy); |
132 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_ADDR(0), | 131 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_ADDR(0), |
133 | &address, 4)) | 132 | &address, 4)) |
134 | return -EIO; | 133 | return -EIO; |
135 | command = 0; /* turn off any prior activity */ | 134 | command = 0; /* turn off any prior activity */ |
136 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0), | 135 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0), |
137 | &command, 4)) | 136 | &command, 4)) |
138 | return -EIO; | 137 | return -EIO; |
139 | /* send read command */ | 138 | /* send read command */ |
140 | netxen_gb_mii_mgmt_set_read_cycle(command); | 139 | netxen_gb_mii_mgmt_set_read_cycle(command); |
141 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0), | 140 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0), |
142 | &command, 4)) | 141 | &command, 4)) |
143 | return -EIO; | 142 | return -EIO; |
144 | 143 | ||
145 | status = 0; | 144 | status = 0; |
146 | do { | 145 | do { |
147 | if (netxen_nic_hw_read_wx(adapter, | 146 | if (adapter->hw_read_wx(adapter, |
148 | NETXEN_NIU_GB_MII_MGMT_INDICATE(0), | 147 | NETXEN_NIU_GB_MII_MGMT_INDICATE(0), |
149 | &status, 4)) | 148 | &status, 4)) |
150 | return -EIO; | 149 | return -EIO; |
@@ -154,7 +153,7 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg, | |||
154 | && (timeout++ < NETXEN_NIU_PHY_WAITMAX)); | 153 | && (timeout++ < NETXEN_NIU_PHY_WAITMAX)); |
155 | 154 | ||
156 | if (timeout < NETXEN_NIU_PHY_WAITMAX) { | 155 | if (timeout < NETXEN_NIU_PHY_WAITMAX) { |
157 | if (netxen_nic_hw_read_wx(adapter, | 156 | if (adapter->hw_read_wx(adapter, |
158 | NETXEN_NIU_GB_MII_MGMT_STATUS(0), | 157 | NETXEN_NIU_GB_MII_MGMT_STATUS(0), |
159 | readval, 4)) | 158 | readval, 4)) |
160 | return -EIO; | 159 | return -EIO; |
@@ -163,7 +162,7 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg, | |||
163 | result = -1; | 162 | result = -1; |
164 | 163 | ||
165 | if (restore) | 164 | if (restore) |
166 | if (netxen_nic_hw_write_wx(adapter, | 165 | if (adapter->hw_write_wx(adapter, |
167 | NETXEN_NIU_GB_MAC_CONFIG_0(0), | 166 | NETXEN_NIU_GB_MAC_CONFIG_0(0), |
168 | &mac_cfg0, 4)) | 167 | &mac_cfg0, 4)) |
169 | return -EIO; | 168 | return -EIO; |
@@ -201,7 +200,7 @@ int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, long reg, | |||
201 | * cannot be in reset | 200 | * cannot be in reset |
202 | */ | 201 | */ |
203 | 202 | ||
204 | if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(0), | 203 | if (adapter->hw_read_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(0), |
205 | &mac_cfg0, 4)) | 204 | &mac_cfg0, 4)) |
206 | return -EIO; | 205 | return -EIO; |
207 | if (netxen_gb_get_soft_reset(mac_cfg0)) { | 206 | if (netxen_gb_get_soft_reset(mac_cfg0)) { |
@@ -212,7 +211,7 @@ int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, long reg, | |||
212 | netxen_gb_tx_reset_mac(temp); | 211 | netxen_gb_tx_reset_mac(temp); |
213 | netxen_gb_rx_reset_mac(temp); | 212 | netxen_gb_rx_reset_mac(temp); |
214 | 213 | ||
215 | if (netxen_nic_hw_write_wx(adapter, | 214 | if (adapter->hw_write_wx(adapter, |
216 | NETXEN_NIU_GB_MAC_CONFIG_0(0), | 215 | NETXEN_NIU_GB_MAC_CONFIG_0(0), |
217 | &temp, 4)) | 216 | &temp, 4)) |
218 | return -EIO; | 217 | return -EIO; |
@@ -220,24 +219,24 @@ int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, long reg, | |||
220 | } | 219 | } |
221 | 220 | ||
222 | command = 0; /* turn off any prior activity */ | 221 | command = 0; /* turn off any prior activity */ |
223 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0), | 222 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_COMMAND(0), |
224 | &command, 4)) | 223 | &command, 4)) |
225 | return -EIO; | 224 | return -EIO; |
226 | 225 | ||
227 | address = 0; | 226 | address = 0; |
228 | netxen_gb_mii_mgmt_reg_addr(address, reg); | 227 | netxen_gb_mii_mgmt_reg_addr(address, reg); |
229 | netxen_gb_mii_mgmt_phy_addr(address, phy); | 228 | netxen_gb_mii_mgmt_phy_addr(address, phy); |
230 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_ADDR(0), | 229 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_ADDR(0), |
231 | &address, 4)) | 230 | &address, 4)) |
232 | return -EIO; | 231 | return -EIO; |
233 | 232 | ||
234 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_CTRL(0), | 233 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_CTRL(0), |
235 | &val, 4)) | 234 | &val, 4)) |
236 | return -EIO; | 235 | return -EIO; |
237 | 236 | ||
238 | status = 0; | 237 | status = 0; |
239 | do { | 238 | do { |
240 | if (netxen_nic_hw_read_wx(adapter, | 239 | if (adapter->hw_read_wx(adapter, |
241 | NETXEN_NIU_GB_MII_MGMT_INDICATE(0), | 240 | NETXEN_NIU_GB_MII_MGMT_INDICATE(0), |
242 | &status, 4)) | 241 | &status, 4)) |
243 | return -EIO; | 242 | return -EIO; |
@@ -252,7 +251,7 @@ int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, long reg, | |||
252 | 251 | ||
253 | /* restore the state of port 0 MAC in case we tampered with it */ | 252 | /* restore the state of port 0 MAC in case we tampered with it */ |
254 | if (restore) | 253 | if (restore) |
255 | if (netxen_nic_hw_write_wx(adapter, | 254 | if (adapter->hw_write_wx(adapter, |
256 | NETXEN_NIU_GB_MAC_CONFIG_0(0), | 255 | NETXEN_NIU_GB_MAC_CONFIG_0(0), |
257 | &mac_cfg0, 4)) | 256 | &mac_cfg0, 4)) |
258 | return -EIO; | 257 | return -EIO; |
@@ -401,14 +400,16 @@ int netxen_niu_gbe_init_port(struct netxen_adapter *adapter, int port) | |||
401 | { | 400 | { |
402 | int result = 0; | 401 | int result = 0; |
403 | __u32 status; | 402 | __u32 status; |
403 | |||
404 | if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) | ||
405 | return 0; | ||
406 | |||
404 | if (adapter->disable_phy_interrupts) | 407 | if (adapter->disable_phy_interrupts) |
405 | adapter->disable_phy_interrupts(adapter); | 408 | adapter->disable_phy_interrupts(adapter); |
406 | mdelay(2); | 409 | mdelay(2); |
407 | 410 | ||
408 | if (0 == | 411 | if (0 == netxen_niu_gbe_phy_read(adapter, |
409 | netxen_niu_gbe_phy_read(adapter, | 412 | NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS, &status)) { |
410 | NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS, | ||
411 | &status)) { | ||
412 | if (netxen_get_phy_link(status)) { | 413 | if (netxen_get_phy_link(status)) { |
413 | if (netxen_get_phy_speed(status) == 2) { | 414 | if (netxen_get_phy_speed(status) == 2) { |
414 | netxen_niu_gbe_set_gmii_mode(adapter, port, 1); | 415 | 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) | |||
456 | 457 | ||
457 | int netxen_niu_xg_init_port(struct netxen_adapter *adapter, int port) | 458 | int netxen_niu_xg_init_port(struct netxen_adapter *adapter, int port) |
458 | { | 459 | { |
459 | u32 portnum = adapter->physical_port; | 460 | if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { |
460 | 461 | netxen_crb_writelit_adapter(adapter, | |
461 | netxen_crb_writelit_adapter(adapter, | 462 | NETXEN_NIU_XGE_CONFIG_1+(0x10000*port), 0x1447); |
462 | NETXEN_NIU_XGE_CONFIG_1+(0x10000*portnum), 0x1447); | 463 | netxen_crb_writelit_adapter(adapter, |
463 | netxen_crb_writelit_adapter(adapter, | 464 | NETXEN_NIU_XGE_CONFIG_0+(0x10000*port), 0x5); |
464 | NETXEN_NIU_XGE_CONFIG_0+(0x10000*portnum), 0x5); | 465 | } |
465 | 466 | ||
466 | return 0; | 467 | return 0; |
467 | } | 468 | } |
@@ -581,10 +582,10 @@ static int netxen_niu_macaddr_get(struct netxen_adapter *adapter, | |||
581 | if ((phy < 0) || (phy > 3)) | 582 | if ((phy < 0) || (phy > 3)) |
582 | return -EINVAL; | 583 | return -EINVAL; |
583 | 584 | ||
584 | if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_0(phy), | 585 | if (adapter->hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_0(phy), |
585 | &stationhigh, 4)) | 586 | &stationhigh, 4)) |
586 | return -EIO; | 587 | return -EIO; |
587 | if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_1(phy), | 588 | if (adapter->hw_read_wx(adapter, NETXEN_NIU_GB_STATION_ADDR_1(phy), |
588 | &stationlow, 4)) | 589 | &stationlow, 4)) |
589 | return -EIO; | 590 | return -EIO; |
590 | ((__le32 *)val)[1] = cpu_to_le32(stationhigh); | 591 | ((__le32 *)val)[1] = cpu_to_le32(stationhigh); |
@@ -613,14 +614,14 @@ int netxen_niu_macaddr_set(struct netxen_adapter *adapter, | |||
613 | temp[0] = temp[1] = 0; | 614 | temp[0] = temp[1] = 0; |
614 | memcpy(temp + 2, addr, 2); | 615 | memcpy(temp + 2, addr, 2); |
615 | val = le32_to_cpu(*(__le32 *)temp); | 616 | val = le32_to_cpu(*(__le32 *)temp); |
616 | if (netxen_nic_hw_write_wx | 617 | if (adapter->hw_write_wx(adapter, |
617 | (adapter, NETXEN_NIU_GB_STATION_ADDR_1(phy), &val, 4)) | 618 | NETXEN_NIU_GB_STATION_ADDR_1(phy), &val, 4)) |
618 | return -EIO; | 619 | return -EIO; |
619 | 620 | ||
620 | memcpy(temp, ((u8 *) addr) + 2, sizeof(__le32)); | 621 | memcpy(temp, ((u8 *) addr) + 2, sizeof(__le32)); |
621 | val = le32_to_cpu(*(__le32 *)temp); | 622 | val = le32_to_cpu(*(__le32 *)temp); |
622 | if (netxen_nic_hw_write_wx | 623 | if (adapter->hw_write_wx(adapter, |
623 | (adapter, NETXEN_NIU_GB_STATION_ADDR_0(phy), &val, 4)) | 624 | NETXEN_NIU_GB_STATION_ADDR_0(phy), &val, 4)) |
624 | return -2; | 625 | return -2; |
625 | 626 | ||
626 | netxen_niu_macaddr_get(adapter, | 627 | netxen_niu_macaddr_get(adapter, |
@@ -654,7 +655,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter, | |||
654 | 655 | ||
655 | mac_cfg0 = 0; | 656 | mac_cfg0 = 0; |
656 | netxen_gb_soft_reset(mac_cfg0); | 657 | netxen_gb_soft_reset(mac_cfg0); |
657 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), | 658 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), |
658 | &mac_cfg0, 4)) | 659 | &mac_cfg0, 4)) |
659 | return -EIO; | 660 | return -EIO; |
660 | mac_cfg0 = 0; | 661 | mac_cfg0 = 0; |
@@ -666,7 +667,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter, | |||
666 | netxen_gb_tx_reset_mac(mac_cfg0); | 667 | netxen_gb_tx_reset_mac(mac_cfg0); |
667 | netxen_gb_rx_reset_mac(mac_cfg0); | 668 | netxen_gb_rx_reset_mac(mac_cfg0); |
668 | 669 | ||
669 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), | 670 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), |
670 | &mac_cfg0, 4)) | 671 | &mac_cfg0, 4)) |
671 | return -EIO; | 672 | return -EIO; |
672 | mac_cfg1 = 0; | 673 | mac_cfg1 = 0; |
@@ -679,7 +680,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter, | |||
679 | 680 | ||
680 | if (mode == NETXEN_NIU_10_100_MB) { | 681 | if (mode == NETXEN_NIU_10_100_MB) { |
681 | netxen_gb_set_intfmode(mac_cfg1, 1); | 682 | netxen_gb_set_intfmode(mac_cfg1, 1); |
682 | if (netxen_nic_hw_write_wx(adapter, | 683 | if (adapter->hw_write_wx(adapter, |
683 | NETXEN_NIU_GB_MAC_CONFIG_1(port), | 684 | NETXEN_NIU_GB_MAC_CONFIG_1(port), |
684 | &mac_cfg1, 4)) | 685 | &mac_cfg1, 4)) |
685 | return -EIO; | 686 | return -EIO; |
@@ -692,7 +693,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter, | |||
692 | 693 | ||
693 | } else if (mode == NETXEN_NIU_1000_MB) { | 694 | } else if (mode == NETXEN_NIU_1000_MB) { |
694 | netxen_gb_set_intfmode(mac_cfg1, 2); | 695 | netxen_gb_set_intfmode(mac_cfg1, 2); |
695 | if (netxen_nic_hw_write_wx(adapter, | 696 | if (adapter->hw_write_wx(adapter, |
696 | NETXEN_NIU_GB_MAC_CONFIG_1(port), | 697 | NETXEN_NIU_GB_MAC_CONFIG_1(port), |
697 | &mac_cfg1, 4)) | 698 | &mac_cfg1, 4)) |
698 | return -EIO; | 699 | return -EIO; |
@@ -704,7 +705,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter, | |||
704 | } | 705 | } |
705 | mii_cfg = 0; | 706 | mii_cfg = 0; |
706 | netxen_gb_set_mii_mgmt_clockselect(mii_cfg, 7); | 707 | netxen_gb_set_mii_mgmt_clockselect(mii_cfg, 7); |
707 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_CONFIG(port), | 708 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MII_MGMT_CONFIG(port), |
708 | &mii_cfg, 4)) | 709 | &mii_cfg, 4)) |
709 | return -EIO; | 710 | return -EIO; |
710 | mac_cfg0 = 0; | 711 | mac_cfg0 = 0; |
@@ -713,7 +714,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter, | |||
713 | netxen_gb_unset_rx_flowctl(mac_cfg0); | 714 | netxen_gb_unset_rx_flowctl(mac_cfg0); |
714 | netxen_gb_unset_tx_flowctl(mac_cfg0); | 715 | netxen_gb_unset_tx_flowctl(mac_cfg0); |
715 | 716 | ||
716 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), | 717 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), |
717 | &mac_cfg0, 4)) | 718 | &mac_cfg0, 4)) |
718 | return -EIO; | 719 | return -EIO; |
719 | return 0; | 720 | return 0; |
@@ -730,7 +731,7 @@ int netxen_niu_disable_gbe_port(struct netxen_adapter *adapter) | |||
730 | return -EINVAL; | 731 | return -EINVAL; |
731 | mac_cfg0 = 0; | 732 | mac_cfg0 = 0; |
732 | netxen_gb_soft_reset(mac_cfg0); | 733 | netxen_gb_soft_reset(mac_cfg0); |
733 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), | 734 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), |
734 | &mac_cfg0, 4)) | 735 | &mac_cfg0, 4)) |
735 | return -EIO; | 736 | return -EIO; |
736 | return 0; | 737 | return 0; |
@@ -746,7 +747,7 @@ int netxen_niu_disable_xg_port(struct netxen_adapter *adapter) | |||
746 | return -EINVAL; | 747 | return -EINVAL; |
747 | 748 | ||
748 | mac_cfg = 0; | 749 | mac_cfg = 0; |
749 | if (netxen_nic_hw_write_wx(adapter, | 750 | if (adapter->hw_write_wx(adapter, |
750 | NETXEN_NIU_XGE_CONFIG_0 + (0x10000 * port), &mac_cfg, 4)) | 751 | NETXEN_NIU_XGE_CONFIG_0 + (0x10000 * port), &mac_cfg, 4)) |
751 | return -EIO; | 752 | return -EIO; |
752 | return 0; | 753 | return 0; |
@@ -763,7 +764,7 @@ int netxen_niu_set_promiscuous_mode(struct netxen_adapter *adapter, | |||
763 | return -EINVAL; | 764 | return -EINVAL; |
764 | 765 | ||
765 | /* save previous contents */ | 766 | /* save previous contents */ |
766 | if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_GB_DROP_WRONGADDR, | 767 | if (adapter->hw_read_wx(adapter, NETXEN_NIU_GB_DROP_WRONGADDR, |
767 | ®, 4)) | 768 | ®, 4)) |
768 | return -EIO; | 769 | return -EIO; |
769 | if (mode == NETXEN_NIU_PROMISC_MODE) { | 770 | if (mode == NETXEN_NIU_PROMISC_MODE) { |
@@ -801,7 +802,7 @@ int netxen_niu_set_promiscuous_mode(struct netxen_adapter *adapter, | |||
801 | return -EIO; | 802 | return -EIO; |
802 | } | 803 | } |
803 | } | 804 | } |
804 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_GB_DROP_WRONGADDR, | 805 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_GB_DROP_WRONGADDR, |
805 | ®, 4)) | 806 | ®, 4)) |
806 | return -EIO; | 807 | return -EIO; |
807 | return 0; | 808 | return 0; |
@@ -826,13 +827,13 @@ int netxen_niu_xg_macaddr_set(struct netxen_adapter *adapter, | |||
826 | case 0: | 827 | case 0: |
827 | memcpy(temp + 2, addr, 2); | 828 | memcpy(temp + 2, addr, 2); |
828 | val = le32_to_cpu(*(__le32 *)temp); | 829 | val = le32_to_cpu(*(__le32 *)temp); |
829 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_1, | 830 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_1, |
830 | &val, 4)) | 831 | &val, 4)) |
831 | return -EIO; | 832 | return -EIO; |
832 | 833 | ||
833 | memcpy(&temp, ((u8 *) addr) + 2, sizeof(__le32)); | 834 | memcpy(&temp, ((u8 *) addr) + 2, sizeof(__le32)); |
834 | val = le32_to_cpu(*(__le32 *)temp); | 835 | val = le32_to_cpu(*(__le32 *)temp); |
835 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_HI, | 836 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_HI, |
836 | &val, 4)) | 837 | &val, 4)) |
837 | return -EIO; | 838 | return -EIO; |
838 | break; | 839 | break; |
@@ -840,13 +841,13 @@ int netxen_niu_xg_macaddr_set(struct netxen_adapter *adapter, | |||
840 | case 1: | 841 | case 1: |
841 | memcpy(temp + 2, addr, 2); | 842 | memcpy(temp + 2, addr, 2); |
842 | val = le32_to_cpu(*(__le32 *)temp); | 843 | val = le32_to_cpu(*(__le32 *)temp); |
843 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XG1_STATION_ADDR_0_1, | 844 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_XG1_STATION_ADDR_0_1, |
844 | &val, 4)) | 845 | &val, 4)) |
845 | return -EIO; | 846 | return -EIO; |
846 | 847 | ||
847 | memcpy(&temp, ((u8 *) addr) + 2, sizeof(__le32)); | 848 | memcpy(&temp, ((u8 *) addr) + 2, sizeof(__le32)); |
848 | val = le32_to_cpu(*(__le32 *)temp); | 849 | val = le32_to_cpu(*(__le32 *)temp); |
849 | if (netxen_nic_hw_write_wx(adapter, NETXEN_NIU_XG1_STATION_ADDR_0_HI, | 850 | if (adapter->hw_write_wx(adapter, NETXEN_NIU_XG1_STATION_ADDR_0_HI, |
850 | &val, 4)) | 851 | &val, 4)) |
851 | return -EIO; | 852 | return -EIO; |
852 | break; | 853 | break; |
@@ -877,10 +878,10 @@ int netxen_niu_xg_macaddr_get(struct netxen_adapter *adapter, | |||
877 | if (phy != 0) | 878 | if (phy != 0) |
878 | return -EINVAL; | 879 | return -EINVAL; |
879 | 880 | ||
880 | if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_HI, | 881 | if (adapter->hw_read_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_HI, |
881 | &stationhigh, 4)) | 882 | &stationhigh, 4)) |
882 | return -EIO; | 883 | return -EIO; |
883 | if (netxen_nic_hw_read_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_1, | 884 | if (adapter->hw_read_wx(adapter, NETXEN_NIU_XGE_STATION_ADDR_0_1, |
884 | &stationlow, 4)) | 885 | &stationlow, 4)) |
885 | return -EIO; | 886 | return -EIO; |
886 | ((__le32 *)val)[1] = cpu_to_le32(stationhigh); | 887 | ((__le32 *)val)[1] = cpu_to_le32(stationhigh); |
@@ -901,7 +902,7 @@ int netxen_niu_xg_set_promiscuous_mode(struct netxen_adapter *adapter, | |||
901 | if (port > NETXEN_NIU_MAX_XG_PORTS) | 902 | if (port > NETXEN_NIU_MAX_XG_PORTS) |
902 | return -EINVAL; | 903 | return -EINVAL; |
903 | 904 | ||
904 | if (netxen_nic_hw_read_wx(adapter, | 905 | if (adapter->hw_read_wx(adapter, |
905 | NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port), ®, 4)) | 906 | NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port), ®, 4)) |
906 | return -EIO; | 907 | return -EIO; |
907 | if (mode == NETXEN_NIU_PROMISC_MODE) | 908 | if (mode == NETXEN_NIU_PROMISC_MODE) |
@@ -909,6 +910,11 @@ int netxen_niu_xg_set_promiscuous_mode(struct netxen_adapter *adapter, | |||
909 | else | 910 | else |
910 | reg = (reg & ~0x2000UL); | 911 | reg = (reg & ~0x2000UL); |
911 | 912 | ||
913 | if (mode == NETXEN_NIU_ALLMULTI_MODE) | ||
914 | reg = (reg | 0x1000UL); | ||
915 | else | ||
916 | reg = (reg & ~0x1000UL); | ||
917 | |||
912 | netxen_crb_writelit_adapter(adapter, | 918 | netxen_crb_writelit_adapter(adapter, |
913 | NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port), reg); | 919 | NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port), reg); |
914 | 920 | ||