From 4a56570f9c6227e795241a89167d9b891f09f2ca Mon Sep 17 00:00:00 2001 From: Allan Stephens Date: Fri, 15 May 2015 14:38:08 -0400 Subject: [PATCH] Eliminate public use of non-public task structure Revises several trivial task APIs to avoid exposure of task object internal fields. Change-Id: Iefa8028042dff1abd1f447eb1cc1ee49f0c2eda5 Signed-off-by: Allan Stephens --- include/microkernel/task.h | 14 ++++----- kernel/microkernel/k_task.c | 60 +++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 7 deletions(-) diff --git a/include/microkernel/task.h b/include/microkernel/task.h index eb7a1957783..dd83774641b 100644 --- a/include/microkernel/task.h +++ b/include/microkernel/task.h @@ -37,8 +37,6 @@ extern "C" { #endif -extern struct k_proc *_k_current_task; - /* * The following task groups are reserved for system use. * SysGen automatically generates corresponding TASKGROUPs with reserved @@ -85,16 +83,18 @@ extern int task_offload_to_fiber(int (*)(), void *); extern void KS_TaskSetSwitchCallBack(taskswitchcallbackfunc func); #endif -#define task_id_get() (_k_current_task->Ident) -#define task_priority_get() (_k_current_task->Prio) +extern ktask_t task_id_get(); +extern kpriority_t task_priority_get(); + #define task_start(t) _task_ioctl(t, TASK_START) #define task_abort(t) _task_ioctl(t, TASK_ABORT) #define task_suspend(t) _task_ioctl(t, TASK_SUSPEND) #define task_resume(t) _task_ioctl(t, TASK_RESUME) -#define task_group_mask_get() (_k_current_task->Group) -#define task_group_join(g) (_k_current_task->Group |= g) -#define task_group_leave(g) (_k_current_task->Group &= ~g) +extern uint32_t task_group_mask_get(); +extern void task_group_join(uint32_t groups); +extern void task_group_leave(uint32_t groups); + #define task_group_start(g) _task_group_ioctl(g, TASK_GROUP_START) #define task_group_abort(g) _task_group_ioctl(g, TASK_GROUP_ABORT) #define task_group_suspend(g) _task_group_ioctl(g, TASK_GROUP_SUSPEND) diff --git a/kernel/microkernel/k_task.c b/kernel/microkernel/k_task.c index c0356c387e0..17f7bdbffa5 100644 --- a/kernel/microkernel/k_task.c +++ b/kernel/microkernel/k_task.c @@ -42,6 +42,18 @@ #include +/******************************************************************************* +* +* task_id_get - get task identifer +* +* RETURNS: identifier for current task +*/ + +ktask_t task_id_get(void) +{ + return _k_current_task->Ident; +} + /******************************************************************************* * * reset_state_bit - reset the specified task state bits @@ -434,6 +446,54 @@ void _task_group_ioctl(ktask_group_t group, /* task group */ KERNEL_ENTRY(&A); } +/******************************************************************************* +* +* task_group_mask_get - get task groups for task +* +* RETURNS: task groups associated with current task +*/ + +kpriority_t task_group_mask_get(void) +{ + return _k_current_task->Group; +} + +/******************************************************************************* +* +* task_group_join - add task to task group(s) +* +* RETURNS: N/A +*/ + +void task_group_join(uint32_t groups) +{ + _k_current_task->Group |= groups; +} + +/******************************************************************************* +* +* task_group_leave - remove task from task group(s) +* +* RETURNS: N/A +*/ + +void task_group_leave(uint32_t groups) +{ + _k_current_task->Group &= ~groups; +} + +/******************************************************************************* +* +* task_priority_get - get task priority +* +* RETURNS: priority of current task +*/ + +kpriority_t task_priority_get(void) +{ + return _k_current_task->Prio; +} + /******************************************************************************* * * _k_task_priority_set - handle task set priority request