diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2016-11-14 13:06:14 +1100 |
---|---|---|
committer | Stewart Smith <stewart@linux.vnet.ibm.com> | 2016-11-15 15:06:02 +1100 |
commit | bd4eaedc2dda6e7b365eb5e104c07c5d114528e6 (patch) | |
tree | 6f2b4faa02d5d3b483de26b796f026368412bb95 | |
parent | 5ca6fcd9103008472dcb04e87a469e11b4443124 (diff) | |
download | skiboot-bd4eaedc2dda6e7b365eb5e104c07c5d114528e6.zip skiboot-bd4eaedc2dda6e7b365eb5e104c07c5d114528e6.tar.gz skiboot-bd4eaedc2dda6e7b365eb5e104c07c5d114528e6.tar.bz2 |
xive: Add helper to retrieve an IPI trigger port
To be used by such things as VAS
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
-rw-r--r-- | hw/xive.c | 19 | ||||
-rw-r--r-- | include/xive.h | 5 |
2 files changed, 24 insertions, 0 deletions
@@ -1295,6 +1295,25 @@ uint32_t xive_alloc_ipi_irqs(uint32_t chip_id, uint32_t count, uint32_t align) return base; } +void *xive_get_trigger_port(uint32_t girq) +{ + struct xive *x; + uint32_t idx; + + /* Find XIVE on which the IVE resides */ + x = xive_from_isn(girq); + if (!x) + return NULL; + + /* Make sure it's an IPI on that chip */ + if (girq < x->int_base || + girq >= x->int_ipi_top) + return NULL; + + idx = girq - x->int_base; + return x->esb_mmio + idx * 0x20000; +} + uint64_t xive_get_notify_port(uint32_t chip_id, uint32_t ent) { struct proc_chip *chip = get_chip(chip_id); diff --git a/include/xive.h b/include/xive.h index 775ddd7..367daec 100644 --- a/include/xive.h +++ b/include/xive.h @@ -382,4 +382,9 @@ void xive_register_source(uint32_t base, uint32_t count, uint32_t shift, void xive_cpu_callin(struct cpu_thread *cpu); +/* Get the trigger page address for an interrupt allocated with + * xive_alloc_ipi_irqs() + */ +void *xive_get_trigger_port(uint32_t girq); + #endif /* __XIVE_H__ */ |