/* * video.h * * Video port and miniport driver interface * * This file is part of the w32api package. * * Contributors: * Created by Casper S. Hornstrup * * 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. * */ #ifndef __VIDEO_H #define __VIDEO_H #if __GNUC__ >=3 #pragma GCC system_header #endif #ifdef __WINDDI_H #error winddi.h cannot be included with video.h #else #ifdef __cplusplus extern "C" { #endif #include "ntddk.h" #if defined(_VIDEOPORT_) #define VPAPI DECLSPEC_EXPORT #else #define VPAPI DECLSPEC_IMPORT #endif #include "videoagp.h" #include "ntddvdeo.h" typedef LONG VP_STATUS; typedef VP_STATUS *PVP_STATUS; typedef struct __DMA_PARAMETERS * PDMA; typedef struct _VIDEO_PORT_EVENT *PEVENT; typedef struct _VIDEO_PORT_SPIN_LOCK *PSPIN_LOCK; typedef struct __VP_DMA_ADAPTER *PVP_DMA_ADAPTER; #define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF #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 typedef enum VIDEO_DEBUG_LEVEL { Error = 0, Warn, Trace, Info } VIDEO_DEBUG_LEVEL, *PVIDEO_DEBUG_LEVEL; typedef enum { VideoPortUnlockAfterDma = 1, VideoPortKeepPagesLocked, VideoPortDmaInitOnly } DMA_FLAGS; typedef enum _HW_DMA_RETURN { DmaAsyncReturn, DmaSyncReturn } HW_DMA_RETURN, *PHW_DMA_RETURN; typedef HW_DMA_RETURN (*PVIDEO_HW_START_DMA)( PVOID HwDeviceExtension, PDMA pDma); #ifdef 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 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; #define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO 0x42 #define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA 0x28 #define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA 0x50 typedef enum _VIDEO_DEVICE_DATA_TYPE { VpMachineData = 0, VpCmosData, VpBusData, VpControllerData, VpMonitorData } VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE; /* Video miniport driver functions */ 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 DDKAPI (*PEXECUTE_DMA)( IN PVOID HwDeviceExtension, IN PVP_DMA_ADAPTER VpDmaAdapter, IN PVP_SCATTER_GATHER_LIST SGList, IN PVOID Context); typedef PVOID DDKAPI (*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 DDKAPI (*PVIDEO_HW_FIND_ADAPTER)( IN PVOID HwDeviceExtension, IN PVOID HwContext, IN PWSTR ArgumentString, IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo, OUT PUCHAR Again); typedef VP_STATUS DDKAPI (*PVIDEO_HW_POWER_GET)( IN PVOID HwDeviceExtension, IN ULONG HwId, IN OUT PVIDEO_POWER_MANAGEMENT VideoPowerControl); /* 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 /* 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 DDKAPI (*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 BOOLEAN DDKAPI (*PVIDEO_HW_INITIALIZE)( IN PVOID HwDeviceExtension); typedef BOOLEAN DDKAPI (*PVIDEO_HW_INTERRUPT)( IN PVOID HwDeviceExtension); /* VIDEO_ACCESS_RANGE.RangePassive */ #define VIDEO_RANGE_PASSIVE_DECODE 1 #define VIDEO_RANGE_10_BIT_DECODE 2 #ifndef VIDEO_ACCESS_RANGE_DEFINED /* also in miniport.h */ #define VIDEO_ACCESS_RANGE_DEFINED typedef struct _VIDEO_ACCESS_RANGE { PHYSICAL_ADDRESS RangeStart; ULONG RangeLength; UCHAR RangeInIoSpace; UCHAR RangeVisible; UCHAR RangeShareable; UCHAR RangePassive; } VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE; #endif typedef VOID DDKAPI (*PVIDEO_HW_LEGACYRESOURCES)( IN ULONG VendorId, IN ULONG DeviceId, IN OUT PVIDEO_ACCESS_RANGE *LegacyResourceList, IN OUT PULONG LegacyResourceCount); typedef VP_STATUS DDKAPI (*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 struct _QUERY_INTERFACE { CONST GUID *InterfaceType; USHORT Size; USHORT Version; PINTERFACE Interface; PVOID InterfaceSpecificData; } QUERY_INTERFACE, *PQUERY_INTERFACE; typedef VP_STATUS DDKAPI (*PVIDEO_HW_QUERY_INTERFACE)( IN PVOID HwDeviceExtension, IN OUT PQUERY_INTERFACE QueryInterface); typedef VP_STATUS DDKAPI (*PMINIPORT_GET_REGISTRY_ROUTINE)( IN PVOID HwDeviceExtension, IN PVOID Context, IN OUT PWSTR ValueName, IN OUT PVOID ValueData, IN ULONG ValueLength); typedef BOOLEAN DDKAPI (*PVIDEO_HW_RESET_HW)( IN PVOID HwDeviceExtension, IN ULONG Columns, IN ULONG Rows); typedef VP_STATUS DDKAPI (*PVIDEO_HW_POWER_SET)( IN PVOID HwDeviceExtension, IN ULONG HwId, IN PVIDEO_POWER_MANAGEMENT VideoPowerControl); 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 DDKAPI (*PVIDEO_HW_START_IO)( IN PVOID HwDeviceExtension, IN PVIDEO_REQUEST_PACKET RequestPacket); typedef BOOLEAN DDKAPI (*PMINIPORT_SYNCHRONIZE_ROUTINE)( IN PVOID Context); typedef VOID DDKAPI (*PVIDEO_HW_TIMER)( IN PVOID HwDeviceExtension); typedef VOID DDKAPI (*PMINIPORT_DPC_ROUTINE)( IN PVOID HwDeviceExtension, IN PVOID Context); typedef VP_STATUS DDKAPI (*PDRIVER_IO_PORT_UCHAR)( IN ULONG_PTR Context, IN ULONG Port, IN UCHAR AccessMode, IN PUCHAR Data); typedef VP_STATUS DDKAPI (*PDRIVER_IO_PORT_UCHAR_STRING)( IN ULONG_PTR Context, IN ULONG Port, IN UCHAR AccessMode, IN PUCHAR Data, IN ULONG DataLength); typedef VP_STATUS DDKAPI (*PDRIVER_IO_PORT_ULONG)( IN ULONG_PTR Context, IN ULONG Port, IN UCHAR AccessMode, IN PULONG Data); typedef VP_STATUS DDKAPI (*PDRIVER_IO_PORT_ULONG_STRING)( IN ULONG_PTR Context, IN ULONG Port, IN UCHAR AccessMode, IN PULONG Data, IN ULONG DataLength); typedef VP_STATUS DDKAPI (*PDRIVER_IO_PORT_USHORT)( IN ULONG_PTR Context, IN ULONG Port, IN UCHAR AccessMode, IN PUSHORT Data); typedef VP_STATUS DDKAPI (*PDRIVER_IO_PORT_USHORT_STRING)( IN ULONG_PTR Context, IN ULONG Port, IN UCHAR AccessMode, IN PUSHORT Data, IN ULONG DataLength); 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 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; /* VIDEO_PORT_AGP_INTERFACE.Version contants */ #define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1 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; /* VIDEO_PORT_AGP_INTERFACE_2.Version constants */ #define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2 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; #define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1 typedef VOID DDKAPI (*PVIDEO_WRITE_CLOCK_LINE)( PVOID HwDeviceExtension, UCHAR Data); typedef VOID DDKAPI (*PVIDEO_WRITE_DATA_LINE)( PVOID HwDeviceExtension, UCHAR Data); typedef BOOLEAN DDKAPI (*PVIDEO_READ_CLOCK_LINE)( PVOID HwDeviceExtension); typedef BOOLEAN DDKAPI (*PVIDEO_READ_DATA_LINE)( 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 DDKAPI (*PI2C_START)( IN PVOID HwDeviceExtension, IN PI2C_CALLBACKS I2CCallbacks); typedef BOOLEAN DDKAPI (*PI2C_STOP)( IN PVOID HwDeviceExtension, IN PI2C_CALLBACKS I2CCallbacks); typedef BOOLEAN DDKAPI (*PI2C_WRITE)( IN PVOID HwDeviceExtension, IN PI2C_CALLBACKS I2CCallbacks, IN PUCHAR Buffer, IN ULONG Length); typedef BOOLEAN DDKAPI (*PI2C_READ)( IN PVOID HwDeviceExtension, IN PI2C_CALLBACKS I2CCallbacks, OUT PUCHAR Buffer, IN ULONG Length); 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; /* VIDEO_PORT_INT10_INTERFACE.Version constants */ #define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1 typedef VP_STATUS DDKAPI (*PINT10_ALLOCATE_BUFFER)( IN PVOID Context, OUT PUSHORT Seg, OUT PUSHORT Off, IN OUT PULONG Length); typedef VP_STATUS DDKAPI (*PINT10_CALL_BIOS)( IN PVOID Context, IN OUT PINT10_BIOS_ARGUMENTS BiosArguments); typedef VP_STATUS DDKAPI (*PINT10_FREE_BUFFER)( IN PVOID Context, IN USHORT Seg, IN USHORT Off); typedef VP_STATUS DDKAPI (*PINT10_READ_MEMORY)( IN PVOID Context, IN USHORT Seg, IN USHORT Off, OUT PVOID Buffer, IN ULONG Length); typedef VP_STATUS DDKAPI (*PINT10_WRITE_MEMORY)( IN PVOID Context, IN USHORT Seg, IN USHORT Off, IN PVOID Buffer, IN ULONG Length); 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; /* 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 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 struct _VP_DEVICE_DESCRIPTION { BOOLEAN ScatterGather; BOOLEAN Dma32BitAddresses; BOOLEAN Dma64BitAddresses; ULONG MaximumLength; } VP_DEVICE_DESCRIPTION, *PVP_DEVICE_DESCRIPTION; typedef struct _VPOSVERSIONINFO { IN ULONG Size; OUT ULONG MajorVersion; OUT ULONG MinorVersion; OUT ULONG BuildNumber; OUT USHORT ServicePackMajor; OUT USHORT ServicePackMinor; } VPOSVERSIONINFO, *PVPOSVERSIONINFO; /* Video port functions for miniports */ VPAPI VOID DDKAPI VideoDebugPrint( IN ULONG DebugPrintLevel, IN PCHAR DebugMessage, IN ...); VPAPI VOID DDKAPI VideoPortAcquireDeviceLock( IN PVOID HwDeviceExtension); VPAPI VOID DDKAPI VideoPortAcquireSpinLock( IN PVOID HwDeviceExtension, IN PSPIN_LOCK SpinLock, OUT PUCHAR OldIrql); VPAPI VOID DDKAPI VideoPortAcquireSpinLockAtDpcLevel( IN PVOID HwDeviceExtension, IN PSPIN_LOCK SpinLock); VPAPI VP_STATUS DDKAPI VideoPortAllocateBuffer( IN PVOID HwDeviceExtension, IN ULONG Size, OUT PVOID *Buffer); VPAPI PVOID DDKAPI VideoPortAllocateCommonBuffer( IN PVOID HwDeviceExtension, IN PVP_DMA_ADAPTER VpDmaAdapter, IN ULONG DesiredLength, OUT PPHYSICAL_ADDRESS LogicalAddress, IN BOOLEAN CacheEnabled, PVOID Reserved); VPAPI PVOID DDKAPI VideoPortAllocateContiguousMemory( IN PVOID HwDeviceExtension, IN ULONG NumberOfBytes, IN PHYSICAL_ADDRESS HighestAcceptableAddress); /* VideoPortAllocatePool.PoolType constants */ typedef enum _VP_POOL_TYPE { VpNonPagedPool = 0, VpPagedPool, VpNonPagedPoolCacheAligned = 4, VpPagedPoolCacheAligned } VP_POOL_TYPE, *PVP_POOL_TYPE; VPAPI PVOID DDKAPI VideoPortAllocatePool( IN PVOID HwDeviceExtension, IN VP_POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag); VPAPI PDMA DDKAPI VideoPortAssociateEventsWithDmaHandle( IN PVOID HwDeviceExtension, IN OUT PVIDEO_REQUEST_PACKET pVrp, IN PVOID MappedUserEvent, IN PVOID DisplayDriverEvent); /* VideoPortCheckForDeviceExistence.Flags constants */ #define CDE_USE_SUBSYSTEM_IDS 0x00000001 #define CDE_USE_REVISION 0x00000002 VPAPI BOOLEAN DDKAPI VideoPortCheckForDeviceExistence( IN PVOID HwDeviceExtension, IN USHORT VendorId, IN USHORT DeviceId, IN UCHAR RevisionId, IN USHORT SubVendorId, IN USHORT SubSystemId, IN ULONG Flags); VPAPI VOID DDKAPI VideoPortClearEvent( IN PVOID HwDeviceExtension, IN PEVENT pEvent); VPAPI ULONG DDKAPI VideoPortCompareMemory( IN PVOID Source1, IN PVOID Source2, IN ULONG Length); VPAPI VP_STATUS DDKAPI VideoPortCompleteDma( IN PVOID HwDeviceExtension, IN PVP_DMA_ADAPTER VpDmaAdapter, IN PVP_SCATTER_GATHER_LIST VpScatterGather, IN BOOLEAN WriteToDevice); VPAPI VP_STATUS DDKAPI VideoPortCreateEvent( IN PVOID HwDeviceExtension, IN ULONG EventFlag, IN PVOID Unused, OUT PEVENT *ppEvent); VPAPI VP_STATUS DDKAPI VideoPortCreateSecondaryDisplay( IN PVOID HwDeviceExtension, IN OUT PVOID *SecondaryDeviceExtension, IN ULONG ulFlag); VPAPI VP_STATUS DDKAPI VideoPortCreateSpinLock( IN PVOID HwDeviceExtension, OUT PSPIN_LOCK *SpinLock); typedef struct _DDC_CONTROL { IN ULONG Size; IN I2C_CALLBACKS I2CCallbacks; IN UCHAR EdidSegment; } DDC_CONTROL, *PDDC_CONTROL; VPAPI BOOLEAN DDKAPI VideoPortDDCMonitorHelper( IN PVOID HwDeviceExtension, IN PVOID DDCControl, IN OUT PUCHAR EdidBuffer, IN ULONG EdidBufferSize); VPAPI VOID DDKCDECLAPI VideoPortDebugPrint( IN VIDEO_DEBUG_LEVEL DebugPrintLevel, IN PCHAR DebugMessage, IN ...); VPAPI VP_STATUS DDKAPI VideoPortDeleteEvent( IN PVOID HwDeviceExtension, IN PEVENT pEvent); VPAPI VP_STATUS DDKAPI VideoPortDeleteSpinLock( IN PVOID HwDeviceExtension, IN PSPIN_LOCK SpinLock); VPAPI VP_STATUS DDKAPI VideoPortDisableInterrupt( IN PVOID HwDeviceExtension); VPAPI PDMA DDKAPI VideoPortDoDma( IN PVOID HwDeviceExtension, IN PDMA pDma, IN DMA_FLAGS DmaFlags); VPAPI VP_STATUS DDKAPI VideoPortEnableInterrupt( IN PVOID HwDeviceExtension); VPAPI VP_STATUS DDKAPI VideoPortEnumerateChildren( IN PVOID HwDeviceExtension, IN PVOID Reserved); VPAPI VOID DDKAPI VideoPortFreeCommonBuffer( IN PVOID HwDeviceExtension, IN ULONG Length, IN PVOID VirtualAddress, IN PHYSICAL_ADDRESS LogicalAddress, IN BOOLEAN CacheEnabled); VPAPI VOID DDKAPI VideoPortFreeDeviceBase( IN PVOID HwDeviceExtension, IN PVOID MappedAddress); VPAPI VOID DDKAPI VideoPortFreePool( IN PVOID HwDeviceExtension, IN PVOID Ptr); VPAPI VP_STATUS DDKAPI VideoPortGetAccessRanges( IN PVOID HwDeviceExtension, IN ULONG NumRequestedResources, IN PIO_RESOURCE_DESCRIPTOR RequestedResources OPTIONAL, IN ULONG NumAccessRanges, OUT PVIDEO_ACCESS_RANGE AccessRanges, IN PVOID VendorId, IN PVOID DeviceId, OUT PULONG Slot); VPAPI PVOID DDKAPI VideoPortGetAssociatedDeviceExtension( IN PVOID DeviceObject); VPAPI ULONG DDKAPI VideoPortGetAssociatedDeviceID( IN PVOID DeviceObject); VPAPI ULONG DDKAPI VideoPortGetBusData( IN PVOID HwDeviceExtension, IN BUS_DATA_TYPE BusDataType, IN ULONG SlotNumber, IN OUT PVOID Buffer, IN ULONG Offset, IN ULONG Length); VPAPI ULONG DDKAPI VideoPortGetBytesUsed( IN PVOID HwDeviceExtension, IN PDMA pDma); VPAPI PVOID DDKAPI VideoPortGetCommonBuffer( IN PVOID HwDeviceExtension, IN ULONG DesiredLength, IN ULONG Alignment, OUT PPHYSICAL_ADDRESS LogicalAddress, OUT PULONG pActualLength, IN BOOLEAN CacheEnabled); VPAPI UCHAR DDKAPI VideoPortGetCurrentIrql( VOID); VPAPI PVOID DDKAPI VideoPortGetDeviceBase( IN PVOID HwDeviceExtension, IN PHYSICAL_ADDRESS IoAddress, IN ULONG NumberOfUchars, IN UCHAR InIoSpace); VPAPI VP_STATUS DDKAPI VideoPortGetDeviceData( IN PVOID HwDeviceExtension, IN VIDEO_DEVICE_DATA_TYPE DeviceDataType, IN PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine, IN PVOID Context); VPAPI PVP_DMA_ADAPTER DDKAPI VideoPortGetDmaAdapter( IN PVOID HwDeviceExtension, IN PVP_DEVICE_DESCRIPTION VpDeviceDescription); VPAPI PVOID DDKAPI VideoPortGetDmaContext( IN PVOID HwDeviceExtension, IN PDMA pDma); VPAPI PVOID DDKAPI VideoPortGetMdl( IN PVOID HwDeviceExtension, IN PDMA pDma); VPAPI VP_STATUS DDKAPI VideoPortGetRegistryParameters( IN PVOID HwDeviceExtension, IN PWSTR ParameterName, IN UCHAR IsParameterFileName, IN PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine, IN PVOID Context); VPAPI PVOID DDKAPI VideoPortGetRomImage( IN PVOID HwDeviceExtension, IN PVOID Unused1, IN ULONG Unused2, IN ULONG Length); VPAPI VP_STATUS DDKAPI VideoPortGetVersion( IN PVOID HwDeviceExtension, IN OUT PVPOSVERSIONINFO pVpOsVersionInfo); VPAPI VP_STATUS DDKAPI VideoPortGetVgaStatus( IN PVOID HwDeviceExtension, OUT PULONG VgaStatus); VPAPI ULONG DDKAPI VideoPortInitialize( IN PVOID Argument1, IN PVOID Argument2, IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData, IN PVOID HwContext); VPAPI VP_STATUS DDKAPI VideoPortInt10( IN PVOID HwDeviceExtension, IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments); VPAPI LONG DDKFASTAPI VideoPortInterlockedDecrement( IN PLONG Addend); VPAPI LONG DDKFASTAPI VideoPortInterlockedExchange( IN OUT PLONG Target, IN LONG Value); VPAPI LONG DDKFASTAPI VideoPortInterlockedIncrement( IN PLONG Addend); typedef enum _VP_LOCK_OPERATION { VpReadAccess = 0, VpWriteAccess, VpModifyAccess } VP_LOCK_OPERATION; VPAPI PVOID DDKAPI VideoPortLockBuffer( IN PVOID HwDeviceExtension, IN PVOID BaseAddress, IN ULONG Length, IN VP_LOCK_OPERATION Operation); VPAPI BOOLEAN DDKAPI VideoPortLockPages( IN PVOID HwDeviceExtension, IN OUT PVIDEO_REQUEST_PACKET pVrp, IN OUT PEVENT pUEvent, IN PEVENT pDisplayEvent, IN DMA_FLAGS DmaFlags); VPAPI VOID DDKAPI VideoPortLogError( IN PVOID HwDeviceExtension, IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL, IN VP_STATUS ErrorCode, IN ULONG UniqueId); VPAPI VP_STATUS DDKAPI 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 PDMA DDKAPI 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 VP_STATUS DDKAPI VideoPortMapMemory( IN PVOID HwDeviceExtension, IN PHYSICAL_ADDRESS PhysicalAddress, IN OUT PULONG Length, IN PULONG InIoSpace, IN OUT PVOID *VirtualAddress); VPAPI VOID DDKAPI VideoPortMoveMemory( IN PVOID Destination, IN PVOID Source, IN ULONG Length); VPAPI VOID DDKAPI VideoPortPutDmaAdapter( IN PVOID HwDeviceExtension, IN PVP_DMA_ADAPTER VpDmaAdapter); VPAPI LONGLONG DDKAPI VideoPortQueryPerformanceCounter( IN PVOID HwDeviceExtension, OUT PLONGLONG PerformanceFrequency OPTIONAL); /* VideoPortQueryServices.ServicesType constants */ typedef enum _VIDEO_PORT_SERVICES { VideoPortServicesAGP = 1, VideoPortServicesI2C, VideoPortServicesHeadless, VideoPortServicesInt10 } VIDEO_PORT_SERVICES; VPAPI VP_STATUS DDKAPI VideoPortQueryServices( IN PVOID HwDeviceExtension, IN VIDEO_PORT_SERVICES ServicesType, IN OUT PINTERFACE Interface); VPAPI VOID DDKAPI VideoPortQuerySystemTime( OUT PLARGE_INTEGER CurrentTime); VPAPI BOOLEAN DDKAPI VideoPortQueueDpc( IN PVOID HwDeviceExtension, IN PMINIPORT_DPC_ROUTINE CallbackRoutine, IN PVOID Context); VPAPI VOID DDKAPI VideoPortReadPortBufferUchar( IN PUCHAR Port, OUT PUCHAR Buffer, IN ULONG Count); VPAPI VOID DDKAPI VideoPortReadPortBufferUlong( IN PULONG Port, OUT PULONG Buffer, IN ULONG Count); VPAPI VOID DDKAPI VideoPortReadPortBufferUshort( IN PUSHORT Port, OUT PUSHORT Buffer, IN ULONG Count); VPAPI UCHAR DDKAPI VideoPortReadPortUchar( IN PUCHAR Port); VPAPI ULONG DDKAPI VideoPortReadPortUlong( IN PULONG Port); VPAPI USHORT DDKAPI VideoPortReadPortUshort( IN PUSHORT Port); VPAPI VOID DDKAPI VideoPortReadRegisterBufferUchar( IN PUCHAR Register, OUT PUCHAR Buffer, IN ULONG Count); VPAPI VOID DDKAPI VideoPortReadRegisterBufferUlong( IN PULONG Register, OUT PULONG Buffer, IN ULONG Count); VPAPI VOID DDKAPI VideoPortReadRegisterBufferUshort( IN PUSHORT Register, OUT PUSHORT Buffer, IN ULONG Count); VPAPI UCHAR DDKAPI VideoPortReadRegisterUchar( IN PUCHAR Register); VPAPI ULONG DDKAPI VideoPortReadRegisterUlong( IN PULONG Register); VPAPI USHORT DDKAPI VideoPortReadRegisterUshort( IN PUSHORT Register); VPAPI LONG DDKAPI VideoPortReadStateEvent( IN PVOID HwDeviceExtension, IN PEVENT pEvent); VPAPI VOID DDKAPI VideoPortReleaseBuffer( IN PVOID HwDeviceExtension, IN PVOID Buffer); VPAPI VOID DDKAPI VideoPortReleaseCommonBuffer( IN PVOID HwDeviceExtension, IN PVP_DMA_ADAPTER VpDmaAdapter, IN ULONG Length, IN PHYSICAL_ADDRESS LogicalAddress, IN PVOID VirtualAddress, IN BOOLEAN CacheEnabled); VPAPI VOID DDKAPI VideoPortReleaseDeviceLock( IN PVOID HwDeviceExtension); VPAPI VOID DDKAPI VideoPortReleaseSpinLock( IN PVOID HwDeviceExtension, IN PSPIN_LOCK SpinLock, IN UCHAR NewIrql); VPAPI VOID DDKAPI VideoPortReleaseSpinLockFromDpcLevel( IN PVOID HwDeviceExtension, IN PSPIN_LOCK SpinLock); VPAPI BOOLEAN DDKAPI VideoPortScanRom( PVOID HwDeviceExtension, PUCHAR RomBase, ULONG RomLength, PUCHAR String); VPAPI ULONG DDKAPI VideoPortSetBusData( IN PVOID HwDeviceExtension, IN BUS_DATA_TYPE BusDataType, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length); VPAPI VOID DDKAPI VideoPortSetBytesUsed( IN PVOID HwDeviceExtension, IN OUT PDMA pDma, IN ULONG BytesUsed); VPAPI VOID DDKAPI VideoPortSetDmaContext( IN PVOID HwDeviceExtension, OUT PDMA pDma, IN PVOID InstanceContext); VPAPI LONG DDKAPI VideoPortSetEvent( IN PVOID HwDeviceExtension, IN PEVENT pEvent); VPAPI VP_STATUS DDKAPI VideoPortSetRegistryParameters( IN PVOID HwDeviceExtension, IN PWSTR ValueName, IN PVOID ValueData, IN ULONG ValueLength); VPAPI VP_STATUS DDKAPI VideoPortSetTrappedEmulatorPorts( IN PVOID HwDeviceExtension, IN ULONG NumAccessRanges, IN PVIDEO_ACCESS_RANGE AccessRange); VPAPI BOOLEAN DDKAPI VideoPortSignalDmaComplete( IN PVOID HwDeviceExtension, IN PVOID pDmaHandle); VPAPI VOID DDKAPI VideoPortStallExecution( IN ULONG Microseconds); VPAPI VP_STATUS DDKAPI 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 VOID DDKAPI VideoPortStartTimer( IN PVOID HwDeviceExtension); VPAPI VOID DDKAPI VideoPortStopTimer( IN PVOID HwDeviceExtension); /* VideoPortSynchronizeExecution.Priority constants */ typedef enum VIDEO_SYNCHRONIZE_PRIORITY { VpLowPriority = 0, VpMediumPriority, VpHighPriority } VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY; VPAPI BOOLEAN DDKAPI VideoPortSynchronizeExecution( IN PVOID HwDeviceExtension, IN VIDEO_SYNCHRONIZE_PRIORITY Priority, IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine, IN PVOID Context); VPAPI VOID DDKAPI VideoPortUnLockBuffer( IN PVOID HwDeviceExtension, IN PVOID Mdl); VPAPI BOOLEAN DDKAPI VideoPortUnlockPages( IN PVOID hwDeviceExtension, IN OUT PDMA pDma); VPAPI BOOLEAN DDKAPI VideoPortUnmapDmaMemory( IN PVOID HwDeviceExtension, IN PVOID VirtualAddress, IN HANDLE ProcessHandle, IN PDMA BoardMemoryHandle); VPAPI VP_STATUS DDKAPI VideoPortUnmapMemory( IN PVOID HwDeviceExtension, IN OUT PVOID VirtualAddress, IN HANDLE ProcessHandle); VPAPI VP_STATUS DDKAPI VideoPortVerifyAccessRanges( IN PVOID HwDeviceExtension, IN ULONG NumAccessRanges, IN PVIDEO_ACCESS_RANGE AccessRanges); VPAPI VP_STATUS DDKAPI VideoPortWaitForSingleObject( IN PVOID HwDeviceExtension, IN PVOID Object, IN PLARGE_INTEGER Timeout OPTIONAL); VPAPI VOID DDKAPI VideoPortWritePortBufferUchar( IN PUCHAR Port, IN PUCHAR Buffer, IN ULONG Count); VPAPI VOID DDKAPI VideoPortWritePortBufferUlong( IN PULONG Port, IN PULONG Buffer, IN ULONG Count); VPAPI VOID DDKAPI VideoPortWritePortBufferUshort( IN PUSHORT Port, IN PUSHORT Buffer, IN ULONG Count); VPAPI VOID DDKAPI VideoPortWritePortUchar( IN PUCHAR Port, IN UCHAR Value); VPAPI VOID DDKAPI VideoPortWritePortUlong( IN PULONG Port, IN ULONG Value); VPAPI VOID DDKAPI VideoPortWritePortUshort( IN PUSHORT Port, IN USHORT Value); VPAPI VOID DDKAPI VideoPortWriteRegisterBufferUchar( IN PUCHAR Register, IN PUCHAR Buffer, IN ULONG Count); VPAPI VOID DDKAPI VideoPortWriteRegisterBufferUlong( IN PULONG Register, IN PULONG Buffer, IN ULONG Count); VPAPI VOID DDKAPI VideoPortWriteRegisterBufferUshort( IN PUSHORT Register, IN PUSHORT Buffer, IN ULONG Count); VPAPI VOID DDKAPI VideoPortWriteRegisterUchar( IN PUCHAR Register, IN UCHAR Value); VPAPI VOID DDKAPI VideoPortWriteRegisterUlong( IN PULONG Register, IN ULONG Value); VPAPI VOID DDKAPI VideoPortWriteRegisterUshort( IN PUSHORT Register, IN USHORT Value); VPAPI VOID DDKAPI VideoPortZeroDeviceMemory( IN PVOID Destination, IN ULONG Length); VPAPI VOID DDKAPI VideoPortZeroMemory( IN PVOID Destination, IN ULONG Length); #ifdef DBG #define VideoDebugPrint(x) VideoPortDebugPrint x #else #define VideoDebugPrint(x) #endif #ifdef __cplusplus } #endif #endif /* defined __WINDDI_H */ #endif /* __VIDEO_H */