| File: | hw/i386/pc_q35.c |
| Location: | line 147, column 30 |
| Description: | Assigned value is garbage or undefined |
| 1 | /* | |||
| 2 | * Q35 chipset based pc system emulator | |||
| 3 | * | |||
| 4 | * Copyright (c) 2003-2004 Fabrice Bellard | |||
| 5 | * Copyright (c) 2009, 2010 | |||
| 6 | * Isaku Yamahata <yamahata at valinux co jp> | |||
| 7 | * VA Linux Systems Japan K.K. | |||
| 8 | * Copyright (C) 2012 Jason Baron <jbaron@redhat.com> | |||
| 9 | * | |||
| 10 | * This is based on pc.c, but heavily modified. | |||
| 11 | * | |||
| 12 | * Permission is hereby granted, free of charge, to any person obtaining a copy | |||
| 13 | * of this software and associated documentation files (the "Software"), to deal | |||
| 14 | * in the Software without restriction, including without limitation the rights | |||
| 15 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
| 16 | * copies of the Software, and to permit persons to whom the Software is | |||
| 17 | * furnished to do so, subject to the following conditions: | |||
| 18 | * | |||
| 19 | * The above copyright notice and this permission notice shall be included in | |||
| 20 | * all copies or substantial portions of the Software. | |||
| 21 | * | |||
| 22 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
| 23 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
| 24 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |||
| 25 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
| 26 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
| 27 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
| 28 | * THE SOFTWARE. | |||
| 29 | */ | |||
| 30 | #include "hw/hw.h" | |||
| 31 | #include "hw/loader.h" | |||
| 32 | #include "sysemu/arch_init.h" | |||
| 33 | #include "hw/i2c/smbus.h" | |||
| 34 | #include "hw/boards.h" | |||
| 35 | #include "hw/timer/mc146818rtc.h" | |||
| 36 | #include "hw/xen/xen.h" | |||
| 37 | #include "sysemu/kvm.h" | |||
| 38 | #include "hw/kvm/clock.h" | |||
| 39 | #include "hw/pci-host/q35.h" | |||
| 40 | #include "exec/address-spaces.h" | |||
| 41 | #include "hw/i386/ich9.h" | |||
| 42 | #include "hw/i386/smbios.h" | |||
| 43 | #include "hw/ide/pci.h" | |||
| 44 | #include "hw/ide/ahci.h" | |||
| 45 | #include "hw/usb.h" | |||
| 46 | #include "hw/cpu/icc_bus.h" | |||
| 47 | ||||
| 48 | /* ICH9 AHCI has 6 ports */ | |||
| 49 | #define MAX_SATA_PORTS6 6 | |||
| 50 | ||||
| 51 | static bool_Bool has_pci_info; | |||
| 52 | static bool_Bool has_acpi_build = true1; | |||
| 53 | static bool_Bool smbios_type1_defaults = true1; | |||
| 54 | ||||
| 55 | /* PC hardware initialisation */ | |||
| 56 | static void pc_q35_init(QEMUMachineInitArgs *args) | |||
| 57 | { | |||
| 58 | ram_addr_t below_4g_mem_size, above_4g_mem_size; | |||
| 59 | Q35PCIHost *q35_host; | |||
| 60 | PCIHostState *phb; | |||
| 61 | PCIBus *host_bus; | |||
| 62 | PCIDevice *lpc; | |||
| 63 | BusState *idebus[MAX_SATA_PORTS6]; | |||
| 64 | ISADevice *rtc_state; | |||
| 65 | ISADevice *floppy; | |||
| 66 | MemoryRegion *pci_memory; | |||
| 67 | MemoryRegion *rom_memory; | |||
| 68 | MemoryRegion *ram_memory; | |||
| 69 | GSIState *gsi_state; | |||
| 70 | ISABus *isa_bus; | |||
| 71 | int pci_enabled = 1; | |||
| 72 | qemu_irq *cpu_irq; | |||
| 73 | qemu_irq *gsi; | |||
| 74 | qemu_irq *i8259; | |||
| 75 | int i; | |||
| 76 | ICH9LPCState *ich9_lpc; | |||
| 77 | PCIDevice *ahci; | |||
| 78 | DeviceState *icc_bridge; | |||
| 79 | PcGuestInfo *guest_info; | |||
| 80 | ||||
| 81 | if (xen_enabled() && xen_hvm_init(&ram_memory) != 0) { | |||
| 82 | fprintf(stderrstderr, "xen hardware virtual machine initialisation failed\n"); | |||
| 83 | exit(1); | |||
| 84 | } | |||
| 85 | ||||
| 86 | icc_bridge = qdev_create(NULL((void*)0), TYPE_ICC_BRIDGE"icc-bridge"); | |||
| 87 | object_property_add_child(qdev_get_machine(), "icc-bridge", | |||
| 88 | OBJECT(icc_bridge)((Object *)(icc_bridge)), NULL((void*)0)); | |||
| 89 | ||||
| 90 | pc_cpus_init(args->cpu_model, icc_bridge); | |||
| 91 | pc_acpi_init("q35-acpi-dsdt.aml"); | |||
| 92 | ||||
| 93 | kvmclock_create(); | |||
| 94 | ||||
| 95 | if (args->ram_size >= 0xb0000000) { | |||
| 96 | above_4g_mem_size = args->ram_size - 0xb0000000; | |||
| 97 | below_4g_mem_size = 0xb0000000; | |||
| 98 | } else { | |||
| 99 | above_4g_mem_size = 0; | |||
| 100 | below_4g_mem_size = args->ram_size; | |||
| 101 | } | |||
| 102 | ||||
| 103 | /* pci enabled */ | |||
| 104 | if (pci_enabled) { | |||
| 105 | pci_memory = g_new(MemoryRegion, 1)((MemoryRegion *) g_malloc_n ((1), sizeof (MemoryRegion))); | |||
| 106 | memory_region_init(pci_memory, NULL((void*)0), "pci", UINT64_MAX(18446744073709551615UL)); | |||
| 107 | rom_memory = pci_memory; | |||
| 108 | } else { | |||
| 109 | pci_memory = NULL((void*)0); | |||
| 110 | rom_memory = get_system_memory(); | |||
| 111 | } | |||
| 112 | ||||
| 113 | guest_info = pc_guest_info_init(below_4g_mem_size, above_4g_mem_size); | |||
| 114 | guest_info->has_pci_info = has_pci_info; | |||
| 115 | guest_info->isapc_ram_fw = false0; | |||
| 116 | guest_info->has_acpi_build = has_acpi_build; | |||
| 117 | ||||
| 118 | if (smbios_type1_defaults) { | |||
| 119 | /* These values are guest ABI, do not change */ | |||
| 120 | smbios_set_type1_defaults("QEMU", "Standard PC (Q35 + ICH9, 2009)", | |||
| 121 | args->machine->name); | |||
| 122 | } | |||
| 123 | ||||
| 124 | /* allocate ram and load rom/bios */ | |||
| 125 | if (!xen_enabled()) { | |||
| 126 | pc_memory_init(get_system_memory(), | |||
| 127 | args->kernel_filename, args->kernel_cmdline, | |||
| 128 | args->initrd_filename, | |||
| 129 | below_4g_mem_size, above_4g_mem_size, | |||
| 130 | rom_memory, &ram_memory, guest_info); | |||
| 131 | } | |||
| 132 | ||||
| 133 | /* irq lines */ | |||
| 134 | gsi_state = g_malloc0(sizeof(*gsi_state)); | |||
| 135 | if (kvm_irqchip_in_kernel()(kvm_kernel_irqchip)) { | |||
| 136 | kvm_pc_setup_irq_routing(pci_enabled); | |||
| 137 | gsi = qemu_allocate_irqs(kvm_pc_gsi_handler, gsi_state, | |||
| 138 | GSI_NUM_PINS24); | |||
| 139 | } else { | |||
| 140 | gsi = qemu_allocate_irqs(gsi_handler, gsi_state, GSI_NUM_PINS24); | |||
| 141 | } | |||
| 142 | ||||
| 143 | /* create pci host bus */ | |||
| 144 | q35_host = Q35_HOST_DEVICE(qdev_create(NULL, TYPE_Q35_HOST_DEVICE))((Q35PCIHost *)object_dynamic_cast_assert(((Object *)((qdev_create (((void*)0), "q35-pcihost")))), ("q35-pcihost"), "/home/stefan/src/qemu/qemu.org/qemu/hw/i386/pc_q35.c" , 144, __func__)); | |||
| 145 | ||||
| 146 | object_property_add_child(qdev_get_machine(), "q35", OBJECT(q35_host)((Object *)(q35_host)), NULL((void*)0)); | |||
| 147 | q35_host->mch.ram_memory = ram_memory; | |||
| ||||
| 148 | q35_host->mch.pci_address_space = pci_memory; | |||
| 149 | q35_host->mch.system_memory = get_system_memory(); | |||
| 150 | q35_host->mch.address_space_io = get_system_io(); | |||
| 151 | q35_host->mch.below_4g_mem_size = below_4g_mem_size; | |||
| 152 | q35_host->mch.above_4g_mem_size = above_4g_mem_size; | |||
| 153 | q35_host->mch.guest_info = guest_info; | |||
| 154 | /* pci */ | |||
| 155 | qdev_init_nofail(DEVICE(q35_host)((DeviceState *)object_dynamic_cast_assert(((Object *)((q35_host ))), ("device"), "/home/stefan/src/qemu/qemu.org/qemu/hw/i386/pc_q35.c" , 155, __func__))); | |||
| 156 | phb = PCI_HOST_BRIDGE(q35_host)((PCIHostState *)object_dynamic_cast_assert(((Object *)((q35_host ))), ("pci-host-bridge"), "/home/stefan/src/qemu/qemu.org/qemu/hw/i386/pc_q35.c" , 156, __func__)); | |||
| 157 | host_bus = phb->bus; | |||
| 158 | /* create ISA bus */ | |||
| 159 | lpc = pci_create_simple_multifunction(host_bus, PCI_DEVFN(ICH9_LPC_DEV,((((31) & 0x1f) << 3) | ((0) & 0x07)) | |||
| 160 | ICH9_LPC_FUNC)((((31) & 0x1f) << 3) | ((0) & 0x07)), true1, | |||
| 161 | TYPE_ICH9_LPC_DEVICE"ICH9 LPC"); | |||
| 162 | ich9_lpc = ICH9_LPC_DEVICE(lpc)((ICH9LPCState *)object_dynamic_cast_assert(((Object *)((lpc) )), ("ICH9 LPC"), "/home/stefan/src/qemu/qemu.org/qemu/hw/i386/pc_q35.c" , 162, __func__)); | |||
| 163 | ich9_lpc->pic = gsi; | |||
| 164 | ich9_lpc->ioapic = gsi_state->ioapic_irq; | |||
| 165 | pci_bus_irqs(host_bus, ich9_lpc_set_irq, ich9_lpc_map_irq, ich9_lpc, | |||
| 166 | ICH9_LPC_NB_PIRQS8); | |||
| 167 | pci_bus_set_route_irq_fn(host_bus, ich9_route_intx_pin_to_irq); | |||
| 168 | isa_bus = ich9_lpc->isa_bus; | |||
| 169 | ||||
| 170 | /*end early*/ | |||
| 171 | isa_bus_irqs(isa_bus, gsi); | |||
| 172 | ||||
| 173 | if (kvm_irqchip_in_kernel()(kvm_kernel_irqchip)) { | |||
| 174 | i8259 = kvm_i8259_init(isa_bus); | |||
| 175 | } else if (xen_enabled()) { | |||
| 176 | i8259 = xen_interrupt_controller_init(); | |||
| 177 | } else { | |||
| 178 | cpu_irq = pc_allocate_cpu_irq(); | |||
| 179 | i8259 = i8259_init(isa_bus, cpu_irq[0]); | |||
| 180 | } | |||
| 181 | ||||
| 182 | for (i = 0; i < ISA_NUM_IRQS16; i++) { | |||
| 183 | gsi_state->i8259_irq[i] = i8259[i]; | |||
| 184 | } | |||
| 185 | if (pci_enabled) { | |||
| 186 | ioapic_init_gsi(gsi_state, NULL((void*)0)); | |||
| 187 | } | |||
| 188 | qdev_init_nofail(icc_bridge); | |||
| 189 | ||||
| 190 | pc_register_ferr_irq(gsi[13]); | |||
| 191 | ||||
| 192 | /* init basic PC hardware */ | |||
| 193 | pc_basic_device_init(isa_bus, gsi, &rtc_state, &floppy, false0, 0xff0104); | |||
| 194 | ||||
| 195 | /* connect pm stuff to lpc */ | |||
| 196 | ich9_lpc_pm_init(lpc); | |||
| 197 | ||||
| 198 | /* ahci and SATA device, for q35 1 ahci controller is built-in */ | |||
| 199 | ahci = pci_create_simple_multifunction(host_bus, | |||
| 200 | PCI_DEVFN(ICH9_SATA1_DEV,((((31) & 0x1f) << 3) | ((2) & 0x07)) | |||
| 201 | ICH9_SATA1_FUNC)((((31) & 0x1f) << 3) | ((2) & 0x07)), | |||
| 202 | true1, "ich9-ahci"); | |||
| 203 | idebus[0] = qdev_get_child_bus(&ahci->qdev, "ide.0"); | |||
| 204 | idebus[1] = qdev_get_child_bus(&ahci->qdev, "ide.1"); | |||
| 205 | ||||
| 206 | if (usb_enabled(false0)) { | |||
| 207 | /* Should we create 6 UHCI according to ich9 spec? */ | |||
| 208 | ehci_create_ich9_with_companions(host_bus, 0x1d); | |||
| 209 | } | |||
| 210 | ||||
| 211 | /* TODO: Populate SPD eeprom data. */ | |||
| 212 | smbus_eeprom_init(ich9_smb_init(host_bus, | |||
| 213 | PCI_DEVFN(ICH9_SMB_DEV, ICH9_SMB_FUNC)((((31) & 0x1f) << 3) | ((3) & 0x07)), | |||
| 214 | 0xb100), | |||
| 215 | 8, NULL((void*)0), 0); | |||
| 216 | ||||
| 217 | pc_cmos_init(below_4g_mem_size, above_4g_mem_size, args->boot_order, | |||
| 218 | floppy, idebus[0], idebus[1], rtc_state); | |||
| 219 | ||||
| 220 | /* the rest devices to which pci devfn is automatically assigned */ | |||
| 221 | pc_vga_init(isa_bus, host_bus); | |||
| 222 | pc_nic_init(isa_bus, host_bus); | |||
| 223 | if (pci_enabled) { | |||
| 224 | pc_pci_device_init(host_bus); | |||
| 225 | } | |||
| 226 | } | |||
| 227 | ||||
| 228 | static void pc_compat_1_7(QEMUMachineInitArgs *args) | |||
| 229 | { | |||
| 230 | smbios_type1_defaults = false0; | |||
| 231 | } | |||
| 232 | ||||
| 233 | static void pc_compat_1_6(QEMUMachineInitArgs *args) | |||
| 234 | { | |||
| 235 | pc_compat_1_7(args); | |||
| 236 | has_pci_info = false0; | |||
| 237 | rom_file_in_ram = false0; | |||
| 238 | has_acpi_build = false0; | |||
| 239 | } | |||
| 240 | ||||
| 241 | static void pc_compat_1_5(QEMUMachineInitArgs *args) | |||
| 242 | { | |||
| 243 | pc_compat_1_6(args); | |||
| 244 | } | |||
| 245 | ||||
| 246 | static void pc_compat_1_4(QEMUMachineInitArgs *args) | |||
| 247 | { | |||
| 248 | pc_compat_1_5(args); | |||
| 249 | x86_cpu_compat_set_features("n270", FEAT_1_ECX, 0, CPUID_EXT_MOVBE(1 << 22)); | |||
| 250 | x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ(1 << 1)); | |||
| 251 | } | |||
| 252 | ||||
| 253 | static void pc_q35_init_1_7(QEMUMachineInitArgs *args) | |||
| 254 | { | |||
| 255 | pc_compat_1_7(args); | |||
| 256 | pc_q35_init(args); | |||
| 257 | } | |||
| 258 | ||||
| 259 | static void pc_q35_init_1_6(QEMUMachineInitArgs *args) | |||
| 260 | { | |||
| 261 | pc_compat_1_6(args); | |||
| 262 | pc_q35_init(args); | |||
| 263 | } | |||
| 264 | ||||
| 265 | static void pc_q35_init_1_5(QEMUMachineInitArgs *args) | |||
| 266 | { | |||
| 267 | pc_compat_1_5(args); | |||
| 268 | pc_q35_init(args); | |||
| 269 | } | |||
| 270 | ||||
| 271 | static void pc_q35_init_1_4(QEMUMachineInitArgs *args) | |||
| 272 | { | |||
| 273 | pc_compat_1_4(args); | |||
| 274 | pc_q35_init(args); | |||
| ||||
| 275 | } | |||
| 276 | ||||
| 277 | #define PC_Q35_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu \ | |||
| 278 | PC_DEFAULT_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, \ | |||
| 279 | .desc = "Standard PC (Q35 + ICH9, 2009)", \ | |||
| 280 | .hot_add_cpu = pc_hot_add_cpu | |||
| 281 | ||||
| 282 | #define PC_Q35_2_0_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu, .default_machine_opts = "firmware=bios-256k.bin" \ | |||
| 283 | PC_Q35_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu, \ | |||
| 284 | .default_machine_opts = "firmware=bios-256k.bin" | |||
| 285 | ||||
| 286 | static QEMUMachine pc_q35_machine_v2_0 = { | |||
| 287 | PC_Q35_2_0_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu, .default_machine_opts = "firmware=bios-256k.bin", | |||
| 288 | .name = "pc-q35-2.0", | |||
| 289 | .alias = "q35", | |||
| 290 | .init = pc_q35_init, | |||
| 291 | }; | |||
| 292 | ||||
| 293 | #define PC_Q35_1_7_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu PC_Q35_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu | |||
| 294 | ||||
| 295 | static QEMUMachine pc_q35_machine_v1_7 = { | |||
| 296 | PC_Q35_1_7_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu, | |||
| 297 | .name = "pc-q35-1.7", | |||
| 298 | .init = pc_q35_init_1_7, | |||
| 299 | .compat_props = (GlobalProperty[]) { | |||
| 300 | PC_Q35_COMPAT_1_7{ .driver = "hpet", .property = "hpet-intcap", .value = "4", }, | |||
| 301 | { /* end of list */ } | |||
| 302 | }, | |||
| 303 | }; | |||
| 304 | ||||
| 305 | #define PC_Q35_1_6_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu PC_Q35_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu | |||
| 306 | ||||
| 307 | static QEMUMachine pc_q35_machine_v1_6 = { | |||
| 308 | PC_Q35_1_6_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu, | |||
| 309 | .name = "pc-q35-1.6", | |||
| 310 | .init = pc_q35_init_1_6, | |||
| 311 | .compat_props = (GlobalProperty[]) { | |||
| 312 | PC_Q35_COMPAT_1_6{ .driver = "e1000", .property = "mitigation", .value = "off" , },{ .driver = "qemu64-" "x86_64-cpu", .property = "model", . value = "2", },{ .driver = "qemu32-" "x86_64-cpu", .property = "model", .value = "3", },{ .driver = "i440FX-pcihost", .property = "short_root_bus", .value = "1", },{ .driver = "q35-pcihost" , .property = "short_root_bus", .value = "1", }, { .driver = "hpet" , .property = "hpet-intcap", .value = "4", }, | |||
| 313 | { /* end of list */ } | |||
| 314 | }, | |||
| 315 | }; | |||
| 316 | ||||
| 317 | static QEMUMachine pc_q35_machine_v1_5 = { | |||
| 318 | PC_Q35_1_6_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu, | |||
| 319 | .name = "pc-q35-1.5", | |||
| 320 | .init = pc_q35_init_1_5, | |||
| 321 | .compat_props = (GlobalProperty[]) { | |||
| 322 | PC_Q35_COMPAT_1_5{ .driver = "e1000", .property = "mitigation", .value = "off" , },{ .driver = "qemu64-" "x86_64-cpu", .property = "model", . value = "2", },{ .driver = "qemu32-" "x86_64-cpu", .property = "model", .value = "3", },{ .driver = "i440FX-pcihost", .property = "short_root_bus", .value = "1", },{ .driver = "q35-pcihost" , .property = "short_root_bus", .value = "1", }, { .driver = "Conroe-" "x86_64-cpu", .property = "model", .value = "2", },{ .driver = "Conroe-" "x86_64-cpu", .property = "level", .value = "2", },{ .driver = "Penryn-" "x86_64-cpu", .property = "model", . value = "2", },{ .driver = "Penryn-" "x86_64-cpu", .property = "level", .value = "2", },{ .driver = "Nehalem-" "x86_64-cpu" , .property = "model", .value = "2", },{ .driver = "Nehalem-" "x86_64-cpu", .property = "level", .value = "2", },{ .driver = "virtio-net-pci", .property = "any_layout", .value = "off" , },{ .driver = "x86_64-cpu", .property = "pmu", .value = "on" , },{ .driver = "i440FX-pcihost", .property = "short_root_bus" , .value = "0", },{ .driver = "q35-pcihost", .property = "short_root_bus" , .value = "0", }, { .driver = "e1000", .property = "mitigation" , .value = "off", },{ .driver = "qemu64-" "x86_64-cpu", .property = "model", .value = "2", },{ .driver = "qemu32-" "x86_64-cpu" , .property = "model", .value = "3", },{ .driver = "i440FX-pcihost" , .property = "short_root_bus", .value = "1", },{ .driver = "q35-pcihost" , .property = "short_root_bus", .value = "1", }, { .driver = "hpet" , .property = "hpet-intcap", .value = "4", }, | |||
| 323 | { /* end of list */ } | |||
| 324 | }, | |||
| 325 | }; | |||
| 326 | ||||
| 327 | #define PC_Q35_1_4_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu, .hot_add_cpu = ((void*)0) \ | |||
| 328 | PC_Q35_1_6_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu, \ | |||
| 329 | .hot_add_cpu = NULL((void*)0) | |||
| 330 | ||||
| 331 | static QEMUMachine pc_q35_machine_v1_4 = { | |||
| 332 | PC_Q35_1_4_MACHINE_OPTIONS.default_boot_order = "cad", .hot_add_cpu = pc_hot_add_cpu, . max_cpus = 255, .desc = "Standard PC (Q35 + ICH9, 2009)", .hot_add_cpu = pc_hot_add_cpu, .hot_add_cpu = ((void*)0), | |||
| 333 | .name = "pc-q35-1.4", | |||
| 334 | .init = pc_q35_init_1_4, | |||
| 335 | .compat_props = (GlobalProperty[]) { | |||
| 336 | PC_COMPAT_1_4{ .driver = "e1000", .property = "mitigation", .value = "off" , },{ .driver = "qemu64-" "x86_64-cpu", .property = "model", . value = "2", },{ .driver = "qemu32-" "x86_64-cpu", .property = "model", .value = "3", },{ .driver = "i440FX-pcihost", .property = "short_root_bus", .value = "1", },{ .driver = "q35-pcihost" , .property = "short_root_bus", .value = "1", }, { .driver = "Conroe-" "x86_64-cpu", .property = "model", .value = "2", },{ .driver = "Conroe-" "x86_64-cpu", .property = "level", .value = "2", },{ .driver = "Penryn-" "x86_64-cpu", .property = "model", . value = "2", },{ .driver = "Penryn-" "x86_64-cpu", .property = "level", .value = "2", },{ .driver = "Nehalem-" "x86_64-cpu" , .property = "model", .value = "2", },{ .driver = "Nehalem-" "x86_64-cpu", .property = "level", .value = "2", },{ .driver = "virtio-net-pci", .property = "any_layout", .value = "off" , },{ .driver = "x86_64-cpu", .property = "pmu", .value = "on" , },{ .driver = "i440FX-pcihost", .property = "short_root_bus" , .value = "0", },{ .driver = "q35-pcihost", .property = "short_root_bus" , .value = "0", }, { .driver = "scsi-hd", .property = "discard_granularity" , .value = "0", },{ .driver = "scsi-cd", .property = "discard_granularity" , .value = "0", },{ .driver = "scsi-disk", .property = "discard_granularity" , .value = "0", },{ .driver = "ide-hd", .property = "discard_granularity" , .value = "0", },{ .driver = "ide-cd", .property = "discard_granularity" , .value = "0", },{ .driver = "ide-drive", .property = "discard_granularity" , .value = "0", },{ .driver = "virtio-blk-pci", .property = "discard_granularity" , .value = "0", },{ .driver = "virtio-serial-pci", .property = "vectors", .value = "0xFFFFFFFF", },{ .driver = "virtio-net-pci" , .property = "ctrl_guest_offloads", .value = "off", },{ .driver = "e1000", .property = "romfile", .value = "pxe-e1000.rom", } ,{ .driver = "ne2k_pci", .property = "romfile", .value = "pxe-ne2k_pci.rom" , },{ .driver = "pcnet", .property = "romfile", .value = "pxe-pcnet.rom" , },{ .driver = "rtl8139", .property = "romfile", .value = "pxe-rtl8139.rom" , },{ .driver = "virtio-net-pci", .property = "romfile", .value = "pxe-virtio.rom", },{ .driver = "486-" "x86_64-cpu", .property = "model", .value = "0", }, | |||
| 337 | { /* end of list */ } | |||
| 338 | }, | |||
| 339 | }; | |||
| 340 | ||||
| 341 | static void pc_q35_machine_init(void) | |||
| 342 | { | |||
| 343 | qemu_register_machine(&pc_q35_machine_v2_0); | |||
| 344 | qemu_register_machine(&pc_q35_machine_v1_7); | |||
| 345 | qemu_register_machine(&pc_q35_machine_v1_6); | |||
| 346 | qemu_register_machine(&pc_q35_machine_v1_5); | |||
| 347 | qemu_register_machine(&pc_q35_machine_v1_4); | |||
| 348 | } | |||
| 349 | ||||
| 350 | machine_init(pc_q35_machine_init)static void __attribute__((constructor)) do_qemu_init_pc_q35_machine_init (void) { register_module_init(pc_q35_machine_init, MODULE_INIT_MACHINE ); }; |