tlk: 6/19 update
[3rdparty/ote_partner/tlk.git] / include / kernel / task.h
index 0b6a879..04cc2ce 100644 (file)
@@ -82,22 +82,24 @@ typedef struct
        u_int    map_io_mem_cnt;
        u_int    restrict_access;
        u_int    manifest_exists;
-       u_int    install_priv;
-       u_int    immutable;
+       u_int    authorizations;
+       u_int    initial_state;
        u_int    config_entry_cnt;
        u_int    *config_blob;
 } task_props_t;
 
-/* task lifecycle states */
+/* task lifecycle states
+ */
 typedef enum {
-       TASK_STATE_UNKNOWN,
+       TASK_STATE_UNKNOWN = 0,
        TASK_STATE_INIT,
        TASK_STATE_ACTIVE,
+       TASK_STATE_BLOCKED,
        TASK_STATE_TERMINATED
 } task_state_t;
 
 typedef enum {
-       TASK_TYPE_UNKNOWN,
+       TASK_TYPE_UNKNOWN = 0,
        TASK_TYPE_STATIC,
        TASK_TYPE_LOADED
 } task_type_t;
@@ -139,8 +141,10 @@ typedef struct task
        task_state_t task_state;
        task_type_t task_type;
        u_int task_index;
-       char task_name[ OTE_TASK_NAME_MAX_LENGTH ];
-       unsigned char task_private_data[ OTE_TASK_PRIVATE_DATA_LENGTH ];
+       char task_name[OTE_TASK_NAME_MAX_LENGTH];
+       unsigned char task_private_data[OTE_TASK_PRIVATE_DATA_LENGTH];
+       uint32_t task_size;
+       struct list_node node;
 } task_t;
 
 void task_init();
@@ -165,6 +169,16 @@ task_t *task_find_task_by_uuid(te_service_id_t *uuid);
  */
 task_t *task_find_task_by_index(uint32_t index);
 
+/*! Return a pointer to const char C-string PREFIXtasknameSUFFIX if task has a name,
+ * otherwise return pointer to "".
+ *
+ * PREFIX and SUFFIX may be NULL (treated as empty strings).
+ *
+ * BUF must be at least length(PREFIX)+OTE_TASK_NAME_MAX_LENGTH+length(SUFFIX), buffer length in BUFLEN.
+ */
+const char *task_get_name_str(const task_t *task, const char *prefix, const char *suffix,
+                             char *buf, uint32_t buflen);
+
 /*! Log the uuid of TASKP at dprintf LEVEL with optional PREFIX string.
  *
  * \param LEVEL defines dprintf() level to conditionally print at.
@@ -174,37 +188,29 @@ task_t *task_find_task_by_index(uint32_t index);
 void task_print_uuid(uint32_t level, const char *prefix, const task_t *taskp);
 
 status_t task_prepare(char *task_addr, u_int task_size, task_t *taskp,
-                     Elf32_Shdr **bss_pad_shdr_p);
+                     Elf32_Shdr **bss_pad_shdr_p, task_type_t task_type);
 
-status_t task_init_one_task(task_t *task, u_int task_type);
+status_t task_init_one_task(task_t *task);
 
 /*! Atomically commit task (and set it's index) to the known task list
- * unless there is an error. TASK_P value swapped to track the registered
- * task header (old referenced task object is copied to task list and
- * then cleared).
+ * unless there is an error.
  *
  * UUID duplicates are atomically checked here.
  *
- * \param task_p[in/out] input task object pointer is atomically swapped to a
- *                      registered task object pointer.
+ * \param task_p[in] task object pointer.
  *
  * \return NO_ERROR on success and on failure:
  *        ERR_TOO_MANY_TASKS if not more tasks can be installed (out of memory)
  *        ERR_ALREADY_EXISTS if a task with matching uuid already exists
  *        ERR_INVALID_ARGS if parameters are invalid.
  */
-status_t task_register (task_t **task_p);
+status_t task_register(task_t **task_p);
 
-/*! Get a const reference to start of task list (task 0 object). */
-const task_t *task_get_list(void);
+/*! return the number of currently existing active tasks */
+u_int task_get_active_count(void);
 
-/*! return the number of registered tasks */
+/*! return the number of registered tasks since boot */
 u_int task_get_count(void);
 
-/*! Return the max number of tasks that can be registered to the system.
- * The actual number may be smaller depending on memory size vs task size.
- */
-u_int task_get_max_count(void);
-
 #endif /* ASSEMBLY */
 #endif /* __KERNEL_TASK_H */