summaryrefslogtreecommitdiffstats
path: root/cpukit/posix/include/rtems/posix/shm.h
diff options
context:
space:
mode:
authorGedare Bloom <gedare@rtems.org>2016-08-12 15:25:10 -0400
committerGedare Bloom <gedare@rtems.org>2017-01-13 11:17:30 -0500
commitba77628250ae7158db363fc0d7886ebd43e9cb69 (patch)
tree91a8a5b7d20399c69c5c88223a43ec681451996b /cpukit/posix/include/rtems/posix/shm.h
parentposix: fix typo in mmap arguments (diff)
downloadrtems-ba77628250ae7158db363fc0d7886ebd43e9cb69.tar.bz2
posix: shared memory support
Add POSIX shared memory manager (Shm). Includes a hook-based approach for the backing memory storage that defaults to the Workspace, and a test is provided using the heap. A test is also provided for the basic use of mmap'ing a shared memory object. This test currently fails at the mmap stage due to no support for mmap.
Diffstat (limited to 'cpukit/posix/include/rtems/posix/shm.h')
-rw-r--r--cpukit/posix/include/rtems/posix/shm.h182
1 files changed, 182 insertions, 0 deletions
diff --git a/cpukit/posix/include/rtems/posix/shm.h b/cpukit/posix/include/rtems/posix/shm.h
new file mode 100644
index 0000000000..dfdd58ed2a
--- /dev/null
+++ b/cpukit/posix/include/rtems/posix/shm.h
@@ -0,0 +1,182 @@
+/**
+ * @file
+ *
+ * @brief Internal Support for POSIX Shared Memory
+ */
+
+/*
+ * Copyright (c) 2016 Gedare Bloom.
+ *
+ * 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.
+ */
+
+#ifndef _RTEMS_POSIX_SHM_H
+#define _RTEMS_POSIX_SHM_H
+
+#include <rtems/score/object.h>
+#include <rtems/score/threadq.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup POSIXShmPrivate POSIX Shared Memory Private Support
+ *
+ * @ingroup POSIXAPI
+ *
+ * Internal implementation support for POSIX shared memory.
+ * @{
+ */
+typedef struct POSIX_Shm_Object_operations POSIX_Shm_Object_operations;
+extern const POSIX_Shm_Object_operations _POSIX_Shm_Object_operations;
+
+/**
+ * @brief Encapsulation for the storage and manipulation of shm objects.
+ */
+typedef struct {
+ /**
+ * @brief The handle is private for finding object storage.
+ */
+ void *handle;
+
+ /**
+ * @brief The number of bytes allocated to the object. A size of 0 with
+ * a handle of NULL means no object is allocated.
+ */
+ size_t size;
+
+ /**
+ * @brief Implementation-specific operations on shm objects.
+ */
+ const POSIX_Shm_Object_operations *ops;
+} POSIX_Shm_Object;
+
+/**
+ * @brief Operations on POSIX Shared Memory Objects.
+ */
+struct POSIX_Shm_Object_operations {
+ /**
+ * @brief Allocates a new @a shm_obj with initial @a size.
+ *
+ * New shared memory is initialized to zeroes.
+ *
+ * Returns 0 for success.
+ */
+ int ( *object_create ) ( POSIX_Shm_Object *shm_obj, size_t size );
+
+ /**
+ * @brief Changes the @a shm_obj size to @a size.
+ *
+ * Zeroes out the portion of the shared memory object that shrinks or grows.
+ *
+ * Returns 0 for success.
+ */
+ int ( *object_resize ) ( POSIX_Shm_Object *shm_obj, size_t size );
+
+ /**
+ * @brief Deletes the @a shm_obj.
+ *
+ * Zeroes out the memory.
+ *
+ * Returns 0 for success.
+ */
+ int ( *object_delete ) ( POSIX_Shm_Object *shm_obj );
+
+ /**
+ * @brief Copies up to @count bytes of the @a shm_obj data into @a buf.
+ *
+ * Returns the number of bytes read (copied) into @a buf.
+ */
+ int ( *object_read ) ( POSIX_Shm_Object *shm_obj, void *buf, size_t count );
+};
+
+/**
+ * @brief Control for a POSIX Shared Memory Object
+ */
+typedef struct {
+ Objects_Control Object;
+ Thread_queue_Control Wait_queue;
+
+ int reference_count;
+
+ POSIX_Shm_Object shm_object;
+
+ uid_t uid;
+ gid_t gid;
+ mode_t mode;
+
+ time_t atime;
+ time_t mtime;
+ time_t ctime;
+} POSIX_Shm_Control;
+
+/**
+ * @brief object_create operation for shm objects stored in RTEMS Workspace.
+ */
+extern int _POSIX_Shm_Object_create_from_workspace(
+ POSIX_Shm_Object *shm_obj,
+ size_t size
+);
+
+/**
+ * @brief object_delete operation for shm objects stored in RTEMS Workspace.
+ */
+extern int _POSIX_Shm_Object_delete_from_workspace( POSIX_Shm_Object *shm_obj );
+
+/**
+ * @brief object_resize operation for shm objects stored in RTEMS Workspace.
+ */
+extern int _POSIX_Shm_Object_resize_from_workspace(
+ POSIX_Shm_Object *shm_obj,
+ size_t size
+);
+
+/**
+ * @brief object_read operation for shm objects stored in RTEMS Workspace.
+ */
+extern int _POSIX_Shm_Object_read_from_workspace(
+ POSIX_Shm_Object *shm_obj,
+ void *buf,
+ size_t count
+);
+
+/**
+ * @brief object_create operation for shm objects stored in C program heap.
+ */
+extern int _POSIX_Shm_Object_create_from_heap(
+ POSIX_Shm_Object *shm_obj,
+ size_t size
+);
+
+/**
+ * @brief object_delete operation for shm objects stored in C program heap.
+ */
+extern int _POSIX_Shm_Object_delete_from_heap( POSIX_Shm_Object *shm_obj );
+
+/**
+ * @brief object_resize operation for shm objects stored in C program heap.
+ */
+extern int _POSIX_Shm_Object_resize_from_heap(
+ POSIX_Shm_Object *shm_obj,
+ size_t size
+);
+
+/**
+ * @brief object_read operation for shm objects stored in C program heap.
+ */
+extern int _POSIX_Shm_Object_read_from_heap(
+ POSIX_Shm_Object *shm_obj,
+ void *buf,
+ size_t count
+);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif