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.
This commit is contained in:
parent
1b7072f477
commit
d0338d9612
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=189
@ -17,6 +17,15 @@
|
|||||||
* Modification history
|
* Modification history
|
||||||
*
|
*
|
||||||
* $Log: if_ed.c,v $
|
* $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
|
* Revision 1.14 93/07/20 15:24:25 davidg
|
||||||
* ommision for force 16bit case fixed from last patch
|
* 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
|
* If this is a 3Com board, the tranceiver must be software enabled
|
||||||
* (there is no settable hardware default).
|
* (there is no settable hardware default).
|
||||||
*/
|
*/
|
||||||
if ((sc->vendor == ED_VENDOR_3COM) && (ifp->if_flags & IFF_LLC0)) {
|
if (sc->vendor == ED_VENDOR_3COM) {
|
||||||
outb(sc->asic_addr + ED_3COM_CR, 0);
|
if (ifp->if_flags & IFF_LLC0) {
|
||||||
} else {
|
outb(sc->asic_addr + ED_3COM_CR, 0);
|
||||||
outb(sc->asic_addr + ED_3COM_CR, ED_3COM_CR_XSEL);
|
} 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
|
* of the tranceiver for 3Com boards. The LLC0 flag disables
|
||||||
* the tranceiver if set.
|
* the tranceiver if set.
|
||||||
*/
|
*/
|
||||||
if ((sc->vendor == ED_VENDOR_3COM) && (ifp->if_flags & IFF_LLC0)) {
|
if (sc->vendor == ED_VENDOR_3COM) {
|
||||||
outb(sc->asic_addr + ED_3COM_CR, 0);
|
if (ifp->if_flags & IFF_LLC0) {
|
||||||
} else {
|
outb(sc->asic_addr + ED_3COM_CR, 0);
|
||||||
outb(sc->asic_addr + ED_3COM_CR, ED_3COM_CR_XSEL);
|
} else {
|
||||||
|
outb(sc->asic_addr + ED_3COM_CR, ED_3COM_CR_XSEL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -17,6 +17,15 @@
|
|||||||
* Modification history
|
* Modification history
|
||||||
*
|
*
|
||||||
* $Log: if_ed.c,v $
|
* $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
|
* Revision 1.14 93/07/20 15:24:25 davidg
|
||||||
* ommision for force 16bit case fixed from last patch
|
* 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
|
* If this is a 3Com board, the tranceiver must be software enabled
|
||||||
* (there is no settable hardware default).
|
* (there is no settable hardware default).
|
||||||
*/
|
*/
|
||||||
if ((sc->vendor == ED_VENDOR_3COM) && (ifp->if_flags & IFF_LLC0)) {
|
if (sc->vendor == ED_VENDOR_3COM) {
|
||||||
outb(sc->asic_addr + ED_3COM_CR, 0);
|
if (ifp->if_flags & IFF_LLC0) {
|
||||||
} else {
|
outb(sc->asic_addr + ED_3COM_CR, 0);
|
||||||
outb(sc->asic_addr + ED_3COM_CR, ED_3COM_CR_XSEL);
|
} 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
|
* of the tranceiver for 3Com boards. The LLC0 flag disables
|
||||||
* the tranceiver if set.
|
* the tranceiver if set.
|
||||||
*/
|
*/
|
||||||
if ((sc->vendor == ED_VENDOR_3COM) && (ifp->if_flags & IFF_LLC0)) {
|
if (sc->vendor == ED_VENDOR_3COM) {
|
||||||
outb(sc->asic_addr + ED_3COM_CR, 0);
|
if (ifp->if_flags & IFF_LLC0) {
|
||||||
} else {
|
outb(sc->asic_addr + ED_3COM_CR, 0);
|
||||||
outb(sc->asic_addr + ED_3COM_CR, ED_3COM_CR_XSEL);
|
} else {
|
||||||
|
outb(sc->asic_addr + ED_3COM_CR, ED_3COM_CR_XSEL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user