brintos

brintos / linux-shallow public Read only

0
0
Text · 2.9 KiB · 58fb573 Raw
104 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef UDLFB_H3#define UDLFB_H4 5/*6 * TODO: Propose standard fb.h ioctl for reporting damage,7 * using _IOWR() and one of the existing area structs from fb.h8 * Consider these ioctls deprecated, but they're still used by the9 * DisplayLink X server as yet - need both to be modified in tandem10 * when new ioctl(s) are ready.11 */12#define DLFB_IOCTL_RETURN_EDID	 0xAD13#define DLFB_IOCTL_REPORT_DAMAGE 0xAA14struct dloarea {15	int x, y;16	int w, h;17	int x2, y2;18};19 20struct urb_node {21	struct list_head entry;22	struct dlfb_data *dlfb;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 fb_info *info;38	struct urb_list urbs;39	char *backing_buffer;40	int fb_count;41	bool virtualized; /* true when physical usb device not present */42	atomic_t usb_active; /* 0 = update virtual buffer, but no usb traffic */43	atomic_t lost_pixels; /* 1 = a render op failed. Need screen refresh */44	char *edid; /* null until we read edid from hw or get from sysfs */45	size_t edid_size;46	int sku_pixel_limit;47	int base16;48	int base8;49	u32 pseudo_palette[256];50	int blank_mode; /*one of FB_BLANK_ */51	struct mutex render_mutex;52	int damage_x;53	int damage_y;54	int damage_x2;55	int damage_y2;56	spinlock_t damage_lock;57	struct work_struct damage_work;58	struct fb_ops ops;59	/* blit-only rendering path metrics, exposed through sysfs */60	atomic_t bytes_rendered; /* raw pixel-bytes driver asked to render */61	atomic_t bytes_identical; /* saved effort with backbuffer comparison */62	atomic_t bytes_sent; /* to usb, after compression including overhead */63	atomic_t cpu_kcycles_used; /* transpired during pixel processing */64	struct fb_var_screeninfo current_mode;65	struct list_head deferred_free;66};67 68#define NR_USB_REQUEST_I2C_SUB_IO 0x0269#define NR_USB_REQUEST_CHANNEL 0x1270 71/* -BULK_SIZE as per usb-skeleton. Can we get full page and avoid overhead? */72#define BULK_SIZE 51273#define MAX_TRANSFER (PAGE_SIZE*16 - BULK_SIZE)74#define WRITES_IN_FLIGHT (4)75 76#define MAX_VENDOR_DESCRIPTOR_SIZE 25677 78#define GET_URB_TIMEOUT	HZ79#define FREE_URB_TIMEOUT (HZ*2)80 81#define BPP                     282#define MAX_CMD_PIXELS		25583 84#define RLX_HEADER_BYTES	785#define MIN_RLX_PIX_BYTES       486#define MIN_RLX_CMD_BYTES	(RLX_HEADER_BYTES + MIN_RLX_PIX_BYTES)87 88#define RLE_HEADER_BYTES	689#define MIN_RLE_PIX_BYTES	390#define MIN_RLE_CMD_BYTES	(RLE_HEADER_BYTES + MIN_RLE_PIX_BYTES)91 92#define RAW_HEADER_BYTES	693#define MIN_RAW_PIX_BYTES	294#define MIN_RAW_CMD_BYTES	(RAW_HEADER_BYTES + MIN_RAW_PIX_BYTES)95 96#define DL_DEFIO_WRITE_DELAY    msecs_to_jiffies(HZ <= 300 ? 4 : 10) /* optimal value for 720p video */97#define DL_DEFIO_WRITE_DISABLE  (HZ*60) /* "disable" with long delay */98 99/* remove these once align.h patch is taken into kernel */100#define DL_ALIGN_UP(x, a) ALIGN(x, a)101#define DL_ALIGN_DOWN(x, a) ALIGN_DOWN(x, a)102 103#endif104