diff options
author | Kevin Kirspel <kevin-kirspel@idexx.com> | 2017-06-29 10:36:43 -0400 |
---|---|---|
committer | Gedare Bloom <gedare@rtems.org> | 2017-07-14 16:04:05 -0400 |
commit | c6bb1c33bcf70d1398073c96a4fac4f9b031b9ab (patch) | |
tree | ce904d8bfaded9060edf71bac28c517c3e75a4c8 /cpukit/libcsupport | |
parent | e19da87ad706bf79fa0e22f1f7d68e21bca2e296 (diff) |
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.h | 38 | ||||
-rw-r--r-- | cpukit/libcsupport/include/rtems/termiostypes.h | 13 | ||||
-rw-r--r-- | cpukit/libcsupport/src/__usrenv.c | 1 | ||||
-rw-r--r-- | cpukit/libcsupport/src/termios.c | 1 |
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 |