summaryrefslogtreecommitdiff
path: root/big-little/include
diff options
context:
space:
mode:
authorDietmar Eggemann <dietmar.eggemann@arm.com>2012-03-15 14:34:01 +0000
committerDave Martin <dave.martin@linaro.org>2012-04-19 11:18:43 +0100
commit93a7cf52e9a962664a4055fa75ab0598cb8502ba (patch)
tree321a79d4138415a4907dbc7ab17b80298edb8390 /big-little/include
parent4a4765859376cfe618600442cb854c877dc36cdc (diff)
Virqmig: Added virq migration support.
Signed-off-by: Achin Gupta <achin.gupta@arm.com> Signed-off-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
Diffstat (limited to 'big-little/include')
-rw-r--r--big-little/include/events.h3
-rw-r--r--big-little/include/vgiclib.h24
2 files changed, 21 insertions, 6 deletions
diff --git a/big-little/include/events.h b/big-little/include/events.h
index dc0025d..b31df03 100644
--- a/big-little/include/events.h
+++ b/big-little/include/events.h
@@ -30,7 +30,7 @@
/*
* Events for inter/intra-cluster sync
*/
-#define MAX_EVENTS 12
+#define MAX_EVENTS 13
/* Inter cluster events */
#define IB_CONTEXT_DONE 0
@@ -60,6 +60,7 @@
#define CACHE_GEOM_DONE 10
#define VID_REGS_DONE 11
+#define VIRQ_MIG_DONE 12
/* Defines for Secure events */
#define MAX_SEC_EVENTS 3
diff --git a/big-little/include/vgiclib.h b/big-little/include/vgiclib.h
index 0d5f461..5cbca56 100644
--- a/big-little/include/vgiclib.h
+++ b/big-little/include/vgiclib.h
@@ -23,6 +23,12 @@
#ifndef VGICLIB_H
#define VGICLIB_H
+/*
+ * The maximum number of virtual interrupts that can be
+ * migrated in response to a single ICDIPTR access.
+ */
+#define MAX_MIG_IRQS 4
+
#include "gic_registers.h"
struct overflowint {
@@ -42,10 +48,18 @@ struct gic_cpuif {
unsigned int freelist; /* Bitmask of which list entries are in use */
};
-void vgic_init(void);
-void vgic_savestate(unsigned int cpu);
-void vgic_loadstate(unsigned int cpu);
-void vgic_refresh(unsigned int cpu);
-void enqueue_interrupt(unsigned int descr, unsigned int cpu);
+typedef struct irq_info {
+ unsigned id;
+ unsigned src_cpuif;
+ unsigned dest_cpuif;
+ unsigned desc;
+} mig_irq_info;
+extern unsigned start_virq_migration(unsigned, unsigned, unsigned);
+extern void complete_virq_migration(unsigned);
+extern void vgic_init(void);
+extern void vgic_savestate(unsigned int cpu);
+extern void vgic_loadstate(unsigned int cpu);
+extern void vgic_refresh(unsigned int cpu);
+extern void enqueue_interrupt(unsigned int descr, unsigned int cpu);
#endif /* VGICLIB_H */