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  32
      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 	uint32_t 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 	uint32_t 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_MAX
    132 };
    133 
    134 struct qseecom_create_key_req {
    135 	unsigned char hash32[QSEECOM_HASH_SIZE];
    136 	enum qseecom_key_management_usage_type usage;
    137 };
    138 
    139 struct qseecom_wipe_key_req {
    140 	enum qseecom_key_management_usage_type usage;
    141 	int wipe_key_flag;/* 1->remove key from storage(alone with clear key) */
    142 			  /* 0->do not remove from storage (clear key) */
    143 };
    144 
    145 struct qseecom_update_key_userinfo_req {
    146 	unsigned char current_hash32[QSEECOM_HASH_SIZE];
    147 	unsigned char new_hash32[QSEECOM_HASH_SIZE];
    148 	enum qseecom_key_management_usage_type usage;
    149 };
    150 
    151 #define SHA256_DIGEST_LENGTH	(256/8)
    152 /*
    153  * struct qseecom_save_partition_hash_req
    154  * @partition_id - partition id.
    155  * @hash[SHA256_DIGEST_LENGTH] -  sha256 digest.
    156  */
    157 struct qseecom_save_partition_hash_req {
    158 	int partition_id; /* in */
    159 	char digest[SHA256_DIGEST_LENGTH]; /* in */
    160 };
    161 
    162 /*
    163  * struct qseecom_is_es_activated_req
    164  * @is_activated - 1=true , 0=false
    165  */
    166 struct qseecom_is_es_activated_req {
    167 	int is_activated; /* out */
    168 };
    169 
    170 enum qseecom_bandwidth_request_mode {
    171 	INACTIVE = 0,
    172 	LOW,
    173 	MEDIUM,
    174 	HIGH,
    175 };
    176 
    177 /*
    178  * struct qseecom_send_modfd_resp - for send command ioctl request
    179  * @req_len - command buffer length
    180  * @req_buf - command buffer
    181  * @ifd_data_fd - ion handle to memory allocated in user space
    182  * @cmd_buf_offset - command buffer offset
    183  */
    184 struct qseecom_send_modfd_listener_resp {
    185 	void *resp_buf_ptr; /* in */
    186 	unsigned int resp_len; /* in */
    187 	struct qseecom_ion_fd_info ifd_data[MAX_ION_FD]; /* in */
    188 };
    189 
    190 
    191 #define QSEECOM_IOC_MAGIC    0x97
    192 
    193 
    194 #define QSEECOM_IOCTL_REGISTER_LISTENER_REQ \
    195 	_IOWR(QSEECOM_IOC_MAGIC, 1, struct qseecom_register_listener_req)
    196 
    197 #define QSEECOM_IOCTL_UNREGISTER_LISTENER_REQ \
    198 	_IO(QSEECOM_IOC_MAGIC, 2)
    199 
    200 #define QSEECOM_IOCTL_SEND_CMD_REQ \
    201 	_IOWR(QSEECOM_IOC_MAGIC, 3, struct qseecom_send_cmd_req)
    202 
    203 #define QSEECOM_IOCTL_SEND_MODFD_CMD_REQ \
    204 	_IOWR(QSEECOM_IOC_MAGIC, 4, struct qseecom_send_modfd_cmd_req)
    205 
    206 #define QSEECOM_IOCTL_RECEIVE_REQ \
    207 	_IO(QSEECOM_IOC_MAGIC, 5)
    208 
    209 #define QSEECOM_IOCTL_SEND_RESP_REQ \
    210 	_IO(QSEECOM_IOC_MAGIC, 6)
    211 
    212 #define QSEECOM_IOCTL_LOAD_APP_REQ \
    213 	_IOWR(QSEECOM_IOC_MAGIC, 7, struct qseecom_load_img_req)
    214 
    215 #define QSEECOM_IOCTL_SET_MEM_PARAM_REQ \
    216 	_IOWR(QSEECOM_IOC_MAGIC, 8, struct qseecom_set_sb_mem_param_req)
    217 
    218 #define QSEECOM_IOCTL_UNLOAD_APP_REQ \
    219 	_IO(QSEECOM_IOC_MAGIC, 9)
    220 
    221 #define QSEECOM_IOCTL_GET_QSEOS_VERSION_REQ \
    222 	_IOWR(QSEECOM_IOC_MAGIC, 10, struct qseecom_qseos_version_req)
    223 
    224 #define QSEECOM_IOCTL_PERF_ENABLE_REQ \
    225 	_IO(QSEECOM_IOC_MAGIC, 11)
    226 
    227 #define QSEECOM_IOCTL_PERF_DISABLE_REQ \
    228 	_IO(QSEECOM_IOC_MAGIC, 12)
    229 
    230 #define QSEECOM_IOCTL_LOAD_EXTERNAL_ELF_REQ \
    231 	_IOWR(QSEECOM_IOC_MAGIC, 13, struct qseecom_load_img_req)
    232 
    233 #define QSEECOM_IOCTL_UNLOAD_EXTERNAL_ELF_REQ \
    234 	_IO(QSEECOM_IOC_MAGIC, 14)
    235 
    236 #define QSEECOM_IOCTL_APP_LOADED_QUERY_REQ \
    237 	_IOWR(QSEECOM_IOC_MAGIC, 15, struct qseecom_qseos_app_load_query)
    238 
    239 #define QSEECOM_IOCTL_SEND_CMD_SERVICE_REQ \
    240 	_IOWR(QSEECOM_IOC_MAGIC, 16, struct qseecom_send_svc_cmd_req)
    241 
    242 #define QSEECOM_IOCTL_CREATE_KEY_REQ \
    243 	_IOWR(QSEECOM_IOC_MAGIC, 17, struct qseecom_create_key_req)
    244 
    245 #define QSEECOM_IOCTL_WIPE_KEY_REQ \
    246 	_IOWR(QSEECOM_IOC_MAGIC, 18, struct qseecom_wipe_key_req)
    247 
    248 #define QSEECOM_IOCTL_SAVE_PARTITION_HASH_REQ \
    249 	_IOWR(QSEECOM_IOC_MAGIC, 19, struct qseecom_save_partition_hash_req)
    250 
    251 #define QSEECOM_IOCTL_IS_ES_ACTIVATED_REQ \
    252 	_IOWR(QSEECOM_IOC_MAGIC, 20, struct qseecom_is_es_activated_req)
    253 
    254 #define QSEECOM_IOCTL_SEND_MODFD_RESP \
    255 	_IOWR(QSEECOM_IOC_MAGIC, 21, struct qseecom_send_modfd_listener_resp)
    256 
    257 #define QSEECOM_IOCTL_SET_BUS_SCALING_REQ \
    258 	_IOWR(QSEECOM_IOC_MAGIC, 23, int)
    259 
    260 #define QSEECOM_IOCTL_UPDATE_KEY_USER_INFO_REQ \
    261 	_IOWR(QSEECOM_IOC_MAGIC, 24, struct qseecom_update_key_userinfo_req)
    262 
    263 
    264 #endif /* _UAPI_QSEECOM_H_ */
    265