Lines Matching refs:un

107 axen_cmd(struct usbnet *un, int cmd, int index, int val, void *buf)
112 if (usbnet_isdying(un))
124 err = usbd_do_request(un->un_udev, &req, buf);
137 axen_uno_mii_read_reg(struct usbnet *un, int phy, int reg, uint16_t *val)
141 if (un->un_phyno != phy) {
146 usbd_status err = axen_cmd(un, AXEN_CMD_MII_READ_REG, reg, phy, &data);
160 axen_uno_mii_write_reg(struct usbnet *un, int phy, int reg, uint16_t val)
164 if (un->un_phyno != phy)
167 usbd_status err = axen_cmd(un, AXEN_CMD_MII_WRITE_REG, reg, phy, &uval);
177 struct usbnet * const un = ifp->if_softc;
178 struct mii_data * const mii = usbnet_mii(un);
183 if (usbnet_isdying(un))
191 usbnet_set_link(un, true);
194 usbnet_set_link(un, true);
202 if (!usbnet_havelink(un))
225 err = axen_cmd(un, AXEN_CMD_MAC_WRITE2, 2, AXEN_MEDIUM_STATUS, &wval);
227 aprint_error_dev(un->un_dev, "media change failed\n");
233 struct usbnet * const un = ifp->if_softc;
234 struct ethercom *ec = usbnet_ec(un);
242 if (usbnet_isdying(un))
248 axen_cmd(un, AXEN_CMD_MAC_READ2, 2, AXEN_MAC_RXCTL, &wval);
253 if (usbnet_ispromisc(un)) {
254 DPRINTF(("%s: promisc\n", device_xname(un->un_dev)));
265 device_xname(un->un_dev)));
274 device_xname(un->un_dev)));
283 device_xname(un->un_dev),
291 axen_cmd(un, AXEN_CMD_MAC_WRITE_FILTER, 8, AXEN_FILTER_MULTI, hashtbl);
293 axen_cmd(un, AXEN_CMD_MAC_WRITE2, 2, AXEN_MAC_RXCTL, &wval);
297 axen_reset(struct usbnet *un)
299 if (usbnet_isdying(un))
308 axen_get_eaddr(struct usbnet *un, void *addr)
311 return axen_cmd(un, AXEN_CMD_MAC_READ_ETHER, 6, AXEN_CMD_MAC_NODE_ID,
322 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_MAC_EEPROM_ADDR, &buf);
326 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_MAC_EEPROM_CMD, &buf);
332 usbd_delay_ms(un->un_udev, 10);
333 axen_cmd(un, AXEN_CMD_MAC_READ, 1, AXEN_MAC_EEPROM_CMD,
341 axen_cmd(un, AXEN_CMD_MAC_READ2, 2, AXEN_EEPROM_READ,
363 axen_ax88179_init(struct usbnet *un)
371 axen_cmd(un, AXEN_CMD_MAC_READ, 1, AXEN_UNK_05, &val);
375 axen_cmd(un, AXEN_CMD_MAC_READ, 1, AXEN_GENERAL_STATUS, &val);
385 axen_cmd(un, AXEN_CMD_MAC_WRITE2, 2, AXEN_PHYPWR_RSTCTL, &wval);
388 axen_cmd(un, AXEN_CMD_MAC_WRITE2, 2, AXEN_PHYPWR_RSTCTL, &wval);
389 usbd_delay_ms(un->un_udev, 200);
393 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_PHYCLK, &val);
394 usbd_delay_ms(un->un_udev, 100);
398 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_MONITOR_MODE, &val);
401 axen_cmd(un, AXEN_CMD_EEPROM_READ, 2, AXEN_EEPROM_STAT, &wval);
407 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_PHYCLK, &val);
409 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_PHYCLK, &val);
410 usbd_delay_ms(un->un_udev, 100);
412 axen_cmd(un, AXEN_CMD_MAC_READ2, 2, AXEN_PHYPWR_RSTCTL, &wval);
416 axen_cmd(un, AXEN_CMD_MAC_WRITE2, 2, AXEN_PHYPWR_RSTCTL, &wval);
417 usbd_delay_ms(un->un_udev, 200);
418 aprint_error_dev(un->un_dev, "enable auto detach (0x%04x)\n",
423 axen_cmd(un, AXEN_CMD_MAC_READ, 1, AXEN_USB_UPLINK, &val);
450 aprint_error_dev(un->un_dev, "unknown uplink bus:0x%02x\n",
454 axen_cmd(un, AXEN_CMD_MAC_SET_RXSR, 5, AXEN_RX_BULKIN_QCTRL, &qctrl);
463 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_PAUSE_LOW_WATERMARK, &val);
465 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_PAUSE_HIGH_WATERMARK, &val);
471 axen_cmd(un, AXEN_CMD_MAC_WRITE2, 2, AXEN_MAC_RXCTL, &wval);
475 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_MONITOR_MODE, &val);
476 axen_cmd(un, AXEN_CMD_MAC_READ, 1, AXEN_MONITOR_MODE, &val);
485 axen_cmd(un, AXEN_CMD_MAC_WRITE2, 2, AXEN_MEDIUM_STATUS, &wval);
486 usbd_delay_ms(un->un_udev, 100);
488 axen_cmd(un, AXEN_CMD_MAC_READ2, 2, AXEN_MEDIUM_STATUS, &wval);
496 axen_uno_mii_write_reg(un, un->un_phyno, GMII_PHY_PAGE_SEL,
498 axen_uno_mii_write_reg(un, un->un_phyno, GMII_PHY_PAGE,
503 axen_uno_mii_write_reg(un, un->un_phyno, 0x1F, 0x0005);
504 axen_uno_mii_write_reg(un, un->un_phyno, 0x0C, 0x0000);
505 axen_uno_mii_read_reg(un, un->un_phyno, 0x0001, &wval);
506 axen_uno_mii_write_reg(un, un->un_phyno, 0x01, wval | 0x0080);
507 axen_uno_mii_write_reg(un, un->un_phyno, 0x1F, 0x0000);
512 axen_setoe_locked(struct usbnet *un)
514 struct ifnet * const ifp = usbnet_ifp(un);
531 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_RX_COE, &val);
544 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_TX_COE, &val);
550 struct usbnet * const un = ifp->if_softc;
554 axen_setoe_locked(un);
576 struct usbnet * const un = device_private(self);
591 un->un_dev = self;
592 un->un_udev = dev;
593 un->un_sc = un;
594 un->un_ops = &axen_ops;
595 un->un_rx_xfer_flags = USBD_SHORT_XFER_OK;
596 un->un_tx_xfer_flags = USBD_FORCE_SHORT_XFER;
597 un->un_rx_list_cnt = AXEN_RX_LIST_CNT;
598 un->un_tx_list_cnt = AXEN_TX_LIST_CNT;
607 un->un_flags =
610 un->un_flags &= ~(AX178A | AX179);
611 un->un_flags |= AX179A;
614 err = usbd_device2interface_handle(dev, AXEN_IFACE_IDX, &un->un_iface);
623 un->un_rx_bufsz = AXEN_BUFSZ_SS * 1024;
626 un->un_rx_bufsz = AXEN_BUFSZ_HS * 1024;
629 un->un_rx_bufsz = AXEN_BUFSZ_LS * 1024;
632 un->un_tx_bufsz = IP_MAXPACKET + ETHER_HDR_LEN + ETHER_CRC_LEN +
636 id = usbd_get_interface_descriptor(un->un_iface);
638 ed = usbd_interface2endpoint_descriptor(un->un_iface, i);
645 un->un_ed[USBNET_ENDPT_RX] = ed->bEndpointAddress;
648 un->un_ed[USBNET_ENDPT_TX] = ed->bEndpointAddress;
652 un->un_ed[USBNET_ENDPT_INTR] = ed->bEndpointAddress;
658 usbnet_attach(un);
660 un->un_phyno = AXEN_PHY_ID;
661 DPRINTF(("%s: phyno %d\n", device_xname(self), un->un_phyno));
664 if (axen_get_eaddr(un, &un->un_eaddr)) {
669 axen_ax88179_init(un);
675 if (un->un_flags & AX179A) {
679 axen_cmd(un, cmd, 1, AXEN_FW_MODE_178A179, &bval);
684 if (un->un_flags & AX178A)
686 else if (un->un_flags & AX179)
688 else if (un->un_flags & AX179A)
693 struct ethercom *ec = usbnet_ec(un);
697 struct ifnet *ifp = usbnet_ifp(un);
705 usbnet_attach_ifp(un, IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST,
755 axen_uno_rx_loop(struct usbnet *un, struct usbnet_chain *c, uint32_t total_len)
757 struct ifnet *ifp = usbnet_ifp(un);
766 aprint_error_dev(un->un_dev, "rxeof: too short transfer\n");
783 aprint_error_dev(un->un_dev,
787 usbd_delay_ms(un->un_udev, 100);
803 device_xname(un->un_dev), pkt_count));
809 rnd_add_uint32(usbnet_rndsrc(un), pkt_count);
813 aprint_error_dev(un->un_dev,
823 device_xname(un->un_dev), pkt_count, pkt_hdr, pkt_len));
832 device_xname(un->un_dev),
838 if (un->un_flags & AX179A) {
840 usbnet_enqueue(un, buf + ETHER_ALIGN, pkt_len - 2,
846 usbnet_enqueue(un, buf + ETHER_ALIGN, pkt_len - 6,
865 axen_uno_tx_prepare(struct usbnet *un, struct mbuf *m, struct usbnet_chain *c)
870 if ((unsigned)m->m_pkthdr.len > un->un_tx_bufsz - sizeof(hdr))
875 switch (un->un_udev->ud_speed) {
892 DPRINTF(("%s: boundary hit\n", device_xname(un->un_dev)));
906 struct usbnet * const un = ifp->if_softc;
915 axen_reset(un);
919 axen_cmd(un, AXEN_CMD_MAC_WRITE, 1, AXEN_UNK_28, &bval);
922 axen_setoe_locked(un);
925 axen_cmd(un, AXEN_CMD_MAC_READ2, 2, AXEN_MAC_RXCTL, &wval);
929 axen_cmd(un, AXEN_CMD_MAC_WRITE2, 2, AXEN_MAC_RXCTL, &wval);
937 struct usbnet * const un = ifp->if_softc;
940 axen_reset(un);
943 axen_cmd(un, AXEN_CMD_MAC_READ2, 2, AXEN_MAC_RXCTL, &wval);
947 axen_cmd(un, AXEN_CMD_MAC_WRITE2, 2, AXEN_MAC_RXCTL, &wval);