Changeset 021d471 in mainline


Ignore:
Timestamp:
2006-02-06T15:56:40Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9b9f195
Parents:
f5935ed
Message:

Added MIPS userspace. Currently can't make it work in gxemul.

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • arch/mips32/include/asm/regname.h

    rf5935ed r021d471  
    6363#define ra      31
    6464
    65 #define index           0
    66 #define random          1
     65#define rindex          0
     66#define rrandom         1
    6767#define entrylo0        2
    6868#define entrylo1        3
     
    7777#define cause           13
    7878#define epc             14
    79 #define config          16
     79#define rconfig         16
    8080#define lladdr          17
    8181#define watchlo         18
    8282#define watchhi         19
    8383#define xcontext        20
    84 #define debug           23
     84#define rdebug          23
    8585#define depc            24
    8686#define eepc            30
  • arch/mips32/src/exception.c

    rf5935ed r021d471  
    4141#include <console/kconsole.h>
    4242#include <arch/debugger.h>
     43#include <syscall/syscall.h>
    4344
    4445static char * exctable[] = {
     
    135136}
    136137
     138#include <debug.h>
     139/** Handle syscall userspace call */
     140static void syscall_exception(int n, void *data)
     141{
     142        struct exception_regdump *pstate = (struct exception_regdump *)data;
     143       
     144        if (pstate->a3 < SYSCALL_END)
     145                pstate->v0 = syscall_table[pstate->a3](pstate->a0,
     146                                                       pstate->a1,
     147                                                       pstate->a2);
     148        else
     149                panic("Undefined syscall %d", pstate->a3);
     150        pstate->epc += 4;
     151}
     152
    137153
    138154void exception(struct exception_regdump *pstate)
     
    191207        exc_register(EXC_CpU, "cpunus", cpuns_exception);
    192208#endif
    193 }
     209        exc_register(EXC_Sys, "syscall", syscall_exception);
     210}
  • arch/mips32/src/mips32.c

    rf5935ed r021d471  
    9696        arc_print_memory_map();
    9797        arc_print_devices();
     98
     99        /* Setup usermode...*/
     100        config.init_addr = 0x20000000;
     101        config.init_size = FRAME_SIZE;
    98102}
    99103
     
    110114}
    111115
     116/* Stack pointer saved when entering user mode */
     117/* TODO: How do we do it on SMP system???? */
     118
     119/* Why the hell moves the linker the variable 64K away in assembler
     120 * when not in .text section ????????
     121 */
     122__address supervisor_sp __attribute__ ((section (".text")));
     123
    112124void userspace(void)
    113125{
     
    123135}
    124136
    125 /* Stack pointer saved when entering user mode */
    126 /* TODO: How do we do it on SMP system???? */
    127 __address supervisor_sp;
    128 
    129137void before_thread_runs_arch(void)
    130138{
  • contrib/conf/msim.conf

    rf5935ed r021d471  
    88add rwm mainmem         0x00100000      16M     load "kernel.bin"
    99add rom startmem        0x1fc00000      1k      load "load.bin"
    10 add rwm init            0x00110000      64k     load "init"
     10add rwm init            0x20000000      1M      load "init
    1111
    1212add dprinter printer 0x10000000
  • contrib/conf/spmips.conf

    rf5935ed r021d471  
    2222              (0x180003fe,      tty0,         0,            6,          1),
    2323              (0x180003ff,      tty0,         0,            7,          1),
    24               (0x1c000000,      hfs0,         0,            0,         16))
     24              (0x1c000000,      hfs0,         0,            0,         16),
     25              (0x20000000,      initmem0,     0,            0,  0x20000))
    2526}
    2627
     
    3738        size: 0x08000000
    3839}
     40
     41OBJECT initmem0 TYPE ram {
     42        image: initmem0-image
     43}
     44OBJECT initmem0-image TYPE image {
     45        queue: cpu0
     46        size: 0x20000
     47        files: (("../../../uspace/init/init", "ro", 0,0))
     48}
     49
    3950OBJECT rom0 TYPE rom {
    4051        image: rom0-image
  • generic/src/main/kinit.c

    rf5935ed r021d471  
    145145                 */
    146146               
    147                 if (KA2PA(config.init_addr) % FRAME_SIZE)
     147                if (config.init_addr % FRAME_SIZE)
    148148                        panic("config.init_addr is not frame aligned");
    149149               
     
    162162                 */
    163163               
    164                 frame = KA2PA(config.init_addr);
     164                frame = config.init_addr;
     165                if (IS_KA(frame))
     166                        frame = KA2PA(frame);
     167
    165168                frames = config.init_size / FRAME_SIZE;
    166169                if (config.init_size % FRAME_SIZE > 0)
Note: See TracChangeset for help on using the changeset viewer.