Lines Matching refs:xsrc

234 int kvmppc_xive_source_reset_one(XiveSource *xsrc, int srcno, Error **errp)  in kvmppc_xive_source_reset_one()  argument
236 SpaprXive *xive = SPAPR_XIVE(xsrc->xive); in kvmppc_xive_source_reset_one()
243 if (xive_source_irq_is_lsi(xsrc, srcno)) { in kvmppc_xive_source_reset_one()
245 if (xive_source_is_asserted(xsrc, srcno)) { in kvmppc_xive_source_reset_one()
254 static int kvmppc_xive_source_reset(XiveSource *xsrc, Error **errp) in kvmppc_xive_source_reset() argument
256 SpaprXive *xive = SPAPR_XIVE(xsrc->xive); in kvmppc_xive_source_reset()
259 for (i = 0; i < xsrc->nr_irqs; i++) { in kvmppc_xive_source_reset()
266 ret = kvmppc_xive_source_reset_one(xsrc, i, errp); in kvmppc_xive_source_reset()
281 static uint64_t xive_esb_rw(XiveSource *xsrc, int srcno, uint32_t offset, in xive_esb_rw() argument
284 uint64_t *addr = xsrc->esb_mmap + xive_source_esb_mgmt(xsrc, srcno) + in xive_esb_rw()
297 static uint8_t xive_esb_read(XiveSource *xsrc, int srcno, uint32_t offset) in xive_esb_read() argument
299 return xive_esb_rw(xsrc, srcno, offset, 0, 0) & 0x3; in xive_esb_read()
302 static void kvmppc_xive_esb_trigger(XiveSource *xsrc, int srcno) in kvmppc_xive_esb_trigger() argument
304 xive_esb_rw(xsrc, srcno, 0, 0, true); in kvmppc_xive_esb_trigger()
307 uint64_t kvmppc_xive_esb_rw(XiveSource *xsrc, int srcno, uint32_t offset, in kvmppc_xive_esb_rw() argument
311 return xive_esb_rw(xsrc, srcno, offset, data, 1); in kvmppc_xive_esb_rw()
319 if (xive_source_irq_is_lsi(xsrc, srcno) && in kvmppc_xive_esb_rw()
321 xive_esb_read(xsrc, srcno, XIVE_ESB_SET_PQ_00); in kvmppc_xive_esb_rw()
322 if (xive_source_is_asserted(xsrc, srcno)) { in kvmppc_xive_esb_rw()
323 kvmppc_xive_esb_trigger(xsrc, srcno); in kvmppc_xive_esb_rw()
327 return xive_esb_rw(xsrc, srcno, offset, 0, 0); in kvmppc_xive_esb_rw()
331 static void kvmppc_xive_source_get_state(XiveSource *xsrc) in kvmppc_xive_source_get_state() argument
333 SpaprXive *xive = SPAPR_XIVE(xsrc->xive); in kvmppc_xive_source_get_state()
336 for (i = 0; i < xsrc->nr_irqs; i++) { in kvmppc_xive_source_get_state()
344 pq = xive_esb_read(xsrc, i, XIVE_ESB_GET); in kvmppc_xive_source_get_state()
347 xive_source_esb_set(xsrc, i, pq); in kvmppc_xive_source_get_state()
353 XiveSource *xsrc = opaque; in kvmppc_xive_source_set_irq() local
355 if (!xive_source_irq_is_lsi(xsrc, srcno)) { in kvmppc_xive_source_set_irq()
360 xive_source_set_asserted(xsrc, srcno, val); in kvmppc_xive_source_set_irq()
363 kvmppc_xive_esb_trigger(xsrc, srcno); in kvmppc_xive_source_set_irq()
505 XiveSource *xsrc = &xive->source; in kvmppc_xive_change_state_handler() local
514 for (i = 0; i < xsrc->nr_irqs; i++) { in kvmppc_xive_change_state_handler()
522 pq = xive_source_esb_get(xsrc, i); in kvmppc_xive_change_state_handler()
523 old_pq = xive_esb_read(xsrc, i, XIVE_ESB_SET_PQ_00 + (pq << 8)); in kvmppc_xive_change_state_handler()
530 kvmppc_xive_esb_trigger(xsrc, i); in kvmppc_xive_change_state_handler()
543 for (i = 0; i < xsrc->nr_irqs; i++) { in kvmppc_xive_change_state_handler()
550 pq = xive_esb_read(xsrc, i, XIVE_ESB_GET); in kvmppc_xive_change_state_handler()
558 pq = xive_esb_read(xsrc, i, XIVE_ESB_SET_PQ_10); in kvmppc_xive_change_state_handler()
560 xive_source_esb_set(xsrc, i, pq); in kvmppc_xive_change_state_handler()
722 XiveSource *xsrc = &xive->source; in kvmppc_xive_connect() local
723 size_t esb_len = xive_source_esb_len(xsrc); in kvmppc_xive_connect()
769 xsrc->esb_mmap = addr; in kvmppc_xive_connect()
771 memory_region_init_ram_device_ptr(&xsrc->esb_mmio_kvm, OBJECT(xsrc), in kvmppc_xive_connect()
772 "xive.esb-kvm", esb_len, xsrc->esb_mmap); in kvmppc_xive_connect()
773 memory_region_add_subregion_overlap(&xsrc->esb_mmio, 0, in kvmppc_xive_connect()
774 &xsrc->esb_mmio_kvm, 1); in kvmppc_xive_connect()
808 ret = kvmppc_xive_source_reset(xsrc, errp); in kvmppc_xive_connect()
826 XiveSource *xsrc; in kvmppc_xive_disconnect() local
832 xsrc = &xive->source; in kvmppc_xive_disconnect()
833 esb_len = xive_source_esb_len(xsrc); in kvmppc_xive_disconnect()
835 if (xsrc->esb_mmap) { in kvmppc_xive_disconnect()
836 memory_region_del_subregion(&xsrc->esb_mmio, &xsrc->esb_mmio_kvm); in kvmppc_xive_disconnect()
837 object_unparent(OBJECT(&xsrc->esb_mmio_kvm)); in kvmppc_xive_disconnect()
838 munmap(xsrc->esb_mmap, esb_len); in kvmppc_xive_disconnect()
839 xsrc->esb_mmap = NULL; in kvmppc_xive_disconnect()