Support multiple independent root buses (if known at compile time).

Allow extra root buses to be specified in src/config.h.
This is based on a patch by Myles Watson.
diff --git a/src/config.h b/src/config.h
index 13b8472..56e5302 100644
--- a/src/config.h
+++ b/src/config.h
@@ -51,6 +51,10 @@
 #define CONFIG_KBD_CALL_INT15_4F 1
 // Support for int15c2 mouse calls
 #define CONFIG_PS2_MOUSE 1
+// If the target machine has multiple independent root buses, the
+// extra buses may be specified here.
+#define CONFIG_PCI_ROOT1 0x00
+#define CONFIG_PCI_ROOT2 0x00
 // Support finding and running option roms during post.
 #define CONFIG_OPTIONROMS 1
 // Set if option roms are already copied to 0xc0000-0xf0000
diff --git a/src/pci.c b/src/pci.c
index a59af07..349c8cd 100644
--- a/src/pci.c
+++ b/src/pci.c
@@ -10,7 +10,6 @@
 #include "util.h" // dprintf
 #include "config.h" // CONFIG_*
 #include "pci_regs.h" // PCI_VENDOR_ID
-#include "farptr.h" // SET_VAR
 
 void pci_config_writel(u16 bdf, u32 addr, u32 val)
 {
@@ -59,8 +58,15 @@
 
     int max = *pmax;
     for (;;) {
-        if (bdf >= max)
-            return -1;
+        if (bdf >= max) {
+            if (CONFIG_PCI_ROOT1 && bdf <= (CONFIG_PCI_ROOT1 << 8))
+                bdf = CONFIG_PCI_ROOT1 << 8;
+            else if (CONFIG_PCI_ROOT2 && bdf <= (CONFIG_PCI_ROOT2 << 8))
+                bdf = CONFIG_PCI_ROOT2 << 8;
+            else
+            	return -1;
+            *pmax = max = bdf + 0x0100;
+        }
 
         u16 v = pci_config_readw(bdf, PCI_VENDOR_ID);
         if (v != 0x0000 && v != 0xffff)