Migrate e1000d to pcid_interface
This commit is contained in:
Generated
+1
@@ -379,6 +379,7 @@ dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"common",
|
||||
"netutils",
|
||||
"pcid",
|
||||
"redox-daemon",
|
||||
"redox_event 0.1.0",
|
||||
"redox_syscall 0.4.1",
|
||||
|
||||
@@ -11,3 +11,4 @@ redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git" }
|
||||
redox_syscall = "0.4"
|
||||
|
||||
common = { path = "../common" }
|
||||
pcid = { path = "../pcid" }
|
||||
|
||||
+2
-1
@@ -2,4 +2,5 @@
|
||||
name = "E1000 NIC"
|
||||
class = 0x02
|
||||
ids = { 0x8086 = [0x1004, 0x100e, 0x100f, 0x1503] }
|
||||
command = ["e1000d", "$NAME", "$BAR0", "$BARSIZE0", "$IRQ"]
|
||||
command = ["e1000d"]
|
||||
use_channel = true
|
||||
|
||||
+15
-10
@@ -3,13 +3,14 @@ extern crate netutils;
|
||||
extern crate syscall;
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::{env, process};
|
||||
use std::fs::File;
|
||||
use std::io::{ErrorKind, Read, Result, Write};
|
||||
use std::os::unix::io::{AsRawFd, FromRawFd, RawFd};
|
||||
use std::process;
|
||||
use std::sync::Arc;
|
||||
|
||||
use event::EventQueue;
|
||||
use pcid_interface::{PciBar, PcidServerHandle};
|
||||
use syscall::{EventFlags, Packet, SchemeBlockMut};
|
||||
|
||||
pub mod device;
|
||||
@@ -58,19 +59,23 @@ fn handle_update(
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut args = env::args().skip(1);
|
||||
let mut pcid_handle =
|
||||
PcidServerHandle::connect_default().expect("e1000d: failed to setup channel to pcid");
|
||||
let pci_config = pcid_handle
|
||||
.fetch_config()
|
||||
.expect("e1000d: failed to fetch config");
|
||||
|
||||
let mut name = args.next().expect("e1000d: no name provided");
|
||||
let mut name = pci_config.func.name();
|
||||
name.push_str("_e1000");
|
||||
|
||||
let bar_str = args.next().expect("e1000d: no address provided");
|
||||
let bar = usize::from_str_radix(&bar_str, 16).expect("e1000d: failed to parse address");
|
||||
let bar = match pci_config.func.bars[0] {
|
||||
PciBar::Memory32(addr) => addr as usize,
|
||||
PciBar::Memory64(addr) => addr as usize,
|
||||
PciBar::None | PciBar::Port(_) => unreachable!(),
|
||||
};
|
||||
let bar_size = pci_config.func.bar_sizes[0] as usize;
|
||||
|
||||
let bar_size_str = args.next().expect("e1000d: no address size provided");
|
||||
let bar_size = usize::from_str_radix(&bar_size_str, 16).expect("e1000d: failed to parse address size");
|
||||
|
||||
let irq_str = args.next().expect("e1000d: no irq provided");
|
||||
let irq = irq_str.parse::<u8>().expect("e1000d: failed to parse irq");
|
||||
let irq = pci_config.func.legacy_interrupt_line;
|
||||
|
||||
eprintln!(" + E1000 {} on: {:X} size: {} IRQ: {}", name, bar, bar_size, irq);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user