diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2010-03-26 16:05:15 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2010-03-30 14:14:58 +0200 |
commit | 3348c8199235cacaf6ca56d277a9cbf1ab2c5d0a (patch) | |
tree | 3851bb6429035592fd3d021e83f6a307141db98f /include/unaligned/be_byteshift.h | |
parent | d03831887e5ed21ae1052f99d1f6b9c61f655ab2 (diff) | |
download | barebox-3348c8199235cacaf6ca56d277a9cbf1ab2c5d0a.tar.gz barebox-3348c8199235cacaf6ca56d277a9cbf1ab2c5d0a.tar.xz |
add unaligned access support
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'include/unaligned/be_byteshift.h')
-rw-r--r-- | include/unaligned/be_byteshift.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/include/unaligned/be_byteshift.h b/include/unaligned/be_byteshift.h new file mode 100644 index 0000000000..9356b24223 --- /dev/null +++ b/include/unaligned/be_byteshift.h @@ -0,0 +1,70 @@ +#ifndef _LINUX_UNALIGNED_BE_BYTESHIFT_H +#define _LINUX_UNALIGNED_BE_BYTESHIFT_H + +#include <linux/types.h> + +static inline u16 __get_unaligned_be16(const u8 *p) +{ + return p[0] << 8 | p[1]; +} + +static inline u32 __get_unaligned_be32(const u8 *p) +{ + return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; +} + +static inline u64 __get_unaligned_be64(const u8 *p) +{ + return (u64)__get_unaligned_be32(p) << 32 | + __get_unaligned_be32(p + 4); +} + +static inline void __put_unaligned_be16(u16 val, u8 *p) +{ + *p++ = val >> 8; + *p++ = val; +} + +static inline void __put_unaligned_be32(u32 val, u8 *p) +{ + __put_unaligned_be16(val >> 16, p); + __put_unaligned_be16(val, p + 2); +} + +static inline void __put_unaligned_be64(u64 val, u8 *p) +{ + __put_unaligned_be32(val >> 32, p); + __put_unaligned_be32(val, p + 4); +} + +static inline u16 get_unaligned_be16(const void *p) +{ + return __get_unaligned_be16((const u8 *)p); +} + +static inline u32 get_unaligned_be32(const void *p) +{ + return __get_unaligned_be32((const u8 *)p); +} + +static inline u64 get_unaligned_be64(const void *p) +{ + return __get_unaligned_be64((const u8 *)p); +} + +static inline void put_unaligned_be16(u16 val, void *p) +{ + __put_unaligned_be16(val, p); +} + +static inline void put_unaligned_be32(u32 val, void *p) +{ + __put_unaligned_be32(val, p); +} + +static inline void put_unaligned_be64(u64 val, void *p) +{ + __put_unaligned_be64(val, p); +} + +#endif /* _LINUX_UNALIGNED_BE_BYTESHIFT_H */ |