mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-25 16:37:42 +01:00
502 lines
22 KiB
C
502 lines
22 KiB
C
|
/** @file
|
||
|
|
||
|
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
||
|
|
||
|
This program and the accompanying materials
|
||
|
are licensed and made available under the terms and conditions
|
||
|
of the BSD License which accompanies this distribution. The
|
||
|
full text of the license may be found at
|
||
|
http://opensource.org/licenses/bsd-license.php
|
||
|
|
||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
VesaBiosExtensions.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Revision History
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _VESA_BIOS_EXTENSIONS_H_
|
||
|
#define _VESA_BIOS_EXTENSIONS_H_
|
||
|
|
||
|
//
|
||
|
// Turn on byte packing of data structures
|
||
|
//
|
||
|
#pragma pack(1)
|
||
|
//
|
||
|
// VESA BIOS Extensions status codes
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_STATUS_SUCCESS 0x004f
|
||
|
|
||
|
//
|
||
|
// VESA BIOS Extensions Services
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_RETURN_CONTROLLER_INFORMATION 0x4f00
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
Function 00 : Return Controller Information
|
||
|
|
||
|
Arguments:
|
||
|
Inputs:
|
||
|
AX = 0x4f00
|
||
|
ES:DI = Pointer to buffer to place VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK structure
|
||
|
Outputs:
|
||
|
AX = Return Status
|
||
|
|
||
|
--*/
|
||
|
#define VESA_BIOS_EXTENSIONS_RETURN_MODE_INFORMATION 0x4f01
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
Function 01 : Return Mode Information
|
||
|
|
||
|
Arguments:
|
||
|
Inputs:
|
||
|
AX = 0x4f01
|
||
|
CX = Mode Number
|
||
|
ES:DI = Pointer to buffer to place VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK structure
|
||
|
Outputs:
|
||
|
AX = Return Status
|
||
|
|
||
|
--*/
|
||
|
#define VESA_BIOS_EXTENSIONS_SET_MODE 0x4f02
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
Function 02 : Set Mode
|
||
|
|
||
|
Arguments:
|
||
|
Inputs:
|
||
|
AX = 0x4f02
|
||
|
BX = Desired mode to set
|
||
|
D0-D8 = Mode Number
|
||
|
D9-D10 = Reserved (must be 0)
|
||
|
D11 = 0 - Use current default refresh rate
|
||
|
= 1 - Use user specfieid CRTC values for refresh rate
|
||
|
D12-D13 = Reserved (must be 0)
|
||
|
D14 = 0 - Use windowed frame buffer model
|
||
|
= 1 - Use linear/flat frame buffer model
|
||
|
D15 = 0 - Clear display memory
|
||
|
= 1 - Don't clear display memory
|
||
|
ES:DI = Pointer to buffer to the VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK structure
|
||
|
Outputs:
|
||
|
AX = Return Status
|
||
|
|
||
|
--*/
|
||
|
#define VESA_BIOS_EXTENSIONS_RETURN_CURRENT_MODE 0x4f03
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
Function 03 : Return Current Mode
|
||
|
|
||
|
Arguments:
|
||
|
Inputs:
|
||
|
AX = 0x4f03
|
||
|
Outputs:
|
||
|
AX = Return Status
|
||
|
BX = Current mode
|
||
|
D0-D13 = Mode Number
|
||
|
D14 = 0 - Windowed frame buffer model
|
||
|
= 1 - Linear/flat frame buffer model
|
||
|
D15 = 0 - Memory cleared at last mode set
|
||
|
= 1 - Memory not cleared at last mode set
|
||
|
|
||
|
--*/
|
||
|
#define VESA_BIOS_EXTENSIONS_SAVE_RESTORE_STATE 0x4f04
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
Function 04 : Save/Restore State
|
||
|
|
||
|
Arguments:
|
||
|
Inputs:
|
||
|
AX = 0x4f03
|
||
|
DL = 0x00 - Return Save/Restore State buffer size
|
||
|
= 0x01 - Save State
|
||
|
= 0x02 - Restore State
|
||
|
CX = Requested Status
|
||
|
D0 = Save/Restore controller hardware state
|
||
|
D1 = Save/Restore BIOS data state
|
||
|
D2 = Save/Restore DAC state
|
||
|
D3 = Save/Restore Regsiter state
|
||
|
ES:BX = Pointer to buffer if DL=1 or DL=2
|
||
|
Outputs:
|
||
|
AX = Return Status
|
||
|
BX = Number of 64 byte blocks to hold the state buffer if DL=0
|
||
|
|
||
|
--*/
|
||
|
#define VESA_BIOS_EXTENSIONS_EDID 0x4f15
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
Function 15 : implement VBE/DDC service
|
||
|
|
||
|
Arguments:
|
||
|
Inputs:
|
||
|
AX = 0x4f15
|
||
|
BL = 0x00 - Report VBE/DDC Capabilities
|
||
|
CX = 0x00 - Controller unit number (00 = primary controller)
|
||
|
ES:DI = Null pointer, must be 0:0 in version 1.0
|
||
|
Outputs:
|
||
|
AX = Return Status
|
||
|
BH = Approx. time in seconds, rounded up, to transfer one EDID block(128 bytes)
|
||
|
BL = DDC level supported
|
||
|
D0 = 0 DDC1 not supported
|
||
|
= 1 DDC1 supported
|
||
|
D1 = 0 DDC2 not supported
|
||
|
= 1 DDC2 supported
|
||
|
D2 = 0 Screen not blanked during data transfer
|
||
|
= 1 Screen blanked during data transfer
|
||
|
|
||
|
Inputs:
|
||
|
AX = 0x4f15
|
||
|
BL = 0x01 - Read EDID
|
||
|
CX = 0x00 - Controller unit number (00 = primary controller)
|
||
|
DX = 0x00 - EDID block number
|
||
|
ES:DI = Pointer to buffer in which the EDID block is returned
|
||
|
Outputs:
|
||
|
AX = Return Status
|
||
|
--*/
|
||
|
|
||
|
//
|
||
|
// Timing data from EDID data block
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE 128
|
||
|
#define VESA_BIOS_EXTENSIONS_EDID_ESTABLISHED_TIMING_MAX_NUMBER 17
|
||
|
#define VESA_BIOS_EXTENSIONS_EDID_STANDARD_TIMING_MAX_NUMBER 8
|
||
|
#define VESA_BIOS_EXTENSIONS_EDID_ADDITIONAL_TIMING_MAX_NUMBER 24
|
||
|
#define DETAILED_TIMING_DESCRIPTIONS_START 0x36
|
||
|
#define DETAILED_TIMING_DESCRIPTION_SIZE 18
|
||
|
#define NO_DETAILED_TIMING_DESCRIPTIONS 4
|
||
|
|
||
|
typedef struct {
|
||
|
UINT16 HorizontalResolution;
|
||
|
UINT16 VerticalResolution;
|
||
|
UINT16 RefreshRate;
|
||
|
} VESA_BIOS_EXTENSIONS_EDID_TIMING;
|
||
|
|
||
|
typedef struct {
|
||
|
UINT32 ValidNumber;
|
||
|
UINT32 Key[VESA_BIOS_EXTENSIONS_EDID_ESTABLISHED_TIMING_MAX_NUMBER + NO_DETAILED_TIMING_DESCRIPTIONS +
|
||
|
VESA_BIOS_EXTENSIONS_EDID_STANDARD_TIMING_MAX_NUMBER +
|
||
|
VESA_BIOS_EXTENSIONS_EDID_ADDITIONAL_TIMING_MAX_NUMBER];
|
||
|
} VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING;
|
||
|
|
||
|
typedef struct {
|
||
|
UINT8 Header[8]; //EDID header "00 FF FF FF FF FF FF 00"
|
||
|
UINT16 ManufactureName; //EISA 3-character ID
|
||
|
UINT16 ProductCode; //Vendor assigned code
|
||
|
UINT32 SerialNumber; //32-bit serial number
|
||
|
UINT8 WeekOfManufacture; //Week number
|
||
|
UINT8 YearOfManufacture; //Year
|
||
|
UINT8 EdidVersion; //EDID Structure Version
|
||
|
UINT8 EdidRevision; //EDID Structure Revision
|
||
|
UINT8 VideoInputDefinition;
|
||
|
UINT8 MaxHorizontalImageSize; //cm
|
||
|
UINT8 MaxVerticalImageSize; //cm
|
||
|
UINT8 DisplayTransferCharacteristic;
|
||
|
UINT8 FeatureSupport;
|
||
|
UINT8 RedGreenLowBits; //Rx1 Rx0 Ry1 Ry0 Gx1 Gx0 Gy1Gy0
|
||
|
UINT8 BlueWhiteLowBits; //Bx1 Bx0 By1 By0 Wx1 Wx0 Wy1 Wy0
|
||
|
UINT8 RedX; //Red-x Bits 9 - 2
|
||
|
UINT8 RedY; //Red-y Bits 9 - 2
|
||
|
UINT8 GreenX; //Green-x Bits 9 - 2
|
||
|
UINT8 GreenY; //Green-y Bits 9 - 2
|
||
|
UINT8 BlueX; //Blue-x Bits 9 - 2
|
||
|
UINT8 BlueY; //Blue-y Bits 9 - 2
|
||
|
UINT8 WhiteX; //White-x Bits 9 - 2
|
||
|
UINT8 WhiteY; //White-x Bits 9 - 2
|
||
|
UINT8 EstablishedTimings[3];
|
||
|
UINT8 StandardTimingIdentification[16];
|
||
|
UINT8 DetailedTimingDescriptions[72];
|
||
|
UINT8 ExtensionFlag; //Number of (optional) 128-byte EDID extension blocks to follow
|
||
|
UINT8 Checksum;
|
||
|
} VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK;
|
||
|
|
||
|
//
|
||
|
// Super VGA Information Block
|
||
|
//
|
||
|
typedef struct {
|
||
|
UINT32 VESASignature; // 'VESA' 4 byte signature
|
||
|
UINT16 VESAVersion; // VBE version number
|
||
|
UINT32 OEMStringPtr; // Pointer to OEM string
|
||
|
UINT32 Capabilities; // Capabilities of video card
|
||
|
UINT32 VideoModePtr; // Pointer to an array of 16-bit supported modes values terminated by 0xFFFF
|
||
|
UINT16 TotalMemory; // Number of 64kb memory blocks = 0x7b=7872kb
|
||
|
UINT16 OemSoftwareRev; // VBE implementation Software revision = 0x0100
|
||
|
UINT32 OemVendorNamePtr; // VbeFarPtr to Vendor Name String=9c143->Intel Corporation
|
||
|
UINT32 OemProductNamePtr; // VbeFarPtr to Product Name String=9c155->
|
||
|
UINT32 OemProductRevPtr; // VbeFarPtr to Product Revision String=9c189->0.0
|
||
|
UINT8 Reserved[222]; // Reserved for VBE implementation scratch area
|
||
|
UINT8 OemData[256]; // Data area for OEM strings. Pad to 512 byte block size
|
||
|
} VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK;
|
||
|
//A sample at 0x9c000
|
||
|
/*
|
||
|
0x0000: 56 45 53 41 00 03 00 c1 00 90 01 00 00 00 40 c0 VESA............
|
||
|
0x0010: 00 90 7b 00 00 01 43 c1 00 90 55 c1 00 90 89 c1 ......C...U.....
|
||
|
0x0020: 00 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x0040: 60 01 61 01 62 01 63 01 64 01 65 01 66 01 67 01 ..a.b.c.d.e.f.g.
|
||
|
0x0050: 68 01 69 01 6a 01 6b 01 6c 01 6d 01 6e 01 6f 01 h.i.j.k.l.m.n.o.
|
||
|
0x0060: 70 01 71 01 3c 01 4d 01 5c 01 3a 01 4b 01 5a 01 p.q...M.....K.Z.
|
||
|
0x0070: 07 01 1a 01 1b 01 05 01 17 01 18 01 12 01 14 01 ................
|
||
|
0x0080: 15 01 01 01 03 01 11 01 ff ff 00 00 00 00 00 00 ................
|
||
|
0x0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x00F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x0100: 49 6e 74 65 6c 28 72 29 20 38 32 39 34 35 47 4d Intel.r..82945GM
|
||
|
0x0110: 20 43 68 69 70 73 65 74 20 46 61 6d 69 6c 79 20 .Chipset.Family.
|
||
|
0x0120: 47 72 61 70 68 69 63 73 20 43 68 69 70 20 41 63 Graphics.Chip.Ac
|
||
|
0x0130: 63 65 6c 65 72 61 74 65 64 20 56 47 41 20 42 49 celerated.VGA.BI
|
||
|
0x0140: 4f 53 00 49 6e 74 65 6c 20 43 6f 72 70 6f 72 61 OS.Intel.Corpora
|
||
|
0x0150: 74 69 6f 6e 00 49 6e 74 65 6c 28 72 29 20 38 32 tion.Intel.r..82
|
||
|
0x0160: 39 34 35 47 4d 20 43 68 69 70 73 65 74 20 46 61 945GM.Chipset.Fa
|
||
|
0x0170: 6d 69 6c 79 20 47 72 61 70 68 69 63 73 20 43 6f mily.Graphics.Co
|
||
|
0x0180: 6e 74 72 6f 6c 6c 65 72 00 48 61 72 64 77 61 72 ntroller.Hardwar
|
||
|
0x0190: 65 20 56 65 72 73 69 6f 6e 20 30 2e 30 00 00 00 e.Version.0.0...
|
||
|
0x01A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x01B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x01C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x01D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x01E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||
|
0x01F0: 7c bb b3 34 0a bd b3 34 30 01 90 04 3c 00 00 00 ...4...40.......
|
||
|
*/
|
||
|
|
||
|
//
|
||
|
// Super VGA Information Block VESASignature values
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_VESA_SIGNATURE SIGNATURE_32 ('V', 'E', 'S', 'A')
|
||
|
#define VESA_BIOS_EXTENSIONS_VBE2_SIGNATURE SIGNATURE_32 ('V', 'B', 'E', '2')
|
||
|
|
||
|
//
|
||
|
// Super VGA Information Block VESAVersion values
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_VERSION_1_2 0x0102
|
||
|
#define VESA_BIOS_EXTENSIONS_VERSION_2_0 0x0200
|
||
|
#define VESA_BIOS_EXTENSIONS_VERSION_3_0 0x0300
|
||
|
|
||
|
//
|
||
|
// Super VGA Information Block Capabilities field bit defintions
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_CAPABILITY_8_BIT_DAC 0x01 // 0: DAC width is fixed at 6 bits/color
|
||
|
// 1: DAC width switchable to 8 bits/color
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_VGA 0x02 // 0: Controller is VGA compatible
|
||
|
// 1: Controller is not VGA compatible
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_NORMAL_RAMDAC 0x04 // 0: Normal RAMDAC operation
|
||
|
// 1: Use blank bit in function 9 to program RAMDAC
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_CAPABILITY_STEREOSCOPIC 0x08 // 0: No hardware stereoscopic signal support
|
||
|
// 1: Hardware stereoscopic signal support
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_CAPABILITY_VESA_EVC 0x10 // 0: Stero signaling supported via external VESA stereo connector
|
||
|
// 1: Stero signaling supported via VESA EVC connector
|
||
|
//
|
||
|
// Super VGA mode number bite field definitions
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_VESA 0x0100 // 0: Not a VESA defined VBE mode
|
||
|
// 1: A VESA defined VBE mode
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_REFRESH_CONTROL_USER 0x0800 // 0: Use current BIOS default referesh rate
|
||
|
// 1: Use the user specified CRTC values for refresh rate
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_LINEAR_FRAME_BUFFER 0x4000 // 0: Use a banked/windowed frame buffer
|
||
|
// 1: Use a linear/flat frame buffer
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_NUMBER_PRESERVE_MEMORY 0x8000 // 0: Clear display memory
|
||
|
// 1: Preseve display memory
|
||
|
//
|
||
|
// Super VGA Information Block mode list terminator value
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_END_OF_MODE_LIST 0xffff
|
||
|
|
||
|
//
|
||
|
// Window Function
|
||
|
//
|
||
|
typedef
|
||
|
VOID
|
||
|
(*VESA_BIOS_EXTENSIONS_WINDOW_FUNCTION) (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Super VGA Mode Information Block
|
||
|
//
|
||
|
typedef struct {
|
||
|
//
|
||
|
// Manadory fields for all VESA Bios Extensions revisions
|
||
|
//
|
||
|
UINT16 ModeAttributes; // Mode attributes
|
||
|
UINT8 WinAAttributes; // Window A attributes
|
||
|
UINT8 WinBAttributes; // Window B attributes
|
||
|
UINT16 WinGranularity; // Window granularity in k
|
||
|
UINT16 WinSize; // Window size in k
|
||
|
UINT16 WinASegment; // Window A segment
|
||
|
UINT16 WinBSegment; // Window B segment
|
||
|
UINT32 WindowFunction; // Pointer to window function
|
||
|
UINT16 BytesPerScanLine; // Bytes per scanline
|
||
|
//
|
||
|
// Manadory fields for VESA Bios Extensions 1.2 and above
|
||
|
//
|
||
|
UINT16 XResolution; // Horizontal resolution
|
||
|
UINT16 YResolution; // Vertical resolution
|
||
|
UINT8 XCharSize; // Character cell width
|
||
|
UINT8 YCharSize; // Character cell height
|
||
|
UINT8 NumberOfPlanes; // Number of memory planes
|
||
|
UINT8 BitsPerPixel; // Bits per pixel
|
||
|
UINT8 NumberOfBanks; // Number of CGA style banks
|
||
|
UINT8 MemoryModel; // Memory model type
|
||
|
UINT8 BankSize; // Size of CGA style banks
|
||
|
UINT8 NumberOfImagePages; // Number of images pages
|
||
|
UINT8 Reserved1; // Reserved
|
||
|
UINT8 RedMaskSize; // Size of direct color red mask
|
||
|
UINT8 RedFieldPosition; // Bit posn of lsb of red mask
|
||
|
UINT8 GreenMaskSize; // Size of direct color green mask
|
||
|
UINT8 GreenFieldPosition; // Bit posn of lsb of green mask
|
||
|
UINT8 BlueMaskSize; // Size of direct color blue mask
|
||
|
UINT8 BlueFieldPosition; // Bit posn of lsb of blue mask
|
||
|
UINT8 RsvdMaskSize; // Size of direct color res mask
|
||
|
UINT8 RsvdFieldPosition; // Bit posn of lsb of res mask
|
||
|
UINT8 DirectColorModeInfo; // Direct color mode attributes
|
||
|
//
|
||
|
// Manadory fields for VESA Bios Extensions 2.0 and above
|
||
|
//
|
||
|
UINT32 PhysBasePtr; // Physical Address for flat memory frame buffer
|
||
|
UINT32 Reserved2; // Reserved
|
||
|
UINT16 Reserved3; // Reserved
|
||
|
//
|
||
|
// Manadory fields for VESA Bios Extensions 3.0 and above
|
||
|
//
|
||
|
UINT16 LinBytesPerScanLine; // Bytes/scan line for linear modes
|
||
|
UINT8 BnkNumberOfImagePages; // Number of images for banked modes
|
||
|
UINT8 LinNumberOfImagePages; // Number of images for linear modes
|
||
|
UINT8 LinRedMaskSize; // Size of direct color red mask (linear mode)
|
||
|
UINT8 LinRedFieldPosition; // Bit posiiton of lsb of red mask (linear modes)
|
||
|
UINT8 LinGreenMaskSize; // Size of direct color green mask (linear mode)
|
||
|
UINT8 LinGreenFieldPosition; // Bit posiiton of lsb of green mask (linear modes)
|
||
|
UINT8 LinBlueMaskSize; // Size of direct color blue mask (linear mode)
|
||
|
UINT8 LinBlueFieldPosition; // Bit posiiton of lsb of blue mask (linear modes)
|
||
|
UINT8 LinRsvdMaskSize; // Size of direct color reserved mask (linear mode)
|
||
|
UINT8 LinRsvdFieldPosition; // Bit posiiton of lsb of reserved mask (linear modes)
|
||
|
UINT32 MaxPixelClock; // Maximum pixel clock (in Hz) for graphics mode
|
||
|
UINT8 Pad[190]; // Pad to 256 byte block size
|
||
|
} VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK;
|
||
|
|
||
|
//
|
||
|
// Super VGA Mode Information Block ModeAttributes field bit defintions
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_HARDWARE 0x0001 // 0: Mode not supported in handware
|
||
|
// 1: Mode supported in handware
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_TTY 0x0004 // 0: TTY Output functions not supported by BIOS
|
||
|
// 1: TTY Output functions supported by BIOS
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_COLOR 0x0008 // 0: Monochrome mode
|
||
|
// 1: Color mode
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_GRAPHICS 0x0010 // 0: Text mode
|
||
|
// 1: Graphics mode
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NOT_VGA 0x0020 // 0: VGA compatible mode
|
||
|
// 1: Not a VGA compatible mode
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NOT_WINDOWED 0x0040 // 0: VGA compatible windowed memory mode
|
||
|
// 1: Not a VGA compatible windowed memory mode
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER 0x0080 // 0: No linear fram buffer mode available
|
||
|
// 1: Linear frame buffer mode available
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_DOUBLE_SCAN 0x0100 // 0: No double scan mode available
|
||
|
// 1: Double scan mode available
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_INTERLACED 0x0200 // 0: No interlaced mode is available
|
||
|
// 1: Interlaced mode is available
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NO_TRIPPLE_BUFFER 0x0400 // 0: No hardware triple buffer mode support available
|
||
|
// 1: Hardware triple buffer mode support available
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_STEREOSCOPIC 0x0800 // 0: No hardware steroscopic display support
|
||
|
// 1: Hardware steroscopic display support
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_DUAL_DISPLAY 0x1000 // 0: No dual display start address support
|
||
|
// 1: Dual display start address support
|
||
|
//
|
||
|
// Super VGA Mode Information Block WinAAttribite/WinBAttributes field bit defintions
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_RELOCATABLE 0x01 // 0: Single non-relocatable window only
|
||
|
// 1: Relocatable window(s) are supported
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_READABLE 0x02 // 0: Window is not readable
|
||
|
// 1: Window is readable
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_WRITABLE 0x04 // 0: Window is not writable
|
||
|
// 1: Window is writable
|
||
|
//
|
||
|
// Super VGA Mode Information Block DirectColorMode field bit defintions
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_DIRECT_COLOR_MODE_PROG_COLOR_RAMP 0x01 // 0: Color ram is fixed
|
||
|
// 1: Color ramp is programmable
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_DIRECT_COLOR_MODE_RSVD_USABLE 0x02 // 0: Bits in Rsvd field are reserved
|
||
|
// 1: Bits in Rsdv field are usable
|
||
|
//
|
||
|
// Super VGA Memory Models
|
||
|
//
|
||
|
typedef enum {
|
||
|
memPL = 3, // Planar memory model
|
||
|
memPK = 4, // Packed pixel memory model
|
||
|
memRGB= 6, // Direct color RGB memory model
|
||
|
memYUV= 7 // Direct color YUV memory model
|
||
|
} VESA_BIOS_EXTENSIONS_MEMORY_MODELS;
|
||
|
|
||
|
//
|
||
|
// Super VGA CRTC Information Block
|
||
|
//
|
||
|
typedef struct {
|
||
|
UINT16 HorizontalTotal; // Horizontal total in pixels
|
||
|
UINT16 HorizontalSyncStart; // Horizontal sync start in pixels
|
||
|
UINT16 HorizontalSyncEnd; // Horizontal sync end in pixels
|
||
|
UINT16 VericalTotal; // Vertical total in pixels
|
||
|
UINT16 VericalSyncStart; // Vertical sync start in pixels
|
||
|
UINT16 VericalSyncEnd; // Vertical sync end in pixels
|
||
|
UINT8 Flags; // Flags (Interlaced/DoubleScan/etc).
|
||
|
UINT32 PixelClock; // Pixel clock in units of Hz
|
||
|
UINT16 RefreshRate; // Refresh rate in units of 0.01 Hz
|
||
|
UINT8 Reserved[40]; // Pad
|
||
|
} VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK;
|
||
|
|
||
|
#define VESA_BIOS_EXTENSIONS_CRTC_FLAGS_DOUBLE_SCAN 0x01 // 0: Graphics mode is not souble scanned
|
||
|
// 1: Graphics mode is double scanned
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_CRTC_FLAGSINTERLACED 0x02 // 0: Graphics mode is not interlaced
|
||
|
// 1: Graphics mode is interlaced
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_CRTC_HORIZONTAL_SYNC_NEGATIVE 0x04 // 0: Horizontal sync polarity is positive(+)
|
||
|
// 0: Horizontal sync polarity is negative(-)
|
||
|
//
|
||
|
#define VESA_BIOS_EXTENSIONS_CRTC_VERITICAL_SYNC_NEGATIVE 0x08 // 0: Verical sync polarity is positive(+)
|
||
|
// 0: Verical sync polarity is negative(-)
|
||
|
//
|
||
|
// Turn off byte packing of data structures
|
||
|
//
|
||
|
#pragma pack()
|
||
|
|
||
|
#endif
|