Lines Matching refs:irq

32 typedef uint32_t maskfn(GICv3State *s, int irq);
34 static uint32_t mask_nsacr_ge1(GICv3State *s, int irq) in mask_nsacr_ge1() argument
37 uint64_t raw_nsacr = s->gicd_nsacr[irq / 16 + 1]; in mask_nsacr_ge1()
39 raw_nsacr = raw_nsacr << 32 | s->gicd_nsacr[irq / 16]; in mask_nsacr_ge1()
44 static uint32_t mask_nsacr_ge2(GICv3State *s, int irq) in mask_nsacr_ge2() argument
47 uint64_t raw_nsacr = s->gicd_nsacr[irq / 16 + 1]; in mask_nsacr_ge2()
49 raw_nsacr = raw_nsacr << 32 | s->gicd_nsacr[irq / 16]; in mask_nsacr_ge2()
60 maskfn *maskfn, int irq) in mask_group_and_nsacr() argument
72 mask = *gic_bmp_ptr32(s->group, irq); in mask_group_and_nsacr()
74 mask |= maskfn(s, irq); in mask_group_and_nsacr()
81 static int gicd_ns_access(GICv3State *s, int irq) in gicd_ns_access() argument
86 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_ns_access()
89 return extract32(s->gicd_nsacr[irq / 16], (irq % 16) * 2, 2); in gicd_ns_access()
105 int irq = offset * 8; in gicd_write_bitmap_reg() local
107 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_write_bitmap_reg()
110 val &= mask_group_and_nsacr(s, attrs, maskfn, irq); in gicd_write_bitmap_reg()
111 *gic_bmp_ptr32(bmp, irq) = val; in gicd_write_bitmap_reg()
112 gicv3_update(s, irq, 32); in gicd_write_bitmap_reg()
129 int irq = offset * 8; in gicd_write_set_bitmap_reg() local
131 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_write_set_bitmap_reg()
134 val &= mask_group_and_nsacr(s, attrs, maskfn, irq); in gicd_write_set_bitmap_reg()
135 *gic_bmp_ptr32(bmp, irq) |= val; in gicd_write_set_bitmap_reg()
136 gicv3_update(s, irq, 32); in gicd_write_set_bitmap_reg()
153 int irq = offset * 8; in gicd_write_clear_bitmap_reg() local
155 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_write_clear_bitmap_reg()
158 val &= mask_group_and_nsacr(s, attrs, maskfn, irq); in gicd_write_clear_bitmap_reg()
159 *gic_bmp_ptr32(bmp, irq) &= ~val; in gicd_write_clear_bitmap_reg()
160 gicv3_update(s, irq, 32); in gicd_write_clear_bitmap_reg()
176 int irq = offset * 8; in gicd_read_bitmap_reg() local
179 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_read_bitmap_reg()
182 val = *gic_bmp_ptr32(bmp, irq); in gicd_read_bitmap_reg()
188 uint32_t edge = *gic_bmp_ptr32(s->edge_trigger, irq); in gicd_read_bitmap_reg()
189 uint32_t level = *gic_bmp_ptr32(s->level, irq); in gicd_read_bitmap_reg()
192 val &= mask_group_and_nsacr(s, attrs, maskfn, irq); in gicd_read_bitmap_reg()
196 static uint8_t gicd_read_ipriorityr(GICv3State *s, MemTxAttrs attrs, int irq) in gicd_read_ipriorityr() argument
204 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_read_ipriorityr()
208 prio = s->gicd_ipriority[irq]; in gicd_read_ipriorityr()
211 if (!gicv3_gicd_group_test(s, irq)) { in gicd_read_ipriorityr()
221 static void gicd_write_ipriorityr(GICv3State *s, MemTxAttrs attrs, int irq, in gicd_write_ipriorityr() argument
228 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_write_ipriorityr()
233 if (!gicv3_gicd_group_test(s, irq)) { in gicd_write_ipriorityr()
240 s->gicd_ipriority[irq] = value; in gicd_write_ipriorityr()
243 static uint64_t gicd_read_irouter(GICv3State *s, MemTxAttrs attrs, int irq) in gicd_read_irouter() argument
248 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_read_irouter()
254 if (!gicv3_gicd_group_test(s, irq)) { in gicd_read_irouter()
255 if (gicd_ns_access(s, irq) != 3) { in gicd_read_irouter()
261 return s->gicd_irouter[irq]; in gicd_read_irouter()
264 static void gicd_write_irouter(GICv3State *s, MemTxAttrs attrs, int irq, in gicd_write_irouter() argument
270 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_write_irouter()
276 if (!gicv3_gicd_group_test(s, irq)) { in gicd_write_irouter()
277 if (gicd_ns_access(s, irq) != 3) { in gicd_write_irouter()
283 s->gicd_irouter[irq] = val; in gicd_write_irouter()
284 gicv3_cache_target_cpustate(s, irq); in gicd_write_irouter()
285 gicv3_update(s, irq, 1); in gicd_write_irouter()
335 int irq = offset - GICD_IPRIORITYR; in gicd_writeb() local
337 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_writeb()
340 gicd_write_ipriorityr(s, attrs, irq, value); in gicd_writeb()
341 gicv3_update(s, irq, 1); in gicd_writeb()
448 int irq; in gicd_readl() local
455 irq = (offset - GICD_IGROUPR) * 8; in gicd_readl()
456 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_readl()
460 *data = *gic_bmp_ptr32(s->group, irq); in gicd_readl()
489 int i, irq = offset - GICD_IPRIORITYR; in gicd_readl() local
492 for (i = irq + 3; i >= irq; i--) { in gicd_readl()
506 int irq = (offset - GICD_ICFGR) * 4; in gicd_readl() local
509 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_readl()
518 value = *gic_bmp_ptr32(s->edge_trigger, irq & ~0x1f); in gicd_readl()
519 value &= mask_group_and_nsacr(s, attrs, NULL, irq & ~0x1f); in gicd_readl()
520 value = extract32(value, (irq & 0x1f) ? 16 : 0, 16); in gicd_readl()
527 int irq; in gicd_readl() local
537 irq = (offset - GICD_IGRPMODR) * 8; in gicd_readl()
538 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_readl()
542 *data = *gic_bmp_ptr32(s->grpmod, irq); in gicd_readl()
548 int irq = (offset - GICD_NSACR) * 4; in gicd_readl() local
550 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_readl()
563 *data = s->gicd_nsacr[irq / 16]; in gicd_readl()
579 int irq = (offset - GICD_IROUTER) / 8; in gicd_readl() local
581 r = gicd_read_irouter(s, attrs, irq); in gicd_readl()
657 int irq; in gicd_writel() local
663 irq = (offset - GICD_IGROUPR) * 8; in gicd_writel()
664 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_writel()
667 *gic_bmp_ptr32(s->group, irq) = value; in gicd_writel()
668 gicv3_update(s, irq, 32); in gicd_writel()
697 int i, irq = offset - GICD_IPRIORITYR; in gicd_writel() local
699 if (irq < GIC_INTERNAL || irq + 3 >= s->num_irq) { in gicd_writel()
703 for (i = irq; i < irq + 4; i++, value >>= 8) { in gicd_writel()
706 gicv3_update(s, irq, 4); in gicd_writel()
715 int irq = (offset - GICD_ICFGR) * 4; in gicd_writel() local
718 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_writel()
727 mask = mask_group_and_nsacr(s, attrs, NULL, irq & ~0x1f); in gicd_writel()
728 if (irq & 0x1f) { in gicd_writel()
734 oldval = *gic_bmp_ptr32(s->edge_trigger, (irq & ~0x1f)); in gicd_writel()
736 *gic_bmp_ptr32(s->edge_trigger, irq & ~0x1f) = value; in gicd_writel()
741 int irq; in gicd_writel() local
750 irq = (offset - GICD_IGRPMODR) * 8; in gicd_writel()
751 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_writel()
754 *gic_bmp_ptr32(s->grpmod, irq) = value; in gicd_writel()
755 gicv3_update(s, irq, 32); in gicd_writel()
761 int irq = (offset - GICD_NSACR) * 4; in gicd_writel() local
763 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_writel()
774 s->gicd_nsacr[irq / 16] = value; in gicd_writel()
794 int irq = (offset - GICD_IROUTER) / 8; in gicd_writel() local
796 if (irq < GIC_INTERNAL || irq >= s->num_irq) { in gicd_writel()
801 r = gicd_read_irouter(s, attrs, irq); in gicd_writel()
803 gicd_write_irouter(s, attrs, irq, r); in gicd_writel()
823 int irq; in gicd_writeq() local
827 irq = (offset - GICD_IROUTER) / 8; in gicd_writeq()
828 gicd_write_irouter(s, attrs, irq, value); in gicd_writeq()
839 int irq; in gicd_readq() local
843 irq = (offset - GICD_IROUTER) / 8; in gicd_readq()
844 *data = gicd_read_irouter(s, attrs, irq); in gicd_readq()
932 void gicv3_dist_set_irq(GICv3State *s, int irq, int level) in gicv3_dist_set_irq() argument
935 if (level == gicv3_gicd_level_test(s, irq)) { in gicv3_dist_set_irq()
939 trace_gicv3_dist_set_irq(irq, level); in gicv3_dist_set_irq()
941 gicv3_gicd_level_replace(s, irq, level); in gicv3_dist_set_irq()
945 if (gicv3_gicd_edge_trigger_test(s, irq)) { in gicv3_dist_set_irq()
946 gicv3_gicd_pending_set(s, irq); in gicv3_dist_set_irq()
950 gicv3_update(s, irq, 1); in gicv3_dist_set_irq()