1 #ifndef _LINUX_TYPES_H 2 #define _LINUX_TYPES_H 3 4 #include <asm/types.h> 5 6 #ifndef __ASSEMBLY__ 7 #ifdef __KERNEL__ 8 9 #define DECLARE_BITMAP(name,bits) \ 10 unsigned long name[BITS_TO_LONGS(bits)] 11 #else 12 #ifndef __EXPORTED_HEADERS__ 13 #warning "Attempt to use kernel headers from user space, see http://kernelnewbies.org/KernelHeaders" 14 #endif /* __EXPORTED_HEADERS__ */ 15 #endif 16 17 #include <linux/posix_types.h> 18 19 #ifdef __KERNEL__ 20 21 typedef __u32 __kernel_dev_t; 22 23 typedef __kernel_fd_set fd_set; 24 typedef __kernel_dev_t dev_t; 25 typedef __kernel_ino_t ino_t; 26 typedef __kernel_mode_t mode_t; 27 typedef unsigned short umode_t; 28 typedef __kernel_nlink_t nlink_t; 29 typedef __kernel_off_t off_t; 30 typedef __kernel_pid_t pid_t; 31 typedef __kernel_daddr_t daddr_t; 32 typedef __kernel_key_t key_t; 33 typedef __kernel_suseconds_t suseconds_t; 34 typedef __kernel_timer_t timer_t; 35 typedef __kernel_clockid_t clockid_t; 36 typedef __kernel_mqd_t mqd_t; 37 38 typedef _Bool bool; 39 40 typedef __kernel_uid32_t uid_t; 41 typedef __kernel_gid32_t gid_t; 42 typedef __kernel_uid16_t uid16_t; 43 typedef __kernel_gid16_t gid16_t; 44 45 typedef unsigned long uintptr_t; 46 47 #ifdef CONFIG_UID16 48 /* This is defined by include/asm-{arch}/posix_types.h */ 49 typedef __kernel_old_uid_t old_uid_t; 50 typedef __kernel_old_gid_t old_gid_t; 51 #endif /* CONFIG_UID16 */ 52 53 #if defined(__GNUC__) 54 typedef __kernel_loff_t loff_t; 55 #endif 56 57 /* 58 * The following typedefs are also protected by individual ifdefs for 59 * historical reasons: 60 */ 61 #ifndef _SIZE_T 62 #define _SIZE_T 63 typedef __kernel_size_t size_t; 64 #endif 65 66 #ifndef _SSIZE_T 67 #define _SSIZE_T 68 typedef __kernel_ssize_t ssize_t; 69 #endif 70 71 #ifndef _PTRDIFF_T 72 #define _PTRDIFF_T 73 typedef __kernel_ptrdiff_t ptrdiff_t; 74 #endif 75 76 #ifndef _TIME_T 77 #define _TIME_T 78 typedef __kernel_time_t time_t; 79 #endif 80 81 #ifndef _CLOCK_T 82 #define _CLOCK_T 83 typedef __kernel_clock_t clock_t; 84 #endif 85 86 #ifndef _CADDR_T 87 #define _CADDR_T 88 typedef __kernel_caddr_t caddr_t; 89 #endif 90 91 /* bsd */ 92 typedef unsigned char u_char; 93 typedef unsigned short u_short; 94 typedef unsigned int u_int; 95 typedef unsigned long u_long; 96 97 /* sysv */ 98 typedef unsigned char unchar; 99 typedef unsigned short ushort; 100 typedef unsigned int uint; 101 typedef unsigned long ulong; 102 103 #ifndef __BIT_TYPES_DEFINED__ 104 #define __BIT_TYPES_DEFINED__ 105 106 typedef __u8 u_int8_t; 107 typedef __s8 int8_t; 108 typedef __u16 u_int16_t; 109 typedef __s16 int16_t; 110 typedef __u32 u_int32_t; 111 typedef __s32 int32_t; 112 113 #endif /* !(__BIT_TYPES_DEFINED__) */ 114 115 typedef __u8 uint8_t; 116 typedef __u16 uint16_t; 117 typedef __u32 uint32_t; 118 119 #if defined(__GNUC__) 120 typedef __u64 uint64_t; 121 typedef __u64 u_int64_t; 122 typedef __s64 int64_t; 123 #endif 124 125 /* this is a special 64bit data type that is 8-byte aligned */ 126 #define aligned_u64 __u64 __attribute__((aligned(8))) 127 #define aligned_be64 __be64 __attribute__((aligned(8))) 128 #define aligned_le64 __le64 __attribute__((aligned(8))) 129 130 /** 131 * The type used for indexing onto a disc or disc partition. 132 * 133 * Linux always considers sectors to be 512 bytes long independently 134 * of the devices real block size. 135 * 136 * blkcnt_t is the type of the inode's block count. 137 */ 138 #ifdef CONFIG_LBDAF 139 typedef u64 sector_t; 140 typedef u64 blkcnt_t; 141 #else 142 typedef unsigned long sector_t; 143 typedef unsigned long blkcnt_t; 144 #endif 145 146 /* 147 * The type of an index into the pagecache. Use a #define so asm/types.h 148 * can override it. 149 */ 150 #ifndef pgoff_t 151 #define pgoff_t unsigned long 152 #endif 153 154 #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 155 typedef u64 dma_addr_t; 156 #else 157 typedef u32 dma_addr_t; 158 #endif /* dma_addr_t */ 159 160 #endif /* __KERNEL__ */ 161 162 /* 163 * Below are truly Linux-specific types that should never collide with 164 * any application/library that wants linux/types.h. 165 */ 166 167 #ifdef __CHECKER__ 168 #define __bitwise__ __attribute__((bitwise)) 169 #else 170 #define __bitwise__ 171 #endif 172 #ifdef __CHECK_ENDIAN__ 173 #define __bitwise __bitwise__ 174 #else 175 #define __bitwise 176 #endif 177 178 typedef __u16 __bitwise __le16; 179 typedef __u16 __bitwise __be16; 180 typedef __u32 __bitwise __le32; 181 typedef __u32 __bitwise __be32; 182 typedef __u64 __bitwise __le64; 183 typedef __u64 __bitwise __be64; 184 185 typedef __u16 __bitwise __sum16; 186 typedef __u32 __bitwise __wsum; 187 188 /* 189 * aligned_u64 should be used in defining kernel<->userspace ABIs to avoid 190 * common 32/64-bit compat problems. 191 * 64-bit values align to 4-byte boundaries on x86_32 (and possibly other 192 * architectures) and to 8-byte boundaries on 64-bit architectures. The new 193 * aligned_64 type enforces 8-byte alignment so that structs containing 194 * aligned_64 values have the same alignment on 32-bit and 64-bit architectures. 195 * No conversions are necessary between 32-bit user-space and a 64-bit kernel. 196 */ 197 #define __aligned_u64 __u64 __attribute__((aligned(8))) 198 #define __aligned_be64 __be64 __attribute__((aligned(8))) 199 #define __aligned_le64 __le64 __attribute__((aligned(8))) 200 201 #ifdef __KERNEL__ 202 typedef unsigned __bitwise__ gfp_t; 203 typedef unsigned __bitwise__ fmode_t; 204 205 #ifdef CONFIG_PHYS_ADDR_T_64BIT 206 typedef u64 phys_addr_t; 207 #else 208 typedef u32 phys_addr_t; 209 #endif 210 211 typedef phys_addr_t resource_size_t; 212 213 /* 214 * This type is the placeholder for a hardware interrupt number. It has to be 215 * big enough to enclose whatever representation is used by a given platform. 216 */ 217 typedef unsigned long irq_hw_number_t; 218 219 typedef struct { 220 int counter; 221 } atomic_t; 222 223 #ifdef CONFIG_64BIT 224 typedef struct { 225 long counter; 226 } atomic64_t; 227 #endif 228 229 struct list_head { 230 struct list_head *next, *prev; 231 }; 232 233 struct hlist_head { 234 struct hlist_node *first; 235 }; 236 237 struct hlist_node { 238 struct hlist_node *next, **pprev; 239 }; 240 241 struct ustat { 242 __kernel_daddr_t f_tfree; 243 __kernel_ino_t f_tinode; 244 char f_fname[6]; 245 char f_fpack[6]; 246 }; 247 248 /** 249 * struct rcu_head - callback structure for use with RCU 250 * @next: next update requests in a list 251 * @func: actual update function to call after the grace period. 252 */ 253 struct rcu_head { 254 struct rcu_head *next; 255 void (*func)(struct rcu_head *head); 256 }; 257 258 #endif /* __KERNEL__ */ 259 #endif /* __ASSEMBLY__ */ 260 #endif /* _LINUX_TYPES_H */ 261