vbeinfo

view src/vbe.h @ 3:5b0ef094b8fd

backported changes from more recent VBE projects
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 07 Jan 2019 12:07:53 +0200
parents 4b33fa83e381
children
line source
1 #ifndef VBE_H_
2 #define VBE_H_
4 #include "inttypes.h"
6 #ifdef __GNUC__
7 #define PACKED __attribute__((packed))
8 #else
9 #define PACKED
10 #endif
12 #define VBE_ATTR_LFB (1 << 7)
13 #define VBE_MODE_LFB (1 << 14)
15 #pragma pack (push, 0)
16 struct vbe_info {
17 uint8_t sig[4];
18 uint16_t version;
19 uint32_t oem_str_ptr;
20 uint8_t caps[4]; /* capabilities */
21 uint32_t vid_mode_ptr; /* vbefarptr to video mode list */
22 uint16_t total_mem; /* num of 64k mem blocks */
23 uint16_t oem_sw_rev; /* VBE implementation software revision */
24 uint32_t oem_vendor_name_ptr;
25 uint32_t oem_product_name_ptr;
26 uint32_t oem_product_rev_ptr;
27 uint8_t reserved[222];
28 uint8_t oem_data[256];
29 } PACKED;
31 struct vbe_mode_info {
32 uint16_t mode_attr;
33 uint8_t wina_attr, winb_attr;
34 uint16_t win_gran, win_size;
35 uint16_t wina_seg, winb_seg;
36 uint32_t win_func;
37 uint16_t scanline_bytes;
39 /* VBE 1.2 and above */
40 uint16_t xres, yres;
41 uint8_t xcharsz, ycharsz;
42 uint8_t num_planes;
43 uint8_t bpp;
44 uint8_t num_banks;
45 uint8_t mem_model;
46 uint8_t bank_size; /* bank size in KB */
47 uint8_t num_img_pages;
48 uint8_t reserved1;
50 /* direct color fields */
51 uint8_t rmask_size, rpos;
52 uint8_t gmask_size, gpos;
53 uint8_t bmask_size, bpos;
54 uint8_t xmask_size, xpos;
55 uint8_t cmode_info; /* direct color mode attributes */
57 /* VBE 2.0 and above */
58 uint32_t fb_addr; /* physical address of the linear framebuffer */
59 uint32_t reserved2;
60 uint16_t reserved3;
62 uint8_t reserved4[206];
63 } PACKED;
64 #pragma pack (pop)
66 struct vbe_info *vbe_get_info(void);
67 struct vbe_mode_info *vbe_get_mode_info(int mode);
69 int vbe_set_mode(int mode);
71 int vbe_set_palette_bits(int bits);
72 void vbe_set_palette(int idx, int *col, int count, int bits);
74 #define VBE_SET_DISP_START_NOW 0
75 #define VBE_SET_DISP_START_VBLANK 0x80
76 int vbe_set_disp_start(int x, int y, int when);
78 #define VBE_SCANLEN_PIXELS 0
79 #define VBE_SCANLEN_BYTES 2
80 int vbe_set_scanlen(int len, int mode);
81 int vbe_get_scanlen(int mode);
83 void print_mode_info(FILE *fp, struct vbe_mode_info *modei);
85 #endif /* VBE_H_ */