ps3: add interrupt alloc for outlets
Subsystems (2)
PATCH 10/16 ps3: add interrupt alloc for outlets
From: Geert Uytterhoeven <[email protected]>
PS3 interrupt core update:
- Add ps3_alloc_irq() and ps3_free_irq(), to allocate a virtual interrupt number for an interrupt outlet, which is needed by the PS3 GPU frame buffer device and audio drivers
Signed-off-by Geert Uytterhoeven <[email protected]>
Signed-off-by Geoff Levand <[email protected]>
---
Got rid of the redundent symbols ps3_connect_irq & ps3_disconnect_irq as requested by Ben and Geert.
arch/powerpc/platforms/ps3/interrupt.c | 24 ++++++++++++++---------- include/asm-powerpc/ps3.h | 3 +++ 2 files changed, 17 insertions(+), 10 deletions(-)
arch/powerpc/platforms/ps3/interrupt.c +14 -10
@@ -85,7 +85,7 @@ struct ps3_private { static DEFINE_PER_CPU(struct ps3_private, ps3_private); -static int ps3_connect_irq (enum ps3_cpu_binding cpu,unsigned long outlet, +int ps3_alloc_irq (enum ps3_cpu_binding cpu,unsigned long outlet,unsigned int *virq) {int result;
@@ -138,8 +138,9 @@ fail_connect: fail_create:return result; } +EXPORT_SYMBOL_GPL (ps3_alloc_irq); -static void ps3_disconnect_irq (unsigned int virq) +int ps3_free_irq (unsigned int virq) {int result;const struct ps3_private *pd =get_irq_chip_data (virq);
@@ -155,7 +156,9 @@ static void ps3_disconnect_irq(unsignedset_irq_chip_data (virq,NULL );irq_dispose_mapping (virq); +return result; } +EXPORT_SYMBOL_GPL (ps3_free_irq);/** * ps3_alloc_io_irq - Assign a virq to a system bus device.
@@ -182,7 +185,7 @@ int ps3_alloc_io_irq(enum ps3_cpu_bindinreturn result; } - result =ps3_connect_irq (cpu, outlet, virq); + result =ps3_alloc_irq (cpu, outlet, virq);BUG_ON (result);return result;
@@ -198,7 +201,7 @@ int ps3_free_io_irq(unsigned int virq)pr_debug ("%s:%d: lv1_destruct_io_irq_outlet failed: %s\n" , __func__, __LINE__,ps3_result (result)); -ps3_disconnect_irq (virq); +ps3_free_irq (virq);return result; }
@@ -228,7 +231,7 @@ int ps3_alloc_event_irq(enum ps3_cpu_binreturn result; } - result =ps3_connect_irq (cpu, outlet, virq); + result =ps3_alloc_irq (cpu, outlet, virq);BUG_ON (result);return result;
@@ -246,7 +249,7 @@ int ps3_free_event_irq(unsigned int virqpr_debug ("%s:%d: lv1_destruct_event_receive_port failed: %s\n" , __func__, __LINE__,ps3_result (result)); -ps3_disconnect_irq (virq); +ps3_free_irq (virq);pr_debug (" <- %s:%d\n" , __func__, __LINE__);return result;
@@ -350,7 +353,7 @@ int ps3_alloc_vuart_irq(enum ps3_cpu_binreturn result; } - result =ps3_connect_irq (cpu, outlet, virq); + result =ps3_alloc_irq (cpu, outlet, virq);BUG_ON (result);return result;
@@ -368,7 +371,7 @@ int ps3_free_vuart_irq(unsigned int virqreturn result; } -ps3_disconnect_irq (virq); +ps3_free_irq (virq);return result; }
@@ -399,7 +402,7 @@ int ps3_alloc_spe_irq(enum ps3_cpu_bindireturn result; } - result =ps3_connect_irq (cpu, outlet, virq); + result =ps3_alloc_irq (cpu, outlet, virq);BUG_ON (result);return result;
@@ -407,10 +410,11 @@ int ps3_alloc_spe_irq(enum ps3_cpu_bindiint ps3_free_spe_irq (unsigned int virq) { -ps3_disconnect_irq (virq); +ps3_free_irq (virq);return 0 ; } +#define PS3_INVALID_OUTLET ((irq_hw_number_t)-1)#define PS3_PLUG_MAX 63
include/asm-powerpc/ps3.h +3 -0
@@ -163,6 +163,9 @@ int ps3_free_vuart_irq(unsigned int virqint ps3_alloc_spe_irq (enum ps3_cpu_binding cpu,unsigned long spe_id,unsigned int class,unsigned int *virq);int ps3_free_spe_irq (unsigned int virq); +int ps3_alloc_irq (enum ps3_cpu_binding cpu,unsigned long outlet, +unsigned int *virq); +int ps3_free_irq (unsigned int virq);/* lv1 result codes */
Quoted 4 lines · Geoff Levand
From: Geert Uytterhoeven <[email protected]>=20 =20
PS3 interrupt core update:
=A0 - Addps3_alloc_irq()andps3_free_irq(), to allocate a virtual inter=
rupt
Quoted 1 line
=A0 =A0 number for an interrupt outlet, which is needed by the PS3 GPU fr=
ame
Quoted 5 lines
=A0 =A0 buffer device and audio drivers
=20Signed-off-by Geert Uytterhoeven <[email protected]>Signed-off-by Geoff Levand <[email protected]>=20
Acked-by Arnd Bergmann <[email protected]>