summaryrefslogtreecommitdiff
path: root/nuttx/mm/shm
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-09-22 14:53:56 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-09-22 14:53:56 -0600
commit43563c78b859b26a888ff191b3fb96cac64f509a (patch)
tree0f359cd2c1ab4c04c7703e459627e3af7fee94be /nuttx/mm/shm
parent8680c863eeac9dd459224573465ba336ee2cd834 (diff)
downloadnuttx-43563c78b859b26a888ff191b3fb96cac64f509a.tar.gz
nuttx-43563c78b859b26a888ff191b3fb96cac64f509a.tar.bz2
nuttx-43563c78b859b26a888ff191b3fb96cac64f509a.zip
Add the build framework and skeleton files for the shared memory feature (no logic yet provided)
Diffstat (limited to 'nuttx/mm/shm')
-rw-r--r--nuttx/mm/shm/Make.defs1
-rwxr-xr-xnuttx/mm/shm/shmat.c127
-rwxr-xr-xnuttx/mm/shm/shmctl.c135
-rwxr-xr-xnuttx/mm/shm/shmdt.c99
-rwxr-xr-xnuttx/mm/shm/shmget.c149
5 files changed, 511 insertions, 0 deletions
diff --git a/nuttx/mm/shm/Make.defs b/nuttx/mm/shm/Make.defs
index 66aee8502..c0fb12a81 100644
--- a/nuttx/mm/shm/Make.defs
+++ b/nuttx/mm/shm/Make.defs
@@ -36,6 +36,7 @@
# Shared memory allocator
ifeq ($(CONFIG_MM_SHM),y)
+CSRCS += shmat.c shmctl.c shmdt.c shmget.c
# Add the shared memory directory to the build
diff --git a/nuttx/mm/shm/shmat.c b/nuttx/mm/shm/shmat.c
new file mode 100755
index 000000000..4f4cf89e9
--- /dev/null
+++ b/nuttx/mm/shm/shmat.c
@@ -0,0 +1,127 @@
+/****************************************************************************
+ * mm/shm/shmat.c
+ *
+ * Copyright (C) 2014 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/shm.h>
+#include <errno.h>
+
+#ifdef CONFIG_MM_SHM
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: shmat
+ *
+ * Description:
+ * The shmat() function attaches the shared memory segment associated with
+ * the shared memory identifier specified by shmid to the address space of
+ * the calling process. The segment is attached at the address specified
+ * by one of the following criteria:
+ *
+ * - If shmaddr is a null pointer, the segment is attached at the first
+ * available address as selected by the system.
+ * - If shmaddr is not a null pointer and (shmflg & SHM_RND) is non-
+ * zero, the segment is attached at the address given by
+ * (shmaddr - ((uintptr_t)shmaddr % SHMLBA)).
+ * - If shmaddr is not a null pointer and (shmflg & SHM_RND) is 0, the
+ * segment is attached at the address given by shmaddr.
+ * - The segment is attached for reading if (shmflg & SHM_RDONLY) is
+ * non-zero and the calling process has read permission; otherwise, if
+ * it is 0 and the calling process has read and write permission, the
+ * segment is attached for reading and writing.
+ *
+ * Input Parameters:
+ * shmid - Shared memory identifier
+ * smaddr - Determines mapping of the shared memory region
+ * shmflg - See SHM_* definitions in include/sys/shm.h. Only SHM_RDONLY
+ * and SHM_RND are supported.
+ *
+ * Returned Value:
+ * Upon successful completion, shmat() will increment the value of
+ * shm_nattch in the data structure associated with the shared memory ID
+ * of the attached shared memory segment and return the segment's start address.
+ *
+ * Otherwise, the shared memory segment will not be attached, shmat() will
+ * return -1, and errno will be set to indicate the error.
+ *
+ * - EACCES
+ * Operation permission is denied to the calling process
+ * - EINVAL
+ * The value of shmid is not a valid shared memory identifier, the
+ * shmaddr is not a null pointer, and the value of
+ * (shmaddr -((uintptr_t)shmaddr % SHMLBA)) is an illegal address for
+ * attaching shared memory; or the shmaddr is not a null pointer,
+ * (shmflg & SHM_RND) is 0, and the value of shmaddr is an illegal
+ * address for attaching shared memory.
+ * - EMFILE
+ * The number of shared memory segments attached to the calling
+ * process would exceed the system-imposed limit.
+ * - ENOMEM
+ * The available data space is not large enough to accommodate the
+ * shared memory segment.
+ *
+ ****************************************************************************/
+
+FAR void *shmat(int shmid, FAR const void *shmaddr, int shmflg)
+{
+#warning Not implemented
+ set_errno(ENOSYS);
+ return (FAR void *)ERROR;
+}
+
+#endif /* CONFIG_MM_SHM */
diff --git a/nuttx/mm/shm/shmctl.c b/nuttx/mm/shm/shmctl.c
new file mode 100755
index 000000000..04f59dd64
--- /dev/null
+++ b/nuttx/mm/shm/shmctl.c
@@ -0,0 +1,135 @@
+/****************************************************************************
+ * mm/shm/shmctl.c
+ *
+ * Copyright (C) 2014 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/shm.h>
+#include <sys/ipc.h>
+#include <errno.h>
+
+#ifdef CONFIG_MM_SHM
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: shmctl
+ *
+ * Description:
+ * The shmctl() function provides a variety of shared memory control
+ * operations as specified by cmd. The following values for cmd are
+ * available:
+ *
+ * - IPC_STAT
+ * Place the current value of each member of the shmid_ds data
+ * structure associated with shmid into the structure pointed to by buf.
+ * - IPC_SET
+ * Set the value of the following members of the shmid_ds data
+ * structure associated with shmid to the corresponding value found
+ * in the structure pointed to by buf:
+ *
+ * shm_perm.uid
+ * shm_perm.gid
+ * shm_perm.mode Low-order nine bits.
+ *
+ * IPC_SET can only be executed by a process that has an effective
+ * user ID equal to either that of a process with appropriate
+ * privileges or to the value of shm_perm.cuid or shm_perm.uid in the
+ * shmid_ds data structure associated with shmid.
+ * - IPC_RMID
+ * Remove the shared memory identifier specified by shmid from the
+ * system and destroy the shared memory segment and shmid_ds data
+ * structure associated with it. IPC_RMID can only be executed by a
+ * process that has an effective user ID equal to either that of a
+ * process with appropriate privileges or to the value of
+ * shm_perm.cuid or shm_perm.uid in the shmid_ds data structure
+ * associated with shmid.
+ *
+ * Input Parameters:
+ * shmid - Shared memory identifier
+ * cmd - shmctl() command
+ * buf - Data associated with the shmctl() command
+ *
+ * Returned Value:
+ * Upon successful completion, shmctl() will return 0; otherwise, it will
+ * return -1 and set errno to indicate the error.
+ *
+ * - EACCES
+ * The argument cmd is equal to IPC_STAT and the calling process does
+ * not have read permission.
+ * - EINVAL
+ * The value of shmid is not a valid shared memory identifier, or the
+ * value of cmd is not a valid command.
+ * - EPERM
+ * The argument cmd is equal to IPC_RMID or IPC_SET and the effective
+ * user ID of the calling process is not equal to that of a process
+ * with appropriate privileges and it is not equal to the value of
+ * shm_perm.cuid or shm_perm.uid in the data structure associated with
+ * shmid.
+ * - EOVERFLOW
+ * The cmd argument is IPC_STAT and the gid or uid value is too large
+ * to be stored in the structure pointed to by the buf argument.
+ *
+ ****************************************************************************/
+
+int shmctl(int shmid, int cmd, struct shmid_ds *buf)
+{
+#warning Not implemented
+ set_errno(ENOSYS);
+ return ERROR;
+}
+
+#endif /* CONFIG_MM_SHM */
diff --git a/nuttx/mm/shm/shmdt.c b/nuttx/mm/shm/shmdt.c
new file mode 100755
index 000000000..a350e5ca0
--- /dev/null
+++ b/nuttx/mm/shm/shmdt.c
@@ -0,0 +1,99 @@
+/****************************************************************************
+ * mm/shm/shmdt.c
+ *
+ * Copyright (C) 2014 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/shm.h>
+#include <errno.h>
+
+#ifdef CONFIG_MM_SHM
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: shmdt
+ *
+ * Description:
+ * The shmdt() function detaches the shared memory segment located at the
+ * address specified by shmaddr from the address space of the calling
+ * process.
+ *
+ * Input Parameters:
+ * shmid - Shared memory identifier
+ *
+ * Returned Value:
+ * Upon successful completion, shmdt() will decrement the value of
+ * shm_nattch in the data structure associated with the shared memory ID
+ * of the attached shared memory segment and return 0.
+ *
+ * Otherwise, the shared memory segment will not be detached, shmdt()
+ & will return -1, and errno will be set to indicate the error.
+ *
+ * - EINVAL
+ * The value of shmaddr is not the data segment start address of a
+ * shared memory segment.
+ *
+ ****************************************************************************/
+
+int shmdt(FAR const void *shmaddr)
+{
+#warning Not implemented
+ set_errno(ENOSYS);
+ return ERROR;
+}
+
+#endif /* CONFIG_MM_SHM */
diff --git a/nuttx/mm/shm/shmget.c b/nuttx/mm/shm/shmget.c
new file mode 100755
index 000000000..2c733d88f
--- /dev/null
+++ b/nuttx/mm/shm/shmget.c
@@ -0,0 +1,149 @@
+/****************************************************************************
+ * mm/shm/shmget.c
+ *
+ * Copyright (C) 2014 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/shm.h>
+#include <sys/ipc.h>
+#include <errno.h>
+
+#ifdef CONFIG_MM_SHM
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: shmget
+ *
+ * Description:
+ * The shmget() function will return the shared memory identifier
+ * associated with key.
+ *
+ * A shared memory identifier, associated data structure, and shared
+ * memory segment of at least size bytes is created for key if one of the
+ * following is true:
+ *
+ * - The argument key is equal to IPC_PRIVATE.
+ * - The argument key does not already have a shared memory identifier
+ * associated with it and (shmflg & IPC_CREAT) is non-zero.
+ *
+ * Upon creation, the data structure associated with the new shared memory
+ * identifier will be initialized as follows:
+ *
+ * - The values of shm_perm.cuid, shm_perm.uid, shm_perm.cgid, and
+ * shm_perm.gid are set equal to the effective user ID and effective
+ * group ID, respectively, of the calling process.
+ * - The low-order nine bits of shm_perm.mode are set equal to the low-
+ * order nine bits of shmflg.
+ * - The value of shm_segsz is set equal to the value of size.
+ * - The values of shm_lpid, shm_nattch, shm_atime, and shm_dtime are
+ * set equal to 0.
+ * - The value of shm_ctime is set equal to the current time.
+ *
+ * When the shared memory segment is created, it will be initialized with
+ * all zero values.
+ *
+ * Input Parameters:
+ * key - The key that is used to access the unique shared memory
+ * identifier.
+ * size - The shared memory region that is created will be at least
+ * this size in bytes.
+ * shmflgs - See IPC_* definitions in sys/ipc.h. Only the values
+ * IPC_PRIVATE or IPC_CREAT are supported.
+ *
+ * Returned Value:
+ * Upon successful completion, shmget() will return a non-negative
+ * integer, namely a shared memory identifier; otherwise, it will return
+ * -1 and set errno to indicate the error.
+ *
+ * - EACCES
+ * A shared memory identifier exists for key but operation permission
+ * as specified by the low-order nine bits of shmflg would not be
+ * granted.
+ * - EEXIST
+ * A shared memory identifier exists for the argument key but
+ * (shmflg & IPC_CREAT) && (shmflg & IPC_EXCL) are non-zero.
+ * - EINVAL
+ * A shared memory segment is to be created and the value of size is
+ * less than the system-imposed minimum or greater than the system-
+ * imposed maximum.
+ * - EINVAL
+ * No shared memory segment is to be created and a shared memory
+ * segment exists for key but the size of the segment associated with
+ * it is less than size and size is not 0.
+ * - ENOENT
+ * A shared memory identifier does not exist for the argument key and
+ * (shmflg & IPC_CREAT) is 0.
+ * - ENOMEM
+ * A shared memory identifier and associated shared memory segment
+ * will be created, but the amount of available physical memory is
+ * not sufficient to fill the request.
+ * - ENOSPC
+ * A shared memory identifier is to be created, but the system-imposed
+ * limit on the maximum number of allowed shared memory identifiers
+ * system-wide would be exceeded.
+ *
+ ****************************************************************************/
+
+int shmget(key_t key, size_t size, int shmflg)
+{
+#warning Not implemented
+ set_errno(ENOSYS);
+ return ERROR;
+}
+
+#endif /* CONFIG_MM_SHM */
+