1 /* 2 * video.h 3 * 4 * Video port and miniport driver interface 5 * 6 * This file is part of the w32api package. 7 * 8 * Contributors: 9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 10 * 11 * THIS SOFTWARE IS NOT COPYRIGHTED 12 * 13 * This source code is offered for use in the public domain. You may 14 * use, modify or distribute it freely. 15 * 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. 20 * 21 */ 22 23 #pragma once 24 25 #define __VIDEO_H__ 26 27 #include "ntddvdeo.h" 28 #include "videoagp.h" 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 #ifndef _NTOSDEF_ 35 36 #ifdef PAGED_CODE 37 #undef PAGED_CODE 38 #endif 39 40 #if defined(_MSC_VER) 41 #define ALLOC_PRAGMA 1 42 #endif 43 44 #if defined(_VIDEOPORT_) 45 #define VPAPI 46 #else 47 #define VPAPI DECLSPEC_IMPORT 48 #endif 49 50 #if DBG 51 #define PAGED_CODE() \ 52 if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) { \ 53 VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \ 54 ASSERT(FALSE); \ 55 } 56 #else 57 #define PAGED_CODE() 58 #endif /* DBG */ 59 60 ULONG 61 NTAPI 62 DriverEntry( 63 PVOID Context1, 64 PVOID Context2); 65 66 #else 67 68 #define VPAPI 69 70 #endif /* _NTOSDEF_ */ 71 72 #if DBG 73 #define VideoDebugPrint(x) VideoPortDebugPrint x 74 #else 75 #define VideoDebugPrint(x) 76 #endif 77 78 #define GET_VIDEO_PHYSICAL_ADDRESS(scatterList, \ 79 VirtualAddress, \ 80 InputBuffer, \ 81 pLength, \ 82 Address) \ 83 do { \ 84 ULONG_PTR byteOffset; \ 85 \ 86 byteOffset = (PCHAR) VirtualAddress - (PCHAR)InputBuffer; \ 87 while (byteOffset >= scatterList->Length) { \ 88 byteOffset -= scatterList->Length; \ 89 scatterList++; \ 90 } \ 91 *pLength = scatterList->Length - byteOffset; \ 92 Address = (ULONG_PTR) (scatterList->PhysicalAddress + byteOffset); \ 93 } while (0) 94 95 #define GET_VIDEO_SCATTERGATHER(ppDma) (**(PVRB_SG **)ppDma) 96 97 /* VIDEO_ACCESS_RANGE.RangePassive */ 98 #define VIDEO_RANGE_PASSIVE_DECODE 1 99 #define VIDEO_RANGE_10_BIT_DECODE 2 100 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) 103 104 #define SET_USER_EVENT 0x01 105 #define SET_DISPLAY_EVENT 0x02 106 107 #define EVENT_TYPE_MASK 1 108 #define SYNCHRONIZATION_EVENT 0 109 #define NOTIFICATION_EVENT 1 110 111 #define INITIAL_EVENT_STATE_MASK 2 112 #define INITIAL_EVENT_NOT_SIGNALED 0 113 #define INITIAL_EVENT_SIGNALED 2 114 115 #define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF 116 117 #define VIDEO_INVALID_CHILD_ID 0xFFFFFFFF 118 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)) 122 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 130 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 137 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 142 143 #define DEVICE_VGA_ENABLED 1 144 145 /* VideoPortCheckForDeviceExistence.Flags constants */ 146 #define CDE_USE_SUBSYSTEM_IDS 0x00000001 147 #define CDE_USE_REVISION 0x00000002 148 149 #define BUGCHECK_DATA_SIZE_RESERVED 48 150 151 #define VIDEO_DEBUG_REPORT_MAX_SIZE 0x8000 152 153 typedef LONG VP_STATUS, *PVP_STATUS; 154 typedef ULONG DMA_EVENT_FLAGS; 155 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; 160 161 typedef PVOID 162 (NTAPI *PVIDEO_PORT_GET_PROC_ADDRESS)( 163 IN PVOID HwDeviceExtension, 164 IN PUCHAR FunctionName); 165 166 typedef struct _VIDEO_PORT_CONFIG_INFO { 167 ULONG Length; 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; 179 ULONG DmaChannel; 180 ULONG DmaPort; 181 UCHAR DmaShareable; 182 UCHAR InterruptShareable; 183 BOOLEAN Master; 184 DMA_WIDTH DmaWidth; 185 DMA_SPEED DmaSpeed; 186 BOOLEAN bMapBuffers; 187 BOOLEAN NeedPhysicalAddresses; 188 BOOLEAN DemandMode; 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; 197 198 typedef VP_STATUS 199 (NTAPI *PVIDEO_HW_FIND_ADAPTER)( 200 IN PVOID HwDeviceExtension, 201 IN PVOID HwContext, 202 IN PWSTR ArgumentString, 203 IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo, 204 OUT PUCHAR Again); 205 206 typedef BOOLEAN 207 (NTAPI *PVIDEO_HW_INITIALIZE)( 208 IN PVOID HwDeviceExtension); 209 210 typedef BOOLEAN 211 (NTAPI *PVIDEO_HW_INTERRUPT)( 212 IN PVOID HwDeviceExtension); 213 214 typedef struct _VIDEO_ACCESS_RANGE { 215 PHYSICAL_ADDRESS RangeStart; 216 ULONG RangeLength; 217 UCHAR RangeInIoSpace; 218 UCHAR RangeVisible; 219 UCHAR RangeShareable; 220 UCHAR RangePassive; 221 } VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE; 222 223 typedef VOID 224 (NTAPI *PVIDEO_HW_LEGACYRESOURCES)( 225 IN ULONG VendorId, 226 IN ULONG DeviceId, 227 IN OUT PVIDEO_ACCESS_RANGE *LegacyResourceList, 228 IN OUT PULONG LegacyResourceCount); 229 230 typedef enum _HW_DMA_RETURN { 231 DmaAsyncReturn, 232 DmaSyncReturn 233 } HW_DMA_RETURN, *PHW_DMA_RETURN; 234 235 typedef HW_DMA_RETURN 236 (NTAPI *PVIDEO_HW_START_DMA)( 237 PVOID HwDeviceExtension, 238 PDMA pDma); 239 240 typedef struct _VP_SCATTER_GATHER_ELEMENT { 241 PHYSICAL_ADDRESS Address; 242 ULONG Length; 243 ULONG_PTR Reserved; 244 } VP_SCATTER_GATHER_ELEMENT, *PVP_SCATTER_GATHER_ELEMENT; 245 246 typedef struct _VP_SCATTER_GATHER_LIST { 247 ULONG NumberOfElements; 248 ULONG_PTR Reserved; 249 VP_SCATTER_GATHER_ELEMENT Elements[0]; 250 } VP_SCATTER_GATHER_LIST, *PVP_SCATTER_GATHER_LIST; 251 252 typedef VOID 253 (NTAPI *PEXECUTE_DMA)( 254 IN PVOID HwDeviceExtension, 255 IN PVP_DMA_ADAPTER VpDmaAdapter, 256 IN PVP_SCATTER_GATHER_LIST SGList, 257 IN PVOID Context); 258 259 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */ 260 typedef struct _VIDEO_CHILD_ENUM_INFO { 261 ULONG Size; 262 ULONG ChildDescriptorSize; 263 ULONG ChildIndex; 264 ULONG ACPIHwId; 265 PVOID ChildHwDeviceExtension; 266 } VIDEO_CHILD_ENUM_INFO, *PVIDEO_CHILD_ENUM_INFO; 267 268 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */ 269 typedef enum _VIDEO_CHILD_TYPE { 270 Monitor = 1, 271 NonPrimaryChip, 272 VideoChip, 273 Other 274 } VIDEO_CHILD_TYPE, *PVIDEO_CHILD_TYPE; 275 276 typedef VP_STATUS 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, 282 OUT PULONG UId, 283 OUT PULONG pUnused); 284 285 typedef VP_STATUS 286 (NTAPI *PVIDEO_HW_POWER_SET)( 287 IN PVOID HwDeviceExtension, 288 IN ULONG HwId, 289 IN PVIDEO_POWER_MANAGEMENT VideoPowerControl); 290 291 typedef VP_STATUS 292 (NTAPI *PVIDEO_HW_POWER_GET)( 293 IN PVOID HwDeviceExtension, 294 IN ULONG HwId, 295 IN OUT PVIDEO_POWER_MANAGEMENT VideoPowerControl); 296 297 typedef struct _QUERY_INTERFACE { 298 CONST GUID *InterfaceType; 299 USHORT Size; 300 USHORT Version; 301 PINTERFACE Interface; 302 PVOID InterfaceSpecificData; 303 } QUERY_INTERFACE, *PQUERY_INTERFACE; 304 305 typedef VP_STATUS 306 (NTAPI *PVIDEO_HW_QUERY_INTERFACE)( 307 IN PVOID HwDeviceExtension, 308 IN OUT PQUERY_INTERFACE QueryInterface); 309 310 typedef VP_STATUS 311 (NTAPI *PVIDEO_HW_CHILD_CALLBACK)( 312 PVOID HwDeviceExtension, 313 PVOID ChildDeviceExtension); 314 315 typedef BOOLEAN 316 (NTAPI *PVIDEO_HW_RESET_HW)( 317 IN PVOID HwDeviceExtension, 318 IN ULONG Columns, 319 IN ULONG Rows); 320 321 typedef struct _STATUS_BLOCK { 322 _ANONYMOUS_UNION union { 323 VP_STATUS Status; 324 PVOID Pointer; 325 } DUMMYUNIONNAME; 326 ULONG_PTR Information; 327 } STATUS_BLOCK, *PSTATUS_BLOCK; 328 329 typedef struct _VIDEO_REQUEST_PACKET { 330 ULONG IoControlCode; 331 PSTATUS_BLOCK StatusBlock; 332 PVOID InputBuffer; 333 ULONG InputBufferLength; 334 PVOID OutputBuffer; 335 ULONG OutputBufferLength; 336 } VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET; 337 338 typedef BOOLEAN 339 (NTAPI *PVIDEO_HW_START_IO)( 340 IN PVOID HwDeviceExtension, 341 IN PVIDEO_REQUEST_PACKET RequestPacket); 342 343 typedef VOID 344 (NTAPI *PVIDEO_HW_TIMER)( 345 IN PVOID HwDeviceExtension); 346 347 typedef VOID 348 (NTAPI *PVIDEO_WRITE_CLOCK_LINE)( 349 PVOID HwDeviceExtension, 350 UCHAR Data); 351 352 typedef VOID 353 (NTAPI *PVIDEO_WRITE_DATA_LINE)( 354 PVOID HwDeviceExtension, 355 UCHAR Data); 356 357 typedef BOOLEAN 358 (NTAPI *PVIDEO_READ_CLOCK_LINE)( 359 PVOID HwDeviceExtension); 360 361 typedef BOOLEAN 362 (NTAPI *PVIDEO_READ_DATA_LINE)( 363 PVOID HwDeviceExtension); 364 365 typedef VOID 366 (NTAPI *PVIDEO_WAIT_VSYNC_ACTIVE)( 367 PVOID HwDeviceExtension); 368 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; 375 376 typedef BOOLEAN 377 (NTAPI *PI2C_START)( 378 IN PVOID HwDeviceExtension, 379 IN PI2C_CALLBACKS I2CCallbacks); 380 381 typedef BOOLEAN 382 (NTAPI *PI2C_STOP)( 383 IN PVOID HwDeviceExtension, 384 IN PI2C_CALLBACKS I2CCallbacks); 385 386 typedef BOOLEAN 387 (NTAPI *PI2C_WRITE)( 388 IN PVOID HwDeviceExtension, 389 IN PI2C_CALLBACKS I2CCallbacks, 390 IN PUCHAR Buffer, 391 IN ULONG Length); 392 393 typedef BOOLEAN 394 (NTAPI *PI2C_READ)( 395 IN PVOID HwDeviceExtension, 396 IN PI2C_CALLBACKS I2CCallbacks, 397 OUT PUCHAR Buffer, 398 IN ULONG Length); 399 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; 405 IN ULONG I2CDelay; 406 } VIDEO_I2C_CONTROL, *PVIDEO_I2C_CONTROL; 407 408 typedef BOOLEAN 409 (NTAPI *PI2C_START_2)( 410 IN PVOID HwDeviceExtension, 411 IN PVIDEO_I2C_CONTROL I2CControl); 412 413 typedef BOOLEAN 414 (NTAPI *PI2C_STOP_2)( 415 IN PVOID HwDeviceExtension, 416 IN PVIDEO_I2C_CONTROL I2CControl); 417 418 typedef BOOLEAN 419 (NTAPI *PI2C_WRITE_2)( 420 IN PVOID HwDeviceExtension, 421 IN PVIDEO_I2C_CONTROL I2CControl, 422 IN PUCHAR Buffer, 423 IN ULONG Length); 424 425 typedef BOOLEAN 426 (NTAPI *PI2C_READ_2)( 427 IN PVOID HwDeviceExtension, 428 IN PVIDEO_I2C_CONTROL I2CControl, 429 OUT PUCHAR Buffer, 430 IN ULONG Length, 431 IN BOOLEAN EndOfRead); 432 433 typedef struct _INT10_BIOS_ARGUMENTS { 434 ULONG Eax; 435 ULONG Ebx; 436 ULONG Ecx; 437 ULONG Edx; 438 ULONG Esi; 439 ULONG Edi; 440 ULONG Ebp; 441 USHORT SegDs; 442 USHORT SegEs; 443 } INT10_BIOS_ARGUMENTS, *PINT10_BIOS_ARGUMENTS; 444 445 typedef VP_STATUS 446 (NTAPI *PINT10_CALL_BIOS)( 447 IN PVOID Context, 448 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments); 449 450 typedef VP_STATUS 451 (NTAPI *PINT10_ALLOCATE_BUFFER)( 452 IN PVOID Context, 453 OUT PUSHORT Seg, 454 OUT PUSHORT Off, 455 IN OUT PULONG Length); 456 457 typedef VP_STATUS 458 (NTAPI *PINT10_FREE_BUFFER)( 459 IN PVOID Context, 460 IN USHORT Seg, 461 IN USHORT Off); 462 463 typedef VP_STATUS 464 (NTAPI *PINT10_READ_MEMORY)( 465 IN PVOID Context, 466 IN USHORT Seg, 467 IN USHORT Off, 468 OUT PVOID Buffer, 469 IN ULONG Length); 470 471 typedef VP_STATUS 472 (NTAPI *PINT10_WRITE_MEMORY)( 473 IN PVOID Context, 474 IN USHORT Seg, 475 IN USHORT Off, 476 IN PVOID Buffer, 477 IN ULONG Length); 478 479 typedef VP_STATUS 480 (NTAPI *PROTECT_WC_MEMORY)( 481 IN PVOID Context, 482 IN PVOID HwDeviceExtension); 483 484 typedef VP_STATUS 485 (NTAPI *RESTORE_WC_MEMORY)( 486 IN PVOID Context, 487 IN PVOID HwDeviceExtension); 488 489 typedef enum _VIDEO_DEVICE_DATA_TYPE { 490 VpMachineData = 0, 491 VpCmosData, 492 VpBusData, 493 VpControllerData, 494 VpMonitorData 495 } VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE; 496 497 typedef VP_STATUS 498 (NTAPI *PMINIPORT_QUERY_DEVICE_ROUTINE)( 499 IN PVOID HwDeviceExtension, 500 IN PVOID Context, 501 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType, 502 IN PVOID Identifier, 503 IN ULONG IdentifierLength, 504 IN PVOID ConfigurationData, 505 IN ULONG ConfigurationDataLength, 506 IN OUT PVOID ComponentInformation, 507 IN ULONG ComponentInformationLength); 508 509 typedef VP_STATUS 510 (NTAPI *PMINIPORT_GET_REGISTRY_ROUTINE)( 511 IN PVOID HwDeviceExtension, 512 IN PVOID Context, 513 IN OUT PWSTR ValueName, 514 IN OUT PVOID ValueData, 515 IN ULONG ValueLength); 516 517 typedef VOID 518 (NTAPI *PMINIPORT_DPC_ROUTINE)( 519 IN PVOID HwDeviceExtension, 520 IN PVOID Context); 521 522 typedef BOOLEAN 523 (NTAPI *PMINIPORT_SYNCHRONIZE_ROUTINE)( 524 IN PVOID Context); 525 526 typedef VOID 527 (NTAPI *PVIDEO_BUGCHECK_CALLBACK)( 528 IN PVOID HwDeviceExtension, 529 IN ULONG BugcheckCode, 530 IN PUCHAR Buffer, 531 IN ULONG BufferSize); 532 533 /* VideoPortSynchronizeExecution.Priority constants */ 534 typedef enum VIDEO_SYNCHRONIZE_PRIORITY { 535 VpLowPriority = 0, 536 VpMediumPriority, 537 VpHighPriority 538 } VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY; 539 540 /* VideoPortAllocatePool.PoolType constants */ 541 typedef enum _VP_POOL_TYPE { 542 VpNonPagedPool = 0, 543 VpPagedPool, 544 VpNonPagedPoolCacheAligned = 4, 545 VpPagedPoolCacheAligned 546 } VP_POOL_TYPE, *PVP_POOL_TYPE; 547 548 typedef enum _DMA_FLAGS { 549 VideoPortUnlockAfterDma = 1, 550 VideoPortKeepPagesLocked, 551 VideoPortDmaInitOnly 552 } DMA_FLAGS; 553 554 typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA { 555 INTERFACE_TYPE InterfaceType; 556 ULONG BusNumber; 557 USHORT Version; 558 USHORT Revision; 559 USHORT Irql; 560 USHORT Vector; 561 ULONG ControlBase; 562 ULONG ControlSize; 563 ULONG CursorBase; 564 ULONG CursorSize; 565 ULONG FrameBase; 566 ULONG FrameSize; 567 } VIDEO_HARDWARE_CONFIGURATION_DATA, *PVIDEO_HARDWARE_CONFIGURATION_DATA; 568 569 typedef struct _VIDEO_X86_BIOS_ARGUMENTS { 570 ULONG Eax; 571 ULONG Ebx; 572 ULONG Ecx; 573 ULONG Edx; 574 ULONG Esi; 575 ULONG Edi; 576 ULONG Ebp; 577 } VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS; 578 579 typedef enum VIDEO_DEBUG_LEVEL { 580 Error = 0, 581 Warn, 582 Trace, 583 Info 584 } VIDEO_DEBUG_LEVEL, *PVIDEO_DEBUG_LEVEL; 585 586 #ifndef _NTOS_ 587 588 typedef VP_STATUS 589 (NTAPI *PDRIVER_IO_PORT_UCHAR)( 590 IN ULONG_PTR Context, 591 IN ULONG Port, 592 IN UCHAR AccessMode, 593 IN PUCHAR Data); 594 595 typedef VP_STATUS 596 (NTAPI *PDRIVER_IO_PORT_UCHAR_STRING)( 597 IN ULONG_PTR Context, 598 IN ULONG Port, 599 IN UCHAR AccessMode, 600 IN PUCHAR Data, 601 IN ULONG DataLength); 602 603 typedef VP_STATUS 604 (NTAPI *PDRIVER_IO_PORT_ULONG)( 605 IN ULONG_PTR Context, 606 IN ULONG Port, 607 IN UCHAR AccessMode, 608 IN PULONG Data); 609 610 typedef VP_STATUS 611 (NTAPI *PDRIVER_IO_PORT_ULONG_STRING)( 612 IN ULONG_PTR Context, 613 IN ULONG Port, 614 IN UCHAR AccessMode, 615 IN PULONG Data, 616 IN ULONG DataLength); 617 618 typedef VP_STATUS 619 (NTAPI *PDRIVER_IO_PORT_USHORT)( 620 IN ULONG_PTR Context, 621 IN ULONG Port, 622 IN UCHAR AccessMode, 623 IN PUSHORT Data); 624 625 typedef VP_STATUS 626 (NTAPI *PDRIVER_IO_PORT_USHORT_STRING)( 627 IN ULONG_PTR Context, 628 IN ULONG Port, 629 IN UCHAR AccessMode, 630 IN PUSHORT Data, 631 IN ULONG DataLength); 632 633 #endif /* _NTOS_ */ 634 635 typedef struct __VRB_SG { 636 __int64 PhysicalAddress; 637 ULONG Length; 638 } VRB_SG, *PVRB_SG; 639 640 typedef enum _VP_LOCK_OPERATION { 641 VpReadAccess = 0, 642 VpWriteAccess, 643 VpModifyAccess 644 } VP_LOCK_OPERATION; 645 646 typedef struct _VP_DEVICE_DESCRIPTION { 647 BOOLEAN ScatterGather; 648 BOOLEAN Dma32BitAddresses; 649 BOOLEAN Dma64BitAddresses; 650 ULONG MaximumLength; 651 } VP_DEVICE_DESCRIPTION, *PVP_DEVICE_DESCRIPTION; 652 653 typedef struct _VIDEO_CHILD_STATE { 654 ULONG Id; 655 ULONG State; 656 } VIDEO_CHILD_STATE, *PVIDEO_CHILD_STATE; 657 658 typedef struct _VIDEO_CHILD_STATE_CONFIGURATION { 659 ULONG Count; 660 VIDEO_CHILD_STATE ChildStateArray[ANYSIZE_ARRAY]; 661 } VIDEO_CHILD_STATE_CONFIGURATION, *PVIDEO_CHILD_STATE_CONFIGURATION; 662 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; 684 ULONG Reserved; 685 } VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA; 686 687 typedef struct _I2C_FNC_TABLE { 688 IN ULONG Size; 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; 694 PVOID Reserved; 695 } I2C_FNC_TABLE, *PI2C_FNC_TABLE; 696 697 typedef struct _DDC_CONTROL { 698 IN ULONG Size; 699 IN I2C_CALLBACKS I2CCallbacks; 700 IN UCHAR EdidSegment; 701 } DDC_CONTROL, *PDDC_CONTROL; 702 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; 712 713 typedef struct _VIDEO_PORT_AGP_INTERFACE { 714 SHORT Size; 715 SHORT Version; 716 PVOID Context; 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; 729 730 typedef struct _VIDEO_PORT_AGP_INTERFACE_2 { 731 IN USHORT Size; 732 IN USHORT Version; 733 OUT PVOID Context; 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; 747 748 typedef struct _VIDEO_PORT_I2C_INTERFACE { 749 USHORT Size; 750 USHORT Version; 751 PVOID Context; 752 PINTERFACE_REFERENCE InterfaceReference; 753 PINTERFACE_DEREFERENCE InterfaceDereference; 754 PI2C_START I2CStart; 755 PI2C_STOP I2CStop; 756 PI2C_WRITE I2CWrite; 757 PI2C_READ I2CRead; 758 } VIDEO_PORT_I2C_INTERFACE, *PVIDEO_PORT_I2C_INTERFACE; 759 760 typedef struct _VIDEO_PORT_I2C_INTERFACE_2 { 761 IN USHORT Size; 762 IN USHORT Version; 763 OUT PVOID Context; 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; 771 772 typedef struct _VIDEO_PORT_INT10_INTERFACE { 773 IN USHORT Size; 774 IN USHORT Version; 775 OUT PVOID Context; 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; 784 785 typedef struct _VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE { 786 IN USHORT Size; 787 IN USHORT Version; 788 OUT PVOID Context; 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; 794 795 typedef struct _VPOSVERSIONINFO { 796 IN ULONG Size; 797 OUT ULONG MajorVersion; 798 OUT ULONG MinorVersion; 799 OUT ULONG BuildNumber; 800 OUT USHORT ServicePackMajor; 801 OUT USHORT ServicePackMinor; 802 } VPOSVERSIONINFO, *PVPOSVERSIONINFO; 803 804 typedef struct _VIDEO_PORT_DEBUG_REPORT_INTERFACE { 805 IN USHORT Size; 806 IN USHORT Version; 807 OUT PVOID Context; 808 OUT PINTERFACE_REFERENCE InterfaceReference; 809 OUT PINTERFACE_DEREFERENCE InterfaceDereference; 810 OUT PVIDEO_DEBUG_REPORT (*DbgReportCreate)( 811 IN PVOID HwDeviceExtension, 812 IN ULONG ulCode, 813 IN ULONG_PTR ulpArg1, 814 IN ULONG_PTR ulpArg2, 815 IN ULONG_PTR ulpArg3, 816 IN ULONG_PTR ulpArg4 817 ); 818 OUT BOOLEAN (*DbgReportSecondaryData)( 819 IN OUT PVIDEO_DEBUG_REPORT pReport, 820 IN PVOID pvData, 821 IN ULONG ulDataSize 822 ); 823 OUT VOID (*DbgReportComplete)( 824 IN OUT PVIDEO_DEBUG_REPORT pReport 825 ); 826 } VIDEO_PORT_DEBUG_REPORT_INTERFACE, *PVIDEO_PORT_DEBUG_REPORT_INTERFACE; 827 828 /* Video port functions for miniports */ 829 830 VPAPI 831 VP_STATUS 832 NTAPI 833 VideoPortAllocateBuffer( 834 IN PVOID HwDeviceExtension, 835 IN ULONG Size, 836 OUT PVOID *Buffer); 837 838 VPAPI 839 VOID 840 NTAPI 841 VideoPortAcquireDeviceLock( 842 IN PVOID HwDeviceExtension); 843 844 VPAPI 845 ULONG 846 NTAPI 847 VideoPortCompareMemory( 848 IN PVOID Source1, 849 IN PVOID Source2, 850 IN SIZE_T Length); 851 852 VPAPI 853 BOOLEAN 854 NTAPI 855 VideoPortDDCMonitorHelper( 856 IN PVOID HwDeviceExtension, 857 IN PVOID DDCControl, 858 IN OUT PUCHAR EdidBuffer, 859 IN ULONG EdidBufferSize); 860 861 VPAPI 862 VOID 863 __cdecl 864 VideoPortDebugPrint( 865 IN VIDEO_DEBUG_LEVEL DebugPrintLevel, 866 IN PSTR DebugMessage, 867 IN ...); 868 869 VPAPI 870 VP_STATUS 871 NTAPI 872 VideoPortDisableInterrupt( 873 IN PVOID HwDeviceExtension); 874 875 VPAPI 876 VP_STATUS 877 NTAPI 878 VideoPortEnableInterrupt( 879 IN PVOID HwDeviceExtension); 880 881 VPAPI 882 VP_STATUS 883 NTAPI 884 VideoPortEnumerateChildren( 885 IN PVOID HwDeviceExtension, 886 IN PVOID Reserved); 887 888 VPAPI 889 VOID 890 NTAPI 891 VideoPortFreeDeviceBase( 892 IN PVOID HwDeviceExtension, 893 IN PVOID MappedAddress); 894 895 VPAPI 896 VP_STATUS 897 NTAPI 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, 904 IN PVOID VendorId, 905 IN PVOID DeviceId, 906 OUT PULONG Slot); 907 908 VPAPI 909 PVOID 910 NTAPI 911 VideoPortGetAssociatedDeviceExtension( 912 IN PVOID DeviceObject); 913 914 VPAPI 915 ULONG 916 NTAPI 917 VideoPortGetBusData( 918 IN PVOID HwDeviceExtension, 919 IN BUS_DATA_TYPE BusDataType, 920 IN ULONG SlotNumber, 921 IN OUT PVOID Buffer, 922 IN ULONG Offset, 923 IN ULONG Length); 924 925 VPAPI 926 UCHAR 927 NTAPI 928 VideoPortGetCurrentIrql(VOID); 929 930 VPAPI 931 PVOID 932 NTAPI 933 VideoPortGetDeviceBase( 934 IN PVOID HwDeviceExtension, 935 IN PHYSICAL_ADDRESS IoAddress, 936 IN ULONG NumberOfUchars, 937 IN UCHAR InIoSpace); 938 939 VPAPI 940 VP_STATUS 941 NTAPI 942 VideoPortGetDeviceData( 943 IN PVOID HwDeviceExtension, 944 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType, 945 IN PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine, 946 IN PVOID Context); 947 948 VPAPI 949 VP_STATUS 950 NTAPI 951 VideoPortGetRegistryParameters( 952 IN PVOID HwDeviceExtension, 953 IN PWSTR ParameterName, 954 IN UCHAR IsParameterFileName, 955 IN PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine, 956 IN PVOID Context); 957 958 VPAPI 959 PVOID 960 NTAPI 961 VideoPortGetRomImage( 962 IN PVOID HwDeviceExtension, 963 IN PVOID Unused1, 964 IN ULONG Unused2, 965 IN ULONG Length); 966 967 VPAPI 968 VP_STATUS 969 NTAPI 970 VideoPortGetVgaStatus( 971 IN PVOID HwDeviceExtension, 972 OUT PULONG VgaStatus); 973 974 VPAPI 975 LONG 976 FASTCALL 977 VideoPortInterlockedDecrement( 978 IN PLONG Addend); 979 980 VPAPI 981 LONG 982 FASTCALL 983 VideoPortInterlockedExchange( 984 IN OUT PLONG Target, 985 IN LONG Value); 986 987 VPAPI 988 LONG 989 FASTCALL 990 VideoPortInterlockedIncrement( 991 IN PLONG Addend); 992 993 VPAPI 994 ULONG 995 NTAPI 996 VideoPortInitialize( 997 IN PVOID Argument1, 998 IN PVOID Argument2, 999 IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData, 1000 IN PVOID HwContext); 1001 1002 VPAPI 1003 VP_STATUS 1004 NTAPI 1005 VideoPortInt10( 1006 IN PVOID HwDeviceExtension, 1007 IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments); 1008 1009 VPAPI 1010 VOID 1011 NTAPI 1012 VideoPortLogError( 1013 IN PVOID HwDeviceExtension, 1014 IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL, 1015 IN VP_STATUS ErrorCode, 1016 IN ULONG UniqueId); 1017 1018 VPAPI 1019 VP_STATUS 1020 NTAPI 1021 VideoPortMapBankedMemory( 1022 IN PVOID HwDeviceExtension, 1023 IN PHYSICAL_ADDRESS PhysicalAddress, 1024 IN OUT PULONG Length, 1025 PULONG InIoSpace, 1026 PVOID *VirtualAddress, 1027 ULONG BankLength, 1028 UCHAR ReadWriteBank, 1029 PBANKED_SECTION_ROUTINE BankRoutine, 1030 PVOID Context); 1031 1032 VPAPI 1033 VP_STATUS 1034 NTAPI 1035 VideoPortMapMemory( 1036 IN PVOID HwDeviceExtension, 1037 IN PHYSICAL_ADDRESS PhysicalAddress, 1038 IN OUT PULONG Length, 1039 IN PULONG InIoSpace, 1040 IN OUT PVOID *VirtualAddress); 1041 1042 VPAPI 1043 VOID 1044 NTAPI 1045 VideoPortMoveMemory( 1046 IN PVOID Destination, 1047 IN PVOID Source, 1048 IN ULONG Length); 1049 1050 VPAPI 1051 LONGLONG 1052 NTAPI 1053 VideoPortQueryPerformanceCounter( 1054 IN PVOID HwDeviceExtension, 1055 OUT PLONGLONG PerformanceFrequency OPTIONAL); 1056 1057 VPAPI 1058 VP_STATUS 1059 NTAPI 1060 VideoPortQueryServices( 1061 IN PVOID HwDeviceExtension, 1062 IN VIDEO_PORT_SERVICES ServicesType, 1063 IN OUT PINTERFACE Interface); 1064 1065 VPAPI 1066 BOOLEAN 1067 NTAPI 1068 VideoPortQueueDpc( 1069 IN PVOID HwDeviceExtension, 1070 IN PMINIPORT_DPC_ROUTINE CallbackRoutine, 1071 IN PVOID Context); 1072 1073 VPAPI 1074 VOID 1075 NTAPI 1076 VideoPortReadPortBufferUchar( 1077 IN PUCHAR Port, 1078 OUT PUCHAR Buffer, 1079 IN ULONG Count); 1080 1081 VPAPI 1082 VOID 1083 NTAPI 1084 VideoPortReadPortBufferUlong( 1085 IN PULONG Port, 1086 OUT PULONG Buffer, 1087 IN ULONG Count); 1088 1089 VPAPI 1090 VOID 1091 NTAPI 1092 VideoPortReadPortBufferUshort( 1093 IN PUSHORT Port, 1094 OUT PUSHORT Buffer, 1095 IN ULONG Count); 1096 1097 VPAPI 1098 UCHAR 1099 NTAPI 1100 VideoPortReadPortUchar( 1101 IN PUCHAR Port); 1102 1103 VPAPI 1104 ULONG 1105 NTAPI 1106 VideoPortReadPortUlong( 1107 IN PULONG Port); 1108 1109 VPAPI 1110 USHORT 1111 NTAPI 1112 VideoPortReadPortUshort( 1113 IN PUSHORT Port); 1114 1115 VPAPI 1116 VOID 1117 NTAPI 1118 VideoPortReadRegisterBufferUchar( 1119 IN PUCHAR Register, 1120 OUT PUCHAR Buffer, 1121 IN ULONG Count); 1122 1123 VPAPI 1124 VOID 1125 NTAPI 1126 VideoPortReadRegisterBufferUlong( 1127 IN PULONG Register, 1128 OUT PULONG Buffer, 1129 IN ULONG Count); 1130 1131 VPAPI 1132 VOID 1133 NTAPI 1134 VideoPortReadRegisterBufferUshort( 1135 IN PUSHORT Register, 1136 OUT PUSHORT Buffer, 1137 IN ULONG Count); 1138 1139 VPAPI 1140 UCHAR 1141 NTAPI 1142 VideoPortReadRegisterUchar( 1143 IN PUCHAR Register); 1144 1145 VPAPI 1146 ULONG 1147 NTAPI 1148 VideoPortReadRegisterUlong( 1149 IN PULONG Register); 1150 1151 VPAPI 1152 USHORT 1153 NTAPI 1154 VideoPortReadRegisterUshort( 1155 IN PUSHORT Register); 1156 1157 VPAPI 1158 VOID 1159 NTAPI 1160 VideoPortReleaseBuffer( 1161 IN PVOID HwDeviceExtension, 1162 IN PVOID Buffer); 1163 1164 VPAPI 1165 VOID 1166 NTAPI 1167 VideoPortReleaseDeviceLock( 1168 IN PVOID HwDeviceExtension); 1169 1170 VPAPI 1171 BOOLEAN 1172 NTAPI 1173 VideoPortScanRom( 1174 PVOID HwDeviceExtension, 1175 PUCHAR RomBase, 1176 ULONG RomLength, 1177 PUCHAR String); 1178 1179 VPAPI 1180 ULONG 1181 NTAPI 1182 VideoPortSetBusData( 1183 IN PVOID HwDeviceExtension, 1184 IN BUS_DATA_TYPE BusDataType, 1185 IN ULONG SlotNumber, 1186 IN PVOID Buffer, 1187 IN ULONG Offset, 1188 IN ULONG Length); 1189 1190 VPAPI 1191 VP_STATUS 1192 NTAPI 1193 VideoPortSetRegistryParameters( 1194 IN PVOID HwDeviceExtension, 1195 IN PWSTR ValueName, 1196 IN PVOID ValueData, 1197 IN ULONG ValueLength); 1198 1199 VPAPI 1200 VP_STATUS 1201 NTAPI 1202 VideoPortSetTrappedEmulatorPorts( 1203 IN PVOID HwDeviceExtension, 1204 IN ULONG NumAccessRanges, 1205 IN PVIDEO_ACCESS_RANGE AccessRange); 1206 1207 VPAPI 1208 VOID 1209 NTAPI 1210 VideoPortStallExecution( 1211 IN ULONG Microseconds); 1212 1213 VPAPI 1214 VOID 1215 NTAPI 1216 VideoPortStartTimer( 1217 IN PVOID HwDeviceExtension); 1218 1219 VPAPI 1220 VOID 1221 NTAPI 1222 VideoPortStopTimer( 1223 IN PVOID HwDeviceExtension); 1224 1225 VPAPI 1226 BOOLEAN 1227 NTAPI 1228 VideoPortSynchronizeExecution( 1229 IN PVOID HwDeviceExtension, 1230 IN VIDEO_SYNCHRONIZE_PRIORITY Priority, 1231 IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine, 1232 IN PVOID Context); 1233 1234 VPAPI 1235 VP_STATUS 1236 NTAPI 1237 VideoPortUnmapMemory( 1238 IN PVOID HwDeviceExtension, 1239 IN OUT PVOID VirtualAddress, 1240 IN HANDLE ProcessHandle); 1241 1242 VPAPI 1243 VP_STATUS 1244 NTAPI 1245 VideoPortVerifyAccessRanges( 1246 IN PVOID HwDeviceExtension, 1247 IN ULONG NumAccessRanges, 1248 IN PVIDEO_ACCESS_RANGE AccessRanges); 1249 1250 VPAPI 1251 VOID 1252 NTAPI 1253 VideoPortWritePortBufferUchar( 1254 IN PUCHAR Port, 1255 IN PUCHAR Buffer, 1256 IN ULONG Count); 1257 1258 VPAPI 1259 VOID 1260 NTAPI 1261 VideoPortWritePortBufferUlong( 1262 IN PULONG Port, 1263 IN PULONG Buffer, 1264 IN ULONG Count); 1265 1266 VPAPI 1267 VOID 1268 NTAPI 1269 VideoPortWritePortBufferUshort( 1270 IN PUSHORT Port, 1271 IN PUSHORT Buffer, 1272 IN ULONG Count); 1273 1274 VPAPI 1275 VOID 1276 NTAPI 1277 VideoPortWritePortUchar( 1278 IN PUCHAR Port, 1279 IN UCHAR Value); 1280 1281 VPAPI 1282 VOID 1283 NTAPI 1284 VideoPortWritePortUlong( 1285 IN PULONG Port, 1286 IN ULONG Value); 1287 1288 VPAPI 1289 VOID 1290 NTAPI 1291 VideoPortWritePortUshort( 1292 IN PUSHORT Port, 1293 IN USHORT Value); 1294 1295 VPAPI 1296 VOID 1297 NTAPI 1298 VideoPortWriteRegisterBufferUchar( 1299 IN PUCHAR Register, 1300 IN PUCHAR Buffer, 1301 IN ULONG Count); 1302 1303 VPAPI 1304 VOID 1305 NTAPI 1306 VideoPortWriteRegisterBufferUlong( 1307 IN PULONG Register, 1308 IN PULONG Buffer, 1309 IN ULONG Count); 1310 1311 VPAPI 1312 VOID 1313 NTAPI 1314 VideoPortWriteRegisterBufferUshort( 1315 IN PUSHORT Register, 1316 IN PUSHORT Buffer, 1317 IN ULONG Count); 1318 1319 VPAPI 1320 VOID 1321 NTAPI 1322 VideoPortWriteRegisterUchar( 1323 IN PUCHAR Register, 1324 IN UCHAR Value); 1325 1326 VPAPI 1327 VOID 1328 NTAPI 1329 VideoPortWriteRegisterUlong( 1330 IN PULONG Register, 1331 IN ULONG Value); 1332 1333 VPAPI 1334 VOID 1335 NTAPI 1336 VideoPortWriteRegisterUshort( 1337 IN PUSHORT Register, 1338 IN USHORT Value); 1339 1340 VPAPI 1341 VOID 1342 NTAPI 1343 VideoPortZeroDeviceMemory( 1344 IN PVOID Destination, 1345 IN ULONG Length); 1346 1347 VPAPI 1348 VOID 1349 NTAPI 1350 VideoPortZeroMemory( 1351 IN PVOID Destination, 1352 IN ULONG Length); 1353 1354 VPAPI 1355 PVOID 1356 NTAPI 1357 VideoPortAllocateContiguousMemory( 1358 IN PVOID HwDeviceExtension, 1359 IN ULONG NumberOfBytes, 1360 IN PHYSICAL_ADDRESS HighestAcceptableAddress); 1361 1362 VPAPI 1363 PVOID 1364 NTAPI 1365 VideoPortGetCommonBuffer( 1366 IN PVOID HwDeviceExtension, 1367 IN ULONG DesiredLength, 1368 IN ULONG Alignment, 1369 OUT PPHYSICAL_ADDRESS LogicalAddress, 1370 OUT PULONG pActualLength, 1371 IN BOOLEAN CacheEnabled); 1372 1373 VPAPI 1374 VOID 1375 NTAPI 1376 VideoPortFreeCommonBuffer( 1377 IN PVOID HwDeviceExtension, 1378 IN ULONG Length, 1379 IN PVOID VirtualAddress, 1380 IN PHYSICAL_ADDRESS LogicalAddress, 1381 IN BOOLEAN CacheEnabled); 1382 1383 VPAPI 1384 PDMA 1385 NTAPI 1386 VideoPortDoDma( 1387 IN PVOID HwDeviceExtension, 1388 IN PDMA pDma, 1389 IN DMA_FLAGS DmaFlags); 1390 1391 VPAPI 1392 BOOLEAN 1393 NTAPI 1394 VideoPortLockPages( 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); 1400 1401 VPAPI 1402 BOOLEAN 1403 NTAPI 1404 VideoPortUnlockPages( 1405 IN PVOID hwDeviceExtension, 1406 IN OUT PDMA pDma); 1407 1408 VPAPI 1409 BOOLEAN 1410 NTAPI 1411 VideoPortSignalDmaComplete( 1412 IN PVOID HwDeviceExtension, 1413 IN PDMA pDmaHandle); 1414 1415 VPAPI 1416 PVOID 1417 NTAPI 1418 VideoPortGetMdl( 1419 IN PVOID HwDeviceExtension, 1420 IN PDMA pDma); 1421 1422 VPAPI 1423 PVOID 1424 NTAPI 1425 VideoPortGetDmaContext( 1426 IN PVOID HwDeviceExtension, 1427 IN PDMA pDma); 1428 1429 VPAPI 1430 VOID 1431 NTAPI 1432 VideoPortSetDmaContext( 1433 IN PVOID HwDeviceExtension, 1434 OUT PDMA pDma, 1435 IN PVOID InstanceContext); 1436 1437 VPAPI 1438 ULONG 1439 NTAPI 1440 VideoPortGetBytesUsed( 1441 IN PVOID HwDeviceExtension, 1442 IN PDMA pDma); 1443 1444 VPAPI 1445 VOID 1446 NTAPI 1447 VideoPortSetBytesUsed( 1448 IN PVOID HwDeviceExtension, 1449 IN OUT PDMA pDma, 1450 IN ULONG BytesUsed); 1451 1452 VPAPI 1453 PDMA 1454 NTAPI 1455 VideoPortAssociateEventsWithDmaHandle( 1456 IN PVOID HwDeviceExtension, 1457 IN OUT PVIDEO_REQUEST_PACKET pVrp, 1458 IN PVOID MappedUserEvent, 1459 IN PVOID DisplayDriverEvent); 1460 1461 VPAPI 1462 PDMA 1463 NTAPI 1464 VideoPortMapDmaMemory( 1465 IN PVOID HwDeviceExtension, 1466 IN PVIDEO_REQUEST_PACKET pVrp, 1467 IN PHYSICAL_ADDRESS BoardAddress, 1468 IN PULONG Length, 1469 IN PULONG InIoSpace, 1470 IN PVOID MappedUserEvent, 1471 IN PVOID DisplayDriverEvent, 1472 IN OUT PVOID *VirtualAddress); 1473 1474 VPAPI 1475 BOOLEAN 1476 NTAPI 1477 VideoPortUnmapDmaMemory( 1478 IN PVOID HwDeviceExtension, 1479 IN PVOID VirtualAddress, 1480 IN HANDLE ProcessHandle, 1481 IN PDMA BoardMemoryHandle); 1482 1483 VPAPI 1484 VP_STATUS 1485 NTAPI 1486 VideoPortCreateSecondaryDisplay( 1487 IN PVOID HwDeviceExtension, 1488 IN OUT PVOID *SecondaryDeviceExtension, 1489 IN ULONG ulFlag); 1490 1491 VPAPI 1492 PVP_DMA_ADAPTER 1493 NTAPI 1494 VideoPortGetDmaAdapter( 1495 IN PVOID HwDeviceExtension, 1496 IN PVP_DEVICE_DESCRIPTION VpDeviceDescription); 1497 1498 VPAPI 1499 VOID 1500 NTAPI 1501 VideoPortPutDmaAdapter( 1502 IN PVOID HwDeviceExtension, 1503 IN PVP_DMA_ADAPTER VpDmaAdapter); 1504 1505 VPAPI 1506 PVOID 1507 NTAPI 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, 1514 PVOID Reserved); 1515 1516 VPAPI 1517 VOID 1518 NTAPI 1519 VideoPortReleaseCommonBuffer( 1520 IN PVOID HwDeviceExtension, 1521 IN PVP_DMA_ADAPTER VpDmaAdapter, 1522 IN ULONG Length, 1523 IN PHYSICAL_ADDRESS LogicalAddress, 1524 IN PVOID VirtualAddress, 1525 IN BOOLEAN CacheEnabled); 1526 1527 VPAPI 1528 PVOID 1529 NTAPI 1530 VideoPortLockBuffer( 1531 IN PVOID HwDeviceExtension, 1532 IN PVOID BaseAddress, 1533 IN ULONG Length, 1534 IN VP_LOCK_OPERATION Operation); 1535 1536 VPAPI 1537 VOID 1538 NTAPI 1539 VideoPortUnlockBuffer( 1540 IN PVOID HwDeviceExtension, 1541 IN PVOID Mdl); 1542 1543 VPAPI 1544 VP_STATUS 1545 NTAPI 1546 VideoPortStartDma( 1547 IN PVOID HwDeviceExtension, 1548 IN PVP_DMA_ADAPTER VpDmaAdapter, 1549 IN PVOID Mdl, 1550 IN ULONG Offset, 1551 IN OUT PULONG pLength, 1552 IN PEXECUTE_DMA ExecuteDmaRoutine, 1553 IN PVOID Context, 1554 IN BOOLEAN WriteToDevice); 1555 1556 VPAPI 1557 VP_STATUS 1558 NTAPI 1559 VideoPortCompleteDma( 1560 IN PVOID HwDeviceExtension, 1561 IN PVP_DMA_ADAPTER VpDmaAdapter, 1562 IN PVP_SCATTER_GATHER_LIST VpScatterGather, 1563 IN BOOLEAN WriteToDevice); 1564 1565 VPAPI 1566 VP_STATUS 1567 NTAPI 1568 VideoPortCreateEvent( 1569 IN PVOID HwDeviceExtension, 1570 IN ULONG EventFlag, 1571 IN PVOID Unused, 1572 OUT PEVENT *ppEvent); 1573 1574 VPAPI 1575 VP_STATUS 1576 NTAPI 1577 VideoPortDeleteEvent( 1578 IN PVOID HwDeviceExtension, 1579 IN PEVENT pEvent); 1580 1581 VPAPI 1582 LONG 1583 NTAPI 1584 VideoPortSetEvent( 1585 IN PVOID HwDeviceExtension, 1586 IN PEVENT pEvent); 1587 1588 VPAPI 1589 VOID 1590 NTAPI 1591 VideoPortClearEvent( 1592 IN PVOID HwDeviceExtension, 1593 IN PEVENT pEvent); 1594 1595 VPAPI 1596 LONG 1597 NTAPI 1598 VideoPortReadStateEvent( 1599 IN PVOID HwDeviceExtension, 1600 IN PEVENT pEvent); 1601 1602 VPAPI 1603 VP_STATUS 1604 NTAPI 1605 VideoPortWaitForSingleObject( 1606 IN PVOID HwDeviceExtension, 1607 IN PVOID Object, 1608 IN PLARGE_INTEGER Timeout OPTIONAL); 1609 1610 VPAPI 1611 PVOID 1612 NTAPI 1613 VideoPortAllocatePool( 1614 IN PVOID HwDeviceExtension, 1615 IN VP_POOL_TYPE PoolType, 1616 IN SIZE_T NumberOfBytes, 1617 IN ULONG Tag); 1618 1619 VPAPI 1620 VOID 1621 NTAPI 1622 VideoPortFreePool( 1623 IN PVOID HwDeviceExtension, 1624 IN PVOID Ptr); 1625 1626 VPAPI 1627 VP_STATUS 1628 NTAPI 1629 VideoPortCreateSpinLock( 1630 IN PVOID HwDeviceExtension, 1631 OUT PSPIN_LOCK *SpinLock); 1632 1633 VPAPI 1634 VP_STATUS 1635 NTAPI 1636 VideoPortDeleteSpinLock( 1637 IN PVOID HwDeviceExtension, 1638 IN PSPIN_LOCK SpinLock); 1639 1640 VPAPI 1641 VOID 1642 NTAPI 1643 VideoPortAcquireSpinLock( 1644 IN PVOID HwDeviceExtension, 1645 IN PSPIN_LOCK SpinLock, 1646 OUT PUCHAR OldIrql); 1647 1648 VPAPI 1649 VOID 1650 NTAPI 1651 VideoPortAcquireSpinLockAtDpcLevel( 1652 IN PVOID HwDeviceExtension, 1653 IN PSPIN_LOCK SpinLock); 1654 1655 VPAPI 1656 VOID 1657 NTAPI 1658 VideoPortReleaseSpinLock( 1659 IN PVOID HwDeviceExtension, 1660 IN PSPIN_LOCK SpinLock, 1661 IN UCHAR NewIrql); 1662 1663 VPAPI 1664 VOID 1665 NTAPI 1666 VideoPortReleaseSpinLockFromDpcLevel( 1667 IN PVOID HwDeviceExtension, 1668 IN PSPIN_LOCK SpinLock); 1669 1670 VPAPI 1671 VOID 1672 NTAPI 1673 VideoPortQuerySystemTime( 1674 OUT PLARGE_INTEGER CurrentTime); 1675 1676 VPAPI 1677 BOOLEAN 1678 NTAPI 1679 VideoPortCheckForDeviceExistence( 1680 IN PVOID HwDeviceExtension, 1681 IN USHORT VendorId, 1682 IN USHORT DeviceId, 1683 IN UCHAR RevisionId, 1684 IN USHORT SubVendorId, 1685 IN USHORT SubSystemId, 1686 IN ULONG Flags); 1687 1688 VPAPI 1689 ULONG 1690 NTAPI 1691 VideoPortGetAssociatedDeviceID( 1692 IN PVOID DeviceObject); 1693 1694 VPAPI 1695 VP_STATUS 1696 NTAPI 1697 VideoPortFlushRegistry( 1698 PVOID HwDeviceExtension); 1699 1700 VPAPI 1701 VP_STATUS 1702 NTAPI 1703 VideoPortGetVersion( 1704 IN PVOID HwDeviceExtension, 1705 IN OUT PVPOSVERSIONINFO pVpOsVersionInfo); 1706 1707 VPAPI 1708 BOOLEAN 1709 NTAPI 1710 VideoPortIsNoVesa(VOID); 1711 1712 VPAPI 1713 VP_STATUS 1714 NTAPI 1715 VideoPortRegisterBugcheckCallback( 1716 IN PVOID HwDeviceExtension, 1717 IN ULONG BugcheckCode, 1718 IN PVIDEO_BUGCHECK_CALLBACK Callback, 1719 IN ULONG BugcheckDataSize); 1720 1721 VPAPI 1722 PVIDEO_DEBUG_REPORT 1723 NTAPI 1724 VideoPortDbgReportCreate( 1725 IN PVOID HwDeviceExtension, 1726 IN ULONG ulCode, 1727 IN ULONG_PTR ulpArg1, 1728 IN ULONG_PTR ulpArg2, 1729 IN ULONG_PTR ulpArg3, 1730 IN ULONG_PTR ulpArg4); 1731 1732 VPAPI 1733 BOOLEAN 1734 NTAPI 1735 VideoPortDbgReportSecondaryData( 1736 IN OUT PVIDEO_DEBUG_REPORT pReport, 1737 IN PVOID pvData, 1738 IN ULONG ulDataSize); 1739 1740 VPAPI 1741 VOID 1742 NTAPI 1743 VideoPortDbgReportComplete( 1744 IN OUT PVIDEO_DEBUG_REPORT pReport); 1745 1746 #ifdef __cplusplus 1747 } 1748 #endif 1749