summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--payloads/libpayload/i386/coreboot.c4
-rw-r--r--payloads/libpayload/i386/multiboot.c5
-rw-r--r--payloads/libpayload/i386/sysinfo.c5
-rw-r--r--payloads/libpayload/include/sysinfo.h1
4 files changed, 15 insertions, 0 deletions
diff --git a/payloads/libpayload/i386/coreboot.c b/payloads/libpayload/i386/coreboot.c
index 66e02f11b7..95d8f16f76 100644
--- a/payloads/libpayload/i386/coreboot.c
+++ b/payloads/libpayload/i386/coreboot.c
@@ -57,8 +57,10 @@ static void cb_parse_memory(unsigned char *ptr, struct sysinfo_t *info)
struct cb_memory_range *range =
(struct cb_memory_range *)MEM_RANGE_PTR(mem, i);
+#if MEMMAP_RAM_ONLY
if (range->type != CB_MEM_RAM)
continue;
+#endif
info->memrange[info->n_memranges].base =
UNPACK_CB64(range->start);
@@ -66,6 +68,8 @@ static void cb_parse_memory(unsigned char *ptr, struct sysinfo_t *info)
info->memrange[info->n_memranges].size =
UNPACK_CB64(range->size);
+ info->memrange[info->n_memranges].type = range->type;
+
info->n_memranges++;
}
}
diff --git a/payloads/libpayload/i386/multiboot.c b/payloads/libpayload/i386/multiboot.c
index 290283e8ed..82736b14fe 100644
--- a/payloads/libpayload/i386/multiboot.c
+++ b/payloads/libpayload/i386/multiboot.c
@@ -45,15 +45,20 @@ static void mb_parse_mmap(struct multiboot_header *table,
while(ptr < (start + table->mmap_length)) {
struct multiboot_mmap *mmap = (struct multiboot_mmap *) ptr;
+#if MEMMAP_RAM_ONLY
/* 1 == normal RAM. Ignore everything else for now */
if (mmap->type == 1) {
+#endif
info->memrange[info->n_memranges].base = mmap->addr;
info->memrange[info->n_memranges].size = mmap->length;
+ info->memrange[info->n_memranges].type = mmap->type;
if (++info->n_memranges == SYSINFO_MAX_MEM_RANGES)
return;
+#if MEMMAP_RAM_ONLY
}
+#endif
ptr += (mmap->size + sizeof(mmap->size));
}
diff --git a/payloads/libpayload/i386/sysinfo.c b/payloads/libpayload/i386/sysinfo.c
index 02e1d3daec..599a81140d 100644
--- a/payloads/libpayload/i386/sysinfo.c
+++ b/payloads/libpayload/i386/sysinfo.c
@@ -29,6 +29,7 @@
#include <libpayload-config.h>
#include <libpayload.h>
+#include <coreboot_tables.h>
#include <multiboot_tables.h>
/**
@@ -63,9 +64,13 @@ void lib_get_sysinfo(void)
if (!lib_sysinfo.n_memranges) {
/* If we can't get a good memory range, use the default. */
lib_sysinfo.n_memranges = 2;
+
lib_sysinfo.memrange[0].base = 0;
lib_sysinfo.memrange[0].size = 640 * 1024;
+ lib_sysinfo.memrange[0].type = CB_MEM_RAM;
+
lib_sysinfo.memrange[1].base = 1024 * 1024;
lib_sysinfo.memrange[1].size = 31 * 1024 * 1024;
+ lib_sysinfo.memrange[1].type = CB_MEM_RAM;
}
}
diff --git a/payloads/libpayload/include/sysinfo.h b/payloads/libpayload/include/sysinfo.h
index 3b2c69c61d..bcc3d5fbab 100644
--- a/payloads/libpayload/include/sysinfo.h
+++ b/payloads/libpayload/include/sysinfo.h
@@ -42,6 +42,7 @@ struct sysinfo_t {
struct memrange {
unsigned long long base;
unsigned long long size;
+ unsigned int type;
} memrange[SYSINFO_MAX_MEM_RANGES];
struct cb_cmos_option_table *option_table;