1 #ifndef THREADS_SWITCH_H
2 #define THREADS_SWITCH_H
5 /* switch_thread()'s stack frame. */
6 struct switch_threads_frame
8 uint32_t ebx; /* 0: Saved %ebx. */
9 uint32_t ebp; /* 4: Saved %ebp. */
10 uint32_t esi; /* 8: Saved %esi. */
11 uint32_t edi; /* 12: Saved %edi. */
12 void (*eip) (void); /* 16: Return address. */
13 struct thread *cur; /* 20: thread_switch()'s CUR argument. */
14 struct thread *next; /* 24: thread_switch()'s NEXT argument. */
17 /* Switches from CUR, which must be the running thread, to NEXT,
18 which must also be running thread_switch(), returning CUR in
20 struct thread *switch_threads (struct thread *cur, struct thread *next);
22 struct switch_entry_frame
27 void switch_entry (void);
29 /* Pops the CUR and NEXT arguments off the stack, for use in
30 initializing threads. */
31 void switch_thunk (void);
34 /* Offsets used by switch.S. */
36 #define SWITCH_NEXT 24
38 #endif /* threads/switch.h */