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 #error winddi.h cannot be included with video.h
30 #if defined(_VIDEOPORT_)
33 #define VPAPI DECLSPEC_IMPORT
35 #define VIDEOPORT_API VPAPI
44 typedef LONG VP_STATUS
;
45 typedef VP_STATUS
*PVP_STATUS
;
46 typedef struct __DMA_PARAMETERS
* PDMA
;
47 typedef struct _VIDEO_PORT_SPIN_LOCK
*PSPIN_LOCK
;
48 typedef struct __VP_DMA_ADAPTER
*PVP_DMA_ADAPTER
;
50 #define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF
52 #define EVENT_TYPE_MASK 1
53 #define SYNCHRONIZATION_EVENT 0
54 #define NOTIFICATION_EVENT 1
56 #define INITIAL_EVENT_STATE_MASK 2
57 #define INITIAL_EVENT_NOT_SIGNALED 0
58 #define INITIAL_EVENT_SIGNALED 2
60 typedef enum VIDEO_DEBUG_LEVEL
{
65 } VIDEO_DEBUG_LEVEL
, *PVIDEO_DEBUG_LEVEL
;
68 VideoPortUnlockAfterDma
= 1,
69 VideoPortKeepPagesLocked
,
73 typedef enum _HW_DMA_RETURN
{
76 } HW_DMA_RETURN
, *PHW_DMA_RETURN
;
79 (NTAPI
*PVIDEO_HW_START_DMA
)(
80 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
;
147 (NTAPI
*PEXECUTE_DMA
)(
148 IN PVOID HwDeviceExtension
,
149 IN PVP_DMA_ADAPTER VpDmaAdapter
,
150 IN PVP_SCATTER_GATHER_LIST SGList
,
154 (NTAPI
*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
;
191 (NTAPI
*PVIDEO_HW_FIND_ADAPTER
)(
192 IN PVOID HwDeviceExtension
,
194 IN PWSTR ArgumentString
,
195 IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo
,
199 (NTAPI
*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 (NTAPI
*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 (NTAPI
*PVIDEO_HW_INITIALIZE
)(
237 IN PVOID HwDeviceExtension
);
240 (NTAPI
*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 (NTAPI
*PVIDEO_HW_LEGACYRESOURCES
)(
263 IN OUT PVIDEO_ACCESS_RANGE
*LegacyResourceList
,
264 IN OUT PULONG LegacyResourceCount
);
267 (NTAPI
*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 (NTAPI
*PVIDEO_HW_QUERY_INTERFACE
)(
288 IN PVOID HwDeviceExtension
,
289 IN OUT PQUERY_INTERFACE QueryInterface
);
292 (NTAPI
*PMINIPORT_GET_REGISTRY_ROUTINE
)(
293 IN PVOID HwDeviceExtension
,
295 IN OUT PWSTR ValueName
,
296 IN OUT PVOID ValueData
,
297 IN ULONG ValueLength
);
300 (NTAPI
*PVIDEO_HW_RESET_HW
)(
301 IN PVOID HwDeviceExtension
,
306 (NTAPI
*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 (NTAPI
*PVIDEO_HW_START_IO
)(
330 IN PVOID HwDeviceExtension
,
331 IN PVIDEO_REQUEST_PACKET RequestPacket
);
334 (NTAPI
*PMINIPORT_SYNCHRONIZE_ROUTINE
)(
338 (NTAPI
*PVIDEO_HW_TIMER
)(
339 IN PVOID HwDeviceExtension
);
342 (NTAPI
*PMINIPORT_DPC_ROUTINE
)(
343 IN PVOID HwDeviceExtension
,
347 (NTAPI
*PDRIVER_IO_PORT_UCHAR
)(
348 IN ULONG_PTR Context
,
354 (NTAPI
*PDRIVER_IO_PORT_UCHAR_STRING
)(
355 IN ULONG_PTR Context
,
359 IN ULONG DataLength
);
362 (NTAPI
*PDRIVER_IO_PORT_ULONG
)(
363 IN ULONG_PTR Context
,
369 (NTAPI
*PDRIVER_IO_PORT_ULONG_STRING
)(
370 IN ULONG_PTR Context
,
374 IN ULONG DataLength
);
377 (NTAPI
*PDRIVER_IO_PORT_USHORT
)(
378 IN ULONG_PTR Context
,
384 (NTAPI
*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 (NTAPI
*PVIDEO_WRITE_CLOCK_LINE
)(
484 PVOID HwDeviceExtension
,
488 (NTAPI
*PVIDEO_WRITE_DATA_LINE
)(
489 PVOID HwDeviceExtension
,
493 (NTAPI
*PVIDEO_READ_CLOCK_LINE
)(
494 PVOID HwDeviceExtension
);
497 (NTAPI
*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
;
510 IN PVOID HwDeviceExtension
,
511 IN PI2C_CALLBACKS I2CCallbacks
);
515 IN PVOID HwDeviceExtension
,
516 IN PI2C_CALLBACKS I2CCallbacks
);
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 (NTAPI
*PINT10_ALLOCATE_BUFFER
)(
552 IN OUT PULONG Length
);
555 (NTAPI
*PINT10_CALL_BIOS
)(
557 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments
);
560 (NTAPI
*PINT10_FREE_BUFFER
)(
566 (NTAPI
*PINT10_READ_MEMORY
)(
574 (NTAPI
*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 */
634 VideoPortAcquireDeviceLock(
635 IN PVOID HwDeviceExtension
);
640 VideoPortAcquireSpinLock(
641 IN PVOID HwDeviceExtension
,
642 IN PSPIN_LOCK SpinLock
,
648 VideoPortAcquireSpinLockAtDpcLevel(
649 IN PVOID HwDeviceExtension
,
650 IN PSPIN_LOCK SpinLock
);
655 VideoPortAllocateBuffer(
656 IN PVOID HwDeviceExtension
,
663 VideoPortAllocateCommonBuffer(
664 IN PVOID HwDeviceExtension
,
665 IN PVP_DMA_ADAPTER VpDmaAdapter
,
666 IN ULONG DesiredLength
,
667 OUT PPHYSICAL_ADDRESS LogicalAddress
,
668 IN BOOLEAN CacheEnabled
,
674 VideoPortAllocateContiguousMemory(
675 IN PVOID HwDeviceExtension
,
676 IN ULONG NumberOfBytes
,
677 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
679 /* VideoPortAllocatePool.PoolType constants */
680 typedef enum _VP_POOL_TYPE
{
683 VpNonPagedPoolCacheAligned
= 4,
684 VpPagedPoolCacheAligned
685 } VP_POOL_TYPE
, *PVP_POOL_TYPE
;
690 VideoPortAllocatePool(
691 IN PVOID HwDeviceExtension
,
692 IN VP_POOL_TYPE PoolType
,
693 IN SIZE_T NumberOfBytes
,
699 VideoPortAssociateEventsWithDmaHandle(
700 IN PVOID HwDeviceExtension
,
701 IN OUT PVIDEO_REQUEST_PACKET pVrp
,
702 IN PVOID MappedUserEvent
,
703 IN PVOID DisplayDriverEvent
);
705 /* VideoPortCheckForDeviceExistence.Flags constants */
706 #define CDE_USE_SUBSYSTEM_IDS 0x00000001
707 #define CDE_USE_REVISION 0x00000002
712 VideoPortCheckForDeviceExistence(
713 IN PVOID HwDeviceExtension
,
717 IN USHORT SubVendorId
,
718 IN USHORT SubSystemId
,
725 IN PVOID HwDeviceExtension
,
731 VideoPortCompareMemory(
739 VideoPortCompleteDma(
740 IN PVOID HwDeviceExtension
,
741 IN PVP_DMA_ADAPTER VpDmaAdapter
,
742 IN PVP_SCATTER_GATHER_LIST VpScatterGather
,
743 IN BOOLEAN WriteToDevice
);
748 VideoPortCreateEvent(
749 IN PVOID HwDeviceExtension
,
752 OUT PEVENT
*ppEvent
);
757 VideoPortCreateSecondaryDisplay(
758 IN PVOID HwDeviceExtension
,
759 IN OUT PVOID
*SecondaryDeviceExtension
,
765 VideoPortCreateSpinLock(
766 IN PVOID HwDeviceExtension
,
767 OUT PSPIN_LOCK
*SpinLock
);
769 typedef struct _DDC_CONTROL
{
771 IN I2C_CALLBACKS I2CCallbacks
;
772 IN UCHAR EdidSegment
;
773 } DDC_CONTROL
, *PDDC_CONTROL
;
778 VideoPortDDCMonitorHelper(
779 IN PVOID HwDeviceExtension
,
781 IN OUT PUCHAR EdidBuffer
,
782 IN ULONG EdidBufferSize
);
788 IN VIDEO_DEBUG_LEVEL DebugPrintLevel
,
789 IN PCHAR DebugMessage
,
795 VideoPortDeleteEvent(
796 IN PVOID HwDeviceExtension
,
802 VideoPortDeleteSpinLock(
803 IN PVOID HwDeviceExtension
,
804 IN PSPIN_LOCK SpinLock
);
809 VideoPortDisableInterrupt(
810 IN PVOID HwDeviceExtension
);
816 IN PVOID HwDeviceExtension
,
818 IN DMA_FLAGS DmaFlags
);
823 VideoPortEnableInterrupt(
824 IN PVOID HwDeviceExtension
);
829 VideoPortEnumerateChildren(
830 IN PVOID HwDeviceExtension
,
836 VideoPortFreeCommonBuffer(
837 IN PVOID HwDeviceExtension
,
839 IN PVOID VirtualAddress
,
840 IN PHYSICAL_ADDRESS LogicalAddress
,
841 IN BOOLEAN CacheEnabled
);
846 VideoPortFreeDeviceBase(
847 IN PVOID HwDeviceExtension
,
848 IN PVOID MappedAddress
);
854 IN PVOID HwDeviceExtension
,
860 VideoPortGetAccessRanges(
861 IN PVOID HwDeviceExtension
,
862 IN ULONG NumRequestedResources
,
863 IN PIO_RESOURCE_DESCRIPTOR RequestedResources OPTIONAL
,
864 IN ULONG NumAccessRanges
,
865 OUT PVIDEO_ACCESS_RANGE AccessRanges
,
873 VideoPortGetAssociatedDeviceExtension(
874 IN PVOID DeviceObject
);
879 VideoPortGetAssociatedDeviceID(
880 IN PVOID DeviceObject
);
886 IN PVOID HwDeviceExtension
,
887 IN BUS_DATA_TYPE BusDataType
,
896 VideoPortGetBytesUsed(
897 IN PVOID HwDeviceExtension
,
903 VideoPortGetCommonBuffer(
904 IN PVOID HwDeviceExtension
,
905 IN ULONG DesiredLength
,
907 OUT PPHYSICAL_ADDRESS LogicalAddress
,
908 OUT PULONG pActualLength
,
909 IN BOOLEAN CacheEnabled
);
914 VideoPortGetCurrentIrql(
920 VideoPortGetDeviceBase(
921 IN PVOID HwDeviceExtension
,
922 IN PHYSICAL_ADDRESS IoAddress
,
923 IN ULONG NumberOfUchars
,
929 VideoPortGetDeviceData(
930 IN PVOID HwDeviceExtension
,
931 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType
,
932 IN PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine
,
938 VideoPortGetDmaAdapter(
939 IN PVOID HwDeviceExtension
,
940 IN PVP_DEVICE_DESCRIPTION VpDeviceDescription
);
945 VideoPortGetDmaContext(
946 IN PVOID HwDeviceExtension
,
953 IN PVOID HwDeviceExtension
,
959 VideoPortGetRegistryParameters(
960 IN PVOID HwDeviceExtension
,
961 IN PWSTR ParameterName
,
962 IN UCHAR IsParameterFileName
,
963 IN PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine
,
969 VideoPortGetRomImage(
970 IN PVOID HwDeviceExtension
,
979 IN PVOID HwDeviceExtension
,
980 IN OUT PVPOSVERSIONINFO pVpOsVersionInfo
);
985 VideoPortGetVgaStatus(
986 IN PVOID HwDeviceExtension
,
987 OUT PULONG VgaStatus
);
995 IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData
,
1002 IN PVOID HwDeviceExtension
,
1003 IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments
);
1008 VideoPortInterlockedDecrement(
1014 VideoPortInterlockedExchange(
1015 IN OUT PLONG Target
,
1021 VideoPortInterlockedIncrement(
1024 typedef enum _VP_LOCK_OPERATION
{
1028 } VP_LOCK_OPERATION
;
1033 VideoPortLockBuffer(
1034 IN PVOID HwDeviceExtension
,
1035 IN PVOID BaseAddress
,
1037 IN VP_LOCK_OPERATION Operation
);
1043 IN PVOID HwDeviceExtension
,
1044 IN OUT PVIDEO_REQUEST_PACKET pVrp
,
1045 IN OUT PEVENT pUEvent
,
1046 IN PEVENT pDisplayEvent
,
1047 IN DMA_FLAGS DmaFlags
);
1053 IN PVOID HwDeviceExtension
,
1054 IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL
,
1055 IN VP_STATUS ErrorCode
,
1061 VideoPortMapBankedMemory(
1062 IN PVOID HwDeviceExtension
,
1063 IN PHYSICAL_ADDRESS PhysicalAddress
,
1064 IN OUT PULONG Length
,
1066 PVOID
*VirtualAddress
,
1068 UCHAR ReadWriteBank
,
1069 PBANKED_SECTION_ROUTINE BankRoutine
,
1075 VideoPortMapDmaMemory(
1076 IN PVOID HwDeviceExtension
,
1077 IN PVIDEO_REQUEST_PACKET pVrp
,
1078 IN PHYSICAL_ADDRESS BoardAddress
,
1080 IN PULONG InIoSpace
,
1081 IN PVOID MappedUserEvent
,
1082 IN PVOID DisplayDriverEvent
,
1083 IN OUT PVOID
*VirtualAddress
);
1089 IN PVOID HwDeviceExtension
,
1090 IN PHYSICAL_ADDRESS PhysicalAddress
,
1091 IN OUT PULONG Length
,
1092 IN PULONG InIoSpace
,
1093 IN OUT PVOID
*VirtualAddress
);
1098 VideoPortMoveMemory(
1099 IN PVOID Destination
,
1106 VideoPortPutDmaAdapter(
1107 IN PVOID HwDeviceExtension
,
1108 IN PVP_DMA_ADAPTER VpDmaAdapter
);
1113 VideoPortQueryPerformanceCounter(
1114 IN PVOID HwDeviceExtension
,
1115 OUT PLONGLONG PerformanceFrequency OPTIONAL
);
1117 /* VideoPortQueryServices.ServicesType constants */
1118 typedef enum _VIDEO_PORT_SERVICES
{
1119 VideoPortServicesAGP
= 1,
1120 VideoPortServicesI2C
,
1121 VideoPortServicesHeadless
,
1122 VideoPortServicesInt10
1123 } VIDEO_PORT_SERVICES
;
1128 VideoPortQueryServices(
1129 IN PVOID HwDeviceExtension
,
1130 IN VIDEO_PORT_SERVICES ServicesType
,
1131 IN OUT PINTERFACE Interface
);
1136 VideoPortQuerySystemTime(
1137 OUT PLARGE_INTEGER CurrentTime
);
1150 IN PVOID HwDeviceExtension
,
1151 IN PMINIPORT_DPC_ROUTINE CallbackRoutine
,
1157 VideoPortReadPortBufferUchar(
1165 VideoPortReadPortBufferUlong(
1173 VideoPortReadPortBufferUshort(
1181 VideoPortReadPortUchar(
1187 VideoPortReadPortUlong(
1193 VideoPortReadPortUshort(
1199 VideoPortReadRegisterBufferUchar(
1207 VideoPortReadRegisterBufferUlong(
1215 VideoPortReadRegisterBufferUshort(
1216 IN PUSHORT Register
,
1223 VideoPortReadRegisterUchar(
1224 IN PUCHAR Register
);
1229 VideoPortReadRegisterUlong(
1230 IN PULONG Register
);
1235 VideoPortReadRegisterUshort(
1236 IN PUSHORT Register
);
1241 VideoPortReadStateEvent(
1242 IN PVOID HwDeviceExtension
,
1248 VideoPortReleaseBuffer(
1249 IN PVOID HwDeviceExtension
,
1255 VideoPortReleaseCommonBuffer(
1256 IN PVOID HwDeviceExtension
,
1257 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1259 IN PHYSICAL_ADDRESS LogicalAddress
,
1260 IN PVOID VirtualAddress
,
1261 IN BOOLEAN CacheEnabled
);
1266 VideoPortReleaseDeviceLock(
1267 IN PVOID HwDeviceExtension
);
1272 VideoPortReleaseSpinLock(
1273 IN PVOID HwDeviceExtension
,
1274 IN PSPIN_LOCK SpinLock
,
1280 VideoPortReleaseSpinLockFromDpcLevel(
1281 IN PVOID HwDeviceExtension
,
1282 IN PSPIN_LOCK SpinLock
);
1288 PVOID HwDeviceExtension
,
1296 VideoPortSetBusData(
1297 IN PVOID HwDeviceExtension
,
1298 IN BUS_DATA_TYPE BusDataType
,
1299 IN ULONG SlotNumber
,
1307 VideoPortSetBytesUsed(
1308 IN PVOID HwDeviceExtension
,
1310 IN ULONG BytesUsed
);
1315 VideoPortSetDmaContext(
1316 IN PVOID HwDeviceExtension
,
1318 IN PVOID InstanceContext
);
1324 IN PVOID HwDeviceExtension
,
1330 VideoPortSetRegistryParameters(
1331 IN PVOID HwDeviceExtension
,
1334 IN ULONG ValueLength
);
1339 VideoPortSetTrappedEmulatorPorts(
1340 IN PVOID HwDeviceExtension
,
1341 IN ULONG NumAccessRanges
,
1342 IN PVIDEO_ACCESS_RANGE AccessRange
);
1347 VideoPortSignalDmaComplete(
1348 IN PVOID HwDeviceExtension
,
1349 IN PDMA pDmaHandle
);
1354 VideoPortStallExecution(
1355 IN ULONG Microseconds
);
1361 IN PVOID HwDeviceExtension
,
1362 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1365 IN OUT PULONG pLength
,
1366 IN PEXECUTE_DMA ExecuteDmaRoutine
,
1368 IN BOOLEAN WriteToDevice
);
1373 VideoPortStartTimer(
1374 IN PVOID HwDeviceExtension
);
1380 IN PVOID HwDeviceExtension
);
1382 /* VideoPortSynchronizeExecution.Priority constants */
1383 typedef enum VIDEO_SYNCHRONIZE_PRIORITY
{
1387 } VIDEO_SYNCHRONIZE_PRIORITY
, *PVIDEO_SYNCHRONIZE_PRIORITY
;
1392 VideoPortSynchronizeExecution(
1393 IN PVOID HwDeviceExtension
,
1394 IN VIDEO_SYNCHRONIZE_PRIORITY Priority
,
1395 IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine
,
1401 VideoPortUnLockBuffer(
1402 IN PVOID HwDeviceExtension
,
1408 VideoPortUnlockPages(
1409 IN PVOID hwDeviceExtension
,
1415 VideoPortUnmapDmaMemory(
1416 IN PVOID HwDeviceExtension
,
1417 IN PVOID VirtualAddress
,
1418 IN HANDLE ProcessHandle
,
1419 IN PDMA BoardMemoryHandle
);
1424 VideoPortUnmapMemory(
1425 IN PVOID HwDeviceExtension
,
1426 IN OUT PVOID VirtualAddress
,
1427 IN HANDLE ProcessHandle
);
1432 VideoPortVerifyAccessRanges(
1433 IN PVOID HwDeviceExtension
,
1434 IN ULONG NumAccessRanges
,
1435 IN PVIDEO_ACCESS_RANGE AccessRanges
);
1440 VideoPortWaitForSingleObject(
1441 IN PVOID HwDeviceExtension
,
1443 IN PLARGE_INTEGER Timeout OPTIONAL
);
1448 VideoPortWritePortBufferUchar(
1456 VideoPortWritePortBufferUlong(
1464 VideoPortWritePortBufferUshort(
1472 VideoPortWritePortUchar(
1479 VideoPortWritePortUlong(
1486 VideoPortWritePortUshort(
1493 VideoPortWriteRegisterBufferUchar(
1501 VideoPortWriteRegisterBufferUlong(
1509 VideoPortWriteRegisterBufferUshort(
1510 IN PUSHORT Register
,
1517 VideoPortWriteRegisterUchar(
1524 VideoPortWriteRegisterUlong(
1531 VideoPortWriteRegisterUshort(
1532 IN PUSHORT Register
,
1538 VideoPortZeroDeviceMemory(
1539 IN PVOID Destination
,
1545 VideoPortZeroMemory(
1546 IN PVOID Destination
,
1550 #define VideoDebugPrint(x) VideoPortDebugPrint x
1552 #define VideoDebugPrint(x)
1559 #endif /* defined _WINDDI_ */
1561 #endif /* __VIDEO_H__ */