Bug 18970

Summary: Linksys PCMPC100 *V2* gets incorrect hardware address
Product: Base System Reporter: yergeau <yergeau>
Component: i386Assignee: freebsd-bugs (Nobody) <bugs>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: Unspecified   
Hardware: Any   
OS: Any   

Description yergeau 2000-06-02 21:50:00 UTC
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) {
=================================================================
Comment 1 ps freebsd_committer freebsd_triage 2000-06-18 07:01:26 UTC
State Changed
From-To: open->closed

Committed, thanks!