Lines 581-593
ure_attach(device_t dev)
Link Here
|
581 |
goto detach; |
581 |
goto detach; |
582 |
} |
582 |
} |
583 |
|
583 |
|
584 |
/* Mark all TX transfers as available */ |
|
|
585 |
for (int i = 0; i < URE_N_TRANSFER; i++) { |
586 |
sc->sc_txavail[i] = sc->sc_tx_xfer[i]; |
587 |
DEVPRINTF(dev, "sc_txavail[%d] = %p\n", i, sc->sc_txavail[i]); |
588 |
} |
589 |
sc->sc_txpos = 0; |
590 |
|
591 |
ue->ue_sc = sc; |
584 |
ue->ue_sc = sc; |
592 |
ue->ue_dev = dev; |
585 |
ue->ue_dev = dev; |
593 |
ue->ue_udev = uaa->device; |
586 |
ue->ue_udev = uaa->device; |
Lines 870-885
ure_bulk_write_callback(struct usb_xfer *xfer, usb_error_t error)
Link Here
|
870 |
|
863 |
|
871 |
usbd_transfer_submit(xfer); |
864 |
usbd_transfer_submit(xfer); |
872 |
|
865 |
|
873 |
KASSERT(sc->sc_txpos >= 0 && sc->sc_txpos <= URE_N_TRANSFER, |
|
|
874 |
("sc_txpos invalid: %d", sc->sc_txpos)); |
875 |
if (sc->sc_txpos < URE_N_TRANSFER && |
876 |
!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) { |
877 |
xfer = sc->sc_txavail[sc->sc_txpos++]; |
878 |
usbd_transfer_start(xfer); |
879 |
} |
880 |
|
881 |
if (sc->sc_txpos == URE_N_TRANSFER) |
882 |
ifp->if_drv_flags |= IFF_DRV_OACTIVE; |
883 |
return; |
866 |
return; |
884 |
|
867 |
|
885 |
default: /* Error */ |
868 |
default: /* Error */ |
Lines 900-910
ure_bulk_write_callback(struct usb_xfer *xfer, usb_error_t error)
Link Here
|
900 |
goto tr_setup; |
883 |
goto tr_setup; |
901 |
} |
884 |
} |
902 |
} |
885 |
} |
903 |
|
|
|
904 |
KASSERT(sc->sc_txpos > 0 && sc->sc_txpos <= URE_N_TRANSFER, ("sc_txpos invalid: %d", sc->sc_txpos)); |
905 |
sc->sc_txavail[(--(sc->sc_txpos))] = xfer; |
906 |
if (sc->sc_txpos < URE_N_TRANSFER) |
907 |
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; |
908 |
} |
886 |
} |
909 |
|
887 |
|
910 |
static void |
888 |
static void |
Lines 1110-1119
ure_tick(struct usb_ether *ue)
Link Here
|
1110 |
|
1088 |
|
1111 |
URE_LOCK_ASSERT(sc, MA_OWNED); |
1089 |
URE_LOCK_ASSERT(sc, MA_OWNED); |
1112 |
|
1090 |
|
1113 |
KASSERT(sc->sc_txpos >= 0 && sc->sc_txpos <= URE_N_TRANSFER, ("sc_txpos invalid: %d", sc->sc_txpos)); |
|
|
1114 |
(void)ifp; |
1091 |
(void)ifp; |
1115 |
DEVPRINTFN(13, sc->sc_ue.ue_dev, |
|
|
1116 |
"sc_txpos: %d, oactive: %d\n", sc->sc_txpos, !!(ifp->if_drv_flags & IFF_DRV_OACTIVE)); |
1117 |
for (int i = 0; i < URE_N_TRANSFER; i++) |
1092 |
for (int i = 0; i < URE_N_TRANSFER; i++) |
1118 |
DEVPRINTFN(13, sc->sc_ue.ue_dev, |
1093 |
DEVPRINTFN(13, sc->sc_ue.ue_dev, |
1119 |
"rx[%d] = %d\n", i, USB_GET_STATE(sc->sc_rx_xfer[i])); |
1094 |
"rx[%d] = %d\n", i, USB_GET_STATE(sc->sc_rx_xfer[i])); |
Lines 1190-1223
static void
Link Here
|
1190 |
ure_start(struct usb_ether *ue) |
1165 |
ure_start(struct usb_ether *ue) |
1191 |
{ |
1166 |
{ |
1192 |
struct ure_softc *sc = uether_getsc(ue); |
1167 |
struct ure_softc *sc = uether_getsc(ue); |
1193 |
struct usb_xfer *xfer; |
1168 |
unsigned i; |
1194 |
struct ifnet *ifp; |
|
|
1195 |
|
1169 |
|
1196 |
URE_LOCK_ASSERT(sc, MA_OWNED); |
1170 |
URE_LOCK_ASSERT(sc, MA_OWNED); |
1197 |
|
1171 |
|
1198 |
if (!sc->sc_rxstarted) { |
1172 |
if (!sc->sc_rxstarted) { |
1199 |
sc->sc_rxstarted = 1; |
1173 |
sc->sc_rxstarted = 1; |
1200 |
for (int i = 0; i < URE_N_TRANSFER; i++) |
1174 |
for (i = 0; i < URE_N_TRANSFER; i++) |
1201 |
usbd_transfer_start(sc->sc_rx_xfer[i]); |
1175 |
usbd_transfer_start(sc->sc_rx_xfer[i]); |
1202 |
} |
1176 |
} |
1203 |
|
1177 |
|
1204 |
/* |
1178 |
for (i = 0; i < URE_N_TRANSFER; i++) |
1205 |
* start the USB transfers, if not already started: |
1179 |
usbd_transfer_start(sc->sc_tx_xfer[i]); |
1206 |
*/ |
|
|
1207 |
if (sc->sc_txpos == URE_N_TRANSFER) { |
1208 |
ifp = uether_getifp(&sc->sc_ue); |
1209 |
|
1210 |
ifp->if_drv_flags |= IFF_DRV_OACTIVE; |
1211 |
return; |
1212 |
} |
1213 |
|
1214 |
KASSERT(sc->sc_txpos >= 0 && sc->sc_txpos < URE_N_TRANSFER, ("sc_txpos invalid: %d", sc->sc_txpos)); |
1215 |
xfer = sc->sc_txavail[sc->sc_txpos++]; |
1216 |
if (sc->sc_txpos == URE_N_TRANSFER) { |
1217 |
ifp = uether_getifp(&sc->sc_ue); |
1218 |
ifp->if_drv_flags |= IFF_DRV_OACTIVE; |
1219 |
} |
1220 |
usbd_transfer_start(xfer); |
1221 |
} |
1180 |
} |
1222 |
|
1181 |
|
1223 |
static void |
1182 |
static void |