static int ed_pci_attach(device_t dev) { struct ed_softc *sc = device_get_softc(dev); int error = ENXIO; /* * Probe RTL8029 cards, but allow failure and try as a generic * ne-2000. QEMU 0.9 and earlier use the RTL8029 PCI ID, but * are areally just generic ne-2000 cards. */ if (pci_get_devid(dev) == ED_RTL8029_PCI_ID) error = ed_probe_RTL80x9(dev, PCIR_BAR(0), 0); if (error) error = ed_probe_Novell(dev, PCIR_BAR(0), ED_FLAGS_FORCE_16BIT_MODE); if (error) { ed_release_resources(dev); return (error); } ed_Novell_read_mac(sc); error = ed_alloc_irq(dev, 0, RF_SHAREABLE); if (error) { ed_release_resources(dev); return (error); } if (sc->sc_media_ioctl == NULL) ed_gen_ifmedia_init(sc); error = ed_attach(dev); if (error) { ed_release_resources(dev); return (error); } error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE, NULL, edintr, sc, &sc->irq_handle); if (error) ed_release_resources(dev); return (error); }
static int ed_isa_probe_Novell(device_t dev) { struct ed_softc *sc = device_get_softc(dev); int flags = device_get_flags(dev); int err; err = ed_probe_Novell(dev, 0, flags); if (err) return err; ed_Novell_read_mac(sc); /* * Final sanity check for Gateway Ethernet cards before * believing that they really are Gateway AT. * XXX I think this is stale. */ if ((ED_FLAGS_GETTYPE(flags) == ED_FLAGS_GWETHER) && (sc->enaddr[2] == 0x86)) { sc->type_str = "Gateway AT"; } return (0); }
static int ed_isa_probe(device_t dev) { struct ed_softc *sc = device_get_softc(dev); int flags = device_get_flags(dev); int error = 0; /* Check isapnp ids */ error = ISA_PNP_PROBE(device_get_parent(dev), dev, ed_ids); /* If the card had a PnP ID that didn't match any we know about */ if (error == ENXIO) goto end; /* If we had some other problem. */ if (!(error == 0 || error == ENOENT)) goto end; /* Heuristic probes */ error = ed_probe_WD80x3(dev, 0, flags); if (error == 0) goto end; ed_release_resources(dev); error = ed_probe_RTL80x9(dev, 0, flags); if (error == 0) { ed_Novell_read_mac(sc); goto end; } ed_release_resources(dev); #ifdef ED_3C503 error = ed_probe_3Com(dev, 0, flags); if (error == 0) goto end; ed_release_resources(dev); #endif #ifdef ED_SIC error = ed_probe_SIC(dev, 0, flags); if (error == 0) goto end; ed_release_resources(dev); #endif error = ed_isa_probe_Novell(dev); if (error == 0) goto end; ed_release_resources(dev); #ifdef ED_HPP error = ed_probe_HP_pclanp(dev, 0, flags); if (error == 0) goto end; ed_release_resources(dev); #endif end: if (error == 0) error = ed_alloc_irq(dev, 0, 0); ed_release_resources(dev); return (error); }
static int ed_cbus_probe(device_t dev) { struct ed_softc *sc = device_get_softc(dev); int flags = device_get_flags(dev); int error = 0; sc->type = ED_TYPE98(flags); #ifdef ED_DEBUG device_printf(dev, "ed_cbus_probe: sc->type=%x\n", sc->type); #endif /* Check isapnp ids */ error = ISA_PNP_PROBE(device_get_parent(dev), dev, ed_ids); #ifdef ED_DEBUG device_printf(dev, "ed_cbus_probe: ISA_PNP_PROBE returns %d\n", error); #endif /* If the card had a PnP ID that didn't match any we know about */ if (error == ENXIO) goto end; /* If we had some other problem. */ if (!(error == 0 || error == ENOENT)) goto end; /* Heuristic probes */ #ifdef ED_DEBUG device_printf(dev, "ed_cbus_probe: Heuristic probes start\n"); #endif switch (sc->type) { case ED_TYPE98_GENERIC: /* * CAUTION! * sc->type of these boards are overwritten by PC/AT's value. */ /* * SMC EtherEZ98 */ error = ed_probe_EZ98(dev, 0, flags); if (error == 0) goto end; ed_release_resources(dev); /* * Allied Telesis CenterCom LA-98-T */ error = ed_probe_Novell(dev, 0, flags); if (error == 0) { ed_Novell_read_mac(sc); goto end; } break; /* * NE2000-like boards probe routine */ case ED_TYPE98_BDN: /* * ELECOM LANEED LD-BDN * PLANET SMART COM 98 EN-2298 */ case ED_TYPE98_LGY: /* * MELCO LGY-98, IND-SP, IND-SS * MACNICA NE2098 */ case ED_TYPE98_ICM: /* * ICM DT-ET-25, DT-ET-T5, IF-2766ET, IF-2771ET * D-Link DE-298P, DE-298 */ case ED_TYPE98_EGY: /* * MELCO EGY-98 * Contec C-NET(98)E-A, C-NET(98)L-A */ case ED_TYPE98_108: /* * NEC PC-9801-107,108 */ case ED_TYPE98_NC5098: /* * NextCom NC5098 */ error = ed98_probe_Novell(dev, 0, flags); break; /* * other boards with special probe routine */ case ED_TYPE98_SIC: /* * Allied Telesis SIC-98 */ error = ed_probe_SIC98(dev, 0, flags); break; case ED_TYPE98_CNET98EL: /* * Contec C-NET(98)E/L */ error = ed_probe_CNET98EL(dev, 0, flags); break; case ED_TYPE98_CNET98: /* * Contec C-NET(98) */ error = ed_probe_CNET98(dev, 0, flags); break; case ED_TYPE98_LA98: /* * IO-DATA LA/T-98 * NEC PC-9801-77,78 */ error = ed_probe_NEC77(dev, 0, flags); break; case ED_TYPE98_NW98X: /* * Networld EC/EP-98X */ error = ed_probe_NW98X(dev, 0, flags); break; case ED_TYPE98_SB98: /* * Soliton SB-9801 * Fujikura FN-9801 */ error = ed_probe_SB98(dev, 0, flags); break; } end: #ifdef ED_DEBUG device_printf(dev, "ed_cbus_probe: end, error=%d\n", error); #endif if (error == 0) error = ed_alloc_irq(dev, 0, 0); ed_release_resources(dev); return (error); }