Compile remaining x86 bits for x86_64.

The IOAPIC and IRQ routing code now gets compiled for x86_64, though
they won't be used yet as there is no ACPI support currently.
This commit is contained in:
Alex Smith 2012-08-09 13:18:53 +01:00
parent f3e4f18be7
commit fa6327c9f4
6 changed files with 26 additions and 31 deletions

View File

@ -55,9 +55,6 @@ if $(TARGET_ARCH) = x86_64 {
syscalls_asm.S syscalls_asm.S
thread.cpp thread.cpp
ioapic.cpp
irq_routing_table.cpp
# paging # paging
x86_physical_page_mapper_large_memory.cpp x86_physical_page_mapper_large_memory.cpp
@ -90,6 +87,8 @@ local archGenericSources =
arch_vm.cpp arch_vm.cpp
arch_vm_translation_map.cpp arch_vm_translation_map.cpp
apic.cpp apic.cpp
ioapic.cpp
irq_routing_table.cpp
msi.cpp msi.cpp
pic.cpp pic.cpp

View File

@ -391,10 +391,7 @@ arch_int_are_interrupts_enabled(void)
status_t status_t
arch_int_init_io(kernel_args* args) arch_int_init_io(kernel_args* args)
{ {
// TODO x86_64
#ifndef __x86_64__
ioapic_init(args); ioapic_init(args);
#endif
msi_init(); msi_init();
return B_OK; return B_OK;
} }

View File

@ -656,7 +656,6 @@ arch_vm_init_post_area(kernel_args *args)
return B_NO_MEMORY; return B_NO_MEMORY;
} }
// TODO x86_64
#ifndef __x86_64__ #ifndef __x86_64__
return bios_init(); return bios_init();
#else #else

View File

@ -117,8 +117,8 @@ static int32 sSourceOverrides[ISA_INTERRUPT_COUNT];
static void static void
print_ioapic(struct ioapic& ioapic) print_ioapic(struct ioapic& ioapic)
{ {
dprintf("io-apic %u has range %u-%u, %u entries, version 0x%08lx, " dprintf("io-apic %u has range %u-%u, %u entries, version 0x%08" B_PRIx32
"apic-id %u\n", ioapic.number, ioapic.global_interrupt_base, ", apic-id %u\n", ioapic.number, ioapic.global_interrupt_base,
ioapic.global_interrupt_last, ioapic.max_redirection_entry + 1, ioapic.global_interrupt_last, ioapic.max_redirection_entry + 1,
ioapic.version, ioapic.apic_id); ioapic.version, ioapic.apic_id);
} }
@ -385,7 +385,7 @@ ioapic_initialize_ioapic(struct ioapic& ioapic, uint8 targetAPIC)
static int32 static int32
ioapic_source_override_handler(void* data) ioapic_source_override_handler(void* data)
{ {
int32 vector = (int32)data; int32 vector = (addr_t)data;
bool levelTriggered = ioapic_is_level_triggered_interrupt(vector); bool levelTriggered = ioapic_is_level_triggered_interrupt(vector);
return int_io_interrupt_handler(vector, levelTriggered); return int_io_interrupt_handler(vector, levelTriggered);
} }
@ -404,9 +404,10 @@ acpi_enumerate_ioapics(acpi_table_madt* madt)
case ACPI_MADT_TYPE_IO_APIC: case ACPI_MADT_TYPE_IO_APIC:
{ {
acpi_madt_io_apic* info = (acpi_madt_io_apic*)apicEntry; acpi_madt_io_apic* info = (acpi_madt_io_apic*)apicEntry;
dprintf("found io-apic with address 0x%08lx, global " dprintf("found io-apic with address 0x%08" B_PRIx32 ", global "
"interrupt base %lu, apic-id %u\n", (uint32)info->Address, "interrupt base %" B_PRIu32 ", apic-id %u\n",
(uint32)info->GlobalIrqBase, info->Id); (uint32)info->Address, (uint32)info->GlobalIrqBase,
info->Id);
struct ioapic* ioapic struct ioapic* ioapic
= (struct ioapic*)malloc(sizeof(struct ioapic)); = (struct ioapic*)malloc(sizeof(struct ioapic));
@ -423,8 +424,8 @@ acpi_enumerate_ioapics(acpi_table_madt* madt)
ioapic->registers = NULL; ioapic->registers = NULL;
ioapic->next = NULL; ioapic->next = NULL;
dprintf("mapping io-apic %u at physical address %p\n", dprintf("mapping io-apic %u at physical address %#" B_PRIx32
ioapic->number, (void*)info->Address); "\n", ioapic->number, (uint32)info->Address);
status_t status = ioapic_map_ioapic(*ioapic, info->Address); status_t status = ioapic_map_ioapic(*ioapic, info->Address);
if (status != B_OK) { if (status != B_OK) {
free(ioapic); free(ioapic);
@ -446,8 +447,9 @@ acpi_enumerate_ioapics(acpi_table_madt* madt)
{ {
acpi_madt_nmi_source* info acpi_madt_nmi_source* info
= (acpi_madt_nmi_source*)apicEntry; = (acpi_madt_nmi_source*)apicEntry;
dprintf("found nmi source global irq %lu, flags 0x%04x\n", dprintf("found nmi source global irq %" B_PRIu32 ", flags "
(uint32)info->GlobalIrq, (uint16)info->IntiFlags); "0x%04x\n", (uint32)info->GlobalIrq,
(uint16)info->IntiFlags);
struct ioapic* ioapic = find_ioapic(info->GlobalIrq); struct ioapic* ioapic = find_ioapic(info->GlobalIrq);
if (ioapic == NULL) { if (ioapic == NULL) {
@ -517,8 +519,8 @@ acpi_configure_source_overrides(acpi_table_madt* madt)
acpi_madt_interrupt_override* info acpi_madt_interrupt_override* info
= (acpi_madt_interrupt_override*)apicEntry; = (acpi_madt_interrupt_override*)apicEntry;
dprintf("found interrupt override for bus %u, source irq %u, " dprintf("found interrupt override for bus %u, source irq %u, "
"global irq %lu, flags 0x%08lx\n", info->Bus, "global irq %" B_PRIu32 ", flags 0x%08" B_PRIx32 "\n",
info->SourceIrq, (uint32)info->GlobalIrq, info->Bus, info->SourceIrq, (uint32)info->GlobalIrq,
(uint32)info->IntiFlags); (uint32)info->IntiFlags);
if (info->SourceIrq >= ISA_INTERRUPT_COUNT) { if (info->SourceIrq >= ISA_INTERRUPT_COUNT) {
@ -545,8 +547,9 @@ acpi_configure_source_overrides(acpi_table_madt* madt)
{ {
acpi_madt_nmi_source* info acpi_madt_nmi_source* info
= (acpi_madt_nmi_source*)apicEntry; = (acpi_madt_nmi_source*)apicEntry;
dprintf("found nmi source global irq %lu, flags 0x%04x\n", dprintf("found nmi source global irq %" B_PRIu32 ", flags "
(uint32)info->GlobalIrq, (uint16)info->IntiFlags); "0x%04x\n", (uint32)info->GlobalIrq,
(uint16)info->IntiFlags);
struct ioapic* ioapic = find_ioapic(info->GlobalIrq); struct ioapic* ioapic = find_ioapic(info->GlobalIrq);
if (ioapic == NULL) if (ioapic == NULL)

View File

@ -66,14 +66,15 @@ print_irq_descriptor(const irq_descriptor& descriptor)
static void static void
print_irq_routing_entry(const irq_routing_entry& entry) print_irq_routing_entry(const irq_routing_entry& entry)
{ {
dprintf("address 0x%04llx; pin %u;", entry.device_address, entry.pin); dprintf("address 0x%04" B_PRIx64 "; pin %u;", entry.device_address,
entry.pin);
if (entry.source_index != 0) if (entry.source_index != 0)
dprintf(" GSI %lu;", entry.source_index); dprintf(" GSI %" B_PRIu32 ";", entry.source_index);
else else
dprintf(" source %p %lu;", entry.source, entry.source_index); dprintf(" source %p %" B_PRIu32 ";", entry.source, entry.source_index);
dprintf(" pci %u:%u pin %u func mask %lx; bios irq: %u; gsi %u;" dprintf(" pci %u:%u pin %u func mask %" B_PRIx32 "; bios irq: %u; gsi %u;"
" config 0x%02x\n", entry.pci_bus, entry.pci_device, entry.pin + 1, " config 0x%02x\n", entry.pci_bus, entry.pci_device, entry.pin + 1,
entry.pci_function_mask, entry.bios_irq, entry.irq, entry.pci_function_mask, entry.bios_irq, entry.irq,
entry.polarity | entry.trigger_mode); entry.polarity | entry.trigger_mode);
@ -830,8 +831,8 @@ enable_irq_routing(acpi_module_info* acpi, IRQRoutingTable& routingTable)
status = update_pci_info_for_entry(pci, irqEntry); status = update_pci_info_for_entry(pci, irqEntry);
if (status != B_OK) { if (status != B_OK) {
dprintf("failed to update interrupt_line for PCI %u:%u mask %lx\n", dprintf("failed to update interrupt_line for PCI %u:%u mask %"
irqEntry.pci_bus, irqEntry.pci_device, B_PRIx32 "\n", irqEntry.pci_bus, irqEntry.pci_device,
irqEntry.pci_function_mask); irqEntry.pci_function_mask);
} }
} }

View File

@ -17,10 +17,6 @@ static bool sMSISupported = false;
void void
msi_init() msi_init()
{ {
#ifdef __x86_64__
// TODO x86_64.
return;
#endif
if (!apic_available()) { if (!apic_available()) {
dprintf("disabling msi due to missing apic\n"); dprintf("disabling msi due to missing apic\n");
return; return;