Date: Tue, 13 Jun 1995 22:31:36 +0200 (SAT) From: John Hay <jhay@mikom.csir.co.za> To: davidg@FreeBSD.ORG Cc: hackers@FreeBSD.ORG Subject: Possible patch for SMC 8216/8416 probe bug Message-ID: <199506132031.WAA03979@zibbi.mikom.csir.co.za>
next in thread | raw e-mail | index | archive | help
Here is a possible fix for the bug in probing the 8216C/8416/C cards. The
problem was that the memory of the card wasn't enabled before it was written
to.
I'm not sure if all these things is needed, but I found them lower down in
the probe code. Also I'm not sure if I have to preserve the value of the
ED_WD_LAAR register. The probe does that later on and I didn't want to
clobber it. I have tried it on my 8216C and it works. I don't have a 8416C
to test it on.
Maybe David Greenman should look at it, as he seems to do most stuff in
the if_ed.c driver.
--
John Hay -- jhay@mikom.csir.co.za
*** if_ed.c.orig Sun Jun 4 19:31:09 1995
--- if_ed.c Tue Jun 13 22:20:56 1995
***************
*** 390,395 ****
--- 390,412 ----
isa16bit = 1;
break;
case ED_TYPE_SMC8216C: /* 8216 has 16K shared mem -- 8416 has 8K */
+ {
+ int tval;
+
+ tval = inb(sc->asic_addr + ED_WD_LAAR);
+ sc->mem_start = (caddr_t) isa_dev->id_maddr;
+
+ outb(sc->asic_addr + ED_WD_LAAR, ED_WD_LAAR_M16EN);
+ outb(sc->asic_addr + ED_WD_MSR, ED_WD_MSR_MENB);
+ outb(sc->asic_addr + ED_WD790_HWR,
+ (inb(sc->asic_addr + ED_WD790_HWR) | ED_WD790_HWR_SWH));
+ outb(sc->asic_addr + ED_WD790_RAR,
+ ((kvtop(sc->mem_start) >> 13) & 0x0f) |
+ ((kvtop(sc->mem_start) >> 11) & 0x40) |
+ (inb(sc->asic_addr + ED_WD790_RAR) & 0xb0));
+ outb(sc->asic_addr + ED_WD790_HWR,
+ (inb(sc->asic_addr + ED_WD790_HWR) & ~ED_WD790_HWR_SWH));
+
(unsigned int) *(isa_dev->id_maddr+8192) = (unsigned int)0;
if ((unsigned int) *(isa_dev->id_maddr+8192)) {
sc->type_str = "SMC8416C/SMC8416BT";
***************
*** 402,410 ****
--- 419,429 ----
"Ethernet adapter: SMC 8216 or 8216C";
memsize = 16384;
}
+ outb(sc->asic_addr + ED_WD_LAAR, tval);
isa16bit = 1;
sc->is790 = 1;
break;
+ }
case ED_TYPE_SMC8216T:
sc->type_str = "SMC8216T";
sc->kdc.kdc_description =
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199506132031.WAA03979>
