ast.h revision b4d38c65
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 */
2215fb4814Smrg
2315fb4814Smrg#include <string.h>
2415fb4814Smrg#include <stdlib.h>
2515fb4814Smrg
26b4d38c65Smrg#ifdef HAVE_XAA_H
27b4d38c65Smrg#include "xaa.h"
28b4d38c65Smrg#endif
29b4d38c65Smrg
30de78e416Smrg#include "ast_pcirename.h"
31de78e416Smrg
32b4d38c65Smrg#include "compat-api.h"
33b4d38c65Smrg
3415fb4814Smrg/* Compiler Options */
3515fb4814Smrg#define	Accel_2D
3615fb4814Smrg/* #define MMIO_2D */
3715fb4814Smrg#define HWC
38b534f209Smrg#define AstVideo
39de78e416Smrg/* #define PATCH_ABI_VERSION */
4015fb4814Smrg
4115fb4814Smrg/* Vendor & Device Info */
4215fb4814Smrg#ifndef PCI_VENDOR_AST
4315fb4814Smrg#define PCI_VENDOR_AST			0x1A03
4415fb4814Smrg#endif
4515fb4814Smrg
4615fb4814Smrg#ifndef	PCI_CHIP_AST2000
4715fb4814Smrg#define PCI_CHIP_AST2000		0x2000
4815fb4814Smrg#endif
4915fb4814Smrg
50de78e416Smrg#ifndef	PCI_CHIP_AST2100
51de78e416Smrg#define PCI_CHIP_AST2100		0x2010
52de78e416Smrg#endif
53de78e416Smrg
54b534f209Smrg#ifndef	PCI_CHIP_AST1180
55b534f209Smrg#define PCI_CHIP_AST1180		0x1180
56b534f209Smrg#endif
57b534f209Smrg
58de78e416Smrgtypedef enum _CHIP_ID {
59de78e416Smrg    VGALegacy,
60de78e416Smrg    AST2000,
61de78e416Smrg    AST2100,
62de78e416Smrg    AST1100,
63de78e416Smrg    AST2200,
64b410ddbeSmrg    AST2150,
65b534f209Smrg    AST2300,
66b534f209Smrg    AST1180
67de78e416Smrg} CHIP_ID;
68de78e416Smrg
6915fb4814Smrg/* AST REC Info */
7015fb4814Smrg#define AST_NAME 			"AST"
7115fb4814Smrg#define AST_DRIVER_NAME 		"ast"
72de78e416Smrg#define AST_MAJOR_VERSION 		PACKAGE_VERSION_MAJOR
73de78e416Smrg#define AST_MINOR_VERSION 		PACKAGE_VERSION_MINOR
74de78e416Smrg#define AST_PATCH_VERSION		PACKAGE_VERSION_PATCHLEVEL
7515fb4814Smrg#define AST_VERSION	\
7615fb4814Smrg        ((AST_MAJOR_VERSION << 20) | (AST_MINOR_VERSION << 10) | AST_PATCH_VERSION)
7715fb4814Smrg
7815fb4814Smrg/* Customized Info */
7915fb4814Smrg#define DEFAULT_VIDEOMEM_SIZE		0x00800000
8015fb4814Smrg#define DEFAULT_MMIO_SIZE		0x00020000
8115fb4814Smrg#define DEFAULT_CMDQ_SIZE		0x00100000
8215fb4814Smrg#define MIN_CMDQ_SIZE			0x00040000
8315fb4814Smrg#define CMD_QUEUE_GUARD_BAND    	0x00000020
8415fb4814Smrg#define DEFAULT_HWC_NUM			0x00000002
8515fb4814Smrg
86de78e416Smrg/* Patch Info */
87de78e416Smrg#define ABI_VIDEODRV_VERSION_PATCH	SET_ABI_VERSION(0, 5)
88de78e416Smrg
8915fb4814Smrg/* Data Type Definition */
9015fb4814Smrgtypedef INT32  		LONG;
9115fb4814Smrgtypedef CARD8   	UCHAR;
9215fb4814Smrgtypedef CARD16  	USHORT;
9315fb4814Smrgtypedef CARD32  	ULONG;
9415fb4814Smrg
9515fb4814Smrg/* Data Structure Definition */
9615fb4814Smrgtypedef struct _ASTRegRec {
97b4d38c65Smrg
9815fb4814Smrg    UCHAR 	ExtCRTC[0x50];
99b4d38c65Smrg
100b4d38c65Smrg    UCHAR 	MISC;
101b4d38c65Smrg    UCHAR 	SEQ[4];
102b4d38c65Smrg    UCHAR 	CRTC[25];
103b4d38c65Smrg    UCHAR 	AR[20];
104b4d38c65Smrg    UCHAR 	GR[9];
105b4d38c65Smrg    UCHAR	DAC[256][3];
106b4d38c65Smrg
107b534f209Smrg    ULONG	GFX[12];
108b4d38c65Smrg
10915fb4814Smrg} ASTRegRec, *ASTRegPtr;
11015fb4814Smrg
11115fb4814Smrgtypedef struct _VIDEOMODE {
11215fb4814Smrg
11315fb4814Smrg    int			ScreenWidth;
11415fb4814Smrg    int			ScreenHeight;
11515fb4814Smrg    int			bitsPerPixel;
11615fb4814Smrg    int			ScreenPitch;
11715fb4814Smrg
11815fb4814Smrg} VIDEOMODE, *PVIDEOMODE;
11915fb4814Smrg
12015fb4814Smrgtypedef struct {
12115fb4814Smrg
12215fb4814Smrg    ULONG		ulCMDQSize;
12315fb4814Smrg    ULONG		ulCMDQType;
12415fb4814Smrg
12515fb4814Smrg    ULONG		ulCMDQOffsetAddr;
12615fb4814Smrg    UCHAR       	*pjCMDQVirtualAddr;
12715fb4814Smrg
12815fb4814Smrg    UCHAR       	*pjCmdQBasePort;
12915fb4814Smrg    UCHAR       	*pjWritePort;
13015fb4814Smrg    UCHAR       	*pjReadPort;
13115fb4814Smrg    UCHAR       	*pjEngStatePort;
13215fb4814Smrg
13315fb4814Smrg    ULONG		ulCMDQMask;
13415fb4814Smrg    ULONG		ulCurCMDQueueLen;
13515fb4814Smrg
13615fb4814Smrg    ULONG		ulWritePointer;
13715fb4814Smrg    ULONG		ulReadPointer;
13815fb4814Smrg
13915fb4814Smrg    ULONG		ulReadPointer_OK;		/* for Eng_DBGChk */
14015fb4814Smrg
14115fb4814Smrg} CMDQINFO, *PCMDQINFO;
14215fb4814Smrg
14315fb4814Smrgtypedef struct {
14415fb4814Smrg
14515fb4814Smrg    int			HWC_NUM;
14615fb4814Smrg    int			HWC_NUM_Next;
14715fb4814Smrg
14815fb4814Smrg    ULONG		ulHWCOffsetAddr;
14915fb4814Smrg    UCHAR       	*pjHWCVirtualAddr;
15015fb4814Smrg
15115fb4814Smrg    USHORT		cursortype;
15215fb4814Smrg    USHORT		width;
15315fb4814Smrg    USHORT   		height;
15415fb4814Smrg    USHORT		offset_x;
15515fb4814Smrg    USHORT   		offset_y;
15615fb4814Smrg    ULONG		fg;
15715fb4814Smrg    ULONG		bg;
158de78e416Smrg
159de78e416Smrg    UCHAR               cursorpattern[1024];
16015fb4814Smrg
16115fb4814Smrg} HWCINFO, *PHWCINFO;
16215fb4814Smrg
163b534f209Smrgtypedef struct _ASTPortPrivRec{
164b534f209Smrg    FBLinearPtr     linear;
165b534f209Smrg    FBAreaPtr       fbAreaPtr;
166b534f209Smrg    int             fbSize;
167b534f209Smrg    CARD32          bufAddr[2];
168b534f209Smrg
169b534f209Smrg    unsigned char   currentBuf;
170b534f209Smrg
171b534f209Smrg    short           drw_x, drw_y, drw_w, drw_h;
172b534f209Smrg    short           src_x, src_y, src_w, src_h;
173b534f209Smrg    int             id;
174b534f209Smrg    short           srcPitch, height;
175b534f209Smrg
176b534f209Smrg    INT32           brightness;
177b534f209Smrg    INT32           contrast;
178b534f209Smrg    INT32           saturation;
179b534f209Smrg    INT32           hue;
180b534f209Smrg
181b534f209Smrg    INT32           gammaR;
182b534f209Smrg    INT32           gammaG;
183b534f209Smrg    INT32           gammaB;
184b534f209Smrg
185b534f209Smrg    RegionRec       clip;
186b534f209Smrg    CARD32          colorKey;
187b534f209Smrg
188b534f209Smrg    CARD32          videoStatus;
189b534f209Smrg    Time            offTime;
190b534f209Smrg    Time            freeTime;
191b534f209Smrg
192b534f209Smrg    CARD32          displayMode;
193b534f209Smrg
194b534f209Smrg    int             pitch;
195b534f209Smrg    int             offset;
196b534f209Smrg} ASTPortPrivRec, *ASTPortPrivPtr;
197b534f209Smrg
19815fb4814Smrgtypedef struct _ASTRec {
19915fb4814Smrg
20015fb4814Smrg    EntityInfoPtr 	pEnt;
201de78e416Smrg#ifndef XSERVER_LIBPCIACCESS
202de78e416Smrg	pciVideoPtr		PciInfo;
203de78e416Smrg	PCITAG			PciTag;
204de78e416Smrg#else
205de78e416Smrg	struct pci_device       *PciInfo;
206de78e416Smrg#endif
20715fb4814Smrg
20815fb4814Smrg    OptionInfoPtr 	Options;
20915fb4814Smrg    DisplayModePtr      ModePtr;
21015fb4814Smrg    FBLinearPtr 	pCMDQPtr;
211b4d38c65Smrg#ifdef HAVE_XAA_H
21215fb4814Smrg    XAAInfoRecPtr	AccelInfoPtr;
213b4d38c65Smrg#endif
21415fb4814Smrg    xf86CursorInfoPtr   HWCInfoPtr;
21515fb4814Smrg    FBLinearPtr 	pHWCPtr;
21615fb4814Smrg
21715fb4814Smrg    CloseScreenProcPtr CloseScreen;
21815fb4814Smrg    ScreenBlockHandlerProcPtr BlockHandler;
219de78e416Smrg
220de78e416Smrg    UCHAR		jChipType;
221de78e416Smrg    UCHAR		jDRAMType;
222b534f209Smrg    ULONG		ulDRAMBusWidth  ;
223b534f209Smrg    ULONG		ulDRAMSize;
224b534f209Smrg    ULONG		ulVRAMSize;
225b534f209Smrg    ULONG		ulVRAMBase;
226b534f209Smrg    ULONG               ulMCLK;
22715fb4814Smrg
22815fb4814Smrg    Bool 		noAccel;
22915fb4814Smrg    Bool 		noHWC;
23015fb4814Smrg    Bool 		MMIO2D;
23115fb4814Smrg    int			ENGCaps;
23215fb4814Smrg    int			DBGSelect;
233de78e416Smrg    Bool		VGA2Clone;
23415fb4814Smrg
23515fb4814Smrg    ULONG     		FBPhysAddr;		/* Frame buffer physical address     */
23615fb4814Smrg    ULONG     		MMIOPhysAddr;     	/* MMIO region physical address      */
23715fb4814Smrg    ULONG     		BIOSPhysAddr;     	/* BIOS physical address             */
23815fb4814Smrg
23915fb4814Smrg    UCHAR     		*FBVirtualAddr;   	/* Map of frame buffer               */
24015fb4814Smrg    UCHAR     		*MMIOVirtualAddr; 	/* Map of MMIO region                */
24115fb4814Smrg
24215fb4814Smrg    unsigned long	FbMapSize;
24315fb4814Smrg    unsigned long	MMIOMapSize;
24415fb4814Smrg
24515fb4814Smrg    IOADDRESS		IODBase;        	/* Base of PIO memory area */
24615fb4814Smrg    IOADDRESS		PIOOffset;
24715fb4814Smrg    IOADDRESS		RelocateIO;
24815fb4814Smrg
24915fb4814Smrg    VIDEOMODE 		VideoModeInfo;
25015fb4814Smrg    ASTRegRec           SavedReg;
25115fb4814Smrg    CMDQINFO		CMDQInfo;
25215fb4814Smrg    HWCINFO    		HWCInfo;
25315fb4814Smrg    ULONG		ulCMDReg;
25415fb4814Smrg    Bool		EnableClip;
255de78e416Smrg
256de78e416Smrg    int			clip_left;
257de78e416Smrg    int			clip_top;
258de78e416Smrg    int			clip_right;
259de78e416Smrg    int			clip_bottom;
260b534f209Smrg
261b534f209Smrg    int			mon_h_active;		/* Monitor Info. */
262b534f209Smrg    int			mon_v_active;
263b534f209Smrg
264b534f209Smrg#ifdef AstVideo
265b534f209Smrg    XF86VideoAdaptorPtr adaptor;
266b534f209Smrg    Atom        	xvBrightness, xvContrast, xvColorKey, xvHue, xvSaturation;
267b534f209Smrg    Atom		xvGammaRed, xvGammaGreen, xvGammaBlue;
268b534f209Smrg#endif
269b534f209Smrg
270b534f209Smrg} ASTRec, *ASTRecPtr, *ASTPtr;
271b534f209Smrg
27215fb4814Smrg#define ASTPTR(p) ((ASTRecPtr)((p)->driverPrivate))
27315fb4814Smrg
27415fb4814Smrg/* Include Files */
27515fb4814Smrg#include "ast_mode.h"
27615fb4814Smrg#include "ast_vgatool.h"
27715fb4814Smrg#include "ast_2dtool.h"
27815fb4814Smrg#include "ast_cursor.h"
279