#ifndef _I740_H_
#define _I740_H_
#include "xf86PciInfo.h"
#include "xf86Pci.h"
#include "i740_reg.h"
#include "i740_macros.h"
#include "xaa.h"
#include "xf86Cursor.h"
#define INREG8(addr) *(volatile CARD8 *)(pI740->MMIOBase + (addr))
#define INREG16(addr) *(volatile CARD16 *)(pI740->MMIOBase + (addr))
#define INREG(addr) *(volatile CARD32 *)(pI740->MMIOBase + (addr))
#define OUTREG8(addr, val) *(volatile CARD8 *)(pI740->MMIOBase + (addr)) = (val)
#define OUTREG16(addr, val) *(volatile CARD16 *)(pI740->MMIOBase + (addr)) = (val)
#define OUTREG(addr, val) *(volatile CARD32 *)(pI740->MMIOBase + (addr)) = (val)
typedef struct _I740Rec *I740Ptr;
typedef void (*I740WriteIndexedByteFunc)(I740Ptr pI740, int addr,
unsigned char index, char value);
typedef char (*I740ReadIndexedByteFunc)(I740Ptr pI740, int addr,
unsigned char index);
typedef void (*I740WriteByteFunc)(I740Ptr pI740, int addr, unsigned char value);
typedef char (*I740ReadByteFunc)(I740Ptr pI740, int addr);
typedef struct {
unsigned char DisplayControl;
unsigned char PixelPipeCfg0;
unsigned char PixelPipeCfg1;
unsigned char PixelPipeCfg2;
unsigned char VideoClk2_M;
unsigned char VideoClk2_N;
unsigned char VideoClk2_MN_MSBs;
unsigned char VideoClk2_DivisorSel;
unsigned char PLLControl;
unsigned char AddressMapping;
unsigned char IOControl;
unsigned char BitBLTControl;
unsigned char ExtVertTotal;
unsigned char ExtVertDispEnd;
unsigned char ExtVertSyncStart;
unsigned char ExtVertBlankStart;
unsigned char ExtHorizTotal;
unsigned char ExtHorizBlank;
unsigned char ExtOffset;
unsigned char InterlaceControl;
unsigned int LMI_FIFO_Watermark;
} I740RegRec, *I740RegPtr;
typedef struct _I740Rec {
unsigned char *MMIOBase;
unsigned char *FbBase;
long FbMapSize;
int cpp;
int MaxClock;
int CursorStart;
int Chipset;
unsigned long LinearAddr;
unsigned long MMIOAddr;
EntityInfoPtr pEnt;
pciVideoPtr PciInfo;
PCITAG PciTag;
int HasSGRAM;
I740RegRec SavedReg;
I740RegRec ModeReg;
XAAInfoRecPtr AccelInfoRec;
xf86CursorInfoPtr CursorInfoRec;
FBAreaPtr CursorData;
CloseScreenProcPtr CloseScreen;
GFX2DOPREG_BLTER_FULL_LOAD bltcmd;
Bool usePIO;
I740WriteIndexedByteFunc writeControl;
I740ReadIndexedByteFunc readControl;
I740WriteByteFunc writeStandard;
I740ReadByteFunc readStandard;
OptionInfoPtr Options;
DGAModePtr DGAModes;
int numDGAModes;
Bool DGAactive;
int DGAViewportStatus;
BoxRec FbMemBox;
I2CBusPtr rc_i2c;
XF86VideoAdaptorPtr adaptor;
unsigned long OverlayStart;
unsigned long OverlayPhysical;
int colorKey;
ScreenBlockHandlerProcPtr BlockHandler;
int ov_offset_x,ov_offset_y;
Bool usevgacompat;
} I740Rec;
#define I740PTR(p) ((I740Ptr)((p)->driverPrivate))
extern Bool I740CursorInit(ScreenPtr pScreen);
extern Bool I740AccelInit(ScreenPtr pScreen);
void I740SetPIOAccess(I740Ptr pI740);
void I740SetMMIOAccess(I740Ptr pI740);
void I740InitVideo(ScreenPtr pScreen);
Bool I740SwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
void I740AdjustFrame(int scrnIndex, int x, int y, int flags);
Bool I740_I2CInit(ScrnInfoPtr pScrn);
#define minb(p) MMIO_IN8(pI740->MMIOBase, (p))
#define moutb(p,v) MMIO_OUT8(pI740->MMIOBase, (p),(v))
#endif