let's try pci_driver instead

This commit is contained in:
Artemis Tosini 2024-07-19 22:05:57 +00:00
parent feb5cb5fa3
commit 697c4bfdc2
Signed by: artemist
SSH key fingerprint: SHA256:EsuWCwx6fjxxExxf65rX+ocQJJAdw4R1KarpFue6Uwc
3 changed files with 44 additions and 102 deletions

117
Cargo.lock generated
View file

@ -61,16 +61,10 @@ dependencies = [
] ]
[[package]] [[package]]
name = "bitflags" name = "autocfg"
version = "1.3.2" version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
[[package]]
name = "byteorder"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]] [[package]]
name = "clap" name = "clap"
@ -201,7 +195,16 @@ dependencies = [
"env_logger", "env_logger",
"eyre", "eyre",
"log", "log",
"vfio-ioctls", "pci-driver",
]
[[package]]
name = "num-traits"
version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
dependencies = [
"autocfg",
] ]
[[package]] [[package]]
@ -210,6 +213,16 @@ version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "pci-driver"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da882b89e91da979a91f6cc32f54e5bdbb18c6b46280a032a2225e30a03390fd"
dependencies = [
"libc",
"num-traits",
]
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.86" version = "1.0.86"
@ -274,26 +287,6 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "thiserror"
version = "1.0.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.12" version = "1.0.12"
@ -306,70 +299,6 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "vfio-bindings"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "43449b404c488f70507dca193debd4bea361fe8089869b947adc19720e464bce"
[[package]]
name = "vfio-ioctls"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "068bac78842164a8ecc1d1a84a8d8a9168ab29fa3c96942689e286a30ae22ac4"
dependencies = [
"byteorder",
"libc",
"log",
"thiserror",
"vfio-bindings",
"vm-memory",
"vmm-sys-util",
]
[[package]]
name = "vm-memory"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c3aba5064cc5f6f7740cddc8dae34d2d9a311cac69b60d942af7f3ab8fc49f4"
dependencies = [
"libc",
"thiserror",
"winapi",
]
[[package]]
name = "vmm-sys-util"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d1435039746e20da4f8d507a72ee1b916f7b4b05af7a91c093d2c6561934ede"
dependencies = [
"bitflags",
"libc",
]
[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
dependencies = [
"winapi-i686-pc-windows-gnu",
"winapi-x86_64-pc-windows-gnu",
]
[[package]]
name = "winapi-i686-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]] [[package]]
name = "windows-sys" name = "windows-sys"
version = "0.52.0" version = "0.52.0"

View file

@ -8,4 +8,4 @@ clap = { version = "4.5.9", features = ["derive"] }
env_logger = "0.11.3" env_logger = "0.11.3"
eyre = "0.6.12" eyre = "0.6.12"
log = "0.4.22" log = "0.4.22"
vfio-ioctls = { version = "0.1.0", default-features = false } pci-driver = "0.1.4"

View file

@ -1,7 +1,5 @@
use std::sync::Arc;
use clap::Parser; use clap::Parser;
use vfio_ioctls::{VfioContainer, VfioDevice}; use pci_driver::{backends::vfio::VfioPciDevice, device::PciDevice};
#[derive(Parser, Debug)] #[derive(Parser, Debug)]
struct Args { struct Args {
@ -18,14 +16,29 @@ fn main() -> eyre::Result<()> {
env_logger::init(); env_logger::init();
let args = Args::parse(); let args = Args::parse();
let container = Arc::new(VfioContainer::new(())?); let device = VfioPciDevice::open(&args.device)?;
let device = VfioDevice::new(&args.device, container.clone())?;
if args.reset { if args.reset {
device.reset(); device.reset()?;
} }
log::info!("max_interrupts: {}", device.()); let config = device.config();
// This library got the order backwards...
let class = (
config.class_code().programming_interface().read()?,
config.class_code().sub_class_code().read()?,
config.class_code().base_class_code().read()?,
);
println!("{:?}", class);
if class != (0x0c, 0x03, 0x30) {
eyre::bail!("Device is not xHCI controller!");
}
log::info!(
"Found PCIe device {:04x}:{:04x}",
config.vendor_id().read()?,
config.device_id().read()?
);
Ok(()) Ok(())
} }