diff options
author | dg <dg@FreeBSD.org> | 1993-07-25 23:43:30 +0000 |
---|---|---|
committer | dg <dg@FreeBSD.org> | 1993-07-25 23:43:30 +0000 |
commit | 542f27732fe6f99a5fc31c88c449ce5154ab9205 (patch) | |
tree | 87f721857e80d7b484bcbdf04d55dee3de0fee25 /sys/i386/isa/if_ed.c | |
parent | 7ba7f71fb87ef037782d652683696d913db11ffc (diff) | |
download | FreeBSD-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.c | 29 |
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; |