Lines Matching refs:urb

214  * Controls the isoc copy of each urb packet
216 static void stk1160_process_isoc(struct stk1160 *dev, struct urb *urb)
226 if (urb->status < 0) {
228 print_err_status(dev, -1, urb->status);
232 for (i = 0; i < urb->number_of_packets; i++) {
233 status = urb->iso_frame_desc[i].status;
240 p = urb->transfer_buffer + urb->iso_frame_desc[i].offset;
241 len = urb->iso_frame_desc[i].actual_length;
294 static void stk1160_isoc_irq(struct urb *urb)
297 struct stk1160 *dev = urb->context;
299 switch (urb->status) {
308 stk1160_err("urb error! status %d\n", urb->status);
312 stk1160_process_isoc(dev, urb);
314 /* Reset urb buffers */
315 for (i = 0; i < urb->number_of_packets; i++) {
316 urb->iso_frame_desc[i].status = 0;
317 urb->iso_frame_desc[i].actual_length = 0;
320 rc = usb_submit_urb(urb, GFP_ATOMIC);
322 stk1160_err("urb re-submit failed (%d)\n", rc);
349 usb_kill_urb(dev->isoc_ctl.urb[i]);
356 * Releases urb and transfer buffers
357 * Obviusly, associated urb must be killed before releasing it.
361 struct urb *urb;
364 stk1160_dbg("freeing %d urb buffers...\n", num_bufs);
368 urb = dev->isoc_ctl.urb[i];
369 if (urb) {
374 urb->transfer_buffer_length,
376 urb->transfer_dma);
381 usb_free_urb(urb);
382 dev->isoc_ctl.urb[i] = NULL;
387 kfree(dev->isoc_ctl.urb);
390 dev->isoc_ctl.urb = NULL;
394 stk1160_dbg("all urb buffers freed\n");
412 struct urb *urb;
431 dev->isoc_ctl.urb = kcalloc(num_bufs, sizeof(void *), GFP_KERNEL);
432 if (!dev->isoc_ctl.urb) {
433 stk1160_err("out of memory for urb array\n");
441 kfree(dev->isoc_ctl.urb);
448 urb = usb_alloc_urb(max_packets, GFP_KERNEL);
449 if (!urb)
451 dev->isoc_ctl.urb[i] = urb;
455 sb_size, GFP_KERNEL, &urb->transfer_dma);
473 urb->dev = dev->udev;
474 urb->pipe = usb_rcvisocpipe(dev->udev, STK1160_EP_VIDEO);
475 urb->transfer_buffer = dev->isoc_ctl.transfer_buffer[i];
476 urb->transfer_buffer_length = sb_size;
477 urb->complete = stk1160_isoc_irq;
478 urb->context = dev;
479 urb->interval = 1;
480 urb->start_frame = 0;
481 urb->number_of_packets = max_packets;
483 urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
485 urb->transfer_flags = URB_ISO_ASAP;
490 urb->iso_frame_desc[j].offset = k;
491 urb->iso_frame_desc[j].length =
507 * enough to work fine, so we just free the extra urb,
510 usb_free_urb(dev->isoc_ctl.urb[i]);
511 dev->isoc_ctl.urb[i] = NULL;