mmap support for mgba's partical redraw

master
PanQL 6 years ago
parent 545d9d301c
commit f9734b6134

@ -31,19 +31,6 @@ impl INode for Vga {
} }
fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize> { fn write_at(&self, _offset: usize, _buf: &[u8]) -> Result<usize> {
info!("the _offset is {} {}", _offset, _buf[0]); info!("the _offset is {} {}", _offset, _buf[0]);
//let mut result : usize = 0;
//if let Some(fb) = FRAME_BUFFER.lock().as_mut() {
//for x in 0..1024 { // TODO, should not use CONSTS
//for y in 0..768 {
//let blue = _buf[3 * (x * 768 + y)];
//let green = _buf[3 * (x * 768 + y) + 1];
//let red = _buf[3 * (x * 768 + y) + 2];
//let pixel : u32 = ((blue as u32) << 16) | ((green as u32) << 8) | (red as u32);
//fb.write(x as u32, y as u32, pixel);
//result += 3;
//}
//}
//}
use crate::consts::KERNEL_OFFSET; use crate::consts::KERNEL_OFFSET;
use core::slice; use core::slice;
let frame_buffer_data = let frame_buffer_data =

@ -1,4 +1,4 @@
use rcore_memory::memory_set::handler::{Delay, File}; use rcore_memory::memory_set::handler::{Delay, File, Linear};
use rcore_memory::memory_set::MemoryAttr; use rcore_memory::memory_set::MemoryAttr;
use rcore_memory::paging::PageTable; use rcore_memory::paging::PageTable;
use rcore_memory::Page; use rcore_memory::Page;
@ -53,21 +53,41 @@ impl Syscall<'_> {
); );
return Ok(addr); return Ok(addr);
} else { } else {
let inode = proc.get_file(fd)?.inode();
self.vm().push( let file = proc.get_file(fd)?;
addr, info!("mmap path is {} ", &*file.path);
addr + len, match &*file.path {
prot.to_attr(), "/dev/fb0" => {
File { self.vm().push(
file: INodeForMap(inode), addr,
mem_start: addr, addr + len,
file_start: offset, prot.to_attr(),
file_end: offset + len, Linear::new(
allocator: GlobalFrameAlloc, ( 0xfd00_0000 - addr ) as isize,
),
"mmap_file",
);
info!("mmap for /dev/fb0");
return Ok(addr);
}, },
"mmap_file", _ => {
); let inode = file.inode();
return Ok(addr); self.vm().push(
addr,
addr + len,
prot.to_attr(),
File {
file: INodeForMap(inode),
mem_start: addr,
file_start: offset,
file_end: offset + len,
allocator: GlobalFrameAlloc,
},
"mmap_file",
);
return Ok(addr);
},
};
} }
} }

Loading…
Cancel
Save