#define VBE_H_
#include "inttypes.h"
+#include "util.h"
-#ifdef __GNUC__
-#define PACKED __attribute__((packed))
-#else
-#define PACKED
-#endif
-
-#define VBE_ATTR_LFB (1 << 7)
-#define VBE_MODE_LFB (1 << 14)
-
-#pragma pack (push, 0)
+#pragma pack (push, 1)
struct vbe_info {
- uint8_t sig[4];
- uint16_t version;
- uint32_t oem_str_ptr;
- uint8_t caps[4]; /* capabilities */
- uint32_t vid_mode_ptr; /* vbefarptr to video mode list */
- uint16_t total_mem; /* num of 64k mem blocks */
- uint16_t oem_sw_rev; /* VBE implementation software revision */
- uint32_t oem_vendor_name_ptr;
- uint32_t oem_product_name_ptr;
- uint32_t oem_product_rev_ptr;
- uint8_t reserved[222];
- uint8_t oem_data[256];
-} PACKED;
-
-struct vbe_mode_info {
- uint16_t mode_attr;
- uint8_t wina_attr, winb_attr;
- uint16_t win_gran, win_size;
- uint16_t wina_seg, winb_seg;
- uint32_t win_func;
- uint16_t scanline_bytes;
-
- /* VBE 1.2 and above */
- uint16_t xres, yres;
- uint8_t xcharsz, ycharsz;
- uint8_t num_planes;
- uint8_t bpp;
- uint8_t num_banks;
- uint8_t mem_model;
- uint8_t bank_size; /* bank size in KB */
- uint8_t num_img_pages;
- uint8_t reserved1;
-
- /* direct color fields */
- uint8_t rmask_size, rpos;
- uint8_t gmask_size, gpos;
- uint8_t bmask_size, bpos;
- uint8_t xmask_size, xpos;
- uint8_t cmode_info; /* direct color mode attributes */
-
- /* VBE 2.0 and above */
- uint32_t fb_addr; /* physical address of the linear framebuffer */
- uint32_t reserved2;
- uint16_t reserved3;
-
- uint8_t reserved4[206];
+ char sig[4];
+ uint16_t ver;
+ char *oem_name;
+ uint32_t caps;
+ uint16_t *modes;
+ uint16_t oem_ver;
+ char *vendor;
+ char *product;
+ char *revstr;
+ uint16_t accel_ver;
+ uint16_t accel_modes;
} PACKED;
#pragma pack (pop)
-struct vbe_info *vbe_get_info(void);
-struct vbe_mode_info *vbe_get_mode_info(int mode);
-
-int vbe_set_mode(int mode);
-
-int vbe_set_palette_bits(int bits);
-void vbe_set_palette(int idx, int *col, int count, int bits);
-
-void print_mode_info(FILE *fp, struct vbe_mode_info *modei);
+enum {
+ VBE_8BIT_DAC = 0x01,
+ VBE_NON_VGA = 0x02,
+ VBE_DAC_BLANK = 0x04,
+ VBE_STEREO = 0x08, /* ? */
+ VBE_ACCEL = 0x08,
+ VBE_STEREO_VESA = 0x10, /* ? */
+ VBE_MUSTLOCK = 0x10,
+ VBE_HWCURSOR = 0x20,
+ VBE_HWCLIP = 0x40,
+ VBE_TRANSP_BLT = 0x80
+};
+
+int vbe_getinfo(struct vbe_info *info);
#endif /* VBE_H_ */