[SeaBIOS] [PATCH 1/8] Add "romfile" code to assist with extract integer config settings.
Kevin O'Connor
kevin at koconnor.net
Wed Jul 6 03:08:53 CEST 2011
Add romfile_loadint() function which can be used to extract a
little-endian binary encoded integer from rom.
---
src/paravirt.c | 19 +++++++++++++++++++
src/paravirt.h | 1 +
2 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/src/paravirt.c b/src/paravirt.c
index 09e3d23..9cf77de 100644
--- a/src/paravirt.c
+++ b/src/paravirt.c
@@ -409,3 +409,22 @@ romfile_loadfile(const char *name, int *psize)
data[filesize] = '\0';
return data;
}
+
+// Attempt to load an integer from the given file - return 'defval'
+// if unsuccesful.
+u64
+romfile_loadint(const char *name, u64 defval)
+{
+ u32 file = romfile_find(name);
+ if (!file)
+ return defval;
+
+ int filesize = romfile_size(file);
+ if (!filesize || filesize > sizeof(u64) || (filesize & (filesize-1)))
+ // Doesn't look like a valid integer.
+ return defval;
+
+ u64 val = 0;
+ romfile_copy(file, &val, sizeof(val));
+ return val;
+}
diff --git a/src/paravirt.h b/src/paravirt.h
index 7bf34b1..83166f4 100644
--- a/src/paravirt.h
+++ b/src/paravirt.h
@@ -101,6 +101,7 @@ static inline const char* romfile_name(u32 fileid) {
return qemu_cfg_name_file(fileid);
}
void *romfile_loadfile(const char *name, int *psize);
+u64 romfile_loadint(const char *name, u64 defval);
u32 qemu_cfg_e820_entries(void);
void* qemu_cfg_e820_load_next(void *addr);
--
1.7.4.4
More information about the SeaBIOS
mailing list