dlfb               77 drivers/video/fbdev/udlfb.c static int dlfb_realloc_framebuffer(struct dlfb_data *dlfb, struct fb_info *info, u32 new_len);
dlfb               81 drivers/video/fbdev/udlfb.c static struct urb *dlfb_get_urb(struct dlfb_data *dlfb);
dlfb               82 drivers/video/fbdev/udlfb.c static int dlfb_submit_urb(struct dlfb_data *dlfb, struct urb * urb, size_t len);
dlfb               83 drivers/video/fbdev/udlfb.c static int dlfb_alloc_urb_list(struct dlfb_data *dlfb, int count, size_t size);
dlfb               84 drivers/video/fbdev/udlfb.c static void dlfb_free_urb_list(struct dlfb_data *dlfb);
dlfb              279 drivers/video/fbdev/udlfb.c static int dlfb_set_video_mode(struct dlfb_data *dlfb,
dlfb              288 drivers/video/fbdev/udlfb.c 	if (!atomic_read(&dlfb->usb_active))
dlfb              291 drivers/video/fbdev/udlfb.c 	urb = dlfb_get_urb(dlfb);
dlfb              307 drivers/video/fbdev/udlfb.c 	wrptr = dlfb_set_base8bpp(wrptr, dlfb->info->fix.smem_len);
dlfb              315 drivers/video/fbdev/udlfb.c 	retval = dlfb_submit_urb(dlfb, urb, writesize);
dlfb              317 drivers/video/fbdev/udlfb.c 	dlfb->blank_mode = FB_BLANK_UNBLANK;
dlfb              535 drivers/video/fbdev/udlfb.c static int dlfb_render_hline(struct dlfb_data *dlfb, struct urb **urb_ptr,
dlfb              541 drivers/video/fbdev/udlfb.c 	u32 dev_addr = dlfb->base16 + byte_offset;
dlfb              551 drivers/video/fbdev/udlfb.c 	if (dlfb->backing_buffer) {
dlfb              553 drivers/video/fbdev/udlfb.c 		const u8 *back_start = (u8 *) (dlfb->backing_buffer
dlfb              577 drivers/video/fbdev/udlfb.c 			if (dlfb_submit_urb(dlfb, urb, len))
dlfb              580 drivers/video/fbdev/udlfb.c 			urb = dlfb_get_urb(dlfb);
dlfb              594 drivers/video/fbdev/udlfb.c static int dlfb_handle_damage(struct dlfb_data *dlfb, int x, int y, int width, int height)
dlfb              606 drivers/video/fbdev/udlfb.c 	mutex_lock(&dlfb->render_mutex);
dlfb              613 drivers/video/fbdev/udlfb.c 	    (x + width > dlfb->info->var.xres) ||
dlfb              614 drivers/video/fbdev/udlfb.c 	    (y + height > dlfb->info->var.yres)) {
dlfb              619 drivers/video/fbdev/udlfb.c 	if (!atomic_read(&dlfb->usb_active)) {
dlfb              624 drivers/video/fbdev/udlfb.c 	urb = dlfb_get_urb(dlfb);
dlfb              632 drivers/video/fbdev/udlfb.c 		const int line_offset = dlfb->info->fix.line_length * i;
dlfb              635 drivers/video/fbdev/udlfb.c 		if (dlfb_render_hline(dlfb, &urb,
dlfb              636 drivers/video/fbdev/udlfb.c 				      (char *) dlfb->info->fix.smem_start,
dlfb              648 drivers/video/fbdev/udlfb.c 		dlfb_submit_urb(dlfb, urb, len);
dlfb              654 drivers/video/fbdev/udlfb.c 	atomic_add(bytes_sent, &dlfb->bytes_sent);
dlfb              655 drivers/video/fbdev/udlfb.c 	atomic_add(bytes_identical, &dlfb->bytes_identical);
dlfb              656 drivers/video/fbdev/udlfb.c 	atomic_add(width*height*2, &dlfb->bytes_rendered);
dlfb              660 drivers/video/fbdev/udlfb.c 		   &dlfb->cpu_kcycles_used);
dlfb              665 drivers/video/fbdev/udlfb.c 	mutex_unlock(&dlfb->render_mutex);
dlfb              669 drivers/video/fbdev/udlfb.c static void dlfb_init_damage(struct dlfb_data *dlfb)
dlfb              671 drivers/video/fbdev/udlfb.c 	dlfb->damage_x = INT_MAX;
dlfb              672 drivers/video/fbdev/udlfb.c 	dlfb->damage_x2 = 0;
dlfb              673 drivers/video/fbdev/udlfb.c 	dlfb->damage_y = INT_MAX;
dlfb              674 drivers/video/fbdev/udlfb.c 	dlfb->damage_y2 = 0;
dlfb              679 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = container_of(w, struct dlfb_data, damage_work);
dlfb              682 drivers/video/fbdev/udlfb.c 	spin_lock_irq(&dlfb->damage_lock);
dlfb              683 drivers/video/fbdev/udlfb.c 	x = dlfb->damage_x;
dlfb              684 drivers/video/fbdev/udlfb.c 	x2 = dlfb->damage_x2;
dlfb              685 drivers/video/fbdev/udlfb.c 	y = dlfb->damage_y;
dlfb              686 drivers/video/fbdev/udlfb.c 	y2 = dlfb->damage_y2;
dlfb              687 drivers/video/fbdev/udlfb.c 	dlfb_init_damage(dlfb);
dlfb              688 drivers/video/fbdev/udlfb.c 	spin_unlock_irq(&dlfb->damage_lock);
dlfb              691 drivers/video/fbdev/udlfb.c 		dlfb_handle_damage(dlfb, x, y, x2 - x, y2 - y);
dlfb              694 drivers/video/fbdev/udlfb.c static void dlfb_offload_damage(struct dlfb_data *dlfb, int x, int y, int width, int height)
dlfb              703 drivers/video/fbdev/udlfb.c 	spin_lock_irqsave(&dlfb->damage_lock, flags);
dlfb              704 drivers/video/fbdev/udlfb.c 	dlfb->damage_x = min(x, dlfb->damage_x);
dlfb              705 drivers/video/fbdev/udlfb.c 	dlfb->damage_x2 = max(x2, dlfb->damage_x2);
dlfb              706 drivers/video/fbdev/udlfb.c 	dlfb->damage_y = min(y, dlfb->damage_y);
dlfb              707 drivers/video/fbdev/udlfb.c 	dlfb->damage_y2 = max(y2, dlfb->damage_y2);
dlfb              708 drivers/video/fbdev/udlfb.c 	spin_unlock_irqrestore(&dlfb->damage_lock, flags);
dlfb              710 drivers/video/fbdev/udlfb.c 	schedule_work(&dlfb->damage_work);
dlfb              723 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb              733 drivers/video/fbdev/udlfb.c 		dlfb_handle_damage(dlfb, 0, start, info->var.xres,
dlfb              745 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb              749 drivers/video/fbdev/udlfb.c 	dlfb_offload_damage(dlfb, area->dx, area->dy,
dlfb              756 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb              760 drivers/video/fbdev/udlfb.c 	dlfb_offload_damage(dlfb, image->dx, image->dy,
dlfb              767 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb              771 drivers/video/fbdev/udlfb.c 	dlfb_offload_damage(dlfb, rect->dx, rect->dy, rect->width,
dlfb              786 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb              794 drivers/video/fbdev/udlfb.c 	mutex_lock(&dlfb->render_mutex);
dlfb              799 drivers/video/fbdev/udlfb.c 	if (!atomic_read(&dlfb->usb_active))
dlfb              804 drivers/video/fbdev/udlfb.c 	urb = dlfb_get_urb(dlfb);
dlfb              813 drivers/video/fbdev/udlfb.c 		if (dlfb_render_hline(dlfb, &urb, (char *) info->fix.smem_start,
dlfb              826 drivers/video/fbdev/udlfb.c 		dlfb_submit_urb(dlfb, urb, len);
dlfb              832 drivers/video/fbdev/udlfb.c 	atomic_add(bytes_sent, &dlfb->bytes_sent);
dlfb              833 drivers/video/fbdev/udlfb.c 	atomic_add(bytes_identical, &dlfb->bytes_identical);
dlfb              834 drivers/video/fbdev/udlfb.c 	atomic_add(bytes_rendered, &dlfb->bytes_rendered);
dlfb              838 drivers/video/fbdev/udlfb.c 		   &dlfb->cpu_kcycles_used);
dlfb              840 drivers/video/fbdev/udlfb.c 	mutex_unlock(&dlfb->render_mutex);
dlfb              843 drivers/video/fbdev/udlfb.c static int dlfb_get_edid(struct dlfb_data *dlfb, char *edid, int len)
dlfb              853 drivers/video/fbdev/udlfb.c 		ret = usb_control_msg(dlfb->udev,
dlfb              854 drivers/video/fbdev/udlfb.c 				      usb_rcvctrlpipe(dlfb->udev, 0), 0x02,
dlfb              858 drivers/video/fbdev/udlfb.c 			dev_err(&dlfb->udev->dev,
dlfb              875 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb              877 drivers/video/fbdev/udlfb.c 	if (!atomic_read(&dlfb->usb_active))
dlfb              883 drivers/video/fbdev/udlfb.c 		if (copy_to_user(edid, dlfb->edid, dlfb->edid_size))
dlfb              918 drivers/video/fbdev/udlfb.c 		dlfb_handle_damage(dlfb, area.x, area.y, area.w, area.h);
dlfb              958 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb              969 drivers/video/fbdev/udlfb.c 	if (dlfb->virtualized)
dlfb              972 drivers/video/fbdev/udlfb.c 	dlfb->fb_count++;
dlfb              991 drivers/video/fbdev/udlfb.c 		user, info, dlfb->fb_count);
dlfb              998 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb             1000 drivers/video/fbdev/udlfb.c 	cancel_work_sync(&dlfb->damage_work);
dlfb             1002 drivers/video/fbdev/udlfb.c 	mutex_destroy(&dlfb->render_mutex);
dlfb             1012 drivers/video/fbdev/udlfb.c 	while (!list_empty(&dlfb->deferred_free)) {
dlfb             1013 drivers/video/fbdev/udlfb.c 		struct dlfb_deferred_free *d = list_entry(dlfb->deferred_free.next, struct dlfb_deferred_free, list);
dlfb             1018 drivers/video/fbdev/udlfb.c 	vfree(dlfb->backing_buffer);
dlfb             1019 drivers/video/fbdev/udlfb.c 	kfree(dlfb->edid);
dlfb             1020 drivers/video/fbdev/udlfb.c 	usb_put_dev(dlfb->udev);
dlfb             1021 drivers/video/fbdev/udlfb.c 	kfree(dlfb);
dlfb             1032 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb             1034 drivers/video/fbdev/udlfb.c 	dlfb->fb_count--;
dlfb             1036 drivers/video/fbdev/udlfb.c 	if ((dlfb->fb_count == 0) && (info->fbdefio)) {
dlfb             1043 drivers/video/fbdev/udlfb.c 	dev_dbg(info->dev, "release, user=%d count=%d\n", user, dlfb->fb_count);
dlfb             1052 drivers/video/fbdev/udlfb.c static int dlfb_is_valid_mode(struct fb_videomode *mode, struct dlfb_data *dlfb)
dlfb             1054 drivers/video/fbdev/udlfb.c 	if (mode->xres * mode->yres > dlfb->sku_pixel_limit)
dlfb             1076 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb             1083 drivers/video/fbdev/udlfb.c 	if (!dlfb_is_valid_mode(&mode, dlfb))
dlfb             1091 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb             1103 drivers/video/fbdev/udlfb.c 	if (!memcmp(&dlfb->current_mode, &fvs, sizeof(struct fb_var_screeninfo)))
dlfb             1106 drivers/video/fbdev/udlfb.c 	result = dlfb_realloc_framebuffer(dlfb, info, info->var.yres * line_length);
dlfb             1110 drivers/video/fbdev/udlfb.c 	result = dlfb_set_video_mode(dlfb, &info->var);
dlfb             1115 drivers/video/fbdev/udlfb.c 	dlfb->current_mode = fvs;
dlfb             1118 drivers/video/fbdev/udlfb.c 	if (dlfb->fb_count == 0) {
dlfb             1127 drivers/video/fbdev/udlfb.c 	dlfb_handle_damage(dlfb, 0, 0, info->var.xres, info->var.yres);
dlfb             1152 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = info->par;
dlfb             1157 drivers/video/fbdev/udlfb.c 		dlfb->blank_mode, blank_mode);
dlfb             1159 drivers/video/fbdev/udlfb.c 	if ((dlfb->blank_mode == FB_BLANK_POWERDOWN) &&
dlfb             1163 drivers/video/fbdev/udlfb.c 		dlfb_set_video_mode(dlfb, &info->var);
dlfb             1166 drivers/video/fbdev/udlfb.c 	urb = dlfb_get_urb(dlfb);
dlfb             1178 drivers/video/fbdev/udlfb.c 	dlfb_submit_urb(dlfb, urb, bufptr -
dlfb             1181 drivers/video/fbdev/udlfb.c 	dlfb->blank_mode = blank_mode;
dlfb             1205 drivers/video/fbdev/udlfb.c static void dlfb_deferred_vfree(struct dlfb_data *dlfb, void *mem)
dlfb             1211 drivers/video/fbdev/udlfb.c 	list_add(&d->list, &dlfb->deferred_free);
dlfb             1218 drivers/video/fbdev/udlfb.c static int dlfb_realloc_framebuffer(struct dlfb_data *dlfb, struct fb_info *info, u32 new_len)
dlfb             1240 drivers/video/fbdev/udlfb.c 			dlfb_deferred_vfree(dlfb, (void __force *)info->screen_base);
dlfb             1260 drivers/video/fbdev/udlfb.c 			dlfb_deferred_vfree(dlfb, dlfb->backing_buffer);
dlfb             1261 drivers/video/fbdev/udlfb.c 			dlfb->backing_buffer = new_back;
dlfb             1281 drivers/video/fbdev/udlfb.c static int dlfb_setup_modes(struct dlfb_data *dlfb,
dlfb             1314 drivers/video/fbdev/udlfb.c 		i = dlfb_get_edid(dlfb, edid, EDID_LENGTH);
dlfb             1320 drivers/video/fbdev/udlfb.c 			dlfb->edid = edid;
dlfb             1321 drivers/video/fbdev/udlfb.c 			dlfb->edid_size = i;
dlfb             1330 drivers/video/fbdev/udlfb.c 		if (dlfb->edid) {
dlfb             1331 drivers/video/fbdev/udlfb.c 			fb_edid_to_monspecs(dlfb->edid, &info->monspecs);
dlfb             1343 drivers/video/fbdev/udlfb.c 				dlfb->edid = edid;
dlfb             1344 drivers/video/fbdev/udlfb.c 				dlfb->edid_size = default_edid_size;
dlfb             1355 drivers/video/fbdev/udlfb.c 			if (dlfb_is_valid_mode(mode, dlfb)) {
dlfb             1384 drivers/video/fbdev/udlfb.c 			if (dlfb_is_valid_mode(mode, dlfb))
dlfb             1403 drivers/video/fbdev/udlfb.c 	if ((default_vmode != NULL) && (dlfb->fb_count == 0)) {
dlfb             1416 drivers/video/fbdev/udlfb.c 	if (edid && (dlfb->edid != edid))
dlfb             1428 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = fb_info->par;
dlfb             1430 drivers/video/fbdev/udlfb.c 			atomic_read(&dlfb->bytes_rendered));
dlfb             1436 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = fb_info->par;
dlfb             1438 drivers/video/fbdev/udlfb.c 			atomic_read(&dlfb->bytes_identical));
dlfb             1444 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = fb_info->par;
dlfb             1446 drivers/video/fbdev/udlfb.c 			atomic_read(&dlfb->bytes_sent));
dlfb             1452 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = fb_info->par;
dlfb             1454 drivers/video/fbdev/udlfb.c 			atomic_read(&dlfb->cpu_kcycles_used));
dlfb             1463 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = fb_info->par;
dlfb             1465 drivers/video/fbdev/udlfb.c 	if (dlfb->edid == NULL)
dlfb             1468 drivers/video/fbdev/udlfb.c 	if ((off >= dlfb->edid_size) || (count > dlfb->edid_size))
dlfb             1471 drivers/video/fbdev/udlfb.c 	if (off + count > dlfb->edid_size)
dlfb             1472 drivers/video/fbdev/udlfb.c 		count = dlfb->edid_size - off;
dlfb             1474 drivers/video/fbdev/udlfb.c 	memcpy(buf, dlfb->edid, count);
dlfb             1485 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = fb_info->par;
dlfb             1492 drivers/video/fbdev/udlfb.c 	ret = dlfb_setup_modes(dlfb, fb_info, src, src_size);
dlfb             1496 drivers/video/fbdev/udlfb.c 	if (!dlfb->edid || memcmp(src, dlfb->edid, src_size))
dlfb             1511 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = fb_info->par;
dlfb             1513 drivers/video/fbdev/udlfb.c 	atomic_set(&dlfb->bytes_rendered, 0);
dlfb             1514 drivers/video/fbdev/udlfb.c 	atomic_set(&dlfb->bytes_identical, 0);
dlfb             1515 drivers/video/fbdev/udlfb.c 	atomic_set(&dlfb->bytes_sent, 0);
dlfb             1516 drivers/video/fbdev/udlfb.c 	atomic_set(&dlfb->cpu_kcycles_used, 0);
dlfb             1540 drivers/video/fbdev/udlfb.c static int dlfb_select_std_channel(struct dlfb_data *dlfb)
dlfb             1555 drivers/video/fbdev/udlfb.c 	ret = usb_control_msg(dlfb->udev, usb_sndctrlpipe(dlfb->udev, 0),
dlfb             1565 drivers/video/fbdev/udlfb.c static int dlfb_parse_vendor_descriptor(struct dlfb_data *dlfb,
dlfb             1621 drivers/video/fbdev/udlfb.c 				dlfb->sku_pixel_limit = max_area;
dlfb             1650 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb;
dlfb             1656 drivers/video/fbdev/udlfb.c 	dlfb = kzalloc(sizeof(*dlfb), GFP_KERNEL);
dlfb             1657 drivers/video/fbdev/udlfb.c 	if (!dlfb) {
dlfb             1662 drivers/video/fbdev/udlfb.c 	INIT_LIST_HEAD(&dlfb->deferred_free);
dlfb             1664 drivers/video/fbdev/udlfb.c 	dlfb->udev = usb_get_dev(usbdev);
dlfb             1665 drivers/video/fbdev/udlfb.c 	usb_set_intfdata(intf, dlfb);
dlfb             1671 drivers/video/fbdev/udlfb.c 	dlfb->sku_pixel_limit = 2048 * 1152; /* default to maximum */
dlfb             1673 drivers/video/fbdev/udlfb.c 	if (!dlfb_parse_vendor_descriptor(dlfb, intf)) {
dlfb             1682 drivers/video/fbdev/udlfb.c 			 dlfb->sku_pixel_limit, pixel_limit);
dlfb             1683 drivers/video/fbdev/udlfb.c 		dlfb->sku_pixel_limit = pixel_limit;
dlfb             1688 drivers/video/fbdev/udlfb.c 	info = framebuffer_alloc(0, &dlfb->udev->dev);
dlfb             1692 drivers/video/fbdev/udlfb.c 	dlfb->info = info;
dlfb             1693 drivers/video/fbdev/udlfb.c 	info->par = dlfb;
dlfb             1694 drivers/video/fbdev/udlfb.c 	info->pseudo_palette = dlfb->pseudo_palette;
dlfb             1695 drivers/video/fbdev/udlfb.c 	dlfb->ops = dlfb_ops;
dlfb             1696 drivers/video/fbdev/udlfb.c 	info->fbops = &dlfb->ops;
dlfb             1698 drivers/video/fbdev/udlfb.c 	mutex_init(&dlfb->render_mutex);
dlfb             1699 drivers/video/fbdev/udlfb.c 	dlfb_init_damage(dlfb);
dlfb             1700 drivers/video/fbdev/udlfb.c 	spin_lock_init(&dlfb->damage_lock);
dlfb             1701 drivers/video/fbdev/udlfb.c 	INIT_WORK(&dlfb->damage_work, dlfb_damage_work);
dlfb             1705 drivers/video/fbdev/udlfb.c 	if (!dlfb_alloc_urb_list(dlfb, WRITES_IN_FLIGHT, MAX_TRANSFER)) {
dlfb             1719 drivers/video/fbdev/udlfb.c 	retval = dlfb_setup_modes(dlfb, info, NULL, 0);
dlfb             1728 drivers/video/fbdev/udlfb.c 	atomic_set(&dlfb->usb_active, 1);
dlfb             1729 drivers/video/fbdev/udlfb.c 	dlfb_select_std_channel(dlfb);
dlfb             1760 drivers/video/fbdev/udlfb.c 		 ((dlfb->backing_buffer) ?
dlfb             1765 drivers/video/fbdev/udlfb.c 	if (dlfb->info) {
dlfb             1766 drivers/video/fbdev/udlfb.c 		dlfb_ops_destroy(dlfb->info);
dlfb             1768 drivers/video/fbdev/udlfb.c 		usb_put_dev(dlfb->udev);
dlfb             1769 drivers/video/fbdev/udlfb.c 		kfree(dlfb);
dlfb             1776 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb;
dlfb             1780 drivers/video/fbdev/udlfb.c 	dlfb = usb_get_intfdata(intf);
dlfb             1781 drivers/video/fbdev/udlfb.c 	info = dlfb->info;
dlfb             1786 drivers/video/fbdev/udlfb.c 	dlfb->virtualized = true;
dlfb             1789 drivers/video/fbdev/udlfb.c 	atomic_set(&dlfb->usb_active, 0);
dlfb             1792 drivers/video/fbdev/udlfb.c 	dlfb_free_urb_list(dlfb);
dlfb             1814 drivers/video/fbdev/udlfb.c 	struct dlfb_data *dlfb = unode->dlfb;
dlfb             1827 drivers/video/fbdev/udlfb.c 		dev_err(&dlfb->udev->dev,
dlfb             1830 drivers/video/fbdev/udlfb.c 		atomic_set(&dlfb->lost_pixels, 1);
dlfb             1834 drivers/video/fbdev/udlfb.c 	urb->transfer_buffer_length = dlfb->urbs.size; /* reset to actual */
dlfb             1836 drivers/video/fbdev/udlfb.c 	spin_lock_irqsave(&dlfb->urbs.lock, flags);
dlfb             1837 drivers/video/fbdev/udlfb.c 	list_add_tail(&unode->entry, &dlfb->urbs.list);
dlfb             1838 drivers/video/fbdev/udlfb.c 	dlfb->urbs.available++;
dlfb             1839 drivers/video/fbdev/udlfb.c 	spin_unlock_irqrestore(&dlfb->urbs.lock, flags);
dlfb             1841 drivers/video/fbdev/udlfb.c 	up(&dlfb->urbs.limit_sem);
dlfb             1844 drivers/video/fbdev/udlfb.c static void dlfb_free_urb_list(struct dlfb_data *dlfb)
dlfb             1846 drivers/video/fbdev/udlfb.c 	int count = dlfb->urbs.count;
dlfb             1853 drivers/video/fbdev/udlfb.c 		down(&dlfb->urbs.limit_sem);
dlfb             1855 drivers/video/fbdev/udlfb.c 		spin_lock_irq(&dlfb->urbs.lock);
dlfb             1857 drivers/video/fbdev/udlfb.c 		node = dlfb->urbs.list.next; /* have reserved one with sem */
dlfb             1860 drivers/video/fbdev/udlfb.c 		spin_unlock_irq(&dlfb->urbs.lock);
dlfb             1866 drivers/video/fbdev/udlfb.c 		usb_free_coherent(urb->dev, dlfb->urbs.size,
dlfb             1872 drivers/video/fbdev/udlfb.c 	dlfb->urbs.count = 0;
dlfb             1875 drivers/video/fbdev/udlfb.c static int dlfb_alloc_urb_list(struct dlfb_data *dlfb, int count, size_t size)
dlfb             1882 drivers/video/fbdev/udlfb.c 	spin_lock_init(&dlfb->urbs.lock);
dlfb             1885 drivers/video/fbdev/udlfb.c 	dlfb->urbs.size = size;
dlfb             1886 drivers/video/fbdev/udlfb.c 	INIT_LIST_HEAD(&dlfb->urbs.list);
dlfb             1888 drivers/video/fbdev/udlfb.c 	sema_init(&dlfb->urbs.limit_sem, 0);
dlfb             1889 drivers/video/fbdev/udlfb.c 	dlfb->urbs.count = 0;
dlfb             1890 drivers/video/fbdev/udlfb.c 	dlfb->urbs.available = 0;
dlfb             1892 drivers/video/fbdev/udlfb.c 	while (dlfb->urbs.count * size < wanted_size) {
dlfb             1896 drivers/video/fbdev/udlfb.c 		unode->dlfb = dlfb;
dlfb             1905 drivers/video/fbdev/udlfb.c 		buf = usb_alloc_coherent(dlfb->udev, size, GFP_KERNEL,
dlfb             1912 drivers/video/fbdev/udlfb.c 				dlfb_free_urb_list(dlfb);
dlfb             1919 drivers/video/fbdev/udlfb.c 		usb_fill_bulk_urb(urb, dlfb->udev, usb_sndbulkpipe(dlfb->udev, 1),
dlfb             1923 drivers/video/fbdev/udlfb.c 		list_add_tail(&unode->entry, &dlfb->urbs.list);
dlfb             1925 drivers/video/fbdev/udlfb.c 		up(&dlfb->urbs.limit_sem);
dlfb             1926 drivers/video/fbdev/udlfb.c 		dlfb->urbs.count++;
dlfb             1927 drivers/video/fbdev/udlfb.c 		dlfb->urbs.available++;
dlfb             1930 drivers/video/fbdev/udlfb.c 	return dlfb->urbs.count;
dlfb             1933 drivers/video/fbdev/udlfb.c static struct urb *dlfb_get_urb(struct dlfb_data *dlfb)
dlfb             1940 drivers/video/fbdev/udlfb.c 	ret = down_timeout(&dlfb->urbs.limit_sem, GET_URB_TIMEOUT);
dlfb             1942 drivers/video/fbdev/udlfb.c 		atomic_set(&dlfb->lost_pixels, 1);
dlfb             1943 drivers/video/fbdev/udlfb.c 		dev_warn(&dlfb->udev->dev,
dlfb             1945 drivers/video/fbdev/udlfb.c 			 ret, dlfb->urbs.available);
dlfb             1949 drivers/video/fbdev/udlfb.c 	spin_lock_irq(&dlfb->urbs.lock);
dlfb             1951 drivers/video/fbdev/udlfb.c 	BUG_ON(list_empty(&dlfb->urbs.list)); /* reserved one with limit_sem */
dlfb             1952 drivers/video/fbdev/udlfb.c 	entry = dlfb->urbs.list.next;
dlfb             1954 drivers/video/fbdev/udlfb.c 	dlfb->urbs.available--;
dlfb             1956 drivers/video/fbdev/udlfb.c 	spin_unlock_irq(&dlfb->urbs.lock);
dlfb             1962 drivers/video/fbdev/udlfb.c static int dlfb_submit_urb(struct dlfb_data *dlfb, struct urb *urb, size_t len)
dlfb             1966 drivers/video/fbdev/udlfb.c 	BUG_ON(len > dlfb->urbs.size);
dlfb             1972 drivers/video/fbdev/udlfb.c 		atomic_set(&dlfb->lost_pixels, 1);
dlfb             1973 drivers/video/fbdev/udlfb.c 		dev_err(&dlfb->udev->dev, "submit urb error: %d\n", ret);
dlfb               22 include/video/udlfb.h 	struct dlfb_data *dlfb;