diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2010-07-04 08:32:38 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2010-07-04 08:32:38 -0400 |
commit | f79a462e521b622694c5e2e474008a43de690d7d (patch) | |
tree | 90df96817fcbeaa0db067d273eec17aaf96fc2f4 /src | |
parent | afbed1bde45edc7829ac02644815796efc7dd4ac (diff) | |
download | seabios-f79a462e521b622694c5e2e474008a43de690d7d.tar.gz |
Add romfile_size() wrapper for accessing cbfs/qemu_cfg files.
Diffstat (limited to 'src')
-rw-r--r-- | src/paravirt.c | 11 | ||||
-rw-r--r-- | src/paravirt.h | 6 |
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); |