Subversion Repositories HelenOS

Rev

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

Rev 2927 Rev 3001
Line 155... Line 155...
155
    interrupts_enable();
155
    interrupts_enable();
156
 
156
 
157
    count_t i;
157
    count_t i;
158
    for (i = 0; i < init.cnt; i++) {
158
    for (i = 0; i < init.cnt; i++) {
159
        /*
159
        /*
-
 
160
         * Parse initial images
-
 
161
         *   - Run user tasks
160
         * Run user tasks, load RAM disk images.
162
         *   - load RAM disk images.
-
 
163
         *   - register program loader
161
         */
164
         */
162
       
165
       
163
        if (init.tasks[i].addr % FRAME_SIZE) {
166
        if (init.tasks[i].addr % FRAME_SIZE) {
164
            printf("init[%d].addr is not frame aligned", i);
167
            printf("init[%d].addr is not frame aligned", i);
165
            continue;
168
            continue;
166
        }
169
        }
167
 
170
 
-
 
171
        task_t *utask;
168
        task_t *utask = task_run_program((void *) init.tasks[i].addr,
172
        int rc = task_parse_initial((void *) init.tasks[i].addr,
169
            "uspace");
173
            "uspace", &utask);
170
       
174
       
171
        if (utask) {
175
        if (rc == 0 && utask) {
-
 
176
            /* Make the task ready */
-
 
177
            task_ready(utask);
-
 
178
 
172
            /*
179
            /*
173
             * Set capabilities to init userspace tasks.
180
             * Set capabilities to init userspace tasks.
174
             */
181
             */
175
            cap_set(utask, CAP_CAP | CAP_MEM_MANAGER |
182
            cap_set(utask, CAP_CAP | CAP_MEM_MANAGER |
176
                CAP_IO_MANAGER | CAP_PREEMPT_CONTROL | CAP_IRQ_REG);
183
                CAP_IO_MANAGER | CAP_PREEMPT_CONTROL | CAP_IRQ_REG);
-
 
184
 
177
           
185
           
178
            if (!ipc_phone_0)
186
            if (!ipc_phone_0)
179
                ipc_phone_0 = &utask->answerbox;
187
                ipc_phone_0 = &utask->answerbox;
-
 
188
        } else if (rc == 0) {
-
 
189
            /* It was the program loader and was registered */
180
        } else {
190
        } else {
-
 
191
            /* RAM disk image */
181
            int rd = init_rd((rd_header *) init.tasks[i].addr,
192
            int rd = init_rd((rd_header *) init.tasks[i].addr,
182
                init.tasks[i].size);
193
                init.tasks[i].size);
183
           
194
           
184
            if (rd != RE_OK)
195
            if (rd != RE_OK)
185
                printf("Init binary %zd not used, error code %d.\n", i, rd);
196
                printf("Init binary %zd not used, error code %d.\n", i, rd);