summaryrefslogtreecommitdiff
path: root/include/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'include/kernel')
-rw-r--r--include/kernel/config.h6
-rw-r--r--include/kernel/fdt.h45
-rw-r--r--include/kernel/pmm.h11
-rw-r--r--include/kernel/syscall.h103
4 files changed, 132 insertions, 33 deletions
diff --git a/include/kernel/config.h b/include/kernel/config.h
index 45d85cd..49df2ff 100644
--- a/include/kernel/config.h
+++ b/include/kernel/config.h
@@ -1,12 +1,12 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
- * Copyright (C) 2026 Richard QIn
+ * Copyright (C) 2026 Richard Qin
*/
#pragma once
#include "common/types.h"
+#include "kernel/fdt.h"
+// Legacy compat — these are still referenced in some places
extern uint64 g_uart_base;
-extern uint64 g_clint_base;
-extern uint64 g_plic_base;
extern uint64 g_dtb_addr; \ No newline at end of file
diff --git a/include/kernel/fdt.h b/include/kernel/fdt.h
new file mode 100644
index 0000000..89cbae6
--- /dev/null
+++ b/include/kernel/fdt.h
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2026 Richard Qin
+ * LumeOS - FDT Device Discovery
+ */
+
+#pragma once
+#include "common/types.h"
+
+// Single device descriptor (populated from FDT)
+struct FdtDevice {
+ uint64 base_addr; // MMIO base address
+ uint64 size; // MMIO region size
+ uint32 irq; // Interrupt number (0 = none)
+};
+
+// Device registry — populated by fdt_parse(), consumed by drivers
+struct DeviceRegistry {
+ // Memory
+ uint64 mem_base;
+ uint64 mem_size;
+
+ // Core platform devices
+ FdtDevice uart;
+ FdtDevice plic;
+ FdtDevice clint;
+
+ // VirtIO devices (multiple possible)
+ static constexpr int MAX_VIRTIO = 8;
+ FdtDevice virtio[MAX_VIRTIO];
+ int virtio_count;
+
+ // MMIO ranges for kvminit() to map
+ static constexpr int MAX_MMIO = 16;
+ struct MmioRegion {
+ uint64 base;
+ uint64 size;
+ } mmio_regions[MAX_MMIO];
+ int mmio_count;
+};
+
+extern DeviceRegistry g_devices;
+
+// Parse FDT and populate g_devices
+void fdt_parse(uint64 dtb);
diff --git a/include/kernel/pmm.h b/include/kernel/pmm.h
index 1fc3070..261786d 100644
--- a/include/kernel/pmm.h
+++ b/include/kernel/pmm.h
@@ -1,16 +1,21 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
- * Copyright (C) 2026 Richard QIn
+ * Copyright (C) 2026 Richard Qin
*/
#pragma once
#include "common/types.h"
#include "kernel/spinlock.h"
+#include "kernel/fdt.h" // For g_devices
// Physical Memory Layout Definition
#define KERNBASE 0x80000000
-// Set the memory size to 128MB
-#define PHYSIZE (128 * 1024 * 1024)
+
+// Dynamic memory size from FDT
+// Default to 128MB if FDT not present/parsed
+extern uint64 g_phys_size;
+
+#define PHYSIZE (g_phys_size)
#define PHYSTOP (KERNBASE + PHYSIZE)
// Buddy System Max Order
diff --git a/include/kernel/syscall.h b/include/kernel/syscall.h
index af4c474..3594c08 100644
--- a/include/kernel/syscall.h
+++ b/include/kernel/syscall.h
@@ -1,35 +1,84 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
- * Copyright (C) 2026 Richard QIn
-*/
+ * Copyright (C) 2026 Richard Qin
+ * Lume OS - Linux Compatibility Layer
+ *
+ * Strictly aligned with Linux RISC-V 64 ABI (asm-generic)
+ * Reference: linux/usr/include/asm-generic/unistd.h
+ */
#pragma once
-#define SYS_putc 1
-#define SYS_fork 2
-#define SYS_exit 3
-#define SYS_wait 4
-#define SYS_pipe 5
-#define SYS_read 6
-#define SYS_kill 7
-#define SYS_exec 8
-#define SYS_fstat 9
-#define SYS_chdir 10
-#define SYS_dup 11
-#define SYS_getpid 12
-#define SYS_sbrk 13
-#define SYS_sleep 14
-#define SYS_uptime 15
-#define SYS_open 16
-#define SYS_write 17
-#define SYS_mknod 18
-#define SYS_unlink 19
-#define SYS_link 20
-#define SYS_mkdir 21
-#define SYS_close 22
-#define SYS_disk_test 23
-#define SYS_lseek 24
-#define SYS_shutdown 25
+// File System
+#define SYS_getcwd 17
+#define SYS_dup 23
+#define SYS_dup3 24
+#define SYS_fcntl 25
+#define SYS_ioctl 29
+#define SYS_mknodat 33
+#define SYS_mkdirat 34
+#define SYS_unlinkat 35
+#define SYS_linkat 37
+#define SYS_umount2 39
+#define SYS_mount 40
+#define SYS_statfs 43
+#define SYS_ftruncate 46
+#define SYS_faccessat 48
+#define SYS_chdir 49
+#define SYS_fchmod 52
+#define SYS_fchmodat 53
+#define SYS_fchownat 54
+#define SYS_openat 56
+#define SYS_close 57
+#define SYS_vhangup 58
+#define SYS_pipe2 59
+#define SYS_getdents64 61
+#define SYS_lseek 62
+#define SYS_read 63
+#define SYS_write 64
+#define SYS_readv 65
+#define SYS_writev 66
+#define SYS_pread64 67
+#define SYS_pwrite64 68
+#define SYS_pselect6 72
+#define SYS_ppoll 73
+#define SYS_readlinkat 78
+#define SYS_fstatat 79 // newfstatat
+#define SYS_fstat 80
+
+// Process Management
+#define SYS_exit 93
+#define SYS_exit_group 94
+#define SYS_set_tid_address 96
+#define SYS_nanosleep 101
+#define SYS_kill 129
+#define SYS_rt_sigaction 134
+#define SYS_times 153
+#define SYS_uname 160
+#define SYS_gettimeofday 169
+#define SYS_getpid 172
+#define SYS_getppid 173
+#define SYS_getuid 174
+#define SYS_geteuid 175
+#define SYS_getgid 176
+#define SYS_getegid 177
+#define SYS_sysinfo 179
+#define SYS_brk 214
+#define SYS_munmap 215
+#define SYS_mremap 216
+#define SYS_clone 220
+#define SYS_execve 221
+#define SYS_mmap 222
+#define SYS_wait4 260
+#define SYS_prlimit64 261
+
+// System
+#define SYS_reboot 142 // Used for shutdown
+
+// === Custom / Debug (Non-Standard) ===
+// Placed above 1000 to avoid conflicts with Linux ABI
+#define SYS_putc 1000
+#define SYS_disk_test 1001
#ifndef __ASSEMBLER__
void syscall();