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 }; 100aef8914SRuss Cox 110aef8914SRuss Cox 12*a5fbfe41SRobert Morris // in-memory copy of an inode 130aef8914SRuss Cox struct inode { 140aef8914SRuss Cox uint dev; // Device number 150aef8914SRuss Cox uint inum; // Inode number 160aef8914SRuss Cox int ref; // Reference count 171ddfbbb1SFrans Kaashoek int flags; // I_BUSY, I_VALID 180aef8914SRuss Cox 190aef8914SRuss Cox short type; // copy of disk inode 200aef8914SRuss Cox short major; 210aef8914SRuss Cox short minor; 220aef8914SRuss Cox short nlink; 230aef8914SRuss Cox uint size; 240aef8914SRuss Cox uint addrs[NDIRECT+1]; 250aef8914SRuss Cox }; 261ddfbbb1SFrans Kaashoek #define I_BUSY 0x1 271ddfbbb1SFrans Kaashoek #define I_VALID 0x2 280aef8914SRuss Cox 29*a5fbfe41SRobert Morris // table mapping major device number to 30*a5fbfe41SRobert Morris // device functions 310aef8914SRuss Cox struct devsw { 320aef8914SRuss Cox int (*read)(struct inode*, char*, int); 330aef8914SRuss Cox int (*write)(struct inode*, char*, int); 340aef8914SRuss Cox }; 350aef8914SRuss Cox 360aef8914SRuss Cox extern struct devsw devsw[]; 370aef8914SRuss Cox 380aef8914SRuss Cox #define CONSOLE 1 39