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;