aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/usb/net/if_axe.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/usb/net/if_axe.c')
-rw-r--r--sys/dev/usb/net/if_axe.c104
1 files changed, 61 insertions, 43 deletions
diff --git a/sys/dev/usb/net/if_axe.c b/sys/dev/usb/net/if_axe.c
index 83caec01c88b..3c72b383e4ca 100644
--- a/sys/dev/usb/net/if_axe.c
+++ b/sys/dev/usb/net/if_axe.c
@@ -76,20 +76,34 @@ __FBSDID("$FreeBSD$");
* http://www.asix.com.tw/FrootAttach/datasheet/AX88772_datasheet_Rev10.pdf
*/
-#include "usbdevs.h"
+#include <sys/stdint.h>
+#include <sys/stddef.h>
+#include <sys/param.h>
+#include <sys/queue.h>
+#include <sys/types.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/bus.h>
+#include <sys/linker_set.h>
+#include <sys/module.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/condvar.h>
+#include <sys/sysctl.h>
+#include <sys/sx.h>
+#include <sys/unistd.h>
+#include <sys/callout.h>
+#include <sys/malloc.h>
+#include <sys/priv.h>
+
#include <dev/usb/usb.h>
-#include <dev/usb/usb_mfunc.h>
-#include <dev/usb/usb_error.h>
+#include <dev/usb/usbdi.h>
+#include <dev/usb/usbdi_util.h>
+#include "usbdevs.h"
#define USB_DEBUG_VAR axe_debug
-
-#include <dev/usb/usb_core.h>
-#include <dev/usb/usb_lookup.h>
-#include <dev/usb/usb_process.h>
#include <dev/usb/usb_debug.h>
-#include <dev/usb/usb_request.h>
-#include <dev/usb/usb_busdma.h>
-#include <dev/usb/usb_util.h>
+#include <dev/usb/usb_process.h>
#include <dev/usb/net/usb_ethernet.h>
#include <dev/usb/net/if_axereg.h>
@@ -731,20 +745,20 @@ axe_detach(device_t dev)
}
static void
-axe_intr_callback(struct usb_xfer *xfer)
+axe_intr_callback(struct usb_xfer *xfer, usb_error_t error)
{
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
case USB_ST_SETUP:
tr_setup:
- xfer->frlengths[0] = xfer->max_data_length;
+ usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_len(xfer));
usbd_transfer_submit(xfer);
return;
default: /* Error */
- if (xfer->error != USB_ERR_CANCELLED) {
+ if (error != USB_ERR_CANCELLED) {
/* try to clear stall first */
- xfer->flags.stall_pipe = 1;
+ usbd_xfer_set_stall(xfer);
goto tr_setup;
}
return;
@@ -756,56 +770,61 @@ tr_setup:
#endif
static void
-axe_bulk_read_callback(struct usb_xfer *xfer)
+axe_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error)
{
- struct axe_softc *sc = xfer->priv_sc;
+ struct axe_softc *sc = usbd_xfer_softc(xfer);
struct usb_ether *ue = &sc->sc_ue;
struct ifnet *ifp = uether_getifp(ue);
struct axe_sframe_hdr hdr;
- int error, pos, len, adjust;
+ struct usb_page_cache *pc;
+ int err, pos, len, adjust;
+ int actlen;
+
+ usbd_xfer_status(xfer, &actlen, NULL, NULL, NULL);
switch (USB_GET_STATE(xfer)) {
case USB_ST_TRANSFERRED:
pos = 0;
+ pc = usbd_xfer_get_frame(xfer, 0);
while (1) {
if (sc->sc_flags & (AXE_FLAG_772 | AXE_FLAG_178)) {
- if (xfer->actlen < sizeof(hdr)) {
+ if (actlen < sizeof(hdr)) {
/* too little data */
break;
}
- usbd_copy_out(xfer->frbuffers, pos, &hdr, sizeof(hdr));
+ usbd_copy_out(pc, pos, &hdr, sizeof(hdr));
if ((hdr.len ^ hdr.ilen) != 0xFFFF) {
/* we lost sync */
break;
}
- xfer->actlen -= sizeof(hdr);
+ actlen -= sizeof(hdr);
pos += sizeof(hdr);
len = le16toh(hdr.len);
- if (len > xfer->actlen) {
+ if (len > actlen) {
/* invalid length */
break;
}
adjust = (len & 1);
} else {
- len = xfer->actlen;
+ len = actlen;
adjust = 0;
}
- error = uether_rxbuf(ue, xfer->frbuffers, pos, len);
- if (error)
+ err = uether_rxbuf(ue, pc, pos, len);
+ if (err)
break;
pos += len;
- xfer->actlen -= len;
+ actlen -= len;
- if (xfer->actlen <= adjust) {
+ if (actlen <= adjust) {
/* we are finished */
goto tr_setup;
}
pos += adjust;
- xfer->actlen -= adjust;
+ actlen -= adjust;
}
/* count an error */
@@ -814,18 +833,17 @@ axe_bulk_read_callback(struct usb_xfer *xfer)
/* FALLTHROUGH */
case USB_ST_SETUP:
tr_setup:
- xfer->frlengths[0] = xfer->max_data_length;
+ usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_len(xfer));
usbd_transfer_submit(xfer);
uether_rxflush(ue);
return;
default: /* Error */
- DPRINTF("bulk read error, %s\n",
- usbd_errstr(xfer->error));
+ DPRINTF("bulk read error, %s\n", usbd_errstr(error));
- if (xfer->error != USB_ERR_CANCELLED) {
+ if (error != USB_ERR_CANCELLED) {
/* try to clear stall first */
- xfer->flags.stall_pipe = 1;
+ usbd_xfer_set_stall(xfer);
goto tr_setup;
}
return;
@@ -838,11 +856,12 @@ tr_setup:
#endif
static void
-axe_bulk_write_callback(struct usb_xfer *xfer)
+axe_bulk_write_callback(struct usb_xfer *xfer, usb_error_t error)
{
- struct axe_softc *sc = xfer->priv_sc;
+ struct axe_softc *sc = usbd_xfer_softc(xfer);
struct axe_sframe_hdr hdr;
struct ifnet *ifp = uether_getifp(&sc->sc_ue);
+ struct usb_page_cache *pc;
struct mbuf *m;
int pos;
@@ -860,6 +879,7 @@ tr_setup:
return;
}
pos = 0;
+ pc = usbd_xfer_get_frame(xfer, 0);
while (1) {
@@ -878,7 +898,7 @@ tr_setup:
hdr.len = htole16(m->m_pkthdr.len);
hdr.ilen = ~hdr.len;
- usbd_copy_in(xfer->frbuffers, pos, &hdr, sizeof(hdr));
+ usbd_copy_in(pc, pos, &hdr, sizeof(hdr));
pos += sizeof(hdr);
@@ -890,9 +910,7 @@ tr_setup:
* USB_FORCE_SHORT_XFER flag instead.
*/
}
- usbd_m_copy_in(xfer->frbuffers, pos,
- m, 0, m->m_pkthdr.len);
-
+ usbd_m_copy_in(pc, pos, m, 0, m->m_pkthdr.len);
pos += m->m_pkthdr.len;
/*
@@ -914,19 +932,19 @@ tr_setup:
}
}
- xfer->frlengths[0] = pos;
+ usbd_xfer_set_frame_len(xfer, 0, pos);
usbd_transfer_submit(xfer);
return;
default: /* Error */
DPRINTFN(11, "transfer error, %s\n",
- usbd_errstr(xfer->error));
+ usbd_errstr(error));
ifp->if_oerrors++;
- if (xfer->error != USB_ERR_CANCELLED) {
+ if (error != USB_ERR_CANCELLED) {
/* try to clear stall first */
- xfer->flags.stall_pipe = 1;
+ usbd_xfer_set_stall(xfer);
goto tr_setup;
}
return;
@@ -1010,7 +1028,7 @@ axe_init(struct usb_ether *ue)
/* Load the multicast filter. */
axe_setmulti(ue);
- usbd_transfer_set_stall(sc->sc_xfer[AXE_BULK_DT_WR]);
+ usbd_xfer_set_stall(sc->sc_xfer[AXE_BULK_DT_WR]);
ifp->if_drv_flags |= IFF_DRV_RUNNING;
axe_start(ue);