Compare commits

...

35 Commits

Author SHA1 Message Date
Shaun Ruffell
1844a16eeb Importing files for 2.6.1-rc2 release.
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/tags/2.6.1-rc2@10606 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-28 19:36:24 +00:00
Shaun Ruffell
fb3d623a05 Creating tag for the release of dahdi-linux-2.6.1-rc2
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/tags/2.6.1-rc2@10602 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-28 16:39:11 +00:00
Shaun Ruffell
848d5ae115 wct4xxp: Trivial formatting changes around request_irq.
Quiet some checkpatch warnings introduced by the last patch. I kept this
separate since it may have obscured the real change made in the previous
commit if combined.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10594 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-22 18:36:14 +00:00
Shaun Ruffell
fa86c13c3b wct4xxp: Disable all interrupts explicitly in interrupt handler.
The driver makes the assumption that interrupts are disabled but this cannot
be guaranteed. We'll explicity disable interrupts on the local processor while
the interrupt handler is running.

This eliminates the "IRQF_DISABLED is not guaranteed on shared IRQs" warning
when loading the driver.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10593 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-22 18:36:10 +00:00
Shaun Ruffell
bad3860f24 dahdi_dynamic_eth: Fix compilation on kernels < 2.6.22.
Resolves the follwing build error:
  drivers/dahdi/dahdi_dynamic_eth.c: In function ‘ztdeth_exit’:
  drivers/dahdi/dahdi_dynamic_eth.c:448: error: implicit declaration of function ‘cancel_work_sync’

RHEL kernel versions 2.6.18-238 (5.6) and greater had cancel_work_sync()
backported which is what I did my original smoke test on.

Reported-by: Oron Peled <oron.peled@xorcom.com>
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10592 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-22 18:36:06 +00:00
Shaun Ruffell
5fcf13fdef dahdi_dynamic_eth: Prevent crash is packet arrives before span is fully configured.
It was possible after a dynamic ethernet span was created for a packet to come
in before the dahdi_span was fully initialized. The result would be a NULL
pointer dereference. Now just discard any packets that might come in during
this time window.

Internal-Issue-ID: DAHLIN-280
Reported-by: Pavel Selivanov
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10591 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-22 18:36:01 +00:00
Oron Peled
7c99a670b5 xpp: FXS: added a 'lower_ringing_noise' parameter
* Adds a new parameter, 'lower_ringing_noise', to module xpd_fxs.

* Makes the "power-down" behaviour that was added
  in upstream svn r10478, switchable in runtime.

* By default (false), makes the vbat_h behave like it did
  before the power-down change.
  - I.e: vbat_h is held throughout the ringing period (during
    both ring-up/ring-down)
  - So this patch revert part of r10478

* When switched to true, activate the "power-down" behaviour.
  - I.e: vbat_h follows the ring-up/ring-down.
  - This behaviour lowers the noise caused by group ringing of
    FXS channels in the same unit, but causes problems with CallerID.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10576 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-21 20:35:33 +00:00
Oron Peled
91a94133f1 xpp: FXS: atomic vbat_h power handling
* In do_chan_power() make vbat_h changes atomic.
* As a result we can ignore duplicate requests.
  This will allow cleaner logic in the next commit.
* Added proper debug messages.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10575 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-21 20:34:05 +00:00
Oron Peled
4f487f8d7d remove a duplicate dev_set_name()
Remove duplicate definition from dahdi-sysfs.c

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10572 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-21 19:36:32 +00:00
Shaun Ruffell
77437503a8 dahdi_dynamic: Since dynamic devices are 'parentless' we must name them.
This in conjunction with r10449 "A parent-less device should not crash dahdi",
this allows dahdi_dynamic spans to work post the dahdi_devices changes in
2.6.0.

The full address of the device is not used since kernels prior to 2.6.31 limit
the length of a devicename to 20 characters.  The full address of the device
can be pulled out of the "hardware_id" and "type" fields of the span.

This patch is just to get things working again. dahdi_dynamic devices *may*
still have issues if the auto_assign_spans module parameter is 0.

Internal-Issue-ID: DAHLIN-280
Reported-by: Pavel Selivanov
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10571 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-21 19:12:10 +00:00
Shaun Ruffell
8297239209 dahdi_dynamic_eth: Move tx packet flushing to process context.
The masterspan can be, and often is, called with interrupts disabled but
dev_queue_xmit() needs to be called with interrupts enabled. This potentially
fixes a deadlock.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10570 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-21 19:12:08 +00:00
Shaun Ruffell
28d13b909c dahdi: Update dev_set_name / dev_name for RHEL 5.6+.
This is needed because dev_name() is mapped to kobject_name() in a backport,
but the kobject name isn't set until after device_add().  The result would be
parentless devices would fail since dahdi would not think a name was set for
these devices.

For these systems, we'll set both the bus_id string and the underlying
kobject_name.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10569 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-21 19:12:06 +00:00
Oron Peled
52b56c9848 A parent-less device should not crash dahdi
* A parent-less device should not crash dahdi:
  - Access span->parent->dev instead of span->parent-dev.parent
    in soem cases.
  - Access span->parent->dev via new inline span_device()
  - Use span_device() in all dahdi_dev_{dbg,info}()

* Allow low-level drivers to set their device name.
  - Drivers that don't use this feature get the default name
    based on the parent device name
  - Parent-less devices which don't set their name, fails
    to register with -EINVAL

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10568 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-21 19:12:02 +00:00
Shaun Ruffell
eff796fd8f wcte12xp, wctdm24xxp: Add compile-time option to disable ASPM for PCIe devices.
Certain BIOSes appear to enable ASPM even though it is not fully supported by
the platform. Also, since the PCIe links for TDM cards are always in use it
does not make sense to allow them to transition to the disabled state.

Just turn off power management on the PCIe links completely. For more
information see http://lwn.net/Articles/449448/.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10567 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-21 19:11:57 +00:00
Shaun Ruffell
00ef2bfa13 wct4xxp: Add compile-time option to disable ASPM for PCIe devices.
Certain BIOSes appear to enable ASPM even though it is not fully supported by
the platform. Also, since the PCIe links for TDM cards are always in use it
does not make sense to allow them to transition to the disabled state.

Just turn off power management on the PCIe links completely. For more
information see http://lwn.net/Articles/449448/.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10566 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-21 19:11:53 +00:00
Shaun Ruffell
a2bfd1d4c2 wct4xxp: __t4_frame_in and __t4_framer_out slowdowns.
This is a partial revert of r10234 "wct4xxp: __t4_framer_in and
__t4_framer_out speedups."

There were some platform + firmware version combinations that would fail to
properly configure the framer with the aforementioned speedups. The originally
reported sympton was that interrupts would fail to start and while
troubleshooting I also saw cases where one of the spans would stay in alarm
after starting. By adding in additional reads to the version register, the
overall process of writing / reading from the framer control registers is
slowed down which increases reliability.

This change does *not* affect the main path of TDM data which is DMAed
directly into buffers in host memory and are not read / written to / from
framer registers directly.

Reported-and-Tested-by: Vahan Yerkanian <vahan@arminco.com>
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10565 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-21 19:11:49 +00:00
Shaun Ruffell
6009f56f8b dahdi: Add dahdi_pci_disable_link_state for kernel < 2.6.25.
Will allow the ASPM (Active State Power Management) state to be disabled on
PCIe devices before kernel version 2.6.25.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10564 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-21 19:11:44 +00:00
Tzafrir Cohen
7a497cee43 xpp: firmwares: useless 0x1A at EOF
Remove a mostly harmless 0x1A (^Z) at the end of the file. If you
add a NL after it, it breaks the firmware loading.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10553 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-20 11:20:36 +00:00
Tzafrir Cohen
853b69a106 xpp: firmwares to support E-Main 4
USB firmware (USB_FW.201.hex 10402) and FPGA firmware
(FPGA_1161.201.hex 10480) with support of the new E-Main 4 Astribank
mainboard.

(This was accidentally labeled as 'E-Main 3' in some previous commit
messages)

Also includes Makefile fixes from r10536.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10538 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-18 19:00:04 +00:00
Tzafrir Cohen
adfcd9d864 xpp: USB_FW rev 10401: minor 6FXS/2FXO caps issue
Fixes an issues with the 6FXS/2FXO module: if an extra FXS or FXO module
is added to a system with such a module, an excessive number of port
licenses was accidentally required (as if the 6FXS/2FXO module required
8FXS/8FXO licenses).

Internal-Issue-ID: #1371
Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10537 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-18 18:57:51 +00:00
Shaun Ruffell
2b2054f28b dahdi_dummy: Fix compilation since dahdi-linux 2.6.0.
Even though dahdi_dummy is no longer built by default, the adoption of
dahdi_devices in 2.6 broke the ability to compile. This was not intended as
there are some packagers who still patch the Kbuild file to enable
dahdi_dummy.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10526 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-16 16:11:29 +00:00
Shaun Ruffell
6e1058eae0 xpp: '%d' -> '%lu' when displaying module_refcount on kernel versions >= 3.3
Upstream commit bd77c047 "module: struct module_ref should contains long
fields" changed the return of module_refcount from int to unsigned long. This
change eliminates a warning from the string format specifier.

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

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

Conflicts:

	drivers/dahdi/xpp/xproto.c

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10525 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-16 16:11:25 +00:00
Shaun Ruffell
8067ae3269 xpp: Use 'bool' type for boolean module parameters on kernel versions >= 2.6.31.
Eliminates warnings that are a result of upstream commit 72db395ffa
"module_param: check that bool parameters really are bool."

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

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

Conflicts:

	drivers/dahdi/xpp/xpd.h

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10524 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-16 16:11:20 +00:00
Oron Peled
54b9983407 xpp: FXS: better power-down to lower noise
* Now every linefeed control command which is not RING'ing
  powers-down the SLIC. This reduce audible noise when
  several channels are ringing.

* Simplify code by removing redundant calls to do_chan_power()
  before linefeed_control()

* Manage vbat_h state so we skip do_chan_power() calls when
  there isn't a state change

* Export vbat_h state to /proc/.../fxs_info

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10490 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-15 17:36:48 +00:00
Oron Peled
b4989839bc xpp: reset Astribank SPI busses
* A driver reload should reset Astribank hardware
* This patch send an SPI reset after we get AB_DESCRIPTION reply from Astribank

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10489 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-15 17:35:57 +00:00
Shaun Ruffell
3876f253a6 wctdm24xxp: Shorten RINGOFF debounce interval from 512ms to 128ms.
In commit r10168 "wctdm24xxp: Use time interval for debouncing FXO ring
detect" [1], I inadvertently changed the debounce interval of the RINGOFF
event from 128ms to 512ms. The result was a potential failure to detect CID,
depending on line conditions, since Asterisk would bump the rx gains on the
channel in the middle of the CID spill as opposed to before the CID spill.

This fixes a regression first introduced in DAHDI-Linux 2.6.0.

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

Internal-Issue-ID: DAHDI-951
Reported-and-Tested-by: Jack Wilson <ljwilson@digitalav.com>
Signed-off-by: Shaun Ruffell <sruffell@digium.com>

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10481 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-03-15 15:03:27 +00:00
Tzafrir Cohen
005aa723ef USB_RECOV.hex: recovering from xpp hardware issues
USB_RECOV.hex, rev. 9760. It may be used to recover from certain
issues of the USB controller of the Astribank (when an Astribank
is not detected as such) by Support staff.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10457 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-02-07 22:19:39 +00:00
Tzafrir Cohen
808b2dd408 Astribank I firmwares rev. 7107
A slightly newer firmware (Xorcom rev. 7107) for older (non Astribank
II) Astribank modules. Was accidentally left uncommited. Includes minor
bug fixes.

No change for any relatively recent (Astribank II) Astribank.

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10445 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-01-25 20:51:21 +00:00
Tzafrir Cohen
081977bc94 Build OSLEC EC if in the tree
Build the OSLEC echo canceller (drivers/staging/echo and
dahdi_echocan_oslec) if the code of oslec is present in the tree.

Also closing another issue regarding documentation of building OSLEC,
as it is now even clearer than before.

Patch has been used in the Debian package for quite some time.

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

(closes issue DAHLIN-110)
Reported by: biohumanoid (Pavel Selivanov)
Patches:
     oslec_auto.diff uploaded by tzafrir (license 5035)

(closes issue DAHLIN-261)

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10442 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-01-17 14:50:01 +00:00
Oron Peled
f06c8d50cf xpp: handle failures during dahdi_register_device()
* If dahdi_register_device() failed, not all resources were freed.
  When dahdi_unregister_device() was called later (during driver
  removal) a panic was caused.

* Add proper error handling for possible failures in
  xbus_register_dahdi_device():
  - new xbus_free_ddev() safely free an xbus->ddev
  - This is called from all failures points.
  - It is also called from xbus_unregister_dahdi_device()

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10419 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-01-10 22:09:34 +00:00
Oron Peled
17a2ce9421 xpp: Don't deactivate XPDs on unregistration
* A bug was introduced during migration to dahdi_device code:
    http://svnview.digium.com/svn/dahdi?view=rev&rev=10273
* Marking XPDs as non-functional (card_present=0, XPD_STATE_NOHW)
  was moved from xbus_request_removal() into xpd_dahdi_preunregister()
* As a result, unregistering an Astribank, made it non-functional
  so trying to re-register it later caused errors (e.g: "Cannot open"
  error message from xpp_open())
* This fix move XPD deactivation into the proper location (during
  xbus_deactivate()

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10418 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-01-10 22:09:29 +00:00
Oron Peled
5ed0271397 xpp: bugfix: fix bad refcount
Code path called in error condition contained an superflous put_xpd() call

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10417 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-01-10 22:09:25 +00:00
Shaun Ruffell
48b3cb8777 wct4xxp: VPM module creates noise on alternate channels on E1 spans.
The VPMOCT128 module was using the VPMOCT256 timeslots assigments which would
mean that channels that should be marked alaw were being set in ulaw. This
only affected E1 spans since by default all spans are configured for ulaw by
default.

This fixes a regression introduced in r10290 [1] "wct4xxp: Add support for
TE820 and VPMOCT256", first released in 2.6.0, that only affects E1 spans on a
quad and dual-span card when used with the hardware echocanceler.

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

Internal-Issue-ID: DAHDI-945, DAHLIN-275
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=10414

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10416 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-01-10 22:05:47 +00:00
Shaun Ruffell
d726b04767 wctdm24xxp: FXS on-hook transmission timer incorrect.
The DAHDI_ONHOOKTRANSFER ioctl was incorrectly setting the ohttimer to 0. The
result was that an FXS port was leaving the on-hook transfer state before
finishing the transmission.

This was discovered while looking at why ./fxstest dtmfcid  was not able to
pass the DTMF callerid digits to an attached FXO port properly.

Fixes a regression introduced in r10167 "wctdm24xxp: Use interval for checking
FXS on hook transfer timer." [1], first released in 2.6.0.

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

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

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

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10415 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-01-10 22:05:43 +00:00
Shaun Ruffell
e5ed586e31 Creating branch for 2.6.
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.6@10406 a0bf4364-ded3-4de4-8d8a-66a801d63aff
2012-01-04 22:19:55 +00:00
30 changed files with 24579 additions and 2537 deletions

1
.version Normal file
View File

@@ -0,0 +1 @@
2.6.1-rc2

374
ChangeLog Normal file
View File

@@ -0,0 +1,374 @@
2012-03-28 Shaun Ruffell <sruffell@digium.com>
* Released 2.6.0-rc1
2012-03-22 18:36 +0000 [r10591-10594] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/wct4xxp/base.c: wct4xxp: Trivial formatting changes
around request_irq. Quiet some checkpatch warnings introduced by
the last patch. I kept this separate since it may have obscured
the real change made in the previous commit if combined.
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10590
* drivers/dahdi/wct4xxp/base.c: wct4xxp: Disable all interrupts
explicitly in interrupt handler. The driver makes the assumption
that interrupts are disabled but this cannot be guaranteed. We'll
explicity disable interrupts on the local processor while the
interrupt handler is running. This eliminates the "IRQF_DISABLED
is not guaranteed on shared IRQs" warning when loading the
driver. Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10589
* drivers/dahdi/dahdi_dynamic_eth.c: dahdi_dynamic_eth: Fix
compilation on kernels < 2.6.22. Resolves the follwing build
error: drivers/dahdi/dahdi_dynamic_eth.c: In function
ztdeth_exit: drivers/dahdi/dahdi_dynamic_eth.c:448: error:
implicit declaration of function cancel_work_sync RHEL kernel
versions 2.6.18-238 (5.6) and greater had cancel_work_sync()
backported which is what I did my original smoke test on.
Reported-by: Oron Peled <oron.peled@xorcom.com> Signed-off-by:
Shaun Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10588
* drivers/dahdi/dahdi_dynamic_eth.c: dahdi_dynamic_eth: Prevent
crash is packet arrives before span is fully configured. It was
possible after a dynamic ethernet span was created for a packet
to come in before the dahdi_span was fully initialized. The
result would be a NULL pointer dereference. Now just discard any
packets that might come in during this time window.
Internal-Issue-ID: DAHLIN-280 Reported-by: Pavel Selivanov
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10587
2012-03-21 20:35 +0000 [r10575-10576] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/card_fxs.c: xpp: FXS: added a
'lower_ringing_noise' parameter * Adds a new parameter,
'lower_ringing_noise', to module xpd_fxs. * Makes the
"power-down" behaviour that was added in upstream svn r10478,
switchable in runtime. * By default (false), makes the vbat_h
behave like it did before the power-down change. - I.e: vbat_h is
held throughout the ringing period (during both
ring-up/ring-down) - So this patch revert part of r10478 * When
switched to true, activate the "power-down" behaviour. - I.e:
vbat_h follows the ring-up/ring-down. - This behaviour lowers the
noise caused by group ringing of FXS channels in the same unit,
but causes problems with CallerID. Signed-off-by: Oron Peled
<oron.peled@xorcom.com> Acked-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10574
* drivers/dahdi/xpp/card_fxs.c: xpp: FXS: atomic vbat_h power
handling * In do_chan_power() make vbat_h changes atomic. * As a
result we can ignore duplicate requests. This will allow cleaner
logic in the next commit. * Added proper debug messages.
Signed-off-by: Oron Peled <oron.peled@xorcom.com> Acked-by:
Tzafrir Cohen <tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10573
2012-03-21 19:36 +0000 [r10564-10572] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/dahdi-sysfs.c: remove a duplicate dev_set_name()
Remove duplicate definition from dahdi-sysfs.c Signed-off-by:
Oron Peled <oron.peled@xorcom.com> Acked-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10447
* include/dahdi/kernel.h, drivers/dahdi/dahdi_dynamic.c:
dahdi_dynamic: Since dynamic devices are 'parentless' we must
name them. This in conjunction with r10449 "A parent-less device
should not crash dahdi", this allows dahdi_dynamic spans to work
post the dahdi_devices changes in 2.6.0. The full address of the
device is not used since kernels prior to 2.6.31 limit the length
of a devicename to 20 characters. The full address of the device
can be pulled out of the "hardware_id" and "type" fields of the
span. This patch is just to get things working again.
dahdi_dynamic devices *may* still have issues if the
auto_assign_spans module parameter is 0. Internal-Issue-ID:
DAHLIN-280 Reported-by: Pavel Selivanov Signed-off-by: Shaun
Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10563
* drivers/dahdi/dahdi_dynamic_eth.c: dahdi_dynamic_eth: Move tx
packet flushing to process context. The masterspan can be, and
often is, called with interrupts disabled but dev_queue_xmit()
needs to be called with interrupts enabled. This potentially
fixes a deadlock. Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10562
* include/dahdi/kernel.h: dahdi: Update dev_set_name / dev_name for
RHEL 5.6+. This is needed because dev_name() is mapped to
kobject_name() in a backport, but the kobject name isn't set
until after device_add(). The result would be parentless devices
would fail since dahdi would not think a name was set for these
devices. For these systems, we'll set both the bus_id string and
the underlying kobject_name. Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Acked-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10561
* drivers/dahdi/dahdi-base.c, drivers/dahdi/dahdi-sysfs.c: A
parent-less device should not crash dahdi * A parent-less device
should not crash dahdi: - Access span->parent->dev instead of
span->parent-dev.parent in soem cases. - Access span->parent->dev
via new inline span_device() - Use span_device() in all
dahdi_dev_{dbg,info}() * Allow low-level drivers to set their
device name. - Drivers that don't use this feature get the
default name based on the parent device name - Parent-less
devices which don't set their name, fails to register with
-EINVAL Signed-off-by: Oron Peled <oron.peled@xorcom.com>
Acked-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10449
* drivers/dahdi/voicebus/voicebus.h, drivers/dahdi/wcte12xp/base.c,
drivers/dahdi/wctdm24xxp/base.c: wcte12xp, wctdm24xxp: Add
compile-time option to disable ASPM for PCIe devices. Certain
BIOSes appear to enable ASPM even though it is not fully
supported by the platform. Also, since the PCIe links for TDM
cards are always in use it does not make sense to allow them to
transition to the disabled state. Just turn off power management
on the PCIe links completely. For more information see
http://lwn.net/Articles/449448/. Internal-Issue-ID: DAHLIN-283
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10557
* drivers/dahdi/wct4xxp/base.c: wct4xxp: Add compile-time option to
disable ASPM for PCIe devices. Certain BIOSes appear to enable
ASPM even though it is not fully supported by the platform. Also,
since the PCIe links for TDM cards are always in use it does not
make sense to allow them to transition to the disabled state.
Just turn off power management on the PCIe links completely. For
more information see http://lwn.net/Articles/449448/.
Internal-Issue-ID: DAHLIN-283 Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10558
* drivers/dahdi/wct4xxp/base.c: wct4xxp: __t4_frame_in and
__t4_framer_out slowdowns. This is a partial revert of r10234
"wct4xxp: __t4_framer_in and __t4_framer_out speedups." There
were some platform + firmware version combinations that would
fail to properly configure the framer with the aforementioned
speedups. The originally reported sympton was that interrupts
would fail to start and while troubleshooting I also saw cases
where one of the spans would stay in alarm after starting. By
adding in additional reads to the version register, the overall
process of writing / reading from the framer control registers is
slowed down which increases reliability. This change does *not*
affect the main path of TDM data which is DMAed directly into
buffers in host memory and are not read / written to / from
framer registers directly. Reported-and-Tested-by: Vahan
Yerkanian <vahan@arminco.com> Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10559
* drivers/dahdi/dahdi-base.c, include/dahdi/kernel.h: dahdi: Add
dahdi_pci_disable_link_state for kernel < 2.6.25. Will allow the
ASPM (Active State Power Management) state to be disabled on PCIe
devices before kernel version 2.6.25. Signed-off-by: Shaun
Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10556
2012-03-20 11:20 +0000 [r10553] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/firmwares/USB_RECOV.hex,
drivers/dahdi/xpp/firmwares/USB_FW.hex,
drivers/dahdi/xpp/firmwares/FPGA_1161.201.hex: xpp: firmwares:
useless 0x1A at EOF Remove a mostly harmless 0x1A (^Z) at the end
of the file. If you add a NL after it, it breaks the firmware
loading. Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10550
2012-03-18 19:00 +0000 [r10537-10538] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/firmwares/Makefile,
drivers/dahdi/xpp/firmwares/FPGA_1161.201.hex (added),
drivers/dahdi/xpp/firmwares/USB_FW.201.hex (added): xpp:
firmwares to support E-Main 4 USB firmware (USB_FW.201.hex 10402)
and FPGA firmware (FPGA_1161.201.hex 10480) with support of the
new E-Main 4 Astribank mainboard. (This was accidentally labeled
as 'E-Main 3' in some previous commit messages) Also includes
Makefile fixes from r10536. Signed-off-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10535
* drivers/dahdi/xpp/firmwares/USB_FW.hex: xpp: USB_FW rev 10401:
minor 6FXS/2FXO caps issue Fixes an issues with the 6FXS/2FXO
module: if an extra FXS or FXO module is added to a system with
such a module, an excessive number of port licenses was
accidentally required (as if the 6FXS/2FXO module required
8FXS/8FXO licenses). Internal-Issue-ID: #1371 Signed-off-by:
Tzafrir Cohen <tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10534
2012-03-16 16:11 +0000 [r10524-10526] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/dahdi_dummy.c: dahdi_dummy: Fix compilation since
dahdi-linux 2.6.0. Even though dahdi_dummy is no longer built by
default, the adoption of dahdi_devices in 2.6 broke the ability
to compile. This was not intended as there are some packagers who
still patch the Kbuild file to enable dahdi_dummy.
Internal-Issue-ID: DAHLIN-274 Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10486
* drivers/dahdi/xpp/xproto.c: xpp: '%d' -> '%lu' when displaying
module_refcount on kernel versions >= 3.3 Upstream commit
bd77c047 "module: struct module_ref should contains long fields"
changed the return of module_refcount from int to unsigned long.
This change eliminates a warning from the string format
specifier. Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Acked-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10485 Conflicts:
drivers/dahdi/xpp/xproto.c
* drivers/dahdi/xpp/xpd.h: xpp: Use 'bool' type for boolean module
parameters on kernel versions >= 2.6.31. Eliminates warnings that
are a result of upstream commit 72db395ffa "module_param: check
that bool parameters really are bool." Signed-off-by: Shaun
Ruffell <sruffell@digium.com> Acked-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10484 Conflicts:
drivers/dahdi/xpp/xpd.h
2012-03-15 17:36 +0000 [r10489-10490] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/card_fxs.c: xpp: FXS: better power-down to
lower noise * Now every linefeed control command which is not
RING'ing powers-down the SLIC. This reduce audible noise when
several channels are ringing. * Simplify code by removing
redundant calls to do_chan_power() before linefeed_control() *
Manage vbat_h state so we skip do_chan_power() calls when there
isn't a state change * Export vbat_h state to /proc/.../fxs_info
Signed-off-by: Oron Peled <oron.peled@xorcom.com> Acked-by:
Tzafrir Cohen <tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10478
* drivers/dahdi/xpp/card_global.c, drivers/dahdi/xpp/card_global.h:
xpp: reset Astribank SPI busses * A driver reload should reset
Astribank hardware * This patch send an SPI reset after we get
AB_DESCRIPTION reply from Astribank Signed-off-by: Oron Peled
<oron.peled@xorcom.com> Acked-by: Tzafrir Cohen
<tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10474
2012-03-15 15:03 +0000 [r10481] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/wctdm24xxp/base.c: wctdm24xxp: Shorten RINGOFF
debounce interval from 512ms to 128ms. In commit r10168
"wctdm24xxp: Use time interval for debouncing FXO ring detect"
[1], I inadvertently changed the debounce interval of the RINGOFF
event from 128ms to 512ms. The result was a potential failure to
detect CID, depending on line conditions, since Asterisk would
bump the rx gains on the channel in the middle of the CID spill
as opposed to before the CID spill. This fixes a regression first
introduced in DAHDI-Linux 2.6.0. [1]
http://svnview.digium.com/svn/dahdi?view=revision&revision=10168
Internal-Issue-ID: DAHDI-951 Reported-and-Tested-by: Jack Wilson
<ljwilson@digitalav.com> Signed-off-by: Shaun Ruffell
<sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10473
2012-02-07 22:19 +0000 [r10457] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/firmwares/USB_RECOV.hex (added),
drivers/dahdi/xpp/firmwares/Makefile: USB_RECOV.hex: recovering
from xpp hardware issues USB_RECOV.hex, rev. 9760. It may be used
to recover from certain issues of the USB controller of the
Astribank (when an Astribank is not detected as such) by Support
staff. Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10455
2012-01-25 20:51 +0000 [r10445] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* drivers/dahdi/xpp/firmwares/FPGA_FXS.hex,
drivers/dahdi/xpp/firmwares/FPGA_1141.hex,
drivers/dahdi/xpp/firmwares/FPGA_1151.hex: Astribank I firmwares
rev. 7107 A slightly newer firmware (Xorcom rev. 7107) for older
(non Astribank II) Astribank modules. Was accidentally left
uncommited. Includes minor bug fixes. No change for any
relatively recent (Astribank II) Astribank. Signed-off-by:
Tzafrir Cohen <tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10443
2012-01-17 14:50 +0000 [r10442] Tzafrir Cohen <tzafrir.cohen@xorcom.com>
* README, drivers/dahdi/Kbuild: Build OSLEC EC if in the tree Build
the OSLEC echo canceller (drivers/staging/echo and
dahdi_echocan_oslec) if the code of oslec is present in the tree.
Also closing another issue regarding documentation of building
OSLEC, as it is now even clearer than before. Patch has been used
in the Debian package for quite some time. Signed-off-by: Tzafrir
Cohen <tzafrir.cohen@xorcom.com> (closes issue DAHLIN-110)
Reported by: biohumanoid (Pavel Selivanov) Patches:
oslec_auto.diff uploaded by tzafrir (license 5035) (closes issue
DAHLIN-261) Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10440
2012-01-10 22:09 +0000 [r10415-10419] Shaun Ruffell <sruffell@digium.com>
* drivers/dahdi/xpp/xbus-core.c: xpp: handle failures during
dahdi_register_device() * If dahdi_register_device() failed, not
all resources were freed. When dahdi_unregister_device() was
called later (during driver removal) a panic was caused. * Add
proper error handling for possible failures in
xbus_register_dahdi_device(): - new xbus_free_ddev() safely free
an xbus->ddev - This is called from all failures points. - It is
also called from xbus_unregister_dahdi_device() Signed-off-by:
Oron Peled <oron.peled@xorcom.com> Acked-By: Tzafrir Cohen
<tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10410
* drivers/dahdi/xpp/xpp_dahdi.c, drivers/dahdi/xpp/xbus-core.c:
xpp: Don't deactivate XPDs on unregistration * A bug was
introduced during migration to dahdi_device code:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10273 * Marking
XPDs as non-functional (card_present=0, XPD_STATE_NOHW) was moved
from xbus_request_removal() into xpd_dahdi_preunregister() * As a
result, unregistering an Astribank, made it non-functional so
trying to re-register it later caused errors (e.g: "Cannot open"
error message from xpp_open()) * This fix move XPD deactivation
into the proper location (during xbus_deactivate() Signed-off-by:
Oron Peled <oron.peled@xorcom.com> Acked-By: Tzafrir Cohen
<tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10409
* drivers/dahdi/xpp/xpp_dahdi.c: xpp: bugfix: fix bad refcount Code
path called in error condition contained an superflous put_xpd()
call Signed-off-by: Oron Peled <oron.peled@xorcom.com> Acked-By:
Tzafrir Cohen <tzafrir.cohen@xorcom.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10408
* drivers/dahdi/wct4xxp/vpm450m.c: wct4xxp: VPM module creates
noise on alternate channels on E1 spans. The VPMOCT128 module was
using the VPMOCT256 timeslots assigments which would mean that
channels that should be marked alaw were being set in ulaw. This
only affected E1 spans since by default all spans are configured
for ulaw by default. This fixes a regression introduced in r10290
[1] "wct4xxp: Add support for TE820 and VPMOCT256", first
released in 2.6.0, that only affects E1 spans on a quad and
dual-span card when used with the hardware echocanceler. [1]
http://svnview.digium.com/svn/dahdi?view=revision&revision=10290
Internal-Issue-ID: DAHDI-945, DAHLIN-275 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=10414
* drivers/dahdi/wctdm24xxp/base.c: wctdm24xxp: FXS on-hook
transmission timer incorrect. The DAHDI_ONHOOKTRANSFER ioctl was
incorrectly setting the ohttimer to 0. The result was that an FXS
port was leaving the on-hook transfer state before finishing the
transmission. This was discovered while looking at why ./fxstest
dtmfcid was not able to pass the DTMF callerid digits to an
attached FXO port properly. Fixes a regression introduced in
r10167 "wctdm24xxp: Use interval for checking FXS on hook
transfer timer." [1], first released in 2.6.0. [1]
http://svnview.digium.com/svn/dahdi?view=revision&revision=10167
Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin:
http://svnview.digium.com/svn/dahdi?view=rev&rev=10413
2012-01-04 22:19 +0000 [r10406] Shaun Ruffell <sruffell@digium.com>
* / (added): Creating branch for 2.6.

11
README
View File

@@ -212,13 +212,10 @@ under driver/staging/echo . In fact, dahdi_echocan_oslec assumes that
this is where the oslec code lies. If it is elsewhere you'll need to fix
the #include line.
Thus for the moment, the simplest way to build OSLEC with dahdi is:
1. Copy the directory `drivers/staging/echo` from a recent kernel tree
(at least 2.6.28-rc1) to the a subdirectory with the same name in the
dahdi-linux tree.
2. Edit drivers/dahdi/Kbuild and uncomment the two lines related to OSLEC.
Thus for the moment, the simplest way to build OSLEC with dahdi is to
copy the directory `drivers/staging/echo` from a recent kernel tree (at
least 2.6.28-rc1) to the a subdirectory with the same name in the
dahdi-linux tree.
After doing that, you'll see the following when building (running
'make')

View File

@@ -33,14 +33,13 @@ obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_ECHOCAN_MG2) += dahdi_echocan_mg2.o
obj-m += $(DAHDI_MODULES_EXTRA)
# Only enable this if you think you know what you're doing. This is not
# supported yet:
#obj-m += dahdi_echocan_oslec.o
#
# A quick and dirty way to build OSLEC, if you happened to place it
# yourself in the dahdi source tree. This is experimental. See README
# regarding OSLEC.
#obj-m += ../staging/echo/
# If you want to build OSLEC, include the code in the standard location:
# drivers/staging/echo . The DAHDI OSLEC echo canceller will be built as
# well:
ifneq (,$(wildcard $(src)/../staging/echo/echo.c))
obj-m += dahdi_echocan_oslec.o
obj-m += ../staging/echo/
endif
CFLAGS_MODULE += -I$(DAHDI_INCLUDE) -I$(src)

View File

@@ -358,6 +358,11 @@ static DEFINE_SPINLOCK(zone_lock);
/* The first zone on the list is the default zone. */
static LIST_HEAD(tone_zones);
static inline struct device *span_device(struct dahdi_span *span)
{
return &span->parent->dev;
}
/* Protects the span_list and pseudo_chans lists from concurrent access in
* process context. The spin_lock is needed to synchronize with the interrupt
* handler. */
@@ -6649,7 +6654,7 @@ static void
set_spanno_and_basechan(struct dahdi_span *span, u32 spanno, u32 basechan)
{
int i;
dahdi_dev_dbg(ASSIGN, span->parent->dev.parent,
dahdi_dev_dbg(ASSIGN, span_device(span),
"set: spanno=%d, basechan=%d (span->channels=%d)\n",
spanno, basechan, span->channels);
span->spanno = spanno;
@@ -6673,7 +6678,7 @@ static int _assign_spanno_and_basechan(struct dahdi_span *span)
unsigned int spanno = 1;
unsigned int basechan = 1;
dahdi_dev_dbg(ASSIGN, span->parent->dev.parent,
dahdi_dev_dbg(ASSIGN, span_device(span),
"assign: channels=%d\n", span->channels);
list_for_each_entry(pos, &span_list, spans_node) {
@@ -6693,7 +6698,7 @@ static int _assign_spanno_and_basechan(struct dahdi_span *span)
basechan = pos->chans[0]->channo + pos->channels;
}
dahdi_dev_dbg(ASSIGN, span->parent->dev.parent,
dahdi_dev_dbg(ASSIGN, span_device(span),
"good: spanno=%d, basechan=%d (span->channels=%d)\n",
spanno, basechan, span->channels);
set_spanno_and_basechan(span, spanno, basechan);
@@ -6743,20 +6748,20 @@ _check_spanno_and_basechan(struct dahdi_span *span, u32 spanno, u32 basechan)
struct dahdi_span *pos;
unsigned int next_channo;
dahdi_dev_dbg(ASSIGN, span->parent->dev.parent,
dahdi_dev_dbg(ASSIGN, span_device(span),
"check: spanno=%d, basechan=%d (span->channels=%d)\n",
spanno, basechan, span->channels);
list_for_each_entry(pos, &span_list, spans_node) {
next_channo = _get_next_channo(pos);
dahdi_dev_dbg(ASSIGN, span->parent->dev.parent,
dahdi_dev_dbg(ASSIGN, span_device(span),
"pos: spanno=%d channels=%d (next_channo=%d)\n",
pos->spanno, pos->channels, next_channo);
if (pos->spanno <= spanno) {
if (basechan < next_channo + pos->channels) {
/* Requested basechan breaks channel sorting */
dev_notice(span->parent->dev.parent,
dev_notice(span_device(span),
"[%d] basechan (%d) is too low for wanted span %d\n",
local_spanno(span), basechan, spanno);
return -EINVAL;
@@ -6771,13 +6776,13 @@ _check_spanno_and_basechan(struct dahdi_span *span, u32 spanno, u32 basechan)
break;
/* Cannot fit the span into the requested location. Abort. */
dev_notice(span->parent->dev.parent,
dev_notice(span_device(span),
"cannot fit span %d (basechan=%d) into requested location\n",
spanno, basechan);
return -EINVAL;
}
dahdi_dev_dbg(ASSIGN, span->parent->dev.parent,
dahdi_dev_dbg(ASSIGN, span_device(span),
"good: spanno=%d, basechan=%d (span->channels=%d)\n",
spanno, basechan, span->channels);
set_spanno_and_basechan(span, spanno, basechan);
@@ -6876,7 +6881,7 @@ static int _dahdi_assign_span(struct dahdi_span *span, unsigned int spanno,
return -EFAULT;
if (test_bit(DAHDI_FLAGBIT_REGISTERED, &span->flags)) {
dev_notice(span->parent->dev.parent,
dev_notice(span_device(span),
"local span %d is already assigned span %d "
"with base channel %d\n", local_spanno(span), span->spanno,
span->chans[0]->channo);
@@ -6887,7 +6892,7 @@ static int _dahdi_assign_span(struct dahdi_span *span, unsigned int spanno,
span->ops->disable_hw_preechocan) {
if ((NULL == span->ops->enable_hw_preechocan) ||
(NULL == span->ops->disable_hw_preechocan)) {
dev_notice(span->parent->dev.parent,
dev_notice(span_device(span),
"span with inconsistent enable/disable hw_preechocan");
return -EFAULT;
}
@@ -7091,7 +7096,7 @@ static int _dahdi_unassign_span(struct dahdi_span *span)
unsigned long flags;
if (!test_bit(DAHDI_FLAGBIT_REGISTERED, &span->flags)) {
dev_info(span->parent->dev.parent,
dev_info(span_device(span),
"local span %d is already unassigned\n",
local_spanno(span));
return -EINVAL;
@@ -10045,6 +10050,24 @@ failed_driver_init:
return res;
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25)
#ifdef CONFIG_PCI
void dahdi_pci_disable_link_state(struct pci_dev *pdev, int state)
{
u16 reg16;
int pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
state &= (PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1 |
PCIE_LINK_STATE_CLKPM);
if (!pos)
return;
pci_read_config_word(pdev, pos + PCI_EXP_LNKCTL, &reg16);
reg16 &= ~(state);
pci_write_config_word(pdev, pos + PCI_EXP_LNKCTL, reg16);
}
EXPORT_SYMBOL(dahdi_pci_disable_link_state);
#endif /* CONFIG_PCI */
#endif /* 2.6.25 */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22)
static inline void flush_find_master_work(void)
{

View File

@@ -152,12 +152,6 @@ static int span_hotplug(struct device *dev, char **envp, int envnum,
return err; \
} while (0)
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
#define dev_name(dev) ((dev)->bus_id)
#define dev_set_name(dev, format, ...) \
snprintf((dev)->bus_id, BUS_ID_SIZE, format, ## __VA_ARGS__);
#endif
static int span_uevent(struct device *dev, char **envp, int num_envp,
char *buffer, int buffer_size)
{
@@ -796,10 +790,17 @@ int dahdi_sysfs_add_device(struct dahdi_device *ddev, struct device *parent)
{
int ret;
struct device *const dev = &ddev->dev;
const char *dn;
dev->parent = parent;
dev->bus = &dahdi_device_bus;
dev_set_name(dev, "%s:%s", parent->bus->name, dev_name(parent));
dn = dev_name(dev);
if (!dn || !*dn) {
/* Invent default name based on parent */
if (!parent)
return -EINVAL;
dev_set_name(dev, "%s:%s", parent->bus->name, dev_name(parent));
}
ret = device_add(dev);
return ret;
}

View File

@@ -75,6 +75,7 @@ static inline void hrtimer_set_expires(struct hrtimer *timer, ktime_t time)
#endif
struct dahdi_dummy {
struct dahdi_device *ddev;
struct dahdi_span span;
struct dahdi_chan _chan;
struct dahdi_chan *chan;
@@ -205,37 +206,44 @@ static const struct dahdi_span_ops dummy_ops = {
static int dahdi_dummy_initialize(struct dahdi_dummy *ztd)
{
int res = 0;
/* DAHDI stuff */
ztd->ddev = dahdi_create_device();
if (!ztd->ddev)
return -ENOMEM;
dev_set_name(&ztd->ddev->dev, "dahdi_dummy");
ztd->chan = &ztd->_chan;
sprintf(ztd->span.name, "DAHDI_DUMMY/1");
snprintf(ztd->span.desc, sizeof(ztd->span.desc) - 1, "%s (source: " CLOCK_SRC ") %d", ztd->span.name, 1);
sprintf(ztd->chan->name, "DAHDI_DUMMY/%d/%d", 1, 0);
strlcpy(ztd->span.devicetype, "DAHDI Dummy Timing",
sizeof(ztd->span.devicetype));
ztd->ddev->devicetype = "DAHDI Dummy Timing";
ztd->chan->chanpos = 1;
ztd->span.chans = &ztd->chan;
ztd->span.channels = 0; /* no channels on our span */
ztd->span.deflaw = DAHDI_LAW_MULAW;
ztd->chan->pvt = ztd;
ztd->span.ops = &dummy_ops;
if (dahdi_register(&ztd->span, 0)) {
return -1;
}
return 0;
list_add_tail(&ztd->span.device_node, &ztd->ddev->spans);
res = dahdi_register_device(ztd->ddev, NULL);
return res;
}
int init_module(void)
{
int res;
ztd = kzalloc(sizeof(*ztd), GFP_KERNEL);
if (ztd == NULL) {
printk(KERN_ERR "dahdi_dummy: Unable to allocate memory\n");
return -ENOMEM;
}
if (dahdi_dummy_initialize(ztd)) {
printk(KERN_ERR "dahdi_dummy: Unable to intialize DAHDI driver\n");
res = dahdi_dummy_initialize(ztd);
if (res) {
printk(KERN_ERR
"dahdi_dummy: Unable to intialize DAHDI driver (%d)\n",
res);
kfree(ztd);
return -ENODEV;
return res;
}
#if defined(USE_HIGHRESTIMER)
@@ -273,7 +281,8 @@ void cleanup_module(void)
atomic_set(&shutdown, 1);
del_timer_sync(&timer);
#endif
dahdi_unregister(&ztd->span);
dahdi_unregister_device(ztd->ddev);
dahdi_free_device(ztd->ddev);
kfree(ztd);
if (debug)
printk(KERN_DEBUG "dahdi_dummy: cleanup() finished\n");

View File

@@ -605,9 +605,10 @@ static int _create_dynamic(struct dahdi_dynamic_span *dds)
strlcpy(d->dname, dds->driver, sizeof(d->dname));
strlcpy(d->addr, dds->addr, sizeof(d->addr));
d->timing = dds->timing;
sprintf(d->span.name, "DYN/%s/%s", dds->driver, dds->addr);
sprintf(d->span.desc, "Dynamic '%s' span at '%s'",
dds->driver, dds->addr);
snprintf(d->span.name, sizeof(d->span.name), "DYN/%s/%s",
dds->driver, dds->addr);
snprintf(d->span.desc, sizeof(d->span.desc),
"Dynamic '%s' span at '%s'", dds->driver, dds->addr);
d->span.deflaw = DAHDI_LAW_MULAW;
d->span.flags |= DAHDI_FLAG_RBS;
d->span.chans = d->chans;
@@ -658,6 +659,9 @@ static int _create_dynamic(struct dahdi_dynamic_span *dds)
return res;
}
d->ddev->devicetype = d->span.name;
d->ddev->hardware_id = d->span.name;
dev_set_name(&d->ddev->dev, "dynamic:%s:%d", dds->driver, dtd->id++);
list_add_tail(&d->span.device_node, &d->ddev->spans);
/* Whee! We're created. Now register the span */
if (dahdi_register_device(d->ddev, d->dev)) {

View File

@@ -71,6 +71,8 @@ static struct dahdi_span *ztdeth_getspan(unsigned char *addr, unsigned short sub
if (z)
span = z->span;
spin_unlock_irqrestore(&zlock, flags);
if (!span || !test_bit(DAHDI_FLAGBIT_REGISTERED, &span->flags))
return NULL;
return span;
}
@@ -191,15 +193,44 @@ static void ztdeth_transmit(struct dahdi_dynamic *dyn, u8 *msg, size_t msglen)
spin_unlock_irqrestore(&zlock, flags);
}
static int ztdeth_flush(void)
/**
* dahdi_dynamic_flush_work_fn - Flush all pending transactions.
*
* This function is run in a work queue since we can't guarantee interrupts
* will be enabled when we're called, and dev_queue_xmit() requires that
* interrupts be enabled.
*
*/
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static void dahdi_dynamic_flush_work_fn(void *data)
#else
static void dahdi_dynamic_flush_work_fn(struct work_struct *work)
#endif
{
struct sk_buff *skb;
/* Handle all transmissions now */
while ((skb = skb_dequeue(&skbs))) {
dev_queue_xmit(skb);
}
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20)
static DECLARE_WORK(dahdi_dynamic_eth_flush_work,
dahdi_dynamic_flush_work_fn, NULL);
#else
static DECLARE_WORK(dahdi_dynamic_eth_flush_work,
dahdi_dynamic_flush_work_fn);
#endif
/**
* ztdeth_flush - Flush all pending transactions.
*
* This function is called in interrupt context while processing the master
* span.
*/
static int ztdeth_flush(void)
{
schedule_work(&dahdi_dynamic_eth_flush_work);
return 0;
}
@@ -422,6 +453,11 @@ static int __init ztdeth_init(void)
static void __exit ztdeth_exit(void)
{
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22)
flush_scheduled_work();
#else
cancel_work_sync(&dahdi_dynamic_eth_flush_work);
#endif
dev_remove_pack(&ztdeth_ptype);
unregister_netdevice_notifier(&ztdeth_nblock);
dahdi_dynamic_unregister_driver(&ztd_eth);

View File

@@ -57,6 +57,15 @@
* (and not tasklet). */
#define CONFIG_VOICEBUS_INTERRUPT
/*
* Enable the following definition in order to disable Active-State Power
* Management on the PCIe bridge for PCIe cards. This has been known to work
* around issues where the BIOS enables it on the cards even though the
* platform does not support it.
*
*/
#undef CONFIG_VOICEBUS_DISABLE_ASPM
/* Define this to use a FIFO for the software echocan reference.
* (experimental) */
#undef CONFIG_VOICEBUS_ECREFERENCE

View File

@@ -173,6 +173,15 @@ static inline int t4_queue_work(struct workqueue_struct *wq, struct work_struct
/* #define CONFIG_FORCE_EXTENDED_RESET */
/* #define CONFIG_NOEXTENDED_RESET */
/*
* Uncomment the following definition in order to disable Active-State Power
* Management on the PCIe bridge for PCIe cards. This has been known to work
* around issues where the BIOS enables it on the cards even though the
* platform does not support it.
*
*/
/* #define CONFIG_WCT4XXP_DISABLE_ASPM */
#if defined(CONFIG_FORCE_EXTENDED_RESET) && defined(CONFIG_NOEXTENDED_RESET)
#error "You cannot define both CONFIG_FORCE_EXTENDED_RESET and " \
"CONFIG_NOEXTENDED_RESET."
@@ -378,6 +387,11 @@ struct t4 {
struct spi_state st;
};
static inline bool is_pcie(const struct t4 *wc)
{
return (wc->devtype->flags & FLAG_EXPRESS) > 0;
}
static inline bool has_e1_span(const struct t4 *wc)
{
return (wc->t1e1) != 0;
@@ -670,11 +684,12 @@ static unsigned int __t4_framer_in(const struct t4 *wc, int unit,
val = ((unit & 0x3) << 8) | (addr & 0xff) | haddr;
writel(val, wc_laddr);
/* readl(wc_version); */
readl(wc_version);
writel(val | WC_LFRMR_CS | WC_LREAD, wc_laddr);
readl(wc_version);
ret = readb(wc_ldata);
writel(val, wc_laddr);
readl(wc_version);
return ret;
}
@@ -700,11 +715,13 @@ static void __t4_framer_out(const struct t4 *wc, int unit, const u8 addr,
val = ((unit & 0x3) << 8) | (addr & 0xff) | haddr;
writel(val, wc_laddr);
readl(wc_version);
writel(value, wc_ldata);
readl(wc_version);
writel(val | WC_LFRMR_CS | WC_LWRITE, wc_laddr);
/* readl(wc_version); */
readl(wc_version);
writel(val, wc_laddr);
readl(wc_version);
}
static void t4_framer_out(struct t4 *wc, int unit,
@@ -3767,7 +3784,7 @@ static inline void t4_framer_interrupt(struct t4 *wc, int span)
}
#ifdef SUPPORT_GEN1
DAHDI_IRQ_HANDLER(t4_interrupt)
static irqreturn_t _t4_interrupt(int irq, void *dev_id)
{
struct t4 *wc = dev_id;
unsigned long flags;
@@ -3835,6 +3852,16 @@ DAHDI_IRQ_HANDLER(t4_interrupt)
return IRQ_RETVAL(1);
}
DAHDI_IRQ_HANDLER(t4_interrupt)
{
irqreturn_t ret;
unsigned long flags;
local_irq_save(flags);
ret = _t4_interrupt(irq, dev_id);
local_irq_restore(flags);
return ret;
}
#endif
static int t4_allocate_buffers(struct t4 *wc, int numbufs,
@@ -3952,7 +3979,7 @@ static void t4_isr_bh(unsigned long data)
#endif
}
DAHDI_IRQ_HANDLER(t4_interrupt_gen2)
static irqreturn_t _t4_interrupt_gen2(int irq, void *dev_id)
{
struct t4 *wc = dev_id;
unsigned int status;
@@ -4148,6 +4175,16 @@ out:
return IRQ_RETVAL(1);
}
DAHDI_IRQ_HANDLER(t4_interrupt_gen2)
{
irqreturn_t ret;
unsigned long flags;
local_irq_save(flags);
ret = _t4_interrupt_gen2(irq, dev_id);
local_irq_restore(flags);
return ret;
}
#ifdef SUPPORT_GEN1
static int t4_reset_dma(struct t4 *wc)
{
@@ -5072,6 +5109,13 @@ t4_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
spin_lock_init(&wc->reglock);
wc->devtype = (const struct devtype *)(ent->driver_data);
#ifdef CONFIG_WCT4XXP_DISABLE_ASPM
if (is_pcie(wc)) {
pci_disable_link_state(pdev->bus->self, PCIE_LINK_STATE_L0S |
PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM);
};
#endif
if (is_octal(wc))
wc->numspans = 8;
else if (wc->devtype->flags & FLAG_2PORT)
@@ -5188,22 +5232,23 @@ t4_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
#ifdef SUPPORT_GEN1
if (request_irq(pdev->irq, (wc->devtype->flags & FLAG_2NDGEN) ?
t4_interrupt_gen2 : t4_interrupt,
DAHDI_IRQ_SHARED_DISABLED,
DAHDI_IRQ_SHARED,
(wc->numspans == 8) ? "wct8xxp" :
(wc->numspans == 2) ? "wct2xxp" :
"wct4xxp",
wc))
wc)) {
#else
if (!(wc->tspans[0]->spanflags & FLAG_2NDGEN)) {
dev_notice(&wc->dev->dev, "This driver does not "
"support 1st gen modules\n");
free_wc(wc);
return -ENODEV;
}
if (request_irq(pdev->irq, t4_interrupt_gen2, DAHDI_IRQ_SHARED_DISABLED, "t4xxp", wc))
if (!(wc->tspans[0]->spanflags & FLAG_2NDGEN)) {
dev_notice(&wc->dev->dev, "This driver does not "
"support 1st gen modules\n");
free_wc(wc);
return -ENODEV;
}
if (request_irq(pdev->irq, t4_interrupt_gen2,
DAHDI_IRQ_SHARED, "t4xxp", wc)) {
#endif
{
dev_notice(&wc->dev->dev, "t4xxp: Unable to request IRQ %d\n",
dev_notice(&wc->dev->dev, "Unable to request IRQ %d\n",
pdev->irq);
free_wc(wc);
return -EIO;

View File

@@ -422,6 +422,7 @@ struct vpm450m *init_vpm450m(void *wc, int *isalaw, int numspans, const struct f
tOCT6100_GET_INSTANCE_SIZE InstanceSize;
tOCT6100_CHANNEL_OPEN *ChannelOpen;
UINT32 ulResult;
const unsigned int mask = (8 == numspans) ? 0x7 : 0x3;
unsigned int sout_stream, rout_stream;
struct vpm450m *vpm450m;
int x,y,law;
@@ -527,7 +528,7 @@ struct vpm450m *init_vpm450m(void *wc, int *isalaw, int numspans, const struct f
* therefore, the lower 2 bits tell us which span this
* timeslot/channel
*/
if (isalaw[x & 0x07])
if (isalaw[x & mask])
law = cOCT6100_PCM_A_LAW;
else
law = cOCT6100_PCM_U_LAW;

View File

@@ -191,6 +191,11 @@ static const struct wctdm_desc wcaex410 = { "Wildcard AEX410", FLAG_EXPRESS, 4 }
static const struct wctdm_desc wcha80000 = { "HA8-0000", 0, 8 };
static const struct wctdm_desc wchb80000 = { "HB8-0000", FLAG_EXPRESS, 8 };
static inline bool is_pcie(const struct wctdm *wc)
{
return (wc->desc->flags & FLAG_EXPRESS) > 0;
}
/**
* Returns true if the card is one of the Hybrid Digital Analog Cards.
*/
@@ -1904,7 +1909,7 @@ static void wctdm_fxo_ring_detect(struct wctdm *wc, struct wctdm_module *mod)
if (!is_fxo_ringing(fxo)) {
set_ring(fxo, DEBOUNCING_RINGOFF);
fxo->ringdebounce_timer =
wc->framecount + ringdebounce / 2;
wc->framecount + ringdebounce / 8;
}
break;
case DEBOUNCING_RINGOFF:
@@ -3727,14 +3732,15 @@ static int wctdm_ioctl(struct dahdi_chan *chan, unsigned int cmd, unsigned long
if (((fxs->lasttxhook & SLIC_LF_SETMASK) == SLIC_LF_ACTIVE_FWD) ||
((fxs->lasttxhook & SLIC_LF_SETMASK) == SLIC_LF_ACTIVE_REV)) {
int res;
x = set_lasttxhook_interruptible(wc, fxs,
res = set_lasttxhook_interruptible(wc, fxs,
(POLARITY_XOR(fxs) ?
SLIC_LF_OHTRAN_REV : SLIC_LF_OHTRAN_FWD),
&mod->sethook);
if (debug & DEBUG_CARD) {
if (x) {
if (res) {
dev_info(&wc->vb.pdev->dev,
"Channel %d TIMEOUT: "
"OnHookTransfer start\n",
@@ -5678,6 +5684,13 @@ __wctdm_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
wc->vb.pdev = pdev;
wc->vb.debug = &debug;
#ifdef CONFIG_VOICEBUS_DISABLE_ASPM
if (is_pcie(wc)) {
pci_disable_link_state(pdev->bus->self, PCIE_LINK_STATE_L0S |
PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM);
};
#endif
if (is_hx8(wc)) {
wc->vb.ops = &hx8_voicebus_operations;
ret = voicebus_boot_init(&wc->vb, wc->board_name);

View File

@@ -99,6 +99,11 @@ static const struct t1_desc te120p = {"Wildcard TE120P"};
static const struct t1_desc te122 = {"Wildcard TE122"};
static const struct t1_desc te121 = {"Wildcard TE121"};
static inline bool is_pcie(const struct t1 *t1)
{
return (0 == strcmp(t1->variety, te121.name));
}
/* names of HWEC modules */
static const char *vpmadt032_name = "VPMADT032";
static const char *vpmoct_name = "VPMOCT032";
@@ -2749,6 +2754,13 @@ static int __devinit te12xp_init_one(struct pci_dev *pdev, const struct pci_devi
}
#endif /* CONFIG_VOICEBUS_ECREFERENCE */
#ifdef CONFIG_VOICEBUS_DISABLE_ASPM
if (is_pcie(wc)) {
pci_disable_link_state(pdev->bus->self, PCIE_LINK_STATE_L0S |
PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM);
};
#endif
snprintf(wc->name, sizeof(wc->name)-1, "wcte12xp%d", index);
pci_set_drvdata(pdev, wc);
wc->vb.ops = &voicebus_operations;

View File

@@ -42,6 +42,8 @@ static DEF_PARM(uint, poll_digital_inputs, 1000, 0644, "Poll Digital Inputs");
static DEF_PARM_BOOL(vmwi_ioctl, 1, 0644, "Asterisk support VMWI notification via ioctl");
static DEF_PARM_BOOL(ring_trapez, 0, 0664, "Use trapezoid ring type");
static DEF_PARM_BOOL(lower_ringing_noise, 0, 0664,
"Lower ringing noise (may loose CallerID)");
/* Signaling is opposite (fxo signalling for fxs card) */
#if 1
@@ -135,6 +137,7 @@ struct FXS_priv_data {
xpp_line_t want_dtmf_mute; /* what dahdi want */
xpp_line_t prev_key_down; /* DTMF down sets the bit */
xpp_line_t neon_blinking;
xpp_line_t vbat_h; /* High voltage */
struct timeval prev_key_time[CHANNELS_PERXPD];
int led_counter[NUM_LEDS][CHANNELS_PERXPD];
int ohttimer[CHANNELS_PERXPD];
@@ -157,24 +160,48 @@ struct FXS_priv_data {
#define LED_BLINK_RING (1000/8) /* in ticks */
/*---------------- FXS: Static functions ----------------------------------*/
static int linefeed_control(xbus_t *xbus, xpd_t *xpd, lineno_t chan, enum fxs_state value)
{
struct FXS_priv_data *priv;
priv = xpd->priv;
LINE_DBG(SIGNAL, xpd, chan, "value=0x%02X\n", value);
priv->lasttxhook[chan] = value;
return SLIC_DIRECT_REQUEST(xbus, xpd, chan, SLIC_WRITE, 0x40, value);
}
static int do_chan_power(xbus_t *xbus, xpd_t *xpd, lineno_t chan, bool on)
{
int value = (on) ? REG_BATTERY_BATSL : 0x00;
struct FXS_priv_data *priv;
unsigned long *p;
int was;
BUG_ON(!xbus);
BUG_ON(!xpd);
priv = xpd->priv;
p = (unsigned long *)&priv->vbat_h;
if (on)
was = test_and_set_bit(chan, p) != 0;
else
was = test_and_clear_bit(chan, p) != 0;
if (was == on) {
LINE_DBG(SIGNAL, xpd, chan,
"%s (same, ignored)\n", (on) ? "up" : "down");
return 0;
}
LINE_DBG(SIGNAL, xpd, chan, "%s\n", (on) ? "up" : "down");
return SLIC_DIRECT_REQUEST(xbus, xpd, chan, SLIC_WRITE, REG_BATTERY, value);
return SLIC_DIRECT_REQUEST(xbus, xpd, chan, SLIC_WRITE, REG_BATTERY,
(on) ? REG_BATTERY_BATSL : 0x00);
}
static int linefeed_control(xbus_t *xbus, xpd_t *xpd, lineno_t chan, enum fxs_state value)
{
struct FXS_priv_data *priv;
bool want_vbat_h;
priv = xpd->priv;
/*
* Should we drop vbat_h only during actuall ring?
* - It would lower the noise caused to other channels by
* group ringing
* - But it may also stop CallerID from passing through the SLIC
*/
want_vbat_h = value == FXS_LINE_RING;
if (lower_ringing_noise || want_vbat_h)
do_chan_power(xbus, xpd, chan, want_vbat_h);
LINE_DBG(SIGNAL, xpd, chan, "value=0x%02X\n", value);
priv->lasttxhook[chan] = value;
return SLIC_DIRECT_REQUEST(xbus, xpd, chan, SLIC_WRITE, 0x40, value);
}
static void vmwi_search(xpd_t *xpd, lineno_t pos, bool on)
@@ -691,7 +718,7 @@ static int send_ring(xpd_t *xpd, lineno_t chan, bool on)
LINE_DBG(SIGNAL, xpd, chan, "%s\n", (on)?"on":"off");
priv = xpd->priv;
set_vm_led_mode(xbus, xpd, chan, 0);
do_chan_power(xbus, xpd, chan, on); // Power up (for ring)
do_chan_power(xbus, xpd, chan, on); /* Power up (for ring) */
ret = linefeed_control(xbus, xpd, chan, value);
if(on) {
MARK_BLINK(priv, chan, LED_GREEN, LED_BLINK_RING);
@@ -1550,6 +1577,11 @@ static int proc_fxs_info_read(char *page, char **start, off_t off, int count, in
IS_SET(priv->search_fsk_pattern, i)
);
}
len += sprintf(page + len, "\n%-12s", "vbat_h:");
for_each_line(xpd, i) {
len += sprintf(page + len, "%4d",
test_bit(i, (unsigned long *)&priv->vbat_h));
}
len += sprintf(page + len, "\n");
for(led = 0; led < NUM_LEDS; led++) {
len += sprintf(page + len, "LED #%d", led);

View File

@@ -422,19 +422,37 @@ int xpp_register_request(xbus_t *xbus, xpd_t *xpd, xportno_t portno,
return 0;
}
/* 0x23 */ HOSTCMD(GLOBAL, RESET_SYNC_COUNTERS)
/*
* Wrapper for different types of xbus reset
*/
static int send_xbus_reset(xbus_t *xbus, uint8_t reset_mask)
{
xframe_t *xframe;
xpacket_t *pack;
BUG_ON(!xbus);
//XBUS_DBG(SYNC, xbus, "\n");
XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, RESET_SYNC_COUNTERS, 0);
RPACKET_FIELD(pack, GLOBAL, RESET_SYNC_COUNTERS, mask) = 0x10;
XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, XBUS_RESET, 0);
RPACKET_FIELD(pack, GLOBAL, XBUS_RESET, mask) = reset_mask;
send_cmd_frame(xbus, xframe);
return 0;
}
/* 0x23 */ HOSTCMD(GLOBAL, RESET_SPI)
{
XBUS_DBG(DEVICES, xbus, "Sending SPI reset\n");
/* toggle reset line */
send_xbus_reset(xbus, 0x04);
send_xbus_reset(xbus, 0x00);
return 0;
}
/* 0x23 */ HOSTCMD(GLOBAL, RESET_SYNC_COUNTERS)
{
//XBUS_DBG(SYNC, xbus, "\n");
return send_xbus_reset(xbus, 0x10);
}
/*---------------- GLOBAL: Astribank Reply Handlers -----------------------*/
HANDLER_DEF(GLOBAL, NULL_REPLY)
@@ -526,6 +544,7 @@ HANDLER_DEF(GLOBAL, AB_DESCRIPTION) /* 0x08 */
list_add_tail(&card_desc->card_list, &worker->card_list);
spin_unlock_irqrestore(&worker->worker_lock, flags);
}
CALL_PROTO(GLOBAL, RESET_SPI, xbus, NULL);
if (!xbus_process_worker(xbus)) {
ret = -ENODEV;
goto out;

View File

@@ -38,7 +38,7 @@ enum global_opcodes {
XPROTO_NAME(GLOBAL, SYNC_REPLY) = 0x1A,
/**/
XPROTO_NAME(GLOBAL, ERROR_CODE) = 0x22,
XPROTO_NAME(GLOBAL, RESET_SYNC_COUNTERS) = 0x23,
XPROTO_NAME(GLOBAL, XBUS_RESET) = 0x23,
XPROTO_NAME(GLOBAL, NULL_REPLY) = 0xFE,
};
@@ -87,7 +87,7 @@ DEF_RPACKET_DATA(GLOBAL, SYNC_REPLY,
DEF_RPACKET_DATA(GLOBAL, REGISTER_REPLY,
reg_cmd_t regcmd;
);
DEF_RPACKET_DATA(GLOBAL, RESET_SYNC_COUNTERS,
DEF_RPACKET_DATA(GLOBAL, XBUS_RESET,
byte mask;
);
DEF_RPACKET_DATA(GLOBAL, ERROR_CODE,
@@ -98,6 +98,7 @@ DEF_RPACKET_DATA(GLOBAL, ERROR_CODE,
/* 0x07 */ DECLARE_CMD(GLOBAL, AB_REQUEST);
/* 0x19 */ DECLARE_CMD(GLOBAL, SYNC_SOURCE, enum sync_mode mode, int drift);
/* 0x23 */ DECLARE_CMD(GLOBAL, RESET_SPI);
/* 0x23 */ DECLARE_CMD(GLOBAL, RESET_SYNC_COUNTERS);
int xpp_register_request(xbus_t *xbus, xpd_t *xpd, xportno_t portno,

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,12 @@
# Install firmwares and initialization scripts for the Astribank
# drivers
FPGA_FW = FPGA_FXS.hex FPGA_1141.hex FPGA_1151.hex FPGA_1161.hex
USB_FW = USB_FW.hex USB_FW.201.hex USB_RECOV.hex
FPGA_FW = FPGA_FXS.hex FPGA_1141.hex FPGA_1151.hex FPGA_1161.hex \
FPGA_1161.201.hex
PIC_FW = PIC_TYPE_1.hex PIC_TYPE_2.hex PIC_TYPE_3.hex PIC_TYPE_4.hex
OCT_FW = $(wildcard OCT6104E-256D.ima)
FIRMWARES = USB_FW.hex $(FPGA_FW) $(PIC_FW) $(OCT_FW)
FIRMWARES = $(USB_FW) $(FPGA_FW) $(PIC_FW) $(OCT_FW)
PROTO_VER = 30
SCRIPTS_BASE = $(patsubst %,init_card_%_$(PROTO_VER),1 2 3 4 5)
SCRIPTS = $(SCRIPTS_BASE:%=../%)

View File

@@ -0,0 +1,578 @@
#
# $Id: USB_FW.201.hex 10402 2012-02-15 15:34:50Z dima $
#
:03004300021F0099
:03005300021F0089
:101F0000021E3100021E8E00021E7800021E4900D1
:081F1000021C2000021BA900C5
:101000001201000200000040AAAAAAAAAAAA01028C
:1010100003010A0600020000004001000902370037
:10102000020100C0000904000002FFFFFF040705E1
:101030000202000200070586020002000904010006
:1010400002FFFFFF050705040200020007058802F2
:10105000000200001201000200000040E4E451110F
:101060000000010203010A06000200000040010026
:1010700009023700020100C0320904000002FFFF2C
:10108000FF04070502024000000705860240000039
:101090000904010002FFFFFF0507050402400000EC
:1010A0000705880240000006040016001400120024
:1010B0000A00260004030904160358006F0072009A
:1010C00063006F006D0020004C00540044001403C6
:1010D00041007300740072006900620061006E00DC
:1010E0006B001203530065007200690061006C0020
:1010F0004E006F000A0346005000470041002603DF
:101100004D0061006E00610067006D0065006E00BB
:101110007400500072006F0063006500730073007C
:061120006F0072000000E8
:050FF6000300000000F3
:100F3C0041E0370041E0B60042E0B1000041E0384A
:100F4C0000021BE0850218E07943E0B30000004D7D
:0F0F5C00E03931303339354D202020202020005E
:101D71008B538A548955E5581558AE57700215573B
:101D81004E6014AB530555E555AA54700205541421
:081D9100F9ED12077780DF2253
:101BE6008B538A548955E55A155AAE5970021559C0
:101BF6004E6026AB560558E558AA5770020557148D
:101C0600F9120731FFAB530555E555AA5470020585
:0A1C16005414F9EF12077780CD2275
:101DC100D2B7E490E670F0F5B575B5E653B5E743E3
:101DD100B28853B2FCC2B3D2B1C2B2C2B67F32FE34
:061DE100121E07D2B6221B
:101E6100538EF75389FB5389F74389015389FDE465
:071E7100F58AF58CD2A922CD
:1018B2008C448D45AA06A9077556018A5789587521
:1018C2005900755A1C7B017AE0794C121BE690E0B4
:1018D20064E0FCA3E0FDA3E0FEA3E064D1FFEE64BC
:1018E2008DFEED644CFDEC6449FC90E064120853FB
:1018F2007EE07F4C7D1C7C001213707EE07F4C7B6F
:101902001C7A00AD45AC441214247D1C7C00AF450A
:10191200AE441211F57D1C7C00AF45AE44021C564C
:08183F008E448F458C468D4755
:10184700C20712001290E15BEFF0BF5004D207808D
:1018570057E490E15CF0A3F090E15CE0FEA3E0FFC9
:10186700C39410EE648094805030E5472FF582E5ED
:10187700463EF583E0FF90E15CE0FCA3E02545F5FB
:1018870082E5443CF583E0B5071090E15DE004F0A4
:1018970070C690E15CE004F080BE90E15CE070040B
:0A18A700A3E064107002D207A2074C
:0118B1002214
:020E12008F410E
:100E14001200128F42E4F546F547AD47AC46121472
:100E2400DA74692547F582E434E0F583E543F00597
:100E340047E54770020546C39408E54664809480FC
:100E440040D8E541600490E069F090E069E0B4C006
:100E540008754400754508800675441D754536754A
:100E64004600754708C3E5479410E54664809480BE
:100E740050231214D674692547F582E434E0F583CF
:100E8400E543F00547E547700205460545E545702D
:100E9400D4054480D07543FF75441D7545197546C6
:100EA40000754710C3E547942CE546648094805050
:100EB40033E542B4510E7B007A007943AD45AC442E
:100EC400FF1214E274692547F582E434E0F583E502
:100ED40043F00547E547700205460545E54570C4FE
:100EE400054480C075441D75453EE4F543F546F55B
:100EF40047C3E5479406E54664809480502FE54255
:100F0400B4510A90E069E0B4C2031214D6744625C1
:100F140047F582E434E0F583E543F00547E547709F
:100F24000205460545E54570C8054480C490E0695E
:070F3400E0B4C20374C0F039
:010F3B002293
:0A1988008E448F458B468A4789483C
:101992007E00E5452DF54DEE3544F54C1200128FD3
:1019A20049E5496451600BC3E5459410E544940050
:1019B200503585444A85454BC3E54B954DE54A95DF
:1019C2004C5024AB46AA47A948AD4BAC4AAF49128A
:1019D2001740054BE54B7002054A74012548F5484E
:0719E200E43547F54780D111
:0119E90022DB
:0617C7008B418A428943B8
:1017CD00D2067556017557E0755869755900755AE9
:1017DD00107B017AE07995121BE6E5432410F9E4BC
:1017ED003542854156F5578958755900755A0C7B08
:1017FD00017AE079A5121BE67EE07F957CE07D1AEB
:10180D001218B27EE07F1AE543241CF9E43542FC40
:10181D00AD0112183F5016AB41E5432410F9E435E4
:10182D0042FA7D1C7F197E1D1219888002C206A204
:01183D0006A4
:01183E002287
:101126007F03121D46EF2402FFE43EA90775410125
:10113600F542894390E06AE0FFE50C2408F582E475
:10114600350BF583EFF090E06BE0FFE50C2409F535
:1011560082E4350BF583EFF090E06CE0FFE50C24BC
:101166000AF582E4350BF583EFF090E06DE0FFE5DC
:101176000C240BF582E4350BF583EFF090E06EE07E
:10118600FFE50C240CF582E4350BF583EFF090E0D7
:101196006FE0FFE50C240DF582E4350BF583EFF0E7
:1011A6007F087E00E4FDEDC39408502874692FF58E
:1011B60082E434E0F583E0FCAB41AA42A94375F032
:1011C60002EDA4F58285F083EC1207890D0FBF00AE
:1011D600010E80D2E5192404F582E43518F583E082
:0E11E60030E0047F0180027F0090E037EFF0E0
:0111F40022D8
:101B250090E06CE02FFFE50C240AF582E4350BF517
:101B350083EFF0E50C240BF582E4350BF583E0FE2D
:101B4500E50C240AF582E4350BF583E0FDEDFF9005
:101B5500E0B1EEF0A3EFF0D206121CBD90E680E0F6
:041B650054F7F0221F
:1016200090E600E054E74410F090E60174C0F090BA
:10163000E6107420F000000090E611F00000009029
:10164000E6047480F0000000740FF0000000E4F085
:1016500000000090E6187410F0000000E490E61915
:10166000F000000090E61A7408F0000000E490E634
:101670001BF000000090E6497482F0000000F000CA
:10168000000090E6247402F0000000E490E625F0EB
:1016900000000090E6957480F0000000F00000006B
:1016A00043AF017B017AE07914755700755806E461
:0416B000FD021D71A9
:061E0100D2837F0A7E007F
:101E07007C007D181207ABEF1FAC0670011E4C70EB
:021E1700F622B1
:0A1A43008E418F428B438A4489458F
:101A4D00E4F546F547C3E5479542E54695415036E1
:101A5D00AB43AA44A94585478285468312074AFFB1
:101A6D00E4FBFAC2B2EF1392B1EFC313FFD2B20B84
:101A7D00BB00010AEB64084A70E9C2B20547E547AD
:071A8D0070C3054680BFD3C2
:011A9400222F
:101E190090E60174C0F0C2B67FC27E01121E07D2DD
:081E2900B67F327E00021E07A5
:101EA400D287121E01C287121E03C2837F0A7E00DC
:031EB400021E0704
:021B6900AB07C8
:101B6B00E4F9FAEBC413131354011392877F027E2B
:101B7B0000121E07D2837F057E00121E07E925E0A7
:101B8B00FFA2B3E4334FF97F057E00121E07EB254E
:0D1B9B00E0FBC283121E030ABA08C8AF01A6
:011BA800221A
:061A95008B558A568957AB
:101A9B00A2AFE433F55D121EA4E4F55CE55CC395DF
:101AAB005B5027AB55AA56A957855C8275830012EC
:101ABB00074AFF121B69AB58AA59A95A855C827554
:101ACB008300EF120789055C80D2120036E55D2496
:031ADB00FF92AFC8
:011ADE0022E5
:0B003600C287121E03121E01D2872297
:101DE70075418F8F42755800755900755A4B755B51
:0A1DF700027B007A007941021A9580
:101C8C0078417C007D007BFF7A0F79F67E007F0522
:101C9C0012070B30B415755800755900755A4175FB
:101CAC005B057B007A007941121A95E5435401FFDC
:011CBC002205
:100B4E007541007542007543007545017546E075A7
:100B5E0047007548017549E0754A08E4F551FFF5FF
:100B6E00527B017AE07900F557755808FD121D7118
:100B7E00AB45AA46A9477401120777E4F550E55034
:100B8E00C454F0AB45AA46A94790000112078985C7
:100B9E004858854959854A5A755B08121A95AB48CB
:100BAE00AA49A94A90000212074AFE5403FFEE54C6
:100BBE0070F55124E0602924F0604B24F0605D2430
:100BCE00F0606F24406003020C5675410185184297
:100BDE00851943EF24FE600624FE703B801C801FA7
:100BEE00E5192401FDE43518A905754101F5428981
:100BFE0043EF24FC60092402700A7552028052757C
:100C0E005206804D8011E5192402FDE43518A90520
:100C1E00754101F54289437552088035E519240363
:100C2E00FDE43518A905754101F542894375520455
:100C3E00801FE5192405FDE43518A905754101F558
:100C4E00428943755298800975410075420075437B
:100C5E0000E542454345416022AB41AA42A94312F9
:100C6E000731FED395524006AD52AE0580008E443C
:100C7E00120731C39544120777800CE55170047E3C
:100C8E000180027E008E44744B2550F8A644055018
:100C9E00E550C394055003020B8CAB45AA46A947F9
:100CAE007488120777AB45E5472401F9E43546FA17
:100CBE0075560075570075584B755900755A0512C3
:100CCE001BE6854858854959854A5A755B08AB45D8
:070CDE00AA46A947021A957E
:1019EA008F4190E0B1E0FEA3E054F064607003EE32
:1019FA00641160037F012290E037E070037F0F22B9
:101A0A00E5417003308108E541B401062080037F77
:101A1A00102290E0B6E0B541037F0122E4F511D22D
:101A2A0006121CBDAF4190E0B6EFF024FF92B590CC
:091A3A00E680E054F7F07F002281
:04000E0090FC04F06E
:1000120090E678E0541824F06008240870087F50B5
:0800220080067F518002E4FF1B
:01002A0022B3
:0C14D600AD45AC447B007A007943AF4286
:0C14E2008F488C498D4A8B4B8A4C894DF9
:1014EE00E4F54EF54F755003FDF551F552A2AF33AD
:1014FE00F553E54824AF600D047012754E00754F1C
:10150E00017D018008754E00754F02E4FDE54860CF
:10151E0051E54F454E604BE54990E0B3F0E54AA3E7
:10152E00F074B32DF582E434E0AD82FCAB4FAF48DE
:10153E001219227551008F527F0A7E00121ADFE5B2
:10154E0052455160107CE07D687B01AF4812157BDF
:10155E007551008F5290E068E0AB4BAA4CA94D122A
:0C156E000777E55324FF92AFAE51AF5257
:01157A00224E
:0C1740008F4E8C4F8D508B518A52895374
:10174C00E4F554F555755603FDF557F558A2AF332E
:10175C00F559E54E24AF600D0470127554007555A3
:10176C00027D018008755400755503E4FDE54E605B
:10177C003FE55545546039E54F90E0B3F0E550A393
:10178C00F0AB51AA52A95312073190E0B5F0C2B791
:10179C0074B32DF582E434E0AD82FCAB55AF4E1240
:1017AC0019227557008F587F0A7E00121ADFD2B7A4
:0A17BC00E55924FF92AFAE57AF5875
:0117C6002200
:10005600E4F531F532F535F53CF53DF53EF53FE590
:10006600AA5484600302063A90E694E0FE90E69570
:10007600E0FBEEF53CEBF53DC39405E53C94004012
:100086000790F404E0FD80027DFFED12085F00CECC
:100096000102C30503080703580903D80B011E0E06
:1000A60000E40F019411025E130541250401310499
:1000B6005732046A3404B23504C93604E63703E518
:1000C6004503F647000005BA75310075320790FC06
:1000D600047481F0A37414F0E4A3F00205DD7F0F2D
:1000E600121DE775310075320690FC047480F0E449
:1000F600A3F0753505F511FE74002535F9EE34F4D7
:10010600FA7B011217C7400690FC05740EF0E4FF57
:10011600120E127F8F0202BD7F0E121DE77531008F
:10012600753205748E12000E8F3F7B007A0079407F
:10013600E4FDFC1214E2E53F64516019E53F6450AA
:10014600601375310075320690FC047480F0A37458
:100156000BF00205DD90E0B7E0FF120E12740025E9
:1001660032F974FC3531FA7B01C0038B567557E0C2
:10017600755869755900755A2CD003121BE6742CF4
:100186002532F532E43531F5317F8E0202BD753107
:100196000075320790FC047491F090E678E090FCCC
:1001A60005F030B3047F0280027F0030B4047E0184
:1001B60080027E00EE4F90FC06F074002532F97442
:1001C600FC3531FA7B01755700755812E4FD121D96
:1001D6007174002532F974FC3531FA7B01C0038B4A
:1001E600567557E0755839755900755A06D0031279
:1001F6001BE674062532F532E43531F531FE74001E
:100206002532F974FC3EFA7B01C0038B567557E024
:10021600755814755900755A06D003121BE67406F4
:100226002532F532E43531F531FE74002532F974A4
:10023600FC3EFA7B01C0038B567557E07558467530
:100246005900755A06D003121BE674062532F5329C
:10025600E43531F5310205DD7F13121DE7753100F6
:1002660075321D749312000E8F3F75381D75390057
:10027600753600753705D3E5399418E538941D5061
:1002860034E53FB4510E7B007A007940AD39AC3885
:10029600FF1214E274002537F58274FC3536F583B7
:1002A600E540F00539E539700205380537E5377060
:1002B600C5053680C17F93121DE70205DD75310045
:1002C60075320690FC047480F0E4A3F090F405E027
:1002D60090E038F0E0147071121E1930B31B755699
:1002E600017557F4755806755900755A067B017ADB
:1002F600E07914121BE60205DD90FC057401F0029C
:1003060003D075310075320690FC047480F0E4A3C6
:10031600F0753507AF35FEC3E53D9FF534E53C9EE8
:10032600F53390E038E014702074002FF974F43E31
:10033600FA7B01AF34AE33121A435004E40204C20E
:1003460090FC05740CF00205DD90FC057403F002C8
:1003560005DD75310075320690FC047480F0E4A367
:10036600F090E038E014705CE4FFFE20B411C2B2F5
:10037600D2B1D2B20FBF00010EEF640A4E70EC305C
:10038600B43A90E6017403F07F647E00121E079073
:10039600E0B7E0FF120E127EE07F697CE07DB812C6
:1003A60018B27EE07FB8AD1CAC1B12183F50051288
:1003B6000B4E801690FC05740EF0800E90FC0574B2
:1003C6000DF0800690FC057403F0E490E038F0022E
:1003D60005DDE4F531F5327F02121B250205DDE469
:1003E600FF120E12121126E4FF1219EAE4FF800230
:1003F6007F01121B25121E190205DD7531007532AB
:100406000690FC047480F0E4A3F090F405E0F53E59
:10041600E4F511E53E64016004E53E703290E0B11A
:10042600E0FEA3E054F064607003EE6411600280A5
:100436007290E037E070028058E5116401600AE5C9
:1004460011700C121C8CEF6006853E110205DD80D2
:100456005275310075320690FC0474B2F0A3E511B2
:10046600F00205DD75310075320690FC047480F0EB
:10047600E4A3F090F405E0F53EFF1219EAEF24F14B
:10048600600F1460152410701AE4F531F532020578
:10049600DD90FC05740FF00205DD90FC057410F08C
:1004A6000205DD90FC057401F00205DD753100756D
:1004B600320690FC0474B5F090E0B6E090FC05F0CE
:1004C6000205DD75310075320690FC0474B6F0A2A3
:1004D60080E43325E0FFA281E4334FA3F00205DD7B
:1004E600853C31853D3290FC0474B7F0753505C303
:1004F600E53D9535F534E53C9400F5337400253536
:10050600F582E434F4F583E0648870030205DDAF18
:10051600357E0074002FF9EE34F4FA7B01C003C077
:100526000174002FF9EE34FC8B58F559895A85343D
:100536005BD001D003121A950205DD7531007532C4
:100546000590FC0474A5F01200128F3F7B007A0020
:100556007940E4FDFC1214E290E036E0FF0532E556
:1005660032AC3170020531142400F58274FC3CF57E
:1005760083EFF090E0B7E0FF0532E532AC31700270
:100586000531142400F58274FC3CF583EFF0053246
:10059600E532AE3170020531142400F58274FC3E5A
:1005A600F583E540F090E6017403F07F647E001267
:1005B6001E07802375310075320690FC047480F0A6
:1005C600C3E53D9405E53C94005006A37407F0800E
:1005D6000690FC057406F090F404E0B48004A3E0F1
:1005E600701290F404E06405600FE06407600AE0AE
:1005F60064096005E490E038F0E5324531602CE5A9
:1006060032FD90FC00F0E531FFA3F090F402E0909B
:10061600FC02F090F403E090FC03F090E69CEFF00F
:1006260000000090E69DEDF000000090E6957480D5
:04063600F0000000D0
:01063A00229D
:02004100D322C8
:0800030090E6BAE0F51DD322DE
:101ECA0090E740E51DF0E490E68AF090E68B04F096
:021EDA00D32211
:08002B0090E6BAE0F51AD322B9
:101EDC0090E740E51AF0E490E68AF090E68B04F087
:021EEC00D322FF
:101D990090E6B9E0242F600D04701990E604E0FF85
:101DA900430780800890E604E0FF53077F000000A6
:071DB900EFF08002D322C30A
:011DC0002200
:101E3100C0E0C083C082D2015391EF90E65D74018E
:081E4100F0D082D083D0E03222
:101E7800C0E0C083C0825391EF90E65D7404F0D057
:061E880082D083D0E0329D
:101E8E00C0E0C083C0825391EF90E65D7402F0D043
:061E9E0082D083D0E03287
:101C2000C0E0C083C08285120D85130E850E8285AB
:101C30000D83A37402F085090F850A108510828533
:101C40000F83A37407F05391EF90E65D7410F0D00A
:061C500082D083D0E032D7
:101E4900C0E0C083C082D2035391EF90E65D74086D
:081E5900F0D082D083D0E0320A
:101BA900C0E0C083C08290E680E030E72085090D5F
:101BB900850A0E850E82850D83A37402F085120FA6
:101BC900851310851082850F83A37407F05391EF55
:0D1BD90090E65D7420F0D082D083D0E03221
:101EB700000102020303040405050300000000C03B
:031EC700C2000056
:060F6B0001110001080065
:03000B000212BC22
:1012BC00C0E0C0F0C083C082C0D075D000C000C0F8
:0D12CC0001C002C003C004C005C006C00779
:1012D90078217C007D007BFF7A1E79C17E007F0525
:1012E90012070B90E0B6E0F526C204752700E50861
:1012F900600415088056750805E5117004C204805C
:1013090043A280308101B3500B3081047F008030CB
:101319007F01802C30B415755800755900755A2114
:10132900755B057B007A007921121A95E523540132
:10133900F527701090E0B6E060047F0080027F011D
:0C1349008F26D204300405AF261219EAEA
:10135500D007D006D005D004D003D002D001D000EC
:0B136500D0D0D082D083D0F0D0E03296
:100CE50078567CE17D017BFF7A1E79C67E007F0404
:100CF50012070BC203C200D202C201121DC1121E8D
:100D050061121620750B10750C00751410751512EF
:100D1500750910750A1C75121075137085120F85EB
:100D250013107516107517B412001290E154EFF0F8
:100D35007B017AE17955E4FDFC1214E290E155E07E
:100D4500FF90E036F0E490E0B7F0EF64C26059EF51
:100D550064C06054E490E15AF090E15AE0FFC39416
:100D650004504A74562FF582E434E1F583E0FF60C0
:100D75003C120E127EE07F697CE07DB81218B27ECF
:100D8500E07FB8AD1CAC1B12183F501490E15AE03F
:100D95002456F582E434E1F583E090E0B7F0800D68
:100DA50090E15AE004F080B1E4FF120E1212112610
:100DB500D2E843D82090E668E04409F090E65CE08C
:100DC500443DF012001290E154EFF07B017AE17995
:100DD50055E4FDFC1214E290E155E064C26007E4BD
:100DE50090E0B6F0C2B57F01121B25D2AFD28C536D
:100DF5008EF8C203C2AF120056D2AF3001051209F8
:0D0E050026C2013003EEC203121D1A80E761
:0B00460090E50DE030E402C322D3225D
:1009260090E6B9E070030209EB147003020A602432
:10093600FE7003020ADB24FB70030209E514700350
:100946000209DF1470030209D31470030209D924C3
:10095600056003020B3A1200414003020B4690E683
:10096600BBE024FE602714603E24FD60111460275E
:1009760024067056E50B90E6B3F0E50C80421200B3
:10098600465044E51490E6B3F0E5158033E50D9046
:10099600E6B3F0E50E802985120F851310E50F905A
:1009A600E6B3F0E510801990E6BAE0FF121D46AAFC
:1009B60006A9077B01EA494B600DEE90E6B3F0EF1E
:1009C60090E6B4F0020B46020B35020B35121EDC24
:1009D600020B4612002B020B46120003020B4612B4
:1009E6001ECA020B4690E6B8E0247F601514601913
:1009F60024027063A200E43325E0FFA202E4334F31
:100A06008041E490E740F0803F90E6BCE0547EFFF2
:100A16007E00E0D394807C0040047D0180027D004E
:100A2600EC4EFEED4F24B7F582741E3EF583E4933B
:100A3600FF3395E0FEEF24A1FFEE34E68F82F583C7
:100A4600E0540190E740F0E4A3F090E68AF090E6E7
:100A56008B7402F0020B46020B3590E6B8E024FEDA
:100A6600601624026003020B4690E6BAE0B4010564
:100A7600C200020B46020B3590E6BAE0705590E6CE
:100A8600BCE0547EFF7E00E0D394807C0040047D71
:100A96000180027D00EC4EFEED4F24B7F582741EF8
:100AA6003EF583E493FF3395E0FEEF24A1FFEE3499
:100AB600E68F82F583E054FEF090E6BCE0548013A6
:100AC6001313541FFFE0540F2F90E683F0E04420E9
:100AD600F0806D805A90E6B8E024FE60192402701A
:100AE6004E90E6BAE0B40104D200805490E6BAE033
:100AF6006402604C803990E6BCE0547EFF7E00E0E4
:100B0600D394807C0040047D0180027D00EC4EFE83
:100B1600ED4F24B7F582741E3EF583E493FF3395BB
:100B2600E0FEEF24A1FFEE34E68F82F583800D9080
:100B3600E6A08008121D99500790E6A0E04401F057
:070B460090E6A0E04480F0FE
:010B4D002285
:03003300020FFBBE
:040FFB0053D8EF32A6
:100F71006080E0D4292E43C9A2D87C013D3654A11A
:100F8100ECF0061362A705F3C0C7738C98932BD9B5
:100F9100BC4C82CA1E9B573CFDD4E01667426F18B9
:100FA1008A17E512BE4EC4D6DA9EDE49A0FBF58E45
:100FB100BB2FEE7AA968799115B2073F94C21089C7
:100FC1000B225F21807F5D9A5A903227353ECCE714
:100FD100BFF79703FF1930B348A5B5D1D75E922A61
:100FE100AC56AAC64FB838D296A47DB676FC6BE251
:040FF1009C7404F1F7
:081370008C468D47AB07AA066D
:10137800E4F548F549C3E5499547E5466480F8E54D
:1013880048648098400302141FE54925E0FFE548BA
:1013980033FE74D42FF58274E03EF583E0FF7E00BF
:1013A800AC46AD471207BD8C4A8D4BE54925E0FF99
:1013B800E54833FE74D52FF58274E03EF583E0FFEF
:1013C8007E00AC46AD471207BD8C4C8D4DE54B6594
:1013D8004D7004E54A654C6030EB254BF582EA35E3
:1013E8004AF583E0F9EB254DF582EA354CF583E0C3
:1013F800FFEB254BF582EA354AF583EFF0EB254DF7
:10140800F582EA354CF583E9F00549E549600302C0
:0B141800137D054802137D7E007F015C
:0114230022A6
:0C1424008E468F478C488D498A4A8B4BBE
:10143000E54745466006E54945487004E4FEFF225D
:10144000E4F54CF54DC3E54D954BE54A6480F8E570
:101450004C648098507BE4F54EF54FE549254DF5F9
:1014600082E548354CF583E4F0C3E54F954BE54AFA
:101470006480F8E54E6480985049E54F254D24D4AA
:10148000F582E434E0F583E0FFE547254FF582E59A
:1014900046354EF583E0FEEF8EF0A4FFE549254D7D
:1014A000F582E548354CF583E02FFFE549254DF5FC
:1014B00082E548354CF583EFF0054FE54F70AA05FE
:1014C0004E80A6054DE54D6003021445054C0214FF
:0514D000457E007F01D4
:0114D50022F4
:101CEC00120731FF90000312074A12077790000386
:101CFC00EF12078990000212074AFF9000011207A9
:0E1D0C004A900002120789900001EF02078939
:0811F5008E468F478C488D499E
:1011FD00E4F54AF54BE549AE487802CEA2E713CEA9
:10120D0013D8F8FFC3E54B9FEE6480F8E54A648080
:10121D009840030212B7E54BAE4A7802C333CE3382
:10122D00CED8F92547FFEE3546FAA9077B018B4C41
:10123D00F54D894E74D5254BF582E434E0F583E008
:10124D00541FFFE48F52F551F550F54F121CECABC6
:10125D004CAA4DA94E120819C374209552F9F812D3
:10126D000806C004C005C006C007A94E120819A97A
:10127D0052A8011207F3D003D002D001D000EF4BDA
:10128D00FFEE4AFEED49FDEC48FCAB4CAA4DA94ED4
:10129D00120839AB4CAA4DA94E121CEC054BE54B6F
:0E12AD006003021202054A0212027E007F0157
:0112BB002210
:101C5600D3ED9410EC64809480402AED1D70011C35
:101C6600142FF582EE3CF583E0FB547F24D4F582F5
:101C7600E434E0F583E0F9540F2FF582E43EF58372
:051C8600E06BF080CBD3
:011C8B002236
:101D1A0090E682E030E004E020E60B90E682E030D4
:101D2A00E119E030E71590E680E04401F07F147E87
:0C1D3A0000121ADF90E680E054FEF02258
:101CBD0030060990E680E0440AF0800790E680E067
:101CCD004408F07FDC7E05121ADF90E65D74FFF0AC
:0F1CDD0090E65FF05391EF90E680E054F7F0222D
:101ADF008E5A8F5B90E600E054187012E55B24017C
:101AEF00FFE4355AC313F55AEF13F55B801590E6F3
:101AFF0000E05418FFBF100BE55B25E0F55BE55ADE
:101B0F0033F55AE55B155BAE5A7002155A4E6005F8
:061B1F00121EEE80EE2212
:06157B008C548D55AE07F3
:10158100EB70037F012290E678E020E6F990E6789F
:101591007480F0EE25E0440190E679F090E678E081
:1015A10030E0F990E678E020E26BE030E167BB01E2
:1015B1000790E678E04420F090E679E0F5561BEBE1
:1015C100603090E678E030E0F990E678E020E2459E
:1015D100BB010790E678E04420F090E679E0FF0552
:1015E10055E555AC547002055414F5828C83EFF027
:1015F10080CC90E678E030E0F990E678E020E215E2
:1016010090E678E04440F090E679E0855582855493
:0E16110083F07F012290E678E04440F07F00F5
:01161F0022A8
:1019220090E678E020E6F990E6787480F0EF25E022
:1019320090E679F090E678E030E0F990E678E02001
:10194200E23AE030E136EBD3940040260DEDAE04EE
:1019520070010C14F5828E83E090E679F01B90E61C
:1019620078E030E0F990E678E020E210E020E1D67D
:10197200800A90E678E04440F07F012290E678E029
:051982004440F07F006D
:01198700223D
:021D4600A907EB
:101D4800AE16AF178F828E83A3E064037017AD01C0
:101D580019ED7001228F828E83E07C002FFDEC3E0E
:081D6800FEAF0580DFE4FEFF81
:011D70002250
:101EEE007400F58690FDA57C05A3E582458370F907
:011EFE0022C1
:030000000216B431
:0C16B400787FE4F6D8FD75815D0216FB1E
:10063B00E709F608DFFA8046E709F208DFFA803EA1
:10064B0088828C83E709F0A3DFFA8032E309F6088E
:10065B00DFFA8078E309F208DFFA807088828C83F6
:10066B00E309F0A3DFFA806489828A83E0A3F608AA
:10067B00DFFA805889828A83E0A3F208DFFA804C84
:10068B0080D280FA80C680D4806980F2803380105B
:10069B0080A680EA809A80A880DA80E280CA8033C4
:1006AB0089828A83ECFAE493A3C8C582C8CCC5833C
:1006BB00CCF0A3C8C582C8CCC583CCDFE9DEE7800C
:1006CB000D89828A83E493A3F608DFF9ECFAA9F08B
:1006DB00EDFB2289828A83ECFAE0A3C8C582C8CCE1
:1006EB00C583CCF0A3C8C582C8CCC583CCDFEADEFA
:1006FB00E880DB89828A83E493A3F208DFF980CC5C
:10070B0088F0EF60010E4E60C388F0ED2402B40454
:10071B000050B9F582EB2402B4040050AF232345FB
:06072B00822390068B738F
:10073100BB010689828A83E0225002E722BBFE02C6
:09074100E32289828A83E49322F9
:10074A00BB010CE58229F582E5833AF583E0225064
:10075A0006E92582F8E622BBFE06E92582F8E222AE
:0D076A00E58229F582E5833AF583E49322C8
:10077700BB010689828A83F0225002F722BBFE0161
:02078700F3225B
:10078900F8BB010DE58229F582E5833AF583E8F0A6
:10079900225006E92582C8F622BBFE05E92582C852
:0207A900F2223A
:1007AB00EF8DF0A4A8F0CF8CF0A428CE8DF0A42E62
:0207BB00FE221C
:1007BD00C2D5EC30E709B2D5E4C39DFDE49CFCEE57
:1007CD0030E715B2D5E4C39FFFE49EFE120885C342
:1007DD00E49DFDE49CFC800312088530D507C3E43D
:0607ED009FFFE49EFE22C6
:1007F300E8600FECC313FCED13FDEE13FEEF13FFE4
:03080300D8F12207
:10080600E8600FEFC333FFEE33FEED33FDEC33FC50
:03081600D8F122F4
:10081900BB010789828A830208E65005E9F80208C4
:10082900DABBFE05E9F80208F289828A830208FE2A
:10083900BB010789828A830208535005E9F8020936
:0A0849000EBBFE05E9F802091A22B1
:0C085300ECF0A3EDF0A3EEF0A3EFF02218
:10085F00D083D082F8E4937012740193700DA3A328
:10086F0093F8740193F5828883E47374029368603C
:06087F00EFA3A3A380DF3C
:1016C000020CE5E493A3F8E493A34003F68001F24F
:1016D00008DFF48029E493A3F85407240CC8C3332B
:1016E000C4540F4420C8834004F456800146F6DFFA
:1016F000E4800B0102040810204080900F3CE47E3F
:10170000019360BCA3FF543F30E509541FFEE493EE
:10171000A360010ECF54C025E060A840B8E493A3B5
:10172000FAE493A3F8E493A3C8C582C8CAC583CAE0
:10173000F0A3C8C582C8CAC583CADFE9DEE780BE98
:010FF50000FB
:10088500BC000BBE0029EF8DF084FFADF022E4CC57
:10089500F875F008EF2FFFEE33FEEC33FCEE9DEC20
:1008A500984005FCEE9DFE0FD5F0E9E4CEFD22ED66
:1008B500F8F5F0EE8420D21CFEADF075F008EF2FB0
:1008C500FFED33FD4007985006D5F0F222C398FDA1
:0508D5000FD5F0EA223E
:0C08DA00E6FC08E6FD08E6FE08E6FF224A
:0C08E600E0FCA3E0FDA3E0FEA3E0FF2285
:0C08F200E2FC08E2FD08E2FE08E2FF2242
:1008FE00E493FC740193FD740293FE740393FF2240
:0C090E00ECF608EDF608EEF608EFF62215
:0C091A00ECF208EDF208EEF208EFF22219
:00000001FF

View File

@@ -1,10 +1,10 @@
#
# $Id: USB_FW.hex 10085 2011-11-13 14:33:46Z dima $
# $Id: USB_FW.hex 10401 2012-02-15 15:30:24Z dima $
#
:03004300021E009A
:03005300021E008A
:101E0000021E3000021E8D00021E7700021E4800D6
:081E1000021C1B00021BA400D0
:03004300021F0099
:03005300021F0089
:101F0000021E3400021E9100021E7B00021E4C00C5
:081F1000021C1F00021BA800C7
:101000001201000200000040AAAAAAAAAAAA01028C
:1010100003010A0600020000004001000902370037
:10102000020100C0000904000002FFFFFF040705E1
@@ -24,197 +24,199 @@
:101100004D0061006E00610067006D0065006E00BB
:101110007400500072006F0063006500730073007C
:061120006F0072000000E8
:050FF7000300000000F2
:1011ED0041E0370041E0BB0042E0B6000041E0388D
:1011FD0000021BE08A0218E07E43E0B800000052B6
:10120D00E039393733343A393936344D50202020CE
:04121D00202020006D
:101D96008B508A518952E5551555AE54700215542B
:101DA6004E6014AB500552E552AA5170020551140B
:081DB600F9ED12077180DF2234
:101BE1008B508A518952E5571557AE5670021556DA
:101BF1004E6026AB530555E555AA547002055414A1
:101C0100F912072BFFAB500552E552AA517002059C
:0A1C11005114F9EF12077180CD2283
:101D6C00C2B5C2B7E490E670F075B5E653B5EE4374
:101D7C00B28053B2F4A2B53390E0BBF0C2B3C2B69A
:0A1D8C007F327E00121DECD2B62259
:101E6000538EF75389FB5389F74389015389FDE466
:071E7000F58AF58CD2A922CE
:1017B3008C428D43AA06A9077553018A548955752E
:1017C300560075571C7B017AE07951121BE190E0BA
:1017D30051E0B4C20374C0F090E069E0FCA3E0FD03
:1017E300A3E0FEA3E064D1FFEE648DFEED644CFD47
:1017F300EC6449FC90E06912084D7EE07F517D1C4A
:101803007C001213607EE07F517B1C7A00AD43ACF9
:10181300421214147D1C7C00AF43AE421211267D8C
:0A1823001C7C00AF43AE42021C51D2
:0818A5008E428F438C448D45F7
:1018AD00C20712001290E160EFF0BF5004D2078022
:1018BD0057E490E161F0A3F090E161E0FEA3E0FF59
:1018CD00C39410EE648094805030E5452FF582E589
:1018DD00443EF583E0FF90E161E0FCA3E02543F594
:1018ED0082E5423CF583E0B5071090E162E004F03B
:1018FD0070C690E161E004F080BE90E161E070049B
:0A190D00A3E064107002D207A207E5
:0119170022AD
:020DE4008F3F3F
:100DE6001200128F40E4F544F545AD45AC441214AB
:100DF600CA746E2545F582E434E0F583E541F005D5
:100E060045E54570020544C39408E5446480948032
:100E160040D8E53F600490E06EF090E06EE0B4C02C
:100E260008754200754308800675421D7543367580
:100E36004400754508C3E5459410E54464809480F4
:100E460050231214C6746E2545F582E434E0F5830A
:100E5600E541F00545E545700205440543E5437067
:100E6600D4054280D07541FF75421D7543197544FE
:100E760000754510C3E545942CE544648094805084
:100E860033E540B4510E7B007A007941AD43AC4264
:100E9600FF1214D2746E2545F582E434E0F583E53D
:100EA60041F00545E545700205440543E54370C438
:100EB600054280C075421D75433EE4F541F544F593
:100EC60045C3E5459406E54464809480502FE5408B
:100ED600B4510A90E06EE0B4C2031214C6744B25F6
:100EE60045F582E434E0F583E541F00545E54570D6
:100EF6000205440543E54370C8054280C490E06E90
:070F0600E0B4C20374C0F067
:010F0D0022C1
:0A197E008E428F438B448A45894650
:101988007E00E5432DF54BEE3542F54A1200128FE5
:1019980047E5476451600BC3E5439410E542940062
:1019A8005035854248854349C3E549954BE54895F7
:1019B8004A5024AB44AA45A946AD49AC48AF4712A2
:1019C80017300549E5497002054874012546F54672
:0719D800E43545F54580D11F
:0119DF0022E5
:06182D008B3F8A40894157
:10183300D2067553017554E075556E75560075578C
:10184300107B017AE0799A121BE1E5412410F9E457
:101853003540853F53F554895575560075570C7BB4
:10186300017AE079AA121BE17EE07F9A7CE07D1A7F
:101873001217B37EE07F1AE541241CF9E43540FCDE
:10188300AD011218A55016AB3FE5412410F9E4351C
:1018930040FA7D1C7F197E1D12197E8002C206A2AA
:0118A300063E
:0118A4002221
:100F0E007F03121D41EF2402FFE43EA907753F0146
:100F1E00F540894190E06FE0FFE50C2408F582E48E
:100F2E00350BF583EFF090E070E0FFE50C2409F54A
:100F3E0082E4350BF583EFF090E071E0FFE50C24D1
:100F4E000AF582E4350BF583EFF090E072E0FFE5F1
:100F5E000C240BF582E4350BF583EFF090E073E093
:100F6E00FFE50C240CF582E4350BF583EFF090E0F1
:100F7E0074E0FFE50C240DF582E4350BF583EFF0FC
:100F8E007F087E00E4FDEDC394085028746E2FF5A3
:100F9E0082E434E0F583E0FCAB3FAA40A94175F052
:100FAE0002EDA4F58285F083EC1207830D0FBF00CE
:100FBE00010E80D2E5192404F582E43518F583E09C
:0E0FCE0030E0047F0180027F0090E037EFF0FA
:010FDC0022F2
:101B200090E071E02FFFE50C240AF582E4350BF517
:101B300083EFF0E50C240BF582E4350BF583E0FE32
:101B4000E50C240AF582E4350BF583E0FDEDFF900A
:101B5000E0B6EEF0A3EFF0D206121CB890E680E0FB
:041B600054F7F02224
:1016100090E600E054E74410F090E60174C0F090CA
:10162000E6107420F000000090E611F00000009039
:10163000E6047480F0000000740FF0000000E4F095
:1016400000000090E6187410F0000000E490E61925
:10165000F000000090E61A7408F0000000E490E644
:101660001BF000000090E6497482F0000000F000DA
:10167000000090E6247402F0000000E490E625F0FB
:1016800000000090E6957480F0000000F00000007B
:1016900043AF017B017AE07914755400755506E477
:0416A000FD021D9694
:061DE600D2877F0A7E0097
:101DEC007C007D181207A5EF1FAC0670011E4C700D
:021DFC00F622CD
:0A1A39008E3F8F408B418A428943A3
:101A4300E4F544F545C3E5459540E544953F503BF2
:101A5300AB41AA42A943854582854483120744FFCB
:101A6300E4FBFAC2B2EF1392B7EFC313FFD2B20B88
:101A7300BB00010AEB64084A70E9C2B220B002C39A
:0C1A8300220545E54570BE054480BAD33D
:011A8F002234
:101E180090E60174C0F0C2B67F967E00121DECD227
:081E2800B67F327E00021DECC2
:101EA300D2B1121DE6C2B1121DE8C2877F0A7E00BD
:031EB300021DEC21
:021B6400AB07CD
:101B6600E4F9FAEBC413131354011392B17F027E06
:101B760000121DECD2877F057E00121DECE925E0E0
:101B8600FFA283E4334FF97F057E00121DECEB259F
:0D1B9600E0FBC287121DE80ABA08C8AF01C3
:011BA300221F
:061A90008B538A548955B6
:101A9600A2AFE433F55B121EA3E4F55AE55AC395EB
:101AA600595027AB53AA54A955855A8275830012FB
:101AB6000744FF121B64AB56AA57A958855A82756C
:101AC6008300EF120783055A80D2120036E55B24A5
:031AD600FF92AFCD
:011AD90022EA
:0B003600C2B1121DE8121DE6D2B1227B
:100FDD00753F8F8F40755600755700755849755977
:0A0FED00027B007A00793F021A909F
:101C8700783F7C007D007BFF7A0F79F77E007F0528
:101C970012070530B41575560075570075583F750E
:101CA70059057B007A00793F121A90E5415401FFEC
:011CB700220A
:051EF1000300000000E9
:1011F50041E0370041E0B70042E0B2000041E0388D
:1012050000021BE0860218E07A43E0B40000004EBD
:10121500E03931303339354D502020202020200051
:101D9A008B518A528953E5561556AE557002155520
:101DAA004E6014AB510553E553AA52700205521402
:081DBA00F9ED12077180DF2230
:101BE5008B518A528953E5581558AE5770021557CF
:101BF5004E6026AB540556E556AA55700205551498
:101C0500F912072BFFAB510553E553AA5270020594
:0A1C15005214F9EF12077180CD227E
:101D7000C2B5C2B7E490E670F075B5E653B5EE4370
:101D8000B28053B2F4A2B53390E0B7F0C2B3C2B69A
:0A1D90007F327E00121E0AD2B62236
:101E6400538EF75389FB5389F74389015389FDE462
:071E7400F58AF58CD2A922CA
:1017B7008C428D43AA06A9077554018A5589567527
:1017C700570075581C7B017AE0794D121BE590E0B4
:1017D7004DE0B4C20374C0F090E065E0FCA3E0FD07
:1017E700A3E0FEA3E064D1FFEE648DFEED644CFD43
:1017F700EC6449FC90E06512084D7EE07F4D7D1C4E
:101807007C001213647EE07F4D7B1C7A00AD43ACF5
:10181700421214187D1C7C00AF43AE42120F367D76
:0A1827001C7C00AF43AE42021C55CA
:0818A9008E428F438C448D45F3
:1018B100C20712001290E15CEFF0BF5004D2078022
:1018C10057E490E15DF0A3F090E15DE0FEA3E0FF5D
:1018D100C39410EE648094805030E5452FF582E585
:1018E100443EF583E0FF90E15DE0FCA3E02543F594
:1018F10082E5423CF583E0B5071090E15EE004F03B
:1019010070C690E15DE004F080BE90E15DE070049E
:0A191100A3E064107002D207A207E1
:01191B0022A9
:020E0C008F3F16
:100E0E001200128F40E4F544F545AD45AC44121482
:100E1E00CE746A2545F582E434E0F583E541F005AC
:100E2E0045E54570020544C39408E544648094800A
:100E3E0040D8E53F600490E06AF090E06AE0B4C00C
:100E4E0008754200754308800675421D7543367558
:100E5E004400754508C3E5459410E54464809480CC
:100E6E0050231214CA746A2545F582E434E0F583E2
:100E7E00E541F00545E545700205440543E543703F
:100E8E00D4054280D07541FF75421D7543197544D6
:100E9E0000754510C3E545942CE54464809480505C
:100EAE0033E540B4510E7B007A007941AD43AC423C
:100EBE00FF1214D6746A2545F582E434E0F583E515
:100ECE0041F00545E545700205440543E54370C410
:100EDE00054280C075421D75433EE4F541F544F56B
:100EEE0045C3E5459406E54464809480502FE54063
:100EFE00B4510A90E06AE0B4C2031214CA744725D2
:100F0E0045F582E434E0F583E541F00545E54570AD
:100F1E000205440543E54370C8054280C490E06A6B
:070F2E00E0B4C20374C0F03F
:010F35002299
:0A1982008E428F438B448A4589464C
:10198C007E00E5432DF54BEE3542F54A1200128FE1
:10199C0047E5476451600BC3E5439410E54294005E
:1019AC005035854248854349C3E549954BE54895F3
:1019BC004A5024AB44AA45A946AD49AC48AF47129E
:1019CC0017340549E5497002054874012546F5466A
:0719DC00E43545F54580D11B
:0119E30022E1
:061831008B3F8A40894153
:10183700D2067554017555E075566A755700755887
:10184700107B017AE07996121BE5E5412410F9E453
:101857003540853F54F555895675570075580C7BAB
:10186700017AE079A6121BE57EE07F967CE07D1A7F
:101877001217B77EE07F1AE541241CF9E43540FCD6
:10188700AD011218A95016AB3FE5412410F9E43514
:1018970040FA7D1C7F197E1D1219828002C206A2A2
:0118A700063A
:0118A800221D
:101126007F03121D45EF2402FFE43EA907753F0128
:10113600F540894190E06BE0FFE50C2408F582E478
:10114600350BF583EFF090E06CE0FFE50C2409F534
:1011560082E4350BF583EFF090E06DE0FFE50C24BB
:101166000AF582E4350BF583EFF090E06EE0FFE5DB
:101176000C240BF582E4350BF583EFF090E06FE07D
:10118600FFE50C240CF582E4350BF583EFF090E0D7
:1011960070E0FFE50C240DF582E4350BF583EFF0E6
:1011A6007F087E00E4FDEDC394085028746A2FF58D
:1011B60082E434E0F583E0FCAB3FAA40A94175F038
:1011C60002EDA4F58285F083EC1207830D0FBF00B4
:1011D600010E80D2E5192404F582E43518F583E082
:0E11E60030E0047F0180027F0090E037EFF0E0
:0111F40022D8
:101B240090E06DE02FFFE50C240AF582E4350BF517
:101B340083EFF0E50C240BF582E4350BF583E0FE2E
:101B4400E50C240AF582E4350BF583E0FDEDFF9006
:101B5400E0B2EEF0A3EFF0D206121CBC90E680E0F7
:041B640054F7F02220
:1016140090E600E054E74410F090E60174C0F090C6
:10162400E6107420F000000090E611F00000009035
:10163400E6047480F0000000740FF0000000E4F091
:1016440000000090E6187410F0000000E490E61921
:10165400F000000090E61A7408F0000000E490E640
:101664001BF000000090E6497482F0000000F000D6
:10167400000090E6247402F0000000E490E625F0F7
:1016840000000090E6957480F0000000F000000077
:1016940043AF017B017AE07914755500755606E471
:0416A400FD021D9A8C
:061E0400D2877F0A7E0078
:101E0A007C007D181207A5EF1FAC0670011E4C70EE
:021E1A00F622AE
:0A1A3D008E3F8F408B418A4289439F
:101A4700E4F544F545C3E5459540E544953F503BEE
:101A5700AB41AA42A943854582854483120744FFC7
:101A6700E4FBFAC2B2EF1392B7EFC313FFD2B20B84
:101A7700BB00010AEB64084A70E9C2B220B002C396
:0C1A8700220545E54570BE054480BAD339
:011A93002230
:101E1C0090E60174C0F0C2B67F967E00121E0AD204
:081E2C00B67F327E00021E0A9F
:101EA700D2B1121E04C2B1121E06C2877F0A7E007B
:031EB700021E0AFE
:021B6800AB07C9
:101B6A00E4F9FAEBC413131354011392B17F027E02
:101B7A0000121E0AD2877F057E00121E0AE925E09E
:101B8A00FFA283E4334FF97F057E00121E0AEB257C
:0D1B9A00E0FBC287121E060ABA08C8AF01A0
:011BA700221B
:061A94008B538A548955B2
:101A9A00A2AFE433F55B121EA7E4F55AE55AC395E3
:101AAA00595027AB53AA54A955855A8275830012F7
:101ABA000744FF121B68AB56AA57A958855A827564
:101ACA008300EF120783055A80D2120036E55B24A1
:031ADA00FF92AFC9
:011ADD0022E6
:0B003600C2B1121E06121E04D2B1223D
:101DEA00753F8F8F4075560075570075584975595C
:0A1DFA00027B007A00793F021A9480
:101C8B00783F7C007D007BFF7A1E79F17E007F051B
:101C9B0012070530B41575560075570075583F750A
:101CAB0059057B007A00793F121A94E5415401FFE4
:011CBB002206
:100B4800753F007540007541007543017544E075B7
:100B580045007546017547E0754808E4FFF54F7B89
:100B6800017AE07900F554755508FD121D96AB43DE
:100B7800AA44A9457401120771E4F54EE54EC45420
:100B8800F0AB43AA44A94590000112078385465655
:100B9800854757854858755908121A90AB46AA4791
:100BA800A948900002120744FF530770EF24E06041
:100BB8001B24F0602A24F0603C24F0604E2440702E
:100BC80060753F018518408519418024E519240185
:100BD800FDE43518A905753F01F54089418011E507
:100BE800192402FDE43518A905753F01F54089412E
:100BF800754F088035E5192403FDE43518A90575F6
:100C08003F01F5408941754F04801FE5192405FD12
:100C1800E43518A905753F01F5408941754F98805D
:100C280009753F00754000754100E5404541453F65
:100C38006022AB3FAA40A94112072BFED3954F4033
:100C480006AD4FAE0580008E4212072BC3954212A7
:100C58000771800BEF70047E0180027E008E427463
:100C680049254EF8A642054EE54EC39405500302A9
:100C78000B84AB43AA44A9457488120771AB43E5BA
:100C8800452401F9E43544FA755300755400755547
:100C980049755600755705121BE185465685475715
:0F0CA800854858755908AB43AA44A945021A90CC
:1019E0008F3F90E0B6E0FEA3E054F064607003EE39
:1019F000641160037F012290E037E070037F0F22C3
:101A0000E53F7003308108E53FB401062080037F85
:101A1000102290E0BBE0B53F037F0122E4F511D234
:101A200006121CB8AF3F90E0BBEFF024FF92B590D8
:091A3000E680E054F7F07F00228B
:100B580045007546017547E0754808E4F54FFFF50F
:100B6800507B017AE07900F555755608FD121D9AFB
:100B7800AB43AA44A9457401120771E4F54EE54E4A
:100B8800C454F0AB43AA44A94590000112078385D9
:100B98004656854757854858755908121A94AB46E2
:100BA800AA47A948900002120744FE5403FFEE54D6
:100BB80070F54F24E0602924F0604B24F0605D2438
:100BC800F0606F24406003020C50753F01851840A7
:100BD800851941EF24FE600624FE703B801C801FAF
:100BE800E5192401FDE43518A905753F01F540898B
:100BF80041EF24FC60092402700A75500280527586
:100C08005006804D8011E5192402FDE43518A90528
:100C1800753F01F54089417550088035E519240371
:100C2800FDE43518A905753F01F540894175500463
:100C3800801FE5192405FDE43518A905753F01F560
:100C48004089417550988009753F0075400075418D
:100C580000E5404541453F6022AB3FAA40A941120B
:100C6800072BFED395504006AD50AE0580008E424E
:100C780012072BC39542120771800CE54F70047E52
:100C88000180027E008E427449254EF8A642054E28
:100C9800E54EC394055003020B86AB43AA44A9450D
:100CA8007488120771AB43E5452401F9E43544FA29
:100CB80075540075550075564975570075580512D5
:100CC8001BE5854656854757854858755908AB43EF
:070CD800AA44A945021A9489
:1019E4008F3F90E0B2E0FEA3E054F064607003EE39
:1019F400641160037F012290E037E070037F0F22BF
:101A0400E53F7003308108E53FB401062080037F81
:101A1400102290E0B7E0B53F037F0122E4F511D234
:101A240006121CBCAF3F90E0B7EFF024FF92B590D4
:091A3400E680E054F7F07F002287
:04000E0090FC04F06E
:1000120090E678E0541824F06008240870087F50B5
:0800220080067F518002E4FF1B
:01002A0022B3
:0C14C600AD43AC427B007A007941AF409E
:0C14D2008F468C478D488B498A4A894B15
:1014DE00E4F54CF54D754E03FDF54FF550A2AF33C7
:1014EE00F551E54624AF600D047012754C00754D34
:1014FE00017D018008754C00754D02E4FDE54660E6
:10150E0051E54D454C604BE54790E0B8F0E548A3FA
:10151E00F074B82DF582E434E0AD82FCAB4DAF46ED
:10152E00121918754F008F507F0A7E00121ADAE5D5
:10153E0050454F60107CE07D6D7B01AF4612156B00
:10154E00754F008F5090E06DE0AB49AA4AA94B123F
:0C155E000771E55124FF92AFAE4FAF5073
:01156A00225E
:0C1730008F4C8C4D8D4E8B4F8A50895190
:10173C00E4F552F553755403FDF555F556A2AF3348
:10174C00F557E54C24AF600D0470127552007553BB
:10175C00027D018008755200755303E4FDE54C6071
:10176C003BE55345526035E54D90E0B8F0E54EA3AE
:10177C00F0AB4FAA50A95112072B90E0BAF074B8F5
:10178C002DF582E434E0AD82FCAB53AF4C1219184A
:10179C007555008F567F0A7E00121ADAE55724FF22
:0617AC0092AFAE55AF56EE
:0117B2002214
:0C14CA00AD43AC427B007A007941AF409A
:0C14D6008F468C478D488B498A4A894B11
:1014E200E4F54CF54D754E03FDF54FF550A2AF33C3
:1014F200F551E54624AF600D047012754C00754D30
:10150200017D018008754C00754D02E4FDE54660E1
:1015120051E54D454C604BE54790E0B4F0E548A3FA
:10152200F074B42DF582E434E0AD82FCAB4DAF46ED
:1015320012191C754F008F507F0A7E00121ADEE5C9
:1015420050454F60107CE07D697B01AF4612156FFC
:10155200754F008F5090E069E0AB49AA4AA94B123F
:0C1562000771E55124FF92AFAE4FAF506F
:01156E00225A
:0C1734008F4C8C4D8D4E8B4F8A5089518C
:10174000E4F552F553755403FDF555F556A2AF3344
:10175000F557E54C24AF600D0470127552007553B7
:10176000027D018008755200755303E4FDE54C606D
:101770003BE55345526035E54D90E0B4F0E54EA3AE
:10178000F0AB4FAA50A95112072B90E0B6F074B4F9
:101790002DF582E434E0AD82FCAB53AF4C12191C42
:1017A0007555008F567F0A7E00121ADEE55724FF1A
:0617B00092AFAE55AF56EA
:0117B6002210
:10005600E4F531F532F535F53AF53BF53CF53DE598
:10006600AA5484600302063490E694E0FE90E69576
:10007600E0FBEEF53AEBF53BC39405E53A94004018
@@ -224,67 +226,67 @@
:1000B6004732045A3404A23504B93604D63703D578
:1000C6004503E647000005B475310075320790FC1C
:1000D600047481F0A37414F0E4A3F00205D77F0F33
:1000E600120FDD75310075320690FC047480F0E461
:1000E600121DEA75310075320690FC047480F0E446
:1000F600A3F0753505F511FE74002535F9EE34F4D7
:10010600FA7B0112182D400690FC05740EF0E4FFF0
:10011600120DE47F8F0202B37F0E120FDD753100E0
:10010600FA7B01121831400690FC05740EF0E4FFEC
:10011600120E0C7F8F0202B37F0E121DEA7531009C
:10012600753205748E12000E8F3D7B007A00793E83
:10013600E4FDFC1214D2E53D64516019E53D6450BE
:10013600E4FDFC1214D6E53D64516019E53D6450BA
:10014600601375310075320690FC047480F0A37458
:100156000BF00205D790E0BCE0FF120DE474002519
:1001660032F974FC3531FA7B01C0038B537554E0C8
:1001760075556E75560075572CD003121BE1742CFD
:100156000BF00205D790E0B8E0FF120E0C740025F4
:1001660032F974FC3531FA7B01C0038B547555E0C6
:1001760075566A75570075582CD003121BE5742CFA
:100186002532F532E43531F5317F8E0202B3753111
:100196000075320790FC047491F090E678E090FCCC
:1001A60005F030B4047F0180027F0090FC06EFF07A
:1001B60074002532F974FC3531FA7B0175540075EB
:1001C6005512E4FD121D9674002532F974FC353182
:1001D600FA7B01C0038B537554E07555397556008B
:1001E600755706D003121BE174062532F532E43545
:1001B60074002532F974FC3531FA7B0175550075EA
:1001C6005612E4FD121D9A74002532F974FC35317D
:1001D600FA7B01C0038B547555E075563975570087
:1001E600755806D003121BE574062532F532E43540
:1001F60031F531FE74002532F974FC3EFA7B01C0FC
:10020600038B537554E0755514755600755706D013
:1002160003121BE174062532F532E43531F531FE61
:1002260074002532F974FC3EFA7B01C0038B5375CA
:1002360054E075554B755600755706D003121BE1F1
:10020600038B547555E0755614755700755806D00E
:1002160003121BE574062532F532E43531F531FE5D
:1002260074002532F974FC3EFA7B01C0038B5475C9
:1002360055E0755647755700755806D003121BE5ED
:1002460074062532F532E43531F5310205D77F13D0
:10025600120FDD75310075321D749312000E8F3D3D
:10025600121DEA75310075321D749312000E8F3D22
:1002660075381D753900753600753705D3E539942F
:1002760018E538941D5034E53DB4510E7B007A00E4
:10028600793EAD39AC38FF1214D274002537F582A9
:10028600793EAD39AC38FF1214D674002537F582A5
:1002960074FC3536F583E53EF00539E5397002051F
:1002A600380537E53770C5053680C17F93120FDDF7
:1002A600380537E53770C5053680C17F93121DEADC
:1002B6000205D775310075320690FC047480F0E4AF
:1002C600A3F090F405E090E038F0E014702A30B026
:1002D6001E121E187553017554F475550675560091
:1002E6007557067B017AE07914121BE10205D79057
:1002D6001E121E1C7554017555F475560675570089
:1002E6007558067B017AE07914121BE50205D79052
:1002F600FC057401F00203C08056753100753206A4
:1003060090FC047480F0E4A3F0753507AF35FEC3A6
:10031600E53B9FF534E53A9EF53390E038E01470FE
:100326002F20B00330B42074002FF974F43EFA7B0A
:1003360001AF34AE33121A395004E40204B290FC11
:1003360001AF34AE33121A3D5004E40204B290FC0D
:1003460005740CF00205D790FC057402F00205D77F
:1003560090FC057403F00205D775310075320690DE
:10036600FC047480F0E4A3F090E038E014704530AB
:10037600B43A90E6017403F07F647E00121DEC909F
:10038600E0BCE0FF120DE47EE07F6E7CE07DBD12F6
:1003960017B37EE07FBDAD1CAC1B1218A55005122D
:10037600B43A90E6017403F07F647E00121E0A9080
:10038600E0B8E0FF120E0C7EE07F6A7CE07DB912D9
:1003960017B77EE07FB9AD1CAC1B1218A950051229
:1003A6000B48801690FC05740EF0800E90FC0574C8
:1003B6000DF0800690FC057403F0E490E038F0023E
:1003C60005D7E4F531F5327F02121B200205D7E48A
:1003D600FF120DE4120F0EE4FF1219E0E4FF800293
:1003E6007F01121B20121E180205D77531007532C7
:1003C60005D7E4F531F5327F02121B240205D7E486
:1003D600FF120E0C121126E4FF1219E4E4FF80024C
:1003E6007F01121B24121E1C0205D77531007532BF
:1003F6000690FC047480F0E4A3F090F405E0F53C6C
:10040600E4F511E53C64016004E53C703290E0B629
:10040600E4F511E53C64016004E53C703290E0B22D
:10041600E0FEA3E054F064607003EE6411600280B5
:100426007290E037E070028058E5116401600AE5D9
:1004360011700C121C87EF6006853C110205D780EF
:1004360011700C121C8BEF6006853C110205D780EB
:100446005275310075320690FC0474B2F0A3E511C2
:10045600F00205D775310075320690FC047480F001
:10046600E4A3F090F405E0F53CFF1219E0EF24F167
:10046600E4A3F090F405E0F53CFF1219E4EF24F163
:10047600600F1460152410701AE4F531F532020588
:10048600D790FC05740FF00205D790FC057410F0A8
:100496000205D790FC057401F00205D77531007589
:1004A600320690FC0474B5F090E0BBE090FC05F0D9
:1004A600320690FC0474B5F090E0B7E090FC05F0DD
:1004B6000205D775310075320690FC0474B6F0A2B9
:1004C60080E43325E0FFA281E4334FA3F00205D791
:1004D600853A31853B3290FC0474B7F0753505C317
@@ -292,11 +294,11 @@
:1004F600F582E434F4F583E0648870030205D7AF2F
:10050600357E0074002FF9EE34F4FA7B01C003C087
:100516000174002FF9EE34FC8B56F5578958853453
:1005260059D001D003121A900205D77531007532E1
:1005260059D001D003121A940205D77531007532DD
:100536000590FC0474A5F01200128F3D7B007A0032
:10054600793EE4FDFC1214D290E036E0FF0532E578
:10054600793EE4FDFC1214D690E036E0FF0532E574
:1005560032AC3170020531142400F58274FC3CF58E
:1005660083EFF090E0BCE0FF0532E532AC3170027B
:1005660083EFF090E0B8E0FF0532E532AC3170027F
:100576000531142400F58274FC3CF583EFF0053256
:10058600E532AE3170020531142400F58274FC3E6A
:10059600F583E53EF00532E532AE317002053114E1
@@ -312,66 +314,66 @@
:0106340022A3
:02004100D322C8
:0800030090E6BAE0F51DD322DE
:101EC90090E740E51DF0E490E68AF090E68B04F097
:021ED900D32212
:101ECD0090E740E51DF0E490E68AF090E68B04F093
:021EDD00D3220E
:08002B0090E6BAE0F51AD322B9
:101EDB0090E740E51AF0E490E68AF090E68B04F088
:021EEB00D32200
:101DBE0090E6B9E0242F600D04701990E604E0FF60
:101DCE00430780800890E604E0FF53077F00000081
:071DDE00EFF08002D322C3E5
:011DE50022DB
:101E3000C0E0C083C082D2015391EF90E65D74018F
:081E4000F0D082D083D0E03223
:101E7700C0E0C083C0825391EF90E65D7404F0D058
:061E870082D083D0E0329E
:101E8D00C0E0C083C0825391EF90E65D7402F0D044
:061E9D0082D083D0E03288
:101C1B00C0E0C083C08285120D85130E850E8285B0
:101C2B000D83A37402F085090F850A108510828538
:101C3B000F83A37407F05391EF90E65D7410F0D00F
:061C4B0082D083D0E032DC
:101E4800C0E0C083C082D2035391EF90E65D74086E
:081E5800F0D082D083D0E0320B
:101BA400C0E0C083C08290E680E030E72085090D64
:101BB400850A0E850E82850D83A37402F085120FAB
:101BC400851310851082850F83A37407F05391EF5A
:0D1BD40090E65D7420F0D082D083D0E03226
:101EB600000102020303040405050300000000C03C
:031EC600C2000057
:06122100011100010800AC
:03000B000212AC32
:1012AC00C0E0C0F0C083C082C0D075D000C000C008
:0D12BC0001C002C003C004C005C006C00789
:1012C90078217C007D007BFF7A1E79C07E007F0536
:1012D90012070590E0BBE0F526C204752700E50872
:1012E900600415088056750805E5117004C204806C
:1012F90043A280308101B3500B3081047F008030DC
:101309007F01802C30B4157556007557007558212A
:101319007559057B007A007921121A90E523540149
:10132900F527701090E0BBE060047F0080027F0128
:0C1339008F26D204300405AF261219E004
:10134500D007D006D005D004D003D002D001D000FC
:0B135500D0D0D082D083D0F0D0E032A6
:100CB700785B7CE17D017BFF7A1E79C57E007F042E
:100CC700120705C203C200D202C201121D6C121E16
:100CD70060121610750B10750C007514107515122F
:100CE700750910750A1C75121075137085120F851A
:100CF70013107516107517B412001290E159EFF022
:100D07007B017AE1795AE4FDFC1214D290E15AE0B2
:100D1700FF90E036F0E490E0BCF0EF64C26059EF7A
:100D270064C06054E490E15FF090E15FE0FFC3943A
:100D370004504A745B2FF582E434E1F583E0FF60E9
:100D47003C120DE47EE07F6E7CE07DBD1217B37E22
:100D5700E07FBDAD1CAC1B1218A5501490E15FE0FD
:100D6700245BF582E434E1F583E090E0BCF0800D8C
:100D770090E15FE004F080B1E4FF120DE4120F0E82
:100D8700D2E843D82090E668E04409F090E65CE0BA
:100D9700443DF012001290E159EFF07B017AE179BE
:100DA7005AE4FDFC1214D290E15AE064C26007E4F1
:100DB70090E0BBF0C2B57F01121B20D2AFD28C539B
:100DC7008EF8C203C2AF120056D2AF300105120926
:0D0DD70020C2013003EEC203121D1580E79B
:101EDF0090E740E51AF0E490E68AF090E68B04F084
:021EEF00D322FC
:101DC20090E6B9E0242F600D04701990E604E0FF5C
:101DD200430780800890E604E0FF53077F0000007D
:071DE200EFF08002D322C3E1
:011DE90022D7
:101E3400C0E0C083C082D2015391EF90E65D74018B
:081E4400F0D082D083D0E0321F
:101E7B00C0E0C083C0825391EF90E65D7404F0D054
:061E8B0082D083D0E0329A
:101E9100C0E0C083C0825391EF90E65D7402F0D040
:061EA10082D083D0E03284
:101C1F00C0E0C083C08285120D85130E850E8285AC
:101C2F000D83A37402F085090F850A108510828534
:101C3F000F83A37407F05391EF90E65D7410F0D00B
:061C4F0082D083D0E032D8
:101E4C00C0E0C083C082D2035391EF90E65D74086A
:081E5C00F0D082D083D0E03207
:101BA800C0E0C083C08290E680E030E72085090D60
:101BB800850A0E850E82850D83A37402F085120FA7
:101BC800851310851082850F83A37407F05391EF56
:0D1BD80090E65D7420F0D082D083D0E03222
:101EBA00000102020303040405050300000000C038
:031ECA00C2000053
:06122500011100010800A8
:03000B000212B02E
:1012B000C0E0C0F0C083C082C0D075D000C000C004
:0D12C00001C002C003C004C005C006C00785
:1012CD0078217C007D007BFF7A1E79C47E007F052E
:1012DD0012070590E0B7E0F526C204752700E50872
:1012ED00600415088056750805E5117004C2048068
:1012FD0043A280308101B3500B3081047F008030D8
:10130D007F01802C30B41575560075570075582126
:10131D007559057B007A007921121A94E523540141
:10132D00F527701090E0B7E060047F0080027F0128
:0C133D008F26D204300405AF261219E4FC
:10134900D007D006D005D004D003D002D001D000F8
:0B135900D0D0D082D083D0F0D0E032A2
:100CDF0078577CE17D017BFF7A1E79C97E007F0406
:100CEF00120705C203C200D202C201121D70121EEA
:100CFF0064121614750B10750C00751410751512FF
:100D0F00750910750A1C75121075137085120F85F1
:100D1F0013107516107517B412001290E155EFF0FD
:100D2F007B017AE17956E4FDFC1214D690E156E08E
:100D3F00FF90E036F0E490E0B8F0EF64C26059EF56
:100D4F0064C06054E490E15BF090E15BE0FFC3941A
:100D5F0004504A74572FF582E434E1F583E0FF60C5
:100D6F003C120E0C7EE07F6A7CE07DB91217B77ED5
:100D7F00E07FB9AD1CAC1B1218A9501490E15BE0D9
:100D8F002457F582E434E1F583E090E0B8F0800D6C
:100D9F0090E15BE004F080B1E4FF120E0C1211261B
:100DAF00D2E843D82090E668E04409F090E65CE092
:100DBF00443DF012001290E155EFF07B017AE1799A
:100DCF0056E4FDFC1214D690E156E064C26007E4CD
:100DDF0090E0B7F0C2B57F01121B24D2AFD28C5373
:100DEF008EF8C203C2AF120056D2AF3001051209FE
:0D0DFF0020C2013003EEC203121D1980E76F
:0B00460090E50DE030E402C322D3225D
:1009200090E6B9E070030209E5147003020A5A2444
:10093000FE7003020AD524FB70030209DF14700362
@@ -381,22 +383,22 @@
:1009700024067056E50B90E6B3F0E50C80421200B9
:10098000465044E51490E6B3F0E5158033E50D904C
:10099000E6B3F0E50E802985120F851310E50F9060
:1009A000E6B3F0E510801990E6BAE0FF121D41AA07
:1009A000E6B3F0E510801990E6BAE0FF121D45AA03
:1009B00006A9077B01EA494B600DEE90E6B3F0EF24
:1009C00090E6B4F0020B40020B2F020B2F121EDB3D
:1009C00090E6B4F0020B40020B2F020B2F121EDF39
:1009D000020B4012002B020B40120003020B4012CC
:1009E0001EC9020B4090E6B8E0247F601514601920
:1009E0001ECD020B4090E6B8E0247F60151460191C
:1009F00024027063A200E43325E0FFA202E4334F37
:100A00008041E490E740F0803F90E6BCE0547EFFF8
:100A10007E00E0D394807C0040047D0180027D0054
:100A2000EC4EFEED4F24B6F582741E3EF583E49342
:100A2000EC4EFEED4F24BAF582741E3EF583E4933E
:100A3000FF3395E0FEEF24A1FFEE34E68F82F583CD
:100A4000E0540190E740F0E4A3F090E68AF090E6ED
:100A50008B7402F0020B40020B2F90E6B8E024FEEC
:100A6000601624026003020B4090E6BAE0B4010570
:100A7000C200020B40020B2F90E6BAE0705590E6E0
:100A8000BCE0547EFF7E00E0D394807C0040047D77
:100A90000180027D00EC4EFEED4F24B6F582741EFF
:100A90000180027D00EC4EFEED4F24BAF582741EFB
:100AA0003EF583E493FF3395E0FEEF24A1FFEE349F
:100AB000E68F82F583E054FEF090E6BCE0548013AC
:100AC0001313541FFFE0540F2F90E683F0E04420EF
@@ -404,110 +406,110 @@
:100AE0004E90E6BAE0B40104D200805490E6BAE039
:100AF0006402604C803990E6BCE0547EFF7E00E0EA
:100B0000D394807C0040047D0180027D00EC4EFE89
:100B1000ED4F24B6F582741E3EF583E493FF3395C2
:100B1000ED4F24BAF582741E3EF583E493FF3395BE
:100B2000E0FEEF24A1FFEE34E68F82F583800D9086
:100B3000E6A08008121DBE500790E6A0E04401F038
:100B3000E6A08008121DC2500790E6A0E04401F034
:070B400090E6A0E04480F004
:010B4700228B
:03003300020FFCBD
:040FFC0053D8EF32A5
:101227006080E0D9292E43C9A2D87C013D3654A15C
:10123700ECF0061362A705F3C0C7738C98932BD9FC
:10124700BC4C82CA1E9B573CFDD4E01667426F1800
:101257008A17E512BE4EC4D6DA9EDE49A0FBF58E8C
:10126700BB2FEE7AA968799115B2073F94C210890E
:101277000B225F21807F5D9A5A903227353ECCE75B
:10128700BFF79703FF1930B348A5B5D1D75E922AA8
:10129700AC56AAC64FB838D296A47DB676FC6BE298
:0412A7009C7404F13E
:081360008C448D45AB07AA0681
:10136800E4F546F547C3E5479545E5446480F8E567
:1013780046648098400302140FE54725E0FFE546E0
:1013880033FE74D92FF58274E03EF583E0FF7E00CA
:10139800AC44AD451207B78C488D49E54725E0FFB9
:1013A800E54633FE74DA2FF58274E03EF583E0FFFC
:1013B8007E00AC44AD451207B78C4A8D4BE54965B4
:1013C8004B7004E548654A6030EB2549F582EA35FB
:1013D80048F583E0F9EB254BF582EA354AF583E0D9
:1013E800FFEB2549F582EA3548F583EFF0EB254B0D
:1013F800F582EA354AF583E9F00547E547600302D7
:0B140800136D054602136D7E007F018E
:0114130022B6
:0C1414008E448F458C468D478A488B49DA
:10142000E54545446006E54745467004E4FEFF2275
:10143000E4F54AF54BC3E54B9549E5486480F8E58A
:101440004A648098507BE4F54CF54DE547254BF513
:1014500082E546354AF583E4F0C3E54D9549E54814
:101460006480F8E54C6480985049E54D254B24D9BB
:10147000F582E434E0F583E0FFE545254DF582E5AE
:1014800044354CF583E0FEEF8EF0A4FFE547254B95
:10149000F582E546354AF583E02FFFE547254BF514
:1014A00082E546354AF583EFF0054DE54D70AA0516
:1014B0004C80A6054BE54B6003021435054A021427
:0514C000357E007F01F4
:0114C5002204
:101CE70012072BFF9000031207441207719000039D
:101CF700EF120783900002120744FF9000011207BA
:0E1D070044900002120783900001EF02078350
:081126008E448F458C468D4775
:10112E00E4F548F549E547AE467802CEA2E713CE80
:10113E0013D8F8FFC3E5499FEE6480F8E548648054
:10114E009840030211E8E549AE487802C333CE3326
:10115E00CED8F92545FFEE3544FAA9077B018B4A17
:10116E00F54B894C74DA2549F582E434E0F583E0D9
:10117E00541FFFE48F50F54FF54EF54D121CE7ABA3
:10118E004AAA4BA94C120813C374209550F9F812B1
:10119E000800C004C005C006C007A94C120813A958
:1011AE0050A8011207EDD003D002D001D000EF4BB2
:1011BE00FFEE4AFEED49FDEC48FCAB4AAA4BA94CAA
:1011CE00120833AB4AAA4BA94C121CE70549E54954
:0E11DE00600302113305480211337E007F01C9
:0111EC0022E0
:101C5100D3ED9410EC64809480402AED1D70011C3A
:101C6100142FF582EE3CF583E0FB547F24D9F582F5
:101C7100E434E0F583E0F9540F2FF582E43EF58377
:051C8100E06BF080CBD8
:011C8600223B
:101D150090E682E030E004E020E60B90E682E030D9
:101D2500E119E030E71590E680E04401F07F147E8C
:0C1D350000121ADA90E680E054FEF02262
:101CB80030060990E680E0440AF0800790E680E06C
:101CC8004408F07FDC7E05121ADA90E65D74FFF0B6
:0F1CD80090E65FF05391EF90E680E054F7F02232
:101ADA008E588F5990E600E054187012E559240187
:101AEA00FFE43558C313F558EF13F559801590E6FE
:101AFA0000E05418FFBF100BE55925E0F559E558E9
:101B0A0033F558E5591559AE58700215584E600507
:061B1A00121EED80EE2218
:06156B008C528D53AE0707
:10157100EB70037F012290E678E020E6F990E678AF
:101581007480F0EE25E0440190E679F090E678E091
:1015910030E0F990E678E020E26BE030E167BB01F2
:1015A1000790E678E04420F090E679E0F5541BEBF3
:1015B100603090E678E030E0F990E678E020E245AE
:1015C100BB010790E678E04420F090E679E0FF0562
:1015D10053E553AC527002055214F5828C83EFF03F
:1015E10080CC90E678E030E0F990E678E020E215F2
:1015F10090E678E04440F090E679E08553828552A8
:0E16010083F07F012290E678E04440F07F0005
:01160F0022B8
:1019180090E678E020E6F990E6787480F0EF25E02C
:1019280090E679F090E678E030E0F990E678E0200B
:10193800E23AE030E136EBD3940040260DEDAE04F8
:1019480070010C14F5828E83E090E679F01B90E626
:1019580078E030E0F990E678E020E210E020E1D687
:10196800800A90E678E04440F07F012290E678E033
:051978004440F07F0077
:01197D002247
:021D4100A907F0
:101D4300AE16AF178F828E83A3E064037017AD01C5
:101D530019ED7001228F828E83E07C002FFDEC3E13
:081D6300FEAF0580DFE4FEFF86
:011D6B002255
:101EED007400F58690FDA57C05A3E582458370F908
:011EFD0022C2
:030000000216A441
:0C16A400787FE4F6D8FD75815B0216EB40
:03003300021EF6B4
:041EF60053D8EF329C
:10122B006080E0D5292E43C9A2D87C013D3654A15C
:10123B00ECF0061362A705F3C0C7738C98932BD9F8
:10124B00BC4C82CA1E9B573CFDD4E01667426F18FC
:10125B008A17E512BE4EC4D6DA9EDE49A0FBF58E88
:10126B00BB2FEE7AA968799115B2073F94C210890A
:10127B000B225F21807F5D9A5A903227353ECCE757
:10128B00BFF79703FF1930B348A5B5D1D75E922AA4
:10129B00AC56AAC64FB838D296A47DB676FC6BE294
:0412AB009C7404F13A
:081364008C448D45AB07AA067D
:10136C00E4F546F547C3E5479545E5446480F8E563
:10137C00466480984003021413E54725E0FFE546D8
:10138C0033FE74D52FF58274E03EF583E0FF7E00CA
:10139C00AC44AD451207B78C488D49E54725E0FFB5
:1013AC00E54633FE74D62FF58274E03EF583E0FFFC
:1013BC007E00AC44AD451207B78C4A8D4BE54965B0
:1013CC004B7004E548654A6030EB2549F582EA35F7
:1013DC0048F583E0F9EB254BF582EA354AF583E0D5
:1013EC00FFEB2549F582EA3548F583EFF0EB254B09
:1013FC00F582EA354AF583E9F00547E547600302D3
:0B140C00137105460213717E007F0182
:0114170022B2
:0C1418008E448F458C468D478A488B49D6
:10142400E54545446006E54745467004E4FEFF2271
:10143400E4F54AF54BC3E54B9549E5486480F8E586
:101444004A648098507BE4F54CF54DE547254BF50F
:1014540082E546354AF583E4F0C3E54D9549E54810
:101464006480F8E54C6480985049E54D254B24D5BB
:10147400F582E434E0F583E0FFE545254DF582E5AA
:1014840044354CF583E0FEEF8EF0A4FFE547254B91
:10149400F582E546354AF583E02FFFE547254BF510
:1014A40082E546354AF583EFF0054DE54D70AA0512
:1014B4004C80A6054BE54B6003021439054A02141F
:0514C400397E007F01EC
:0114C9002200
:101CEB0012072BFF90000312074412077190000399
:101CFB00EF120783900002120744FF9000011207B6
:0E1D0B0044900002120783900001EF0207834C
:080F36008E448F458C468D4767
:100F3E00E4F548F549E547AE467802CEA2E713CE72
:100F4E0013D8F8FFC3E5499FEE6480F8E548648046
:100F5E00984003020FF8E549AE487802C333CE330A
:100F6E00CED8F92545FFEE3544FAA9077B018B4A09
:100F7E00F54B894C74D62549F582E434E0F583E0CF
:100F8E00541FFFE48F50F54FF54EF54D121CEBAB91
:100F9E004AAA4BA94C120813C374209550F9F812A3
:100FAE000800C004C005C006C007A94C120813A94A
:100FBE0050A8011207EDD003D002D001D000EF4BA4
:100FCE00FFEE4AFEED49FDEC48FCAB4AAA4BA94C9C
:100FDE00120833AB4AAA4BA94C121CEB0549E54942
:0E0FEE006003020F430548020F437E007F019F
:010FFC0022D2
:101C5500D3ED9410EC64809480402AED1D70011C36
:101C6500142FF582EE3CF583E0FB547F24D5F582F5
:101C7500E434E0F583E0F9540F2FF582E43EF58373
:051C8500E06BF080CBD4
:011C8A002237
:101D190090E682E030E004E020E60B90E682E030D5
:101D2900E119E030E71590E680E04401F07F147E88
:0C1D390000121ADE90E680E054FEF0225A
:101CBC0030060990E680E0440AF0800790E680E068
:101CCC004408F07FDC7E05121ADE90E65D74FFF0AE
:0F1CDC0090E65FF05391EF90E680E054F7F0222E
:101ADE008E588F5990E600E054187012E559240183
:101AEE00FFE43558C313F558EF13F559801590E6FA
:101AFE0000E05418FFBF100BE55925E0F559E558E5
:101B0E0033F558E5591559AE58700215584E600503
:061B1E00121F1880EE22E8
:06156F008C528D53AE0703
:10157500EB70037F012290E678E020E6F990E678AB
:101585007480F0EE25E0440190E679F090E678E08D
:1015950030E0F990E678E020E26BE030E167BB01EE
:1015A5000790E678E04420F090E679E0F5541BEBEF
:1015B500603090E678E030E0F990E678E020E245AA
:1015C500BB010790E678E04420F090E679E0FF055E
:1015D50053E553AC527002055214F5828C83EFF03B
:1015E50080CC90E678E030E0F990E678E020E215EE
:1015F50090E678E04440F090E679E08553828552A4
:0E16050083F07F012290E678E04440F07F0001
:0116130022B4
:10191C0090E678E020E6F990E6787480F0EF25E028
:10192C0090E679F090E678E030E0F990E678E02007
:10193C00E23AE030E136EBD3940040260DEDAE04F4
:10194C0070010C14F5828E83E090E679F01B90E622
:10195C0078E030E0F990E678E020E210E020E1D683
:10196C00800A90E678E04440F07F012290E678E02F
:05197C004440F07F0073
:011981002243
:021D4500A907EC
:101D4700AE16AF178F828E83A3E064037017AD01C1
:101D570019ED7001228F828E83E07C002FFDEC3E0F
:081D6700FEAF0580DFE4FEFF82
:011D6F002251
:101F18007400F58690FDA57C05A3E582458370F9DC
:011F28002296
:030000000216A83D
:0C16A800787FE4F6D8FD75815B0216EF38
:10063500E709F608DFFA8046E709F208DFFA803EA7
:1006450088828C83E709F0A3DFFA8032E309F60894
:10065500DFFA8078E309F208DFFA807088828C83FC
@@ -552,15 +554,15 @@
:10085900D083D082F8E4937012740193700DA3A32E
:1008690093F8740193F5828883E473740293686042
:06087900EFA3A3A380DF42
:1016B000020CB7E493A3F8E493A34003F68001F28D
:1016C00008DFF48029E493A3F85407240CC8C3333B
:1016D000C4540F4420C8834004F456800146F6DF0A
:1016E000E4800B01020408102040809011EDE47E9C
:1016F000019360BCA3FF543F30E509541FFEE493FF
:10170000A360010ECF54C025E060A840B8E493A3C5
:10171000FAE493A3F8E493A3C8C582C8CAC583CAF0
:10172000F0A3C8C582C8CAC583CADFE9DEE780BEA8
:0112AB000042
:1016B400020CDFE493A3F8E493A34003F68001F261
:1016C40008DFF48029E493A3F85407240CC8C33337
:1016D400C4540F4420C8834004F456800146F6DF06
:1016E400E4800B01020408102040809011F5E47E90
:1016F400019360BCA3FF543F30E509541FFEE493FB
:10170400A360010ECF54C025E060A840B8E493A3C1
:10171400FAE493A3F8E493A3C8C582C8CAC583CAEC
:10172400F0A3C8C582C8CAC583CADFE9DEE780BEA4
:0112AF00003E
:10087F00BC000BBE0029EF8DF084FFADF022E4CC5D
:10088F00F875F008EF2FFFEE33FEEC33FCEE9DEC26
:10089F00984005FCEE9DFE0FD5F0E9E4CEFD22ED6C
@@ -574,4 +576,3 @@
:0C090800ECF608EDF608EEF608EFF6221B
:0C091400ECF208EDF208EEF208EFF2221F
:00000001FF


View File

@@ -0,0 +1,421 @@
#
# $Id: USB_RECOV.hex 9760 2011-09-05 12:33:27Z dima $
#
:03004300021600A2
:0300530002160092
:10160000021580000215C6000215B00002159800F0
:081610000213F20002137B003B
:100A00001201000200000040AAAAAAAAAAAA010292
:100A100003010A060002000000400100090237003D
:100A2000020100C0000904000002FFFFFF040705E7
:100A3000020200020007058602000200090401000C
:100A400002FFFFFF050705040200020007058802F8
:100A5000000200001201000200000040E4E4511115
:100A60000000010203010A0600020000004001002C
:100A700009023700020100C0320904000002FFFF32
:100A8000FF0407050202400000070586024000003F
:100A90000904010002FFFFFF0507050402400000F2
:100AA000070588024000000604001600140012002A
:100AB0000A00260004030904160358006F007200A0
:100AC00063006F006D0020004C00540044001403CC
:100AD00041007300740072006900620061006E00E2
:100AE0006B001203530065007200690061006C0026
:100AF0004E006F000A0346005000470041002603E5
:100B00004D0061006E00610067006D0065006E00C1
:100B10007400500072006F00630065007300730082
:060B20006F0072000000EE
:08164300584F52434F4D2000A7
:100E650041E0B20042E0AD0000021BE0810218E063
:100E75007543E0AF0000004CE036393734364D207D
:060E8500202020202000C7
:101517008B2A8A2B892CE52F152FAE2E7002152EBC
:101527004E6014AB2A052CE52CAA2B7002052B1450
:08153700F9ED12019280DF22A0
:1013B8008B328A338934E5391539AE3870021538DD
:1013C8004E6026AB350537E537AA36700205361468
:1013D800F912014CFFAB320534E534AA337002052B
:0A13E8003314F9EF12019280CD22B8
:1011FD008C2A8D2BAA06A9077535018A3689377574
:10120D00380075391C7B017AE079481213B890E0EB
:10121D0060E0FCA3E0FDA3E0FEA3E064D1FFEE647B
:10122D008DFEED644CFDEC6449FC90E06012026EA5
:10123D007EE07F487D1C7C00120CFF7EE07F487BAA
:10124D001C7A00AD2BAC2A120DB37D1C7C00AF2B8C
:10125D00AE2A120C387D1C7C00AF2BAE2A0214284E
:08099F008E2A8F2B8C2C8D2D6C
:1009A700C204121567BF5004D204803BE4F52EF54C
:1009B7002FE52D252FF582E52C352EF583E0FFE574
:1009C7002B252FF582E52A352EF583E0B5070E0591
:1009D7002FE52F7002052E6410452E70D4E52F6485
:0909E70010452E7002D204A20496
:0109F00022E4
:020875008F32C0
:100877001215678F33E4F537F538AD38AC37120FFB
:100887001474652538F582E434E0F583E534F00522
:1008970038E53870020537C39408E53764809480DB
:1008A70040D8E532600490E065F090E065E0B4C0C0
:1008B70008753500753608800675351D7536367529
:1008C7003700753808C3E5389410E537648094809D
:1008D7005023120F1074652538F582E434E0F58350
:1008E700E534F00538E538700205370536E536702A
:1008F700D4053580D07534FF75351D7536197537B4
:1009070000753810C3E538942CE53764809480501F
:1009170033E533B4510E7B007A007934AD36AC350C
:10092700FF120F1C74652538F582E434E0F583E582
:1009370034F00538E538700205370536E53670C4FA
:10094700053580C075351D75363EE4F534F537F548
:1009570038C3E5389406E53764809480502FE53333
:10096700B4510A90E065E0B4C203120F1074422537
:1009770038F582E434E0F583E534F00538E538707E
:100987000205370536E53670C8053580C490E06541
:07099700E0B4C20374C0F0DC
:01099E002236
:0A12D3008E2A8F2B8B2C8A2D892E7A
:1012DD007E00E52B2DF533EE352AF5321215678F8D
:1012ED002FE52F6451600BC3E52B9410E52A940074
:1012FD005035852A30852B31C3E5319533E5309551
:10130D00325024AB2CAA2DA92EAD31AC30AF2F12FB
:10131D00117A0531E531700205307401252EF52E57
:07132D00E4352DF52D80D100
:011334002296
:020B26008F320C
:100B28007F031214ECEF2402FFE43EA9077533019A
:100B3800F534893578367C007D007BFF7A16794359
:100B48007E007F08120126E532600464017054E5D6
:100B58000C2408F582E4350BF58374B4F0E50C2415
:100B680009F582E4350BF5837404F0E50C240AF5E5
:100B780082E4350BF5837413F0E50C240BF582E45D
:100B8800350BF5837486F0E50C240CF582E4350BFF
:100B9800F583E4F0E50C240DF582E4350BF583E4E8
:100BA800F0806C90E066E0FFE50C2408F582E435FF
:100BB8000BF583EFF090E067E0FFE50C2409F58280
:100BC800E4350BF583EFF090E068E0FFE50C240ACC
:100BD800F582E4350BF583EFF090E069E0FFE50C72
:100BE800240BF582E4350BF583EFF090E06AE0FF23
:100BF800E50C240CF582E4350BF583EFF090E06BFF
:100C0800E0FFE50C240DF582E4350BF583EFF0E405
:100C1800FF74362FF8E6FEAB33AA34A93575F00217
:0F0C2800EFA4F58285F083EE1201A40FBF08E25E
:010C3700229A
:10145E00E4F532E50C240BF582E4350BF583E0FE62
:10146E00E50C240AF582E4350BF583E0FDEDFF90E3
:10147E00E0ADEEF0A3EFF0D20412000390E680E0B0
:03148E0054F7F020
:011491002238
:10105A0090E600E054E74410F090E60174C0F09086
:10106A00E6107420F000000090E611F000000090F5
:10107A00E6047480F0000000740FF0000000E4F051
:10108A0000000090E6187410F0000000E490E619E1
:10109A00F000000090E61A7408F0000000E490E600
:1010AA001BF000000090E6497482F0000000F00096
:1010BA00000090E6247402F0000000E490E625F0B7
:1010CA0000000090E6957480F0000000F000000037
:1010DA0043AF017B017AE07914752E00752F06E47F
:0410EA00FD021517D7
:1015DC007C007D181201C6EF1FAC0670011E4C700A
:0215EC00F622E5
:1015670090E678E0541824F06008240870087F504B
:0815770080067F518002E4FFB1
:01157F002249
:0C0F1000AD36AC357B007A007934AF338D
:0C0F1C008F398C3A8D3B8B3C8A3D893E1E
:100F2800E4F53FF540754103FDF542F543A2AF33C3
:100F3800F544E53924AF600D047012753F00754023
:100F4800017D018008753F00754002E4FDE53960C8
:100F580051E540453F604BE53A90E0AFF0E53BA3F3
:100F6800F074AF2DF582E434E0AD82FCAB40AF39CC
:100F780012126D7542008F437F0A7E00121335E509
:100F880043454260107CE07D647B01AF39120FB5A8
:100F98007542008F4390E064E0AB3CAA3DA93E1245
:0C0FA8000192E54424FF92AFAE42AF433B
:010FB400221A
:0C117A008F348C358D368B378A388939DC
:10118600E4F53AF53B753C03FDF53DF53EA2AF337C
:10119600F53FE53424AF600D047012753A00753BD7
:1011A600027D018008753A00753B03E4FDE5346075
:1011B6003BE53B453A6035E53590E0AFF0E536A3D3
:1011C600F0AB37AA38A93912014C90E0B1F074AFF0
:1011D6002DF582E434E0AD82FCAB3BAF3412126DE8
:1011E600753D008F3E7F0A7E00121335E53F24FFD2
:0611F60092AFAE3DAF3EDA
:0111FC0022D0
:10054300E4F52AF52BF52CF52DF52EF52FF530E5F1
:10055300AA5484600302071190E694E0FE90E695A6
:10056300E0FBEEF52DEBF52EC39405E52D9400404D
:100573000790F404E0FD80027DFFED24F570030293
:10058300062524E6700302064F24E0700302062CBE
:1005930024FE7003020649243960030206B3752A58
:1005A30000752B0590FC04748EF01215678F30E5EF
:1005B3003064516019E53064506013752A00752B5F
:1005C3000690FC047480F0A3740BF00206D6121597
:1005D300678F307B007A007931E4FDFC120F1CAF8A
:1005E300311208757400252BF974FC352AFA7B0146
:1005F300C0038B357536E075376575380075392C52
:10060300D0031213B87400252BF58274FC352AF538
:1006130083E531F0742C252BF52BE4352AF52A02DA
:1006230006D6E4F52AF52B801D1215678F307B0063
:100633007A007931E4FDFC120F1CAF311208757F8B
:10064300C0120B26800012145E0206D6752A0075AE
:100653002B0590FC0474A5F01215678F307B007A8C
:10066300007931E4FDFC120F1C052BE52BAE2A703B
:1006730002052A142400F58274FC3EF583E508F094
:10068300052BE52BAE2A7002052A142400F582748B
:10069300FC3EF583E515F0052BE52BAE2A7002052C
:1006A3002A142400F58274FC3EF583E531F080239F
:1006B300752A00752B0690FC047480F0C3E52E9414
:1006C30005E52D94005006A37407F0800690FC0501
:1006D3007406F0E52B452A602CE52BFD90FC00F019
:1006E300E52AFFA3F090F402E090FC02F090F403FB
:1006F300E090FC03F090E69CEFF000000090E69D94
:0E070300EDF000000090E6957480F00000001C
:0107110022C5
:02004100D322C8
:0800460090E6BAE0F51DD3229B
:1015EE0090E740E51DF0E490E68AF090E68B04F07B
:0215FE00D322F6
:08163B0090E6BAE0F51AD32293
:1016180090E740E51AF0E490E68AF090E68B04F053
:02162800D322CB
:10153F0090E6B9E0242F600D04701990E604E0FFE7
:10154F00430780800890E604E0FF53077F00000008
:07155F00EFF08002D322C36C
:011566002262
:10158000C0E0C083C082D2015391EF90E65D740148
:08159000F0D082D083D0E032DC
:1015B000C0E0C083C0825391EF90E65D7404F0D028
:0615C00082D083D0E0326E
:1015C600C0E0C083C0825391EF90E65D7402F0D014
:0615D60082D083D0E03258
:1013F200C0E0C083C08285110D85120E850E8285E4
:101402000D83A37402F085090F850A108510828569
:101412000F83A37407F05391EF90E65D7410F0D040
:0614220082D083D0E0320D
:10159800C0E0C083C082D2035391EF90E65D740827
:0815A800F0D082D083D0E032C4
:10137B00C0E0C083C08290E680E030E72085090D95
:10138B00850A0E850E82850D83A37402F085110FDD
:10139B00851210851082850F83A37407F05391EF8C
:0D13AB0090E65D7420F0D082D083D0E03257
:0E09F10000010202030304040505C0C2000059
:1007120078237C007D007BFF7A0979FB7E007F04D1
:10072200120126C203C200D202C20112105A750B74
:100732000A750C0075130A75141275090A750A1CDC
:1007420075110A75127085110F85121075160A75CA
:1007520017B41215678F217B007A007922E4FDFC21
:10076200120F1C852208E4F515F52774232527F8B6
:10077200E6FF605C1208757EE07F657CE07DB31267
:1007820011FD7EE07FB3AD1CAC1B12099F50387483
:10079200232527F8E6F515652260277B007A007984
:1007A200157D01E4FFFE1212D37B007A007922E468
:1007B200FDFCAF21120F1CE52265156013751501B2
:1007C200800E7515FF80090527E527C39404409B19
:1007D200E5157059FB7A0079227D01FCAF21120FD9
:1007E2001CE522752900F5287B007A0079227D021A
:1007F2007C00AF21120F1CE5224229E52964E47036
:1008020004E52864E470267515C0FB7A0079157D2D
:1008120001FFFE1212D37B007A007922E4FDFCAFC5
:1008220021120F1CE52265156003751501AF151223
:100832000B26D2E843D82090E668E04409F090E61F
:100842005CE0443DF0E51564C06005E515B4C20303
:1008520012145ED2AF538EF8C203C2AF120543D256
:10086200AF30010512031BC2013003EEC2031214A2
:03087200C080E75C
:0B00360090E50DE030E402C322D3226D
:10031B0090E6B9E070030203E01470030204552465
:10032B00FE70030204D024FB70030203DA14700383
:10033B000203D41470030203C81470030203CE2407
:10034B0005600302052F120041400302053B90E6B6
:10035B00BBE024FE602714603E24FD60111460276F
:10036B0024067056E50B90E6B3F0E50C80421200C4
:10037B00365044E51390E6B3F0E5148033E50D9069
:10038B00E6B3F0E50E802985110F851210E50F906D
:10039B00E6B3F0E510801990E6BAE0FF1214ECAA70
:1003AB0006A9077B01EA494B600DEE90E6B3F0EF2F
:1003BB0090E6B4F002053B02052A02052A12161834
:1003CB0002053B12163B02053B12004602053B128F
:1003DB0015EE02053B90E6B8E0247F60151460191A
:1003EB0024027063A200E43325E0FFA202E4334F42
:1003FB008041E490E740F0803F90E6BCE0547EFF04
:10040B007E00E0D394807C0040047D0180027D005F
:10041B00EC4EFEED4F24F1F58274093EF583E49327
:10042B00FF3395E0FEEF24A1FFEE34E68F82F583D8
:10043B00E0540190E740F0E4A3F090E68AF090E6F8
:10044B008B7402F002053B02052A90E6B8E024FE0D
:10045B0060162402600302053B90E6BAE0B4010586
:10046B00C20002053B02052A90E6BAE0705590E601
:10047B00BCE0547EFF7E00E0D394807C0040047D82
:10048B000180027D00EC4EFEED4F24F1F5827409E4
:10049B003EF583E493FF3395E0FEEF24A1FFEE34AA
:1004AB00E68F82F583E054FEF090E6BCE0548013B7
:1004BB001313541FFFE0540F2F90E683F0E04420FA
:1004CB00F0806D805A90E6B8E024FE60192402702B
:1004DB004E90E6BAE0B40104D200805490E6BAE044
:1004EB006402604C803990E6BCE0547EFF7E00E0F5
:1004FB00D394807C0040047D0180027D00EC4EFE95
:10050B00ED4F24F1F58274093EF583E493FF3395A7
:10051B00E0FEEF24A1FFEE34E68F82F583800D9091
:10052B00E6A0800812153F500790E6A0E04401F0CA
:07053B0090E6A0E04480F00F
:010542002296
:0300330002004E7A
:04004E0053D8EF3262
:100E8B006080E0CF292E43C9A2D87C013D3654A106
:100E9B00ECF0061362A705F3C0C7738C98932BD99C
:100EAB00BC4C82CA1E9B573CFDD4E01667426F18A0
:100EBB008A17E512BE4EC4D6DA9EDE49A0FBF58E2C
:100ECB00BB2FEE7AA968799115B2073F94C21089AE
:100EDB000B225F21807F5D9A5A903227353ECCE7FB
:100EEB00BFF79703FF1930B348A5B5D1D75E922A48
:100EFB00AC56AAC64FB838D296A47DB676FC6BE238
:040F0B009C7404F1DD
:080CFF008C2C8D2DAB07AA0619
:100D0700E4F52EF52FC3E52F952DE52C6480F8E546
:100D17002E6480984003020DAEE52F25E0FFE52EF7
:100D270033FE74CF2FF58274E03EF583E0FF7E003B
:100D3700AC2CAD2D1201D88C308D31E52F25E0FF7D
:100D4700E52E33FE74D02FF58274E03EF583E0FF85
:100D57007E00AC2CAD2D1201D88C328D33E5316578
:100D6700337004E53065326030EB2531F582EA35C2
:100D770030F583E0F9EB2533F582EA3532F583E088
:100D8700FFEB2531F582EA3530F583EFF0EB2533BC
:100D9700F582EA3532F583E9F0052FE52F60030286
:0B0DA7000D0C052E020D0C7E007F01DC
:010DB200221E
:0C0DB3008E2C8F2D8C2E8D2F8A308B31D2
:100DBF00E52D452C6006E52F452E7004E4FEFF223D
:100DCF00E4F532F533C3E5339531E5306480F8E56A
:100DDF0032648098507BE4F534F535E52F2533F5F3
:100DEF0082E52E3532F583E4F0C3E5359531E530F4
:100DFF006480F8E5346480985049E535253324CF75
:100E0F00F582E434E0F583E0FFE52D2535F582E545
:100E1F002C3534F583E0FEEF8EF0A4FFE52F25335C
:100E2F00F582E52E3532F583E02FFFE52F2533F5DB
:100E3F0082E52E3532F583EFF00535E53570AA05DD
:100E4F003480A60533E5336003020DD40532020D5D
:050E5F00D47E007F01BC
:010E6400226B
:1014920012014CFF900003120165120192900003A9
:1014A200EF1201A4900002120165FF9000011201E7
:0E14B200659000021201A4900001EF0201A457
:080C38008E2C8F2D8C2E8D2FC8
:100C4000E4F530F531E52FAE2E7802CEA2E713CED3
:100C500013D8F8FFC3E5319FEE6480F8E530648077
:100C6000984003020CFAE531AE307802C333CE333C
:100C7000CED8F9252DFFEE352CFAA9077B018B3252
:100C8000F533893474D02531F582E434E0F583E01E
:100C9000541FFFE48F38F537F536F535121492AB53
:100CA00032AA33A934120234C374209538F9F812E9
:100CB0000221C004C005C006C007A934120234A92D
:100CC00038A80112020ED003D002D001D000EF4BA1
:100CD000FFEE4AFEED49FDEC48FCAB32AA33A934E5
:100CE000120254AB32AA33A9341214920531E53101
:0E0CF0006003020C450530020C457E007F01BA
:010CFE0022D3
:10142800D3ED9410EC64809480402AED1D70011C6B
:10143800142FF582EE3CF583E0FB547F24CFF58230
:10144800E434E0F583E0F9540F2FF582E43EF583A8
:05145800E06BF080CB09
:01145D00226C
:1014C00090E682E030E004E020E60B90E682E03037
:1014D000E119E030E71590E680E04401F07F147EEA
:0C14E0000012133590E680E054FEF0226C
:1000030030040990E680E0440AF0800790E680E03F
:100013004408F07FDC7E0512133590E65D74FFF033
:0F00230090E65FF05391EF90E680E054F7F02203
:101335008E458F4690E600E054187012E54624016C
:10134500FFE43545C313F545EF13F546801590E6E3
:1013550000E05418FFBF100BE54625E0F546E545CE
:1013650033F545E5461546AE45700215454E600513
:0613750012162A80EE2290
:060FB5008C458D46AE07DD
:100FBB00EB70037F012290E678E020E6F990E6786B
:100FCB007480F0EE25E0440190E679F090E678E04D
:100FDB0030E0F990E678E020E26BE030E167BB01AE
:100FEB000790E678E04420F090E679E0F5471BEBBC
:100FFB00603090E678E030E0F990E678E020E2456A
:10100B00BB010790E678E04420F090E679E0FF051D
:10101B0046E546AC457002054514F5828C83EFF02E
:10102B0080CC90E678E030E0F990E678E020E215AD
:10103B0090E678E04440F090E679E085468285457D
:0E104B0083F07F012290E678E04440F07F00C1
:011059002274
:10126D0090E678E020E6F990E6787480F0EF25E0DE
:10127D0090E679F090E678E030E0F990E678E020BD
:10128D00E23AE030E136EBD3940040260DEDAE04AA
:10129D0070010C14F5828E83E090E679F01B90E6D8
:1012AD0078E030E0F990E678E020E210E020E1D639
:1012BD00800A90E678E04440F07F012290E678E0E5
:0512CD004440F07F0029
:0112D20022F9
:0214EC00A9074E
:1014EE00AE16AF178F828E83A3E064037017AD0123
:1014FE0019ED7001228F828E83E07C002FFDEC3E71
:08150E00FEAF0580DFE4FEFFE3
:0115160022B2
:10162A007400F58690FDA57C05A3E582458370F9D3
:01163A00228D
:030000000210EEFD
:0C10EE00787FE4F6D8FD758147021135CB
:10005600E709F608DFFA8046E709F208DFFA803E8C
:1000660088828C83E709F0A3DFFA8032E309F60879
:10007600DFFA8078E309F208DFFA807088828C83E1
:10008600E309F0A3DFFA806489828A83E0A3F60895
:10009600DFFA805889828A83E0A3F208DFFA804C6F
:1000A60080D280FA80C680D4806980F28033801046
:1000B60080A680EA809A80A880DA80E280CA8033AF
:1000C60089828A83ECFAE493A3C8C582C8CCC58327
:1000D600CCF0A3C8C582C8CCC583CCDFE9DEE780F7
:1000E6000D89828A83E493A3F608DFF9ECFAA9F076
:1000F600EDFB2289828A83ECFAE0A3C8C582C8CCCC
:10010600C583CCF0A3C8C582C8CCC583CCDFEADEE4
:10011600E880DB89828A83E493A3F208DFF980CC46
:1001260088F0EF60010E4E60C388F0ED2402B4043F
:100136000050B9F582EB2402B4040050AF232345E6
:0601460082239000A67365
:10014C00BB010689828A83E0225002E722BBFE02B1
:09015C00E32289828A83E49322E4
:10016500BB010CE58229F582E5833AF583E022504F
:1001750006E92582F8E622BBFE06E92582F8E22299
:0D018500E58229F582E5833AF583E49322B3
:10019200BB010689828A83F0225002F722BBFE014C
:0201A200F32246
:1001A400F8BB010DE58229F582E5833AF583E8F091
:1001B400225006E92582C8F622BBFE05E92582C83D
:0201C400F22225
:1001C600EF8DF0A4A8F0CF8CF0A428CE8DF0A42E4D
:0201D600FE2207
:1001D800C2D5EC30E709B2D5E4C39DFDE49CFCEE42
:1001E80030E715B2D5E4C39FFFE49EFE12027AC33E
:1001F800E49DFDE49CFC800312027A30D507C3E439
:060208009FFFE49EFE22B0
:10020E00E8600FECC313FCED13FDEE13FEEF13FFCE
:03021E00D8F122F2
:10022100E8600FEFC333FFEE33FEED33FDEC33FC3B
:03023100D8F122DF
:10023400BB010789828A830202DB5005E9F80202C6
:10024400CFBBFE05E9F80202E789828A830202F342
:10025400BB010789828A8302026E5005E9F8020312
:0A02640003BBFE05E9F802030F22B8
:0C026E00ECF0A3EDF0A3EEF0A3EFF02203
:1010FA00020712E493A3F8E493A34003F68001F2F3
:10110A0008DFF48029E493A3F85407240CC8C333F6
:10111A00C4540F4420C8834004F456800146F6DFC5
:10112A00E4800B0102040810204080900E65E47EE2
:10113A00019360BCA3FF543F30E509541FFEE493BA
:10114A00A360010ECF54C025E060A840B8E493A381
:10115A00FAE493A3F8E493A3C8C582C8CAC583CAAC
:10116A00F0A3C8C582C8CAC583CADFE9DEE780BE64
:010F0F0000E1
:10027A00BC000BBE0029EF8DF084FFADF022E4CC68
:10028A00F875F008EF2FFFEE33FEEC33FCEE9DEC31
:10029A00984005FCEE9DFE0FD5F0E9E4CEFD22ED77
:1002AA00F8F5F0EE8420D21CFEADF075F008EF2FC1
:1002BA00FFED33FD4007985006D5F0F222C398FDB2
:0502CA000FD5F0EA224F
:0C02CF00E6FC08E6FD08E6FE08E6FF225B
:0C02DB00E0FCA3E0FDA3E0FEA3E0FF2296
:0C02E700E2FC08E2FD08E2FE08E2FF2253
:1002F300E493FC740193FD740293FE740393FF2251
:0C030300ECF608EDF608EEF608EFF62226
:0C030F00ECF208EDF208EEF208EFF2222A
:00000001FF

View File

@@ -811,6 +811,29 @@ static int xbus_echocancel(xbus_t *xbus, int on)
return 0;
}
static void xbus_deactivate_xpds(xbus_t *xbus)
{
unsigned long flags;
int unit;
int subunit;
xpd_t *xpd;
for (unit = 0; unit < MAX_UNIT; unit++) {
xpd = xpd_byaddr(xbus, unit, 0);
if (!xpd)
continue;
for (subunit = 0; subunit < MAX_SUBUNIT; subunit++) {
xpd = xpd_byaddr(xbus, unit, subunit);
if (!xpd)
continue;
spin_lock_irqsave(&xpd->lock, flags);
xpd->card_present = 0;
xpd_setstate(xpd, XPD_STATE_NOHW);
spin_unlock_irqrestore(&xpd->lock, flags);
}
}
}
static int xbus_initialize(xbus_t *xbus)
{
int unit;
@@ -877,18 +900,37 @@ int xbus_is_registered(xbus_t *xbus)
return xbus->ddev && xbus->ddev->dev.parent;
}
static void xbus_free_ddev(xbus_t *xbus)
{
if (!xbus->ddev)
return;
if (xbus->ddev->devicetype)
kfree(xbus->ddev->devicetype);
xbus->ddev->devicetype = NULL;
xbus->ddev->location = NULL;
xbus->ddev->hardware_id = NULL;
dahdi_free_device(xbus->ddev);
xbus->ddev = NULL;
}
int xbus_register_dahdi_device(xbus_t *xbus)
{
int i;
int offset = 0;
int i;
int offset = 0;
int ret;
XBUS_DBG(DEVICES, xbus, "Entering %s\n", __func__);
if (xbus_is_registered(xbus)) {
XBUS_ERR(xbus, "Already registered to DAHDI\n");
WARN_ON(1);
return -EINVAL;
ret = -EINVAL;
goto err;
}
xbus->ddev = dahdi_create_device();
if (!xbus->ddev) {
ret = -ENOMEM;
goto err;
}
/*
* This actually describe the dahdi_spaninfo version 3
* A bunch of unrelated data exported via a modified ioctl()
@@ -903,8 +945,10 @@ int xbus_register_dahdi_device(xbus_t *xbus)
* OK, let's add to the kernel more useless info.
*/
xbus->ddev->devicetype = kasprintf(GFP_KERNEL, "Astribank2");
if (!xbus->ddev->devicetype)
return -ENOMEM;
if (!xbus->ddev->devicetype) {
ret = -ENOMEM;
goto err;
}
/*
* location is the only usefull new data item.
@@ -929,7 +973,8 @@ int xbus_register_dahdi_device(xbus_t *xbus)
}
if (dahdi_register_device(xbus->ddev, &xbus->astribank)) {
XBUS_ERR(xbus, "Failed to dahdi_register_device()\n");
return -ENODEV;
ret = -ENODEV;
goto err;
}
for (i = 0; i < MAX_XPDS; i++) {
xpd_t *xpd = xpd_of(xbus, i);
@@ -939,6 +984,9 @@ int xbus_register_dahdi_device(xbus_t *xbus)
}
}
return 0;
err:
xbus_free_ddev(xbus);
return ret;
}
void xbus_unregister_dahdi_device(xbus_t *xbus)
@@ -953,12 +1001,7 @@ void xbus_unregister_dahdi_device(xbus_t *xbus)
if (xbus->ddev) {
dahdi_unregister_device(xbus->ddev);
XBUS_NOTICE(xbus, "%s: finished dahdi_unregister_device()\n", __func__);
kfree(xbus->ddev->devicetype);
xbus->ddev->devicetype = NULL;
xbus->ddev->location = NULL;
xbus->ddev->hardware_id = NULL;
dahdi_free_device(xbus->ddev);
xbus->ddev = NULL;
xbus_free_ddev(xbus);
}
for(i = 0; i < MAX_XPDS; i++) {
xpd_t *xpd = xpd_of(xbus, i);
@@ -1303,6 +1346,7 @@ void xbus_deactivate(xbus_t *xbus)
xbus_request_sync(xbus, SYNC_MODE_NONE); /* no more ticks */
elect_syncer("deactivate");
xbus_echocancel(xbus, 0);
xbus_deactivate_xpds(xbus);
XBUS_DBG(DEVICES, xbus, "[%s] Waiting for queues\n", xbus->label);
xbus_command_queue_clean(xbus);
xbus_command_queue_waitempty(xbus);

View File

@@ -49,6 +49,7 @@ typedef unsigned gfp_t; /* Added in 2.6.14 */
#endif
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 31)
/*
* FIXME: Kludge for 2.6.19
* bool is now defined as a proper boolean type (gcc _Bool)
@@ -58,6 +59,12 @@ typedef unsigned gfp_t; /* Added in 2.6.14 */
int name = init; \
module_param(name, bool, perm); \
MODULE_PARM_DESC(name, desc " [default " #init "]")
#else
#define DEF_PARM_BOOL(name, init, perm, desc) \
bool name = init; \
module_param(name, bool, perm); \
MODULE_PARM_DESC(name, desc " [default " #init "]")
#endif
#define DEF_PARM(type,name,init,perm,desc) \
type name = init; \

View File

@@ -697,7 +697,6 @@ int xpp_open(struct dahdi_chan *chan)
pos = chan->chanpos - 1;
if(!xpd->card_present) {
LINE_NOTICE(xpd, pos, "Cannot open -- device not ready\n");
put_xpd(__FUNCTION__, xpd);
return -ENODEV;
}
spin_lock_irqsave(&xbus->lock, flags);
@@ -1083,14 +1082,9 @@ int xpd_dahdi_postregister(xpd_t *xpd)
*/
void xpd_dahdi_preunregister(xpd_t *xpd)
{
unsigned long flags;
if (!xpd)
return;
XPD_DBG(DEVICES, xpd, "\n");
spin_lock_irqsave(&xpd->lock, flags);
xpd->card_present = 0;
xpd_setstate(xpd, XPD_STATE_NOHW);
spin_unlock_irqrestore(&xpd->lock, flags);
update_xpd_status(xpd, DAHDI_ALARM_NOTOPEN);
if(xpd->card_present)
CALL_PHONE_METHOD(card_dahdi_preregistration, xpd, 0);

View File

@@ -75,6 +75,12 @@ static const xproto_table_t *xproto_table(xpd_type_t cardtype)
return xprotocol_tables[cardtype];
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
#define MODULE_REFCOUNT_FORMAT "%s refcount was %d\n"
#else
#define MODULE_REFCOUNT_FORMAT "%s refcount was %lu\n"
#endif
const xproto_table_t *xproto_get(xpd_type_t cardtype)
{
const xproto_table_t *xtable;
@@ -94,7 +100,8 @@ const xproto_table_t *xproto_get(xpd_type_t cardtype)
if(xtable) {
BUG_ON(!xtable->owner);
#ifdef CONFIG_MODULE_UNLOAD
DBG(GENERAL, "%s refcount was %d\n", xtable->name, module_refcount(xtable->owner));
DBG(GENERAL, MODULE_REFCOUNT_FORMAT, xtable->name,
module_refcount(xtable->owner));
#endif
if(!try_module_get(xtable->owner)) {
ERR("%s: try_module_get for %s failed.\n", __FUNCTION__, xtable->name);
@@ -108,7 +115,8 @@ void xproto_put(const xproto_table_t *xtable)
{
BUG_ON(!xtable);
#ifdef CONFIG_MODULE_UNLOAD
DBG(GENERAL, "%s refcount was %d\n", xtable->name, module_refcount(xtable->owner));
DBG(GENERAL, MODULE_REFCOUNT_FORMAT, xtable->name,
module_refcount(xtable->owner));
BUG_ON(module_refcount(xtable->owner) <= 0);
#endif
module_put(xtable->owner);

View File

@@ -72,6 +72,12 @@
#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, 25)
#ifdef CONFIG_PCI
#include <linux/pci-aspm.h>
#endif
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29)
#define HAVE_NET_DEVICE_OPS
#endif
@@ -93,16 +99,25 @@
#endif
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
# ifdef RHEL_RELEASE_VERSION
# if RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(5, 6)
#define dev_name(dev) ((dev)->bus_id)
#define dev_set_name(dev, format, ...) \
snprintf((dev)->bus_id, BUS_ID_SIZE, format, ## __VA_ARGS__)
# else
#define dev_set_name(dev, format, ...) \
do { \
kobject_set_name(&(dev)->kobj, format, ## __VA_ARGS__); \
snprintf((dev)->bus_id, BUS_ID_SIZE, \
kobject_name(&(dev)->kobj)); \
} while (0)
# endif
# else
#define dev_name(dev) ((dev)->bus_id)
# endif
#define dev_set_name(dev, format, ...) \
snprintf((dev)->bus_id, BUS_ID_SIZE, format, ## __VA_ARGS__);
snprintf((dev)->bus_id, BUS_ID_SIZE, format, ## __VA_ARGS__)
# endif
#endif
/*! Default chunk size for conferences and such -- static right now, might make
@@ -1101,6 +1116,9 @@ struct dahdi_dynamic_driver {
struct list_head list;
struct module *owner;
/*! Numberic id of next device created by this driver. */
unsigned int id;
};
/*! \brief Receive a dynamic span message */
@@ -1382,6 +1400,16 @@ static inline short dahdi_txtone_nextsample(struct dahdi_chan *ss)
#define fatal_signal_pending(p) \
(signal_pending((p)) && sigismember(&(p)->pending.signal, SIGKILL))
#ifdef CONFIG_PCI
#ifndef PCIE_LINK_STATE_L0S
#define PCIE_LINK_STATE_L0S 1
#define PCIE_LINK_STATE_L1 2
#define PCIE_LINK_STATE_CLKPM 4
#endif
#define pci_disable_link_state dahdi_pci_disable_link_state
void dahdi_pci_disable_link_state(struct pci_dev *pdev, int state);
#endif /* CONFIG_PCI */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22)
#ifndef __packed
@@ -1409,60 +1437,6 @@ static inline int strcasecmp(const char *s1, const char *s2)
return c1 - c2;
}
#endif /* clamp_val */
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18)
static inline void list_replace(struct list_head *old, struct list_head *new)
{
new->next = old->next;
new->next->prev = 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, 17)
#ifndef POLLRDHUP
#define POLLRDHUP 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)
#define synchronize_rcu() synchronize_kernel()
#define kasprintf dahdi_kasprintf
char *dahdi_kasprintf(gfp_t gfp, const char *fmt, ...);
#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11)
#if !defined(HAVE_WAIT_FOR_COMPLETION_TIMEOUT)
static inline unsigned long
wait_for_completion_interruptible_timeout(struct completion *x,
unsigned long timeout)
{
/* There is a race condition here. If x->done is reset to 0
* before the call to wait_for_completion after this thread wakes.
*/
timeout = wait_event_interruptible_timeout(x->wait, x->done, timeout);
if (timeout)
wait_for_completion(x);
return timeout;
}
#endif
typedef u32 __bitwise pm_message_t;
#endif /* 2.6.11 */
#endif /* 2.6.12 */
#endif /* 2.6.14 */
#endif /* 2.6.17 */
#endif /* 2.6.18 */
#endif /* 2.6.22 */
#endif /* 2.6.25 */
#endif /* 2.6.26 */