2009-06-04 01:47:00 +04:00
# ifndef UDLFB_H
# define UDLFB_H
2009-06-04 01:03:06 +04:00
2010-02-15 17:46:21 +03:00
/*
* TODO : Propose standard fb . h ioctl for reporting damage ,
* using _IOWR ( ) and one of the existing area structs from fb . h
* Consider these ioctls deprecated , but they ' re still used by the
* DisplayLink X server as yet - need both to be modified in tandem
* when new ioctl ( s ) are ready .
*/
# define DLFB_IOCTL_RETURN_EDID 0xAD
# define DLFB_IOCTL_REPORT_DAMAGE 0xAA
struct dloarea {
int x , y ;
int w , h ;
int x2 , y2 ;
} ;
2009-06-04 01:03:06 +04:00
2010-02-15 17:45:55 +03:00
struct urb_node {
struct list_head entry ;
struct dlfb_data * dev ;
2010-09-06 05:28:29 +04:00
struct delayed_work release_urb_work ;
2010-02-15 17:45:55 +03:00
struct urb * urb ;
} ;
struct urb_list {
struct list_head list ;
spinlock_t lock ;
struct semaphore limit_sem ;
int available ;
int count ;
size_t size ;
} ;
2009-06-04 01:03:06 +04:00
struct dlfb_data {
struct usb_device * udev ;
2010-02-15 17:45:55 +03:00
struct device * gdev ; /* &udev->dev */
2009-06-04 01:03:06 +04:00
struct fb_info * info ;
2010-02-15 17:45:55 +03:00
struct urb_list urbs ;
struct kref kref ;
2009-06-04 01:03:06 +04:00
char * backing_buffer ;
2010-02-15 17:46:08 +03:00
int fb_count ;
2010-09-06 03:35:19 +04:00
bool virtualized ; /* true when physical usb device not present */
2012-03-02 05:35:48 +04:00
struct delayed_work init_framebuffer_work ;
2010-09-06 03:35:19 +04:00
struct delayed_work free_framebuffer_work ;
2010-02-15 17:46:08 +03:00
atomic_t usb_active ; /* 0 = update virtual buffer, but no usb traffic */
2010-02-15 17:45:55 +03:00
atomic_t lost_pixels ; /* 1 = a render op failed. Need screen refresh */
2010-09-06 03:35:23 +04:00
char * edid ; /* null until we read edid from hw or get from sysfs */
size_t edid_size ;
2010-02-15 17:46:08 +03:00
int sku_pixel_limit ;
2009-06-04 01:03:06 +04:00
int base16 ;
int base8 ;
2009-11-25 02:52:21 +03:00
u32 pseudo_palette [ 256 ] ;
2011-08-22 00:34:11 +04:00
int blank_mode ; /*one of FB_BLANK_ */
2010-02-15 17:46:08 +03:00
/* blit-only rendering path metrics, exposed through sysfs */
atomic_t bytes_rendered ; /* raw pixel-bytes driver asked to render */
atomic_t bytes_identical ; /* saved effort with backbuffer comparison */
atomic_t bytes_sent ; /* to usb, after compression including overhead */
atomic_t cpu_kcycles_used ; /* transpired during pixel processing */
2009-06-04 01:03:06 +04:00
} ;
2010-02-15 17:45:49 +03:00
# define NR_USB_REQUEST_I2C_SUB_IO 0x02
# define NR_USB_REQUEST_CHANNEL 0x12
2010-02-15 17:45:55 +03:00
/* -BULK_SIZE as per usb-skeleton. Can we get full page and avoid overhead? */
# define BULK_SIZE 512
# define MAX_TRANSFER (PAGE_SIZE*16 - BULK_SIZE)
# define WRITES_IN_FLIGHT (4)
2010-09-06 03:35:23 +04:00
# define MAX_VENDOR_DESCRIPTOR_SIZE 256
2010-02-15 17:45:55 +03:00
# define GET_URB_TIMEOUT HZ
# define FREE_URB_TIMEOUT (HZ*2)
2010-02-15 17:46:21 +03:00
# define BPP 2
# define MAX_CMD_PIXELS 255
2009-06-04 01:03:06 +04:00
2010-02-15 17:46:21 +03:00
# define RLX_HEADER_BYTES 7
# define MIN_RLX_PIX_BYTES 4
# define MIN_RLX_CMD_BYTES (RLX_HEADER_BYTES + MIN_RLX_PIX_BYTES)
2009-06-04 01:03:06 +04:00
2010-02-15 17:46:21 +03:00
# define RLE_HEADER_BYTES 6
# define MIN_RLE_PIX_BYTES 3
# define MIN_RLE_CMD_BYTES (RLE_HEADER_BYTES + MIN_RLE_PIX_BYTES)
2009-06-04 01:03:06 +04:00
2010-02-15 17:46:21 +03:00
# define RAW_HEADER_BYTES 6
# define MIN_RAW_PIX_BYTES 2
# define MIN_RAW_CMD_BYTES (RAW_HEADER_BYTES + MIN_RAW_PIX_BYTES)
2009-06-04 01:03:06 +04:00
2010-09-06 05:28:29 +04:00
# define DL_DEFIO_WRITE_DELAY 5 /* fb_deferred_io.delay in jiffies */
# define DL_DEFIO_WRITE_DISABLE (HZ*60) /* "disable" with long delay */
2010-02-15 17:46:21 +03:00
/* remove these once align.h patch is taken into kernel */
# define DL_ALIGN_UP(x, a) ALIGN(x, a)
# define DL_ALIGN_DOWN(x, a) ALIGN(x-(a-1), a)
2009-06-04 01:47:00 +04:00
# endif