ast.h revision cf503b78
1/*
2 * Copyright (c) 2005 ASPEED Technology Inc.
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 the authors not be used in
9 * advertising or publicity pertaining to distribution of the software without
10 * specific, written prior permission.  The authors 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 * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL THE AUTHORS 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
23#ifndef _AST_H_
24# define _AST_H_
25
26/* Compiler Options */
27#define	Accel_2D
28/* #define MMIO_2D */
29#define HWC
30#define AstVideo
31/* #define PATCH_ABI_VERSION */
32#define Support_ShadowFB
33
34#include <string.h>
35#include <stdlib.h>
36
37#ifdef HAVE_XAA_H
38#include "xaa.h"
39#endif
40
41#include "ast_pcirename.h"
42
43#include "compat-api.h"
44
45#ifdef	Support_ShadowFB
46#include "shadow.h"
47#endif
48
49/* Vendor & Device Info */
50#ifndef PCI_VENDOR_AST
51#define PCI_VENDOR_AST			0x1A03
52#endif
53
54#ifndef	PCI_CHIP_AST2000
55#define PCI_CHIP_AST2000		0x2000
56#endif
57
58#ifndef	PCI_CHIP_AST2100
59#define PCI_CHIP_AST2100		0x2010
60#endif
61
62#ifndef	PCI_CHIP_AST1180
63#define PCI_CHIP_AST1180		0x1180
64#endif
65
66typedef enum _CHIP_ID {
67    VGALegacy,
68    AST2000,
69    AST2100,
70    AST1100,
71    AST2200,
72    AST2150,
73    AST2300,
74    AST2400,
75    AST1180
76} CHIP_ID;
77
78typedef enum _TX_CHIPTYPE {
79    Tx_NONE,
80    Tx_Sil164,
81    Tx_Ite66121,
82    Tx_DP501
83} TX_CHIPTYPE;
84
85/* AST REC Info */
86#define AST_NAME 			"AST"
87#define AST_DRIVER_NAME 		"ast"
88#define AST_MAJOR_VERSION 		PACKAGE_VERSION_MAJOR
89#define AST_MINOR_VERSION 		PACKAGE_VERSION_MINOR
90#define AST_PATCH_VERSION		PACKAGE_VERSION_PATCHLEVEL
91#define AST_VERSION	\
92        ((AST_MAJOR_VERSION << 20) | (AST_MINOR_VERSION << 10) | AST_PATCH_VERSION)
93
94/* Customized Info */
95#define DEFAULT_VIDEOMEM_SIZE		0x00800000
96#define DEFAULT_MMIO_SIZE		0x00020000
97#define DEFAULT_CMDQ_SIZE		0x00100000
98#define MIN_CMDQ_SIZE			0x00040000
99#define CMD_QUEUE_GUARD_BAND    	0x00000020
100#define DEFAULT_HWC_NUM			0x00000002
101
102/* Customized Info. for DVO */
103#define HDMI_I2C_CHANNEL		1
104#define HDMI_TX_I2C_SLAVE_ADDR 		0x98
105
106/* Patch Info */
107#define ABI_VIDEODRV_VERSION_PATCH	SET_ABI_VERSION(0, 5)
108
109/* Data Type Definition */
110typedef INT32  		LONG;
111typedef CARD8   	UCHAR;
112typedef CARD16  	USHORT;
113typedef CARD32  	ULONG;
114
115/* Data Structure Definition */
116typedef struct _ASTRegRec {
117
118    UCHAR 	ExtCRTC[0x50];
119
120    UCHAR 	MISC;
121    UCHAR 	SEQ[4];
122    UCHAR 	CRTC[25];
123    UCHAR 	AR[20];
124    UCHAR 	GR[9];
125    UCHAR	DAC[256][3];
126
127    ULONG	GFX[12];
128
129    UCHAR	REGA4;
130    ULONG	ENG8044;
131} ASTRegRec, *ASTRegPtr;
132
133typedef struct _VIDEOMODE {
134
135    int			ScreenWidth;
136    int			ScreenHeight;
137    int			bitsPerPixel;
138    int			ScreenPitch;
139
140} VIDEOMODE, *PVIDEOMODE;
141
142typedef struct {
143
144    ULONG		ulCMDQSize;
145    ULONG		ulCMDQType;
146
147    ULONG		ulCMDQOffsetAddr;
148    UCHAR       *pjCMDQVirtualAddr;
149
150    UCHAR       *pjCmdQBasePort;
151    UCHAR       *pjWritePort;
152    UCHAR       *pjReadPort;
153    UCHAR       *pjEngStatePort;
154
155    ULONG		ulCMDQMask;
156    ULONG		ulCurCMDQueueLen;
157
158    ULONG		ulWritePointer;
159    ULONG		ulReadPointer;
160
161    ULONG		ulReadPointer_OK;		/* for Eng_DBGChk */
162
163} CMDQINFO, *PCMDQINFO;
164
165typedef struct {
166
167    int			HWC_NUM;
168    int			HWC_NUM_Next;
169
170    ULONG		ulHWCOffsetAddr;
171    UCHAR       *pjHWCVirtualAddr;
172
173    USHORT		cursortype;
174    USHORT		width;
175    USHORT   	height;
176    USHORT		offset_x;
177    USHORT   	offset_y;
178    ULONG		fg;
179    ULONG		bg;
180
181    UCHAR       cursorpattern[1024];
182
183} HWCINFO, *PHWCINFO;
184
185typedef struct _ASTPortPrivRec{
186    FBLinearPtr     linear;
187    FBAreaPtr       fbAreaPtr;
188    int             fbSize;
189    CARD32          bufAddr[2];
190
191    unsigned char   currentBuf;
192
193    short           drw_x, drw_y, drw_w, drw_h;
194    short           src_x, src_y, src_w, src_h;
195    int             id;
196    short           srcPitch, height;
197
198    INT32           brightness;
199    INT32           contrast;
200    INT32           saturation;
201    INT32           hue;
202
203    INT32           gammaR;
204    INT32           gammaG;
205    INT32           gammaB;
206
207    RegionRec       clip;
208    CARD32          colorKey;
209
210    CARD32          videoStatus;
211    Time            offTime;
212    Time            freeTime;
213
214    CARD32          displayMode;
215
216    int             pitch;
217    int             offset;
218} ASTPortPrivRec, *ASTPortPrivPtr;
219
220typedef struct _ASTRec {
221
222    EntityInfoPtr 	pEnt;
223#ifndef XSERVER_LIBPCIACCESS
224	pciVideoPtr		PciInfo;
225	PCITAG			PciTag;
226#else
227	struct pci_device       *PciInfo;
228#endif
229
230    OptionInfoPtr 	Options;
231    DisplayModePtr  ModePtr;
232    FBLinearPtr 	pCMDQPtr;
233#ifdef HAVE_XAA_H
234    XAAInfoRecPtr	AccelInfoPtr;
235#endif
236    xf86CursorInfoPtr   HWCInfoPtr;
237    FBLinearPtr 	pHWCPtr;
238
239    CloseScreenProcPtr CloseScreen;
240    ScreenBlockHandlerProcPtr BlockHandler;
241
242    UCHAR		jChipType;
243    UCHAR		jDRAMType;
244    ULONG		ulDRAMBusWidth  ;
245    ULONG		ulDRAMSize;
246    ULONG		ulVRAMSize;
247    ULONG		ulVRAMBase;
248    ULONG       ulMCLK;
249
250    Bool 		noAccel;
251    Bool 		noHWC;
252    Bool 		MMIO2D;
253    int			ENGCaps;
254    int			DBGSelect;
255    Bool		VGA2Clone;
256    Bool		SupportWideScreen;
257
258    ULONG     		FBPhysAddr;			/* Frame buffer physical address     */
259    ULONG     		MMIOPhysAddr;     	/* MMIO region physical address      */
260    ULONG     		BIOSPhysAddr;     	/* BIOS physical address             */
261
262    UCHAR     		*FBVirtualAddr;   	/* Map of frame buffer               */
263    UCHAR     		*MMIOVirtualAddr; 	/* Map of MMIO region                */
264
265    unsigned long	FbMapSize;
266    unsigned long	MMIOMapSize;
267
268#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 12
269    IOADDRESS		RelocateIO;
270#else
271    int			RelocateIO;
272#endif
273
274    VIDEOMODE 		VideoModeInfo;
275    ASTRegRec       SavedReg;
276    CMDQINFO		CMDQInfo;
277    HWCINFO    		HWCInfo;
278    ULONG			ulCMDReg;
279    Bool			EnableClip;
280
281    int				clip_left;
282    int				clip_top;
283    int				clip_right;
284    int				clip_bottom;
285
286    int				mon_h_active;		/* Monitor Info. */
287    int				mon_v_active;
288
289    UCHAR			jTxChipType;		/* 3rd TX */
290    UCHAR			DP501_MaxVCLK;
291    UCHAR			*pDP501FWBufferVirtualAddress;
292
293#ifdef AstVideo
294    XF86VideoAdaptorPtr adaptor;
295    Atom        	xvBrightness, xvContrast, xvColorKey, xvHue, xvSaturation;
296    Atom			xvGammaRed, xvGammaGreen, xvGammaBlue;
297#endif
298
299#ifdef	Support_ShadowFB
300    Bool			shadowFB;
301    Bool			shadowFB_validation;
302    void            *shadow;
303    ShadowUpdateProc update;
304    ShadowWindowProc window;
305    CreateScreenResourcesProcPtr CreateScreenResources;
306#endif
307
308} ASTRec, *ASTRecPtr, *ASTPtr;
309
310#define ASTPTR(p) ((ASTRecPtr)((p)->driverPrivate))
311
312/* ast_vgatool.c */
313extern Bool bASTIsVGAEnabled(ScrnInfoPtr pScrn);
314extern Bool ASTGetVGA2EDID(ScrnInfoPtr pScrn, unsigned char *pEDIDBuffer);
315extern void ASTDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags);
316extern void vASTLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, VisualPtr pVisual);
317extern void ASTBlankScreen(ScrnInfoPtr pScreen, Bool unblack);
318extern void vAST1000DisplayOn(ScrnInfoPtr pScrn);
319extern void vAST1000DisplayOff(ScrnInfoPtr pScrn);
320extern void vASTSetStartAddressCRT1(ASTRecPtr pAST, ULONG base);
321extern void ASTGetScratchOptions(ScrnInfoPtr pScrn);
322void ASTGetChipType(ScrnInfoPtr pScrn);
323ULONG ASTGetMaxDCLK(ScrnInfoPtr pScrn);
324ULONG ASTGetVRAMInfo(ScrnInfoPtr pScrn);
325void ASTGetDRAMInfo(ScrnInfoPtr pScrn);
326Bool bASTRegInit(ScrnInfoPtr pScrn);
327void vASTOpenKey(ScrnInfoPtr pScrn);
328Bool ASTReadEDID_M68K(ScrnInfoPtr pScrn, BYTE *pEDIDData);
329UCHAR ASTGetLinkMaxCLK(ScrnInfoPtr pScrn);
330Bool ASTGetVGAEDID(ScrnInfoPtr pScrn, unsigned char *pEDIDBuffer);
331Bool bASTInitAST1180(ScrnInfoPtr pScrn);
332void ASTGetAST1180DRAMInfo(ScrnInfoPtr pScrn);
333void vASTEnableVGAMMIO(ScrnInfoPtr pScrn);
334Bool ASTInitVGA(ScrnInfoPtr pScrn, ULONG Flags);
335
336/* ast_2dtool.c */
337void vASTWaitEngIdle(ScrnInfoPtr pScrn, ASTRecPtr pAST);
338UCHAR *pASTjRequestCMDQ(ASTRecPtr pAST, ULONG ulDataLen);
339Bool bASTEnable2D(ScrnInfoPtr pScrn, ASTRecPtr pAST);
340void vASTDisable2D(ScrnInfoPtr pScrn, ASTRecPtr pAST);
341
342/* ast_cursor.c */
343#ifdef  HWC
344Bool ASTCursorInit(ScreenPtr pScreen);
345Bool bASTInitHWC(ScrnInfoPtr pScrn, ASTRecPtr pAST);
346void ASTDisableHWC(ScrnInfoPtr pScrn);
347#endif
348
349/* ast_mode.c */
350Bool ASTSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode);
351
352/* ast_accel.c */
353#ifdef HAVE_XAA_H
354Bool ASTAccelInit(ScreenPtr pScreen);
355#endif
356void ASTDisplayVideo(ScrnInfoPtr pScrn, ASTPortPrivPtr pPriv, RegionPtr clipBoxes, int id);
357
358/* ast_tool.c */
359Bool ASTMapMem(ScrnInfoPtr pScrn);
360Bool ASTUnmapMem(ScrnInfoPtr pScrn);
361Bool ASTMapMMIO(ScrnInfoPtr pScrn);
362void ASTUnmapMMIO(ScrnInfoPtr pScrn);
363
364#endif /* _AST_H_ */
365