aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/netxen
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/netxen')
-rw-r--r--drivers/net/netxen/netxen_nic.h13
-rw-r--r--drivers/net/netxen/netxen_nic_hw.h107
-rw-r--r--drivers/net/netxen/netxen_nic_init.c41
-rw-r--r--drivers/net/netxen/netxen_nic_niu.c240
4 files changed, 11 insertions, 390 deletions
diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h
index 7a93f8275c9d..74ccef5a5c97 100644
--- a/drivers/net/netxen/netxen_nic.h
+++ b/drivers/net/netxen/netxen_nic.h
@@ -1148,8 +1148,6 @@ struct netxen_adapter {
1148 struct netxen_recv_context recv_ctx; 1148 struct netxen_recv_context recv_ctx;
1149 struct nx_host_tx_ring *tx_ring; 1149 struct nx_host_tx_ring *tx_ring;
1150 1150
1151 int (*enable_phy_interrupts) (struct netxen_adapter *);
1152 int (*disable_phy_interrupts) (struct netxen_adapter *);
1153 int (*macaddr_set) (struct netxen_adapter *, u8 *); 1151 int (*macaddr_set) (struct netxen_adapter *, u8 *);
1154 int (*set_mtu) (struct netxen_adapter *, int); 1152 int (*set_mtu) (struct netxen_adapter *, int);
1155 int (*set_promisc) (struct netxen_adapter *, u32); 1153 int (*set_promisc) (struct netxen_adapter *, u32);
@@ -1187,22 +1185,11 @@ struct netxen_adapter {
1187 const struct firmware *fw; 1185 const struct firmware *fw;
1188}; 1186};
1189 1187
1190/* Set promiscuous mode for a GbE interface */
1191int netxen_niu_set_promiscuous_mode(struct netxen_adapter *adapter, u32 mode);
1192int netxen_niu_xg_set_promiscuous_mode(struct netxen_adapter *adapter, 1188int netxen_niu_xg_set_promiscuous_mode(struct netxen_adapter *adapter,
1193 u32 mode); 1189 u32 mode);
1194/* Generic enable for GbE ports. Will detect the speed of the link. */
1195int netxen_niu_gbe_init_port(struct netxen_adapter *adapter, int port);
1196int netxen_niu_xg_init_port(struct netxen_adapter *adapter, int port); 1190int netxen_niu_xg_init_port(struct netxen_adapter *adapter, int port);
1197
1198/* Disable a GbE interface */
1199int netxen_niu_disable_gbe_port(struct netxen_adapter *adapter);
1200int netxen_niu_disable_xg_port(struct netxen_adapter *adapter); 1191int netxen_niu_disable_xg_port(struct netxen_adapter *adapter);
1201 1192
1202int netxen_niu_xgbe_enable_phy_interrupts(struct netxen_adapter *adapter);
1203int netxen_niu_gbe_enable_phy_interrupts(struct netxen_adapter *adapter);
1204int netxen_niu_xgbe_disable_phy_interrupts(struct netxen_adapter *adapter);
1205int netxen_niu_gbe_disable_phy_interrupts(struct netxen_adapter *adapter);
1206int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg, 1193int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg,
1207 __u32 * readval); 1194 __u32 * readval);
1208int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, 1195int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter,
diff --git a/drivers/net/netxen/netxen_nic_hw.h b/drivers/net/netxen/netxen_nic_hw.h
index fc0638f2d6d0..98e4b95788b7 100644
--- a/drivers/net/netxen/netxen_nic_hw.h
+++ b/drivers/net/netxen/netxen_nic_hw.h
@@ -61,10 +61,6 @@ void netxen_nic_set_link_parameters(struct netxen_adapter *adapter);
61 * Bit 31: soft_reset => 1:reset the MAC and the SERDES, 0:no-op 61 * Bit 31: soft_reset => 1:reset the MAC and the SERDES, 0:no-op
62 */ 62 */
63 63
64#define netxen_gb_enable_tx(config_word) \
65 ((config_word) |= 1 << 0)
66#define netxen_gb_enable_rx(config_word) \
67 ((config_word) |= 1 << 2)
68#define netxen_gb_tx_flowctl(config_word) \ 64#define netxen_gb_tx_flowctl(config_word) \
69 ((config_word) |= 1 << 4) 65 ((config_word) |= 1 << 4)
70#define netxen_gb_rx_flowctl(config_word) \ 66#define netxen_gb_rx_flowctl(config_word) \
@@ -77,8 +73,6 @@ void netxen_nic_set_link_parameters(struct netxen_adapter *adapter);
77 ((config_word) |= 1 << 18) 73 ((config_word) |= 1 << 18)
78#define netxen_gb_rx_reset_mac(config_word) \ 74#define netxen_gb_rx_reset_mac(config_word) \
79 ((config_word) |= 1 << 19) 75 ((config_word) |= 1 << 19)
80#define netxen_gb_soft_reset(config_word) \
81 ((config_word) |= 1 << 31)
82 76
83#define netxen_gb_unset_tx_flowctl(config_word) \ 77#define netxen_gb_unset_tx_flowctl(config_word) \
84 ((config_word) &= ~(1 << 4)) 78 ((config_word) &= ~(1 << 4))
@@ -240,7 +234,6 @@ void netxen_nic_set_link_parameters(struct netxen_adapter *adapter);
240 * Bits 14-15 : speed => 0:10Mb/s, 1:100Mb/s, 2:1000Mb/s, 3:rsvd 234 * Bits 14-15 : speed => 0:10Mb/s, 1:100Mb/s, 2:1000Mb/s, 3:rsvd
241 */ 235 */
242 236
243#define netxen_get_phy_cablelen(config_word) (((config_word) >> 7) & 0x07)
244#define netxen_get_phy_speed(config_word) (((config_word) >> 14) & 0x03) 237#define netxen_get_phy_speed(config_word) (((config_word) >> 14) & 0x03)
245 238
246#define netxen_set_phy_speed(config_word, val) \ 239#define netxen_set_phy_speed(config_word, val) \
@@ -250,85 +243,12 @@ void netxen_nic_set_link_parameters(struct netxen_adapter *adapter);
250#define netxen_clear_phy_duplex(config_word) \ 243#define netxen_clear_phy_duplex(config_word) \
251 ((config_word) &= ~(1 << 13)) 244 ((config_word) &= ~(1 << 13))
252 245
253#define netxen_get_phy_jabber(config_word) \
254 _netxen_crb_get_bit(config_word, 0)
255#define netxen_get_phy_polarity(config_word) \
256 _netxen_crb_get_bit(config_word, 1)
257#define netxen_get_phy_recvpause(config_word) \
258 _netxen_crb_get_bit(config_word, 2)
259#define netxen_get_phy_xmitpause(config_word) \
260 _netxen_crb_get_bit(config_word, 3)
261#define netxen_get_phy_energydetect(config_word) \
262 _netxen_crb_get_bit(config_word, 4)
263#define netxen_get_phy_downshift(config_word) \
264 _netxen_crb_get_bit(config_word, 5)
265#define netxen_get_phy_crossover(config_word) \
266 _netxen_crb_get_bit(config_word, 6)
267#define netxen_get_phy_link(config_word) \ 246#define netxen_get_phy_link(config_word) \
268 _netxen_crb_get_bit(config_word, 10) 247 _netxen_crb_get_bit(config_word, 10)
269#define netxen_get_phy_resolved(config_word) \
270 _netxen_crb_get_bit(config_word, 11)
271#define netxen_get_phy_pagercvd(config_word) \
272 _netxen_crb_get_bit(config_word, 12)
273#define netxen_get_phy_duplex(config_word) \ 248#define netxen_get_phy_duplex(config_word) \
274 _netxen_crb_get_bit(config_word, 13) 249 _netxen_crb_get_bit(config_word, 13)
275 250
276/* 251/*
277 * Interrupt Register definition
278 * This definition applies to registers 18 and 19 (int enable and int status).
279 * Bit 0 : jabber
280 * Bit 1 : polarity_changed
281 * Bit 4 : energy_detect
282 * Bit 5 : downshift
283 * Bit 6 : mdi_xover_changed
284 * Bit 7 : fifo_over_underflow
285 * Bit 8 : false_carrier
286 * Bit 9 : symbol_error
287 * Bit 10: link_status_changed
288 * Bit 11: autoneg_completed
289 * Bit 12: page_received
290 * Bit 13: duplex_changed
291 * Bit 14: speed_changed
292 * Bit 15: autoneg_error
293 */
294
295#define netxen_get_phy_int_jabber(config_word) \
296 _netxen_crb_get_bit(config_word, 0)
297#define netxen_get_phy_int_polarity_changed(config_word) \
298 _netxen_crb_get_bit(config_word, 1)
299#define netxen_get_phy_int_energy_detect(config_word) \
300 _netxen_crb_get_bit(config_word, 4)
301#define netxen_get_phy_int_downshift(config_word) \
302 _netxen_crb_get_bit(config_word, 5)
303#define netxen_get_phy_int_mdi_xover_changed(config_word) \
304 _netxen_crb_get_bit(config_word, 6)
305#define netxen_get_phy_int_fifo_over_underflow(config_word) \
306 _netxen_crb_get_bit(config_word, 7)
307#define netxen_get_phy_int_false_carrier(config_word) \
308 _netxen_crb_get_bit(config_word, 8)
309#define netxen_get_phy_int_symbol_error(config_word) \
310 _netxen_crb_get_bit(config_word, 9)
311#define netxen_get_phy_int_link_status_changed(config_word) \
312 _netxen_crb_get_bit(config_word, 10)
313#define netxen_get_phy_int_autoneg_completed(config_word) \
314 _netxen_crb_get_bit(config_word, 11)
315#define netxen_get_phy_int_page_received(config_word) \
316 _netxen_crb_get_bit(config_word, 12)
317#define netxen_get_phy_int_duplex_changed(config_word) \
318 _netxen_crb_get_bit(config_word, 13)
319#define netxen_get_phy_int_speed_changed(config_word) \
320 _netxen_crb_get_bit(config_word, 14)
321#define netxen_get_phy_int_autoneg_error(config_word) \
322 _netxen_crb_get_bit(config_word, 15)
323
324#define netxen_set_phy_int_link_status_changed(config_word) \
325 ((config_word) |= 1 << 10)
326#define netxen_set_phy_int_autoneg_completed(config_word) \
327 ((config_word) |= 1 << 11)
328#define netxen_set_phy_int_speed_changed(config_word) \
329 ((config_word) |= 1 << 14)
330
331/*
332 * NIU Mode Register. 252 * NIU Mode Register.
333 * Bit 0 : enable FibreChannel 253 * Bit 0 : enable FibreChannel
334 * Bit 1 : enable 10/100/1000 Ethernet 254 * Bit 1 : enable 10/100/1000 Ethernet
@@ -343,33 +263,6 @@ void netxen_nic_set_link_parameters(struct netxen_adapter *adapter);
343#define NETXEN_NIU_ALLMULTI_MODE 2 263#define NETXEN_NIU_ALLMULTI_MODE 2
344 264
345/* 265/*
346 * NIU GB Drop CRC Register
347 *
348 * Bit 0 : drop_gb0 => 1:drop pkts with bad CRCs, 0:pass them on
349 * Bit 1 : drop_gb1 => 1:drop pkts with bad CRCs, 0:pass them on
350 * Bit 2 : drop_gb2 => 1:drop pkts with bad CRCs, 0:pass them on
351 * Bit 3 : drop_gb3 => 1:drop pkts with bad CRCs, 0:pass them on
352 */
353
354#define netxen_set_gb_drop_gb0(config_word) \
355 ((config_word) |= 1 << 0)
356#define netxen_set_gb_drop_gb1(config_word) \
357 ((config_word) |= 1 << 1)
358#define netxen_set_gb_drop_gb2(config_word) \
359 ((config_word) |= 1 << 2)
360#define netxen_set_gb_drop_gb3(config_word) \
361 ((config_word) |= 1 << 3)
362
363#define netxen_clear_gb_drop_gb0(config_word) \
364 ((config_word) &= ~(1 << 0))
365#define netxen_clear_gb_drop_gb1(config_word) \
366 ((config_word) &= ~(1 << 1))
367#define netxen_clear_gb_drop_gb2(config_word) \
368 ((config_word) &= ~(1 << 2))
369#define netxen_clear_gb_drop_gb3(config_word) \
370 ((config_word) &= ~(1 << 3))
371
372/*
373 * NIU XG MAC Config Register 266 * NIU XG MAC Config Register
374 * 267 *
375 * Bit 0 : tx_enable => 1:enable frame xmit, 0:disable 268 * Bit 0 : tx_enable => 1:enable frame xmit, 0:disable
diff --git a/drivers/net/netxen/netxen_nic_init.c b/drivers/net/netxen/netxen_nic_init.c
index 474c568adccf..f5807dae09e9 100644
--- a/drivers/net/netxen/netxen_nic_init.c
+++ b/drivers/net/netxen/netxen_nic_init.c
@@ -321,44 +321,25 @@ err_out:
321 321
322void netxen_initialize_adapter_ops(struct netxen_adapter *adapter) 322void netxen_initialize_adapter_ops(struct netxen_adapter *adapter)
323{ 323{
324 adapter->macaddr_set = netxen_p2_nic_set_mac_addr; 324 adapter->init_port = netxen_niu_xg_init_port;
325 adapter->set_multi = netxen_p2_nic_set_multi; 325 adapter->stop_port = netxen_niu_disable_xg_port;
326
327 switch (adapter->ahw.port_type) {
328 case NETXEN_NIC_GBE:
329 adapter->enable_phy_interrupts =
330 netxen_niu_gbe_enable_phy_interrupts;
331 adapter->disable_phy_interrupts =
332 netxen_niu_gbe_disable_phy_interrupts;
333 adapter->set_mtu = netxen_nic_set_mtu_gb;
334 adapter->set_promisc = netxen_niu_set_promiscuous_mode;
335 adapter->phy_read = netxen_niu_gbe_phy_read;
336 adapter->phy_write = netxen_niu_gbe_phy_write;
337 adapter->init_port = netxen_niu_gbe_init_port;
338 adapter->stop_port = netxen_niu_disable_gbe_port;
339 break;
340 326
341 case NETXEN_NIC_XGBE: 327 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
342 adapter->enable_phy_interrupts = 328 adapter->macaddr_set = netxen_p2_nic_set_mac_addr;
343 netxen_niu_xgbe_enable_phy_interrupts; 329 adapter->set_multi = netxen_p2_nic_set_multi;
344 adapter->disable_phy_interrupts =
345 netxen_niu_xgbe_disable_phy_interrupts;
346 adapter->set_mtu = netxen_nic_set_mtu_xgb; 330 adapter->set_mtu = netxen_nic_set_mtu_xgb;
347 adapter->init_port = netxen_niu_xg_init_port;
348 adapter->set_promisc = netxen_niu_xg_set_promiscuous_mode; 331 adapter->set_promisc = netxen_niu_xg_set_promiscuous_mode;
349 adapter->stop_port = netxen_niu_disable_xg_port; 332 } else {
350 break;
351
352 default:
353 break;
354 }
355
356 if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
357 adapter->set_mtu = nx_fw_cmd_set_mtu; 333 adapter->set_mtu = nx_fw_cmd_set_mtu;
358 adapter->set_promisc = netxen_p3_nic_set_promisc; 334 adapter->set_promisc = netxen_p3_nic_set_promisc;
359 adapter->macaddr_set = netxen_p3_nic_set_mac_addr; 335 adapter->macaddr_set = netxen_p3_nic_set_mac_addr;
360 adapter->set_multi = netxen_p3_nic_set_multi; 336 adapter->set_multi = netxen_p3_nic_set_multi;
361 } 337 }
338
339 if (adapter->ahw.port_type == NETXEN_NIC_GBE) {
340 adapter->phy_read = netxen_niu_gbe_phy_read;
341 adapter->phy_write = netxen_niu_gbe_phy_write;
342 }
362} 343}
363 344
364/* 345/*
diff --git a/drivers/net/netxen/netxen_nic_niu.c b/drivers/net/netxen/netxen_nic_niu.c
index 5941c79be723..8b7cd9e1851a 100644
--- a/drivers/net/netxen/netxen_nic_niu.c
+++ b/drivers/net/netxen/netxen_nic_niu.c
@@ -30,11 +30,6 @@
30 30
31#include "netxen_nic.h" 31#include "netxen_nic.h"
32 32
33#define NETXEN_GB_MAC_SOFT_RESET 0x80000000
34#define NETXEN_GB_MAC_RESET_PROT_BLK 0x000F0000
35#define NETXEN_GB_MAC_ENABLE_TX_RX 0x00000005
36#define NETXEN_GB_MAC_PAUSED_FRMS 0x00000020
37
38static long phy_lock_timeout = 100000000; 33static long phy_lock_timeout = 100000000;
39 34
40static int phy_lock(struct netxen_adapter *adapter) 35static int phy_lock(struct netxen_adapter *adapter)
@@ -227,171 +222,6 @@ int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, long reg,
227 return result; 222 return result;
228} 223}
229 224
230int netxen_niu_xgbe_enable_phy_interrupts(struct netxen_adapter *adapter)
231{
232 NXWR32(adapter, NETXEN_NIU_INT_MASK, 0x3f);
233 return 0;
234}
235
236int netxen_niu_gbe_enable_phy_interrupts(struct netxen_adapter *adapter)
237{
238 int result = 0;
239 __u32 enable = 0;
240 netxen_set_phy_int_link_status_changed(enable);
241 netxen_set_phy_int_autoneg_completed(enable);
242 netxen_set_phy_int_speed_changed(enable);
243
244 if (0 !=
245 netxen_niu_gbe_phy_write(adapter,
246 NETXEN_NIU_GB_MII_MGMT_ADDR_INT_ENABLE,
247 enable))
248 result = -EIO;
249
250 return result;
251}
252
253int netxen_niu_xgbe_disable_phy_interrupts(struct netxen_adapter *adapter)
254{
255 NXWR32(adapter, NETXEN_NIU_INT_MASK, 0x7f);
256 return 0;
257}
258
259int netxen_niu_gbe_disable_phy_interrupts(struct netxen_adapter *adapter)
260{
261 int result = 0;
262 if (0 !=
263 netxen_niu_gbe_phy_write(adapter,
264 NETXEN_NIU_GB_MII_MGMT_ADDR_INT_ENABLE, 0))
265 result = -EIO;
266
267 return result;
268}
269
270static int netxen_niu_gbe_clear_phy_interrupts(struct netxen_adapter *adapter)
271{
272 int result = 0;
273 if (0 !=
274 netxen_niu_gbe_phy_write(adapter,
275 NETXEN_NIU_GB_MII_MGMT_ADDR_INT_STATUS,
276 -EIO))
277 result = -EIO;
278
279 return result;
280}
281
282/*
283 * netxen_niu_gbe_set_mii_mode- Set 10/100 Mbit Mode for GbE MAC
284 *
285 */
286static void netxen_niu_gbe_set_mii_mode(struct netxen_adapter *adapter,
287 int port, long enable)
288{
289 NXWR32(adapter, NETXEN_NIU_MODE, 0x2);
290 NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), 0x80000000);
291 NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), 0x0000f0025);
292 NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_1(port), 0xf1ff);
293 NXWR32(adapter, NETXEN_NIU_GB0_GMII_MODE + (port << 3), 0);
294 NXWR32(adapter, NETXEN_NIU_GB0_MII_MODE + (port << 3), 1);
295 NXWR32(adapter, (NETXEN_NIU_GB0_HALF_DUPLEX + port * 4), 0);
296 NXWR32(adapter, NETXEN_NIU_GB_MII_MGMT_CONFIG(port), 0x7);
297
298 if (enable) {
299 /*
300 * Do NOT enable flow control until a suitable solution for
301 * shutting down pause frames is found.
302 */
303 NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), 0x5);
304 }
305
306 if (netxen_niu_gbe_enable_phy_interrupts(adapter))
307 printk(KERN_ERR "ERROR enabling PHY interrupts\n");
308 if (netxen_niu_gbe_clear_phy_interrupts(adapter))
309 printk(KERN_ERR "ERROR clearing PHY interrupts\n");
310}
311
312/*
313 * netxen_niu_gbe_set_gmii_mode- Set GbE Mode for GbE MAC
314 */
315static void netxen_niu_gbe_set_gmii_mode(struct netxen_adapter *adapter,
316 int port, long enable)
317{
318 NXWR32(adapter, NETXEN_NIU_MODE, 0x2);
319 NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), 0x80000000);
320 NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), 0x0000f0025);
321 NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_1(port), 0xf2ff);
322 NXWR32(adapter, NETXEN_NIU_GB0_MII_MODE + (port << 3), 0);
323 NXWR32(adapter, NETXEN_NIU_GB0_GMII_MODE + (port << 3), 1);
324 NXWR32(adapter, (NETXEN_NIU_GB0_HALF_DUPLEX + port * 4), 0);
325 NXWR32(adapter, NETXEN_NIU_GB_MII_MGMT_CONFIG(port), 0x7);
326
327 if (enable) {
328 /*
329 * Do NOT enable flow control until a suitable solution for
330 * shutting down pause frames is found.
331 */
332 NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), 0x5);
333 }
334
335 if (netxen_niu_gbe_enable_phy_interrupts(adapter))
336 printk(KERN_ERR "ERROR enabling PHY interrupts\n");
337 if (netxen_niu_gbe_clear_phy_interrupts(adapter))
338 printk(KERN_ERR "ERROR clearing PHY interrupts\n");
339}
340
341int netxen_niu_gbe_init_port(struct netxen_adapter *adapter, int port)
342{
343 int result = 0;
344 __u32 status;
345
346 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
347 return 0;
348
349 if (adapter->disable_phy_interrupts)
350 adapter->disable_phy_interrupts(adapter);
351 mdelay(2);
352
353 if (0 == netxen_niu_gbe_phy_read(adapter,
354 NETXEN_NIU_GB_MII_MGMT_ADDR_PHY_STATUS, &status)) {
355 if (netxen_get_phy_link(status)) {
356 if (netxen_get_phy_speed(status) == 2) {
357 netxen_niu_gbe_set_gmii_mode(adapter, port, 1);
358 } else if ((netxen_get_phy_speed(status) == 1)
359 || (netxen_get_phy_speed(status) == 0)) {
360 netxen_niu_gbe_set_mii_mode(adapter, port, 1);
361 } else {
362 result = -1;
363 }
364
365 } else {
366 /*
367 * We don't have link. Cable must be unconnected.
368 * Enable phy interrupts so we take action when
369 * plugged in.
370 */
371
372 NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),
373 NETXEN_GB_MAC_SOFT_RESET);
374 NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port),
375 NETXEN_GB_MAC_RESET_PROT_BLK |
376 NETXEN_GB_MAC_ENABLE_TX_RX |
377 NETXEN_GB_MAC_PAUSED_FRMS);
378 if (netxen_niu_gbe_clear_phy_interrupts(adapter))
379 printk(KERN_ERR
380 "ERROR clearing PHY interrupts\n");
381 if (netxen_niu_gbe_enable_phy_interrupts(adapter))
382 printk(KERN_ERR
383 "ERROR enabling PHY interrupts\n");
384 if (netxen_niu_gbe_clear_phy_interrupts(adapter))
385 printk(KERN_ERR
386 "ERROR clearing PHY interrupts\n");
387 result = -1;
388 }
389 } else {
390 result = -EIO;
391 }
392 return result;
393}
394
395int netxen_niu_xg_init_port(struct netxen_adapter *adapter, int port) 225int netxen_niu_xg_init_port(struct netxen_adapter *adapter, int port)
396{ 226{
397 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) { 227 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
@@ -402,24 +232,6 @@ int netxen_niu_xg_init_port(struct netxen_adapter *adapter, int port)
402 return 0; 232 return 0;
403} 233}
404 234
405/* Disable a GbE interface */
406int netxen_niu_disable_gbe_port(struct netxen_adapter *adapter)
407{
408 __u32 mac_cfg0;
409 u32 port = adapter->physical_port;
410
411 if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
412 return 0;
413
414 if (port > NETXEN_NIU_MAX_GBE_PORTS)
415 return -EINVAL;
416 mac_cfg0 = 0;
417 netxen_gb_soft_reset(mac_cfg0);
418 if (NXWR32(adapter, NETXEN_NIU_GB_MAC_CONFIG_0(port), mac_cfg0))
419 return -EIO;
420 return 0;
421}
422
423/* Disable an XG interface */ 235/* Disable an XG interface */
424int netxen_niu_disable_xg_port(struct netxen_adapter *adapter) 236int netxen_niu_disable_xg_port(struct netxen_adapter *adapter)
425{ 237{
@@ -439,58 +251,6 @@ int netxen_niu_disable_xg_port(struct netxen_adapter *adapter)
439 return 0; 251 return 0;
440} 252}
441 253
442/* Set promiscuous mode for a GbE interface */
443int netxen_niu_set_promiscuous_mode(struct netxen_adapter *adapter,
444 u32 mode)
445{
446 __u32 reg;
447 u32 port = adapter->physical_port;
448
449 if (port > NETXEN_NIU_MAX_GBE_PORTS)
450 return -EINVAL;
451
452 /* save previous contents */
453 reg = NXRD32(adapter, NETXEN_NIU_GB_DROP_WRONGADDR);
454 if (mode == NETXEN_NIU_PROMISC_MODE) {
455 switch (port) {
456 case 0:
457 netxen_clear_gb_drop_gb0(reg);
458 break;
459 case 1:
460 netxen_clear_gb_drop_gb1(reg);
461 break;
462 case 2:
463 netxen_clear_gb_drop_gb2(reg);
464 break;
465 case 3:
466 netxen_clear_gb_drop_gb3(reg);
467 break;
468 default:
469 return -EIO;
470 }
471 } else {
472 switch (port) {
473 case 0:
474 netxen_set_gb_drop_gb0(reg);
475 break;
476 case 1:
477 netxen_set_gb_drop_gb1(reg);
478 break;
479 case 2:
480 netxen_set_gb_drop_gb2(reg);
481 break;
482 case 3:
483 netxen_set_gb_drop_gb3(reg);
484 break;
485 default:
486 return -EIO;
487 }
488 }
489 if (NXWR32(adapter, NETXEN_NIU_GB_DROP_WRONGADDR, reg))
490 return -EIO;
491 return 0;
492}
493
494int netxen_niu_xg_set_promiscuous_mode(struct netxen_adapter *adapter, 254int netxen_niu_xg_set_promiscuous_mode(struct netxen_adapter *adapter,
495 u32 mode) 255 u32 mode)
496{ 256{