vbeinfo

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