static int hpet_check_deinit(fwts_framework *fw) { FWTS_UNUSED(fw); if (klog) fwts_text_list_free(klog); return FWTS_OK; }
/* * check_hpet_base_dsdt() * used to parse the DSDT for HPET base info */ static void hpet_check_base_acpi_table( fwts_framework *fw, fwts_acpi_table_info *info) { fwts_list *output; fwts_list_link *item; if (fwts_iasl_disassemble(fw, info, true, &output) != FWTS_OK) { fwts_iasl_deinit(); return; } if (output == NULL) return; fwts_list_foreach(item, output) if (strstr(fwts_text_list_text(item), "Device (HPET)") != NULL) hpet_parse_device_hpet(fw, info->name, item); fwts_text_list_free(output); }
static int acpidump_test1(fwts_framework *fw) { int i; fwts_infoonly(fw); if (fwts_iasl_init(fw) != FWTS_OK) { fwts_aborted(fw, "Failure to initialise iasl, aborting."); return FWTS_ERROR; } for (i = 0; i < ACPI_MAX_TABLES; i++) { fwts_acpi_table_info *table; fwts_list *output; char *provenance; if (fwts_acpi_get_table(fw, i, &table) != FWTS_OK) break; if (table == NULL) break; switch (table->provenance) { case FWTS_ACPI_TABLE_FROM_FILE: provenance = " (loaded from file)"; break; case FWTS_ACPI_TABLE_FROM_FIXUP: provenance = " (generated by fwts)"; break; default: provenance = ""; break; } fwts_log_info_verbatim(fw, "%s @ %lx (%zd bytes)%s", table->name, (unsigned long)table->addr, table->length, provenance); fwts_log_info_verbatim(fw, "----"); if (!strcmp(table->name, "RSDP")) { /* RSDP is a special case */ acpidump_rsdp(fw, table); } else if (table->has_aml) { /* Disassembling the AML bloats the output, so ignore */ uint8_t *data = (uint8_t *)table->data; fwts_acpi_table_header hdr; fwts_acpi_table_get_header(&hdr, data); acpidump_hdr(fw, &hdr, table->length); fwts_log_info_verbatim(fw, "Contains AML Object Code."); } else if (fwts_iasl_disassemble(fw, table, true, &output) != FWTS_OK) { /* Cannot find, assume standard table header */ uint8_t *data = (uint8_t *)table->data; fwts_acpi_table_header hdr; fwts_acpi_table_get_header(&hdr, data); acpidump_hdr(fw, &hdr, table->length); acpi_dump_raw_table(fw, table); } else { /* Successfully disassembled, so parse */ fwts_list_link *line; bool skip = false; bool unknown = false; fwts_list_foreach(line, output) { char *text = fwts_text_list_text(line); bool ignore = (strstr(text, "Raw Table Data:") != NULL); /* We don't want to emit this line */ if (strstr(text, "Unknown ACPI table signature") != NULL) { unknown = true; ignore = true; } /* and we want to ignore text in comments */ if (!strncmp(text, "/*", 2)) skip = true; if (!(ignore | skip | unknown)) fwts_log_info_verbatim(fw, "%s", fwts_text_list_text(line)); if (!strncmp(text, " */", 3)) skip = false; } fwts_text_list_free(output); if (unknown) acpi_dump_raw_table(fw, table); } fwts_log_nl(fw); }