patch-2.4.21 linux-2.4.21/drivers/net/e100/e100_test.c
Next file: linux-2.4.21/drivers/net/e100/e100_ucode.h
Previous file: linux-2.4.21/drivers/net/e100/e100_proc.c
Back to the patch index
Back to the overall index
- Lines: 93
- Date:
2003-06-13 07:51:34.000000000 -0700
- Orig file:
linux-2.4.20/drivers/net/e100/e100_test.c
- Orig date:
2002-11-28 15:53:13.000000000 -0800
diff -urN linux-2.4.20/drivers/net/e100/e100_test.c linux-2.4.21/drivers/net/e100/e100_test.c
@@ -1,7 +1,7 @@
/*******************************************************************************
- Copyright(c) 1999 - 2002 Intel Corporation. All rights reserved.
+ Copyright(c) 1999 - 2003 Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
@@ -29,7 +29,7 @@
#include "e100_config.h"
extern u16 e100_eeprom_read(struct e100_private *, u16);
-extern int e100_wait_exec_cmplx(struct e100_private *, u32,u8);
+extern int e100_wait_exec_cmplx(struct e100_private *, u32,u8, u8);
extern void e100_phy_reset(struct e100_private *bdp);
extern void e100_phy_autoneg(struct e100_private *bdp);
extern void e100_phy_set_loopback(struct e100_private *bdp);
@@ -95,15 +95,9 @@
test_info [E100_EEPROM_TEST_FAIL] = true;
}
- /* fully recover only if the device is open*/
- if (netif_running(dev)) {
- e100_deisolate_driver(bdp, true, false);
- } else {
- e100_deisolate_driver(bdp, false, false);
- }
- /*Let card recover from the test*/
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(HZ * 2);
+ e100_deisolate_driver(bdp, false);
return flags | (test_result ? 0 : ETH_TEST_FL_FAILED);
}
@@ -132,7 +126,7 @@
}
}
- e100_hw_reset_recover(bdp,PORT_SOFTWARE_RESET);
+ e100_configure_device(bdp);
return retval;
}
@@ -170,13 +164,19 @@
{
u8 rc = 0;
+ printk(KERN_DEBUG "%s: PHY loopback test starts\n", dev->name);
+ e100_sw_reset(dev->priv, PORT_SELECTIVE_RESET);
if (!e100_diag_one_loopback(dev, PHY_LOOPBACK)) {
rc |= PHY_LOOPBACK;
}
+ printk(KERN_DEBUG "%s: PHY loopback test ends\n", dev->name);
+ printk(KERN_DEBUG "%s: MAC loopback test starts\n", dev->name);
+ e100_sw_reset(dev->priv, PORT_SELECTIVE_RESET);
if (!e100_diag_one_loopback(dev, MAC_LOOPBACK)) {
rc |= MAC_LOOPBACK;
}
+ printk(KERN_DEBUG "%s: MAC loopback test ends\n", dev->name);
return rc;
}
@@ -242,6 +242,9 @@
*dynamic_tbd = e100_config_dynamic_tbd(bdp,*dynamic_tbd);
if (set_loopback) {
+ /* ICH PHY loopback is broken */
+ if (bdp->flags & IS_ICH && loopback_mode == PHY_LOOPBACK)
+ loopback_mode = MAC_LOOPBACK;
/* Configure loopback on MAC */
e100_config_loopback_mode(bdp,loopback_mode);
} else {
@@ -345,12 +348,12 @@
e100_diag_loopback_cu_ru_exec(struct e100_private *bdp)
{
/*load CU & RU base */
- if (!e100_wait_exec_cmplx(bdp, 0, SCB_CUC_LOAD_BASE))
- printk("e100: SCB_CUC_LOAD_BASE failed\n");
- if(!e100_wait_exec_cmplx(bdp, 0, SCB_RUC_LOAD_BASE))
- printk("e100: SCB_RUC_LOAD_BASE failed!\n");
- if(!e100_wait_exec_cmplx(bdp, bdp->loopback.dma_handle, SCB_RUC_START))
- printk("e100: SCB_RUC_START failed!\n");
+ if (!e100_wait_exec_cmplx(bdp, 0, SCB_CUC_LOAD_BASE, 0))
+ printk(KERN_ERR "e100: SCB_CUC_LOAD_BASE failed\n");
+ if(!e100_wait_exec_cmplx(bdp, 0, SCB_RUC_LOAD_BASE, 0))
+ printk(KERN_ERR "e100: SCB_RUC_LOAD_BASE failed!\n");
+ if(!e100_wait_exec_cmplx(bdp, bdp->loopback.dma_handle, SCB_RUC_START, 0))
+ printk(KERN_ERR "e100: SCB_RUC_START failed!\n");
bdp->next_cu_cmd = START_WAIT;
e100_start_cu(bdp, bdp->loopback.tcb);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)