diff options
author | Stefan Reinauer <stepan@openbios.org> | 2005-11-14 23:04:55 +0000 |
---|---|---|
committer | Stefan Reinauer <stepan@openbios.org> | 2005-11-14 23:04:55 +0000 |
commit | 0d304c18e2cf1451a45c69aac61198d896da1e4d (patch) | |
tree | 3e0e47da22601967fb4c5b9c5c4ee31befe818fc /src/include | |
parent | 8af7998bacc11c66381836c28b099a4407da955c (diff) | |
download | coreboot-0d304c18e2cf1451a45c69aac61198d896da1e4d.tar.xz |
comment and unify lb_uint64 handling as discussed on the mailinglist
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2086 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/include')
-rw-r--r-- | src/include/boot/linuxbios_tables.h | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/src/include/boot/linuxbios_tables.h b/src/include/boot/linuxbios_tables.h index 9288d3b23c..527c44d5fc 100644 --- a/src/include/boot/linuxbios_tables.h +++ b/src/include/boot/linuxbios_tables.h @@ -31,6 +31,40 @@ * table entries and be backwards compatible, but it is not required. */ +/* Since LinuxBIOS is usually compiled 32bit, gcc will align 64bit + * types to 32bit boundaries. If the LinuxBIOS table is dumped on a + * 64bit system, a uint64_t would be aligned to 64bit boundaries, + * breaking the table format. + * + * lb_uint64 will keep 64bit LinuxBIOS table values aligned to 32bit + * to ensure compatibility. They can be accessed with the two functions + * below: unpack_lb64() and pack_lb64() + * + * See also: util/lbtdump/lbtdump.c + */ + +struct lb_uint64 { + uint32_t lo; + uint32_t hi; +}; + +static inline uint64_t unpack_lb64(struct lb_uint64 value) +{ + uint64_t result; + result = value.hi; + result = (result << 32) + value.lo; + return result; +} + +static inline struct lb_uint64 pack_lb64(uint64_t value) +{ + struct lb_uint64 result; + result.lo = (value >> 0) & 0xffffffff; + result.hi = (value >> 32) & 0xffffffff; + return result; +} + + struct lb_header { @@ -57,10 +91,6 @@ struct lb_record { #define LB_TAG_MEMORY 0x0001 -struct lb_uint64 { - uint32_t lo; - uint32_t hi; -}; struct lb_memory_range { struct lb_uint64 start; struct lb_uint64 size; |