summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/sparc/shared/startup
diff options
context:
space:
mode:
authorDaniel Ramirez <javamonn@gmail.com>2013-12-03 18:30:39 +1100
committerGedare Bloom <gedare@rtems.org>2013-12-03 09:12:31 -0500
commitb9287a15aaabbfcc19994bc9751a07b114a17a5a (patch)
tree3cf2e0b5405b5b746f6a7bd06ff1a77288c108f4 /c/src/lib/libbsp/sparc/shared/startup
parentarm: Clear reservations (diff)
downloadrtems-b9287a15aaabbfcc19994bc9751a07b114a17a5a.tar.bz2
libbsp: refactored sparc/shared/bspgetworkarea.c to sparc/shared/startup/bspgetworkarea.c
* refactored sparc/shared/bspgetworkarea.c to sparc/shared/startup/bspgetworkarea.c
Diffstat (limited to 'c/src/lib/libbsp/sparc/shared/startup')
-rw-r--r--c/src/lib/libbsp/sparc/shared/startup/bspgetworkarea.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/sparc/shared/startup/bspgetworkarea.c b/c/src/lib/libbsp/sparc/shared/startup/bspgetworkarea.c
new file mode 100644
index 0000000000..d799800d61
--- /dev/null
+++ b/c/src/lib/libbsp/sparc/shared/startup/bspgetworkarea.c
@@ -0,0 +1,67 @@
+/*
+ * This set of routines are the BSP specific initialization
+ * support routines.
+ *
+ * COPYRIGHT (c) 1989-2008.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.com/license/LICENSE.
+ */
+
+/* #define BSP_GET_WORK_AREA_DEBUG */
+#include <bsp.h>
+#include <bsp/bootcard.h>
+#ifdef BSP_GET_WORK_AREA_DEBUG
+ #include <rtems/bspIo.h>
+#endif
+
+/* Tells us where to put the workspace in case remote debugger is present. */
+extern uint32_t rdb_start;
+
+/* Must be aligned to 8, _end is aligned to 8 */
+unsigned int early_mem = (unsigned int)&end;
+
+/*
+ * This method returns the base address and size of the area which
+ * is to be allocated between the RTEMS Workspace and the C Program
+ * Heap.
+ */
+void bsp_work_area_initialize(void)
+{
+ /* must be identical to STACK_SIZE in start.S */
+ #define STACK_SIZE (16 * 1024)
+
+ /* Early dynamic memory allocator is placed just above _end */
+ void *work_area_start = (void *)early_mem;
+ uintptr_t work_area_size =
+ (uintptr_t)rdb_start - (uintptr_t)early_mem - STACK_SIZE;
+ early_mem = ~0; /* Signal bsp_early_malloc not to be used anymore */
+
+ /*
+ * The following may be helpful in debugging what goes wrong when
+ * you are allocating the Work Area in a new BSP.
+ */
+ #ifdef BSP_GET_WORK_AREA_DEBUG
+ {
+ void *sp = __builtin_frame_address(0);
+ void *end = *work_area_start + *work_area_size;
+ printk(
+ "work_area_start = 0x%p\n"
+ "work_area_size = %d 0x%08x\n"
+ "end = 0x%p\n"
+ "current stack pointer = 0x%p%s\n",
+ work_area_start,
+ work_area_size, /* decimal */
+ work_area_size, /* hexadecimal */
+ end,
+ sp,
+ ((sp >= *work_area_start && sp <= end) ? " OVERLAPS!" : "")
+ );
+ printk( "rdb_start = 0x%08x\n", rdb_start );
+ }
+ #endif
+
+ bsp_work_area_initialize_default(work_area_start, work_area_size);
+}