Subject: Re: WD8013 died (SMC howto fix)
To: None <a.robertson@niwa.cri.nz>
From: Andrew Wheadon <andrew@wipux2.wifo.uni-mannheim.de>
List: current-users
Date: 03/16/1996 10:38:32
I found this in the news and since I hadn't found the
actual solution in the mailing-lists/ (i checked port-i386
and current-users and netbsd-help)...

..and since this works... (I tried it after the bloddy
mcd0 driver killed my smc8013ebc (300,dc00,10) card type 0x29)
The mcd0 driver succeeded in overwriting my hard-ware-node-address.

I'm posting so it CAN be found in the mailing-lists as everyone
is pointing out:

Cheerio Andrew
...article follows...

> From: William O Ferry <WOFerry+@CMU.EDU>
> Newsgroups: comp.unix.bsd.netbsd.misc
> Subject: Re: NetBSD has killed my SMC network card !!! Twice

   I had the same thing happen to me when first installing NetBSD.  A
friend of mine had it happen when trying to install OS2/Warp on his
machine (and his Warp doesn't even HAVE network support!!  =)  It would
seem that the probing for certain tape drives (and possibly other
things) involves writing to areas of memory around the base address 300.
 If your SMC card is set to that address, it will mess up the card's
settings.  Switching to a hard configuration shouldn't fix it, as it
manages to write the corrupted data to the card's NVRAM.

    Here's the routine I was given, that fixed both my card and the card
messed up by Warp:

(Hopefully you know the card's 6 byte hardware address)

Assuming your card is still at base 300 (don't jumper it anywhere else yet),
0x308 - 0x30d contain the hardware address.  0x30e is a board type
identifier.  0x30f is a checksum for the other information.  If the SMC
utilities don't see the correct checksum byte, they seem to
automatically assume it's not an SMC ethernet card at the port.

Using DOS "debug", check the values between 308 and 30f.  For example,
to view the byte at 308, use the command "i 308".  To write the byte 0F
to 308, use the command "o 308 0F".

Verify that the contents of 308 - 30d ARE your hardware address.  I
don't know what the correct board type for your card is.  For the two I
fixed, they were EtherCard PLUS Elite16T, and the identifier was 0x28. 
Hopefully you have another (non-corrupt) card, or somebody else could
tell you what the correct identifier is, as at least for my friend and I
it was one of the bytes that had been changed by the probe.

Once you're sure all these bytes are correct, you get to calculate the
value for the 8th byte... =)  The sum of all 8 bytes (mod 256) should be
0xFF.  So add the first 7 bytes, and calculate what the 8th one should
be to get a sum (mod 256) of 0xFF.

Now you're ready to commit these settings to the NVRAM.  To do this,
read the byte at 0x301.  Add 0x80 to it, and write that value to 0x301. 
Now write the original value back in.  Now the settings are saved.  The
SMC utilities should see the card, hopefully they will still show it's
the correct type of card...  =)

    BTW, be sure to move your card to somewhere other than 0x300...  =)

    Hope that helps, if you have any more questions feel free to email
me.  Good luck!

                                                          Will Ferry

-------------------------------------------------------------------------
William O Ferry <woferry@WarpDrive.COM> | finger:  woferry@WarpDrive.COM
http://www.warpdrive.com/~woferry/      | talk:  finger for online status
-------------------------------------------------------------------------


-- 
The cost of living hasn't affected it's popularity. (unknown)
current	release=doc host=wipux2.wifo.uni-mannheim.de \ "NetBSD-current mirror"
hostbase=/mit/ftp/pub/NetBSD base=/usr prefix=/usr backup delete use-rel-suffix