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:
parent
f3e4f18be7
commit
fa6327c9f4
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue