xref: /linux/tools/include/tools/be_byteshift.h (revision b35310627f396efcc25d71fb343b3aa02039d20d)
1a07f7672SMatt Fleming #ifndef _TOOLS_BE_BYTESHIFT_H
2a07f7672SMatt Fleming #define _TOOLS_BE_BYTESHIFT_H
3a07f7672SMatt Fleming 
4*b3531062SYaakov Selkowitz #include <stdint.h>
5a07f7672SMatt Fleming 
6*b3531062SYaakov Selkowitz static inline uint16_t __get_unaligned_be16(const uint8_t *p)
7a07f7672SMatt Fleming {
8a07f7672SMatt Fleming 	return p[0] << 8 | p[1];
9a07f7672SMatt Fleming }
10a07f7672SMatt Fleming 
11*b3531062SYaakov Selkowitz static inline uint32_t __get_unaligned_be32(const uint8_t *p)
12a07f7672SMatt Fleming {
13a07f7672SMatt Fleming 	return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3];
14a07f7672SMatt Fleming }
15a07f7672SMatt Fleming 
16*b3531062SYaakov Selkowitz static inline uint64_t __get_unaligned_be64(const uint8_t *p)
17a07f7672SMatt Fleming {
18*b3531062SYaakov Selkowitz 	return (uint64_t)__get_unaligned_be32(p) << 32 |
19a07f7672SMatt Fleming 	       __get_unaligned_be32(p + 4);
20a07f7672SMatt Fleming }
21a07f7672SMatt Fleming 
22*b3531062SYaakov Selkowitz static inline void __put_unaligned_be16(uint16_t val, uint8_t *p)
23a07f7672SMatt Fleming {
24a07f7672SMatt Fleming 	*p++ = val >> 8;
25a07f7672SMatt Fleming 	*p++ = val;
26a07f7672SMatt Fleming }
27a07f7672SMatt Fleming 
28*b3531062SYaakov Selkowitz static inline void __put_unaligned_be32(uint32_t val, uint8_t *p)
29a07f7672SMatt Fleming {
30a07f7672SMatt Fleming 	__put_unaligned_be16(val >> 16, p);
31a07f7672SMatt Fleming 	__put_unaligned_be16(val, p + 2);
32a07f7672SMatt Fleming }
33a07f7672SMatt Fleming 
34*b3531062SYaakov Selkowitz static inline void __put_unaligned_be64(uint64_t val, uint8_t *p)
35a07f7672SMatt Fleming {
36a07f7672SMatt Fleming 	__put_unaligned_be32(val >> 32, p);
37a07f7672SMatt Fleming 	__put_unaligned_be32(val, p + 4);
38a07f7672SMatt Fleming }
39a07f7672SMatt Fleming 
40*b3531062SYaakov Selkowitz static inline uint16_t get_unaligned_be16(const void *p)
41a07f7672SMatt Fleming {
42*b3531062SYaakov Selkowitz 	return __get_unaligned_be16((const uint8_t *)p);
43a07f7672SMatt Fleming }
44a07f7672SMatt Fleming 
45*b3531062SYaakov Selkowitz static inline uint32_t get_unaligned_be32(const void *p)
46a07f7672SMatt Fleming {
47*b3531062SYaakov Selkowitz 	return __get_unaligned_be32((const uint8_t *)p);
48a07f7672SMatt Fleming }
49a07f7672SMatt Fleming 
50*b3531062SYaakov Selkowitz static inline uint64_t get_unaligned_be64(const void *p)
51a07f7672SMatt Fleming {
52*b3531062SYaakov Selkowitz 	return __get_unaligned_be64((const uint8_t *)p);
53a07f7672SMatt Fleming }
54a07f7672SMatt Fleming 
55*b3531062SYaakov Selkowitz static inline void put_unaligned_be16(uint16_t val, void *p)
56a07f7672SMatt Fleming {
57a07f7672SMatt Fleming 	__put_unaligned_be16(val, p);
58a07f7672SMatt Fleming }
59a07f7672SMatt Fleming 
60*b3531062SYaakov Selkowitz static inline void put_unaligned_be32(uint32_t val, void *p)
61a07f7672SMatt Fleming {
62a07f7672SMatt Fleming 	__put_unaligned_be32(val, p);
63a07f7672SMatt Fleming }
64a07f7672SMatt Fleming 
65*b3531062SYaakov Selkowitz static inline void put_unaligned_be64(uint64_t val, void *p)
66a07f7672SMatt Fleming {
67a07f7672SMatt Fleming 	__put_unaligned_be64(val, p);
68a07f7672SMatt Fleming }
69a07f7672SMatt Fleming 
70a07f7672SMatt Fleming #endif /* _TOOLS_BE_BYTESHIFT_H */
71