patch-2.4.0-test12 linux/drivers/isdn/hisax/nj_s.c
Next file: linux/drivers/isdn/hisax/nj_u.c
Previous file: linux/drivers/isdn/hisax/niccy.c
Back to the patch index
Back to the overall index
- Lines: 106
- Date:
Wed Nov 29 10:12:29 2000
- Orig file:
v2.4.0-test11/linux/drivers/isdn/hisax/nj_s.c
- Orig date:
Sun Nov 19 18:44:08 2000
diff -u --recursive --new-file v2.4.0-test11/linux/drivers/isdn/hisax/nj_s.c linux/drivers/isdn/hisax/nj_s.c
@@ -1,9 +1,11 @@
-// $Id: nj_s.c,v 2.3 2000/06/26 08:59:14 keil Exp $
+// $Id: nj_s.c,v 2.7.6.1 2000/11/29 16:00:14 kai Exp $
//
// This file is (c) under GNU PUBLIC LICENSE
//
+
#define __NO_VERSION__
#include <linux/config.h>
+#include <linux/init.h>
#include "hisax.h"
#include "isac.h"
#include "isdnl1.h"
@@ -12,7 +14,7 @@
#include <linux/ppp_defs.h>
#include "netjet.h"
-const char *NETjet_S_revision = "$Revision: 2.3 $";
+const char *NETjet_S_revision = "$Revision: 2.7.6.1 $";
static u_char dummyrr(struct IsdnCardState *cs, int chan, u_char off)
{
@@ -47,28 +49,37 @@
}
save_flags(flags);
cli();
- if ((sval = bytein(cs->hw.njet.base + NETJET_IRQSTAT0))) {
+ /* start new code 13/07/00 GE */
+ /* set bits in sval to indicate which page is free */
+ if (inl(cs->hw.njet.base + NETJET_DMA_WRITE_ADR) <
+ inl(cs->hw.njet.base + NETJET_DMA_WRITE_IRQ))
+ /* the 2nd write page is free */
+ sval = 0x08;
+ else /* the 1st write page is free */
+ sval = 0x04;
+ if (inl(cs->hw.njet.base + NETJET_DMA_READ_ADR) <
+ inl(cs->hw.njet.base + NETJET_DMA_READ_IRQ))
+ /* the 2nd read page is free */
+ sval = sval | 0x02;
+ else /* the 1st read page is free */
+ sval = sval | 0x01;
+ if (sval != cs->hw.njet.last_is0) /* we have a DMA interrupt */
+ {
if (test_and_set_bit(FLG_LOCK_ATOMIC, &cs->HW_Flags)) {
restore_flags(flags);
return;
}
cs->hw.njet.irqstat0 = sval;
restore_flags(flags);
-/* debugl1(cs, "tiger: ist0 %x %x %x %x/%x pulse=%d",
- sval,
- bytein(cs->hw.njet.base + NETJET_DMACTRL),
- bytein(cs->hw.njet.base + NETJET_IRQMASK0),
- inl(cs->hw.njet.base + NETJET_DMA_READ_ADR),
- inl(cs->hw.njet.base + NETJET_DMA_WRITE_ADR),
- bytein(cs->hw.njet.base + NETJET_PULSE_CNT));
-*/
-/* cs->hw.njet.irqmask0 = ((0x0f & cs->hw.njet.irqstat0) ^ 0x0f) | 0x30;
-*/ byteout(cs->hw.njet.base + NETJET_IRQSTAT0, cs->hw.njet.irqstat0);
-/* byteout(cs->hw.njet.base + NETJET_IRQMASK0, cs->hw.njet.irqmask0);
-*/ if (cs->hw.njet.irqstat0 & NETJET_IRQM0_READ)
+ if ((cs->hw.njet.irqstat0 & NETJET_IRQM0_READ) !=
+ (cs->hw.njet.last_is0 & NETJET_IRQM0_READ))
+ /* we have a read dma int */
read_tiger(cs);
- if (cs->hw.njet.irqstat0 & NETJET_IRQM0_WRITE)
+ if ((cs->hw.njet.irqstat0 & NETJET_IRQM0_WRITE) !=
+ (cs->hw.njet.last_is0 & NETJET_IRQM0_WRITE))
+ /* we have a write dma int */
write_tiger(cs);
+ /* end new code 13/07/00 GE */
test_and_clear_bit(FLG_LOCK_ATOMIC, &cs->HW_Flags);
} else
restore_flags(flags);
@@ -93,7 +104,8 @@
byteout(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout((10*HZ)/1000); /* Timeout 10ms */
- cs->hw.njet.ctrl_reg = 0x00; /* Reset Off and status read clear */
+ cs->hw.njet.ctrl_reg = 0x40; /* Reset Off and status read clear */
+ /* now edge triggered for TJ320 GE 13/07/00 */
byteout(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout((10*HZ)/1000); /* Timeout 10ms */
@@ -128,17 +140,16 @@
return(0);
}
-static struct pci_dev *dev_netjet __initdata = NULL;
+static struct pci_dev *dev_netjet __initdata = NULL;
-__initfunc(int
-setup_netjet_s(struct IsdnCard *card))
+int __init
+setup_netjet_s(struct IsdnCard *card)
{
int bytecnt;
struct IsdnCardState *cs = card->cs;
char tmp[64];
long flags;
-#if CONFIG_PCI
-#endif
+
#ifdef __BIG_ENDIAN
#error "not running on big endian machines now"
#endif
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)