#!/bin/sh

. /lib/functions.sh
. /lib/mediatek.sh
. /lib/functions/uci-defaults.sh
. /lib/functions/system.sh

mediatek_setup_interfaces()
{
	local board="$1"

	case $board in
	*fpga*)
		ucidef_set_interfaces_lan_wan "eth0 eth2" "eth1"
		ucidef_add_switch "switch0" \
			"0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "6u@eth0" "5u@eth1"
		;;
	*gsw*|*cob*)
		ucidef_set_interfaces_lan_wan "eth0 eth2" eth1
		;;
	*evb*)
		ucidef_set_interfaces_lan_wan "lan0 lan1 lan2 lan3 lan5 eth2" eth1
		;;
	*1g-wan*)
		ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 eth1 eth2" wan
		;;
	R124)
		ucidef_set_interfaces_lan_wan "lan0 lan1 lan2 lan3" eth1
		;;
	R126 | R142)
		ucidef_set_interfaces_lan_wan "eth1" eth0
		;;
	*)
		ucidef_set_interfaces_lan_wan "lan0 lan1 lan2 lan3 eth2" eth1
		;;
	esac
}

find_factory_partition() {
	for device in /sys/class/block/mmcblk0p*; do
		if grep -qi 'Factory' "$device/uevent"; then
			# Extract the partition number
			part=$(echo "$device" | grep -o 'mmcblk0p[0-9]*')
			echo "$part"
		fi
	done
}

mediatek_setup_macs()
{
	local board="$1"
	local part_name="Factory"
	local lan2_mac=""
	local lan_mac=""
	local wan_mac=""
	local lan2_mac_offset=""
	local lan_mac_offset=""
	local wan_mac_offset=""

	case $board in
	*)
		lan2_mac_offset="0xFFFEE"
		lan_mac_offset="0xFFFF4"
		wan_mac_offset="0xFFFFA"
		;;
	esac

	# Find the Factory partition
	local factory_part=$(find_factory_partition)
	if [ -n "$factory_part" ]; then
		# For eMMC/SD
		lan2_mac=$(get_mac_binary "/dev/$factory_part" $lan2_mac_offset)
		lan_mac=$(get_mac_binary "/dev/$factory_part" $lan_mac_offset)
		wan_mac=$(get_mac_binary "/dev/$factory_part" $wan_mac_offset)
	else
		# For NAND/NOR
		lan2_mac=$(mtd_get_mac_binary $part_name $lan2_mac_offset)
		lan_mac=$(mtd_get_mac_binary $part_name $lan_mac_offset)
		wan_mac=$(mtd_get_mac_binary $part_name $wan_mac_offset)
	fi

	case "$lan2_mac" in
		00:00:00:00:00:00);;
		ff:ff:ff:ff:ff:ff);;
		*)
		[ -n "$lan2_mac" ] && ucidef_set_interface_macaddr "lan2" "$lan2_mac"
	;;
	esac

	case "$lan_mac" in
		00:00:00:00:00:00);;
		ff:ff:ff:ff:ff:ff);;
		*)
		[ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" "$lan_mac"
	;;
	esac

	case "$wan_mac" in
		00:00:00:00:00:00);;
		ff:ff:ff:ff:ff:ff);;
		*)
		[ -n "$wan_mac" ] && ucidef_set_interface_macaddr "wan" "$wan_mac"
	;;
	esac
}

board_config_update
board=$(mediatek_board_name)
mediatek_setup_interfaces $board
mediatek_setup_macs $board
board_config_flush

exit 0
