diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2015-02-11 15:15:12 +1030 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2015-02-11 16:47:38 +1030 |
commit | 8e70946943961cf5bb9be3a0cf12bd0da7a7cb0d (patch) | |
tree | f0766130cf8b6873e7a9aa0e6586672e878945ff /tools | |
parent | 3e0e5f2640d3b8f8f958e72f1577f1e323e11da6 (diff) | |
download | op-kernel-dev-8e70946943961cf5bb9be3a0cf12bd0da7a7cb0d.zip op-kernel-dev-8e70946943961cf5bb9be3a0cf12bd0da7a7cb0d.tar.gz |
lguest: add a dummy PCI host bridge.
Otherwise Linux fails to find the bus.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/lguest/lguest.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tools/lguest/lguest.c b/tools/lguest/lguest.c index eafdaf2..c8930bc 100644 --- a/tools/lguest/lguest.c +++ b/tools/lguest/lguest.c @@ -1238,6 +1238,17 @@ static void handle_output(unsigned long addr) * code. */ +/* Linux expects a PCI host bridge: ours is a dummy, and first on the bus. */ +static struct device pci_host_bridge; + +static void init_pci_host_bridge(void) +{ + pci_host_bridge.name = "PCI Host Bridge"; + pci_host_bridge.config.class = 0x06; /* bridge */ + pci_host_bridge.config.subclass = 0; /* host bridge */ + devices.pci[0] = &pci_host_bridge; +} + /* The IO ports used to read the PCI config space. */ #define PCI_CONFIG_ADDR 0xCF8 #define PCI_CONFIG_DATA 0xCFC @@ -3007,6 +3018,9 @@ int main(int argc, char *argv[]) /* We always have a console device */ setup_console(); + /* Initialize the (fake) PCI host bridge device. */ + init_pci_host_bridge(); + /* Now we load the kernel */ start = load_kernel(open_or_die(argv[optind+1], O_RDONLY)); |