List Info

Thread: sruffell: branch sruffell/voicebus r3810 - /team/sruffell/voicebus/voicebus.c




sruffell: branch sruffell/voicebus r3810 - /team/sruffell/voicebus/voicebus.c
user name
2008-02-06 15:59:36
Author: sruffell
Date: Wed Feb  6 15:59:35 2008
New Revision: 3810

URL: http://svn.digium.com/view/zaptel?view=rev&rev=3810
Log:
- Ensure that the cache-line size is set properly in the
interface.
- Various minor cleanups.


Modified:
    team/sruffell/voicebus/voicebus.c

Modified: team/sruffell/voicebus/voicebus.c
URL: http://svn.digium.com/view/zaptel/team/sruffell/voicebus/v
oicebus.c?view=diff&rev=3810&r1=3809&r2=3810

============================================================
==================
--- team/sruffell/voicebus/voicebus.c (original)
+++ team/sruffell/voicebus/voicebus.c Wed Feb  6 15:59:35
2008
 -527,11
+527,6 
 {
 	void *vbb;
 	vbb = kmem_cache_alloc(vb->buffer_cache,
VOICEBUS_ALLOC_FLAGS);
-	/*
-	if (vbb) {
-		memset(vbb, 0, vb->framesize);
-	}
-	*/
 	return vbb;
 }
 
 -549,12
+544,40 
 
 /*! brief Resets the voicebus hardware interface. */
 static int 
-voicebus_reset_interface(struct voicebus *vb)
+vb_reset_interface(struct voicebus *vb)
 {
 	unsigned long timeout;
 	u32 reg;
+	u8 cache_line_size;
+	const u32 DEFAULT_PCI_ACCESS = 0xfff80002;
 	BUG_ON(in_interrupt());
-	vb_setctl(vb, 0x0000, 0xfff88001);
+	
+	if (pci_read_config_byte(vb->pdev, 0x0c,
&cache_line_size)) {
+		VB_PRINTK(vb, ERR, "Failed read of cache line "

+		 "size from PCI configuration space.n");
+		return -EIO;
+	}
+
+	switch (cache_line_size) {
+	case 0x08:
+		reg = DEFAULT_PCI_ACCESS | (0x1 << 14);
+		break;
+	case 0x10:
+		reg = DEFAULT_PCI_ACCESS | (0x2 << 14);
+		break;
+	case 0x20: 
+		reg = DEFAULT_PCI_ACCESS | (0x3 << 14);
+		break;
+	default:
+		VB_PRINTK(vb, WARNING, "Host system set a cache size
"
+		 "of %d which is not supported. " 
+		 "Disabling memory write line and memory read
line.",
+		 cache_line_size);
+		reg = 0xfe584202;
+		break;
+	}
+	
+	vb_setctl(vb, 0x0000, reg | 1);
 	timeout = jiffies + HZ/10; /* 100ms interval */
 	do {
 		reg = vb_getctl(vb, 0x0000);
 -569,7
+592,6 
 	vb_cleanup_descriptors(vb, &vb->txd);
 	vb_cleanup_descriptors(vb, &vb->rxd);
 
-	vb_setctl(vb, 0x0000, 0xfff88000);
 	/* Pass bad packets, runt packets, disable SQE function,
 	 * store-and-forward */
 	vb_setctl(vb, 0x0030, 0x00280048);
 -753,7
+775,7 
 /*!
  * brief Instruct the hardware to check for a new tx
descriptor.
  */
-static void
+inline static void
 __vb_tx_demand_poll(struct voicebus *vb) 
 {
 	__vb_setctl(vb, 0x0008, 0x00000000);
 -764,7
+786,7 
  * descriptor. 
  */
 static void
-voicebus_tx_demand_poll(struct voicebus *vb)
+vb_tx_demand_poll(struct voicebus *vb)
 {
 	LOCKS_VOICEBUS;
 	VBLOCK(vb);
 -776,14
+798,14 
  * brief Command the hardware to check if it owns the next
receive
  * descriptor.
  */
+inline static void
+__vb_rx_demand_poll(struct voicebus *vb) 
+{
+	__vb_setctl(vb, 0x0010, 0x00000000);
+}
+
 static void
-__vb_rx_demand_poll(struct voicebus *vb) 
-{
-	__vb_setctl(vb, 0x0010, 0x00000000);
-}
-
-static void
-voicebus_rx_demand_poll(struct voicebus *vb)
+vb_rx_demand_poll(struct voicebus *vb)
 {
 	LOCKS_VOICEBUS;
 	VBLOCK(vb);
 -818,9
+840,6 
  * When the VoiceBus interface is started, it is actively
transferring
  * frames to and from the backend of the card.  This means
the card will
  * generate interrupts. 
- *
- * Before calling this function, callers should have at
least two buffers 
- * queued for transmit.
  *
  * This function should only be called from process
context, with interrupts
  * enabled, since it can sleep while running the self
checks.
 -842,7
+861,7 
 		return -EBUSY;
 	}
 
-	if ((ret=voicebus_reset_interface(vb))) {
+	if ((ret=vb_reset_interface(vb))) {
 		return ret;
 	}
 	
 -1010,7
+1029,7 
 #elif VOICEBUS_DEFERRED == TASKLET
 	tasklet_kill(&vb->tasklet);
 #endif
-	voicebus_reset_interface(vb);
+	vb_reset_interface(vb);
 #if VOICEBUS_DEFERRED != TIMER
 	free_irq(vb->pdev->irq, vb);
 #endif
 -1231,8
+1250,8 
 	}
 
 	if (unlikely(underrun)) {
-		voicebus_rx_demand_poll(vb);
-		voicebus_tx_demand_poll(vb);
+		vb_rx_demand_poll(vb);
+		vb_tx_demand_poll(vb);
 		clear_bit(TX_UNDERRUN, &vb->flags);
 	}
 
 -1349,7
+1368,8 
 	*vbp = NULL;
 	vb = kmalloc(sizeof(*vb), GFP_KERNEL);
 	if (NULL == vb) {
-		VB_PRINTK(vb, DEBUG, "Failed to allocate memory for
voicebus interface.n");
+		VB_PRINTK(vb, DEBUG, "Failed to allocate memory for
voicebus "
+			"interface.n");
 		retval = -ENOMEM;
 		goto cleanup;
 	}


_______________________________________________
--Bandwidth and Colocation Provided by http://www.api-digital.c
om--

zaptel-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/zaptel-commits

[1]

about | contact  Other archives ( Real Estate discussion Medical topics )