version 1.6, 2011/10/02 19:15:40 |
version 1.6.32.6, 2017/01/29 15:58:14 |
Line 93 static int auvitek_start_xfer(struct au |
|
Line 93 static int auvitek_start_xfer(struct au |
|
static int auvitek_stop_xfer(struct auvitek_softc *); |
static int auvitek_stop_xfer(struct auvitek_softc *); |
static int auvitek_isoc_start(struct auvitek_softc *); |
static int auvitek_isoc_start(struct auvitek_softc *); |
static int auvitek_isoc_start1(struct auvitek_isoc *); |
static int auvitek_isoc_start1(struct auvitek_isoc *); |
static void auvitek_isoc_intr(usbd_xfer_handle, |
static void auvitek_isoc_intr(struct usbd_xfer *, void *, |
usbd_private_handle, |
|
usbd_status); |
usbd_status); |
static int auvitek_isoc_process(struct auvitek_softc *, |
static int auvitek_isoc_process(struct auvitek_softc *, |
uint8_t *, uint32_t); |
uint8_t *, uint32_t); |
|
|
auvitek_video_attach(struct auvitek_softc *sc) |
auvitek_video_attach(struct auvitek_softc *sc) |
{ |
{ |
snprintf(sc->sc_businfo, sizeof(sc->sc_businfo), "usb:%08x", |
snprintf(sc->sc_businfo, sizeof(sc->sc_businfo), "usb:%08x", |
sc->sc_udev->cookie.cookie); |
sc->sc_udev->ud_cookie.cookie); |
|
|
auvitek_video_rescan(sc, NULL, NULL); |
auvitek_video_rescan(sc, NULL, NULL); |
|
|
return (sc->sc_videodev != NULL); |
return sc->sc_videodev != NULL; |
} |
} |
|
|
int |
int |
Line 585 auvitek_start_xfer(struct auvitek_softc |
|
Line 584 auvitek_start_xfer(struct auvitek_softc |
|
for (i = 0; i < AUVITEK_NISOC_XFERS; i++) { |
for (i = 0; i < AUVITEK_NISOC_XFERS; i++) { |
struct auvitek_isoc *isoc = &ax->ax_i[i]; |
struct auvitek_isoc *isoc = &ax->ax_i[i]; |
|
|
isoc->i_xfer = usbd_alloc_xfer(sc->sc_udev); |
int error = usbd_create_xfer(ax->ax_pipe, |
if (isoc->i_xfer == NULL) { |
nframes * uframe_len, 0, ax->ax_nframes, &isoc->i_xfer); |
|
if (error) { |
aprint_error_dev(sc->sc_dev, |
aprint_error_dev(sc->sc_dev, |
"couldn't allocate usb xfer\n"); |
"couldn't create usb xfer\n"); |
return ENOMEM; |
return error; |
} |
} |
|
|
isoc->i_buf = usbd_alloc_buffer(isoc->i_xfer, |
isoc->i_buf = usbd_get_buffer(isoc->i_xfer); |
nframes * uframe_len); |
|
if (isoc->i_buf == NULL) { |
|
aprint_error_dev(sc->sc_dev, |
|
"couldn't allocate usb xfer buffer\n"); |
|
return ENOMEM; |
|
} |
|
} |
} |
|
|
return auvitek_isoc_start(sc); |
return auvitek_isoc_start(sc); |
Line 613 auvitek_stop_xfer(struct auvitek_softc * |
|
Line 607 auvitek_stop_xfer(struct auvitek_softc * |
|
|
|
if (ax->ax_pipe != NULL) { |
if (ax->ax_pipe != NULL) { |
usbd_abort_pipe(ax->ax_pipe); |
usbd_abort_pipe(ax->ax_pipe); |
usbd_close_pipe(ax->ax_pipe); |
|
ax->ax_pipe = NULL; |
|
} |
} |
|
|
for (i = 0; i < AUVITEK_NISOC_XFERS; i++) { |
for (i = 0; i < AUVITEK_NISOC_XFERS; i++) { |
struct auvitek_isoc *isoc = &ax->ax_i[i]; |
struct auvitek_isoc *isoc = &ax->ax_i[i]; |
if (isoc->i_xfer != NULL) { |
if (isoc->i_xfer != NULL) { |
usbd_free_buffer(isoc->i_xfer); |
usbd_destroy_xfer(isoc->i_xfer); |
usbd_free_xfer(isoc->i_xfer); |
|
isoc->i_xfer = NULL; |
isoc->i_xfer = NULL; |
} |
} |
if (isoc->i_frlengths != NULL) { |
if (isoc->i_frlengths != NULL) { |
Line 630 auvitek_stop_xfer(struct auvitek_softc * |
|
Line 620 auvitek_stop_xfer(struct auvitek_softc * |
|
isoc->i_frlengths = NULL; |
isoc->i_frlengths = NULL; |
} |
} |
} |
} |
|
if (ax->ax_pipe != NULL) { |
|
usbd_close_pipe(ax->ax_pipe); |
|
ax->ax_pipe = NULL; |
|
} |
|
|
usbd_delay_ms(sc->sc_udev, 1000); |
usbd_delay_ms(sc->sc_udev, 1000); |
err = usbd_set_interface(sc->sc_isoc_iface, 0); |
err = usbd_set_interface(sc->sc_isoc_iface, 0); |
Line 676 auvitek_isoc_start1(struct auvitek_isoc |
|
Line 670 auvitek_isoc_start1(struct auvitek_isoc |
|
isoc->i_frlengths[i] = ax->ax_uframe_len; |
isoc->i_frlengths[i] = ax->ax_uframe_len; |
|
|
usbd_setup_isoc_xfer(isoc->i_xfer, |
usbd_setup_isoc_xfer(isoc->i_xfer, |
ax->ax_pipe, |
|
isoc, |
isoc, |
isoc->i_frlengths, |
isoc->i_frlengths, |
ax->ax_nframes, |
ax->ax_nframes, |
USBD_NO_COPY | USBD_SHORT_XFER_OK, |
USBD_SHORT_XFER_OK, |
auvitek_isoc_intr); |
auvitek_isoc_intr); |
|
|
err = usbd_transfer(isoc->i_xfer); |
err = usbd_transfer(isoc->i_xfer); |
Line 694 auvitek_isoc_start1(struct auvitek_isoc |
|
Line 687 auvitek_isoc_start1(struct auvitek_isoc |
|
} |
} |
|
|
static void |
static void |
auvitek_isoc_intr(usbd_xfer_handle xfer, usbd_private_handle priv, |
auvitek_isoc_intr(struct usbd_xfer *xfer, void * priv, |
usbd_status status) |
usbd_status status) |
{ |
{ |
struct auvitek_isoc *isoc = priv; |
struct auvitek_isoc *isoc = priv; |