OpenBSD/sgi on octane2 - heart.h
Linux/sgi octaneのheart.hを全文掲載しておく。
/* * Copyright (C) 2004,5 Stanislaw Skowronek */ #ifndef _HEART_H #define _HEART_H /* HEART internal register space */ #define HEART_PIU_BASE 0x900000000FF00000 /* full addresses */ #define HEART_MODE ((volatile unsigned long *)HEART_PIU_BASE) #define HEART_SDRAM_MODE ((volatile unsigned long *)(HEART_PIU_BASE+0x08)) #define HEART_MEM_REF ((volatile unsigned long *)(HEART_PIU_BASE+0x10)) #define HEART_MEM_REQ_ARB ((volatile unsigned long *)(HEART_PIU_BASE+0x18)) #define HEART_MEMCFG0 ((volatile unsigned long *)(HEART_PIU_BASE+0x20)) #define HEART_MEMCFG1 ((volatile unsigned long *)(HEART_PIU_BASE+0x28)) #define HEART_MEMCFG2 ((volatile unsigned long *)(HEART_PIU_BASE+0x30)) #define HEART_MEMCFG3 ((volatile unsigned long *)(HEART_PIU_BASE+0x38)) #define HEART_FC_MODE ((volatile unsigned long *)(HEART_PIU_BASE+0x40)) #define HEART_FC_TIMER_LIMIT ((volatile unsigned long *)(HEART_PIU_BASE+0x48)) #define HEART_FC0_ADDR ((volatile unsigned long *)(HEART_PIU_BASE+0x50)) #define HEART_FC1_ADDR ((volatile unsigned long *)(HEART_PIU_BASE+0x58)) #define HEART_FC0_CR_CNT ((volatile unsigned long *)(HEART_PIU_BASE+0x60)) #define HEART_FC1_CR_CNT ((volatile unsigned long *)(HEART_PIU_BASE+0x68)) #define HEART_FC0_TIMER ((volatile unsigned long *)(HEART_PIU_BASE+0x70)) #define HEART_FC1_TIMER ((volatile unsigned long *)(HEART_PIU_BASE+0x78)) #define HEART_STATUS ((volatile unsigned long *)(HEART_PIU_BASE+0x80)) #define HEART_BERR_ADDR ((volatile unsigned long *)(HEART_PIU_BASE+0x88)) #define HEART_BERR_MISC ((volatile unsigned long *)(HEART_PIU_BASE+0x90)) #define HEART_MEMERR_ADDR ((volatile unsigned long *)(HEART_PIU_BASE+0x98)) #define HEART_MEMERR_DATA ((volatile unsigned long *)(HEART_PIU_BASE+0xa0)) #define HEART_PIUR_ACC_ERR ((volatile unsigned long *)(HEART_PIU_BASE+0xa8)) #define HEART_MLAN_CLK_DIV ((volatile unsigned long *)(HEART_PIU_BASE+0xb0)) #define HEART_MLAN_CTL ((volatile unsigned long *)(HEART_PIU_BASE+0xb8)) #define HEART_IMR(x) ((volatile unsigned long *)(HEART_PIU_BASE+0x10000+8*(x))) #define HEART_SET_ISR ((volatile unsigned long *)(HEART_PIU_BASE+0x10020)) #define HEART_CLR_ISR ((volatile unsigned long *)(HEART_PIU_BASE+0x10028)) #define HEART_ISR ((volatile unsigned long *)(HEART_PIU_BASE+0x10030)) #define HEART_IMSR ((volatile unsigned long *)(HEART_PIU_BASE+0x10038)) #define HEART_CAUSE ((volatile unsigned long *)(HEART_PIU_BASE+0x10040)) #define HEART_COUNT ((volatile unsigned long *)(HEART_PIU_BASE+0x20000)) /* 52-bit counter */ #define HEART_COMPARE ((volatile unsigned long *)(HEART_PIU_BASE+0x30000)) /* 24-bit compare */ #define HEART_TRIGGER ((volatile unsigned long *)(HEART_PIU_BASE+0x40000)) #define HEART_PRID ((volatile unsigned long *)(HEART_PIU_BASE+0x50000)) #define HEART_SYNC ((volatile unsigned long *)(HEART_PIU_BASE+0x60000)) /* bits in the HEART_MODE registers */ #define HM_PROC_DISABLE_SHFT 60 #define HM_PROC_DISABLE_MSK ((unsigned long) 0xf << HM_PROC_DISABLE_SHFT) #define HM_PROC_DISABLE(x) ((unsigned long) 0x1 << (x) + HM_PROC_DISABLE_SHFT) #define HM_MAX_PSR ((unsigned long) 0x7 << 57) #define HM_MAX_IOSR ((unsigned long) 0x7 << 54) #define HM_MAX_PEND_IOSR ((unsigned long) 0x7 << 51) #define HM_TRIG_SRC_SEL_MSK ((unsigned long) 0x7 << 48) #define HM_TRIG_HEART_EXC ((unsigned long) 0x0 << 48) /* power-up default */ #define HM_TRIG_REG_BIT ((unsigned long) 0x1 << 48) #define HM_TRIG_SYSCLK ((unsigned long) 0x2 << 48) #define HM_TRIG_MEMCLK_2X ((unsigned long) 0x3 << 48) #define HM_TRIG_MEMCLK ((unsigned long) 0x4 << 48) #define HM_TRIG_IOCLK ((unsigned long) 0x5 << 48) #define HM_PIU_TEST_MODE ((unsigned long) 0xf << 40) #define HM_GP_FLAG_MSK ((unsigned long) 0xf << 36) #define HM_GP_FLAG(x) ((unsigned long) 0x1 << (x) + 36) #define HM_MAX_PROC_HYST ((unsigned long) 0xf << 32) #define HM_LLP_WRST_AFTER_RST ((unsigned long) 0x1 << 28) #define HM_LLP_LINK_RST ((unsigned long) 0x1 << 27) #define HM_LLP_WARM_RST ((unsigned long) 0x1 << 26) #define HM_COR_ECC_LCK ((unsigned long) 0x1 << 25) #define HM_REDUCED_PWR ((unsigned long) 0x1 << 24) #define HM_COLD_RST ((unsigned long) 0x1 << 23) #define HM_SW_RST ((unsigned long) 0x1 << 22) #define HM_MEM_FORCE_WR ((unsigned long) 0x1 << 21) #define HM_DB_ERR_GEN ((unsigned long) 0x1 << 20) #define HM_SB_ERR_GEN ((unsigned long) 0x1 << 19) #define HM_CACHED_PIO_EN ((unsigned long) 0x1 << 18) #define HM_CACHED_PROM_EN ((unsigned long) 0x1 << 17) #define HM_PE_SYS_COR_ERE ((unsigned long) 0x1 << 16) #define HM_GLOBAL_ECC_EN ((unsigned long) 0x1 << 15) #define HM_IO_COH_EN ((unsigned long) 0x1 << 14) #define HM_INT_EN ((unsigned long) 0x1 << 13) #define HM_DATA_CHK_EN ((unsigned long) 0x1 << 12) #define HM_REF_EN ((unsigned long) 0x1 << 11) #define HM_BAD_SYSWR_ERE ((unsigned long) 0x1 << 10) #define HM_BAD_SYSRD_ERE ((unsigned long) 0x1 << 9) #define HM_SYSSTATE_ERE ((unsigned long) 0x1 << 8) #define HM_SYSCMD_ERE ((unsigned long) 0x1 << 7) #define HM_NCOR_SYS_ERE ((unsigned long) 0x1 << 6) #define HM_COR_SYS_ERE ((unsigned long) 0x1 << 5) #define HM_DATA_ELMNT_ERE ((unsigned long) 0x1 << 4) #define HM_MEM_ADDR_PROC_ERE ((unsigned long) 0x1 << 3) #define HM_MEM_ADDR_IO_ERE ((unsigned long) 0x1 << 2) #define HM_NCOR_MEM_ERE ((unsigned long) 0x1 << 1) #define HM_COR_MEM_ERE ((unsigned long) 0x1 << 0) /* bits in the memory refresh register */ #define HEART_MEMREF_REFS(x) ((unsigned long) (0xf & (x)) << 16) #define HEART_MEMREF_PERIOD(x) ((unsigned long) (0xffff & (x))) #define HEART_MEMREF_REFS_VAL HEART_MEMREF_REFS(8) #define HEART_MEMREF_PERIOD_VAL HEART_MEMREF_PERIOD(0x4000) #define HEART_MEMREF_VAL (HEART_MEMREF_REFS_VAL | HEART_MEMREF_PERIOD_VAL) /* bits in the memory request arbitrarion register */ #define HEART_MEMARB_IODIS (1<<20) #define HEART_MEMARB_MAXPMWRQS (15<<16) #define HEART_MEMARB_MAXPMRRQS (15<<12) #define HEART_MEMARB_MAXPMRQS (15<<8) #define HEART_MEMARB_MAXRRRQS (15<<4) #define HEART_MEMARB_MAXGBRRQS (15) /* bits in the memory configuration registers */ #define HEART_MEMCFG_VLD 0x80000000 /* bank valid bit */ #define HEART_MEMCFG_RAM_MSK 0x003f0000 /* RAM mask */ #define HEART_MEMCFG_DENSITY 0x01c00000 /* RAM density */ #define HEART_MEMCFG_RAM_SHFT 16 #define HEART_MEMCFG_ADDR_MSK 0x000001ff /* base address mask */ #define HEART_MEMCFG_UNIT_SHFT 25 /* 32 MB is the HEART's basic memory unit */ /* bits in the status register */ #define HEART_STAT_HSTL_SDRV ((unsigned long) 0x1 << 14) #define HEART_STAT_FC_CR_OUT(x) ((unsigned long) 0x1 << (x) + 12) #define HEART_STAT_DIR_CNNCT ((unsigned long) 0x1 << 11) #define HEART_STAT_TRITON ((unsigned long) 0x1 << 10) #define HEART_STAT_R4K ((unsigned long) 0x1 << 9) #define HEART_STAT_BIG_ENDIAN ((unsigned long) 0x1 << 8) #define HEART_STAT_PROC_ACTIVE_SHFT 4 #define HEART_STAT_PROC_ACTIVE_MSK ((unsigned long) 0xf << HEART_STAT_PROC_ACTIVE_SHFT) #define HEART_STAT_PROC_ACTIVE(x) ((unsigned long) 0x1 << (x) + HEART_STAT_PROC_ACTIVE_SHFT) #define HEART_STAT_WIDGET_ID 0xf /* interrupt handling */ #define HEART_VEC_TO_IBIT(vec) ((unsigned long) 1 << (vec)) #define HEART_INT_VECTORS 64 /* how many vectors we manage */ /* IP7 is the CPU count/compare, IP1 and IP0 are SW2 and SW1 */ #define HEART_INT_LEVEL4 0xfff8000000000000 /* IP6 */ #define HEART_INT_LEVEL3 0x0004000000000000 /* IP5 */ #define HEART_INT_LEVEL2 0x0003ffff00000000 /* IP4 */ #define HEART_INT_LEVEL1 0x00000000ffff0000 /* IP3 */ #define HEART_INT_LEVEL0 0x000000000000ffff /* IP2 */ #define HEART_INT_L4SHIFT 51 #define HEART_INT_L4MASK 0x1fff #define HEART_INT_L3SHIFT 50 #define HEART_INT_L3MASK 0x1 #define HEART_INT_L2SHIFT 32 #define HEART_INT_L2MASK 0x3ffff #define HEART_INT_L1SHIFT 16 #define HEART_INT_L1MASK 0xffff #define HEART_INT_L0SHIFT 0 #define HEART_INT_L0MASK 0xffff /* errors */ #define IRQ_HEART_ERR 63 #define IRQ_BUS_ERR_P(x) (59+(x)) #define IRQ_XT_ERR(xid) (51+((xid)-1)&7) #define IRQ_XT_ERR_XBOW 58 #define IRQ_XT_ERR_F 57 #define IRQ_XT_ERR_E 56 #define IRQ_XT_ERR_D 55 #define IRQ_XT_ERR_C 54 #define IRQ_XT_ERR_B 53 #define IRQ_XT_ERR_A 52 #define IRQ_XT_ERR_9 51 /* count/compare timer */ #define IRQ_HEART_CC 50 /* level 2 interrupts */ #define IRQ_IPI_P(x) (46+(x)) #define IRQ_TIMER_P(x) (42+(x)) #define IRQ_LOCAL_L2_BASE 32 #define IRQ_LOCAL_L2_NUM 9 /* level 1 interrupts */ #define IRQ_LOCAL_L1_BASE 16 #define IRQ_LOCAL_L1_NUM 16 /* level 0 interrupts */ #define IRQ_LOCAL_L0_BASE 3 #define IRQ_LOCAL_L0_NUM 13 #define IRQ_FC_HIGH 2 #define IRQ_FC_LOW 1 #define IRQ_GENERIC 0 #define SOFT_IRQ_COUNT 51 #define TIMER_IRQ 63 /* bits in the HEART_CAUSE register */ #define HC_PE_SYS_COR_ERR_MSK ((unsigned long) 0xf << 60) #define HC_PE_SYS_COR_ERR(x) ((unsigned long) 0x1 << (x) + 60) #define HC_PIOWDB_OFLOW ((unsigned long) 0x1 << 44) #define HC_PIORWRB_OFLOW ((unsigned long) 0x1 << 43) #define HC_PIUR_ACC_ERR ((unsigned long) 0x1 << 42) #define HC_BAD_SYSWR_ERR ((unsigned long) 0x1 << 41) #define HC_BAD_SYSRD_ERR ((unsigned long) 0x1 << 40) #define HC_SYSSTATE_ERR_MSK ((unsigned long) 0xf << 36) #define HC_SYSSTATE_ERR(x) ((unsigned long) 0x1 << (x) + 36) #define HC_SYSCMD_ERR_MSK ((unsigned long) 0xf << 32) #define HC_SYSCMD_ERR(x) ((unsigned long) 0x1 << (x) + 32) #define HC_NCOR_SYSAD_ERR_MSK ((unsigned long) 0xf << 28) #define HC_NCOR_SYSAD_ERR(x) ((unsigned long) 0x1 << (x) + 28) #define HC_COR_SYSAD_ERR_MSK ((unsigned long) 0xf << 24) #define HC_COR_SYSAD_ERR(x) ((unsigned long) 0x1 << (x) + 24) #define HC_DATA_ELMNT_ERR_MSK ((unsigned long) 0xf << 20) #define HC_DATA_ELMNT_ERR(x) ((unsigned long) 0x1 << (x) + 20) #define HC_WIDGET_ERR ((unsigned long) 0x1 << 16) #define HC_MEM_ADDR_ERR_PROC_MSK ((unsigned long) 0xf << 4) #define HC_MEM_ADDR_ERR_PROC(x) ((unsigned long) 0x1 << (x) + 4) #define HC_MEM_ADDR_ERR_IO ((unsigned long) 0x1 << 2) #define HC_NCOR_MEM_ERR ((unsigned long) 0x1 << 1) #define HC_COR_MEM_ERR ((unsigned long) 0x1 << 0) #endif /* _HEART_H */
どうも、IPIだけのためのデバイスではなさそうだ。
が、レジスタ名だけ眺めてもどのように使われるべきなのかが今ひとつ良く分からない。