forked from xuos/xiuos
Start supporting smp.
This commit is contained in:
parent
e054bb4c59
commit
9b92c71a21
|
@ -84,11 +84,10 @@ _boot_start:
|
|||
@ check cpu id - cpu0 is primary cpu
|
||||
cmp r5, #0
|
||||
beq primary_cpu_init
|
||||
bx r4 @ for secondary cpus, jump to argument function pointer passed in by ROM
|
||||
|
||||
@ control should not return from the secondary cpu entry point
|
||||
b .
|
||||
bl bootmain @ for secondary cpus, jump to argument function pointer passed in by ROM
|
||||
|
||||
bl .
|
||||
|
||||
primary_cpu_init:
|
||||
/* init .bss */
|
||||
/* clear the .bss section (zero init) */
|
||||
|
|
|
@ -213,8 +213,14 @@ static int _is_interruptable(void)
|
|||
return !(val & DIS_INT);
|
||||
}
|
||||
|
||||
int _cur_cpu_id()
|
||||
{
|
||||
return cpu_get_current();
|
||||
}
|
||||
|
||||
static struct XiziTrapDriver xizi_trap_driver = {
|
||||
.sys_irq_init = _sys_irq_init,
|
||||
.cur_cpu_id = _cur_cpu_id,
|
||||
|
||||
.cpu_irq_enable = _cpu_irq_enable,
|
||||
.cpu_irq_disable = _cpu_irq_disable,
|
||||
|
|
|
@ -215,8 +215,14 @@ static int _is_interruptable(void)
|
|||
return !(val & DIS_INT);
|
||||
}
|
||||
|
||||
int _cur_cpu_id()
|
||||
{
|
||||
return cpu_get_current();
|
||||
}
|
||||
|
||||
static struct XiziTrapDriver xizi_trap_driver = {
|
||||
.sys_irq_init = _sys_irq_init,
|
||||
.cur_cpu_id = _cur_cpu_id,
|
||||
|
||||
.cpu_irq_enable = _cpu_irq_enable,
|
||||
.cpu_irq_disable = _cpu_irq_disable,
|
||||
|
|
|
@ -60,6 +60,7 @@ struct XiziTrapDriver {
|
|||
uint32_t curr_int[NR_CPU];
|
||||
|
||||
void (*sys_irq_init)();
|
||||
int (*cur_cpu_id)();
|
||||
|
||||
void (*cpu_irq_enable)();
|
||||
void (*cpu_irq_disable)();
|
||||
|
|
|
@ -53,11 +53,20 @@ int main(void)
|
|||
if (!hardkernel_init(&hardkernel_tag)) {
|
||||
return -1;
|
||||
}
|
||||
/* init softkernel */
|
||||
if (!softkernel_init(&hardkernel_tag, &softkernel_tag)) {
|
||||
return -1;
|
||||
|
||||
struct TraceTag main_intr_tag;
|
||||
AchieveResourceTag(&main_intr_tag, &hardkernel_tag, "intr-ac-resource");
|
||||
struct XiziTrapDriver* p_intr_driver = (struct XiziTrapDriver*)AchieveResource(&main_intr_tag);
|
||||
int cpu_id = p_intr_driver->cur_cpu_id();
|
||||
if (cpu_id == 0) {
|
||||
/* init softkernel */
|
||||
if (!softkernel_init(&hardkernel_tag, &softkernel_tag)) {
|
||||
return -1;
|
||||
}
|
||||
show_xizi_bar();
|
||||
|
||||
int cpu_count = NR_CPU;
|
||||
}
|
||||
show_xizi_bar();
|
||||
|
||||
/* start first task */
|
||||
char* init_task_param[2] = { "/app/init", 0 };
|
||||
|
|
Loading…
Reference in New Issue