aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2010-07-04 08:32:38 -0400
committerKevin O'Connor <kevin@koconnor.net>2010-07-04 08:32:38 -0400
commitf79a462e521b622694c5e2e474008a43de690d7d (patch)
tree90df96817fcbeaa0db067d273eec17aaf96fc2f4 /src
parentafbed1bde45edc7829ac02644815796efc7dd4ac (diff)
downloadseabios-f79a462e521b622694c5e2e474008a43de690d7d.tar.gz
Add romfile_size() wrapper for accessing cbfs/qemu_cfg files.
Diffstat (limited to 'src')
-rw-r--r--src/paravirt.c11
-rw-r--r--src/paravirt.h6
2 files changed, 15 insertions, 2 deletions
diff --git a/src/paravirt.c b/src/paravirt.c
index 00ff58ca..da72c71d 100644
--- a/src/paravirt.c
+++ b/src/paravirt.c
@@ -339,14 +339,21 @@ u32 qemu_cfg_find_file(const char *name)
return __cfg_next_prefix_file(name, strlen(name) + 1, 0);
}
+int qemu_cfg_size_file(u32 select)
+{
+ if (select != ntohs(LastFile.select))
+ return -1;
+ return ntohl(LastFile.size);
+}
+
int qemu_cfg_read_file(u32 select, void *dst, u32 maxlen)
{
if (!qemu_cfg_present)
return -1;
if (!select || select != ntohs(LastFile.select))
return -1;
- int len = ntohl(LastFile.size);
- if (len > maxlen)
+ int len = qemu_cfg_size_file(select);
+ if (len < 0 || len > maxlen)
return -1;
qemu_cfg_read_entry(dst, select, len);
return len;
diff --git a/src/paravirt.h b/src/paravirt.h
index 83fe8ecf..7d4bc026 100644
--- a/src/paravirt.h
+++ b/src/paravirt.h
@@ -70,6 +70,7 @@ struct e820_reservation {
u32 qemu_cfg_next_prefix_file(const char *prefix, u32 prevselect);
u32 qemu_cfg_find_file(const char *name);
+int qemu_cfg_size_file(u32 select);
int qemu_cfg_read_file(u32 select, void *dst, u32 maxlen);
// Wrappers that select cbfs or qemu_cfg file interface.
@@ -83,6 +84,11 @@ static inline u32 romfile_find(const char *name) {
return (u32)cbfs_finddatafile(name);
return qemu_cfg_find_file(name);
}
+static inline u32 romfile_size(u32 fileid) {
+ if (CONFIG_COREBOOT)
+ return cbfs_datasize((void*)fileid);
+ return qemu_cfg_size_file(fileid);
+}
static inline int romfile_copy(u32 fileid, void *dst, u32 maxlen) {
if (CONFIG_COREBOOT)
return cbfs_copyfile((void*)fileid, dst, maxlen);