Lines Matching refs:ics

70 void ics_pic_print_info(ICSState *ics, GString *buf)  in ics_pic_print_info()  argument
75 ics->offset, ics->offset + ics->nr_irqs - 1, ics); in ics_pic_print_info()
77 if (!ics->irqs) { in ics_pic_print_info()
82 ics_synchronize_state(ics); in ics_pic_print_info()
85 for (i = 0; i < ics->nr_irqs; i++) { in ics_pic_print_info()
86 ICSIRQState *irq = ics->irqs + i; in ics_pic_print_info()
92 ics->offset + i, in ics_pic_print_info()
109 static void ics_reject(ICSState *ics, uint32_t nr);
110 static void ics_eoi(ICSState *ics, uint32_t nr);
202 ICSState *ics; in icp_eoi() local
210 ics = xic->ics_get(xi, irq); in icp_eoi()
211 if (ics) { in icp_eoi()
212 ics_eoi(ics, irq); in icp_eoi()
219 void icp_irq(ICSState *ics, int server, int nr, uint8_t priority) in icp_irq() argument
221 ICPState *icp = xics_icp_get(ics->xics, server); in icp_irq()
227 ics_reject(ics, nr); in icp_irq()
234 icp->xirr_owner = ics; in icp_irq()
402 static void ics_resend_msi(ICSState *ics, int srcno) in ics_resend_msi() argument
404 ICSIRQState *irq = ics->irqs + srcno; in ics_resend_msi()
410 icp_irq(ics, irq->server, srcno + ics->offset, irq->priority); in ics_resend_msi()
415 static void ics_resend_lsi(ICSState *ics, int srcno) in ics_resend_lsi() argument
417 ICSIRQState *irq = ics->irqs + srcno; in ics_resend_lsi()
423 icp_irq(ics, irq->server, srcno + ics->offset, irq->priority); in ics_resend_lsi()
427 static void ics_set_irq_msi(ICSState *ics, int srcno, int val) in ics_set_irq_msi() argument
429 ICSIRQState *irq = ics->irqs + srcno; in ics_set_irq_msi()
431 trace_xics_ics_set_irq_msi(srcno, srcno + ics->offset); in ics_set_irq_msi()
438 icp_irq(ics, irq->server, srcno + ics->offset, irq->priority); in ics_set_irq_msi()
443 static void ics_set_irq_lsi(ICSState *ics, int srcno, int val) in ics_set_irq_lsi() argument
445 ICSIRQState *irq = ics->irqs + srcno; in ics_set_irq_lsi()
447 trace_xics_ics_set_irq_lsi(srcno, srcno + ics->offset); in ics_set_irq_lsi()
453 ics_resend_lsi(ics, srcno); in ics_set_irq_lsi()
458 ICSState *ics = (ICSState *)opaque; in ics_set_irq() local
461 ics_kvm_set_irq(ics, srcno, val); in ics_set_irq()
465 if (ics->irqs[srcno].flags & XICS_FLAGS_IRQ_LSI) { in ics_set_irq()
466 ics_set_irq_lsi(ics, srcno, val); in ics_set_irq()
468 ics_set_irq_msi(ics, srcno, val); in ics_set_irq()
472 static void ics_write_xive_msi(ICSState *ics, int srcno) in ics_write_xive_msi() argument
474 ICSIRQState *irq = ics->irqs + srcno; in ics_write_xive_msi()
482 icp_irq(ics, irq->server, srcno + ics->offset, irq->priority); in ics_write_xive_msi()
485 static void ics_write_xive_lsi(ICSState *ics, int srcno) in ics_write_xive_lsi() argument
487 ics_resend_lsi(ics, srcno); in ics_write_xive_lsi()
490 void ics_write_xive(ICSState *ics, int srcno, int server, in ics_write_xive() argument
493 ICSIRQState *irq = ics->irqs + srcno; in ics_write_xive()
499 trace_xics_ics_write_xive(ics->offset + srcno, srcno, server, priority); in ics_write_xive()
501 if (ics->irqs[srcno].flags & XICS_FLAGS_IRQ_LSI) { in ics_write_xive()
502 ics_write_xive_lsi(ics, srcno); in ics_write_xive()
504 ics_write_xive_msi(ics, srcno); in ics_write_xive()
508 static void ics_reject(ICSState *ics, uint32_t nr) in ics_reject() argument
510 ICSStateClass *isc = ICS_GET_CLASS(ics); in ics_reject()
511 ICSIRQState *irq = ics->irqs + nr - ics->offset; in ics_reject()
514 isc->reject(ics, nr); in ics_reject()
518 trace_xics_ics_reject(nr, nr - ics->offset); in ics_reject()
526 void ics_resend(ICSState *ics) in ics_resend() argument
528 ICSStateClass *isc = ICS_GET_CLASS(ics); in ics_resend()
532 isc->resend(ics); in ics_resend()
536 for (i = 0; i < ics->nr_irqs; i++) { in ics_resend()
538 if (ics->irqs[i].flags & XICS_FLAGS_IRQ_LSI) { in ics_resend()
539 ics_resend_lsi(ics, i); in ics_resend()
541 ics_resend_msi(ics, i); in ics_resend()
546 static void ics_eoi(ICSState *ics, uint32_t nr) in ics_eoi() argument
548 int srcno = nr - ics->offset; in ics_eoi()
549 ICSIRQState *irq = ics->irqs + srcno; in ics_eoi()
553 if (ics->irqs[srcno].flags & XICS_FLAGS_IRQ_LSI) { in ics_eoi()
566 ICSState *ics = ICS(obj); in ics_reset_hold() local
567 g_autofree uint8_t *flags = g_malloc(ics->nr_irqs); in ics_reset_hold()
570 for (i = 0; i < ics->nr_irqs; i++) { in ics_reset_hold()
571 flags[i] = ics->irqs[i].flags; in ics_reset_hold()
574 memset(ics->irqs, 0, sizeof(ICSIRQState) * ics->nr_irqs); in ics_reset_hold()
576 for (i = 0; i < ics->nr_irqs; i++) { in ics_reset_hold()
577 ics_reset_irq(ics->irqs + i); in ics_reset_hold()
578 ics->irqs[i].flags = flags[i]; in ics_reset_hold()
584 ics_set_kvm_state(ics, &local_err); in ics_reset_hold()
598 ICSState *ics = ICS(dev); in ics_realize() local
600 assert(ics->xics); in ics_realize()
602 if (!ics->nr_irqs) { in ics_realize()
606 ics->irqs = g_new0(ICSIRQState, ics->nr_irqs); in ics_realize()
608 qemu_register_reset(ics_reset_handler, ics); in ics_realize()
613 ICSState *ics = ICS(obj); in ics_instance_init() local
615 ics->offset = XICS_IRQ_BASE; in ics_instance_init()
620 ICSState *ics = opaque; in ics_pre_save() local
623 ics_get_kvm_state(ics); in ics_pre_save()
631 ICSState *ics = opaque; in ics_post_load() local
637 ret = ics_set_kvm_state(ics, &local_err); in ics_post_load()
725 void ics_set_irq_type(ICSState *ics, int srcno, bool lsi) in ics_set_irq_type() argument
727 assert(!(ics->irqs[srcno].flags & XICS_FLAGS_IRQ_MASK)); in ics_set_irq_type()
729 ics->irqs[srcno].flags |= in ics_set_irq_type()
735 ics_reset_irq(ics->irqs + srcno); in ics_set_irq_type()
736 ics_set_kvm_state_one(ics, srcno, &local_err); in ics_set_irq_type()