Zephyr Project API 4.0.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
posix_features.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 BayLibre SAS
3 * Copyright (c) 2024 Tenstorrent AI ULC
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef INCLUDE_ZEPHYR_POSIX_POSIX_FEATURES_H_
9#define INCLUDE_ZEPHYR_POSIX_POSIX_FEATURES_H_
10
11#include <zephyr/autoconf.h> /* CONFIG_* */
12#include <zephyr/sys/util_macro.h> /* COND_CODE_1() */
13
14/*
15 * POSIX Application Environment Profiles (AEP - IEEE Std 1003.13-2003)
16 */
17
18#ifdef CONFIG_POSIX_AEP_REALTIME_MINIMAL
19#define _POSIX_AEP_REALTIME_MINIMAL 200312L
20#endif
21
22#ifdef CONFIG_POSIX_AEP_REALTIME_CONTROLLER
23#define _POSIX_AEP_REALTIME_CONTROLLER 200312L
24#endif
25
26#ifdef CONFIG_POSIX_AEP_REALTIME_DEDICATED
27#define _POSIX_AEP_REALTIME_DEDICATED 200312L
28#endif
29
30/*
31 * Subprofiling Considerations
32 */
33#define _POSIX_SUBPROFILE 1
34
35/*
36 * POSIX System Interfaces
37 */
38
39#define _POSIX_VERSION 200809L
40
41#define _POSIX_CHOWN_RESTRICTED (0)
42#define _POSIX_NO_TRUNC (0)
43#define _POSIX_VDISABLE ('\0')
44
45/* #define _POSIX_ADVISORY_INFO (-1L) */
46
47#ifdef CONFIG_POSIX_ASYNCHRONOUS_IO
48#define _POSIX_ASYNCHRONOUS_IO _POSIX_VERSION
49#endif
50
51#ifdef CONFIG_POSIX_BARRIERS
52#define _POSIX_BARRIERS _POSIX_VERSION
53#endif
54
55#ifdef CONFIG_POSIX_CLOCK_SELECTION
56#define _POSIX_CLOCK_SELECTION _POSIX_VERSION
57#endif
58
59#ifdef CONFIG_POSIX_CPUTIME
60#define _POSIX_CPUTIME _POSIX_VERSION
61#endif
62
63#ifdef CONFIG_POSIX_FSYNC
64#define _POSIX_FSYNC _POSIX_VERSION
65#endif
66
67#ifdef CONFIG_NET_IPV6
68#define _POSIX_IPV6 _POSIX_VERSION
69#endif
70
71/* #define _POSIX_JOB_CONTROL (-1L) */
72
73#ifdef CONFIG_POSIX_MAPPED_FILES
74#define _POSIX_MAPPED_FILES _POSIX_VERSION
75#endif
76
77#ifdef CONFIG_POSIX_MEMLOCK
78#define _POSIX_MEMLOCK _POSIX_VERSION
79#endif
80
81#ifdef CONFIG_POSIX_MEMLOCK_RANGE
82#define _POSIX_MEMLOCK_RANGE _POSIX_VERSION
83#endif
84
85#ifdef CONFIG_POSIX_MEMORY_PROTECTION
86#define _POSIX_MEMORY_PROTECTION _POSIX_VERSION
87#endif
88
89#ifdef CONFIG_POSIX_MESSAGE_PASSING
90#define _POSIX_MESSAGE_PASSING _POSIX_VERSION
91#endif
92
93#ifdef CONFIG_POSIX_MONOTONIC_CLOCK
94#define _POSIX_MONOTONIC_CLOCK _POSIX_VERSION
95#endif
96
97/* #define _POSIX_PRIORITIZED_IO (-1L) */
98
99#ifdef CONFIG_POSIX_PRIORITY_SCHEDULING
100#define _POSIX_PRIORITY_SCHEDULING _POSIX_VERSION
101#endif
102
103#ifdef CONFIG_NET_SOCKETS_PACKET
104#define _POSIX_RAW_SOCKETS _POSIX_VERSION
105#endif
106
107#ifdef CONFIG_POSIX_READER_WRITER_LOCKS
108#define _POSIX_READER_WRITER_LOCKS _POSIX_VERSION
109#endif
110
111/* #define _POSIX_REALTIME_SIGNALS (-1L) */
112/* #define _POSIX_REGEXP (-1L) */
113/* #define _POSIX_SAVED_IDS (-1L) */
114
115#ifdef CONFIG_POSIX_SEMAPHORES
116#define _POSIX_SEMAPHORES _POSIX_VERSION
117#endif
118
119#ifdef CONFIG_POSIX_SHARED_MEMORY_OBJECTS
120#define _POSIX_SHARED_MEMORY_OBJECTS _POSIX_VERSION
121#endif
122
123/* #define _POSIX_SHELL (-1L) */
124/* #define _POSIX_SPAWN (-1L) */
125
126#ifdef CONFIG_POSIX_SPIN_LOCKS
127#define _POSIX_SPIN_LOCKS _POSIX_VERSION
128#endif
129
130/* #define _POSIX_SPORADIC_SERVER (-1L) */
131
132#ifdef CONFIG_POSIX_SYNCHRONIZED_IO
133#define _POSIX_SYNCHRONIZED_IO _POSIX_VERSION
134#endif
135
136#ifdef CONFIG_POSIX_THREAD_ATTR_STACKADDR
137#define _POSIX_THREAD_ATTR_STACKADDR _POSIX_VERSION
138#endif
139
140#ifdef CONFIG_POSIX_THREAD_ATTR_STACKSIZE
141#define _POSIX_THREAD_ATTR_STACKSIZE _POSIX_VERSION
142#endif
143
144#ifdef CONFIG_POSIX_THREAD_CPUTIME
145#define _POSIX_THREAD_CPUTIME _POSIX_VERSION
146#endif
147
148#ifdef CONFIG_POSIX_THREAD_PRIO_INHERIT
149#define _POSIX_THREAD_PRIO_INHERIT _POSIX_VERSION
150#endif
151
152#ifdef CONFIG_POSIX_THREAD_PRIO_PROTECT
153#define _POSIX_THREAD_PRIO_PROTECT _POSIX_VERSION
154#endif
155
156#ifdef CONFIG_POSIX_THREAD_PRIORITY_SCHEDULING
157#define _POSIX_THREAD_PRIORITY_SCHEDULING _POSIX_VERSION
158#endif
159
160/* #define _POSIX_THREAD_PROCESS_SHARED (-1L) */
161/* #define _POSIX_THREAD_ROBUST_PRIO_INHERIT (-1L) */
162/* #define _POSIX_THREAD_ROBUST_PRIO_PROTECT (-1L) */
163
164#ifdef CONFIG_POSIX_THREAD_SAFE_FUNCTIONS
165#define _POSIX_THREAD_SAFE_FUNCTIONS _POSIX_VERSION
166#endif
167
168/* #define _POSIX_THREAD_SPORADIC_SERVER (-1L) */
169
170#ifdef CONFIG_POSIX_THREADS
171#ifndef _POSIX_THREADS
172#define _POSIX_THREADS _POSIX_VERSION
173#endif
174#endif
175
176#ifdef CONFIG_POSIX_TIMEOUTS
177#define _POSIX_TIMEOUTS _POSIX_VERSION
178#endif
179
180#ifdef CONFIG_POSIX_TIMERS
181#define _POSIX_TIMERS _POSIX_VERSION
182#endif
183
184/* #define _POSIX_TRACE (-1L) */
185/* #define _POSIX_TRACE_EVENT_FILTER (-1L) */
186/* #define _POSIX_TRACE_INHERIT (-1L) */
187/* #define _POSIX_TRACE_LOG (-1L) */
188/* #define _POSIX_TYPED_MEMORY_OBJECTS (-1L) */
189
190/*
191 * POSIX v6 Options
192 */
193/* #define _POSIX_V6_ILP32_OFF32 (-1L) */
194/* #define _POSIX_V6_ILP32_OFFBIG (-1L) */
195/* #define _POSIX_V6_LP64_OFF64 (-1L) */
196/* #define _POSIX_V6_LPBIG_OFFBIG (-1L) */
197
198/*
199 * POSIX v7 Options
200 */
201/* #define _POSIX_V7_ILP32_OFF32 (-1L) */
202/* #define _POSIX_V7_ILP32_OFFBIG (-1L) */
203/* #define _POSIX_V7_LP64_OFF64 (-1L) */
204/* #define _POSIX_V7_LPBIG_OFFBIG (-1L) */
205
206/*
207 * POSIX2 Options
208 */
209/* #define _POSIX2_VERSION (-1) */
210#define _POSIX2_C_BIND _POSIX_VERSION
211/* #define _POSIX2_C_DEV (-1) */
212/* #define _POSIX2_CHAR_TERM (-1L) */
213/* #define _POSIX2_FORT_DEV (-1L) */
214/* #define _POSIX2_FORT_RUN (-1L) */
215/* #define _POSIX2_LOCALEDEF (-1L) */
216/* #define _POSIX2_PBS (-1L) */
217/* #define _POSIX2_PBS_ACCOUNTING (-1L) */
218/* #define _POSIX2_PBS_CHECKPOINT (-1L) */
219/* #define _POSIX2_PBS_LOCATE (-1L) */
220/* #define _POSIX2_PBS_MESSAGE (-1L) */
221/* #define _POSIX2_PBS_TRACK (-1L) */
222/* #define _POSIX2_SW_DEV (-1L) */
223/* #define _POSIX2_UPE (-1L) */
224
225/*
226 * X/Open System Interfaces
227 */
228#define _XOPEN_VERSION 700
229/* #define _XOPEN_CRYPT (-1L) */
230/* #define _XOPEN_ENH_I18N (-1L) */
231#if defined(CONFIG_XSI_REALTIME) || \
232 (defined(CONFIG_POSIX_FSYNC) && defined(CONFIG_POSIX_MEMLOCK) && \
233 defined(CONFIG_POSIX_MEMLOCK_RANGE) && defined(CONFIG_POSIX_MESSAGE_PASSING) && \
234 defined(CONFIG_POSIX_PRIORITY_SCHEDULING) && \
235 defined(CONFIG_POSIX_SHARED_MEMORY_OBJECTS) && defined(CONFIG_POSIX_SYNCHRONIZED_IO))
236#define _XOPEN_REALTIME _XOPEN_VERSION
237#endif
238/* #define _XOPEN_REALTIME_THREADS (-1L) */
239/* #define _XOPEN_SHM (-1L) */
240
241#ifdef CONFIG_XOPEN_STREAMS
242#define _XOPEN_STREAMS _XOPEN_VERSION
243#endif
244
245/* #define _XOPEN_UNIX (-1L) */
246/* #define _XOPEN_UUCP (-1L) */
247
248/* Maximum values */
249#define _POSIX_CLOCKRES_MIN (20000000L)
250
251/* Minimum values */
252#define _POSIX_AIO_LISTIO_MAX (2)
253#define _POSIX_AIO_MAX (1)
254#define _POSIX_ARG_MAX (4096)
255#define _POSIX_CHILD_MAX (25)
256#define _POSIX_DELAYTIMER_MAX \
257 COND_CODE_1(CONFIG_POSIX_TIMERS, (CONFIG_POSIX_DELAYTIMER_MAX), (0))
258#define _POSIX_HOST_NAME_MAX \
259 COND_CODE_1(CONFIG_POSIX_NETWORKING, (CONFIG_POSIX_HOST_NAME_MAX), (0))
260#define _POSIX_LINK_MAX (8)
261#define _POSIX_LOGIN_NAME_MAX (9)
262#define _POSIX_MAX_CANON (255)
263#define _POSIX_MAX_INPUT (255)
264#define _POSIX_MQ_OPEN_MAX \
265 COND_CODE_1(CONFIG_POSIX_MESSAGE_PASSING, (CONFIG_POSIX_MQ_OPEN_MAX), (0))
266#define _POSIX_MQ_PRIO_MAX (32)
267#define _POSIX_NAME_MAX (14)
268#define _POSIX_NGROUPS_MAX (8)
269#define _POSIX_OPEN_MAX CONFIG_POSIX_OPEN_MAX
270#define _POSIX_PATH_MAX (256)
271#define _POSIX_PIPE_BUF (512)
272#define _POSIX_RE_DUP_MAX (255)
273#define _POSIX_RTSIG_MAX \
274 COND_CODE_1(CONFIG_POSIX_REALTIME_SIGNALS, (CONFIG_POSIX_RTSIG_MAX), (0))
275#define _POSIX_SEM_NSEMS_MAX \
276 COND_CODE_1(CONFIG_POSIX_SEMAPHORES, (CONFIG_POSIX_SEM_NSEMS_MAX), (0))
277#define _POSIX_SEM_VALUE_MAX \
278 COND_CODE_1(CONFIG_POSIX_SEMAPHORES, (CONFIG_POSIX_SEM_VALUE_MAX), (0))
279#define _POSIX_SIGQUEUE_MAX (32)
280#define _POSIX_SSIZE_MAX (32767)
281#define _POSIX_SS_REPL_MAX (4)
282#define _POSIX_STREAM_MAX (8)
283#define _POSIX_SYMLINK_MAX (255)
284#define _POSIX_SYMLOOP_MAX (8)
285#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS (4)
286#define _POSIX_THREAD_KEYS_MAX \
287 COND_CODE_1(CONFIG_POSIX_THREADS, (CONFIG_POSIX_THREAD_KEYS_MAX), (0))
288#define _POSIX_THREAD_THREADS_MAX \
289 COND_CODE_1(CONFIG_POSIX_THREADS, (CONFIG_POSIX_THREAD_THREADS_MAX), (0))
290#define _POSIX_TIMER_MAX \
291 COND_CODE_1(CONFIG_POSIX_TIMERS, (CONFIG_POSIX_TIMER_MAX), (0))
292#define _POSIX_TRACE_EVENT_NAME_MAX (30)
293#define _POSIX_TRACE_NAME_MAX (8)
294#define _POSIX_TRACE_SYS_MAX (8)
295#define _POSIX_TRACE_USER_EVENT_MAX (32)
296#define _POSIX_TTY_NAME_MAX (9)
297#define _POSIX_TZNAME_MAX (6)
298#define _POSIX2_BC_BASE_MAX (99)
299#define _POSIX2_BC_DIM_MAX (2048)
300#define _POSIX2_BC_SCALE_MAX (99)
301#define _POSIX2_BC_STRING_MAX (1000)
302#define _POSIX2_CHARCLASS_NAME_MAX (14)
303#define _POSIX2_COLL_WEIGHTS_MAX (2)
304#define _POSIX2_EXPR_NEST_MAX (32)
305#define _POSIX2_LINE_MAX (2048)
306#define _XOPEN_IOV_MAX (16)
307#define _XOPEN_NAME_MAX (255)
308#define _XOPEN_PATH_MAX (1024)
309
310/* Other invariant values */
311#define NL_LANGMAX (14)
312#define NL_MSGMAX (32767)
313#define NL_SETMAX (255)
314#define NL_TEXTMAX (_POSIX2_LINE_MAX)
315#define NZERO (20)
316
317/* Runtime invariant values */
318#define AIO_LISTIO_MAX _POSIX_AIO_LISTIO_MAX
319#define AIO_MAX _POSIX_AIO_MAX
320#define AIO_PRIO_DELTA_MAX (0)
321#define DELAYTIMER_MAX _POSIX_DELAYTIMER_MAX
322#define HOST_NAME_MAX _POSIX_HOST_NAME_MAX
323#define LOGIN_NAME_MAX _POSIX_LOGIN_NAME_MAX
324#define MQ_OPEN_MAX _POSIX_MQ_OPEN_MAX
325#define MQ_PRIO_MAX _POSIX_MQ_PRIO_MAX
326
327#ifndef ATEXIT_MAX
328#define ATEXIT_MAX 8
329#endif
330
331#define PAGE_SIZE CONFIG_POSIX_PAGE_SIZE
332#define PAGESIZE PAGE_SIZE
333
334#define PTHREAD_DESTRUCTOR_ITERATIONS _POSIX_THREAD_DESTRUCTOR_ITERATIONS
335#define PTHREAD_KEYS_MAX _POSIX_THREAD_KEYS_MAX
336#define PTHREAD_THREADS_MAX _POSIX_THREAD_THREADS_MAX
337#define RTSIG_MAX _POSIX_RTSIG_MAX
338#define SEM_NSEMS_MAX _POSIX_SEM_NSEMS_MAX
339#define SEM_VALUE_MAX _POSIX_SEM_VALUE_MAX
340#define SIGQUEUE_MAX _POSIX_SIGQUEUE_MAX
341#define STREAM_MAX _POSIX_STREAM_MAX
342#define SYMLOOP_MAX _POSIX_SYMLOOP_MAX
343#define TIMER_MAX _POSIX_TIMER_MAX
344#define TTY_NAME_MAX _POSIX_TTY_NAME_MAX
345#ifndef TZNAME_MAX
346#define TZNAME_MAX _POSIX_TZNAME_MAX
347#endif
348
349/* Pathname variable values */
350#define FILESIZEBITS (32)
351#define POSIX_ALLOC_SIZE_MIN (256)
352#define POSIX_REC_INCR_XFER_SIZE (1024)
353#define POSIX_REC_MAX_XFER_SIZE (32767)
354#define POSIX_REC_MIN_XFER_SIZE (1)
355#define POSIX_REC_XFER_ALIGN (4)
356#define SYMLINK_MAX _POSIX_SYMLINK_MAX
357
358#endif /* INCLUDE_ZEPHYR_POSIX_POSIX_FEATURES_H_ */
Macro utilities.