[coreboot] [v2] r4291 - in trunk/payloads/libpayload: i386 include

svn at coreboot.org svn at coreboot.org
Sun May 17 22:36:45 CEST 2009


Author: oxygene
Date: 2009-05-17 22:36:45 +0200 (Sun, 17 May 2009)
New Revision: 4291

Modified:
   trunk/payloads/libpayload/i386/coreboot.c
   trunk/payloads/libpayload/i386/multiboot.c
   trunk/payloads/libpayload/i386/sysinfo.c
   trunk/payloads/libpayload/include/sysinfo.h
Log:
Add type field to memranges, and fill it from the source data.
type field contains e820 type ids, which are used by coreboot
and multiboot (the two source formats), so they can be used
as-is.

The MEMMAP_RAM_ONLY define is a way to allow a payload to opt
for only having CB_MEM_RAM type fields, which might be helpful
to support older payloads easily (just add the define, and it
won't encounter "weird" fields)

Signed-off-by: Patrick Georgi <patrick.georgi at coresystems.de>
Acked-by: Peter Stuge <peter at stuge.se>


Modified: trunk/payloads/libpayload/i386/coreboot.c
===================================================================
--- trunk/payloads/libpayload/i386/coreboot.c	2009-05-16 23:05:20 UTC (rev 4290)
+++ trunk/payloads/libpayload/i386/coreboot.c	2009-05-17 20:36:45 UTC (rev 4291)
@@ -57,8 +57,10 @@
 		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 @@
 		info->memrange[info->n_memranges].size =
 		    UNPACK_CB64(range->size);
 
+		info->memrange[info->n_memranges].type = range->type;
+
 		info->n_memranges++;
 	}
 }

Modified: trunk/payloads/libpayload/i386/multiboot.c
===================================================================
--- trunk/payloads/libpayload/i386/multiboot.c	2009-05-16 23:05:20 UTC (rev 4290)
+++ trunk/payloads/libpayload/i386/multiboot.c	2009-05-17 20:36:45 UTC (rev 4291)
@@ -45,15 +45,20 @@
 	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));
 	}

Modified: trunk/payloads/libpayload/i386/sysinfo.c
===================================================================
--- trunk/payloads/libpayload/i386/sysinfo.c	2009-05-16 23:05:20 UTC (rev 4290)
+++ trunk/payloads/libpayload/i386/sysinfo.c	2009-05-17 20:36:45 UTC (rev 4291)
@@ -29,6 +29,7 @@
 
 #include <libpayload-config.h>
 #include <libpayload.h>
+#include <coreboot_tables.h>
 #include <multiboot_tables.h>
 
 /**
@@ -63,9 +64,13 @@
 	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;
 	}
 }

Modified: trunk/payloads/libpayload/include/sysinfo.h
===================================================================
--- trunk/payloads/libpayload/include/sysinfo.h	2009-05-16 23:05:20 UTC (rev 4290)
+++ trunk/payloads/libpayload/include/sysinfo.h	2009-05-17 20:36:45 UTC (rev 4291)
@@ -42,6 +42,7 @@
 	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;





More information about the coreboot mailing list