* When initializing MSI support, don't assume a single 24 entry IO-APIC. Instead

mark the ISA interrupts as unusable and then use ioapic_is_interrupt_available
  to determine if that vector is possibly taken by an IO-APIC. If IO-APICs are
  not used, this will simply always return false, leaving all vectors free for
  MSI use.
* The msi_init() now has to be done after a potential IO-APIC init, so it is now
  done after ioapic_init() instead of inside apic_init().
* Add apic_disable_local_ints() to clear the local ints on the local APIC once
  we are in APIC mode (i.e. the IO-APIC is set up and we don't need the external
  routing anymore).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41445 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Michael Lotz
2011-05-11 18:05:05 +00:00
parent dfd1e5889e
commit a56cbb2afb
6 changed files with 46 additions and 13 deletions
+2
View File
@@ -115,6 +115,8 @@ void apic_write(uint32 offset, uint32 data);
uint32 apic_local_id();
void apic_end_of_interrupt();
void apic_disable_local_ints();
status_t apic_init(kernel_args *args);
status_t apic_per_cpu_init(kernel_args *args, int32 cpu);
+4
View File
@@ -5,8 +5,12 @@
#ifndef _KERNEL_ARCH_x86_IOAPIC_H
#define _KERNEL_ARCH_x86_IOAPIC_H
#include <SupportDefs.h>
struct kernel_args;
bool ioapic_is_interrupt_available(int32 gsi);
void ioapic_map(kernel_args* args);
void ioapic_init(kernel_args* args);