Lines Matching refs:xics

61 static void icp_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp,
69 static int ics_deliver_irq(struct kvmppc_xics *xics, u32 irq, u32 level) in ics_deliver_irq() argument
78 ics = kvmppc_xics_find_ics(xics, irq, &src); in ics_deliver_irq()
116 icp_deliver_irq(xics, NULL, irq, false); in ics_deliver_irq()
125 static void ics_check_resend(struct kvmppc_xics *xics, struct kvmppc_ics *ics, in ics_check_resend() argument
135 icp_deliver_irq(xics, icp, state->number, true); in ics_check_resend()
140 static bool write_xive(struct kvmppc_xics *xics, struct kvmppc_ics *ics, in write_xive() argument
168 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_set_xive() local
174 if (!xics) in kvmppc_xics_set_xive()
177 ics = kvmppc_xics_find_ics(xics, irq, &src); in kvmppc_xics_set_xive()
190 if (write_xive(xics, ics, state, server, priority, priority)) in kvmppc_xics_set_xive()
191 icp_deliver_irq(xics, icp, irq, false); in kvmppc_xics_set_xive()
198 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_get_xive() local
204 if (!xics) in kvmppc_xics_get_xive()
207 ics = kvmppc_xics_find_ics(xics, irq, &src); in kvmppc_xics_get_xive()
224 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_int_on() local
230 if (!xics) in kvmppc_xics_int_on()
233 ics = kvmppc_xics_find_ics(xics, irq, &src); in kvmppc_xics_int_on()
242 if (write_xive(xics, ics, state, state->server, state->saved_priority, in kvmppc_xics_int_on()
244 icp_deliver_irq(xics, icp, irq, false); in kvmppc_xics_int_on()
251 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_int_off() local
256 if (!xics) in kvmppc_xics_int_off()
259 ics = kvmppc_xics_find_ics(xics, irq, &src); in kvmppc_xics_int_off()
264 write_xive(xics, ics, state, state->server, MASKED, state->priority); in kvmppc_xics_int_off()
318 static void icp_check_resend(struct kvmppc_xics *xics, in icp_check_resend() argument
325 for_each_set_bit(icsid, icp->resend_map, xics->max_icsid + 1) { in icp_check_resend()
326 struct kvmppc_ics *ics = xics->ics[icsid]; in icp_check_resend()
332 ics_check_resend(xics, ics, icp); in icp_check_resend()
377 static void icp_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp, in icp_deliver_irq() argument
403 ics = kvmppc_xics_find_ics(xics, new_irq, &src); in icp_deliver_irq()
416 icp = kvmppc_xics_find_server(xics->kvm, state->server); in icp_deliver_irq()
513 static void icp_down_cppr(struct kvmppc_xics *xics, struct kvmppc_icp *icp, in icp_down_cppr() argument
583 icp_check_resend(xics, icp); in icp_down_cppr()
623 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_h_ipi() local
695 icp_deliver_irq(xics, icp, reject, false); in kvmppc_h_ipi()
699 icp_check_resend(xics, icp); in kvmppc_h_ipi()
724 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_h_cppr() local
738 icp_down_cppr(xics, icp, cppr); in kvmppc_h_cppr()
774 icp_deliver_irq(xics, icp, reject, false); in kvmppc_h_cppr()
779 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in ics_eoi() local
794 ics = kvmppc_xics_find_ics(xics, irq, &src); in ics_eoi()
810 icp_deliver_irq(xics, icp, irq, false); in ics_eoi()
819 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_h_eoi() local
839 icp_down_cppr(xics, icp, xirr >> 24); in kvmppc_h_eoi()
850 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_xics_rm_complete() local
862 icp_check_resend(xics, icp->rm_resend_icp); in kvmppc_xics_rm_complete()
877 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_xics_hcall() local
882 if (!xics || !vcpu->arch.icp) in kvmppc_xics_hcall()
898 if (xics->real_mode && is_kvmppc_hv_enabled(vcpu->kvm)) in kvmppc_xics_hcall()
942 struct kvmppc_xics *xics = m->private; in xics_debug_show() local
943 struct kvm *kvm = xics->kvm; in xics_debug_show()
989 struct kvmppc_ics *ics = xics->ics[icsid]; in xics_debug_show()
1017 static void xics_debugfs_init(struct kvmppc_xics *xics) in xics_debugfs_init() argument
1019 xics->dentry = debugfs_create_file("xics", 0444, xics->kvm->debugfs_dentry, in xics_debugfs_init()
1020 xics, &xics_debug_fops); in xics_debugfs_init()
1026 struct kvmppc_xics *xics, int irq) in kvmppc_xics_create_ics() argument
1036 if (xics->ics[icsid]) in kvmppc_xics_create_ics()
1052 xics->ics[icsid] = ics; in kvmppc_xics_create_ics()
1054 if (icsid > xics->max_icsid) in kvmppc_xics_create_ics()
1055 xics->max_icsid = icsid; in kvmppc_xics_create_ics()
1059 return xics->ics[icsid]; in kvmppc_xics_create_ics()
1066 if (!vcpu->kvm->arch.xics) in kvmppc_xics_create_icp()
1104 struct kvmppc_xics *xics = vcpu->kvm->arch.xics; in kvmppc_xics_set_icp() local
1112 if (!icp || !xics) in kvmppc_xics_set_icp()
1131 ics = kvmppc_xics_find_ics(xics, xisr, &src); in kvmppc_xics_set_icp()
1171 icp_check_resend(xics, icp); in kvmppc_xics_set_icp()
1176 static int xics_get_source(struct kvmppc_xics *xics, long irq, u64 addr) in xics_get_source() argument
1186 ics = kvmppc_xics_find_ics(xics, irq, &idx); in xics_get_source()
1226 static int xics_set_source(struct kvmppc_xics *xics, long irq, u64 addr) in xics_set_source() argument
1240 ics = kvmppc_xics_find_ics(xics, irq, &idx); in xics_set_source()
1242 ics = kvmppc_xics_create_ics(xics->kvm, xics, irq); in xics_set_source()
1253 kvmppc_xics_find_server(xics->kvm, server) == NULL) in xics_set_source()
1279 icp_deliver_irq(xics, NULL, irqp->number, false); in xics_set_source()
1287 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_set_irq() local
1289 if (!xics) in kvmppc_xics_set_irq()
1291 return ics_deliver_irq(xics, irq, level); in kvmppc_xics_set_irq()
1296 struct kvmppc_xics *xics = dev->private; in xics_set_attr() local
1300 return xics_set_source(xics, attr->attr, attr->addr); in xics_set_attr()
1307 struct kvmppc_xics *xics = dev->private; in xics_get_attr() local
1311 return xics_get_source(xics, attr->attr, attr->addr); in xics_get_attr()
1333 struct kvmppc_xics *xics = dev->private; in kvmppc_xics_release() local
1335 struct kvm *kvm = xics->kvm; in kvmppc_xics_release()
1349 debugfs_remove(xics->dentry); in kvmppc_xics_release()
1370 kvm->arch.xics = NULL; in kvmppc_xics_release()
1372 for (i = 0; i <= xics->max_icsid; i++) { in kvmppc_xics_release()
1373 kfree(xics->ics[i]); in kvmppc_xics_release()
1374 xics->ics[i] = NULL; in kvmppc_xics_release()
1388 struct kvmppc_xics *xics = *kvm_xics_device; in kvmppc_xics_get_device() local
1390 if (!xics) { in kvmppc_xics_get_device()
1391 xics = kzalloc(sizeof(*xics), GFP_KERNEL); in kvmppc_xics_get_device()
1392 *kvm_xics_device = xics; in kvmppc_xics_get_device()
1394 memset(xics, 0, sizeof(*xics)); in kvmppc_xics_get_device()
1397 return xics; in kvmppc_xics_get_device()
1402 struct kvmppc_xics *xics; in kvmppc_xics_create() local
1408 if (kvm->arch.xics) in kvmppc_xics_create()
1411 xics = kvmppc_xics_get_device(kvm); in kvmppc_xics_create()
1412 if (!xics) in kvmppc_xics_create()
1415 dev->private = xics; in kvmppc_xics_create()
1416 xics->dev = dev; in kvmppc_xics_create()
1417 xics->kvm = kvm; in kvmppc_xics_create()
1418 kvm->arch.xics = xics; in kvmppc_xics_create()
1424 xics->real_mode = ENABLE_REALMODE; in kvmppc_xics_create()
1425 xics->real_mode_dbg = DEBUG_REALMODE; in kvmppc_xics_create()
1434 struct kvmppc_xics *xics = dev->private; in kvmppc_xics_init() local
1436 xics_debugfs_init(xics); in kvmppc_xics_init()
1452 struct kvmppc_xics *xics = dev->private; in kvmppc_xics_connect_vcpu() local
1457 if (xics->kvm != vcpu->kvm) in kvmppc_xics_connect_vcpu()
1481 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_set_mapped() local
1485 ics = kvmppc_xics_find_ics(xics, irq, &idx); in kvmppc_xics_set_mapped()
1497 struct kvmppc_xics *xics = kvm->arch.xics; in kvmppc_xics_clr_mapped() local
1501 ics = kvmppc_xics_find_ics(xics, irq, &idx); in kvmppc_xics_clr_mapped()