@@ -19,7 +19,7 @@ use uefi::{
19
19
} ,
20
20
} ,
21
21
table:: boot:: { AllocateType , MemoryDescriptor , MemoryType } ,
22
- Completion ,
22
+ CStr16 ,
23
23
} ;
24
24
use x86_64:: {
25
25
structures:: paging:: { FrameAllocator , OffsetPageTable , PageTable , PhysFrame , Size4KiB } ,
@@ -59,14 +59,14 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
59
59
* SYSTEM_TABLE . get ( ) = Some ( st. unsafe_clone ( ) ) ;
60
60
}
61
61
62
- st. stdout ( ) . clear ( ) . unwrap ( ) . unwrap ( ) ;
62
+ st. stdout ( ) . clear ( ) . unwrap ( ) ;
63
63
writeln ! (
64
64
st. stdout( ) ,
65
65
"UEFI bootloader started; trying to load kernel"
66
66
)
67
67
. unwrap ( ) ;
68
68
69
- let kernel = load_kernel ( image, & st) ;
69
+ let kernel = load_kernel ( image, & mut st) ;
70
70
71
71
let ( framebuffer_addr, framebuffer_info) = init_logger ( & st, kernel. config ) ;
72
72
@@ -81,18 +81,17 @@ fn main_inner(image: Handle, mut st: SystemTable<Boot>) -> Status {
81
81
82
82
let mmap_storage = {
83
83
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 > ( ) ;
85
85
let ptr = st
86
86
. boot_services ( )
87
- . allocate_pool ( MemoryType :: LOADER_DATA , max_mmap_size) ?
88
- . log ( ) ;
87
+ . allocate_pool ( MemoryType :: LOADER_DATA , max_mmap_size) ?;
89
88
unsafe { slice:: from_raw_parts_mut ( ptr, max_mmap_size) }
90
89
} ;
91
90
92
91
log:: trace!( "exiting boot services" ) ;
93
92
let ( system_table, memory_map) = st
94
93
. exit_boot_services ( image, mmap_storage)
95
- . expect_success ( "Failed to exit boot services" ) ;
94
+ . expect ( "Failed to exit boot services" ) ;
96
95
97
96
let mut frame_allocator =
98
97
LegacyFrameAllocator :: new ( memory_map. copied ( ) . map ( UefiMemoryDescriptor ) ) ;
@@ -127,38 +126,38 @@ fn load_kernel(image: Handle, st: &SystemTable<Boot>) -> Kernel<'static> {
127
126
let ref this = st. boot_services ( ) ;
128
127
let loaded_image = this
129
128
. handle_protocol :: < LoadedImage > ( image)
130
- . expect_success ( "Failed to retrieve `LoadedImage` protocol from handle" ) ;
129
+ . expect ( "Failed to retrieve `LoadedImage` protocol from handle" ) ;
131
130
let loaded_image = unsafe { & * loaded_image. get ( ) } ;
132
131
133
132
let device_handle = loaded_image. device ( ) ;
134
133
135
134
let device_path = this
136
135
. 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" ) ;
138
137
let mut device_path = unsafe { & * device_path. get ( ) } ;
139
138
140
139
let device_handle = this
141
140
. 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" ) ;
143
142
144
143
this. handle_protocol :: < SimpleFileSystem > ( device_handle)
145
144
}
146
- . unwrap ( )
147
145
. unwrap ( ) ;
148
146
let file_system = unsafe { & mut * file_system_raw. get ( ) } ;
149
147
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 ( ) ;
151
151
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 ( ) {
156
155
uefi:: proto:: media:: file:: FileType :: Regular ( f) => f,
157
156
uefi:: proto:: media:: file:: FileType :: Dir ( _) => panic ! ( ) ,
158
157
} ;
159
158
160
159
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 ( ) ;
162
161
let kernel_size = usize:: try_from ( kernel_info. file_size ( ) ) . unwrap ( ) ;
163
162
164
163
let kernel_ptr = st
@@ -168,11 +167,10 @@ fn load_kernel(image: Handle, st: &SystemTable<Boot>) -> Kernel<'static> {
168
167
MemoryType :: LOADER_DATA ,
169
168
( ( kernel_size - 1 ) / 4096 ) + 1 ,
170
169
)
171
- . unwrap ( )
172
170
. unwrap ( ) as * mut u8 ;
173
171
unsafe { ptr:: write_bytes ( kernel_ptr, 0 , kernel_size) } ;
174
172
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 ( ) ;
176
174
177
175
Kernel :: parse ( kernel_slice)
178
176
}
@@ -247,11 +245,11 @@ fn init_logger(st: &SystemTable<Boot>, config: BootloaderConfig) -> (PhysAddr, F
247
245
let gop = st
248
246
. boot_services ( )
249
247
. locate_protocol :: < GraphicsOutput > ( )
250
- . expect_success ( "failed to locate gop" ) ;
248
+ . expect ( "failed to locate gop" ) ;
251
249
let gop = unsafe { & mut * gop. get ( ) } ;
252
250
253
251
let mode = {
254
- let modes = gop. modes ( ) . map ( Completion :: unwrap ) ;
252
+ let modes = gop. modes ( ) ;
255
253
match (
256
254
config
257
255
. frame_buffer
@@ -275,7 +273,7 @@ fn init_logger(st: &SystemTable<Boot>, config: BootloaderConfig) -> (PhysAddr, F
275
273
} ;
276
274
if let Some ( mode) = mode {
277
275
gop. set_mode ( & mode)
278
- . expect_success ( "Failed to apply the desired display mode" ) ;
276
+ . expect ( "Failed to apply the desired display mode" ) ;
279
277
}
280
278
281
279
let mode_info = gop. current_mode_info ( ) ;
0 commit comments