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