mirror of https://github.com/xemu-project/xemu.git
pci: don't overwrite multi functio bit in pci header type.
Don't overwrite pci header type. Otherwise, multi function bit which pci_init_header_type() sets appropriately is lost. Anyway PCI_HEADER_TYPE_NORMAL is zero, so it is unnecessary to zero which is already zero cleared. how to test: run qemu and issue info pci to see whether a device in question is normal device, not pci-to-pci bridge. This is handy because guest os isn't required. tested changes: The following files are covered by using following commands. sparc64-softmmu apb_pci.c, vga-pci.c, cmd646.c, ne2k_pci.c, sun4u.c ppc-softmmu grackle_pci.c, cmd646.c, ne2k_pci.c, vga-pci.c, macio.c ppc-softmmu -M mac99 unin_pci.c(uni-north, uni-north-agp) ppc64-softmmu pci-ohci, ne2k_pci, vga-pci, unin_pci.c(u3-agp) x86_64-softmmu acpi_piix4.c, ide/piix.c, piix_pci.c -vga vmware vmware_vga.c -watchdog i6300esb wdt_i6300esb.c -usb usb-uhci.c -sound ac97 ac97.c -nic model=rtl8139 rtl8139.c -nic model=pcnet pcnet.c -balloon virtio virtio-pci.c: untested changes: The following changes aren't tested. prep_pci.c: ppc-softmmu -M prep should cover, but core dumped. unin_pci.c(uni-north-pci): the caller is commented out. openpic.c: the caller is commented out in ppc_prep.c Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
6fa84913ec
commit
b80d4a9887
|
@ -1295,7 +1295,6 @@ static int ac97_initfn (PCIDevice *dev)
|
|||
c[PCI_REVISION_ID] = 0x01; /* rid revision ro */
|
||||
c[PCI_CLASS_PROG] = 0x00; /* pi programming interface ro */
|
||||
pci_config_set_class (c, PCI_CLASS_MULTIMEDIA_AUDIO); /* ro */
|
||||
c[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; /* headtyp header type ro */
|
||||
|
||||
/* TODO set when bar is registered. no need to override. */
|
||||
/* nabmar native audio mixer base address rw */
|
||||
|
|
|
@ -369,7 +369,6 @@ static int piix4_pm_initfn(PCIDevice *dev)
|
|||
pci_conf[0x08] = 0x03; // revision number
|
||||
pci_conf[0x09] = 0x00;
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_BRIDGE_OTHER);
|
||||
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
pci_conf[0x3d] = 0x01; // interrupt pin 1
|
||||
|
||||
pci_conf[0x40] = 0x01; /* PM io base read only bit */
|
||||
|
|
|
@ -427,8 +427,6 @@ static int pbm_pci_host_init(PCIDevice *d)
|
|||
PCI_STATUS_FAST_BACK | PCI_STATUS_66MHZ |
|
||||
PCI_STATUS_DEVSEL_MEDIUM);
|
||||
pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST);
|
||||
pci_set_byte(d->config + PCI_HEADER_TYPE,
|
||||
PCI_HEADER_TYPE_NORMAL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -126,7 +126,6 @@ static int grackle_pci_host_init(PCIDevice *d)
|
|||
d->config[0x08] = 0x00; // revision
|
||||
d->config[0x09] = 0x01;
|
||||
pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST);
|
||||
d->config[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -240,7 +240,6 @@ static int pci_cmd646_ide_initfn(PCIDevice *dev)
|
|||
pci_conf[PCI_CLASS_PROG] = 0x8f;
|
||||
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE);
|
||||
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
|
||||
pci_conf[0x51] = 0x04; // enable IDE0
|
||||
if (d->secondary) {
|
||||
|
|
|
@ -122,7 +122,6 @@ static int pci_piix_ide_initfn(PCIIDEState *d)
|
|||
|
||||
pci_conf[PCI_CLASS_PROG] = 0x80; // legacy ATA mode
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE);
|
||||
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
|
||||
qemu_register_reset(piix3_reset, d);
|
||||
|
||||
|
|
|
@ -110,7 +110,6 @@ void macio_init (PCIBus *bus, int device_id, int is_oldworld, int pic_mem_index,
|
|||
pci_config_set_vendor_id(d->config, PCI_VENDOR_ID_APPLE);
|
||||
pci_config_set_device_id(d->config, device_id);
|
||||
pci_config_set_class(d->config, PCI_CLASS_OTHERS << 8);
|
||||
d->config[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
|
||||
d->config[0x3d] = 0x01; // interrupt on pin 1
|
||||
|
||||
|
|
|
@ -723,7 +723,6 @@ static int pci_ne2000_init(PCIDevice *pci_dev)
|
|||
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_REALTEK);
|
||||
pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_REALTEK_8029);
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET);
|
||||
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
/* TODO: RST# value should be 0. PCI spec 6.2.4 */
|
||||
pci_conf[PCI_INTERRUPT_PIN] = 1; // interrupt pin 0
|
||||
|
||||
|
|
|
@ -1194,7 +1194,6 @@ qemu_irq *openpic_init (PCIBus *bus, int *pmem_index, int nb_cpus,
|
|||
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_IBM);
|
||||
pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_IBM_OPENPIC2);
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_SYSTEM_OTHER); // FIXME?
|
||||
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
pci_conf[0x3d] = 0x00; // no interrupt pin
|
||||
|
||||
/* Register I/O spaces */
|
||||
|
|
|
@ -1990,7 +1990,6 @@ static int pci_pcnet_init(PCIDevice *pci_dev)
|
|||
/* TODO: 0 is the default anyway, no need to set it. */
|
||||
pci_conf[PCI_CLASS_PROG] = 0x00;
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET);
|
||||
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
|
||||
/* TODO: not necessary, is set when BAR is registered. */
|
||||
pci_set_long(pci_conf + PCI_BASE_ADDRESS_0, PCI_BASE_ADDRESS_SPACE_IO);
|
||||
|
|
|
@ -208,7 +208,6 @@ static int i440fx_initfn(PCIDevice *dev)
|
|||
pci_config_set_device_id(d->dev.config, PCI_DEVICE_ID_INTEL_82441);
|
||||
d->dev.config[0x08] = 0x02; // revision
|
||||
pci_config_set_class(d->dev.config, PCI_CLASS_BRIDGE_HOST);
|
||||
d->dev.config[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
|
||||
d->dev.config[I440FX_SMRAM] = 0x02;
|
||||
|
||||
|
|
|
@ -137,7 +137,6 @@ PCIBus *pci_prep_init(qemu_irq *pic)
|
|||
pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST);
|
||||
d->config[0x0C] = 0x08; // cache_line_size
|
||||
d->config[0x0D] = 0x10; // latency_timer
|
||||
d->config[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
d->config[0x34] = 0x00; // capabilities_pointer
|
||||
|
||||
return s->bus;
|
||||
|
|
|
@ -3361,7 +3361,6 @@ static int pci_rtl8139_init(PCIDevice *dev)
|
|||
pci_conf[PCI_COMMAND] = PCI_COMMAND_IO | PCI_COMMAND_MASTER;
|
||||
pci_conf[PCI_REVISION_ID] = RTL8139_PCI_REVID; /* >=0x20 is for 8139C+ */
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_NETWORK_ETHERNET);
|
||||
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL;
|
||||
/* TODO: value should be 0 at RST# */
|
||||
pci_conf[PCI_INTERRUPT_PIN] = 1; /* interrupt pin 0 */
|
||||
/* TODO: start of capability list, but no capability
|
||||
|
|
|
@ -562,7 +562,6 @@ pci_ebus_init1(PCIDevice *s)
|
|||
s->config[0x09] = 0x00; // programming i/f
|
||||
pci_config_set_class(s->config, PCI_CLASS_BRIDGE_OTHER);
|
||||
s->config[0x0D] = 0x0a; // latency_timer
|
||||
s->config[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
|
||||
pci_register_bar(s, 0, 0x1000000, PCI_BASE_ADDRESS_SPACE_MEMORY,
|
||||
ebus_mmio_mapfunc);
|
||||
|
|
|
@ -300,7 +300,6 @@ static int unin_main_pci_host_init(PCIDevice *d)
|
|||
pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST);
|
||||
d->config[0x0C] = 0x08; // cache_line_size
|
||||
d->config[0x0D] = 0x10; // latency_timer
|
||||
d->config[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
d->config[0x34] = 0x00; // capabilities_pointer
|
||||
return 0;
|
||||
}
|
||||
|
@ -313,7 +312,6 @@ static int unin_agp_pci_host_init(PCIDevice *d)
|
|||
pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST);
|
||||
d->config[0x0C] = 0x08; // cache_line_size
|
||||
d->config[0x0D] = 0x10; // latency_timer
|
||||
d->config[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
// d->config[0x34] = 0x80; // capabilities_pointer
|
||||
return 0;
|
||||
}
|
||||
|
@ -329,7 +327,6 @@ static int u3_agp_pci_host_init(PCIDevice *d)
|
|||
d->config[0x0C] = 0x08;
|
||||
/* latency timer */
|
||||
d->config[0x0D] = 0x10;
|
||||
d->config[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -341,7 +338,6 @@ static int unin_internal_pci_host_init(PCIDevice *d)
|
|||
pci_config_set_class(d->config, PCI_CLASS_BRIDGE_HOST);
|
||||
d->config[0x0C] = 0x08; // cache_line_size
|
||||
d->config[0x0D] = 0x10; // latency_timer
|
||||
d->config[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
d->config[0x34] = 0x00; // capabilities_pointer
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1109,7 +1109,6 @@ static int usb_uhci_common_initfn(UHCIState *s)
|
|||
pci_conf[PCI_REVISION_ID] = 0x01; // revision number
|
||||
pci_conf[PCI_CLASS_PROG] = 0x00;
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_SERIAL_USB);
|
||||
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
/* TODO: reset value should be 0. */
|
||||
pci_conf[PCI_INTERRUPT_PIN] = 4; // interrupt pin 3
|
||||
pci_conf[0x60] = 0x10; // release number
|
||||
|
|
|
@ -90,7 +90,6 @@ static int pci_vga_initfn(PCIDevice *dev)
|
|||
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_QEMU);
|
||||
pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_QEMU_VGA);
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_DISPLAY_VGA);
|
||||
pci_conf[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL; // header_type
|
||||
|
||||
/* XXX: VGA_RAM_SIZE must be a power of two */
|
||||
pci_register_bar(&d->dev, 0, VGA_RAM_SIZE,
|
||||
|
|
|
@ -506,7 +506,6 @@ static void virtio_init_pci(VirtIOPCIProxy *proxy, VirtIODevice *vdev,
|
|||
|
||||
config[0x09] = pif;
|
||||
pci_config_set_class(config, class_code);
|
||||
config[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL;
|
||||
|
||||
config[0x2c] = vendor & 0xFF;
|
||||
config[0x2d] = (vendor >> 8) & 0xFF;
|
||||
|
|
|
@ -1246,7 +1246,6 @@ static int pci_vmsvga_initfn(PCIDevice *dev)
|
|||
pci_config_set_class(s->card.config, PCI_CLASS_DISPLAY_VGA);
|
||||
s->card.config[PCI_CACHE_LINE_SIZE] = 0x08; /* Cache line size */
|
||||
s->card.config[PCI_LATENCY_TIMER] = 0x40; /* Latency timer */
|
||||
s->card.config[PCI_HEADER_TYPE] = PCI_HEADER_TYPE_NORMAL;
|
||||
s->card.config[PCI_SUBSYSTEM_VENDOR_ID] = PCI_VENDOR_ID_VMWARE & 0xff;
|
||||
s->card.config[PCI_SUBSYSTEM_VENDOR_ID + 1] = PCI_VENDOR_ID_VMWARE >> 8;
|
||||
s->card.config[PCI_SUBSYSTEM_ID] = SVGA_PCI_DEVICE_ID & 0xff;
|
||||
|
|
|
@ -411,7 +411,6 @@ static int i6300esb_init(PCIDevice *dev)
|
|||
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL);
|
||||
pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_ESB_9);
|
||||
pci_config_set_class(pci_conf, PCI_CLASS_SYSTEM_OTHER);
|
||||
pci_conf[PCI_HEADER_TYPE] = 0x00;
|
||||
|
||||
pci_register_bar(&d->dev, 0, 0x10,
|
||||
PCI_BASE_ADDRESS_SPACE_MEMORY, i6300esb_map);
|
||||
|
|
Loading…
Reference in New Issue