aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSaravana Kannan <skannan@codeaurora.org>2014-08-04 18:31:47 -0700
committerSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2014-09-30 18:04:42 +0100
commit3c8c3bed42d109628a165cf060b84cbb212b7146 (patch)
tree6e92e253dcd2b11cf288ff7f3d838fa621b4d4ae
parent78fa82ebb2daa132eb646a32220f6e7700aec2de (diff)
msm: scm: Add API to query for service/command availability.
Some drivers may need to query the secure environment about the availability of a particular service/command. Add support for this. Signed-off-by: Saravana Kannan <skannan@codeaurora.org> [sboyd@codeaurora.org: Add some commit text] Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
-rw-r--r--arch/arm/mach-qcom/scm.c18
-rw-r--r--arch/arm/mach-qcom/scm.h2
2 files changed, 19 insertions, 1 deletions
diff --git a/arch/arm/mach-qcom/scm.c b/arch/arm/mach-qcom/scm.c
index a05cad3fa1c5a..e80571f57ca41 100644
--- a/arch/arm/mach-qcom/scm.c
+++ b/arch/arm/mach-qcom/scm.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
+/* Copyright (c) 2010-2014, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -394,3 +394,19 @@ u32 scm_get_version(void)
return version;
}
EXPORT_SYMBOL(scm_get_version);
+
+#define IS_CALL_AVAIL_CMD 1
+int scm_is_call_available(u32 svc_id, u32 cmd_id)
+{
+ int ret;
+ u32 svc_cmd = (svc_id << 10) | cmd_id;
+ u32 ret_val = 0;
+
+ ret = scm_call(SCM_SVC_INFO, IS_CALL_AVAIL_CMD, &svc_cmd,
+ sizeof(svc_cmd), &ret_val, sizeof(ret_val));
+ if (ret)
+ return ret;
+
+ return ret_val;
+}
+EXPORT_SYMBOL(scm_is_call_available);
diff --git a/arch/arm/mach-qcom/scm.h b/arch/arm/mach-qcom/scm.h
index 1f0f0180e767e..99222129d9e38 100644
--- a/arch/arm/mach-qcom/scm.h
+++ b/arch/arm/mach-qcom/scm.h
@@ -14,6 +14,7 @@
#define SCM_SVC_BOOT 0x1
#define SCM_SVC_PIL 0x2
+#define SCM_SVC_INFO 0x6
extern int scm_call(u32 svc_id, u32 cmd_id, const void *cmd_buf, size_t cmd_len,
void *resp_buf, size_t resp_len);
@@ -24,5 +25,6 @@ extern s32 scm_call_atomic2(u32 svc, u32 cmd, u32 arg1, u32 arg2);
#define SCM_VERSION(major, minor) (((major) << 16) | ((minor) & 0xFF))
extern u32 scm_get_version(void);
+extern int scm_is_call_available(u32 svc_id, u32 cmd_id);
#endif