diff options
Diffstat (limited to 'i386/i386/apic.c')
-rw-r--r-- | i386/i386/apic.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/i386/i386/apic.c b/i386/i386/apic.c index f0b4a153..2e0c1776 100644 --- a/i386/i386/apic.c +++ b/i386/i386/apic.c @@ -95,6 +95,19 @@ apic_add_irq_override(IrqOverrideData irq_over) apic_data.nirqoverride++; } +IrqOverrideData * +acpi_get_irq_override(uint8_t pin) +{ + int i; + + for (i = 0; i < apic_data.nirqoverride; i++) { + if (apic_data.irq_override_list[i].irq == pin) { + return &apic_data.irq_override_list[i]; + } + } + return NULL; +} + /* * apic_get_cpu_apic_id: returns the apic_id of a cpu. * Receives as input the kernel ID of a CPU. @@ -118,16 +131,14 @@ apic_get_lapic(void) /* * apic_get_ioapic: returns the IOAPIC identified by its kernel ID. * Receives as input the IOAPIC's Kernel ID. - * Returns a ioapic_data structure with the IOAPIC's data. + * Returns a ioapic_data structure pointer with the IOAPIC's data. */ -struct IoApicData +struct IoApicData * apic_get_ioapic(int kernel_id) { - IoApicData io_apic = {}; - if (kernel_id < MAX_IOAPICS) - return apic_data.ioapic_list[kernel_id]; - return io_apic; + return &apic_data.ioapic_list[kernel_id]; + return NULL; } /* apic_get_numcpus: returns the current number of cpus. */ @@ -204,18 +215,22 @@ void apic_print_info(void) uint16_t lapic_id; uint16_t ioapic_id; - IoApicData ioapic; + IoApicData *ioapic; printf("CPUS:\n"); for (i = 0; i < ncpus; i++) { lapic_id = apic_get_cpu_apic_id(i); - printf(" CPU %d - APIC ID %x\n", i, lapic_id); + printf(" CPU %d - APIC ID %x - addr=0x%p\n", i, lapic_id, apic_get_lapic()); } printf("IOAPICS:\n"); for (i = 0; i < nioapics; i++) { ioapic = apic_get_ioapic(i); - ioapic_id = ioapic.apic_id; - printf(" IOAPIC %d - APIC ID %x\n", i, ioapic_id); + if (!ioapic) { + printf("ERROR: invalid IOAPIC ID %x\n", i); + } else { + ioapic_id = ioapic->apic_id; + printf(" IOAPIC %d - APIC ID %x - addr=0x%p\n", i, ioapic_id, ioapic->ioapic); + } } } |