windows-nt/Source/XPSP1/NT/drivers/video/matrox/mga/mini/bind.h
2020-09-26 16:20:57 +08:00

487 lines
17 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*****************************************************************************
*
* file name: bind.h
*
******************************************************************************/
#ifndef BIND_H /* useful for header inclusion check, used by DDK */
#define BIND_H
#if 0 /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
/* BDL should be enabled by __HC303__ only & not by High C 1.73 ???
* __HIGHC__ is not automatically enabled by HIGH C3.03
* Verify if this is correct.
*/
#ifdef __HIGHC__
pragma Off(Args_in_regs_for_locals);
#endif
#else
#ifdef __HC303__
#ifdef __ANSI_C__
#define _REGS REGS
/*** Configuration for compatibility with ASM ***/
#pragma Off(Args_in_regs_for_locals);
#else
/*** Configuration for compatibility with ASM ***/
pragma Off(Args_in_regs_for_locals);
#endif /* __ANSI_C__ */
#endif /* __HC303__ */
#endif /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
#ifdef WINDOWS_NT
#include "video.h"
#define _itoa itoa
#define _strnicmp strnicmp
#define _inp(a) VideoPortReadPortUchar((PUCHAR)(a))
#define _outp(a, d) VideoPortWritePortUchar((PUCHAR)(a), (d))
#define _stat stat
#define inpw(a) VideoPortReadPortUshort((PUSHORT)(a))
#define outpw(a, d) VideoPortWritePortUshort((PUSHORT)(a), (d))
#define indw(a) VideoPortReadPortUlong((PULONG)(a))
#define outdw(a, d) VideoPortWritePortUlong((PULONG)(a), (d))
#define HANDLE word
#define WORD word
#endif /* #ifdef WINDOWS_NT */
#ifndef XGXENV_H /*
* Avoids multiple redefinitions, bind.h should always
* be placed above xgxenv.h
*/
/* data type */
typedef int bool; /* boolean */
typedef unsigned char byte; /* 8-bit datum */
typedef unsigned short word; /* 16-bit datum */
typedef short sword; /* 16-bit datum */
typedef unsigned long dword; /* 32-bit datum */
typedef long sdword; /* 32-bit datum */
#endif /* XGXENV_H */
/*** RGB color ***/
typedef dword mtxRGB; /* red 0-7, green 8-15, blue 16-23 */
/*** RGB color mask ***/
typedef dword mtxRGBMASK; /* red 0-7, green 8-15, blue 16-23 */
#define PUBLIC
#define PRIVATE static
#define FALSE 0
#define TRUE 1
#define DONT_CARE 0
#define ZOOMx1 0x00010001 /* no zoom */
#define SIZDW_BUFFER 8100 /* size of posting buffer */
#define mtxVGA 0
#define mtxADV_MODE 1
#define mtxRES_NTSC 2
#define mtxRES_PAL 3
#define mtxFAIL 0
#define mtxOK 1
#define MAXCLIPRECT 10
/*** MGA PRODUCT TYPE ***/
#define MGA_ULTIMA 1
#define MGA_ULTIMA_VAFC 2
#define MGA_ULTIMA_PLUS 3
#define MGA_ULTIMA_PLUS_200 4
#define MGA_IMPRESSION_PLUS 5
#define MGA_IMPRESSION_PLUS_200 6
#define MGA_IMPRESSION 7
#define MGA_IMPRESSION_PRO 8
#define MGA_IMPRESSION_LTE 9
typedef dword mtxCL; /* CL I.D. */
typedef dword mtxRC; /* RC I.D. */
typedef dword mtxLSDB; /* LSDB I.D. */
/*
* Cursor definition
*/
typedef struct {
word Width;
word Height;
word Pitch;
word Format;
dword *Data;
} PixMap;
/*
* CursorInfo
*/
typedef struct {
word MaxWidth;
word MaxHeight;
word MaxDepth;
word MaxColors;
word CurWidth;
word CurHeight;
sword cHotSX;
sword cHotSY;
sword HotSX;
sword HotSY;
} CursorInfo;
/*
* Offscreen memory
*/
typedef struct {
word Type; /* bit 0 : 0 = normal off screen memory */
/* 1 = z-buffer memory */
/* bit 1 : 0 = vram */
/* 1 = dram */
/* bit 2 : 0 = supports block mode */
/* 1 = no block mode */
/* bit 3 - 15 : reserved */
word XStart; /* x origin of off screen memory area in pixels */
word YStart; /* y origin of off screen memory area in pixels */
word Width; /* off screen width in pixels */
word Height; /* off screen height in pixels */
dword SafePlanes; /* off screen safe memory planes */
word ZXStart; /* precise z-buffer start offset in pixels on YStart. */
/* Valid only for z-buffer memory type offscreens ... */
/* useful for direct z-buffer access manipulations. */
} OffScrData;
/*
* HwModeData
*/
typedef struct {
word DispWidth; /* maximum display width in pixels */
word DispHeight; /* maximum display height in pixels */
byte DispType; /* bit 0 : 0 = non interlaced, 1 = interlaced */
/* bit 1 : 0 = normal operation, 1 = TV_MODE */
/* bit 2 : 0 = normal operation, 1 = LUT mode */
/* bit 3 : 0 = normal operation, 1 = 565 mode */
/* bit 4 : 0 = normal operation, 1 = DB mode */
/* bit 5 : 0 = normal operation, 1 = monitor limited */
/* bit 6 : 0 = normal operation, 1 = hw limited */
/* bit 7 : 0 = normal operation, 1 = not displayable */
byte ZBuffer; /* z-buffer available in this mode */
word PixWidth; /* pixel width */
dword NumColors; /* number of simultaneously displayable colors */
word FbPitch; /* frame buffer pitch in pixels */
byte NumOffScr; /* number of off screen areas */
OffScrData *pOffScr; /* pointer to off screen area information */
} HwModeData;
/*
* HwData
*/
typedef struct {
dword MapAddress; /* Memory map address */
dword ProductType;
/* 0 - 15 : Product platform */
/* 11xx: ISA bus */
/* 101x: VL bus */
/* 100x: MCA bus */
/* 011x: PCI bus */
/* 16 - 31: Product ID */
/* 0001: MGA_ULTIMA */
/* 0010: MGA_ULTIMA_VAFC */
/* 0011: MGA_ULTIMA_PLUS */
/* 0100: MGA_ULTIMA_PLUS_200 */
/* 0101: MGA_IMPRESSION_PLUS */
/* 0110: MGA_IMPRESSION_PLUS_200 */
/* 0111: MGA_IMPRESSION */
/* 1000: MGA_IMPRESSION_PRO */
/* 1001: MGA_IMPRESSION_LTE */
dword ProductRev; /* 4 bit revision codes as follows */
/* 0 - 3 : pcb revision */
/* 4 - 7 : Titan revision */
/* (0=TITAN, 1=ATLAS, 2=ATHENA) */
/* 8 - 11 : Dubic revision */
/* 12 : VideoPro board 0=absent 1=present */
/* 13 - 31 : all 1's indicating no other device
present */
dword ShellRev; /* Shell revision */
dword BindingRev; /* Binding revision */
byte VGAEnable; /* 0 = vga disabled, 1 = vga enabled */
byte Sync; /* relects the hardware straps */
byte Device8_16; /* relects the hardware straps */
byte PortCfg; /* 0-Disabled, 1-Mouse Port, 2-Laser Port */
byte PortIRQ; /* IRQ level number, -1 = interrupts disabled */
word MouseMap; /* Mouse I/O map base if PortCfg = Mouse Port */
/* else don't care */
byte MouseIRate; /* Mouse interrupt rate in Hz */
byte DacType; /* 0 = BT482 */
/* 1 = VIEWPOINT */
/* 2 = BT485 */
/* 7 = PX2085 */
/* 9 = TVP3026 */
/* 92 = SIERRA */
/* 93 = CHAMELEON */
HwModeData *pCurrentHwMode; /* Pointer to HwMode */
HwModeData *pCurrentDisplayMode; /* Pointer to display mode */
CursorInfo cursorInfo;
dword VramAvail; /* VRAM memory available on board in bytes */
dword DramAvail; /* DRAM memory available on board in bytes */
word CurrentOverScanX; /* Left overscan in pixels */
word CurrentOverScanY; /* Top overscan in pixels */
dword YDstOrg; /* Offset physique de la memoire */
dword CurrentZoomFactor;
dword CurrentXStart;
dword CurrentYStart;
#ifdef WINDOWS_NT
HwModeData *pHwMode; /* Pointer to HwMode */
UCHAR *BaseAddress; /* Board base address */
word ConfigSpace; /* Board config space */
UCHAR *ConfigSpaceAddress;
#endif
} HwData;
/*** Prototypes ***/
#ifndef _WATCOM_DLL32
HwData *mtxCheckHwAll(void);
bool mtxSelectHw(HwData *pHardware);
HwModeData *mtxGetHwModes(void);
word mtxGetRefreshRates(HwModeData *pHwModeSelect);
word ConvBitToFreq (word BitFreq);
bool mtxSelectHwMode(HwModeData *pHwMode);
bool mtxSetDisplayMode(HwModeData *pHwMode, dword Zoom);
void mtxSetDisplayStart(dword x, dword y);
dword mtxGetMgaSel(void);
void mtxGetInfo(HwModeData **_pCurHwMode, HwModeData **_pCurDispMode,
byte **_InitBuffer, byte **_VideoBuffer);
bool mtxSetLUT(word index, mtxRGB color);
void mtxClose(void);
#endif
/*----------------------------------------------------*/
/* XG3 products : support declarations for sxciio.h */
/*----------------------------------------------------*/
#define mtxPBWAIT 1 /* Wait flag */
typedef struct {
dword Left;
dword Top;
dword Right;
dword Bottom;
} mtxRect;
#define MAXCLIPRECT 10
typedef struct {
dword Count; /* number of clipping rectangles */
dword Reserved; /* reserved field, set to 0x0 */
dword Reserved1; /* origin of clip list, set to 0x0 */
dword Reserved2; /* origin of clip list, set to 0x0 */
mtxRect Rects[MAXCLIPRECT]; /* max. clip rects */
mtxRect Bounds; /* bounding rectangle */
} mtxClipList;
/*** Prototypes ***/
#ifndef _WATCOM_DLL32
dword mtxAllocCL (word Nb_Rect);
dword mtxAllocLSDB (word Nb_Light);
dword mtxAllocRC (dword *Reserved);
dword *mtxAllocBuffer (dword Nb_dword);
bool mtxFreeBuffer (dword *ptr);
bool mtxFreeCL (dword ptr);
bool mtxFreeLSDB (dword ptr);
bool mtxFreeRC (dword ptr);
dword mtxGetBlockSize (void);
bool mtxPostBuffer (dword *ptr, dword length, dword flags);
bool mtxSyncBuffer (dword *ptr);
bool mtxSetCL(dword RCid, dword CLid, mtxClipList *CL);
void mtxSetRC (dword RCid);
bool mtxCursorSetShape(PixMap *);
void mtxCursorSetColors(mtxRGB, mtxRGB, mtxRGB, mtxRGB);
void mtxCursorEnable(word);
void mtxCursorSetHotSpot(word, word);
void mtxCursorMove(word, word);
CursorInfo *mtxCursorGetInfo();
#endif
/*----------------------------------------------------*/
/* XG3 products : support declarations for graphics.h */
/*----------------------------------------------------*/
#define mtxRES_1280 0 /* 1280 x 1024 Resolution */
#define mtxRES_1024 1 /* 1024 x 768 Resolution */
#define mtxRES_VIDEO 2 /* 640 x 480 Interlaced Resolution */
#define mtxRES_MAX -1 /* Find largest resolution */
#define NTSC_UNDER 1 /* screen type */
#define PAL_UNDER 2
#define NTSC_OVER 3
#define PAL_OVER 4
#define mtxPASSTHRU 0 /* Passthru mode ; mtxPASSTHRU = mtxVGA */
#define mtxADV_MODE 1 /* Advanced mode */
/*** Raster operation ***/
typedef dword mtxROP;
#define mtxCLEAR ((mtxROP)0x00000000) /* 0 */
#define mtxNOR ((mtxROP)0x11111111) /* NOT src AND NOT dst */
#define mtxANDINVERTED ((mtxROP)0x22222222) /* NOT src AND dst */
#define mtxREPLACEINVERTED ((mtxROP)0x33333333) /* NOT src */
#define mtxANDREVERSE ((mtxROP)0x44444444) /* src AND NOT dst */
#define mtxINVERT ((mtxROP)0x55555555) /* NOT dst */
#define mtxXOR ((mtxROP)0x66666666) /* src XOR dst */
#define mtxNAND ((mtxROP)0x77777777) /* NOT src OR NOT dst */
#define mtxAND ((mtxROP)0x88888888) /* src AND dst */
#define mtxEQUIV ((mtxROP)0x99999999) /* NOT src XOR dst */
#define mtxNOOP ((mtxROP)0xAAAAAAAA) /* dst */
#define mtxORINVERTED ((mtxROP)0xBBBBBBBB) /* NOT src OR dst */
#define mtxREPLACE ((mtxROP)0xCCCCCCCC) /* src */
#define mtxORREVERSE ((mtxROP)0xDDDDDDDD) /* src OR NOT dst */
#define mtxOR ((mtxROP)0xEEEEEEEE) /* src OR dst */
#define mtxSET ((mtxROP)0xFFFFFFFF) /* 1 */
typedef struct { /* Configuration structure */
word Width; /* screen width */
word Height; /* screen height */
dword Colors; /* # of colors */
word PhysPixelSize; /* number of bits needed per pixel */
byte DacSize; /* dac size */
byte Luts; /* # of lut on board */
word FbWidth; /* frame buffer width */
word FbHeight; /* frame buffer height */
word FbPitch; /* size of scan line */
word OffScreenX; /* offscreen x location */
word OffScreenY; /* offscreen y location */
word OffScreenWidth; /* offscreen width */
word OffScreenHeight; /* offscreen height */
dword OffScreenPlanes; /* safe planes to write to mask */
byte Name[32]; /* Board name */
byte BindingId[32]; /* binding id */
byte ShellId[32]; /* shell id */
} mtxCONFIG;
/*** prototypes ***/
#ifndef _WATCOM_DLL32
#ifndef __DDK_SRC__ /* - - - - - - - - - - - - - - - - - - - - - - - - - - */
word mtxGetVideoMode (void);
void mtxSetFgColor (mtxRGB color);
mtxRGB mtxGetFgColor (void);
void mtxSetOp (dword Op);
dword mtxGetOp (void);
void mtxScLine (sword x1, sword y1, sword x2, sword y2);
void mtxScPixel (sword s, sword y);
bool mtxScClip (word left, word top, word right, word bottom);
void mtxScFilledRect (sword left, sword top, sword right, sword bottom);
bool mtxCheckHw (void);
bool mtxInit(bool dualscreen,short resolution_id,bool clear_flag, mtxCONFIG *config);
bool mtxReset (void);
void mtxSetVideoMode (word mode);
extern void mtxMemScBitBlt(word dstx, word dsty, word width, word height,
word plane, dword *src);
extern void mtxScMemBitBlt(word srcx, word srcy, word width, word height,
word plane, dword *dst);
extern void mtxScScBitBlt (sword srcx, sword srcy, sword dstx, sword dsty,
word width, word height, sword plane);
#else /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
/* this will be cleaned up, quick and dirty solution for now */
void mtxSetVideoMode (word mode);
word mtxGetVideoMode (void);
#ifndef GRPROTO_H
void mtxSetFgColor (mtxRGB color);
mtxRGB mtxGetFgColor (void);
void mtxSetOp (dword Op);
dword mtxGetOp (void);
void mtxScLine (sword x1, sword y1, sword x2, sword y2);
void mtxScPixel (sword s, sword y);
/*** bool mtxScClip (word left, word top, word right, word bottom); ***/
/*** for DDK compatibility ***/
void mtxSetClipRect (
word xLeft, word yTop,
word xRight, word yBottom
);
/*** macro for mtxScClip calls to mtxSetClipRect and evaluates to mtxOK ***/
#define mtxScClip( x, t, y, b ) ( \
mtxSetClipRect( (x), (t), (y), (b) ), \
mtxOK \
)
/*** NOTE: underscores will be removed in final DDK version from common
*** SDK and DDK function names
***/
#define _mtxScClip( x, t, y, b ) ( \
mtxSetClipRect( (x), (t), (y), (b) ), \
mtxOK \
)
void mtxScFilledRect (sword left, sword top, sword right, sword bottom);
#endif /* GRPROTO_H */
bool mtxCheckHw (void);
bool mtxInit(bool dualscreen,short resolution_id,bool clear_flag, mtxCONFIG *config);
bool mtxReset (void);
#ifndef BLTPROTO_H
extern void mtxMemScBitBlt(word dstx, word dsty, word width, word height,
word plane, dword *src);
extern void mtxScMemBitBlt(word srcx, word srcy, word width, word height,
word plane, dword *dst);
extern void mtxScScBitBlt (sword srcx, sword srcy, sword dstx, sword dsty,
word width, word height, sword plane);
#endif /* BLTPROTO_H */
#endif /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#endif
#endif /* BIND_H */