17706df26Smrg/*
27706df26Smrg * Copyright 1997,1998 by Alan Hourihane <alanh@fairlite.demon.co.uk>
37706df26Smrg *
47706df26Smrg * Permission to use, copy, modify, distribute, and sell this software and its
57706df26Smrg * documentation for any purpose is hereby granted without fee, provided that
67706df26Smrg * the above copyright notice appear in all copies and that both that
77706df26Smrg * copyright notice and this permission notice appear in supporting
87706df26Smrg * documentation, and that the name of Alan Hourihane not be used in
97706df26Smrg * advertising or publicity pertaining to distribution of the software without
107706df26Smrg * specific, written prior permission.  Alan Hourihane makes no representations
117706df26Smrg * about the suitability of this software for any purpose.  It is provided
127706df26Smrg * "as is" without express or implied warranty.
137706df26Smrg *
147706df26Smrg * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
157706df26Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
167706df26Smrg * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
177706df26Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
187706df26Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
197706df26Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
207706df26Smrg * PERFORMANCE OF THIS SOFTWARE.
217706df26Smrg *
227706df26Smrg * Authors:  Alan Hourihane, <alanh@fairlite.demon.co.uk>
237706df26Smrg */
247706df26Smrg
257706df26Smrg#ifndef _TGA_H_
267706df26Smrg#define _TGA_H_
277706df26Smrg
28047944f3Smrg#include "tga_pcirename.h"
29b92e825aSmrg#ifdef HAVE_XAA_H
307706df26Smrg#include "xaa.h"
31b92e825aSmrg#endif
32556200c8Smrg#if ABI_VIDEODRV_VERSION < SET_ABI_VERSION(25, 2)
33556200c8Smrg#include "xf86RamDac.h"
34556200c8Smrg#else
35556200c8Smrg#include "xf86Cursor.h"
36556200c8Smrg#endif
377706df26Smrg
38b92e825aSmrg#include "compat-api.h"
39b92e825aSmrg
407706df26Smrgtypedef struct {
417706df26Smrg	unsigned long tgaRegs[0x100];
427706df26Smrg} TGARegRec, *TGARegPtr;
437706df26Smrg
44047944f3Smrg#define TGA_OLDPRIV (GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 4)
457706df26Smrg
467706df26Smrg#define TGAPTR(p)	((TGAPtr)((p)->driverPrivate))
477706df26Smrg
487706df26Smrgtypedef struct {
497706df26Smrg    pciVideoPtr		PciInfo;
50047944f3Smrg#ifndef XSERVER_LIBPCIACCESS
517706df26Smrg    PCITAG		PciTag;
52047944f3Smrg#endif
537706df26Smrg    int			Chipset;
547706df26Smrg    RamDacHelperRecPtr	RamDac;
557706df26Smrg    int                 ChipRev;
567706df26Smrg    int			HwBpp;
577706df26Smrg    int			BppShift;
587706df26Smrg    int			pprod;
597706df26Smrg    CARD32		CardAddress;
607706df26Smrg    CARD32		IOAddress;
617706df26Smrg    CARD32		FbAddress;
627706df26Smrg    unsigned char *     FbBase;
637706df26Smrg    unsigned char *     IOBase;
647706df26Smrg    unsigned char *     ClkBase; /* TGA2 */
657706df26Smrg    unsigned char *     DACBase; /* TGA2 */
667706df26Smrg    unsigned char *     HACKBase; /* TGA2 */
677706df26Smrg    long		FbMapSize;
687706df26Smrg    unsigned long	regOffset;
697706df26Smrg    Bool		NoAccel;
707706df26Smrg    Bool		NoXaaPolySegment;
717706df26Smrg    Bool		Dac6Bit;
727706df26Smrg    Bool		SyncOnGreen;
737706df26Smrg    Bool		HWCursor;
747706df26Smrg    Bool		UsePCIRetry;
757706df26Smrg    int			MinClock;
767706df26Smrg    int			MaxClock;
777706df26Smrg    TGARegRec		SavedReg;
787706df26Smrg    TGARegRec		ModeReg;
797706df26Smrg    CARD32		AccelFlags;
807706df26Smrg    RamDacRecPtr	RamDacRec;
81b92e825aSmrg#ifdef HAVE_XAA_H
827706df26Smrg    XAAInfoRecPtr	AccelInfoRec;
83b92e825aSmrg#endif
847706df26Smrg    xf86CursorInfoPtr   CursorInfoRec;
857706df26Smrg    CloseScreenProcPtr	CloseScreen;
867706df26Smrg    int                 CardType;
877706df26Smrg    unsigned char       Bt463modeReg[59];
887706df26Smrg    unsigned char       Bt463saveReg[59];
897706df26Smrg    unsigned char       Ibm561modeReg[59];
907706df26Smrg    unsigned char       Ibm561saveReg[59];
917706df26Smrg    EntityInfoPtr       pEnt;
927706df26Smrg    CARD32     *buffers[1];
937706df26Smrg    unsigned int        current_rop;
947706df26Smrg    unsigned int        current_planemask;
957706df26Smrg    int                 transparent_pattern_p;
967706df26Smrg    int                 blitdir;
977706df26Smrg    int                 block_or_opaque_p;
987706df26Smrg    int                 ce_height;
997706df26Smrg    int                 ce_width;
1007706df26Smrg    int                 ce_x;
1017706df26Smrg    int                 ce_y;
1027706df26Smrg    int                 ce_skipleft;
1037706df26Smrg    int                 line_pattern_length;
1047706df26Smrg    CARD16              line_pattern; /* for dashed lines */
1057706df26Smrg    int                 Bpp; /* bytes per pixel */
1067706df26Smrg    int                 depthflag; /* either BPP8PACKED or BPP24 */
1077706df26Smrg    OptionInfoPtr	Options;
1087706df26Smrg} TGARec, *TGAPtr;
1097706df26Smrg
1107706df26Smrg/* ?? this is a hack for initial TGA2 support */
1117706df26Smrgstruct monitor_data {
1127706df26Smrg  unsigned int max_rows;   /* Monitor setup */
1137706df26Smrg  unsigned int max_cols;
1147706df26Smrg  unsigned int pixel_freq;
1157706df26Smrg  unsigned int refresh_rate;
1167706df26Smrg  unsigned int vert_slines;
1177706df26Smrg  unsigned int vert_fp;
1187706df26Smrg  unsigned int vert_sync;
1197706df26Smrg  unsigned int vert_bp;
1207706df26Smrg  unsigned int horz_pix;
1217706df26Smrg  unsigned int horz_fp;
1227706df26Smrg  unsigned int horz_sync;
1237706df26Smrg  unsigned int horz_bp;
1247706df26Smrg  unsigned int vco_div;      /* ICS setup */
1257706df26Smrg  unsigned int ref_div;
1267706df26Smrg  unsigned int vco_pre;
1277706df26Smrg  unsigned int clk_div;
1287706df26Smrg  unsigned int vco_out_div;
1297706df26Smrg  unsigned int clk_out_en;
1307706df26Smrg  unsigned int clk_out_enX;
1317706df26Smrg  unsigned int res0;
1327706df26Smrg  unsigned int clk_sel;
1337706df26Smrg  unsigned int res1;
1347706df26Smrg  unsigned int ibm561_vco_div; /* IBM561 PLL setup */
1357706df26Smrg  unsigned int ibm561_ref;
1367706df26Smrg};
1377706df26Smrg
1387706df26Smrgextern struct monitor_data tga_crystal_table[];
1397706df26Smrgextern int tga_crystal_table_entries;
1407706df26Smrgextern struct monitor_data *tga_c_table;
1417706df26Smrg
1427706df26Smrg/* Prototypes */
1437706df26Smrg
1447706df26Smrg/* tga_dac.c */
1457706df26Smrgvoid DEC21030Restore(ScrnInfoPtr pScrn,/* vgaRegPtr vgaReg,*/
1467706df26Smrg		      TGARegPtr tgaReg/*, Bool restoreFonts*/);
1477706df26Smrgvoid DEC21030Save(ScrnInfoPtr pScrn, /*vgaRegPtr vgaReg,*/ TGARegPtr tgaReg/*,
1487706df26Smrg		   Bool saveFonts*/);
1497706df26SmrgBool DEC21030Init(ScrnInfoPtr pScrn, DisplayModePtr mode);
1507706df26Smrgvoid write_av9110(ScrnInfoPtr pScrn, unsigned int *);
1517706df26Smrgvoid TGA2SetupMode(ScrnInfoPtr pScrn);
1527706df26Smrgvoid Ibm561Init(TGAPtr pTga);
1537706df26Smrgvoid Bt463Init(TGAPtr pTga);
1547706df26Smrg
1557706df26Smrg/* tga_accel.c */
1567706df26SmrgBool DEC21030AccelInit(ScreenPtr pScreen);
1577706df26Smrg
1587706df26Smrg/* BTramdac.c */
1597706df26Smrgvoid tgaBTOutIndReg(ScrnInfoPtr pScrn,
1607706df26Smrg		     CARD32 reg, unsigned char mask, unsigned char data);
1617706df26Smrgunsigned char tgaBTInIndReg(ScrnInfoPtr pScrn, CARD32 reg);
1627706df26Smrgvoid tgaBTWriteAddress(ScrnInfoPtr pScrn, CARD32 index);
1637706df26Smrgvoid tgaBTReadAddress(ScrnInfoPtr pScrn, CARD32 index);
1647706df26Smrgvoid tgaBTWriteData(ScrnInfoPtr pScrn, unsigned char data);
1657706df26Smrgunsigned char tgaBTReadData(ScrnInfoPtr pScrn);
1667706df26Smrg
1677706df26Smrgvoid tga2BTOutIndReg(ScrnInfoPtr pScrn,
1687706df26Smrg		     CARD32 reg, unsigned char mask, unsigned char data);
1697706df26Smrgunsigned char tga2BTInIndReg(ScrnInfoPtr pScrn, CARD32 reg);
1707706df26Smrgvoid tga2BTWriteAddress(ScrnInfoPtr pScrn, CARD32 index);
1717706df26Smrgvoid tga2BTReadAddress(ScrnInfoPtr pScrn, CARD32 index);
1727706df26Smrgvoid tga2BTWriteData(ScrnInfoPtr pScrn, unsigned char data);
1737706df26Smrgunsigned char tga2BTReadData(ScrnInfoPtr pScrn);
1747706df26Smrg
1757706df26Smrg/* BT463ramdac.c */
1767706df26Smrgvoid BT463ramdacSave(ScrnInfoPtr pScrn, unsigned char *data);
1777706df26Smrgvoid BT463ramdacRestore(ScrnInfoPtr pScrn, unsigned char *data);
1787706df26Smrg
1797706df26Smrg/* IBM561ramdac.c */
1807706df26Smrgvoid IBM561ramdacSave(ScrnInfoPtr pScrn, unsigned char *data);
1817706df26Smrgvoid IBM561ramdacHWInit(ScrnInfoPtr pScrn);
1827706df26Smrgvoid IBM561ramdacRestore(ScrnInfoPtr pScrn, unsigned char *data);
1837706df26Smrgunsigned char IBM561ReadReg(ScrnInfoPtr pScrn, CARD32 reg);
1847706df26Smrgvoid IBM561WriteReg(ScrnInfoPtr pScrn, CARD32 reg, unsigned char data);
1857706df26Smrg
1867706df26Smrg/* tga_cursor.c */
1877706df26SmrgBool TGAHWCursorInit(ScreenPtr pScreen);
1887706df26Smrg
1897706df26Smrg/* tga_line.c */
1907706df26Smrg
1917706df26Smrgvoid TGAPolySegment(DrawablePtr pDrawable, GCPtr pGC, int nseg,
1927706df26Smrg		    xSegment *pSeg);
1937706df26Smrgvoid TGAPolyLines(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
1947706df26Smrg		  DDXPointPtr pptInit);
1957706df26Smrgvoid TGAPolySegmentDashed(DrawablePtr pDrawable, GCPtr pGC, int	nseg,
1967706df26Smrg			  xSegment *pSeg);
1977706df26Smrgvoid TGAPolyLinesDashed(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt,
1987706df26Smrg			DDXPointPtr pptInit);
1997706df26Smrg
2007706df26Smrg/* line functions */
2017706df26Smrgvoid
2027706df26SmrgTGASetupForSolidLine(ScrnInfoPtr pScrn, int color, int rop,
2037706df26Smrg		      unsigned int planemask);
2047706df26Smrgvoid
2057706df26SmrgTGASubsequentSolidHorVertLine(ScrnInfoPtr pScrn, int x, int y, int len,
2067706df26Smrg			      int dir);
2077706df26Smrgvoid
2087706df26SmrgTGASubsequentSolidLine(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2,
2097706df26Smrg		       int octant, int flags);
2107706df26Smrgvoid
2117706df26SmrgTGASetupForClippedLine(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2,
2127706df26Smrg		       int octant);
2137706df26Smrgvoid
2147706df26SmrgTGASubsequentClippedSolidLine(ScrnInfoPtr pScrn, int x1, int y1, int len,
2157706df26Smrg			      int err);
2167706df26Smrg
2177706df26Smrgvoid
2187706df26SmrgTGASetupForDashedLine(ScrnInfoPtr pScrn, int fg, int bg, int rop,
2197706df26Smrg		      unsigned int planemask, int length,
2207706df26Smrg		      unsigned char *pattern);
2217706df26Smrgvoid
2227706df26SmrgTGASubsequentDashedLine(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2,
2237706df26Smrg			int octant, int flags, int phase);
2247706df26Smrgvoid
2257706df26SmrgTGASubsequentClippedDashedLine(ScrnInfoPtr pScrn, int x1, int y1, int len,
2267706df26Smrg			       int err, int phase);
2277706df26Smrg
2287706df26Smrg
2297706df26Smrg
2307706df26Smrg
2317706df26Smrg#endif /* _TGA_H_ */
2327706df26Smrg
233