/kernel/trunk/arch/ppc32/include/boot/boot.h |
---|
41,6 → 41,11 |
#include <arch/types.h> |
typedef struct { |
__address addr; |
__u32 size; |
} utask_t; |
typedef struct { |
__address start; |
__u32 size; |
} memzone_t; |
60,6 → 65,7 |
} screen_t; |
typedef struct { |
utask_t init; |
memmap_t memmap; |
screen_t screen; |
} bootinfo_t; |
/kernel/trunk/arch/ppc32/include/asm.h |
---|
132,4 → 132,6 |
void cpu_halt(void); |
void asm_delay_loop(__u32 t); |
extern void userspace_asm(__address uspace_uarg, __address stack, __address entry); |
#endif |
/kernel/trunk/arch/ppc32/Makefile.inc |
---|
78,5 → 78,5 |
arch/$(ARCH)/src/mm/as.c \ |
arch/$(ARCH)/src/mm/frame.c \ |
arch/$(ARCH)/src/mm/memory_init.c \ |
arch/$(ARCH)/src/mm/page.c \ |
arch/$(ARCH)/src/mm/tlb.c |
arch/$(ARCH)/src/mm/page.c \ |
arch/$(ARCH)/src/mm/tlb.c |
/kernel/trunk/arch/ppc32/src/asm.S |
---|
30,10 → 30,39 |
.text |
.global userspace_asm |
.global iret |
.global memsetb |
.global memcpy |
userspace_asm: |
# r3 = uspace_uarg |
# r4 = stack |
# r5 = entry |
mfmsr r31 |
rlwinm r31, r31, 0, 17, 15 |
mtmsr r31 |
# set entry point |
mtsrr0 r5 |
# set problem state, enable interrupts |
ori r31, r31, 1 << 14 |
ori r31, r31, 1 << 15 |
mtsrr1 r31 |
# set stack |
mr sp, r4 |
# jump to userspace |
rfi |
iret: |
lwz r3, 144(sp) |
mtxer r3 |
/kernel/trunk/arch/ppc32/src/ppc32.c |
---|
32,6 → 32,8 |
#include <arch/drivers/cuda.h> |
#include <arch/mm/memory_init.h> |
#include <arch/interrupt.h> |
#include <userspace.h> |
#include <proc/uarg.h> |
bootinfo_t bootinfo; |
45,6 → 47,11 |
ppc32_console_init(); |
cuda_init(); |
/* Setup usermode */ |
init.cnt = 1; |
init.tasks[0].addr = PA2KA(bootinfo.init.addr); |
init.tasks[0].size = bootinfo.init.size; |
} |
void arch_post_mm_init(void) |
64,3 → 71,11 |
{ |
} |
void userspace(uspace_arg_t *kernel_uarg) |
{ |
userspace_asm((__address) kernel_uarg->uspace_uarg, (__address) kernel_uarg->uspace_stack, (__address) kernel_uarg->uspace_entry); |
/* Unreachable */ |
for (;;) |
; |
} |
/kernel/trunk/arch/ppc32/src/dummy.s |
---|
44,9 → 44,6 |
tlb_invalidate_pages: |
b tlb_invalidate_pages |
userspace: |
b userspace |
sys_tls_set: |
b sys_tls_set |