Home | History | Annotate | Download | only in linux
      1 #ifndef _UAPI_QSEECOM_H_
      2 #define _UAPI_QSEECOM_H_
      3 
      4 #include <linux/types.h>
      5 #include <linux/ioctl.h>
      6 
      7 #define MAX_ION_FD  4
      8 #define MAX_APP_NAME_SIZE  64
      9 #define QSEECOM_HASH_SIZE  32
     10 /*
     11  * struct qseecom_register_listener_req -
     12  *      for register listener ioctl request
     13  * @listener_id - service id (shared between userspace and QSE)
     14  * @ifd_data_fd - ion handle
     15  * @virt_sb_base - shared buffer base in user space
     16  * @sb_size - shared buffer size
     17  */
     18 struct qseecom_register_listener_req {
     19 	uint32_t listener_id; /* in */
     20 	int32_t ifd_data_fd; /* in */
     21 	void *virt_sb_base; /* in */
     22 	uint32_t sb_size; /* in */
     23 };
     24 
     25 /*
     26  * struct qseecom_send_cmd_req - for send command ioctl request
     27  * @cmd_req_len - command buffer length
     28  * @cmd_req_buf - command buffer
     29  * @resp_len - response buffer length
     30  * @resp_buf - response buffer
     31  */
     32 struct qseecom_send_cmd_req {
     33 	void *cmd_req_buf; /* in */
     34 	unsigned int cmd_req_len; /* in */
     35 	void *resp_buf; /* in/out */
     36 	unsigned int resp_len; /* in/out */
     37 };
     38 
     39 /*
     40  * struct qseecom_ion_fd_info - ion fd handle data information
     41  * @fd - ion handle to some memory allocated in user space
     42  * @cmd_buf_offset - command buffer offset
     43  */
     44 struct qseecom_ion_fd_info {
     45 	int32_t fd;
     46 	uint32_t cmd_buf_offset;
     47 };
     48 /*
     49  * struct qseecom_send_modfd_cmd_req - for send command ioctl request
     50  * @cmd_req_len - command buffer length
     51  * @cmd_req_buf - command buffer
     52  * @resp_len - response buffer length
     53  * @resp_buf - response buffer
     54  * @ifd_data_fd - ion handle to memory allocated in user space
     55  * @cmd_buf_offset - command buffer offset
     56  */
     57 struct qseecom_send_modfd_cmd_req {
     58 	void *cmd_req_buf; /* in */
     59 	unsigned int cmd_req_len; /* in */
     60 	void *resp_buf; /* in/out */
     61 	unsigned int resp_len; /* in/out */
     62 	struct qseecom_ion_fd_info ifd_data[MAX_ION_FD];
     63 };
     64 
     65 /*
     66  * struct qseecom_listener_send_resp_req - signal to continue the send_cmd req.
     67  * Used as a trigger from HLOS service to notify QSEECOM that it's done with its
     68  * operation and provide the response for QSEECOM can continue the incomplete
     69  * command execution
     70  * @resp_len - Length of the response
     71  * @resp_buf - Response buffer where the response of the cmd should go.
     72  */
     73 struct qseecom_send_resp_req {
     74 	void *resp_buf; /* in */
     75 	unsigned int resp_len; /* in */
     76 };
     77 
     78 /*
     79  * struct qseecom_load_img_data - for sending image length information and
     80  * ion file descriptor to the qseecom driver. ion file descriptor is used
     81  * for retrieving the ion file handle and in turn the physical address of
     82  * the image location.
     83  * @mdt_len - Length of the .mdt file in bytes.
     84  * @img_len - Length of the .mdt + .b00 +..+.bxx images files in bytes
     85  * @ion_fd - Ion file descriptor used when allocating memory.
     86  * @img_name - Name of the image.
     87 */
     88 struct qseecom_load_img_req {
     89 	uint32_t mdt_len; /* in */
     90 	uint32_t img_len; /* in */
     91 	int32_t  ifd_data_fd; /* in */
     92 	char	 img_name[MAX_APP_NAME_SIZE]; /* in */
     93 	int app_id; /* out*/
     94 };
     95 
     96 struct qseecom_set_sb_mem_param_req {
     97 	int32_t ifd_data_fd; /* in */
     98 	void *virt_sb_base; /* in */
     99 	uint32_t sb_len; /* in */
    100 };
    101 
    102 /*
    103  * struct qseecom_qseos_version_req - get qseos version
    104  * @qseos_version - version number
    105  */
    106 struct qseecom_qseos_version_req {
    107 	unsigned int qseos_version; /* in */
    108 };
    109 
    110 /*
    111  * struct qseecom_qseos_app_load_query - verify if app is loaded in qsee
    112  * @app_name[MAX_APP_NAME_SIZE]-  name of the app.
    113  * @app_id - app id.
    114  */
    115 struct qseecom_qseos_app_load_query {
    116 	char app_name[MAX_APP_NAME_SIZE]; /* in */
    117 	int app_id; /* out */
    118 };
    119 
    120 struct qseecom_send_svc_cmd_req {
    121 	uint32_t cmd_id;
    122 	void *cmd_req_buf; /* in */
    123 	unsigned int cmd_req_len; /* in */
    124 	void *resp_buf; /* in/out */
    125 	unsigned int resp_len; /* in/out */
    126 };
    127 
    128 enum qseecom_key_management_usage_type {
    129 	QSEOS_KM_USAGE_DISK_ENCRYPTION = 0x01,
    130 	QSEOS_KM_USAGE_FILE_ENCRYPTION = 0x02,
    131 	QSEOS_KM_USAGE_ICE_DISK_ENCRYPTION = 0x03,
    132 	QSEOS_KM_USAGE_ICE_FILE_ENCRYPTION = 0x04,
    133 	QSEOS_KM_USAGE_MAX
    134 };
    135 
    136 struct qseecom_create_key_req {
    137 	unsigned char hash32[QSEECOM_HASH_SIZE];
    138 	enum qseecom_key_management_usage_type usage;
    139 };
    140 
    141 struct qseecom_wipe_key_req {
    142 	enum qseecom_key_management_usage_type usage;
    143 	int wipe_key_flag;/* 1->remove key from storage(alone with clear key) */
    144 			  /* 0->do not remove from storage (clear key) */
    145 };
    146 
    147 struct qseecom_update_key_userinfo_req {
    148 	unsigned char current_hash32[QSEECOM_HASH_SIZE];
    149 	unsigned char new_hash32[QSEECOM_HASH_SIZE];
    150 	enum qseecom_key_management_usage_type usage;
    151 };
    152 
    153 #define SHA256_DIGEST_LENGTH	(256/8)
    154 /*
    155  * struct qseecom_save_partition_hash_req
    156  * @partition_id - partition id.
    157  * @hash[SHA256_DIGEST_LENGTH] -  sha256 digest.
    158  */
    159 struct qseecom_save_partition_hash_req {
    160 	int partition_id; /* in */
    161 	char digest[SHA256_DIGEST_LENGTH]; /* in */
    162 };
    163 
    164 /*
    165  * struct qseecom_is_es_activated_req
    166  * @is_activated - 1=true , 0=false
    167  */
    168 struct qseecom_is_es_activated_req {
    169 	int is_activated; /* out */
    170 };
    171 
    172 enum qseecom_bandwidth_request_mode {
    173 	INACTIVE = 0,
    174 	LOW,
    175 	MEDIUM,
    176 	HIGH,
    177 };
    178 
    179 /*
    180  * struct qseecom_send_modfd_resp - for send command ioctl request
    181  * @req_len - command buffer length
    182  * @req_buf - command buffer
    183  * @ifd_data_fd - ion handle to memory allocated in user space
    184  * @cmd_buf_offset - command buffer offset
    185  */
    186 struct qseecom_send_modfd_listener_resp {
    187 	void *resp_buf_ptr; /* in */
    188 	unsigned int resp_len; /* in */
    189 	struct qseecom_ion_fd_info ifd_data[MAX_ION_FD]; /* in */
    190 };
    191 
    192 struct qseecom_qteec_req {
    193 	void    *req_ptr;
    194 	uint32_t    req_len;
    195 	void    *resp_ptr;
    196 	uint32_t    resp_len;
    197 };
    198 
    199 struct qseecom_qteec_modfd_req {
    200 	void    *req_ptr;
    201 	uint32_t    req_len;
    202 	void    *resp_ptr;
    203 	uint32_t    resp_len;
    204 	struct qseecom_ion_fd_info ifd_data[MAX_ION_FD];
    205 };
    206 
    207 struct file;
    208 
    209 extern long qseecom_ioctl(struct file *file,
    210 					unsigned cmd, unsigned long arg);
    211 
    212 #define QSEECOM_IOC_MAGIC    0x97
    213 
    214 
    215 #define QSEECOM_IOCTL_REGISTER_LISTENER_REQ \
    216 	_IOWR(QSEECOM_IOC_MAGIC, 1, struct qseecom_register_listener_req)
    217 
    218 #define QSEECOM_IOCTL_UNREGISTER_LISTENER_REQ \
    219 	_IO(QSEECOM_IOC_MAGIC, 2)
    220 
    221 #define QSEECOM_IOCTL_SEND_CMD_REQ \
    222 	_IOWR(QSEECOM_IOC_MAGIC, 3, struct qseecom_send_cmd_req)
    223 
    224 #define QSEECOM_IOCTL_SEND_MODFD_CMD_REQ \
    225 	_IOWR(QSEECOM_IOC_MAGIC, 4, struct qseecom_send_modfd_cmd_req)
    226 
    227 #define QSEECOM_IOCTL_RECEIVE_REQ \
    228 	_IO(QSEECOM_IOC_MAGIC, 5)
    229 
    230 #define QSEECOM_IOCTL_SEND_RESP_REQ \
    231 	_IO(QSEECOM_IOC_MAGIC, 6)
    232 
    233 #define QSEECOM_IOCTL_LOAD_APP_REQ \
    234 	_IOWR(QSEECOM_IOC_MAGIC, 7, struct qseecom_load_img_req)
    235 
    236 #define QSEECOM_IOCTL_SET_MEM_PARAM_REQ \
    237 	_IOWR(QSEECOM_IOC_MAGIC, 8, struct qseecom_set_sb_mem_param_req)
    238 
    239 #define QSEECOM_IOCTL_UNLOAD_APP_REQ \
    240 	_IO(QSEECOM_IOC_MAGIC, 9)
    241 
    242 #define QSEECOM_IOCTL_GET_QSEOS_VERSION_REQ \
    243 	_IOWR(QSEECOM_IOC_MAGIC, 10, struct qseecom_qseos_version_req)
    244 
    245 #define QSEECOM_IOCTL_PERF_ENABLE_REQ \
    246 	_IO(QSEECOM_IOC_MAGIC, 11)
    247 
    248 #define QSEECOM_IOCTL_PERF_DISABLE_REQ \
    249 	_IO(QSEECOM_IOC_MAGIC, 12)
    250 
    251 #define QSEECOM_IOCTL_LOAD_EXTERNAL_ELF_REQ \
    252 	_IOWR(QSEECOM_IOC_MAGIC, 13, struct qseecom_load_img_req)
    253 
    254 #define QSEECOM_IOCTL_UNLOAD_EXTERNAL_ELF_REQ \
    255 	_IO(QSEECOM_IOC_MAGIC, 14)
    256 
    257 #define QSEECOM_IOCTL_APP_LOADED_QUERY_REQ \
    258 	_IOWR(QSEECOM_IOC_MAGIC, 15, struct qseecom_qseos_app_load_query)
    259 
    260 #define QSEECOM_IOCTL_SEND_CMD_SERVICE_REQ \
    261 	_IOWR(QSEECOM_IOC_MAGIC, 16, struct qseecom_send_svc_cmd_req)
    262 
    263 #define QSEECOM_IOCTL_CREATE_KEY_REQ \
    264 	_IOWR(QSEECOM_IOC_MAGIC, 17, struct qseecom_create_key_req)
    265 
    266 #define QSEECOM_IOCTL_WIPE_KEY_REQ \
    267 	_IOWR(QSEECOM_IOC_MAGIC, 18, struct qseecom_wipe_key_req)
    268 
    269 #define QSEECOM_IOCTL_SAVE_PARTITION_HASH_REQ \
    270 	_IOWR(QSEECOM_IOC_MAGIC, 19, struct qseecom_save_partition_hash_req)
    271 
    272 #define QSEECOM_IOCTL_IS_ES_ACTIVATED_REQ \
    273 	_IOWR(QSEECOM_IOC_MAGIC, 20, struct qseecom_is_es_activated_req)
    274 
    275 #define QSEECOM_IOCTL_SEND_MODFD_RESP \
    276 	_IOWR(QSEECOM_IOC_MAGIC, 21, struct qseecom_send_modfd_listener_resp)
    277 
    278 #define QSEECOM_IOCTL_SET_BUS_SCALING_REQ \
    279 	_IOWR(QSEECOM_IOC_MAGIC, 23, int)
    280 
    281 #define QSEECOM_IOCTL_UPDATE_KEY_USER_INFO_REQ \
    282 	_IOWR(QSEECOM_IOC_MAGIC, 24, struct qseecom_update_key_userinfo_req)
    283 
    284 #define QSEECOM_QTEEC_IOCTL_OPEN_SESSION_REQ \
    285 	_IOWR(QSEECOM_IOC_MAGIC, 30, struct qseecom_qteec_modfd_req)
    286 
    287 #define QSEECOM_QTEEC_IOCTL_CLOSE_SESSION_REQ \
    288 	_IOWR(QSEECOM_IOC_MAGIC, 31, struct qseecom_qteec_req)
    289 
    290 #define QSEECOM_QTEEC_IOCTL_INVOKE_MODFD_CMD_REQ \
    291 	_IOWR(QSEECOM_IOC_MAGIC, 32, struct qseecom_qteec_modfd_req)
    292 
    293 #define QSEECOM_QTEEC_IOCTL_REQUEST_CANCELLATION_REQ \
    294 	_IOWR(QSEECOM_IOC_MAGIC, 33, struct qseecom_qteec_modfd_req)
    295 
    296 #endif /* _UAPI_QSEECOM_H_ */
    297