15 uint16_t vmem_blk; /* video memory size in 64k blocks */
21 uint16_t *accel_modes;
26 struct vbe_mode_info {
28 uint8_t wina_attr, winb_attr;
29 uint16_t win_gran, win_size;
30 uint16_t wina_seg, winb_seg;
32 uint16_t scanline_bytes;
34 /* VBE 1.2 and above */
36 uint8_t xcharsz, ycharsz;
41 uint8_t bank_size; /* bank size in KB */
42 uint8_t num_img_pages;
45 /* direct color fields */
50 uint8_t cmode_info; /* direct color mode attributes */
52 /* VBE 2.0 and above */
53 uint32_t fb_addr; /* physical address of the linear framebuffer */
54 uint32_t os_addr; /* phys. address of off-screen memory */
55 uint16_t os_size; /* size in KB of off-screen memory */
57 /* VBE 3.0 and above */
58 uint16_t lfb_scanline_bytes;
59 uint8_t banked_num_img_pages;
60 uint8_t lfb_num_img_pages;
61 uint8_t lfb_rsize, lfb_rpos;
62 uint8_t lfb_gsize, lfb_gpos;
63 uint8_t lfb_bsize, lfb_bpos;
64 uint8_t lfb_xsize, lfb_xpos;
65 uint32_t max_pixel_clock;
70 struct vbe_crtc_info {
71 uint16_t htotal, hsync_start, hsync_end;
72 uint16_t vtotal, vsync_start, vsync_end;
75 uint16_t rate_centihz; /* refresh rate in 1/100 hz (pck / (htotal * vtotal)) */
84 VBE_STEREO = 0x08, /* ? */
86 VBE_STEREO_VESA = 0x10, /* ? */
93 #define VBE_VER_MAJOR(v) (((v) >> 8) & 0xff)
94 #define VBE_VER_MINOR(v) ((v) & 0xff)
96 /* VBE mode attribute flags (vbe_mode_info.attr) */
98 VBE_ATTR_AVAIL = 0x0001,
99 VBE_ATTR_OPTINFO = 0x0002,
100 VBE_ATTR_TTY = 0x0004,
101 VBE_ATTR_COLOR = 0x0008,
102 VBE_ATTR_GFX = 0x0010,
104 VBE_ATTR_NOTVGA = 0x0020,
105 VBE_ATTR_BANKED = 0x0040,
106 VBE_ATTR_LFB = 0x0080,
107 VBE_ATTR_DBLSCAN = 0x0100,
109 VBE_ATTR_ILACE = 0x0200, /* ! */
110 VBE_ATTR_TRIPLEBUF = 0x0400,
111 VBE_ATTR_STEREO = 0x0800,
112 VBE_ATTR_STEREO_2FB = 0x1000,
114 VBE_ATTR_MUSTLOCK = 0x0200, /* ! */
117 /* VBE memory model type (vbe_mode_info.mem_model) */
129 /* VBE window attribute (vbe_mode_info.win(a|b)_attr) */
131 VBE_WIN_AVAIL = 0x01,
136 /* mode number flags */
138 VBE_MODE_RATE = 0x0800, /* VBE 3.0+ user-specified refresh rate */
139 VBE_MODE_ACCEL = 0x2000, /* VBE/AF */
140 VBE_MODE_LFB = 0x4000, /* VBE 2.0+ */
141 VBE_MODE_PRESERVE = 0x8000
144 /* standard mode numbers */
146 VBE_640X400_8BPP = 0x100,
147 VBE_640X480_8BPP = 0x101,
148 VBE_800X600_4BPP = 0x102,
149 VBE_800X600_8BPP = 0x103,
150 VBE_1024X768_4BPP = 0x104,
151 VBE_1024X768_8BPP = 0x105,
152 VBE_1280X1024_4BPP = 0x106,
153 VBE_1280X1024_8BPP = 0x107,
154 VBE_80X60_TEXT = 0x108,
155 VBE_132X25_TEXT = 0x109,
156 VBE_132X43_TEXT = 0x10a,
157 VBE_132X50_TEXT = 0x10b,
158 VBE_132X60_TEXT = 0x10c,
160 VBE_320X200_15BPP = 0x10d,
161 VBE_320X200_16BPP = 0x10e,
162 VBE_320X200_24BPP = 0x10f,
163 VBE_640X480_15BPP = 0x110,
164 VBE_640X480_16BPP = 0x111,
165 VBE_640X480_24BPP = 0x112,
166 VBE_800X600_15BPP = 0x113,
167 VBE_800X600_16BPP = 0x114,
168 VBE_800X600_24BPP = 0x115,
169 VBE_1024X768_15BPP = 0x116,
170 VBE_1024X768_16BPP = 0x117,
171 VBE_1024X768_24BPP = 0x118,
172 VBE_1280X1024_15BPP = 0x119,
173 VBE_1280X1024_16BPP = 0x11a,
174 VBE_1280X1024_24BPP = 0x11b,
176 VBE_1600X1200_8BPP = 0x120,
177 VBE_1600X1200_15BPP = 0x121,
178 VBE_1600X1200_16BPP = 0x122,
180 VBE_VMEM_MODE = 0x81ff
183 /* VBE CRTC flags (vbe_crtc_info.flags) */
185 VBE_CRTC_DBLSCAN = 0x01,
186 VBE_CRTC_ILACE = 0x02,
187 VBE_CRTC_HSYNC_NEG = 0x04,
188 VBE_CRTC_VSYNC_NEG = 0x08
191 int vbe_info(struct vbe_info *info);
192 int vbe_num_modes(struct vbe_info *info);
193 int vbe_mode_info(int mode, struct vbe_mode_info *minf);
195 void vbe_print_info(FILE *fp, struct vbe_info *info);
196 void vbe_print_mode_info(FILE *fp, struct vbe_mode_info *minf);
198 int vbe_setmode(uint16_t mode);
199 int vbe_setmode_crtc(uint16_t mode, struct vbe_crtc_info *crtc);