Subversion Repositories HelenOS

Rev

Rev 1901 | Rev 2000 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1901 Rev 1999
Line 59... Line 59...
59
#include <memstr.h>
59
#include <memstr.h>
60
#include <console/console.h>
60
#include <console/console.h>
61
#include <interrupt.h>
61
#include <interrupt.h>
62
#include <console/kconsole.h>
62
#include <console/kconsole.h>
63
#include <security/cap.h>
63
#include <security/cap.h>
-
 
64
#include <mm/rd.h>
64
 
65
 
65
#ifdef CONFIG_SMP
66
#ifdef CONFIG_SMP
66
#include <smp/smp.h>
67
#include <smp/smp.h>
67
#endif /* CONFIG_SMP */
68
#endif /* CONFIG_SMP */
68
 
69
 
Line 156... Line 157...
156
#ifdef CONFIG_TEST
157
#ifdef CONFIG_TEST
157
    test();
158
    test();
158
    printf("\nTest finished, please reboot.\n");
159
    printf("\nTest finished, please reboot.\n");
159
#else  /* CONFIG_TEST */
160
#else  /* CONFIG_TEST */
160
 
161
 
161
    task_t *utask;
-
 
162
    count_t i;
162
    count_t i;
163
    for (i = 0; i < init.cnt; i++) {
163
    for (i = 0; i < init.cnt; i++) {
164
        /*
164
        /*
165
         * Run user tasks.
165
         * Run user tasks, load RAM disk images.
166
         */
166
         */
167
       
167
       
168
        if (init.tasks[i].addr % FRAME_SIZE)
168
        if (init.tasks[i].addr % FRAME_SIZE) {
169
            panic("init[%d].addr is not frame aligned", i);
169
            printf("init[%d].addr is not frame aligned", i);
-
 
170
            continue;
-
 
171
        }
170
 
172
 
171
        utask = task_run_program((void *) init.tasks[i].addr, "USPACE");
173
        task_t *utask = task_run_program((void *) init.tasks[i].addr, "USPACE");
172
        if (utask) {
174
        if (utask) {
173
            /*
175
            /*
174
             * Set capabilities to init userspace tasks.
176
             * Set capabilities to init userspace tasks.
175
             */
177
             */
176
            cap_set(utask, CAP_CAP | CAP_MEM_MANAGER | CAP_IO_MANAGER | CAP_PREEMPT_CONTROL | CAP_IRQ_REG);
178
            cap_set(utask, CAP_CAP | CAP_MEM_MANAGER | CAP_IO_MANAGER | CAP_PREEMPT_CONTROL | CAP_IRQ_REG);
177
           
179
           
178
            if (!ipc_phone_0)
180
            if (!ipc_phone_0)
179
                ipc_phone_0 = &utask->answerbox;
181
                ipc_phone_0 = &utask->answerbox;
180
        } else
182
        } else {
-
 
183
            bool rd = init_rd((void *) init.tasks[i].addr);
-
 
184
           
-
 
185
            if (!rd)
181
            printf("Init task %zd not started.\n", i);
186
                printf("Init binary %zd not used.\n", i);
-
 
187
        }
182
    }
188
    }
183
 
189
 
184
 
190
 
185
    if (!stdin) {
191
    if (!stdin) {
186
        while (1) {
192
        while (1) {