Lines Matching defs:xics
18 #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)
1021 name = kasprintf(GFP_KERNEL, "kvm-xics-%p", xics);
1027 xics->dentry = debugfs_create_file(name, 0444, powerpc_debugfs_root,
1028 xics, &xics_debug_fops);
1035 struct kvmppc_xics *xics, int irq)
1045 if (xics->ics[icsid])
1061 xics->ics[icsid] = ics;
1063 if (icsid > xics->max_icsid)
1064 xics->max_icsid = icsid;
1068 return xics->ics[icsid];
1075 if (!vcpu->kvm->arch.xics)
1113 struct kvmppc_xics *xics = vcpu->kvm->arch.xics;
1121 if (!icp || !xics)
1140 ics = kvmppc_xics_find_ics(xics, xisr, &src);
1180 icp_check_resend(xics, icp);
1185 static int xics_get_source(struct kvmppc_xics *xics, long irq, u64 addr)
1195 ics = kvmppc_xics_find_ics(xics, irq, &idx);
1235 static int xics_set_source(struct kvmppc_xics *xics, long irq, u64 addr)
1249 ics = kvmppc_xics_find_ics(xics, irq, &idx);
1251 ics = kvmppc_xics_create_ics(xics->kvm, xics, irq);
1262 kvmppc_xics_find_server(xics->kvm, server) == NULL)
1288 icp_deliver_irq(xics, NULL, irqp->number, false);
1296 struct kvmppc_xics *xics = kvm->arch.xics;
1298 if (!xics)
1300 return ics_deliver_irq(xics, irq, level);
1305 struct kvmppc_xics *xics = dev->private;
1309 return xics_set_source(xics, attr->attr, attr->addr);
1316 struct kvmppc_xics *xics = dev->private;
1320 return xics_get_source(xics, attr->attr, attr->addr);
1342 struct kvmppc_xics *xics = dev->private;
1344 struct kvm *kvm = xics->kvm;
1347 pr_devel("Releasing xics device\n");
1358 debugfs_remove(xics->dentry);
1379 kvm->arch.xics = NULL;
1381 for (i = 0; i <= xics->max_icsid; i++) {
1382 kfree(xics->ics[i]);
1383 xics->ics[i] = NULL;
1397 struct kvmppc_xics *xics = *kvm_xics_device;
1399 if (!xics) {
1400 xics = kzalloc(sizeof(*xics), GFP_KERNEL);
1401 *kvm_xics_device = xics;
1403 memset(xics, 0, sizeof(*xics));
1406 return xics;
1411 struct kvmppc_xics *xics;
1414 pr_devel("Creating xics for partition\n");
1417 if (kvm->arch.xics)
1420 xics = kvmppc_xics_get_device(kvm);
1421 if (!xics)
1424 dev->private = xics;
1425 xics->dev = dev;
1426 xics->kvm = kvm;
1427 kvm->arch.xics = xics;
1433 xics->real_mode = ENABLE_REALMODE;
1434 xics->real_mode_dbg = DEBUG_REALMODE;
1443 struct kvmppc_xics *xics = (struct kvmppc_xics *)dev->private;
1445 xics_debugfs_init(xics);
1449 .name = "kvm-xics",
1461 struct kvmppc_xics *xics = dev->private;
1466 if (xics->kvm != vcpu->kvm)
1490 struct kvmppc_xics *xics = kvm->arch.xics;
1494 ics = kvmppc_xics_find_ics(xics, irq, &idx);
1506 struct kvmppc_xics *xics = kvm->arch.xics;
1510 ics = kvmppc_xics_find_ics(xics, irq, &idx);