xref: /qemu/include/hw/i386/pc.h (revision 15eafc2e602ff8c37c6e132eb8c63fec8fc17175)
187ecb68bSpbrook #ifndef HW_PC_H
287ecb68bSpbrook #define HW_PC_H
3376253ecSaliguori 
4376253ecSaliguori #include "qemu-common.h"
58170dfa0SEduardo Habkost #include "qemu/typedefs.h"
6022c62cbSPaolo Bonzini #include "exec/memory.h"
79521d42bSPaolo Bonzini #include "hw/boards.h"
80d09e41aSPaolo Bonzini #include "hw/isa/isa.h"
90d09e41aSPaolo Bonzini #include "hw/block/fdc.h"
101422e32dSPaolo Bonzini #include "net/net.h"
110d09e41aSPaolo Bonzini #include "hw/i386/ioapic.h"
12376253ecSaliguori 
133459a625SMichael S. Tsirkin #include "qemu/range.h"
14b20c9bd5SMichael S. Tsirkin #include "qemu/bitmap.h"
15b20c9bd5SMichael S. Tsirkin #include "sysemu/sysemu.h"
16b20c9bd5SMichael S. Tsirkin #include "hw/pci/pci.h"
17d5747cacSIgor Mammedov #include "hw/boards.h"
1868a27b20SMichael S. Tsirkin #include "hw/compat.h"
19a7d69ff1SBharata B Rao #include "hw/mem/pc-dimm.h"
203459a625SMichael S. Tsirkin 
217a10ef51SLiu Ping Fan #define HPET_INTCAP "hpet-intcap"
227a10ef51SLiu Ping Fan 
23*15eafc2eSPaolo Bonzini #ifdef CONFIG_KVM
24*15eafc2eSPaolo Bonzini #define kvm_pit_in_kernel() \
25*15eafc2eSPaolo Bonzini     (kvm_irqchip_in_kernel() && !kvm_irqchip_is_split())
26*15eafc2eSPaolo Bonzini #define kvm_pic_in_kernel()  \
27*15eafc2eSPaolo Bonzini     (kvm_irqchip_in_kernel() && !kvm_irqchip_is_split())
28*15eafc2eSPaolo Bonzini #define kvm_ioapic_in_kernel() \
29*15eafc2eSPaolo Bonzini     (kvm_irqchip_in_kernel() && !kvm_irqchip_is_split())
30*15eafc2eSPaolo Bonzini #else
31*15eafc2eSPaolo Bonzini #define kvm_pit_in_kernel()      0
32*15eafc2eSPaolo Bonzini #define kvm_pic_in_kernel()      0
33*15eafc2eSPaolo Bonzini #define kvm_ioapic_in_kernel()   0
34*15eafc2eSPaolo Bonzini #endif
35*15eafc2eSPaolo Bonzini 
36619d11e4SIgor Mammedov /**
37619d11e4SIgor Mammedov  * PCMachineState:
38781bbd6bSIgor Mammedov  * @acpi_dev: link to ACPI PM device that performs ACPI hotplug handling
3991aa70abSIgor Mammedov  * @enforce_aligned_dimm: check that DIMM's address/size is aligned by
4091aa70abSIgor Mammedov  *                        backend's alignment value if provided
41619d11e4SIgor Mammedov  */
42d5747cacSIgor Mammedov struct PCMachineState {
43d5747cacSIgor Mammedov     /*< private >*/
44d5747cacSIgor Mammedov     MachineState parent_obj;
45619d11e4SIgor Mammedov 
46619d11e4SIgor Mammedov     /* <public> */
47a7d69ff1SBharata B Rao     MemoryHotplugState hotplug_memory;
48781bbd6bSIgor Mammedov 
49781bbd6bSIgor Mammedov     HotplugHandler *acpi_dev;
502d996150SGu Zheng     ISADevice *rtc;
51c87b1520SDon Slutz 
52c87b1520SDon Slutz     uint64_t max_ram_below_4g;
53d1048befSDon Slutz     OnOffAuto vmport;
54355023f2SPaolo Bonzini     OnOffAuto smm;
5591aa70abSIgor Mammedov     bool enforce_aligned_dimm;
56c0aa4e1eSEduardo Habkost     ram_addr_t below_4g_mem_size, above_4g_mem_size;
57d5747cacSIgor Mammedov };
58d5747cacSIgor Mammedov 
59781bbd6bSIgor Mammedov #define PC_MACHINE_ACPI_DEVICE_PROP "acpi-device"
60bf1e8939SIgor Mammedov #define PC_MACHINE_MEMHP_REGION_SIZE "hotplug-memory-region-size"
61c87b1520SDon Slutz #define PC_MACHINE_MAX_RAM_BELOW_4G "max-ram-below-4g"
629b23cfb7SDr. David Alan Gilbert #define PC_MACHINE_VMPORT           "vmport"
63355023f2SPaolo Bonzini #define PC_MACHINE_SMM              "smm"
6491aa70abSIgor Mammedov #define PC_MACHINE_ENFORCE_ALIGNED_DIMM "enforce-aligned-dimm"
65781bbd6bSIgor Mammedov 
6695bee274SIgor Mammedov /**
6795bee274SIgor Mammedov  * PCMachineClass:
6895bee274SIgor Mammedov  * @get_hotplug_handler: pointer to parent class callback @get_hotplug_handler
6995bee274SIgor Mammedov  */
70d5747cacSIgor Mammedov struct PCMachineClass {
71d5747cacSIgor Mammedov     /*< private >*/
72d5747cacSIgor Mammedov     MachineClass parent_class;
7395bee274SIgor Mammedov 
7495bee274SIgor Mammedov     /*< public >*/
752f8b5008SIgor Mammedov     bool broken_reserved_end;
7695bee274SIgor Mammedov     HotplugHandler *(*get_hotplug_handler)(MachineState *machine,
7795bee274SIgor Mammedov                                            DeviceState *dev);
78d5747cacSIgor Mammedov };
79d5747cacSIgor Mammedov 
80d5747cacSIgor Mammedov #define TYPE_PC_MACHINE "generic-pc-machine"
81d5747cacSIgor Mammedov #define PC_MACHINE(obj) \
82d5747cacSIgor Mammedov     OBJECT_CHECK(PCMachineState, (obj), TYPE_PC_MACHINE)
83d5747cacSIgor Mammedov #define PC_MACHINE_GET_CLASS(obj) \
84d5747cacSIgor Mammedov     OBJECT_GET_CLASS(PCMachineClass, (obj), TYPE_PC_MACHINE)
85d5747cacSIgor Mammedov #define PC_MACHINE_CLASS(klass) \
86d5747cacSIgor Mammedov     OBJECT_CLASS_CHECK(PCMachineClass, (klass), TYPE_PC_MACHINE)
87d5747cacSIgor Mammedov 
8887ecb68bSpbrook /* PC-style peripherals (also used by other machines).  */
8987ecb68bSpbrook 
903459a625SMichael S. Tsirkin typedef struct PcPciInfo {
913459a625SMichael S. Tsirkin     Range w32;
923459a625SMichael S. Tsirkin     Range w64;
933459a625SMichael S. Tsirkin } PcPciInfo;
943459a625SMichael S. Tsirkin 
95f854ecc7SMichael S. Tsirkin #define ACPI_PM_PROP_S3_DISABLED "disable_s3"
96f854ecc7SMichael S. Tsirkin #define ACPI_PM_PROP_S4_DISABLED "disable_s4"
97f854ecc7SMichael S. Tsirkin #define ACPI_PM_PROP_S4_VAL "s4_val"
98f854ecc7SMichael S. Tsirkin #define ACPI_PM_PROP_SCI_INT "sci_int"
99f854ecc7SMichael S. Tsirkin #define ACPI_PM_PROP_ACPI_ENABLE_CMD "acpi_enable_cmd"
100f854ecc7SMichael S. Tsirkin #define ACPI_PM_PROP_ACPI_DISABLE_CMD "acpi_disable_cmd"
101f854ecc7SMichael S. Tsirkin #define ACPI_PM_PROP_PM_IO_BASE "pm_io_base"
102f854ecc7SMichael S. Tsirkin #define ACPI_PM_PROP_GPE0_BLK "gpe0_blk"
103f854ecc7SMichael S. Tsirkin #define ACPI_PM_PROP_GPE0_BLK_LEN "gpe0_blk_len"
10492055797SPaulo Alcantara #define ACPI_PM_PROP_TCO_ENABLED "enable_tco"
105f854ecc7SMichael S. Tsirkin 
1063459a625SMichael S. Tsirkin struct PcGuestInfo {
1076dd2a5c9SPaolo Bonzini     bool isapc_ram_fw;
108f30ee8a9SEduardo Habkost     hwaddr ram_size, ram_size_below_4g;
109b20c9bd5SMichael S. Tsirkin     unsigned apic_id_limit;
110b20c9bd5SMichael S. Tsirkin     bool apic_xrupt_override;
111b20c9bd5SMichael S. Tsirkin     uint64_t numa_nodes;
112b20c9bd5SMichael S. Tsirkin     uint64_t *node_mem;
113b20c9bd5SMichael S. Tsirkin     uint64_t *node_cpu;
1143459a625SMichael S. Tsirkin     FWCfgState *fw_cfg;
11507fb6176SPaolo Bonzini     int legacy_acpi_table_size;
11672c194f7SMichael S. Tsirkin     bool has_acpi_build;
117de268e13SIgor Mammedov     bool has_reserved_memory;
118384fb32eSMichael S. Tsirkin     bool rsdp_in_ram;
1193459a625SMichael S. Tsirkin };
1203459a625SMichael S. Tsirkin 
12187ecb68bSpbrook /* parallel.c */
12287ecb68bSpbrook 
12307dc7880SMarkus Armbruster void parallel_hds_isa_init(ISABus *bus, int n);
124defdb20eSBlue Swirl 
12563858cd9SAvi Kivity bool parallel_mm_init(MemoryRegion *address_space,
126a8170e5eSAvi Kivity                       hwaddr base, int it_shift, qemu_irq irq,
127defdb20eSBlue Swirl                       CharDriverState *chr);
12887ecb68bSpbrook 
12987ecb68bSpbrook /* i8259.c */
13087ecb68bSpbrook 
1319aa78c42SJan Kiszka extern DeviceState *isa_pic;
13248a18b3cSHervé Poussineau qemu_irq *i8259_init(ISABus *bus, qemu_irq parent_irq);
13310b61882SJan Kiszka qemu_irq *kvm_i8259_init(ISABus *bus);
1349aa78c42SJan Kiszka int pic_read_irq(DeviceState *d);
1359aa78c42SJan Kiszka int pic_get_output(DeviceState *d);
1361ce6be24SMarkus Armbruster void hmp_info_pic(Monitor *mon, const QDict *qdict);
1371ce6be24SMarkus Armbruster void hmp_info_irq(Monitor *mon, const QDict *qdict);
13887ecb68bSpbrook 
139d665d696SPavel Butsykin /* ioapic.c */
140d665d696SPavel Butsykin 
141d665d696SPavel Butsykin void kvm_ioapic_dump_state(Monitor *mon, const QDict *qdict);
1426bde8fd6SPavel Butsykin void ioapic_dump_state(Monitor *mon, const QDict *qdict);
143d665d696SPavel Butsykin 
144b881fbe9SJan Kiszka /* Global System Interrupts */
14596051119SBlue Swirl 
146b881fbe9SJan Kiszka #define GSI_NUM_PINS IOAPIC_NUM_PINS
147845773abSIsaku Yamahata 
148b881fbe9SJan Kiszka typedef struct GSIState {
14943a0db35SJan Kiszka     qemu_irq i8259_irq[ISA_NUM_IRQS];
150b881fbe9SJan Kiszka     qemu_irq ioapic_irq[IOAPIC_NUM_PINS];
151b881fbe9SJan Kiszka } GSIState;
152b881fbe9SJan Kiszka 
153b881fbe9SJan Kiszka void gsi_handler(void *opaque, int n, int level);
154845773abSIsaku Yamahata 
15587ecb68bSpbrook /* vmport.c */
156d67f679dSJan Kiszka typedef uint32_t (VMPortReadFunc)(void *opaque, uint32_t address);
157d67f679dSJan Kiszka 
15848a18b3cSHervé Poussineau static inline void vmport_init(ISABus *bus)
1596872ef61SBlue Swirl {
16048a18b3cSHervé Poussineau     isa_create_simple(bus, "vmport");
1616872ef61SBlue Swirl }
162d67f679dSJan Kiszka 
163d67f679dSJan Kiszka void vmport_register(unsigned char command, VMPortReadFunc *func, void *opaque);
16486d86414SBlue Swirl void vmmouse_get_data(uint32_t *data);
16586d86414SBlue Swirl void vmmouse_set_data(const uint32_t *data);
16687ecb68bSpbrook 
16787ecb68bSpbrook /* pckbd.c */
16887ecb68bSpbrook 
16987ecb68bSpbrook void i8042_init(qemu_irq kbd_irq, qemu_irq mouse_irq, uint32_t io_base);
17087ecb68bSpbrook void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq,
171dbff76acSRichard Henderson                    MemoryRegion *region, ram_addr_t size,
172a8170e5eSAvi Kivity                    hwaddr mask);
173956a3e6bSBlue Swirl void i8042_isa_mouse_fake_event(void *opaque);
174956a3e6bSBlue Swirl void i8042_setup_a20_line(ISADevice *dev, qemu_irq *a20_out);
17587ecb68bSpbrook 
17687ecb68bSpbrook /* pc.c */
17787ecb68bSpbrook extern int fd_bootchk;
17887ecb68bSpbrook 
179355023f2SPaolo Bonzini bool pc_machine_is_smm_enabled(PCMachineState *pcms);
1808e78eb28SIsaku Yamahata void pc_register_ferr_irq(qemu_irq irq);
181845773abSIsaku Yamahata void pc_acpi_smi_interrupt(void *opaque, int irq, int level);
182845773abSIsaku Yamahata 
1834884b7bfSZhu Guihua void pc_cpus_init(PCMachineState *pcms);
184c649983bSIgor Mammedov void pc_hot_add_cpu(const int64_t id, Error **errp);
185f7e4dd6cSGerd Hoffmann void pc_acpi_init(const char *default_dsdt);
1863459a625SMichael S. Tsirkin 
187b9cfc918SEduardo Habkost PcGuestInfo *pc_guest_info_init(PCMachineState *pcms);
1883459a625SMichael S. Tsirkin 
189927766c7SMichael S. Tsirkin void pc_set_legacy_acpi_data_size(void);
190927766c7SMichael S. Tsirkin 
19139848901SIgor Mammedov #define PCI_HOST_PROP_PCI_HOLE_START   "pci-hole-start"
19239848901SIgor Mammedov #define PCI_HOST_PROP_PCI_HOLE_END     "pci-hole-end"
19339848901SIgor Mammedov #define PCI_HOST_PROP_PCI_HOLE64_START "pci-hole64-start"
19439848901SIgor Mammedov #define PCI_HOST_PROP_PCI_HOLE64_END   "pci-hole64-end"
19539848901SIgor Mammedov #define PCI_HOST_PROP_PCI_HOLE64_SIZE  "pci-hole64-size"
1961466cef3SMichael S. Tsirkin #define DEFAULT_PCI_HOLE64_SIZE (~0x0ULL)
1971466cef3SMichael S. Tsirkin 
19839848901SIgor Mammedov 
19983d08f26SMichael S. Tsirkin void pc_pci_as_mapping_init(Object *owner, MemoryRegion *system_memory,
20083d08f26SMichael S. Tsirkin                             MemoryRegion *pci_address_space);
20139848901SIgor Mammedov 
202df1f79fdSEduardo Habkost FWCfgState *xen_load_linux(PCMachineState *pcms,
203b33a5bbfSChunyan Liu                            PcGuestInfo *guest_info);
20462b160c0SEduardo Habkost FWCfgState *pc_memory_init(PCMachineState *pcms,
2059521d42bSPaolo Bonzini                            MemoryRegion *system_memory,
2064463aee6SJan Kiszka                            MemoryRegion *rom_memory,
2073459a625SMichael S. Tsirkin                            MemoryRegion **ram_memory,
2083459a625SMichael S. Tsirkin                            PcGuestInfo *guest_info);
2090b0cc076SShannon Zhao qemu_irq pc_allocate_cpu_irq(void);
21048a18b3cSHervé Poussineau DeviceState *pc_vga_init(ISABus *isa_bus, PCIBus *pci_bus);
21148a18b3cSHervé Poussineau void pc_basic_device_init(ISABus *isa_bus, qemu_irq *gsi,
2121611977cSAnthony PERARD                           ISADevice **rtc_state,
213fd53c87cSLaszlo Ersek                           bool create_fdctrl,
2147a10ef51SLiu Ping Fan                           bool no_vmport,
2157a10ef51SLiu Ping Fan                           uint32 hpet_irqs);
21648a18b3cSHervé Poussineau void pc_init_ne2k_isa(ISABus *bus, NICInfo *nd);
21723d30407SEduardo Habkost void pc_cmos_init(PCMachineState *pcms,
218220a8846SLaszlo Ersek                   BusState *ide0, BusState *ide1,
21963ffb564SBlue Swirl                   ISADevice *s);
2209011a1a7SIsaku Yamahata void pc_nic_init(ISABus *isa_bus, PCIBus *pci_bus);
221845773abSIsaku Yamahata void pc_pci_device_init(PCIBus *pci_bus);
2228e78eb28SIsaku Yamahata 
223f885f1eaSIsaku Yamahata typedef void (*cpu_set_smm_t)(int smm, void *arg);
224f885f1eaSIsaku Yamahata 
225a39e3564SJason Baron void ioapic_init_gsi(GSIState *gsi_state, const char *parent_name);
226a39e3564SJason Baron 
2279d5e77a2SIsaku Yamahata /* acpi_piix.c */
22853b67b30SBlue Swirl 
229a5c82852SAndreas Färber I2CBus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
230da98c8ebSGerd Hoffmann                       qemu_irq sci_irq, qemu_irq smi_irq,
23161e66c62SPaolo Bonzini                       int smm_enabled, DeviceState **piix4_pm);
23287ecb68bSpbrook void piix4_smbus_register_device(SMBusDevice *dev, uint8_t addr);
23387ecb68bSpbrook 
23416b29ae1Saliguori /* hpet.c */
23516b29ae1Saliguori extern int no_hpet;
23616b29ae1Saliguori 
23787ecb68bSpbrook /* piix_pci.c */
2380a3bacf3SJuan Quintela struct PCII440FXState;
2390a3bacf3SJuan Quintela typedef struct PCII440FXState PCII440FXState;
2400a3bacf3SJuan Quintela 
2417bb836e4SMichael S. Tsirkin #define TYPE_I440FX_PCI_HOST_BRIDGE "i440FX-pcihost"
2427bb836e4SMichael S. Tsirkin #define TYPE_I440FX_PCI_DEVICE "i440FX"
2437bb836e4SMichael S. Tsirkin 
244595a4f07STiejun Chen #define TYPE_IGD_PASSTHROUGH_I440FX_PCI_DEVICE "igd-passthrough-i440FX"
245595a4f07STiejun Chen 
2467bb836e4SMichael S. Tsirkin PCIBus *i440fx_init(const char *host_type, const char *pci_type,
2477bb836e4SMichael S. Tsirkin                     PCII440FXState **pi440fx_state, int *piix_devfn,
24860573079SHervé Poussineau                     ISABus **isa_bus, qemu_irq *pic,
249aee97b84SAvi Kivity                     MemoryRegion *address_space_mem,
250aee97b84SAvi Kivity                     MemoryRegion *address_space_io,
251ae0a5466SAvi Kivity                     ram_addr_t ram_size,
252ddaaefb4SGerd Hoffmann                     ram_addr_t below_4g_mem_size,
25339848901SIgor Mammedov                     ram_addr_t above_4g_mem_size,
254ae0a5466SAvi Kivity                     MemoryRegion *pci_memory,
255ae0a5466SAvi Kivity                     MemoryRegion *ram_memory);
25687ecb68bSpbrook 
257277e9340SMichael S. Tsirkin PCIBus *find_i440fx(void);
258823e675aSJuan Quintela /* piix4.c */
259b1d8e52eSblueswir1 extern PCIDevice *piix4_dev;
260142e9787SHervé Poussineau int piix4_init(PCIBus *bus, ISABus **isa_bus, int devfn);
26187ecb68bSpbrook 
26287ecb68bSpbrook /* vga.c */
263cb5a7aa8Smalc enum vga_retrace_method {
264cb5a7aa8Smalc     VGA_RETRACE_DUMB,
265cb5a7aa8Smalc     VGA_RETRACE_PRECISE
266cb5a7aa8Smalc };
267cb5a7aa8Smalc 
268cb5a7aa8Smalc extern enum vga_retrace_method vga_retrace_method;
26987ecb68bSpbrook 
270a8170e5eSAvi Kivity int isa_vga_mm_init(hwaddr vram_base,
271a8170e5eSAvi Kivity                     hwaddr ctrl_base, int it_shift,
272be20f9e9SAvi Kivity                     MemoryRegion *address_space);
27387ecb68bSpbrook 
27487ecb68bSpbrook /* ne2000.c */
27548a18b3cSHervé Poussineau static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd)
27660a14ad3SBlue Swirl {
2774a17cc4fSAndreas Färber     DeviceState *dev;
2784a17cc4fSAndreas Färber     ISADevice *isadev;
27987ecb68bSpbrook 
28060a14ad3SBlue Swirl     qemu_check_nic_model(nd, "ne2k_isa");
28160a14ad3SBlue Swirl 
2824a17cc4fSAndreas Färber     isadev = isa_try_create(bus, "ne2k_isa");
2834a17cc4fSAndreas Färber     if (!isadev) {
284cd1b8a8bSBlue Swirl         return false;
285cd1b8a8bSBlue Swirl     }
2864a17cc4fSAndreas Färber     dev = DEVICE(isadev);
2874a17cc4fSAndreas Färber     qdev_prop_set_uint32(dev, "iobase", base);
2884a17cc4fSAndreas Färber     qdev_prop_set_uint32(dev, "irq",    irq);
2894a17cc4fSAndreas Färber     qdev_set_nic_properties(dev, nd);
2904a17cc4fSAndreas Färber     qdev_init_nofail(dev);
291cd1b8a8bSBlue Swirl     return true;
29260a14ad3SBlue Swirl }
29387ecb68bSpbrook 
294cbc5b5f3SJordan Justen /* pc_sysfw.c */
2956dd2a5c9SPaolo Bonzini void pc_system_firmware_init(MemoryRegion *rom_memory,
2966dd2a5c9SPaolo Bonzini                              bool isapc_ram_fw);
297cbc5b5f3SJordan Justen 
2983ab135f3SHu Tao /* pvpanic.c */
299309cd62dSMichael S. Tsirkin uint16_t pvpanic_port(void);
3003ab135f3SHu Tao 
3014c5b10b7SJes Sorensen /* e820 types */
3024c5b10b7SJes Sorensen #define E820_RAM        1
3034c5b10b7SJes Sorensen #define E820_RESERVED   2
3044c5b10b7SJes Sorensen #define E820_ACPI       3
3054c5b10b7SJes Sorensen #define E820_NVS        4
3064c5b10b7SJes Sorensen #define E820_UNUSABLE   5
3074c5b10b7SJes Sorensen 
3084c5b10b7SJes Sorensen int e820_add_entry(uint64_t, uint64_t, uint32_t);
3097bf8ef19SGabriel L. Somlo int e820_get_num_entries(void);
3107bf8ef19SGabriel L. Somlo bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
3114c5b10b7SJes Sorensen 
31287e896abSEduardo Habkost #define PC_COMPAT_2_4 \
313becb6667SPaolo Bonzini         HW_COMPAT_2_4 \
314becb6667SPaolo Bonzini         {\
315becb6667SPaolo Bonzini             .driver   = "Haswell-" TYPE_X86_CPU,\
316becb6667SPaolo Bonzini             .property = "abm",\
317becb6667SPaolo Bonzini             .value    = "off",\
318becb6667SPaolo Bonzini         },\
319becb6667SPaolo Bonzini         {\
320becb6667SPaolo Bonzini             .driver   = "Haswell-noTSX-" TYPE_X86_CPU,\
321becb6667SPaolo Bonzini             .property = "abm",\
322becb6667SPaolo Bonzini             .value    = "off",\
323becb6667SPaolo Bonzini         },\
324becb6667SPaolo Bonzini         {\
325becb6667SPaolo Bonzini             .driver   = "Broadwell-" TYPE_X86_CPU,\
326becb6667SPaolo Bonzini             .property = "abm",\
327becb6667SPaolo Bonzini             .value    = "off",\
328becb6667SPaolo Bonzini         },\
329becb6667SPaolo Bonzini         {\
330becb6667SPaolo Bonzini             .driver   = "Broadwell-noTSX-" TYPE_X86_CPU,\
331becb6667SPaolo Bonzini             .property = "abm",\
332becb6667SPaolo Bonzini             .value    = "off",\
333e265e3e4SEduardo Habkost         },\
334e265e3e4SEduardo Habkost         {\
335e265e3e4SEduardo Habkost             .driver   = "host" "-" TYPE_X86_CPU,\
336e265e3e4SEduardo Habkost             .property = "host-cache-info",\
337e265e3e4SEduardo Habkost             .value    = "on",\
3383e684822SEduardo Habkost         },\
3393e684822SEduardo Habkost         {\
3403e684822SEduardo Habkost             .driver   = TYPE_X86_CPU,\
3413e684822SEduardo Habkost             .property = "check",\
3423e684822SEduardo Habkost             .value    = "off",\
3430909ad24SEduardo Habkost         },\
3440909ad24SEduardo Habkost         {\
3450909ad24SEduardo Habkost             .driver   = "qemu64" "-" TYPE_X86_CPU,\
3460909ad24SEduardo Habkost             .property = "sse4a",\
3470909ad24SEduardo Habkost             .value    = "on",\
34871195672SEduardo Habkost         },\
34971195672SEduardo Habkost         {\
35071195672SEduardo Habkost             .driver   = "qemu64" "-" TYPE_X86_CPU,\
35171195672SEduardo Habkost             .property = "abm",\
35271195672SEduardo Habkost             .value    = "on",\
3536aa91e4aSEduardo Habkost         },\
3546aa91e4aSEduardo Habkost         {\
3556aa91e4aSEduardo Habkost             .driver   = "qemu64" "-" TYPE_X86_CPU,\
3566aa91e4aSEduardo Habkost             .property = "popcnt",\
3576aa91e4aSEduardo Habkost             .value    = "on",\
3586aa91e4aSEduardo Habkost         },\
3596aa91e4aSEduardo Habkost         {\
3606aa91e4aSEduardo Habkost             .driver   = "qemu32" "-" TYPE_X86_CPU,\
3616aa91e4aSEduardo Habkost             .property = "popcnt",\
3626aa91e4aSEduardo Habkost             .value    = "on",\
36333b5e8c0SEduardo Habkost         },{\
36433b5e8c0SEduardo Habkost             .driver   = "Opteron_G2" "-" TYPE_X86_CPU,\
36533b5e8c0SEduardo Habkost             .property = "rdtscp",\
36633b5e8c0SEduardo Habkost             .value    = "on",\
36733b5e8c0SEduardo Habkost         },{\
36833b5e8c0SEduardo Habkost             .driver   = "Opteron_G3" "-" TYPE_X86_CPU,\
36933b5e8c0SEduardo Habkost             .property = "rdtscp",\
37033b5e8c0SEduardo Habkost             .value    = "on",\
37133b5e8c0SEduardo Habkost         },{\
37233b5e8c0SEduardo Habkost             .driver   = "Opteron_G4" "-" TYPE_X86_CPU,\
37333b5e8c0SEduardo Habkost             .property = "rdtscp",\
37433b5e8c0SEduardo Habkost             .value    = "on",\
37533b5e8c0SEduardo Habkost         },{\
37633b5e8c0SEduardo Habkost             .driver   = "Opteron_G5" "-" TYPE_X86_CPU,\
37733b5e8c0SEduardo Habkost             .property = "rdtscp",\
37833b5e8c0SEduardo Habkost             .value    = "on",\
379becb6667SPaolo Bonzini         },
38087e896abSEduardo Habkost 
38133b5e8c0SEduardo Habkost 
38242134ac9SEduardo Habkost #define PC_COMPAT_2_3 \
38387e896abSEduardo Habkost         PC_COMPAT_2_4 \
38428b8e4d0SJan Kiszka         HW_COMPAT_2_3 \
38528b8e4d0SJan Kiszka         {\
38628b8e4d0SJan Kiszka             .driver   = TYPE_X86_CPU,\
38728b8e4d0SJan Kiszka             .property = "arat",\
38828b8e4d0SJan Kiszka             .value    = "off",\
3893046bb5dSRadim Krčmář         },{\
3903046bb5dSRadim Krčmář             .driver   = "qemu64" "-" TYPE_X86_CPU,\
3913046bb5dSRadim Krčmář             .property = "level",\
3923046bb5dSRadim Krčmář             .value    = stringify(4),\
3933046bb5dSRadim Krčmář         },{\
3943046bb5dSRadim Krčmář             .driver   = "kvm64" "-" TYPE_X86_CPU,\
3953046bb5dSRadim Krčmář             .property = "level",\
3963046bb5dSRadim Krčmář             .value    = stringify(5),\
3973046bb5dSRadim Krčmář         },{\
3983046bb5dSRadim Krčmář             .driver   = "pentium3" "-" TYPE_X86_CPU,\
3993046bb5dSRadim Krčmář             .property = "level",\
4003046bb5dSRadim Krčmář             .value    = stringify(2),\
4013046bb5dSRadim Krčmář         },{\
4023046bb5dSRadim Krčmář             .driver   = "n270" "-" TYPE_X86_CPU,\
4033046bb5dSRadim Krčmář             .property = "level",\
4043046bb5dSRadim Krčmář             .value    = stringify(5),\
4053046bb5dSRadim Krčmář         },{\
4063046bb5dSRadim Krčmář             .driver   = "Conroe" "-" TYPE_X86_CPU,\
4073046bb5dSRadim Krčmář             .property = "level",\
4083046bb5dSRadim Krčmář             .value    = stringify(4),\
4093046bb5dSRadim Krčmář         },{\
4103046bb5dSRadim Krčmář             .driver   = "Penryn" "-" TYPE_X86_CPU,\
4113046bb5dSRadim Krčmář             .property = "level",\
4123046bb5dSRadim Krčmář             .value    = stringify(4),\
4133046bb5dSRadim Krčmář         },{\
4143046bb5dSRadim Krčmář             .driver   = "Nehalem" "-" TYPE_X86_CPU,\
4153046bb5dSRadim Krčmář             .property = "level",\
4163046bb5dSRadim Krčmář             .value    = stringify(4),\
4173046bb5dSRadim Krčmář         },{\
4183046bb5dSRadim Krčmář             .driver   = "n270" "-" TYPE_X86_CPU,\
4193046bb5dSRadim Krčmář             .property = "xlevel",\
4203046bb5dSRadim Krčmář             .value    = stringify(0x8000000a),\
4213046bb5dSRadim Krčmář         },{\
4223046bb5dSRadim Krčmář             .driver   = "Penryn" "-" TYPE_X86_CPU,\
4233046bb5dSRadim Krčmář             .property = "xlevel",\
4243046bb5dSRadim Krčmář             .value    = stringify(0x8000000a),\
4253046bb5dSRadim Krčmář         },{\
4263046bb5dSRadim Krčmář             .driver   = "Conroe" "-" TYPE_X86_CPU,\
4273046bb5dSRadim Krčmář             .property = "xlevel",\
4283046bb5dSRadim Krčmář             .value    = stringify(0x8000000a),\
4293046bb5dSRadim Krčmář         },{\
4303046bb5dSRadim Krčmář             .driver   = "Nehalem" "-" TYPE_X86_CPU,\
4313046bb5dSRadim Krčmář             .property = "xlevel",\
4323046bb5dSRadim Krčmář             .value    = stringify(0x8000000a),\
4333046bb5dSRadim Krčmář         },{\
4343046bb5dSRadim Krčmář             .driver   = "Westmere" "-" TYPE_X86_CPU,\
4353046bb5dSRadim Krčmář             .property = "xlevel",\
4363046bb5dSRadim Krčmář             .value    = stringify(0x8000000a),\
4373046bb5dSRadim Krčmář         },{\
4383046bb5dSRadim Krčmář             .driver   = "SandyBridge" "-" TYPE_X86_CPU,\
4393046bb5dSRadim Krčmář             .property = "xlevel",\
4403046bb5dSRadim Krčmář             .value    = stringify(0x8000000a),\
4413046bb5dSRadim Krčmář         },{\
44227751aabSRadim Krčmář             .driver   = "IvyBridge" "-" TYPE_X86_CPU,\
44327751aabSRadim Krčmář             .property = "xlevel",\
44427751aabSRadim Krčmář             .value    = stringify(0x8000000a),\
44527751aabSRadim Krčmář         },{\
4463046bb5dSRadim Krčmář             .driver   = "Haswell" "-" TYPE_X86_CPU,\
4473046bb5dSRadim Krčmář             .property = "xlevel",\
4483046bb5dSRadim Krčmář             .value    = stringify(0x8000000a),\
4493046bb5dSRadim Krčmář         },{\
4503046bb5dSRadim Krčmář             .driver   = "Haswell-noTSX" "-" TYPE_X86_CPU,\
4513046bb5dSRadim Krčmář             .property = "xlevel",\
4523046bb5dSRadim Krčmář             .value    = stringify(0x8000000a),\
4533046bb5dSRadim Krčmář         },{\
4543046bb5dSRadim Krčmář             .driver   = "Broadwell" "-" TYPE_X86_CPU,\
4553046bb5dSRadim Krčmář             .property = "xlevel",\
4563046bb5dSRadim Krčmář             .value    = stringify(0x8000000a),\
4573046bb5dSRadim Krčmář         },{\
4583046bb5dSRadim Krčmář             .driver   = "Broadwell-noTSX" "-" TYPE_X86_CPU,\
4593046bb5dSRadim Krčmář             .property = "xlevel",\
4603046bb5dSRadim Krčmář             .value    = stringify(0x8000000a),\
46128b8e4d0SJan Kiszka         },
46242134ac9SEduardo Habkost 
46342134ac9SEduardo Habkost #define PC_COMPAT_2_2 \
46442134ac9SEduardo Habkost         PC_COMPAT_2_3 \
46527add381SEduardo Habkost         HW_COMPAT_2_2 \
46627add381SEduardo Habkost         {\
46727add381SEduardo Habkost             .driver = "kvm64" "-" TYPE_X86_CPU,\
46827add381SEduardo Habkost             .property = "vme",\
46927add381SEduardo Habkost             .value = "off",\
47027add381SEduardo Habkost         },\
47127add381SEduardo Habkost         {\
47227add381SEduardo Habkost             .driver = "kvm32" "-" TYPE_X86_CPU,\
47327add381SEduardo Habkost             .property = "vme",\
47427add381SEduardo Habkost             .value = "off",\
47527add381SEduardo Habkost         },\
47627add381SEduardo Habkost         {\
47727add381SEduardo Habkost             .driver = "Conroe" "-" TYPE_X86_CPU,\
47827add381SEduardo Habkost             .property = "vme",\
47927add381SEduardo Habkost             .value = "off",\
48027add381SEduardo Habkost         },\
48127add381SEduardo Habkost         {\
48227add381SEduardo Habkost             .driver = "Penryn" "-" TYPE_X86_CPU,\
48327add381SEduardo Habkost             .property = "vme",\
48427add381SEduardo Habkost             .value = "off",\
48527add381SEduardo Habkost         },\
48627add381SEduardo Habkost         {\
48727add381SEduardo Habkost             .driver = "Nehalem" "-" TYPE_X86_CPU,\
48827add381SEduardo Habkost             .property = "vme",\
48927add381SEduardo Habkost             .value = "off",\
49027add381SEduardo Habkost         },\
49127add381SEduardo Habkost         {\
49227add381SEduardo Habkost             .driver = "Westmere" "-" TYPE_X86_CPU,\
49327add381SEduardo Habkost             .property = "vme",\
49427add381SEduardo Habkost             .value = "off",\
49527add381SEduardo Habkost         },\
49627add381SEduardo Habkost         {\
49727add381SEduardo Habkost             .driver = "SandyBridge" "-" TYPE_X86_CPU,\
49827add381SEduardo Habkost             .property = "vme",\
49927add381SEduardo Habkost             .value = "off",\
50027add381SEduardo Habkost         },\
50127add381SEduardo Habkost         {\
50227add381SEduardo Habkost             .driver = "Haswell" "-" TYPE_X86_CPU,\
50327add381SEduardo Habkost             .property = "vme",\
50427add381SEduardo Habkost             .value = "off",\
50527add381SEduardo Habkost         },\
50627add381SEduardo Habkost         {\
50727add381SEduardo Habkost             .driver = "Broadwell" "-" TYPE_X86_CPU,\
50827add381SEduardo Habkost             .property = "vme",\
50927add381SEduardo Habkost             .value = "off",\
51027add381SEduardo Habkost         },\
51127add381SEduardo Habkost         {\
51227add381SEduardo Habkost             .driver = "Opteron_G1" "-" TYPE_X86_CPU,\
51327add381SEduardo Habkost             .property = "vme",\
51427add381SEduardo Habkost             .value = "off",\
51527add381SEduardo Habkost         },\
51627add381SEduardo Habkost         {\
51727add381SEduardo Habkost             .driver = "Opteron_G2" "-" TYPE_X86_CPU,\
51827add381SEduardo Habkost             .property = "vme",\
51927add381SEduardo Habkost             .value = "off",\
52027add381SEduardo Habkost         },\
52127add381SEduardo Habkost         {\
52227add381SEduardo Habkost             .driver = "Opteron_G3" "-" TYPE_X86_CPU,\
52327add381SEduardo Habkost             .property = "vme",\
52427add381SEduardo Habkost             .value = "off",\
52527add381SEduardo Habkost         },\
52627add381SEduardo Habkost         {\
52727add381SEduardo Habkost             .driver = "Opteron_G4" "-" TYPE_X86_CPU,\
52827add381SEduardo Habkost             .property = "vme",\
52927add381SEduardo Habkost             .value = "off",\
53027add381SEduardo Habkost         },\
53127add381SEduardo Habkost         {\
53227add381SEduardo Habkost             .driver = "Opteron_G5" "-" TYPE_X86_CPU,\
53327add381SEduardo Habkost             .property = "vme",\
53427add381SEduardo Habkost             .value = "off",\
53527add381SEduardo Habkost         },\
53627add381SEduardo Habkost         {\
53727add381SEduardo Habkost             .driver = "Haswell" "-" TYPE_X86_CPU,\
53827add381SEduardo Habkost             .property = "f16c",\
53927add381SEduardo Habkost             .value = "off",\
54027add381SEduardo Habkost         },\
54127add381SEduardo Habkost         {\
54227add381SEduardo Habkost             .driver = "Haswell" "-" TYPE_X86_CPU,\
54327add381SEduardo Habkost             .property = "rdrand",\
54427add381SEduardo Habkost             .value = "off",\
54527add381SEduardo Habkost         },\
54627add381SEduardo Habkost         {\
54727add381SEduardo Habkost             .driver = "Broadwell" "-" TYPE_X86_CPU,\
54827add381SEduardo Habkost             .property = "f16c",\
54927add381SEduardo Habkost             .value = "off",\
55027add381SEduardo Habkost         },\
55127add381SEduardo Habkost         {\
55227add381SEduardo Habkost             .driver = "Broadwell" "-" TYPE_X86_CPU,\
55327add381SEduardo Habkost             .property = "rdrand",\
55427add381SEduardo Habkost             .value = "off",\
55527add381SEduardo Habkost         },
55642134ac9SEduardo Habkost 
55742134ac9SEduardo Habkost #define PC_COMPAT_2_1 \
55842134ac9SEduardo Habkost         PC_COMPAT_2_2 \
55927add381SEduardo Habkost         HW_COMPAT_2_1 \
56027add381SEduardo Habkost         {\
56127add381SEduardo Habkost             .driver = "coreduo" "-" TYPE_X86_CPU,\
56227add381SEduardo Habkost             .property = "vmx",\
56327add381SEduardo Habkost             .value = "on",\
56427add381SEduardo Habkost         },\
56527add381SEduardo Habkost         {\
56627add381SEduardo Habkost             .driver = "core2duo" "-" TYPE_X86_CPU,\
56727add381SEduardo Habkost             .property = "vmx",\
56827add381SEduardo Habkost             .value = "on",\
56927add381SEduardo Habkost         },
57042134ac9SEduardo Habkost 
5719df11c9fSGabriel L. Somlo #define PC_COMPAT_2_0 \
57242134ac9SEduardo Habkost         PC_COMPAT_2_1 \
5739df11c9fSGabriel L. Somlo         {\
5743eff1f46SPaolo Bonzini             .driver   = "virtio-scsi-pci",\
5753eff1f46SPaolo Bonzini             .property = "any_layout",\
5763eff1f46SPaolo Bonzini             .value    = "off",\
5773eff1f46SPaolo Bonzini         },{\
57834774320SIgor Mammedov             .driver   = "PIIX4_PM",\
57934774320SIgor Mammedov             .property = "memory-hotplug-support",\
58034774320SIgor Mammedov             .value    = "off",\
58134774320SIgor Mammedov         },\
58234774320SIgor Mammedov         {\
583aa93200bSGabriel L. Somlo             .driver   = "apic",\
584aa93200bSGabriel L. Somlo             .property = "version",\
585aa93200bSGabriel L. Somlo             .value    = stringify(0x11),\
58634774320SIgor Mammedov         },\
58734774320SIgor Mammedov         {\
5887bafd888SGerd Hoffmann             .driver   = "nec-usb-xhci",\
5897bafd888SGerd Hoffmann             .property = "superspeed-ports-first",\
5907bafd888SGerd Hoffmann             .value    = "off",\
59113cc2c3eSBALATON Zoltan         },\
59213cc2c3eSBALATON Zoltan         {\
593e6043e92SDr. David Alan Gilbert             .driver   = "nec-usb-xhci",\
594e6043e92SDr. David Alan Gilbert             .property = "force-pcie-endcap",\
595e6043e92SDr. David Alan Gilbert             .value    = "on",\
596e6043e92SDr. David Alan Gilbert         },\
597e6043e92SDr. David Alan Gilbert         {\
59813cc2c3eSBALATON Zoltan             .driver   = "pci-serial",\
59913cc2c3eSBALATON Zoltan             .property = "prog_if",\
60013cc2c3eSBALATON Zoltan             .value    = stringify(0),\
60113cc2c3eSBALATON Zoltan         },\
60213cc2c3eSBALATON Zoltan         {\
60313cc2c3eSBALATON Zoltan             .driver   = "pci-serial-2x",\
604fa118d1fSEduardo Habkost             .property = "prog_if",\
60513cc2c3eSBALATON Zoltan             .value    = stringify(0),\
60613cc2c3eSBALATON Zoltan         },\
60713cc2c3eSBALATON Zoltan         {\
60813cc2c3eSBALATON Zoltan             .driver   = "pci-serial-4x",\
60913cc2c3eSBALATON Zoltan             .property = "prog_if",\
61013cc2c3eSBALATON Zoltan             .value    = stringify(0),\
611f57fcf70SJason Wang         },\
612f57fcf70SJason Wang         {\
613f57fcf70SJason Wang             .driver   = "virtio-net-pci",\
614f57fcf70SJason Wang             .property = "guest_announce",\
615f57fcf70SJason Wang             .value    = "off",\
616b8f5cfd6SEduardo Habkost         },\
617b8f5cfd6SEduardo Habkost         {\
618b8f5cfd6SEduardo Habkost             .driver   = "ICH9-LPC",\
619b8f5cfd6SEduardo Habkost             .property = "memory-hotplug-support",\
620b8f5cfd6SEduardo Habkost             .value    = "off",\
621b8f5cfd6SEduardo Habkost         },{\
622b8f5cfd6SEduardo Habkost             .driver   = "xio3130-downstream",\
623b8f5cfd6SEduardo Habkost             .property = COMPAT_PROP_PCP,\
624b8f5cfd6SEduardo Habkost             .value    = "off",\
625b8f5cfd6SEduardo Habkost         },{\
626b8f5cfd6SEduardo Habkost             .driver   = "ioh3420",\
627b8f5cfd6SEduardo Habkost             .property = COMPAT_PROP_PCP,\
628b8f5cfd6SEduardo Habkost             .value    = "off",\
629a7cde24dSEduardo Habkost         },
6309df11c9fSGabriel L. Somlo 
6315319dc7bSGerd Hoffmann #define PC_COMPAT_1_7 \
632a7cde24dSEduardo Habkost         PC_COMPAT_2_0 \
6335319dc7bSGerd Hoffmann         {\
6345319dc7bSGerd Hoffmann             .driver   = TYPE_USB_DEVICE,\
6355319dc7bSGerd Hoffmann             .property = "msos-desc",\
6365319dc7bSGerd Hoffmann             .value    = "no",\
6379e047b98SMichael S. Tsirkin         },\
6389e047b98SMichael S. Tsirkin         {\
6399e047b98SMichael S. Tsirkin             .driver   = "PIIX4_PM",\
6409e047b98SMichael S. Tsirkin             .property = "acpi-pci-hotplug-with-bridge-support",\
6419e047b98SMichael S. Tsirkin             .value    = "off",\
642b8f5cfd6SEduardo Habkost         },\
643b8f5cfd6SEduardo Habkost         {\
644b8f5cfd6SEduardo Habkost             .driver   = "hpet",\
645b8f5cfd6SEduardo Habkost             .property = HPET_INTCAP,\
646b8f5cfd6SEduardo Habkost             .value    = stringify(4),\
647a7cde24dSEduardo Habkost         },
6485319dc7bSGerd Hoffmann 
649e9845f09SVincenzo Maffione #define PC_COMPAT_1_6 \
650a7cde24dSEduardo Habkost         PC_COMPAT_1_7 \
651e9845f09SVincenzo Maffione         {\
652e9845f09SVincenzo Maffione             .driver   = "e1000",\
653e9845f09SVincenzo Maffione             .property = "mitigation",\
654e9845f09SVincenzo Maffione             .value    = "off",\
655f8e6a11aSEduardo Habkost         },{\
656f8e6a11aSEduardo Habkost             .driver   = "qemu64-" TYPE_X86_CPU,\
657f8e6a11aSEduardo Habkost             .property = "model",\
658f8e6a11aSEduardo Habkost             .value    = stringify(2),\
659f8e6a11aSEduardo Habkost         },{\
660f8e6a11aSEduardo Habkost             .driver   = "qemu32-" TYPE_X86_CPU,\
661f8e6a11aSEduardo Habkost             .property = "model",\
662f8e6a11aSEduardo Habkost             .value    = stringify(3),\
66304c7d8b8SCole Robinson         },{\
66404c7d8b8SCole Robinson             .driver   = "i440FX-pcihost",\
66504c7d8b8SCole Robinson             .property = "short_root_bus",\
66604c7d8b8SCole Robinson             .value    = stringify(1),\
66704c7d8b8SCole Robinson         },{\
66804c7d8b8SCole Robinson             .driver   = "q35-pcihost",\
66904c7d8b8SCole Robinson             .property = "short_root_bus",\
67004c7d8b8SCole Robinson             .value    = stringify(1),\
671a7cde24dSEduardo Habkost         },
672e9845f09SVincenzo Maffione 
673ffce9ebbSEduardo Habkost #define PC_COMPAT_1_5 \
674a7cde24dSEduardo Habkost         PC_COMPAT_1_6 \
675ffce9ebbSEduardo Habkost         {\
676ffce9ebbSEduardo Habkost             .driver   = "Conroe-" TYPE_X86_CPU,\
677ffce9ebbSEduardo Habkost             .property = "model",\
678ffce9ebbSEduardo Habkost             .value    = stringify(2),\
679ffce9ebbSEduardo Habkost         },{\
6806b11322eSEduardo Habkost             .driver   = "Conroe-" TYPE_X86_CPU,\
6816b11322eSEduardo Habkost             .property = "level",\
6826b11322eSEduardo Habkost             .value    = stringify(2),\
6836b11322eSEduardo Habkost         },{\
684ffce9ebbSEduardo Habkost             .driver   = "Penryn-" TYPE_X86_CPU,\
685ffce9ebbSEduardo Habkost             .property = "model",\
686ffce9ebbSEduardo Habkost             .value    = stringify(2),\
687ffce9ebbSEduardo Habkost         },{\
6886b11322eSEduardo Habkost             .driver   = "Penryn-" TYPE_X86_CPU,\
6896b11322eSEduardo Habkost             .property = "level",\
6906b11322eSEduardo Habkost             .value    = stringify(2),\
6916b11322eSEduardo Habkost         },{\
692ffce9ebbSEduardo Habkost             .driver   = "Nehalem-" TYPE_X86_CPU,\
693ffce9ebbSEduardo Habkost             .property = "model",\
694ffce9ebbSEduardo Habkost             .value    = stringify(2),\
6956b11322eSEduardo Habkost         },{\
6966b11322eSEduardo Habkost             .driver   = "Nehalem-" TYPE_X86_CPU,\
6976b11322eSEduardo Habkost             .property = "level",\
6986b11322eSEduardo Habkost             .value    = stringify(2),\
699488f069bSMichael S. Tsirkin         },{\
700488f069bSMichael S. Tsirkin             .driver   = "virtio-net-pci",\
701488f069bSMichael S. Tsirkin             .property = "any_layout",\
702488f069bSMichael S. Tsirkin             .value    = "off",\
7039337e3b6SEduardo Habkost         },{\
7049337e3b6SEduardo Habkost             .driver = TYPE_X86_CPU,\
7059337e3b6SEduardo Habkost             .property = "pmu",\
7069337e3b6SEduardo Habkost             .value = "on",\
70704c7d8b8SCole Robinson         },{\
70804c7d8b8SCole Robinson             .driver   = "i440FX-pcihost",\
70904c7d8b8SCole Robinson             .property = "short_root_bus",\
71004c7d8b8SCole Robinson             .value    = stringify(0),\
71104c7d8b8SCole Robinson         },{\
71204c7d8b8SCole Robinson             .driver   = "q35-pcihost",\
71304c7d8b8SCole Robinson             .property = "short_root_bus",\
71404c7d8b8SCole Robinson             .value    = stringify(0),\
715a7cde24dSEduardo Habkost         },
716ffce9ebbSEduardo Habkost 
717bf3caa3dSPaolo Bonzini #define PC_COMPAT_1_4 \
718a7cde24dSEduardo Habkost         PC_COMPAT_1_5 \
719bf3caa3dSPaolo Bonzini         {\
720bf3caa3dSPaolo Bonzini             .driver   = "scsi-hd",\
721bf3caa3dSPaolo Bonzini             .property = "discard_granularity",\
722bf3caa3dSPaolo Bonzini             .value    = stringify(0),\
723bf3caa3dSPaolo Bonzini         },{\
724bf3caa3dSPaolo Bonzini             .driver   = "scsi-cd",\
725bf3caa3dSPaolo Bonzini             .property = "discard_granularity",\
726bf3caa3dSPaolo Bonzini             .value    = stringify(0),\
727bf3caa3dSPaolo Bonzini         },{\
728bf3caa3dSPaolo Bonzini             .driver   = "scsi-disk",\
729bf3caa3dSPaolo Bonzini             .property = "discard_granularity",\
730bf3caa3dSPaolo Bonzini             .value    = stringify(0),\
731bf3caa3dSPaolo Bonzini         },{\
732bf3caa3dSPaolo Bonzini             .driver   = "ide-hd",\
733bf3caa3dSPaolo Bonzini             .property = "discard_granularity",\
734bf3caa3dSPaolo Bonzini             .value    = stringify(0),\
735bf3caa3dSPaolo Bonzini         },{\
736bf3caa3dSPaolo Bonzini             .driver   = "ide-cd",\
737bf3caa3dSPaolo Bonzini             .property = "discard_granularity",\
738bf3caa3dSPaolo Bonzini             .value    = stringify(0),\
739bf3caa3dSPaolo Bonzini         },{\
740bf3caa3dSPaolo Bonzini             .driver   = "ide-drive",\
741bf3caa3dSPaolo Bonzini             .property = "discard_granularity",\
742bf3caa3dSPaolo Bonzini             .value    = stringify(0),\
743bf3caa3dSPaolo Bonzini         },{\
744bf3caa3dSPaolo Bonzini             .driver   = "virtio-blk-pci",\
745bf3caa3dSPaolo Bonzini             .property = "discard_granularity",\
746bf3caa3dSPaolo Bonzini             .value    = stringify(0),\
747554f1997SGal Hammer         },{\
748554f1997SGal Hammer             .driver   = "virtio-serial-pci",\
749554f1997SGal Hammer             .property = "vectors",\
750554f1997SGal Hammer             /* DEV_NVECTORS_UNSPECIFIED as a uint32_t string */\
751554f1997SGal Hammer             .value    = stringify(0xFFFFFFFF),\
752c45e5b5bSGerd Hoffmann         },{ \
753644c9858SDmitry Fleytman             .driver   = "virtio-net-pci", \
754644c9858SDmitry Fleytman             .property = "ctrl_guest_offloads", \
755644c9858SDmitry Fleytman             .value    = "off", \
756644c9858SDmitry Fleytman         },{\
757c45e5b5bSGerd Hoffmann             .driver   = "e1000",\
758c45e5b5bSGerd Hoffmann             .property = "romfile",\
759c45e5b5bSGerd Hoffmann             .value    = "pxe-e1000.rom",\
760c45e5b5bSGerd Hoffmann         },{\
761c45e5b5bSGerd Hoffmann             .driver   = "ne2k_pci",\
762c45e5b5bSGerd Hoffmann             .property = "romfile",\
763c45e5b5bSGerd Hoffmann             .value    = "pxe-ne2k_pci.rom",\
764c45e5b5bSGerd Hoffmann         },{\
765c45e5b5bSGerd Hoffmann             .driver   = "pcnet",\
766c45e5b5bSGerd Hoffmann             .property = "romfile",\
767c45e5b5bSGerd Hoffmann             .value    = "pxe-pcnet.rom",\
768c45e5b5bSGerd Hoffmann         },{\
769c45e5b5bSGerd Hoffmann             .driver   = "rtl8139",\
770c45e5b5bSGerd Hoffmann             .property = "romfile",\
771c45e5b5bSGerd Hoffmann             .value    = "pxe-rtl8139.rom",\
772c45e5b5bSGerd Hoffmann         },{\
773c45e5b5bSGerd Hoffmann             .driver   = "virtio-net-pci",\
774c45e5b5bSGerd Hoffmann             .property = "romfile",\
775c45e5b5bSGerd Hoffmann             .value    = "pxe-virtio.rom",\
7769953f882SMarkus Armbruster         },{\
777b2a856d9SAndreas Färber             .driver   = "486-" TYPE_X86_CPU,\
778b2a856d9SAndreas Färber             .property = "model",\
779b2a856d9SAndreas Färber             .value    = stringify(0),\
78027add381SEduardo Habkost         },\
78127add381SEduardo Habkost         {\
78227add381SEduardo Habkost             .driver = "n270" "-" TYPE_X86_CPU,\
78327add381SEduardo Habkost             .property = "movbe",\
78427add381SEduardo Habkost             .value = "off",\
78527add381SEduardo Habkost         },\
78627add381SEduardo Habkost         {\
78727add381SEduardo Habkost             .driver = "Westmere" "-" TYPE_X86_CPU,\
78827add381SEduardo Habkost             .property = "pclmulqdq",\
78927add381SEduardo Habkost             .value = "off",\
790a7cde24dSEduardo Habkost         },
791bf3caa3dSPaolo Bonzini 
79225519b06SEduardo Habkost #define DEFINE_PC_MACHINE(suffix, namestr, initfn, optsfn) \
793865906f7SEduardo Habkost     static void pc_machine_##suffix##_class_init(ObjectClass *oc, void *data) \
794865906f7SEduardo Habkost     { \
795865906f7SEduardo Habkost         MachineClass *mc = MACHINE_CLASS(oc); \
796865906f7SEduardo Habkost         optsfn(mc); \
797865906f7SEduardo Habkost         mc->name = namestr; \
798865906f7SEduardo Habkost         mc->init = initfn; \
799865906f7SEduardo Habkost     } \
800865906f7SEduardo Habkost     static const TypeInfo pc_machine_type_##suffix = { \
801865906f7SEduardo Habkost         .name       = namestr TYPE_MACHINE_SUFFIX, \
802865906f7SEduardo Habkost         .parent     = TYPE_PC_MACHINE, \
803865906f7SEduardo Habkost         .class_init = pc_machine_##suffix##_class_init, \
804865906f7SEduardo Habkost     }; \
80561f219dfSEduardo Habkost     static void pc_machine_init_##suffix(void) \
80661f219dfSEduardo Habkost     { \
807865906f7SEduardo Habkost         type_register(&pc_machine_type_##suffix); \
80825519b06SEduardo Habkost     } \
80925519b06SEduardo Habkost     machine_init(pc_machine_init_##suffix)
81025519b06SEduardo Habkost 
81125519b06SEduardo Habkost #define SET_MACHINE_COMPAT(m, COMPAT) do { \
812fddd179aSEduardo Habkost     static GlobalProperty props[] = { \
813fddd179aSEduardo Habkost         COMPAT \
814fddd179aSEduardo Habkost         { /* end of list */ } \
815fddd179aSEduardo Habkost     }; \
81625519b06SEduardo Habkost     (m)->compat_props = props; \
81725519b06SEduardo Habkost } while (0)
81861f219dfSEduardo Habkost 
819bd8107d7STiejun Chen extern void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id);
82087ecb68bSpbrook #endif
821