|
@@ -25,6 +25,7 @@
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/sfi.h>
|
|
|
#include <linux/io.h>
|
|
|
+#include <linux/irqdomain.h>
|
|
|
|
|
|
#include <asm/io_apic.h>
|
|
|
#include <asm/mpspec.h>
|
|
@@ -70,19 +71,24 @@ static int __init sfi_parse_cpus(struct sfi_table_header *table)
|
|
|
#endif /* CONFIG_X86_LOCAL_APIC */
|
|
|
|
|
|
#ifdef CONFIG_X86_IO_APIC
|
|
|
+static struct irq_domain_ops sfi_ioapic_irqdomain_ops;
|
|
|
|
|
|
static int __init sfi_parse_ioapic(struct sfi_table_header *table)
|
|
|
{
|
|
|
struct sfi_table_simple *sb;
|
|
|
struct sfi_apic_table_entry *pentry;
|
|
|
int i, num;
|
|
|
+ struct ioapic_domain_cfg cfg = {
|
|
|
+ .type = IOAPIC_DOMAIN_STRICT,
|
|
|
+ .ops = &sfi_ioapic_irqdomain_ops,
|
|
|
+ };
|
|
|
|
|
|
sb = (struct sfi_table_simple *)table;
|
|
|
num = SFI_GET_NUM_ENTRIES(sb, struct sfi_apic_table_entry);
|
|
|
pentry = (struct sfi_apic_table_entry *)sb->pentry;
|
|
|
|
|
|
for (i = 0; i < num; i++) {
|
|
|
- mp_register_ioapic(i, pentry->phys_addr, gsi_top, NULL);
|
|
|
+ mp_register_ioapic(i, pentry->phys_addr, gsi_top, &cfg);
|
|
|
pentry++;
|
|
|
}
|
|
|
|