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