summaryrefslogtreecommitdiff
path: root/kernel/xpp/init_card_1_30
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/xpp/init_card_1_30')
-rwxr-xr-xkernel/xpp/init_card_1_3067
1 files changed, 42 insertions, 25 deletions
diff --git a/kernel/xpp/init_card_1_30 b/kernel/xpp/init_card_1_30
index 9b01ec8..fafd2c1 100755
--- a/kernel/xpp/init_card_1_30
+++ b/kernel/xpp/init_card_1_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,36 +47,57 @@ use Getopt::Std;
my $program = basename("$0");
my $init_dir = dirname("$0");
-BEGIN { $init_dir = dirname($0); unshift(@INC, "$init_dir", "$init_dir/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:', \%opts);
-my $debug;
-my $skip_calib;
-
-my $xpd_name = sprintf("XPD-%1d0", $ENV{UNIT_NUMBER});
-my $chipregs = "$ENV{XPP_BASE}/$ENV{XBUS_NAME}/$xpd_name/chipregs";
+my %settings;
+$settings{debug} = 0;
+$settings{fxs_skip_calib} = 0;
+my $chipregs;
sub logit {
print STDERR "$unit_id: @_\n";
}
sub debug {
- logit @_ if $debug;
+ logit @_ if $settings{debug};
}
# Arrange for error logging
if (-t STDERR) {
$unit_id = 'Interactive';
- logit "Interactive startup";
+ main::debug "Interactive startup";
} else {
$unit_id = "$ENV{XBUS_NAME}/UNIT-$ENV{UNIT_NUMBER}";
open (STDERR, "| logger -t $program -p kern.info") || die;
- logit "Non Interactive startup";
+ 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() {
@@ -87,7 +111,7 @@ sub set_output() {
}
open(REG, ">$output") || die "Failed to open '$output': $!\n";
my $oldfh = select REG;
- print "# Setting output\n" if $opts{o};
+ main::logit "# Setting output" if $opts{o};
return $oldfh;
}
@@ -372,18 +396,11 @@ sub calibrate_slics() {
}
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_FXS';
- my $var_skip_calib = 'INIT_FXS_SKIP_CALIB';
- my ($default_file, %source_defaults) =
- Zaptel::Config::Defaults::source_vars($var_debug, $var_skip_calib);
- $debug = $source_defaults{$var_debug};
- $skip_calib = $source_defaults{$var_skip_calib};
- main::logit "From $default_file: $var_debug=$debug $var_skip_calib=$skip_calib";
+ if(XppConfig::read_config(\%settings)) {
+ main::logit "Defaults from $settings{xppconf}";
+ } else {
+ main::logit "No defaults file, use hard-coded defaults.";
+ }
}
package main;
@@ -396,7 +413,7 @@ FXS::init_indirect_registers();
main::debug "after init_indirect_registers";
FXS::init_early_direct_regs();
main::debug "after init_early_direct_regs";
-if($skip_calib) {
+if($settings{fxs_skip_calib}) {
main::logit "==== WARNING: SKIPPED SLIC CALIBRATION =====";
} else {
FXS::calibrate_slics;