111 lines
1.8 KiB
Plaintext
111 lines
1.8 KiB
Plaintext
|
#! /bin/sh
|
||
|
#
|
||
|
# xpp_debug: Turn on/off debugging flags via /sys/module/*/parameters/debug
|
||
|
#
|
||
|
|
||
|
modules="xpp xpp_usb xpd_fxs xpd_fxo xpd_bri xpd_pri"
|
||
|
dbg_names="DEFAULT PCM LEDS SYNC SIGNAL PROC REGS DEVICES COMMANDS"
|
||
|
|
||
|
usage() {
|
||
|
echo 1>&2 "Usage: $0 [module_name] [[-]flags...]"
|
||
|
echo 1>&2 " module_name => $modules"
|
||
|
echo 1>&2 " flags => NONE $dbg_names ANY"
|
||
|
echo 1>&2 ""
|
||
|
echo 1>&2 " Example: $0 xpp ANY -PCM -LEDS"
|
||
|
echo 1>&2 ""
|
||
|
}
|
||
|
|
||
|
sysfs_name() {
|
||
|
f=''
|
||
|
if [ -f "/sys/module/$1/parameters/debug" ]; then
|
||
|
f="/sys/module/$1/parameters/debug"
|
||
|
elif [ -f "/sys/module/$1/debug" ]; then
|
||
|
f="/sys/module/$1/debug"
|
||
|
fi
|
||
|
echo "$f"
|
||
|
}
|
||
|
|
||
|
sysfs_value() {
|
||
|
f=`sysfs_name "$1"`
|
||
|
if [ "$f" != "" ]; then
|
||
|
cat "$f"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
show_debug() {
|
||
|
usage
|
||
|
for i in $modules
|
||
|
do
|
||
|
f=`sysfs_name "$i"`
|
||
|
if [ -f "$f" ]; then
|
||
|
val=`cat $f`
|
||
|
j=0
|
||
|
list=''
|
||
|
for n in $dbg_names
|
||
|
do
|
||
|
if (( val & (1 << j) ))
|
||
|
then
|
||
|
list="$list $n"
|
||
|
fi
|
||
|
let j++
|
||
|
done
|
||
|
if [ "$list" = "" ]; then
|
||
|
list=' NONE'
|
||
|
fi
|
||
|
echo "$i $list"
|
||
|
fi
|
||
|
done
|
||
|
}
|
||
|
|
||
|
calc_debug() {
|
||
|
val="$1"
|
||
|
shift
|
||
|
for wanted in $*
|
||
|
do
|
||
|
j=0
|
||
|
found=0
|
||
|
for n in $dbg_names
|
||
|
do
|
||
|
if [ "$wanted" = "$n" ]; then
|
||
|
(( val |= (1 << j) ))
|
||
|
found=1
|
||
|
elif [ "$wanted" = -"$n" ]; then
|
||
|
(( val &= ~(1 << j) ))
|
||
|
found=1
|
||
|
elif [ "$wanted" = "ANY" ]; then
|
||
|
(( val = ~0 ))
|
||
|
found=1
|
||
|
elif [ "$wanted" = -"ANY" -o "$wanted" = "NONE" ]; then
|
||
|
(( val = 0 ))
|
||
|
found=1
|
||
|
fi
|
||
|
let j++
|
||
|
done
|
||
|
if [ "$found" -eq 0 ]; then
|
||
|
echo >&2 "$0: Unknown debug flag '$wanted'"
|
||
|
exit 1
|
||
|
fi
|
||
|
done
|
||
|
echo $val
|
||
|
}
|
||
|
|
||
|
if [ "$#" = 0 ]; then
|
||
|
show_debug
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
module="$1"
|
||
|
shift
|
||
|
|
||
|
if ! echo "$modules" | grep -w "$module" > /dev/null; then
|
||
|
echo >&2 "$0: Unknown module $module"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
oldval=`sysfs_value "$module"`
|
||
|
val=`calc_debug "$oldval" $*`
|
||
|
file=`sysfs_name $module`
|
||
|
|
||
|
echo "$val" > "$file"
|
||
|
show_debug
|