|
@@ -0,0 +1,43 @@
+--- branches/1.4/wcte12xp/base.c 2008/01/25 23:13:41 3738
++++ branches/1.4/wcte12xp/base.c 2008/02/05 23:48:24 3805
+@@ -1898,6 +1898,7 @@
+ /* Read interrupts */
+ spin_lock(&wc->reglock);
+ ints = __t1_getctl(wc, 0x0028);
++ ints &= 0x3fef; /* Just look at the interrupt conditions */
+
+ if (!ints) {
+ spin_unlock(&wc->reglock);
+@@ -1910,7 +1911,6 @@
+
+ /* clear interrupts interrupts (we only get here if interrupt is for us) */
+ __t1_setctl(wc, 0x0028, ints);
+- ints &= wc->intmask;
+
+ if (ints & 0x00000041) {
+ do {
+@@ -1918,6 +1918,13 @@
+ res |= t1_check_descriptor(wc, 1);
+ } while(res);
+ }
++
++ if (ints & 0x0000a3ae) {
++ /* This will allow us to recover if interrupts are held for a long period of time */
++ debug_printk(1, "Abnormal interrupt %08x detected\n", ints);
++ __t1_setctl(wc, 0x0008, 0x00000000);
++ __t1_setctl(wc, 0x0010, 0x00000000);
++ }
+ spin_unlock(&wc->reglock);
+
+ #ifdef LINUX26
+@@ -2114,6 +2121,9 @@
+ module_param(vpmsupport, int, S_IRUGO | S_IWUSR);
+ module_param(vpmdtmfsupport, int, S_IRUGO | S_IWUSR);
+ module_param(vpmtsisupport, int, S_IRUGO | S_IWUSR);
++module_param(vpmnlptype, int, S_IRUGO | S_IWUSR);
++module_param(vpmnlpthresh, int, S_IRUGO | S_IWUSR);
++module_param(vpmnlpmaxsupp, int, S_IRUGO | S_IWUSR);
+ #endif
+ #else
+ MODULE_PARM(debug, "i");
+
|