1 /* 2 * Intel IO-APIC support for multi-Pentium hosts. 3 * 4 * Copyright (C) 1997, 1998, 1999, 2000, 2009 Ingo Molnar, Hajnalka Szabo 5 * 6 * Many thanks to Stig Venaas for trying out countless experimental 7 * patches and reporting/debugging problems patiently! 8 * 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> 14 * 15 * Fixes 16 * Maciej W. Rozycki : Bits for genuine 82489DX APICs; 17 * thanks to Eric Gilmore 18 * and Rolf G. Tews 19 * for testing these extensively 20 * Paul Diefenbaugh : Added full ACPI support 21 */ 22 23 #include <linux/mm.h> 24 #include <linux/interrupt.h> 25 #include <linux/init.h> 26 #include <linux/delay.h> 27 #include <linux/sched.h> 28 #include <linux/pci.h> 29 #include <linux/mc146818rtc.h> 30 #include <linux/compiler.h> 31 #include <linux/acpi.h> 32 #include <linux/module.h> 33 #include <linux/sysdev.h> 34 #include <linux/msi.h> 35 #include <linux/htirq.h> 36 #include <linux/freezer.h> 37 #include <linux/kthread.h> 38 #include <linux/jiffies.h> /* time_after() */ 39 #ifdef CONFIG_ACPI 40 #include <acpi/acpi_bus.h> 41 #endif 42 #include <linux/bootmem.h> 43 #include <linux/dmar.h> 44 #include <linux/hpet.h> 45 46 #include <asm/idle.h> 47 #include <asm/io.h> 48 #include <asm/smp.h> 49 #include <asm/cpu.h> 50 #include <asm/desc.h> 51 #include <asm/proto.h> 52 #include <asm/acpi.h> 53 #include <asm/dma.h> 54 #include <asm/timer.h> 55 #include <asm/i8259.h> 56 #include <asm/nmi.h> 57 #include <asm/msidef.h> 58 #include <asm/hypertransport.h> 59 #include <asm/setup.h> 60 #include <asm/irq_remapping.h> 61 #include <asm/hpet.h> 62 #include <asm/hw_irq.h> 63 #include <asm/uv/uv_hub.h> 64 #include <asm/uv/uv_irq.h> 65 66 #include <asm/apic.h> 67 68 #define __apicdebuginit(type) static type __init 69 70 /* 71 * Is the SiS APIC rmw bug present ? 72 * -1 = don't know, 0 = no, 1 = yes 73 */ 74 int sis_apic_bug = -1; 75 76 static DEFINE_SPINLOCK(ioapic_lock); 77 static DEFINE_SPINLOCK(vector_lock); 78 79 /* 80 * # of IRQ routing registers 81 */ 82 int nr_ioapic_registers[MAX_IO_APICS]; 83 84 /* I/O APIC entries */ 85 struct mpc_ioapic mp_ioapics[MAX_IO_APICS]; 86 int nr_ioapics; 87 88 /* MP IRQ source entries */ 89 struct mpc_intsrc mp_irqs[MAX_IRQ_SOURCES]; 90 91 /* # of MP IRQ source entries */ 92 int mp_irq_entries; 93 94 #if defined (CONFIG_MCA) || defined (CONFIG_EISA) 95 int mp_bus_id_to_type[MAX_MP_BUSSES]; 96 #endif 97 98 DECLARE_BITMAP(mp_bus_not_pci, MAX_MP_BUSSES); 99 100 int skip_ioapic_setup; 101 102 void arch_disable_smp_support(void) 103 { 104 #ifdef CONFIG_PCI 105 noioapicquirk = 1; 106 noioapicreroute = -1; 107 #endif 108 skip_ioapic_setup = 1; 109 } 110 111 static int __init parse_noapic(char *str) 112 { 113 /* disable IO-APIC */ 114 arch_disable_smp_support(); 115 return 0; 116 } 117 early_param("noapic", parse_noapic); 118 119 struct irq_pin_list; 120 121 /* 122 * This is performance-critical, we want to do it O(1) 123 * 124 * the indexing order of this array favors 1:1 mappings 125 * between pins and IRQs. 126 */ 127 128 struct irq_pin_list { 129 int apic, pin; 130 struct irq_pin_list *next; 131 }; 132 133 static struct irq_pin_list *get_one_free_irq_2_pin(int node) 134 { 135 struct irq_pin_list *pin; 136 137 pin = kzalloc_node(sizeof(*pin), GFP_ATOMIC, node); 138 139 return pin; 140 } 141 142 struct irq_cfg { 143 struct irq_pin_list *irq_2_pin; 144 cpumask_var_t domain; 145 cpumask_var_t old_domain; 146 unsigned move_cleanup_count; 147 u8 vector; 148 u8 move_in_progress : 1; 149 }; 150 151 /* irq_cfg is indexed by the sum of all RTEs in all I/O APICs. */ 152 #ifdef CONFIG_SPARSE_IRQ 153 static struct irq_cfg irq_cfgx[] = { 154 #else 155 static struct irq_cfg irq_cfgx[NR_IRQS] = { 156 #endif 157 [0] = { .vector = IRQ0_VECTOR, }, 158 [1] = { .vector = IRQ1_VECTOR, }, 159 [2] = { .vector = IRQ2_VECTOR, }, 160 [3] = { .vector = IRQ3_VECTOR, }, 161 [4] = { .vector = IRQ4_VECTOR, }, 162 [5] = { .vector = IRQ5_VECTOR, }, 163 [6] = { .vector = IRQ6_VECTOR, }, 164 [7] = { .vector = IRQ7_VECTOR, }, 165 [8] = { .vector = IRQ8_VECTOR, }, 166 [9] = { .vector = IRQ9_VECTOR, }, 167 [10] = { .vector = IRQ10_VECTOR, }, 168 [11] = { .vector = IRQ11_VECTOR, }, 169 [12] = { .vector = IRQ12_VECTOR, }, 170 [13] = { .vector = IRQ13_VECTOR, }, 171 [14] = { .vector = IRQ14_VECTOR, }, 172 [15] = { .vector = IRQ15_VECTOR, }, 173 }; 174 175 int __init arch_early_irq_init(void) 176 { 177 struct irq_cfg *cfg; 178 struct irq_desc *desc; 179 int count; 180 int node; 181 int i; 182 183 cfg = irq_cfgx; 184 count = ARRAY_SIZE(irq_cfgx); 185 node= cpu_to_node(boot_cpu_id); 186 187 for (i = 0; i < count; i++) { 188 desc = irq_to_desc(i); 189 desc->chip_data = &cfg[i]; 190 alloc_cpumask_var_node(&cfg[i].domain, GFP_NOWAIT, node); 191 alloc_cpumask_var_node(&cfg[i].old_domain, GFP_NOWAIT, node); 192 if (i < NR_IRQS_LEGACY) 193 cpumask_setall(cfg[i].domain); 194 } 195 196 return 0; 197 } 198 199 #ifdef CONFIG_SPARSE_IRQ 200 static struct irq_cfg *irq_cfg(unsigned int irq) 201 { 202 struct irq_cfg *cfg = NULL; 203 struct irq_desc *desc; 204 205 desc = irq_to_desc(irq); 206 if (desc) 207 cfg = desc->chip_data; 208 209 return cfg; 210 } 211 212 static struct irq_cfg *get_one_free_irq_cfg(int node) 213 { 214 struct irq_cfg *cfg; 215 216 cfg = kzalloc_node(sizeof(*cfg), GFP_ATOMIC, node); 217 if (cfg) { 218 if (!alloc_cpumask_var_node(&cfg->domain, GFP_ATOMIC, node)) { 219 kfree(cfg); 220 cfg = NULL; 221 } else if (!alloc_cpumask_var_node(&cfg->old_domain, 222 GFP_ATOMIC, node)) { 223 free_cpumask_var(cfg->domain); 224 kfree(cfg); 225 cfg = NULL; 226 } else { 227 cpumask_clear(cfg->domain); 228 cpumask_clear(cfg->old_domain); 229 } 230 } 231 232 return cfg; 233 } 234 235 int arch_init_chip_data(struct irq_desc *desc, int node) 236 { 237 struct irq_cfg *cfg; 238 239 cfg = desc->chip_data; 240 if (!cfg) { 241 desc->chip_data = get_one_free_irq_cfg(node); 242 if (!desc->chip_data) { 243 printk(KERN_ERR "can not alloc irq_cfg\n"); 244 BUG_ON(1); 245 } 246 } 247 248 return 0; 249 } 250 251 /* for move_irq_desc */ 252 static void 253 init_copy_irq_2_pin(struct irq_cfg *old_cfg, struct irq_cfg *cfg, int node) 254 { 255 struct irq_pin_list *old_entry, *head, *tail, *entry; 256 257 cfg->irq_2_pin = NULL; 258 old_entry = old_cfg->irq_2_pin; 259 if (!old_entry) 260 return; 261 262 entry = get_one_free_irq_2_pin(node); 263 if (!entry) 264 return; 265 266 entry->apic = old_entry->apic; 267 entry->pin = old_entry->pin; 268 head = entry; 269 tail = entry; 270 old_entry = old_entry->next; 271 while (old_entry) { 272 entry = get_one_free_irq_2_pin(node); 273 if (!entry) { 274 entry = head; 275 while (entry) { 276 head = entry->next; 277 kfree(entry); 278 entry = head; 279 } 280 /* still use the old one */ 281 return; 282 } 283 entry->apic = old_entry->apic; 284 entry->pin = old_entry->pin; 285 tail->next = entry; 286 tail = entry; 287 old_entry = old_entry->next; 288 } 289 290 tail->next = NULL; 291 cfg->irq_2_pin = head; 292 } 293 294 static void free_irq_2_pin(struct irq_cfg *old_cfg, struct irq_cfg *cfg) 295 { 296 struct irq_pin_list *entry, *next; 297 298 if (old_cfg->irq_2_pin == cfg->irq_2_pin) 299 return; 300 301 entry = old_cfg->irq_2_pin; 302 303 while (entry) { 304 next = entry->next; 305 kfree(entry); 306 entry = next; 307 } 308 old_cfg->irq_2_pin = NULL; 309 } 310 311 void arch_init_copy_chip_data(struct irq_desc *old_desc, 312 struct irq_desc *desc, int node) 313 { 314 struct irq_cfg *cfg; 315 struct irq_cfg *old_cfg; 316 317 cfg = get_one_free_irq_cfg(node); 318 319 if (!cfg) 320 return; 321 322 desc->chip_data = cfg; 323 324 old_cfg = old_desc->chip_data; 325 326 memcpy(cfg, old_cfg, sizeof(struct irq_cfg)); 327 328 init_copy_irq_2_pin(old_cfg, cfg, node); 329 } 330 331 static void free_irq_cfg(struct irq_cfg *old_cfg) 332 { 333 kfree(old_cfg); 334 } 335 336 void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc) 337 { 338 struct irq_cfg *old_cfg, *cfg; 339 340 old_cfg = old_desc->chip_data; 341 cfg = desc->chip_data; 342 343 if (old_cfg == cfg) 344 return; 345 346 if (old_cfg) { 347 free_irq_2_pin(old_cfg, cfg); 348 free_irq_cfg(old_cfg); 349 old_desc->chip_data = NULL; 350 } 351 } 352 /* end for move_irq_desc */ 353 354 #else 355 static struct irq_cfg *irq_cfg(unsigned int irq) 356 { 357 return irq < nr_irqs ? irq_cfgx + irq : NULL; 358 } 359 360 #endif 361 362 struct io_apic { 363 unsigned int index; 364 unsigned int unused[3]; 365 unsigned int data; 366 unsigned int unused2[11]; 367 unsigned int eoi; 368 }; 369 370 static __attribute_const__ struct io_apic __iomem *io_apic_base(int idx) 371 { 372 return (void __iomem *) __fix_to_virt(FIX_IO_APIC_BASE_0 + idx) 373 + (mp_ioapics[idx].apicaddr & ~PAGE_MASK); 374 } 375 376 static inline void io_apic_eoi(unsigned int apic, unsigned int vector) 377 { 378 struct io_apic __iomem *io_apic = io_apic_base(apic); 379 writel(vector, &io_apic->eoi); 380 } 381 382 static inline unsigned int io_apic_read(unsigned int apic, unsigned int reg) 383 { 384 struct io_apic __iomem *io_apic = io_apic_base(apic); 385 writel(reg, &io_apic->index); 386 return readl(&io_apic->data); 387 } 388 389 static inline void io_apic_write(unsigned int apic, unsigned int reg, unsigned int value) 390 { 391 struct io_apic __iomem *io_apic = io_apic_base(apic); 392 writel(reg, &io_apic->index); 393 writel(value, &io_apic->data); 394 } 395 396 /* 397 * Re-write a value: to be used for read-modify-write 398 * cycles where the read already set up the index register. 399 * 400 * Older SiS APIC requires we rewrite the index register 401 */ 402 static inline void io_apic_modify(unsigned int apic, unsigned int reg, unsigned int value) 403 { 404 struct io_apic __iomem *io_apic = io_apic_base(apic); 405 406 if (sis_apic_bug) 407 writel(reg, &io_apic->index); 408 writel(value, &io_apic->data); 409 } 410 411 static bool io_apic_level_ack_pending(struct irq_cfg *cfg) 412 { 413 struct irq_pin_list *entry; 414 unsigned long flags; 415 416 spin_lock_irqsave(&ioapic_lock, flags); 417 entry = cfg->irq_2_pin; 418 for (;;) { 419 unsigned int reg; 420 int pin; 421 422 if (!entry) 423 break; 424 pin = entry->pin; 425 reg = io_apic_read(entry->apic, 0x10 + pin*2); 426 /* Is the remote IRR bit set? */ 427 if (reg & IO_APIC_REDIR_REMOTE_IRR) { 428 spin_unlock_irqrestore(&ioapic_lock, flags); 429 return true; 430 } 431 if (!entry->next) 432 break; 433 entry = entry->next; 434 } 435 spin_unlock_irqrestore(&ioapic_lock, flags); 436 437 return false; 438 } 439 440 union entry_union { 441 struct { u32 w1, w2; }; 442 struct IO_APIC_route_entry entry; 443 }; 444 445 static struct IO_APIC_route_entry ioapic_read_entry(int apic, int pin) 446 { 447 union entry_union eu; 448 unsigned long flags; 449 spin_lock_irqsave(&ioapic_lock, flags); 450 eu.w1 = io_apic_read(apic, 0x10 + 2 * pin); 451 eu.w2 = io_apic_read(apic, 0x11 + 2 * pin); 452 spin_unlock_irqrestore(&ioapic_lock, flags); 453 return eu.entry; 454 } 455 456 /* 457 * When we write a new IO APIC routing entry, we need to write the high 458 * word first! If the mask bit in the low word is clear, we will enable 459 * the interrupt, and we need to make sure the entry is fully populated 460 * before that happens. 461 */ 462 static void 463 __ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) 464 { 465 union entry_union eu; 466 eu.entry = e; 467 io_apic_write(apic, 0x11 + 2*pin, eu.w2); 468 io_apic_write(apic, 0x10 + 2*pin, eu.w1); 469 } 470 471 void ioapic_write_entry(int apic, int pin, struct IO_APIC_route_entry e) 472 { 473 unsigned long flags; 474 spin_lock_irqsave(&ioapic_lock, flags); 475 __ioapic_write_entry(apic, pin, e); 476 spin_unlock_irqrestore(&ioapic_lock, flags); 477 } 478 479 /* 480 * When we mask an IO APIC routing entry, we need to write the low 481 * word first, in order to set the mask bit before we change the 482 * high bits! 483 */ 484 static void ioapic_mask_entry(int apic, int pin) 485 { 486 unsigned long flags; 487 union entry_union eu = { .entry.mask = 1 }; 488 489 spin_lock_irqsave(&ioapic_lock, flags); 490 io_apic_write(apic, 0x10 + 2*pin, eu.w1); 491 io_apic_write(apic, 0x11 + 2*pin, eu.w2); 492 spin_unlock_irqrestore(&ioapic_lock, flags); 493 } 494 495 /* 496 * The common case is 1:1 IRQ<->pin mappings. Sometimes there are 497 * shared ISA-space IRQs, so we have to support them. We are super 498 * fast in the common case, and fast for shared ISA-space IRQs. 499 */ 500 static void add_pin_to_irq_node(struct irq_cfg *cfg, int node, int apic, int pin) 501 { 502 struct irq_pin_list *entry; 503 504 entry = cfg->irq_2_pin; 505 if (!entry) { 506 entry = get_one_free_irq_2_pin(node); 507 if (!entry) { 508 printk(KERN_ERR "can not alloc irq_2_pin to add %d - %d\n", 509 apic, pin); 510 return; 511 } 512 cfg->irq_2_pin = entry; 513 entry->apic = apic; 514 entry->pin = pin; 515 return; 516 } 517 518 while (entry->next) { 519 /* not again, please */ 520 if (entry->apic == apic && entry->pin == pin) 521 return; 522 523 entry = entry->next; 524 } 525 526 entry->next = get_one_free_irq_2_pin(node); 527 entry = entry->next; 528 entry->apic = apic; 529 entry->pin = pin; 530 } 531 532 /* 533 * Reroute an IRQ to a different pin. 534 */ 535 static void __init replace_pin_at_irq_node(struct irq_cfg *cfg, int node, 536 int oldapic, int oldpin, 537 int newapic, int newpin) 538 { 539 struct irq_pin_list *entry = cfg->irq_2_pin; 540 int replaced = 0; 541 542 while (entry) { 543 if (entry->apic == oldapic && entry->pin == oldpin) { 544 entry->apic = newapic; 545 entry->pin = newpin; 546 replaced = 1; 547 /* every one is different, right? */ 548 break; 549 } 550 entry = entry->next; 551 } 552 553 /* why? call replace before add? */ 554 if (!replaced) 555 add_pin_to_irq_node(cfg, node, newapic, newpin); 556 } 557 558 static inline void io_apic_modify_irq(struct irq_cfg *cfg, 559 int mask_and, int mask_or, 560 void (*final)(struct irq_pin_list *entry)) 561 { 562 int pin; 563 struct irq_pin_list *entry; 564 565 for (entry = cfg->irq_2_pin; entry != NULL; entry = entry->next) { 566 unsigned int reg; 567 pin = entry->pin; 568 reg = io_apic_read(entry->apic, 0x10 + pin * 2); 569 reg &= mask_and; 570 reg |= mask_or; 571 io_apic_modify(entry->apic, 0x10 + pin * 2, reg); 572 if (final) 573 final(entry); 574 } 575 } 576 577 static void __unmask_IO_APIC_irq(struct irq_cfg *cfg) 578 { 579 io_apic_modify_irq(cfg, ~IO_APIC_REDIR_MASKED, 0, NULL); 580 } 581 582 #ifdef CONFIG_X86_64 583 static void io_apic_sync(struct irq_pin_list *entry) 584 { 585 /* 586 * Synchronize the IO-APIC and the CPU by doing 587 * a dummy read from the IO-APIC 588 */ 589 struct io_apic __iomem *io_apic; 590 io_apic = io_apic_base(entry->apic); 591 readl(&io_apic->data); 592 } 593 594 static void __mask_IO_APIC_irq(struct irq_cfg *cfg) 595 { 596 io_apic_modify_irq(cfg, ~0, IO_APIC_REDIR_MASKED, &io_apic_sync); 597 } 598 #else /* CONFIG_X86_32 */ 599 static void __mask_IO_APIC_irq(struct irq_cfg *cfg) 600 { 601 io_apic_modify_irq(cfg, ~0, IO_APIC_REDIR_MASKED, NULL); 602 } 603 604 static void __mask_and_edge_IO_APIC_irq(struct irq_cfg *cfg) 605 { 606 io_apic_modify_irq(cfg, ~IO_APIC_REDIR_LEVEL_TRIGGER, 607 IO_APIC_REDIR_MASKED, NULL); 608 } 609 610 static void __unmask_and_level_IO_APIC_irq(struct irq_cfg *cfg) 611 { 612 io_apic_modify_irq(cfg, ~IO_APIC_REDIR_MASKED, 613 IO_APIC_REDIR_LEVEL_TRIGGER, NULL); 614 } 615 #endif /* CONFIG_X86_32 */ 616 617 static void mask_IO_APIC_irq_desc(struct irq_desc *desc) 618 { 619 struct irq_cfg *cfg = desc->chip_data; 620 unsigned long flags; 621 622 BUG_ON(!cfg); 623 624 spin_lock_irqsave(&ioapic_lock, flags); 625 __mask_IO_APIC_irq(cfg); 626 spin_unlock_irqrestore(&ioapic_lock, flags); 627 } 628 629 static void unmask_IO_APIC_irq_desc(struct irq_desc *desc) 630 { 631 struct irq_cfg *cfg = desc->chip_data; 632 unsigned long flags; 633 634 spin_lock_irqsave(&ioapic_lock, flags); 635 __unmask_IO_APIC_irq(cfg); 636 spin_unlock_irqrestore(&ioapic_lock, flags); 637 } 638 639 static void mask_IO_APIC_irq(unsigned int irq) 640 { 641 struct irq_desc *desc = irq_to_desc(irq); 642 643 mask_IO_APIC_irq_desc(desc); 644 } 645 static void unmask_IO_APIC_irq(unsigned int irq) 646 { 647 struct irq_desc *desc = irq_to_desc(irq); 648 649 unmask_IO_APIC_irq_desc(desc); 650 } 651 652 static void clear_IO_APIC_pin(unsigned int apic, unsigned int pin) 653 { 654 struct IO_APIC_route_entry entry; 655 656 /* Check delivery_mode to be sure we're not clearing an SMI pin */ 657 entry = ioapic_read_entry(apic, pin); 658 if (entry.delivery_mode == dest_SMI) 659 return; 660 /* 661 * Disable it in the IO-APIC irq-routing table: 662 */ 663 ioapic_mask_entry(apic, pin); 664 } 665 666 static void clear_IO_APIC (void) 667 { 668 int apic, pin; 669 670 for (apic = 0; apic < nr_ioapics; apic++) 671 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) 672 clear_IO_APIC_pin(apic, pin); 673 } 674 675 #ifdef CONFIG_X86_32 676 /* 677 * support for broken MP BIOSs, enables hand-redirection of PIRQ0-7 to 678 * specific CPU-side IRQs. 679 */ 680 681 #define MAX_PIRQS 8 682 static int pirq_entries[MAX_PIRQS] = { 683 [0 ... MAX_PIRQS - 1] = -1 684 }; 685 686 static int __init ioapic_pirq_setup(char *str) 687 { 688 int i, max; 689 int ints[MAX_PIRQS+1]; 690 691 get_options(str, ARRAY_SIZE(ints), ints); 692 693 apic_printk(APIC_VERBOSE, KERN_INFO 694 "PIRQ redirection, working around broken MP-BIOS.\n"); 695 max = MAX_PIRQS; 696 if (ints[0] < MAX_PIRQS) 697 max = ints[0]; 698 699 for (i = 0; i < max; i++) { 700 apic_printk(APIC_VERBOSE, KERN_DEBUG 701 "... PIRQ%d -> IRQ %d\n", i, ints[i+1]); 702 /* 703 * PIRQs are mapped upside down, usually. 704 */ 705 pirq_entries[MAX_PIRQS-i-1] = ints[i+1]; 706 } 707 return 1; 708 } 709 710 __setup("pirq=", ioapic_pirq_setup); 711 #endif /* CONFIG_X86_32 */ 712 713 struct IO_APIC_route_entry **alloc_ioapic_entries(void) 714 { 715 int apic; 716 struct IO_APIC_route_entry **ioapic_entries; 717 718 ioapic_entries = kzalloc(sizeof(*ioapic_entries) * nr_ioapics, 719 GFP_ATOMIC); 720 if (!ioapic_entries) 721 return 0; 722 723 for (apic = 0; apic < nr_ioapics; apic++) { 724 ioapic_entries[apic] = 725 kzalloc(sizeof(struct IO_APIC_route_entry) * 726 nr_ioapic_registers[apic], GFP_ATOMIC); 727 if (!ioapic_entries[apic]) 728 goto nomem; 729 } 730 731 return ioapic_entries; 732 733 nomem: 734 while (--apic >= 0) 735 kfree(ioapic_entries[apic]); 736 kfree(ioapic_entries); 737 738 return 0; 739 } 740 741 /* 742 * Saves all the IO-APIC RTE's 743 */ 744 int save_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries) 745 { 746 int apic, pin; 747 748 if (!ioapic_entries) 749 return -ENOMEM; 750 751 for (apic = 0; apic < nr_ioapics; apic++) { 752 if (!ioapic_entries[apic]) 753 return -ENOMEM; 754 755 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) 756 ioapic_entries[apic][pin] = 757 ioapic_read_entry(apic, pin); 758 } 759 760 return 0; 761 } 762 763 /* 764 * Mask all IO APIC entries. 765 */ 766 void mask_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries) 767 { 768 int apic, pin; 769 770 if (!ioapic_entries) 771 return; 772 773 for (apic = 0; apic < nr_ioapics; apic++) { 774 if (!ioapic_entries[apic]) 775 break; 776 777 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { 778 struct IO_APIC_route_entry entry; 779 780 entry = ioapic_entries[apic][pin]; 781 if (!entry.mask) { 782 entry.mask = 1; 783 ioapic_write_entry(apic, pin, entry); 784 } 785 } 786 } 787 } 788 789 /* 790 * Restore IO APIC entries which was saved in ioapic_entries. 791 */ 792 int restore_IO_APIC_setup(struct IO_APIC_route_entry **ioapic_entries) 793 { 794 int apic, pin; 795 796 if (!ioapic_entries) 797 return -ENOMEM; 798 799 for (apic = 0; apic < nr_ioapics; apic++) { 800 if (!ioapic_entries[apic]) 801 return -ENOMEM; 802 803 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) 804 ioapic_write_entry(apic, pin, 805 ioapic_entries[apic][pin]); 806 } 807 return 0; 808 } 809 810 void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries) 811 { 812 int apic; 813 814 for (apic = 0; apic < nr_ioapics; apic++) 815 kfree(ioapic_entries[apic]); 816 817 kfree(ioapic_entries); 818 } 819 820 /* 821 * Find the IRQ entry number of a certain pin. 822 */ 823 static int find_irq_entry(int apic, int pin, int type) 824 { 825 int i; 826 827 for (i = 0; i < mp_irq_entries; i++) 828 if (mp_irqs[i].irqtype == type && 829 (mp_irqs[i].dstapic == mp_ioapics[apic].apicid || 830 mp_irqs[i].dstapic == MP_APIC_ALL) && 831 mp_irqs[i].dstirq == pin) 832 return i; 833 834 return -1; 835 } 836 837 /* 838 * Find the pin to which IRQ[irq] (ISA) is connected 839 */ 840 static int __init find_isa_irq_pin(int irq, int type) 841 { 842 int i; 843 844 for (i = 0; i < mp_irq_entries; i++) { 845 int lbus = mp_irqs[i].srcbus; 846 847 if (test_bit(lbus, mp_bus_not_pci) && 848 (mp_irqs[i].irqtype == type) && 849 (mp_irqs[i].srcbusirq == irq)) 850 851 return mp_irqs[i].dstirq; 852 } 853 return -1; 854 } 855 856 static int __init find_isa_irq_apic(int irq, int type) 857 { 858 int i; 859 860 for (i = 0; i < mp_irq_entries; i++) { 861 int lbus = mp_irqs[i].srcbus; 862 863 if (test_bit(lbus, mp_bus_not_pci) && 864 (mp_irqs[i].irqtype == type) && 865 (mp_irqs[i].srcbusirq == irq)) 866 break; 867 } 868 if (i < mp_irq_entries) { 869 int apic; 870 for(apic = 0; apic < nr_ioapics; apic++) { 871 if (mp_ioapics[apic].apicid == mp_irqs[i].dstapic) 872 return apic; 873 } 874 } 875 876 return -1; 877 } 878 879 #if defined(CONFIG_EISA) || defined(CONFIG_MCA) 880 /* 881 * EISA Edge/Level control register, ELCR 882 */ 883 static int EISA_ELCR(unsigned int irq) 884 { 885 if (irq < NR_IRQS_LEGACY) { 886 unsigned int port = 0x4d0 + (irq >> 3); 887 return (inb(port) >> (irq & 7)) & 1; 888 } 889 apic_printk(APIC_VERBOSE, KERN_INFO 890 "Broken MPtable reports ISA irq %d\n", irq); 891 return 0; 892 } 893 894 #endif 895 896 /* ISA interrupts are always polarity zero edge triggered, 897 * when listed as conforming in the MP table. */ 898 899 #define default_ISA_trigger(idx) (0) 900 #define default_ISA_polarity(idx) (0) 901 902 /* EISA interrupts are always polarity zero and can be edge or level 903 * trigger depending on the ELCR value. If an interrupt is listed as 904 * EISA conforming in the MP table, that means its trigger type must 905 * be read in from the ELCR */ 906 907 #define default_EISA_trigger(idx) (EISA_ELCR(mp_irqs[idx].srcbusirq)) 908 #define default_EISA_polarity(idx) default_ISA_polarity(idx) 909 910 /* PCI interrupts are always polarity one level triggered, 911 * when listed as conforming in the MP table. */ 912 913 #define default_PCI_trigger(idx) (1) 914 #define default_PCI_polarity(idx) (1) 915 916 /* MCA interrupts are always polarity zero level triggered, 917 * when listed as conforming in the MP table. */ 918 919 #define default_MCA_trigger(idx) (1) 920 #define default_MCA_polarity(idx) default_ISA_polarity(idx) 921 922 static int MPBIOS_polarity(int idx) 923 { 924 int bus = mp_irqs[idx].srcbus; 925 int polarity; 926 927 /* 928 * Determine IRQ line polarity (high active or low active): 929 */ 930 switch (mp_irqs[idx].irqflag & 3) 931 { 932 case 0: /* conforms, ie. bus-type dependent polarity */ 933 if (test_bit(bus, mp_bus_not_pci)) 934 polarity = default_ISA_polarity(idx); 935 else 936 polarity = default_PCI_polarity(idx); 937 break; 938 case 1: /* high active */ 939 { 940 polarity = 0; 941 break; 942 } 943 case 2: /* reserved */ 944 { 945 printk(KERN_WARNING "broken BIOS!!\n"); 946 polarity = 1; 947 break; 948 } 949 case 3: /* low active */ 950 { 951 polarity = 1; 952 break; 953 } 954 default: /* invalid */ 955 { 956 printk(KERN_WARNING "broken BIOS!!\n"); 957 polarity = 1; 958 break; 959 } 960 } 961 return polarity; 962 } 963 964 static int MPBIOS_trigger(int idx) 965 { 966 int bus = mp_irqs[idx].srcbus; 967 int trigger; 968 969 /* 970 * Determine IRQ trigger mode (edge or level sensitive): 971 */ 972 switch ((mp_irqs[idx].irqflag>>2) & 3) 973 { 974 case 0: /* conforms, ie. bus-type dependent */ 975 if (test_bit(bus, mp_bus_not_pci)) 976 trigger = default_ISA_trigger(idx); 977 else 978 trigger = default_PCI_trigger(idx); 979 #if defined(CONFIG_EISA) || defined(CONFIG_MCA) 980 switch (mp_bus_id_to_type[bus]) { 981 case MP_BUS_ISA: /* ISA pin */ 982 { 983 /* set before the switch */ 984 break; 985 } 986 case MP_BUS_EISA: /* EISA pin */ 987 { 988 trigger = default_EISA_trigger(idx); 989 break; 990 } 991 case MP_BUS_PCI: /* PCI pin */ 992 { 993 /* set before the switch */ 994 break; 995 } 996 case MP_BUS_MCA: /* MCA pin */ 997 { 998 trigger = default_MCA_trigger(idx); 999 break; 1000 } 1001 default: 1002 { 1003 printk(KERN_WARNING "broken BIOS!!\n"); 1004 trigger = 1; 1005 break; 1006 } 1007 } 1008 #endif 1009 break; 1010 case 1: /* edge */ 1011 { 1012 trigger = 0; 1013 break; 1014 } 1015 case 2: /* reserved */ 1016 { 1017 printk(KERN_WARNING "broken BIOS!!\n"); 1018 trigger = 1; 1019 break; 1020 } 1021 case 3: /* level */ 1022 { 1023 trigger = 1; 1024 break; 1025 } 1026 default: /* invalid */ 1027 { 1028 printk(KERN_WARNING "broken BIOS!!\n"); 1029 trigger = 0; 1030 break; 1031 } 1032 } 1033 return trigger; 1034 } 1035 1036 static inline int irq_polarity(int idx) 1037 { 1038 return MPBIOS_polarity(idx); 1039 } 1040 1041 static inline int irq_trigger(int idx) 1042 { 1043 return MPBIOS_trigger(idx); 1044 } 1045 1046 int (*ioapic_renumber_irq)(int ioapic, int irq); 1047 static int pin_2_irq(int idx, int apic, int pin) 1048 { 1049 int irq, i; 1050 int bus = mp_irqs[idx].srcbus; 1051 1052 /* 1053 * Debugging check, we are in big trouble if this message pops up! 1054 */ 1055 if (mp_irqs[idx].dstirq != pin) 1056 printk(KERN_ERR "broken BIOS or MPTABLE parser, ayiee!!\n"); 1057 1058 if (test_bit(bus, mp_bus_not_pci)) { 1059 irq = mp_irqs[idx].srcbusirq; 1060 } else { 1061 /* 1062 * PCI IRQs are mapped in order 1063 */ 1064 i = irq = 0; 1065 while (i < apic) 1066 irq += nr_ioapic_registers[i++]; 1067 irq += pin; 1068 /* 1069 * For MPS mode, so far only needed by ES7000 platform 1070 */ 1071 if (ioapic_renumber_irq) 1072 irq = ioapic_renumber_irq(apic, irq); 1073 } 1074 1075 #ifdef CONFIG_X86_32 1076 /* 1077 * PCI IRQ command line redirection. Yes, limits are hardcoded. 1078 */ 1079 if ((pin >= 16) && (pin <= 23)) { 1080 if (pirq_entries[pin-16] != -1) { 1081 if (!pirq_entries[pin-16]) { 1082 apic_printk(APIC_VERBOSE, KERN_DEBUG 1083 "disabling PIRQ%d\n", pin-16); 1084 } else { 1085 irq = pirq_entries[pin-16]; 1086 apic_printk(APIC_VERBOSE, KERN_DEBUG 1087 "using PIRQ%d -> IRQ %d\n", 1088 pin-16, irq); 1089 } 1090 } 1091 } 1092 #endif 1093 1094 return irq; 1095 } 1096 1097 /* 1098 * Find a specific PCI IRQ entry. 1099 * Not an __init, possibly needed by modules 1100 */ 1101 int IO_APIC_get_PCI_irq_vector(int bus, int slot, int pin, 1102 struct io_apic_irq_attr *irq_attr) 1103 { 1104 int apic, i, best_guess = -1; 1105 1106 apic_printk(APIC_DEBUG, 1107 "querying PCI -> IRQ mapping bus:%d, slot:%d, pin:%d.\n", 1108 bus, slot, pin); 1109 if (test_bit(bus, mp_bus_not_pci)) { 1110 apic_printk(APIC_VERBOSE, 1111 "PCI BIOS passed nonexistent PCI bus %d!\n", bus); 1112 return -1; 1113 } 1114 for (i = 0; i < mp_irq_entries; i++) { 1115 int lbus = mp_irqs[i].srcbus; 1116 1117 for (apic = 0; apic < nr_ioapics; apic++) 1118 if (mp_ioapics[apic].apicid == mp_irqs[i].dstapic || 1119 mp_irqs[i].dstapic == MP_APIC_ALL) 1120 break; 1121 1122 if (!test_bit(lbus, mp_bus_not_pci) && 1123 !mp_irqs[i].irqtype && 1124 (bus == lbus) && 1125 (slot == ((mp_irqs[i].srcbusirq >> 2) & 0x1f))) { 1126 int irq = pin_2_irq(i, apic, mp_irqs[i].dstirq); 1127 1128 if (!(apic || IO_APIC_IRQ(irq))) 1129 continue; 1130 1131 if (pin == (mp_irqs[i].srcbusirq & 3)) { 1132 set_io_apic_irq_attr(irq_attr, apic, 1133 mp_irqs[i].dstirq, 1134 irq_trigger(i), 1135 irq_polarity(i)); 1136 return irq; 1137 } 1138 /* 1139 * Use the first all-but-pin matching entry as a 1140 * best-guess fuzzy result for broken mptables. 1141 */ 1142 if (best_guess < 0) { 1143 set_io_apic_irq_attr(irq_attr, apic, 1144 mp_irqs[i].dstirq, 1145 irq_trigger(i), 1146 irq_polarity(i)); 1147 best_guess = irq; 1148 } 1149 } 1150 } 1151 return best_guess; 1152 } 1153 EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector); 1154 1155 void lock_vector_lock(void) 1156 { 1157 /* Used to the online set of cpus does not change 1158 * during assign_irq_vector. 1159 */ 1160 spin_lock(&vector_lock); 1161 } 1162 1163 void unlock_vector_lock(void) 1164 { 1165 spin_unlock(&vector_lock); 1166 } 1167 1168 static int 1169 __assign_irq_vector(int irq, struct irq_cfg *cfg, const struct cpumask *mask) 1170 { 1171 /* 1172 * NOTE! The local APIC isn't very good at handling 1173 * multiple interrupts at the same interrupt level. 1174 * As the interrupt level is determined by taking the 1175 * vector number and shifting that right by 4, we 1176 * want to spread these out a bit so that they don't 1177 * all fall in the same interrupt level. 1178 * 1179 * Also, we've got to be careful not to trash gate 1180 * 0x80, because int 0x80 is hm, kind of importantish. ;) 1181 */ 1182 static int current_vector = FIRST_DEVICE_VECTOR, current_offset = 0; 1183 unsigned int old_vector; 1184 int cpu, err; 1185 cpumask_var_t tmp_mask; 1186 1187 if ((cfg->move_in_progress) || cfg->move_cleanup_count) 1188 return -EBUSY; 1189 1190 if (!alloc_cpumask_var(&tmp_mask, GFP_ATOMIC)) 1191 return -ENOMEM; 1192 1193 old_vector = cfg->vector; 1194 if (old_vector) { 1195 cpumask_and(tmp_mask, mask, cpu_online_mask); 1196 cpumask_and(tmp_mask, cfg->domain, tmp_mask); 1197 if (!cpumask_empty(tmp_mask)) { 1198 free_cpumask_var(tmp_mask); 1199 return 0; 1200 } 1201 } 1202 1203 /* Only try and allocate irqs on cpus that are present */ 1204 err = -ENOSPC; 1205 for_each_cpu_and(cpu, mask, cpu_online_mask) { 1206 int new_cpu; 1207 int vector, offset; 1208 1209 apic->vector_allocation_domain(cpu, tmp_mask); 1210 1211 vector = current_vector; 1212 offset = current_offset; 1213 next: 1214 vector += 8; 1215 if (vector >= first_system_vector) { 1216 /* If out of vectors on large boxen, must share them. */ 1217 offset = (offset + 1) % 8; 1218 vector = FIRST_DEVICE_VECTOR + offset; 1219 } 1220 if (unlikely(current_vector == vector)) 1221 continue; 1222 1223 if (test_bit(vector, used_vectors)) 1224 goto next; 1225 1226 for_each_cpu_and(new_cpu, tmp_mask, cpu_online_mask) 1227 if (per_cpu(vector_irq, new_cpu)[vector] != -1) 1228 goto next; 1229 /* Found one! */ 1230 current_vector = vector; 1231 current_offset = offset; 1232 if (old_vector) { 1233 cfg->move_in_progress = 1; 1234 cpumask_copy(cfg->old_domain, cfg->domain); 1235 } 1236 for_each_cpu_and(new_cpu, tmp_mask, cpu_online_mask) 1237 per_cpu(vector_irq, new_cpu)[vector] = irq; 1238 cfg->vector = vector; 1239 cpumask_copy(cfg->domain, tmp_mask); 1240 err = 0; 1241 break; 1242 } 1243 free_cpumask_var(tmp_mask); 1244 return err; 1245 } 1246 1247 static int 1248 assign_irq_vector(int irq, struct irq_cfg *cfg, const struct cpumask *mask) 1249 { 1250 int err; 1251 unsigned long flags; 1252 1253 spin_lock_irqsave(&vector_lock, flags); 1254 err = __assign_irq_vector(irq, cfg, mask); 1255 spin_unlock_irqrestore(&vector_lock, flags); 1256 return err; 1257 } 1258 1259 static void __clear_irq_vector(int irq, struct irq_cfg *cfg) 1260 { 1261 int cpu, vector; 1262 1263 BUG_ON(!cfg->vector); 1264 1265 vector = cfg->vector; 1266 for_each_cpu_and(cpu, cfg->domain, cpu_online_mask) 1267 per_cpu(vector_irq, cpu)[vector] = -1; 1268 1269 cfg->vector = 0; 1270 cpumask_clear(cfg->domain); 1271 1272 if (likely(!cfg->move_in_progress)) 1273 return; 1274 for_each_cpu_and(cpu, cfg->old_domain, cpu_online_mask) { 1275 for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; 1276 vector++) { 1277 if (per_cpu(vector_irq, cpu)[vector] != irq) 1278 continue; 1279 per_cpu(vector_irq, cpu)[vector] = -1; 1280 break; 1281 } 1282 } 1283 cfg->move_in_progress = 0; 1284 } 1285 1286 void __setup_vector_irq(int cpu) 1287 { 1288 /* Initialize vector_irq on a new cpu */ 1289 /* This function must be called with vector_lock held */ 1290 int irq, vector; 1291 struct irq_cfg *cfg; 1292 struct irq_desc *desc; 1293 1294 /* Mark the inuse vectors */ 1295 for_each_irq_desc(irq, desc) { 1296 cfg = desc->chip_data; 1297 if (!cpumask_test_cpu(cpu, cfg->domain)) 1298 continue; 1299 vector = cfg->vector; 1300 per_cpu(vector_irq, cpu)[vector] = irq; 1301 } 1302 /* Mark the free vectors */ 1303 for (vector = 0; vector < NR_VECTORS; ++vector) { 1304 irq = per_cpu(vector_irq, cpu)[vector]; 1305 if (irq < 0) 1306 continue; 1307 1308 cfg = irq_cfg(irq); 1309 if (!cpumask_test_cpu(cpu, cfg->domain)) 1310 per_cpu(vector_irq, cpu)[vector] = -1; 1311 } 1312 } 1313 1314 static struct irq_chip ioapic_chip; 1315 static struct irq_chip ir_ioapic_chip; 1316 1317 #define IOAPIC_AUTO -1 1318 #define IOAPIC_EDGE 0 1319 #define IOAPIC_LEVEL 1 1320 1321 #ifdef CONFIG_X86_32 1322 static inline int IO_APIC_irq_trigger(int irq) 1323 { 1324 int apic, idx, pin; 1325 1326 for (apic = 0; apic < nr_ioapics; apic++) { 1327 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { 1328 idx = find_irq_entry(apic, pin, mp_INT); 1329 if ((idx != -1) && (irq == pin_2_irq(idx, apic, pin))) 1330 return irq_trigger(idx); 1331 } 1332 } 1333 /* 1334 * nonexistent IRQs are edge default 1335 */ 1336 return 0; 1337 } 1338 #else 1339 static inline int IO_APIC_irq_trigger(int irq) 1340 { 1341 return 1; 1342 } 1343 #endif 1344 1345 static void ioapic_register_intr(int irq, struct irq_desc *desc, unsigned long trigger) 1346 { 1347 1348 if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || 1349 trigger == IOAPIC_LEVEL) 1350 desc->status |= IRQ_LEVEL; 1351 else 1352 desc->status &= ~IRQ_LEVEL; 1353 1354 if (irq_remapped(irq)) { 1355 desc->status |= IRQ_MOVE_PCNTXT; 1356 if (trigger) 1357 set_irq_chip_and_handler_name(irq, &ir_ioapic_chip, 1358 handle_fasteoi_irq, 1359 "fasteoi"); 1360 else 1361 set_irq_chip_and_handler_name(irq, &ir_ioapic_chip, 1362 handle_edge_irq, "edge"); 1363 return; 1364 } 1365 1366 if ((trigger == IOAPIC_AUTO && IO_APIC_irq_trigger(irq)) || 1367 trigger == IOAPIC_LEVEL) 1368 set_irq_chip_and_handler_name(irq, &ioapic_chip, 1369 handle_fasteoi_irq, 1370 "fasteoi"); 1371 else 1372 set_irq_chip_and_handler_name(irq, &ioapic_chip, 1373 handle_edge_irq, "edge"); 1374 } 1375 1376 int setup_ioapic_entry(int apic_id, int irq, 1377 struct IO_APIC_route_entry *entry, 1378 unsigned int destination, int trigger, 1379 int polarity, int vector, int pin) 1380 { 1381 /* 1382 * add it to the IO-APIC irq-routing table: 1383 */ 1384 memset(entry,0,sizeof(*entry)); 1385 1386 if (intr_remapping_enabled) { 1387 struct intel_iommu *iommu = map_ioapic_to_ir(apic_id); 1388 struct irte irte; 1389 struct IR_IO_APIC_route_entry *ir_entry = 1390 (struct IR_IO_APIC_route_entry *) entry; 1391 int index; 1392 1393 if (!iommu) 1394 panic("No mapping iommu for ioapic %d\n", apic_id); 1395 1396 index = alloc_irte(iommu, irq, 1); 1397 if (index < 0) 1398 panic("Failed to allocate IRTE for ioapic %d\n", apic_id); 1399 1400 memset(&irte, 0, sizeof(irte)); 1401 1402 irte.present = 1; 1403 irte.dst_mode = apic->irq_dest_mode; 1404 /* 1405 * Trigger mode in the IRTE will always be edge, and the 1406 * actual level or edge trigger will be setup in the IO-APIC 1407 * RTE. This will help simplify level triggered irq migration. 1408 * For more details, see the comments above explainig IO-APIC 1409 * irq migration in the presence of interrupt-remapping. 1410 */ 1411 irte.trigger_mode = 0; 1412 irte.dlvry_mode = apic->irq_delivery_mode; 1413 irte.vector = vector; 1414 irte.dest_id = IRTE_DEST(destination); 1415 1416 modify_irte(irq, &irte); 1417 1418 ir_entry->index2 = (index >> 15) & 0x1; 1419 ir_entry->zero = 0; 1420 ir_entry->format = 1; 1421 ir_entry->index = (index & 0x7fff); 1422 /* 1423 * IO-APIC RTE will be configured with virtual vector. 1424 * irq handler will do the explicit EOI to the io-apic. 1425 */ 1426 ir_entry->vector = pin; 1427 } else { 1428 entry->delivery_mode = apic->irq_delivery_mode; 1429 entry->dest_mode = apic->irq_dest_mode; 1430 entry->dest = destination; 1431 entry->vector = vector; 1432 } 1433 1434 entry->mask = 0; /* enable IRQ */ 1435 entry->trigger = trigger; 1436 entry->polarity = polarity; 1437 1438 /* Mask level triggered irqs. 1439 * Use IRQ_DELAYED_DISABLE for edge triggered irqs. 1440 */ 1441 if (trigger) 1442 entry->mask = 1; 1443 return 0; 1444 } 1445 1446 static void setup_IO_APIC_irq(int apic_id, int pin, unsigned int irq, struct irq_desc *desc, 1447 int trigger, int polarity) 1448 { 1449 struct irq_cfg *cfg; 1450 struct IO_APIC_route_entry entry; 1451 unsigned int dest; 1452 1453 if (!IO_APIC_IRQ(irq)) 1454 return; 1455 1456 cfg = desc->chip_data; 1457 1458 if (assign_irq_vector(irq, cfg, apic->target_cpus())) 1459 return; 1460 1461 dest = apic->cpu_mask_to_apicid_and(cfg->domain, apic->target_cpus()); 1462 1463 apic_printk(APIC_VERBOSE,KERN_DEBUG 1464 "IOAPIC[%d]: Set routing entry (%d-%d -> 0x%x -> " 1465 "IRQ %d Mode:%i Active:%i)\n", 1466 apic_id, mp_ioapics[apic_id].apicid, pin, cfg->vector, 1467 irq, trigger, polarity); 1468 1469 1470 if (setup_ioapic_entry(mp_ioapics[apic_id].apicid, irq, &entry, 1471 dest, trigger, polarity, cfg->vector, pin)) { 1472 printk("Failed to setup ioapic entry for ioapic %d, pin %d\n", 1473 mp_ioapics[apic_id].apicid, pin); 1474 __clear_irq_vector(irq, cfg); 1475 return; 1476 } 1477 1478 ioapic_register_intr(irq, desc, trigger); 1479 if (irq < NR_IRQS_LEGACY) 1480 disable_8259A_irq(irq); 1481 1482 ioapic_write_entry(apic_id, pin, entry); 1483 } 1484 1485 static struct { 1486 DECLARE_BITMAP(pin_programmed, MP_MAX_IOAPIC_PIN + 1); 1487 } mp_ioapic_routing[MAX_IO_APICS]; 1488 1489 static void __init setup_IO_APIC_irqs(void) 1490 { 1491 int apic_id = 0, pin, idx, irq; 1492 int notcon = 0; 1493 struct irq_desc *desc; 1494 struct irq_cfg *cfg; 1495 int node = cpu_to_node(boot_cpu_id); 1496 1497 apic_printk(APIC_VERBOSE, KERN_DEBUG "init IO_APIC IRQs\n"); 1498 1499 #ifdef CONFIG_ACPI 1500 if (!acpi_disabled && acpi_ioapic) { 1501 apic_id = mp_find_ioapic(0); 1502 if (apic_id < 0) 1503 apic_id = 0; 1504 } 1505 #endif 1506 1507 for (pin = 0; pin < nr_ioapic_registers[apic_id]; pin++) { 1508 idx = find_irq_entry(apic_id, pin, mp_INT); 1509 if (idx == -1) { 1510 if (!notcon) { 1511 notcon = 1; 1512 apic_printk(APIC_VERBOSE, 1513 KERN_DEBUG " %d-%d", 1514 mp_ioapics[apic_id].apicid, pin); 1515 } else 1516 apic_printk(APIC_VERBOSE, " %d-%d", 1517 mp_ioapics[apic_id].apicid, pin); 1518 continue; 1519 } 1520 if (notcon) { 1521 apic_printk(APIC_VERBOSE, 1522 " (apicid-pin) not connected\n"); 1523 notcon = 0; 1524 } 1525 1526 irq = pin_2_irq(idx, apic_id, pin); 1527 1528 /* 1529 * Skip the timer IRQ if there's a quirk handler 1530 * installed and if it returns 1: 1531 */ 1532 if (apic->multi_timer_check && 1533 apic->multi_timer_check(apic_id, irq)) 1534 continue; 1535 1536 desc = irq_to_desc_alloc_node(irq, node); 1537 if (!desc) { 1538 printk(KERN_INFO "can not get irq_desc for %d\n", irq); 1539 continue; 1540 } 1541 cfg = desc->chip_data; 1542 add_pin_to_irq_node(cfg, node, apic_id, pin); 1543 /* 1544 * don't mark it in pin_programmed, so later acpi could 1545 * set it correctly when irq < 16 1546 */ 1547 setup_IO_APIC_irq(apic_id, pin, irq, desc, 1548 irq_trigger(idx), irq_polarity(idx)); 1549 } 1550 1551 if (notcon) 1552 apic_printk(APIC_VERBOSE, 1553 " (apicid-pin) not connected\n"); 1554 } 1555 1556 /* 1557 * Set up the timer pin, possibly with the 8259A-master behind. 1558 */ 1559 static void __init setup_timer_IRQ0_pin(unsigned int apic_id, unsigned int pin, 1560 int vector) 1561 { 1562 struct IO_APIC_route_entry entry; 1563 1564 if (intr_remapping_enabled) 1565 return; 1566 1567 memset(&entry, 0, sizeof(entry)); 1568 1569 /* 1570 * We use logical delivery to get the timer IRQ 1571 * to the first CPU. 1572 */ 1573 entry.dest_mode = apic->irq_dest_mode; 1574 entry.mask = 0; /* don't mask IRQ for edge */ 1575 entry.dest = apic->cpu_mask_to_apicid(apic->target_cpus()); 1576 entry.delivery_mode = apic->irq_delivery_mode; 1577 entry.polarity = 0; 1578 entry.trigger = 0; 1579 entry.vector = vector; 1580 1581 /* 1582 * The timer IRQ doesn't have to know that behind the 1583 * scene we may have a 8259A-master in AEOI mode ... 1584 */ 1585 set_irq_chip_and_handler_name(0, &ioapic_chip, handle_edge_irq, "edge"); 1586 1587 /* 1588 * Add it to the IO-APIC irq-routing table: 1589 */ 1590 ioapic_write_entry(apic_id, pin, entry); 1591 } 1592 1593 1594 __apicdebuginit(void) print_IO_APIC(void) 1595 { 1596 int apic, i; 1597 union IO_APIC_reg_00 reg_00; 1598 union IO_APIC_reg_01 reg_01; 1599 union IO_APIC_reg_02 reg_02; 1600 union IO_APIC_reg_03 reg_03; 1601 unsigned long flags; 1602 struct irq_cfg *cfg; 1603 struct irq_desc *desc; 1604 unsigned int irq; 1605 1606 if (apic_verbosity == APIC_QUIET) 1607 return; 1608 1609 printk(KERN_DEBUG "number of MP IRQ sources: %d.\n", mp_irq_entries); 1610 for (i = 0; i < nr_ioapics; i++) 1611 printk(KERN_DEBUG "number of IO-APIC #%d registers: %d.\n", 1612 mp_ioapics[i].apicid, nr_ioapic_registers[i]); 1613 1614 /* 1615 * We are a bit conservative about what we expect. We have to 1616 * know about every hardware change ASAP. 1617 */ 1618 printk(KERN_INFO "testing the IO APIC.......................\n"); 1619 1620 for (apic = 0; apic < nr_ioapics; apic++) { 1621 1622 spin_lock_irqsave(&ioapic_lock, flags); 1623 reg_00.raw = io_apic_read(apic, 0); 1624 reg_01.raw = io_apic_read(apic, 1); 1625 if (reg_01.bits.version >= 0x10) 1626 reg_02.raw = io_apic_read(apic, 2); 1627 if (reg_01.bits.version >= 0x20) 1628 reg_03.raw = io_apic_read(apic, 3); 1629 spin_unlock_irqrestore(&ioapic_lock, flags); 1630 1631 printk("\n"); 1632 printk(KERN_DEBUG "IO APIC #%d......\n", mp_ioapics[apic].apicid); 1633 printk(KERN_DEBUG ".... register #00: %08X\n", reg_00.raw); 1634 printk(KERN_DEBUG "....... : physical APIC id: %02X\n", reg_00.bits.ID); 1635 printk(KERN_DEBUG "....... : Delivery Type: %X\n", reg_00.bits.delivery_type); 1636 printk(KERN_DEBUG "....... : LTS : %X\n", reg_00.bits.LTS); 1637 1638 printk(KERN_DEBUG ".... register #01: %08X\n", *(int *)®_01); 1639 printk(KERN_DEBUG "....... : max redirection entries: %04X\n", reg_01.bits.entries); 1640 1641 printk(KERN_DEBUG "....... : PRQ implemented: %X\n", reg_01.bits.PRQ); 1642 printk(KERN_DEBUG "....... : IO APIC version: %04X\n", reg_01.bits.version); 1643 1644 /* 1645 * Some Intel chipsets with IO APIC VERSION of 0x1? don't have reg_02, 1646 * but the value of reg_02 is read as the previous read register 1647 * value, so ignore it if reg_02 == reg_01. 1648 */ 1649 if (reg_01.bits.version >= 0x10 && reg_02.raw != reg_01.raw) { 1650 printk(KERN_DEBUG ".... register #02: %08X\n", reg_02.raw); 1651 printk(KERN_DEBUG "....... : arbitration: %02X\n", reg_02.bits.arbitration); 1652 } 1653 1654 /* 1655 * Some Intel chipsets with IO APIC VERSION of 0x2? don't have reg_02 1656 * or reg_03, but the value of reg_0[23] is read as the previous read 1657 * register value, so ignore it if reg_03 == reg_0[12]. 1658 */ 1659 if (reg_01.bits.version >= 0x20 && reg_03.raw != reg_02.raw && 1660 reg_03.raw != reg_01.raw) { 1661 printk(KERN_DEBUG ".... register #03: %08X\n", reg_03.raw); 1662 printk(KERN_DEBUG "....... : Boot DT : %X\n", reg_03.bits.boot_DT); 1663 } 1664 1665 printk(KERN_DEBUG ".... IRQ redirection table:\n"); 1666 1667 printk(KERN_DEBUG " NR Dst Mask Trig IRR Pol" 1668 " Stat Dmod Deli Vect: \n"); 1669 1670 for (i = 0; i <= reg_01.bits.entries; i++) { 1671 struct IO_APIC_route_entry entry; 1672 1673 entry = ioapic_read_entry(apic, i); 1674 1675 printk(KERN_DEBUG " %02x %03X ", 1676 i, 1677 entry.dest 1678 ); 1679 1680 printk("%1d %1d %1d %1d %1d %1d %1d %02X\n", 1681 entry.mask, 1682 entry.trigger, 1683 entry.irr, 1684 entry.polarity, 1685 entry.delivery_status, 1686 entry.dest_mode, 1687 entry.delivery_mode, 1688 entry.vector 1689 ); 1690 } 1691 } 1692 printk(KERN_DEBUG "IRQ to pin mappings:\n"); 1693 for_each_irq_desc(irq, desc) { 1694 struct irq_pin_list *entry; 1695 1696 cfg = desc->chip_data; 1697 entry = cfg->irq_2_pin; 1698 if (!entry) 1699 continue; 1700 printk(KERN_DEBUG "IRQ%d ", irq); 1701 for (;;) { 1702 printk("-> %d:%d", entry->apic, entry->pin); 1703 if (!entry->next) 1704 break; 1705 entry = entry->next; 1706 } 1707 printk("\n"); 1708 } 1709 1710 printk(KERN_INFO ".................................... done.\n"); 1711 1712 return; 1713 } 1714 1715 __apicdebuginit(void) print_APIC_bitfield(int base) 1716 { 1717 unsigned int v; 1718 int i, j; 1719 1720 if (apic_verbosity == APIC_QUIET) 1721 return; 1722 1723 printk(KERN_DEBUG "0123456789abcdef0123456789abcdef\n" KERN_DEBUG); 1724 for (i = 0; i < 8; i++) { 1725 v = apic_read(base + i*0x10); 1726 for (j = 0; j < 32; j++) { 1727 if (v & (1<<j)) 1728 printk("1"); 1729 else 1730 printk("0"); 1731 } 1732 printk("\n"); 1733 } 1734 } 1735 1736 __apicdebuginit(void) print_local_APIC(void *dummy) 1737 { 1738 unsigned int i, v, ver, maxlvt; 1739 u64 icr; 1740 1741 if (apic_verbosity == APIC_QUIET) 1742 return; 1743 1744 printk("\n" KERN_DEBUG "printing local APIC contents on CPU#%d/%d:\n", 1745 smp_processor_id(), hard_smp_processor_id()); 1746 v = apic_read(APIC_ID); 1747 printk(KERN_INFO "... APIC ID: %08x (%01x)\n", v, read_apic_id()); 1748 v = apic_read(APIC_LVR); 1749 printk(KERN_INFO "... APIC VERSION: %08x\n", v); 1750 ver = GET_APIC_VERSION(v); 1751 maxlvt = lapic_get_maxlvt(); 1752 1753 v = apic_read(APIC_TASKPRI); 1754 printk(KERN_DEBUG "... APIC TASKPRI: %08x (%02x)\n", v, v & APIC_TPRI_MASK); 1755 1756 if (APIC_INTEGRATED(ver)) { /* !82489DX */ 1757 if (!APIC_XAPIC(ver)) { 1758 v = apic_read(APIC_ARBPRI); 1759 printk(KERN_DEBUG "... APIC ARBPRI: %08x (%02x)\n", v, 1760 v & APIC_ARBPRI_MASK); 1761 } 1762 v = apic_read(APIC_PROCPRI); 1763 printk(KERN_DEBUG "... APIC PROCPRI: %08x\n", v); 1764 } 1765 1766 /* 1767 * Remote read supported only in the 82489DX and local APIC for 1768 * Pentium processors. 1769 */ 1770 if (!APIC_INTEGRATED(ver) || maxlvt == 3) { 1771 v = apic_read(APIC_RRR); 1772 printk(KERN_DEBUG "... APIC RRR: %08x\n", v); 1773 } 1774 1775 v = apic_read(APIC_LDR); 1776 printk(KERN_DEBUG "... APIC LDR: %08x\n", v); 1777 if (!x2apic_enabled()) { 1778 v = apic_read(APIC_DFR); 1779 printk(KERN_DEBUG "... APIC DFR: %08x\n", v); 1780 } 1781 v = apic_read(APIC_SPIV); 1782 printk(KERN_DEBUG "... APIC SPIV: %08x\n", v); 1783 1784 printk(KERN_DEBUG "... APIC ISR field:\n"); 1785 print_APIC_bitfield(APIC_ISR); 1786 printk(KERN_DEBUG "... APIC TMR field:\n"); 1787 print_APIC_bitfield(APIC_TMR); 1788 printk(KERN_DEBUG "... APIC IRR field:\n"); 1789 print_APIC_bitfield(APIC_IRR); 1790 1791 if (APIC_INTEGRATED(ver)) { /* !82489DX */ 1792 if (maxlvt > 3) /* Due to the Pentium erratum 3AP. */ 1793 apic_write(APIC_ESR, 0); 1794 1795 v = apic_read(APIC_ESR); 1796 printk(KERN_DEBUG "... APIC ESR: %08x\n", v); 1797 } 1798 1799 icr = apic_icr_read(); 1800 printk(KERN_DEBUG "... APIC ICR: %08x\n", (u32)icr); 1801 printk(KERN_DEBUG "... APIC ICR2: %08x\n", (u32)(icr >> 32)); 1802 1803 v = apic_read(APIC_LVTT); 1804 printk(KERN_DEBUG "... APIC LVTT: %08x\n", v); 1805 1806 if (maxlvt > 3) { /* PC is LVT#4. */ 1807 v = apic_read(APIC_LVTPC); 1808 printk(KERN_DEBUG "... APIC LVTPC: %08x\n", v); 1809 } 1810 v = apic_read(APIC_LVT0); 1811 printk(KERN_DEBUG "... APIC LVT0: %08x\n", v); 1812 v = apic_read(APIC_LVT1); 1813 printk(KERN_DEBUG "... APIC LVT1: %08x\n", v); 1814 1815 if (maxlvt > 2) { /* ERR is LVT#3. */ 1816 v = apic_read(APIC_LVTERR); 1817 printk(KERN_DEBUG "... APIC LVTERR: %08x\n", v); 1818 } 1819 1820 v = apic_read(APIC_TMICT); 1821 printk(KERN_DEBUG "... APIC TMICT: %08x\n", v); 1822 v = apic_read(APIC_TMCCT); 1823 printk(KERN_DEBUG "... APIC TMCCT: %08x\n", v); 1824 v = apic_read(APIC_TDCR); 1825 printk(KERN_DEBUG "... APIC TDCR: %08x\n", v); 1826 1827 if (boot_cpu_has(X86_FEATURE_EXTAPIC)) { 1828 v = apic_read(APIC_EFEAT); 1829 maxlvt = (v >> 16) & 0xff; 1830 printk(KERN_DEBUG "... APIC EFEAT: %08x\n", v); 1831 v = apic_read(APIC_ECTRL); 1832 printk(KERN_DEBUG "... APIC ECTRL: %08x\n", v); 1833 for (i = 0; i < maxlvt; i++) { 1834 v = apic_read(APIC_EILVTn(i)); 1835 printk(KERN_DEBUG "... APIC EILVT%d: %08x\n", i, v); 1836 } 1837 } 1838 printk("\n"); 1839 } 1840 1841 __apicdebuginit(void) print_all_local_APICs(void) 1842 { 1843 int cpu; 1844 1845 preempt_disable(); 1846 for_each_online_cpu(cpu) 1847 smp_call_function_single(cpu, print_local_APIC, NULL, 1); 1848 preempt_enable(); 1849 } 1850 1851 __apicdebuginit(void) print_PIC(void) 1852 { 1853 unsigned int v; 1854 unsigned long flags; 1855 1856 if (apic_verbosity == APIC_QUIET) 1857 return; 1858 1859 printk(KERN_DEBUG "\nprinting PIC contents\n"); 1860 1861 spin_lock_irqsave(&i8259A_lock, flags); 1862 1863 v = inb(0xa1) << 8 | inb(0x21); 1864 printk(KERN_DEBUG "... PIC IMR: %04x\n", v); 1865 1866 v = inb(0xa0) << 8 | inb(0x20); 1867 printk(KERN_DEBUG "... PIC IRR: %04x\n", v); 1868 1869 outb(0x0b,0xa0); 1870 outb(0x0b,0x20); 1871 v = inb(0xa0) << 8 | inb(0x20); 1872 outb(0x0a,0xa0); 1873 outb(0x0a,0x20); 1874 1875 spin_unlock_irqrestore(&i8259A_lock, flags); 1876 1877 printk(KERN_DEBUG "... PIC ISR: %04x\n", v); 1878 1879 v = inb(0x4d1) << 8 | inb(0x4d0); 1880 printk(KERN_DEBUG "... PIC ELCR: %04x\n", v); 1881 } 1882 1883 __apicdebuginit(int) print_all_ICs(void) 1884 { 1885 print_PIC(); 1886 1887 /* don't print out if apic is not there */ 1888 if (!cpu_has_apic || disable_apic) 1889 return 0; 1890 1891 print_all_local_APICs(); 1892 print_IO_APIC(); 1893 1894 return 0; 1895 } 1896 1897 fs_initcall(print_all_ICs); 1898 1899 1900 /* Where if anywhere is the i8259 connect in external int mode */ 1901 static struct { int pin, apic; } ioapic_i8259 = { -1, -1 }; 1902 1903 void __init enable_IO_APIC(void) 1904 { 1905 union IO_APIC_reg_01 reg_01; 1906 int i8259_apic, i8259_pin; 1907 int apic; 1908 unsigned long flags; 1909 1910 /* 1911 * The number of IO-APIC IRQ registers (== #pins): 1912 */ 1913 for (apic = 0; apic < nr_ioapics; apic++) { 1914 spin_lock_irqsave(&ioapic_lock, flags); 1915 reg_01.raw = io_apic_read(apic, 1); 1916 spin_unlock_irqrestore(&ioapic_lock, flags); 1917 nr_ioapic_registers[apic] = reg_01.bits.entries+1; 1918 } 1919 for(apic = 0; apic < nr_ioapics; apic++) { 1920 int pin; 1921 /* See if any of the pins is in ExtINT mode */ 1922 for (pin = 0; pin < nr_ioapic_registers[apic]; pin++) { 1923 struct IO_APIC_route_entry entry; 1924 entry = ioapic_read_entry(apic, pin); 1925 1926 /* If the interrupt line is enabled and in ExtInt mode 1927 * I have found the pin where the i8259 is connected. 1928 */ 1929 if ((entry.mask == 0) && (entry.delivery_mode == dest_ExtINT)) { 1930 ioapic_i8259.apic = apic; 1931 ioapic_i8259.pin = pin; 1932 goto found_i8259; 1933 } 1934 } 1935 } 1936 found_i8259: 1937 /* Look to see what if the MP table has reported the ExtINT */ 1938 /* If we could not find the appropriate pin by looking at the ioapic 1939 * the i8259 probably is not connected the ioapic but give the 1940 * mptable a chance anyway. 1941 */ 1942 i8259_pin = find_isa_irq_pin(0, mp_ExtINT); 1943 i8259_apic = find_isa_irq_apic(0, mp_ExtINT); 1944 /* Trust the MP table if nothing is setup in the hardware */ 1945 if ((ioapic_i8259.pin == -1) && (i8259_pin >= 0)) { 1946 printk(KERN_WARNING "ExtINT not setup in hardware but reported by MP table\n"); 1947 ioapic_i8259.pin = i8259_pin; 1948 ioapic_i8259.apic = i8259_apic; 1949 } 1950 /* Complain if the MP table and the hardware disagree */ 1951 if (((ioapic_i8259.apic != i8259_apic) || (ioapic_i8259.pin != i8259_pin)) && 1952 (i8259_pin >= 0) && (ioapic_i8259.pin >= 0)) 1953 { 1954 printk(KERN_WARNING "ExtINT in hardware and MP table differ\n"); 1955 } 1956 1957 /* 1958 * Do not trust the IO-APIC being empty at bootup 1959 */ 1960 clear_IO_APIC(); 1961 } 1962 1963 /* 1964 * Not an __init, needed by the reboot code 1965 */ 1966 void disable_IO_APIC(void) 1967 { 1968 /* 1969 * Clear the IO-APIC before rebooting: 1970 */ 1971 clear_IO_APIC(); 1972 1973 /* 1974 * If the i8259 is routed through an IOAPIC 1975 * Put that IOAPIC in virtual wire mode 1976 * so legacy interrupts can be delivered. 1977 * 1978 * With interrupt-remapping, for now we will use virtual wire A mode, 1979 * as virtual wire B is little complex (need to configure both 1980 * IOAPIC RTE aswell as interrupt-remapping table entry). 1981 * As this gets called during crash dump, keep this simple for now. 1982 */ 1983 if (ioapic_i8259.pin != -1 && !intr_remapping_enabled) { 1984 struct IO_APIC_route_entry entry; 1985 1986 memset(&entry, 0, sizeof(entry)); 1987 entry.mask = 0; /* Enabled */ 1988 entry.trigger = 0; /* Edge */ 1989 entry.irr = 0; 1990 entry.polarity = 0; /* High */ 1991 entry.delivery_status = 0; 1992 entry.dest_mode = 0; /* Physical */ 1993 entry.delivery_mode = dest_ExtINT; /* ExtInt */ 1994 entry.vector = 0; 1995 entry.dest = read_apic_id(); 1996 1997 /* 1998 * Add it to the IO-APIC irq-routing table: 1999 */ 2000 ioapic_write_entry(ioapic_i8259.apic, ioapic_i8259.pin, entry); 2001 } 2002 2003 /* 2004 * Use virtual wire A mode when interrupt remapping is enabled. 2005 */ 2006 disconnect_bsp_APIC(!intr_remapping_enabled && ioapic_i8259.pin != -1); 2007 } 2008 2009 #ifdef CONFIG_X86_32 2010 /* 2011 * function to set the IO-APIC physical IDs based on the 2012 * values stored in the MPC table. 2013 * 2014 * by Matt Domsch <Matt_Domsch@dell.com> Tue Dec 21 12:25:05 CST 1999 2015 */ 2016 2017 static void __init setup_ioapic_ids_from_mpc(void) 2018 { 2019 union IO_APIC_reg_00 reg_00; 2020 physid_mask_t phys_id_present_map; 2021 int apic_id; 2022 int i; 2023 unsigned char old_id; 2024 unsigned long flags; 2025 2026 if (x86_quirks->setup_ioapic_ids && x86_quirks->setup_ioapic_ids()) 2027 return; 2028 2029 /* 2030 * Don't check I/O APIC IDs for xAPIC systems. They have 2031 * no meaning without the serial APIC bus. 2032 */ 2033 if (!(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) 2034 || APIC_XAPIC(apic_version[boot_cpu_physical_apicid])) 2035 return; 2036 /* 2037 * This is broken; anything with a real cpu count has to 2038 * circumvent this idiocy regardless. 2039 */ 2040 phys_id_present_map = apic->ioapic_phys_id_map(phys_cpu_present_map); 2041 2042 /* 2043 * Set the IOAPIC ID to the value stored in the MPC table. 2044 */ 2045 for (apic_id = 0; apic_id < nr_ioapics; apic_id++) { 2046 2047 /* Read the register 0 value */ 2048 spin_lock_irqsave(&ioapic_lock, flags); 2049 reg_00.raw = io_apic_read(apic_id, 0); 2050 spin_unlock_irqrestore(&ioapic_lock, flags); 2051 2052 old_id = mp_ioapics[apic_id].apicid; 2053 2054 if (mp_ioapics[apic_id].apicid >= get_physical_broadcast()) { 2055 printk(KERN_ERR "BIOS bug, IO-APIC#%d ID is %d in the MPC table!...\n", 2056 apic_id, mp_ioapics[apic_id].apicid); 2057 printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n", 2058 reg_00.bits.ID); 2059 mp_ioapics[apic_id].apicid = reg_00.bits.ID; 2060 } 2061 2062 /* 2063 * Sanity check, is the ID really free? Every APIC in a 2064 * system must have a unique ID or we get lots of nice 2065 * 'stuck on smp_invalidate_needed IPI wait' messages. 2066 */ 2067 if (apic->check_apicid_used(phys_id_present_map, 2068 mp_ioapics[apic_id].apicid)) { 2069 printk(KERN_ERR "BIOS bug, IO-APIC#%d ID %d is already used!...\n", 2070 apic_id, mp_ioapics[apic_id].apicid); 2071 for (i = 0; i < get_physical_broadcast(); i++) 2072 if (!physid_isset(i, phys_id_present_map)) 2073 break; 2074 if (i >= get_physical_broadcast()) 2075 panic("Max APIC ID exceeded!\n"); 2076 printk(KERN_ERR "... fixing up to %d. (tell your hw vendor)\n", 2077 i); 2078 physid_set(i, phys_id_present_map); 2079 mp_ioapics[apic_id].apicid = i; 2080 } else { 2081 physid_mask_t tmp; 2082 tmp = apic->apicid_to_cpu_present(mp_ioapics[apic_id].apicid); 2083 apic_printk(APIC_VERBOSE, "Setting %d in the " 2084 "phys_id_present_map\n", 2085 mp_ioapics[apic_id].apicid); 2086 physids_or(phys_id_present_map, phys_id_present_map, tmp); 2087 } 2088 2089 2090 /* 2091 * We need to adjust the IRQ routing table 2092 * if the ID changed. 2093 */ 2094 if (old_id != mp_ioapics[apic_id].apicid) 2095 for (i = 0; i < mp_irq_entries; i++) 2096 if (mp_irqs[i].dstapic == old_id) 2097 mp_irqs[i].dstapic 2098 = mp_ioapics[apic_id].apicid; 2099 2100 /* 2101 * Read the right value from the MPC table and 2102 * write it into the ID register. 2103 */ 2104 apic_printk(APIC_VERBOSE, KERN_INFO 2105 "...changing IO-APIC physical APIC ID to %d ...", 2106 mp_ioapics[apic_id].apicid); 2107 2108 reg_00.bits.ID = mp_ioapics[apic_id].apicid; 2109 spin_lock_irqsave(&ioapic_lock, flags); 2110 io_apic_write(apic_id, 0, reg_00.raw); 2111 spin_unlock_irqrestore(&ioapic_lock, flags); 2112 2113 /* 2114 * Sanity check 2115 */ 2116 spin_lock_irqsave(&ioapic_lock, flags); 2117 reg_00.raw = io_apic_read(apic_id, 0); 2118 spin_unlock_irqrestore(&ioapic_lock, flags); 2119 if (reg_00.bits.ID != mp_ioapics[apic_id].apicid) 2120 printk("could not set ID!\n"); 2121 else 2122 apic_printk(APIC_VERBOSE, " ok.\n"); 2123 } 2124 } 2125 #endif 2126 2127 int no_timer_check __initdata; 2128 2129 static int __init notimercheck(char *s) 2130 { 2131 no_timer_check = 1; 2132 return 1; 2133 } 2134 __setup("no_timer_check", notimercheck); 2135 2136 /* 2137 * There is a nasty bug in some older SMP boards, their mptable lies 2138 * about the timer IRQ. We do the following to work around the situation: 2139 * 2140 * - timer IRQ defaults to IO-APIC IRQ 2141 * - if this function detects that timer IRQs are defunct, then we fall 2142 * back to ISA timer IRQs 2143 */ 2144 static int __init timer_irq_works(void) 2145 { 2146 unsigned long t1 = jiffies; 2147 unsigned long flags; 2148 2149 if (no_timer_check) 2150 return 1; 2151 2152 local_save_flags(flags); 2153 local_irq_enable(); 2154 /* Let ten ticks pass... */ 2155 mdelay((10 * 1000) / HZ); 2156 local_irq_restore(flags); 2157 2158 /* 2159 * Expect a few ticks at least, to be sure some possible 2160 * glue logic does not lock up after one or two first 2161 * ticks in a non-ExtINT mode. Also the local APIC 2162 * might have cached one ExtINT interrupt. Finally, at 2163 * least one tick may be lost due to delays. 2164 */ 2165 2166 /* jiffies wrap? */ 2167 if (time_after(jiffies, t1 + 4)) 2168 return 1; 2169 return 0; 2170 } 2171 2172 /* 2173 * In the SMP+IOAPIC case it might happen that there are an unspecified 2174 * number of pending IRQ events unhandled. These cases are very rare, 2175 * so we 'resend' these IRQs via IPIs, to the same CPU. It's much 2176 * better to do it this way as thus we do not have to be aware of 2177 * 'pending' interrupts in the IRQ path, except at this point. 2178 */ 2179 /* 2180 * Edge triggered needs to resend any interrupt 2181 * that was delayed but this is now handled in the device 2182 * independent code. 2183 */ 2184 2185 /* 2186 * Starting up a edge-triggered IO-APIC interrupt is 2187 * nasty - we need to make sure that we get the edge. 2188 * If it is already asserted for some reason, we need 2189 * return 1 to indicate that is was pending. 2190 * 2191 * This is not complete - we should be able to fake 2192 * an edge even if it isn't on the 8259A... 2193 */ 2194 2195 static unsigned int startup_ioapic_irq(unsigned int irq) 2196 { 2197 int was_pending = 0; 2198 unsigned long flags; 2199 struct irq_cfg *cfg; 2200 2201 spin_lock_irqsave(&ioapic_lock, flags); 2202 if (irq < NR_IRQS_LEGACY) { 2203 disable_8259A_irq(irq); 2204 if (i8259A_irq_pending(irq)) 2205 was_pending = 1; 2206 } 2207 cfg = irq_cfg(irq); 2208 __unmask_IO_APIC_irq(cfg); 2209 spin_unlock_irqrestore(&ioapic_lock, flags); 2210 2211 return was_pending; 2212 } 2213 2214 #ifdef CONFIG_X86_64 2215 static int ioapic_retrigger_irq(unsigned int irq) 2216 { 2217 2218 struct irq_cfg *cfg = irq_cfg(irq); 2219 unsigned long flags; 2220 2221 spin_lock_irqsave(&vector_lock, flags); 2222 apic->send_IPI_mask(cpumask_of(cpumask_first(cfg->domain)), cfg->vector); 2223 spin_unlock_irqrestore(&vector_lock, flags); 2224 2225 return 1; 2226 } 2227 #else 2228 static int ioapic_retrigger_irq(unsigned int irq) 2229 { 2230 apic->send_IPI_self(irq_cfg(irq)->vector); 2231 2232 return 1; 2233 } 2234 #endif 2235 2236 /* 2237 * Level and edge triggered IO-APIC interrupts need different handling, 2238 * so we use two separate IRQ descriptors. Edge triggered IRQs can be 2239 * handled with the level-triggered descriptor, but that one has slightly 2240 * more overhead. Level-triggered interrupts cannot be handled with the 2241 * edge-triggered handler, without risking IRQ storms and other ugly 2242 * races. 2243 */ 2244 2245 #ifdef CONFIG_SMP 2246 static void send_cleanup_vector(struct irq_cfg *cfg) 2247 { 2248 cpumask_var_t cleanup_mask; 2249 2250 if (unlikely(!alloc_cpumask_var(&cleanup_mask, GFP_ATOMIC))) { 2251 unsigned int i; 2252 cfg->move_cleanup_count = 0; 2253 for_each_cpu_and(i, cfg->old_domain, cpu_online_mask) 2254 cfg->move_cleanup_count++; 2255 for_each_cpu_and(i, cfg->old_domain, cpu_online_mask) 2256 apic->send_IPI_mask(cpumask_of(i), IRQ_MOVE_CLEANUP_VECTOR); 2257 } else { 2258 cpumask_and(cleanup_mask, cfg->old_domain, cpu_online_mask); 2259 cfg->move_cleanup_count = cpumask_weight(cleanup_mask); 2260 apic->send_IPI_mask(cleanup_mask, IRQ_MOVE_CLEANUP_VECTOR); 2261 free_cpumask_var(cleanup_mask); 2262 } 2263 cfg->move_in_progress = 0; 2264 } 2265 2266 static void __target_IO_APIC_irq(unsigned int irq, unsigned int dest, struct irq_cfg *cfg) 2267 { 2268 int apic, pin; 2269 struct irq_pin_list *entry; 2270 u8 vector = cfg->vector; 2271 2272 entry = cfg->irq_2_pin; 2273 for (;;) { 2274 unsigned int reg; 2275 2276 if (!entry) 2277 break; 2278 2279 apic = entry->apic; 2280 pin = entry->pin; 2281 /* 2282 * With interrupt-remapping, destination information comes 2283 * from interrupt-remapping table entry. 2284 */ 2285 if (!irq_remapped(irq)) 2286 io_apic_write(apic, 0x11 + pin*2, dest); 2287 reg = io_apic_read(apic, 0x10 + pin*2); 2288 reg &= ~IO_APIC_REDIR_VECTOR_MASK; 2289 reg |= vector; 2290 io_apic_modify(apic, 0x10 + pin*2, reg); 2291 if (!entry->next) 2292 break; 2293 entry = entry->next; 2294 } 2295 } 2296 2297 static int 2298 assign_irq_vector(int irq, struct irq_cfg *cfg, const struct cpumask *mask); 2299 2300 /* 2301 * Either sets desc->affinity to a valid value, and returns 2302 * ->cpu_mask_to_apicid of that, or returns BAD_APICID and 2303 * leaves desc->affinity untouched. 2304 */ 2305 static unsigned int 2306 set_desc_affinity(struct irq_desc *desc, const struct cpumask *mask) 2307 { 2308 struct irq_cfg *cfg; 2309 unsigned int irq; 2310 2311 if (!cpumask_intersects(mask, cpu_online_mask)) 2312 return BAD_APICID; 2313 2314 irq = desc->irq; 2315 cfg = desc->chip_data; 2316 if (assign_irq_vector(irq, cfg, mask)) 2317 return BAD_APICID; 2318 2319 cpumask_copy(desc->affinity, mask); 2320 2321 return apic->cpu_mask_to_apicid_and(desc->affinity, cfg->domain); 2322 } 2323 2324 static int 2325 set_ioapic_affinity_irq_desc(struct irq_desc *desc, const struct cpumask *mask) 2326 { 2327 struct irq_cfg *cfg; 2328 unsigned long flags; 2329 unsigned int dest; 2330 unsigned int irq; 2331 int ret = -1; 2332 2333 irq = desc->irq; 2334 cfg = desc->chip_data; 2335 2336 spin_lock_irqsave(&ioapic_lock, flags); 2337 dest = set_desc_affinity(desc, mask); 2338 if (dest != BAD_APICID) { 2339 /* Only the high 8 bits are valid. */ 2340 dest = SET_APIC_LOGICAL_ID(dest); 2341 __target_IO_APIC_irq(irq, dest, cfg); 2342 ret = 0; 2343 } 2344 spin_unlock_irqrestore(&ioapic_lock, flags); 2345 2346 return ret; 2347 } 2348 2349 static int 2350 set_ioapic_affinity_irq(unsigned int irq, const struct cpumask *mask) 2351 { 2352 struct irq_desc *desc; 2353 2354 desc = irq_to_desc(irq); 2355 2356 return set_ioapic_affinity_irq_desc(desc, mask); 2357 } 2358 2359 #ifdef CONFIG_INTR_REMAP 2360 2361 /* 2362 * Migrate the IO-APIC irq in the presence of intr-remapping. 2363 * 2364 * For both level and edge triggered, irq migration is a simple atomic 2365 * update(of vector and cpu destination) of IRTE and flush the hardware cache. 2366 * 2367 * For level triggered, we eliminate the io-apic RTE modification (with the 2368 * updated vector information), by using a virtual vector (io-apic pin number). 2369 * Real vector that is used for interrupting cpu will be coming from 2370 * the interrupt-remapping table entry. 2371 */ 2372 static int 2373 migrate_ioapic_irq_desc(struct irq_desc *desc, const struct cpumask *mask) 2374 { 2375 struct irq_cfg *cfg; 2376 struct irte irte; 2377 unsigned int dest; 2378 unsigned int irq; 2379 int ret = -1; 2380 2381 if (!cpumask_intersects(mask, cpu_online_mask)) 2382 return ret; 2383 2384 irq = desc->irq; 2385 if (get_irte(irq, &irte)) 2386 return ret; 2387 2388 cfg = desc->chip_data; 2389 if (assign_irq_vector(irq, cfg, mask)) 2390 return ret; 2391 2392 dest = apic->cpu_mask_to_apicid_and(cfg->domain, mask); 2393 2394 irte.vector = cfg->vector; 2395 irte.dest_id = IRTE_DEST(dest); 2396 2397 /* 2398 * Modified the IRTE and flushes the Interrupt entry cache. 2399 */ 2400 modify_irte(irq, &irte); 2401 2402 if (cfg->move_in_progress) 2403 send_cleanup_vector(cfg); 2404 2405 cpumask_copy(desc->affinity, mask); 2406 2407 return 0; 2408 } 2409 2410 /* 2411 * Migrates the IRQ destination in the process context. 2412 */ 2413 static int set_ir_ioapic_affinity_irq_desc(struct irq_desc *desc, 2414 const struct cpumask *mask) 2415 { 2416 return migrate_ioapic_irq_desc(desc, mask); 2417 } 2418 static int set_ir_ioapic_affinity_irq(unsigned int irq, 2419 const struct cpumask *mask) 2420 { 2421 struct irq_desc *desc = irq_to_desc(irq); 2422 2423 return set_ir_ioapic_affinity_irq_desc(desc, mask); 2424 } 2425 #else 2426 static inline int set_ir_ioapic_affinity_irq_desc(struct irq_desc *desc, 2427 const struct cpumask *mask) 2428 { 2429 return 0; 2430 } 2431 #endif 2432 2433 asmlinkage void smp_irq_move_cleanup_interrupt(void) 2434 { 2435 unsigned vector, me; 2436 2437 ack_APIC_irq(); 2438 exit_idle(); 2439 irq_enter(); 2440 2441 me = smp_processor_id(); 2442 for (vector = FIRST_EXTERNAL_VECTOR; vector < NR_VECTORS; vector++) { 2443 unsigned int irq; 2444 unsigned int irr; 2445 struct irq_desc *desc; 2446 struct irq_cfg *cfg; 2447 irq = __get_cpu_var(vector_irq)[vector]; 2448 2449 if (irq == -1) 2450 continue; 2451 2452 desc = irq_to_desc(irq); 2453 if (!desc) 2454 continue; 2455 2456 cfg = irq_cfg(irq); 2457 spin_lock(&desc->lock); 2458 if (!cfg->move_cleanup_count) 2459 goto unlock; 2460 2461 if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain)) 2462 goto unlock; 2463 2464 irr = apic_read(APIC_IRR + (vector / 32 * 0x10)); 2465 /* 2466 * Check if the vector that needs to be cleanedup is 2467 * registered at the cpu's IRR. If so, then this is not 2468 * the best time to clean it up. Lets clean it up in the 2469 * next attempt by sending another IRQ_MOVE_CLEANUP_VECTOR 2470 * to myself. 2471 */ 2472 if (irr & (1 << (vector % 32))) { 2473 apic->send_IPI_self(IRQ_MOVE_CLEANUP_VECTOR); 2474 goto unlock; 2475 } 2476 __get_cpu_var(vector_irq)[vector] = -1; 2477 cfg->move_cleanup_count--; 2478 unlock: 2479 spin_unlock(&desc->lock); 2480 } 2481 2482 irq_exit(); 2483 } 2484 2485 static void irq_complete_move(struct irq_desc **descp) 2486 { 2487 struct irq_desc *desc = *descp; 2488 struct irq_cfg *cfg = desc->chip_data; 2489 unsigned vector, me; 2490 2491 if (likely(!cfg->move_in_progress)) 2492 return; 2493 2494 vector = ~get_irq_regs()->orig_ax; 2495 me = smp_processor_id(); 2496 2497 if (vector == cfg->vector && cpumask_test_cpu(me, cfg->domain)) 2498 send_cleanup_vector(cfg); 2499 } 2500 #else 2501 static inline void irq_complete_move(struct irq_desc **descp) {} 2502 #endif 2503 2504 static void ack_apic_edge(unsigned int irq) 2505 { 2506 struct irq_desc *desc = irq_to_desc(irq); 2507 2508 irq_complete_move(&desc); 2509 move_native_irq(irq); 2510 ack_APIC_irq(); 2511 } 2512 2513 atomic_t irq_mis_count; 2514 2515 static void ack_apic_level(unsigned int irq) 2516 { 2517 struct irq_desc *desc = irq_to_desc(irq); 2518 2519 #ifdef CONFIG_X86_32 2520 unsigned long v; 2521 int i; 2522 #endif 2523 struct irq_cfg *cfg; 2524 int do_unmask_irq = 0; 2525 2526 irq_complete_move(&desc); 2527 #ifdef CONFIG_GENERIC_PENDING_IRQ 2528 /* If we are moving the irq we need to mask it */ 2529 if (unlikely(desc->status & IRQ_MOVE_PENDING)) { 2530 do_unmask_irq = 1; 2531 mask_IO_APIC_irq_desc(desc); 2532 } 2533 #endif 2534 2535 #ifdef CONFIG_X86_32 2536 /* 2537 * It appears there is an erratum which affects at least version 0x11 2538 * of I/O APIC (that's the 82093AA and cores integrated into various 2539 * chipsets). Under certain conditions a level-triggered interrupt is 2540 * erroneously delivered as edge-triggered one but the respective IRR 2541 * bit gets set nevertheless. As a result the I/O unit expects an EOI 2542 * message but it will never arrive and further interrupts are blocked 2543 * from the source. The exact reason is so far unknown, but the 2544 * phenomenon was observed when two consecutive interrupt requests 2545 * from a given source get delivered to the same CPU and the source is 2546 * temporarily disabled in between. 2547 * 2548 * A workaround is to simulate an EOI message manually. We achieve it 2549 * by setting the trigger mode to edge and then to level when the edge 2550 * trigger mode gets detected in the TMR of a local APIC for a 2551 * level-triggered interrupt. We mask the source for the time of the 2552 * operation to prevent an edge-triggered interrupt escaping meanwhile. 2553 * The idea is from Manfred Spraul. --macro 2554 */ 2555 cfg = desc->chip_data; 2556 i = cfg->vector; 2557 2558 v = apic_read(APIC_TMR + ((i & ~0x1f) >> 1)); 2559 #endif 2560 2561 /* 2562 * We must acknowledge the irq before we move it or the acknowledge will 2563 * not propagate properly. 2564 */ 2565 ack_APIC_irq(); 2566 2567 /* Now we can move and renable the irq */ 2568 if (unlikely(do_unmask_irq)) { 2569 /* Only migrate the irq if the ack has been received. 2570 * 2571 * On rare occasions the broadcast level triggered ack gets 2572 * delayed going to ioapics, and if we reprogram the 2573 * vector while Remote IRR is still set the irq will never 2574 * fire again. 2575 * 2576 * To prevent this scenario we read the Remote IRR bit 2577 * of the ioapic. This has two effects. 2578 * - On any sane system the read of the ioapic will 2579 * flush writes (and acks) going to the ioapic from 2580 * this cpu. 2581 * - We get to see if the ACK has actually been delivered. 2582 * 2583 * Based on failed experiments of reprogramming the 2584 * ioapic entry from outside of irq context starting 2585 * with masking the ioapic entry and then polling until 2586 * Remote IRR was clear before reprogramming the 2587 * ioapic I don't trust the Remote IRR bit to be 2588 * completey accurate. 2589 * 2590 * However there appears to be no other way to plug 2591 * this race, so if the Remote IRR bit is not 2592 * accurate and is causing problems then it is a hardware bug 2593 * and you can go talk to the chipset vendor about it. 2594 */ 2595 cfg = desc->chip_data; 2596 if (!io_apic_level_ack_pending(cfg)) 2597 move_masked_irq(irq); 2598 unmask_IO_APIC_irq_desc(desc); 2599 } 2600 2601 #ifdef CONFIG_X86_32 2602 if (!(v & (1 << (i & 0x1f)))) { 2603 atomic_inc(&irq_mis_count); 2604 spin_lock(&ioapic_lock); 2605 __mask_and_edge_IO_APIC_irq(cfg); 2606 __unmask_and_level_IO_APIC_irq(cfg); 2607 spin_unlock(&ioapic_lock); 2608 } 2609 #endif 2610 } 2611 2612 #ifdef CONFIG_INTR_REMAP 2613 static void __eoi_ioapic_irq(unsigned int irq, struct irq_cfg *cfg) 2614 { 2615 int apic, pin; 2616 struct irq_pin_list *entry; 2617 2618 entry = cfg->irq_2_pin; 2619 for (;;) { 2620 2621 if (!entry) 2622 break; 2623 2624 apic = entry->apic; 2625 pin = entry->pin; 2626 io_apic_eoi(apic, pin); 2627 entry = entry->next; 2628 } 2629 } 2630 2631 static void 2632 eoi_ioapic_irq(struct irq_desc *desc) 2633 { 2634 struct irq_cfg *cfg; 2635 unsigned long flags; 2636 unsigned int irq; 2637 2638 irq = desc->irq; 2639 cfg = desc->chip_data; 2640 2641 spin_lock_irqsave(&ioapic_lock, flags); 2642 __eoi_ioapic_irq(irq, cfg); 2643 spin_unlock_irqrestore(&ioapic_lock, flags); 2644 } 2645 2646 static void ir_ack_apic_edge(unsigned int irq) 2647 { 2648 ack_APIC_irq(); 2649 } 2650 2651 static void ir_ack_apic_level(unsigned int irq) 2652 { 2653 struct irq_desc *desc = irq_to_desc(irq); 2654 2655 ack_APIC_irq(); 2656 eoi_ioapic_irq(desc); 2657 } 2658 #endif /* CONFIG_INTR_REMAP */ 2659 2660 static struct irq_chip ioapic_chip __read_mostly = { 2661 .name = "IO-APIC", 2662 .startup = startup_ioapic_irq, 2663 .mask = mask_IO_APIC_irq, 2664 .unmask = unmask_IO_APIC_irq, 2665 .ack = ack_apic_edge, 2666 .eoi = ack_apic_level, 2667 #ifdef CONFIG_SMP 2668 .set_affinity = set_ioapic_affinity_irq, 2669 #endif 2670 .retrigger = ioapic_retrigger_irq, 2671 }; 2672 2673 static struct irq_chip ir_ioapic_chip __read_mostly = { 2674 .name = "IR-IO-APIC", 2675 .startup = startup_ioapic_irq, 2676 .mask = mask_IO_APIC_irq, 2677 .unmask = unmask_IO_APIC_irq, 2678 #ifdef CONFIG_INTR_REMAP 2679 .ack = ir_ack_apic_edge, 2680 .eoi = ir_ack_apic_level, 2681 #ifdef CONFIG_SMP 2682 .set_affinity = set_ir_ioapic_affinity_irq, 2683 #endif 2684 #endif 2685 .retrigger = ioapic_retrigger_irq, 2686 }; 2687 2688 static inline void init_IO_APIC_traps(void) 2689 { 2690 int irq; 2691 struct irq_desc *desc; 2692 struct irq_cfg *cfg; 2693 2694 /* 2695 * NOTE! The local APIC isn't very good at handling 2696 * multiple interrupts at the same interrupt level. 2697 * As the interrupt level is determined by taking the 2698 * vector number and shifting that right by 4, we 2699 * want to spread these out a bit so that they don't 2700 * all fall in the same interrupt level. 2701 * 2702 * Also, we've got to be careful not to trash gate 2703 * 0x80, because int 0x80 is hm, kind of importantish. ;) 2704 */ 2705 for_each_irq_desc(irq, desc) { 2706 cfg = desc->chip_data; 2707 if (IO_APIC_IRQ(irq) && cfg && !cfg->vector) { 2708 /* 2709 * Hmm.. We don't have an entry for this, 2710 * so default to an old-fashioned 8259 2711 * interrupt if we can.. 2712 */ 2713 if (irq < NR_IRQS_LEGACY) 2714 make_8259A_irq(irq); 2715 else 2716 /* Strange. Oh, well.. */ 2717 desc->chip = &no_irq_chip; 2718 } 2719 } 2720 } 2721 2722 /* 2723 * The local APIC irq-chip implementation: 2724 */ 2725 2726 static void mask_lapic_irq(unsigned int irq) 2727 { 2728 unsigned long v; 2729 2730 v = apic_read(APIC_LVT0); 2731 apic_write(APIC_LVT0, v | APIC_LVT_MASKED); 2732 } 2733 2734 static void unmask_lapic_irq(unsigned int irq) 2735 { 2736 unsigned long v; 2737 2738 v = apic_read(APIC_LVT0); 2739 apic_write(APIC_LVT0, v & ~APIC_LVT_MASKED); 2740 } 2741 2742 static void ack_lapic_irq(unsigned int irq) 2743 { 2744 ack_APIC_irq(); 2745 } 2746 2747 static struct irq_chip lapic_chip __read_mostly = { 2748 .name = "local-APIC", 2749 .mask = mask_lapic_irq, 2750 .unmask = unmask_lapic_irq, 2751 .ack = ack_lapic_irq, 2752 }; 2753 2754 static void lapic_register_intr(int irq, struct irq_desc *desc) 2755 { 2756 desc->status &= ~IRQ_LEVEL; 2757 set_irq_chip_and_handler_name(irq, &lapic_chip, handle_edge_irq, 2758 "edge"); 2759 } 2760 2761 static void __init setup_nmi(void) 2762 { 2763 /* 2764 * Dirty trick to enable the NMI watchdog ... 2765 * We put the 8259A master into AEOI mode and 2766 * unmask on all local APICs LVT0 as NMI. 2767 * 2768 * The idea to use the 8259A in AEOI mode ('8259A Virtual Wire') 2769 * is from Maciej W. Rozycki - so we do not have to EOI from 2770 * the NMI handler or the timer interrupt. 2771 */ 2772 apic_printk(APIC_VERBOSE, KERN_INFO "activating NMI Watchdog ..."); 2773 2774 enable_NMI_through_LVT0(); 2775 2776 apic_printk(APIC_VERBOSE, " done.\n"); 2777 } 2778 2779 /* 2780 * This looks a bit hackish but it's about the only one way of sending 2781 * a few INTA cycles to 8259As and any associated glue logic. ICR does 2782 * not support the ExtINT mode, unfortunately. We need to send these 2783 * cycles as some i82489DX-based boards have glue logic that keeps the 2784 * 8259A interrupt line asserted until INTA. --macro 2785 */ 2786 static inline void __init unlock_ExtINT_logic(void) 2787 { 2788 int apic, pin, i; 2789 struct IO_APIC_route_entry entry0, entry1; 2790 unsigned char save_control, save_freq_select; 2791 2792 pin = find_isa_irq_pin(8, mp_INT); 2793 if (pin == -1) { 2794 WARN_ON_ONCE(1); 2795 return; 2796 } 2797 apic = find_isa_irq_apic(8, mp_INT); 2798 if (apic == -1) { 2799 WARN_ON_ONCE(1); 2800 return; 2801 } 2802 2803 entry0 = ioapic_read_entry(apic, pin); 2804 clear_IO_APIC_pin(apic, pin); 2805 2806 memset(&entry1, 0, sizeof(entry1)); 2807 2808 entry1.dest_mode = 0; /* physical delivery */ 2809 entry1.mask = 0; /* unmask IRQ now */ 2810 entry1.dest = hard_smp_processor_id(); 2811 entry1.delivery_mode = dest_ExtINT; 2812 entry1.polarity = entry0.polarity; 2813 entry1.trigger = 0; 2814 entry1.vector = 0; 2815 2816 ioapic_write_entry(apic, pin, entry1); 2817 2818 save_control = CMOS_READ(RTC_CONTROL); 2819 save_freq_select = CMOS_READ(RTC_FREQ_SELECT); 2820 CMOS_WRITE((save_freq_select & ~RTC_RATE_SELECT) | 0x6, 2821 RTC_FREQ_SELECT); 2822 CMOS_WRITE(save_control | RTC_PIE, RTC_CONTROL); 2823 2824 i = 100; 2825 while (i-- > 0) { 2826 mdelay(10); 2827 if ((CMOS_READ(RTC_INTR_FLAGS) & RTC_PF) == RTC_PF) 2828 i -= 10; 2829 } 2830 2831 CMOS_WRITE(save_control, RTC_CONTROL); 2832 CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT); 2833 clear_IO_APIC_pin(apic, pin); 2834 2835 ioapic_write_entry(apic, pin, entry0); 2836 } 2837 2838 static int disable_timer_pin_1 __initdata; 2839 /* Actually the next is obsolete, but keep it for paranoid reasons -AK */ 2840 static int __init disable_timer_pin_setup(char *arg) 2841 { 2842 disable_timer_pin_1 = 1; 2843 return 0; 2844 } 2845 early_param("disable_timer_pin_1", disable_timer_pin_setup); 2846 2847 int timer_through_8259 __initdata; 2848 2849 /* 2850 * This code may look a bit paranoid, but it's supposed to cooperate with 2851 * a wide range of boards and BIOS bugs. Fortunately only the timer IRQ 2852 * is so screwy. Thanks to Brian Perkins for testing/hacking this beast 2853 * fanatically on his truly buggy board. 2854 * 2855 * FIXME: really need to revamp this for all platforms. 2856 */ 2857 static inline void __init check_timer(void) 2858 { 2859 struct irq_desc *desc = irq_to_desc(0); 2860 struct irq_cfg *cfg = desc->chip_data; 2861 int node = cpu_to_node(boot_cpu_id); 2862 int apic1, pin1, apic2, pin2; 2863 unsigned long flags; 2864 int no_pin1 = 0; 2865 2866 local_irq_save(flags); 2867 2868 /* 2869 * get/set the timer IRQ vector: 2870 */ 2871 disable_8259A_irq(0); 2872 assign_irq_vector(0, cfg, apic->target_cpus()); 2873 2874 /* 2875 * As IRQ0 is to be enabled in the 8259A, the virtual 2876 * wire has to be disabled in the local APIC. Also 2877 * timer interrupts need to be acknowledged manually in 2878 * the 8259A for the i82489DX when using the NMI 2879 * watchdog as that APIC treats NMIs as level-triggered. 2880 * The AEOI mode will finish them in the 8259A 2881 * automatically. 2882 */ 2883 apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_EXTINT); 2884 init_8259A(1); 2885 #ifdef CONFIG_X86_32 2886 { 2887 unsigned int ver; 2888 2889 ver = apic_read(APIC_LVR); 2890 ver = GET_APIC_VERSION(ver); 2891 timer_ack = (nmi_watchdog == NMI_IO_APIC && !APIC_INTEGRATED(ver)); 2892 } 2893 #endif 2894 2895 pin1 = find_isa_irq_pin(0, mp_INT); 2896 apic1 = find_isa_irq_apic(0, mp_INT); 2897 pin2 = ioapic_i8259.pin; 2898 apic2 = ioapic_i8259.apic; 2899 2900 apic_printk(APIC_QUIET, KERN_INFO "..TIMER: vector=0x%02X " 2901 "apic1=%d pin1=%d apic2=%d pin2=%d\n", 2902 cfg->vector, apic1, pin1, apic2, pin2); 2903 2904 /* 2905 * Some BIOS writers are clueless and report the ExtINTA 2906 * I/O APIC input from the cascaded 8259A as the timer 2907 * interrupt input. So just in case, if only one pin 2908 * was found above, try it both directly and through the 2909 * 8259A. 2910 */ 2911 if (pin1 == -1) { 2912 if (intr_remapping_enabled) 2913 panic("BIOS bug: timer not connected to IO-APIC"); 2914 pin1 = pin2; 2915 apic1 = apic2; 2916 no_pin1 = 1; 2917 } else if (pin2 == -1) { 2918 pin2 = pin1; 2919 apic2 = apic1; 2920 } 2921 2922 if (pin1 != -1) { 2923 /* 2924 * Ok, does IRQ0 through the IOAPIC work? 2925 */ 2926 if (no_pin1) { 2927 add_pin_to_irq_node(cfg, node, apic1, pin1); 2928 setup_timer_IRQ0_pin(apic1, pin1, cfg->vector); 2929 } else { 2930 /* for edge trigger, setup_IO_APIC_irq already 2931 * leave it unmasked. 2932 * so only need to unmask if it is level-trigger 2933 * do we really have level trigger timer? 2934 */ 2935 int idx; 2936 idx = find_irq_entry(apic1, pin1, mp_INT); 2937 if (idx != -1 && irq_trigger(idx)) 2938 unmask_IO_APIC_irq_desc(desc); 2939 } 2940 if (timer_irq_works()) { 2941 if (nmi_watchdog == NMI_IO_APIC) { 2942 setup_nmi(); 2943 enable_8259A_irq(0); 2944 } 2945 if (disable_timer_pin_1 > 0) 2946 clear_IO_APIC_pin(0, pin1); 2947 goto out; 2948 } 2949 if (intr_remapping_enabled) 2950 panic("timer doesn't work through Interrupt-remapped IO-APIC"); 2951 local_irq_disable(); 2952 clear_IO_APIC_pin(apic1, pin1); 2953 if (!no_pin1) 2954 apic_printk(APIC_QUIET, KERN_ERR "..MP-BIOS bug: " 2955 "8254 timer not connected to IO-APIC\n"); 2956 2957 apic_printk(APIC_QUIET, KERN_INFO "...trying to set up timer " 2958 "(IRQ0) through the 8259A ...\n"); 2959 apic_printk(APIC_QUIET, KERN_INFO 2960 "..... (found apic %d pin %d) ...\n", apic2, pin2); 2961 /* 2962 * legacy devices should be connected to IO APIC #0 2963 */ 2964 replace_pin_at_irq_node(cfg, node, apic1, pin1, apic2, pin2); 2965 setup_timer_IRQ0_pin(apic2, pin2, cfg->vector); 2966 enable_8259A_irq(0); 2967 if (timer_irq_works()) { 2968 apic_printk(APIC_QUIET, KERN_INFO "....... works.\n"); 2969 timer_through_8259 = 1; 2970 if (nmi_watchdog == NMI_IO_APIC) { 2971 disable_8259A_irq(0); 2972 setup_nmi(); 2973 enable_8259A_irq(0); 2974 } 2975 goto out; 2976 } 2977 /* 2978 * Cleanup, just in case ... 2979 */ 2980 local_irq_disable(); 2981 disable_8259A_irq(0); 2982 clear_IO_APIC_pin(apic2, pin2); 2983 apic_printk(APIC_QUIET, KERN_INFO "....... failed.\n"); 2984 } 2985 2986 if (nmi_watchdog == NMI_IO_APIC) { 2987 apic_printk(APIC_QUIET, KERN_WARNING "timer doesn't work " 2988 "through the IO-APIC - disabling NMI Watchdog!\n"); 2989 nmi_watchdog = NMI_NONE; 2990 } 2991 #ifdef CONFIG_X86_32 2992 timer_ack = 0; 2993 #endif 2994 2995 apic_printk(APIC_QUIET, KERN_INFO 2996 "...trying to set up timer as Virtual Wire IRQ...\n"); 2997 2998 lapic_register_intr(0, desc); 2999 apic_write(APIC_LVT0, APIC_DM_FIXED | cfg->vector); /* Fixed mode */ 3000 enable_8259A_irq(0); 3001 3002 if (timer_irq_works()) { 3003 apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); 3004 goto out; 3005 } 3006 local_irq_disable(); 3007 disable_8259A_irq(0); 3008 apic_write(APIC_LVT0, APIC_LVT_MASKED | APIC_DM_FIXED | cfg->vector); 3009 apic_printk(APIC_QUIET, KERN_INFO "..... failed.\n"); 3010 3011 apic_printk(APIC_QUIET, KERN_INFO 3012 "...trying to set up timer as ExtINT IRQ...\n"); 3013 3014 init_8259A(0); 3015 make_8259A_irq(0); 3016 apic_write(APIC_LVT0, APIC_DM_EXTINT); 3017 3018 unlock_ExtINT_logic(); 3019 3020 if (timer_irq_works()) { 3021 apic_printk(APIC_QUIET, KERN_INFO "..... works.\n"); 3022 goto out; 3023 } 3024 local_irq_disable(); 3025 apic_printk(APIC_QUIET, KERN_INFO "..... failed :(.\n"); 3026 panic("IO-APIC + timer doesn't work! Boot with apic=debug and send a " 3027 "report. Then try booting with the 'noapic' option.\n"); 3028 out: 3029 local_irq_restore(flags); 3030 } 3031 3032 /* 3033 * Traditionally ISA IRQ2 is the cascade IRQ, and is not available 3034 * to devices. However there may be an I/O APIC pin available for 3035 * this interrupt regardless. The pin may be left unconnected, but 3036 * typically it will be reused as an ExtINT cascade interrupt for 3037 * the master 8259A. In the MPS case such a pin will normally be 3038 * reported as an ExtINT interrupt in the MP table. With ACPI 3039 * there is no provision for ExtINT interrupts, and in the absence 3040 * of an override it would be treated as an ordinary ISA I/O APIC 3041 * interrupt, that is edge-triggered and unmasked by default. We 3042 * used to do this, but it caused problems on some systems because 3043 * of the NMI watchdog and sometimes IRQ0 of the 8254 timer using 3044 * the same ExtINT cascade interrupt to drive the local APIC of the 3045 * bootstrap processor. Therefore we refrain from routing IRQ2 to 3046 * the I/O APIC in all cases now. No actual device should request 3047 * it anyway. --macro 3048 */ 3049 #define PIC_IRQS (1 << PIC_CASCADE_IR) 3050 3051 void __init setup_IO_APIC(void) 3052 { 3053 3054 /* 3055 * calling enable_IO_APIC() is moved to setup_local_APIC for BP 3056 */ 3057 3058 io_apic_irqs = ~PIC_IRQS; 3059 3060 apic_printk(APIC_VERBOSE, "ENABLING IO-APIC IRQs\n"); 3061 /* 3062 * Set up IO-APIC IRQ routing. 3063 */ 3064 #ifdef CONFIG_X86_32 3065 if (!acpi_ioapic) 3066 setup_ioapic_ids_from_mpc(); 3067 #endif 3068 sync_Arb_IDs(); 3069 setup_IO_APIC_irqs(); 3070 init_IO_APIC_traps(); 3071 check_timer(); 3072 } 3073 3074 /* 3075 * Called after all the initialization is done. If we didnt find any 3076 * APIC bugs then we can allow the modify fast path 3077 */ 3078 3079 static int __init io_apic_bug_finalize(void) 3080 { 3081 if (sis_apic_bug == -1) 3082 sis_apic_bug = 0; 3083 return 0; 3084 } 3085 3086 late_initcall(io_apic_bug_finalize); 3087 3088 struct sysfs_ioapic_data { 3089 struct sys_device dev; 3090 struct IO_APIC_route_entry entry[0]; 3091 }; 3092 static struct sysfs_ioapic_data * mp_ioapic_data[MAX_IO_APICS]; 3093 3094 static int ioapic_suspend(struct sys_device *dev, pm_message_t state) 3095 { 3096 struct IO_APIC_route_entry *entry; 3097 struct sysfs_ioapic_data *data; 3098 int i; 3099 3100 data = container_of(dev, struct sysfs_ioapic_data, dev); 3101 entry = data->entry; 3102 for (i = 0; i < nr_ioapic_registers[dev->id]; i ++, entry ++ ) 3103 *entry = ioapic_read_entry(dev->id, i); 3104 3105 return 0; 3106 } 3107 3108 static int ioapic_resume(struct sys_device *dev) 3109 { 3110 struct IO_APIC_route_entry *entry; 3111 struct sysfs_ioapic_data *data; 3112 unsigned long flags; 3113 union IO_APIC_reg_00 reg_00; 3114 int i; 3115 3116 data = container_of(dev, struct sysfs_ioapic_data, dev); 3117 entry = data->entry; 3118 3119 spin_lock_irqsave(&ioapic_lock, flags); 3120 reg_00.raw = io_apic_read(dev->id, 0); 3121 if (reg_00.bits.ID != mp_ioapics[dev->id].apicid) { 3122 reg_00.bits.ID = mp_ioapics[dev->id].apicid; 3123 io_apic_write(dev->id, 0, reg_00.raw); 3124 } 3125 spin_unlock_irqrestore(&ioapic_lock, flags); 3126 for (i = 0; i < nr_ioapic_registers[dev->id]; i++) 3127 ioapic_write_entry(dev->id, i, entry[i]); 3128 3129 return 0; 3130 } 3131 3132 static struct sysdev_class ioapic_sysdev_class = { 3133 .name = "ioapic", 3134 .suspend = ioapic_suspend, 3135 .resume = ioapic_resume, 3136 }; 3137 3138 static int __init ioapic_init_sysfs(void) 3139 { 3140 struct sys_device * dev; 3141 int i, size, error; 3142 3143 error = sysdev_class_register(&ioapic_sysdev_class); 3144 if (error) 3145 return error; 3146 3147 for (i = 0; i < nr_ioapics; i++ ) { 3148 size = sizeof(struct sys_device) + nr_ioapic_registers[i] 3149 * sizeof(struct IO_APIC_route_entry); 3150 mp_ioapic_data[i] = kzalloc(size, GFP_KERNEL); 3151 if (!mp_ioapic_data[i]) { 3152 printk(KERN_ERR "Can't suspend/resume IOAPIC %d\n", i); 3153 continue; 3154 } 3155 dev = &mp_ioapic_data[i]->dev; 3156 dev->id = i; 3157 dev->cls = &ioapic_sysdev_class; 3158 error = sysdev_register(dev); 3159 if (error) { 3160 kfree(mp_ioapic_data[i]); 3161 mp_ioapic_data[i] = NULL; 3162 printk(KERN_ERR "Can't suspend/resume IOAPIC %d\n", i); 3163 continue; 3164 } 3165 } 3166 3167 return 0; 3168 } 3169 3170 device_initcall(ioapic_init_sysfs); 3171 3172 static int nr_irqs_gsi = NR_IRQS_LEGACY; 3173 /* 3174 * Dynamic irq allocate and deallocation 3175 */ 3176 unsigned int create_irq_nr(unsigned int irq_want, int node) 3177 { 3178 /* Allocate an unused irq */ 3179 unsigned int irq; 3180 unsigned int new; 3181 unsigned long flags; 3182 struct irq_cfg *cfg_new = NULL; 3183 struct irq_desc *desc_new = NULL; 3184 3185 irq = 0; 3186 if (irq_want < nr_irqs_gsi) 3187 irq_want = nr_irqs_gsi; 3188 3189 spin_lock_irqsave(&vector_lock, flags); 3190 for (new = irq_want; new < nr_irqs; new++) { 3191 desc_new = irq_to_desc_alloc_node(new, node); 3192 if (!desc_new) { 3193 printk(KERN_INFO "can not get irq_desc for %d\n", new); 3194 continue; 3195 } 3196 cfg_new = desc_new->chip_data; 3197 3198 if (cfg_new->vector != 0) 3199 continue; 3200 3201 desc_new = move_irq_desc(desc_new, node); 3202 3203 if (__assign_irq_vector(new, cfg_new, apic->target_cpus()) == 0) 3204 irq = new; 3205 break; 3206 } 3207 spin_unlock_irqrestore(&vector_lock, flags); 3208 3209 if (irq > 0) { 3210 dynamic_irq_init(irq); 3211 /* restore it, in case dynamic_irq_init clear it */ 3212 if (desc_new) 3213 desc_new->chip_data = cfg_new; 3214 } 3215 return irq; 3216 } 3217 3218 int create_irq(void) 3219 { 3220 int node = cpu_to_node(boot_cpu_id); 3221 unsigned int irq_want; 3222 int irq; 3223 3224 irq_want = nr_irqs_gsi; 3225 irq = create_irq_nr(irq_want, node); 3226 3227 if (irq == 0) 3228 irq = -1; 3229 3230 return irq; 3231 } 3232 3233 void destroy_irq(unsigned int irq) 3234 { 3235 unsigned long flags; 3236 struct irq_cfg *cfg; 3237 struct irq_desc *desc; 3238 3239 /* store it, in case dynamic_irq_cleanup clear it */ 3240 desc = irq_to_desc(irq); 3241 cfg = desc->chip_data; 3242 dynamic_irq_cleanup(irq); 3243 /* connect back irq_cfg */ 3244 if (desc) 3245 desc->chip_data = cfg; 3246 3247 free_irte(irq); 3248 spin_lock_irqsave(&vector_lock, flags); 3249 __clear_irq_vector(irq, cfg); 3250 spin_unlock_irqrestore(&vector_lock, flags); 3251 } 3252 3253 /* 3254 * MSI message composition 3255 */ 3256 #ifdef CONFIG_PCI_MSI 3257 static int msi_compose_msg(struct pci_dev *pdev, unsigned int irq, struct msi_msg *msg) 3258 { 3259 struct irq_cfg *cfg; 3260 int err; 3261 unsigned dest; 3262 3263 if (disable_apic) 3264 return -ENXIO; 3265 3266 cfg = irq_cfg(irq); 3267 err = assign_irq_vector(irq, cfg, apic->target_cpus()); 3268 if (err) 3269 return err; 3270 3271 dest = apic->cpu_mask_to_apicid_and(cfg->domain, apic->target_cpus()); 3272 3273 if (irq_remapped(irq)) { 3274 struct irte irte; 3275 int ir_index; 3276 u16 sub_handle; 3277 3278 ir_index = map_irq_to_irte_handle(irq, &sub_handle); 3279 BUG_ON(ir_index == -1); 3280 3281 memset (&irte, 0, sizeof(irte)); 3282 3283 irte.present = 1; 3284 irte.dst_mode = apic->irq_dest_mode; 3285 irte.trigger_mode = 0; /* edge */ 3286 irte.dlvry_mode = apic->irq_delivery_mode; 3287 irte.vector = cfg->vector; 3288 irte.dest_id = IRTE_DEST(dest); 3289 3290 modify_irte(irq, &irte); 3291 3292 msg->address_hi = MSI_ADDR_BASE_HI; 3293 msg->data = sub_handle; 3294 msg->address_lo = MSI_ADDR_BASE_LO | MSI_ADDR_IR_EXT_INT | 3295 MSI_ADDR_IR_SHV | 3296 MSI_ADDR_IR_INDEX1(ir_index) | 3297 MSI_ADDR_IR_INDEX2(ir_index); 3298 } else { 3299 if (x2apic_enabled()) 3300 msg->address_hi = MSI_ADDR_BASE_HI | 3301 MSI_ADDR_EXT_DEST_ID(dest); 3302 else 3303 msg->address_hi = MSI_ADDR_BASE_HI; 3304 3305 msg->address_lo = 3306 MSI_ADDR_BASE_LO | 3307 ((apic->irq_dest_mode == 0) ? 3308 MSI_ADDR_DEST_MODE_PHYSICAL: 3309 MSI_ADDR_DEST_MODE_LOGICAL) | 3310 ((apic->irq_delivery_mode != dest_LowestPrio) ? 3311 MSI_ADDR_REDIRECTION_CPU: 3312 MSI_ADDR_REDIRECTION_LOWPRI) | 3313 MSI_ADDR_DEST_ID(dest); 3314 3315 msg->data = 3316 MSI_DATA_TRIGGER_EDGE | 3317 MSI_DATA_LEVEL_ASSERT | 3318 ((apic->irq_delivery_mode != dest_LowestPrio) ? 3319 MSI_DATA_DELIVERY_FIXED: 3320 MSI_DATA_DELIVERY_LOWPRI) | 3321 MSI_DATA_VECTOR(cfg->vector); 3322 } 3323 return err; 3324 } 3325 3326 #ifdef CONFIG_SMP 3327 static int set_msi_irq_affinity(unsigned int irq, const struct cpumask *mask) 3328 { 3329 struct irq_desc *desc = irq_to_desc(irq); 3330 struct irq_cfg *cfg; 3331 struct msi_msg msg; 3332 unsigned int dest; 3333 3334 dest = set_desc_affinity(desc, mask); 3335 if (dest == BAD_APICID) 3336 return -1; 3337 3338 cfg = desc->chip_data; 3339 3340 read_msi_msg_desc(desc, &msg); 3341 3342 msg.data &= ~MSI_DATA_VECTOR_MASK; 3343 msg.data |= MSI_DATA_VECTOR(cfg->vector); 3344 msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK; 3345 msg.address_lo |= MSI_ADDR_DEST_ID(dest); 3346 3347 write_msi_msg_desc(desc, &msg); 3348 3349 return 0; 3350 } 3351 #ifdef CONFIG_INTR_REMAP 3352 /* 3353 * Migrate the MSI irq to another cpumask. This migration is 3354 * done in the process context using interrupt-remapping hardware. 3355 */ 3356 static int 3357 ir_set_msi_irq_affinity(unsigned int irq, const struct cpumask *mask) 3358 { 3359 struct irq_desc *desc = irq_to_desc(irq); 3360 struct irq_cfg *cfg = desc->chip_data; 3361 unsigned int dest; 3362 struct irte irte; 3363 3364 if (get_irte(irq, &irte)) 3365 return -1; 3366 3367 dest = set_desc_affinity(desc, mask); 3368 if (dest == BAD_APICID) 3369 return -1; 3370 3371 irte.vector = cfg->vector; 3372 irte.dest_id = IRTE_DEST(dest); 3373 3374 /* 3375 * atomically update the IRTE with the new destination and vector. 3376 */ 3377 modify_irte(irq, &irte); 3378 3379 /* 3380 * After this point, all the interrupts will start arriving 3381 * at the new destination. So, time to cleanup the previous 3382 * vector allocation. 3383 */ 3384 if (cfg->move_in_progress) 3385 send_cleanup_vector(cfg); 3386 3387 return 0; 3388 } 3389 3390 #endif 3391 #endif /* CONFIG_SMP */ 3392 3393 /* 3394 * IRQ Chip for MSI PCI/PCI-X/PCI-Express Devices, 3395 * which implement the MSI or MSI-X Capability Structure. 3396 */ 3397 static struct irq_chip msi_chip = { 3398 .name = "PCI-MSI", 3399 .unmask = unmask_msi_irq, 3400 .mask = mask_msi_irq, 3401 .ack = ack_apic_edge, 3402 #ifdef CONFIG_SMP 3403 .set_affinity = set_msi_irq_affinity, 3404 #endif 3405 .retrigger = ioapic_retrigger_irq, 3406 }; 3407 3408 static struct irq_chip msi_ir_chip = { 3409 .name = "IR-PCI-MSI", 3410 .unmask = unmask_msi_irq, 3411 .mask = mask_msi_irq, 3412 #ifdef CONFIG_INTR_REMAP 3413 .ack = ir_ack_apic_edge, 3414 #ifdef CONFIG_SMP 3415 .set_affinity = ir_set_msi_irq_affinity, 3416 #endif 3417 #endif 3418 .retrigger = ioapic_retrigger_irq, 3419 }; 3420 3421 /* 3422 * Map the PCI dev to the corresponding remapping hardware unit 3423 * and allocate 'nvec' consecutive interrupt-remapping table entries 3424 * in it. 3425 */ 3426 static int msi_alloc_irte(struct pci_dev *dev, int irq, int nvec) 3427 { 3428 struct intel_iommu *iommu; 3429 int index; 3430 3431 iommu = map_dev_to_ir(dev); 3432 if (!iommu) { 3433 printk(KERN_ERR 3434 "Unable to map PCI %s to iommu\n", pci_name(dev)); 3435 return -ENOENT; 3436 } 3437 3438 index = alloc_irte(iommu, irq, nvec); 3439 if (index < 0) { 3440 printk(KERN_ERR 3441 "Unable to allocate %d IRTE for PCI %s\n", nvec, 3442 pci_name(dev)); 3443 return -ENOSPC; 3444 } 3445 return index; 3446 } 3447 3448 static int setup_msi_irq(struct pci_dev *dev, struct msi_desc *msidesc, int irq) 3449 { 3450 int ret; 3451 struct msi_msg msg; 3452 3453 ret = msi_compose_msg(dev, irq, &msg); 3454 if (ret < 0) 3455 return ret; 3456 3457 set_irq_msi(irq, msidesc); 3458 write_msi_msg(irq, &msg); 3459 3460 if (irq_remapped(irq)) { 3461 struct irq_desc *desc = irq_to_desc(irq); 3462 /* 3463 * irq migration in process context 3464 */ 3465 desc->status |= IRQ_MOVE_PCNTXT; 3466 set_irq_chip_and_handler_name(irq, &msi_ir_chip, handle_edge_irq, "edge"); 3467 } else 3468 set_irq_chip_and_handler_name(irq, &msi_chip, handle_edge_irq, "edge"); 3469 3470 dev_printk(KERN_DEBUG, &dev->dev, "irq %d for MSI/MSI-X\n", irq); 3471 3472 return 0; 3473 } 3474 3475 int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) 3476 { 3477 unsigned int irq; 3478 int ret, sub_handle; 3479 struct msi_desc *msidesc; 3480 unsigned int irq_want; 3481 struct intel_iommu *iommu = NULL; 3482 int index = 0; 3483 int node; 3484 3485 /* x86 doesn't support multiple MSI yet */ 3486 if (type == PCI_CAP_ID_MSI && nvec > 1) 3487 return 1; 3488 3489 node = dev_to_node(&dev->dev); 3490 irq_want = nr_irqs_gsi; 3491 sub_handle = 0; 3492 list_for_each_entry(msidesc, &dev->msi_list, list) { 3493 irq = create_irq_nr(irq_want, node); 3494 if (irq == 0) 3495 return -1; 3496 irq_want = irq + 1; 3497 if (!intr_remapping_enabled) 3498 goto no_ir; 3499 3500 if (!sub_handle) { 3501 /* 3502 * allocate the consecutive block of IRTE's 3503 * for 'nvec' 3504 */ 3505 index = msi_alloc_irte(dev, irq, nvec); 3506 if (index < 0) { 3507 ret = index; 3508 goto error; 3509 } 3510 } else { 3511 iommu = map_dev_to_ir(dev); 3512 if (!iommu) { 3513 ret = -ENOENT; 3514 goto error; 3515 } 3516 /* 3517 * setup the mapping between the irq and the IRTE 3518 * base index, the sub_handle pointing to the 3519 * appropriate interrupt remap table entry. 3520 */ 3521 set_irte_irq(irq, iommu, index, sub_handle); 3522 } 3523 no_ir: 3524 ret = setup_msi_irq(dev, msidesc, irq); 3525 if (ret < 0) 3526 goto error; 3527 sub_handle++; 3528 } 3529 return 0; 3530 3531 error: 3532 destroy_irq(irq); 3533 return ret; 3534 } 3535 3536 void arch_teardown_msi_irq(unsigned int irq) 3537 { 3538 destroy_irq(irq); 3539 } 3540 3541 #if defined (CONFIG_DMAR) || defined (CONFIG_INTR_REMAP) 3542 #ifdef CONFIG_SMP 3543 static int dmar_msi_set_affinity(unsigned int irq, const struct cpumask *mask) 3544 { 3545 struct irq_desc *desc = irq_to_desc(irq); 3546 struct irq_cfg *cfg; 3547 struct msi_msg msg; 3548 unsigned int dest; 3549 3550 dest = set_desc_affinity(desc, mask); 3551 if (dest == BAD_APICID) 3552 return -1; 3553 3554 cfg = desc->chip_data; 3555 3556 dmar_msi_read(irq, &msg); 3557 3558 msg.data &= ~MSI_DATA_VECTOR_MASK; 3559 msg.data |= MSI_DATA_VECTOR(cfg->vector); 3560 msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK; 3561 msg.address_lo |= MSI_ADDR_DEST_ID(dest); 3562 3563 dmar_msi_write(irq, &msg); 3564 3565 return 0; 3566 } 3567 3568 #endif /* CONFIG_SMP */ 3569 3570 struct irq_chip dmar_msi_type = { 3571 .name = "DMAR_MSI", 3572 .unmask = dmar_msi_unmask, 3573 .mask = dmar_msi_mask, 3574 .ack = ack_apic_edge, 3575 #ifdef CONFIG_SMP 3576 .set_affinity = dmar_msi_set_affinity, 3577 #endif 3578 .retrigger = ioapic_retrigger_irq, 3579 }; 3580 3581 int arch_setup_dmar_msi(unsigned int irq) 3582 { 3583 int ret; 3584 struct msi_msg msg; 3585 3586 ret = msi_compose_msg(NULL, irq, &msg); 3587 if (ret < 0) 3588 return ret; 3589 dmar_msi_write(irq, &msg); 3590 set_irq_chip_and_handler_name(irq, &dmar_msi_type, handle_edge_irq, 3591 "edge"); 3592 return 0; 3593 } 3594 #endif 3595 3596 #ifdef CONFIG_HPET_TIMER 3597 3598 #ifdef CONFIG_SMP 3599 static int hpet_msi_set_affinity(unsigned int irq, const struct cpumask *mask) 3600 { 3601 struct irq_desc *desc = irq_to_desc(irq); 3602 struct irq_cfg *cfg; 3603 struct msi_msg msg; 3604 unsigned int dest; 3605 3606 dest = set_desc_affinity(desc, mask); 3607 if (dest == BAD_APICID) 3608 return -1; 3609 3610 cfg = desc->chip_data; 3611 3612 hpet_msi_read(irq, &msg); 3613 3614 msg.data &= ~MSI_DATA_VECTOR_MASK; 3615 msg.data |= MSI_DATA_VECTOR(cfg->vector); 3616 msg.address_lo &= ~MSI_ADDR_DEST_ID_MASK; 3617 msg.address_lo |= MSI_ADDR_DEST_ID(dest); 3618 3619 hpet_msi_write(irq, &msg); 3620 3621 return 0; 3622 } 3623 3624 #endif /* CONFIG_SMP */ 3625 3626 static struct irq_chip hpet_msi_type = { 3627 .name = "HPET_MSI", 3628 .unmask = hpet_msi_unmask, 3629 .mask = hpet_msi_mask, 3630 .ack = ack_apic_edge, 3631 #ifdef CONFIG_SMP 3632 .set_affinity = hpet_msi_set_affinity, 3633 #endif 3634 .retrigger = ioapic_retrigger_irq, 3635 }; 3636 3637 int arch_setup_hpet_msi(unsigned int irq) 3638 { 3639 int ret; 3640 struct msi_msg msg; 3641 struct irq_desc *desc = irq_to_desc(irq); 3642 3643 ret = msi_compose_msg(NULL, irq, &msg); 3644 if (ret < 0) 3645 return ret; 3646 3647 hpet_msi_write(irq, &msg); 3648 desc->status |= IRQ_MOVE_PCNTXT; 3649 set_irq_chip_and_handler_name(irq, &hpet_msi_type, handle_edge_irq, 3650 "edge"); 3651 3652 return 0; 3653 } 3654 #endif 3655 3656 #endif /* CONFIG_PCI_MSI */ 3657 /* 3658 * Hypertransport interrupt support 3659 */ 3660 #ifdef CONFIG_HT_IRQ 3661 3662 #ifdef CONFIG_SMP 3663 3664 static void target_ht_irq(unsigned int irq, unsigned int dest, u8 vector) 3665 { 3666 struct ht_irq_msg msg; 3667 fetch_ht_irq_msg(irq, &msg); 3668 3669 msg.address_lo &= ~(HT_IRQ_LOW_VECTOR_MASK | HT_IRQ_LOW_DEST_ID_MASK); 3670 msg.address_hi &= ~(HT_IRQ_HIGH_DEST_ID_MASK); 3671 3672 msg.address_lo |= HT_IRQ_LOW_VECTOR(vector) | HT_IRQ_LOW_DEST_ID(dest); 3673 msg.address_hi |= HT_IRQ_HIGH_DEST_ID(dest); 3674 3675 write_ht_irq_msg(irq, &msg); 3676 } 3677 3678 static int set_ht_irq_affinity(unsigned int irq, const struct cpumask *mask) 3679 { 3680 struct irq_desc *desc = irq_to_desc(irq); 3681 struct irq_cfg *cfg; 3682 unsigned int dest; 3683 3684 dest = set_desc_affinity(desc, mask); 3685 if (dest == BAD_APICID) 3686 return -1; 3687 3688 cfg = desc->chip_data; 3689 3690 target_ht_irq(irq, dest, cfg->vector); 3691 3692 return 0; 3693 } 3694 3695 #endif 3696 3697 static struct irq_chip ht_irq_chip = { 3698 .name = "PCI-HT", 3699 .mask = mask_ht_irq, 3700 .unmask = unmask_ht_irq, 3701 .ack = ack_apic_edge, 3702 #ifdef CONFIG_SMP 3703 .set_affinity = set_ht_irq_affinity, 3704 #endif 3705 .retrigger = ioapic_retrigger_irq, 3706 }; 3707 3708 int arch_setup_ht_irq(unsigned int irq, struct pci_dev *dev) 3709 { 3710 struct irq_cfg *cfg; 3711 int err; 3712 3713 if (disable_apic) 3714 return -ENXIO; 3715 3716 cfg = irq_cfg(irq); 3717 err = assign_irq_vector(irq, cfg, apic->target_cpus()); 3718 if (!err) { 3719 struct ht_irq_msg msg; 3720 unsigned dest; 3721 3722 dest = apic->cpu_mask_to_apicid_and(cfg->domain, 3723 apic->target_cpus()); 3724 3725 msg.address_hi = HT_IRQ_HIGH_DEST_ID(dest); 3726 3727 msg.address_lo = 3728 HT_IRQ_LOW_BASE | 3729 HT_IRQ_LOW_DEST_ID(dest) | 3730 HT_IRQ_LOW_VECTOR(cfg->vector) | 3731 ((apic->irq_dest_mode == 0) ? 3732 HT_IRQ_LOW_DM_PHYSICAL : 3733 HT_IRQ_LOW_DM_LOGICAL) | 3734 HT_IRQ_LOW_RQEOI_EDGE | 3735 ((apic->irq_delivery_mode != dest_LowestPrio) ? 3736 HT_IRQ_LOW_MT_FIXED : 3737 HT_IRQ_LOW_MT_ARBITRATED) | 3738 HT_IRQ_LOW_IRQ_MASKED; 3739 3740 write_ht_irq_msg(irq, &msg); 3741 3742 set_irq_chip_and_handler_name(irq, &ht_irq_chip, 3743 handle_edge_irq, "edge"); 3744 3745 dev_printk(KERN_DEBUG, &dev->dev, "irq %d for HT\n", irq); 3746 } 3747 return err; 3748 } 3749 #endif /* CONFIG_HT_IRQ */ 3750 3751 #ifdef CONFIG_X86_UV 3752 /* 3753 * Re-target the irq to the specified CPU and enable the specified MMR located 3754 * on the specified blade to allow the sending of MSIs to the specified CPU. 3755 */ 3756 int arch_enable_uv_irq(char *irq_name, unsigned int irq, int cpu, int mmr_blade, 3757 unsigned long mmr_offset) 3758 { 3759 const struct cpumask *eligible_cpu = cpumask_of(cpu); 3760 struct irq_cfg *cfg; 3761 int mmr_pnode; 3762 unsigned long mmr_value; 3763 struct uv_IO_APIC_route_entry *entry; 3764 unsigned long flags; 3765 int err; 3766 3767 BUILD_BUG_ON(sizeof(struct uv_IO_APIC_route_entry) != sizeof(unsigned long)); 3768 3769 cfg = irq_cfg(irq); 3770 3771 err = assign_irq_vector(irq, cfg, eligible_cpu); 3772 if (err != 0) 3773 return err; 3774 3775 spin_lock_irqsave(&vector_lock, flags); 3776 set_irq_chip_and_handler_name(irq, &uv_irq_chip, handle_percpu_irq, 3777 irq_name); 3778 spin_unlock_irqrestore(&vector_lock, flags); 3779 3780 mmr_value = 0; 3781 entry = (struct uv_IO_APIC_route_entry *)&mmr_value; 3782 entry->vector = cfg->vector; 3783 entry->delivery_mode = apic->irq_delivery_mode; 3784 entry->dest_mode = apic->irq_dest_mode; 3785 entry->polarity = 0; 3786 entry->trigger = 0; 3787 entry->mask = 0; 3788 entry->dest = apic->cpu_mask_to_apicid(eligible_cpu); 3789 3790 mmr_pnode = uv_blade_to_pnode(mmr_blade); 3791 uv_write_global_mmr64(mmr_pnode, mmr_offset, mmr_value); 3792 3793 return irq; 3794 } 3795 3796 /* 3797 * Disable the specified MMR located on the specified blade so that MSIs are 3798 * longer allowed to be sent. 3799 */ 3800 void arch_disable_uv_irq(int mmr_blade, unsigned long mmr_offset) 3801 { 3802 unsigned long mmr_value; 3803 struct uv_IO_APIC_route_entry *entry; 3804 int mmr_pnode; 3805 3806 BUILD_BUG_ON(sizeof(struct uv_IO_APIC_route_entry) != sizeof(unsigned long)); 3807 3808 mmr_value = 0; 3809 entry = (struct uv_IO_APIC_route_entry *)&mmr_value; 3810 entry->mask = 1; 3811 3812 mmr_pnode = uv_blade_to_pnode(mmr_blade); 3813 uv_write_global_mmr64(mmr_pnode, mmr_offset, mmr_value); 3814 } 3815 #endif /* CONFIG_X86_64 */ 3816 3817 int __init io_apic_get_redir_entries (int ioapic) 3818 { 3819 union IO_APIC_reg_01 reg_01; 3820 unsigned long flags; 3821 3822 spin_lock_irqsave(&ioapic_lock, flags); 3823 reg_01.raw = io_apic_read(ioapic, 1); 3824 spin_unlock_irqrestore(&ioapic_lock, flags); 3825 3826 return reg_01.bits.entries; 3827 } 3828 3829 void __init probe_nr_irqs_gsi(void) 3830 { 3831 int nr = 0; 3832 3833 nr = acpi_probe_gsi(); 3834 if (nr > nr_irqs_gsi) { 3835 nr_irqs_gsi = nr; 3836 } else { 3837 /* for acpi=off or acpi is not compiled in */ 3838 int idx; 3839 3840 nr = 0; 3841 for (idx = 0; idx < nr_ioapics; idx++) 3842 nr += io_apic_get_redir_entries(idx) + 1; 3843 3844 if (nr > nr_irqs_gsi) 3845 nr_irqs_gsi = nr; 3846 } 3847 3848 printk(KERN_DEBUG "nr_irqs_gsi: %d\n", nr_irqs_gsi); 3849 } 3850 3851 #ifdef CONFIG_SPARSE_IRQ 3852 int __init arch_probe_nr_irqs(void) 3853 { 3854 int nr; 3855 3856 if (nr_irqs > (NR_VECTORS * nr_cpu_ids)) 3857 nr_irqs = NR_VECTORS * nr_cpu_ids; 3858 3859 nr = nr_irqs_gsi + 8 * nr_cpu_ids; 3860 #if defined(CONFIG_PCI_MSI) || defined(CONFIG_HT_IRQ) 3861 /* 3862 * for MSI and HT dyn irq 3863 */ 3864 nr += nr_irqs_gsi * 16; 3865 #endif 3866 if (nr < nr_irqs) 3867 nr_irqs = nr; 3868 3869 return 0; 3870 } 3871 #endif 3872 3873 static int __io_apic_set_pci_routing(struct device *dev, int irq, 3874 struct io_apic_irq_attr *irq_attr) 3875 { 3876 struct irq_desc *desc; 3877 struct irq_cfg *cfg; 3878 int node; 3879 int ioapic, pin; 3880 int trigger, polarity; 3881 3882 ioapic = irq_attr->ioapic; 3883 if (!IO_APIC_IRQ(irq)) { 3884 apic_printk(APIC_QUIET,KERN_ERR "IOAPIC[%d]: Invalid reference to IRQ 0\n", 3885 ioapic); 3886 return -EINVAL; 3887 } 3888 3889 if (dev) 3890 node = dev_to_node(dev); 3891 else 3892 node = cpu_to_node(boot_cpu_id); 3893 3894 desc = irq_to_desc_alloc_node(irq, node); 3895 if (!desc) { 3896 printk(KERN_INFO "can not get irq_desc %d\n", irq); 3897 return 0; 3898 } 3899 3900 pin = irq_attr->ioapic_pin; 3901 trigger = irq_attr->trigger; 3902 polarity = irq_attr->polarity; 3903 3904 /* 3905 * IRQs < 16 are already in the irq_2_pin[] map 3906 */ 3907 if (irq >= NR_IRQS_LEGACY) { 3908 cfg = desc->chip_data; 3909 add_pin_to_irq_node(cfg, node, ioapic, pin); 3910 } 3911 3912 setup_IO_APIC_irq(ioapic, pin, irq, desc, trigger, polarity); 3913 3914 return 0; 3915 } 3916 3917 int io_apic_set_pci_routing(struct device *dev, int irq, 3918 struct io_apic_irq_attr *irq_attr) 3919 { 3920 int ioapic, pin; 3921 /* 3922 * Avoid pin reprogramming. PRTs typically include entries 3923 * with redundant pin->gsi mappings (but unique PCI devices); 3924 * we only program the IOAPIC on the first. 3925 */ 3926 ioapic = irq_attr->ioapic; 3927 pin = irq_attr->ioapic_pin; 3928 if (test_bit(pin, mp_ioapic_routing[ioapic].pin_programmed)) { 3929 pr_debug("Pin %d-%d already programmed\n", 3930 mp_ioapics[ioapic].apicid, pin); 3931 return 0; 3932 } 3933 set_bit(pin, mp_ioapic_routing[ioapic].pin_programmed); 3934 3935 return __io_apic_set_pci_routing(dev, irq, irq_attr); 3936 } 3937 3938 /* -------------------------------------------------------------------------- 3939 ACPI-based IOAPIC Configuration 3940 -------------------------------------------------------------------------- */ 3941 3942 #ifdef CONFIG_ACPI 3943 3944 #ifdef CONFIG_X86_32 3945 int __init io_apic_get_unique_id(int ioapic, int apic_id) 3946 { 3947 union IO_APIC_reg_00 reg_00; 3948 static physid_mask_t apic_id_map = PHYSID_MASK_NONE; 3949 physid_mask_t tmp; 3950 unsigned long flags; 3951 int i = 0; 3952 3953 /* 3954 * The P4 platform supports up to 256 APIC IDs on two separate APIC 3955 * buses (one for LAPICs, one for IOAPICs), where predecessors only 3956 * supports up to 16 on one shared APIC bus. 3957 * 3958 * TBD: Expand LAPIC/IOAPIC support on P4-class systems to take full 3959 * advantage of new APIC bus architecture. 3960 */ 3961 3962 if (physids_empty(apic_id_map)) 3963 apic_id_map = apic->ioapic_phys_id_map(phys_cpu_present_map); 3964 3965 spin_lock_irqsave(&ioapic_lock, flags); 3966 reg_00.raw = io_apic_read(ioapic, 0); 3967 spin_unlock_irqrestore(&ioapic_lock, flags); 3968 3969 if (apic_id >= get_physical_broadcast()) { 3970 printk(KERN_WARNING "IOAPIC[%d]: Invalid apic_id %d, trying " 3971 "%d\n", ioapic, apic_id, reg_00.bits.ID); 3972 apic_id = reg_00.bits.ID; 3973 } 3974 3975 /* 3976 * Every APIC in a system must have a unique ID or we get lots of nice 3977 * 'stuck on smp_invalidate_needed IPI wait' messages. 3978 */ 3979 if (apic->check_apicid_used(apic_id_map, apic_id)) { 3980 3981 for (i = 0; i < get_physical_broadcast(); i++) { 3982 if (!apic->check_apicid_used(apic_id_map, i)) 3983 break; 3984 } 3985 3986 if (i == get_physical_broadcast()) 3987 panic("Max apic_id exceeded!\n"); 3988 3989 printk(KERN_WARNING "IOAPIC[%d]: apic_id %d already used, " 3990 "trying %d\n", ioapic, apic_id, i); 3991 3992 apic_id = i; 3993 } 3994 3995 tmp = apic->apicid_to_cpu_present(apic_id); 3996 physids_or(apic_id_map, apic_id_map, tmp); 3997 3998 if (reg_00.bits.ID != apic_id) { 3999 reg_00.bits.ID = apic_id; 4000 4001 spin_lock_irqsave(&ioapic_lock, flags); 4002 io_apic_write(ioapic, 0, reg_00.raw); 4003 reg_00.raw = io_apic_read(ioapic, 0); 4004 spin_unlock_irqrestore(&ioapic_lock, flags); 4005 4006 /* Sanity check */ 4007 if (reg_00.bits.ID != apic_id) { 4008 printk("IOAPIC[%d]: Unable to change apic_id!\n", ioapic); 4009 return -1; 4010 } 4011 } 4012 4013 apic_printk(APIC_VERBOSE, KERN_INFO 4014 "IOAPIC[%d]: Assigned apic_id %d\n", ioapic, apic_id); 4015 4016 return apic_id; 4017 } 4018 #endif 4019 4020 int __init io_apic_get_version(int ioapic) 4021 { 4022 union IO_APIC_reg_01 reg_01; 4023 unsigned long flags; 4024 4025 spin_lock_irqsave(&ioapic_lock, flags); 4026 reg_01.raw = io_apic_read(ioapic, 1); 4027 spin_unlock_irqrestore(&ioapic_lock, flags); 4028 4029 return reg_01.bits.version; 4030 } 4031 4032 int acpi_get_override_irq(int bus_irq, int *trigger, int *polarity) 4033 { 4034 int i; 4035 4036 if (skip_ioapic_setup) 4037 return -1; 4038 4039 for (i = 0; i < mp_irq_entries; i++) 4040 if (mp_irqs[i].irqtype == mp_INT && 4041 mp_irqs[i].srcbusirq == bus_irq) 4042 break; 4043 if (i >= mp_irq_entries) 4044 return -1; 4045 4046 *trigger = irq_trigger(i); 4047 *polarity = irq_polarity(i); 4048 return 0; 4049 } 4050 4051 #endif /* CONFIG_ACPI */ 4052 4053 /* 4054 * This function currently is only a helper for the i386 smp boot process where 4055 * we need to reprogram the ioredtbls to cater for the cpus which have come online 4056 * so mask in all cases should simply be apic->target_cpus() 4057 */ 4058 #ifdef CONFIG_SMP 4059 void __init setup_ioapic_dest(void) 4060 { 4061 int pin, ioapic = 0, irq, irq_entry; 4062 struct irq_desc *desc; 4063 const struct cpumask *mask; 4064 4065 if (skip_ioapic_setup == 1) 4066 return; 4067 4068 #ifdef CONFIG_ACPI 4069 if (!acpi_disabled && acpi_ioapic) { 4070 ioapic = mp_find_ioapic(0); 4071 if (ioapic < 0) 4072 ioapic = 0; 4073 } 4074 #endif 4075 4076 for (pin = 0; pin < nr_ioapic_registers[ioapic]; pin++) { 4077 irq_entry = find_irq_entry(ioapic, pin, mp_INT); 4078 if (irq_entry == -1) 4079 continue; 4080 irq = pin_2_irq(irq_entry, ioapic, pin); 4081 4082 desc = irq_to_desc(irq); 4083 4084 /* 4085 * Honour affinities which have been set in early boot 4086 */ 4087 if (desc->status & 4088 (IRQ_NO_BALANCING | IRQ_AFFINITY_SET)) 4089 mask = desc->affinity; 4090 else 4091 mask = apic->target_cpus(); 4092 4093 if (intr_remapping_enabled) 4094 set_ir_ioapic_affinity_irq_desc(desc, mask); 4095 else 4096 set_ioapic_affinity_irq_desc(desc, mask); 4097 } 4098 4099 } 4100 #endif 4101 4102 #define IOAPIC_RESOURCE_NAME_SIZE 11 4103 4104 static struct resource *ioapic_resources; 4105 4106 static struct resource * __init ioapic_setup_resources(void) 4107 { 4108 unsigned long n; 4109 struct resource *res; 4110 char *mem; 4111 int i; 4112 4113 if (nr_ioapics <= 0) 4114 return NULL; 4115 4116 n = IOAPIC_RESOURCE_NAME_SIZE + sizeof(struct resource); 4117 n *= nr_ioapics; 4118 4119 mem = alloc_bootmem(n); 4120 res = (void *)mem; 4121 4122 if (mem != NULL) { 4123 mem += sizeof(struct resource) * nr_ioapics; 4124 4125 for (i = 0; i < nr_ioapics; i++) { 4126 res[i].name = mem; 4127 res[i].flags = IORESOURCE_MEM | IORESOURCE_BUSY; 4128 sprintf(mem, "IOAPIC %u", i); 4129 mem += IOAPIC_RESOURCE_NAME_SIZE; 4130 } 4131 } 4132 4133 ioapic_resources = res; 4134 4135 return res; 4136 } 4137 4138 void __init ioapic_init_mappings(void) 4139 { 4140 unsigned long ioapic_phys, idx = FIX_IO_APIC_BASE_0; 4141 struct resource *ioapic_res; 4142 int i; 4143 4144 ioapic_res = ioapic_setup_resources(); 4145 for (i = 0; i < nr_ioapics; i++) { 4146 if (smp_found_config) { 4147 ioapic_phys = mp_ioapics[i].apicaddr; 4148 #ifdef CONFIG_X86_32 4149 if (!ioapic_phys) { 4150 printk(KERN_ERR 4151 "WARNING: bogus zero IO-APIC " 4152 "address found in MPTABLE, " 4153 "disabling IO/APIC support!\n"); 4154 smp_found_config = 0; 4155 skip_ioapic_setup = 1; 4156 goto fake_ioapic_page; 4157 } 4158 #endif 4159 } else { 4160 #ifdef CONFIG_X86_32 4161 fake_ioapic_page: 4162 #endif 4163 ioapic_phys = (unsigned long) 4164 alloc_bootmem_pages(PAGE_SIZE); 4165 ioapic_phys = __pa(ioapic_phys); 4166 } 4167 set_fixmap_nocache(idx, ioapic_phys); 4168 apic_printk(APIC_VERBOSE, 4169 "mapped IOAPIC to %08lx (%08lx)\n", 4170 __fix_to_virt(idx), ioapic_phys); 4171 idx++; 4172 4173 if (ioapic_res != NULL) { 4174 ioapic_res->start = ioapic_phys; 4175 ioapic_res->end = ioapic_phys + (4 * 1024) - 1; 4176 ioapic_res++; 4177 } 4178 } 4179 } 4180 4181 static int __init ioapic_insert_resources(void) 4182 { 4183 int i; 4184 struct resource *r = ioapic_resources; 4185 4186 if (!r) { 4187 if (nr_ioapics > 0) { 4188 printk(KERN_ERR 4189 "IO APIC resources couldn't be allocated.\n"); 4190 return -1; 4191 } 4192 return 0; 4193 } 4194 4195 for (i = 0; i < nr_ioapics; i++) { 4196 insert_resource(&iomem_resource, r); 4197 r++; 4198 } 4199 4200 return 0; 4201 } 4202 4203 /* Insert the IO APIC resources after PCI initialization has occured to handle 4204 * IO APICS that are mapped in on a BAR in PCI space. */ 4205 late_initcall(ioapic_insert_resources); 4206