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