Lines Matching refs:efep

255 	efe_t *efep;  in efe_attach()  local
263 efep = ddi_get_driver_private(dip); in efe_attach()
264 return (efe_resume(efep)); in efe_attach()
298 efep = kmem_zalloc(sizeof (efe_t), KM_SLEEP); in efe_attach()
299 ddi_set_driver_private(dip, efep); in efe_attach()
301 efep->efe_dip = dip; in efe_attach()
303 if (ddi_regs_map_setup(dip, 1, (caddr_t *)&efep->efe_regs, 0, 0, in efe_attach()
304 &efe_regs_acc_attr, &efep->efe_regs_acch) != DDI_SUCCESS) { in efe_attach()
309 efep->efe_rx_ring = efe_ring_alloc(efep->efe_dip, RXDESCL); in efe_attach()
310 if (efep->efe_rx_ring == NULL) { in efe_attach()
311 efe_error(efep->efe_dip, "unable to allocate rx ring!"); in efe_attach()
315 efep->efe_tx_ring = efe_ring_alloc(efep->efe_dip, TXDESCL); in efe_attach()
316 if (efep->efe_tx_ring == NULL) { in efe_attach()
317 efe_error(efep->efe_dip, "unable to allocate tx ring!"); in efe_attach()
321 if (ddi_intr_alloc(dip, &efep->efe_intrh, DDI_INTR_TYPE_FIXED, 0, in efe_attach()
328 if (ddi_intr_get_pri(efep->efe_intrh, &pri) != DDI_SUCCESS || in efe_attach()
334 mutex_init(&efep->efe_intrlock, NULL, MUTEX_DRIVER, in efe_attach()
337 mutex_init(&efep->efe_txlock, NULL, MUTEX_DRIVER, in efe_attach()
343 mutex_enter(&efep->efe_intrlock); in efe_attach()
344 mutex_enter(&efep->efe_txlock); in efe_attach()
346 efe_reset(efep); in efe_attach()
348 mutex_exit(&efep->efe_txlock); in efe_attach()
349 mutex_exit(&efep->efe_intrlock); in efe_attach()
352 efe_getaddr(efep, efep->efe_macaddr); in efe_attach()
357 if (ddi_intr_add_handler(efep->efe_intrh, efe_intr, efep, NULL) in efe_attach()
363 if (ddi_intr_enable(efep->efe_intrh) != DDI_SUCCESS) { in efe_attach()
371 if ((efep->efe_miih = mii_alloc(efep, dip, &efe_mii_ops)) == NULL) { in efe_attach()
385 macp->m_driver = efep; in efe_attach()
387 macp->m_src_addr = efep->efe_macaddr; in efe_attach()
393 if (mac_register(macp, &efep->efe_mh) != 0) { in efe_attach()
408 if (efep->efe_miih != NULL) { in efe_attach()
409 mii_free(efep->efe_miih); in efe_attach()
412 if (efep->efe_intrh != NULL) { in efe_attach()
413 (void) ddi_intr_disable(efep->efe_intrh); in efe_attach()
414 (void) ddi_intr_remove_handler(efep->efe_intrh); in efe_attach()
415 (void) ddi_intr_free(efep->efe_intrh); in efe_attach()
418 mutex_destroy(&efep->efe_txlock); in efe_attach()
419 mutex_destroy(&efep->efe_intrlock); in efe_attach()
421 if (efep->efe_tx_ring != NULL) { in efe_attach()
422 efe_ring_free(&efep->efe_tx_ring); in efe_attach()
424 if (efep->efe_rx_ring != NULL) { in efe_attach()
425 efe_ring_free(&efep->efe_rx_ring); in efe_attach()
428 if (efep->efe_regs_acch != NULL) { in efe_attach()
429 ddi_regs_map_free(&efep->efe_regs_acch); in efe_attach()
432 kmem_free(efep, sizeof (efe_t)); in efe_attach()
440 efe_t *efep = ddi_get_driver_private(dip); in efe_detach() local
447 return (efe_suspend(efep)); in efe_detach()
453 if (mac_unregister(efep->efe_mh) != 0) { in efe_detach()
458 mii_free(efep->efe_miih); in efe_detach()
460 (void) ddi_intr_disable(efep->efe_intrh); in efe_detach()
461 (void) ddi_intr_remove_handler(efep->efe_intrh); in efe_detach()
462 (void) ddi_intr_free(efep->efe_intrh); in efe_detach()
464 mutex_destroy(&efep->efe_txlock); in efe_detach()
465 mutex_destroy(&efep->efe_intrlock); in efe_detach()
467 if (efep->efe_tx_ring != NULL) { in efe_detach()
468 efe_ring_free(&efep->efe_tx_ring); in efe_detach()
470 if (efep->efe_rx_ring != NULL) { in efe_detach()
471 efe_ring_free(&efep->efe_rx_ring); in efe_detach()
474 ddi_regs_map_free(&efep->efe_regs_acch); in efe_detach()
476 kmem_free(efep, sizeof (efe_t)); in efe_detach()
484 efe_t *efep = ddi_get_driver_private(dip); in efe_quiesce() local
486 PUTCSR(efep, CSR_GENCTL, GENCTL_RESET); in efe_quiesce()
489 PUTCSR(efep, CSR_GENCTL, GENCTL_PWRDWN); in efe_quiesce()
500 efe_t *efep = arg; in efe_mii_read() local
502 PUTCSR(efep, CSR_MMCTL, MMCTL_READ | in efe_mii_read()
506 if (!(GETCSR(efep, CSR_MMCTL) & MMCTL_READ)) { in efe_mii_read()
507 return ((uint16_t)GETCSR(efep, CSR_MMDATA)); in efe_mii_read()
511 efe_error(efep->efe_dip, "timed out reading from MII!"); in efe_mii_read()
519 efe_t *efep = arg; in efe_mii_write() local
521 PUTCSR(efep, CSR_MMDATA, data); in efe_mii_write()
523 PUTCSR(efep, CSR_MMCTL, MMCTL_WRITE | in efe_mii_write()
527 if (!(GETCSR(efep, CSR_MMCTL) & MMCTL_WRITE)) { in efe_mii_write()
532 efe_error(efep->efe_dip, "timed out writing to MII!"); in efe_mii_write()
538 efe_t *efep = arg; in efe_mii_notify() local
540 mac_link_update(efep->efe_mh, link); in efe_mii_notify()
549 efe_t *efep = arg; in efe_m_getstat() local
551 if (mii_m_getstat(efep->efe_miih, stat, val) == 0) { in efe_m_getstat()
557 *val = efep->efe_multircv; in efe_m_getstat()
561 *val = efep->efe_brdcstrcv; in efe_m_getstat()
565 *val = efep->efe_multixmt; in efe_m_getstat()
569 *val = efep->efe_brdcstxmt; in efe_m_getstat()
573 *val = efep->efe_norcvbuf; in efe_m_getstat()
577 *val = efep->efe_ierrors; in efe_m_getstat()
581 *val = efep->efe_noxmtbuf; in efe_m_getstat()
585 *val = efep->efe_oerrors; in efe_m_getstat()
589 *val = efep->efe_collisions; in efe_m_getstat()
593 *val = efep->efe_rbytes; in efe_m_getstat()
597 *val = efep->efe_ipackets; in efe_m_getstat()
601 *val = efep->efe_obytes; in efe_m_getstat()
605 *val = efep->efe_opackets; in efe_m_getstat()
609 *val = efep->efe_uflo; in efe_m_getstat()
613 *val = efep->efe_oflo; in efe_m_getstat()
617 *val = efep->efe_align_errors; in efe_m_getstat()
621 *val = efep->efe_fcs_errors; in efe_m_getstat()
625 *val = efep->efe_first_collisions; in efe_m_getstat()
629 *val = efep->efe_tx_late_collisions; in efe_m_getstat()
633 *val = efep->efe_defer_xmts; in efe_m_getstat()
637 *val = efep->efe_ex_collisions; in efe_m_getstat()
641 *val = efep->efe_macxmt_errors; in efe_m_getstat()
645 *val = efep->efe_carrier_errors; in efe_m_getstat()
649 *val = efep->efe_toolong_errors; in efe_m_getstat()
653 *val = efep->efe_macrcv_errors; in efe_m_getstat()
657 *val = efep->efe_runt_errors; in efe_m_getstat()
661 *val = efep->efe_jabber_errors; in efe_m_getstat()
674 efe_t *efep = arg; in efe_m_start() local
676 mutex_enter(&efep->efe_intrlock); in efe_m_start()
677 mutex_enter(&efep->efe_txlock); in efe_m_start()
679 efe_start(efep); in efe_m_start()
680 efep->efe_flags |= FLAG_RUNNING; in efe_m_start()
682 mutex_exit(&efep->efe_txlock); in efe_m_start()
683 mutex_exit(&efep->efe_intrlock); in efe_m_start()
685 mii_start(efep->efe_miih); in efe_m_start()
693 efe_t *efep = arg; in efe_m_stop() local
695 mutex_enter(&efep->efe_intrlock); in efe_m_stop()
696 mutex_enter(&efep->efe_txlock); in efe_m_stop()
698 efe_stop(efep); in efe_m_stop()
699 efep->efe_flags &= ~FLAG_RUNNING; in efe_m_stop()
701 mutex_exit(&efep->efe_txlock); in efe_m_stop()
702 mutex_exit(&efep->efe_intrlock); in efe_m_stop()
704 mii_stop(efep->efe_miih); in efe_m_stop()
710 efe_t *efep = arg; in efe_m_setpromisc() local
712 mutex_enter(&efep->efe_intrlock); in efe_m_setpromisc()
713 mutex_enter(&efep->efe_txlock); in efe_m_setpromisc()
715 if (efep->efe_flags & FLAG_SUSPENDED) { in efe_m_setpromisc()
716 mutex_exit(&efep->efe_txlock); in efe_m_setpromisc()
717 mutex_exit(&efep->efe_intrlock); in efe_m_setpromisc()
721 efep->efe_promisc = on; in efe_m_setpromisc()
723 if (efep->efe_flags & FLAG_RUNNING) { in efe_m_setpromisc()
724 efe_restart(efep); in efe_m_setpromisc()
727 mutex_exit(&efep->efe_txlock); in efe_m_setpromisc()
728 mutex_exit(&efep->efe_intrlock); in efe_m_setpromisc()
736 efe_t *efep = arg; in efe_m_multicst() local
742 mutex_enter(&efep->efe_intrlock); in efe_m_multicst()
743 mutex_enter(&efep->efe_txlock); in efe_m_multicst()
745 if (efep->efe_flags & FLAG_SUSPENDED) { in efe_m_multicst()
746 mutex_exit(&efep->efe_txlock); in efe_m_multicst()
747 mutex_exit(&efep->efe_intrlock); in efe_m_multicst()
758 efep->efe_mccount[val]++; in efe_m_multicst()
759 if (efep->efe_mccount[val] == 1) { in efe_m_multicst()
760 efep->efe_mchash[index] |= bit; in efe_m_multicst()
765 efep->efe_mccount[val]--; in efe_m_multicst()
766 if (efep->efe_mccount[val] == 0) { in efe_m_multicst()
767 efep->efe_mchash[index] &= ~bit; in efe_m_multicst()
772 if (restart && efep->efe_flags & FLAG_RUNNING) { in efe_m_multicst()
773 efe_restart(efep); in efe_m_multicst()
776 mutex_exit(&efep->efe_txlock); in efe_m_multicst()
777 mutex_exit(&efep->efe_intrlock); in efe_m_multicst()
785 efe_t *efep = arg; in efe_m_unicst() local
787 mutex_enter(&efep->efe_intrlock); in efe_m_unicst()
788 mutex_enter(&efep->efe_txlock); in efe_m_unicst()
790 if (efep->efe_flags & FLAG_SUSPENDED) { in efe_m_unicst()
791 mutex_exit(&efep->efe_txlock); in efe_m_unicst()
792 mutex_exit(&efep->efe_intrlock); in efe_m_unicst()
796 bcopy(macaddr, efep->efe_macaddr, ETHERADDRL); in efe_m_unicst()
798 if (efep->efe_flags & FLAG_RUNNING) { in efe_m_unicst()
799 efe_restart(efep); in efe_m_unicst()
802 mutex_exit(&efep->efe_txlock); in efe_m_unicst()
803 mutex_exit(&efep->efe_intrlock); in efe_m_unicst()
811 efe_t *efep = arg; in efe_m_tx() local
813 mutex_enter(&efep->efe_txlock); in efe_m_tx()
815 if (efep->efe_flags & FLAG_SUSPENDED) { in efe_m_tx()
816 mutex_exit(&efep->efe_txlock); in efe_m_tx()
824 if (efe_send(efep, mp) != DDI_SUCCESS) { in efe_m_tx()
832 PUTCSR(efep, CSR_COMMAND, COMMAND_TXQUEUED); in efe_m_tx()
834 mutex_exit(&efep->efe_txlock); in efe_m_tx()
843 efe_t *efep = arg; in efe_m_setprop() local
845 return (mii_m_setprop(efep->efe_miih, name, id, valsize, val)); in efe_m_setprop()
852 efe_t *efep = arg; in efe_m_getprop() local
854 return (mii_m_getprop(efep->efe_miih, name, id, valsize, val)); in efe_m_getprop()
861 efe_t *efep = arg; in efe_m_propinfo() local
863 mii_m_propinfo(efep->efe_miih, name, id, state); in efe_m_propinfo()
872 efe_t *efep = (void *)arg1; in efe_intr() local
878 mutex_enter(&efep->efe_intrlock); in efe_intr()
880 if (efep->efe_flags & FLAG_SUSPENDED) { in efe_intr()
881 mutex_exit(&efep->efe_intrlock); in efe_intr()
885 status = GETCSR(efep, CSR_INTSTAT); in efe_intr()
887 mutex_exit(&efep->efe_intrlock); in efe_intr()
890 PUTCSR(efep, CSR_INTSTAT, status); in efe_intr()
893 mp = efe_recv(efep); in efe_intr()
897 efep->efe_ierrors++; in efe_intr()
898 efep->efe_macrcv_errors++; in efe_intr()
901 PUTCSR(efep, CSR_COMMAND, COMMAND_RXQUEUED); in efe_intr()
905 mutex_enter(&efep->efe_txlock); in efe_intr()
907 efe_send_done(efep); in efe_intr()
909 mutex_exit(&efep->efe_txlock); in efe_intr()
913 mutex_enter(&efep->efe_txlock); in efe_intr()
915 efe_error(efep->efe_dip, "bus error; resetting!"); in efe_intr()
916 efe_restart(efep); in efe_intr()
918 mutex_exit(&efep->efe_txlock); in efe_intr()
921 mutex_exit(&efep->efe_intrlock); in efe_intr()
924 mac_rx(efep->efe_mh, NULL, mp); in efe_intr()
928 mac_tx_update(efep->efe_mh); in efe_intr()
932 mii_reset(efep->efe_miih); in efe_intr()
942 efe_init(efe_t *efep) in efe_init() argument
946 ASSERT(mutex_owned(&efep->efe_intrlock)); in efe_init()
947 ASSERT(mutex_owned(&efep->efe_txlock)); in efe_init()
949 efe_reset(efep); in efe_init()
956 PUTCSR(efep, CSR_GENCTL, val); in efe_init()
957 PUTCSR(efep, CSR_PBLCNT, BURSTLEN); in efe_init()
959 efe_init_rx_ring(efep); in efe_init()
960 efe_init_tx_ring(efep); in efe_init()
962 efe_setaddr(efep, efep->efe_macaddr); in efe_init()
964 if (efep->efe_promisc) { in efe_init()
965 efe_setmchash(efep, efe_mchash_promisc); in efe_init()
967 efe_setmchash(efep, efep->efe_mchash); in efe_init()
972 efe_init_rx_ring(efe_t *efep) in efe_init_rx_ring() argument
976 ASSERT(mutex_owned(&efep->efe_intrlock)); in efe_init_rx_ring()
978 rp = efep->efe_rx_ring; in efe_init_rx_ring()
994 efep->efe_rx_desc = 0; in efe_init_rx_ring()
996 PUTCSR(efep, CSR_PRCDAR, DESCADDR(rp, 0)); in efe_init_rx_ring()
1000 efe_init_tx_ring(efe_t *efep) in efe_init_tx_ring() argument
1004 ASSERT(mutex_owned(&efep->efe_txlock)); in efe_init_tx_ring()
1006 rp = efep->efe_tx_ring; in efe_init_tx_ring()
1022 efep->efe_tx_desc = 0; in efe_init_tx_ring()
1023 efep->efe_tx_sent = 0; in efe_init_tx_ring()
1025 PUTCSR(efep, CSR_PTCDAR, DESCADDR(rp, 0)); in efe_init_tx_ring()
1029 efe_reset(efe_t *efep) in efe_reset() argument
1031 ASSERT(mutex_owned(&efep->efe_intrlock)); in efe_reset()
1032 ASSERT(mutex_owned(&efep->efe_txlock)); in efe_reset()
1034 PUTCSR(efep, CSR_GENCTL, GENCTL_RESET); in efe_reset()
1039 PUTCSR(efep, CSR_TEST, TEST_CLOCK); in efe_reset()
1044 efe_start(efe_t *efep) in efe_start() argument
1046 ASSERT(mutex_owned(&efep->efe_intrlock)); in efe_start()
1047 ASSERT(mutex_owned(&efep->efe_txlock)); in efe_start()
1049 efe_init(efep); in efe_start()
1051 PUTCSR(efep, CSR_RXCON, in efe_start()
1053 (efep->efe_promisc ? RXCON_PROMISC : 0)); in efe_start()
1055 PUTCSR(efep, CSR_TXCON, TXCON_LB_3); in efe_start()
1057 efe_intr_enable(efep); in efe_start()
1059 SETBIT(efep, CSR_COMMAND, in efe_start()
1064 efe_stop(efe_t *efep) in efe_stop() argument
1066 ASSERT(mutex_owned(&efep->efe_intrlock)); in efe_stop()
1067 ASSERT(mutex_owned(&efep->efe_txlock)); in efe_stop()
1069 efe_intr_disable(efep); in efe_stop()
1071 PUTCSR(efep, CSR_COMMAND, COMMAND_STOP_RX); in efe_stop()
1073 efe_stop_dma(efep); in efe_stop()
1075 PUTCSR(efep, CSR_GENCTL, GENCTL_RESET); in efe_stop()
1078 PUTCSR(efep, CSR_GENCTL, GENCTL_PWRDWN); in efe_stop()
1082 efe_stop_dma(efe_t *efep) in efe_stop_dma() argument
1084 ASSERT(mutex_owned(&efep->efe_intrlock)); in efe_stop_dma()
1085 ASSERT(mutex_owned(&efep->efe_txlock)); in efe_stop_dma()
1087 PUTCSR(efep, CSR_COMMAND, in efe_stop_dma()
1091 uint32_t status = GETCSR(efep, CSR_INTSTAT); in efe_stop_dma()
1098 efe_error(efep->efe_dip, "timed out stopping DMA engine!"); in efe_stop_dma()
1102 efe_restart(efe_t *efep) in efe_restart() argument
1104 efe_stop(efep); in efe_restart()
1105 efe_start(efep); in efe_restart()
1109 efe_suspend(efe_t *efep) in efe_suspend() argument
1111 mutex_enter(&efep->efe_intrlock); in efe_suspend()
1112 mutex_enter(&efep->efe_txlock); in efe_suspend()
1114 if (efep->efe_flags & FLAG_RUNNING) { in efe_suspend()
1115 efe_stop(efep); in efe_suspend()
1117 efep->efe_flags |= FLAG_SUSPENDED; in efe_suspend()
1119 mutex_exit(&efep->efe_txlock); in efe_suspend()
1120 mutex_exit(&efep->efe_intrlock); in efe_suspend()
1122 mii_suspend(efep->efe_miih); in efe_suspend()
1128 efe_resume(efe_t *efep) in efe_resume() argument
1130 mutex_enter(&efep->efe_intrlock); in efe_resume()
1131 mutex_enter(&efep->efe_txlock); in efe_resume()
1133 if (efep->efe_flags & FLAG_RUNNING) { in efe_resume()
1134 efe_start(efep); in efe_resume()
1136 efep->efe_flags &= ~FLAG_SUSPENDED; in efe_resume()
1138 mutex_exit(&efep->efe_txlock); in efe_resume()
1139 mutex_exit(&efep->efe_intrlock); in efe_resume()
1141 mii_resume(efep->efe_miih); in efe_resume()
1285 efe_intr_enable(efe_t *efep) in efe_intr_enable() argument
1287 PUTCSR(efep, CSR_INTMASK, in efe_intr_enable()
1290 SETBIT(efep, CSR_GENCTL, GENCTL_INT); in efe_intr_enable()
1294 efe_intr_disable(efe_t *efep) in efe_intr_disable() argument
1296 PUTCSR(efep, CSR_INTMASK, 0); in efe_intr_disable()
1298 CLRBIT(efep, CSR_GENCTL, GENCTL_INT); in efe_intr_disable()
1302 efe_recv(efe_t *efep) in efe_recv() argument
1308 ASSERT(mutex_owned(&efep->efe_intrlock)); in efe_recv()
1310 rp = efep->efe_rx_ring; in efe_recv()
1316 dp = GETDESC(rp, efep->efe_rx_desc); in efe_recv()
1317 SYNCDESC(rp, efep->efe_rx_desc, DDI_DMA_SYNC_FORKERNEL); in efe_recv()
1327 mblk_t *tmp = efe_recv_pkt(efep, dp); in efe_recv()
1334 efep->efe_ierrors++; in efe_recv()
1337 efep->efe_align_errors++; in efe_recv()
1340 efep->efe_fcs_errors++; in efe_recv()
1343 efep->efe_oflo++; in efe_recv()
1350 SYNCDESC(rp, efep->efe_rx_desc, DDI_DMA_SYNC_FORDEV); in efe_recv()
1352 efep->efe_rx_desc = NEXTDESC(rp, efep->efe_rx_desc); in efe_recv()
1359 efe_recv_pkt(efe_t *efep, efe_desc_t *dp) in efe_recv_pkt() argument
1367 ASSERT(mutex_owned(&efep->efe_intrlock)); in efe_recv_pkt()
1369 rp = efep->efe_rx_ring; in efe_recv_pkt()
1374 efep->efe_ierrors++; in efe_recv_pkt()
1375 efep->efe_runt_errors++; in efe_recv_pkt()
1380 efep->efe_ierrors++; in efe_recv_pkt()
1381 efep->efe_toolong_errors++; in efe_recv_pkt()
1387 efep->efe_ierrors++; in efe_recv_pkt()
1388 efep->efe_norcvbuf++; in efe_recv_pkt()
1393 bp = GETBUF(rp, efep->efe_rx_desc); in efe_recv_pkt()
1398 efep->efe_ipackets++; in efe_recv_pkt()
1399 efep->efe_rbytes += len; in efe_recv_pkt()
1404 efep->efe_brdcstrcv++; in efe_recv_pkt()
1407 efep->efe_multircv++; in efe_recv_pkt()
1414 efe_send(efe_t *efep, mblk_t *mp) in efe_send() argument
1422 ASSERT(mutex_owned(&efep->efe_txlock)); in efe_send()
1424 rp = efep->efe_tx_ring; in efe_send()
1429 efep->efe_oerrors++; in efe_send()
1430 efep->efe_macxmt_errors++; in efe_send()
1435 dp = GETDESC(rp, efep->efe_tx_desc); in efe_send()
1436 SYNCDESC(rp, efep->efe_tx_desc, DDI_DMA_SYNC_FORKERNEL); in efe_send()
1438 status = GETDESC16(efep->efe_tx_ring, &dp->d_status); in efe_send()
1445 bp = GETBUF(rp, efep->efe_tx_desc); in efe_send()
1464 SYNCDESC(rp, efep->efe_tx_desc, DDI_DMA_SYNC_FORDEV); in efe_send()
1466 efep->efe_opackets++; in efe_send()
1467 efep->efe_obytes += len; in efe_send()
1471 efep->efe_brdcstxmt++; in efe_send()
1473 efep->efe_multixmt++; in efe_send()
1477 efep->efe_tx_desc = NEXTDESC(rp, efep->efe_tx_desc); in efe_send()
1483 efe_send_done(efe_t *efep) in efe_send_done() argument
1487 ASSERT(mutex_owned(&efep->efe_txlock)); in efe_send_done()
1489 rp = efep->efe_tx_ring; in efe_send_done()
1495 dp = GETDESC(rp, efep->efe_tx_sent); in efe_send_done()
1496 SYNCDESC(rp, efep->efe_tx_sent, DDI_DMA_SYNC_FORKERNEL); in efe_send_done()
1507 efep->efe_defer_xmts++; in efe_send_done()
1510 efep->efe_first_collisions++; in efe_send_done()
1514 efep->efe_oerrors++; in efe_send_done()
1517 efep->efe_carrier_errors++; in efe_send_done()
1520 efep->efe_uflo++; in efe_send_done()
1523 efep->efe_tx_late_collisions++; in efe_send_done()
1526 efep->efe_jabber_errors++; in efe_send_done()
1529 efep->efe_ex_collisions++; in efe_send_done()
1533 efep->efe_collisions += in efe_send_done()
1536 efep->efe_tx_sent = NEXTDESC(rp, efep->efe_tx_sent); in efe_send_done()
1541 efe_getaddr(efe_t *efep, uint8_t *macaddr) in efe_getaddr() argument
1543 efe_eeprom_read(efep, macaddr, ETHERADDRL, 0x0); in efe_getaddr()
1545 efe_debug(efep->efe_dip, in efe_getaddr()
1552 efe_setaddr(efe_t *efep, uint8_t *macaddr) in efe_setaddr() argument
1557 PUTCSR(efep, CSR_LAN0, val); in efe_setaddr()
1561 PUTCSR(efep, CSR_LAN1, val); in efe_setaddr()
1565 PUTCSR(efep, CSR_LAN2, val); in efe_setaddr()
1569 efe_setmchash(efe_t *efep, uint16_t *mchash) in efe_setmchash() argument
1571 PUTCSR(efep, CSR_MC0, mchash[0]); in efe_setmchash()
1572 PUTCSR(efep, CSR_MC1, mchash[1]); in efe_setmchash()
1573 PUTCSR(efep, CSR_MC2, mchash[2]); in efe_setmchash()
1574 PUTCSR(efep, CSR_MC3, mchash[3]); in efe_setmchash()
1578 efe_eeprom_read(efe_t *efep, uint8_t *buf, size_t len, uint8_t addr) in efe_eeprom_read() argument
1584 PUTCSR(efep, CSR_EECTL, EECTL_ENABLE | EECTL_EECS); in efe_eeprom_read()
1587 addrlen = (GETCSR(efep, CSR_EECTL) & EECTL_SIZE ? in efe_eeprom_read()
1591 uint16_t val = efe_eeprom_readw(efep, addrlen, addr + i); in efe_eeprom_read()
1598 efe_eeprom_readw(efe_t *efep, int addrlen, uint8_t addr) in efe_eeprom_readw() argument
1605 efe_eeprom_writebit(efep, 1); in efe_eeprom_readw()
1608 efe_eeprom_writebit(efep, 1); in efe_eeprom_readw()
1609 efe_eeprom_writebit(efep, 0); in efe_eeprom_readw()
1613 efe_eeprom_writebit(efep, addr & 1U << i); in efe_eeprom_readw()
1618 val |= efe_eeprom_readbit(efep) << i; in efe_eeprom_readw()
1621 PUTCSR(efep, CSR_EECTL, EECTL_ENABLE); in efe_eeprom_readw()
1628 efe_eeprom_readbit(efe_t *efep) in efe_eeprom_readbit() argument
1630 PUTCSR(efep, CSR_EECTL, EECTL_ENABLE | EECTL_EECS); in efe_eeprom_readbit()
1633 PUTCSR(efep, CSR_EECTL, EECTL_ENABLE | EECTL_EECS | in efe_eeprom_readbit()
1637 PUTCSR(efep, CSR_EECTL, EECTL_ENABLE | EECTL_EECS); in efe_eeprom_readbit()
1640 return (!!(GETCSR(efep, CSR_EECTL) & EECTL_EEDO)); in efe_eeprom_readbit()
1644 efe_eeprom_writebit(efe_t *efep, int bit) in efe_eeprom_writebit() argument
1646 PUTCSR(efep, CSR_EECTL, EECTL_ENABLE | EECTL_EECS); in efe_eeprom_writebit()
1649 PUTCSR(efep, CSR_EECTL, EECTL_ENABLE | EECTL_EECS | in efe_eeprom_writebit()
1653 PUTCSR(efep, CSR_EECTL, EECTL_ENABLE | EECTL_EECS); in efe_eeprom_writebit()