pub struct Cap<T: CapType, C = NoExplicitInvocationContext> { /* private fields */ }Expand description
A capability pointer to be resolved in the current CSpace.
- The 
Tparameter is aCapTypemarking the type of the pointed-to capability. - The 
Cparameter is a strategy for discovering the current thread’s IPC buffer. When the"state"feature is enabled,NoExplicitInvocationContextis an alias forImplicitInvocationContext, which uses theIpcBufferset byset_ipc_buffer. Otherwise, it is an alias forNoInvocationContext, which does not implementInvocationContext. In such cases, thewithmethod is used to specify an invocation context before the capability is invoked. 
The most general way to construct a Cap is with CPtr::cast.
Note that seL4_CNode_* capability invocations are methods of AbsoluteCPtr rather than
Cap.
Implementations§
source§impl<C: InvocationContext> Cap<VCpu, C>
 
impl<C: InvocationContext> Cap<VCpu, C>
sourcepub fn vcpu_set_tcb(self, tcb: Tcb) -> Result<()>
 
pub fn vcpu_set_tcb(self, tcb: Tcb) -> Result<()>
Corresponds to seL4_ARM_VCPU_SetTCB.
sourcepub fn vcpu_read_regs(self, field: VCpuReg) -> Result<Word>
 
pub fn vcpu_read_regs(self, field: VCpuReg) -> Result<Word>
Corresponds to seL4_ARM_VCPU_ReadRegs.
sourcepub fn vcpu_write_regs(self, field: VCpuReg, value: Word) -> Result<()>
 
pub fn vcpu_write_regs(self, field: VCpuReg, value: Word) -> Result<()>
Corresponds to seL4_ARM_VCPU_WriteRegs.
sourcepub fn vcpu_ack_vppi(self, irq: Word) -> Result<()>
 
pub fn vcpu_ack_vppi(self, irq: Word) -> Result<()>
Corresponds to seL4_ARM_VCPU_AckVPPI.
sourcepub fn vcpu_inject_irq(
    self,
    virq: u16,
    priority: u8,
    group: u8,
    index: u8,
) -> Result<()>
 
pub fn vcpu_inject_irq( self, virq: u16, priority: u8, group: u8, index: u8, ) -> Result<()>
Corresponds to seL4_ARM_VCPU_InjectIRQ.
source§impl<T: CapTypeForFrameObject, C: InvocationContext> Cap<T, C>
 
impl<T: CapTypeForFrameObject, C: InvocationContext> Cap<T, C>
sourcepub fn frame_map(
    self,
    vspace: VSpace,
    vaddr: usize,
    rights: CapRights,
    attrs: VmAttributes,
) -> Result<()>
 
pub fn frame_map( self, vspace: VSpace, vaddr: usize, rights: CapRights, attrs: VmAttributes, ) -> Result<()>
Corresponds to seL4_ARM_Page_Map.
sourcepub fn frame_unmap(self) -> Result<()>
 
pub fn frame_unmap(self) -> Result<()>
Corresponds to seL4_ARM_Page_Unmap.
sourcepub fn frame_get_address(self) -> Result<usize>
 
pub fn frame_get_address(self) -> Result<usize>
Corresponds to seL4_ARM_Page_GetAddress.
source§impl<C: InvocationContext> Cap<PT, C>
 
impl<C: InvocationContext> Cap<PT, C>
pub fn pt_map( self, vspace: VSpace, vaddr: usize, attr: VmAttributes, ) -> Result<()>
source§impl<C: InvocationContext> Cap<UnspecifiedIntermediateTranslationTable, C>
 
impl<C: InvocationContext> Cap<UnspecifiedIntermediateTranslationTable, C>
pub fn generic_intermediate_translation_table_map( self, ty: TranslationTableObjectType, vspace: VSpace, vaddr: usize, attr: VmAttributes, ) -> Result<()>
source§impl<C: InvocationContext> Cap<IrqControl, C>
 
impl<C: InvocationContext> Cap<IrqControl, C>
sourcepub fn irq_control_get_trigger(
    self,
    irq: Word,
    edge_triggered: bool,
    dst: &AbsoluteCPtr,
) -> Result<()>
 
pub fn irq_control_get_trigger( self, irq: Word, edge_triggered: bool, dst: &AbsoluteCPtr, ) -> Result<()>
Corresponds to seL4_IRQControl_GetTrigger.
source§impl<C: InvocationContext> Cap<AsidControl, C>
 
impl<C: InvocationContext> Cap<AsidControl, C>
sourcepub fn asid_control_make_pool(
    self,
    untyped: Untyped,
    dst: &AbsoluteCPtr,
) -> Result<()>
 
pub fn asid_control_make_pool( self, untyped: Untyped, dst: &AbsoluteCPtr, ) -> Result<()>
Corresponds to seL4_ARM_ASIDControl_MakePool.
source§impl<C: InvocationContext> Cap<AsidPool, C>
 
impl<C: InvocationContext> Cap<AsidPool, C>
sourcepub fn asid_pool_assign(self, vspace: VSpace) -> Result<()>
 
pub fn asid_pool_assign(self, vspace: VSpace) -> Result<()>
Corresponds to seL4_ARM_ASIDPool_Assign.
source§impl<C> Cap<CNode, C>
 
impl<C> Cap<CNode, C>
sourcepub fn absolute_cptr<T: HasCPtrWithDepth>(self, path: T) -> AbsoluteCPtr<C>
 
pub fn absolute_cptr<T: HasCPtrWithDepth>(self, path: T) -> AbsoluteCPtr<C>
Returns the AbsoluteCPtr for path in the context of self.
sourcepub fn absolute_cptr_from_bits_with_depth(
    self,
    bits: CPtrBits,
    depth: usize,
) -> AbsoluteCPtr<C>
 
pub fn absolute_cptr_from_bits_with_depth( self, bits: CPtrBits, depth: usize, ) -> AbsoluteCPtr<C>
Returns the AbsoluteCPtr for
CPtrWithDepth::from_bits_with_depth(bits, depth)
in the context of self.
sourcepub fn absolute_cptr_for_self(self) -> AbsoluteCPtr<C>
 
pub fn absolute_cptr_for_self(self) -> AbsoluteCPtr<C>
Returns the AbsoluteCPtr for self in its own context.
Currently implemented as:
self.absolute_cptr(CPtrWithDepth::empty())source§impl<C: InvocationContext> Cap<Untyped, C>
 
impl<C: InvocationContext> Cap<Untyped, C>
sourcepub fn untyped_retype(
    self,
    blueprint: &ObjectBlueprint,
    dst: &AbsoluteCPtr,
    dst_offset: usize,
    num_objects: usize,
) -> Result<()>
 
pub fn untyped_retype( self, blueprint: &ObjectBlueprint, dst: &AbsoluteCPtr, dst_offset: usize, num_objects: usize, ) -> Result<()>
Corresponds to seL4_Untyped_Retype.
source§impl<C: InvocationContext> Cap<Tcb, C>
 
impl<C: InvocationContext> Cap<Tcb, C>
sourcepub fn tcb_read_registers(
    self,
    suspend: bool,
    count: Word,
) -> Result<UserContext>
 
pub fn tcb_read_registers( self, suspend: bool, count: Word, ) -> Result<UserContext>
Corresponds to seL4_TCB_ReadRegisters.
pub fn tcb_read_all_registers(self, suspend: bool) -> Result<UserContext>
sourcepub fn tcb_write_registers(
    self,
    resume: bool,
    count: Word,
    regs: &mut UserContext,
) -> Result<()>
 
pub fn tcb_write_registers( self, resume: bool, count: Word, regs: &mut UserContext, ) -> Result<()>
Corresponds to seL4_TCB_WriteRegisters.
pub fn tcb_write_all_registers( self, resume: bool, regs: &mut UserContext, ) -> Result<()>
sourcepub fn tcb_resume(self) -> Result<()>
 
pub fn tcb_resume(self) -> Result<()>
Corresponds to seL4_TCB_Resume.
sourcepub fn tcb_suspend(self) -> Result<()>
 
pub fn tcb_suspend(self) -> Result<()>
Corresponds to seL4_TCB_Suspend.
sourcepub fn tcb_configure(
    self,
    cspace_root: CNode,
    cspace_root_data: CNodeCapData,
    vspace_root: VSpace,
    ipc_buffer: Word,
    ipc_buffer_frame: Granule,
) -> Result<()>
 
pub fn tcb_configure( self, cspace_root: CNode, cspace_root_data: CNodeCapData, vspace_root: VSpace, ipc_buffer: Word, ipc_buffer_frame: Granule, ) -> Result<()>
Corresponds to seL4_TCB_Configure.
sourcepub fn tcb_set_space(
    self,
    fault_ep: CPtr,
    cspace_root: CNode,
    cspace_root_data: CNodeCapData,
    vspace_root: VSpace,
) -> Result<()>
 
pub fn tcb_set_space( self, fault_ep: CPtr, cspace_root: CNode, cspace_root_data: CNodeCapData, vspace_root: VSpace, ) -> Result<()>
Corresponds to seL4_TCB_SetSpace.
sourcepub fn tcb_set_sched_params(
    self,
    authority: Tcb,
    mcp: Word,
    priority: Word,
    sched_context: SchedContext,
    fault_ep: Endpoint,
) -> Result<()>
 
pub fn tcb_set_sched_params( self, authority: Tcb, mcp: Word, priority: Word, sched_context: SchedContext, fault_ep: Endpoint, ) -> Result<()>
Corresponds to seL4_TCB_SetSchedParams.
pub fn tcb_set_timeout_endpoint(self, timeout_endpoint: Endpoint) -> Result<()>
sourcepub fn tcb_set_tls_base(self, tls_base: Word) -> Result<()>
 
pub fn tcb_set_tls_base(self, tls_base: Word) -> Result<()>
Corresponds to seL4_TCB_SetTLSBase.
sourcepub fn tcb_bind_notification(self, notification: Notification) -> Result<()>
 
pub fn tcb_bind_notification(self, notification: Notification) -> Result<()>
Corresponds to seL4_TCB_BindNotification.
sourcepub fn tcb_unbind_notification(self) -> Result<()>
 
pub fn tcb_unbind_notification(self) -> Result<()>
Corresponds to seL4_TCB_UnbindNotification.
source§impl<C: InvocationContext> Cap<SchedControl, C>
 
impl<C: InvocationContext> Cap<SchedControl, C>
sourcepub fn sched_control_configure_flags(
    self,
    sched_context: SchedContext,
    budget: Time,
    period: Time,
    extra_refills: Word,
    badge: Badge,
    flags: Word,
) -> Result<()>
 
pub fn sched_control_configure_flags( self, sched_context: SchedContext, budget: Time, period: Time, extra_refills: Word, badge: Badge, flags: Word, ) -> Result<()>
Corresponds to seL4_SchedControl_ConfigureFlags.
source§impl<C: InvocationContext> Cap<IrqControl, C>
 
impl<C: InvocationContext> Cap<IrqControl, C>
sourcepub fn irq_control_get(self, irq: Word, dst: &AbsoluteCPtr) -> Result<()>
 
pub fn irq_control_get(self, irq: Word, dst: &AbsoluteCPtr) -> Result<()>
Corresponds to seL4_IRQControl_Get.
source§impl<C: InvocationContext> Cap<IrqHandler, C>
 
impl<C: InvocationContext> Cap<IrqHandler, C>
sourcepub fn irq_handler_ack(self) -> Result<()>
 
pub fn irq_handler_ack(self) -> Result<()>
Corresponds to seL4_IRQHandler_Ack.
sourcepub fn irq_handler_set_notification(
    self,
    notification: Notification,
) -> Result<()>
 
pub fn irq_handler_set_notification( self, notification: Notification, ) -> Result<()>
Corresponds to seL4_IRQHandler_SetNotification.
sourcepub fn irq_handler_clear(self) -> Result<()>
 
pub fn irq_handler_clear(self) -> Result<()>
Corresponds to seL4_IRQHandler_Clear.
source§impl<C: InvocationContext> Cap<Endpoint, C>
 
impl<C: InvocationContext> Cap<Endpoint, C>
sourcepub fn send(self, info: MessageInfo)
 
pub fn send(self, info: MessageInfo)
Corresponds to seL4_Send.
sourcepub fn nb_send(self, info: MessageInfo)
 
pub fn nb_send(self, info: MessageInfo)
Corresponds to seL4_NBSend.
sourcepub fn recv(
    self,
    reply_authority: impl ConveysReplyAuthority,
) -> (MessageInfo, Badge)
 
pub fn recv( self, reply_authority: impl ConveysReplyAuthority, ) -> (MessageInfo, Badge)
Corresponds to seL4_Recv.
sourcepub fn nb_recv(
    self,
    reply_authority: impl ConveysReplyAuthority,
) -> (MessageInfo, Badge)
 
pub fn nb_recv( self, reply_authority: impl ConveysReplyAuthority, ) -> (MessageInfo, Badge)
Corresponds to seL4_NBRecv.
sourcepub fn call(self, info: MessageInfo) -> MessageInfo
 
pub fn call(self, info: MessageInfo) -> MessageInfo
Corresponds to seL4_Call.
sourcepub fn reply_recv(
    self,
    info: MessageInfo,
    reply_authority: impl ConveysReplyAuthority,
) -> (MessageInfo, Badge)
 
pub fn reply_recv( self, info: MessageInfo, reply_authority: impl ConveysReplyAuthority, ) -> (MessageInfo, Badge)
Corresponds to seL4_ReplyRecv.
pub fn send_with_mrs<T: FastMessages>(self, info: MessageInfo, messages: T)
pub fn recv_with_mrs( self, reply_authority: impl ConveysReplyAuthority, ) -> RecvWithMRs
pub fn call_with_mrs<T: FastMessages>( self, info: MessageInfo, messages: T, ) -> CallWithMRs
source§impl<C: InvocationContext> Cap<Notification, C>
 
impl<C: InvocationContext> Cap<Notification, C>
source§impl<C: InvocationContext> Cap<Reply, C>
 
impl<C: InvocationContext> Cap<Reply, C>
sourcepub fn send(self, info: MessageInfo)
 
pub fn send(self, info: MessageInfo)
Corresponds to seL4_Send.
source§impl<T: IpcCapType, C: InvocationContext> Cap<T, C>
 
impl<T: IpcCapType, C: InvocationContext> Cap<T, C>
sourcepub fn nb_send_recv<U: IpcCapType>(
    self,
    info: MessageInfo,
    src: Cap<U>,
    reply_authority: impl ConveysReplyAuthority,
) -> (MessageInfo, Badge)
 
pub fn nb_send_recv<U: IpcCapType>( self, info: MessageInfo, src: Cap<U>, reply_authority: impl ConveysReplyAuthority, ) -> (MessageInfo, Badge)
Corresponds to seL4_NBSendRecv.
source§impl<C: InvocationContext> Cap<Tcb, C>
 
impl<C: InvocationContext> Cap<Tcb, C>
sourcepub fn debug_name(self, name: &[u8])
 
pub fn debug_name(self, name: &[u8])
Corresponds to seL4_DebugNameThread.
Trait Implementations§
source§impl<T: CapType, C> HasCPtrWithDepth for Cap<T, C>
 
impl<T: CapType, C> HasCPtrWithDepth for Cap<T, C>
source§fn cptr_with_depth(self) -> CPtrWithDepth
 
fn cptr_with_depth(self) -> CPtrWithDepth
CPtrWithDepth entailed by self.source§impl<T: Ord + CapType, C: Ord> Ord for Cap<T, C>
 
impl<T: Ord + CapType, C: Ord> Ord for Cap<T, C>
source§impl<T: PartialOrd + CapType, C: PartialOrd> PartialOrd for Cap<T, C>
 
impl<T: PartialOrd + CapType, C: PartialOrd> PartialOrd for Cap<T, C>
impl<T: Copy + CapType, C: Copy> Copy for Cap<T, C>
impl<T: Eq + CapType, C: Eq> Eq for Cap<T, C>
impl<T: CapType, C> StructuralPartialEq for Cap<T, C>
Auto Trait Implementations§
impl<T, C> Freeze for Cap<T, C>where
    C: Freeze,
impl<T, C> RefUnwindSafe for Cap<T, C>where
    C: RefUnwindSafe,
    T: RefUnwindSafe,
impl<T, C> Send for Cap<T, C>where
    C: Send,
    T: Send,
impl<T, C> Sync for Cap<T, C>where
    C: Sync,
    T: Sync,
impl<T, C> Unpin for Cap<T, C>where
    C: Unpin,
    T: Unpin,
impl<T, C> UnwindSafe for Cap<T, C>where
    C: UnwindSafe,
    T: UnwindSafe,
Blanket Implementations§
§impl<T> Any for Twhere
    T: 'static + ?Sized,
 
impl<T> Any for Twhere
    T: 'static + ?Sized,
§impl<T> Borrow<T> for Twhere
    T: ?Sized,
 
impl<T> Borrow<T> for Twhere
    T: ?Sized,
§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
§unsafe fn clone_to_uninit(&self, dst: *mut T)
 
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)