byteorder.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Follows implementation found in linux/virtio_byteorder.h
  4. */
  5. #ifndef _LINUX_RPMSG_BYTEORDER_H
  6. #define _LINUX_RPMSG_BYTEORDER_H
  7. #include <linux/types.h>
  8. #include <uapi/linux/rpmsg_types.h>
  9. static inline bool rpmsg_is_little_endian(void)
  10. {
  11. #ifdef __LITTLE_ENDIAN
  12. return true;
  13. #else
  14. return false;
  15. #endif
  16. }
  17. static inline u16 __rpmsg16_to_cpu(bool little_endian, __rpmsg16 val)
  18. {
  19. if (little_endian)
  20. return le16_to_cpu((__force __le16)val);
  21. else
  22. return be16_to_cpu((__force __be16)val);
  23. }
  24. static inline __rpmsg16 __cpu_to_rpmsg16(bool little_endian, u16 val)
  25. {
  26. if (little_endian)
  27. return (__force __rpmsg16)cpu_to_le16(val);
  28. else
  29. return (__force __rpmsg16)cpu_to_be16(val);
  30. }
  31. static inline u32 __rpmsg32_to_cpu(bool little_endian, __rpmsg32 val)
  32. {
  33. if (little_endian)
  34. return le32_to_cpu((__force __le32)val);
  35. else
  36. return be32_to_cpu((__force __be32)val);
  37. }
  38. static inline __rpmsg32 __cpu_to_rpmsg32(bool little_endian, u32 val)
  39. {
  40. if (little_endian)
  41. return (__force __rpmsg32)cpu_to_le32(val);
  42. else
  43. return (__force __rpmsg32)cpu_to_be32(val);
  44. }
  45. static inline u64 __rpmsg64_to_cpu(bool little_endian, __rpmsg64 val)
  46. {
  47. if (little_endian)
  48. return le64_to_cpu((__force __le64)val);
  49. else
  50. return be64_to_cpu((__force __be64)val);
  51. }
  52. static inline __rpmsg64 __cpu_to_rpmsg64(bool little_endian, u64 val)
  53. {
  54. if (little_endian)
  55. return (__force __rpmsg64)cpu_to_le64(val);
  56. else
  57. return (__force __rpmsg64)cpu_to_be64(val);
  58. }
  59. #endif /* _LINUX_RPMSG_BYTEORDER_H */