Hello, This patch is based on Linux 2.4.32, and I've verified the same problem exists on 2.6.15.4. Working on a machine with a 2.4.32 kernel, I was surprised to see the driver complaining when setting the speed to 100FD using mii-tool, but accepting the setting with ethtool. Digging into the code, I found that there is some confusion with : - DUPLEX_FULL and FULL_DUPLEX, - DUPLEX_HALF and HALF_DUPLEX in the code : ... spddplx += (mii_reg & 0x100) ? FULL_DUPLEX : HALF_DUPLEX; retval = e1000_set_spd_dplx(adapter, spddplx); ... and int e1000_set_spd_dplx(struct e1000_adapter *adapter, uint16_t spddplx) { adapter->hw.autoneg = 0; switch(spddplx) { case SPEED_10 + DUPLEX_HALF: adapter->hw.forced_speed_duplex = e1000_10_half; break; .... when the constants don't have the same value. This patch is simply changing the code in the e1000_set_spd_dplx to use the same constants as does the caller of the function : FULL_DUPLEX and HALF_DUPLEX whose values are not 0, to make sure we have had a successfull init (DUPLEX_HALF value is 0, and the DUPLEX_xxx are defined in ethtool.h, thus are probably not meant to be used in the mii interface). Signed-off-by: Paul Rolland <[email protected]> diff -urN linux-2.4.32-orig/drivers/net/e1000/e1000_main.c linux-2.4.32/drivers/net/e1000/e1000_main.c --- linux-2.4.32-orig/drivers/net/e1000/e1000_main.c Mon Apr 4 01:42:19 2005 +++ linux-2.4.32/drivers/net/e1000/e1000_main.c Sat Feb 25 09:36:23 2006 @@ -2944,23 +2944,23 @@ adapter->hw.autoneg = 0; switch(spddplx) { - case SPEED_10 + DUPLEX_HALF: + case SPEED_10 + HALF_DUPLEX: adapter->hw.forced_speed_duplex = e1000_10_half; break; - case SPEED_10 + DUPLEX_FULL: + case SPEED_10 + FULL_DUPLEX: adapter->hw.forced_speed_duplex = e1000_10_full; break; - case SPEED_100 + DUPLEX_HALF: + case SPEED_100 + HALF_DUPLEX: adapter->hw.forced_speed_duplex = e1000_100_half; break; - case SPEED_100 + DUPLEX_FULL: + case SPEED_100 + FULL_DUPLEX: adapter->hw.forced_speed_duplex = e1000_100_full; break; - case SPEED_1000 + DUPLEX_FULL: + case SPEED_1000 + FULL_DUPLEX: adapter->hw.autoneg = 1; adapter->hw.autoneg_advertised = ADVERTISE_1000_FULL; break; - case SPEED_1000 + DUPLEX_HALF: /* not supported */ + case SPEED_1000 + HALF_DUPLEX: /* not supported */ default: DPRINTK(PROBE, ERR, "Unsupported Speed/Duplexity configuration\n"); Paul Rolland, rol(at)as2917.net ex-AS2917 Network administrator and Peering Coordinator -- Please no HTML, I'm not a browser - Pas d'HTML, je ne suis pas un navigateur "Some people dream of success... while others wake up and work hard at it" "I worry about my child and the Internet all the time, even though she's too young to have logged on yet. Here's what I worry about. I worry that 10 or 15 years from now, she will come to me and say 'Daddy, where were you when they took freedom of the press away from the Internet?'" --Mike Godwin, Electronic Frontier Foundation
Attachment:
e1000.patch
Description: Binary data
- Follow-Ups:
- Re: [2.4.32 - 2.6.15.4] e1000 - Fix mii interface
- From: "Jesper Juhl" <[email protected]>
- Re: [2.4.32 - 2.6.15.4] e1000 - Fix mii interface
- From: Willy TARREAU <[email protected]>
- Re: [2.4.32 - 2.6.15.4] e1000 - Fix mii interface
- References:
- Re: [PATCH] Enable mprotect on huge pages
- From: Christoph Hellwig <[email protected]>
- Re: [PATCH] Enable mprotect on huge pages
- Prev by Date: Re: [PATCH 12/13] "const static" vs "static const" in nfs4
- Next by Date: Re: [PATCH] flags parameter for linkat
- Previous by thread: Re: [PATCH] Enable mprotect on huge pages
- Next by thread: Re: [2.4.32 - 2.6.15.4] e1000 - Fix mii interface
- Index(es):