[svn-commits] sruffell: branch linux/2.4 r9672 - /linux/branches/2.4/drivers/dahdi/voicebus/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Jan 20 23:29:59 CST 2011


Author: sruffell
Date: Thu Jan 20 23:29:56 2011
New Revision: 9672

URL: http://svnview.digium.com/svn/dahdi?view=rev&rev=9672
Log:
wcte12xp, wctdm24xxp: Do not rely on polling main memory.

The voicebus library by default configures the PCI interface to poll the
descriptor ring for available buffers.  There are some platforms like
the Intel SG3420P motherboard where this does not appear to be
sufficient.  Writing to the transmit demand poll register resolves this
problem on these troublesome platforms. DAHDI-700 DAHDI-702.

Signed-off-by: Shaun Ruffell <sruffell at digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=9397

Modified:
    linux/branches/2.4/drivers/dahdi/voicebus/voicebus.c

Modified: linux/branches/2.4/drivers/dahdi/voicebus/voicebus.c
URL: http://svnview.digium.com/svn/dahdi/linux/branches/2.4/drivers/dahdi/voicebus/voicebus.c?view=diff&rev=9672&r1=9671&r2=9672
==============================================================================
--- linux/branches/2.4/drivers/dahdi/voicebus/voicebus.c (original)
+++ linux/branches/2.4/drivers/dahdi/voicebus/voicebus.c Thu Jan 20 23:29:56 2011
@@ -717,11 +717,7 @@
 	return 0;
 }
 
-/**
- * voicebus_transmit - Queue a buffer on the hardware descriptor ring.
- *
- */
-int voicebus_transmit(struct voicebus *vb, struct vbb *vbb)
+static int __voicebus_transmit(struct voicebus *vb, struct vbb *vbb)
 {
 	struct voicebus_descriptor *d;
 	struct voicebus_descriptor_list *dl = &vb->txd;
@@ -745,6 +741,17 @@
 	SET_OWNED(d); /* That's it until the hardware is done with it. */
 	atomic_inc(&dl->count);
 	return 0;
+}
+
+/**
+ * voicebus_transmit - Queue a buffer on the hardware descriptor ring.
+ *
+ */
+int voicebus_transmit(struct voicebus *vb, struct vbb *vbb)
+{
+	int res = __voicebus_transmit(vb, vbb);
+	__vb_setctl(vb, 0x0008, 0x00000000);
+	return res;
 }
 EXPORT_SYMBOL(voicebus_transmit);
 
@@ -810,8 +817,9 @@
 		while (!list_empty(&buffers)) {
 			vbb = list_entry(buffers.next, struct vbb, entry);
 			list_del_init(&vbb->entry);
-			voicebus_transmit(vb, vbb);
+			__voicebus_transmit(vb, vbb);
 		}
+		__vb_setctl(vb, 0x0008, 0x00000000);
 		vb_enable_deferred(vb);
 	}
 
@@ -1281,8 +1289,9 @@
 	while (!list_empty(&buffers)) {
 		vbb = list_entry(buffers.next, struct vbb, entry);
 		list_del(&vbb->entry);
-		voicebus_transmit(vb, vbb);
-	}
+		__voicebus_transmit(vb, vbb);
+	}
+	__vb_setctl(vb, 0x0008, 0x00000000);
 
 	/* If there may still be buffers in the descriptor rings, reschedule
 	 * ourself to run again.  We essentially yield here to allow any other
@@ -1356,8 +1365,9 @@
 	while (!list_empty(&buffers)) {
 		vbb = list_entry(buffers.next, struct vbb, entry);
 		list_del(&vbb->entry);
-		voicebus_transmit(vb, vbb);
-	}
+		__voicebus_transmit(vb, vbb);
+	}
+	__vb_setctl(vb, 0x0008, 0x00000000);
 
 	/* Print any messages about soft latency bumps after we fix the transmit
 	 * descriptor ring. Otherwise it's possible to take so much time
@@ -1501,8 +1511,9 @@
 	while (!list_empty(&buffers)) {
 		vbb = list_entry(buffers.next, struct vbb, entry);
 		list_del(&vbb->entry);
-		voicebus_transmit(vb, vbb);
-	}
+		__voicebus_transmit(vb, vbb);
+	}
+	__vb_setctl(vb, 0x0008, 0x00000000);
 
 	/* Print any messages about soft latency bumps after we fix the transmit
 	 * descriptor ring. Otherwise it's possible to take so much time




More information about the svn-commits mailing list