v2kregs.h revision bdcaa8d0
1/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/rendition/v2kregs.h,v 1.4 1999/11/19 13:54:46 hohndel Exp $ */
2#ifndef __V2KREGS_H__
3#define __V2KREGS_H__
4
5/* New registers and values found from V2K and on */
6#define STATUS          0x4A /* specifies which blocks of the V2000 are busy */
7#define XBUSCTL         0x4B /* XBus control register */
8
9#define SCLKPLL         0x68 /* system clock PLL control register */
10#define SCRATCH         0x70 /* 16-bit BIOS scratch space */
11
12#define MEMDIAG         0xa4 /* Memory diagnostic register #1 */
13#define CURSORBASE      0xac /* cursor base address bits [23:10] aligne to 1024 byte boundary */
14
15#define PCLKPLL         0xc0 /* external device 0 */
16#define VINEVENBASE     0xd0 /* video input even field base address */
17#define VINODDBASE      0xd4 /* video input odd field base address */
18#define WRITEINTR0ADDR  0xd8 /* Memory write interrupt address0 */
19#define WRITEINTR1ADDR  0xdc /* Memory write interrupt address1 */
20#define DEVICE0_V2x000  0xf0 /* external device 1 (PLL) */
21
22/*
23 * PCLKPLL/SCLKPLL register bit defn
24 */
25#define PCLKPLLPMASK	0xffffe1ff
26#define SCLKPLLPMASK	0xffffe1ff
27#define MCLKPLLPMASK	0xfffe1fff
28#define PLLPCLKP	9
29#define PLLSCLKP	9
30#define PLLMCLKP	13
31#define PLLPCLKN	13
32#define PLLSCLKN	17
33#define PLLPCLKDOUBLE	26	/* bit 26 in PClkPLL register */
34
35#define DIRECTPCLKMASK	0x00400000
36#define DIRECTMCLKMASK	0x00800000
37
38#define VGASTDCLOCK     0x100000
39#define EXTRADIV2       0x200000
40
41#define PLLINCLKFREQ	14318 /* PLL input clk freq in KHz */
42
43/*
44 * memory controller
45 */
46#define MCLK_BYPASSEDGEFREQ 90000 /* in KHz */
47
48/*
49 * Microcode commands
50 */
51#define	CMD_SETPALETTE	0x21
52
53/*
54 * MMIO registers
55 */
56
57#define MMIO_FIFOINFREE	    0x20040
58#define MMIO_COMM           0x20042
59#define MMIO_FIFOOUTVALID   0x20041
60#define MMIO_INTR           0x20044 /* which interrupts occurred */
61#define MMIO_DMACMDPTR      0x20050
62#define MMIO_CRTCHORZ       0x20088 /* CRTC horizontal timing */
63#define MMIO_CRTCVERT       0x2008c /* CRTC vertical timing */
64#define MMIO_CRTCSTATUS	    0x2009c
65#define MMIO_DACRAMWRITEADR 0x200b0 /* Palette Write Index */
66#define MMIO_DACRAMDATA     0x200b1 /* Palette Data */
67#define MMIO_VINEVENBASE    0x200d0 /* video input even field base address */
68#define MMIO_VINODDBASE     0x200d4 /* video input odd field base address */
69#define MMIO_WRITEINTR0ADDR 0x200d8 /* Memory write interrupt address0 */
70#define MMIO_WRITEINTR1ADDR 0x200dc /* Memory write interrupt address1 */
71
72#define HOST_INTERRUPT_MUTEX 1
73
74/* memory mapped IO register structure */
75typedef struct _v_mem_io {
76    vu32	fifo_swap_no[0x2000];	/* 0x0 */
77    vu32	fifo_swap_end[0x2000];	/* 0x4000 */
78    vu32	fifo_swap_inhw[0x2000];	/* 0x8000 */
79    vu32	fifo_swap_hw[0x2000];	/* 0xC000 */
80    vu32	reserved0[0x10];	/* 0x10000 */
81    vu8 	fifoinFree;		/* 0x10040 */
82    vu8 	fifooutvalid;		/* 0x10041 */
83    vu8 	comm;			/* 0x10042 */
84    vu8 	memendian;		/* 0x10043 */
85    vu8 	intr;			/* 0x10044 */
86    vu8 	reserved1;		/* 0x10045 */
87    vu8 	intren;			/* 0x10046 */
88    vu8 	reserved2;		/* 0x10047 */
89    vu8 	debugreg;		/* 0x10048 */
90    vu8 	lowwatermark;		/* 0x10049 */
91    vu8 	status;			/* 0x1004a */
92    vu8 	xbusctl;		/* 0x1004b */
93    vu8 	pcitest;		/* 0x1004c */
94    vu8 	reserved3[3];		/* 0x1004d */
95    vu32	dmacmdptr;		/* 0x10050 */
96    vu32	dma_address;		/* 0x10054 */
97    vu32	dma_count;		/* 0x10058 */
98    vu8 	vga_extend;		/* 0x1005c */
99    vu8 	reserved4;		/* 0x1005d */
100    vu8 	membase;		/* 0x1005e */
101    vu8 	reserved5;		/* 0x1005f */
102    vu32	stateindex;		/* 0x10060 */
103    vu32	statedata;		/* 0x10064 */
104    vu8 	sclkpll;		/* 0x10068 */
105    vu8 	reserved6[7];		/* 0x10069 */
106    vu16	scratch;		/* 0x10070 */
107    vu8 	mode;			/* 0x10072 */
108    vu8 	scratch1;		/* 0x10073 */
109    vu8 	bankselect;		/* 0x10074 */
110    vu8 	reserved7[11];		/* 0x10075 */
111    vu32	crtctest;		/* 0x10080 */
112    vu32	crtcctl;		/* 0x10084 */
113    vu32	crtchorz;		/* 0x10088 */
114    vu32	crtcvert;		/* 0x1008c */
115    vu32	framebaseb;		/* 0x10090 */
116    vu32	framebasea;		/* 0x10094 */
117    vu32	crtcoffset;		/* 0x10098 */
118    vu32	crtcstatus;		/* 0x1009c */
119    vu32	memctl;			/* 0x100a0 */
120    vu32	memdiag;		/* 0x100a4 */
121    vu32	memcmd;			/* 0x100a8 */
122    vu32	cursorbase;		/* 0x100ac */
123    vu8 	dacramwriteadr;		/* 0x100b0 */
124    vu8 	dacramdata;		/* 0x100b1 */
125    vu8 	dacpixelmsk;		/* 0x100b2 */
126    vu8 	dacramreadadr;		/* 0x100b3 */
127    vu8 	dacovswriteadr;		/* 0x100b4 */
128    vu8 	dacovsdata;		/* 0x100b5 */
129    vu8 	daccommand0;		/* 0x100b6 */
130    vu8 	dacovsreadadr;		/* 0x100b7 */
131    vu8 	daccommand1;		/* 0x100b8 */
132    vu8 	daccommand2;		/* 0x100b9 */
133    vu8 	daccommand3;		/* 0x100ba */
134    vu8 	daccursordata;		/* 0x100bb */
135    vu8 	daccursorxlow;		/* 0x100bc */
136    vu8 	daccursorxhigh;		/* 0x100bd */
137    vu8 	daccursorylow;		/* 0x100be */
138    vu8 	daccursoryhigh;		/* 0x100bf */
139    vu8 	pclkpll;		/* 0x100c0 */
140} v_mem_io;
141
142/* IO register flag bits */
143/* _MASK defined for multi-bit values */
144/* _ADDR defined for registers accessible from RISC */
145
146/* COMM */
147#define SYSSTATUS_MASK  0x0f /* host->RISC comm */
148#define SYSSTATUS_SHIFT 0
149#define RISCSTATUS_MASK 0xf0 /* RISC->host comm r/o */
150#define RISCSTATUS_SHIFT 4
151
152/* MEMENDIAN */
153#define MEMENDIAN_NO    0       /* No byte swap. */
154#define MEMENDIAN_END   1       /* Swap bytes 3<>0, 2<>1. */
155#define MEMENDIAN_INHW  2       /* Swap bytes 3<>2, 1<>0. */
156#define MEMENDIAN_HW    3       /* Swap half-words. */
157#define MEMENDIAN_MASK  3
158#define MEMENDIAN_SHIFT 0
159
160#define DMABUSY         0x80    /* DMA busy r/o */
161#define DMACMDPTR_DMABUSY       0x1     /* corresponding bit in other reg */
162
163/* INTR */
164#define VERTINTR        0x01 /* vert retrace */
165#define FIFOLOWINTR     0x02 /* free entries rose above low water */
166#define RISCINTR        0x04 /* RISC firmware interrupt */
167#define HALTINTR        0x08 /* RISC halted */
168#define FIFOERRORINTR   0x10 /* FIFO under/over flow */
169#define DMAERRORINTR    0x20 /* PCI error during DMA */
170#define DMAINTR         0x40 /* DMA done interrupt */
171#define XINTR           0x80 /* external device pass thru intr */
172#define VIDEOINEVENINTR	0x100 /* Video input even field interrupt */
173#define VIDEOINODDINTR	0x100 /* Video input even field interrupt */
174
175/* INTREN */
176#define VERTINTREN      0x01 /* vert retrace */
177#define FIFOLOWINTREN   0x02 /* free entries rose above low water */
178#define RISCINTREN      0x04 /* RISC firmware interrupt */
179#define HALTINTREN      0x08 /* RISC halted */
180#define FIFOERRORINTREN 0x10 /* FIFO under/over flow */
181#define DMAERRORINTREN  0x20 /* PCI error during DMA */
182#define DMAINTREN       0x40 /* DMA done interrupt */
183#define XINTREN         0x80 /* external device pass thru intr */
184
185/* DEBUG */
186#define SOFTRESET       0x01 /* soft reset chip */
187#define HOLDRISC        0x02 /* stop RISC when set */
188#define STEPRISC        0x04 /* single step RISC */
189#define DIRECTSCLK      0x08 /* disable internal divide by 2 for sys clk */
190#define SOFTVGARESET    0x10 /* assert VGA reset */
191#define SOFTXRESET      0x20 /* assert XReset output to ext devices */
192
193/* MODE_ register */
194#define VESA_MODE       0x01 /* enable 0xA0000 in native mode */
195#define VGA_MODE        0x02 /* VGA mode if set else native mode */
196#define VGA_32          0x04 /* enable VGA 32 bit accesses */
197#define DMA_EN          0x08 /* enable DMA accesses */
198
199#define NATIVE_MODE     0    /* not VESA and not VGA */
200
201/* DRAM register */
202#define DRAMCTL_ADDR    0xffe00500
203
204/* CRTC registers */
205#define CRTCTEST_ADDR   0xffe00400
206#define CRTCCTL_ADDR    0xffe00420
207#define CRTCHORZ_ADDR   0xffe00440
208#define CRTCVERT_ADDR   0xffe00460
209#define FRAMEBASEB_ADDR 0xffe00480
210#define FRAMEBASEA_ADDR 0xffe004a0
211#define CRTCOFFSET_ADDR 0xffe004c0
212#define CRTCSTATUS_ADDR 0xffe004e0
213
214#define CRTCTEST_VIDEOLATENCY_MASK      0x1F
215#define CRTCTEST_NOTVBLANK      0x10000
216#define CRTCTEST_VBLANK         0x40000
217
218#define CRTCCTL_SCRNFMT_MASK    0xF
219#define CRTCCTL_VIDEOFIFOSIZE128        0x10
220#define CRTCCTL_ENABLEDDC       0x20
221#define CRTCCTL_DDCOUTPUT       0x40
222#define CRTCCTL_DDCDATA         0x80
223#define CRTCCTL_VSYNCHI         0x100
224#define CRTCCTL_HSYNCHI         0x200
225#define CRTCCTL_VSYNCENABLE     0x400
226#define CRTCCTL_HSYNCENABLE     0x800
227#define CRTCCTL_VIDEOENABLE     0x1000
228#define CRTCCTL_STEREOSCOPIC    0x2000
229#define CRTCCTL_FRAMEDISPLAYED  0x4000
230#define CRTCCTL_FRAMEBUFFERBGR  0x8000
231#define CRTCCTL_EVENFRAME       0x10000
232#define CRTCCTL_LINEDOUBLE      0x20000
233#define CRTCCTL_FRAMESWITCHED   0x40000
234#define CRTCCTL_VIDEOFIFOSIZE256        0x800000
235
236#define CRTCHORZ_ACTIVE_MASK    	0xFF
237#define CRTCHORZ_ACTIVE_SHIFT    	0
238#define CRTCHORZ_BACKPORCH_MASK 	0x7E00
239#define CRTCHORZ_BACKPORCH_SHIFT 	11
240#define CRTCHORZ_SYNC_MASK      	0x1F0000L
241#define CRTCHORZ_SYNC_SHIFT      	16
242#define CRTCHORZ_FRONTPORCH_MASK    0xE00000L
243#define CRTCHORZ_FRONTPORCH_SHIFT   20
244
245#define CRTCVERT_ACTIVE_MASK    	0x7FF
246#define CRTCVERT_BACKPORCH_MASK 	0x1F800
247#define CRTCVERT_SYNC_MASK      	0xE0000
248#define CRTCVERT_FRONTPORCH_MASK    0x03F00000
249
250#define CRTCOFFSET_MASK         0xFFFF
251
252#define CRTCSTATUS_HORZCLOCKS_MASK      0xFF
253#define CRTCSTATUS_HORZ_MASK    0x600
254#define CRTCSTATUS_HORZ_FPORCH  0x200
255#define CRTCSTATUS_HORZ_SYNC    0x600
256#define CRTCSTATUS_HORZ_BPORCH  0x400
257#define CRTCSTATUS_HORZ_ACTIVE  0x000
258#define CRTCSTATUS_SCANLINESLEFT_MASK   0x003FF800
259#define CRTCSTATUS_VERT_MASK    0xC00000
260#define CRTCSTATUS_VERT_FPORCH  0x400000
261#define CRTCSTATUS_VERT_SYNC    0xC00000
262#define CRTCSTATUS_VERT_BPORCH  0x800000
263#define CRTCSTATUS_VERT_ACTIVE  0x000000
264
265/* RAMDAC registers - avail through I/O space */
266
267#define DACRAMWRITEADR  0xb0
268#define DACRAMDATA      0xb1
269#define DACPIXELMSK     0xb2
270#define DACRAMREADADR   0xb3
271#define DACOVSWRITEADR  0xb4
272#define DACOVSDATA      0xb5
273#define DACCOMMAND0     0xb6
274#define DACOVSREADADR   0xb7
275#define DACCOMMAND1     0xb8
276#define DACCOMMAND2     0xb9
277#define DACSTATUS       0xba
278#define DACCOMMAND3     0xba    /* accessed via unlocking/indexing */
279#define DACCURSORDATA   0xbb
280#define DACCURSORXLOW   0xbc
281#define DACCURSORXHIGH  0xbd
282#define DACCURSORYLOW   0xbe
283#define DACCURSORYHIGH  0xbf
284
285#define BT_CO_COLORWR_ADDR	DACOVSWRITEADR
286#define BT_CO_COLORDATA		DACOVSDATA
287#define BT_PTR_ROWOFFSET	32
288#define BT_PTR_COLUMNOFFSET	32
289
290/* PCLKPLL register */
291#define PLLDEV          DEVICE0
292#define VOUTEN			0x00080000L	/* bit 19 */
293#define VGASCLKOVER2	0x00100000L	/* bit 20 */
294#define PCLKSTARTEN		0x00800000L	/* bit 23 */
295
296/* Some state indices */
297#define STATEINDEX_IR   128
298#define STATEINDEX_PC   129
299#define STATEINDEX_S1   130
300
301/* PCI configuration registers. */
302#define CONFIGIOREG        0xE0000014
303#define CONFIGENABLE       0xE0000004
304#ifdef USEROM
305#define CONFIGROMREG       0xE0000030
306#endif
307
308/* Cache parameters. */
309#define ICACHESIZE       2048 /* I cache size. */
310#define ICACHELINESIZE     32 /* I cache line size. */
311#ifndef ICACHE_ONOFF_MASK
312#define ICACHE_ONOFF_MASK  (((v_u32)1<<17)|(1<<3))
313#define ICACHE_ON          ((0<<17)|(0<<3))
314#define ICACHE_OFF         (((v_u32)1<<17)|(1<<3))
315#endif
316
317/* Video registers */
318#define BT829_DEV                 DEVICE0
319#define VIDEO_DECODER_DEV_ENABLE  0x4
320#define VIDEO_DECODER_DEV_DISABLE 0x0
321
322#define VINBASE_MASK     0x1FFFFFL
323#define VINMAXVERT_SHIFT 24
324#define VINSTRIDE_SHIFT  27
325#define VINQSIZE_SHIFT   30
326
327#define VINORDER_SHIFT   24
328#define ACTIVE_LOW        0
329#define ACTIVE_HI         1L
330#define VINHSYNCHI_SHIFT 26
331#define VINVSYNCHI_SHIFT 27
332#define VINACTIVE_SHIFT  28
333#define VINNOODD_SHIFT   29
334#define VINENABLE_SHIFT  30
335
336#endif /* __V2KREGS_H__ */
337