Migrate e1000d to pcid_interface

This commit is contained in:
bjorn3
2024-01-20 19:04:15 +01:00
parent d950e33184
commit 075e28339f
4 changed files with 19 additions and 11 deletions
Generated
+1
View File
@@ -379,6 +379,7 @@ dependencies = [
"bitflags 1.3.2",
"common",
"netutils",
"pcid",
"redox-daemon",
"redox_event 0.1.0",
"redox_syscall 0.4.1",
+1
View File
@@ -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
View File
@@ -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
View File
@@ -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);