Lines Matching refs:spapr

34 static void spapr_irq_msi_init(SpaprMachineState *spapr)  in spapr_irq_msi_init()  argument
36 if (SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) { in spapr_irq_msi_init()
41 spapr->irq_map_nr = spapr_irq_nr_msis(spapr); in spapr_irq_msi_init()
42 spapr->irq_map = bitmap_new(spapr->irq_map_nr); in spapr_irq_msi_init()
45 int spapr_irq_msi_alloc(SpaprMachineState *spapr, uint32_t num, bool align, in spapr_irq_msi_alloc() argument
58 irq = bitmap_find_next_zero_area(spapr->irq_map, spapr->irq_map_nr, 0, num, in spapr_irq_msi_alloc()
60 if (irq == spapr->irq_map_nr) { in spapr_irq_msi_alloc()
65 bitmap_set(spapr->irq_map, irq, num); in spapr_irq_msi_alloc()
70 void spapr_irq_msi_free(SpaprMachineState *spapr, int irq, uint32_t num) in spapr_irq_msi_free() argument
72 bitmap_clear(spapr->irq_map, irq - SPAPR_IRQ_MSI, num); in spapr_irq_msi_free()
142 static int spapr_irq_check(SpaprMachineState *spapr, Error **errp) in spapr_irq_check() argument
145 MachineState *machine = MACHINE(spapr); in spapr_irq_check()
152 0, spapr->max_compat_pvr)) { in spapr_irq_check()
157 if (spapr->irq == &spapr_irq_dual) { in spapr_irq_check()
158 spapr->irq = &spapr_irq_xics; in spapr_irq_check()
177 if (!spapr->irq->xics) { in spapr_irq_check()
189 spapr->irq == &spapr_irq_dual && in spapr_irq_check()
210 int spapr_irq_cpu_intc_create(SpaprMachineState *spapr, in spapr_irq_cpu_intc_create() argument
213 SpaprInterruptController *intcs[] = ALL_INTCS(spapr); in spapr_irq_cpu_intc_create()
231 void spapr_irq_cpu_intc_reset(SpaprMachineState *spapr, PowerPCCPU *cpu) in spapr_irq_cpu_intc_reset() argument
233 SpaprInterruptController *intcs[] = ALL_INTCS(spapr); in spapr_irq_cpu_intc_reset()
245 void spapr_irq_cpu_intc_destroy(SpaprMachineState *spapr, PowerPCCPU *cpu) in spapr_irq_cpu_intc_destroy() argument
247 SpaprInterruptController *intcs[] = ALL_INTCS(spapr); in spapr_irq_cpu_intc_destroy()
261 SpaprMachineState *spapr = SPAPR_MACHINE(opaque); in spapr_set_irq() local
263 = SPAPR_INTC_GET_CLASS(spapr->active_intc); in spapr_set_irq()
265 sicc->set_irq(spapr->active_intc, irq, level); in spapr_set_irq()
268 void spapr_irq_print_info(SpaprMachineState *spapr, GString *buf) in spapr_irq_print_info() argument
271 = SPAPR_INTC_GET_CLASS(spapr->active_intc); in spapr_irq_print_info()
273 sicc->print_info(spapr->active_intc, buf); in spapr_irq_print_info()
276 void spapr_irq_dt(SpaprMachineState *spapr, uint32_t nr_servers, in spapr_irq_dt() argument
280 = SPAPR_INTC_GET_CLASS(spapr->active_intc); in spapr_irq_dt()
282 sicc->dt(spapr->active_intc, nr_servers, fdt, phandle); in spapr_irq_dt()
285 uint32_t spapr_irq_nr_msis(SpaprMachineState *spapr) in spapr_irq_nr_msis() argument
287 SpaprMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr); in spapr_irq_nr_msis()
296 void spapr_irq_init(SpaprMachineState *spapr, Error **errp) in spapr_irq_init() argument
298 SpaprMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr); in spapr_irq_init()
305 if (spapr_irq_check(spapr, errp) < 0) { in spapr_irq_init()
310 spapr_irq_msi_init(spapr); in spapr_irq_init()
312 if (spapr->irq->xics) { in spapr_irq_init()
317 object_property_add_child(OBJECT(spapr), "ics", obj); in spapr_irq_init()
318 object_property_set_link(obj, ICS_PROP_XICS, OBJECT(spapr), in spapr_irq_init()
325 spapr->ics = ICS_SPAPR(obj); in spapr_irq_init()
328 if (spapr->irq->xive) { in spapr_irq_init()
329 uint32_t nr_servers = spapr_max_server_number(spapr); in spapr_irq_init()
340 object_property_set_link(OBJECT(dev), "xive-fabric", OBJECT(spapr), in spapr_irq_init()
344 spapr->xive = SPAPR_XIVE(dev); in spapr_irq_init()
349 = SPAPR_INTC_GET_CLASS(spapr->xive); in spapr_irq_init()
351 if (sicc->claim_irq(SPAPR_INTC(spapr->xive), SPAPR_IRQ_IPI + i, in spapr_irq_init()
357 spapr_xive_hcall_init(spapr); in spapr_irq_init()
360 spapr->qirqs = qemu_allocate_irqs(spapr_set_irq, spapr, in spapr_irq_init()
369 spapr_irq_update_active_intc(spapr); in spapr_irq_init()
372 int spapr_irq_claim(SpaprMachineState *spapr, int irq, bool lsi, Error **errp) in spapr_irq_claim() argument
374 SpaprInterruptController *intcs[] = ALL_INTCS(spapr); in spapr_irq_claim()
376 SpaprMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr); in spapr_irq_claim()
396 void spapr_irq_free(SpaprMachineState *spapr, int irq, int num) in spapr_irq_free() argument
398 SpaprInterruptController *intcs[] = ALL_INTCS(spapr); in spapr_irq_free()
400 SpaprMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr); in spapr_irq_free()
418 qemu_irq spapr_qirq(SpaprMachineState *spapr, int irq) in spapr_qirq() argument
420 SpaprMachineClass *smc = SPAPR_MACHINE_GET_CLASS(spapr); in spapr_qirq()
432 if (spapr->ics) { in spapr_qirq()
433 assert(ics_valid_irq(spapr->ics, irq)); in spapr_qirq()
435 if (spapr->xive) { in spapr_qirq()
436 assert(irq < spapr->xive->nr_irqs); in spapr_qirq()
437 assert(xive_eas_is_valid(&spapr->xive->eat[irq])); in spapr_qirq()
440 return spapr->qirqs[irq]; in spapr_qirq()
443 int spapr_irq_post_load(SpaprMachineState *spapr, int version_id) in spapr_irq_post_load() argument
447 spapr_irq_update_active_intc(spapr); in spapr_irq_post_load()
448 sicc = SPAPR_INTC_GET_CLASS(spapr->active_intc); in spapr_irq_post_load()
449 return sicc->post_load(spapr->active_intc, version_id); in spapr_irq_post_load()
452 void spapr_irq_reset(SpaprMachineState *spapr, Error **errp) in spapr_irq_reset() argument
454 assert(!spapr->irq_map || bitmap_empty(spapr->irq_map, spapr->irq_map_nr)); in spapr_irq_reset()
456 spapr_irq_update_active_intc(spapr); in spapr_irq_reset()
459 int spapr_irq_get_phandle(SpaprMachineState *spapr, void *fdt, Error **errp) in spapr_irq_get_phandle() argument
480 static void set_active_intc(SpaprMachineState *spapr, in set_active_intc() argument
484 uint32_t nr_servers = spapr_max_server_number(spapr); in set_active_intc()
488 if (new_intc == spapr->active_intc) { in set_active_intc()
493 if (spapr->active_intc) { in set_active_intc()
494 sicc = SPAPR_INTC_GET_CLASS(spapr->active_intc); in set_active_intc()
496 sicc->deactivate(spapr->active_intc); in set_active_intc()
505 spapr->active_intc = new_intc; in set_active_intc()
514 void spapr_irq_update_active_intc(SpaprMachineState *spapr) in spapr_irq_update_active_intc() argument
518 if (!spapr->ics) { in spapr_irq_update_active_intc()
525 new_intc = SPAPR_INTC(spapr->xive); in spapr_irq_update_active_intc()
526 } else if (spapr->ov5_cas in spapr_irq_update_active_intc()
527 && spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) { in spapr_irq_update_active_intc()
528 new_intc = SPAPR_INTC(spapr->xive); in spapr_irq_update_active_intc()
530 new_intc = SPAPR_INTC(spapr->ics); in spapr_irq_update_active_intc()
533 set_active_intc(spapr, new_intc); in spapr_irq_update_active_intc()
561 int spapr_irq_find(SpaprMachineState *spapr, int num, bool align, Error **errp) in spapr_irq_find() argument
563 ICSState *ics = spapr->ics; in spapr_irq_find()