static int ebda_init(fwts_framework *fw) { if (fw->firmware_type != FWTS_FIRMWARE_BIOS) { fwts_log_info(fw, "Machine is not using traditional BIOS firmware, skipping test."); return FWTS_SKIP; } if ((memory_map = fwts_memory_map_table_load(fw)) == NULL) { fwts_log_error(fw, "Failed to read memory map."); return FWTS_ERROR; } if ((ebda_addr = fwts_ebda_get()) == FWTS_NO_EBDA) { fwts_log_error(fw, "Failed to locate EBDA region."); return FWTS_ERROR; } return FWTS_OK; }
static int ebdadump_test1(fwts_framework *fw) { off_t ebda_addr; uint8_t *mem; size_t len; if ((ebda_addr = fwts_ebda_get()) == FWTS_NO_EBDA) { fwts_log_error(fw, "Failed to local EBDA region."); return FWTS_ERROR; } len = BIOS_ROM_START - ebda_addr; if (ebda_addr > BIOS_ROM_START) { fwts_log_error(fw, "EBDA start address is greater than the " "BIOS ROM start address."); return FWTS_ERROR; } if ((mem = fwts_mmap(ebda_addr, len)) == FWTS_MAP_FAILED) { fwts_log_error(fw, "Cannot mmap BIOS ROM region."); return FWTS_ERROR; } fwts_log_info(fw, "EBDA region: %" PRIx32 "..%x (%zd bytes)", (uint32_t)ebda_addr, BIOS_ROM_START, len); ebdadump_data(fw, mem, ebda_addr, len); (void)fwts_munmap(mem, len); fwts_infoonly(fw); return FWTS_OK; }