diff options
author | Ian Moffett <ian@osmora.org> | 2024-02-28 21:14:30 -0500 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2024-02-28 21:15:49 -0500 |
commit | 39a923f6c3c471f169552cf4e98b02c5173c2283 (patch) | |
tree | 682f539066e5a5fead2e19ad1114e354113c8b43 /sys/include | |
parent | 4f9c41c5bbf029e1b616d0cf3e1d2e28f9321718 (diff) |
kernel: Add initial VFS implementation
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys/include')
-rw-r--r-- | sys/include/fs/initramfs.h | 39 | ||||
-rw-r--r-- | sys/include/sys/mount.h | 76 | ||||
-rw-r--r-- | sys/include/sys/vfs.h | 51 | ||||
-rw-r--r-- | sys/include/sys/vnode.h | 61 |
4 files changed, 227 insertions, 0 deletions
diff --git a/sys/include/fs/initramfs.h b/sys/include/fs/initramfs.h new file mode 100644 index 0000000..c507e3d --- /dev/null +++ b/sys/include/fs/initramfs.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team. + * 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 Hyra 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 _FS_INITRAMFS_H_ +#define _FS_INITRAMFS_H_ + +#include <sys/mount.h> + +extern struct vfsops g_initramfs_ops; + +const char *initramfs_open(const char *path); + +#endif /* !_FS_INITRAMFS_H_ */ diff --git a/sys/include/sys/mount.h b/sys/include/sys/mount.h new file mode 100644 index 0000000..014ce89 --- /dev/null +++ b/sys/include/sys/mount.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team. + * 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 Hyra 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 <sys/types.h> +#include <sys/queue.h> + +#define FS_NAME_MAX 16 /* Max length of FS type name including nul */ + +struct fs_info; +struct mount; + +struct vfsops { + int(*init)(struct fs_info *info); + int(*vget_name)(struct fs_info *info, const char *name); +}; + +struct mount { + int flags; + size_t phash; /* Path hash */ + TAILQ_ENTRY(mount) link; +}; + +struct fs_info { + char name[FS_NAME_MAX]; /* Filesystem type name */ + struct vfsops *vfsops; /* Filesystem operations */ + struct mount *mp_root; +}; + +/* + * Mount flags + */ +#define MNT_RDONLY 0x00000001 + +#if defined(_KERNEL) + +/* For caching */ +#define MOUNTLIST_SIZE 8 + +/* Mountlist cache entry */ +struct mountlist_entry { + TAILQ_HEAD(, mount) buckets; +}; + +int vfs_mount(struct mount **mp_out, const char *path, int mnt_flags); +#endif /* defined(_KERNEL) */ + +#endif /* !_SYS_MOUNT_H_ */ diff --git a/sys/include/sys/vfs.h b/sys/include/sys/vfs.h new file mode 100644 index 0000000..2c056a1 --- /dev/null +++ b/sys/include/sys/vfs.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team. + * 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 Hyra 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_VFS_H_ +#define _SYS_VFS_H_ + +#include <sys/mount.h> +#include <sys/vnode.h> +#include <sys/types.h> + +#if defined(_KERNEL) +void vfs_init(void); +struct fs_info *vfs_byname(const char *name); + +struct vnode *vfs_path_to_node(const char *path); +char *vfs_get_fname_at(const char *path, size_t idx); +bool vfs_is_valid_path(const char *path); +size_t vfs_hash_path(const char *path); + +void vfs_init_cache(void); +int vfs_cache_mp(struct mount *mp, const char *path); +int vfs_cache_fetch_mp(const char *path, struct mount **mp); +#endif /* defined(_KERNEL) */ + +#endif /* !_SYS_VFS_H_ */ diff --git a/sys/include/sys/vnode.h b/sys/include/sys/vnode.h new file mode 100644 index 0000000..3cfcc7a --- /dev/null +++ b/sys/include/sys/vnode.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023-2024 Ian Marco Moffett and the Osmora Team. + * 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 Hyra 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_VNODE_H_ +#define _SYS_VNODE_H_ + +#include <sys/types.h> +#include <sys/queue.h> +#include <sys/mount.h> + +/* Vnode cache entry */ +struct vnode_cache { + const char *path; + struct vnode *vnode; +}; + +struct vnode { + int type; + int flags; + int usecount; /* Ref count of uses */ + struct mount *mp; /* Ptr to vfs vnode is in */ + TAILQ_ENTRY(vnode) freelist; +}; + +/* + * Vnode v_type flags + */ +#define VREG 0x01 /* Regular file */ +#define VDIR 0x02 /* Directory */ + +#if defined(_KERNEL) +int vfs_alloc_vnode(struct vnode **vnode, struct mount *mp, int type); +#endif + +#endif |