aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000/e1000_hw.c
diff options
context:
space:
mode:
authorAuke Kok <auke-jan.h.kok@intel.com>2006-06-27 12:07:56 -0400
committerAuke Kok <juke-jan.h.kok@intel.com>2006-06-27 12:07:56 -0400
commitf1b3a85354d3877fae45ef448e7e49c2efd692d5 (patch)
treeed0422f71c8c2b68b96ef5ccdfb2d15904e17eaf /drivers/net/e1000/e1000_hw.c
parent7dfee0cb1d506897805b663dd95e9651619a4d4d (diff)
e1000: fix adapter led blinking inconsistency
Several e1000 adapters were not blinking correctly or inconsistently. This patch cleans this up and makes them all behave the same as far as possible. Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
Diffstat (limited to 'drivers/net/e1000/e1000_hw.c')
-rw-r--r--drivers/net/e1000/e1000_hw.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/drivers/net/e1000/e1000_hw.c b/drivers/net/e1000/e1000_hw.c
index 749d621a07da..1c5b18478fb2 100644
--- a/drivers/net/e1000/e1000_hw.c
+++ b/drivers/net/e1000/e1000_hw.c
@@ -5537,6 +5537,44 @@ e1000_setup_led(struct e1000_hw *hw)
5537} 5537}
5538 5538
5539/****************************************************************************** 5539/******************************************************************************
5540 * Used on 82571 and later Si that has LED blink bits.
5541 * Callers must use their own timer and should have already called
5542 * e1000_id_led_init()
5543 * Call e1000_cleanup led() to stop blinking
5544 *
5545 * hw - Struct containing variables accessed by shared code
5546 *****************************************************************************/
5547int32_t
5548e1000_blink_led_start(struct e1000_hw *hw)
5549{
5550 int16_t i;
5551 uint32_t ledctl_blink = 0;
5552
5553 DEBUGFUNC("e1000_id_led_blink_on");
5554
5555 if (hw->mac_type < e1000_82571) {
5556 /* Nothing to do */
5557 return E1000_SUCCESS;
5558 }
5559 if (hw->media_type == e1000_media_type_fiber) {
5560 /* always blink LED0 for PCI-E fiber */
5561 ledctl_blink = E1000_LEDCTL_LED0_BLINK |
5562 (E1000_LEDCTL_MODE_LED_ON << E1000_LEDCTL_LED0_MODE_SHIFT);
5563 } else {
5564 /* set the blink bit for each LED that's "on" (0x0E) in ledctl_mode2 */
5565 ledctl_blink = hw->ledctl_mode2;
5566 for (i=0; i < 4; i++)
5567 if (((hw->ledctl_mode2 >> (i * 8)) & 0xFF) ==
5568 E1000_LEDCTL_MODE_LED_ON)
5569 ledctl_blink |= (E1000_LEDCTL_LED0_BLINK << (i * 8));
5570 }
5571
5572 E1000_WRITE_REG(hw, LEDCTL, ledctl_blink);
5573
5574 return E1000_SUCCESS;
5575}
5576
5577/******************************************************************************
5540 * Restores the saved state of the SW controlable LED. 5578 * Restores the saved state of the SW controlable LED.
5541 * 5579 *
5542 * hw - Struct containing variables accessed by shared code 5580 * hw - Struct containing variables accessed by shared code