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_DAS,
  51        IRQIO_C15,
  52        IRQIO_C70,
  53        IRQIO_TAP,
  54        IRQIO_VMR,
  55        IRQIO_LCS,
  56        IRQIO_CTC,
  57        IRQIO_ADM,
  58        IRQIO_CSC,
  59        IRQIO_VIR,
  60        IRQIO_QAI,
  61        IRQIO_APB,
  62        IRQIO_PCF,
  63        IRQIO_PCD,
  64        IRQIO_MSI,
  65        IRQIO_VAI,
  66        IRQIO_GAL,
  67        NMI_NMI,
  68        CPU_RST,
  69        NR_ARCH_IRQS
  70};
  71
  72struct irq_stat {
  73        unsigned int irqs[NR_ARCH_IRQS];
  74};
  75
  76DECLARE_PER_CPU_SHARED_ALIGNED(struct irq_stat, irq_stat);
  77
  78static __always_inline void inc_irq_stat(enum interruption_class irq)
  79{
  80        __this_cpu_inc(irq_stat.irqs[irq]);
  81}
  82
  83struct ext_code {
  84        unsigned short subcode;
  85        unsigned short code;
  86};
  87
  88typedef void (*ext_int_handler_t)(struct ext_code, unsigned int, unsigned long);
  89
  90int register_external_irq(u16 code, ext_int_handler_t handler);
  91int unregister_external_irq(u16 code, ext_int_handler_t handler);
  92
  93enum irq_subclass {
  94        IRQ_SUBCLASS_MEASUREMENT_ALERT = 5,
  95        IRQ_SUBCLASS_SERVICE_SIGNAL = 9,
  96};
  97
  98#define CR0_IRQ_SUBCLASS_MASK                                     \
  99        ((1UL << (63 - 30))  /* Warning Track */                | \
 100         (1UL << (63 - 48))  /* Malfunction Alert */            | \
 101         (1UL << (63 - 49))  /* Emergency Signal */             | \
 102         (1UL << (63 - 50))  /* External Call */                | \
 103         (1UL << (63 - 52))  /* Clock Comparator */             | \
 104         (1UL << (63 - 53))  /* CPU Timer */                    | \
 105         (1UL << (63 - 54))  /* Service Signal */               | \
 106         (1UL << (63 - 57))  /* Interrupt Key */                | \
 107         (1UL << (63 - 58))  /* Measurement Alert */            | \
 108         (1UL << (63 - 59))  /* Timing Alert */                 | \
 109         (1UL << (63 - 62))) /* IUCV */
 110
 111void irq_subclass_register(enum irq_subclass subclass);
 112void irq_subclass_unregister(enum irq_subclass subclass);
 113
 114#define irq_canonicalize(irq)  (irq)
 115
 116#endif /* __ASSEMBLY__ */
 117
 118#endif /* _ASM_IRQ_H */
 119