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