X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/9b840d9c5c0db5e621e475dc8414edd98497ed36..7e13988c1113d38bec17bd79b71757d78d977e76:/lunaix-os/arch/aarch64/includes/asm/hart.h diff --git a/lunaix-os/arch/aarch64/includes/asm/hart.h b/lunaix-os/arch/aarch64/includes/asm/hart.h index f9e7d0a..fa1f4bf 100644 --- a/lunaix-os/arch/aarch64/includes/asm/hart.h +++ b/lunaix-os/arch/aarch64/includes/asm/hart.h @@ -3,74 +3,77 @@ #ifndef __ASM__ #include +#include +#include + +#define SYNDROME_ETYPE BITFIELD(63, 56) struct hart_state; struct regcontext { union { - reg_t x[32]; + reg_t x[31]; struct { - reg_t x[29]; + reg_t x_[29]; reg_t fp; reg_t lr; - reg_t sp; }; }; -} compact; +} compact align(8); struct exec_param { struct hart_state* parent_state; - reg_t vector; + reg_t spsr; + reg_t link; + struct { + reg_t sp_el0; + reg_t rsvd; + }; + reg_t syndrome; - reg_t elink; - reg_t sp; -} compact; +} compact align(8); struct hart_state { reg_t depth; struct regcontext registers; - union - { - reg_t sp; - volatile struct exec_param* execp; - }; -} compact; + struct exec_param execp; +} compact align(16); static inline int hart_vector_stamp(struct hart_state* hstate) { - return hstate->execp->vector; + return BITS_GET(hstate->execp.syndrome, SYNDROME_ETYPE); } static inline unsigned int hart_ecause(struct hart_state* hstate) { - return hstate->execp->syndrome; + return hstate->execp.syndrome; } static inline struct hart_state* hart_parent_state(struct hart_state* hstate) { - return hstate->execp->parent_state; + return hstate->execp.parent_state; } static inline void hart_push_state(struct hart_state* p_hstate, struct hart_state* hstate) { - hstate->execp->parent_state = p_hstate; + hstate->execp.parent_state = p_hstate; } static inline ptr_t hart_pc(struct hart_state* hstate) { - return hstate->execp->elink; + return hstate->execp.link; } static inline ptr_t hart_sp(struct hart_state* hstate) { - return hstate->execp->sp; + return __ptr(&hstate[-1]); } static inline bool