fix: expose pcid handoff to spawned drivers

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-05-07 20:51:56 +01:00
parent 26be773a59
commit bb78be5240
2 changed files with 45 additions and 0 deletions
@@ -0,0 +1,8 @@
--- a/drivers/pcid/src/driver_interface/mod.rs
+++ b/drivers/pcid/src/driver_interface/mod.rs
@@ -310,4 +310,4 @@ impl PciFunctionHandle {
- fn connect_default() -> Self {
+ pub fn connect_default() -> Self {
let channel_fd = match env::var("PCID_CLIENT_CHANNEL") {
Ok(channel_fd) => channel_fd,
Err(err) => {
@@ -0,0 +1,37 @@
--- a/drivers/pcid-spawner/src/main.rs
+++ b/drivers/pcid-spawner/src/main.rs
@@ -54,11 +54,12 @@ fn main() -> Result<()> {
}
};
- let full_device_id = handle.config().func.full_device_id;
+ let func = handle.config().func;
+ let full_device_id = func.full_device_id;
log::debug!(
"pcid-spawner enumerated: PCI {} {}",
- handle.config().func.addr,
+ func.addr,
full_device_id.display()
);
@@ -67,7 +68,7 @@ fn main() -> Result<()> {
.iter()
.find(|driver| driver.match_function(&full_device_id))
else {
- log::debug!("no driver for {}, continuing", handle.config().func.addr);
+ log::debug!("no driver for {}, continuing", func.addr);
continue;
};
@@ -91,6 +92,10 @@ fn main() -> Result<()> {
let channel_fd = handle.into_inner_fd();
command.env("PCID_CLIENT_CHANNEL", channel_fd.to_string());
+ command.env("PCID_SEGMENT", format!("{:04x}", func.addr.segment()));
+ command.env("PCID_BUS", format!("{:02x}", func.addr.bus()));
+ command.env("PCID_DEVICE", format!("{:02x}", func.addr.device()));
+ command.env("PCID_FUNCTION", format!("{}", func.addr.function()));
#[allow(deprecated, reason = "we can't yet move this to init")]
daemon::Daemon::spawn(command);