#ifndef _RCP_H_1#define _RCP_H_23/**************************************************************************4* *5* Copyright (C) 1995, Silicon Graphics, Inc. *6* *7* These coded instructions, statements, and computer programs contain *8* unpublished proprietary information of Silicon Graphics, Inc., and *9* are protected by Federal copyright law. They may not be disclosed *10* to third parties or copied or duplicated in any form, in whole or *11* in part, without the prior written consent of Silicon Graphics, Inc. *12* *13**************************************************************************/1415/**************************************************************************16*17* File: rcp.h18*19* This file contains register and bit definitions for RCP memory map.20* $Revision: 1.20 $21* $Date: 1997/07/23 08:35:21 $22* $Source: /disk6/Master/cvsmdev2/PR/include/rcp.h,v $23*24**************************************************************************/2526#include <PR/R4300.h>27#include <PR/ultratypes.h>2829/**********************************************************************30*31* Here is a quick overview of the RCP memory map:32*33340x0000_0000 .. 0x03ef_ffff RDRAM memory350x03f0_0000 .. 0x03ff_ffff RDRAM registers3637RCP registers (see below)380x0400_0000 .. 0x040f_ffff SP registers390x0410_0000 .. 0x041f_ffff DP command registers400x0420_0000 .. 0x042f_ffff DP span registers410x0430_0000 .. 0x043f_ffff MI registers420x0440_0000 .. 0x044f_ffff VI registers430x0450_0000 .. 0x045f_ffff AI registers440x0460_0000 .. 0x046f_ffff PI registers450x0470_0000 .. 0x047f_ffff RI registers460x0480_0000 .. 0x048f_ffff SI registers470x0490_0000 .. 0x04ff_ffff unused48490x0500_0000 .. 0x05ff_ffff cartridge domain 2500x0600_0000 .. 0x07ff_ffff cartridge domain 1510x0800_0000 .. 0x0fff_ffff cartridge domain 2520x1000_0000 .. 0x1fbf_ffff cartridge domain 153540x1fc0_0000 .. 0x1fc0_07bf PIF Boot Rom (1984 bytes)550x1fc0_07c0 .. 0x1fc0_07ff PIF (JoyChannel) RAM (64 bytes)560x1fc0_0800 .. 0x1fcf_ffff Reserved570x1fd0_0000 .. 0x7fff_ffff cartridge domain 1580x8000_0000 .. 0xffff_ffff external SysAD device5960The Indy development board use cartridge domain 1:610x1000_0000 .. 0x10ff_ffff RAMROM620x1800_0000 .. 0x1800_0003 GIO interrupt (6 bits valid in 4 bytes)630x1800_0400 .. 0x1800_0403 GIO sync (6 bits valid in 4 bytes)640x1800_0800 .. 0x1800_0803 CART interrupt (6 bits valid in 4 bytes)65666768**************************************************************************/697071/*************************************************************************72* RDRAM Memory (Assumes that maximum size is 4 MB)73*/74#define RDRAM_0_START 0x0000000075#define RDRAM_0_END 0x001FFFFF76#define RDRAM_1_START 0x0020000077#define RDRAM_1_END 0x003FFFFF7879#define RDRAM_START RDRAM_0_START80#define RDRAM_END RDRAM_1_END818283/*************************************************************************84* Address predicates85*/86#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)87#define IS_RDRAM(x) ((unsigned)(x) >= RDRAM_START && \88(unsigned)(x) < RDRAM_END)89#endif909192/*************************************************************************93* RDRAM Registers (0x03f0_0000 .. 0x03ff_ffff)94*/95#define RDRAM_BASE_REG 0x03F000009697#define RDRAM_CONFIG_REG (RDRAM_BASE_REG+0x00)98#define RDRAM_DEVICE_TYPE_REG (RDRAM_BASE_REG+0x00)99#define RDRAM_DEVICE_ID_REG (RDRAM_BASE_REG+0x04)100#define RDRAM_DELAY_REG (RDRAM_BASE_REG+0x08)101#define RDRAM_MODE_REG (RDRAM_BASE_REG+0x0c)102#define RDRAM_REF_INTERVAL_REG (RDRAM_BASE_REG+0x10)103#define RDRAM_REF_ROW_REG (RDRAM_BASE_REG+0x14)104#define RDRAM_RAS_INTERVAL_REG (RDRAM_BASE_REG+0x18)105#define RDRAM_MIN_INTERVAL_REG (RDRAM_BASE_REG+0x1c)106#define RDRAM_ADDR_SELECT_REG (RDRAM_BASE_REG+0x20)107#define RDRAM_DEVICE_MANUF_REG (RDRAM_BASE_REG+0x24)108109#define RDRAM_0_DEVICE_ID 0110#define RDRAM_1_DEVICE_ID 1111112#define RDRAM_RESET_MODE 0113#define RDRAM_ACTIVE_MODE 1114#define RDRAM_STANDBY_MODE 2115116#define RDRAM_LENGTH (2*512*2048)117#define RDRAM_0_BASE_ADDRESS (RDRAM_0_DEVICE_ID*RDRAM_LENGTH)118#define RDRAM_1_BASE_ADDRESS (RDRAM_1_DEVICE_ID*RDRAM_LENGTH)119120#define RDRAM_0_CONFIG 0x00000121#define RDRAM_1_CONFIG 0x00400122#define RDRAM_GLOBAL_CONFIG 0x80000123124125/*************************************************************************126* PIF Physical memory map (total size = 2 KB)127*128* Size Description Mode129* 1FC007FF +-------+-----------------+-----+130* | 64 B | JoyChannel RAM | R/W |131* 1FC007C0 +-------+-----------------+-----+132* |1984 B | Boot ROM | * | * = Reserved133* 1FC00000 +-------+-----------------+-----+134*135*/136#define PIF_ROM_START 0x1FC00000137#define PIF_ROM_END 0x1FC007BF138#define PIF_RAM_START 0x1FC007C0139#define PIF_RAM_END 0x1FC007FF140141142/*************************************************************************143* Controller channel144* Each game controller channel has 4 error bits that are defined in bit 6-7 of145* the Rx and Tx data size area bytes. Programmers need to clear these bits146* when setting the Tx/Rx size area values for a channel147*/148#define CHNL_ERR_NORESP 0x80 /* Bit 7 (Rx): No response error */149#define CHNL_ERR_OVERRUN 0x40 /* Bit 6 (Rx): Overrun error */150#define CHNL_ERR_FRAME 0x80 /* Bit 7 (Tx): Frame error */151#define CHNL_ERR_COLLISION 0x40 /* Bit 6 (Tx): Collision error */152153#define CHNL_ERR_MASK 0xC0 /* Bit 6-7: channel errors */154155156/*************************************************************************157* External device info158*/159#define DEVICE_TYPE_CART 0 /* ROM cartridge */160#define DEVICE_TYPE_BULK 1 /* ROM bulk */161#define DEVICE_TYPE_64DD 2 /* 64 Disk Drive */162#define DEVICE_TYPE_SRAM 3 /* SRAM */163164/*************************************************************************165* SP Memory166*/167#define SP_DMEM_START 0x04000000 /* read/write */168#define SP_DMEM_END 0x04000FFF169#define SP_IMEM_START 0x04001000 /* read/write */170#define SP_IMEM_END 0x04001FFF171172/*************************************************************************173* SP CP0 Registers174*/175176#define SP_BASE_REG 0x04040000177178/* SP memory address (R/W): [11:0] DMEM/IMEM address; [12] 0=DMEM,1=IMEM */179#define SP_MEM_ADDR_REG (SP_BASE_REG+0x00) /* Master */180181/* SP DRAM DMA address (R/W): [23:0] RDRAM address */182#define SP_DRAM_ADDR_REG (SP_BASE_REG+0x04) /* Slave */183184/* SP read DMA length (R/W): [11:0] length, [19:12] count, [31:20] skip */185/* direction: I/DMEM <- RDRAM */186#define SP_RD_LEN_REG (SP_BASE_REG+0x08) /* R/W: read len */187188/* SP write DMA length (R/W): [11:0] length, [19:12] count, [31:20] skip */189/* direction: I/DMEM -> RDRAM */190#define SP_WR_LEN_REG (SP_BASE_REG+0x0C) /* R/W: write len */191192/* SP status (R/W): [14:0] valid bits; see below for write/read mode */193#define SP_STATUS_REG (SP_BASE_REG+0x10)194195/* SP DMA full (R): [0] valid bit; dma full */196#define SP_DMA_FULL_REG (SP_BASE_REG+0x14)197198/* SP DMA busy (R): [0] valid bit; dma busy */199#define SP_DMA_BUSY_REG (SP_BASE_REG+0x18)200201/* SP semaphore (R/W): Read: [0] semaphore flag (set on read) */202/* Write: [] clear semaphore flag */203#define SP_SEMAPHORE_REG (SP_BASE_REG+0x1C)204205/* SP PC (R/W): [11:0] program counter */206#define SP_PC_REG 0x04080000207208/* SP MEM address: bit 12 specifies if address is IMEM or DMEM */209#define SP_DMA_DMEM 0x0000 /* Bit 12: 0=DMEM, 1=IMEM */210#define SP_DMA_IMEM 0x1000 /* Bit 12: 0=DMEM, 1=IMEM */211212/*213* Values to clear/set bit in status reg (SP_STATUS_REG - write)214*/215#define SP_CLR_HALT 0x00001 /* Bit 0: clear halt */216#define SP_SET_HALT 0x00002 /* Bit 1: set halt */217#define SP_CLR_BROKE 0x00004 /* Bit 2: clear broke */218#define SP_CLR_INTR 0x00008 /* Bit 3: clear intr */219#define SP_SET_INTR 0x00010 /* Bit 4: set intr */220#define SP_CLR_SSTEP 0x00020 /* Bit 5: clear sstep */221#define SP_SET_SSTEP 0x00040 /* Bit 6: set sstep */222#define SP_CLR_INTR_BREAK 0x00080 /* Bit 7: clear intr on break */223#define SP_SET_INTR_BREAK 0x00100 /* Bit 8: set intr on break */224#define SP_CLR_SIG0 0x00200 /* Bit 9: clear signal 0 */225#define SP_SET_SIG0 0x00400 /* Bit 10: set signal 0 */226#define SP_CLR_SIG1 0x00800 /* Bit 11: clear signal 1 */227#define SP_SET_SIG1 0x01000 /* Bit 12: set signal 1 */228#define SP_CLR_SIG2 0x02000 /* Bit 13: clear signal 2 */229#define SP_SET_SIG2 0x04000 /* Bit 14: set signal 2 */230#define SP_CLR_SIG3 0x08000 /* Bit 15: clear signal 3 */231#define SP_SET_SIG3 0x10000 /* Bit 16: set signal 3 */232#define SP_CLR_SIG4 0x20000 /* Bit 17: clear signal 4 */233#define SP_SET_SIG4 0x40000 /* Bit 18: set signal 4 */234#define SP_CLR_SIG5 0x80000 /* Bit 19: clear signal 5 */235#define SP_SET_SIG5 0x100000 /* Bit 20: set signal 5 */236#define SP_CLR_SIG6 0x200000 /* Bit 21: clear signal 6 */237#define SP_SET_SIG6 0x400000 /* Bit 22: set signal 6 */238#define SP_CLR_SIG7 0x800000 /* Bit 23: clear signal 7 */239#define SP_SET_SIG7 0x1000000 /* Bit 24: set signal 7 */240241/*242* Patterns to interpret status reg (SP_STATUS_REG - read)243*/244#define SP_STATUS_HALT 0x001 /* Bit 0: halt */245#define SP_STATUS_BROKE 0x002 /* Bit 1: broke */246#define SP_STATUS_DMA_BUSY 0x004 /* Bit 2: dma busy */247#define SP_STATUS_DMA_FULL 0x008 /* Bit 3: dma full */248#define SP_STATUS_IO_FULL 0x010 /* Bit 4: io full */249#define SP_STATUS_SSTEP 0x020 /* Bit 5: single step */250#define SP_STATUS_INTR_BREAK 0x040 /* Bit 6: interrupt on break */251#define SP_STATUS_SIG0 0x080 /* Bit 7: signal 0 set */252#define SP_STATUS_SIG1 0x100 /* Bit 8: signal 1 set */253#define SP_STATUS_SIG2 0x200 /* Bit 9: signal 2 set */254#define SP_STATUS_SIG3 0x400 /* Bit 10: signal 3 set */255#define SP_STATUS_SIG4 0x800 /* Bit 11: signal 4 set */256#define SP_STATUS_SIG5 0x1000 /* Bit 12: signal 5 set */257#define SP_STATUS_SIG6 0x2000 /* Bit 13: signal 6 set */258#define SP_STATUS_SIG7 0x4000 /* Bit 14: signal 7 set */259260/*261* Use of SIG bits262*/263#define SP_CLR_YIELD SP_CLR_SIG0264#define SP_SET_YIELD SP_SET_SIG0265#define SP_STATUS_YIELD SP_STATUS_SIG0266#define SP_CLR_YIELDED SP_CLR_SIG1267#define SP_SET_YIELDED SP_SET_SIG1268#define SP_STATUS_YIELDED SP_STATUS_SIG1269#define SP_CLR_TASKDONE SP_CLR_SIG2270#define SP_SET_TASKDONE SP_SET_SIG2271#define SP_STATUS_TASKDONE SP_STATUS_SIG2272#define SP_CLR_RSPSIGNAL SP_CLR_SIG3273#define SP_SET_RSPSIGNAL SP_SET_SIG3274#define SP_STATUS_RSPSIGNAL SP_STATUS_SIG3275#define SP_CLR_CPUSIGNAL SP_CLR_SIG4276#define SP_SET_CPUSIGNAL SP_SET_SIG4277#define SP_STATUS_CPUSIGNAL SP_STATUS_SIG4278279/* SP IMEM BIST REG (R/W): [6:0] BIST status bits; see below for detail */280#define SP_IBIST_REG 0x04080004281282/*283* Patterns to interpret status reg (SP_BIST_REG - write)284*/285#define SP_IBIST_CHECK 0x01 /* Bit 0: BIST check */286#define SP_IBIST_GO 0x02 /* Bit 1: BIST go */287#define SP_IBIST_CLEAR 0x04 /* Bit 2: BIST clear */288289/*290* Patterns to interpret status reg (SP_BIST_REG - read)291*/292/* First 2 bits are same as in write mode:293* Bit 0: BIST check; Bit 1: BIST go294*/295#define SP_IBIST_DONE 0x04 /* Bit 2: BIST done */296#define SP_IBIST_FAILED 0x78 /* Bit [6:3]: BIST fail */297298299/*************************************************************************300* DP Command Registers301*/302#define DPC_BASE_REG 0x04100000303304/* DP CMD DMA start (R/W): [23:0] DMEM/RDRAM start address */305#define DPC_START_REG (DPC_BASE_REG+0x00)306307/* DP CMD DMA end (R/W): [23:0] DMEM/RDRAM end address */308#define DPC_END_REG (DPC_BASE_REG+0x04)309310/* DP CMD DMA end (R): [23:0] DMEM/RDRAM current address */311#define DPC_CURRENT_REG (DPC_BASE_REG+0x08)312313/* DP CMD status (R/W): [9:0] valid bits - see below for definitions */314#define DPC_STATUS_REG (DPC_BASE_REG+0x0C)315316/* DP clock counter (R): [23:0] clock counter */317#define DPC_CLOCK_REG (DPC_BASE_REG+0x10)318319/* DP buffer busy counter (R): [23:0] clock counter */320#define DPC_BUFBUSY_REG (DPC_BASE_REG+0x14)321322/* DP pipe busy counter (R): [23:0] clock counter */323#define DPC_PIPEBUSY_REG (DPC_BASE_REG+0x18)324325/* DP TMEM load counter (R): [23:0] clock counter */326#define DPC_TMEM_REG (DPC_BASE_REG+0x1C)327328/*329* Values to clear/set bit in status reg (DPC_STATUS_REG - write)330*/331#define DPC_CLR_XBUS_DMEM_DMA 0x0001 /* Bit 0: clear xbus_dmem_dma */332#define DPC_SET_XBUS_DMEM_DMA 0x0002 /* Bit 1: set xbus_dmem_dma */333#define DPC_CLR_FREEZE 0x0004 /* Bit 2: clear freeze */334#define DPC_SET_FREEZE 0x0008 /* Bit 3: set freeze */335#define DPC_CLR_FLUSH 0x0010 /* Bit 4: clear flush */336#define DPC_SET_FLUSH 0x0020 /* Bit 5: set flush */337#define DPC_CLR_TMEM_CTR 0x0040 /* Bit 6: clear tmem ctr */338#define DPC_CLR_PIPE_CTR 0x0080 /* Bit 7: clear pipe ctr */339#define DPC_CLR_CMD_CTR 0x0100 /* Bit 8: clear cmd ctr */340#define DPC_CLR_CLOCK_CTR 0x0200 /* Bit 9: clear clock ctr */341342/*343* Patterns to interpret status reg (DPC_STATUS_REG - read)344*/345#define DPC_STATUS_XBUS_DMEM_DMA 0x001 /* Bit 0: xbus_dmem_dma */346#define DPC_STATUS_FREEZE 0x002 /* Bit 1: freeze */347#define DPC_STATUS_FLUSH 0x004 /* Bit 2: flush */348/*#define DPC_STATUS_FROZEN 0x008*/ /* Bit 3: frozen */349#define DPC_STATUS_START_GCLK 0x008 /* Bit 3: start gclk */350#define DPC_STATUS_TMEM_BUSY 0x010 /* Bit 4: tmem busy */351#define DPC_STATUS_PIPE_BUSY 0x020 /* Bit 5: pipe busy */352#define DPC_STATUS_CMD_BUSY 0x040 /* Bit 6: cmd busy */353#define DPC_STATUS_CBUF_READY 0x080 /* Bit 7: cbuf ready */354#define DPC_STATUS_DMA_BUSY 0x100 /* Bit 8: dma busy */355#define DPC_STATUS_END_VALID 0x200 /* Bit 9: end valid */356#define DPC_STATUS_START_VALID 0x400 /* Bit 10: start valid */357358359/*************************************************************************360* DP Span Registers361*/362#define DPS_BASE_REG 0x04200000363364/* DP tmem bist (R/W): [10:0] BIST status bits; see below for detail */365#define DPS_TBIST_REG (DPS_BASE_REG+0x00)366367/* DP span test mode (R/W): [0] Span buffer test access enable */368#define DPS_TEST_MODE_REG (DPS_BASE_REG+0x04)369370/* DP span buffer test address (R/W): [6:0] bits; see below for detail */371#define DPS_BUFTEST_ADDR_REG (DPS_BASE_REG+0x08)372373/* DP span buffer test data (R/W): [31:0] span buffer data */374#define DPS_BUFTEST_DATA_REG (DPS_BASE_REG+0x0C)375376/*377* Patterns to interpret status reg (DPS_TMEM_BIST_REG - write)378*/379#define DPS_TBIST_CHECK 0x01 /* Bit 0: BIST check */380#define DPS_TBIST_GO 0x02 /* Bit 1: BIST go */381#define DPS_TBIST_CLEAR 0x04 /* Bit 2: BIST clear */382383/*384* Patterns to interpret status reg (DPS_TMEM_BIST_REG - read)385*/386/* First 2 bits are same as in write mode:387* Bit 0: BIST check; Bit 1: BIST go388*/389#define DPS_TBIST_DONE 0x004 /* Bit 2: BIST done */390#define DPS_TBIST_FAILED 0x7F8 /* Bit [10:3]: BIST fail */391392393/*************************************************************************394* MIPS Interface (MI) Registers395*/396#define MI_BASE_REG 0x04300000397398/*399* MI init mode (W): [6:0] init length, [7] clear init mode, [8] set init mode400* [9/10] clear/set ebus test mode, [11] clear DP interrupt401* (R): [6:0] init length, [7] init mode, [8] ebus test mode402*/403#define MI_INIT_MODE_REG (MI_BASE_REG+0x00)404#define MI_MODE_REG MI_INIT_MODE_REG405406/*407* Values to clear/set bit in mode reg (MI_MODE_REG - write)408*/409#define MI_CLR_INIT 0x0080 /* Bit 7: clear init mode */410#define MI_SET_INIT 0x0100 /* Bit 8: set init mode */411#define MI_CLR_EBUS 0x0200 /* Bit 9: clear ebus test */412#define MI_SET_EBUS 0x0400 /* Bit 10: set ebus test mode */413#define MI_CLR_DP_INTR 0x0800 /* Bit 11: clear dp interrupt */414#define MI_CLR_RDRAM 0x1000 /* Bit 12: clear RDRAM reg */415#define MI_SET_RDRAM 0x2000 /* Bit 13: set RDRAM reg mode */416417/*418* Patterns to interpret mode reg (MI_MODE_REG - read)419*/420#define MI_MODE_INIT 0x0080 /* Bit 7: init mode */421#define MI_MODE_EBUS 0x0100 /* Bit 8: ebus test mode */422#define MI_MODE_RDRAM 0x0200 /* Bit 9: RDRAM reg mode */423424/* MI version (R): [7:0] io, [15:8] rac, [23:16] rdp, [31:24] rsp */425#define MI_VERSION_REG (MI_BASE_REG+0x04)426#define MI_NOOP_REG MI_VERSION_REG427428/* MI interrupt (R): [5:0] valid bits - see below for bit patterns */429#define MI_INTR_REG (MI_BASE_REG+0x08)430431/*432* MI interrupt mask (W): [11:0] valid bits - see below for bit patterns433* (R): [5:0] valid bits - see below for bit patterns434*/435#define MI_INTR_MASK_REG (MI_BASE_REG+0x0C)436437/*438* The following are values to check for interrupt setting (MI_INTR_REG)439*/440#define MI_INTR_SP 0x01 /* Bit 0: SP intr */441#define MI_INTR_SI 0x02 /* Bit 1: SI intr */442#define MI_INTR_AI 0x04 /* Bit 2: AI intr */443#define MI_INTR_VI 0x08 /* Bit 3: VI intr */444#define MI_INTR_PI 0x10 /* Bit 4: PI intr */445#define MI_INTR_DP 0x20 /* Bit 5: DP intr */446447/*448* The following are values to clear/set various interrupt bit mask449* They can be ORed together to manipulate multiple bits450* (MI_INTR_MASK_REG - write)451*/452#define MI_INTR_MASK_CLR_SP 0x0001 /* Bit 0: clear SP mask */453#define MI_INTR_MASK_SET_SP 0x0002 /* Bit 1: set SP mask */454#define MI_INTR_MASK_CLR_SI 0x0004 /* Bit 2: clear SI mask */455#define MI_INTR_MASK_SET_SI 0x0008 /* Bit 3: set SI mask */456#define MI_INTR_MASK_CLR_AI 0x0010 /* Bit 4: clear AI mask */457#define MI_INTR_MASK_SET_AI 0x0020 /* Bit 5: set AI mask */458#define MI_INTR_MASK_CLR_VI 0x0040 /* Bit 6: clear VI mask */459#define MI_INTR_MASK_SET_VI 0x0080 /* Bit 7: set VI mask */460#define MI_INTR_MASK_CLR_PI 0x0100 /* Bit 8: clear PI mask */461#define MI_INTR_MASK_SET_PI 0x0200 /* Bit 9: set PI mask */462#define MI_INTR_MASK_CLR_DP 0x0400 /* Bit 10: clear DP mask */463#define MI_INTR_MASK_SET_DP 0x0800 /* Bit 11: set DP mask */464465/*466* The following are values to check for interrupt mask setting467* (MI_INTR_MASK_REG - read)468*/469#define MI_INTR_MASK_SP 0x01 /* Bit 0: SP intr mask */470#define MI_INTR_MASK_SI 0x02 /* Bit 1: SI intr mask */471#define MI_INTR_MASK_AI 0x04 /* Bit 2: AI intr mask */472#define MI_INTR_MASK_VI 0x08 /* Bit 3: VI intr mask */473#define MI_INTR_MASK_PI 0x10 /* Bit 4: PI intr mask */474#define MI_INTR_MASK_DP 0x20 /* Bit 5: DP intr mask */475476477/*************************************************************************478* Video Interface (VI) Registers479*/480#define VI_BASE_REG 0x04400000481482/* VI status/control (R/W): [15-0] valid bits:483* [1:0] = type[1:0] (pixel size)484* 0: blank (no data, no sync)485* 1: reserved486* 2: 5/5/5/3 ("16" bit)487* 3: 8/8/8/8 (32 bit)488* [2] = gamma_dither_enable (normally on, unless "special effect")489* [3] = gamma_enable (normally on, unless MPEG/JPEG)490* [4] = divot_enable (normally on if antialiased, unless decal lines)491* [5] = reserved - always off492* [6] = serrate (always on if interlaced, off if not)493* [7] = reserved - diagnostics only494* [9:8] = anti-alias (aa) mode[1:0]495* 0: aa & resamp (always fetch extra lines)496* 1: aa & resamp (fetch extra lines if needed)497* 2: resamp only (treat as all fully covered)498* 3: neither (replicate pixels, no interpolate)499* [11] = reserved - diagnostics only500* [15:12] = reserved501*502*/503#define VI_STATUS_REG (VI_BASE_REG+0x00)504#define VI_CONTROL_REG VI_STATUS_REG505506/* VI origin (R/W): [23:0] frame buffer origin in bytes */507#define VI_ORIGIN_REG (VI_BASE_REG+0x04)508#define VI_DRAM_ADDR_REG VI_ORIGIN_REG509510/* VI width (R/W): [11:0] frame buffer line width in pixels */511#define VI_WIDTH_REG (VI_BASE_REG+0x08)512#define VI_H_WIDTH_REG VI_WIDTH_REG513514/* VI vertical intr (R/W): [9:0] interrupt when current half-line = V_INTR */515#define VI_INTR_REG (VI_BASE_REG+0x0C)516#define VI_V_INTR_REG VI_INTR_REG517518/*519* VI current vertical line (R/W): [9:0] current half line, sampled once per520* line (the lsb of V_CURRENT is constant within a field, and in521* interlaced modes gives the field number - which is constant for non-522* interlaced modes)523* - Any write to this register will clear interrupt line524*/525#define VI_CURRENT_REG (VI_BASE_REG+0x10)526#define VI_V_CURRENT_LINE_REG VI_CURRENT_REG527528/*529* VI video timing (R/W): [ 7: 0] horizontal sync width in pixels,530* [15: 8] color burst width in pixels,531* [19:16] vertical sync width in half lines,532* [29:20] start of color burst in pixels from h-sync533*/534#define VI_BURST_REG (VI_BASE_REG+0x14)535#define VI_TIMING_REG VI_BURST_REG536537/* VI vertical sync (R/W): [9:0] number of half-lines per field */538#define VI_V_SYNC_REG (VI_BASE_REG+0x18)539540/* VI horizontal sync (R/W): [11: 0] total duration of a line in 1/4 pixel541* [20:16] a 5-bit leap pattern used for PAL only542* (h_sync_period)543*/544#define VI_H_SYNC_REG (VI_BASE_REG+0x1C)545546/*547* VI horizontal sync leap (R/W): [11: 0] identical to h_sync_period548* [27:16] identical to h_sync_period549*/550#define VI_LEAP_REG (VI_BASE_REG+0x20)551#define VI_H_SYNC_LEAP_REG VI_LEAP_REG552553/*554* VI horizontal video (R/W): [ 9: 0] end of active video in screen pixels555* : [25:16] start of active video in screen pixels556*/557#define VI_H_START_REG (VI_BASE_REG+0x24)558#define VI_H_VIDEO_REG VI_H_START_REG559560/*561* VI vertical video (R/W): [ 9: 0] end of active video in screen half-lines562* : [25:16] start of active video in screen half-lines563*/564#define VI_V_START_REG (VI_BASE_REG+0x28)565#define VI_V_VIDEO_REG VI_V_START_REG566567/*568* VI vertical burst (R/W): [ 9: 0] end of color burst enable in half-lines569* : [25:16] start of color burst enable in half-lines570*/571#define VI_V_BURST_REG (VI_BASE_REG+0x2C)572573/* VI x-scale (R/W): [11: 0] 1/horizontal scale up factor (2.10 format)574* [27:16] horizontal subpixel offset (2.10 format)575*/576#define VI_X_SCALE_REG (VI_BASE_REG+0x30)577578/* VI y-scale (R/W): [11: 0] 1/vertical scale up factor (2.10 format)579* [27:16] vertical subpixel offset (2.10 format)580*/581#define VI_Y_SCALE_REG (VI_BASE_REG+0x34)582583/*584* Patterns to interpret VI_CONTROL_REG585*/586#define VI_CTRL_TYPE_16 0x00002 /* Bit [1:0] pixel size: 16 bit */587#define VI_CTRL_TYPE_32 0x00003 /* Bit [1:0] pixel size: 32 bit */588#define VI_CTRL_GAMMA_DITHER_ON 0x00004 /* Bit 2: default = on */589#define VI_CTRL_GAMMA_ON 0x00008 /* Bit 3: default = on */590#define VI_CTRL_DIVOT_ON 0x00010 /* Bit 4: default = on */591#define VI_CTRL_SERRATE_ON 0x00040 /* Bit 6: on if interlaced */592#define VI_CTRL_ANTIALIAS_MASK 0x00300 /* Bit [9:8] anti-alias mode */593#define VI_CTRL_DITHER_FILTER_ON 0x10000 /* Bit 16: dither-filter mode */594595/*596* Possible video clocks (NTSC or PAL)597*/598#define VI_NTSC_CLOCK 48681812 /* Hz = 48.681812 MHz */599#define VI_PAL_CLOCK 49656530 /* Hz = 49.656530 MHz */600#define VI_MPAL_CLOCK 48628316 /* Hz = 48.628316 MHz */601602603/*************************************************************************604* Audio Interface (AI) Registers605*606* The address and length registers are double buffered; that is, they607* can be written twice before becoming full.608* The address must be written before the length.609*/610#define AI_BASE_REG 0x04500000611612/* AI DRAM address (W): [23:0] starting RDRAM address (8B-aligned) */613#define AI_DRAM_ADDR_REG (AI_BASE_REG+0x00) /* R0: DRAM address */614615/* AI length (R/W): [14:0] transfer length (v1.0) - Bottom 3 bits are ignored */616/* [17:0] transfer length (v2.0) - Bottom 3 bits are ignored */617#define AI_LEN_REG (AI_BASE_REG+0x04) /* R1: Length */618619/* AI control (W): [0] DMA enable - if LSB == 1, DMA is enabled */620#define AI_CONTROL_REG (AI_BASE_REG+0x08) /* R2: DMA Control */621622/*623* AI status (R): [31]/[0] ai_full (addr & len buffer full), [30] ai_busy624* Note that a 1->0 transition in ai_full will set interrupt625* (W): clear audio interrupt626*/627#define AI_STATUS_REG (AI_BASE_REG+0x0C) /* R3: Status */628629/*630* AI DAC sample period register (W): [13:0] dac rate631* - vid_clock/(dperiod + 1) is the DAC sample rate632* - (dperiod + 1) >= 66 * (aclockhp + 1) must be true633*/634#define AI_DACRATE_REG (AI_BASE_REG+0x10) /* R4: DAC rate 14-lsb*/635636/*637* AI bit rate (W): [3:0] bit rate (abus clock half period register - aclockhp)638* - vid_clock/(2 * (aclockhp + 1)) is the DAC clock rate639* - The abus clock stops if aclockhp is zero640*/641#define AI_BITRATE_REG (AI_BASE_REG+0x14) /* R5: Bit rate 4-lsb */642643/* Value for control register */644#define AI_CONTROL_DMA_ON 0x01 /* LSB = 1: DMA enable*/645#define AI_CONTROL_DMA_OFF 0x00 /* LSB = 1: DMA enable*/646647/* Value for status register */648#define AI_STATUS_FIFO_FULL 0x80000000 /* Bit 31: full */649#define AI_STATUS_DMA_BUSY 0x40000000 /* Bit 30: busy */650651/* DAC rate = video clock / audio frequency652* - DAC rate >= (66 * Bit rate) must be true653*/654#define AI_MAX_DAC_RATE 16384 /* 14-bit+1 */655#define AI_MIN_DAC_RATE 132656657/* Bit rate <= (DAC rate / 66) */658#define AI_MAX_BIT_RATE 16 /* 4-bit+1 */659#define AI_MIN_BIT_RATE 2660661/*662* Maximum and minimum values for audio frequency based on video clocks663* max frequency = (video clock / min dac rate)664* min frequency = (video clock / max dac rate)665*/666#define AI_NTSC_MAX_FREQ 368000 /* 368 KHz */667#define AI_NTSC_MIN_FREQ 3000 /* 3 KHz ~ 2971 Hz */668669#define AI_PAL_MAX_FREQ 376000 /* 376 KHz */670#define AI_PAL_MIN_FREQ 3050 /* 3 KHz ~ 3031 Hz */671672#define AI_MPAL_MAX_FREQ 368000 /* 368 KHz */673#define AI_MPAL_MIN_FREQ 3000 /* 3 KHz ~ 2968 Hz */674675676/*************************************************************************677* Peripheral Interface (PI) Registers678*/679#define PI_BASE_REG 0x04600000680681/* PI DRAM address (R/W): [23:0] starting RDRAM address */682#define PI_DRAM_ADDR_REG (PI_BASE_REG+0x00) /* DRAM address */683684/* PI pbus (cartridge) address (R/W): [31:0] starting AD16 address */685#define PI_CART_ADDR_REG (PI_BASE_REG+0x04)686687/* PI read length (R/W): [23:0] read data length */688#define PI_RD_LEN_REG (PI_BASE_REG+0x08)689690/* PI write length (R/W): [23:0] write data length */691#define PI_WR_LEN_REG (PI_BASE_REG+0x0C)692693/*694* PI status (R): [0] DMA busy, [1] IO busy, [2], error695* (W): [0] reset controller (and abort current op), [1] clear intr696*/697#define PI_STATUS_REG (PI_BASE_REG+0x10)698699/* PI dom1 latency (R/W): [7:0] domain 1 device latency */700#define PI_BSD_DOM1_LAT_REG (PI_BASE_REG+0x14)701702/* PI dom1 pulse width (R/W): [7:0] domain 1 device R/W strobe pulse width */703#define PI_BSD_DOM1_PWD_REG (PI_BASE_REG+0x18)704705/* PI dom1 page size (R/W): [3:0] domain 1 device page size */706#define PI_BSD_DOM1_PGS_REG (PI_BASE_REG+0x1C) /* page size */707708/* PI dom1 release (R/W): [1:0] domain 1 device R/W release duration */709#define PI_BSD_DOM1_RLS_REG (PI_BASE_REG+0x20)710711/* PI dom2 latency (R/W): [7:0] domain 2 device latency */712#define PI_BSD_DOM2_LAT_REG (PI_BASE_REG+0x24) /* Domain 2 latency */713714/* PI dom2 pulse width (R/W): [7:0] domain 2 device R/W strobe pulse width */715#define PI_BSD_DOM2_PWD_REG (PI_BASE_REG+0x28) /* pulse width */716717/* PI dom2 page size (R/W): [3:0] domain 2 device page size */718#define PI_BSD_DOM2_PGS_REG (PI_BASE_REG+0x2C) /* page size */719720/* PI dom2 release (R/W): [1:0] domain 2 device R/W release duration */721#define PI_BSD_DOM2_RLS_REG (PI_BASE_REG+0x30) /* release duration */722723#define PI_DOMAIN1_REG PI_BSD_DOM1_LAT_REG724#define PI_DOMAIN2_REG PI_BSD_DOM2_LAT_REG725726#define PI_DOM_LAT_OFS 0x00727#define PI_DOM_PWD_OFS 0x04728#define PI_DOM_PGS_OFS 0x08729#define PI_DOM_RLS_OFS 0x0C730731/*732* PI status register has 3 bits active when read from (PI_STATUS_REG - read)733* Bit 0: DMA busy - set when DMA is in progress734* Bit 1: IO busy - set when IO is in progress735* Bit 2: Error - set when CPU issues IO request while DMA is busy736*/737#define PI_STATUS_ERROR 0x04738#define PI_STATUS_IO_BUSY 0x02739#define PI_STATUS_DMA_BUSY 0x01740741/* PI status register has 2 bits active when written to:742* Bit 0: When set, reset PIC743* Bit 1: When set, clear interrupt flag744* The values of the two bits can be ORed together to both reset PIC and745* clear interrupt at the same time.746*747* Note:748* - The PIC does generate an interrupt at the end of each DMA. CPU749* needs to clear the interrupt flag explicitly (from an interrupt750* handler) by writing into the STATUS register with bit 1 set.751*752* - When a DMA completes, the interrupt flag is set. CPU can issue753* another request even while the interrupt flag is set (as long as754* PIC is idle). However, it is the CPU's responsibility for755* maintaining accurate correspondence between DMA completions and756* interrupts.757*758* - When PIC is reset, if PIC happens to be busy, an interrupt will759* be generated as PIC returns to idle. Otherwise, no interrupt will760* be generated and PIC remains idle.761*/762/*763* Values to clear interrupt/reset PIC (PI_STATUS_REG - write)764*/765#define PI_STATUS_RESET 0x01766#define PI_SET_RESET PI_STATUS_RESET767768#define PI_STATUS_CLR_INTR 0x02769#define PI_CLR_INTR PI_STATUS_CLR_INTR770771#define PI_DMA_BUFFER_SIZE 128772773#define PI_DOM1_ADDR1 0x06000000 /* to 0x07FFFFFF */774#define PI_DOM1_ADDR2 0x10000000 /* to 0x1FBFFFFF */775#define PI_DOM1_ADDR3 0x1FD00000 /* to 0x7FFFFFFF */776#define PI_DOM2_ADDR1 0x05000000 /* to 0x05FFFFFF */777#define PI_DOM2_ADDR2 0x08000000 /* to 0x0FFFFFFF */778779780/*************************************************************************781* RDRAM Interface (RI) Registers782*/783#define RI_BASE_REG 0x04700000784785/* RI mode (R/W): [1:0] operating mode, [2] stop T active, [3] stop R active */786#define RI_MODE_REG (RI_BASE_REG+0x00)787788/* RI config (R/W): [5:0] current control input, [6] current control enable */789#define RI_CONFIG_REG (RI_BASE_REG+0x04)790791/* RI current load (W): [] any write updates current control register */792#define RI_CURRENT_LOAD_REG (RI_BASE_REG+0x08)793794/* RI select (R/W): [2:0] receive select, [2:0] transmit select */795#define RI_SELECT_REG (RI_BASE_REG+0x0C)796797/* RI refresh (R/W): [7:0] clean refresh delay, [15:8] dirty refresh delay,798* [16] refresh bank, [17] refresh enable799* [18] refresh optimize800*/801#define RI_REFRESH_REG (RI_BASE_REG+0x10)802#define RI_COUNT_REG RI_REFRESH_REG803804/* RI latency (R/W): [3:0] DMA latency/overlap */805#define RI_LATENCY_REG (RI_BASE_REG+0x14)806807/* RI error (R): [0] nack error, [1] ack error */808#define RI_RERROR_REG (RI_BASE_REG+0x18)809810/* RI error (W): [] any write clears all error bits */811#define RI_WERROR_REG (RI_BASE_REG+0x1C)812813814/*************************************************************************815* Serial Interface (SI) Registers816*/817#define SI_BASE_REG 0x04800000818819/* SI DRAM address (R/W): [23:0] starting RDRAM address */820#define SI_DRAM_ADDR_REG (SI_BASE_REG+0x00) /* R0: DRAM address */821822/* SI address read 64B (W): [] any write causes a 64B DMA write */823#define SI_PIF_ADDR_RD64B_REG (SI_BASE_REG+0x04) /* R1: 64B PIF->DRAM */824825/* Address SI_BASE_REG + (0x08, 0x0c, 0x14) are reserved */826827/* SI address write 64B (W): [] any write causes a 64B DMA read */828#define SI_PIF_ADDR_WR64B_REG (SI_BASE_REG+0x10) /* R4: 64B DRAM->PIF */829830/*831* SI status (W): [] any write clears interrupt832* (R): [0] DMA busy, [1] IO read busy, [2] reserved833* [3] DMA error, [12] interrupt834*/835#define SI_STATUS_REG (SI_BASE_REG+0x18) /* R6: Status */836837/* SI status register has the following bits active:838* 0: DMA busy - set when DMA is in progress839* 1: IO busy - set when IO access is in progress840* 3: DMA error - set when there are overlapping DMA requests841* 12: Interrupt - Interrupt set842*/843#define SI_STATUS_DMA_BUSY 0x0001844#define SI_STATUS_RD_BUSY 0x0002845#define SI_STATUS_DMA_ERROR 0x0008846#define SI_STATUS_INTERRUPT 0x1000847848/*************************************************************************849* Development Board GIO Control Registers850*/851852#define GIO_BASE_REG 0x18000000853854/* Game to Host Interrupt */855#define GIO_GIO_INTR_REG (GIO_BASE_REG+0x000)856857/* Game to Host SYNC */858#define GIO_GIO_SYNC_REG (GIO_BASE_REG+0x400)859860/* Host to Game Interrupt */861#define GIO_CART_INTR_REG (GIO_BASE_REG+0x800)862863864/*************************************************************************865* Common macros866*/867#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)868#define IO_READ(addr) (*(vu32 *)PHYS_TO_K1(addr))869#define IO_WRITE(addr,data) (*(vu32 *)PHYS_TO_K1(addr)=(u32)(data))870#define RCP_STAT_PRINT \871rmonPrintf("current=%x start=%x end=%x dpstat=%x spstat=%x\n", \872IO_READ(DPC_CURRENT_REG), \873IO_READ(DPC_START_REG), \874IO_READ(DPC_END_REG), \875IO_READ(DPC_STATUS_REG), \876IO_READ(SP_STATUS_REG))877878#endif879880#endif /* _RCP_H_ */881882883