^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * LSAPIC Interrupt Controller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * This takes care of interrupts that are generated by the CPU's
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * internal Streamlined Advanced Programmable Interrupt Controller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * (LSAPIC), such as the ITC and IPI interrupts.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * Copyright (C) 1999 VA Linux Systems
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * Copyright (C) 2000 Hewlett-Packard Co
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * Copyright (C) 2000 David Mosberger-Tang <davidm@hpl.hp.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/sched.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/irq.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) static unsigned int
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) lsapic_noop_startup (struct irq_data *data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) static void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) lsapic_noop (struct irq_data *data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) /* nothing to do... */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) static int lsapic_retrigger(struct irq_data *data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) ia64_resend_irq(data->irq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) struct irq_chip irq_type_ia64_lsapic = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) .name = "LSAPIC",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) .irq_startup = lsapic_noop_startup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) .irq_shutdown = lsapic_noop,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) .irq_enable = lsapic_noop,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) .irq_disable = lsapic_noop,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) .irq_ack = lsapic_noop,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) .irq_retrigger = lsapic_retrigger,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) };