Merge branch 'master' into isa/arm64
[lunaix-os.git] / lunaix-os / arch / aarch64 / includes / sys / msrs.h
1 #ifndef __LUNAIX_AA64_MSRS_H
2 #define __LUNAIX_AA64_MSRS_H
3
4 #include <lunaix/compiler.h>
5
6 #define __sr_encode(op0, op1, crn, crm, op2)    \
7             s##op0##_##op1##_c##crn##_c##crm##_##op2
8
9 #define SCTLR_EL1       __sr_encode(3, 0,  1,  0, 0)
10 #define TCR_EL1         __sr_encode(3, 0,  2,  0, 2)
11 #define TTBR0_EL1       __sr_encode(3, 0,  2,  0, 0)
12 #define TTBR1_EL1       __sr_encode(3, 0,  2,  0, 1)
13 #define VBAR_EL1        __sr_encode(3, 0, 12,  0, 1)
14 #define CurrentEL       __sr_encode(3, 0,  4,  2, 2)
15 #define ELR_E1          __sr_encode(3, 0,  4,  0, 1)
16 #define SPSel           __sr_encode(3, 0,  4,  2, 0)
17 #define SPSR_EL1        __sr_encode(3, 0,  4,  0, 0)
18 #define DAIF_EL1        __sr_encode(3, 3,  4,  2, 1)
19 #define ALLINT_EL1      __sr_encode(3, 0,  4,  3, 0)
20 #define SP_EL0          __sr_encode(3, 0,  4,  1, 0)
21 #define SP_EL1          __sr_encode(3, 4,  4,  1, 0)
22
23 #define read_sysreg(reg)                                    \
24         ({  unsigned long _x;                               \
25             asm ("mrs %0, " stringify(reg):"=r"(_x));       \
26             _x;                                             \
27         })
28
29 #define set_sysreg(reg, v)                                  \
30         ({  unsigned long _x = v;                           \
31             asm ("msr " stringify(reg) ", %0"::"r"(_x));    \
32             _x;                                             \
33         })
34
35 #define SCTRL_SPINTMASK     (1UL << 62)
36 #define SCTRL_NMI           (1UL << 61)
37 #define SCTRL_EE            (1UL << 25)
38 #define SCTRL_E0E           (1UL << 24)
39 #define SCTRL_WXN           (1UL << 19)
40 #define SCTRL_nAA           (1UL << 6)
41 #define SCTRL_SA0           (1UL << 4)
42 #define SCTRL_SA            (1UL << 3)
43 #define SCTRL_A             (1UL << 1)
44 #define SCTRL_M             (1UL << 0)
45
46 #define TCR_DS              (1UL << 59)
47 #define TCR_E0PD1           (1UL << 56)
48 #define TCR_E0PD0           (1UL << 55)
49 #define TCR_TBID1           (1UL << 52)
50 #define TCR_TBID0           (1UL << 51)
51 #define TCR_HPD1            (1UL << 42)
52 #define TCR_HPD0            (1UL << 41)
53 #define TCR_HD              (1UL << 40)
54 #define TCR_HA              (1UL << 39)
55 #define TCR_TBI1            (1UL << 38)
56 #define TCR_TBI0            (1UL << 37)
57 #define TCR_AS              (1UL << 36)
58
59 #define TCR_G4K             (0b01)
60 #define TCR_G16K            (0b10)
61 #define TCR_G64K            (0b11)
62
63 #define TCR_SHNS            (0b01)
64 #define TCR_SHOS            (0b10)
65 #define TCR_SHIS            (0b11)
66
67 #define TCR_TG1(g)          (((g) & 0b11) << 30)
68 #define TCR_TG0(g)          (((g) & 0b11) << 14)
69
70 #define TCR_T1SZ(sz)        (((sz) & 0b111111) << 16)
71 #define TCR_T0SZ(sz)        (((sz) & 0b111111))
72
73 #define TCR_EPD1            (1UL << 23)
74 #define TCR_EPD0            (1UL << 7)
75 #define TCR_A1              (1UL << 22)
76
77 #endif /* __LUNAIX_AA64_MSRS_H */