Messages in this thread Patch in this message | | | Subject | Re: [RFC PATCH] kernel: add byteorder macros with alignment fixups | From | Harvey Harrison <> | Date | Thu, 20 Mar 2008 12:22:33 -0700 |
| |
Create linux/unaligned.h to hold a common pattern in the kernel:
le32_to_cpu(get_unaligned((__le32 *)x));
Repeat for various combinations of le/be and 64/32/16 bit. Add a variant that operates on possibly unaligned pointers to byteorder/generic.h
Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com> --- Now the indirect include of asm/unaligned is opt-in when places add the linux/unaligned header.
include/linux/unaligned.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/include/linux/unaligned.h b/include/linux/unaligned.h new file mode 100644 index 0000000..7d8fddc --- /dev/null +++ b/include/linux/unaligned.h @@ -0,0 +1,42 @@ +#ifndef _LINUX_UNALIGNED_H_ +#define _LINUX_UNALIGNED_H_ + +#include <linux/types.h> +#include <asm/byteorder.h> +#include <asm/unaligned.h> + +#ifdef __KERNEL__ + +static inline u64 le64_to_cpu_unaligned(void *p) +{ + return __le64_to_cpu(get_unaligned((__le64 *)p)); +} + +static inline u32 le32_to_cpu_unaligned(void *p) +{ + return __le32_to_cpu(get_unaligned((__le32 *)p)); +} + +static inline u16 le16_to_cpu_unaligned(void *p) +{ + return __le16_to_cpu(get_unaligned((__le16 *)p)); +} + +static inline u64 be64_to_cpu_unaligned(void *p) +{ + return __be64_to_cpu(get_unaligned((__be64 *)p)); +} + +static inline u32 be32_to_cpu_unaligned(void *p) +{ + return __be32_to_cpu(get_unaligned((__be32 *)p)); +} + +static inline u16 be16_to_cpu_unaligned(void *p) +{ + return __be16_to_cpu(get_unaligned((__be16 *)p)); +} + +#endif /* KERNEL */ + +#endif /* _LINUX_UNALIGNED_H */ -- 1.5.4.4.684.g0e08
| |