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
39 #define VIDEOPORT_API VPAPI
48 typedef LONG VP_STATUS
;
49 typedef VP_STATUS
*PVP_STATUS
;
50 typedef struct __DMA_PARAMETERS
* PDMA
;
51 typedef struct _VIDEO_PORT_EVENT
*PEVENT
;
52 typedef struct _VIDEO_PORT_SPIN_LOCK
*PSPIN_LOCK
;
53 typedef struct __VP_DMA_ADAPTER
*PVP_DMA_ADAPTER
;
55 #define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF
57 #define EVENT_TYPE_MASK 1
58 #define SYNCHRONIZATION_EVENT 0
59 #define NOTIFICATION_EVENT 1
61 #define INITIAL_EVENT_STATE_MASK 2
62 #define INITIAL_EVENT_NOT_SIGNALED 0
63 #define INITIAL_EVENT_SIGNALED 2
65 typedef enum VIDEO_DEBUG_LEVEL
{
70 } VIDEO_DEBUG_LEVEL
, *PVIDEO_DEBUG_LEVEL
;
73 VideoPortUnlockAfterDma
= 1,
74 VideoPortKeepPagesLocked
,
78 typedef enum _HW_DMA_RETURN
{
81 } HW_DMA_RETURN
, *PHW_DMA_RETURN
;
84 (*PVIDEO_HW_START_DMA
)(
85 PVOID HwDeviceExtension
,
91 #define PAGED_CODE() \
92 if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) \
94 VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \
104 typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA
{
105 INTERFACE_TYPE InterfaceType
;
117 } VIDEO_HARDWARE_CONFIGURATION_DATA
, *PVIDEO_HARDWARE_CONFIGURATION_DATA
;
119 #define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO 0x42
120 #define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA 0x28
121 #define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA 0x50
123 typedef enum _VIDEO_DEVICE_DATA_TYPE
{
129 } VIDEO_DEVICE_DATA_TYPE
, *PVIDEO_DEVICE_DATA_TYPE
;
133 /* Video miniport driver functions */
135 typedef struct _VP_SCATTER_GATHER_ELEMENT
{
136 PHYSICAL_ADDRESS Address
;
139 } VP_SCATTER_GATHER_ELEMENT
, *PVP_SCATTER_GATHER_ELEMENT
;
141 typedef struct _VP_SCATTER_GATHER_LIST
{
142 ULONG NumberOfElements
;
144 VP_SCATTER_GATHER_ELEMENT Elements
[0];
145 } VP_SCATTER_GATHER_LIST
, *PVP_SCATTER_GATHER_LIST
;
149 IN PVOID HwDeviceExtension
,
150 IN PVP_DMA_ADAPTER VpDmaAdapter
,
151 IN PVP_SCATTER_GATHER_LIST SGList
,
155 (*PVIDEO_PORT_GET_PROC_ADDRESS
)(
156 IN PVOID HwDeviceExtension
,
157 IN PUCHAR FunctionName
);
159 typedef struct _VIDEO_PORT_CONFIG_INFO
{
161 ULONG SystemIoBusNumber
;
162 INTERFACE_TYPE AdapterInterfaceType
;
163 ULONG BusInterruptLevel
;
164 ULONG BusInterruptVector
;
165 KINTERRUPT_MODE InterruptMode
;
166 ULONG NumEmulatorAccessEntries
;
167 PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries
;
168 ULONG_PTR EmulatorAccessEntriesContext
;
169 PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress
;
170 ULONG VdmPhysicalVideoMemoryLength
;
171 ULONG HardwareStateSize
;
175 UCHAR InterruptShareable
;
180 BOOLEAN NeedPhysicalAddresses
;
182 ULONG MaximumTransferLength
;
183 ULONG NumberOfPhysicalBreaks
;
184 BOOLEAN ScatterGather
;
185 ULONG MaximumScatterGatherChunkSize
;
186 PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress
;
187 PWSTR DriverRegistryPath
;
188 ULONGLONG SystemMemorySize
;
189 } VIDEO_PORT_CONFIG_INFO
, *PVIDEO_PORT_CONFIG_INFO
;
191 typedef VP_STATUS DDKAPI
192 (*PVIDEO_HW_FIND_ADAPTER
)(
193 IN PVOID HwDeviceExtension
,
195 IN PWSTR ArgumentString
,
196 IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo
,
199 typedef VP_STATUS DDKAPI
200 (*PVIDEO_HW_POWER_GET
)(
201 IN PVOID HwDeviceExtension
,
203 IN OUT PVIDEO_POWER_MANAGEMENT VideoPowerControl
);
205 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */
206 #define VIDEO_ENUM_MORE_DEVICES ERROR_CONTINUE
207 #define VIDEO_ENUM_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES
208 #define VIDEO_ENUM_INVALID_DEVICE ERROR_INVALID_NAME
210 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */
211 typedef struct _VIDEO_CHILD_ENUM_INFO
{
213 ULONG ChildDescriptorSize
;
216 PVOID ChildHwDeviceExtension
;
217 } VIDEO_CHILD_ENUM_INFO
, *PVIDEO_CHILD_ENUM_INFO
;
219 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */
220 typedef enum _VIDEO_CHILD_TYPE
{
225 } VIDEO_CHILD_TYPE
, *PVIDEO_CHILD_TYPE
;
228 (DDKAPI
*PVIDEO_HW_GET_CHILD_DESCRIPTOR
)(
229 IN PVOID HwDeviceExtension
,
230 IN PVIDEO_CHILD_ENUM_INFO ChildEnumInfo
,
231 OUT PVIDEO_CHILD_TYPE VideoChildType
,
232 OUT PUCHAR pChildDescriptor
,
237 (DDKAPI
*PVIDEO_HW_INITIALIZE
)(
238 IN PVOID HwDeviceExtension
);
241 (DDKAPI
*PVIDEO_HW_INTERRUPT
)(
242 IN PVOID HwDeviceExtension
);
244 /* VIDEO_ACCESS_RANGE.RangePassive */
245 #define VIDEO_RANGE_PASSIVE_DECODE 1
246 #define VIDEO_RANGE_10_BIT_DECODE 2
248 #ifndef VIDEO_ACCESS_RANGE_DEFINED /* also in miniport.h */
249 #define VIDEO_ACCESS_RANGE_DEFINED
250 typedef struct _VIDEO_ACCESS_RANGE
{
251 PHYSICAL_ADDRESS RangeStart
;
253 UCHAR RangeInIoSpace
;
255 UCHAR RangeShareable
;
257 } VIDEO_ACCESS_RANGE
, *PVIDEO_ACCESS_RANGE
;
261 (*PVIDEO_HW_LEGACYRESOURCES
)(
264 IN OUT PVIDEO_ACCESS_RANGE
*LegacyResourceList
,
265 IN OUT PULONG LegacyResourceCount
);
267 typedef VP_STATUS DDKAPI
268 (*PMINIPORT_QUERY_DEVICE_ROUTINE
)(
269 IN PVOID HwDeviceExtension
,
271 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType
,
273 IN ULONG IdentifierLength
,
274 IN PVOID ConfigurationData
,
275 IN ULONG ConfigurationDataLength
,
276 IN OUT PVOID ComponentInformation
,
277 IN ULONG ComponentInformationLength
);
279 typedef struct _QUERY_INTERFACE
{
280 CONST GUID
*InterfaceType
;
283 PINTERFACE Interface
;
284 PVOID InterfaceSpecificData
;
285 } QUERY_INTERFACE
, *PQUERY_INTERFACE
;
288 (DDKAPI
*PVIDEO_HW_QUERY_INTERFACE
)(
289 IN PVOID HwDeviceExtension
,
290 IN OUT PQUERY_INTERFACE QueryInterface
);
293 (DDKAPI
*PMINIPORT_GET_REGISTRY_ROUTINE
)(
294 IN PVOID HwDeviceExtension
,
296 IN OUT PWSTR ValueName
,
297 IN OUT PVOID ValueData
,
298 IN ULONG ValueLength
);
301 (DDKAPI
*PVIDEO_HW_RESET_HW
)(
302 IN PVOID HwDeviceExtension
,
307 (DDKAPI
*PVIDEO_HW_POWER_SET
)(
308 IN PVOID HwDeviceExtension
,
310 IN PVIDEO_POWER_MANAGEMENT VideoPowerControl
);
312 typedef struct _STATUS_BLOCK
{
313 _ANONYMOUS_UNION
union {
317 ULONG_PTR Information
;
318 } STATUS_BLOCK
, *PSTATUS_BLOCK
;
320 typedef struct _VIDEO_REQUEST_PACKET
{
322 PSTATUS_BLOCK StatusBlock
;
324 ULONG InputBufferLength
;
326 ULONG OutputBufferLength
;
327 } VIDEO_REQUEST_PACKET
, *PVIDEO_REQUEST_PACKET
;
330 (DDKAPI
*PVIDEO_HW_START_IO
)(
331 IN PVOID HwDeviceExtension
,
332 IN PVIDEO_REQUEST_PACKET RequestPacket
);
335 (DDKAPI
*PMINIPORT_SYNCHRONIZE_ROUTINE
)(
339 (DDKAPI
*PVIDEO_HW_TIMER
)(
340 IN PVOID HwDeviceExtension
);
343 (DDKAPI
*PMINIPORT_DPC_ROUTINE
)(
344 IN PVOID HwDeviceExtension
,
348 (DDKAPI
*PDRIVER_IO_PORT_UCHAR
)(
349 IN ULONG_PTR Context
,
355 (DDKAPI
*PDRIVER_IO_PORT_UCHAR_STRING
)(
356 IN ULONG_PTR Context
,
360 IN ULONG DataLength
);
363 (DDKAPI
*PDRIVER_IO_PORT_ULONG
)(
364 IN ULONG_PTR Context
,
370 (DDKAPI
*PDRIVER_IO_PORT_ULONG_STRING
)(
371 IN ULONG_PTR Context
,
375 IN ULONG DataLength
);
378 (DDKAPI
*PDRIVER_IO_PORT_USHORT
)(
379 IN ULONG_PTR Context
,
385 (DDKAPI
*PDRIVER_IO_PORT_USHORT_STRING
)(
386 IN ULONG_PTR Context
,
390 IN ULONG DataLength
);
394 typedef struct _INT10_BIOS_ARGUMENTS
{
404 } INT10_BIOS_ARGUMENTS
, *PINT10_BIOS_ARGUMENTS
;
406 typedef struct _VIDEO_CHILD_STATE
{
409 } VIDEO_CHILD_STATE
, *PVIDEO_CHILD_STATE
;
411 typedef struct _VIDEO_CHILD_STATE_CONFIGURATION
{
413 VIDEO_CHILD_STATE ChildStateArray
[ANYSIZE_ARRAY
];
414 } VIDEO_CHILD_STATE_CONFIGURATION
, *PVIDEO_CHILD_STATE_CONFIGURATION
;
416 typedef struct _VIDEO_HW_INITIALIZATION_DATA
{
417 ULONG HwInitDataSize
;
418 INTERFACE_TYPE AdapterInterfaceType
;
419 PVIDEO_HW_FIND_ADAPTER HwFindAdapter
;
420 PVIDEO_HW_INITIALIZE HwInitialize
;
421 PVIDEO_HW_INTERRUPT HwInterrupt
;
422 PVIDEO_HW_START_IO HwStartIO
;
423 ULONG HwDeviceExtensionSize
;
424 ULONG StartingDeviceNumber
;
425 PVIDEO_HW_RESET_HW HwResetHw
;
426 PVIDEO_HW_TIMER HwTimer
;
427 PVIDEO_HW_START_DMA HwStartDma
;
428 PVIDEO_HW_POWER_SET HwSetPowerState
;
429 PVIDEO_HW_POWER_GET HwGetPowerState
;
430 PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor
;
431 PVIDEO_HW_QUERY_INTERFACE HwQueryInterface
;
432 ULONG HwChildDeviceExtensionSize
;
433 PVIDEO_ACCESS_RANGE HwLegacyResourceList
;
434 ULONG HwLegacyResourceCount
;
435 PVIDEO_HW_LEGACYRESOURCES HwGetLegacyResources
;
436 BOOLEAN AllowEarlyEnumeration
;
438 } VIDEO_HW_INITIALIZATION_DATA
, *PVIDEO_HW_INITIALIZATION_DATA
;
440 /* VIDEO_PORT_AGP_INTERFACE.Version contants */
441 #define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1
443 typedef struct _VIDEO_PORT_AGP_INTERFACE
{
447 PINTERFACE_REFERENCE InterfaceReference
;
448 PINTERFACE_DEREFERENCE InterfaceDereference
;
449 PAGP_RESERVE_PHYSICAL AgpReservePhysical
;
450 PAGP_RELEASE_PHYSICAL AgpReleasePhysical
;
451 PAGP_COMMIT_PHYSICAL AgpCommitPhysical
;
452 PAGP_FREE_PHYSICAL AgpFreePhysical
;
453 PAGP_RESERVE_VIRTUAL AgpReserveVirtual
;
454 PAGP_RELEASE_VIRTUAL AgpReleaseVirtual
;
455 PAGP_COMMIT_VIRTUAL AgpCommitVirtual
;
456 PAGP_FREE_VIRTUAL AgpFreeVirtual
;
457 ULONGLONG AgpAllocationLimit
;
458 } VIDEO_PORT_AGP_INTERFACE
, *PVIDEO_PORT_AGP_INTERFACE
;
460 /* VIDEO_PORT_AGP_INTERFACE_2.Version constants */
461 #define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2
463 typedef struct _VIDEO_PORT_AGP_INTERFACE_2
{
467 OUT PINTERFACE_REFERENCE InterfaceReference
;
468 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
469 OUT PAGP_RESERVE_PHYSICAL AgpReservePhysical
;
470 OUT PAGP_RELEASE_PHYSICAL AgpReleasePhysical
;
471 OUT PAGP_COMMIT_PHYSICAL AgpCommitPhysical
;
472 OUT PAGP_FREE_PHYSICAL AgpFreePhysical
;
473 OUT PAGP_RESERVE_VIRTUAL AgpReserveVirtual
;
474 OUT PAGP_RELEASE_VIRTUAL AgpReleaseVirtual
;
475 OUT PAGP_COMMIT_VIRTUAL AgpCommitVirtual
;
476 OUT PAGP_FREE_VIRTUAL AgpFreeVirtual
;
477 OUT ULONGLONG AgpAllocationLimit
;
478 OUT PAGP_SET_RATE AgpSetRate
;
479 } VIDEO_PORT_AGP_INTERFACE_2
, *PVIDEO_PORT_AGP_INTERFACE_2
;
481 #define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1
484 (DDKAPI
*PVIDEO_WRITE_CLOCK_LINE
)(
485 PVOID HwDeviceExtension
,
489 (DDKAPI
*PVIDEO_WRITE_DATA_LINE
)(
490 PVOID HwDeviceExtension
,
494 (DDKAPI
*PVIDEO_READ_CLOCK_LINE
)(
495 PVOID HwDeviceExtension
);
498 (DDKAPI
*PVIDEO_READ_DATA_LINE
)(
499 PVOID HwDeviceExtension
);
501 typedef struct _I2C_CALLBACKS
503 IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine
;
504 IN PVIDEO_WRITE_DATA_LINE WriteDataLine
;
505 IN PVIDEO_READ_CLOCK_LINE ReadClockLine
;
506 IN PVIDEO_READ_DATA_LINE ReadDataLine
;
507 } I2C_CALLBACKS
, *PI2C_CALLBACKS
;
510 (DDKAPI
*PI2C_START
)(
511 IN PVOID HwDeviceExtension
,
512 IN PI2C_CALLBACKS I2CCallbacks
);
516 IN PVOID HwDeviceExtension
,
517 IN PI2C_CALLBACKS I2CCallbacks
);
520 (DDKAPI
*PI2C_WRITE
)(
521 IN PVOID HwDeviceExtension
,
522 IN PI2C_CALLBACKS I2CCallbacks
,
528 IN PVOID HwDeviceExtension
,
529 IN PI2C_CALLBACKS I2CCallbacks
,
533 typedef struct _VIDEO_PORT_I2C_INTERFACE
{
537 PINTERFACE_REFERENCE InterfaceReference
;
538 PINTERFACE_DEREFERENCE InterfaceDereference
;
543 } VIDEO_PORT_I2C_INTERFACE
, *PVIDEO_PORT_I2C_INTERFACE
;
545 /* VIDEO_PORT_INT10_INTERFACE.Version constants */
546 #define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1
549 (DDKAPI
*PINT10_ALLOCATE_BUFFER
)(
553 IN OUT PULONG Length
);
556 (DDKAPI
*PINT10_CALL_BIOS
)(
558 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments
);
561 (DDKAPI
*PINT10_FREE_BUFFER
)(
567 (DDKAPI
*PINT10_READ_MEMORY
)(
575 (DDKAPI
*PINT10_WRITE_MEMORY
)(
582 typedef struct _VIDEO_PORT_INT10_INTERFACE
{
586 OUT PINTERFACE_REFERENCE InterfaceReference
;
587 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
588 OUT PINT10_ALLOCATE_BUFFER Int10AllocateBuffer
;
589 OUT PINT10_FREE_BUFFER Int10FreeBuffer
;
590 OUT PINT10_READ_MEMORY Int10ReadMemory
;
591 OUT PINT10_WRITE_MEMORY Int10WriteMemory
;
592 OUT PINT10_CALL_BIOS Int10CallBios
;
593 } VIDEO_PORT_INT10_INTERFACE
, *PVIDEO_PORT_INT10_INTERFACE
;
595 /* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */
596 #define VIDEO_MEMORY_SPACE_MEMORY 0x00
597 #define VIDEO_MEMORY_SPACE_IO 0x01
598 #define VIDEO_MEMORY_SPACE_USER_MODE 0x02
599 #define VIDEO_MEMORY_SPACE_DENSE 0x04
600 #define VIDEO_MEMORY_SPACE_P6CACHE 0x08
602 typedef struct _VIDEO_X86_BIOS_ARGUMENTS
{
610 } VIDEO_X86_BIOS_ARGUMENTS
, *PVIDEO_X86_BIOS_ARGUMENTS
;
612 typedef struct _VP_DEVICE_DESCRIPTION
{
613 BOOLEAN ScatterGather
;
614 BOOLEAN Dma32BitAddresses
;
615 BOOLEAN Dma64BitAddresses
;
617 } VP_DEVICE_DESCRIPTION
, *PVP_DEVICE_DESCRIPTION
;
619 typedef struct _VPOSVERSIONINFO
{
621 OUT ULONG MajorVersion
;
622 OUT ULONG MinorVersion
;
623 OUT ULONG BuildNumber
;
624 OUT USHORT ServicePackMajor
;
625 OUT USHORT ServicePackMinor
;
626 } VPOSVERSIONINFO
, *PVPOSVERSIONINFO
;
630 /* Video port functions for miniports */
636 IN ULONG DebugPrintLevel
,
637 IN PCHAR DebugMessage
,
643 VideoPortAcquireDeviceLock(
644 IN PVOID HwDeviceExtension
);
649 VideoPortAcquireSpinLock(
650 IN PVOID HwDeviceExtension
,
651 IN PSPIN_LOCK SpinLock
,
657 VideoPortAcquireSpinLockAtDpcLevel(
658 IN PVOID HwDeviceExtension
,
659 IN PSPIN_LOCK SpinLock
);
664 VideoPortAllocateBuffer(
665 IN PVOID HwDeviceExtension
,
672 VideoPortAllocateCommonBuffer(
673 IN PVOID HwDeviceExtension
,
674 IN PVP_DMA_ADAPTER VpDmaAdapter
,
675 IN ULONG DesiredLength
,
676 OUT PPHYSICAL_ADDRESS LogicalAddress
,
677 IN BOOLEAN CacheEnabled
,
683 VideoPortAllocateContiguousMemory(
684 IN PVOID HwDeviceExtension
,
685 IN ULONG NumberOfBytes
,
686 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
688 /* VideoPortAllocatePool.PoolType constants */
689 typedef enum _VP_POOL_TYPE
{
692 VpNonPagedPoolCacheAligned
= 4,
693 VpPagedPoolCacheAligned
694 } VP_POOL_TYPE
, *PVP_POOL_TYPE
;
699 VideoPortAllocatePool(
700 IN PVOID HwDeviceExtension
,
701 IN VP_POOL_TYPE PoolType
,
702 IN SIZE_T NumberOfBytes
,
708 VideoPortAssociateEventsWithDmaHandle(
709 IN PVOID HwDeviceExtension
,
710 IN OUT PVIDEO_REQUEST_PACKET pVrp
,
711 IN PVOID MappedUserEvent
,
712 IN PVOID DisplayDriverEvent
);
714 /* VideoPortCheckForDeviceExistence.Flags constants */
715 #define CDE_USE_SUBSYSTEM_IDS 0x00000001
716 #define CDE_USE_REVISION 0x00000002
721 VideoPortCheckForDeviceExistence(
722 IN PVOID HwDeviceExtension
,
726 IN USHORT SubVendorId
,
727 IN USHORT SubSystemId
,
734 IN PVOID HwDeviceExtension
,
740 VideoPortCompareMemory(
748 VideoPortCompleteDma(
749 IN PVOID HwDeviceExtension
,
750 IN PVP_DMA_ADAPTER VpDmaAdapter
,
751 IN PVP_SCATTER_GATHER_LIST VpScatterGather
,
752 IN BOOLEAN WriteToDevice
);
757 VideoPortCreateEvent(
758 IN PVOID HwDeviceExtension
,
761 OUT PEVENT
*ppEvent
);
766 VideoPortCreateSecondaryDisplay(
767 IN PVOID HwDeviceExtension
,
768 IN OUT PVOID
*SecondaryDeviceExtension
,
774 VideoPortCreateSpinLock(
775 IN PVOID HwDeviceExtension
,
776 OUT PSPIN_LOCK
*SpinLock
);
778 typedef struct _DDC_CONTROL
{
780 IN I2C_CALLBACKS I2CCallbacks
;
781 IN UCHAR EdidSegment
;
782 } DDC_CONTROL
, *PDDC_CONTROL
;
787 VideoPortDDCMonitorHelper(
788 IN PVOID HwDeviceExtension
,
790 IN OUT PUCHAR EdidBuffer
,
791 IN ULONG EdidBufferSize
);
797 IN VIDEO_DEBUG_LEVEL DebugPrintLevel
,
798 IN PCHAR DebugMessage
,
804 VideoPortDeleteEvent(
805 IN PVOID HwDeviceExtension
,
811 VideoPortDeleteSpinLock(
812 IN PVOID HwDeviceExtension
,
813 IN PSPIN_LOCK SpinLock
);
818 VideoPortDisableInterrupt(
819 IN PVOID HwDeviceExtension
);
825 IN PVOID HwDeviceExtension
,
827 IN DMA_FLAGS DmaFlags
);
832 VideoPortEnableInterrupt(
833 IN PVOID HwDeviceExtension
);
838 VideoPortEnumerateChildren(
839 IN PVOID HwDeviceExtension
,
845 VideoPortFreeCommonBuffer(
846 IN PVOID HwDeviceExtension
,
848 IN PVOID VirtualAddress
,
849 IN PHYSICAL_ADDRESS LogicalAddress
,
850 IN BOOLEAN CacheEnabled
);
855 VideoPortFreeDeviceBase(
856 IN PVOID HwDeviceExtension
,
857 IN PVOID MappedAddress
);
863 IN PVOID HwDeviceExtension
,
869 VideoPortGetAccessRanges(
870 IN PVOID HwDeviceExtension
,
871 IN ULONG NumRequestedResources
,
872 IN PIO_RESOURCE_DESCRIPTOR RequestedResources OPTIONAL
,
873 IN ULONG NumAccessRanges
,
874 OUT PVIDEO_ACCESS_RANGE AccessRanges
,
882 VideoPortGetAssociatedDeviceExtension(
883 IN PVOID DeviceObject
);
888 VideoPortGetAssociatedDeviceID(
889 IN PVOID DeviceObject
);
895 IN PVOID HwDeviceExtension
,
896 IN BUS_DATA_TYPE BusDataType
,
905 VideoPortGetBytesUsed(
906 IN PVOID HwDeviceExtension
,
912 VideoPortGetCommonBuffer(
913 IN PVOID HwDeviceExtension
,
914 IN ULONG DesiredLength
,
916 OUT PPHYSICAL_ADDRESS LogicalAddress
,
917 OUT PULONG pActualLength
,
918 IN BOOLEAN CacheEnabled
);
923 VideoPortGetCurrentIrql(
929 VideoPortGetDeviceBase(
930 IN PVOID HwDeviceExtension
,
931 IN PHYSICAL_ADDRESS IoAddress
,
932 IN ULONG NumberOfUchars
,
938 VideoPortGetDeviceData(
939 IN PVOID HwDeviceExtension
,
940 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType
,
941 IN PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine
,
947 VideoPortGetDmaAdapter(
948 IN PVOID HwDeviceExtension
,
949 IN PVP_DEVICE_DESCRIPTION VpDeviceDescription
);
954 VideoPortGetDmaContext(
955 IN PVOID HwDeviceExtension
,
962 IN PVOID HwDeviceExtension
,
968 VideoPortGetRegistryParameters(
969 IN PVOID HwDeviceExtension
,
970 IN PWSTR ParameterName
,
971 IN UCHAR IsParameterFileName
,
972 IN PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine
,
978 VideoPortGetRomImage(
979 IN PVOID HwDeviceExtension
,
988 IN PVOID HwDeviceExtension
,
989 IN OUT PVPOSVERSIONINFO pVpOsVersionInfo
);
994 VideoPortGetVgaStatus(
995 IN PVOID HwDeviceExtension
,
996 OUT PULONG VgaStatus
);
1001 VideoPortInitialize(
1004 IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData
,
1005 IN PVOID HwContext
);
1011 IN PVOID HwDeviceExtension
,
1012 IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments
);
1017 VideoPortInterlockedDecrement(
1023 VideoPortInterlockedExchange(
1024 IN OUT PLONG Target
,
1030 VideoPortInterlockedIncrement(
1033 typedef enum _VP_LOCK_OPERATION
{
1037 } VP_LOCK_OPERATION
;
1042 VideoPortLockBuffer(
1043 IN PVOID HwDeviceExtension
,
1044 IN PVOID BaseAddress
,
1046 IN VP_LOCK_OPERATION Operation
);
1052 IN PVOID HwDeviceExtension
,
1053 IN OUT PVIDEO_REQUEST_PACKET pVrp
,
1054 IN OUT PEVENT pUEvent
,
1055 IN PEVENT pDisplayEvent
,
1056 IN DMA_FLAGS DmaFlags
);
1062 IN PVOID HwDeviceExtension
,
1063 IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL
,
1064 IN VP_STATUS ErrorCode
,
1070 VideoPortMapBankedMemory(
1071 IN PVOID HwDeviceExtension
,
1072 IN PHYSICAL_ADDRESS PhysicalAddress
,
1073 IN OUT PULONG Length
,
1075 PVOID
*VirtualAddress
,
1077 UCHAR ReadWriteBank
,
1078 PBANKED_SECTION_ROUTINE BankRoutine
,
1084 VideoPortMapDmaMemory(
1085 IN PVOID HwDeviceExtension
,
1086 IN PVIDEO_REQUEST_PACKET pVrp
,
1087 IN PHYSICAL_ADDRESS BoardAddress
,
1089 IN PULONG InIoSpace
,
1090 IN PVOID MappedUserEvent
,
1091 IN PVOID DisplayDriverEvent
,
1092 IN OUT PVOID
*VirtualAddress
);
1098 IN PVOID HwDeviceExtension
,
1099 IN PHYSICAL_ADDRESS PhysicalAddress
,
1100 IN OUT PULONG Length
,
1101 IN PULONG InIoSpace
,
1102 IN OUT PVOID
*VirtualAddress
);
1107 VideoPortMoveMemory(
1108 IN PVOID Destination
,
1115 VideoPortPutDmaAdapter(
1116 IN PVOID HwDeviceExtension
,
1117 IN PVP_DMA_ADAPTER VpDmaAdapter
);
1122 VideoPortQueryPerformanceCounter(
1123 IN PVOID HwDeviceExtension
,
1124 OUT PLONGLONG PerformanceFrequency OPTIONAL
);
1126 /* VideoPortQueryServices.ServicesType constants */
1127 typedef enum _VIDEO_PORT_SERVICES
{
1128 VideoPortServicesAGP
= 1,
1129 VideoPortServicesI2C
,
1130 VideoPortServicesHeadless
,
1131 VideoPortServicesInt10
1132 } VIDEO_PORT_SERVICES
;
1137 VideoPortQueryServices(
1138 IN PVOID HwDeviceExtension
,
1139 IN VIDEO_PORT_SERVICES ServicesType
,
1140 IN OUT PINTERFACE Interface
);
1145 VideoPortQuerySystemTime(
1146 OUT PLARGE_INTEGER CurrentTime
);
1152 IN PVOID HwDeviceExtension
,
1153 IN PMINIPORT_DPC_ROUTINE CallbackRoutine
,
1159 VideoPortReadPortBufferUchar(
1167 VideoPortReadPortBufferUlong(
1175 VideoPortReadPortBufferUshort(
1183 VideoPortReadPortUchar(
1189 VideoPortReadPortUlong(
1195 VideoPortReadPortUshort(
1201 VideoPortReadRegisterBufferUchar(
1209 VideoPortReadRegisterBufferUlong(
1217 VideoPortReadRegisterBufferUshort(
1218 IN PUSHORT Register
,
1225 VideoPortReadRegisterUchar(
1226 IN PUCHAR Register
);
1231 VideoPortReadRegisterUlong(
1232 IN PULONG Register
);
1237 VideoPortReadRegisterUshort(
1238 IN PUSHORT Register
);
1243 VideoPortReadStateEvent(
1244 IN PVOID HwDeviceExtension
,
1250 VideoPortReleaseBuffer(
1251 IN PVOID HwDeviceExtension
,
1257 VideoPortReleaseCommonBuffer(
1258 IN PVOID HwDeviceExtension
,
1259 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1261 IN PHYSICAL_ADDRESS LogicalAddress
,
1262 IN PVOID VirtualAddress
,
1263 IN BOOLEAN CacheEnabled
);
1268 VideoPortReleaseDeviceLock(
1269 IN PVOID HwDeviceExtension
);
1274 VideoPortReleaseSpinLock(
1275 IN PVOID HwDeviceExtension
,
1276 IN PSPIN_LOCK SpinLock
,
1282 VideoPortReleaseSpinLockFromDpcLevel(
1283 IN PVOID HwDeviceExtension
,
1284 IN PSPIN_LOCK SpinLock
);
1290 PVOID HwDeviceExtension
,
1298 VideoPortSetBusData(
1299 IN PVOID HwDeviceExtension
,
1300 IN BUS_DATA_TYPE BusDataType
,
1301 IN ULONG SlotNumber
,
1309 VideoPortSetBytesUsed(
1310 IN PVOID HwDeviceExtension
,
1312 IN ULONG BytesUsed
);
1317 VideoPortSetDmaContext(
1318 IN PVOID HwDeviceExtension
,
1320 IN PVOID InstanceContext
);
1326 IN PVOID HwDeviceExtension
,
1332 VideoPortSetRegistryParameters(
1333 IN PVOID HwDeviceExtension
,
1336 IN ULONG ValueLength
);
1341 VideoPortSetTrappedEmulatorPorts(
1342 IN PVOID HwDeviceExtension
,
1343 IN ULONG NumAccessRanges
,
1344 IN PVIDEO_ACCESS_RANGE AccessRange
);
1349 VideoPortSignalDmaComplete(
1350 IN PVOID HwDeviceExtension
,
1351 IN PVOID pDmaHandle
);
1356 VideoPortStallExecution(
1357 IN ULONG Microseconds
);
1363 IN PVOID HwDeviceExtension
,
1364 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1367 IN OUT PULONG pLength
,
1368 IN PEXECUTE_DMA ExecuteDmaRoutine
,
1370 IN BOOLEAN WriteToDevice
);
1375 VideoPortStartTimer(
1376 IN PVOID HwDeviceExtension
);
1382 IN PVOID HwDeviceExtension
);
1384 /* VideoPortSynchronizeExecution.Priority constants */
1385 typedef enum VIDEO_SYNCHRONIZE_PRIORITY
{
1389 } VIDEO_SYNCHRONIZE_PRIORITY
, *PVIDEO_SYNCHRONIZE_PRIORITY
;
1394 VideoPortSynchronizeExecution(
1395 IN PVOID HwDeviceExtension
,
1396 IN VIDEO_SYNCHRONIZE_PRIORITY Priority
,
1397 IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine
,
1403 VideoPortUnLockBuffer(
1404 IN PVOID HwDeviceExtension
,
1410 VideoPortUnlockPages(
1411 IN PVOID hwDeviceExtension
,
1417 VideoPortUnmapDmaMemory(
1418 IN PVOID HwDeviceExtension
,
1419 IN PVOID VirtualAddress
,
1420 IN HANDLE ProcessHandle
,
1421 IN PDMA BoardMemoryHandle
);
1426 VideoPortUnmapMemory(
1427 IN PVOID HwDeviceExtension
,
1428 IN OUT PVOID VirtualAddress
,
1429 IN HANDLE ProcessHandle
);
1434 VideoPortVerifyAccessRanges(
1435 IN PVOID HwDeviceExtension
,
1436 IN ULONG NumAccessRanges
,
1437 IN PVIDEO_ACCESS_RANGE AccessRanges
);
1442 VideoPortWaitForSingleObject(
1443 IN PVOID HwDeviceExtension
,
1445 IN PLARGE_INTEGER Timeout OPTIONAL
);
1450 VideoPortWritePortBufferUchar(
1458 VideoPortWritePortBufferUlong(
1466 VideoPortWritePortBufferUshort(
1474 VideoPortWritePortUchar(
1481 VideoPortWritePortUlong(
1488 VideoPortWritePortUshort(
1495 VideoPortWriteRegisterBufferUchar(
1503 VideoPortWriteRegisterBufferUlong(
1511 VideoPortWriteRegisterBufferUshort(
1512 IN PUSHORT Register
,
1519 VideoPortWriteRegisterUchar(
1526 VideoPortWriteRegisterUlong(
1533 VideoPortWriteRegisterUshort(
1534 IN PUSHORT Register
,
1540 VideoPortZeroDeviceMemory(
1541 IN PVOID Destination
,
1547 VideoPortZeroMemory(
1548 IN PVOID Destination
,
1552 #define VideoDebugPrint(x) VideoPortDebugPrint x
1554 #define VideoDebugPrint(x)
1561 #endif /* defined __WINDDI_H */
1563 #endif /* __VIDEO_H */