37
38
/* If following is set render target contains currenly displayed image
38
39
after swapping buffers (otherwise it contains previously displayed image).
40
#define GRUB_VIDEO_MODE_TYPE_UPDATING_SWAP 0x00000080
41
#define GRUB_VIDEO_MODE_TYPE_PURE_TEXT 0x00000040
42
#define GRUB_VIDEO_MODE_TYPE_ALPHA 0x00000020
43
#define GRUB_VIDEO_MODE_TYPE_DOUBLE_BUFFERED 0x00000010
44
#define GRUB_VIDEO_MODE_TYPE_1BIT_BITMAP 0x00000004
45
#define GRUB_VIDEO_MODE_TYPE_INDEX_COLOR 0x00000002
46
#define GRUB_VIDEO_MODE_TYPE_RGB 0x00000001
48
/* Defines used to mask flags. */
49
#define GRUB_VIDEO_MODE_TYPE_COLOR_MASK 0x0000000F
51
/* Defines used to specify requested bit depth. */
52
#define GRUB_VIDEO_MODE_TYPE_DEPTH_MASK 0x0000ff00
53
#define GRUB_VIDEO_MODE_TYPE_DEPTH_POS 8
41
typedef enum grub_video_mode_type
43
GRUB_VIDEO_MODE_TYPE_RGB = 0x00000001,
44
GRUB_VIDEO_MODE_TYPE_INDEX_COLOR = 0x00000002,
45
GRUB_VIDEO_MODE_TYPE_1BIT_BITMAP = 0x00000004,
46
GRUB_VIDEO_MODE_TYPE_YUV = 0x00000008,
48
/* Defines used to mask flags. */
49
GRUB_VIDEO_MODE_TYPE_COLOR_MASK = 0x0000000F,
51
GRUB_VIDEO_MODE_TYPE_DOUBLE_BUFFERED = 0x00000010,
52
GRUB_VIDEO_MODE_TYPE_ALPHA = 0x00000020,
53
GRUB_VIDEO_MODE_TYPE_PURE_TEXT = 0x00000040,
54
GRUB_VIDEO_MODE_TYPE_UPDATING_SWAP = 0x00000080,
55
GRUB_VIDEO_MODE_TYPE_OPERATIONAL_MASK = 0x000000F0,
57
/* Defines used to specify requested bit depth. */
58
GRUB_VIDEO_MODE_TYPE_DEPTH_MASK = 0x0000FF00,
59
#define GRUB_VIDEO_MODE_TYPE_DEPTH_POS 8
61
GRUB_VIDEO_MODE_TYPE_UNKNOWN = 0x00010000,
62
GRUB_VIDEO_MODE_TYPE_HERCULES = 0x00020000,
63
GRUB_VIDEO_MODE_TYPE_PLANAR = 0x00040000,
64
GRUB_VIDEO_MODE_TYPE_NONCHAIN4 = 0x00080000,
65
GRUB_VIDEO_MODE_TYPE_CGA = 0x00100000,
66
GRUB_VIDEO_MODE_TYPE_INFO_MASK = 0x00FF0000,
67
} grub_video_mode_type_t;
55
69
/* The basic render target representing the whole display. This always
56
70
renders to the back buffer when double-buffering is in use. */
180
206
GRUB_VIDEO_DRIVER_NONE,
181
207
GRUB_VIDEO_DRIVER_VBE,
182
208
GRUB_VIDEO_DRIVER_EFI_UGA,
183
GRUB_VIDEO_DRIVER_EFI_GOP
209
GRUB_VIDEO_DRIVER_EFI_GOP,
210
GRUB_VIDEO_DRIVER_SM712,
211
GRUB_VIDEO_DRIVER_VGA,
212
GRUB_VIDEO_DRIVER_CIRRUS,
213
GRUB_VIDEO_DRIVER_BOCHS,
214
GRUB_VIDEO_DRIVER_SDL
184
215
} grub_video_driver_id_t;
217
typedef enum grub_video_adapter_prio
219
GRUB_VIDEO_ADAPTER_PRIO_FALLBACK = 60,
220
GRUB_VIDEO_ADAPTER_PRIO_FIRMWARE_DIRTY = 70,
221
GRUB_VIDEO_ADAPTER_PRIO_FIRMWARE = 80,
222
GRUB_VIDEO_ADAPTER_PRIO_NATIVE = 100
223
} grub_video_adapter_prio_t;
186
226
struct grub_video_adapter
228
/* The next video adapter. */
229
struct grub_video_adapter *next;
188
231
/* The video adapter name. */
189
232
const char *name;
190
233
grub_video_driver_id_t id;
235
grub_video_adapter_prio_t prio;
192
237
/* Initialize the video adapter. */
193
238
grub_err_t (*init) (void);
255
301
grub_err_t (*get_active_render_target) (struct grub_video_render_target **target);
257
/* The next video adapter. */
258
struct grub_video_adapter *next;
303
int (*iterate) (int (*hook) (const struct grub_video_mode_info *info));
305
void (*print_adapter_specific_info) (void);
260
307
typedef struct grub_video_adapter *grub_video_adapter_t;
262
void grub_video_register (grub_video_adapter_t adapter);
263
void grub_video_unregister (grub_video_adapter_t adapter);
264
void grub_video_iterate (int (*hook) (grub_video_adapter_t adapter));
266
grub_err_t grub_video_restore (void);
268
grub_err_t grub_video_get_info (struct grub_video_mode_info *mode_info);
309
extern grub_video_adapter_t EXPORT_VAR(grub_video_adapter_list);
311
#ifndef GRUB_LST_GENERATOR
312
/* Register video driver. */
314
grub_video_register (grub_video_adapter_t adapter)
316
grub_video_adapter_t *p;
317
for (p = &grub_video_adapter_list; *p && (*p)->prio > adapter->prio;
324
/* Unregister video driver. */
326
grub_video_unregister (grub_video_adapter_t adapter)
328
grub_list_remove (GRUB_AS_LIST_P (&grub_video_adapter_list),
329
GRUB_AS_LIST (adapter));
332
#define FOR_VIDEO_ADAPTERS(var) FOR_LIST_ELEMENTS((var), (grub_video_adapter_list))
334
grub_err_t EXPORT_FUNC (grub_video_restore) (void);
336
grub_err_t EXPORT_FUNC (grub_video_get_info) (struct grub_video_mode_info *mode_info);
270
338
/* Framebuffer address may change as a part of normal operation
271
339
(e.g. double buffering). That's why you need to stop video subsystem to be
272
340
sure that framebuffer address doesn't change. To ensure this abstraction
273
341
grub_video_get_info_and_fini is the only function supplying framebuffer
275
grub_err_t grub_video_get_info_and_fini (struct grub_video_mode_info *mode_info,
343
grub_err_t EXPORT_FUNC (grub_video_get_info_and_fini) (struct grub_video_mode_info *mode_info,
276
344
void **framebuffer);
278
346
enum grub_video_blit_format grub_video_get_blit_format (struct grub_video_mode_info *mode_info);
280
348
grub_err_t grub_video_set_palette (unsigned int start, unsigned int count,
281
349
struct grub_video_palette_data *palette_data);
283
grub_err_t grub_video_get_palette (unsigned int start, unsigned int count,
284
struct grub_video_palette_data *palette_data);
286
grub_err_t grub_video_set_viewport (unsigned int x, unsigned int y,
287
unsigned int width, unsigned int height);
289
grub_err_t grub_video_get_viewport (unsigned int *x, unsigned int *y,
290
unsigned int *width, unsigned int *height);
292
grub_video_color_t grub_video_map_color (grub_uint32_t color_name);
294
grub_video_color_t grub_video_map_rgb (grub_uint8_t red, grub_uint8_t green,
297
grub_video_color_t grub_video_map_rgba (grub_uint8_t red, grub_uint8_t green,
298
grub_uint8_t blue, grub_uint8_t alpha);
300
grub_err_t grub_video_unmap_color (grub_video_color_t color,
301
grub_uint8_t *red, grub_uint8_t *green,
302
grub_uint8_t *blue, grub_uint8_t *alpha);
304
grub_err_t grub_video_fill_rect (grub_video_color_t color, int x, int y,
305
unsigned int width, unsigned int height);
307
grub_err_t grub_video_blit_bitmap (struct grub_video_bitmap *bitmap,
308
enum grub_video_blit_operators oper,
309
int x, int y, int offset_x, int offset_y,
310
unsigned int width, unsigned int height);
312
grub_err_t grub_video_blit_render_target (struct grub_video_render_target *source,
313
enum grub_video_blit_operators oper,
315
int offset_x, int offset_y,
317
unsigned int height);
351
grub_err_t EXPORT_FUNC (grub_video_get_palette) (unsigned int start,
353
struct grub_video_palette_data *palette_data);
355
grub_err_t EXPORT_FUNC (grub_video_set_viewport) (unsigned int x,
358
unsigned int height);
360
grub_err_t EXPORT_FUNC (grub_video_get_viewport) (unsigned int *x,
363
unsigned int *height);
365
grub_video_color_t EXPORT_FUNC (grub_video_map_color) (grub_uint32_t color_name);
367
grub_video_color_t EXPORT_FUNC (grub_video_map_rgb) (grub_uint8_t red,
371
grub_video_color_t EXPORT_FUNC (grub_video_map_rgba) (grub_uint8_t red,
376
grub_err_t EXPORT_FUNC (grub_video_unmap_color) (grub_video_color_t color,
380
grub_uint8_t *alpha);
382
grub_err_t EXPORT_FUNC (grub_video_fill_rect) (grub_video_color_t color,
385
unsigned int height);
387
grub_err_t EXPORT_FUNC (grub_video_blit_bitmap) (struct grub_video_bitmap *bitmap,
388
enum grub_video_blit_operators oper,
390
int offset_x, int offset_y,
392
unsigned int height);
394
grub_err_t EXPORT_FUNC (grub_video_blit_render_target) (struct grub_video_render_target *source,
395
enum grub_video_blit_operators oper,
400
unsigned int height);
319
402
grub_err_t grub_video_scroll (grub_video_color_t color, int dx, int dy);
321
grub_err_t grub_video_swap_buffers (void);
323
grub_err_t grub_video_create_render_target (struct grub_video_render_target **result,
326
unsigned int mode_type);
328
grub_err_t grub_video_delete_render_target (struct grub_video_render_target *target);
330
grub_err_t grub_video_set_active_render_target (struct grub_video_render_target *target);
404
grub_err_t EXPORT_FUNC (grub_video_swap_buffers) (void);
406
grub_err_t EXPORT_FUNC (grub_video_create_render_target) (struct grub_video_render_target **result,
409
unsigned int mode_type);
411
grub_err_t EXPORT_FUNC (grub_video_delete_render_target) (struct grub_video_render_target *target);
413
grub_err_t EXPORT_FUNC (grub_video_set_active_render_target) (struct grub_video_render_target *target);
332
415
grub_err_t grub_video_get_active_render_target (struct grub_video_render_target **target);
334
grub_err_t grub_video_set_mode (const char *modestring,
335
unsigned int modemask,
336
unsigned int modevalue);
417
grub_err_t EXPORT_FUNC (grub_video_set_mode) (const char *modestring,
418
unsigned int modemask,
419
unsigned int modevalue);
338
421
static inline int
339
grub_video_check_mode_flag (unsigned int flags, unsigned int mask,
340
unsigned int flag, int def)
422
grub_video_check_mode_flag (grub_video_mode_type_t flags,
423
grub_video_mode_type_t mask,
424
grub_video_mode_type_t flag, int def)
342
426
return (flag & mask) ? !! (flags & flag) : def;
345
grub_video_driver_id_t
346
grub_video_get_driver_id (void);
429
grub_video_driver_id_t EXPORT_FUNC (grub_video_get_driver_id) (void);
348
431
#endif /* ! GRUB_VIDEO_HEADER */