From a1919e1d365e65063b7968b5b6189a1ea6bc702f Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 6 May 2023 17:49:50 -0300 Subject: [PATCH] vfs: mmap and munmap --- kernel-src/include/kernel/devfs.h | 2 ++ kernel-src/include/kernel/vfs.h | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/kernel-src/include/kernel/devfs.h b/kernel-src/include/kernel/devfs.h index d3de0887..685c657d 100644 --- a/kernel-src/include/kernel/devfs.h +++ b/kernel-src/include/kernel/devfs.h @@ -14,6 +14,8 @@ typedef struct { int (*read)(int minor, void *buffer, size_t size, uintmax_t offset, int flags, size_t *readc); int (*write)(int minor, void *buffer, size_t size, uintmax_t offset, int flags, size_t *writec); int (*poll)(int minor, int events); + int (*mmap)(int minor, void *addr, uintmax_t offset, int flags); + int (*munmap)(int minor, void *addr, uintmax_t offset, int flags); } devops_t; typedef struct devnode_t { diff --git a/kernel-src/include/kernel/vfs.h b/kernel-src/include/kernel/vfs.h index 859af2ad..80171f8e 100644 --- a/kernel-src/include/kernel/vfs.h +++ b/kernel-src/include/kernel/vfs.h @@ -51,6 +51,8 @@ typedef struct vfs_t { #define V_FFLAGS_READ 1 #define V_FFLAGS_WRITE 2 #define V_FFLAGS_NONBLOCKING 4 +#define V_FFLAGS_SHARED 8 +#define V_FFLAGS_EXEC 16 typedef struct vnode_t { struct vops_t *ops; @@ -85,6 +87,8 @@ typedef struct vops_t { int (*symlink)(vnode_t *parent, char *name, vattr_t *attr, char *path, cred_t *cred); int (*readlink)(vnode_t *parent, char **link, cred_t *cred); int (*inactive)(vnode_t *node); + int (*mmap)(vnode_t *node, void *addr, uintmax_t offset, int flags, cred_t *cred); + int (*munmap)(vnode_t *node, void *addr, uintmax_t offset, int flags, cred_t *cred); } vops_t; #define VFS_MOUNT(vfs, mp, b, d) (vfs)->ops->mount(vfs, mp, b, d) @@ -109,6 +113,8 @@ typedef struct vops_t { #define VOP_LINK(v, d, n, c) (v)->ops->link(v, d, n, c) #define VOP_SYMLINK(v, n, a, p, c) (v)->ops->symlink(v, n, a, p, c) #define VOP_READLINK(v, l, c) (v)->ops->readlink(v, l, c) +#define VOP_MMAP(v, a, o, f, c) (v)->ops->mmap(v, a, o, f, c) +#define VOP_MUNMAP(v, a, o, f, c) (v)->ops->munmap(v, a, o, f, c) // lock not needed unless atomicity is desired #define VOP_POLL(v, p) (v)->ops->poll(v, p);