/*==========================================================================; * * Copyright (C) 1997 Microsoft Corporation. All Rights Reserved. * * File: dxmini.h * Content: Miniport support for DirectDraw DXAPI. This file is * analagous to Win95's ddkmmini.h. * ***************************************************************************/ #ifndef __DXMINI_INCLUDED__ #define __DXMINI_INCLUDED__ DEFINE_GUID(GUID_DxApi, 0x8a79bef0, 0xb915, 0x11d0, 0x91, 0x44, 0x08, 0x00, 0x36, 0xd2, 0xef, 0x02); #ifndef GUID_DEFS_ONLY /*============================================================================ * * MDL structure for handling pagelocked memory. This is copied from WDM.H * *==========================================================================*/ #ifndef MDL_MAPPING_FLAGS typedef struct _MDL { struct _MDL *MdlNext; short MdlSize; short MdlFlags; struct _EPROCESS *Process; ULONG *lpMappedSystemVa; ULONG *lpStartVa; ULONG ByteCount; ULONG ByteOffset; } MDL; typedef MDL *PMDL; #define MDL_MAPPED_TO_SYSTEM_VA 0x0001 #define MDL_PAGES_LOCKED 0x0002 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004 #define MDL_ALLOCATED_FIXED_SIZE 0x0008 #define MDL_PARTIAL 0x0010 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020 #define MDL_IO_PAGE_READ 0x0040 #define MDL_WRITE_OPERATION 0x0080 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100 #define MDL_LOCK_HELD 0x0200 #define MDL_SCATTER_GATHER_VA 0x0400 #define MDL_IO_SPACE 0x0800 #define MDL_NETWORK_HEADER 0x1000 #define MDL_MAPPING_CAN_FAIL 0x2000 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000 #define MDL_64_BIT_VA 0x8000 #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \ MDL_PAGES_LOCKED | \ MDL_SOURCE_IS_NONPAGED_POOL | \ MDL_PARTIAL_HAS_BEEN_MAPPED | \ MDL_PARENT_MAPPED_SYSTEM_VA | \ MDL_LOCK_HELD | \ MDL_SYSTEM_VA | \ MDL_IO_SPACE ) #endif /*============================================================================ * * Error values that may be returned by the miniport * *==========================================================================*/ #define DX_OK 0x0 #define DXERR_UNSUPPORTED 0x80004001 #define DXERR_GENERIC 0x80004005 #define DXERR_OUTOFCAPS 0x88760168 /*============================================================================ * * Structures maintained by DirectDraw * *==========================================================================*/ #define DDOVER_AUTOFLIP 0x00100000l #define DDOVER_BOB 0x00200000l #define DDOVER_OVERRIDEBOBWEAVE 0x00400000l #define DDOVER_INTERLEAVED 0x00800000l // // Data for every DXAPI surface // typedef struct _DDSURFACEDATA { DWORD ddsCaps; // Ring 3 creation caps DWORD dwSurfaceOffset; // Offset in frame buffer of surface ULONG_PTR fpLockPtr; // Surface lock ptr DWORD dwWidth; // Surface width DWORD dwHeight; // Surface height LONG lPitch; // Surface pitch DWORD dwOverlayFlags; // DDOVER_XX flags DWORD dwOverlayOffset; // Offset in frame buffer of overlay DWORD dwOverlaySrcWidth; // Src width of overlay DWORD dwOverlaySrcHeight; // Src height of overlay DWORD dwOverlayDestWidth; // Dest width of overlay DWORD dwOverlayDestHeight; // Dest height of overlay DWORD dwVideoPortId; // ID of video port (-1 if not connected to a video port) DWORD dwFormatFlags; DWORD dwFormatFourCC; DWORD dwFormatBitCount; DWORD dwRBitMask; DWORD dwGBitMask; DWORD dwBBitMask; ULONG dwDriverReserved1; // Reserved for the HAL/Miniport ULONG dwDriverReserved2; // Reserved for the HAL/Miniport ULONG dwDriverReserved3; // Reserved for the HAL/Miniport ULONG dwDriverReserved4; // Reserved for the HAL/Miniport } DDSURFACEDATA, *LPDDSURFACEDATA; // // Data for every DXAPI video port // typedef struct DDVIDEOPORTDATA { DWORD dwVideoPortId; // ID of video port (0 - MaxVideoPorts-1) DWORD dwVPFlags; // Video port DDVP_ option flags DWORD dwOriginOffset; // Start address relative to surface DWORD dwHeight; // Height of total video region (per field) DWORD dwVBIHeight; // Height of VBI region (per field) ULONG dwDriverReserved1; // Reserved for the HAL/Miniport ULONG dwDriverReserved2; // Reserved for the HAL/Miniport ULONG dwDriverReserved3; // Reserved for the HAL/Miniport } DDVIDEOPORTDATA, *LPDDVIDEOPORTDATA; /*============================================================================ * * Structures used to communicate with the Miniport * *==========================================================================*/ typedef struct _DX_IRQDATA { DWORD dwIrqFlags; // DDIRQ_ flags ORed in by miniport } DX_IRQDATA, *PDX_IRQDATA; typedef VOID (*PDX_IRQCALLBACK)(PDX_IRQDATA pIrqData); #define DDIRQ_DISPLAY_VSYNC 0x00000001l #define DDIRQ_BUSMASTER 0x00000002l #define DDIRQ_VPORT0_VSYNC 0x00000004l #define DDIRQ_VPORT0_LINE 0x00000008l #define DDIRQ_VPORT1_VSYNC 0x00000010l #define DDIRQ_VPORT1_LINE 0x00000020l #define DDIRQ_VPORT2_VSYNC 0x00000040l #define DDIRQ_VPORT2_LINE 0x00000080l #define DDIRQ_VPORT3_VSYNC 0x00000100l #define DDIRQ_VPORT3_LINE 0x00000200l #define DDIRQ_VPORT4_VSYNC 0x00000400l #define DDIRQ_VPORT4_LINE 0x00000800l #define DDIRQ_VPORT5_VSYNC 0x00001000l #define DDIRQ_VPORT5_LINE 0x00002000l #define DDIRQ_VPORT6_VSYNC 0x00004000l #define DDIRQ_VPORT6_LINE 0x00008000l #define DDIRQ_VPORT7_VSYNC 0x00010000l #define DDIRQ_VPORT7_LINE 0x00020000l #define DDIRQ_VPORT8_VSYNC 0x00040000l #define DDIRQ_VPORT8_LINE 0x00080000l #define DDIRQ_VPORT9_VSYNC 0x00010000l #define DDIRQ_VPORT9_LINE 0x00020000l // output from DxGetIrqInfo typedef struct _DDGETIRQINFO { DWORD dwFlags; } DDGETIRQINFO, *PDDGETIRQINFO; #define IRQINFO_HANDLED 0x01 // Miniport is managing IRQ #define IRQINFO_NOTHANDLED 0x02 // Not supported on NT // input to DxEnableIrq typedef struct _DDENABLEIRQINFO { DWORD dwIRQSources; DWORD dwLine; // Line for DDIRQ_VPORTx_LINE interrupt PDX_IRQCALLBACK IRQCallback; // Miniport calls this when IRQ happens PDX_IRQDATA lpIRQData; // Parameter to be passed to IRQCallback } DDENABLEIRQINFO, *PDDENABLEIRQINFO; // input to DxSkipNextField typedef struct _DDSKIPNEXTFIELDINFO { LPDDVIDEOPORTDATA lpVideoPortData; DWORD dwSkipFlags; } DDSKIPNEXTFIELDINFO, *PDDSKIPNEXTFIELDINFO; #define DDSKIP_SKIPNEXT 1 #define DDSKIP_ENABLENEXT 2 // intput to DxBobNextField typedef struct _DDBOBNEXTFIELDINFO { LPDDSURFACEDATA lpSurface; } DDBOBNEXTFIELDINFO, *PDDBOBNEXTFIELDINFO; // intput to DxSetState typedef struct _DDSETSTATEININFO { LPDDSURFACEDATA lpSurfaceData; LPDDVIDEOPORTDATA lpVideoPortData; } DDSETSTATEININFO, *PDDSETSTATEININFO; // output from DxSetState typedef struct _DDSETSTATEOUTINFO { BOOL bSoftwareAutoflip; DWORD dwSurfaceIndex; DWORD dwVBISurfaceIndex; } DDSETSTATEOUTINFO, *PDDSETSTATEOUTINFO; // input to DxLock typedef struct _DDLOCKININFO { LPDDSURFACEDATA lpSurfaceData; } DDLOCKININFO, *PDDLOCKININFO; // output from DxLock typedef struct _DDLOCKOUTINFO { ULONG_PTR dwSurfacePtr; } DDLOCKOUTINFO, *PDDLOCKOUTINFO; // input to DxFlipOverlay typedef struct _DDFLIPOVERLAYINFO { LPDDSURFACEDATA lpCurrentSurface; LPDDSURFACEDATA lpTargetSurface; DWORD dwFlags; } DDFLIPOVERLAYINFO, *PDDFLIPOVERLAYINFO; // intput to DxFlipVideoPort typedef struct _DDFLIPVIDEOPORTINFO { LPDDVIDEOPORTDATA lpVideoPortData; LPDDSURFACEDATA lpCurrentSurface; LPDDSURFACEDATA lpTargetSurface; DWORD dwFlipVPFlags; } DDFLIPVIDEOPORTINFO, *PDDFLIPVIDEOPORTINFO; #define DDVPFLIP_VIDEO 0x00000001l #define DDVPFLIP_VBI 0x00000002l // input to DxGetPolarity typedef struct _DDGETPOLARITYININFO { LPDDVIDEOPORTDATA lpVideoPortData; } DDGETPOLARITYININFO, *PDDGETPOLARITYININFO; // output from DxGetPolarity typedef struct _DDGETPOLARITYOUTINFO { DWORD bPolarity; } DDGETPOLARITYOUTINFO, *PDDGETPOLARITYOUTINFO; // input to DxGetCurrentAutoflipSurface typedef struct _DDGETCURRENTAUTOFLIPININFO { LPDDVIDEOPORTDATA lpVideoPortData; } DDGETCURRENTAUTOFLIPININFO, *PDDGETCURRENTAUTOFLIPININFO; // output from DxGetCurrentAutoflipSurface typedef struct _DDGETCURRENTAUTOFLIPOUTINFO { DWORD dwSurfaceIndex; DWORD dwVBISurfaceIndex; } DDGETCURRENTAUTOFLIPOUTINFO, *PDDGETCURRENTAUTOFLIPOUTINFO; // input to DxGetPreviousAutoflipSurface typedef struct _DDGETPREVIOUSAUTOFLIPININFO { LPDDVIDEOPORTDATA lpVideoPortData; } DDGETPREVIOUSAUTOFLIPININFO, *PDDGETPREVIOUSAUTOFLIPININFO; // output from DxGetPreviousAutoflipSurface typedef struct _DDGETPREVIOUSAUTOFLIPOUTINFO { DWORD dwSurfaceIndex; DWORD dwVBISurfaceIndex; } DDGETPREVIOUSAUTOFLIPOUTINFO, *PDDGETPREVIOUSAUTOFLIPOUTINFO; // intput to DxTransfer typedef struct _DDTRANSFERININFO { LPDDSURFACEDATA lpSurfaceData; DWORD dwStartLine; DWORD dwEndLine; ULONG_PTR dwTransferID; DWORD dwTransferFlags; PMDL lpDestMDL; } DDTRANSFERININFO, *PDDTRANSFERININFO; #define DDTRANSFER_SYSTEMMEMORY 0x00000001 #define DDTRANSFER_NONLOCALVIDMEM 0x00000002 #define DDTRANSFER_INVERT 0x00000004 #define DDTRANSFER_CANCEL 0x00000080 #define DDTRANSFER_HALFLINES 0x00000100 // output from DxTransfer typedef struct _DDTRANSFEROUTINFO { DWORD dwBufferPolarity; } DDTRANSFEROUTINFO, *PDDTRANSFEROUTINFO; // output from DxGetTransferStatus typedef struct _DDGETTRANSFERSTATUSOUTINFO { DWORD_PTR dwTransferID; } DDGETTRANSFERSTATUSOUTINFO, *PDDGETTRANSFEROUTINFO; /*============================================================================ * * DXAPI function prototypes * *==========================================================================*/ typedef DWORD (*PDX_GETIRQINFO)(PVOID,PVOID,PDDGETIRQINFO); typedef DWORD (*PDX_ENABLEIRQ)(PVOID,PDDENABLEIRQINFO,PVOID); typedef DWORD (*PDX_SKIPNEXTFIELD)(PVOID,PDDSKIPNEXTFIELDINFO,PVOID); typedef DWORD (*PDX_BOBNEXTFIELD)(PVOID,PDDBOBNEXTFIELDINFO,PVOID); typedef DWORD (*PDX_SETSTATE)(PVOID,PDDSETSTATEININFO,PDDSETSTATEOUTINFO); typedef DWORD (*PDX_LOCK)(PVOID,PDDLOCKININFO,PDDLOCKOUTINFO); typedef DWORD (*PDX_FLIPOVERLAY)(PVOID,PDDFLIPOVERLAYINFO,PVOID); typedef DWORD (*PDX_FLIPVIDEOPORT)(PVOID,PDDFLIPVIDEOPORTINFO,PVOID); typedef DWORD (*PDX_GETPOLARITY)(PVOID,PDDGETPOLARITYININFO,PDDGETPOLARITYOUTINFO); typedef DWORD (*PDX_GETCURRENTAUTOFLIP)(PVOID,PDDGETCURRENTAUTOFLIPININFO,PDDGETCURRENTAUTOFLIPOUTINFO); typedef DWORD (*PDX_GETPREVIOUSAUTOFLIP)(PVOID,PDDGETPREVIOUSAUTOFLIPININFO,PDDGETPREVIOUSAUTOFLIPOUTINFO); typedef DWORD (*PDX_TRANSFER)(PVOID,PDDTRANSFERININFO,PDDTRANSFEROUTINFO); typedef DWORD (*PDX_GETTRANSFERSTATUS)(PVOID,PVOID,PDDGETTRANSFEROUTINFO); /*============================================================================ * * HAL table filled in by the miniport and called by DirectDraw * *==========================================================================*/ #define DXAPI_HALVERSION 0x0001 typedef struct _DXAPI_INTERFACE { USHORT Size; USHORT Version; PVOID Context; PVOID InterfaceReference; PVOID InterfaceDereference; PDX_GETIRQINFO DxGetIrqInfo; PDX_ENABLEIRQ DxEnableIrq; PDX_SKIPNEXTFIELD DxSkipNextField; PDX_BOBNEXTFIELD DxBobNextField; PDX_SETSTATE DxSetState; PDX_LOCK DxLock; PDX_FLIPOVERLAY DxFlipOverlay; PDX_FLIPVIDEOPORT DxFlipVideoPort; PDX_GETPOLARITY DxGetPolarity; PDX_GETCURRENTAUTOFLIP DxGetCurrentAutoflip; PDX_GETPREVIOUSAUTOFLIP DxGetPreviousAutoflip; PDX_TRANSFER DxTransfer; PDX_GETTRANSFERSTATUS DxGetTransferStatus; } DXAPI_INTERFACE, *PDXAPI_INTERFACE; #endif // GUID_DEFS_ONLY #endif