[virtio] Refactor VirtIOBlkIterator to PciTransportIterator

Enables iteration over various types of VirtIO devices.

Test: atest MicrodroidHostTests
Bug: 284462758
Change-Id: If31961f266b375f00145bd81c25712681d26e61d
diff --git a/vmbase/src/virtio/pci.rs b/vmbase/src/virtio/pci.rs
index b54f7d1..cbb4d26 100644
--- a/vmbase/src/virtio/pci.rs
+++ b/vmbase/src/virtio/pci.rs
@@ -23,12 +23,9 @@
 use once_cell::race::OnceBox;
 use virtio_drivers::{
     device::blk,
-    transport::{
-        pci::{
-            bus::{BusDeviceIterator, PciRoot},
-            virtio_device_type, PciTransport,
-        },
-        DeviceType, Transport,
+    transport::pci::{
+        bus::{BusDeviceIterator, PciRoot},
+        virtio_device_type, PciTransport,
     },
 };
 
@@ -81,13 +78,13 @@
 /// Virtio Block device.
 pub type VirtIOBlk = blk::VirtIOBlk<HalImpl, PciTransport>;
 
-/// Virtio Block device iterator.
-pub struct VirtIOBlkIterator<'a> {
+/// An iterator that iterates over the PCI transport for each device.
+pub struct PciTransportIterator<'a> {
     pci_root: &'a mut PciRoot,
     bus: BusDeviceIterator,
 }
 
-impl<'a> VirtIOBlkIterator<'a> {
+impl<'a> PciTransportIterator<'a> {
     /// Creates a new iterator.
     pub fn new(pci_root: &'a mut PciRoot) -> Self {
         let bus = pci_root.enumerate_bus(0);
@@ -95,8 +92,8 @@
     }
 }
 
-impl<'a> Iterator for VirtIOBlkIterator<'a> {
-    type Item = VirtIOBlk;
+impl<'a> Iterator for PciTransportIterator<'a> {
+    type Item = PciTransport;
 
     fn next(&mut self) -> Option<Self::Item> {
         loop {
@@ -112,17 +109,7 @@
             };
             debug!("  VirtIO {:?}", virtio_type);
 
-            let mut transport =
-                PciTransport::new::<HalImpl>(self.pci_root, device_function).unwrap();
-            debug!(
-                "Detected virtio PCI device with device type {:?}, features {:#018x}",
-                transport.device_type(),
-                transport.read_device_features(),
-            );
-
-            if virtio_type == DeviceType::Block {
-                return Some(Self::Item::new(transport).expect("failed to create blk driver"));
-            }
+            return PciTransport::new::<HalImpl>(self.pci_root, device_function).ok();
         }
     }
 }