types.h 4.6 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3
#ifndef _LINUX_TYPES_H
#define _LINUX_TYPES_H

4 5
#define __EXPORTED_HEADERS__
#include <uapi/linux/types.h>
6

7
#ifndef __ASSEMBLY__
L
Linus Torvalds 已提交
8 9 10 11 12 13 14 15 16 17

#define DECLARE_BITMAP(name,bits) \
	unsigned long name[BITS_TO_LONGS(bits)]

typedef __u32 __kernel_dev_t;

typedef __kernel_fd_set		fd_set;
typedef __kernel_dev_t		dev_t;
typedef __kernel_ino_t		ino_t;
typedef __kernel_mode_t		mode_t;
A
Al Viro 已提交
18
typedef unsigned short		umode_t;
19
typedef __u32			nlink_t;
L
Linus Torvalds 已提交
20 21 22 23 24 25 26 27 28
typedef __kernel_off_t		off_t;
typedef __kernel_pid_t		pid_t;
typedef __kernel_daddr_t	daddr_t;
typedef __kernel_key_t		key_t;
typedef __kernel_suseconds_t	suseconds_t;
typedef __kernel_timer_t	timer_t;
typedef __kernel_clockid_t	clockid_t;
typedef __kernel_mqd_t		mqd_t;

R
Richard Knutsson 已提交
29 30
typedef _Bool			bool;

L
Linus Torvalds 已提交
31 32 33 34 35
typedef __kernel_uid32_t	uid_t;
typedef __kernel_gid32_t	gid_t;
typedef __kernel_uid16_t        uid16_t;
typedef __kernel_gid16_t        gid16_t;

A
Al Viro 已提交
36 37
typedef unsigned long		uintptr_t;

L
Linus Torvalds 已提交
38 39 40 41 42 43
#ifdef CONFIG_UID16
/* This is defined by include/asm-{arch}/posix_types.h */
typedef __kernel_old_uid_t	old_uid_t;
typedef __kernel_old_gid_t	old_gid_t;
#endif /* CONFIG_UID16 */

44
#if defined(__GNUC__)
L
Linus Torvalds 已提交
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
typedef __kernel_loff_t		loff_t;
#endif

/*
 * The following typedefs are also protected by individual ifdefs for
 * historical reasons:
 */
#ifndef _SIZE_T
#define _SIZE_T
typedef __kernel_size_t		size_t;
#endif

#ifndef _SSIZE_T
#define _SSIZE_T
typedef __kernel_ssize_t	ssize_t;
#endif

#ifndef _PTRDIFF_T
#define _PTRDIFF_T
typedef __kernel_ptrdiff_t	ptrdiff_t;
#endif

#ifndef _TIME_T
#define _TIME_T
typedef __kernel_time_t		time_t;
#endif

#ifndef _CLOCK_T
#define _CLOCK_T
typedef __kernel_clock_t	clock_t;
#endif

#ifndef _CADDR_T
#define _CADDR_T
typedef __kernel_caddr_t	caddr_t;
#endif

/* bsd */
typedef unsigned char		u_char;
typedef unsigned short		u_short;
typedef unsigned int		u_int;
typedef unsigned long		u_long;

/* sysv */
typedef unsigned char		unchar;
typedef unsigned short		ushort;
typedef unsigned int		uint;
typedef unsigned long		ulong;

#ifndef __BIT_TYPES_DEFINED__
#define __BIT_TYPES_DEFINED__

typedef		__u8		u_int8_t;
typedef		__s8		int8_t;
typedef		__u16		u_int16_t;
typedef		__s16		int16_t;
typedef		__u32		u_int32_t;
typedef		__s32		int32_t;

#endif /* !(__BIT_TYPES_DEFINED__) */

typedef		__u8		uint8_t;
typedef		__u16		uint16_t;
typedef		__u32		uint32_t;

110
#if defined(__GNUC__)
L
Linus Torvalds 已提交
111 112 113 114 115
typedef		__u64		uint64_t;
typedef		__u64		u_int64_t;
typedef		__s64		int64_t;
#endif

A
Andrew Morton 已提交
116
/* this is a special 64bit data type that is 8-byte aligned */
117
#define aligned_u64 __u64 __attribute__((aligned(8)))
A
Al Viro 已提交
118 119
#define aligned_be64 __be64 __attribute__((aligned(8)))
#define aligned_le64 __le64 __attribute__((aligned(8)))
120

121
/**
L
Linus Torvalds 已提交
122
 * The type used for indexing onto a disc or disc partition.
123 124 125
 *
 * Linux always considers sectors to be 512 bytes long independently
 * of the devices real block size.
J
Jens Axboe 已提交
126 127
 *
 * blkcnt_t is the type of the inode's block count.
L
Linus Torvalds 已提交
128
 */
129
#ifdef CONFIG_LBDAF
130 131 132
typedef u64 sector_t;
typedef u64 blkcnt_t;
#else
J
Jens Axboe 已提交
133
typedef unsigned long sector_t;
T
Takashi Sato 已提交
134 135 136
typedef unsigned long blkcnt_t;
#endif

L
Linus Torvalds 已提交
137 138 139 140 141 142 143 144
/*
 * The type of an index into the pagecache.  Use a #define so asm/types.h
 * can override it.
 */
#ifndef pgoff_t
#define pgoff_t unsigned long
#endif

145
/* A dma_addr_t can hold any valid DMA or bus address for the platform */
146 147 148 149 150 151
#ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
typedef u64 dma_addr_t;
#else
typedef u32 dma_addr_t;
#endif /* dma_addr_t */

L
Linus Torvalds 已提交
152
#ifdef __CHECKER__
A
Al Viro 已提交
153 154 155
#else
#endif
#ifdef __CHECK_ENDIAN__
L
Linus Torvalds 已提交
156 157
#else
#endif
A
Al Viro 已提交
158
typedef unsigned __bitwise__ gfp_t;
159
typedef unsigned __bitwise__ fmode_t;
160
typedef unsigned __bitwise__ oom_flags_t;
161

162 163 164 165 166 167
#ifdef CONFIG_PHYS_ADDR_T_64BIT
typedef u64 phys_addr_t;
#else
typedef u32 phys_addr_t;
#endif

168 169
typedef phys_addr_t resource_size_t;

170 171 172 173 174 175
/*
 * This type is the placeholder for a hardware interrupt number. It has to be
 * big enough to enclose whatever representation is used by a given platform.
 */
typedef unsigned long irq_hw_number_t;

176
typedef struct {
177
	int counter;
178 179 180 181
} atomic_t;

#ifdef CONFIG_64BIT
typedef struct {
182
	long counter;
183 184 185
} atomic64_t;
#endif

186 187 188 189 190 191 192 193 194 195 196 197
struct list_head {
	struct list_head *next, *prev;
};

struct hlist_head {
	struct hlist_node *first;
};

struct hlist_node {
	struct hlist_node *next, **pprev;
};

L
Linus Torvalds 已提交
198 199 200 201 202 203 204
struct ustat {
	__kernel_daddr_t	f_tfree;
	__kernel_ino_t		f_tinode;
	char			f_fname[6];
	char			f_fpack[6];
};

205
/**
206
 * struct callback_head - callback structure for use with RCU and task_work
207 208 209
 * @next: next update requests in a list
 * @func: actual update function to call after the grace period.
 */
210 211 212
struct callback_head {
	struct callback_head *next;
	void (*func)(struct callback_head *head);
213
};
214
#define rcu_head callback_head
215

216 217 218
/* clocksource cycle base type */
typedef u64 cycle_t;

219
#endif /*  __ASSEMBLY__ */
L
Linus Torvalds 已提交
220
#endif /* _LINUX_TYPES_H */