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