#![allow(non_camel_case_types, unused)] use libc::{self, c_int, size_t, c_char, BOOL, RTP_DESC, RTP_ID, TASK_ID}; // Copied directly from rtpLibCommon.h, rtpLib.h, signal.h and taskLibCommon.h (for task options) // **** definitions for rtpLibCommon.h **** pub const RTP_GLOBAL_SYMBOLS : c_int = 0x01; // register global symbols for RTP pub const RTP_LOCAL_SYMBOLS : c_int = 0x02; // idem for local symbols pub const RTP_ALL_SYMBOLS : c_int = (RTP_GLOBAL_SYMBOLS | RTP_LOCAL_SYMBOLS); pub const RTP_DEBUG : c_int = 0x10; // set RTP in debug mode when created pub const RTP_BUFFER_VAL_OFF : c_int = 0x20; // disable buffer validation for all // system calls issued from the RTP pub const RTP_LOADED_WAIT : c_int = 0x40; // Wait until the RTP is loaded pub const RTP_CPU_AFFINITY_NONE : c_int = 0x80; // Remove any CPU affinity (SMP) // Error Status codes pub const M_rtpLib : c_int = 178 << 16; pub const S_rtpLib_INVALID_FILE : c_int = (M_rtpLib | 1); pub const S_rtpLib_INVALID_OPTION : c_int = (M_rtpLib | 2); pub const S_rtpLib_ACCESS_DENIED : c_int = (M_rtpLib | 3); pub const S_rtpLib_INVALID_RTP_ID : c_int = (M_rtpLib | 4); pub const S_rtpLib_NO_SYMBOL_TABLE : c_int = (M_rtpLib | 5); pub const S_rtpLib_INVALID_SEGMENT_START_ADDRESS : c_int = (M_rtpLib | 6); pub const S_rtpLib_INVALID_SYMBOL_REGISTR_POLICY : c_int = (M_rtpLib | 7); pub const S_rtpLib_INSTANTIATE_FAILED : c_int = (M_rtpLib | 8); pub const S_rtpLib_INVALID_TASK_OPTION : c_int = (M_rtpLib | 9); pub const S_rtpLib_RTP_NAME_LENGTH_EXCEEDED : c_int = (M_rtpLib | 10); // rtpInfoGet pub const VX_RTP_NAME_LENGTH : c_int = 255; // max name length for diplay // The 'status' field (32 bit integer) of a RTP holds the RTP state and status. // // NOTE: RTP_STATE_GET() : read the RTP state(s) // RTP_STATE_PUT() : write the RTP state(s) // RTP_STATE_SET() : set a RTP state // RTP_STATE_UNSET() : unset a RTP state // // RTP_STATUS_GET() : read the RTP status // RTP_STATUS_PUT() : write the RTP status // RTP_STATUS_SET() : set a RTP status // RTP_STATUS_UNSET() : unset a RTP status // // The PUT/SET/UNSET macros are available only in the kernel headers. // RTP states pub const RTP_STATE_CREATE : c_int = 0x0001; // RrtpStructTP is under construction pub const RTP_STATE_NORMAL : c_int = 0x0002; // RrtpStructTP is ready pub const RTP_STATE_DELETE : c_int = 0x0004; // RrtpStructTP is being deleted pub const RTP_STATUS_STOP : c_int = 0x0100; // RTP hrtpStructas recieved stopped signal pub const RTP_STATUS_ELECTED_DELETER : c_int = 0x0200; // RTP drtpStructelete has started pub const RTP_STATE_MASK : c_int = (RTP_STATE_CREATE | RTP_STATE_NORMAL | RTP_STATE_DELETE); pub const RTP_STATUS_MASK : c_int = (RTP_STATUS_STOP | RTP_STATUS_ELECTED_DELETER); pub fn RTP_STATE_GET (value : c_int) -> c_int { value & RTP_STATE_MASK } pub fn RTP_STATUS_GET (value : c_int) -> c_int { value & RTP_STATUS_MASK } // Indicates that the RTP_ID returned is not valid. // RTP_ID_ERROR is supposed to be set to -1, but you can't set // an unsigned value to a negative without casting, and you // can't cast unless the size of the integer types are the same, // but the size of RTP_ID may differ between kernel and user space. // Bitwise or-ing min and max should get the same result. pub const RTP_ID_ERROR : RTP_ID = RTP_ID::min_value() | RTP_ID::max_value(); // IS_RTP_ C macros pub fn IS_RTP_STATE_NORMAL (value : c_int) -> bool { (RTP_STATE_GET(value) & RTP_STATE_NORMAL) == RTP_STATE_NORMAL } pub fn IS_RTP_STATE_CREATE (value : c_int) -> bool { (RTP_STATE_GET(value) & RTP_STATE_CREATE) == RTP_STATE_CREATE } pub fn IS_RTP_STATE_DELETE (value : c_int) -> bool { (RTP_STATE_GET(value) & RTP_STATE_DELETE) == RTP_STATE_DELETE } pub fn IS_RTP_STATUS_STOP (value : c_int) -> bool { (RTP_STATUS_GET(value) & RTP_STATUS_STOP ) == RTP_STATUS_STOP } pub fn IS_RTP_STATUS_ELECTED_DELETER (value : c_int) -> bool { (RTP_STATUS_GET(value) & RTP_STATUS_ELECTED_DELETER) == RTP_STATUS_ELECTED_DELETER } // **** end of definitions for rtpLibCommon.h **** // **** definitions for rtpLib.h **** pub fn rtpExit(exitCode : c_int) -> ! { unsafe{ libc::exit (exitCode) } } /* rtpLib.h in the kernel pub const RTP_DEL_VIA_TASK_DELETE : c_int = 0x1; // rtpDelete() via taskDestroy() pub const RTP_DEL_FORCE : c_int = 0x2; // Forceful rtpDelete() pub const RTP_ID_ANY : RTP_ID = 0; // used for when a kernel task // wants to wait for the next // RTP to finish // Function pointers pub type RTP_PRE_CREATE_HOOK = size_t; pub type RTP_POST_CREATE_HOOK = size_t; pub type RTP_INIT_COMPLETE_HOOK = size_t; pub type RTP_DELETE_HOOK = size_t; */ // **** end of definitions for rtpLib.h **** // **** definitions for signal.h **** pub fn rtpKill(rtpId : RTP_ID, signo : c_int) -> c_int { unsafe{ libc::kill(rtpId as c_int, signo) } } pub fn rtpSigqueue(rtpId : RTP_ID, signo : c_int, value : size_t) -> c_int { unsafe{ libc::sigqueue(rtpId as c_int, signo, value) } } pub fn _rtpSigqueue(rtpId : RTP_ID, signo : c_int, value : *mut size_t, code : c_int) -> c_int { unsafe{ libc::_sigqueue(rtpId, signo, value, code) } } pub fn taskRaise(signo : c_int) -> c_int { unsafe{ libc::taskKill(libc::taskIdSelf(), signo) } } pub fn rtpRaise(signo : c_int) -> c_int { unsafe{ libc::raise(signo) } } // **** end of definitions for signal.h **** // **** definitions for taskLibCommon.h **** pub const VX_PRIVATE_ENV : c_int = 0x0080; // 1 = private environment variables pub const VX_NO_STACK_FILL : c_int = 0x0100; // 1 = avoid stack fill of 0xee pub const VX_PRIVATE_UMASK : c_int = 0x0400; // 1 = private file creation mode mask pub const VX_TASK_NOACTIVATE : c_int = 0x2000; // taskOpen() does not taskActivate() pub const VX_NO_STACK_PROTECT : c_int = 0x4000; // no over/underflow stack protection, // stack space remains executable // define for all valid user task options pub const VX_USR_TASK_OPTIONS_BASE: c_int = (VX_PRIVATE_ENV | VX_NO_STACK_FILL | VX_TASK_NOACTIVATE | VX_NO_STACK_PROTECT | VX_PRIVATE_UMASK); // **** end of definitions for taskLibCommon.h **** extern "C" { // functions in rtpLibCommon.h // forward declarations pub fn rtpSpawn ( pubrtpFileName : *const c_char, argv : *const *const c_char, envp : *const *const c_char, priority : c_int, uStackSize : size_t, options : c_int, taskOptions : c_int, ) -> RTP_ID; pub fn rtpInfoGet ( rtpId : RTP_ID, rtpStruct : *mut RTP_DESC, ) -> c_int; /* functions in rtpLib.h for kernel // function declarations pub fn rtpDelete ( id : RTP_ID, options : c_int, status : c_int, ) -> c_int; pub fn rtpDeleteForce ( rtpId : RTP_ID ) -> c_int; pub fn rtpShow ( rtpNameOrId : *mut c_char, level : c_int, ) -> BOOL; // RTP signals are always present when RTPs are included. The public RTP // signal APIs are declared here. pub fn rtpKill ( rtpId : RTP_ID, signo : c_int, ) -> c_int; pub fn rtpSigqueue ( rtpId : RTP_ID, signo : c_int, value : size_t, // Actual type is const union sigval value, // which is a union of int and void * ) -> c_int; pub fn rtpTaskKill ( tid : TASK_ID, signo : c_int, ) -> c_int; pub fn rtpTaskSigqueue ( tid : TASK_ID, signo : c_int, value : const size_t, // Actual type is const union sigval, // which is a union of int and void * ) -> c_int; pub fn rtpWait ( rtpWaitId : RTP_ID, timeout : libc::alloc_jemalloc_Vx_ticks_t, pRtpId : *mut RTP_ID, pStatus : *mut c_int, ) -> c_int; // Other public functions pub fn rtpPreCreateHookAdd ( hook : RTP_PRE_CREATE_HOOK, addToHead : BOOL, ) -> c_int; pub fn rtpPreCreateHookDelete ( hook : RTP_POST_CREATE_HOOK, ) -> c_int; pub fn rtpPostCreateHookAdd ( hook : RTP_POST_CREATE_HOOK, addToHead : BOOL, ) -> c_int; pub fn rtpPostCreateHookDelete ( hook : RTP_POST_CREATE_HOOK, ) -> c_int; pub fn rtpInitCompleteHookAdd ( hook : RTP_INIT_COMPLETE_HOOK, addToHead : BOOL, ) -> c_int; pub fn rtpInitCompleteHookDelete ( hook : RTP_INIT_COMPLETE_HOOK, ) -> c_int; pub fn rtpDeleteHookAdd ( hook : RTP_DELETE_HOOK, addToHead : BOOL, ) -> c_int; pub fn rtpDeleteHookDelete ( hook : RTP_DELETE_HOOK, ) -> c_int; pub fn rtpMemShow ( rtpNameOrId : *mut c_char, level : c_int, ) -> c_int; pub fn rtpHookShow ( ); */ }