summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Georgi <Patrick.Georgi@secunet.com>2012-03-09 12:54:03 +0100
committerStefan Reinauer <stefan.reinauer@coreboot.org>2012-04-03 18:33:47 +0200
commit4a2daf6a99dcdcf177bf9e0d630fec8b5b65ca30 (patch)
tree6b288a092ec06ee4e774c12d5cc6f9395e24234b
parent3bbd2bfa1c2343c6f28e7a1935c485848340116e (diff)
nvramtool: 64bit safe CBFS handling
Change-Id: I4f23ee04cd6479e55e9467af1b0196936412deb1 Signed-off-by: Patrick Georgi <Patrick.Georgi@secunet.com> Reviewed-on: http://review.coreboot.org/846 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
-rw-r--r--util/nvramtool/cbfs.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/util/nvramtool/cbfs.c b/util/nvramtool/cbfs.c
index 8dc8b91901..801ee586b3 100644
--- a/util/nvramtool/cbfs.c
+++ b/util/nvramtool/cbfs.c
@@ -33,10 +33,10 @@
#define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask))
static void *cbfs_mapped;
-static u32 cbfs_offset;
+static void *cbfs_offset;
static void* virt_to_phys(u32 virt)
{
- return (void*)(virt+cbfs_offset);
+ return cbfs_offset + virt;
}
#ifdef DEBUG
@@ -71,11 +71,11 @@ static struct cbfs_header *cbfs_master_header(void)
struct cbfs_file *cbfs_find(const char *name)
{
struct cbfs_header *header = cbfs_master_header();
- unsigned long offset;
+ void *offset;
if (header == NULL)
return NULL;
- offset = (u32)virt_to_phys(0 - ntohl(header->romsize) + ntohl(header->offset));
+ offset = virt_to_phys(0 - ntohl(header->romsize) + ntohl(header->offset));
int align= ntohl(header->align);
@@ -88,14 +88,14 @@ struct cbfs_file *cbfs_find(const char *name)
int flen = ntohl(file->len);
int foffset = ntohl(file->offset);
- debug("CBFS: follow chain: %p + %x + %x + align -> ", (void *)offset, foffset, flen);
+ debug("CBFS: follow chain: %p + %x + %x + align -> ", offset, foffset, flen);
- unsigned long oldoffset = offset;
- offset = ALIGN(offset + foffset + flen, align);
+ void *oldoffset = offset;
+ offset = (void*)ALIGN((uintptr_t)(offset + foffset + flen), align);
debug("%p\n", (void *)offset);
if (offset <= oldoffset) return NULL;
- if (offset < (u32)virt_to_phys(0xFFFFFFFF - ntohl(header->romsize)))
+ if (offset < virt_to_phys(0xFFFFFFFF - ntohl(header->romsize)))
return NULL;
}
}
@@ -141,6 +141,6 @@ void open_cbfs(const char *filename)
printf("Couldn't map '%s'\n", filename);
exit(-1);
}
- cbfs_offset = (uint32_t)cbfs_mapped-(0xffffffff-cbfs_stat.st_size+1);
+ cbfs_offset = cbfs_mapped-(0xffffffff-cbfs_stat.st_size+1);
}