Embed:
(wiki syntax)
Show/hide line numbers
video.h
00001 /* 00002 * video.h 00003 * 00004 * Video port and miniport driver interface 00005 * 00006 * This file is part of the w32api package. 00007 * 00008 * Contributors: 00009 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 00023 #ifndef __VIDEO_H 00024 #define __VIDEO_H 00025 00026 00027 #if __GNUC__ >=3 00028 #pragma GCC system_header 00029 #endif 00030 00031 #ifdef __WINDDI_H 00032 #error winddi.h cannot be included with video.h 00033 #else 00034 00035 #ifdef __cplusplus 00036 extern "C" { 00037 #endif 00038 00039 #include "ntddk.h" 00040 00041 #if defined(_VIDEOPORT_) 00042 #define VPAPI DECLSPEC_EXPORT 00043 #else 00044 #define VPAPI DECLSPEC_IMPORT 00045 #endif 00046 00047 #include "videoagp.h" 00048 #include "ntddvdeo.h" 00049 00050 00051 typedef LONG VP_STATUS; 00052 typedef VP_STATUS *PVP_STATUS; 00053 typedef struct __DMA_PARAMETERS * PDMA; 00054 typedef struct _VIDEO_PORT_EVENT *PEVENT; 00055 typedef struct _VIDEO_PORT_SPIN_LOCK *PSPIN_LOCK; 00056 typedef struct __VP_DMA_ADAPTER *PVP_DMA_ADAPTER; 00057 00058 #define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF 00059 00060 #define EVENT_TYPE_MASK 1 00061 #define SYNCHRONIZATION_EVENT 0 00062 #define NOTIFICATION_EVENT 1 00063 00064 #define INITIAL_EVENT_STATE_MASK 2 00065 #define INITIAL_EVENT_NOT_SIGNALED 0 00066 #define INITIAL_EVENT_SIGNALED 2 00067 00068 typedef enum VIDEO_DEBUG_LEVEL { 00069 Error = 0, 00070 Warn, 00071 Trace, 00072 Info 00073 } VIDEO_DEBUG_LEVEL, *PVIDEO_DEBUG_LEVEL; 00074 00075 typedef enum { 00076 VideoPortUnlockAfterDma = 1, 00077 VideoPortKeepPagesLocked, 00078 VideoPortDmaInitOnly 00079 } DMA_FLAGS; 00080 00081 typedef enum _HW_DMA_RETURN { 00082 DmaAsyncReturn, 00083 DmaSyncReturn 00084 } HW_DMA_RETURN, *PHW_DMA_RETURN; 00085 00086 typedef HW_DMA_RETURN 00087 (*PVIDEO_HW_START_DMA)( 00088 PVOID HwDeviceExtension, 00089 PDMA pDma); 00090 00091 00092 #ifdef DBG 00093 00094 #define PAGED_CODE() \ 00095 if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) \ 00096 { \ 00097 VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \ 00098 ASSERT(FALSE); \ 00099 } 00100 00101 #else 00102 00103 #define PAGED_CODE() 00104 00105 #endif 00106 00107 typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA { 00108 INTERFACE_TYPE InterfaceType; 00109 ULONG BusNumber; 00110 USHORT Version; 00111 USHORT Revision; 00112 USHORT Irql; 00113 USHORT Vector; 00114 ULONG ControlBase; 00115 ULONG ControlSize; 00116 ULONG CursorBase; 00117 ULONG CursorSize; 00118 ULONG FrameBase; 00119 ULONG FrameSize; 00120 } VIDEO_HARDWARE_CONFIGURATION_DATA, *PVIDEO_HARDWARE_CONFIGURATION_DATA; 00121 00122 #define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO 0x42 00123 #define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA 0x28 00124 #define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA 0x50 00125 00126 typedef enum _VIDEO_DEVICE_DATA_TYPE { 00127 VpMachineData = 0, 00128 VpCmosData, 00129 VpBusData, 00130 VpControllerData, 00131 VpMonitorData 00132 } VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE; 00133 00134 00135 00136 /* Video miniport driver functions */ 00137 00138 typedef struct _VP_SCATTER_GATHER_ELEMENT { 00139 PHYSICAL_ADDRESS Address; 00140 ULONG Length; 00141 ULONG_PTR Reserved; 00142 } VP_SCATTER_GATHER_ELEMENT, *PVP_SCATTER_GATHER_ELEMENT; 00143 00144 typedef struct _VP_SCATTER_GATHER_LIST { 00145 ULONG NumberOfElements; 00146 ULONG_PTR Reserved; 00147 VP_SCATTER_GATHER_ELEMENT Elements[0]; 00148 } VP_SCATTER_GATHER_LIST, *PVP_SCATTER_GATHER_LIST; 00149 00150 typedef VOID DDKAPI 00151 (*PEXECUTE_DMA)( 00152 /*IN*/ PVOID HwDeviceExtension, 00153 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter, 00154 /*IN*/ PVP_SCATTER_GATHER_LIST SGList, 00155 /*IN*/ PVOID Context); 00156 00157 typedef PVOID DDKAPI 00158 (*PVIDEO_PORT_GET_PROC_ADDRESS)( 00159 /*IN*/ PVOID HwDeviceExtension, 00160 /*IN*/ PUCHAR FunctionName); 00161 00162 typedef struct _VIDEO_PORT_CONFIG_INFO { 00163 ULONG Length; 00164 ULONG SystemIoBusNumber; 00165 INTERFACE_TYPE AdapterInterfaceType; 00166 ULONG BusInterruptLevel; 00167 ULONG BusInterruptVector; 00168 KINTERRUPT_MODE InterruptMode; 00169 ULONG NumEmulatorAccessEntries; 00170 PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries; 00171 ULONG_PTR EmulatorAccessEntriesContext; 00172 PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress; 00173 ULONG VdmPhysicalVideoMemoryLength; 00174 ULONG HardwareStateSize; 00175 ULONG DmaChannel; 00176 ULONG DmaPort; 00177 UCHAR DmaShareable; 00178 UCHAR InterruptShareable; 00179 BOOLEAN Master; 00180 DMA_WIDTH DmaWidth; 00181 DMA_SPEED DmaSpeed; 00182 BOOLEAN bMapBuffers; 00183 BOOLEAN NeedPhysicalAddresses; 00184 BOOLEAN DemandMode; 00185 ULONG MaximumTransferLength; 00186 ULONG NumberOfPhysicalBreaks; 00187 BOOLEAN ScatterGather; 00188 ULONG MaximumScatterGatherChunkSize; 00189 PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress; 00190 PWSTR DriverRegistryPath; 00191 ULONGLONG SystemMemorySize; 00192 } VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO; 00193 00194 typedef VP_STATUS DDKAPI 00195 (*PVIDEO_HW_FIND_ADAPTER)( 00196 /*IN*/ PVOID HwDeviceExtension, 00197 /*IN*/ PVOID HwContext, 00198 /*IN*/ PWSTR ArgumentString, 00199 /*IN OUT*/ PVIDEO_PORT_CONFIG_INFO ConfigInfo, 00200 /*OUT*/ PUCHAR Again); 00201 00202 typedef VP_STATUS DDKAPI 00203 (*PVIDEO_HW_POWER_GET)( 00204 /*IN*/ PVOID HwDeviceExtension, 00205 /*IN*/ ULONG HwId, 00206 /*IN OUT*/ PVIDEO_POWER_MANAGEMENT VideoPowerControl); 00207 00208 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */ 00209 #define VIDEO_ENUM_MORE_DEVICES ERROR_CONTINUE 00210 #define VIDEO_ENUM_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES 00211 #define VIDEO_ENUM_INVALID_DEVICE ERROR_INVALID_NAME 00212 00213 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */ 00214 typedef struct _VIDEO_CHILD_ENUM_INFO { 00215 ULONG Size; 00216 ULONG ChildDescriptorSize; 00217 ULONG ChildIndex; 00218 ULONG ACPIHwId; 00219 PVOID ChildHwDeviceExtension; 00220 } VIDEO_CHILD_ENUM_INFO, *PVIDEO_CHILD_ENUM_INFO; 00221 00222 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */ 00223 typedef enum _VIDEO_CHILD_TYPE { 00224 Monitor = 1, 00225 NonPrimaryChip, 00226 VideoChip, 00227 Other 00228 } VIDEO_CHILD_TYPE, *PVIDEO_CHILD_TYPE; 00229 00230 typedef VP_STATUS DDKAPI 00231 (*PVIDEO_HW_GET_CHILD_DESCRIPTOR)( 00232 /*IN*/ PVOID HwDeviceExtension, 00233 /*IN*/ PVIDEO_CHILD_ENUM_INFO ChildEnumInfo, 00234 /*OUT*/ PVIDEO_CHILD_TYPE VideoChildType, 00235 /*OUT*/ PUCHAR pChildDescriptor, 00236 /*OUT*/ PULONG UId, 00237 /*OUT*/ PULONG pUnused); 00238 00239 typedef BOOLEAN DDKAPI 00240 (*PVIDEO_HW_INITIALIZE)( 00241 /*IN*/ PVOID HwDeviceExtension); 00242 00243 typedef BOOLEAN DDKAPI 00244 (*PVIDEO_HW_INTERRUPT)( 00245 /*IN*/ PVOID HwDeviceExtension); 00246 00247 /* VIDEO_ACCESS_RANGE.RangePassive */ 00248 #define VIDEO_RANGE_PASSIVE_DECODE 1 00249 #define VIDEO_RANGE_10_BIT_DECODE 2 00250 00251 #ifndef VIDEO_ACCESS_RANGE_DEFINED /* also in miniport.h */ 00252 #define VIDEO_ACCESS_RANGE_DEFINED 00253 typedef struct _VIDEO_ACCESS_RANGE { 00254 PHYSICAL_ADDRESS RangeStart; 00255 ULONG RangeLength; 00256 UCHAR RangeInIoSpace; 00257 UCHAR RangeVisible; 00258 UCHAR RangeShareable; 00259 UCHAR RangePassive; 00260 } VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE; 00261 #endif 00262 00263 typedef VOID DDKAPI 00264 (*PVIDEO_HW_LEGACYRESOURCES)( 00265 /*IN*/ ULONG VendorId, 00266 /*IN*/ ULONG DeviceId, 00267 /*IN OUT*/ PVIDEO_ACCESS_RANGE *LegacyResourceList, 00268 /*IN OUT*/ PULONG LegacyResourceCount); 00269 00270 typedef VP_STATUS DDKAPI 00271 (*PMINIPORT_QUERY_DEVICE_ROUTINE)( 00272 /*IN*/ PVOID HwDeviceExtension, 00273 /*IN*/ PVOID Context, 00274 /*IN*/ VIDEO_DEVICE_DATA_TYPE DeviceDataType, 00275 /*IN*/ PVOID Identifier, 00276 /*IN*/ ULONG IdentifierLength, 00277 /*IN*/ PVOID ConfigurationData, 00278 /*IN*/ ULONG ConfigurationDataLength, 00279 /*IN OUT*/ PVOID ComponentInformation, 00280 /*IN*/ ULONG ComponentInformationLength); 00281 00282 typedef struct _QUERY_INTERFACE { 00283 CONST GUID *InterfaceType; 00284 USHORT Size; 00285 USHORT Version; 00286 PINTERFACE Interface; 00287 PVOID InterfaceSpecificData; 00288 } QUERY_INTERFACE, *PQUERY_INTERFACE; 00289 00290 typedef VP_STATUS DDKAPI 00291 (*PVIDEO_HW_QUERY_INTERFACE)( 00292 /*IN*/ PVOID HwDeviceExtension, 00293 /*IN OUT*/ PQUERY_INTERFACE QueryInterface); 00294 00295 typedef VP_STATUS DDKAPI 00296 (*PMINIPORT_GET_REGISTRY_ROUTINE)( 00297 /*IN*/ PVOID HwDeviceExtension, 00298 /*IN*/ PVOID Context, 00299 /*IN OUT*/ PWSTR ValueName, 00300 /*IN OUT*/ PVOID ValueData, 00301 /*IN*/ ULONG ValueLength); 00302 00303 typedef BOOLEAN DDKAPI 00304 (*PVIDEO_HW_RESET_HW)( 00305 /*IN*/ PVOID HwDeviceExtension, 00306 /*IN*/ ULONG Columns, 00307 /*IN*/ ULONG Rows); 00308 00309 typedef VP_STATUS DDKAPI 00310 (*PVIDEO_HW_POWER_SET)( 00311 /*IN*/ PVOID HwDeviceExtension, 00312 /*IN*/ ULONG HwId, 00313 /*IN*/ PVIDEO_POWER_MANAGEMENT VideoPowerControl); 00314 00315 typedef struct _STATUS_BLOCK { 00316 _ANONYMOUS_UNION union { 00317 VP_STATUS Status; 00318 PVOID Pointer; 00319 } DUMMYUNIONNAME; 00320 ULONG_PTR Information; 00321 } STATUS_BLOCK, *PSTATUS_BLOCK; 00322 00323 typedef struct _VIDEO_REQUEST_PACKET { 00324 ULONG IoControlCode; 00325 PSTATUS_BLOCK StatusBlock; 00326 PVOID InputBuffer; 00327 ULONG InputBufferLength; 00328 PVOID OutputBuffer; 00329 ULONG OutputBufferLength; 00330 } VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET; 00331 00332 typedef BOOLEAN DDKAPI 00333 (*PVIDEO_HW_START_IO)( 00334 /*IN*/ PVOID HwDeviceExtension, 00335 /*IN*/ PVIDEO_REQUEST_PACKET RequestPacket); 00336 00337 typedef BOOLEAN DDKAPI 00338 (*PMINIPORT_SYNCHRONIZE_ROUTINE)( 00339 /*IN*/ PVOID Context); 00340 00341 typedef VOID DDKAPI 00342 (*PVIDEO_HW_TIMER)( 00343 /*IN*/ PVOID HwDeviceExtension); 00344 00345 typedef VOID DDKAPI 00346 (*PMINIPORT_DPC_ROUTINE)( 00347 /*IN*/ PVOID HwDeviceExtension, 00348 /*IN*/ PVOID Context); 00349 00350 typedef VP_STATUS DDKAPI 00351 (*PDRIVER_IO_PORT_UCHAR)( 00352 /*IN*/ ULONG_PTR Context, 00353 /*IN*/ ULONG Port, 00354 /*IN*/ UCHAR AccessMode, 00355 /*IN*/ PUCHAR Data); 00356 00357 typedef VP_STATUS DDKAPI 00358 (*PDRIVER_IO_PORT_UCHAR_STRING)( 00359 /*IN*/ ULONG_PTR Context, 00360 /*IN*/ ULONG Port, 00361 /*IN*/ UCHAR AccessMode, 00362 /*IN*/ PUCHAR Data, 00363 /*IN*/ ULONG DataLength); 00364 00365 typedef VP_STATUS DDKAPI 00366 (*PDRIVER_IO_PORT_ULONG)( 00367 /*IN*/ ULONG_PTR Context, 00368 /*IN*/ ULONG Port, 00369 /*IN*/ UCHAR AccessMode, 00370 /*IN*/ PULONG Data); 00371 00372 typedef VP_STATUS DDKAPI 00373 (*PDRIVER_IO_PORT_ULONG_STRING)( 00374 /*IN*/ ULONG_PTR Context, 00375 /*IN*/ ULONG Port, 00376 /*IN*/ UCHAR AccessMode, 00377 /*IN*/ PULONG Data, 00378 /*IN*/ ULONG DataLength); 00379 00380 typedef VP_STATUS DDKAPI 00381 (*PDRIVER_IO_PORT_USHORT)( 00382 /*IN*/ ULONG_PTR Context, 00383 /*IN*/ ULONG Port, 00384 /*IN*/ UCHAR AccessMode, 00385 /*IN*/ PUSHORT Data); 00386 00387 typedef VP_STATUS DDKAPI 00388 (*PDRIVER_IO_PORT_USHORT_STRING)( 00389 /*IN*/ ULONG_PTR Context, 00390 /*IN*/ ULONG Port, 00391 /*IN*/ UCHAR AccessMode, 00392 /*IN*/ PUSHORT Data, 00393 /*IN*/ ULONG DataLength); 00394 00395 00396 00397 typedef struct _INT10_BIOS_ARGUMENTS { 00398 ULONG Eax; 00399 ULONG Ebx; 00400 ULONG Ecx; 00401 ULONG Edx; 00402 ULONG Esi; 00403 ULONG Edi; 00404 ULONG Ebp; 00405 USHORT SegDs; 00406 USHORT SegEs; 00407 } INT10_BIOS_ARGUMENTS, *PINT10_BIOS_ARGUMENTS; 00408 00409 typedef struct _VIDEO_CHILD_STATE { 00410 ULONG Id; 00411 ULONG State; 00412 } VIDEO_CHILD_STATE, *PVIDEO_CHILD_STATE; 00413 00414 typedef struct _VIDEO_CHILD_STATE_CONFIGURATION { 00415 ULONG Count; 00416 VIDEO_CHILD_STATE ChildStateArray[ANYSIZE_ARRAY]; 00417 } VIDEO_CHILD_STATE_CONFIGURATION, *PVIDEO_CHILD_STATE_CONFIGURATION; 00418 00419 typedef struct _VIDEO_HW_INITIALIZATION_DATA { 00420 ULONG HwInitDataSize; 00421 INTERFACE_TYPE AdapterInterfaceType; 00422 PVIDEO_HW_FIND_ADAPTER HwFindAdapter; 00423 PVIDEO_HW_INITIALIZE HwInitialize; 00424 PVIDEO_HW_INTERRUPT HwInterrupt; 00425 PVIDEO_HW_START_IO HwStartIO; 00426 ULONG HwDeviceExtensionSize; 00427 ULONG StartingDeviceNumber; 00428 PVIDEO_HW_RESET_HW HwResetHw; 00429 PVIDEO_HW_TIMER HwTimer; 00430 PVIDEO_HW_START_DMA HwStartDma; 00431 PVIDEO_HW_POWER_SET HwSetPowerState; 00432 PVIDEO_HW_POWER_GET HwGetPowerState; 00433 PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor; 00434 PVIDEO_HW_QUERY_INTERFACE HwQueryInterface; 00435 ULONG HwChildDeviceExtensionSize; 00436 PVIDEO_ACCESS_RANGE HwLegacyResourceList; 00437 ULONG HwLegacyResourceCount; 00438 PVIDEO_HW_LEGACYRESOURCES HwGetLegacyResources; 00439 BOOLEAN AllowEarlyEnumeration; 00440 ULONG Reserved; 00441 } VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA; 00442 00443 /* VIDEO_PORT_AGP_INTERFACE.Version contants */ 00444 #define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1 00445 00446 typedef struct _VIDEO_PORT_AGP_INTERFACE { 00447 SHORT Size; 00448 SHORT Version; 00449 PVOID Context; 00450 PINTERFACE_REFERENCE InterfaceReference; 00451 PINTERFACE_DEREFERENCE InterfaceDereference; 00452 PAGP_RESERVE_PHYSICAL AgpReservePhysical; 00453 PAGP_RELEASE_PHYSICAL AgpReleasePhysical; 00454 PAGP_COMMIT_PHYSICAL AgpCommitPhysical; 00455 PAGP_FREE_PHYSICAL AgpFreePhysical; 00456 PAGP_RESERVE_VIRTUAL AgpReserveVirtual; 00457 PAGP_RELEASE_VIRTUAL AgpReleaseVirtual; 00458 PAGP_COMMIT_VIRTUAL AgpCommitVirtual; 00459 PAGP_FREE_VIRTUAL AgpFreeVirtual; 00460 ULONGLONG AgpAllocationLimit; 00461 } VIDEO_PORT_AGP_INTERFACE, *PVIDEO_PORT_AGP_INTERFACE; 00462 00463 /* VIDEO_PORT_AGP_INTERFACE_2.Version constants */ 00464 #define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2 00465 00466 typedef struct _VIDEO_PORT_AGP_INTERFACE_2 { 00467 /*IN*/ USHORT Size; 00468 /*IN*/ USHORT Version; 00469 /*OUT*/ PVOID Context; 00470 /*OUT*/ PINTERFACE_REFERENCE InterfaceReference; 00471 /*OUT*/ PINTERFACE_DEREFERENCE InterfaceDereference; 00472 /*OUT*/ PAGP_RESERVE_PHYSICAL AgpReservePhysical; 00473 /*OUT*/ PAGP_RELEASE_PHYSICAL AgpReleasePhysical; 00474 /*OUT*/ PAGP_COMMIT_PHYSICAL AgpCommitPhysical; 00475 /*OUT*/ PAGP_FREE_PHYSICAL AgpFreePhysical; 00476 /*OUT*/ PAGP_RESERVE_VIRTUAL AgpReserveVirtual; 00477 /*OUT*/ PAGP_RELEASE_VIRTUAL AgpReleaseVirtual; 00478 /*OUT*/ PAGP_COMMIT_VIRTUAL AgpCommitVirtual; 00479 /*OUT*/ PAGP_FREE_VIRTUAL AgpFreeVirtual; 00480 /*OUT*/ ULONGLONG AgpAllocationLimit; 00481 /*OUT*/ PAGP_SET_RATE AgpSetRate; 00482 } VIDEO_PORT_AGP_INTERFACE_2, *PVIDEO_PORT_AGP_INTERFACE_2; 00483 00484 #define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1 00485 00486 typedef VOID DDKAPI 00487 (*PVIDEO_WRITE_CLOCK_LINE)( 00488 PVOID HwDeviceExtension, 00489 UCHAR Data); 00490 00491 typedef VOID DDKAPI 00492 (*PVIDEO_WRITE_DATA_LINE)( 00493 PVOID HwDeviceExtension, 00494 UCHAR Data); 00495 00496 typedef BOOLEAN DDKAPI 00497 (*PVIDEO_READ_CLOCK_LINE)( 00498 PVOID HwDeviceExtension); 00499 00500 typedef BOOLEAN DDKAPI 00501 (*PVIDEO_READ_DATA_LINE)( 00502 PVOID HwDeviceExtension); 00503 00504 typedef struct _I2C_CALLBACKS 00505 { 00506 /*IN*/ PVIDEO_WRITE_CLOCK_LINE WriteClockLine; 00507 /*IN*/ PVIDEO_WRITE_DATA_LINE WriteDataLine; 00508 /*IN*/ PVIDEO_READ_CLOCK_LINE ReadClockLine; 00509 /*IN*/ PVIDEO_READ_DATA_LINE ReadDataLine; 00510 } I2C_CALLBACKS, *PI2C_CALLBACKS; 00511 00512 typedef BOOLEAN DDKAPI 00513 (*PI2C_START)( 00514 /*IN*/ PVOID HwDeviceExtension, 00515 /*IN*/ PI2C_CALLBACKS I2CCallbacks); 00516 00517 typedef BOOLEAN DDKAPI 00518 (*PI2C_STOP)( 00519 /*IN*/ PVOID HwDeviceExtension, 00520 /*IN*/ PI2C_CALLBACKS I2CCallbacks); 00521 00522 typedef BOOLEAN DDKAPI 00523 (*PI2C_WRITE)( 00524 /*IN*/ PVOID HwDeviceExtension, 00525 /*IN*/ PI2C_CALLBACKS I2CCallbacks, 00526 /*IN*/ PUCHAR Buffer, 00527 /*IN*/ ULONG Length); 00528 00529 typedef BOOLEAN DDKAPI 00530 (*PI2C_READ)( 00531 /*IN*/ PVOID HwDeviceExtension, 00532 /*IN*/ PI2C_CALLBACKS I2CCallbacks, 00533 /*OUT*/ PUCHAR Buffer, 00534 /*IN*/ ULONG Length); 00535 00536 typedef struct _VIDEO_PORT_I2C_INTERFACE { 00537 USHORT Size; 00538 USHORT Version; 00539 PVOID Context; 00540 PINTERFACE_REFERENCE InterfaceReference; 00541 PINTERFACE_DEREFERENCE InterfaceDereference; 00542 PI2C_START I2CStart; 00543 PI2C_STOP I2CStop; 00544 PI2C_WRITE I2CWrite; 00545 PI2C_READ I2CRead; 00546 } VIDEO_PORT_I2C_INTERFACE, *PVIDEO_PORT_I2C_INTERFACE; 00547 00548 /* VIDEO_PORT_INT10_INTERFACE.Version constants */ 00549 #define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1 00550 00551 typedef VP_STATUS DDKAPI 00552 (*PINT10_ALLOCATE_BUFFER)( 00553 /*IN*/ PVOID Context, 00554 /*OUT*/ PUSHORT Seg, 00555 /*OUT*/ PUSHORT Off, 00556 /*IN OUT*/ PULONG Length); 00557 00558 typedef VP_STATUS DDKAPI 00559 (*PINT10_CALL_BIOS)( 00560 /*IN*/ PVOID Context, 00561 /*IN OUT*/ PINT10_BIOS_ARGUMENTS BiosArguments); 00562 00563 typedef VP_STATUS DDKAPI 00564 (*PINT10_FREE_BUFFER)( 00565 /*IN*/ PVOID Context, 00566 /*IN*/ USHORT Seg, 00567 /*IN*/ USHORT Off); 00568 00569 typedef VP_STATUS DDKAPI 00570 (*PINT10_READ_MEMORY)( 00571 /*IN*/ PVOID Context, 00572 /*IN*/ USHORT Seg, 00573 /*IN*/ USHORT Off, 00574 /*OUT*/ PVOID Buffer, 00575 /*IN*/ ULONG Length); 00576 00577 typedef VP_STATUS DDKAPI 00578 (*PINT10_WRITE_MEMORY)( 00579 /*IN*/ PVOID Context, 00580 /*IN*/ USHORT Seg, 00581 /*IN*/ USHORT Off, 00582 /*IN*/ PVOID Buffer, 00583 /*IN*/ ULONG Length); 00584 00585 typedef struct _VIDEO_PORT_INT10_INTERFACE { 00586 /*IN*/ USHORT Size; 00587 /*IN*/ USHORT Version; 00588 /*OUT*/ PVOID Context; 00589 /*OUT*/ PINTERFACE_REFERENCE InterfaceReference; 00590 /*OUT*/ PINTERFACE_DEREFERENCE InterfaceDereference; 00591 /*OUT*/ PINT10_ALLOCATE_BUFFER Int10AllocateBuffer; 00592 /*OUT*/ PINT10_FREE_BUFFER Int10FreeBuffer; 00593 /*OUT*/ PINT10_READ_MEMORY Int10ReadMemory; 00594 /*OUT*/ PINT10_WRITE_MEMORY Int10WriteMemory; 00595 /*OUT*/ PINT10_CALL_BIOS Int10CallBios; 00596 } VIDEO_PORT_INT10_INTERFACE, *PVIDEO_PORT_INT10_INTERFACE; 00597 00598 /* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */ 00599 #define VIDEO_MEMORY_SPACE_MEMORY 0x00 00600 #define VIDEO_MEMORY_SPACE_IO 0x01 00601 #define VIDEO_MEMORY_SPACE_USER_MODE 0x02 00602 #define VIDEO_MEMORY_SPACE_DENSE 0x04 00603 #define VIDEO_MEMORY_SPACE_P6CACHE 0x08 00604 00605 typedef struct _VIDEO_X86_BIOS_ARGUMENTS { 00606 ULONG Eax; 00607 ULONG Ebx; 00608 ULONG Ecx; 00609 ULONG Edx; 00610 ULONG Esi; 00611 ULONG Edi; 00612 ULONG Ebp; 00613 } VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS; 00614 00615 typedef struct _VP_DEVICE_DESCRIPTION { 00616 BOOLEAN ScatterGather; 00617 BOOLEAN Dma32BitAddresses; 00618 BOOLEAN Dma64BitAddresses; 00619 ULONG MaximumLength; 00620 } VP_DEVICE_DESCRIPTION, *PVP_DEVICE_DESCRIPTION; 00621 00622 typedef struct _VPOSVERSIONINFO { 00623 /*IN*/ ULONG Size; 00624 /*OUT*/ ULONG MajorVersion; 00625 /*OUT*/ ULONG MinorVersion; 00626 /*OUT*/ ULONG BuildNumber; 00627 /*OUT*/ USHORT ServicePackMajor; 00628 /*OUT*/ USHORT ServicePackMinor; 00629 } VPOSVERSIONINFO, *PVPOSVERSIONINFO; 00630 00631 00632 00633 /* Video port functions for miniports */ 00634 00635 VPAPI 00636 VOID 00637 DDKAPI 00638 VideoDebugPrint( 00639 /*IN*/ ULONG DebugPrintLevel, 00640 /*IN*/ PCHAR DebugMessage, 00641 /*IN*/ ...); 00642 00643 VPAPI 00644 VOID 00645 DDKAPI 00646 VideoPortAcquireDeviceLock( 00647 /*IN*/ PVOID HwDeviceExtension); 00648 00649 VPAPI 00650 VOID 00651 DDKAPI 00652 VideoPortAcquireSpinLock( 00653 /*IN*/ PVOID HwDeviceExtension, 00654 /*IN*/ PSPIN_LOCK SpinLock, 00655 /*OUT*/ PUCHAR OldIrql); 00656 00657 VPAPI 00658 VOID 00659 DDKAPI 00660 VideoPortAcquireSpinLockAtDpcLevel( 00661 /*IN*/ PVOID HwDeviceExtension, 00662 /*IN*/ PSPIN_LOCK SpinLock); 00663 00664 VPAPI 00665 VP_STATUS 00666 DDKAPI 00667 VideoPortAllocateBuffer( 00668 /*IN*/ PVOID HwDeviceExtension, 00669 /*IN*/ ULONG Size, 00670 /*OUT*/ PVOID *Buffer); 00671 00672 VPAPI 00673 PVOID 00674 DDKAPI 00675 VideoPortAllocateCommonBuffer( 00676 /*IN*/ PVOID HwDeviceExtension, 00677 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter, 00678 /*IN*/ ULONG DesiredLength, 00679 /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress, 00680 /*IN*/ BOOLEAN CacheEnabled, 00681 PVOID Reserved); 00682 00683 VPAPI 00684 PVOID 00685 DDKAPI 00686 VideoPortAllocateContiguousMemory( 00687 /*IN*/ PVOID HwDeviceExtension, 00688 /*IN*/ ULONG NumberOfBytes, 00689 /*IN*/ PHYSICAL_ADDRESS HighestAcceptableAddress); 00690 00691 /* VideoPortAllocatePool.PoolType constants */ 00692 typedef enum _VP_POOL_TYPE { 00693 VpNonPagedPool = 0, 00694 VpPagedPool, 00695 VpNonPagedPoolCacheAligned = 4, 00696 VpPagedPoolCacheAligned 00697 } VP_POOL_TYPE, *PVP_POOL_TYPE; 00698 00699 VPAPI 00700 PVOID 00701 DDKAPI 00702 VideoPortAllocatePool( 00703 /*IN*/ PVOID HwDeviceExtension, 00704 /*IN*/ VP_POOL_TYPE PoolType, 00705 /*IN*/ SIZE_T NumberOfBytes, 00706 /*IN*/ ULONG Tag); 00707 00708 VPAPI 00709 PDMA 00710 DDKAPI 00711 VideoPortAssociateEventsWithDmaHandle( 00712 /*IN*/ PVOID HwDeviceExtension, 00713 /*IN OUT*/ PVIDEO_REQUEST_PACKET pVrp, 00714 /*IN*/ PVOID MappedUserEvent, 00715 /*IN*/ PVOID DisplayDriverEvent); 00716 00717 /* VideoPortCheckForDeviceExistence.Flags constants */ 00718 #define CDE_USE_SUBSYSTEM_IDS 0x00000001 00719 #define CDE_USE_REVISION 0x00000002 00720 00721 VPAPI 00722 BOOLEAN 00723 DDKAPI 00724 VideoPortCheckForDeviceExistence( 00725 /*IN*/ PVOID HwDeviceExtension, 00726 /*IN*/ USHORT VendorId, 00727 /*IN*/ USHORT DeviceId, 00728 /*IN*/ UCHAR RevisionId, 00729 /*IN*/ USHORT SubVendorId, 00730 /*IN*/ USHORT SubSystemId, 00731 /*IN*/ ULONG Flags); 00732 00733 VPAPI 00734 VOID 00735 DDKAPI 00736 VideoPortClearEvent( 00737 /*IN*/ PVOID HwDeviceExtension, 00738 /*IN*/ PEVENT pEvent); 00739 00740 VPAPI 00741 ULONG 00742 DDKAPI 00743 VideoPortCompareMemory( 00744 /*IN*/ PVOID Source1, 00745 /*IN*/ PVOID Source2, 00746 /*IN*/ ULONG Length); 00747 00748 VPAPI 00749 VP_STATUS 00750 DDKAPI 00751 VideoPortCompleteDma( 00752 /*IN*/ PVOID HwDeviceExtension, 00753 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter, 00754 /*IN*/ PVP_SCATTER_GATHER_LIST VpScatterGather, 00755 /*IN*/ BOOLEAN WriteToDevice); 00756 00757 VPAPI 00758 VP_STATUS 00759 DDKAPI 00760 VideoPortCreateEvent( 00761 /*IN*/ PVOID HwDeviceExtension, 00762 /*IN*/ ULONG EventFlag, 00763 /*IN*/ PVOID Unused, 00764 /*OUT*/ PEVENT *ppEvent); 00765 00766 VPAPI 00767 VP_STATUS 00768 DDKAPI 00769 VideoPortCreateSecondaryDisplay( 00770 /*IN*/ PVOID HwDeviceExtension, 00771 /*IN OUT*/ PVOID *SecondaryDeviceExtension, 00772 /*IN*/ ULONG ulFlag); 00773 00774 VPAPI 00775 VP_STATUS 00776 DDKAPI 00777 VideoPortCreateSpinLock( 00778 /*IN*/ PVOID HwDeviceExtension, 00779 /*OUT*/ PSPIN_LOCK *SpinLock); 00780 00781 typedef struct _DDC_CONTROL { 00782 /*IN*/ ULONG Size; 00783 /*IN*/ I2C_CALLBACKS I2CCallbacks; 00784 /*IN*/ UCHAR EdidSegment; 00785 } DDC_CONTROL, *PDDC_CONTROL; 00786 00787 VPAPI 00788 BOOLEAN 00789 DDKAPI 00790 VideoPortDDCMonitorHelper( 00791 /*IN*/ PVOID HwDeviceExtension, 00792 /*IN*/ PVOID DDCControl, 00793 /*IN OUT*/ PUCHAR EdidBuffer, 00794 /*IN*/ ULONG EdidBufferSize); 00795 00796 VPAPI 00797 VOID 00798 DDKCDECLAPI 00799 VideoPortDebugPrint( 00800 /*IN*/ VIDEO_DEBUG_LEVEL DebugPrintLevel, 00801 /*IN*/ PCHAR DebugMessage, 00802 /*IN*/ ...); 00803 00804 VPAPI 00805 VP_STATUS 00806 DDKAPI 00807 VideoPortDeleteEvent( 00808 /*IN*/ PVOID HwDeviceExtension, 00809 /*IN*/ PEVENT pEvent); 00810 00811 VPAPI 00812 VP_STATUS 00813 DDKAPI 00814 VideoPortDeleteSpinLock( 00815 /*IN*/ PVOID HwDeviceExtension, 00816 /*IN*/ PSPIN_LOCK SpinLock); 00817 00818 VPAPI 00819 VP_STATUS 00820 DDKAPI 00821 VideoPortDisableInterrupt( 00822 /*IN*/ PVOID HwDeviceExtension); 00823 00824 VPAPI 00825 PDMA 00826 DDKAPI 00827 VideoPortDoDma( 00828 /*IN*/ PVOID HwDeviceExtension, 00829 /*IN*/ PDMA pDma, 00830 /*IN*/ DMA_FLAGS DmaFlags); 00831 00832 VPAPI 00833 VP_STATUS 00834 DDKAPI 00835 VideoPortEnableInterrupt( 00836 /*IN*/ PVOID HwDeviceExtension); 00837 00838 VPAPI 00839 VP_STATUS 00840 DDKAPI 00841 VideoPortEnumerateChildren( 00842 /*IN*/ PVOID HwDeviceExtension, 00843 /*IN*/ PVOID Reserved); 00844 00845 VPAPI 00846 VOID 00847 DDKAPI 00848 VideoPortFreeCommonBuffer( 00849 /*IN*/ PVOID HwDeviceExtension, 00850 /*IN*/ ULONG Length, 00851 /*IN*/ PVOID VirtualAddress, 00852 /*IN*/ PHYSICAL_ADDRESS LogicalAddress, 00853 /*IN*/ BOOLEAN CacheEnabled); 00854 00855 VPAPI 00856 VOID 00857 DDKAPI 00858 VideoPortFreeDeviceBase( 00859 /*IN*/ PVOID HwDeviceExtension, 00860 /*IN*/ PVOID MappedAddress); 00861 00862 VPAPI 00863 VOID 00864 DDKAPI 00865 VideoPortFreePool( 00866 /*IN*/ PVOID HwDeviceExtension, 00867 /*IN*/ PVOID Ptr); 00868 00869 VPAPI 00870 VP_STATUS 00871 DDKAPI 00872 VideoPortGetAccessRanges( 00873 /*IN*/ PVOID HwDeviceExtension, 00874 /*IN*/ ULONG NumRequestedResources, 00875 /*IN*/ PIO_RESOURCE_DESCRIPTOR RequestedResources /*OPTIONAL*/, 00876 /*IN*/ ULONG NumAccessRanges, 00877 /*OUT*/ PVIDEO_ACCESS_RANGE AccessRanges, 00878 /*IN*/ PVOID VendorId, 00879 /*IN*/ PVOID DeviceId, 00880 /*OUT*/ PULONG Slot); 00881 00882 VPAPI 00883 PVOID 00884 DDKAPI 00885 VideoPortGetAssociatedDeviceExtension( 00886 /*IN*/ PVOID DeviceObject); 00887 00888 VPAPI 00889 ULONG 00890 DDKAPI 00891 VideoPortGetAssociatedDeviceID( 00892 /*IN*/ PVOID DeviceObject); 00893 00894 VPAPI 00895 ULONG 00896 DDKAPI 00897 VideoPortGetBusData( 00898 /*IN*/ PVOID HwDeviceExtension, 00899 /*IN*/ BUS_DATA_TYPE BusDataType, 00900 /*IN*/ ULONG SlotNumber, 00901 /*IN OUT*/ PVOID Buffer, 00902 /*IN*/ ULONG Offset, 00903 /*IN*/ ULONG Length); 00904 00905 VPAPI 00906 ULONG 00907 DDKAPI 00908 VideoPortGetBytesUsed( 00909 /*IN*/ PVOID HwDeviceExtension, 00910 /*IN*/ PDMA pDma); 00911 00912 VPAPI 00913 PVOID 00914 DDKAPI 00915 VideoPortGetCommonBuffer( 00916 /*IN*/ PVOID HwDeviceExtension, 00917 /*IN*/ ULONG DesiredLength, 00918 /*IN*/ ULONG Alignment, 00919 /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress, 00920 /*OUT*/ PULONG pActualLength, 00921 /*IN*/ BOOLEAN CacheEnabled); 00922 00923 VPAPI 00924 UCHAR 00925 DDKAPI 00926 VideoPortGetCurrentIrql( 00927 VOID); 00928 00929 VPAPI 00930 PVOID 00931 DDKAPI 00932 VideoPortGetDeviceBase( 00933 /*IN*/ PVOID HwDeviceExtension, 00934 /*IN*/ PHYSICAL_ADDRESS IoAddress, 00935 /*IN*/ ULONG NumberOfUchars, 00936 /*IN*/ UCHAR InIoSpace); 00937 00938 VPAPI 00939 VP_STATUS 00940 DDKAPI 00941 VideoPortGetDeviceData( 00942 /*IN*/ PVOID HwDeviceExtension, 00943 /*IN*/ VIDEO_DEVICE_DATA_TYPE DeviceDataType, 00944 /*IN*/ PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine, 00945 /*IN*/ PVOID Context); 00946 00947 VPAPI 00948 PVP_DMA_ADAPTER 00949 DDKAPI 00950 VideoPortGetDmaAdapter( 00951 /*IN*/ PVOID HwDeviceExtension, 00952 /*IN*/ PVP_DEVICE_DESCRIPTION VpDeviceDescription); 00953 00954 VPAPI 00955 PVOID 00956 DDKAPI 00957 VideoPortGetDmaContext( 00958 /*IN*/ PVOID HwDeviceExtension, 00959 /*IN*/ PDMA pDma); 00960 00961 VPAPI 00962 PVOID 00963 DDKAPI 00964 VideoPortGetMdl( 00965 /*IN*/ PVOID HwDeviceExtension, 00966 /*IN*/ PDMA pDma); 00967 00968 VPAPI 00969 VP_STATUS 00970 DDKAPI 00971 VideoPortGetRegistryParameters( 00972 /*IN*/ PVOID HwDeviceExtension, 00973 /*IN*/ PWSTR ParameterName, 00974 /*IN*/ UCHAR IsParameterFileName, 00975 /*IN*/ PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine, 00976 /*IN*/ PVOID Context); 00977 00978 VPAPI 00979 PVOID 00980 DDKAPI 00981 VideoPortGetRomImage( 00982 /*IN*/ PVOID HwDeviceExtension, 00983 /*IN*/ PVOID Unused1, 00984 /*IN*/ ULONG Unused2, 00985 /*IN*/ ULONG Length); 00986 00987 VPAPI 00988 VP_STATUS 00989 DDKAPI 00990 VideoPortGetVersion( 00991 /*IN*/ PVOID HwDeviceExtension, 00992 /*IN OUT*/ PVPOSVERSIONINFO pVpOsVersionInfo); 00993 00994 VPAPI 00995 VP_STATUS 00996 DDKAPI 00997 VideoPortGetVgaStatus( 00998 /*IN*/ PVOID HwDeviceExtension, 00999 /*OUT*/ PULONG VgaStatus); 01000 01001 VPAPI 01002 ULONG 01003 DDKAPI 01004 VideoPortInitialize( 01005 /*IN*/ PVOID Argument1, 01006 /*IN*/ PVOID Argument2, 01007 /*IN*/ PVIDEO_HW_INITIALIZATION_DATA HwInitializationData, 01008 /*IN*/ PVOID HwContext); 01009 01010 VPAPI 01011 VP_STATUS 01012 DDKAPI 01013 VideoPortInt10( 01014 /*IN*/ PVOID HwDeviceExtension, 01015 /*IN*/ PVIDEO_X86_BIOS_ARGUMENTS BiosArguments); 01016 01017 VPAPI 01018 LONG 01019 DDKFASTAPI 01020 VideoPortInterlockedDecrement( 01021 /*IN*/ PLONG Addend); 01022 01023 VPAPI 01024 LONG 01025 DDKFASTAPI 01026 VideoPortInterlockedExchange( 01027 /*IN OUT*/ PLONG Target, 01028 /*IN*/ LONG Value); 01029 01030 VPAPI 01031 LONG 01032 DDKFASTAPI 01033 VideoPortInterlockedIncrement( 01034 /*IN*/ PLONG Addend); 01035 01036 typedef enum _VP_LOCK_OPERATION { 01037 VpReadAccess = 0, 01038 VpWriteAccess, 01039 VpModifyAccess 01040 } VP_LOCK_OPERATION; 01041 01042 VPAPI 01043 PVOID 01044 DDKAPI 01045 VideoPortLockBuffer( 01046 /*IN*/ PVOID HwDeviceExtension, 01047 /*IN*/ PVOID BaseAddress, 01048 /*IN*/ ULONG Length, 01049 /*IN*/ VP_LOCK_OPERATION Operation); 01050 01051 VPAPI 01052 BOOLEAN 01053 DDKAPI 01054 VideoPortLockPages( 01055 /*IN*/ PVOID HwDeviceExtension, 01056 /*IN OUT*/ PVIDEO_REQUEST_PACKET pVrp, 01057 /*IN OUT*/ PEVENT pUEvent, 01058 /*IN*/ PEVENT pDisplayEvent, 01059 /*IN*/ DMA_FLAGS DmaFlags); 01060 01061 VPAPI 01062 VOID 01063 DDKAPI 01064 VideoPortLogError( 01065 /*IN*/ PVOID HwDeviceExtension, 01066 /*IN*/ PVIDEO_REQUEST_PACKET Vrp /*OPTIONAL*/, 01067 /*IN*/ VP_STATUS ErrorCode, 01068 /*IN*/ ULONG UniqueId); 01069 01070 VPAPI 01071 VP_STATUS 01072 DDKAPI 01073 VideoPortMapBankedMemory( 01074 /*IN*/ PVOID HwDeviceExtension, 01075 /*IN*/ PHYSICAL_ADDRESS PhysicalAddress, 01076 /*IN OUT*/ PULONG Length, 01077 PULONG InIoSpace, 01078 PVOID *VirtualAddress, 01079 ULONG BankLength, 01080 UCHAR ReadWriteBank, 01081 PBANKED_SECTION_ROUTINE BankRoutine, 01082 PVOID Context); 01083 01084 VPAPI 01085 PDMA 01086 DDKAPI 01087 VideoPortMapDmaMemory( 01088 /*IN*/ PVOID HwDeviceExtension, 01089 /*IN*/ PVIDEO_REQUEST_PACKET pVrp, 01090 /*IN*/ PHYSICAL_ADDRESS BoardAddress, 01091 /*IN*/ PULONG Length, 01092 /*IN*/ PULONG InIoSpace, 01093 /*IN*/ PVOID MappedUserEvent, 01094 /*IN*/ PVOID DisplayDriverEvent, 01095 /*IN OUT*/ PVOID *VirtualAddress); 01096 01097 VPAPI 01098 VP_STATUS 01099 DDKAPI 01100 VideoPortMapMemory( 01101 /*IN*/ PVOID HwDeviceExtension, 01102 /*IN*/ PHYSICAL_ADDRESS PhysicalAddress, 01103 /*IN OUT*/ PULONG Length, 01104 /*IN*/ PULONG InIoSpace, 01105 /*IN OUT*/ PVOID *VirtualAddress); 01106 01107 VPAPI 01108 VOID 01109 DDKAPI 01110 VideoPortMoveMemory( 01111 /*IN*/ PVOID Destination, 01112 /*IN*/ PVOID Source, 01113 /*IN*/ ULONG Length); 01114 01115 VPAPI 01116 VOID 01117 DDKAPI 01118 VideoPortPutDmaAdapter( 01119 /*IN*/ PVOID HwDeviceExtension, 01120 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter); 01121 01122 VPAPI 01123 LONGLONG 01124 DDKAPI 01125 VideoPortQueryPerformanceCounter( 01126 /*IN*/ PVOID HwDeviceExtension, 01127 /*OUT*/ PLONGLONG PerformanceFrequency /*OPTIONAL*/); 01128 01129 /* VideoPortQueryServices.ServicesType constants */ 01130 typedef enum _VIDEO_PORT_SERVICES { 01131 VideoPortServicesAGP = 1, 01132 VideoPortServicesI2C, 01133 VideoPortServicesHeadless, 01134 VideoPortServicesInt10 01135 } VIDEO_PORT_SERVICES; 01136 01137 VPAPI 01138 VP_STATUS 01139 DDKAPI 01140 VideoPortQueryServices( 01141 /*IN*/ PVOID HwDeviceExtension, 01142 /*IN*/ VIDEO_PORT_SERVICES ServicesType, 01143 /*IN OUT*/ PINTERFACE Interface); 01144 01145 VPAPI 01146 VOID 01147 DDKAPI 01148 VideoPortQuerySystemTime( 01149 /*OUT*/ PLARGE_INTEGER CurrentTime); 01150 01151 VPAPI 01152 BOOLEAN 01153 DDKAPI 01154 VideoPortQueueDpc( 01155 /*IN*/ PVOID HwDeviceExtension, 01156 /*IN*/ PMINIPORT_DPC_ROUTINE CallbackRoutine, 01157 /*IN*/ PVOID Context); 01158 01159 VPAPI 01160 VOID 01161 DDKAPI 01162 VideoPortReadPortBufferUchar( 01163 /*IN*/ PUCHAR Port, 01164 /*OUT*/ PUCHAR Buffer, 01165 /*IN*/ ULONG Count); 01166 01167 VPAPI 01168 VOID 01169 DDKAPI 01170 VideoPortReadPortBufferUlong( 01171 /*IN*/ PULONG Port, 01172 /*OUT*/ PULONG Buffer, 01173 /*IN*/ ULONG Count); 01174 01175 VPAPI 01176 VOID 01177 DDKAPI 01178 VideoPortReadPortBufferUshort( 01179 /*IN*/ PUSHORT Port, 01180 /*OUT*/ PUSHORT Buffer, 01181 /*IN*/ ULONG Count); 01182 01183 VPAPI 01184 UCHAR 01185 DDKAPI 01186 VideoPortReadPortUchar( 01187 /*IN*/ PUCHAR Port); 01188 01189 VPAPI 01190 ULONG 01191 DDKAPI 01192 VideoPortReadPortUlong( 01193 /*IN*/ PULONG Port); 01194 01195 VPAPI 01196 USHORT 01197 DDKAPI 01198 VideoPortReadPortUshort( 01199 /*IN*/ PUSHORT Port); 01200 01201 VPAPI 01202 VOID 01203 DDKAPI 01204 VideoPortReadRegisterBufferUchar( 01205 /*IN*/ PUCHAR Register, 01206 /*OUT*/ PUCHAR Buffer, 01207 /*IN*/ ULONG Count); 01208 01209 VPAPI 01210 VOID 01211 DDKAPI 01212 VideoPortReadRegisterBufferUlong( 01213 /*IN*/ PULONG Register, 01214 /*OUT*/ PULONG Buffer, 01215 /*IN*/ ULONG Count); 01216 01217 VPAPI 01218 VOID 01219 DDKAPI 01220 VideoPortReadRegisterBufferUshort( 01221 /*IN*/ PUSHORT Register, 01222 /*OUT*/ PUSHORT Buffer, 01223 /*IN*/ ULONG Count); 01224 01225 VPAPI 01226 UCHAR 01227 DDKAPI 01228 VideoPortReadRegisterUchar( 01229 /*IN*/ PUCHAR Register); 01230 01231 VPAPI 01232 ULONG 01233 DDKAPI 01234 VideoPortReadRegisterUlong( 01235 /*IN*/ PULONG Register); 01236 01237 VPAPI 01238 USHORT 01239 DDKAPI 01240 VideoPortReadRegisterUshort( 01241 /*IN*/ PUSHORT Register); 01242 01243 VPAPI 01244 LONG 01245 DDKAPI 01246 VideoPortReadStateEvent( 01247 /*IN*/ PVOID HwDeviceExtension, 01248 /*IN*/ PEVENT pEvent); 01249 01250 VPAPI 01251 VOID 01252 DDKAPI 01253 VideoPortReleaseBuffer( 01254 /*IN*/ PVOID HwDeviceExtension, 01255 /*IN*/ PVOID Buffer); 01256 01257 VPAPI 01258 VOID 01259 DDKAPI 01260 VideoPortReleaseCommonBuffer( 01261 /*IN*/ PVOID HwDeviceExtension, 01262 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter, 01263 /*IN*/ ULONG Length, 01264 /*IN*/ PHYSICAL_ADDRESS LogicalAddress, 01265 /*IN*/ PVOID VirtualAddress, 01266 /*IN*/ BOOLEAN CacheEnabled); 01267 01268 VPAPI 01269 VOID 01270 DDKAPI 01271 VideoPortReleaseDeviceLock( 01272 /*IN*/ PVOID HwDeviceExtension); 01273 01274 VPAPI 01275 VOID 01276 DDKAPI 01277 VideoPortReleaseSpinLock( 01278 /*IN*/ PVOID HwDeviceExtension, 01279 /*IN*/ PSPIN_LOCK SpinLock, 01280 /*IN*/ UCHAR NewIrql); 01281 01282 VPAPI 01283 VOID 01284 DDKAPI 01285 VideoPortReleaseSpinLockFromDpcLevel( 01286 /*IN*/ PVOID HwDeviceExtension, 01287 /*IN*/ PSPIN_LOCK SpinLock); 01288 01289 VPAPI 01290 BOOLEAN 01291 DDKAPI 01292 VideoPortScanRom( 01293 PVOID HwDeviceExtension, 01294 PUCHAR RomBase, 01295 ULONG RomLength, 01296 PUCHAR String); 01297 01298 VPAPI 01299 ULONG 01300 DDKAPI 01301 VideoPortSetBusData( 01302 /*IN*/ PVOID HwDeviceExtension, 01303 /*IN*/ BUS_DATA_TYPE BusDataType, 01304 /*IN*/ ULONG SlotNumber, 01305 /*IN*/ PVOID Buffer, 01306 /*IN*/ ULONG Offset, 01307 /*IN*/ ULONG Length); 01308 01309 VPAPI 01310 VOID 01311 DDKAPI 01312 VideoPortSetBytesUsed( 01313 /*IN*/ PVOID HwDeviceExtension, 01314 /*IN OUT*/ PDMA pDma, 01315 /*IN*/ ULONG BytesUsed); 01316 01317 VPAPI 01318 VOID 01319 DDKAPI 01320 VideoPortSetDmaContext( 01321 /*IN*/ PVOID HwDeviceExtension, 01322 /*OUT*/ PDMA pDma, 01323 /*IN*/ PVOID InstanceContext); 01324 01325 VPAPI 01326 LONG 01327 DDKAPI 01328 VideoPortSetEvent( 01329 /*IN*/ PVOID HwDeviceExtension, 01330 /*IN*/ PEVENT pEvent); 01331 01332 VPAPI 01333 VP_STATUS 01334 DDKAPI 01335 VideoPortSetRegistryParameters( 01336 /*IN*/ PVOID HwDeviceExtension, 01337 /*IN*/ PWSTR ValueName, 01338 /*IN*/ PVOID ValueData, 01339 /*IN*/ ULONG ValueLength); 01340 01341 VPAPI 01342 VP_STATUS 01343 DDKAPI 01344 VideoPortSetTrappedEmulatorPorts( 01345 /*IN*/ PVOID HwDeviceExtension, 01346 /*IN*/ ULONG NumAccessRanges, 01347 /*IN*/ PVIDEO_ACCESS_RANGE AccessRange); 01348 01349 VPAPI 01350 BOOLEAN 01351 DDKAPI 01352 VideoPortSignalDmaComplete( 01353 /*IN*/ PVOID HwDeviceExtension, 01354 /*IN*/ PVOID pDmaHandle); 01355 01356 VPAPI 01357 VOID 01358 DDKAPI 01359 VideoPortStallExecution( 01360 /*IN*/ ULONG Microseconds); 01361 01362 VPAPI 01363 VP_STATUS 01364 DDKAPI 01365 VideoPortStartDma( 01366 /*IN*/ PVOID HwDeviceExtension, 01367 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter, 01368 /*IN*/ PVOID Mdl, 01369 /*IN*/ ULONG Offset, 01370 /*IN OUT*/ PULONG pLength, 01371 /*IN*/ PEXECUTE_DMA ExecuteDmaRoutine, 01372 /*IN*/ PVOID Context, 01373 /*IN*/ BOOLEAN WriteToDevice); 01374 01375 VPAPI 01376 VOID 01377 DDKAPI 01378 VideoPortStartTimer( 01379 /*IN*/ PVOID HwDeviceExtension); 01380 01381 VPAPI 01382 VOID 01383 DDKAPI 01384 VideoPortStopTimer( 01385 /*IN*/ PVOID HwDeviceExtension); 01386 01387 /* VideoPortSynchronizeExecution.Priority constants */ 01388 typedef enum VIDEO_SYNCHRONIZE_PRIORITY { 01389 VpLowPriority = 0, 01390 VpMediumPriority, 01391 VpHighPriority 01392 } VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY; 01393 01394 VPAPI 01395 BOOLEAN 01396 DDKAPI 01397 VideoPortSynchronizeExecution( 01398 /*IN*/ PVOID HwDeviceExtension, 01399 /*IN*/ VIDEO_SYNCHRONIZE_PRIORITY Priority, 01400 /*IN*/ PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine, 01401 /*IN*/ PVOID Context); 01402 01403 VPAPI 01404 VOID 01405 DDKAPI 01406 VideoPortUnLockBuffer( 01407 /*IN*/ PVOID HwDeviceExtension, 01408 /*IN*/ PVOID Mdl); 01409 01410 VPAPI 01411 BOOLEAN 01412 DDKAPI 01413 VideoPortUnlockPages( 01414 /*IN*/ PVOID hwDeviceExtension, 01415 /*IN OUT*/ PDMA pDma); 01416 01417 VPAPI 01418 BOOLEAN 01419 DDKAPI 01420 VideoPortUnmapDmaMemory( 01421 /*IN*/ PVOID HwDeviceExtension, 01422 /*IN*/ PVOID VirtualAddress, 01423 /*IN*/ HANDLE ProcessHandle, 01424 /*IN*/ PDMA BoardMemoryHandle); 01425 01426 VPAPI 01427 VP_STATUS 01428 DDKAPI 01429 VideoPortUnmapMemory( 01430 /*IN*/ PVOID HwDeviceExtension, 01431 /*IN OUT*/ PVOID VirtualAddress, 01432 /*IN*/ HANDLE ProcessHandle); 01433 01434 VPAPI 01435 VP_STATUS 01436 DDKAPI 01437 VideoPortVerifyAccessRanges( 01438 /*IN*/ PVOID HwDeviceExtension, 01439 /*IN*/ ULONG NumAccessRanges, 01440 /*IN*/ PVIDEO_ACCESS_RANGE AccessRanges); 01441 01442 VPAPI 01443 VP_STATUS 01444 DDKAPI 01445 VideoPortWaitForSingleObject( 01446 /*IN*/ PVOID HwDeviceExtension, 01447 /*IN*/ PVOID Object, 01448 /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/); 01449 01450 VPAPI 01451 VOID 01452 DDKAPI 01453 VideoPortWritePortBufferUchar( 01454 /*IN*/ PUCHAR Port, 01455 /*IN*/ PUCHAR Buffer, 01456 /*IN*/ ULONG Count); 01457 01458 VPAPI 01459 VOID 01460 DDKAPI 01461 VideoPortWritePortBufferUlong( 01462 /*IN*/ PULONG Port, 01463 /*IN*/ PULONG Buffer, 01464 /*IN*/ ULONG Count); 01465 01466 VPAPI 01467 VOID 01468 DDKAPI 01469 VideoPortWritePortBufferUshort( 01470 /*IN*/ PUSHORT Port, 01471 /*IN*/ PUSHORT Buffer, 01472 /*IN*/ ULONG Count); 01473 01474 VPAPI 01475 VOID 01476 DDKAPI 01477 VideoPortWritePortUchar( 01478 /*IN*/ PUCHAR Port, 01479 /*IN*/ UCHAR Value); 01480 01481 VPAPI 01482 VOID 01483 DDKAPI 01484 VideoPortWritePortUlong( 01485 /*IN*/ PULONG Port, 01486 /*IN*/ ULONG Value); 01487 01488 VPAPI 01489 VOID 01490 DDKAPI 01491 VideoPortWritePortUshort( 01492 /*IN*/ PUSHORT Port, 01493 /*IN*/ USHORT Value); 01494 01495 VPAPI 01496 VOID 01497 DDKAPI 01498 VideoPortWriteRegisterBufferUchar( 01499 /*IN*/ PUCHAR Register, 01500 /*IN*/ PUCHAR Buffer, 01501 /*IN*/ ULONG Count); 01502 01503 VPAPI 01504 VOID 01505 DDKAPI 01506 VideoPortWriteRegisterBufferUlong( 01507 /*IN*/ PULONG Register, 01508 /*IN*/ PULONG Buffer, 01509 /*IN*/ ULONG Count); 01510 01511 VPAPI 01512 VOID 01513 DDKAPI 01514 VideoPortWriteRegisterBufferUshort( 01515 /*IN*/ PUSHORT Register, 01516 /*IN*/ PUSHORT Buffer, 01517 /*IN*/ ULONG Count); 01518 01519 VPAPI 01520 VOID 01521 DDKAPI 01522 VideoPortWriteRegisterUchar( 01523 /*IN*/ PUCHAR Register, 01524 /*IN*/ UCHAR Value); 01525 01526 VPAPI 01527 VOID 01528 DDKAPI 01529 VideoPortWriteRegisterUlong( 01530 /*IN*/ PULONG Register, 01531 /*IN*/ ULONG Value); 01532 01533 VPAPI 01534 VOID 01535 DDKAPI 01536 VideoPortWriteRegisterUshort( 01537 /*IN*/ PUSHORT Register, 01538 /*IN*/ USHORT Value); 01539 01540 VPAPI 01541 VOID 01542 DDKAPI 01543 VideoPortZeroDeviceMemory( 01544 /*IN*/ PVOID Destination, 01545 /*IN*/ ULONG Length); 01546 01547 VPAPI 01548 VOID 01549 DDKAPI 01550 VideoPortZeroMemory( 01551 /*IN*/ PVOID Destination, 01552 /*2IN*/ ULONG Length); 01553 01554 #ifdef DBG 01555 #define VideoDebugPrint(x) VideoPortDebugPrint x 01556 #else 01557 #define VideoDebugPrint(x) 01558 #endif 01559 01560 #ifdef __cplusplus 01561 } 01562 #endif 01563 01564 #endif /* defined __WINDDI_H */ 01565 01566 #endif /* __VIDEO_H */
Generated on Tue Jul 12 2022 19:59:55 by
1.7.2