19936bffaSrsc struct file { 2f3685aa3Srsc enum { FD_NONE, FD_PIPE, FD_INODE } type; 39936bffaSrsc int ref; // reference count 49936bffaSrsc char readable; 59936bffaSrsc char writable; 69936bffaSrsc struct pipe *pipe; 707090dd7Srsc struct inode *ip; 89936bffaSrsc uint off; 99936bffaSrsc }; 10*0aef8914SRuss Cox 11*0aef8914SRuss Cox 12*0aef8914SRuss Cox // in-core file system types 13*0aef8914SRuss Cox 14*0aef8914SRuss Cox struct inode { 15*0aef8914SRuss Cox uint dev; // Device number 16*0aef8914SRuss Cox uint inum; // Inode number 17*0aef8914SRuss Cox int ref; // Reference count 18*0aef8914SRuss Cox int flags; // I_BUSY, I_VALID 19*0aef8914SRuss Cox 20*0aef8914SRuss Cox short type; // copy of disk inode 21*0aef8914SRuss Cox short major; 22*0aef8914SRuss Cox short minor; 23*0aef8914SRuss Cox short nlink; 24*0aef8914SRuss Cox uint size; 25*0aef8914SRuss Cox uint addrs[NDIRECT+1]; 26*0aef8914SRuss Cox }; 27*0aef8914SRuss Cox 28*0aef8914SRuss Cox #define I_BUSY 0x1 29*0aef8914SRuss Cox #define I_VALID 0x2 30*0aef8914SRuss Cox 31*0aef8914SRuss Cox 32*0aef8914SRuss Cox // device implementations 33*0aef8914SRuss Cox 34*0aef8914SRuss Cox struct devsw { 35*0aef8914SRuss Cox int (*read)(struct inode*, char*, int); 36*0aef8914SRuss Cox int (*write)(struct inode*, char*, int); 37*0aef8914SRuss Cox }; 38*0aef8914SRuss Cox 39*0aef8914SRuss Cox extern struct devsw devsw[]; 40*0aef8914SRuss Cox 41*0aef8914SRuss Cox #define CONSOLE 1 42