Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 122958
b: refs/heads/master
c: 746e8d3
h: refs/heads/master
v: v3
  • Loading branch information
Finn Thain authored and Geert Uytterhoeven committed Dec 28, 2008
1 parent 9285a2f commit ade8f81
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 429dbf53bca49b110f1058f0d9417a59115c41b8
refs/heads/master: 746e8d3b223281f0e5472ab0ad8f59af2221ea9b
42 changes: 31 additions & 11 deletions trunk/arch/m68k/mac/baboon.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,14 @@
#include <asm/macints.h>
#include <asm/mac_baboon.h>

/* #define DEBUG_BABOON */
/* #define DEBUG_IRQS */

extern void mac_enable_irq(unsigned int);
extern void mac_disable_irq(unsigned int);

int baboon_present;
static volatile struct baboon *baboon;
static unsigned char baboon_disabled;

#if 0
extern int macide_ack_intr(struct ata_channel *);
Expand Down Expand Up @@ -88,34 +91,51 @@ static irqreturn_t baboon_irq(int irq, void *dev_id)

void __init baboon_register_interrupts(void)
{
request_irq(IRQ_NUBUS_C, baboon_irq, IRQ_FLG_LOCK|IRQ_FLG_FAST,
"baboon", (void *) baboon);
baboon_disabled = 0;
request_irq(IRQ_NUBUS_C, baboon_irq, 0, "baboon", (void *)baboon);
}

void baboon_irq_enable(int irq) {
/*
* The means for masking individual baboon interrupts remains a mystery, so
* enable the umbrella interrupt only when no baboon interrupt is disabled.
*/

void baboon_irq_enable(int irq)
{
int irq_idx = IRQ_IDX(irq);

#ifdef DEBUG_IRQUSE
printk("baboon_irq_enable(%d)\n", irq);
#endif
/* FIXME: figure out how to mask and unmask baboon interrupt sources */
enable_irq(IRQ_NUBUS_C);

baboon_disabled &= ~(1 << irq_idx);
if (!baboon_disabled)
mac_enable_irq(IRQ_NUBUS_C);
}

void baboon_irq_disable(int irq) {
void baboon_irq_disable(int irq)
{
int irq_idx = IRQ_IDX(irq);

#ifdef DEBUG_IRQUSE
printk("baboon_irq_disable(%d)\n", irq);
#endif
disable_irq(IRQ_NUBUS_C);

baboon_disabled |= 1 << irq_idx;
if (baboon_disabled)
mac_disable_irq(IRQ_NUBUS_C);
}

void baboon_irq_clear(int irq) {
int irq_idx = IRQ_IDX(irq);
void baboon_irq_clear(int irq)
{
int irq_idx = IRQ_IDX(irq);

baboon->mb_ifr &= ~(1 << irq_idx);
}

int baboon_irq_pending(int irq)
{
int irq_idx = IRQ_IDX(irq);
int irq_idx = IRQ_IDX(irq);

return baboon->mb_ifr & (1 << irq_idx);
}
8 changes: 4 additions & 4 deletions trunk/arch/m68k/mac/macints.c
Original file line number Diff line number Diff line change
Expand Up @@ -214,8 +214,8 @@ irqreturn_t mac_debug_handler(int, void *);

/* #define DEBUG_MACINTS */

static void mac_enable_irq(unsigned int irq);
static void mac_disable_irq(unsigned int irq);
void mac_enable_irq(unsigned int irq);
void mac_disable_irq(unsigned int irq);

static struct irq_controller mac_irq_controller = {
.name = "mac",
Expand Down Expand Up @@ -274,7 +274,7 @@ void __init mac_init_IRQ(void)
* These routines are just dispatchers to the VIA/OSS/PSC routines.
*/

static void mac_enable_irq(unsigned int irq)
void mac_enable_irq(unsigned int irq)
{
int irq_src = IRQ_SRC(irq);

Expand Down Expand Up @@ -307,7 +307,7 @@ static void mac_enable_irq(unsigned int irq)
}
}

static void mac_disable_irq(unsigned int irq)
void mac_disable_irq(unsigned int irq)
{
int irq_src = IRQ_SRC(irq);

Expand Down

0 comments on commit ade8f81

Please sign in to comment.