From 09ace0dfedd16b7b207125ecac39f87960bb3d80 Mon Sep 17 00:00:00 2001 From: pjht Date: Sun, 25 Aug 2024 11:13:35 -0500 Subject: [PATCH] Give each driver a per-device ID --- src/main.rs | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/main.rs b/src/main.rs index f5b3ff0..941bc2e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,6 @@ #![allow(clippy::verbose_bit_mask)] use std::{ - fs, - io::Cursor, - os::mikros::{ipc, syscalls}, - path::{Path, PathBuf}, + collections::HashMap, fs, io::Cursor, os::mikros::{ipc, syscalls}, path::{Path, PathBuf} }; use binread::prelude::*; @@ -362,6 +359,7 @@ fn main() { scan_bus(0, &mut device_vec); let srv = PCIServer(device_vec.clone()); pci_rpc::register_server(Box::new(srv)); + let mut driver_map: HashMap> = HashMap::new(); for device in &device_vec { syslog_client.send_text_message( "pci", @@ -399,19 +397,26 @@ fn main() { syslog_client .send_text_message("pci", format!(" Driver {}", driver.display())) .unwrap(); - std::process::Command::new(driver) - .arg(device.bus.to_string()) - .arg(device.device.to_string()) - .arg(device.function.to_string()) - .arg(syscalls::get_pid().to_string()) - .spawn() - .unwrap(); + + driver_map.entry(driver.to_owned()).or_default().push((device.bus, device.device, device.function)); } else { syslog_client .send_text_message("pci", " WARN: No driver") .unwrap(); } } + for (driver, device_list) in driver_map.iter() { + for (i, (bus, device, function)) in device_list.iter().enumerate() { + std::process::Command::new(driver) + .arg(bus.to_string()) + .arg(device.to_string()) + .arg(function.to_string()) + .arg(syscalls::get_pid().to_string()) + .arg(i.to_string()) + .spawn() + .unwrap(); + } + } loop { ipc::process_messages(); }