-#ifndef HEADER_SWITCH_H
-#define HEADER_SWITCH_H 1
+#ifndef THREADS_SWITCH_H
+#define THREADS_SWITCH_H
#ifndef __ASSEMBLER__
/* switch_thread()'s stack frame. */
-struct switch_frame
+struct switch_threads_frame
{
- uint32_t ebx; /* 0: Saved %ebx. */
- uint32_t ebp; /* 4: Saved %ebp. */
- uint32_t esi; /* 8: Saved %esi. */
- uint32_t edi; /* 12: Saved %edi. */
+ uint32_t edi; /* 0: Saved %edi. */
+ uint32_t esi; /* 4: Saved %esi. */
+ uint32_t ebp; /* 8: Saved %ebp. */
+ uint32_t ebx; /* 12: Saved %ebx. */
void (*eip) (void); /* 16: Return address. */
- struct thread *cur; /* 20: thread_switch()'s CUR argument. */
- struct thread *next; /* 24: thread_switch()'s NEXT argument. */
+ struct thread *cur; /* 20: switch_threads()'s CUR argument. */
+ struct thread *next; /* 24: switch_threads()'s NEXT argument. */
};
/* Switches from CUR, which must be the running thread, to NEXT,
- which must also be running thread_switch(), returning CUR in
+ which must also be running switch_threads(), returning CUR in
NEXT's context. */
struct thread *switch_threads (struct thread *cur, struct thread *next);
-struct switch_thunk_frame
+/* Stack frame for switch_entry(). */
+struct switch_entry_frame
{
void (*eip) (void);
};
+void switch_entry (void);
+
/* Pops the CUR and NEXT arguments off the stack, for use in
initializing threads. */
void switch_thunk (void);
#define SWITCH_CUR 20
#define SWITCH_NEXT 24
-#endif /* switch.h */
+#endif /* threads/switch.h */