fix EnterNow
This commit is contained in:
parent
271d25a8a2
commit
575dc32c6f
|
@ -145,7 +145,7 @@ reset_enpci(struct IsdnCardState *cs)
|
||||||
OutByte(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
|
OutByte(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
|
||||||
mdelay(20);
|
mdelay(20);
|
||||||
/* Reset off */
|
/* Reset off */
|
||||||
cs->hw.njet.ctrl_reg = 0x70;
|
cs->hw.njet.ctrl_reg = 0x30;
|
||||||
OutByte(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
|
OutByte(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
|
||||||
/* 20ms delay */
|
/* 20ms delay */
|
||||||
mdelay(20);
|
mdelay(20);
|
||||||
|
@ -154,7 +154,6 @@ reset_enpci(struct IsdnCardState *cs)
|
||||||
OutByte(cs->hw.njet.base + NETJET_AUXCTRL, ~TJ_AMD_IRQ);
|
OutByte(cs->hw.njet.base + NETJET_AUXCTRL, ~TJ_AMD_IRQ);
|
||||||
OutByte(cs->hw.njet.base + NETJET_IRQMASK1, TJ_AMD_IRQ);
|
OutByte(cs->hw.njet.base + NETJET_IRQMASK1, TJ_AMD_IRQ);
|
||||||
OutByte(cs->hw.njet.auxa, cs->hw.njet.auxd); // LED off
|
OutByte(cs->hw.njet.auxa, cs->hw.njet.auxd); // LED off
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -178,11 +177,10 @@ enpci_card_msg(struct IsdnCardState *cs, int mt, void *arg)
|
||||||
release_io_netjet(cs);
|
release_io_netjet(cs);
|
||||||
break;
|
break;
|
||||||
case CARD_INIT:
|
case CARD_INIT:
|
||||||
spin_lock_irqsave(&cs->lock, flags);
|
|
||||||
inittiger(cs);
|
|
||||||
Amd7930_init(cs);
|
|
||||||
reset_enpci(cs);
|
reset_enpci(cs);
|
||||||
spin_unlock_irqrestore(&cs->lock, flags);
|
inittiger(cs);
|
||||||
|
/* irq must be on here */
|
||||||
|
Amd7930_init(cs);
|
||||||
break;
|
break;
|
||||||
case CARD_TEST:
|
case CARD_TEST:
|
||||||
break;
|
break;
|
||||||
|
@ -233,40 +231,49 @@ static irqreturn_t
|
||||||
enpci_interrupt(int intno, void *dev_id, struct pt_regs *regs)
|
enpci_interrupt(int intno, void *dev_id, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct IsdnCardState *cs = dev_id;
|
struct IsdnCardState *cs = dev_id;
|
||||||
BYTE sval, ir;
|
BYTE s0val, s1val, ir;
|
||||||
u_long flags;
|
u_long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(&cs->lock, flags);
|
spin_lock_irqsave(&cs->lock, flags);
|
||||||
sval = InByte(cs->hw.njet.base + NETJET_IRQSTAT1);
|
s1val = InByte(cs->hw.njet.base + NETJET_IRQSTAT1);
|
||||||
|
|
||||||
/* AMD threw an interrupt */
|
/* AMD threw an interrupt */
|
||||||
if (!(sval & TJ_AMD_IRQ)) {
|
if (!(s1val & TJ_AMD_IRQ)) {
|
||||||
/* read and clear interrupt-register */
|
/* read and clear interrupt-register */
|
||||||
ir = ReadByteAmd7930(cs, 0x00);
|
ir = ReadByteAmd7930(cs, 0x00);
|
||||||
Amd7930_interrupt(cs, ir);
|
Amd7930_interrupt(cs, ir);
|
||||||
}
|
s1val = 1;
|
||||||
|
} else
|
||||||
|
s1val = 0;
|
||||||
|
s0val = InByte(cs->hw.njet.base + NETJET_IRQSTAT0);
|
||||||
|
if ((s0val | s1val)==0) { // shared IRQ
|
||||||
|
spin_unlock_irqrestore(&cs->lock, flags);
|
||||||
|
return IRQ_NONE;
|
||||||
|
}
|
||||||
|
if (s0val)
|
||||||
|
OutByte(cs->hw.njet.base + NETJET_IRQSTAT0, s0val);
|
||||||
|
|
||||||
/* DMA-Interrupt: B-channel-stuff */
|
/* DMA-Interrupt: B-channel-stuff */
|
||||||
/* set bits in sval to indicate which page is free */
|
/* set bits in sval to indicate which page is free */
|
||||||
if (inl(cs->hw.njet.base + NETJET_DMA_WRITE_ADR) <
|
if (inl(cs->hw.njet.base + NETJET_DMA_WRITE_ADR) <
|
||||||
inl(cs->hw.njet.base + NETJET_DMA_WRITE_IRQ))
|
inl(cs->hw.njet.base + NETJET_DMA_WRITE_IRQ))
|
||||||
/* the 2nd write page is free */
|
/* the 2nd write page is free */
|
||||||
sval = 0x08;
|
s0val = 0x08;
|
||||||
else /* the 1st write page is free */
|
else /* the 1st write page is free */
|
||||||
sval = 0x04;
|
s0val = 0x04;
|
||||||
if (inl(cs->hw.njet.base + NETJET_DMA_READ_ADR) <
|
if (inl(cs->hw.njet.base + NETJET_DMA_READ_ADR) <
|
||||||
inl(cs->hw.njet.base + NETJET_DMA_READ_IRQ))
|
inl(cs->hw.njet.base + NETJET_DMA_READ_IRQ))
|
||||||
/* the 2nd read page is free */
|
/* the 2nd read page is free */
|
||||||
sval = sval | 0x02;
|
s0val = s0val | 0x02;
|
||||||
else /* the 1st read page is free */
|
else /* the 1st read page is free */
|
||||||
sval = sval | 0x01;
|
s0val = s0val | 0x01;
|
||||||
if (sval != cs->hw.njet.last_is0) /* we have a DMA interrupt */
|
if (s0val != cs->hw.njet.last_is0) /* we have a DMA interrupt */
|
||||||
{
|
{
|
||||||
if (test_and_set_bit(FLG_LOCK_ATOMIC, &cs->HW_Flags)) {
|
if (test_and_set_bit(FLG_LOCK_ATOMIC, &cs->HW_Flags)) {
|
||||||
spin_unlock_irqrestore(&cs->lock, flags);
|
spin_unlock_irqrestore(&cs->lock, flags);
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
cs->hw.njet.irqstat0 = sval;
|
cs->hw.njet.irqstat0 = s0val;
|
||||||
if ((cs->hw.njet.irqstat0 & NETJET_IRQM0_READ) !=
|
if ((cs->hw.njet.irqstat0 & NETJET_IRQM0_READ) !=
|
||||||
(cs->hw.njet.last_is0 & NETJET_IRQM0_READ))
|
(cs->hw.njet.last_is0 & NETJET_IRQM0_READ))
|
||||||
/* we have a read dma int */
|
/* we have a read dma int */
|
||||||
|
@ -390,29 +397,3 @@ setup_enternow_pci(struct IsdnCard *card)
|
||||||
|
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue