aa64: finalise context switch, page fault handler and syscall
[lunaix-os.git] / lunaix-os / arch / aarch64 / includes / asm / aa64_msrs.h
index b49d1022cde9a2ebd0c62df3c156a4afbf0eaea6..7add2848c98858de87bc57fe56f9df0676af11a4 100644 (file)
 #define CurrentEL       __sr_encode(3, 0,  4,  2, 2)
 #define ELR_E1          __sr_encode(3, 0,  4,  0, 1)
 #define SPSel           __sr_encode(3, 0,  4,  2, 0)
 #define CurrentEL       __sr_encode(3, 0,  4,  2, 2)
 #define ELR_E1          __sr_encode(3, 0,  4,  0, 1)
 #define SPSel           __sr_encode(3, 0,  4,  2, 0)
+
 #define SPSR_EL1        __sr_encode(3, 0,  4,  0, 0)
 #define SPSR_EL1        __sr_encode(3, 0,  4,  0, 0)
+#define SPSR_EL2        __sr_encode(3, 4,  4,  0, 0)
+#define SPSR_EL3        __sr_encode(3, 6,  4,  0, 0)
+
 #define DAIF_EL1        __sr_encode(3, 3,  4,  2, 1)
 #define ALLINT_EL1      __sr_encode(3, 0,  4,  3, 0)
 #define SP_EL0          __sr_encode(3, 0,  4,  1, 0)
 #define SP_EL1          __sr_encode(3, 4,  4,  1, 0)
 
 #define DAIF_EL1        __sr_encode(3, 3,  4,  2, 1)
 #define ALLINT_EL1      __sr_encode(3, 0,  4,  3, 0)
 #define SP_EL0          __sr_encode(3, 0,  4,  1, 0)
 #define SP_EL1          __sr_encode(3, 4,  4,  1, 0)
 
+#define FAR_EL1         __sr_encode(3, 0,  6,  0, 0)
+
+#define ID_AA64PFR0_EL1          __sr_encode(3, 0,  0,  4, 0)
+
 #ifndef __ASM__
 #define read_sysreg(reg)                                    \
         ({  unsigned long _x;                               \
 #ifndef __ASM__
 #define read_sysreg(reg)                                    \
         ({  unsigned long _x;                               \
 #define SCTRL_A             (1UL << 1)
 #define SCTRL_M             (1UL << 0)
 
 #define SCTRL_A             (1UL << 1)
 #define SCTRL_M             (1UL << 0)
 
+#define sysreg_flagging(reg, set, unset)                    \
+        ({                                                  \
+            unsigned long _x;                               \
+            _x = read_sysreg(reg);                          \
+            _x = (_x & ~(unset)) | (set);                   \
+            set_sysreg(reg, _x);                            \
+            _x;                                             \
+        })
+
 #endif
 #endif /* __LUNAIX_AA64_MSRS_H */
 #endif
 #endif /* __LUNAIX_AA64_MSRS_H */