Open/Close TA sessions, send commands/events to TAs
authorVarun Wadekar <vwadekar@nvidia.com>
Fri, 13 Mar 2015 09:48:20 +0000 (15:18 +0530)
committerVarun Wadekar <vwadekar@nvidia.com>
Tue, 31 Mar 2015 04:41:17 +0000 (10:11 +0530)
This patch adds support to open/close secure sessions with Trusted
Apps and later send commands/events. Modify TLK_NUM_FID to indicate
the total number of FIDs available to the NS world.

Change-Id: I3f1153dfa5510bd44fc25f1fee85cae475b1abf1
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
include/bl32/payloads/tlk.h
services/spd/tlkd/tlkd_main.c

index 65fd33390e765bf07e519784b08e6830ff849180..910f50fdfd0ea17e69fdd3372399536ef842fffd 100644 (file)
@@ -35,6 +35,7 @@
  * Generate function IDs for the Trusted OS/Apps
  */
 #define TLK_TOS_STD_FID(fid)   ((fid) | 0x72000000 | (0 << 31))
+#define TLK_TA_STD_FID(fid)    ((fid) | 0x70000000 | (0 << 31))
 
 /*
  * Trusted OS specific function IDs
 #define TLK_VA_TRANSLATE       (0x32000004 | (1 << 31))
 #define TLK_FID_SHARED_MEMBUF  (0x32000005 | (1 << 31))
 
+/*
+ * Trusted Application specific function IDs
+ */
+#define TLK_OPEN_TA_SESSION    TLK_TA_STD_FID(0x1)
+#define TLK_CLOSE_TA_SESSION   TLK_TA_STD_FID(0x2)
+#define TLK_TA_LAUNCH_OP       TLK_TA_STD_FID(0x3)
+#define TLK_TA_SEND_EVENT      TLK_TA_STD_FID(0x4)
+
 /*
  * Total number of function IDs implemented for services offered to NS clients.
  */
-#define TLK_NUM_FID            0
+#define TLK_NUM_FID            7
 
 /* TLK implementation version numbers */
 #define TLK_VERSION_MAJOR      0x0 /* Major version */
index bea4c489259ab29b6069025b2fef83feb4381895..c22203ba804041d101e28036bb48216ef161829a 100644 (file)
@@ -193,6 +193,10 @@ uint64_t tlkd_smc_handler(uint32_t smc_fid,
        /* Passing a NULL context is a critical programming error */
        assert(handle);
 
+       /* These SMCs are only supported by CPU0 */
+       if ((read_mpidr() & MPIDR_CPU_MASK) != 0)
+               SMC_RET1(handle, SMC_UNK);
+
        /* Determine which security state this SMC originated from */
        ns = is_caller_non_secure(flags);
 
@@ -267,9 +271,16 @@ uint64_t tlkd_smc_handler(uint32_t smc_fid,
         * b. register shared memory with the SP for passing args
         *    required for maintaining sessions with the Trusted
         *    Applications.
+        * c. open/close sessions
+        * d. issue commands to the Trusted Apps
         */
        case TLK_REGISTER_LOGBUF:
        case TLK_REGISTER_REQBUF:
+       case TLK_OPEN_TA_SESSION:
+       case TLK_CLOSE_TA_SESSION:
+       case TLK_TA_LAUNCH_OP:
+       case TLK_TA_SEND_EVENT:
+
                if (!ns || !tlk_args_results_buf)
                        SMC_RET1(handle, SMC_UNK);
 
@@ -442,3 +453,25 @@ DECLARE_RT_SVC(
        NULL,
        tlkd_smc_handler
 );
+
+/* Define a SPD runtime service descriptor for fast SMC calls */
+DECLARE_RT_SVC(
+       tlkd_tap_fast,
+
+       OEN_TAP_START,
+       OEN_TAP_END,
+       SMC_TYPE_FAST,
+       NULL,
+       tlkd_smc_handler
+);
+
+/* Define a SPD runtime service descriptor for standard SMC calls */
+DECLARE_RT_SVC(
+       tlkd_tap_std,
+
+       OEN_TAP_START,
+       OEN_TAP_END,
+       SMC_TYPE_STD,
+       NULL,
+       tlkd_smc_handler
+);