1 2 #ifndef _XF86RAMDAC_H 3 #define _XF86RAMDAC_H 1 4 5 #include "colormapst.h" 6 #include "xf86Cursor.h" 7 8 /* Define unique vendor codes for RAMDAC's */ 9 #define VENDOR_IBM 0x0000 10 #define VENDOR_BT 0x0001 11 #define VENDOR_TI 0x0002 12 13 typedef struct _RamDacRegRec { 14 /* This is probably the nastiest assumption, we allocate 1024 slots for 15 * ramdac registers, should be enough. I've checked IBM and TVP series 16 * and they seem o.k 17 * Then we allocate 768 entries for the DAC too. IBM640 needs 1024 -FIXME 18 */ 19 unsigned short DacRegs[0x400]; /* register set */ 20 unsigned char DAC[0x300]; /* colour map */ 21 Bool Overlay; 22 } RamDacRegRec, *RamDacRegRecPtr; 23 24 typedef struct _RamDacHWRegRec { 25 RamDacRegRec SavedReg; 26 RamDacRegRec ModeReg; 27 } RamDacHWRec, *RamDacHWRecPtr; 28 29 typedef struct _RamDacRec { 30 CARD32 RamDacType; 31 32 void (*LoadPalette) (ScrnInfoPtr pScrn, 33 int numColors, 34 int *indices, LOCO * colors, VisualPtr pVisual); 35 36 unsigned char (*ReadDAC) (ScrnInfoPtr pScrn, CARD32); 37 38 void (*WriteDAC) (ScrnInfoPtr pScrn, CARD32, unsigned char, unsigned char); 39 40 void (*WriteAddress) (ScrnInfoPtr pScrn, CARD32); 41 42 void (*WriteData) (ScrnInfoPtr pScrn, unsigned char); 43 44 void (*ReadAddress) (ScrnInfoPtr pScrn, CARD32); 45 46 unsigned char (*ReadData) (ScrnInfoPtr pScrn); 47 } RamDacRec, *RamDacRecPtr; 48 49 typedef struct _RamDacHelperRec { 50 CARD32 RamDacType; 51 52 void (*Restore) (ScrnInfoPtr pScrn, 53 RamDacRecPtr ramdacPtr, RamDacRegRecPtr ramdacReg); 54 55 void (*Save) (ScrnInfoPtr pScrn, 56 RamDacRecPtr ramdacPtr, RamDacRegRecPtr ramdacReg); 57 58 void (*SetBpp) (ScrnInfoPtr pScrn, RamDacRegRecPtr ramdacReg); 59 60 void (*HWCursorInit) (xf86CursorInfoPtr infoPtr); 61 } RamDacHelperRec, *RamDacHelperRecPtr; 62 63 #define RAMDACHWPTR(p) ((RamDacHWRecPtr)((p)->privates[RamDacGetHWIndex()].ptr)) 64 65 typedef struct _RamdacScreenRec { 66 RamDacRecPtr RamDacRec; 67 } RamDacScreenRec, *RamDacScreenRecPtr; 68 69 #define RAMDACSCRPTR(p) ((RamDacScreenRecPtr)((p)->privates[RamDacGetScreenIndex()].ptr))->RamDacRec 70 71 extern _X_EXPORT int RamDacHWPrivateIndex; 72 extern _X_EXPORT int RamDacScreenPrivateIndex; 73 74 typedef struct { 75 int token; 76 } RamDacSupportedInfoRec, *RamDacSupportedInfoRecPtr; 77 78 extern _X_EXPORT RamDacRecPtr RamDacCreateInfoRec(void); 79 extern _X_EXPORT RamDacHelperRecPtr RamDacHelperCreateInfoRec(void); 80 extern _X_EXPORT void RamDacDestroyInfoRec(RamDacRecPtr RamDacRec); 81 extern _X_EXPORT void RamDacHelperDestroyInfoRec(RamDacHelperRecPtr RamDacRec); 82 extern _X_EXPORT Bool RamDacInit(ScrnInfoPtr pScrn, RamDacRecPtr RamDacRec); 83 extern _X_EXPORT Bool RamDacHandleColormaps(ScreenPtr pScreen, int maxColors, 84 int sigRGBbits, unsigned int flags); 85 extern _X_EXPORT void RamDacFreeRec(ScrnInfoPtr pScrn); 86 extern _X_EXPORT int RamDacGetHWIndex(void); 87 88 #endif /* _XF86RAMDAC_H */ 89