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); |