Files
Custom-Operating-System/kernel/include/platform/arm64/registers.h

63 lines
1.2 KiB
C

{
uint64_t el;
asm volatile("mrs %x0, CurrentEL"
: "=r"(el)
:);
return el >> 2;
}
static inline uint64_t read_sp()
{
uint64_t sp;
asm volatile("mov %x0, sp"
: "=r"(sp)
:);
return sp;
}
static inline uint64_t read_fp()
{
uint64_t fp;
asm volatile("mov %x0, x29"
: "=r"(fp)
:);
return fp;
}
static inline uint64_t read_cbar()
{
uint32_t val;
asm volatile("mrs %x0, S3_1_C15_C3_0"
: "=r"(val)
:);
return val;
}
static inline uint64_t read_cpacr()
{
uint64_t cpacr;
asm volatile("mrs %x0, CPACR_EL1"
: "=r"(cpacr)
:);
return cpacr;
}
static inline void write_cpacr(uint64_t val)
{
asm volatile("msr CPACR_EL1, %x0"
:
: "r"(val)
: "memory");
asm volatile("isb");
}
static inline void write_tpidr(uint64_t val)
{
asm volatile("msr TPIDR_EL1, %x0"
:
: "r"(val)
: "memory");
asm volatile("isb");
}
#endif /* _KERNEL_PLATFORM_ARM64_REGISTERS_H */