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