Implement first basic interrupt handler

This commit is contained in:
2025-05-29 18:21:42 +02:00
parent 18233ec722
commit 20808a7992
16 changed files with 283 additions and 32 deletions

51
src/vector.S Normal file
View File

@@ -0,0 +1,51 @@
.global vector_table
.extern irq_handler
.macro ventry label
.align 7
b \label
.endm
.section .vector_table, "ax"
vector_table:
ventry .
ventry .
ventry .
ventry .
ventry .
ventry irq_handler // IRQ(Interrupt Request) 0x280
.align 4
.extern main
.global el2_to_el1
el2_to_el1:
mov x0, #(1 << 31)
msr HCR_EL2, x0
isb
// Set SPSR_EL2: return to EL1h (EL1, using SP_EL1)
mov x0, #(0b0101)
msr SPSR_EL2, x0
isb
// Set return address to ELR_EL2
ldr x0, =kernel_main
msr ELR_EL2, x0
isb
// Set SP_EL1 to stack base
ldr x0, =__stack_end
msr SP_EL1, x0
isb
// Set VBAR_EL1 to vector table
adr x0, vector_table
msr VBAR_EL1, x0
isb
// Return to EL1
eret