[zaptel-commits] kpfleming: branch 1.4 r1878 - in /branches/1.4: ./ wct4xxp/

zaptel-commits at lists.digium.com zaptel-commits at lists.digium.com
Mon Jan 22 12:25:22 MST 2007


Author: kpfleming
Date: Mon Jan 22 13:25:21 2007
New Revision: 1878

URL: http://svn.digium.com/view/zaptel?view=rev&rev=1878
Log:
Merged revisions 1877 via svnmerge from 
https://origsvn.digium.com/svn/zaptel/branches/1.2

........
r1877 | kpfleming | 2007-01-22 12:58:34 -0600 (Mon, 22 Jan 2007) | 2 lines

update to PR47 Octasic API kit, and use new GetCapacityPins API call to only attempt downloading the correct firmware for the modules we find

........

Modified:
    branches/1.4/   (props changed)
    branches/1.4/wct4xxp/base.c
    branches/1.4/wct4xxp/vpm450m.c
    branches/1.4/wct4xxp/vpm450m.h

Propchange: branches/1.4/
------------------------------------------------------------------------------
Binary property 'branch-1.2-merged' - no diff available.

Propchange: branches/1.4/
------------------------------------------------------------------------------
--- svn:externals (original)
+++ svn:externals Mon Jan 22 13:25:21 2007
@@ -1,2 +1,2 @@
 menuselect https://origsvn.digium.com/svn/menuselect/branches/1.0
-oct612x http://svn.digium.com/svn/octasic_api/oct612x/tags/PR43-01/software
+oct612x http://svn.digium.com/svn/octasic_api/oct612x/tags/PR47-00/software

Modified: branches/1.4/wct4xxp/base.c
URL: http://svn.digium.com/view/zaptel/branches/1.4/wct4xxp/base.c?view=diff&rev=1878&r1=1877&r2=1878
==============================================================================
--- branches/1.4/wct4xxp/base.c (original)
+++ branches/1.4/wct4xxp/base.c Mon Jan 22 13:25:21 2007
@@ -42,10 +42,8 @@
 #endif
 #ifdef LINUX26
 #include <linux/moduleparam.h>
-#ifdef HOTPLUG_FIRMWARE
-#include <linux/firmware.h>
-#endif
-#endif
+#endif
+
 #include "wct4xxp.h"
 #include "vpm450m.h"
 
@@ -3100,7 +3098,14 @@
 	unsigned int check1, check2;
 	int laws[4] = { 0, };
 	int x;
-	int passedinit = 0;
+	struct firmware embedded_firmware;
+	const struct firmware *firmware = &embedded_firmware;
+#if !defined(HOTPLUG_FIRMWARE)
+	extern const u32 _binary_OCT6114_64D_size;
+	extern const u32 _binary_OCT6114_128D_size;
+	extern const u8 *_binary_OCT6114_64D_start;
+	extern const u8 *_binary_OCT6114_128D_start;
+#endif
 
 	if (!vpmsupport) {
 		printk("VPM450: Support Disabled\n");
@@ -3126,46 +3131,35 @@
 			laws[x] = 1;
 	}
 
-#ifndef HOTPLUG_FIRMWARE
-	if ((wc->vpm450m = init_vpm450m(wc, laws, wc->numspans)))
-		passedinit = 1;
+	switch (get_vpm450m_capacity(wc)) {
+	case 64:
+#if defined(HOTPLUG_FIRMWARE)
+		if ((request_firmware(&firmware, oct064_firmware, &wc->dev->dev) != 0) ||
+		    !firmware) {
+			printk("VPM450: firmware %s not available from userspace\n", oct064_firmware);
+			return;
+		}
 #else
-	{
-		const struct firmware *firmware;
-		
-		/* if this is a 4-span card, just try using the 128-channel firmware;
-		   otherwise, try both, because a 2-span card could potentially have
-		   a 128-channel Octasic module
-		*/
-		if (wc->numspans < 3) {
-			if ((request_firmware(&firmware, oct064_firmware, &wc->dev->dev) != 0) ||
-			    !firmware) {
-				printk("VPM450: firmware %s not available from userspace\n", oct064_firmware);
-				return;
-			} else {
-				if ((wc->vpm450m = init_vpm450m(wc, laws, wc->numspans, firmware)))
-					passedinit=1;
-
-				release_firmware(firmware);
-			}
-		}
-
-		if (!passedinit) {
-			if ((request_firmware(&firmware, oct128_firmware, &wc->dev->dev) != 0) ||
-			    !firmware) {
-				printk("VPM450: firmware %s not available from userspace\n", oct128_firmware);
-				return;
-			} else {
-				if ((wc->vpm450m = init_vpm450m(wc, laws, wc->numspans, firmware)))
-					passedinit=1;
-
-				release_firmware(firmware);
-			}
-		}
-	}
-#endif
-
-	if (!passedinit) {
+		embedded_firmware.data = _binary_OCT6114D_64D_ima_start;
+		embedded_firmware.size = _binary_OCT6114D_64D_ima_start;
+#endif
+	case 128:
+#if defined(HOTPLUG_FIRMWARE)
+		if ((request_firmware(&firmware, oct128_firmware, &wc->dev->dev) != 0) ||
+		    !firmware) {
+			printk("VPM450: firmware %s not available from userspace\n", oct128_firmware);
+			return;
+		}
+#else
+		embedded_firmware.data = _binary_OCT6114D_128D_ima_start;
+		embedded_firmware.size = _binary_OCT6114D_128D_ima_start;
+#endif
+	default:
+		printk("Unsupported channel capacity found on VPM module.\n");
+		return;
+	}
+
+	if (!(wc->vpm450m = init_vpm450m(wc, laws, wc->numspans, firmware))) {
 		printk("VPM450: Failed to initialize\n");
 		return;
 	}

Modified: branches/1.4/wct4xxp/vpm450m.c
URL: http://svn.digium.com/view/zaptel/branches/1.4/wct4xxp/vpm450m.c?view=diff&rev=1878&r1=1877&r2=1878
==============================================================================
--- branches/1.4/wct4xxp/vpm450m.c (original)
+++ branches/1.4/wct4xxp/vpm450m.c Mon Jan 22 13:25:21 2007
@@ -10,12 +10,9 @@
 #include <linux/vmalloc.h>
 #include <linux/string.h>
 #include <linux/time.h>
-#ifdef HOTPLUG_FIRMWARE
-#include <linux/firmware.h>
-#endif
-
+
+#include "vpm450m.h"
 #include "oct6100api/oct6100_api.h"
-#include "vpm450m.h"
 
 /* API for Octasic access */
 UINT32 Oct6100UserGetTime(tPOCT6100_GET_TIME f_pTime)
@@ -284,11 +281,8 @@
 	
 	Oct6100InterruptServiceRoutineDef(&InterruptFlags);
 	Oct6100InterruptServiceRoutine(vpm450m->pApiInstance, &InterruptFlags);
-	if (InterruptFlags.fToneEventsPending) {
-		printk("VPM450M: Tone events pending!\n");
-		return 1;
-	}
-	return 0;
+
+	return InterruptFlags.fToneEventsPending ? 1 : 0;
 }
 
 int vpm450m_getdtmf(struct vpm450m *vpm450m, int *channel, int *tone, int *start)
@@ -370,11 +364,28 @@
 	return 0;
 }
 
-#ifdef HOTPLUG_FIRMWARE
+unsigned int get_vpm450m_capacity(void *wc)
+{
+	UINT32 ulResult;
+
+	tOCT6100_API_GET_CAPACITY_PINS CapacityPins;
+
+	Oct6100ApiGetCapacityPinsDef(&CapacityPins);
+	CapacityPins.pProcessContext = wc;
+	CapacityPins.ulMemoryType = cOCT6100_MEM_TYPE_DDR;
+	CapacityPins.fEnableMemClkOut = TRUE;
+	CapacityPins.ulMemClkFreq = cOCT6100_MCLK_FREQ_133_MHZ;
+
+	ulResult = Oct6100ApiGetCapacityPins(&CapacityPins);
+	if (ulResult != cOCT6100_ERR_OK) {
+		printk("Failed to get chip capacity, code %08x!\n", ulResult);
+		return 0;
+	}
+
+	return CapacityPins.ulCapacityValue;
+}
+
 struct vpm450m *init_vpm450m(void *wc, int *isalaw, int numspans, const struct firmware *firmware)
-#else
-struct vpm450m *init_vpm450m(void *wc, int *isalaw, int numspans)
-#endif
 {
 	tOCT6100_CHIP_OPEN ChipOpen;
 	tOCT6100_GET_INSTANCE_SIZE InstanceSize;
@@ -383,9 +394,9 @@
 	struct vpm450m *vpm450m;
 	int x,y,law;
 	
-	vpm450m = kmalloc(sizeof(struct vpm450m), GFP_KERNEL);
-	if (!vpm450m)
+	if (!(vpm450m = kmalloc(sizeof(struct vpm450m), GFP_KERNEL)))
 		return NULL;
+
 	memset(vpm450m, 0, sizeof(struct vpm450m));
 	for (x=0;x<128;x++)
 		vpm450m->ecmode[x] = -1;
@@ -401,24 +412,8 @@
 
 	ChipOpen.pProcessContext = wc;
 
-#ifdef HOTPLUG_FIRMWARE
 	ChipOpen.pbyImageFile = firmware->data;
 	ChipOpen.ulImageSize = firmware->size;
-#else
-	if (vpm450m->numchans > 64) {
-		extern const unsigned char _binary_OCT6114_128D_ima_start[];
-		extern const unsigned int _binary_OCT6114_128D_ima_size;
-
-		ChipOpen.pbyImageFile = _binary_OCT6114_128D_ima_start;
-		ChipOpen.ulImageSize = _binary_OCT6114_128D_ima_size;
-	} else {
-		extern const unsigned char _binary_OCT6114_64D_ima_start[];
-		extern const unsigned int _binary_OCT6114_64D_ima_size;
-
-		ChipOpen.pbyImageFile = _binary_OCT6114_64D_ima_start;
-		ChipOpen.ulImageSize = _binary_OCT6114_64D_ima_size;
-	}
-#endif	
 
 	ChipOpen.fEnableMemClkOut = TRUE;
 	ChipOpen.ulMemClkFreq = cOCT6100_MCLK_FREQ_133_MHZ;
@@ -448,9 +443,7 @@
 		return NULL;
 	}
 
-	printk("Before chip open!\n");
 	ulResult = Oct6100ChipOpen(vpm450m->pApiInstance, &ChipOpen);
-	printk("After chip open!\n");
 	if (ulResult != cOCT6100_ERR_OK) {
 		printk("Failed to open chip, code %08x!\n", ulResult);
 		kfree(vpm450m);
@@ -504,6 +497,7 @@
 			}
 		}
 	}
+
 	return vpm450m;
 }
 
@@ -511,6 +505,7 @@
 {
 	UINT32 ulResult;
 	tOCT6100_CHIP_CLOSE ChipClose;
+
 	Oct6100ChipCloseDef(&ChipClose);
 	ulResult = Oct6100ChipClose(vpm450m->pApiInstance, &ChipClose);
 	if (ulResult != cOCT6100_ERR_OK) {

Modified: branches/1.4/wct4xxp/vpm450m.h
URL: http://svn.digium.com/view/zaptel/branches/1.4/wct4xxp/vpm450m.h?view=diff&rev=1878&r1=1877&r2=1878
==============================================================================
--- branches/1.4/wct4xxp/vpm450m.h (original)
+++ branches/1.4/wct4xxp/vpm450m.h Mon Jan 22 13:25:21 2007
@@ -24,23 +24,24 @@
 #ifndef _VPM450M_H
 #define _VPM450M_H
 
+#ifdef LINUX26
+#include <linux/firmware.h>
+#else
+struct firmware {
+	size_t size;
+	u8 *data;
+};
+#endif
+
 struct vpm450m;
-
-#ifdef HOTPLUG_FIRMWARE
-struct firmware;
-#endif
 
 /* From driver */
 unsigned int oct_get_reg(void *data, unsigned int reg);
 void oct_set_reg(void *data, unsigned int reg, unsigned int val);
 
 /* From vpm450m */
-#ifdef HOTPLUG_FIRMWARE
 struct vpm450m *init_vpm450m(void *wc, int *isalaw, int numspans, const struct firmware *firmware);
-#else
-struct vpm450m *init_vpm450m(void *wc, int *isalaw, int numspans);
-#endif
-
+unsigned int get_vpm450m_capacity(void *wc);
 void vpm450m_setec(struct vpm450m *instance, int channel, int eclen);
 void vpm450m_setdtmf(struct vpm450m *instance, int channel, int dtmfdetect, int dtmfmute);
 int vpm450m_checkirq(struct vpm450m *vpm450m);



More information about the zaptel-commits mailing list