1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
26c8e6483SLevin, Alexander (Sasha Levin) #ifndef _LINUX_UNALIGNED_PACKED_STRUCT_H
36c8e6483SLevin, Alexander (Sasha Levin) #define _LINUX_UNALIGNED_PACKED_STRUCT_H
46c8e6483SLevin, Alexander (Sasha Levin)
56c8e6483SLevin, Alexander (Sasha Levin) #include <linux/kernel.h>
66c8e6483SLevin, Alexander (Sasha Levin)
76c8e6483SLevin, Alexander (Sasha Levin) struct __una_u16 { u16 x; } __packed;
86c8e6483SLevin, Alexander (Sasha Levin) struct __una_u32 { u32 x; } __packed;
96c8e6483SLevin, Alexander (Sasha Levin) struct __una_u64 { u64 x; } __packed;
106c8e6483SLevin, Alexander (Sasha Levin)
__get_unaligned_cpu16(const void * p)116c8e6483SLevin, Alexander (Sasha Levin) static inline u16 __get_unaligned_cpu16(const void *p)
126c8e6483SLevin, Alexander (Sasha Levin) {
136c8e6483SLevin, Alexander (Sasha Levin) const struct __una_u16 *ptr = (const struct __una_u16 *)p;
146c8e6483SLevin, Alexander (Sasha Levin) return ptr->x;
156c8e6483SLevin, Alexander (Sasha Levin) }
166c8e6483SLevin, Alexander (Sasha Levin)
__get_unaligned_cpu32(const void * p)176c8e6483SLevin, Alexander (Sasha Levin) static inline u32 __get_unaligned_cpu32(const void *p)
186c8e6483SLevin, Alexander (Sasha Levin) {
196c8e6483SLevin, Alexander (Sasha Levin) const struct __una_u32 *ptr = (const struct __una_u32 *)p;
206c8e6483SLevin, Alexander (Sasha Levin) return ptr->x;
216c8e6483SLevin, Alexander (Sasha Levin) }
226c8e6483SLevin, Alexander (Sasha Levin)
__get_unaligned_cpu64(const void * p)236c8e6483SLevin, Alexander (Sasha Levin) static inline u64 __get_unaligned_cpu64(const void *p)
246c8e6483SLevin, Alexander (Sasha Levin) {
256c8e6483SLevin, Alexander (Sasha Levin) const struct __una_u64 *ptr = (const struct __una_u64 *)p;
266c8e6483SLevin, Alexander (Sasha Levin) return ptr->x;
276c8e6483SLevin, Alexander (Sasha Levin) }
286c8e6483SLevin, Alexander (Sasha Levin)
__put_unaligned_cpu16(u16 val,void * p)296c8e6483SLevin, Alexander (Sasha Levin) static inline void __put_unaligned_cpu16(u16 val, void *p)
306c8e6483SLevin, Alexander (Sasha Levin) {
316c8e6483SLevin, Alexander (Sasha Levin) struct __una_u16 *ptr = (struct __una_u16 *)p;
326c8e6483SLevin, Alexander (Sasha Levin) ptr->x = val;
336c8e6483SLevin, Alexander (Sasha Levin) }
346c8e6483SLevin, Alexander (Sasha Levin)
__put_unaligned_cpu32(u32 val,void * p)356c8e6483SLevin, Alexander (Sasha Levin) static inline void __put_unaligned_cpu32(u32 val, void *p)
366c8e6483SLevin, Alexander (Sasha Levin) {
376c8e6483SLevin, Alexander (Sasha Levin) struct __una_u32 *ptr = (struct __una_u32 *)p;
386c8e6483SLevin, Alexander (Sasha Levin) ptr->x = val;
396c8e6483SLevin, Alexander (Sasha Levin) }
406c8e6483SLevin, Alexander (Sasha Levin)
__put_unaligned_cpu64(u64 val,void * p)416c8e6483SLevin, Alexander (Sasha Levin) static inline void __put_unaligned_cpu64(u64 val, void *p)
426c8e6483SLevin, Alexander (Sasha Levin) {
436c8e6483SLevin, Alexander (Sasha Levin) struct __una_u64 *ptr = (struct __una_u64 *)p;
446c8e6483SLevin, Alexander (Sasha Levin) ptr->x = val;
456c8e6483SLevin, Alexander (Sasha Levin) }
466c8e6483SLevin, Alexander (Sasha Levin)
476c8e6483SLevin, Alexander (Sasha Levin) #endif /* _LINUX_UNALIGNED_PACKED_STRUCT_H */
48