@@ -121,8 +121,8 @@ impl INodeInterface for DevINode {
121121 self . 0 . inode ( ) . read_at ( offset, buffer)
122122 }
123123
124- fn mmap ( & self , offset : usize , flags : MMapFlags ) -> Result < PhysAddr > {
125- self . 0 . inode ( ) . mmap ( offset, flags)
124+ fn mmap ( & self , offset : usize , size : usize , flags : MMapFlags ) -> Result < PhysFrame > {
125+ self . 0 . inode ( ) . mmap ( offset, size , flags)
126126 }
127127
128128 fn ioctl ( & self , command : usize , arg : usize ) -> Result < usize > {
@@ -278,12 +278,12 @@ impl INodeInterface for DevFb {
278278 . expect ( "/dev/fb: terminal not initialized" )
279279 }
280280
281- fn mmap ( & self , offset : usize , flags : MMapFlags ) -> Result < PhysAddr > {
281+ fn mmap ( & self , offset : usize , size : usize , flags : MMapFlags ) -> Result < PhysFrame > {
282282 let rinfo = crate :: rendy:: get_rendy_info ( ) ;
283283
284284 // Make sure we are in bounds.
285285 if offset > rinfo. byte_len || offset + Size4KiB :: SIZE as usize > rinfo. byte_len {
286- return Ok ( PhysAddr :: zero ( ) ) ;
286+ return Ok ( PhysFrame :: containing_address ( PhysAddr :: zero ( ) ) ) ;
287287 }
288288
289289 crate :: rendy:: DEBUG_RENDY
@@ -300,23 +300,17 @@ impl INodeInterface for DevFb {
300300
301301 let fb_phys_ptr = fb_ptr. sub ( crate :: PHYSICAL_MEMORY_OFFSET . as_u64 ( ) as usize ) ;
302302
303- Ok ( PhysAddr :: new_unchecked ( fb_phys_ptr as u64 ) )
303+ Ok ( PhysFrame :: containing_address ( PhysAddr :: new_unchecked (
304+ fb_phys_ptr as u64 ,
305+ ) ) )
304306 } else {
305307 let fb = lock. get_framebuffer ( ) ;
306308
307309 // This is a private file mapping.
308- let private_cp: PhysFrame = FRAME_ALLOCATOR
309- . allocate_frame ( )
310- . expect ( "/dev/fb: failed to allocate frame for private file mapping" ) ;
310+ let private_cp: PhysFrame = FRAME_ALLOCATOR . allocate_frame ( ) . unwrap ( ) ;
311+ private_cp. as_slice_mut ( ) [ ..size] . copy_from_slice ( & fb[ offset..offset + size] ) ;
311312
312- let private_phys = private_cp. start_address ( ) ;
313- let private_virt = crate :: PHYSICAL_MEMORY_OFFSET + private_phys. as_u64 ( ) ;
314- let private_ptr = private_virt. as_mut_ptr ( ) ;
315-
316- core:: slice:: from_raw_parts_mut ( private_ptr, Size4KiB :: SIZE as usize )
317- . copy_from_slice ( & fb[ offset..offset + Size4KiB :: SIZE as usize ] ) ;
318-
319- Ok ( private_phys)
313+ Ok ( private_cp)
320314 }
321315 } )
322316 . expect ( "/dev/fb: terminal not initialized" )
0 commit comments