/*++ Copyright (c) 1994 - 1995 Microsoft Corporation. All Rights Reserved. Module Name: MPEGMINI.H Abstract: This file defines the interface between MPEG mini-port drivers and the MPEG port driver. Author: Paul Shih (paulsh) 27-Mar-1994 Paul Lever (a-paull) Environment: Kernel mode only Revision History: --*/ #ifndef _MPEGMINI_H #define _MPEGMINI_H #include "mpegcmn.h" #define MPEGAPI __stdcall typedef enum { // Use the given level to indicate: DebugLevelFatal = 0, // * imminent nonrecoverable system failure DebugLevelError, // * serious error, though recoverable DebugLevelWarning, // * warnings of unusual occurances DebugLevelInfo, // * status and other information - normal though // perhaps unusual events. System MUST remain // responsive. DebugLevelTrace, // * trace information - normal events // system need not ramain responsive DebugLevelVerbose, // * verbose trace information // system need not remain responsive DebugLevelMaximum } DEBUG_LEVEL; #if DBG #define DEBUG_PRINT(x) MpegDebugPrint x #define DEBUG_BREAKPOINT MpegDebugBreakPoint #define DEBUG_ASSERT(exp) \ if ( !(exp) ) { \ MpegDebugAssert( __FILE__, __LINE__, #exp, exp); \ } #else #define DEBUG_PRINT(x) #define DEBUG_BREAKPOINT #define DEBUG_ASSERT(exp) #endif // Uninitialized flag value. #define MP_UNINITIALIZED_VALUE ((ULONG) ~0) // Devices supported on an HBA typedef enum _CONTROL_DEVICE { VideoDevice, AudioDevice, OverlayDevice, MaximumControlDevice } CONTROL_DEVICE; // // MRB code, and strctus // // MRB command codes typedef enum _MRB_COMMAND { // Parameter structure MrbCommandVideoReset = 0x100, // no parameters MrbCommandVideoCancel, // no parameters MrbCommandVideoPlay, // no parameters MrbCommandVideoPause, // no parameters MrbCommandVideoStop, // no parameters MrbCommandVideoGetStc, // MPEG_TIMESTAMP MrbCommandVideoSetStc, // MPEG_TIMESTAMP MrbCommandVideoQueryInfo, // VIDEO_DEVICE_INFO MrbCommandVideoEndOfStream, // no parameters MrbCommandVideoPacket, // MPEG_PACKET MrbCommandVideoClearBuffer, // no parameters MrbCommandVideoGetAttribute, // MPEG_ATTRIBUTE MrbCommandVideoSetAttribute, // MPEG_ATTRIBUTE MrbCommandAudioReset = 0x200, // no parameters MrbCommandAudioCancel, // no parameters MrbCommandAudioPlay, // no parameters MrbCommandAudioPause, // no parameters MrbCommandAudioStop, // no parameters MrbCommandAudioGetStc, // MPEG_TIMESTAMP MrbCommandAudioSetStc, // MPEG_TIMESTAMP MrbCommandAudioQueryInfo, // AUDIO_DEVICE_INFO MrbCommandAudioEndOfStream, // no parameters MrbCommandAudioPacket, // MPEG_PACKET MrbCommandAudioGetAttribute, // MPEG_ATTRIBUTE MrbCommandAudioSetAttribute, // MPEG_ATTRIBUTE MrbCommandOverlayGetMode = 0x400, // OVERLAY_MODE MrbCommandOverlaySetMode, // OVERLAY_MODE MrbCommandOverlayGetVgaKey, // OVERLAY_KEY MrbCommandOverlaySetVgaKey, // OVERLAY_KEY MrbCommandOverlayGetDestination, // OVERLAY_PLACEMENT MrbCommandOverlaySetDestination, // OVERLAY_PLACEMENT MrbCommandOverlayEnable, // OVERLAY_ENABLE MrbCommandOverlayDisable, // no parameters MrbCommandOverlayUpdateClut, // OVERLAY_CLUT MrbCommandOverlayGetAttribute, // MPEG_ATTRIBUTE MrbCommandOverlaySetAttribute, // MPEG_ATTRIBUTE MrbCommandOverlayQueryInfo, // OVERLAY_DEVICE_INFO MrbCommandOverlaySetBitMask // MPEG_OVERLAY_BIT_MASK } MRB_COMMAND; // MRB status (command completion) codes typedef enum _MRB_STATUS { MrbStatusSuccess = 0, MrbStatusCancelled, MrbStatusError, MrbStatusInvalidParameter, MrbStatusInvalidData, MrbStatusDeviceFailure, MrbStatusVersionMismatch, MrbStatusUnsupportedComand, MrbStatusDeviceBusy, } MRB_STATUS; #define MRB_INVALID_STATUS 0xffff // MPEG packet header information typedef struct _MPEG_PACKET { ULONGLONG PtsValue; // presentation time stamp ULONGLONG DtsValue; // decode time stamp ULONG StreamNumber; // packet stream id ULONG PacketTotalSize; // total size of the packet including header ULONG PacketHeaderSize; // size of compressed header (in bytes) ULONG PacketPayloadSize; // size of the actuly data (full packet-header) PVOID PacketData; // pointer to the MPEG packet ULONGLONG ScrValue; // system SCR time for this packet } MPEG_PACKET,*PMPEG_PACKET; // Audio device information typedef struct _AUDIO_DEVICEINFO { MPEG_DEVICE_STATE DeviceState;// MPEG device decode state ULONG DecoderBufferSize; // Size of the decoder buffer ULONG DecoderBufferFullness; // Byte count of data in decoder buffer ULONG StarvationCount; // Number of times device was starved } AUDIO_DEVICEINFO,*PAUDIO_DEVICEINFO; // Video device information typedef struct _VIDEO_DEVICEINFO { MPEG_DEVICE_STATE DeviceState;// MPEG device decode state ULONG DecoderBufferSize; // Size of the decoder buffer ULONG DecoderBufferFullness; // Byte count of data in decoder buffer ULONG DecompressHeight; // Native MPEG decompress height ULONG DecompressWidth; // Native MPEG decompress width ULONG StarvationCount; // Number of times device was starved } VIDEO_DEVICEINFO,*PVIDEO_DEVICEINFO; // Overlay device information typedef struct _OVERLAY_DEVICEINFO { ULONG MinDestinationHeight; // Minimum height of overlay ULONG MaxDestinationHeight; // Maximum height of overlay ULONG MinDestinationWidth; // Minimum width of overlay ULONG MaxDestinationWidth; // Maximum width of overlay } OVERLAY_DEVICEINFO, *POVERLAY_DEVICEINFO; // Overlay VGA key typedef struct _OVERLAY_KEY { ULONG Key; // palette index or RGB color ULONG Mask; // significant bits in color } OVERLAY_KEY,*POVERLAY_KEY; // Overlay enable typedef struct _OVERLAY_ENABLE { LONG DisWMax; // display width LONG DisHMax; // display height LONG ScreenStride; // Bytes per line LONG DisXAdj; // overlay X alignment adjustment LONG DisYAdj; // overlay Y alignment adjustment LONG BitsPerPixel; // bits used to represent a pixel LONG NumberRedBits; // in DAC on graphics card LONG NumberGreenBits; LONG NumberBlueBits; LONG RedMask; // Red color mask for device w/ direct color modes LONG GreenMask; LONG BlueMask; LONG AttributeFlags; } OVERLAY_ENABLE,*POVERLAY_ENABLE; typedef struct _RGBX { UCHAR Red; // red bits of the pixel UCHAR Green; // green bits of the pixel UCHAR Blue; // blue bits of the pixel UCHAR Unused; } RGBX, *PRGBX; typedef union { RGBX RgbColor; ULONG RgbLong; } COLORLUT, *PCOLORLUT; typedef struct _COLORLUT_DATA { USHORT NumEntries; // Number of entries in the CLUT RGBArray USHORT FirstEntry; // Location in the device palette to which the // first entry in the CLUT is copied. The other // entries in the CLUT are copied sequentially // into the device palette from the starting // point. PCOLORLUT RgbArray; // The CLUT to copy into the device color registers // (palette). } COLORLUT_DATA, *PCOLORLUT_DATA; // Overlay CLUT typedef struct _OVERLAY_CLUT { PCOLORLUT_DATA ClutData; // pointer to CLUT data } OVERLAY_CLUT,*POVERLAY_CLUT; // MPEG I/O Request Block typedef struct _MPEG_REQUEST_BLOCK { ULONG Length; // sizeof MPEG_REQUEST_BLOCK (version check) MRB_COMMAND Command; // MRB command, see MRB_COMMAND_xxx MRB_STATUS Status; // MRB completion status, see MRB_STATUS_xxx ULONG Reserved; // reserved for use by the port driver union _commandData { MPEG_PACKET Packet; MPEG_SYSTEM_TIME Timestamp; AUDIO_DEVICEINFO AudioDeviceInfo; VIDEO_DEVICEINFO VideoDeviceInfo; MPEG_OVERLAY_MODE Mode; OVERLAY_KEY Key; MPEG_OVERLAY_PLACEMENT Placement; OVERLAY_ENABLE Enable; MPEG_OVERLAY_BIT_MASK OverlayBitMask; OVERLAY_CLUT Clut; OVERLAY_DEVICEINFO OverlayDeviceInfo; MPEG_ATTRIBUTE_PARAMS Attribute; } CommandData; } MPEG_REQUEST_BLOCK, *PMPEG_REQUEST_BLOCK; #define MPEG_REQUEST_BLOCK_SIZE sizeof(MPEG_REQUEST_BLOCK) // Interrupt Configuration Information typedef struct _INTERRUPT_CONFIGURATION { ULONG BusInterruptLevel; // Interrupt request level for device ULONG BusInterruptVector; // Bus interrupt vector used with hardware // buses which use a vector as // well as level, such as internal buses. KINTERRUPT_MODE InterruptMode; // Interrupt mode (level-sensitive or // edge-triggered) } INTERRUPT_CONFIGURATION, *PINTERRUPT_CONFIGURATION; // DMA Channel Configuration Information typedef struct _DMA_CONFIGURATION { ULONG DmaChannel; // Specifies the DMA channel used by a // slave HBA. By default, the value of // this member is 0xFFFFFFFF. If the // HBA uses a system DMA controller and // the given AdapterInterfaceType is // any value except MicroChannel, the // miniport driver must reset this member. ULONG DmaPort; // Specifies the DMA port used by a slave // HBA. By default, the value of this // member is zero. If the HBA uses a // system DMA controller and the given // AdapterInterfaceType is MicroChannel, // the miniport driver must reset this // member. DMA_WIDTH DmaWidth; // Specifies the width of the DMA transfer: // Width8Bits, Width16Bits or Width32Bits DMA_SPEED DmaSpeed; // Specifies the DMA transfer speed for EISA // type HBAs. By default, the value specifies // compatibility timing: Compatible, // TypeA, TypeB or TypeC BOOLEAN Dma32BitAddresses; // TRUE indicates that the HBA has 32 address // lines and can access memory with physical // addresses greater than 24 bits. BOOLEAN DemandMode; // TRUE indicates the system DMA controller // should be programmed for demand-mode rather // than single-cycle operations. If the HBA // is not a slave device, this member should // be FALSE. ????? BOOLEAN Master; // Indicates that the adapter is a bus master ???? BOOLEAN MapBuffers; // Buffers must be mapped into system space ULONG MaximumTransferLength; // max number of bytes device can handle per // DMA operation } DMA_CONFIGURATION, *PDMA_CONFIGURATION; // Special Initialization Data Configuration Information // This data may be obtained by the Port driver from a Registry or Initialzation // file or sequence. typedef struct _SPECIAL_INIT_CONFIGURATION { ULONG Length; // Specifies the length of the data buffer in bytes PVOID DataBuffer; // Pointer to data buffer } SPECIAL_INIT_CONFIGURATION, *PSPECIAL_INIT_CONFIGURATION; // Video Mode information passed to the mini-port on start-up typedef struct _VIDEO_MODE_DATA { ULONG ScreenWidth; // Number of visible horizontal pixels on a scan line ULONG ScreenHeight; // Numbee, in pixels, of visible scan lines. ULONG ScreenStride; // Bytes per line ULONG NumberOfPlanes; // Number of separate planes combined by the video hardware ULONG BitsPerPlane; // Number of bits per pixel on a plane ULONG Frequency; // Frequency of the screen, in hertz. ULONG NumberRedBits; // Number of bits in the red DAC ULONG NumberGreenBits; // Number of bits in the Green DAC. ULONG NumberBlueBits; // Number of bits in the blue DAC. ULONG RedMask; // Red color mask. Bits turned on indicated the color red ULONG GreenMask; // Green color mask. Bits turned on indicated the color green ULONG BlueMask; // Blue color mask. Bits turned on indicated the color blue ULONG AttributeFlags; // Flags indicating certain device behavior. // It's an logical-OR summation of MODE_xxx flags. } VIDEO_MODE_DATA, *PVIDEO_MODE_DATA; // AttributeFlags definitions #define MODE_COLOR 0x01 // 0 = monochrome; 1 = color #define MODE_GRAPHICS 0x02 // 0 = text mode; 1 = graphics mode #define MODE_INTERLACED 0x04 // 0 = non-interlaced; 1 = interlaced #define MODE_PALETTE_DRIVEN 0x08 // 0 = colors direct; 1 = colors indexed to a palette #define MODE_VALID_DATA 0x8000 // 0 = VIDEO_MADE_DATA not valid; 1 = VIDEO_MODE_DATA valid // if MODE_INVALID_DATA is 0, then none of the data // within the VIDEO_MODE_DATA structure is valid typedef PHYSICAL_ADDRESS MPEG_PHYSICAL_ADDRESS, *PMPEG_PHYSICAL_ADDRESS; // I/O and Memory address ranges typedef struct _ACCESS_RANGE { MPEG_PHYSICAL_ADDRESS RangeStart; ULONG RangeLength; BOOLEAN RangeInMemory; } ACCESS_RANGE, *PACCESS_RANGE; // Configuration information structure. Contains the information necessary // to initialize the adapter. typedef struct _PORT_CONFIGURATION_INFORMATION { ULONG Length; // Size of this structure, used as version check ULONG SystemIoBusNumber; // IO bus number (0 for machines that have // only 1 IO bus) INTERFACE_TYPE AdapterInterfaceType; // Adapter interface type supported by HBA: // Internal // Isa // Eisa // MicroChannel // TurboChannel // PCIBus // VMEBus // NuBus // PCMCIABus // CBus // MPIBus // MPSABus // Interrupt descriptions INTERRUPT_CONFIGURATION Interrupts[MaximumControlDevice]; // DMA CHannel descriptions DMA_CONFIGURATION DmaChannels[MaximumControlDevice]; ULONG NumberOfAccessRanges; // Number of access ranges allocated // Specifies the number of AccessRanges elements in the array, // described next. The OS-specific port driver always sets this // member to the value passed in the HW_INITIALIZATION_DATA // structure when the miniport driver called MpegPortInitialize. ACCESS_RANGE (*AccessRanges)[]; // Pointer to array of access range elements // Points to an array of ACCESS_RANGE-type elements. The given // NumberOfAccessRanges determines how many elements must be // configured with bus-relative range values. The AccessRanges // pointer must be NULL if NumberOfAccessRanges is zero. // Initialization special data, // miniport dependent. SPECIAL_INIT_CONFIGURATION Special[MaximumControlDevice]; ULONGLONG CounterFrequency; // frequency of high resolution counter // in Hertz (cycles per second) VIDEO_MODE_DATA VideoMode; // Video mode information } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION; // MPEG Adapter Dependent Routines typedef BOOLEAN (MPEGAPI *PHW_INITIALIZE) ( IN PVOID DeviceExtension ); typedef BOOLEAN (MPEGAPI *PHW_UNINITIALIZE) ( IN PVOID DeviceExtension ); typedef BOOLEAN (MPEGAPI *PHW_STARTIO) ( IN PVOID DeviceExtension, IN PMPEG_REQUEST_BLOCK Mrb ); typedef BOOLEAN (MPEGAPI *PHW_INTERRUPT) ( IN PVOID DeviceExtension ); typedef VOID (MPEGAPI *PHW_TIMER) ( IN PVOID DeviceExtension ); typedef VOID (MPEGAPI *PHW_DEFFERED_CALLBACK) ( IN PVOID DeviceExtension ); typedef VOID (MPEGAPI *PHW_ENABLE_BOARD_INTERRUPTS) ( IN PVOID DeviceExtension ); typedef VOID (MPEGAPI *PHW_DMA_STARTED) ( IN PVOID DeviceExtension ); typedef ULONG (MPEGAPI *PHW_FIND_ADAPTER) ( IN PVOID DeviceExtension, IN PVOID HwContext, IN PVOID BusInformation, IN PCHAR ArgumentString, IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo, OUT PBOOLEAN Again ); // Structure passed between Miniport initialization // and MPEG port initialization typedef struct _HW_INITIALIZATION_DATA { ULONG HwInitializationDataSize; // Size of this structure, used as version check INTERFACE_TYPE AdapterInterfaceType; // Adapter interface type supported by HBA: // Internal // Isa // Eisa // MicroChannel // TurboChannel // PCIBus // VMEBus // NuBus // PCMCIABus // CBus // MPIBus // MPSABus // Miniport driver routine pointers: PHW_INITIALIZE HwInitialize; // points to miniport's HwMpegInitialize routine PHW_UNINITIALIZE HwUnInitialize; // points to miniport's HwMpegUnInitialize routine PHW_STARTIO HwStartIo; // points to miniport's HwMpegStartIo routine PHW_FIND_ADAPTER HwFindAdapter; // points to miniport's HwMpegFindAdapter routine // points to miniport's HwMpegXXXInterrupt routines PHW_INTERRUPT HwInterrupt[MaximumControlDevice]; // Miniport driver resources ULONG DeviceExtensionSize; // size in bytes of the miniports per-HBA device // extension data ULONG NumberOfAccessRanges; // number of access ranges required by miniport // (memory or I/O addresses) ULONG NumberOfTimers; // Number of timers required by Miniport // Vendor and Device identification USHORT VendorIdLength; // size in bytes of VendorId PVOID VendorId; // points to ASCII byte string identifying // the manufacturer of the HBA. If // AdapterInterfaceType is PCIBus, then the // vendor ID is a USHORT represented as a // string (ID 1001 is '1','0','0','1') USHORT DeviceIdLength; // size in bytes of DeviceId PVOID DeviceId; // points to ASCII byte string identifying // the HBA model supported by the miniport. // If AdapterInterfaceType is PCIBus, then // the device ID is a USHORT represented as a // string. If the miniport can support PCI // devices with IDs 8040 and 8050,it might // set the DeviceId with a pointer to the // byte string ('8','0') BOOLEAN NoDynamicRelocation; // On dynamically configurable I/O busses, when set // to TRUE, inhibits re-configuring. Currently this // is limited to PCIbus. This flag can be set when a // PCI Mpeg device is on the same adapter (and same // function code) as the Video hardware and therefore // can't be moved. } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA; // // MRB Functions // // // MRB Status // // // MRB Flag Bits // // // Port driver error codes // // // Return values for MPEG_HW_FIND_ADAPTER and HardwareInitialization // typedef enum _MP_RETURN_CODES{ MP_RETURN_FOUND, // adapter found OK MP_RETURN_NOT_FOUND, // adapter not found MP_RETURN_ERROR, // generic error MP_RETURN_BAD_CONFIG, // configuration structure invalid MP_RETURN_REVISION_MISMATCH, // configuration structure size mismatch MP_RETURN_INSUFFICIENT_RESOURCES, // Not enough access ranges MP_RETURN_INVALID_INTERRUPT, // no interrupt specified, or unusable interrupt MP_RETURN_INVALID_DMA, // No DMA channel specified or usuable channel MP_RETURN_NO_DMA_BUFFER, // DMA buffer of sufficient size not available MP_RETURN_INVALID_MEMORY, // no Memory I/O address specified or unusable address MP_RETURN_INVALID_PORT, // no Port I/O address specified or unusable address MP_RETURN_HW_REVISION, // revision of H/W detected is not supported by driver MP_RETURN_BAD_VIDEO_MODE, // Video data supplied is insufficient or unsupported MP_RETURN_VIDEO_INITIALIZATION_FAILED, // Video failed to initialize MP_RETURN_AUDIO_INITIALIZATION_FAILED, // Audio failed to initialize MP_RETURN_OVERLAY_INITIALIZATION_FAILED, // Overlay failed to initialize MP_RETURN_VIDEO_FAILED, // Video failed MP_RETURN_AUDIO_FAILED, // Audio failed MP_RETURN_OVERLAY_FAILED, // Overlay failed } MP_RETURN_CODES, *PMP_RETURN_CODES; // // Port driver error codes // #define MP_INTERNAL_ADAPTER_ERROR 0x0006 #define MP_IRQ_NOT_RESPONDING 0x0008 // // Notification Event Types // typedef enum _MPEG_NOTIFICATION_TYPE { RequestComplete, NextRequest, CallDisableInterrupts, CallEnableInterrupts, RequestTimerCall, StatusPending, DeviceFailure, LogError, NotificationMaximum } MPEG_NOTIFICATION_TYPE, *PMPEG_NOTIFICATION_TYPE; // // Port export routines // ULONG MPEGAPI MpegPortInitialize( IN PVOID Argument1, IN PVOID Argument2, IN PHW_INITIALIZATION_DATA HwInitializationData, IN PVOID HwContext OPTIONAL ); VOID MPEGAPI MpegPortRequestDma( IN CONTROL_DEVICE DeviceType, IN PVOID HwDeviceExtension, IN PHW_DMA_STARTED HwDmaStarted, IN PMPEG_REQUEST_BLOCK Mrb, IN PVOID LogicalAddress, IN ULONG Length ); VOID MPEGAPI MpegPortNotification( IN MPEG_NOTIFICATION_TYPE NotificationType, IN CONTROL_DEVICE DeviceType, IN PVOID HwDeviceExtension, ... ); VOID MPEGAPI MpegPortZeroMemory( IN PVOID WriteBuffer, IN ULONG Length ); VOID MPEGAPI MpegPortMoveMemory( IN PVOID WriteBuffer, IN PVOID ReadBuffer, IN ULONG Length ); MPEG_PHYSICAL_ADDRESS MPEGAPI MpegPortConvertUlongToPhysicalAddress( IN ULONG UlongAddress ); ULONG MPEGAPI MpegPortConvertPhysicalAddressToUlong( IN MPEG_PHYSICAL_ADDRESS Address ); #define MPEG_PORT_CONVERT_PHYSICAL_ADDRESS_TO_ULONG(Address) ((Address).LowPart) VOID MPEGAPI MpegPortFlushDma( IN CONTROL_DEVICE DeviceType, IN PVOID HwDeviceExtension ); PVOID MPEGAPI MpegPortGetDeviceBase( IN PVOID HwDeviceExtension, IN INTERFACE_TYPE BusType, IN ULONG SystemIoBusNumber, IN MPEG_PHYSICAL_ADDRESS IoAddress, IN ULONG NumberOfBytes, IN BOOLEAN InIoSpace ); VOID MPEGAPI MpegPortFreeDeviceBase( IN PVOID HwDeviceExtension, IN PVOID MappedAddress ); PVOID MPEGAPI MpegPortGetDmaBuffer( IN PVOID HwDeviceExtension, IN CONTROL_DEVICE DeviceType, IN PPORT_CONFIGURATION_INFORMATION ConfigInfo, IN ULONG NumberOfBytes ); ULONG MPEGAPI MpegPortGetBusData( IN PVOID HwDeviceExtension, IN ULONG BusDataType, IN ULONG SystemIoBusNumber, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Length ); MPEG_PHYSICAL_ADDRESS MPEGAPI MpegPortGetPhysicalAddress( IN PVOID HwDeviceExtension, IN PMPEG_REQUEST_BLOCK Mrb, IN PVOID VirtualAddress, OUT PULONG pLength ); PVOID MPEGAPI MpegPortGetVirtualAddress( IN PVOID HwDeviceExtension, IN MPEG_PHYSICAL_ADDRESS PhysicalAddress ); VOID MPEGAPI MpegPortStallExecution( IN ULONG Delay ); UCHAR MPEGAPI MpegPortReadPortUchar( IN PUCHAR Port ); USHORT MPEGAPI MpegPortReadPortUshort( IN PUSHORT Port ); ULONG MPEGAPI MpegPortReadPortUlong( IN PULONG Port ); UCHAR MPEGAPI MpegPortReadRegisterUchar( IN PUCHAR Register ); USHORT MPEGAPI MpegPortReadRegisterUshort( IN PUSHORT Register ); ULONG MPEGAPI MpegPortReadRegisterUlong( IN PULONG Register ); VOID MPEGAPI MpegPortReadPortBufferUchar( IN PUCHAR Port, IN PUCHAR Buffer, IN ULONG Count ); VOID MPEGAPI MpegPortReadPortBufferUshort( IN PUSHORT Port, IN PUSHORT Buffer, IN ULONG Count ); VOID MPEGAPI MpegPortReadPortBufferUlong( IN PULONG Port, IN PULONG Buffer, IN ULONG Count ); VOID MPEGAPI MpegPortReadRegisterBufferUchar( IN PUCHAR Register, IN PUCHAR Buffer, IN ULONG Count ); VOID MPEGAPI MpegPortReadRegisterBufferUshort( IN PUSHORT Register, IN PUSHORT Buffer, IN ULONG Count ); VOID MPEGAPI MpegPortReadRegisterBufferUlong( IN PULONG Register, IN PULONG Buffer, IN ULONG Count ); VOID MPEGAPI MpegPortWritePortUchar( IN PUCHAR Port, IN UCHAR Value ); VOID MPEGAPI MpegPortWritePortUshort( IN PUSHORT Port, IN USHORT Value ); VOID MPEGAPI MpegPortWritePortUlong( IN PULONG Port, IN ULONG Value ); VOID MPEGAPI MpegPortWriteRegisterUchar( IN PUCHAR Register, IN UCHAR Value ); VOID MPEGAPI MpegPortWriteRegisterUshort( IN PUSHORT Register, IN USHORT Value ); VOID MPEGAPI MpegPortWriteRegisterUlong( IN PULONG Register, IN ULONG Value ); VOID MPEGAPI MpegPortWritePortBufferUchar( IN PUCHAR Port, IN PUCHAR Buffer, IN ULONG Count ); VOID MPEGAPI MpegPortWritePortBufferUshort( IN PUSHORT Port, IN PUSHORT Buffer, IN ULONG Count ); VOID MPEGAPI MpegPortWritePortBufferUlong( IN PULONG Port, IN PULONG Buffer, IN ULONG Count ); VOID MPEGAPI MpegPortWriteRegisterBufferUchar( IN PUCHAR Register, IN PUCHAR Buffer, IN ULONG Count ); VOID MPEGAPI MpegPortWriteRegisterBufferUshort( IN PUSHORT Register, IN PUSHORT Buffer, IN ULONG Count ); VOID MPEGAPI MpegPortWriteRegisterBufferUlong( IN PULONG Register, IN PULONG Buffer, IN ULONG Count ); ULONGLONG MPEGAPI MpegPortQueryCounter( VOID ); VOID MPEGAPI MpegDebugPrint( IN DEBUG_LEVEL DebugPrintLevel, IN PCHAR DebugMessage, ... ); VOID MPEGAPI MpegDebugBreakPoint( VOID ); VOID MPEGAPI MpegDebugAssert( IN PCHAR File, IN ULONG Line, IN PCHAR AssertText, IN ULONG AssertValue ); #endif