1 #ifndef _LINUX_IRQ_SIM_H 2 #define _LINUX_IRQ_SIM_H 3 /* 4 * Copyright (C) 2017 Bartosz Golaszewski <brgl@bgdev.pl> 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the 8 * Free Software Foundation; either version 2 of the License, or (at your 9 * option) any later version. 10 */ 11 12 #include <linux/irq_work.h> 13 #include <linux/device.h> 14 15 /* 16 * Provides a framework for allocating simulated interrupts which can be 17 * requested like normal irqs and enqueued from process context. 18 */ 19 20 struct irq_sim_work_ctx { 21 struct irq_work work; 22 int irq; 23 }; 24 25 struct irq_sim_irq_ctx { 26 int irqnum; 27 bool enabled; 28 }; 29 30 struct irq_sim { 31 struct irq_sim_work_ctx work_ctx; 32 int irq_base; 33 unsigned int irq_count; 34 struct irq_sim_irq_ctx *irqs; 35 }; 36 37 int irq_sim_init(struct irq_sim *sim, unsigned int num_irqs); 38 int devm_irq_sim_init(struct device *dev, struct irq_sim *sim, 39 unsigned int num_irqs); 40 void irq_sim_fini(struct irq_sim *sim); 41 void irq_sim_fire(struct irq_sim *sim, unsigned int offset); 42 int irq_sim_irqnum(struct irq_sim *sim, unsigned int offset); 43 44 #endif /* _LINUX_IRQ_SIM_H */ 45