| /** |
| * Copyright (c) 2011 Trusted Logic S.A. |
| * All Rights Reserved. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * version 2 as published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
| * MA 02111-1307 USA |
| */ |
| |
| #ifndef __TF_PROTOCOL_H__ |
| #define __TF_PROTOCOL_H__ |
| |
| /*---------------------------------------------------------------------------- |
| * |
| * This header file defines the structure used in the SChannel Protocol. |
| * See your Product Reference Manual for a specification of the SChannel |
| * protocol. |
| *---------------------------------------------------------------------------*/ |
| |
| /* |
| * The driver interface version returned by the version ioctl |
| */ |
| #define TF_DRIVER_INTERFACE_VERSION 0x04000000 |
| |
| /* |
| * Protocol version handling |
| */ |
| #define TF_S_PROTOCOL_MAJOR_VERSION (0x06) |
| #define GET_PROTOCOL_MAJOR_VERSION(a) (a >> 24) |
| #define GET_PROTOCOL_MINOR_VERSION(a) ((a >> 16) & 0xFF) |
| |
| /* |
| * The S flag of the config_flag_s register. |
| */ |
| #define TF_CONFIG_FLAG_S (1 << 3) |
| |
| /* |
| * The TimeSlot field of the sync_serial_n register. |
| */ |
| #define TF_SYNC_SERIAL_TIMESLOT_N (1) |
| |
| /* |
| * status_s related defines. |
| */ |
| #define TF_STATUS_P_MASK (0X00000001) |
| #define TF_STATUS_POWER_STATE_SHIFT (3) |
| #define TF_STATUS_POWER_STATE_MASK (0x1F << TF_STATUS_POWER_STATE_SHIFT) |
| |
| /* |
| * Possible power states of the POWER_STATE field of the status_s register |
| */ |
| #define TF_POWER_MODE_COLD_BOOT (0) |
| #define TF_POWER_MODE_WARM_BOOT (1) |
| #define TF_POWER_MODE_ACTIVE (3) |
| #define TF_POWER_MODE_READY_TO_SHUTDOWN (5) |
| #define TF_POWER_MODE_READY_TO_HIBERNATE (7) |
| #define TF_POWER_MODE_WAKEUP (8) |
| #define TF_POWER_MODE_PANIC (15) |
| |
| /* |
| * Possible command values for MANAGEMENT commands |
| */ |
| #define TF_MANAGEMENT_HIBERNATE (1) |
| #define TF_MANAGEMENT_SHUTDOWN (2) |
| #define TF_MANAGEMENT_PREPARE_FOR_CORE_OFF (3) |
| #define TF_MANAGEMENT_RESUME_FROM_CORE_OFF (4) |
| |
| /* |
| * The capacity of the Normal Word message queue, in number of slots. |
| */ |
| #define TF_N_MESSAGE_QUEUE_CAPACITY (512) |
| |
| /* |
| * The capacity of the Secure World message answer queue, in number of slots. |
| */ |
| #define TF_S_ANSWER_QUEUE_CAPACITY (256) |
| |
| /* |
| * The value of the S-timeout register indicating an infinite timeout. |
| */ |
| #define TF_S_TIMEOUT_0_INFINITE (0xFFFFFFFF) |
| #define TF_S_TIMEOUT_1_INFINITE (0xFFFFFFFF) |
| |
| /* |
| * The value of the S-timeout register indicating an immediate timeout. |
| */ |
| #define TF_S_TIMEOUT_0_IMMEDIATE (0x0) |
| #define TF_S_TIMEOUT_1_IMMEDIATE (0x0) |
| |
| /* |
| * Identifies the get protocol version SMC. |
| */ |
| #define TF_SMC_GET_PROTOCOL_VERSION (0XFFFFFFFB) |
| |
| /* |
| * Identifies the init SMC. |
| */ |
| #define TF_SMC_INIT (0XFFFFFFFF) |
| |
| /* |
| * Identifies the reset irq SMC. |
| */ |
| #define TF_SMC_RESET_IRQ (0xFFFFFFFE) |
| |
| /* |
| * Identifies the SET_W3B SMC. |
| */ |
| #define TF_SMC_WAKE_UP (0xFFFFFFFD) |
| |
| /* |
| * Identifies the STOP SMC. |
| */ |
| #define TF_SMC_STOP (0xFFFFFFFC) |
| |
| /* |
| * Identifies the n-yield SMC. |
| */ |
| #define TF_SMC_N_YIELD (0X00000003) |
| |
| |
| /* Possible stop commands for SMC_STOP */ |
| #define SCSTOP_HIBERNATE (0xFFFFFFE1) |
| #define SCSTOP_SHUTDOWN (0xFFFFFFE2) |
| |
| /* |
| * representation of an UUID. |
| */ |
| struct tf_uuid { |
| u32 time_low; |
| u16 time_mid; |
| u16 time_hi_and_version; |
| u8 clock_seq_and_node[8]; |
| }; |
| |
| |
| /** |
| * Command parameters. |
| */ |
| struct tf_command_param_value { |
| u32 a; |
| u32 b; |
| }; |
| |
| struct tf_command_param_temp_memref { |
| u32 descriptor; /* data pointer for exchange message.*/ |
| u32 size; |
| u32 offset; |
| }; |
| |
| struct tf_command_param_memref { |
| u32 block; |
| u32 size; |
| u32 offset; |
| }; |
| |
| union tf_command_param { |
| struct tf_command_param_value value; |
| struct tf_command_param_temp_memref temp_memref; |
| struct tf_command_param_memref memref; |
| }; |
| |
| /** |
| * Answer parameters. |
| */ |
| struct tf_answer_param_value { |
| u32 a; |
| u32 b; |
| }; |
| |
| struct tf_answer_param_size { |
| u32 _ignored; |
| u32 size; |
| }; |
| |
| union tf_answer_param { |
| struct tf_answer_param_size size; |
| struct tf_answer_param_value value; |
| }; |
| |
| /* |
| * Descriptor tables capacity |
| */ |
| #define TF_MAX_W3B_COARSE_PAGES (2) |
| #define TF_MAX_COARSE_PAGES (8) |
| #define TF_DESCRIPTOR_TABLE_CAPACITY_BIT_SHIFT (8) |
| #define TF_DESCRIPTOR_TABLE_CAPACITY \ |
| (1 << TF_DESCRIPTOR_TABLE_CAPACITY_BIT_SHIFT) |
| #define TF_DESCRIPTOR_TABLE_CAPACITY_MASK \ |
| (TF_DESCRIPTOR_TABLE_CAPACITY - 1) |
| /* Shared memories coarse pages can map up to 1MB */ |
| #define TF_MAX_COARSE_PAGE_MAPPED_SIZE \ |
| (PAGE_SIZE * TF_DESCRIPTOR_TABLE_CAPACITY) |
| /* Shared memories cannot exceed 8MB */ |
| #define TF_MAX_SHMEM_SIZE \ |
| (TF_MAX_COARSE_PAGE_MAPPED_SIZE << 3) |
| |
| /* |
| * Buffer size for version description fields |
| */ |
| #define TF_DESCRIPTION_BUFFER_LENGTH 64 |
| |
| /* |
| * Shared memory type flags. |
| */ |
| #define TF_SHMEM_TYPE_READ (0x00000001) |
| #define TF_SHMEM_TYPE_WRITE (0x00000002) |
| |
| /* |
| * Shared mem flags |
| */ |
| #define TF_SHARED_MEM_FLAG_INPUT 1 |
| #define TF_SHARED_MEM_FLAG_OUTPUT 2 |
| #define TF_SHARED_MEM_FLAG_INOUT 3 |
| |
| |
| /* |
| * Parameter types |
| */ |
| #define TF_PARAM_TYPE_NONE 0x0 |
| #define TF_PARAM_TYPE_VALUE_INPUT 0x1 |
| #define TF_PARAM_TYPE_VALUE_OUTPUT 0x2 |
| #define TF_PARAM_TYPE_VALUE_INOUT 0x3 |
| #define TF_PARAM_TYPE_MEMREF_TEMP_INPUT 0x5 |
| #define TF_PARAM_TYPE_MEMREF_TEMP_OUTPUT 0x6 |
| #define TF_PARAM_TYPE_MEMREF_TEMP_INOUT 0x7 |
| #define TF_PARAM_TYPE_MEMREF_ION_HANDLE 0xB |
| #define TF_PARAM_TYPE_MEMREF_INPUT 0xD |
| #define TF_PARAM_TYPE_MEMREF_OUTPUT 0xE |
| #define TF_PARAM_TYPE_MEMREF_INOUT 0xF |
| |
| #define TF_PARAM_TYPE_MEMREF_FLAG 0x4 |
| #define TF_PARAM_TYPE_REGISTERED_MEMREF_FLAG 0x8 |
| |
| |
| #define TF_MAKE_PARAM_TYPES(t0, t1, t2, t3) \ |
| ((t0) | ((t1) << 4) | ((t2) << 8) | ((t3) << 12)) |
| #define TF_GET_PARAM_TYPE(t, i) (((t) >> (4 * i)) & 0xF) |
| |
| /* |
| * Login types. |
| */ |
| #define TF_LOGIN_PUBLIC 0x00000000 |
| #define TF_LOGIN_USER 0x00000001 |
| #define TF_LOGIN_GROUP 0x00000002 |
| #define TF_LOGIN_APPLICATION 0x00000004 |
| #define TF_LOGIN_APPLICATION_USER 0x00000005 |
| #define TF_LOGIN_APPLICATION_GROUP 0x00000006 |
| #define TF_LOGIN_AUTHENTICATION 0x80000000 |
| #define TF_LOGIN_PRIVILEGED 0x80000002 |
| |
| /* Login variants */ |
| |
| #define TF_LOGIN_VARIANT(main_type, os, variant) \ |
| ((main_type) | (1 << 27) | ((os) << 16) | ((variant) << 8)) |
| |
| #define TF_LOGIN_GET_MAIN_TYPE(type) \ |
| ((type) & ~TF_LOGIN_VARIANT(0, 0xFF, 0xFF)) |
| |
| #define TF_LOGIN_OS_ANY 0x00 |
| #define TF_LOGIN_OS_LINUX 0x01 |
| #define TF_LOGIN_OS_ANDROID 0x04 |
| |
| /* OS-independent variants */ |
| #define TF_LOGIN_USER_NONE \ |
| TF_LOGIN_VARIANT(TF_LOGIN_USER, TF_LOGIN_OS_ANY, 0xFF) |
| #define TF_LOGIN_GROUP_NONE \ |
| TF_LOGIN_VARIANT(TF_LOGIN_GROUP, TF_LOGIN_OS_ANY, 0xFF) |
| #define TF_LOGIN_APPLICATION_USER_NONE \ |
| TF_LOGIN_VARIANT(TF_LOGIN_APPLICATION_USER, TF_LOGIN_OS_ANY, 0xFF) |
| #define TF_LOGIN_AUTHENTICATION_BINARY_SHA1_HASH \ |
| TF_LOGIN_VARIANT(TF_LOGIN_AUTHENTICATION, TF_LOGIN_OS_ANY, 0x01) |
| #define TF_LOGIN_PRIVILEGED_KERNEL \ |
| TF_LOGIN_VARIANT(TF_LOGIN_PRIVILEGED, TF_LOGIN_OS_ANY, 0x01) |
| |
| /* Linux variants */ |
| #define TF_LOGIN_USER_LINUX_EUID \ |
| TF_LOGIN_VARIANT(TF_LOGIN_USER, TF_LOGIN_OS_LINUX, 0x01) |
| #define TF_LOGIN_GROUP_LINUX_GID \ |
| TF_LOGIN_VARIANT(TF_LOGIN_GROUP, TF_LOGIN_OS_LINUX, 0x01) |
| #define TF_LOGIN_APPLICATION_LINUX_PATH_SHA1_HASH \ |
| TF_LOGIN_VARIANT(TF_LOGIN_APPLICATION, TF_LOGIN_OS_LINUX, 0x01) |
| #define TF_LOGIN_APPLICATION_USER_LINUX_PATH_EUID_SHA1_HASH \ |
| TF_LOGIN_VARIANT(TF_LOGIN_APPLICATION_USER, TF_LOGIN_OS_LINUX, 0x01) |
| #define TF_LOGIN_APPLICATION_GROUP_LINUX_PATH_GID_SHA1_HASH \ |
| TF_LOGIN_VARIANT(TF_LOGIN_APPLICATION_GROUP, TF_LOGIN_OS_LINUX, 0x01) |
| |
| /* Android variants */ |
| #define TF_LOGIN_USER_ANDROID_EUID \ |
| TF_LOGIN_VARIANT(TF_LOGIN_USER, TF_LOGIN_OS_ANDROID, 0x01) |
| #define TF_LOGIN_GROUP_ANDROID_GID \ |
| TF_LOGIN_VARIANT(TF_LOGIN_GROUP, TF_LOGIN_OS_ANDROID, 0x01) |
| #define TF_LOGIN_APPLICATION_ANDROID_UID \ |
| TF_LOGIN_VARIANT(TF_LOGIN_APPLICATION, TF_LOGIN_OS_ANDROID, 0x01) |
| #define TF_LOGIN_APPLICATION_USER_ANDROID_UID_EUID \ |
| TF_LOGIN_VARIANT(TF_LOGIN_APPLICATION_USER, TF_LOGIN_OS_ANDROID, \ |
| 0x01) |
| #define TF_LOGIN_APPLICATION_GROUP_ANDROID_UID_GID \ |
| TF_LOGIN_VARIANT(TF_LOGIN_APPLICATION_GROUP, TF_LOGIN_OS_ANDROID, \ |
| 0x01) |
| |
| /* |
| * return origins |
| */ |
| #define TF_ORIGIN_COMMS 2 |
| #define TF_ORIGIN_TEE 3 |
| #define TF_ORIGIN_TRUSTED_APP 4 |
| /* |
| * The message types. |
| */ |
| #define TF_MESSAGE_TYPE_CREATE_DEVICE_CONTEXT 0x02 |
| #define TF_MESSAGE_TYPE_DESTROY_DEVICE_CONTEXT 0xFD |
| #define TF_MESSAGE_TYPE_REGISTER_SHARED_MEMORY 0xF7 |
| #define TF_MESSAGE_TYPE_RELEASE_SHARED_MEMORY 0xF9 |
| #define TF_MESSAGE_TYPE_OPEN_CLIENT_SESSION 0xF0 |
| #define TF_MESSAGE_TYPE_CLOSE_CLIENT_SESSION 0xF2 |
| #define TF_MESSAGE_TYPE_INVOKE_CLIENT_COMMAND 0xF5 |
| #define TF_MESSAGE_TYPE_CANCEL_CLIENT_COMMAND 0xF4 |
| #define TF_MESSAGE_TYPE_MANAGEMENT 0xFE |
| |
| |
| /* |
| * The SChannel error codes. |
| */ |
| #define S_SUCCESS 0x00000000 |
| #define S_ERROR_OUT_OF_MEMORY 0xFFFF000C |
| |
| |
| struct tf_command_header { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info; |
| u32 operation_id; |
| }; |
| |
| struct tf_answer_header { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info; |
| u32 operation_id; |
| u32 error_code; |
| }; |
| |
| /* |
| * CREATE_DEVICE_CONTEXT command message. |
| */ |
| struct tf_command_create_device_context { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info_rfu; |
| u32 operation_id; |
| u32 device_context_id; |
| }; |
| |
| /* |
| * CREATE_DEVICE_CONTEXT answer message. |
| */ |
| struct tf_answer_create_device_context { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info_rfu; |
| /* an opaque Normal World identifier for the operation */ |
| u32 operation_id; |
| u32 error_code; |
| /* an opaque Normal World identifier for the device context */ |
| u32 device_context; |
| }; |
| |
| /* |
| * DESTROY_DEVICE_CONTEXT command message. |
| */ |
| struct tf_command_destroy_device_context { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info_rfu; |
| u32 operation_id; |
| u32 device_context; |
| }; |
| |
| /* |
| * DESTROY_DEVICE_CONTEXT answer message. |
| */ |
| struct tf_answer_destroy_device_context { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info_rfu; |
| /* an opaque Normal World identifier for the operation */ |
| u32 operation_id; |
| u32 error_code; |
| u32 device_context_id; |
| }; |
| |
| /* |
| * OPEN_CLIENT_SESSION command message. |
| */ |
| struct tf_command_open_client_session { |
| u8 message_size; |
| u8 message_type; |
| u16 param_types; |
| /* an opaque Normal World identifier for the operation */ |
| u32 operation_id; |
| u32 device_context; |
| u32 cancellation_id; |
| u64 timeout; |
| struct tf_uuid destination_uuid; |
| union tf_command_param params[4]; |
| u32 login_type; |
| /* |
| * Size = 0 for public, [16] for group identification, [20] for |
| * authentication |
| */ |
| u8 login_data[20]; |
| }; |
| |
| /* |
| * OPEN_CLIENT_SESSION answer message. |
| */ |
| struct tf_answer_open_client_session { |
| u8 message_size; |
| u8 message_type; |
| u8 error_origin; |
| u8 __reserved; |
| /* an opaque Normal World identifier for the operation */ |
| u32 operation_id; |
| u32 error_code; |
| u32 client_session; |
| union tf_answer_param answers[4]; |
| }; |
| |
| /* |
| * CLOSE_CLIENT_SESSION command message. |
| */ |
| struct tf_command_close_client_session { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info_rfu; |
| /* an opaque Normal World identifier for the operation */ |
| u32 operation_id; |
| u32 device_context; |
| u32 client_session; |
| }; |
| |
| /* |
| * CLOSE_CLIENT_SESSION answer message. |
| */ |
| struct tf_answer_close_client_session { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info_rfu; |
| /* an opaque Normal World identifier for the operation */ |
| u32 operation_id; |
| u32 error_code; |
| }; |
| |
| |
| /* |
| * REGISTER_SHARED_MEMORY command message |
| */ |
| struct tf_command_register_shared_memory { |
| u8 message_size; |
| u8 message_type; |
| u16 memory_flags; |
| u32 operation_id; |
| u32 device_context; |
| u32 block_id; |
| u32 shared_mem_size; |
| u32 shared_mem_start_offset; |
| u32 shared_mem_descriptors[TF_MAX_COARSE_PAGES]; |
| }; |
| |
| /* |
| * REGISTER_SHARED_MEMORY answer message. |
| */ |
| struct tf_answer_register_shared_memory { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info_rfu; |
| /* an opaque Normal World identifier for the operation */ |
| u32 operation_id; |
| u32 error_code; |
| u32 block; |
| }; |
| |
| /* |
| * RELEASE_SHARED_MEMORY command message. |
| */ |
| struct tf_command_release_shared_memory { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info_rfu; |
| /* an opaque Normal World identifier for the operation */ |
| u32 operation_id; |
| u32 device_context; |
| u32 block; |
| }; |
| |
| /* |
| * RELEASE_SHARED_MEMORY answer message. |
| */ |
| struct tf_answer_release_shared_memory { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info_rfu; |
| u32 operation_id; |
| u32 error_code; |
| u32 block_id; |
| }; |
| |
| /* |
| * INVOKE_CLIENT_COMMAND command message. |
| */ |
| struct tf_command_invoke_client_command { |
| u8 message_size; |
| u8 message_type; |
| u16 param_types; |
| u32 operation_id; |
| u32 device_context; |
| u32 client_session; |
| u64 timeout; |
| u32 cancellation_id; |
| u32 client_command_identifier; |
| union tf_command_param params[4]; |
| }; |
| |
| /* |
| * INVOKE_CLIENT_COMMAND command answer. |
| */ |
| struct tf_answer_invoke_client_command { |
| u8 message_size; |
| u8 message_type; |
| u8 error_origin; |
| u8 __reserved; |
| u32 operation_id; |
| u32 error_code; |
| union tf_answer_param answers[4]; |
| }; |
| |
| /* |
| * CANCEL_CLIENT_OPERATION command message. |
| */ |
| struct tf_command_cancel_client_operation { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info_rfu; |
| /* an opaque Normal World identifier for the operation */ |
| u32 operation_id; |
| u32 device_context; |
| u32 client_session; |
| u32 cancellation_id; |
| }; |
| |
| struct tf_answer_cancel_client_operation { |
| u8 message_size; |
| u8 message_type; |
| u16 message_info_rfu; |
| u32 operation_id; |
| u32 error_code; |
| }; |
| |
| /* |
| * MANAGEMENT command message. |
| */ |
| struct tf_command_management { |
| u8 message_size; |
| u8 message_type; |
| u16 command; |
| u32 operation_id; |
| u32 w3b_size; |
| u32 w3b_start_offset; |
| u32 shared_mem_descriptors[1]; |
| }; |
| |
| /* |
| * POWER_MANAGEMENT answer message. |
| * The message does not provide message specific parameters. |
| * Therefore no need to define a specific answer structure |
| */ |
| |
| /* |
| * Structure for L2 messages |
| */ |
| union tf_command { |
| struct tf_command_header header; |
| struct tf_command_create_device_context create_device_context; |
| struct tf_command_destroy_device_context destroy_device_context; |
| struct tf_command_open_client_session open_client_session; |
| struct tf_command_close_client_session close_client_session; |
| struct tf_command_register_shared_memory register_shared_memory; |
| struct tf_command_release_shared_memory release_shared_memory; |
| struct tf_command_invoke_client_command invoke_client_command; |
| struct tf_command_cancel_client_operation cancel_client_operation; |
| struct tf_command_management management; |
| }; |
| |
| /* |
| * Structure for any L2 answer |
| */ |
| |
| union tf_answer { |
| struct tf_answer_header header; |
| struct tf_answer_create_device_context create_device_context; |
| struct tf_answer_open_client_session open_client_session; |
| struct tf_answer_close_client_session close_client_session; |
| struct tf_answer_register_shared_memory register_shared_memory; |
| struct tf_answer_release_shared_memory release_shared_memory; |
| struct tf_answer_invoke_client_command invoke_client_command; |
| struct tf_answer_destroy_device_context destroy_device_context; |
| struct tf_answer_cancel_client_operation cancel_client_operation; |
| }; |
| |
| /* Structure of the Communication Buffer */ |
| struct tf_l1_shared_buffer { |
| u32 config_flag_s; |
| u32 w3b_size_max_s; |
| u32 reserved0; |
| u32 w3b_size_current_s; |
| u8 reserved1[48]; |
| u8 version_description[TF_DESCRIPTION_BUFFER_LENGTH]; |
| u32 status_s; |
| u32 reserved2; |
| u32 sync_serial_n; |
| u32 sync_serial_s; |
| u64 time_n[2]; |
| u64 timeout_s[2]; |
| u32 first_command; |
| u32 first_free_command; |
| u32 first_answer; |
| u32 first_free_answer; |
| u32 w3b_descriptors[128]; |
| #ifdef CONFIG_TF_ZEBRA |
| u8 rpc_trace_buffer[140]; |
| u8 rpc_cus_buffer[180]; |
| #else |
| u8 reserved3[320]; |
| #endif |
| u32 command_queue[TF_N_MESSAGE_QUEUE_CAPACITY]; |
| u32 answer_queue[TF_S_ANSWER_QUEUE_CAPACITY]; |
| }; |
| |
| |
| /* |
| * tf_version_information_buffer structure description |
| * Description of the sVersionBuffer handed over from user space to kernel space |
| * This field is filled by the driver during a CREATE_DEVICE_CONTEXT ioctl |
| * and handed back to user space |
| */ |
| struct tf_version_information_buffer { |
| u8 driver_description[65]; |
| u8 secure_world_description[65]; |
| }; |
| |
| |
| /* The IOCTLs the driver supports */ |
| #include <linux/ioctl.h> |
| |
| #define IOCTL_TF_GET_VERSION _IO('z', 0) |
| #define IOCTL_TF_EXCHANGE _IOWR('z', 1, union tf_command) |
| #define IOCTL_TF_GET_DESCRIPTION _IOR('z', 2, \ |
| struct tf_version_information_buffer) |
| #ifdef CONFIG_TF_ION |
| #define IOCTL_TF_ION_REGISTER _IOR('z', 254, int) |
| #define IOCTL_TF_ION_UNREGISTER _IOR('z', 255, int) |
| #endif |
| |
| #endif /* !defined(__TF_PROTOCOL_H__) */ |