152131Smckusick /* 252131Smckusick * Copyright (c) 1992 Regents of the University of California. 352131Smckusick * All rights reserved. 452131Smckusick * 552131Smckusick * This code is derived from software contributed to Berkeley by 652131Smckusick * Ralph Campbell. 752131Smckusick * 852131Smckusick * %sccs.include.redist.c% 952131Smckusick * 10*52746Sralph * @(#)machConst.h 7.2 (Berkeley) 02/29/92 1152131Smckusick * 1252131Smckusick * machConst.h -- 1352131Smckusick * 1452131Smckusick * Machine dependent constants. 1552131Smckusick * 1652131Smckusick * Copyright (C) 1989 Digital Equipment Corporation. 1752131Smckusick * Permission to use, copy, modify, and distribute this software and 1852131Smckusick * its documentation for any purpose and without fee is hereby granted, 1952131Smckusick * provided that the above copyright notice appears in all copies. 2052131Smckusick * Digital Equipment Corporation makes no representations about the 2152131Smckusick * suitability of this software for any purpose. It is provided "as is" 2252131Smckusick * without express or implied warranty. 2352131Smckusick * 2452131Smckusick * from: $Header: /sprite/src/kernel/mach/ds3100.md/RCS/machConst.h, 2552131Smckusick * v 9.2 89/10/21 15:55:22 jhh Exp $ SPRITE (DECWRL) 2652131Smckusick * from: $Header: /sprite/src/kernel/mach/ds3100.md/RCS/machAddrs.h, 2752131Smckusick * v 1.2 89/08/15 18:28:21 rab Exp $ SPRITE (DECWRL) 2852131Smckusick * from: $Header: /sprite/src/kernel/vm/ds3100.md/RCS/vmPmaxConst.h, 2952131Smckusick * v 9.1 89/09/18 17:33:00 shirriff Exp $ SPRITE (DECWRL) 3052131Smckusick */ 3152131Smckusick 3252131Smckusick #ifndef _MACHCONST 3352131Smckusick #define _MACHCONST 3452131Smckusick 3552131Smckusick #define MACH_KUSEG_ADDR 0x0 3652131Smckusick #define MACH_CACHED_MEMORY_ADDR 0x80000000 37*52746Sralph #define MACH_UNCACHED_MEMORY_ADDR 0xa0000000 38*52746Sralph #define MACH_KSEG2_ADDR 0xc0000000 39*52746Sralph 40*52746Sralph #define MACH_CACHED_TO_PHYS(x) ((unsigned)(x) & 0x1fffffff) 41*52746Sralph #define MACH_PHYS_TO_CACHED(x) ((unsigned)(x) | MACH_CACHED_MEMORY_ADDR) 42*52746Sralph #define MACH_UNCACHED_TO_PHYS(x) ((unsigned)(x) & 0x1fffffff) 43*52746Sralph #define MACH_PHYS_TO_UNCACHED(x) ((unsigned)(x) | MACH_UNCACHED_MEMORY_ADDR) 44*52746Sralph 45*52746Sralph #ifdef DS3100 46*52746Sralph #define MACH_MAX_MEM_ADDR 0xa1800000 4752131Smckusick #define MACH_CACHED_FRAME_BUFFER_ADDR 0x8fc00000 4852131Smckusick #define MACH_UNCACHED_FRAME_BUFFER_ADDR 0xafc00000 4952131Smckusick #define MACH_PLANE_MASK_ADDR 0xb0000000 5052131Smckusick #define MACH_CURSOR_REG_ADDR 0xb1000000 5152131Smckusick #define MACH_COLOR_MAP_ADDR 0xb2000000 5252131Smckusick #define MACH_RESERVED_ADDR 0xb3000000 5352131Smckusick #define MACH_WRITE_ERROR_ADDR 0xb7000000 5452131Smckusick #define MACH_NETWORK_INTERFACE_ADDR 0xb8000000 5552131Smckusick #define MACH_NETWORK_BUFFER_ADDR 0xb9000000 5652131Smckusick #define MACH_SCSI_INTERFACE_ADDR 0xba000000 5752131Smckusick #define MACH_SCSI_BUFFER_ADDR 0xbb000000 5852131Smckusick #define MACH_SERIAL_INTERFACE_ADDR 0xbc000000 5952131Smckusick #define MACH_CLOCK_ADDR 0xbd000000 6052131Smckusick #define MACH_SYS_CSR_ADDR 0xbe000000 61*52746Sralph #endif 6252131Smckusick 63*52746Sralph #ifdef DS5000 64*52746Sralph #define MACH_MAX_MEM_ADDR 0xbe000000 65*52746Sralph #define MACH_RESERVED_ADDR 0xbfc80000 66*52746Sralph #define MACH_CHKSYN_ADDR 0xbfd00000 67*52746Sralph #define MACH_ERROR_ADDR 0xbfd80000 68*52746Sralph #define MACH_SERIAL_INTERFACE_ADDR 0xbfe00000 69*52746Sralph #define MACH_CLOCK_ADDR 0xbfe80000 70*52746Sralph #define MACH_SYS_CSR_ADDR 0xbff00000 71*52746Sralph #endif 72*52746Sralph 7352131Smckusick #define MACH_CODE_START 0x80030000 7452131Smckusick 7552131Smckusick /* 7652131Smckusick * The bits in the cause register. 7752131Smckusick * 7852131Smckusick * MACH_CR_BR_DELAY Exception happened in branch delay slot. 7952131Smckusick * MACH_CR_COP_ERR Coprocessor error. 8052131Smckusick * Interrupt pending bits defined below. 8152131Smckusick * MACH_CR_EXC_CODE The exception type (see exception codes below). 8252131Smckusick */ 8352131Smckusick #define MACH_CR_BR_DELAY 0x80000000 8452131Smckusick #define MACH_CR_COP_ERR 0x30000000 8552131Smckusick #define MACH_CR_EXC_CODE 0x0000003C 8652131Smckusick #define MACH_CR_EXC_CODE_SHIFT 2 8752131Smckusick 8852131Smckusick /* 8952131Smckusick * The bits in the status register. All bits are active when set to 1. 9052131Smckusick * 9152131Smckusick * MACH_SR_CO_USABILITY Control the usability of the four coprocessors. 9252131Smckusick * MACH_SR_BOOT_EXC_VEC Use alternate exception vectors. 9352131Smckusick * MACH_SR_TLB_SHUTDOWN TLB disabled. 9452131Smckusick * MACH_SR_PARITY_ERR Parity error. 9552131Smckusick * MACH_SR_CACHE_MISS Most recent D-cache load resulted in a miss. 9652131Smckusick * MACH_SR_PARITY_ZERO Zero replaces outgoing parity bits. 9752131Smckusick * MACH_SR_SWAP_CACHES Swap I-cache and D-cache. 9852131Smckusick * MACH_SR_ISOL_CACHES Isolate D-cache from main memory. 9952131Smckusick * Interrupt enable bits defined below. 10052131Smckusick * MACH_SR_KU_OLD Old kernel/user mode bit. 1 => user mode. 10152131Smckusick * MACH_SR_INT_ENA_OLD Old interrupt enable bit. 10252131Smckusick * MACH_SR_KU_PREV Previous kernel/user mode bit. 1 => user mode. 10352131Smckusick * MACH_SR_INT_ENA_PREV Previous interrupt enable bit. 10452131Smckusick * MACH_SR_KU_CUR Current kernel/user mode bit. 1 => user mode. 10552131Smckusick * MACH_SR_INT_ENA_CUR Current interrupt enable bit. 10652131Smckusick */ 10752131Smckusick #define MACH_SR_COP_USABILITY 0xf0000000 10852131Smckusick #define MACH_SR_COP_0_BIT 0x10000000 10952131Smckusick #define MACH_SR_COP_1_BIT 0x20000000 11052131Smckusick #define MACH_SR_BOOT_EXC_VEC 0x00400000 11152131Smckusick #define MACH_SR_TLB_SHUTDOWN 0x00200000 11252131Smckusick #define MACH_SR_PARITY_ERR 0x00100000 11352131Smckusick #define MACH_SR_CACHE_MISS 0x00080000 11452131Smckusick #define MACH_SR_PARITY_ZERO 0x00040000 11552131Smckusick #define MACH_SR_SWAP_CACHES 0x00020000 11652131Smckusick #define MACH_SR_ISOL_CACHES 0x00010000 11752131Smckusick #define MACH_SR_KU_OLD 0x00000020 11852131Smckusick #define MACH_SR_INT_ENA_OLD 0x00000010 11952131Smckusick #define MACH_SR_KU_PREV 0x00000008 12052131Smckusick #define MACH_SR_INT_ENA_PREV 0x00000004 12152131Smckusick #define MACH_SR_KU_CUR 0x00000002 12252131Smckusick #define MACH_SR_INT_ENA_CUR 0x00000001 12352131Smckusick #define MACH_SR_MBZ 0x0f8000c0 12452131Smckusick 12552131Smckusick /* 12652131Smckusick * The interrupt masks. 12752131Smckusick * If a bit in the mask is 1 then the interrupt is enabled (or pending). 12852131Smckusick */ 12952131Smckusick #define MACH_INT_MASK 0xff00 13052131Smckusick #define MACH_INT_MASK_5 0x8000 13152131Smckusick #define MACH_INT_MASK_4 0x4000 13252131Smckusick #define MACH_INT_MASK_3 0x2000 13352131Smckusick #define MACH_INT_MASK_2 0x1000 13452131Smckusick #define MACH_INT_MASK_1 0x0800 13552131Smckusick #define MACH_INT_MASK_0 0x0400 13652131Smckusick #define MACH_HARD_INT_MASK 0xfc00 13752131Smckusick #define MACH_SOFT_INT_MASK_1 0x0200 13852131Smckusick #define MACH_SOFT_INT_MASK_0 0x0100 13952131Smckusick 14052131Smckusick /* 14152131Smckusick * The system control status register. 14252131Smckusick */ 143*52746Sralph #ifdef DS3100 14452131Smckusick #define MACH_CSR_MONO 0x0800 14552131Smckusick #define MACH_CSR_MEM_ERR 0x0400 14652131Smckusick #define MACH_CSR_VINT 0x0200 14752131Smckusick #define MACH_CSR_MBZ 0x9800 148*52746Sralph #endif 14952131Smckusick 150*52746Sralph #ifdef DS5000 151*52746Sralph #define MACH_CSR_IOINT_MASK 0x000000FF 152*52746Sralph #define MACH_CSR_BAUD38 0x00000100 153*52746Sralph #define MACH_CSR_DIAGDN 0x00000200 154*52746Sralph #define MACH_CSR_BNK32M 0x00000400 155*52746Sralph #define MACH_CSR_TXDIS 0x00000800 156*52746Sralph #define MACH_CSR_LEDIAG 0x00001000 157*52746Sralph #define MACH_CSR_CORRECT 0x00002000 158*52746Sralph #define MACH_CSR_ECCMD 0x0000C000 159*52746Sralph #define MACH_CSR_IOINTEN_MASK 0x00FF0000 160*52746Sralph #define MACH_CSR_IOINTEN_SHIFT 16 161*52746Sralph #define MACH_CSR_NRMMOD 0x01000000 162*52746Sralph #define MACH_CSR_REFEVEN 0x02000000 163*52746Sralph #define MACH_CSR_PRSVNVR 0x04000000 164*52746Sralph #define MACH_CSR_PSWARN 0x08000000 165*52746Sralph #define MACH_CSR_MBZ 0xFF000000 166*52746Sralph #endif 167*52746Sralph 16852131Smckusick /* 16952131Smckusick * The bits in the context register. 17052131Smckusick */ 17152131Smckusick #define MACH_CNTXT_PTE_BASE 0xFFE00000 17252131Smckusick #define MACH_CNTXT_BAD_VPN 0x001FFFFC 17352131Smckusick 17452131Smckusick /* 17552131Smckusick * Location of exception vectors. 17652131Smckusick */ 17752131Smckusick #define MACH_RESET_EXC_VEC 0xBFC00000 17852131Smckusick #define MACH_UTLB_MISS_EXC_VEC 0x80000000 17952131Smckusick #define MACH_GEN_EXC_VEC 0x80000080 18052131Smckusick 18152131Smckusick /* 18252131Smckusick * Coprocessor 0 registers: 18352131Smckusick * 18452131Smckusick * MACH_COP_0_TLB_INDEX TLB index. 18552131Smckusick * MACH_COP_0_TLB_RANDOM TLB random. 18652131Smckusick * MACH_COP_0_TLB_LOW TLB entry low. 18752131Smckusick * MACH_COP_0_TLB_CONTEXT TLB context. 18852131Smckusick * MACH_COP_0_BAD_VADDR Bad virtual address. 18952131Smckusick * MACH_COP_0_TLB_HI TLB entry high. 19052131Smckusick * MACH_COP_0_STATUS_REG Status register. 19152131Smckusick * MACH_COP_0_CAUSE_REG Exception cause register. 19252131Smckusick * MACH_COP_0_EXC_PC Exception PC. 19352131Smckusick * MACH_COP_0_PRID Processor revision identifier. 19452131Smckusick */ 19552131Smckusick #define MACH_COP_0_TLB_INDEX $0 19652131Smckusick #define MACH_COP_0_TLB_RANDOM $1 19752131Smckusick #define MACH_COP_0_TLB_LOW $2 19852131Smckusick #define MACH_COP_0_TLB_CONTEXT $4 19952131Smckusick #define MACH_COP_0_BAD_VADDR $8 20052131Smckusick #define MACH_COP_0_TLB_HI $10 20152131Smckusick #define MACH_COP_0_STATUS_REG $12 20252131Smckusick #define MACH_COP_0_CAUSE_REG $13 20352131Smckusick #define MACH_COP_0_EXC_PC $14 20452131Smckusick #define MACH_COP_0_PRID $15 20552131Smckusick 20652131Smckusick /* 20752131Smckusick * Values for the code field in a break instruction. 20852131Smckusick */ 209*52746Sralph #define MACH_BREAK_INSTR 0x0000000d 210*52746Sralph #define MACH_BREAK_VAL_MASK 0x03ff0000 211*52746Sralph #define MACH_BREAK_VAL_SHIFT 16 212*52746Sralph #define MACH_BREAK_KDB_VAL 512 213*52746Sralph #define MACH_BREAK_SSTEP_VAL 513 214*52746Sralph #define MACH_BREAK_BRKPT_VAL 514 215*52746Sralph #define MACH_BREAK_KDB (MACH_BREAK_INSTR | \ 216*52746Sralph (MACH_BREAK_KDB_VAL << MACH_BREAK_VAL_SHIFT)) 217*52746Sralph #define MACH_BREAK_SSTEP (MACH_BREAK_INSTR | \ 218*52746Sralph (MACH_BREAK_SSTEP_VAL << MACH_BREAK_VAL_SHIFT)) 219*52746Sralph #define MACH_BREAK_BRKPT (MACH_BREAK_INSTR | \ 220*52746Sralph (MACH_BREAK_BRKPT_VAL << MACH_BREAK_VAL_SHIFT)) 22152131Smckusick 22252131Smckusick /* 22352131Smckusick * Mininum and maximum cache sizes. 22452131Smckusick */ 22552131Smckusick #define MACH_MIN_CACHE_SIZE (16 * 1024) 226*52746Sralph #define MACH_MAX_CACHE_SIZE (256 * 1024) 22752131Smckusick 22852131Smckusick /* 22952131Smckusick * The floating point version and status registers. 23052131Smckusick */ 23152131Smckusick #define MACH_FPC_ID $0 23252131Smckusick #define MACH_FPC_CSR $31 23352131Smckusick 23452131Smckusick /* 23552131Smckusick * The floating point coprocessor status register bits. 23652131Smckusick */ 23752131Smckusick #define MACH_FPC_ROUNDING_BITS 0x00000003 23852131Smckusick #define MACH_FPC_ROUND_RN 0x00000000 23952131Smckusick #define MACH_FPC_ROUND_RZ 0x00000001 24052131Smckusick #define MACH_FPC_ROUND_RP 0x00000002 24152131Smckusick #define MACH_FPC_ROUND_RM 0x00000003 24252131Smckusick #define MACH_FPC_STICKY_BITS 0x0000007c 24352131Smckusick #define MACH_FPC_STICKY_INEXACT 0x00000004 24452131Smckusick #define MACH_FPC_STICKY_UNDERFLOW 0x00000008 24552131Smckusick #define MACH_FPC_STICKY_OVERFLOW 0x00000010 24652131Smckusick #define MACH_FPC_STICKY_DIV0 0x00000020 24752131Smckusick #define MACH_FPC_STICKY_INVALID 0x00000040 24852131Smckusick #define MACH_FPC_ENABLE_BITS 0x00000f80 24952131Smckusick #define MACH_FPC_ENABLE_INEXACT 0x00000080 25052131Smckusick #define MACH_FPC_ENABLE_UNDERFLOW 0x00000100 25152131Smckusick #define MACH_FPC_ENABLE_OVERFLOW 0x00000200 25252131Smckusick #define MACH_FPC_ENABLE_DIV0 0x00000400 25352131Smckusick #define MACH_FPC_ENABLE_INVALID 0x00000800 25452131Smckusick #define MACH_FPC_EXCEPTION_BITS 0x0003f000 25552131Smckusick #define MACH_FPC_EXCEPTION_INEXACT 0x00001000 25652131Smckusick #define MACH_FPC_EXCEPTION_UNDERFLOW 0x00002000 25752131Smckusick #define MACH_FPC_EXCEPTION_OVERFLOW 0x00004000 25852131Smckusick #define MACH_FPC_EXCEPTION_DIV0 0x00008000 25952131Smckusick #define MACH_FPC_EXCEPTION_INVALID 0x00010000 26052131Smckusick #define MACH_FPC_EXCEPTION_UNIMPL 0x00020000 26152131Smckusick #define MACH_FPC_COND_BIT 0x00800000 26252131Smckusick #define MACH_FPC_MBZ_BITS 0xff7c0000 26352131Smckusick 26452131Smckusick /* 26552131Smckusick * Constants to determine if have a floating point instruction. 26652131Smckusick */ 26752131Smckusick #define MACH_OPCODE_SHIFT 26 26852131Smckusick #define MACH_OPCODE_C1 0x11 26952131Smckusick 27052131Smckusick /* 27152131Smckusick * The low part of the TLB entry. 27252131Smckusick */ 27352131Smckusick #define VMMACH_TLB_PF_NUM 0xfffff000 27452131Smckusick #define VMMACH_TLB_NON_CACHEABLE_BIT 0x00000800 27552131Smckusick #define VMMACH_TLB_MOD_BIT 0x00000400 27652131Smckusick #define VMMACH_TLB_VALID_BIT 0x00000200 27752131Smckusick #define VMMACH_TLB_GLOBAL_BIT 0x00000100 27852131Smckusick 27952131Smckusick #define VMMACH_TLB_PHYS_PAGE_SHIFT 12 28052131Smckusick 28152131Smckusick /* 28252131Smckusick * The high part of the TLB entry. 28352131Smckusick */ 28452131Smckusick #define VMMACH_TLB_VIRT_PAGE_NUM 0xfffff000 28552131Smckusick #define VMMACH_TLB_PID 0x00000fc0 28652131Smckusick #define VMMACH_TLB_PID_SHIFT 6 28752131Smckusick #define VMMACH_TLB_VIRT_PAGE_SHIFT 12 28852131Smckusick 28952131Smckusick /* 29052131Smckusick * The shift to put the index in the right spot. 29152131Smckusick */ 29252131Smckusick #define VMMACH_TLB_INDEX_SHIFT 8 29352131Smckusick 29452131Smckusick /* 29552131Smckusick * The number of TLB entries and the first one that write random hits. 29652131Smckusick */ 29752131Smckusick #define VMMACH_NUM_TLB_ENTRIES 64 29852131Smckusick #define VMMACH_FIRST_RAND_ENTRY 8 29952131Smckusick 30052131Smckusick /* 30152131Smckusick * The number of process id entries. 30252131Smckusick */ 30352131Smckusick #define VMMACH_NUM_PIDS 64 30452131Smckusick 30552131Smckusick /* 30652131Smckusick * TLB probe return codes. 30752131Smckusick */ 30852131Smckusick #define VMMACH_TLB_NOT_FOUND 0 30952131Smckusick #define VMMACH_TLB_FOUND 1 31052131Smckusick #define VMMACH_TLB_FOUND_WITH_PATCH 2 31152131Smckusick #define VMMACH_TLB_PROBE_ERROR 3 31252131Smckusick 31352131Smckusick /* 31452131Smckusick * Kernel virtual address for user page table entries 31552131Smckusick * (i.e., the address for the context register). 31652131Smckusick */ 31752131Smckusick #define VMMACH_PTE_BASE 0xFFC00000 31852131Smckusick 31952131Smckusick #endif /* _MACHCONST */ 320