in
  *   ˆl–Ü4ý( ©³( 	Å€fàB¦-ÿÁƒl½_†I|¥�+ÁÀ     /* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_IRQNR_H
#define _LINUX_IRQNR_H

#include <uapi/linux/irqnr.h>


unsigned int irq_get_nr_irqs(void) __pure;
unsigned int irq_set_nr_irqs(unsigned int nr);
extern struct irq_desc *irq_to_desc(unsigned int irq);
unsigned int irq_get_next_irq(unsigned int offset);

#define for_each_irq_desc(irq, desc)                                      \
	for (unsigned int __nr_irqs__ = irq_get_nr_irqs(); __nr_irqs__;   \
	     __nr_irqs__ = 0)                                             \
		for (irq = 0, desc = irq_to_desc(irq); irq < __nr_irqs__; \
		     irq++, desc = irq_to_desc(irq))                      \
			if (!desc)                                        \
				;                                         \
			else

# define for_each_irq_desc_reverse(irq, desc)				\
	for (irq = irq_get_nr_irqs() - 1, desc = irq_to_desc(irq);	\
	     irq >= 0; irq--, desc = irq_to_desc(irq))			\
		if (!desc)						\
			;						\
		else

#define for_each_active_irq(irq)                                        \
	for (unsigned int __nr_irqs__ = irq_get_nr_irqs(); __nr_irqs__; \
	     __nr_irqs__ = 0)                                           \
		for (irq = irq_get_next_irq(0); irq < __nr_irqs__;      \
		     irq = irq_get_next_irq(irq + 1))

#define for_each_irq_nr(irq)                                            \
	for (unsigned int __nr_irqs__ = irq_get_nr_irqs(); __nr_irqs__; \
	     __nr_irqs__ = 0)                                           \
		for (irq = 0; irq < __nr_irqs__; irq++)

#endif
     	ˆ¿Âƒd"¾ÁÀ  2   ˆl–ßi~”êh¥8 Eq–®*bÑ¿Ã…e§™h_ŒuÐb&=Ly[Ï¿ÃÂ  0   ˆl–Ü4ý(© ~”ú�Á?q‘)‹FÿÅ40_�uÐb&=LyZof¯ÅÄ  	   ˆÃÆ0ÅÄ     ˆÃÆƒ­¹ÂÅÄ      ˆƒÏ³_•I|¥‰ÓMdœv ©ƒ&íK<óo¬ÆÅ     �_’I|¥‰ÓMjqØ‚¦ð¬÷ÇÆ      File not found.
 2    	/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_MMIOTRACE_H
#define _LINUX_MMIOTRACE_H

#include <linux/types.h>
#include <linux/list.h>

struct kmmio_probe;
struct pt_regs;

typedef void (*kmmio_pre_handler_t)(struct kmmio_probe *,
				struct pt_regs *, unsigned long addr);
typedef void (*kmmio_post_handler_t)(struct kmmio_probe *,
				unsigned long condition, struct pt_regs *);

struct kmmio_probe {
	/* kmmio internal list: */
	struct list_head	list;
	/* start location of the probe point: */
	unsigned long		addr;
	/* length of the probe region: */
	unsigned long		len;
	/* Called before addr is executed: */
	kmmio_pre_handler_t	pre_handler;
	/* Called after addr is executed: */
	kmmio_post_handler_t	post_handler;
	void			*private;
};

extern unsigned int kmmio_count;

extern int register_kmmio_probe(struct kmmio_probe *p);
extern void unregister_kmmio_probe(struct kmmio_probe *p);
extern int kmmio_init(void);
extern void kmmio_cleanup(void);

#ifdef CONFIG_MMIOTRACE
/* kmmio is active by some kmmio_probes? */
static inline int is_kmmio_active(void)
{
	return kmmio_count;
}

/* Called from page fault handler. */
extern int kmmio_handler(struct pt_regs *regs, unsigned long addr);

/* Called from ioremap.c */
extern void mmiotrace_ioremap(resource_size_t offset, unsigned long size,
							void __iomem *addr);
extern void mmiotrace_iounmap(volatile void __iomem *addr);

/* For anyone to insert markers. Remember trailing newline. */
extern __printf(1, 2) int mmiotrace_printk(const char *fmt, ...);
#else /* !CONFIG_MMIOTRACE: */
static inline int is_kmmio_active(void)
{
	return 0;
}

static inline int kmmio_handler(struct pt_regs *regs, unsigned long addr)
{
	return 0;
}

static inline void mmiotrace_ioremap(resource_size_t offset,
					unsigned long size, void __iomem *addr)
{
}

static inline void mmiotrace_iounmap(volatile void __iomem *addr)
{
}

static inline __printf(1, 2) int mmiotrace_printk(const char *fmt, ...)
{
	return 0;
}
#endif /* CONFIG_MMIOTRACE */

enum mm_io_opcode {
	MMIO_READ	= 0x1,	/* struct mmiotrace_rw */
	MMIO_WRITE	= 0x2,	/* struct mmiotrace_rw */
	MMIO_PROBE	= 0x3,	/* struct mmiotrace_map */
	MMIO_UNPROBE	= 0x4,	/* struct mmiotrace_map */
	MMIO_U