#ifndef SAVAGE_VGAHWMMIO_H
#define SAVAGE_VGAHWMMIO_H
#include "xf86_ansic.h"
#include "compiler.h"
#include "vgaHW.h"
#include "xf86.h"
#include "xf86Resources.h"
#include "xf86Pci.h"
#include "xf86PciInfo.h"
#include "xf86_OSproc.h"
#include "xf86Cursor.h"
#include "mipointer.h"
#include "micmap.h"
#include "fb.h"
#include "xf86cmap.h"
#include "vbe.h"
#include "xaa.h"
#include "xf86xv.h"
#include "savage_regs.h"
#define VGAIN8(addr) MMIO_IN8(psav->MapBase+0x8000, addr)
#define VGAIN16(addr) MMIO_IN16(psav->MapBase+0x8000, addr)
#define VGAIN(addr) MMIO_IN32(psav->MapBase+0x8000, addr)
#define VGAOUT8(addr,val) MMIO_OUT8(psav->MapBase+0x8000, addr, val)
#define VGAOUT16(addr,val) MMIO_OUT16(psav->MapBase+0x8000, addr, val)
#define VGAOUT(addr,val) MMIO_OUT32(psav->MapBase+0x8000, addr, val)
#define INREG(addr) MMIO_IN32(psav->MapBase, addr)
#define OUTREG(addr,val) MMIO_OUT32(psav->MapBase, addr, val)
#define INREG16(addr) MMIO_IN16(psav->MapBase, addr)
#define OUTREG16(addr,val) MMIO_OUT16(psav->MapBase, addr, val)
#define SAVAGE_CRT_ON 1
#define SAVAGE_LCD_ON 2
#define SAVAGE_TV_ON 4
typedef struct _S3VMODEENTRY {
unsigned short Width;
unsigned short Height;
unsigned short VesaMode;
unsigned char RefreshCount;
unsigned char * RefreshRate;
} SavageModeEntry, *SavageModeEntryPtr;
typedef struct _S3VMODETABLE {
unsigned short NumModes;
SavageModeEntry Modes[1];
} SavageModeTableRec, *SavageModeTablePtr;
typedef struct {
unsigned int mode, refresh;
unsigned char SR08, SR0E, SR0F;
unsigned char SR10, SR11, SR12, SR13, SR15, SR18, SR1B, SR29, SR30;
unsigned char SR54[8];
unsigned char Clock;
unsigned char CR31, CR32, CR33, CR34, CR36, CR3A, CR3B, CR3C;
unsigned char CR40, CR41, CR42, CR43, CR45;
unsigned char CR50, CR51, CR53, CR55, CR58, CR5B, CR5D, CR5E;
unsigned char CR60, CR63, CR65, CR66, CR67, CR68, CR69, CR6D, CR6F;
unsigned char CR86, CR88;
unsigned char CR90, CR91, CRB0;
unsigned int STREAMS[22];
unsigned int MMPR0, MMPR1, MMPR2, MMPR3;
} SavageRegRec, *SavageRegPtr;
typedef struct _Savage {
SavageRegRec SavedReg;
SavageRegRec ModeReg;
xf86CursorInfoPtr CursorInfoRec;
Bool ModeStructInit;
Bool NeedSTREAMS;
Bool STREAMSRunning;
int Bpp, Bpl, ScissB;
unsigned PlaneMask;
I2CBusPtr I2C;
int videoRambytes;
int videoRamKbytes;
int MemOffScreen;
CARD32 CursorKByte;
unsigned long FrameBufferBase;
unsigned long MmioBase;
unsigned long ShadowPhysical;
unsigned char* MapBase;
unsigned char* BciMem;
unsigned char* MapBaseDense;
unsigned char* FBBase;
unsigned char* FBStart;
CARD32 volatile * ShadowVirtual;
Bool PrimaryVidMapped;
int dacSpeedBpp;
int minClock, maxClock;
int HorizScaleFactor;
int MCLK, REFCLK, LCDclk;
double refclk_fact;
int GEResetCnt;
OptionInfoPtr Options;
Bool ShowCache;
Bool pci_burst;
Bool NoPCIRetry;
Bool fifo_conservative;
Bool fifo_moderate;
Bool fifo_aggressive;
Bool hwcursor;
Bool hwc_on;
Bool NoAccel;
Bool shadowFB;
Bool UseBIOS;
int rotate;
double LCDClock;
Bool ShadowStatus;
Bool CrtOnly;
Bool TvOn;
Bool PAL;
Bool ForceInit;
int iDevInfo;
int iDevInfoPrim;
int PanelX;
int PanelY;
int iResX;
int iResY;
int XFactor;
int YFactor;
int displayXoffset;
int displayYoffset;
int XExp1;
int XExp2;
int YExp1;
int YExp2;
int cxScreen;
int TVSizeX;
int TVSizeY;
CloseScreenProcPtr CloseScreen;
pciVideoPtr PciInfo;
PCITAG PciTag;
int Chipset;
int ChipId;
int ChipRev;
vbeInfoPtr pVbe;
int EntityIndex;
int ShadowCounter;
int vgaIOBase;
int (*WaitQueue)(struct _Savage *, int);
int (*WaitIdle)(struct _Savage *);
int (*WaitIdleEmpty)(struct _Savage *);
unsigned char * ShadowPtr;
int ShadowPitch;
void (*PointerMoved)(int index, int x, int y);
XAAInfoRecPtr AccelInfoRec;
xRectangle Rect;
unsigned int SavedBciCmd;
unsigned int SavedFgColor;
unsigned int SavedBgColor;
unsigned int SavedSbdOffset;
unsigned int SavedSbd;
xf86Int10InfoPtr pInt10;
SavageModeTablePtr ModeTable;
unsigned long cobIndex;
unsigned long cobSize;
unsigned long cobOffset;
int numDGAModes;
DGAModePtr DGAModes;
Bool DGAactive;
int DGAViewportStatus;
unsigned int videoFlags;
unsigned int blendBase;
int videoFourCC;
XF86VideoAdaptorPtr adaptor;
int VideoZoomMax;
int dwBCIWait2DIdle;
XF86OffscreenImagePtr offscreenImages;
} SavageRec, *SavagePtr;
#define VF_STREAMS_ON 0x0001
#define SAVPTR(p) ((SavagePtr)((p)->driverPrivate))
#define gpScrn savagegpScrn
#define myOUTREG savageOUTREG
#define readdw savagereaddw
#define readfb savagereadfb
#define writedw savagewritedw
#define writefb savagewritefb
#define writescan savagewritescan
extern void SavageCommonCalcClock(long freq, int min_m, int min_n1,
int max_n1, int min_n2, int max_n2,
long freq_min, long freq_max,
unsigned char *mdiv, unsigned char *ndiv);
void SavageAdjustFrame(int scrnIndex, int y, int x, int flags);
Bool SavageSwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
Bool SavageHWCursorInit(ScreenPtr pScreen);
void SavageShowCursor(ScrnInfoPtr);
void SavageHideCursor(ScrnInfoPtr);
Bool SavageInitAccel(ScreenPtr);
void SavageInitialize2DEngine(ScrnInfoPtr);
void SavageSetGBD(ScrnInfoPtr);
void SavageAccelSync(ScrnInfoPtr);
Bool SavageI2CInit(ScrnInfoPtr pScrn);
void SavagePointerMoved(int index, int x, int y);
void SavageRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
void SavageRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
void SavageRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
void SavageRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
void SavageRefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
void SavageSetTextMode( SavagePtr psav );
void SavageSetVESAMode( SavagePtr psav, int n, int Refresh );
void SavageFreeBIOSModeTable( SavagePtr psav, SavageModeTablePtr* ppTable );
SavageModeTablePtr SavageGetBIOSModeTable( SavagePtr psav, int iDepth );
unsigned short SavageGetBIOSModes(
SavagePtr psav,
int iDepth,
SavageModeEntryPtr s3vModeTable );
void SavageInitVideo( ScreenPtr pScreen );
#endif