linux/arch/s390/include/asm/irq.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _ASM_IRQ_H
   3#define _ASM_IRQ_H
   4
   5#define EXT_INTERRUPT   0
   6#define IO_INTERRUPT    1
   7#define THIN_INTERRUPT  2
   8
   9#define NR_IRQS_BASE    3
  10
  11#define NR_IRQS NR_IRQS_BASE
  12#define NR_IRQS_LEGACY NR_IRQS_BASE
  13
  14/* External interruption codes */
  15#define EXT_IRQ_INTERRUPT_KEY   0x0040
  16#define EXT_IRQ_CLK_COMP        0x1004
  17#define EXT_IRQ_CPU_TIMER       0x1005
  18#define EXT_IRQ_WARNING_TRACK   0x1007
  19#define EXT_IRQ_MALFUNC_ALERT   0x1200
  20#define EXT_IRQ_EMERGENCY_SIG   0x1201
  21#define EXT_IRQ_EXTERNAL_CALL   0x1202
  22#define EXT_IRQ_TIMING_ALERT    0x1406
  23#define EXT_IRQ_MEASURE_ALERT   0x1407
  24#define EXT_IRQ_SERVICE_SIG     0x2401
  25#define EXT_IRQ_CP_SERVICE      0x2603
  26#define EXT_IRQ_IUCV            0x4000
  27
  28#ifndef __ASSEMBLY__
  29
  30#include <linux/hardirq.h>
  31#include <linux/percpu.h>
  32#include <linux/cache.h>
  33#include <linux/types.h>
  34
  35enum interruption_class {
  36        IRQEXT_CLK,
  37        IRQEXT_EXC,
  38        IRQEXT_EMS,
  39        IRQEXT_TMR,
  40        IRQEXT_TLA,
  41        IRQEXT_PFL,
  42        IRQEXT_DSD,
  43        IRQEXT_VRT,
  44        IRQEXT_SCP,
  45        IRQEXT_IUC,
  46        IRQEXT_CMS,
  47        IRQEXT_CMC,
  48        IRQEXT_FTP,
  49        IRQIO_CIO,
  50        IRQIO_QAI,
  51        IRQIO_DAS,
  52        IRQIO_C15,
  53        IRQIO_C70,
  54        IRQIO_TAP,
  55        IRQIO_VMR,
  56        IRQIO_LCS,
  57        IRQIO_CTC,
  58        IRQIO_APB,
  59        IRQIO_ADM,
  60        IRQIO_CSC,
  61        IRQIO_PCI,
  62        IRQIO_MSI,
  63        IRQIO_VIR,
  64        IRQIO_VAI,
  65        NMI_NMI,
  66        CPU_RST,
  67        NR_ARCH_IRQS
  68};
  69
  70struct irq_stat {
  71        unsigned int irqs[NR_ARCH_IRQS];
  72};
  73
  74DECLARE_PER_CPU_SHARED_ALIGNED(struct irq_stat, irq_stat);
  75
  76static __always_inline void inc_irq_stat(enum interruption_class irq)
  77{
  78        __this_cpu_inc(irq_stat.irqs[irq]);
  79}
  80
  81struct ext_code {
  82        unsigned short subcode;
  83        unsigned short code;
  84};
  85
  86typedef void (*ext_int_handler_t)(struct ext_code, unsigned int, unsigned long);
  87
  88int register_external_irq(u16 code, ext_int_handler_t handler);
  89int unregister_external_irq(u16 code, ext_int_handler_t handler);
  90
  91enum irq_subclass {
  92        IRQ_SUBCLASS_MEASUREMENT_ALERT = 5,
  93        IRQ_SUBCLASS_SERVICE_SIGNAL = 9,
  94};
  95
  96#define CR0_IRQ_SUBCLASS_MASK                                     \
  97        ((1UL << (63 - 30))  /* Warning Track */                | \
  98         (1UL << (63 - 48))  /* Malfunction Alert */            | \
  99         (1UL << (63 - 49))  /* Emergency Signal */             | \
 100         (1UL << (63 - 50))  /* External Call */                | \
 101         (1UL << (63 - 52))  /* Clock Comparator */             | \
 102         (1UL << (63 - 53))  /* CPU Timer */                    | \
 103         (1UL << (63 - 54))  /* Service Signal */               | \
 104         (1UL << (63 - 57))  /* Interrupt Key */                | \
 105         (1UL << (63 - 58))  /* Measurement Alert */            | \
 106         (1UL << (63 - 59))  /* Timing Alert */                 | \
 107         (1UL << (63 - 62))) /* IUCV */
 108
 109void irq_subclass_register(enum irq_subclass subclass);
 110void irq_subclass_unregister(enum irq_subclass subclass);
 111
 112#define irq_canonicalize(irq)  (irq)
 113
 114#endif /* __ASSEMBLY__ */
 115
 116#endif /* _ASM_IRQ_H */
 117