Lines Matching +full:next +full:- +full:level +full:- +full:cache

9  * your option) any later version. See the COPYING file in the top-level
14 #include "qemu/error-report.h"
15 #include "qemu/main-loop.h"
20 #include "hw/qdev-properties.h"
24 #include "hw/s390x/s390-virtio-ccw.h"
31 /* we only have one flic device, so this is fine to cache */ in s390_get_flic_class()
42 /* we only have one flic device, so this is fine to cache */ in s390_get_qemu_flic()
94 return -ENOSYS; in qemu_s390_add_adapter_routes()
106 QEMUS390FlicIO *cur, *next; in qemu_s390_clear_io_flic() local
110 if (!(flic->pending & FLIC_PENDING_IO)) { in qemu_s390_clear_io_flic()
116 if (QLIST_EMPTY(&flic->io[isc])) { in qemu_s390_clear_io_flic()
121 QLIST_FOREACH_SAFE(cur, &flic->io[isc], next, next) { in qemu_s390_clear_io_flic()
122 if (cur->id == subchannel_id && cur->nr == subchannel_nr) { in qemu_s390_clear_io_flic()
123 QLIST_REMOVE(cur, next); in qemu_s390_clear_io_flic()
129 if (QLIST_EMPTY(&flic->io[isc])) { in qemu_s390_clear_io_flic()
130 flic->pending &= ~ISC_TO_PENDING_IO(isc); in qemu_s390_clear_io_flic()
143 flic->simm &= ~AIS_MODE_MASK(isc); in qemu_s390_modify_ais_mode()
144 flic->nimm &= ~AIS_MODE_MASK(isc); in qemu_s390_modify_ais_mode()
147 flic->simm |= AIS_MODE_MASK(isc); in qemu_s390_modify_ais_mode()
148 flic->nimm &= ~AIS_MODE_MASK(isc); in qemu_s390_modify_ais_mode()
151 return -EINVAL; in qemu_s390_modify_ais_mode()
165 if (flag && (flic->nimm & AIS_MODE_MASK(isc))) { in qemu_s390_inject_airq()
170 fsc->inject_io(fs, 0, 0, 0, io_int_word); in qemu_s390_inject_airq()
172 if (flag && (flic->simm & AIS_MODE_MASK(isc))) { in qemu_s390_inject_airq()
173 flic->nimm |= AIS_MODE_MASK(isc); in qemu_s390_inject_airq()
174 trace_qemu_s390_suppress_airq(isc, "Single-Interruption Mode", in qemu_s390_inject_airq()
175 "NO-Interruptions Mode"); in qemu_s390_inject_airq()
193 cs->interrupt_request |= CPU_INTERRUPT_HARD; in qemu_s390_flic_notify()
202 if (cs->halted) { in qemu_s390_flic_notify()
205 if (!(cpu->env.psw.mask & PSW_MASK_EXT)) { in qemu_s390_flic_notify()
209 if (!(cpu->env.psw.mask & PSW_MASK_IO)) { in qemu_s390_flic_notify()
213 if (!(cpu->env.psw.mask & PSW_MASK_MCHECK)) { in qemu_s390_flic_notify()
227 g_assert(flic->pending & FLIC_PENDING_SERVICE); in qemu_s390_flic_dequeue_service()
228 tmp = flic->service_param; in qemu_s390_flic_dequeue_service()
229 flic->service_param = 0; in qemu_s390_flic_dequeue_service()
230 flic->pending &= ~FLIC_PENDING_SERVICE; in qemu_s390_flic_dequeue_service()
242 if (!(flic->pending & CR6_TO_PENDING_IO(cr6))) { in qemu_s390_flic_dequeue_io()
247 if (QLIST_EMPTY(&flic->io[isc]) || !(cr6 & ISC_TO_ISC_BITS(isc))) { in qemu_s390_flic_dequeue_io()
250 io = QLIST_FIRST(&flic->io[isc]); in qemu_s390_flic_dequeue_io()
251 QLIST_REMOVE(io, next); in qemu_s390_flic_dequeue_io()
254 if (QLIST_EMPTY(&flic->io[isc])) { in qemu_s390_flic_dequeue_io()
255 flic->pending &= ~ISC_TO_PENDING_IO(isc); in qemu_s390_flic_dequeue_io()
266 g_assert(flic->pending & FLIC_PENDING_MCHK_CR); in qemu_s390_flic_dequeue_crw_mchk()
267 flic->pending &= ~FLIC_PENDING_MCHK_CR; in qemu_s390_flic_dequeue_crw_mchk()
275 /* multiplexing is good enough for sclp - kvm does it internally as well */ in qemu_s390_inject_service()
276 flic->service_param |= parm; in qemu_s390_inject_service()
277 flic->pending |= FLIC_PENDING_SERVICE; in qemu_s390_inject_service()
292 io->id = subchannel_id; in qemu_s390_inject_io()
293 io->nr = subchannel_nr; in qemu_s390_inject_io()
294 io->parm = io_int_parm; in qemu_s390_inject_io()
295 io->word = io_int_word; in qemu_s390_inject_io()
297 QLIST_INSERT_HEAD(&flic->io[isc], io, next); in qemu_s390_inject_io()
298 flic->pending |= ISC_TO_PENDING_IO(isc); in qemu_s390_inject_io()
308 flic->pending |= FLIC_PENDING_MCHK_CR; in qemu_s390_inject_crw_mchk()
315 /* called without lock via cc->has_work, will be validated under lock */ in qemu_s390_flic_has_service()
316 return !!(flic->pending & FLIC_PENDING_SERVICE); in qemu_s390_flic_has_service()
321 /* called without lock via cc->has_work, will be validated under lock */ in qemu_s390_flic_has_io()
322 return !!(flic->pending & CR6_TO_PENDING_IO(cr6)); in qemu_s390_flic_has_io()
327 /* called without lock via cc->has_work, will be validated under lock */ in qemu_s390_flic_has_crw_mchk()
328 return !!(flic->pending & FLIC_PENDING_MCHK_CR); in qemu_s390_flic_has_crw_mchk()
334 return !!flic->pending; in qemu_s390_flic_has_any()
340 QEMUS390FlicIO *cur, *next; in qemu_s390_flic_reset() local
344 flic->simm = 0; in qemu_s390_flic_reset()
345 flic->nimm = 0; in qemu_s390_flic_reset()
346 flic->pending = 0; in qemu_s390_flic_reset()
350 QLIST_FOREACH_SAFE(cur, &flic->io[isc], next, next) { in qemu_s390_flic_reset()
351 QLIST_REMOVE(cur, next); in qemu_s390_flic_reset()
361 return s->ais_supported; in ais_needed()
373 return s->migrate_all_state; in qemu_s390_flic_full_state_needed()
382 .name = "qemu-s390-flic-io",
395 .name = "qemu-s390-flic-full",
403 vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
405 vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
407 vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
409 vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
411 vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
413 vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
415 vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
417 vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
423 .name = "qemu-s390-flic",
444 QLIST_INIT(&flic->io[isc]); in qemu_s390_flic_instance_init()
449 DEFINE_PROP_BOOL("migrate-all-state", QEMUS390FLICState,
460 dc->vmsd = &qemu_s390_flic_vmstate; in qemu_s390_flic_class_init()
461 fsc->register_io_adapter = qemu_s390_register_io_adapter; in qemu_s390_flic_class_init()
462 fsc->io_adapter_map = qemu_s390_io_adapter_map; in qemu_s390_flic_class_init()
463 fsc->add_adapter_routes = qemu_s390_add_adapter_routes; in qemu_s390_flic_class_init()
464 fsc->release_adapter_routes = qemu_s390_release_adapter_routes; in qemu_s390_flic_class_init()
465 fsc->clear_io_irq = qemu_s390_clear_io_flic; in qemu_s390_flic_class_init()
466 fsc->modify_ais_mode = qemu_s390_modify_ais_mode; in qemu_s390_flic_class_init()
467 fsc->inject_airq = qemu_s390_inject_airq; in qemu_s390_flic_class_init()
468 fsc->inject_service = qemu_s390_inject_service; in qemu_s390_flic_class_init()
469 fsc->inject_io = qemu_s390_inject_io; in qemu_s390_flic_class_init()
470 fsc->inject_crw_mchk = qemu_s390_inject_crw_mchk; in qemu_s390_flic_class_init()
477 fs->ais_supported = s390_has_feat(S390_FEAT_ADAPTER_INT_SUPPRESSION); in s390_flic_common_realize()
484 dc->realize = s390_flic_common_realize; in s390_flic_class_init()