11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * LSAPIC Interrupt Controller
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This takes care of interrupts that are generated by the CPU's
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * internal Streamlined Advanced Programmable Interrupt Controller
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (LSAPIC), such as the ITC and IPI interrupts.
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    *
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999 VA Linux Systems
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2000 Hewlett-Packard Co
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2000 David Mosberger-Tang <davidm@hpl.hp.com>
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/sched.h>
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/irq.h>
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int
185c217b60fed39ed2ac6a2e8b788df4a74fa68878Thomas Gleixnerlsapic_noop_startup (struct irq_data *data)
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return 0;
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void
245c217b60fed39ed2ac6a2e8b788df4a74fa68878Thomas Gleixnerlsapic_noop (struct irq_data *data)
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2672fdbdce3d52282f8ea95f512e871791256754e6Simon Arlott	/* nothing to do... */
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
295c217b60fed39ed2ac6a2e8b788df4a74fa68878Thomas Gleixnerstatic int lsapic_retrigger(struct irq_data *data)
30c0ad90a32fb60f4129d0e24dfd5fd7128e2e09f2Ingo Molnar{
315c217b60fed39ed2ac6a2e8b788df4a74fa68878Thomas Gleixner	ia64_resend_irq(data->irq);
32c0ad90a32fb60f4129d0e24dfd5fd7128e2e09f2Ingo Molnar
33c0ad90a32fb60f4129d0e24dfd5fd7128e2e09f2Ingo Molnar	return 1;
34c0ad90a32fb60f4129d0e24dfd5fd7128e2e09f2Ingo Molnar}
35c0ad90a32fb60f4129d0e24dfd5fd7128e2e09f2Ingo Molnar
36fb824f4838c3110c282268a3620f41da67b3f3fbThomas Gleixnerstruct irq_chip irq_type_ia64_lsapic = {
375c217b60fed39ed2ac6a2e8b788df4a74fa68878Thomas Gleixner	.name =			"LSAPIC",
385c217b60fed39ed2ac6a2e8b788df4a74fa68878Thomas Gleixner	.irq_startup =		lsapic_noop_startup,
395c217b60fed39ed2ac6a2e8b788df4a74fa68878Thomas Gleixner	.irq_shutdown =		lsapic_noop,
405c217b60fed39ed2ac6a2e8b788df4a74fa68878Thomas Gleixner	.irq_enable =		lsapic_noop,
415c217b60fed39ed2ac6a2e8b788df4a74fa68878Thomas Gleixner	.irq_disable =		lsapic_noop,
425c217b60fed39ed2ac6a2e8b788df4a74fa68878Thomas Gleixner	.irq_ack =		lsapic_noop,
435c217b60fed39ed2ac6a2e8b788df4a74fa68878Thomas Gleixner	.irq_retrigger =	lsapic_retrigger,
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
45