Lines Matching defs:xics
19 #include <asm/xics.h>
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)
78 ics = kvmppc_xics_find_ics(xics, irq, &src);
116 icp_deliver_irq(xics, NULL, irq, false);
125 static void ics_check_resend(struct kvmppc_xics *xics, struct kvmppc_ics *ics,
135 icp_deliver_irq(xics, icp, state->number, true);
140 static bool write_xive(struct kvmppc_xics *xics, struct kvmppc_ics *ics,
168 struct kvmppc_xics *xics = kvm->arch.xics;
174 if (!xics)
177 ics = kvmppc_xics_find_ics(xics, irq, &src);
190 if (write_xive(xics, ics, state, server, priority, priority))
191 icp_deliver_irq(xics, icp, irq, false);
198 struct kvmppc_xics *xics = kvm->arch.xics;
204 if (!xics)
207 ics = kvmppc_xics_find_ics(xics, irq, &src);
224 struct kvmppc_xics *xics = kvm->arch.xics;
230 if (!xics)
233 ics = kvmppc_xics_find_ics(xics, irq, &src);
242 if (write_xive(xics, ics, state, state->server, state->saved_priority,
244 icp_deliver_irq(xics, icp, irq, false);
251 struct kvmppc_xics *xics = kvm->arch.xics;
256 if (!xics)
259 ics = kvmppc_xics_find_ics(xics, irq, &src);
264 write_xive(xics, ics, state, state->server, MASKED, state->priority);
318 static void icp_check_resend(struct kvmppc_xics *xics,
325 for_each_set_bit(icsid, icp->resend_map, xics->max_icsid + 1) {
326 struct kvmppc_ics *ics = xics->ics[icsid];
332 ics_check_resend(xics, ics, icp);
377 static void icp_deliver_irq(struct kvmppc_xics *xics, struct kvmppc_icp *icp,
403 ics = kvmppc_xics_find_ics(xics, new_irq, &src);
416 icp = kvmppc_xics_find_server(xics->kvm, state->server);
513 static void icp_down_cppr(struct kvmppc_xics *xics, struct kvmppc_icp *icp,
583 icp_check_resend(xics, icp);
623 struct kvmppc_xics *xics = vcpu->kvm->arch.xics;
695 icp_deliver_irq(xics, icp, reject, false);
699 icp_check_resend(xics, icp);
724 struct kvmppc_xics *xics = vcpu->kvm->arch.xics;
738 icp_down_cppr(xics, icp, cppr);
774 icp_deliver_irq(xics, icp, reject, false);
779 struct kvmppc_xics *xics = vcpu->kvm->arch.xics;
794 ics = kvmppc_xics_find_ics(xics, irq, &src);
810 icp_deliver_irq(xics, icp, irq, false);
819 struct kvmppc_xics *xics = vcpu->kvm->arch.xics;
839 icp_down_cppr(xics, icp, xirr >> 24);
850 struct kvmppc_xics *xics = vcpu->kvm->arch.xics;
862 icp_check_resend(xics, icp->rm_resend_icp);
877 struct kvmppc_xics *xics = vcpu->kvm->arch.xics;
882 if (!xics || !vcpu->arch.icp)
898 if (xics->real_mode && is_kvmppc_hv_enabled(vcpu->kvm))
942 struct kvmppc_xics *xics = m->private;
943 struct kvm *kvm = xics->kvm;
989 struct kvmppc_ics *ics = xics->ics[icsid];
1017 static void xics_debugfs_init(struct kvmppc_xics *xics)
1019 xics->dentry = debugfs_create_file("xics", 0444, xics->kvm->debugfs_dentry,
1020 xics, &xics_debug_fops);
1026 struct kvmppc_xics *xics, int irq)
1036 if (xics->ics[icsid])
1052 xics->ics[icsid] = ics;
1054 if (icsid > xics->max_icsid)
1055 xics->max_icsid = icsid;
1059 return xics->ics[icsid];
1066 if (!vcpu->kvm->arch.xics)
1104 struct kvmppc_xics *xics = vcpu->kvm->arch.xics;
1112 if (!icp || !xics)
1131 ics = kvmppc_xics_find_ics(xics, xisr, &src);
1171 icp_check_resend(xics, icp);
1176 static int xics_get_source(struct kvmppc_xics *xics, long irq, u64 addr)
1186 ics = kvmppc_xics_find_ics(xics, irq, &idx);
1226 static int xics_set_source(struct kvmppc_xics *xics, long irq, u64 addr)
1240 ics = kvmppc_xics_find_ics(xics, irq, &idx);
1242 ics = kvmppc_xics_create_ics(xics->kvm, xics, irq);
1253 kvmppc_xics_find_server(xics->kvm, server) == NULL)
1279 icp_deliver_irq(xics, NULL, irqp->number, false);
1287 struct kvmppc_xics *xics = kvm->arch.xics;
1289 if (!xics)
1291 return ics_deliver_irq(xics, irq, level);
1296 struct kvmppc_xics *xics = dev->private;
1300 return xics_set_source(xics, attr->attr, attr->addr);
1307 struct kvmppc_xics *xics = dev->private;
1311 return xics_get_source(xics, attr->attr, attr->addr);
1333 struct kvmppc_xics *xics = dev->private;
1335 struct kvm *kvm = xics->kvm;
1338 pr_devel("Releasing xics device\n");
1349 debugfs_remove(xics->dentry);
1370 kvm->arch.xics = NULL;
1372 for (i = 0; i <= xics->max_icsid; i++) {
1373 kfree(xics->ics[i]);
1374 xics->ics[i] = NULL;
1388 struct kvmppc_xics *xics = *kvm_xics_device;
1390 if (!xics) {
1391 xics = kzalloc(sizeof(*xics), GFP_KERNEL);
1392 *kvm_xics_device = xics;
1394 memset(xics, 0, sizeof(*xics));
1397 return xics;
1402 struct kvmppc_xics *xics;
1405 pr_devel("Creating xics for partition\n");
1408 if (kvm->arch.xics)
1411 xics = kvmppc_xics_get_device(kvm);
1412 if (!xics)
1415 dev->private = xics;
1416 xics->dev = dev;
1417 xics->kvm = kvm;
1418 kvm->arch.xics = xics;
1424 xics->real_mode = ENABLE_REALMODE;
1425 xics->real_mode_dbg = DEBUG_REALMODE;
1434 struct kvmppc_xics *xics = dev->private;
1436 xics_debugfs_init(xics);
1440 .name = "kvm-xics",
1452 struct kvmppc_xics *xics = dev->private;
1457 if (xics->kvm != vcpu->kvm)
1481 struct kvmppc_xics *xics = kvm->arch.xics;
1485 ics = kvmppc_xics_find_ics(xics, irq, &idx);
1497 struct kvmppc_xics *xics = kvm->arch.xics;
1501 ics = kvmppc_xics_find_ics(xics, irq, &idx);