diff --git a/arch/arm/defs.objs b/arch/arm/defs.objs index f572d660a91..c5c9b9919a5 100644 --- a/arch/arm/defs.objs +++ b/arch/arm/defs.objs @@ -50,13 +50,8 @@ nkernel_SRC_NANOKERNEL_y = $(strip \ ${vBASE}/misc/printk.c \ ) -nkernel_SRC_MICROKERNEL_y = $(strip \ - ${vBASE}/kernel/nanokernel/task/start_task.c \ -) - nkernel_SRC += $(strip \ ${nkernel_SRC_NANOKERNEL_${CONFIG_NANOKERNEL}} \ - ${nkernel_SRC_MICROKERNEL_${CONFIG_MICROKERNEL}} \ ) ifeq ($(CONFIG_ENHANCED_SECURITY),y) diff --git a/arch/x86/defs.objs b/arch/x86/defs.objs index 482412968d7..f25f8a9dabb 100644 --- a/arch/x86/defs.objs +++ b/arch/x86/defs.objs @@ -45,7 +45,6 @@ nkernel_PATH = $(strip \ nkernel_PATH_y = $(strip \ ${vBASE}/arch/${vARCH}/task \ - ${vBASE}/kernel/nanokernel/task \ ) nkernel_PATH += ${nkernel_PATH_${CONFIG_MICROKERNEL}} diff --git a/kernel/microkernel/k_task.c b/kernel/microkernel/k_task.c index 6dc50f1444e..3c27576a45e 100644 --- a/kernel/microkernel/k_task.c +++ b/kernel/microkernel/k_task.c @@ -40,7 +40,7 @@ #include #include #include - +#include /******************************************************************************* @@ -181,6 +181,54 @@ void set_state_bit( #endif } +/******************************************************************************* +* +* start_task - initialize and start a task +* +* RETURNS: N/A +*/ + +void start_task(struct k_proc *X, /* ptr to task control block */ + void (*func)(void) /* entry point for task */ + ) +{ + unsigned int contextOptions; + void *pNewContext; + +/* Note: the field X->worksize now represents the task size in bytes */ + +#ifdef CONFIG_INIT_STACKS + k_memset(X->workspace, 0xaa, X->worksize); +#endif + + contextOptions = 0; + _START_TASK_ARCH(X, &contextOptions); + + /* + * The 'func' argument to _NewContext() represents the entry point of + * the + * kernel task. The 'parameter1', 'parameter2', & 'parameter3' + * arguments + * are not applicable to such tasks. A 'priority' of -1 indicates that + * the context is a task, rather than a fiber. + */ + + pNewContext = (tCCS *)_NewContext((char *)X->workspace, /* pStackMem */ + X->worksize, /* stackSize */ + (_ContextEntry)func, /* pEntry */ + (void *)0, /* parameter1 */ + (void *)0, /* parameter2 */ + (void *)0, /* parameter3 */ + -1, /* priority */ + contextOptions /* options */ + ); + + X->workspace = (char *)pNewContext; + X->fabort = NULL; + + reset_state_bit(X, TF_STOP | TF_TERM); +} + /******************************************************************************* * * abort_task - abort a task diff --git a/kernel/nanokernel/task/start_task.c b/kernel/nanokernel/task/start_task.c deleted file mode 100644 index a34dea5e592..00000000000 --- a/kernel/nanokernel/task/start_task.c +++ /dev/null @@ -1,91 +0,0 @@ -/* start_task.c - arch-agnostic nanokernel APIs to start a task */ - -/* - * Copyright (c) 2010-2014 Wind River Systems, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1) Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3) Neither the name of Wind River Systems nor the names of its contributors - * may be used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/* -DESCRIPTION -This module contains the single primitive 'start_task' which is utilized -by the microkernel to "start a task". -*/ - -#ifdef CONFIG_MICROKERNEL - -#include - -/******************************************************************************* -* -* start_task - initialize and start a task -* -* RETURNS: N/A -*/ - -void start_task(struct k_proc *X, /* ptr to task control block */ - void (*func)(void) /* entry point for task */ - ) -{ - unsigned int contextOptions; - void *pNewContext; - -/* Note: the field X->worksize now represents the task size in bytes */ - -#ifdef CONFIG_INIT_STACKS - k_memset(X->workspace, 0xaa, X->worksize); -#endif - - contextOptions = 0; - _START_TASK_ARCH(X, &contextOptions); - - /* - * The 'func' argument to _NewContext() represents the entry point of - * the - * kernel task. The 'parameter1', 'parameter2', & 'parameter3' - * arguments - * are not applicable to such tasks. A 'priority' of -1 indicates that - * the context is a task, rather than a fiber. - */ - - pNewContext = (tCCS *)_NewContext((char *)X->workspace, /* pStackMem */ - X->worksize, /* stackSize */ - (_ContextEntry)func, /* pEntry */ - (void *)0, /* parameter1 */ - (void *)0, /* parameter2 */ - (void *)0, /* parameter3 */ - -1, /* priority */ - contextOptions /* options */ - ); - - X->workspace = (char *)pNewContext; - X->fabort = NULL; - - reset_state_bit(X, TF_STOP | TF_TERM); -} - -#endif /* CONFIG_MICROKERNEL */