summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/if_ed.c
diff options
context:
space:
mode:
authordg <dg@FreeBSD.org>1993-07-25 23:43:30 +0000
committerdg <dg@FreeBSD.org>1993-07-25 23:43:30 +0000
commit542f27732fe6f99a5fc31c88c449ce5154ab9205 (patch)
tree87f721857e80d7b484bcbdf04d55dee3de0fee25 /sys/i386/isa/if_ed.c
parent7ba7f71fb87ef037782d652683696d913db11ffc (diff)
downloadFreeBSD-src-542f27732fe6f99a5fc31c88c449ce5154ab9205.zip
FreeBSD-src-542f27732fe6f99a5fc31c88c449ce5154ab9205.tar.gz
Fixed logic problem which caused a bogus value to be written to the 3c503
asic register even if the board isn't a 3c503. This caused old 8003E's not to work because they ignore IO address bits >10bits and the 3c503 asic is located at +0x400....the offset was ignored by the 8003E and so the value was written to one of the NIC registers. The bug was discovered by Wolfgang Solfrank.
Diffstat (limited to 'sys/i386/isa/if_ed.c')
-rw-r--r--sys/i386/isa/if_ed.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/sys/i386/isa/if_ed.c b/sys/i386/isa/if_ed.c
index b804b25..8b13bdd 100644
--- a/sys/i386/isa/if_ed.c
+++ b/sys/i386/isa/if_ed.c
@@ -17,6 +17,15 @@
* Modification history
*
* $Log: if_ed.c,v $
+ * Revision 1.16 93/07/25 14:27:12 davidg
+ * added parans to the previous fix so that it can cope with outb
+ * being a macro.
+ *
+ * Revision 1.15 93/07/25 14:07:56 davidg
+ * fixed logic problem where a 3c503 register was being written
+ * even if the board wasn't a 3Com. Wolfgang Solfrank pointed this
+ * out.
+ *
* Revision 1.14 93/07/20 15:24:25 davidg
* ommision for force 16bit case fixed from last patch
*
@@ -957,10 +966,12 @@ ed_init(unit)
* If this is a 3Com board, the tranceiver must be software enabled
* (there is no settable hardware default).
*/
- if ((sc->vendor == ED_VENDOR_3COM) && (ifp->if_flags & IFF_LLC0)) {
- outb(sc->asic_addr + ED_3COM_CR, 0);
- } else {
- outb(sc->asic_addr + ED_3COM_CR, ED_3COM_CR_XSEL);
+ if (sc->vendor == ED_VENDOR_3COM) {
+ if (ifp->if_flags & IFF_LLC0) {
+ outb(sc->asic_addr + ED_3COM_CR, 0);
+ } else {
+ outb(sc->asic_addr + ED_3COM_CR, ED_3COM_CR_XSEL);
+ }
}
/*
@@ -1583,10 +1594,12 @@ ed_ioctl(ifp, command, data)
* of the tranceiver for 3Com boards. The LLC0 flag disables
* the tranceiver if set.
*/
- if ((sc->vendor == ED_VENDOR_3COM) && (ifp->if_flags & IFF_LLC0)) {
- outb(sc->asic_addr + ED_3COM_CR, 0);
- } else {
- outb(sc->asic_addr + ED_3COM_CR, ED_3COM_CR_XSEL);
+ if (sc->vendor == ED_VENDOR_3COM) {
+ if (ifp->if_flags & IFF_LLC0) {
+ outb(sc->asic_addr + ED_3COM_CR, 0);
+ } else {
+ outb(sc->asic_addr + ED_3COM_CR, ED_3COM_CR_XSEL);
+ }
}
break;
OpenPOWER on IntegriCloud