be_byteshift.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _LINUX_UNALIGNED_BE_BYTESHIFT_H
  3. #define _LINUX_UNALIGNED_BE_BYTESHIFT_H
  4. #include <linux/types.h>
  5. static inline u16 __get_unaligned_be16(const u8 *p)
  6. {
  7. return p[0] << 8 | p[1];
  8. }
  9. static inline u32 __get_unaligned_be32(const u8 *p)
  10. {
  11. return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3];
  12. }
  13. static inline u64 __get_unaligned_be64(const u8 *p)
  14. {
  15. return (u64)__get_unaligned_be32(p) << 32 |
  16. __get_unaligned_be32(p + 4);
  17. }
  18. static inline void __put_unaligned_be16(u16 val, u8 *p)
  19. {
  20. *p++ = val >> 8;
  21. *p++ = val;
  22. }
  23. static inline void __put_unaligned_be32(u32 val, u8 *p)
  24. {
  25. __put_unaligned_be16(val >> 16, p);
  26. __put_unaligned_be16(val, p + 2);
  27. }
  28. static inline void __put_unaligned_be64(u64 val, u8 *p)
  29. {
  30. __put_unaligned_be32(val >> 32, p);
  31. __put_unaligned_be32(val, p + 4);
  32. }
  33. static inline u16 get_unaligned_be16(const void *p)
  34. {
  35. return __get_unaligned_be16(p);
  36. }
  37. static inline u32 get_unaligned_be32(const void *p)
  38. {
  39. return __get_unaligned_be32(p);
  40. }
  41. static inline u64 get_unaligned_be64(const void *p)
  42. {
  43. return __get_unaligned_be64(p);
  44. }
  45. static inline void put_unaligned_be16(u16 val, void *p)
  46. {
  47. __put_unaligned_be16(val, p);
  48. }
  49. static inline void put_unaligned_be32(u32 val, void *p)
  50. {
  51. __put_unaligned_be32(val, p);
  52. }
  53. static inline void put_unaligned_be64(u64 val, void *p)
  54. {
  55. __put_unaligned_be64(val, p);
  56. }
  57. #endif /* _LINUX_UNALIGNED_BE_BYTESHIFT_H */