OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [conts/] [posix/] [mm0/] [include/] [memfs/] [memfs.h] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 drasko
/*
2
 * The disk layout of our simple unix-like filesystem.
3
 *
4
 * Copyright (C) 2007, 2008 Bahadir Balban
5
 */
6
 
7
#ifndef __MEMFS_LAYOUT_H__
8
#define __MEMFS_LAYOUT_H__
9
 
10
#include <l4lib/types.h>
11
#include <l4/lib/list.h>
12
#include <l4/macros.h>
13
#include <l4/config.h>
14
#include INC_GLUE(memory.h)
15
#include <memcache/memcache.h>
16
#include <lib/idpool.h>
17
 
18
/*
19
 *
20
 * Filesystem layout:
21
 *
22
 * |---------------|
23
 * |  Superblock   |
24
 * |---------------|
25
 *
26
 * Superblock layout:
27
 *
28
 * |---------------|
29
 * | inode cache   |
30
 * |---------------|
31
 * | dentry cache  |
32
 * |---------------|
33
 * | block cache   |
34
 * |---------------|
35
 *
36
 */
37
 
38
/*
39
 * These fixed filesystem limits make it much easier to implement
40
 * filesystem space allocation.
41
 */
42
#define MEMFS_TOTAL_SIZE                SZ_4MB
43
#define MEMFS_TOTAL_INODES              128
44
#define MEMFS_TOTAL_BLOCKS              2000
45
#define MEMFS_FMAX_BLOCKS               120
46
#define MEMFS_BLOCK_SIZE                PAGE_SIZE
47
#define MEMFS_MAGIC                     0xB
48
#define MEMFS_NAME                      "memfs"
49
#define MEMFS_NAME_SIZE                 8
50
 
51
struct memfs_inode {
52
        u32 inum;       /* Inode number */
53
        u32 mode;       /* File permissions */
54
        u32 owner;      /* File owner */
55
        u64 atime;      /* Last access time */
56
        u64 mtime;      /* Last content modification */
57
        u64 ctime;      /* Last inode modification */
58
        u64 size;       /* Size of contents */
59
        void *block[MEMFS_FMAX_BLOCKS]; /* Number of blocks */
60
};
61
 
62
struct memfs_superblock {
63
        u32 magic;              /* Filesystem magic number */
64
        char name[8];
65
        int fsidx;              /* Index that gets orred to get global vnum */
66
        u32 blocksize;          /* Filesystem block size */
67
        u64 fmaxblocks;         /* Maximum number of blocks per file */
68
        u64 fssize;             /* Total size of filesystem */
69
        unsigned long root_vnum;        /* The root vnum of this superblock */
70
        struct link inode_cache_list;   /* Chain of alloc caches */
71
        struct link block_cache_list;   /* Chain of alloc caches */
72
        struct id_pool *ipool;                  /* Index pool for inodes */
73
        struct id_pool *bpool;                  /* Index pool for blocks */
74
        struct memfs_inode *inode[MEMFS_TOTAL_INODES];  /* Table of inodes */
75
        void *block[MEMFS_TOTAL_BLOCKS];        /* Table of fs blocks */
76
} __attribute__ ((__packed__));
77
 
78
#define MEMFS_DNAME_MAX                 32
79
struct memfs_dentry {
80
        u32 inum;                       /* Inode number */
81
        u32 offset;                     /* Dentry offset in its buffer */
82
        u16 rlength;                    /* Record length */
83
        u8  type;                       /* Record type */
84
        u8  name[MEMFS_DNAME_MAX];      /* Name string */
85
} __attribute__((__packed__));
86
 
87
extern struct vnode_ops memfs_vnode_operations;
88
extern struct superblock_ops memfs_superblock_operations;
89
extern struct file_ops memfs_file_operations;
90
 
91
int memfs_format_filesystem(void *buffer);
92
struct memfs_inode *memfs_create_inode(struct memfs_superblock *sb);
93
void memfs_register_fstype(struct link *);
94
struct superblock *memfs_get_superblock(void *block);
95
int memfs_generate_superblock(void *block);
96
 
97
void *memfs_alloc_block(struct memfs_superblock *sb);
98
int memfs_free_block(struct memfs_superblock *sb, void *block);
99
#endif /* __MEMFS_LAYOUT_H__ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.