Adds PATH_MAX and NAME_MAX (XCC)
[akaros.git] / kern / include / kfs.h
index d3f12fd..84a9cad 100644 (file)
@@ -1,36 +1,87 @@
-/*
- * Copyright (c) 2009 The Regents of the University of California
+/* Copyright (c) 2009, 2010 The Regents of the University of California
  * Barret Rhoden <brho@cs.berkeley.edu>
  * See LICENSE for details.
  *
  * KFS (Kernel File System)
  *
- * This gives runtime access to the binary blobs (usually userspace programs)
- * linked at the end of the kernel.  Extremely rudimentary.
- * Also allows for process creation from file (can consider moving this).
- *
- * Add the files you want in KFS in kfs.c.
- */
+ * This is a cheap FS that is based off of a CPIO archive appended to the end of
+ * the kernel binary image. */
 
 #ifndef ROS_KERN_KFS_H
 #define ROS_KERN_KFS_H
 
-#include <arch/types.h>
-#include <process.h>
+#include <ros/common.h>
+#include <vfs.h>
 
-// zra : putting nodeputy in header files makes life difficult.
-//#pragma nodeputy
+/* Every FS must extern it's type, and be included in vfs_init() */
+extern struct fs_type kfs_fs_type;
 
-struct kfs_entry {
-       char (NT name)[256];
-       uint8_t *COUNT(size) start;
-       size_t size;
+/* KFS-specific inode info.  Could use a union, but I want to init filestart to
+ * 0 to catch bugs. */
+struct kfs_i_info {
+       struct dentry_tailq             children;               /* our childrens */
+       void                                    *filestart;             /* or our file location */
+       size_t                                  init_size;              /* file size on the backing store */
 };
 
-#define MAX_KFS_FILES 11
-extern struct kfs_entry kfs[MAX_KFS_FILES];
-
-ssize_t kfs_lookup_path(char*NTS path);
-struct proc *kfs_proc_create(int kfs_inode);
+/* KFS VFS functions.  Exported for use by similar FSs (devices, for now) */
+struct super_block *kfs_get_sb(struct fs_type *fs, int flags,
+                               char *dev_name, struct vfsmount *vmnt);
+void kfs_kill_sb(struct super_block *sb);
+/* Page Map Operations */
+int kfs_readpage(struct page_map *pm, struct page *page);
+/* Super Operations */
+struct inode *kfs_alloc_inode(struct super_block *sb);
+void kfs_dealloc_inode(struct inode *inode);
+void kfs_read_inode(struct inode *inode);
+void kfs_dirty_inode(struct inode *inode);
+void kfs_write_inode(struct inode *inode, bool wait);
+void kfs_put_inode(struct inode *inode);
+void kfs_drop_inode(struct inode *inode);
+void kfs_delete_inode(struct inode *inode);
+void kfs_put_super(struct super_block *sb);
+void kfs_write_super(struct super_block *sb);
+int kfs_sync_fs(struct super_block *sb, bool wait);
+int kfs_remount_fs(struct super_block *sb, int flags, char *data);
+void kfs_umount_begin(struct super_block *sb);
+/* inode_operations */
+int kfs_create(struct inode *dir, struct dentry *dentry, int mode,
+               struct nameidata *nd);
+struct dentry *kfs_lookup(struct inode *dir, struct dentry *dentry,
+                          struct nameidata *nd);
+int kfs_link(struct dentry *old_dentry, struct inode *dir,
+             struct dentry *new_dentry);
+int kfs_unlink(struct inode *dir, struct dentry *dentry);
+int kfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname);
+int kfs_mkdir(struct inode *dir, struct dentry *dentry, int mode);
+int kfs_rmdir(struct inode *dir, struct dentry *dentry);
+int kfs_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t rdev);
+int kfs_rename(struct inode *old_dir, struct dentry *old_dentry,
+               struct inode *new_dir, struct dentry *new_dentry);
+char *kfs_readlink(struct dentry *dentry);
+void kfs_truncate(struct inode *inode);
+int kfs_permission(struct inode *inode, int mode, struct nameidata *nd);
+/* dentry_operations */
+int kfs_d_revalidate(struct dentry *dir, struct nameidata *nd);
+int kfs_d_compare(struct dentry *dir, struct qstr *name1, struct qstr *name2);
+int kfs_d_delete(struct dentry *dentry);
+int kfs_d_release(struct dentry *dentry);
+void kfs_d_iput(struct dentry *dentry, struct inode *inode);
+/* file_operations */
+int kfs_llseek(struct file *file, off64_t offset, off64_t *ret, int whence);
+int kfs_readdir(struct file *dir, struct dirent *dirent);
+int kfs_mmap(struct file *file, struct vm_region *vmr);
+int kfs_open(struct inode *inode, struct file *file);
+int kfs_flush(struct file *file);
+int kfs_release(struct inode *inode, struct file *file);
+int kfs_fsync(struct file *file, struct dentry *dentry, int datasync);
+unsigned int kfs_poll(struct file *file, struct poll_table_struct *poll_table);
+ssize_t kfs_readv(struct file *file, const struct iovec *vector,
+                  unsigned long count, off64_t *offset);
+ssize_t kfs_writev(struct file *file, const struct iovec *vector,
+                  unsigned long count, off64_t *offset);
+ssize_t kfs_sendpage(struct file *file, struct page *page, int offset,
+                     size_t size, off64_t pos, int more);
+int kfs_check_flags(int flags);
 
-#endif // !ROS_KERN_KFS_H
+#endif /* !ROS_KERN_KFS_H */