feat(kernel): add PL011 UART console and arch I/O helpers

- Add IOSerial: PL011 (0x0900_0000) TX with FIFO-full polling, yield while waiting
- Add Arch/IO.h (32-bit MMIO with DSB) and Arch/CPU.h (yield, WFI)
- Extend types.h (e.g. ASCII, Address, Int/UInt aliases)
- Wire KernelMain to IOSerialPutString for early boot output
- Drop .sourcekit-lsp config; note IO glob in CMake (commented)
This commit is contained in:
karina
2026-04-23 21:25:15 +04:00
parent cf142ba78e
commit 502413b9ab
8 changed files with 68 additions and 11 deletions
+9
View File
@@ -0,0 +1,9 @@
#pragma once
static inline void CPUYield() {
__asm__ volatile ("yield" ::: "memory");
}
static inline void CPUWaitForInterrupt() {
__asm__ volatile ("wfi" ::: "memory");
}
+14
View File
@@ -0,0 +1,14 @@
#pragma once
#include <types.h>
static inline void IOAddressWrite32(UInt64 address, UInt32 value) {
__asm__ volatile ("dsb sy" ::: "memory"); // wait till all previous writes are finished physically
*(volatile UInt32*)address = value;
__asm__ volatile ("dsb sy" ::: "memory"); // wait till my write is finished physically
}
static inline UInt32 IOAddressRead32(UInt64 address) {
UInt32 value = *(volatile UInt32*)address;
__asm__ volatile ("dsb ld" ::: "memory"); // wait till my read is finished physically
return value;
}