• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/usb/core/

Lines Matching defs:io

253 static void sg_clean(struct usb_sg_request *io)
255 if (io->urbs) {
256 while (io->entries--)
257 usb_free_urb(io->urbs [io->entries]);
258 kfree(io->urbs);
259 io->urbs = NULL;
261 io->dev = NULL;
266 struct usb_sg_request *io = urb->context;
269 spin_lock(&io->lock);
281 if (io->status
282 && (io->status != -ECONNRESET
285 dev_err(io->dev->bus->controller,
287 io->dev->devpath,
290 status, io->status);
294 if (io->status == 0 && status && status != -ECONNRESET) {
297 io->status = status;
303 spin_unlock(&io->lock);
304 for (i = 0, found = 0; i < io->entries; i++) {
305 if (!io->urbs [i] || !io->urbs [i]->dev)
308 retval = usb_unlink_urb(io->urbs [i]);
312 dev_err(&io->dev->dev,
315 } else if (urb == io->urbs [i])
318 spin_lock(&io->lock);
323 io->bytes += urb->actual_length;
324 io->count--;
325 if (!io->count)
326 complete(&io->complete);
328 spin_unlock(&io->lock);
334 * @io: request block being initialized. until usb_sg_wait() returns,
357 int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev,
365 if (!io || !dev || !sg
371 spin_lock_init(&io->lock);
372 io->dev = dev;
373 io->pipe = pipe;
377 io->entries = 1;
380 io->entries = nents;
384 io->urbs = kmalloc(io->entries * sizeof *io->urbs, mem_flags);
385 if (!io->urbs)
392 for_each_sg(sg, sg, io->entries, i) {
398 io->entries = i;
401 io->urbs[i] = urb;
408 urb->context = io;
441 io->entries = i + 1;
446 io->urbs[--i]->transfer_flags &= ~URB_NO_INTERRUPT;
449 io->count = io->entries;
450 io->status = 0;
451 io->bytes = 0;
452 init_completion(&io->complete);
456 sg_clean(io);
463 * @io: request block handle, as initialized with usb_sg_init().
473 * (1) success, where io->status is zero. The number of io->bytes
475 * (2) error, where io->status is a negative errno value. The number
476 * of io->bytes transferred before the error is usually less
504 void usb_sg_wait(struct usb_sg_request *io)
507 int entries = io->entries;
510 spin_lock_irq(&io->lock);
512 while (i < entries && !io->status) {
515 io->urbs[i]->dev = io->dev;
516 retval = usb_submit_urb(io->urbs [i], GFP_ATOMIC);
519 * we handshake using io->status.
521 spin_unlock_irq(&io->lock);
527 io->urbs[i]->dev = NULL;
545 io->urbs[i]->dev = NULL;
546 io->urbs[i]->status = retval;
547 dev_dbg(&io->dev->dev, "%s, submit --> %d\n",
549 usb_sg_cancel(io);
551 spin_lock_irq(&io->lock);
552 if (retval && (io->status == 0 || io->status == -ECONNRESET))
553 io->status = retval;
555 io->count -= entries - i;
556 if (io->count == 0)
557 complete(&io->complete);
558 spin_unlock_irq(&io->lock);
564 wait_for_completion(&io->complete);
566 sg_clean(io);
572 * @io: request block, initialized with usb_sg_init()
578 void usb_sg_cancel(struct usb_sg_request *io)
582 spin_lock_irqsave(&io->lock, flags);
585 if (!io->status) {
588 io->status = -ECONNRESET;
589 spin_unlock(&io->lock);
590 for (i = 0; i < io->entries; i++) {
593 if (!io->urbs [i]->dev)
595 retval = usb_unlink_urb(io->urbs [i]);
597 dev_warn(&io->dev->dev, "%s, unlink --> %d\n",
600 spin_lock(&io->lock);
602 spin_unlock_irqrestore(&io->lock, flags);