mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 17:18:59 +00:00
fa5688c432
I do not know if this causes any problems now, but we should not set it, because it is reserved. Some more recent versions of the Lantiq DSL API driver and Control is checking if only valid bits are set. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 48948
283 lines
6.5 KiB
Bash
283 lines
6.5 KiB
Bash
#!/bin/sh /etc/rc.common
|
|
# Copyright (C) 2012 OpenWrt.org
|
|
|
|
# needs to start before the atm layer which starts at 50
|
|
START=48
|
|
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
|
|
|
|
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 mode
|
|
local lowlevel
|
|
|
|
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
|
|
|
|
eval "xtse=\"\${xtse_xdsl_$annex}\""
|
|
|
|
[ -z "${xfer_mode}" ] && xfer_mode=ptm
|
|
|
|
case "${xfer_mode}" in
|
|
atm)
|
|
LOAD=ltq_atm_vr9
|
|
UNLOAD=ltq_ptm_vr9
|
|
|
|
# in most cases atm is used on top of adsl
|
|
[ -z "${line_mode}" ] && line_mode=adsl
|
|
;;
|
|
*)
|
|
LOAD=ltq_ptm_vr9
|
|
UNLOAD=ltq_atm_vr9
|
|
|
|
# in most cases ptm is used on top of vdsl
|
|
[ -z "${line_mode}" ] && line_mode=vdsl
|
|
;;
|
|
esac
|
|
|
|
case "${line_mode}" in
|
|
adsl)
|
|
mode=1
|
|
|
|
# mask out VDSL bits when ATM is requested
|
|
xtse="${xtse%_*}_00"
|
|
;;
|
|
*)
|
|
mode=2
|
|
;;
|
|
esac
|
|
|
|
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"
|
|
}
|
|
|
|
procd_open_instance
|
|
procd_set_param command /sbin/vdsl_cpe_control_wrapper \
|
|
-i$xtse \
|
|
-n /sbin/dsl_notify.sh \
|
|
-f ${firmware} \
|
|
$lowlevel \
|
|
-M ${mode}
|
|
procd_append_param env "LOAD=$LOAD" "UNLOAD=$UNLOAD"
|
|
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
|
|
}
|