uvc_urb
void uvc_video_decode_isight(struct uvc_urb *uvc_urb, struct uvc_buffer *buf,
struct urb *urb = uvc_urb->urb;
struct uvc_streaming *stream = uvc_urb->stream;
struct uvc_urb *uvc_urb = container_of(work, struct uvc_urb, work);
for (i = 0; i < uvc_urb->async_operations; i++) {
struct uvc_copy_op *op = &uvc_urb->copy_operations[i];
ret = usb_submit_urb(uvc_urb->urb, GFP_KERNEL);
dev_err(&uvc_urb->stream->intf->dev,
static void uvc_video_decode_data(struct uvc_urb *uvc_urb,
unsigned int active_op = uvc_urb->async_operations;
struct uvc_copy_op *op = &uvc_urb->copy_operations[active_op];
uvc_dbg(uvc_urb->stream->dev, FRAME,
uvc_urb->async_operations++;
static void uvc_video_decode_isoc(struct uvc_urb *uvc_urb,
struct urb *urb = uvc_urb->urb;
struct uvc_streaming *stream = uvc_urb->stream;
uvc_video_decode_data(uvc_urb, buf, mem + ret,
static void uvc_video_decode_bulk(struct uvc_urb *uvc_urb,
struct urb *urb = uvc_urb->urb;
struct uvc_streaming *stream = uvc_urb->stream;
uvc_video_decode_data(uvc_urb, buf, mem, len);
static void uvc_video_encode_bulk(struct uvc_urb *uvc_urb,
struct urb *urb = uvc_urb->urb;
struct uvc_streaming *stream = uvc_urb->stream;
struct uvc_urb *uvc_urb = urb->context;
struct uvc_streaming *stream = uvc_urb->stream;
uvc_urb->async_operations = 0;
stream->decode(uvc_urb, buf, buf_meta);
if (!uvc_urb->async_operations) {
ret = usb_submit_urb(uvc_urb->urb, GFP_ATOMIC);
queue_work(stream->async_wq, &uvc_urb->work);
struct uvc_urb *uvc_urb;
for_each_uvc_urb(uvc_urb, stream) {
if (!uvc_urb->buffer)
usb_free_noncoherent(udev, size, uvc_urb->buffer,
uvc_stream_dir(stream), uvc_urb->sgt);
uvc_urb->buffer = NULL;
uvc_urb->sgt = NULL;
struct uvc_urb *uvc_urb, unsigned int size,
uvc_urb->buffer = usb_alloc_noncoherent(udev, size, gfp_flags,
&uvc_urb->dma,
&uvc_urb->sgt);
return !!uvc_urb->buffer;
struct uvc_urb *uvc_urb = &stream->uvc_urb[i];
if (!uvc_alloc_urb_buffer(stream, uvc_urb, urb_size,
uvc_urb->stream = stream;
struct uvc_urb *uvc_urb;
for_each_uvc_urb(uvc_urb, stream)
usb_poison_urb(uvc_urb->urb);
for_each_uvc_urb(uvc_urb, stream) {
usb_free_urb(uvc_urb->urb);
uvc_urb->urb = NULL;
struct uvc_urb *uvc_urb;
for_each_uvc_urb(uvc_urb, stream) {
urb->context = uvc_urb;
urb->transfer_dma = uvc_urb->dma;
urb->transfer_buffer = uvc_urb->buffer;
urb->sgt = uvc_urb->sgt;
uvc_urb->urb = urb;
struct uvc_urb *uvc_urb;
for_each_uvc_urb(uvc_urb, stream) {
usb_fill_bulk_urb(urb, stream->dev->udev, pipe, uvc_urb->buffer,
size, uvc_video_complete, uvc_urb);
urb->transfer_dma = uvc_urb->dma;
urb->sgt = uvc_urb->sgt;
uvc_urb->urb = urb;
struct uvc_urb *uvc_urb;
for_each_uvc_urb(uvc_urb, stream) {
ret = usb_submit_urb(uvc_urb->urb, gfp_flags);
uvc_urb_index(uvc_urb), ret);
struct uvc_urb *uvc_urb;
for_each_uvc_urb(uvc_urb, stream)
INIT_WORK(&uvc_urb->work, uvc_video_copy_data_work);
void (*decode)(struct uvc_urb *uvc_urb, struct uvc_buffer *buf,
struct uvc_urb uvc_urb[UVC_URBS];
#define for_each_uvc_urb(uvc_urb, uvc_streaming) \
for ((uvc_urb) = &(uvc_streaming)->uvc_urb[0]; \
(uvc_urb) < &(uvc_streaming)->uvc_urb[UVC_URBS]; \
++(uvc_urb))
static inline u32 uvc_urb_index(const struct uvc_urb *uvc_urb)
return uvc_urb - &uvc_urb->stream->uvc_urb[0];
void uvc_video_decode_isight(struct uvc_urb *uvc_urb,