Subversion Repositories HelenOS-historic

Rev

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

Rev 1760 Rev 1766
Line 59... Line 59...
59
 
59
 
60
static struct smp_config_operations *ops = NULL;
60
static struct smp_config_operations *ops = NULL;
61
 
61
 
62
void smp_init(void)
62
void smp_init(void)
63
{
63
{
64
    int status;
-
 
65
    __address l_apic_address, io_apic_address;
64
    __address l_apic_address, io_apic_address;
66
 
65
 
67
    if (acpi_madt) {
66
    if (acpi_madt) {
68
        acpi_madt_parse();
67
        acpi_madt_parse();
69
        ops = &madt_config_operations;
68
        ops = &madt_config_operations;
Line 71... Line 70...
71
    if (config.cpu_count == 1) {
70
    if (config.cpu_count == 1) {
72
        mps_init();
71
        mps_init();
73
        ops = &mps_config_operations;
72
        ops = &mps_config_operations;
74
    }
73
    }
75
 
74
 
76
    l_apic_address = (__address) frame_alloc_rc(ONE_FRAME, FRAME_ATOMIC | FRAME_KA, &status);
75
    l_apic_address = (__address) frame_alloc(ONE_FRAME, FRAME_ATOMIC | FRAME_KA);
77
    if (status != FRAME_OK)
76
    if (!l_apic_address)
78
        panic("cannot allocate address for l_apic\n");
77
        panic("cannot allocate address for l_apic\n");
79
 
78
 
80
    io_apic_address = (__address) frame_alloc_rc(ONE_FRAME, FRAME_ATOMIC | FRAME_KA, &status);
79
    io_apic_address = (__address) frame_alloc(ONE_FRAME, FRAME_ATOMIC | FRAME_KA);
81
    if (status != FRAME_OK)
80
    if (!io_apic_address)
82
        panic("cannot allocate address for io_apic\n");
81
        panic("cannot allocate address for io_apic\n");
83
 
82
 
84
    if (config.cpu_count > 1) {    
83
    if (config.cpu_count > 1) {    
85
        page_mapping_insert(AS_KERNEL, l_apic_address, (__address) l_apic,
84
        page_mapping_insert(AS_KERNEL, l_apic_address, (__address) l_apic,
86
                  PAGE_NOT_CACHEABLE);
85
                  PAGE_NOT_CACHEABLE);