Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 738
b: refs/heads/master
c: 9dbf68f
h: refs/heads/master
v: v3
  • Loading branch information
Corey Minyard authored and Linus Torvalds committed May 1, 2005
1 parent 4b01c19 commit 0027562
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 7 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: ec26d79f4f5822283e0bffa44a542fd13c5146e4
refs/heads/master: 9dbf68f97d585265eaadd15aea308efd9ae39d34
1 change: 0 additions & 1 deletion trunk/drivers/char/ipmi/ipmi_bt_sm.c
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,6 @@ static void reset_flags(struct si_sm_data *bt)
if (BT_STATUS & BT_B_BUSY) BT_CONTROL(BT_B_BUSY);
BT_CONTROL(BT_CLR_WR_PTR);
BT_CONTROL(BT_SMS_ATN);
BT_INTMASK_W(BT_BMC_HWRST);
#ifdef DEVELOPMENT_ONLY_NOT_FOR_PRODUCTION
if (BT_STATUS & BT_B2H_ATN) {
int i;
Expand Down
40 changes: 35 additions & 5 deletions trunk/drivers/char/ipmi/ipmi_si_intf.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,11 @@ enum si_intf_state {
/* FIXME - add watchdog stuff. */
};

/* Some BT-specific defines we need here. */
#define IPMI_BT_INTMASK_REG 2
#define IPMI_BT_INTMASK_CLEAR_IRQ_BIT 2
#define IPMI_BT_INTMASK_ENABLE_IRQ_BIT 1

enum si_type {
SI_KCS, SI_SMIC, SI_BT
};
Expand Down Expand Up @@ -875,6 +880,17 @@ static irqreturn_t si_irq_handler(int irq, void *data, struct pt_regs *regs)
return IRQ_HANDLED;
}

static irqreturn_t si_bt_irq_handler(int irq, void *data, struct pt_regs *regs)
{
struct smi_info *smi_info = data;
/* We need to clear the IRQ flag for the BT interface. */
smi_info->io.outputb(&smi_info->io, IPMI_BT_INTMASK_REG,
IPMI_BT_INTMASK_CLEAR_IRQ_BIT
| IPMI_BT_INTMASK_ENABLE_IRQ_BIT);
return si_irq_handler(irq, data, regs);
}


static struct ipmi_smi_handlers handlers =
{
.owner = THIS_MODULE,
Expand Down Expand Up @@ -1001,11 +1017,22 @@ static int std_irq_setup(struct smi_info *info)
if (!info->irq)
return 0;

rv = request_irq(info->irq,
si_irq_handler,
SA_INTERRUPT,
DEVICE_NAME,
info);
if (info->si_type == SI_BT) {
rv = request_irq(info->irq,
si_bt_irq_handler,
SA_INTERRUPT,
DEVICE_NAME,
info);
if (!rv)
/* Enable the interrupt in the BT interface. */
info->io.outputb(&info->io, IPMI_BT_INTMASK_REG,
IPMI_BT_INTMASK_ENABLE_IRQ_BIT);
} else
rv = request_irq(info->irq,
si_irq_handler,
SA_INTERRUPT,
DEVICE_NAME,
info);
if (rv) {
printk(KERN_WARNING
"ipmi_si: %s unable to claim interrupt %d,"
Expand All @@ -1024,6 +1051,9 @@ static void std_irq_cleanup(struct smi_info *info)
if (!info->irq)
return;

if (info->si_type == SI_BT)
/* Disable the interrupt in the BT interface. */
info->io.outputb(&info->io, IPMI_BT_INTMASK_REG, 0);
free_irq(info->irq, info);
}

Expand Down

0 comments on commit 0027562

Please sign in to comment.