Function index
The content of the Stage switching column indicates the behavior of an EVL thread when calling the service with respect to its execution stage:
▲ denotes a strict out-of-band call. The caller must be attached to the EVL core. It is unconditionally promoted to the out-of-band execution stage if running in-band at the time of the call.
▼ denotes a strict in-band call. The caller is unconditionally switched to the in-band execution stage if running out-of-band at the time of the call.
△ denotes a conforming call which is available to in-band and out-of-band callers from the most appropriate execution stage based on their current runtime state. If the caller undergoes the SCHED_WEAK policy, or is not attached to the EVL core, this call is directly handled from the in-band stage. In all other cases, the caller is switched to the out-of-band execution stage before the request is handled.
🟰 denotes a transparent call which is immediately available to in-band and out-of-band callers from their current execution stage (i.e. no stage switch).
In addition to the above rules:
-
the caller may switch to the in-band execution stage if running out-of-band at the time of the call on first access to a statically initialized synchronization object (
EVL_*_INITIALIZER()) in order to finalize the construction before carrying out the requested operation. This is required only once in the object’s lifetime. -
if the caller undergoes the SCHED_WEAK policy, locking a mutex keeps it running out-of-band until it drops such lock.
The content of the non-EVL column indicates whether the service is also available to threads which are not attached to the EVL core at the time of the call.
Thread services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_attach_thread() | N/A | ✔ |
| evl_attach_self() | N/A | ✔ |
| evl_detach_thread() | ▼ | ⛔ |
| evl_detach_self() | ▼ | ⛔ |
| evl_demote_thread() | 🟰 | ✔ |
| evl_get_self() | 🟰 | ⛔ |
| evl_get_state() | 🟰 | ✔ |
| evl_is_inband() | 🟰 | ✔ |
| evl_resume_thread() | 🟰 | ✔ |
| evl_set_thread_mode() | 🟰 | ✔ |
| evl_subscribe() | ▼ | ⛔ |
| evl_suspend_thread() | 🟰 | ✔ |
| evl_switch_inband() | ▼ | ⛔ |
| evl_switch_oob() | ▲ | ⛔ |
| evl_unblock_thread() | 🟰 | ✔ |
| evl_unsubscribe() | ▼ | ⛔ |
Scheduler services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_get_schedattr() | 🟰 | ✔ |
| evl_set_schedattr() | 🟰 | ✔ |
| evl_control_sched() | 🟰 | ✔ |
| evl_get_cpustate() | 🟰 | ✔ |
| evl_yield() | ▲ | ⛔ |
Clock services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_read_clock() | 🟰 | ✔ |
| evl_set_clock() | 🟰 | ✔ |
| evl_get_clock_resolution() | 🟰 | ✔ |
| evl_sleep_until() | ▲ | ⛔ |
| evl_usleep() | ▲ | ⛔ |
Timer services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_new_timer() | ▼ | ✔ |
| evl_set_timer() | 🟰 | ✔ |
| evl_get_timer() | 🟰 | ✔ |
Mutex services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_create_mutex() | ▼ | ✔ |
| evl_new_mutex() | ▼ | ✔ |
| evl_open_mutex() | ▼ | ✔ |
| evl_lock_mutex() | ▲ | ⛔ |
| evl_trylock_mutex() | ▲ | ⛔ |
| evl_timedlock_mutex() | ▲ | ⛔ |
| evl_unlock_mutex() | 🟰 | ⛔ |
| evl_get_mutex_ceiling() | 🟰 | ✔ |
| evl_set_mutex_ceiling() | 🟰 | ✔ |
| evl_close_mutex() | ▼ | ✔ |
Read/write locking services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_create_rwlock() | ▼ | ✔ |
| evl_new_rwlock() | ▼ | ✔ |
| evl_lock_read() | ▲ | ⛔ |
| evl_trylock_read() | ▲ | ✔ |
| evl_unlock_read() | 🟰 | ✔ |
| evl_lock_write() | ▲ | ⛔ |
| evl_trylock_write() | ▲ | ✔ |
| evl_unlock_write() | 🟰 | ✔ |
Event services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_create_event() | ▼ | ✔ |
| evl_new_event() | ▼ | ✔ |
| evl_open_event() | ▼ | ✔ |
| evl_wait_event() | 🟰 | ⛔ |
| evl_timedwait_event() | 🟰 | ⛔ |
| evl_signal_event() | 🟰 | ⛔ |
| evl_signal_thread() | 🟰 | ⛔ |
| evl_broadcast_event() | 🟰 | ⛔ |
| evl_close_event() | ▼ | ✔ |
Flags services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_create_flags() | ▼ | ✔ |
| evl_new_flags() | ▼ | ✔ |
| evl_open_flags() | ▼ | ✔ |
| evl_wait_flags() | ▲ | ⛔ |
| evl_wait_some_flags() | ▲ | ⛔ |
| evl_wait_exact_flags() | ▲ | ⛔ |
| evl_timedwait_flags() | ▲ | ⛔ |
| evl_timedwait_some_flags() | ▲ | ⛔ |
| evl_timedwait_exact_flags() | ▲ | ⛔ |
| evl_trywait_flags() | 🟰 | ✔ |
| evl_trywait_some_flags() | 🟰 | ✔ |
| evl_trywait_exact_flags() | 🟰 | ✔ |
| evl_peek_flags() | 🟰 | ✔ |
| evl_post_flags() | 🟰 | ✔ |
| evl_broadcast_flags() | 🟰 | ✔ |
| evl_close_flags() | ▼ | ✔ |
Semaphore services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_create_sem() | ▼ | ✔ |
| evl_new_sem() | ▼ | ✔ |
| evl_open_sem() | ▼ | ✔ |
| evl_get_sem() | ▲ | ⛔ |
| evl_timedget_sem() | ▲ | ⛔ |
| evl_tryget_sem() | 🟰 | ✔ |
| evl_peek_sem() | 🟰 | ✔ |
| evl_put_sem() | 🟰 | ✔ |
| evl_close_sem() | ▼ | ✔ |
Observable services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_create_observable() | ▼ | ✔ |
| evl_new_observable() | ▼ | ✔ |
| evl_read_observable() | ▲ | ✔ |
| evl_update_observable() | ▲ | ✔ |
Polling services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_new_poll() | ▼ | ✔ |
| evl_add_pollfd() | ▲ | ⛔ |
| evl_mod_pollfd() | ▲ | ⛔ |
| evl_del_pollfd() | ▲ | ⛔ |
| evl_poll_sem() | ▲ | ⛔ |
| evl_timedpoll_sem() | ▲ | ⛔ |
Memory heap services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_init_heap() | ▼ | ✔ |
| evl_init_heap_unlocked() | 🟰 | ✔ |
| evl_extend_heap() | 🟰 | ⛔ |
| evl_extend_heap_unlocked() | 🟰 | ✔ |
| evl_alloc_block() | ▲ | ⛔ |
| evl_alloc_block_unlocked() | 🟰 | ✔ |
| evl_free_block() | ▲ | ⛔ |
| evl_free_block_unlocked() | 🟰 | ✔ |
| evl_check_block() | ▲ | ⛔ |
| evl_check_block_unlocked() | 🟰 | ✔ |
| evl_destroy_heap() | ▼ | ✔ |
| evl_destroy_heap_unlocked() | 🟰 | ✔ |
| evl_heap_raw_size() | 🟰 | ✔ |
| evl_heap_size() | 🟰 | ✔ |
| evl_heap_used() | 🟰 | ✔ |
Proxy services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_create_proxy() | ▼ | ✔ |
| evl_new_proxy() | ▼ | ✔ |
| evl_write_proxy() | 🟰 | ✔ |
| evl_read_proxy() | 🟰 | ✔ |
| evl_vprint_proxy() | 🟰 | ✔ |
| evl_print_proxy() | 🟰 | ✔ |
| evl_printf() | 🟰 | ✔ |
| evl_eprintf() | 🟰 | ✔ |
| evl_stdout() | 🟰 | ✔ |
| evl_stderr() | 🟰 | ✔ |
Cross-buffer services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_create_xbuf() | ▼ | ✔ |
| evl_new_xbuf() | ▼ | ✔ |
I/O services
| Function name | Stage switch | non-EVL |
|---|---|---|
| oob_read() | ▲ | ⛔ |
| oob_write() | ▲ | ⛔ |
| oob_ioctl() | ▲ | ⛔ |
| oob_sendmsg() | ▲ | ⛔ |
| oob_recvmsg() | ▲ | ⛔ |
| oob_setsockopt() | ▲ | ⛔ |
| oob_getsockopt() | ▲ | ⛔ |
Networking services
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_net_enable_port() | ▼ | ✔ |
| evl_net_disable_port() | ▼ | ✔ |
| evl_net_open_port() | ▼ | ✔ |
| evl_net_query_port() | ▼ | ✔ |
| evl_net_set_filter() | ▼ | ✔ |
| evl_net_solicit() | ▼ | ✔ |
Misc routines
| Function name | Stage switch | non-EVL |
|---|---|---|
| evl_init() | N/A | ✔ |
| evl_get_version() | 🟰 | ✔ |
| evl_sigdebug_handler() | N/A | ✔ |
