summaryrefslogtreecommitdiffstats
path: root/rsdos/src/main.rs
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-07-31 15:51:28 +0200
committersalmonik <salmonik@tuta.io>2026-07-31 15:51:28 +0200
commit5e03409586efc37931f07b40ee0c71a9a9e109f7 (patch)
treea1e6e014b94fb410ffce49a7611bf94295165729 /rsdos/src/main.rs
parentrsboot: loader file buffers use LoaderData (2) instead of RuntimeData (6) (diff)
downloadrs-dos-5e03409586efc37931f07b40ee0c71a9a9e109f7.tar.gz
rs-dos-5e03409586efc37931f07b40ee0c71a9a9e109f7.zip
rsnix: memory management — free-list heap, bitmap pages, paging adoption
- uefi.rs: full EfiMemoryType constants (0-14) + memory_type_name(); fix MEMORY_TYPE_LOADER_DATA from 6 to 2 per the UEFI spec - memory.rs: replace the bump allocator with a first-fit free-list heap (splitting, coalescing, 8-byte back-pointer for alignment-safe free); add a bitmap physical page allocator (heap region reserved, page-0 guard, aligned runs); grow the heap from the page allocator on demand - paging.rs: identity page-table helpers — adopt_tables() rebuilds the firmware map into our own tables (OVMF maps its tables read-only, so the firmware tree can't be modified in place) and switches CR3; map_page/unmap_page/is_mapped with 2 MB/1 GB large-page splitting - main.rs: boot self-tests for heap, pages, and paging
Diffstat (limited to '')
-rw-r--r--rsdos/src/main.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/rsdos/src/main.rs b/rsdos/src/main.rs
index 543556b..1169785 100644
--- a/rsdos/src/main.rs
+++ b/rsdos/src/main.rs
@@ -106,6 +106,38 @@ pub extern "efiapi" fn efi_main(image_handle: Handle, system_table: *mut SystemT
106 106
107 dump_memory_summary(); 107 dump_memory_summary();
108 108
109 if rsnix::memory::self_test() {
110 rsnix::serial_println!("heap: self-test OK (alloc/free/coalesce)");
111 } else {
112 rsnix::serial_println!("heap: self-test FAILED");
113 }
114
115 if rsnix::memory::init_page_allocator() {
116 rsnix::serial_println!("pages: bitmap allocator ready");
117 } else {
118 rsnix::serial_println!("pages: init FAILED");
119 }
120 if rsnix::memory::page_self_test() {
121 rsnix::serial_println!("pages: self-test OK (alloc/free/runs)");
122 } else {
123 rsnix::serial_println!("pages: self-test FAILED");
124 }
125
126 if rsnix::paging::adopt_tables() {
127 rsnix::serial_println!(
128 "pg: adopted own page tables (cr3={:#x})",
129 rsnix::paging::cr3()
130 );
131 } else {
132 rsnix::serial_println!("pg: adopt_tables FAILED");
133 }
134
135 if rsnix::paging::self_test() {
136 rsnix::serial_println!("pg: self-test OK (map/unmap/split)");
137 } else {
138 rsnix::serial_println!("pg: self-test FAILED");
139 }
140
109 rsnix::serial_println!("boot: entering shell"); 141 rsnix::serial_println!("boot: entering shell");
110 shell::run(); 142 shell::run();
111} 143}