Files
reactos/sdk/include/ddk/video.h
Hermès Bélusca-Maïto 1de8b4f0ce [DDK][VIDEOPRT] VideoPortDebugPrint(): Fix the debug filter being used; update SAL annotations (#8718)
- Use the `DPFLTR_VIDEO_ID` debug filter ID, which is the same as what
  Windows' videoprt.sys uses, so that tools and people who debug can
  easily interoperate between the two.
  Addendum to commits 11c95f7b5d (r19801) and 5b799176ba (r31477).

- Use SAL2 annotations.
2026-03-08 15:25:09 +01:00

1758 lines
36 KiB
C

/*
* video.h
*
* Video port and miniport driver interface
*
* This file is part of the w32api package.
*
* Contributors:
* Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAIMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#pragma once
#define __VIDEO_H__
#include "ntddvdeo.h"
#include "videoagp.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _NTOSDEF_
#ifdef PAGED_CODE
#undef PAGED_CODE
#endif
#if defined(_MSC_VER)
#define ALLOC_PRAGMA 1
#endif
#if defined(_VIDEOPORT_)
#define VPAPI
#else
#define VPAPI DECLSPEC_IMPORT
#endif
#if DBG
#define PAGED_CODE() \
if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) { \
VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \
ASSERT(FALSE); \
}
#else
#define PAGED_CODE()
#endif /* DBG */
ULONG
NTAPI
DriverEntry(
PVOID Context1,
PVOID Context2);
#else
#define VPAPI
#endif /* _NTOSDEF_ */
#if DBG
#define VideoDebugPrint(x) VideoPortDebugPrint x
#else
#define VideoDebugPrint(x)
#endif
#define GET_VIDEO_PHYSICAL_ADDRESS(scatterList, \
VirtualAddress, \
InputBuffer, \
pLength, \
Address) \
do { \
ULONG_PTR byteOffset; \
\
byteOffset = (PCHAR) VirtualAddress - (PCHAR)InputBuffer; \
while (byteOffset >= scatterList->Length) { \
byteOffset -= scatterList->Length; \
scatterList++; \
} \
*pLength = scatterList->Length - byteOffset; \
Address = (ULONG_PTR) (scatterList->PhysicalAddress + byteOffset); \
} while (0)
#define GET_VIDEO_SCATTERGATHER(ppDma) (**(PVRB_SG **)ppDma)
/* VIDEO_ACCESS_RANGE.RangePassive */
#define VIDEO_RANGE_PASSIVE_DECODE 1
#define VIDEO_RANGE_10_BIT_DECODE 2
#define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO FIELD_OFFSET(VIDEO_PORT_CONFIG_INFO, Master)
#define SIZE_OF_WXP_VIDEO_PORT_CONFIG_INFO sizeof(VIDEO_PORT_CONFIG_INFO)
#define SET_USER_EVENT 0x01
#define SET_DISPLAY_EVENT 0x02
#define EVENT_TYPE_MASK 1
#define SYNCHRONIZATION_EVENT 0
#define NOTIFICATION_EVENT 1
#define INITIAL_EVENT_STATE_MASK 2
#define INITIAL_EVENT_NOT_SIGNALED 0
#define INITIAL_EVENT_SIGNALED 2
#define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF
#define VIDEO_INVALID_CHILD_ID 0xFFFFFFFF
#define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA FIELD_OFFSET(VIDEO_HW_INITIALIZATION_DATA, HwStartDma)
#define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA FIELD_OFFSET(VIDEO_HW_INITIALIZATION_DATA, Reserved)
#define SIZE_OF_WXP_VIDEO_HW_INITIALIZATION_DATA (SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA + sizeof(ULONG))
#define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1
#define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2
#define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1
#define VIDEO_PORT_I2C_INTERFACE_VERSION_2 2
#define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1
#define VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE_VERSION_1 1
#define VIDEO_PORT_DEBUG_REPORT_INTERFACE_VERSION_1 1
/* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */
#define VIDEO_MEMORY_SPACE_MEMORY 0x00
#define VIDEO_MEMORY_SPACE_IO 0x01
#define VIDEO_MEMORY_SPACE_USER_MODE 0x02
#define VIDEO_MEMORY_SPACE_DENSE 0x04
#define VIDEO_MEMORY_SPACE_P6CACHE 0x08
/* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */
#define VIDEO_ENUM_MORE_DEVICES ERROR_CONTINUE
#define VIDEO_ENUM_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES
#define VIDEO_ENUM_INVALID_DEVICE ERROR_INVALID_NAME
#define DEVICE_VGA_ENABLED 1
/* VideoPortCheckForDeviceExistence.Flags constants */
#define CDE_USE_SUBSYSTEM_IDS 0x00000001
#define CDE_USE_REVISION 0x00000002
#define BUGCHECK_DATA_SIZE_RESERVED 48
#define VIDEO_DEBUG_REPORT_MAX_SIZE 0x8000
typedef LONG VP_STATUS, *PVP_STATUS;
typedef ULONG DMA_EVENT_FLAGS;
typedef struct _VIDEO_PORT_SPIN_LOCK *PSPIN_LOCK;
typedef struct _VIDEO_DEBUG_REPORT *PVIDEO_DEBUG_REPORT;
typedef struct __DMA_PARAMETERS *PDMA;
typedef struct __VP_DMA_ADAPTER *PVP_DMA_ADAPTER;
typedef PVOID
(NTAPI *PVIDEO_PORT_GET_PROC_ADDRESS)(
IN PVOID HwDeviceExtension,
IN PUCHAR FunctionName);
typedef struct _VIDEO_PORT_CONFIG_INFO {
ULONG Length;
ULONG SystemIoBusNumber;
INTERFACE_TYPE AdapterInterfaceType;
ULONG BusInterruptLevel;
ULONG BusInterruptVector;
KINTERRUPT_MODE InterruptMode;
ULONG NumEmulatorAccessEntries;
PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries;
ULONG_PTR EmulatorAccessEntriesContext;
PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress;
ULONG VdmPhysicalVideoMemoryLength;
ULONG HardwareStateSize;
ULONG DmaChannel;
ULONG DmaPort;
UCHAR DmaShareable;
UCHAR InterruptShareable;
BOOLEAN Master;
DMA_WIDTH DmaWidth;
DMA_SPEED DmaSpeed;
BOOLEAN bMapBuffers;
BOOLEAN NeedPhysicalAddresses;
BOOLEAN DemandMode;
ULONG MaximumTransferLength;
ULONG NumberOfPhysicalBreaks;
BOOLEAN ScatterGather;
ULONG MaximumScatterGatherChunkSize;
PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress;
PWSTR DriverRegistryPath;
ULONGLONG SystemMemorySize;
} VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO;
typedef VP_STATUS
(NTAPI *PVIDEO_HW_FIND_ADAPTER)(
IN PVOID HwDeviceExtension,
IN PVOID HwContext,
IN PWSTR ArgumentString,
IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo,
OUT PUCHAR Again);
typedef BOOLEAN
(NTAPI *PVIDEO_HW_INITIALIZE)(
IN PVOID HwDeviceExtension);
typedef BOOLEAN
(NTAPI *PVIDEO_HW_INTERRUPT)(
IN PVOID HwDeviceExtension);
typedef struct _VIDEO_ACCESS_RANGE {
PHYSICAL_ADDRESS RangeStart;
ULONG RangeLength;
UCHAR RangeInIoSpace;
UCHAR RangeVisible;
UCHAR RangeShareable;
UCHAR RangePassive;
} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
typedef VOID
(NTAPI *PVIDEO_HW_LEGACYRESOURCES)(
IN ULONG VendorId,
IN ULONG DeviceId,
IN OUT PVIDEO_ACCESS_RANGE *LegacyResourceList,
IN OUT PULONG LegacyResourceCount);
typedef enum _HW_DMA_RETURN {
DmaAsyncReturn,
DmaSyncReturn
} HW_DMA_RETURN, *PHW_DMA_RETURN;
typedef HW_DMA_RETURN
(NTAPI *PVIDEO_HW_START_DMA)(
PVOID HwDeviceExtension,
PDMA pDma);
typedef struct _VP_SCATTER_GATHER_ELEMENT {
PHYSICAL_ADDRESS Address;
ULONG Length;
ULONG_PTR Reserved;
} VP_SCATTER_GATHER_ELEMENT, *PVP_SCATTER_GATHER_ELEMENT;
typedef struct _VP_SCATTER_GATHER_LIST {
ULONG NumberOfElements;
ULONG_PTR Reserved;
VP_SCATTER_GATHER_ELEMENT Elements[0];
} VP_SCATTER_GATHER_LIST, *PVP_SCATTER_GATHER_LIST;
typedef VOID
(NTAPI *PEXECUTE_DMA)(
IN PVOID HwDeviceExtension,
IN PVP_DMA_ADAPTER VpDmaAdapter,
IN PVP_SCATTER_GATHER_LIST SGList,
IN PVOID Context);
/* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */
typedef struct _VIDEO_CHILD_ENUM_INFO {
ULONG Size;
ULONG ChildDescriptorSize;
ULONG ChildIndex;
ULONG ACPIHwId;
PVOID ChildHwDeviceExtension;
} VIDEO_CHILD_ENUM_INFO, *PVIDEO_CHILD_ENUM_INFO;
/* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */
typedef enum _VIDEO_CHILD_TYPE {
Monitor = 1,
NonPrimaryChip,
VideoChip,
Other
} VIDEO_CHILD_TYPE, *PVIDEO_CHILD_TYPE;
typedef VP_STATUS
(NTAPI *PVIDEO_HW_GET_CHILD_DESCRIPTOR)(
IN PVOID HwDeviceExtension,
IN PVIDEO_CHILD_ENUM_INFO ChildEnumInfo,
OUT PVIDEO_CHILD_TYPE VideoChildType,
OUT PUCHAR pChildDescriptor,
OUT PULONG UId,
OUT PULONG pUnused);
typedef VP_STATUS
(NTAPI *PVIDEO_HW_POWER_SET)(
IN PVOID HwDeviceExtension,
IN ULONG HwId,
IN PVIDEO_POWER_MANAGEMENT VideoPowerControl);
typedef VP_STATUS
(NTAPI *PVIDEO_HW_POWER_GET)(
IN PVOID HwDeviceExtension,
IN ULONG HwId,
IN OUT PVIDEO_POWER_MANAGEMENT VideoPowerControl);
typedef struct _QUERY_INTERFACE {
CONST GUID *InterfaceType;
USHORT Size;
USHORT Version;
PINTERFACE Interface;
PVOID InterfaceSpecificData;
} QUERY_INTERFACE, *PQUERY_INTERFACE;
typedef VP_STATUS
(NTAPI *PVIDEO_HW_QUERY_INTERFACE)(
IN PVOID HwDeviceExtension,
IN OUT PQUERY_INTERFACE QueryInterface);
typedef VP_STATUS
(NTAPI *PVIDEO_HW_CHILD_CALLBACK)(
PVOID HwDeviceExtension,
PVOID ChildDeviceExtension);
typedef BOOLEAN
(NTAPI *PVIDEO_HW_RESET_HW)(
IN PVOID HwDeviceExtension,
IN ULONG Columns,
IN ULONG Rows);
typedef struct _STATUS_BLOCK {
_ANONYMOUS_UNION union {
VP_STATUS Status;
PVOID Pointer;
} DUMMYUNIONNAME;
ULONG_PTR Information;
} STATUS_BLOCK, *PSTATUS_BLOCK;
typedef struct _VIDEO_REQUEST_PACKET {
ULONG IoControlCode;
PSTATUS_BLOCK StatusBlock;
PVOID InputBuffer;
ULONG InputBufferLength;
PVOID OutputBuffer;
ULONG OutputBufferLength;
} VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET;
typedef BOOLEAN
(NTAPI *PVIDEO_HW_START_IO)(
IN PVOID HwDeviceExtension,
IN PVIDEO_REQUEST_PACKET RequestPacket);
typedef VOID
(NTAPI *PVIDEO_HW_TIMER)(
IN PVOID HwDeviceExtension);
typedef VOID
(NTAPI *PVIDEO_WRITE_CLOCK_LINE)(
PVOID HwDeviceExtension,
UCHAR Data);
typedef VOID
(NTAPI *PVIDEO_WRITE_DATA_LINE)(
PVOID HwDeviceExtension,
UCHAR Data);
typedef BOOLEAN
(NTAPI *PVIDEO_READ_CLOCK_LINE)(
PVOID HwDeviceExtension);
typedef BOOLEAN
(NTAPI *PVIDEO_READ_DATA_LINE)(
PVOID HwDeviceExtension);
typedef VOID
(NTAPI *PVIDEO_WAIT_VSYNC_ACTIVE)(
PVOID HwDeviceExtension);
typedef struct _I2C_CALLBACKS {
IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine;
IN PVIDEO_WRITE_DATA_LINE WriteDataLine;
IN PVIDEO_READ_CLOCK_LINE ReadClockLine;
IN PVIDEO_READ_DATA_LINE ReadDataLine;
} I2C_CALLBACKS, *PI2C_CALLBACKS;
typedef BOOLEAN
(NTAPI *PI2C_START)(
IN PVOID HwDeviceExtension,
IN PI2C_CALLBACKS I2CCallbacks);
typedef BOOLEAN
(NTAPI *PI2C_STOP)(
IN PVOID HwDeviceExtension,
IN PI2C_CALLBACKS I2CCallbacks);
typedef BOOLEAN
(NTAPI *PI2C_WRITE)(
IN PVOID HwDeviceExtension,
IN PI2C_CALLBACKS I2CCallbacks,
IN PUCHAR Buffer,
IN ULONG Length);
typedef BOOLEAN
(NTAPI *PI2C_READ)(
IN PVOID HwDeviceExtension,
IN PI2C_CALLBACKS I2CCallbacks,
OUT PUCHAR Buffer,
IN ULONG Length);
typedef struct _VIDEO_I2C_CONTROL {
IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine;
IN PVIDEO_WRITE_DATA_LINE WriteDataLine;
IN PVIDEO_READ_CLOCK_LINE ReadClockLine;
IN PVIDEO_READ_DATA_LINE ReadDataLine;
IN ULONG I2CDelay;
} VIDEO_I2C_CONTROL, *PVIDEO_I2C_CONTROL;
typedef BOOLEAN
(NTAPI *PI2C_START_2)(
IN PVOID HwDeviceExtension,
IN PVIDEO_I2C_CONTROL I2CControl);
typedef BOOLEAN
(NTAPI *PI2C_STOP_2)(
IN PVOID HwDeviceExtension,
IN PVIDEO_I2C_CONTROL I2CControl);
typedef BOOLEAN
(NTAPI *PI2C_WRITE_2)(
IN PVOID HwDeviceExtension,
IN PVIDEO_I2C_CONTROL I2CControl,
IN PUCHAR Buffer,
IN ULONG Length);
typedef BOOLEAN
(NTAPI *PI2C_READ_2)(
IN PVOID HwDeviceExtension,
IN PVIDEO_I2C_CONTROL I2CControl,
OUT PUCHAR Buffer,
IN ULONG Length,
IN BOOLEAN EndOfRead);
typedef struct _INT10_BIOS_ARGUMENTS {
ULONG Eax;
ULONG Ebx;
ULONG Ecx;
ULONG Edx;
ULONG Esi;
ULONG Edi;
ULONG Ebp;
USHORT SegDs;
USHORT SegEs;
} INT10_BIOS_ARGUMENTS, *PINT10_BIOS_ARGUMENTS;
typedef VP_STATUS
(NTAPI *PINT10_CALL_BIOS)(
IN PVOID Context,
IN OUT PINT10_BIOS_ARGUMENTS BiosArguments);
typedef VP_STATUS
(NTAPI *PINT10_ALLOCATE_BUFFER)(
IN PVOID Context,
OUT PUSHORT Seg,
OUT PUSHORT Off,
IN OUT PULONG Length);
typedef VP_STATUS
(NTAPI *PINT10_FREE_BUFFER)(
IN PVOID Context,
IN USHORT Seg,
IN USHORT Off);
typedef VP_STATUS
(NTAPI *PINT10_READ_MEMORY)(
IN PVOID Context,
IN USHORT Seg,
IN USHORT Off,
OUT PVOID Buffer,
IN ULONG Length);
typedef VP_STATUS
(NTAPI *PINT10_WRITE_MEMORY)(
IN PVOID Context,
IN USHORT Seg,
IN USHORT Off,
IN PVOID Buffer,
IN ULONG Length);
typedef VP_STATUS
(NTAPI *PROTECT_WC_MEMORY)(
IN PVOID Context,
IN PVOID HwDeviceExtension);
typedef VP_STATUS
(NTAPI *RESTORE_WC_MEMORY)(
IN PVOID Context,
IN PVOID HwDeviceExtension);
typedef enum _VIDEO_DEVICE_DATA_TYPE {
VpMachineData = 0,
VpCmosData,
VpBusData,
VpControllerData,
VpMonitorData
} VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE;
typedef VP_STATUS
(NTAPI *PMINIPORT_QUERY_DEVICE_ROUTINE)(
IN PVOID HwDeviceExtension,
IN PVOID Context,
IN VIDEO_DEVICE_DATA_TYPE DeviceDataType,
IN PVOID Identifier,
IN ULONG IdentifierLength,
IN PVOID ConfigurationData,
IN ULONG ConfigurationDataLength,
IN OUT PVOID ComponentInformation,
IN ULONG ComponentInformationLength);
typedef VP_STATUS
(NTAPI *PMINIPORT_GET_REGISTRY_ROUTINE)(
IN PVOID HwDeviceExtension,
IN PVOID Context,
IN OUT PWSTR ValueName,
IN OUT PVOID ValueData,
IN ULONG ValueLength);
typedef VOID
(NTAPI *PMINIPORT_DPC_ROUTINE)(
IN PVOID HwDeviceExtension,
IN PVOID Context);
typedef BOOLEAN
(NTAPI *PMINIPORT_SYNCHRONIZE_ROUTINE)(
IN PVOID Context);
typedef VOID
(NTAPI *PVIDEO_BUGCHECK_CALLBACK)(
IN PVOID HwDeviceExtension,
IN ULONG BugcheckCode,
IN PUCHAR Buffer,
IN ULONG BufferSize);
/* VideoPortSynchronizeExecution.Priority constants */
typedef enum VIDEO_SYNCHRONIZE_PRIORITY {
VpLowPriority = 0,
VpMediumPriority,
VpHighPriority
} VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY;
/* VideoPortAllocatePool.PoolType constants */
typedef enum _VP_POOL_TYPE {
VpNonPagedPool = 0,
VpPagedPool,
VpNonPagedPoolCacheAligned = 4,
VpPagedPoolCacheAligned
} VP_POOL_TYPE, *PVP_POOL_TYPE;
typedef enum _DMA_FLAGS {
VideoPortUnlockAfterDma = 1,
VideoPortKeepPagesLocked,
VideoPortDmaInitOnly
} DMA_FLAGS;
/*
* Data returned with VpControllerData.
*
* The first two fields, InterfaceType and BusNumber, are common
* with the CM_FULL_RESOURCE_DESCRIPTOR header.
* The other fields are of legacy layout, instead of the newer
* CM_PARTIAL_RESOURCE_LIST one.
*/
typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA {
INTERFACE_TYPE InterfaceType;
ULONG BusNumber;
USHORT Version;
USHORT Revision;
USHORT Irql;
USHORT Vector;
ULONG ControlBase;
ULONG ControlSize;
ULONG CursorBase;
ULONG CursorSize;
ULONG FrameBase;
ULONG FrameSize;
} VIDEO_HARDWARE_CONFIGURATION_DATA, *PVIDEO_HARDWARE_CONFIGURATION_DATA;
typedef struct _VIDEO_X86_BIOS_ARGUMENTS {
ULONG Eax;
ULONG Ebx;
ULONG Ecx;
ULONG Edx;
ULONG Esi;
ULONG Edi;
ULONG Ebp;
} VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS;
typedef enum VIDEO_DEBUG_LEVEL {
Error = 0,
Warn,
Trace,
Info
} VIDEO_DEBUG_LEVEL, *PVIDEO_DEBUG_LEVEL;
#ifndef _NTOS_
typedef VP_STATUS
(NTAPI *PDRIVER_IO_PORT_UCHAR)(
IN ULONG_PTR Context,
IN ULONG Port,
IN UCHAR AccessMode,
IN PUCHAR Data);
typedef VP_STATUS
(NTAPI *PDRIVER_IO_PORT_UCHAR_STRING)(
IN ULONG_PTR Context,
IN ULONG Port,
IN UCHAR AccessMode,
IN PUCHAR Data,
IN ULONG DataLength);
typedef VP_STATUS
(NTAPI *PDRIVER_IO_PORT_ULONG)(
IN ULONG_PTR Context,
IN ULONG Port,
IN UCHAR AccessMode,
IN PULONG Data);
typedef VP_STATUS
(NTAPI *PDRIVER_IO_PORT_ULONG_STRING)(
IN ULONG_PTR Context,
IN ULONG Port,
IN UCHAR AccessMode,
IN PULONG Data,
IN ULONG DataLength);
typedef VP_STATUS
(NTAPI *PDRIVER_IO_PORT_USHORT)(
IN ULONG_PTR Context,
IN ULONG Port,
IN UCHAR AccessMode,
IN PUSHORT Data);
typedef VP_STATUS
(NTAPI *PDRIVER_IO_PORT_USHORT_STRING)(
IN ULONG_PTR Context,
IN ULONG Port,
IN UCHAR AccessMode,
IN PUSHORT Data,
IN ULONG DataLength);
#endif /* _NTOS_ */
typedef struct __VRB_SG {
__int64 PhysicalAddress;
ULONG Length;
} VRB_SG, *PVRB_SG;
typedef enum _VP_LOCK_OPERATION {
VpReadAccess = 0,
VpWriteAccess,
VpModifyAccess
} VP_LOCK_OPERATION;
typedef struct _VP_DEVICE_DESCRIPTION {
BOOLEAN ScatterGather;
BOOLEAN Dma32BitAddresses;
BOOLEAN Dma64BitAddresses;
ULONG MaximumLength;
} VP_DEVICE_DESCRIPTION, *PVP_DEVICE_DESCRIPTION;
typedef struct _VIDEO_CHILD_STATE {
ULONG Id;
ULONG State;
} VIDEO_CHILD_STATE, *PVIDEO_CHILD_STATE;
typedef struct _VIDEO_CHILD_STATE_CONFIGURATION {
ULONG Count;
VIDEO_CHILD_STATE ChildStateArray[ANYSIZE_ARRAY];
} VIDEO_CHILD_STATE_CONFIGURATION, *PVIDEO_CHILD_STATE_CONFIGURATION;
typedef struct _VIDEO_HW_INITIALIZATION_DATA {
ULONG HwInitDataSize;
INTERFACE_TYPE AdapterInterfaceType;
PVIDEO_HW_FIND_ADAPTER HwFindAdapter;
PVIDEO_HW_INITIALIZE HwInitialize;
PVIDEO_HW_INTERRUPT HwInterrupt;
PVIDEO_HW_START_IO HwStartIO;
ULONG HwDeviceExtensionSize;
ULONG StartingDeviceNumber;
PVIDEO_HW_RESET_HW HwResetHw;
PVIDEO_HW_TIMER HwTimer;
PVIDEO_HW_START_DMA HwStartDma;
PVIDEO_HW_POWER_SET HwSetPowerState;
PVIDEO_HW_POWER_GET HwGetPowerState;
PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor;
PVIDEO_HW_QUERY_INTERFACE HwQueryInterface;
ULONG HwChildDeviceExtensionSize;
PVIDEO_ACCESS_RANGE HwLegacyResourceList;
ULONG HwLegacyResourceCount;
PVIDEO_HW_LEGACYRESOURCES HwGetLegacyResources;
BOOLEAN AllowEarlyEnumeration;
ULONG Reserved;
} VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA;
typedef struct _I2C_FNC_TABLE {
IN ULONG Size;
IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine;
IN PVIDEO_WRITE_DATA_LINE WriteDataLine;
IN PVIDEO_READ_CLOCK_LINE ReadClockLine;
IN PVIDEO_READ_DATA_LINE ReadDataLine;
IN PVIDEO_WAIT_VSYNC_ACTIVE WaitVsync;
PVOID Reserved;
} I2C_FNC_TABLE, *PI2C_FNC_TABLE;
typedef struct _DDC_CONTROL {
IN ULONG Size;
IN I2C_CALLBACKS I2CCallbacks;
IN UCHAR EdidSegment;
} DDC_CONTROL, *PDDC_CONTROL;
/* VideoPortQueryServices.ServicesType constants */
typedef enum _VIDEO_PORT_SERVICES {
VideoPortServicesAGP = 1,
VideoPortServicesI2C,
VideoPortServicesHeadless,
VideoPortServicesInt10,
VideoPortServicesDebugReport,
VideoPortServicesWCMemoryProtection
} VIDEO_PORT_SERVICES;
typedef struct _VIDEO_PORT_AGP_INTERFACE {
SHORT Size;
SHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
PAGP_RESERVE_PHYSICAL AgpReservePhysical;
PAGP_RELEASE_PHYSICAL AgpReleasePhysical;
PAGP_COMMIT_PHYSICAL AgpCommitPhysical;
PAGP_FREE_PHYSICAL AgpFreePhysical;
PAGP_RESERVE_VIRTUAL AgpReserveVirtual;
PAGP_RELEASE_VIRTUAL AgpReleaseVirtual;
PAGP_COMMIT_VIRTUAL AgpCommitVirtual;
PAGP_FREE_VIRTUAL AgpFreeVirtual;
ULONGLONG AgpAllocationLimit;
} VIDEO_PORT_AGP_INTERFACE, *PVIDEO_PORT_AGP_INTERFACE;
typedef struct _VIDEO_PORT_AGP_INTERFACE_2 {
IN USHORT Size;
IN USHORT Version;
OUT PVOID Context;
OUT PINTERFACE_REFERENCE InterfaceReference;
OUT PINTERFACE_DEREFERENCE InterfaceDereference;
OUT PAGP_RESERVE_PHYSICAL AgpReservePhysical;
OUT PAGP_RELEASE_PHYSICAL AgpReleasePhysical;
OUT PAGP_COMMIT_PHYSICAL AgpCommitPhysical;
OUT PAGP_FREE_PHYSICAL AgpFreePhysical;
OUT PAGP_RESERVE_VIRTUAL AgpReserveVirtual;
OUT PAGP_RELEASE_VIRTUAL AgpReleaseVirtual;
OUT PAGP_COMMIT_VIRTUAL AgpCommitVirtual;
OUT PAGP_FREE_VIRTUAL AgpFreeVirtual;
OUT ULONGLONG AgpAllocationLimit;
OUT PAGP_SET_RATE AgpSetRate;
} VIDEO_PORT_AGP_INTERFACE_2, *PVIDEO_PORT_AGP_INTERFACE_2;
typedef struct _VIDEO_PORT_I2C_INTERFACE {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
PI2C_START I2CStart;
PI2C_STOP I2CStop;
PI2C_WRITE I2CWrite;
PI2C_READ I2CRead;
} VIDEO_PORT_I2C_INTERFACE, *PVIDEO_PORT_I2C_INTERFACE;
typedef struct _VIDEO_PORT_I2C_INTERFACE_2 {
IN USHORT Size;
IN USHORT Version;
OUT PVOID Context;
OUT PINTERFACE_REFERENCE InterfaceReference;
OUT PINTERFACE_DEREFERENCE InterfaceDereference;
OUT PI2C_START_2 I2CStart;
OUT PI2C_STOP_2 I2CStop;
OUT PI2C_WRITE_2 I2CWrite;
OUT PI2C_READ_2 I2CRead;
} VIDEO_PORT_I2C_INTERFACE_2, *PVIDEO_PORT_I2C_INTERFACE_2;
typedef struct _VIDEO_PORT_INT10_INTERFACE {
IN USHORT Size;
IN USHORT Version;
OUT PVOID Context;
OUT PINTERFACE_REFERENCE InterfaceReference;
OUT PINTERFACE_DEREFERENCE InterfaceDereference;
OUT PINT10_ALLOCATE_BUFFER Int10AllocateBuffer;
OUT PINT10_FREE_BUFFER Int10FreeBuffer;
OUT PINT10_READ_MEMORY Int10ReadMemory;
OUT PINT10_WRITE_MEMORY Int10WriteMemory;
OUT PINT10_CALL_BIOS Int10CallBios;
} VIDEO_PORT_INT10_INTERFACE, *PVIDEO_PORT_INT10_INTERFACE;
typedef struct _VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE {
IN USHORT Size;
IN USHORT Version;
OUT PVOID Context;
OUT PINTERFACE_REFERENCE InterfaceReference;
OUT PINTERFACE_DEREFERENCE InterfaceDereference;
OUT PROTECT_WC_MEMORY VideoPortProtectWCMemory;
OUT RESTORE_WC_MEMORY VideoPortRestoreWCMemory;
} VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE, *PVIDEO_PORT_WCMEMORYPROTECTION_INTERFACE;
typedef struct _VPOSVERSIONINFO {
IN ULONG Size;
OUT ULONG MajorVersion;
OUT ULONG MinorVersion;
OUT ULONG BuildNumber;
OUT USHORT ServicePackMajor;
OUT USHORT ServicePackMinor;
} VPOSVERSIONINFO, *PVPOSVERSIONINFO;
typedef struct _VIDEO_PORT_DEBUG_REPORT_INTERFACE {
IN USHORT Size;
IN USHORT Version;
OUT PVOID Context;
OUT PINTERFACE_REFERENCE InterfaceReference;
OUT PINTERFACE_DEREFERENCE InterfaceDereference;
OUT PVIDEO_DEBUG_REPORT (*DbgReportCreate)(
IN PVOID HwDeviceExtension,
IN ULONG ulCode,
IN ULONG_PTR ulpArg1,
IN ULONG_PTR ulpArg2,
IN ULONG_PTR ulpArg3,
IN ULONG_PTR ulpArg4
);
OUT BOOLEAN (*DbgReportSecondaryData)(
IN OUT PVIDEO_DEBUG_REPORT pReport,
IN PVOID pvData,
IN ULONG ulDataSize
);
OUT VOID (*DbgReportComplete)(
IN OUT PVIDEO_DEBUG_REPORT pReport
);
} VIDEO_PORT_DEBUG_REPORT_INTERFACE, *PVIDEO_PORT_DEBUG_REPORT_INTERFACE;
/* Video port functions for miniports */
VPAPI
VP_STATUS
NTAPI
VideoPortAllocateBuffer(
IN PVOID HwDeviceExtension,
IN ULONG Size,
OUT PVOID *Buffer);
VPAPI
VOID
NTAPI
VideoPortAcquireDeviceLock(
IN PVOID HwDeviceExtension);
VPAPI
ULONG
NTAPI
VideoPortCompareMemory(
IN PVOID Source1,
IN PVOID Source2,
IN SIZE_T Length);
VPAPI
BOOLEAN
NTAPI
VideoPortDDCMonitorHelper(
IN PVOID HwDeviceExtension,
IN PVOID DDCControl,
IN OUT PUCHAR EdidBuffer,
IN ULONG EdidBufferSize);
VPAPI
VOID
__cdecl
VideoPortDebugPrint(
_In_ VIDEO_DEBUG_LEVEL DebugPrintLevel,
_In_ PSTR DebugMessage,
_In_ ...);
VPAPI
VP_STATUS
NTAPI
VideoPortDisableInterrupt(
IN PVOID HwDeviceExtension);
VPAPI
VP_STATUS
NTAPI
VideoPortEnableInterrupt(
IN PVOID HwDeviceExtension);
VPAPI
VP_STATUS
NTAPI
VideoPortEnumerateChildren(
IN PVOID HwDeviceExtension,
IN PVOID Reserved);
VPAPI
VOID
NTAPI
VideoPortFreeDeviceBase(
IN PVOID HwDeviceExtension,
IN PVOID MappedAddress);
VPAPI
VP_STATUS
NTAPI
VideoPortGetAccessRanges(
_In_ PVOID HwDeviceExtension,
_In_opt_ ULONG NumRequestedResources,
_In_reads_opt_(NumRequestedResources)
PIO_RESOURCE_DESCRIPTOR RequestedResources,
_In_ ULONG NumAccessRanges,
_Out_writes_(NumAccessRanges) PVIDEO_ACCESS_RANGE AccessRanges,
_In_ PVOID VendorId,
_In_ PVOID DeviceId,
_Out_ PULONG Slot);
VPAPI
PVOID
NTAPI
VideoPortGetAssociatedDeviceExtension(
IN PVOID DeviceObject);
VPAPI
ULONG
NTAPI
VideoPortGetBusData(
IN PVOID HwDeviceExtension,
IN BUS_DATA_TYPE BusDataType,
IN ULONG SlotNumber,
IN OUT PVOID Buffer,
IN ULONG Offset,
IN ULONG Length);
VPAPI
UCHAR
NTAPI
VideoPortGetCurrentIrql(VOID);
VPAPI
PVOID
NTAPI
VideoPortGetDeviceBase(
IN PVOID HwDeviceExtension,
IN PHYSICAL_ADDRESS IoAddress,
IN ULONG NumberOfUchars,
IN UCHAR InIoSpace);
VPAPI
VP_STATUS
NTAPI
VideoPortGetDeviceData(
IN PVOID HwDeviceExtension,
IN VIDEO_DEVICE_DATA_TYPE DeviceDataType,
IN PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine,
IN PVOID Context);
VPAPI
VP_STATUS
NTAPI
VideoPortGetRegistryParameters(
IN PVOID HwDeviceExtension,
IN PWSTR ParameterName,
IN UCHAR IsParameterFileName,
IN PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine,
IN PVOID Context);
VPAPI
PVOID
NTAPI
VideoPortGetRomImage(
IN PVOID HwDeviceExtension,
IN PVOID Unused1,
IN ULONG Unused2,
IN ULONG Length);
VPAPI
VP_STATUS
NTAPI
VideoPortGetVgaStatus(
IN PVOID HwDeviceExtension,
OUT PULONG VgaStatus);
VPAPI
LONG
FASTCALL
VideoPortInterlockedDecrement(
IN PLONG Addend);
VPAPI
LONG
FASTCALL
VideoPortInterlockedExchange(
IN OUT PLONG Target,
IN LONG Value);
VPAPI
LONG
FASTCALL
VideoPortInterlockedIncrement(
IN PLONG Addend);
VPAPI
ULONG
NTAPI
VideoPortInitialize(
IN PVOID Argument1,
IN PVOID Argument2,
IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData,
IN PVOID HwContext);
VPAPI
VP_STATUS
NTAPI
VideoPortInt10(
IN PVOID HwDeviceExtension,
IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments);
VPAPI
VOID
NTAPI
VideoPortLogError(
IN PVOID HwDeviceExtension,
IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL,
IN VP_STATUS ErrorCode,
IN ULONG UniqueId);
VPAPI
VP_STATUS
NTAPI
VideoPortMapBankedMemory(
IN PVOID HwDeviceExtension,
IN PHYSICAL_ADDRESS PhysicalAddress,
IN OUT PULONG Length,
PULONG InIoSpace,
PVOID *VirtualAddress,
ULONG BankLength,
UCHAR ReadWriteBank,
PBANKED_SECTION_ROUTINE BankRoutine,
PVOID Context);
VPAPI
VP_STATUS
NTAPI
VideoPortMapMemory(
IN PVOID HwDeviceExtension,
IN PHYSICAL_ADDRESS PhysicalAddress,
IN OUT PULONG Length,
IN PULONG InIoSpace,
IN OUT PVOID *VirtualAddress);
VPAPI
VOID
NTAPI
VideoPortMoveMemory(
IN PVOID Destination,
IN PVOID Source,
IN ULONG Length);
VPAPI
LONGLONG
NTAPI
VideoPortQueryPerformanceCounter(
IN PVOID HwDeviceExtension,
OUT PLONGLONG PerformanceFrequency OPTIONAL);
VPAPI
VP_STATUS
NTAPI
VideoPortQueryServices(
_In_ PVOID HwDeviceExtension,
_In_ VIDEO_PORT_SERVICES ServicesType,
_Inout_ PINTERFACE Interface);
VPAPI
BOOLEAN
NTAPI
VideoPortQueueDpc(
IN PVOID HwDeviceExtension,
IN PMINIPORT_DPC_ROUTINE CallbackRoutine,
IN PVOID Context);
VPAPI
VOID
NTAPI
VideoPortReadPortBufferUchar(
IN PUCHAR Port,
OUT PUCHAR Buffer,
IN ULONG Count);
VPAPI
VOID
NTAPI
VideoPortReadPortBufferUlong(
IN PULONG Port,
OUT PULONG Buffer,
IN ULONG Count);
VPAPI
VOID
NTAPI
VideoPortReadPortBufferUshort(
IN PUSHORT Port,
OUT PUSHORT Buffer,
IN ULONG Count);
VPAPI
UCHAR
NTAPI
VideoPortReadPortUchar(
IN PUCHAR Port);
VPAPI
ULONG
NTAPI
VideoPortReadPortUlong(
IN PULONG Port);
VPAPI
USHORT
NTAPI
VideoPortReadPortUshort(
IN PUSHORT Port);
VPAPI
VOID
NTAPI
VideoPortReadRegisterBufferUchar(
IN PUCHAR Register,
OUT PUCHAR Buffer,
IN ULONG Count);
VPAPI
VOID
NTAPI
VideoPortReadRegisterBufferUlong(
IN PULONG Register,
OUT PULONG Buffer,
IN ULONG Count);
VPAPI
VOID
NTAPI
VideoPortReadRegisterBufferUshort(
IN PUSHORT Register,
OUT PUSHORT Buffer,
IN ULONG Count);
VPAPI
UCHAR
NTAPI
VideoPortReadRegisterUchar(
IN PUCHAR Register);
VPAPI
ULONG
NTAPI
VideoPortReadRegisterUlong(
IN PULONG Register);
VPAPI
USHORT
NTAPI
VideoPortReadRegisterUshort(
IN PUSHORT Register);
VPAPI
VOID
NTAPI
VideoPortReleaseBuffer(
IN PVOID HwDeviceExtension,
IN PVOID Buffer);
VPAPI
VOID
NTAPI
VideoPortReleaseDeviceLock(
IN PVOID HwDeviceExtension);
VPAPI
BOOLEAN
NTAPI
VideoPortScanRom(
PVOID HwDeviceExtension,
PUCHAR RomBase,
ULONG RomLength,
PUCHAR String);
VPAPI
ULONG
NTAPI
VideoPortSetBusData(
IN PVOID HwDeviceExtension,
IN BUS_DATA_TYPE BusDataType,
IN ULONG SlotNumber,
IN PVOID Buffer,
IN ULONG Offset,
IN ULONG Length);
VPAPI
VP_STATUS
NTAPI
VideoPortSetRegistryParameters(
IN PVOID HwDeviceExtension,
IN PWSTR ValueName,
IN PVOID ValueData,
IN ULONG ValueLength);
VPAPI
VP_STATUS
NTAPI
VideoPortSetTrappedEmulatorPorts(
IN PVOID HwDeviceExtension,
IN ULONG NumAccessRanges,
IN PVIDEO_ACCESS_RANGE AccessRange);
VPAPI
VOID
NTAPI
VideoPortStallExecution(
IN ULONG Microseconds);
VPAPI
VOID
NTAPI
VideoPortStartTimer(
IN PVOID HwDeviceExtension);
VPAPI
VOID
NTAPI
VideoPortStopTimer(
IN PVOID HwDeviceExtension);
VPAPI
BOOLEAN
NTAPI
VideoPortSynchronizeExecution(
IN PVOID HwDeviceExtension,
IN VIDEO_SYNCHRONIZE_PRIORITY Priority,
IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine,
IN PVOID Context);
VPAPI
VP_STATUS
NTAPI
VideoPortUnmapMemory(
IN PVOID HwDeviceExtension,
IN OUT PVOID VirtualAddress,
IN HANDLE ProcessHandle);
VPAPI
VP_STATUS
NTAPI
VideoPortVerifyAccessRanges(
_In_ PVOID HwDeviceExtension,
_In_opt_ ULONG NumAccessRanges,
_In_reads_opt_(NumAccessRanges) PVIDEO_ACCESS_RANGE AccessRanges);
VPAPI
VOID
NTAPI
VideoPortWritePortBufferUchar(
IN PUCHAR Port,
IN PUCHAR Buffer,
IN ULONG Count);
VPAPI
VOID
NTAPI
VideoPortWritePortBufferUlong(
IN PULONG Port,
IN PULONG Buffer,
IN ULONG Count);
VPAPI
VOID
NTAPI
VideoPortWritePortBufferUshort(
IN PUSHORT Port,
IN PUSHORT Buffer,
IN ULONG Count);
VPAPI
VOID
NTAPI
VideoPortWritePortUchar(
IN PUCHAR Port,
IN UCHAR Value);
VPAPI
VOID
NTAPI
VideoPortWritePortUlong(
IN PULONG Port,
IN ULONG Value);
VPAPI
VOID
NTAPI
VideoPortWritePortUshort(
IN PUSHORT Port,
IN USHORT Value);
VPAPI
VOID
NTAPI
VideoPortWriteRegisterBufferUchar(
IN PUCHAR Register,
IN PUCHAR Buffer,
IN ULONG Count);
VPAPI
VOID
NTAPI
VideoPortWriteRegisterBufferUlong(
IN PULONG Register,
IN PULONG Buffer,
IN ULONG Count);
VPAPI
VOID
NTAPI
VideoPortWriteRegisterBufferUshort(
IN PUSHORT Register,
IN PUSHORT Buffer,
IN ULONG Count);
VPAPI
VOID
NTAPI
VideoPortWriteRegisterUchar(
IN PUCHAR Register,
IN UCHAR Value);
VPAPI
VOID
NTAPI
VideoPortWriteRegisterUlong(
IN PULONG Register,
IN ULONG Value);
VPAPI
VOID
NTAPI
VideoPortWriteRegisterUshort(
IN PUSHORT Register,
IN USHORT Value);
VPAPI
VOID
NTAPI
VideoPortZeroDeviceMemory(
IN PVOID Destination,
IN ULONG Length);
VPAPI
VOID
NTAPI
VideoPortZeroMemory(
IN PVOID Destination,
IN ULONG Length);
VPAPI
PVOID
NTAPI
VideoPortAllocateContiguousMemory(
IN PVOID HwDeviceExtension,
IN ULONG NumberOfBytes,
IN PHYSICAL_ADDRESS HighestAcceptableAddress);
VPAPI
PVOID
NTAPI
VideoPortGetCommonBuffer(
IN PVOID HwDeviceExtension,
IN ULONG DesiredLength,
IN ULONG Alignment,
OUT PPHYSICAL_ADDRESS LogicalAddress,
OUT PULONG pActualLength,
IN BOOLEAN CacheEnabled);
VPAPI
VOID
NTAPI
VideoPortFreeCommonBuffer(
IN PVOID HwDeviceExtension,
IN ULONG Length,
IN PVOID VirtualAddress,
IN PHYSICAL_ADDRESS LogicalAddress,
IN BOOLEAN CacheEnabled);
VPAPI
PDMA
NTAPI
VideoPortDoDma(
IN PVOID HwDeviceExtension,
IN PDMA pDma,
IN DMA_FLAGS DmaFlags);
VPAPI
BOOLEAN
NTAPI
VideoPortLockPages(
IN PVOID HwDeviceExtension,
IN OUT PVIDEO_REQUEST_PACKET pVrp,
IN OUT PEVENT pUEvent,
IN PEVENT pDisplayEvent,
IN DMA_FLAGS DmaFlags);
VPAPI
BOOLEAN
NTAPI
VideoPortUnlockPages(
IN PVOID hwDeviceExtension,
IN OUT PDMA pDma);
VPAPI
BOOLEAN
NTAPI
VideoPortSignalDmaComplete(
IN PVOID HwDeviceExtension,
IN PDMA pDmaHandle);
VPAPI
PVOID
NTAPI
VideoPortGetMdl(
IN PVOID HwDeviceExtension,
IN PDMA pDma);
VPAPI
PVOID
NTAPI
VideoPortGetDmaContext(
IN PVOID HwDeviceExtension,
IN PDMA pDma);
VPAPI
VOID
NTAPI
VideoPortSetDmaContext(
IN PVOID HwDeviceExtension,
OUT PDMA pDma,
IN PVOID InstanceContext);
VPAPI
ULONG
NTAPI
VideoPortGetBytesUsed(
IN PVOID HwDeviceExtension,
IN PDMA pDma);
VPAPI
VOID
NTAPI
VideoPortSetBytesUsed(
IN PVOID HwDeviceExtension,
IN OUT PDMA pDma,
IN ULONG BytesUsed);
VPAPI
PDMA
NTAPI
VideoPortAssociateEventsWithDmaHandle(
IN PVOID HwDeviceExtension,
IN OUT PVIDEO_REQUEST_PACKET pVrp,
IN PVOID MappedUserEvent,
IN PVOID DisplayDriverEvent);
VPAPI
PDMA
NTAPI
VideoPortMapDmaMemory(
IN PVOID HwDeviceExtension,
IN PVIDEO_REQUEST_PACKET pVrp,
IN PHYSICAL_ADDRESS BoardAddress,
IN PULONG Length,
IN PULONG InIoSpace,
IN PVOID MappedUserEvent,
IN PVOID DisplayDriverEvent,
IN OUT PVOID *VirtualAddress);
VPAPI
BOOLEAN
NTAPI
VideoPortUnmapDmaMemory(
IN PVOID HwDeviceExtension,
IN PVOID VirtualAddress,
IN HANDLE ProcessHandle,
IN PDMA BoardMemoryHandle);
VPAPI
VP_STATUS
NTAPI
VideoPortCreateSecondaryDisplay(
IN PVOID HwDeviceExtension,
IN OUT PVOID *SecondaryDeviceExtension,
IN ULONG ulFlag);
VPAPI
PVP_DMA_ADAPTER
NTAPI
VideoPortGetDmaAdapter(
IN PVOID HwDeviceExtension,
IN PVP_DEVICE_DESCRIPTION VpDeviceDescription);
VPAPI
VOID
NTAPI
VideoPortPutDmaAdapter(
IN PVOID HwDeviceExtension,
IN PVP_DMA_ADAPTER VpDmaAdapter);
VPAPI
PVOID
NTAPI
VideoPortAllocateCommonBuffer(
IN PVOID HwDeviceExtension,
IN PVP_DMA_ADAPTER VpDmaAdapter,
IN ULONG DesiredLength,
OUT PPHYSICAL_ADDRESS LogicalAddress,
IN BOOLEAN CacheEnabled,
PVOID Reserved);
VPAPI
VOID
NTAPI
VideoPortReleaseCommonBuffer(
IN PVOID HwDeviceExtension,
IN PVP_DMA_ADAPTER VpDmaAdapter,
IN ULONG Length,
IN PHYSICAL_ADDRESS LogicalAddress,
IN PVOID VirtualAddress,
IN BOOLEAN CacheEnabled);
VPAPI
PVOID
NTAPI
VideoPortLockBuffer(
IN PVOID HwDeviceExtension,
IN PVOID BaseAddress,
IN ULONG Length,
IN VP_LOCK_OPERATION Operation);
VPAPI
VOID
NTAPI
VideoPortUnlockBuffer(
IN PVOID HwDeviceExtension,
IN PVOID Mdl);
VPAPI
VP_STATUS
NTAPI
VideoPortStartDma(
IN PVOID HwDeviceExtension,
IN PVP_DMA_ADAPTER VpDmaAdapter,
IN PVOID Mdl,
IN ULONG Offset,
IN OUT PULONG pLength,
IN PEXECUTE_DMA ExecuteDmaRoutine,
IN PVOID Context,
IN BOOLEAN WriteToDevice);
VPAPI
VP_STATUS
NTAPI
VideoPortCompleteDma(
IN PVOID HwDeviceExtension,
IN PVP_DMA_ADAPTER VpDmaAdapter,
IN PVP_SCATTER_GATHER_LIST VpScatterGather,
IN BOOLEAN WriteToDevice);
VPAPI
VP_STATUS
NTAPI
VideoPortCreateEvent(
IN PVOID HwDeviceExtension,
IN ULONG EventFlag,
IN PVOID Unused,
OUT PEVENT *ppEvent);
VPAPI
VP_STATUS
NTAPI
VideoPortDeleteEvent(
IN PVOID HwDeviceExtension,
IN PEVENT pEvent);
VPAPI
LONG
NTAPI
VideoPortSetEvent(
IN PVOID HwDeviceExtension,
IN PEVENT pEvent);
VPAPI
VOID
NTAPI
VideoPortClearEvent(
IN PVOID HwDeviceExtension,
IN PEVENT pEvent);
VPAPI
LONG
NTAPI
VideoPortReadStateEvent(
IN PVOID HwDeviceExtension,
IN PEVENT pEvent);
VPAPI
VP_STATUS
NTAPI
VideoPortWaitForSingleObject(
IN PVOID HwDeviceExtension,
IN PVOID Object,
IN PLARGE_INTEGER Timeout OPTIONAL);
VPAPI
PVOID
NTAPI
VideoPortAllocatePool(
IN PVOID HwDeviceExtension,
IN VP_POOL_TYPE PoolType,
IN SIZE_T NumberOfBytes,
IN ULONG Tag);
VPAPI
VOID
NTAPI
VideoPortFreePool(
IN PVOID HwDeviceExtension,
IN PVOID Ptr);
VPAPI
VP_STATUS
NTAPI
VideoPortCreateSpinLock(
IN PVOID HwDeviceExtension,
OUT PSPIN_LOCK *SpinLock);
VPAPI
VP_STATUS
NTAPI
VideoPortDeleteSpinLock(
IN PVOID HwDeviceExtension,
IN PSPIN_LOCK SpinLock);
VPAPI
VOID
NTAPI
VideoPortAcquireSpinLock(
IN PVOID HwDeviceExtension,
IN PSPIN_LOCK SpinLock,
OUT PUCHAR OldIrql);
VPAPI
VOID
NTAPI
VideoPortAcquireSpinLockAtDpcLevel(
IN PVOID HwDeviceExtension,
IN PSPIN_LOCK SpinLock);
VPAPI
VOID
NTAPI
VideoPortReleaseSpinLock(
IN PVOID HwDeviceExtension,
IN PSPIN_LOCK SpinLock,
IN UCHAR NewIrql);
VPAPI
VOID
NTAPI
VideoPortReleaseSpinLockFromDpcLevel(
IN PVOID HwDeviceExtension,
IN PSPIN_LOCK SpinLock);
VPAPI
VOID
NTAPI
VideoPortQuerySystemTime(
OUT PLARGE_INTEGER CurrentTime);
VPAPI
BOOLEAN
NTAPI
VideoPortCheckForDeviceExistence(
IN PVOID HwDeviceExtension,
IN USHORT VendorId,
IN USHORT DeviceId,
IN UCHAR RevisionId,
IN USHORT SubVendorId,
IN USHORT SubSystemId,
IN ULONG Flags);
VPAPI
ULONG
NTAPI
VideoPortGetAssociatedDeviceID(
IN PVOID DeviceObject);
VPAPI
VP_STATUS
NTAPI
VideoPortFlushRegistry(
PVOID HwDeviceExtension);
VPAPI
VP_STATUS
NTAPI
VideoPortGetVersion(
IN PVOID HwDeviceExtension,
IN OUT PVPOSVERSIONINFO pVpOsVersionInfo);
VPAPI
BOOLEAN
NTAPI
VideoPortIsNoVesa(VOID);
VPAPI
VP_STATUS
NTAPI
VideoPortRegisterBugcheckCallback(
IN PVOID HwDeviceExtension,
IN ULONG BugcheckCode,
IN PVIDEO_BUGCHECK_CALLBACK Callback,
IN ULONG BugcheckDataSize);
VPAPI
PVIDEO_DEBUG_REPORT
NTAPI
VideoPortDbgReportCreate(
IN PVOID HwDeviceExtension,
IN ULONG ulCode,
IN ULONG_PTR ulpArg1,
IN ULONG_PTR ulpArg2,
IN ULONG_PTR ulpArg3,
IN ULONG_PTR ulpArg4);
VPAPI
BOOLEAN
NTAPI
VideoPortDbgReportSecondaryData(
IN OUT PVIDEO_DEBUG_REPORT pReport,
IN PVOID pvData,
IN ULONG ulDataSize);
VPAPI
VOID
NTAPI
VideoPortDbgReportComplete(
IN OUT PVIDEO_DEBUG_REPORT pReport);
#ifdef __cplusplus
}
#endif