xref: /openbmc/u-boot/include/linux/fb.h (revision daab59ac05d8fd1092e34a4c695ac265ae700141)
1bf90ecd3SStefano Babic #ifndef _LINUX_FB_H
2bf90ecd3SStefano Babic #define _LINUX_FB_H
3bf90ecd3SStefano Babic 
4bf90ecd3SStefano Babic #include <linux/types.h>
5ce0f28faSOtavio Salvador #include <linux/list.h>
6bf90ecd3SStefano Babic 
7bf90ecd3SStefano Babic /* Definitions of frame buffers						*/
8bf90ecd3SStefano Babic 
9bf90ecd3SStefano Babic #define FB_MAX			32	/* sufficient for now */
10bf90ecd3SStefano Babic 
11bf90ecd3SStefano Babic #define FB_TYPE_PACKED_PIXELS		0	/* Packed Pixels	*/
12bf90ecd3SStefano Babic 
13bf90ecd3SStefano Babic #define FB_VISUAL_MONO01		0	/* Monochr. 1=Black 0=White */
14bf90ecd3SStefano Babic #define FB_VISUAL_MONO10		1	/* Monochr. 1=White 0=Black */
15bf90ecd3SStefano Babic #define FB_VISUAL_TRUECOLOR		2	/* True color	*/
16bf90ecd3SStefano Babic #define FB_VISUAL_PSEUDOCOLOR		3	/* Pseudo color (like atari) */
17bf90ecd3SStefano Babic #define FB_VISUAL_DIRECTCOLOR		4	/* Direct color */
18bf90ecd3SStefano Babic #define FB_VISUAL_STATIC_PSEUDOCOLOR	5	/* Pseudo color readonly */
19bf90ecd3SStefano Babic 
20bf90ecd3SStefano Babic #define FB_ACCEL_NONE		0	/* no hardware accelerator	*/
21bf90ecd3SStefano Babic 
22bf90ecd3SStefano Babic struct fb_fix_screeninfo {
23bf90ecd3SStefano Babic 	char id[16];			/* identification string eg "TT Builtin" */
24bf90ecd3SStefano Babic 	unsigned long smem_start;	/* Start of frame buffer mem */
25bf90ecd3SStefano Babic 					/* (physical address) */
26bf90ecd3SStefano Babic 	__u32 smem_len;			/* Length of frame buffer mem */
27bf90ecd3SStefano Babic 	__u32 type;			/* see FB_TYPE_*		*/
28bf90ecd3SStefano Babic 	__u32 type_aux;			/* Interleave for interleaved Planes */
29bf90ecd3SStefano Babic 	__u32 visual;			/* see FB_VISUAL_*		*/
30bf90ecd3SStefano Babic 	__u16 xpanstep;			/* zero if no hardware panning	*/
31bf90ecd3SStefano Babic 	__u16 ypanstep;			/* zero if no hardware panning	*/
32bf90ecd3SStefano Babic 	__u16 ywrapstep;		/* zero if no hardware ywrap	*/
33bf90ecd3SStefano Babic 	__u32 line_length;		/* length of a line in bytes	*/
34bf90ecd3SStefano Babic 	unsigned long mmio_start;	/* Start of Memory Mapped I/O	*/
35bf90ecd3SStefano Babic 					/* (physical address) */
36bf90ecd3SStefano Babic 	__u32 mmio_len;			/* Length of Memory Mapped I/O	*/
37bf90ecd3SStefano Babic 	__u32 accel;			/* Indicate to driver which	*/
38bf90ecd3SStefano Babic 					/*  specific chip/card we have	*/
39bf90ecd3SStefano Babic 	__u16 reserved[3];		/* Reserved for future compatibility */
40bf90ecd3SStefano Babic };
41bf90ecd3SStefano Babic 
42bf90ecd3SStefano Babic /*
43bf90ecd3SStefano Babic  * Interpretation of offset for color fields: All offsets are from the right,
44bf90ecd3SStefano Babic  * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
45bf90ecd3SStefano Babic  * can use the offset as right argument to <<). A pixel afterwards is a bit
46bf90ecd3SStefano Babic  * stream and is written to video memory as that unmodified.
47bf90ecd3SStefano Babic  *
48bf90ecd3SStefano Babic  * For pseudocolor: offset and length should be the same for all color
49bf90ecd3SStefano Babic  * components. Offset specifies the position of the least significant bit
50bf90ecd3SStefano Babic  * of the pallette index in a pixel value. Length indicates the number
51bf90ecd3SStefano Babic  * of available palette entries (i.e. # of entries = 1 << length).
52bf90ecd3SStefano Babic  */
53bf90ecd3SStefano Babic struct fb_bitfield {
54bf90ecd3SStefano Babic 	__u32 offset;			/* beginning of bitfield	*/
55bf90ecd3SStefano Babic 	__u32 length;			/* length of bitfield		*/
56bf90ecd3SStefano Babic 	__u32 msb_right;
57bf90ecd3SStefano Babic 
58bf90ecd3SStefano Babic };
59bf90ecd3SStefano Babic 
60bf90ecd3SStefano Babic #define FB_NONSTD_HAM		1	/* Hold-And-Modify (HAM)	*/
61bf90ecd3SStefano Babic #define FB_NONSTD_REV_PIX_IN_B	2	/* order of pixels in each byte is reversed */
62bf90ecd3SStefano Babic 
63bf90ecd3SStefano Babic #define FB_ACTIVATE_NOW		0	/* set values immediately (or vbl)*/
64bf90ecd3SStefano Babic #define FB_ACTIVATE_NXTOPEN	1	/* activate on next open	*/
65bf90ecd3SStefano Babic #define FB_ACTIVATE_TEST	2	/* don't set, round up impossible */
66bf90ecd3SStefano Babic #define FB_ACTIVATE_MASK       15
67bf90ecd3SStefano Babic 					/* values			*/
68bf90ecd3SStefano Babic #define FB_ACTIVATE_VBL	       16	/* activate values on next vbl	*/
69bf90ecd3SStefano Babic #define FB_CHANGE_CMAP_VBL     32	/* change colormap on vbl	*/
70bf90ecd3SStefano Babic #define FB_ACTIVATE_ALL	       64	/* change all VCs on this fb	*/
71bf90ecd3SStefano Babic #define FB_ACTIVATE_FORCE     128	/* force apply even when no change*/
72bf90ecd3SStefano Babic #define FB_ACTIVATE_INV_MODE  256	/* invalidate videomode */
73bf90ecd3SStefano Babic 
74bf90ecd3SStefano Babic #define FB_SYNC_HOR_HIGH_ACT	1	/* horizontal sync high active	*/
75bf90ecd3SStefano Babic #define FB_SYNC_VERT_HIGH_ACT	2	/* vertical sync high active	*/
76bf90ecd3SStefano Babic #define FB_SYNC_EXT		4	/* external sync		*/
77bf90ecd3SStefano Babic #define FB_SYNC_COMP_HIGH_ACT	8	/* composite sync high active	*/
78bf90ecd3SStefano Babic #define FB_SYNC_BROADCAST	16	/* broadcast video timings	*/
79bf90ecd3SStefano Babic 					/* vtotal = 144d/288n/576i => PAL  */
80bf90ecd3SStefano Babic 					/* vtotal = 121d/242n/484i => NTSC */
81bf90ecd3SStefano Babic #define FB_SYNC_ON_GREEN	32	/* sync on green */
82bf90ecd3SStefano Babic 
83bf90ecd3SStefano Babic #define FB_VMODE_NONINTERLACED	0	/* non interlaced */
84bf90ecd3SStefano Babic #define FB_VMODE_INTERLACED	1	/* interlaced	*/
85bf90ecd3SStefano Babic #define FB_VMODE_DOUBLE		2	/* double scan */
86bf90ecd3SStefano Babic #define FB_VMODE_ODD_FLD_FIRST	4	/* interlaced: top line first */
87bf90ecd3SStefano Babic #define FB_VMODE_MASK		255
88bf90ecd3SStefano Babic 
89bf90ecd3SStefano Babic #define FB_VMODE_YWRAP		256	/* ywrap instead of panning	*/
90bf90ecd3SStefano Babic #define FB_VMODE_SMOOTH_XPAN	512	/* smooth xpan possible (internally used) */
91bf90ecd3SStefano Babic #define FB_VMODE_CONUPDATE	512	/* don't update x/yoffset	*/
92bf90ecd3SStefano Babic 
93bf90ecd3SStefano Babic /*
94bf90ecd3SStefano Babic  * Display rotation support
95bf90ecd3SStefano Babic  */
96bf90ecd3SStefano Babic #define FB_ROTATE_UR	  0
97bf90ecd3SStefano Babic #define FB_ROTATE_CW	  1
98bf90ecd3SStefano Babic #define FB_ROTATE_UD	  2
99bf90ecd3SStefano Babic #define FB_ROTATE_CCW	  3
100bf90ecd3SStefano Babic 
101bf90ecd3SStefano Babic #define PICOS2KHZ(a) (1000000000UL/(a))
102bf90ecd3SStefano Babic #define KHZ2PICOS(a) (1000000000UL/(a))
103bf90ecd3SStefano Babic 
104bf90ecd3SStefano Babic struct fb_var_screeninfo {
105bf90ecd3SStefano Babic 	__u32 xres;			/* visible resolution		*/
106bf90ecd3SStefano Babic 	__u32 yres;
107bf90ecd3SStefano Babic 	__u32 xres_virtual;		/* virtual resolution		*/
108bf90ecd3SStefano Babic 	__u32 yres_virtual;
109bf90ecd3SStefano Babic 	__u32 xoffset;			/* offset from virtual to visible */
110bf90ecd3SStefano Babic 	__u32 yoffset;			/* resolution			*/
111bf90ecd3SStefano Babic 
112bf90ecd3SStefano Babic 	__u32 bits_per_pixel;		/* guess what			*/
113bf90ecd3SStefano Babic 	__u32 grayscale;		/* != 0 Graylevels instead of colors */
114bf90ecd3SStefano Babic 
115bf90ecd3SStefano Babic 	struct fb_bitfield red;		/* bitfield in fb mem if true color, */
116bf90ecd3SStefano Babic 	struct fb_bitfield green;	/* else only length is significant */
117bf90ecd3SStefano Babic 	struct fb_bitfield blue;
118bf90ecd3SStefano Babic 	struct fb_bitfield transp;	/* transparency			*/
119bf90ecd3SStefano Babic 
120bf90ecd3SStefano Babic 	__u32 nonstd;			/* != 0 Non standard pixel format */
121bf90ecd3SStefano Babic 
122bf90ecd3SStefano Babic 	__u32 activate;			/* see FB_ACTIVATE_*		*/
123bf90ecd3SStefano Babic 
124bf90ecd3SStefano Babic 	__u32 height;			/* height of picture in mm    */
125bf90ecd3SStefano Babic 	__u32 width;			/* width of picture in mm     */
126bf90ecd3SStefano Babic 
127bf90ecd3SStefano Babic 	__u32 accel_flags;		/* (OBSOLETE) see fb_info.flags */
128bf90ecd3SStefano Babic 
129bf90ecd3SStefano Babic 	/* Timing: All values in pixclocks, except pixclock (of course) */
130bf90ecd3SStefano Babic 	__u32 pixclock;			/* pixel clock in ps (pico seconds) */
131bf90ecd3SStefano Babic 	__u32 left_margin;		/* time from sync to picture	*/
132bf90ecd3SStefano Babic 	__u32 right_margin;		/* time from picture to sync	*/
133bf90ecd3SStefano Babic 	__u32 upper_margin;		/* time from sync to picture	*/
134bf90ecd3SStefano Babic 	__u32 lower_margin;
135bf90ecd3SStefano Babic 	__u32 hsync_len;		/* length of horizontal sync	*/
136bf90ecd3SStefano Babic 	__u32 vsync_len;		/* length of vertical sync	*/
137bf90ecd3SStefano Babic 	__u32 sync;			/* see FB_SYNC_*		*/
138bf90ecd3SStefano Babic 	__u32 vmode;			/* see FB_VMODE_*		*/
139bf90ecd3SStefano Babic 	__u32 rotate;			/* angle we rotate counter clockwise */
140bf90ecd3SStefano Babic 	__u32 reserved[5];		/* Reserved for future compatibility */
141bf90ecd3SStefano Babic };
142bf90ecd3SStefano Babic 
143bf90ecd3SStefano Babic struct fb_cmap {
144bf90ecd3SStefano Babic 	__u32 start;			/* First entry	*/
145bf90ecd3SStefano Babic 	__u32 len;			/* Number of entries */
146bf90ecd3SStefano Babic 	__u16 *red;			/* Red values	*/
147bf90ecd3SStefano Babic 	__u16 *green;
148bf90ecd3SStefano Babic 	__u16 *blue;
149bf90ecd3SStefano Babic 	__u16 *transp;			/* transparency, can be NULL */
150bf90ecd3SStefano Babic };
151bf90ecd3SStefano Babic 
152bf90ecd3SStefano Babic struct fb_con2fbmap {
153bf90ecd3SStefano Babic 	__u32 console;
154bf90ecd3SStefano Babic 	__u32 framebuffer;
155bf90ecd3SStefano Babic };
156bf90ecd3SStefano Babic 
157bf90ecd3SStefano Babic /* VESA Blanking Levels */
158bf90ecd3SStefano Babic #define VESA_NO_BLANKING	0
159bf90ecd3SStefano Babic #define VESA_VSYNC_SUSPEND	1
160bf90ecd3SStefano Babic #define VESA_HSYNC_SUSPEND	2
161bf90ecd3SStefano Babic #define VESA_POWERDOWN		3
162bf90ecd3SStefano Babic 
163bf90ecd3SStefano Babic 
164bf90ecd3SStefano Babic enum {
165bf90ecd3SStefano Babic 	/* screen: unblanked, hsync: on,  vsync: on */
166bf90ecd3SStefano Babic 	FB_BLANK_UNBLANK       = VESA_NO_BLANKING,
167bf90ecd3SStefano Babic 
168bf90ecd3SStefano Babic 	/* screen: blanked,   hsync: on,  vsync: on */
169bf90ecd3SStefano Babic 	FB_BLANK_NORMAL        = VESA_NO_BLANKING + 1,
170bf90ecd3SStefano Babic 
171bf90ecd3SStefano Babic 	/* screen: blanked,   hsync: on,  vsync: off */
172bf90ecd3SStefano Babic 	FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1,
173bf90ecd3SStefano Babic 
174bf90ecd3SStefano Babic 	/* screen: blanked,   hsync: off, vsync: on */
175bf90ecd3SStefano Babic 	FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1,
176bf90ecd3SStefano Babic 
177bf90ecd3SStefano Babic 	/* screen: blanked,   hsync: off, vsync: off */
178bf90ecd3SStefano Babic 	FB_BLANK_POWERDOWN     = VESA_POWERDOWN + 1
179bf90ecd3SStefano Babic };
180bf90ecd3SStefano Babic 
181bf90ecd3SStefano Babic #define FB_VBLANK_VBLANKING	0x001	/* currently in a vertical blank */
182bf90ecd3SStefano Babic #define FB_VBLANK_HBLANKING	0x002	/* currently in a horizontal blank */
183bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_VBLANK	0x004	/* vertical blanks can be detected */
184bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_HBLANK	0x008	/* horizontal blanks can be detected */
185bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_COUNT	0x010	/* global retrace counter is available */
186bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_VCOUNT	0x020	/* the vcount field is valid */
187bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_HCOUNT	0x040	/* the hcount field is valid */
188bf90ecd3SStefano Babic #define FB_VBLANK_VSYNCING	0x080	/* currently in a vsync */
189bf90ecd3SStefano Babic #define FB_VBLANK_HAVE_VSYNC	0x100	/* verical syncs can be detected */
190bf90ecd3SStefano Babic 
191bf90ecd3SStefano Babic struct fb_vblank {
192bf90ecd3SStefano Babic 	__u32 flags;			/* FB_VBLANK flags */
193bf90ecd3SStefano Babic 	__u32 count;			/* counter of retraces since boot */
194bf90ecd3SStefano Babic 	__u32 vcount;			/* current scanline position */
195bf90ecd3SStefano Babic 	__u32 hcount;			/* current scandot position */
196bf90ecd3SStefano Babic 	__u32 reserved[4];		/* reserved for future compatibility */
197bf90ecd3SStefano Babic };
198bf90ecd3SStefano Babic 
199bf90ecd3SStefano Babic /* Internal HW accel */
200bf90ecd3SStefano Babic #define ROP_COPY 0
201bf90ecd3SStefano Babic #define ROP_XOR  1
202bf90ecd3SStefano Babic 
203bf90ecd3SStefano Babic struct fb_copyarea {
204bf90ecd3SStefano Babic 	__u32 dx;
205bf90ecd3SStefano Babic 	__u32 dy;
206bf90ecd3SStefano Babic 	__u32 width;
207bf90ecd3SStefano Babic 	__u32 height;
208bf90ecd3SStefano Babic 	__u32 sx;
209bf90ecd3SStefano Babic 	__u32 sy;
210bf90ecd3SStefano Babic };
211bf90ecd3SStefano Babic 
212bf90ecd3SStefano Babic struct fb_fillrect {
213bf90ecd3SStefano Babic 	__u32 dx;	/* screen-relative */
214bf90ecd3SStefano Babic 	__u32 dy;
215bf90ecd3SStefano Babic 	__u32 width;
216bf90ecd3SStefano Babic 	__u32 height;
217bf90ecd3SStefano Babic 	__u32 color;
218bf90ecd3SStefano Babic 	__u32 rop;
219bf90ecd3SStefano Babic };
220bf90ecd3SStefano Babic 
221bf90ecd3SStefano Babic struct fb_image {
222bf90ecd3SStefano Babic 	__u32 dx;		/* Where to place image */
223bf90ecd3SStefano Babic 	__u32 dy;
224bf90ecd3SStefano Babic 	__u32 width;		/* Size of image */
225bf90ecd3SStefano Babic 	__u32 height;
226bf90ecd3SStefano Babic 	__u32 fg_color;		/* Only used when a mono bitmap */
227bf90ecd3SStefano Babic 	__u32 bg_color;
228bf90ecd3SStefano Babic 	__u8  depth;		/* Depth of the image */
229bf90ecd3SStefano Babic 	const char *data;	/* Pointer to image data */
230bf90ecd3SStefano Babic 	struct fb_cmap cmap;	/* color map info */
231bf90ecd3SStefano Babic };
232bf90ecd3SStefano Babic 
233bf90ecd3SStefano Babic /*
234bf90ecd3SStefano Babic  * hardware cursor control
235bf90ecd3SStefano Babic  */
236bf90ecd3SStefano Babic 
237bf90ecd3SStefano Babic #define FB_CUR_SETIMAGE 0x01
238bf90ecd3SStefano Babic #define FB_CUR_SETPOS	0x02
239bf90ecd3SStefano Babic #define FB_CUR_SETHOT	0x04
240bf90ecd3SStefano Babic #define FB_CUR_SETCMAP	0x08
241bf90ecd3SStefano Babic #define FB_CUR_SETSHAPE 0x10
242bf90ecd3SStefano Babic #define FB_CUR_SETSIZE	0x20
243bf90ecd3SStefano Babic #define FB_CUR_SETALL	0xFF
244bf90ecd3SStefano Babic 
245bf90ecd3SStefano Babic struct fbcurpos {
246bf90ecd3SStefano Babic 	__u16 x, y;
247bf90ecd3SStefano Babic };
248bf90ecd3SStefano Babic 
249bf90ecd3SStefano Babic struct fb_cursor {
250bf90ecd3SStefano Babic 	__u16 set;		/* what to set */
251bf90ecd3SStefano Babic 	__u16 enable;		/* cursor on/off */
252bf90ecd3SStefano Babic 	__u16 rop;		/* bitop operation */
253bf90ecd3SStefano Babic 	const char *mask;	/* cursor mask bits */
254bf90ecd3SStefano Babic 	struct fbcurpos hot;	/* cursor hot spot */
255bf90ecd3SStefano Babic 	struct fb_image	image;	/* Cursor image */
256bf90ecd3SStefano Babic };
257bf90ecd3SStefano Babic 
258bf90ecd3SStefano Babic #ifdef CONFIG_FB_BACKLIGHT
259bf90ecd3SStefano Babic /* Settings for the generic backlight code */
260bf90ecd3SStefano Babic #define FB_BACKLIGHT_LEVELS	128
261bf90ecd3SStefano Babic #define FB_BACKLIGHT_MAX	0xFF
262bf90ecd3SStefano Babic #endif
263bf90ecd3SStefano Babic 
264bf90ecd3SStefano Babic #ifdef __KERNEL__
265bf90ecd3SStefano Babic 
266bf90ecd3SStefano Babic struct vm_area_struct;
267bf90ecd3SStefano Babic struct fb_info;
268bf90ecd3SStefano Babic struct device;
269bf90ecd3SStefano Babic struct file;
270bf90ecd3SStefano Babic 
271bf90ecd3SStefano Babic /* Definitions below are used in the parsed monitor specs */
272bf90ecd3SStefano Babic #define FB_DPMS_ACTIVE_OFF	1
273bf90ecd3SStefano Babic #define FB_DPMS_SUSPEND		2
274bf90ecd3SStefano Babic #define FB_DPMS_STANDBY		4
275bf90ecd3SStefano Babic 
276bf90ecd3SStefano Babic #define FB_DISP_DDI		1
277bf90ecd3SStefano Babic #define FB_DISP_ANA_700_300	2
278bf90ecd3SStefano Babic #define FB_DISP_ANA_714_286	4
279bf90ecd3SStefano Babic #define FB_DISP_ANA_1000_400	8
280bf90ecd3SStefano Babic #define FB_DISP_ANA_700_000	16
281bf90ecd3SStefano Babic 
282bf90ecd3SStefano Babic #define FB_DISP_MONO		32
283bf90ecd3SStefano Babic #define FB_DISP_RGB		64
284bf90ecd3SStefano Babic #define FB_DISP_MULTI		128
285bf90ecd3SStefano Babic #define FB_DISP_UNKNOWN		256
286bf90ecd3SStefano Babic 
287bf90ecd3SStefano Babic #define FB_SIGNAL_NONE		0
288bf90ecd3SStefano Babic #define FB_SIGNAL_BLANK_BLANK	1
289bf90ecd3SStefano Babic #define FB_SIGNAL_SEPARATE	2
290bf90ecd3SStefano Babic #define FB_SIGNAL_COMPOSITE	4
291bf90ecd3SStefano Babic #define FB_SIGNAL_SYNC_ON_GREEN	8
292bf90ecd3SStefano Babic #define FB_SIGNAL_SERRATION_ON	16
293bf90ecd3SStefano Babic 
294bf90ecd3SStefano Babic #define FB_MISC_PRIM_COLOR	1
295bf90ecd3SStefano Babic #define FB_MISC_1ST_DETAIL	2	/* First Detailed Timing is preferred */
296bf90ecd3SStefano Babic struct fb_chroma {
297bf90ecd3SStefano Babic 	__u32 redx;	/* in fraction of 1024 */
298bf90ecd3SStefano Babic 	__u32 greenx;
299bf90ecd3SStefano Babic 	__u32 bluex;
300bf90ecd3SStefano Babic 	__u32 whitex;
301bf90ecd3SStefano Babic 	__u32 redy;
302bf90ecd3SStefano Babic 	__u32 greeny;
303bf90ecd3SStefano Babic 	__u32 bluey;
304bf90ecd3SStefano Babic 	__u32 whitey;
305bf90ecd3SStefano Babic };
306bf90ecd3SStefano Babic 
307bf90ecd3SStefano Babic struct fb_monspecs {
308bf90ecd3SStefano Babic 	struct fb_chroma chroma;
309bf90ecd3SStefano Babic 	struct fb_videomode *modedb;	/* mode database */
310bf90ecd3SStefano Babic 	__u8  manufacturer[4];		/* Manufacturer */
311bf90ecd3SStefano Babic 	__u8  monitor[14];		/* Monitor String */
312bf90ecd3SStefano Babic 	__u8  serial_no[14];		/* Serial Number */
313bf90ecd3SStefano Babic 	__u8  ascii[14];		/* ? */
314bf90ecd3SStefano Babic 	__u32 modedb_len;		/* mode database length */
315bf90ecd3SStefano Babic 	__u32 model;			/* Monitor Model */
316bf90ecd3SStefano Babic 	__u32 serial;			/* Serial Number - Integer */
317bf90ecd3SStefano Babic 	__u32 year;			/* Year manufactured */
318bf90ecd3SStefano Babic 	__u32 week;			/* Week Manufactured */
319bf90ecd3SStefano Babic 	__u32 hfmin;			/* hfreq lower limit (Hz) */
320bf90ecd3SStefano Babic 	__u32 hfmax;			/* hfreq upper limit (Hz) */
321bf90ecd3SStefano Babic 	__u32 dclkmin;			/* pixelclock lower limit (Hz) */
322bf90ecd3SStefano Babic 	__u32 dclkmax;			/* pixelclock upper limit (Hz) */
323bf90ecd3SStefano Babic 	__u16 input;			/* display type - see FB_DISP_* */
324bf90ecd3SStefano Babic 	__u16 dpms;			/* DPMS support - see FB_DPMS_ */
325bf90ecd3SStefano Babic 	__u16 signal;			/* Signal Type - see FB_SIGNAL_* */
326bf90ecd3SStefano Babic 	__u16 vfmin;			/* vfreq lower limit (Hz) */
327bf90ecd3SStefano Babic 	__u16 vfmax;			/* vfreq upper limit (Hz) */
328bf90ecd3SStefano Babic 	__u16 gamma;			/* Gamma - in fractions of 100 */
329bf90ecd3SStefano Babic 	__u16 gtf	: 1;		/* supports GTF */
330bf90ecd3SStefano Babic 	__u16 misc;			/* Misc flags - see FB_MISC_* */
331bf90ecd3SStefano Babic 	__u8  version;			/* EDID version... */
332bf90ecd3SStefano Babic 	__u8  revision;			/* ...and revision */
333bf90ecd3SStefano Babic 	__u8  max_x;			/* Maximum horizontal size (cm) */
334bf90ecd3SStefano Babic 	__u8  max_y;			/* Maximum vertical size (cm) */
335bf90ecd3SStefano Babic };
336bf90ecd3SStefano Babic 
337bf90ecd3SStefano Babic struct fb_cmap_user {
338bf90ecd3SStefano Babic 	__u32 start;			/* First entry	*/
339bf90ecd3SStefano Babic 	__u32 len;			/* Number of entries */
340bf90ecd3SStefano Babic 	__u16 *red;		/* Red values	*/
341bf90ecd3SStefano Babic 	__u16 *green;
342bf90ecd3SStefano Babic 	__u16 *blue;
343bf90ecd3SStefano Babic 	__u16 *transp;		/* transparency, can be NULL */
344bf90ecd3SStefano Babic };
345bf90ecd3SStefano Babic 
346bf90ecd3SStefano Babic struct fb_image_user {
347bf90ecd3SStefano Babic 	__u32 dx;			/* Where to place image */
348bf90ecd3SStefano Babic 	__u32 dy;
349bf90ecd3SStefano Babic 	__u32 width;			/* Size of image */
350bf90ecd3SStefano Babic 	__u32 height;
351bf90ecd3SStefano Babic 	__u32 fg_color;			/* Only used when a mono bitmap */
352bf90ecd3SStefano Babic 	__u32 bg_color;
353bf90ecd3SStefano Babic 	__u8  depth;			/* Depth of the image */
354bf90ecd3SStefano Babic 	const char *data;	/* Pointer to image data */
355bf90ecd3SStefano Babic 	struct fb_cmap_user cmap;	/* color map info */
356bf90ecd3SStefano Babic };
357bf90ecd3SStefano Babic 
358bf90ecd3SStefano Babic struct fb_cursor_user {
359bf90ecd3SStefano Babic 	__u16 set;			/* what to set */
360bf90ecd3SStefano Babic 	__u16 enable;			/* cursor on/off */
361bf90ecd3SStefano Babic 	__u16 rop;			/* bitop operation */
362bf90ecd3SStefano Babic 	const char *mask;	/* cursor mask bits */
363bf90ecd3SStefano Babic 	struct fbcurpos hot;		/* cursor hot spot */
364bf90ecd3SStefano Babic 	struct fb_image_user image;	/* Cursor image */
365bf90ecd3SStefano Babic };
366bf90ecd3SStefano Babic 
367bf90ecd3SStefano Babic /*
368bf90ecd3SStefano Babic  * Register/unregister for framebuffer events
369bf90ecd3SStefano Babic  */
370bf90ecd3SStefano Babic 
371bf90ecd3SStefano Babic /*	The resolution of the passed in fb_info about to change */
372bf90ecd3SStefano Babic #define FB_EVENT_MODE_CHANGE		0x01
373bf90ecd3SStefano Babic /*	The display on this fb_info is beeing suspended, no access to the
374bf90ecd3SStefano Babic  *	framebuffer is allowed any more after that call returns
375bf90ecd3SStefano Babic  */
376bf90ecd3SStefano Babic #define FB_EVENT_SUSPEND		0x02
377bf90ecd3SStefano Babic /*	The display on this fb_info was resumed, you can restore the display
378bf90ecd3SStefano Babic  *	if you own it
379bf90ecd3SStefano Babic  */
380bf90ecd3SStefano Babic #define FB_EVENT_RESUME			0x03
381bf90ecd3SStefano Babic /*	An entry from the modelist was removed */
382bf90ecd3SStefano Babic #define FB_EVENT_MODE_DELETE		0x04
383bf90ecd3SStefano Babic /*	A driver registered itself */
384bf90ecd3SStefano Babic #define FB_EVENT_FB_REGISTERED		0x05
385bf90ecd3SStefano Babic /*	A driver unregistered itself */
386bf90ecd3SStefano Babic #define FB_EVENT_FB_UNREGISTERED	0x06
387bf90ecd3SStefano Babic /*	CONSOLE-SPECIFIC: get console to framebuffer mapping */
388bf90ecd3SStefano Babic #define FB_EVENT_GET_CONSOLE_MAP	0x07
389bf90ecd3SStefano Babic /*	CONSOLE-SPECIFIC: set console to framebuffer mapping */
390bf90ecd3SStefano Babic #define FB_EVENT_SET_CONSOLE_MAP	0x08
391eae4b2b6SVagrant Cascadian /*	A hardware display blank change occurred */
392bf90ecd3SStefano Babic #define FB_EVENT_BLANK			0x09
393bf90ecd3SStefano Babic /*	Private modelist is to be replaced */
394bf90ecd3SStefano Babic #define FB_EVENT_NEW_MODELIST		0x0A
395bf90ecd3SStefano Babic /*	The resolution of the passed in fb_info about to change and
396bf90ecd3SStefano Babic 	all vc's should be changed	   */
397bf90ecd3SStefano Babic #define FB_EVENT_MODE_CHANGE_ALL	0x0B
398eae4b2b6SVagrant Cascadian /*	A software display blank change occurred */
399bf90ecd3SStefano Babic #define FB_EVENT_CONBLANK		0x0C
400bf90ecd3SStefano Babic /*	Get drawing requirements	*/
401bf90ecd3SStefano Babic #define FB_EVENT_GET_REQ		0x0D
402bf90ecd3SStefano Babic /*	Unbind from the console if possible */
403bf90ecd3SStefano Babic #define FB_EVENT_FB_UNBIND		0x0E
404bf90ecd3SStefano Babic 
405bf90ecd3SStefano Babic struct fb_event {
406bf90ecd3SStefano Babic 	struct fb_info *info;
407bf90ecd3SStefano Babic 	void *data;
408bf90ecd3SStefano Babic };
409bf90ecd3SStefano Babic 
410bf90ecd3SStefano Babic struct fb_blit_caps {
411bf90ecd3SStefano Babic 	u32 x;
412bf90ecd3SStefano Babic 	u32 y;
413bf90ecd3SStefano Babic 	u32 len;
414bf90ecd3SStefano Babic 	u32 flags;
415bf90ecd3SStefano Babic };
416bf90ecd3SStefano Babic 
417bf90ecd3SStefano Babic /*
418bf90ecd3SStefano Babic  * Pixmap structure definition
419bf90ecd3SStefano Babic  *
420bf90ecd3SStefano Babic  * The purpose of this structure is to translate data
421bf90ecd3SStefano Babic  * from the hardware independent format of fbdev to what
422bf90ecd3SStefano Babic  * format the hardware needs.
423bf90ecd3SStefano Babic  */
424bf90ecd3SStefano Babic 
425bf90ecd3SStefano Babic #define FB_PIXMAP_DEFAULT 1	/* used internally by fbcon */
426bf90ecd3SStefano Babic #define FB_PIXMAP_SYSTEM  2	/* memory is in system RAM  */
427bf90ecd3SStefano Babic #define FB_PIXMAP_IO	  4	/* memory is iomapped	    */
428bf90ecd3SStefano Babic #define FB_PIXMAP_SYNC	  256	/* set if GPU can DMA	    */
429bf90ecd3SStefano Babic 
430bf90ecd3SStefano Babic struct fb_pixmap {
431bf90ecd3SStefano Babic 	u8  *addr;		/* pointer to memory			*/
432bf90ecd3SStefano Babic 	u32 size;		/* size of buffer in bytes		*/
433bf90ecd3SStefano Babic 	u32 offset;		/* current offset to buffer		*/
434bf90ecd3SStefano Babic 	u32 buf_align;		/* byte alignment of each bitmap	*/
435bf90ecd3SStefano Babic 	u32 scan_align;		/* alignment per scanline		*/
436bf90ecd3SStefano Babic 	u32 access_align;	/* alignment per read/write (bits)	*/
437bf90ecd3SStefano Babic 	u32 flags;		/* see FB_PIXMAP_*			*/
438bf90ecd3SStefano Babic 	u32 blit_x;		/* supported bit block dimensions (1-32)*/
439bf90ecd3SStefano Babic 	u32 blit_y;		/* Format: blit_x = 1 << (width - 1)	*/
440bf90ecd3SStefano Babic 				/*	   blit_y = 1 << (height - 1)	*/
441bf90ecd3SStefano Babic 				/* if 0, will be set to 0xffffffff (all)*/
442bf90ecd3SStefano Babic 	/* access methods */
443bf90ecd3SStefano Babic 	void (*writeio)(struct fb_info *info, void *dst, void *src, unsigned int size);
444bf90ecd3SStefano Babic 	void (*readio) (struct fb_info *info, void *dst, void *src, unsigned int size);
445bf90ecd3SStefano Babic };
446bf90ecd3SStefano Babic 
447bf90ecd3SStefano Babic #ifdef CONFIG_FB_DEFERRED_IO
448bf90ecd3SStefano Babic struct fb_deferred_io {
449bf90ecd3SStefano Babic 	/* delay between mkwrite and deferred handler */
450bf90ecd3SStefano Babic 	unsigned long delay;
451bf90ecd3SStefano Babic 	struct mutex lock; /* mutex that protects the page list */
452bf90ecd3SStefano Babic 	struct list_head pagelist; /* list of touched pages */
453bf90ecd3SStefano Babic 	/* callback */
454bf90ecd3SStefano Babic 	void (*deferred_io)(struct fb_info *info, struct list_head *pagelist);
455bf90ecd3SStefano Babic };
456bf90ecd3SStefano Babic #endif
457bf90ecd3SStefano Babic 
458bf90ecd3SStefano Babic /* FBINFO_* = fb_info.flags bit flags */
459bf90ecd3SStefano Babic #define FBINFO_MODULE		0x0001	/* Low-level driver is a module */
460bf90ecd3SStefano Babic #define FBINFO_HWACCEL_DISABLED	0x0002
461bf90ecd3SStefano Babic 	/* When FBINFO_HWACCEL_DISABLED is set:
462bf90ecd3SStefano Babic 	 *  Hardware acceleration is turned off.  Software implementations
463bf90ecd3SStefano Babic 	 *  of required functions (copyarea(), fillrect(), and imageblit())
464bf90ecd3SStefano Babic 	 *  takes over; acceleration engine should be in a quiescent state */
465bf90ecd3SStefano Babic 
466bf90ecd3SStefano Babic /* hints */
467bf90ecd3SStefano Babic #define FBINFO_PARTIAL_PAN_OK	0x0040 /* otw use pan only for double-buffering */
468bf90ecd3SStefano Babic #define FBINFO_READS_FAST	0x0080 /* soft-copy faster than rendering */
469bf90ecd3SStefano Babic 
470bf90ecd3SStefano Babic /*
471bf90ecd3SStefano Babic  * A driver may set this flag to indicate that it does want a set_par to be
472bf90ecd3SStefano Babic  * called every time when fbcon_switch is executed. The advantage is that with
473bf90ecd3SStefano Babic  * this flag set you can really be sure that set_par is always called before
474bf90ecd3SStefano Babic  * any of the functions dependant on the correct hardware state or altering
475bf90ecd3SStefano Babic  * that state, even if you are using some broken X releases. The disadvantage
476bf90ecd3SStefano Babic  * is that it introduces unwanted delays to every console switch if set_par
477bf90ecd3SStefano Babic  * is slow. It is a good idea to try this flag in the drivers initialization
478bf90ecd3SStefano Babic  * code whenever there is a bug report related to switching between X and the
479bf90ecd3SStefano Babic  * framebuffer console.
480bf90ecd3SStefano Babic  */
481bf90ecd3SStefano Babic #define FBINFO_MISC_ALWAYS_SETPAR   0x40000
482bf90ecd3SStefano Babic 
483bf90ecd3SStefano Babic /*
484bf90ecd3SStefano Babic  * Host and GPU endianness differ.
485bf90ecd3SStefano Babic  */
486bf90ecd3SStefano Babic #define FBINFO_FOREIGN_ENDIAN	0x100000
487bf90ecd3SStefano Babic /*
488bf90ecd3SStefano Babic  * Big endian math. This is the same flags as above, but with different
489bf90ecd3SStefano Babic  * meaning, it is set by the fb subsystem depending FOREIGN_ENDIAN flag
490bf90ecd3SStefano Babic  * and host endianness. Drivers should not use this flag.
491bf90ecd3SStefano Babic  */
492bf90ecd3SStefano Babic #define FBINFO_BE_MATH	0x100000
493bf90ecd3SStefano Babic 
494bf90ecd3SStefano Babic struct fb_info {
495bf90ecd3SStefano Babic 	int node;
496bf90ecd3SStefano Babic 	int flags;
497bf90ecd3SStefano Babic 	struct fb_var_screeninfo var;	/* Current var */
498bf90ecd3SStefano Babic 	struct fb_fix_screeninfo fix;	/* Current fix */
499bf90ecd3SStefano Babic 	struct fb_monspecs monspecs;	/* Current Monitor specs */
500bf90ecd3SStefano Babic 	struct fb_pixmap pixmap;	/* Image hardware mapper */
501bf90ecd3SStefano Babic 	struct fb_pixmap sprite;	/* Cursor hardware mapper */
502bf90ecd3SStefano Babic 	struct fb_cmap cmap;		/* Current cmap */
503bf90ecd3SStefano Babic 	struct list_head modelist;	/* mode list */
504bf90ecd3SStefano Babic 	struct fb_videomode *mode;	/* current mode */
505bf90ecd3SStefano Babic 
506bf90ecd3SStefano Babic 	char *screen_base;	/* Virtual address */
507bf90ecd3SStefano Babic 	unsigned long screen_size;	/* Amount of ioremapped VRAM or 0 */
508bf90ecd3SStefano Babic 	void *pseudo_palette;		/* Fake palette of 16 colors */
509bf90ecd3SStefano Babic #define FBINFO_STATE_RUNNING	0
510bf90ecd3SStefano Babic #define FBINFO_STATE_SUSPENDED	1
511bf90ecd3SStefano Babic 	u32 state;			/* Hardware state i.e suspend */
512bf90ecd3SStefano Babic 	void *fbcon_par;		/* fbcon use-only private area */
513bf90ecd3SStefano Babic 	/* From here on everything is device dependent */
514bf90ecd3SStefano Babic 	void *par;
515bf90ecd3SStefano Babic };
516bf90ecd3SStefano Babic 
517bf90ecd3SStefano Babic #define FBINFO_DEFAULT	0
518bf90ecd3SStefano Babic 
519bf90ecd3SStefano Babic #define FBINFO_FLAG_MODULE	FBINFO_MODULE
520bf90ecd3SStefano Babic #define FBINFO_FLAG_DEFAULT	FBINFO_DEFAULT
521bf90ecd3SStefano Babic 
522071bc923SWolfgang Denk /* This will go away */
523bf90ecd3SStefano Babic #if defined(__sparc__)
524bf90ecd3SStefano Babic 
525bf90ecd3SStefano Babic /* We map all of our framebuffers such that big-endian accesses
526bf90ecd3SStefano Babic  * are what we want, so the following is sufficient.
527bf90ecd3SStefano Babic  */
528bf90ecd3SStefano Babic 
529071bc923SWolfgang Denk /* This will go away */
530bf90ecd3SStefano Babic #define fb_readb sbus_readb
531bf90ecd3SStefano Babic #define fb_readw sbus_readw
532bf90ecd3SStefano Babic #define fb_readl sbus_readl
533bf90ecd3SStefano Babic #define fb_readq sbus_readq
534bf90ecd3SStefano Babic #define fb_writeb sbus_writeb
535bf90ecd3SStefano Babic #define fb_writew sbus_writew
536bf90ecd3SStefano Babic #define fb_writel sbus_writel
537bf90ecd3SStefano Babic #define fb_writeq sbus_writeq
538bf90ecd3SStefano Babic #define fb_memset sbus_memset_io
539bf90ecd3SStefano Babic 
540*daab59acSAndy Shevchenko #elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || defined(__hppa__) || defined(__sh__) || defined(__powerpc__) || defined(__bfin__)
541bf90ecd3SStefano Babic 
542bf90ecd3SStefano Babic #define fb_readb __raw_readb
543bf90ecd3SStefano Babic #define fb_readw __raw_readw
544bf90ecd3SStefano Babic #define fb_readl __raw_readl
545bf90ecd3SStefano Babic #define fb_readq __raw_readq
546bf90ecd3SStefano Babic #define fb_writeb __raw_writeb
547bf90ecd3SStefano Babic #define fb_writew __raw_writew
548bf90ecd3SStefano Babic #define fb_writel __raw_writel
549bf90ecd3SStefano Babic #define fb_writeq __raw_writeq
550bf90ecd3SStefano Babic #define fb_memset memset_io
551bf90ecd3SStefano Babic 
552bf90ecd3SStefano Babic #else
553bf90ecd3SStefano Babic 
554bf90ecd3SStefano Babic #define fb_readb(addr) (*(volatile u8 *) (addr))
555bf90ecd3SStefano Babic #define fb_readw(addr) (*(volatile u16 *) (addr))
556bf90ecd3SStefano Babic #define fb_readl(addr) (*(volatile u32 *) (addr))
557bf90ecd3SStefano Babic #define fb_readq(addr) (*(volatile u64 *) (addr))
558bf90ecd3SStefano Babic #define fb_writeb(b,addr) (*(volatile u8 *) (addr) = (b))
559bf90ecd3SStefano Babic #define fb_writew(b,addr) (*(volatile u16 *) (addr) = (b))
560bf90ecd3SStefano Babic #define fb_writel(b,addr) (*(volatile u32 *) (addr) = (b))
561bf90ecd3SStefano Babic #define fb_writeq(b,addr) (*(volatile u64 *) (addr) = (b))
562bf90ecd3SStefano Babic #define fb_memset memset
563bf90ecd3SStefano Babic 
564bf90ecd3SStefano Babic #endif
565bf90ecd3SStefano Babic 
566bf90ecd3SStefano Babic #define FB_LEFT_POS(p, bpp)	     (fb_be_math(p) ? (32 - (bpp)) : 0)
567bf90ecd3SStefano Babic #define FB_SHIFT_HIGH(p, val, bits)  (fb_be_math(p) ? (val) >> (bits) : \
568bf90ecd3SStefano Babic 						      (val) << (bits))
569bf90ecd3SStefano Babic #define FB_SHIFT_LOW(p, val, bits)   (fb_be_math(p) ? (val) << (bits) : \
570bf90ecd3SStefano Babic 						      (val) >> (bits))
571bf90ecd3SStefano Babic /* drivers/video/fbmon.c */
572bf90ecd3SStefano Babic #define FB_MAXTIMINGS		0
573bf90ecd3SStefano Babic #define FB_VSYNCTIMINGS		1
574bf90ecd3SStefano Babic #define FB_HSYNCTIMINGS		2
575bf90ecd3SStefano Babic #define FB_DCLKTIMINGS		3
576bf90ecd3SStefano Babic #define FB_IGNOREMON		0x100
577bf90ecd3SStefano Babic 
578bf90ecd3SStefano Babic #define FB_MODE_IS_UNKNOWN	0
579bf90ecd3SStefano Babic #define FB_MODE_IS_DETAILED	1
580bf90ecd3SStefano Babic #define FB_MODE_IS_STANDARD	2
581bf90ecd3SStefano Babic #define FB_MODE_IS_VESA		4
582bf90ecd3SStefano Babic #define FB_MODE_IS_CALCULATED	8
583bf90ecd3SStefano Babic #define FB_MODE_IS_FIRST	16
584bf90ecd3SStefano Babic #define FB_MODE_IS_FROM_VAR	32
585bf90ecd3SStefano Babic 
586bf90ecd3SStefano Babic 
587bf90ecd3SStefano Babic /* drivers/video/fbcmap.c */
588bf90ecd3SStefano Babic 
589bf90ecd3SStefano Babic extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp);
590bf90ecd3SStefano Babic extern void fb_dealloc_cmap(struct fb_cmap *cmap);
591bf90ecd3SStefano Babic extern int fb_copy_cmap(const struct fb_cmap *from, struct fb_cmap *to);
592bf90ecd3SStefano Babic extern int fb_cmap_to_user(const struct fb_cmap *from, struct fb_cmap_user *to);
593bf90ecd3SStefano Babic extern int fb_set_cmap(struct fb_cmap *cmap, struct fb_info *fb_info);
594bf90ecd3SStefano Babic extern int fb_set_user_cmap(struct fb_cmap_user *cmap, struct fb_info *fb_info);
595bf90ecd3SStefano Babic extern const struct fb_cmap *fb_default_cmap(int len);
596bf90ecd3SStefano Babic extern void fb_invert_cmaps(void);
597bf90ecd3SStefano Babic 
598bf90ecd3SStefano Babic struct fb_videomode {
599bf90ecd3SStefano Babic 	const char *name;	/* optional */
600bf90ecd3SStefano Babic 	u32 refresh;		/* optional */
601bf90ecd3SStefano Babic 	u32 xres;
602bf90ecd3SStefano Babic 	u32 yres;
603bf90ecd3SStefano Babic 	u32 pixclock;
604bf90ecd3SStefano Babic 	u32 left_margin;
605bf90ecd3SStefano Babic 	u32 right_margin;
606bf90ecd3SStefano Babic 	u32 upper_margin;
607bf90ecd3SStefano Babic 	u32 lower_margin;
608bf90ecd3SStefano Babic 	u32 hsync_len;
609bf90ecd3SStefano Babic 	u32 vsync_len;
610bf90ecd3SStefano Babic 	u32 sync;
611bf90ecd3SStefano Babic 	u32 vmode;
612bf90ecd3SStefano Babic 	u32 flag;
613bf90ecd3SStefano Babic };
614bf90ecd3SStefano Babic 
615335143c7SFabio Estevam int board_video_skip(void);
616335143c7SFabio Estevam 
617bf90ecd3SStefano Babic #endif /* __KERNEL__ */
618bf90ecd3SStefano Babic 
619bf90ecd3SStefano Babic #endif /* _LINUX_FB_H */
620