#ifndef _CYRIX_H_
#define _CYRIX_H_
#include "xaa.h"
#include "xf86Cursor.h"
#include "vgaHW.h"
#define CYRIXPTR(p) ((CYRIXPrvPtr)((p)->driverPrivate))
typedef struct {
unsigned char cyrixRegs3x4[0x100];
unsigned char cyrixRegs3CE[0x100];
unsigned char cyrixRegs3C4[0x100];
unsigned char cyrixRegsDAC[0x01];
unsigned char cyrixRegsClock[0x03];
unsigned char DacRegs[0x300];
unsigned int Colormap[0x100];
} CYRIXRegRec, *CYRIXRegPtr;
typedef struct {
unsigned char VerticalTimingExtension;
unsigned char ExtendedAddressControl;
unsigned char ExtendedOffset;
unsigned char Offset;
unsigned char ExtendedColorControl;
unsigned char DisplayCompression;
unsigned char DriverControl;
unsigned char DACControl;
unsigned char ClockControl;
unsigned char CrtClockFrequency;
unsigned char CrtClockFrequencyFraction;
unsigned char RefreshRate;
CARD32 DcGeneralCfg;
CARD32 DcCursStOffset;
CARD32 DcCbStOffset;
CARD32 DcLineDelta;
CARD32 DcBufSize;
CARD32 DcCursorX;
CARD32 DcCursorY;
CARD32 DcCursorColor;
CARD32 GpBlitStatus;
char cursorPattern[256];
} prevExt;
typedef struct {
CARD32 IOAccelAddress;
CARD32 FbAddress;
char* GXregisters;
int CYRIXcursorAddress;
int CYRIXbltBuf0Address;
int CYRIXbltBuf1Address;
int CYRIXbltBufSize;
EntityInfoPtr pEnt;
unsigned char * FbBase;
pciVideoPtr PciInfo;
XAAInfoRecPtr AccelInfoRec;
xf86CursorInfoPtr CursorInfoRec;
CloseScreenProcPtr CloseScreen;
int HwBpp;
int MinClock;
int MaxClock;
int Chipset;
int ChipRev;
int RamDac;
long FbMapSize;
short EngineOperation;
CYRIXRegRec SavedReg;
CYRIXRegRec ModeReg;
vgaHWRec std;
prevExt PrevExt;
Bool HWCursor;
Bool NoAccel;
Bool NoCompress;
Bool ShadowFB;
unsigned char * ShadowPtr;
int ShadowPitch;
int Rotate;
void (*PointerMoved)(int index, int x, int y);
OptionInfoPtr Options;
int bltBufWidth;
int blitMode;
int vectorMode;
int transMode;
int copyXdir;
int setBlitModeOnSync;
} CYRIXPrivate, *CYRIXPrvPtr;
typedef struct {
vgaHWRec std;
prevExt ext;
} CYRIXRec, *CYRIXPtr;
extern void Cyrix1bppColorMap(ScrnInfoPtr pScrn);
extern int CyrixHWCursor(ScreenPtr pScr);
extern int CyrixInit(ScrnInfoPtr pScrn, DisplayModePtr mode);
extern void CyrixRestore(ScrnInfoPtr pScrn, CYRIXRegPtr cyrixReg);
extern void * CyrixSave(ScrnInfoPtr pScrn, CYRIXRegPtr cyrixReg);
extern void CYRIXRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
extern void CYRIXPointerMoved(int index, int x, int y);
extern void CYRIXRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
extern void CYRIXRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
extern void CYRIXsetBlitBuffers(void);
extern void CYRIXsetBlitBuffersOnOldChip(void);
#define GX_REG(a) (*(volatile CARD32*)(pCyrix->GXregisters + (a)))
extern void CYRIXAccelInit(ScreenPtr);
#define CYRIXsetupSync() \
while (GX_REG(GP_BLIT_STATUS) & BS_BLIT_PENDING)
#define CYRIXsetSrcXY(x, y) \
GX_REG(GP_SRC_XCOOR) = (((y) << 16) | (x))
#define CYRIXsetDstXY(x, y) \
GX_REG(GP_DST_XCOOR) = (((y) << 16) | (x))
#define CYRIXsetWH(w, h) \
GX_REG(GP_WIDTH) = (((h) << 16) | (w))
#define CYRIXsetSourceColors01(p, col0, col1) \
CYRIXsetColors01((p), GP_SRC_COLOR_0, (col0), (col1))
#define CYRIXsetPatColors01(p, col0, col1) \
CYRIXsetColors01((p), GP_PAT_COLOR_0, (col0), (col1))
#define CYRIXsetPatColors23(p, col2, col3) \
CYRIXsetColors01((p), GP_PAT_COLOR_2, (col2), (col3))
#define CYRIXsetPatData(data0, data1) \
GX_REG(GP_PAT_DATA_0) = (data0); \
GX_REG(GP_PAT_DATA_1) = (data1)
#define CYRIXsetPatMode(xrop, pm) \
GX_REG(GP_RASTER_MODE) = ((pm) | windowsROPpatMask[(xrop)])
#define CYRIXsetPatModeX(xrop, pm) \
GX_REG(GP_RASTER_MODE) = ((pm) | windowsROPsrcMask[(xrop)])
#define CYRIXsetPatModeTrans(pm) \
GX_REG(GP_RASTER_MODE) = ((pm) | RM_CLIP_ENABLE | 0xC6);
#define CYRIXsetBlitMode() \
GX_REG(GP_BLIT_MODE) = (pCyrix->blitMode)
#define CYRIXsetVectorMode() \
GX_REG(GP_VECTOR_MODE) = (pCyrix->vectorMode)
#define IfDest(rop, planemask, val) \
(( (((rop) & 0x5) ^ (((rop) & 0xA) >> 1)) \
|| (~((planemask) & 0xFF)) \
) ? (val) : 0)
#define GX_IOPORT_INDEX 0x22
#define GX_IOPORT_DATA 0x23
#define GX_IOIDX_PCR 0x20
#define GX_IOIDX_CCR1 0xC1
#define GX_IOIDX_CCR2 0xC2
#define GX_IOIDX_CCR3 0xC3
#define GX_IOIDX_CCR4 0xE8
#define GX_IOIDX_DIR0 0xFE
#define GX_IOIDX_DIR1 0xFF
#define GX_IOIDX_SMAR0 0xCD
#define GX_IOIDX_SMAR1 0xCE
#define GX_IOIDX_SMAR2 0xCF
#define GX_IOIDX_SMHR0 0xB0
#define GX_IOIDX_SMHR1 0xB1
#define GX_IOIDX_SMHR2 0xB2
#define GX_IOIDX_SMHR3 0xB3
#define GX_IOIDX_GCR 0xB8
#define GX_IOIDX_VGACTL 0xB9
#define GX_IOIDX_VGAM0 0xBA
#define GX_IOIDX_VGAM1 0xBB
#define GX_IOIDX_VGAM2 0xBC
#define GX_IOIDX_VGAM3 0xBD
#define BC_DRAM_TOP 0x8000
#define BC_XMAP_1 0x8004
#define BC_XMAP_2 0x8008
#define BC_XMAP_3 0x800C
#define GP_DST_XCOOR 0x8100
#define GP_DST_YCOOR 0x8102
#define GP_WIDTH 0x8104
#define GP_HEIGHT 0x8106
#define GP_SRC_XCOOR 0x8108
#define GP_SRC_YCOOR 0x810A
#define GP_VECTOR_LENGTH 0x8104
#define GP_INIT_ERROR 0x8106
#define GP_AXIAL_ERROR 0x8108
#define GP_DIAG_ERROR 0x810A
#define GP_SRC_COLOR_0 0x810C
#define GP_SRC_COLOR_1 0x810E
#define GP_PAT_COLOR_0 0x8110
#define GP_PAT_COLOR_1 0x8112
#define GP_PAT_COLOR_2 0x8114
#define GP_PAT_COLOR_3 0x8116
#define GP_PAT_DATA_0 0x8120
#define GP_PAT_DATA_1 0x8124
#define GP_PAT_DATA_2 0x8128
#define GP_PAT_DATA_3 0x812C
#define GP_RASTER_MODE 0x8200
#define GP_VECTOR_MODE 0x8204
#define GP_BLIT_MODE 0x8208
#define GP_BLIT_STATUS 0x820C
#define VM_X_MAJOR 0x0000
#define VM_Y_MAJOR 0x0001
#define VM_MAJOR_INC 0x0002
#define VM_MINOR_INC 0x0004
#define VM_READ_DST_FB 0x0008
#define RM_PAT_DISABLE 0x0000
#define RM_PAT_MONO 0x0100
#define RM_PAT_DITHER 0x0200
#define RM_PAT_COLOR 0x0300
#define RM_PAT_MASK 0x0300
#define RM_PAT_TRANSPARENT 0x0400
#define RM_SRC_TRANSPARENT 0x0800
#define RM_CLIP_ENABLE 0x1000
#define BS_BLIT_BUSY 0x0001
#define BS_PIPELINE_BUSY 0x0002
#define BS_BLIT_PENDING 0x0004
#define BC_FLUSH 0x0080
#define BC_8BPP 0x0000
#define BC_16BPP 0x0100
#define BC_FB_WIDTH_1024 0x0000
#define BC_FB_WIDTH_2048 0x0200
#define BM_READ_SRC_NONE 0x0000
#define BM_READ_SRC_FB 0x0001
#define BM_READ_SRC_BB0 0x0002
#define BM_READ_SRC_BB1 0x0003
#define BM_READ_SRC_MASK 0x0003
#define BM_READ_DST_NONE 0x0000
#define BM_READ_DST_BB0 0x0008
#define BM_READ_DST_BB1 0x000C
#define BM_READ_DST_FB0 0x0010
#define BM_READ_DST_FB1 0x0014
#define BM_READ_DST_MASK 0x001C
#define BM_WRITE_FB 0x0000
#define BM_WRITE_MEM 0x0020
#define BM_WRITE_MASK 0x0020
#define BM_SOURCE_COLOR 0x0000
#define BM_SOURCE_EXPAND 0x0040
#define BM_SOURCE_TEXT 0x00C0
#define BM_SOURCE_MASK 0x00C0
#define BM_REVERSE_Y 0x0100
#define DC_UNLOCK 0x8300
#define DC_GENERAL_CFG 0x8304
#define DC_TIMING_CFG 0x8308
#define DC_OUTPUT_CFG 0x830C
#define DC_FB_ST_OFFSET 0x8310
#define DC_CB_ST_OFFSET 0x8314
#define DC_CURS_ST_OFFSET 0x8318
#define DC_ICON_ST_OFFSET 0x831C
#define DC_VID_ST_OFFSET 0x8320
#define DC_LINE_DELTA 0x8324
#define DC_BUF_SIZE 0x8328
#define DC_H_TIMING_1 0x8330
#define DC_H_TIMING_2 0x8334
#define DC_H_TIMING_3 0x8338
#define DC_FP_H_TIMING 0x833C
#define DC_V_TIMING_1 0x8340
#define DC_V_TIMING_2 0x8344
#define DC_V_TIMING_3 0x8348
#define DC_FP_V_TIMING 0x834C
#define DC_CURSOR_X 0x8350
#define DC_ICON_X 0x8354
#define DC_V_LINE_CNT 0x8354
#define DC_CURSOR_Y 0x8358
#define DC_ICON_Y 0x835C
#define DC_SS_LINE_COMPARE 0x835C
#define DC_CURSOR_COLOR 0x8360
#define DC_ICON_COLOR 0x8364
#define DC_BORDER_COLOR 0x8368
#define DC_PAL_ADDRESS 0x8370
#define DC_PAL_DATA 0x8374
#define PAL_CURSOR_COLOR_0 0x100
#define PAL_CURSOR_COLOR_1 0x101
#define PAL_ICON_COLOR_0 0x102
#define PAL_ICON_COLOR_1 0x103
#define PAL_OVERSCAN_COLOR 0x104
#define DC_UNLOCK_VALUE 0x00004758
#define DC_GCFG_DFLE 0x00000001
#define DC_GCFG_CURE 0x00000002
#define DC_GCFG_ICNE 0x00000004
#define DC_GCFG_PLNO 0x00000004
#define DC_GCFG_VIDE 0x00000008
#define DC_GCFG_PPC 0x00000008
#define DC_GCFG_CMPE 0x00000010
#define DC_GCFG_DECE 0x00000020
#define DC_GCFG_DCLK_MASK 0x000000C0
#define DC_GCFG_DCLK_POS 6
#define DC_GCFG_DFHPSL_MASK 0x00000F00
#define DC_GCFG_DFHPSL_POS 8
#define DC_GCFG_DFHPEL_MASK 0x0000F000
#define DC_GCFG_DFHPEL_POS 12
#define DC_GCFG_CIM_MASK 0x00030000
#define DC_GCFG_CIM_POS 16
#define DC_GCFG_FDTY 0x00040000
#define DC_GCFG_RTPM 0x00080000
#define DC_GCFG_DAC_RS_MASK 0x00700000
#define DC_GCFG_DAC_RS_POS 20
#define DC_GCFG_CKWR 0x00800000
#define DC_GCFG_LDBL 0x01000000
#define DC_GCFG_DIAG 0x02000000
#define DC_GCFG_CH4S 0x04000000
#define DC_GCFG_SSLC 0x08000000
#define DC_GCFG_FBLC 0x10000000
#define DC_GCFG_DFCK 0x20000000
#define DC_GCFG_DPCK 0x40000000
#define DC_GCFG_DDCK 0x80000000
#define DC_TCFG_FPPE 0x00000001
#define DC_TCFG_HSYE 0x00000002
#define DC_TCFG_VSYE 0x00000004
#define DC_TCFG_BLKE 0x00000008
#define DC_TCFG_DDCK 0x00000010
#define DC_TCFG_TGEN 0x00000020
#define DC_TCFG_VIEN 0x00000040
#define DC_TCFG_BLNK 0x00000080
#define DC_TCFG_CHSP 0x00000100
#define DC_TCFG_CVSP 0x00000200
#define DC_TCFG_FHSP 0x00000400
#define DC_TCFG_FVSP 0x00000800
#define DC_TCFG_FCEN 0x00001000
#define DC_TCFG_CDCE 0x00002000
#define DC_TCFG_PLNR 0x00002000
#define DC_TCFG_INTL 0x00004000
#define DC_TCFG_PXDB 0x00008000
#define DC_TCFG_BKRT 0x00010000
#define DC_TCFG_PSD_MASK 0x000E0000
#define DC_TCFG_PSD_POS 17
#define DC_TCFG_DDCI 0x08000000
#define DC_TCFG_SENS 0x10000000
#define DC_TCFG_DNA 0x20000000
#define DC_TCFG_VNA 0x40000000
#define DC_TCFG_VINT 0x80000000
#define DC_OCFG_8BPP 0x00000001
#define DC_OCFG_555 0x00000002
#define DC_OCFG_PCKE 0x00000004
#define DC_OCFG_FRME 0x00000008
#define DC_OCFG_DITE 0x00000010
#define DC_OCFG_2PXE 0x00000020
#define DC_OCFG_2XCK 0x00000040
#define DC_OCFG_2IND 0x00000080
#define DC_OCFG_34ADD 0x00000100
#define DC_OCFG_FRMS 0x00000200
#define DC_OCFG_CKSL 0x00000400
#define DC_OCFG_PRMP 0x00000800
#define DC_OCFG_PDEL 0x00001000
#define DC_OCFG_PDEH 0x00002000
#define DC_OCFG_CFRW 0x00004000
#define DC_OCFG_DIAG 0x00008000
#define MC_GBASE_ADD 0x8414
#define MC_DR_ADD 0x8418
#define MC_DR_ACC 0x841C
#define MC_RAMDAC_ACC 0x8420
#define BB0_BASE 0xFFFFFF0C
#define BB1_BASE 0xFFFFFF1C
#define CrtcExtendedRegisterLock 0x30
#define CrtcGraphicsMemorySize 0x3E
#define CrtcModeSwitchControl 0x3F
#define CrtcVerticalTimingExtension 0x41
#define CrtcExtendedAddressControl 0x43
#define CrtcExtendedStartAddress 0x44
#define CrtcExtendedOffset 0x45
#define CrtcExtendedColorControl 0x46
#define CrtcWriteMemoryAperture 0x47
#define CrtcReadMemoryAperture 0x48
#define CrtcDisplayCompression 0x49
#define CrtcDriverControl 0x4A
#define CrtcDACControl 0x4B
#define CrtcClockControl 0x4C
#define CrtcClockFrequency 0x4D
#define CrtcClockFrequencyFraction 0x4E
#define CrtcRefreshRate 0x4F
#define EAC_PIXEL_DOUBLE 0x04
#define EAC_DIRECT_FRAME_BUFFER 0x02
#define EAC_PACKED_CHAIN4 0x01
#define ECC_32BPP 0x04
#define ECC_555_FORMAT 0x02
#define ECC_565_FORMAT 0x00
#define ECC_16BPP 0x01
#define ECC_8BPP 0x00
#define DRVCT_DISPLAY_DRIVER_ACTIVE 0x01
#define DACCT_HALF_PIXEL_PER_CLOCK 0x08
#define DACCT_TWO_PIXELS_PER_CLOCK 0x04
#define DACCT_ENABLE_16BIT_BUS 0x02
#define CLKCT_EXT_CLOCK_MODE 0x80
#define CLKCT_HALVE_DOT_CLOCK 0x20
#define CLKCT_DOUBLE_DOT_CLOCK 0x10
#define CLKCT_GENDAC_ICS5342 0x00
#define CLKCT_GENDAC_MASK 0x07
#endif