diff options
author | jfv <jfv@FreeBSD.org> | 2007-05-31 23:36:21 +0000 |
---|---|---|
committer | jfv <jfv@FreeBSD.org> | 2007-05-31 23:36:21 +0000 |
commit | f8f0945b0957e77ab770416f001e012926a9cdff (patch) | |
tree | 9cf6efeeefd74554ed01ee2389e172ee8a540487 /sys/dev/em/if_em.c | |
parent | 7dd8ed88a925a943f1963baa072f4b6c6a8c9930 (diff) | |
download | FreeBSD-src-f8f0945b0957e77ab770416f001e012926a9cdff.zip FreeBSD-src-f8f0945b0957e77ab770416f001e012926a9cdff.tar.gz |
Couple of the fixes needed revising. The ICH8 autoneg was still broken,
this change both simplifies the code and plugs a hole where the devise
was reset without keeping the management controller at bay :) Second,
the 82571 LAA reset problem was incomplete, this addition is necessary.
Just one of those days :)
Diffstat (limited to 'sys/dev/em/if_em.c')
-rw-r--r-- | sys/dev/em/if_em.c | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/sys/dev/em/if_em.c b/sys/dev/em/if_em.c index 3db569d..73d16d2 100644 --- a/sys/dev/em/if_em.c +++ b/sys/dev/em/if_em.c @@ -719,13 +719,6 @@ em_attach(device_t dev) else adapter->pcix_82544 = FALSE; - /* Get control from any management/hw control */ - if (((adapter->hw.mac.type == e1000_82573) || - (adapter->hw.mac.type == e1000_ich8lan) || - (adapter->hw.mac.type == e1000_ich9lan)) && - e1000_check_mng_mode(&adapter->hw)) - em_get_hw_control(adapter); - /* Tell the stack that the interface is not active */ adapter->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE); @@ -873,13 +866,6 @@ em_resume(device_t dev) EM_LOCK(adapter); em_init_locked(adapter); - - /* Get control from any management/hw control */ - if (((adapter->hw.mac.type == e1000_82573) || - (adapter->hw.mac.type == e1000_ich8lan) || - (adapter->hw.mac.type == e1000_ich9lan)) && - e1000_check_mng_mode(&adapter->hw)) - em_get_hw_control(adapter); em_init_manageability(adapter); if ((ifp->if_flags & IFF_UP) && @@ -2358,9 +2344,16 @@ em_local_timer(void *arg) e1000_check_for_link(&adapter->hw); em_update_link_status(adapter); em_update_stats_counters(adapter); + + /* Check for 82571 LAA reset by other port */ + if (e1000_get_laa_state_82571(&adapter->hw) == TRUE) + e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0); + if (em_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING) em_print_hw_stats(adapter); + em_smartspeed(adapter); + /* * Each second we check the watchdog to * protect against hardware hangs. @@ -2368,7 +2361,6 @@ em_local_timer(void *arg) em_watchdog(adapter); callout_reset(&adapter->timer, hz, em_local_timer, adapter); - } static void @@ -2701,6 +2693,13 @@ em_hardware_init(struct adapter *adapter) /* Issue a global reset */ e1000_reset_hw(&adapter->hw); + /* Get control from any management/hw control */ + if (((adapter->hw.mac.type == e1000_82573) || + (adapter->hw.mac.type == e1000_ich8lan) || + (adapter->hw.mac.type == e1000_ich9lan)) && + e1000_check_mng_mode(&adapter->hw)) + em_get_hw_control(adapter); + /* When hardware is reset, fifo_head is also reset */ adapter->tx_fifo_head = 0; |