From d7e54a785544ac40abc4a88383df3a913ca466e8 Mon Sep 17 00:00:00 2001 From: tzafrir Date: Tue, 13 May 2008 21:08:09 +0000 Subject: xpp r5723: Includes, among others: * New firmware protocol version: 3.0 . * New numbers for the device types: (e.g. in card_init* scripts) - FXS: 1 (was: 3) - FXO: 2 (was: 4) - BRI: 3 (was: 6 for TE, 7 for NT) - PRI: 4 (was: 9) * Init scripts of FXS and FXO modules are now written in Perl as well (be sure to have File::Basename, e.g: perl-modules in Debian). * calibrate_slics merged into init_card_1_30 . * Module parameter print_dbg replaced with debug . Same meaning. * init_fxo_modes removed: content moved into init_card_2_30, verified at build time. * Code tested with sparse. Most warnings were fixed. * Set ZT_SIG_DACS for the bchans in the PRI and BRI modules to not get ignored by ztscan. * Handle null config_desc we get from some crazy USB controllers. * genzaptelconf: Fix reporting of empty slots in list mode. * xpp_blink can now blink a single analog port. * "slics" has been renamed "chipregs". * Fixed a small typo in fpga_load(8). * Fixed bashism in xpp_fxloader. Merged revisions 4264 via svnmerge from http://svn.digium.com/svn/zaptel/branches/1.2 git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.4@4266 5390a7c7-147a-4af0-8ec9-7488f05a26cb --- kernel/xpp/init_card_9_29 | 358 ---------------------------------------------- 1 file changed, 358 deletions(-) delete mode 100755 kernel/xpp/init_card_9_29 (limited to 'kernel/xpp/init_card_9_29') diff --git a/kernel/xpp/init_card_9_29 b/kernel/xpp/init_card_9_29 deleted file mode 100755 index dd3b0a5..0000000 --- a/kernel/xpp/init_card_9_29 +++ /dev/null @@ -1,358 +0,0 @@ -#! /usr/bin/perl -w -use strict; - -# -# $Id$ -# - -# -# Written by Oron Peled -# Copyright (C) 2007, Xorcom -# -# All rights reserved. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# See the file LICENSE in the top level of this tarball. -# - -# This script is run from the xpp kernel module upon detection -# of a new XPD. -# -# Expects the following environment variables to be set: -# XPD_BUS - bus name -# XBUS_CONNECTOR - bus connector id string -# XPD_NAME - xpd name -# XPD_UNIT - xpd unit number -# XPD_TYPE - xpd type number (from protocol reply): -# 3 - FXS -# 4 - FXO -# 6 - BRI_TE -# 7 - BRI_NT -# 8 - PRI_TE -# 9 - PRI_NT -# XPD_REVISION - xpd revision number -# -# Output data format: -# - An optional comment start with ';' or '#' until the end of line -# - Optional Blank lines are ignored -# - Fields are whitespace separated (spaces or tabs) -# -# The fields are (in command line order): -# 1. CHIP select in decimal (ignored, taken from 3 LSB's of subunit number) -# 2. Command word: -# - RD Read Direct register. -# - WD Write Direct register. -# 3. Register number in hexadecimal. -# 4. Subregister number in hexadecimal. (for RS and WS commands). -# 5. Data byte in hexadecimal. (for WD and WS commands only). -# - -package main; -use File::Basename; - -my $program = basename("$0"); -my $init_dir = dirname("$0"); -my $unit_id; - -sub logit { - print STDERR "$unit_id: @_\n"; -} - -# Arrange for error logging -if (-t STDERR) { - $unit_id = 'Interactive'; - logit "Interactive startup\n"; -} else { - $unit_id = "$ENV{XPD_BUS}/$ENV{XPD_NAME}"; - open (STDERR, "| logger -t $program -p kern.info") || die; - logit "Non Interactive startup\n"; -} - -package PRI; - -sub gen { - my $fmt = shift; - $| = 1; - printf "$fmt\n", @_; -} - -package PRI::Port; - -sub new { - my $pack = shift; - my $port = { @_ }; - bless $port, $pack; -} - -package main; -use Getopt::Std; -BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/zconf"); } -use Zaptel::Config::Defaults; - -my %opts; -getopts('o:', \%opts); - -$ENV{XPP_BASE} = '/proc/xpp'; -#my $cmd = "$ENV{XPP_BASE}/$ENV{XPD_BUS}/command"; -my $output; -if ($opts{o}) { - $output = $opts{o}; -} else { - $ENV{XPD_BUS} || die "Missing XPD_BUS environment variable\n"; - $ENV{XPD_NAME} || die "Missing XPD_NAME environment variable\n"; - $ENV{XPD_TYPE} || die "Missing XPD_TYPE environment variable\n"; - $ENV{XPD_REVISION} || die "Missing XPD_REVISION environment variable\n"; - $ENV{XBUS_CONNECTOR} || die "Missing XBUS_CONNECTOR environment variable\n"; - $output = "$ENV{XPP_BASE}/$ENV{XPD_BUS}/$ENV{XPD_NAME}/slics"; -} - -sub write_pri_info { - my $pri_type = shift || die "Missing pri_type parameter"; - my $pri_proto = shift || die "Missing pri_proto parameter"; - my $info = "$ENV{XPP_BASE}/$ENV{XPD_BUS}/$ENV{XPD_NAME}/pri_info"; - - open(INFO, ">$info") || die "Failed to open '$info': $!\n"; - print INFO "$pri_type $pri_proto\n" || die "Failed writing to '$info': $!\n"; - close INFO || die "Failed during close of '$info': $!\n"; -} - -my @PRI_SETUP; - -sub set_defaults { - my @pri_specs; - my $match; - my $setup; - # For lab tests - my $labfile = "${0}.setup"; - - # Source default files - $ENV{ZAPTEL_DEFAULTS} = "$labfile" if -r "$labfile"; - my $setup_var = 'XPP_PRI_SETUP'; - my $setup_string; - my ($default_file, %source_defaults) = - Zaptel::Config::Defaults::source_vars($setup_var); - $setup_string = $source_defaults{$setup_var}; - $setup_string =~ s/^\s+//; # trim - $setup_string =~ s/\s+$//; # trim - $setup_string =~ s/\s+/\n/g; # cannonical spaces - logit "From $default_file: $setup_var=\n$setup_string\n"; - @pri_specs = split(/\s+/, $setup_string); - push(@pri_specs, 'NUM/*=TE,E1'); # Fall back default (last) - logit "pri_specs: @pri_specs"; -SPEC: - for(my $i = 0; $i < @pri_specs; $i++) { - my $spec = $pri_specs[$i]; - ($match, $setup) = split(/=/, $spec); - next unless defined $match and defined $setup; - # Convert "globs" to regex - $match =~ s/\*/.*/g; - $match =~ s/\?/./g; - #logit "match: $match"; - my @patlist = ( - "CONNECTOR/$ENV{XBUS_CONNECTOR}/$ENV{XPD_NAME}", - "NUM/$ENV{XPD_BUS}/$ENV{XPD_NAME}" - ); - foreach my $pattern (@patlist) { - #logit "testmatch: $pattern =~ $match"; - if($pattern =~ $match) { - logit "MATCH($i): '$match' setup=$setup"; - last SPEC; - } - } - } - die "No setup matching $ENV{XPD_BUS}/$ENV{XPD_NAME}\n" unless defined $setup; - @PRI_SETUP = split(/,/, $setup); - die "Bad setup string '$setup'\n" unless @PRI_SETUP; -} - -set_defaults; - -open(REG, ">$output") || die "Failed to open '$output': $!\n"; -select REG; - -logit "Starting '$0'"; - -PRI::gen "#--------------------------- start"; - -# only one of the following loopbacks can be activated in the same time -my $LIM1_RL = 0 << 1; # RL (Remote Loopback) -my $lim1 = 0xB0 | $LIM1_RL; - -my $subunits_num = 4; -my $subunit = $ENV{XPD_SUBUNIT}; - -if($subunit eq 0) { - # Tuning of clocking unit to the 16.384 MHz reference frequence - # by setting Global Clock Mode registers (GCM[1:8]), same for E1 and T1/J1 - PRI::gen "0 WD 92 00"; # GCM1 - PRI::gen "0 WD 93 18"; # GCM2 - PRI::gen "0 WD 94 FB"; # GCM3 - PRI::gen "0 WD 95 0B"; # GCM4 - PRI::gen "0 WD 96 01"; # GCM5 - PRI::gen "0 WD 97 0B"; # GCM6 - PRI::gen "0 WD 98 DB"; # GCM7 - PRI::gen "0 WD 99 DF"; # GCM8 - - for(my $i = 0; $i < $subunits_num; $i++) { - PRI::gen "0 WS 26 $i BD"; # XPM0: Pulse Shape Programming for R1=18Ohms (0x54) - PRI::gen "0 WS 27 $i 03"; # XPM1: ...3V Pulse Level at the line (0x02) - PRI::gen "0 WS 28 $i 00"; # XPM2: ~XLT (transmit line is not in the high impedance state) - - # if (unchannelized) - #PRI::gen "0 WS 1F $i 22"; # LOOP (Channel Looback): - # ECLB (Enable Channel Loop-Back) - # CLA (Channel Address) - PRI::gen "0 WS 2B $i EF"; # IDL (Idle): - # If channel loopback is enabled than transmit this code on the outgoing - PRI::gen "0 WS 1F $i 00"; # LOOP (Channel Looback): - #if($i eq 0){ - # PRI::gen "0 WS 1F $i 00"; # LOOP (Channel Looback): - # # channels (XL1/XL2) - #}else { - # PRI::gen "0 WS 1F $i 20"; # LOOP (Channel Looback): - #} - - PRI::gen "0 WS 37 $i %02X", $lim1; - # LIM1: ~RL (Remote Loop bit 0x02), - # ~DRS (Dual Rail Select, latch receive data while trasmit), - # RIL1, RIL0 (Receive Input Treshold 0.62 V), - # CLOS (Clear data in case of LOS) - PRI::gen "0 WS 3A $i 20"; # LIM2: SLT1, SLT0 = 01 - # (Receiver Slicer Threshold, the receive slicer - # generates a mark (digital one) if the voltage at - # RL1/2 exceeds 50% of the peak amplitude, - # default, recommended in E1 mode). - - PRI::gen "0 WS 38 $i 0A"; # PCD: (Pulse Count Detection, LOS Detection after 176 consecutive 0s) - PRI::gen "0 WS 39 $i 15"; # PCR: (Pulse Count Recovery, LOS Recovery after 22 ones in PCD interval) - - # Configure system interface - PRI::gen "0 WS 3E $i C2"; # SIC1: SSC1 (System clock ) is 8.192 Mhz, - # SSD1 (System Data rate) is 8.192 Mbit/s, - # ~BIM (Byte interleaved mode), - # XBS (Transmit Buffer Size) is 2 frames - PRI::gen "0 WS 40 $i 04"; # SIC3: Edges for capture, Synchronous Pulse Receive @Rising Edge - PRI::gen "0 WS 41 $i 04"; # CMR4: RCLK is 8.192 MHz - PRI::gen "0 WS 43 $i 04"; # CMR5: TCLK is 8.192 MHz - PRI::gen "0 WS 44 $i 34"; # CMR6: Receive reference clock generated by channel 1, - # RCLK is at 8.192 Mhz dejittered, Clock recovered from the line - # TCLK is at 8.192 MHz is de-jittered by DCO-R to drive a6.176 MHz - # clock on RCLK.*/ - - PRI::gen "0 WS 20 $i 9F"; # XSW: XSIS (Spare Bit For International Use fixed to 1), - # XY0, XY1, XY2, XY3, XY4 (Y0, Y1 and Y3-Bits fixed to 1) - - # cas = 0x1c; - # if (!(lineconfig & ZT_CONFIG_CCS)) - # cas |= 0x40; - - PRI::gen "0 WS 22 $i 00"; # XC0: (Transmit Counter Offset = 497/T=2) - PRI::gen "0 WS 23 $i 04"; # XC1: - - PRI::gen "0 WS 24 $i 00"; # RC0: (Receive Counter Offset = 497/T=2) - PRI::gen "0 WS 25 $i 05"; # RC1: - - my $sic2 = sprintf("%x", 0x00 | ($i << 1)); - - PRI::gen "0 WS 3F $i $sic2"; # SIC2: No FFS, no center receive elastic buffer, data active at phase ($sic >> 1) - - # enable the following interrupt sources - PRI::gen "0 WS 16 $i 00"; # IMR2 (Interrupt Mask Register2): Enable ALL - - PRI::gen "0 WS 17 $i 3F"; # IMR3 ~ES, ~SEC (Enable ES and SEC interrupts) - PRI::gen "0 WS 18 $i 00"; # IMR4: Enable ALL - - PRI::gen "0 WS 08 $i 04"; # IPC: SYNC is 8 Khz - - PRI::gen "0 WS 02 $i 51"; # CMDR (Command Register): RRES, XRES, SRES (Receiver/Transmitter reset) - PRI::gen "0 WS 02 $i 00"; # CMDR - - - # Configure interrupts - PRI::gen "0 WS 46 $i 40"; # GCR: Interrupt on Activation/Deactivation of AIX, LOS - - PRI::gen "0 WS 45 $i 00"; # CMR2: External sources for SYPR, SCLKR, SYPX, SCLKX for TX and RX. - #PRI::gen "0 WS 22 $i 00"; # XC0: Normal operation of Sa-bits - #PRI::gen "0 WS 23 $i 04"; # XC1: X=4 => T=4-X=0 offset - #PRI::gen "0 WS 24 $i 00"; # RC0: 0 offset - #PRI::gen "0 WS 25 $i 00"; # RC1: Remaining part of RC0 - - # Configure ports - PRI::gen "0 WD 85 80"; # GPC1 (Global Port Configuration 1): - #PRI::gen "0 WD 85 00"; # GPC1 (Global Port Configuration 1): - # SMM (System Interface Multiplex Mode) - PRI::gen "0 WS 80 $i 00"; # PC1: SYPR/SYPX provided to RPA/XPA inputs - - PRI::gen "0 WS 84 $i 31"; # PC5: XMFS active low, SCLKR is input, RCLK is output (unused) - PRI::gen "0 WS 86 $i 03"; # PC6: CLK1 is Tx Clock output, CLK2 is 8.192 Mhz from DCO-R - PRI::gen "0 WS 3B $i 00"; # Clear LCR1 - Loop Code Register 1 - - # printk("TE110P: Successfully initialized serial bus for card\n"); - - # Initialize PCM and SIG regs - PRI::gen "0 WS A0 $i 00"; # TSEO (Time Slot Even/Odd Select) - PRI::gen "0 WS A1 $i FF"; # TSBS (Time Slot Bit Select)- only selected bits are used for HDLC channel 1 - # in selected time slots - PRI::gen "0 WS 03 $i 89"; # Mode Register: - # MDS (Mode Select) = 100 (No address comparison) - # HRAC (Receiver Active - HDLC channel 1) - # RFT2 (HDLC Receive FIFO is 64 byte deep) - PRI::gen "0 WS 09 $i 18"; # CCR1 (Common Configuration Register1) - # EITS (Enable Internal Time Slot 0 to 31 Signalling) - # ITF (Interframe Time Fill) - PRI::gen "0 WS 0A $i 04"; # CCR2 (Common Configuration Register2) - # RCRC (enable CRC - HDLC channel 1enable CRC - HDLC channel 1) - PRI::gen "0 WS 0C $i 00"; # RTR1 (Receive Time Slot register 1) - PRI::gen "0 WS 0D $i 00"; # RTR2 (Receive Time Slot register 2) - PRI::gen "0 WS 0E $i 00"; # RTR3 (Receive Time Slot register 3), TS16 (Enable time slot 16) - PRI::gen "0 WS 0F $i 00"; # RTR4 (Receive Time Slot register 4) - - PRI::gen "0 WS 10 $i 00"; # TTR1 (Transmit Time Slot register 1) - PRI::gen "0 WS 11 $i 00"; # TTR2 (Transmit Time Slot register 2) - PRI::gen "0 WS 12 $i 00"; # TTR3 (Transmit Time Slot register 3), TS16 (Enable time slot 16) - PRI::gen "0 WS 13 $i 00"; # TTR4 (Transmit Time Slot register 4) - - # configure the best performance of the Bipolar Violation detection for all four channels - PRI::gen "0 WS BD $i 00"; # BFR (Bugfix Register): ~BVP (Bipolar Violations), - # use Improved Bipolar Violation Detection instead - } - PRI::gen "0 WD BB FF"; # REGFP - PRI::gen "0 WD BC AC"; # REGFD - PRI::gen "0 WD BB 2B"; # REGFP - PRI::gen "0 WD BC 00"; # REGFD - PRI::gen "0 WD BB AB"; # REGFP - PRI::gen "0 WD BC 2A"; # REGFD - PRI::gen "0 WD BB FF"; # REGFP - PRI::gen "0 WD BC AA"; # REGFD - PRI::gen "0 WD BB 29"; # REGFP - PRI::gen "0 WD BC FF"; # REGFD - PRI::gen "0 WD BB A9"; # REGFP - PRI::gen "0 WD BC 28"; # REGFD - PRI::gen "0 WD BB 00"; # REGFP - PRI::gen "0 WD BC A8"; # REGFD - PRI::gen "0 WD BB 27"; # REGFP - PRI::gen "0 WD BC FF"; # REGFD - PRI::gen "0 WD BB A7"; # REGFP - PRI::gen "0 WD BC 00"; # REGFD - -# PRI::gen "0 WS 80 00 00"; # PC1 (Port configuration 1): RPB_1.SYPR , XPB_1.SYPX - PRI::gen "0 WS 81 00 0B"; # PC2 (Port configuration 2): RPB_1.GPOH (ResetID ), XPB_1.GPOL (MUX_SEL0) - PRI::gen "0 WS 82 00 9B"; # PC3 (Port configuration 3): RPC_1.GPI (nConfig0), XPC_1.GPOL (MUX_SEL1) - PRI::gen "0 WS 83 00 9B"; # PC4 (Port configuration 4): RPD_1.GPI (nConfig1), XPD_1.GPOL (MUX_SEL2) -} - - -#------------------------------------------- Instance detection - -logit "Ending '$0'"; - -close REG; - -write_pri_info @PRI_SETUP; - -close STDERR; -exit 0; -- cgit v1.2.3