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