linux/include/video/udlfb.h
<<
>>
Prefs
   1#ifndef UDLFB_H
   2#define UDLFB_H
   3
   4/*
   5 * TODO: Propose standard fb.h ioctl for reporting damage,
   6 * using _IOWR() and one of the existing area structs from fb.h
   7 * Consider these ioctls deprecated, but they're still used by the
   8 * DisplayLink X server as yet - need both to be modified in tandem
   9 * when new ioctl(s) are ready.
  10 */
  11#define DLFB_IOCTL_RETURN_EDID   0xAD
  12#define DLFB_IOCTL_REPORT_DAMAGE 0xAA
  13struct dloarea {
  14        int x, y;
  15        int w, h;
  16        int x2, y2;
  17};
  18
  19struct urb_node {
  20        struct list_head entry;
  21        struct dlfb_data *dev;
  22        struct delayed_work release_urb_work;
  23        struct urb *urb;
  24};
  25
  26struct urb_list {
  27        struct list_head list;
  28        spinlock_t lock;
  29        struct semaphore limit_sem;
  30        int available;
  31        int count;
  32        size_t size;
  33};
  34
  35struct dlfb_data {
  36        struct usb_device *udev;
  37        struct device *gdev; /* &udev->dev */
  38        struct fb_info *info;
  39        struct urb_list urbs;
  40        struct kref kref;
  41        char *backing_buffer;
  42        int fb_count;
  43        bool virtualized; /* true when physical usb device not present */
  44        struct delayed_work init_framebuffer_work;
  45        struct delayed_work free_framebuffer_work;
  46        atomic_t usb_active; /* 0 = update virtual buffer, but no usb traffic */
  47        atomic_t lost_pixels; /* 1 = a render op failed. Need screen refresh */
  48        char *edid; /* null until we read edid from hw or get from sysfs */
  49        size_t edid_size;
  50        int sku_pixel_limit;
  51        int base16;
  52        int base8;
  53        u32 pseudo_palette[256];
  54        int blank_mode; /*one of FB_BLANK_ */
  55        /* blit-only rendering path metrics, exposed through sysfs */
  56        atomic_t bytes_rendered; /* raw pixel-bytes driver asked to render */
  57        atomic_t bytes_identical; /* saved effort with backbuffer comparison */
  58        atomic_t bytes_sent; /* to usb, after compression including overhead */
  59        atomic_t cpu_kcycles_used; /* transpired during pixel processing */
  60};
  61
  62#define NR_USB_REQUEST_I2C_SUB_IO 0x02
  63#define NR_USB_REQUEST_CHANNEL 0x12
  64
  65/* -BULK_SIZE as per usb-skeleton. Can we get full page and avoid overhead? */
  66#define BULK_SIZE 512
  67#define MAX_TRANSFER (PAGE_SIZE*16 - BULK_SIZE)
  68#define WRITES_IN_FLIGHT (4)
  69
  70#define MAX_VENDOR_DESCRIPTOR_SIZE 256
  71
  72#define GET_URB_TIMEOUT HZ
  73#define FREE_URB_TIMEOUT (HZ*2)
  74
  75#define BPP                     2
  76#define MAX_CMD_PIXELS          255
  77
  78#define RLX_HEADER_BYTES        7
  79#define MIN_RLX_PIX_BYTES       4
  80#define MIN_RLX_CMD_BYTES       (RLX_HEADER_BYTES + MIN_RLX_PIX_BYTES)
  81
  82#define RLE_HEADER_BYTES        6
  83#define MIN_RLE_PIX_BYTES       3
  84#define MIN_RLE_CMD_BYTES       (RLE_HEADER_BYTES + MIN_RLE_PIX_BYTES)
  85
  86#define RAW_HEADER_BYTES        6
  87#define MIN_RAW_PIX_BYTES       2
  88#define MIN_RAW_CMD_BYTES       (RAW_HEADER_BYTES + MIN_RAW_PIX_BYTES)
  89
  90#define DL_DEFIO_WRITE_DELAY    5 /* fb_deferred_io.delay in jiffies */
  91#define DL_DEFIO_WRITE_DISABLE  (HZ*60) /* "disable" with long delay */
  92
  93/* remove these once align.h patch is taken into kernel */
  94#define DL_ALIGN_UP(x, a) ALIGN(x, a)
  95#define DL_ALIGN_DOWN(x, a) ALIGN(x-(a-1), a)
  96
  97#endif
  98