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