| Summary: | Linksys PCMPC100 *V2* gets incorrect hardware address | ||
|---|---|---|---|
| Product: | Base System | Reporter: | yergeau <yergeau> |
| Component: | i386 | Assignee: | freebsd-bugs (Nobody) <bugs> |
| Status: | Closed FIXED | ||
| Severity: | Affects Only Me | ||
| Priority: | Normal | ||
| Version: | Unspecified | ||
| Hardware: | Any | ||
| OS: | Any | ||
State Changed From-To: open->closed Committed, thanks! |
Version 2 of this PCMCIA card is incorrectly identified as a NE2000, and the incorrect MAC address is extracted. ed0: address 01:d4:ff:03:00:20, type NE2000 (16 bit) The MAC address should be 00:e0:98:80:15:df (as printed on the card and reported by Windoze). Fix: /sys/dev/ed/if_ed.c:ed_probe_Novell_generic tries to identify if the card is NE2000, NE1000, or Linksys by writing a test pattern into the card's memory at 8k. This fails for the V2 version of the Linksys PCMPC100, so ed_get_Linksys doesn't get called to extract the MAC address in the special way needed for the Linksys (DL10019C). When I change that conditional in if_ed.c to always succeed, ================================================================= *************** the correct MAC address is not extracted and the card is identified as a "Linksys" instead of a "NE2000". ed0: address 00:e0:98:80:15:df, type Linksys (16 bit) Note that I'm not suggesting the above diff as the fix, but it does point out where the driver needs to be fixed.--uHmX2QrX2aeBp540FT5dINTws7fZr3G2EbOywyNKktlFyZWi Content-Type: text/plain; name="file.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="file.diff" *** 1013,1019 **** ed_pio_writemem(sc, test_pattern, 8192, sizeof(test_pattern)); ed_pio_readmem(sc, 8192, test_buffer, sizeof(test_pattern)); ! if (bcmp(test_pattern, test_buffer, sizeof(test_pattern)) == 0) { /* could be either an NE1000 or a Linksys ethernet controller */ linksys = ed_get_Linksys(sc); if (linksys) { --- 1022,1029 ---- ed_pio_writemem(sc, test_pattern, 8192, sizeof(test_pattern)); ed_pio_readmem(sc, 8192, test_buffer, sizeof(test_pattern)); ! /*if (bcmp(test_pattern, test_buffer, sizeof(test_pattern)) == 0) {*/ ! if (1) { /* could be either an NE1000 or a Linksys ethernet controller */ linksys = ed_get_Linksys(sc); if (linksys) { =================================================================