1
2#include "apm_pcirename.h"
3#include <string.h>
4
5/* All drivers should typically include these */
6#include "xf86.h"
7#include "xf86_OSproc.h"
8
9/* All drivers need this */
10
11/* Everything using inb/outb, etc needs "compiler.h" */
12#include "compiler.h"
13
14/* Drivers that need to access the PCI config space directly need this */
15#include "xf86Pci.h"
16
17/* All drivers using the vgahw module need this */
18#include "vgaHW.h"
19
20/* All drivers using the mi colormap manipulation need this */
21#include "micmap.h"
22
23#include "fb.h"
24
25/* Drivers using the XAA interface ... */
26#ifdef HAVE_XAA_H
27#include "xaa.h"
28#include "xaalocal.h"
29#endif
30#include "xf86Cursor.h"
31#include "xf86fbman.h"
32
33/* All drivers initialising the SW cursor need this */
34#include "mipointer.h"
35
36/* I2C support */
37#include "xf86i2c.h"
38
39/* DDC support */
40#include "xf86DDC.h"
41
42#include "xf86xv.h"
43#include <X11/extensions/Xv.h>
44
45#include "compat-api.h"
46#ifdef TRUE
47#undef TRUE
48#endif
49#define TRUE	(1)
50
51#define rdinx(port, ind)	(outb((port), (ind)), inb((port) + 1))
52#define wrinx(port, ind, val)	outb((port), (ind)),  outb((port) + 1, (val))
53#define modinx(port, ind, mask, bits)					\
54    do {								\
55	unsigned char tmp;						\
56	tmp = (rdinx((port), (ind)) & ~(mask)) | ((bits) & (mask));	\
57	wrinx((port), (ind), tmp);					\
58    } while(0)
59
60typedef unsigned char	u8;
61typedef unsigned short	u16;
62typedef unsigned long	u32;
63
64#define NoSEQRegs	0x20
65#define NoCRTRegs	0x1F
66#define NoGRCRegs	0x09
67#define	NoATCRegs	0x15
68
69enum {
70    XR80, XRC0, XRD0, XRE0, XRE8, XREC, XR140, XR144, XR148, XR14C, NoEXRegs
71};
72
73typedef struct {
74	unsigned char	SEQ[NoSEQRegs];
75	unsigned char	CRT[NoCRTRegs];
76	unsigned char	GRC[NoGRCRegs];
77	unsigned char	ATC[NoATCRegs];
78	unsigned int	EX[NoEXRegs];
79} ApmRegStr, *ApmRegPtr;
80
81typedef struct {
82    int			displayWidth, displayHeight;
83    int			bitsPerPixel, bytesPerScanline;
84    int			depth, Scanlines;
85    CARD32		mask32;		/* Mask to have 32bit aligned data */
86    unsigned int	Setup_DEC;
87    DisplayModePtr	pMode;
88} ApmFBLayout;
89
90#define APM_CACHE_NUMBER	32
91
92typedef struct {
93    pciVideoPtr		PciInfo;
94#ifndef XSERVER_LIBPCIACCESS
95    PCITAG		PciTag;
96#endif
97    int			scrnIndex;
98    int			Chipset;
99    int			ChipRev;
100    CARD32		LinAddress;
101    unsigned long	LinMapSize;
102    CARD32		FbMapSize;
103    pointer		LinMap;
104    pointer		FbBase;
105    char		*VGAMap;
106    char		*MemMap;
107    pointer		BltMap;
108    Bool		UnlockCalled;
109    unsigned long	iobase, xport, xbase;
110    unsigned char	savedSR10;
111    CARD8		MiscOut;
112    CARD8		c9, d9, db, Rush;
113    unsigned int	saveCmd;
114    pointer		FontInfo;
115    Bool		hwCursor;
116    ApmRegStr		ModeReg, SavedReg;
117    CloseScreenProcPtr	CloseScreen;
118    Bool		UsePCIRetry;  /* Do we use PCI-retry or busy-waiting */
119    Bool		NoAccel;  /* Do we use XAA acceleration architecture */
120    int			MinClock;                        /* Min ramdac clock */
121    int			MaxClock;                        /* Max ramdac clock */
122    ApmFBLayout		CurrentLayout, SavedLayout;
123    EntityInfoPtr	pEnt;
124#ifdef HAVE_XAA_H
125    XAAInfoRecPtr	AccelInfoRec, DGAXAAInfo;
126#endif
127    xf86CursorInfoPtr	CursorInfoRec;
128    int			DGAactive, numDGAModes;
129    DGAModePtr		DGAModes;
130    int			BaseCursorAddress,CursorAddress,DisplayedCursorAddress;
131    int			OffscreenReserved;
132    int			blitxdir, blitydir;
133    Bool		apmTransparency, apmClip, ShadowFB, I2C;
134    int			rop, Bg8x8, Fg8x8;
135    I2CBusPtr		I2CPtr;
136#ifdef HAVE_XAA_H
137    struct ApmStippleCacheRec {
138	XAACacheInfoRec		apmStippleCache;
139	FBAreaPtr		area;
140	unsigned int		apmStippleCached:1;
141    }			apmCache[APM_CACHE_NUMBER];
142#endif
143    int			apmCachePtr;
144    unsigned char	regcurr[0x54];
145    ScreenPtr		pScreen;
146    int			Generation;
147    int			apmLock, pixelStride, RushY[7], CopyMode;
148    int			PutImageStride;
149    Bool		(*DestroyPixmap)(PixmapPtr);
150    PixmapPtr		(*CreatePixmap)(ScreenPtr, int, int, int);
151    void (*SetupForSolidFill)(ScrnInfoPtr pScrn, int color, int rop,
152					unsigned int planemask);
153    void (*SubsequentSolidFillRect)(ScrnInfoPtr pScrn, int x, int y,
154				       int w, int h);
155    void (*SetupForSolidFill24)(ScrnInfoPtr pScrn, int color, int rop,
156					unsigned int planemask);
157    void (*SubsequentSolidFillRect24)(ScrnInfoPtr pScrn, int x, int y,
158				       int w, int h);
159    void (*SetupForScreenToScreenCopy)(ScrnInfoPtr pScrn, int xdir, int ydir,
160					  int rop, unsigned int planemask,
161                                          int transparency_color);
162    void (*SubsequentScreenToScreenCopy)(ScrnInfoPtr pScrn, int x1, int y1,
163					    int x2, int y2, int w, int h);
164    void (*SetupForScreenToScreenCopy24)(ScrnInfoPtr pScrn, int xdir, int ydir,
165					  int rop, unsigned int planemask,
166                                          int transparency_color);
167    void (*SubsequentScreenToScreenCopy24)(ScrnInfoPtr pScrn, int x1, int y1,
168					    int x2, int y2, int w, int h);
169    int			MemClk;
170    unsigned char	*ShadowPtr;
171    int			ShadowPitch;
172    memType		ScratchMem, ScratchMemSize, ScratchMemOffset;
173    memType		ScratchMemPtr, ScratchMemEnd;
174    int			ScratchMemWidth;
175    CARD32		color;
176    XF86VideoAdaptorPtr	adaptor;
177    int			timerIsOn;
178    Time		offTime;
179    OptionInfoPtr	Options;
180    char		DPMSMask[4];
181} ApmRec, *ApmPtr;
182
183#define curr		((unsigned char *)pApm->regcurr)
184
185typedef struct {
186    u16		ca;
187    u8		font;
188    u8		pad;
189} ApmFontBuf;
190
191typedef struct {
192    u16		ca;
193    u8		font;
194    u8		pad;
195    u16		ca2;
196    u8		font2;
197    u8		pad2;
198} ApmTextBuf;
199
200enum ApmChipId {
201    AP6422	= 0x6422,
202    AT24	= 0x6424,
203    AT3D	= 0x643D
204};
205
206typedef struct {
207    BoxRec			box;
208    int				num;
209    MoveAreaCallbackProcPtr	MoveAreaCallback;
210    RemoveAreaCallbackProcPtr	RemoveAreaCallback;
211    void			*devPriv;
212} ApmPixmapRec, *ApmPixmapPtr;
213
214#define APMDECL(p)	ApmPtr pApm = ((ApmPtr)(((ScrnInfoPtr)(p))->driverPrivate))
215#define APMPTR(p)	((ApmPtr)(((ScrnInfoPtr)(p))->driverPrivate))
216
217extern int	ApmHWCursorInit(ScreenPtr pScreen);
218extern int	ApmDGAInit(ScreenPtr pScreen);
219extern int	ApmAccelInit(ScreenPtr pScreen);
220extern Bool	ApmI2CInit(ScrnInfoPtr pScrn);
221extern void	XFree86RushExtensionInit(ScreenPtr pScreen);
222extern void	ApmInitVideo(ScreenPtr pScreen);
223extern void	ApmInitVideo_IOP(ScreenPtr pScreen);
224#ifdef HAVE_XAA_H
225extern void	ApmSetupXAAInfo(ApmPtr pApm, XAAInfoRecPtr pXAAinfo);
226#endif
227extern Bool     ApmSwitchMode(SWITCH_MODE_ARGS_DECL);
228extern void     ApmAdjustFrame(ADJUST_FRAME_ARGS_DECL);
229extern void	ApmHWCursorReserveSpace(ApmPtr pApm);
230extern void	ApmAccelReserveSpace(ApmPtr pApm);
231
232#ifdef XF86RUSH
233extern int	ApmPixmapIndex;
234#define APM_GET_PIXMAP_PRIVATE(pix)\
235	((ApmPixmapPtr)(((PixmapPtr)(pix))->devPrivates[ApmPixmapIndex].ptr))
236#endif
237
238#include "apm_regs.h"
239