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