[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] pseries: added allocator for a block of IRQs
From: |
Alexey Kardashevskiy |
Subject: |
[Qemu-devel] [PATCH] pseries: added allocator for a block of IRQs |
Date: |
Tue, 10 Jul 2012 23:46:10 +1000 |
The patch adds a simple helper which allocates a consecutive sequence
of IRQs calling spapr_allocate_irq for each and checks that allocated
IRQs go consequently.
The patch is required for upcoming support of MSI/MSIX on POWER.
Signed-off-by: Alexey Kardashevskiy <address@hidden>
---
hw/spapr.c | 20 ++++++++++++++++++++
hw/spapr.h | 1 +
2 files changed, 21 insertions(+)
diff --git a/hw/spapr.c b/hw/spapr.c
index 6a9a7ca..f47c109 100644
--- a/hw/spapr.c
+++ b/hw/spapr.c
@@ -113,6 +113,26 @@ qemu_irq spapr_allocate_irq(uint32_t hint, uint32_t
*irq_num,
return qirq;
}
+/* Allocate block of consequtive IRQs, returns a number of the first */
+int spapr_allocate_irq_block(uint32_t num, enum xics_irq_type type)
+{
+ int i, ret;
+ uint32_t irq = -1;
+
+ for (i = 0; i < num; ++i) {
+ if (!spapr_allocate_irq(0, &irq, type)) {
+ return -1;
+ }
+ if (0 == i) {
+ ret = irq;
+ }
+ if (ret + i != irq) {
+ return -1;
+ }
+ }
+ return ret;
+}
+
static int spapr_fixup_cpu_dt(void *fdt, sPAPREnvironment *spapr)
{
int ret = 0, offset;
diff --git a/hw/spapr.h b/hw/spapr.h
index d0c1749..4a3520f 100644
--- a/hw/spapr.h
+++ b/hw/spapr.h
@@ -289,6 +289,7 @@ target_ulong spapr_hypercall(CPUPPCState *env, target_ulong
opcode,
qemu_irq spapr_allocate_irq(uint32_t hint, uint32_t *irq_num,
enum xics_irq_type type);
+int spapr_allocate_irq_block(uint32_t num, enum xics_irq_type type);
static inline qemu_irq spapr_allocate_msi(uint32_t hint, uint32_t *irq_num)
{
--
1.7.10