Lines Matching refs:spapr
373 void spapr_dt_events(SpaprMachineState *spapr, void *fdt) in spapr_dt_events() argument
377 SpaprEventSource *events = spapr->event_sources; in spapr_dt_events()
411 rtas_event_log_to_source(SpaprMachineState *spapr, int log_type) in rtas_event_log_to_source() argument
415 g_assert(spapr->event_sources); in rtas_event_log_to_source()
419 source = spapr_event_sources_get_source(spapr->event_sources, in rtas_event_log_to_source()
421 if (spapr_ovec_test(spapr->ov5_cas, OV5_HP_EVT)) { in rtas_event_log_to_source()
427 source = spapr_event_sources_get_source(spapr->event_sources, in rtas_event_log_to_source()
437 static int rtas_event_log_to_irq(SpaprMachineState *spapr, int log_type) in rtas_event_log_to_irq() argument
441 source = rtas_event_log_to_source(spapr, log_type); in rtas_event_log_to_irq()
453 static void rtas_event_log_queue(SpaprMachineState *spapr, in rtas_event_log_queue() argument
456 QTAILQ_INSERT_TAIL(&spapr->pending_events, entry, next); in rtas_event_log_queue()
459 static SpaprEventLogEntry *rtas_event_log_dequeue(SpaprMachineState *spapr, in rtas_event_log_dequeue() argument
464 QTAILQ_FOREACH(entry, &spapr->pending_events, next) { in rtas_event_log_dequeue()
466 rtas_event_log_to_source(spapr, in rtas_event_log_dequeue()
476 QTAILQ_REMOVE(&spapr->pending_events, entry, next); in rtas_event_log_dequeue()
482 static bool rtas_event_log_contains(SpaprMachineState *spapr, uint32_t event_mask) in rtas_event_log_contains() argument
486 QTAILQ_FOREACH(entry, &spapr->pending_events, next) { in rtas_event_log_contains()
488 rtas_event_log_to_source(spapr, in rtas_event_log_contains()
510 static void spapr_init_maina(SpaprMachineState *spapr, in spapr_init_maina() argument
520 spapr_rtc_read(&spapr->rtc, &tm, NULL); in spapr_init_maina()
536 SpaprMachineState *spapr = SPAPR_MACHINE(qdev_get_machine()); in spapr_powerdown_req() local
561 spapr_init_maina(spapr, maina, 3 /* Main-A, Main-B and EPOW */); in spapr_powerdown_req()
578 rtas_event_log_queue(spapr, entry); in spapr_powerdown_req()
580 qemu_irq_pulse(spapr_qirq(spapr, in spapr_powerdown_req()
581 rtas_event_log_to_irq(spapr, RTAS_LOG_TYPE_EPOW))); in spapr_powerdown_req()
588 SpaprMachineState *spapr = SPAPR_MACHINE(qdev_get_machine()); in spapr_hotplug_req_event() local
614 spapr_init_maina(spapr, maina, 3 /* Main-A, Main-B, HP */); in spapr_hotplug_req_event()
659 g_assert(spapr_memory_hot_unplug_supported(spapr)); in spapr_hotplug_req_event()
666 rtas_event_log_queue(spapr, entry); in spapr_hotplug_req_event()
668 qemu_irq_pulse(spapr_qirq(spapr, in spapr_hotplug_req_event()
669 rtas_event_log_to_irq(spapr, RTAS_LOG_TYPE_HOTPLUG))); in spapr_hotplug_req_event()
808 static void spapr_mce_dispatch_elog(SpaprMachineState *spapr, PowerPCCPU *cpu, in spapr_mce_dispatch_elog() argument
853 spapr->fwnmi_machine_check_interlock = cpu->vcpu_id; in spapr_mce_dispatch_elog()
866 ppc_cpu_do_fwnmi_machine_check(cs, spapr->fwnmi_machine_check_addr); in spapr_mce_dispatch_elog()
871 SpaprMachineState *spapr = SPAPR_MACHINE(qdev_get_machine()); in spapr_mce_req_event() local
875 if (spapr->fwnmi_machine_check_addr == -1) { in spapr_mce_req_event()
883 while (spapr->fwnmi_machine_check_interlock != -1) { in spapr_mce_req_event()
889 if (spapr->fwnmi_machine_check_interlock == cpu->vcpu_id) { in spapr_mce_req_event()
901 qemu_cond_wait_bql(&spapr->fwnmi_machine_check_interlock_cond); in spapr_mce_req_event()
902 if (spapr->fwnmi_machine_check_addr == -1) { in spapr_mce_req_event()
922 error_setg(&spapr->fwnmi_migration_blocker, in spapr_mce_req_event()
926 ret = migrate_add_blocker(&spapr->fwnmi_migration_blocker, NULL); in spapr_mce_req_event()
931 spapr_mce_dispatch_elog(spapr, cpu, recovered); in spapr_mce_req_event()
934 static void check_exception(PowerPCCPU *cpu, SpaprMachineState *spapr, in check_exception() argument
953 event = rtas_event_log_dequeue(spapr, mask); in check_exception()
979 if (rtas_event_log_contains(spapr, EVENT_CLASS_MASK(i))) { in check_exception()
981 spapr_event_sources_get_source(spapr->event_sources, i); in check_exception()
984 qemu_irq_pulse(spapr_qirq(spapr, source->irq)); in check_exception()
994 static void event_scan(PowerPCCPU *cpu, SpaprMachineState *spapr, in event_scan() argument
1006 if (rtas_event_log_contains(spapr, EVENT_CLASS_MASK(i))) { in event_scan()
1008 spapr_event_sources_get_source(spapr->event_sources, i); in event_scan()
1011 qemu_irq_pulse(spapr_qirq(spapr, source->irq)); in event_scan()
1018 void spapr_clear_pending_events(SpaprMachineState *spapr) in spapr_clear_pending_events() argument
1022 QTAILQ_FOREACH_SAFE(entry, &spapr->pending_events, next, next_entry) { in spapr_clear_pending_events()
1023 QTAILQ_REMOVE(&spapr->pending_events, entry, next); in spapr_clear_pending_events()
1029 void spapr_clear_pending_hotplug_events(SpaprMachineState *spapr) in spapr_clear_pending_hotplug_events() argument
1033 QTAILQ_FOREACH_SAFE(entry, &spapr->pending_events, next, next_entry) { in spapr_clear_pending_hotplug_events()
1035 QTAILQ_REMOVE(&spapr->pending_events, entry, next); in spapr_clear_pending_hotplug_events()
1042 void spapr_events_init(SpaprMachineState *spapr) in spapr_events_init() argument
1046 if (SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) { in spapr_events_init()
1047 epow_irq = spapr_irq_findone(spapr, &error_fatal); in spapr_events_init()
1050 spapr_irq_claim(spapr, epow_irq, false, &error_fatal); in spapr_events_init()
1052 QTAILQ_INIT(&spapr->pending_events); in spapr_events_init()
1054 spapr->event_sources = spapr_event_sources_new(); in spapr_events_init()
1056 spapr_event_sources_register(spapr->event_sources, EVENT_CLASS_EPOW, in spapr_events_init()
1067 if (spapr->use_hotplug_event_source) { in spapr_events_init()
1070 if (SPAPR_MACHINE_GET_CLASS(spapr)->legacy_irq_allocation) { in spapr_events_init()
1071 hp_irq = spapr_irq_findone(spapr, &error_fatal); in spapr_events_init()
1074 spapr_irq_claim(spapr, hp_irq, false, &error_fatal); in spapr_events_init()
1076 spapr_event_sources_register(spapr->event_sources, EVENT_CLASS_HOT_PLUG, in spapr_events_init()
1080 spapr->epow_notifier.notify = spapr_powerdown_req; in spapr_events_init()
1081 qemu_register_powerdown_notifier(&spapr->epow_notifier); in spapr_events_init()