metal-cos/sys/include/vfs.h

64 lines
1.5 KiB
C

#ifndef __SYS_VFS_H__
#define __SYS_VFS_H__
#include <sys/kmem.h>
#include <sys/stat.h>
typedef struct VFSOp VFSOp;
typedef struct VNode VNode;
typedef struct VFS {
VFSOp *op;
Disk *disk;
Spinlock lock;
uint64_t refCount;
// FS Fields
void *fsptr;
uint64_t fsval;
uint64_t blksize;
VNode *root;
void *bitmap[16];
} VFS;
typedef struct VNode {
VFSOp *op;
Disk *disk;
Spinlock lock;
uint64_t refCount;
// FS Fields
void *fsptr;
uint64_t fsval;
VFS *vfs;
} VNode;
DECLARE_SLAB(VFS);
DECLARE_SLAB(VNode);
typedef struct VFSOp {
// VFS Operations
int (*unmount)(VFS *fs);
int (*getroot)(VFS *fs, VNode **dn);
// VNode Operations
int (*lookup)(VNode *dn, VNode **fn, const char *name);
int (*open)(VNode *fn);
int (*close)(VNode *fn);
int (*stat)(VNode *fn, struct stat *sb);
int (*read)(VNode *fn, void *buf, uint64_t off, uint64_t len);
int (*write)(VNode *fn, void *buf, uint64_t off, uint64_t len);
int (*readdir)(VNode *fn, void *buf, uint64_t len, uint64_t *off);
} VFSOp;
int VFS_MountRoot(Disk *root);
VNode *VFS_Lookup(const char *path);
// XXX: Release/Retain
int VFS_Stat(const char *path, struct stat *sb);
int VFS_Open(VNode *fn);
int VFS_Close(VNode *fn);
int VFS_Read(VNode *fn, void *buf, uint64_t off, uint64_t len);
int VFS_Write(VNode *fn, void *buf, uint64_t off, uint64_t len);
int VFS_ReadDir(VNode *fn, void *buf, uint64_t len, uint64_t *off);
#endif /* __SYS_VFS_H__ */