Lines Matching refs:gc
37 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_mask_disable_reg() local
41 irq_gc_lock(gc); in irq_gc_mask_disable_reg()
42 irq_reg_writel(gc, mask, ct->regs.disable); in irq_gc_mask_disable_reg()
44 irq_gc_unlock(gc); in irq_gc_mask_disable_reg()
56 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_mask_set_bit() local
60 irq_gc_lock(gc); in irq_gc_mask_set_bit()
62 irq_reg_writel(gc, *ct->mask_cache, ct->regs.mask); in irq_gc_mask_set_bit()
63 irq_gc_unlock(gc); in irq_gc_mask_set_bit()
76 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_mask_clr_bit() local
80 irq_gc_lock(gc); in irq_gc_mask_clr_bit()
82 irq_reg_writel(gc, *ct->mask_cache, ct->regs.mask); in irq_gc_mask_clr_bit()
83 irq_gc_unlock(gc); in irq_gc_mask_clr_bit()
96 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_unmask_enable_reg() local
100 irq_gc_lock(gc); in irq_gc_unmask_enable_reg()
101 irq_reg_writel(gc, mask, ct->regs.enable); in irq_gc_unmask_enable_reg()
103 irq_gc_unlock(gc); in irq_gc_unmask_enable_reg()
112 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_ack_set_bit() local
116 irq_gc_lock(gc); in irq_gc_ack_set_bit()
117 irq_reg_writel(gc, mask, ct->regs.ack); in irq_gc_ack_set_bit()
118 irq_gc_unlock(gc); in irq_gc_ack_set_bit()
128 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_ack_clr_bit() local
132 irq_gc_lock(gc); in irq_gc_ack_clr_bit()
133 irq_reg_writel(gc, mask, ct->regs.ack); in irq_gc_ack_clr_bit()
134 irq_gc_unlock(gc); in irq_gc_ack_clr_bit()
143 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_mask_disable_reg_and_ack() local
147 irq_gc_lock(gc); in irq_gc_mask_disable_reg_and_ack()
148 irq_reg_writel(gc, mask, ct->regs.mask); in irq_gc_mask_disable_reg_and_ack()
149 irq_reg_writel(gc, mask, ct->regs.ack); in irq_gc_mask_disable_reg_and_ack()
150 irq_gc_unlock(gc); in irq_gc_mask_disable_reg_and_ack()
159 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_eoi() local
163 irq_gc_lock(gc); in irq_gc_eoi()
164 irq_reg_writel(gc, mask, ct->regs.eoi); in irq_gc_eoi()
165 irq_gc_unlock(gc); in irq_gc_eoi()
179 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_set_wake() local
182 if (!(mask & gc->wake_enabled)) in irq_gc_set_wake()
185 irq_gc_lock(gc); in irq_gc_set_wake()
187 gc->wake_active |= mask; in irq_gc_set_wake()
189 gc->wake_active &= ~mask; in irq_gc_set_wake()
190 irq_gc_unlock(gc); in irq_gc_set_wake()
205 irq_init_generic_chip(struct irq_chip_generic *gc, const char *name, in irq_init_generic_chip() argument
209 raw_spin_lock_init(&gc->lock); in irq_init_generic_chip()
210 gc->num_ct = num_ct; in irq_init_generic_chip()
211 gc->irq_base = irq_base; in irq_init_generic_chip()
212 gc->reg_base = reg_base; in irq_init_generic_chip()
213 gc->chip_types->chip.name = name; in irq_init_generic_chip()
214 gc->chip_types->handler = handler; in irq_init_generic_chip()
232 struct irq_chip_generic *gc; in irq_alloc_generic_chip() local
233 unsigned long sz = sizeof(*gc) + num_ct * sizeof(struct irq_chip_type); in irq_alloc_generic_chip()
235 gc = kzalloc(sz, GFP_KERNEL); in irq_alloc_generic_chip()
236 if (gc) { in irq_alloc_generic_chip()
237 irq_init_generic_chip(gc, name, num_ct, irq_base, reg_base, in irq_alloc_generic_chip()
240 return gc; in irq_alloc_generic_chip()
245 irq_gc_init_mask_cache(struct irq_chip_generic *gc, enum irq_gc_flags flags) in irq_gc_init_mask_cache() argument
247 struct irq_chip_type *ct = gc->chip_types; in irq_gc_init_mask_cache()
248 u32 *mskptr = &gc->mask_cache, mskreg = ct->regs.mask; in irq_gc_init_mask_cache()
251 for (i = 0; i < gc->num_ct; i++) { in irq_gc_init_mask_cache()
258 *mskptr = irq_reg_readl(gc, mskreg); in irq_gc_init_mask_cache()
280 struct irq_chip_generic *gc; in irq_alloc_domain_generic_chips() local
285 if (d->gc) in irq_alloc_domain_generic_chips()
293 sz = sizeof(*dgc) + numchips * sizeof(gc); in irq_alloc_domain_generic_chips()
294 sz += numchips * (sizeof(*gc) + num_ct * sizeof(struct irq_chip_type)); in irq_alloc_domain_generic_chips()
304 d->gc = dgc; in irq_alloc_domain_generic_chips()
307 tmp += sizeof(*dgc) + numchips * sizeof(gc); in irq_alloc_domain_generic_chips()
310 dgc->gc[i] = gc = tmp; in irq_alloc_domain_generic_chips()
311 irq_init_generic_chip(gc, name, num_ct, i * irqs_per_chip, in irq_alloc_domain_generic_chips()
314 gc->domain = d; in irq_alloc_domain_generic_chips()
316 gc->reg_readl = &irq_readl_be; in irq_alloc_domain_generic_chips()
317 gc->reg_writel = &irq_writel_be; in irq_alloc_domain_generic_chips()
321 list_add_tail(&gc->list, &gc_list); in irq_alloc_domain_generic_chips()
324 tmp += sizeof(*gc) + num_ct * sizeof(struct irq_chip_type); in irq_alloc_domain_generic_chips()
339 struct irq_domain_chip_generic *dgc = d->gc; in irq_get_domain_generic_chip()
347 return dgc->gc[idx]; in irq_get_domain_generic_chip()
364 struct irq_domain_chip_generic *dgc = d->gc; in irq_map_generic_chip()
365 struct irq_chip_generic *gc; in irq_map_generic_chip() local
371 if (!d->gc) in irq_map_generic_chip()
377 gc = dgc->gc[idx]; in irq_map_generic_chip()
381 if (test_bit(idx, &gc->unused)) in irq_map_generic_chip()
384 if (test_bit(idx, &gc->installed)) in irq_map_generic_chip()
387 ct = gc->chip_types; in irq_map_generic_chip()
391 if (!gc->installed) { in irq_map_generic_chip()
392 raw_spin_lock_irqsave(&gc->lock, flags); in irq_map_generic_chip()
393 irq_gc_init_mask_cache(gc, dgc->gc_flags); in irq_map_generic_chip()
394 raw_spin_unlock_irqrestore(&gc->lock, flags); in irq_map_generic_chip()
398 set_bit(idx, &gc->installed); in irq_map_generic_chip()
408 irq_domain_set_info(d, virq, hw_irq, chip, gc, ct->handler, NULL, NULL); in irq_map_generic_chip()
432 void irq_setup_generic_chip(struct irq_chip_generic *gc, u32 msk, in irq_setup_generic_chip() argument
436 struct irq_chip_type *ct = gc->chip_types; in irq_setup_generic_chip()
441 list_add_tail(&gc->list, &gc_list); in irq_setup_generic_chip()
444 irq_gc_init_mask_cache(gc, flags); in irq_setup_generic_chip()
446 for (i = gc->irq_base; msk; msk >>= 1, i++) { in irq_setup_generic_chip()
459 d->mask = 1 << (i - gc->irq_base); in irq_setup_generic_chip()
462 irq_set_chip_data(i, gc); in irq_setup_generic_chip()
465 gc->irq_cnt = i - gc->irq_base; in irq_setup_generic_chip()
478 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_setup_alt_chip() local
479 struct irq_chip_type *ct = gc->chip_types; in irq_setup_alt_chip()
482 for (i = 0; i < gc->num_ct; i++, ct++) { in irq_setup_alt_chip()
502 void irq_remove_generic_chip(struct irq_chip_generic *gc, u32 msk, in irq_remove_generic_chip() argument
505 unsigned int i = gc->irq_base; in irq_remove_generic_chip()
508 list_del(&gc->list); in irq_remove_generic_chip()
524 static struct irq_data *irq_gc_get_irq_data(struct irq_chip_generic *gc) in irq_gc_get_irq_data() argument
528 if (!gc->domain) in irq_gc_get_irq_data()
529 return irq_get_irq_data(gc->irq_base); in irq_gc_get_irq_data()
535 if (!gc->installed) in irq_gc_get_irq_data()
538 virq = irq_find_mapping(gc->domain, gc->irq_base + __ffs(gc->installed)); in irq_gc_get_irq_data()
545 struct irq_chip_generic *gc; in irq_gc_suspend() local
547 list_for_each_entry(gc, &gc_list, list) { in irq_gc_suspend()
548 struct irq_chip_type *ct = gc->chip_types; in irq_gc_suspend()
551 struct irq_data *data = irq_gc_get_irq_data(gc); in irq_gc_suspend()
557 if (gc->suspend) in irq_gc_suspend()
558 gc->suspend(gc); in irq_gc_suspend()
565 struct irq_chip_generic *gc; in irq_gc_resume() local
567 list_for_each_entry(gc, &gc_list, list) { in irq_gc_resume()
568 struct irq_chip_type *ct = gc->chip_types; in irq_gc_resume()
570 if (gc->resume) in irq_gc_resume()
571 gc->resume(gc); in irq_gc_resume()
574 struct irq_data *data = irq_gc_get_irq_data(gc); in irq_gc_resume()
588 struct irq_chip_generic *gc; in irq_gc_shutdown() local
590 list_for_each_entry(gc, &gc_list, list) { in irq_gc_shutdown()
591 struct irq_chip_type *ct = gc->chip_types; in irq_gc_shutdown()
594 struct irq_data *data = irq_gc_get_irq_data(gc); in irq_gc_shutdown()