nuclear@0: #ifndef VBE_H_ nuclear@0: #define VBE_H_ nuclear@0: nuclear@0: #include "inttypes.h" nuclear@0: nuclear@3: #ifdef __GNUC__ nuclear@3: #define PACKED __attribute__((packed)) nuclear@3: #else nuclear@3: #define PACKED nuclear@3: #endif nuclear@3: nuclear@0: #define VBE_ATTR_LFB (1 << 7) nuclear@0: #define VBE_MODE_LFB (1 << 14) nuclear@0: nuclear@0: #pragma pack (push, 0) nuclear@0: struct vbe_info { nuclear@0: uint8_t sig[4]; nuclear@0: uint16_t version; nuclear@0: uint32_t oem_str_ptr; nuclear@0: uint8_t caps[4]; /* capabilities */ nuclear@0: uint32_t vid_mode_ptr; /* vbefarptr to video mode list */ nuclear@0: uint16_t total_mem; /* num of 64k mem blocks */ nuclear@0: uint16_t oem_sw_rev; /* VBE implementation software revision */ nuclear@0: uint32_t oem_vendor_name_ptr; nuclear@0: uint32_t oem_product_name_ptr; nuclear@0: uint32_t oem_product_rev_ptr; nuclear@0: uint8_t reserved[222]; nuclear@0: uint8_t oem_data[256]; nuclear@3: } PACKED; nuclear@0: nuclear@0: struct vbe_mode_info { nuclear@0: uint16_t mode_attr; nuclear@0: uint8_t wina_attr, winb_attr; nuclear@0: uint16_t win_gran, win_size; nuclear@0: uint16_t wina_seg, winb_seg; nuclear@0: uint32_t win_func; nuclear@0: uint16_t scanline_bytes; nuclear@0: nuclear@0: /* VBE 1.2 and above */ nuclear@0: uint16_t xres, yres; nuclear@0: uint8_t xcharsz, ycharsz; nuclear@0: uint8_t num_planes; nuclear@0: uint8_t bpp; nuclear@0: uint8_t num_banks; nuclear@0: uint8_t mem_model; nuclear@0: uint8_t bank_size; /* bank size in KB */ nuclear@0: uint8_t num_img_pages; nuclear@0: uint8_t reserved1; nuclear@0: nuclear@0: /* direct color fields */ nuclear@0: uint8_t rmask_size, rpos; nuclear@0: uint8_t gmask_size, gpos; nuclear@0: uint8_t bmask_size, bpos; nuclear@0: uint8_t xmask_size, xpos; nuclear@0: uint8_t cmode_info; /* direct color mode attributes */ nuclear@0: nuclear@0: /* VBE 2.0 and above */ nuclear@0: uint32_t fb_addr; /* physical address of the linear framebuffer */ nuclear@0: uint32_t reserved2; nuclear@0: uint16_t reserved3; nuclear@0: nuclear@0: uint8_t reserved4[206]; nuclear@3: } PACKED; nuclear@0: #pragma pack (pop) nuclear@0: nuclear@0: struct vbe_info *vbe_get_info(void); nuclear@3: struct vbe_mode_info *vbe_get_mode_info(int mode); nuclear@0: nuclear@3: int vbe_set_mode(int mode); nuclear@0: nuclear@0: int vbe_set_palette_bits(int bits); nuclear@0: void vbe_set_palette(int idx, int *col, int count, int bits); nuclear@0: nuclear@3: #define VBE_SET_DISP_START_NOW 0 nuclear@3: #define VBE_SET_DISP_START_VBLANK 0x80 nuclear@3: int vbe_set_disp_start(int x, int y, int when); nuclear@3: nuclear@3: #define VBE_SCANLEN_PIXELS 0 nuclear@3: #define VBE_SCANLEN_BYTES 2 nuclear@3: int vbe_set_scanlen(int len, int mode); nuclear@3: int vbe_get_scanlen(int mode); nuclear@3: nuclear@0: void print_mode_info(FILE *fp, struct vbe_mode_info *modei); nuclear@0: nuclear@0: #endif /* VBE_H_ */