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