rust_utee/api/
tee_api_internal_client.rs1use 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}