mirror of
https://github.com/reactos/reactos.git
synced 2024-11-01 20:32:36 +00:00
1758 lines
36 KiB
C
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,
|
|
IN OUT 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
|