aboutsummaryrefslogtreecommitdiffstats
path: root/tools/ioemu/hw/xen_platform.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ioemu/hw/xen_platform.c')
-rw-r--r--tools/ioemu/hw/xen_platform.c14
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);