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
13typedef 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
24typedef struct _RamDacHWRegRec {
25    RamDacRegRec	SavedReg;
26    RamDacRegRec	ModeReg;
27} RamDacHWRec, *RamDacHWRecPtr;
28
29typedef struct _RamDacRec {
30    CARD32 RamDacType;
31
32    void (*LoadPalette)(
33	ScrnInfoPtr pScrn,
34	int numColors,
35	int *indices,
36	LOCO *colors,
37	VisualPtr pVisual
38    );
39
40    unsigned char (*ReadDAC)(
41	ScrnInfoPtr pScrn,
42	CARD32
43    );
44
45    void (*WriteDAC)(
46	ScrnInfoPtr pScrn,
47	CARD32,
48	unsigned char,
49	unsigned char
50    );
51
52    void (*WriteAddress)(
53	ScrnInfoPtr pScrn,
54	CARD32
55    );
56
57    void (*WriteData)(
58	ScrnInfoPtr pScrn,
59	unsigned char
60    );
61
62    void (*ReadAddress)(
63	ScrnInfoPtr pScrn,
64	CARD32
65    );
66
67    unsigned char (*ReadData)(
68	ScrnInfoPtr pScrn
69    );
70} RamDacRec, *RamDacRecPtr;
71
72typedef struct _RamDacHelperRec {
73    CARD32 RamDacType;
74
75    void (*Restore)(
76	ScrnInfoPtr pScrn,
77	RamDacRecPtr ramdacPtr,
78	RamDacRegRecPtr ramdacReg
79    );
80
81    void (*Save)(
82	ScrnInfoPtr pScrn,
83	RamDacRecPtr ramdacPtr,
84	RamDacRegRecPtr ramdacReg
85    );
86
87    void (*SetBpp)(
88	ScrnInfoPtr pScrn,
89	RamDacRegRecPtr ramdacReg
90    );
91
92    void (*HWCursorInit)(
93	xf86CursorInfoPtr infoPtr
94    );
95} RamDacHelperRec, *RamDacHelperRecPtr;
96
97#define RAMDACHWPTR(p) ((RamDacHWRecPtr)((p)->privates[RamDacGetHWIndex()].ptr))
98
99typedef struct _RamdacScreenRec {
100    RamDacRecPtr	RamDacRec;
101} RamDacScreenRec, *RamDacScreenRecPtr;
102#define RAMDACSCRPTR(p) ((RamDacScreenRecPtr)((p)->privates[RamDacGetScreenIndex()].ptr))->RamDacRec
103
104extern _X_EXPORT int RamDacHWPrivateIndex;
105extern _X_EXPORT int RamDacScreenPrivateIndex;
106
107typedef struct {
108    int		token;
109} RamDacSupportedInfoRec, *RamDacSupportedInfoRecPtr;
110
111extern _X_EXPORT RamDacRecPtr RamDacCreateInfoRec(void);
112extern _X_EXPORT RamDacHelperRecPtr RamDacHelperCreateInfoRec(void);
113extern _X_EXPORT void RamDacDestroyInfoRec(RamDacRecPtr RamDacRec);
114extern _X_EXPORT void RamDacHelperDestroyInfoRec(RamDacHelperRecPtr RamDacRec);
115extern _X_EXPORT Bool RamDacInit(ScrnInfoPtr pScrn, RamDacRecPtr RamDacRec);
116extern _X_EXPORT Bool RamDacHandleColormaps(ScreenPtr pScreen, int maxColors, int sigRGBbits,
117			   unsigned int flags);
118extern _X_EXPORT void RamDacFreeRec(ScrnInfoPtr pScrn);
119extern _X_EXPORT int  RamDacGetHWIndex(void);
120
121#endif /* _XF86RAMDAC_H */
122