summaryrefslogtreecommitdiff
path: root/kernel/xpp/init_card_2_30
diff options
context:
space:
mode:
authortzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2009-03-19 20:08:29 +0000
committertzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2009-03-19 20:08:29 +0000
commitd8562c778088ff6ab3383df5ceead41eff4bf124 (patch)
tree43e394ae225fd7183018c2ae08d3fb1e5bcb12cb /kernel/xpp/init_card_2_30
parentb6b3226735f5e3b3fb000fa92daa7a574265c817 (diff)
xpp: a massive backport from DAHDI. From Xorcom branch-rel-6839-r6908 .
Sun Mar 1 2009 Oron Peled <oron@actcom.co.il> - xpp.r6795 * Fix cases where the command_queue overflowed during initialization. - Also add a 'command_queue_length' parameter to xpp.ko * More migrations to sysfs: - Add a 'transport' attribute to our astribank devices which points to the usb device we use. E.g: /sys/bus/astribanks/devices/xbus-00/transport is symlinked to ../../../../../../devices/pci0000:00/0000:00:10.4/usb5/5-4 - Move /proc/xpp/XBUS-??/XPD-??/span to /sys/bus/xpds/devices/??:?:?/span - Migrate from /proc/xpp/sync to: /sys/bus/astribanks/drivers/xppdrv/sync - New 'offhook' attribute in: /sys/bus/xpds/devices/??:?:?/offhook * PRI: change the "timing" priority to match the convention used by other PRI cards -- I.e: lower numbers (not 0) have higher priority. * FXO: - Power denial: create two module parameters instead of hard-coded constants (power_denial_safezone, power_denial_minlen). For sites that get non-standard power-denial signals from central office on offhook. - Don't hangup on power-denial, just notify Dahdi and wait for - Fix caller-id detection for the case central office sends it before first ring without any indication before. Asterisk's desicion. Mon, Dec 8 2008 Oron Peled <oron@actcom.co.il> - xpp.r6430 * PRI: - Match our span clocking priorities (in system.conf) to Digium -- this is a reversal of the previous state. Now lower numbers (greater than 0) are better. - Synchronization fixes for PRI ports other than 0. - Fix T1 CRC for some countries (e.g: China). * FXS: fix bug in VMWI detection if using old asterisk which does not provide ZT_VMWI ioctl(). * FXO: - Improve caller_id_style module parameter. This provide a workaround for countries that send this information without any notification (reverse polarity, ring, etc.) - Don't force on-hook upon power-denial. So, loopstart devices would ignore these as expected. * Implement a flow-control to prevent user space (init_card_* scripts) from pressuring our command queue. git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.4@4631 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'kernel/xpp/init_card_2_30')
-rwxr-xr-xkernel/xpp/init_card_2_3073
1 files changed, 45 insertions, 28 deletions
diff --git a/kernel/xpp/init_card_2_30 b/kernel/xpp/init_card_2_30
index ec2ea80..34f8a0b 100755
--- a/kernel/xpp/init_card_2_30
+++ b/kernel/xpp/init_card_2_30
@@ -1,6 +1,9 @@
#! /usr/bin/perl -w
use strict;
+# Make warnings fatal
+local $SIG{__WARN__} = sub { die @_ };
+
#
# Written by Oron Peled <oron@actcom.co.il>
# Copyright (C) 2006, Xorcom
@@ -44,17 +47,15 @@ use Getopt::Std;
my $program = basename("$0");
my $init_dir = dirname("$0");
-BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir", "$init_dir/zconf", "$init_dir/utils/zconf"); }
-use Zaptel::Config::Defaults;
+BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir"); }
+use XppConfig $init_dir;
my $unit_id;
my %opts;
-$ENV{XPP_BASE} = '/proc/xpp';
getopts('o:v:', \%opts);
-my $debug;
-
-my $xpd_name;
+my %settings;
+$settings{debug} = 0;
my $chipregs;
sub logit {
@@ -62,7 +63,7 @@ sub logit {
}
sub debug {
- logit @_ if $debug;
+ logit @_ if $settings{debug};
}
# Arrange for error logging
@@ -71,10 +72,31 @@ if (-t STDERR || $opts{v}) {
main::debug "Interactive startup";
} else {
$unit_id = "$ENV{XBUS_NAME}/UNIT-$ENV{UNIT_NUMBER}";
- $xpd_name = sprintf("XPD-%1d0", $ENV{UNIT_NUMBER});
- $chipregs = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/chipregs";
open (STDERR, "| logger -t $program -p kern.info") || die;
main::debug "Non Interactive startup";
+ foreach my $k (qw(
+ XBUS_NAME
+ XBUS_NUMBER
+ UNIT_NUMBER
+ UNIT_TYPE
+ UNIT_SUBUNITS
+ UNIT_SUBUNITS_DIR
+ XBUS_REVISION
+ XBUS_CONNECTOR
+ XBUS_LABEL)) {
+ unless(defined $ENV{$k}) {
+ logit "Missing ENV{$k}\n";
+ die;
+ }
+ }
+ $chipregs = sprintf "/sys/bus/xpds/devices/%02d:%1d:0/chipregs",
+ $ENV{XBUS_NUMBER}, $ENV{UNIT_NUMBER};
+ if(! -f $chipregs) {
+ my $xpd_name = sprintf("XPD-%1d0", $ENV{UNIT_NUMBER});
+ $chipregs = "/proc/xpp/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+ logit "OLD DRIVER: does not use /sys chipregs. Falling back to /proc"
+ if -f $chipregs;
+ }
}
sub set_output() {
@@ -312,27 +334,22 @@ sub opermode_verify($) {
}
sub read_defaults() {
- # For lab tests
- my $labfile = "$init_dir/genzaptelconf.env";
-
- # Source default files
- $ENV{ZAPTEL_DEFAULTS} = "$labfile" if -r "$labfile";
- my $var_debug = 'DEBUG_INIT_FXO';
- my $var_opermode = 'opermode';
- my ($default_file, %source_defaults) =
- Zaptel::Config::Defaults::source_vars($var_debug, $var_opermode);
- $debug = $source_defaults{$var_debug};
- my $tmp_opermode = $source_defaults{$var_opermode};
- if(defined($tmp_opermode) and $tmp_opermode) {
- # Verify
- my $mode = $opermode_table{$tmp_opermode};
- if(! defined $mode) {
- main::logit "Unknown opermode='$tmp_opermode'";
- die;
+ if(XppConfig::read_config(\%settings)) {
+ main::logit "Defaults from $settings{xppconf}";
+ my $o = $settings{opermode};
+ if(defined($o)) {
+ # Verify
+ my $mode = $opermode_table{$o};
+ if(! defined $mode) {
+ main::logit "Unknown opermode='$o'";
+ die;
+ }
+ $OPERMODE = $o;
+ main::logit "Set OPERMODE = $o";
}
- $OPERMODE = $tmp_opermode;
+ } else {
+ main::logit "No defaults file, use hard-coded defaults.";
}
- main::logit "From $default_file: $var_debug=$debug $var_opermode=$tmp_opermode";
}
package main;