| #ifndef PPC_CONTEXT_H |
| #define PPC_CONTEXT_H |
| |
| struct context { |
| #define SP_LOC(ctx) (&(ctx)->sp) |
| unsigned long _sp; |
| unsigned long return_addr; |
| unsigned long sp; |
| unsigned long pc; |
| /* General registers */ |
| unsigned long regs[34]; |
| #define REG_R3 3 |
| #define REG_R4 7 |
| #define REG_R5 8 |
| #define REG_R6 9 |
| #define REG_R7 10 |
| /* Flags */ |
| /* Optional stack contents */ |
| unsigned long param[0]; |
| }; |
| |
| /* Create a new context in the given stack */ |
| struct context * |
| init_context(uint8_t *stack, uint32_t stack_size, int num_param); |
| |
| /* Switch context */ |
| struct context *switch_to(struct context *); |
| |
| /* Holds physical address of boot context */ |
| extern unsigned long __boot_ctx; |
| |
| /* This can always be safely used to refer to the boot context */ |
| #define boot_ctx ((struct context *) phys_to_virt(__boot_ctx)) |
| |
| #endif /* PPC_CONTEXT_H */ |