s3.h revision a9060c92
1/*
2 *      Copyright 2001  Ani Joshi <ajoshi@unixbox.com>
3 *
4 *      XFree86 4.x driver for S3 chipsets
5 *
6 *
7 * Permission to use, copy, modify, distribute, and sell this software and its
8 * documentation for any purpose is hereby granted without fee, provided that
9 * the above copyright notice appear in all copies and that both that copyright
10 * notice and this permission notice appear in supporting documentation and
11 * that the name of Ani Joshi not be used in advertising or
12 * publicity pertaining to distribution of the software without specific,
13 * written prior permission.  Ani Joshi makes no representations
14 * about the suitability of this software for any purpose.  It is provided
15 * "as-is" without express or implied warranty.
16 *
17 * ANI JOSHI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
18 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
19 * EVENT SHALL ANI JOSHI BE LIABLE FOR ANY SPECIAL, INDIRECT OR
20 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
22 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
23 * PERFORMANCE OF THIS SOFTWARE.
24 *
25 *
26 */
27
28
29#ifndef _S3_H
30#define _S3_H
31
32#include "s3_pcirename.h"
33#include <string.h>
34
35#include "xf86.h"
36#include "xf86Pci.h"
37#include "xf86PciInfo.h"
38#include "xf86RamDac.h"
39#include "xaa.h"
40#include "vbe.h"
41#include "vgaHW.h"
42
43
44#include "xf86xv.h"
45#include <X11/extensions/Xv.h>
46#include "fourcc.h"
47
48
49typedef struct _S3RegRec {
50	unsigned char	cr31, cr32, cr33, cr34, cr3a, cr3b, cr3c;
51	unsigned char	cr3b2, cr3c2;
52	unsigned char	cr40, cr42, cr43, cr44, cr45;
53	unsigned char	cr50, cr51, cr53, cr54, cr55, cr58, cr59, cr5a,
54			cr5d, cr5e;
55	unsigned char	cr60, cr61, cr62, cr65, cr66, cr67, cr6d;
56	unsigned char	s3save[10];
57	unsigned char	s3syssave[46];
58	unsigned char	dacregs[0x101];
59	unsigned char	color_stack[8];
60	unsigned char	clock;
61} S3RegRec, *S3RegPtr;
62
63
64typedef struct {
65        unsigned char brightness;
66        unsigned char contrast;
67        FBLinearPtr   area;
68        RegionRec     clip;
69        CARD32        colorKey;
70        CARD32        videoStatus;
71        Time          offTime;
72        Time          freeTime;
73        int           lastPort;
74} S3PortPrivRec, *S3PortPrivPtr;
75
76
77typedef struct {
78	int bitsPerPixel;
79	int depth;
80	int displayWidth;
81	int pixel_code;
82	int pixel_bytes;
83	DisplayModePtr mode;
84} S3FBLayout;
85
86
87typedef struct _S3Rec {
88        pciVideoPtr             PciInfo;
89#ifndef XSERVER_LIBPCIACCESS
90        PCITAG                  PciTag;
91#endif
92        EntityInfoPtr           pEnt;
93        unsigned long           IOAddress;
94        unsigned long           FBAddress;
95        unsigned char *         FBBase;
96        unsigned char *         MMIOBase;
97        unsigned long           videoRam;
98        OptionInfoPtr           Options;
99        unsigned int            Flags;
100        Bool                    NoAccel;
101	Bool			HWCursor;
102	Bool			SlowDRAMRefresh;
103	Bool			SlowDRAM;
104	Bool			SlowEDODRAM;
105	Bool			SlowVRAM;
106	Bool			S3NewMMIO;
107	Bool                    hasStreams;
108	int                     Streams_FIFO;
109	Bool                    XVideo;
110	Bool			PCIRetry;
111	Bool			ColorExpandBug;
112
113        XAAInfoRecPtr           pXAA;
114	xf86CursorInfoPtr	pCurs;
115	xf86Int10InfoPtr	pInt10;
116	vbeInfoPtr		pVBE;
117        XF86VideoAdaptorPtr     adaptor;
118        S3PortPrivPtr           portPrivate;
119
120	DGAModePtr		DGAModes;
121	int			numDGAModes;
122	Bool			DGAactive;
123	int			DGAViewportStatus;
124
125	S3FBLayout		CurrentLayout;
126
127	RamDacHelperRecPtr	RamDac;
128	RamDacRecPtr		RamDacRec;
129
130	int			vgaCRIndex, vgaCRReg;
131
132	int			s3Bpp, s3BppDisplayWidth, HDisplay;
133	int			mclk, MaxClock;
134	int			pixMuxShift;
135
136        int                     Chipset, ChipRev;
137	int			RefClock;
138
139	int			s3ScissB, s3ScissR;
140	unsigned short		BltDir;
141	int			trans_color;
142	int			FBCursorOffset;
143
144	S3RegRec		SavedRegs;
145	S3RegRec		ModeRegs;
146
147	unsigned char		SAM256;
148
149	void			(*DacPreInit)(ScrnInfoPtr pScrn);
150	void			(*DacInit)(ScrnInfoPtr pScrn,
151					   DisplayModePtr mode);
152	void			(*DacSave)(ScrnInfoPtr pScrn);
153	void			(*DacRestore)(ScrnInfoPtr pScrn);
154	Bool			(*CursorInit)(ScreenPtr pScreen);
155
156	void			(*LoadPalette)(ScrnInfoPtr pScrn, int numColors,
157					       int *indicies, LOCO *colors,
158					       VisualPtr pVisual);
159
160        Bool                    (*CloseScreen)(int, ScreenPtr);
161
162	unsigned char		*imageBuffer;
163	int			imageWidth;
164	int			imageHeight;
165	Bool			hwCursor;
166
167	Bool                    shadowFB;
168	int                     rotate;
169	unsigned char           * ShadowPtr;
170	int                     ShadowPitch;
171	void	                (*PointerMoved)(int index, int x, int y);
172
173} S3Rec, *S3Ptr;
174
175#define S3PTR(p)		((S3Ptr)((p)->driverPrivate))
176
177
178#define DRIVER_NAME     "s3"
179#define DRIVER_VERSION  PACKAGE_VERSION
180#define VERSION_MAJOR   PACKAGE_VERSION_MAJOR
181#define VERSION_MINOR   PACKAGE_VERSION_MINOR
182#define PATCHLEVEL      PACKAGE_VERSION_PATCHLEVEL
183#define S3_VERSION     ((VERSION_MAJOR << 24) | \
184                        (VERSION_MINOR << 16) | PATCHLEVEL)
185
186
187
188
189/*
190 * Prototypes
191 */
192
193Bool S3AccelInit(ScreenPtr pScreen);
194Bool S3AccelInitNewMMIO(ScreenPtr pScreen);
195Bool S3AccelInitPIO(ScreenPtr pScreen);
196Bool S3DGAInit(ScreenPtr pScreen);
197Bool S3SwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
198int S3GetRefClock(ScrnInfoPtr pScrn);
199
200void S3InitVideo(ScreenPtr pScreen);
201void S3InitStreams(ScrnInfoPtr pScrn, DisplayModePtr mode);
202
203/* IBMRGB */
204extern RamDacSupportedInfoRec S3IBMRamdacs[];
205Bool S3ProbeIBMramdac(ScrnInfoPtr pScrn);
206void S3IBMRGB_PreInit(ScrnInfoPtr pScrn);
207void S3IBMRGB_Init(ScrnInfoPtr pScrn, DisplayModePtr mode);
208void S3IBMRGB_Save(ScrnInfoPtr pScrn);
209void S3IBMRGB_Restore(ScrnInfoPtr pScrn);
210Bool S3IBMRGB_CursorInit(ScreenPtr pScreen);
211
212/* TRIO64 */
213Bool S3Trio64DACProbe(ScrnInfoPtr pScrn);
214void S3Trio64DAC_PreInit(ScrnInfoPtr pScrn);
215void S3Trio64DAC_Init(ScrnInfoPtr pScrn, DisplayModePtr mode);
216void S3Trio64DAC_Save(ScrnInfoPtr pScrn);
217void S3Trio64DAC_Restore(ScrnInfoPtr pScrn);
218
219/* Ti */
220Bool S3TiDACProbe(ScrnInfoPtr pScrn);
221void S3TiDAC_PreInit(ScrnInfoPtr pScrn);
222void S3TiDAC_Init(ScrnInfoPtr pScrn, DisplayModePtr mode);
223void S3TiDAC_Save(ScrnInfoPtr pScrn);
224void S3TiDAC_Restore(ScrnInfoPtr pScrn);
225void S3TiLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indicies, LOCO *colors,
226		     VisualPtr pVisual);
227Bool S3Ti_CursorInit(ScreenPtr pScreen);
228void S3OutTiIndReg(ScrnInfoPtr pScrn, CARD32 reg, unsigned char mask,
229		   unsigned char data);
230
231/* SDAC/GENDAC */
232Bool S3SDACProbe(ScrnInfoPtr pScrn);
233void S3GENDAC_PreInit(ScrnInfoPtr pScrn);
234void S3GENDAC_Init(ScrnInfoPtr pScrn, DisplayModePtr mode);
235void S3SDAC_Init(ScrnInfoPtr pScrn, DisplayModePtr mode);
236void S3GENDAC_Save(ScrnInfoPtr pScrn);
237void S3GENDAC_Restore(ScrnInfoPtr pScrn);
238
239/* s3 gen cursor */
240Bool S3_CursorInit(ScreenPtr pScreen);
241
242/* in s3_shadow.c */
243void S3PointerMoved(int index, int x, int y);
244void S3RefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
245void S3RefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
246void S3RefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
247void S3RefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
248void S3RefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
249
250Bool S3GENDACProbe(ScrnInfoPtr pScrn);
251
252
253#define TRIO64_RAMDAC	0x8811
254#define	TI3025_RAMDAC	0x3025
255#define	TI3020_RAMDAC	0x3020
256#define	GENDAC_RAMDAC	0x0708
257#define	SDAC_RAMDAC	0x0716
258
259#define BIOS_BSIZE	1024
260#define	BIOS_BASE	0xc0000
261
262/*
263 * Chip...Sets...
264 */
265
266#define S3_864_SERIES()		((pS3->Chipset == PCI_CHIP_864_0) ||	\
267				 (pS3->Chipset == PCI_CHIP_864_1))
268#define S3_964_SERIES()		((pS3->Chipset == PCI_CHIP_964_0) ||	\
269			 	 (pS3->Chipset == PCI_CHIP_964_1))
270
271#define	S3_TRIO_SERIES()	((pS3->Chipset == PCI_CHIP_TRIO) ||	\
272			 	 (pS3->Chipset == PCI_CHIP_AURORA64VP) || \
273				 (pS3->Chipset == PCI_CHIP_TRIO64UVP) || \
274				 (pS3->Chipset == PCI_CHIP_TRIO64V2_DXGX))
275#endif /* _S3_H */
276