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