[syslinux:firmware] memscan: pass enum syslinux_memmap_types around

syslinux-bot for Matt Fleming matt.fleming at intel.com
Thu Jul 18 05:00:07 PDT 2013


Commit-ID:  a1331f8d04dbeb06d6f6c4c1fc736a50b0c0299a
Gitweb:     http://www.syslinux.org/commit/a1331f8d04dbeb06d6f6c4c1fc736a50b0c0299a
Author:     Matt Fleming <matt.fleming at intel.com>
AuthorDate: Tue, 16 Jul 2013 18:13:17 +0100
Committer:  Matt Fleming <matt.fleming at intel.com>
CommitDate: Wed, 17 Jul 2013 18:29:16 +0100

memscan: pass enum syslinux_memmap_types around

The memscan interface should be using SMT_* to describe the types of
memory regions as SMT_* are platform agnostic values. This will allow us
to be much more descriptive about the type of memory regions in future.

Signed-off-by: Matt Fleming <matt.fleming at intel.com>

---
 com32/include/syslinux/memscan.h |  3 ++-
 com32/lib/syslinux/memmap.c      |  7 +++----
 com32/lib/syslinux/memscan.c     | 15 +++++++++------
 core/mem/init.c                  |  7 ++++---
 4 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/com32/include/syslinux/memscan.h b/com32/include/syslinux/memscan.h
index c3ebf84..7aabacb 100644
--- a/com32/include/syslinux/memscan.h
+++ b/com32/include/syslinux/memscan.h
@@ -32,7 +32,8 @@
 #include <stdbool.h>
 #include <syslinux/movebits.h>	/* addr_t */
 
-typedef int (*scan_memory_callback_t) (void *, addr_t, addr_t, bool);
+typedef int (*scan_memory_callback_t) (void *, addr_t, addr_t,
+				       enum syslinux_memmap_types type);
 int syslinux_scan_memory(scan_memory_callback_t callback, void *data);
 int bios_scan_memory(scan_memory_callback_t callback, void *data);
 
diff --git a/com32/lib/syslinux/memmap.c b/com32/lib/syslinux/memmap.c
index 12baa33..563e91b 100644
--- a/com32/lib/syslinux/memmap.c
+++ b/com32/lib/syslinux/memmap.c
@@ -40,12 +40,11 @@
 #include <syslinux/memscan.h>
 #include <syslinux/movebits.h>
 
-static int syslinux_memory_map_callback(void *map, addr_t start,
-					addr_t len, bool valid)
+static int syslinux_memory_map_callback(void *map, addr_t start, addr_t len,
+					enum syslinux_memmap_types type)
 {
     struct syslinux_memmap **mmap = map;
-    return syslinux_add_memmap(mmap, start, len,
-			       valid ? SMT_FREE : SMT_RESERVED);
+    return syslinux_add_memmap(mmap, start, len, type);
 }
 
 struct syslinux_memmap *syslinux_memory_map(void)
diff --git a/com32/lib/syslinux/memscan.c b/com32/lib/syslinux/memscan.c
index 0ff25d7..2fa14a2 100644
--- a/com32/lib/syslinux/memscan.c
+++ b/com32/lib/syslinux/memscan.c
@@ -70,7 +70,7 @@ int bios_scan_memory(scan_memory_callback_t callback, void *data)
 	else
 	    dosmem = 640 * 1024;	/* Hope for the best... */
     }
-    rv = callback(data, bios_data, dosmem - bios_data, true);
+    rv = callback(data, bios_data, dosmem - bios_data, SMT_FREE);
     if (rv)
 	return rv;
 
@@ -113,8 +113,10 @@ int bios_scan_memory(scan_memory_callback_t callback, void *data)
 		len = maxlen;
 
 	    if (len) {
-		rv = callback(data, (addr_t) start, (addr_t) len,
-			      e820buf->type == 1);
+		enum syslinux_memmap_types type;
+
+		type = e820buf->type == 1 ? SMT_FREE : SMT_RESERVED;
+		rv = callback(data, (addr_t) start, (addr_t) len, type);
 		if (rv)
 		    return rv;
 		memfound = 1;
@@ -134,12 +136,13 @@ int bios_scan_memory(scan_memory_callback_t callback, void *data)
     __intcall(0x15, &ireg, &oreg);
 
     if (!(oreg.eflags.l & EFLAGS_CF) && oreg.ecx.w[0]) {
-	rv = callback(data, (addr_t) 1 << 20, oreg.ecx.w[0] << 10, true);
+	rv = callback(data, (addr_t) 1 << 20, oreg.ecx.w[0] << 10, SMT_FREE);
 	if (rv)
 	    return rv;
 
 	if (oreg.edx.w[0]) {
-	    rv = callback(data, (addr_t) 16 << 20, oreg.edx.w[0] << 16, true);
+	    rv = callback(data, (addr_t) 16 << 20,
+			  oreg.edx.w[0] << 16, SMT_FREE);
 	    if (rv)
 		return rv;
 	}
@@ -150,7 +153,7 @@ int bios_scan_memory(scan_memory_callback_t callback, void *data)
     /* Finally try INT 15h AH=88h */
     ireg.eax.w[0] = 0x8800;
     if (!(oreg.eflags.l & EFLAGS_CF) && oreg.eax.w[0]) {
-	rv = callback(data, (addr_t) 1 << 20, oreg.ecx.w[0] << 10, true);
+	rv = callback(data, (addr_t) 1 << 20, oreg.ecx.w[0] << 10, SMT_FREE);
 	if (rv)
 	    return rv;
     }
diff --git a/core/mem/init.c b/core/mem/init.c
index ea9461c..c8aa96b 100644
--- a/core/mem/init.c
+++ b/core/mem/init.c
@@ -12,16 +12,17 @@ extern char __lowmem_heap[];
 extern char free_high_memory[];
 
 #define E820_MEM_MAX 0xfff00000	/* 4 GB - 1 MB */
-int scan_highmem_area(void *data, addr_t start, addr_t len, bool is_ram)
+int scan_highmem_area(void *data, addr_t start, addr_t len,
+		      enum syslinux_memmap_types type)
 {
 	struct free_arena_header *fp;
 
 	(void)data;
 
-	dprintf("start = %x, len = %x, is_ram = %d", start, len, is_ram);
+	dprintf("start = %x, len = %x, type = %d", start, len, type);
 
 	if (start < 0x100000 || start > E820_MEM_MAX
-			     || !is_ram)
+			     || !SMT_FREE)
 		return 0;
 
 	if (start < __com32.cs_memsize) {


More information about the Syslinux-commits mailing list