Skip to content

Commit 96357e6

Browse files
author
Jiajie Chen
committed
Bump rust version to newer nightly and use acpi crate to print acpi info
1 parent 087e18b commit 96357e6

File tree

15 files changed

+71
-25
lines changed

15 files changed

+71
-25
lines changed

crate/memory/src/cow.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ impl<T: PageTable> CowExt<T> {
110110
return true;
111111
}
112112
use core::mem::MaybeUninit;
113-
let mut temp_data: [u8; PAGE_SIZE] = unsafe { MaybeUninit::uninitialized().into_initialized() };
113+
let mut temp_data: [u8; PAGE_SIZE] = unsafe { MaybeUninit::zeroed().assume_init() };
114114
temp_data[..].copy_from_slice(self.get_page_slice_mut(addr));
115115

116116
self.unmap_shared(addr);

crate/memory/src/paging/mock_page_table.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ impl MockPageTable {
147147
use core::mem::MaybeUninit;
148148
MockPageTable {
149149
entries: [MockEntry::default(); PAGE_COUNT],
150-
data: unsafe { MaybeUninit::uninitialized().into_initialized() },
150+
data: unsafe { MaybeUninit::zeroed().assume_init() },
151151
page_fault_handler: None,
152152
}
153153
}

crate/memory/src/swap/mock_swapper.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ pub struct MockSwapper {
1717
impl Swapper for MockSwapper {
1818
fn swap_out(&mut self, data: &[u8]) -> Result<usize, ()> {
1919
let id = self.alloc_id();
20-
let mut slice: [u8; PAGE_SIZE] = unsafe { MaybeUninit::uninitialized().into_initialized() };
20+
let mut slice: [u8; PAGE_SIZE] = unsafe { MaybeUninit::zeroed().assume_init() };
2121
slice.copy_from_slice(data);
2222
self.map.insert(id, slice);
2323
Ok(id)
@@ -27,7 +27,7 @@ impl Swapper for MockSwapper {
2727
if !self.map.contains_key(&token) {
2828
return Err(());
2929
}
30-
let mut slice: [u8; PAGE_SIZE] = unsafe { MaybeUninit::uninitialized().into_initialized() };
30+
let mut slice: [u8; PAGE_SIZE] = unsafe { MaybeUninit::zeroed().assume_init() };
3131
slice.copy_from_slice(data);
3232
self.map.insert(token, slice);
3333
Ok(())
@@ -64,8 +64,8 @@ mod test {
6464
#[test]
6565
fn swap_out_in() {
6666
let mut swapper = MockSwapper::default();
67-
let mut data: [u8; 4096] = unsafe { MaybeUninit::uninitialized().into_initialized() };
68-
let data1: [u8; 4096] = unsafe { MaybeUninit::uninitialized().into_initialized() };
67+
let mut data: [u8; 4096] = unsafe { MaybeUninit::zeroed().assume_init() };
68+
let data1: [u8; 4096] = unsafe { MaybeUninit::zeroed().assume_init() };
6969
let token = swapper.swap_out(&data1).unwrap();
7070
swapper.swap_in(token, &mut data).unwrap();
7171
assert_data_eq(&data, &data1);
@@ -74,9 +74,9 @@ mod test {
7474
#[test]
7575
fn swap_update() {
7676
let mut swapper = MockSwapper::default();
77-
let mut data: [u8; 4096] = unsafe { MaybeUninit::uninitialized().into_initialized() };
78-
let data1: [u8; 4096] = unsafe { MaybeUninit::uninitialized().into_initialized() };
79-
let data2: [u8; 4096] = unsafe { MaybeUninit::uninitialized().into_initialized() };
77+
let mut data: [u8; 4096] = unsafe { MaybeUninit::zeroed().assume_init() };
78+
let data1: [u8; 4096] = unsafe { MaybeUninit::zeroed().assume_init() };
79+
let data2: [u8; 4096] = unsafe { MaybeUninit::zeroed().assume_init() };
8080
let token = swapper.swap_out(&data1).unwrap();
8181
swapper.swap_update(token, &data2).unwrap();
8282
swapper.swap_in(token, &mut data).unwrap();
@@ -86,7 +86,7 @@ mod test {
8686
#[test]
8787
fn invalid_token() {
8888
let mut swapper = MockSwapper::default();
89-
let mut data: [u8; 4096] = unsafe { MaybeUninit::uninitialized().into_initialized() };
89+
let mut data: [u8; 4096] = unsafe { MaybeUninit::zeroed().assume_init() };
9090
assert_eq!(swapper.swap_in(0, &mut data), Err(()));
9191
}
9292
}

kernel/Cargo.lock

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

kernel/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ x86_64 = "0.6"
7777
raw-cpuid = "6.0"
7878
uart_16550 = "0.2"
7979
pc-keyboard = "0.5"
80+
acpi = "0.2"
8081

8182
[target.'cfg(any(target_arch = "riscv32", target_arch = "riscv64"))'.dependencies]
8283
riscv = { git = "https://github.com/rcore-os/riscv", features = ["inline-asm"] }

kernel/src/arch/aarch64/paging.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ impl PageTableImpl {
213213
ManuallyDrop::new(PageTableImpl {
214214
page_table: MappedPageTable::new(table, frame_to_page_table),
215215
root_frame: frame,
216-
entry: core::mem::MaybeUninit::uninitialized().into_initialized(),
216+
entry: core::mem::MaybeUninit::zeroed().assume_init(),
217217
})
218218
}
219219
/// The method for getting the kernel page table.
@@ -224,7 +224,7 @@ impl PageTableImpl {
224224
ManuallyDrop::new(PageTableImpl {
225225
page_table: MappedPageTable::new(table, frame_to_page_table),
226226
root_frame: frame,
227-
entry: core::mem::MaybeUninit::uninitialized().into_initialized(),
227+
entry: core::mem::MaybeUninit::zeroed().assume_init(),
228228
})
229229
}
230230
}
@@ -239,7 +239,7 @@ impl PageTableExt for PageTableImpl {
239239
PageTableImpl {
240240
page_table: MappedPageTable::new(table, frame_to_page_table),
241241
root_frame: frame,
242-
entry: core::mem::MaybeUninit::uninitialized().into_initialized(),
242+
entry: core::mem::MaybeUninit::zeroed().assume_init(),
243243
}
244244
}
245245
}

kernel/src/arch/mipsel/paging.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ impl PageTableImpl {
156156
ManuallyDrop::new(PageTableImpl {
157157
page_table: TwoLevelPageTable::new(table),
158158
root_frame: frame,
159-
entry: unsafe { core::mem::MaybeUninit::uninitialized().into_initialized() },
159+
entry: unsafe { core::mem::MaybeUninit::zeroed().assume_init() },
160160
})
161161
}
162162

@@ -178,7 +178,7 @@ impl PageTableExt for PageTableImpl {
178178
PageTableImpl {
179179
page_table: TwoLevelPageTable::new(table),
180180
root_frame: frame,
181-
entry: unsafe { core::mem::MaybeUninit::uninitialized().into_initialized() },
181+
entry: unsafe { core::mem::MaybeUninit::zeroed().assume_init() },
182182
}
183183
}
184184

kernel/src/arch/riscv32/paging.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ impl PageTableImpl {
158158
ManuallyDrop::new(PageTableImpl {
159159
page_table: TopLevelPageTable::new(table, PHYSICAL_MEMORY_OFFSET),
160160
root_frame: frame,
161-
entry: unsafe { core::mem::MaybeUninit::uninitialized().into_initialized() },
161+
entry: unsafe { core::mem::MaybeUninit::zeroed().assume_init() },
162162
})
163163
}
164164
/// The method for getting the kernel page table.
@@ -180,7 +180,7 @@ impl PageTableExt for PageTableImpl {
180180
PageTableImpl {
181181
page_table: TopLevelPageTable::new(table, PHYSICAL_MEMORY_OFFSET),
182182
root_frame: frame,
183-
entry: unsafe { core::mem::uninitialized() },
183+
entry: unsafe { core::mem::zeroed() },
184184
}
185185
}
186186

kernel/src/arch/x86_64/acpi.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use crate::arch::consts::PHYSICAL_MEMORY_OFFSET;
2+
use acpi::{search_for_rsdp_bios, AcpiHandler, PhysicalMapping};
3+
use core::ptr::NonNull;
4+
5+
struct Handler;
6+
7+
impl AcpiHandler for Handler {
8+
fn map_physical_region<T>(
9+
&mut self,
10+
physical_address: usize,
11+
size: usize,
12+
) -> PhysicalMapping<T> {
13+
PhysicalMapping {
14+
physical_start: physical_address,
15+
virtual_start: NonNull::new((physical_address + PHYSICAL_MEMORY_OFFSET) as *mut T)
16+
.unwrap(),
17+
region_length: size,
18+
mapped_length: size,
19+
}
20+
}
21+
22+
fn unmap_physical_region<T>(&mut self, region: PhysicalMapping<T>) {
23+
// do nothing
24+
}
25+
}
26+
27+
pub fn init() {
28+
let mut handler = Handler {};
29+
let res = unsafe { search_for_rsdp_bios(&mut handler) };
30+
debug!("ACPI {:#x?}", res);
31+
}

kernel/src/arch/x86_64/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use bootloader::bootinfo::{BootInfo, MemoryRegionType};
22
use core::sync::atomic::*;
33
use log::*;
44

5+
pub mod acpi;
56
pub mod board;
67
pub mod consts;
78
pub mod cpu;
@@ -64,6 +65,8 @@ pub extern "C" fn _start(boot_info: &'static BootInfo) -> ! {
6465
crate::drivers::init();
6566
// init cpu scheduler and process manager, and add user shell app in process manager
6667
crate::process::init();
68+
// load acpi
69+
acpi::init();
6770

6871
// wake up other CPUs
6972
AP_CAN_INIT.store(true, Ordering::Relaxed);

0 commit comments

Comments
 (0)