/*++
Copyright (c) 1991-1993 Microsoft Corporation
Module Name:
video.h
Abstract:
Contains all structure and routine definitions common to the video port
driver and the video miniport drivers.
Notes:
Revision History:
--*/
//
// Define port driver status code.
// The values for these are the Win32 error codes
//
typedef LONG VP_STATUS;
typedef VP_STATUS *PVP_STATUS;
//
// Defines for registry information and synchronization.
//
typedef enum VIDEO_SYNCHRONIZE_PRIORITY {
VpLowPriority,
VpMediumPriority,
VpHighPriority
} VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY;
//
// Type of information requested with GetDeviceData
//
typedef enum _VIDEO_DEVICE_DATA_TYPE {
VpMachineData,
VpCmosData,
VpBusData,
VpControllerData,
VpMonitorData
} VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE;
//
// Data returned with VpControllerData
//
typedef 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 structure used to call the BIOS int 10 function
//
typedef struct _VIDEO_X86_BIOS_ARGUMENTS {
ULONG Eax;
ULONG Ebx;
ULONG Ecx;
ULONG Edx;
ULONG Esi;
ULONG Edi;
ULONG Ebp;
} VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS;
//
// Debugging statements. This will remove all the debug information from the
// "free" version.
//
#if DBG
#define VideoDebugPrint(arg) VideoPortDebugPrint arg
#else
#define VideoDebugPrint(arg)
#endif
//
// Allows us to remove lots of unused code.
//
#ifndef _NTOSDEF_
#ifdef _X86_
#define ALLOC_PRAGMA
#define VIDEOPORT_API __declspec(dllimport)
#else
#define VIDEOPORT_API
#endif
#if DBG
#define PAGED_CODE() \
if (VideoPortGetCurrentIrql() > 1 /*APC_LEVEL*/) { \
VideoPortDebugPrint(0, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \
ASSERT(FALSE); \
}
#else
#define PAGED_CODE()
#endif
ULONG
DriverEntry(
PVOID Context1,
PVOID Context2
);
#else
#define VIDEOPORT_API
#endif
#ifndef _NTOS_
//
// These are the various function prototypes of the routines that are
// provided by the kernel driver to hook out access to io ports.
//
typedef
VP_STATUS
(*PDRIVER_IO_PORT_UCHAR ) (
ULONG Context,
ULONG Port,
UCHAR AccessMode,
PUCHAR Data
);
typedef
VP_STATUS
(*PDRIVER_IO_PORT_UCHAR_STRING ) (
ULONG Context,
ULONG Port,
UCHAR AccessMode,
PUCHAR Data,
ULONG DataLength
);
typedef
VP_STATUS
(*PDRIVER_IO_PORT_USHORT ) (
ULONG Context,
ULONG Port,
UCHAR AccessMode,
PUSHORT Data
);
typedef
VP_STATUS
(*PDRIVER_IO_PORT_USHORT_STRING ) (
ULONG Context,
ULONG Port,
UCHAR AccessMode,
PUSHORT Data,
ULONG DataLength // number of words
);
typedef
VP_STATUS
(*PDRIVER_IO_PORT_ULONG ) (
ULONG Context,
ULONG Port,
UCHAR AccessMode,
PULONG Data
);
typedef
VP_STATUS
(*PDRIVER_IO_PORT_ULONG_STRING ) (
ULONG Context,
ULONG Port,
UCHAR AccessMode,
PULONG Data,
ULONG DataLength // number of dwords
);
#endif // _NTOS_
//
// Definition of the request packet sent from the port driver to the
// miniport driver. It reflects the parameters passed from the
// DeviceIOControl call made by the windows display driver.
//
typedef struct _STATUS_BLOCK {
//
// Contains the status code of the operation.
// This value in one of the Win32 error codes that are defined for use
// in the video miniport drivers.
//
VP_STATUS Status;
//
// Information returned to the callee.
// The meaning of the information varies from function to function. It
// is generally used to return the minimum size for the input buffer if
// the function takes an input buffer, or the amount of data transfered
// back to the caller if the operation returns output.
//
ULONG Information;
} STATUS_BLOCK, *PSTATUS_BLOCK;
//
// BUGBUG
// What do we do about overlapping input and output buffers ?
// Do we want to create a separate output buffer or do we explain that there
// is a single buffer is used to perform the requests.
//
typedef struct _VIDEO_REQUEST_PACKET {
//
// The IO control code passed to the DeviceIoControl function by the
// caller.
//
ULONG IoControlCode;
//
// Pointer to a status block provided by the caller. This should be
// filled out by the callee with the appropriate information.
//
PSTATUS_BLOCK StatusBlock;
//
// Pointer to an input buffer which contains the information passed in
// by the caller.
//
PVOID InputBuffer;
//
// Size of the input buffer
//
ULONG InputBufferLength;
//
// Pointer to an output buffer into which the data returned to the caller
// should be stored.
//
PVOID OutputBuffer;
//
// Length of the output buffer. This buffer can not be grown by the
// callee.
//
ULONG OutputBufferLength;
} VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET;
//
// The following structure is used to define access ranges. The ranges are
// used to indicate which ports and memory adresses are being used by the
// card.
//
typedef struct _VIDEO_ACCESS_RANGE {
//
// Indicates the starting memory address or port number of the range.
// This values should be stored before being transformed by
// VideoPortGetDeviceBase() which returns the logical address that must
// be used by the miniport driver when referencing physical addresses.
//
PHYSICAL_ADDRESS RangeStart;
//
// Indicates the length in bytes, or number of ports in the range. This
// value should indicate the range actually decoded by the adapter. For
// example, if the adapter uses 7 registers but responds to eight, the
// RangeLength should be set to 8.
ULONG RangeLength;
//
// Indicates if the range is in IO space (TRUE) or in memory space (FALSE).
//
UCHAR RangeInIoSpace;
//
// Indicates if the range should be visible by the Windows display driver.
// This is done so that a Windows display driver can access certain
// video ports directly. This will only be allowed if the caller has the
// required privileges (is a trusted subsystem) to access the range.
//
// Synchronization of access to ports or memory in the range must be
// done explicitly by the miniport driver and the user mode process so
// that they both don't try to program the device simultaneously.
//
// Non visible ranges should include video memory, ROM addresses, etc.
// which are not required to program the device for output purposes.
//
//
UCHAR RangeVisible;
//
// This field determines if the range can be shared with another device.
// The rule should be applied as follow.
//
// - If the range of memory or IO ports should be "owned" by this driver,
// and that any other driver trying to access this range may cause
// a problem, FALSE should be returned.
//
// - If the range can be shared with another co-operating device driver,
// then the share field should be set to TRUE.
//
// As a guideline, the VGA miniport driver will claim all of its resources
// as shareable so that it can be used as a VGA compatible device with
// any other driver (such as an S3 or XGA.
//
// Super VGA miniport drivers that implement all the VGA functionality
// (declared in the Registry as VGACOMPATIBLE=1) should claim the range
// as non-shareable since they don't want the VGA to run at the same time.
//
// Miniports for cards such as an S3 or XGA that have an XGA on the board
// but do not implement the VGA functionality will run with the VGA
// miniport loaded and should therefore claim all the resources shared
// with the VGA as shareable.
//
// Miniports for cards that work with a pass-through and that can be
// connected to any VGA/SVGA card should not be using any VGA ports or
// memory ranges ! ... but if they do they should not claim those
// resources since they will cause a conflict in the system because the
// SVGA cards will have claimed them as non-shareable ...
//
UCHAR RangeShareable;
} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
//
// This structure contains the specific configuration information about the
// device. The information is initialized by the port driver and it should
// be completed by the mniport driver.
// The information is used to setup the device, as weel as providing
// information to the port driver so it can perform some of the requests on
// behalf of the miniport driver.
//
typedef struct _VIDEO_PORT_CONFIG_INFO {
//
// Specifies the length of the PVIDEO_PORT_CONFIG_INFO structure as
// returned by sizeof(). Since this structure may grow in later
// releases, the miniport driver should check that the length of the
// structure is greater than or equal to the length it expects (since
// it is guaranteed that defined fields will not change).
//
// This field is always initialized by the port driver.
//
ULONG Length;
//
// Specifies which IO bus is tp be scanned. This field is used as a
// parameter to some VideoPortXXX calls.
//
// This field is always initialized by the port driver.
//
ULONG SystemIoBusNumber;
//
// Specifies the type of bus being scanned. This field is equal to the
// value being passed into VideoPortInitialize in the
// VIDEO_HW_INITIALIZATION_DATA structure.
//
// This field is always initialized by the port driver.
//
INTERFACE_TYPE AdapterInterfaceType;
//
// Specifies the bus interrupt request level. This level corresponds to
// the IRQL on ISA and MCA buses.
// This value is only used if the device supports interrupts, which is
// determined by the presence of an interrupt service routine in the
// VIDEO_HW_INITIALIZATION_DATA structure.
//
// The preset default value for this field is zero. Otherwise, it is the
// value found in the device configuration information.
//
ULONG BusInterruptLevel;
//
// Specifies the bus vector returned by the adapter. This is used for
// systems which have IO buses that use interrupt vectors. For ISA, MCA
// and EISA buses, this field is unused.
//
// The preset default value for this field is zero.
//
ULONG BusInterruptVector;
//
// Specifies whether this adapter uses latched or edge-triggered type
// interrupts.
//
// This field is always initialized by the port driver.
//
KINTERRUPT_MODE InterruptMode;
//
// NOTE:
// DMA information is not included since it is not yet supported by the
// video port driver.
//
//
// Specifies the number of emulator access entries that the adapter
// uses. It indicates the number of array elements in the following field.
//
// This field can be reinitialized with the number of entries in the
// EmulatorAccessEntries structure if the structure is statically
// defined in the miniport driver. The EmulatorAccessEntries fields
// should also be updated.
//
ULONG NumEmulatorAccessEntries;
//
// Supplies a pointer to an array of EMULATOR_ACCESS_ENTRY structures.
// The number of elements in the array is indicated by the
// NumEmulatorAccessEntries field. The driver should fill out each entry
// for the adapter.
//
// The uninitialized value for the structure is NULL.
// EmulatorAccessEntries will be NULL if NumEmulatorAccessEntries is
// zero.
//
// A poiner to an array of emulator access entries can be passed back
// if such a structure is defined statically in the miniport driver. The
// NumEmulatorAccessEntries field should also be updated.
//
PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries;
//
// This is a context values that is passed with each call to the
// emulator/validator functions defined in the EmulatorAccessEntries
// defined above.
// This parameter should in general be a pointer to the miniports
// device extension or other such storage location.
//
// This pointer will allow the miniport to save some state temporarily
// to allow for the batching of IO requests.
//
ULONG EmulatorAccessEntriesContext;
//
// Physical address of the video memory that must be mapped into a VDM's
// address space for proper BIOS support
//
PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress;
//
// Length of the video memory that must be mapped into a VDM's addres
// space for proper BIOS support.
//
ULONG VdmPhysicalVideoMemoryLength;
//
// Determines the minimum size required to store the hardware state
// information returned by IOCTL_VIDEO_SAVE_HARDWARE_STATE.
//
// The uninitialized value for this field is zero.
//
// If the field is left to zero, SAVE_HARDWARE_STATE will return an
// ERROR_INVALID_FUNCTION status code.
//
ULONG HardwareStateSize;
//
// New for version 3.5
//
//
// Optional DMA channel, if required by the device.
// 0 for the Channel and Port indicates DMA is not used by the device.
//
ULONG DmaChannel;
//
// Optional DMA channel, if required by the device.
// 0 for the Channel and Port indicates DMA is not used by the device.
//
ULONG DmaPort;
//
// Set to 1 if the DMA channel can be shared with another device.
// Set to 0 if the DMA channel must be owned exclusively by the driver.
//
UCHAR DmaShareable;
//
// Set to 1 if the interrupt can be shared with another device.
// Set to 0 if the interrupt must be owned exclusively by the driver.
//
UCHAR InterruptShareable;
} VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO;
//
// Video Adapter Dependent Routines.
//
typedef
VP_STATUS
(*PVIDEO_HW_FIND_ADAPTER) (
PVOID HwDeviceExtension,
PVOID HwContext,
PWSTR ArgumentString,
PVIDEO_PORT_CONFIG_INFO ConfigInfo,
PUCHAR Again
);
typedef
BOOLEAN
(*PVIDEO_HW_INITIALIZE) (
PVOID HwDeviceExtension
);
typedef
BOOLEAN
(*PVIDEO_HW_INTERRUPT) (
PVOID HwDeviceExtension
);
typedef
BOOLEAN
(*PVIDEO_HW_START_IO) (
PVOID HwDeviceExtension,
PVIDEO_REQUEST_PACKET RequestPacket
);
//
// The return value determines if the mode was completely programmed (TRUE)
// or if an int10 should be done by the HAL to complete the modeset (FALSE).
//
typedef
BOOLEAN
(*PVIDEO_HW_RESET_HW) (
PVOID HwDeviceExtension,
ULONG Columns,
ULONG Rows
);
//
// Timer routine called every second.
//
typedef
VOID
(*PVIDEO_HW_TIMER) (
PVOID HwDeviceExtension
);
//
// Structure passed by the miniport entry point to the video port
// initialization routine.
//
typedef struct _VIDEO_HW_INITIALIZATION_DATA {
//
// Supplies the size of the structure in bytes as determined by sizeof().
//
ULONG HwInitDataSize;
//
// Indicates the bus type the adapter works with, such as Eisa, Isa, MCA.
//
INTERFACE_TYPE AdapterInterfaceType;
//
// Supplies a pointer to the miniport driver's find adapter routine.
//
PVIDEO_HW_FIND_ADAPTER HwFindAdapter;
//
// Supplies a pointer to the miniport driver's initialization routine.
//
PVIDEO_HW_INITIALIZE HwInitialize;
//
// Supplies a pointer to the miniport driver's interrupt service routine.
//
PVIDEO_HW_INTERRUPT HwInterrupt;
//
// Supplies a pointer to the miniport driver's start io routine.
//
PVIDEO_HW_START_IO HwStartIO;
//
// Supplies the size in bytes required for the miniport driver's private
// device extension. This storage is used by the miniport driver to hold
// per-adapter information. A pointer to this storage is provided with
// every call made to the miniport driver. This data storage is
// initialized to zero by the port driver.
//
ULONG HwDeviceExtensionSize;
//
// Supplies the number with which device numbering should be started.
// The device numbering is used to determine which \DeviceX entry under
// the \Parameters section in the registry should be used for parameters
// to the miniport driver.
// The number is *automatically* incremented when the miniport is called
// back in it's FindAdapter routine due to an appropriate _Again_
// parameter.
//
ULONG StartingDeviceNumber;
//
// New for version 3.5
//
//
// Supplies a pointer to the miniport driver's HwResetHw routine.
//
// This function is called when the machine needs to bugchecks (go back
// to the blue screen).
//
// This function should reset the video adapter to a character mode,
// or at least to a state from which an int 10 can reset the card to
// a character mode.
//
// This routine CAN NOT call int10.
// It can only call Read\Write Port\Register functions from the port driver.
//
// The function must also be completely in non-paged pool since the IO\MM
// subsystems may have crashed.
//
PVIDEO_HW_RESET_HW HwResetHw;
//
// Pointer to a timer routine to be called every second.
//
PVIDEO_HW_TIMER HwTimer;
} VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA;
//
// Port driver routines called by miniport driver and callbacks
//
VIDEOPORT_API
ULONG
VideoPortCompareMemory(
PVOID Source1,
PVOID Source2,
ULONG Length
);
VIDEOPORT_API
VOID
VideoPortDebugPrint(
ULONG DebugPrintLevel,
PCHAR DebugMessage,
...
);
VIDEOPORT_API
VP_STATUS
VideoPortDisableInterrupt(
PVOID HwDeviceExtension
);
VIDEOPORT_API
VP_STATUS
VideoPortEnableInterrupt(
PVOID HwDeviceExtension
);
VIDEOPORT_API
VOID
VideoPortFreeDeviceBase(
PVOID HwDeviceExtension,
PVOID MappedAddress
);
VIDEOPORT_API
ULONG
VideoPortGetBusData(
PVOID HwDeviceExtension,
BUS_DATA_TYPE BusDataType,
ULONG SlotNumber,
PVOID Buffer,
ULONG Offset,
ULONG Length
);
VIDEOPORT_API
UCHAR
VideoPortGetCurrentIrql();
//
// Flags that can be passed to VideoPortGetDeviceBase or VideoPortMapMemory.
//
#define VIDEO_MEMORY_SPACE_MEMORY 0x00 // Should not be set by display driver
#define VIDEO_MEMORY_SPACE_IO 0x01 // Should not be set by display driver
#define VIDEO_MEMORY_SPACE_USER_MODE 0x02 // Memory pointer for application use
#define VIDEO_MEMORY_SPACE_DENSE 0x04 // Mapped dense, linearly (ALPHA)
#define VIDEO_MEMORY_SPACE_P6CACHE 0x08 // P6 MTRR caching (kernel and user)
VIDEOPORT_API
PVOID
VideoPortGetDeviceBase(
PVOID HwDeviceExtension,
PHYSICAL_ADDRESS IoAddress,
ULONG NumberOfUchars,
UCHAR InIoSpace
);
typedef
VP_STATUS
(*PMINIPORT_QUERY_DEVICE_ROUTINE)(
PVOID HwDeviceExtension,
PVOID Context,
VIDEO_DEVICE_DATA_TYPE DeviceDataType,
PVOID Identifier,
ULONG IdentiferLength,
PVOID ConfigurationData,
ULONG ConfigurationDataLength,
PVOID ComponentInformation,
ULONG ComponentInformationLength
);
VIDEOPORT_API
VP_STATUS
VideoPortGetDeviceData(
PVOID HwDeviceExtension,
VIDEO_DEVICE_DATA_TYPE DeviceDataType,
PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine,
PVOID Context
);
VIDEOPORT_API
VP_STATUS
VideoPortGetAccessRanges(
PVOID HwDeviceExtension,
ULONG NumRequestedResources,
PIO_RESOURCE_DESCRIPTOR RequestedResources OPTIONAL,
ULONG NumAccessRanges,
PVIDEO_ACCESS_RANGE AccessRanges,
PVOID VendorId,
PVOID DeviceId,
PULONG Slot
);
typedef
VP_STATUS
(*PMINIPORT_GET_REGISTRY_ROUTINE)(
PVOID HwDeviceExtension,
PVOID Context,
PWSTR ValueName,
PVOID ValueData,
ULONG ValueLength
);
VIDEOPORT_API
VP_STATUS
VideoPortGetRegistryParameters(
PVOID HwDeviceExtension,
PWSTR ParameterName,
UCHAR IsParameterFileName,
PMINIPORT_GET_REGISTRY_ROUTINE GetRegistryRoutine,
PVOID Context
);
VIDEOPORT_API
ULONG
VideoPortInitialize(
PVOID Argument1,
PVOID Argument2,
PVIDEO_HW_INITIALIZATION_DATA HwInitializationData,
PVOID HwContext
);
VIDEOPORT_API
VP_STATUS
VideoPortInt10(
PVOID HwDeviceExtension,
PVIDEO_X86_BIOS_ARGUMENTS BiosArguments
);
VIDEOPORT_API
VOID
VideoPortLogError(
PVOID HwDeviceExtension,
PVIDEO_REQUEST_PACKET Vrp OPTIONAL,
VP_STATUS ErrorCode,
ULONG UniqueId
);
VIDEOPORT_API
VP_STATUS
VideoPortMapBankedMemory(
PVOID HwDeviceExtension,
PHYSICAL_ADDRESS PhysicalAddress,
PULONG Length,
PULONG InIoSpace,
PVOID *VirtualAddress,
ULONG BankLength,
UCHAR ReadWriteBank,
PBANKED_SECTION_ROUTINE BankRoutine,
PVOID Context
);
VIDEOPORT_API
VP_STATUS
VideoPortMapMemory(
PVOID HwDeviceExtension,
PHYSICAL_ADDRESS PhysicalAddress,
PULONG Length,
PULONG InIoSpace,
PVOID *VirtualAddress
);
VIDEOPORT_API
VOID
VideoPortMoveMemory(
PVOID Destination,
PVOID Source,
ULONG Length
);
VIDEOPORT_API
UCHAR
VideoPortReadPortUchar(
PUCHAR Port
);
VIDEOPORT_API
USHORT
VideoPortReadPortUshort(
PUSHORT Port
);
VIDEOPORT_API
ULONG
VideoPortReadPortUlong(
PULONG Port
);
VIDEOPORT_API
VOID
VideoPortReadPortBufferUchar(
PUCHAR Port,
PUCHAR Buffer,
ULONG Count
);
VIDEOPORT_API
VOID
VideoPortReadPortBufferUshort(
PUSHORT Port,
PUSHORT Buffer,
ULONG Count
);
VIDEOPORT_API
VOID
VideoPortReadPortBufferUlong(
PULONG Port,
PULONG Buffer,
ULONG Count
);
VIDEOPORT_API
UCHAR
VideoPortReadRegisterUchar(
PUCHAR Register
);
VIDEOPORT_API
USHORT
VideoPortReadRegisterUshort(
PUSHORT Register
);
VIDEOPORT_API
ULONG
VideoPortReadRegisterUlong(
PULONG Register
);
VIDEOPORT_API
VOID
VideoPortReadRegisterBufferUchar(
PUCHAR Register,
PUCHAR Buffer,
ULONG Count
);
VIDEOPORT_API
VOID
VideoPortReadRegisterBufferUshort(
PUSHORT Register,
PUSHORT Buffer,
ULONG Count
);
VIDEOPORT_API
VOID
VideoPortReadRegisterBufferUlong(
PULONG Register,
PULONG Buffer,
ULONG Count
);
VIDEOPORT_API
BOOLEAN
VideoPortScanRom(
PVOID HwDeviceExtension,
PUCHAR RomBase,
ULONG RomLength,
PUCHAR String
);
VIDEOPORT_API
ULONG
VideoPortSetBusData(
PVOID HwDeviceExtension,
BUS_DATA_TYPE BusDataType,
ULONG SlotNumber,
PVOID Buffer,
ULONG Offset,
ULONG Length
);
VIDEOPORT_API
VP_STATUS
VideoPortSetRegistryParameters(
PVOID HwDeviceExtension,
PWSTR ValueName,
PVOID ValueData,
ULONG ValueLength
);
VIDEOPORT_API
VP_STATUS
VideoPortSetTrappedEmulatorPorts(
PVOID HwDeviceExtension,
ULONG NumAccessRanges,
PVIDEO_ACCESS_RANGE AccessRange
);
VIDEOPORT_API
VOID
VideoPortStallExecution(
ULONG Microseconds
);
VIDEOPORT_API
VOID
VideoPortStartTimer(
PVOID HwDeviceExtension
);
VIDEOPORT_API
VOID
VideoPortStopTimer(
PVOID HwDeviceExtension
);
typedef
BOOLEAN
(*PMINIPORT_SYNCHRONIZE_ROUTINE)(
PVOID Context
);
BOOLEAN
VIDEOPORT_API
VideoPortSynchronizeExecution(
PVOID HwDeviceExtension,
VIDEO_SYNCHRONIZE_PRIORITY Priority,
PMINIPORT_SYNCHRONIZE_ROUTINE synchronizeRoutine,
PVOID Context
);
VIDEOPORT_API
VP_STATUS
VideoPortUnmapMemory(
PVOID HwDeviceExtension,
PVOID VirtualAddress,
HANDLE ProcessHandle
);
VIDEOPORT_API
VP_STATUS
VideoPortVerifyAccessRanges(
PVOID HwDeviceExtension,
ULONG NumAccessRanges,
PVIDEO_ACCESS_RANGE AccessRanges
);
VIDEOPORT_API
VOID
VideoPortWritePortUchar(
PUCHAR Port,
UCHAR Value
);
VIDEOPORT_API
VOID
VideoPortWritePortUshort(
PUSHORT Port,
USHORT Value
);
VIDEOPORT_API
VOID
VideoPortWritePortUlong(
PULONG Port,
ULONG Value
);
VIDEOPORT_API
VOID
VideoPortWritePortBufferUchar(
PUCHAR Port,
PUCHAR Buffer,
ULONG Count
);
VIDEOPORT_API
VOID
VideoPortWritePortBufferUshort(
PUSHORT Port,
PUSHORT Buffer,
ULONG Count
);
VIDEOPORT_API
VOID
VideoPortWritePortBufferUlong(
PULONG Port,
PULONG Buffer,
ULONG Count
);
VIDEOPORT_API
VOID
VideoPortWriteRegisterUchar(
PUCHAR Register,
UCHAR Value
);
VIDEOPORT_API
VOID
VideoPortWriteRegisterUshort(
PUSHORT Register,
USHORT Value
);
VIDEOPORT_API
VOID
VideoPortWriteRegisterUlong(
PULONG Register,
ULONG Value
);
VIDEOPORT_API
VOID
VideoPortWriteRegisterBufferUchar(
PUCHAR Register,
PUCHAR Buffer,
ULONG Count
);
VIDEOPORT_API
VOID
VideoPortWriteRegisterBufferUshort(
PUSHORT Register,
PUSHORT Buffer,
ULONG Count
);
VIDEOPORT_API
VOID
VideoPortWriteRegisterBufferUlong(
PULONG Register,
PULONG Buffer,
ULONG Count
);
VIDEOPORT_API
VOID
VideoPortZeroMemory(
PVOID Destination,
ULONG Length
);
VIDEOPORT_API
VOID
VideoPortZeroDeviceMemory(
PVOID Destination,
ULONG Length
);