newport.h revision ba0eab60
1/*
2 * Id: newport.h,v 1.4 2000/11/29 20:58:10 agx Exp $
3 */
4/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/newport/newport.h,v 1.9 2002/09/30 22:17:55 alanh Exp $ */
5
6#ifndef __NEWPORT_H__
7#define __NEWPORT_H__
8
9/* use 32bpp shadow framebuffer surface instead of 24bpp */
10#define NEWPORT_USE32BPP
11/* enable accel patch */
12#define NEWPORT_ACCEL
13
14#ifdef NEWPORT_ACCEL
15#ifndef NEWPORT_USE32BPP
16#define NEWPORT_USE32BPP
17#endif
18#endif
19
20/*
21 * All drivers should include these:
22 */
23#include "xf86.h"
24#include "xf86_OSproc.h"
25#include "compiler.h"
26#include "xf86Resources.h"
27
28#include "xf86cmap.h"
29
30/* xaa & hardware cursor */
31#include "xaa.h"
32#include "xaalocal.h"
33#include "xf86Cursor.h"
34
35/* register definitions of the Newport card */
36#include "newport_regs.h"
37
38#define NEWPORT_BASE_ADDR0  0x1f0f0000
39#define NEWPORT_BASE_OFFSET 0x00400000
40#define NEWPORT_MAX_BOARDS 4
41
42#if 0
43# define DEBUG 1
44#endif
45
46#ifdef DEBUG
47# define TRACE_ENTER(str)       ErrorF("newport: " str " %d\n",pScrn->scrnIndex)
48# define TRACE_EXIT(str)        ErrorF("newport: " str " done\n")
49# define TRACE(str)             ErrorF("newport trace: " str "\n")
50#else
51# define TRACE_ENTER(str)
52# define TRACE_EXIT(str)
53# define TRACE(str)
54#endif
55
56typedef struct {
57	unsigned busID;
58	int bitplanes;
59	Bool NoAccel;
60	/* revision numbers of the various pieces of silicon */
61	unsigned int board_rev, cmap_rev, rex3_rev, xmap9_rev, bt445_rev;
62	/* shadow copies of frequently used registers */
63	NewportRegsPtr pNewportRegs;	/* Pointer to REX3 registers */
64	npireg_t drawmode1;		/* REX3 drawmode1 common to all drawing operations */
65	CARD16 vc2ctrl;                 /* VC2 control register */
66
67	/* ShadowFB stuff: */
68	CARD32* ShadowPtr;
69	unsigned long int ShadowPitch;
70	unsigned int Bpp;		/* Bytes per pixel */
71
72	/* HWCursour stuff: */
73	Bool hwCursor;
74	xf86CursorInfoPtr CursorInfoRec;
75	CARD16 curs_cmap_base;          /* MSB of the cursor's cmap */
76
77	/* wrapped funtions: */
78	CloseScreenProcPtr  CloseScreen;
79
80	/* newport register backups: */
81	npireg_t txt_drawmode0;		/* Rex3 drawmode0 register */
82	npireg_t txt_drawmode1;		/* Rex3 drawmode1 register */
83	npireg_t txt_wrmask;		/* Rex3 write mask register */
84	npireg_t txt_smask1x;		/* Rex3 screen mask 1 registers */
85	npireg_t txt_smask1y;
86	npireg_t txt_smask2x;		/* Rex3 screen mask 2 registers */
87	npireg_t txt_smask2y;
88	npireg_t txt_clipmode;		/* Rex3 clip mode register */
89
90	CARD16 txt_vc2ctrl;             /* VC2 control register */
91	CARD16 txt_vc2cur_x;            /* VC2 hw cursor x location */
92	CARD16 txt_vc2cur_y;            /* VC2 hw cursor x location */
93	CARD32  txt_vc2cur_data[64];    /* VC2 hw cursor glyph data */
94
95	CARD8  txt_xmap9_cfg0;		/* 0. Xmap9's control register */
96	CARD8  txt_xmap9_cfg1;		/* 1. Xmap9's control register */
97	CARD8  txt_xmap9_ccmsb;         /* cursor cmap msb */
98	CARD8  txt_xmap9_mi;		/* Xmap9s' mode index register */
99	CARD32 txt_xmap9_mod0;		/* Xmap9s' mode 0 register */
100
101	LOCO txt_colormap[256];
102
103	/* XAA stuff */
104	XAAInfoRecPtr pXAAInfoRec;
105        /* writing to these regs causes pipeline stall
106	   so be smart and check the shadow before writing it */
107	unsigned int shadow_drawmode1;
108	unsigned int shadow_colorvram;
109	unsigned int shadow_colorback;
110	unsigned int shadow_xymove;
111	unsigned int shadow_wrmask;
112	unsigned int shadow_clipmode;
113	unsigned int fifoleft; /* number of slots left in fifo */
114
115	unsigned int shadow_drawmode0;
116	unsigned int shadow_colori;
117	unsigned int shadow_smask0x;
118	unsigned int shadow_smask0y;
119
120	unsigned int setup_drawmode0;
121	unsigned int setup_drawmode1;
122	unsigned char dashline_pat[2048/8];
123	unsigned int dashline_patlen;
124
125	int clipsx, clipex, clipsy, clipey;
126	int skipleft;
127
128	unsigned int pat8x8[8][8];
129
130	unsigned int (*Color2Planes)(unsigned int color);
131
132#ifdef RENDER
133	unsigned int uTextureWidth;
134	unsigned int uTextureHeight;
135	unsigned int uTextureSize;
136	unsigned int *pTexture;
137	unsigned int uTextureFlags;
138#endif
139
140	OptionInfoPtr Options;
141} NewportRec, *NewportPtr;
142
143#define NEWPORTPTR(p) ((NewportPtr)((p)->driverPrivate))
144#define NEWPORTREGSPTR(p) ((NEWPORTPTR(p))->pNewportRegs)
145
146/* Newport_regs.c */
147unsigned short NewportVc2Get(NewportRegsPtr, unsigned char vc2Ireg);
148void NewportVc2Set(NewportRegsPtr pNewportRegs, unsigned char vc2Ireg, unsigned short val);
149void NewportWait(NewportRegsPtr pNewportRegs);
150void NewportBfwait(NewportRegsPtr pNewportRegs);
151void NewportXmap9SetModeRegister(NewportRegsPtr pNewportRegs, CARD8 address, CARD32 mode);
152CARD32 NewportXmap9GetModeRegister(NewportRegsPtr pNewportRegs, unsigned chip, CARD8 address);
153void NewportBackupRex3( ScrnInfoPtr pScrn);
154void NewportRestoreRex3( ScrnInfoPtr pScrn);
155void NewportBackupXmap9s( ScrnInfoPtr pScrn);
156void NewportRestoreXmap9s( ScrnInfoPtr pScrn);
157void NewportBackupVc2( ScrnInfoPtr pScrn);
158void NewportRestoreVc2( ScrnInfoPtr pScrn);
159void NewportBackupVc2Cursor( ScrnInfoPtr pScrn);
160void NewportRestoreVc2Cursor( ScrnInfoPtr pScrn);
161
162/* newort_cmap.c */
163void NewportLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
164			LOCO* colors, VisualPtr pVisual);
165void NewportRestorePalette(ScrnInfoPtr pScrn);
166void NewportBackupPalette(ScrnInfoPtr pScrn);
167void NewportCmapSetRGB( NewportRegsPtr pNewportRegs, unsigned short addr, LOCO color);
168
169/* newport_shadow.c */
170void NewportRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
171void NewportRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
172
173/* newport_cursor.c */
174Bool NewportHWCursorInit(ScreenPtr pScreen);
175void NewportLoadCursorImage(ScrnInfoPtr pScrn, unsigned char *bits);
176
177#endif /* __NEWPORT_H__ */
178