mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 02:47:35 +00:00
Kernel/aarch64: Add Saved Program Status Register EL1 (SPSR_EL1)
This commit is contained in:
parent
fb803e8025
commit
9554e5ca48
1 changed files with 48 additions and 0 deletions
|
@ -454,6 +454,54 @@ struct alignas(u64) SCR_EL3 {
|
||||||
};
|
};
|
||||||
static_assert(sizeof(SCR_EL3) == 8);
|
static_assert(sizeof(SCR_EL3) == 8);
|
||||||
|
|
||||||
|
// C5.2.18 SPSR_EL1, Saved Program Status Register (EL1)
|
||||||
|
struct alignas(u64) SPSR_EL1 {
|
||||||
|
enum Mode : u8 {
|
||||||
|
EL0t = 0b0000,
|
||||||
|
EL1t = 0b0100,
|
||||||
|
EL1h = 0b0101
|
||||||
|
};
|
||||||
|
|
||||||
|
Mode M : 4;
|
||||||
|
int M_4 : 1 = 0;
|
||||||
|
int _reserved5 : 1 = 0;
|
||||||
|
int F : 1;
|
||||||
|
int I : 1;
|
||||||
|
int A : 1;
|
||||||
|
int D : 1;
|
||||||
|
int BTYPE : 2;
|
||||||
|
int SSBS : 1;
|
||||||
|
int _reserved13 : 7 = 0;
|
||||||
|
int IL : 1;
|
||||||
|
int SS : 1;
|
||||||
|
int PAN : 1;
|
||||||
|
int UA0 : 1;
|
||||||
|
int DIT : 1;
|
||||||
|
int TCO : 1;
|
||||||
|
int _reserved26 : 2 = 0;
|
||||||
|
int V : 1;
|
||||||
|
int C : 1;
|
||||||
|
int Z : 1;
|
||||||
|
int N : 1;
|
||||||
|
int _reserved32 : 32 = 0;
|
||||||
|
|
||||||
|
static inline void write(SPSR_EL1 spsr_el1)
|
||||||
|
{
|
||||||
|
asm("msr spsr_el1, %[value]" ::[value] "r"(spsr_el1));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline SPSR_EL1 read()
|
||||||
|
{
|
||||||
|
SPSR_EL1 spsr;
|
||||||
|
|
||||||
|
asm("mrs %[value], spsr_el1"
|
||||||
|
: [value] "=r"(spsr));
|
||||||
|
|
||||||
|
return spsr;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
static_assert(sizeof(SPSR_EL1) == 8);
|
||||||
|
|
||||||
struct alignas(u64) SPSR_EL2 {
|
struct alignas(u64) SPSR_EL2 {
|
||||||
enum Mode : u16 {
|
enum Mode : u16 {
|
||||||
EL0t = 0b0000,
|
EL0t = 0b0000,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue