#ifndef FFB_H
#define FFB_H
#include "xf86.h"
#include "xf86_OSproc.h"
#include "xf86_ansic.h"
#include "xf86RamDac.h"
#include "Xmd.h"
#include "gcstruct.h"
#include "windowstr.h"
#include "ffb_regs.h"
#include "xf86sbusBus.h"
#include "ffb_dac.h"
#ifdef XF86DRI
#include "xf86drm.h"
#include "ffb_drishare.h"
#endif
#ifndef DPMS_SERVER
#define DPMS_SERVER
#endif
#include "extensions/dpms.h"
#define FFB_SFB8R_VOFF 0x00000000
#define FFB_SFB8G_VOFF 0x00400000
#define FFB_SFB8B_VOFF 0x00800000
#define FFB_SFB8X_VOFF 0x00c00000
#define FFB_SFB32_VOFF 0x01000000
#define FFB_SFB64_VOFF 0x02000000
#define FFB_FBC_REGS_VOFF 0x04000000
#define FFB_BM_FBC_REGS_VOFF 0x04002000
#define FFB_DFB8R_VOFF 0x04004000
#define FFB_DFB8G_VOFF 0x04404000
#define FFB_DFB8B_VOFF 0x04804000
#define FFB_DFB8X_VOFF 0x04c04000
#define FFB_DFB24_VOFF 0x05004000
#define FFB_DFB32_VOFF 0x06004000
#define FFB_DFB422A_VOFF 0x07004000
#define FFB_DFB422AD_VOFF 0x07804000
#define FFB_DFB24B_VOFF 0x08004000
#define FFB_DFB422B_VOFF 0x09004000
#define FFB_DFB422BD_VOFF 0x09804000
#define FFB_SFB16Z_VOFF 0x0a004000
#define FFB_SFB8Z_VOFF 0x0a404000
#define FFB_SFB422_VOFF 0x0ac04000
#define FFB_SFB422D_VOFF 0x0b404000
#define FFB_FBC_KREGS_VOFF 0x0bc04000
#define FFB_DAC_VOFF 0x0bc06000
#define FFB_PROM_VOFF 0x0bc08000
#define FFB_EXP_VOFF 0x0bc18000
#if defined(__GNUC__) && defined(USE_VIS)
#define FFB_ALIGN64 __attribute__((aligned(8)))
#else
#define FFB_ALIGN64
#endif
typedef struct {
unsigned int fg FFB_ALIGN64, bg;
unsigned int patalign;
unsigned char alu;
unsigned char inhw;
unsigned char pagable;
unsigned char ph;
unsigned int bits[32];
} CreatorStippleRec, *CreatorStipplePtr;
typedef struct {
int type;
unsigned int linepat;
CreatorStipplePtr stipple;
void (*PolySegment)(DrawablePtr, GCPtr, int, xSegment *);
void (*Polylines)(DrawablePtr, GCPtr, int, int, DDXPointPtr);
} CreatorPrivGCRec, *CreatorPrivGCPtr;
typedef struct {
CreatorStipplePtr Stipple;
unsigned int fbc_base;
unsigned int wid;
} CreatorPrivWinRec, *CreatorPrivWinPtr;
enum ffb_resolution {
ffb_res_standard = 0,
ffb_res_high,
ffb_res_stereo,
ffb_res_portrait
};
enum ffb_chip_type {
ffb1_prototype = 0,
ffb1_standard,
ffb1_speedsort,
ffb2_prototype,
ffb2_vertical,
ffb2_vertical_plus,
ffb2_horizontal,
ffb2_horizontal_plus,
afb_m3,
afb_m6
};
#ifdef XF86DRI
typedef struct {
int index;
} FFBConfigPrivRec, *FFBConfigPrivPtr;
#endif
typedef struct {
unsigned short fifo_cache;
unsigned short rp_active;
ffb_fbcPtr regs;
unsigned int ppc_cache;
unsigned int pmask_cache;
unsigned int rop_cache;
unsigned int drawop_cache;
unsigned int fg_cache;
unsigned int bg_cache;
unsigned int fontw_cache;
unsigned int fontinc_cache;
unsigned int fbc_cache;
unsigned int wid_cache;
enum ffb_chip_type ffb_type;
CreatorStipplePtr laststipple;
unsigned *fb;
unsigned *sfb32;
unsigned *sfb8r;
unsigned *sfb8x;
unsigned *dfb24;
unsigned *dfb8r;
unsigned *dfb8x;
volatile unsigned int *strapping_bits;
unsigned char disable_pagefill;
unsigned char disable_fastfill_ap;
unsigned char disable_vscroll;
unsigned char has_brline_bug;
unsigned char use_blkread_prefetch;
unsigned char has_double_res;
unsigned char has_z_buffer;
unsigned char has_double_buffer;
enum ffb_resolution ffb_res;
BoxRec ClippedBoxBuf[64];
xRectangle Pf_Fixups[4];
short Pf_AlignTab[0x800];
ffb_dacPtr dac;
sbusDevicePtr psdp;
Bool HWCursor;
Bool NoAccel;
Bool vtSema;
CloseScreenProcPtr CloseScreen;
xf86CursorInfoPtr CursorInfoRec;
unsigned char CursorShiftX, CursorShiftY;
unsigned char *CursorData;
PixmapPtr pix32, pix8;
void *I2C;
struct ffb_dac_info dac_info;
#ifdef XF86DRI
void *pDRIInfo;
int numVisualConfigs;
void *pVisualConfigs;
FFBConfigPrivPtr pVisualConfigsPriv;
int drmSubFD;
Bool dri_enabled;
ffb_dri_state_t *pFfbSarea;
#endif
OptionInfoPtr Options;
} FFBRec, *FFBPtr;
extern Bool FFBAccelInit(ScreenPtr, FFBPtr);
extern void CreatorVtChange (ScreenPtr pScreen, int enter);
extern Bool FFBHWCursorInit(ScreenPtr);
extern void FFBDacLoadCursorPos(FFBPtr, int, int);
extern void FFBDacLoadCursorColor(FFBPtr, int, int);
extern void FFBDacCursorEnableDisable(FFBPtr, int);
extern void FFBDacCursorLoadBitmap(FFBPtr, int, int, unsigned int *);
extern void FFBDacLoadPalette(ScrnInfoPtr, int, int *, LOCO *, VisualPtr);
extern Bool FFBDacInit(FFBPtr);
extern void FFBDacFini(FFBPtr);
extern void FFBDacEnterVT(FFBPtr);
extern void FFBDacLeaveVT(FFBPtr);
extern Bool FFBDacSaveScreen(FFBPtr, int);
extern void FFBDacDPMSMode(FFBPtr, int, int);
extern void FFBWidPoolInit(FFBPtr);
extern unsigned int FFBWidAlloc(FFBPtr, int, int, Bool);
extern void FFBWidFree(FFBPtr, unsigned int);
extern unsigned int FFBWidUnshare(FFBPtr, unsigned int);
extern unsigned int FFBWidReshare(FFBPtr, unsigned int);
extern void FFBWidChangeBuffer(FFBPtr, unsigned int, int);
extern Bool FFBWidIsShared(FFBPtr pFfb, unsigned int wid);
extern Bool FFBDbePreInit(ScreenPtr);
#ifdef XF86DRI
extern Bool FFBDRIScreenInit(ScreenPtr);
extern Bool FFBDRIFinishScreenInit(ScreenPtr);
extern void FFBDRICloseScreen(ScreenPtr);
#endif
struct fastfill_parms {
int fastfill_small_area;
int pagefill_small_area;
int fastfill_height;
int fastfill_width;
int pagefill_height;
int pagefill_width;
};
extern struct fastfill_parms ffb_fastfill_parms[];
#define FFB_FFPARMS(__fpriv) (ffb_fastfill_parms[(__fpriv)->ffb_res])
extern int CreatorScreenPrivateIndex;
extern int CreatorGCPrivateIndex;
extern int CreatorWindowPrivateIndex;
#define GET_FFB_FROM_SCRN(p) ((FFBPtr)((p)->driverPrivate))
#define GET_FFB_FROM_SCREEN(s) \
((FFBPtr)(s)->devPrivates[CreatorScreenPrivateIndex].ptr)
#define CreatorGetGCPrivate(g) \
((CreatorPrivGCPtr) (g)->devPrivates [CreatorGCPrivateIndex].ptr)
#define CreatorGetWindowPrivate(w) \
((CreatorPrivWinPtr) (w)->devPrivates[CreatorWindowPrivateIndex].ptr)
#define CreatorSetWindowPrivate(w,p) \
((w)->devPrivates[CreatorWindowPrivateIndex].ptr = (pointer) p)
#undef DEBUG_FFB
#ifdef DEBUG_FFB
extern FILE *FDEBUG_FD;
static __inline__ void FFB_DEBUG_init(void)
{
FDEBUG_FD = fopen("/tmp/FFB.DEBUG", "a");
}
#define FDEBUG(__x) \
do { fprintf __x; \
fflush(FDEBUG_FD); \
} while(0)
#else
#define FFB_DEBUG_init() do { } while(0)
#define FDEBUG(__x) do { } while(0)
#endif
#undef TRACE_FFB
#ifdef TRACE_FFB
#define FFBLOG(__x) ErrorF __x
#else
#define FFBLOG(__x) do { } while(0)
#endif
#endif