2004-06-17 05:02:40 +04:00
|
|
|
/*
|
2009-06-05 17:03:05 +04:00
|
|
|
* Copyright 2004-2009, Axel Dörfler, axeld@pinc-software.de.
|
2008-10-31 12:52:57 +03:00
|
|
|
* Distributed under the terms of the MIT License.
|
|
|
|
*/
|
2004-06-17 05:02:40 +04:00
|
|
|
#ifndef VESA_H
|
|
|
|
#define VESA_H
|
|
|
|
|
|
|
|
|
|
|
|
#include <SupportDefs.h>
|
|
|
|
|
|
|
|
|
|
|
|
/* VBE info block structure */
|
|
|
|
|
|
|
|
#define VESA_SIGNATURE 'ASEV'
|
|
|
|
#define VBE2_SIGNATURE '2EBV'
|
|
|
|
|
|
|
|
struct vbe_info_block {
|
|
|
|
// VBE 1.x fields
|
|
|
|
uint32 signature;
|
|
|
|
struct {
|
|
|
|
uint8 minor;
|
|
|
|
uint8 major;
|
|
|
|
} version;
|
|
|
|
uint32 oem_string;
|
|
|
|
uint32 capabilities;
|
|
|
|
uint32 mode_list;
|
|
|
|
uint16 total_memory; // in 64k blocks
|
|
|
|
// VBE 2.0+ fields only
|
|
|
|
// Note, the block is 256 bytes in size for VBE 1.x as well,
|
|
|
|
// but doesn't define these fields. VBE 3 doesn't define
|
|
|
|
// any additional fields.
|
|
|
|
uint16 oem_software_revision;
|
|
|
|
uint32 oem_vendor_name_string;
|
|
|
|
uint32 oem_product_name_string;
|
|
|
|
uint32 oem_product_revision_string;
|
|
|
|
uint8 reserved[222];
|
|
|
|
uint8 oem_data[256];
|
|
|
|
} _PACKED;
|
|
|
|
|
2009-08-14 13:49:28 +04:00
|
|
|
// capabilities
|
2009-08-14 18:30:01 +04:00
|
|
|
#define CAPABILITY_DAC_WIDTH 0x01
|
|
|
|
#define CAPABILITY_NOT_VGA_COMPATIBLE 0x02
|
2009-08-14 13:49:28 +04:00
|
|
|
|
2004-06-17 05:02:40 +04:00
|
|
|
|
|
|
|
/* VBE mode info structure */
|
|
|
|
|
|
|
|
struct vbe_mode_info {
|
|
|
|
uint16 attributes;
|
|
|
|
uint8 window_a_attributes;
|
|
|
|
uint8 window_b_attributes;
|
2009-08-05 21:24:23 +04:00
|
|
|
uint16 window_granularity;
|
2004-06-17 05:02:40 +04:00
|
|
|
uint16 window_size;
|
|
|
|
uint16 window_a_segment;
|
|
|
|
uint16 window_b_segment;
|
|
|
|
uint32 window_function; // real mode pointer
|
|
|
|
uint16 bytes_per_row;
|
|
|
|
|
|
|
|
// VBE 1.2 and above
|
|
|
|
uint16 width;
|
|
|
|
uint16 height;
|
|
|
|
uint8 char_width;
|
|
|
|
uint8 char_height;
|
|
|
|
uint8 num_planes;
|
|
|
|
uint8 bits_per_pixel;
|
|
|
|
uint8 num_banks;
|
|
|
|
uint8 memory_model;
|
|
|
|
uint8 bank_size;
|
|
|
|
uint8 num_image_pages;
|
|
|
|
uint8 _reserved0;
|
|
|
|
|
|
|
|
// direct color fields
|
|
|
|
uint8 red_mask_size;
|
|
|
|
uint8 red_field_position;
|
|
|
|
uint8 green_mask_size;
|
|
|
|
uint8 green_field_position;
|
|
|
|
uint8 blue_mask_size;
|
|
|
|
uint8 blue_field_position;
|
|
|
|
uint8 reserved_mask_size;
|
|
|
|
uint8 reserved_field_position;
|
|
|
|
uint8 direct_color_mode_info;
|
|
|
|
|
|
|
|
// VBE 2.0 and above
|
|
|
|
uint32 physical_base;
|
|
|
|
uint32 _reserved1;
|
|
|
|
uint16 _reserved2;
|
|
|
|
|
|
|
|
// VBE 3.0 and above
|
|
|
|
uint16 linear_bytes_per_row;
|
|
|
|
uint8 banked_num_image_pages;
|
|
|
|
uint8 linear_num_image_pages;
|
|
|
|
|
|
|
|
uint8 linear_red_mask_size;
|
|
|
|
uint8 linear_red_field_position;
|
|
|
|
uint8 linear_green_mask_size;
|
|
|
|
uint8 linear_green_field_position;
|
|
|
|
uint8 linear_blue_mask_size;
|
|
|
|
uint8 linear_blue_field_position;
|
|
|
|
uint8 linear_reserved_mask_size;
|
|
|
|
uint8 linear_reserved_field_position;
|
|
|
|
|
|
|
|
uint32 max_pixel_clock; // in Hz
|
|
|
|
|
|
|
|
uint8 _reserved[189];
|
|
|
|
} _PACKED;
|
|
|
|
|
|
|
|
// definitions of mode info attributes
|
|
|
|
#define MODE_ATTR_AVAILABLE 1
|
|
|
|
#define MODE_ATTR_COLOR_MODE 8
|
|
|
|
#define MODE_ATTR_GRAPHICS_MODE 16
|
|
|
|
#define MODE_ATTR_LINEAR_BUFFER 128
|
|
|
|
|
|
|
|
// memory models
|
|
|
|
#define MODE_MEMORY_TEXT 0
|
|
|
|
#define MODE_MEMORY_PLANAR 3
|
|
|
|
#define MODE_MEMORY_PACKED_PIXEL 4
|
|
|
|
#define MODE_MEMORY_DIRECT_COLOR 6
|
|
|
|
#define MODE_MEMORY_YUV 7
|
|
|
|
|
2004-06-18 17:41:38 +04:00
|
|
|
// set mode flags
|
|
|
|
#define SET_MODE_MASK 0x01ff
|
|
|
|
#define SET_MODE_SPECIFY_CRTC (1 << 11)
|
|
|
|
#define SET_MODE_LINEAR_BUFFER (1 << 14)
|
|
|
|
#define SET_MODE_DONT_CLEAR_MEMORY (1 << 15)
|
|
|
|
|
2004-06-17 05:02:40 +04:00
|
|
|
|
2008-10-31 12:52:57 +03:00
|
|
|
/* CRTC info block structure */
|
|
|
|
|
|
|
|
struct crtc_info_block {
|
|
|
|
uint16 horizontal_total;
|
|
|
|
uint16 horizontal_sync_start;
|
|
|
|
uint16 horizontal_sync_end;
|
|
|
|
uint16 vertical_total;
|
|
|
|
uint16 vertical_sync_start;
|
|
|
|
uint16 vertical_sync_end;
|
|
|
|
uint8 flags;
|
|
|
|
uint32 pixel_clock; // in Hz
|
|
|
|
uint16 refresh_rate; // in 0.01 Hz
|
|
|
|
|
|
|
|
uint8 _reserved[40];
|
|
|
|
} _PACKED;
|
|
|
|
|
|
|
|
#define CRTC_DOUBLE_SCAN 0x01
|
|
|
|
#define CRTC_INTERLACED 0x02
|
|
|
|
#define CRTC_NEGATIVE_HSYNC 0x04
|
|
|
|
#define CRTC_NEGATIVE_VSYNC 0x08
|
|
|
|
|
|
|
|
|
2009-06-05 17:03:05 +04:00
|
|
|
/* Power Management */
|
|
|
|
|
|
|
|
#define DPMS_ON 0x00
|
|
|
|
#define DPMS_STANDBY 0x01
|
|
|
|
#define DPMS_SUSPEND 0x02
|
|
|
|
#define DPMS_OFF 0x04
|
|
|
|
#define DPMS_REDUCED_ON 0x08
|
|
|
|
|
|
|
|
|
2004-06-17 05:02:40 +04:00
|
|
|
/* VBE 3.0 protected mode interface
|
|
|
|
* The BIOS area can be scanned for the protected mode
|
|
|
|
* signature that identifies the structure below.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define VBE_PM_SIGNATURE 'DIMP'
|
|
|
|
|
|
|
|
struct vbe_protected_mode_info {
|
|
|
|
uint32 signature;
|
|
|
|
int16 entry_offset;
|
|
|
|
int16 init_offset;
|
|
|
|
uint16 data_selector;
|
|
|
|
uint16 a000_selector;
|
|
|
|
uint16 b000_selector;
|
|
|
|
uint16 b800_selector;
|
|
|
|
uint16 c000_selector;
|
|
|
|
uint8 in_protected_mode;
|
|
|
|
uint8 checksum;
|
|
|
|
} _PACKED;
|
|
|
|
|
|
|
|
#endif /* VESA_H */
|