rust_utee/api/
tee_api_time.rs1use crate::api::tee_api_panic::TEE_Panic;
2use crate::syscalls::syscall_table::{_utee_get_time, _utee_set_ta_time, _utee_wait};
3use crate::tee_api_defines::{
4 TEE_ERROR_CANCEL, TEE_ERROR_OUT_OF_MEMORY, TEE_ERROR_OVERFLOW, TEE_ERROR_STORAGE_NO_SPACE,
5 TEE_ERROR_TIME_NEEDS_RESET, TEE_ERROR_TIME_NOT_SET, TEE_SUCCESS,
6};
7use crate::tee_api_types::{TEE_Result, TEE_Time};
8use crate::utee_types::utee_time_category;
9
10#[unsafe(no_mangle)]
11pub extern "C" fn TEE_GetSystemTime(time: *mut TEE_Time) {
12 let res = unsafe { _utee_get_time(utee_time_category::UTEE_TIME_CAT_SYSTEM as u64, time) };
13
14 if res != TEE_SUCCESS as usize {
16 TEE_Panic(res as TEE_Result);
17 }
18}
19
20#[unsafe(no_mangle)]
21pub extern "C" fn TEE_GetTAPersistentTime(time: *mut TEE_Time) -> TEE_Result {
22 let res =
23 unsafe { _utee_get_time(utee_time_category::UTEE_TIME_CAT_TA_PERSISTENT as u64, time) };
24
25 if res != TEE_ERROR_OVERFLOW as usize {
27 unsafe {
28 (*time).seconds = 0;
29 (*time).millis = 0;
30 }
31 }
32
33 if res != TEE_SUCCESS as usize
35 && res != TEE_ERROR_TIME_NOT_SET as usize
36 && res != TEE_ERROR_TIME_NEEDS_RESET as usize
37 && res != TEE_ERROR_OVERFLOW as usize
38 && res != TEE_ERROR_OUT_OF_MEMORY as usize
39 {
40 TEE_Panic(res as TEE_Result);
41 }
42
43 res as TEE_Result
44}
45
46#[unsafe(no_mangle)]
47pub extern "C" fn TEE_GetREETime(time: *mut TEE_Time) {
48 let res = unsafe { _utee_get_time(utee_time_category::UTEE_TIME_CAT_REE as u64, time) };
49
50 if res != TEE_SUCCESS as usize {
51 TEE_Panic(res as TEE_Result);
52 }
53}
54
55#[unsafe(no_mangle)]
56pub extern "C" fn TEE_Wait(timeout: u32) -> TEE_Result {
57 let res = unsafe { _utee_wait(timeout as u64) };
58
59 if res != TEE_SUCCESS as usize && res != TEE_ERROR_CANCEL as usize {
60 TEE_Panic(res as TEE_Result);
61 }
62
63 res as TEE_Result
64}
65
66#[unsafe(no_mangle)]
67pub extern "C" fn TEE_SetTAPersistentTime(time: *const TEE_Time) -> TEE_Result {
68 let res = unsafe { _utee_set_ta_time(time) };
69
70 if res != TEE_SUCCESS as usize
71 && res != TEE_ERROR_OUT_OF_MEMORY as usize
72 && res != TEE_ERROR_STORAGE_NO_SPACE as usize
73 {
74 TEE_Panic(res as TEE_Result);
75 }
76
77 res as TEE_Result
78}