1/*
2 * copyed from from linux kernel 2.2.4
3 * removed internal stuff (#ifdef __KERNEL__)
4 */
5
6#ifdef HAVE_XORG_CONFIG_H
7#include <xorg-config.h>
8#endif
9
10#ifndef _LINUX_FB_H
11#define _LINUX_FB_H
12
13#include <asm/types.h>
14
15/* Definitions of frame buffers						*/
16
17#define FB_MAJOR	29
18
19#define FB_MODES_SHIFT		5	/* 32 modes per framebuffer */
20#define FB_NUM_MINORS		256	/* 256 Minors               */
21#define FB_MAX			(FB_NUM_MINORS / (1 << FB_MODES_SHIFT))
22#define GET_FB_IDX(node)	(MINOR(node) >> FB_MODES_SHIFT)
23
24/* ioctls
25   0x46 is 'F'								*/
26#define FBIOGET_VSCREENINFO	0x4600
27#define FBIOPUT_VSCREENINFO	0x4601
28#define FBIOGET_FSCREENINFO	0x4602
29#define FBIOGETCMAP		0x4604
30#define FBIOPUTCMAP		0x4605
31#define FBIOPAN_DISPLAY		0x4606
32/* 0x4607-0x460B are defined below */
33/* #define FBIOGET_MONITORSPEC	0x460C */
34/* #define FBIOPUT_MONITORSPEC	0x460D */
35/* #define FBIOSWITCH_MONIBIT	0x460E */
36#define FBIOGET_CON2FBMAP	0x460F
37#define FBIOPUT_CON2FBMAP	0x4610
38#define FBIOBLANK		0x4611
39
40#define FB_TYPE_PACKED_PIXELS		0	/* Packed Pixels	*/
41#define FB_TYPE_PLANES			1	/* Non interleaved planes */
42#define FB_TYPE_INTERLEAVED_PLANES	2	/* Interleaved planes	*/
43#define FB_TYPE_TEXT			3	/* Text/attributes	*/
44
45#define FB_AUX_TEXT_MDA		0	/* Monochrome text */
46#define FB_AUX_TEXT_CGA		1	/* CGA/EGA/VGA Color text */
47#define FB_AUX_TEXT_S3_MMIO	2	/* S3 MMIO fasttext */
48#define FB_AUX_TEXT_MGA_STEP16	3	/* MGA Millenium I: text, attr, 14 reserved bytes */
49#define FB_AUX_TEXT_MGA_STEP8	4	/* other MGAs:      text, attr,  6 reserved bytes */
50
51#define FB_VISUAL_MONO01		0	/* Monochr. 1=Black 0=White */
52#define FB_VISUAL_MONO10		1	/* Monochr. 1=White 0=Black */
53#define FB_VISUAL_TRUECOLOR		2	/* True color	*/
54#define FB_VISUAL_PSEUDOCOLOR		3	/* Pseudo color (like atari) */
55#define FB_VISUAL_DIRECTCOLOR		4	/* Direct color */
56#define FB_VISUAL_STATIC_PSEUDOCOLOR	5	/* Pseudo color readonly */
57
58#define FB_ACCEL_NONE		0	/* no hardware accelerator	*/
59#define FB_ACCEL_ATARIBLITT	1	/* Atari Blitter		*/
60#define FB_ACCEL_AMIGABLITT	2	/* Amiga Blitter                */
61#define FB_ACCEL_S3_TRIO64	3	/* Cybervision64 (S3 Trio64)    */
62#define FB_ACCEL_NCR_77C32BLT	4	/* RetinaZ3 (NCR 77C32BLT)      */
63#define FB_ACCEL_S3_VIRGE	5	/* Cybervision64/3D (S3 ViRGE)	*/
64#define FB_ACCEL_ATI_MACH64GX	6	/* ATI Mach 64GX family		*/
65#define FB_ACCEL_DEC_TGA	7	/* DEC 21030 TGA		*/
66#define FB_ACCEL_ATI_MACH64CT	8	/* ATI Mach 64CT family		*/
67#define FB_ACCEL_ATI_MACH64VT	9	/* ATI Mach 64CT family VT class */
68#define FB_ACCEL_ATI_MACH64GT	10	/* ATI Mach 64CT family GT class */
69#define FB_ACCEL_SUN_CREATOR	11	/* Sun Creator/Creator3D	*/
70#define FB_ACCEL_SUN_CGSIX	12	/* Sun cg6			*/
71#define FB_ACCEL_SUN_LEO	13	/* Sun leo/zx			*/
72#define FB_ACCEL_IMS_TWINTURBO	14	/* IMS Twin Turbo		*/
73#define FB_ACCEL_3DLABS_PERMEDIA2 15	/* 3Dlabs Permedia 2		*/
74#define FB_ACCEL_MATROX_MGA2064W 16	/* Matrox MGA2064W (Millenium)	*/
75#define FB_ACCEL_MATROX_MGA1064SG 17	/* Matrox MGA1064SG (Mystique)	*/
76#define FB_ACCEL_MATROX_MGA2164W 18	/* Matrox MGA2164W (Millenium II) */
77#define FB_ACCEL_MATROX_MGA2164W_AGP 19	/* Matrox MGA2164W (Millenium II) */
78#define FB_ACCEL_MATROX_MGAG100	20	/* Matrox G100 (Productiva G100) */
79#define FB_ACCEL_MATROX_MGAG200	21	/* Matrox G200 (Myst, Mill, ...) */
80#define FB_ACCEL_SUN_CG14	22	/* Sun cgfourteen		 */
81#define FB_ACCEL_SUN_BWTWO	23	/* Sun bwtwo			 */
82#define FB_ACCEL_SUN_CGTHREE	24	/* Sun cgthree			 */
83#define FB_ACCEL_SUN_TCX	25	/* Sun tcx			 */
84#define FB_ACCEL_MATROX_MGAG400	26	/* Matrox G400			*/
85#define FB_ACCEL_NV3		27	/* nVidia RIVA 128              */
86#define FB_ACCEL_NV4		28	/* nVidia RIVA TNT		*/
87#define FB_ACCEL_NV5		29	/* nVidia RIVA TNT2		*/
88#define FB_ACCEL_CT_6555x	30	/* C&T 6555x			*/
89#define FB_ACCEL_3DFX_BANSHEE	31	/* 3Dfx Banshee			*/
90#define FB_ACCEL_ATI_RAGE128	32	/* ATI Rage128 family		*/
91
92struct fb_fix_screeninfo {
93	char id[16];			/* identification string eg "TT Builtin" */
94	char *smem_start;		/* Start of frame buffer mem */
95					/* (physical address) */
96	__u32 smem_len;			/* Length of frame buffer mem */
97	__u32 type;			/* see FB_TYPE_*		*/
98	__u32 type_aux;			/* Interleave for interleaved Planes */
99	__u32 visual;			/* see FB_VISUAL_*		*/
100	__u16 xpanstep;			/* zero if no hardware panning  */
101	__u16 ypanstep;			/* zero if no hardware panning  */
102	__u16 ywrapstep;		/* zero if no hardware ywrap    */
103	__u32 line_length;		/* length of a line in bytes    */
104	char *mmio_start;		/* Start of Memory Mapped I/O   */
105					/* (physical address) */
106	__u32 mmio_len;			/* Length of Memory Mapped I/O  */
107	__u32 accel;			/* Type of acceleration available */
108	__u16 reserved[3];		/* Reserved for future compatibility */
109};
110
111/* Interpretation of offset for color fields: All offsets are from the right,
112 * inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
113 * can use the offset as right argument to <<). A pixel afterwards is a bit
114 * stream and is written to video memory as that unmodified. This implies
115 * big-endian byte order if bits_per_pixel is greater than 8.
116 */
117struct fb_bitfield {
118	__u32 offset;			/* beginning of bitfield	*/
119	__u32 length;			/* length of bitfield		*/
120	__u32 msb_right;		/* != 0 : Most significant bit is */
121					/* right */
122};
123
124#define FB_NONSTD_HAM		1	/* Hold-And-Modify (HAM)        */
125
126#define FB_ACTIVATE_NOW		0	/* set values immediately (or vbl)*/
127#define FB_ACTIVATE_NXTOPEN	1	/* activate on next open	*/
128#define FB_ACTIVATE_TEST	2	/* don't set, round up impossible */
129#define FB_ACTIVATE_MASK       15
130					/* values			*/
131#define FB_ACTIVATE_VBL	       16	/* activate values on next vbl  */
132#define FB_CHANGE_CMAP_VBL     32	/* change colormap on vbl	*/
133#define FB_ACTIVATE_ALL	       64	/* change all VCs on this fb	*/
134
135#define FB_ACCELF_TEXT		1	/* text mode acceleration */
136
137#define FB_SYNC_HOR_HIGH_ACT	1	/* horizontal sync high active	*/
138#define FB_SYNC_VERT_HIGH_ACT	2	/* vertical sync high active	*/
139#define FB_SYNC_EXT		4	/* external sync		*/
140#define FB_SYNC_COMP_HIGH_ACT	8	/* composite sync high active   */
141#define FB_SYNC_BROADCAST	16	/* broadcast video timings      */
142					/* vtotal = 144d/288n/576i => PAL  */
143					/* vtotal = 121d/242n/484i => NTSC */
144#define FB_SYNC_ON_GREEN	32	/* sync on green */
145
146#define FB_VMODE_NONINTERLACED  0	/* non interlaced */
147#define FB_VMODE_INTERLACED	1	/* interlaced	*/
148#define FB_VMODE_DOUBLE		2	/* double scan */
149#define FB_VMODE_MASK		255
150
151#define FB_VMODE_YWRAP		256	/* ywrap instead of panning     */
152#define FB_VMODE_SMOOTH_XPAN	512	/* smooth xpan possible (internally used) */
153#define FB_VMODE_CONUPDATE	512	/* don't update x/yoffset	*/
154
155struct fb_var_screeninfo {
156	__u32 xres;			/* visible resolution		*/
157	__u32 yres;
158	__u32 xres_virtual;		/* virtual resolution		*/
159	__u32 yres_virtual;
160	__u32 xoffset;			/* offset from virtual to visible */
161	__u32 yoffset;			/* resolution			*/
162
163	__u32 bits_per_pixel;		/* guess what			*/
164	__u32 grayscale;		/* != 0 Graylevels instead of colors */
165
166	struct fb_bitfield red;		/* bitfield in fb mem if true color, */
167	struct fb_bitfield green;	/* else only length is significant */
168	struct fb_bitfield blue;
169	struct fb_bitfield transp;	/* transparency			*/
170
171	__u32 nonstd;			/* != 0 Non standard pixel format */
172
173	__u32 activate;			/* see FB_ACTIVATE_*		*/
174
175	__u32 height;			/* height of picture in mm    */
176	__u32 width;			/* width of picture in mm     */
177
178	__u32 accel_flags;		/* acceleration flags (hints)	*/
179
180	/* Timing: All values in pixclocks, except pixclock (of course) */
181	__u32 pixclock;			/* pixel clock in ps (pico seconds) */
182	__u32 left_margin;		/* time from sync to picture	*/
183	__u32 right_margin;		/* time from picture to sync	*/
184	__u32 upper_margin;		/* time from sync to picture	*/
185	__u32 lower_margin;
186	__u32 hsync_len;		/* length of horizontal sync	*/
187	__u32 vsync_len;		/* length of vertical sync	*/
188	__u32 sync;			/* see FB_SYNC_*		*/
189	__u32 vmode;			/* see FB_VMODE_*		*/
190	__u32 reserved[6];		/* Reserved for future compatibility */
191};
192
193struct fb_cmap {
194	__u32 start;			/* First entry	*/
195	__u32 len;			/* Number of entries */
196	__u16 *red;			/* Red values	*/
197	__u16 *green;
198	__u16 *blue;
199	__u16 *transp;			/* transparency, can be NULL */
200};
201
202struct fb_con2fbmap {
203	__u32 console;
204	__u32 framebuffer;
205};
206
207struct fb_monspecs {
208	__u32 hfmin;			/* hfreq lower limit (Hz) */
209	__u32 hfmax; 			/* hfreq upper limit (Hz) */
210	__u16 vfmin;			/* vfreq lower limit (Hz) */
211	__u16 vfmax;			/* vfreq upper limit (Hz) */
212	unsigned dpms : 1;		/* supports DPMS */
213};
214
215#if 1
216
217#define FBCMD_GET_CURRENTPAR	0xDEAD0005
218#define FBCMD_SET_CURRENTPAR	0xDEAD8005
219
220#endif
221
222
223#if 1 /* Preliminary */
224
225   /*
226    *    Hardware Cursor
227    */
228
229#define FBIOGET_FCURSORINFO     0x4607
230#define FBIOGET_VCURSORINFO     0x4608
231#define FBIOPUT_VCURSORINFO     0x4609
232#define FBIOGET_CURSORSTATE     0x460A
233#define FBIOPUT_CURSORSTATE     0x460B
234
235
236struct fb_fix_cursorinfo {
237	__u16 crsr_width;		/* width and height of the cursor in */
238	__u16 crsr_height;		/* pixels (zero if no cursor)	*/
239	__u16 crsr_xsize;		/* cursor size in display pixels */
240	__u16 crsr_ysize;
241	__u16 crsr_color1;		/* colormap entry for cursor color1 */
242	__u16 crsr_color2;		/* colormap entry for cursor color2 */
243};
244
245struct fb_var_cursorinfo {
246	__u16 width;
247	__u16 height;
248	__u16 xspot;
249	__u16 yspot;
250	__u8 data[1];			/* field with [height][width]        */
251};
252
253struct fb_cursorstate {
254	__s16 xoffset;
255	__s16 yoffset;
256	__u16 mode;
257};
258
259#define FB_CURSOR_OFF		0
260#define FB_CURSOR_ON		1
261#define FB_CURSOR_FLASH		2
262
263#endif /* Preliminary */
264
265#endif /* _LINUX_FB_H */
266