From 70dc7ad8924cf3e30e06b02698b1294fe9553538 Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Thu, 18 Sep 2025 22:36:36 -0400 Subject: kern: vfs: Add initial vfsops, and mount code This commit introduces the groundwork for mountpoints, filesystems and the VFS as a whole. OMAR is now initialized as its own filesystem by the VFS Signed-off-by: Ian Moffett --- src/sys/include/os/vfs.h | 57 ++++++++++++++++++ src/sys/include/sys/mount.h | 137 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 194 insertions(+) create mode 100644 src/sys/include/os/vfs.h create mode 100644 src/sys/include/sys/mount.h (limited to 'src/sys/include') diff --git a/src/sys/include/os/vfs.h b/src/sys/include/os/vfs.h new file mode 100644 index 0000000..ec7eb77 --- /dev/null +++ b/src/sys/include/os/vfs.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2025 Ian Marco Moffett and L5 engineers + * All rights reserved. + * + * 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 of the project 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. + */ + +#ifndef _OS_VFS_H_ +#define _OS_VFS_H_ 1 + +#include +#include + +/* + * Initialize the virtual filesystem + * layer + * + * Returns zero on success, otherwise a less + * than zero value on failure. + */ +int vfs_init(void); + +/* + * Get a VFS file table entry by index. + * + * @index: Index to desired entry + * @resp: Result pointer is written here + * + * Returns zero on success and the entry being + * found, otherwise a less than zero failure if + * the entry has not been found. + */ +int vfs_by_index(uint16_t index, struct fs_info **resp); + +#endif /* !_OS_VFS_H_ */ diff --git a/src/sys/include/sys/mount.h b/src/sys/include/sys/mount.h new file mode 100644 index 0000000..c2beb8d --- /dev/null +++ b/src/sys/include/sys/mount.h @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2025 Ian Marco Moffett and L5 engineers + * All rights reserved. + * + * 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 of the project 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. + */ + +#ifndef _SYS_MOUNT_H_ +#define _SYS_MOUNT_H_ + +#include +#include +#include + +#if defined(_KERNEL) + +/* + * Number of bytes allowed in a filesystem + * name including the null termination + */ +#define FSNAME_MAX 16 + +/* + * Mount filesystem string names + */ +#define MOUNT_INITRD "initrd" /* Initial ramdisk */ + +/* Forward declarations */ +struct vfsops; +struct mount; + +/* Filesystem vfsops */ +extern struct vfsops g_omar_vfsops; + +/* + * Represents a mountpoint + */ +struct mount { + struct vnode *vp; + const char *name; + TAILQ_ENTRY(mount) link; + TAILQ_HEAD(, mount) buckets; +}; + +/* + * Represents a list of mountpoints + * + * @i: Initialized (set if initialized) + */ +struct mountlist { + uint8_t i : 1; + TAILQ_HEAD(, mount) list; +}; +/* + * Arguments for mount() + * + * @source: Specifies the source filesystem to mount + * @target: Specifies the location to mount source + * @fstype: File system type + * @data: Filesystem specific data + */ +struct mount_args { + const char *source; + const char *target; + const char *fstype; + const void *data; +}; + +/* + * Represents information about a filesystem + * + * @name: Filesystem type name + * @vfsops: VFS operations vector + * @refcount: Mount count of this type + */ +struct fs_info { + char name[FSNAME_MAX]; + const struct vfsops *vfsops; + int refcount; +}; + +/* + * VFS operations vector + * + * @init: Initialize the filesystem + * @mount: Mount a filesystem + */ +struct vfsops { + int(*init)(struct fs_info *fip); + int(*mount)(struct fs_info *fip, struct mount_args *margs); +}; + +/* + * Mount a specific filesystem + * + * @margs: Mount arguments + * @flags: Mount flags + * + * Returns zero on success, otherwise a less than zero + * failure upon failure. + */ +int mount(struct mount_args *margs, uint32_t flags); + +/* + * Initialize a mountpoint to a known state + * + * @mp: Pointer to mountlist [if NULL, use root] + * + * Returns zero on success, otherwise a less than + * zero value on failure. + */ +int mountlist_init(struct mountlist *mlp); + +#endif /* !_KERNEL */ +#endif /* !_SYS_MOUNT_H_ */ -- cgit v1.2.3