static int __init acpi_parse_ioapic(struct acpi_subtable_header * header, const unsigned long end) { struct acpi_madt_io_apic *ioapic = NULL; struct ioapic_domain_cfg cfg = { .type = IOAPIC_DOMAIN_DYNAMIC, .ops = &acpi_irqdomain_ops, }; ioapic = (struct acpi_madt_io_apic *)header; if (BAD_MADT_ENTRY(ioapic, end)) return -EINVAL; acpi_table_print_madt_entry(header); /* Statically assign IRQ numbers for IOAPICs hosting legacy IRQs */ if (ioapic->global_irq_base < nr_legacy_irqs()) cfg.type = IOAPIC_DOMAIN_LEGACY; mp_register_ioapic(ioapic->id, ioapic->address, ioapic->global_irq_base, &cfg); return 0; }
static void __init MP_ioapic_info(struct mpc_ioapic *m) { struct ioapic_domain_cfg cfg = { .type = IOAPIC_DOMAIN_LEGACY, .ops = &mp_ioapic_irqdomain_ops, }; if (m->flags & MPC_APIC_USABLE) mp_register_ioapic(m->apicid, m->apicaddr, gsi_top, &cfg); }
static void __init MP_ioapic_info(struct mpc_ioapic *m) { if (!(m->flags & MPC_APIC_USABLE)) return; printk(KERN_INFO "I/O APIC #%d Version %d at 0x%X.\n", m->apicid, m->apicver, m->apicaddr); mp_register_ioapic(m->apicid, m->apicaddr, gsi_top); }
static int __init acpi_parse_ioapic(struct acpi_subtable_header * header, const unsigned long end) { struct acpi_madt_io_apic *ioapic = container_of(header, struct acpi_madt_io_apic, header); if (BAD_MADT_ENTRY(ioapic, end)) return -EINVAL; acpi_table_print_madt_entry(header); mp_register_ioapic(ioapic->id, ioapic->address, ioapic->global_irq_base); return 0; }
static int __init acpi_parse_ioapic ( acpi_table_entry_header *header) { struct acpi_table_ioapic *ioapic = NULL; ioapic = (struct acpi_table_ioapic*) header; if (!ioapic) return -EINVAL; acpi_table_print_madt_entry(header); mp_register_ioapic ( ioapic->id, ioapic->address, ioapic->global_irq_base); return 0; }
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; 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); pentry++; } WARN(pic_mode, KERN_WARNING "SFI: pic_mod shouldn't be 1 when IOAPIC table is present\n"); pic_mode = 0; return 0; }
static void __init jailhouse_get_smp_config(unsigned int early) { struct ioapic_domain_cfg ioapic_cfg = { .type = IOAPIC_DOMAIN_STRICT, .ops = &mp_ioapic_irqdomain_ops, }; struct mpc_intsrc mp_irq = { .type = MP_INTSRC, .irqtype = mp_INT, .irqflag = MP_IRQPOL_ACTIVE_HIGH | MP_IRQTRIG_EDGE, }; unsigned int cpu; jailhouse_x2apic_init(); register_lapic_address(0xfee00000); for (cpu = 0; cpu < setup_data.num_cpus; cpu++) { generic_processor_info(setup_data.cpu_ids[cpu], boot_cpu_apic_version); } smp_found_config = 1; if (setup_data.standard_ioapic) { mp_register_ioapic(0, 0xfec00000, gsi_top, &ioapic_cfg); /* Register 1:1 mapping for legacy UART IRQs 3 and 4 */ mp_irq.srcbusirq = mp_irq.dstirq = 3; mp_save_irq(&mp_irq); mp_irq.srcbusirq = mp_irq.dstirq = 4; mp_save_irq(&mp_irq); } } static void jailhouse_no_restart(void) { pr_notice("Jailhouse: Restart not supported, halting\n"); machine_halt(); }
static void __init MP_ioapic_info(struct mpc_ioapic *m) { if (m->flags & MPC_APIC_USABLE) mp_register_ioapic(m->apicid, m->apicaddr, gsi_top); }