use crate::runtime::cpu::{IrqGuardToken, PreemptGuardToken};
pub(crate) mod clock;
mod handle;
mod interface;
pub use interface::*;
#[derive(Clone, Copy)]
#[repr(usize)]
pub(crate) enum PreemptGuardSource {
TicketLock,
ExplicitScope,
SyncContext,
SchedulerActivity,
IrqReturn,
}
#[derive(Clone, Copy)]
#[repr(usize)]
pub(crate) enum IrqGuardSource {
ThreadSchedTicket,
DeadlineServerTicket,
CpuRunQueueTransactionTicket,
CpuRunQueueOwnerCurrentThreadObservationTicket,
CpuRunQueueOwnerCurrentCoreObservationTicket,
CpuRunQueueOwnerRunnableObservationTicket,
CpuRunQueueTimerDeadlineDerivationObservationTicket,
CpuRunQueueRtAccountingTicket,
CpuRunQueueDeadlineAccountingTicket,
CpuRunQueueMembarrierTicket,
CpuRunQueueLifecycleTicket,
CpuRtBandwidthTicket,
#[cfg(feature = "qperf-metrics")]
CpuDeadlineObservationTicket,
CpuDeadlinePublicationTicket,
CpuDeadlineRegistrationTicket,
CpuDeadlineHardExpiryTicket,
CpuDeadlineSoftExpiryTicket,
CpuDeadlineLifecycleTicket,
RootRtRuntimeTicket,
RootRtPeriodTicket,
RootDeadlineIndexTicket,
ExplicitScope,
RuntimeCpu,
Executor,
}
pub(crate) fn enter_preempt_guard(source: PreemptGuardSource) -> PreemptGuardToken {
let token = task_runtime::preempt_guard_enter();
#[cfg(feature = "qperf-metrics")]
crate::diagnostics::counters::record_runtime_preempt_guard_entry(source, token.is_none());
#[cfg(not(feature = "qperf-metrics"))]
let _ = source;
token
}
pub(crate) fn enter_irq_guard(source: IrqGuardSource) -> IrqGuardToken {
let token = task_runtime::irq_guard_enter();
#[cfg(feature = "qperf-metrics")]
crate::diagnostics::counters::record_runtime_irq_guard_entry(source, token.is_none());
#[cfg(not(feature = "qperf-metrics"))]
let _ = source;
token
}
pub use crate::sched::system::TaskSystem;
pub mod cpu;
pub mod resource;
pub mod switch;
pub mod service;
pub mod sync;
pub(crate) mod context;
use crate::runtime::handle::opaque_handle;
opaque_handle!(
TaskSystemHandle,
"runtime"
);
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[repr(u32)]
pub enum RuntimeStatus {
Success = 0,
NotInitialized = 1,
InvalidHandle = 2,
InvalidArgument = 3,
NoMemory = 4,
Unsupported = 5,
Busy = 6,
Platform = 7,
UnsafeContext = 8,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[repr(C)]
pub struct RuntimeHandleResult {
pub status: RuntimeStatus,
pub handle: usize,
}
impl RuntimeHandleResult {
pub const fn success(handle: usize) -> Self {
Self {
status: RuntimeStatus::Success,
handle,
}
}
pub const fn failure(status: RuntimeStatus) -> Self {
Self { status, handle: 0 }
}
}
pub mod config;
pub(crate) mod lock;
pub(crate) mod delivery;