diff options
Diffstat (limited to 'tools/ioemu/hw/xen_platform.c')
-rw-r--r-- | tools/ioemu/hw/xen_platform.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/tools/ioemu/hw/xen_platform.c b/tools/ioemu/hw/xen_platform.c index 8b319858cb..a0e9f1e397 100644 --- a/tools/ioemu/hw/xen_platform.c +++ b/tools/ioemu/hw/xen_platform.c @@ -97,7 +97,8 @@ struct pci_config_header { uint8_t bist; /* Built in self test */ uint32_t base_address_regs[6]; uint32_t reserved1; - uint32_t reserved2; + uint16_t subsystem_vendor_id; + uint16_t subsystem_id; uint32_t rom_addr; uint32_t reserved3; uint32_t reserved4; @@ -116,16 +117,21 @@ void pci_xen_platform_init(PCIBus *bus) d = pci_register_device(bus, "xen-platform", sizeof(PCIDevice), -1, NULL, NULL); pch = (struct pci_config_header *)d->config; - pch->vendor_id = 0xfffd; - pch->device_id = 0x0101; + pch->vendor_id = 0x5853; + pch->device_id = 0x0001; pch->command = 3; /* IO and memory access */ - pch->revision = 0; + pch->revision = 1; pch->api = 0; pch->subclass = 0x80; /* Other */ pch->class = 0xff; /* Unclassified device class */ pch->header_type = 0; pch->interrupt_pin = 1; + /* Microsoft WHQL requires non-zero subsystem IDs. */ + /* http://www.pcisig.com/reflector/msg02205.html. */ + pch->subsystem_vendor_id = pch->vendor_id; /* Duplicate vendor id. */ + pch->subsystem_id = 0x0001; /* Hardcode sub-id as 1. */ + pci_register_io_region(d, 0, 0x100, PCI_ADDRESS_SPACE_IO, platform_ioport_map); |