0678cc850c
During handshake we are highjack and reset a LED to the configured trigger afterwards. ltq-xdsl-app need to start after the LED init script, to ensure that the LED init script doesn't re-highjack the LED we are currently using for handshake indication. Drop the comment about the atm dependency. The dependency was fixed quite some time ago by using hotplug scripts for br2684ctl. Signed-off-by: Mathias Kresin <dev@kresin.me>
314 lines
7 KiB
Bash
314 lines
7 KiB
Bash
#!/bin/sh /etc/rc.common
|
|
# Copyright (C) 2012 OpenWrt.org
|
|
|
|
START=97
|
|
USE_PROCD=1
|
|
|
|
EXTRA_COMMANDS="status lucistat"
|
|
EXTRA_HELP=" status Get DSL status information
|
|
lucistat Get status information if lua friendly format"
|
|
|
|
[ -f /lib/functions/lantiq_dsl.sh ] && . /lib/functions/lantiq_dsl.sh
|
|
|
|
#
|
|
# ITU-T G.997.1 (06/2012) - Section 7.3.1.1.1 (xTU transmission system enabling (XTSE))
|
|
# ITU-T G.997.1 Amendment 2 (04/2013) - Section 2.1 - (Vectoring mode enable (VECTORMODE_ENABLE))
|
|
#
|
|
# G.992.1 Annex A
|
|
# G.992.2 Annex A
|
|
# G.992.3 Annex A / L-US1 / L_US-2 / M
|
|
# G.992.5 Annex A / M
|
|
# G.993.2 Annex A/B/C
|
|
# G.993.5 Annex A/B/C
|
|
xtse_xdsl_a="05_01_04_00_4C_01_04_07"
|
|
|
|
# G.992.1 Annex B
|
|
# G.992.3 Annex B
|
|
# G.992.5 Annex B
|
|
# G.993.2 Annex A/B/C
|
|
# G.993.5 Annex A/B/C
|
|
xtse_xdsl_b="10_00_10_00_00_04_00_07"
|
|
|
|
# G.992.1 Annex B
|
|
# G.992.3 Annex B
|
|
# G.992.3 Annex J
|
|
# G.992.5 Annex B
|
|
# G.992.5 Annex J
|
|
# G.993.2 Annex A/B/C
|
|
# G.993.5 Annex A/B/C
|
|
xtse_xdsl_j="10_00_10_40_00_04_01_07"
|
|
|
|
# G.992.1 Annex B
|
|
xtse_xdsl_bdmt="10_00_00_00_00_00_00_00"
|
|
|
|
# G.992.3 Annex B
|
|
xtse_xdsl_b2="00_00_10_00_00_00_00_00"
|
|
|
|
# G.992.5 Annex B
|
|
xtse_xdsl_b2p="00_00_00_00_00_04_00_00"
|
|
|
|
# ANSI T1.413
|
|
xtse_xdsl_at1="01_00_00_00_00_00_00_00"
|
|
|
|
# G.992.2 Annex A
|
|
xtse_xdsl_alite="00_01_00_00_00_00_00_00"
|
|
|
|
# G.992.1 Annex A
|
|
xtse_xdsl_admt="04_00_00_00_00_00_00_00"
|
|
|
|
# G.992.3 Annex A
|
|
xtse_xdsl_a2="00_00_04_00_00_00_00_00"
|
|
|
|
# G.992.5 Annex A
|
|
xtse_xdsl_a2p="00_00_00_00_00_01_00_00"
|
|
|
|
# G.992.3 Annex L
|
|
xtse_xdsl_l="00_00_00_00_0C_00_00_00"
|
|
|
|
# G.992.3 Annex M
|
|
# G.992.5 Annex M
|
|
xtse_xdsl_m="00_00_00_00_40_00_04_00"
|
|
|
|
# G.992.3 Annex M
|
|
xtse_xdsl_m2="00_00_00_00_40_00_00_00"
|
|
|
|
# G.992.5 Annex M
|
|
xtse_xdsl_m2p="00_00_00_00_00_00_04_00"
|
|
|
|
#
|
|
# ITU-T G.994.1 (06/2012) - Table 2 (Mandatory carrier sets)
|
|
#
|
|
|
|
# A43
|
|
tone_adsl_a="0x142" # A43C + J43 + A43
|
|
tone_vdsl_a="0x142" # A43C + J43 + A43
|
|
|
|
# A43 + V43
|
|
tone_adsl_av="0x142" # A43C + J43 + A43
|
|
tone_vdsl_av="0x146" # A43C + J43 + A43 + V43
|
|
|
|
# B43
|
|
tone_adsl_b="0x81" # B43 + B43c
|
|
tone_vdsl_b="0x1" # B43
|
|
|
|
# B43 + V43
|
|
tone_adsl_bv="0x81" # B43 + B43c
|
|
tone_vdsl_bv="0x5" # B43 + V43
|
|
|
|
# create ADSL autoboot script. Used for SNR margin tweak
|
|
autoboot_script() {
|
|
echo "[WaitForConfiguration]={
|
|
locs 0 $1
|
|
}
|
|
|
|
[WaitForLinkActivate]={
|
|
}
|
|
|
|
[WaitForRestart]={
|
|
}
|
|
|
|
[Common]={
|
|
}" > /tmp/dsl.scr
|
|
}
|
|
|
|
lowlevel_cfg() {
|
|
echo "# VRX Low Level Configuration File
|
|
#
|
|
# Parameters must be separated by tabs or spaces.
|
|
# Empty lines and comments will be ignored.
|
|
#
|
|
|
|
# nFilter
|
|
#
|
|
# NA = -1
|
|
# OFF = 0
|
|
# ISDN = 1
|
|
# POTS = 2
|
|
# POTS_2 = 3
|
|
# POTS_3 = 4
|
|
#
|
|
# (dec)
|
|
-1
|
|
|
|
# nHsToneGroupMode nHsToneGroup_A nHsToneGroup_V nHsToneGroup_AV
|
|
#
|
|
# NA = -1 NA = -1 see see
|
|
# AUTO = 0 VDSL2_B43 = 0x0001 nHsToneGroup_A nHsToneGroup_A
|
|
# MANUAL = 1 VDSL2_A43 = 0x0002
|
|
# VDSL2_V43 = 0x0004
|
|
# VDSL1_V43P = 0x0008
|
|
# VDSL1_V43I = 0x0010
|
|
# ADSL1_C43 = 0x0020
|
|
# ADSL2_J43 = 0x0040
|
|
# ADSL2_B43C = 0x0080
|
|
# ADSL2_A43C = 0x0100
|
|
#
|
|
# (dec) (hex) (hex) (hex)
|
|
1 $1 $2 0x0
|
|
|
|
# nBaseAddr nIrqNum
|
|
#
|
|
# (hex) (dec)
|
|
0x1e116000 63
|
|
|
|
# nUtopiaPhyAdr nUtopiaBusWidth nPosPhyParity
|
|
# default(16b) = 0 NA = -1
|
|
# 8-bit = 1 ODD = 0
|
|
# 16-bit = 2
|
|
#
|
|
#
|
|
# (hex) (dec) (dec)
|
|
0xFF 0 0
|
|
|
|
# bNtrEnable
|
|
#
|
|
# (dec)
|
|
0" > /tmp/lowlevel.cfg
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger network
|
|
}
|
|
|
|
start_service() {
|
|
local annex
|
|
local firmware
|
|
local tone
|
|
local tone_adsl
|
|
local tone_vdsl
|
|
local xtse
|
|
local xfer_mode
|
|
local line_mode
|
|
local tc_layer
|
|
local mode
|
|
local lowlevel
|
|
local snr
|
|
|
|
config_load network
|
|
config_get tone dsl tone
|
|
config_get annex dsl annex
|
|
config_get firmware dsl firmware
|
|
config_get xfer_mode dsl xfer_mode
|
|
config_get line_mode dsl line_mode
|
|
config_get snr dsl ds_snr_offset
|
|
|
|
eval "xtse=\"\${xtse_xdsl_$annex}\""
|
|
|
|
case "${xfer_mode}" in
|
|
atm)
|
|
tc_layer="-T1:0x1:0x1_1:0x1:0x1"
|
|
;;
|
|
ptm)
|
|
tc_layer="-T2:0x1:0x1_2:0x1:0x1"
|
|
;;
|
|
esac
|
|
|
|
case "${line_mode}" in
|
|
adsl)
|
|
mode="-M1"
|
|
|
|
# mask out VDSL bits when ADSL is requested
|
|
xtse="${xtse%_*}_00"
|
|
;;
|
|
vdsl)
|
|
mode="-M2"
|
|
|
|
# mask out ADSL bits when VDSL is requested
|
|
xtse="00_00_00_00_00_00_00_${xtse##*_}"
|
|
;;
|
|
esac
|
|
|
|
local annexgpio="/sys/class/gpio/annex"
|
|
if [ -d "${annexgpio}a" ] && [ -d "${annexgpio}b" ]; then
|
|
case "${annex}" in
|
|
a*|l*|m*)
|
|
echo 1 > "${annexgpio}a/value"
|
|
echo 0 > "${annexgpio}b/value"
|
|
;;
|
|
b*|j*)
|
|
echo 0 > "${annexgpio}a/value"
|
|
echo 1 > "${annexgpio}b/value"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if [ -z "${firmware}" ]; then
|
|
# search for the firmware provided by dsl-vrx200-firmware-xdsl-*
|
|
if grep -qE "system type.*: (VR9|xRX200)" /proc/cpuinfo; then
|
|
case "${annex}" in
|
|
a*|l*|m*)
|
|
if [ -f "/lib/firmware/lantiq-vrx200-a.bin" ]; then
|
|
firmware="/lib/firmware/lantiq-vrx200-a.bin"
|
|
elif [ -f "/tmp/lantiq-vrx200-a.bin" ]; then
|
|
firmware="/tmp/lantiq-vrx200-a.bin"
|
|
elif [ -f "/lib/firmware/lantiq-vrx200-b.bin" ] && [ -f "/lib/firmware/lantiq-vrx200-b-to-a.bspatch" ]; then
|
|
bspatch /lib/firmware/lantiq-vrx200-b.bin \
|
|
/tmp/lantiq-vrx200-a.bin \
|
|
/lib/firmware/lantiq-vrx200-b-to-a.bspatch
|
|
firmware="/tmp/lantiq-vrx200-a.bin"
|
|
else
|
|
echo "firmware for annex a not found"
|
|
return 1
|
|
fi
|
|
;;
|
|
b*|j*)
|
|
if [ -f "/lib/firmware/lantiq-vrx200-b.bin" ]; then
|
|
firmware="/lib/firmware/lantiq-vrx200-b.bin"
|
|
elif [ -f "/tmp/lantiq-vrx200-b.bin" ]; then
|
|
firmware="/tmp/lantiq-vrx200-b.bin"
|
|
elif [ -f "/lib/firmware/lantiq-vrx200-a.bin" ] && [ -f "/lib/firmware/lantiq-vrx200-a-to-b.bspatch" ]; then
|
|
bspatch /lib/firmware/lantiq-vrx200-a.bin \
|
|
/tmp/lantiq-vrx200-b.bin \
|
|
/lib/firmware/lantiq-vrx200-a-to-b.bspatch
|
|
firmware="/tmp/lantiq-vrx200-b.bin"
|
|
else
|
|
echo "firmware for annex b not found"
|
|
return 1
|
|
fi
|
|
;;
|
|
*)
|
|
echo "annex type not supported use a or b"
|
|
return 1
|
|
;;
|
|
esac
|
|
fi
|
|
fi
|
|
|
|
[ -z "${firmware}" ] && firmware=/lib/firmware/vdsl.bin
|
|
[ -f "${firmware}" ] || {
|
|
echo failed to find $firmware
|
|
return 1
|
|
}
|
|
|
|
eval "tone_adsl=\"\${tone_adsl_$tone}\""
|
|
eval "tone_vdsl=\"\${tone_vdsl_$tone}\""
|
|
[ -n "${tone_adsl}" ] && [ -n "${tone_vdsl}" ] && {
|
|
lowlevel_cfg "${tone_adsl}" "${tone_vdsl}"
|
|
lowlevel="-l /tmp/lowlevel.cfg"
|
|
}
|
|
|
|
[ -z "${snr}" ] || {
|
|
# for SNR offset setting
|
|
autoboot_script "$snr"
|
|
autoboot="-a /tmp/dsl.scr -A /tmp/dsl.scr"
|
|
}
|
|
|
|
procd_open_instance
|
|
procd_set_param command /sbin/vdsl_cpe_control \
|
|
-i$xtse \
|
|
-n /sbin/dsl_notify.sh \
|
|
-f ${firmware} \
|
|
$lowlevel \
|
|
${mode} \
|
|
${tc_layer} \
|
|
$autoboot
|
|
procd_close_instance
|
|
}
|
|
|
|
stop_service() {
|
|
# do not use dsl_cmd to not block when this is locked up by some other proess
|
|
echo quit > /tmp/pipe/dsl_cpe0_cmd
|
|
DSL_NOTIFICATION_TYPE="DSL_INTERFACE_STATUS" \
|
|
DSL_INTERFACE_STATUS="DOWN" \
|
|
/sbin/dsl_notify.sh
|
|
}
|