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