2
* GRUB -- GRand Unified Bootloader
3
* Copyright (C) 2006 Free Software Foundation, Inc.
5
* GRUB is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation; either version 2 of the License, or
8
* (at your option) any later version.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with GRUB; if not, write to the Free Software
17
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
#ifndef GRUB_VIDEO_HEADER
21
#define GRUB_VIDEO_HEADER 1
24
#include <grub/types.h>
26
typedef grub_uint32_t grub_video_color_t;
28
struct grub_video_render_target;
30
/* Defines used to describe video mode or rendering target. */
31
#define GRUB_VIDEO_MODE_TYPE_ALPHA 0x00000008
32
#define GRUB_VIDEO_MODE_TYPE_DOUBLE_BUFFERED 0x00000004
33
#define GRUB_VIDEO_MODE_TYPE_INDEX_COLOR 0x00000002
34
#define GRUB_VIDEO_MODE_TYPE_RGB 0x00000001
36
/* Defines used to mask flags. */
37
#define GRUB_VIDEO_MODE_TYPE_COLOR_MASK 0x00000003
39
/* Defines used to specify requested bit depth. */
40
#define GRUB_VIDEO_MODE_TYPE_DEPTH_MASK 0x0000ff00
41
#define GRUB_VIDEO_MODE_TYPE_DEPTH_POS 8
43
/* Defined predefined render targets. */
44
#define GRUB_VIDEO_RENDER_TARGET_DISPLAY ((struct grub_video_render_target *) 0)
45
#define GRUB_VIDEO_RENDER_TARGET_FRONT_BUFFER ((struct grub_video_render_target *) 0)
46
#define GRUB_VIDEO_RENDER_TARGET_BACK_BUFFER ((struct grub_video_render_target *) 1)
48
/* Defined blitting formats. */
49
enum grub_video_blit_format
51
/* Follow exactly field & mask information. */
52
GRUB_VIDEO_BLIT_FORMAT_RGBA,
53
/* Make optimization assumption. */
54
GRUB_VIDEO_BLIT_FORMAT_R8G8B8A8,
55
/* Follow exactly field & mask information. */
56
GRUB_VIDEO_BLIT_FORMAT_RGB,
57
/* Make optimization assumption. */
58
GRUB_VIDEO_BLIT_FORMAT_R8G8B8,
59
/* When needed, decode color or just use value as is. */
60
GRUB_VIDEO_BLIT_FORMAT_INDEXCOLOR
63
struct grub_video_mode_info
65
/* Width of the screen. */
68
/* Height of the screen. */
71
/* Mode type bitmask. Contains information like is it Index color or
73
unsigned int mode_type;
78
/* Bytes per pixel. */
79
unsigned int bytes_per_pixel;
81
/* Pitch of one scanline. How many bytes there are for scanline. */
84
/* In index color mode, number of colors. In RGB mode this is 256. */
85
unsigned int number_of_colors;
87
/* Optimization hint how binary data is coded. */
88
enum grub_video_blit_format blit_format;
90
/* How many bits are reserved for red color. */
91
unsigned int red_mask_size;
93
/* What is location of red color bits. In Index Color mode, this is 0. */
94
unsigned int red_field_pos;
96
/* How many bits are reserved for green color. */
97
unsigned int green_mask_size;
99
/* What is location of green color bits. In Index Color mode, this is 0. */
100
unsigned int green_field_pos;
102
/* How many bits are reserved for blue color. */
103
unsigned int blue_mask_size;
105
/* What is location of blue color bits. In Index Color mode, this is 0. */
106
unsigned int blue_field_pos;
108
/* How many bits are reserved in color. */
109
unsigned int reserved_mask_size;
111
/* What is location of reserved color bits. In Index Color mode,
113
unsigned int reserved_field_pos;
116
struct grub_video_render_target
118
/* Copy of the screen's mode info structure, except that width, height and
119
mode_type has been re-adjusted to requested render target settings. */
120
struct grub_video_mode_info mode_info;
130
/* Indicates wether the data has been allocated by us and must be freed
131
when render target is destroyed. */
134
/* Pointer to data. Can either be in video card memory or in local host's
139
struct grub_video_palette_data
141
grub_uint8_t r; /* Red color value (0-255). */
142
grub_uint8_t g; /* Green color value (0-255). */
143
grub_uint8_t b; /* Blue color value (0-255). */
144
grub_uint8_t a; /* Reserved bits value (0-255). */
147
struct grub_font_glyph;
148
struct grub_video_bitmap;
150
struct grub_video_adapter
152
/* The video adapter name. */
155
/* Initialize the video adapter. */
156
grub_err_t (*init) (void);
158
/* Clean up the video adapter. */
159
grub_err_t (*fini) (void);
161
grub_err_t (*setup) (unsigned int width,
163
unsigned int mode_type);
165
grub_err_t (*get_info) (struct grub_video_mode_info *mode_info);
167
grub_err_t (*set_palette) (unsigned int start,
169
struct grub_video_palette_data *palette_data);
171
grub_err_t (*get_palette) (unsigned int start,
173
struct grub_video_palette_data *palette_data);
175
grub_err_t (*set_viewport) (unsigned int x,
178
unsigned int height);
180
grub_err_t (*get_viewport) (unsigned int *x,
183
unsigned int *height);
185
grub_video_color_t (*map_color) (grub_uint32_t color_name);
187
grub_video_color_t (*map_rgb) (grub_uint8_t red,
191
grub_video_color_t (*map_rgba) (grub_uint8_t red,
196
grub_err_t (*fill_rect) (grub_video_color_t color,
200
unsigned int height);
202
grub_err_t (*blit_glyph) (struct grub_font_glyph *glyph,
203
grub_video_color_t color,
207
grub_err_t (*blit_bitmap) (struct grub_video_bitmap *bitmap,
213
unsigned int height);
215
grub_err_t (*blit_render_target) (struct grub_video_render_target *source,
221
unsigned int height);
223
grub_err_t (*scroll) (grub_video_color_t color,
227
grub_err_t (*swap_buffers) (void);
229
grub_err_t (*create_render_target) (struct grub_video_render_target **result,
232
unsigned int mode_type);
234
grub_err_t (*delete_render_target) (struct grub_video_render_target *target);
236
grub_err_t (*set_active_render_target) (struct grub_video_render_target *target);
238
/* The next video adapter. */
239
struct grub_video_adapter *next;
241
typedef struct grub_video_adapter *grub_video_adapter_t;
243
void grub_video_register (grub_video_adapter_t adapter);
244
void grub_video_unregister (grub_video_adapter_t adapter);
245
void grub_video_iterate (int (*hook) (grub_video_adapter_t adapter));
247
grub_err_t grub_video_setup (unsigned int width,
249
unsigned int mode_type);
251
grub_err_t grub_video_restore (void);
253
grub_err_t grub_video_get_info (struct grub_video_mode_info *mode_info);
255
enum grub_video_blit_format grub_video_get_blit_format (struct grub_video_mode_info *mode_info);
257
grub_err_t grub_video_set_palette (unsigned int start,
259
struct grub_video_palette_data *palette_data);
261
grub_err_t grub_video_get_palette (unsigned int start,
263
struct grub_video_palette_data *palette_data);
265
grub_err_t grub_video_set_viewport (unsigned int x,
268
unsigned int height);
270
grub_err_t grub_video_get_viewport (unsigned int *x,
273
unsigned int *height);
275
grub_video_color_t grub_video_map_color (grub_uint32_t color_name);
277
grub_video_color_t grub_video_map_rgb (grub_uint8_t red,
281
grub_video_color_t grub_video_map_rgba (grub_uint8_t red,
286
grub_err_t grub_video_fill_rect (grub_video_color_t color,
290
unsigned int height);
292
grub_err_t grub_video_blit_glyph (struct grub_font_glyph *glyph,
293
grub_video_color_t color,
297
grub_err_t grub_video_blit_bitmap (struct grub_video_bitmap *bitmap,
303
unsigned int height);
305
grub_err_t grub_video_blit_render_target (struct grub_video_render_target *source,
311
unsigned int height);
313
grub_err_t grub_video_scroll (grub_video_color_t color,
317
grub_err_t grub_video_swap_buffers (void);
319
grub_err_t grub_video_create_render_target (struct grub_video_render_target **result,
322
unsigned int mode_type);
324
grub_err_t grub_video_delete_render_target (struct grub_video_render_target *target);
326
grub_err_t grub_video_set_active_render_target (struct grub_video_render_target *target);
328
#endif /* ! GRUB_VIDEO_HEADER */