Commit | Line | Data |
---|---|---|
a09e091a JB |
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 */ |