Lines Matching refs:un

37 #define MUE_PRINTF(un, fmt, args...)					\
38 device_printf((un)->un_dev, "%s: " fmt, __func__, ##args);
42 #define DPRINTF(un, fmt, args...) \
45 MUE_PRINTF(un, fmt, ##args); \
48 #define DPRINTF(un, fmt, args...) __nothing
123 #define MUE_SETBIT(un, reg, x) \
124 mue_csr_write(un, reg, mue_csr_read(un, reg) | (x))
126 #define MUE_CLRBIT(un, reg, x) \
127 mue_csr_write(un, reg, mue_csr_read(un, reg) & ~(x))
129 #define MUE_WAIT_SET(un, reg, set, fail) \
130 mue_wait_for_bits(un, reg, set, ~0, fail)
132 #define MUE_WAIT_CLR(un, reg, clear, fail) \
133 mue_wait_for_bits(un, reg, 0, clear, fail)
145 mue_csr_read(struct usbnet *un, uint32_t reg)
151 if (usbnet_isdying(un))
161 err = usbd_do_request(un->un_udev, &req, &val);
163 MUE_PRINTF(un, "reg = %#x: %s\n", reg, usbd_errstr(err));
171 mue_csr_write(struct usbnet *un, uint32_t reg, uint32_t aval)
177 if (usbnet_isdying(un))
187 err = usbd_do_request(un->un_udev, &req, &val);
189 MUE_PRINTF(un, "reg = %#x: %s\n", reg, usbd_errstr(err));
197 mue_wait_for_bits(struct usbnet *un, uint32_t reg,
204 if (usbnet_isdying(un))
206 val = mue_csr_read(un, reg);
211 usbd_delay_ms(un->un_udev, 1);
218 mue_uno_mii_read_reg(struct usbnet *un, int phy, int reg, uint16_t *val)
222 if (un->un_phyno != phy) {
227 if (MUE_WAIT_CLR(un, MUE_MII_ACCESS, MUE_MII_ACCESS_BUSY, 0)) {
228 MUE_PRINTF(un, "not ready\n");
233 mue_csr_write(un, MUE_MII_ACCESS, MUE_MII_ACCESS_READ |
237 if (MUE_WAIT_CLR(un, MUE_MII_ACCESS, MUE_MII_ACCESS_BUSY, 0)) {
238 MUE_PRINTF(un, "timed out\n");
243 data = mue_csr_read(un, MUE_MII_DATA);
250 mue_uno_mii_write_reg(struct usbnet *un, int phy, int reg, uint16_t val)
253 if (un->un_phyno != phy)
256 if (MUE_WAIT_CLR(un, MUE_MII_ACCESS, MUE_MII_ACCESS_BUSY, 0)) {
257 MUE_PRINTF(un, "not ready\n");
261 mue_csr_write(un, MUE_MII_DATA, val);
262 mue_csr_write(un, MUE_MII_ACCESS, MUE_MII_ACCESS_WRITE |
266 if (MUE_WAIT_CLR(un, MUE_MII_ACCESS, MUE_MII_ACCESS_BUSY, 0)) {
267 MUE_PRINTF(un, "timed out\n");
277 struct usbnet * const un = ifp->if_softc;
278 struct mii_data * const mii = usbnet_mii(un);
281 if (usbnet_isdying(un))
290 usbnet_set_link(un, true);
298 if (!usbnet_havelink(un)) {
299 DPRINTF(un, "mii_media_status = %#x\n", mii->mii_media_status);
303 if (!(un->un_flags & LAN7500)) {
304 if (un->un_udev->ud_speed == USB_SPEED_SUPER) {
307 MUE_CLRBIT(un, MUE_USB_CFG1,
309 MUE_SETBIT(un, MUE_USB_CFG1,
313 MUE_SETBIT(un, MUE_USB_CFG1,
330 if (un->un_flags & LAN7500)
333 switch (un->un_udev->ud_speed) {
346 mue_csr_write(un, (un->un_flags & LAN7500) ?
348 mue_csr_write(un, MUE_FLOW, flow);
350 DPRINTF(un, "done\n");
354 mue_eeprom_getbyte(struct usbnet *un, int off, uint8_t *dest)
358 if (MUE_WAIT_CLR(un, MUE_E2P_CMD, MUE_E2P_CMD_BUSY, 0)) {
359 MUE_PRINTF(un, "not ready\n");
364 mue_csr_write(un, MUE_E2P_CMD, MUE_E2P_CMD_READ | MUE_E2P_CMD_BUSY |
367 if (MUE_WAIT_CLR(un, MUE_E2P_CMD, MUE_E2P_CMD_BUSY,
369 MUE_PRINTF(un, "timed out\n");
373 val = mue_csr_read(un, MUE_E2P_DATA);
380 mue_read_eeprom(struct usbnet *un, uint8_t *dest, int off, int cnt)
389 if (un->un_flags & LAN7800) {
390 val = mue_csr_read(un, MUE_HW_CFG);
391 mue_csr_write(un, MUE_HW_CFG,
396 err = mue_eeprom_getbyte(un, off + i, &byte);
402 if (un->un_flags & LAN7800)
403 mue_csr_write(un, MUE_HW_CFG, val);
409 mue_eeprom_present(struct usbnet *un)
415 if (un->un_flags & LAN7500) {
416 val = mue_csr_read(un, MUE_E2P_CMD);
419 ret = mue_read_eeprom(un, &sig, MUE_E2P_IND_OFFSET, 1);
425 mue_read_otp_raw(struct usbnet *un, uint8_t *dest, int off, int cnt)
430 val = mue_csr_read(un, MUE_OTP_PWR_DN);
435 mue_csr_write(un, MUE_OTP_PWR_DN, 0);
436 err = MUE_WAIT_CLR(un, MUE_OTP_PWR_DN, MUE_OTP_PWR_DN_PWRDN_N,
439 MUE_PRINTF(un, "not ready\n");
446 mue_csr_write(un, MUE_OTP_ADDR1,
448 mue_csr_write(un, MUE_OTP_ADDR2,
450 mue_csr_write(un, MUE_OTP_FUNC_CMD, MUE_OTP_FUNC_CMD_READ);
451 mue_csr_write(un, MUE_OTP_CMD_GO, MUE_OTP_CMD_GO_GO);
453 err = MUE_WAIT_CLR(un, MUE_OTP_STATUS, MUE_OTP_STATUS_BUSY, 0);
455 MUE_PRINTF(un, "timed out\n");
458 val = mue_csr_read(un, MUE_OTP_RD_DATA);
466 mue_read_otp(struct usbnet *un, uint8_t *dest, int off, int cnt)
471 if (un->un_flags & LAN7500)
474 err = mue_read_otp_raw(un, &sig, MUE_OTP_IND_OFFSET, 1);
484 DPRINTF(un, "OTP not found\n");
487 err = mue_read_otp_raw(un, dest, off, cnt);
492 mue_dataport_write(struct usbnet *un, uint32_t sel, uint32_t addr,
497 if (MUE_WAIT_SET(un, MUE_DP_SEL, MUE_DP_SEL_DPRDY, 0)) {
498 MUE_PRINTF(un, "not ready\n");
502 mue_csr_write(un, MUE_DP_SEL,
503 (mue_csr_read(un, MUE_DP_SEL) & ~MUE_DP_SEL_RSEL_MASK) | sel);
506 mue_csr_write(un, MUE_DP_ADDR, addr + i);
507 mue_csr_write(un, MUE_DP_DATA, data[i]);
508 mue_csr_write(un, MUE_DP_CMD, MUE_DP_CMD_WRITE);
509 if (MUE_WAIT_SET(un, MUE_DP_SEL, MUE_DP_SEL_DPRDY, 0)) {
510 MUE_PRINTF(un, "timed out\n");
517 mue_init_ltm(struct usbnet *un)
523 if (mue_csr_read(un, MUE_USB_CFG1) & MUE_USB_CFG1_LTM_ENABLE) {
524 if (mue_eeprom_present(un) &&
525 (mue_read_eeprom(un, temp, MUE_E2P_LTM_OFFSET, 2) == 0)) {
527 DPRINTF(un, "EEPROM: unexpected size\n");
530 if (mue_read_eeprom(un, (uint8_t *)idx, temp[1] << 1,
532 DPRINTF(un, "EEPROM: failed to read\n");
535 DPRINTF(un, "success\n");
536 } else if (mue_read_otp(un, temp, MUE_E2P_LTM_OFFSET, 2) == 0) {
538 DPRINTF(un, "OTP: unexpected size\n");
541 if (mue_read_otp(un, (uint8_t *)idx, temp[1] << 1,
543 DPRINTF(un, "OTP: failed to read\n");
546 DPRINTF(un, "success\n");
548 DPRINTF(un, "nothing to do\n");
550 DPRINTF(un, "nothing to do\n");
553 mue_csr_write(un, MUE_LTM_INDEX(i), idx[i]);
557 mue_chip_init(struct usbnet *un)
561 if ((un->un_flags & LAN7500) &&
562 MUE_WAIT_SET(un, MUE_PMT_CTL, MUE_PMT_CTL_READY, 0)) {
563 MUE_PRINTF(un, "not ready\n");
567 MUE_SETBIT(un, MUE_HW_CFG, MUE_HW_CFG_LRST);
568 if (MUE_WAIT_CLR(un, MUE_HW_CFG, MUE_HW_CFG_LRST, 0)) {
569 MUE_PRINTF(un, "timed out\n");
574 if (un->un_flags & LAN7500)
575 MUE_SETBIT(un, MUE_HW_CFG, MUE_HW_CFG_BIR);
577 MUE_SETBIT(un, MUE_USB_CFG0, MUE_USB_CFG0_BIR);
579 if (un->un_flags & LAN7500) {
580 if (un->un_udev->ud_speed == USB_SPEED_HIGH)
586 mue_csr_write(un, MUE_7500_BURST_CAP, val);
587 mue_csr_write(un, MUE_7500_BULKIN_DELAY,
590 MUE_SETBIT(un, MUE_HW_CFG, MUE_HW_CFG_BCE | MUE_HW_CFG_MEF);
594 mue_csr_write(un, MUE_7500_FCT_RX_FIFO_END, val);
596 mue_csr_write(un, MUE_7500_FCT_TX_FIFO_END, val);
599 mue_init_ltm(un);
602 switch (un->un_udev->ud_speed) {
613 mue_csr_write(un, MUE_7800_BURST_CAP, val);
614 mue_csr_write(un, MUE_7800_BULKIN_DELAY,
617 MUE_SETBIT(un, MUE_HW_CFG, MUE_HW_CFG_MEF);
618 MUE_SETBIT(un, MUE_USB_CFG0, MUE_USB_CFG0_BCE);
626 mue_csr_write(un, MUE_7800_FCT_RX_FIFO_END, val);
628 mue_csr_write(un, MUE_7800_FCT_TX_FIFO_END, val);
632 mue_csr_write(un, MUE_INT_STATUS, ~0);
634 mue_csr_write(un, (un->un_flags & LAN7500) ?
636 mue_csr_write(un, MUE_FLOW, 0);
639 MUE_SETBIT(un, MUE_PMT_CTL, MUE_PMT_CTL_PHY_RST);
640 if (MUE_WAIT_CLR(un, MUE_PMT_CTL, MUE_PMT_CTL_PHY_RST, 0)) {
641 MUE_PRINTF(un, "PHY not ready\n");
646 if (un->un_flags & LAN7801)
647 MUE_CLRBIT(un, MUE_MAC_CR, MUE_MAC_CR_GMII_EN);
649 if ((un->un_flags & (LAN7500 | LAN7800)) ||
650 !mue_eeprom_present(un)) {
652 MUE_SETBIT(un, MUE_MAC_CR, MUE_MAC_CR_AUTO_SPEED |
656 MUE_SETBIT(un, MUE_MAC_TX, MUE_MAC_TX_TXEN);
657 MUE_SETBIT(un, (un->un_flags & LAN7500) ?
660 MUE_SETBIT(un, (un->un_flags & LAN7500) ?
664 if ((un->un_flags & LAN7500) && !mue_eeprom_present(un)) {
665 MUE_CLRBIT(un, MUE_LED_CFG, MUE_LED_CFG_LED10_FUN_SEL);
666 MUE_SETBIT(un, MUE_LED_CFG,
671 if (un->un_flags & LAN7800 &&
672 !mue_eeprom_present(un))
673 MUE_SETBIT(un, MUE_HW_CFG,
680 mue_set_macaddr(struct usbnet *un)
682 struct ifnet * const ifp = usbnet_ifp(un);
689 mue_csr_write(un, MUE_RX_ADDRL, lo);
690 mue_csr_write(un, MUE_RX_ADDRH, hi);
694 mue_get_macaddr(struct usbnet *un, prop_dictionary_t dict)
699 if (!(un->un_flags & LAN7500)) {
700 low = mue_csr_read(un, MUE_RX_ADDRL);
701 high = mue_csr_read(un, MUE_RX_ADDRH);
702 un->un_eaddr[5] = (uint8_t)((high >> 8) & 0xff);
703 un->un_eaddr[4] = (uint8_t)((high) & 0xff);
704 un->un_eaddr[3] = (uint8_t)((low >> 24) & 0xff);
705 un->un_eaddr[2] = (uint8_t)((low >> 16) & 0xff);
706 un->un_eaddr[1] = (uint8_t)((low >> 8) & 0xff);
707 un->un_eaddr[0] = (uint8_t)((low) & 0xff);
708 if (ETHER_IS_VALID(un->un_eaddr))
711 DPRINTF(un, "registers: %s\n",
712 ether_sprintf(un->un_eaddr));
715 if (mue_eeprom_present(un) && !mue_read_eeprom(un, un->un_eaddr,
717 if (ETHER_IS_VALID(un->un_eaddr))
720 DPRINTF(un, "EEPROM: %s\n",
721 ether_sprintf(un->un_eaddr));
724 if (mue_read_otp(un, un->un_eaddr, MUE_OTP_MAC_OFFSET,
726 if (ETHER_IS_VALID(un->un_eaddr))
729 DPRINTF(un, "OTP: %s\n",
730 ether_sprintf(un->un_eaddr));
742 memcpy(un->un_eaddr, prop_data_value(eaprop),
744 if (ETHER_IS_VALID(un->un_eaddr))
747 DPRINTF(un, "prop_dictionary_get: %s\n",
748 ether_sprintf(un->un_eaddr));
770 struct usbnet * const un = device_private(self);
790 un->un_dev = self;
791 un->un_udev = dev;
792 un->un_sc = un;
793 un->un_ops = &mue_ops;
794 un->un_rx_xfer_flags = USBD_SHORT_XFER_OK;
795 un->un_tx_xfer_flags = USBD_FORCE_SHORT_XFER;
806 err = usbd_device2interface_handle(dev, MUE_IFACE_IDX, &un->un_iface);
813 un->un_flags = MUE_LOOKUP(uaa)->mue_flags;
816 if (un->un_flags & LAN7500) {
817 rx_bufsz = (un->un_udev->ud_speed == USB_SPEED_HIGH) ?
827 un->un_rx_list_cnt = rx_list_cnt;
828 un->un_tx_list_cnt = tx_list_cnt;
829 un->un_rx_bufsz = rx_bufsz;
830 un->un_tx_bufsz = MUE_TX_BUFSIZE;
833 id = usbd_get_interface_descriptor(un->un_iface);
835 ed = usbd_interface2endpoint_descriptor(un->un_iface, i);
842 un->un_ed[USBNET_ENDPT_RX] = ed->bEndpointAddress;
845 un->un_ed[USBNET_ENDPT_TX] = ed->bEndpointAddress;
848 un->un_ed[USBNET_ENDPT_INTR] = ed->bEndpointAddress;
851 if (un->un_ed[USBNET_ENDPT_RX] == 0 ||
852 un->un_ed[USBNET_ENDPT_TX] == 0 ||
853 un->un_ed[USBNET_ENDPT_INTR] == 0) {
859 usbnet_attach(un);
861 un->un_phyno = 1;
863 if (mue_chip_init(un)) {
869 id_rev = mue_csr_read(un, MUE_ID_REV);
870 descr = (un->un_flags & LAN7500) ? "LAN7500" : "LAN7800";
875 if (mue_get_macaddr(un, dict)) {
880 struct ifnet *ifp = usbnet_ifp(un);
888 struct ethercom *ec = usbnet_ec(un);
894 usbnet_attach_ifp(un, IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST,
899 mue_uno_tx_prepare(struct usbnet *un, struct mbuf *m, struct usbnet_chain *c)
901 struct ifnet * const ifp = usbnet_ifp(un);
907 if ((unsigned)m->m_pkthdr.len > un->un_tx_bufsz - sizeof(hdr))
919 MUE_PRINTF(un, "packet length %d\n too long", len);
934 rv = mue_prepare_tso(un, m);
958 mue_prepare_tso(struct usbnet *un, struct mbuf *m)
1005 struct usbnet *un = ifp->if_softc;
1006 struct ethercom *ec = usbnet_ec(un);
1015 if (usbnet_isdying(un))
1022 reg = (un->un_flags & LAN7500) ? MUE_7500_RFE_CTL : MUE_7800_RFE_CTL;
1023 rxfilt = mue_csr_read(un, reg);
1031 if (usbnet_ispromisc(un)) {
1035 if (usbnet_ispromisc(un))
1036 DPRINTF(un, "promisc\n");
1038 DPRINTF(un, "allmulti\n");
1071 DPRINTF(un, "perfect filter and hash tables\n");
1073 DPRINTF(un, "perfect filter\n");
1078 hireg = (un->un_flags & LAN7500) ?
1081 mue_csr_write(un, hireg, 0);
1082 mue_csr_write(un, loreg, pfiltbl[i][1]);
1083 mue_csr_write(un, hireg, pfiltbl[i][0]);
1086 mue_dataport_write(un, MUE_DP_SEL_VHF, MUE_DP_SEL_VHF_VLAN_LEN,
1089 mue_csr_write(un, reg, rxfilt);
1093 mue_sethwcsum_locked(struct usbnet *un)
1095 struct ifnet * const ifp = usbnet_ifp(un);
1100 reg = (un->un_flags & LAN7500) ? MUE_7500_RFE_CTL : MUE_7800_RFE_CTL;
1101 val = mue_csr_read(un, reg);
1104 DPRINTF(un, "RX IPv4 hwcsum enabled\n");
1107 DPRINTF(un, "RX IPv4 hwcsum disabled\n");
1114 DPRINTF(un, "RX L4 hwcsum enabled\n");
1117 DPRINTF(un, "RX L4 hwcsum disabled\n");
1123 mue_csr_write(un, reg, val);
1127 mue_setmtu_locked(struct usbnet *un)
1129 struct ifnet * const ifp = usbnet_ifp(un);
1135 MUE_CLRBIT(un, MUE_MAC_RX, MUE_MAC_RX_RXEN);
1136 val = mue_csr_read(un, MUE_MAC_RX);
1139 mue_csr_write(un, MUE_MAC_RX, val);
1140 MUE_SETBIT(un, MUE_MAC_RX, MUE_MAC_RX_RXEN);
1144 mue_uno_rx_loop(struct usbnet *un, struct usbnet_chain *c, uint32_t total_len)
1146 struct ifnet * const ifp = usbnet_ifp(un);
1154 KASSERTMSG(total_len <= un->un_rx_bufsz, "%u vs %u",
1155 total_len, un->un_rx_bufsz);
1159 MUE_PRINTF(un, "packet length %u too short\n", total_len);
1173 MUE_PRINTF(un, "rx_cmd_a: %#x\n", rx_cmd_a);
1179 if (un->un_flags & LAN7500)
1185 MUE_PRINTF(un, "invalid packet length %d\n", pktlen);
1219 usbnet_enqueue(un, buf + sizeof(*hdrp), pktlen, csum,
1234 struct usbnet * const un = ifp->if_softc;
1236 mue_reset(un);
1239 mue_set_macaddr(un);
1242 mue_sethwcsum_locked(un);
1245 mue_setmtu_locked(un);
1253 struct usbnet * const un = ifp->if_softc;
1257 mue_sethwcsum_locked(un);
1260 mue_setmtu_locked(un);
1270 mue_reset(struct usbnet *un)
1272 if (usbnet_isdying(un))
1276 usbd_delay_ms(un->un_udev, 1);
1278 // mue_chip_init(un); /* XXX */
1284 struct usbnet * const un = ifp->if_softc;
1286 mue_reset(un);