Lines Matching refs:work_ctx
25 struct irq_sim_work_ctx *work_ctx; member
62 *state = test_bit(hwirq, irq_ctx->work_ctx->pending); in irq_sim_get_irqchip_state()
80 assign_bit(hwirq, irq_ctx->work_ctx->pending, state); in irq_sim_set_irqchip_state()
82 irq_work_queue(&irq_ctx->work_ctx->work); in irq_sim_set_irqchip_state()
95 struct irq_sim_work_ctx *work_ctx = irq_ctx->work_ctx; in irq_sim_request_resources() local
98 if (work_ctx->ops.irq_sim_irq_requested) in irq_sim_request_resources()
99 return work_ctx->ops.irq_sim_irq_requested(work_ctx->domain, in irq_sim_request_resources()
101 work_ctx->user_data); in irq_sim_request_resources()
109 struct irq_sim_work_ctx *work_ctx = irq_ctx->work_ctx; in irq_sim_release_resources() local
112 if (work_ctx->ops.irq_sim_irq_released) in irq_sim_release_resources()
113 work_ctx->ops.irq_sim_irq_released(work_ctx->domain, hwirq, in irq_sim_release_resources()
114 work_ctx->user_data); in irq_sim_release_resources()
130 struct irq_sim_work_ctx *work_ctx; in irq_sim_handle_irq() local
134 work_ctx = container_of(work, struct irq_sim_work_ctx, work); in irq_sim_handle_irq()
136 while (!bitmap_empty(work_ctx->pending, work_ctx->irq_count)) { in irq_sim_handle_irq()
137 offset = find_next_bit(work_ctx->pending, in irq_sim_handle_irq()
138 work_ctx->irq_count, offset); in irq_sim_handle_irq()
139 clear_bit(offset, work_ctx->pending); in irq_sim_handle_irq()
140 irqnum = irq_find_mapping(work_ctx->domain, offset); in irq_sim_handle_irq()
148 struct irq_sim_work_ctx *work_ctx = domain->host_data; in irq_sim_domain_map() local
159 irq_ctx->work_ctx = work_ctx; in irq_sim_domain_map()
204 struct irq_sim_work_ctx *work_ctx __free(kfree) = in irq_domain_create_sim_full()
205 kmalloc(sizeof(*work_ctx), GFP_KERNEL); in irq_domain_create_sim_full()
207 if (!work_ctx) in irq_domain_create_sim_full()
214 work_ctx->domain = irq_domain_create_linear(fwnode, num_irqs, in irq_domain_create_sim_full()
216 work_ctx); in irq_domain_create_sim_full()
217 if (!work_ctx->domain) in irq_domain_create_sim_full()
220 work_ctx->irq_count = num_irqs; in irq_domain_create_sim_full()
221 work_ctx->work = IRQ_WORK_INIT_HARD(irq_sim_handle_irq); in irq_domain_create_sim_full()
222 work_ctx->pending = no_free_ptr(pending); in irq_domain_create_sim_full()
223 work_ctx->user_data = data; in irq_domain_create_sim_full()
226 memcpy(&work_ctx->ops, ops, sizeof(*ops)); in irq_domain_create_sim_full()
228 return no_free_ptr(work_ctx)->domain; in irq_domain_create_sim_full()
240 struct irq_sim_work_ctx *work_ctx = domain->host_data; in irq_domain_remove_sim() local
242 irq_work_sync(&work_ctx->work); in irq_domain_remove_sim()
243 bitmap_free(work_ctx->pending); in irq_domain_remove_sim()
244 kfree(work_ctx); in irq_domain_remove_sim()