int mainbus_map(bus_addr_t addr, bus_size_t size, int flags, bus_space_handle_t *ret) { if (ISIIOPA(addr)) { *ret = (bus_space_handle_t)IIOV(addr); return (0); } else return (ENOMEM); }
void le_attach(device_t parent, device_t self, void *aux) { struct le_softc *lesc = device_private(self); struct lance_softc *sc = &lesc->sc_am7990.lsc; struct hb_attach_args *ha = aux; const uint8_t *p; sc->sc_dev = self; lesc->sc_r1 = (void *)(ha->ha_address); if (ISIIOPA(ha->ha_address)) { sc->sc_mem = (u_char *)(lance_mem_phys); p = idrom_addr + 0x10; } else { sc->sc_mem = lesc->sc_r1 - 0x10000; p = (const uint8_t *)(lesc->sc_r1 + 0x8010); } sc->sc_memsize = 0x4000; /* 16K */ sc->sc_addr = lance_mem_phys & 0x00ffffff; sc->sc_conf3 = LE_C3_BSWP|LE_C3_BCON; sc->sc_enaddr[0] = (*p++ << 4); sc->sc_enaddr[0] |= *p++ & 0x0f; sc->sc_enaddr[1] = (*p++ << 4); sc->sc_enaddr[1] |= *p++ & 0x0f; sc->sc_enaddr[2] = (*p++ << 4); sc->sc_enaddr[2] |= *p++ & 0x0f; sc->sc_enaddr[3] = (*p++ << 4); sc->sc_enaddr[3] |= *p++ & 0x0f; sc->sc_enaddr[4] = (*p++ << 4); sc->sc_enaddr[4] |= *p++ & 0x0f; sc->sc_enaddr[5] = (*p++ << 4); sc->sc_enaddr[5] |= *p++ & 0x0f; sc->sc_copytodesc = lance_copytobuf_contig; sc->sc_copyfromdesc = lance_copyfrombuf_contig; sc->sc_copytobuf = lance_copytobuf_contig; sc->sc_copyfrombuf = lance_copyfrombuf_contig; sc->sc_zerobuf = lance_zerobuf_contig; sc->sc_rdcsr = lerdcsr; sc->sc_wrcsr = lewrcsr; sc->sc_hwinit = NULL; am7990_config(&lesc->sc_am7990); }