1706f2543Smrg
2706f2543Smrg#ifndef _XF86RAMDAC_H
3706f2543Smrg#define _XF86RAMDAC_H 1
4706f2543Smrg
5706f2543Smrg#include "colormapst.h"
6706f2543Smrg#include "xf86Cursor.h"
7706f2543Smrg
8706f2543Smrg/* Define unique vendor codes for RAMDAC's */
9706f2543Smrg#define VENDOR_IBM	0x0000
10706f2543Smrg#define VENDOR_BT	0x0001
11706f2543Smrg#define VENDOR_TI	0x0002
12706f2543Smrg
13706f2543Smrgtypedef struct _RamDacRegRec {
14706f2543Smrg/* This is probably the nastiest assumption, we allocate 1024 slots for
15706f2543Smrg * ramdac registers, should be enough. I've checked IBM and TVP series
16706f2543Smrg * and they seem o.k
17706f2543Smrg * Then we allocate 768 entries for the DAC too. IBM640 needs 1024 -FIXME
18706f2543Smrg */
19706f2543Smrg    unsigned short DacRegs[0x400];	/* register set */
20706f2543Smrg    unsigned char DAC[0x300];		/* colour map */
21706f2543Smrg    Bool Overlay;
22706f2543Smrg} RamDacRegRec, *RamDacRegRecPtr;
23706f2543Smrg
24706f2543Smrgtypedef struct _RamDacHWRegRec {
25706f2543Smrg    RamDacRegRec	SavedReg;
26706f2543Smrg    RamDacRegRec	ModeReg;
27706f2543Smrg} RamDacHWRec, *RamDacHWRecPtr;
28706f2543Smrg
29706f2543Smrgtypedef struct _RamDacRec {
30706f2543Smrg    CARD32 RamDacType;
31706f2543Smrg
32706f2543Smrg    void (*LoadPalette)(
33706f2543Smrg	ScrnInfoPtr pScrn,
34706f2543Smrg	int numColors,
35706f2543Smrg	int *indices,
36706f2543Smrg	LOCO *colors,
37706f2543Smrg	VisualPtr pVisual
38706f2543Smrg    );
39706f2543Smrg
40706f2543Smrg    unsigned char (*ReadDAC)(
41706f2543Smrg	ScrnInfoPtr pScrn,
42706f2543Smrg	CARD32
43706f2543Smrg    );
44706f2543Smrg
45706f2543Smrg    void (*WriteDAC)(
46706f2543Smrg	ScrnInfoPtr pScrn,
47706f2543Smrg	CARD32,
48706f2543Smrg	unsigned char,
49706f2543Smrg	unsigned char
50706f2543Smrg    );
51706f2543Smrg
52706f2543Smrg    void (*WriteAddress)(
53706f2543Smrg	ScrnInfoPtr pScrn,
54706f2543Smrg	CARD32
55706f2543Smrg    );
56706f2543Smrg
57706f2543Smrg    void (*WriteData)(
58706f2543Smrg	ScrnInfoPtr pScrn,
59706f2543Smrg	unsigned char
60706f2543Smrg    );
61706f2543Smrg
62706f2543Smrg    void (*ReadAddress)(
63706f2543Smrg	ScrnInfoPtr pScrn,
64706f2543Smrg	CARD32
65706f2543Smrg    );
66706f2543Smrg
67706f2543Smrg    unsigned char (*ReadData)(
68706f2543Smrg	ScrnInfoPtr pScrn
69706f2543Smrg    );
70706f2543Smrg} RamDacRec, *RamDacRecPtr;
71706f2543Smrg
72706f2543Smrgtypedef struct _RamDacHelperRec {
73706f2543Smrg    CARD32 RamDacType;
74706f2543Smrg
75706f2543Smrg    void (*Restore)(
76706f2543Smrg	ScrnInfoPtr pScrn,
77706f2543Smrg	RamDacRecPtr ramdacPtr,
78706f2543Smrg	RamDacRegRecPtr ramdacReg
79706f2543Smrg    );
80706f2543Smrg
81706f2543Smrg    void (*Save)(
82706f2543Smrg	ScrnInfoPtr pScrn,
83706f2543Smrg	RamDacRecPtr ramdacPtr,
84706f2543Smrg	RamDacRegRecPtr ramdacReg
85706f2543Smrg    );
86706f2543Smrg
87706f2543Smrg    void (*SetBpp)(
88706f2543Smrg	ScrnInfoPtr pScrn,
89706f2543Smrg	RamDacRegRecPtr ramdacReg
90706f2543Smrg    );
91706f2543Smrg
92706f2543Smrg    void (*HWCursorInit)(
93706f2543Smrg	xf86CursorInfoPtr infoPtr
94706f2543Smrg    );
95706f2543Smrg} RamDacHelperRec, *RamDacHelperRecPtr;
96706f2543Smrg
97706f2543Smrg#define RAMDACHWPTR(p) ((RamDacHWRecPtr)((p)->privates[RamDacGetHWIndex()].ptr))
98706f2543Smrg
99706f2543Smrgtypedef struct _RamdacScreenRec {
100706f2543Smrg    RamDacRecPtr	RamDacRec;
101706f2543Smrg} RamDacScreenRec, *RamDacScreenRecPtr;
102706f2543Smrg#define RAMDACSCRPTR(p) ((RamDacScreenRecPtr)((p)->privates[RamDacGetScreenIndex()].ptr))->RamDacRec
103706f2543Smrg
104706f2543Smrgextern _X_EXPORT int RamDacHWPrivateIndex;
105706f2543Smrgextern _X_EXPORT int RamDacScreenPrivateIndex;
106706f2543Smrg
107706f2543Smrgtypedef struct {
108706f2543Smrg    int		token;
109706f2543Smrg} RamDacSupportedInfoRec, *RamDacSupportedInfoRecPtr;
110706f2543Smrg
111706f2543Smrgextern _X_EXPORT RamDacRecPtr RamDacCreateInfoRec(void);
112706f2543Smrgextern _X_EXPORT RamDacHelperRecPtr RamDacHelperCreateInfoRec(void);
113706f2543Smrgextern _X_EXPORT void RamDacDestroyInfoRec(RamDacRecPtr RamDacRec);
114706f2543Smrgextern _X_EXPORT void RamDacHelperDestroyInfoRec(RamDacHelperRecPtr RamDacRec);
115706f2543Smrgextern _X_EXPORT Bool RamDacInit(ScrnInfoPtr pScrn, RamDacRecPtr RamDacRec);
116706f2543Smrgextern _X_EXPORT Bool RamDacHandleColormaps(ScreenPtr pScreen, int maxColors, int sigRGBbits,
117706f2543Smrg			   unsigned int flags);
118706f2543Smrgextern _X_EXPORT void RamDacFreeRec(ScrnInfoPtr pScrn);
119706f2543Smrgextern _X_EXPORT int  RamDacGetHWIndex(void);
120706f2543Smrg
121706f2543Smrg#endif /* _XF86RAMDAC_H */
122