summaryrefslogtreecommitdiffstats
path: root/src/include/linux/fs.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/linux/fs.h')
-rw-r--r--src/include/linux/fs.h202
1 files changed, 202 insertions, 0 deletions
diff --git a/src/include/linux/fs.h b/src/include/linux/fs.h
new file mode 100644
index 0000000..7a90b10
--- /dev/null
+++ b/src/include/linux/fs.h
@@ -0,0 +1,202 @@
1/*
2 * This file has definitions for some important file table
3 * structures etc.
4 */
5
6#ifndef _FS_H
7#define _FS_H
8
9#include <sys/types.h>
10
11/* devices are as follows: (same as minix, so we can use the minix
12 * file system. These are major numbers.)
13 *
14 * 0 - unused (nodev)
15 * 1 - /dev/mem
16 * 2 - /dev/fd
17 * 3 - /dev/hd
18 * 4 - /dev/ttyx
19 * 5 - /dev/tty
20 * 6 - /dev/lp
21 * 7 - unnamed pipes
22 */
23
24#define IS_SEEKABLE(x) ((x)>=1 && (x)<=3)
25
26#define READ 0
27#define WRITE 1
28#define READA 2 /* read-ahead - don't pause */
29#define WRITEA 3 /* "write-ahead" - silly, but somewhat useful */
30
31void buffer_init(long buffer_end);
32
33#define MAJOR(a) (((unsigned)(a))>>8)
34#define MINOR(a) ((a)&0xff)
35
36#define NAME_LEN 14
37#define ROOT_INO 1
38
39#define I_MAP_SLOTS 8
40#define Z_MAP_SLOTS 8
41#define SUPER_MAGIC 0x137F
42
43#define NR_OPEN 20
44#define NR_INODE 32
45#define NR_FILE 64
46#define NR_SUPER 8
47#define NR_HASH 307
48#define NR_BUFFERS nr_buffers
49#define BLOCK_SIZE 1024
50#define BLOCK_SIZE_BITS 10
51#ifndef NULL
52#define NULL ((void *) 0)
53#endif
54
55#define INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct d_inode)))
56#define DIR_ENTRIES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct dir_entry)))
57
58#define PIPE_HEAD(inode) ((inode).i_zone[0])
59#define PIPE_TAIL(inode) ((inode).i_zone[1])
60#define PIPE_SIZE(inode) ((PIPE_HEAD(inode)-PIPE_TAIL(inode))&(PAGE_SIZE-1))
61#define PIPE_EMPTY(inode) (PIPE_HEAD(inode)==PIPE_TAIL(inode))
62#define PIPE_FULL(inode) (PIPE_SIZE(inode)==(PAGE_SIZE-1))
63#define INC_PIPE(head) \
64__asm__("incl %0\n\tandl $4095,%0"::"m" (head))
65
66typedef char buffer_block[BLOCK_SIZE];
67
68struct buffer_head {
69 char * b_data; /* pointer to data block (1024 bytes) */
70 unsigned long b_blocknr; /* block number */
71 unsigned short b_dev; /* device (0 = free) */
72 unsigned char b_uptodate;
73 unsigned char b_dirt; /* 0-clean,1-dirty */
74 unsigned char b_count; /* users using this block */
75 unsigned char b_lock; /* 0 - ok, 1 -locked */
76 struct task_struct * b_wait;
77 struct buffer_head * b_prev;
78 struct buffer_head * b_next;
79 struct buffer_head * b_prev_free;
80 struct buffer_head * b_next_free;
81};
82
83struct d_inode {
84 unsigned short i_mode;
85 unsigned short i_uid;
86 unsigned long i_size;
87 unsigned long i_time;
88 unsigned char i_gid;
89 unsigned char i_nlinks;
90 unsigned short i_zone[9];
91};
92
93struct m_inode {
94 unsigned short i_mode;
95 unsigned short i_uid;
96 unsigned long i_size;
97 unsigned long i_mtime;
98 unsigned char i_gid;
99 unsigned char i_nlinks;
100 unsigned short i_zone[9];
101/* these are in memory also */
102 struct task_struct * i_wait;
103 unsigned long i_atime;
104 unsigned long i_ctime;
105 unsigned short i_dev;
106 unsigned short i_num;
107 unsigned short i_count;
108 unsigned char i_lock;
109 unsigned char i_dirt;
110 unsigned char i_pipe;
111 unsigned char i_mount;
112 unsigned char i_seek;
113 unsigned char i_update;
114};
115
116struct file {
117 unsigned short f_mode;
118 unsigned short f_flags;
119 unsigned short f_count;
120 struct m_inode * f_inode;
121 off_t f_pos;
122};
123
124struct super_block {
125 unsigned short s_ninodes;
126 unsigned short s_nzones;
127 unsigned short s_imap_blocks;
128 unsigned short s_zmap_blocks;
129 unsigned short s_firstdatazone;
130 unsigned short s_log_zone_size;
131 unsigned long s_max_size;
132 unsigned short s_magic;
133/* These are only in memory */
134 struct buffer_head * s_imap[8];
135 struct buffer_head * s_zmap[8];
136 unsigned short s_dev;
137 struct m_inode * s_isup;
138 struct m_inode * s_imount;
139 unsigned long s_time;
140 struct task_struct * s_wait;
141 unsigned char s_lock;
142 unsigned char s_rd_only;
143 unsigned char s_dirt;
144};
145
146struct d_super_block {
147 unsigned short s_ninodes;
148 unsigned short s_nzones;
149 unsigned short s_imap_blocks;
150 unsigned short s_zmap_blocks;
151 unsigned short s_firstdatazone;
152 unsigned short s_log_zone_size;
153 unsigned long s_max_size;
154 unsigned short s_magic;
155};
156
157struct dir_entry {
158 unsigned short inode;
159 char name[NAME_LEN];
160};
161
162extern struct m_inode inode_table[NR_INODE];
163extern struct file file_table[NR_FILE];
164extern struct super_block super_block[NR_SUPER];
165extern struct buffer_head * start_buffer;
166extern int nr_buffers;
167
168extern void check_disk_change(int dev);
169extern int floppy_change(unsigned int nr);
170extern int ticks_to_floppy_on(unsigned int dev);
171extern void floppy_on(unsigned int dev);
172extern void floppy_off(unsigned int dev);
173extern void truncate(struct m_inode * inode);
174extern void sync_inodes(void);
175extern void wait_on(struct m_inode * inode);
176extern int bmap(struct m_inode * inode,int block);
177extern int create_block(struct m_inode * inode,int block);
178extern struct m_inode * namei(const char * pathname);
179extern int open_namei(const char * pathname, int flag, int mode,
180 struct m_inode ** res_inode);
181extern void iput(struct m_inode * inode);
182extern struct m_inode * iget(int dev,int nr);
183extern struct m_inode * get_empty_inode(void);
184extern struct m_inode * get_pipe_inode(void);
185extern struct buffer_head * get_hash_table(int dev, int block);
186extern struct buffer_head * getblk(int dev, int block);
187extern void ll_rw_block(int rw, struct buffer_head * bh);
188extern void brelse(struct buffer_head * buf);
189extern struct buffer_head * bread(int dev,int block);
190extern void bread_page(unsigned long addr,int dev,int b[4]);
191extern struct buffer_head * breada(int dev,int block,...);
192extern int new_block(int dev);
193extern void free_block(int dev, int block);
194extern struct m_inode * new_inode(int dev);
195extern void free_inode(struct m_inode * inode);
196extern int sync_dev(int dev);
197extern struct super_block * get_super(int dev);
198extern int ROOT_DEV;
199
200extern void mount_root(void);
201
202#endif