📄 sbmips.h
字号:
/* ********************************************************************* * SB1250 Board Support Package * * MIPS64 CPU definitions File: sbmips.h * * This module contains constants and macros specific to the * SB1 MIPS64 core. * * Author: Mitch Lichtenberg (mitch@sibyte.com) * ********************************************************************* * * Copyright 2000,2001 * Broadcom Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA ********************************************************************* */#ifndef _SB_MIPS_H#define _SB_MIPS_H/* ********************************************************************* * Configure language ********************************************************************* */#if defined(__ASSEMBLY__)#define _ATYPE_#define _ATYPE32_#define _ATYPE64_#else#define _ATYPE_ (__SIZE_TYPE__)#define _ATYPE32_ (int)#define _ATYPE64_ (long long)#endif/* ********************************************************************* * Bitfield macros ********************************************************************* *//* * Make a mask for 1 bit at position 'n' */#define _MM_MAKEMASK1(n) (1 << (n))/* * Make a mask for 'v' bits at position 'n' */#define _MM_MAKEMASK(v,n) (((1<<(v))-1) << (n))/* * Make a value at 'v' at bit position 'n' */#define _MM_MAKEVALUE(v,n) ((v) << (n))/* * Retrieve a value from 'v' at bit position 'n' with 'm' mask bits */#define _MM_GETVALUE(v,n,m) (((v) & (m)) >> (n))/* ********************************************************************* * 32-bit MIPS Address Spaces ********************************************************************* */#ifdef __ASSEMBLY__#define _ACAST32_#define _ACAST64_#else#define _ACAST32_ _ATYPE_ _ATYPE32_ /* widen if necessary */#define _ACAST64_ _ATYPE64_ /* do _not_ narrow */#endif/* 32-bit address map */#define UBASE 0x00000000 /* user+ mapped */#define USIZE 0x80000000#define K0BASE (_ACAST32_ 0x80000000) /* kernel unmapped cached */#define K0SIZE 0x20000000#define K1BASE (_ACAST32_ 0xa0000000) /* kernel unmapped uncached */#define K1SIZE 0x20000000#define KSBASE (_ACAST32_ 0xc0000000) /* supervisor+ mapped */#define KSSIZE 0x20000000#define K3BASE (_ACAST32_ 0xe0000000) /* kernel mapped */#define K3SIZE 0x20000000/* 64-bit address map additions to the above (sign-extended) ranges */#define XUBASE (_ACAST64_ 0x0000000080000000) /* user+ mapped */#define XUSIZE (_ACAST64_ 0x00000FFF80000000)#define XSSEGBASE (_ACAST64_ 0x4000000000000000) /* supervisor+ mapped */#define XSSEGSIZE (_ACAST64_ 0x0000100000000000)#define XKPHYSBASE (_ACAST64_ 0x8000000000000000) /* kernel unmapped */#define XKPHYSSIZE (_ACAST64_ 0x0000100000000000)#define XKSEGBASE (_ACAST64_ 0xC000000000000000) /* kernel mapped */#define XKSEGSIZE (_ACAST64_ 0x00000FFF80000000)#define GEN_VECT (_ACAST32_ 0x80000080)#define UTLB_VECT (_ACAST32_ 0x80000000)/* ********************************************************************* * Address space coercion macros ********************************************************************* */#define PHYS_TO_K0(pa) (K0BASE | (pa))#define PHYS_TO_K1(pa) (K1BASE | (pa))#define K0_TO_PHYS(va) ((va) & (K0SIZE-1))#define K1_TO_PHYS(va) ((va) & (K1SIZE-1))#define K0_TO_K1(va) ((va) | K1SIZE)#define K1_TO_K0(va) ((va) & ~K1SIZE)#define PHYS_TO_XK1(p) (_ACAST64_ (0xffffffffa0000000 | (p)))#define XK1_TO_PHYS(p) ((p) & (K1SIZE-1))#define PHYS_TO_XKPHYS(cca,p) (_SB_MAKEMASK1(63) | (_SB_MAKE64(cca) << 59) | (p))#define PHYS_TO_XKSEG_UNCACHED(p) PHYS_TO_XKPHYS(K_CALG_UNCACHED,(p))#define PHYS_TO_XKSEG_CACHED(p) PHYS_TO_XKPHYS(K_CALG_COH_SHAREABLE,(p))#define XKPHYS_TO_PHYS(p) ((p) & _SB_MAKEMASK(0,59))#if !defined(__ASSEMBLY__)#define mips_wbflush() __asm__ __volatile__ ("sync" : : : "memory")#define ISK0SEG(va) ((va) >= K0BASE && (va) <= (K0BASE + K0SIZE - 1))#define ISK1SEG(va) ((va) >= K1BASE && (va) <= (K1BASE + K1SIZE - 1))#endif/* ********************************************************************* * Register aliases ********************************************************************* */#if defined(__ASSEMBLY__)#define zero $0#define AT $1 /* assembler temporaries */#define v0 $2 /* value holders */#define v1 $3#define a0 $4 /* arguments */#define a1 $5#define a2 $6#define a3 $7#define t0 $8 /* temporaries */#define t1 $9#define t2 $10#define t3 $11#define t4 $12#define t5 $13#define t6 $14#define t7 $15#define ta0 $12#define ta1 $13#define ta2 $14#define ta3 $15#define s0 $16 /* saved registers */#define s1 $17#define s2 $18#define s3 $19#define s4 $20#define s5 $21#define s6 $22#define s7 $23#define t8 $24 /* temporaries */#define t9 $25#define k0 $26 /* kernel registers */#define k1 $27#define gp $28 /* global pointer */#define sp $29 /* stack pointer */#define s8 $30 /* saved register */#define fp $30 /* frame pointer */#define ra $31 /* return address */#endif/* ********************************************************************* * CP0 Registers ********************************************************************* */#if defined(__ASSEMBLY__)#define C0_INX $0 /* CP0: TLB Index */#define C0_RAND $1 /* CP0: TLB Random */#define C0_TLBLO0 $2 /* CP0: TLB EntryLo0 */#define C0_TLBLO C0_TLBLO0 /* CP0: TLB EntryLo0 */#define C0_TLBLO1 $3 /* CP0: TLB EntryLo1 */#define C0_CTEXT $4 /* CP0: Context */#define C0_PGMASK $5 /* CP0: TLB PageMask */#define C0_WIRED $6 /* CP0: TLB Wired */#define C0_BADVADDR $8 /* CP0: Bad Virtual Address */#define C0_COUNT $9 /* CP0: Count */#define C0_TLBHI $10 /* CP0: TLB EntryHi */#define C0_COMPARE $11 /* CP0: Compare */#define C0_SR $12 /* CP0: Processor Status */#define C0_STATUS C0_SR /* CP0: Processor Status */#define C0_CAUSE $13 /* CP0: Exception Cause */#define C0_EPC $14 /* CP0: Exception PC */#define C0_PRID $15 /* CP0: Processor Revision Indentifier */#define C0_CONFIG $16 /* CP0: Config */#define C0_LLADDR $17 /* CP0: LLAddr */#define C0_WATCHLO $18 /* CP0: WatchpointLo */#define C0_WATCHHI $19 /* CP0: WatchpointHi */#define C0_XCTEXT $20 /* CP0: XContext */#define C0_ECC $26 /* CP0: ECC */#define C0_CACHEERR $27 /* CP0: CacheErr */#define C0_TAGLO $28 /* CP0: TagLo */#define C0_TAGHI $29 /* CP0: TagHi */#define C0_ERREPC $30 /* CP0: ErrorEPC */#else#define C0_INX 0 /* CP0: TLB Index */#define C0_RAND 1 /* CP0: TLB Random */#define C0_TLBLO0 2 /* CP0: TLB EntryLo0 */#define C0_TLBLO C0_TLBLO0 /* CP0: TLB EntryLo0 */#define C0_TLBLO1 3 /* CP0: TLB EntryLo1 */#define C0_CTEXT 4 /* CP0: Context */#define C0_PGMASK 5 /* CP0: TLB PageMask */#define C0_WIRED 6 /* CP0: TLB Wired */#define C0_BADVADDR 8 /* CP0: Bad Virtual Address */#define C0_COUNT 9 /* CP0: Count */#define C0_TLBHI 10 /* CP0: TLB EntryHi */#define C0_COMPARE 11 /* CP0: Compare */#define C0_SR 12 /* CP0: Processor Status */#define C0_STATUS C0_SR /* CP0: Processor Status */#define C0_CAUSE 13 /* CP0: Exception Cause */#define C0_EPC 14 /* CP0: Exception PC */#define C0_PRID 15 /* CP0: Processor Revision Indentifier */#define C0_CONFIG 16 /* CP0: Config */#define C0_LLADDR 17 /* CP0: LLAddr */#define C0_WATCHLO 18 /* CP0: WatchpointLo */#define C0_WATCHHI 19 /* CP0: WatchpointHi */#define C0_XCTEXT 20 /* CP0: XContext */#define C0_ECC 26 /* CP0: ECC */#define C0_CACHEERR 27 /* CP0: CacheErr */#define C0_TAGLO 28 /* CP0: TagLo */#define C0_TAGHI 29 /* CP0: TagHi */#define C0_ERREPC 30 /* CP0: ErrorEPC */#endif/* ********************************************************************* * CP1 (floating point) control registers ********************************************************************* */#define FPA_IRR 0 /* CP1: Implementation/Revision */#define FPA_CSR 31 /* CP1: Control/Status *//* ********************************************************************* * Macros for generating assembly language routines ********************************************************************* */#if defined(__ASSEMBLY__)/* global leaf function (does not call other functions) */#define LEAF(name) \ .globl name; \ .ent name; \name:/* global alternate entry to (local or global) leaf function */#define XLEAF(name) \ .globl name; \ .aent name; \name:/* end of a global function */#define END(name) \ .size name,.-name; \ .end name/* local leaf function (does not call other functions) */#define SLEAF(name) \ .ent name; \name:/* local alternate entry to (local or global) leaf function */#define SXLEAF(name) \ .aent name; \name:/* end of a local function */#define SEND(name) \ END(name)/* define & export a symbol */#define EXPORT(name) \ .globl name; \name:/* import a symbol */#define IMPORT(name, size) \ .extern name,size/* define a zero-fill common block (BSS if not overridden) with a global name */#define COMM(name,size) \ .comm name,size/* define a zero-fill common block (BSS if not overridden) with a local name */#define LCOMM(name,size) \ .lcomm name,size#endif/* Floating-Point Control register bits */#define CSR_C 0x00800000#define CSR_EXC 0x0003f000#define CSR_EE 0x00020000#define CSR_EV 0x00010000#define CSR_EZ 0x00008000#define CSR_EO 0x00004000#define CSR_EU 0x00002000#define CSR_EI 0x00001000#define CSR_TV 0x00000800#define CSR_TZ 0x00000400#define CSR_TO 0x00000200#define CSR_TU 0x00000100#define CSR_TI 0x00000080#define CSR_SV 0x00000040#define CSR_SZ 0x00000020#define CSR_SO 0x00000010
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -