| #ifndef _IPXE_VESAFB_H |
| #define _IPXE_VESAFB_H |
| |
| /** @file |
| * |
| * VESA frame buffer console |
| * |
| */ |
| |
| FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); |
| |
| #include <stdint.h> |
| #include <realmode.h> |
| |
| /** INT 10,4f00: return controller information */ |
| #define VBE_CONTROLLER_INFO 0x4f00 |
| |
| /** VBE controller information */ |
| struct vbe_controller_info { |
| /** VBE signature */ |
| uint32_t vbe_signature; |
| /** VBE minor version */ |
| uint8_t vbe_minor_version; |
| /** VBE major version */ |
| uint8_t vbe_major_version; |
| /** Pointer to OEM string */ |
| struct segoff oem_string_ptr; |
| /** Capabilities of graphics controller */ |
| uint32_t capabilities; |
| /** Pointer to video mode list */ |
| struct segoff video_mode_ptr; |
| /** Number of 64kB memory blocks */ |
| uint16_t total_memory; |
| /** VBE implementation software revision */ |
| uint16_t oem_software_rev; |
| /** Pointer to vendor name string */ |
| struct segoff oem_vendor_name_ptr; |
| /** Pointer to product name string */ |
| struct segoff oem_product_name_ptr; |
| /** Pointer to product revision string */ |
| struct segoff oem_product_rev_ptr; |
| /** Reserved for VBE implementation scratch area */ |
| uint8_t reserved[222]; |
| /* VBE2.0 defines an additional 256-byte data area for |
| * including the OEM strings inline within the VBE information |
| * block; we omit this to reduce the amount of base memory |
| * required for VBE calls. |
| */ |
| } __attribute__ (( packed )); |
| |
| /** VBE controller information signature */ |
| #define VBE_CONTROLLER_SIGNATURE \ |
| ( ( 'V' << 0 ) | ( 'E' << 8 ) | ( 'S' << 16 ) | ( 'A' << 24 ) ) |
| |
| /** VBE mode list end marker */ |
| #define VBE_MODE_END 0xffff |
| |
| /** INT 10,4f01: return VBE mode information */ |
| #define VBE_MODE_INFO 0x4f01 |
| |
| /** VBE mode information */ |
| struct vbe_mode_info { |
| /** Mode attributes */ |
| uint16_t mode_attributes; |
| /** Window A attributes */ |
| uint8_t win_a_attributes; |
| /** Window B attributes */ |
| uint8_t win_b_attributes; |
| /** Window granularity */ |
| uint16_t win_granularity; |
| /** Window size */ |
| uint16_t win_size; |
| /** Window A start segment */ |
| uint16_t win_a_segment; |
| /** Window B start segment */ |
| uint16_t win_b_segment; |
| /** Pointer to window function */ |
| struct segoff win_func_ptr; |
| /** Bytes per scan line */ |
| uint16_t bytes_per_scan_line; |
| /** Horizontal resolution in pixels or characters */ |
| uint16_t x_resolution; |
| /** Vertical resolution in pixels or characters */ |
| uint16_t y_resolution; |
| /** Character cell width in pixels */ |
| uint8_t x_char_size; |
| /** Character cell height in pixels */ |
| uint8_t y_char_size; |
| /** Number of memory planes */ |
| uint8_t number_of_planes; |
| /** Bits per pixel */ |
| uint8_t bits_per_pixel; |
| /** Number of banks */ |
| uint8_t number_of_banks; |
| /** Memory model type */ |
| uint8_t memory_model; |
| /** Bank size in kB */ |
| uint8_t bank_size; |
| /** Number of images */ |
| uint8_t number_of_image_pages; |
| /** Reserved for page function */ |
| uint8_t reserved_1; |
| /** Size of direct colour red mask in bits */ |
| uint8_t red_mask_size; |
| /** Bit position of LSB of red mask */ |
| uint8_t red_field_position; |
| /** Size of direct colour green mask in bits */ |
| uint8_t green_mask_size; |
| /** Bit position of LSB of green mask */ |
| uint8_t green_field_position; |
| /** Size of direct colour blue mask in bits */ |
| uint8_t blue_mask_size; |
| /** Bit position of LSB of blue mask */ |
| uint8_t blue_field_position; |
| /** Size of direct colour reserved mask in bits */ |
| uint8_t rsvd_mask_size; |
| /** Bit position of LSB of reserved mask */ |
| uint8_t rsvd_field_position; |
| /** Direct colour mode attributes */ |
| uint8_t direct_colour_mode_info; |
| /** Physical address for flat memory frame buffer */ |
| uint32_t phys_base_ptr; |
| /** Pointer to start of off-screen memory */ |
| uint32_t off_screen_mem_offset; |
| /** Amount of off-screen memory in 1kB units */ |
| uint16_t off_screen_mem_size; |
| /** Reserved */ |
| uint8_t reserved_2[206]; |
| } __attribute__ (( packed )); |
| |
| /** VBE mode attributes */ |
| enum vbe_mode_attributes { |
| /** Mode supported in hardware */ |
| VBE_MODE_ATTR_SUPPORTED = 0x0001, |
| /** TTY output functions supported by BIOS */ |
| VBE_MODE_ATTR_TTY = 0x0004, |
| /** Colour mode */ |
| VBE_MODE_ATTR_COLOUR = 0x0008, |
| /** Graphics mode */ |
| VBE_MODE_ATTR_GRAPHICS = 0x0010, |
| /** Not a VGA compatible mode */ |
| VBE_MODE_ATTR_NOT_VGA = 0x0020, |
| /** VGA compatible windowed memory mode is not available */ |
| VBE_MODE_ATTR_NOT_WINDOWED = 0x0040, |
| /** Linear frame buffer mode is available */ |
| VBE_MODE_ATTR_LINEAR = 0x0080, |
| /** Double scan mode is available */ |
| VBE_MODE_ATTR_DOUBLE = 0x0100, |
| /** Interlaced mode is available */ |
| VBE_MODE_ATTR_INTERLACED = 0x0200, |
| /** Hardware triple buffering support */ |
| VBE_MODE_ATTR_TRIPLE_BUF = 0x0400, |
| /** Hardware stereoscopic display support */ |
| VBE_MODE_ATTR_STEREO = 0x0800, |
| /** Dual display start address support */ |
| VBE_MODE_ATTR_DUAL = 0x1000, |
| }; |
| |
| /** VBE mode memory models */ |
| enum vbe_mode_memory_model { |
| /** Text mode */ |
| VBE_MODE_MODEL_TEXT = 0x00, |
| /** CGA graphics mode */ |
| VBE_MODE_MODEL_CGA = 0x01, |
| /** Hercules graphics mode */ |
| VBE_MODE_MODEL_HERCULES = 0x02, |
| /** Planar mode */ |
| VBE_MODE_MODEL_PLANAR = 0x03, |
| /** Packed pixel mode */ |
| VBE_MODE_MODEL_PACKED_PIXEL = 0x04, |
| /** Non-chain 4, 256 colour mode */ |
| VBE_MODE_MODEL_NON_CHAIN_4 = 0x05, |
| /** Direct colour mode */ |
| VBE_MODE_MODEL_DIRECT_COLOUR = 0x06, |
| /** YUV mode */ |
| VBE_MODE_MODEL_YUV = 0x07, |
| }; |
| |
| /** INT 10,4f02: set VBE mode */ |
| #define VBE_SET_MODE 0x4f02 |
| |
| /** VBE linear frame buffer mode bit */ |
| #define VBE_MODE_LINEAR 0x4000 |
| |
| /** INT 10,1130: get font information */ |
| #define VBE_GET_FONT 0x1130 |
| |
| /** Font sets */ |
| enum vbe_font_set { |
| /** 8x14 character font */ |
| VBE_FONT_8x14 = 0x0200, |
| /** 8x8 double dot font */ |
| VBE_FONT_8x8_DOUBLE = 0x0300, |
| /** 8x8 double dot font (high 128 characters) */ |
| VBE_FONT_8x8_DOUBLE_HIGH = 0x0400, |
| /** 9x14 alpha alternate font */ |
| VBE_FONT_9x14_ALPHA_ALT = 0x0500, |
| /** 8x16 font */ |
| VBE_FONT_8x16 = 0x0600, |
| /** 9x16 alternate font */ |
| VBE_FONT_9x16_ALT = 0x0700, |
| }; |
| |
| /** INT 10,00: set VGA mode */ |
| #define VBE_SET_VGA_MODE 0x0000 |
| |
| /** INT 10,0f: get VGA mode */ |
| #define VBE_GET_VGA_MODE 0x0f00 |
| |
| #endif /* _IPXE_VESAFB_H */ |