1e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#ifndef _LINUX_TYPES_H
2e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#define _LINUX_TYPES_H
3e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy
4e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#include <asm/types.h>
5e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy
6350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardt#ifndef __ASSEMBLY__
7e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy
8350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardt#include <linux/posix_types.h>
9e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy
10e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy
11e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy/*
12e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy * Below are truly Linux-specific types that should never collide with
13e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy * any application/library that wants linux/types.h.
14e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy */
15e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy
16e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#ifdef __CHECKER__
17e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#define __bitwise__ __attribute__((bitwise))
18e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#else
19e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#define __bitwise__
20e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#endif
21e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#ifdef __CHECK_ENDIAN__
22e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#define __bitwise __bitwise__
23e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#else
24e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#define __bitwise
25e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#endif
26e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy
27e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardytypedef __u16 __bitwise __le16;
28e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardytypedef __u16 __bitwise __be16;
29e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardytypedef __u32 __bitwise __le32;
30e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardytypedef __u32 __bitwise __be32;
31e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardytypedef __u64 __bitwise __le64;
32e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardytypedef __u64 __bitwise __be64;
33978e27e8f8c2e49d0528c6c4ae3a56627fbe8492Jan Engelhardt
34e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardytypedef __u16 __bitwise __sum16;
35e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardytypedef __u32 __bitwise __wsum;
36e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy
37dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt/*
38dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt * aligned_u64 should be used in defining kernel<->userspace ABIs to avoid
39dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt * common 32/64-bit compat problems.
40dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt * 64-bit values align to 4-byte boundaries on x86_32 (and possibly other
41dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt * architectures) and to 8-byte boundaries on 64-bit architetures.  The new
42dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt * aligned_64 type enforces 8-byte alignment so that structs containing
43dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt * aligned_64 values have the same alignment on 32-bit and 64-bit architectures.
44dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt * No conversions are necessary between 32-bit user-space and a 64-bit kernel.
45dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt */
46dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt#define __aligned_u64 __u64 __attribute__((aligned(8)))
47dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt#define __aligned_be64 __be64 __attribute__((aligned(8)))
48dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt#define __aligned_le64 __le64 __attribute__((aligned(8)))
49dbe77cc974cee656eae37e75039dd1a410a4535bJan Engelhardt
50350661a6eb089f3e54e67e022db9e16ea280499fJan Engelhardt#endif /*  __ASSEMBLY__ */
51e0bba47e550420e371c97425cc6d39909a6e059bPatrick McHardy#endif /* _LINUX_TYPES_H */
52