Lines Matching refs:as

403 	struct async *as;  in alloc_async()  local
405 as = kzalloc(sizeof(struct async), GFP_KERNEL); in alloc_async()
406 if (!as) in alloc_async()
408 as->urb = usb_alloc_urb(numisoframes, GFP_KERNEL); in alloc_async()
409 if (!as->urb) { in alloc_async()
410 kfree(as); in alloc_async()
413 return as; in alloc_async()
416 static void free_async(struct async *as) in free_async() argument
420 put_pid(as->pid); in free_async()
421 if (as->cred) in free_async()
422 put_cred(as->cred); in free_async()
423 for (i = 0; i < as->urb->num_sgs; i++) { in free_async()
424 if (sg_page(&as->urb->sg[i])) in free_async()
425 kfree(sg_virt(&as->urb->sg[i])); in free_async()
428 kfree(as->urb->sg); in free_async()
429 if (as->usbm == NULL) in free_async()
430 kfree(as->urb->transfer_buffer); in free_async()
432 dec_usb_memory_use_count(as->usbm, &as->usbm->urb_use_count); in free_async()
434 kfree(as->urb->setup_packet); in free_async()
435 usb_free_urb(as->urb); in free_async()
436 usbfs_decrease_memory_usage(as->mem_usage); in free_async()
437 kfree(as); in free_async()
440 static void async_newpending(struct async *as) in async_newpending() argument
442 struct usb_dev_state *ps = as->ps; in async_newpending()
446 list_add_tail(&as->asynclist, &ps->async_pending); in async_newpending()
450 static void async_removepending(struct async *as) in async_removepending() argument
452 struct usb_dev_state *ps = as->ps; in async_removepending()
456 list_del_init(&as->asynclist); in async_removepending()
463 struct async *as = NULL; in async_getcompleted() local
467 as = list_entry(ps->async_completed.next, struct async, in async_getcompleted()
469 list_del_init(&as->asynclist); in async_getcompleted()
472 return as; in async_getcompleted()
478 struct async *as; in async_getpending() local
480 list_for_each_entry(as, &ps->async_pending, asynclist) in async_getpending()
481 if (as->userurb == userurb) { in async_getpending()
482 list_del_init(&as->asynclist); in async_getpending()
483 return as; in async_getpending()
590 struct async *as; in cancel_bulk_urbs() local
597 list_for_each_entry(as, &ps->async_pending, asynclist) { in cancel_bulk_urbs()
598 if (as->bulk_addr == bulk_addr) { in cancel_bulk_urbs()
599 if (as->bulk_status != AS_CONTINUATION) in cancel_bulk_urbs()
601 as->bulk_status = AS_UNLINK; in cancel_bulk_urbs()
602 as->bulk_addr = 0; in cancel_bulk_urbs()
609 list_for_each_entry_reverse(as, &ps->async_pending, asynclist) { in cancel_bulk_urbs()
610 if (as->bulk_status == AS_UNLINK) { in cancel_bulk_urbs()
611 as->bulk_status = 0; /* Only once */ in cancel_bulk_urbs()
612 urb = as->urb; in cancel_bulk_urbs()
625 struct async *as = urb->context; in async_completed() local
626 struct usb_dev_state *ps = as->ps; in async_completed()
634 list_move_tail(&as->asynclist, &ps->async_completed); in async_completed()
635 as->status = urb->status; in async_completed()
636 signr = as->signr; in async_completed()
638 errno = as->status; in async_completed()
639 addr = as->userurb_sigval; in async_completed()
640 pid = get_pid(as->pid); in async_completed()
641 cred = get_cred(as->cred); in async_completed()
644 snoop_urb(urb->dev, as->userurb, urb->pipe, urb->actual_length, in async_completed()
645 as->status, COMPLETE, NULL, 0); in async_completed()
649 if (as->status < 0 && as->bulk_addr && as->status != -ECONNRESET && in async_completed()
650 as->status != -ENOENT) in async_completed()
651 cancel_bulk_urbs(ps, as->bulk_addr); in async_completed()
666 struct async *as; in destroy_async() local
671 as = list_last_entry(list, struct async, asynclist); in destroy_async()
672 list_del_init(&as->asynclist); in destroy_async()
673 urb = as->urb; in destroy_async()
1097 struct async *as; in usbdev_release() local
1120 as = async_getcompleted(ps); in usbdev_release()
1121 while (as) { in usbdev_release()
1122 free_async(as); in usbdev_release()
1123 as = async_getcompleted(ps); in usbdev_release()
1625 struct async *as = NULL; in proc_do_submiturb() local
1780 as = alloc_async(number_of_packets); in proc_do_submiturb()
1781 if (!as) { in proc_do_submiturb()
1786 as->usbm = find_memory_area(ps, uurb); in proc_do_submiturb()
1787 if (IS_ERR(as->usbm)) { in proc_do_submiturb()
1788 ret = PTR_ERR(as->usbm); in proc_do_submiturb()
1789 as->usbm = NULL; in proc_do_submiturb()
1796 if (as->usbm) in proc_do_submiturb()
1800 (as->usbm ? 0 : uurb->buffer_length) + in proc_do_submiturb()
1805 as->mem_usage = u; in proc_do_submiturb()
1808 as->urb->sg = kmalloc_array(num_sgs, in proc_do_submiturb()
1811 if (!as->urb->sg) { in proc_do_submiturb()
1815 as->urb->num_sgs = num_sgs; in proc_do_submiturb()
1816 sg_init_table(as->urb->sg, as->urb->num_sgs); in proc_do_submiturb()
1819 for (i = 0; i < as->urb->num_sgs; i++) { in proc_do_submiturb()
1826 sg_set_buf(&as->urb->sg[i], buf, u); in proc_do_submiturb()
1838 if (as->usbm) { in proc_do_submiturb()
1841 as->urb->transfer_buffer = as->usbm->mem + in proc_do_submiturb()
1842 (uurb_start - as->usbm->vm_start); in proc_do_submiturb()
1844 as->urb->transfer_buffer = kmalloc(uurb->buffer_length, in proc_do_submiturb()
1846 if (!as->urb->transfer_buffer) { in proc_do_submiturb()
1851 if (copy_from_user(as->urb->transfer_buffer, in proc_do_submiturb()
1864 memset(as->urb->transfer_buffer, 0, in proc_do_submiturb()
1869 as->urb->dev = ps->dev; in proc_do_submiturb()
1870 as->urb->pipe = (uurb->type << 30) | in proc_do_submiturb()
1887 as->urb->transfer_flags = u; in proc_do_submiturb()
1894 as->urb->transfer_buffer_length = uurb->buffer_length; in proc_do_submiturb()
1895 as->urb->setup_packet = (unsigned char *)dr; in proc_do_submiturb()
1897 as->urb->start_frame = uurb->start_frame; in proc_do_submiturb()
1898 as->urb->number_of_packets = number_of_packets; in proc_do_submiturb()
1899 as->urb->stream_id = stream_id; in proc_do_submiturb()
1905 as->urb->interval = 1 << in proc_do_submiturb()
1908 as->urb->interval = ep->desc.bInterval; in proc_do_submiturb()
1911 as->urb->context = as; in proc_do_submiturb()
1912 as->urb->complete = async_completed; in proc_do_submiturb()
1914 as->urb->iso_frame_desc[u].offset = totlen; in proc_do_submiturb()
1915 as->urb->iso_frame_desc[u].length = isopkt[u].length; in proc_do_submiturb()
1920 as->ps = ps; in proc_do_submiturb()
1921 as->userurb = arg; in proc_do_submiturb()
1922 as->userurb_sigval = userurb_sigval; in proc_do_submiturb()
1923 if (as->usbm) { in proc_do_submiturb()
1926 as->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in proc_do_submiturb()
1927 as->urb->transfer_dma = as->usbm->dma_handle + in proc_do_submiturb()
1928 (uurb_start - as->usbm->vm_start); in proc_do_submiturb()
1930 as->userbuffer = uurb->buffer; in proc_do_submiturb()
1931 as->signr = uurb->signr; in proc_do_submiturb()
1932 as->ifnum = ifnum; in proc_do_submiturb()
1933 as->pid = get_pid(task_pid(current)); in proc_do_submiturb()
1934 as->cred = get_current_cred(); in proc_do_submiturb()
1935 snoop_urb(ps->dev, as->userurb, as->urb->pipe, in proc_do_submiturb()
1936 as->urb->transfer_buffer_length, 0, SUBMIT, in proc_do_submiturb()
1939 snoop_urb_data(as->urb, as->urb->transfer_buffer_length); in proc_do_submiturb()
1941 async_newpending(as); in proc_do_submiturb()
1950 as->bulk_addr = usb_endpoint_num(&ep->desc) | in proc_do_submiturb()
1958 as->bulk_status = AS_CONTINUATION; in proc_do_submiturb()
1960 ps->disabled_bulk_eps &= ~(1 << as->bulk_addr); in proc_do_submiturb()
1965 if (ps->disabled_bulk_eps & (1 << as->bulk_addr)) in proc_do_submiturb()
1968 ret = usb_submit_urb(as->urb, GFP_ATOMIC); in proc_do_submiturb()
1971 ret = usb_submit_urb(as->urb, GFP_KERNEL); in proc_do_submiturb()
1977 snoop_urb(ps->dev, as->userurb, as->urb->pipe, in proc_do_submiturb()
1979 async_removepending(as); in proc_do_submiturb()
1987 if (as) in proc_do_submiturb()
1988 free_async(as); in proc_do_submiturb()
2011 struct async *as; in proc_unlinkurb() local
2015 as = async_getpending(ps, arg); in proc_unlinkurb()
2016 if (!as) { in proc_unlinkurb()
2021 urb = as->urb; in proc_unlinkurb()
2043 static int processcompl(struct async *as, void __user * __user *arg) in processcompl() argument
2045 struct urb *urb = as->urb; in processcompl()
2046 struct usbdevfs_urb __user *userurb = as->userurb; in processcompl()
2047 void __user *addr = as->userurb; in processcompl()
2051 if (as->userbuffer && urb->actual_length) { in processcompl()
2052 if (copy_urb_data_to_user(as->userbuffer, urb)) in processcompl()
2055 if (put_user(as->status, &userurb->status)) in processcompl()
2084 struct async *as = NULL; in reap_as() local
2090 as = async_getcompleted(ps); in reap_as()
2091 if (as || !connected(ps)) in reap_as()
2101 return as; in reap_as()
2106 struct async *as = reap_as(ps); in proc_reapurb() local
2108 if (as) { in proc_reapurb()
2111 snoop(&ps->dev->dev, "reap %px\n", as->userurb); in proc_reapurb()
2112 retval = processcompl(as, (void __user * __user *)arg); in proc_reapurb()
2113 free_async(as); in proc_reapurb()
2124 struct async *as; in proc_reapurbnonblock() local
2126 as = async_getcompleted(ps); in proc_reapurbnonblock()
2127 if (as) { in proc_reapurbnonblock()
2128 snoop(&ps->dev->dev, "reap %px\n", as->userurb); in proc_reapurbnonblock()
2129 retval = processcompl(as, (void __user * __user *)arg); in proc_reapurbnonblock()
2130 free_async(as); in proc_reapurbnonblock()
2214 static int processcompl_compat(struct async *as, void __user * __user *arg) in processcompl_compat() argument
2216 struct urb *urb = as->urb; in processcompl_compat()
2217 struct usbdevfs_urb32 __user *userurb = as->userurb; in processcompl_compat()
2218 void __user *addr = as->userurb; in processcompl_compat()
2222 if (as->userbuffer && urb->actual_length) { in processcompl_compat()
2223 if (copy_urb_data_to_user(as->userbuffer, urb)) in processcompl_compat()
2226 if (put_user(as->status, &userurb->status)) in processcompl_compat()
2251 struct async *as = reap_as(ps); in proc_reapurb_compat() local
2253 if (as) { in proc_reapurb_compat()
2256 snoop(&ps->dev->dev, "reap %px\n", as->userurb); in proc_reapurb_compat()
2257 retval = processcompl_compat(as, (void __user * __user *)arg); in proc_reapurb_compat()
2258 free_async(as); in proc_reapurb_compat()
2269 struct async *as; in proc_reapurbnonblock_compat() local
2271 as = async_getcompleted(ps); in proc_reapurbnonblock_compat()
2272 if (as) { in proc_reapurbnonblock_compat()
2273 snoop(&ps->dev->dev, "reap %px\n", as->userurb); in proc_reapurbnonblock_compat()
2274 retval = processcompl_compat(as, (void __user * __user *)arg); in proc_reapurbnonblock_compat()
2275 free_async(as); in proc_reapurbnonblock_compat()