nosv-sys 0.1.0

Low-level Rust FFI bindings to the nOS-V runtime API
//! C macro aliases that bindgen does not expose with their original names.
//!
//! Bindgen emits C enum variants with type-prefixed names, and it currently
//! misses several nOS-V flag macros because they are defined through helper
//! macros. Keep these constants as direct translations of the public headers.

const fn bit(n: u32) -> crate::nosv_flags_t {
    1u64 << n
}

pub const NOSV_SYS_MIN_VERSION: &str = "4.1.0";

pub const NOSV_SUCCESS: crate::nosv_err_t = crate::nosv_err_NOSV_SUCCESS;
pub const NOSV_ERR_INVALID_CALLBACK: crate::nosv_err_t = crate::nosv_err_NOSV_ERR_INVALID_CALLBACK;
pub const NOSV_ERR_INVALID_METADATA_SIZE: crate::nosv_err_t =
    crate::nosv_err_NOSV_ERR_INVALID_METADATA_SIZE;
pub const NOSV_ERR_INVALID_OPERATION: crate::nosv_err_t =
    crate::nosv_err_NOSV_ERR_INVALID_OPERATION;
pub const NOSV_ERR_INVALID_PARAMETER: crate::nosv_err_t =
    crate::nosv_err_NOSV_ERR_INVALID_PARAMETER;
pub const NOSV_ERR_NOT_INITIALIZED: crate::nosv_err_t = crate::nosv_err_NOSV_ERR_NOT_INITIALIZED;
pub const NOSV_ERR_OUT_OF_MEMORY: crate::nosv_err_t = crate::nosv_err_NOSV_ERR_OUT_OF_MEMORY;
pub const NOSV_ERR_OUTSIDE_TASK: crate::nosv_err_t = crate::nosv_err_NOSV_ERR_OUTSIDE_TASK;
pub const NOSV_ERR_UNKNOWN: crate::nosv_err_t = crate::nosv_err_NOSV_ERR_UNKNOWN;
pub const NOSV_ERR_BUSY: crate::nosv_err_t = crate::nosv_err_NOSV_ERR_BUSY;
pub const NOSV_ERR_TIMEOUT: crate::nosv_err_t = crate::nosv_err_NOSV_ERR_TIMEOUT;
pub const NOSV_ERR_MAX: crate::nosv_err_t = crate::nosv_err_NOSV_ERR_MAX;

pub const NOSV_TYPE_INIT_NONE: crate::nosv_flags_t = 0;
pub const NOSV_TYPE_INIT_EXTERNAL: crate::nosv_flags_t = bit(0);

pub const NOSV_TYPE_DESTROY_NONE: crate::nosv_flags_t = 0;

pub const NOSV_CREATE_NONE: crate::nosv_flags_t = 0;
pub const NOSV_CREATE_PARALLEL: crate::nosv_flags_t = bit(0);
pub const NOSV_CREATE_JOINABLE: crate::nosv_flags_t = bit(1);

pub const NOSV_SUBMIT_NONE: crate::nosv_flags_t = 0;
pub const NOSV_SUBMIT_UNLOCKED: crate::nosv_flags_t = bit(0);
pub const NOSV_SUBMIT_BLOCKING: crate::nosv_flags_t = bit(1);
pub const NOSV_SUBMIT_IMMEDIATE: crate::nosv_flags_t = bit(2);
pub const NOSV_SUBMIT_INLINE: crate::nosv_flags_t = bit(3);
pub const NOSV_SUBMIT_DEADLINE_WAKE: crate::nosv_flags_t = bit(4);

pub const NOSV_PAUSE_NONE: crate::nosv_flags_t = 0;

pub const NOSV_CANCEL_NONE: crate::nosv_flags_t = 0;

pub const NOSV_YIELD_NONE: crate::nosv_flags_t = 0;
pub const NOSV_YIELD_NOFLUSH: crate::nosv_flags_t = bit(0);

pub const NOSV_SCHEDPOINT_NONE: crate::nosv_flags_t = 0;

pub const NOSV_DESTROY_NONE: crate::nosv_flags_t = 0;

pub const NOSV_ATTACH_NONE: crate::nosv_flags_t = 0;
pub const NOSV_ATTACH_INSTRUMENT: crate::nosv_flags_t = bit(0);

pub const NOSV_DETACH_NONE: crate::nosv_flags_t = 0;
pub const NOSV_DETACH_NO_RESTORE_AFFINITY: crate::nosv_flags_t = bit(0);
pub const NOSV_DETACH_INSTRUMENT: crate::nosv_flags_t = bit(1);

pub const NOSV_SUSPEND_MODE_NONE: crate::nosv_suspend_mode_t =
    crate::nosv_suspend_mode_NOSV_SUSPEND_MODE_NONE;
pub const NOSV_SUSPEND_MODE_SUBMIT: crate::nosv_suspend_mode_t =
    crate::nosv_suspend_mode_NOSV_SUSPEND_MODE_SUBMIT;
pub const NOSV_SUSPEND_MODE_TIMEOUT_SUBMIT: crate::nosv_suspend_mode_t =
    crate::nosv_suspend_mode_NOSV_SUSPEND_MODE_TIMEOUT_SUBMIT;
pub const NOSV_SUSPEND_MODE_EVENT_SUBMIT: crate::nosv_suspend_mode_t =
    crate::nosv_suspend_mode_NOSV_SUSPEND_MODE_EVENT_SUBMIT;

pub const NOSV_AFFINITY_TYPE_PREFERRED: crate::nosv_affinity_type_t =
    crate::nosv_affinity_type_NOSV_AFFINITY_TYPE_PREFERRED;
pub const NOSV_AFFINITY_TYPE_STRICT: crate::nosv_affinity_type_t =
    crate::nosv_affinity_type_NOSV_AFFINITY_TYPE_STRICT;

pub const NOSV_AFFINITY_LEVEL_NONE: crate::nosv_affinity_level_t =
    crate::nosv_affinity_level_NOSV_AFFINITY_LEVEL_NONE;
pub const NOSV_AFFINITY_LEVEL_CPU: crate::nosv_affinity_level_t =
    crate::nosv_affinity_level_NOSV_AFFINITY_LEVEL_CPU;
pub const NOSV_AFFINITY_LEVEL_NUMA: crate::nosv_affinity_level_t =
    crate::nosv_affinity_level_NOSV_AFFINITY_LEVEL_NUMA;
pub const NOSV_AFFINITY_LEVEL_USER_COMPLEX: crate::nosv_affinity_level_t =
    crate::nosv_affinity_level_NOSV_AFFINITY_LEVEL_USER_COMPLEX;

pub const NOSV_TOPO_LEVEL_NODE: crate::nosv_topo_level_t =
    crate::nosv_topo_level_NOSV_TOPO_LEVEL_NODE;
pub const NOSV_TOPO_LEVEL_NUMA: crate::nosv_topo_level_t =
    crate::nosv_topo_level_NOSV_TOPO_LEVEL_NUMA;
pub const NOSV_TOPO_LEVEL_COMPLEX_SET: crate::nosv_topo_level_t =
    crate::nosv_topo_level_NOSV_TOPO_LEVEL_COMPLEX_SET;
pub const NOSV_TOPO_LEVEL_CORE: crate::nosv_topo_level_t =
    crate::nosv_topo_level_NOSV_TOPO_LEVEL_CORE;
pub const NOSV_TOPO_LEVEL_CPU: crate::nosv_topo_level_t =
    crate::nosv_topo_level_NOSV_TOPO_LEVEL_CPU;
pub const NOSV_TOPO_LEVEL_COUNT: crate::nosv_topo_level_t =
    crate::nosv_topo_level_NOSV_TOPO_LEVEL_COUNT;

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn flag_constants_match_header_bits() {
        assert_eq!(NOSV_TYPE_INIT_EXTERNAL, 1);
        assert_eq!(NOSV_CREATE_PARALLEL, 1);
        assert_eq!(NOSV_CREATE_JOINABLE, 2);
        assert_eq!(NOSV_SUBMIT_UNLOCKED, 1);
        assert_eq!(NOSV_SUBMIT_BLOCKING, 2);
        assert_eq!(NOSV_SUBMIT_IMMEDIATE, 4);
        assert_eq!(NOSV_SUBMIT_INLINE, 8);
        assert_eq!(NOSV_SUBMIT_DEADLINE_WAKE, 16);
        assert_eq!(NOSV_YIELD_NOFLUSH, 1);
        assert_eq!(NOSV_ATTACH_INSTRUMENT, 1);
        assert_eq!(NOSV_DETACH_NO_RESTORE_AFFINITY, 1);
        assert_eq!(NOSV_DETACH_INSTRUMENT, 2);
    }

    #[test]
    fn public_aliases_match_bindgen_enum_constants() {
        assert_eq!(NOSV_SUCCESS, crate::nosv_err_NOSV_SUCCESS);
        assert_eq!(
            NOSV_ERR_NOT_INITIALIZED,
            crate::nosv_err_NOSV_ERR_NOT_INITIALIZED
        );
        assert_eq!(
            NOSV_SUSPEND_MODE_EVENT_SUBMIT,
            crate::nosv_suspend_mode_NOSV_SUSPEND_MODE_EVENT_SUBMIT
        );
        assert_eq!(
            NOSV_AFFINITY_LEVEL_CPU,
            crate::nosv_affinity_level_NOSV_AFFINITY_LEVEL_CPU
        );
        assert_eq!(
            NOSV_TOPO_LEVEL_CPU,
            crate::nosv_topo_level_NOSV_TOPO_LEVEL_CPU
        );
    }
}