123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- //! PCI transport for VirtIO.
- pub mod bus;
- use super::DeviceType;
- /// The PCI vendor ID for VirtIO devices.
- const VIRTIO_VENDOR_ID: u16 = 0x1af4;
- /// The offset to add to a VirtIO device ID to get the corresponding PCI device ID.
- const PCI_DEVICE_ID_OFFSET: u16 = 0x1040;
- const TRANSITIONAL_NETWORK: u16 = 0x1000;
- const TRANSITIONAL_BLOCK: u16 = 0x1001;
- const TRANSITIONAL_MEMORY_BALLOONING: u16 = 0x1002;
- const TRANSITIONAL_CONSOLE: u16 = 0x1003;
- const TRANSITIONAL_SCSI_HOST: u16 = 0x1004;
- const TRANSITIONAL_ENTROPY_SOURCE: u16 = 0x1005;
- const TRANSITIONAL_9P_TRANSPORT: u16 = 0x1009;
- fn device_type(pci_device_id: u16) -> DeviceType {
- match pci_device_id {
- TRANSITIONAL_NETWORK => DeviceType::Network,
- TRANSITIONAL_BLOCK => DeviceType::Block,
- TRANSITIONAL_MEMORY_BALLOONING => DeviceType::MemoryBalloon,
- TRANSITIONAL_CONSOLE => DeviceType::Console,
- TRANSITIONAL_SCSI_HOST => DeviceType::ScsiHost,
- TRANSITIONAL_ENTROPY_SOURCE => DeviceType::EntropySource,
- TRANSITIONAL_9P_TRANSPORT => DeviceType::_9P,
- id if id >= PCI_DEVICE_ID_OFFSET => DeviceType::from(id - PCI_DEVICE_ID_OFFSET),
- _ => DeviceType::Invalid,
- }
- }
- #[cfg(test)]
- mod tests {
- use super::*;
- #[test]
- fn transitional_device_ids() {
- assert_eq!(device_type(0x1000), DeviceType::Network);
- assert_eq!(device_type(0x1002), DeviceType::MemoryBalloon);
- assert_eq!(device_type(0x1009), DeviceType::_9P);
- }
- #[test]
- fn offset_device_ids() {
- assert_eq!(device_type(0x1045), DeviceType::MemoryBalloon);
- assert_eq!(device_type(0x1049), DeviceType::_9P);
- assert_eq!(device_type(0x1058), DeviceType::Memory);
- assert_eq!(device_type(0x1040), DeviceType::Invalid);
- assert_eq!(device_type(0x1059), DeviceType::Invalid);
- }
- }
|