ghes.c (d0dddab40e472ba62b5f43f11cc7dba085dabe71) | ghes.c (1c81f5735af3e2356bb75482a58786a4f26d8300) |
---|---|
1/* 2 * Support for generating APEI tables and recording CPER for Guests 3 * 4 * Copyright (c) 2020 HUAWEI TECHNOLOGIES CO., LTD. 5 * 6 * Author: Dongjiu Geng <gengdongjiu@huawei.com> 7 * 8 * This program is free software; you can redistribute it and/or modify --- 372 unchanged lines hidden (view full) --- 381{ 382 /* Create a read-only fw_cfg file for GHES */ 383 fw_cfg_add_file(s, ACPI_GHES_ERRORS_FW_CFG_FILE, hardware_error->data, 384 hardware_error->len); 385 386 /* Create a read-write fw_cfg file for Address */ 387 fw_cfg_add_file_callback(s, ACPI_GHES_DATA_ADDR_FW_CFG_FILE, NULL, NULL, 388 NULL, &(ags->ghes_addr_le), sizeof(ags->ghes_addr_le), false); | 1/* 2 * Support for generating APEI tables and recording CPER for Guests 3 * 4 * Copyright (c) 2020 HUAWEI TECHNOLOGIES CO., LTD. 5 * 6 * Author: Dongjiu Geng <gengdongjiu@huawei.com> 7 * 8 * This program is free software; you can redistribute it and/or modify --- 372 unchanged lines hidden (view full) --- 381{ 382 /* Create a read-only fw_cfg file for GHES */ 383 fw_cfg_add_file(s, ACPI_GHES_ERRORS_FW_CFG_FILE, hardware_error->data, 384 hardware_error->len); 385 386 /* Create a read-write fw_cfg file for Address */ 387 fw_cfg_add_file_callback(s, ACPI_GHES_DATA_ADDR_FW_CFG_FILE, NULL, NULL, 388 NULL, &(ags->ghes_addr_le), sizeof(ags->ghes_addr_le), false); |
389 390 ags->present = true; |
|
389} 390 391int acpi_ghes_record_errors(uint8_t source_id, uint64_t physical_address) 392{ 393 uint64_t error_block_addr, read_ack_register_addr, read_ack_register = 0; 394 uint64_t start_addr; 395 bool ret = -1; 396 AcpiGedState *acpi_ged_state; --- 41 unchanged lines hidden (view full) --- 438 ret = acpi_ghes_record_mem_error(error_block_addr, 439 physical_address); 440 } else 441 error_report("can not find Generic Error Status Block"); 442 } 443 444 return ret; 445} | 391} 392 393int acpi_ghes_record_errors(uint8_t source_id, uint64_t physical_address) 394{ 395 uint64_t error_block_addr, read_ack_register_addr, read_ack_register = 0; 396 uint64_t start_addr; 397 bool ret = -1; 398 AcpiGedState *acpi_ged_state; --- 41 unchanged lines hidden (view full) --- 440 ret = acpi_ghes_record_mem_error(error_block_addr, 441 physical_address); 442 } else 443 error_report("can not find Generic Error Status Block"); 444 } 445 446 return ret; 447} |
448 449bool acpi_ghes_present(void) 450{ 451 AcpiGedState *acpi_ged_state; 452 AcpiGhesState *ags; 453 454 acpi_ged_state = ACPI_GED(object_resolve_path_type("", TYPE_ACPI_GED, 455 NULL)); 456 457 if (!acpi_ged_state) { 458 return false; 459 } 460 ags = &acpi_ged_state->ghes_state; 461 return ags->present; 462} |
|