Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fb508229 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "qseecom : Add support for fuse syscall"

parents e92b3387 d9858f6b
Loading
Loading
Loading
Loading
+25 −6
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
/*
 * QTI Secure Execution Environment Communicator (QSEECOM) driver
 *
 * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
 */

#define pr_fmt(fmt) "QSEECOM: %s: " fmt, __func__
@@ -877,6 +877,23 @@ static int qseecom_scm_call2(uint32_t svc_id, uint32_t tz_cmd_id,
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;
		}
		case QSEOS_DIAG_FUSE_REQ_CMD:
		case QSEOS_DIAG_FUSE_REQ_RSP_CMD: {
			struct qseecom_client_send_fsm_diag_req *req;

			smc_id = TZ_SECBOOT_GET_FUSE_INFO;
			desc.arginfo = TZ_SECBOOT_GET_FUSE_INFO_PARAM_ID;

			req = (struct qseecom_client_send_fsm_diag_req *) req_buf;
			desc.args[0] = req->req_ptr;
			desc.args[1] = req->req_len;
			desc.args[2] = req->rsp_ptr;
			desc.args[3] = req->rsp_len;
			__qseecom_reentrancy_check_if_no_app_blocked(smc_id);
			ret = __qseecom_scm_call2_locked(smc_id, &desc);
			break;

		}
		case QSEOS_GENERATE_KEY: {
			u32 tzbuflen = PAGE_ALIGN(sizeof
				(struct qseecom_key_generate_ireq) -
@@ -3309,7 +3326,7 @@ static int __qseecom_process_rpmb_svc_cmd(struct qseecom_dev_handle *data_ptr,
static int __qseecom_process_fsm_key_svc_cmd(
		struct qseecom_dev_handle *data_ptr,
		struct qseecom_send_svc_cmd_req *req_ptr,
		struct qseecom_client_send_fsm_key_req *send_svc_ireq_ptr)
		struct qseecom_client_send_fsm_diag_req *send_svc_ireq_ptr)
{
	int ret = 0;
	uint32_t reqd_len_sb_in = 0;
@@ -3327,7 +3344,6 @@ static int __qseecom_process_fsm_key_svc_cmd(
				reqd_len_sb_in, data_ptr->client.sb_length);
		return -ENOMEM;
	}

	send_svc_ireq_ptr->qsee_cmd_id = req_ptr->cmd_id;
	send_svc_ireq_ptr->req_len = req_ptr->cmd_req_len;
	send_svc_ireq_ptr->rsp_ptr = (uint32_t)(__qseecom_uvirt_to_kphys(
@@ -3431,7 +3447,7 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data,
{
	int ret = 0;
	struct qseecom_client_send_service_ireq send_svc_ireq;
	struct qseecom_client_send_fsm_key_req send_fsm_key_svc_ireq;
	struct qseecom_client_send_fsm_diag_req send_fsm_diag_svc_ireq;
	struct qseecom_command_scm_resp resp;
	struct qseecom_send_svc_cmd_req req;
	void   *send_req_ptr;
@@ -3469,8 +3485,11 @@ static int qseecom_send_service_cmd(struct qseecom_dev_handle *data,
	case QSEOS_FSM_OEM_FUSE_READ_ROW:
	case QSEOS_FSM_ENCFS_REQ_CMD:
	case QSEOS_FSM_ENCFS_REQ_RSP_CMD:
		send_req_ptr = &send_fsm_key_svc_ireq;
		req_buf_size = sizeof(send_fsm_key_svc_ireq);
	case QSEOS_DIAG_FUSE_REQ_CMD:
	case QSEOS_DIAG_FUSE_REQ_RSP_CMD:

		send_req_ptr = &send_fsm_diag_svc_ireq;
		req_buf_size = sizeof(send_fsm_diag_svc_ireq);
		if (__qseecom_process_fsm_key_svc_cmd(data, &req,
				send_req_ptr))
			return -EINVAL;
+15 −3
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2013-2020, The Linux Foundation. All rights reserved.
 * Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.
 */

#ifndef __QSEECOMI_H_
@@ -71,7 +71,8 @@ enum qseecom_qceos_cmd_id {
	QSEOS_FSM_OEM_FUSE_READ_ROW = 0x302,
	QSEOS_FSM_ENCFS_REQ_CMD = 0x403,
	QSEOS_FSM_ENCFS_REQ_RSP_CMD = 0x404,

	QSEOS_DIAG_FUSE_REQ_CMD = 0x501,
	QSEOS_DIAG_FUSE_REQ_RSP_CMD = 0x502,
	QSEOS_CMD_MAX     = 0xEFFFFFFF
};

@@ -321,7 +322,7 @@ struct qseecom_qteec_64bit_ireq {
	uint32_t    sglistinfo_len;
} __attribute__((__packed__));

struct qseecom_client_send_fsm_key_req {
struct qseecom_client_send_fsm_diag_req {
	uint32_t qsee_cmd_id;
	uint32_t req_ptr;
	uint32_t req_len;
@@ -341,6 +342,7 @@ struct qseecom_continue_blocked_request_ireq {
#define TZ_SVC_EXTERNAL                  3     /* External image loading */
#define TZ_SVC_RPMB                      4     /* RPMB */
#define TZ_SVC_KEYSTORE                  5     /* Keystore management */
#define TZ_SVC_FUSE                      8     /* Fuse services */
#define TZ_SVC_ES                        16    /* Enterprise Security */
#define TZ_SVC_MDTP                      18    /* Mobile Device Theft */

@@ -503,6 +505,16 @@ struct qseecom_continue_blocked_request_ireq {
#define TZ_OS_UNLOAD_SERVICES_IMAGE_ID_PARAM_ID \
	TZ_SYSCALL_CREATE_PARAM_ID_0

#define TZ_SECBOOT_GET_FUSE_INFO \
	TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_SIP, TZ_SVC_FUSE, 0x09)

#define TZ_SECBOOT_GET_FUSE_INFO_PARAM_ID \
	TZ_SYSCALL_CREATE_PARAM_ID_4(\
	TZ_SYSCALL_PARAM_TYPE_BUF_RO, \
	TZ_SYSCALL_PARAM_TYPE_VAL, \
	TZ_SYSCALL_PARAM_TYPE_BUF_RW, \
	TZ_SYSCALL_PARAM_TYPE_VAL)

#define TZ_OS_REGISTER_LISTENER_ID \
	TZ_SYSCALL_CREATE_SMC_ID(TZ_OWNER_QSEE_OS, TZ_SVC_LISTENER, 0x01)