Add rtl8168 driver, make drivers use O_NONBLOCK

This commit is contained in:
Jeremy Soller 2016-10-20 12:52:58 -06:00
parent 3169f7ba45
commit a2ef986edd
5 changed files with 392 additions and 6 deletions

View file

@ -8,7 +8,7 @@ use std::cell::RefCell;
use std::{env, thread};
use std::fs::File;
use std::io::{Read, Write, Result};
use std::os::unix::io::AsRawFd;
use std::os::unix::io::{AsRawFd, FromRawFd};
use std::sync::Arc;
use event::EventQueue;
@ -32,7 +32,8 @@ fn main() {
asm!("cli" :::: "intel", "volatile");
}
let socket = Arc::new(RefCell::new(File::create(":network").expect("e1000d: failed to create network scheme")));
let socket_fd = syscall::open(":network", syscall::O_RDWR | syscall::O_CREAT | syscall::O_NONBLOCK).expect("e1000d: failed to create network scheme");
let socket = Arc::new(RefCell::new(unsafe { File::from_raw_fd(socket_fd) }));
let address = unsafe { syscall::physmap(bar, 128*1024, MAP_WRITE).expect("e1000d: failed to map address") };
{
@ -69,7 +70,6 @@ fn main() {
Ok(None)
}).expect("e1000d: failed to catch events on IRQ file");
let socket_fd = socket.borrow().as_raw_fd();
event_queue.add(socket_fd, move |_count: usize| -> Result<Option<()>> {
let mut packet = Packet::default();
socket.borrow_mut().read(&mut packet)?;