Compare commits
12 Commits
v2.5.1-rc1
...
v2.5.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1e0aa64075 | ||
|
|
ecc4999070 | ||
|
|
66edd67565 | ||
|
|
897cbb01de | ||
|
|
f9e4bf52c2 | ||
|
|
44a5add969 | ||
|
|
d18ec7f3b9 | ||
|
|
f69326bb66 | ||
|
|
c95385bb06 | ||
|
|
76468854ed | ||
|
|
2242c5394b | ||
|
|
62c5402a24 |
115
ChangeLog
115
ChangeLog
@@ -1,3 +1,118 @@
|
||||
2012-04-18 Shaun Ruffell <sruffell@digium.com>
|
||||
|
||||
* dahdi-linux 2.5.1 tagged.
|
||||
|
||||
2012-04-11 20:19 +0000 [r10656-10659] Shaun Ruffell <sruffell@digium.com>
|
||||
|
||||
* drivers/dahdi/xpp/xpp_dahdi.c, drivers/dahdi/xpp/xpp_dahdi.h:
|
||||
xpp: Fix compilation when CONFIG_DAHDI_WATCHDOG is defined. Looks
|
||||
like a hold over from when dahdi_span_ops was first implemented
|
||||
in r8985 "dahdi: Move the callbacks in dahdi_span into its own
|
||||
structure" [1]. [1]
|
||||
http://svnview.digium.com/svn/dahdi?view=revision&revision=8985
|
||||
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Acked-by:
|
||||
Tzafrir Cohen <tzafrir.cohen@xorcom.com> Origin:
|
||||
http://svnview.digium.com/svn/dahdi?view=rev&rev=10658 Conflicts:
|
||||
drivers/dahdi/xpp/xpp_dahdi.h
|
||||
|
||||
* drivers/dahdi/dahdi-base.c: dahdi: Fix compilation when
|
||||
CONFIG_DAHDI_WATCHDOG is defined. From: Mike Sinkovsky
|
||||
<msink@trikom.ru> Internal-Issue-ID: DAHLIN-288 Signed-off-by:
|
||||
Shaun Ruffell <sruffell@digium.com> Origin:
|
||||
http://svnview.digium.com/svn/dahdi?view=rev&rev=10655 Conflicts:
|
||||
drivers/dahdi/dahdi-base.c
|
||||
|
||||
2012-04-11 09:11 +0000 [r10650-10653] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
|
||||
|
||||
* drivers/dahdi/xpp/firmwares/FPGA_1161.201.hex: FPGA_1161.201.hex
|
||||
rev 10545: fix reset of XR1000 Previous commit (r10650) included
|
||||
an incorrect version. Including full message from that commit for
|
||||
the description. rev. 10502 of the FPGA firmware for the new
|
||||
E-Main rev. 4 fixes a potential issue when used on Xorcom XR1000
|
||||
systems: an issue with the power supply may cause the unit to
|
||||
reset. Note that there is no issue with previous models, with a
|
||||
normal setup of an Astribank, or other XRx000 systems.
|
||||
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com> Origin:
|
||||
http://svnview.digium.com/svn/dahdi?view=rev&rev=10652
|
||||
|
||||
* drivers/dahdi/xpp/firmwares/FPGA_1161.201.hex: FPGA_1161.201.hex
|
||||
rev 10532: fix reset of XR1000 rev. 10502 of the FPGA firmware
|
||||
for the new E-Main rev. 4 fixes a potential issue when used on
|
||||
Xorcom XR1000 systems: an issue with the power supply may cause
|
||||
the unit to reset. Note that there is no issue with previous
|
||||
models, with a normal setup of an Astribank, or other XRx000
|
||||
systems. Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
|
||||
Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10649
|
||||
|
||||
2012-04-05 20:34 +0000 [r10642-10647] Shaun Ruffell <sruffell@digium.com>
|
||||
|
||||
* drivers/dahdi/voicebus/Kbuild, drivers/dahdi/wct4xxp/Kbuild:
|
||||
wcte12xp, wctdm24xxp, wct4xxp: Print warning about potential GPL
|
||||
violation w/HOTPLUG_FIRMWARE=no. Print a warning message that it
|
||||
may be a GPL violation to redistribute these binaries if the
|
||||
firmware for the VPMOCT032/64/128/256 is compiled in.
|
||||
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
|
||||
http://svnview.digium.com/svn/dahdi?view=rev&rev=10646 Conflicts:
|
||||
drivers/dahdi/wct4xxp/Kbuild
|
||||
|
||||
* drivers/dahdi/wcb4xxp/base.c: wcb4xxp: Remove asm/system.h
|
||||
include. Not needed anymore and will break compilation on Kernel
|
||||
versions >= 3.4 since commit 0195c00244dc2e [1] [1]
|
||||
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commit;h=0195c00244dc2e
|
||||
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
|
||||
http://svnview.digium.com/svn/dahdi?view=rev&rev=10641
|
||||
|
||||
* drivers/dahdi/dahdi_dummy.c: dahdi_dummy: Include timer.h instead
|
||||
of time.h It appears that some kernel configurations do not
|
||||
include timer.h in any of the include files that are included by
|
||||
dahdi_dummy. The timer_structs are defined in timer.h and not
|
||||
time.h, so this change is correct even though I never could find
|
||||
a configuation myself that actually failed to compile. This has
|
||||
negligible impact since dahdi_dummy is not compiled by default.
|
||||
Internal-Issue-ID: DAHLIN-185 Reported-by: Steve Murphy
|
||||
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
|
||||
http://svnview.digium.com/svn/dahdi?view=rev&rev=10640
|
||||
|
||||
2012-04-03 22:02 +0000 [r10635] Shaun Ruffell <sruffell@digium.com>
|
||||
|
||||
* drivers/dahdi/dahdi-base.c: dahdi: Fix compilation when
|
||||
CONFIG_DAHDI_ECHOCAN_PROCESS_TX is defined. 'ec_state' was
|
||||
renamed to 'dahdi_echocan_state' in r6529 [1] but support for
|
||||
CONFIG_DAHDI_ECHOCAN_PROCESS_TX was first committed in r9442 [2].
|
||||
So it appears that I never compiled tested this exact commit when
|
||||
it went in for the 2.5.0 release. [1]
|
||||
http://svnview.digium.com/svn/dahdi?view=revision&revision=6529
|
||||
[2]
|
||||
http://svnview.digium.com/svn/dahdi?view=revision&revision=9442
|
||||
Reported-by: Pavel Selivanov Internal-Issue-ID: DAHLIN-279
|
||||
Patches: ec.patch uploaded by Pavel Selivanov (License #5420) [
|
||||
edited the patch slightly for minor formatting ] Signed-off-by:
|
||||
Shaun Ruffell <sruffell@digium.com> Origin:
|
||||
http://svnview.digium.com/svn/dahdi?view=rev&rev=10633
|
||||
|
||||
2012-04-02 14:05 +0000 [r10619] Shaun Ruffell <sruffell@digium.com>
|
||||
|
||||
* drivers/dahdi/voicebus/vpmoct.c, drivers/dahdi/firmware/Makefile,
|
||||
drivers/dahdi/voicebus/Kbuild: wctdm24xxp, wcte12xp: Allow
|
||||
VPMOCT032 firmware to be compiled into driver. Enables the driver
|
||||
to update firmware on systems that do not have the firmware
|
||||
loader configured / enabled (Linux config option
|
||||
CONFIG_FW_LOADER). Compiling the firmware into the driver
|
||||
increase the memory footprint by around ~440K. Internal-Issue-ID:
|
||||
DAHDI-963 Reported-and-Tested-by: Guenther Kelleter
|
||||
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
|
||||
http://svnview.digium.com/svn/dahdi?view=rev&rev=10618
|
||||
|
||||
2012-03-29 15:29 +0000 [r10615] Shaun Ruffell <sruffell@digium.com>
|
||||
|
||||
* drivers/dahdi/wctdm24xxp/base.c: wctdm24xxp: Remove forward
|
||||
declaration of inline for GCC 3.4.4 GCC 3.4.4 does not allow
|
||||
forward declaration of inline functions. Internal-Issue-ID:
|
||||
DAHLIN-286 Reported-by: Guenther Kelleter Patches:
|
||||
wctdm24xxp-inline.patch uploaded by Guenther Kelleter (License
|
||||
#6372) Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
|
||||
http://svnview.digium.com/svn/dahdi?view=rev&rev=10613
|
||||
|
||||
2012-03-21 Shaun Ruffell <sruffell@digium.com>
|
||||
|
||||
* dahdi-linux 2.5.1-rc1 tagged.
|
||||
|
||||
@@ -2400,12 +2400,11 @@ static ssize_t dahdi_chan_write(struct file *file, const char __user *usrbuf,
|
||||
if ((chan->ec_state) &&
|
||||
(ECHO_MODE_ACTIVE == chan->ec_state->status.mode) &&
|
||||
(chan->ec_state->ops->echocan_process_tx)) {
|
||||
struct ec_state *const ec_state = chan->ec_state;
|
||||
struct dahdi_echocan_state *const ec = chan->ec_state;
|
||||
for (x = 0; x < chan->writen[res]; ++x) {
|
||||
short tx;
|
||||
tx = DAHDI_XLAW(chan->writebuf[res][x], chan);
|
||||
ec_state->ops->echocan_process_tx(ec_state,
|
||||
&tx, 1);
|
||||
ec->ops->echocan_process_tx(ec, &tx, 1);
|
||||
chan->writebuf[res][x] = DAHDI_LIN2X((int) tx,
|
||||
chan);
|
||||
}
|
||||
@@ -9413,7 +9412,7 @@ static void watchdog_check(unsigned long ignored)
|
||||
static int wdcheck=0;
|
||||
struct dahdi_span *s;
|
||||
|
||||
spin_lock_irqsave(&span_list_lock, flags);
|
||||
spin_lock_irqsave(&chan_lock, flags);
|
||||
list_for_each_entry(s, &span_list, node) {
|
||||
if (s->flags & DAHDI_FLAG_RUNNING) {
|
||||
if (s->watchcounter == DAHDI_WATCHDOG_INIT) {
|
||||
@@ -9421,9 +9420,9 @@ static void watchdog_check(unsigned long ignored)
|
||||
if ((s->watchstate == DAHDI_WATCHSTATE_OK) ||
|
||||
(s->watchstate == DAHDI_WATCHSTATE_UNKNOWN)) {
|
||||
s->watchstate = DAHDI_WATCHSTATE_RECOVERING;
|
||||
if (s->watchdog) {
|
||||
if (s->ops->watchdog) {
|
||||
module_printk(KERN_NOTICE, "Kicking span %s\n", s->name);
|
||||
s->watchdog(spans[x], DAHDI_WATCHDOG_NOINTS);
|
||||
s->ops->watchdog(s, DAHDI_WATCHDOG_NOINTS);
|
||||
} else {
|
||||
module_printk(KERN_NOTICE, "Span %s is dead with no revival\n", s->name);
|
||||
s->watchstate = DAHDI_WATCHSTATE_FAILED;
|
||||
@@ -9438,7 +9437,7 @@ static void watchdog_check(unsigned long ignored)
|
||||
s->watchcounter = DAHDI_WATCHDOG_INIT;
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&span_list_lock, flags);
|
||||
spin_unlock_irqrestore(&chan_lock, flags);
|
||||
if (!wdcheck) {
|
||||
module_printk(KERN_NOTICE, "watchdog on duty!\n");
|
||||
wdcheck=1;
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
#if defined(USE_HIGHRESTIMER)
|
||||
#include <linux/hrtimer.h>
|
||||
#else
|
||||
#include <linux/time.h>
|
||||
#include <linux/timer.h>
|
||||
#endif
|
||||
|
||||
#include <dahdi/kernel.h>
|
||||
|
||||
@@ -53,6 +53,7 @@ OBJECT_FILES:=$(ALL_FIRMWARE:FIRMWARE-OCT6114-064=dahdi-fw-oct6114-064.o)
|
||||
OBJECT_FILES:=$(OBJECT_FILES:FIRMWARE-OCT6114-128=dahdi-fw-oct6114-128.o)
|
||||
OBJECT_FILES:=$(OBJECT_FILES:FIRMWARE-TC400M=dahdi-fw-tc400m.o)
|
||||
OBJECT_FILES:=$(OBJECT_FILES:FIRMWARE-HX8=dahdi-fw-hx8.o)
|
||||
OBJECT_FILES:=$(OBJECT_FILES:FIRMWARE-VPMOCT032=dahdi-fw-vpmoct032.o)
|
||||
|
||||
# Force usage of wget, for now
|
||||
DOWNLOAD=wget
|
||||
@@ -188,3 +189,8 @@ dahdi-fw-oct6114-128.o: dahdi-fw-oct6114-128-$(OCT6114_128_VERSION).tar.gz dahdi
|
||||
dahdi-fw-tc400m.o: dahdi-fw-tc400m-$(TC400M_VERSION).tar.gz dahdi-fw-tc400m.bin make_firmware_object
|
||||
@echo Making firmware object file for dahdi-fw-tc400m.bin
|
||||
./make_firmware_object dahdi-fw-tc400m.bin $@
|
||||
|
||||
# Build object file of a VPMOCT032 firmware image for linking
|
||||
dahdi-fw-vpmoct032.o: dahdi-fw-vpmoct032-$(VPMOCT032_VERSION).tar.gz dahdi-fw-vpmoct032.bin make_firmware_object
|
||||
@echo Making firmware object file for dahdi-fw-vpmoct032.bin
|
||||
./make_firmware_object dahdi-fw-vpmoct032.bin $@
|
||||
|
||||
@@ -2,4 +2,17 @@ obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_VOICEBUS) += dahdi_voicebus.o
|
||||
|
||||
dahdi_voicebus-objs := voicebus.o GpakCust.o GpakApi.o voicebus_net.o vpmoct.o
|
||||
|
||||
EXTRA_CFLAGS := -I$(src)/.. -Wno-undef
|
||||
FIRM_DIR := ../firmware
|
||||
|
||||
ifneq ($(HOTPLUG_FIRMWARE),yes)
|
||||
dahdi_voicebus-objs += $(FIRM_DIR)/dahdi-fw-vpmoct032.o
|
||||
$(warning WARNING: You are compiling firmware into voicebus.ko which is not available under the terms of the GPL. It may be a violation of the GPL to distribute the resulting image since it combines both GPL and non-GPL work. You should consult a lawyer of your own before distributing such an image.)
|
||||
else
|
||||
EXTRA_CFLAGS+=-DHOTPLUG_FIRMWARE
|
||||
endif
|
||||
|
||||
EXTRA_CFLAGS += -I$(src)/.. -Wno-undef
|
||||
|
||||
$(obj)/$(FIRM_DIR)/dahdi-fw-vpmoct032.o: $(obj)/voicebus.o
|
||||
$(MAKE) -C $(obj)/$(FIRM_DIR) dahdi-fw-vpmoct032.o
|
||||
|
||||
|
||||
@@ -443,6 +443,47 @@ static void vpmoct_set_defaults(struct vpmoct *vpm)
|
||||
vpmoct_write_dword(vpm, 0x30, 0);
|
||||
}
|
||||
|
||||
static const char *const FIRMWARE_NAME = "dahdi-fw-vpmoct032.bin";
|
||||
#if defined(HOTPLUG_FIRMWARE)
|
||||
static int
|
||||
vpmoct_request_firmware(const struct firmware **fw, struct device *dev)
|
||||
{
|
||||
return request_firmware(fw, FIRMWARE_NAME, dev);
|
||||
}
|
||||
|
||||
static void vpmoct_release_firmware(const struct firmware *fw)
|
||||
{
|
||||
release_firmware(fw);
|
||||
}
|
||||
#else
|
||||
static int
|
||||
vpmoct_request_firmware(const struct firmware **fw_p, struct device *dev)
|
||||
{
|
||||
struct firmware *fw;
|
||||
extern void _binary_dahdi_fw_vpmoct032_bin_size;
|
||||
extern u8 _binary_dahdi_fw_vpmoct032_bin_start[];
|
||||
|
||||
*fw_p = fw = kzalloc(sizeof(*fw), GFP_KERNEL);
|
||||
if (!fw)
|
||||
return -ENOMEM;
|
||||
|
||||
fw->data = _binary_dahdi_fw_vpmoct032_bin_start;
|
||||
/* Yes... this is weird. objcopy gives us a symbol containing
|
||||
the size of the firmware, not a pointer a variable containing the
|
||||
size. The only way we can get the value of the symbol is to take
|
||||
its address, so we define it as a pointer and then cast that value
|
||||
to the proper type. */
|
||||
fw->size = (size_t) &_binary_dahdi_fw_vpmoct032_bin_size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void vpmoct_release_firmware(const struct firmware *fw)
|
||||
{
|
||||
kfree(fw);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* vpmoct_load_flash - Check the current flash version and possibly load.
|
||||
* @vpm: The VPMOCT032 module to check / load.
|
||||
@@ -463,10 +504,9 @@ static void vpmoct_load_flash(struct work_struct *data)
|
||||
const struct firmware *fw;
|
||||
const struct vpmoct_header *header;
|
||||
char serial[VPMOCT_SERIAL_SIZE+1];
|
||||
const char *const FIRMWARE_NAME = "dahdi-fw-vpmoct032.bin";
|
||||
int i;
|
||||
|
||||
res = request_firmware(&fw, FIRMWARE_NAME, vpm->dev);
|
||||
res = vpmoct_request_firmware(&fw, vpm->dev);
|
||||
if (res) {
|
||||
dev_warn(vpm->dev,
|
||||
"vpmoct: Failed to load firmware from userspace! %d\n",
|
||||
@@ -505,7 +545,7 @@ static void vpmoct_load_flash(struct work_struct *data)
|
||||
FIRMWARE_NAME);
|
||||
|
||||
/* Just use the old version of the fimware. */
|
||||
release_firmware(fw);
|
||||
vpmoct_release_firmware(fw);
|
||||
vpmoct_set_defaults(vpm);
|
||||
vpmoct_load_complete(work, true);
|
||||
return;
|
||||
@@ -514,7 +554,7 @@ static void vpmoct_load_flash(struct work_struct *data)
|
||||
if (vpm->minor == header->minor &&
|
||||
vpm->major == header->major) {
|
||||
/* Proper version is running */
|
||||
release_firmware(fw);
|
||||
vpmoct_release_firmware(fw);
|
||||
vpmoct_set_defaults(vpm);
|
||||
vpmoct_load_complete(work, true);
|
||||
return;
|
||||
@@ -548,14 +588,14 @@ static void vpmoct_load_flash(struct work_struct *data)
|
||||
if (vpmoct_check_firmware_crc(vpm, fw->size-VPMOCT_FIRM_HEADER_LEN*2,
|
||||
header->major, header->minor))
|
||||
goto error;
|
||||
release_firmware(fw);
|
||||
vpmoct_release_firmware(fw);
|
||||
vpmoct_set_defaults(vpm);
|
||||
vpmoct_load_complete(work, true);
|
||||
return;
|
||||
|
||||
error:
|
||||
dev_info(vpm->dev, "Unable to load firmware\n");
|
||||
release_firmware(fw);
|
||||
vpmoct_release_firmware(fw);
|
||||
/* TODO: Should we disable module if the firmware doesn't load? */
|
||||
vpmoct_load_complete(work, false);
|
||||
return;
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/device.h> /* dev_err() */
|
||||
#include <linux/interrupt.h>
|
||||
#include <asm/system.h> /* cli(), *_flags */
|
||||
#include <asm/uaccess.h> /* copy_*_user */
|
||||
#include <linux/workqueue.h> /* work_struct */
|
||||
#include <linux/timer.h> /* timer_struct */
|
||||
|
||||
@@ -18,6 +18,7 @@ wct4xxp-objs := base.o vpm450m.o $(shell $(src)/../oct612x/octasic-helper object
|
||||
|
||||
ifneq ($(HOTPLUG_FIRMWARE),yes)
|
||||
wct4xxp-objs += $(FIRM_DIR)/dahdi-fw-oct6114-064.o $(FIRM_DIR)/dahdi-fw-oct6114-128.o
|
||||
$(warning WARNING: You are compiling firmware into wct4xxp.ko which is not available under the terms of the GPL. It may be a violation of the GPL to distribute the resulting image since it combines both GPL and non-GPL work. You should consult a lawyer of your own before distributing such an image.)
|
||||
endif
|
||||
|
||||
$(obj)/$(FIRM_DIR)/dahdi-fw-oct6114-064.o: $(obj)/base.o
|
||||
|
||||
@@ -910,9 +910,22 @@ wctdm_isr_getreg(struct wctdm *wc, struct wctdm_module *const mod, u8 address)
|
||||
list_add(&cmd->node, &mod->pending_cmds);
|
||||
}
|
||||
|
||||
/* Must be called with wc.reglock held and local interrupts disabled */
|
||||
static inline void
|
||||
wctdm_setreg_intr(struct wctdm *wc, struct wctdm_module *mod,
|
||||
int addr, int val);
|
||||
wctdm_setreg_intr(struct wctdm *wc, struct wctdm_module *mod, int addr, int val)
|
||||
{
|
||||
struct wctdm_cmd *cmd;
|
||||
|
||||
cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC);
|
||||
if (unlikely(!cmd))
|
||||
return;
|
||||
|
||||
cmd->complete = NULL;
|
||||
cmd->cmd = CMD_WR(addr, val);
|
||||
|
||||
list_add_tail(&cmd->node, &mod->pending_cmds);
|
||||
}
|
||||
|
||||
|
||||
static void cmd_checkisr(struct wctdm *wc, struct wctdm_module *const mod)
|
||||
{
|
||||
@@ -1058,22 +1071,6 @@ static inline void wctdm_transmitprep(struct wctdm *wc, unsigned char *sframe)
|
||||
spin_unlock_irqrestore(&wc->reglock, flags);
|
||||
}
|
||||
|
||||
/* Must be called with wc.reglock held and local interrupts disabled */
|
||||
static inline void
|
||||
wctdm_setreg_intr(struct wctdm *wc, struct wctdm_module *mod, int addr, int val)
|
||||
{
|
||||
struct wctdm_cmd *cmd;
|
||||
|
||||
cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC);
|
||||
if (unlikely(!cmd))
|
||||
return;
|
||||
|
||||
cmd->complete = NULL;
|
||||
cmd->cmd = CMD_WR(addr, val);
|
||||
|
||||
list_add_tail(&cmd->node, &mod->pending_cmds);
|
||||
}
|
||||
|
||||
int wctdm_setreg(struct wctdm *wc, struct wctdm_module *mod, int addr, int val)
|
||||
{
|
||||
struct wctdm_cmd *cmd;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -885,7 +885,7 @@ int xpp_maint(struct dahdi_span *span, int cmd)
|
||||
* If the watchdog detects no received data, it will call the
|
||||
* watchdog routine
|
||||
*/
|
||||
static int xpp_watchdog(struct dahdi_span *span, int cause)
|
||||
int xpp_watchdog(struct dahdi_span *span, int cause)
|
||||
{
|
||||
static int rate_limit = 0;
|
||||
|
||||
@@ -893,6 +893,7 @@ static int xpp_watchdog(struct dahdi_span *span, int cause)
|
||||
DBG(GENERAL, "\n");
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(xpp_watchdog);
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
@@ -46,6 +46,7 @@ int xpp_close(struct dahdi_chan *chan);
|
||||
int xpp_ioctl(struct dahdi_chan *chan, unsigned int cmd, unsigned long arg);
|
||||
int xpp_hooksig(struct dahdi_chan *chan, enum dahdi_txsig txsig);
|
||||
int xpp_maint(struct dahdi_span *span, int cmd);
|
||||
int xpp_watchdog(struct dahdi_span *span, int cause);
|
||||
void report_bad_ioctl(const char *msg, xpd_t *xpd, int pos, unsigned int cmd);
|
||||
int total_registered_spans(void);
|
||||
void oht_pcm(xpd_t *xpd, int pos, bool pass);
|
||||
|
||||
Reference in New Issue
Block a user