@@ -31,9 +31,7 @@ const STAGE_4_DST: *mut u8 = 0x0013_0000 as *mut u8;
3131// 16MiB
3232const KERNEL_DST : * mut u8 = 0x0100_0000 as * mut u8 ;
3333
34- static mut DISK_BUFFER : AlignedArrayBuffer < 0x4000 > = AlignedArrayBuffer {
35- buffer : [ 0 ; 0x4000 ] ,
36- } ;
34+ const BUF_LEN : usize = 0x4000 ;
3735
3836#[ unsafe( no_mangle) ]
3937#[ unsafe( link_section = ".start" ) ]
@@ -88,27 +86,52 @@ fn start(disk_number: u16, partition_table_start: *const u8) -> ! {
8886
8987 let mut fs = fat:: FileSystem :: parse ( disk. clone ( ) ) ;
9088
91- #[ allow( static_mut_refs) ]
92- let disk_buffer = unsafe { & mut DISK_BUFFER } ;
89+ let mut disk_buffer = AlignedArrayBuffer {
90+ buffer : [ 0 ; BUF_LEN ] ,
91+ } ;
9392
94- let stage_3_len = load_file ( "boot-stage-3" , STAGE_3_DST , & mut fs, & mut disk, disk_buffer) ;
93+ let stage_3_len = load_file (
94+ "boot-stage-3" ,
95+ STAGE_3_DST ,
96+ & mut fs,
97+ & mut disk,
98+ & mut disk_buffer,
99+ ) ;
95100 writeln ! ( screen:: Writer , "stage 3 loaded at {STAGE_3_DST:#p}" ) . unwrap ( ) ;
96101 let stage_4_dst = {
97102 let stage_3_end = STAGE_3_DST . wrapping_add ( usize:: try_from ( stage_3_len) . unwrap ( ) ) ;
98- assert ! ( STAGE_4_DST > stage_3_end) ;
103+ assert ! ( STAGE_4_DST >= stage_3_end) ;
99104 STAGE_4_DST
100105 } ;
101- let stage_4_len = load_file ( "boot-stage-4" , stage_4_dst, & mut fs, & mut disk, disk_buffer) ;
106+ let stage_4_len = load_file (
107+ "boot-stage-4" ,
108+ stage_4_dst,
109+ & mut fs,
110+ & mut disk,
111+ & mut disk_buffer,
112+ ) ;
102113 writeln ! ( screen:: Writer , "stage 4 loaded at {stage_4_dst:#p}" ) . unwrap ( ) ;
103114
104115 writeln ! ( screen:: Writer , "loading kernel..." ) . unwrap ( ) ;
105- let kernel_len = load_file ( "kernel-x86_64" , KERNEL_DST , & mut fs, & mut disk, disk_buffer) ;
116+ let kernel_len = load_file (
117+ "kernel-x86_64" ,
118+ KERNEL_DST ,
119+ & mut fs,
120+ & mut disk,
121+ & mut disk_buffer,
122+ ) ;
106123 writeln ! ( screen:: Writer , "kernel loaded at {KERNEL_DST:#p}" ) . unwrap ( ) ;
107124 let kernel_page_size = ( ( ( kernel_len - 1 ) / 4096 ) + 1 ) as usize ;
108125 let ramdisk_start = KERNEL_DST . wrapping_add ( kernel_page_size * 4096 ) ;
109126 writeln ! ( screen:: Writer , "Loading ramdisk..." ) . unwrap ( ) ;
110- let ramdisk_len =
111- try_load_file ( "ramdisk" , ramdisk_start, & mut fs, & mut disk, disk_buffer) . unwrap_or ( 0u64 ) ;
127+ let ramdisk_len = try_load_file (
128+ "ramdisk" ,
129+ ramdisk_start,
130+ & mut fs,
131+ & mut disk,
132+ & mut disk_buffer,
133+ )
134+ . unwrap_or ( 0u64 ) ;
112135
113136 if ramdisk_len == 0 {
114137 writeln ! ( screen:: Writer , "No ramdisk found, skipping." ) . unwrap ( ) ;
@@ -121,7 +144,7 @@ fn start(disk_number: u16, partition_table_start: *const u8) -> ! {
121144 config_file_start,
122145 & mut fs,
123146 & mut disk,
124- disk_buffer,
147+ & mut disk_buffer,
125148 )
126149 . unwrap_or ( 0 ) ;
127150
@@ -132,7 +155,7 @@ fn start(disk_number: u16, partition_table_start: *const u8) -> ! {
132155 let max_width = 1280 ;
133156 let max_height = 720 ;
134157
135- let mut vesa_info = vesa:: VesaInfo :: query ( disk_buffer) . unwrap ( ) ;
158+ let mut vesa_info = vesa:: VesaInfo :: query ( & mut disk_buffer) . unwrap ( ) ;
136159 let vesa_mode = vesa_info
137160 . get_best_mode ( max_width, max_height)
138161 . unwrap ( )
@@ -191,7 +214,7 @@ fn try_load_file(
191214 dst : * mut u8 ,
192215 fs : & mut fat:: FileSystem < disk:: DiskAccess > ,
193216 disk : & mut disk:: DiskAccess ,
194- disk_buffer : & mut AlignedArrayBuffer < 16384 > ,
217+ disk_buffer : & mut AlignedArrayBuffer < BUF_LEN > ,
195218) -> Option < u64 > {
196219 let disk_buffer_size = disk_buffer. buffer . len ( ) ;
197220 let file = fs. find_file_in_root_dir ( file_name, disk_buffer) ?;
@@ -244,7 +267,7 @@ fn load_file(
244267 dst : * mut u8 ,
245268 fs : & mut fat:: FileSystem < disk:: DiskAccess > ,
246269 disk : & mut disk:: DiskAccess ,
247- disk_buffer : & mut AlignedArrayBuffer < 16384 > ,
270+ disk_buffer : & mut AlignedArrayBuffer < BUF_LEN > ,
248271) -> u64 {
249272 try_load_file ( file_name, dst, fs, disk, disk_buffer) . expect ( "file not found" )
250273}
0 commit comments