📄 cpu.h
字号:
/* $OpenBSD: cpu.h,v 1.4 1998/09/15 10:50:12 pefo Exp $ *//*- * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Ralph Campbell and Rick Macklem. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * Copyright (C) 1989 Digital Equipment Corporation. * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appears in all copies. * Digital Equipment Corporation makes no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * from: @(#)cpu.h 8.4 (Berkeley) 1/4/94 */#ifndef _MIPS_CPU_H_#define _MIPS_CPU_H_#include <machine/psl.h>#define KUSEG_ADDR 0x0#define CACHED_MEMORY_ADDR 0x80000000#define UNCACHED_MEMORY_ADDR 0xa0000000#define KSEG2_ADDR 0xc0000000#define MAX_MEM_ADDR 0xbe000000#define RESERVED_ADDR 0xbfc80000#define K_CALG_UNCACHED 2#define K_CALG_NONCOHERENT 3#define K_CALG_COH_SHAREABLE 5#ifndef _LOCORE#define CACHED_TO_PHYS(x) ((unsigned)(x) & 0x1fffffff)#define PHYS_TO_CACHED(x) ((unsigned)(x) | CACHED_MEMORY_ADDR)#define UNCACHED_TO_PHYS(x) ((unsigned)(x) & 0x1fffffff)#define PHYS_TO_UNCACHED(x) ((unsigned)(x) | UNCACHED_MEMORY_ADDR)#define VA_TO_CINDEX(x) ((unsigned)(x) & 0xffffff | CACHED_MEMORY_ADDR)#define CACHED_TO_UNCACHED(x) (PHYS_TO_UNCACHED(CACHED_TO_PHYS(x)))#define PHYS_TO_XKPHYS(cca, x) (0x8000000000000000LL|((u_int64_t)cca<<59)|(x))#define PHYS_TO_X_UNCACHED(p) PHYS_TO_XKPHYS(K_CALG_UNCACHED,(p))#define PHYS_TO_X_CACHED(p) PHYS_TO_XKPHYS(K_CALG_COH_SHAREABLE,(p))#else#define CACHED_TO_PHYS(x) ((x) & 0x1fffffff)#define PHYS_TO_CACHED(x) ((x) | CACHED_MEMORY_ADDR)#define UNCACHED_TO_PHYS(x) ((x) & 0x1fffffff)#define PHYS_TO_UNCACHED(x) ((x) | UNCACHED_MEMORY_ADDR)#define VA_TO_CINDEX(x) ((x) & 0xffffff | CACHED_MEMORY_ADDR)#define CACHED_TO_UNCACHED(x) (PHYS_TO_UNCACHED(CACHED_TO_PHYS(x)))#define PHYS_TO_XKPHYS(cca, x) (0x8000000000000000|(cca << 59)|(x))#define PHYS_TO_X_UNCACHED(p) PHYS_TO_XKPHYS(K_CALG_UNCACHED,(p))#define PHYS_TO_X_CACHED(p) PHYS_TO_XKPHYS(K_CALG_COH_SHAREABLE,(p))#endif#ifdef _KERNEL/* * The bits in the cause register. * * CR_BR_DELAY Exception happened in branch delay slot. * CR_COP_ERR Coprocessor error. * CR_IP Interrupt pending bits defined below. * CR_EXC_CODE The exception type (see exception codes below). */#define CR_BR_DELAY 0x80000000#define CR_COP_ERR 0x30000000#define CR_EXC_CODE 0x0000007c#define CR_IP 0x0000FF00#define CR_EXC_CODE_SHIFT 2/* * The bits in the status register. All bits are active when set to 1. */#define SR_COP_USABILITY 0xf0000000#define SR_COP_0_BIT 0x10000000#define SR_COP_1_BIT 0x20000000#define SR_RP 0x08000000#define SR_FR_32 0x04000000#define SR_RE 0x02000000#define SR_BOOT_EXC_VEC 0x00400000#define SR_TLB_SHUTDOWN 0x00200000#define SR_SOFT_RESET 0x00100000#define SR_DIAG_CH 0x00040000#define SR_DIAG_CE 0x00020000#define SR_DIAG_DE 0x00010000#define SR_KX 0x00000080#define SR_SX 0x00000040#define SR_UX 0x00000020#define SR_KSU_MASK 0x00000018#define SR_KSU_USER 0x00000010#define SR_KSU_SUPER 0x00000008#define SR_KSU_KERNEL 0x00000000#define SR_ERL 0x00000004#define SR_EXL 0x00000002#define SR_INT_ENAB 0x00000001/*#define SR_INT_MASK 0x0000ff00*//* * The interrupt masks. * If a bit in the mask is 1 then the interrupt is enabled (or pending). */#define INT_MASK 0xff00#define INT_MASK_5 0x8000#define INT_MASK_4 0x4000#define INT_MASK_3 0x2000#define INT_MASK_2 0x1000#define INT_MASK_1 0x0800#define INT_MASK_0 0x0400#define HARD_INT_MASK 0xfc00#define SOFT_INT_MASK_1 0x0200#define SOFT_INT_MASK_0 0x0100/* * RM7000 cause register expansion. */#define INT_MASK_PERF 0x00200000 /* 13 Performance counter */#define INT_MASK_TIMR 0x00100000 /* 12 Timer *//* * The bits in the context register. */#define CNTXT_PTE_BASE 0xff800000#define CNTXT_BAD_VPN2 0x007ffff0/* * Location of exception vectors. */#define RESET_EXC_VEC 0xbfc00000#define TLB_MISS_EXC_VEC 0x80000000#define XTLB_MISS_EXC_VEC 0x80000080#define CACHE_ERR_EXC_VEC 0x80000100#define GEN_EXC_VEC 0x80000180/* * Coprocessor 0 registers: */#define COP_0_TLB_INDEX $0#define COP_0_TLB_RANDOM $1#define COP_0_TLB_LO0 $2#define COP_0_TLB_LO1 $3#define COP_0_TLB_CONTEXT $4#define COP_0_TLB_PG_MASK $5#define COP_0_TLB_WIRED $6#define COP_0_BAD_VADDR $8#define COP_0_COUNT $9#define COP_0_TLB_HI $10#define COP_0_COMPARE $11#define COP_0_STATUS_REG $12#define COP_0_CAUSE_REG $13#define COP_0_EXC_PC $14#define COP_0_PRID $15#define COP_0_CONFIG $16#define COP_0_LLADDR $17#define COP_0_WATCH_LO $18#define COP_0_WATCH_HI $19#define COP_0_TLB_XCONTEXT $20#define COP_0_ECC $26#define COP_0_CACHE_ERR $27#define COP_0_TAG_LO $28#define COP_0_TAG_HI $29#define COP_0_ERROR_PC $30/* RM7000 specific */#define COP_0_WATCH_1 $18#define COP_0_WATCH_2 $19#define COP_0_WATCH_M $24#define COP_0_PC_COUNT $25#define COP_0_PC_CTRL $22#define COP_0_ICR $20 /* CFC */#define COP_0_DERR_0 $26 /* CFC */#define COP_0_DERR_1 $27 /* CFC *//* * Values for the code field in a break instruction. */#define BREAK_INSTR 0x0000000d#define BREAK_VAL_MASK 0x03ff0000#define BREAK_VAL_SHIFT 16#define BREAK_KDB_VAL 512#define BREAK_SSTEP_VAL 513#define BREAK_BRKPT_VAL 514#define BREAK_SOVER_VAL 515#define BREAK_DDB_VAL 516#define BREAK_KDB (BREAK_INSTR | (BREAK_KDB_VAL << BREAK_VAL_SHIFT))#define BREAK_SSTEP (BREAK_INSTR | (BREAK_SSTEP_VAL << BREAK_VAL_SHIFT))#define BREAK_BRKPT (BREAK_INSTR | (BREAK_BRKPT_VAL << BREAK_VAL_SHIFT))#define BREAK_SOVER (BREAK_INSTR | (BREAK_SOVER_VAL << BREAK_VAL_SHIFT))#define BREAK_DDB (BREAK_INSTR | (BREAK_DDB_VAL << BREAK_VAL_SHIFT))/* * Mininum and maximum cache sizes. */#define MIN_CACHE_SIZE (16 * 1024)#define MAX_CACHE_SIZE (256 * 1024)/* * The floating point version and status registers. */#define FPC_ID $0#define FPC_CSR $31/* * The floating point coprocessor status register bits. */#define FPC_ROUNDING_BITS 0x00000003#define FPC_ROUND_RN 0x00000000#define FPC_ROUND_RZ 0x00000001#define FPC_ROUND_RP 0x00000002#define FPC_ROUND_RM 0x00000003#define FPC_STICKY_BITS 0x0000007c#define FPC_STICKY_INEXACT 0x00000004#define FPC_STICKY_UNDERFLOW 0x00000008#define FPC_STICKY_OVERFLOW 0x00000010#define FPC_STICKY_DIV0 0x00000020#define FPC_STICKY_INVALID 0x00000040#define FPC_ENABLE_BITS 0x00000f80#define FPC_ENABLE_INEXACT 0x00000080#define FPC_ENABLE_UNDERFLOW 0x00000100#define FPC_ENABLE_OVERFLOW 0x00000200#define FPC_ENABLE_DIV0 0x00000400#define FPC_ENABLE_INVALID 0x00000800#define FPC_EXCEPTION_BITS 0x0003f000#define FPC_EXCEPTION_INEXACT 0x00001000#define FPC_EXCEPTION_UNDERFLOW 0x00002000#define FPC_EXCEPTION_OVERFLOW 0x00004000#define FPC_EXCEPTION_DIV0 0x00008000#define FPC_EXCEPTION_INVALID 0x00010000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -