diff options
-rw-r--r-- | sys/dev/ed/if_ed_pccard.c | 6 | ||||
-rw-r--r-- | sys/dev/ed/if_edreg.h | 14 |
2 files changed, 17 insertions, 3 deletions
diff --git a/sys/dev/ed/if_ed_pccard.c b/sys/dev/ed/if_ed_pccard.c index c2abc38..ed3bf4b 100644 --- a/sys/dev/ed/if_ed_pccard.c +++ b/sys/dev/ed/if_ed_pccard.c @@ -477,13 +477,17 @@ ed_pccard_ax88190(device_t dev) iobase = rman_get_start(sc->port_res); ed_pccard_memwrite(dev, ED_AX88190_IOBASE0, iobase & 0xff); ed_pccard_memwrite(dev, ED_AX88190_IOBASE1, (iobase >> 8) & 0xff); + sc->type_str = "AX88190"; + if (ed_asic_inb(sc, ED_ASIX_TEST) != 0) { + ed_pccard_memwrite(dev, ED_AX88790_CSR, ED_AX88790_CSR_PWRDWN); + sc->type_str = "AX88790"; + } ax88190_geteprom(sc); ed_release_resources(dev); error = ed_probe_Novell(dev, 0, flags); if (error == 0) { sc->vendor = ED_VENDOR_NOVELL; sc->type = ED_TYPE_NE2000; - sc->type_str = "AX88190"; } return (error); } diff --git a/sys/dev/ed/if_edreg.h b/sys/dev/ed/if_edreg.h index b38cc58..2674df6 100644 --- a/sys/dev/ed/if_edreg.h +++ b/sys/dev/ed/if_edreg.h @@ -1117,13 +1117,23 @@ struct ed_ring { #define ED_CHIP_TYPE_DL100XX 0x03 /* - * AX88190 IOBASE registers. + * AX88190 configuration status register. + */ +#define ED_AX88790_CSR 0x3c2 +#define ED_AX88790_CSR_PWRDWN 0x04 +/* + * AX88190 IOBASE registers, I'm pretty sure these don't need to be written + * to to make the card work by ed. */ - #define ED_AX88190_IOBASE0 0x3ca #define ED_AX88190_IOBASE1 0x3cc /* + * Test for AX88790 vs 88190 cards. + */ +#define ED_ASIX_TEST 0x05 + +/* * MII bus definitions. */ #define ED_MII_STARTDELIM 0x01 |