Fix PowerPC support
[bertos.git] / bertos / kern / proc.c
index 0d17074119378b1da2526001168f72b6018cd160..32e3afe8a2f50b317af65291fa9f0d86fcc3f7b2 100644 (file)
@@ -27,7 +27,7 @@
  * the GNU General Public License.
  *
  * Copyright 2001,2004 Develer S.r.l. (http://www.develer.com/)
- * Copyright 1999,2000,2001 Bernardo Innocenti <bernie@develer.com>
+ * Copyright 1999,2000,2001 Bernie Innocenti <bernie@codewiz.org>
  *
  * -->
  *
@@ -36,7 +36,7 @@
  *
  * \version $Id$
  *
- * \author Bernardo Innocenti <bernie@develer.com>
+ * \author Bernie Innocenti <bernie@codewiz.org>
  * \author Stefano Fedrigo <aleph@develer.com>
  */
 
@@ -44,7 +44,7 @@
 #include "proc_p.h"
 #include "proc.h"
 
-#include <cfg/cfg_arch.h>  /* ARCH_EMUL */
+#include "cfg/cfg_arch.h"  /* ARCH_EMUL */
 #include <cfg/debug.h>
 #include <cfg/module.h>
 #include <cfg/macros.h>       /* ABS() */
@@ -141,30 +141,30 @@ void proc_init(void)
  * \return Process structure of new created process
  *         if successful, NULL otherwise.
  */
-struct Process *proc_new_with_name(UNUSED(const char *, name), void (*entry)(void), iptr_t data, size_t stacksize, cpustack_t *stack_base)
+struct Process *proc_new_with_name(UNUSED(const char *, name), void (*entry)(void), iptr_t data, size_t stack_size, cpustack_t *stack_base)
 {
        Process *proc;
        size_t i;
-       size_t proc_size_words = ROUND2(sizeof(Process), sizeof(cpustack_t)) / sizeof(cpustack_t);
+       const size_t PROC_SIZE_WORDS = ROUND2(sizeof(Process), sizeof(cpustack_t)) / sizeof(cpustack_t);
 #if CONFIG_KERN_HEAP
        bool free_stack = false;
 #endif
 
 #if (ARCH & ARCH_EMUL)
        /* Ignore stack provided by caller and use the large enough default instead. */
-       stack_base = (cpustack_t *)LIST_HEAD(&StackFreeList);
-       REMOVE(LIST_HEAD(&StackFreeList));
-       stacksize = CONFIG_PROC_DEFSTACKSIZE;
+       stack_base = (cpustack_t *)list_remHead(&StackFreeList);
+
+       stack_size = CONFIG_PROC_DEFSTACKSIZE;
 #elif CONFIG_KERN_HEAP
        /* Did the caller provide a stack for us? */
        if (!stack_base)
        {
                /* Did the caller specify the desired stack size? */
-               if (!stacksize)
-                       stacksize = CONFIG_PROC_DEFSTACKSIZE + sizeof(Process);
+               if (!stack_size)
+                       stack_size = CONFIG_PROC_DEFSTACKSIZE + sizeof(Process);
 
                /* Allocate stack dinamically */
-               if (!(stack_base = heap_alloc(stacksize)))
+               if (!(stack_base = heap_alloc(stack_size)))
                        return NULL;
 
                free_stack = true;
@@ -172,25 +172,25 @@ struct Process *proc_new_with_name(UNUSED(const char *, name), void (*entry)(voi
 #else
        /* Stack must have been provided by the user */
        ASSERT(stack_base);
-       ASSERT(stacksize);
+       ASSERT(stack_size);
 #endif
 
 #if CONFIG_KERN_MONITOR
        /* Fill-in the stack with a special marker to help debugging */
-       memset(stack_base, CONFIG_KERN_STACKFILLCODE, stacksize / sizeof(cpustack_t));
+       memset(stack_base, CONFIG_KERN_STACKFILLCODE, stack_size / sizeof(cpustack_t));
 #endif
 
        /* Initialize the process control block */
        if (CPU_STACK_GROWS_UPWARD)
        {
                proc = (Process*)stack_base;
-               proc->stack = stack_base + proc_size_words;
+               proc->stack = stack_base + PROC_SIZE_WORDS;
                if (CPU_SP_ON_EMPTY_SLOT)
                        proc->stack++;
        }
        else
        {
-               proc = (Process*)(stack_base + stacksize / sizeof(cpustack_t) - proc_size_words);
+               proc = (Process*)(stack_base + stack_size / sizeof(cpustack_t) - PROC_SIZE_WORDS);
                proc->stack = (cpustack_t*)proc;
                if (CPU_SP_ON_EMPTY_SLOT)
                        proc->stack--;
@@ -199,11 +199,13 @@ struct Process *proc_new_with_name(UNUSED(const char *, name), void (*entry)(voi
        proc_init_struct(proc);
        proc->user_data = data;
 
-#if CONFIG_KERN_HEAP
+#if CONFIG_KERN_HEAP | CONFIG_KERN_MONITOR | (ARCH & ARCH_EMUL)
        proc->stack_base = stack_base;
        proc->stack_size = stack_size;
+       #if CONFIG_KERN_HEAP
        if (free_stack)
                proc->flags |= PF_FREESTACK;
+       #endif
 #endif
 
        /* Initialize process stack frame */
@@ -218,7 +220,7 @@ struct Process *proc_new_with_name(UNUSED(const char *, name), void (*entry)(voi
        ATOMIC(SCHED_ENQUEUE(proc));
 
 #if CONFIG_KERN_MONITOR
-       monitor_add(proc, name, stack_base, stacksize);
+       monitor_add(proc, name);
 #endif
 
        return proc;