aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2015-05-21 00:39:02 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2015-05-21 11:44:57 +0200
commit2e7cb17c15c64bfe6394b2a1951fa187c2620c7d (patch)
tree3f42e5910f51339fcc522782529674aa9d9d1543 /main.c
parent7cadd5a6fbdbf078c2e6a4d59dcb5e5e2371406e (diff)
downloadqboot-2e7cb17c15c64bfe6394b2a1951fa187c2620c7d.zip
qboot-2e7cb17c15c64bfe6394b2a1951fa187c2620c7d.tar.gz
qboot-2e7cb17c15c64bfe6394b2a1951fa187c2620c7d.tar.bz2
initial fw_cfg support
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'main.c')
-rw-r--r--main.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/main.c b/main.c
index 5ef38cf..2378abb 100644
--- a/main.c
+++ b/main.c
@@ -1,7 +1,9 @@
#include "bios.h"
+#include "e820.h"
#include "pci.h"
#include "string.h"
#include "segment.h"
+#include "fw_cfg.h"
#define PCI_VENDOR_ID_INTEL 0x8086
#define PCI_DEVICE_ID_INTEL_82441 0x1237
@@ -77,13 +79,28 @@ static void setup_idt(void)
set_realmode_int(0x15, bios_int15);
}
+static void extract_e820(void)
+{
+ int id = fw_cfg_file_id("etc/e820");
+ uint32_t size;
+
+ if (id == -1)
+ panic();
+
+ size = fw_cfg_file_size(id);
+ e820.nr_map = size / sizeof(e820.map[0]);
+ fw_cfg_file_select(id);
+ fw_cfg_read(&e820.map, size);
+}
+
int main(void)
{
make_bios_writable();
setup_pic();
setup_idt();
+ fw_cfg_setup();
// extract_acpi();
- // extract_e820();
+ extract_e820();
// extract_smbios();
// extract_kernel();
// make_bios_readonly();