diff --git a/sys/pci/if_xl.c b/sys/pci/if_xl.c index 20921e9ac560..2487b33a0145 100644 --- a/sys/pci/if_xl.c +++ b/sys/pci/if_xl.c @@ -1271,6 +1271,8 @@ xl_attach(dev) XL_FLAG_INVERT_LED_PWR | XL_FLAG_INVERT_MII_PWR; if (pci_get_device(dev) == TC_DEVICEID_HURRICANE_556) sc->xl_flags |= XL_FLAG_8BITROM; + if (pci_get_device(dev) == TC_DEVICEID_HURRICANE_556B) + sc->xl_flags |= XL_FLAG_NO_XCVR_PWR; if (pci_get_device(dev) == TC_DEVICEID_HURRICANE_575A || pci_get_device(dev) == TC_DEVICEID_HURRICANE_575B || @@ -1623,6 +1625,11 @@ xl_attach(dev) done: + if (sc->xl_flags & XL_FLAG_NO_XCVR_PWR) { + XL_SEL_WIN(0); + CSR_WRITE_2(sc, XL_W0_MFG_ID, XL_NO_XCVR_PWR_MAGICBITS); + } + /* * Call MI attach routine. */ diff --git a/sys/pci/if_xlreg.h b/sys/pci/if_xlreg.h index d2557529e667..f373f0276791 100644 --- a/sys/pci/if_xlreg.h +++ b/sys/pci/if_xlreg.h @@ -560,6 +560,9 @@ struct xl_mii_frame { #define XL_FLAG_8BITROM 0x0010 #define XL_FLAG_INVERT_LED_PWR 0x0020 #define XL_FLAG_INVERT_MII_PWR 0x0040 +#define XL_FLAG_NO_XCVR_PWR 0x0080 + +#define XL_NO_XCVR_PWR_MAGICBITS 0x0900 struct xl_softc { struct arpcom arpcom; /* interface info */