[svn-commits] kpfleming: branch mogorman/zaptel-1.2-transcoder r1952 - in /team/mogorman/za...

svn-commits at lists.digium.com svn-commits at lists.digium.com
Tue Jan 23 21:15:13 MST 2007


Author: kpfleming
Date: Tue Jan 23 22:15:13 2007
New Revision: 1952

URL: http://svn.digium.com/view/zaptel?view=rev&rev=1952
Log:
update to branch base
more minor cleanups, add some comments, etc. to tc4xxp driver

Modified:
    team/mogorman/zaptel-1.2-transcoder/   (props changed)
    team/mogorman/zaptel-1.2-transcoder/Makefile
    team/mogorman/zaptel-1.2-transcoder/wct1xxp.c
    team/mogorman/zaptel-1.2-transcoder/wctc4xxp/base.c
    team/mogorman/zaptel-1.2-transcoder/wctdm.c
    team/mogorman/zaptel-1.2-transcoder/wctdm24xxp.c
    team/mogorman/zaptel-1.2-transcoder/wcte11xp.c

Propchange: team/mogorman/zaptel-1.2-transcoder/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Tue Jan 23 22:15:13 2007
@@ -1,1 +1,1 @@
-/branches/1.2:1-1934
+/branches/1.2:1-1951

Modified: team/mogorman/zaptel-1.2-transcoder/Makefile
URL: http://svn.digium.com/view/zaptel/team/mogorman/zaptel-1.2-transcoder/Makefile?view=diff&rev=1952&r1=1951&r2=1952
==============================================================================
--- team/mogorman/zaptel-1.2-transcoder/Makefile (original)
+++ team/mogorman/zaptel-1.2-transcoder/Makefile Tue Jan 23 22:15:13 2007
@@ -315,7 +315,12 @@
 	tar -zxf mISDNuser.tar.gz
 	$(MAKE) -C mISDNuser install
 
-install: all devices firmware
+xpp-install: FORCE
+ifneq (,$(findstring xpp,$(obj-m)))
+	@$(MAKE) -C xpp/utils install
+endif
+
+install: all devices firmware xpp-install
 	install -D -m 755 ztcfg $(INSTALL_PREFIX)/sbin/ztcfg
 	if [ -f sethdlc-new ]; then \
 		install -D -m 755 sethdlc-new $(INSTALL_PREFIX)/sbin/sethdlc; \

Modified: team/mogorman/zaptel-1.2-transcoder/wct1xxp.c
URL: http://svn.digium.com/view/zaptel/team/mogorman/zaptel-1.2-transcoder/wct1xxp.c?view=diff&rev=1952&r1=1951&r2=1952
==============================================================================
--- team/mogorman/zaptel-1.2-transcoder/wct1xxp.c (original)
+++ team/mogorman/zaptel-1.2-transcoder/wct1xxp.c Tue Jan 23 22:15:13 2007
@@ -1134,14 +1134,14 @@
 	int x;
 
 	ints = inb(wc->ioaddr + WC_INTSTAT);
-	outb(ints, wc->ioaddr + WC_INTSTAT);
-
 	if (!ints)
 #ifdef LINUX26
 		return IRQ_NONE;
 #else
 		return;
 #endif		
+
+	outb(ints, wc->ioaddr + WC_INTSTAT);
 
 	if (!wc->intcount) {
 		if (debug) printk("Got interrupt: 0x%04x\n", ints);

Modified: team/mogorman/zaptel-1.2-transcoder/wctc4xxp/base.c
URL: http://svn.digium.com/view/zaptel/team/mogorman/zaptel-1.2-transcoder/wctc4xxp/base.c?view=diff&rev=1952&r1=1951&r2=1952
==============================================================================
--- team/mogorman/zaptel-1.2-transcoder/wctc4xxp/base.c (original)
+++ team/mogorman/zaptel-1.2-transcoder/wctc4xxp/base.c Tue Jan 23 22:15:13 2007
@@ -22,7 +22,6 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
  *
  */
-
 
 #include <linux/kernel.h>
 #include <linux/errno.h>
@@ -277,8 +276,8 @@
 			if ( (((wc->cmdq_wndx + 1) % MAX_COMMANDS) == wc->cmdq_rndx) && debug ) \
 				module_printk("cmdq is full\n"); \
 			else { \
-				unsigned char fifo[OTHER_CMD_LEN] = command; \
-				int i; \
+				u8 fifo[OTHER_CMD_LEN] = command; \
+				u32 i; \
 				wc->cmdq[wc->cmdq_wndx].cmdlen = length; \
 				for (i = 0; i < length; i++) \
 					wc->cmdq[wc->cmdq_wndx].cmd[i] = fifo[i]; \
@@ -499,6 +498,10 @@
 
 	o2 = wc->tdbl * 4;
 		
+	/* Yes... this is a busy loop, that is not interruptible. However, it is
+	   highly unlikely (and testing proves) that the wait for a descriptor
+	   to become available will ever be long enough for this to be an issue.
+	*/
 	do {} while ((le32_to_cpu(wc->descripchunk[o2]) & 0x80000000));
 
 	xmt_length = max(wc->cmdq[wc->cmdq_rndx].cmdlen, 64U);
@@ -726,7 +729,7 @@
 	struct zt_transcoder_channel *ztc = NULL;
 	struct zt_transcode_header *zth = NULL;
 	struct dte_state *st = NULL;
-	int o2,i;
+	int o2, i;
 	unsigned char rseq, rcodec;
 	unsigned int rcommand, rchannel, rlen, rtp_rseq, rtp_eseq;
 	u8 *chars = NULL;
@@ -896,7 +899,6 @@
 	}
 }
 
-
 static int check_descriptor(struct wcdte *wc)
 {
 	int o2;
@@ -1062,25 +1064,23 @@
 	setctl(wc, 0x0028, reg);
 }
 
-static void stop_dma(struct wcdte *wc)
-{
-	unsigned int reg;
-
+static void disable_interrupts(struct wcdte *wc)	
+{
 	/* Disable interrupts */
 	setintmask(wc, 0x00000000);
 	setctl(wc, 0x0084, 0x00000000);
+}
+
+static void stop_dma(struct wcdte *wc)
+{
+	unsigned int reg;
+
+	disable_interrupts(wc);
 	setctl(wc, 0x0048, 0x00000000);
 	/* Reset the part to be on the safe side */
 	reg = getctl(wc, 0x0000);
 	reg |= 0x00000001;
 	setctl(wc, 0x0000, reg);
-}
-
-static void disable_interrupts(struct wcdte *wc)	
-{
-	/* Disable interrupts */
-	setintmask(wc, 0x00000000);
-	setctl(wc, 0x0084, 0x00000000);
 }
 
 static int waitfor_csmencaps(struct wcdte *wc, unsigned int mask, int use_mask)
@@ -1096,14 +1096,12 @@
 	wc->last_command_sent = 0;
 
 	if (ret < 0) {
-		if (debug)
-			module_printk("wcdte error: Wait interrupted, need to stop boot (ret = %d)\n", ret);
+		debug_printk(1, "Wait interrupted, need to stop boot (ret = %d)\n", ret);
 		return 1;
 	}
 
-	if (ret == 0) {
-		if (debug)
-			module_printk("wcdte error: Waitfor CSMENCAPS response timed out (ret = %d)\n", ret);
+	if (!ret) {
+		debug_printk(1, "Waitfor CSMENCAPS response timed out (ret = %d)\n", ret);
 		return 2;
 	}
 
@@ -1186,39 +1184,41 @@
 #if !defined(USE_TEST_HW)
 	/* Turn off auto negotiation */
 	write_phy(wc, 0, 0x2100);
-	if (debug)
-		module_printk("wctc4xxp: PHY register 0 = %X", read_phy(wc, 0));
+
+	debug_printk(1, "PHY register 0 = %X", read_phy(wc, 0));
 	
 	/* Set reset */
 	setctl(wc, 0x00A0, 0x04000000);
 
-	/* Wait 1000msec to ensure processor reset */
+	/* Wait 1000ms to ensure processor reset */
 	mdelay(1000);
 
 	/* Clear reset */
 	setctl(wc, 0x00A0, 0x04080000);
 
-	/* Waitfor ethernet link */
+	/* Wait for Ethernet link */
 	delay_count = 0;
 	do {
+		delay_count++;
+		if (delay_count >= 100) {
+			module_printk("Failed to link to DTE processor!\n");
+			return 1;
+		}
+
 		reg = getctl(wc, 0x00fc);
 		mdelay(100);
-		delay_count++;
-
-		if (delay_count >= 100) {
-			module_printk("wcdte error: Failed to link to DTE processor!\n");
-			return(1);
-		}
 	} while ((reg & 0xE0000000) != 0xE0000000);
 
 	/* Turn off booted LED */
 	setctl(wc, 0x00A0, 0x04084000);
 #endif /* !defined(USE_TEST_HW) */
 
-	reg = getctl(wc, 0x00fc);
-	if (debug)
-		module_printk("wctc4xxp: LINK STATUS: reg(0xfc) = %X\n", reg);
-
+	if (debug) {
+		reg = getctl(wc, 0x00fc);
+		debug_printk(1, "LINK STATUS: reg(0xfc) = %X\n", reg);
+	}
+
+	/* TODO: what is this for? we don't refer to the read value anywhere */
 	reg = getctl(wc, 0x00A0);
 
 	byteloc = 17;
@@ -1231,10 +1231,9 @@
 		byteloc += 2;
 		
 		down(&wc->cmdqsem);
-		if ( (((wc->cmdq_wndx + 1) % MAX_COMMANDS) == wc->cmdq_rndx) && debug )
-			module_printk("wcdte error: cmdq is full.\n");
-		else
-		{
+		if (((wc->cmdq_wndx + 1) % MAX_COMMANDS) == wc->cmdq_rndx) {
+			debug_printk(1, "wcdte error: cmdq is full.\n");
+		} else {
 			wc->cmdq[wc->cmdq_wndx].cmdlen = length;
 			for (i = 0; i < length; i++)
 				wc->cmdq[wc->cmdq_wndx].cmd[i] = firmware->data[byteloc++];
@@ -1246,7 +1245,7 @@
 		
 		ret = waitfor_csmencaps(wc, RCV_CSMENCAPS_ACK, 1);
 		if (ret == 1)
-			return(1);
+			return 1;
 		else if (ret == 2)		/* Retransmit if dte processor times out */
 			byteloc = last_byteloc;
 		j++;
@@ -1259,10 +1258,9 @@
 	
 	/* Turn on booted LED */
 	setctl(wc, 0x00A0, 0x04080000);
-	if (debug)
-		module_printk("wctc4xxp: Successfully booted DTE processor.\n");
-
-	return(0);
+	debug_printk(1, "Successfully booted DTE processor.\n");
+
+	return 0;
 }
 
 static int create_channel(struct wcdte *wc, int simple, int complicated, int part1_id,
@@ -1353,7 +1351,8 @@
 	send_cmd(wc, CMD_MSG_TDM_OPT(wc->seq_num++), CMD_MSG_TDM_OPT_LEN, 0x0435);
 #endif
 
-	wc->timeout = HZ/100 + 1; 	/* 10msec */
+	/* TODO: this may be an invalid assumption... HZ is not always going to be 1000	*/
+	wc->timeout = HZ/100 + 1; 	/* 10ms */
 
 	return 0;
 }
@@ -1372,8 +1371,8 @@
 	for (x = 0; x < (sizeof(ifaces) / sizeof(ifaces[0])); x++)
 		if (!ifaces[x]) break;
 
-	if (x >= WC_MAX_IFACES) {
-		module_printk("wctc4xxp: Too many interfaces\n");
+	if (x == (sizeof(ifaces) / sizeof(ifaces[0]))) {
+		module_printk("Too many interfaces\n");
 		return -EIO;
 	}
 
@@ -1403,7 +1402,7 @@
 	/* Allocate enough memory for all TX buffers, RX buffers, and descriptors */
 	wc->writechunk = (int *) pci_alloc_consistent(pdev, PCI_WINDOW_SIZE, &wc->writedma);
 	if (!wc->writechunk) {
-		module_printk("wctc4xxp: Unable to allocate DMA-able memory\n");
+		module_printk("Unable to allocate DMA-able memory\n");
 		if (wc->freeregion)
 			release_region(wc->iobase, 0xff);
 
@@ -1429,7 +1428,7 @@
 
 #ifdef HOTPLUG_FIRMWARE
 	if ((request_firmware(&firmware, tc400m_firmware, &wc->dev->dev) != 0) || !firmware) {
-		module_printk("wctc4xxp: firmware %s not available from userspace\n", dte_firmware);
+		module_printk("firmware %s not available from userspace\n", tc400m_firmware);
 		return -1;
 	}
 #else
@@ -1444,21 +1443,22 @@
 	min_numchannels = min(g723_numchannels, g729_numchannels);
 	
 	/* Setup Encoders and Decoders */
+	/* TODO: parse this value properly */
 	
 	if (!mode || strlen(mode) < 4) {
-		sprintf(wc->complexname, "g.729a / g.723.1 5.3kbps");
+		sprintf(wc->complexname, "G.729A / G.723.1 5.3Kbps");
 		complexfmts = ZT_FORMAT_G729A | ZT_FORMAT_G723_1;
 		wc->numchannels = min_numchannels;
 	} else if (mode[3] == '9') {	/* "g729" */
-		sprintf(wc->complexname, "g.729a");
+		sprintf(wc->complexname, "G.729A");
 		complexfmts = ZT_FORMAT_G729A;
 		wc->numchannels = g729_numchannels;
 	} else if (mode[3] == '3') {	/* "g723" */
-		sprintf(wc->complexname, "g.723.1 5.3kbps");
+		sprintf(wc->complexname, "G.723.1 5.3Kbps");
 		complexfmts = ZT_FORMAT_G723_1;
 		wc->numchannels = g723_numchannels;
 	} else {
-		sprintf(wc->complexname, "g.729a / g.723.1 5.3kbps");
+		sprintf(wc->complexname, "G.729A / G.723.1 5.3Kbps");
 		complexfmts = ZT_FORMAT_G729A | ZT_FORMAT_G723_1;
 		wc->numchannels = min_numchannels;
 	}
@@ -1492,11 +1492,11 @@
 	udecode->operation = uencode->operation = dte_operation;
 	
 	for (x = 0;x < wc->numchannels; x++) {
-		dte_init_state(encoders + x, 1, x, wc);
+		dte_init_state(&encoders[x], 1, x, wc);
 		encoders[x].encoder = 1;
-		dte_init_state(decoders + x, 0, x, wc);
-		uencode->channels[x].pvt = encoders + x;
-		udecode->channels[x].pvt = decoders + x;
+		dte_init_state(&decoders[x], 0, x, wc);
+		uencode->channels[x].pvt = &encoders[x];
+		udecode->channels[x].pvt = &decoders[x];
 	}
 	
 	wc->uencode = uencode;
@@ -1511,8 +1511,8 @@
 	/* Keep track of which device we are */
 	pci_set_drvdata(pdev, wc);
 	
-	if (request_irq(pdev->irq, interrupt_handler, SA_SHIRQ, "tc400b", wc)) {
-		module_printk("wctc4xxp: Unable to request IRQ %d\n", pdev->irq);
+	if (request_irq(pdev->irq, interrupt_handler, SA_SHIRQ, driver.name, wc)) {
+		module_printk("Unable to request IRQ %d\n", pdev->irq);
 		if (wc->freeregion)
 			release_region(wc->iobase, 0xFF);
 		pci_free_consistent(pdev, PCI_WINDOW_SIZE, (void *) wc->writechunk, wc->writedma);
@@ -1567,11 +1567,12 @@
 		return -EIO;
 	}
 		
-	reg = getctl(wc, 0x00fc);
-	if (debug)
-		module_printk("wcdte debug: (post-boot) Reg fc is %08x\n", reg);
-	
- 	module_printk("wctc4xxp: %s supporting '%s' with firmware version '%d'\n", wc->variety, wc->complexname, firmware_ver);
+	if (debug) {
+		reg = getctl(wc, 0x00fc);
+		debug_printk(1, "(post-boot) Reg fc is %08x\n", reg);
+	}
+	
+ 	module_printk("%s supporting '%s' with firmware version '%d'\n", wc->variety, wc->complexname, firmware_ver);
 	
 	res = 0;
 
@@ -1596,8 +1597,8 @@
 		return;
 
 	if (debug) {
-		module_printk("wctc4xxp debug: wc->ztsnd_rtx = %d\n", wc->ztsnd_rtx);
-		module_printk("wctc4xxp debug: wc->ztsnd_0010_rtx = %d\n", wc->ztsnd_0010_rtx);
+		debug_printk(1, "wc->ztsnd_rtx = %d\n", wc->ztsnd_rtx);
+		debug_printk(1, "wc->ztsnd_0010_rtx = %d\n", wc->ztsnd_0010_rtx);
 		
 		for(i = 0; i < wc->numchannels; i++) {
 			ztc_en = &(wc->uencode->channels[i]);
@@ -1606,8 +1607,8 @@
 			ztc_de = &(wc->udecode->channels[i]);
 			st_de = ztc_de->pvt;
 			
-			module_printk("wctc4xxp debug: en[%d] snt = %d, rcv = %d [%d]\n", i, st_en->packets_sent, st_en->packets_received, st_en->packets_sent - st_en->packets_received);
-			module_printk("wctc4xxp debug: de[%d] snt = %d, rcv = %d [%d]\n", i, st_de->packets_sent, st_de->packets_received, st_de->packets_sent - st_de->packets_received);
+			debug_printk(1, "en[%d] snt = %d, rcv = %d [%d]\n", i, st_en->packets_sent, st_en->packets_received, st_en->packets_sent - st_en->packets_received);
+			debug_printk(1, "de[%d] snt = %d, rcv = %d [%d]\n", i, st_de->packets_sent, st_de->packets_received, st_de->packets_sent - st_de->packets_received);
 		}
 	}
 	
@@ -1634,7 +1635,6 @@
 	/* Release span, possibly delayed */
 	release(wc);
 }
-
 
 static struct pci_device_id pci_tbl[] = {
 #ifndef USE_TEST_HW

Modified: team/mogorman/zaptel-1.2-transcoder/wctdm.c
URL: http://svn.digium.com/view/zaptel/team/mogorman/zaptel-1.2-transcoder/wctdm.c?view=diff&rev=1952&r1=1951&r2=1952
==============================================================================
--- team/mogorman/zaptel-1.2-transcoder/wctdm.c (original)
+++ team/mogorman/zaptel-1.2-transcoder/wctdm.c Tue Jan 23 22:15:13 2007
@@ -1032,7 +1032,6 @@
 	int mode;
 
 	ints = inb(wc->ioaddr + WC_INTSTAT);
-	outb(ints, wc->ioaddr + WC_INTSTAT);
 
 	if (!ints)
 #ifdef LINUX26
@@ -1040,6 +1039,8 @@
 #else
 		return;
 #endif		
+
+	outb(ints, wc->ioaddr + WC_INTSTAT);
 
 	if (ints & 0x10) {
 		/* Stop DMA, wait for watchdog */

Modified: team/mogorman/zaptel-1.2-transcoder/wctdm24xxp.c
URL: http://svn.digium.com/view/zaptel/team/mogorman/zaptel-1.2-transcoder/wctdm24xxp.c?view=diff&rev=1952&r1=1951&r2=1952
==============================================================================
--- team/mogorman/zaptel-1.2-transcoder/wctdm24xxp.c (original)
+++ team/mogorman/zaptel-1.2-transcoder/wctdm24xxp.c Tue Jan 23 22:15:13 2007
@@ -1428,7 +1428,6 @@
 
 	/* Read and clear interrupts */
 	ints = wctdm_getctl(wc, 0x0028);
-	wctdm_setctl(wc, 0x0028, ints);
 
 	if (!ints)
 #ifdef LINUX26
@@ -1436,6 +1435,9 @@
 #else
 		return;
 #endif		
+
+	wctdm_setctl(wc, 0x0028, ints);
+
 	ints &= wc->intmask;
 	if (ints & 0x00000041) {
 		do {

Modified: team/mogorman/zaptel-1.2-transcoder/wcte11xp.c
URL: http://svn.digium.com/view/zaptel/team/mogorman/zaptel-1.2-transcoder/wcte11xp.c?view=diff&rev=1952&r1=1951&r2=1952
==============================================================================
--- team/mogorman/zaptel-1.2-transcoder/wcte11xp.c (original)
+++ team/mogorman/zaptel-1.2-transcoder/wcte11xp.c Tue Jan 23 22:15:13 2007
@@ -1265,14 +1265,14 @@
 	int x;
 
 	ints = inb(wc->ioaddr + WC_INTSTAT);
-	outb(ints, wc->ioaddr + WC_INTSTAT);
-
 	if (!ints)
 #ifdef LINUX26
 		return IRQ_NONE;
 #else
 		return;
 #endif		
+
+	outb(ints, wc->ioaddr + WC_INTSTAT);
 
 	if (!wc->intcount) {
 		if (debug) printk("Got interrupt: 0x%04x\n", ints);



More information about the svn-commits mailing list