Index: sys/dev/pcmcia/if_ne_pcmcia.c *************** *** 86,91 **** --- 86,92 ---- u_int8_t [ETHER_ADDR_LEN]); u_int8_t *ne_pcmcia_dl10019_get_enaddr(struct ne_pcmcia_softc *, u_int8_t [ETHER_ADDR_LEN]); + int ne_pcmcia_ax88790_power_up(struct ne_pcmcia_softc *); CFATTACH_DECL_NEW(ne_pcmcia, sizeof(struct ne_pcmcia_softc), ne_pcmcia_match, ne_pcmcia_attach, ne_pcmcia_detach, dp8390_activate); *************** *** 181,186 **** --- 182,230 ---- PCMCIA_CIS_GENIUS_ME3000II, 0, -1, { 0x00, 0x40, 0x95 }, 0 }, + { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "PCMCIA", "LD-CDK/TX" }, + 0, -1, { 0x00, 0x00, 0x00 }, NE2000DVF_AX88190 }, + + /* BUFFALO LPC2-CLT */ + { PCMCIA_VENDOR_BUFFALO, 0x300, + PCMCIA_CIS_INVALID, + 0, -1, { 0x00, 0x00, 0x00 }, 0 }, + + /* BUFFALO LPC3-CLX */ + { PCMCIA_VENDOR_BUFFALO, 0x301, + PCMCIA_CIS_INVALID, + 0, -1, { 0x00, 0x00, 0x00 }, NE2000DVF_AX88190 }, + + { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "BUFFALO", "LPC-PCM-CLX" }, + 0, -1, { 0x00, 0x00, 0x00 }, NE2000DVF_AX88190 }, + + { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "PCMCIA", "LAN-TX/PCM" }, + 0, -1, { 0x00, 0x00, 0x00 }, NE2000DVF_AX88190 }, + + { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "corega K.K.", "corega FEther PCC-TXD" }, + 0, -1, { 0x00, 0x00, 0x00 }, NE2000DVF_AX88190 }, + + /* FNW-3700-TX */ + { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "Fast Ethernet", "16-bit PC Card" }, + 0, -1, { 0x00, 0x00, 0x00 }, NE2000DVF_AX88190 }, + + { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "Allied Telesis K.K.", "LA100-PCM V2" }, + 0, -1, { 0x00, 0x90, 0x99 }, NE2000DVF_DL10019 }, + + { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "GREEN HOUSE", "ELP100NLC" }, + 0, -1, { 0x00, 0x00, 0x00 }, NE2000DVF_AX88190 }, + + { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "Logitec", "LPM-LN100TL" }, + 0, -1, { 0x00, 0x00, 0x00 }, NE2000DVF_AX88190 }, + /* * You have to add new entries which contains *************** *** 417,423 **** { PCMCIA_VENDOR_NETGEAR, PCMCIA_PRODUCT_NETGEAR_FA411, PCMCIA_CIS_INVALID, ! 0, -1, { 0x00, 0x40, 0xf4 }, 0 }, { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, PCMCIA_CIS_DYNALINK_L10C, --- 461,467 ---- { PCMCIA_VENDOR_NETGEAR, PCMCIA_PRODUCT_NETGEAR_FA411, PCMCIA_CIS_INVALID, ! 0, -1, { 0x00, 0x40, 0xf4 }, NE2000DVF_AX88190 }, { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, PCMCIA_CIS_DYNALINK_L10C, *************** *** 696,701 **** --- 740,746 ---- if (test != 0) { nsc->sc_type = NE2000_TYPE_AX88790; typestr = " (AX88790)"; + ne_pcmcia_ax88790_power_up(psc); } else { nsc->sc_type = NE2000_TYPE_AX88190; typestr = " (AX88190)"; *************** *** 781,786 **** --- 826,832 ---- ne_pcmcia_enable(struct dp8390_softc *dsc) { struct ne_pcmcia_softc *psc = (struct ne_pcmcia_softc *)dsc; + struct ne2000_softc *nsc = (void *)dsc; int error; /* set up the interrupt */ *************** *** 795,800 **** --- 841,849 ---- psc->sc_ih = 0; } + if (error == 0 && nsc->sc_type == NE2000_TYPE_AX88790) + ne_pcmcia_ax88790_power_up(psc); + return (error); } *************** *** 864,866 **** --- 913,930 ---- #undef PAR0 return (myea); } + + int + ne_pcmcia_ax88790_power_up(psc) + struct ne_pcmcia_softc *psc; + { + struct pcmcia_function *pf = psc->sc_pf; + struct ne2000_softc *nsc = (void *)psc; + + /* Power *up* phy. */ + pcmcia_ccr_write(pf, PCMCIA_CCR_STATUS, PCMCIA_CCR_STATUS_PWRDWN); + + /* Use internal phy. */ + bus_space_write_1(nsc->sc_asict, nsc->sc_asich, 0x07, 0x10); + return 0; + } Index: sys/dev/pcmcia/pcmcia_cis_quirks.c *************** *** 234,240 **** --- 234,268 ---- .irqmask = 0x3fbc, /* irqmask */ }; + static const struct pcmcia_function pcmcia_ax88790_func0 = { + .number = 0, + .function = PCMCIA_FUNCTION_NETWORK, + .last_config_index = 0, /* XXX unused */ + .ccr_base = 0x3c0, + .ccr_mask = 0x63 + }; + + static const struct pcmcia_config_entry pcmcia_ax88790_cfe0 = { + .number = 7, + .flags = PCMCIA_CFE_IO16 | PCMCIA_CFE_IRQLEVEL | + PCMCIA_CFE_MWAIT_REQUIRED, + .iftype = PCMCIA_IFTYPE_IO, + .num_iospace = 1, + .iomask = 10, + .iospace = { { .length = 0x20, .start = 0x300 } }, + .irqmask = 0xffff + }; + static const struct pcmcia_cis_quirk pcmcia_cis_quirks[] = { + { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "Logitec", "LPM-LN100TL" }, + &pcmcia_ax88790_func0, &pcmcia_ax88790_cfe0 }, + { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "IO DATA", "ETXPCM" }, + &pcmcia_ax88790_func0, &pcmcia_ax88790_cfe0 }, + { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "Fast Ethernet", "16-bit PC Card" }, /* FNW-3700-TX */ + &pcmcia_ax88790_func0, &pcmcia_ax88790_cfe0 }, { PCMCIA_VENDOR_3COM, PCMCIA_PRODUCT_3COM_3CXEM556, PCMCIA_CIS_INVALID, &pcmcia_3cxem556_func0, &pcmcia_3cxem556_func0_cfe0 }, Index: sys/dev/pcmcia/com_pcmcia.c *************** *** 203,208 **** --- 203,221 ---- sc->enable = com_pcmcia_enable; sc->disable = com_pcmcia_disable; + /* XXX OXCF950 */ + if (pa->manufacturer == 0x279 && pa->product == 0x950b) { + if (cfe->iospace[0].start & (cfe->iospace[0].length - 1)) { + bus_space_handle_t ioh; + + bus_space_subregion(cfe->iospace[0].handle.iot, + cfe->iospace[0].handle.ioh, 8, 8, &ioh); + COM_INIT_REGS(sc->sc_regs, cfe->iospace[0].handle.iot, + ioh, -1); + } + sc->sc_frequency = COM_FREQ * 8; + } + aprint_normal("%s", device_xname(self)); com_attach_subr(sc); Index: sys/dev/pcmcia/wdc_pcmcia.c *************** *** 142,147 **** --- 142,149 ---- /* IO DATA CBIDE2, with neither vendor ID nor product ID */ { { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, PCMCIA_CIS_IODATA_CBIDE2 }, 2 }, + { { PCMCIA_VENDOR_INVALID, PCMCIA_PRODUCT_INVALID, + { "IO DATA", "PCIDEII" } }, 2 }, /* TOSHIBA PA2673U(IODATA_CBIDE2 OEM), */ /* with neither vendor ID nor product ID */ Index: sys/dev/pcmcia/pcmcia_cis.c *************** *** 1216,1221 **** --- 1216,1224 ---- cfe->flags |= PCMCIA_CFE_IO16; cfe->iomask = reg & PCMCIA_TPCE_IO_IOADDRLINES_MASK; + /* XXX bogus CIS requests too large iomask */ + if (cfe->iomask > 12) + cfe->iomask = 12; if (reg & PCMCIA_TPCE_IO_HASRANGE) { reg = pcmcia_tuple_read_1(tuple, idx);