/kernel/trunk/contrib/conf/spmips.conf |
---|
21,7 → 21,8 |
(0x180003fd, tty0, 0, 5, 1), |
(0x180003fe, tty0, 0, 6, 1), |
(0x180003ff, tty0, 0, 7, 1), |
(0x1c000000, hfs0, 0, 0, 16)) |
(0x1c000000, hfs0, 0, 0, 16), |
(0x20000000, initmem0, 0, 0, 0x20000)) |
} |
OBJECT cbus-space TYPE memory-space { |
36,6 → 37,16 |
queue: cpu0 |
size: 0x08000000 |
} |
OBJECT initmem0 TYPE ram { |
image: initmem0-image |
} |
OBJECT initmem0-image TYPE image { |
queue: cpu0 |
size: 0x20000 |
files: (("../../../uspace/init/init", "ro", 0,0)) |
} |
OBJECT rom0 TYPE rom { |
image: rom0-image |
} |
/kernel/trunk/contrib/conf/msim.conf |
---|
7,7 → 7,7 |
add rwm firstmem 0x0 128k load "/dev/zero" |
add rwm mainmem 0x00100000 16M load "kernel.bin" |
add rom startmem 0x1fc00000 1k load "load.bin" |
add rwm init 0x00110000 64k load "init" |
add rwm init 0x20000000 1M load "init |
add dprinter printer 0x10000000 |
add dkeyboard keyboard 0x10000000 2 |
/kernel/trunk/generic/src/main/kinit.c |
---|
144,7 → 144,7 |
* Create the first user task. |
*/ |
if (KA2PA(config.init_addr) % FRAME_SIZE) |
if (config.init_addr % FRAME_SIZE) |
panic("config.init_addr is not frame aligned"); |
as = as_create(0); |
161,7 → 161,10 |
* Create the text as_area and initialize its mapping. |
*/ |
frame = KA2PA(config.init_addr); |
frame = config.init_addr; |
if (IS_KA(frame)) |
frame = KA2PA(frame); |
frames = config.init_size / FRAME_SIZE; |
if (config.init_size % FRAME_SIZE > 0) |
frames++; |
/kernel/trunk/arch/mips32/include/asm/regname.h |
---|
62,8 → 62,8 |
#define s8 30 |
#define ra 31 |
#define index 0 |
#define random 1 |
#define rindex 0 |
#define rrandom 1 |
#define entrylo0 2 |
#define entrylo1 3 |
#define context 4 |
76,12 → 76,12 |
#define status 12 |
#define cause 13 |
#define epc 14 |
#define config 16 |
#define rconfig 16 |
#define lladdr 17 |
#define watchlo 18 |
#define watchhi 19 |
#define xcontext 20 |
#define debug 23 |
#define rdebug 23 |
#define depc 24 |
#define eepc 30 |
/kernel/trunk/arch/mips32/src/exception.c |
---|
40,6 → 40,7 |
#include <func.h> |
#include <console/kconsole.h> |
#include <arch/debugger.h> |
#include <syscall/syscall.h> |
static char * exctable[] = { |
"Interrupt","TLB Modified","TLB Invalid","TLB Invalid Store", |
134,7 → 135,22 |
exc_dispatch(i+INT_OFFSET, pstate); |
} |
#include <debug.h> |
/** Handle syscall userspace call */ |
static void syscall_exception(int n, void *data) |
{ |
struct exception_regdump *pstate = (struct exception_regdump *)data; |
if (pstate->a3 < SYSCALL_END) |
pstate->v0 = syscall_table[pstate->a3](pstate->a0, |
pstate->a1, |
pstate->a2); |
else |
panic("Undefined syscall %d", pstate->a3); |
pstate->epc += 4; |
} |
void exception(struct exception_regdump *pstate) |
{ |
int cause; |
190,4 → 206,5 |
#ifdef CONFIG_FPU_LAZY |
exc_register(EXC_CpU, "cpunus", cpuns_exception); |
#endif |
exc_register(EXC_Sys, "syscall", syscall_exception); |
} |
/kernel/trunk/arch/mips32/src/mips32.c |
---|
95,6 → 95,10 |
debugger_init(); |
arc_print_memory_map(); |
arc_print_devices(); |
/* Setup usermode...*/ |
config.init_addr = 0x20000000; |
config.init_size = FRAME_SIZE; |
} |
void arch_post_mm_init(void) |
109,6 → 113,14 |
{ |
} |
/* Stack pointer saved when entering user mode */ |
/* TODO: How do we do it on SMP system???? */ |
/* Why the hell moves the linker the variable 64K away in assembler |
* when not in .text section ???????? |
*/ |
__address supervisor_sp __attribute__ ((section (".text"))); |
void userspace(void) |
{ |
/* EXL=1, UM=1, IE=1 */ |
122,10 → 134,6 |
; |
} |
/* Stack pointer saved when entering user mode */ |
/* TODO: How do we do it on SMP system???? */ |
__address supervisor_sp; |
void before_thread_runs_arch(void) |
{ |
supervisor_sp = (__address) &THREAD->kstack[THREAD_STACK_SIZE-SP_DELTA]; |