4 * Video port and miniport driver interface
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
27 #pragma GCC system_header
31 #error winddi.h cannot be included with video.h
34 #if defined(_VIDEOPORT_)
35 #define VPAPI DECLSPEC_EXPORT
37 #define VPAPI DECLSPEC_IMPORT
47 typedef LONG VP_STATUS
;
48 typedef VP_STATUS
*PVP_STATUS
;
49 typedef struct __DMA_PARAMETERS
* PDMA
;
50 typedef struct _VIDEO_PORT_EVENT
*PEVENT
;
51 typedef struct _VIDEO_PORT_SPIN_LOCK
*PSPIN_LOCK
;
52 typedef struct __VP_DMA_ADAPTER
*PVP_DMA_ADAPTER
;
54 #define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF
56 #define EVENT_TYPE_MASK 1
57 #define SYNCHRONIZATION_EVENT 0
58 #define NOTIFICATION_EVENT 1
60 #define INITIAL_EVENT_STATE_MASK 2
61 #define INITIAL_EVENT_NOT_SIGNALED 0
62 #define INITIAL_EVENT_SIGNALED 2
64 typedef enum VIDEO_DEBUG_LEVEL
{
69 } VIDEO_DEBUG_LEVEL
, *PVIDEO_DEBUG_LEVEL
;
72 VideoPortUnlockAfterDma
= 1,
73 VideoPortKeepPagesLocked
,
77 typedef enum _HW_DMA_RETURN
{
80 } HW_DMA_RETURN
, *PHW_DMA_RETURN
;
83 (*PVIDEO_HW_START_DMA
)(
84 PVOID HwDeviceExtension
,
90 #define PAGED_CODE() \
91 if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) \
93 VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \
103 typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA
{
104 INTERFACE_TYPE InterfaceType
;
116 } VIDEO_HARDWARE_CONFIGURATION_DATA
, *PVIDEO_HARDWARE_CONFIGURATION_DATA
;
118 #define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO 0x42
119 #define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA 0x28
120 #define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA 0x50
122 typedef enum _VIDEO_DEVICE_DATA_TYPE
{
128 } VIDEO_DEVICE_DATA_TYPE
, *PVIDEO_DEVICE_DATA_TYPE
;
132 /* Video miniport driver functions */
134 typedef struct _VP_SCATTER_GATHER_ELEMENT
{
135 PHYSICAL_ADDRESS Address
;
138 } VP_SCATTER_GATHER_ELEMENT
, *PVP_SCATTER_GATHER_ELEMENT
;
140 typedef struct _VP_SCATTER_GATHER_LIST
{
141 ULONG NumberOfElements
;
143 VP_SCATTER_GATHER_ELEMENT Elements
[0];
144 } VP_SCATTER_GATHER_LIST
, *PVP_SCATTER_GATHER_LIST
;
148 IN PVOID HwDeviceExtension
,
149 IN PVP_DMA_ADAPTER VpDmaAdapter
,
150 IN PVP_SCATTER_GATHER_LIST SGList
,
154 (*PVIDEO_PORT_GET_PROC_ADDRESS
)(
155 IN PVOID HwDeviceExtension
,
156 IN PUCHAR FunctionName
);
158 typedef struct _VIDEO_PORT_CONFIG_INFO
{
160 ULONG SystemIoBusNumber
;
161 INTERFACE_TYPE AdapterInterfaceType
;
162 ULONG BusInterruptLevel
;
163 ULONG BusInterruptVector
;
164 KINTERRUPT_MODE InterruptMode
;
165 ULONG NumEmulatorAccessEntries
;
166 PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries
;
167 ULONG_PTR EmulatorAccessEntriesContext
;
168 PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress
;
169 ULONG VdmPhysicalVideoMemoryLength
;
170 ULONG HardwareStateSize
;
174 UCHAR InterruptShareable
;
179 BOOLEAN NeedPhysicalAddresses
;
181 ULONG MaximumTransferLength
;
182 ULONG NumberOfPhysicalBreaks
;
183 BOOLEAN ScatterGather
;
184 ULONG MaximumScatterGatherChunkSize
;
185 PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress
;
186 PWSTR DriverRegistryPath
;
187 ULONGLONG SystemMemorySize
;
188 } VIDEO_PORT_CONFIG_INFO
, *PVIDEO_PORT_CONFIG_INFO
;
190 typedef VP_STATUS DDKAPI
191 (*PVIDEO_HW_FIND_ADAPTER
)(
192 IN PVOID HwDeviceExtension
,
194 IN PWSTR ArgumentString
,
195 IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo
,
198 typedef VP_STATUS DDKAPI
199 (*PVIDEO_HW_POWER_GET
)(
200 IN PVOID HwDeviceExtension
,
202 IN OUT PVIDEO_POWER_MANAGEMENT VideoPowerControl
);
204 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */
205 #define VIDEO_ENUM_MORE_DEVICES ERROR_CONTINUE
206 #define VIDEO_ENUM_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES
207 #define VIDEO_ENUM_INVALID_DEVICE ERROR_INVALID_NAME
209 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */
210 typedef struct _VIDEO_CHILD_ENUM_INFO
{
212 ULONG ChildDescriptorSize
;
215 PVOID ChildHwDeviceExtension
;
216 } VIDEO_CHILD_ENUM_INFO
, *PVIDEO_CHILD_ENUM_INFO
;
218 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */
219 typedef enum _VIDEO_CHILD_TYPE
{
224 } VIDEO_CHILD_TYPE
, *PVIDEO_CHILD_TYPE
;
227 (DDKAPI
*PVIDEO_HW_GET_CHILD_DESCRIPTOR
)(
228 IN PVOID HwDeviceExtension
,
229 IN PVIDEO_CHILD_ENUM_INFO ChildEnumInfo
,
230 OUT PVIDEO_CHILD_TYPE VideoChildType
,
231 OUT PUCHAR pChildDescriptor
,
236 (DDKAPI
*PVIDEO_HW_INITIALIZE
)(
237 IN PVOID HwDeviceExtension
);
240 (DDKAPI
*PVIDEO_HW_INTERRUPT
)(
241 IN PVOID HwDeviceExtension
);
243 /* VIDEO_ACCESS_RANGE.RangePassive */
244 #define VIDEO_RANGE_PASSIVE_DECODE 1
245 #define VIDEO_RANGE_10_BIT_DECODE 2
247 #ifndef VIDEO_ACCESS_RANGE_DEFINED /* also in miniport.h */
248 #define VIDEO_ACCESS_RANGE_DEFINED
249 typedef struct _VIDEO_ACCESS_RANGE
{
250 PHYSICAL_ADDRESS RangeStart
;
252 UCHAR RangeInIoSpace
;
254 UCHAR RangeShareable
;
256 } VIDEO_ACCESS_RANGE
, *PVIDEO_ACCESS_RANGE
;
260 (*PVIDEO_HW_LEGACYRESOURCES
)(
263 IN OUT PVIDEO_ACCESS_RANGE
*LegacyResourceList
,
264 IN OUT PULONG LegacyResourceCount
);
266 typedef VP_STATUS DDKAPI
267 (*PMINIPORT_QUERY_DEVICE_ROUTINE
)(
268 IN PVOID HwDeviceExtension
,
270 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType
,
272 IN ULONG IdentifierLength
,
273 IN PVOID ConfigurationData
,
274 IN ULONG ConfigurationDataLength
,
275 IN OUT PVOID ComponentInformation
,
276 IN ULONG ComponentInformationLength
);
278 typedef struct _QUERY_INTERFACE
{
279 CONST GUID
*InterfaceType
;
282 PINTERFACE Interface
;
283 PVOID InterfaceSpecificData
;
284 } QUERY_INTERFACE
, *PQUERY_INTERFACE
;
287 (DDKAPI
*PVIDEO_HW_QUERY_INTERFACE
)(
288 IN PVOID HwDeviceExtension
,
289 IN OUT PQUERY_INTERFACE QueryInterface
);
292 (DDKAPI
*PMINIPORT_GET_REGISTRY_ROUTINE
)(
293 IN PVOID HwDeviceExtension
,
295 IN OUT PWSTR ValueName
,
296 IN OUT PVOID ValueData
,
297 IN ULONG ValueLength
);
300 (DDKAPI
*PVIDEO_HW_RESET_HW
)(
301 IN PVOID HwDeviceExtension
,
306 (DDKAPI
*PVIDEO_HW_POWER_SET
)(
307 IN PVOID HwDeviceExtension
,
309 IN PVIDEO_POWER_MANAGEMENT VideoPowerControl
);
311 typedef struct _STATUS_BLOCK
{
312 _ANONYMOUS_UNION
union {
316 ULONG_PTR Information
;
317 } STATUS_BLOCK
, *PSTATUS_BLOCK
;
319 typedef struct _VIDEO_REQUEST_PACKET
{
321 PSTATUS_BLOCK StatusBlock
;
323 ULONG InputBufferLength
;
325 ULONG OutputBufferLength
;
326 } VIDEO_REQUEST_PACKET
, *PVIDEO_REQUEST_PACKET
;
329 (DDKAPI
*PVIDEO_HW_START_IO
)(
330 IN PVOID HwDeviceExtension
,
331 IN PVIDEO_REQUEST_PACKET RequestPacket
);
334 (DDKAPI
*PMINIPORT_SYNCHRONIZE_ROUTINE
)(
338 (DDKAPI
*PVIDEO_HW_TIMER
)(
339 IN PVOID HwDeviceExtension
);
342 (DDKAPI
*PMINIPORT_DPC_ROUTINE
)(
343 IN PVOID HwDeviceExtension
,
347 (DDKAPI
*PDRIVER_IO_PORT_UCHAR
)(
348 IN ULONG_PTR Context
,
354 (DDKAPI
*PDRIVER_IO_PORT_UCHAR_STRING
)(
355 IN ULONG_PTR Context
,
359 IN ULONG DataLength
);
362 (DDKAPI
*PDRIVER_IO_PORT_ULONG
)(
363 IN ULONG_PTR Context
,
369 (DDKAPI
*PDRIVER_IO_PORT_ULONG_STRING
)(
370 IN ULONG_PTR Context
,
374 IN ULONG DataLength
);
377 (DDKAPI
*PDRIVER_IO_PORT_USHORT
)(
378 IN ULONG_PTR Context
,
384 (DDKAPI
*PDRIVER_IO_PORT_USHORT_STRING
)(
385 IN ULONG_PTR Context
,
389 IN ULONG DataLength
);
393 typedef struct _INT10_BIOS_ARGUMENTS
{
403 } INT10_BIOS_ARGUMENTS
, *PINT10_BIOS_ARGUMENTS
;
405 typedef struct _VIDEO_CHILD_STATE
{
408 } VIDEO_CHILD_STATE
, *PVIDEO_CHILD_STATE
;
410 typedef struct _VIDEO_CHILD_STATE_CONFIGURATION
{
412 VIDEO_CHILD_STATE ChildStateArray
[ANYSIZE_ARRAY
];
413 } VIDEO_CHILD_STATE_CONFIGURATION
, *PVIDEO_CHILD_STATE_CONFIGURATION
;
415 typedef struct _VIDEO_HW_INITIALIZATION_DATA
{
416 ULONG HwInitDataSize
;
417 INTERFACE_TYPE AdapterInterfaceType
;
418 PVIDEO_HW_FIND_ADAPTER HwFindAdapter
;
419 PVIDEO_HW_INITIALIZE HwInitialize
;
420 PVIDEO_HW_INTERRUPT HwInterrupt
;
421 PVIDEO_HW_START_IO HwStartIO
;
422 ULONG HwDeviceExtensionSize
;
423 ULONG StartingDeviceNumber
;
424 PVIDEO_HW_RESET_HW HwResetHw
;
425 PVIDEO_HW_TIMER HwTimer
;
426 PVIDEO_HW_START_DMA HwStartDma
;
427 PVIDEO_HW_POWER_SET HwSetPowerState
;
428 PVIDEO_HW_POWER_GET HwGetPowerState
;
429 PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor
;
430 PVIDEO_HW_QUERY_INTERFACE HwQueryInterface
;
431 ULONG HwChildDeviceExtensionSize
;
432 PVIDEO_ACCESS_RANGE HwLegacyResourceList
;
433 ULONG HwLegacyResourceCount
;
434 PVIDEO_HW_LEGACYRESOURCES HwGetLegacyResources
;
435 BOOLEAN AllowEarlyEnumeration
;
437 } VIDEO_HW_INITIALIZATION_DATA
, *PVIDEO_HW_INITIALIZATION_DATA
;
439 /* VIDEO_PORT_AGP_INTERFACE.Version contants */
440 #define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1
442 typedef struct _VIDEO_PORT_AGP_INTERFACE
{
446 PINTERFACE_REFERENCE InterfaceReference
;
447 PINTERFACE_DEREFERENCE InterfaceDereference
;
448 PAGP_RESERVE_PHYSICAL AgpReservePhysical
;
449 PAGP_RELEASE_PHYSICAL AgpReleasePhysical
;
450 PAGP_COMMIT_PHYSICAL AgpCommitPhysical
;
451 PAGP_FREE_PHYSICAL AgpFreePhysical
;
452 PAGP_RESERVE_VIRTUAL AgpReserveVirtual
;
453 PAGP_RELEASE_VIRTUAL AgpReleaseVirtual
;
454 PAGP_COMMIT_VIRTUAL AgpCommitVirtual
;
455 PAGP_FREE_VIRTUAL AgpFreeVirtual
;
456 ULONGLONG AgpAllocationLimit
;
457 } VIDEO_PORT_AGP_INTERFACE
, *PVIDEO_PORT_AGP_INTERFACE
;
459 /* VIDEO_PORT_AGP_INTERFACE_2.Version constants */
460 #define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2
462 typedef struct _VIDEO_PORT_AGP_INTERFACE_2
{
466 OUT PINTERFACE_REFERENCE InterfaceReference
;
467 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
468 OUT PAGP_RESERVE_PHYSICAL AgpReservePhysical
;
469 OUT PAGP_RELEASE_PHYSICAL AgpReleasePhysical
;
470 OUT PAGP_COMMIT_PHYSICAL AgpCommitPhysical
;
471 OUT PAGP_FREE_PHYSICAL AgpFreePhysical
;
472 OUT PAGP_RESERVE_VIRTUAL AgpReserveVirtual
;
473 OUT PAGP_RELEASE_VIRTUAL AgpReleaseVirtual
;
474 OUT PAGP_COMMIT_VIRTUAL AgpCommitVirtual
;
475 OUT PAGP_FREE_VIRTUAL AgpFreeVirtual
;
476 OUT ULONGLONG AgpAllocationLimit
;
477 OUT PAGP_SET_RATE AgpSetRate
;
478 } VIDEO_PORT_AGP_INTERFACE_2
, *PVIDEO_PORT_AGP_INTERFACE_2
;
480 #define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1
483 (DDKAPI
*PVIDEO_WRITE_CLOCK_LINE
)(
484 PVOID HwDeviceExtension
,
488 (DDKAPI
*PVIDEO_WRITE_DATA_LINE
)(
489 PVOID HwDeviceExtension
,
493 (DDKAPI
*PVIDEO_READ_CLOCK_LINE
)(
494 PVOID HwDeviceExtension
);
497 (DDKAPI
*PVIDEO_READ_DATA_LINE
)(
498 PVOID HwDeviceExtension
);
500 typedef struct _I2C_CALLBACKS
502 IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine
;
503 IN PVIDEO_WRITE_DATA_LINE WriteDataLine
;
504 IN PVIDEO_READ_CLOCK_LINE ReadClockLine
;
505 IN PVIDEO_READ_DATA_LINE ReadDataLine
;
506 } I2C_CALLBACKS
, *PI2C_CALLBACKS
;
509 (DDKAPI
*PI2C_START
)(
510 IN PVOID HwDeviceExtension
,
511 IN PI2C_CALLBACKS I2CCallbacks
);
515 IN PVOID HwDeviceExtension
,
516 IN PI2C_CALLBACKS I2CCallbacks
);
519 (DDKAPI
*PI2C_WRITE
)(
520 IN PVOID HwDeviceExtension
,
521 IN PI2C_CALLBACKS I2CCallbacks
,
527 IN PVOID HwDeviceExtension
,
528 IN PI2C_CALLBACKS I2CCallbacks
,
532 typedef struct _VIDEO_PORT_I2C_INTERFACE
{
536 PINTERFACE_REFERENCE InterfaceReference
;
537 PINTERFACE_DEREFERENCE InterfaceDereference
;
542 } VIDEO_PORT_I2C_INTERFACE
, *PVIDEO_PORT_I2C_INTERFACE
;
544 /* VIDEO_PORT_INT10_INTERFACE.Version constants */
545 #define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1
548 (DDKAPI
*PINT10_ALLOCATE_BUFFER
)(
552 IN OUT PULONG Length
);
555 (DDKAPI
*PINT10_CALL_BIOS
)(
557 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments
);
560 (DDKAPI
*PINT10_FREE_BUFFER
)(
566 (DDKAPI
*PINT10_READ_MEMORY
)(
574 (DDKAPI
*PINT10_WRITE_MEMORY
)(
581 typedef struct _VIDEO_PORT_INT10_INTERFACE
{
585 OUT PINTERFACE_REFERENCE InterfaceReference
;
586 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
587 OUT PINT10_ALLOCATE_BUFFER Int10AllocateBuffer
;
588 OUT PINT10_FREE_BUFFER Int10FreeBuffer
;
589 OUT PINT10_READ_MEMORY Int10ReadMemory
;
590 OUT PINT10_WRITE_MEMORY Int10WriteMemory
;
591 OUT PINT10_CALL_BIOS Int10CallBios
;
592 } VIDEO_PORT_INT10_INTERFACE
, *PVIDEO_PORT_INT10_INTERFACE
;
594 /* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */
595 #define VIDEO_MEMORY_SPACE_MEMORY 0x00
596 #define VIDEO_MEMORY_SPACE_IO 0x01
597 #define VIDEO_MEMORY_SPACE_USER_MODE 0x02
598 #define VIDEO_MEMORY_SPACE_DENSE 0x04
599 #define VIDEO_MEMORY_SPACE_P6CACHE 0x08
601 typedef struct _VIDEO_X86_BIOS_ARGUMENTS
{
609 } VIDEO_X86_BIOS_ARGUMENTS
, *PVIDEO_X86_BIOS_ARGUMENTS
;
611 typedef struct _VP_DEVICE_DESCRIPTION
{
612 BOOLEAN ScatterGather
;
613 BOOLEAN Dma32BitAddresses
;
614 BOOLEAN Dma64BitAddresses
;
616 } VP_DEVICE_DESCRIPTION
, *PVP_DEVICE_DESCRIPTION
;
618 typedef struct _VPOSVERSIONINFO
{
620 OUT ULONG MajorVersion
;
621 OUT ULONG MinorVersion
;
622 OUT ULONG BuildNumber
;
623 OUT USHORT ServicePackMajor
;
624 OUT USHORT ServicePackMinor
;
625 } VPOSVERSIONINFO
, *PVPOSVERSIONINFO
;
629 /* Video port functions for miniports */
635 IN ULONG DebugPrintLevel
,
636 IN PCHAR DebugMessage
,
642 VideoPortAcquireDeviceLock(
643 IN PVOID HwDeviceExtension
);
648 VideoPortAcquireSpinLock(
649 IN PVOID HwDeviceExtension
,
650 IN PSPIN_LOCK SpinLock
,
656 VideoPortAcquireSpinLockAtDpcLevel(
657 IN PVOID HwDeviceExtension
,
658 IN PSPIN_LOCK SpinLock
);
663 VideoPortAllocateBuffer(
664 IN PVOID HwDeviceExtension
,
671 VideoPortAllocateCommonBuffer(
672 IN PVOID HwDeviceExtension
,
673 IN PVP_DMA_ADAPTER VpDmaAdapter
,
674 IN ULONG DesiredLength
,
675 OUT PPHYSICAL_ADDRESS LogicalAddress
,
676 IN BOOLEAN CacheEnabled
,
682 VideoPortAllocateContiguousMemory(
683 IN PVOID HwDeviceExtension
,
684 IN ULONG NumberOfBytes
,
685 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
687 /* VideoPortAllocatePool.PoolType constants */
688 typedef enum _VP_POOL_TYPE
{
691 VpNonPagedPoolCacheAligned
= 4,
692 VpPagedPoolCacheAligned
693 } VP_POOL_TYPE
, *PVP_POOL_TYPE
;
698 VideoPortAllocatePool(
699 IN PVOID HwDeviceExtension
,
700 IN VP_POOL_TYPE PoolType
,
701 IN SIZE_T NumberOfBytes
,
707 VideoPortAssociateEventsWithDmaHandle(
708 IN PVOID HwDeviceExtension
,
709 IN OUT PVIDEO_REQUEST_PACKET pVrp
,
710 IN PVOID MappedUserEvent
,
711 IN PVOID DisplayDriverEvent
);
713 /* VideoPortCheckForDeviceExistence.Flags constants */
714 #define CDE_USE_SUBSYSTEM_IDS 0x00000001
715 #define CDE_USE_REVISION 0x00000002
720 VideoPortCheckForDeviceExistence(
721 IN PVOID HwDeviceExtension
,
725 IN USHORT SubVendorId
,
726 IN USHORT SubSystemId
,
733 IN PVOID HwDeviceExtension
,
739 VideoPortCompareMemory(
747 VideoPortCompleteDma(
748 IN PVOID HwDeviceExtension
,
749 IN PVP_DMA_ADAPTER VpDmaAdapter
,
750 IN PVP_SCATTER_GATHER_LIST VpScatterGather
,
751 IN BOOLEAN WriteToDevice
);
756 VideoPortCreateEvent(
757 IN PVOID HwDeviceExtension
,
760 OUT PEVENT
*ppEvent
);
765 VideoPortCreateSecondaryDisplay(
766 IN PVOID HwDeviceExtension
,
767 IN OUT PVOID
*SecondaryDeviceExtension
,
773 VideoPortCreateSpinLock(
774 IN PVOID HwDeviceExtension
,
775 OUT PSPIN_LOCK
*SpinLock
);
777 typedef struct _DDC_CONTROL
{
779 IN I2C_CALLBACKS I2CCallbacks
;
780 IN UCHAR EdidSegment
;
781 } DDC_CONTROL
, *PDDC_CONTROL
;
786 VideoPortDDCMonitorHelper(
787 IN PVOID HwDeviceExtension
,
789 IN OUT PUCHAR EdidBuffer
,
790 IN ULONG EdidBufferSize
);
796 IN VIDEO_DEBUG_LEVEL DebugPrintLevel
,
797 IN PCHAR DebugMessage
,
803 VideoPortDeleteEvent(
804 IN PVOID HwDeviceExtension
,
810 VideoPortDeleteSpinLock(
811 IN PVOID HwDeviceExtension
,
812 IN PSPIN_LOCK SpinLock
);
817 VideoPortDisableInterrupt(
818 IN PVOID HwDeviceExtension
);
824 IN PVOID HwDeviceExtension
,
826 IN DMA_FLAGS DmaFlags
);
831 VideoPortEnableInterrupt(
832 IN PVOID HwDeviceExtension
);
837 VideoPortEnumerateChildren(
838 IN PVOID HwDeviceExtension
,
844 VideoPortFreeCommonBuffer(
845 IN PVOID HwDeviceExtension
,
847 IN PVOID VirtualAddress
,
848 IN PHYSICAL_ADDRESS LogicalAddress
,
849 IN BOOLEAN CacheEnabled
);
854 VideoPortFreeDeviceBase(
855 IN PVOID HwDeviceExtension
,
856 IN PVOID MappedAddress
);
862 IN PVOID HwDeviceExtension
,
868 VideoPortGetAccessRanges(
869 IN PVOID HwDeviceExtension
,
870 IN ULONG NumRequestedResources
,
871 IN PIO_RESOURCE_DESCRIPTOR RequestedResources OPTIONAL
,
872 IN ULONG NumAccessRanges
,
873 OUT PVIDEO_ACCESS_RANGE AccessRanges
,
881 VideoPortGetAssociatedDeviceExtension(
882 IN PVOID DeviceObject
);
887 VideoPortGetAssociatedDeviceID(
888 IN PVOID DeviceObject
);
894 IN PVOID HwDeviceExtension
,
895 IN BUS_DATA_TYPE BusDataType
,
904 VideoPortGetBytesUsed(
905 IN PVOID HwDeviceExtension
,
911 VideoPortGetCommonBuffer(
912 IN PVOID HwDeviceExtension
,
913 IN ULONG DesiredLength
,
915 OUT PPHYSICAL_ADDRESS LogicalAddress
,
916 OUT PULONG pActualLength
,
917 IN BOOLEAN CacheEnabled
);
922 VideoPortGetCurrentIrql(
928 VideoPortGetDeviceBase(
929 IN PVOID HwDeviceExtension
,
930 IN PHYSICAL_ADDRESS IoAddress
,
931 IN ULONG NumberOfUchars
,
937 VideoPortGetDeviceData(
938 IN PVOID HwDeviceExtension
,
939 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType
,
940 IN PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine
,
946 VideoPortGetDmaAdapter(
947 IN PVOID HwDeviceExtension
,
948 IN PVP_DEVICE_DESCRIPTION VpDeviceDescription
);
953 VideoPortGetDmaContext(
954 IN PVOID HwDeviceExtension
,
961 IN PVOID HwDeviceExtension
,
967 VideoPortGetRegistryParameters(
968 IN PVOID HwDeviceExtension
,
969 IN PWSTR ParameterName
,
970 IN UCHAR IsParameterFileName
,
971 IN PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine
,
977 VideoPortGetRomImage(
978 IN PVOID HwDeviceExtension
,
987 IN PVOID HwDeviceExtension
,
988 IN OUT PVPOSVERSIONINFO pVpOsVersionInfo
);
993 VideoPortGetVgaStatus(
994 IN PVOID HwDeviceExtension
,
995 OUT PULONG VgaStatus
);
1000 VideoPortInitialize(
1003 IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData
,
1004 IN PVOID HwContext
);
1010 IN PVOID HwDeviceExtension
,
1011 IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments
);
1016 VideoPortInterlockedDecrement(
1022 VideoPortInterlockedExchange(
1023 IN OUT PLONG Target
,
1029 VideoPortInterlockedIncrement(
1032 typedef enum _VP_LOCK_OPERATION
{
1036 } VP_LOCK_OPERATION
;
1041 VideoPortLockBuffer(
1042 IN PVOID HwDeviceExtension
,
1043 IN PVOID BaseAddress
,
1045 IN VP_LOCK_OPERATION Operation
);
1051 IN PVOID HwDeviceExtension
,
1052 IN OUT PVIDEO_REQUEST_PACKET pVrp
,
1053 IN OUT PEVENT pUEvent
,
1054 IN PEVENT pDisplayEvent
,
1055 IN DMA_FLAGS DmaFlags
);
1061 IN PVOID HwDeviceExtension
,
1062 IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL
,
1063 IN VP_STATUS ErrorCode
,
1069 VideoPortMapBankedMemory(
1070 IN PVOID HwDeviceExtension
,
1071 IN PHYSICAL_ADDRESS PhysicalAddress
,
1072 IN OUT PULONG Length
,
1074 PVOID
*VirtualAddress
,
1076 UCHAR ReadWriteBank
,
1077 PBANKED_SECTION_ROUTINE BankRoutine
,
1083 VideoPortMapDmaMemory(
1084 IN PVOID HwDeviceExtension
,
1085 IN PVIDEO_REQUEST_PACKET pVrp
,
1086 IN PHYSICAL_ADDRESS BoardAddress
,
1088 IN PULONG InIoSpace
,
1089 IN PVOID MappedUserEvent
,
1090 IN PVOID DisplayDriverEvent
,
1091 IN OUT PVOID
*VirtualAddress
);
1097 IN PVOID HwDeviceExtension
,
1098 IN PHYSICAL_ADDRESS PhysicalAddress
,
1099 IN OUT PULONG Length
,
1100 IN PULONG InIoSpace
,
1101 IN OUT PVOID
*VirtualAddress
);
1106 VideoPortMoveMemory(
1107 IN PVOID Destination
,
1114 VideoPortPutDmaAdapter(
1115 IN PVOID HwDeviceExtension
,
1116 IN PVP_DMA_ADAPTER VpDmaAdapter
);
1121 VideoPortQueryPerformanceCounter(
1122 IN PVOID HwDeviceExtension
,
1123 OUT PLONGLONG PerformanceFrequency OPTIONAL
);
1125 /* VideoPortQueryServices.ServicesType constants */
1126 typedef enum _VIDEO_PORT_SERVICES
{
1127 VideoPortServicesAGP
= 1,
1128 VideoPortServicesI2C
,
1129 VideoPortServicesHeadless
,
1130 VideoPortServicesInt10
1131 } VIDEO_PORT_SERVICES
;
1136 VideoPortQueryServices(
1137 IN PVOID HwDeviceExtension
,
1138 IN VIDEO_PORT_SERVICES ServicesType
,
1139 IN OUT PINTERFACE Interface
);
1144 VideoPortQuerySystemTime(
1145 OUT PLARGE_INTEGER CurrentTime
);
1151 IN PVOID HwDeviceExtension
,
1152 IN PMINIPORT_DPC_ROUTINE CallbackRoutine
,
1158 VideoPortReadPortBufferUchar(
1166 VideoPortReadPortBufferUlong(
1174 VideoPortReadPortBufferUshort(
1182 VideoPortReadPortUchar(
1188 VideoPortReadPortUlong(
1194 VideoPortReadPortUshort(
1200 VideoPortReadRegisterBufferUchar(
1208 VideoPortReadRegisterBufferUlong(
1216 VideoPortReadRegisterBufferUshort(
1217 IN PUSHORT Register
,
1224 VideoPortReadRegisterUchar(
1225 IN PUCHAR Register
);
1230 VideoPortReadRegisterUlong(
1231 IN PULONG Register
);
1236 VideoPortReadRegisterUshort(
1237 IN PUSHORT Register
);
1242 VideoPortReadStateEvent(
1243 IN PVOID HwDeviceExtension
,
1249 VideoPortReleaseBuffer(
1250 IN PVOID HwDeviceExtension
,
1256 VideoPortReleaseCommonBuffer(
1257 IN PVOID HwDeviceExtension
,
1258 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1260 IN PHYSICAL_ADDRESS LogicalAddress
,
1261 IN PVOID VirtualAddress
,
1262 IN BOOLEAN CacheEnabled
);
1267 VideoPortReleaseDeviceLock(
1268 IN PVOID HwDeviceExtension
);
1273 VideoPortReleaseSpinLock(
1274 IN PVOID HwDeviceExtension
,
1275 IN PSPIN_LOCK SpinLock
,
1281 VideoPortReleaseSpinLockFromDpcLevel(
1282 IN PVOID HwDeviceExtension
,
1283 IN PSPIN_LOCK SpinLock
);
1289 PVOID HwDeviceExtension
,
1297 VideoPortSetBusData(
1298 IN PVOID HwDeviceExtension
,
1299 IN BUS_DATA_TYPE BusDataType
,
1300 IN ULONG SlotNumber
,
1308 VideoPortSetBytesUsed(
1309 IN PVOID HwDeviceExtension
,
1311 IN ULONG BytesUsed
);
1316 VideoPortSetDmaContext(
1317 IN PVOID HwDeviceExtension
,
1319 IN PVOID InstanceContext
);
1325 IN PVOID HwDeviceExtension
,
1331 VideoPortSetRegistryParameters(
1332 IN PVOID HwDeviceExtension
,
1335 IN ULONG ValueLength
);
1340 VideoPortSetTrappedEmulatorPorts(
1341 IN PVOID HwDeviceExtension
,
1342 IN ULONG NumAccessRanges
,
1343 IN PVIDEO_ACCESS_RANGE AccessRange
);
1348 VideoPortSignalDmaComplete(
1349 IN PVOID HwDeviceExtension
,
1350 IN PVOID pDmaHandle
);
1355 VideoPortStallExecution(
1356 IN ULONG Microseconds
);
1362 IN PVOID HwDeviceExtension
,
1363 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1366 IN OUT PULONG pLength
,
1367 IN PEXECUTE_DMA ExecuteDmaRoutine
,
1369 IN BOOLEAN WriteToDevice
);
1374 VideoPortStartTimer(
1375 IN PVOID HwDeviceExtension
);
1381 IN PVOID HwDeviceExtension
);
1383 /* VideoPortSynchronizeExecution.Priority constants */
1384 typedef enum VIDEO_SYNCHRONIZE_PRIORITY
{
1388 } VIDEO_SYNCHRONIZE_PRIORITY
, *PVIDEO_SYNCHRONIZE_PRIORITY
;
1393 VideoPortSynchronizeExecution(
1394 IN PVOID HwDeviceExtension
,
1395 IN VIDEO_SYNCHRONIZE_PRIORITY Priority
,
1396 IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine
,
1402 VideoPortUnLockBuffer(
1403 IN PVOID HwDeviceExtension
,
1409 VideoPortUnlockPages(
1410 IN PVOID hwDeviceExtension
,
1416 VideoPortUnmapDmaMemory(
1417 IN PVOID HwDeviceExtension
,
1418 IN PVOID VirtualAddress
,
1419 IN HANDLE ProcessHandle
,
1420 IN PDMA BoardMemoryHandle
);
1425 VideoPortUnmapMemory(
1426 IN PVOID HwDeviceExtension
,
1427 IN OUT PVOID VirtualAddress
,
1428 IN HANDLE ProcessHandle
);
1433 VideoPortVerifyAccessRanges(
1434 IN PVOID HwDeviceExtension
,
1435 IN ULONG NumAccessRanges
,
1436 IN PVIDEO_ACCESS_RANGE AccessRanges
);
1441 VideoPortWaitForSingleObject(
1442 IN PVOID HwDeviceExtension
,
1444 IN PLARGE_INTEGER Timeout OPTIONAL
);
1449 VideoPortWritePortBufferUchar(
1457 VideoPortWritePortBufferUlong(
1465 VideoPortWritePortBufferUshort(
1473 VideoPortWritePortUchar(
1480 VideoPortWritePortUlong(
1487 VideoPortWritePortUshort(
1494 VideoPortWriteRegisterBufferUchar(
1502 VideoPortWriteRegisterBufferUlong(
1510 VideoPortWriteRegisterBufferUshort(
1511 IN PUSHORT Register
,
1518 VideoPortWriteRegisterUchar(
1525 VideoPortWriteRegisterUlong(
1532 VideoPortWriteRegisterUshort(
1533 IN PUSHORT Register
,
1539 VideoPortZeroDeviceMemory(
1540 IN PVOID Destination
,
1546 VideoPortZeroMemory(
1547 IN PVOID Destination
,
1551 #define VideoDebugPrint(x) VideoPortDebugPrint x
1553 #define VideoDebugPrint(x)
1560 #endif /* defined __WINDDI_H */
1562 #endif /* __VIDEO_H */