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.
41 #define ALLOC_PRAGMA 1
44 #if defined(_VIDEOPORT_)
47 #define VPAPI DECLSPEC_IMPORT
51 #define PAGED_CODE() \
52 if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) { \
53 VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \
70 #endif /* _NTOSDEF_ */
73 #define VideoDebugPrint(x) VideoPortDebugPrint x
75 #define VideoDebugPrint(x)
78 #define GET_VIDEO_PHYSICAL_ADDRESS(scatterList, \
84 ULONG_PTR byteOffset; \
86 byteOffset = (PCHAR) VirtualAddress - (PCHAR)InputBuffer; \
87 while (byteOffset >= scatterList->Length) { \
88 byteOffset -= scatterList->Length; \
91 *pLength = scatterList->Length - byteOffset; \
92 Address = (ULONG_PTR) (scatterList->PhysicalAddress + byteOffset); \
95 #define GET_VIDEO_SCATTERGATHER(ppDma) (**(PVRB_SG **)ppDma)
97 /* VIDEO_ACCESS_RANGE.RangePassive */
98 #define VIDEO_RANGE_PASSIVE_DECODE 1
99 #define VIDEO_RANGE_10_BIT_DECODE 2
101 #define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO FIELD_OFFSET(VIDEO_PORT_CONFIG_INFO, Master)
102 #define SIZE_OF_WXP_VIDEO_PORT_CONFIG_INFO sizeof(VIDEO_PORT_CONFIG_INFO)
104 #define SET_USER_EVENT 0x01
105 #define SET_DISPLAY_EVENT 0x02
107 #define EVENT_TYPE_MASK 1
108 #define SYNCHRONIZATION_EVENT 0
109 #define NOTIFICATION_EVENT 1
111 #define INITIAL_EVENT_STATE_MASK 2
112 #define INITIAL_EVENT_NOT_SIGNALED 0
113 #define INITIAL_EVENT_SIGNALED 2
115 #define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF
117 #define VIDEO_INVALID_CHILD_ID 0xFFFFFFFF
119 #define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA FIELD_OFFSET(VIDEO_HW_INITIALIZATION_DATA, HwStartDma)
120 #define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA FIELD_OFFSET(VIDEO_HW_INITIALIZATION_DATA, Reserved)
121 #define SIZE_OF_WXP_VIDEO_HW_INITIALIZATION_DATA (SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA + sizeof(ULONG))
123 #define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1
124 #define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2
125 #define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1
126 #define VIDEO_PORT_I2C_INTERFACE_VERSION_2 2
127 #define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1
128 #define VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE_VERSION_1 1
129 #define VIDEO_PORT_DEBUG_REPORT_INTERFACE_VERSION_1 1
131 /* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */
132 #define VIDEO_MEMORY_SPACE_MEMORY 0x00
133 #define VIDEO_MEMORY_SPACE_IO 0x01
134 #define VIDEO_MEMORY_SPACE_USER_MODE 0x02
135 #define VIDEO_MEMORY_SPACE_DENSE 0x04
136 #define VIDEO_MEMORY_SPACE_P6CACHE 0x08
138 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */
139 #define VIDEO_ENUM_MORE_DEVICES ERROR_CONTINUE
140 #define VIDEO_ENUM_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES
141 #define VIDEO_ENUM_INVALID_DEVICE ERROR_INVALID_NAME
143 #define DEVICE_VGA_ENABLED 1
145 /* VideoPortCheckForDeviceExistence.Flags constants */
146 #define CDE_USE_SUBSYSTEM_IDS 0x00000001
147 #define CDE_USE_REVISION 0x00000002
149 #define BUGCHECK_DATA_SIZE_RESERVED 48
151 #define VIDEO_DEBUG_REPORT_MAX_SIZE 0x8000
153 typedef LONG VP_STATUS
, *PVP_STATUS
;
154 typedef ULONG DMA_EVENT_FLAGS
;
156 typedef struct _VIDEO_PORT_SPIN_LOCK
*PSPIN_LOCK
;
157 typedef struct _VIDEO_DEBUG_REPORT
*PVIDEO_DEBUG_REPORT
;
158 typedef struct __DMA_PARAMETERS
*PDMA
;
159 typedef struct __VP_DMA_ADAPTER
*PVP_DMA_ADAPTER
;
162 (NTAPI
*PVIDEO_PORT_GET_PROC_ADDRESS
)(
163 IN PVOID HwDeviceExtension
,
164 IN PUCHAR FunctionName
);
166 typedef struct _VIDEO_PORT_CONFIG_INFO
{
168 ULONG SystemIoBusNumber
;
169 INTERFACE_TYPE AdapterInterfaceType
;
170 ULONG BusInterruptLevel
;
171 ULONG BusInterruptVector
;
172 KINTERRUPT_MODE InterruptMode
;
173 ULONG NumEmulatorAccessEntries
;
174 PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries
;
175 ULONG_PTR EmulatorAccessEntriesContext
;
176 PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress
;
177 ULONG VdmPhysicalVideoMemoryLength
;
178 ULONG HardwareStateSize
;
182 UCHAR InterruptShareable
;
187 BOOLEAN NeedPhysicalAddresses
;
189 ULONG MaximumTransferLength
;
190 ULONG NumberOfPhysicalBreaks
;
191 BOOLEAN ScatterGather
;
192 ULONG MaximumScatterGatherChunkSize
;
193 PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress
;
194 PWSTR DriverRegistryPath
;
195 ULONGLONG SystemMemorySize
;
196 } VIDEO_PORT_CONFIG_INFO
, *PVIDEO_PORT_CONFIG_INFO
;
199 (NTAPI
*PVIDEO_HW_FIND_ADAPTER
)(
200 IN PVOID HwDeviceExtension
,
202 IN PWSTR ArgumentString
,
203 IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo
,
207 (NTAPI
*PVIDEO_HW_INITIALIZE
)(
208 IN PVOID HwDeviceExtension
);
211 (NTAPI
*PVIDEO_HW_INTERRUPT
)(
212 IN PVOID HwDeviceExtension
);
214 typedef struct _VIDEO_ACCESS_RANGE
{
215 PHYSICAL_ADDRESS RangeStart
;
217 UCHAR RangeInIoSpace
;
219 UCHAR RangeShareable
;
221 } VIDEO_ACCESS_RANGE
, *PVIDEO_ACCESS_RANGE
;
224 (NTAPI
*PVIDEO_HW_LEGACYRESOURCES
)(
227 IN OUT PVIDEO_ACCESS_RANGE
*LegacyResourceList
,
228 IN OUT PULONG LegacyResourceCount
);
230 typedef enum _HW_DMA_RETURN
{
233 } HW_DMA_RETURN
, *PHW_DMA_RETURN
;
235 typedef HW_DMA_RETURN
236 (NTAPI
*PVIDEO_HW_START_DMA
)(
237 PVOID HwDeviceExtension
,
240 typedef struct _VP_SCATTER_GATHER_ELEMENT
{
241 PHYSICAL_ADDRESS Address
;
244 } VP_SCATTER_GATHER_ELEMENT
, *PVP_SCATTER_GATHER_ELEMENT
;
246 typedef struct _VP_SCATTER_GATHER_LIST
{
247 ULONG NumberOfElements
;
249 VP_SCATTER_GATHER_ELEMENT Elements
[0];
250 } VP_SCATTER_GATHER_LIST
, *PVP_SCATTER_GATHER_LIST
;
253 (NTAPI
*PEXECUTE_DMA
)(
254 IN PVOID HwDeviceExtension
,
255 IN PVP_DMA_ADAPTER VpDmaAdapter
,
256 IN PVP_SCATTER_GATHER_LIST SGList
,
259 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */
260 typedef struct _VIDEO_CHILD_ENUM_INFO
{
262 ULONG ChildDescriptorSize
;
265 PVOID ChildHwDeviceExtension
;
266 } VIDEO_CHILD_ENUM_INFO
, *PVIDEO_CHILD_ENUM_INFO
;
268 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */
269 typedef enum _VIDEO_CHILD_TYPE
{
274 } VIDEO_CHILD_TYPE
, *PVIDEO_CHILD_TYPE
;
277 (NTAPI
*PVIDEO_HW_GET_CHILD_DESCRIPTOR
)(
278 IN PVOID HwDeviceExtension
,
279 IN PVIDEO_CHILD_ENUM_INFO ChildEnumInfo
,
280 OUT PVIDEO_CHILD_TYPE VideoChildType
,
281 OUT PUCHAR pChildDescriptor
,
286 (NTAPI
*PVIDEO_HW_POWER_SET
)(
287 IN PVOID HwDeviceExtension
,
289 IN PVIDEO_POWER_MANAGEMENT VideoPowerControl
);
292 (NTAPI
*PVIDEO_HW_POWER_GET
)(
293 IN PVOID HwDeviceExtension
,
295 IN OUT PVIDEO_POWER_MANAGEMENT VideoPowerControl
);
297 typedef struct _QUERY_INTERFACE
{
298 CONST GUID
*InterfaceType
;
301 PINTERFACE Interface
;
302 PVOID InterfaceSpecificData
;
303 } QUERY_INTERFACE
, *PQUERY_INTERFACE
;
306 (NTAPI
*PVIDEO_HW_QUERY_INTERFACE
)(
307 IN PVOID HwDeviceExtension
,
308 IN OUT PQUERY_INTERFACE QueryInterface
);
311 (NTAPI
*PVIDEO_HW_CHILD_CALLBACK
)(
312 PVOID HwDeviceExtension
,
313 PVOID ChildDeviceExtension
);
316 (NTAPI
*PVIDEO_HW_RESET_HW
)(
317 IN PVOID HwDeviceExtension
,
321 typedef struct _STATUS_BLOCK
{
322 _ANONYMOUS_UNION
union {
326 ULONG_PTR Information
;
327 } STATUS_BLOCK
, *PSTATUS_BLOCK
;
329 typedef struct _VIDEO_REQUEST_PACKET
{
331 PSTATUS_BLOCK StatusBlock
;
333 ULONG InputBufferLength
;
335 ULONG OutputBufferLength
;
336 } VIDEO_REQUEST_PACKET
, *PVIDEO_REQUEST_PACKET
;
339 (NTAPI
*PVIDEO_HW_START_IO
)(
340 IN PVOID HwDeviceExtension
,
341 IN PVIDEO_REQUEST_PACKET RequestPacket
);
344 (NTAPI
*PVIDEO_HW_TIMER
)(
345 IN PVOID HwDeviceExtension
);
348 (NTAPI
*PVIDEO_WRITE_CLOCK_LINE
)(
349 PVOID HwDeviceExtension
,
353 (NTAPI
*PVIDEO_WRITE_DATA_LINE
)(
354 PVOID HwDeviceExtension
,
358 (NTAPI
*PVIDEO_READ_CLOCK_LINE
)(
359 PVOID HwDeviceExtension
);
362 (NTAPI
*PVIDEO_READ_DATA_LINE
)(
363 PVOID HwDeviceExtension
);
366 (NTAPI
*PVIDEO_WAIT_VSYNC_ACTIVE
)(
367 PVOID HwDeviceExtension
);
369 typedef struct _I2C_CALLBACKS
{
370 IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine
;
371 IN PVIDEO_WRITE_DATA_LINE WriteDataLine
;
372 IN PVIDEO_READ_CLOCK_LINE ReadClockLine
;
373 IN PVIDEO_READ_DATA_LINE ReadDataLine
;
374 } I2C_CALLBACKS
, *PI2C_CALLBACKS
;
378 IN PVOID HwDeviceExtension
,
379 IN PI2C_CALLBACKS I2CCallbacks
);
383 IN PVOID HwDeviceExtension
,
384 IN PI2C_CALLBACKS I2CCallbacks
);
388 IN PVOID HwDeviceExtension
,
389 IN PI2C_CALLBACKS I2CCallbacks
,
395 IN PVOID HwDeviceExtension
,
396 IN PI2C_CALLBACKS I2CCallbacks
,
400 typedef struct _VIDEO_I2C_CONTROL
{
401 IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine
;
402 IN PVIDEO_WRITE_DATA_LINE WriteDataLine
;
403 IN PVIDEO_READ_CLOCK_LINE ReadClockLine
;
404 IN PVIDEO_READ_DATA_LINE ReadDataLine
;
406 } VIDEO_I2C_CONTROL
, *PVIDEO_I2C_CONTROL
;
409 (NTAPI
*PI2C_START_2
)(
410 IN PVOID HwDeviceExtension
,
411 IN PVIDEO_I2C_CONTROL I2CControl
);
414 (NTAPI
*PI2C_STOP_2
)(
415 IN PVOID HwDeviceExtension
,
416 IN PVIDEO_I2C_CONTROL I2CControl
);
419 (NTAPI
*PI2C_WRITE_2
)(
420 IN PVOID HwDeviceExtension
,
421 IN PVIDEO_I2C_CONTROL I2CControl
,
426 (NTAPI
*PI2C_READ_2
)(
427 IN PVOID HwDeviceExtension
,
428 IN PVIDEO_I2C_CONTROL I2CControl
,
431 IN BOOLEAN EndOfRead
);
433 typedef struct _INT10_BIOS_ARGUMENTS
{
443 } INT10_BIOS_ARGUMENTS
, *PINT10_BIOS_ARGUMENTS
;
446 (NTAPI
*PINT10_CALL_BIOS
)(
448 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments
);
451 (NTAPI
*PINT10_ALLOCATE_BUFFER
)(
455 IN OUT PULONG Length
);
458 (NTAPI
*PINT10_FREE_BUFFER
)(
464 (NTAPI
*PINT10_READ_MEMORY
)(
472 (NTAPI
*PINT10_WRITE_MEMORY
)(
480 (NTAPI
*PROTECT_WC_MEMORY
)(
482 IN PVOID HwDeviceExtension
);
485 (NTAPI
*RESTORE_WC_MEMORY
)(
487 IN PVOID HwDeviceExtension
);
489 typedef enum _VIDEO_DEVICE_DATA_TYPE
{
495 } VIDEO_DEVICE_DATA_TYPE
, *PVIDEO_DEVICE_DATA_TYPE
;
498 (NTAPI
*PMINIPORT_QUERY_DEVICE_ROUTINE
)(
499 IN PVOID HwDeviceExtension
,
501 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType
,
503 IN ULONG IdentifierLength
,
504 IN PVOID ConfigurationData
,
505 IN ULONG ConfigurationDataLength
,
506 IN OUT PVOID ComponentInformation
,
507 IN ULONG ComponentInformationLength
);
510 (NTAPI
*PMINIPORT_GET_REGISTRY_ROUTINE
)(
511 IN PVOID HwDeviceExtension
,
513 IN OUT PWSTR ValueName
,
514 IN OUT PVOID ValueData
,
515 IN ULONG ValueLength
);
518 (NTAPI
*PMINIPORT_DPC_ROUTINE
)(
519 IN PVOID HwDeviceExtension
,
523 (NTAPI
*PMINIPORT_SYNCHRONIZE_ROUTINE
)(
527 (NTAPI
*PVIDEO_BUGCHECK_CALLBACK
)(
528 IN PVOID HwDeviceExtension
,
529 IN ULONG BugcheckCode
,
531 IN ULONG BufferSize
);
533 /* VideoPortSynchronizeExecution.Priority constants */
534 typedef enum VIDEO_SYNCHRONIZE_PRIORITY
{
538 } VIDEO_SYNCHRONIZE_PRIORITY
, *PVIDEO_SYNCHRONIZE_PRIORITY
;
540 /* VideoPortAllocatePool.PoolType constants */
541 typedef enum _VP_POOL_TYPE
{
544 VpNonPagedPoolCacheAligned
= 4,
545 VpPagedPoolCacheAligned
546 } VP_POOL_TYPE
, *PVP_POOL_TYPE
;
548 typedef enum _DMA_FLAGS
{
549 VideoPortUnlockAfterDma
= 1,
550 VideoPortKeepPagesLocked
,
554 typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA
{
555 INTERFACE_TYPE InterfaceType
;
567 } VIDEO_HARDWARE_CONFIGURATION_DATA
, *PVIDEO_HARDWARE_CONFIGURATION_DATA
;
569 typedef struct _VIDEO_X86_BIOS_ARGUMENTS
{
577 } VIDEO_X86_BIOS_ARGUMENTS
, *PVIDEO_X86_BIOS_ARGUMENTS
;
579 typedef enum VIDEO_DEBUG_LEVEL
{
584 } VIDEO_DEBUG_LEVEL
, *PVIDEO_DEBUG_LEVEL
;
589 (NTAPI
*PDRIVER_IO_PORT_UCHAR
)(
590 IN ULONG_PTR Context
,
596 (NTAPI
*PDRIVER_IO_PORT_UCHAR_STRING
)(
597 IN ULONG_PTR Context
,
601 IN ULONG DataLength
);
604 (NTAPI
*PDRIVER_IO_PORT_ULONG
)(
605 IN ULONG_PTR Context
,
611 (NTAPI
*PDRIVER_IO_PORT_ULONG_STRING
)(
612 IN ULONG_PTR Context
,
616 IN ULONG DataLength
);
619 (NTAPI
*PDRIVER_IO_PORT_USHORT
)(
620 IN ULONG_PTR Context
,
626 (NTAPI
*PDRIVER_IO_PORT_USHORT_STRING
)(
627 IN ULONG_PTR Context
,
631 IN ULONG DataLength
);
635 typedef struct __VRB_SG
{
636 __int64 PhysicalAddress
;
640 typedef enum _VP_LOCK_OPERATION
{
646 typedef struct _VP_DEVICE_DESCRIPTION
{
647 BOOLEAN ScatterGather
;
648 BOOLEAN Dma32BitAddresses
;
649 BOOLEAN Dma64BitAddresses
;
651 } VP_DEVICE_DESCRIPTION
, *PVP_DEVICE_DESCRIPTION
;
653 typedef struct _VIDEO_CHILD_STATE
{
656 } VIDEO_CHILD_STATE
, *PVIDEO_CHILD_STATE
;
658 typedef struct _VIDEO_CHILD_STATE_CONFIGURATION
{
660 VIDEO_CHILD_STATE ChildStateArray
[ANYSIZE_ARRAY
];
661 } VIDEO_CHILD_STATE_CONFIGURATION
, *PVIDEO_CHILD_STATE_CONFIGURATION
;
663 typedef struct _VIDEO_HW_INITIALIZATION_DATA
{
664 ULONG HwInitDataSize
;
665 INTERFACE_TYPE AdapterInterfaceType
;
666 PVIDEO_HW_FIND_ADAPTER HwFindAdapter
;
667 PVIDEO_HW_INITIALIZE HwInitialize
;
668 PVIDEO_HW_INTERRUPT HwInterrupt
;
669 PVIDEO_HW_START_IO HwStartIO
;
670 ULONG HwDeviceExtensionSize
;
671 ULONG StartingDeviceNumber
;
672 PVIDEO_HW_RESET_HW HwResetHw
;
673 PVIDEO_HW_TIMER HwTimer
;
674 PVIDEO_HW_START_DMA HwStartDma
;
675 PVIDEO_HW_POWER_SET HwSetPowerState
;
676 PVIDEO_HW_POWER_GET HwGetPowerState
;
677 PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor
;
678 PVIDEO_HW_QUERY_INTERFACE HwQueryInterface
;
679 ULONG HwChildDeviceExtensionSize
;
680 PVIDEO_ACCESS_RANGE HwLegacyResourceList
;
681 ULONG HwLegacyResourceCount
;
682 PVIDEO_HW_LEGACYRESOURCES HwGetLegacyResources
;
683 BOOLEAN AllowEarlyEnumeration
;
685 } VIDEO_HW_INITIALIZATION_DATA
, *PVIDEO_HW_INITIALIZATION_DATA
;
687 typedef struct _I2C_FNC_TABLE
{
689 IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine
;
690 IN PVIDEO_WRITE_DATA_LINE WriteDataLine
;
691 IN PVIDEO_READ_CLOCK_LINE ReadClockLine
;
692 IN PVIDEO_READ_DATA_LINE ReadDataLine
;
693 IN PVIDEO_WAIT_VSYNC_ACTIVE WaitVsync
;
695 } I2C_FNC_TABLE
, *PI2C_FNC_TABLE
;
697 typedef struct _DDC_CONTROL
{
699 IN I2C_CALLBACKS I2CCallbacks
;
700 IN UCHAR EdidSegment
;
701 } DDC_CONTROL
, *PDDC_CONTROL
;
703 /* VideoPortQueryServices.ServicesType constants */
704 typedef enum _VIDEO_PORT_SERVICES
{
705 VideoPortServicesAGP
= 1,
706 VideoPortServicesI2C
,
707 VideoPortServicesHeadless
,
708 VideoPortServicesInt10
,
709 VideoPortServicesDebugReport
,
710 VideoPortServicesWCMemoryProtection
711 } VIDEO_PORT_SERVICES
;
713 typedef struct _VIDEO_PORT_AGP_INTERFACE
{
717 PINTERFACE_REFERENCE InterfaceReference
;
718 PINTERFACE_DEREFERENCE InterfaceDereference
;
719 PAGP_RESERVE_PHYSICAL AgpReservePhysical
;
720 PAGP_RELEASE_PHYSICAL AgpReleasePhysical
;
721 PAGP_COMMIT_PHYSICAL AgpCommitPhysical
;
722 PAGP_FREE_PHYSICAL AgpFreePhysical
;
723 PAGP_RESERVE_VIRTUAL AgpReserveVirtual
;
724 PAGP_RELEASE_VIRTUAL AgpReleaseVirtual
;
725 PAGP_COMMIT_VIRTUAL AgpCommitVirtual
;
726 PAGP_FREE_VIRTUAL AgpFreeVirtual
;
727 ULONGLONG AgpAllocationLimit
;
728 } VIDEO_PORT_AGP_INTERFACE
, *PVIDEO_PORT_AGP_INTERFACE
;
730 typedef struct _VIDEO_PORT_AGP_INTERFACE_2
{
734 OUT PINTERFACE_REFERENCE InterfaceReference
;
735 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
736 OUT PAGP_RESERVE_PHYSICAL AgpReservePhysical
;
737 OUT PAGP_RELEASE_PHYSICAL AgpReleasePhysical
;
738 OUT PAGP_COMMIT_PHYSICAL AgpCommitPhysical
;
739 OUT PAGP_FREE_PHYSICAL AgpFreePhysical
;
740 OUT PAGP_RESERVE_VIRTUAL AgpReserveVirtual
;
741 OUT PAGP_RELEASE_VIRTUAL AgpReleaseVirtual
;
742 OUT PAGP_COMMIT_VIRTUAL AgpCommitVirtual
;
743 OUT PAGP_FREE_VIRTUAL AgpFreeVirtual
;
744 OUT ULONGLONG AgpAllocationLimit
;
745 OUT PAGP_SET_RATE AgpSetRate
;
746 } VIDEO_PORT_AGP_INTERFACE_2
, *PVIDEO_PORT_AGP_INTERFACE_2
;
748 typedef struct _VIDEO_PORT_I2C_INTERFACE
{
752 PINTERFACE_REFERENCE InterfaceReference
;
753 PINTERFACE_DEREFERENCE InterfaceDereference
;
758 } VIDEO_PORT_I2C_INTERFACE
, *PVIDEO_PORT_I2C_INTERFACE
;
760 typedef struct _VIDEO_PORT_I2C_INTERFACE_2
{
764 OUT PINTERFACE_REFERENCE InterfaceReference
;
765 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
766 OUT PI2C_START_2 I2CStart
;
767 OUT PI2C_STOP_2 I2CStop
;
768 OUT PI2C_WRITE_2 I2CWrite
;
769 OUT PI2C_READ_2 I2CRead
;
770 } VIDEO_PORT_I2C_INTERFACE_2
, *PVIDEO_PORT_I2C_INTERFACE_2
;
772 typedef struct _VIDEO_PORT_INT10_INTERFACE
{
776 OUT PINTERFACE_REFERENCE InterfaceReference
;
777 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
778 OUT PINT10_ALLOCATE_BUFFER Int10AllocateBuffer
;
779 OUT PINT10_FREE_BUFFER Int10FreeBuffer
;
780 OUT PINT10_READ_MEMORY Int10ReadMemory
;
781 OUT PINT10_WRITE_MEMORY Int10WriteMemory
;
782 OUT PINT10_CALL_BIOS Int10CallBios
;
783 } VIDEO_PORT_INT10_INTERFACE
, *PVIDEO_PORT_INT10_INTERFACE
;
785 typedef struct _VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE
{
789 OUT PINTERFACE_REFERENCE InterfaceReference
;
790 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
791 OUT PROTECT_WC_MEMORY VideoPortProtectWCMemory
;
792 OUT RESTORE_WC_MEMORY VideoPortRestoreWCMemory
;
793 } VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE
, *PVIDEO_PORT_WCMEMORYPROTECTION_INTERFACE
;
795 typedef struct _VPOSVERSIONINFO
{
797 OUT ULONG MajorVersion
;
798 OUT ULONG MinorVersion
;
799 OUT ULONG BuildNumber
;
800 OUT USHORT ServicePackMajor
;
801 OUT USHORT ServicePackMinor
;
802 } VPOSVERSIONINFO
, *PVPOSVERSIONINFO
;
804 typedef struct _VIDEO_PORT_DEBUG_REPORT_INTERFACE
{
808 OUT PINTERFACE_REFERENCE InterfaceReference
;
809 OUT PINTERFACE_DEREFERENCE InterfaceDereference
;
810 OUT
PVIDEO_DEBUG_REPORT (*DbgReportCreate
)(
811 IN PVOID HwDeviceExtension
,
813 IN ULONG_PTR ulpArg1
,
814 IN ULONG_PTR ulpArg2
,
815 IN ULONG_PTR ulpArg3
,
818 OUT
BOOLEAN (*DbgReportSecondaryData
)(
819 IN OUT PVIDEO_DEBUG_REPORT pReport
,
823 OUT
VOID (*DbgReportComplete
)(
824 IN OUT PVIDEO_DEBUG_REPORT pReport
826 } VIDEO_PORT_DEBUG_REPORT_INTERFACE
, *PVIDEO_PORT_DEBUG_REPORT_INTERFACE
;
828 /* Video port functions for miniports */
833 VideoPortAllocateBuffer(
834 IN PVOID HwDeviceExtension
,
841 VideoPortAcquireDeviceLock(
842 IN PVOID HwDeviceExtension
);
847 VideoPortCompareMemory(
855 VideoPortDDCMonitorHelper(
856 IN PVOID HwDeviceExtension
,
858 IN OUT PUCHAR EdidBuffer
,
859 IN ULONG EdidBufferSize
);
865 IN VIDEO_DEBUG_LEVEL DebugPrintLevel
,
866 IN PSTR DebugMessage
,
872 VideoPortDisableInterrupt(
873 IN PVOID HwDeviceExtension
);
878 VideoPortEnableInterrupt(
879 IN PVOID HwDeviceExtension
);
884 VideoPortEnumerateChildren(
885 IN PVOID HwDeviceExtension
,
891 VideoPortFreeDeviceBase(
892 IN PVOID HwDeviceExtension
,
893 IN PVOID MappedAddress
);
898 VideoPortGetAccessRanges(
899 IN PVOID HwDeviceExtension
,
900 IN ULONG NumRequestedResources
,
901 IN PIO_RESOURCE_DESCRIPTOR RequestedResources OPTIONAL
,
902 IN ULONG NumAccessRanges
,
903 OUT PVIDEO_ACCESS_RANGE AccessRanges
,
911 VideoPortGetAssociatedDeviceExtension(
912 IN PVOID DeviceObject
);
918 IN PVOID HwDeviceExtension
,
919 IN BUS_DATA_TYPE BusDataType
,
928 VideoPortGetCurrentIrql(VOID
);
933 VideoPortGetDeviceBase(
934 IN PVOID HwDeviceExtension
,
935 IN PHYSICAL_ADDRESS IoAddress
,
936 IN ULONG NumberOfUchars
,
942 VideoPortGetDeviceData(
943 IN PVOID HwDeviceExtension
,
944 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType
,
945 IN PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine
,
951 VideoPortGetRegistryParameters(
952 IN PVOID HwDeviceExtension
,
953 IN PWSTR ParameterName
,
954 IN UCHAR IsParameterFileName
,
955 IN PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine
,
961 VideoPortGetRomImage(
962 IN PVOID HwDeviceExtension
,
970 VideoPortGetVgaStatus(
971 IN PVOID HwDeviceExtension
,
972 OUT PULONG VgaStatus
);
977 VideoPortInterlockedDecrement(
983 VideoPortInterlockedExchange(
990 VideoPortInterlockedIncrement(
999 IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData
,
1000 IN PVOID HwContext
);
1006 IN PVOID HwDeviceExtension
,
1007 IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments
);
1013 IN PVOID HwDeviceExtension
,
1014 IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL
,
1015 IN VP_STATUS ErrorCode
,
1021 VideoPortMapBankedMemory(
1022 IN PVOID HwDeviceExtension
,
1023 IN PHYSICAL_ADDRESS PhysicalAddress
,
1024 IN OUT PULONG Length
,
1026 PVOID
*VirtualAddress
,
1028 UCHAR ReadWriteBank
,
1029 PBANKED_SECTION_ROUTINE BankRoutine
,
1036 IN PVOID HwDeviceExtension
,
1037 IN PHYSICAL_ADDRESS PhysicalAddress
,
1038 IN OUT PULONG Length
,
1039 IN PULONG InIoSpace
,
1040 IN OUT PVOID
*VirtualAddress
);
1045 VideoPortMoveMemory(
1046 IN PVOID Destination
,
1053 VideoPortQueryPerformanceCounter(
1054 IN PVOID HwDeviceExtension
,
1055 OUT PLONGLONG PerformanceFrequency OPTIONAL
);
1060 VideoPortQueryServices(
1061 IN PVOID HwDeviceExtension
,
1062 IN VIDEO_PORT_SERVICES ServicesType
,
1063 IN OUT PINTERFACE Interface
);
1069 IN PVOID HwDeviceExtension
,
1070 IN PMINIPORT_DPC_ROUTINE CallbackRoutine
,
1076 VideoPortReadPortBufferUchar(
1084 VideoPortReadPortBufferUlong(
1092 VideoPortReadPortBufferUshort(
1100 VideoPortReadPortUchar(
1106 VideoPortReadPortUlong(
1112 VideoPortReadPortUshort(
1118 VideoPortReadRegisterBufferUchar(
1126 VideoPortReadRegisterBufferUlong(
1134 VideoPortReadRegisterBufferUshort(
1135 IN PUSHORT Register
,
1142 VideoPortReadRegisterUchar(
1143 IN PUCHAR Register
);
1148 VideoPortReadRegisterUlong(
1149 IN PULONG Register
);
1154 VideoPortReadRegisterUshort(
1155 IN PUSHORT Register
);
1160 VideoPortReleaseBuffer(
1161 IN PVOID HwDeviceExtension
,
1167 VideoPortReleaseDeviceLock(
1168 IN PVOID HwDeviceExtension
);
1174 PVOID HwDeviceExtension
,
1182 VideoPortSetBusData(
1183 IN PVOID HwDeviceExtension
,
1184 IN BUS_DATA_TYPE BusDataType
,
1185 IN ULONG SlotNumber
,
1193 VideoPortSetRegistryParameters(
1194 IN PVOID HwDeviceExtension
,
1197 IN ULONG ValueLength
);
1202 VideoPortSetTrappedEmulatorPorts(
1203 IN PVOID HwDeviceExtension
,
1204 IN ULONG NumAccessRanges
,
1205 IN PVIDEO_ACCESS_RANGE AccessRange
);
1210 VideoPortStallExecution(
1211 IN ULONG Microseconds
);
1216 VideoPortStartTimer(
1217 IN PVOID HwDeviceExtension
);
1223 IN PVOID HwDeviceExtension
);
1228 VideoPortSynchronizeExecution(
1229 IN PVOID HwDeviceExtension
,
1230 IN VIDEO_SYNCHRONIZE_PRIORITY Priority
,
1231 IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine
,
1237 VideoPortUnmapMemory(
1238 IN PVOID HwDeviceExtension
,
1239 IN OUT PVOID VirtualAddress
,
1240 IN HANDLE ProcessHandle
);
1245 VideoPortVerifyAccessRanges(
1246 IN PVOID HwDeviceExtension
,
1247 IN ULONG NumAccessRanges
,
1248 IN PVIDEO_ACCESS_RANGE AccessRanges
);
1253 VideoPortWritePortBufferUchar(
1261 VideoPortWritePortBufferUlong(
1269 VideoPortWritePortBufferUshort(
1277 VideoPortWritePortUchar(
1284 VideoPortWritePortUlong(
1291 VideoPortWritePortUshort(
1298 VideoPortWriteRegisterBufferUchar(
1306 VideoPortWriteRegisterBufferUlong(
1314 VideoPortWriteRegisterBufferUshort(
1315 IN PUSHORT Register
,
1322 VideoPortWriteRegisterUchar(
1329 VideoPortWriteRegisterUlong(
1336 VideoPortWriteRegisterUshort(
1337 IN PUSHORT Register
,
1343 VideoPortZeroDeviceMemory(
1344 IN PVOID Destination
,
1350 VideoPortZeroMemory(
1351 IN PVOID Destination
,
1357 VideoPortAllocateContiguousMemory(
1358 IN PVOID HwDeviceExtension
,
1359 IN ULONG NumberOfBytes
,
1360 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
1365 VideoPortGetCommonBuffer(
1366 IN PVOID HwDeviceExtension
,
1367 IN ULONG DesiredLength
,
1369 OUT PPHYSICAL_ADDRESS LogicalAddress
,
1370 OUT PULONG pActualLength
,
1371 IN BOOLEAN CacheEnabled
);
1376 VideoPortFreeCommonBuffer(
1377 IN PVOID HwDeviceExtension
,
1379 IN PVOID VirtualAddress
,
1380 IN PHYSICAL_ADDRESS LogicalAddress
,
1381 IN BOOLEAN CacheEnabled
);
1387 IN PVOID HwDeviceExtension
,
1389 IN DMA_FLAGS DmaFlags
);
1395 IN PVOID HwDeviceExtension
,
1396 IN OUT PVIDEO_REQUEST_PACKET pVrp
,
1397 IN OUT PEVENT pUEvent
,
1398 IN PEVENT pDisplayEvent
,
1399 IN DMA_FLAGS DmaFlags
);
1404 VideoPortUnlockPages(
1405 IN PVOID hwDeviceExtension
,
1411 VideoPortSignalDmaComplete(
1412 IN PVOID HwDeviceExtension
,
1413 IN PDMA pDmaHandle
);
1419 IN PVOID HwDeviceExtension
,
1425 VideoPortGetDmaContext(
1426 IN PVOID HwDeviceExtension
,
1432 VideoPortSetDmaContext(
1433 IN PVOID HwDeviceExtension
,
1435 IN PVOID InstanceContext
);
1440 VideoPortGetBytesUsed(
1441 IN PVOID HwDeviceExtension
,
1447 VideoPortSetBytesUsed(
1448 IN PVOID HwDeviceExtension
,
1450 IN ULONG BytesUsed
);
1455 VideoPortAssociateEventsWithDmaHandle(
1456 IN PVOID HwDeviceExtension
,
1457 IN OUT PVIDEO_REQUEST_PACKET pVrp
,
1458 IN PVOID MappedUserEvent
,
1459 IN PVOID DisplayDriverEvent
);
1464 VideoPortMapDmaMemory(
1465 IN PVOID HwDeviceExtension
,
1466 IN PVIDEO_REQUEST_PACKET pVrp
,
1467 IN PHYSICAL_ADDRESS BoardAddress
,
1469 IN PULONG InIoSpace
,
1470 IN PVOID MappedUserEvent
,
1471 IN PVOID DisplayDriverEvent
,
1472 IN OUT PVOID
*VirtualAddress
);
1477 VideoPortUnmapDmaMemory(
1478 IN PVOID HwDeviceExtension
,
1479 IN PVOID VirtualAddress
,
1480 IN HANDLE ProcessHandle
,
1481 IN PDMA BoardMemoryHandle
);
1486 VideoPortCreateSecondaryDisplay(
1487 IN PVOID HwDeviceExtension
,
1488 IN OUT PVOID
*SecondaryDeviceExtension
,
1494 VideoPortGetDmaAdapter(
1495 IN PVOID HwDeviceExtension
,
1496 IN PVP_DEVICE_DESCRIPTION VpDeviceDescription
);
1501 VideoPortPutDmaAdapter(
1502 IN PVOID HwDeviceExtension
,
1503 IN PVP_DMA_ADAPTER VpDmaAdapter
);
1508 VideoPortAllocateCommonBuffer(
1509 IN PVOID HwDeviceExtension
,
1510 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1511 IN ULONG DesiredLength
,
1512 OUT PPHYSICAL_ADDRESS LogicalAddress
,
1513 IN BOOLEAN CacheEnabled
,
1519 VideoPortReleaseCommonBuffer(
1520 IN PVOID HwDeviceExtension
,
1521 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1523 IN PHYSICAL_ADDRESS LogicalAddress
,
1524 IN PVOID VirtualAddress
,
1525 IN BOOLEAN CacheEnabled
);
1530 VideoPortLockBuffer(
1531 IN PVOID HwDeviceExtension
,
1532 IN PVOID BaseAddress
,
1534 IN VP_LOCK_OPERATION Operation
);
1539 VideoPortUnlockBuffer(
1540 IN PVOID HwDeviceExtension
,
1547 IN PVOID HwDeviceExtension
,
1548 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1551 IN OUT PULONG pLength
,
1552 IN PEXECUTE_DMA ExecuteDmaRoutine
,
1554 IN BOOLEAN WriteToDevice
);
1559 VideoPortCompleteDma(
1560 IN PVOID HwDeviceExtension
,
1561 IN PVP_DMA_ADAPTER VpDmaAdapter
,
1562 IN PVP_SCATTER_GATHER_LIST VpScatterGather
,
1563 IN BOOLEAN WriteToDevice
);
1568 VideoPortCreateEvent(
1569 IN PVOID HwDeviceExtension
,
1572 OUT PEVENT
*ppEvent
);
1577 VideoPortDeleteEvent(
1578 IN PVOID HwDeviceExtension
,
1585 IN PVOID HwDeviceExtension
,
1591 VideoPortClearEvent(
1592 IN PVOID HwDeviceExtension
,
1598 VideoPortReadStateEvent(
1599 IN PVOID HwDeviceExtension
,
1605 VideoPortWaitForSingleObject(
1606 IN PVOID HwDeviceExtension
,
1608 IN PLARGE_INTEGER Timeout OPTIONAL
);
1613 VideoPortAllocatePool(
1614 IN PVOID HwDeviceExtension
,
1615 IN VP_POOL_TYPE PoolType
,
1616 IN SIZE_T NumberOfBytes
,
1623 IN PVOID HwDeviceExtension
,
1629 VideoPortCreateSpinLock(
1630 IN PVOID HwDeviceExtension
,
1631 OUT PSPIN_LOCK
*SpinLock
);
1636 VideoPortDeleteSpinLock(
1637 IN PVOID HwDeviceExtension
,
1638 IN PSPIN_LOCK SpinLock
);
1643 VideoPortAcquireSpinLock(
1644 IN PVOID HwDeviceExtension
,
1645 IN PSPIN_LOCK SpinLock
,
1646 OUT PUCHAR OldIrql
);
1651 VideoPortAcquireSpinLockAtDpcLevel(
1652 IN PVOID HwDeviceExtension
,
1653 IN PSPIN_LOCK SpinLock
);
1658 VideoPortReleaseSpinLock(
1659 IN PVOID HwDeviceExtension
,
1660 IN PSPIN_LOCK SpinLock
,
1666 VideoPortReleaseSpinLockFromDpcLevel(
1667 IN PVOID HwDeviceExtension
,
1668 IN PSPIN_LOCK SpinLock
);
1673 VideoPortQuerySystemTime(
1674 OUT PLARGE_INTEGER CurrentTime
);
1679 VideoPortCheckForDeviceExistence(
1680 IN PVOID HwDeviceExtension
,
1683 IN UCHAR RevisionId
,
1684 IN USHORT SubVendorId
,
1685 IN USHORT SubSystemId
,
1691 VideoPortGetAssociatedDeviceID(
1692 IN PVOID DeviceObject
);
1697 VideoPortFlushRegistry(
1698 PVOID HwDeviceExtension
);
1703 VideoPortGetVersion(
1704 IN PVOID HwDeviceExtension
,
1705 IN OUT PVPOSVERSIONINFO pVpOsVersionInfo
);
1710 VideoPortIsNoVesa(VOID
);
1715 VideoPortRegisterBugcheckCallback(
1716 IN PVOID HwDeviceExtension
,
1717 IN ULONG BugcheckCode
,
1718 IN PVIDEO_BUGCHECK_CALLBACK Callback
,
1719 IN ULONG BugcheckDataSize
);
1724 VideoPortDbgReportCreate(
1725 IN PVOID HwDeviceExtension
,
1727 IN ULONG_PTR ulpArg1
,
1728 IN ULONG_PTR ulpArg2
,
1729 IN ULONG_PTR ulpArg3
,
1730 IN ULONG_PTR ulpArg4
);
1735 VideoPortDbgReportSecondaryData(
1736 IN OUT PVIDEO_DEBUG_REPORT pReport
,
1738 IN ULONG ulDataSize
);
1743 VideoPortDbgReportComplete(
1744 IN OUT PVIDEO_DEBUG_REPORT pReport
);