Line 68... |
Line 68... |
tid_t t;
|
tid_t t;
|
|
|
for(t = 1; t <= MAX_TASKS; t++) {
|
for(t = 1; t <= MAX_TASKS; t++) {
|
printf("\ntask TID=%d: PC=0x%x ", t, (unsigned)tasks[t].regs.pc & ~0x3);
|
printf("\ntask TID=%d: PC=0x%x ", t, (unsigned)tasks[t].regs.pc & ~0x3);
|
printf("SP(r1)=0x%x ", (unsigned)tasks[t].regs.sp);
|
printf("SP(r1)=0x%x ", (unsigned)tasks[t].regs.sp);
|
printf("SR[EXR]=%d ", (unsigned)(tasks[t].regs.pc & SPR_SR_EXR) >> 1);
|
printf("SR[IEE]=%d\n", (unsigned)tasks[t].regs.sr & SPR_SR_IEE);
|
printf("SR[SUPV]=%d\n", (unsigned)tasks[t].regs.pc & SPR_SR_SUPV);
|
printf("SR[TEE]=%d\n", (unsigned)tasks[t].regs.sr & SPR_SR_TEE);
|
|
printf("SR[SM]=%d\n", (unsigned)tasks[t].regs.sr & SPR_SR_SM);
|
for(i = 1; i < GPRS; i++) {
|
for(i = 1; i < GPRS; i++) {
|
if (i % 4 == 0)
|
if (i % 4 == 0)
|
printf("\n");
|
printf("\n");
|
printf("r%d=0x%.8x ", i, (unsigned)tasks[t].regs.gprs[i]);
|
printf("r%d=0x%.8x ", i, (unsigned)tasks[t].regs.gprs[i]);
|
}
|
}
|
Line 276... |
Line 277... |
tasks_entries();
|
tasks_entries();
|
|
|
for(t = 0; t <= MAX_TASKS; t++) {
|
for(t = 0; t <= MAX_TASKS; t++) {
|
tasks[t].regs.sp = (unsigned long)stacks[t] + STACK_SIZE - 4;
|
tasks[t].regs.sp = (unsigned long)stacks[t] + STACK_SIZE - 4;
|
/* Disable EXR for kernel context */
|
/* Disable EXR for kernel context */
|
tasks[t].regs.sr |= (t == 0 ? SPR_SR_SUPV : SPR_SR_EXR | SPR_SR_EIR);
|
tasks[t].regs.sr |= (t == 0 ? SPR_SR_SM : SPR_SR_TEE | SPR_SR_IEE);
|
tasks[t].regs.gprs[1] = t;
|
tasks[t].regs.gprs[1] = t;
|
}
|
}
|
|
|
/* First task runs in seprvisor mode */
|
/* First task runs in seprvisor mode */
|
tasks[1].regs.sr |= SPR_SR_SUPV;
|
tasks[1].regs.sr |= SPR_SR_SM;
|
|
|
/* TID=0 is reserved for kernel use */
|
/* TID=0 is reserved for kernel use */
|
kernel_context = (unsigned long *)&tasks[0].regs;
|
kernel_context = (unsigned long *)&tasks[0].regs;
|
|
|
/* First task to be scheduled is task TID=1 */
|
/* First task to be scheduled is task TID=1 */
|