diff options
author | David S. Miller <davem@davemloft.net> | 2009-11-29 03:57:15 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-11-29 03:57:15 -0500 |
commit | 9b963e5d0e01461099a40117b05480f24b63381f (patch) | |
tree | 4756d554e37bf4ab7202f2c564cbe629af98b576 /drivers/net/netxen | |
parent | 3b8626ba01a8a745a3fdf22dd347edd708b0af13 (diff) | |
parent | 5fdd4baef6195a1f2960e901c8877e2105f832ca (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.h | 2 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_hdr.h | 2 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_hw.c | 55 | ||||
-rw-r--r-- | drivers/net/netxen/netxen_nic_main.c | 4 |
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 | ||
390 | int netxen_p2_nic_set_promisc(struct netxen_adapter *adapter, u32 mode) | 390 | int 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); |