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