115fb4814Smrg/*
215fb4814Smrg * Copyright (c) 2005 ASPEED Technology Inc.
315fb4814Smrg *
415fb4814Smrg * Permission to use, copy, modify, distribute, and sell this software and its
515fb4814Smrg * documentation for any purpose is hereby granted without fee, provided that
615fb4814Smrg * the above copyright notice appear in all copies and that both that
715fb4814Smrg * copyright notice and this permission notice appear in supporting
815fb4814Smrg * documentation, and that the name of the authors not be used in
915fb4814Smrg * advertising or publicity pertaining to distribution of the software without
1015fb4814Smrg * specific, written prior permission.  The authors makes no representations
1115fb4814Smrg * about the suitability of this software for any purpose.  It is provided
1215fb4814Smrg * "as is" without express or implied warranty.
1315fb4814Smrg *
1415fb4814Smrg * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1515fb4814Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1615fb4814Smrg * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1715fb4814Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1815fb4814Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1915fb4814Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
2015fb4814Smrg * PERFORMANCE OF THIS SOFTWARE.
2115fb4814Smrg */
22cf503b78Smrg
23cf503b78Smrg#ifndef _AST_H_
24cf503b78Smrg# define _AST_H_
25cf503b78Smrg
267fe5393cSmrg/* Compiler Options */
277fe5393cSmrg#define	Accel_2D
287fe5393cSmrg/* #define MMIO_2D */
297fe5393cSmrg#define HWC
307fe5393cSmrg#define AstVideo
317fe5393cSmrg/* #define PATCH_ABI_VERSION */
327fe5393cSmrg#define Support_ShadowFB
3315fb4814Smrg
3415fb4814Smrg#include <string.h>
3515fb4814Smrg#include <stdlib.h>
3615fb4814Smrg
37b4d38c65Smrg#ifdef HAVE_XAA_H
38b4d38c65Smrg#include "xaa.h"
39b4d38c65Smrg#endif
40b4d38c65Smrg
41de78e416Smrg#include "ast_pcirename.h"
42de78e416Smrg
43b4d38c65Smrg#include "compat-api.h"
44b4d38c65Smrg
457fe5393cSmrg#ifdef	Support_ShadowFB
467fe5393cSmrg#include "shadow.h"
477fe5393cSmrg#endif
4815fb4814Smrg
4915fb4814Smrg/* Vendor & Device Info */
5015fb4814Smrg#ifndef PCI_VENDOR_AST
517fe5393cSmrg#define PCI_VENDOR_AST			0x1A03
527fe5393cSmrg#endif
5315fb4814Smrg
5415fb4814Smrg#ifndef	PCI_CHIP_AST2000
557fe5393cSmrg#define PCI_CHIP_AST2000		0x2000
5615fb4814Smrg#endif
5715fb4814Smrg
58de78e416Smrg#ifndef	PCI_CHIP_AST2100
59de78e416Smrg#define PCI_CHIP_AST2100		0x2010
60de78e416Smrg#endif
61de78e416Smrg
62b534f209Smrg#ifndef	PCI_CHIP_AST1180
63b534f209Smrg#define PCI_CHIP_AST1180		0x1180
64b534f209Smrg#endif
65b534f209Smrg
66de78e416Smrgtypedef enum _CHIP_ID {
67de78e416Smrg    VGALegacy,
68de78e416Smrg    AST2000,
69de78e416Smrg    AST2100,
70de78e416Smrg    AST1100,
71de78e416Smrg    AST2200,
72b410ddbeSmrg    AST2150,
73b534f209Smrg    AST2300,
74cf503b78Smrg    AST2400,
7558e54220Smrg    AST2500,
76b534f209Smrg    AST1180
77de78e416Smrg} CHIP_ID;
78de78e416Smrg
79cf503b78Smrgtypedef enum _TX_CHIPTYPE {
80cf503b78Smrg    Tx_NONE,
81cf503b78Smrg    Tx_Sil164,
82cf503b78Smrg    Tx_Ite66121,
83cf503b78Smrg    Tx_DP501
84cf503b78Smrg} TX_CHIPTYPE;
85cf503b78Smrg
8615fb4814Smrg/* AST REC Info */
8715fb4814Smrg#define AST_NAME 			"AST"
8815fb4814Smrg#define AST_DRIVER_NAME 		"ast"
89de78e416Smrg#define AST_MAJOR_VERSION 		PACKAGE_VERSION_MAJOR
90de78e416Smrg#define AST_MINOR_VERSION 		PACKAGE_VERSION_MINOR
91de78e416Smrg#define AST_PATCH_VERSION		PACKAGE_VERSION_PATCHLEVEL
9215fb4814Smrg#define AST_VERSION	\
9315fb4814Smrg        ((AST_MAJOR_VERSION << 20) | (AST_MINOR_VERSION << 10) | AST_PATCH_VERSION)
9415fb4814Smrg
9515fb4814Smrg/* Customized Info */
9615fb4814Smrg#define DEFAULT_VIDEOMEM_SIZE		0x00800000
9715fb4814Smrg#define DEFAULT_MMIO_SIZE		0x00020000
9815fb4814Smrg#define DEFAULT_CMDQ_SIZE		0x00100000
9915fb4814Smrg#define MIN_CMDQ_SIZE			0x00040000
10015fb4814Smrg#define CMD_QUEUE_GUARD_BAND    	0x00000020
10115fb4814Smrg#define DEFAULT_HWC_NUM			0x00000002
10215fb4814Smrg
103cf503b78Smrg/* Customized Info. for DVO */
104cf503b78Smrg#define HDMI_I2C_CHANNEL		1
105cf503b78Smrg#define HDMI_TX_I2C_SLAVE_ADDR 		0x98
106cf503b78Smrg
107de78e416Smrg/* Patch Info */
108de78e416Smrg#define ABI_VIDEODRV_VERSION_PATCH	SET_ABI_VERSION(0, 5)
109de78e416Smrg
11015fb4814Smrg/* Data Type Definition */
11115fb4814Smrgtypedef INT32  		LONG;
11215fb4814Smrgtypedef CARD8   	UCHAR;
11315fb4814Smrgtypedef CARD16  	USHORT;
11415fb4814Smrgtypedef CARD32  	ULONG;
11515fb4814Smrg
11615fb4814Smrg/* Data Structure Definition */
11715fb4814Smrgtypedef struct _ASTRegRec {
1187fe5393cSmrg
11915fb4814Smrg    UCHAR 	ExtCRTC[0x50];
120b4d38c65Smrg
1217fe5393cSmrg    UCHAR 	MISC;
122b4d38c65Smrg    UCHAR 	SEQ[4];
123b4d38c65Smrg    UCHAR 	CRTC[25];
1247fe5393cSmrg    UCHAR 	AR[20];
125b4d38c65Smrg    UCHAR 	GR[9];
126b4d38c65Smrg    UCHAR	DAC[256][3];
1277fe5393cSmrg
128b534f209Smrg    ULONG	GFX[12];
1297fe5393cSmrg
1307fe5393cSmrg    UCHAR	REGA4;
1317fe5393cSmrg    ULONG	ENG8044;
13215fb4814Smrg} ASTRegRec, *ASTRegPtr;
13315fb4814Smrg
13415fb4814Smrgtypedef struct _VIDEOMODE {
13515fb4814Smrg
13615fb4814Smrg    int			ScreenWidth;
13715fb4814Smrg    int			ScreenHeight;
13815fb4814Smrg    int			bitsPerPixel;
13915fb4814Smrg    int			ScreenPitch;
1407fe5393cSmrg
14115fb4814Smrg} VIDEOMODE, *PVIDEOMODE;
14215fb4814Smrg
14315fb4814Smrgtypedef struct {
14415fb4814Smrg
14515fb4814Smrg    ULONG		ulCMDQSize;
14615fb4814Smrg    ULONG		ulCMDQType;
1477fe5393cSmrg
14815fb4814Smrg    ULONG		ulCMDQOffsetAddr;
1497fe5393cSmrg    UCHAR       *pjCMDQVirtualAddr;
1507fe5393cSmrg
1517fe5393cSmrg    UCHAR       *pjCmdQBasePort;
1527fe5393cSmrg    UCHAR       *pjWritePort;
1537fe5393cSmrg    UCHAR       *pjReadPort;
1547fe5393cSmrg    UCHAR       *pjEngStatePort;
1557fe5393cSmrg
15615fb4814Smrg    ULONG		ulCMDQMask;
15715fb4814Smrg    ULONG		ulCurCMDQueueLen;
1587fe5393cSmrg
15915fb4814Smrg    ULONG		ulWritePointer;
16015fb4814Smrg    ULONG		ulReadPointer;
1617fe5393cSmrg
16215fb4814Smrg    ULONG		ulReadPointer_OK;		/* for Eng_DBGChk */
1637fe5393cSmrg
16415fb4814Smrg} CMDQINFO, *PCMDQINFO;
16515fb4814Smrg
16615fb4814Smrgtypedef struct {
16715fb4814Smrg
16815fb4814Smrg    int			HWC_NUM;
16915fb4814Smrg    int			HWC_NUM_Next;
17015fb4814Smrg
17115fb4814Smrg    ULONG		ulHWCOffsetAddr;
1727fe5393cSmrg    UCHAR       *pjHWCVirtualAddr;
1737fe5393cSmrg
17415fb4814Smrg    USHORT		cursortype;
17515fb4814Smrg    USHORT		width;
1767fe5393cSmrg    USHORT   	height;
17715fb4814Smrg    USHORT		offset_x;
1787fe5393cSmrg    USHORT   	offset_y;
17915fb4814Smrg    ULONG		fg;
18015fb4814Smrg    ULONG		bg;
181de78e416Smrg
1827fe5393cSmrg    UCHAR       cursorpattern[1024];
1837fe5393cSmrg
18415fb4814Smrg} HWCINFO, *PHWCINFO;
18515fb4814Smrg
186b534f209Smrgtypedef struct _ASTPortPrivRec{
187b534f209Smrg    FBLinearPtr     linear;
188b534f209Smrg    FBAreaPtr       fbAreaPtr;
189b534f209Smrg    int             fbSize;
190b534f209Smrg    CARD32          bufAddr[2];
191b534f209Smrg
192b534f209Smrg    unsigned char   currentBuf;
193b534f209Smrg
194b534f209Smrg    short           drw_x, drw_y, drw_w, drw_h;
195b534f209Smrg    short           src_x, src_y, src_w, src_h;
196b534f209Smrg    int             id;
197b534f209Smrg    short           srcPitch, height;
198b534f209Smrg
199b534f209Smrg    INT32           brightness;
200b534f209Smrg    INT32           contrast;
201b534f209Smrg    INT32           saturation;
202b534f209Smrg    INT32           hue;
2037fe5393cSmrg
204b534f209Smrg    INT32           gammaR;
205b534f209Smrg    INT32           gammaG;
206b534f209Smrg    INT32           gammaB;
207b534f209Smrg
208b534f209Smrg    RegionRec       clip;
209b534f209Smrg    CARD32          colorKey;
210b534f209Smrg
211b534f209Smrg    CARD32          videoStatus;
212b534f209Smrg    Time            offTime;
213b534f209Smrg    Time            freeTime;
2147fe5393cSmrg
215b534f209Smrg    CARD32          displayMode;
216b534f209Smrg
217b534f209Smrg    int             pitch;
218b534f209Smrg    int             offset;
219b534f209Smrg} ASTPortPrivRec, *ASTPortPrivPtr;
220b534f209Smrg
22115fb4814Smrgtypedef struct _ASTRec {
2227fe5393cSmrg
22315fb4814Smrg    EntityInfoPtr 	pEnt;
2247fe5393cSmrg#ifndef XSERVER_LIBPCIACCESS
225de78e416Smrg	pciVideoPtr		PciInfo;
226de78e416Smrg	PCITAG			PciTag;
227de78e416Smrg#else
228de78e416Smrg	struct pci_device       *PciInfo;
229de78e416Smrg#endif
23015fb4814Smrg
23115fb4814Smrg    OptionInfoPtr 	Options;
2327fe5393cSmrg    DisplayModePtr  ModePtr;
2337fe5393cSmrg    FBLinearPtr 	pCMDQPtr;
234b4d38c65Smrg#ifdef HAVE_XAA_H
23515fb4814Smrg    XAAInfoRecPtr	AccelInfoPtr;
236b4d38c65Smrg#endif
23715fb4814Smrg    xf86CursorInfoPtr   HWCInfoPtr;
2387fe5393cSmrg    FBLinearPtr 	pHWCPtr;
23915fb4814Smrg
24015fb4814Smrg    CloseScreenProcPtr CloseScreen;
24115fb4814Smrg    ScreenBlockHandlerProcPtr BlockHandler;
242de78e416Smrg
243de78e416Smrg    UCHAR		jChipType;
244de78e416Smrg    UCHAR		jDRAMType;
245b534f209Smrg    ULONG		ulDRAMBusWidth  ;
246b534f209Smrg    ULONG		ulDRAMSize;
247b534f209Smrg    ULONG		ulVRAMSize;
248b534f209Smrg    ULONG		ulVRAMBase;
2497fe5393cSmrg    ULONG       ulMCLK;
2507fe5393cSmrg
25115fb4814Smrg    Bool 		noAccel;
25215fb4814Smrg    Bool 		noHWC;
25315fb4814Smrg    Bool 		MMIO2D;
25415fb4814Smrg    int			ENGCaps;
25515fb4814Smrg    int			DBGSelect;
256de78e416Smrg    Bool		VGA2Clone;
2577fe5393cSmrg    Bool		SupportWideScreen;
2587fe5393cSmrg
259cf503b78Smrg    ULONG     		FBPhysAddr;			/* Frame buffer physical address     */
26015fb4814Smrg    ULONG     		MMIOPhysAddr;     	/* MMIO region physical address      */
26115fb4814Smrg    ULONG     		BIOSPhysAddr;     	/* BIOS physical address             */
2627fe5393cSmrg
26315fb4814Smrg    UCHAR     		*FBVirtualAddr;   	/* Map of frame buffer               */
26415fb4814Smrg    UCHAR     		*MMIOVirtualAddr; 	/* Map of MMIO region                */
26515fb4814Smrg
26615fb4814Smrg    unsigned long	FbMapSize;
26715fb4814Smrg    unsigned long	MMIOMapSize;
2687fe5393cSmrg
269cf503b78Smrg#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 12
27015fb4814Smrg    IOADDRESS		RelocateIO;
271cf503b78Smrg#else
272cf503b78Smrg    int			RelocateIO;
273cf503b78Smrg#endif
2747fe5393cSmrg
27515fb4814Smrg    VIDEOMODE 		VideoModeInfo;
2767fe5393cSmrg    ASTRegRec       SavedReg;
27715fb4814Smrg    CMDQINFO		CMDQInfo;
27815fb4814Smrg    HWCINFO    		HWCInfo;
2797fe5393cSmrg    ULONG			ulCMDReg;
2807fe5393cSmrg    Bool			EnableClip;
281de78e416Smrg
2827fe5393cSmrg    int				clip_left;
2837fe5393cSmrg    int				clip_top;
2847fe5393cSmrg    int				clip_right;
2857fe5393cSmrg    int				clip_bottom;
286b534f209Smrg
2877fe5393cSmrg    int				mon_h_active;		/* Monitor Info. */
2887fe5393cSmrg    int				mon_v_active;
289b534f209Smrg
290cf503b78Smrg    UCHAR			jTxChipType;		/* 3rd TX */
291cf503b78Smrg    UCHAR			DP501_MaxVCLK;
292cf503b78Smrg    UCHAR			*pDP501FWBufferVirtualAddress;
293cf503b78Smrg
294b534f209Smrg#ifdef AstVideo
295b534f209Smrg    XF86VideoAdaptorPtr adaptor;
296b534f209Smrg    Atom        	xvBrightness, xvContrast, xvColorKey, xvHue, xvSaturation;
2977fe5393cSmrg    Atom			xvGammaRed, xvGammaGreen, xvGammaBlue;
2987fe5393cSmrg#endif
2997fe5393cSmrg
3007fe5393cSmrg#ifdef	Support_ShadowFB
3017fe5393cSmrg    Bool			shadowFB;
3027fe5393cSmrg    Bool			shadowFB_validation;
3037fe5393cSmrg    void            *shadow;
3047fe5393cSmrg    ShadowUpdateProc update;
3057fe5393cSmrg    ShadowWindowProc window;
3067fe5393cSmrg    CreateScreenResourcesProcPtr CreateScreenResources;
307b534f209Smrg#endif
308b534f209Smrg
309b534f209Smrg} ASTRec, *ASTRecPtr, *ASTPtr;
310b534f209Smrg
31115fb4814Smrg#define ASTPTR(p) ((ASTRecPtr)((p)->driverPrivate))
31215fb4814Smrg
313cf503b78Smrg/* ast_vgatool.c */
314cf503b78Smrgextern Bool bASTIsVGAEnabled(ScrnInfoPtr pScrn);
315cf503b78Smrgextern Bool ASTGetVGA2EDID(ScrnInfoPtr pScrn, unsigned char *pEDIDBuffer);
316cf503b78Smrgextern void ASTDisplayPowerManagementSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags);
317cf503b78Smrgextern void vASTLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, LOCO *colors, VisualPtr pVisual);
318cf503b78Smrgextern void ASTBlankScreen(ScrnInfoPtr pScreen, Bool unblack);
319cf503b78Smrgextern void vAST1000DisplayOn(ScrnInfoPtr pScrn);
320cf503b78Smrgextern void vAST1000DisplayOff(ScrnInfoPtr pScrn);
321cf503b78Smrgextern void vASTSetStartAddressCRT1(ASTRecPtr pAST, ULONG base);
322cf503b78Smrgextern void ASTGetScratchOptions(ScrnInfoPtr pScrn);
323cf503b78Smrgvoid ASTGetChipType(ScrnInfoPtr pScrn);
324cf503b78SmrgULONG ASTGetMaxDCLK(ScrnInfoPtr pScrn);
325cf503b78SmrgULONG ASTGetVRAMInfo(ScrnInfoPtr pScrn);
326cf503b78Smrgvoid ASTGetDRAMInfo(ScrnInfoPtr pScrn);
327cf503b78SmrgBool bASTRegInit(ScrnInfoPtr pScrn);
328cf503b78Smrgvoid vASTOpenKey(ScrnInfoPtr pScrn);
329cf503b78SmrgBool ASTReadEDID_M68K(ScrnInfoPtr pScrn, BYTE *pEDIDData);
330cf503b78SmrgUCHAR ASTGetLinkMaxCLK(ScrnInfoPtr pScrn);
331cf503b78SmrgBool ASTGetVGAEDID(ScrnInfoPtr pScrn, unsigned char *pEDIDBuffer);
332cf503b78SmrgBool bASTInitAST1180(ScrnInfoPtr pScrn);
333cf503b78Smrgvoid ASTGetAST1180DRAMInfo(ScrnInfoPtr pScrn);
334cf503b78Smrgvoid vASTEnableVGAMMIO(ScrnInfoPtr pScrn);
335cf503b78SmrgBool ASTInitVGA(ScrnInfoPtr pScrn, ULONG Flags);
336cf503b78Smrg
337cf503b78Smrg/* ast_2dtool.c */
338cf503b78Smrgvoid vASTWaitEngIdle(ScrnInfoPtr pScrn, ASTRecPtr pAST);
339cf503b78SmrgUCHAR *pASTjRequestCMDQ(ASTRecPtr pAST, ULONG ulDataLen);
340cf503b78SmrgBool bASTEnable2D(ScrnInfoPtr pScrn, ASTRecPtr pAST);
341cf503b78Smrgvoid vASTDisable2D(ScrnInfoPtr pScrn, ASTRecPtr pAST);
342cf503b78Smrg
343cf503b78Smrg/* ast_cursor.c */
344cf503b78Smrg#ifdef  HWC
345cf503b78SmrgBool ASTCursorInit(ScreenPtr pScreen);
346cf503b78SmrgBool bASTInitHWC(ScrnInfoPtr pScrn, ASTRecPtr pAST);
347cf503b78Smrgvoid ASTDisableHWC(ScrnInfoPtr pScrn);
348cf503b78Smrg#endif
349cf503b78Smrg
350cf503b78Smrg/* ast_mode.c */
351cf503b78SmrgBool ASTSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode);
352cf503b78Smrg
353cf503b78Smrg/* ast_accel.c */
354cf503b78Smrg#ifdef HAVE_XAA_H
355cf503b78SmrgBool ASTAccelInit(ScreenPtr pScreen);
356cf503b78Smrg#endif
357cf503b78Smrgvoid ASTDisplayVideo(ScrnInfoPtr pScrn, ASTPortPrivPtr pPriv, RegionPtr clipBoxes, int id);
358cf503b78Smrg
359cf503b78Smrg/* ast_tool.c */
360cf503b78SmrgBool ASTMapMem(ScrnInfoPtr pScrn);
361cf503b78SmrgBool ASTUnmapMem(ScrnInfoPtr pScrn);
362cf503b78SmrgBool ASTMapMMIO(ScrnInfoPtr pScrn);
363cf503b78Smrgvoid ASTUnmapMMIO(ScrnInfoPtr pScrn);
364cf503b78Smrg
365cf503b78Smrg#endif /* _AST_H_ */
366