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 
60 typedef unsigned char	u8;
61 typedef unsigned short	u16;
62 typedef unsigned long	u32;
63 
64 #define NoSEQRegs	0x20
65 #define NoCRTRegs	0x1F
66 #define NoGRCRegs	0x09
67 #define	NoATCRegs	0x15
68 
69 enum {
70     XR80, XRC0, XRD0, XRE0, XRE8, XREC, XR140, XR144, XR148, XR14C, NoEXRegs
71 };
72 
73 typedef 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 
81 typedef 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 
92 typedef 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 
185 typedef struct {
186     u16		ca;
187     u8		font;
188     u8		pad;
189 } ApmFontBuf;
190 
191 typedef struct {
192     u16		ca;
193     u8		font;
194     u8		pad;
195     u16		ca2;
196     u8		font2;
197     u8		pad2;
198 } ApmTextBuf;
199 
200 enum ApmChipId {
201     AP6422	= 0x6422,
202     AT24	= 0x6424,
203     AT3D	= 0x643D
204 };
205 
206 typedef 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 
217 extern int	ApmHWCursorInit(ScreenPtr pScreen);
218 extern int	ApmDGAInit(ScreenPtr pScreen);
219 extern int	ApmAccelInit(ScreenPtr pScreen);
220 extern Bool	ApmI2CInit(ScrnInfoPtr pScrn);
221 extern void	XFree86RushExtensionInit(ScreenPtr pScreen);
222 extern void	ApmInitVideo(ScreenPtr pScreen);
223 extern void	ApmInitVideo_IOP(ScreenPtr pScreen);
224 #ifdef HAVE_XAA_H
225 extern void	ApmSetupXAAInfo(ApmPtr pApm, XAAInfoRecPtr pXAAinfo);
226 #endif
227 extern Bool     ApmSwitchMode(SWITCH_MODE_ARGS_DECL);
228 extern void     ApmAdjustFrame(ADJUST_FRAME_ARGS_DECL);
229 extern void	ApmHWCursorReserveSpace(ApmPtr pApm);
230 extern void	ApmAccelReserveSpace(ApmPtr pApm);
231 
232 #ifdef XF86RUSH
233 extern 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