/* INCLUDES *******************************************************************/
-#include "stddef.h"
-#include "windef.h"
-#include "wingdi.h"
-#include <ddk/miniport.h>
-#include <ddk/video.h>
-#include <ddk/ntddvdeo.h>
-#include <ddk/ntapi.h>
-
-/* For Ke386CallBios */
-#include "internal/v86m.h"
-
-/* FIXME: Missing define in w32api! */
-#ifndef NtCurrentProcess
-#define NtCurrentProcess() ((HANDLE)(LONG_PTR)-1)
+#ifdef _MSC_VER
+#include "dderror.h"
+#include "devioctl.h"
+#else
+#include <ntddk.h>
#endif
+#include "miniport.h"
+#include "ntddvdeo.h"
+#include "video.h"
+
+#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
+#define TAG_VBE TAG('V', 'B', 'E', ' ')
+
/*
- * Print a message and hang for unimplemented functions.
+ * Compile-time define to get VBE 1.2 support. The implementation
+ * is far from complete now and so it's left undefined.
*/
-#define UNIMPLEMENTED DbgPrint("%s:%d UNIMPLEMENTED", __FILE__, __LINE__); for (;;)
-#ifdef DBG
-#define DPRINT(arg) DbgPrint arg;
-#else
-#define DPRINT(arg)
-#endif
+/* #define VBE12_SUPPORT */
#include <pshpack1.h>
+/*
+ * VBE Command Definitions
+ */
+
+#define VBE_GET_CONTROLLER_INFORMATION 0x4F00
+#define VBE_GET_MODE_INFORMATION 0x4F01
+#define VBE_SET_VBE_MODE 0x4F02
+#define VBE_GET_CURRENT_VBE_MODE 0x4F03
+#define VBE_SAVE_RESTORE_STATE 0x4F04
+#define VBE_DISPLAY_WINDOW_CONTROL 0x4F05
+#define VBE_SET_GET_LOGICAL_SCAN_LINE_LENGTH 0x4F06
+#define VBE_SET_GET_DISPLAY_START 0x4F07
+#define VBE_SET_GET_DAC_PALETTE_FORMAT 0x4F08
+#define VBE_SET_GET_PALETTE_DATA 0x4F09
+
+/* VBE 2.0+ */
+#define VBE_RETURN_PROTECTED_MODE_INTERFACE 0x4F0A
+#define VBE_GET_SET_PIXEL_CLOCK 0x4F0B
+
+/* Extensions */
+#define VBE_POWER_MANAGEMENT_EXTENSIONS 0x4F10
+#define VBE_FLAT_PANEL_INTERFACE_EXTENSIONS 0x4F11
+#define VBE_AUDIO_INTERFACE_EXTENSIONS 0x4F12
+#define VBE_OEM_EXTENSIONS 0x4F13
+#define VBE_DISPLAY_DATA_CHANNEL 0x4F14
+
+/*
+ * VBE Video Mode Information Definitions
+ */
+
+#define VBE_MODEATTR_LINEAR 0x80
+
+#define VBE_MEMORYMODEL_PACKEDPIXEL 0x04
+#define VBE_MEMORYMODEL_DIRECTCOLOR 0x06
+
+/*
+ * VBE Return Codes
+ */
+
+#define VBE_SUCCESS 0x4F
+#define VBE_UNSUCCESSFUL 0x14F
+#define VBE_NOT_SUPPORTED 0x24F
+#define VBE_FUNCTION_INVALID 0x34F
+
/*
* VBE specification defined structure for general adapter info
- * returned by function 0x4F00.
+ * returned by function VBE_GET_CONTROLLER_INFORMATION command.
*/
+
typedef struct
{
CHAR Signature[4];
- WORD Version;
- DWORD OemStringPtr;
+ USHORT Version;
+ ULONG OemStringPtr;
LONG Capabilities;
- DWORD VideoModePtr;
- WORD TotalMemory;
- WORD OemSoftwareRevision;
- DWORD OemVendorNamePtr;
- DWORD OemProductNamePtr;
- DWORD OemProductRevPtr;
+ ULONG VideoModePtr;
+ USHORT TotalMemory;
+ USHORT OemSoftwareRevision;
+ ULONG OemVendorNamePtr;
+ ULONG OemProductNamePtr;
+ ULONG OemProductRevPtr;
CHAR Reserved[222];
CHAR OemData[256];
} VBE_INFO, *PVBE_INFO;
/*
* VBE specification defined structure for specific video mode
- * info returned by function 0x4F01.
+ * info returned by function VBE_GET_MODE_INFORMATION command.
*/
-typedef struct {
+
+typedef struct
+{
/* Mandatory information for all VBE revisions */
- WORD ModeAttributes;
- BYTE WinAAttributes;
- BYTE WinBAttributes;
- WORD WinGranularity;
- WORD WinSize;
- WORD WinASegment;
- WORD WinBSegment;
- DWORD WinFuncPtr;
- WORD BytesPerScanLine;
+ USHORT ModeAttributes;
+ UCHAR WinAAttributes;
+ UCHAR WinBAttributes;
+ USHORT WinGranularity;
+ USHORT WinSize;
+ USHORT WinASegment;
+ USHORT WinBSegment;
+ ULONG WinFuncPtr;
+ USHORT BytesPerScanLine;
/* Mandatory information for VBE 1.2 and above */
- WORD XResolution;
- WORD YResolution;
- BYTE XCharSize;
- BYTE YCharSize;
- BYTE NumberOfPlanes;
- BYTE BitsPerPixel;
- BYTE NumberOfBanks;
- BYTE MemoryModel;
- BYTE BankSize;
- BYTE NumberOfImagePages;
- BYTE Reserved1;
+ USHORT XResolution;
+ USHORT YResolution;
+ UCHAR XCharSize;
+ UCHAR YCharSize;
+ UCHAR NumberOfPlanes;
+ UCHAR BitsPerPixel;
+ UCHAR NumberOfBanks;
+ UCHAR MemoryModel;
+ UCHAR BankSize;
+ UCHAR NumberOfImagePages;
+ UCHAR Reserved1;
/* Direct Color fields (required for Direct/6 and YUV/7 memory models) */
- BYTE RedMaskSize;
- BYTE RedFieldPosition;
- BYTE GreenMaskSize;
- BYTE GreenFieldPosition;
- BYTE BlueMaskSize;
- BYTE BlueFieldPosition;
- BYTE ReservedMaskSize;
- BYTE ReservedFieldPosition;
- BYTE DirectColorModeInfo;
+ UCHAR RedMaskSize;
+ UCHAR RedFieldPosition;
+ UCHAR GreenMaskSize;
+ UCHAR GreenFieldPosition;
+ UCHAR BlueMaskSize;
+ UCHAR BlueFieldPosition;
+ UCHAR ReservedMaskSize;
+ UCHAR ReservedFieldPosition;
+ UCHAR DirectColorModeInfo;
/* Mandatory information for VBE 2.0 and above */
- DWORD PhysBasePtr;
- DWORD Reserved2;
- WORD Reserved3;
+ ULONG PhysBasePtr;
+ ULONG Reserved2;
+ USHORT Reserved3;
/* Mandatory information for VBE 3.0 and above */
- WORD LinBytesPerScanLine;
- BYTE BnkNumberOfImagePages;
- BYTE LinNumberOfImagePages;
- BYTE LinRedMaskSize;
- BYTE LinRedFieldPosition;
- BYTE LinGreenMaskSize;
- BYTE LinGreenFieldPosition;
- BYTE LinBlueMaskSize;
- BYTE LinBlueFieldPosition;
- BYTE LinReservedMaskSize;
- BYTE LinReservedFieldPosition;
- DWORD MaxPixelClock;
+ USHORT LinBytesPerScanLine;
+ UCHAR BnkNumberOfImagePages;
+ UCHAR LinNumberOfImagePages;
+ UCHAR LinRedMaskSize;
+ UCHAR LinRedFieldPosition;
+ UCHAR LinGreenMaskSize;
+ UCHAR LinGreenFieldPosition;
+ UCHAR LinBlueMaskSize;
+ UCHAR LinBlueFieldPosition;
+ UCHAR LinReservedMaskSize;
+ UCHAR LinReservedFieldPosition;
+ ULONG MaxPixelClock;
CHAR Reserved4[189];
} VBE_MODEINFO, *PVBE_MODEINFO;
-#define VBE_MODEATTR_LINEAR 0x80
-
#include <poppack.h>
-typedef struct {
- /* Trampoline memory for communication with VBE real-mode interface. */
- PHYSICAL_ADDRESS PhysicalAddress;
- PVOID TrampolineMemory;
+typedef struct
+{
+ /* Interface to Int10 calls */
+ VIDEO_PORT_INT10_INTERFACE Int10Interface;
- /* Pointer to mapped frame buffer memory */
- PVOID FrameBufferMemory;
+ /* Trampoline memory for communication with VBE real-mode interface */
+ USHORT TrampolineMemorySegment;
+ USHORT TrampolineMemoryOffset;
/* General controller/BIOS information */
- BOOL VGACompatible;
- WORD VBEVersion;
+ VBE_INFO VbeInfo;
/* Saved information about video modes */
ULONG ModeCount;
- WORD *ModeNumbers;
+ USHORT *ModeNumbers;
PVBE_MODEINFO ModeInfo;
- WORD CurrentMode;
+ USHORT CurrentMode;
} VBE_DEVICE_EXTENSION, *PVBE_DEVICE_EXTENSION;
VP_STATUS STDCALL
-VBEFindAdapter(IN PVOID HwDeviceExtension, IN PVOID HwContext,
- IN PWSTR ArgumentString, IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo,
+VBEFindAdapter(
+ IN PVOID HwDeviceExtension,
+ IN PVOID HwContext,
+ IN PWSTR ArgumentString,
+ IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo,
OUT PUCHAR Again);
BOOLEAN STDCALL
VBEInitialize(PVOID HwDeviceExtension);
BOOLEAN STDCALL
-VBEStartIO(PVOID HwDeviceExtension, PVIDEO_REQUEST_PACKET RequestPacket);
+VBEStartIO(
+ PVOID HwDeviceExtension,
+ PVIDEO_REQUEST_PACKET RequestPacket);
+
+BOOLEAN STDCALL
+VBEResetHw(
+ PVOID DeviceExtension,
+ ULONG Columns,
+ ULONG Rows);
VP_STATUS STDCALL
-VBESetPowerState(PVOID HwDeviceExtension, ULONG HwId,
+VBEGetPowerState(
+ PVOID HwDeviceExtension,
+ ULONG HwId,
PVIDEO_POWER_MANAGEMENT VideoPowerControl);
VP_STATUS STDCALL
-VBEGetPowerState(PVOID HwDeviceExtension, ULONG HwId,
+VBESetPowerState(
+ PVOID HwDeviceExtension,
+ ULONG HwId,
PVIDEO_POWER_MANAGEMENT VideoPowerControl);
-BOOL FASTCALL
-VBESetCurrentMode(PVBE_DEVICE_EXTENSION DeviceExtension,
- PVIDEO_MODE RequestedMode, PSTATUS_BLOCK StatusBlock);
+BOOLEAN FASTCALL
+VBESetCurrentMode(
+ PVBE_DEVICE_EXTENSION DeviceExtension,
+ PVIDEO_MODE RequestedMode,
+ PSTATUS_BLOCK StatusBlock);
+
+BOOLEAN FASTCALL
+VBEResetDevice(
+ PVBE_DEVICE_EXTENSION DeviceExtension,
+ PSTATUS_BLOCK StatusBlock);
-BOOL FASTCALL
-VBEResetDevice(PVBE_DEVICE_EXTENSION DeviceExtension,
+BOOLEAN FASTCALL
+VBEMapVideoMemory(
+ PVBE_DEVICE_EXTENSION DeviceExtension,
+ PVIDEO_MEMORY RequestedAddress,
+ PVIDEO_MEMORY_INFORMATION MapInformation,
PSTATUS_BLOCK StatusBlock);
-BOOL FASTCALL
-VBEMapVideoMemory(PVBE_DEVICE_EXTENSION DeviceExtension,
- PVIDEO_MEMORY RequestedAddress, PVIDEO_MEMORY_INFORMATION MapInformation,
+BOOLEAN FASTCALL
+VBEUnmapVideoMemory(
+ PVBE_DEVICE_EXTENSION DeviceExtension,
+ PVIDEO_MEMORY VideoMemory,
PSTATUS_BLOCK StatusBlock);
-BOOL FASTCALL
-VBEUnmapVideoMemory(PVBE_DEVICE_EXTENSION DeviceExtension,
+BOOLEAN FASTCALL
+VBEQueryNumAvailModes(
+ PVBE_DEVICE_EXTENSION DeviceExtension,
+ PVIDEO_NUM_MODES Modes,
PSTATUS_BLOCK StatusBlock);
-BOOL FASTCALL
-VBEQueryNumAvailModes(PVBE_DEVICE_EXTENSION DeviceExtension,
- PVIDEO_NUM_MODES Modes, PSTATUS_BLOCK StatusBlock);
+BOOLEAN FASTCALL
+VBEQueryAvailModes(
+ PVBE_DEVICE_EXTENSION DeviceExtension,
+ PVIDEO_MODE_INFORMATION ReturnedModes,
+ PSTATUS_BLOCK StatusBlock);
-BOOL FASTCALL
-VBEQueryAvailModes(PVBE_DEVICE_EXTENSION DeviceExtension,
- PVIDEO_MODE_INFORMATION ReturnedModes, PSTATUS_BLOCK StatusBlock);
+BOOLEAN FASTCALL
+VBEQueryCurrentMode(
+ PVBE_DEVICE_EXTENSION DeviceExtension,
+ PVIDEO_MODE_INFORMATION VideoModeInfo,
+ PSTATUS_BLOCK StatusBlock);
-BOOL FASTCALL
-VBESetColorRegisters(PVBE_DEVICE_EXTENSION DeviceExtension,
- PVIDEO_CLUT ColorLookUpTable, PSTATUS_BLOCK StatusBlock);
+BOOLEAN FASTCALL
+VBESetColorRegisters(
+ PVBE_DEVICE_EXTENSION DeviceExtension,
+ PVIDEO_CLUT ColorLookUpTable,
+ PSTATUS_BLOCK StatusBlock);
#endif /* VBEMP_H */