0001
0002 #ifndef _SPARC64_HEAD_H
0003 #define _SPARC64_HEAD_H
0004
0005 #include <asm/pstate.h>
0006
0007
0008 #define SET_GL(val) \
0009 .word 0xa1902000 | val
0010
0011
0012 #define GET_GL_GLOBAL(N) \
0013 .word 0x81540000 | (N << 25)
0014
0015 #define KERNBASE 0x400000
0016
0017 #define PTREGS_OFF (STACK_BIAS + STACKFRAME_SZ)
0018
0019 #define RTRAP_PSTATE (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_IE)
0020 #define RTRAP_PSTATE_IRQOFF (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV)
0021 #define RTRAP_PSTATE_AG_IRQOFF (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG)
0022
0023 #define __CHEETAH_ID 0x003e0014
0024 #define __JALAPENO_ID 0x003e0016
0025 #define __SERRANO_ID 0x003e0022
0026
0027 #define CHEETAH_MANUF 0x003e
0028 #define CHEETAH_IMPL 0x0014
0029 #define CHEETAH_PLUS_IMPL 0x0015
0030 #define JALAPENO_IMPL 0x0016
0031 #define JAGUAR_IMPL 0x0018
0032 #define PANTHER_IMPL 0x0019
0033 #define SERRANO_IMPL 0x0022
0034
0035 #define BRANCH_IF_SUN4V(tmp1,label) \
0036 sethi %hi(is_sun4v), %tmp1; \
0037 lduw [%tmp1 + %lo(is_sun4v)], %tmp1; \
0038 brnz,pn %tmp1, label; \
0039 nop
0040
0041 #define BRANCH_IF_CHEETAH_BASE(tmp1,tmp2,label) \
0042 rdpr %ver, %tmp1; \
0043 sethi %hi(__CHEETAH_ID), %tmp2; \
0044 srlx %tmp1, 32, %tmp1; \
0045 or %tmp2, %lo(__CHEETAH_ID), %tmp2;\
0046 cmp %tmp1, %tmp2; \
0047 be,pn %icc, label; \
0048 nop;
0049
0050 #define BRANCH_IF_JALAPENO(tmp1,tmp2,label) \
0051 rdpr %ver, %tmp1; \
0052 sethi %hi(__JALAPENO_ID), %tmp2; \
0053 srlx %tmp1, 32, %tmp1; \
0054 or %tmp2, %lo(__JALAPENO_ID), %tmp2;\
0055 cmp %tmp1, %tmp2; \
0056 be,pn %icc, label; \
0057 nop;
0058
0059 #define BRANCH_IF_CHEETAH_PLUS_OR_FOLLOWON(tmp1,tmp2,label) \
0060 rdpr %ver, %tmp1; \
0061 srlx %tmp1, (32 + 16), %tmp2; \
0062 cmp %tmp2, CHEETAH_MANUF; \
0063 bne,pt %xcc, 99f; \
0064 sllx %tmp1, 16, %tmp1; \
0065 srlx %tmp1, (32 + 16), %tmp2; \
0066 cmp %tmp2, CHEETAH_PLUS_IMPL; \
0067 bgeu,pt %xcc, label; \
0068 99: nop;
0069
0070 #define BRANCH_IF_ANY_CHEETAH(tmp1,tmp2,label) \
0071 rdpr %ver, %tmp1; \
0072 srlx %tmp1, (32 + 16), %tmp2; \
0073 cmp %tmp2, CHEETAH_MANUF; \
0074 bne,pt %xcc, 99f; \
0075 sllx %tmp1, 16, %tmp1; \
0076 srlx %tmp1, (32 + 16), %tmp2; \
0077 cmp %tmp2, CHEETAH_IMPL; \
0078 bgeu,pt %xcc, label; \
0079 99: nop;
0080
0081 #endif