1struct buf;
2struct context;
3struct file;
4struct inode;
5struct pipe;
6struct proc;
7struct rtcdate;
8struct spinlock;
9struct sleeplock;
10struct stat;
11struct superblock;
12
13// bio.c
14void binit(void);
15struct buf* bread(uint, uint);
16void brelse(struct buf*);
17void bwrite(struct buf*);
18
19// console.c
20void consoleinit(void);
21void cprintf(char*, ...);
22void consoleintr(int(*)(void));
23void panic(char*) __attribute__((noreturn));
24
25// exec.c
26int exec(char*, char**);
27
28// file.c
29struct file* filealloc(void);
30void fileclose(struct file*);
31struct file* filedup(struct file*);
32void fileinit(void);
33int fileread(struct file*, char*, int n);
34int filestat(struct file*, struct stat*);
35int filewrite(struct file*, char*, int n);
36
37// fs.c
38void readsb(int dev, struct superblock *sb);
39int dirlink(struct inode*, char*, uint);
40struct inode* dirlookup(struct inode*, char*, uint*);
41struct inode* ialloc(uint, short);
42struct inode* idup(struct inode*);
43void iinit(int dev);
44void ilock(struct inode*);
45void iput(struct inode*);
46void iunlock(struct inode*);
47void iunlockput(struct inode*);
48void iupdate(struct inode*);
49int namecmp(const char*, const char*);
50struct inode* namei(char*);
51struct inode* nameiparent(char*, char*);
52int readi(struct inode*, char*, uint, uint);
53void stati(struct inode*, struct stat*);
54int writei(struct inode*, char*, uint, uint);
55
56// ide.c
57void ideinit(void);
58void ideintr(void);
59void iderw(struct buf*);
60
61// ioapic.c
62void ioapicenable(int irq, int cpu);
63extern uchar ioapicid;
64void ioapicinit(void);
65
66// kalloc.c
67char* kalloc(void);
68void kfree(char*);
69void kinit1(void*, void*);
70void kinit2(void*, void*);
71
72// kbd.c
73void kbdintr(void);
74
75// lapic.c
76void cmostime(struct rtcdate *r);
77int lapicid(void);
78extern volatile uint* lapic;
79void lapiceoi(void);
80void lapicinit(void);
81void lapicstartap(uchar, uint);
82void microdelay(int);
83
84// log.c
85void initlog(int dev);
86void log_write(struct buf*);
87void begin_op();
88void end_op();
89
90// mp.c
91extern int ismp;
92void mpinit(void);
93
94// picirq.c
95void picenable(int);
96void picinit(void);
97
98// pipe.c
99int pipealloc(struct file**, struct file**);
100void pipeclose(struct pipe*, int);
101int piperead(struct pipe*, char*, int);
102int pipewrite(struct pipe*, char*, int);
103
104//PAGEBREAK: 16
105// proc.c
106int cpuid(void);
107void exit(void);
108int fork(void);
109int growproc(int);
110int kill(int);
111struct cpu* mycpu(void);
112struct proc* myproc();
113void pinit(void);
114void procdump(void);
115void scheduler(void) __attribute__((noreturn));
116void sched(void);
117void setproc(struct proc*);
118void sleep(void*, struct spinlock*);
119void userinit(void);
120int wait(void);
121void wakeup(void*);
122void yield(void);
123
124// swtch.S
125void swtch(struct context**, struct context*);
126
127// spinlock.c
128void acquire(struct spinlock*);
129void getcallerpcs(void*, uint*);
130int holding(struct spinlock*);
131void initlock(struct spinlock*, char*);
132void release(struct spinlock*);
133void pushcli(void);
134void popcli(void);
135
136// sleeplock.c
137void acquiresleep(struct sleeplock*);
138void releasesleep(struct sleeplock*);
139int holdingsleep(struct sleeplock*);
140void initsleeplock(struct sleeplock*, char*);
141
142// string.c
143int memcmp(const void*, const void*, uint);
144void* memmove(void*, const void*, uint);
145void* memset(void*, int, uint);
146char* safestrcpy(char*, const char*, int);
147int strlen(const char*);
148int strncmp(const char*, const char*, uint);
149char* strncpy(char*, const char*, int);
150
151// syscall.c
152int argint(int, int*);
153int argptr(int, char**, int);
154int argstr(int, char**);
155int fetchint(uint, int*);
156int fetchstr(uint, char**);
157void syscall(void);
158
159// timer.c
160void timerinit(void);
161
162// trap.c
163void idtinit(void);
164extern uint ticks;
165void tvinit(void);
166extern struct spinlock tickslock;
167
168// uart.c
169void uartinit(void);
170void uartintr(void);
171void uartputc(int);
172
173// vm.c
174void seginit(void);
175void kvmalloc(void);
176pde_t* setupkvm(void);
177char* uva2ka(pde_t*, char*);
178int allocuvm(pde_t*, uint, uint);
179int deallocuvm(pde_t*, uint, uint);
180void freevm(pde_t*);
181void inituvm(pde_t*, char*, uint);
182int loaduvm(pde_t*, char*, struct inode*, uint, uint);
183pde_t* copyuvm(pde_t*, uint);
184void switchuvm(struct proc*);
185void switchkvm(void);
186int copyout(pde_t*, uint, void*, uint);
187void clearpteu(pde_t *pgdir, char *uva);
188
189// number of elements in fixed-size array
190#define NELEM(x) (sizeof(x)/sizeof((x)[0]))
191