summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport
diff options
context:
space:
mode:
authorKevin Kirspel <kevin-kirspel@idexx.com>2017-06-29 10:36:43 -0400
committerGedare Bloom <gedare@rtems.org>2017-07-14 16:04:05 -0400
commitc6bb1c33bcf70d1398073c96a4fac4f9b031b9ab (patch)
treece904d8bfaded9060edf71bac28c517c3e75a4c8 /cpukit/libcsupport
parentbsps: Include missing header file (diff)
downloadrtems-c6bb1c33bcf70d1398073c96a4fac4f9b031b9ab.tar.bz2
posix/mmap: Add support for file handler and MAP_ANON
Added a mmap file handler to struct _rtems_filesystem_file_handlers_r. Updated each file handler object to support the default mmap handler. Updated mmap() to call the mmap handler for MAP_SHARED. Added a mmap file handler for shm Added support for MAP_ANON in mmap(). Updates #2859
Diffstat (limited to 'cpukit/libcsupport')
-rw-r--r--cpukit/libcsupport/include/rtems/libio.h38
-rw-r--r--cpukit/libcsupport/include/rtems/termiostypes.h13
-rw-r--r--cpukit/libcsupport/src/__usrenv.c1
-rw-r--r--cpukit/libcsupport/src/termios.c1
4 files changed, 53 insertions, 0 deletions
diff --git a/cpukit/libcsupport/include/rtems/libio.h b/cpukit/libcsupport/include/rtems/libio.h
index 4669cb52e1..8226d18ba2 100644
--- a/cpukit/libcsupport/include/rtems/libio.h
+++ b/cpukit/libcsupport/include/rtems/libio.h
@@ -977,6 +977,28 @@ typedef int (*rtems_filesystem_kqfilter_t)(
);
/**
+ * @brief MMAP support.
+ *
+ * @param[in, out] iop The IO pointer.
+ * @param[in, out] addr The starting address of the mapped memory.
+ * @param[in] len The maximum number of bytes to map.
+ * @param[in] prot The desired memory protection.
+ * @param[in] off The offset within the file descriptor to map.
+ *
+ * @retval 0 Successful operation.
+ * @retval error An error occurred. This is usually EINVAL.
+ *
+ * @see rtems_filesystem_default_mmap().
+ */
+typedef int (*rtems_filesystem_mmap_t)(
+ rtems_libio_t *iop,
+ void **addr,
+ size_t len,
+ int prot,
+ off_t off
+);
+
+/**
* @brief File system node operations table.
*/
struct _rtems_filesystem_file_handlers_r {
@@ -995,6 +1017,7 @@ struct _rtems_filesystem_file_handlers_r {
rtems_filesystem_kqfilter_t kqfilter_h;
rtems_filesystem_readv_t readv_h;
rtems_filesystem_writev_t writev_h;
+ rtems_filesystem_mmap_t mmap_h;
};
/**
@@ -1216,6 +1239,21 @@ int rtems_filesystem_default_kqfilter(
struct knote *kn
);
+/**
+ * @brief Default MMAP handler.
+ *
+ * @retval ENOTSUP Always.
+ *
+ * @see rtems_filesystem_mmap_t.
+ */
+int rtems_filesystem_default_mmap(
+ rtems_libio_t *iop,
+ void **addr,
+ size_t len,
+ int prot,
+ off_t off
+);
+
/** @} */
/**
diff --git a/cpukit/libcsupport/include/rtems/termiostypes.h b/cpukit/libcsupport/include/rtems/termiostypes.h
index e91faa7376..b3cac66e92 100644
--- a/cpukit/libcsupport/include/rtems/termiostypes.h
+++ b/cpukit/libcsupport/include/rtems/termiostypes.h
@@ -565,6 +565,19 @@ int rtems_termios_kqfilter(
);
/**
+ * @brief Termios mmap() filter filesystem node handler
+ *
+ * Real implementation is provided by libbsd.
+ */
+int rtems_termios_mmap(
+ rtems_libio_t *iop,
+ void **addr,
+ size_t len,
+ int prot,
+ off_t off
+);
+
+/**
* @brief Termios poll() filesystem node handler.
*
* Real implementation is provided by libbsd.
diff --git a/cpukit/libcsupport/src/__usrenv.c b/cpukit/libcsupport/src/__usrenv.c
index a05295d642..611e0d7a92 100644
--- a/cpukit/libcsupport/src/__usrenv.c
+++ b/cpukit/libcsupport/src/__usrenv.c
@@ -56,6 +56,7 @@ const rtems_filesystem_file_handlers_r rtems_filesystem_null_handlers = {
.fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
.fcntl_h = rtems_filesystem_default_fcntl,
.kqfilter_h = rtems_filesystem_default_kqfilter,
+ .mmap_h = rtems_filesystem_default_mmap,
.poll_h = rtems_filesystem_default_poll,
.readv_h = rtems_filesystem_default_readv,
.writev_h = rtems_filesystem_default_writev
diff --git a/cpukit/libcsupport/src/termios.c b/cpukit/libcsupport/src/termios.c
index a22ae95719..7d843495c5 100644
--- a/cpukit/libcsupport/src/termios.c
+++ b/cpukit/libcsupport/src/termios.c
@@ -2212,6 +2212,7 @@ static const rtems_filesystem_file_handlers_r rtems_termios_imfs_handler = {
.fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync,
.fcntl_h = rtems_filesystem_default_fcntl,
.kqfilter_h = rtems_termios_kqfilter,
+ .mmap_h = rtems_termios_mmap,
.poll_h = rtems_termios_poll,
.readv_h = rtems_filesystem_default_readv,
.writev_h = rtems_filesystem_default_writev