Lines Matching refs:xsrc

917 uint8_t xive_source_esb_get(XiveSource *xsrc, uint32_t srcno)  in xive_source_esb_get()  argument
919 assert(srcno < xsrc->nr_irqs); in xive_source_esb_get()
921 return xsrc->status[srcno] & 0x3; in xive_source_esb_get()
924 uint8_t xive_source_esb_set(XiveSource *xsrc, uint32_t srcno, uint8_t pq) in xive_source_esb_set() argument
926 assert(srcno < xsrc->nr_irqs); in xive_source_esb_set()
928 return xive_esb_set(&xsrc->status[srcno], pq); in xive_source_esb_set()
934 static bool xive_source_lsi_trigger(XiveSource *xsrc, uint32_t srcno) in xive_source_lsi_trigger() argument
936 uint8_t old_pq = xive_source_esb_get(xsrc, srcno); in xive_source_lsi_trigger()
938 xive_source_set_asserted(xsrc, srcno, true); in xive_source_lsi_trigger()
942 xive_source_esb_set(xsrc, srcno, XIVE_ESB_PENDING); in xive_source_lsi_trigger()
953 static bool xive_source_esb_disabled(XiveSource *xsrc, uint32_t srcno) in xive_source_esb_disabled() argument
955 return (xsrc->esb_flags & XIVE_SRC_PQ_DISABLE) && in xive_source_esb_disabled()
956 !xive_source_irq_is_lsi(xsrc, srcno); in xive_source_esb_disabled()
962 static bool xive_source_esb_trigger(XiveSource *xsrc, uint32_t srcno) in xive_source_esb_trigger() argument
966 assert(srcno < xsrc->nr_irqs); in xive_source_esb_trigger()
968 if (xive_source_esb_disabled(xsrc, srcno)) { in xive_source_esb_trigger()
972 ret = xive_esb_trigger(&xsrc->status[srcno]); in xive_source_esb_trigger()
974 if (xive_source_irq_is_lsi(xsrc, srcno) && in xive_source_esb_trigger()
975 xive_source_esb_get(xsrc, srcno) == XIVE_ESB_QUEUED) { in xive_source_esb_trigger()
986 static bool xive_source_esb_eoi(XiveSource *xsrc, uint32_t srcno) in xive_source_esb_eoi() argument
990 assert(srcno < xsrc->nr_irqs); in xive_source_esb_eoi()
992 if (xive_source_esb_disabled(xsrc, srcno)) { in xive_source_esb_eoi()
997 ret = xive_esb_eoi(&xsrc->status[srcno]); in xive_source_esb_eoi()
1004 if (xive_source_irq_is_lsi(xsrc, srcno) && in xive_source_esb_eoi()
1005 xive_source_is_asserted(xsrc, srcno)) { in xive_source_esb_eoi()
1006 ret = xive_source_lsi_trigger(xsrc, srcno); in xive_source_esb_eoi()
1015 static void xive_source_notify(XiveSource *xsrc, int srcno) in xive_source_notify() argument
1017 XiveNotifierClass *xnc = XIVE_NOTIFIER_GET_CLASS(xsrc->xive); in xive_source_notify()
1018 bool pq_checked = !xive_source_esb_disabled(xsrc, srcno); in xive_source_notify()
1021 xnc->notify(xsrc->xive, srcno, pq_checked); in xive_source_notify()
1034 static inline bool xive_source_is_trigger_page(XiveSource *xsrc, hwaddr addr) in xive_source_is_trigger_page() argument
1036 return xive_source_esb_has_2page(xsrc) && in xive_source_is_trigger_page()
1037 addr_is_even(addr, xsrc->esb_shift - 1); in xive_source_is_trigger_page()
1056 XiveSource *xsrc = XIVE_SOURCE(opaque); in xive_source_esb_read() local
1058 uint32_t srcno = addr >> xsrc->esb_shift; in xive_source_esb_read()
1062 if (xive_source_is_trigger_page(xsrc, addr)) { in xive_source_esb_read()
1071 ret = xive_source_esb_eoi(xsrc, srcno); in xive_source_esb_read()
1075 xive_source_notify(xsrc, srcno); in xive_source_esb_read()
1080 ret = xive_source_esb_get(xsrc, srcno); in xive_source_esb_read()
1087 ret = xive_source_esb_set(xsrc, srcno, (offset >> 8) & 0x3); in xive_source_esb_read()
1116 XiveSource *xsrc = XIVE_SOURCE(opaque); in xive_source_esb_write() local
1118 uint32_t srcno = addr >> xsrc->esb_shift; in xive_source_esb_write()
1124 if (xive_source_is_trigger_page(xsrc, addr)) { in xive_source_esb_write()
1125 notify = xive_source_esb_trigger(xsrc, srcno); in xive_source_esb_write()
1131 notify = xive_source_esb_trigger(xsrc, srcno); in xive_source_esb_write()
1135 if (!(xsrc->esb_flags & XIVE_SRC_STORE_EOI)) { in xive_source_esb_write()
1141 notify = xive_source_esb_eoi(xsrc, srcno); in xive_source_esb_write()
1157 xive_source_esb_set(xsrc, srcno, (offset >> 8) & 0x3); in xive_source_esb_write()
1169 xive_source_notify(xsrc, srcno); in xive_source_esb_write()
1189 XiveSource *xsrc = XIVE_SOURCE(opaque); in xive_source_set_irq() local
1192 if (xive_source_irq_is_lsi(xsrc, srcno)) { in xive_source_set_irq()
1194 notify = xive_source_lsi_trigger(xsrc, srcno); in xive_source_set_irq()
1196 xive_source_set_asserted(xsrc, srcno, false); in xive_source_set_irq()
1200 notify = xive_source_esb_trigger(xsrc, srcno); in xive_source_set_irq()
1206 xive_source_notify(xsrc, srcno); in xive_source_set_irq()
1210 void xive_source_pic_print_info(XiveSource *xsrc, uint32_t offset, Monitor *mon) in xive_source_pic_print_info() argument
1214 for (i = 0; i < xsrc->nr_irqs; i++) { in xive_source_pic_print_info()
1215 uint8_t pq = xive_source_esb_get(xsrc, i); in xive_source_pic_print_info()
1222 xive_source_irq_is_lsi(xsrc, i) ? "LSI" : "MSI", in xive_source_pic_print_info()
1225 xive_source_is_asserted(xsrc, i) ? 'A' : ' '); in xive_source_pic_print_info()
1231 XiveSource *xsrc = XIVE_SOURCE(dev); in xive_source_reset() local
1235 memset(xsrc->status, xsrc->reset_pq, xsrc->nr_irqs); in xive_source_reset()
1240 XiveSource *xsrc = XIVE_SOURCE(dev); in xive_source_realize() local
1241 size_t esb_len = xive_source_esb_len(xsrc); in xive_source_realize()
1243 assert(xsrc->xive); in xive_source_realize()
1245 if (!xsrc->nr_irqs) { in xive_source_realize()
1250 if (xsrc->esb_shift != XIVE_ESB_4K && in xive_source_realize()
1251 xsrc->esb_shift != XIVE_ESB_4K_2PAGE && in xive_source_realize()
1252 xsrc->esb_shift != XIVE_ESB_64K && in xive_source_realize()
1253 xsrc->esb_shift != XIVE_ESB_64K_2PAGE) { in xive_source_realize()
1258 xsrc->status = g_malloc0(xsrc->nr_irqs); in xive_source_realize()
1259 xsrc->lsi_map = bitmap_new(xsrc->nr_irqs); in xive_source_realize()
1261 memory_region_init(&xsrc->esb_mmio, OBJECT(xsrc), "xive.esb", esb_len); in xive_source_realize()
1262 memory_region_init_io(&xsrc->esb_mmio_emulated, OBJECT(xsrc), in xive_source_realize()
1263 &xive_source_esb_ops, xsrc, "xive.esb-emulated", in xive_source_realize()
1265 memory_region_add_subregion(&xsrc->esb_mmio, 0, &xsrc->esb_mmio_emulated); in xive_source_realize()
1938 XiveENDSource *xsrc = XIVE_END_SOURCE(opaque); in xive_end_source_read() local
1951 end_blk = xive_router_get_block_id(xsrc->xrtr); in xive_end_source_read()
1952 end_idx = addr >> (xsrc->esb_shift + 1); in xive_end_source_read()
1956 if (xive_router_get_end(xsrc->xrtr, end_blk, end_idx, &end)) { in xive_end_source_read()
1968 end_esmask = addr_is_even(addr, xsrc->esb_shift) ? END_W1_ESn : END_W1_ESe; in xive_end_source_read()
1996 xive_router_write_end(xsrc->xrtr, end_blk, end_idx, &end, 1); in xive_end_source_read()
2028 XiveENDSource *xsrc = XIVE_END_SOURCE(dev); in xive_end_source_realize() local
2030 assert(xsrc->xrtr); in xive_end_source_realize()
2032 if (!xsrc->nr_ends) { in xive_end_source_realize()
2037 if (xsrc->esb_shift != XIVE_ESB_4K && in xive_end_source_realize()
2038 xsrc->esb_shift != XIVE_ESB_64K) { in xive_end_source_realize()
2047 memory_region_init_io(&xsrc->esb_mmio, OBJECT(xsrc), in xive_end_source_realize()
2048 &xive_end_source_ops, xsrc, "xive.end", in xive_end_source_realize()
2049 (1ull << (xsrc->esb_shift + 1)) * xsrc->nr_ends); in xive_end_source_realize()