• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef _LINUX_TYPES_H
3  #define _LINUX_TYPES_H
4  
5  #define __EXPORTED_HEADERS__
6  #include <uapi/linux/types.h>
7  
8  #ifndef __ASSEMBLY__
9  
10  #define DECLARE_BITMAP(name,bits) \
11  	unsigned long name[BITS_TO_LONGS(bits)]
12  
13  typedef __u32 __kernel_dev_t;
14  
15  typedef __kernel_fd_set		fd_set;
16  typedef __kernel_dev_t		dev_t;
17  typedef __kernel_ino_t		ino_t;
18  typedef __kernel_mode_t		mode_t;
19  typedef unsigned short		umode_t;
20  typedef __u32			nlink_t;
21  typedef __kernel_off_t		off_t;
22  typedef __kernel_pid_t		pid_t;
23  typedef __kernel_daddr_t	daddr_t;
24  typedef __kernel_key_t		key_t;
25  typedef __kernel_suseconds_t	suseconds_t;
26  typedef __kernel_timer_t	timer_t;
27  typedef __kernel_clockid_t	clockid_t;
28  typedef __kernel_mqd_t		mqd_t;
29  
30  typedef _Bool			bool;
31  
32  typedef __kernel_uid32_t	uid_t;
33  typedef __kernel_gid32_t	gid_t;
34  typedef __kernel_uid16_t        uid16_t;
35  typedef __kernel_gid16_t        gid16_t;
36  
37  typedef unsigned long		uintptr_t;
38  
39  #ifdef CONFIG_HAVE_UID16
40  /* This is defined by include/asm-{arch}/posix_types.h */
41  typedef __kernel_old_uid_t	old_uid_t;
42  typedef __kernel_old_gid_t	old_gid_t;
43  #endif /* CONFIG_UID16 */
44  
45  #if defined(__GNUC__)
46  typedef __kernel_loff_t		loff_t;
47  #endif
48  
49  /*
50   * The following typedefs are also protected by individual ifdefs for
51   * historical reasons:
52   */
53  #ifndef _SIZE_T
54  #define _SIZE_T
55  typedef __kernel_size_t		size_t;
56  #endif
57  
58  #ifndef _SSIZE_T
59  #define _SSIZE_T
60  typedef __kernel_ssize_t	ssize_t;
61  #endif
62  
63  #ifndef _PTRDIFF_T
64  #define _PTRDIFF_T
65  typedef __kernel_ptrdiff_t	ptrdiff_t;
66  #endif
67  
68  #ifndef _TIME_T
69  #define _TIME_T
70  typedef __kernel_time_t		time_t;
71  #endif
72  
73  #ifndef _CLOCK_T
74  #define _CLOCK_T
75  typedef __kernel_clock_t	clock_t;
76  #endif
77  
78  #ifndef _CADDR_T
79  #define _CADDR_T
80  typedef __kernel_caddr_t	caddr_t;
81  #endif
82  
83  /* bsd */
84  typedef unsigned char		u_char;
85  typedef unsigned short		u_short;
86  typedef unsigned int		u_int;
87  typedef unsigned long		u_long;
88  
89  /* sysv */
90  typedef unsigned char		unchar;
91  typedef unsigned short		ushort;
92  typedef unsigned int		uint;
93  typedef unsigned long		ulong;
94  
95  #ifndef __BIT_TYPES_DEFINED__
96  #define __BIT_TYPES_DEFINED__
97  
98  typedef		__u8		u_int8_t;
99  typedef		__s8		int8_t;
100  typedef		__u16		u_int16_t;
101  typedef		__s16		int16_t;
102  typedef		__u32		u_int32_t;
103  typedef		__s32		int32_t;
104  
105  #endif /* !(__BIT_TYPES_DEFINED__) */
106  
107  typedef		__u8		uint8_t;
108  typedef		__u16		uint16_t;
109  typedef		__u32		uint32_t;
110  
111  #if defined(__GNUC__)
112  typedef		__u64		uint64_t;
113  typedef		__u64		u_int64_t;
114  typedef		__s64		int64_t;
115  #endif
116  
117  /* this is a special 64bit data type that is 8-byte aligned */
118  #define aligned_u64 __u64 __attribute__((aligned(8)))
119  #define aligned_be64 __be64 __attribute__((aligned(8)))
120  #define aligned_le64 __le64 __attribute__((aligned(8)))
121  
122  /**
123   * The type used for indexing onto a disc or disc partition.
124   *
125   * Linux always considers sectors to be 512 bytes long independently
126   * of the devices real block size.
127   *
128   * blkcnt_t is the type of the inode's block count.
129   */
130  #ifdef CONFIG_LBDAF
131  typedef u64 sector_t;
132  typedef u64 blkcnt_t;
133  #else
134  typedef unsigned long sector_t;
135  typedef unsigned long blkcnt_t;
136  #endif
137  
138  /*
139   * The type of an index into the pagecache.
140   */
141  #define pgoff_t unsigned long
142  
143  /*
144   * A dma_addr_t can hold any valid DMA address, i.e., any address returned
145   * by the DMA API.
146   *
147   * If the DMA API only uses 32-bit addresses, dma_addr_t need only be 32
148   * bits wide.  Bus addresses, e.g., PCI BARs, may be wider than 32 bits,
149   * but drivers do memory-mapped I/O to ioremapped kernel virtual addresses,
150   * so they don't care about the size of the actual bus addresses.
151   */
152  #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
153  typedef u64 dma_addr_t;
154  #else
155  typedef u32 dma_addr_t;
156  #endif
157  
158  typedef unsigned __bitwise gfp_t;
159  typedef unsigned __bitwise fmode_t;
160  
161  #ifdef CONFIG_PHYS_ADDR_T_64BIT
162  typedef u64 phys_addr_t;
163  #else
164  typedef u32 phys_addr_t;
165  #endif
166  
167  typedef phys_addr_t resource_size_t;
168  
169  /*
170   * This type is the placeholder for a hardware interrupt number. It has to be
171   * big enough to enclose whatever representation is used by a given platform.
172   */
173  typedef unsigned long irq_hw_number_t;
174  
175  typedef struct {
176  	int counter;
177  } atomic_t;
178  
179  #ifdef CONFIG_64BIT
180  typedef struct {
181  	long counter;
182  } atomic64_t;
183  #endif
184  
185  struct list_head {
186  	struct list_head *next, *prev;
187  };
188  
189  struct hlist_head {
190  	struct hlist_node *first;
191  };
192  
193  struct hlist_node {
194  	struct hlist_node *next, **pprev;
195  };
196  
197  struct ustat {
198  	__kernel_daddr_t	f_tfree;
199  	__kernel_ino_t		f_tinode;
200  	char			f_fname[6];
201  	char			f_fpack[6];
202  };
203  
204  /**
205   * struct callback_head - callback structure for use with RCU and task_work
206   * @next: next update requests in a list
207   * @func: actual update function to call after the grace period.
208   *
209   * The struct is aligned to size of pointer. On most architectures it happens
210   * naturally due ABI requirements, but some architectures (like CRIS) have
211   * weird ABI and we need to ask it explicitly.
212   *
213   * The alignment is required to guarantee that bit 0 of @next will be
214   * clear under normal conditions -- as long as we use call_rcu(),
215   * call_rcu_bh(), call_rcu_sched(), or call_srcu() to queue callback.
216   *
217   * This guarantee is important for few reasons:
218   *  - future call_rcu_lazy() will make use of lower bits in the pointer;
219   *  - the structure shares storage spacer in struct page with @compound_head,
220   *    which encode PageTail() in bit 0. The guarantee is needed to avoid
221   *    false-positive PageTail().
222   */
223  struct callback_head {
224  	struct callback_head *next;
225  	void (*func)(struct callback_head *head);
226  } __attribute__((aligned(sizeof(void *))));
227  #define rcu_head callback_head
228  
229  typedef void (*rcu_callback_t)(struct rcu_head *head);
230  typedef void (*call_rcu_func_t)(struct rcu_head *head, rcu_callback_t func);
231  
232  #endif /*  __ASSEMBLY__ */
233  #endif /* _LINUX_TYPES_H */
234