Blame view

include/linux/fb.h 29 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  #ifndef _LINUX_FB_H
  #define _LINUX_FB_H
d219adc12   Jesse Barnes   fb: add hooks to ...
3
  #include <linux/kgdb.h>
607ca46e9   David Howells   UAPI: (Scripted) ...
4
  #include <uapi/linux/fb.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
6
  #define FBIO_CURSOR            _IOWR('F', 0x08, struct fb_cursor_user)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
8
9
  
  #include <linux/fs.h>
  #include <linux/init.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
10
  #include <linux/workqueue.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
12
  #include <linux/notifier.h>
  #include <linux/list.h>
2b2574255   Michal Januszewski   [PATCH] fbdev: in...
13
  #include <linux/backlight.h>
1471ca9aa   Marcin Slusarz   fbdev: allow pass...
14
  #include <linux/slab.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
15
16
17
18
19
20
  #include <asm/io.h>
  
  struct vm_area_struct;
  struct fb_info;
  struct device;
  struct file;
2db54c723   Steffen Trumtrar   fbmon: add videom...
21
  struct videomode;
790890444   Steffen Trumtrar   fbmon: add of_vid...
22
  struct device_node;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
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
  
  /* Definitions below are used in the parsed monitor specs */
  #define FB_DPMS_ACTIVE_OFF	1
  #define FB_DPMS_SUSPEND		2
  #define FB_DPMS_STANDBY		4
  
  #define FB_DISP_DDI		1
  #define FB_DISP_ANA_700_300	2
  #define FB_DISP_ANA_714_286	4
  #define FB_DISP_ANA_1000_400	8
  #define FB_DISP_ANA_700_000	16
  
  #define FB_DISP_MONO		32
  #define FB_DISP_RGB		64
  #define FB_DISP_MULTI		128
  #define FB_DISP_UNKNOWN		256
  
  #define FB_SIGNAL_NONE		0
  #define FB_SIGNAL_BLANK_BLANK	1
  #define FB_SIGNAL_SEPARATE	2
  #define FB_SIGNAL_COMPOSITE	4
  #define FB_SIGNAL_SYNC_ON_GREEN	8
  #define FB_SIGNAL_SERRATION_ON	16
  
  #define FB_MISC_PRIM_COLOR	1
  #define FB_MISC_1ST_DETAIL	2	/* First Detailed Timing is preferred */
e6853aafd   David Ung   video: Check EDID...
49
  #define FB_MISC_HDMI		4
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
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
  struct fb_chroma {
  	__u32 redx;	/* in fraction of 1024 */
  	__u32 greenx;
  	__u32 bluex;
  	__u32 whitex;
  	__u32 redy;
  	__u32 greeny;
  	__u32 bluey;
  	__u32 whitey;
  };
  
  struct fb_monspecs {
  	struct fb_chroma chroma;
  	struct fb_videomode *modedb;	/* mode database */
  	__u8  manufacturer[4];		/* Manufacturer */
  	__u8  monitor[14];		/* Monitor String */
  	__u8  serial_no[14];		/* Serial Number */
  	__u8  ascii[14];		/* ? */
  	__u32 modedb_len;		/* mode database length */
  	__u32 model;			/* Monitor Model */
  	__u32 serial;			/* Serial Number - Integer */
  	__u32 year;			/* Year manufactured */
  	__u32 week;			/* Week Manufactured */
  	__u32 hfmin;			/* hfreq lower limit (Hz) */
  	__u32 hfmax;			/* hfreq upper limit (Hz) */
  	__u32 dclkmin;			/* pixelclock lower limit (Hz) */
  	__u32 dclkmax;			/* pixelclock upper limit (Hz) */
  	__u16 input;			/* display type - see FB_DISP_* */
  	__u16 dpms;			/* DPMS support - see FB_DPMS_ */
  	__u16 signal;			/* Signal Type - see FB_SIGNAL_* */
  	__u16 vfmin;			/* vfreq lower limit (Hz) */
  	__u16 vfmax;			/* vfreq upper limit (Hz) */
  	__u16 gamma;			/* Gamma - in fractions of 100 */
  	__u16 gtf	: 1;		/* supports GTF */
  	__u16 misc;			/* Misc flags - see FB_MISC_* */
  	__u8  version;			/* EDID version... */
  	__u8  revision;			/* ...and revision */
  	__u8  max_x;			/* Maximum horizontal size (cm) */
  	__u8  max_y;			/* Maximum vertical size (cm) */
  };
  
  struct fb_cmap_user {
  	__u32 start;			/* First entry	*/
  	__u32 len;			/* Number of entries */
  	__u16 __user *red;		/* Red values	*/
  	__u16 __user *green;
  	__u16 __user *blue;
  	__u16 __user *transp;		/* transparency, can be NULL */
  };
  
  struct fb_image_user {
  	__u32 dx;			/* Where to place image */
  	__u32 dy;
  	__u32 width;			/* Size of image */
  	__u32 height;
  	__u32 fg_color;			/* Only used when a mono bitmap */
  	__u32 bg_color;
  	__u8  depth;			/* Depth of the image */
  	const char __user *data;	/* Pointer to image data */
  	struct fb_cmap_user cmap;	/* color map info */
  };
  
  struct fb_cursor_user {
  	__u16 set;			/* what to set */
  	__u16 enable;			/* cursor on/off */
  	__u16 rop;			/* bitop operation */
  	const char __user *mask;	/* cursor mask bits */
  	struct fbcurpos hot;		/* cursor hot spot */
  	struct fb_image_user image;	/* Cursor image */
  };
  
  /*
   * Register/unregister for framebuffer events
   */
  
  /*	The resolution of the passed in fb_info about to change */ 
  #define FB_EVENT_MODE_CHANGE		0x01
  /*	The display on this fb_info is beeing suspended, no access to the
   *	framebuffer is allowed any more after that call returns
   */
  #define FB_EVENT_SUSPEND		0x02
  /*	The display on this fb_info was resumed, you can restore the display
   *	if you own it
   */
  #define FB_EVENT_RESUME			0x03
  /*      An entry from the modelist was removed */
  #define FB_EVENT_MODE_DELETE            0x04
  /*      A driver registered itself */
  #define FB_EVENT_FB_REGISTERED          0x05
e614b18dc   Antonino A. Daplas   [PATCH] VT bindin...
139
140
  /*      A driver unregistered itself */
  #define FB_EVENT_FB_UNREGISTERED        0x06
e4fc27618   Antonino A. Daplas   [PATCH] fbcon: Co...
141
  /*      CONSOLE-SPECIFIC: get console to framebuffer mapping */
e614b18dc   Antonino A. Daplas   [PATCH] VT bindin...
142
  #define FB_EVENT_GET_CONSOLE_MAP        0x07
e4fc27618   Antonino A. Daplas   [PATCH] fbcon: Co...
143
  /*      CONSOLE-SPECIFIC: set console to framebuffer mapping */
e614b18dc   Antonino A. Daplas   [PATCH] VT bindin...
144
  #define FB_EVENT_SET_CONSOLE_MAP        0x08
25985edce   Lucas De Marchi   Fix common misspe...
145
  /*      A hardware display blank change occurred */
e614b18dc   Antonino A. Daplas   [PATCH] VT bindin...
146
  #define FB_EVENT_BLANK                  0x09
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
147
  /*      Private modelist is to be replaced */
e614b18dc   Antonino A. Daplas   [PATCH] VT bindin...
148
  #define FB_EVENT_NEW_MODELIST           0x0A
7726e9e10   Antonino A. Daplas   [PATCH] fbdev: Ad...
149
150
  /*	The resolution of the passed in fb_info about to change and
          all vc's should be changed         */
e614b18dc   Antonino A. Daplas   [PATCH] VT bindin...
151
  #define FB_EVENT_MODE_CHANGE_ALL	0x0B
25985edce   Lucas De Marchi   Fix common misspe...
152
  /*	A software display blank change occurred */
994efacdf   Richard Purdie   backlight/fbcon: ...
153
  #define FB_EVENT_CONBLANK               0x0C
38a3dc518   Antonino A. Daplas   fbdev: fbcon: che...
154
155
  /*      Get drawing requirements        */
  #define FB_EVENT_GET_REQ                0x0D
cfafca806   Jesse Barnes   fbdev: fbcon: con...
156
157
  /*      Unbind from the console if possible */
  #define FB_EVENT_FB_UNBIND              0x0E
f15a66e68   Lukas Wunner   drm: Spell vga_sw...
158
  /*      CONSOLE-SPECIFIC: remap all consoles to new fb - for vga_switcheroo */
6a9ee8af3   Dave Airlie   vga_switcheroo: i...
159
  #define FB_EVENT_REMAP_ALL_CONSOLE      0x0F
bf05929f4   Inki Dae   fbdev: add events...
160
161
162
163
  /*      A hardware display blank early change occured */
  #define FB_EARLY_EVENT_BLANK		0x10
  /*      A hardware display blank revert early change occured */
  #define FB_R_EARLY_EVENT_BLANK		0x11
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
164
165
166
167
168
  
  struct fb_event {
  	struct fb_info *info;
  	void *data;
  };
38a3dc518   Antonino A. Daplas   fbdev: fbcon: che...
169
170
171
172
173
174
  struct fb_blit_caps {
  	u32 x;
  	u32 y;
  	u32 len;
  	u32 flags;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
175

5ec965380   Ezequiel Garcia   fbdev: Make fb-no...
176
  #ifdef CONFIG_FB_NOTIFY
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
177
178
  extern int fb_register_client(struct notifier_block *nb);
  extern int fb_unregister_client(struct notifier_block *nb);
256154fbc   Antonino A. Daplas   [PATCH] fbdev: st...
179
  extern int fb_notifier_call_chain(unsigned long val, void *v);
5ec965380   Ezequiel Garcia   fbdev: Make fb-no...
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
  #else
  static inline int fb_register_client(struct notifier_block *nb)
  {
  	return 0;
  };
  
  static inline int fb_unregister_client(struct notifier_block *nb)
  {
  	return 0;
  };
  
  static inline int fb_notifier_call_chain(unsigned long val, void *v)
  {
  	return 0;
  };
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
  /*
   * Pixmap structure definition
   *
   * The purpose of this structure is to translate data
   * from the hardware independent format of fbdev to what
   * format the hardware needs.
   */
  
  #define FB_PIXMAP_DEFAULT 1     /* used internally by fbcon */
  #define FB_PIXMAP_SYSTEM  2     /* memory is in system RAM  */
  #define FB_PIXMAP_IO      4     /* memory is iomapped       */
  #define FB_PIXMAP_SYNC    256   /* set if GPU can DMA       */
  
  struct fb_pixmap {
  	u8  *addr;		/* pointer to memory			*/
  	u32 size;		/* size of buffer in bytes		*/
  	u32 offset;		/* current offset to buffer		*/
  	u32 buf_align;		/* byte alignment of each bitmap	*/
  	u32 scan_align;		/* alignment per scanline		*/
f5a9951c9   James Simmons   [PATCH] fbdev: io...
215
  	u32 access_align;	/* alignment per read/write (bits)	*/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
216
  	u32 flags;		/* see FB_PIXMAP_*			*/
bf26ad72a   Antonino A. Daplas   fbdev: advertise ...
217
218
219
220
  	u32 blit_x;             /* supported bit block dimensions (1-32)*/
  	u32 blit_y;             /* Format: blit_x = 1 << (width - 1)    */
  	                        /*         blit_y = 1 << (height - 1)   */
  	                        /* if 0, will be set to 0xffffffff (all)*/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
221
  	/* access methods */
f5a9951c9   James Simmons   [PATCH] fbdev: io...
222
223
  	void (*writeio)(struct fb_info *info, void __iomem *dst, void *src, unsigned int size);
  	void (*readio) (struct fb_info *info, void *dst, void __iomem *src, unsigned int size);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
224
  };
60b59beaf   Jaya Kumar   fbdev: mm: Deferr...
225
226
227
228
229
230
231
  #ifdef CONFIG_FB_DEFERRED_IO
  struct fb_deferred_io {
  	/* delay between mkwrite and deferred handler */
  	unsigned long delay;
  	struct mutex lock; /* mutex that protects the page list */
  	struct list_head pagelist; /* list of touched pages */
  	/* callback */
1f45f9dbb   Heiko Stübner   fb_defio: add fir...
232
  	void (*first_io)(struct fb_info *info);
60b59beaf   Jaya Kumar   fbdev: mm: Deferr...
233
234
235
  	void (*deferred_io)(struct fb_info *info, struct list_head *pagelist);
  };
  #endif
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
236
237
238
239
240
  
  /*
   * Frame buffer operations
   *
   * LOCKING NOTE: those functions must _ALL_ be called with the console
b3c2ffd53   Adrian Bunk   typo fixes: mecan...
241
   * semaphore held, this is the only suitable locking mechanism we have
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
242
   * in 2.6. Some may be called at interrupt time at this point though.
d219adc12   Jesse Barnes   fb: add hooks to ...
243
244
245
246
247
248
   *
   * The exception to this is the debug related hooks.  Putting the fb
   * into a debug state (e.g. flipping to the kernel console) and restoring
   * it must be done in a lock-free manner, so low level drivers should
   * keep track of the initial console (if applicable) and may need to
   * perform direct, unlocked hardware writes in these hooks.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
249
250
251
252
253
254
255
256
257
258
259
   */
  
  struct fb_ops {
  	/* open/release and usage marking */
  	struct module *owner;
  	int (*fb_open)(struct fb_info *info, int user);
  	int (*fb_release)(struct fb_info *info, int user);
  
  	/* For framebuffers with strange non linear layouts or that do not
  	 * work with normal memory mapped access
  	 */
3f9b0880e   Antonino A. Daplas   fbdev: pass struc...
260
261
262
263
  	ssize_t (*fb_read)(struct fb_info *info, char __user *buf,
  			   size_t count, loff_t *ppos);
  	ssize_t (*fb_write)(struct fb_info *info, const char __user *buf,
  			    size_t count, loff_t *ppos);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
264
265
266
267
268
269
270
271
272
273
274
  
  	/* checks var and eventually tweaks it to something supported,
  	 * DO NOT MODIFY PAR */
  	int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);
  
  	/* set the video mode according to info->var */
  	int (*fb_set_par)(struct fb_info *info);
  
  	/* set color register */
  	int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green,
  			    unsigned blue, unsigned transp, struct fb_info *info);
714943766   Benjamin Herrenschmidt   [PATCH] fbdev: Ba...
275
276
  	/* set color registers in batch */
  	int (*fb_setcmap)(struct fb_cmap *cmap, struct fb_info *info);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
  	/* blank display */
  	int (*fb_blank)(int blank, struct fb_info *info);
  
  	/* pan display */
  	int (*fb_pan_display)(struct fb_var_screeninfo *var, struct fb_info *info);
  
  	/* Draws a rectangle */
  	void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);
  	/* Copy data from area to another */
  	void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);
  	/* Draws a image to the display */
  	void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);
  
  	/* Draws cursor */
  	int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
292
293
294
295
  	/* wait for blit idle, optional */
  	int (*fb_sync)(struct fb_info *info);
  
  	/* perform fb specific ioctl (optional) */
67a6680d6   Christoph Hellwig   [PATCH] fbdev: Sa...
296
297
  	int (*fb_ioctl)(struct fb_info *info, unsigned int cmd,
  			unsigned long arg);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
298
299
  
  	/* Handle 32bit compat ioctl (optional) */
67a6680d6   Christoph Hellwig   [PATCH] fbdev: Sa...
300
301
  	int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd,
  			unsigned long arg);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
302
303
  
  	/* perform fb specific mmap */
216d526c8   Christoph Hellwig   [PATCH] fbdev: Sa...
304
  	int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma);
474348471   Antonino A. Daplas   [PATCH] fbcon: Ad...
305

38a3dc518   Antonino A. Daplas   fbdev: fbcon: che...
306
307
308
  	/* get capability given var */
  	void (*fb_get_caps)(struct fb_info *info, struct fb_blit_caps *caps,
  			    struct fb_var_screeninfo *var);
4410f3910   Dave Airlie   fbdev: add suppor...
309
310
311
  
  	/* teardown any resources to do with this framebuffer */
  	void (*fb_destroy)(struct fb_info *info);
d219adc12   Jesse Barnes   fb: add hooks to ...
312
313
314
315
  
  	/* called at KDB enter and leave time to prepare the console */
  	int (*fb_debug_enter)(struct fb_info *info);
  	int (*fb_debug_leave)(struct fb_info *info);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
316
317
318
  };
  
  #ifdef CONFIG_FB_TILEBLITTING
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
319
320
321
322
323
324
325
326
327
328
329
330
  #define FB_TILE_CURSOR_NONE        0
  #define FB_TILE_CURSOR_UNDERLINE   1
  #define FB_TILE_CURSOR_LOWER_THIRD 2
  #define FB_TILE_CURSOR_LOWER_HALF  3
  #define FB_TILE_CURSOR_TWO_THIRDS  4
  #define FB_TILE_CURSOR_BLOCK       5
  
  struct fb_tilemap {
  	__u32 width;                /* width of each tile in pixels */
  	__u32 height;               /* height of each tile in scanlines */
  	__u32 depth;                /* color depth of each tile */
  	__u32 length;               /* number of tiles in the map */
2f4516dbd   Jan Beulich   [PATCH] fbcon: co...
331
  	const __u8 *data;           /* actual tile map: a bitmap array, packed
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
  				       to the nearest byte */
  };
  
  struct fb_tilerect {
  	__u32 sx;                   /* origin in the x-axis */
  	__u32 sy;                   /* origin in the y-axis */
  	__u32 width;                /* number of tiles in the x-axis */
  	__u32 height;               /* number of tiles in the y-axis */
  	__u32 index;                /* what tile to use: index to tile map */
  	__u32 fg;                   /* foreground color */
  	__u32 bg;                   /* background color */
  	__u32 rop;                  /* raster operation */
  };
  
  struct fb_tilearea {
  	__u32 sx;                   /* source origin in the x-axis */
  	__u32 sy;                   /* source origin in the y-axis */
  	__u32 dx;                   /* destination origin in the x-axis */
  	__u32 dy;                   /* destination origin in the y-axis */
  	__u32 width;                /* number of tiles in the x-axis */
  	__u32 height;               /* number of tiles in the y-axis */
  };
  
  struct fb_tileblit {
  	__u32 sx;                   /* origin in the x-axis */
  	__u32 sy;                   /* origin in the y-axis */
  	__u32 width;                /* number of tiles in the x-axis */
  	__u32 height;               /* number of tiles in the y-axis */
  	__u32 fg;                   /* foreground color */
  	__u32 bg;                   /* background color */
  	__u32 length;               /* number of tiles to draw */
  	__u32 *indices;             /* array of indices to tile map */
  };
  
  struct fb_tilecursor {
  	__u32 sx;                   /* cursor position in the x-axis */
  	__u32 sy;                   /* cursor position in the y-axis */
  	__u32 mode;                 /* 0 = erase, 1 = draw */
  	__u32 shape;                /* see FB_TILE_CURSOR_* */
  	__u32 fg;                   /* foreground color */
  	__u32 bg;                   /* background color */
  };
  
  struct fb_tile_ops {
  	/* set tile characteristics */
  	void (*fb_settile)(struct fb_info *info, struct fb_tilemap *map);
  
  	/* all dimensions from hereon are in terms of tiles */
  
  	/* move a rectangular region of tiles from one area to another*/
  	void (*fb_tilecopy)(struct fb_info *info, struct fb_tilearea *area);
  	/* fill a rectangular region with a tile */
  	void (*fb_tilefill)(struct fb_info *info, struct fb_tilerect *rect);
  	/* copy an array of tiles */
  	void (*fb_tileblit)(struct fb_info *info, struct fb_tileblit *blit);
  	/* cursor */
  	void (*fb_tilecursor)(struct fb_info *info,
  			      struct fb_tilecursor *cursor);
11f11d522   Antonino A. Daplas   fbdev: add tile o...
390
391
  	/* get maximum length of the tile map */
  	int (*fb_get_tilemax)(struct fb_info *info);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
392
393
394
395
396
397
398
399
400
401
402
403
  };
  #endif /* CONFIG_FB_TILEBLITTING */
  
  /* FBINFO_* = fb_info.flags bit flags */
  #define FBINFO_MODULE		0x0001	/* Low-level driver is a module */
  #define FBINFO_HWACCEL_DISABLED	0x0002
  	/* When FBINFO_HWACCEL_DISABLED is set:
  	 *  Hardware acceleration is turned off.  Software implementations
  	 *  of required functions (copyarea(), fillrect(), and imageblit())
  	 *  takes over; acceleration engine should be in a quiescent state */
  
  /* hints */
7164bb439   Konrad Rzeszutek Wilk   fb-defio: If FBIN...
404
  #define FBINFO_VIRTFB		0x0004 /* FB is System RAM, not device. */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
  #define FBINFO_PARTIAL_PAN_OK	0x0040 /* otw use pan only for double-buffering */
  #define FBINFO_READS_FAST	0x0080 /* soft-copy faster than rendering */
  
  /* hardware supported ops */
  /*  semantics: when a bit is set, it indicates that the operation is
   *   accelerated by hardware.
   *  required functions will still work even if the bit is not set.
   *  optional functions may not even exist if the flag bit is not set.
   */
  #define FBINFO_HWACCEL_NONE		0x0000
  #define FBINFO_HWACCEL_COPYAREA		0x0100 /* required */
  #define FBINFO_HWACCEL_FILLRECT		0x0200 /* required */
  #define FBINFO_HWACCEL_IMAGEBLIT	0x0400 /* required */
  #define FBINFO_HWACCEL_ROTATE		0x0800 /* optional */
  #define FBINFO_HWACCEL_XPAN		0x1000 /* optional */
  #define FBINFO_HWACCEL_YPAN		0x2000 /* optional */
  #define FBINFO_HWACCEL_YWRAP		0x4000 /* optional */
  
  #define FBINFO_MISC_USEREVENT          0x10000 /* event request
  						  from userspace */
  #define FBINFO_MISC_TILEBLITTING       0x20000 /* use tile blitting */
39942fd8f   Knut Petersen   [PATCH] fbdev: fi...
426
427
  /* A driver may set this flag to indicate that it does want a set_par to be
   * called every time when fbcon_switch is executed. The advantage is that with
7f927fcc2   Alexey Dobriyan   [PATCH] Typo fixes
428
   * this flag set you can really be sure that set_par is always called before
25985edce   Lucas De Marchi   Fix common misspe...
429
   * any of the functions dependent on the correct hardware state or altering
39942fd8f   Knut Petersen   [PATCH] fbdev: fi...
430
431
432
433
434
435
436
   * that state, even if you are using some broken X releases. The disadvantage
   * is that it introduces unwanted delays to every console switch if set_par
   * is slow. It is a good idea to try this flag in the drivers initialization
   * code whenever there is a bug report related to switching between X and the
   * framebuffer console.
   */
  #define FBINFO_MISC_ALWAYS_SETPAR   0x40000
b26c94975   Dave Airlie   fb: fix colliding...
437
438
  /* where the fb is a firmware driver, and can be replaced with a proper one */
  #define FBINFO_MISC_FIRMWARE        0x80000
e4c690e06   Anton Vorontsov   fb: add support f...
439
440
441
442
443
444
445
446
447
448
  /*
   * Host and GPU endianness differ.
   */
  #define FBINFO_FOREIGN_ENDIAN	0x100000
  /*
   * Big endian math. This is the same flags as above, but with different
   * meaning, it is set by the fb subsystem depending FOREIGN_ENDIAN flag
   * and host endianness. Drivers should not use this flag.
   */
  #define FBINFO_BE_MATH  0x100000
8fd4bd223   Jesse Barnes   vt/console: try h...
449
450
451
  /* report to the VT layer that this fb driver can accept forced console
     output like oopses */
  #define FBINFO_CAN_FORCE_OUTPUT     0x200000
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
452
  struct fb_info {
698b36827   Linus Torvalds   fbcon: add lifeti...
453
  	atomic_t count;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
454
455
  	int node;
  	int flags;
3e680aae4   Krzysztof Helt   fb: convert lock/...
456
  	struct mutex lock;		/* Lock for open/release/ioctl funcs */
537a1bf05   Krzysztof Helt   fbdev: add mutex ...
457
  	struct mutex mm_lock;		/* Lock for fb_mmap and smem_* fields */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
458
459
460
461
462
463
464
465
466
  	struct fb_var_screeninfo var;	/* Current var */
  	struct fb_fix_screeninfo fix;	/* Current fix */
  	struct fb_monspecs monspecs;	/* Current Monitor specs */
  	struct work_struct queue;	/* Framebuffer event queue */
  	struct fb_pixmap pixmap;	/* Image hardware mapper */
  	struct fb_pixmap sprite;	/* Cursor hardware mapper */
  	struct fb_cmap cmap;		/* Current cmap */
  	struct list_head modelist;      /* mode list */
  	struct fb_videomode *mode;	/* current mode */
5474c120a   Michael Hanselmann   [PATCH] Rewritten...
467
468
  
  #ifdef CONFIG_FB_BACKLIGHT
5474c120a   Michael Hanselmann   [PATCH] Rewritten...
469
  	/* assigned backlight device */
37ce69a57   Richard Purdie   backlight: Rework...
470
471
  	/* set before framebuffer registration, 
  	   remove after unregister */
5474c120a   Michael Hanselmann   [PATCH] Rewritten...
472
473
474
  	struct backlight_device *bl_dev;
  
  	/* Backlight level curve */
37ce69a57   Richard Purdie   backlight: Rework...
475
  	struct mutex bl_curve_mutex;	
5474c120a   Michael Hanselmann   [PATCH] Rewritten...
476
477
  	u8 bl_curve[FB_BACKLIGHT_LEVELS];
  #endif
60b59beaf   Jaya Kumar   fbdev: mm: Deferr...
478
479
480
481
  #ifdef CONFIG_FB_DEFERRED_IO
  	struct delayed_work deferred_work;
  	struct fb_deferred_io *fbdefio;
  #endif
5474c120a   Michael Hanselmann   [PATCH] Rewritten...
482

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
483
  	struct fb_ops *fbops;
78cde0887   Greg Kroah-Hartman   Driver core: conv...
484
485
  	struct device *device;		/* This is the parent */
  	struct device *dev;		/* This is this fb device */
1a6600be3   Antonino A. Daplas   [PATCH] fbdev: Ho...
486
  	int class_flag;                    /* private sysfs flags */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
487
488
489
  #ifdef CONFIG_FB_TILEBLITTING
  	struct fb_tile_ops *tileops;    /* Tile Blitting */
  #endif
17a7b0b4d   Lars Svensson   fb.h: Provide alt...
490
491
492
493
  	union {
  		char __iomem *screen_base;	/* Virtual address */
  		char *screen_buffer;
  	};
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
494
495
496
497
498
499
500
  	unsigned long screen_size;	/* Amount of ioremapped VRAM or 0 */ 
  	void *pseudo_palette;		/* Fake palette of 16 colors */ 
  #define FBINFO_STATE_RUNNING	0
  #define FBINFO_STATE_SUSPENDED	1
  	u32 state;			/* Hardware state i.e suspend */
  	void *fbcon_par;                /* fbcon use-only private area */
  	/* From here on everything is device dependent */
4410f3910   Dave Airlie   fbdev: add suppor...
501
  	void *par;
25985edce   Lucas De Marchi   Fix common misspe...
502
  	/* we need the PCI or similar aperture base/size not
4410f3910   Dave Airlie   fbdev: add suppor...
503
504
  	   smem_start/size as smem_start may just be an object
  	   allocated inside the aperture so may not actually overlap */
1471ca9aa   Marcin Slusarz   fbdev: allow pass...
505
506
507
508
509
510
511
  	struct apertures_struct {
  		unsigned int count;
  		struct aperture {
  			resource_size_t base;
  			resource_size_t size;
  		} ranges[0];
  	} *apertures;
3cf2667b9   Jesse Barnes   fb: add support f...
512
513
  
  	bool skip_vt_switch; /* no VT switch on suspend/resume required */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
514
  };
1471ca9aa   Marcin Slusarz   fbdev: allow pass...
515
516
517
  static inline struct apertures_struct *alloc_apertures(unsigned int max_num) {
  	struct apertures_struct *a = kzalloc(sizeof(struct apertures_struct)
  			+ max_num * sizeof(struct aperture), GFP_KERNEL);
772a2f9b4   Dan Carpenter   fb: handle alloca...
518
519
  	if (!a)
  		return NULL;
1471ca9aa   Marcin Slusarz   fbdev: allow pass...
520
521
522
  	a->count = max_num;
  	return a;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
  #ifdef MODULE
  #define FBINFO_DEFAULT	FBINFO_MODULE
  #else
  #define FBINFO_DEFAULT	0
  #endif
  
  // This will go away
  #define FBINFO_FLAG_MODULE	FBINFO_MODULE
  #define FBINFO_FLAG_DEFAULT	FBINFO_DEFAULT
  
  /* This will go away
   * fbset currently hacks in FB_ACCELF_TEXT into var.accel_flags
   * when it wants to turn the acceleration engine on.  This is
   * really a separate operation, and should be modified via sysfs.
   *  But for now, we leave it broken with the following define
   */
  #define STUPID_ACCELF_TEXT_SHIT
  
  // This will go away
  #if defined(__sparc__)
  
  /* We map all of our framebuffers such that big-endian accesses
   * are what we want, so the following is sufficient.
   */
  
  // This will go away
  #define fb_readb sbus_readb
  #define fb_readw sbus_readw
  #define fb_readl sbus_readl
  #define fb_readq sbus_readq
  #define fb_writeb sbus_writeb
  #define fb_writew sbus_writew
  #define fb_writel sbus_writel
  #define fb_writeq sbus_writeq
  #define fb_memset sbus_memset_io
f11b478d4   James Hogan   fbmem: fix fb_rea...
558
559
  #define fb_memcpy_fromfb sbus_memcpy_fromio
  #define fb_memcpy_tofb sbus_memcpy_toio
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
560

981409b25   Archit Taneja   fbdev: arm has __...
561
  #elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || defined(__hppa__) || defined(__sh__) || defined(__powerpc__) || defined(__avr32__) || defined(__bfin__) || defined(__arm__)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
562
563
564
565
566
567
568
569
570
571
  
  #define fb_readb __raw_readb
  #define fb_readw __raw_readw
  #define fb_readl __raw_readl
  #define fb_readq __raw_readq
  #define fb_writeb __raw_writeb
  #define fb_writew __raw_writew
  #define fb_writel __raw_writel
  #define fb_writeq __raw_writeq
  #define fb_memset memset_io
f11b478d4   James Hogan   fbmem: fix fb_rea...
572
573
  #define fb_memcpy_fromfb memcpy_fromio
  #define fb_memcpy_tofb memcpy_toio
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
574
575
576
577
578
579
580
581
582
583
584
585
  
  #else
  
  #define fb_readb(addr) (*(volatile u8 *) (addr))
  #define fb_readw(addr) (*(volatile u16 *) (addr))
  #define fb_readl(addr) (*(volatile u32 *) (addr))
  #define fb_readq(addr) (*(volatile u64 *) (addr))
  #define fb_writeb(b,addr) (*(volatile u8 *) (addr) = (b))
  #define fb_writew(b,addr) (*(volatile u16 *) (addr) = (b))
  #define fb_writel(b,addr) (*(volatile u32 *) (addr) = (b))
  #define fb_writeq(b,addr) (*(volatile u64 *) (addr) = (b))
  #define fb_memset memset
f11b478d4   James Hogan   fbmem: fix fb_rea...
586
587
  #define fb_memcpy_fromfb memcpy
  #define fb_memcpy_tofb memcpy
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
588
589
  
  #endif
e4c690e06   Anton Vorontsov   fb: add support f...
590
591
592
593
594
  #define FB_LEFT_POS(p, bpp)          (fb_be_math(p) ? (32 - (bpp)) : 0)
  #define FB_SHIFT_HIGH(p, val, bits)  (fb_be_math(p) ? (val) >> (bits) : \
  						      (val) << (bits))
  #define FB_SHIFT_LOW(p, val, bits)   (fb_be_math(p) ? (val) << (bits) : \
  						      (val) >> (bits))
be0d9b6c7   Antonino A. Daplas   [PATCH] fbdev: Fi...
595

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
596
597
598
599
600
601
602
      /*
       *  `Generic' versions of the frame buffer device operations
       */
  
  extern int fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var); 
  extern int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var); 
  extern int fb_blank(struct fb_info *info, int blank);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
603
604
605
  extern void cfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect); 
  extern void cfb_copyarea(struct fb_info *info, const struct fb_copyarea *area); 
  extern void cfb_imageblit(struct fb_info *info, const struct fb_image *image);
68648ed1f   Antonino A. Daplas   fbdev: add drawin...
606
607
608
609
610
611
  /*
   * Drawing operations where framebuffer is in system RAM
   */
  extern void sys_fillrect(struct fb_info *info, const struct fb_fillrect *rect);
  extern void sys_copyarea(struct fb_info *info, const struct fb_copyarea *area);
  extern void sys_imageblit(struct fb_info *info, const struct fb_image *image);
09aaf268e   Antonino A. Daplas   fbdev: add fb_rea...
612
613
614
615
  extern ssize_t fb_sys_read(struct fb_info *info, char __user *buf,
  			   size_t count, loff_t *ppos);
  extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf,
  			    size_t count, loff_t *ppos);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
616
617
618
619
  
  /* drivers/video/fbmem.c */
  extern int register_framebuffer(struct fb_info *fb_info);
  extern int unregister_framebuffer(struct fb_info *fb_info);
ce880cb86   Kay Sievers   udlfb: remove sys...
620
  extern int unlink_framebuffer(struct fb_info *fb_info);
46eeb2c14   Chris Wilson   video/fb: Propaga...
621
622
  extern int remove_conflicting_framebuffers(struct apertures_struct *a,
  					   const char *name, bool primary);
9c44e5f6c   Antonino A. Daplas   [PATCH] fbcon: Co...
623
624
  extern int fb_prepare_logo(struct fb_info *fb_info, int rotate);
  extern int fb_show_logo(struct fb_info *fb_info, int rotate);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
625
  extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size);
f1ab5dac2   James Simmons   [PATCH] fbdev: st...
626
  extern void fb_pad_unaligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 idx,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
627
  				u32 height, u32 shift_high, u32 shift_low, u32 mod);
f1ab5dac2   James Simmons   [PATCH] fbdev: st...
628
  extern void fb_pad_aligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 s_pitch, u32 height);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
629
  extern void fb_set_suspend(struct fb_info *info, int state);
b8c909454   Antonino A. Daplas   [PATCH] fbdev: Fi...
630
631
  extern int fb_get_color_depth(struct fb_var_screeninfo *var,
  			      struct fb_fix_screeninfo *fix);
a66e62ae5   Vincent Stehlé   fb: make fp_get_o...
632
  extern int fb_get_options(const char *name, char **option);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
633
634
635
636
  extern int fb_new_modelist(struct fb_info *info);
  
  extern struct fb_info *registered_fb[FB_MAX];
  extern int num_registered_fb;
9db71a188   Geert Uytterhoeven   fbdev: Move decla...
637
  extern struct class *fb_class;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
638

6a7f2829b   Andrew Morton   fbdev: uninline l...
639
  extern int lock_fb_info(struct fb_info *info);
1f5e31d7e   Andrea Righi   fbmem: don't call...
640
641
642
643
644
  
  static inline void unlock_fb_info(struct fb_info *info)
  {
  	mutex_unlock(&info->lock);
  }
829e79b68   Antonino A. Daplas   [PATCH] fbcon: Br...
645
646
647
  static inline void __fb_pad_aligned_buffer(u8 *dst, u32 d_pitch,
  					   u8 *src, u32 s_pitch, u32 height)
  {
ee3468739   Brian W Hart   fbdev/fb.h: silen...
648
  	u32 i, j;
829e79b68   Antonino A. Daplas   [PATCH] fbcon: Br...
649
650
651
652
653
654
655
656
657
658
  
  	d_pitch -= s_pitch;
  
  	for (i = height; i--; ) {
  		/* s_pitch is a few bytes at the most, memcpy is suboptimal */
  		for (j = 0; j < s_pitch; j++)
  			*dst++ = *src++;
  		dst += d_pitch;
  	}
  }
60b59beaf   Jaya Kumar   fbdev: mm: Deferr...
659
  /* drivers/video/fb_defio.c */
ba0263340   Noralf Trønnes   fbdev: fb_defio: ...
660
  int fb_deferred_io_mmap(struct fb_info *info, struct vm_area_struct *vma);
60b59beaf   Jaya Kumar   fbdev: mm: Deferr...
661
  extern void fb_deferred_io_init(struct fb_info *info);
d847471d0   Ian Campbell   fbdefio: add set_...
662
663
664
  extern void fb_deferred_io_open(struct fb_info *info,
  				struct inode *inode,
  				struct file *file);
60b59beaf   Jaya Kumar   fbdev: mm: Deferr...
665
  extern void fb_deferred_io_cleanup(struct fb_info *info);
02c24a821   Josef Bacik   fs: push i_mutex ...
666
667
  extern int fb_deferred_io_fsync(struct file *file, loff_t start,
  				loff_t end, int datasync);
60b59beaf   Jaya Kumar   fbdev: mm: Deferr...
668

e4c690e06   Anton Vorontsov   fb: add support f...
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
  static inline bool fb_be_math(struct fb_info *info)
  {
  #ifdef CONFIG_FB_FOREIGN_ENDIAN
  #if defined(CONFIG_FB_BOTH_ENDIAN)
  	return info->flags & FBINFO_BE_MATH;
  #elif defined(CONFIG_FB_BIG_ENDIAN)
  	return true;
  #elif defined(CONFIG_FB_LITTLE_ENDIAN)
  	return false;
  #endif /* CONFIG_FB_BOTH_ENDIAN */
  #else
  #ifdef __BIG_ENDIAN
  	return true;
  #else
  	return false;
  #endif /* __BIG_ENDIAN */
  #endif /* CONFIG_FB_FOREIGN_ENDIAN */
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
687
688
689
  /* drivers/video/fbsysfs.c */
  extern struct fb_info *framebuffer_alloc(size_t size, struct device *dev);
  extern void framebuffer_release(struct fb_info *info);
78cde0887   Greg Kroah-Hartman   Driver core: conv...
690
691
  extern int fb_init_device(struct fb_info *fb_info);
  extern void fb_cleanup_device(struct fb_info *head);
5474c120a   Michael Hanselmann   [PATCH] Rewritten...
692
  extern void fb_bl_default_curve(struct fb_info *fb_info, u8 off, u8 min, u8 max);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
  
  /* drivers/video/fbmon.c */
  #define FB_MAXTIMINGS		0
  #define FB_VSYNCTIMINGS		1
  #define FB_HSYNCTIMINGS		2
  #define FB_DCLKTIMINGS		3
  #define FB_IGNOREMON		0x100
  
  #define FB_MODE_IS_UNKNOWN	0
  #define FB_MODE_IS_DETAILED	1
  #define FB_MODE_IS_STANDARD	2
  #define FB_MODE_IS_VESA		4
  #define FB_MODE_IS_CALCULATED	8
  #define FB_MODE_IS_FIRST	16
  #define FB_MODE_IS_FROM_VAR     32
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
708
709
710
711
712
713
  extern int fbmon_dpms(const struct fb_info *fb_info);
  extern int fb_get_mode(int flags, u32 val, struct fb_var_screeninfo *var,
  		       struct fb_info *info);
  extern int fb_validate_mode(const struct fb_var_screeninfo *var,
  			    struct fb_info *info);
  extern int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var);
5e518d767   Antonino A. Daplas   [PATCH] fbdev: Re...
714
715
716
  extern const unsigned char *fb_firmware_edid(struct device *device);
  extern void fb_edid_to_monspecs(unsigned char *edid,
  				struct fb_monspecs *specs);
9fbbdde93   Erik Gilling   video: add fb_edi...
717
718
  extern void fb_edid_add_monspecs(unsigned char *edid,
  				 struct fb_monspecs *specs);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
719
  extern void fb_destroy_modedb(struct fb_videomode *modedb);
96fe6a210   Antonino A. Daplas   [PATCH] fbdev: Ad...
720
  extern int fb_find_mode_cvt(struct fb_videomode *mode, int margins, int rb);
fc5891c8a   Dennis Munsie   [PATCH] fbdev: Ad...
721
  extern unsigned char *fb_ddc_read(struct i2c_adapter *adapter);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
722

790890444   Steffen Trumtrar   fbmon: add of_vid...
723
724
725
  extern int of_get_fb_videomode(struct device_node *np,
  			       struct fb_videomode *fb,
  			       int index);
2db54c723   Steffen Trumtrar   fbmon: add videom...
726
727
  extern int fb_videomode_from_videomode(const struct videomode *vm,
  				       struct fb_videomode *fbmode);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
728
  /* drivers/video/modedb.c */
37715f556   David Ung   video: fbdev: Add...
729
  #define VESA_MODEDB_SIZE 43
8f5ee77bb   David Ung   video: fbdev: Che...
730
  #define DMT_SIZE 0x50
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
731
  extern void fb_var_to_videomode(struct fb_videomode *mode,
9791d763d   Geert Uytterhoeven   [PATCH] fbdev mod...
732
  				const struct fb_var_screeninfo *var);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
733
  extern void fb_videomode_to_var(struct fb_var_screeninfo *var,
9791d763d   Geert Uytterhoeven   [PATCH] fbdev mod...
734
735
736
737
738
739
  				const struct fb_videomode *mode);
  extern int fb_mode_is_equal(const struct fb_videomode *mode1,
  			    const struct fb_videomode *mode2);
  extern int fb_add_videomode(const struct fb_videomode *mode,
  			    struct list_head *head);
  extern void fb_delete_videomode(const struct fb_videomode *mode,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
740
  				struct list_head *head);
9791d763d   Geert Uytterhoeven   [PATCH] fbdev mod...
741
742
743
744
745
746
  extern const struct fb_videomode *fb_match_mode(const struct fb_var_screeninfo *var,
  						struct list_head *head);
  extern const struct fb_videomode *fb_find_best_mode(const struct fb_var_screeninfo *var,
  						    struct list_head *head);
  extern const struct fb_videomode *fb_find_nearest_mode(const struct fb_videomode *mode,
  						       struct list_head *head);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
747
  extern void fb_destroy_modelist(struct list_head *head);
9791d763d   Geert Uytterhoeven   [PATCH] fbdev mod...
748
  extern void fb_videomode_to_modelist(const struct fb_videomode *modedb, int num,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
749
  				     struct list_head *head);
9791d763d   Geert Uytterhoeven   [PATCH] fbdev mod...
750
751
  extern const struct fb_videomode *fb_find_best_display(const struct fb_monspecs *specs,
  						       struct list_head *head);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
752
753
754
  
  /* drivers/video/fbcmap.c */
  extern int fb_alloc_cmap(struct fb_cmap *cmap, int len, int transp);
1e7c78048   Dan Carpenter   fbcmap: integer o...
755
  extern int fb_alloc_cmap_gfp(struct fb_cmap *cmap, int len, int transp, gfp_t flags);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
756
  extern void fb_dealloc_cmap(struct fb_cmap *cmap);
adf6b2065   Helge Deller   [PATCH] fbcmap.c:...
757
758
  extern int fb_copy_cmap(const struct fb_cmap *from, struct fb_cmap *to);
  extern int fb_cmap_to_user(const struct fb_cmap *from, struct fb_cmap_user *to);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
759
760
  extern int fb_set_cmap(struct fb_cmap *cmap, struct fb_info *fb_info);
  extern int fb_set_user_cmap(struct fb_cmap_user *cmap, struct fb_info *fb_info);
adf6b2065   Helge Deller   [PATCH] fbcmap.c:...
761
  extern const struct fb_cmap *fb_default_cmap(int len);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
  extern void fb_invert_cmaps(void);
  
  struct fb_videomode {
  	const char *name;	/* optional */
  	u32 refresh;		/* optional */
  	u32 xres;
  	u32 yres;
  	u32 pixclock;
  	u32 left_margin;
  	u32 right_margin;
  	u32 upper_margin;
  	u32 lower_margin;
  	u32 hsync_len;
  	u32 vsync_len;
  	u32 sync;
  	u32 vmode;
  	u32 flag;
  };
8f5ee77bb   David Ung   video: fbdev: Che...
780
781
782
783
784
785
  struct dmt_videomode {
  	u32 dmt_id;
  	u32 std_2byte_code;
  	u32 cvt_3byte_code;
  	const struct fb_videomode *mode;
  };
9a054fbac   Geert Uytterhoeven   fb: move and rena...
786
  extern const char *fb_mode_option;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
787
  extern const struct fb_videomode vesa_modes[];
6080a8935   Tomi Valkeinen   fbdev: fix cea_mo...
788
  extern const struct fb_videomode cea_modes[65];
8f5ee77bb   David Ung   video: fbdev: Che...
789
  extern const struct dmt_videomode dmt_modes[];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
790
791
792
793
794
795
796
797
798
799
800
801
  
  struct fb_modelist {
  	struct list_head list;
  	struct fb_videomode mode;
  };
  
  extern int fb_find_mode(struct fb_var_screeninfo *var,
  			struct fb_info *info, const char *mode_option,
  			const struct fb_videomode *db,
  			unsigned int dbsize,
  			const struct fb_videomode *default_mode,
  			unsigned int default_bpp);
f51a07d05   Joe Perches   framebuffer: Add ...
802
803
804
805
806
807
808
809
810
811
812
  /* Convenience logging macros */
  #define fb_err(fb_info, fmt, ...)					\
  	pr_err("fb%d: " fmt, (fb_info)->node, ##__VA_ARGS__)
  #define fb_notice(info, fmt, ...)					\
  	pr_notice("fb%d: " fmt, (fb_info)->node, ##__VA_ARGS__)
  #define fb_warn(fb_info, fmt, ...)					\
  	pr_warn("fb%d: " fmt, (fb_info)->node, ##__VA_ARGS__)
  #define fb_info(fb_info, fmt, ...)					\
  	pr_info("fb%d: " fmt, (fb_info)->node, ##__VA_ARGS__)
  #define fb_dbg(fb_info, fmt, ...)					\
  	pr_debug("fb%d: " fmt, (fb_info)->node, ##__VA_ARGS__)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
813
  #endif /* _LINUX_FB_H */