mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
d316c3dc04
This driver is based of the TZCOM (planned to be deprecated soon). It shares the same design as TZCOM with some re-organization and new features added. QSEEcom (Qualcomm Secure Execution environment Communicator) is named accordingly to be consistent with the nomenclature used in the secure domain. The following additional features (on top of current TZCOM) driver are implemented: (1) Add support for multi-image loading. The image that was loaded in TZCOM was hard-coded to "tzapps". During a open() tzapps was loaded using pil driver call pil_get(). This severly limted the number of images that could be loaded to one single application: named "tzapps". qseecom driver provides a way to load any image on request. Client simply send the image data in a specific format and this data is sent over to QSEE (Qualcomm Secure Execution enviroment) to load accordingly. (2) Add support for multi-client. TZcom driver did not have provisions to support multiple clients to interface with the single tzapp image loaded on the secure domain. The changes added in qseecom driver allows for multiple client to interface with a single image laoded and running in secure domain. (3) Add support for performance tweaking in QSEE Added capability to send requests to QSEE to set specific clocks for optimal crypto performance. This essentially will increase the crypto performance on the secure domain. The crypto functionality is used extensively by the current existing qseecom client(s). (4) Retain legacy support for QSEOS version 1.3. In order for the existing applications to work with old QSEE image, qseecom also supports the old mechanism (loading tzapp image via pil). This was a requirement for existing products that are not yet using the latest secure code. Change-Id: I7cf2d62c612cb4d17b33579e66bee44c9844dfda Signed-off-by: Mona Hossain <mhossain@codeaurora.org>
155 lines
4.4 KiB
C
155 lines
4.4 KiB
C
#ifndef __QSEECOM_H_
|
|
#define __QSEECOM_H_
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/ioctl.h>
|
|
|
|
#define MAX_ION_FD 4
|
|
#define MAX_APP_NAME_SIZE 32
|
|
|
|
/*
|
|
* struct qseecom_register_listener_req -
|
|
* for register listener ioctl request
|
|
* @listener_id - service id (shared between userspace and QSE)
|
|
* @ifd_data_fd - ion handle
|
|
* @virt_sb_base - shared buffer base in user space
|
|
* @sb_size - shared buffer size
|
|
*/
|
|
struct qseecom_register_listener_req {
|
|
uint32_t listener_id; /* in */
|
|
int32_t ifd_data_fd; /* in */
|
|
uint32_t virt_sb_base; /* in */
|
|
uint32_t sb_size; /* in */
|
|
};
|
|
|
|
/*
|
|
* struct qseecom_send_cmd_req - for send command ioctl request
|
|
* @cmd_req_len - command buffer length
|
|
* @cmd_req_buf - command buffer
|
|
* @resp_len - response buffer length
|
|
* @resp_buf - response buffer
|
|
*/
|
|
struct qseecom_send_cmd_req {
|
|
void *cmd_req_buf; /* in */
|
|
unsigned int cmd_req_len; /* in */
|
|
void *resp_buf; /* in/out */
|
|
unsigned int resp_len; /* in/out */
|
|
};
|
|
|
|
|
|
/*
|
|
* struct qseecom_ion_fd_info - ion fd handle data information
|
|
* @fd - ion handle to some memory allocated in user space
|
|
* @cmd_buf_offset - command buffer offset
|
|
*/
|
|
struct qseecom_ion_fd_info {
|
|
int32_t fd;
|
|
uint32_t cmd_buf_offset;
|
|
};
|
|
/*
|
|
* struct qseecom_send_modfd_cmd_req - for send command ioctl request
|
|
* @cmd_req_len - command buffer length
|
|
* @cmd_req_buf - command buffer
|
|
* @resp_len - response buffer length
|
|
* @resp_buf - response buffer
|
|
* @ifd_data_fd - ion handle to memory allocated in user space
|
|
* @cmd_buf_offset - command buffer offset
|
|
*/
|
|
struct qseecom_send_modfd_cmd_req {
|
|
void *cmd_req_buf; /* in */
|
|
unsigned int cmd_req_len; /* in */
|
|
void *resp_buf; /* in/out */
|
|
unsigned int resp_len; /* in/out */
|
|
struct qseecom_ion_fd_info ifd_data[MAX_ION_FD];
|
|
};
|
|
/*
|
|
* struct qseecom_listener_send_resp_req - signal to continue the send_cmd req.
|
|
* Used as a trigger from HLOS service to notify QSEECOM that it's done with its
|
|
* operation and provide the response for QSEECOM can continue the incomplete
|
|
* command execution
|
|
* @resp_len - Length of the response
|
|
* @resp_buf - Response buffer where the response of the cmd should go.
|
|
*/
|
|
struct qseecom_send_resp_req {
|
|
void *resp_buf; /* in */
|
|
unsigned int resp_len; /* in */
|
|
};
|
|
|
|
/*
|
|
* struct qseecom_load_img_data - for sending image length information and
|
|
* ion file descriptor to the qseecom driver. ion file descriptor is used
|
|
* for retrieving the ion file handle and in turn the physical address of
|
|
* the image location.
|
|
* @mdt_len - Length of the .mdt file in bytes.
|
|
* @img_len - Length of the .mdt + .b00 +..+.bxx images files in bytes
|
|
* @ion_fd - Ion file descriptor used when allocating memory.
|
|
* @img_name - Name of the image.
|
|
*/
|
|
struct qseecom_load_img_req {
|
|
uint32_t mdt_len; /* in */
|
|
uint32_t img_len; /* in */
|
|
int32_t ifd_data_fd; /* in */
|
|
char img_name[MAX_APP_NAME_SIZE]; /* in */
|
|
int app_id; /* out*/
|
|
};
|
|
|
|
struct qseecom_set_sb_mem_param_req {
|
|
int32_t ifd_data_fd; /* in */
|
|
uint32_t virt_sb_base; /* in */
|
|
uint32_t sb_len; /* in */
|
|
};
|
|
|
|
/*
|
|
* struct qseecom_qseos_version_req - get qseos version
|
|
* @qseos_version - version number
|
|
*/
|
|
struct qseecom_qseos_version_req {
|
|
unsigned int qseos_version; /* in */
|
|
};
|
|
|
|
#define QSEECOM_IOC_MAGIC 0x97
|
|
|
|
|
|
#define QSEECOM_IOCTL_REGISTER_LISTENER_REQ \
|
|
_IOWR(QSEECOM_IOC_MAGIC, 1, struct qseecom_register_listener_req)
|
|
|
|
#define QSEECOM_IOCTL_UNREGISTER_LISTENER_REQ \
|
|
_IO(QSEECOM_IOC_MAGIC, 2)
|
|
|
|
#define QSEECOM_IOCTL_SEND_CMD_REQ \
|
|
_IOWR(QSEECOM_IOC_MAGIC, 3, struct qseecom_send_cmd_req)
|
|
|
|
#define QSEECOM_IOCTL_SEND_MODFD_CMD_REQ \
|
|
_IOWR(QSEECOM_IOC_MAGIC, 4, struct qseecom_send_modfd_cmd_req)
|
|
|
|
#define QSEECOM_IOCTL_RECEIVE_REQ \
|
|
_IO(QSEECOM_IOC_MAGIC, 5)
|
|
|
|
#define QSEECOM_IOCTL_SEND_RESP_REQ \
|
|
_IO(QSEECOM_IOC_MAGIC, 6)
|
|
|
|
#define QSEECOM_IOCTL_LOAD_APP_REQ \
|
|
_IOWR(QSEECOM_IOC_MAGIC, 7, struct qseecom_load_img_req)
|
|
|
|
#define QSEECOM_IOCTL_SET_MEM_PARAM_REQ \
|
|
_IOWR(QSEECOM_IOC_MAGIC, 8, struct qseecom_set_sb_mem_param_req)
|
|
|
|
#define QSEECOM_IOCTL_UNLOAD_APP_REQ \
|
|
_IO(QSEECOM_IOC_MAGIC, 9)
|
|
|
|
#define QSEECOM_IOCTL_GET_QSEOS_VERSION_REQ \
|
|
_IOWR(QSEECOM_IOC_MAGIC, 10, struct qseecom_qseos_version_req)
|
|
|
|
#define QSEECOM_IOCTL_PERF_ENABLE_REQ \
|
|
_IO(QSEECOM_IOC_MAGIC, 11)
|
|
|
|
#define QSEECOM_IOCTL_PERF_DISABLE_REQ \
|
|
_IO(QSEECOM_IOC_MAGIC, 12)
|
|
|
|
#define QSEECOM_IOCTL_LOAD_EXTERNAL_ELF_REQ \
|
|
_IOWR(QSEECOM_IOC_MAGIC, 13, struct qseecom_load_img_req)
|
|
|
|
#define QSEECOM_IOCTL_UNLOAD_EXTERNAL_ELF_REQ \
|
|
_IO(QSEECOM_IOC_MAGIC, 14)
|
|
|
|
#endif /* __QSEECOM_H_ */
|