qseecom: support listener request for smcinvoke
Add a new kernel API to support listener service for smcinvoke. Change-Id: Ifeed957b99d2becd986629f60e145d6fdb717244 Signed-off-by: Zhen Kong <zkong@codeaurora.org>
This commit is contained in:
parent
9c8924dbaa
commit
c9153d1ae8
2 changed files with 36 additions and 0 deletions
|
@ -4361,6 +4361,40 @@ int qseecom_set_bandwidth(struct qseecom_handle *handle, bool high)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(qseecom_set_bandwidth);
|
EXPORT_SYMBOL(qseecom_set_bandwidth);
|
||||||
|
|
||||||
|
int qseecom_process_listener_from_smcinvoke(struct scm_desc *desc)
|
||||||
|
{
|
||||||
|
struct qseecom_registered_app_list dummy_app_entry = { {0} };
|
||||||
|
struct qseecom_dev_handle dummy_private_data = {0};
|
||||||
|
struct qseecom_command_scm_resp resp;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (!desc) {
|
||||||
|
pr_err("desc is NULL\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.result = desc->ret[0]; /*req_cmd*/
|
||||||
|
resp.resp_type = desc->ret[1]; /*app_id*/
|
||||||
|
resp.data = desc->ret[2]; /*listener_id*/
|
||||||
|
|
||||||
|
dummy_private_data.client.app_id = desc->ret[1];
|
||||||
|
dummy_app_entry.app_id = desc->ret[1];
|
||||||
|
|
||||||
|
mutex_lock(&app_access_lock);
|
||||||
|
ret = __qseecom_process_reentrancy(&resp, &dummy_app_entry,
|
||||||
|
&dummy_private_data);
|
||||||
|
mutex_unlock(&app_access_lock);
|
||||||
|
if (ret)
|
||||||
|
pr_err("Failed to req cmd %d lsnr %d on app %d, ret = %d\n",
|
||||||
|
(int)desc->ret[0], (int)desc->ret[2],
|
||||||
|
(int)desc->ret[1], ret);
|
||||||
|
desc->ret[0] = resp.result;
|
||||||
|
desc->ret[1] = resp.resp_type;
|
||||||
|
desc->ret[2] = resp.data;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(qseecom_process_listener_from_smcinvoke);
|
||||||
|
|
||||||
static int qseecom_send_resp(void)
|
static int qseecom_send_resp(void)
|
||||||
{
|
{
|
||||||
qseecom.send_resp_flag = 1;
|
qseecom.send_resp_flag = 1;
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#define __QSEECOM_KERNEL_H_
|
#define __QSEECOM_KERNEL_H_
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
#include <soc/qcom/scm.h>
|
||||||
|
|
||||||
#define QSEECOM_ALIGN_SIZE 0x40
|
#define QSEECOM_ALIGN_SIZE 0x40
|
||||||
#define QSEECOM_ALIGN_MASK (QSEECOM_ALIGN_SIZE - 1)
|
#define QSEECOM_ALIGN_MASK (QSEECOM_ALIGN_SIZE - 1)
|
||||||
|
@ -38,5 +39,6 @@ int qseecom_shutdown_app(struct qseecom_handle **handle);
|
||||||
int qseecom_send_command(struct qseecom_handle *handle, void *send_buf,
|
int qseecom_send_command(struct qseecom_handle *handle, void *send_buf,
|
||||||
uint32_t sbuf_len, void *resp_buf, uint32_t rbuf_len);
|
uint32_t sbuf_len, void *resp_buf, uint32_t rbuf_len);
|
||||||
int qseecom_set_bandwidth(struct qseecom_handle *handle, bool high);
|
int qseecom_set_bandwidth(struct qseecom_handle *handle, bool high);
|
||||||
|
int qseecom_process_listener_from_smcinvoke(struct scm_desc *desc);
|
||||||
|
|
||||||
#endif /* __QSEECOM_KERNEL_H_ */
|
#endif /* __QSEECOM_KERNEL_H_ */
|
||||||
|
|
Loading…
Add table
Reference in a new issue