📄 video.h
字号:
/* * video.h * * Video port and miniport driver interface * * This file is part of the w32api package. * * Contributors: * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */#ifndef __VIDEO_H#define __VIDEO_H#if __GNUC__ >=3#pragma GCC system_header#endif#ifdef __WINDDI_H#error winddi.h cannot be included with video.h#else#ifdef __cplusplusextern "C" {#endif#include "ntddk.h"#if defined(_VIDEOPORT_) #define VPAPI DECLSPEC_EXPORT#else #define VPAPI DECLSPEC_IMPORT#endif#include "videoagp.h"#include "ntddvdeo.h"typedef LONG VP_STATUS;typedef VP_STATUS *PVP_STATUS;typedef struct __DMA_PARAMETERS * PDMA;typedef struct _VIDEO_PORT_EVENT *PEVENT;typedef struct _VIDEO_PORT_SPIN_LOCK *PSPIN_LOCK;typedef struct __VP_DMA_ADAPTER *PVP_DMA_ADAPTER;#define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF#define EVENT_TYPE_MASK 1#define SYNCHRONIZATION_EVENT 0#define NOTIFICATION_EVENT 1#define INITIAL_EVENT_STATE_MASK 2#define INITIAL_EVENT_NOT_SIGNALED 0#define INITIAL_EVENT_SIGNALED 2typedef enum VIDEO_DEBUG_LEVEL { Error = 0, Warn, Trace, Info} VIDEO_DEBUG_LEVEL, *PVIDEO_DEBUG_LEVEL;typedef enum { VideoPortUnlockAfterDma = 1, VideoPortKeepPagesLocked, VideoPortDmaInitOnly} DMA_FLAGS;typedef enum _HW_DMA_RETURN { DmaAsyncReturn, DmaSyncReturn} HW_DMA_RETURN, *PHW_DMA_RETURN;typedef HW_DMA_RETURN(*PVIDEO_HW_START_DMA)( PVOID HwDeviceExtension, PDMA pDma);#ifdef DBG#define PAGED_CODE() \ if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) \ { \ VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \ ASSERT(FALSE); \ }#else#define PAGED_CODE()#endiftypedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA { INTERFACE_TYPE InterfaceType; ULONG BusNumber; USHORT Version; USHORT Revision; USHORT Irql; USHORT Vector; ULONG ControlBase; ULONG ControlSize; ULONG CursorBase; ULONG CursorSize; ULONG FrameBase; ULONG FrameSize;} VIDEO_HARDWARE_CONFIGURATION_DATA, *PVIDEO_HARDWARE_CONFIGURATION_DATA;#define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO 0x42#define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA 0x28#define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA 0x50typedef enum _VIDEO_DEVICE_DATA_TYPE { VpMachineData = 0, VpCmosData, VpBusData, VpControllerData, VpMonitorData} VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE;/* Video miniport driver functions */typedef struct _VP_SCATTER_GATHER_ELEMENT { PHYSICAL_ADDRESS Address; ULONG Length; ULONG_PTR Reserved;} VP_SCATTER_GATHER_ELEMENT, *PVP_SCATTER_GATHER_ELEMENT;typedef struct _VP_SCATTER_GATHER_LIST { ULONG NumberOfElements; ULONG_PTR Reserved; VP_SCATTER_GATHER_ELEMENT Elements[0];} VP_SCATTER_GATHER_LIST, *PVP_SCATTER_GATHER_LIST;typedef VOID DDKAPI(*PEXECUTE_DMA)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PVP_DMA_ADAPTER VpDmaAdapter, /*IN*/ PVP_SCATTER_GATHER_LIST SGList, /*IN*/ PVOID Context);typedef PVOID DDKAPI(*PVIDEO_PORT_GET_PROC_ADDRESS)(/*IN*/ PVOID HwDeviceExtension,/*IN*/ PUCHAR FunctionName);typedef struct _VIDEO_PORT_CONFIG_INFO { ULONG Length; ULONG SystemIoBusNumber; INTERFACE_TYPE AdapterInterfaceType; ULONG BusInterruptLevel; ULONG BusInterruptVector; KINTERRUPT_MODE InterruptMode; ULONG NumEmulatorAccessEntries; PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries; ULONG_PTR EmulatorAccessEntriesContext; PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress; ULONG VdmPhysicalVideoMemoryLength; ULONG HardwareStateSize; ULONG DmaChannel; ULONG DmaPort; UCHAR DmaShareable; UCHAR InterruptShareable; BOOLEAN Master; DMA_WIDTH DmaWidth; DMA_SPEED DmaSpeed; BOOLEAN bMapBuffers; BOOLEAN NeedPhysicalAddresses; BOOLEAN DemandMode; ULONG MaximumTransferLength; ULONG NumberOfPhysicalBreaks; BOOLEAN ScatterGather; ULONG MaximumScatterGatherChunkSize; PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress; PWSTR DriverRegistryPath; ULONGLONG SystemMemorySize;} VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO;typedef VP_STATUS DDKAPI(*PVIDEO_HW_FIND_ADAPTER)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PVOID HwContext, /*IN*/ PWSTR ArgumentString, /*IN OUT*/ PVIDEO_PORT_CONFIG_INFO ConfigInfo, /*OUT*/ PUCHAR Again);typedef VP_STATUS DDKAPI(*PVIDEO_HW_POWER_GET)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ ULONG HwId, /*IN OUT*/ PVIDEO_POWER_MANAGEMENT VideoPowerControl);/* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */#define VIDEO_ENUM_MORE_DEVICES ERROR_CONTINUE#define VIDEO_ENUM_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES#define VIDEO_ENUM_INVALID_DEVICE ERROR_INVALID_NAME/* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */typedef struct _VIDEO_CHILD_ENUM_INFO { ULONG Size; ULONG ChildDescriptorSize; ULONG ChildIndex; ULONG ACPIHwId; PVOID ChildHwDeviceExtension;} VIDEO_CHILD_ENUM_INFO, *PVIDEO_CHILD_ENUM_INFO;/* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */typedef enum _VIDEO_CHILD_TYPE { Monitor = 1, NonPrimaryChip, VideoChip, Other} VIDEO_CHILD_TYPE, *PVIDEO_CHILD_TYPE;typedef VP_STATUS DDKAPI(*PVIDEO_HW_GET_CHILD_DESCRIPTOR)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PVIDEO_CHILD_ENUM_INFO ChildEnumInfo, /*OUT*/ PVIDEO_CHILD_TYPE VideoChildType, /*OUT*/ PUCHAR pChildDescriptor, /*OUT*/ PULONG UId, /*OUT*/ PULONG pUnused);typedef BOOLEAN DDKAPI(*PVIDEO_HW_INITIALIZE)( /*IN*/ PVOID HwDeviceExtension);typedef BOOLEAN DDKAPI(*PVIDEO_HW_INTERRUPT)( /*IN*/ PVOID HwDeviceExtension);/* VIDEO_ACCESS_RANGE.RangePassive */#define VIDEO_RANGE_PASSIVE_DECODE 1#define VIDEO_RANGE_10_BIT_DECODE 2#ifndef VIDEO_ACCESS_RANGE_DEFINED /* also in miniport.h */#define VIDEO_ACCESS_RANGE_DEFINEDtypedef struct _VIDEO_ACCESS_RANGE { PHYSICAL_ADDRESS RangeStart; ULONG RangeLength; UCHAR RangeInIoSpace; UCHAR RangeVisible; UCHAR RangeShareable; UCHAR RangePassive;} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;#endiftypedef VOID DDKAPI(*PVIDEO_HW_LEGACYRESOURCES)( /*IN*/ ULONG VendorId, /*IN*/ ULONG DeviceId, /*IN OUT*/ PVIDEO_ACCESS_RANGE *LegacyResourceList, /*IN OUT*/ PULONG LegacyResourceCount);typedef VP_STATUS DDKAPI(*PMINIPORT_QUERY_DEVICE_ROUTINE)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PVOID Context, /*IN*/ VIDEO_DEVICE_DATA_TYPE DeviceDataType, /*IN*/ PVOID Identifier, /*IN*/ ULONG IdentifierLength, /*IN*/ PVOID ConfigurationData, /*IN*/ ULONG ConfigurationDataLength, /*IN OUT*/ PVOID ComponentInformation, /*IN*/ ULONG ComponentInformationLength);typedef struct _QUERY_INTERFACE { CONST GUID *InterfaceType; USHORT Size; USHORT Version; PINTERFACE Interface; PVOID InterfaceSpecificData;} QUERY_INTERFACE, *PQUERY_INTERFACE;typedef VP_STATUS DDKAPI(*PVIDEO_HW_QUERY_INTERFACE)( /*IN*/ PVOID HwDeviceExtension, /*IN OUT*/ PQUERY_INTERFACE QueryInterface);typedef VP_STATUS DDKAPI(*PMINIPORT_GET_REGISTRY_ROUTINE)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PVOID Context, /*IN OUT*/ PWSTR ValueName, /*IN OUT*/ PVOID ValueData, /*IN*/ ULONG ValueLength);typedef BOOLEAN DDKAPI(*PVIDEO_HW_RESET_HW)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ ULONG Columns, /*IN*/ ULONG Rows);typedef VP_STATUS DDKAPI(*PVIDEO_HW_POWER_SET)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ ULONG HwId, /*IN*/ PVIDEO_POWER_MANAGEMENT VideoPowerControl);typedef struct _STATUS_BLOCK { _ANONYMOUS_UNION union { VP_STATUS Status; PVOID Pointer; } DUMMYUNIONNAME; ULONG_PTR Information;} STATUS_BLOCK, *PSTATUS_BLOCK;typedef struct _VIDEO_REQUEST_PACKET { ULONG IoControlCode; PSTATUS_BLOCK StatusBlock; PVOID InputBuffer; ULONG InputBufferLength; PVOID OutputBuffer; ULONG OutputBufferLength;} VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET;typedef BOOLEAN DDKAPI(*PVIDEO_HW_START_IO)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PVIDEO_REQUEST_PACKET RequestPacket);typedef BOOLEAN DDKAPI(*PMINIPORT_SYNCHRONIZE_ROUTINE)( /*IN*/ PVOID Context);typedef VOID DDKAPI(*PVIDEO_HW_TIMER)( /*IN*/ PVOID HwDeviceExtension);typedef VOID DDKAPI(*PMINIPORT_DPC_ROUTINE)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PVOID Context);typedef VP_STATUS DDKAPI(*PDRIVER_IO_PORT_UCHAR)( /*IN*/ ULONG_PTR Context, /*IN*/ ULONG Port, /*IN*/ UCHAR AccessMode, /*IN*/ PUCHAR Data);typedef VP_STATUS DDKAPI(*PDRIVER_IO_PORT_UCHAR_STRING)( /*IN*/ ULONG_PTR Context, /*IN*/ ULONG Port, /*IN*/ UCHAR AccessMode, /*IN*/ PUCHAR Data, /*IN*/ ULONG DataLength);typedef VP_STATUS DDKAPI(*PDRIVER_IO_PORT_ULONG)( /*IN*/ ULONG_PTR Context, /*IN*/ ULONG Port, /*IN*/ UCHAR AccessMode, /*IN*/ PULONG Data);typedef VP_STATUS DDKAPI(*PDRIVER_IO_PORT_ULONG_STRING)( /*IN*/ ULONG_PTR Context, /*IN*/ ULONG Port, /*IN*/ UCHAR AccessMode, /*IN*/ PULONG Data, /*IN*/ ULONG DataLength);typedef VP_STATUS DDKAPI(*PDRIVER_IO_PORT_USHORT)( /*IN*/ ULONG_PTR Context, /*IN*/ ULONG Port, /*IN*/ UCHAR AccessMode, /*IN*/ PUSHORT Data);typedef VP_STATUS DDKAPI(*PDRIVER_IO_PORT_USHORT_STRING)( /*IN*/ ULONG_PTR Context, /*IN*/ ULONG Port, /*IN*/ UCHAR AccessMode, /*IN*/ PUSHORT Data, /*IN*/ ULONG DataLength);typedef struct _INT10_BIOS_ARGUMENTS { ULONG Eax; ULONG Ebx; ULONG Ecx; ULONG Edx; ULONG Esi; ULONG Edi; ULONG Ebp; USHORT SegDs; USHORT SegEs;} INT10_BIOS_ARGUMENTS, *PINT10_BIOS_ARGUMENTS;typedef struct _VIDEO_CHILD_STATE { ULONG Id; ULONG State;} VIDEO_CHILD_STATE, *PVIDEO_CHILD_STATE;typedef struct _VIDEO_CHILD_STATE_CONFIGURATION { ULONG Count; VIDEO_CHILD_STATE ChildStateArray[ANYSIZE_ARRAY];} VIDEO_CHILD_STATE_CONFIGURATION, *PVIDEO_CHILD_STATE_CONFIGURATION;typedef struct _VIDEO_HW_INITIALIZATION_DATA { ULONG HwInitDataSize; INTERFACE_TYPE AdapterInterfaceType; PVIDEO_HW_FIND_ADAPTER HwFindAdapter; PVIDEO_HW_INITIALIZE HwInitialize; PVIDEO_HW_INTERRUPT HwInterrupt; PVIDEO_HW_START_IO HwStartIO; ULONG HwDeviceExtensionSize; ULONG StartingDeviceNumber; PVIDEO_HW_RESET_HW HwResetHw; PVIDEO_HW_TIMER HwTimer; PVIDEO_HW_START_DMA HwStartDma; PVIDEO_HW_POWER_SET HwSetPowerState; PVIDEO_HW_POWER_GET HwGetPowerState; PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor; PVIDEO_HW_QUERY_INTERFACE HwQueryInterface; ULONG HwChildDeviceExtensionSize; PVIDEO_ACCESS_RANGE HwLegacyResourceList; ULONG HwLegacyResourceCount; PVIDEO_HW_LEGACYRESOURCES HwGetLegacyResources; BOOLEAN AllowEarlyEnumeration; ULONG Reserved;} VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA; /* VIDEO_PORT_AGP_INTERFACE.Version contants */#define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1typedef struct _VIDEO_PORT_AGP_INTERFACE { SHORT Size; SHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; PAGP_RESERVE_PHYSICAL AgpReservePhysical; PAGP_RELEASE_PHYSICAL AgpReleasePhysical; PAGP_COMMIT_PHYSICAL AgpCommitPhysical; PAGP_FREE_PHYSICAL AgpFreePhysical; PAGP_RESERVE_VIRTUAL AgpReserveVirtual; PAGP_RELEASE_VIRTUAL AgpReleaseVirtual; PAGP_COMMIT_VIRTUAL AgpCommitVirtual; PAGP_FREE_VIRTUAL AgpFreeVirtual; ULONGLONG AgpAllocationLimit;} VIDEO_PORT_AGP_INTERFACE, *PVIDEO_PORT_AGP_INTERFACE; /* VIDEO_PORT_AGP_INTERFACE_2.Version constants */#define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2typedef struct _VIDEO_PORT_AGP_INTERFACE_2 { /*IN*/ USHORT Size; /*IN*/ USHORT Version; /*OUT*/ PVOID Context; /*OUT*/ PINTERFACE_REFERENCE InterfaceReference; /*OUT*/ PINTERFACE_DEREFERENCE InterfaceDereference; /*OUT*/ PAGP_RESERVE_PHYSICAL AgpReservePhysical; /*OUT*/ PAGP_RELEASE_PHYSICAL AgpReleasePhysical; /*OUT*/ PAGP_COMMIT_PHYSICAL AgpCommitPhysical; /*OUT*/ PAGP_FREE_PHYSICAL AgpFreePhysical; /*OUT*/ PAGP_RESERVE_VIRTUAL AgpReserveVirtual; /*OUT*/ PAGP_RELEASE_VIRTUAL AgpReleaseVirtual; /*OUT*/ PAGP_COMMIT_VIRTUAL AgpCommitVirtual; /*OUT*/ PAGP_FREE_VIRTUAL AgpFreeVirtual; /*OUT*/ ULONGLONG AgpAllocationLimit; /*OUT*/ PAGP_SET_RATE AgpSetRate;} VIDEO_PORT_AGP_INTERFACE_2, *PVIDEO_PORT_AGP_INTERFACE_2;#define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1typedef VOID DDKAPI(*PVIDEO_WRITE_CLOCK_LINE)( PVOID HwDeviceExtension, UCHAR Data);typedef VOID DDKAPI(*PVIDEO_WRITE_DATA_LINE)( PVOID HwDeviceExtension, UCHAR Data);typedef BOOLEAN DDKAPI(*PVIDEO_READ_CLOCK_LINE)( PVOID HwDeviceExtension);typedef BOOLEAN DDKAPI(*PVIDEO_READ_DATA_LINE)( PVOID HwDeviceExtension);typedef struct _I2C_CALLBACKS{ /*IN*/ PVIDEO_WRITE_CLOCK_LINE WriteClockLine; /*IN*/ PVIDEO_WRITE_DATA_LINE WriteDataLine; /*IN*/ PVIDEO_READ_CLOCK_LINE ReadClockLine; /*IN*/ PVIDEO_READ_DATA_LINE ReadDataLine;} I2C_CALLBACKS, *PI2C_CALLBACKS;typedef BOOLEAN DDKAPI(*PI2C_START)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PI2C_CALLBACKS I2CCallbacks);typedef BOOLEAN DDKAPI(*PI2C_STOP)( /*IN*/ PVOID HwDeviceExtension, /*IN*/ PI2C_CALLBACKS I2CCallbacks);typedef BOOLEAN DDKAPI(*PI2C_WRITE)(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -