2006-09-06 18:38:56 +00:00
|
|
|
struct file {
|
2019-06-13 14:29:27 +00:00
|
|
|
enum { FD_NONE, FD_PIPE, FD_INODE, FD_DEVICE } type;
|
2006-07-16 02:04:58 +00:00
|
|
|
int ref; // reference count
|
2006-06-27 14:35:53 +00:00
|
|
|
char readable;
|
2006-09-06 18:06:04 +00:00
|
|
|
char writable;
|
2019-06-13 14:29:27 +00:00
|
|
|
struct pipe *pipe; // FD_PIPE
|
|
|
|
struct inode *ip; // FD_INODE and FD_DEVICE
|
|
|
|
uint off; // FD_INODE
|
|
|
|
short major; // FD_DEVICE
|
2006-06-27 14:35:53 +00:00
|
|
|
};
|
2009-08-08 08:07:30 +00:00
|
|
|
|
2019-08-15 14:35:59 +00:00
|
|
|
#define major(dev) ((dev) >> 16 & 0xFFFF)
|
|
|
|
#define minor(dev) ((dev) & 0xFFFF)
|
|
|
|
#define mkdev(m,n) ((uint)((m)<<16| (n)))
|
2009-08-08 08:07:30 +00:00
|
|
|
|
2011-10-11 10:41:37 +00:00
|
|
|
// in-memory copy of an inode
|
2009-08-08 08:07:30 +00:00
|
|
|
struct inode {
|
|
|
|
uint dev; // Device number
|
|
|
|
uint inum; // Inode number
|
|
|
|
int ref; // Reference count
|
2017-08-08 17:48:48 +00:00
|
|
|
struct sleeplock lock; // protects everything below here
|
|
|
|
int valid; // inode has been read from disk?
|
2009-08-08 08:07:30 +00:00
|
|
|
|
|
|
|
short type; // copy of disk inode
|
|
|
|
short major;
|
|
|
|
short minor;
|
|
|
|
short nlink;
|
|
|
|
uint size;
|
|
|
|
uint addrs[NDIRECT+1];
|
|
|
|
};
|
|
|
|
|
2019-06-13 14:29:27 +00:00
|
|
|
// map major device number to device functions.
|
2009-08-08 08:07:30 +00:00
|
|
|
struct devsw {
|
2019-06-13 14:29:27 +00:00
|
|
|
int (*read)(int, uint64, int);
|
|
|
|
int (*write)(int, uint64, int);
|
2009-08-08 08:07:30 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
extern struct devsw devsw[];
|
|
|
|
|
|
|
|
#define CONSOLE 1
|