Lines Matching defs:un
99 #define un_cdata(un) (&(un)->un_pri->unp_cdata)
107 usbnet_isowned_mii(struct usbnet *un)
109 KASSERT(mutex_owned(&un->un_pri->unp_miilock));
162 uno_stop(struct usbnet *un, struct ifnet *ifp, int disable)
165 if (un->un_ops->uno_stop)
166 (*un->un_ops->uno_stop)(ifp, disable);
170 uno_ioctl(struct usbnet *un, struct ifnet *ifp, u_long cmd, void *data)
177 if (un->un_ops->uno_ioctl)
178 return (*un->un_ops->uno_ioctl)(ifp, cmd, data);
183 uno_override_ioctl(struct usbnet *un, struct ifnet *ifp, u_long cmd, void *data)
194 return (*un->un_ops->uno_override_ioctl)(ifp, cmd, data);
198 uno_init(struct usbnet *un, struct ifnet *ifp)
201 return un->un_ops->uno_init ? (*un->un_ops->uno_init)(ifp) : 0;
205 uno_read_reg(struct usbnet *un, int phy, int reg, uint16_t *val)
207 usbnet_isowned_mii(un);
208 return (*un->un_ops->uno_read_reg)(un, phy, reg, val);
212 uno_write_reg(struct usbnet *un, int phy, int reg, uint16_t val)
214 usbnet_isowned_mii(un);
215 return (*un->un_ops->uno_write_reg)(un, phy, reg, val);
219 uno_mii_statchg(struct usbnet *un, struct ifnet *ifp)
221 usbnet_isowned_mii(un);
222 (*un->un_ops->uno_statchg)(ifp);
226 uno_tx_prepare(struct usbnet *un, struct mbuf *m, struct usbnet_chain *c)
228 usbnet_isowned_tx(un);
229 return (*un->un_ops->uno_tx_prepare)(un, m, c);
233 uno_rx_loop(struct usbnet *un, struct usbnet_chain *c, uint32_t total_len)
235 usbnet_isowned_rx(un);
236 (*un->un_ops->uno_rx_loop)(un, c, total_len);
240 uno_tick(struct usbnet *un)
242 if (un->un_ops->uno_tick)
243 (*un->un_ops->uno_tick)(un);
247 uno_intr(struct usbnet *un, usbd_status status)
249 if (un->un_ops->uno_intr)
250 (*un->un_ops->uno_intr)(un, status);
289 usbnet_enqueue(struct usbnet * const un, uint8_t *buf, size_t buflen,
293 struct ifnet * const ifp = usbnet_ifp(un);
294 struct usbnet_private * const unp __unused = un->un_pri;
300 usbnet_isowned_rx(un);
321 usbnet_input(struct usbnet * const un, uint8_t *buf, size_t buflen)
324 struct ifnet * const ifp = usbnet_ifp(un);
325 struct usbnet_private * const unp __unused = un->un_pri;
331 usbnet_isowned_rx(un);
356 struct usbnet * const un = c->unc_un;
357 struct usbnet_private * const unp = un->un_pri;
365 if (usbnet_isdying(un) || unp->unp_rxstopped ||
372 device_printf(un->un_dev, "usb errors on rx: %s\n",
381 if (total_len > un->un_rx_bufsz) {
382 device_printf(un->un_dev,
384 total_len, un->un_rx_bufsz);
388 uno_rx_loop(un, c, total_len);
389 usbnet_isowned_rx(un);
392 if (usbnet_isdying(un) || unp->unp_rxstopped)
398 usbd_setup_xfer(xfer, c, c->unc_buf, un->un_rx_bufsz,
399 un->un_rx_xfer_flags, USBD_NO_TIMEOUT, usbnet_rxeof);
412 struct usbnet * const un = c->unc_un;
413 struct usbnet_cdata * const cd = un_cdata(un);
414 struct usbnet_private * const unp = un->un_pri;
415 struct ifnet * const ifp = usbnet_ifp(un);
421 if (unp->unp_txstopped || usbnet_isdying(un)) {
444 device_printf(un->un_dev, "usb error on tx: %s\n",
461 struct usbnet * const un = priv;
462 struct usbnet_private * const unp = un->un_pri;
463 struct usbnet_intr * const uni __unused = un->un_intr;
465 if (usbnet_isdying(un) ||
470 usbnet_isdying(un), status);
476 device_printf(un->un_dev, "usb error on intr: %s\n",
486 uno_intr(un, status);
493 struct usbnet * const un = ifp->if_softc;
494 struct usbnet_cdata * const cd = un_cdata(un);
495 struct usbnet_private * const unp = un->un_pri;
502 unp->unp_number, cd->uncd_tx_cnt, un->un_tx_list_cnt,
505 usbnet_isowned_tx(un);
506 KASSERT(cd->uncd_tx_cnt <= un->un_tx_list_cnt);
515 if (cd->uncd_tx_cnt == un->un_tx_list_cnt) {
517 cd->uncd_tx_cnt, un->un_tx_list_cnt, 0, 0);
523 while (cd->uncd_tx_cnt < un->un_tx_list_cnt) {
529 KASSERT(m->m_pkthdr.len <= un->un_tx_bufsz);
533 length = uno_tx_prepare(un, m, c);
547 un->un_tx_xfer_flags, 10000, usbnet_txeof);
568 idx = (idx + 1) % un->un_tx_list_cnt;
575 cd->uncd_tx_cnt, un->un_tx_list_cnt, unp->unp_link, 0);
590 struct usbnet * const un = ifp->if_softc;
591 struct usbnet_private * const unp = un->un_pri;
612 usbnet_rx_list_size(struct usbnet_cdata * const cd, struct usbnet * const un)
614 return sizeof(*cd->uncd_rx_chain) * un->un_rx_list_cnt;
618 usbnet_rx_list_alloc(struct usbnet * const un)
620 struct usbnet_cdata * const cd = un_cdata(un);
622 cd->uncd_rx_chain = kmem_zalloc(usbnet_rx_list_size(cd, un), KM_SLEEP);
626 usbnet_rx_list_free(struct usbnet * const un)
628 struct usbnet_cdata * const cd = un_cdata(un);
631 kmem_free(cd->uncd_rx_chain, usbnet_rx_list_size(cd, un));
637 usbnet_rx_list_init(struct usbnet * const un)
639 struct usbnet_cdata * const cd = un_cdata(un);
640 struct usbnet_private * const unp = un->un_pri;
642 for (size_t i = 0; i < un->un_rx_list_cnt; i++) {
645 c->unc_un = un;
648 un->un_rx_bufsz, un->un_rx_xfer_flags, 0,
660 usbnet_rx_list_fini(struct usbnet * const un)
662 struct usbnet_cdata * const cd = un_cdata(un);
664 for (size_t i = 0; i < un->un_rx_list_cnt; i++) {
678 usbnet_rx_start_pipes(struct usbnet * const un)
680 struct usbnet_cdata * const cd = un_cdata(un);
681 struct usbnet_private * const unp = un->un_pri;
687 for (size_t i = 0; i < un->un_rx_list_cnt; i++) {
690 usbd_setup_xfer(c->unc_xfer, c, c->unc_buf, un->un_rx_bufsz,
691 un->un_rx_xfer_flags, USBD_NO_TIMEOUT, usbnet_rxeof);
701 usbnet_tx_list_size(struct usbnet_cdata * const cd, struct usbnet * const un)
703 return sizeof(*cd->uncd_tx_chain) * un->un_tx_list_cnt;
707 usbnet_tx_list_alloc(struct usbnet * const un)
709 struct usbnet_cdata * const cd = un_cdata(un);
711 cd->uncd_tx_chain = kmem_zalloc(usbnet_tx_list_size(cd, un), KM_SLEEP);
715 usbnet_tx_list_free(struct usbnet * const un)
717 struct usbnet_cdata * const cd = un_cdata(un);
720 kmem_free(cd->uncd_tx_chain, usbnet_tx_list_size(cd, un));
726 usbnet_tx_list_init(struct usbnet * const un)
728 struct usbnet_cdata * const cd = un_cdata(un);
729 struct usbnet_private * const unp = un->un_pri;
731 for (size_t i = 0; i < un->un_tx_list_cnt; i++) {
734 c->unc_un = un;
737 un->un_tx_bufsz, un->un_tx_xfer_flags, 0,
749 usbnet_tx_list_fini(struct usbnet * const un)
751 struct usbnet_cdata * const cd = un_cdata(un);
753 for (size_t i = 0; i < un->un_tx_list_cnt; i++) {
770 usbnet_ep_close_pipes(struct usbnet * const un)
772 struct usbnet_private * const unp = un->un_pri;
783 usbnet_ep_open_pipes(struct usbnet * const un)
785 struct usbnet_intr * const uni = un->un_intr;
786 struct usbnet_private * const unp = un->un_pri;
791 if (un->un_ed[i] == 0)
795 err = usbd_open_pipe_intr(un->un_iface, un->un_ed[i],
796 USBD_EXCLUSIVE_USE | USBD_MPSAFE, &unp->unp_ep[i], un,
800 err = usbd_open_pipe(un->un_iface, un->un_ed[i],
804 usbnet_ep_close_pipes(un);
813 usbnet_ep_stop_pipes(struct usbnet * const un)
815 struct usbnet_private * const unp = un->un_pri;
825 usbnet_init_rx_tx(struct usbnet * const un)
828 struct usbnet_private * const unp = un->un_pri;
829 struct ifnet * const ifp = usbnet_ifp(un);
835 if (usbnet_isdying(un)) {
840 err = usbnet_ep_open_pipes(un);
842 aprint_error_dev(un->un_dev, "open rx/tx pipes failed: %s\n",
849 if (usbnet_rx_list_init(un)) {
850 aprint_error_dev(un->un_dev, "rx list init failed\n");
856 if (usbnet_tx_list_init(un)) {
857 aprint_error_dev(un->un_dev, "tx list init failed\n");
870 if (un->un_ops->uno_mcast) {
874 (*un->un_ops->uno_mcast)(ifp);
886 usbnet_rx_start_pipes(un);
896 usbnet_rx_list_fini(un);
897 usbnet_tx_list_fini(un);
898 usbnet_ep_close_pipes(un);
905 if (un->un_ops->uno_statchg == NULL) {
907 usbnet_set_link(un, error == 0);
920 struct usbnet * const un = device_private(dev);
924 usbnet_isowned_mii(un);
926 if (usbnet_isdying(un)) {
930 err = uno_read_reg(un, phy, reg, val);
933 un->un_pri->unp_number, err, 0, 0);
944 struct usbnet * const un = device_private(dev);
948 usbnet_isowned_mii(un);
950 if (usbnet_isdying(un)) {
954 err = uno_write_reg(un, phy, reg, val);
957 un->un_pri->unp_number, err, 0, 0);
968 struct usbnet * const un = ifp->if_softc;
971 usbnet_isowned_mii(un);
973 uno_mii_statchg(un, ifp);
980 struct usbnet * const un = ifp->if_softc;
981 struct usbnet_private * const unp = un->un_pri;
982 struct mii_data * const mii = usbnet_mii(un);
985 usbnet_isowned_mii(un);
990 if (usbnet_isdying(un))
1019 struct usbnet *un = ifp->if_softc;
1020 struct usbnet_private * const unp = un->un_pri;
1061 usbnet_ispromisc(struct usbnet *un)
1063 struct ifnet * const ifp = usbnet_ifp(un);
1064 struct usbnet_private * const unp = un->un_pri;
1076 struct usbnet * const un = ifp->if_softc;
1077 struct usbnet_private * const unp __unused = un->un_pri;
1083 if (un->un_ops->uno_override_ioctl)
1084 return uno_override_ioctl(un, ifp, cmd, data);
1099 if (un->un_ops->uno_mcast) {
1102 (*un->un_ops->uno_mcast)(ifp);
1108 error = uno_ioctl(un, ifp, cmd, data);
1127 usbnet_stop(struct usbnet *un, struct ifnet *ifp, int disable)
1129 struct usbnet_private * const unp = un->un_pri;
1130 struct mii_data * const mii = usbnet_mii(un);
1142 if (un->un_ops->uno_mcast) {
1174 usb_rem_task_wait(un->un_udev, &unp->unp_ticktask, USB_TASKQ_DRIVER,
1188 usbnet_ep_stop_pipes(un);
1200 if (!usbnet_isdying(un))
1201 uno_stop(un, ifp, disable);
1204 usbnet_rx_list_fini(un);
1205 usbnet_tx_list_fini(un);
1208 usbnet_ep_close_pipes(un);
1218 struct usbnet * const un = ifp->if_softc;
1232 usbnet_stop(un, ifp, disable);
1245 struct usbnet * const un = arg;
1246 struct usbnet_private * const unp = un->un_pri;
1251 usb_add_task(un->un_udev, &unp->unp_ticktask, USB_TASKQ_DRIVER);
1258 struct usbnet * const un = ifp->if_softc;
1259 struct usbnet_private * const unp = un->un_pri;
1260 struct usbnet_cdata * const cd = un_cdata(un);
1263 device_printf(un->un_dev, "watchdog timeout\n");
1280 struct usbnet * const un = arg;
1281 struct usbnet_private * const unp = un->un_pri;
1282 struct ifnet * const ifp = usbnet_ifp(un);
1283 struct mii_data * const mii = usbnet_mii(un);
1294 uno_tick(un);
1304 if (!unp->unp_stopped && !usbnet_isdying(un))
1313 struct usbnet * const un = ifp->if_softc;
1322 if (usbnet_isdying(un))
1335 usbnet_stop(un, ifp, /*disable*/1/*XXX???*/);
1338 error = uno_init(un, ifp);
1341 error = usbnet_init_rx_tx(un);
1352 usbnet_set_link(struct usbnet *un, bool link)
1354 usbnet_isowned_mii(un);
1355 un->un_pri->unp_link = link;
1359 usbnet_ifp(struct usbnet *un)
1361 return &un->un_pri->unp_ec.ec_if;
1365 usbnet_ec(struct usbnet *un)
1367 return &un->un_pri->unp_ec;
1371 usbnet_mii(struct usbnet *un)
1373 return un->un_pri->unp_ec.ec_mii;
1377 usbnet_rndsrc(struct usbnet *un)
1379 return &un->un_pri->unp_rndsrc;
1383 usbnet_softc(struct usbnet *un)
1385 return un->un_sc;
1389 usbnet_havelink(struct usbnet *un)
1391 return un->un_pri->unp_link;
1395 usbnet_isdying(struct usbnet *un)
1397 return atomic_load_relaxed(&un->un_pri->unp_dying);
1404 usbnet_isowned_rx(struct usbnet *un)
1406 KASSERT(mutex_owned(&un->un_pri->unp_rxlock));
1410 usbnet_isowned_tx(struct usbnet *un)
1412 KASSERT(mutex_owned(&un->un_pri->unp_txlock));
1418 usbnet_empty_eaddr(struct usbnet * const un)
1420 return (un->un_eaddr[0] == 0 && un->un_eaddr[1] == 0 &&
1421 un->un_eaddr[2] == 0 && un->un_eaddr[3] == 0 &&
1422 un->un_eaddr[4] == 0 && un->un_eaddr[5] == 0);
1439 usbnet_attach(struct usbnet *un)
1444 KASSERT(un->un_ops->uno_tx_prepare);
1445 KASSERT(un->un_ops->uno_rx_loop);
1446 KASSERT(un->un_rx_bufsz);
1447 KASSERT(un->un_tx_bufsz);
1448 KASSERT(un->un_rx_list_cnt);
1449 KASSERT(un->un_tx_list_cnt);
1452 KASSERT(un == device_private(un->un_dev));
1454 un->un_pri = kmem_zalloc(sizeof(*un->un_pri), KM_SLEEP);
1455 struct usbnet_private * const unp = un->un_pri;
1457 usb_init_task(&unp->unp_ticktask, usbnet_tick_task, un,
1460 callout_setfunc(&unp->unp_stat_ch, usbnet_tick, un);
1467 rnd_attach_source(&unp->unp_rndsrc, device_xname(un->un_dev),
1470 usbnet_rx_list_alloc(un);
1471 usbnet_tx_list_alloc(un);
1482 usbnet_attach_mii(struct usbnet *un, const struct usbnet_mii *unm)
1485 struct usbnet_private * const unp = un->un_pri;
1487 struct ifnet * const ifp = usbnet_ifp(un);
1489 KASSERT(un->un_ops->uno_read_reg);
1490 KASSERT(un->un_ops->uno_write_reg);
1491 KASSERT(un->un_ops->uno_statchg);
1499 usbnet_ec(un)->ec_mii = mii;
1502 mii_attach(un->un_dev, mii, unm->un_mii_capmask, unm->un_mii_phyloc,
1513 usbnet_attach_ifp(struct usbnet *un,
1519 struct usbnet_private * const unp = un->un_pri;
1520 struct ifnet * const ifp = usbnet_ifp(un);
1525 ifp->if_softc = un;
1526 strlcpy(ifp->if_xname, device_xname(un->un_dev), IFNAMSIZ);
1535 usbnet_attach_mii(un, unm);
1550 if (!usbnet_empty_eaddr(un)) {
1552 aprint_normal_dev(un->un_dev, "Ethernet address %s\n",
1553 ether_sprintf(un->un_eaddr));
1554 ether_ifattach(ifp, un->un_eaddr);
1563 usbd_add_drv_event(USB_EVENT_DRIVER_ATTACH, un->un_udev, un->un_dev);
1565 if (!pmf_device_register(un->un_dev, NULL, NULL))
1566 aprint_error_dev(un->un_dev, "couldn't establish power handler\n");
1573 struct usbnet * const un = device_private(self);
1574 struct usbnet_private * const unp = un->un_pri;
1580 struct ifnet * const ifp = usbnet_ifp(un);
1581 struct mii_data * const mii = usbnet_mii(un);
1609 KASSERT(!usb_task_pending(un->un_udev, &unp->unp_ticktask));
1616 if (!usbnet_empty_eaddr(un))
1622 usbnet_ec(un)->ec_mii = NULL;
1624 usbnet_rx_list_free(un);
1625 usbnet_tx_list_free(un);
1636 pmf_device_deregister(un->un_dev);
1643 usbd_add_drv_event(USB_EVENT_DRIVER_DETACH, un->un_udev,
1644 un->un_dev);
1648 un->un_pri = NULL;
1657 struct usbnet * const un = device_private(self);
1658 struct usbnet_private * const unp = un->un_pri;
1659 struct ifnet * const ifp = usbnet_ifp(un);