2 * drivers/s390/cio/airq.c
3 * S/390 common I/O routines -- support for adapter interruptions
7 * Copyright (C) 1999-2002 IBM Deutschland Entwicklung GmbH,
9 * Author(s): Ingo Adlung (adlung@de.ibm.com)
10 * Cornelia Huck (cohuck@de.ibm.com)
11 * Arnd Bergmann (arndb@de.ibm.com)
14 #include <linux/init.h>
15 #include <linux/module.h>
16 #include <linux/slab.h>
18 #include "cio_debug.h"
21 static spinlock_t adapter_lock = SPIN_LOCK_UNLOCKED;
22 static adapter_int_handler_t adapter_handler;
25 * register for adapter interrupts
27 * With HiperSockets the zSeries architecture provides for
28 * means of adapter interrups, pseudo I/O interrupts that are
29 * not tied to an I/O subchannel, but to an adapter. However,
30 * it doesn't disclose the info how to enable/disable them, but
31 * to recognize them only. Perhaps we should consider them
32 * being shared interrupts, and thus build a linked list
33 * of adapter handlers ... to be evaluated ...
36 s390_register_adapter_interrupt (adapter_int_handler_t handler)
41 CIO_TRACE_EVENT (4, "rgaint");
43 spin_lock (&adapter_lock);
47 else if (adapter_handler)
50 adapter_handler = handler;
54 spin_unlock (&adapter_lock);
56 sprintf (dbf_txt, "ret:%d", ret);
57 CIO_TRACE_EVENT (4, dbf_txt);
63 s390_unregister_adapter_interrupt (adapter_int_handler_t handler)
68 CIO_TRACE_EVENT (4, "urgaint");
70 spin_lock (&adapter_lock);
74 else if (handler != adapter_handler)
77 adapter_handler = NULL;
81 spin_unlock (&adapter_lock);
83 sprintf (dbf_txt, "ret:%d", ret);
84 CIO_TRACE_EVENT (4, dbf_txt);
92 CIO_TRACE_EVENT (4, "doaio");
94 spin_lock (&adapter_lock);
97 (*adapter_handler) ();
99 spin_unlock (&adapter_lock);
104 EXPORT_SYMBOL (s390_register_adapter_interrupt);
105 EXPORT_SYMBOL (s390_unregister_adapter_interrupt);