diff options
Diffstat (limited to 'nuttx/mm')
-rw-r--r--[-rwxr-xr-x] | nuttx/mm/shm/shm_initialize.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/nuttx/mm/shm/shm_initialize.c b/nuttx/mm/shm/shm_initialize.c index 2b7d7d406..de942793c 100755..100644 --- a/nuttx/mm/shm/shm_initialize.c +++ b/nuttx/mm/shm/shm_initialize.c @@ -39,6 +39,15 @@ #include <nuttx/config.h> +#include <assert.h> +#include <errno.h> + +#include <nuttx/addrenv.h> +#include <nuttx/sched.h> +#include <nuttx/gran.h> +#include <nuttx/pgalloc.h> +#include <nuttx/shm.h> + #include "shm/shm.h" #ifdef CONFIG_MM_SHM @@ -104,4 +113,64 @@ void shm_initialize(void) #endif } +/**************************************************************************** + * Name: shm_group_initialize + * + * Description: + * Initialize the group shared memory data structures when a new task + * group is initialized. + * + * Input Parameters: + * group - A reference to the new group structure to be initialized. + * + * Returned Value: + * Zero (OK) on success; a negated errno value on failure. + * + ****************************************************************************/ + +int shm_group_initialize(FAR struct task_group_s *group) +{ + DEBUGASSERT(group && !group->tg_shm.gs_handle); + + group->tg_shm.gs_handle = + gran_initialize((FAR void *)CONFIG_ARCH_SHM_VBASE, + ARCH_SHM_MAXPAGES << MM_PGSHIFT, + MM_PGSHIFT, MM_PGSHIFT); + + if (!group->tg_shm.gs_handle) + { + shmdbg("gran_initialize() failed\n"); + return -ENOMEM; + } + + return OK; +} + +/**************************************************************************** + * Name: shm_group_release + * + * Description: + * Release resources used by the group shared memory logic. This function + * is called at the time at the group is destroyed. + * + * Input Parameters: + * group - A reference to the group structure to be un-initialized. + * + * Returned Value: + * None + * + ****************************************************************************/ + +void shm_group_release(FAR struct task_group_s *group) +{ + GRAN_HANDLE handle; + DEBUGASSERT(group) + + handle = group->tg_shm.gs_handle; + if (handle) + { + gran_release(handle); + } +} + #endif /* CONFIG_MM_SHM */ |