This is an automated email from the ASF dual-hosted git repository.

yuanz pushed a commit to branch no-std
in repository 
https://gitbox.apache.org/repos/asf/incubator-teaclave-trustzone-sdk.git

commit 9cf82bef3aebe466836c41b984359b8d014e425e
Author: Sumit Garg <[email protected]>
AuthorDate: Thu Nov 23 18:46:40 2023 +0530

    optee-utee-sys: Add optional no_std feature support
    
    Default feature remains std support, no_std can be enabled optionally.
    
    Signed-off-by: Sumit Garg <[email protected]>
---
 optee-utee/optee-utee-sys/Cargo.toml               |  5 +-
 optee-utee/optee-utee-sys/src/lib.rs               |  2 +
 optee-utee/optee-utee-sys/src/tee_api.rs           |  8 ++-
 optee-utee/optee-utee-sys/src/tee_api_defines.rs   |  2 +-
 optee-utee/optee-utee-sys/src/tee_api_types.rs     |  9 ++-
 .../src/tee_internal_api_extensions.rs             |  5 +-
 optee-utee/optee-utee-sys/src/tee_isocket.rs       |  5 +-
 optee-utee/optee-utee-sys/src/tee_tcpsocket.rs     |  5 +-
 optee-utee/optee-utee-sys/src/tee_udpsocket.rs     |  5 +-
 optee-utee/optee-utee-sys/src/trace.rs             |  5 +-
 optee-utee/optee-utee-sys/src/user_ta_header.rs    | 27 +++++----
 optee-utee/optee-utee-sys/src/utee_syscalls.rs     | 65 +++++++++++-----------
 12 files changed, 87 insertions(+), 56 deletions(-)

diff --git a/optee-utee/optee-utee-sys/Cargo.toml 
b/optee-utee/optee-utee-sys/Cargo.toml
index 2e6bdcb..92fa456 100644
--- a/optee-utee/optee-utee-sys/Cargo.toml
+++ b/optee-utee/optee-utee-sys/Cargo.toml
@@ -25,5 +25,6 @@ description = "Native bindings to the libutee library."
 edition = "2018"
 links = "utee"
 
-[dependencies]
-libc = { path = "../../rust/libc", version = "=0.2.99" }
+[features]
+default = ["std"]
+std = []
diff --git a/optee-utee/optee-utee-sys/src/lib.rs 
b/optee-utee/optee-utee-sys/src/lib.rs
index 3284a5e..df98e94 100644
--- a/optee-utee/optee-utee-sys/src/lib.rs
+++ b/optee-utee/optee-utee-sys/src/lib.rs
@@ -15,6 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
+#![cfg_attr(not(feature = "std"), no_std)]
+#![feature(c_size_t)]
 #![allow(non_camel_case_types, non_snake_case)]
 
 pub use tee_api::*;
diff --git a/optee-utee/optee-utee-sys/src/tee_api.rs 
b/optee-utee/optee-utee-sys/src/tee_api.rs
index 2ef3e34..9db86eb 100644
--- a/optee-utee/optee-utee-sys/src/tee_api.rs
+++ b/optee-utee/optee-utee-sys/src/tee_api.rs
@@ -16,7 +16,11 @@
 // under the License.
 
 use super::*;
-use libc::*;
+
+#[cfg(feature = "std")]
+use std::os::raw::*;
+#[cfg(not(feature = "std"))]
+use core::ffi::*;
 
 extern "C" {
     // Property access functions
@@ -483,7 +487,7 @@ extern "C" {
     pub fn TEE_BigIntShiftRight(
         dest: *mut TEE_BigInt,
         op: *const TEE_BigInt,
-        bits: size_t,
+        bits: c_size_t,
     ) -> c_void;
     pub fn TEE_BigIntGetBit(src: *const TEE_BigInt, bitIndex: u32) -> bool;
     pub fn TEE_BigIntGetBitCount(src: *const TEE_BigInt) -> u32;
diff --git a/optee-utee/optee-utee-sys/src/tee_api_defines.rs 
b/optee-utee/optee-utee-sys/src/tee_api_defines.rs
index 3de3e12..2ad36bf 100644
--- a/optee-utee/optee-utee-sys/src/tee_api_defines.rs
+++ b/optee-utee/optee-utee-sys/src/tee_api_defines.rs
@@ -16,7 +16,7 @@
 // under the License.
 
 use super::tee_api_types::*;
-use std::ptr::null;
+use core::ptr::null;
 
 pub const TEE_CORE_API_MAJOR_VERSION: u32 = 0x00000001;
 pub const TEE_CORE_API_MINOR_VERSION: u32 = 0x00000003;
diff --git a/optee-utee/optee-utee-sys/src/tee_api_types.rs 
b/optee-utee/optee-utee-sys/src/tee_api_types.rs
index 140cdbf..755a173 100644
--- a/optee-utee/optee-utee-sys/src/tee_api_types.rs
+++ b/optee-utee/optee-utee-sys/src/tee_api_types.rs
@@ -15,10 +15,13 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use libc::*;
-
 // Common Definitions
 
+#[cfg(feature = "std")]
+use std::os::raw::*;
+#[cfg(not(feature = "std"))]
+use core::ffi::*;
+
 pub type TEE_Result = u32;
 
 #[repr(C)]
@@ -216,7 +219,7 @@ pub struct TEE_SEReaderProperties {
 #[repr(C)]
 pub struct TEE_SEAID {
     pub buffer: *mut u8,
-    pub bufferLen: size_t,
+    pub bufferLen: c_size_t,
 }
 
 // Other definitions
diff --git a/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs 
b/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs
index e940143..017160d 100644
--- a/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs
+++ b/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs
@@ -15,8 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+#[cfg(feature = "std")]
+use std::os::raw::*;
+#[cfg(not(feature = "std"))]
+use core::ffi::*;
 use super::*;
-use libc::*;
 
 extern "C" {
     /// tee_invoke_supp_plugin() - invoke a tee-supplicant's plugin
diff --git a/optee-utee/optee-utee-sys/src/tee_isocket.rs 
b/optee-utee/optee-utee-sys/src/tee_isocket.rs
index 4906711..672416e 100644
--- a/optee-utee/optee-utee-sys/src/tee_isocket.rs
+++ b/optee-utee/optee-utee-sys/src/tee_isocket.rs
@@ -15,8 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+#[cfg(feature = "std")]
+use std::os::raw::*;
+#[cfg(not(feature = "std"))]
+use core::ffi::*;
 use super::*;
-use libc::*;
 
 pub type TEE_iSocketHandle = *mut c_void;
 pub type TEE_iSocket = TEE_iSocket_s;
diff --git a/optee-utee/optee-utee-sys/src/tee_tcpsocket.rs 
b/optee-utee/optee-utee-sys/src/tee_tcpsocket.rs
index a010ef0..583f3d3 100644
--- a/optee-utee/optee-utee-sys/src/tee_tcpsocket.rs
+++ b/optee-utee/optee-utee-sys/src/tee_tcpsocket.rs
@@ -15,8 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+#[cfg(feature = "std")]
+use std::os::raw::*;
+#[cfg(not(feature = "std"))]
+use core::ffi::*;
 use super::*;
-use libc::*;
 
 pub type TEE_tcpSocket_Setup = TEE_tcpSocket_Setup_s;
 #[repr(C)]
diff --git a/optee-utee/optee-utee-sys/src/tee_udpsocket.rs 
b/optee-utee/optee-utee-sys/src/tee_udpsocket.rs
index 3bb13ce..1a6591f 100644
--- a/optee-utee/optee-utee-sys/src/tee_udpsocket.rs
+++ b/optee-utee/optee-utee-sys/src/tee_udpsocket.rs
@@ -15,8 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+#[cfg(feature = "std")]
+use std::os::raw::*;
+#[cfg(not(feature = "std"))]
+use core::ffi::*;
 use super::*;
-use libc::*;
 
 pub type TEE_udpSocket_Setup = TEE_udpSocket_Setup_s;
 #[repr(C)]
diff --git a/optee-utee/optee-utee-sys/src/trace.rs 
b/optee-utee/optee-utee-sys/src/trace.rs
index d632db9..5293ff8 100644
--- a/optee-utee/optee-utee-sys/src/trace.rs
+++ b/optee-utee/optee-utee-sys/src/trace.rs
@@ -15,7 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use libc::*;
+#[cfg(feature = "std")]
+use std::os::raw::*;
+#[cfg(not(feature = "std"))]
+use core::ffi::*;
 
 extern "C" {
     pub fn trace_ext_puts(str: *const c_char);
diff --git a/optee-utee/optee-utee-sys/src/user_ta_header.rs 
b/optee-utee/optee-utee-sys/src/user_ta_header.rs
index f25e8f3..9868f06 100644
--- a/optee-utee/optee-utee-sys/src/user_ta_header.rs
+++ b/optee-utee/optee-utee-sys/src/user_ta_header.rs
@@ -15,10 +15,13 @@
 // specific language governing permissions and limitations
 // under the License.
 
+#[cfg(feature = "std")]
+use std::os::raw::*;
+#[cfg(not(feature = "std"))]
+use core::ffi::*;
 use super::tee_api_types::*;
 use super::utee_syscalls::*;
 use super::utee_types::*;
-use libc::*;
 
 pub const TA_FLAG_SINGLE_INSTANCE: u32 = 1 << 2;
 pub const TA_FLAG_MULTI_SESSION: u32 = 1 << 3;
@@ -50,16 +53,16 @@ pub fn __ta_entry(func: c_ulong, session_id: c_ulong, up: 
*mut utee_params, cmd_
 
 unsafe impl Sync for ta_head {}
 
-pub const TA_PROP_STR_SINGLE_INSTANCE: *const c_char = 
"gpd.ta.singleInstance\0".as_ptr();
-pub const TA_PROP_STR_MULTI_SESSION: *const c_char = 
"gpd.ta.multiSession\0".as_ptr();
-pub const TA_PROP_STR_KEEP_ALIVE: *const c_char = 
"gpd.ta.instanceKeepAlive\0".as_ptr();
-pub const TA_PROP_STR_DATA_SIZE: *const c_char = "gpd.ta.dataSize\0".as_ptr();
-pub const TA_PROP_STR_STACK_SIZE: *const c_char = 
"gpd.ta.stackSize\0".as_ptr();
-pub const TA_PROP_STR_VERSION: *const c_char = "gpd.ta.version\0".as_ptr();
-pub const TA_PROP_STR_DESCRIPTION: *const c_char = 
"gpd.ta.description\0".as_ptr();
-pub const TA_PROP_STR_UNSAFE_PARAM: *const c_char = 
"op-tee.unsafe_param\0".as_ptr();
-pub const TA_PROP_STR_REMAP: *const c_char = "op-tee.remap\0".as_ptr();
-pub const TA_PROP_STR_CACHE_SYNC: *const c_char = 
"op-tee.cache_sync\0".as_ptr();
+pub const TA_PROP_STR_SINGLE_INSTANCE: *const c_uchar = 
"gpd.ta.singleInstance\0".as_ptr();
+pub const TA_PROP_STR_MULTI_SESSION: *const c_uchar = 
"gpd.ta.multiSession\0".as_ptr();
+pub const TA_PROP_STR_KEEP_ALIVE: *const c_uchar = 
"gpd.ta.instanceKeepAlive\0".as_ptr();
+pub const TA_PROP_STR_DATA_SIZE: *const c_uchar = "gpd.ta.dataSize\0".as_ptr();
+pub const TA_PROP_STR_STACK_SIZE: *const c_uchar = 
"gpd.ta.stackSize\0".as_ptr();
+pub const TA_PROP_STR_VERSION: *const c_uchar = "gpd.ta.version\0".as_ptr();
+pub const TA_PROP_STR_DESCRIPTION: *const c_uchar = 
"gpd.ta.description\0".as_ptr();
+pub const TA_PROP_STR_UNSAFE_PARAM: *const c_uchar = 
"op-tee.unsafe_param\0".as_ptr();
+pub const TA_PROP_STR_REMAP: *const c_uchar = "op-tee.remap\0".as_ptr();
+pub const TA_PROP_STR_CACHE_SYNC: *const c_uchar = 
"op-tee.cache_sync\0".as_ptr();
 
 #[repr(C)]
 pub enum user_ta_prop_type {
@@ -73,7 +76,7 @@ pub enum user_ta_prop_type {
 
 #[repr(C)]
 pub struct user_ta_property {
-    pub name: *const c_char,
+    pub name: *const c_uchar,
     pub prop_type: user_ta_prop_type,
     pub value: *mut c_void,
 }
diff --git a/optee-utee/optee-utee-sys/src/utee_syscalls.rs 
b/optee-utee/optee-utee-sys/src/utee_syscalls.rs
index b375c1f..5891c30 100644
--- a/optee-utee/optee-utee-sys/src/utee_syscalls.rs
+++ b/optee-utee/optee-utee-sys/src/utee_syscalls.rs
@@ -16,11 +16,14 @@
 // under the License.
 
 use super::*;
-use libc::*;
+#[cfg(feature = "std")]
+use std::os::raw::*;
+#[cfg(not(feature = "std"))]
+use core::ffi::*;
 
 extern "C" {
     pub fn _utee_return(ret: c_ulong) -> !;
-    pub fn _utee_log(buf: *const c_void, len: size_t);
+    pub fn _utee_log(buf: *const c_void, len: c_size_t);
     pub fn _utee_panic(code: c_ulong);
     pub fn _utee_get_property(
         prop_set: c_ulong,
@@ -52,7 +55,7 @@ extern "C" {
         params: *mut utee_params,
         ret_orig: *mut u32,
     ) -> TEE_Result;
-    pub fn _utee_check_access_rights(flags: u32, buf: *const c_void, len: 
size_t)
+    pub fn _utee_check_access_rights(flags: u32, buf: *const c_void, len: 
c_size_t)
         -> TEE_Result;
     pub fn _utee_get_cancellation_flag(cancel: *mut u32) -> TEE_Result;
     pub fn _utee_unmask_cancellation(old_mask: *mut u32) -> TEE_Result;
@@ -69,28 +72,28 @@ extern "C" {
     ) -> TEE_Result;
     pub fn _utee_cryp_state_copy(dst: c_ulong, src: c_ulong) -> TEE_Result;
     pub fn _utee_cryp_state_free(state: c_ulong) -> TEE_Result;
-    pub fn _utee_hash_init(state: c_ulong, iv: *const c_void, iv_len: size_t) 
-> TEE_Result;
-    pub fn _utee_hash_update(state: c_ulong, chunk: *const c_void, chunk_size: 
size_t)
+    pub fn _utee_hash_init(state: c_ulong, iv: *const c_void, iv_len: 
c_size_t) -> TEE_Result;
+    pub fn _utee_hash_update(state: c_ulong, chunk: *const c_void, chunk_size: 
c_size_t)
         -> TEE_Result;
     pub fn _utee_hash_final(
         state: c_ulong,
         chunk: *const c_void,
-        chunk_size: size_t,
+        chunk_size: c_size_t,
         hash: *mut c_void,
         hash_len: *mut u64,
     ) -> TEE_Result;
-    pub fn _utee_cipher_init(state: c_ulong, iv: *const c_void, iv_len: 
size_t) -> TEE_Result;
+    pub fn _utee_cipher_init(state: c_ulong, iv: *const c_void, iv_len: 
c_size_t) -> TEE_Result;
     pub fn _utee_cipher_update(
         state: c_ulong,
         src: *const c_void,
-        src_len: size_t,
+        src_len: c_size_t,
         dest: *mut c_void,
         dest_len: *mut u64,
     ) -> TEE_Result;
     pub fn _utee_cipher_final(
         state: c_ulong,
         src: *const c_void,
-        src_len: size_t,
+        src_len: c_size_t,
         dest: *mut c_void,
         dest_len: *mut u64,
     ) -> TEE_Result;
@@ -124,31 +127,31 @@ extern "C" {
         param_count: c_ulong,
         derived_key: c_ulong,
     ) -> TEE_Result;
-    pub fn _utee_cryp_random_number_generate(buf: *mut c_void, blen: size_t) 
-> TEE_Result;
+    pub fn _utee_cryp_random_number_generate(buf: *mut c_void, blen: c_size_t) 
-> TEE_Result;
     pub fn _utee_authenc_init(
         state: c_ulong,
         nonce: *const c_void,
-        nonce_len: size_t,
-        tag_len: size_t,
-        aad_len: size_t,
-        payload_len: size_t,
+        nonce_len: c_size_t,
+        tag_len: c_size_t,
+        aad_len: c_size_t,
+        payload_len: c_size_t,
     ) -> TEE_Result;
     pub fn _utee_authenc_update_aad(
         state: c_ulong,
         aad_data: *const c_void,
-        aad_data_len: size_t,
+        aad_data_len: c_size_t,
     ) -> TEE_Result;
     pub fn _utee_authenc_update_payload(
         state: c_ulong,
         src_data: *const c_void,
-        src_len: size_t,
+        src_len: c_size_t,
         dest_data: *mut c_void,
         dest_len: *mut u64,
     ) -> TEE_Result;
     pub fn _utee_authenc_enc_final(
         state: c_ulong,
         src_data: *const c_void,
-        src_len: size_t,
+        src_len: c_size_t,
         dest_data: *mut c_void,
         dest_len: *mut u64,
         tag: *mut c_void,
@@ -157,18 +160,18 @@ extern "C" {
     pub fn _utee_authenc_dec_final(
         state: c_ulong,
         src_data: *const c_void,
-        src_len: size_t,
+        src_len: c_size_t,
         dest_data: *mut c_void,
         dest_len: *mut u64,
         tag: *const c_void,
-        tag_len: size_t,
+        tag_len: c_size_t,
     ) -> TEE_Result;
     pub fn _utee_asymm_operate(
         state: c_ulong,
         params: *const utee_attribute,
         num_params: c_ulong,
         src_data: *const c_void,
-        src_len: size_t,
+        src_len: c_size_t,
         dest_data: *mut c_void,
         dest_len: *mut u64,
     ) -> TEE_Result;
@@ -177,32 +180,32 @@ extern "C" {
         params: *const utee_attribute,
         num_params: c_ulong,
         data: *const c_void,
-        data_len: size_t,
+        data_len: c_size_t,
         sig: *const c_void,
-        sig_len: size_t,
+        sig_len: c_size_t,
     ) -> TEE_Result;
     pub fn _utee_storage_obj_open(
         storage_id: c_ulong,
         object_id: *const c_void,
-        object_id_len: size_t,
+        object_id_len: c_size_t,
         flags: c_ulong,
         obj: *mut u32,
     ) -> TEE_Result;
     pub fn _utee_storage_obj_create(
         storage_id: c_ulong,
         object_id: *const c_void,
-        object_id_len: size_t,
+        object_id_len: c_size_t,
         flags: c_ulong,
         attr: c_ulong,
         data: *const c_void,
-        len: size_t,
+        len: c_size_t,
         obj: *mut u32,
     ) -> TEE_Result;
     pub fn _utee_storage_obj_del(obj: c_ulong) -> TEE_Result;
     pub fn _utee_storage_obj_rename(
         obj: c_ulong,
         new_obj_id: *const c_void,
-        new_obj_id_len: size_t,
+        new_obj_id_len: c_size_t,
     ) -> TEE_Result;
     pub fn _utee_storage_alloc_enum(obj_enum: *mut u32) -> TEE_Result;
     pub fn _utee_storage_free_enum(obj_enum: c_ulong) -> TEE_Result;
@@ -217,13 +220,13 @@ extern "C" {
     pub fn _utee_storage_obj_read(
         obj: c_ulong,
         data: *mut c_void,
-        len: size_t,
+        len: c_size_t,
         count: *mut u64,
     ) -> TEE_Result;
-    pub fn _utee_storage_obj_write(obj: c_ulong, data: *const c_void, len: 
size_t) -> TEE_Result;
-    pub fn _utee_storage_obj_trunc(obj: c_ulong, len: size_t) -> TEE_Result;
+    pub fn _utee_storage_obj_write(obj: c_ulong, data: *const c_void, len: 
c_size_t) -> TEE_Result;
+    pub fn _utee_storage_obj_trunc(obj: c_ulong, len: c_size_t) -> TEE_Result;
     pub fn _utee_storage_obj_seek(obj: c_ulong, offset: i32, whence: c_ulong) 
-> TEE_Result;
-    pub fn _utee_cache_operation(va: *mut c_void, l: size_t, op: c_ulong) -> 
TEE_Result;
+    pub fn _utee_cache_operation(va: *mut c_void, l: c_size_t, op: c_ulong) -> 
TEE_Result;
 // unimplemented syscall
-// pub fn utee_gprof_send(buf: *mut c_void, size: size_t, id: *mut u32) -> 
TEE_Result;
+// pub fn utee_gprof_send(buf: *mut c_void, size: c_size_t, id: *mut u32) -> 
TEE_Result;
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to