Compare commits

..

43 Commits

Author SHA1 Message Date
Shaun Ruffell
22345323b6 Importing files for 2.5.0.2 release.
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/tags/2.5.0.2@10258 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-10-21 22:15:58 +00:00
Shaun Ruffell
f0ba335d09 Creating tag for the release of dahdi-linux-2.5.0.2
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/tags/2.5.0.2@10257 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-10-21 22:15:13 +00:00
Shaun Ruffell
40942e2a43 dahdi: Move WARN_ON_ONCE from wctc4xxp driver to include/dahdi/kernel.h
I only generally test on RHEL 4 when testing against kernels older
than 2.6.18. Apparently OpenSUSE 10.1 runs with 2.6.16 and doesn't
have WARN_ON_ONCE backported. I took the patch Richard Miller
originally attached to the issue and moved it to
include/dahdi/kernel.h so it would be available for all the board
drivers in the future.

Internal-Issue-ID: DAHLIN-260
Reported-by: Richard Miller
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10252

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10254 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-10-21 19:48:24 +00:00
Shaun Ruffell
78c92b52ed wcb4xxp: Do not show LASVEGAS2 as echocan name if vpmsupport is set to 0
This fixes an issue where "EC: LASVEGAS2" was displayed in /proc/dahdi/x
for a B410P span even though vpmsupport was disabled with the module
parameter.

Internal-Issue-ID: DAHLIN-247
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10251

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10253 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-10-21 19:48:20 +00:00
Shaun Ruffell
1bf7ebc42f wct4xxp: Fix condition where hardware echo canceler erroneously mutes DTMF.
Commit r9750 "wct4xxp: Reduce the memory footprint of the hardware
echocanceler.", as part of reducing the non-pageable memory required to
support the VPMOCT064 and VPMOCT128, disabled caching of some hardware
echocan registers. This resulted in more physical reads to the echo
canceler. These new read transactions exposed an existing issue where
sometimes reads could be turned into writes which put a channel into an
unintended state preventing Asterisk from detecting any DTMF.

This issue is resolved by ensuring that the write signal to the Octasic
part is explicitly cleared between when the address is presented on the
bus and when the read and chip select signals are asserted. The cost is
an increase in the average time to enable / disable echo cancellation by
about 5 us on one Intel Xeon X3220 test machine (~250ns increase per
read from the Octasic part and 20 reads to enable / disable a channel).

This commit resolves a behavioral regression first introduced in 2.5.0
and 2.4.1 which could take many calls before revealing itself. This
change only affects cards with a VPMOCT128 or VPMOCT064 installed.

Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Acked-by: Doug Bailey <dbailey@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10220

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10221 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-10-12 16:32:35 +00:00
Shaun Ruffell
7a275dc70b wctc4xxp: Allow G723 SID frames to pass to the hardware decoder.
The driver has, until now, dropped G723 SID frames even though the
firmware on the TC400/TCE400 can handle them. Now let them on
through.

Reported-and-Tested-by: Angel Carhuas <acarhuas@colinanet.com>
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10218

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10219 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-09-30 19:23:22 +00:00
Shaun Ruffell
9fb13e2f6c wctdm24xxp: Set dahdi_span.devicetype string in one place.
Currently the devicetype string was set both when the device was first
allocated and updated when an echocanceler was detected. For simplicity,
combine both these steps into a single function.

This change also replaces an improper use of strncat with strlcat.

Additionally, on the 2.5 branch, this change actually makes r10206
"wctdm24xxp, wcte12xp: Advertise VPMOCT032 presence in
dahdi_span.devicetype",  work the way it was originally intended. That
change was only functioning properly previously on trunk.

Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10210

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10211 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-09-27 22:10:34 +00:00
Tzafrir Cohen
fcbde772c4 xpp: fxs: bugfix for 2fxs+6fxo cards
* Bug sympthoms: wrong FSK VMWI sent few seconds after
  offhook. That was caused because the driver kept
  polling the (physically unconnected) digital inputs.
  [note: a workaround for drivers without this patch
   is to zero the 'xpd_fxs.poll_digital_inputs' parameter.]

* Also, the digital_inputs/digital_output masks were
  calculate using a different condition.

* Now we determine number of channels, digital inputs and
  digital outputs in a single place and use this info
  later to calculate the correct masks.

* We poll only if there are digital_inputs

* We added a sanity check in process_digital_inputs, so
  we get a notice if it's called on an xpd without digital
  inputs (e.g: hypothetic firmware bug).

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
Acked-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10208 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-09-25 08:59:02 +00:00
Shaun Ruffell
2bc2ebd1de dahdi: Check for master in DAHDI_STARTUP / resolves MeetMe regression.
There were a couple of reports that MeetMe conferences were not
working in 2.5.0.1 and that downgrading to 2.4.1.2 resolved the
issue. This could occur if there were no analog spans in a system,
and all the digital spans were out of alarm before DAHDI_STARTUP
ioctl was called by dahdi_cfg. If the spans were *not* out of alarm,
they would be marked master when the span changes it's alarm state.

This would result in a condition where no spans were marked as the
"master" and so the core timer was handling conferencing. The core
timer runs by default at 4ms and most board drivers run at 1ms
intervals, but a channel currently only buffers up 2ms of data when
conferenced. Therefore, 2ms of audio from a board was continuously
dropped from the conference every 4ms by default.

This fixes a regression first introduced in 2.5.0 which was
specifically added in revision r9611 "dahdi: Do not locate new
master in interrupt context."

Internal-reference-ID: DAHDI-894
Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Tested-by: Dennis Martinez <dmartinez@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10205

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10207 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-09-23 20:23:47 +00:00
Shaun Ruffell
0f8559b045 wctdm24xxp, wcte12xp: Advertise VPMOCT032 presence in dahdi_span.devicetype.
A "(VPMADT032)" string is appended to the devicetype (as shown by
dahdi_scan) for the span if one is installed. Now append '(VPMOCT032)'
if one is installed as well.

Also, for the wcte12xp driver append the VPM name to the device type after
initially probing as opposed to only after the span is configured.

(Related to issue DAHDI-890)
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10203

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10206 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-09-23 20:23:43 +00:00
Shaun Ruffell
d6075a4c78 dahdi: Decrease the initial coretimer delay to 4ms from 1 second.
DAHDI currently waits a second before checking if a board driver is
calling dahdi_receive and switching to internal timing. Some versions of
Asterisk (I was looking at 1.4.42 when writing this) only wait 300ms for
a timer to expire when first starting and verifying that DAHDI is
properly configured. This can result in a

"ERROR[27673] asterisk.c: Asterisk has detected a problem with your DAHDI
configuration and will shutdown for your protection. You have options:"

message if asterisk is started soon after loading DAHDI.

This change sets the inital polling interval to the same as that used
during normal coretimer operation, 4ms. The interval will still be
slowed to 1 second if a board driver starts calling dahdi_receive().

DAHDI-892.

Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10200

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10201 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-09-13 18:38:19 +00:00
Tzafrir Cohen
c6e5ab448c xpp: firmware to detect the new 2+6 module
New firmwares to handle the new 2FXS/6FXO module.

FPGA_1161.hex, PIC_TYPE_1.hex, PIC_TYPE_2.hex of internal rev. 9732

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10180 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-09-05 10:29:53 +00:00
Doug Bailey
8ff6810740 wcte12xp, wctdm24xxp: Update VPMOCT032 firmware to 1.11.0.
Firmware version 1.11.0 resolves an issue where the driver fails to
detect certain VPMOCT032 modules after a cold boot.

Signed-off-by: Doug Bailey <dbailey@digium.com>
Acked-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10172

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10173 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-30 21:06:20 +00:00
Tzafrir Cohen
f3262ae381 xpp: FXS: new 2+6 module has no digital I/O ports
This module is recognized via subtype==4

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10157 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-28 09:45:15 +00:00
Shaun Ruffell
c3c891abdd wctdm24xxp: Set 'fastoffhook' counter to 8ms and turn off calibration delay.
r10006 "wctdm24xxp: Add 'fastpick' module parameter." copied the
fast-off hook module parameter from the wctdm.c driver, but the setting
in that driver does not match the data sheet. The previous commit did
not actually change any of the significant bits in that register. Also,
that commit changed the timer, but did not disable the callibration
delay which is necessary for Type-II callerid.

The fastpickup option in the wctdm24xxp driver should now match the
fastpickup option in the wctdm driver.

DAHDI-224.

Reported-By: Kinnith Wallace <kwallace@digium.com>
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10148

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10150 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-19 22:53:51 +00:00
Shaun Ruffell
2fb5d7d6d7 wctdm: Set 'fastpickup' counter to 8ms
This fixes what looks like a typo in r1055 [1].

[1] http://svnview.digium.com/svn/dahdi?view=revision&revision=1055

Reported-by: Kinnith Wallace <kwallace@digium.com>
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10147

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10149 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-19 22:53:47 +00:00
Shaun Ruffell
08ce93306d wctdm24xxp: Use our own free list for IRQ commands.
Really only *necessary* when SLAB debugging is enabled, but in that
case, can reduce the chance of latency bumps when first loading the
driver. Otherwise the constant slab poisoning / checking in interrupt
context from the kmalloc / kfrees is too much.

Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Acked-by: Russ Meyerriecks <rmeyerriecks@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10144

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10146 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-18 19:35:01 +00:00
Russ Meyerriecks
dac1d88399 wct4xxp: Bug in timing cable with different span density cards
The logic loops through the static cards[] array to determine timing,
    but the subloop was based off the current card's numspans member.
    This could cause a null dereference in the case where two cards of
    different span densities were connected via timing cables.

Reported-by: Doug Bailey <dbailey@digium.com>
Signed-off-by: Russ Meyerriecks <rmeyerriecks@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10140

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10145 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-18 19:34:57 +00:00
Shaun Ruffell
5218e90962 wctc4xxp: Fix lock imbalance in wctc4xxp_watchdog.
r10082 "wctc4xxp: Cleanup in-flight commands when halting due to
hardware error." introduced a lock imblance on the error path where the
cmd_list_lock would be unlocked twice when the board is halted due to a
hardware error. Thanks sparse.

Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10138

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10139 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-15 21:55:49 +00:00
Shaun Ruffell
da2406db64 wcte12xp, wctdm24xxp: Force local interrupts off in the interrupt handler.
r10066 "wctdm24xxp, wcte12xp: Run the ISR with interrupts disabled."
requested that the interrupt handler be run in "fast" mode (disabled)
but this isn't necessarily guaranteed.

This patch makes the interrupt handler itself disable all the interrupts.
Linux commit 470c66239ef0336429b35345f3f615d47341e13b [1] contains a comment
about why this is necessary.

[1] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=470c66239ef03364

(closes issue DAHLIN-248)
Reported-and-Tested-by: Vladimir Mikhelson <vlad@mikhelson.com>
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10118

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10119 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-12 16:06:28 +00:00
Shaun Ruffell
0b52fb24a0 dahdi: Define HAVE_NET_DEVICE_OPS on kernels > 2.6.29
HAVE_NET_DEVICE_OPS was defined in the mainline kernel in commit
47fd5b83 which was first released in 2.6.29. Any kernels after that will
have those fields defined.

Mainline commit e2270ea62ae4d7a removed the feature test macros, so
the easiest thing to do is define HAVE_NET_DEVICE_OPS ourselves on the
kernels since it was committed.

This change is needed to compile against the 3.1 kernel.

Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10109

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10117 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-11 19:56:22 +00:00
Wagner Gegler
2f880acd10 dahdi_dynamic: Call dahdi_receive in rx packet handler.
Currently dahdi_receive is called on all channels in the context of the
master dynamic span. If one span (not the master) receive two packets
before the master span received a packet, the older packet on the
dynamic span would end up lost because the "readchunk" for the
channels would be overwritten by the new packet. DAHLIN-245

Signed-off-by: Wagner Gegler <wagner@aligera.com.br> (License #6268)
Changed dahdi_ec_chunk to dahdi_ec_span.
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10110

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10116 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-11 19:56:18 +00:00
Shaun Ruffell
950a3f2486 wctc4xxp, wcte12xp, wctdm24xxp: Remove check for HAVE_NETDEV_PRIV
DAHDI currently supports kernels >= 2.6.9. netdev_priv() has been in the
mainline kernel since versions 2.6.6 so it's available in all the
supported kernels. This change is needed to compile against the 3.1 kernel.

Signed-off-by: Shaun Ruffell <sruffell@digium.com>

Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10096

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10115 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-11 19:56:14 +00:00
Tzafrir Cohen
2405c809e7 FPGA_1161 rev 9605: EC related bug fixes
Astribank II FPGA firmware rev 9605. Includes two bug fixes:

* Error in checking EC licenses when the license was for exactly 64 or 128
  channels.
* Proper handling of a slave FXO Astribank (in line with the quirks
  handling from r10019).

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10100 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-09 12:26:35 +00:00
Tzafrir Cohen
eb1c6cbeed A stable branch for DAHDI-linux 2.5
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10098 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-08-09 09:38:56 +00:00
Shaun Ruffell
9fd43e0139 wctc4xxp: Cleanup in-flight commands when halting due to hardware error.
On one system I was seeing the board reset in the middle of a
transaction. Any commands that were on the response list when this would
happen would never be completed and the process would then be stuck in
an uninterruptible sleep. This change also prevents the driver from
sleeping in timer context, which would result in a kernel panic.

This change at least lets an error message propogate back to the user.

DAHDI-880

Signed-off-by: Shaun Ruffell <sruffell@digium.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10082 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-26 20:19:30 +00:00
Russ Meyerriecks
1813c9ad09 wcb4xxp: Prevent null pointer dereference on spanconfig
In the rare case where spanconfig is called while there is pending data
on the hdlc channel, the hdlc_getbuf interrupt could try to read from
the hdlc buffer before the channel was fully setup. This could
potentially result in a null pointer dereference. This condition has
existed since the creation of the wcb4xxp driver.

Signed-off-by: Russ Meyerriecks <rmeyerriecks@digium.com>
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10079 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-22 17:56:07 +00:00
Shaun Ruffell
00764f705c dahdi: Drivers that do not support hwec should not report hwec is available.
When attaching software echocans to a channel, if there is a hardware
echocan available always give preference to them.

Revision 9995 "dahdi: Always attach hwec to a channel if available" had
an error where if a driver did not even support an option of hardware
echocan, dahdi-base would take that to mean there always was a hardware
echocan available on the channel.

DAHLIN-246

Reported-by: Michael L. Young
Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Acked-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10070 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-21 16:26:31 +00:00
Shaun Ruffell
071cfdc983 wctdm24xxp, wcte12xp: Run the ISR with interrupts disabled.
Revision 9886, "wcte12xp: Use the in-hardirq versions of
dahdi_receive/dahdi_transmit", changed the call into dahdi_receive and
dahdi_transmit to use versions that assume local interrupts are already
disabled.  Not all versions of the kernel run interrupt service routines with
all interrupts disabled and therefore it was possible to lock up a CPU with a
recursive grab of the chan_lock.

When LOCKDEP was enabled (on debug kernels) interrupt handlers were run
atomically so this problem would only occur on pre 2.6.35 kernels that did not
have lockdep enabled.

Signed-off-by: Shaun Ruffell <sruffell@digium.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10066 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-21 03:11:20 +00:00
Russ Meyerriecks
abafafcdfe wcte12xp: Fix bug when not recognizing loopup codes
The wcte12xp wasn't recognizing loopup/loopdown signals. The debounce was so
long that it was preventing the loopup/loopdown signals from being registered
properly. Removed the debounce entirely as it was unnecessary to the operation.

Signed-off-by: Russ Meyerriecks <rmeyerriecks@digium.com>
Acked-by: Shaun Ruffell <sruffell@digium.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10064 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 21:32:13 +00:00
Russ Meyerriecks
0fa8ec572b wct4xxp: Fixed a bug where it sent loopdown signals forever
The wct4xxp driver was resetting it's maint state to NONE prematurely.

Signed-off-by: Russ Meyerriecks <rmeyerriecks@digium.com>
Acked-by: Shaun Ruffell <sruffell@digium.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10063 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 21:32:09 +00:00
Shaun Ruffell
91da279443 wct4xxp: Fix compilation when VPM_SUPPORT is not defined.
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10061 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 17:24:31 +00:00
Doug Bailey
64b150eb96 oct612x: Increase the size of some of the instance variables.
Revision 9750 "wct4xxp: Reduce the memory footprint of the hardware
echocanceler" reduced the number of bits used to store some structure
members. Some of the new field lengths were unable to store all the
possible values the API as used assigned to the fields, resulting in
channels never entering power down mode when they were disabled like
they were previously.

The change for byEchoOperationMode was found in testing the operation of
the VPMOCT032 which currently uses the same code. The others were done
via a review of the API doc.

This change represents negligable risk and contains no logic changes.
It only increases the memory footprint of the API instance in the
kernel.

Signed-off-by: Doug Bailey <dbailey@digium.com>
Acked-by: Shaun Ruffell <sruffell@digium.com>
Acked-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10060 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 17:24:27 +00:00
Tzafrir Cohen
3adb075975 README: KVERS, KSRC in live.conf
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10058 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 16:50:54 +00:00
Tzafrir Cohen
26116a08c5 live_dahdi: symlink_ast
live_dahdi: Add a new command: symlink_ast, to make the system's
/etc/asterisk/dahdi-channels.conf a symlink to the one generated by
'reload' / 'genconf'.

If the system dahdi-channels.conf is a generated one and has not edited,
there's no real harm with running this.

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10057 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 16:50:34 +00:00
Tzafrir Cohen
b2f71aa2b8 get registration_mutex at free_pseudo
Make sure that the call to dahdi_chan_unreg() in free_pseudo() is
protected by the registration_mutex, like the other calls to that
function.

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
Acked-By: Oron Peled <oron.peled@xorcom.com>
Acked-by: Shaun Ruffell <sruffell@digium.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10056 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 16:50:14 +00:00
Tzafrir Cohen
47823b3a74 xpp: increase command queue lenge to 1000
Required by CAS in latest (2.5) DAHDI versions.

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10055 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 16:49:53 +00:00
Tzafrir Cohen
6c2233c894 xpp: make quirk bit flags unsigned
This avoids a nag about a meaningless single-bit signed int.

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10054 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 16:49:31 +00:00
Tzafrir Cohen
0ab741b32d xpp: PRI_timing_priority can be static.
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10053 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 16:49:07 +00:00
Tzafrir Cohen
6308ee5f7a xpp: rate limit queue overflow messages
If the CPU becomes overly busy, merely printing the "Overflow in the
recieve_queue" messages becomes CPU-intensive on its own right.

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10052 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 16:48:46 +00:00
Tzafrir Cohen
dd270a3fdc live_dahdi: xpp_fxloader: use live xpp.conf
xpp_fxloader also reads /etc/dahdi/xpp.conf in one specific case. Make
it use the live copy.

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10051 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 16:48:24 +00:00
Tzafrir Cohen
f7dadef95f live_dahdi: no need to create asterisk at genconf
/etc/asterisk already gets generated at config. No need to re-create it
at genconf time.

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10050 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-20 16:48:05 +00:00
Shaun Ruffell
643b60ffb0 wcte12xp: Close a potential race on driver unload.
The shutdown logic requires that all CPUs see that the INITIALIZED bit
has been cleared. Otherwise it may be possible for the workqueue to run
after the hardware resources have been released.

Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Acked-by: Russ Meyerriecks <rmeyerriecks@digium.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10047 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2011-07-18 23:32:21 +00:00
26 changed files with 2411 additions and 1772 deletions

View File

@@ -1 +1 @@
2.5.0-rc1
2.5.0.2

457
ChangeLog
View File

@@ -1,3 +1,460 @@
2011-10-21 Shaun Ruffell <sruffell@digium.com>
* dahdi-linux 2.5.0.2 released.
2011-10-21 19:48 +0000 [r10253-10254] Shaun Ruffell <sruffell@digium.com>
* include/dahdi/kernel.h, drivers/dahdi/wctc4xxp/base.c: dahdi:
Move WARN_ON_ONCE from wctc4xxp driver to include/dahdi/kernel.h
I only generally test on RHEL 4 when testing against kernels
older than 2.6.18. Apparently OpenSUSE 10.1 runs with 2.6.16 and
doesn't have WARN_ON_ONCE backported. I took the patch Richard
Miller originally attached to the issue and moved it to
include/dahdi/kernel.h so it would be available for all the board
drivers in the future. Internal-Issue-ID: DAHLIN-260 Reported-by:
Richard Miller Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10252
* drivers/dahdi/wcb4xxp/base.c: wcb4xxp: Do not show LASVEGAS2 as
echocan name if vpmsupport is set to 0 This fixes an issue where
"EC: LASVEGAS2" was displayed in /proc/dahdi/x for a B410P span
even though vpmsupport was disabled with the module parameter.
Internal-Issue-ID: DAHLIN-247 Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10251
2011-10-12 16:32 +0000 [r10221] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/wct4xxp/base.c: wct4xxp: Fix condition where
hardware echo canceler erroneously mutes DTMF. Commit r9750
"wct4xxp: Reduce the memory footprint of the hardware
echocanceler.", as part of reducing the non-pageable memory
required to support the VPMOCT064 and VPMOCT128, disabled caching
of some hardware echocan registers. This resulted in more
physical reads to the echo canceler. These new read transactions
exposed an existing issue where sometimes reads could be turned
into writes which put a channel into an unintended state
preventing Asterisk from detecting any DTMF. This issue is
resolved by ensuring that the write signal to the Octasic part is
explicitly cleared between when the address is presented on the
bus and when the read and chip select signals are asserted. The
cost is an increase in the average time to enable / disable echo
cancellation by about 5 us on one Intel Xeon X3220 test machine
(~250ns increase per read from the Octasic part and 20 reads to
enable / disable a channel). This commit resolves a behavioral
regression first introduced in 2.5.0 and 2.4.1 which could take
many calls before revealing itself. This change only affects
cards with a VPMOCT128 or VPMOCT064 installed. Signed-off-by:
Shaun Ruffell <sruffell@digium.com> Acked-by: Doug Bailey
<dbailey@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10220
2011-09-30 19:23 +0000 [r10219] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/wctc4xxp/base.c: wctc4xxp: Allow G723 SID frames to
pass to the hardware decoder. The driver has, until now, dropped
G723 SID frames even though the firmware on the TC400/TCE400 can
handle them. Now let them on through. Reported-and-Tested-by:
Angel Carhuas <acarhuas@colinanet.com> Signed-off-by: Shaun
Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10218
2011-09-27 22:10 +0000 [r10211] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/wctdm24xxp/base.c: wctdm24xxp: Set
dahdi_span.devicetype string in one place. Currently the
devicetype string was set both when the device was first
allocated and updated when an echocanceler was detected. For
simplicity, combine both these steps into a single function. This
change also replaces an improper use of strncat with strlcat.
Additionally, on the 2.5 branch, this change actually makes
r10206 "wctdm24xxp, wcte12xp: Advertise VPMOCT032 presence in
dahdi_span.devicetype", work the way it was originally intended.
That change was only functioning properly previously on trunk.
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10210
2011-09-25 08:59 +0000 [r10208] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/card_fxs.c: xpp: fxs: bugfix for 2fxs+6fxo
cards * Bug sympthoms: wrong FSK VMWI sent few seconds after
offhook. That was caused because the driver kept polling the
(physically unconnected) digital inputs. [note: a workaround for
drivers without this patch is to zero the
'xpd_fxs.poll_digital_inputs' parameter.] * Also, the
digital_inputs/digital_output masks were calculate using a
different condition. * Now we determine number of channels,
digital inputs and digital outputs in a single place and use this
info later to calculate the correct masks. * We poll only if
there are digital_inputs * We added a sanity check in
process_digital_inputs, so we get a notice if it's called on an
xpd without digital inputs (e.g: hypothetic firmware bug).
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com> Acked-by:
Tzafrir Cohen <tzafrir.cohen@xorcom.com>
2011-09-23 20:23 +0000 [r10206-10207] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/dahdi-base.c: dahdi: Check for master in
DAHDI_STARTUP / resolves MeetMe regression. There were a couple
of reports that MeetMe conferences were not working in 2.5.0.1
and that downgrading to 2.4.1.2 resolved the issue. This could
occur if there were no analog spans in a system, and all the
digital spans were out of alarm before DAHDI_STARTUP ioctl was
called by dahdi_cfg. If the spans were *not* out of alarm, they
would be marked master when the span changes it's alarm state.
This would result in a condition where no spans were marked as
the "master" and so the core timer was handling conferencing. The
core timer runs by default at 4ms and most board drivers run at
1ms intervals, but a channel currently only buffers up 2ms of
data when conferenced. Therefore, 2ms of audio from a board was
continuously dropped from the conference every 4ms by default.
This fixes a regression first introduced in 2.5.0 which was
specifically added in revision r9611 "dahdi: Do not locate new
master in interrupt context." Internal-reference-ID: DAHDI-894
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Tested-by:
Dennis Martinez <dmartinez@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10205
* drivers/dahdi/wcte12xp/base.c, drivers/dahdi/wctdm24xxp/base.c:
wctdm24xxp, wcte12xp: Advertise VPMOCT032 presence in
dahdi_span.devicetype. A "(VPMADT032)" string is appended to the
devicetype (as shown by dahdi_scan) for the span if one is
installed. Now append '(VPMOCT032)' if one is installed as well.
Also, for the wcte12xp driver append the VPM name to the device
type after initially probing as opposed to only after the span is
configured. (Related to issue DAHDI-890) Signed-off-by: Shaun
Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10203
2011-09-13 18:38 +0000 [r10201] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/dahdi-base.c: dahdi: Decrease the initial coretimer
delay to 4ms from 1 second. DAHDI currently waits a second before
checking if a board driver is calling dahdi_receive and switching
to internal timing. Some versions of Asterisk (I was looking at
1.4.42 when writing this) only wait 300ms for a timer to expire
when first starting and verifying that DAHDI is properly
configured. This can result in a "ERROR[27673] asterisk.c:
Asterisk has detected a problem with your DAHDI configuration and
will shutdown for your protection. You have options:" message if
asterisk is started soon after loading DAHDI. This change sets
the inital polling interval to the same as that used during
normal coretimer operation, 4ms. The interval will still be
slowed to 1 second if a board driver starts calling
dahdi_receive(). DAHDI-892. Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10200
2011-09-05 10:29 +0000 [r10180] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/firmwares/PIC_TYPE_1.hex,
drivers/dahdi/xpp/firmwares/PIC_TYPE_2.hex,
drivers/dahdi/xpp/firmwares/FPGA_1161.hex: xpp: firmware to
detect the new 2+6 module New firmwares to handle the new
2FXS/6FXO module. FPGA_1161.hex, PIC_TYPE_1.hex, PIC_TYPE_2.hex
of internal rev. 9732 Signed-off-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com>
2011-09-06 Shaun Ruffell <sruffell@digium.com>
* dahdi-linux 2.5.0.1 released.
2011-09-05 10:29 +0000 [r10180] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/firmwares/PIC_TYPE_1.hex,
drivers/dahdi/xpp/firmwares/PIC_TYPE_2.hex,
drivers/dahdi/xpp/firmwares/FPGA_1161.hex: xpp: firmware to
detect the new 2+6 module New firmwares to handle the new
2FXS/6FXO module. FPGA_1161.hex, PIC_TYPE_1.hex, PIC_TYPE_2.hex
of internal rev. 9732 Signed-off-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com>
2011-08-30 21:06 +0000 [r10173] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/firmware/Makefile: wcte12xp, wctdm24xxp: Update
VPMOCT032 firmware to 1.11.0. Firmware version 1.11.0 resolves an
issue where the driver fails to detect certain VPMOCT032 modules
after a cold boot. Signed-off-by: Doug Bailey
<dbailey@digium.com> Acked-by: Shaun Ruffell
<sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10172
2011-08-28 09:45 +0000 [r10157] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/card_fxs.c: xpp: FXS: new 2+6 module has no
digital I/O ports This module is recognized via subtype==4
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
2011-08-19 22:53 +0000 [r10149-10150] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/wctdm24xxp/base.c: wctdm24xxp: Set 'fastoffhook'
counter to 8ms and turn off calibration delay. r10006
"wctdm24xxp: Add 'fastpick' module parameter." copied the
fast-off hook module parameter from the wctdm.c driver, but the
setting in that driver does not match the data sheet. The
previous commit did not actually change any of the significant
bits in that register. Also, that commit changed the timer, but
did not disable the callibration delay which is necessary for
Type-II callerid. The fastpickup option in the wctdm24xxp driver
should now match the fastpickup option in the wctdm driver.
DAHDI-224. Reported-By: Kinnith Wallace <kwallace@digium.com>
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10148
* drivers/dahdi/wctdm.c: wctdm: Set 'fastpickup' counter to 8ms
This fixes what looks like a typo in r1055 [1]. [1]
http://svnview.digium.com/svn/dahdi?view=revision&revision=1055
Reported-by: Kinnith Wallace <kwallace@digium.com> Signed-off-by:
Shaun Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10147
2011-08-18 19:35 +0000 [r10145-10146] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/wctdm24xxp/wctdm24xxp.h,
drivers/dahdi/wctdm24xxp/base.c: wctdm24xxp: Use our own free
list for IRQ commands. Really only *necessary* when SLAB
debugging is enabled, but in that case, can reduce the chance of
latency bumps when first loading the driver. Otherwise the
constant slab poisoning / checking in interrupt context from the
kmalloc / kfrees is too much. Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Acked-by: Russ Meyerriecks
<rmeyerriecks@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10144
* drivers/dahdi/wct4xxp/base.c: wct4xxp: Bug in timing cable with
different span density cards The logic loops through the static
cards[] array to determine timing, but the subloop was based off
the current card's numspans member. This could cause a null
dereference in the case where two cards of different span
densities were connected via timing cables. Reported-by: Doug
Bailey <dbailey@digium.com> Signed-off-by: Russ Meyerriecks
<rmeyerriecks@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10140
2011-08-15 21:55 +0000 [r10139] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/wctc4xxp/base.c: wctc4xxp: Fix lock imbalance in
wctc4xxp_watchdog. r10082 "wctc4xxp: Cleanup in-flight commands
when halting due to hardware error." introduced a lock imblance
on the error path where the cmd_list_lock would be unlocked twice
when the board is halted due to a hardware error. Thanks sparse.
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10138
2011-08-12 16:06 +0000 [r10115-10119] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/voicebus/voicebus.c: wcte12xp, wctdm24xxp: Force
local interrupts off in the interrupt handler. r10066
"wctdm24xxp, wcte12xp: Run the ISR with interrupts disabled."
requested that the interrupt handler be run in "fast" mode
(disabled) but this isn't necessarily guaranteed. This patch
makes the interrupt handler itself disable all the interrupts.
Linux commit 470c66239ef0336429b35345f3f615d47341e13b [1]
contains a comment about why this is necessary. [1]
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=470c66239ef03364
(closes issue DAHLIN-248) Reported-and-Tested-by: Vladimir
Mikhelson <vlad@mikhelson.com> Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10118
* include/dahdi/kernel.h: dahdi: Define HAVE_NET_DEVICE_OPS on
kernels > 2.6.29 HAVE_NET_DEVICE_OPS was defined in the mainline
kernel in commit 47fd5b83 which was first released in 2.6.29. Any
kernels after that will have those fields defined. Mainline
commit e2270ea62ae4d7a removed the feature test macros, so the
easiest thing to do is define HAVE_NET_DEVICE_OPS ourselves on
the kernels since it was committed. This change is needed to
compile against the 3.1 kernel. Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10109
* drivers/dahdi/dahdi_dynamic.c: dahdi_dynamic: Call dahdi_receive
in rx packet handler. Currently dahdi_receive is called on all
channels in the context of the master dynamic span. If one span
(not the master) receive two packets before the master span
received a packet, the older packet on the dynamic span would end
up lost because the "readchunk" for the channels would be
overwritten by the new packet. DAHLIN-245 Signed-off-by: Wagner
Gegler <wagner@aligera.com.br> (License #6268) Changed
dahdi_ec_chunk to dahdi_ec_span. Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10110
* drivers/dahdi/voicebus/voicebus_net.c,
drivers/dahdi/wctc4xxp/base.c: wctc4xxp, wcte12xp, wctdm24xxp:
Remove check for HAVE_NETDEV_PRIV DAHDI currently supports
kernels >= 2.6.9. netdev_priv() has been in the mainline kernel
since versions 2.6.6 so it's available in all the supported
kernels. This change is needed to compile against the 3.1 kernel.
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10096
2011-08-09 12:26 +0000 [r10098-10100] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/firmwares/FPGA_1161.hex: FPGA_1161 rev 9605: EC
related bug fixes Astribank II FPGA firmware rev 9605. Includes
two bug fixes: * Error in checking EC licenses when the license
was for exactly 64 or 128 channels. * Proper handling of a slave
FXO Astribank (in line with the quirks handling from r10019).
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* / (added): A stable branch for DAHDI-linux 2.5
2011-08-05 Shaun Ruffell <sruffell@digium.com>
* dahdi-linux 2.5.0 released.
2011-07-26 20:19 +0000 [r10082] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/wctc4xxp/base.c: wctc4xxp: Cleanup in-flight
commands when halting due to hardware error. On one system I was
seeing the board reset in the middle of a transaction. Any
commands that were on the response list when this would happen
would never be completed and the process would then be stuck in
an uninterruptible sleep. This change also prevents the driver
from sleeping in timer context, which would result in a kernel
panic. This change at least lets an error message propogate back
to the user. DAHDI-880 Signed-off-by: Shaun Ruffell
<sruffell@digium.com>
2011-07-22 17:56 +0000 [r10079] Russ Meyerriecks <rmeyerreicks@digium.com>
* drivers/dahdi/wcb4xxp/base.c: wcb4xxp: Prevent null pointer
dereference on spanconfig In the rare case where spanconfig is
called while there is pending data on the hdlc channel, the
hdlc_getbuf interrupt could try to read from the hdlc buffer
before the channel was fully setup. This could potentially result
in a null pointer dereference. This condition has existed since
the creation of the wcb4xxp driver. Signed-off-by: Russ
Meyerriecks <rmeyerriecks@digium.com> Signed-off-by: Shaun
Ruffell <sruffell@digium.com>
2011-07-21 Shaun Ruffell <sruffell@digium.com>
* dahdi-linux version 2.5.0-rc2 released.
2011-07-21 16:26 +0000 [r10066-10070] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/dahdi-base.c: dahdi: Drivers that do not support
hwec should not report hwec is available. When attaching software
echocans to a channel, if there is a hardware echocan available
always give preference to them. Revision 9995 "dahdi: Always
attach hwec to a channel if available" had an error where if a
driver did not even support an option of hardware echocan,
dahdi-base would take that to mean there always was a hardware
echocan available on the channel. DAHLIN-246 Reported-by: Michael
L. Young Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Acked-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/voicebus/voicebus.c: wctdm24xxp, wcte12xp: Run the
ISR with interrupts disabled. Revision 9886, "wcte12xp: Use the
in-hardirq versions of dahdi_receive/dahdi_transmit", changed the
call into dahdi_receive and dahdi_transmit to use versions that
assume local interrupts are already disabled. Not all versions of
the kernel run interrupt service routines with all interrupts
disabled and therefore it was possible to lock up a CPU with a
recursive grab of the chan_lock. When LOCKDEP was enabled (on
debug kernels) interrupt handlers were run atomically so this
problem would only occur on pre 2.6.35 kernels that did not have
lockdep enabled. Signed-off-by: Shaun Ruffell
<sruffell@digium.com>
2011-07-20 21:32 +0000 [r10063-10064] Russ Meyerriecks <rmeyerreicks@digium.com>
* drivers/dahdi/wcte12xp/base.c: wcte12xp: Fix bug when not
recognizing loopup codes The wcte12xp wasn't recognizing
loopup/loopdown signals. The debounce was so long that it was
preventing the loopup/loopdown signals from being registered
properly. Removed the debounce entirely as it was unnecessary to
the operation. Signed-off-by: Russ Meyerriecks
<rmeyerriecks@digium.com> Acked-by: Shaun Ruffell
<sruffell@digium.com>
* drivers/dahdi/wct4xxp/base.c: wct4xxp: Fixed a bug where it sent
loopdown signals forever The wct4xxp driver was resetting it's
maint state to NONE prematurely. Signed-off-by: Russ Meyerriecks
<rmeyerriecks@digium.com> Acked-by: Shaun Ruffell
<sruffell@digium.com>
2011-07-20 17:24 +0000 [r10060-10061] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/wct4xxp/base.c: wct4xxp: Fix compilation when
VPM_SUPPORT is not defined. Signed-off-by: Shaun Ruffell
<sruffell@digium.com>
* drivers/dahdi/oct612x/include/oct6100api/oct6100_channel_inst.h:
oct612x: Increase the size of some of the instance variables.
Revision 9750 "wct4xxp: Reduce the memory footprint of the
hardware echocanceler" reduced the number of bits used to store
some structure members. Some of the new field lengths were unable
to store all the possible values the API as used assigned to the
fields, resulting in channels never entering power down mode when
they were disabled like they were previously. The change for
byEchoOperationMode was found in testing the operation of the
VPMOCT032 which currently uses the same code. The others were
done via a review of the API doc. This change represents
negligable risk and contains no logic changes. It only increases
the memory footprint of the API instance in the kernel.
Signed-off-by: Doug Bailey <dbailey@digium.com> Acked-by: Shaun
Ruffell <sruffell@digium.com> Acked-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com>
2011-07-20 16:50 +0000 [r10050-10058] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* README: README: KVERS, KSRC in live.conf Signed-off-by: Tzafrir
Cohen <tzafrir.cohen@xorcom.com>
* build_tools/live_dahdi: live_dahdi: symlink_ast live_dahdi: Add a
new command: symlink_ast, to make the system's
/etc/asterisk/dahdi-channels.conf a symlink to the one generated
by 'reload' / 'genconf'. If the system dahdi-channels.conf is a
generated one and has not edited, there's no real harm with
running this. Signed-off-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com>
* drivers/dahdi/dahdi-base.c: get registration_mutex at free_pseudo
Make sure that the call to dahdi_chan_unreg() in free_pseudo() is
protected by the registration_mutex, like the other calls to that
function. Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
Acked-By: Oron Peled <oron.peled@xorcom.com> Acked-by: Shaun
Ruffell <sruffell@digium.com>
* drivers/dahdi/xpp/xbus-core.c: xpp: increase command queue lenge
to 1000 Required by CAS in latest (2.5) DAHDI versions.
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/xbus-core.h: xpp: make quirk bit flags unsigned
This avoids a nag about a meaningless single-bit signed int.
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/card_pri.c: xpp: PRI_timing_priority can be
static. Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/xframe_queue.c: xpp: rate limit queue overflow
messages If the CPU becomes overly busy, merely printing the
"Overflow in the recieve_queue" messages becomes CPU-intensive on
its own right. Signed-off-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com>
* build_tools/live_dahdi: live_dahdi: xpp_fxloader: use live
xpp.conf xpp_fxloader also reads /etc/dahdi/xpp.conf in one
specific case. Make it use the live copy.
* build_tools/live_dahdi: live_dahdi: no need to create asterisk at
genconf /etc/asterisk already gets generated at config. No need
to re-create it at genconf time. Signed-off-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com>
2011-07-18 23:32 +0000 [r10047] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/wcte12xp/base.c: wcte12xp: Close a potential race
on driver unload. The shutdown logic requires that all CPUs see
that the INITIALIZED bit has been cleared. Otherwise it may be
possible for the workqueue to run after the hardware resources
have been released. Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Acked-by: Russ Meyerriecks
<rmeyerriecks@digium.com>
2011-07-12 18:15 +0000 [r10036-10038] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/firmwares/Makefile: xpp: install Octasic

14
README
View File

@@ -380,6 +380,20 @@ A list of modules to remove when unloading. Will be resolved
recursively. The default is 'dahdi'. You may also want to have 'oslec'
or 'hpec' there if you use them.
===== KVERS
If you want to build DAHDI for a different kernel version than the one
currently running on the system (mostly useful for a remote install).
Note that you will normally need to export this, in order for this to
take effect on the 'make' command. In live/live.conf itself have the line:
export KVERS="2.6.39-local"
===== KSRC
Alternatively, if you want to point to an exact kernel source tree,
set it with KSRC. Just like KVERS above, it needs to be explicitly exported.
export KSRC="/usr/src/tree/linux"
Module Parameters
-----------------

View File

@@ -193,7 +193,6 @@ unload_dynamic() {
}
genconf() {
mkdir -p "$DESTDIR/etc/asterisk"
GENCONF_PARAMETERS=$DESTDIR/etc/dahdi/genconf_parameters \
DAHDI_CONF_FILE=$DESTDIR/etc/dahdi/system.conf \
DAHDI_MODS_FILE=$DESTDIR/etc/dahdi/modules \
@@ -225,6 +224,7 @@ usage() {
echo "$me xpp-firm (Reset and load xpp firmware)"
echo "$me genconf dahdi_genconf; dahdi_cfg"
echo "$me asterisk /etc/init.d/asterisk start"
echo "$me symlink_ast symlink dahdi-channels.conf"
echo "$me rsync TARGET (copy filea to /tmp/live in host TARGET)"
echo "$me exec COMMAND (Run COMMAND in 'live' environment)"
echo ""
@@ -300,6 +300,9 @@ genconf)
asterisk)
run_asterisk
;;
symlink_ast)
ln -sf "$DESTDIR/etc/asterisk/dahdi-channels.conf" /etc/asterisk/
;;
reload)
$0 unload
$0 load
@@ -323,6 +326,7 @@ xpp-firm)
"$FIRMWARE_DIR/xpp_fxloader" reset
sleep 5
XPP_FIRMWARE_DIR=$FIRMWARE_DIR \
XPP_CONFIG="$DESTDIR/etc/dahdi/xpp.conf" \
"$FIRMWARE_DIR/xpp_fxloader" load
;;
help|'')

View File

@@ -3065,6 +3065,7 @@ static void dahdi_free_pseudo(struct dahdi_chan *chan)
if (!chan)
return;
mutex_lock(&registration_mutex);
pseudo = chan_to_pseudo(chan);
spin_lock_irqsave(&chan_lock, flags);
@@ -3073,6 +3074,7 @@ static void dahdi_free_pseudo(struct dahdi_chan *chan)
spin_unlock_irqrestore(&chan_lock, flags);
dahdi_chan_unreg(chan);
mutex_unlock(&registration_mutex);
kfree(pseudo);
}
@@ -4795,6 +4797,10 @@ static int dahdi_ioctl_startup(struct file *file, unsigned long data)
*/
s->chans[x]->rxhooksig = DAHDI_RXSIG_INITIAL;
}
/* Now that this span is running, it might be selected as the
* master span */
__dahdi_find_master_span();
}
put_span(s);
return 0;
@@ -4840,8 +4846,10 @@ static int dahdi_ioctl_shutdown(unsigned long data)
*/
static bool dahdi_is_hwec_available(const struct dahdi_chan *chan)
{
if (!hwec_factory.get_name(chan))
if (!chan->span || !chan->span->ops->echocan_name ||
!hwec_factory.get_name(chan))
return false;
return true;
}
@@ -9223,12 +9231,12 @@ static void coretimer_init(void)
init_timer(&core_timer.timer);
core_timer.timer.function = coretimer_func;
core_timer.start_interval = current_kernel_time();
core_timer.timer.expires = jiffies + HZ;
atomic_set(&core_timer.count, 0);
atomic_set(&core_timer.shutdown, 0);
core_timer.interval = max(msecs_to_jiffies(DAHDI_MSECS_PER_CHUNK), 1UL);
if (core_timer.interval < (HZ/250))
core_timer.interval = (HZ/250);
core_timer.timer.expires = jiffies + core_timer.interval;
add_timer(&core_timer.timer);
}

View File

@@ -200,16 +200,9 @@ static void __dahdi_dynamic_run(void)
{
struct dahdi_dynamic *d;
struct dahdi_dynamic_driver *drv;
int y;
rcu_read_lock();
list_for_each_entry_rcu(d, &dspan_list, list) {
for (y = 0; y < d->span.channels; y++) {
struct dahdi_chan *const c = d->span.chans[y];
/* Echo cancel double buffered data */
dahdi_ec_chunk(c, c->readchunk, c->writechunk);
}
dahdi_receive(&d->span);
dahdi_transmit(&d->span);
/* Handle all transmissions now */
dahdi_dynamic_sendmessage(d);
@@ -370,6 +363,9 @@ void dahdi_dynamic_receive(struct dahdi_span *span, unsigned char *msg, int msgl
if (unlikely(rxpos != rxcnt))
printk(KERN_NOTICE "Span %s: Expected seq no %d, but received %d instead\n", span->name, rxcnt, rxpos);
dahdi_ec_span(span);
dahdi_receive(span);
/* If this is our master span, then run everything */
if (master)
dahdi_dynamic_run();

View File

@@ -27,7 +27,7 @@ OCT6114_128_VERSION:=1.05.01
TC400M_VERSION:=MR6.12
VPMADT032_VERSION:=1.25.0
HX8_VERSION:=2.06
VPMOCT032_VERSION:=1.8.0
VPMOCT032_VERSION:=1.11.0
FIRMWARE_URL:=http://downloads.digium.com/pub/telephony/firmware/releases

View File

@@ -56,10 +56,10 @@ typedef struct _OCT6100_API_CHANNEL_TDM_
UINT8 byRoutPcmLaw : 1;
UINT8 bySoutPcmLaw : 1;
UINT8 byRinNumTssts : 1;
UINT8 bySinNumTssts : 1;
UINT8 byRoutNumTssts : 1;
UINT8 bySoutNumTssts : 1;
UINT8 byRinNumTssts : 2;
UINT8 bySinNumTssts : 2;
UINT8 byRoutNumTssts : 2;
UINT8 bySoutNumTssts : 2;
/* RIN port. */
UINT16 usRinTimeslot;
@@ -101,19 +101,20 @@ typedef struct _OCT6100_API_CHANNEL_VQE_
UINT8 fSoutAdaptiveNoiseReduction : 1;
UINT8 fDtmfToneRemoval : 1;
UINT8 fAcousticEcho : 1;
UINT8 byComfortNoiseMode : 1;
UINT8 byComfortNoiseMode : 2;
UINT8 fSoutNaturalListenerEnhancement : 1;
UINT8 fRoutNoiseReduction : 1;
UINT8 fEnableMusicProtection : 1;
UINT8 fIdleCodeDetection : 1;
UINT8 byAnrVoiceNoiseSegregation : 1;
UINT8 byAnrVoiceNoiseSegregation : 4;
UINT8 byDoubleTalkBehavior : 1;
UINT8 fSoutNoiseBleaching : 1;
UINT8 fSoutConferencingNoiseReduction : 1;
UINT8 bySoutAutomaticListenerEnhancementGainDb : 1;
UINT8 byNonLinearityBehaviorA : 1;
UINT8 byNonLinearityBehaviorB : 1;
UINT8 bySoutNaturalListenerEnhancementGainDb : 1;
UINT8 byNonLinearityBehaviorA : 4;
UINT8 byNonLinearityBehaviorB : 4;
UINT8 bySoutAutomaticListenerEnhancementGainDb;
UINT8 bySoutNaturalListenerEnhancementGainDb;
OCT_INT8 chRinAutomaticLevelControlTargetDb;
OCT_INT8 chSoutAutomaticLevelControlTargetDb;
@@ -142,15 +143,15 @@ typedef struct _OCT6100_API_CHANNEL_CODEC_
UINT8 byAdpcmNibblePosition : 1;
UINT8 fEnableSilenceSuppression : 1;
UINT8 byEncoderPort : 1;
UINT8 byEncodingRate : 1;
UINT8 byEncoderPort : 4;
UINT8 byDecoderPort : 4;
UINT8 byDecoderPort : 1;
UINT8 byDecodingRate : 1;
UINT8 byPhasingType : 2;
UINT8 byEncodingRate;
UINT8 byDecodingRate;
UINT8 byPhase : 1;
UINT8 byPhasingType : 1;
UINT16 byPhase;
} tOCT6100_API_CHANNEL_CODEC, *tPOCT6100_API_CHANNEL_CODEC;
typedef struct _OCT6100_API_CHANNEL_
@@ -171,7 +172,7 @@ typedef struct _OCT6100_API_CHANNEL_
UINT8 fEnableToneDisabler : 1;
/* Current echo operation mode. */
UINT8 byEchoOperationMode : 1;
UINT8 byEchoOperationMode : 3;
UINT8 byToneDisablerStatus : 1;
@@ -367,7 +368,7 @@ typedef struct _OCT6100_API_BIDIR_CHANNEL_
/* Flag specifying whether the entry is used or not. */
UINT8 fReserved : 1;
/* Count used to manage entry handles allocated to user. */
UINT8 byEntryOpenCnt : 1;
UINT8 byEntryOpenCnt;
} tOCT6100_API_BIDIR_CHANNEL, *tPOCT6100_API_BIDIR_CHANNEL;

View File

@@ -1683,6 +1683,7 @@ vb_isr(int irq, void *dev_id)
#endif
{
struct voicebus *vb = dev_id;
unsigned long flags;
u32 int_status;
int_status = __vb_getctl(vb, SR_CSR5);
@@ -1693,6 +1694,8 @@ vb_isr(int irq, void *dev_id)
if (!int_status)
return IRQ_NONE;
local_irq_save(flags);
if (unlikely((int_status &
(TX_UNAVAILABLE_INTERRUPT|RX_UNAVAILABLE_INTERRUPT)) &&
!test_bit(VOICEBUS_STOP, &vb->flags) &&
@@ -1733,6 +1736,7 @@ vb_isr(int irq, void *dev_id)
/* Clear the interrupt(s) */
__vb_setctl(vb, SR_CSR5, int_status);
}
local_irq_restore(flags);
return IRQ_HANDLED;
}

View File

@@ -35,22 +35,16 @@
#ifdef VOICEBUS_NET_DEBUG
#ifdef HAVE_NETDEV_PRIV
struct voicebus_netdev_priv {
struct voicebus *vb;
};
#endif
static inline struct voicebus *
voicebus_from_netdev(struct net_device *netdev)
{
#ifdef HAVE_NETDEV_PRIV
struct voicebus_netdev_priv *priv;
priv = netdev_priv(netdev);
return priv->vb;
#else
return netdev->priv;
#endif
}
static void *
@@ -209,23 +203,14 @@ int vb_net_register(struct voicebus *vb, const char *board_name)
{
int res;
struct net_device *netdev;
# ifdef HAVE_NETDEV_PRIV
struct voicebus_netdev_priv *priv;
# endif
const char our_mac[] = { 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
# ifdef HAVE_NETDEV_PRIV
netdev = alloc_netdev(sizeof(*priv), board_name, ether_setup);
if (!netdev)
return -ENOMEM;
priv = netdev_priv(netdev);
priv->vb = vb;
# else
netdev = alloc_netdev(0, vb->board_name, ether_setup);
if (!netdev)
return -ENOMEM;
netdev->priv = vb;
# endif
memcpy(netdev->dev_addr, our_mac, sizeof(our_mac));
# ifdef HAVE_NET_DEVICE_OPS
netdev->netdev_ops = &vb_netdev_ops;

View File

@@ -2205,7 +2205,7 @@ static const char *b4xxp_echocan_name(const struct dahdi_chan *chan)
{
struct b4xxp_span *bspan = container_of(chan->span, struct b4xxp_span,
span);
if (bspan->parent->card_type == B410P)
if (vpmsupport && (B410P == bspan->parent->card_type))
return "LASVEGAS2";
return NULL;
}
@@ -2375,6 +2375,9 @@ b4xxp_chanconfig(struct file *file, struct dahdi_chan *chan, int sigtype)
if (alreadyrunning && bspan->sigchan) {
hdlc_stop(b4, fifo);
atomic_set(&bspan->hdlc_pending, 0);
bspan->sigactive = 0;
smp_mb();
bspan->sigchan = NULL;
}

View File

@@ -244,9 +244,11 @@ static int altab[] = {
#define CANARY 0xc0de
/* names of available HWEC modules */
#ifdef VPM_SUPPORT
static const char *vpm400_name = "VPM400M";
static const char *vpmoct064_name = "VPMOCT064";
static const char *vpmoct128_name = "VPMOCT128";
#endif
#define PORTS_PER_FRAMER 4
@@ -764,11 +766,9 @@ static inline unsigned int __t4_raw_oct_in(struct t4 *wc, const unsigned int add
__t4_pci_out(wc, WC_LADDR, (WC_LWRITE | WC_LALE));
if (!pedanticpci)
__t4_pci_in(wc, WC_VERSION);
#ifdef PEDANTIC_OCTASIC_CHECKING
__t4_pci_out(wc, WC_LADDR, (WC_LALE));
if (!pedanticpci)
__t4_pci_in(wc, WC_VERSION);
#endif
if (!octopt) {
__t4_gpio_setdir(wc, 0xff, 0x00);
__t4_gpio_set(wc, 0xff, 0x00);
@@ -1635,7 +1635,6 @@ static int t4_maint(struct dahdi_span *span, int cmd)
dev_info(&wc->dev->dev, "Transmitting loopdown code\n");
t4_clear_maint(span);
t4_set_framer_bits(wc, span->offset, FMR5, FMR5_XLD);
ts->span.maintstat = DAHDI_MAINT_NONE;
break;
case DAHDI_MAINT_FAS_DEFECT:
t4_framer_out(wc, span->offset, IERR_T, IFASE);
@@ -2032,6 +2031,7 @@ static void set_span_devicetype(struct t4 *wc)
ts = wc->tspans[x];
strlcpy(ts->span.devicetype, wc->variety,
sizeof(ts->span.devicetype));
#ifdef VPM_SUPPORT
if (wc->vpm == T4_VPM_PRESENT) {
if (!wc->vpm450m)
strncat(ts->span.devicetype, " (VPM400M)", sizeof(ts->span.devicetype) - 1);
@@ -2039,6 +2039,7 @@ static void set_span_devicetype(struct t4 *wc)
strncat(ts->span.devicetype, (wc->numspans > 2) ? " (VPMOCT128)" : " (VPMOCT064)",
sizeof(ts->span.devicetype) - 1);
}
#endif
}
}
@@ -2381,7 +2382,7 @@ static int __t4_findsync(struct t4 *wc)
while (p < 8) {
nonzero = 0;
for (x=0;cards[x];x++) {
for (i = 0; i < wc->numspans; i++) {
for (i = 0; i < cards[x]->numspans; i++) {
if (cards[x]->tspans[i]->syncpos) {
nonzero = 1;
if ((cards[x]->tspans[i]->syncpos == p) &&
@@ -4015,6 +4016,7 @@ DAHDI_IRQ_HANDLER(t4_interrupt_gen2)
t4_framer_interrupt(wc, 3);
}
#ifdef VPM_SUPPORT
if (wc->vpm && vpmdtmfsupport) {
if (wc->vpm450m) {
/* How stupid is it that the octasic can't generate an
@@ -4028,6 +4030,7 @@ DAHDI_IRQ_HANDLER(t4_interrupt_gen2)
set_bit(T4_CHECK_VPM, &wc->checkflag);
}
}
#endif
spin_lock(&wc->reglock);
@@ -4919,10 +4922,12 @@ static void _t4_remove_one(struct t4 *wc)
/* Stop hardware */
t4_hardware_stop(wc);
#ifdef VPM_SUPPORT
/* Release vpm450m */
if (wc->vpm450m)
release_vpm450m(wc->vpm450m);
wc->vpm450m = NULL;
#endif
/* Unregister spans */
basesize = DAHDI_MAX_CHUNKSIZE * 32 * 4;

View File

@@ -73,20 +73,6 @@
dev_info(&(wc)->pdev->dev, _fmt, ## _args); \
} \
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18)
#ifndef WARN_ON_ONCE
#define WARN_ON_ONCE(__condition) do { \
static int __once = 1; \
if (unlikely(__condition)) { \
if (__once) { \
__once = 0; \
WARN_ON(0); \
} \
} \
} while (0)
#endif
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 14)
/* also added in RHEL kernels with the OpenInfiniband backport: */
#if LINUX_VERSION_CODE != KERNEL_VERSION(2, 6, 9) || !defined(DEFINE_SPINLOCK)
@@ -394,22 +380,16 @@ struct wcdte {
#endif
};
#ifdef HAVE_NETDEV_PRIV
struct wcdte_netdev_priv {
struct wcdte *wc;
};
#endif
static inline struct wcdte *
wcdte_from_netdev(struct net_device *netdev)
{
#ifdef HAVE_NETDEV_PRIV
struct wcdte_netdev_priv *priv;
priv = netdev_priv(netdev);
return priv->wc;
#else
return netdev->priv;
#endif
}
@@ -686,23 +666,14 @@ wctc4xxp_net_register(struct wcdte *wc)
{
int res;
struct net_device *netdev;
# ifdef HAVE_NETDEV_PRIV
struct wcdte_netdev_priv *priv;
# endif
const char our_mac[] = { 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
# ifdef HAVE_NETDEV_PRIV
netdev = alloc_netdev(sizeof(*priv), wc->board_name, ether_setup);
if (!netdev)
return -ENOMEM;
priv = netdev_priv(netdev);
priv->wc = wc;
# else
netdev = alloc_netdev(0, wc->board_name, ether_setup);
if (!netdev)
return -ENOMEM;
netdev->priv = wc;
# endif
memcpy(netdev->dev_addr, our_mac, sizeof(our_mac));
# ifdef HAVE_NET_DEVICE_OPS
@@ -1614,6 +1585,20 @@ wctc4xxp_transmit_cmd(struct wcdte *wc, struct tcb *cmd)
{
int res;
/* If we're shutdown all commands will timeout. Just complete the
* command here with the timeout flag */
if (unlikely(test_bit(DTE_SHUTDOWN, &wc->flags))) {
if (cmd->flags & DO_NOT_AUTO_FREE) {
cmd->flags |= DTE_CMD_TIMEOUT;
list_del_init(&cmd->node);
complete(&cmd->complete);
} else {
list_del(&cmd->node);
free_cmd(cmd);
}
return;
}
if (cmd->data_len < MIN_PACKET_LEN) {
memset((u8 *)(cmd->data) + cmd->data_len, 0,
MIN_PACKET_LEN-cmd->data_len);
@@ -2159,12 +2144,13 @@ wctc4xxp_write(struct file *file, const char __user *frame,
}
if (DAHDI_FORMAT_G723_1 == dtc->srcfmt) {
if ((G723_5K_BYTES != count) && (G723_6K_BYTES != count)) {
if ((G723_5K_BYTES != count) && (G723_6K_BYTES != count) &&
(G723_SID_BYTES != count)) {
DTE_DEBUG(DTE_DEBUG_GENERAL,
"Trying to transcode packet into G723 format " \
"that is %Zu bytes instead of the expected " \
"%d/%d bytes.\n", count, G723_5K_BYTES,
G723_6K_BYTES);
"%d/%d/%d bytes.\n", count, G723_5K_BYTES,
G723_6K_BYTES, G723_SID_BYTES);
return -EINVAL;
}
cpvt->timestamp += G723_SAMPLES;
@@ -2740,11 +2726,10 @@ wctc4xxp_start_dma(struct wcdte *wc)
}
static void
wctc4xxp_stop_dma(struct wcdte *wc)
_wctc4xxp_stop_dma(struct wcdte *wc)
{
/* Disable interrupts and reset */
unsigned int reg;
unsigned long newjiffies;
/* Disable interrupts */
wctc4xxp_setintmask(wc, 0x00000000);
wctc4xxp_setctl(wc, 0x0084, 0x00000000);
@@ -2753,7 +2738,14 @@ wctc4xxp_stop_dma(struct wcdte *wc)
reg = wctc4xxp_getctl(wc, 0x0000);
reg |= 0x00000001;
wctc4xxp_setctl(wc, 0x0000, reg);
}
static void
wctc4xxp_stop_dma(struct wcdte *wc)
{
unsigned long newjiffies;
_wctc4xxp_stop_dma(wc);
newjiffies = jiffies + HZ; /* One second timeout */
/* We'll wait here for the part to come out of reset */
while (((wctc4xxp_getctl(wc, 0x0000)) & 0x00000001) &&
@@ -2761,7 +2753,6 @@ wctc4xxp_stop_dma(struct wcdte *wc)
msleep(1);
}
#define MDIO_SHIFT_CLK 0x10000
#define MDIO_DATA_WRITE1 0x20000
#define MDIO_ENB 0x00000
@@ -3305,13 +3296,20 @@ wctc4xxp_watchdog(unsigned long data)
if (time_after(jiffies, cmd->timeout)) {
if (++cmd->retries > MAX_RETRIES) {
if (!(cmd->flags & TX_COMPLETE)) {
cmd->flags |= DTE_CMD_TIMEOUT;
list_del_init(&cmd->node);
complete(&cmd->complete);
set_bit(DTE_SHUTDOWN, &wc->flags);
spin_unlock(&wc->cmd_list_lock);
wctc4xxp_stop_dma(wc);
_wctc4xxp_stop_dma(wc);
dev_err(&wc->pdev->dev,
"Board malfunctioning. " \
"Halting operation.\n");
return;
reschedule_timer = 0;
spin_lock(&wc->cmd_list_lock);
break;
}
/* ERROR: We've retried the command and
* haven't received the ACK or the response.

View File

@@ -1710,7 +1710,7 @@ static int wctdm_init_voicedaa(struct wctdm *wc, int card, int fast, int manual,
/* Misc. DAA parameters */
if (fastpickup)
reg31 = 0xb3;
reg31 = 0xe3;
else
reg31 = 0xa3;

View File

@@ -867,6 +867,8 @@ static void _cmd_decipher(struct wctdm *wc, const u8 *eframe, int card)
return;
}
list_add(&cmd->node, &wc->free_isr_commands);
switch (mod->type) {
case FXS:
mod->isrshadow[(68 == address) ? 0 : 1] = value;
@@ -884,8 +886,6 @@ static void _cmd_decipher(struct wctdm *wc, const u8 *eframe, int card)
default:
break;
}
kfree(cmd);
}
/* Call with wc.reglock held and local interrupts disabled. */
@@ -894,9 +894,15 @@ wctdm_isr_getreg(struct wctdm *wc, struct wctdm_module *const mod, u8 address)
{
struct wctdm_cmd *cmd;
cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC);
if (unlikely(!cmd))
return;
if (!list_empty(&wc->free_isr_commands)) {
cmd = list_entry(wc->free_isr_commands.next,
struct wctdm_cmd, node);
list_del(&cmd->node);
} else {
cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC);
if (unlikely(!cmd))
return;
}
cmd->cmd = CMD_RD(address);
cmd->complete = NULL;
@@ -2870,7 +2876,10 @@ wctdm_init_voicedaa(struct wctdm *wc, struct wctdm_module *mod,
wctdm_setreg(wc, mod, 30, reg30);
/* Misc. DAA parameters */
reg31 = (fastpickup) ? 0xb3 : 0xa3;
/* If fast pickup is set, then the off hook counter will be set to 8
* ms, otherwise 128 ms. */
reg31 = (fastpickup) ? 0xe3 : 0xa3;
reg31 |= (fxo_modes[_opermode].ohs2 << 3);
wctdm_setreg(wc, mod, 31, reg31);
@@ -2880,6 +2889,10 @@ wctdm_init_voicedaa(struct wctdm *wc, struct wctdm_module *mod,
/* Enable ISO-Cap */
wctdm_setreg(wc, mod, 6, 0x00);
/* Turn off the calibration delay when fastpickup is enabled. */
if (fastpickup)
wctdm_setreg(wc, mod, 17, wctdm_getreg(wc, mod, 17) | 0x20);
/* Wait 1000ms for ISO-cap to come up */
newjiffies = jiffies;
newjiffies += 2 * HZ;
@@ -4229,7 +4242,6 @@ wctdm_init_span(struct wctdm *wc, int spanno, int chanoffset, int chancount,
(wc->desc->flags & FLAG_EXPRESS) ? " Express" : "",
pdev->bus->number, PCI_SLOT(pdev->devfn) + 1);
s->span.manufacturer = "Digium";
strncpy(s->span.devicetype, wc->desc->name, sizeof(s->span.devicetype) - 1);
if (wc->companding == DAHDI_LAW_DEFAULT) {
if (wc->digi_mods || digital_span)
@@ -4335,13 +4347,6 @@ static void wctdm_fixup_analog_span(struct wctdm *wc, int spanno)
s->chans[y++]->sigcap = 0;
}
}
for (x = 0; x < MAX_SPANS; x++) {
if (!wc->spans[x])
continue;
if (wc->vpmadt032)
strncat(wc->spans[x]->span.devicetype, " (VPMADT032)", sizeof(wc->spans[x]->span.devicetype) - 1);
}
}
static int wctdm_initialize_vpmadt032(struct wctdm *wc)
@@ -4633,6 +4638,7 @@ static void wctdm_back_out_gracefully(struct wctdm *wc)
list_splice_init(&mod->pending_cmds, &local_list);
list_splice_init(&mod->active_cmds, &local_list);
}
list_splice_init(&wc->free_isr_commands, &local_list);
spin_unlock_irqrestore(&wc->reglock, flags);
while (!list_empty(&local_list)) {
@@ -5221,6 +5227,60 @@ static void wctdm_set_tdm410_leds(struct wctdm *wc)
}
}
/**
* wctdm_allocate_irq_commands - Preallocate some commands for use in interrupt context.
* @wc: The board which we're allocating for.
* @count: The number of IRQ commands to allocate.
*
* We need a minimum of 4 * the current latency worth of commands for each
* analog module. When the latency grows, new commands will be allocated, but
* this just represents are best guess as to the number of commands we'll need
* after probing for modules, and reduces the chance that we'll allocate
* memory in interrupt context when the driver first loads.
*
*/
static void wctdm_allocate_irq_commands(struct wctdm *wc, unsigned int count)
{
unsigned long flags;
LIST_HEAD(local_list);
if (!count)
return;
while (count--) {
struct wctdm_cmd *cmd;
cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
if (!cmd)
break;
list_add(&cmd->node, &local_list);
}
spin_lock_irqsave(&wc->reglock, flags);
list_splice(&local_list, &wc->free_isr_commands);
spin_unlock_irqrestore(&wc->reglock, flags);
}
static void set_span_devicetype_string(struct wctdm *wc)
{
unsigned int x;
for (x = 0; x < ARRAY_SIZE(wc->spans); x++) {
struct dahdi_span *const s = &wc->spans[x]->span;
if (!s)
continue;
strlcpy(s->devicetype, wc->desc->name, sizeof(s->devicetype));
if (wc->vpmadt032) {
strlcat(s->devicetype, " (VPMADT032)",
sizeof(s->devicetype));
} else if (wc->vpmoct) {
strlcat(s->devicetype, " (VPMOCT032)",
sizeof(s->devicetype));
}
}
}
#ifdef USE_ASYNC_INIT
struct async_data {
struct pci_dev *pdev;
@@ -5266,6 +5326,7 @@ __wctdm_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
spin_lock_init(&wc->frame_list_lock);
init_waitqueue_head(&wc->regq);
spin_lock_init(&wc->reglock);
INIT_LIST_HEAD(&wc->free_isr_commands);
wc->oldsync = -1;
wc->board_name = kasprintf(GFP_KERNEL, "%s%d", wctdm_driver.name, pos);
@@ -5475,6 +5536,8 @@ __wctdm_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
wctdm_initialize_vpm(wc);
set_span_devicetype_string(wc);
#ifdef USE_ASYNC_INIT
async_synchronize_cookie(cookie);
#endif
@@ -5492,6 +5555,7 @@ __wctdm_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
}
}
wctdm_allocate_irq_commands(wc, anamods * latency * 4);
wc->not_ready--;
dev_info(&wc->vb.pdev->dev,

View File

@@ -255,6 +255,7 @@ struct wctdm {
spinlock_t reglock; /* held when accessing anything affecting the module array */
wait_queue_head_t regq;
struct list_head free_isr_commands;
struct wctdm_module mods[NUM_MODULES];

View File

@@ -1022,9 +1022,13 @@ static void set_span_devicetype(struct t1 *wc)
sizeof(wc->span.devicetype) - 1);
#if defined(VPM_SUPPORT)
if (wc->vpmadt032)
if (wc->vpmadt032) {
strncat(wc->span.devicetype, " (VPMADT032)",
sizeof(wc->span.devicetype) - 1);
} else if (wc->vpmoct) {
strncat(wc->span.devicetype, " (VPMOCT032)",
sizeof(wc->span.devicetype) - 1);
}
#endif
}
@@ -1660,6 +1664,8 @@ static void check_and_load_vpm(struct t1 *wc)
vpmoct_init(vpmoct, t1_vpm_load_complete);
}
set_span_devicetype(wc);
}
#else
static inline void check_and_load_vpm(const struct t1 *wc)
@@ -1937,7 +1943,7 @@ static inline void t1_check_alarms(struct t1 *wc)
/* Detect loopup code if we're not sending one */
if ((!wc->span.mainttimer) && (d & 0x08)) {
/* Loop-up code detected */
if ((wc->loopupcnt++ > 80) && (wc->span.maintstat != DAHDI_MAINT_REMOTELOOP)) {
if ((wc->span.maintstat != DAHDI_MAINT_REMOTELOOP)) {
t1_notice(wc, "Loopup detected,"\
" enabling remote loop\n");
t1_setreg(wc, 0x36, 0x08); /* LIM0: Disable any local loop */
@@ -1949,7 +1955,7 @@ static inline void t1_check_alarms(struct t1 *wc)
/* Same for loopdown code */
if ((!wc->span.mainttimer) && (d & 0x10)) {
/* Loop-down code detected */
if ((wc->loopdowncnt++ > 80) && (wc->span.maintstat == DAHDI_MAINT_REMOTELOOP)) {
if ((wc->span.maintstat == DAHDI_MAINT_REMOTELOOP)) {
t1_notice(wc, "Loopdown detected,"\
" disabling remote loop\n");
t1_setreg(wc, 0x36, 0x08); /* LIM0: Disable any local loop */
@@ -2686,6 +2692,7 @@ static void __devexit te12xp_remove_one(struct pci_dev *pdev)
remove_sysfs_files(wc);
clear_bit(INITIALIZED, &wc->bit_flags);
smp_mb__after_clear_bit();
del_timer_sync(&wc->timer);
flush_workqueue(wc->wq);

View File

@@ -386,6 +386,8 @@ static xpd_t *FXS_card_new(xbus_t *xbus, int unit, int subunit, const xproto_tab
int regular_channels;
struct FXS_priv_data *priv;
int i;
int d_inputs = 0;
int d_outputs = 0;
if(!to_phone) {
XBUS_NOTICE(xbus,
@@ -398,16 +400,30 @@ static xpd_t *FXS_card_new(xbus_t *xbus, int unit, int subunit, const xproto_tab
else
regular_channels = min(8, subunit_ports);
channels = regular_channels;
if(unit == 0)
/* Calculate digital inputs/outputs */
if(unit == 0 && subtype != 4) {
channels += 6; /* 2 DIGITAL OUTPUTS, 4 DIGITAL INPUTS */
d_inputs = LINES_DIGI_INP;
d_outputs = LINES_DIGI_OUT;
}
xpd = xpd_alloc(xbus, unit, subunit, subtype, subunits, sizeof(struct FXS_priv_data), proto_table, channels);
if(!xpd)
return NULL;
if(unit == 0) {
XBUS_DBG(GENERAL, xbus, "First XPD detected. Initialize digital outputs/inputs\n");
PHONEDEV(xpd).digital_outputs = BITMASK(LINES_DIGI_OUT) << regular_channels;
PHONEDEV(xpd).digital_inputs = BITMASK(LINES_DIGI_INP) << (regular_channels + LINES_DIGI_OUT);
}
/* Initialize digital inputs/outputs */
if (d_inputs) {
XBUS_DBG(GENERAL, xbus, "Initialize %d digital inputs\n",
d_inputs);
PHONEDEV(xpd).digital_inputs =
BITMASK(d_inputs) << (regular_channels + d_outputs);
} else
XBUS_DBG(GENERAL, xbus, "No digital inputs\n");
if (d_outputs) {
XBUS_DBG(GENERAL, xbus, "Initialize %d digital outputs\n",
d_outputs);
PHONEDEV(xpd).digital_outputs =
BITMASK(d_outputs) << regular_channels;
} else
XBUS_DBG(GENERAL, xbus, "No digital outputs\n");
PHONEDEV(xpd).direction = TO_PHONE;
xpd->type_name = "FXS";
if(fxs_proc_create(xbus, xpd) < 0)
@@ -1142,7 +1158,7 @@ static int FXS_card_tick(xbus_t *xbus, xpd_t *xpd)
priv = xpd->priv;
BUG_ON(!priv);
#ifdef POLL_DIGITAL_INPUTS
if(poll_digital_inputs && xpd->xbus_idx == 0) {
if (poll_digital_inputs && PHONEDEV(xpd).digital_inputs) {
if((xpd->timer_count % poll_digital_inputs) == 0)
poll_inputs(xpd);
}
@@ -1254,6 +1270,13 @@ static void process_digital_inputs(xpd_t *xpd, const reg_cmd_t *info)
bool offhook = (REG_FIELD(info, data_low) & 0x1) == 0;
xpp_line_t lines = BIT(info->portnum);
/* Sanity check */
if (!PHONEDEV(xpd).digital_inputs) {
XPD_NOTICE(xpd,
"%s called without digital inputs. Ignored\n",
__func__);
return;
}
/* Map SLIC number into line number */
for(i = 0; i < ARRAY_SIZE(input_channels); i++) {
int channo = input_channels[i];
@@ -1366,7 +1389,7 @@ static int FXS_card_register_reply(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *info)
/*
* Process digital inputs polling results
*/
else if(xpd->xbus_idx == 0 && !indirect && regnum == REG_DIGITAL_IOCTRL) {
else if (!indirect && regnum == REG_DIGITAL_IOCTRL) {
process_digital_inputs(xpd, info);
}
#endif

View File

@@ -1783,7 +1783,7 @@ static void PRI_card_pcm_tospan(xpd_t *xpd, xpacket_t *pack)
spin_unlock_irqrestore(&xpd->lock, flags);
}
int PRI_timing_priority(xpd_t *xpd)
static int PRI_timing_priority(xpd_t *xpd)
{
struct PRI_priv_data *priv;

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
#
# $Id: PIC_TYPE_1.hex 7498 2009-11-17 11:38:56Z dima $
# $Id: PIC_TYPE_1.hex 9732 2011-08-24 19:13:55Z dima $
#
:03000000A1EA4A28
:03000100C41C41DB
@@ -99,369 +99,394 @@
:03005F009011807D
:03006000C11E704E
:0300610019074339
:03006200643A6D90
:03006200643A728B
:03006300A68C0266
:03006400C2218036
:03006500190E036E
:03006500190E076A
:03006600743643AA
:03006700A8CA70B4
:03006700A8CA75AF
:03006800209C03D6
:0300690002118001
:03006A00C44E037E
:03006A00C44E077A
:03006B00D8064371
:03006C00024A70D5
:03006D00C00C01C3
:03006E0002203835
:03006F00201A6FE5
:03007000030C1866
:03007100901038B4
:0300720020421910
:03007300030E0F6A
:0300740090103DAC
:03007500202C003C
:03006C00024A75D0
:03006D00C00C04C0
:03006E00022180EC
:03006F00201E0749
:0300700003064341
:03007100901A756D
:03007200204C011E
:030073000300384F
:03007400901A746B
:03007500202C1824
:030076000300384C
:03007700901C02D8
:03007800210180E3
:03007900E03E0363
:03007A0074374395
:03007B00C04A80F8
:03007C00190C3F1D
:03007D007480315B
:03007E00A8CC16F5
:03007F00C04A84F0
:03008000FFFCFF83
:0300810015003136
:03008200643C18C3
:03008300A87A84D4
:0300840020903C8D
:0300850013EE0F68
:03008600A8A09D92
:03008700209703BC
:03008800FFFA8EEE
:0300890017EC0F62
:03008A0021EFFF64
:03008B0003515CC2
:03008C00C1411D52
:03008D00D80A8FFF
:03008E0002421C0F
:03008F00C000307E
:03009000022E0F2E
:0300910020103C00
:03009200030C025A
:0300930090103991
:03009400204C00FD
:030095000300392C
:03009600901C803B
:0300970020202402
:03009800030C084E
:03009900901104BF
:03009A0021003909
:03009B00E01C0066
:03009C00027039B6
:03009D00C18C0013
:03009E00D8002661
:03009F00024025F7
:0300A000C0003E5F
:0300A10002202B0F
:0300A200201C031C
:0300A30003002C2B
:0300A400901C00AD
:0300A500204208EE
:0300A60003003024
:0300A700901901AC
:0300A800202C8089
:0300A90003020847
:0300AA0090103083
:0300AB0021090127
:0300AC0003BC4052
:0300AD00C1403916
:0300AE000246D92E
:0300AF00C01AB3C1
:0300B0000226F92C
:0300B100201BB65B
:0300B200030AAE90
:0300B3009019425F
:0300B400204C02DB
:0300B500030180C4
:0300B600901E0396
:0300B7002077436C
:0300B800030AD464
:0300B900901C0692
:0300BA0021A195EC
:0300BB00141743D4
:0300BC00707AD483
:0300BD00AC07D3BA
:0300BE00181AD439
:0300BF00AC3C0650
:0300C00069B1879C
:0300C100AFA743A3
:0300C200F00AC57C
:0300C300228C0389
:0300C400643AD2C9
:0300C500AFAC07D6
:0300C6001BA187F4
:0300C700C107432B
:0300C800FFFACB71
:0300C90017BC0160
:0300CA0021AAD296
:0300CB00141C03FF
:0300CC0064318715
:0300CD00AD074339
:0300CE00C10AD193
:0300CF0013BC005F
:0300D000C50AD28C
:0300D10003920790
:0300D200799027FB
:0300D300AD2AE172
:0300D40020BC0647
:0300D500D00195C2
:0300D6000386435B
:0300D700219AE18A
:0300D800E07C01C8
:0300D9003481C7A8
:0300DA0034809CD3
:0300DB0034870364
:0300DC00348AE182
:0300DD00030CFF12
:0300DE002060227D
:0300DF0034802743
:0300E000348B4915
:0300E100348C005C
:0300E2003486F36E
:0300E300D05CFFEF
:0300E400031021E5
:0300E500C00C014B
:0300E600032024D0
:0300E70003390AD0
:0300E800C706B395
:0300E900039B7006
:0300EA00C50C0141
:0300EB0003902F50
:0300EC00C18215B9
:0300ED000306D334
:0300EE00C00D80C2
:0300EF00031024D7
:0300F00021B21723
:0300F100032022C7
:0300F200C00C0639
:0300F30003319541
:0300F400C70743F8
:0300F500039B3832
:0300F600C506D369
:0300F700039B3830
:0300F800C40CE055
:0300F90003915719
:0300FA00369643F4
:0300FB00C01B38EF
:0300FC001E6C0077
:0300FD0021C7B761
:0300FE00086C0586
:0300FF007437D77C
:03010000A1EC105F
:030101000267F79B
:03010200C02C020C
:03010300FFF027E3
:0301040016BC1016
:03010500C02D0208
:0301060023EFFFE5
:030107007431420E
:0301080012B69795
:0301090020BD0214
:03010A0003863732
:03010B00C44D10D0
:03010C000390223B
:03010D00C40C809F
:03010E0003912436
:03010F00C00C021F
:0301100002318039
:03011100AACE0370
:03011200B12743CF
:03011300000B26B8
:03011400000C05D7
:030115000001479F
:030116000006439D
:03011700000B26B4
:03011800000C01D7
:0301190000018161
:03011A0000074398
:03011B00000B1FB7
:03011C00000C10C4
:03011D00000021BE
:03011E00000B26AD
:03011F00000C10C1
:030120000001815A
:0301210000074391
:03012200000B26A9
:03012300000C20AD
:03012400000021B7
:03012500000B26A6
:03012600000201D3
:03012700000030A5
:03012800000901CA
:03012900000204CD
:03012A00000030A2
:03012B00000901C7
:03012C00000202CC
:03012D000000309F
:03012E00000901C4
:03012F00000C8041
:03013000000FFFBE
:0301310000016466
:03013200000207C1
:0301330000016266
:03013400000FFFBA
:0301350000015076
:03013600000D08B1
:03013700000122A2
:03013800000201C1
:0301390000003093
:03013A00000901B8
:03013B00000204BB
:03013C0000003090
:03013D00000901B5
:03013E00000202BA
:03013F000000308D
:03014000000901B2
:03014100000C00AF
:0301420000002F8B
:030143000007D3DF
:03014400000B6B42
:03014500000210A5
:0301460000002294
:0301470000020EA5
:030148000000278D
:03014900000C5057
:03014A0000003979
:03014B0000079911
:03014C00000B4B5A
:03014D000002129B
:03014E000000307E
:03014F0000021497
:030150000000317B
:0301510000021396
:030152000006B3F1
:03015300000D108C
:0301540000003276
:03015500000C009B
:0301560000003373
:03015700000C7029
:030158000000396B
:03015900000C5047
:03015A0000003969
:03015B000002158A
:03015C0000003070
:03015D0000021687
:03015E000000316D
:03015F0000020299
:030160000000326A
:03016100000C008F
:030162000006B3E1
:0301630000020790
:0301640000003365
:03016500000C701B
:030166000000395D
:03016700000C5039
:030168000000395B
:03016900000C4047
:03016A0000003959
:03016B00000C0085
:03016C0000003957
:03016D00000C0083
:03007700901219CB
:03007800210E0F47
:03007900E0303D37
:03007A00743C00D3
:03007B00C040384A
:03007C00190C025A
:03007D007481800B
:03007E00A8CE0702
:03007F00C0474334
:03008000FFFA85FF
:03008100150C3F1C
:03008200643031B6
:03008300A87C1640
:03008400209A922D
:0300850013EC0376
:03008600A8A180AE
:03008700209E07B1
:03008800FFF7433C
:0300890017EA8EE5
:03008A0021ECFF67
:03008B00035031EE
:03008C00C14C184C
:03008D00D80A92FC
:03008E00024C031E
:03008F00C000317D
:03009000022C122D
:03009100201A92A0
:0300920003003C2C
:03009300901E0FAD
:0300940020409D6C
:030095000307035B
:03009600901A9C21
:03009700202C0F0B
:03009800030FFF54
:0300990090115C67
:03009A0021011D24
:03009B00E01A9DCB
:03009C0002721CD1
:03009D00C18030EF
:03009E00D80E0F6A
:03009F0002403CE0
:0300A000C00C028F
:0300A10002203901
:0300A200201C001F
:0300A3000300391E
:0300A400901C802D
:0300A500204024D4
:0300A600030C0840
:0300A700901104B1
:0300A800202039DC
:0300A900030C0045
:0300AA009010397A
:0300AB00210C0025
:0300AC0003B02678
:0300AD00C140252A
:0300AE0002403ECF
:0300AF00C0102B53
:0300B000022C031C
:0300B10020102CF0
:0300B200030C40FC
:0300B30090103971
:0300B4002047D909
:0300B500030AB487
:0300B600901C009B
:0300B700207208AC
:0300B80003003012
:0300B9009019019A
:0300BA0021AC80F6
:0300BB0014120814
:0300BC0070703031
:0300BD00AC09018A
:0300BE00181C40CB
:0300BF00AC303929
:0300C00069BC0117
:0300C100AFA037B6
:0300C200F00C60DF
:0300C3002282C8CE
:0300C400643AC3D8
:0300C500AFAC00DD
:0300C6001BA03745
:0300C700C106D996
:0300C800FFFACC70
:0300C90017B6F96E
:0300CA0021ABCF98
:0300CB00141AC73D
:0300CC0064394252
:0300CD00AD0C0275
:0300CE00C10180ED
:0300CF0013BE0756
:0300D000C507431E
:0300D100039AEDA2
:0300D200799C0610
:0300D300AD2195C7
:0300D40020B7430F
:0300D500D00AED61
:0300D6000387D3CA
:0300D700219AED7E
:0300D800E07C06C3
:0300D900348187E8
:0300DA0034874325
:0300DB00348ADE86
:0300DC00348C035E
:0300DD00030AEB28
:0300DE00206C078C
:0300DF00348187E2
:0300E0003487431F
:0300E100348AE47A
:0300E200348C015A
:0300E300D05AEB05
:0300E400031C03F7
:0300E500C00187D0
:0300E600032743AA
:0300E700033AEAEF
:0300E800C70C0042
:0300E900039AEB8C
:0300EA00C5020745
:0300EB0003902758
:0300EC00C18AFACC
:0300ED00030C06FB
:0300EE00C00195B9
:0300EF00031643B2
:0300F00021BAFA38
:0300F100032C01DC
:0300F200C001C783
:0300F30003309C3B
:0300F400C7070338
:0300F500039AFA71
:0300F600C50CFF37
:0300F70003902251
:0300F800C400271A
:0300F900039B6204
:0300FA00369C0031
:0300FB00C016F339
:0300FC001E6CFF78
:0300FD0021C021FE
:0300FE00086C018A
:0300FF0074302436
:03010000A1E90A68
:030101000266B3E0
:03010200C02B8986
:03010300FFFC01FD
:0301040016B02F03
:03010500C0221500
:0301060023E6D31A
:03010700743D80C4
:0301080012B0240E
:0301090020B2170A
:03010A000380224D
:03010B00C44C06DB
:03010C00039195C7
:03010D00C40743E1
:03010E00039B51FF
:03010F00C006D354
:03011000023B515E
:03011100ABECE074
:03011200B12157C1
:03011300000643A0
:03011400000B518C
:03011500000C00DB
:030116000007B728
:03011700000C05D4
:030118000007D706
:03011900000C10C7
:03011A000007F7E4
:03011B00000C02D3
:03011C00000027B9
:03011D00000C10C3
:03011E00000D02CF
:03011F00000FFFCF
:0301200000014299
:030121000006973E
:03012200000D02CB
:030123000006379C
:03012400000D10BB
:03012500000022B5
:03012600000C804A
:03012700000124B0
:03012800000C02C6
:0301290000018052
:03012A00000E07BD
:03012B0000074387
:03012C00000B3F86
:03012D00000C05BE
:03012E0000014786
:03012F0000064384
:03013000000B3F82
:03013100000C01BE
:0301320000018148
:030133000007437F
:03013400000B3885
:03013500000C10AB
:03013600000021A5
:03013700000B3F7B
:03013800000C10A8
:0301390000018141
:03013A0000074378
:03013B00000B3F77
:03013C00000C2094
:03013D000000219E
:03013E00000B3F74
:03013F00000201BA
:030140000000308C
:03014100000901B1
:03014200000204B4
:0301430000003089
:03014400000901AE
:03014500000202B3
:0301460000003086
:03014700000901AB
:03014800000C8028
:03014900000FFFA5
:03014A000001644D
:03014B00000207A8
:03014C000001624D
:03014D00000FFFA1
:03014E000001505D
:03014F00000D0898
:0301500000012289
:03015100000201A8
:030152000000307A
:030153000009019F
:03015400000204A2
:0301550000003077
:030156000009019C
:03015700000202A1
:0301580000003074
:0301590000090199
:03015A00000C0096
:03015B0000002F72
:03015C000007D3C6
:03015D00000B8410
:03015E000002108C
:03015F000000227B
:0301600000020E8C
:0301610000002774
:03016200000C503E
:0301630000003960
:03016400000799F8
:03016500000B6428
:0301660000021282
:0301670000003065
:030168000002147E
:0301690000003162
:03016A000002137D
:03016B000006B3D8
:03016C00000D1073
:03016D000000325D
:03016E00000C0082
:03016F00000AACD7
:03017000000C027E
:0301710000002F5C
:03017200000C0A74
:0301730000002A5F
:03017400000C007C
:0301750000002463
:030176000007D3AC
:03017700000B93E7
:0301780000020181
:0301790000003053
:03017A0000090178
:03017B000002156A
:03017C0000003050
:03017D0000090175
:03017E0000021666
:03017F000000304D
:0301800000090172
:03018100000C1F50
:03018200000D80ED
:0301830000002257
:0301840000020175
:0301850000003047
:030186000009016C
:0301870000020271
:0301880000003044
:0301890000090169
:03018A000002046C
:03018B0000003041
:03018C0000090166
:03018D000002EA83
:03018E0000071057
:03018F00000B91D1
:03019000000B84DD
:030191000007D391
:03019200000BB1AE
:03019300000C1D40
:030194000006D38F
:03019500000D80DA
:0301960000002244
:0301970000020162
:03016F000000335A
:03017000000C7010
:0301710000003952
:03017200000C502E
:0301730000003950
:0301740000021571
:0301750000003057
:030176000002166E
:0301770000003154
:0301780000020280
:0301790000003251
:03017A00000C0076
:03017B000006B3C8
:03017C0000020777
:03017D000000334C
:03017E00000C7002
:03017F0000003944
:03018000000C5020
:0301810000003942
:03018200000C402E
:0301830000003940
:03018400000C006C
:030185000000393E
:03018600000C006A
:03018700000C0069
:03018800000ABEAC
:03018900000C0265
:03018A0000002F43
:03018B00000C0A5B
:03018C0000002A46
:03018D00000C0063
:03018E000000244A
:03018F000007D393
:03019000000BACB5
:0301910000020168
:030192000000303A
:030193000009015F
:0301940000021551
:0301950000003037
:030196000009015C
:030197000002164D
:0301980000003034
:0301990000090159
:03019A000002025E
:03019B0000003031
:03019C0000090156
:03019D0000021845
:03019A00000C1F37
:03019B00000D80D4
:03019C000000223E
:03019D000002015C
:03019E000000302E
:03019F0000090153
:0301A0000002104A
:0301A10000002E2D
:0301A200000C1C32
:0301A3000006D380
:0301A400000D80CB
:0301A50000002235
:0301A60000020153
:0301A70000003025
:0301A8000009014A
:0301A9000002024F
:0301AA0000003022
:0301AB0000090147
:0301AC0000021737
:0301AD000000301F
:0301AE0000090144
:0301AF000007D373
:0301B000000B78C9
:0301B100000C003F
:0301B20000002F1B
:0301B3000007D36F
:0301B400000B6BD2
:0301B500000B45F7
:0301B600000C0733
:0301B70000002F16
:0301B800000C0434
:0301B90000002122
:0301BA00000C0036
:0301BB0000091E1A
:0301BC00000C1024
:0301BD000000211E
:0301BE00000C082A
:0301BF0000091E16
:0301C000000C40F0
:0301C1000000211A
:0301C200000C101E
:0301C30000091E12
:0301C400000C002C
:0301C50000002611
:0301C600000C0129
:0301C7000000290C
:0301C800000C0028
:0301C90000002F04
:0301CA00000C2006
:0301CB000000230E
:0301CC00000A0026
:0301CD00000AAC79
:0301CE00000BCE55
:0301A00000020258
:0301A1000000302B
:0301A20000090150
:0301A30000020453
:0301A40000003028
:0301A5000009014D
:0301A6000002EA6A
:0301A7000007103E
:0301A800000BAA9F
:0301A900000B9DAB
:0301AA000007D378
:0301AB00000BCA7C
:0301AC00000C1D27
:0301AD000006D376
:0301AE00000D80C1
:0301AF000000222B
:0301B00000020149
:0301B1000000301B
:0301B20000090140
:0301B30000020245
:0301B40000003018
:0301B5000009013D
:0301B6000002182C
:0301B70000003015
:0301B8000009013A
:0301B90000021031
:0301BA0000002E14
:0301BB00000C1C19
:0301BC000006D367
:0301BD00000D80B2
:0301BE000000221C
:0301BF000002013A
:0301C0000000300C
:0301C10000090131
:0301C20000020236
:0301C30000003009
:0301C4000009012E
:0301C5000002171E
:0301C60000003006
:0301C7000009012B
:0301C8000007D35A
:0301C900000B9197
:0301CA00000C0026
:0301CB0000002F02
:0301CC000007D356
:0301CD00000B84A0
:0301CE00000B5EC5
:0301CF00000C071A
:0301D00000002FFD
:0301D100000C041B
:0301D20000002109
:0301D300000C001D
:0301D40000091E01
:0301D500000C100B
:0301D60000002105
:0301D700000C0811
:0301D80000091EFD
:0301D900000C40D7
:0301DA0000002101
:0301DB00000C1005
:0301DC0000091EF9
:0301DD00000C0013
:0301DE00000026F8
:0301DF00000C0110
:0301E000000029F3
:0301E100000C000F
:0301E20000002FEB
:0301E300000C20ED
:0301E400000023F5
:0301E500000A000D
:0301E600000ABE4E
:0301E700000BE723
:00000001FF

View File

@@ -1,5 +1,5 @@
#
# $Id: PIC_TYPE_2.hex 7107 2009-05-18 12:35:20Z dima $
# $Id: PIC_TYPE_2.hex 9732 2011-08-24 19:13:55Z dima $
#
:03000000A57A4896
:03000100C41C41DB
@@ -97,243 +97,264 @@
:03005D00E07180CF
:03005E0002CE705F
:03005F00206743D4
:0300600090AA6BF8
:0300600090AA70F3
:03006100205C021E
:03006200D2018048
:03006300D40E03B5
:03006300D40E07B1
:0300640003D6437D
:03006500C1CA6E9F
:03006500C1CA739A
:03006600022C0366
:03006700C0018055
:03006800024E0342
:03006800024E073E
:0300690021D6435A
:03006A00030A6E18
:03006B00901C01E5
:03006C0020203819
:03006D00030A6D16
:03006E00901C18CB
:03006F00204038F6
:030070000302196F
:03007100901E0FCF
:0300720021002248
:03007300024C003C
:03006A00030A7313
:03006B00901C04E2
:03006C00202180D0
:03006D00030E0778
:03006E00901643A6
:03006F00204A73B1
:03007000030C017D
:03007100901038B4
:03007200210A72EE
:03007300024C1824
:03007400C0303861
:030075000842003E
:03007600603E03E6
:03007700A7AF022E
:030078002097438B
:03007900A7CA7E95
:03007A00C00C00B7
:03007B00A7C031EA
:03007C00187C12DB
:03007D00149A8250
:03007E00643C00DF
:03007F00AAB031F3
:030080001A7C18CF
:03008100C50A822B
:0300820003903BAD
:03008300799E0F54
:03008400A830821F
:0300850020B7039E
:03008600D00A8C11
:03008700038C0FD8
:03008800219FFFB6
:03008900E0715BC8
:03008A00348102BC
:03008B00348A8D27
:03008C0034821BA0
:03008D003480308C
:03008E00030E0F4F
:03008F0020603BB3
:03009000348C02AB
:030091003480397F
:03009200348C00AB
:030093003480397D
:03009400D05C80BD
:03009500031D0840
:03009600C000396E
:03009700032C0037
:03009800033039F9
:03009900C70C4051
:03009A0003903997
:03009B00C507D9BD
:03009C00039A9B29
:03009D00C1CC00D3
:03009E0003002636
:03009F00C0002777
:0300A00003102B1F
:0300A100204020DC
:0300A200032C0329
:0300A300C0002C6E
:0300A400033C20FA
:0300A500C70D8004
:0300A6000390259F
:0300A700C50C2065
:0300A8000390249E
:0300A900C40C0084
:0300AA000390229E
:0300AB0020C2056B
:0300AC007430307D
:0300AD00B1790125
:0300AE00C0020489
:0300AF00024030DC
:0300B000C0590133
:0300B10002220226
:0300B200205030AB
:0300B300D209016E
:0300B400D40C4029
:0300B50003D0393C
:0300B60021D6D977
:0300B700030ABB7E
:0300B8009016F9A6
:0300B900202B38C1
:0300BA00030AB680
:0300BB0090194059
:0300BC00204C20B5
:0300BD00030195A7
:0300BE0090164356
:0300BF00C01ACA9A
:0300C000150C011B
:0300C1000241DF1A
:0300C20021A09BDF
:0300C3009427037C
:0300C400202ACA25
:0300C50003A7D3BB
:0300C600206B3379
:0300C700743CFF87
:0300C800AD502216
:0300C900C9FB155B
:0300CA0016B21F4C
:0300CB00C0090A5F
:0300CC006B0C209A
:0300CD00D2012538
:0300CE006D06D3E9
:0300CF00D40AD57B
:0300D00012BC203F
:0300D100C80095CF
:0300D2001AB64318
:0300D30020BADD73
:0300D400038ADAC2
:0300D500206C405C
:0300D60002A1255F
:0300D700C04C001A
:0300D80008602499
:0300D900703B0574
:0300DA00ADE2177D
:0300DB00C000243E
:0300DC00024B05CF
:0300DD00AE2C4006
:0300DE00C0410519
:0300DF000AA03D37
:0300E000C02C0031
:0300E100024024B6
:0300E20091721DFB
:0300E300C010301A
:0300E40003E9012C
:0300E50020621581
:0300E60064303053
:0300E700AEB901AE
:0300E80037E204F8
:0300E9002C803038
:0300EA00AE8901DB
:0300EB00C602103A
:0300EC00150024D8
:0300ED007437F76E
:0300EE00AFFAF670
:0300EF0021EC02FF
:0300F0001AFFFFF5
:0300F10014F164A3
:0300F200743C0259
:0300F300B1715791
:0300F400C04124E4
:0300F500124B02A9
:0300F6009177D728
:0300F700C00B0239
:0300F800024C01B6
:0300F900200FFFD6
:0300FA00942164EA
:0300FB00202C01B5
:0300FC00020157A7
:0300FD0003512488
:0300FE00B17B02D1
:0300FF00CFF21726
:0301000019E024DF
:0301010016FB02E8
:03010200C03C02FC
:03010300081D01D3
:03010400743164EF
:03010500B0EC80DB
:03010600C016F32D
:030107000241258D
:03010800200205CD
:030109009420300F
:03010A00202901A8
:03010B00020215D8
:03010C000350306D
:03010D00B17901C4
:03010E00C0020428
:03010F0018103095
:030110006439014E
:030111006B07D3A6
:03011200B14B33BB
:03011300B17210B6
:03011400C01022F6
:03011500124C5039
:03011600917039AC
:030117003697997F
:03011800C01B17F2
:030119001E621251
:03011A0021B030E1
:03011B0008621463
:03011C007430310B
:03011D00A57213B5
:03011E000260324A
:03011F00C02C00F1
:03012000FFF033BA
:0301210016BC7099
:03012200C02039C1
:0301230023AC50BA
:03012400743039FB
:0301250012B215FE
:0301260020B030D6
:03012700038C0046
:03012800C440319F
:030129000392023C
:03012A00C40032DC
:03012B00039C0032
:03012C00C00033DD
:03012D00023C7021
:03012E00AB4039AA
:03012F00B2FC50CF
:0301300000003993
:03013100000C407F
:0301320000003991
:03013300000C00BD
:030134000000398F
:03013500000C00BB
:03013600000C00BA
:03013700000AB407
:03013800000C04B4
:030139000000259E
:03013A00000C00B6
:03013B0000003D84
:03013C00000917A0
:03013D00000C02B1
:03013E0000002599
:03013F00000C08A9
:0301400000003D7F
:030141000009179B
:03014200000C06A8
:0301430000002594
:03014400000C109C
:0301450000003D7A
:0301460000091796
:03014700000C00A9
:030148000000268E
:03014900000C01A6
:03014A0000002989
:03014B00000C2085
:03014C000000238D
:03014D00000A00A5
:03014E00000B4E55
:0300750008421925
:03007600603E0FDA
:03007700A7A0221D
:03007800209C00C9
:03007900A7C038E5
:03007A00C00200C1
:03007B00A7CE0706
:03007C00187F02E8
:03007D0014974392
:03007E00643A835E
:03007F00AABC0018
:030080001A7031C2
:03008100C50C1299
:03008200039A904E
:030083007992006F
:03008400A83E078C
:0300850020BF0396
:03008600D007435D
:03008700038A8C5D
:03008800219C00B8
:03008900E07031F3
:03008A00348C189B
:03008B00348A9024
:03008C00348C00B1
:03008D003480318B
:03008E00030C164A
:03008F00206A9054
:0300900034803B7E
:03009100348E0F9B
:0300920034808235
:03009300348703AC
:03009400D05A9AA5
:03009500031C0F3A
:03009600C00FFF99
:0300970003215BE7
:030098000331022F
:03009900C70A9BF8
:03009A0003921BB3
:03009B00C500306D
:03009C00039E0FB1
:03009D00C1C03BA4
:03009E00030C024E
:03009F00C0003965
:0300A000031C003E
:0300A100204039C3
:0300A200032C80AC
:0300A300C00D0885
:0300A400033039ED
:0300A500C70C0085
:0300A6000390398B
:0300A700C50C4045
:0300A80003903989
:0300A900C407D9B0
:0300AA00039AA90D
:0300AB0020CC0066
:0300AC0074302687
:0300AD00B1702708
:0300AE00C0002B64
:0300AF00024020EC
:0300B000C05C032E
:0300B10002202CFE
:0300B200205C20AF
:0300B300D20D80EB
:0300B400D4002550
:0300B50003DC2049
:0300B60021D02432
:0300B700030C0037
:0300B80090102283
:0300B900202205FD
:0300BA0003003010
:0300BB0090190198
:0300BC00204204DB
:0300BD000300300D
:0300BE0090190195
:0300BF00C012026A
:0300C000150030F8
:0300C100024901F0
:0300C20021AC402E
:0300C3009420394D
:0300C400202C01EC
:0300C50003A0375E
:0300C600206C604B
:0300C7007432C8C8
:0300C800AD5AC767
:0300C900C9FC006F
:0300CA0016B03736
:0300CB00C006D993
:0300CC006B0AD0EC
:0300CD00D206F95F
:0300CE006D0B4D6A
:0300CF00D40ACB85
:0300D00012B94022
:0300D100C80C2038
:0300D2001AB195CB
:0300D30020B64311
:0300D400038ADFBD
:0300D500206C019B
:0300D60002A1DFA5
:0300D700C0409B8B
:0300D800086703B3
:0300D900703ADF9B
:0300DA00ADE7D3BC
:0300DB00C00B480F
:0300DC00024CFFD4
:0300DD00AE202230
:0300DE00C04B2AEA
:0300DF000AA21F53
:0300E000C0290A2A
:0300E100024C20AE
:0300E200917125F4
:0300E300C016D371
:0300E40003EAEA42
:0300E500206C206C
:0300E600643095EE
:0300E700AEB6436F
:0300E80037EAF202
:0300E9002C8AEF6F
:0300EA00AE8C4099
:0300EB00C6012526
:0300EC00150C00F0
:0300ED0074302448
:0300EE00AFFB1A4B
:0300EF0021E217F4
:0300F0001AF024DF
:0300F10014FB1AE3
:0300F200743C401B
:0300F300B17105E3
:0300F400C0403DCC
:0300F500124C00AA
:0300F600917024E2
:0300F700C0021D27
:0300F80002403093
:0300F900200901DA
:0300FA0094221538
:0300FB0020203092
:0300FC00020901F5
:0300FD00035204A7
:0300FE00B17030AE
:0300FF00CFF90135
:0301000019E210F1
:0301010016F024D1
:03010200C037F70C
:03010300081B0BCB
:03010400743C0246
:03010500B0EFFF59
:03010600C01164C1
:03010700024C02A5
:030108002001577C
:030109009421241A
:03010A00202B1790
:03010B000207D711
:03010C00035B177B
:03010D00B17C01C1
:03010E00C00FFF20
:03010F0018116460
:03011000643C014B
:030111006B015728
:03011200B14124D4
:03011300B17B17A6
:03011400C01217FF
:0301150012402471
:03011600917B17C3
:03011700369C0211
:03011800C01D0106
:030119001E616400
:03011A0021BC8085
:03011B000866F380
:03011C0074312516
:03011D00A57205C3
:03011E000260304C
:03011F00C02901F3
:03012000FFF215D6
:0301210016B030E5
:03012200C02901F0
:0301230023A20410
:0301240074303004
:0301250012B9010B
:0301260020B7D32C
:03012700038B48FF
:03012800C44210BE
:030129000390221E
:03012A00C40C50B2
:03012B0003903905
:03012C00C0079970
:03012D00023B2C66
:03012E00AC2212EE
:03012F00B2F030FB
:03013000000214B6
:030131000000319A
:03013200000213B5
:0301330000003297
:03013400000C00BC
:0301350000003394
:03013600000C704A
:030137000000398C
:03013800000C5068
:030139000000398A
:03013A00000215AB
:03013B0000003091
:03013C00000C00B4
:03013D000000318E
:03013E00000202BA
:03013F000000328B
:03014000000C00B0
:0301410000003388
:03014200000C703E
:0301430000003980
:03014400000C505C
:030145000000397E
:03014600000C406A
:030147000000397C
:03014800000C00A8
:030149000000397A
:03014A00000C00A6
:03014B00000C00A5
:03014C00000AC2E4
:03014D00000C00A3
:03014E0000002589
:03014F00000C1091
:0301500000003D6F
:030151000009178B
:03015200000C049A
:0301530000002584
:03015400000C009C
:0301550000003D6A
:0301560000091786
:03015700000C0297
:030158000000257F
:03015900000C088F
:03015A0000003D65
:03015B0000091781
:03015C00000C0094
:03015D0000002679
:03015E00000C0191
:03015F0000002974
:03016000000C2070
:0301610000002378
:03016200000A0090
:03016300000B632B
:00000001FF

View File

@@ -58,7 +58,7 @@ static int proc_xbus_command_write(struct file *file, const char __user *buffer,
/* Command line parameters */
extern int debug;
static DEF_PARM(uint, command_queue_length, 800, 0444, "Maximal command queue length");
static DEF_PARM(uint, command_queue_length, 1000, 0444, "Maximal command queue length");
static DEF_PARM(uint, poll_timeout, 1000, 0644, "Timeout (in jiffies) waiting for units to reply");
static DEF_PARM_BOOL(rx_tasklet, 0, 0644, "Use receive tasklets");

View File

@@ -208,8 +208,8 @@ struct xbus {
int cpu_rcv_tasklet[NR_CPUS];
struct quirks {
int has_fxo:1;
int has_digital_span:1;
unsigned int has_fxo:1;
unsigned int has_digital_span:1;
} quirks;
bool self_ticking;
enum sync_mode sync_mode;

View File

@@ -48,6 +48,7 @@ static void __xframe_dump_queue(struct xframe_queue *q)
static bool __xframe_enqueue(struct xframe_queue *q, xframe_t *xframe)
{
int ret = 1;
static int overflow_cnt = 0;
if(unlikely(q->disabled)) {
ret = 0;
@@ -55,7 +56,8 @@ static bool __xframe_enqueue(struct xframe_queue *q, xframe_t *xframe)
}
if(q->count >= q->max_count) {
q->overflows++;
NOTICE("Overflow of %-15s: counts %3d, %3d, %3d worst %3d, overflows %3d worst_lag %02ld.%ld ms\n",
if ((overflow_cnt++ % 1000) < 5) {
NOTICE("Overflow of %-15s: counts %3d, %3d, %3d worst %3d, overflows %3d worst_lag %02ld.%ld ms\n",
q->name,
q->steady_state_count,
q->count,
@@ -64,7 +66,8 @@ static bool __xframe_enqueue(struct xframe_queue *q, xframe_t *xframe)
q->overflows,
q->worst_lag_usec / 1000,
q->worst_lag_usec % 1000);
__xframe_dump_queue(q);
__xframe_dump_queue(q);
}
ret = 0;
goto out;
}

View File

@@ -69,6 +69,10 @@
#define DAHDI_IRQ_HANDLER(a) static irqreturn_t a(int irq, void *dev_id, struct pt_regs *regs)
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
#define HAVE_NET_DEVICE_OPS
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
#define DAHDI_IRQ_SHARED IRQF_SHARED
#define DAHDI_IRQ_DISABLED IRQF_DISABLED
@@ -1360,6 +1364,19 @@ static inline void list_replace(struct list_head *old, struct list_head *new)
new->prev = old->prev;
new->prev->next = new;
}
#ifndef WARN_ON_ONCE
#define WARN_ON_ONCE(__condition) do { \
static int __once = 1; \
if (unlikely(__condition)) { \
if (__once) { \
__once = 0; \
WARN_ON(0); \
} \
} \
} while (0)
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 14)
#define kzalloc(a, b) kcalloc(1, a, b)
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)