1/*
2 * Copyright 1997,1998 by Alan Hourihane <alanh@fairlite.demon.co.uk>
3 *
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of Alan Hourihane not be used in
9 * advertising or publicity pertaining to distribution of the software without
10 * specific, written prior permission.  Alan Hourihane makes no representations
11 * about the suitability of this software for any purpose.  It is provided
12 * "as is" without express or implied warranty.
13 *
14 * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20 * PERFORMANCE OF THIS SOFTWARE.
21 *
22 * Authors:  Alan Hourihane, <alanh@fairlite.demon.co.uk>
23 */
24
25#ifndef _TGA_H_
26#define _TGA_H_
27
28#include "tga_pcirename.h"
29#ifdef HAVE_XAA_H
30#include "xaa.h"
31#endif
32#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(25, 2)
33#include "xf86RamDac.h"
34#else
35#include "xf86Cursor.h"
36#endif
37
38#include "compat-api.h"
39
40typedef struct {
41	unsigned long tgaRegs[0x100];
42} TGARegRec, *TGARegPtr;
43
44#define TGA_OLDPRIV (GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 4)
45
46#define TGAPTR(p)	((TGAPtr)((p)->driverPrivate))
47
48typedef struct {
49    pciVideoPtr		PciInfo;
50#ifndef XSERVER_LIBPCIACCESS
51    PCITAG		PciTag;
52#endif
53    int			Chipset;
54    RamDacHelperRecPtr	RamDac;
55    int                 ChipRev;
56    int			HwBpp;
57    int			BppShift;
58    int			pprod;
59    CARD32		CardAddress;
60    CARD32		IOAddress;
61    CARD32		FbAddress;
62    unsigned char *     FbBase;
63    unsigned char *     IOBase;
64    unsigned char *     ClkBase; /* TGA2 */
65    unsigned char *     DACBase; /* TGA2 */
66    unsigned char *     HACKBase; /* TGA2 */
67    long		FbMapSize;
68    unsigned long	regOffset;
69    Bool		NoAccel;
70    Bool		NoXaaPolySegment;
71    Bool		Dac6Bit;
72    Bool		SyncOnGreen;
73    Bool		HWCursor;
74    Bool		UsePCIRetry;
75    int			MinClock;
76    int			MaxClock;
77    TGARegRec		SavedReg;
78    TGARegRec		ModeReg;
79    CARD32		AccelFlags;
80    RamDacRecPtr	RamDacRec;
81#ifdef HAVE_XAA_H
82    XAAInfoRecPtr	AccelInfoRec;
83#endif
84    xf86CursorInfoPtr   CursorInfoRec;
85    CloseScreenProcPtr	CloseScreen;
86    int                 CardType;
87    unsigned char       Bt463modeReg[59];
88    unsigned char       Bt463saveReg[59];
89    unsigned char       Ibm561modeReg[59];
90    unsigned char       Ibm561saveReg[59];
91    EntityInfoPtr       pEnt;
92    CARD32     *buffers[1];
93    unsigned int        current_rop;
94    unsigned int        current_planemask;
95    int                 transparent_pattern_p;
96    int                 blitdir;
97    int                 block_or_opaque_p;
98    int                 ce_height;
99    int                 ce_width;
100    int                 ce_x;
101    int                 ce_y;
102    int                 ce_skipleft;
103    int                 line_pattern_length;
104    CARD16              line_pattern; /* for dashed lines */
105    int                 Bpp; /* bytes per pixel */
106    int                 depthflag; /* either BPP8PACKED or BPP24 */
107    OptionInfoPtr	Options;
108} TGARec, *TGAPtr;
109
110/* ?? this is a hack for initial TGA2 support */
111struct monitor_data {
112  unsigned int max_rows;   /* Monitor setup */
113  unsigned int max_cols;
114  unsigned int pixel_freq;
115  unsigned int refresh_rate;
116  unsigned int vert_slines;
117  unsigned int vert_fp;
118  unsigned int vert_sync;
119  unsigned int vert_bp;
120  unsigned int horz_pix;
121  unsigned int horz_fp;
122  unsigned int horz_sync;
123  unsigned int horz_bp;
124  unsigned int vco_div;      /* ICS setup */
125  unsigned int ref_div;
126  unsigned int vco_pre;
127  unsigned int clk_div;
128  unsigned int vco_out_div;
129  unsigned int clk_out_en;
130  unsigned int clk_out_enX;
131  unsigned int res0;
132  unsigned int clk_sel;
133  unsigned int res1;
134  unsigned int ibm561_vco_div; /* IBM561 PLL setup */
135  unsigned int ibm561_ref;
136};
137
138extern struct monitor_data tga_crystal_table[];
139extern int tga_crystal_table_entries;
140extern struct monitor_data *tga_c_table;
141
142/* Prototypes */
143
144/* tga_dac.c */
145void DEC21030Restore(ScrnInfoPtr pScrn,/* vgaRegPtr vgaReg,*/
146		      TGARegPtr tgaReg/*, Bool restoreFonts*/);
147void DEC21030Save(ScrnInfoPtr pScrn, /*vgaRegPtr vgaReg,*/ TGARegPtr tgaReg/*,
148		   Bool saveFonts*/);
149Bool DEC21030Init(ScrnInfoPtr pScrn, DisplayModePtr mode);
150void write_av9110(ScrnInfoPtr pScrn, unsigned int *);
151void TGA2SetupMode(ScrnInfoPtr pScrn);
152void Ibm561Init(TGAPtr pTga);
153void Bt463Init(TGAPtr pTga);
154
155/* tga_accel.c */
156Bool DEC21030AccelInit(ScreenPtr pScreen);
157
158/* BTramdac.c */
159void tgaBTOutIndReg(ScrnInfoPtr pScrn,
160		     CARD32 reg, unsigned char mask, unsigned char data);
161unsigned char tgaBTInIndReg(ScrnInfoPtr pScrn, CARD32 reg);
162void tgaBTWriteAddress(ScrnInfoPtr pScrn, CARD32 index);
163void tgaBTReadAddress(ScrnInfoPtr pScrn, CARD32 index);
164void tgaBTWriteData(ScrnInfoPtr pScrn, unsigned char data);
165unsigned char tgaBTReadData(ScrnInfoPtr pScrn);
166
167void tga2BTOutIndReg(ScrnInfoPtr pScrn,
168		     CARD32 reg, unsigned char mask, unsigned char data);
169unsigned char tga2BTInIndReg(ScrnInfoPtr pScrn, CARD32 reg);
170void tga2BTWriteAddress(ScrnInfoPtr pScrn, CARD32 index);
171void tga2BTReadAddress(ScrnInfoPtr pScrn, CARD32 index);
172void tga2BTWriteData(ScrnInfoPtr pScrn, unsigned char data);
173unsigned char tga2BTReadData(ScrnInfoPtr pScrn);
174
175/* BT463ramdac.c */
176void BT463ramdacSave(ScrnInfoPtr pScrn, unsigned char *data);
177void BT463ramdacRestore(ScrnInfoPtr pScrn, unsigned char *data);
178
179/* IBM561ramdac.c */
180void IBM561ramdacSave(ScrnInfoPtr pScrn, unsigned char *data);
181void IBM561ramdacHWInit(ScrnInfoPtr pScrn);
182void IBM561ramdacRestore(ScrnInfoPtr pScrn, unsigned char *data);
183unsigned char IBM561ReadReg(ScrnInfoPtr pScrn, CARD32 reg);
184void IBM561WriteReg(ScrnInfoPtr pScrn, CARD32 reg, unsigned char data);
185
186/* tga_cursor.c */
187Bool TGAHWCursorInit(ScreenPtr pScreen);
188
189/* tga_line.c */
190
191void TGAPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg,
192		    xSegment *pSeg);
193void TGAPolyLines(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
194		  DDXPointPtr pptInit);
195void TGAPolySegmentDashed(DrawablePtr pDrawable, GCPtr pGC, int	nseg,
196			  xSegment *pSeg);
197void TGAPolyLinesDashed(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
198			DDXPointPtr pptInit);
199
200/* line functions */
201void
202TGASetupForSolidLine(ScrnInfoPtr pScrn, int color, int rop,
203		      unsigned int planemask);
204void
205TGASubsequentSolidHorVertLine(ScrnInfoPtr pScrn, int x, int y, int len,
206			      int dir);
207void
208TGASubsequentSolidLine(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2,
209		       int octant, int flags);
210void
211TGASetupForClippedLine(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2,
212		       int octant);
213void
214TGASubsequentClippedSolidLine(ScrnInfoPtr pScrn, int x1, int y1, int len,
215			      int err);
216
217void
218TGASetupForDashedLine(ScrnInfoPtr pScrn, int fg, int bg, int rop,
219		      unsigned int planemask, int length,
220		      unsigned char *pattern);
221void
222TGASubsequentDashedLine(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2,
223			int octant, int flags, int phase);
224void
225TGASubsequentClippedDashedLine(ScrnInfoPtr pScrn, int x1, int y1, int len,
226			       int err, int phase);
227
228
229
230
231#endif /* _TGA_H_ */
232
233