[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