Skip to content

Commit

Permalink
[POWERPC] ps3: add interrupt alloc for outlets
Browse files Browse the repository at this point in the history
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 <Geert.Uytterhoeven@sonycom.com>
Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com>
Acked-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Geert Uytterhoeven authored and Paul Mackerras committed Feb 7, 2007
1 parent 861be32 commit b1eeb38
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 10 deletions.
24 changes: 14 additions & 10 deletions arch/powerpc/platforms/ps3/interrupt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -138,8 +138,9 @@ static int ps3_connect_irq(enum ps3_cpu_binding cpu, unsigned long outlet,
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);
Expand All @@ -155,7 +156,9 @@ static void ps3_disconnect_irq(unsigned int virq)

set_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.
Expand All @@ -182,7 +185,7 @@ int ps3_alloc_io_irq(enum ps3_cpu_binding cpu, unsigned int interrupt_id,
return result;
}

result = ps3_connect_irq(cpu, outlet, virq);
result = ps3_alloc_irq(cpu, outlet, virq);
BUG_ON(result);

return result;
Expand All @@ -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;
}
Expand Down Expand Up @@ -228,7 +231,7 @@ int ps3_alloc_event_irq(enum ps3_cpu_binding cpu, unsigned int *virq)
return result;
}

result = ps3_connect_irq(cpu, outlet, virq);
result = ps3_alloc_irq(cpu, outlet, virq);
BUG_ON(result);

return result;
Expand All @@ -246,7 +249,7 @@ int ps3_free_event_irq(unsigned int virq)
pr_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;
Expand Down Expand Up @@ -350,7 +353,7 @@ int ps3_alloc_vuart_irq(enum ps3_cpu_binding cpu, void* virt_addr_bmp,
return result;
}

result = ps3_connect_irq(cpu, outlet, virq);
result = ps3_alloc_irq(cpu, outlet, virq);
BUG_ON(result);

return result;
Expand All @@ -368,7 +371,7 @@ int ps3_free_vuart_irq(unsigned int virq)
return result;
}

ps3_disconnect_irq(virq);
ps3_free_irq(virq);

return result;
}
Expand Down Expand Up @@ -399,18 +402,19 @@ int ps3_alloc_spe_irq(enum ps3_cpu_binding cpu, unsigned long spe_id,
return result;
}

result = ps3_connect_irq(cpu, outlet, virq);
result = ps3_alloc_irq(cpu, outlet, virq);
BUG_ON(result);

return result;
}

int 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

Expand Down
3 changes: 3 additions & 0 deletions include/asm-powerpc/ps3.h
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,9 @@ int ps3_free_vuart_irq(unsigned int virq);
int 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 */

Expand Down

0 comments on commit b1eeb38

Please sign in to comment.