feat(lvgl): adapt LVGL for opencoreC with SSE2 SIMD blit, hardware tick, and desktop toast IPC
This commit is contained in:
@@ -577,12 +577,46 @@ pub extern "C" fn kernel_syscall_dispatcher(regs: &mut SyscallRegisters) {
|
||||
}
|
||||
regs.rax = (-1i64) as u64;
|
||||
}
|
||||
// SYS_NOTIFY_SEND = 25 (Post desktop notification to GUI compositor)
|
||||
25 => {
|
||||
let title = regs.rdi;
|
||||
let body = regs.rsi;
|
||||
unsafe {
|
||||
if NOTIF_COUNT < 8 {
|
||||
let idx = (NOTIF_HEAD + NOTIF_COUNT) % 8;
|
||||
NOTIF_QUEUE[idx] = (title, body);
|
||||
NOTIF_COUNT += 1;
|
||||
regs.rax = 0;
|
||||
return;
|
||||
}
|
||||
}
|
||||
regs.rax = (-1i64) as u64;
|
||||
}
|
||||
// SYS_NOTIFY_RECV = 26 (Poll pending desktop notifications non-blockingly)
|
||||
26 => {
|
||||
unsafe {
|
||||
if NOTIF_COUNT > 0 {
|
||||
let (title, body) = NOTIF_QUEUE[NOTIF_HEAD];
|
||||
NOTIF_HEAD = (NOTIF_HEAD + 1) % 8;
|
||||
NOTIF_COUNT -= 1;
|
||||
regs.rax = 1; // Notification available
|
||||
regs.rdi = title;
|
||||
regs.rsi = body;
|
||||
return;
|
||||
}
|
||||
}
|
||||
regs.rax = 0; // Queue empty
|
||||
}
|
||||
_ => {
|
||||
regs.rax = (-1i64) as u64; // SYS_ERR_INVALID_ARG
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static mut NOTIF_QUEUE: [(u64, u64); 8] = [(0, 0); 8];
|
||||
static mut NOTIF_HEAD: usize = 0;
|
||||
static mut NOTIF_COUNT: usize = 0;
|
||||
|
||||
#[repr(C)]
|
||||
pub struct AcpiInfoPayload {
|
||||
pub found: u32,
|
||||
|
||||
@@ -96,8 +96,11 @@ pub unsafe fn load_elf(elf_bytes: &[u8], hhdm_offset: u64) -> Result<LoadedProce
|
||||
(*vmm_ptr).map_page(pml4_paddr, page_vaddr, page_paddr, flags)
|
||||
.map_err(|_| "Failed to map user ELF page")?;
|
||||
|
||||
// Copy data from file
|
||||
// Zero the destination page first (ensures .bss is clean)
|
||||
let dest = (page_paddr + hhdm_offset) as *mut u8;
|
||||
core::ptr::write_bytes(dest, 0, PAGE_SIZE);
|
||||
|
||||
// Copy data from file if within filesz
|
||||
let page_file_start = page * PAGE_SIZE;
|
||||
if page_file_start < filesz {
|
||||
let copy_len = core::cmp::min(PAGE_SIZE, filesz - page_file_start);
|
||||
|
||||
Reference in New Issue
Block a user