aa64: finalise context switch, page fault handler and syscall
[lunaix-os.git] / lunaix-os / arch / aarch64 / includes / asm / aa64_msrs.h
1 #ifndef __LUNAIX_AA64_MSRS_H
2 #define __LUNAIX_AA64_MSRS_H
3
4 #include "aa64_asm.h"
5
6 #define SCTLR_EL1       __sr_encode(3, 0,  1,  0, 0)
7 #define TCR_EL1         __sr_encode(3, 0,  2,  0, 2)
8 #define TTBR0_EL1       __sr_encode(3, 0,  2,  0, 0)
9 #define TTBR1_EL1       __sr_encode(3, 0,  2,  0, 1)
10 #define VBAR_EL1        __sr_encode(3, 0, 12,  0, 1)
11 #define CurrentEL       __sr_encode(3, 0,  4,  2, 2)
12 #define ELR_E1          __sr_encode(3, 0,  4,  0, 1)
13 #define SPSel           __sr_encode(3, 0,  4,  2, 0)
14
15 #define SPSR_EL1        __sr_encode(3, 0,  4,  0, 0)
16 #define SPSR_EL2        __sr_encode(3, 4,  4,  0, 0)
17 #define SPSR_EL3        __sr_encode(3, 6,  4,  0, 0)
18
19 #define DAIF_EL1        __sr_encode(3, 3,  4,  2, 1)
20 #define ALLINT_EL1      __sr_encode(3, 0,  4,  3, 0)
21 #define SP_EL0          __sr_encode(3, 0,  4,  1, 0)
22 #define SP_EL1          __sr_encode(3, 4,  4,  1, 0)
23
24 #define FAR_EL1         __sr_encode(3, 0,  6,  0, 0)
25
26 #define ID_AA64PFR0_EL1          __sr_encode(3, 0,  0,  4, 0)
27
28 #ifndef __ASM__
29 #define read_sysreg(reg)                                    \
30         ({  unsigned long _x;                               \
31             asm ("mrs %0, " stringify(reg):"=r"(_x));       \
32             _x;                                             \
33         })
34
35 #define set_sysreg(reg, v)                                  \
36         ({  unsigned long _x = v;                           \
37             asm ("msr " stringify(reg) ", %0"::"r"(_x));    \
38             _x;                                             \
39         })
40
41 #define SCTRL_SPINTMASK     (1UL << 62)
42 #define SCTRL_NMI           (1UL << 61)
43 #define SCTRL_EE            (1UL << 25)
44 #define SCTRL_E0E           (1UL << 24)
45 #define SCTRL_WXN           (1UL << 19)
46 #define SCTRL_nAA           (1UL << 6)
47 #define SCTRL_SA0           (1UL << 4)
48 #define SCTRL_SA            (1UL << 3)
49 #define SCTRL_A             (1UL << 1)
50 #define SCTRL_M             (1UL << 0)
51
52 #define sysreg_flagging(reg, set, unset)                    \
53         ({                                                  \
54             unsigned long _x;                               \
55             _x = read_sysreg(reg);                          \
56             _x = (_x & ~(unset)) | (set);                   \
57             set_sysreg(reg, _x);                            \
58             _x;                                             \
59         })
60
61 #endif
62 #endif /* __LUNAIX_AA64_MSRS_H */