summaryrefslogtreecommitdiffstats
path: root/include/linux/fb.h
blob: f97a313c60fea5fe877f9e46d4f218d8337b1dbd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
#ifndef _LINUX_FB_H
#define _LINUX_FB_H

/* Definitions of frame buffers						*/

/* ioctls
   0x46 is 'F'								*/
#define FBIOGET_VSCREENINFO 	0x4600
#define FBIOPUT_VSCREENINFO 	0x4601
#define FBIOGET_FSCREENINFO 	0x4602
#define FBIOGETCMAP		0x4604
#define FBIOPUTCMAP		0x4605
#define FBIOPAN_DISPLAY         0x4606

#define FB_TYPE_PACKED_PIXELS		0	/* Packed Pixels	*/
#define FB_TYPE_PLANES			1	/* Non interleaved planes */
#define FB_TYPE_INTERLEAVED_PLANES	2	/* Interleaved planes	*/

#define FB_VISUAL_MONO01		0	/* Monochr. 1=Black 0=White */
#define FB_VISUAL_MONO10		1	/* Monochr. 1=White 0=Black */
#define FB_VISUAL_TRUECOLOR		2	/* True color	*/
#define FB_VISUAL_PSEUDOCOLOR		3	/* Pseudo color (like atari) */
#define FB_VISUAL_DIRECTCOLOR		4	/* Direct color */
#define FB_VISUAL_STATIC_PSEUDOCOLOR	5	/* Pseudo color readonly */
#define FB_VISUAL_STATIC_DIRECTCOLOR	6	/* Direct color readonly */

struct fb_fix_screeninfo {
	char id[16];			/* identification string eg "TT Builtin" */
	unsigned long smem_start;	/* Start of frame buffer mem */
	unsigned long smem_len;		/* Length of frame buffer mem */	
	int type;			/* see FB_TYPE_* 		*/
	int type_aux;			/* Interleave for interleaved Planes */
	int visual;			/* see FB_VISUAL_*  		*/ 
	u_short xpanstep;               /* zero if no hardware panning  */
        u_short ypanstep;               /* zero if no hardware panning  */
        u_short ywrapstep;              /* zero if no hardware ywrap    */
        u_long line_length;             /* length of a line in bytes    */
        short reserved[9];              /* Reserved for future compatibility */
};

struct fb_bitfield {
	int offset;			/* beginning of bitfield	*/
	int length;			/* length of bitfield		*/
	int msb_right;			/* != 0 : Most significant bit is */ 
					/* right */ 
};

#define FB_NONSTD_HAM		1	/* Hold-And-Modify (HAM)        */

#define FB_ACTIVATE_NOW		0	/* set values immediately (or vbl)*/
#define FB_ACTIVATE_NXTOPEN	1	/* activate on next open	*/
#define FB_ACTIVATE_TEST	2	/* don't set, round up impossible */
#define FB_ACTIVATE_MASK       15
					/* values			*/
#define FB_ACTIVATE_VBL	       16	/* activate values on next vbl  */
#define FB_CHANGE_CMAP_VBL     32	/* change colormap on vbl	*/

#define FB_ACCEL_NONE		0	/* no hardware accelerator	*/
#define FB_ACCEL_ATARIBLITT	1	/* Atari Blitter		*/
#define FB_ACCEL_AMIGABLITT	2	/* Amiga Blitter                */
#define FB_ACCEL_CYBERVISION	3	/* Cybervision64 (S3 Trio64)    */

#define FB_SYNC_HOR_HIGH_ACT	1	/* horizontal sync high active	*/
#define FB_SYNC_VERT_HIGH_ACT	2	/* vertical sync high active	*/
#define FB_SYNC_EXT		4	/* external sync		*/
#define FB_SYNC_COMP_HIGH_ACT	8	/* composite sync high active   */
#define FB_SYNC_BROADCAST	16	/* broadcast video timings      */
					/* vtotal = 144d/288n/576i => PAL  */
					/* vtotal = 121d/242n/484i => NTSC */

#define FB_VMODE_NONINTERLACED  0	/* non interlaced */
#define FB_VMODE_INTERLACED 	1	/* interlaced	*/
#define FB_VMODE_DOUBLE		2	/* double scan */
#define FB_VMODE_MASK		255

#define FB_VMODE_YWRAP		256	/* ywrap instead of panning     */
#define FB_VMODE_SMOOTH_XPAN	512	/* smooth xpan possible (internally used) */
#define FB_VMODE_CONUPDATE	512	/* don't update x/yoffset	*/

struct fb_var_screeninfo {
	int xres;			/* visible resolution		*/
	int yres;
	int xres_virtual;		/* virtual resolution		*/
	int yres_virtual;
	int xoffset;			/* offset from virtual to visible */
	int yoffset;			/* resolution			*/

	int bits_per_pixel;		/* guess what 			*/
	int grayscale;			/* != 0 Graylevels instead of colors */

	struct fb_bitfield red;		/* bitfield in fb mem if true color, */
	struct fb_bitfield green;	/* else only length is significant */
	struct fb_bitfield blue;
	struct fb_bitfield transp;	/* transparency			*/	

	int nonstd;			/* != 0 Non standard pixel format */

	int activate;			/* see FB_ACTIVATE_* 		*/

	int height;			/* height of picture in mm    */
	int width;			/* width of picture in mm     */

	int accel;			/* see FB_ACCEL_*		*/

	/* Timing: All values in pixclocks, except pixclock (of course) */
	unsigned long pixclock;		/* pixel clock in ps (pico seconds) */
	unsigned long left_margin;	/* time from sync to picture	*/
	unsigned long right_margin;	/* time from picture to sync	*/
	unsigned long upper_margin;	/* time from sync to picture	*/
	unsigned long lower_margin;
	unsigned long hsync_len;	/* length of horizontal sync	*/
	unsigned long vsync_len;	/* length of vertical sync	*/
	int sync;			/* see FB_SYNC_*		*/
	int vmode;			/* see FB_VMODE_*		*/
	int reserved[6];		/* Reserved for future compatibility */
};

struct fb_cmap {
	int start;			/* First entry	*/
	int len;			/* Number of entries */
	unsigned short *red;		/* Red values	*/
	unsigned short *green;
	unsigned short *blue;
	unsigned short *transp;		/* transparency, can be NULL */
};

#ifdef __KERNEL__

#include <linux/fs.h>

struct fb_ops {
	/* get non settable parameters	*/
	int (*fb_get_fix) (struct fb_fix_screeninfo *, int); 
	/* get settable parameters	*/
	int (*fb_get_var) (struct fb_var_screeninfo *, int);		
	/* set settable parameters	*/
	int (*fb_set_var) (struct fb_var_screeninfo *, int);		
	/* get colormap			*/
	int (*fb_get_cmap) (struct fb_cmap *, int, int);
	/* set colormap			*/
	int (*fb_set_cmap) (struct fb_cmap *, int, int);
	/* pan display                   */
        int (*fb_pan_display) (struct fb_var_screeninfo *, int);
        /* perform fb specific ioctl	*/
	int (*fb_ioctl)(struct inode *, struct file *, unsigned int,
			unsigned long, int);
};

int register_framebuffer(char *, int *, struct fb_ops *, int, 
			 struct fb_var_screeninfo *);
int unregister_framebuffer(int);

   /*
    *    This is the interface between the low-level console driver and the
    *    low-level frame buffer device
    */

struct display {
   /* Filled in by the frame buffer device */

   struct fb_var_screeninfo var;    /* variable infos. yoffset and vmode */
                                    /* are updated by fbcon.c */
   struct fb_cmap cmap;             /* colormap */
   u_char *screen_base;             /* pointer to top of virtual screen */    
   int visual;
   int type;                        /* see FB_TYPE_* */
   int type_aux;                    /* Interleave for interleaved Planes */
   u_short ypanstep;                /* zero if no hardware ypan */
   u_short ywrapstep;               /* zero if no hardware ywrap */
   u_long line_length;              /* length of a line in bytes */
   u_short can_soft_blank;          /* zero if no hardware blanking */
   u_short inverse;                 /* != 0 text black on white as default */

#if 0
   struct fb_fix_cursorinfo fcrsr;
   struct fb_var_cursorinfo *vcrsr;
   struct fb_cursorstate crsrstate;
#endif

   /* Filled in by the low-level console driver */

   struct vc_data *conp;            /* pointer to console data */
   int vrows;                       /* number of virtual rows */
   int cursor_x;                    /* current cursor position */
   int cursor_y;
   int fgcol;                       /* text colors */
   int bgcol;
   u_long next_line;                /* offset to one line below */
   u_long next_plane;               /* offset to next plane */
   u_char *fontdata;                /* Font associated to this display */
   int fontheight;
   int fontwidth;
   int userfont;                    /* != 0 if fontdata kmalloc()ed */
   struct display_switch *dispsw;   /* low level operations */
   u_short scrollmode;              /* Scroll Method */
   short yscroll;                   /* Hardware scrolling */
}; 


struct fb_info {
   char modename[40];               /* at boottime detected video mode */
   struct display *disp;            /* pointer to display variables */
   char fontname[40];               /* default font name */
   int (*changevar)(int);           /* tell console var has changed */
   int (*switch_con)(int);          /* tell fb to switch consoles */
   int (*updatevar)(int);           /* tell fb to update the vars */
   void (*blank)(int);              /* tell fb to (un)blank the screen */
};

#endif /* __KERNEL__ */

#if 1

#define FBCMD_GET_CURRENTPAR	    0xDEAD0005
#define FBCMD_SET_CURRENTPAR        0xDEAD8005

#endif


#if 1 /* Preliminary */

   /*
    *    Hardware Cursor
    */

#define FBIOGET_FCURSORINFO     0x4607
#define FBIOGET_VCURSORINFO     0x4608
#define FBIOPUT_VCURSORINFO     0x4609
#define FBIOGET_CURSORSTATE     0x460A
#define FBIOPUT_CURSORSTATE     0x460B


struct fb_fix_cursorinfo {
	u_short crsr_width;		/* width and height of the cursor in */
	u_short crsr_height;		/* pixels (zero if no cursor)	*/
	u_short crsr_xsize;		/* cursor size in display pixels */
	u_short crsr_ysize;
	u_short crsr_color1;		/* colormap entry for cursor color1 */
	u_short crsr_color2;		/* colormap entry for cursor color2 */
};

struct fb_var_cursorinfo {
        u_short width;
        u_short height;
        u_short xspot;
        u_short yspot;
        u_char data[1];                 /* field with [height][width]        */
};

struct fb_cursorstate {
	short xoffset;
	short yoffset;
	u_short mode;
};

#define FB_CURSOR_OFF		0
#define FB_CURSOR_ON		1
#define FB_CURSOR_FLASH		2

#define FBCMD_DRAWLINE		0x4621
#define FBCMD_MOVE		0x4622

#define FB_LINE_XOR	1
#define FB_LINE_BOX	2
#define FB_LINE_FILLED	4

struct fb_line {
	int start_x;
	int start_y;
	int end_x;
	int end_y;
	int color;
	int option;
};

struct fb_move {
	int src_x;
	int src_y;
	int dest_x;
	int dest_y;
	int height;
	int width;
};

#endif /* Preliminary */


#endif /* _LINUX_FB_H */