Skip to content

Commit 6a014df

Browse files
committed
update uefi
1 parent 5fd3115 commit 6a014df

File tree

3 files changed

+38
-40
lines changed

3 files changed

+38
-40
lines changed

Cargo.lock

+17-17
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

uefi/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ license = "MIT/Apache-2.0"
1111
bootloader_api = { version = "0.1.0-alpha.0", path = "../api" }
1212
bootloader-x86_64-common = { version = "0.1.0-alpha.0", path = "../common" }
1313
log = "0.4.14"
14-
uefi = "0.13.0"
14+
uefi = "0.16.0"
1515
x86_64 = "0.14.8"

uefi/src/main.rs

+20-22
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use uefi::{
1919
},
2020
},
2121
table::boot::{AllocateType, MemoryDescriptor, MemoryType},
22-
Completion,
22+
CStr16,
2323
};
2424
use x86_64::{
2525
structures::paging::{FrameAllocator, OffsetPageTable, PageTable, PhysFrame, Size4KiB},
@@ -59,14 +59,14 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
5959
*SYSTEM_TABLE.get() = Some(st.unsafe_clone());
6060
}
6161

62-
st.stdout().clear().unwrap().unwrap();
62+
st.stdout().clear().unwrap();
6363
writeln!(
6464
st.stdout(),
6565
"UEFI bootloader started; trying to load kernel"
6666
)
6767
.unwrap();
6868

69-
let kernel = load_kernel(image, &st);
69+
let kernel = load_kernel(image, &mut st);
7070

7171
let (framebuffer_addr, framebuffer_info) = init_logger(&st, kernel.config);
7272

@@ -81,18 +81,17 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
8181

8282
let mmap_storage = {
8383
let max_mmap_size =
84-
st.boot_services().memory_map_size() + 8 * mem::size_of::<MemoryDescriptor>();
84+
st.boot_services().memory_map_size().map_size + 8 * mem::size_of::<MemoryDescriptor>();
8585
let ptr = st
8686
.boot_services()
87-
.allocate_pool(MemoryType::LOADER_DATA, max_mmap_size)?
88-
.log();
87+
.allocate_pool(MemoryType::LOADER_DATA, max_mmap_size)?;
8988
unsafe { slice::from_raw_parts_mut(ptr, max_mmap_size) }
9089
};
9190

9291
log::trace!("exiting boot services");
9392
let (system_table, memory_map) = st
9493
.exit_boot_services(image, mmap_storage)
95-
.expect_success("Failed to exit boot services");
94+
.expect("Failed to exit boot services");
9695

9796
let mut frame_allocator =
9897
LegacyFrameAllocator::new(memory_map.copied().map(UefiMemoryDescriptor));
@@ -127,38 +126,38 @@ fn load_kernel(image: Handle, st: &SystemTable<Boot>) -> Kernel<'static> {
127126
let ref this = st.boot_services();
128127
let loaded_image = this
129128
.handle_protocol::<LoadedImage>(image)
130-
.expect_success("Failed to retrieve `LoadedImage` protocol from handle");
129+
.expect("Failed to retrieve `LoadedImage` protocol from handle");
131130
let loaded_image = unsafe { &*loaded_image.get() };
132131

133132
let device_handle = loaded_image.device();
134133

135134
let device_path = this
136135
.handle_protocol::<DevicePath>(device_handle)
137-
.expect_success("Failed to retrieve `DevicePath` protocol from image's device handle");
136+
.expect("Failed to retrieve `DevicePath` protocol from image's device handle");
138137
let mut device_path = unsafe { &*device_path.get() };
139138

140139
let device_handle = this
141140
.locate_device_path::<SimpleFileSystem>(&mut device_path)
142-
.expect_success("Failed to locate `SimpleFileSystem` protocol on device path");
141+
.expect("Failed to locate `SimpleFileSystem` protocol on device path");
143142

144143
this.handle_protocol::<SimpleFileSystem>(device_handle)
145144
}
146-
.unwrap()
147145
.unwrap();
148146
let file_system = unsafe { &mut *file_system_raw.get() };
149147

150-
let mut root = file_system.open_volume().unwrap().unwrap();
148+
let mut root = file_system.open_volume().unwrap();
149+
let mut buf = [0; 14 * 2];
150+
let filename = CStr16::from_str_with_buf("kernel-x86_64", &mut buf).unwrap();
151151
let kernel_file_handle = root
152-
.open("kernel-x86_64", FileMode::Read, FileAttribute::empty())
153-
.expect("Failed to load kernel (expected file named `kernel-x86_64`)")
154-
.unwrap();
155-
let mut kernel_file = match kernel_file_handle.into_type().unwrap().unwrap() {
152+
.open(filename, FileMode::Read, FileAttribute::empty())
153+
.expect("Failed to load kernel (expected file named `kernel-x86_64`)");
154+
let mut kernel_file = match kernel_file_handle.into_type().unwrap() {
156155
uefi::proto::media::file::FileType::Regular(f) => f,
157156
uefi::proto::media::file::FileType::Dir(_) => panic!(),
158157
};
159158

160159
let mut buf = [0; 500];
161-
let kernel_info: &mut FileInfo = kernel_file.get_info(&mut buf).unwrap().unwrap();
160+
let kernel_info: &mut FileInfo = kernel_file.get_info(&mut buf).unwrap();
162161
let kernel_size = usize::try_from(kernel_info.file_size()).unwrap();
163162

164163
let kernel_ptr = st
@@ -168,11 +167,10 @@ fn load_kernel(image: Handle, st: &SystemTable<Boot>) -> Kernel<'static> {
168167
MemoryType::LOADER_DATA,
169168
((kernel_size - 1) / 4096) + 1,
170169
)
171-
.unwrap()
172170
.unwrap() as *mut u8;
173171
unsafe { ptr::write_bytes(kernel_ptr, 0, kernel_size) };
174172
let kernel_slice = unsafe { slice::from_raw_parts_mut(kernel_ptr, kernel_size) };
175-
kernel_file.read(kernel_slice).unwrap().unwrap();
173+
kernel_file.read(kernel_slice).unwrap();
176174

177175
Kernel::parse(kernel_slice)
178176
}
@@ -247,11 +245,11 @@ fn init_logger(st: &SystemTable<Boot>, config: BootloaderConfig) -> (PhysAddr, F
247245
let gop = st
248246
.boot_services()
249247
.locate_protocol::<GraphicsOutput>()
250-
.expect_success("failed to locate gop");
248+
.expect("failed to locate gop");
251249
let gop = unsafe { &mut *gop.get() };
252250

253251
let mode = {
254-
let modes = gop.modes().map(Completion::unwrap);
252+
let modes = gop.modes();
255253
match (
256254
config
257255
.frame_buffer
@@ -275,7 +273,7 @@ fn init_logger(st: &SystemTable<Boot>, config: BootloaderConfig) -> (PhysAddr, F
275273
};
276274
if let Some(mode) = mode {
277275
gop.set_mode(&mode)
278-
.expect_success("Failed to apply the desired display mode");
276+
.expect("Failed to apply the desired display mode");
279277
}
280278

281279
let mode_info = gop.current_mode_info();

0 commit comments

Comments
 (0)