mirror of
https://github.com/iceHtwoO/novaOS.git
synced 2026-04-17 04:32:27 +00:00
* refactor: organize code * feat: move EL0 stack to virtual space * wip * feat: Enable EL0 basic mailbox access via SVCs * refactor: move irq interrupts
134 lines
3.3 KiB
ArmAsm
134 lines
3.3 KiB
ArmAsm
.section .vector_t , "ax"
|
|
.extern irq_handler
|
|
|
|
.macro ventry label
|
|
.align 7
|
|
b \label
|
|
.endm
|
|
|
|
.global vector_table
|
|
vector_table:
|
|
// Exceptions from current EL using SP_EL0
|
|
ventry .
|
|
ventry .
|
|
ventry .
|
|
ventry .
|
|
|
|
// Exceptions from the current EL using SP_ELx
|
|
ventry synchronous_interrupt_no_el_change // Synchronous Exception 0x200
|
|
ventry irq_handler // IRQ(Interrupt Request) 0x280
|
|
ventry . // FIQ(Fast Interrupt Request) 0x300
|
|
ventry . // SError 0x580
|
|
|
|
// Exceptions from lower EL AArch64
|
|
ventry synchronous_interrupt_imm_lower_aarch64 // Synchronous Exception 0x400
|
|
ventry irq_handler // IRQ(Interrupt Request) 0x480
|
|
ventry . // FIQ(Fast Interrupt Request) 0x500
|
|
ventry . // SError 0x580
|
|
|
|
// Exceptions from lower EL AArch32
|
|
ventry .
|
|
ventry .
|
|
ventry .
|
|
ventry .
|
|
|
|
.align 4
|
|
irq_handler:
|
|
sub sp, sp, #176
|
|
stp x0, x1, [sp, #0]
|
|
stp x2, x3, [sp, #16]
|
|
stp x4, x5, [sp, #32]
|
|
stp x6, x7, [sp, #48]
|
|
stp x8, x9, [sp, #64]
|
|
stp x10, x11, [sp, #80]
|
|
stp x12, x13, [sp, #96]
|
|
stp x14, x15, [sp, #112]
|
|
stp x16, x17, [sp, #128]
|
|
stp x18, x29, [sp, #144]
|
|
stp x30, xzr, [sp, #160]
|
|
|
|
bl rust_irq_handler
|
|
|
|
ldp x0, x1, [sp, #0]
|
|
ldp x2, x3, [sp, #16]
|
|
ldp x4, x5, [sp, #32]
|
|
ldp x6, x7, [sp, #48]
|
|
ldp x8, x9, [sp, #64]
|
|
ldp x10, x11, [sp, #80]
|
|
ldp x12, x13, [sp, #96]
|
|
ldp x14, x15, [sp, #112]
|
|
ldp x16, x17, [sp, #128]
|
|
ldp x18, x29, [sp, #144]
|
|
ldp x30, xzr, [sp, #160]
|
|
add sp, sp, #176
|
|
|
|
eret
|
|
|
|
.align 4
|
|
synchronous_interrupt_imm_lower_aarch64:
|
|
sub sp, sp, #176
|
|
stp x0, x1, [sp, #0]
|
|
stp x2, x3, [sp, #16]
|
|
stp x4, x5, [sp, #32]
|
|
stp x6, x7, [sp, #48]
|
|
stp x8, x9, [sp, #64]
|
|
stp x10, x11, [sp, #80]
|
|
stp x12, x13, [sp, #96]
|
|
stp x14, x15, [sp, #112]
|
|
stp x16, x17, [sp, #128]
|
|
stp x18, x29, [sp, #144]
|
|
stp x30, xzr, [sp, #160]
|
|
|
|
mov x0, sp
|
|
bl rust_synchronous_interrupt_imm_lower_aarch64
|
|
str x0, [sp, #0]
|
|
|
|
ldp x0, x1, [sp, #0]
|
|
ldp x2, x3, [sp, #16]
|
|
ldp x4, x5, [sp, #32]
|
|
ldp x6, x7, [sp, #48]
|
|
ldp x8, x9, [sp, #64]
|
|
ldp x10, x11, [sp, #80]
|
|
ldp x12, x13, [sp, #96]
|
|
ldp x14, x15, [sp, #112]
|
|
ldp x16, x17, [sp, #128]
|
|
ldp x18, x29, [sp, #144]
|
|
ldp x30, xzr, [sp, #160]
|
|
add sp, sp, #176
|
|
|
|
eret
|
|
|
|
.align 4
|
|
synchronous_interrupt_no_el_change:
|
|
sub sp, sp, #176
|
|
stp x0, x1, [sp, #0]
|
|
stp x2, x3, [sp, #16]
|
|
stp x4, x5, [sp, #32]
|
|
stp x6, x7, [sp, #48]
|
|
stp x8, x9, [sp, #64]
|
|
stp x10, x11, [sp, #80]
|
|
stp x12, x13, [sp, #96]
|
|
stp x14, x15, [sp, #112]
|
|
stp x16, x17, [sp, #128]
|
|
stp x18, x29, [sp, #144]
|
|
stp x30, xzr, [sp, #160]
|
|
|
|
mov x0, sp
|
|
bl rust_synchronous_interrupt_no_el_change
|
|
str x0, [sp, #0]
|
|
|
|
ldp x0, x1, [sp, #0]
|
|
ldp x2, x3, [sp, #16]
|
|
ldp x4, x5, [sp, #32]
|
|
ldp x6, x7, [sp, #48]
|
|
ldp x8, x9, [sp, #64]
|
|
ldp x10, x11, [sp, #80]
|
|
ldp x12, x13, [sp, #96]
|
|
ldp x14, x15, [sp, #112]
|
|
ldp x16, x17, [sp, #128]
|
|
ldp x18, x29, [sp, #144]
|
|
ldp x30, xzr, [sp, #160]
|
|
add sp, sp, #176
|
|
|
|
eret
|