3b6e68bc16
- Added LAPIC implementation in `apic.c` and `apic.h`, including initialization and basic operations. - Introduced IOAPIC (I/O Advanced Programmable Interrupt Controller) support in `ioapic.c` and `ioapic.h`, parsing the ACPI MADT to locate IOAPICs and manage redirection entries. - Implemented PS/2 keyboard driver in `ps2.c` and `ps2.h`, handling keyboard interrupts and translating scancodes to ASCII. - Attempted to make usermode work again (it failed, coming soon) - Cleaned up comments in `time.c` and `render.c` for clarity. Signed-off-by: kaguya <vpshinomiya@protonmail.com>
32 lines
829 B
ArmAsm
32 lines
829 B
ArmAsm
.global syscall_entry
|
|
|
|
syscall_entry:
|
|
swapgs
|
|
|
|
mov %rsp, %gs:0x10 # save user rsp for per cpu
|
|
|
|
push %rcx # save user rip
|
|
push %r11 # save rflags
|
|
|
|
# Save original args before we clobber them
|
|
push %rdi # orig rdi (arg1)
|
|
push %rsi # orig rsi (arg2)
|
|
push %rdx # orig rdx (arg3)
|
|
|
|
# Handle r8/r9 before r8 gets clobbered
|
|
mov %r8, %r9 # r9 = orig r8 (6th param)
|
|
mov %r10, %r8 # r8 = orig r10 (5th param)
|
|
|
|
# Pop in reverse order to place into correct SysV registers
|
|
pop %rcx # rcx = orig rdx (4th param)
|
|
pop %rdx # rdx = orig rsi (3rd param)
|
|
pop %rsi # rsi = orig rdi (2nd param)
|
|
mov %rax, %rdi # rdi = rax (1st param = syscall number)
|
|
|
|
call syscall_handler
|
|
|
|
pop %r11
|
|
pop %rcx
|
|
|
|
swapgs
|
|
sysretq |