blob: bd66b3a5f2cab1eed39ca2602eebcdd5e4fef390 [file] [log] [blame]
/*
* Copyright (C) 2012-2017, Samsung Electronics Co., Ltd.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* 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.
*/
#ifndef __IW_MESSAGES_H__
#define __IW_MESSAGES_H__
#ifndef __USED_BY_TZSL__
#include "tz_cred.h"
#else
#include <stdint.h>
#include <uuid/uuid.h>
#endif
#define PROFILE_NAME_LEN 16
#define PROFILE_STR_LEN (PROFILE_NAME_LEN + 1)
#define CA_DIG_LEN 32
#define TEE_MAX_CONTEXT_NAME_LEN 64
/* This macro should be used for any inter-world structures, to avoid possible
* problems with structure padding */
#define IW_STRUCTURE __attribute__((packed))
#define IWD_TIMEOUT_INFINITY ((uint64_t)(-1))
#define ROOT_TASK_SOCK "socket://root_task_iwd_sock"
#define STARTUP_LOADER_SOCK "socket://startup_loader"
#ifndef __USED_BY_TZSL__
typedef struct tz_uuid tz_uuid_t;
#else
typedef uuid_t tz_uuid_t;
#endif
/*
Used to transfer information about TEE_Param between SW and NW, and for inter ta communication
*/
struct shared_buffer_description {
uint32_t offset;
uint32_t size;
uint32_t id;
} IW_STRUCTURE;
struct value {
uint32_t a, b;
} IW_STRUCTURE;
struct entry_point_params {
union {
struct shared_buffer_description shared_buffer_description;
struct value val;
};
} IW_STRUCTURE;
enum iw_cmd_type {
CMD_INVALID_ID = 0,
CMD_INITIALIZE_CONTEXT = 1,
CMD_FINALIZE_CONTEXT = 2,
CMD_SET_SHMEM_RIGHTS = 3,
CMD_PREPARE_SESSION = 4,
CMD_OPEN_SESSION = 5,
CMD_CLOSE_SESSION = 6,
CMD_INVOKE_COMMAND = 7,
CMD_SET_CLUSTER = 8,
CMD_CANCELLATION = 9,
CMD_OPEN_TZDAEMON_CONNECTION = 10,
CMD_REPLY = 11,
CMD_REPLY_INITIALIZE_CONTEXT = 12,
CMD_REPLY_FINALIZE_CONTEXT = 13,
CMD_REPLY_PREPARE_SESSION = 14,
CMD_REPLY_SET_SHMEM_RIGHTS = 15,
CMD_REPLY_OPEN_SESSION = 16,
CMD_REPLY_CLOSE_SESSION = 17,
CMD_REPLY_INVOKE_COMMAND = 18,
CMD_REPLY_SET_CLUSTER = 19,
CMD_REPLY_OPEN_TZDAEMON_CONNECTION = 20,
CMD_TUI_START = 21,
CMD_TUI_GET_RESOURCE = 22,
CMD_TUI_GET_RESOLUTION = 23,
CMD_TUI_STOP = 24,
CMD_REPLY_TUI_START = 25,
CMD_REPLY_TUI_GET_RESOLUTION = 26,
CMD_REPLY_TUI_STOP = 27,
CMD_MAX
};
struct tee_operation {
uint32_t tee_param_types;
struct entry_point_params tee_params[4];
} IW_STRUCTURE;
struct cmd_request {
uint32_t cmd;
uint32_t serial;
} IW_STRUCTURE;
struct cmd_reply {
struct cmd_request base;
uint32_t result;
uint32_t origin;
} IW_STRUCTURE;
struct cmd_initialize_context {
struct cmd_request base;
} IW_STRUCTURE;
struct cmd_reply_initialize_context {
struct cmd_reply base;
uint32_t ctx_id;
uint32_t group_id;
} IW_STRUCTURE;
struct cmd_finalize_context {
struct cmd_request base;
} IW_STRUCTURE;
struct cmd_reply_finalize_context {
struct cmd_reply base;
} IW_STRUCTURE;
struct cmd_set_shared_memory_rights {
struct cmd_request base;
struct shared_buffer_description buf_desc;
} IW_STRUCTURE;
struct cmd_reply_set_shared_memory_rights {
struct cmd_reply base;
} IW_STRUCTURE;
struct cmd_prepare_session {
struct cmd_request base;
tz_uuid_t ta_uuid;
uint32_t ctx_id;
struct shared_buffer_description buf_desc;
} IW_STRUCTURE;
struct cmd_prepare_session_reply {
struct cmd_reply base;
} IW_STRUCTURE;
struct cmd_open_session {
struct cmd_request base;
uint32_t conn_meth;
char conn_data[PROFILE_STR_LEN];
uint32_t fips_enabled;
struct tee_operation op;
uint64_t cancel_time; /* < Number of nanoseconds since Epoch. */
} IW_STRUCTURE;
struct cmd_reply_open_session {
struct cmd_reply base;
tz_uuid_t session_id;
struct tee_operation op;
} IW_STRUCTURE;
struct cmd_invoke_command {
struct cmd_request base;
uint32_t tee_cmd_id;
struct tee_operation op;
uint64_t cancel_time; /* < Number of nanoseconds since Epoch. */
} IW_STRUCTURE;
struct cmd_reply_invoke_command {
struct cmd_reply base;
struct tee_operation op;
} IW_STRUCTURE;
struct cmd_close_session {
struct cmd_request base;
} IW_STRUCTURE;
struct cmd_reply_close_session {
struct cmd_reply base;
} IW_STRUCTURE;
/* No reply message */
struct cmd_cancellation {
struct cmd_request base;
uint32_t op_serial;
} IW_STRUCTURE;
/* Use struct cmd_reply for reply message */
struct cmd_set_cluster {
struct cmd_request base;
uint32_t cluster;
} IW_STRUCTURE;
struct cmd_reply_set_cluster {
struct cmd_reply base;
} IW_STRUCTURE;
struct cmd_open_tzdaemon_connection {
struct cmd_request base;
} IW_STRUCTURE;
struct cmd_reply_open_tzdaemon_connection {
struct cmd_reply base;
} IW_STRUCTURE;
#define MAX_TA_NAME_LEN 256
#endif /* __IW_MESSAGES_H__ */