diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-01-28 11:32:35 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-04 10:06:34 +0100 |
commit | a850d040ab99b4d6c66a40adc86778c849f74ebe (patch) | |
tree | 911a3cb3c7f880242305c83078e4e45db6fcd66e | |
parent | bsp/v850: Use proper ABI in linkcmds (diff) | |
download | rtems-a850d040ab99b4d6c66a40adc86778c849f74ebe.tar.bz2 |
score: Add _Workspace_Allocate_aligned()
-rw-r--r-- | cpukit/score/include/rtems/score/wkspace.h | 11 | ||||
-rw-r--r-- | cpukit/score/src/wkspace.c | 5 | ||||
-rw-r--r-- | testsuites/sptests/spwkspace/init.c | 14 | ||||
-rw-r--r-- | testsuites/sptests/spwkspace/spwkspace.doc | 2 | ||||
-rw-r--r-- | testsuites/sptests/spwkspace/spwkspace.scn | 2 |
5 files changed, 34 insertions, 0 deletions
diff --git a/cpukit/score/include/rtems/score/wkspace.h b/cpukit/score/include/rtems/score/wkspace.h index 7adf9dff07..ea8ad856ac 100644 --- a/cpukit/score/include/rtems/score/wkspace.h +++ b/cpukit/score/include/rtems/score/wkspace.h @@ -72,6 +72,17 @@ void *_Workspace_Allocate( ); /** + * @brief Allocate aligned memory from workspace. + * + * @param[in] size The size of the requested memory. + * @param[in] alignment The alignment of the requested memory. + * + * @retval NULL Not enough resources. + * @retval other The memory area begin. + */ +void *_Workspace_Allocate_aligned( size_t size, size_t alignment ); + +/** * @brief Free memory to the workspace. * * This function frees the specified block of memory. If the block diff --git a/cpukit/score/src/wkspace.c b/cpukit/score/src/wkspace.c index b9482960ac..65806863c2 100644 --- a/cpukit/score/src/wkspace.c +++ b/cpukit/score/src/wkspace.c @@ -114,6 +114,11 @@ void *_Workspace_Allocate( return memory; } +void *_Workspace_Allocate_aligned( size_t size, size_t alignment ) +{ + return _Heap_Allocate_aligned( &_Workspace_Area, size, alignment ); +} + /* * _Workspace_Free */ diff --git a/testsuites/sptests/spwkspace/init.c b/testsuites/sptests/spwkspace/init.c index 1441662bf6..f6102e2159 100644 --- a/testsuites/sptests/spwkspace/init.c +++ b/testsuites/sptests/spwkspace/init.c @@ -54,6 +54,17 @@ static void test_workspace_string_duplicate(void) _Workspace_Free( dup_e ); } +static void test_workspace_allocate_aligned(void) +{ + uintptr_t align = 512; + void *p = _Workspace_Allocate_aligned( 1, align ); + + rtems_test_assert( p != NULL ); + rtems_test_assert( ((uintptr_t) p & (align - 1)) == 0 ); + + _Workspace_Free( p ); +} + rtems_task Init( rtems_task_argument argument ) @@ -100,6 +111,9 @@ rtems_task Init( puts( "_Workspace_String_duplicate - samples" ); test_workspace_string_duplicate(); + puts( "_Workspace_Allocate_aligned" ); + test_workspace_allocate_aligned(); + puts( "*** END OF TEST WORKSPACE CLASSIC API ***" ); rtems_test_exit( 0 ); } diff --git a/testsuites/sptests/spwkspace/spwkspace.doc b/testsuites/sptests/spwkspace/spwkspace.doc index 3b03781ab7..dcd4e7a12d 100644 --- a/testsuites/sptests/spwkspace/spwkspace.doc +++ b/testsuites/sptests/spwkspace/spwkspace.doc @@ -15,6 +15,8 @@ directives: rtems_workspace_get_information rtems_workspace_allocate rtems_workspace_free + _Workspace_String_duplicate + _Workspace_Allocate_aligned concepts: diff --git a/testsuites/sptests/spwkspace/spwkspace.scn b/testsuites/sptests/spwkspace/spwkspace.scn index 0fe8088abf..6431923f84 100644 --- a/testsuites/sptests/spwkspace/spwkspace.scn +++ b/testsuites/sptests/spwkspace/spwkspace.scn @@ -7,4 +7,6 @@ rtems_workspace_allocate - too many bytes rtems_workspace_allocate - 42 bytes rtems_workspace_free - NULL rtems_workspace_free - previous pointer to 42 bytes +_Workspace_String_duplicate - samples +_Workspace_Allocate_aligned *** END OF TEST WORKSPACE CLASSIC API *** |