Lines Matching refs:sc
87 static void ed_stop_hw(struct ed_softc *sc);
120 ed_probe_generic8390(struct ed_softc *sc) in ed_probe_generic8390() argument
122 if ((ed_nic_inb(sc, ED_P0_CR) & in ed_probe_generic8390()
126 if ((ed_nic_inb(sc, ED_P0_ISR) & ED_ISR_RST) != ED_ISR_RST) in ed_probe_generic8390()
133 ed_disable_16bit_access(struct ed_softc *sc) in ed_disable_16bit_access() argument
138 if (sc->isa16bit && sc->vendor == ED_VENDOR_WD_SMC) { in ed_disable_16bit_access()
139 if (sc->chip_type == ED_CHIP_TYPE_WD790) in ed_disable_16bit_access()
140 ed_asic_outb(sc, ED_WD_MSR, 0x00); in ed_disable_16bit_access()
141 ed_asic_outb(sc, ED_WD_LAAR, in ed_disable_16bit_access()
142 sc->wd_laar_proto & ~ED_WD_LAAR_M16EN); in ed_disable_16bit_access()
147 ed_enable_16bit_access(struct ed_softc *sc) in ed_enable_16bit_access() argument
149 if (sc->isa16bit && sc->vendor == ED_VENDOR_WD_SMC) { in ed_enable_16bit_access()
150 ed_asic_outb(sc, ED_WD_LAAR, in ed_enable_16bit_access()
151 sc->wd_laar_proto | ED_WD_LAAR_M16EN); in ed_enable_16bit_access()
152 if (sc->chip_type == ED_CHIP_TYPE_WD790) in ed_enable_16bit_access()
153 ed_asic_outb(sc, ED_WD_MSR, ED_WD_MSR_MENB); in ed_enable_16bit_access()
163 struct ed_softc *sc = device_get_softc(dev); in ed_alloc_port() local
169 sc->port_res = res; in ed_alloc_port()
170 sc->port_used = size; in ed_alloc_port()
171 sc->port_bst = rman_get_bustag(res); in ed_alloc_port()
172 sc->port_bsh = rman_get_bushandle(res); in ed_alloc_port()
184 struct ed_softc *sc = device_get_softc(dev); in ed_alloc_memory() local
190 sc->mem_res = res; in ed_alloc_memory()
191 sc->mem_used = size; in ed_alloc_memory()
192 sc->mem_bst = rman_get_bustag(res); in ed_alloc_memory()
193 sc->mem_bsh = rman_get_bushandle(res); in ed_alloc_memory()
205 struct ed_softc *sc = device_get_softc(dev); in ed_alloc_irq() local
210 sc->irq_res = res; in ed_alloc_irq()
222 struct ed_softc *sc = device_get_softc(dev); in ed_release_resources() local
224 if (sc->port_res) in ed_release_resources()
225 bus_free_resource(dev, SYS_RES_IOPORT, sc->port_res); in ed_release_resources()
226 if (sc->port_res2) in ed_release_resources()
227 bus_free_resource(dev, SYS_RES_IOPORT, sc->port_res2); in ed_release_resources()
228 if (sc->mem_res) in ed_release_resources()
229 bus_free_resource(dev, SYS_RES_MEMORY, sc->mem_res); in ed_release_resources()
230 if (sc->irq_res) in ed_release_resources()
231 bus_free_resource(dev, SYS_RES_IRQ, sc->irq_res); in ed_release_resources()
232 sc->port_res = 0; in ed_release_resources()
233 sc->port_res2 = 0; in ed_release_resources()
234 sc->mem_res = 0; in ed_release_resources()
235 sc->irq_res = 0; in ed_release_resources()
236 if (sc->ifp) in ed_release_resources()
237 if_free(sc->ifp); in ed_release_resources()
246 struct ed_softc *sc = device_get_softc(dev); in ed_attach() local
249 sc->dev = dev; in ed_attach()
250 ED_LOCK_INIT(sc); in ed_attach()
251 ifp = sc->ifp = if_alloc(IFT_ETHER); in ed_attach()
254 ED_LOCK_DESTROY(sc); in ed_attach()
258 if (sc->readmem == NULL) { in ed_attach()
259 if (sc->mem_shared) { in ed_attach()
260 if (sc->isa16bit) in ed_attach()
261 sc->readmem = ed_shmem_readmem16; in ed_attach()
263 sc->readmem = ed_shmem_readmem8; in ed_attach()
265 sc->readmem = ed_pio_readmem; in ed_attach()
268 if (sc->sc_write_mbufs == NULL) { in ed_attach()
273 callout_init_mtx(&sc->tick_ch, ED_MUTEX(sc), 0); in ed_attach()
277 ed_stop_hw(sc); in ed_attach()
282 ifp->if_softc = sc; in ed_attach()
290 ifp->if_linkmib = &sc->mibdata; in ed_attach()
291 ifp->if_linkmiblen = sizeof sc->mibdata; in ed_attach()
295 if (sc->chip_type == ED_CHIP_TYPE_WD790) in ed_attach()
296 sc->mibdata.dot3StatsEtherChipSet = in ed_attach()
300 sc->mibdata.dot3StatsEtherChipSet = in ed_attach()
303 sc->mibdata.dot3Compliance = DOT3COMPLIANCE_COLLS; in ed_attach()
320 ether_ifattach(ifp, sc->enaddr); in ed_attach()
323 sc->tx_mem = sc->txb_cnt * ED_PAGE_SIZE * ED_TXBUF_SIZE; in ed_attach()
324 sc->rx_mem = (sc->rec_page_stop - sc->rec_page_start) * ED_PAGE_SIZE; in ed_attach()
327 0, "type", CTLFLAG_RD, sc->type_str, 0, in ed_attach()
331 1, "TxMem", CTLFLAG_RD, &sc->tx_mem, 0, in ed_attach()
335 2, "RxMem", CTLFLAG_RD, &sc->rx_mem, 0, in ed_attach()
339 3, "Mem", CTLFLAG_RD, &sc->mem_size, 0, in ed_attach()
342 if (sc->type_str && (*sc->type_str != 0)) in ed_attach()
343 device_printf(dev, "type %s ", sc->type_str); in ed_attach()
345 device_printf(dev, "type unknown (0x%x) ", sc->type); in ed_attach()
348 if (sc->vendor == ED_VENDOR_HP) in ed_attach()
350 (sc->hpp_id & ED_HPP_ID_16_BIT_ACCESS) ? in ed_attach()
352 sc->hpp_mem_start ? "memory mapped" : "regular"); in ed_attach()
355 printf("%s", sc->isa16bit ? "(16 bit)" : "(8 bit)"); in ed_attach()
358 printf("%s", (((sc->vendor == ED_VENDOR_3COM) || in ed_attach()
359 (sc->vendor == ED_VENDOR_HP)) && in ed_attach()
374 struct ed_softc *sc = device_get_softc(dev); in ed_detach() local
375 struct ifnet *ifp = sc->ifp; in ed_detach()
377 if (mtx_initialized(ED_MUTEX(sc))) in ed_detach()
378 ED_ASSERT_UNLOCKED(sc); in ed_detach()
380 ED_LOCK(sc); in ed_detach()
382 ed_stop(sc); in ed_detach()
384 ED_UNLOCK(sc); in ed_detach()
386 callout_drain(&sc->tick_ch); in ed_detach()
388 if (sc->irq_res != NULL && sc->irq_handle) in ed_detach()
389 bus_teardown_intr(dev, sc->irq_res, sc->irq_handle); in ed_detach()
391 if (sc->miibus) in ed_detach()
392 device_delete_child(dev, sc->miibus); in ed_detach()
393 if (mtx_initialized(ED_MUTEX(sc))) in ed_detach()
394 ED_LOCK_DESTROY(sc); in ed_detach()
405 struct ed_softc *sc = ifp->if_softc; in ed_reset() local
407 ED_ASSERT_LOCKED(sc); in ed_reset()
411 ed_stop(sc); in ed_reset()
412 ed_init_locked(sc); in ed_reset()
416 ed_stop_hw(struct ed_softc *sc) in ed_stop_hw() argument
423 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_stop_hw()
425 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STP); in ed_stop_hw()
426 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_stop_hw()
439 if (sc->chip_type == ED_CHIP_TYPE_AX88190 || in ed_stop_hw()
440 sc->chip_type == ED_CHIP_TYPE_AX88790) in ed_stop_hw()
442 while (((ed_nic_inb(sc, ED_P0_ISR) & ED_ISR_RST) == 0) && --n) in ed_stop_hw()
445 device_printf(sc->dev, "ed_stop_hw RST never set\n"); in ed_stop_hw()
452 ed_stop(struct ed_softc *sc) in ed_stop() argument
454 ED_ASSERT_LOCKED(sc); in ed_stop()
455 callout_stop(&sc->tick_ch); in ed_stop()
456 ed_stop_hw(sc); in ed_stop()
466 struct ed_softc *sc; in ed_tick() local
468 sc = arg; in ed_tick()
469 ED_ASSERT_LOCKED(sc); in ed_tick()
470 if (sc->sc_tick) in ed_tick()
471 sc->sc_tick(sc); in ed_tick()
472 if (sc->tx_timer != 0 && --sc->tx_timer == 0) in ed_tick()
473 ed_watchdog(sc); in ed_tick()
474 callout_reset(&sc->tick_ch, hz, ed_tick, sc); in ed_tick()
482 ed_watchdog(struct ed_softc *sc) in ed_watchdog() argument
486 ifp = sc->ifp; in ed_watchdog()
499 struct ed_softc *sc = xsc; in ed_init() local
501 ED_ASSERT_UNLOCKED(sc); in ed_init()
502 ED_LOCK(sc); in ed_init()
503 ed_init_locked(sc); in ed_init()
504 ED_UNLOCK(sc); in ed_init()
508 ed_init_locked(struct ed_softc *sc) in ed_init_locked() argument
510 struct ifnet *ifp = sc->ifp; in ed_init_locked()
513 ED_ASSERT_LOCKED(sc); in ed_init_locked()
522 sc->xmit_busy = 0; in ed_init_locked()
523 sc->tx_timer = 0; in ed_init_locked()
525 sc->txb_inuse = 0; in ed_init_locked()
526 sc->txb_new = 0; in ed_init_locked()
527 sc->txb_next_tx = 0; in ed_init_locked()
530 sc->next_packet = sc->rec_page_start + 1; in ed_init_locked()
535 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_init_locked()
537 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STP); in ed_init_locked()
538 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_init_locked()
541 if (sc->isa16bit) in ed_init_locked()
546 ed_nic_outb(sc, ED_P0_DCR, ED_DCR_FT1 | ED_DCR_WTS | ED_DCR_LS); in ed_init_locked()
551 ed_nic_outb(sc, ED_P0_DCR, ED_DCR_FT1 | ED_DCR_LS); in ed_init_locked()
556 ed_nic_outb(sc, ED_P0_RBCR0, 0); in ed_init_locked()
557 ed_nic_outb(sc, ED_P0_RBCR1, 0); in ed_init_locked()
562 ed_nic_outb(sc, ED_P0_RCR, ED_RCR_MON); in ed_init_locked()
567 ed_nic_outb(sc, ED_P0_TCR, ED_TCR_LB0); in ed_init_locked()
572 ed_nic_outb(sc, ED_P0_TPSR, sc->tx_page_start); in ed_init_locked()
573 ed_nic_outb(sc, ED_P0_PSTART, sc->rec_page_start); in ed_init_locked()
575 if (sc->chip_type == ED_CHIP_TYPE_WD790) in ed_init_locked()
576 ed_nic_outb(sc, 0x09, 0); in ed_init_locked()
581 ed_nic_outb(sc, ED_P0_PSTOP, sc->rec_page_stop); in ed_init_locked()
582 ed_nic_outb(sc, ED_P0_BNRY, sc->rec_page_start); in ed_init_locked()
588 ed_nic_outb(sc, ED_P0_ISR, 0xff); in ed_init_locked()
596 ed_nic_outb(sc, ED_P0_IMR, in ed_init_locked()
602 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_init_locked()
604 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_PAGE_1 | ED_CR_STP); in ed_init_locked()
605 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_init_locked()
612 ed_nic_outb(sc, ED_P1_PAR(i), IF_LLADDR(sc->ifp)[i]); in ed_init_locked()
617 ed_nic_outb(sc, ED_P1_CURR, sc->next_packet); in ed_init_locked()
623 ed_setrcr(sc); in ed_init_locked()
628 ed_nic_outb(sc, ED_P0_TCR, 0); in ed_init_locked()
630 if (sc->sc_mediachg) in ed_init_locked()
631 sc->sc_mediachg(sc); in ed_init_locked()
644 callout_reset(&sc->tick_ch, hz, ed_tick, sc); in ed_init_locked()
651 ed_xmit(struct ed_softc *sc) in ed_xmit() argument
655 len = sc->txb_len[sc->txb_next_tx]; in ed_xmit()
660 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_xmit()
662 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STA); in ed_xmit()
663 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_xmit()
669 ed_nic_outb(sc, ED_P0_TPSR, sc->tx_page_start + in ed_xmit()
670 sc->txb_next_tx * ED_TXBUF_SIZE); in ed_xmit()
675 ed_nic_outb(sc, ED_P0_TBCR0, len); in ed_xmit()
676 ed_nic_outb(sc, ED_P0_TBCR1, len >> 8); in ed_xmit()
681 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_xmit()
683 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_TXP | ED_CR_STA); in ed_xmit()
684 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_xmit()
686 sc->xmit_busy = 1; in ed_xmit()
691 sc->txb_next_tx++; in ed_xmit()
692 if (sc->txb_next_tx == sc->txb_cnt) in ed_xmit()
693 sc->txb_next_tx = 0; in ed_xmit()
698 sc->tx_timer = 2; in ed_xmit()
713 struct ed_softc *sc = ifp->if_softc; in ed_start() local
715 ED_ASSERT_UNLOCKED(sc); in ed_start()
716 ED_LOCK(sc); in ed_start()
718 ED_UNLOCK(sc); in ed_start()
724 struct ed_softc *sc = ifp->if_softc; in ed_start_locked() local
729 ED_ASSERT_LOCKED(sc); in ed_start_locked()
736 if (sc->txb_inuse && (sc->xmit_busy == 0)) { in ed_start_locked()
738 ed_xmit(sc); in ed_start_locked()
744 if (sc->txb_inuse == sc->txb_cnt) { in ed_start_locked()
772 buffer = sc->mem_start + (sc->txb_new * ED_TXBUF_SIZE * ED_PAGE_SIZE); in ed_start_locked()
774 len = sc->sc_write_mbufs(sc, m, buffer); in ed_start_locked()
780 sc->txb_len[sc->txb_new] = max(len, (ETHER_MIN_LEN-ETHER_CRC_LEN)); in ed_start_locked()
782 sc->txb_inuse++; in ed_start_locked()
787 sc->txb_new++; in ed_start_locked()
788 if (sc->txb_new == sc->txb_cnt) in ed_start_locked()
789 sc->txb_new = 0; in ed_start_locked()
791 if (sc->xmit_busy == 0) in ed_start_locked()
792 ed_xmit(sc); in ed_start_locked()
811 ed_rint(struct ed_softc *sc) in ed_rint() argument
813 struct ifnet *ifp = sc->ifp; in ed_rint()
819 ED_ASSERT_LOCKED(sc); in ed_rint()
824 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_rint()
826 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_PAGE_1 | ED_CR_STA); in ed_rint()
827 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_rint()
838 while (sc->next_packet != ed_nic_inb(sc, ED_P1_CURR)) { in ed_rint()
841 packet_ptr = sc->mem_ring + in ed_rint()
842 (sc->next_packet - sc->rec_page_start) * ED_PAGE_SIZE; in ed_rint()
848 sc->readmem(sc, packet_ptr, (char *) &packet_hdr, in ed_rint()
865 if (packet_hdr.next_packet >= sc->next_packet) in ed_rint()
867 sc->next_packet) * ED_PAGE_SIZE; in ed_rint()
870 ((packet_hdr.next_packet - sc->rec_page_start) + in ed_rint()
871 (sc->rec_page_stop - sc->next_packet)) * ED_PAGE_SIZE; in ed_rint()
881 sc->mibdata.dot3StatsFrameTooLongs++; in ed_rint()
896 (packet_hdr.next_packet >= sc->rec_page_start) && in ed_rint()
897 (packet_hdr.next_packet < sc->rec_page_stop)) { in ed_rint()
901 ed_get_packet(sc, packet_ptr + sizeof(struct ed_ring), in ed_rint()
919 sc->next_packet = packet_hdr.next_packet; in ed_rint()
925 boundry = sc->next_packet - 1; in ed_rint()
926 if (boundry < sc->rec_page_start) in ed_rint()
927 boundry = sc->rec_page_stop - 1; in ed_rint()
932 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_rint()
934 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STA); in ed_rint()
935 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_rint()
937 ed_nic_outb(sc, ED_P0_BNRY, boundry); in ed_rint()
943 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_rint()
945 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_PAGE_1 | ED_CR_STA); in ed_rint()
946 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_rint()
957 struct ed_softc *sc = (struct ed_softc*) arg; in edintr() local
958 struct ifnet *ifp = sc->ifp; in edintr()
962 ED_LOCK(sc); in edintr()
964 ED_UNLOCK(sc); in edintr()
970 ed_nic_barrier(sc, ED_P0_CR, 1, in edintr()
972 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STA); in edintr()
973 ed_nic_barrier(sc, ED_P0_CR, 1, in edintr()
984 while ((isr = ed_nic_inb(sc, ED_P0_ISR)) != 0 && isr != 0xff) { in edintr()
991 ed_nic_outb(sc, ED_P0_ISR, isr); in edintr()
1002 if (sc->chip_type == ED_CHIP_TYPE_AX88190) { in edintr()
1004 while (count-- && (ed_nic_inb(sc, ED_P0_ISR) & isr)) { in edintr()
1005 ed_nic_outb(sc, ED_P0_ISR,0); in edintr()
1006 ed_nic_outb(sc, ED_P0_ISR,isr); in edintr()
1017 u_char collisions = ed_nic_inb(sc, ED_P0_NCR) & 0x0f; in edintr()
1028 (void) ed_nic_inb(sc, ED_P0_TSR); in edintr()
1035 tsr = ed_nic_inb(sc, ED_P0_TSR); in edintr()
1045 sc->mibdata.dot3StatsExcessiveCollisions++; in edintr()
1046 sc->mibdata.dot3StatsCollFrequencies[15]++; in edintr()
1049 sc->mibdata.dot3StatsLateCollisions++; in edintr()
1051 sc->mibdata.dot3StatsSQETestErrors++; in edintr()
1053 sc->mibdata.dot3StatsCarrierSenseErrors++; in edintr()
1055 sc->mibdata.dot3StatsInternalMacTransmitErrors++; in edintr()
1073 sc->xmit_busy = 0; in edintr()
1079 sc->tx_timer = 0; in edintr()
1091 sc->mibdata.dot3StatsSingleCollisionFrames++; in edintr()
1092 sc->mibdata.dot3StatsCollFrequencies[0]++; in edintr()
1095 sc->mibdata.dot3StatsMultipleCollisionFrames++; in edintr()
1096 sc->mibdata. in edintr()
1109 if (sc->txb_inuse && --sc->txb_inuse) in edintr()
1110 ed_xmit(sc); in edintr()
1148 rsr = ed_nic_inb(sc, ED_P0_RSR); in edintr()
1150 sc->mibdata.dot3StatsFCSErrors++; in edintr()
1152 sc->mibdata.dot3StatsAlignmentErrors++; in edintr()
1154 sc->mibdata.dot3StatsInternalMacReceiveErrors++; in edintr()
1158 ed_nic_inb(sc, ED_P0_RSR)); in edintr()
1174 ed_enable_16bit_access(sc); in edintr()
1175 ed_rint(sc); in edintr()
1176 ed_disable_16bit_access(sc); in edintr()
1194 ed_nic_barrier(sc, ED_P0_CR, 1, in edintr()
1196 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STA); in edintr()
1197 ed_nic_barrier(sc, ED_P0_CR, 1, in edintr()
1206 (void) ed_nic_inb(sc, ED_P0_CNTR0); in edintr()
1207 (void) ed_nic_inb(sc, ED_P0_CNTR1); in edintr()
1208 (void) ed_nic_inb(sc, ED_P0_CNTR2); in edintr()
1211 ED_UNLOCK(sc); in edintr()
1220 struct ed_softc *sc = ifp->if_softc; in ed_ioctl() local
1231 ED_LOCK(sc); in ed_ioctl()
1234 ed_init_locked(sc); in ed_ioctl()
1235 else if (sc->sc_mediachg) in ed_ioctl()
1236 sc->sc_mediachg(sc); in ed_ioctl()
1239 ed_stop(sc); in ed_ioctl()
1247 ed_setrcr(sc); in ed_ioctl()
1249 ED_UNLOCK(sc); in ed_ioctl()
1258 ED_LOCK(sc); in ed_ioctl()
1259 ed_setrcr(sc); in ed_ioctl()
1260 ED_UNLOCK(sc); in ed_ioctl()
1266 if (sc->sc_media_ioctl == NULL) { in ed_ioctl()
1270 sc->sc_media_ioctl(sc, ifr, command); in ed_ioctl()
1286 ed_ring_copy(struct ed_softc *sc, bus_size_t src, char *dst, u_short amount) in ed_ring_copy() argument
1291 if (src + amount > sc->mem_end) { in ed_ring_copy()
1292 tmp_amount = sc->mem_end - src; in ed_ring_copy()
1294 sc->readmem(sc, src, dst, tmp_amount); in ed_ring_copy()
1296 src = sc->mem_ring; in ed_ring_copy()
1299 sc->readmem(sc, src, dst, amount); in ed_ring_copy()
1307 ed_get_packet(struct ed_softc *sc, bus_size_t buf, u_short len) in ed_get_packet() argument
1309 struct ifnet *ifp = sc->ifp; in ed_get_packet()
1344 ed_ring_copy(sc, buf, (char *)eh, len); in ed_get_packet()
1348 ED_UNLOCK(sc); in ed_get_packet()
1350 ED_LOCK(sc); in ed_get_packet()
1365 ed_shmem_readmem16(struct ed_softc *sc, bus_size_t src, uint8_t *dst, in ed_shmem_readmem16() argument
1368 bus_space_read_region_2(sc->mem_bst, sc->mem_bsh, src, (uint16_t *)dst, in ed_shmem_readmem16()
1378 ed_shmem_readmem8(struct ed_softc *sc, bus_size_t src, uint8_t *dst, in ed_shmem_readmem8() argument
1381 bus_space_read_region_1(sc->mem_bst, sc->mem_bsh, src, dst, amount); in ed_shmem_readmem8()
1392 ed_pio_readmem(struct ed_softc *sc, bus_size_t src, uint8_t *dst, in ed_pio_readmem() argument
1397 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_pio_readmem()
1399 ed_nic_outb(sc, ED_P0_CR, ED_CR_RD2 | ED_CR_STA); in ed_pio_readmem()
1400 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_pio_readmem()
1408 ed_nic_outb(sc, ED_P0_RBCR0, amount); in ed_pio_readmem()
1409 ed_nic_outb(sc, ED_P0_RBCR1, amount >> 8); in ed_pio_readmem()
1412 ed_nic_outb(sc, ED_P0_RSAR0, src); in ed_pio_readmem()
1413 ed_nic_outb(sc, ED_P0_RSAR1, src >> 8); in ed_pio_readmem()
1415 ed_nic_outb(sc, ED_P0_CR, ED_CR_RD0 | ED_CR_STA); in ed_pio_readmem()
1417 if (sc->isa16bit) in ed_pio_readmem()
1418 ed_asic_insw(sc, ED_NOVELL_DATA, dst, amount / 2); in ed_pio_readmem()
1420 ed_asic_insb(sc, ED_NOVELL_DATA, dst, amount); in ed_pio_readmem()
1429 ed_pio_writemem(struct ed_softc *sc, uint8_t *src, uint16_t dst, uint16_t len) in ed_pio_writemem() argument
1434 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_pio_writemem()
1436 ed_nic_outb(sc, ED_P0_CR, ED_CR_RD2 | ED_CR_STA); in ed_pio_writemem()
1437 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_pio_writemem()
1441 ed_nic_outb(sc, ED_P0_ISR, ED_ISR_RDC); in ed_pio_writemem()
1444 ed_nic_outb(sc, ED_P0_RBCR0, len); in ed_pio_writemem()
1445 ed_nic_outb(sc, ED_P0_RBCR1, len >> 8); in ed_pio_writemem()
1448 ed_nic_outb(sc, ED_P0_RSAR0, dst); in ed_pio_writemem()
1449 ed_nic_outb(sc, ED_P0_RSAR1, dst >> 8); in ed_pio_writemem()
1452 ed_nic_outb(sc, ED_P0_CR, ED_CR_RD1 | ED_CR_STA); in ed_pio_writemem()
1454 if (sc->isa16bit) in ed_pio_writemem()
1455 ed_asic_outsw(sc, ED_NOVELL_DATA, src, len / 2); in ed_pio_writemem()
1457 ed_asic_outsb(sc, ED_NOVELL_DATA, src, len); in ed_pio_writemem()
1466 while (((ed_nic_inb(sc, ED_P0_ISR) & ED_ISR_RDC) != ED_ISR_RDC) && in ed_pio_writemem()
1476 ed_pio_write_mbufs(struct ed_softc *sc, struct mbuf *m, bus_size_t dst) in ed_pio_write_mbufs() argument
1478 struct ifnet *ifp = sc->ifp; in ed_pio_write_mbufs()
1483 ED_ASSERT_LOCKED(sc); in ed_pio_write_mbufs()
1491 if (sc->isa16bit && (dma_len & 1)) in ed_pio_write_mbufs()
1495 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_pio_write_mbufs()
1497 ed_nic_outb(sc, ED_P0_CR, ED_CR_RD2 | ED_CR_STA); in ed_pio_write_mbufs()
1498 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_pio_write_mbufs()
1502 ed_nic_outb(sc, ED_P0_ISR, ED_ISR_RDC); in ed_pio_write_mbufs()
1505 ed_nic_outb(sc, ED_P0_RBCR0, dma_len); in ed_pio_write_mbufs()
1506 ed_nic_outb(sc, ED_P0_RBCR1, dma_len >> 8); in ed_pio_write_mbufs()
1509 ed_nic_outb(sc, ED_P0_RSAR0, dst); in ed_pio_write_mbufs()
1510 ed_nic_outb(sc, ED_P0_RSAR1, dst >> 8); in ed_pio_write_mbufs()
1513 ed_nic_outb(sc, ED_P0_CR, ED_CR_RD1 | ED_CR_STA); in ed_pio_write_mbufs()
1521 if (!sc->isa16bit) { in ed_pio_write_mbufs()
1525 ed_asic_outsb(sc, ED_NOVELL_DATA, in ed_pio_write_mbufs()
1547 ed_asic_outw(sc, ED_NOVELL_DATA, in ed_pio_write_mbufs()
1555 ed_asic_outsw(sc, ED_NOVELL_DATA, in ed_pio_write_mbufs()
1570 ed_asic_outw(sc, ED_NOVELL_DATA, saveword.w); in ed_pio_write_mbufs()
1580 while (((ed_nic_inb(sc, ED_P0_ISR) & ED_ISR_RDC) != ED_ISR_RDC) && in ed_pio_write_mbufs()
1594 ed_setrcr(struct ed_softc *sc) in ed_setrcr() argument
1596 struct ifnet *ifp = sc->ifp; in ed_setrcr()
1600 ED_ASSERT_LOCKED(sc); in ed_setrcr()
1603 if (sc->chip_type == ED_CHIP_TYPE_AX88190 || in ed_setrcr()
1604 sc->chip_type == ED_CHIP_TYPE_AX88790) in ed_setrcr()
1610 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_setrcr()
1612 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_PAGE_1 | ED_CR_STP); in ed_setrcr()
1613 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_setrcr()
1622 ed_nic_outb(sc, ED_P1_MAR(i), 0xff); in ed_setrcr()
1629 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_setrcr()
1631 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STP); in ed_setrcr()
1632 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_setrcr()
1635 ed_nic_outb(sc, ED_P0_RCR, ED_RCR_PRO | ED_RCR_AM | in ed_setrcr()
1646 ed_ds_getmcaf(sc, mcaf); in ed_setrcr()
1652 ed_nic_outb(sc, ED_P1_MAR(i), ((u_char *) mcaf)[i]); in ed_setrcr()
1655 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_setrcr()
1657 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STP); in ed_setrcr()
1658 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_setrcr()
1661 ed_nic_outb(sc, ED_P0_RCR, ED_RCR_AM | ED_RCR_AB | reg1); in ed_setrcr()
1669 ed_nic_outb(sc, ED_P1_MAR(i), 0x00); in ed_setrcr()
1672 ed_nic_barrier(sc, ED_P0_CR, 1, in ed_setrcr()
1674 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STP); in ed_setrcr()
1676 ed_nic_outb(sc, ED_P0_RCR, ED_RCR_AB | reg1); in ed_setrcr()
1683 ed_nic_outb(sc, ED_P0_CR, sc->cr_proto | ED_CR_STA); in ed_setrcr()
1691 ed_ds_getmcaf(struct ed_softc *sc, uint32_t *mcaf) in ed_ds_getmcaf() argument
1700 if_maddr_rlock(sc->ifp); in ed_ds_getmcaf()
1701 TAILQ_FOREACH(ifma, &sc->ifp->if_multiaddrs, ifma_link) { in ed_ds_getmcaf()
1708 if_maddr_runlock(sc->ifp); in ed_ds_getmcaf()
1725 struct ed_softc *sc = device_get_softc(dev); in ed_clear_memory() local
1728 bus_space_set_region_1(sc->mem_bst, sc->mem_bsh, sc->mem_start, in ed_clear_memory()
1729 0, sc->mem_size); in ed_clear_memory()
1731 for (i = 0; i < sc->mem_size; i++) { in ed_clear_memory()
1732 if (bus_space_read_1(sc->mem_bst, sc->mem_bsh, in ed_clear_memory()
1733 sc->mem_start + i)) { in ed_clear_memory()
1736 (uintmax_t)rman_get_start(sc->mem_res) + i); in ed_clear_memory()
1744 ed_shmem_write_mbufs(struct ed_softc *sc, struct mbuf *m, bus_size_t dst) in ed_shmem_write_mbufs() argument
1751 if (sc->isa16bit) { in ed_shmem_write_mbufs()
1752 switch (sc->vendor) { in ed_shmem_write_mbufs()
1761 ed_asic_outb(sc, ED_3COM_GACFR, ED_3COM_GACFR_RSEL); in ed_shmem_write_mbufs()
1771 ed_asic_outb(sc, ED_WD_LAAR, in ed_shmem_write_mbufs()
1772 sc->wd_laar_proto | ED_WD_LAAR_M16EN); in ed_shmem_write_mbufs()
1773 if (sc->chip_type == ED_CHIP_TYPE_WD790) in ed_shmem_write_mbufs()
1774 ed_asic_outb(sc, ED_WD_MSR, ED_WD_MSR_MENB); in ed_shmem_write_mbufs()
1781 if (sc->isa16bit) { in ed_shmem_write_mbufs()
1783 bus_space_write_region_2(sc->mem_bst, in ed_shmem_write_mbufs()
1784 sc->mem_bsh, dst, in ed_shmem_write_mbufs()
1787 bus_space_write_1(sc->mem_bst, sc->mem_bsh, in ed_shmem_write_mbufs()
1791 bus_space_write_region_1(sc->mem_bst, in ed_shmem_write_mbufs()
1792 sc->mem_bsh, dst, in ed_shmem_write_mbufs()
1801 if (sc->isa16bit) { in ed_shmem_write_mbufs()
1802 switch (sc->vendor) { in ed_shmem_write_mbufs()
1805 ed_asic_outb(sc, ED_3COM_GACFR, in ed_shmem_write_mbufs()
1811 if (sc->chip_type == ED_CHIP_TYPE_WD790) in ed_shmem_write_mbufs()
1812 ed_asic_outb(sc, ED_WD_MSR, 0x00); in ed_shmem_write_mbufs()
1813 ed_asic_outb(sc, ED_WD_LAAR, in ed_shmem_write_mbufs()
1814 sc->wd_laar_proto & ~ED_WD_LAAR_M16EN); in ed_shmem_write_mbufs()
1829 ed_gen_ifmedia_ioctl(struct ed_softc *sc, struct ifreq *ifr, u_long command) in ed_gen_ifmedia_ioctl() argument
1831 return (ifmedia_ioctl(sc->ifp, ifr, &sc->ifmedia, command)); in ed_gen_ifmedia_ioctl()
1848 ed_gen_ifmedia_init(struct ed_softc *sc) in ed_gen_ifmedia_init() argument
1850 sc->sc_media_ioctl = &ed_gen_ifmedia_ioctl; in ed_gen_ifmedia_init()
1851 ifmedia_init(&sc->ifmedia, 0, ed_gen_ifmedia_upd, ed_gen_ifmedia_sts); in ed_gen_ifmedia_init()
1852 ifmedia_add(&sc->ifmedia, IFM_ETHER | IFM_AUTO, 0, 0); in ed_gen_ifmedia_init()
1853 ifmedia_set(&sc->ifmedia, IFM_ETHER | IFM_AUTO); in ed_gen_ifmedia_init()