Adds PCI iobar helper

This stuff is a bit clunky; you need to check after each pci_get_whatever().
Not sure if there's a nicer way, esp given we have a bunch of device code from
2-3 OSs in here.
diff --git a/kern/arch/x86/pci.c b/kern/arch/x86/pci.c
index cf9ba33..6847516 100644
--- a/kern/arch/x86/pci.c
+++ b/kern/arch/x86/pci.c
@@ -502,6 +502,15 @@
 	        pcidev->bar[bir].mmio_base32);
 }
 
+uintptr_t pci_get_iobar(struct pci_device *pcidev, int bir)
+{
+	if (bir >= pcidev->nr_bars)
+		return 0;
+	if (!pci_is_iobar(pcidev->bar[bir].raw_bar))
+		return 0;
+	return pci_getiobar32(pcidev->bar[bir].raw_bar);
+}
+
 uint16_t pci_get_vendor(struct pci_device *pcidev)
 {
 	return pcidev->ven_id;
diff --git a/kern/arch/x86/pci.h b/kern/arch/x86/pci.h
index 2a19379..3aaf051 100644
--- a/kern/arch/x86/pci.h
+++ b/kern/arch/x86/pci.h
@@ -408,6 +408,7 @@
 void pci_clr_bus_master(struct pci_device *pcidev);
 struct pci_device *pci_match_tbdf(int tbdf);
 uintptr_t pci_get_membar(struct pci_device *pcidev, int bir);
+uintptr_t pci_get_iobar(struct pci_device *pcidev, int bir);
 uint16_t pci_get_vendor(struct pci_device *pcidev);
 uint16_t pci_get_device(struct pci_device *pcidev);
 uint16_t pci_get_subvendor(struct pci_device *pcidev);