1#ifndef _LINUX_FB_H
2#define _LINUX_FB_H
3
4#include <asm/types.h>
5#include <linux/i2c.h>
6
7struct dentry;
8
9
10
11#define FB_MAJOR 29
12#define FB_MAX 32
13
14
15
16#define FBIOGET_VSCREENINFO 0x4600
17#define FBIOPUT_VSCREENINFO 0x4601
18#define FBIOGET_FSCREENINFO 0x4602
19#define FBIOGETCMAP 0x4604
20#define FBIOPUTCMAP 0x4605
21#define FBIOPAN_DISPLAY 0x4606
22#ifdef __KERNEL__
23#define FBIO_CURSOR _IOWR('F', 0x08, struct fb_cursor_user)
24#else
25#define FBIO_CURSOR _IOWR('F', 0x08, struct fb_cursor)
26#endif
27
28
29
30
31#define FBIOGET_CON2FBMAP 0x460F
32#define FBIOPUT_CON2FBMAP 0x4610
33#define FBIOBLANK 0x4611
34#define FBIOGET_VBLANK _IOR('F', 0x12, struct fb_vblank)
35#define FBIO_ALLOC 0x4613
36#define FBIO_FREE 0x4614
37#define FBIOGET_GLYPH 0x4615
38#define FBIOGET_HWCINFO 0x4616
39#define FBIOPUT_MODEINFO 0x4617
40#define FBIOGET_DISPINFO 0x4618
41
42
43#define FB_TYPE_PACKED_PIXELS 0
44#define FB_TYPE_PLANES 1
45#define FB_TYPE_INTERLEAVED_PLANES 2
46#define FB_TYPE_TEXT 3
47#define FB_TYPE_VGA_PLANES 4
48
49#define FB_AUX_TEXT_MDA 0
50#define FB_AUX_TEXT_CGA 1
51#define FB_AUX_TEXT_S3_MMIO 2
52#define FB_AUX_TEXT_MGA_STEP16 3
53#define FB_AUX_TEXT_MGA_STEP8 4
54#define FB_AUX_TEXT_SVGA_GROUP 8
55#define FB_AUX_TEXT_SVGA_MASK 7
56#define FB_AUX_TEXT_SVGA_STEP2 8
57#define FB_AUX_TEXT_SVGA_STEP4 9
58#define FB_AUX_TEXT_SVGA_STEP8 10
59#define FB_AUX_TEXT_SVGA_STEP16 11
60#define FB_AUX_TEXT_SVGA_LAST 15
61
62#define FB_AUX_VGA_PLANES_VGA4 0
63#define FB_AUX_VGA_PLANES_CFB4 1
64#define FB_AUX_VGA_PLANES_CFB8 2
65
66#define FB_VISUAL_MONO01 0
67#define FB_VISUAL_MONO10 1
68#define FB_VISUAL_TRUECOLOR 2
69#define FB_VISUAL_PSEUDOCOLOR 3
70#define FB_VISUAL_DIRECTCOLOR 4
71#define FB_VISUAL_STATIC_PSEUDOCOLOR 5
72
73#define FB_ACCEL_NONE 0
74#define FB_ACCEL_ATARIBLITT 1
75#define FB_ACCEL_AMIGABLITT 2
76#define FB_ACCEL_S3_TRIO64 3
77#define FB_ACCEL_NCR_77C32BLT 4
78#define FB_ACCEL_S3_VIRGE 5
79#define FB_ACCEL_ATI_MACH64GX 6
80#define FB_ACCEL_DEC_TGA 7
81#define FB_ACCEL_ATI_MACH64CT 8
82#define FB_ACCEL_ATI_MACH64VT 9
83#define FB_ACCEL_ATI_MACH64GT 10
84#define FB_ACCEL_SUN_CREATOR 11
85#define FB_ACCEL_SUN_CGSIX 12
86#define FB_ACCEL_SUN_LEO 13
87#define FB_ACCEL_IMS_TWINTURBO 14
88#define FB_ACCEL_3DLABS_PERMEDIA2 15
89#define FB_ACCEL_MATROX_MGA2064W 16
90#define FB_ACCEL_MATROX_MGA1064SG 17
91#define FB_ACCEL_MATROX_MGA2164W 18
92#define FB_ACCEL_MATROX_MGA2164W_AGP 19
93#define FB_ACCEL_MATROX_MGAG100 20
94#define FB_ACCEL_MATROX_MGAG200 21
95#define FB_ACCEL_SUN_CG14 22
96#define FB_ACCEL_SUN_BWTWO 23
97#define FB_ACCEL_SUN_CGTHREE 24
98#define FB_ACCEL_SUN_TCX 25
99#define FB_ACCEL_MATROX_MGAG400 26
100#define FB_ACCEL_NV3 27
101#define FB_ACCEL_NV4 28
102#define FB_ACCEL_NV5 29
103#define FB_ACCEL_CT_6555x 30
104#define FB_ACCEL_3DFX_BANSHEE 31
105#define FB_ACCEL_ATI_RAGE128 32
106#define FB_ACCEL_IGS_CYBER2000 33
107#define FB_ACCEL_IGS_CYBER2010 34
108#define FB_ACCEL_IGS_CYBER5000 35
109#define FB_ACCEL_SIS_GLAMOUR 36
110#define FB_ACCEL_3DLABS_PERMEDIA3 37
111#define FB_ACCEL_ATI_RADEON 38
112#define FB_ACCEL_I810 39
113#define FB_ACCEL_SIS_GLAMOUR_2 40
114#define FB_ACCEL_SIS_XABRE 41
115#define FB_ACCEL_I830 42
116#define FB_ACCEL_NV_10 43
117#define FB_ACCEL_NV_20 44
118#define FB_ACCEL_NV_30 45
119#define FB_ACCEL_NV_40 46
120#define FB_ACCEL_XGI_VOLARI_V 47
121#define FB_ACCEL_XGI_VOLARI_Z 48
122#define FB_ACCEL_OMAP1610 49
123#define FB_ACCEL_NEOMAGIC_NM2070 90
124#define FB_ACCEL_NEOMAGIC_NM2090 91
125#define FB_ACCEL_NEOMAGIC_NM2093 92
126#define FB_ACCEL_NEOMAGIC_NM2097 93
127#define FB_ACCEL_NEOMAGIC_NM2160 94
128#define FB_ACCEL_NEOMAGIC_NM2200 95
129#define FB_ACCEL_NEOMAGIC_NM2230 96
130#define FB_ACCEL_NEOMAGIC_NM2360 97
131#define FB_ACCEL_NEOMAGIC_NM2380 98
132
133#define FB_ACCEL_SAVAGE4 0x80
134#define FB_ACCEL_SAVAGE3D 0x81
135#define FB_ACCEL_SAVAGE3D_MV 0x82
136#define FB_ACCEL_SAVAGE2000 0x83
137#define FB_ACCEL_SAVAGE_MX_MV 0x84
138#define FB_ACCEL_SAVAGE_MX 0x85
139#define FB_ACCEL_SAVAGE_IX_MV 0x86
140#define FB_ACCEL_SAVAGE_IX 0x87
141#define FB_ACCEL_PROSAVAGE_PM 0x88
142#define FB_ACCEL_PROSAVAGE_KM 0x89
143#define FB_ACCEL_S3TWISTER_P 0x8a
144#define FB_ACCEL_S3TWISTER_K 0x8b
145#define FB_ACCEL_SUPERSAVAGE 0x8c
146#define FB_ACCEL_PROSAVAGE_DDR 0x8d
147#define FB_ACCEL_PROSAVAGE_DDRK 0x8e
148
149struct fb_fix_screeninfo {
150 char id[16];
151 unsigned long smem_start;
152
153 __u32 smem_len;
154 __u32 type;
155 __u32 type_aux;
156 __u32 visual;
157 __u16 xpanstep;
158 __u16 ypanstep;
159 __u16 ywrapstep;
160 __u32 line_length;
161 unsigned long mmio_start;
162
163 __u32 mmio_len;
164 __u32 accel;
165
166 __u16 reserved[3];
167};
168
169
170
171
172
173
174
175struct fb_bitfield {
176 __u32 offset;
177 __u32 length;
178 __u32 msb_right;
179
180};
181
182#define FB_NONSTD_HAM 1
183#define FB_NONSTD_REV_PIX_IN_B 2
184
185#define FB_ACTIVATE_NOW 0
186#define FB_ACTIVATE_NXTOPEN 1
187#define FB_ACTIVATE_TEST 2
188#define FB_ACTIVATE_MASK 15
189
190#define FB_ACTIVATE_VBL 16
191#define FB_CHANGE_CMAP_VBL 32
192#define FB_ACTIVATE_ALL 64
193#define FB_ACTIVATE_FORCE 128
194#define FB_ACTIVATE_INV_MODE 256
195
196#define FB_ACCELF_TEXT 1
197
198#define FB_SYNC_HOR_HIGH_ACT 1
199#define FB_SYNC_VERT_HIGH_ACT 2
200#define FB_SYNC_EXT 4
201#define FB_SYNC_COMP_HIGH_ACT 8
202#define FB_SYNC_BROADCAST 16
203
204
205#define FB_SYNC_ON_GREEN 32
206
207#define FB_VMODE_NONINTERLACED 0
208#define FB_VMODE_INTERLACED 1
209#define FB_VMODE_DOUBLE 2
210#define FB_VMODE_ODD_FLD_FIRST 4
211#define FB_VMODE_MASK 255
212
213#define FB_VMODE_YWRAP 256
214#define FB_VMODE_SMOOTH_XPAN 512
215#define FB_VMODE_CONUPDATE 512
216
217
218
219
220#define FB_ROTATE_UR 0
221#define FB_ROTATE_CW 1
222#define FB_ROTATE_UD 2
223#define FB_ROTATE_CCW 3
224
225#define PICOS2KHZ(a) (1000000000UL/(a))
226#define KHZ2PICOS(a) (1000000000UL/(a))
227
228struct fb_var_screeninfo {
229 __u32 xres;
230 __u32 yres;
231 __u32 xres_virtual;
232 __u32 yres_virtual;
233 __u32 xoffset;
234 __u32 yoffset;
235
236 __u32 bits_per_pixel;
237 __u32 grayscale;
238
239 struct fb_bitfield red;
240 struct fb_bitfield green;
241 struct fb_bitfield blue;
242 struct fb_bitfield transp;
243
244 __u32 nonstd;
245
246 __u32 activate;
247
248 __u32 height;
249 __u32 width;
250
251 __u32 accel_flags;
252
253
254 __u32 pixclock;
255 __u32 left_margin;
256 __u32 right_margin;
257 __u32 upper_margin;
258 __u32 lower_margin;
259 __u32 hsync_len;
260 __u32 vsync_len;
261 __u32 sync;
262 __u32 vmode;
263 __u32 rotate;
264 __u32 reserved[5];
265};
266
267struct fb_cmap {
268 __u32 start;
269 __u32 len;
270 __u16 *red;
271 __u16 *green;
272 __u16 *blue;
273 __u16 *transp;
274};
275
276struct fb_con2fbmap {
277 __u32 console;
278 __u32 framebuffer;
279};
280
281
282#define VESA_NO_BLANKING 0
283#define VESA_VSYNC_SUSPEND 1
284#define VESA_HSYNC_SUSPEND 2
285#define VESA_POWERDOWN 3
286
287
288enum {
289
290 FB_BLANK_UNBLANK = VESA_NO_BLANKING,
291
292
293 FB_BLANK_NORMAL = VESA_NO_BLANKING + 1,
294
295
296 FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1,
297
298
299 FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1,
300
301
302 FB_BLANK_POWERDOWN = VESA_POWERDOWN + 1
303};
304
305#define FB_VBLANK_VBLANKING 0x001
306#define FB_VBLANK_HBLANKING 0x002
307#define FB_VBLANK_HAVE_VBLANK 0x004
308#define FB_VBLANK_HAVE_HBLANK 0x008
309#define FB_VBLANK_HAVE_COUNT 0x010
310#define FB_VBLANK_HAVE_VCOUNT 0x020
311#define FB_VBLANK_HAVE_HCOUNT 0x040
312#define FB_VBLANK_VSYNCING 0x080
313#define FB_VBLANK_HAVE_VSYNC 0x100
314
315struct fb_vblank {
316 __u32 flags;
317 __u32 count;
318 __u32 vcount;
319 __u32 hcount;
320 __u32 reserved[4];
321};
322
323
324#define ROP_COPY 0
325#define ROP_XOR 1
326
327struct fb_copyarea {
328 __u32 dx;
329 __u32 dy;
330 __u32 width;
331 __u32 height;
332 __u32 sx;
333 __u32 sy;
334};
335
336struct fb_fillrect {
337 __u32 dx;
338 __u32 dy;
339 __u32 width;
340 __u32 height;
341 __u32 color;
342 __u32 rop;
343};
344
345struct fb_image {
346 __u32 dx;
347 __u32 dy;
348 __u32 width;
349 __u32 height;
350 __u32 fg_color;
351 __u32 bg_color;
352 __u8 depth;
353 const char *data;
354 struct fb_cmap cmap;
355};
356
357
358
359
360
361#define FB_CUR_SETIMAGE 0x01
362#define FB_CUR_SETPOS 0x02
363#define FB_CUR_SETHOT 0x04
364#define FB_CUR_SETCMAP 0x08
365#define FB_CUR_SETSHAPE 0x10
366#define FB_CUR_SETSIZE 0x20
367#define FB_CUR_SETALL 0xFF
368
369struct fbcurpos {
370 __u16 x, y;
371};
372
373struct fb_cursor {
374 __u16 set;
375 __u16 enable;
376 __u16 rop;
377 const char *mask;
378 struct fbcurpos hot;
379 struct fb_image image;
380};
381
382#ifdef CONFIG_FB_BACKLIGHT
383
384#define FB_BACKLIGHT_LEVELS 128
385#define FB_BACKLIGHT_MAX 0xFF
386#endif
387
388#ifdef __KERNEL__
389
390#include <linux/fs.h>
391#include <linux/init.h>
392#include <linux/device.h>
393#include <linux/workqueue.h>
394#include <linux/notifier.h>
395#include <linux/list.h>
396#include <linux/backlight.h>
397#include <asm/io.h>
398
399struct vm_area_struct;
400struct fb_info;
401struct device;
402struct file;
403
404
405#define FB_DPMS_ACTIVE_OFF 1
406#define FB_DPMS_SUSPEND 2
407#define FB_DPMS_STANDBY 4
408
409#define FB_DISP_DDI 1
410#define FB_DISP_ANA_700_300 2
411#define FB_DISP_ANA_714_286 4
412#define FB_DISP_ANA_1000_400 8
413#define FB_DISP_ANA_700_000 16
414
415#define FB_DISP_MONO 32
416#define FB_DISP_RGB 64
417#define FB_DISP_MULTI 128
418#define FB_DISP_UNKNOWN 256
419
420#define FB_SIGNAL_NONE 0
421#define FB_SIGNAL_BLANK_BLANK 1
422#define FB_SIGNAL_SEPARATE 2
423#define FB_SIGNAL_COMPOSITE 4
424#define FB_SIGNAL_SYNC_ON_GREEN 8
425#define FB_SIGNAL_SERRATION_ON 16
426
427#define FB_MISC_PRIM_COLOR 1
428#define FB_MISC_1ST_DETAIL 2
429struct fb_chroma {
430 __u32 redx;
431 __u32 greenx;
432 __u32 bluex;
433 __u32 whitex;
434 __u32 redy;
435 __u32 greeny;
436 __u32 bluey;
437 __u32 whitey;
438};
439
440struct fb_monspecs {
441 struct fb_chroma chroma;
442 struct fb_videomode *modedb;
443 __u8 manufacturer[4];
444 __u8 monitor[14];
445 __u8 serial_no[14];
446 __u8 ascii[14];
447 __u32 modedb_len;
448 __u32 model;
449 __u32 serial;
450 __u32 year;
451 __u32 week;
452 __u32 hfmin;
453 __u32 hfmax;
454 __u32 dclkmin;
455 __u32 dclkmax;
456 __u16 input;
457 __u16 dpms;
458 __u16 signal;
459 __u16 vfmin;
460 __u16 vfmax;
461 __u16 gamma;
462 __u16 gtf : 1;
463 __u16 misc;
464 __u8 version;
465 __u8 revision;
466 __u8 max_x;
467 __u8 max_y;
468};
469
470struct fb_cmap_user {
471 __u32 start;
472 __u32 len;
473 __u16 __user *red;
474 __u16 __user *green;
475 __u16 __user *blue;
476 __u16 __user *transp;
477};
478
479struct fb_image_user {
480 __u32 dx;
481 __u32 dy;
482 __u32 width;
483 __u32 height;
484 __u32 fg_color;
485 __u32 bg_color;
486 __u8 depth;
487 const char __user *data;
488 struct fb_cmap_user cmap;
489};
490
491struct fb_cursor_user {
492 __u16 set;
493 __u16 enable;
494 __u16 rop;
495 const char __user *mask;
496 struct fbcurpos hot;
497 struct fb_image_user image;
498};
499
500
501
502
503
504
505#define FB_EVENT_MODE_CHANGE 0x01
506
507
508
509#define FB_EVENT_SUSPEND 0x02
510
511
512
513#define FB_EVENT_RESUME 0x03
514
515#define FB_EVENT_MODE_DELETE 0x04
516
517#define FB_EVENT_FB_REGISTERED 0x05
518
519#define FB_EVENT_FB_UNREGISTERED 0x06
520
521#define FB_EVENT_GET_CONSOLE_MAP 0x07
522
523#define FB_EVENT_SET_CONSOLE_MAP 0x08
524
525#define FB_EVENT_BLANK 0x09
526
527#define FB_EVENT_NEW_MODELIST 0x0A
528
529
530#define FB_EVENT_MODE_CHANGE_ALL 0x0B
531
532#define FB_EVENT_CONBLANK 0x0C
533
534#define FB_EVENT_GET_REQ 0x0D
535
536#define FB_EVENT_FB_UNBIND 0x0E
537
538struct fb_event {
539 struct fb_info *info;
540 void *data;
541};
542
543struct fb_blit_caps {
544 u32 x;
545 u32 y;
546 u32 len;
547 u32 flags;
548};
549
550extern int fb_register_client(struct notifier_block *nb);
551extern int fb_unregister_client(struct notifier_block *nb);
552extern int fb_notifier_call_chain(unsigned long val, void *v);
553
554
555
556
557
558
559
560
561#define FB_PIXMAP_DEFAULT 1
562#define FB_PIXMAP_SYSTEM 2
563#define FB_PIXMAP_IO 4
564#define FB_PIXMAP_SYNC 256
565
566struct fb_pixmap {
567 u8 *addr;
568 u32 size;
569 u32 offset;
570 u32 buf_align;
571 u32 scan_align;
572 u32 access_align;
573 u32 flags;
574 u32 blit_x;
575 u32 blit_y;
576
577
578
579 void (*writeio)(struct fb_info *info, void __iomem *dst, void *src, unsigned int size);
580 void (*readio) (struct fb_info *info, void *dst, void __iomem *src, unsigned int size);
581};
582
583#ifdef CONFIG_FB_DEFERRED_IO
584struct fb_deferred_io {
585
586 unsigned long delay;
587 struct mutex lock;
588 struct list_head pagelist;
589
590 void (*deferred_io)(struct fb_info *info, struct list_head *pagelist);
591};
592#endif
593
594
595
596
597
598
599
600
601
602struct fb_ops {
603
604 struct module *owner;
605 int (*fb_open)(struct fb_info *info, int user);
606 int (*fb_release)(struct fb_info *info, int user);
607
608
609
610
611 ssize_t (*fb_read)(struct fb_info *info, char __user *buf,
612 size_t count, loff_t *ppos);
613 ssize_t (*fb_write)(struct fb_info *info, const char __user *buf,
614 size_t count, loff_t *ppos);
615
616
617
618 int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);
619
620
621 int (*fb_set_par)(struct fb_info *info);
622
623
624 int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green,
625 unsigned blue, unsigned transp, struct fb_info *info);
626
627
628 int (*fb_setcmap)(struct fb_cmap *cmap, struct fb_info *info);
629
630
631 int (*fb_blank)(int blank, struct fb_info *info);
632
633
634 int (*fb_pan_display)(struct fb_var_screeninfo *var, struct fb_info *info);
635
636
637 void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);
638
639 void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);
640
641 void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);
642
643
644 int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor);
645
646
647 void (*fb_rotate)(struct fb_info *info, int angle);
648
649
650 int (*fb_sync)(struct fb_info *info);
651
652
653 int (*fb_ioctl)(struct fb_info *info, unsigned int cmd,
654 unsigned long arg);
655
656
657 int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd,
658 unsigned long arg);
659
660
661 int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma);
662
663
664 void (*fb_save_state)(struct fb_info *info);
665
666
667 void (*fb_restore_state)(struct fb_info *info);
668
669
670 void (*fb_get_caps)(struct fb_info *info, struct fb_blit_caps *caps,
671 struct fb_var_screeninfo *var);
672};
673
674#ifdef CONFIG_FB_TILEBLITTING
675#define FB_TILE_CURSOR_NONE 0
676#define FB_TILE_CURSOR_UNDERLINE 1
677#define FB_TILE_CURSOR_LOWER_THIRD 2
678#define FB_TILE_CURSOR_LOWER_HALF 3
679#define FB_TILE_CURSOR_TWO_THIRDS 4
680#define FB_TILE_CURSOR_BLOCK 5
681
682struct fb_tilemap {
683 __u32 width;
684 __u32 height;
685 __u32 depth;
686 __u32 length;
687 const __u8 *data;
688
689};
690
691struct fb_tilerect {
692 __u32 sx;
693 __u32 sy;
694 __u32 width;
695 __u32 height;
696 __u32 index;
697 __u32 fg;
698 __u32 bg;
699 __u32 rop;
700};
701
702struct fb_tilearea {
703 __u32 sx;
704 __u32 sy;
705 __u32 dx;
706 __u32 dy;
707 __u32 width;
708 __u32 height;
709};
710
711struct fb_tileblit {
712 __u32 sx;
713 __u32 sy;
714 __u32 width;
715 __u32 height;
716 __u32 fg;
717 __u32 bg;
718 __u32 length;
719 __u32 *indices;
720};
721
722struct fb_tilecursor {
723 __u32 sx;
724 __u32 sy;
725 __u32 mode;
726 __u32 shape;
727 __u32 fg;
728 __u32 bg;
729};
730
731struct fb_tile_ops {
732
733 void (*fb_settile)(struct fb_info *info, struct fb_tilemap *map);
734
735
736
737
738 void (*fb_tilecopy)(struct fb_info *info, struct fb_tilearea *area);
739
740 void (*fb_tilefill)(struct fb_info *info, struct fb_tilerect *rect);
741
742 void (*fb_tileblit)(struct fb_info *info, struct fb_tileblit *blit);
743
744 void (*fb_tilecursor)(struct fb_info *info,
745 struct fb_tilecursor *cursor);
746
747 int (*fb_get_tilemax)(struct fb_info *info);
748};
749#endif
750
751
752#define FBINFO_MODULE 0x0001
753#define FBINFO_HWACCEL_DISABLED 0x0002
754
755
756
757
758
759
760#define FBINFO_PARTIAL_PAN_OK 0x0040
761#define FBINFO_READS_FAST 0x0080
762
763
764
765
766
767
768
769#define FBINFO_HWACCEL_NONE 0x0000
770#define FBINFO_HWACCEL_COPYAREA 0x0100
771#define FBINFO_HWACCEL_FILLRECT 0x0200
772#define FBINFO_HWACCEL_IMAGEBLIT 0x0400
773#define FBINFO_HWACCEL_ROTATE 0x0800
774#define FBINFO_HWACCEL_XPAN 0x1000
775#define FBINFO_HWACCEL_YPAN 0x2000
776#define FBINFO_HWACCEL_YWRAP 0x4000
777
778#define FBINFO_MISC_USEREVENT 0x10000
779
780#define FBINFO_MISC_TILEBLITTING 0x20000
781
782
783
784
785
786
787
788
789
790
791
792#define FBINFO_MISC_ALWAYS_SETPAR 0x40000
793
794struct fb_info {
795 int node;
796 int flags;
797 struct fb_var_screeninfo var;
798 struct fb_fix_screeninfo fix;
799 struct fb_monspecs monspecs;
800 struct work_struct queue;
801 struct fb_pixmap pixmap;
802 struct fb_pixmap sprite;
803 struct fb_cmap cmap;
804 struct list_head modelist;
805 struct fb_videomode *mode;
806
807#ifdef CONFIG_FB_BACKLIGHT
808
809
810
811 struct backlight_device *bl_dev;
812
813
814 struct mutex bl_curve_mutex;
815 u8 bl_curve[FB_BACKLIGHT_LEVELS];
816#endif
817#ifdef CONFIG_FB_DEFERRED_IO
818 struct delayed_work deferred_work;
819 struct fb_deferred_io *fbdefio;
820#endif
821
822 struct fb_ops *fbops;
823 struct device *device;
824 struct device *dev;
825 int class_flag;
826#ifdef CONFIG_FB_TILEBLITTING
827 struct fb_tile_ops *tileops;
828#endif
829 char __iomem *screen_base;
830 unsigned long screen_size;
831 void *pseudo_palette;
832#define FBINFO_STATE_RUNNING 0
833#define FBINFO_STATE_SUSPENDED 1
834 u32 state;
835 void *fbcon_par;
836
837 void *par;
838};
839
840#ifdef MODULE
841#define FBINFO_DEFAULT FBINFO_MODULE
842#else
843#define FBINFO_DEFAULT 0
844#endif
845
846
847#define FBINFO_FLAG_MODULE FBINFO_MODULE
848#define FBINFO_FLAG_DEFAULT FBINFO_DEFAULT
849
850
851
852
853
854
855
856#define STUPID_ACCELF_TEXT_SHIT
857
858
859#if defined(__sparc__)
860
861
862
863
864
865
866#define fb_readb sbus_readb
867#define fb_readw sbus_readw
868#define fb_readl sbus_readl
869#define fb_readq sbus_readq
870#define fb_writeb sbus_writeb
871#define fb_writew sbus_writew
872#define fb_writel sbus_writel
873#define fb_writeq sbus_writeq
874#define fb_memset sbus_memset_io
875
876#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || defined(__hppa__) || (defined(__sh__) && !defined(__SH5__)) || defined(__powerpc__) || defined(__avr32__)
877
878#define fb_readb __raw_readb
879#define fb_readw __raw_readw
880#define fb_readl __raw_readl
881#define fb_readq __raw_readq
882#define fb_writeb __raw_writeb
883#define fb_writew __raw_writew
884#define fb_writel __raw_writel
885#define fb_writeq __raw_writeq
886#define fb_memset memset_io
887
888#else
889
890#define fb_readb(addr) (*(volatile u8 *) (addr))
891#define fb_readw(addr) (*(volatile u16 *) (addr))
892#define fb_readl(addr) (*(volatile u32 *) (addr))
893#define fb_readq(addr) (*(volatile u64 *) (addr))
894#define fb_writeb(b,addr) (*(volatile u8 *) (addr) = (b))
895#define fb_writew(b,addr) (*(volatile u16 *) (addr) = (b))
896#define fb_writel(b,addr) (*(volatile u32 *) (addr) = (b))
897#define fb_writeq(b,addr) (*(volatile u64 *) (addr) = (b))
898#define fb_memset memset
899
900#endif
901
902#if defined (__BIG_ENDIAN)
903#define FB_LEFT_POS(bpp) (32 - bpp)
904#define FB_SHIFT_HIGH(val, bits) ((val) >> (bits))
905#define FB_SHIFT_LOW(val, bits) ((val) << (bits))
906#else
907#define FB_LEFT_POS(bpp) (0)
908#define FB_SHIFT_HIGH(val, bits) ((val) << (bits))
909#define FB_SHIFT_LOW(val, bits) ((val) >> (bits))
910#endif
911
912
913
914
915
916extern int fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var);
917extern int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var);
918extern int fb_blank(struct fb_info *info, int blank);
919extern void cfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
920extern void cfb_copyarea(struct fb_info *info, const struct fb_copyarea *area);
921extern void cfb_imageblit(struct fb_info *info, const struct fb_image *image);
922
923
924
925extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
926extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
927extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
928extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
929 size_t count, loff_t *ppos);
930extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
931 size_t count, loff_t *ppos);
932
933
934extern int register_framebuffer(struct fb_info *fb_info);
935extern int unregister_framebuffer(struct fb_info *fb_info);
936extern int fb_prepare_logo(struct fb_info *fb_info, int rotate);
937extern int fb_show_logo(struct fb_info *fb_info, int rotate);
938extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size);
939extern void fb_pad_unaligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 idx,
940 u32 height, u32 shift_high, u32 shift_low, u32 mod);
941extern void fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch, u32 height);
942extern void fb_set_suspend(struct fb_info *info, int state);
943extern int fb_get_color_depth(struct fb_var_screeninfo *var,
944 struct fb_fix_screeninfo *fix);
945extern int fb_get_options(char *name, char **option);
946extern int fb_new_modelist(struct fb_info *info);
947
948extern struct fb_info *registered_fb[FB_MAX];
949extern int num_registered_fb;
950extern struct class *fb_class;
951
952static inline void __fb_pad_aligned_buffer(u8 *dst, u32 d_pitch,
953 u8 *src, u32 s_pitch, u32 height)
954{
955 int i, j;
956
957 d_pitch -= s_pitch;
958
959 for (i = height; i--; ) {
960
961 for (j = 0; j < s_pitch; j++)
962 *dst++ = *src++;
963 dst += d_pitch;
964 }
965}
966
967
968extern void fb_deferred_io_init(struct fb_info *info);
969extern void fb_deferred_io_cleanup(struct fb_info *info);
970extern int fb_deferred_io_fsync(struct file *file, struct dentry *dentry,
971 int datasync);
972
973
974extern struct fb_info *framebuffer_alloc(size_t size, struct device *dev);
975extern void framebuffer_release(struct fb_info *info);
976extern int fb_init_device(struct fb_info *fb_info);
977extern void fb_cleanup_device(struct fb_info *head);
978extern void fb_bl_default_curve(struct fb_info *fb_info, u8 off, u8 min, u8 max);
979
980
981#define FB_MAXTIMINGS 0
982#define FB_VSYNCTIMINGS 1
983#define FB_HSYNCTIMINGS 2
984#define FB_DCLKTIMINGS 3
985#define FB_IGNOREMON 0x100
986
987#define FB_MODE_IS_UNKNOWN 0
988#define FB_MODE_IS_DETAILED 1
989#define FB_MODE_IS_STANDARD 2
990#define FB_MODE_IS_VESA 4
991#define FB_MODE_IS_CALCULATED 8
992#define FB_MODE_IS_FIRST 16
993#define FB_MODE_IS_FROM_VAR 32
994
995extern int fbmon_dpms(const struct fb_info *fb_info);
996extern int fb_get_mode(int flags, u32 val, struct fb_var_screeninfo *var,
997 struct fb_info *info);
998extern int fb_validate_mode(const struct fb_var_screeninfo *var,
999 struct fb_info *info);
1000extern int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var);
1001extern const unsigned char *fb_firmware_edid(struct device *device);
1002extern void fb_edid_to_monspecs(unsigned char *edid,
1003 struct fb_monspecs *specs);
1004extern void fb_destroy_modedb(struct fb_videomode *modedb);
1005extern int fb_find_mode_cvt(struct fb_videomode *mode, int margins, int rb);
1006extern unsigned char *fb_ddc_read(struct i2c_adapter *adapter);
1007
1008
1009#define VESA_MODEDB_SIZE 34
1010extern void fb_var_to_videomode(struct fb_videomode *mode,
1011 const struct fb_var_screeninfo *var);
1012extern void fb_videomode_to_var(struct fb_var_screeninfo *var,
1013 const struct fb_videomode *mode);
1014extern int fb_mode_is_equal(const struct fb_videomode *mode1,
1015 const struct fb_videomode *mode2);
1016extern int fb_add_videomode(const struct fb_videomode *mode,
1017 struct list_head *head);
1018extern void fb_delete_videomode(const struct fb_videomode *mode,
1019 struct list_head *head);
1020extern const struct fb_videomode *fb_match_mode(const struct fb_var_screeninfo *var,
1021 struct list_head *head);
1022extern const struct fb_videomode *fb_find_best_mode(const struct fb_var_screeninfo *var,
1023 struct list_head *head);
1024extern const struct fb_videomode *fb_find_nearest_mode(const struct fb_videomode *mode,
1025 struct list_head *head);
1026extern void fb_destroy_modelist(struct list_head *head);
1027extern void fb_videomode_to_modelist(const struct fb_videomode *modedb, int num,
1028 struct list_head *head);
1029extern const struct fb_videomode *fb_find_best_display(const struct fb_monspecs *specs,
1030 struct list_head *head);
1031
1032
1033extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp);
1034extern void fb_dealloc_cmap(struct fb_cmap *cmap);
1035extern int fb_copy_cmap(const struct fb_cmap *from, struct fb_cmap *to);
1036extern int fb_cmap_to_user(const struct fb_cmap *from, struct fb_cmap_user *to);
1037extern int fb_set_cmap(struct fb_cmap *cmap, struct fb_info *fb_info);
1038extern int fb_set_user_cmap(struct fb_cmap_user *cmap, struct fb_info *fb_info);
1039extern const struct fb_cmap *fb_default_cmap(int len);
1040extern void fb_invert_cmaps(void);
1041
1042struct fb_videomode {
1043 const char *name;
1044 u32 refresh;
1045 u32 xres;
1046 u32 yres;
1047 u32 pixclock;
1048 u32 left_margin;
1049 u32 right_margin;
1050 u32 upper_margin;
1051 u32 lower_margin;
1052 u32 hsync_len;
1053 u32 vsync_len;
1054 u32 sync;
1055 u32 vmode;
1056 u32 flag;
1057};
1058
1059extern const char *fb_mode_option;
1060extern const struct fb_videomode vesa_modes[];
1061
1062struct fb_modelist {
1063 struct list_head list;
1064 struct fb_videomode mode;
1065};
1066
1067extern int fb_find_mode(struct fb_var_screeninfo *var,
1068 struct fb_info *info, const char *mode_option,
1069 const struct fb_videomode *db,
1070 unsigned int dbsize,
1071 const struct fb_videomode *default_mode,
1072 unsigned int default_bpp);
1073
1074#endif
1075
1076#endif
1077