acpi-build.c (8612f8bd9fb667c62e9a56c67ab2e3af2798dd9c) | acpi-build.c (7dc847ebba953db90853d15f140c20eef74d4fb2) |
---|---|
1/* Support for generating ACPI tables and passing them to Guests 2 * 3 * Copyright (C) 2008-2010 Kevin O'Connor <kevin@koconnor.net> 4 * Copyright (C) 2006 Fabrice Bellard 5 * Copyright (C) 2013 Red Hat Inc 6 * 7 * Author: Michael S. Tsirkin <mst@redhat.com> 8 * --- 77 unchanged lines hidden (view full) --- 86#define ACPI_BUILD_IOAPIC_ID 0x0 87 88typedef struct AcpiMcfgInfo { 89 uint64_t mcfg_base; 90 uint32_t mcfg_size; 91} AcpiMcfgInfo; 92 93typedef struct AcpiPmInfo { | 1/* Support for generating ACPI tables and passing them to Guests 2 * 3 * Copyright (C) 2008-2010 Kevin O'Connor <kevin@koconnor.net> 4 * Copyright (C) 2006 Fabrice Bellard 5 * Copyright (C) 2013 Red Hat Inc 6 * 7 * Author: Michael S. Tsirkin <mst@redhat.com> 8 * --- 77 unchanged lines hidden (view full) --- 86#define ACPI_BUILD_IOAPIC_ID 0x0 87 88typedef struct AcpiMcfgInfo { 89 uint64_t mcfg_base; 90 uint32_t mcfg_size; 91} AcpiMcfgInfo; 92 93typedef struct AcpiPmInfo { |
94 bool force_rev1_fadt; |
|
94 bool s3_disabled; 95 bool s4_disabled; 96 bool pcihp_bridge_en; 97 uint8_t s4_val; | 95 bool s3_disabled; 96 bool s4_disabled; 97 bool pcihp_bridge_en; 98 uint8_t s4_val; |
98 AcpiFadtData fadt; | 99 uint16_t sci_int; 100 uint8_t acpi_enable_cmd; 101 uint8_t acpi_disable_cmd; 102 uint32_t gpe0_blk; 103 uint32_t gpe0_blk_len; 104 uint32_t io_base; |
99 uint16_t cpu_hp_io_base; 100 uint16_t pcihp_io_base; 101 uint16_t pcihp_io_len; 102} AcpiPmInfo; 103 104typedef struct AcpiMiscInfo { 105 bool is_piix4; 106 bool has_hpet; --- 6 unchanged lines hidden (view full) --- 113 114typedef struct AcpiBuildPciBusHotplugState { 115 GArray *device_table; 116 GArray *notify_table; 117 struct AcpiBuildPciBusHotplugState *parent; 118 bool pcihp_bridge_en; 119} AcpiBuildPciBusHotplugState; 120 | 105 uint16_t cpu_hp_io_base; 106 uint16_t pcihp_io_base; 107 uint16_t pcihp_io_len; 108} AcpiPmInfo; 109 110typedef struct AcpiMiscInfo { 111 bool is_piix4; 112 bool has_hpet; --- 6 unchanged lines hidden (view full) --- 119 120typedef struct AcpiBuildPciBusHotplugState { 121 GArray *device_table; 122 GArray *notify_table; 123 struct AcpiBuildPciBusHotplugState *parent; 124 bool pcihp_bridge_en; 125} AcpiBuildPciBusHotplugState; 126 |
121static void init_common_fadt_data(Object *o, AcpiFadtData *data) 122{ 123 uint32_t io = object_property_get_uint(o, ACPI_PM_PROP_PM_IO_BASE, NULL); 124 AmlAddressSpace as = AML_AS_SYSTEM_IO; 125 AcpiFadtData fadt = { 126 .rev = 3, 127 .flags = 128 (1 << ACPI_FADT_F_WBINVD) | 129 (1 << ACPI_FADT_F_PROC_C1) | 130 (1 << ACPI_FADT_F_SLP_BUTTON) | 131 (1 << ACPI_FADT_F_RTC_S4) | 132 (1 << ACPI_FADT_F_USE_PLATFORM_CLOCK) | 133 /* APIC destination mode ("Flat Logical") has an upper limit of 8 134 * CPUs for more than 8 CPUs, "Clustered Logical" mode has to be 135 * used 136 */ 137 ((max_cpus > 8) ? (1 << ACPI_FADT_F_FORCE_APIC_CLUSTER_MODEL) : 0), 138 .int_model = 1 /* Multiple APIC */, 139 .rtc_century = RTC_CENTURY, 140 .plvl2_lat = 0xfff /* C2 state not supported */, 141 .plvl3_lat = 0xfff /* C3 state not supported */, 142 .smi_cmd = ACPI_PORT_SMI_CMD, 143 .sci_int = object_property_get_uint(o, ACPI_PM_PROP_SCI_INT, NULL), 144 .acpi_enable_cmd = 145 object_property_get_uint(o, ACPI_PM_PROP_ACPI_ENABLE_CMD, NULL), 146 .acpi_disable_cmd = 147 object_property_get_uint(o, ACPI_PM_PROP_ACPI_DISABLE_CMD, NULL), 148 .pm1a_evt = { .space_id = as, .bit_width = 4 * 8, .address = io }, 149 .pm1a_cnt = { .space_id = as, .bit_width = 2 * 8, 150 .address = io + 0x04 }, 151 .pm_tmr = { .space_id = as, .bit_width = 4 * 8, .address = io + 0x08 }, 152 .gpe0_blk = { .space_id = as, .bit_width = 153 object_property_get_uint(o, ACPI_PM_PROP_GPE0_BLK_LEN, NULL) * 8, 154 .address = object_property_get_uint(o, ACPI_PM_PROP_GPE0_BLK, NULL) 155 }, 156 }; 157 *data = fadt; 158} 159 | |
160static void acpi_get_pm_info(AcpiPmInfo *pm) 161{ 162 Object *piix = piix4_pm_find(); 163 Object *lpc = ich9_lpc_find(); | 127static void acpi_get_pm_info(AcpiPmInfo *pm) 128{ 129 Object *piix = piix4_pm_find(); 130 Object *lpc = ich9_lpc_find(); |
164 Object *obj = piix ? piix : lpc; | 131 Object *obj = NULL; |
165 QObject *o; | 132 QObject *o; |
133 134 pm->force_rev1_fadt = false; |
|
166 pm->cpu_hp_io_base = 0; 167 pm->pcihp_io_base = 0; 168 pm->pcihp_io_len = 0; | 135 pm->cpu_hp_io_base = 0; 136 pm->pcihp_io_base = 0; 137 pm->pcihp_io_len = 0; |
169 170 init_common_fadt_data(obj, &pm->fadt); | |
171 if (piix) { 172 /* w2k requires FADT(rev1) or it won't boot, keep PC compatible */ | 138 if (piix) { 139 /* w2k requires FADT(rev1) or it won't boot, keep PC compatible */ |
173 pm->fadt.rev = 1; | 140 pm->force_rev1_fadt = true; 141 obj = piix; |
174 pm->cpu_hp_io_base = PIIX4_CPU_HOTPLUG_IO_BASE; 175 pm->pcihp_io_base = 176 object_property_get_uint(obj, ACPI_PCIHP_IO_BASE_PROP, NULL); 177 pm->pcihp_io_len = 178 object_property_get_uint(obj, ACPI_PCIHP_IO_LEN_PROP, NULL); 179 } 180 if (lpc) { | 142 pm->cpu_hp_io_base = PIIX4_CPU_HOTPLUG_IO_BASE; 143 pm->pcihp_io_base = 144 object_property_get_uint(obj, ACPI_PCIHP_IO_BASE_PROP, NULL); 145 pm->pcihp_io_len = 146 object_property_get_uint(obj, ACPI_PCIHP_IO_LEN_PROP, NULL); 147 } 148 if (lpc) { |
181 struct AcpiGenericAddress r = { .space_id = AML_AS_SYSTEM_IO, 182 .bit_width = 8, .address = ICH9_RST_CNT_IOPORT }; 183 pm->fadt.reset_reg = r; 184 pm->fadt.reset_val = 0xf; 185 pm->fadt.flags |= 1 << ACPI_FADT_F_RESET_REG_SUP; | 149 obj = lpc; |
186 pm->cpu_hp_io_base = ICH9_CPU_HOTPLUG_IO_BASE; 187 } 188 assert(obj); 189 | 150 pm->cpu_hp_io_base = ICH9_CPU_HOTPLUG_IO_BASE; 151 } 152 assert(obj); 153 |
190 /* The above need not be conditional on machine type because the reset port 191 * happens to be the same on PIIX (pc) and ICH9 (q35). */ 192 QEMU_BUILD_BUG_ON(ICH9_RST_CNT_IOPORT != RCR_IOPORT); 193 | |
194 /* Fill in optional s3/s4 related properties */ 195 o = object_property_get_qobject(obj, ACPI_PM_PROP_S3_DISABLED, NULL); 196 if (o) { | 154 /* Fill in optional s3/s4 related properties */ 155 o = object_property_get_qobject(obj, ACPI_PM_PROP_S3_DISABLED, NULL); 156 if (o) { |
197 pm->s3_disabled = qnum_get_uint(qobject_to_qnum(o)); | 157 pm->s3_disabled = qnum_get_uint(qobject_to(QNum, o)); |
198 } else { 199 pm->s3_disabled = false; 200 } 201 qobject_decref(o); 202 o = object_property_get_qobject(obj, ACPI_PM_PROP_S4_DISABLED, NULL); 203 if (o) { | 158 } else { 159 pm->s3_disabled = false; 160 } 161 qobject_decref(o); 162 o = object_property_get_qobject(obj, ACPI_PM_PROP_S4_DISABLED, NULL); 163 if (o) { |
204 pm->s4_disabled = qnum_get_uint(qobject_to_qnum(o)); | 164 pm->s4_disabled = qnum_get_uint(qobject_to(QNum, o)); |
205 } else { 206 pm->s4_disabled = false; 207 } 208 qobject_decref(o); 209 o = object_property_get_qobject(obj, ACPI_PM_PROP_S4_VAL, NULL); 210 if (o) { | 165 } else { 166 pm->s4_disabled = false; 167 } 168 qobject_decref(o); 169 o = object_property_get_qobject(obj, ACPI_PM_PROP_S4_VAL, NULL); 170 if (o) { |
211 pm->s4_val = qnum_get_uint(qobject_to_qnum(o)); | 171 pm->s4_val = qnum_get_uint(qobject_to(QNum, o)); |
212 } else { 213 pm->s4_val = false; 214 } 215 qobject_decref(o); 216 | 172 } else { 173 pm->s4_val = false; 174 } 175 qobject_decref(o); 176 |
177 /* Fill in mandatory properties */ 178 pm->sci_int = object_property_get_uint(obj, ACPI_PM_PROP_SCI_INT, NULL); 179 180 pm->acpi_enable_cmd = object_property_get_uint(obj, 181 ACPI_PM_PROP_ACPI_ENABLE_CMD, 182 NULL); 183 pm->acpi_disable_cmd = 184 object_property_get_uint(obj, 185 ACPI_PM_PROP_ACPI_DISABLE_CMD, 186 NULL); 187 pm->io_base = object_property_get_uint(obj, ACPI_PM_PROP_PM_IO_BASE, 188 NULL); 189 pm->gpe0_blk = object_property_get_uint(obj, ACPI_PM_PROP_GPE0_BLK, 190 NULL); 191 pm->gpe0_blk_len = object_property_get_uint(obj, ACPI_PM_PROP_GPE0_BLK_LEN, 192 NULL); |
|
217 pm->pcihp_bridge_en = 218 object_property_get_bool(obj, "acpi-pci-hotplug-with-bridge-support", 219 NULL); 220} 221 222static void acpi_get_misc_info(AcpiMiscInfo *info) 223{ 224 Object *piix = piix4_pm_find(); --- 51 unchanged lines hidden (view full) --- 276 object_property_get_uint(pci_host, 277 PCI_HOST_PROP_PCI_HOLE64_START, 278 NULL), 279 object_property_get_uint(pci_host, 280 PCI_HOST_PROP_PCI_HOLE64_END, 281 NULL)); 282} 283 | 193 pm->pcihp_bridge_en = 194 object_property_get_bool(obj, "acpi-pci-hotplug-with-bridge-support", 195 NULL); 196} 197 198static void acpi_get_misc_info(AcpiMiscInfo *info) 199{ 200 Object *piix = piix4_pm_find(); --- 51 unchanged lines hidden (view full) --- 252 object_property_get_uint(pci_host, 253 PCI_HOST_PROP_PCI_HOLE64_START, 254 NULL), 255 object_property_get_uint(pci_host, 256 PCI_HOST_PROP_PCI_HOLE64_END, 257 NULL)); 258} 259 |
260#define ACPI_PORT_SMI_CMD 0x00b2 /* TODO: this is APM_CNT_IOPORT */ 261 |
|
284static void acpi_align_size(GArray *blob, unsigned align) 285{ 286 /* Align size to multiple of given size. This reduces the chance 287 * we need to change size in the future (breaking cross version migration). 288 */ 289 g_array_set_size(blob, ROUND_UP(acpi_data_len(blob), align)); 290} 291 292/* FACS */ 293static void 294build_facs(GArray *table_data, BIOSLinker *linker) 295{ 296 AcpiFacsDescriptorRev1 *facs = acpi_data_push(table_data, sizeof *facs); 297 memcpy(&facs->signature, "FACS", 4); 298 facs->length = cpu_to_le32(sizeof(*facs)); 299} 300 | 262static void acpi_align_size(GArray *blob, unsigned align) 263{ 264 /* Align size to multiple of given size. This reduces the chance 265 * we need to change size in the future (breaking cross version migration). 266 */ 267 g_array_set_size(blob, ROUND_UP(acpi_data_len(blob), align)); 268} 269 270/* FACS */ 271static void 272build_facs(GArray *table_data, BIOSLinker *linker) 273{ 274 AcpiFacsDescriptorRev1 *facs = acpi_data_push(table_data, sizeof *facs); 275 memcpy(&facs->signature, "FACS", 4); 276 facs->length = cpu_to_le32(sizeof(*facs)); 277} 278 |
279/* Load chipset information in FADT */ 280static void fadt_setup(AcpiFadtDescriptorRev3 *fadt, AcpiPmInfo *pm) 281{ 282 fadt->model = 1; 283 fadt->reserved1 = 0; 284 fadt->sci_int = cpu_to_le16(pm->sci_int); 285 fadt->smi_cmd = cpu_to_le32(ACPI_PORT_SMI_CMD); 286 fadt->acpi_enable = pm->acpi_enable_cmd; 287 fadt->acpi_disable = pm->acpi_disable_cmd; 288 /* EVT, CNT, TMR offset matches hw/acpi/core.c */ 289 fadt->pm1a_evt_blk = cpu_to_le32(pm->io_base); 290 fadt->pm1a_cnt_blk = cpu_to_le32(pm->io_base + 0x04); 291 fadt->pm_tmr_blk = cpu_to_le32(pm->io_base + 0x08); 292 fadt->gpe0_blk = cpu_to_le32(pm->gpe0_blk); 293 /* EVT, CNT, TMR length matches hw/acpi/core.c */ 294 fadt->pm1_evt_len = 4; 295 fadt->pm1_cnt_len = 2; 296 fadt->pm_tmr_len = 4; 297 fadt->gpe0_blk_len = pm->gpe0_blk_len; 298 fadt->plvl2_lat = cpu_to_le16(0xfff); /* C2 state not supported */ 299 fadt->plvl3_lat = cpu_to_le16(0xfff); /* C3 state not supported */ 300 fadt->flags = cpu_to_le32((1 << ACPI_FADT_F_WBINVD) | 301 (1 << ACPI_FADT_F_PROC_C1) | 302 (1 << ACPI_FADT_F_SLP_BUTTON) | 303 (1 << ACPI_FADT_F_RTC_S4)); 304 fadt->flags |= cpu_to_le32(1 << ACPI_FADT_F_USE_PLATFORM_CLOCK); 305 /* APIC destination mode ("Flat Logical") has an upper limit of 8 CPUs 306 * For more than 8 CPUs, "Clustered Logical" mode has to be used 307 */ 308 if (max_cpus > 8) { 309 fadt->flags |= cpu_to_le32(1 << ACPI_FADT_F_FORCE_APIC_CLUSTER_MODEL); 310 } 311 fadt->century = RTC_CENTURY; 312 if (pm->force_rev1_fadt) { 313 return; 314 } 315 316 fadt->flags |= cpu_to_le32(1 << ACPI_FADT_F_RESET_REG_SUP); 317 fadt->reset_value = 0xf; 318 fadt->reset_register.space_id = AML_SYSTEM_IO; 319 fadt->reset_register.bit_width = 8; 320 fadt->reset_register.address = cpu_to_le64(ICH9_RST_CNT_IOPORT); 321 /* The above need not be conditional on machine type because the reset port 322 * happens to be the same on PIIX (pc) and ICH9 (q35). */ 323 QEMU_BUILD_BUG_ON(ICH9_RST_CNT_IOPORT != RCR_IOPORT); 324 325 fadt->xpm1a_event_block.space_id = AML_SYSTEM_IO; 326 fadt->xpm1a_event_block.bit_width = fadt->pm1_evt_len * 8; 327 fadt->xpm1a_event_block.address = cpu_to_le64(pm->io_base); 328 329 fadt->xpm1a_control_block.space_id = AML_SYSTEM_IO; 330 fadt->xpm1a_control_block.bit_width = fadt->pm1_cnt_len * 8; 331 fadt->xpm1a_control_block.address = cpu_to_le64(pm->io_base + 0x4); 332 333 fadt->xpm_timer_block.space_id = AML_SYSTEM_IO; 334 fadt->xpm_timer_block.bit_width = fadt->pm_tmr_len * 8; 335 fadt->xpm_timer_block.address = cpu_to_le64(pm->io_base + 0x8); 336 337 fadt->xgpe0_block.space_id = AML_SYSTEM_IO; 338 fadt->xgpe0_block.bit_width = pm->gpe0_blk_len * 8; 339 fadt->xgpe0_block.address = cpu_to_le64(pm->gpe0_blk); 340} 341 342 343/* FADT */ 344static void 345build_fadt(GArray *table_data, BIOSLinker *linker, AcpiPmInfo *pm, 346 unsigned facs_tbl_offset, unsigned dsdt_tbl_offset, 347 const char *oem_id, const char *oem_table_id) 348{ 349 AcpiFadtDescriptorRev3 *fadt = acpi_data_push(table_data, sizeof(*fadt)); 350 unsigned fw_ctrl_offset = (char *)&fadt->firmware_ctrl - table_data->data; 351 unsigned dsdt_entry_offset = (char *)&fadt->dsdt - table_data->data; 352 unsigned xdsdt_entry_offset = (char *)&fadt->x_dsdt - table_data->data; 353 int fadt_size = sizeof(*fadt); 354 int rev = 3; 355 356 /* FACS address to be filled by Guest linker */ 357 bios_linker_loader_add_pointer(linker, 358 ACPI_BUILD_TABLE_FILE, fw_ctrl_offset, sizeof(fadt->firmware_ctrl), 359 ACPI_BUILD_TABLE_FILE, facs_tbl_offset); 360 361 /* DSDT address to be filled by Guest linker */ 362 fadt_setup(fadt, pm); 363 bios_linker_loader_add_pointer(linker, 364 ACPI_BUILD_TABLE_FILE, dsdt_entry_offset, sizeof(fadt->dsdt), 365 ACPI_BUILD_TABLE_FILE, dsdt_tbl_offset); 366 if (pm->force_rev1_fadt) { 367 rev = 1; 368 fadt_size = offsetof(typeof(*fadt), reset_register); 369 } else { 370 bios_linker_loader_add_pointer(linker, 371 ACPI_BUILD_TABLE_FILE, xdsdt_entry_offset, sizeof(fadt->x_dsdt), 372 ACPI_BUILD_TABLE_FILE, dsdt_tbl_offset); 373 } 374 375 build_header(linker, table_data, 376 (void *)fadt, "FACP", fadt_size, rev, oem_id, oem_table_id); 377} 378 |
|
301void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid, 302 const CPUArchIdList *apic_ids, GArray *entry) 303{ 304 uint32_t apic_id = apic_ids->cpus[uid].arch_id; 305 306 /* ACPI spec says that LAPIC entry for non present 307 * CPU may be omitted from MADT or it must be marked 308 * as disabled. However omitting non present CPU from --- 115 unchanged lines hidden (view full) --- 424 if_ctx = aml_if(aml_and(aml_arg(0), aml_int(0x1U << slot), NULL)); 425 aml_append(if_ctx, aml_notify(aml_name("S%.02X", devfn), aml_arg(1))); 426 aml_append(method, if_ctx); 427} 428 429static void build_append_pci_bus_devices(Aml *parent_scope, PCIBus *bus, 430 bool pcihp_bridge_en) 431{ | 379void pc_madt_cpu_entry(AcpiDeviceIf *adev, int uid, 380 const CPUArchIdList *apic_ids, GArray *entry) 381{ 382 uint32_t apic_id = apic_ids->cpus[uid].arch_id; 383 384 /* ACPI spec says that LAPIC entry for non present 385 * CPU may be omitted from MADT or it must be marked 386 * as disabled. However omitting non present CPU from --- 115 unchanged lines hidden (view full) --- 502 if_ctx = aml_if(aml_and(aml_arg(0), aml_int(0x1U << slot), NULL)); 503 aml_append(if_ctx, aml_notify(aml_name("S%.02X", devfn), aml_arg(1))); 504 aml_append(method, if_ctx); 505} 506 507static void build_append_pci_bus_devices(Aml *parent_scope, PCIBus *bus, 508 bool pcihp_bridge_en) 509{ |
432 Aml *dev, *notify_method, *method; | 510 Aml *dev, *notify_method = NULL, *method; |
433 QObject *bsel; 434 PCIBus *sec; 435 int i; 436 437 bsel = object_property_get_qobject(OBJECT(bus), ACPI_PCIHP_PROP_BSEL, NULL); 438 if (bsel) { | 511 QObject *bsel; 512 PCIBus *sec; 513 int i; 514 515 bsel = object_property_get_qobject(OBJECT(bus), ACPI_PCIHP_PROP_BSEL, NULL); 516 if (bsel) { |
439 uint64_t bsel_val = qnum_get_uint(qobject_to_qnum(bsel)); | 517 uint64_t bsel_val = qnum_get_uint(qobject_to(QNum, bsel)); |
440 441 aml_append(parent_scope, aml_name_decl("BSEL", aml_int(bsel_val))); 442 notify_method = aml_method("DVNT", 2, AML_NOTSERIALIZED); 443 } 444 445 for (i = 0; i < ARRAY_SIZE(bus->devices); i += PCI_FUNC_MAX) { 446 DeviceClass *dc; 447 PCIDeviceClass *pc; --- 93 unchanged lines hidden (view full) --- 541 542 /* Append PCNT method to notify about events on local and child buses. 543 * Add unconditionally for root since DSDT expects it. 544 */ 545 method = aml_method("PCNT", 0, AML_NOTSERIALIZED); 546 547 /* If bus supports hotplug select it and notify about local events */ 548 if (bsel) { | 518 519 aml_append(parent_scope, aml_name_decl("BSEL", aml_int(bsel_val))); 520 notify_method = aml_method("DVNT", 2, AML_NOTSERIALIZED); 521 } 522 523 for (i = 0; i < ARRAY_SIZE(bus->devices); i += PCI_FUNC_MAX) { 524 DeviceClass *dc; 525 PCIDeviceClass *pc; --- 93 unchanged lines hidden (view full) --- 619 620 /* Append PCNT method to notify about events on local and child buses. 621 * Add unconditionally for root since DSDT expects it. 622 */ 623 method = aml_method("PCNT", 0, AML_NOTSERIALIZED); 624 625 /* If bus supports hotplug select it and notify about local events */ 626 if (bsel) { |
549 uint64_t bsel_val = qnum_get_uint(qobject_to_qnum(bsel)); | 627 uint64_t bsel_val = qnum_get_uint(qobject_to(QNum, bsel)); |
550 551 aml_append(method, aml_store(aml_int(bsel_val), aml_name("BNUM"))); 552 aml_append(method, 553 aml_call2("DVNT", aml_name("PCIU"), aml_int(1) /* Device Check */) 554 ); 555 aml_append(method, 556 aml_call2("DVNT", aml_name("PCID"), aml_int(3)/* Eject Request */) 557 ); --- 1412 unchanged lines hidden (view full) --- 1970 /* reserve GPE0 block resources */ 1971 dev = aml_device("GPE0"); 1972 aml_append(dev, aml_name_decl("_HID", aml_string("PNP0A06"))); 1973 aml_append(dev, aml_name_decl("_UID", aml_string("GPE0 resources"))); 1974 /* device present, functioning, decoding, not shown in UI */ 1975 aml_append(dev, aml_name_decl("_STA", aml_int(0xB))); 1976 crs = aml_resource_template(); 1977 aml_append(crs, | 628 629 aml_append(method, aml_store(aml_int(bsel_val), aml_name("BNUM"))); 630 aml_append(method, 631 aml_call2("DVNT", aml_name("PCIU"), aml_int(1) /* Device Check */) 632 ); 633 aml_append(method, 634 aml_call2("DVNT", aml_name("PCID"), aml_int(3)/* Eject Request */) 635 ); --- 1412 unchanged lines hidden (view full) --- 2048 /* reserve GPE0 block resources */ 2049 dev = aml_device("GPE0"); 2050 aml_append(dev, aml_name_decl("_HID", aml_string("PNP0A06"))); 2051 aml_append(dev, aml_name_decl("_UID", aml_string("GPE0 resources"))); 2052 /* device present, functioning, decoding, not shown in UI */ 2053 aml_append(dev, aml_name_decl("_STA", aml_int(0xB))); 2054 crs = aml_resource_template(); 2055 aml_append(crs, |
1978 aml_io( 1979 AML_DECODE16, 1980 pm->fadt.gpe0_blk.address, 1981 pm->fadt.gpe0_blk.address, 1982 1, 1983 pm->fadt.gpe0_blk.bit_width / 8) | 2056 aml_io(AML_DECODE16, pm->gpe0_blk, pm->gpe0_blk, 1, pm->gpe0_blk_len) |
1984 ); 1985 aml_append(dev, aml_name_decl("_CRS", crs)); 1986 aml_append(scope, dev); 1987 1988 crs_range_set_free(&crs_range_set); 1989 1990 /* reserve PCIHP resources */ 1991 if (pm->pcihp_io_len) { --- 568 unchanged lines hidden (view full) --- 2560 2561 pci_host = acpi_get_i386_pci_host(); 2562 g_assert(pci_host); 2563 2564 o = object_property_get_qobject(pci_host, PCIE_HOST_MCFG_BASE, NULL); 2565 if (!o) { 2566 return false; 2567 } | 2057 ); 2058 aml_append(dev, aml_name_decl("_CRS", crs)); 2059 aml_append(scope, dev); 2060 2061 crs_range_set_free(&crs_range_set); 2062 2063 /* reserve PCIHP resources */ 2064 if (pm->pcihp_io_len) { --- 568 unchanged lines hidden (view full) --- 2633 2634 pci_host = acpi_get_i386_pci_host(); 2635 g_assert(pci_host); 2636 2637 o = object_property_get_qobject(pci_host, PCIE_HOST_MCFG_BASE, NULL); 2638 if (!o) { 2639 return false; 2640 } |
2568 mcfg->mcfg_base = qnum_get_uint(qobject_to_qnum(o)); | 2641 mcfg->mcfg_base = qnum_get_uint(qobject_to(QNum, o)); |
2569 qobject_decref(o); 2570 2571 o = object_property_get_qobject(pci_host, PCIE_HOST_MCFG_SIZE, NULL); 2572 assert(o); | 2642 qobject_decref(o); 2643 2644 o = object_property_get_qobject(pci_host, PCIE_HOST_MCFG_SIZE, NULL); 2645 assert(o); |
2573 mcfg->mcfg_size = qnum_get_uint(qobject_to_qnum(o)); | 2646 mcfg->mcfg_size = qnum_get_uint(qobject_to(QNum, o)); |
2574 qobject_decref(o); 2575 return true; 2576} 2577 2578static 2579void acpi_build(AcpiBuildTables *tables, MachineState *machine) 2580{ 2581 PCMachineState *pcms = PC_MACHINE(machine); --- 40 unchanged lines hidden (view full) --- 2622 /* Count the size of the DSDT and SSDT, we will need it for legacy 2623 * sizing of ACPI tables. 2624 */ 2625 aml_len += tables_blob->len - dsdt; 2626 2627 /* ACPI tables pointed to by RSDT */ 2628 fadt = tables_blob->len; 2629 acpi_add_table(table_offsets, tables_blob); | 2647 qobject_decref(o); 2648 return true; 2649} 2650 2651static 2652void acpi_build(AcpiBuildTables *tables, MachineState *machine) 2653{ 2654 PCMachineState *pcms = PC_MACHINE(machine); --- 40 unchanged lines hidden (view full) --- 2695 /* Count the size of the DSDT and SSDT, we will need it for legacy 2696 * sizing of ACPI tables. 2697 */ 2698 aml_len += tables_blob->len - dsdt; 2699 2700 /* ACPI tables pointed to by RSDT */ 2701 fadt = tables_blob->len; 2702 acpi_add_table(table_offsets, tables_blob); |
2630 pm.fadt.facs_tbl_offset = &facs; 2631 pm.fadt.dsdt_tbl_offset = &dsdt; 2632 pm.fadt.xdsdt_tbl_offset = &dsdt; 2633 build_fadt(tables_blob, tables->linker, &pm.fadt, | 2703 build_fadt(tables_blob, tables->linker, &pm, facs, dsdt, |
2634 slic_oem.id, slic_oem.table_id); 2635 aml_len += tables_blob->len - fadt; 2636 2637 acpi_add_table(table_offsets, tables_blob); 2638 build_madt(tables_blob, tables->linker, pcms); 2639 2640 vmgenid_dev = find_vmgenid_dev(); 2641 if (vmgenid_dev) { --- 253 unchanged lines hidden --- | 2704 slic_oem.id, slic_oem.table_id); 2705 aml_len += tables_blob->len - fadt; 2706 2707 acpi_add_table(table_offsets, tables_blob); 2708 build_madt(tables_blob, tables->linker, pcms); 2709 2710 vmgenid_dev = find_vmgenid_dev(); 2711 if (vmgenid_dev) { --- 253 unchanged lines hidden --- |