2 * Intel IO-APIC support for multi-Pentium hosts.
4 * Copyright (C) 1997, 1998, 1999, 2000 Ingo Molnar, Hajnalka Szabo
6 * Many thanks to Stig Venaas for trying out countless experimental
7 * patches and reporting/debugging problems patiently!
9 * (c) 1999, Multiple IO-APIC support, developed by
10 * Ken-ichi Yaku <yaku@css1.kbnes.nec.co.jp> and
11 * Hidemi Kishimoto <kisimoto@css1.kbnes.nec.co.jp>,
12 * further tested and cleaned up by Zach Brown <zab@redhat.com>
13 * and Ingo Molnar <mingo@redhat.com>
16 * Maciej W. Rozycki : Bits for genuine 82489DX APICs;
17 * thanks to Eric Gilmore
19 * for testing these extensively
20 * Paul Diefenbaugh : Added full ACPI support
24 #include <linux/interrupt.h>
25 #include <linux/init.h>
26 #include <linux/delay.h>
27 #include <linux/sched.h>
28 #include <linux/config.h>
29 #include <linux/smp_lock.h>
30 #include <linux/mc146818rtc.h>
31 #include <linux/acpi.h>
32 #include <linux/sysdev.h>
37 #include <asm/proto.h>
38 #include <asm/mach_apic.h>
41 #define __apicdebuginit __init
43 int sis_apic_bug; /* not actually supported, dummy for compile */
45 static int no_timer_check;
47 int disable_timer_pin_1 __initdata;
49 static DEFINE_SPINLOCK(ioapic_lock);
52 * # of IRQ routing registers
54 int nr_ioapic_registers[MAX_IO_APICS];
57 * Rough estimation of how many shared IRQs there are, can
60 #define MAX_PLUS_SHARED_IRQS NR_IRQS
61 #define PIN_MAP_SIZE (MAX_PLUS_SHARED_IRQS + NR_IRQS)
64 * This is performance-critical, we want to do it O(1)
66 * the indexing order of this array favors 1:1 mappings
67 * between pins and IRQs.
70 static struct irq_pin_list {
71 short apic, pin, next;
72 } irq_2_pin[PIN_MAP_SIZE];
74 int vector_irq[NR_VECTORS] __read_mostly = { [0 ... NR_VECTORS - 1] = -1};
76 #define vector_to_irq(vector) \
77 (platform_legacy_irq(vector) ? vector : vector_irq[vector])
79 #define vector_to_irq(vector) (vector)
82 #define __DO_ACTION(R, ACTION, FINAL) \
86 struct irq_pin_list *entry = irq_2_pin + irq; \
93 reg = io_apic_read(entry->apic, 0x10 + R + pin*2); \
95 io_apic_modify(entry->apic, reg); \
98 entry = irq_2_pin + entry->next; \
104 static void set_ioapic_affinity_irq(unsigned int irq, cpumask_t mask)
110 cpus_and(tmp, mask, cpu_online_map);
114 cpus_and(mask, tmp, CPU_MASK_ALL);
116 dest = cpu_mask_to_apicid(mask);
119 * Only the high 8 bits are valid.
121 dest = SET_APIC_LOGICAL_ID(dest);
123 spin_lock_irqsave(&ioapic_lock, flags);
124 __DO_ACTION(1, = dest, )
125 set_irq_info(irq, mask);
126 spin_unlock_irqrestore(&ioapic_lock, flags);
131 * The common case is 1:1 IRQ<->pin mappings. Sometimes there are
132 * shared ISA-space IRQs, so we have to support them. We are super
133 * fast in the common case, and fast for shared ISA-space IRQs.
135 static void add_pin_to_irq(unsigned int irq, int apic, int pin)
137 static int first_free_entry = NR_IRQS;
138 struct irq_pin_list *entry = irq_2_pin + irq;
141 entry = irq_2_pin + entry->next;
143 if (entry->pin != -1) {
144 entry->next = first_free_entry;
145 entry = irq_2_pin + entry->next;
146 if (++first_free_entry >= PIN_MAP_SIZE)
147 panic("io_apic.c: whoops");
154 #define DO_ACTION(name,R,ACTION, FINAL) \
156 static void name##_IO_APIC_irq (unsigned int irq) \
157 __DO_ACTION(R, ACTION, FINAL)
159 DO_ACTION( __mask, 0, |= 0x00010000, io_apic_sync(entry->apic) )
161 DO_ACTION( __unmask, 0, &= 0xfffeffff, )
164 static void mask_IO_APIC_irq (unsigned int irq)
168 spin_lock_irqsave(&ioapic_lock, flags);
169 __mask_IO_APIC_irq(irq);
170 spin_unlock_irqrestore(&ioapic_lock, flags);
173 static void unmask_IO_APIC_irq (unsigned int irq)
177 spin_lock_irqsave(&ioapic_lock, flags);
178 __unmask_IO_APIC_irq(irq);
179 spin_unlock_irqrestore(&ioapic_lock, flags);
182 static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin)
184 struct IO_APIC_route_entry entry;
187 /* Check delivery_mode to be sure we're not clearing an SMI pin */
188 spin_lock_irqsave(&ioapic_lock, flags);
189 *(((int*)&entry) + 0) = io_apic_read(apic, 0x10 + 2 * pin);
190 *(((int*)&entry) + 1) = io_apic_read(apic, 0x11 + 2 * pin);
191 spin_unlock_irqrestore(&ioapic_lock, flags);
192 if (entry.delivery_mode == dest_SMI)
195 * Disable it in the IO-APIC irq-routing table:
197 memset(&entry, 0, sizeof(entry));
199 spin_lock_irqsave(&ioapic_lock, flags);
200 io_apic_write(apic, 0x10 + 2 * pin, *(((int *)&entry) + 0));
201 io_apic_write(apic, 0x11 + 2 * pin, *(((int *)&entry) + 1));
202 spin_unlock_irqrestore(&ioapic_lock, flags);
205 static void clear_IO_APIC (void)
209 for (apic = 0; apic < nr_ioapics; apic++)
210 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++)
211 clear_IO_APIC_pin(apic, pin);
215 * support for broken MP BIOSs, enables hand-redirection of PIRQ0-7 to
216 * specific CPU-side IRQs.
220 static int pirq_entries [MAX_PIRQS];
221 static int pirqs_enabled;
222 int skip_ioapic_setup;
225 /* dummy parsing: see setup.c */
227 static int __init disable_ioapic_setup(char *str)
229 skip_ioapic_setup = 1;
233 static int __init enable_ioapic_setup(char *str)
236 skip_ioapic_setup = 0;
240 __setup("noapic", disable_ioapic_setup);
241 __setup("apic", enable_ioapic_setup);
243 #include <asm/pci-direct.h>
244 #include <linux/pci_ids.h>
245 #include <linux/pci.h>
247 /* Temporary Hack. Nvidia and VIA boards currently only work with IO-APIC
248 off. Check for an Nvidia or VIA PCI bridge and turn it off.
249 Use pci direct infrastructure because this runs before the PCI subsystem.
251 Can be overwritten with "apic"
253 And another hack to disable the IOMMU on VIA chipsets.
256 void __init check_ioapic(void)
262 /* Poor man's PCI discovery */
263 for (num = 0; num < 32; num++) {
264 for (slot = 0; slot < 32; slot++) {
265 for (func = 0; func < 8; func++) {
269 class = read_pci_config(num,slot,func,
271 if (class == 0xffffffff)
274 if ((class >> 16) != PCI_CLASS_BRIDGE_PCI)
277 vendor = read_pci_config(num, slot, func,
281 case PCI_VENDOR_ID_VIA:
282 #ifdef CONFIG_GART_IOMMU
283 if ((end_pfn >= (0xffffffff>>PAGE_SHIFT) ||
285 !iommu_aperture_allowed) {
287 "Looks like a VIA chipset. Disabling IOMMU. Overwrite with \"iommu=allowed\"\n");
288 iommu_aperture_disabled = 1;
292 case PCI_VENDOR_ID_NVIDIA:
294 /* All timer overrides on Nvidia
295 seem to be wrong. Skip them. */
296 acpi_skip_timer_override = 1;
298 "Nvidia board detected. Ignoring ACPI timer override.\n");
300 /* RED-PEN skip them on mptables too? */
302 case PCI_VENDOR_ID_ATI:
303 /* All timer interrupts on atiixp
304 are doubled. Disable one. */
305 if (disable_timer_pin_1 == 0) {
306 disable_timer_pin_1 = 1;
308 "ATI board detected. Disabling timer pin 1.\n");
313 /* No multi-function device? */
314 type = read_pci_config_byte(num,slot,func,
323 static int __init ioapic_pirq_setup(char *str)
326 int ints[MAX_PIRQS+1];
328 get_options(str, ARRAY_SIZE(ints), ints);
330 for (i = 0; i < MAX_PIRQS; i++)
331 pirq_entries[i] = -1;
334 apic_printk(APIC_VERBOSE, "PIRQ redirection, working around broken MP-BIOS.\n");
336 if (ints[0] < MAX_PIRQS)
339 for (i = 0; i < max; i++) {
340 apic_printk(APIC_VERBOSE, "... PIRQ%d -> IRQ %d\n", i, ints[i+1]);
342 * PIRQs are mapped upside down, usually.
344 pirq_entries[MAX_PIRQS-i-1] = ints[i+1];
349 __setup("pirq=", ioapic_pirq_setup);
352 * Find the IRQ entry number of a certain pin.
354 static int find_irq_entry(int apic, int pin, int type)
358 for (i = 0; i < mp_irq_entries; i++)
359 if (mp_irqs[i].mpc_irqtype == type &&
360 (mp_irqs[i].mpc_dstapic == mp_ioapics[apic].mpc_apicid ||
361 mp_irqs[i].mpc_dstapic == MP_APIC_ALL) &&
362 mp_irqs[i].mpc_dstirq == pin)
369 * Find the pin to which IRQ[irq] (ISA) is connected
371 static int find_isa_irq_pin(int irq, int type)
375 for (i = 0; i < mp_irq_entries; i++) {
376 int lbus = mp_irqs[i].mpc_srcbus;
378 if ((mp_bus_id_to_type[lbus] == MP_BUS_ISA ||
379 mp_bus_id_to_type[lbus] == MP_BUS_EISA ||
380 mp_bus_id_to_type[lbus] == MP_BUS_MCA) &&
381 (mp_irqs[i].mpc_irqtype == type) &&
382 (mp_irqs[i].mpc_srcbusirq == irq))
384 return mp_irqs[i].mpc_dstirq;
390 * Find a specific PCI IRQ entry.
391 * Not an __init, possibly needed by modules
393 static int pin_2_irq(int idx, int apic, int pin);
395 int IO_APIC_get_PCI_irq_vector(int bus, int slot, int pin)
397 int apic, i, best_guess = -1;
399 apic_printk(APIC_DEBUG, "querying PCI -> IRQ mapping bus:%d, slot:%d, pin:%d.\n",
401 if (mp_bus_id_to_pci_bus[bus] == -1) {
402 apic_printk(APIC_VERBOSE, "PCI BIOS passed nonexistent PCI bus %d!\n", bus);
405 for (i = 0; i < mp_irq_entries; i++) {
406 int lbus = mp_irqs[i].mpc_srcbus;
408 for (apic = 0; apic < nr_ioapics; apic++)
409 if (mp_ioapics[apic].mpc_apicid == mp_irqs[i].mpc_dstapic ||
410 mp_irqs[i].mpc_dstapic == MP_APIC_ALL)
413 if ((mp_bus_id_to_type[lbus] == MP_BUS_PCI) &&
414 !mp_irqs[i].mpc_irqtype &&
416 (slot == ((mp_irqs[i].mpc_srcbusirq >> 2) & 0x1f))) {
417 int irq = pin_2_irq(i,apic,mp_irqs[i].mpc_dstirq);
419 if (!(apic || IO_APIC_IRQ(irq)))
422 if (pin == (mp_irqs[i].mpc_srcbusirq & 3))
425 * Use the first all-but-pin matching entry as a
426 * best-guess fuzzy result for broken mptables.
436 * EISA Edge/Level control register, ELCR
438 static int EISA_ELCR(unsigned int irq)
441 unsigned int port = 0x4d0 + (irq >> 3);
442 return (inb(port) >> (irq & 7)) & 1;
444 apic_printk(APIC_VERBOSE, "Broken MPtable reports ISA irq %d\n", irq);
448 /* EISA interrupts are always polarity zero and can be edge or level
449 * trigger depending on the ELCR value. If an interrupt is listed as
450 * EISA conforming in the MP table, that means its trigger type must
451 * be read in from the ELCR */
453 #define default_EISA_trigger(idx) (EISA_ELCR(mp_irqs[idx].mpc_srcbusirq))
454 #define default_EISA_polarity(idx) (0)
456 /* ISA interrupts are always polarity zero edge triggered,
457 * when listed as conforming in the MP table. */
459 #define default_ISA_trigger(idx) (0)
460 #define default_ISA_polarity(idx) (0)
462 /* PCI interrupts are always polarity one level triggered,
463 * when listed as conforming in the MP table. */
465 #define default_PCI_trigger(idx) (1)
466 #define default_PCI_polarity(idx) (1)
468 /* MCA interrupts are always polarity zero level triggered,
469 * when listed as conforming in the MP table. */
471 #define default_MCA_trigger(idx) (1)
472 #define default_MCA_polarity(idx) (0)
474 static int __init MPBIOS_polarity(int idx)
476 int bus = mp_irqs[idx].mpc_srcbus;
480 * Determine IRQ line polarity (high active or low active):
482 switch (mp_irqs[idx].mpc_irqflag & 3)
484 case 0: /* conforms, ie. bus-type dependent polarity */
486 switch (mp_bus_id_to_type[bus])
488 case MP_BUS_ISA: /* ISA pin */
490 polarity = default_ISA_polarity(idx);
493 case MP_BUS_EISA: /* EISA pin */
495 polarity = default_EISA_polarity(idx);
498 case MP_BUS_PCI: /* PCI pin */
500 polarity = default_PCI_polarity(idx);
503 case MP_BUS_MCA: /* MCA pin */
505 polarity = default_MCA_polarity(idx);
510 printk(KERN_WARNING "broken BIOS!!\n");
517 case 1: /* high active */
522 case 2: /* reserved */
524 printk(KERN_WARNING "broken BIOS!!\n");
528 case 3: /* low active */
533 default: /* invalid */
535 printk(KERN_WARNING "broken BIOS!!\n");
543 static int MPBIOS_trigger(int idx)
545 int bus = mp_irqs[idx].mpc_srcbus;
549 * Determine IRQ trigger mode (edge or level sensitive):
551 switch ((mp_irqs[idx].mpc_irqflag>>2) & 3)
553 case 0: /* conforms, ie. bus-type dependent */
555 switch (mp_bus_id_to_type[bus])
557 case MP_BUS_ISA: /* ISA pin */
559 trigger = default_ISA_trigger(idx);
562 case MP_BUS_EISA: /* EISA pin */
564 trigger = default_EISA_trigger(idx);
567 case MP_BUS_PCI: /* PCI pin */
569 trigger = default_PCI_trigger(idx);
572 case MP_BUS_MCA: /* MCA pin */
574 trigger = default_MCA_trigger(idx);
579 printk(KERN_WARNING "broken BIOS!!\n");
591 case 2: /* reserved */
593 printk(KERN_WARNING "broken BIOS!!\n");
602 default: /* invalid */
604 printk(KERN_WARNING "broken BIOS!!\n");
612 static inline int irq_polarity(int idx)
614 return MPBIOS_polarity(idx);
617 static inline int irq_trigger(int idx)
619 return MPBIOS_trigger(idx);
622 static int pin_2_irq(int idx, int apic, int pin)
625 int bus = mp_irqs[idx].mpc_srcbus;
628 * Debugging check, we are in big trouble if this message pops up!
630 if (mp_irqs[idx].mpc_dstirq != pin)
631 printk(KERN_ERR "broken BIOS or MPTABLE parser, ayiee!!\n");
633 switch (mp_bus_id_to_type[bus])
635 case MP_BUS_ISA: /* ISA pin */
639 irq = mp_irqs[idx].mpc_srcbusirq;
642 case MP_BUS_PCI: /* PCI pin */
645 * PCI IRQs are mapped in order
649 irq += nr_ioapic_registers[i++];
655 printk(KERN_ERR "unknown bus type %d.\n",bus);
662 * PCI IRQ command line redirection. Yes, limits are hardcoded.
664 if ((pin >= 16) && (pin <= 23)) {
665 if (pirq_entries[pin-16] != -1) {
666 if (!pirq_entries[pin-16]) {
667 apic_printk(APIC_VERBOSE, "disabling PIRQ%d\n", pin-16);
669 irq = pirq_entries[pin-16];
670 apic_printk(APIC_VERBOSE, "using PIRQ%d -> IRQ %d\n",
678 static inline int IO_APIC_irq_trigger(int irq)
682 for (apic = 0; apic < nr_ioapics; apic++) {
683 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) {
684 idx = find_irq_entry(apic,pin,mp_INT);
685 if ((idx != -1) && (irq == pin_2_irq(idx,apic,pin)))
686 return irq_trigger(idx);
690 * nonexistent IRQs are edge default
695 /* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */
696 u8 irq_vector[NR_IRQ_VECTORS] __read_mostly = { FIRST_DEVICE_VECTOR , 0 };
698 int assign_irq_vector(int irq)
700 static int current_vector = FIRST_DEVICE_VECTOR, offset = 0;
702 BUG_ON(irq >= NR_IRQ_VECTORS);
703 if (IO_APIC_VECTOR(irq) > 0)
704 return IO_APIC_VECTOR(irq);
707 if (current_vector == IA32_SYSCALL_VECTOR)
710 if (current_vector >= FIRST_SYSTEM_VECTOR) {
714 current_vector = FIRST_DEVICE_VECTOR + offset;
717 vector_irq[current_vector] = irq;
718 if (irq != AUTO_ASSIGN)
719 IO_APIC_VECTOR(irq) = current_vector;
721 return current_vector;
724 extern void (*interrupt[NR_IRQS])(void);
725 static struct hw_interrupt_type ioapic_level_type;
726 static struct hw_interrupt_type ioapic_edge_type;
728 #define IOAPIC_AUTO -1
729 #define IOAPIC_EDGE 0
730 #define IOAPIC_LEVEL 1
732 static inline void ioapic_register_intr(int irq, int vector, unsigned long trigger)
734 if (use_pci_vector() && !platform_legacy_irq(irq)) {
735 if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
736 trigger == IOAPIC_LEVEL)
737 irq_desc[vector].handler = &ioapic_level_type;
739 irq_desc[vector].handler = &ioapic_edge_type;
740 set_intr_gate(vector, interrupt[vector]);
742 if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) ||
743 trigger == IOAPIC_LEVEL)
744 irq_desc[irq].handler = &ioapic_level_type;
746 irq_desc[irq].handler = &ioapic_edge_type;
747 set_intr_gate(vector, interrupt[irq]);
751 static void __init setup_IO_APIC_irqs(void)
753 struct IO_APIC_route_entry entry;
754 int apic, pin, idx, irq, first_notcon = 1, vector;
757 apic_printk(APIC_VERBOSE, KERN_DEBUG "init IO_APIC IRQs\n");
759 for (apic = 0; apic < nr_ioapics; apic++) {
760 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) {
763 * add it to the IO-APIC irq-routing table:
765 memset(&entry,0,sizeof(entry));
767 entry.delivery_mode = INT_DELIVERY_MODE;
768 entry.dest_mode = INT_DEST_MODE;
769 entry.mask = 0; /* enable IRQ */
770 entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS);
772 idx = find_irq_entry(apic,pin,mp_INT);
775 apic_printk(APIC_VERBOSE, KERN_DEBUG " IO-APIC (apicid-pin) %d-%d", mp_ioapics[apic].mpc_apicid, pin);
778 apic_printk(APIC_VERBOSE, ", %d-%d", mp_ioapics[apic].mpc_apicid, pin);
782 entry.trigger = irq_trigger(idx);
783 entry.polarity = irq_polarity(idx);
785 if (irq_trigger(idx)) {
788 entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS);
791 irq = pin_2_irq(idx, apic, pin);
792 add_pin_to_irq(irq, apic, pin);
794 if (!apic && !IO_APIC_IRQ(irq))
797 if (IO_APIC_IRQ(irq)) {
798 vector = assign_irq_vector(irq);
799 entry.vector = vector;
801 ioapic_register_intr(irq, vector, IOAPIC_AUTO);
802 if (!apic && (irq < 16))
803 disable_8259A_irq(irq);
805 spin_lock_irqsave(&ioapic_lock, flags);
806 io_apic_write(apic, 0x11+2*pin, *(((int *)&entry)+1));
807 io_apic_write(apic, 0x10+2*pin, *(((int *)&entry)+0));
808 set_native_irq_info(irq, TARGET_CPUS);
809 spin_unlock_irqrestore(&ioapic_lock, flags);
814 apic_printk(APIC_VERBOSE," not connected.\n");
818 * Set up the 8259A-master output pin as broadcast to all
821 static void __init setup_ExtINT_IRQ0_pin(unsigned int pin, int vector)
823 struct IO_APIC_route_entry entry;
826 memset(&entry,0,sizeof(entry));
828 disable_8259A_irq(0);
831 apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
834 * We use logical delivery to get the timer IRQ
837 entry.dest_mode = INT_DEST_MODE;
838 entry.mask = 0; /* unmask IRQ now */
839 entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS);
840 entry.delivery_mode = INT_DELIVERY_MODE;
843 entry.vector = vector;
846 * The timer IRQ doesn't have to know that behind the
847 * scene we have a 8259A-master in AEOI mode ...
849 irq_desc[0].handler = &ioapic_edge_type;
852 * Add it to the IO-APIC irq-routing table:
854 spin_lock_irqsave(&ioapic_lock, flags);
855 io_apic_write(0, 0x11+2*pin, *(((int *)&entry)+1));
856 io_apic_write(0, 0x10+2*pin, *(((int *)&entry)+0));
857 spin_unlock_irqrestore(&ioapic_lock, flags);
862 void __init UNEXPECTED_IO_APIC(void)
866 void __apicdebuginit print_IO_APIC(void)
869 union IO_APIC_reg_00 reg_00;
870 union IO_APIC_reg_01 reg_01;
871 union IO_APIC_reg_02 reg_02;
874 if (apic_verbosity == APIC_QUIET)
877 printk(KERN_DEBUG "number of MP IRQ sources: %d.\n", mp_irq_entries);
878 for (i = 0; i < nr_ioapics; i++)
879 printk(KERN_DEBUG "number of IO-APIC #%d registers: %d.\n",
880 mp_ioapics[i].mpc_apicid, nr_ioapic_registers[i]);
883 * We are a bit conservative about what we expect. We have to
884 * know about every hardware change ASAP.
886 printk(KERN_INFO "testing the IO APIC.......................\n");
888 for (apic = 0; apic < nr_ioapics; apic++) {
890 spin_lock_irqsave(&ioapic_lock, flags);
891 reg_00.raw = io_apic_read(apic, 0);
892 reg_01.raw = io_apic_read(apic, 1);
893 if (reg_01.bits.version >= 0x10)
894 reg_02.raw = io_apic_read(apic, 2);
895 spin_unlock_irqrestore(&ioapic_lock, flags);
898 printk(KERN_DEBUG "IO APIC #%d......\n", mp_ioapics[apic].mpc_apicid);
899 printk(KERN_DEBUG ".... register #00: %08X\n", reg_00.raw);
900 printk(KERN_DEBUG "....... : physical APIC id: %02X\n", reg_00.bits.ID);
901 if (reg_00.bits.__reserved_1 || reg_00.bits.__reserved_2)
902 UNEXPECTED_IO_APIC();
904 printk(KERN_DEBUG ".... register #01: %08X\n", *(int *)®_01);
905 printk(KERN_DEBUG "....... : max redirection entries: %04X\n", reg_01.bits.entries);
906 if ( (reg_01.bits.entries != 0x0f) && /* older (Neptune) boards */
907 (reg_01.bits.entries != 0x17) && /* typical ISA+PCI boards */
908 (reg_01.bits.entries != 0x1b) && /* Compaq Proliant boards */
909 (reg_01.bits.entries != 0x1f) && /* dual Xeon boards */
910 (reg_01.bits.entries != 0x22) && /* bigger Xeon boards */
911 (reg_01.bits.entries != 0x2E) &&
912 (reg_01.bits.entries != 0x3F) &&
913 (reg_01.bits.entries != 0x03)
915 UNEXPECTED_IO_APIC();
917 printk(KERN_DEBUG "....... : PRQ implemented: %X\n", reg_01.bits.PRQ);
918 printk(KERN_DEBUG "....... : IO APIC version: %04X\n", reg_01.bits.version);
919 if ( (reg_01.bits.version != 0x01) && /* 82489DX IO-APICs */
920 (reg_01.bits.version != 0x02) && /* 82801BA IO-APICs (ICH2) */
921 (reg_01.bits.version != 0x10) && /* oldest IO-APICs */
922 (reg_01.bits.version != 0x11) && /* Pentium/Pro IO-APICs */
923 (reg_01.bits.version != 0x13) && /* Xeon IO-APICs */
924 (reg_01.bits.version != 0x20) /* Intel P64H (82806 AA) */
926 UNEXPECTED_IO_APIC();
927 if (reg_01.bits.__reserved_1 || reg_01.bits.__reserved_2)
928 UNEXPECTED_IO_APIC();
930 if (reg_01.bits.version >= 0x10) {
931 printk(KERN_DEBUG ".... register #02: %08X\n", reg_02.raw);
932 printk(KERN_DEBUG "....... : arbitration: %02X\n", reg_02.bits.arbitration);
933 if (reg_02.bits.__reserved_1 || reg_02.bits.__reserved_2)
934 UNEXPECTED_IO_APIC();
937 printk(KERN_DEBUG ".... IRQ redirection table:\n");
939 printk(KERN_DEBUG " NR Log Phy Mask Trig IRR Pol"
940 " Stat Dest Deli Vect: \n");
942 for (i = 0; i <= reg_01.bits.entries; i++) {
943 struct IO_APIC_route_entry entry;
945 spin_lock_irqsave(&ioapic_lock, flags);
946 *(((int *)&entry)+0) = io_apic_read(apic, 0x10+i*2);
947 *(((int *)&entry)+1) = io_apic_read(apic, 0x11+i*2);
948 spin_unlock_irqrestore(&ioapic_lock, flags);
950 printk(KERN_DEBUG " %02x %03X %02X ",
952 entry.dest.logical.logical_dest,
953 entry.dest.physical.physical_dest
956 printk("%1d %1d %1d %1d %1d %1d %1d %02X\n",
961 entry.delivery_status,
968 if (use_pci_vector())
969 printk(KERN_INFO "Using vector-based indexing\n");
970 printk(KERN_DEBUG "IRQ to pin mappings:\n");
971 for (i = 0; i < NR_IRQS; i++) {
972 struct irq_pin_list *entry = irq_2_pin + i;
975 if (use_pci_vector() && !platform_legacy_irq(i))
976 printk(KERN_DEBUG "IRQ%d ", IO_APIC_VECTOR(i));
978 printk(KERN_DEBUG "IRQ%d ", i);
980 printk("-> %d:%d", entry->apic, entry->pin);
983 entry = irq_2_pin + entry->next;
988 printk(KERN_INFO ".................................... done.\n");
995 static __apicdebuginit void print_APIC_bitfield (int base)
1000 if (apic_verbosity == APIC_QUIET)
1003 printk(KERN_DEBUG "0123456789abcdef0123456789abcdef\n" KERN_DEBUG);
1004 for (i = 0; i < 8; i++) {
1005 v = apic_read(base + i*0x10);
1006 for (j = 0; j < 32; j++) {
1016 void __apicdebuginit print_local_APIC(void * dummy)
1018 unsigned int v, ver, maxlvt;
1020 if (apic_verbosity == APIC_QUIET)
1023 printk("\n" KERN_DEBUG "printing local APIC contents on CPU#%d/%d:\n",
1024 smp_processor_id(), hard_smp_processor_id());
1025 v = apic_read(APIC_ID);
1026 printk(KERN_INFO "... APIC ID: %08x (%01x)\n", v, GET_APIC_ID(v));
1027 v = apic_read(APIC_LVR);
1028 printk(KERN_INFO "... APIC VERSION: %08x\n", v);
1029 ver = GET_APIC_VERSION(v);
1030 maxlvt = get_maxlvt();
1032 v = apic_read(APIC_TASKPRI);
1033 printk(KERN_DEBUG "... APIC TASKPRI: %08x (%02x)\n", v, v & APIC_TPRI_MASK);
1035 v = apic_read(APIC_ARBPRI);
1036 printk(KERN_DEBUG "... APIC ARBPRI: %08x (%02x)\n", v,
1037 v & APIC_ARBPRI_MASK);
1038 v = apic_read(APIC_PROCPRI);
1039 printk(KERN_DEBUG "... APIC PROCPRI: %08x\n", v);
1041 v = apic_read(APIC_EOI);
1042 printk(KERN_DEBUG "... APIC EOI: %08x\n", v);
1043 v = apic_read(APIC_RRR);
1044 printk(KERN_DEBUG "... APIC RRR: %08x\n", v);
1045 v = apic_read(APIC_LDR);
1046 printk(KERN_DEBUG "... APIC LDR: %08x\n", v);
1047 v = apic_read(APIC_DFR);
1048 printk(KERN_DEBUG "... APIC DFR: %08x\n", v);
1049 v = apic_read(APIC_SPIV);
1050 printk(KERN_DEBUG "... APIC SPIV: %08x\n", v);
1052 printk(KERN_DEBUG "... APIC ISR field:\n");
1053 print_APIC_bitfield(APIC_ISR);
1054 printk(KERN_DEBUG "... APIC TMR field:\n");
1055 print_APIC_bitfield(APIC_TMR);
1056 printk(KERN_DEBUG "... APIC IRR field:\n");
1057 print_APIC_bitfield(APIC_IRR);
1059 v = apic_read(APIC_ESR);
1060 printk(KERN_DEBUG "... APIC ESR: %08x\n", v);
1062 v = apic_read(APIC_ICR);
1063 printk(KERN_DEBUG "... APIC ICR: %08x\n", v);
1064 v = apic_read(APIC_ICR2);
1065 printk(KERN_DEBUG "... APIC ICR2: %08x\n", v);
1067 v = apic_read(APIC_LVTT);
1068 printk(KERN_DEBUG "... APIC LVTT: %08x\n", v);
1070 if (maxlvt > 3) { /* PC is LVT#4. */
1071 v = apic_read(APIC_LVTPC);
1072 printk(KERN_DEBUG "... APIC LVTPC: %08x\n", v);
1074 v = apic_read(APIC_LVT0);
1075 printk(KERN_DEBUG "... APIC LVT0: %08x\n", v);
1076 v = apic_read(APIC_LVT1);
1077 printk(KERN_DEBUG "... APIC LVT1: %08x\n", v);
1079 if (maxlvt > 2) { /* ERR is LVT#3. */
1080 v = apic_read(APIC_LVTERR);
1081 printk(KERN_DEBUG "... APIC LVTERR: %08x\n", v);
1084 v = apic_read(APIC_TMICT);
1085 printk(KERN_DEBUG "... APIC TMICT: %08x\n", v);
1086 v = apic_read(APIC_TMCCT);
1087 printk(KERN_DEBUG "... APIC TMCCT: %08x\n", v);
1088 v = apic_read(APIC_TDCR);
1089 printk(KERN_DEBUG "... APIC TDCR: %08x\n", v);
1093 void print_all_local_APICs (void)
1095 on_each_cpu(print_local_APIC, NULL, 1, 1);
1098 void __apicdebuginit print_PIC(void)
1101 unsigned long flags;
1103 if (apic_verbosity == APIC_QUIET)
1106 printk(KERN_DEBUG "\nprinting PIC contents\n");
1108 spin_lock_irqsave(&i8259A_lock, flags);
1110 v = inb(0xa1) << 8 | inb(0x21);
1111 printk(KERN_DEBUG "... PIC IMR: %04x\n", v);
1113 v = inb(0xa0) << 8 | inb(0x20);
1114 printk(KERN_DEBUG "... PIC IRR: %04x\n", v);
1118 v = inb(0xa0) << 8 | inb(0x20);
1122 spin_unlock_irqrestore(&i8259A_lock, flags);
1124 printk(KERN_DEBUG "... PIC ISR: %04x\n", v);
1126 v = inb(0x4d1) << 8 | inb(0x4d0);
1127 printk(KERN_DEBUG "... PIC ELCR: %04x\n", v);
1132 static void __init enable_IO_APIC(void)
1134 union IO_APIC_reg_01 reg_01;
1136 unsigned long flags;
1138 for (i = 0; i < PIN_MAP_SIZE; i++) {
1139 irq_2_pin[i].pin = -1;
1140 irq_2_pin[i].next = 0;
1143 for (i = 0; i < MAX_PIRQS; i++)
1144 pirq_entries[i] = -1;
1147 * The number of IO-APIC IRQ registers (== #pins):
1149 for (i = 0; i < nr_ioapics; i++) {
1150 spin_lock_irqsave(&ioapic_lock, flags);
1151 reg_01.raw = io_apic_read(i, 1);
1152 spin_unlock_irqrestore(&ioapic_lock, flags);
1153 nr_ioapic_registers[i] = reg_01.bits.entries+1;
1157 * Do not trust the IO-APIC being empty at bootup
1163 * Not an __init, needed by the reboot code
1165 void disable_IO_APIC(void)
1169 * Clear the IO-APIC before rebooting:
1174 * If the i8259 is routed through an IOAPIC
1175 * Put that IOAPIC in virtual wire mode
1176 * so legacy interrupts can be delivered.
1178 pin = find_isa_irq_pin(0, mp_ExtINT);
1180 struct IO_APIC_route_entry entry;
1181 unsigned long flags;
1183 memset(&entry, 0, sizeof(entry));
1184 entry.mask = 0; /* Enabled */
1185 entry.trigger = 0; /* Edge */
1187 entry.polarity = 0; /* High */
1188 entry.delivery_status = 0;
1189 entry.dest_mode = 0; /* Physical */
1190 entry.delivery_mode = 7; /* ExtInt */
1192 entry.dest.physical.physical_dest = 0;
1196 * Add it to the IO-APIC irq-routing table:
1198 spin_lock_irqsave(&ioapic_lock, flags);
1199 io_apic_write(0, 0x11+2*pin, *(((int *)&entry)+1));
1200 io_apic_write(0, 0x10+2*pin, *(((int *)&entry)+0));
1201 spin_unlock_irqrestore(&ioapic_lock, flags);
1204 disconnect_bsp_APIC(pin != -1);
1208 * function to set the IO-APIC physical IDs based on the
1209 * values stored in the MPC table.
1211 * by Matt Domsch <Matt_Domsch@dell.com> Tue Dec 21 12:25:05 CST 1999
1214 static void __init setup_ioapic_ids_from_mpc (void)
1216 union IO_APIC_reg_00 reg_00;
1219 unsigned char old_id;
1220 unsigned long flags;
1223 * Set the IOAPIC ID to the value stored in the MPC table.
1225 for (apic = 0; apic < nr_ioapics; apic++) {
1227 /* Read the register 0 value */
1228 spin_lock_irqsave(&ioapic_lock, flags);
1229 reg_00.raw = io_apic_read(apic, 0);
1230 spin_unlock_irqrestore(&ioapic_lock, flags);
1232 old_id = mp_ioapics[apic].mpc_apicid;
1235 printk(KERN_INFO "Using IO-APIC %d\n", mp_ioapics[apic].mpc_apicid);
1239 * We need to adjust the IRQ routing table
1240 * if the ID changed.
1242 if (old_id != mp_ioapics[apic].mpc_apicid)
1243 for (i = 0; i < mp_irq_entries; i++)
1244 if (mp_irqs[i].mpc_dstapic == old_id)
1245 mp_irqs[i].mpc_dstapic
1246 = mp_ioapics[apic].mpc_apicid;
1249 * Read the right value from the MPC table and
1250 * write it into the ID register.
1252 apic_printk(APIC_VERBOSE,KERN_INFO "...changing IO-APIC physical APIC ID to %d ...",
1253 mp_ioapics[apic].mpc_apicid);
1255 reg_00.bits.ID = mp_ioapics[apic].mpc_apicid;
1256 spin_lock_irqsave(&ioapic_lock, flags);
1257 io_apic_write(apic, 0, reg_00.raw);
1258 spin_unlock_irqrestore(&ioapic_lock, flags);
1263 spin_lock_irqsave(&ioapic_lock, flags);
1264 reg_00.raw = io_apic_read(apic, 0);
1265 spin_unlock_irqrestore(&ioapic_lock, flags);
1266 if (reg_00.bits.ID != mp_ioapics[apic].mpc_apicid)
1267 printk("could not set ID!\n");
1269 apic_printk(APIC_VERBOSE," ok.\n");
1274 * There is a nasty bug in some older SMP boards, their mptable lies
1275 * about the timer IRQ. We do the following to work around the situation:
1277 * - timer IRQ defaults to IO-APIC IRQ
1278 * - if this function detects that timer IRQs are defunct, then we fall
1279 * back to ISA timer IRQs
1281 static int __init timer_irq_works(void)
1283 unsigned long t1 = jiffies;
1286 /* Let ten ticks pass... */
1287 mdelay((10 * 1000) / HZ);
1290 * Expect a few ticks at least, to be sure some possible
1291 * glue logic does not lock up after one or two first
1292 * ticks in a non-ExtINT mode. Also the local APIC
1293 * might have cached one ExtINT interrupt. Finally, at
1294 * least one tick may be lost due to delays.
1298 if (jiffies - t1 > 4)
1304 * In the SMP+IOAPIC case it might happen that there are an unspecified
1305 * number of pending IRQ events unhandled. These cases are very rare,
1306 * so we 'resend' these IRQs via IPIs, to the same CPU. It's much
1307 * better to do it this way as thus we do not have to be aware of
1308 * 'pending' interrupts in the IRQ path, except at this point.
1311 * Edge triggered needs to resend any interrupt
1312 * that was delayed but this is now handled in the device
1317 * Starting up a edge-triggered IO-APIC interrupt is
1318 * nasty - we need to make sure that we get the edge.
1319 * If it is already asserted for some reason, we need
1320 * return 1 to indicate that is was pending.
1322 * This is not complete - we should be able to fake
1323 * an edge even if it isn't on the 8259A...
1326 static unsigned int startup_edge_ioapic_irq(unsigned int irq)
1328 int was_pending = 0;
1329 unsigned long flags;
1331 spin_lock_irqsave(&ioapic_lock, flags);
1333 disable_8259A_irq(irq);
1334 if (i8259A_irq_pending(irq))
1337 __unmask_IO_APIC_irq(irq);
1338 spin_unlock_irqrestore(&ioapic_lock, flags);
1344 * Once we have recorded IRQ_PENDING already, we can mask the
1345 * interrupt for real. This prevents IRQ storms from unhandled
1348 static void ack_edge_ioapic_irq(unsigned int irq)
1351 if ((irq_desc[irq].status & (IRQ_PENDING | IRQ_DISABLED))
1352 == (IRQ_PENDING | IRQ_DISABLED))
1353 mask_IO_APIC_irq(irq);
1358 * Level triggered interrupts can just be masked,
1359 * and shutting down and starting up the interrupt
1360 * is the same as enabling and disabling them -- except
1361 * with a startup need to return a "was pending" value.
1363 * Level triggered interrupts are special because we
1364 * do not touch any IO-APIC register while handling
1365 * them. We ack the APIC in the end-IRQ handler, not
1366 * in the start-IRQ-handler. Protection against reentrance
1367 * from the same interrupt is still provided, both by the
1368 * generic IRQ layer and by the fact that an unacked local
1369 * APIC does not accept IRQs.
1371 static unsigned int startup_level_ioapic_irq (unsigned int irq)
1373 unmask_IO_APIC_irq(irq);
1375 return 0; /* don't check for pending */
1378 static void end_level_ioapic_irq (unsigned int irq)
1384 #ifdef CONFIG_PCI_MSI
1385 static unsigned int startup_edge_ioapic_vector(unsigned int vector)
1387 int irq = vector_to_irq(vector);
1389 return startup_edge_ioapic_irq(irq);
1392 static void ack_edge_ioapic_vector(unsigned int vector)
1394 int irq = vector_to_irq(vector);
1396 move_native_irq(vector);
1397 ack_edge_ioapic_irq(irq);
1400 static unsigned int startup_level_ioapic_vector (unsigned int vector)
1402 int irq = vector_to_irq(vector);
1404 return startup_level_ioapic_irq (irq);
1407 static void end_level_ioapic_vector (unsigned int vector)
1409 int irq = vector_to_irq(vector);
1411 move_native_irq(vector);
1412 end_level_ioapic_irq(irq);
1415 static void mask_IO_APIC_vector (unsigned int vector)
1417 int irq = vector_to_irq(vector);
1419 mask_IO_APIC_irq(irq);
1422 static void unmask_IO_APIC_vector (unsigned int vector)
1424 int irq = vector_to_irq(vector);
1426 unmask_IO_APIC_irq(irq);
1430 static void set_ioapic_affinity_vector (unsigned int vector,
1433 int irq = vector_to_irq(vector);
1435 set_native_irq_info(vector, cpu_mask);
1436 set_ioapic_affinity_irq(irq, cpu_mask);
1438 #endif // CONFIG_SMP
1439 #endif // CONFIG_PCI_MSI
1442 * Level and edge triggered IO-APIC interrupts need different handling,
1443 * so we use two separate IRQ descriptors. Edge triggered IRQs can be
1444 * handled with the level-triggered descriptor, but that one has slightly
1445 * more overhead. Level-triggered interrupts cannot be handled with the
1446 * edge-triggered handler, without risking IRQ storms and other ugly
1450 static struct hw_interrupt_type ioapic_edge_type __read_mostly = {
1451 .typename = "IO-APIC-edge",
1452 .startup = startup_edge_ioapic,
1453 .shutdown = shutdown_edge_ioapic,
1454 .enable = enable_edge_ioapic,
1455 .disable = disable_edge_ioapic,
1456 .ack = ack_edge_ioapic,
1457 .end = end_edge_ioapic,
1459 .set_affinity = set_ioapic_affinity,
1463 static struct hw_interrupt_type ioapic_level_type __read_mostly = {
1464 .typename = "IO-APIC-level",
1465 .startup = startup_level_ioapic,
1466 .shutdown = shutdown_level_ioapic,
1467 .enable = enable_level_ioapic,
1468 .disable = disable_level_ioapic,
1469 .ack = mask_and_ack_level_ioapic,
1470 .end = end_level_ioapic,
1472 .set_affinity = set_ioapic_affinity,
1476 static inline void init_IO_APIC_traps(void)
1481 * NOTE! The local APIC isn't very good at handling
1482 * multiple interrupts at the same interrupt level.
1483 * As the interrupt level is determined by taking the
1484 * vector number and shifting that right by 4, we
1485 * want to spread these out a bit so that they don't
1486 * all fall in the same interrupt level.
1488 * Also, we've got to be careful not to trash gate
1489 * 0x80, because int 0x80 is hm, kind of importantish. ;)
1491 for (irq = 0; irq < NR_IRQS ; irq++) {
1493 if (use_pci_vector()) {
1494 if (!platform_legacy_irq(tmp))
1495 if ((tmp = vector_to_irq(tmp)) == -1)
1498 if (IO_APIC_IRQ(tmp) && !IO_APIC_VECTOR(tmp)) {
1500 * Hmm.. We don't have an entry for this,
1501 * so default to an old-fashioned 8259
1502 * interrupt if we can..
1505 make_8259A_irq(irq);
1507 /* Strange. Oh, well.. */
1508 irq_desc[irq].handler = &no_irq_type;
1513 static void enable_lapic_irq (unsigned int irq)
1517 v = apic_read(APIC_LVT0);
1518 apic_write_around(APIC_LVT0, v & ~APIC_LVT_MASKED);
1521 static void disable_lapic_irq (unsigned int irq)
1525 v = apic_read(APIC_LVT0);
1526 apic_write_around(APIC_LVT0, v | APIC_LVT_MASKED);
1529 static void ack_lapic_irq (unsigned int irq)
1534 static void end_lapic_irq (unsigned int i) { /* nothing */ }
1536 static struct hw_interrupt_type lapic_irq_type __read_mostly = {
1537 .typename = "local-APIC-edge",
1538 .startup = NULL, /* startup_irq() not used for IRQ0 */
1539 .shutdown = NULL, /* shutdown_irq() not used for IRQ0 */
1540 .enable = enable_lapic_irq,
1541 .disable = disable_lapic_irq,
1542 .ack = ack_lapic_irq,
1543 .end = end_lapic_irq,
1546 static void setup_nmi (void)
1549 * Dirty trick to enable the NMI watchdog ...
1550 * We put the 8259A master into AEOI mode and
1551 * unmask on all local APICs LVT0 as NMI.
1553 * The idea to use the 8259A in AEOI mode ('8259A Virtual Wire')
1554 * is from Maciej W. Rozycki - so we do not have to EOI from
1555 * the NMI handler or the timer interrupt.
1557 printk(KERN_INFO "activating NMI Watchdog ...");
1559 enable_NMI_through_LVT0(NULL);
1565 * This looks a bit hackish but it's about the only one way of sending
1566 * a few INTA cycles to 8259As and any associated glue logic. ICR does
1567 * not support the ExtINT mode, unfortunately. We need to send these
1568 * cycles as some i82489DX-based boards have glue logic that keeps the
1569 * 8259A interrupt line asserted until INTA. --macro
1571 static inline void unlock_ExtINT_logic(void)
1574 struct IO_APIC_route_entry entry0, entry1;
1575 unsigned char save_control, save_freq_select;
1576 unsigned long flags;
1578 pin = find_isa_irq_pin(8, mp_INT);
1582 spin_lock_irqsave(&ioapic_lock, flags);
1583 *(((int *)&entry0) + 1) = io_apic_read(0, 0x11 + 2 * pin);
1584 *(((int *)&entry0) + 0) = io_apic_read(0, 0x10 + 2 * pin);
1585 spin_unlock_irqrestore(&ioapic_lock, flags);
1586 clear_IO_APIC_pin(0, pin);
1588 memset(&entry1, 0, sizeof(entry1));
1590 entry1.dest_mode = 0; /* physical delivery */
1591 entry1.mask = 0; /* unmask IRQ now */
1592 entry1.dest.physical.physical_dest = hard_smp_processor_id();
1593 entry1.delivery_mode = dest_ExtINT;
1594 entry1.polarity = entry0.polarity;
1598 spin_lock_irqsave(&ioapic_lock, flags);
1599 io_apic_write(0, 0x11 + 2 * pin, *(((int *)&entry1) + 1));
1600 io_apic_write(0, 0x10 + 2 * pin, *(((int *)&entry1) + 0));
1601 spin_unlock_irqrestore(&ioapic_lock, flags);
1603 save_control = CMOS_READ(RTC_CONTROL);
1604 save_freq_select = CMOS_READ(RTC_FREQ_SELECT);
1605 CMOS_WRITE((save_freq_select & ~RTC_RATE_SELECT) | 0x6,
1607 CMOS_WRITE(save_control | RTC_PIE, RTC_CONTROL);
1612 if ((CMOS_READ(RTC_INTR_FLAGS) & RTC_PF) == RTC_PF)
1616 CMOS_WRITE(save_control, RTC_CONTROL);
1617 CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT);
1618 clear_IO_APIC_pin(0, pin);
1620 spin_lock_irqsave(&ioapic_lock, flags);
1621 io_apic_write(0, 0x11 + 2 * pin, *(((int *)&entry0) + 1));
1622 io_apic_write(0, 0x10 + 2 * pin, *(((int *)&entry0) + 0));
1623 spin_unlock_irqrestore(&ioapic_lock, flags);
1627 * This code may look a bit paranoid, but it's supposed to cooperate with
1628 * a wide range of boards and BIOS bugs. Fortunately only the timer IRQ
1629 * is so screwy. Thanks to Brian Perkins for testing/hacking this beast
1630 * fanatically on his truly buggy board.
1632 static inline void check_timer(void)
1638 * get/set the timer IRQ vector:
1640 disable_8259A_irq(0);
1641 vector = assign_irq_vector(0);
1642 set_intr_gate(vector, interrupt[0]);
1645 * Subtle, code in do_timer_interrupt() expects an AEOI
1646 * mode for the 8259A whenever interrupts are routed
1647 * through I/O APICs. Also IRQ0 has to be enabled in
1648 * the 8259A which implies the virtual wire has to be
1649 * disabled in the local APIC.
1651 apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT);
1653 enable_8259A_irq(0);
1655 pin1 = find_isa_irq_pin(0, mp_INT);
1656 pin2 = find_isa_irq_pin(0, mp_ExtINT);
1658 apic_printk(APIC_VERBOSE,KERN_INFO "..TIMER: vector=0x%02X pin1=%d pin2=%d\n", vector, pin1, pin2);
1662 * Ok, does IRQ0 through the IOAPIC work?
1664 unmask_IO_APIC_irq(0);
1665 if (!no_timer_check && timer_irq_works()) {
1666 nmi_watchdog_default();
1667 if (nmi_watchdog == NMI_IO_APIC) {
1668 disable_8259A_irq(0);
1670 enable_8259A_irq(0);
1672 if (disable_timer_pin_1 > 0)
1673 clear_IO_APIC_pin(0, pin1);
1676 clear_IO_APIC_pin(0, pin1);
1677 apic_printk(APIC_QUIET,KERN_ERR "..MP-BIOS bug: 8254 timer not connected to IO-APIC\n");
1680 apic_printk(APIC_VERBOSE,KERN_INFO "...trying to set up timer (IRQ0) through the 8259A ... ");
1682 apic_printk(APIC_VERBOSE,"\n..... (found pin %d) ...", pin2);
1684 * legacy devices should be connected to IO APIC #0
1686 setup_ExtINT_IRQ0_pin(pin2, vector);
1687 if (timer_irq_works()) {
1689 nmi_watchdog_default();
1690 if (nmi_watchdog == NMI_IO_APIC) {
1696 * Cleanup, just in case ...
1698 clear_IO_APIC_pin(0, pin2);
1700 printk(" failed.\n");
1703 printk(KERN_WARNING "timer doesn't work through the IO-APIC - disabling NMI Watchdog!\n");
1707 apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as Virtual Wire IRQ...");
1709 disable_8259A_irq(0);
1710 irq_desc[0].handler = &lapic_irq_type;
1711 apic_write_around(APIC_LVT0, APIC_DM_FIXED | vector); /* Fixed mode */
1712 enable_8259A_irq(0);
1714 if (timer_irq_works()) {
1715 apic_printk(APIC_QUIET, " works.\n");
1718 apic_write_around(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | vector);
1719 apic_printk(APIC_VERBOSE," failed.\n");
1721 apic_printk(APIC_VERBOSE, KERN_INFO "...trying to set up timer as ExtINT IRQ...");
1725 apic_write_around(APIC_LVT0, APIC_DM_EXTINT);
1727 unlock_ExtINT_logic();
1729 if (timer_irq_works()) {
1730 apic_printk(APIC_VERBOSE," works.\n");
1733 apic_printk(APIC_VERBOSE," failed :(.\n");
1734 panic("IO-APIC + timer doesn't work! Try using the 'noapic' kernel parameter\n");
1737 static int __init notimercheck(char *s)
1742 __setup("no_timer_check", notimercheck);
1746 * IRQ's that are handled by the PIC in the MPS IOAPIC case.
1747 * - IRQ2 is the cascade IRQ, and cannot be a io-apic IRQ.
1748 * Linux doesn't really care, as it's not actually used
1749 * for any interrupt handling anyway.
1751 #define PIC_IRQS (1<<2)
1753 void __init setup_IO_APIC(void)
1758 io_apic_irqs = ~0; /* all IRQs go through IOAPIC */
1760 io_apic_irqs = ~PIC_IRQS;
1762 apic_printk(APIC_VERBOSE, "ENABLING IO-APIC IRQs\n");
1765 * Set up the IO-APIC IRQ routing table.
1768 setup_ioapic_ids_from_mpc();
1770 setup_IO_APIC_irqs();
1771 init_IO_APIC_traps();
1777 struct sysfs_ioapic_data {
1778 struct sys_device dev;
1779 struct IO_APIC_route_entry entry[0];
1781 static struct sysfs_ioapic_data * mp_ioapic_data[MAX_IO_APICS];
1783 static int ioapic_suspend(struct sys_device *dev, pm_message_t state)
1785 struct IO_APIC_route_entry *entry;
1786 struct sysfs_ioapic_data *data;
1787 unsigned long flags;
1790 data = container_of(dev, struct sysfs_ioapic_data, dev);
1791 entry = data->entry;
1792 spin_lock_irqsave(&ioapic_lock, flags);
1793 for (i = 0; i < nr_ioapic_registers[dev->id]; i ++, entry ++ ) {
1794 *(((int *)entry) + 1) = io_apic_read(dev->id, 0x11 + 2 * i);
1795 *(((int *)entry) + 0) = io_apic_read(dev->id, 0x10 + 2 * i);
1797 spin_unlock_irqrestore(&ioapic_lock, flags);
1802 static int ioapic_resume(struct sys_device *dev)
1804 struct IO_APIC_route_entry *entry;
1805 struct sysfs_ioapic_data *data;
1806 unsigned long flags;
1807 union IO_APIC_reg_00 reg_00;
1810 data = container_of(dev, struct sysfs_ioapic_data, dev);
1811 entry = data->entry;
1813 spin_lock_irqsave(&ioapic_lock, flags);
1814 reg_00.raw = io_apic_read(dev->id, 0);
1815 if (reg_00.bits.ID != mp_ioapics[dev->id].mpc_apicid) {
1816 reg_00.bits.ID = mp_ioapics[dev->id].mpc_apicid;
1817 io_apic_write(dev->id, 0, reg_00.raw);
1819 for (i = 0; i < nr_ioapic_registers[dev->id]; i ++, entry ++ ) {
1820 io_apic_write(dev->id, 0x11+2*i, *(((int *)entry)+1));
1821 io_apic_write(dev->id, 0x10+2*i, *(((int *)entry)+0));
1823 spin_unlock_irqrestore(&ioapic_lock, flags);
1828 static struct sysdev_class ioapic_sysdev_class = {
1829 set_kset_name("ioapic"),
1830 .suspend = ioapic_suspend,
1831 .resume = ioapic_resume,
1834 static int __init ioapic_init_sysfs(void)
1836 struct sys_device * dev;
1837 int i, size, error = 0;
1839 error = sysdev_class_register(&ioapic_sysdev_class);
1843 for (i = 0; i < nr_ioapics; i++ ) {
1844 size = sizeof(struct sys_device) + nr_ioapic_registers[i]
1845 * sizeof(struct IO_APIC_route_entry);
1846 mp_ioapic_data[i] = kmalloc(size, GFP_KERNEL);
1847 if (!mp_ioapic_data[i]) {
1848 printk(KERN_ERR "Can't suspend/resume IOAPIC %d\n", i);
1851 memset(mp_ioapic_data[i], 0, size);
1852 dev = &mp_ioapic_data[i]->dev;
1854 dev->cls = &ioapic_sysdev_class;
1855 error = sysdev_register(dev);
1857 kfree(mp_ioapic_data[i]);
1858 mp_ioapic_data[i] = NULL;
1859 printk(KERN_ERR "Can't suspend/resume IOAPIC %d\n", i);
1867 device_initcall(ioapic_init_sysfs);
1869 /* --------------------------------------------------------------------------
1870 ACPI-based IOAPIC Configuration
1871 -------------------------------------------------------------------------- */
1875 #define IO_APIC_MAX_ID 0xFE
1877 int __init io_apic_get_version (int ioapic)
1879 union IO_APIC_reg_01 reg_01;
1880 unsigned long flags;
1882 spin_lock_irqsave(&ioapic_lock, flags);
1883 reg_01.raw = io_apic_read(ioapic, 1);
1884 spin_unlock_irqrestore(&ioapic_lock, flags);
1886 return reg_01.bits.version;
1890 int __init io_apic_get_redir_entries (int ioapic)
1892 union IO_APIC_reg_01 reg_01;
1893 unsigned long flags;
1895 spin_lock_irqsave(&ioapic_lock, flags);
1896 reg_01.raw = io_apic_read(ioapic, 1);
1897 spin_unlock_irqrestore(&ioapic_lock, flags);
1899 return reg_01.bits.entries;
1903 int io_apic_set_pci_routing (int ioapic, int pin, int irq, int edge_level, int active_high_low)
1905 struct IO_APIC_route_entry entry;
1906 unsigned long flags;
1908 if (!IO_APIC_IRQ(irq)) {
1909 apic_printk(APIC_QUIET,KERN_ERR "IOAPIC[%d]: Invalid reference to IRQ 0\n",
1915 * Generate a PCI IRQ routing entry and program the IOAPIC accordingly.
1916 * Note that we mask (disable) IRQs now -- these get enabled when the
1917 * corresponding device driver registers for this IRQ.
1920 memset(&entry,0,sizeof(entry));
1922 entry.delivery_mode = INT_DELIVERY_MODE;
1923 entry.dest_mode = INT_DEST_MODE;
1924 entry.dest.logical.logical_dest = cpu_mask_to_apicid(TARGET_CPUS);
1925 entry.trigger = edge_level;
1926 entry.polarity = active_high_low;
1927 entry.mask = 1; /* Disabled (masked) */
1930 * IRQs < 16 are already in the irq_2_pin[] map
1933 add_pin_to_irq(irq, ioapic, pin);
1935 entry.vector = assign_irq_vector(irq);
1937 apic_printk(APIC_VERBOSE,KERN_DEBUG "IOAPIC[%d]: Set PCI routing entry (%d-%d -> 0x%x -> "
1938 "IRQ %d Mode:%i Active:%i)\n", ioapic,
1939 mp_ioapics[ioapic].mpc_apicid, pin, entry.vector, irq,
1940 edge_level, active_high_low);
1942 ioapic_register_intr(irq, entry.vector, edge_level);
1944 if (!ioapic && (irq < 16))
1945 disable_8259A_irq(irq);
1947 spin_lock_irqsave(&ioapic_lock, flags);
1948 io_apic_write(ioapic, 0x11+2*pin, *(((int *)&entry)+1));
1949 io_apic_write(ioapic, 0x10+2*pin, *(((int *)&entry)+0));
1950 set_native_irq_info(use_pci_vector() ? entry.vector : irq, TARGET_CPUS);
1951 spin_unlock_irqrestore(&ioapic_lock, flags);
1956 #endif /* CONFIG_ACPI */
1960 * This function currently is only a helper for the i386 smp boot process where
1961 * we need to reprogram the ioredtbls to cater for the cpus which have come online
1962 * so mask in all cases should simply be TARGET_CPUS
1965 void __init setup_ioapic_dest(void)
1967 int pin, ioapic, irq, irq_entry;
1969 if (skip_ioapic_setup == 1)
1972 for (ioapic = 0; ioapic < nr_ioapics; ioapic++) {
1973 for (pin = 0; pin < nr_ioapic_registers[ioapic]; pin++) {
1974 irq_entry = find_irq_entry(ioapic, pin, mp_INT);
1975 if (irq_entry == -1)
1977 irq = pin_2_irq(irq_entry, ioapic, pin);
1978 set_ioapic_affinity_irq(irq, TARGET_CPUS);