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_ */
359