[zaptel-commits] tzafrir: branch tzafrir/xpp_1.2 r1551 - in
/team/tzafrir/xpp_1.2/xpp: ./ utils/
zaptel-commits at lists.digium.com
zaptel-commits at lists.digium.com
Sat Nov 4 02:53:25 MST 2006
Author: tzafrir
Date: Sat Nov 4 03:53:23 2006
New Revision: 1551
URL: http://svn.digium.com/view/zaptel?rev=1551&view=rev
Log:
Merging xpp driver release 1.2 (rev. 2569).
* Should build well. Almost final.
* genzaptelconf: Also work when zap_autoreg=0
* README.Astribank updated for rev. 1.2.
Modified:
team/tzafrir/xpp_1.2/xpp/ (props changed)
team/tzafrir/xpp_1.2/xpp/Makefile
team/tzafrir/xpp_1.2/xpp/README.Astribank
team/tzafrir/xpp_1.2/xpp/calibrate_slics (props changed)
team/tzafrir/xpp_1.2/xpp/card_fxo.c
team/tzafrir/xpp_1.2/xpp/card_fxo.h
team/tzafrir/xpp_1.2/xpp/card_fxs.c
team/tzafrir/xpp_1.2/xpp/card_fxs.h
team/tzafrir/xpp_1.2/xpp/card_global.c
team/tzafrir/xpp_1.2/xpp/init_card_3_23 (props changed)
team/tzafrir/xpp_1.2/xpp/init_card_4_23 (props changed)
team/tzafrir/xpp_1.2/xpp/utils/ (props changed)
team/tzafrir/xpp_1.2/xpp/utils/Makefile
team/tzafrir/xpp_1.2/xpp/utils/adj_clock.8 (contents, props changed)
team/tzafrir/xpp_1.2/xpp/utils/adj_clock.c (props changed)
team/tzafrir/xpp_1.2/xpp/utils/genzaptelconf
team/tzafrir/xpp_1.2/xpp/utils/print_modes.c (props changed)
team/tzafrir/xpp_1.2/xpp/xbus-core.c
team/tzafrir/xpp_1.2/xpp/xbus-core.h
team/tzafrir/xpp_1.2/xpp/xpp_usb.c
team/tzafrir/xpp_1.2/xpp/xpp_zap.c
team/tzafrir/xpp_1.2/xpp/xpp_zap.h
team/tzafrir/xpp_1.2/xpp/xproto.c
team/tzafrir/xpp_1.2/xpp/xproto.h
Propchange: team/tzafrir/xpp_1.2/xpp/
------------------------------------------------------------------------------
--- svk:merge (added)
+++ svk:merge Sat Nov 4 03:53:23 2006
@@ -1,0 +1,1 @@
+283159da-0705-0410-b60c-f2062b4bb6ad:/components/xpp-zaptel/trunk/xpp:2600
Propchange: team/tzafrir/xpp_1.2/xpp/
------------------------------------------------------------------------------
svn:executable = calibrate_slics
Modified: team/tzafrir/xpp_1.2/xpp/Makefile
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/Makefile?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/Makefile (original)
+++ team/tzafrir/xpp_1.2/xpp/Makefile Sat Nov 4 03:53:23 2006
@@ -1,13 +1,10 @@
-EXTRA_CFLAGS = -I$(SUBDIRS) -DDEBUG -DPOLL_DIGITAL_INPUTS -DWITH_ECHO_SUPPRESSION # -DSOFT_RING
+EXTRA_CFLAGS = -g3 -I$(SUBDIRS) -DDEBUG -DPOLL_DIGITAL_INPUTS -DWITH_ECHO_SUPPRESSION # -DSOFT_RING
obj-m += xpp.o xpd_fxs.o xpd_fxo.o
# Build only supported modules
ifneq (,$(filter y m,$(CONFIG_USB)))
obj-m += xpp_usb.o
-endif
-ifneq (,$(filter y m,$(CONFIG_ZAPATA_BRI_DCHANS)))
-obj-m += xpd_bri.o
endif
xpp-y += xbus-core.o xpp_zap.o xproto.o card_global.o
Modified: team/tzafrir/xpp_1.2/xpp/README.Astribank
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/README.Astribank?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/README.Astribank (original)
+++ team/tzafrir/xpp_1.2/xpp/README.Astribank Sat Nov 4 03:53:23 2006
@@ -28,7 +28,7 @@
apart from the standard 'make install' in the zaptel directory,
run:
- make -C xpp/utils CONFIG_USB=y HOSTCC=gcc install
+ make -C xpp/utils install
Alternatively, do the following manually:
@@ -48,6 +48,16 @@
/etc/hotplug/usb/xpp_fxloader load
to load firmware.
+
+The FXS calibration script requires the perl module Time::HiRes. This
+modules is already packaged for most distributions including Debian, Fedora,
+RedHat and CentOS. To test for the existance of this module run:
+ perl -MTime::HiRes -e ''
+
+This should run cleanly (without output) if the module exists and issue
+a long error message otherwise. At least in RedHat, CentOS and Fedora-2
+until Fedora-5 it is in a package named perl-Time-HiRes. In Debian and
+Fedora-6 it is bundled with perl.
DEVICE STARTUP:
@@ -68,7 +78,7 @@
A funny way to call an Astribank device.
XPD:
-This is basically a subunit of the Astribank. It will be registered to
+This is basically a logical unit of the Astribank. It will be registered to
Zaptel as a single span. This will basically be 8 analog channels.
@@ -130,8 +140,8 @@
xpd_fxo in the modules list (the output of lsmod).
After the module xpp is loaded, you'll also be able to see the directory
-/proc/xpp . For any unit discovered there you will see a directory
-/prc/xpp/XBUS-n (where n is a number: typically 0). Once subunit have
+/proc/xpp . For any Astribank discovered there you will see a directory
+/prc/xpp/XBUS-n (where n is a number: typically 0). Once a unit have
been discovered you'll see subdirectories: /proc/xpp/XBUS-n/XPD-m (where
m may be another number: 0, 1 ,etc).
@@ -162,9 +172,9 @@
may not have been loaded yet at this stage (when the command 'modprobe
xpp_usb' returns).
-At this point the xpp driver asks the box what units it has. According to
-the answers it gets, it will figure what xpd_* modules it will need, and
-modprobe for them. At some earlier version of the driver this has
+At this point the xpp driver asks the box what logical units it has.
+According to the answers it gets, it will figure what xpd_* modules it will
+need, and modprobe for them. At some earlier version of the driver this has
required some special modprobe.conf setup, but this is no longer
the case.
@@ -185,7 +195,7 @@
Registering With Zaptel:
"""""""""""""""""""""""
-Now we finally got to the "lights party" part: the lights in a subunit
+Now we finally got to the "lights party" part: the lights in a unit
(XPD) get lit before it registers with Zaptel and are turned off after
that.
@@ -327,9 +337,9 @@
want to set their registration order manually using zt_registration in
the /proc interface.
-initialize_registers (xpd_fxs)
-The script that is run to initilize registers of the device. The default is
-/usr/share/zaptel/initialize_registers .
+initdir: (xpp)
+This is the directory containing the initialization scripts.
+The default is /usr/share/zaptel .
Setting this value could be useful if that location is inconvenient for you.
print_dbg: (all modules)
Propchange: team/tzafrir/xpp_1.2/xpp/calibrate_slics
------------------------------------------------------------------------------
--- svn:executable (original)
+++ svn:executable Sat Nov 4 03:53:23 2006
@@ -1,1 +1,1 @@
-*
+Y
Propchange: team/tzafrir/xpp_1.2/xpp/calibrate_slics
------------------------------------------------------------------------------
(empty)
Modified: team/tzafrir/xpp_1.2/xpp/card_fxo.c
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/card_fxo.c?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/card_fxo.c (original)
+++ team/tzafrir/xpp_1.2/xpp/card_fxo.c Sat Nov 4 03:53:23 2006
@@ -65,13 +65,13 @@
/*---------------- FXO Protocol Commands ----------------------------------*/
-static /* 0x0F */ DECLARE_CMD(FXO, CHAN_ENABLE, lineno_t chan, bool on);
+static /* 0x0F */ DECLARE_CMD(FXO, XPD_STATE, bool on);
static /* 0x0F */ DECLARE_CMD(FXO, CHAN_CID, lineno_t chan);
static /* 0x0F */ DECLARE_CMD(FXO, RING, lineno_t chan, bool on);
static /* 0x0F */ DECLARE_CMD(FXO, RELAY_OUT, byte which, bool on);
static bool fxo_packet_is_valid(xpacket_t *pack);
-static void fxo_packet_dump(xpacket_t *pack);
+static void fxo_packet_dump(const char *msg, xpacket_t *pack);
static int proc_fxo_info_read(char *page, char **start, off_t off, int count, int *eof, void *data);
static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data);
static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
@@ -535,14 +535,14 @@
return ret;
}
-static /* 0x0F */ HOSTCMD(FXO, CHAN_ENABLE, lineno_t chan, bool on)
+static /* 0x0F */ HOSTCMD(FXO, XPD_STATE, bool on)
{
int ret = 0;
int i;
BUG_ON(!xbus);
BUG_ON(!xpd);
- DBG("%s/%s/%d: %s\n", xbus->busname, xpd->xpdname, chan, (on) ? "on" : "off");
+ DBG("%s/%s: %s\n", xbus->busname, xpd->xpdname, (on) ? "on" : "off");
if(on) {
for_each_line(xpd, i) {
MARK_LED(xpd, i, LED_GREEN, LED_ON);
@@ -725,7 +725,7 @@
.RING = XPROTO_CALLER(FXO, RING),
.RELAY_OUT = XPROTO_CALLER(FXO, RELAY_OUT),
- .CHAN_ENABLE = XPROTO_CALLER(FXO, CHAN_ENABLE),
+ .XPD_STATE = XPROTO_CALLER(FXO, XPD_STATE),
.CHAN_CID = XPROTO_CALLER(FXO, CHAN_CID),
.SYNC_SOURCE = XPROTO_CALLER(GLOBAL, SYNC_SOURCE),
@@ -744,9 +744,9 @@
return xe != NULL;
}
-static void fxo_packet_dump(xpacket_t *pack)
-{
- DBG("\n");
+static void fxo_packet_dump(const char *msg, xpacket_t *pack)
+{
+ DBG("%s\n", msg);
}
/*------------------------- DAA Handling --------------------------*/
Modified: team/tzafrir/xpp_1.2/xpp/card_fxo.h
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/card_fxo.h?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/card_fxo.h (original)
+++ team/tzafrir/xpp_1.2/xpp/card_fxo.h Sat Nov 4 03:53:23 2006
@@ -28,7 +28,7 @@
XPROTO_NAME(FXO, SIG_CHANGED) = 0x06,
/**/
XPROTO_NAME(FXO, DAA_WRITE) = 0x0F, /* Write to DAA */
- XPROTO_NAME(FXO, CHAN_ENABLE) = 0x0F, /* Write to DAA */
+ XPROTO_NAME(FXO, XPD_STATE) = 0x0F, /* Write to DAA */
XPROTO_NAME(FXO, CHAN_CID) = 0x0F, /* Write to DAA */
XPROTO_NAME(FXO, RING) = 0x0F, /* Write to DAA */
XPROTO_NAME(FXO, LED) = 0x0F, /* Write to DAA */
Modified: team/tzafrir/xpp_1.2/xpp/card_fxs.c
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/card_fxs.c?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/card_fxs.c (original)
+++ team/tzafrir/xpp_1.2/xpp/card_fxs.c Sat Nov 4 03:53:23 2006
@@ -71,13 +71,13 @@
/*---------------- FXS Protocol Commands ----------------------------------*/
-static /* 0x0F */ DECLARE_CMD(FXS, CHAN_ENABLE, lineno_t chan, bool on);
+static /* 0x0F */ DECLARE_CMD(FXS, XPD_STATE, bool on);
static /* 0x0F */ DECLARE_CMD(FXS, CHAN_CID, lineno_t chan);
static /* 0x0F */ DECLARE_CMD(FXS, RING, lineno_t chan, bool on);
static /* 0x0F */ DECLARE_CMD(FXS, RELAY_OUT, byte which, bool on);
static bool fxs_packet_is_valid(xpacket_t *pack);
-static void fxs_packet_dump(xpacket_t *pack);
+static void fxs_packet_dump(const char *msg, xpacket_t *pack);
static int proc_fxs_info_read(char *page, char **start, off_t off, int count, int *eof, void *data);
static int proc_xpd_register_read(char *page, char **start, off_t off, int count, int *eof, void *data);
static int proc_xpd_register_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
@@ -514,7 +514,7 @@
return ret;
}
-static /* 0x0F */ HOSTCMD(FXS, CHAN_ENABLE, lineno_t chan, bool on)
+static /* 0x0F */ HOSTCMD(FXS, XPD_STATE, bool on)
{
int ret = 0;
int i;
@@ -526,8 +526,8 @@
BUG_ON(!xpd);
priv = xpd->priv;
spin_lock_irqsave(&xpd->lock, flags);
- DBG("%s/%s/%d: %s\n", xbus->busname, xpd->xpdname, chan, (on) ? "on" : "off");
- ret = SLIC_DIRECT_REQUEST(xbus, xpd, chan, SLIC_WRITE, 0x40, value);
+ DBG("%s/%s: %s\n", xbus->busname, xpd->xpdname, (on) ? "on" : "off");
+ ret = SLIC_DIRECT_REQUEST(xbus, xpd, ALL_CHANS, SLIC_WRITE, 0x40, value);
for_each_line(xpd, i)
xpd->lasttxhook[i] = value;
if(on) {
@@ -724,7 +724,7 @@
.RING = XPROTO_CALLER(FXS, RING),
.RELAY_OUT = XPROTO_CALLER(FXS, RELAY_OUT),
- .CHAN_ENABLE = XPROTO_CALLER(FXS, CHAN_ENABLE),
+ .XPD_STATE = XPROTO_CALLER(FXS, XPD_STATE),
.CHAN_CID = XPROTO_CALLER(FXS, CHAN_CID),
.SYNC_SOURCE = XPROTO_CALLER(GLOBAL, SYNC_SOURCE),
@@ -743,9 +743,9 @@
return xe != NULL;
}
-static void fxs_packet_dump(xpacket_t *pack)
-{
- DBG("\n");
+static void fxs_packet_dump(const char *msg, xpacket_t *pack)
+{
+ DBG("%s\n", msg);
}
/*------------------------- SLIC Handling --------------------------*/
Modified: team/tzafrir/xpp_1.2/xpp/card_fxs.h
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/card_fxs.h?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/card_fxs.h (original)
+++ team/tzafrir/xpp_1.2/xpp/card_fxs.h Sat Nov 4 03:53:23 2006
@@ -27,7 +27,7 @@
enum fxs_opcodes {
XPROTO_NAME(FXS, SIG_CHANGED) = 0x06,
/**/
- XPROTO_NAME(FXS, CHAN_ENABLE) = 0x0F, /* Write to SLIC */
+ XPROTO_NAME(FXS, XPD_STATE) = 0x0F, /* Write to SLIC */
XPROTO_NAME(FXS, CHAN_POWER) = 0x0F, /* Write to SLIC */
XPROTO_NAME(FXS, CHAN_CID) = 0x0F, /* Write to SLIC */
XPROTO_NAME(FXS, RING) = 0x0F, /* Write to SLIC */
Modified: team/tzafrir/xpp_1.2/xpp/card_global.c
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/card_global.c?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/card_global.c (original)
+++ team/tzafrir/xpp_1.2/xpp/card_global.c Sat Nov 4 03:53:23 2006
@@ -30,6 +30,15 @@
static const char rcsid[] = "$Id$";
DEF_PARM(charp,initdir, "/usr/share/zaptel", "The directory of card initialization scripts");
+/*
+ * BRI: Temporary software workaround for firmware limitation:
+ * - The BRI firmware count PCM channel number globally across subunits.
+ * - The module parameter 'bri_pcmshift' enables us to cheat and shift
+ * each B-channel, 4 bits for each subsequent subunit.
+ * - Eventually, this should be fixed in the firmware, otherwise we won't
+ * handle PRI (all the space we have is 32bits).
+ */
+DEF_PARM(bool,bri_pcmshift, 1, "TESTING: shift bri PCM bits by subunit number");
extern int print_dbg;
static bool pcm_valid(xpd_t *xpd, xpacket_t *pack);
@@ -37,7 +46,7 @@
/*---------------- GLOBAL Protocol Commands -------------------------------*/
static bool global_packet_is_valid(xpacket_t *pack);
-static void global_packet_dump(xpacket_t *pack);
+static void global_packet_dump(const char *msg, xpacket_t *pack);
/*---------------- GLOBAL: HOST COMMANDS ----------------------------------*/
@@ -68,9 +77,6 @@
BUG_ON(!xbus);
BUG_ON(!xpd);
lines &= ~xpd->no_pcm;
-// if(lines == 0)
-// return 0;
-
/*
* FIXME: Workaround a bug in sync code of the Astribank.
* Send dummy PCM for sync.
@@ -87,6 +93,10 @@
pcm += ZT_CHUNKSIZE;
}
buf += ZT_CHUNKSIZE;
+ }
+ if(bri_pcmshift) { /* workaround for pcm problem in BRI */
+ lines = lines << (xpd->addr.subunit * 4);
+ RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, lines) = lines;
}
pack->datalen = sizeof(xpp_line_t) + (pcm - start_pcm);
packet_send(xbus, pack);
@@ -178,6 +188,10 @@
}
// DBG("lines=0x%04X\n", lines);
+ if(bri_pcmshift) { /* workaround for pcm problem in BRI */
+ lines = (lines >> (xpd->addr.subunit * 4)) & 0x7;
+ RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, lines) = lines;
+ }
if(!pcm_valid(xpd, pack)) {
return -EPROTO;
}
@@ -246,6 +260,7 @@
break;
default:
NOTICE("%s/%s: %s UNKNOWN CODE = 0x%X\n", xbus->busname, xpdname, cmd->name, errorcode);
+ dump_packet("PACKET", pack, 1);
}
/*
* FIXME: Should implement an error recovery plan
@@ -277,9 +292,9 @@
return xe != NULL;
}
-static void global_packet_dump(xpacket_t *pack)
-{
- DBG("\n");
+static void global_packet_dump(const char *msg, xpacket_t *pack)
+{
+ DBG("%s\n", msg);
}
static bool pcm_valid(xpd_t *xpd, xpacket_t *pack)
@@ -299,6 +314,7 @@
XPD_COUNTER(xpd, RECV_ERRORS)++;
if((rate_limit++ % 1000) <= 10) {
ERR("BAD PCM REPLY: pack->datalen=%d, count=%d\n", pack->datalen, count);
+ dump_packet("BAD PCM REPLY", pack, 1);
}
return 0;
}
@@ -314,6 +330,8 @@
xbus_t *xbus;
char busstr[MAX_ENV_STR];
char xpdstr[MAX_ENV_STR];
+ char unitstr[MAX_ENV_STR];
+ char subunitstr[MAX_ENV_STR];
char typestr[MAX_ENV_STR];
char revstr[MAX_ENV_STR];
char init_card[MAX_PATH_STR];
@@ -324,6 +342,8 @@
char *envp[] = {
busstr,
xpdstr,
+ unitstr,
+ subunitstr,
typestr,
revstr,
NULL
@@ -331,20 +351,14 @@
BUG_ON(!xpd);
xbus = xpd->xbus;
- /*
- * Initialize only the first subunit as the others are controled
- * by the same chip
- */
- if(xpd->addr.subunit != 0) {
- DBG("%s/%s: Skipping subunit %d\n", xbus->busname, xpd->xpdname, xpd->addr.subunit);
- return 0;
- }
if(!initdir || !initdir[0]) {
NOTICE("%s/%s: Missing initdir parameter\n", xbus->busname, xpd->xpdname);
return -EINVAL;
}
snprintf(busstr, MAX_ENV_STR, "XPD_BUS=%s", xbus->busname);
snprintf(xpdstr, MAX_ENV_STR, "XPD_NAME=%s", xpd->xpdname);
+ snprintf(unitstr, MAX_ENV_STR, "XPD_UNIT=%d", xpd->addr.unit);
+ snprintf(subunitstr, MAX_ENV_STR, "XPD_SUBUNIT=%d", xpd->addr.subunit);
snprintf(typestr, MAX_ENV_STR, "XPD_TYPE=%d", xpd->type);
snprintf(revstr, MAX_ENV_STR, "XPD_REVISION=%d", xpd->revision);
if(snprintf(init_card, MAX_PATH_STR, "%s/init_card_%d_%d",
@@ -360,14 +374,27 @@
DBG("%s/%s: running '%s' for type=%d revision=%d\n",
xbus->busname, xpd->xpdname, init_card, xpd->type, xpd->revision);
ret = call_usermodehelper(init_card, argv, envp, 1);
- if(ret != 0) {
- ERR("%s/%s: Failed running '%s' (errno %d, sig=%d)\n",
- xbus->busname, xpd->xpdname, init_card,
- ((unsigned)ret >> 8) & 0xFF, ret & 0xFF);
+ /*
+ * Carefully report results
+ */
+ if(ret == 0)
+ DBG("%s/%s: '%s' finished OK\n", xbus->busname, xpd->xpdname, init_card);
+ else if(ret < 0) {
+ ERR("%s/%s: Failed running '%s' (errno %d)\n",
+ xbus->busname, xpd->xpdname, init_card, ret);
+ } else {
+ byte exitval = ((unsigned)ret >> 8) & 0xFF;
+ byte sigval = ret & 0xFF;
+
+ if(!exitval) {
+ ERR("%s/%s: '%s' killed by signal %d\n",
+ xbus->busname, xpd->xpdname, init_card, sigval);
+ } else {
+ ERR("%s/%s: '%s' aborted with exitval %d\n",
+ xbus->busname, xpd->xpdname, init_card, exitval);
+ }
ret = -EINVAL;
}
- DBG("%s/%s: '%s' returned %d\n",
- xbus->busname, xpd->xpdname, init_card, ret);
up_read(&xbus->in_use);
return ret;
}
Propchange: team/tzafrir/xpp_1.2/xpp/utils/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Sat Nov 4 03:53:23 2006
@@ -1,3 +1,4 @@
+adj_clock
fpga_load
test_parse
libhexfile.*
Modified: team/tzafrir/xpp_1.2/xpp/utils/Makefile
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/utils/Makefile?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/utils/Makefile (original)
+++ team/tzafrir/xpp_1.2/xpp/utils/Makefile Sat Nov 4 03:53:23 2006
@@ -13,25 +13,35 @@
XPD_INIT_DATA = $(XPD_FIRMWARE) init_fxo_modes
XPD_INIT = $(wildcard ../init_card_?_*) ../calibrate_slics
-WCTDM=../../wctdm.c
+# Variables that should be defined above, but need sane defaults:
+# FIXME: Are those values really sane?
+HOSTCC ?= $(CC)
+CONFIG_USB ?= y
+DRIVER_DIR ?= ../..
+
+WCTDM=$(DRIVER_DIR)/wctdm.c
CFLAGS = -g -Wall $(EXTRA_CFLAGS)
TARGETS = init_fxo_modes print_modes adj_clock
+PROG_INSTALL = genzaptelconf adj_clock
+MAN_INSTALL = genzaptelconf.8 adj_clock.8
ifneq (,$(filter y m,$(CONFIG_USB)))
TARGETS += libhexfile.a fpga_load test_parse
+PROG_INSTALL += fpga_load
+MAN_INSTALL += fpga_load.8
endif
all: $(TARGETS)
install: all
$(INSTALL) -d $(DESTDIR)$(BINDIR)
- $(INSTALL) genzaptelconf fpga_load adj_clock $(DESTDIR)$(BINDIR)/
+ $(INSTALL) $(PROG_INSTALL) $(DESTDIR)$(BINDIR)/
$(INSTALL) -d $(DESTDIR)$(DATADIR)
$(INSTALL_DATA) $(XPD_INIT_DATA) $(DESTDIR)$(DATADIR)/
$(INSTALL) $(XPD_INIT) $(DESTDIR)$(DATADIR)/
$(INSTALL) -d $(DESTDIR)$(MANDIR)
- $(INSTALL_DATA) fpga_load.8 genzaptelconf.8 adj_clock.8 $(DESTDIR)$(MANDIR)/
+ $(INSTALL_DATA) $(MAN_INSTALL) $(DESTDIR)$(MANDIR)/
$(INSTALL) -d $(DESTDIR)$(HOTPLUG_USB_DIR)
$(INSTALL_DATA) xpp_fxloader.usermap $(DESTDIR)$(HOTPLUG_USB_DIR)/
$(INSTALL) xpp_fxloader $(DESTDIR)$(HOTPLUG_USB_DIR)/
Modified: team/tzafrir/xpp_1.2/xpp/utils/adj_clock.8
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/utils/adj_clock.8?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/utils/adj_clock.8 (original)
+++ team/tzafrir/xpp_1.2/xpp/utils/adj_clock.8 Sat Nov 4 03:53:23 2006
@@ -1,4 +1,4 @@
-." $Id$
+." $Id:$
.TH adj_clock 8 "2006-10-18"
.SH "NAME"
adj_clock \(em Synchronize system clock to zaptel clock
Propchange: team/tzafrir/xpp_1.2/xpp/utils/adj_clock.8
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Sat Nov 4 03:53:23 2006
@@ -1,1 +1,1 @@
-Author Date Id Revision
+Author Date Id Revision==== ORIGINAL VERSION Property svn:keywords of utils/adj_clock.8 116263086052120
Propchange: team/tzafrir/xpp_1.2/xpp/utils/adj_clock.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Sat Nov 4 03:53:23 2006
@@ -1,1 +1,1 @@
-Author Date Id Revision
+Author Date Id Revision==== ORIGINAL VERSION Property svn:keywords of utils/adj_clock.c 116263091371678
Modified: team/tzafrir/xpp_1.2/xpp/utils/genzaptelconf
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/utils/genzaptelconf?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/utils/genzaptelconf (original)
+++ team/tzafrir/xpp_1.2/xpp/utils/genzaptelconf Sat Nov 4 03:53:23 2006
@@ -54,6 +54,8 @@
# for others. Note that if an Astribank is not detected, the script
# will set this to "no", so you can safely leave it as "yes".
set_immediate=yes
+# Set fxs_immediate to 'yes' to make all FXS lines answer immediately.
+fxs_immediate=no
ZAPCONF_FILE=${ZAPCONF_FILE:-/etc/zaptel.conf}
ZAPCONF_FILE_SYSTEM=$ZAPCONF_FILE
@@ -346,7 +348,8 @@
if [ "$set_immediate" = 'yes' ]
then
- if [ "$astbank_type" = 'input' ]
+ if [ "$astbank_type" = 'input' ] || \
+ ( [ "$fxs_immediate" = 'yes' ] && [ "$sig" = "fxo" ] )
then echo 'immediate=yes' >> $zapata_file
else echo 'immediate=no' >> $zapata_file
fi
@@ -454,16 +457,7 @@
# sleep a while until the xpp modules fully register
wait_for_xpp() {
- case "`uname -r`" in
- 2.6.8*)
- autoreg="/sys/module/xpp/zap_autoreg"
- ;;
- *)
- autoreg="/sys/module/xpp/parameters/zap_autoreg"
- ;;
- esac
- if [ -d /proc/xpp ] && \
- [ "`cat $autoreg`" = 'Y' ]
+ if [ -d /proc/xpp ]
then
# wait for the XPDs to register:
# TODO: improve error reporting and produce a messagee here
Propchange: team/tzafrir/xpp_1.2/xpp/utils/print_modes.c
------------------------------------------------------------------------------
--- svn:keywords (original)
+++ svn:keywords Sat Nov 4 03:53:23 2006
@@ -1,1 +1,1 @@
-Author Date Id Revision
+Author Id Date Revision
Modified: team/tzafrir/xpp_1.2/xpp/xbus-core.c
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/xbus-core.c?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/xbus-core.c (original)
+++ team/tzafrir/xpp_1.2/xpp/xbus-core.c Sat Nov 4 03:53:23 2006
@@ -55,7 +55,6 @@
/* Command line parameters */
extern int print_dbg;
-extern int max_queue_len;
/* Forward declarations */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
@@ -131,105 +130,6 @@
atomic_dec(&xbus->packet_counter);
//DBG("Decremented packet_counter of bus %s (freed packet) to %d\n",
// xbus->busname, atomic_read(&xbus->packet_counter));
-}
-
-/*------------------------- Packet Queues --------------------------*/
-void init_xbus_packet_queue(packet_queue_t *q, const char name[])
-{
- INIT_LIST_HEAD(&q->head);
- spin_lock_init(&q->lock);
- q->count = 0;
- q->worst_count = 0;
- q->overflows = 0;
- snprintf(q->qname, XPD_NAMELEN, "%s", name);
-}
-
-#if 0
-/*
- * Assume the queue is locked
- */
-void __dump_packet_queue(const char *msg, packet_queue_t *q)
-{
- xpacket_t *tmp;
-
- list_for_each_entry(tmp, &q->head, list) {
- dump_packet(msg, tmp);
- }
-}
-#endif
-
-void drain_xbus_packet_queue(xbus_t *xbus, packet_queue_t *q)
-{
- unsigned long flags;
- xpacket_t *pack;
- xpacket_t *next;
-
- spin_lock_irqsave(&q->lock, flags);
- DBG("queue=%s count=%d\n", q->qname, q->count);
- DBG(" total packets count=%d\n", atomic_read(&xpacket_count));
- list_for_each_entry_safe(pack, next, &q->head, list) {
- list_del(&pack->list);
- q->count--;
- xbus->ops->packet_free(xbus, pack);
- }
- if(q->count != 0)
- ERR("drain_xbus_packet_queue: queue %s still has %d packets\n",
- q->qname, q->count);
- spin_unlock_irqrestore(&q->lock, flags);
-}
-
-void xbus_enqueue_packet(xbus_t *xbus, packet_queue_t *q, xpacket_t *pack)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&q->lock, flags);
-
- if(q->count >= max_queue_len) {
- static unsigned long last_notice = 0; // rate limit
-
- if((jiffies - last_notice) < HZ) {
- NOTICE("xbus_enqueue_packet: dropping packet (queue len = %d, max=%d)\n",
- q->count, max_queue_len);
- last_notice = jiffies;
- }
- q->overflows++;
- xbus->ops->packet_free(xbus, pack);
- goto out;
- }
- list_add_tail(&pack->list, &q->head);
- q->count++;
-
- if(q->count > q->worst_count)
- q->worst_count = q->count;
-
- if(q->count < max_queue_len/100 && q->worst_count > q->count) // Decay worst_count
- q->worst_count--;
-
- // dump_packet("ENQUEUED", pack, print_dbg);
-out:
- spin_unlock_irqrestore(&q->lock, flags);
-}
-
-xpacket_t *xbus_dequeue_packet(packet_queue_t *q)
-{
- unsigned long flags;
- struct list_head *p;
- xpacket_t *pack = NULL;
-
- spin_lock_irqsave(&q->lock, flags);
-
- if(list_empty(&q->head)) {
- // DBG("LIST EMPTY (count=%d)\n", q->count);
- goto out;
- }
- p = q->head.next;
- list_del(p);
- q->count--;
- pack = list_entry(p, xpacket_t, list);
- // dump_packet("DEQUEUED", pack, print_dbg);
-out:
- spin_unlock_irqrestore(&q->lock, flags);
- return pack;
}
Modified: team/tzafrir/xpp_1.2/xpp/xbus-core.h
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/xbus-core.h?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/xbus-core.h (original)
+++ team/tzafrir/xpp_1.2/xpp/xbus-core.h Sat Nov 4 03:53:23 2006
@@ -33,12 +33,6 @@
xpacket_t *xbus_packet_new(xbus_t *xbus, gfp_t flags);
void xbus_packet_free(xbus_t *xbus, xpacket_t *p);
-/* packet queues */
-void init_xbus_packet_queue(packet_queue_t *q, const char name[]);
-void drain_xbus_packet_queue(xbus_t *xbus, packet_queue_t *q);
-void xbus_enqueue_packet(xbus_t *xbus, packet_queue_t *q, xpacket_t *pack);
-xpacket_t *xbus_dequeue_packet(packet_queue_t *q);
-
/* XBUS handling */
xbus_t *xbus_of(int xbus_num);
xpd_t *xpd_of(xbus_t *xbus, int xpd_num);
Modified: team/tzafrir/xpp_1.2/xpp/xpp_usb.c
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/xpp_usb.c?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/xpp_usb.c (original)
+++ team/tzafrir/xpp_1.2/xpp/xpp_usb.c Sat Nov 4 03:53:23 2006
@@ -278,7 +278,7 @@
#endif
return;
}
-#if 1
+#if 0
} else if(pack->content.opcode == XPROTO_NAME(FXS, REGISTER_REPLY)) {
return;
#endif
Modified: team/tzafrir/xpp_1.2/xpp/xpp_zap.c
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/xpp_zap.c?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/xpp_zap.c (original)
+++ team/tzafrir/xpp_1.2/xpp/xpp_zap.c Sat Nov 4 03:53:23 2006
@@ -64,9 +64,9 @@
static unsigned int xpp_last_jiffies = 0;
DEF_PARM(int, print_dbg, 0, "Print DBG statements");
-DEF_PARM(int, max_queue_len, MAX_QUEUE_LEN, "Maximum Queue Length.");
DEF_PARM(bool, zap_autoreg, 1, "Register spans automatically (1) or not (0)");
DEF_PARM(bool, prefmaster, 1, "Do we want to be zaptel preferred sync master");
+// DEF_ARRAY(int, pcmtx, 4, 0, "Forced PCM values to transmit");
#include "zap_debug.h"
#ifdef XPP_EC_CHUNK
@@ -342,10 +342,10 @@
if(CALL_XMETHOD(card_init, xbus, xpd) < 0)
goto err;
// Turn off all channels
- CALL_XMETHOD(CHAN_ENABLE, xbus, xpd, ALL_CHANS, 0);
+ CALL_XMETHOD(XPD_STATE, xbus, xpd, 0);
xpd->card_present = 1;
// Turn on all channels
- CALL_XMETHOD(CHAN_ENABLE, xbus, xpd, ALL_CHANS, 1);
+ CALL_XMETHOD(XPD_STATE, xbus, xpd, 1);
if(zap_autoreg)
zaptel_register_xpd(xpd);
@@ -442,7 +442,7 @@
continue;
if(IS_SET(xpd->digital_signalling, i))
continue;
-#if 1
+#if 0
rp = chans[i].readchunk;
wp = chans[i].writechunk;
#else
@@ -937,7 +937,8 @@
if(IS_SET(xpd->offhook, i) || IS_SET(xpd->cid_on, i) || digital_telephony) {
memcpy((u_char *)w, chans[i].writechunk, ZT_CHUNKSIZE);
- // fill_beep((u_char *)w, 5);
+ // fill_beep((u_char *)w, xpd->addr.subunit, 2);
+ // memset((u_char *)w, pcmtx[xpd->addr.subunit % 4], ZT_CHUNKSIZE);
}
}
// if(xpd->offhook != 0 || sync_master != xpd) {
@@ -949,21 +950,30 @@
spin_unlock_irqrestore(&xpd->lock, flags);
}
-void fill_beep(u_char *buf, int duration)
-{
- int which = (jiffies/(duration*HZ)) & 0x3;
+void fill_beep(u_char *buf, int num, int duration)
+{
+ bool alternate = (duration) ? (jiffies/(duration*HZ)) & 0x1 : 0;
+ int which;
+ u_char *snd;
/*
* debug tones
*/
static u_char beep[] = {
-// 0x7F, 0xBE, 0xD8, 0xBE, 0x80, 0x41, 0x24, 0x41, /* Dima */
-// 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, /* silence */
-// 0x67, 0x90, 0x89, 0x90, 0xFF, 0x10, 0x09, 0x10, /* Izzy */
-// 0x67, 0xCD, 0xC5, 0xCD, 0xFF, 0x49, 0x41, 0x49, /* Dima 2 */
+ 0x7F, 0xBE, 0xD8, 0xBE, 0x80, 0x41, 0x24, 0x41, /* Dima */
+ 0x67, 0x90, 0x89, 0x90, 0xFF, 0x10, 0x09, 0x10, /* Izzy */
+ };
+ static u_char beep_alt[] = {
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, /* silence */
};
- memcpy(buf, &beep[(which*8) % ARRAY_SIZE(beep)], ZT_CHUNKSIZE);
+ if(alternate) {
+ which = num % ARRAY_SIZE(beep_alt);
+ snd = &beep_alt[which];
+ } else {
+ which = num % ARRAY_SIZE(beep);
+ snd = &beep[which];
+ }
+ memcpy(buf, snd, ZT_CHUNKSIZE);
}
#ifdef XPP_EC_CHUNK
@@ -1020,7 +1030,7 @@
continue;
if(IS_SET(xpd->offhook, i) || IS_SET(xpd->cid_on, i) || digital_telephony) {
// memset((u_char *)readchunk, 0x5A, ZT_CHUNKSIZE); // DEBUG
- // fill_beep((u_char *)readchunk, 1); // DEBUG: BEEP
+ // fill_beep((u_char *)readchunk, 1, 1); // DEBUG: BEEP
memcpy(chans[i].readchunk, (u_char *)readchunk, ZT_CHUNKSIZE);
} else {
memset(chans[i].readchunk, 0x7F, ZT_CHUNKSIZE); // SILENCE
@@ -1444,6 +1454,11 @@
#else
INFO("FEATURE: %s (without XPP_EC_CHUNK)\n", THIS_MODULE->name);
#endif
+#ifdef CONFIG_ZAPATA_BRI_DCHANS
+ INFO("FEATURE: %s (with BRISTUFF support)\n", THIS_MODULE->name);
+#else
+ INFO("FEATURE: %s (without BRISTUFF support)\n", THIS_MODULE->name);
+#endif
#ifdef CONFIG_PROC_FS
xpp_proc_toplevel = proc_mkdir(PROC_DIR, NULL);
Modified: team/tzafrir/xpp_1.2/xpp/xpp_zap.h
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/xpp_zap.h?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/xpp_zap.h (original)
+++ team/tzafrir/xpp_1.2/xpp/xpp_zap.h Sat Nov 4 03:53:23 2006
@@ -34,7 +34,7 @@
void update_xpd_status(xpd_t *xpd, int alarm_flag);
void update_zap_ring(xpd_t *xpd, int pos, bool on);
void update_line_status(xpd_t *xpd, int pos, bool good);
-void fill_beep(u_char *buf, int duration);
+void fill_beep(u_char *buf, int num, int duration);
void xpp_tick(unsigned long param);
int xpp_open(struct zt_chan *chan);
int xpp_close(struct zt_chan *chan);
Modified: team/tzafrir/xpp_1.2/xpp/xproto.c
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/xproto.c?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/xproto.c (original)
+++ team/tzafrir/xpp_1.2/xpp/xproto.c Sat Nov 4 03:53:23 2006
@@ -335,7 +335,7 @@
// CHECK_XOP(card_ioctl); // optional method -- call after testing
CHECK_XOP(SYNC_SOURCE);
CHECK_XOP(PCM_WRITE);
- CHECK_XOP(CHAN_ENABLE);
+ CHECK_XOP(XPD_STATE);
CHECK_XOP(CHAN_CID);
CHECK_XOP(RING);
CHECK_XOP(RELAY_OUT);
Modified: team/tzafrir/xpp_1.2/xpp/xproto.h
URL: http://svn.digium.com/view/zaptel/team/tzafrir/xpp_1.2/xpp/xproto.h?rev=1551&r1=1550&r2=1551&view=diff
==============================================================================
--- team/tzafrir/xpp_1.2/xpp/xproto.h (original)
+++ team/tzafrir/xpp_1.2/xpp/xproto.h Sat Nov 4 03:53:23 2006
@@ -213,7 +213,7 @@
int (*SYNC_SOURCE)(xbus_t *xbus, xpd_t *xpd, bool setit, bool is_master);
int (*PCM_WRITE)(xbus_t *xbus, xpd_t *xpd, xpp_line_t offhook, volatile byte *buf);
- int (*CHAN_ENABLE)(xbus_t *xbus, xpd_t *xpd, lineno_t chan, bool on);
+ int (*XPD_STATE)(xbus_t *xbus, xpd_t *xpd, bool on);
int (*CHAN_CID)(xbus_t *xbus, xpd_t *xpd, lineno_t chan);
int (*RING)(xbus_t *xbus, xpd_t *xpd, lineno_t chan, bool on);
int (*RELAY_OUT)(xbus_t *xbus, xpd_t *xpd, byte which, bool on);
@@ -233,7 +233,7 @@
xpd_type_t type;
const char *name;
bool (*packet_is_valid)(xpacket_t *pack);
- void (*packet_dump)(xpacket_t *pack);
+ void (*packet_dump)(const char *msg, xpacket_t *pack);
};
#include "card_global.h"
More information about the zaptel-commits
mailing list