/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 |