|
@@ -3596,6 +3596,36 @@ int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev)
|
|
|
}
|
|
|
#endif /* CONFIG_HT_IRQ */
|
|
|
|
|
|
+int __init io_apic_get_redir_entries (int ioapic)
|
|
|
+{
|
|
|
+ union IO_APIC_reg_01 reg_01;
|
|
|
+ unsigned long flags;
|
|
|
+
|
|
|
+ spin_lock_irqsave(&ioapic_lock, flags);
|
|
|
+ reg_01.raw = io_apic_read(ioapic, 1);
|
|
|
+ spin_unlock_irqrestore(&ioapic_lock, flags);
|
|
|
+
|
|
|
+ return reg_01.bits.entries;
|
|
|
+}
|
|
|
+
|
|
|
+int __init probe_nr_irqs(void)
|
|
|
+{
|
|
|
+ int idx;
|
|
|
+ int nr = 0;
|
|
|
+
|
|
|
+ for (idx = 0; idx < nr_ioapics; idx++)
|
|
|
+ nr += io_apic_get_redir_entries(idx);
|
|
|
+
|
|
|
+ /* double it for hotplug and msi and nmi */
|
|
|
+ nr <<= 1;
|
|
|
+
|
|
|
+ /* something wrong ? */
|
|
|
+ if (nr < 32)
|
|
|
+ nr = 32;
|
|
|
+
|
|
|
+ return nr;
|
|
|
+}
|
|
|
+
|
|
|
/* --------------------------------------------------------------------------
|
|
|
ACPI-based IOAPIC Configuration
|
|
|
-------------------------------------------------------------------------- */
|
|
@@ -3690,19 +3720,6 @@ int __init io_apic_get_version(int ioapic)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
-int __init io_apic_get_redir_entries (int ioapic)
|
|
|
-{
|
|
|
- union IO_APIC_reg_01 reg_01;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- spin_lock_irqsave(&ioapic_lock, flags);
|
|
|
- reg_01.raw = io_apic_read(ioapic, 1);
|
|
|
- spin_unlock_irqrestore(&ioapic_lock, flags);
|
|
|
-
|
|
|
- return reg_01.bits.entries;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
int io_apic_set_pci_routing (int ioapic, int pin, int irq, int triggering, int polarity)
|
|
|
{
|
|
|
if (!IO_APIC_IRQ(irq)) {
|