Lines Matching refs:sim
11 struct irq_sim *sim; member
52 int irq_sim_init(struct irq_sim *sim, unsigned int num_irqs) in irq_sim_init() argument
56 sim->irqs = kmalloc_array(num_irqs, sizeof(*sim->irqs), GFP_KERNEL); in irq_sim_init()
57 if (!sim->irqs) in irq_sim_init()
60 sim->irq_base = irq_alloc_descs(-1, 0, num_irqs, 0); in irq_sim_init()
61 if (sim->irq_base < 0) { in irq_sim_init()
62 kfree(sim->irqs); in irq_sim_init()
63 return sim->irq_base; in irq_sim_init()
67 sim->irqs[i].irqnum = sim->irq_base + i; in irq_sim_init()
68 sim->irqs[i].enabled = false; in irq_sim_init()
69 irq_set_chip(sim->irq_base + i, &irq_sim_irqchip); in irq_sim_init()
70 irq_set_chip_data(sim->irq_base + i, &sim->irqs[i]); in irq_sim_init()
71 irq_set_handler(sim->irq_base + i, &handle_simple_irq); in irq_sim_init()
72 irq_modify_status(sim->irq_base + i, in irq_sim_init()
76 init_irq_work(&sim->work_ctx.work, irq_sim_handle_irq); in irq_sim_init()
77 sim->irq_count = num_irqs; in irq_sim_init()
79 return sim->irq_base; in irq_sim_init()
89 void irq_sim_fini(struct irq_sim *sim) in irq_sim_fini() argument
91 irq_work_sync(&sim->work_ctx.work); in irq_sim_fini()
92 irq_free_descs(sim->irq_base, sim->irq_count); in irq_sim_fini()
93 kfree(sim->irqs); in irq_sim_fini()
101 irq_sim_fini(this->sim); in devm_irq_sim_release()
114 int devm_irq_sim_init(struct device *dev, struct irq_sim *sim, in devm_irq_sim_init() argument
124 rv = irq_sim_init(sim, num_irqs); in devm_irq_sim_init()
130 dr->sim = sim; in devm_irq_sim_init()
143 void irq_sim_fire(struct irq_sim *sim, unsigned int offset) in irq_sim_fire() argument
145 if (sim->irqs[offset].enabled) { in irq_sim_fire()
146 sim->work_ctx.irq = irq_sim_irqnum(sim, offset); in irq_sim_fire()
147 irq_work_queue(&sim->work_ctx.work); in irq_sim_fire()
159 int irq_sim_irqnum(struct irq_sim *sim, unsigned int offset) in irq_sim_irqnum() argument
161 return sim->irqs[offset].irqnum; in irq_sim_irqnum()