summaryrefslogtreecommitdiffstats
path: root/rtemsbsd
diff options
context:
space:
mode:
authorVijay Kumar Banerjee <vijaykumar9597@gmail.com>2019-07-18 14:26:26 +0530
committerChristian Mauderer <oss@c-mauderer.de>2019-07-27 13:49:07 +0200
commitb68ca55c964cac5a6940e27f2880ee740cb1618a (patch)
treeb2611e6b76b74b788be08eddf90baf830b8b0e17 /rtemsbsd
parentEPOCH(9): Add epoch_drain_callbacks() (diff)
downloadrtems-libbsd-b68ca55c964cac5a6940e27f2880ee740cb1618a.tar.bz2
Add mmap
Diffstat (limited to 'rtemsbsd')
-rw-r--r--rtemsbsd/include/machine/vm.h2
-rw-r--r--rtemsbsd/sys/fs/devfs/devfs_devs.c38
2 files changed, 40 insertions, 0 deletions
diff --git a/rtemsbsd/include/machine/vm.h b/rtemsbsd/include/machine/vm.h
index e69de29b..351b7472 100644
--- a/rtemsbsd/include/machine/vm.h
+++ b/rtemsbsd/include/machine/vm.h
@@ -0,0 +1,2 @@
+#define VM_MEMATTR_DEFAULT 0
+#define VM_MEMATTR_UNCACHEABLE 1
diff --git a/rtemsbsd/sys/fs/devfs/devfs_devs.c b/rtemsbsd/sys/fs/devfs/devfs_devs.c
index 7c697b0a..7b09e530 100644
--- a/rtemsbsd/sys/fs/devfs/devfs_devs.c
+++ b/rtemsbsd/sys/fs/devfs/devfs_devs.c
@@ -387,6 +387,43 @@ devfs_imfs_kqfilter(rtems_libio_t *iop, struct knote *kn)
return error;
}
+static int
+devfs_imfs_mmap(rtems_libio_t *iop, void **addr, size_t len, int prot,
+ off_t off)
+{
+ struct cdev *cdev = devfs_imfs_get_context_by_iop(iop);
+ struct file *fp = rtems_bsd_iop_to_fp(iop);
+ struct thread *td = rtems_bsd_get_curthread_or_null();
+ struct file *fpop;
+ struct cdevsw *dsw;
+ int error, ref;
+
+ if (td != 0) {
+ if (cdev == NULL) {
+ error = ENXIO;
+ goto err;
+ }
+ if (cdev->si_flags & SI_ALIAS) {
+ cdev = cdev->si_parent;
+ }
+ dsw = dev_refthread(cdev, &ref);
+ if (dsw == NULL) {
+ error = ENXIO;
+ goto err;
+ }
+ fpop = td->td_fpop;
+ curthread->td_fpop = fp;
+ error = dsw->d_mmap( cdev, off, (vm_paddr_t *) addr, prot, VM_MEMATTR_DEFAULT);
+ td->td_fpop = fpop;
+ dev_relthread(cdev, ref);
+ } else {
+ error = ENOMEM;
+ }
+
+err:
+ return rtems_bsd_error_to_status_and_errno(error);
+}
+
static const rtems_filesystem_file_handlers_r devfs_imfs_handlers = {
.open_h = devfs_imfs_open,
.close_h = devfs_imfs_close,
@@ -403,6 +440,7 @@ static const rtems_filesystem_file_handlers_r devfs_imfs_handlers = {
.kqfilter_h = devfs_imfs_kqfilter,
.readv_h = devfs_imfs_readv,
.writev_h = devfs_imfs_writev,
+ .mmap_h = devfs_imfs_mmap,
};
static const IMFS_node_control devfs_imfs_control = IMFS_GENERIC_INITIALIZER(