summaryrefslogtreecommitdiffstats
path: root/bsps/shared/start
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-13 09:14:56 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-16 14:56:10 +0200
commit0a09ac58ac2844792dd496aa3c35ce692779d9bd (patch)
treedc866f31ea41b959ac3f91fe5899cfbb48b1411c /bsps/shared/start
parentbsps: Move bsp-uboot-board-info.c to bsps (diff)
downloadrtems-0a09ac58ac2844792dd496aa3c35ce692779d9bd.tar.bz2
bsps: Move stackalloc.c to bsps
This patch is a part of the BSP source reorganization. Update #3285.
Diffstat (limited to 'bsps/shared/start')
-rw-r--r--bsps/shared/start/stackalloc.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/bsps/shared/start/stackalloc.c b/bsps/shared/start/stackalloc.c
new file mode 100644
index 0000000000..3e3b83e95e
--- /dev/null
+++ b/bsps/shared/start/stackalloc.c
@@ -0,0 +1,65 @@
+/**
+ * @file
+ *
+ * @ingroup bsp_shared
+ *
+ * @brief Stack initialization, allocation and free functions.
+ */
+
+/*
+ * Copyright (c) 2009-2013 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Obere Lagerstr. 30
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#include <bsp/stackalloc.h>
+
+#include <rtems.h>
+#include <rtems/score/heapimpl.h>
+#include <rtems/score/wkspace.h>
+
+#include <bsp/linker-symbols.h>
+
+static Heap_Control bsp_stack_heap;
+
+void bsp_stack_allocate_init(size_t stack_space_size)
+{
+ _Heap_Initialize(
+ &bsp_stack_heap,
+ bsp_section_stack_begin,
+ (uintptr_t) bsp_section_stack_size,
+ CPU_STACK_ALIGNMENT
+ );
+}
+
+void *bsp_stack_allocate(size_t size)
+{
+ void *stack = NULL;
+
+ if (bsp_stack_heap.area_begin != 0) {
+ stack = _Heap_Allocate(&bsp_stack_heap, size);
+ }
+
+ if (stack == NULL) {
+ stack = _Workspace_Allocate(size);
+ }
+
+ return stack;
+}
+
+void bsp_stack_free(void *stack)
+{
+ bool ok = _Heap_Free(&bsp_stack_heap, stack);
+
+ if (!ok) {
+ _Workspace_Free(stack);
+ }
+}