packed_struct.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef _LINUX_UNALIGNED_PACKED_STRUCT_H
  3. #define _LINUX_UNALIGNED_PACKED_STRUCT_H
  4. #include <linux/kernel.h>
  5. struct __una_u16 { u16 x; } __packed;
  6. struct __una_u32 { u32 x; } __packed;
  7. struct __una_u64 { u64 x; } __packed;
  8. static inline u16 __get_unaligned_cpu16(const void *p)
  9. {
  10. const struct __una_u16 *ptr = (const struct __una_u16 *)p;
  11. return ptr->x;
  12. }
  13. static inline u32 __get_unaligned_cpu32(const void *p)
  14. {
  15. const struct __una_u32 *ptr = (const struct __una_u32 *)p;
  16. return ptr->x;
  17. }
  18. static inline u64 __get_unaligned_cpu64(const void *p)
  19. {
  20. const struct __una_u64 *ptr = (const struct __una_u64 *)p;
  21. return ptr->x;
  22. }
  23. static inline void __put_unaligned_cpu16(u16 val, void *p)
  24. {
  25. struct __una_u16 *ptr = (struct __una_u16 *)p;
  26. ptr->x = val;
  27. }
  28. static inline void __put_unaligned_cpu32(u32 val, void *p)
  29. {
  30. struct __una_u32 *ptr = (struct __una_u32 *)p;
  31. ptr->x = val;
  32. }
  33. static inline void __put_unaligned_cpu64(u64 val, void *p)
  34. {
  35. struct __una_u64 *ptr = (struct __una_u64 *)p;
  36. ptr->x = val;
  37. }
  38. #endif /* _LINUX_UNALIGNED_PACKED_STRUCT_H */