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 12a5fbfe41SRobert 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 17*70d912b3SRobert Morris struct sleeplock lock; // protects everything below here 18*70d912b3SRobert Morris int valid; // inode has been read from disk? 190aef8914SRuss Cox 200aef8914SRuss Cox short type; // copy of disk inode 210aef8914SRuss Cox short major; 220aef8914SRuss Cox short minor; 230aef8914SRuss Cox short nlink; 240aef8914SRuss Cox uint size; 250aef8914SRuss Cox uint addrs[NDIRECT+1]; 260aef8914SRuss Cox }; 270aef8914SRuss Cox 28a5fbfe41SRobert Morris // table mapping major device number to 29a5fbfe41SRobert Morris // device functions 300aef8914SRuss Cox struct devsw { 310aef8914SRuss Cox int (*read)(struct inode*, char*, int); 320aef8914SRuss Cox int (*write)(struct inode*, char*, int); 330aef8914SRuss Cox }; 340aef8914SRuss Cox 350aef8914SRuss Cox extern struct devsw devsw[]; 360aef8914SRuss Cox 370aef8914SRuss Cox #define CONSOLE 1 38