#![allow(non_camel_case_types, non_snake_case)]
use std::ffi::{c_int, c_void};
pub const TEEC_CONFIG_PAYLOAD_REF_COUNT: usize = 4;
pub const TEEC_CONFIG_SHAREDMEM_MAX_SIZE: u64 = u64::MAX;
pub const TEEC_NONE: u32 = 0x00000000;
pub const TEEC_VALUE_INPUT: u32 = 0x00000001;
pub const TEEC_VALUE_OUTPUT: u32 = 0x00000002;
pub const TEEC_VALUE_INOUT: u32 = 0x00000003;
pub const TEEC_MEMREF_TEMP_INPUT: u32 = 0x00000005;
pub const TEEC_MEMREF_TEMP_OUTPUT: u32 = 0x00000006;
pub const TEEC_MEMREF_TEMP_INOUT: u32 = 0x00000007;
pub const TEEC_MEMREF_WHOLE: u32 = 0x0000000C;
pub const TEEC_MEMREF_PARTIAL_INPUT: u32 = 0x0000000D;
pub const TEEC_MEMREF_PARTIAL_OUTPUT: u32 = 0x0000000E;
pub const TEEC_MEMREF_PARTIAL_INOUT: u32 = 0x0000000F;
pub const TEEC_MEM_INPUT: u32 = 0x00000001;
pub const TEEC_MEM_OUTPUT: u32 = 0x00000002;
pub const TEEC_SUCCESS: u32 = 0x00000000;
pub const TEEC_ERROR_GENERIC: u32 = 0xFFFF0000;
pub const TEEC_ERROR_ACCESS_DENIED: u32 = 0xFFFF0001;
pub const TEEC_ERROR_CANCEL: u32 = 0xFFFF0002;
pub const TEEC_ERROR_ACCESS_CONFLICT: u32 = 0xFFFF0003;
pub const TEEC_ERROR_EXCESS_DATA: u32 = 0xFFFF0004;
pub const TEEC_ERROR_BAD_FORMAT: u32 = 0xFFFF0005;
pub const TEEC_ERROR_BAD_PARAMETERS: u32 = 0xFFFF0006;
pub const TEEC_ERROR_BAD_STATE: u32 = 0xFFFF0007;
pub const TEEC_ERROR_ITEM_NOT_FOUND: u32 = 0xFFFF0008;
pub const TEEC_ERROR_NOT_IMPLEMENTED: u32 = 0xFFFF0009;
pub const TEEC_ERROR_NOT_SUPPORTED: u32 = 0xFFFF000A;
pub const TEEC_ERROR_NO_DATA: u32 = 0xFFFF000B;
pub const TEEC_ERROR_OUT_OF_MEMORY: u32 = 0xFFFF000C;
pub const TEEC_ERROR_BUSY: u32 = 0xFFFF000D;
pub const TEEC_ERROR_COMMUNICATION: u32 = 0xFFFF000E;
pub const TEEC_ERROR_SECURITY: u32 = 0xFFFF000F;
pub const TEEC_ERROR_SHORT_BUFFER: u32 = 0xFFFF0010;
pub const TEEC_ERROR_EXTERNAL_CANCEL: u32 = 0xFFFF0011;
pub const TEEC_ERROR_TARGET_DEAD: u32 = 0xFFFF3024;
pub const TEEC_ORIGIN_API: u32 = 0x00000001;
pub const TEEC_ORIGIN_COMMS: u32 = 0x00000002;
pub const TEEC_ORIGIN_TEE: u32 = 0x00000003;
pub const TEEC_ORIGIN_TRUSTED_APP: u32 = 0x00000004;
pub const TEEC_LOGIN_PUBLIC: u32 = 0x00000000;
pub const TEEC_LOGIN_USER: u32 = 0x00000001;
pub const TEEC_LOGIN_GROUP: u32 = 0x00000002;
pub const TEEC_LOGIN_APPLICATION: u32 = 0x00000004;
pub const TEEC_LOGIN_USER_APPLICATION: u32 = 0x00000005;
pub const TEEC_LOGIN_GROUP_APPLICATION: u32 = 0x00000006;
#[inline]
pub fn TEEC_PARAM_TYPES(p0: u32, p1: u32, p2: u32, p3: u32) -> u32 {
let tmp = p1 << 4 | p2 << 8 | p3 << 12;
p0 | tmp
}
#[inline]
pub fn TEEC_PARAM_TYPE_GET(p: u32, i: usize) -> u32 {
(p >> ((i as u32) * 4)) & 0xF
}
#[allow(non_camel_case_types)]
pub type TEEC_Result = u32;
#[derive(Debug)]
#[repr(C)]
pub struct TEEC_Context {
pub imp: TEEC_Context__Imp,
}
#[derive(Debug)]
#[repr(C)]
pub struct TEEC_Context__Imp {
pub fd: c_int,
pub reg_mem: bool,
pub memref_null: bool,
}
#[derive(Debug)]
#[repr(C)]
pub struct TEEC_UUID {
pub timeLow: u32,
pub timeMid: u16,
pub timeHiAndVersion: u16,
pub clockSeqAndNode: [u8; 8usize],
}
#[derive(Debug)]
#[repr(C)]
pub struct TEEC_SharedMemory {
pub buffer: *mut c_void,
pub size: usize,
pub flags: u32,
pub imp: TEEC_SharedMemory__Imp,
}
#[derive(Debug)]
#[repr(C)]
pub struct TEEC_SharedMemory__Imp {
pub id: c_int,
pub alloced_size: usize,
pub shadow_buffer: *mut c_void,
pub registered_fd: c_int,
pub flags: u32,
}
#[derive(Copy, Clone, Debug)]
#[repr(C)]
pub struct TEEC_TempMemoryReference {
pub buffer: *mut c_void,
pub size: usize,
}
#[derive(Copy, Clone, Debug)]
#[repr(C)]
pub struct TEEC_RegisteredMemoryReference {
pub parent: *mut TEEC_SharedMemory,
pub size: usize,
pub offset: usize,
}
#[derive(Copy, Clone, Debug)]
#[repr(C)]
pub struct TEEC_Value {
pub a: u32,
pub b: u32,
}
#[derive(Copy, Clone)]
#[repr(C)]
pub union TEEC_Parameter {
pub tmpref: TEEC_TempMemoryReference,
pub memref: TEEC_RegisteredMemoryReference,
pub value: TEEC_Value,
}
#[derive(Debug)]
#[repr(C)]
pub struct TEEC_Session {
pub imp: TEEC_Session__Imp,
}
#[derive(Debug)]
#[repr(C)]
pub struct TEEC_Session__Imp {
pub ctx: *mut TEEC_Context,
pub session_id: u32,
}
#[repr(C)]
pub struct TEEC_Operation {
pub started: u32,
pub paramTypes: u32,
pub params: [TEEC_Parameter; TEEC_CONFIG_PAYLOAD_REF_COUNT],
pub imp: TEEC_Operation__Imp,
}
#[derive(Debug)]
#[repr(C)]
pub struct TEEC_Operation__Imp {
pub session: *mut TEEC_Session,
}