linux/include/linux/irq_sim.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * Copyright (C) 2017-2018 Bartosz Golaszewski <brgl@bgdev.pl>
   4 */
   5
   6#ifndef _LINUX_IRQ_SIM_H
   7#define _LINUX_IRQ_SIM_H
   8
   9#include <linux/irq_work.h>
  10#include <linux/device.h>
  11
  12/*
  13 * Provides a framework for allocating simulated interrupts which can be
  14 * requested like normal irqs and enqueued from process context.
  15 */
  16
  17struct irq_sim_work_ctx {
  18        struct irq_work         work;
  19        unsigned long           *pending;
  20};
  21
  22struct irq_sim_irq_ctx {
  23        int                     irqnum;
  24        bool                    enabled;
  25};
  26
  27struct irq_sim {
  28        struct irq_sim_work_ctx work_ctx;
  29        int                     irq_base;
  30        unsigned int            irq_count;
  31        struct irq_sim_irq_ctx  *irqs;
  32};
  33
  34int irq_sim_init(struct irq_sim *sim, unsigned int num_irqs);
  35int devm_irq_sim_init(struct device *dev, struct irq_sim *sim,
  36                      unsigned int num_irqs);
  37void irq_sim_fini(struct irq_sim *sim);
  38void irq_sim_fire(struct irq_sim *sim, unsigned int offset);
  39int irq_sim_irqnum(struct irq_sim *sim, unsigned int offset);
  40
  41#endif /* _LINUX_IRQ_SIM_H */
  42