Lines Matching +full:legacy +full:- +full:interrupt +full:- +full:controller
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * i8259 interrupt controller driver.
8 #include <linux/interrupt.h>
26 * Acknowledge the IRQ using either the PCI host bridge's interrupt
29 * IBM and Motorola PReP boxes so we must use the int-ack feature on them.
36 /* Either int-ack or poll for the IRQ */ in i8259_irq()
43 /* Perform an interrupt acknowledge cycle on controller 1. */ in i8259_irq()
48 * Interrupt is cascaded so perform interrupt in i8259_irq()
49 * acknowledge on controller 2. in i8259_irq()
58 * This may be a spurious interrupt. in i8259_irq()
60 * Read the interrupt status register (ISR). If the most in i8259_irq()
62 * interrupt. in i8259_irq()
81 if (d->irq > 7) { in i8259_mask_and_ack_irq()
82 cached_A1 |= 1 << (d->irq-8); in i8259_mask_and_ack_irq()
85 outb(0x20, 0xA0); /* Non-specific EOI */ in i8259_mask_and_ack_irq()
86 outb(0x20, 0x20); /* Non-specific EOI to cascade */ in i8259_mask_and_ack_irq()
88 cached_21 |= 1 << d->irq; in i8259_mask_and_ack_irq()
91 outb(0x20, 0x20); /* Non-specific EOI */ in i8259_mask_and_ack_irq()
106 pr_debug("i8259_mask_irq(%d)\n", d->irq); in i8259_mask_irq()
109 if (d->irq < 8) in i8259_mask_irq()
110 cached_21 |= 1 << d->irq; in i8259_mask_irq()
112 cached_A1 |= 1 << (d->irq-8); in i8259_mask_irq()
113 i8259_set_irq_mask(d->irq); in i8259_mask_irq()
121 pr_debug("i8259_unmask_irq(%d)\n", d->irq); in i8259_unmask_irq()
124 if (d->irq < 8) in i8259_unmask_irq()
125 cached_21 &= ~(1 << d->irq); in i8259_unmask_irq()
127 cached_A1 &= ~(1 << (d->irq-8)); in i8259_unmask_irq()
128 i8259_set_irq_mask(d->irq); in i8259_unmask_irq()
217 * i8259_init - Initialize the legacy controller
218 * @node: device node of the legacy PIC (can be NULL, but then, it will match
220 * @intack_addr: PCI interrupt acknowledge (real) address which will return
227 /* initialize the controller */ in i8259_init()
234 /* init master interrupt controller */ in i8259_init()
240 /* init slave interrupt controller */ in i8259_init()
256 /* Set interrupt masks */ in i8259_init()
262 /* create a legacy host */ in i8259_init()
282 printk(KERN_INFO "i8259 legacy interrupt controller initialized\n"); in i8259_init()