// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(non_upper_case_globals)]
#![allow(dead_code)]

#[link(name = "tee-client-api")]
extern "C" {}

/* automatically generated by rust-bindgen */

pub const _STDINT_H: u32 = 1;
pub const _FEATURES_H: u32 = 1;
pub const _DEFAULT_SOURCE: u32 = 1;
pub const __USE_ISOC11: u32 = 1;
pub const __USE_ISOC99: u32 = 1;
pub const __USE_ISOC95: u32 = 1;
pub const __USE_POSIX_IMPLICITLY: u32 = 1;
pub const _POSIX_SOURCE: u32 = 1;
pub const _POSIX_C_SOURCE: u32 = 200809;
pub const __USE_POSIX: u32 = 1;
pub const __USE_POSIX2: u32 = 1;
pub const __USE_POSIX199309: u32 = 1;
pub const __USE_POSIX199506: u32 = 1;
pub const __USE_XOPEN2K: u32 = 1;
pub const __USE_XOPEN2K8: u32 = 1;
pub const _ATFILE_SOURCE: u32 = 1;
pub const __USE_MISC: u32 = 1;
pub const __USE_ATFILE: u32 = 1;
pub const __USE_FORTIFY_LEVEL: u32 = 0;
pub const _STDC_PREDEF_H: u32 = 1;
pub const __STDC_IEC_559__: u32 = 1;
pub const __STDC_IEC_559_COMPLEX__: u32 = 1;
pub const __STDC_ISO_10646__: u32 = 201605;
pub const __STDC_NO_THREADS__: u32 = 1;
pub const __GNU_LIBRARY__: u32 = 6;
pub const __GLIBC__: u32 = 2;
pub const __GLIBC_MINOR__: u32 = 24;
pub const _SYS_CDEFS_H: u32 = 1;
pub const __WORDSIZE: u32 = 64;
pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1;
pub const __SYSCALL_WORDSIZE: u32 = 64;
pub const _BITS_WCHAR_H: u32 = 1;
pub const INT8_MIN: i32 = -128;
pub const INT16_MIN: i32 = -32768;
pub const INT32_MIN: i32 = -2147483648;
pub const INT8_MAX: u32 = 127;
pub const INT16_MAX: u32 = 32767;
pub const INT32_MAX: u32 = 2147483647;
pub const UINT8_MAX: u32 = 255;
pub const UINT16_MAX: u32 = 65535;
pub const UINT32_MAX: u32 = 4294967295;
pub const INT_LEAST8_MIN: i32 = -128;
pub const INT_LEAST16_MIN: i32 = -32768;
pub const INT_LEAST32_MIN: i32 = -2147483648;
pub const INT_LEAST8_MAX: u32 = 127;
pub const INT_LEAST16_MAX: u32 = 32767;
pub const INT_LEAST32_MAX: u32 = 2147483647;
pub const UINT_LEAST8_MAX: u32 = 255;
pub const UINT_LEAST16_MAX: u32 = 65535;
pub const UINT_LEAST32_MAX: u32 = 4294967295;
pub const INT_FAST8_MIN: i32 = -128;
pub const INT_FAST16_MIN: i64 = -9223372036854775808;
pub const INT_FAST32_MIN: i64 = -9223372036854775808;
pub const INT_FAST8_MAX: u32 = 127;
pub const INT_FAST16_MAX: u64 = 9223372036854775807;
pub const INT_FAST32_MAX: u64 = 9223372036854775807;
pub const UINT_FAST8_MAX: u32 = 255;
pub const UINT_FAST16_MAX: i32 = -1;
pub const UINT_FAST32_MAX: i32 = -1;
pub const INTPTR_MIN: i64 = -9223372036854775808;
pub const INTPTR_MAX: u64 = 9223372036854775807;
pub const UINTPTR_MAX: i32 = -1;
pub const PTRDIFF_MIN: i64 = -9223372036854775808;
pub const PTRDIFF_MAX: u64 = 9223372036854775807;
pub const SIG_ATOMIC_MIN: i32 = -2147483648;
pub const SIG_ATOMIC_MAX: u32 = 2147483647;
pub const SIZE_MAX: i32 = -1;
pub const WINT_MIN: u32 = 0;
pub const WINT_MAX: u32 = 4294967295;
pub const true_: u32 = 1;
pub const false_: u32 = 0;
pub const __bool_true_false_are_defined: u32 = 1;
pub const ZX_OK: u32 = 0;
pub const ZX_ERR_INTERNAL: i32 = -1;
pub const ZX_ERR_NOT_SUPPORTED: i32 = -2;
pub const ZX_ERR_NO_RESOURCES: i32 = -3;
pub const ZX_ERR_NO_MEMORY: i32 = -4;
pub const ZX_ERR_INTERNAL_INTR_RETRY: i32 = -6;
pub const ZX_ERR_INVALID_ARGS: i32 = -10;
pub const ZX_ERR_BAD_HANDLE: i32 = -11;
pub const ZX_ERR_WRONG_TYPE: i32 = -12;
pub const ZX_ERR_BAD_SYSCALL: i32 = -13;
pub const ZX_ERR_OUT_OF_RANGE: i32 = -14;
pub const ZX_ERR_BUFFER_TOO_SMALL: i32 = -15;
pub const ZX_ERR_BAD_STATE: i32 = -20;
pub const ZX_ERR_TIMED_OUT: i32 = -21;
pub const ZX_ERR_SHOULD_WAIT: i32 = -22;
pub const ZX_ERR_CANCELED: i32 = -23;
pub const ZX_ERR_PEER_CLOSED: i32 = -24;
pub const ZX_ERR_NOT_FOUND: i32 = -25;
pub const ZX_ERR_ALREADY_EXISTS: i32 = -26;
pub const ZX_ERR_ALREADY_BOUND: i32 = -27;
pub const ZX_ERR_UNAVAILABLE: i32 = -28;
pub const ZX_ERR_ACCESS_DENIED: i32 = -30;
pub const ZX_ERR_IO: i32 = -40;
pub const ZX_ERR_IO_REFUSED: i32 = -41;
pub const ZX_ERR_IO_DATA_INTEGRITY: i32 = -42;
pub const ZX_ERR_IO_DATA_LOSS: i32 = -43;
pub const ZX_ERR_IO_NOT_PRESENT: i32 = -44;
pub const ZX_ERR_IO_OVERRUN: i32 = -45;
pub const ZX_ERR_IO_MISSED_DEADLINE: i32 = -46;
pub const ZX_ERR_IO_INVALID: i32 = -47;
pub const ZX_ERR_BAD_PATH: i32 = -50;
pub const ZX_ERR_NOT_DIR: i32 = -51;
pub const ZX_ERR_NOT_FILE: i32 = -52;
pub const ZX_ERR_FILE_BIG: i32 = -53;
pub const ZX_ERR_NO_SPACE: i32 = -54;
pub const ZX_ERR_NOT_EMPTY: i32 = -55;
pub const ZX_ERR_STOP: i32 = -60;
pub const ZX_ERR_NEXT: i32 = -61;
pub const ZX_ERR_ASYNC: i32 = -62;
pub const ZX_ERR_PROTOCOL_NOT_SUPPORTED: i32 = -70;
pub const ZX_ERR_ADDRESS_UNREACHABLE: i32 = -71;
pub const ZX_ERR_ADDRESS_IN_USE: i32 = -72;
pub const ZX_ERR_NOT_CONNECTED: i32 = -73;
pub const ZX_ERR_CONNECTION_REFUSED: i32 = -74;
pub const ZX_ERR_CONNECTION_RESET: i32 = -75;
pub const ZX_ERR_CONNECTION_ABORTED: i32 = -76;
pub const TEEC_NUM_PARAMS_MAX: u32 = 4;
pub const TEEC_SUCCESS: u32 = 0;
pub const TEEC_ERROR_GENERIC: u32 = 4294901760;
pub const TEEC_ERROR_ACCESS_DENIED: u32 = 4294901761;
pub const TEEC_ERROR_CANCEL: u32 = 4294901762;
pub const TEEC_ERROR_ACCESS_CONFLICT: u32 = 4294901763;
pub const TEEC_ERROR_EXCESS_DATA: u32 = 4294901764;
pub const TEEC_ERROR_BAD_FORMAT: u32 = 4294901765;
pub const TEEC_ERROR_BAD_PARAMETERS: u32 = 4294901766;
pub const TEEC_ERROR_BAD_STATE: u32 = 4294901767;
pub const TEEC_ERROR_ITEM_NOT_FOUND: u32 = 4294901768;
pub const TEEC_ERROR_NOT_IMPLEMENTED: u32 = 4294901769;
pub const TEEC_ERROR_NOT_SUPPORTED: u32 = 4294901770;
pub const TEEC_ERROR_NO_DATA: u32 = 4294901771;
pub const TEEC_ERROR_OUT_OF_MEMORY: u32 = 4294901772;
pub const TEEC_ERROR_BUSY: u32 = 4294901773;
pub const TEEC_ERROR_COMMUNICATION: u32 = 4294901774;
pub const TEEC_ERROR_SECURITY: u32 = 4294901775;
pub const TEEC_ERROR_SHORT_BUFFER: u32 = 4294901776;
pub const TEE_ERROR_EXTERNAL_CANCEL: u32 = 4294901777;
pub const TEE_ERROR_OVERFLOW: u32 = 4294914063;
pub const TEE_ERROR_TARGET_DEAD: u32 = 4294914084;
pub const TEEC_ERROR_TARGET_DEAD: u32 = 4294914084;
pub const TEE_ERROR_STORAGE_NO_SPACE: u32 = 4294914113;
pub const TEEC_ORIGIN_API: u32 = 1;
pub const TEEC_ORIGIN_COMMS: u32 = 2;
pub const TEEC_ORIGIN_TEE: u32 = 3;
pub const TEEC_ORIGIN_TRUSTED_APP: u32 = 4;
pub const TEEC_MEM_INPUT: u32 = 1;
pub const TEEC_MEM_OUTPUT: u32 = 2;
pub const TEEC_NONE: u32 = 0;
pub const TEEC_VALUE_INPUT: u32 = 1;
pub const TEEC_VALUE_OUTPUT: u32 = 2;
pub const TEEC_VALUE_INOUT: u32 = 3;
pub const TEEC_MEMREF_TEMP_INPUT: u32 = 5;
pub const TEEC_MEMREF_TEMP_OUTPUT: u32 = 6;
pub const TEEC_MEMREF_TEMP_INOUT: u32 = 7;
pub const TEEC_MEMREF_WHOLE: u32 = 12;
pub const TEEC_MEMREF_PARTIAL_INPUT: u32 = 13;
pub const TEEC_MEMREF_PARTIAL_OUTPUT: u32 = 14;
pub const TEEC_MEMREF_PARTIAL_INOUT: u32 = 15;
pub const TEEC_LOGIN_PUBLIC: u32 = 0;
pub const TEEC_LOGIN_USER: u32 = 1;
pub const TEEC_LOGIN_GROUP: u32 = 2;
pub const TEEC_LOGIN_APPLICATION: u32 = 4;
pub const TEEC_LOGIN_USER_APPLICATION: u32 = 5;
pub const TEEC_LOGIN_GROUP_APPLICATION: u32 = 6;
pub type wchar_t = ::std::os::raw::c_int;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct max_align_t {
    pub __clang_max_align_nonce1: ::std::os::raw::c_longlong,
    pub __bindgen_padding_0: u64,
    pub __clang_max_align_nonce2: f64,
}
pub type int_least8_t = ::std::os::raw::c_schar;
pub type int_least16_t = ::std::os::raw::c_short;
pub type int_least32_t = ::std::os::raw::c_int;
pub type int_least64_t = ::std::os::raw::c_long;
pub type uint_least8_t = ::std::os::raw::c_uchar;
pub type uint_least16_t = ::std::os::raw::c_ushort;
pub type uint_least32_t = ::std::os::raw::c_uint;
pub type uint_least64_t = ::std::os::raw::c_ulong;
pub type int_fast8_t = ::std::os::raw::c_schar;
pub type int_fast16_t = ::std::os::raw::c_long;
pub type int_fast32_t = ::std::os::raw::c_long;
pub type int_fast64_t = ::std::os::raw::c_long;
pub type uint_fast8_t = ::std::os::raw::c_uchar;
pub type uint_fast16_t = ::std::os::raw::c_ulong;
pub type uint_fast32_t = ::std::os::raw::c_ulong;
pub type uint_fast64_t = ::std::os::raw::c_ulong;
pub type intmax_t = ::std::os::raw::c_long;
pub type uintmax_t = ::std::os::raw::c_ulong;
pub type zx_rights_t = u32;
pub type zx_time_t = i64;
pub type zx_duration_t = i64;
pub type zx_ticks_t = u64;
pub const memory_order_memory_order_relaxed: memory_order = 0;
pub const memory_order_memory_order_consume: memory_order = 1;
pub const memory_order_memory_order_acquire: memory_order = 2;
pub const memory_order_memory_order_release: memory_order = 3;
pub const memory_order_memory_order_acq_rel: memory_order = 4;
pub const memory_order_memory_order_seq_cst: memory_order = 5;
pub type memory_order = u32;
extern "C" {
    pub fn atomic_thread_fence(arg1: memory_order);
}
extern "C" {
    pub fn atomic_signal_fence(arg1: memory_order);
}
pub type atomic_bool = u8;
pub type atomic_char = u8;
pub type atomic_schar = u8;
pub type atomic_uchar = u8;
pub type atomic_short = u16;
pub type atomic_ushort = u16;
pub type atomic_int = u32;
pub type atomic_uint = u32;
pub type atomic_long = u64;
pub type atomic_ulong = u64;
pub type atomic_llong = u64;
pub type atomic_ullong = u64;
pub type atomic_char16_t = uint_least16_t;
pub type atomic_char32_t = uint_least32_t;
pub type atomic_wchar_t = wchar_t;
pub type atomic_int_least8_t = int_least8_t;
pub type atomic_uint_least8_t = uint_least8_t;
pub type atomic_int_least16_t = int_least16_t;
pub type atomic_uint_least16_t = uint_least16_t;
pub type atomic_int_least32_t = int_least32_t;
pub type atomic_uint_least32_t = uint_least32_t;
pub type atomic_int_least64_t = int_least64_t;
pub type atomic_uint_least64_t = uint_least64_t;
pub type atomic_int_fast8_t = int_fast8_t;
pub type atomic_uint_fast8_t = uint_fast8_t;
pub type atomic_int_fast16_t = int_fast16_t;
pub type atomic_uint_fast16_t = uint_fast16_t;
pub type atomic_int_fast32_t = int_fast32_t;
pub type atomic_uint_fast32_t = uint_fast32_t;
pub type atomic_int_fast64_t = int_fast64_t;
pub type atomic_uint_fast64_t = uint_fast64_t;
pub type atomic_intptr_t = isize;
pub type atomic_uintptr_t = usize;
pub type atomic_size_t = usize;
pub type atomic_ptrdiff_t = isize;
pub type atomic_intmax_t = intmax_t;
pub type atomic_uintmax_t = uintmax_t;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct atomic_flag {
    pub _Value: atomic_bool,
}
extern "C" {
    pub fn atomic_flag_test_and_set(arg1: *mut atomic_flag) -> bool;
}
extern "C" {
    pub fn atomic_flag_test_and_set_explicit(arg1: *mut atomic_flag, arg2: memory_order) -> bool;
}
extern "C" {
    pub fn atomic_flag_clear(arg1: *mut atomic_flag);
}
extern "C" {
    pub fn atomic_flag_clear_explicit(arg1: *mut atomic_flag, arg2: memory_order);
}
pub type zx_handle_t = u32;
pub type zx_status_t = i32;
pub type zx_clock_t = u32;
pub type zx_signals_t = u32;
pub type zx_koid_t = u64;
pub type zx_txid_t = u32;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct zx_channel_call_args {
    pub wr_bytes: *const ::std::os::raw::c_void,
    pub wr_handles: *const zx_handle_t,
    pub rd_bytes: *mut ::std::os::raw::c_void,
    pub rd_handles: *mut zx_handle_t,
    pub wr_num_bytes: u32,
    pub wr_num_handles: u32,
    pub rd_num_bytes: u32,
    pub rd_num_handles: u32,
}
pub type zx_channel_call_args_t = zx_channel_call_args;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct zx_wait_item {
    pub handle: zx_handle_t,
    pub waitfor: zx_signals_t,
    pub pending: zx_signals_t,
}
pub type zx_wait_item_t = zx_wait_item;
pub type zx_vm_option_t = u32;
pub type zx_vaddr_t = usize;
pub type zx_paddr_t = usize;
pub type zx_paddr32_t = u32;
pub type zx_gpaddr_t = usize;
pub type zx_off_t = u64;
pub type zx_obj_type_t = u32;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct zx_handle_info {
    pub handle: zx_handle_t,
    pub type_: zx_obj_type_t,
    pub rights: zx_rights_t,
    pub unused: u32,
}
pub type zx_handle_info_t = zx_handle_info;
pub type zx_futex_t = atomic_int;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct teec_context_impl {
    pub tee_channel: zx_handle_t,
}
pub type teec_context_impl_t = teec_context_impl;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct teec_session_impl {
    pub session_id: u32,
    pub context_imp: *mut teec_context_impl_t,
}
pub type teec_session_impl_t = teec_session_impl;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct teec_shared_memory_impl {
    pub vmo: zx_handle_t,
    pub mapped_addr: zx_vaddr_t,
    pub mapped_size: usize,
}
pub type teec_shared_memory_impl_t = teec_shared_memory_impl;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct teec_operation_impl {
    pub reserved: ::std::os::raw::c_char,
}
pub type teec_operation_impl_t = teec_operation_impl;
#[doc = " Data Types *"]
pub type TEEC_Result = u32;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct TEEC_UUID {
    pub timeLow: u32,
    pub timeMid: u16,
    pub timeHiAndVersion: u16,
    pub clockSeqAndNode: [u8; 8usize],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct TEEC_Context {
    pub imp: teec_context_impl_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct TEEC_Session {
    pub imp: teec_session_impl_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct TEEC_SharedMemory {
    pub buffer: *mut ::std::os::raw::c_void,
    pub size: usize,
    pub flags: u32,
    pub imp: teec_shared_memory_impl_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct TEEC_TempMemoryReference {
    pub buffer: *mut ::std::os::raw::c_void,
    pub size: usize,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct TEEC_RegisteredMemoryReference {
    pub parent: *mut TEEC_SharedMemory,
    pub size: usize,
    pub offset: usize,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct TEEC_Value {
    pub a: u32,
    pub b: u32,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union TEEC_Parameter {
    pub tmpref: TEEC_TempMemoryReference,
    pub memref: TEEC_RegisteredMemoryReference,
    pub value: TEEC_Value,
    _bindgen_union_align: [u64; 3usize],
}
#[repr(C)]
#[derive(Copy, Clone)]
pub struct TEEC_Operation {
    pub started: u32,
    pub paramTypes: u32,
    pub params: [TEEC_Parameter; 4usize],
    pub imp: teec_operation_impl_t,
}
extern "C" {
    #[doc = " Functions *"]
    pub fn TEEC_InitializeContext(
        name: *const ::std::os::raw::c_char,
        context: *mut TEEC_Context,
    ) -> TEEC_Result;
}
extern "C" {
    pub fn TEEC_FinalizeContext(context: *mut TEEC_Context);
}
extern "C" {
    pub fn TEEC_RegisterSharedMemory(
        context: *mut TEEC_Context,
        sharedMem: *mut TEEC_SharedMemory,
    ) -> TEEC_Result;
}
extern "C" {
    pub fn TEEC_AllocateSharedMemory(
        context: *mut TEEC_Context,
        sharedMem: *mut TEEC_SharedMemory,
    ) -> TEEC_Result;
}
extern "C" {
    pub fn TEEC_ReleaseSharedMemory(sharedMem: *mut TEEC_SharedMemory);
}
extern "C" {
    pub fn TEEC_OpenSession(
        context: *mut TEEC_Context,
        session: *mut TEEC_Session,
        destination: *const TEEC_UUID,
        connectionMethod: u32,
        connectionData: *const ::std::os::raw::c_void,
        operation: *mut TEEC_Operation,
        returnOrigin: *mut u32,
    ) -> TEEC_Result;
}
extern "C" {
    pub fn TEEC_CloseSession(session: *mut TEEC_Session);
}
extern "C" {
    pub fn TEEC_InvokeCommand(
        session: *mut TEEC_Session,
        commandID: u32,
        operation: *mut TEEC_Operation,
        returnOrigin: *mut u32,
    ) -> TEEC_Result;
}
extern "C" {
    pub fn TEEC_RequestCancellation(operation: *mut TEEC_Operation);
}
