1 /** 2 * @file video.h 3 * Copyright 2012, 2013 MinGW.org project 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 */ 24 /* Created by Casper S. Hornstrup <chorns@users.sourceforge.net> */ 25 #ifndef __VIDEO_H 26 #define __VIDEO_H 27 #pragma GCC system_header 28 #include <_mingw.h> 29 30 /* 31 * Video port and miniport driver interface 32 */ 33 34 #ifdef __WINDDI_H 35 #error winddi.h cannot be included with video.h 36 #else 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 #include "ntddk.h" 43 44 #if defined(_VIDEOPORT_) 45 #define VPAPI DECLSPEC_EXPORT 46 #else 47 #define VPAPI DECLSPEC_IMPORT 48 #endif 49 50 #include "videoagp.h" 51 #include "ntddvdeo.h" 52 53 54 typedef LONG VP_STATUS; 55 typedef VP_STATUS *PVP_STATUS; 56 typedef struct __DMA_PARAMETERS * PDMA; 57 typedef struct _VIDEO_PORT_EVENT *PEVENT; 58 typedef struct _VIDEO_PORT_SPIN_LOCK *PSPIN_LOCK; 59 typedef struct __VP_DMA_ADAPTER *PVP_DMA_ADAPTER; 60 61 #define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF 62 63 #define EVENT_TYPE_MASK 1 64 #define SYNCHRONIZATION_EVENT 0 65 #define NOTIFICATION_EVENT 1 66 67 #define INITIAL_EVENT_STATE_MASK 2 68 #define INITIAL_EVENT_NOT_SIGNALED 0 69 #define INITIAL_EVENT_SIGNALED 2 70 71 typedef enum VIDEO_DEBUG_LEVEL { 72 Error = 0, 73 Warn, 74 Trace, 75 Info 76 } VIDEO_DEBUG_LEVEL, *PVIDEO_DEBUG_LEVEL; 77 78 typedef enum { 79 VideoPortUnlockAfterDma = 1, 80 VideoPortKeepPagesLocked, 81 VideoPortDmaInitOnly 82 } DMA_FLAGS; 83 84 typedef enum _HW_DMA_RETURN { 85 DmaAsyncReturn, 86 DmaSyncReturn 87 } HW_DMA_RETURN, *PHW_DMA_RETURN; 88 89 typedef HW_DMA_RETURN 90 (*PVIDEO_HW_START_DMA)( 91 PVOID HwDeviceExtension, 92 PDMA pDma); 93 94 95 #ifdef DBG 96 97 #define PAGED_CODE() \ 98 if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) \ 99 { \ 100 VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \ 101 ASSERT(FALSE); \ 102 } 103 104 #else 105 106 #define PAGED_CODE() 107 108 #endif 109 110 typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA { 111 INTERFACE_TYPE InterfaceType; 112 ULONG BusNumber; 113 USHORT Version; 114 USHORT Revision; 115 USHORT Irql; 116 USHORT Vector; 117 ULONG ControlBase; 118 ULONG ControlSize; 119 ULONG CursorBase; 120 ULONG CursorSize; 121 ULONG FrameBase; 122 ULONG FrameSize; 123 } VIDEO_HARDWARE_CONFIGURATION_DATA, *PVIDEO_HARDWARE_CONFIGURATION_DATA; 124 125 #define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO 0x42 126 #define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA 0x28 127 #define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA 0x50 128 129 typedef enum _VIDEO_DEVICE_DATA_TYPE { 130 VpMachineData = 0, 131 VpCmosData, 132 VpBusData, 133 VpControllerData, 134 VpMonitorData 135 } VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE; 136 137 138 139 /* Video miniport driver functions */ 140 141 typedef struct _VP_SCATTER_GATHER_ELEMENT { 142 PHYSICAL_ADDRESS Address; 143 ULONG Length; 144 ULONG_PTR Reserved; 145 } VP_SCATTER_GATHER_ELEMENT, *PVP_SCATTER_GATHER_ELEMENT; 146 147 typedef struct _VP_SCATTER_GATHER_LIST { 148 ULONG NumberOfElements; 149 ULONG_PTR Reserved; 150 VP_SCATTER_GATHER_ELEMENT Elements[0]; 151 } VP_SCATTER_GATHER_LIST, *PVP_SCATTER_GATHER_LIST; 152 153 typedef VOID DDKAPI 154 (*PEXECUTE_DMA)( 155 /*IN*/ PVOID HwDeviceExtension, 156 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter, 157 /*IN*/ PVP_SCATTER_GATHER_LIST SGList, 158 /*IN*/ PVOID Context); 159 160 typedef PVOID DDKAPI 161 (*PVIDEO_PORT_GET_PROC_ADDRESS)( 162 /*IN*/ PVOID HwDeviceExtension, 163 /*IN*/ PUCHAR FunctionName); 164 165 typedef struct _VIDEO_PORT_CONFIG_INFO { 166 ULONG Length; 167 ULONG SystemIoBusNumber; 168 INTERFACE_TYPE AdapterInterfaceType; 169 ULONG BusInterruptLevel; 170 ULONG BusInterruptVector; 171 KINTERRUPT_MODE InterruptMode; 172 ULONG NumEmulatorAccessEntries; 173 PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries; 174 ULONG_PTR EmulatorAccessEntriesContext; 175 PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress; 176 ULONG VdmPhysicalVideoMemoryLength; 177 ULONG HardwareStateSize; 178 ULONG DmaChannel; 179 ULONG DmaPort; 180 UCHAR DmaShareable; 181 UCHAR InterruptShareable; 182 BOOLEAN Master; 183 DMA_WIDTH DmaWidth; 184 DMA_SPEED DmaSpeed; 185 BOOLEAN bMapBuffers; 186 BOOLEAN NeedPhysicalAddresses; 187 BOOLEAN DemandMode; 188 ULONG MaximumTransferLength; 189 ULONG NumberOfPhysicalBreaks; 190 BOOLEAN ScatterGather; 191 ULONG MaximumScatterGatherChunkSize; 192 PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress; 193 PWSTR DriverRegistryPath; 194 ULONGLONG SystemMemorySize; 195 } VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO; 196 197 typedef VP_STATUS DDKAPI 198 (*PVIDEO_HW_FIND_ADAPTER)( 199 /*IN*/ PVOID HwDeviceExtension, 200 /*IN*/ PVOID HwContext, 201 /*IN*/ PWSTR ArgumentString, 202 /*IN OUT*/ PVIDEO_PORT_CONFIG_INFO ConfigInfo, 203 /*OUT*/ PUCHAR Again); 204 205 typedef VP_STATUS DDKAPI 206 (*PVIDEO_HW_POWER_GET)( 207 /*IN*/ PVOID HwDeviceExtension, 208 /*IN*/ ULONG HwId, 209 /*IN OUT*/ PVIDEO_POWER_MANAGEMENT VideoPowerControl); 210 211 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */ 212 #define VIDEO_ENUM_MORE_DEVICES ERROR_CONTINUE 213 #define VIDEO_ENUM_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES 214 #define VIDEO_ENUM_INVALID_DEVICE ERROR_INVALID_NAME 215 216 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */ 217 typedef struct _VIDEO_CHILD_ENUM_INFO { 218 ULONG Size; 219 ULONG ChildDescriptorSize; 220 ULONG ChildIndex; 221 ULONG ACPIHwId; 222 PVOID ChildHwDeviceExtension; 223 } VIDEO_CHILD_ENUM_INFO, *PVIDEO_CHILD_ENUM_INFO; 224 225 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */ 226 typedef enum _VIDEO_CHILD_TYPE { 227 Monitor = 1, 228 NonPrimaryChip, 229 VideoChip, 230 Other 231 } VIDEO_CHILD_TYPE, *PVIDEO_CHILD_TYPE; 232 233 typedef VP_STATUS DDKAPI 234 (*PVIDEO_HW_GET_CHILD_DESCRIPTOR)( 235 /*IN*/ PVOID HwDeviceExtension, 236 /*IN*/ PVIDEO_CHILD_ENUM_INFO ChildEnumInfo, 237 /*OUT*/ PVIDEO_CHILD_TYPE VideoChildType, 238 /*OUT*/ PUCHAR pChildDescriptor, 239 /*OUT*/ PULONG UId, 240 /*OUT*/ PULONG pUnused); 241 242 typedef BOOLEAN DDKAPI 243 (*PVIDEO_HW_INITIALIZE)( 244 /*IN*/ PVOID HwDeviceExtension); 245 246 typedef BOOLEAN DDKAPI 247 (*PVIDEO_HW_INTERRUPT)( 248 /*IN*/ PVOID HwDeviceExtension); 249 250 /* VIDEO_ACCESS_RANGE.RangePassive */ 251 #define VIDEO_RANGE_PASSIVE_DECODE 1 252 #define VIDEO_RANGE_10_BIT_DECODE 2 253 254 #ifndef VIDEO_ACCESS_RANGE_DEFINED /* also in miniport.h */ 255 #define VIDEO_ACCESS_RANGE_DEFINED 256 typedef struct _VIDEO_ACCESS_RANGE { 257 PHYSICAL_ADDRESS RangeStart; 258 ULONG RangeLength; 259 UCHAR RangeInIoSpace; 260 UCHAR RangeVisible; 261 UCHAR RangeShareable; 262 UCHAR RangePassive; 263 } VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE; 264 #endif 265 266 typedef VOID DDKAPI 267 (*PVIDEO_HW_LEGACYRESOURCES)( 268 /*IN*/ ULONG VendorId, 269 /*IN*/ ULONG DeviceId, 270 /*IN OUT*/ PVIDEO_ACCESS_RANGE *LegacyResourceList, 271 /*IN OUT*/ PULONG LegacyResourceCount); 272 273 typedef VP_STATUS DDKAPI 274 (*PMINIPORT_QUERY_DEVICE_ROUTINE)( 275 /*IN*/ PVOID HwDeviceExtension, 276 /*IN*/ PVOID Context, 277 /*IN*/ VIDEO_DEVICE_DATA_TYPE DeviceDataType, 278 /*IN*/ PVOID Identifier, 279 /*IN*/ ULONG IdentifierLength, 280 /*IN*/ PVOID ConfigurationData, 281 /*IN*/ ULONG ConfigurationDataLength, 282 /*IN OUT*/ PVOID ComponentInformation, 283 /*IN*/ ULONG ComponentInformationLength); 284 285 typedef struct _QUERY_INTERFACE { 286 CONST GUID *InterfaceType; 287 USHORT Size; 288 USHORT Version; 289 PINTERFACE Interface; 290 PVOID InterfaceSpecificData; 291 } QUERY_INTERFACE, *PQUERY_INTERFACE; 292 293 typedef VP_STATUS DDKAPI 294 (*PVIDEO_HW_QUERY_INTERFACE)( 295 /*IN*/ PVOID HwDeviceExtension, 296 /*IN OUT*/ PQUERY_INTERFACE QueryInterface); 297 298 typedef VP_STATUS DDKAPI 299 (*PMINIPORT_GET_REGISTRY_ROUTINE)( 300 /*IN*/ PVOID HwDeviceExtension, 301 /*IN*/ PVOID Context, 302 /*IN OUT*/ PWSTR ValueName, 303 /*IN OUT*/ PVOID ValueData, 304 /*IN*/ ULONG ValueLength); 305 306 typedef BOOLEAN DDKAPI 307 (*PVIDEO_HW_RESET_HW)( 308 /*IN*/ PVOID HwDeviceExtension, 309 /*IN*/ ULONG Columns, 310 /*IN*/ ULONG Rows); 311 312 typedef VP_STATUS DDKAPI 313 (*PVIDEO_HW_POWER_SET)( 314 /*IN*/ PVOID HwDeviceExtension, 315 /*IN*/ ULONG HwId, 316 /*IN*/ PVIDEO_POWER_MANAGEMENT VideoPowerControl); 317 318 typedef struct _STATUS_BLOCK { 319 _ANONYMOUS_UNION union { 320 VP_STATUS Status; 321 PVOID Pointer; 322 } DUMMYUNIONNAME; 323 ULONG_PTR Information; 324 } STATUS_BLOCK, *PSTATUS_BLOCK; 325 326 typedef struct _VIDEO_REQUEST_PACKET { 327 ULONG IoControlCode; 328 PSTATUS_BLOCK StatusBlock; 329 PVOID InputBuffer; 330 ULONG InputBufferLength; 331 PVOID OutputBuffer; 332 ULONG OutputBufferLength; 333 } VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET; 334 335 typedef BOOLEAN DDKAPI 336 (*PVIDEO_HW_START_IO)( 337 /*IN*/ PVOID HwDeviceExtension, 338 /*IN*/ PVIDEO_REQUEST_PACKET RequestPacket); 339 340 typedef BOOLEAN DDKAPI 341 (*PMINIPORT_SYNCHRONIZE_ROUTINE)( 342 /*IN*/ PVOID Context); 343 344 typedef VOID DDKAPI 345 (*PVIDEO_HW_TIMER)( 346 /*IN*/ PVOID HwDeviceExtension); 347 348 typedef VOID DDKAPI 349 (*PMINIPORT_DPC_ROUTINE)( 350 /*IN*/ PVOID HwDeviceExtension, 351 /*IN*/ PVOID Context); 352 353 typedef VP_STATUS DDKAPI 354 (*PDRIVER_IO_PORT_UCHAR)( 355 /*IN*/ ULONG_PTR Context, 356 /*IN*/ ULONG Port, 357 /*IN*/ UCHAR AccessMode, 358 /*IN*/ PUCHAR Data); 359 360 typedef VP_STATUS DDKAPI 361 (*PDRIVER_IO_PORT_UCHAR_STRING)( 362 /*IN*/ ULONG_PTR Context, 363 /*IN*/ ULONG Port, 364 /*IN*/ UCHAR AccessMode, 365 /*IN*/ PUCHAR Data, 366 /*IN*/ ULONG DataLength); 367 368 typedef VP_STATUS DDKAPI 369 (*PDRIVER_IO_PORT_ULONG)( 370 /*IN*/ ULONG_PTR Context, 371 /*IN*/ ULONG Port, 372 /*IN*/ UCHAR AccessMode, 373 /*IN*/ PULONG Data); 374 375 typedef VP_STATUS DDKAPI 376 (*PDRIVER_IO_PORT_ULONG_STRING)( 377 /*IN*/ ULONG_PTR Context, 378 /*IN*/ ULONG Port, 379 /*IN*/ UCHAR AccessMode, 380 /*IN*/ PULONG Data, 381 /*IN*/ ULONG DataLength); 382 383 typedef VP_STATUS DDKAPI 384 (*PDRIVER_IO_PORT_USHORT)( 385 /*IN*/ ULONG_PTR Context, 386 /*IN*/ ULONG Port, 387 /*IN*/ UCHAR AccessMode, 388 /*IN*/ PUSHORT Data); 389 390 typedef VP_STATUS DDKAPI 391 (*PDRIVER_IO_PORT_USHORT_STRING)( 392 /*IN*/ ULONG_PTR Context, 393 /*IN*/ ULONG Port, 394 /*IN*/ UCHAR AccessMode, 395 /*IN*/ PUSHORT Data, 396 /*IN*/ ULONG DataLength); 397 398 399 400 typedef struct _INT10_BIOS_ARGUMENTS { 401 ULONG Eax; 402 ULONG Ebx; 403 ULONG Ecx; 404 ULONG Edx; 405 ULONG Esi; 406 ULONG Edi; 407 ULONG Ebp; 408 USHORT SegDs; 409 USHORT SegEs; 410 } INT10_BIOS_ARGUMENTS, *PINT10_BIOS_ARGUMENTS; 411 412 typedef struct _VIDEO_CHILD_STATE { 413 ULONG Id; 414 ULONG State; 415 } VIDEO_CHILD_STATE, *PVIDEO_CHILD_STATE; 416 417 typedef struct _VIDEO_CHILD_STATE_CONFIGURATION { 418 ULONG Count; 419 VIDEO_CHILD_STATE ChildStateArray[ANYSIZE_ARRAY]; 420 } VIDEO_CHILD_STATE_CONFIGURATION, *PVIDEO_CHILD_STATE_CONFIGURATION; 421 422 typedef struct _VIDEO_HW_INITIALIZATION_DATA { 423 ULONG HwInitDataSize; 424 INTERFACE_TYPE AdapterInterfaceType; 425 PVIDEO_HW_FIND_ADAPTER HwFindAdapter; 426 PVIDEO_HW_INITIALIZE HwInitialize; 427 PVIDEO_HW_INTERRUPT HwInterrupt; 428 PVIDEO_HW_START_IO HwStartIO; 429 ULONG HwDeviceExtensionSize; 430 ULONG StartingDeviceNumber; 431 PVIDEO_HW_RESET_HW HwResetHw; 432 PVIDEO_HW_TIMER HwTimer; 433 PVIDEO_HW_START_DMA HwStartDma; 434 PVIDEO_HW_POWER_SET HwSetPowerState; 435 PVIDEO_HW_POWER_GET HwGetPowerState; 436 PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor; 437 PVIDEO_HW_QUERY_INTERFACE HwQueryInterface; 438 ULONG HwChildDeviceExtensionSize; 439 PVIDEO_ACCESS_RANGE HwLegacyResourceList; 440 ULONG HwLegacyResourceCount; 441 PVIDEO_HW_LEGACYRESOURCES HwGetLegacyResources; 442 BOOLEAN AllowEarlyEnumeration; 443 ULONG Reserved; 444 } VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA; 445 446 /* VIDEO_PORT_AGP_INTERFACE.Version contants */ 447 #define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1 448 449 typedef struct _VIDEO_PORT_AGP_INTERFACE { 450 SHORT Size; 451 SHORT Version; 452 PVOID Context; 453 PINTERFACE_REFERENCE InterfaceReference; 454 PINTERFACE_DEREFERENCE InterfaceDereference; 455 PAGP_RESERVE_PHYSICAL AgpReservePhysical; 456 PAGP_RELEASE_PHYSICAL AgpReleasePhysical; 457 PAGP_COMMIT_PHYSICAL AgpCommitPhysical; 458 PAGP_FREE_PHYSICAL AgpFreePhysical; 459 PAGP_RESERVE_VIRTUAL AgpReserveVirtual; 460 PAGP_RELEASE_VIRTUAL AgpReleaseVirtual; 461 PAGP_COMMIT_VIRTUAL AgpCommitVirtual; 462 PAGP_FREE_VIRTUAL AgpFreeVirtual; 463 ULONGLONG AgpAllocationLimit; 464 } VIDEO_PORT_AGP_INTERFACE, *PVIDEO_PORT_AGP_INTERFACE; 465 466 /* VIDEO_PORT_AGP_INTERFACE_2.Version constants */ 467 #define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2 468 469 typedef struct _VIDEO_PORT_AGP_INTERFACE_2 { 470 /*IN*/ USHORT Size; 471 /*IN*/ USHORT Version; 472 /*OUT*/ PVOID Context; 473 /*OUT*/ PINTERFACE_REFERENCE InterfaceReference; 474 /*OUT*/ PINTERFACE_DEREFERENCE InterfaceDereference; 475 /*OUT*/ PAGP_RESERVE_PHYSICAL AgpReservePhysical; 476 /*OUT*/ PAGP_RELEASE_PHYSICAL AgpReleasePhysical; 477 /*OUT*/ PAGP_COMMIT_PHYSICAL AgpCommitPhysical; 478 /*OUT*/ PAGP_FREE_PHYSICAL AgpFreePhysical; 479 /*OUT*/ PAGP_RESERVE_VIRTUAL AgpReserveVirtual; 480 /*OUT*/ PAGP_RELEASE_VIRTUAL AgpReleaseVirtual; 481 /*OUT*/ PAGP_COMMIT_VIRTUAL AgpCommitVirtual; 482 /*OUT*/ PAGP_FREE_VIRTUAL AgpFreeVirtual; 483 /*OUT*/ ULONGLONG AgpAllocationLimit; 484 /*OUT*/ PAGP_SET_RATE AgpSetRate; 485 } VIDEO_PORT_AGP_INTERFACE_2, *PVIDEO_PORT_AGP_INTERFACE_2; 486 487 #define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1 488 489 typedef VOID DDKAPI 490 (*PVIDEO_WRITE_CLOCK_LINE)( 491 PVOID HwDeviceExtension, 492 UCHAR Data); 493 494 typedef VOID DDKAPI 495 (*PVIDEO_WRITE_DATA_LINE)( 496 PVOID HwDeviceExtension, 497 UCHAR Data); 498 499 typedef BOOLEAN DDKAPI 500 (*PVIDEO_READ_CLOCK_LINE)( 501 PVOID HwDeviceExtension); 502 503 typedef BOOLEAN DDKAPI 504 (*PVIDEO_READ_DATA_LINE)( 505 PVOID HwDeviceExtension); 506 507 typedef struct _I2C_CALLBACKS 508 { 509 /*IN*/ PVIDEO_WRITE_CLOCK_LINE WriteClockLine; 510 /*IN*/ PVIDEO_WRITE_DATA_LINE WriteDataLine; 511 /*IN*/ PVIDEO_READ_CLOCK_LINE ReadClockLine; 512 /*IN*/ PVIDEO_READ_DATA_LINE ReadDataLine; 513 } I2C_CALLBACKS, *PI2C_CALLBACKS; 514 515 typedef BOOLEAN DDKAPI 516 (*PI2C_START)( 517 /*IN*/ PVOID HwDeviceExtension, 518 /*IN*/ PI2C_CALLBACKS I2CCallbacks); 519 520 typedef BOOLEAN DDKAPI 521 (*PI2C_STOP)( 522 /*IN*/ PVOID HwDeviceExtension, 523 /*IN*/ PI2C_CALLBACKS I2CCallbacks); 524 525 typedef BOOLEAN DDKAPI 526 (*PI2C_WRITE)( 527 /*IN*/ PVOID HwDeviceExtension, 528 /*IN*/ PI2C_CALLBACKS I2CCallbacks, 529 /*IN*/ PUCHAR Buffer, 530 /*IN*/ ULONG Length); 531 532 typedef BOOLEAN DDKAPI 533 (*PI2C_READ)( 534 /*IN*/ PVOID HwDeviceExtension, 535 /*IN*/ PI2C_CALLBACKS I2CCallbacks, 536 /*OUT*/ PUCHAR Buffer, 537 /*IN*/ ULONG Length); 538 539 typedef struct _VIDEO_PORT_I2C_INTERFACE { 540 USHORT Size; 541 USHORT Version; 542 PVOID Context; 543 PINTERFACE_REFERENCE InterfaceReference; 544 PINTERFACE_DEREFERENCE InterfaceDereference; 545 PI2C_START I2CStart; 546 PI2C_STOP I2CStop; 547 PI2C_WRITE I2CWrite; 548 PI2C_READ I2CRead; 549 } VIDEO_PORT_I2C_INTERFACE, *PVIDEO_PORT_I2C_INTERFACE; 550 551 /* VIDEO_PORT_INT10_INTERFACE.Version constants */ 552 #define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1 553 554 typedef VP_STATUS DDKAPI 555 (*PINT10_ALLOCATE_BUFFER)( 556 /*IN*/ PVOID Context, 557 /*OUT*/ PUSHORT Seg, 558 /*OUT*/ PUSHORT Off, 559 /*IN OUT*/ PULONG Length); 560 561 typedef VP_STATUS DDKAPI 562 (*PINT10_CALL_BIOS)( 563 /*IN*/ PVOID Context, 564 /*IN OUT*/ PINT10_BIOS_ARGUMENTS BiosArguments); 565 566 typedef VP_STATUS DDKAPI 567 (*PINT10_FREE_BUFFER)( 568 /*IN*/ PVOID Context, 569 /*IN*/ USHORT Seg, 570 /*IN*/ USHORT Off); 571 572 typedef VP_STATUS DDKAPI 573 (*PINT10_READ_MEMORY)( 574 /*IN*/ PVOID Context, 575 /*IN*/ USHORT Seg, 576 /*IN*/ USHORT Off, 577 /*OUT*/ PVOID Buffer, 578 /*IN*/ ULONG Length); 579 580 typedef VP_STATUS DDKAPI 581 (*PINT10_WRITE_MEMORY)( 582 /*IN*/ PVOID Context, 583 /*IN*/ USHORT Seg, 584 /*IN*/ USHORT Off, 585 /*IN*/ PVOID Buffer, 586 /*IN*/ ULONG Length); 587 588 typedef struct _VIDEO_PORT_INT10_INTERFACE { 589 /*IN*/ USHORT Size; 590 /*IN*/ USHORT Version; 591 /*OUT*/ PVOID Context; 592 /*OUT*/ PINTERFACE_REFERENCE InterfaceReference; 593 /*OUT*/ PINTERFACE_DEREFERENCE InterfaceDereference; 594 /*OUT*/ PINT10_ALLOCATE_BUFFER Int10AllocateBuffer; 595 /*OUT*/ PINT10_FREE_BUFFER Int10FreeBuffer; 596 /*OUT*/ PINT10_READ_MEMORY Int10ReadMemory; 597 /*OUT*/ PINT10_WRITE_MEMORY Int10WriteMemory; 598 /*OUT*/ PINT10_CALL_BIOS Int10CallBios; 599 } VIDEO_PORT_INT10_INTERFACE, *PVIDEO_PORT_INT10_INTERFACE; 600 601 /* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */ 602 #define VIDEO_MEMORY_SPACE_MEMORY 0x00 603 #define VIDEO_MEMORY_SPACE_IO 0x01 604 #define VIDEO_MEMORY_SPACE_USER_MODE 0x02 605 #define VIDEO_MEMORY_SPACE_DENSE 0x04 606 #define VIDEO_MEMORY_SPACE_P6CACHE 0x08 607 608 typedef struct _VIDEO_X86_BIOS_ARGUMENTS { 609 ULONG Eax; 610 ULONG Ebx; 611 ULONG Ecx; 612 ULONG Edx; 613 ULONG Esi; 614 ULONG Edi; 615 ULONG Ebp; 616 } VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS; 617 618 typedef struct _VP_DEVICE_DESCRIPTION { 619 BOOLEAN ScatterGather; 620 BOOLEAN Dma32BitAddresses; 621 BOOLEAN Dma64BitAddresses; 622 ULONG MaximumLength; 623 } VP_DEVICE_DESCRIPTION, *PVP_DEVICE_DESCRIPTION; 624 625 typedef struct _VPOSVERSIONINFO { 626 /*IN*/ ULONG Size; 627 /*OUT*/ ULONG MajorVersion; 628 /*OUT*/ ULONG MinorVersion; 629 /*OUT*/ ULONG BuildNumber; 630 /*OUT*/ USHORT ServicePackMajor; 631 /*OUT*/ USHORT ServicePackMinor; 632 } VPOSVERSIONINFO, *PVPOSVERSIONINFO; 633 634 635 636 /* Video port functions for miniports */ 637 638 VPAPI 639 VOID 640 DDKAPI 641 VideoDebugPrint( 642 /*IN*/ ULONG DebugPrintLevel, 643 /*IN*/ PCHAR DebugMessage, 644 /*IN*/ ...); 645 646 VPAPI 647 VOID 648 DDKAPI 649 VideoPortAcquireDeviceLock( 650 /*IN*/ PVOID HwDeviceExtension); 651 652 VPAPI 653 VOID 654 DDKAPI 655 VideoPortAcquireSpinLock( 656 /*IN*/ PVOID HwDeviceExtension, 657 /*IN*/ PSPIN_LOCK SpinLock, 658 /*OUT*/ PUCHAR OldIrql); 659 660 VPAPI 661 VOID 662 DDKAPI 663 VideoPortAcquireSpinLockAtDpcLevel( 664 /*IN*/ PVOID HwDeviceExtension, 665 /*IN*/ PSPIN_LOCK SpinLock); 666 667 VPAPI 668 VP_STATUS 669 DDKAPI 670 VideoPortAllocateBuffer( 671 /*IN*/ PVOID HwDeviceExtension, 672 /*IN*/ ULONG Size, 673 /*OUT*/ PVOID *Buffer); 674 675 VPAPI 676 PVOID 677 DDKAPI 678 VideoPortAllocateCommonBuffer( 679 /*IN*/ PVOID HwDeviceExtension, 680 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter, 681 /*IN*/ ULONG DesiredLength, 682 /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress, 683 /*IN*/ BOOLEAN CacheEnabled, 684 PVOID Reserved); 685 686 VPAPI 687 PVOID 688 DDKAPI 689 VideoPortAllocateContiguousMemory( 690 /*IN*/ PVOID HwDeviceExtension, 691 /*IN*/ ULONG NumberOfBytes, 692 /*IN*/ PHYSICAL_ADDRESS HighestAcceptableAddress); 693 694 /* VideoPortAllocatePool.PoolType constants */ 695 typedef enum _VP_POOL_TYPE { 696 VpNonPagedPool = 0, 697 VpPagedPool, 698 VpNonPagedPoolCacheAligned = 4, 699 VpPagedPoolCacheAligned 700 } VP_POOL_TYPE, *PVP_POOL_TYPE; 701 702 VPAPI 703 PVOID 704 DDKAPI 705 VideoPortAllocatePool( 706 /*IN*/ PVOID HwDeviceExtension, 707 /*IN*/ VP_POOL_TYPE PoolType, 708 /*IN*/ SIZE_T NumberOfBytes, 709 /*IN*/ ULONG Tag); 710 711 VPAPI 712 PDMA 713 DDKAPI 714 VideoPortAssociateEventsWithDmaHandle( 715 /*IN*/ PVOID HwDeviceExtension, 716 /*IN OUT*/ PVIDEO_REQUEST_PACKET pVrp, 717 /*IN*/ PVOID MappedUserEvent, 718 /*IN*/ PVOID DisplayDriverEvent); 719 720 /* VideoPortCheckForDeviceExistence.Flags constants */ 721 #define CDE_USE_SUBSYSTEM_IDS 0x00000001 722 #define CDE_USE_REVISION 0x00000002 723 724 VPAPI 725 BOOLEAN 726 DDKAPI 727 VideoPortCheckForDeviceExistence( 728 /*IN*/ PVOID HwDeviceExtension, 729 /*IN*/ USHORT VendorId, 730 /*IN*/ USHORT DeviceId, 731 /*IN*/ UCHAR RevisionId, 732 /*IN*/ USHORT SubVendorId, 733 /*IN*/ USHORT SubSystemId, 734 /*IN*/ ULONG Flags); 735 736 VPAPI 737 VOID 738 DDKAPI 739 VideoPortClearEvent( 740 /*IN*/ PVOID HwDeviceExtension, 741 /*IN*/ PEVENT pEvent); 742 743 VPAPI 744 ULONG 745 DDKAPI 746 VideoPortCompareMemory( 747 /*IN*/ PVOID Source1, 748 /*IN*/ PVOID Source2, 749 /*IN*/ ULONG Length); 750 751 VPAPI 752 VP_STATUS 753 DDKAPI 754 VideoPortCompleteDma( 755 /*IN*/ PVOID HwDeviceExtension, 756 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter, 757 /*IN*/ PVP_SCATTER_GATHER_LIST VpScatterGather, 758 /*IN*/ BOOLEAN WriteToDevice); 759 760 VPAPI 761 VP_STATUS 762 DDKAPI 763 VideoPortCreateEvent( 764 /*IN*/ PVOID HwDeviceExtension, 765 /*IN*/ ULONG EventFlag, 766 /*IN*/ PVOID Unused, 767 /*OUT*/ PEVENT *ppEvent); 768 769 VPAPI 770 VP_STATUS 771 DDKAPI 772 VideoPortCreateSecondaryDisplay( 773 /*IN*/ PVOID HwDeviceExtension, 774 /*IN OUT*/ PVOID *SecondaryDeviceExtension, 775 /*IN*/ ULONG ulFlag); 776 777 VPAPI 778 VP_STATUS 779 DDKAPI 780 VideoPortCreateSpinLock( 781 /*IN*/ PVOID HwDeviceExtension, 782 /*OUT*/ PSPIN_LOCK *SpinLock); 783 784 typedef struct _DDC_CONTROL { 785 /*IN*/ ULONG Size; 786 /*IN*/ I2C_CALLBACKS I2CCallbacks; 787 /*IN*/ UCHAR EdidSegment; 788 } DDC_CONTROL, *PDDC_CONTROL; 789 790 VPAPI 791 BOOLEAN 792 DDKAPI 793 VideoPortDDCMonitorHelper( 794 /*IN*/ PVOID HwDeviceExtension, 795 /*IN*/ PVOID DDCControl, 796 /*IN OUT*/ PUCHAR EdidBuffer, 797 /*IN*/ ULONG EdidBufferSize); 798 799 VPAPI 800 VOID 801 DDKCDECLAPI 802 VideoPortDebugPrint( 803 /*IN*/ VIDEO_DEBUG_LEVEL DebugPrintLevel, 804 /*IN*/ PCHAR DebugMessage, 805 /*IN*/ ...); 806 807 VPAPI 808 VP_STATUS 809 DDKAPI 810 VideoPortDeleteEvent( 811 /*IN*/ PVOID HwDeviceExtension, 812 /*IN*/ PEVENT pEvent); 813 814 VPAPI 815 VP_STATUS 816 DDKAPI 817 VideoPortDeleteSpinLock( 818 /*IN*/ PVOID HwDeviceExtension, 819 /*IN*/ PSPIN_LOCK SpinLock); 820 821 VPAPI 822 VP_STATUS 823 DDKAPI 824 VideoPortDisableInterrupt( 825 /*IN*/ PVOID HwDeviceExtension); 826 827 VPAPI 828 PDMA 829 DDKAPI 830 VideoPortDoDma( 831 /*IN*/ PVOID HwDeviceExtension, 832 /*IN*/ PDMA pDma, 833 /*IN*/ DMA_FLAGS DmaFlags); 834 835 VPAPI 836 VP_STATUS 837 DDKAPI 838 VideoPortEnableInterrupt( 839 /*IN*/ PVOID HwDeviceExtension); 840 841 VPAPI 842 VP_STATUS 843 DDKAPI 844 VideoPortEnumerateChildren( 845 /*IN*/ PVOID HwDeviceExtension, 846 /*IN*/ PVOID Reserved); 847 848 VPAPI 849 VOID 850 DDKAPI 851 VideoPortFreeCommonBuffer( 852 /*IN*/ PVOID HwDeviceExtension, 853 /*IN*/ ULONG Length, 854 /*IN*/ PVOID VirtualAddress, 855 /*IN*/ PHYSICAL_ADDRESS LogicalAddress, 856 /*IN*/ BOOLEAN CacheEnabled); 857 858 VPAPI 859 VOID 860 DDKAPI 861 VideoPortFreeDeviceBase( 862 /*IN*/ PVOID HwDeviceExtension, 863 /*IN*/ PVOID MappedAddress); 864 865 VPAPI 866 VOID 867 DDKAPI 868 VideoPortFreePool( 869 /*IN*/ PVOID HwDeviceExtension, 870 /*IN*/ PVOID Ptr); 871 872 VPAPI 873 VP_STATUS 874 DDKAPI 875 VideoPortGetAccessRanges( 876 /*IN*/ PVOID HwDeviceExtension, 877 /*IN*/ ULONG NumRequestedResources, 878 /*IN*/ PIO_RESOURCE_DESCRIPTOR RequestedResources /*OPTIONAL*/, 879 /*IN*/ ULONG NumAccessRanges, 880 /*OUT*/ PVIDEO_ACCESS_RANGE AccessRanges, 881 /*IN*/ PVOID VendorId, 882 /*IN*/ PVOID DeviceId, 883 /*OUT*/ PULONG Slot); 884 885 VPAPI 886 PVOID 887 DDKAPI 888 VideoPortGetAssociatedDeviceExtension( 889 /*IN*/ PVOID DeviceObject); 890 891 VPAPI 892 ULONG 893 DDKAPI 894 VideoPortGetAssociatedDeviceID( 895 /*IN*/ PVOID DeviceObject); 896 897 VPAPI 898 ULONG 899 DDKAPI 900 VideoPortGetBusData( 901 /*IN*/ PVOID HwDeviceExtension, 902 /*IN*/ BUS_DATA_TYPE BusDataType, 903 /*IN*/ ULONG SlotNumber, 904 /*IN OUT*/ PVOID Buffer, 905 /*IN*/ ULONG Offset, 906 /*IN*/ ULONG Length); 907 908 VPAPI 909 ULONG 910 DDKAPI 911 VideoPortGetBytesUsed( 912 /*IN*/ PVOID HwDeviceExtension, 913 /*IN*/ PDMA pDma); 914 915 VPAPI 916 PVOID 917 DDKAPI 918 VideoPortGetCommonBuffer( 919 /*IN*/ PVOID HwDeviceExtension, 920 /*IN*/ ULONG DesiredLength, 921 /*IN*/ ULONG Alignment, 922 /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress, 923 /*OUT*/ PULONG pActualLength, 924 /*IN*/ BOOLEAN CacheEnabled); 925 926 VPAPI 927 UCHAR 928 DDKAPI 929 VideoPortGetCurrentIrql( 930 VOID); 931 932 VPAPI 933 PVOID 934 DDKAPI 935 VideoPortGetDeviceBase( 936 /*IN*/ PVOID HwDeviceExtension, 937 /*IN*/ PHYSICAL_ADDRESS IoAddress, 938 /*IN*/ ULONG NumberOfUchars, 939 /*IN*/ UCHAR InIoSpace); 940 941 VPAPI 942 VP_STATUS 943 DDKAPI 944 VideoPortGetDeviceData( 945 /*IN*/ PVOID HwDeviceExtension, 946 /*IN*/ VIDEO_DEVICE_DATA_TYPE DeviceDataType, 947 /*IN*/ PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine, 948 /*IN*/ PVOID Context); 949 950 VPAPI 951 PVP_DMA_ADAPTER 952 DDKAPI 953 VideoPortGetDmaAdapter( 954 /*IN*/ PVOID HwDeviceExtension, 955 /*IN*/ PVP_DEVICE_DESCRIPTION VpDeviceDescription); 956 957 VPAPI 958 PVOID 959 DDKAPI 960 VideoPortGetDmaContext( 961 /*IN*/ PVOID HwDeviceExtension, 962 /*IN*/ PDMA pDma); 963 964 VPAPI 965 PVOID 966 DDKAPI 967 VideoPortGetMdl( 968 /*IN*/ PVOID HwDeviceExtension, 969 /*IN*/ PDMA pDma); 970 971 VPAPI 972 VP_STATUS 973 DDKAPI 974 VideoPortGetRegistryParameters( 975 /*IN*/ PVOID HwDeviceExtension, 976 /*IN*/ PWSTR ParameterName, 977 /*IN*/ UCHAR IsParameterFileName, 978 /*IN*/ PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine, 979 /*IN*/ PVOID Context); 980 981 VPAPI 982 PVOID 983 DDKAPI 984 VideoPortGetRomImage( 985 /*IN*/ PVOID HwDeviceExtension, 986 /*IN*/ PVOID Unused1, 987 /*IN*/ ULONG Unused2, 988 /*IN*/ ULONG Length); 989 990 VPAPI 991 VP_STATUS 992 DDKAPI 993 VideoPortGetVersion( 994 /*IN*/ PVOID HwDeviceExtension, 995 /*IN OUT*/ PVPOSVERSIONINFO pVpOsVersionInfo); 996 997 VPAPI 998 VP_STATUS 999 DDKAPI 1000 VideoPortGetVgaStatus( 1001 /*IN*/ PVOID HwDeviceExtension, 1002 /*OUT*/ PULONG VgaStatus); 1003 1004 VPAPI 1005 ULONG 1006 DDKAPI 1007 VideoPortInitialize( 1008 /*IN*/ PVOID Argument1, 1009 /*IN*/ PVOID Argument2, 1010 /*IN*/ PVIDEO_HW_INITIALIZATION_DATA HwInitializationData, 1011 /*IN*/ PVOID HwContext); 1012 1013 VPAPI 1014 VP_STATUS 1015 DDKAPI 1016 VideoPortInt10( 1017 /*IN*/ PVOID HwDeviceExtension, 1018 /*IN*/ PVIDEO_X86_BIOS_ARGUMENTS BiosArguments); 1019 1020 VPAPI 1021 LONG 1022 DDKFASTAPI 1023 VideoPortInterlockedDecrement( 1024 /*IN*/ PLONG Addend); 1025 1026 VPAPI 1027 LONG 1028 DDKFASTAPI 1029 VideoPortInterlockedExchange( 1030 /*IN OUT*/ PLONG Target, 1031 /*IN*/ LONG Value); 1032 1033 VPAPI 1034 LONG 1035 DDKFASTAPI 1036 VideoPortInterlockedIncrement( 1037 /*IN*/ PLONG Addend); 1038 1039 typedef enum _VP_LOCK_OPERATION { 1040 VpReadAccess = 0, 1041 VpWriteAccess, 1042 VpModifyAccess 1043 } VP_LOCK_OPERATION; 1044 1045 VPAPI 1046 PVOID 1047 DDKAPI 1048 VideoPortLockBuffer( 1049 /*IN*/ PVOID HwDeviceExtension, 1050 /*IN*/ PVOID BaseAddress, 1051 /*IN*/ ULONG Length, 1052 /*IN*/ VP_LOCK_OPERATION Operation); 1053 1054 VPAPI 1055 BOOLEAN 1056 DDKAPI 1057 VideoPortLockPages( 1058 /*IN*/ PVOID HwDeviceExtension, 1059 /*IN OUT*/ PVIDEO_REQUEST_PACKET pVrp, 1060 /*IN OUT*/ PEVENT pUEvent, 1061 /*IN*/ PEVENT pDisplayEvent, 1062 /*IN*/ DMA_FLAGS DmaFlags); 1063 1064 VPAPI 1065 VOID 1066 DDKAPI 1067 VideoPortLogError( 1068 /*IN*/ PVOID HwDeviceExtension, 1069 /*IN*/ PVIDEO_REQUEST_PACKET Vrp /*OPTIONAL*/, 1070 /*IN*/ VP_STATUS ErrorCode, 1071 /*IN*/ ULONG UniqueId); 1072 1073 VPAPI 1074 VP_STATUS 1075 DDKAPI 1076 VideoPortMapBankedMemory( 1077 /*IN*/ PVOID HwDeviceExtension, 1078 /*IN*/ PHYSICAL_ADDRESS PhysicalAddress, 1079 /*IN OUT*/ PULONG Length, 1080 PULONG InIoSpace, 1081 PVOID *VirtualAddress, 1082 ULONG BankLength, 1083 UCHAR ReadWriteBank, 1084 PBANKED_SECTION_ROUTINE BankRoutine, 1085 PVOID Context); 1086 1087 VPAPI 1088 PDMA 1089 DDKAPI 1090 VideoPortMapDmaMemory( 1091 /*IN*/ PVOID HwDeviceExtension, 1092 /*IN*/ PVIDEO_REQUEST_PACKET pVrp, 1093 /*IN*/ PHYSICAL_ADDRESS BoardAddress, 1094 /*IN*/ PULONG Length, 1095 /*IN*/ PULONG InIoSpace, 1096 /*IN*/ PVOID MappedUserEvent, 1097 /*IN*/ PVOID DisplayDriverEvent, 1098 /*IN OUT*/ PVOID *VirtualAddress); 1099 1100 VPAPI 1101 VP_STATUS 1102 DDKAPI 1103 VideoPortMapMemory( 1104 /*IN*/ PVOID HwDeviceExtension, 1105 /*IN*/ PHYSICAL_ADDRESS PhysicalAddress, 1106 /*IN OUT*/ PULONG Length, 1107 /*IN*/ PULONG InIoSpace, 1108 /*IN OUT*/ PVOID *VirtualAddress); 1109 1110 VPAPI 1111 VOID 1112 DDKAPI 1113 VideoPortMoveMemory( 1114 /*IN*/ PVOID Destination, 1115 /*IN*/ PVOID Source, 1116 /*IN*/ ULONG Length); 1117 1118 VPAPI 1119 VOID 1120 DDKAPI 1121 VideoPortPutDmaAdapter( 1122 /*IN*/ PVOID HwDeviceExtension, 1123 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter); 1124 1125 VPAPI 1126 LONGLONG 1127 DDKAPI 1128 VideoPortQueryPerformanceCounter( 1129 /*IN*/ PVOID HwDeviceExtension, 1130 /*OUT*/ PLONGLONG PerformanceFrequency /*OPTIONAL*/); 1131 1132 /* VideoPortQueryServices.ServicesType constants */ 1133 typedef enum _VIDEO_PORT_SERVICES { 1134 VideoPortServicesAGP = 1, 1135 VideoPortServicesI2C, 1136 VideoPortServicesHeadless, 1137 VideoPortServicesInt10 1138 } VIDEO_PORT_SERVICES; 1139 1140 VPAPI 1141 VP_STATUS 1142 DDKAPI 1143 VideoPortQueryServices( 1144 /*IN*/ PVOID HwDeviceExtension, 1145 /*IN*/ VIDEO_PORT_SERVICES ServicesType, 1146 /*IN OUT*/ PINTERFACE Interface); 1147 1148 VPAPI 1149 VOID 1150 DDKAPI 1151 VideoPortQuerySystemTime( 1152 /*OUT*/ PLARGE_INTEGER CurrentTime); 1153 1154 VPAPI 1155 BOOLEAN 1156 DDKAPI 1157 VideoPortQueueDpc( 1158 /*IN*/ PVOID HwDeviceExtension, 1159 /*IN*/ PMINIPORT_DPC_ROUTINE CallbackRoutine, 1160 /*IN*/ PVOID Context); 1161 1162 VPAPI 1163 VOID 1164 DDKAPI 1165 VideoPortReadPortBufferUchar( 1166 /*IN*/ PUCHAR Port, 1167 /*OUT*/ PUCHAR Buffer, 1168 /*IN*/ ULONG Count); 1169 1170 VPAPI 1171 VOID 1172 DDKAPI 1173 VideoPortReadPortBufferUlong( 1174 /*IN*/ PULONG Port, 1175 /*OUT*/ PULONG Buffer, 1176 /*IN*/ ULONG Count); 1177 1178 VPAPI 1179 VOID 1180 DDKAPI 1181 VideoPortReadPortBufferUshort( 1182 /*IN*/ PUSHORT Port, 1183 /*OUT*/ PUSHORT Buffer, 1184 /*IN*/ ULONG Count); 1185 1186 VPAPI 1187 UCHAR 1188 DDKAPI 1189 VideoPortReadPortUchar( 1190 /*IN*/ PUCHAR Port); 1191 1192 VPAPI 1193 ULONG 1194 DDKAPI 1195 VideoPortReadPortUlong( 1196 /*IN*/ PULONG Port); 1197 1198 VPAPI 1199 USHORT 1200 DDKAPI 1201 VideoPortReadPortUshort( 1202 /*IN*/ PUSHORT Port); 1203 1204 VPAPI 1205 VOID 1206 DDKAPI 1207 VideoPortReadRegisterBufferUchar( 1208 /*IN*/ PUCHAR Register, 1209 /*OUT*/ PUCHAR Buffer, 1210 /*IN*/ ULONG Count); 1211 1212 VPAPI 1213 VOID 1214 DDKAPI 1215 VideoPortReadRegisterBufferUlong( 1216 /*IN*/ PULONG Register, 1217 /*OUT*/ PULONG Buffer, 1218 /*IN*/ ULONG Count); 1219 1220 VPAPI 1221 VOID 1222 DDKAPI 1223 VideoPortReadRegisterBufferUshort( 1224 /*IN*/ PUSHORT Register, 1225 /*OUT*/ PUSHORT Buffer, 1226 /*IN*/ ULONG Count); 1227 1228 VPAPI 1229 UCHAR 1230 DDKAPI 1231 VideoPortReadRegisterUchar( 1232 /*IN*/ PUCHAR Register); 1233 1234 VPAPI 1235 ULONG 1236 DDKAPI 1237 VideoPortReadRegisterUlong( 1238 /*IN*/ PULONG Register); 1239 1240 VPAPI 1241 USHORT 1242 DDKAPI 1243 VideoPortReadRegisterUshort( 1244 /*IN*/ PUSHORT Register); 1245 1246 VPAPI 1247 LONG 1248 DDKAPI 1249 VideoPortReadStateEvent( 1250 /*IN*/ PVOID HwDeviceExtension, 1251 /*IN*/ PEVENT pEvent); 1252 1253 VPAPI 1254 VOID 1255 DDKAPI 1256 VideoPortReleaseBuffer( 1257 /*IN*/ PVOID HwDeviceExtension, 1258 /*IN*/ PVOID Buffer); 1259 1260 VPAPI 1261 VOID 1262 DDKAPI 1263 VideoPortReleaseCommonBuffer( 1264 /*IN*/ PVOID HwDeviceExtension, 1265 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter, 1266 /*IN*/ ULONG Length, 1267 /*IN*/ PHYSICAL_ADDRESS LogicalAddress, 1268 /*IN*/ PVOID VirtualAddress, 1269 /*IN*/ BOOLEAN CacheEnabled); 1270 1271 VPAPI 1272 VOID 1273 DDKAPI 1274 VideoPortReleaseDeviceLock( 1275 /*IN*/ PVOID HwDeviceExtension); 1276 1277 VPAPI 1278 VOID 1279 DDKAPI 1280 VideoPortReleaseSpinLock( 1281 /*IN*/ PVOID HwDeviceExtension, 1282 /*IN*/ PSPIN_LOCK SpinLock, 1283 /*IN*/ UCHAR NewIrql); 1284 1285 VPAPI 1286 VOID 1287 DDKAPI 1288 VideoPortReleaseSpinLockFromDpcLevel( 1289 /*IN*/ PVOID HwDeviceExtension, 1290 /*IN*/ PSPIN_LOCK SpinLock); 1291 1292 VPAPI 1293 BOOLEAN 1294 DDKAPI 1295 VideoPortScanRom( 1296 PVOID HwDeviceExtension, 1297 PUCHAR RomBase, 1298 ULONG RomLength, 1299 PUCHAR String); 1300 1301 VPAPI 1302 ULONG 1303 DDKAPI 1304 VideoPortSetBusData( 1305 /*IN*/ PVOID HwDeviceExtension, 1306 /*IN*/ BUS_DATA_TYPE BusDataType, 1307 /*IN*/ ULONG SlotNumber, 1308 /*IN*/ PVOID Buffer, 1309 /*IN*/ ULONG Offset, 1310 /*IN*/ ULONG Length); 1311 1312 VPAPI 1313 VOID 1314 DDKAPI 1315 VideoPortSetBytesUsed( 1316 /*IN*/ PVOID HwDeviceExtension, 1317 /*IN OUT*/ PDMA pDma, 1318 /*IN*/ ULONG BytesUsed); 1319 1320 VPAPI 1321 VOID 1322 DDKAPI 1323 VideoPortSetDmaContext( 1324 /*IN*/ PVOID HwDeviceExtension, 1325 /*OUT*/ PDMA pDma, 1326 /*IN*/ PVOID InstanceContext); 1327 1328 VPAPI 1329 LONG 1330 DDKAPI 1331 VideoPortSetEvent( 1332 /*IN*/ PVOID HwDeviceExtension, 1333 /*IN*/ PEVENT pEvent); 1334 1335 VPAPI 1336 VP_STATUS 1337 DDKAPI 1338 VideoPortSetRegistryParameters( 1339 /*IN*/ PVOID HwDeviceExtension, 1340 /*IN*/ PWSTR ValueName, 1341 /*IN*/ PVOID ValueData, 1342 /*IN*/ ULONG ValueLength); 1343 1344 VPAPI 1345 VP_STATUS 1346 DDKAPI 1347 VideoPortSetTrappedEmulatorPorts( 1348 /*IN*/ PVOID HwDeviceExtension, 1349 /*IN*/ ULONG NumAccessRanges, 1350 /*IN*/ PVIDEO_ACCESS_RANGE AccessRange); 1351 1352 VPAPI 1353 BOOLEAN 1354 DDKAPI 1355 VideoPortSignalDmaComplete( 1356 /*IN*/ PVOID HwDeviceExtension, 1357 /*IN*/ PVOID pDmaHandle); 1358 1359 VPAPI 1360 VOID 1361 DDKAPI 1362 VideoPortStallExecution( 1363 /*IN*/ ULONG Microseconds); 1364 1365 VPAPI 1366 VP_STATUS 1367 DDKAPI 1368 VideoPortStartDma( 1369 /*IN*/ PVOID HwDeviceExtension, 1370 /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter, 1371 /*IN*/ PVOID Mdl, 1372 /*IN*/ ULONG Offset, 1373 /*IN OUT*/ PULONG pLength, 1374 /*IN*/ PEXECUTE_DMA ExecuteDmaRoutine, 1375 /*IN*/ PVOID Context, 1376 /*IN*/ BOOLEAN WriteToDevice); 1377 1378 VPAPI 1379 VOID 1380 DDKAPI 1381 VideoPortStartTimer( 1382 /*IN*/ PVOID HwDeviceExtension); 1383 1384 VPAPI 1385 VOID 1386 DDKAPI 1387 VideoPortStopTimer( 1388 /*IN*/ PVOID HwDeviceExtension); 1389 1390 /* VideoPortSynchronizeExecution.Priority constants */ 1391 typedef enum VIDEO_SYNCHRONIZE_PRIORITY { 1392 VpLowPriority = 0, 1393 VpMediumPriority, 1394 VpHighPriority 1395 } VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY; 1396 1397 VPAPI 1398 BOOLEAN 1399 DDKAPI 1400 VideoPortSynchronizeExecution( 1401 /*IN*/ PVOID HwDeviceExtension, 1402 /*IN*/ VIDEO_SYNCHRONIZE_PRIORITY Priority, 1403 /*IN*/ PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine, 1404 /*IN*/ PVOID Context); 1405 1406 VPAPI 1407 VOID 1408 DDKAPI 1409 VideoPortUnLockBuffer( 1410 /*IN*/ PVOID HwDeviceExtension, 1411 /*IN*/ PVOID Mdl); 1412 1413 VPAPI 1414 BOOLEAN 1415 DDKAPI 1416 VideoPortUnlockPages( 1417 /*IN*/ PVOID hwDeviceExtension, 1418 /*IN OUT*/ PDMA pDma); 1419 1420 VPAPI 1421 BOOLEAN 1422 DDKAPI 1423 VideoPortUnmapDmaMemory( 1424 /*IN*/ PVOID HwDeviceExtension, 1425 /*IN*/ PVOID VirtualAddress, 1426 /*IN*/ HANDLE ProcessHandle, 1427 /*IN*/ PDMA BoardMemoryHandle); 1428 1429 VPAPI 1430 VP_STATUS 1431 DDKAPI 1432 VideoPortUnmapMemory( 1433 /*IN*/ PVOID HwDeviceExtension, 1434 /*IN OUT*/ PVOID VirtualAddress, 1435 /*IN*/ HANDLE ProcessHandle); 1436 1437 VPAPI 1438 VP_STATUS 1439 DDKAPI 1440 VideoPortVerifyAccessRanges( 1441 /*IN*/ PVOID HwDeviceExtension, 1442 /*IN*/ ULONG NumAccessRanges, 1443 /*IN*/ PVIDEO_ACCESS_RANGE AccessRanges); 1444 1445 VPAPI 1446 VP_STATUS 1447 DDKAPI 1448 VideoPortWaitForSingleObject( 1449 /*IN*/ PVOID HwDeviceExtension, 1450 /*IN*/ PVOID Object, 1451 /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/); 1452 1453 VPAPI 1454 VOID 1455 DDKAPI 1456 VideoPortWritePortBufferUchar( 1457 /*IN*/ PUCHAR Port, 1458 /*IN*/ PUCHAR Buffer, 1459 /*IN*/ ULONG Count); 1460 1461 VPAPI 1462 VOID 1463 DDKAPI 1464 VideoPortWritePortBufferUlong( 1465 /*IN*/ PULONG Port, 1466 /*IN*/ PULONG Buffer, 1467 /*IN*/ ULONG Count); 1468 1469 VPAPI 1470 VOID 1471 DDKAPI 1472 VideoPortWritePortBufferUshort( 1473 /*IN*/ PUSHORT Port, 1474 /*IN*/ PUSHORT Buffer, 1475 /*IN*/ ULONG Count); 1476 1477 VPAPI 1478 VOID 1479 DDKAPI 1480 VideoPortWritePortUchar( 1481 /*IN*/ PUCHAR Port, 1482 /*IN*/ UCHAR Value); 1483 1484 VPAPI 1485 VOID 1486 DDKAPI 1487 VideoPortWritePortUlong( 1488 /*IN*/ PULONG Port, 1489 /*IN*/ ULONG Value); 1490 1491 VPAPI 1492 VOID 1493 DDKAPI 1494 VideoPortWritePortUshort( 1495 /*IN*/ PUSHORT Port, 1496 /*IN*/ USHORT Value); 1497 1498 VPAPI 1499 VOID 1500 DDKAPI 1501 VideoPortWriteRegisterBufferUchar( 1502 /*IN*/ PUCHAR Register, 1503 /*IN*/ PUCHAR Buffer, 1504 /*IN*/ ULONG Count); 1505 1506 VPAPI 1507 VOID 1508 DDKAPI 1509 VideoPortWriteRegisterBufferUlong( 1510 /*IN*/ PULONG Register, 1511 /*IN*/ PULONG Buffer, 1512 /*IN*/ ULONG Count); 1513 1514 VPAPI 1515 VOID 1516 DDKAPI 1517 VideoPortWriteRegisterBufferUshort( 1518 /*IN*/ PUSHORT Register, 1519 /*IN*/ PUSHORT Buffer, 1520 /*IN*/ ULONG Count); 1521 1522 VPAPI 1523 VOID 1524 DDKAPI 1525 VideoPortWriteRegisterUchar( 1526 /*IN*/ PUCHAR Register, 1527 /*IN*/ UCHAR Value); 1528 1529 VPAPI 1530 VOID 1531 DDKAPI 1532 VideoPortWriteRegisterUlong( 1533 /*IN*/ PULONG Register, 1534 /*IN*/ ULONG Value); 1535 1536 VPAPI 1537 VOID 1538 DDKAPI 1539 VideoPortWriteRegisterUshort( 1540 /*IN*/ PUSHORT Register, 1541 /*IN*/ USHORT Value); 1542 1543 VPAPI 1544 VOID 1545 DDKAPI 1546 VideoPortZeroDeviceMemory( 1547 /*IN*/ PVOID Destination, 1548 /*IN*/ ULONG Length); 1549 1550 VPAPI 1551 VOID 1552 DDKAPI 1553 VideoPortZeroMemory( 1554 /*IN*/ PVOID Destination, 1555 /*2IN*/ ULONG Length); 1556 1557 #ifdef DBG 1558 #define VideoDebugPrint(x) VideoPortDebugPrint x 1559 #else 1560 #define VideoDebugPrint(x) 1561 #endif 1562 1563 #ifdef __cplusplus 1564 } 1565 #endif 1566 1567 #endif /* defined __WINDDI_H */ 1568 1569 #endif /* __VIDEO_H */ 1570