Skip to main content

rust_utee/api/
tee_api_internal_client.rs

1use crate::{
2    api::{
3        tee_api_generic::{copy_param, update_out_param},
4        tee_api_panic::TEE_Panic,
5    },
6    syscalls::syscall_table::{
7        _utee_close_ta_session, _utee_invoke_ta_command, _utee_open_ta_session,
8    },
9    tee_api_defines::{TEE_HANDLE_NULL, TEE_NUM_PARAMS, TEE_SUCCESS},
10    tee_api_types::{TEE_Param, TEE_Result, TEE_TASessionHandle, TEE_UUID},
11    utee_types::utee_params,
12};
13
14#[unsafe(no_mangle)]
15pub extern "C" fn TEE_OpenTASession(
16    destination: *const TEE_UUID,
17    cancellationRequestTimeout: u32,
18    paramTypes: u32,
19    params: *mut [TEE_Param; TEE_NUM_PARAMS as usize],
20    session: *mut TEE_TASessionHandle,
21    returnOrigin: *mut u32,
22) -> TEE_Result {
23    let mut up = utee_params {
24        types: 0,
25        vals: [0; _],
26    };
27    copy_param(&mut up, paramTypes, params);
28    let res = unsafe {
29        _utee_open_ta_session(
30            destination,
31            cancellationRequestTimeout as _,
32            &mut up as _,
33            session as _,
34            returnOrigin as _,
35        )
36    };
37    update_out_param(params, &up);
38
39    res as TEE_Result
40}
41
42#[unsafe(no_mangle)]
43pub extern "C" fn TEE_CloseTASession(session: TEE_TASessionHandle) {
44    if session != TEE_HANDLE_NULL as _ {
45        let res = unsafe { _utee_close_ta_session(session as _) } as u32;
46
47        if res != TEE_SUCCESS {
48            TEE_Panic(res);
49        }
50    }
51}
52
53#[unsafe(no_mangle)]
54pub extern "C" fn TEE_InvokeTACommand(
55    session: TEE_TASessionHandle,
56    cancellationRequestTimeout: u32,
57    commandID: u32,
58    paramTypes: u32,
59    params: *mut [TEE_Param; TEE_NUM_PARAMS as usize],
60    returnOrigin: *mut u32,
61) -> TEE_Result {
62    let mut up = utee_params {
63        types: 0,
64        vals: [0; _],
65    };
66    copy_param(&mut up, paramTypes, params);
67    let res = unsafe {
68        _utee_invoke_ta_command(
69            session as _,
70            cancellationRequestTimeout as _,
71            commandID as _,
72            session as _,
73            returnOrigin as _,
74        )
75    };
76    update_out_param(params, &up);
77
78    res as TEE_Result
79}