aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/netxen
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2009-11-29 03:57:15 -0500
committerDavid S. Miller <davem@davemloft.net>2009-11-29 03:57:15 -0500
commit9b963e5d0e01461099a40117b05480f24b63381f (patch)
tree4756d554e37bf4ab7202f2c564cbe629af98b576 /drivers/net/netxen
parent3b8626ba01a8a745a3fdf22dd347edd708b0af13 (diff)
parent5fdd4baef6195a1f2960e901c8877e2105f832ca (diff)
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/ieee802154/fakehard.c drivers/net/e1000e/ich8lan.c drivers/net/e1000e/phy.c drivers/net/netxen/netxen_nic_init.c drivers/net/wireless/ath/ath9k/main.c
Diffstat (limited to 'drivers/net/netxen')
-rw-r--r--drivers/net/netxen/netxen_nic.h2
-rw-r--r--drivers/net/netxen/netxen_nic_hdr.h2
-rw-r--r--drivers/net/netxen/netxen_nic_hw.c55
-rw-r--r--drivers/net/netxen/netxen_nic_main.c4
4 files changed, 48 insertions, 15 deletions
diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h
index 645450d93f4e..76cd1f3e9fc8 100644
--- a/drivers/net/netxen/netxen_nic.h
+++ b/drivers/net/netxen/netxen_nic.h
@@ -1202,6 +1202,8 @@ struct netxen_adapter {
1202 u32 int_vec_bit; 1202 u32 int_vec_bit;
1203 u32 heartbit; 1203 u32 heartbit;
1204 1204
1205 u8 mac_addr[ETH_ALEN];
1206
1205 struct netxen_adapter_stats stats; 1207 struct netxen_adapter_stats stats;
1206 1208
1207 struct netxen_recv_context recv_ctx; 1209 struct netxen_recv_context recv_ctx;
diff --git a/drivers/net/netxen/netxen_nic_hdr.h b/drivers/net/netxen/netxen_nic_hdr.h
index a39155d61bad..d138fc22927a 100644
--- a/drivers/net/netxen/netxen_nic_hdr.h
+++ b/drivers/net/netxen/netxen_nic_hdr.h
@@ -545,6 +545,8 @@ enum {
545#define NETXEN_NIU_TEST_MUX_CTL (NETXEN_CRB_NIU + 0x00094) 545#define NETXEN_NIU_TEST_MUX_CTL (NETXEN_CRB_NIU + 0x00094)
546#define NETXEN_NIU_XG_PAUSE_CTL (NETXEN_CRB_NIU + 0x00098) 546#define NETXEN_NIU_XG_PAUSE_CTL (NETXEN_CRB_NIU + 0x00098)
547#define NETXEN_NIU_XG_PAUSE_LEVEL (NETXEN_CRB_NIU + 0x000dc) 547#define NETXEN_NIU_XG_PAUSE_LEVEL (NETXEN_CRB_NIU + 0x000dc)
548#define NETXEN_NIU_FRAME_COUNT_SELECT (NETXEN_CRB_NIU + 0x000ac)
549#define NETXEN_NIU_FRAME_COUNT (NETXEN_CRB_NIU + 0x000b0)
548#define NETXEN_NIU_XG_SEL (NETXEN_CRB_NIU + 0x00128) 550#define NETXEN_NIU_XG_SEL (NETXEN_CRB_NIU + 0x00128)
549#define NETXEN_NIU_GB_PAUSE_CTL (NETXEN_CRB_NIU + 0x0030c) 551#define NETXEN_NIU_GB_PAUSE_CTL (NETXEN_CRB_NIU + 0x0030c)
550 552
diff --git a/drivers/net/netxen/netxen_nic_hw.c b/drivers/net/netxen/netxen_nic_hw.c
index b3054c6cc608..e71ca30433ef 100644
--- a/drivers/net/netxen/netxen_nic_hw.c
+++ b/drivers/net/netxen/netxen_nic_hw.c
@@ -389,24 +389,51 @@ int netxen_niu_disable_xg_port(struct netxen_adapter *adapter)
389 389
390int netxen_p2_nic_set_promisc(struct netxen_adapter *adapter, u32 mode) 390int netxen_p2_nic_set_promisc(struct netxen_adapter *adapter, u32 mode)
391{ 391{
392 __u32 reg; 392 u32 mac_cfg;
393 u32 cnt = 0;
394 __u32 reg = 0x0200;
393 u32 port = adapter->physical_port; 395 u32 port = adapter->physical_port;
396 u16 board_type = adapter->ahw.board_type;
394 397
395 if (port > NETXEN_NIU_MAX_XG_PORTS) 398 if (port > NETXEN_NIU_MAX_XG_PORTS)
396 return -EINVAL; 399 return -EINVAL;
397 400
398 reg = NXRD32(adapter, NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port)); 401 mac_cfg = NXRD32(adapter, NETXEN_NIU_XGE_CONFIG_0 + (0x10000 * port));
399 if (mode == NETXEN_NIU_PROMISC_MODE) 402 mac_cfg &= ~0x4;
400 reg = (reg | 0x2000UL); 403 NXWR32(adapter, NETXEN_NIU_XGE_CONFIG_0 + (0x10000 * port), mac_cfg);
401 else
402 reg = (reg & ~0x2000UL);
403 404
404 if (mode == NETXEN_NIU_ALLMULTI_MODE) 405 if ((board_type == NETXEN_BRDTYPE_P2_SB31_10G_IMEZ) ||
405 reg = (reg | 0x1000UL); 406 (board_type == NETXEN_BRDTYPE_P2_SB31_10G_HMEZ))
406 else 407 reg = (0x20 << port);
407 reg = (reg & ~0x1000UL); 408
409 NXWR32(adapter, NETXEN_NIU_FRAME_COUNT_SELECT, reg);
410
411 mdelay(10);
412
413 while (NXRD32(adapter, NETXEN_NIU_FRAME_COUNT) && ++cnt < 20)
414 mdelay(10);
415
416 if (cnt < 20) {
417
418 reg = NXRD32(adapter,
419 NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port));
420
421 if (mode == NETXEN_NIU_PROMISC_MODE)
422 reg = (reg | 0x2000UL);
423 else
424 reg = (reg & ~0x2000UL);
425
426 if (mode == NETXEN_NIU_ALLMULTI_MODE)
427 reg = (reg | 0x1000UL);
428 else
429 reg = (reg & ~0x1000UL);
430
431 NXWR32(adapter,
432 NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port), reg);
433 }
408 434
409 NXWR32(adapter, NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port), reg); 435 mac_cfg |= 0x4;
436 NXWR32(adapter, NETXEN_NIU_XGE_CONFIG_0 + (0x10000 * port), mac_cfg);
410 437
411 return 0; 438 return 0;
412} 439}
@@ -442,7 +469,7 @@ netxen_nic_enable_mcast_filter(struct netxen_adapter *adapter)
442{ 469{
443 u32 val = 0; 470 u32 val = 0;
444 u16 port = adapter->physical_port; 471 u16 port = adapter->physical_port;
445 u8 *addr = adapter->netdev->dev_addr; 472 u8 *addr = adapter->mac_addr;
446 473
447 if (adapter->mc_enabled) 474 if (adapter->mc_enabled)
448 return 0; 475 return 0;
@@ -471,7 +498,7 @@ netxen_nic_disable_mcast_filter(struct netxen_adapter *adapter)
471{ 498{
472 u32 val = 0; 499 u32 val = 0;
473 u16 port = adapter->physical_port; 500 u16 port = adapter->physical_port;
474 u8 *addr = adapter->netdev->dev_addr; 501 u8 *addr = adapter->mac_addr;
475 502
476 if (!adapter->mc_enabled) 503 if (!adapter->mc_enabled)
477 return 0; 504 return 0;
@@ -666,7 +693,7 @@ void netxen_p3_nic_set_multi(struct net_device *netdev)
666 693
667 list_splice_tail_init(&adapter->mac_list, &del_list); 694 list_splice_tail_init(&adapter->mac_list, &del_list);
668 695
669 nx_p3_nic_add_mac(adapter, netdev->dev_addr, &del_list); 696 nx_p3_nic_add_mac(adapter, adapter->mac_addr, &del_list);
670 nx_p3_nic_add_mac(adapter, bcast_addr, &del_list); 697 nx_p3_nic_add_mac(adapter, bcast_addr, &del_list);
671 698
672 if (netdev->flags & IFF_PROMISC) { 699 if (netdev->flags & IFF_PROMISC) {
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c
index bfbf75c17cf8..838420dbc633 100644
--- a/drivers/net/netxen/netxen_nic_main.c
+++ b/drivers/net/netxen/netxen_nic_main.c
@@ -445,6 +445,7 @@ netxen_read_mac_addr(struct netxen_adapter *adapter)
445 netdev->dev_addr[i] = *(p + 5 - i); 445 netdev->dev_addr[i] = *(p + 5 - i);
446 446
447 memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len); 447 memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
448 memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len);
448 449
449 /* set station address */ 450 /* set station address */
450 451
@@ -467,6 +468,7 @@ int netxen_nic_set_mac(struct net_device *netdev, void *p)
467 netxen_napi_disable(adapter); 468 netxen_napi_disable(adapter);
468 } 469 }
469 470
471 memcpy(adapter->mac_addr, addr->sa_data, netdev->addr_len);
470 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); 472 memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
471 adapter->macaddr_set(adapter, addr->sa_data); 473 adapter->macaddr_set(adapter, addr->sa_data);
472 474
@@ -960,7 +962,7 @@ netxen_nic_up(struct netxen_adapter *adapter, struct net_device *netdev)
960 return err; 962 return err;
961 } 963 }
962 if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) 964 if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
963 adapter->macaddr_set(adapter, netdev->dev_addr); 965 adapter->macaddr_set(adapter, adapter->mac_addr);
964 966
965 adapter->set_multi(netdev); 967 adapter->set_multi(netdev);
966 adapter->set_mtu(adapter, netdev->mtu); 968 adapter->set_mtu(adapter, netdev->mtu);