aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Fleming <matt.fleming@intel.com>2013-07-16 18:13:17 +0100
committerMatt Fleming <matt.fleming@intel.com>2013-07-17 18:29:16 +0100
commita1331f8d04dbeb06d6f6c4c1fc736a50b0c0299a (patch)
treec401a8e91f9299afcabcbf6d4169a8f8263f920d
parent8f470e7bfe75f6401f6c5432988c620b863ad274 (diff)
downloadsyslinux-a1331f8d04dbeb06d6f6c4c1fc736a50b0c0299a.tar.gz
syslinux-a1331f8d04dbeb06d6f6c4c1fc736a50b0c0299a.tar.xz
syslinux-a1331f8d04dbeb06d6f6c4c1fc736a50b0c0299a.zip
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@intel.com>
-rw-r--r--com32/include/syslinux/memscan.h3
-rw-r--r--com32/lib/syslinux/memmap.c7
-rw-r--r--com32/lib/syslinux/memscan.c15
-rw-r--r--core/mem/init.c7
4 files changed, 18 insertions, 14 deletions
diff --git a/com32/include/syslinux/memscan.h b/com32/include/syslinux/memscan.h
index c3ebf847..7aabacba 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 12baa33a..563e91b0 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 0ff25d7f..2fa14a23 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 ea9461c1..c8aa96b3 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) {