|
|
/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
vesa.h
Abstract:
This module implements VESA support.
Author:
Erick Smith (ericks) Sep. 2000
Environment:
kernel mode only
Revision History:
--*/
#define VBE_GET_CONTROLLER_INFO 0x4F00
#define VBE_GET_MODE_INFO 0x4F01
#define VBE_SET_MODE 0x4F02
#define VBE_GET_MODE 0x4F03
#define VBE_SAVE_RESTORE_STATE 0x4F04
#define VBE_WINDOW_CONTROL 0x4F05
#define VBE_SCANLINE 0x4F06
#define VBE_DISPLAY_START 0x4F07
#define VBE_PALLET_FORMAT 0x4F08
#define VBE_PALLET_DATA 0x4F09
#define VBE_PROTECTED_MODE 0x4F0A
#define VBE_PIXEL_CLOCK 0x4F0B
#define VESA_POWER_FUNCTION 0x4f10
#define VESA_POWER_ON 0x0000
#define VESA_POWER_STANDBY 0x0100
#define VESA_POWER_SUSPEND 0x0200
#define VESA_POWER_OFF 0x0400
#define VESA_GET_POWER_FUNC 0x0000
#define VESA_SET_POWER_FUNC 0x0001
#define VESA_STATUS_SUCCESS 0x004F
#define VESA_SUCCESS(Status) (((Status) & 0xFFFF) == VESA_STATUS_SUCCESS)
//
// VESA SuperVGA structures
//
#pragma pack(1)
typedef struct _VGA_INFO_BLOCK { ULONG VesaSignature; USHORT VbeVersion; ULONG OemStringPtr; ULONG Capabilities; ULONG VideoModePtr; USHORT TotalMemory;
//
// VBE 2.0
//
USHORT OemSoftwareRev; ULONG OemVendorNamePtr; ULONG OemProductNamePtr; ULONG OemProductRevPtr; UCHAR Reserved[222];
UCHAR OemData[256];
} VGA_INFO_BLOCK, *PVGA_INFO_BLOCK;
typedef struct _MODE_INFO_BLOCK { USHORT ModeAttributes; UCHAR WinAAttributes; UCHAR WinBAttributes; USHORT WinGranularity; USHORT WinSize; USHORT WinASegment; USHORT WinBSegment; ULONG WinFuncPtr; USHORT BytesPerScanLine;
USHORT XResolution; USHORT YResolution; UCHAR XCharSize; UCHAR YCharSize; UCHAR NumberOfPlanes; UCHAR BitsPerPixel; UCHAR NumberOfBanks; UCHAR MemoryModel; UCHAR BankSize; UCHAR NumberOfImagePages; UCHAR Reserved1;
UCHAR RedMaskSize; UCHAR RedFieldPosition; UCHAR GreenMaskSize; UCHAR GreenFieldPosition; UCHAR BlueMaskSize; UCHAR BlueFieldPosition; UCHAR RsvdMaskSize; UCHAR RsvdFieldPosition; UCHAR DirectColorModeInfo;
//
// VBE 2.0
//
ULONG PhysBasePtr; ULONG Reserved2; USHORT Reserved3;
//
// VBE 3.0
//
USHORT LinBytesPerScanLine; UCHAR BnkNumberOfImagePages; UCHAR LinNumberOfImagePages; UCHAR LinRedMaskSize; UCHAR LinRedFieldPosition; UCHAR LinGreenMaskSize; UCHAR LinGreenFieldPosition; UCHAR LinBlueMaskSize; UCHAR LinBlueFieldPosition; UCHAR LinRsvdMaskSize; UCHAR LinRsvdFieldPosition; ULONG MaxPixelClock;
UCHAR Reserved4[190];
} MODE_INFO_BLOCK, *PMODE_INFO_BLOCK;
typedef struct _PALETTE_ENTRY { UCHAR Blue; UCHAR Green; UCHAR Red; UCHAR Alignment; } PALETTE_ENTRY, *PPALETTE_ENTRY;
#pragma pack()
typedef struct _VESA_INFO { USHORT ModeNumber; ULONG FrameBufferSize; MODE_INFO_BLOCK ModeInfoBlock; ULONG HardwareStateSize; UCHAR HardwareState[]; } VESA_INFO, *PVESA_INFO;
#define VDM_TRANSFER_SEGMENT 0x2000
#define VDM_TRANSFER_OFFSET 0x0000
#define VBE_CAP_DAC_WIDTH_8BPP 0x01
#define VBE_CAP_NOT_VGA 0x02
#define VBE_CAP_VSYNC_ON_PALETTE_UPDATE 0x04
#define VBE_CAP_STEREO_SIGNAL 0x08
#define VBE_CAP_STEREO_EVC_CONNECTOR 0x10
#define SEG(x) ((x) >> 16)
#define OFF(x) ((x) & 0xffff)
#define TRANSFER_ADDRESS ((VDM_TRANSFER_SEGMENT << 4) + VDM_TRANSFER_OFFSET)
#define INFOBLOCK_OFFSET(x) ((SEG((x)) << 4) + OFF((x)) - TRANSFER_ADDRESS)
#define IS_LINEAR_MODE(x) (((x)->fbType & VIDEO_MODE_LINEAR) ? TRUE : FALSE)
VOID InitializeModeTable( PVOID HwDeviceExtension );
BOOLEAN ValidateVbeInfo( PHW_DEVICE_EXTENSION hwDeviceExtension, PVGA_INFO_BLOCK InfoBlock );
VOID UpdateRegistry( PHW_DEVICE_EXTENSION hwDeviceExtension, PWSTR ValueName, PUCHAR Value );
ULONG GetVideoMemoryBaseAddress( PHW_DEVICE_EXTENSION hwDeviceExtension, PVIDEOMODE pRequestedMode );
VP_STATUS VBESetMode( PHW_DEVICE_EXTENSION HwDeviceExtension, USHORT VesaModeNumber );
USHORT VBEGetMode( PHW_DEVICE_EXTENSION HwDeviceExtension );
VP_STATUS VBEGetModeInfo( PHW_DEVICE_EXTENSION hwDeviceExtension, USHORT ModeNumber, PMODE_INFO_BLOCK ModeInfoBlock );
ULONG VBESaveState( PHW_DEVICE_EXTENSION HwDeviceExtension, PCHAR StateBuffer );
VP_STATUS VBERestoreState( PHW_DEVICE_EXTENSION HwDeviceExtension, PCHAR StateBuffer, ULONG Size );
VP_STATUS VBESetDisplayWindow( PHW_DEVICE_EXTENSION hwDeviceExtension, UCHAR WindowSelect, USHORT WindowNumber );
USHORT VBEGetDisplayWindow( PHW_DEVICE_EXTENSION hwDeviceExtension, UCHAR WindowSelect );
USHORT VBEGetScanLineLength( PHW_DEVICE_EXTENSION HwDeviceExtension );
VP_STATUS VesaSaveHardwareState( PHW_DEVICE_EXTENSION HwDeviceExtension, PVIDEO_HARDWARE_STATE HardwareState, ULONG HardwareStateSize, USHORT ModeNumber );
PCHAR SaveFrameBuffer( PHW_DEVICE_EXTENSION hwDeviceExtension, PVESA_INFO pVesaInfo );
BOOLEAN IsSavedModeVesa( PVIDEO_HARDWARE_STATE HardwareState );
VP_STATUS VesaRestoreHardwareState( PHW_DEVICE_EXTENSION HwDeviceExtension, PVIDEO_HARDWARE_STATE HardwareState, ULONG HardwareStateSize );
ULONG RestoreFrameBuffer( PHW_DEVICE_EXTENSION hwDeviceExtension, PVESA_INFO pVesaInfo, PCHAR FrameBufferData );
|