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.
39 #define ALLOC_PRAGMA 1
42 #if defined(_VIDEOPORT_)
45 #define VPAPI DECLSPEC_IMPORT
49 #define PAGED_CODE() \
50 if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) { \
51 VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \
68 #endif /* _NTOSDEF_ */
71 #define VideoDebugPrint(x) VideoPortDebugPrint x
73 #define VideoDebugPrint(x)
76 #define GET_VIDEO_PHYSICAL_ADDRESS(scatterList, \
82 ULONG_PTR byteOffset; \
84 byteOffset = (PCHAR) VirtualAddress - (PCHAR)InputBuffer; \
85 while (byteOffset >= scatterList->Length) { \
86 byteOffset -= scatterList->Length; \
89 *pLength = scatterList->Length - byteOffset; \
90 Address = (ULONG_PTR) (scatterList->PhysicalAddress + byteOffset); \
93 #define GET_VIDEO_SCATTERGATHER(ppDma) (**(PVRB_SG **)ppDma)
95 /* VIDEO_ACCESS_RANGE.RangePassive */
96 #define VIDEO_RANGE_PASSIVE_DECODE 1
97 #define VIDEO_RANGE_10_BIT_DECODE 2
99 #define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO FIELD_OFFSET(VIDEO_PORT_CONFIG_INFO, Master)
100 #define SIZE_OF_WXP_VIDEO_PORT_CONFIG_INFO sizeof(VIDEO_PORT_CONFIG_INFO)
102 #define SET_USER_EVENT 0x01
103 #define SET_DISPLAY_EVENT 0x02
105 #define EVENT_TYPE_MASK 1
106 #define SYNCHRONIZATION_EVENT 0
107 #define NOTIFICATION_EVENT 1
109 #define INITIAL_EVENT_STATE_MASK 2
110 #define INITIAL_EVENT_NOT_SIGNALED 0
111 #define INITIAL_EVENT_SIGNALED 2
113 #define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF
115 #define VIDEO_INVALID_CHILD_ID 0xFFFFFFFF
117 #define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA FIELD_OFFSET(VIDEO_HW_INITIALIZATION_DATA, HwStartDma)
118 #define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA FIELD_OFFSET(VIDEO_HW_INITIALIZATION_DATA, Reserved)
119 #define SIZE_OF_WXP_VIDEO_HW_INITIALIZATION_DATA (SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA + sizeof(ULONG))
121 #define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1
122 #define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2
123 #define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1
124 #define VIDEO_PORT_I2C_INTERFACE_VERSION_2 2
125 #define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1
126 #define VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE_VERSION_1 1
127 #define VIDEO_PORT_DEBUG_REPORT_INTERFACE_VERSION_1 1
129 /* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */
130 #define VIDEO_MEMORY_SPACE_MEMORY 0x00
131 #define VIDEO_MEMORY_SPACE_IO 0x01
132 #define VIDEO_MEMORY_SPACE_USER_MODE 0x02
133 #define VIDEO_MEMORY_SPACE_DENSE 0x04
134 #define VIDEO_MEMORY_SPACE_P6CACHE 0x08
136 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */
137 #define VIDEO_ENUM_MORE_DEVICES ERROR_CONTINUE
138 #define VIDEO_ENUM_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES
139 #define VIDEO_ENUM_INVALID_DEVICE ERROR_INVALID_NAME
141 #define DEVICE_VGA_ENABLED 1
143 /* VideoPortCheckForDeviceExistence.Flags constants */
144 #define CDE_USE_SUBSYSTEM_IDS 0x00000001
145 #define CDE_USE_REVISION 0x00000002
147 #define BUGCHECK_DATA_SIZE_RESERVED 48
149 #define VIDEO_DEBUG_REPORT_MAX_SIZE 0x8000
151 typedef LONG VP_STATUS
, *PVP_STATUS
;
152 typedef ULONG DMA_EVENT_FLAGS
;
154 typedef struct _VIDEO_PORT_SPIN_LOCK
*PSPIN_LOCK
;
155 typedef struct _VIDEO_DEBUG_REPORT
*PVIDEO_DEBUG_REPORT
;
156 typedef struct __DMA_PARAMETERS
*PDMA
;
157 typedef struct __VP_DMA_ADAPTER
*PVP_DMA_ADAPTER
;
160 (NTAPI
*PVIDEO_PORT_GET_PROC_ADDRESS
)(
161 IN PVOID HwDeviceExtension
,
162 IN PUCHAR FunctionName
);
164 typedef struct _VIDEO_PORT_CONFIG_INFO
{
166 ULONG SystemIoBusNumber
;
167 INTERFACE_TYPE AdapterInterfaceType
;
168 ULONG BusInterruptLevel
;
169 ULONG BusInterruptVector
;
170 KINTERRUPT_MODE InterruptMode
;
171 ULONG NumEmulatorAccessEntries
;
172 PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries
;
173 ULONG_PTR EmulatorAccessEntriesContext
;
174 PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress
;
175 ULONG VdmPhysicalVideoMemoryLength
;
176 ULONG HardwareStateSize
;
180 UCHAR InterruptShareable
;
185 BOOLEAN NeedPhysicalAddresses
;
187 ULONG MaximumTransferLength
;
188 ULONG NumberOfPhysicalBreaks
;
189 BOOLEAN ScatterGather
;
190 ULONG MaximumScatterGatherChunkSize
;
191 PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress
;
192 PWSTR DriverRegistryPath
;
193 ULONGLONG SystemMemorySize
;
194 } VIDEO_PORT_CONFIG_INFO
, *PVIDEO_PORT_CONFIG_INFO
;
197 (NTAPI
*PVIDEO_HW_FIND_ADAPTER
)(
198 IN PVOID HwDeviceExtension
,
200 IN PWSTR ArgumentString
,
201 IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo
,
205 (NTAPI
*PVIDEO_HW_INITIALIZE
)(
206 IN PVOID HwDeviceExtension
);
209 (NTAPI
*PVIDEO_HW_INTERRUPT
)(
210 IN PVOID HwDeviceExtension
);
212 typedef struct _VIDEO_ACCESS_RANGE
{
213 PHYSICAL_ADDRESS RangeStart
;
215 UCHAR RangeInIoSpace
;
217 UCHAR RangeShareable
;
219 } VIDEO_ACCESS_RANGE
, *PVIDEO_ACCESS_RANGE
;
222 (NTAPI
*PVIDEO_HW_LEGACYRESOURCES
)(
225 IN OUT PVIDEO_ACCESS_RANGE
*LegacyResourceList
,
226 IN OUT PULONG LegacyResourceCount
);
228 typedef enum _HW_DMA_RETURN
{
231 } HW_DMA_RETURN
, *PHW_DMA_RETURN
;
233 typedef HW_DMA_RETURN
234 (NTAPI
*PVIDEO_HW_START_DMA
)(
235 PVOID HwDeviceExtension
,
238 typedef struct _VP_SCATTER_GATHER_ELEMENT
{
239 PHYSICAL_ADDRESS Address
;
242 } VP_SCATTER_GATHER_ELEMENT
, *PVP_SCATTER_GATHER_ELEMENT
;
244 typedef struct _VP_SCATTER_GATHER_LIST
{
245 ULONG NumberOfElements
;
247 VP_SCATTER_GATHER_ELEMENT Elements
[0];
248 } VP_SCATTER_GATHER_LIST
, *PVP_SCATTER_GATHER_LIST
;
251 (NTAPI
*PEXECUTE_DMA
)(
252 IN PVOID HwDeviceExtension
,
253 IN PVP_DMA_ADAPTER VpDmaAdapter
,
254 IN PVP_SCATTER_GATHER_LIST SGList
,
257 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */
258 typedef struct _VIDEO_CHILD_ENUM_INFO
{
260 ULONG ChildDescriptorSize
;
263 PVOID ChildHwDeviceExtension
;
264 } VIDEO_CHILD_ENUM_INFO
, *PVIDEO_CHILD_ENUM_INFO
;
266 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */
267 typedef enum _VIDEO_CHILD_TYPE
{
272 } VIDEO_CHILD_TYPE
, *PVIDEO_CHILD_TYPE
;
275 (NTAPI
*PVIDEO_HW_GET_CHILD_DESCRIPTOR
)(
276 IN PVOID HwDeviceExtension
,
277 IN PVIDEO_CHILD_ENUM_INFO ChildEnumInfo
,
278 OUT PVIDEO_CHILD_TYPE VideoChildType
,
279 OUT PUCHAR pChildDescriptor
,
284 (NTAPI
*PVIDEO_HW_POWER_SET
)(
285 IN PVOID HwDeviceExtension
,
287 IN PVIDEO_POWER_MANAGEMENT VideoPowerControl
);
290 (NTAPI
*PVIDEO_HW_POWER_GET
)(
291 IN PVOID HwDeviceExtension
,
293 IN OUT PVIDEO_POWER_MANAGEMENT VideoPowerControl
);
295 typedef struct _QUERY_INTERFACE
{
296 CONST GUID
*InterfaceType
;
299 PINTERFACE Interface
;
300 PVOID InterfaceSpecificData
;
301 } QUERY_INTERFACE
, *PQUERY_INTERFACE
;
304 (NTAPI
*PVIDEO_HW_QUERY_INTERFACE
)(
305 IN PVOID HwDeviceExtension
,
306 IN OUT PQUERY_INTERFACE QueryInterface
);
309 (NTAPI
*PVIDEO_HW_CHILD_CALLBACK
)(
310 PVOID HwDeviceExtension
,
311 PVOID ChildDeviceExtension
);
314 (NTAPI
*PVIDEO_HW_RESET_HW
)(
315 IN PVOID HwDeviceExtension
,
319 typedef struct _STATUS_BLOCK
{
320 _ANONYMOUS_UNION
union {
324 ULONG_PTR Information
;
325 } STATUS_BLOCK
, *PSTATUS_BLOCK
;
327 typedef struct _VIDEO_REQUEST_PACKET
{
329 PSTATUS_BLOCK StatusBlock
;
331 ULONG InputBufferLength
;
333 ULONG OutputBufferLength
;
334 } VIDEO_REQUEST_PACKET
, *PVIDEO_REQUEST_PACKET
;
337 (NTAPI
*PVIDEO_HW_START_IO
)(
338 IN PVOID HwDeviceExtension
,
339 IN PVIDEO_REQUEST_PACKET RequestPacket
);
342 (NTAPI
*PVIDEO_HW_TIMER
)(
343 IN PVOID HwDeviceExtension
);
346 (NTAPI
*PVIDEO_WRITE_CLOCK_LINE
)(
347 PVOID HwDeviceExtension
,
351 (NTAPI
*PVIDEO_WRITE_DATA_LINE
)(
352 PVOID HwDeviceExtension
,
356 (NTAPI
*PVIDEO_READ_CLOCK_LINE
)(
357 PVOID HwDeviceExtension
);
360 (NTAPI
*PVIDEO_READ_DATA_LINE
)(
361 PVOID HwDeviceExtension
);
364 (NTAPI
*PVIDEO_WAIT_VSYNC_ACTIVE
)(
365 PVOID HwDeviceExtension
);
367 typedef struct _I2C_CALLBACKS
{
368 IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine
;
369 IN PVIDEO_WRITE_DATA_LINE WriteDataLine
;
370 IN PVIDEO_READ_CLOCK_LINE ReadClockLine
;
371 IN PVIDEO_READ_DATA_LINE ReadDataLine
;
372 } I2C_CALLBACKS
, *PI2C_CALLBACKS
;
376 IN PVOID HwDeviceExtension
,
377 IN PI2C_CALLBACKS I2CCallbacks
);
381 IN PVOID HwDeviceExtension
,
382 IN PI2C_CALLBACKS I2CCallbacks
);
386 IN PVOID HwDeviceExtension
,
387 IN PI2C_CALLBACKS I2CCallbacks
,
393 IN PVOID HwDeviceExtension
,
394 IN PI2C_CALLBACKS I2CCallbacks
,
398 typedef struct _VIDEO_I2C_CONTROL
{
399 IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine
;
400 IN PVIDEO_WRITE_DATA_LINE WriteDataLine
;
401 IN PVIDEO_READ_CLOCK_LINE ReadClockLine
;
402 IN PVIDEO_READ_DATA_LINE ReadDataLine
;
404 } VIDEO_I2C_CONTROL
, *PVIDEO_I2C_CONTROL
;
407 (NTAPI
*PI2C_START_2
)(
408 IN PVOID HwDeviceExtension
,
409 IN PVIDEO_I2C_CONTROL I2CControl
);
412 (NTAPI
*PI2C_STOP_2
)(
413 IN PVOID HwDeviceExtension
,
414 IN PVIDEO_I2C_CONTROL I2CControl
);
417 (NTAPI
*PI2C_WRITE_2
)(
418 IN PVOID HwDeviceExtension
,
419 IN PVIDEO_I2C_CONTROL I2CControl
,
424 (NTAPI
*PI2C_READ_2
)(
425 IN PVOID HwDeviceExtension
,
426 IN PVIDEO_I2C_CONTROL I2CControl
,
429 IN BOOLEAN EndOfRead
);
431 typedef struct _INT10_BIOS_ARGUMENTS
{
441 } INT10_BIOS_ARGUMENTS
, *PINT10_BIOS_ARGUMENTS
;
444 (NTAPI
*PINT10_CALL_BIOS
)(
446 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments
);
449 (NTAPI
*PINT10_ALLOCATE_BUFFER
)(
453 IN OUT PULONG Length
);
456 (NTAPI
*PINT10_FREE_BUFFER
)(
462 (NTAPI
*PINT10_READ_MEMORY
)(
470 (NTAPI
*PINT10_WRITE_MEMORY
)(
478 (NTAPI
*PROTECT_WC_MEMORY
)(
480 IN PVOID HwDeviceExtension
);
483 (NTAPI
*RESTORE_WC_MEMORY
)(
485 IN PVOID HwDeviceExtension
);
487 typedef enum _VIDEO_DEVICE_DATA_TYPE
{
493 } VIDEO_DEVICE_DATA_TYPE
, *PVIDEO_DEVICE_DATA_TYPE
;
496 (NTAPI
*PMINIPORT_QUERY_DEVICE_ROUTINE
)(
497 IN PVOID HwDeviceExtension
,
499 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType
,
501 IN ULONG IdentifierLength
,
502 IN PVOID ConfigurationData
,
503 IN ULONG ConfigurationDataLength
,
504 IN OUT PVOID ComponentInformation
,
505 IN ULONG ComponentInformationLength
);
508 (NTAPI
*PMINIPORT_GET_REGISTRY_ROUTINE
)(
509 IN PVOID HwDeviceExtension
,
511 IN OUT PWSTR ValueName
,
512 IN OUT PVOID ValueData
,
513 IN ULONG ValueLength
);
516 (NTAPI
*PMINIPORT_DPC_ROUTINE
)(
517 IN PVOID HwDeviceExtension
,
521 (NTAPI
*PMINIPORT_SYNCHRONIZE_ROUTINE
)(
525 (NTAPI
*PVIDEO_BUGCHECK_CALLBACK
)(
526 IN PVOID HwDeviceExtension
,
527 IN ULONG BugcheckCode
,
529 IN ULONG BufferSize
);
531 /* VideoPortSynchronizeExecution.Priority constants */
532 typedef enum VIDEO_SYNCHRONIZE_PRIORITY
{
536 } VIDEO_SYNCHRONIZE_PRIORITY
, *PVIDEO_SYNCHRONIZE_PRIORITY
;
538 /* VideoPortAllocatePool.PoolType constants */
539 typedef enum _VP_POOL_TYPE
{
542 VpNonPagedPoolCacheAligned
= 4,
543 VpPagedPoolCacheAligned
544 } VP_POOL_TYPE
, *PVP_POOL_TYPE
;
546 typedef enum _DMA_FLAGS
{
547 VideoPortUnlockAfterDma
= 1,
548 VideoPortKeepPagesLocked
,
552 typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA
{
553 INTERFACE_TYPE InterfaceType
;
565 } VIDEO_HARDWARE_CONFIGURATION_DATA
, *PVIDEO_HARDWARE_CONFIGURATION_DATA
;
567 typedef struct _VIDEO_X86_BIOS_ARGUMENTS
{
575 } VIDEO_X86_BIOS_ARGUMENTS
, *PVIDEO_X86_BIOS_ARGUMENTS
;
577 typedef enum VIDEO_DEBUG_LEVEL
{
582 } VIDEO_DEBUG_LEVEL
, *PVIDEO_DEBUG_LEVEL
;
587 (NTAPI
*PDRIVER_IO_PORT_UCHAR
)(
588 IN ULONG_PTR Context
,
594 (NTAPI
*PDRIVER_IO_PORT_UCHAR_STRING
)(
595 IN ULONG_PTR Context
,
599 IN ULONG DataLength
);
602 (NTAPI
*PDRIVER_IO_PORT_ULONG
)(
603 IN ULONG_PTR Context
,
609 (NTAPI
*PDRIVER_IO_PORT_ULONG_STRING
)(
610 IN ULONG_PTR Context
,
614 IN ULONG DataLength
);
617 (NTAPI
*PDRIVER_IO_PORT_USHORT
)(
618 IN ULONG_PTR Context
,
624 (NTAPI
*PDRIVER_IO_PORT_USHORT_STRING
)(
625 IN ULONG_PTR Context
,
629 IN ULONG DataLength
);
633 typedef struct __VRB_SG
{
634 __int64 PhysicalAddress
;
638 typedef enum _VP_LOCK_OPERATION
{
644 typedef struct _VP_DEVICE_DESCRIPTION
{
645 BOOLEAN ScatterGather
;
646 BOOLEAN Dma32BitAddresses
;
647 BOOLEAN Dma64BitAddresses
;
649 } VP_DEVICE_DESCRIPTION
, *PVP_DEVICE_DESCRIPTION
;
651 typedef struct _VIDEO_CHILD_STATE
{
654 } VIDEO_CHILD_STATE
, *PVIDEO_CHILD_STATE
;
656 typedef struct _VIDEO_CHILD_STATE_CONFIGURATION
{
658 VIDEO_CHILD_STATE ChildStateArray
[ANYSIZE_ARRAY
];
659 } VIDEO_CHILD_STATE_CONFIGURATION
, *PVIDEO_CHILD_STATE_CONFIGURATION
;
661 typedef struct _VIDEO_HW_INITIALIZATION_DATA
{
662 ULONG HwInitDataSize
;
663 INTERFACE_TYPE AdapterInterfaceType
;
664 PVIDEO_HW_FIND_ADAPTER HwFindAdapter
;
665 PVIDEO_HW_INITIALIZE HwInitialize
;
666 PVIDEO_HW_INTERRUPT HwInterrupt
;
667 PVIDEO_HW_START_IO HwStartIO
;
668 ULONG HwDeviceExtensionSize
;
669 ULONG StartingDeviceNumber
;
670 PVIDEO_HW_RESET_HW HwResetHw
;
671 PVIDEO_HW_TIMER HwTimer
;
672 PVIDEO_HW_START_DMA HwStartDma
;
673 PVIDEO_HW_POWER_SET HwSetPowerState
;
674 PVIDEO_HW_POWER_GET HwGetPowerState
;
675 PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor
;
676 PVIDEO_HW_QUERY_INTERFACE HwQueryInterface
;
677 ULONG HwChildDeviceExtensionSize
;
678 PVIDEO_ACCESS_RANGE HwLegacyResourceList
;
679 ULONG HwLegacyResourceCount
;
680 PVIDEO_HW_LEGACYRESOURCES HwGetLegacyResources
;
681 BOOLEAN AllowEarlyEnumeration
;
683 } VIDEO_HW_INITIALIZATION_DATA
, *PVIDEO_HW_INITIALIZATION_DATA
;
685 typedef struct _I2C_FNC_TABLE
{
687 IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine
;
688 IN PVIDEO_WRITE_DATA_LINE WriteDataLine
;
689 IN PVIDEO_READ_CLOCK_LINE ReadClockLine
;
690 IN PVIDEO_READ_DATA_LINE ReadDataLine
;
691 IN PVIDEO_WAIT_VSYNC_ACTIVE WaitVsync
;
693 } I2C_FNC_TABLE
, *PI2C_FNC_TABLE
;
695 typedef struct _DDC_CONTROL
{
697 IN I2C_CALLBACKS I2CCallbacks
;
698 IN UCHAR EdidSegment
;
699 } DDC_CONTROL
, *PDDC_CONTROL
;
701 /* VideoPortQueryServices.ServicesType constants */
702 typedef enum _VIDEO_PORT_SERVICES
{
703 VideoPortServicesAGP
= 1,
704 VideoPortServicesI2C
,
705 VideoPortServicesHeadless
,
706 VideoPortServicesInt10
,
707 VideoPortServicesDebugReport
,
708 VideoPortServicesWCMemoryProtection
709 } VIDEO_PORT_SERVICES
;
711 typedef struct _VIDEO_PORT_AGP_INTERFACE
{
715 PINTERFACE_REFERENCE InterfaceReference
;
716 PINTERFACE_DEREFERENCE InterfaceDereference
;
717 PAGP_RESERVE_PHYSICAL AgpReservePhysical
;
718 PAGP_RELEASE_PHYSICAL AgpReleasePhysical
;
719 PAGP_COMMIT_PHYSICAL AgpCommitPhysical
;
720 PAGP_FREE_PHYSICAL AgpFreePhysical
;
721 PAGP_RESERVE_VIRTUAL AgpReserveVirtual
;
722 PAGP_RELEASE_VIRTUAL AgpReleaseVirtual
;
723 PAGP_COMMIT_VIRTUAL AgpCommitVirtual
;
724 PAGP_FREE_VIRTUAL AgpFreeVirtual
;
725 ULONGLONG AgpAllocationLimit
;
726 } VIDEO_PORT_AGP_INTERFACE
, *PVIDEO_PORT_AGP_INTERFACE
;
728 typedef struct _VIDEO_PORT_AGP_INTERFACE_2
{
732 OUT PINTERFACE_REFERENCE InterfaceReference
;
733 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
734 OUT PAGP_RESERVE_PHYSICAL AgpReservePhysical
;
735 OUT PAGP_RELEASE_PHYSICAL AgpReleasePhysical
;
736 OUT PAGP_COMMIT_PHYSICAL AgpCommitPhysical
;
737 OUT PAGP_FREE_PHYSICAL AgpFreePhysical
;
738 OUT PAGP_RESERVE_VIRTUAL AgpReserveVirtual
;
739 OUT PAGP_RELEASE_VIRTUAL AgpReleaseVirtual
;
740 OUT PAGP_COMMIT_VIRTUAL AgpCommitVirtual
;
741 OUT PAGP_FREE_VIRTUAL AgpFreeVirtual
;
742 OUT ULONGLONG AgpAllocationLimit
;
743 OUT PAGP_SET_RATE AgpSetRate
;
744 } VIDEO_PORT_AGP_INTERFACE_2
, *PVIDEO_PORT_AGP_INTERFACE_2
;
746 typedef struct _VIDEO_PORT_I2C_INTERFACE
{
750 PINTERFACE_REFERENCE InterfaceReference
;
751 PINTERFACE_DEREFERENCE InterfaceDereference
;
756 } VIDEO_PORT_I2C_INTERFACE
, *PVIDEO_PORT_I2C_INTERFACE
;
758 typedef struct _VIDEO_PORT_I2C_INTERFACE_2
{
762 OUT PINTERFACE_REFERENCE InterfaceReference
;
763 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
764 OUT PI2C_START_2 I2CStart
;
765 OUT PI2C_STOP_2 I2CStop
;
766 OUT PI2C_WRITE_2 I2CWrite
;
767 OUT PI2C_READ_2 I2CRead
;
768 } VIDEO_PORT_I2C_INTERFACE_2
, *PVIDEO_PORT_I2C_INTERFACE_2
;
770 typedef struct _VIDEO_PORT_INT10_INTERFACE
{
774 OUT PINTERFACE_REFERENCE InterfaceReference
;
775 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
776 OUT PINT10_ALLOCATE_BUFFER Int10AllocateBuffer
;
777 OUT PINT10_FREE_BUFFER Int10FreeBuffer
;
778 OUT PINT10_READ_MEMORY Int10ReadMemory
;
779 OUT PINT10_WRITE_MEMORY Int10WriteMemory
;
780 OUT PINT10_CALL_BIOS Int10CallBios
;
781 } VIDEO_PORT_INT10_INTERFACE
, *PVIDEO_PORT_INT10_INTERFACE
;
783 typedef struct _VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE
{
787 OUT PINTERFACE_REFERENCE InterfaceReference
;
788 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
789 OUT PROTECT_WC_MEMORY VideoPortProtectWCMemory
;
790 OUT RESTORE_WC_MEMORY VideoPortRestoreWCMemory
;
791 } VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE
, *PVIDEO_PORT_WCMEMORYPROTECTION_INTERFACE
;
793 typedef struct _VPOSVERSIONINFO
{
795 OUT ULONG MajorVersion
;
796 OUT ULONG MinorVersion
;
797 OUT ULONG BuildNumber
;
798 OUT USHORT ServicePackMajor
;
799 OUT USHORT ServicePackMinor
;
800 } VPOSVERSIONINFO
, *PVPOSVERSIONINFO
;
802 typedef struct _VIDEO_PORT_DEBUG_REPORT_INTERFACE
{
806 OUT PINTERFACE_REFERENCE InterfaceReference
;
807 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
808 OUT
PVIDEO_DEBUG_REPORT (*DbgReportCreate
)(
809 IN PVOID HwDeviceExtension
,
811 IN ULONG_PTR ulpArg1
,
812 IN ULONG_PTR ulpArg2
,
813 IN ULONG_PTR ulpArg3
,
816 OUT
BOOLEAN (*DbgReportSecondaryData
)(
817 IN OUT PVIDEO_DEBUG_REPORT pReport
,
821 OUT
VOID (*DbgReportComplete
)(
822 IN OUT PVIDEO_DEBUG_REPORT pReport
824 } VIDEO_PORT_DEBUG_REPORT_INTERFACE
, *PVIDEO_PORT_DEBUG_REPORT_INTERFACE
;
826 /* Video port functions for miniports */
831 VideoPortAllocateBuffer(
832 IN PVOID HwDeviceExtension
,
839 VideoPortAcquireDeviceLock(
840 IN PVOID HwDeviceExtension
);
845 VideoPortCompareMemory(
853 VideoPortDDCMonitorHelper(
854 IN PVOID HwDeviceExtension
,
856 IN OUT PUCHAR EdidBuffer
,
857 IN ULONG EdidBufferSize
);
863 IN VIDEO_DEBUG_LEVEL DebugPrintLevel
,
864 IN PSTR DebugMessage
,
870 VideoPortDisableInterrupt(
871 IN PVOID HwDeviceExtension
);
876 VideoPortEnableInterrupt(
877 IN PVOID HwDeviceExtension
);
882 VideoPortEnumerateChildren(
883 IN PVOID HwDeviceExtension
,
889 VideoPortFreeDeviceBase(
890 IN PVOID HwDeviceExtension
,
891 IN PVOID MappedAddress
);
896 VideoPortGetAccessRanges(
897 IN PVOID HwDeviceExtension
,
898 IN ULONG NumRequestedResources
,
899 IN PIO_RESOURCE_DESCRIPTOR RequestedResources OPTIONAL
,
900 IN ULONG NumAccessRanges
,
901 OUT PVIDEO_ACCESS_RANGE AccessRanges
,
909 VideoPortGetAssociatedDeviceExtension(
910 IN PVOID DeviceObject
);
916 IN PVOID HwDeviceExtension
,
917 IN BUS_DATA_TYPE BusDataType
,
926 VideoPortGetCurrentIrql(VOID
);
931 VideoPortGetDeviceBase(
932 IN PVOID HwDeviceExtension
,
933 IN PHYSICAL_ADDRESS IoAddress
,
934 IN ULONG NumberOfUchars
,
940 VideoPortGetDeviceData(
941 IN PVOID HwDeviceExtension
,
942 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType
,
943 IN PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine
,
949 VideoPortGetRegistryParameters(
950 IN PVOID HwDeviceExtension
,
951 IN PWSTR ParameterName
,
952 IN UCHAR IsParameterFileName
,
953 IN PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine
,
959 VideoPortGetRomImage(
960 IN PVOID HwDeviceExtension
,
968 VideoPortGetVgaStatus(
969 IN PVOID HwDeviceExtension
,
970 OUT PULONG VgaStatus
);
975 VideoPortInterlockedDecrement(
981 VideoPortInterlockedExchange(
988 VideoPortInterlockedIncrement(
997 IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData
,
1004 IN PVOID HwDeviceExtension
,
1005 IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments
);
1011 IN PVOID HwDeviceExtension
,
1012 IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL
,
1013 IN VP_STATUS ErrorCode
,
1019 VideoPortMapBankedMemory(
1020 IN PVOID HwDeviceExtension
,
1021 IN PHYSICAL_ADDRESS PhysicalAddress
,
1022 IN OUT PULONG Length
,
1024 PVOID
*VirtualAddress
,
1026 UCHAR ReadWriteBank
,
1027 PBANKED_SECTION_ROUTINE BankRoutine
,
1034 IN PVOID HwDeviceExtension
,
1035 IN PHYSICAL_ADDRESS PhysicalAddress
,
1036 IN OUT PULONG Length
,
1037 IN PULONG InIoSpace
,
1038 IN OUT PVOID
*VirtualAddress
);
1043 VideoPortMoveMemory(
1044 IN PVOID Destination
,
1051 VideoPortQueryPerformanceCounter(
1052 IN PVOID HwDeviceExtension
,
1053 OUT PLONGLONG PerformanceFrequency OPTIONAL
);
1058 VideoPortQueryServices(
1059 IN PVOID HwDeviceExtension
,
1060 IN VIDEO_PORT_SERVICES ServicesType
,
1061 IN OUT PINTERFACE Interface
);
1067 IN PVOID HwDeviceExtension
,
1068 IN PMINIPORT_DPC_ROUTINE CallbackRoutine
,
1074 VideoPortReadPortBufferUchar(
1082 VideoPortReadPortBufferUlong(
1090 VideoPortReadPortBufferUshort(
1098 VideoPortReadPortUchar(
1104 VideoPortReadPortUlong(
1110 VideoPortReadPortUshort(
1116 VideoPortReadRegisterBufferUchar(
1124 VideoPortReadRegisterBufferUlong(
1132 VideoPortReadRegisterBufferUshort(
1133 IN PUSHORT Register
,
1140 VideoPortReadRegisterUchar(
1141 IN PUCHAR Register
);
1146 VideoPortReadRegisterUlong(
1147 IN PULONG Register
);
1152 VideoPortReadRegisterUshort(
1153 IN PUSHORT Register
);
1158 VideoPortReleaseBuffer(
1159 IN PVOID HwDeviceExtension
,
1165 VideoPortReleaseDeviceLock(
1166 IN PVOID HwDeviceExtension
);
1172 PVOID HwDeviceExtension
,
1180 VideoPortSetBusData(
1181 IN PVOID HwDeviceExtension
,
1182 IN BUS_DATA_TYPE BusDataType
,
1183 IN ULONG SlotNumber
,
1191 VideoPortSetRegistryParameters(
1192 IN PVOID HwDeviceExtension
,
1195 IN ULONG ValueLength
);
1200 VideoPortSetTrappedEmulatorPorts(
1201 IN PVOID HwDeviceExtension
,
1202 IN ULONG NumAccessRanges
,
1203 IN PVIDEO_ACCESS_RANGE AccessRange
);
1208 VideoPortStallExecution(
1209 IN ULONG Microseconds
);
1214 VideoPortStartTimer(
1215 IN PVOID HwDeviceExtension
);
1221 IN PVOID HwDeviceExtension
);
1226 VideoPortSynchronizeExecution(
1227 IN PVOID HwDeviceExtension
,
1228 IN VIDEO_SYNCHRONIZE_PRIORITY Priority
,
1229 IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine
,
1235 VideoPortUnmapMemory(
1236 IN PVOID HwDeviceExtension
,
1237 IN OUT PVOID VirtualAddress
,
1238 IN HANDLE ProcessHandle
);
1243 VideoPortVerifyAccessRanges(
1244 IN PVOID HwDeviceExtension
,
1245 IN ULONG NumAccessRanges
,
1246 IN PVIDEO_ACCESS_RANGE AccessRanges
);
1251 VideoPortWritePortBufferUchar(
1259 VideoPortWritePortBufferUlong(
1267 VideoPortWritePortBufferUshort(
1275 VideoPortWritePortUchar(
1282 VideoPortWritePortUlong(
1289 VideoPortWritePortUshort(
1296 VideoPortWriteRegisterBufferUchar(
1304 VideoPortWriteRegisterBufferUlong(
1312 VideoPortWriteRegisterBufferUshort(
1313 IN PUSHORT Register
,
1320 VideoPortWriteRegisterUchar(
1327 VideoPortWriteRegisterUlong(
1334 VideoPortWriteRegisterUshort(
1335 IN PUSHORT Register
,
1341 VideoPortZeroDeviceMemory(
1342 IN PVOID Destination
,
1348 VideoPortZeroMemory(
1349 IN PVOID Destination
,
1355 VideoPortAllocateContiguousMemory(
1356 IN PVOID HwDeviceExtension
,
1357 IN ULONG NumberOfBytes
,
1358 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
1363 VideoPortGetCommonBuffer(
1364 IN PVOID HwDeviceExtension
,
1365 IN ULONG DesiredLength
,
1367 OUT PPHYSICAL_ADDRESS LogicalAddress
,
1368 OUT PULONG pActualLength
,
1369 IN BOOLEAN CacheEnabled
);
1374 VideoPortFreeCommonBuffer(
1375 IN PVOID HwDeviceExtension
,
1377 IN PVOID VirtualAddress
,
1378 IN PHYSICAL_ADDRESS LogicalAddress
,
1379 IN BOOLEAN CacheEnabled
);
1385 IN PVOID HwDeviceExtension
,
1387 IN DMA_FLAGS DmaFlags
);
1393 IN PVOID HwDeviceExtension
,
1394 IN OUT PVIDEO_REQUEST_PACKET pVrp
,
1395 IN OUT PEVENT pUEvent
,
1396 IN PEVENT pDisplayEvent
,
1397 IN DMA_FLAGS DmaFlags
);
1402 VideoPortUnlockPages(
1403 IN PVOID hwDeviceExtension
,
1409 VideoPortSignalDmaComplete(
1410 IN PVOID HwDeviceExtension
,
1411 IN PDMA pDmaHandle
);
1417 IN PVOID HwDeviceExtension
,
1423 VideoPortGetDmaContext(
1424 IN PVOID HwDeviceExtension
,
1430 VideoPortSetDmaContext(
1431 IN PVOID HwDeviceExtension
,
1433 IN PVOID InstanceContext
);
1438 VideoPortGetBytesUsed(
1439 IN PVOID HwDeviceExtension
,
1445 VideoPortSetBytesUsed(
1446 IN PVOID HwDeviceExtension
,
1448 IN ULONG BytesUsed
);
1453 VideoPortAssociateEventsWithDmaHandle(
1454 IN PVOID HwDeviceExtension
,
1455 IN OUT PVIDEO_REQUEST_PACKET pVrp
,
1456 IN PVOID MappedUserEvent
,
1457 IN PVOID DisplayDriverEvent
);
1462 VideoPortMapDmaMemory(
1463 IN PVOID HwDeviceExtension
,
1464 IN PVIDEO_REQUEST_PACKET pVrp
,
1465 IN PHYSICAL_ADDRESS BoardAddress
,
1467 IN PULONG InIoSpace
,
1468 IN PVOID MappedUserEvent
,
1469 IN PVOID DisplayDriverEvent
,
1470 IN OUT PVOID
*VirtualAddress
);
1475 VideoPortUnmapDmaMemory(
1476 IN PVOID HwDeviceExtension
,
1477 IN PVOID VirtualAddress
,
1478 IN HANDLE ProcessHandle
,
1479 IN PDMA BoardMemoryHandle
);
1484 VideoPortCreateSecondaryDisplay(
1485 IN PVOID HwDeviceExtension
,
1486 IN OUT PVOID
*SecondaryDeviceExtension
,
1492 VideoPortGetDmaAdapter(
1493 IN PVOID HwDeviceExtension
,
1494 IN PVP_DEVICE_DESCRIPTION VpDeviceDescription
);
1499 VideoPortPutDmaAdapter(
1500 IN PVOID HwDeviceExtension
,
1501 IN PVP_DMA_ADAPTER VpDmaAdapter
);
1506 VideoPortAllocateCommonBuffer(
1507 IN PVOID HwDeviceExtension
,
1508 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1509 IN ULONG DesiredLength
,
1510 OUT PPHYSICAL_ADDRESS LogicalAddress
,
1511 IN BOOLEAN CacheEnabled
,
1517 VideoPortReleaseCommonBuffer(
1518 IN PVOID HwDeviceExtension
,
1519 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1521 IN PHYSICAL_ADDRESS LogicalAddress
,
1522 IN PVOID VirtualAddress
,
1523 IN BOOLEAN CacheEnabled
);
1528 VideoPortLockBuffer(
1529 IN PVOID HwDeviceExtension
,
1530 IN PVOID BaseAddress
,
1532 IN VP_LOCK_OPERATION Operation
);
1537 VideoPortUnLockBuffer(
1538 IN PVOID HwDeviceExtension
,
1545 IN PVOID HwDeviceExtension
,
1546 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1549 IN OUT PULONG pLength
,
1550 IN PEXECUTE_DMA ExecuteDmaRoutine
,
1552 IN BOOLEAN WriteToDevice
);
1557 VideoPortCompleteDma(
1558 IN PVOID HwDeviceExtension
,
1559 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1560 IN PVP_SCATTER_GATHER_LIST VpScatterGather
,
1561 IN BOOLEAN WriteToDevice
);
1566 VideoPortCreateEvent(
1567 IN PVOID HwDeviceExtension
,
1570 OUT PEVENT
*ppEvent
);
1575 VideoPortDeleteEvent(
1576 IN PVOID HwDeviceExtension
,
1583 IN PVOID HwDeviceExtension
,
1589 VideoPortClearEvent(
1590 IN PVOID HwDeviceExtension
,
1596 VideoPortReadStateEvent(
1597 IN PVOID HwDeviceExtension
,
1603 VideoPortWaitForSingleObject(
1604 IN PVOID HwDeviceExtension
,
1606 IN PLARGE_INTEGER Timeout OPTIONAL
);
1611 VideoPortAllocatePool(
1612 IN PVOID HwDeviceExtension
,
1613 IN VP_POOL_TYPE PoolType
,
1614 IN SIZE_T NumberOfBytes
,
1621 IN PVOID HwDeviceExtension
,
1627 VideoPortCreateSpinLock(
1628 IN PVOID HwDeviceExtension
,
1629 OUT PSPIN_LOCK
*SpinLock
);
1634 VideoPortDeleteSpinLock(
1635 IN PVOID HwDeviceExtension
,
1636 IN PSPIN_LOCK SpinLock
);
1641 VideoPortAcquireSpinLock(
1642 IN PVOID HwDeviceExtension
,
1643 IN PSPIN_LOCK SpinLock
,
1644 OUT PUCHAR OldIrql
);
1649 VideoPortAcquireSpinLockAtDpcLevel(
1650 IN PVOID HwDeviceExtension
,
1651 IN PSPIN_LOCK SpinLock
);
1656 VideoPortReleaseSpinLock(
1657 IN PVOID HwDeviceExtension
,
1658 IN PSPIN_LOCK SpinLock
,
1664 VideoPortReleaseSpinLockFromDpcLevel(
1665 IN PVOID HwDeviceExtension
,
1666 IN PSPIN_LOCK SpinLock
);
1671 VideoPortQuerySystemTime(
1672 OUT PLARGE_INTEGER CurrentTime
);
1677 VideoPortCheckForDeviceExistence(
1678 IN PVOID HwDeviceExtension
,
1681 IN UCHAR RevisionId
,
1682 IN USHORT SubVendorId
,
1683 IN USHORT SubSystemId
,
1689 VideoPortGetAssociatedDeviceID(
1690 IN PVOID DeviceObject
);
1695 VideoPortFlushRegistry(
1696 PVOID HwDeviceExtension
);
1701 VideoPortGetVersion(
1702 IN PVOID HwDeviceExtension
,
1703 IN OUT PVPOSVERSIONINFO pVpOsVersionInfo
);
1708 VideoPortIsNoVesa(VOID
);
1713 VideoPortRegisterBugcheckCallback(
1714 IN PVOID HwDeviceExtension
,
1715 IN ULONG BugcheckCode
,
1716 IN PVIDEO_BUGCHECK_CALLBACK Callback
,
1717 IN ULONG BugcheckDataSize
);
1722 VideoPortDbgReportCreate(
1723 IN PVOID HwDeviceExtension
,
1725 IN ULONG_PTR ulpArg1
,
1726 IN ULONG_PTR ulpArg2
,
1727 IN ULONG_PTR ulpArg3
,
1728 IN ULONG_PTR ulpArg4
);
1733 VideoPortDbgReportSecondaryData(
1734 IN OUT PVIDEO_DEBUG_REPORT pReport
,
1736 IN ULONG ulDataSize
);
1741 VideoPortDbgReportComplete(
1742 IN OUT PVIDEO_DEBUG_REPORT pReport
);