mpc85xx: add user-space support for the TL-WDR4900 v1
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> SVN-Revision: 35733
This commit is contained in:
parent
bd2c77b264
commit
4da13625d5
9 changed files with 320 additions and 0 deletions
5
target/linux/mpc85xx/base-files.mk
Normal file
5
target/linux/mpc85xx/base-files.mk
Normal file
|
@ -0,0 +1,5 @@
|
|||
define Package/base-files/install-target
|
||||
rm -f $(1)/etc/config/network
|
||||
endef
|
||||
|
||||
|
35
target/linux/mpc85xx/base-files/etc/diag.sh
Executable file
35
target/linux/mpc85xx/base-files/etc/diag.sh
Executable file
|
@ -0,0 +1,35 @@
|
|||
#!/bin/sh
|
||||
# Copyright (C) 2013 OpenWrt.org
|
||||
|
||||
. /lib/functions/leds.sh
|
||||
. /lib/mpc85xx.sh
|
||||
|
||||
get_status_led() {
|
||||
case $(mpc85xx_board_name) in
|
||||
tl-wdr4900-v1)
|
||||
status_led="tp-link:blue:system"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
set_state() {
|
||||
get_status_led
|
||||
|
||||
case "$1" in
|
||||
preinit)
|
||||
insmod leds-gpio
|
||||
insmod ledtrig-default-on
|
||||
insmod ledtrig-timer
|
||||
|
||||
status_led_blink_preinit
|
||||
;;
|
||||
|
||||
failsafe)
|
||||
status_led_blink_failsafe
|
||||
;;
|
||||
|
||||
done)
|
||||
status_led_on
|
||||
;;
|
||||
esac
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
#!/bin/sh
|
||||
|
||||
FW_FILE="/lib/firmware/$FIRMWARE"
|
||||
|
||||
ath9k_eeprom_die() {
|
||||
echo "ath9k eeprom: " "$*" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
ath9k_eeprom_extract() {
|
||||
local part=$1
|
||||
local offset=$2
|
||||
local count=$3
|
||||
local mtd
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
mtd=$(find_mtd_chardev $part)
|
||||
[ -n "$mtd" ] || \
|
||||
ath9k_eeprom_die "no mtd device found for partition $part"
|
||||
|
||||
dd if=$mtd bs=$offset skip=1 count=1 2>/dev/null | dd of=$FW_FILE bs=$count count=1 2>/dev/null || \
|
||||
ath9k_eeprom_die "failed to extract from $mtd"
|
||||
}
|
||||
|
||||
tpl_set_wireless_mac()
|
||||
{
|
||||
local offset=$1
|
||||
local mac
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
mac=$(mtd_get_mac_binary u-boot 326656)
|
||||
mac=$(macaddr_add $mac $offset)
|
||||
|
||||
macaddr_2bin $mac | dd bs=1 count=6 seek=2 conv=notrunc of=$FW_FILE 2>/dev/null
|
||||
}
|
||||
|
||||
[ -e $FW_FILE ] && exit 0
|
||||
|
||||
. /lib/mpc85xx.sh
|
||||
|
||||
board=$(mpc85xx_board_name)
|
||||
|
||||
case "$FIRMWARE" in
|
||||
"pci_wmac0.eeprom")
|
||||
case $board in
|
||||
tl-wdr4900-v1)
|
||||
ath9k_eeprom_extract "caldata" 4096 2048
|
||||
tpl_set_wireless_mac 0
|
||||
;;
|
||||
*)
|
||||
ath9k_eeprom_die "board $board is not supported yet"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
|
||||
"pci_wmac1.eeprom")
|
||||
case $board in
|
||||
tl-wdr4900-v1)
|
||||
ath9k_eeprom_extract "caldata" 20480 2048
|
||||
tpl_set_wireless_mac -1
|
||||
;;
|
||||
*)
|
||||
ath9k_eeprom_die "board $board is not supported yet"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
2
target/linux/mpc85xx/base-files/etc/inittab
Normal file
2
target/linux/mpc85xx/base-files/etc/inittab
Normal file
|
@ -0,0 +1,2 @@
|
|||
::sysinit:/etc/init.d/rcS S boot
|
||||
::shutdown:/etc/init.d/rcS K shutdown
|
27
target/linux/mpc85xx/base-files/etc/uci-defaults/00_inittab-console-fixup
Executable file
27
target/linux/mpc85xx/base-files/etc/uci-defaults/00_inittab-console-fixup
Executable file
|
@ -0,0 +1,27 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2011 OpenWrt.org
|
||||
#
|
||||
|
||||
enable_console_login() {
|
||||
local cons=$1
|
||||
local initline="$cons::askfirst:/bin/ash --login"
|
||||
|
||||
grep -qs "^$initline" /etc/inittab || {
|
||||
echo "$initline" >> /etc/inittab
|
||||
sync
|
||||
kill -HUP 1
|
||||
}
|
||||
}
|
||||
|
||||
inittab_console_fixup() {
|
||||
for cons in ttyS0 ttyS1; do
|
||||
grep -qs "console=$cons" /proc/cmdline && {
|
||||
enable_console_login $cons
|
||||
}
|
||||
done
|
||||
}
|
||||
|
||||
inittab_console_fixup
|
||||
|
||||
exit 0
|
49
target/linux/mpc85xx/base-files/etc/uci-defaults/02_network
Executable file
49
target/linux/mpc85xx/base-files/etc/uci-defaults/02_network
Executable file
|
@ -0,0 +1,49 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2013 OpenWrt.org
|
||||
#
|
||||
|
||||
tplink_set_mac()
|
||||
{
|
||||
local cfg=$1
|
||||
local offset=$2
|
||||
local mac
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
mac=$(mtd_get_mac_binary u-boot 326656)
|
||||
mac=$(macaddr_add $mac $offset)
|
||||
|
||||
ucidef_set_interface_macaddr $cfg $mac
|
||||
}
|
||||
|
||||
|
||||
[ -e /etc/config/network ] && exit 0
|
||||
|
||||
touch /etc/config/network
|
||||
|
||||
. /lib/functions/uci-defaults.sh
|
||||
. /lib/mpc85xx.sh
|
||||
|
||||
ucidef_set_interface_loopback
|
||||
|
||||
board=$(mpc85xx_board_name)
|
||||
|
||||
case "$board" in
|
||||
tl-wdr4900-v1)
|
||||
ucidef_set_interfaces_lan_wan "eth0.1" "eth0.2"
|
||||
ucidef_add_switch "switch0" "1" "1"
|
||||
ucidef_add_switch_vlan "switch0" "1" "0t 2 3 4 5"
|
||||
ucidef_add_switch_vlan "switch0" "2" "0t 1"
|
||||
tplink_set_mac lan -2
|
||||
tplink_set_mac wan 1
|
||||
;;
|
||||
|
||||
*)
|
||||
ucidef_set_interfaces_lan_wan "eth0" "eth1"
|
||||
;;
|
||||
esac
|
||||
|
||||
uci commit network
|
||||
|
||||
exit 0
|
39
target/linux/mpc85xx/base-files/lib/mpc85xx.sh
Executable file
39
target/linux/mpc85xx/base-files/lib/mpc85xx.sh
Executable file
|
@ -0,0 +1,39 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2013 OpenWrt.org
|
||||
#
|
||||
|
||||
MPC85XX_BOARD_NAME=
|
||||
MPC85XX_MODEL=
|
||||
|
||||
mpc85xx_board_detect() {
|
||||
local model
|
||||
local name
|
||||
|
||||
model=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /model/ {print $2}' /proc/cpuinfo)
|
||||
|
||||
case "$model" in
|
||||
*"TL-WDR4900 v1")
|
||||
name="tl-wdr4900-v1"
|
||||
;;
|
||||
esac
|
||||
|
||||
[ -z "$name" ] && name="unknown"
|
||||
|
||||
[ -z "$MPC85XX_BOARD_NAME" ] && MPC85XX_BOARD_NAME="$name"
|
||||
[ -z "$MPC85XX_MODEL" ] && MPC85XX_MODEL="$model"
|
||||
|
||||
[ -e "/tmp/sysinfo/" ] || mkdir -p "/tmp/sysinfo/"
|
||||
|
||||
echo "$MPC85XX_BOARD_NAME" > /tmp/sysinfo/board_name
|
||||
echo "$MPC85XX_MODEL" > /tmp/sysinfo/model
|
||||
}
|
||||
|
||||
mpc85xx_board_name() {
|
||||
local name
|
||||
|
||||
[ -f /tmp/sysinfo/board_name ] && name=$(cat /tmp/sysinfo/board_name)
|
||||
[ -z "$name" ] && name="unknown"
|
||||
|
||||
echo "$name"
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
#!/bin/sh
|
||||
|
||||
do_mpc85xx() {
|
||||
. /lib/mpc85xx.sh
|
||||
|
||||
mpc85xx_board_detect
|
||||
}
|
||||
|
||||
boot_hook_add preinit_main do_mpc85xx
|
85
target/linux/mpc85xx/base-files/lib/upgrade/platform.sh
Executable file
85
target/linux/mpc85xx/base-files/lib/upgrade/platform.sh
Executable file
|
@ -0,0 +1,85 @@
|
|||
#
|
||||
# Copyright (C) 2011 OpenWrt.org
|
||||
#
|
||||
|
||||
. /lib/mpc85xx.sh
|
||||
|
||||
PART_NAME=firmware
|
||||
RAMFS_COPY_DATA=/lib/mpc85xx.sh
|
||||
|
||||
tplink_get_hwid() {
|
||||
local part
|
||||
|
||||
part=$(find_mtd_part u-boot)
|
||||
[ -z "$part" ] && return 1
|
||||
|
||||
dd if=$part bs=4 count=1 skip=81728 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
|
||||
}
|
||||
|
||||
tplink_get_image_hwid() {
|
||||
get_image "$@" | dd bs=4 count=1 skip=16 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
|
||||
}
|
||||
|
||||
tplink_get_image_boot_size() {
|
||||
get_image "$@" | dd bs=4 count=1 skip=37 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
|
||||
}
|
||||
|
||||
platform_check_image() {
|
||||
local board=$(mpc85xx_board_name)
|
||||
local magic="$(get_magic_long "$1")"
|
||||
|
||||
[ "$ARGC" -gt 1 ] && return 1
|
||||
|
||||
case $board in
|
||||
tl-wdr4900-v1)
|
||||
[ "$magic" != "01000000" ] && {
|
||||
echo "Invalid image type."
|
||||
return 1
|
||||
}
|
||||
|
||||
local hwid
|
||||
local imageid
|
||||
|
||||
hwid=$(tplink_get_hwid)
|
||||
imageid=$(tplink_get_image_hwid "$1")
|
||||
|
||||
[ "$hwid" != "$imageid" ] && {
|
||||
echo "Invalid image, hardware ID mismatch, hw:$hwid image:$imageid."
|
||||
return 1
|
||||
}
|
||||
|
||||
local boot_size
|
||||
|
||||
boot_size=$(tplink_get_image_boot_size "$1")
|
||||
[ "$boot_size" != "00000000" ] && {
|
||||
echo "Invalid image, it contains a bootloader."
|
||||
return 1
|
||||
}
|
||||
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Sysupgrade is not yet supported on $board."
|
||||
return 1
|
||||
}
|
||||
|
||||
platform_do_upgrade() {
|
||||
local board=$(mpc85xx_board_name)
|
||||
|
||||
case "$board" in
|
||||
*)
|
||||
default_do_upgrade "$ARGV"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
disable_watchdog() {
|
||||
killall watchdog
|
||||
( ps | grep -v 'grep' | grep '/dev/watchdog' ) && {
|
||||
echo 'Could not disable watchdog'
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
append sysupgrade_pre_upgrade disable_watchdog
|
Loading…
Reference in a new issue