Skip to main content

components/
syscall_return_test.rs

1// Licensed under the Apache License, Version 2.0 or the MIT License.
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3// Copyright Tock Contributors 2026.
4
5//! Component for the SyscallReturnTest capsule.
6//!
7//! Capsule: capsules/extra/src/syscall_return_test.rs
8
9use core::mem::MaybeUninit;
10use kernel::capabilities::MemoryAllocationCapability;
11use kernel::component::Component;
12
13#[macro_export]
14macro_rules! syscall_return_test_component_static {
15    () => {{ kernel::static_buf!(capsules_extra::syscall_return_test::SyscallReturnTest) }};
16}
17
18pub type SyscallReturnTestComponentType = capsules_extra::syscall_return_test::SyscallReturnTest;
19
20pub struct SyscallReturnTestComponent<CAP: MemoryAllocationCapability + 'static> {
21    board_kernel: &'static kernel::Kernel,
22    driver_num: usize,
23    mem_cap: CAP,
24}
25
26impl<CAP: MemoryAllocationCapability + 'static> SyscallReturnTestComponent<CAP> {
27    pub fn new(board_kernel: &'static kernel::Kernel, driver_num: usize, mem_cap: CAP) -> Self {
28        Self {
29            board_kernel,
30            driver_num,
31            mem_cap,
32        }
33    }
34}
35
36impl<CAP: MemoryAllocationCapability + 'static> Component for SyscallReturnTestComponent<CAP> {
37    type StaticInput =
38        &'static mut MaybeUninit<capsules_extra::syscall_return_test::SyscallReturnTest>;
39    type Output = &'static capsules_extra::syscall_return_test::SyscallReturnTest;
40
41    fn finalize(self, s: Self::StaticInput) -> Self::Output {
42        let grant = self
43            .board_kernel
44            .create_grant(self.driver_num, &self.mem_cap);
45        s.write(capsules_extra::syscall_return_test::SyscallReturnTest::new(
46            grant,
47        ))
48    }
49}