summaryrefslogtreecommitdiffstats
path: root/threads/switch.h
diff options
context:
space:
mode:
Diffstat (limited to 'threads/switch.h')
-rw-r--r--threads/switch.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/threads/switch.h b/threads/switch.h
new file mode 100644
index 0000000..cc156b6
--- /dev/null
+++ b/threads/switch.h
@@ -0,0 +1,39 @@
1#ifndef THREADS_SWITCH_H
2#define THREADS_SWITCH_H
3
4#ifndef __ASSEMBLER__
5/* switch_thread()'s stack frame. */
6struct switch_threads_frame
7 {
8 uint32_t edi; /* 0: Saved %edi. */
9 uint32_t esi; /* 4: Saved %esi. */
10 uint32_t ebp; /* 8: Saved %ebp. */
11 uint32_t ebx; /* 12: Saved %ebx. */
12 void (*eip) (void); /* 16: Return address. */
13 struct thread *cur; /* 20: switch_threads()'s CUR argument. */
14 struct thread *next; /* 24: switch_threads()'s NEXT argument. */
15 };
16
17/* Switches from CUR, which must be the running thread, to NEXT,
18 which must also be running switch_threads(), returning CUR in
19 NEXT's context. */
20struct thread *switch_threads (struct thread *cur, struct thread *next);
21
22/* Stack frame for switch_entry(). */
23struct switch_entry_frame
24 {
25 void (*eip) (void);
26 };
27
28void switch_entry (void);
29
30/* Pops the CUR and NEXT arguments off the stack, for use in
31 initializing threads. */
32void switch_thunk (void);
33#endif
34
35/* Offsets used by switch.S. */
36#define SWITCH_CUR 20
37#define SWITCH_NEXT 24
38
39#endif /* threads/switch.h */