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