e1000: always call e1000_check_for_link() on e1000_ce4100 MACs.

Interrupts about link lost or rx sequence errors are not reported by
the ce4100 hardware, leading to transitions from link UP to link DOWN
never being reported.

Signed-off-by: Nicolas Schichan <nschichan@freebox.fr>
Tested-by:  Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
Nicolas Schichan 2011-07-09 00:24:18 +00:00 committed by Jeff Kirsher
parent 61463a30f6
commit 6d9e5130b9

View File

@ -2402,13 +2402,16 @@ bool e1000_has_link(struct e1000_adapter *adapter)
struct e1000_hw *hw = &adapter->hw; struct e1000_hw *hw = &adapter->hw;
bool link_active = false; bool link_active = false;
/* get_link_status is set on LSC (link status) interrupt or /* get_link_status is set on LSC (link status) interrupt or rx
* rx sequence error interrupt. get_link_status will stay * sequence error interrupt (except on intel ce4100).
* false until the e1000_check_for_link establishes link * get_link_status will stay false until the
* for copper adapters ONLY * e1000_check_for_link establishes link for copper adapters
* ONLY
*/ */
switch (hw->media_type) { switch (hw->media_type) {
case e1000_media_type_copper: case e1000_media_type_copper:
if (hw->mac_type == e1000_ce4100)
hw->get_link_status = 1;
if (hw->get_link_status) { if (hw->get_link_status) {
e1000_check_for_link(hw); e1000_check_for_link(hw);
link_active = !hw->get_link_status; link_active = !hw->get_link_status;