b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#ifndef _XF86RAMDAC_H
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define _XF86RAMDAC_H 1
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#include "colormapst.h"
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#include "xf86Cursor.h"
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/* Define unique vendor codes for RAMDAC's */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define VENDOR_IBM 0x0000
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define VENDOR_BT 0x0001
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define VENDOR_TI 0x0002
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct _RamDacRegRec {
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/* This is probably the nastiest assumption, we allocate 1024 slots for
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * ramdac registers, should be enough. I've checked IBM and TVP series
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * and they seem o.k
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Then we allocate 768 entries for the DAC too. IBM640 needs 1024 -FIXME
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned short DacRegs[0x400]; /* register set */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned char DAC[0x300]; /* colour map */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool Overlay;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} RamDacRegRec, *RamDacRegRecPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct _RamDacHWRegRec {
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync RamDacRegRec SavedReg;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync RamDacRegRec ModeReg;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} RamDacHWRec, *RamDacHWRecPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct _RamDacRec {
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync CARD32 RamDacType;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void (*LoadPalette)(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScrnInfoPtr pScrn,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int numColors,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int *indices,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync LOCO *colors,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync VisualPtr pVisual
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned char (*ReadDAC)(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScrnInfoPtr pScrn,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync CARD32
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void (*WriteDAC)(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScrnInfoPtr pScrn,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync CARD32,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned char,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned char
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void (*WriteAddress)(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScrnInfoPtr pScrn,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync CARD32
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void (*WriteData)(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScrnInfoPtr pScrn,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned char
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void (*ReadAddress)(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScrnInfoPtr pScrn,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync CARD32
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned char (*ReadData)(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScrnInfoPtr pScrn
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} RamDacRec, *RamDacRecPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct _RamDacHelperRec {
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync CARD32 RamDacType;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void (*Restore)(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScrnInfoPtr pScrn,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync RamDacRecPtr ramdacPtr,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync RamDacRegRecPtr ramdacReg
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void (*Save)(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScrnInfoPtr pScrn,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync RamDacRecPtr ramdacPtr,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync RamDacRegRecPtr ramdacReg
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void (*SetBpp)(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScrnInfoPtr pScrn,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync RamDacRegRecPtr ramdacReg
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void (*HWCursorInit)(
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync xf86CursorInfoPtr infoPtr
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync );
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} RamDacHelperRec, *RamDacHelperRecPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define RAMDACHWPTR(p) ((RamDacHWRecPtr)((p)->privates[RamDacGetHWIndex()].ptr))
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct _RamdacScreenRec {
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync RamDacRecPtr RamDacRec;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} RamDacScreenRec, *RamDacScreenRecPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define RAMDACSCRPTR(p) ((RamDacScreenRecPtr)((p)->privates[RamDacGetScreenIndex()].ptr))->RamDacRec
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT int RamDacHWPrivateIndex;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT int RamDacScreenPrivateIndex;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct {
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int token;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} RamDacSupportedInfoRec, *RamDacSupportedInfoRecPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT RamDacRecPtr RamDacCreateInfoRec(void);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT RamDacHelperRecPtr RamDacHelperCreateInfoRec(void);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void RamDacDestroyInfoRec(RamDacRecPtr RamDacRec);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void RamDacHelperDestroyInfoRec(RamDacHelperRecPtr RamDacRec);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT Bool RamDacInit(ScrnInfoPtr pScrn, RamDacRecPtr RamDacRec);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT Bool RamDacHandleColormaps(ScreenPtr pScreen, int maxColors, int sigRGBbits,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned int flags);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT void RamDacFreeRec(ScrnInfoPtr pScrn);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncextern _X_EXPORT int RamDacGetHWIndex(void);
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#endif /* _XF86RAMDAC_H */