Lines Matching refs:udl
26 static struct urb *udl_get_urb_locked(struct udl_device *udl, long timeout);
28 static int udl_parse_vendor_descriptor(struct udl_device *udl) in udl_parse_vendor_descriptor() argument
30 struct usb_device *udev = udl_to_usb_device(udl); in udl_parse_vendor_descriptor()
73 udl->sku_pixel_limit = max_area; in udl_parse_vendor_descriptor()
97 int udl_select_std_channel(struct udl_device *udl) in udl_select_std_channel() argument
106 struct usb_device *udev = udl_to_usb_device(udl); in udl_select_std_channel()
124 struct udl_device *udl = unode->dev; in udl_urb_completion() local
138 urb->transfer_buffer_length = udl->urbs.size; /* reset to actual */ in udl_urb_completion()
140 spin_lock_irqsave(&udl->urbs.lock, flags); in udl_urb_completion()
141 list_add_tail(&unode->entry, &udl->urbs.list); in udl_urb_completion()
142 udl->urbs.available++; in udl_urb_completion()
143 spin_unlock_irqrestore(&udl->urbs.lock, flags); in udl_urb_completion()
145 wake_up(&udl->urbs.sleep); in udl_urb_completion()
150 struct udl_device *udl = to_udl(dev); in udl_free_urb_list() local
157 while (udl->urbs.count) { in udl_free_urb_list()
158 spin_lock_irq(&udl->urbs.lock); in udl_free_urb_list()
159 urb = udl_get_urb_locked(udl, MAX_SCHEDULE_TIMEOUT); in udl_free_urb_list()
160 udl->urbs.count--; in udl_free_urb_list()
161 spin_unlock_irq(&udl->urbs.lock); in udl_free_urb_list()
166 usb_free_coherent(urb->dev, udl->urbs.size, in udl_free_urb_list()
172 wake_up_all(&udl->urbs.sleep); in udl_free_urb_list()
177 struct udl_device *udl = to_udl(dev); in udl_alloc_urb_list() local
182 struct usb_device *udev = udl_to_usb_device(udl); in udl_alloc_urb_list()
184 spin_lock_init(&udl->urbs.lock); in udl_alloc_urb_list()
185 INIT_LIST_HEAD(&udl->urbs.list); in udl_alloc_urb_list()
186 init_waitqueue_head(&udl->urbs.sleep); in udl_alloc_urb_list()
187 udl->urbs.count = 0; in udl_alloc_urb_list()
188 udl->urbs.available = 0; in udl_alloc_urb_list()
191 udl->urbs.size = size; in udl_alloc_urb_list()
193 while (udl->urbs.count * size < wanted_size) { in udl_alloc_urb_list()
197 unode->dev = udl; in udl_alloc_urb_list()
224 list_add_tail(&unode->entry, &udl->urbs.list); in udl_alloc_urb_list()
226 udl->urbs.count++; in udl_alloc_urb_list()
227 udl->urbs.available++; in udl_alloc_urb_list()
230 DRM_DEBUG("allocated %d %d byte urbs\n", udl->urbs.count, (int) size); in udl_alloc_urb_list()
232 return udl->urbs.count; in udl_alloc_urb_list()
235 static struct urb *udl_get_urb_locked(struct udl_device *udl, long timeout) in udl_get_urb_locked() argument
239 assert_spin_locked(&udl->urbs.lock); in udl_get_urb_locked()
242 if (!wait_event_lock_irq_timeout(udl->urbs.sleep, in udl_get_urb_locked()
243 !udl->urbs.count || in udl_get_urb_locked()
244 !list_empty(&udl->urbs.list), in udl_get_urb_locked()
245 udl->urbs.lock, timeout)) { in udl_get_urb_locked()
247 udl->urbs.available); in udl_get_urb_locked()
251 if (!udl->urbs.count) in udl_get_urb_locked()
254 unode = list_first_entry(&udl->urbs.list, struct urb_node, entry); in udl_get_urb_locked()
256 udl->urbs.available--; in udl_get_urb_locked()
264 struct udl_device *udl = to_udl(dev); in udl_get_urb() local
267 spin_lock_irq(&udl->urbs.lock); in udl_get_urb()
268 urb = udl_get_urb_locked(udl, GET_URB_TIMEOUT); in udl_get_urb()
269 spin_unlock_irq(&udl->urbs.lock); in udl_get_urb()
275 struct udl_device *udl = to_udl(dev); in udl_submit_urb() local
278 if (WARN_ON(len > udl->urbs.size)) { in udl_submit_urb()
295 struct udl_device *udl = to_udl(dev); in udl_sync_pending_urbs() local
297 spin_lock_irq(&udl->urbs.lock); in udl_sync_pending_urbs()
299 if (!wait_event_lock_irq_timeout(udl->urbs.sleep, in udl_sync_pending_urbs()
300 udl->urbs.available == udl->urbs.count, in udl_sync_pending_urbs()
301 udl->urbs.lock, in udl_sync_pending_urbs()
304 spin_unlock_irq(&udl->urbs.lock); in udl_sync_pending_urbs()
307 int udl_init(struct udl_device *udl) in udl_init() argument
309 struct drm_device *dev = &udl->drm; in udl_init()
314 udl->dmadev = usb_intf_get_dma_device(to_usb_interface(dev->dev)); in udl_init()
315 if (!udl->dmadev) in udl_init()
318 mutex_init(&udl->gem_lock); in udl_init()
320 if (!udl_parse_vendor_descriptor(udl)) { in udl_init()
326 if (udl_select_std_channel(udl)) in udl_init()
344 if (udl->urbs.count) in udl_init()
346 put_device(udl->dmadev); in udl_init()
353 struct udl_device *udl = to_udl(dev); in udl_drop_usb() local
356 put_device(udl->dmadev); in udl_drop_usb()
357 udl->dmadev = NULL; in udl_drop_usb()