Lines Matching +full:m +full:- +full:phy

3 /*-
4 * SPDX-License-Identifier: BSD-3-Clause
17 * 3. Neither the name of the author nor the names of any co-contributors
36 * DM9601(DAVICOM USB to Ethernet MAC Controller with Integrated 10/100 PHY)
38 * http://ptm2.cc.utu.fi/ftp/network/cards/DM9601/From_NET/DM9601-DS-P01-930914.pdf
174 /* Corega USB-TXC */
238 udav_csr_read(sc, UDAV_PAR, ue->ue_eaddr, ETHER_ADDR_LEN); in udav_attach_post()
246 if (uaa->usb_mode != USB_MODE_HOST) in udav_probe()
248 if (uaa->info.bConfigIndex != UDAV_CONFIG_INDEX) in udav_probe()
250 if (uaa->info.bIfaceIndex != UDAV_IFACE_INDEX) in udav_probe()
261 struct usb_ether *ue = &sc->sc_ue; in udav_attach()
265 sc->sc_flags = USB_GET_DRIVER_INFO(uaa); in udav_attach()
269 mtx_init(&sc->sc_mtx, device_get_nameunit(dev), NULL, MTX_DEF); in udav_attach()
272 error = usbd_transfer_setup(uaa->device, &iface_index, in udav_attach()
273 sc->sc_xfer, udav_config, UDAV_N_TRANSFER, sc, &sc->sc_mtx); in udav_attach()
280 * The JP1082 has an unusable PHY and provides no link information. in udav_attach()
282 if (sc->sc_flags & UDAV_FLAG_NO_PHY) { in udav_attach()
283 ue->ue_methods = &udav_ue_methods_nophy; in udav_attach()
284 sc->sc_flags |= UDAV_FLAG_LINK; in udav_attach()
286 ue->ue_methods = &udav_ue_methods; in udav_attach()
289 ue->ue_sc = sc; in udav_attach()
290 ue->ue_dev = dev; in udav_attach()
291 ue->ue_udev = uaa->device; in udav_attach()
292 ue->ue_mtx = &sc->sc_mtx; in udav_attach()
311 struct usb_ether *ue = &sc->sc_ue; in udav_detach()
313 usbd_transfer_unsetup(sc->sc_xfer, UDAV_N_TRANSFER); in udav_detach()
315 mtx_destroy(&sc->sc_mtx); in udav_detach()
335 return (uether_do_request(&sc->sc_ue, &req, buf, 1000));
352 return (uether_do_request(&sc->sc_ue, &req, buf, 1000));
367 return (uether_do_request(&sc->sc_ue, &req, NULL, 1000));
384 return (uether_do_request(&sc->sc_ue, &req, buf, 1000)); in udav_csr_read()
401 return (uether_do_request(&sc->sc_ue, &req, buf, 1000)); in udav_csr_write()
427 return (uether_do_request(&sc->sc_ue, &req, NULL, 1000)); in udav_csr_write1()
433 struct udav_softc *sc = ue->ue_sc; in udav_init()
434 if_t ifp = uether_getifp(&sc->sc_ue); in udav_init()
460 /* clear POWER_DOWN state of internal PHY */ in udav_init()
464 usbd_xfer_set_stall(sc->sc_xfer[UDAV_BULK_DT_WR]); in udav_init()
475 /* Select PHY */ in udav_reset()
478 * XXX: force select internal phy. in udav_reset()
479 * external phy routines are not tested. in udav_reset()
483 if (sc->sc_flags & UDAV_EXT_PHY) in udav_reset()
494 if (uether_pause(&sc->sc_ue, hz / 100)) in udav_reset()
498 uether_pause(&sc->sc_ue, hz / 100); in udav_reset()
516 struct udav_softc *sc = ue->ue_sc; in udav_setmulti()
517 if_t ifp = uether_getifp(&sc->sc_ue); in udav_setmulti()
545 struct udav_softc *sc = ue->ue_sc; in udav_setpromisc()
546 if_t ifp = uether_getifp(&sc->sc_ue); in udav_setpromisc()
564 struct udav_softc *sc = ue->ue_sc; in udav_start()
569 usbd_transfer_start(sc->sc_xfer[UDAV_INTR_DT_RD]); in udav_start()
570 usbd_transfer_start(sc->sc_xfer[UDAV_BULK_DT_RD]); in udav_start()
571 usbd_transfer_start(sc->sc_xfer[UDAV_BULK_DT_WR]); in udav_start()
578 if_t ifp = uether_getifp(&sc->sc_ue); in udav_bulk_write_callback()
580 struct mbuf *m; in udav_bulk_write_callback() local
593 if ((sc->sc_flags & UDAV_FLAG_LINK) == 0) { in udav_bulk_write_callback()
599 m = if_dequeue(ifp); in udav_bulk_write_callback()
601 if (m == NULL) in udav_bulk_write_callback()
603 if (m->m_pkthdr.len > MCLBYTES) in udav_bulk_write_callback()
604 m->m_pkthdr.len = MCLBYTES; in udav_bulk_write_callback()
605 if (m->m_pkthdr.len < UDAV_MIN_FRAME_LEN) { in udav_bulk_write_callback()
606 extra_len = UDAV_MIN_FRAME_LEN - m->m_pkthdr.len; in udav_bulk_write_callback()
611 temp_len = (m->m_pkthdr.len + extra_len); in udav_bulk_write_callback()
624 usbd_m_copy_in(pc, 2, m, 0, m->m_pkthdr.len); in udav_bulk_write_callback()
627 usbd_frame_zero(pc, temp_len - extra_len, extra_len); in udav_bulk_write_callback()
632 BPF_MTAP(ifp, m); in udav_bulk_write_callback()
634 m_freem(m); in udav_bulk_write_callback()
659 struct usb_ether *ue = &sc->sc_ue; in udav_bulk_read_callback()
677 actlen -= sizeof(stat); in udav_bulk_read_callback()
679 len -= ETHER_CRC_LEN; in udav_bulk_read_callback()
735 struct udav_softc *sc = ue->ue_sc; in udav_stop()
736 if_t ifp = uether_getifp(&sc->sc_ue); in udav_stop()
741 if (!(sc->sc_flags & UDAV_FLAG_NO_PHY)) in udav_stop()
742 sc->sc_flags &= ~UDAV_FLAG_LINK; in udav_stop()
747 usbd_transfer_stop(sc->sc_xfer[UDAV_BULK_DT_WR]); in udav_stop()
748 usbd_transfer_stop(sc->sc_xfer[UDAV_BULK_DT_RD]); in udav_stop()
749 usbd_transfer_stop(sc->sc_xfer[UDAV_INTR_DT_RD]); in udav_stop()
764 sc->sc_flags &= ~UDAV_FLAG_LINK; in udav_ifmedia_upd()
765 LIST_FOREACH(miisc, &mii->mii_phys, mii_list) in udav_ifmedia_upd()
779 ifmr->ifm_active = mii->mii_media_active; in udav_ifmedia_status()
780 ifmr->ifm_status = mii->mii_media_status; in udav_ifmedia_status()
787 struct udav_softc *sc = ue->ue_sc; in udav_tick()
793 if ((sc->sc_flags & UDAV_FLAG_LINK) == 0 in udav_tick()
794 && mii->mii_media_status & IFM_ACTIVE && in udav_tick()
795 IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) { in udav_tick()
796 sc->sc_flags |= UDAV_FLAG_LINK; in udav_tick()
802 udav_miibus_readreg(device_t dev, int phy, int reg) in udav_miibus_readreg() argument
809 /* XXX: one PHY only for the internal PHY */ in udav_miibus_readreg()
810 if (phy != 0) in udav_miibus_readreg()
813 locked = mtx_owned(&sc->sc_mtx); in udav_miibus_readreg()
817 /* select internal PHY and set PHY register address */ in udav_miibus_readreg()
821 /* select PHY operation and start read command */ in udav_miibus_readreg()
834 DPRINTFN(11, "phy=%d reg=0x%04x => 0x%04x\n", in udav_miibus_readreg()
835 phy, reg, data16); in udav_miibus_readreg()
843 udav_miibus_writereg(device_t dev, int phy, int reg, int data) in udav_miibus_writereg() argument
849 /* XXX: one PHY only for the internal PHY */ in udav_miibus_writereg()
850 if (phy != 0) in udav_miibus_writereg()
853 locked = mtx_owned(&sc->sc_mtx); in udav_miibus_writereg()
857 /* select internal PHY and set PHY register address */ in udav_miibus_writereg()
866 /* select PHY operation and start write command */ in udav_miibus_writereg()