Linux Audio

Check our new training course

Loading...
v6.2
  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	union {
 85		struct {
 86			unsigned short subcode;
 87			unsigned short code;
 88		};
 89		unsigned int int_code;
 90	};
 91};
 92
 93typedef void (*ext_int_handler_t)(struct ext_code, unsigned int, unsigned long);
 94
 95int register_external_irq(u16 code, ext_int_handler_t handler);
 96int unregister_external_irq(u16 code, ext_int_handler_t handler);
 97
 98enum irq_subclass {
 99	IRQ_SUBCLASS_MEASUREMENT_ALERT = 5,
100	IRQ_SUBCLASS_SERVICE_SIGNAL = 9,
101};
102
103#define CR0_IRQ_SUBCLASS_MASK					  \
104	((1UL << (63 - 30))  /* Warning Track */		| \
105	 (1UL << (63 - 48))  /* Malfunction Alert */		| \
106	 (1UL << (63 - 49))  /* Emergency Signal */		| \
107	 (1UL << (63 - 50))  /* External Call */		| \
108	 (1UL << (63 - 52))  /* Clock Comparator */		| \
109	 (1UL << (63 - 53))  /* CPU Timer */			| \
110	 (1UL << (63 - 54))  /* Service Signal */		| \
111	 (1UL << (63 - 57))  /* Interrupt Key */		| \
112	 (1UL << (63 - 58))  /* Measurement Alert */		| \
113	 (1UL << (63 - 59))  /* Timing Alert */			| \
114	 (1UL << (63 - 62))) /* IUCV */
115
116void irq_subclass_register(enum irq_subclass subclass);
117void irq_subclass_unregister(enum irq_subclass subclass);
118
119#define irq_canonicalize(irq)  (irq)
120
121#endif /* __ASSEMBLY__ */
122
123#endif /* _ASM_IRQ_H */
v4.17
  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 */