[FOSS_TLK][ote] Add ta event smc handler
Aaron Gamble [Thu, 18 Dec 2014 23:57:51 +0000 (15:57 -0800)]
This code is used to handle incoming ta events and schedule tasks
which have requested events.

Change-Id: If054b989457fec43616cc66acff3797c1232e478
Reviewed-on: http://git-master/r/715775
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Varun Wadekar <vwadekar@nvidia.com>
Tested-by: Varun Wadekar <vwadekar@nvidia.com>

include/ote_intf.h
kernel/ote_intf.c

index 362dac6..1fbcd73 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2013, NVIDIA CORPORATION. All rights reserved
+ * Copyright (c) 2012-2015, NVIDIA CORPORATION. All rights reserved
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
@@ -33,6 +33,8 @@ te_error_t te_handle_close_session(te_request_t *req, bool task_issued);
 te_error_t te_handle_launch_op(te_request_t *req, bool task_issued);
 void te_get_completed_cmd(te_request_t *req, bool task_issuea);
 
+te_error_t te_handle_ta_event(enum ta_event_id event);
+
 int te_handle_ta_message(uint32_t fd, void *msg, uint32_t msgsize, bool read);
 int te_get_current_ta_property(te_get_property_args_t *args);
 int te_get_current_client_property(te_get_property_args_t *args);
index 39bc440..a709012 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2014, NVIDIA CORPORATION. All rights reserved
+ * Copyright (c) 2012-2015, NVIDIA CORPORATION. All rights reserved
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
@@ -35,7 +35,7 @@
 
 #include <ote_intf.h>
 
-#include <service/ote_manifest.h>
+#include <lib/ote/ote_protocol.h>
 
 #define MAX_ARGS_PER_CMD       0x8
 
@@ -723,6 +723,19 @@ exit:
        return result;
 }
 
+te_error_t te_handle_ta_event(enum ta_event_id event)
+{
+       struct te_command cmd;
+
+       memset(&cmd, 0, sizeof(cmd));
+
+       cmd.msg.type = TA_EVENT;
+       cmd.msg.command_id = event;
+
+       /* Signal all tasks that have requested events.  */
+       return task_signal_ta_event(event, &cmd);
+}
+
 void te_intf_init(void)
 {
        /* initialize the session id list */
@@ -899,6 +912,13 @@ static int te_handle_command_message(struct te_command *cmd, void *msg, bool rea
                        if (ep->params_size)
                                cmd->returning_cmd = 1;
                        break;
+               case TA_EVENT:
+                       ep->command_id = cmd->msg.command_id;
+
+                       /* events do not write back a result.
+                        * clear current arg.  */
+                       current_thread->arg = NULL;
+                       return sizeof(*ep);
                default:
                        /* unknown command */
                        return -EINVAL;