ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/kernel/realtek-wl/files/lib/mwlan-1803dkb b/package/kernel/realtek-wl/files/lib/mwlan-1803dkb
new file mode 100755
index 0000000..b6c7c41
--- /dev/null
+++ b/package/kernel/realtek-wl/files/lib/mwlan-1803dkb
@@ -0,0 +1,316 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2010-2018 OpenWrt.org
+
+START=40
+
+SET_WLAN="iwpriv wlan1"
+SET_WLAN_PARAM="$SET_WLAN set_mib"
+IFCONFIG=ifconfig
+
+wlan_power_ctrl() {
+	local on=$1
+	local name
+	local power
+	for name in  $(ls /sys/devices | grep "rfkill"); do
+		[ ! -e "/sys/devices/${name}/pwr_ctrl" ] && continue
+		power=0
+		$(cat /sys/devices/${name}/pwr_ctrl | grep -q on) && power=1
+		[ "$power" == "$on" ] && continue
+		echo $on > /sys/devices/${name}/pwr_ctrl
+	done
+}
+
+rtl8192fr_write_cali() {
+        $SET_WLAN  set_mib pwrlevelCCK_A=2828282828282828282828282828
+        $SET_WLAN set_mib pwrlevelCCK_B=2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+        $SET_WLAN set_mib pwrlevelHT40_1S_A=2727272727272727272727272727
+        $SET_WLAN set_mib pwrlevelHT40_1S_B=2A2A2A2A2A2A2A2A2A2A2A2A2A2A
+        $SET_WLAN set_mib pwrdiffOFDM=2828282828282828282828282828
+        $SET_WLAN set_mib xcap=23
+        $SET_WLAN set_mib thermal=35
+
+}
+rtl8812fr_write_cali() {
+	$SET_WLAN set_mib pwrlevel5GHT40_1S_A=00000000000000000000000000000000000000000000000000000000000000000000005A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A54545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454
+	$SET_WLAN set_mib pwrlevel5GHT40_1S_B=00000000000000000000000000000000000000000000000000000000000000000000005A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A54545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454
+	$SET_WLAN set_mib pwrdiff5GHT40_2S=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+	$SET_WLAN set_mib pwrdiff5GHT20=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+	$SET_WLAN set_mib pwrdiff5GOFDM=00000000000000000000000000000000000000000000000000000000000000000000005400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+	$SET_WLAN set_mib pwrlevel_TSSI5GHT40_1S_A=0000000000000000000000000000000000000000000000000000000000000000000000FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB
+	$SET_WLAN set_mib pwrlevel_TSSI5GHT40_1S_B=0000000000000000000000000000000000000000000000000000000000000000000000FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+	$SET_WLAN set_mib xcap=32
+	$SET_WLAN set_mib thermal1=33
+	$SET_WLAN set_mib thermal2=32
+}
+rtl_write_cali() {
+	grep -l "RTL8192F" /proc/wlan1/mib_rf > /dev/null
+	if [ $? -eq 0 ]; then
+		rtl8192fr_write_cali
+	fi
+	grep -l "RTL8812" /proc/wlan1/mib_rf > /dev/null
+	if [ $? -eq 0 ]; then
+		rtl8812_write_cali
+	fi
+}
+wlan_ops_lock() {
+	echo mwlan > /sys/power/wake_lock
+}
+
+wlan_ops_unlock() {
+	echo mwlan > /sys/power/wake_unlock	
+}
+
+wlan_ubus_event() {
+	case $1 in
+	start )
+		ubus send mwlan.stat.action ' { "stat" : "start" } ' ;;
+	up )
+		ubus send mwlan.stat.action ' { "stat" : "up" } ' ;;
+	down )
+		ubus send mwlan.stat.action ' { "stat" : "down" } ' ;;
+	* )
+		echo "unknown option ($1)" ;;
+	esac
+}
+
+wlan_enable_vap() {
+	local _device _disabled _ifname
+
+	_wlan_enable_vap() {
+		config_get _device $1 device
+		config_get _disabled $_device disabled
+		config_get _ifname $1 ifname
+		[ 1 == "$disabled" ] && return
+
+		case $_ifname in
+		*-va[0-9])
+			iwpriv ${_ifname%-va*} set_mib vap_enable=1
+			;;
+		*)
+			;;
+		esac
+
+	}
+
+	config_foreach _wlan_enable_vap wifi-iface
+}
+
+find_phy() {
+	[ -n "$path" ] && {
+		for phy in /sys/devices/$path/ieee80211/phy*; do
+			[ -e "$phy" ] && {
+				phy="${phy##*/}"
+				return 0
+			}
+		done
+	}
+	[ -n "$macaddr" ] && {
+		for phy in $(ls /sys/class/ieee80211 2>/dev/null); do
+			grep -i -q "$macaddr" "/sys/class/ieee80211/${phy}/macaddress" && return 0
+		done
+	}
+	return 1
+}
+
+wlan_set_sta_channel_to_ap() {
+	local _device _disabled _ifname _ssid
+	local ap_device=$1 root_ifname=$2 ap_channel=$3 sta_channel=
+	local path macaddr phy
+
+	__wlan_set_sta_channel_to_ap() {
+		config_get _device $1 device
+		config_get _disabled $_device disabled
+		config_get path $_device path
+		config_get _mode $1 mode
+		config_get _ifname $1 ifname
+		config_get _ssid $1 ssid
+		config_get macaddr $1 macaddr
+
+		[ 1 == "$_disabled" ] && return
+		[ "${_mode}" != "sta" ] && return
+		[ "$root_ifname" != "${_ifname%%-v*}" ] && return
+
+		find_phy || {
+			echo "Could not find PHY for device '$_device'"
+			return
+		}
+		for i in $( seq 1 10 ); do
+			iw phy "$phy" interface add "$root_ifname" type station
+			ifconfig "$root_ifname" hw ether "$macaddr"
+			ifconfig "$root_ifname" up 2>/dev/null && {
+				echo "==> $root_ifname is up for scan ssid" > /dev/kmsg
+				break
+			}
+			sleep 1
+		done
+		for i in $( seq 1 10 ); do
+			freq=$(iw dev "$root_ifname" scan ssid "$_ssid" | awk '/freq/{print $2}' | head -1)
+			if [ $freq -ge 2412 -a $freq -le 2472 ]; then
+				sta_channel=$((($freq - 2407)/5))
+			elif [ $freq -eq 2484 ]; then
+				sta_channel=14
+			elif [ $freq -ge 4900 -a $freq -lt 5000 ]; then
+				sta_channel=$((($freq - 4000)/5))
+			else
+				sta_channel=
+				sleep 1
+				echo "==> try $i times to scan ssid  $_ssid" > /dev/kmsg
+				continue
+			fi
+			break
+		done
+
+		echo "==> scan $_ssid, get channel = $sta_channel" > /dev/kmsg
+		[ -n "$sta_channel" ] && {
+			[ "$sta_channel" != "$ap_channel" ] && {
+				uci_set wireless $ap_device channel $sta_channel
+				uci_commit wireless
+				echo "==> $ap_device: set channel to $sta_channel" > /dev/kmsg
+			}
+			eval wifichannel_${root_ifname}=\${sta_channel}
+		}
+	}
+
+	eval wifichannel=\${wifichannel_${root_ifname}}
+	[ -n "$wifichannel" ] && {
+		echo "==> already set channel for root interface" > /dev/kmsg
+		[ "$wifichannel" !=  "$ap_channel" ] && {
+			echo "==> $ap_device: set channel to $wifichannel, same with ${root_ifname}" > /dev/kmsg
+			uci_set wireless $ap_device channel $wifichannel
+			uci_commit wireless
+		}
+		return
+	}
+
+	config_foreach __wlan_set_sta_channel_to_ap wifi-iface
+}
+
+wlan_updown() {
+	local act=up i=1
+	local _device _disabled _ifname _mode _up _isolate _channel
+	local ret
+
+	__wlan_updown() {
+		config_get _device $1 device
+		config_get _ifname $1 ifname
+		config_get _mode $1 mode
+		config_get _isolate $1 isolate
+
+		config_get _channel $_device channel
+		config_get _disabled $_device disabled
+		if [ "$act" == "down" ]; then
+			$(/sbin/wifi status $_device 2>/dev/null | grep -q "\"up\": true") || return
+			/sbin/wifi down $_device
+		elif [ "$act" == "up" -a "$_disabled" != "1" ]; then
+			$(/sbin/wifi status $_device 2>/dev/null | grep -q "\"up\": true") && return
+
+			case $_ifname in
+			*-vxd)
+				iwpriv $_ifname copy_mib
+				;;
+			*)
+				;;
+			esac
+			if [ "${_mode}" == "sta" ]; then
+				iwpriv $_ifname set_mib opmode=8
+			else
+				iwpriv $_ifname set_mib opmode=16
+				# AP need to use same channel with STA
+				wlan_set_sta_channel_to_ap $_device ${_ifname%%-v*} $_channel
+			fi
+
+			/sbin/wifi up $_device
+		else
+			return
+		fi
+
+		while [ $i -lt 20 ]
+		do
+			_up=0
+			$(/sbin/wifi status $_device 2>/dev/null | grep -q "\"up\": true") && _up=1
+			if [ "$act" == "down" -a "$_up" == "0" ]; then
+				break;
+			elif [ "$act" == "up" -a "$_up" == "1" ]; then
+				if [ $_mode == "ap" ]; then
+					if [ $_isolate == "1" ]; then
+						iwpriv $_ifname set_mib block_relay=1
+					else
+						iwpriv $_ifname set_mib block_relay=0
+					fi
+				fi
+				break;
+			fi
+			sleep 1
+			i=$(($i+1))
+		done
+		[ "$i" -ge "20" ] && LOGE "wlan_updown $act ${_device} failed" && ret=1
+	}
+
+	ret=0
+	[ "$#" -ge "1" ] && act=$1
+
+	config_load wireless
+
+	[ "$act" == "up" ] && wlan_enable_vap
+	config_foreach __wlan_updown wifi-iface
+	return $ret
+}
+
+start() {
+	wlan_ops_lock
+	wlan_ubus_event start
+	wlan_power_ctrl 1
+	wlan_updown up
+	wlan_ubus_event up
+	wlan_ops_unlock
+}
+
+boot() {
+	wlan_check_wifi_exist() {
+		local _ifname _device _disabled
+
+		config_get _device $1 device
+		config_get _disabled $_device disabled
+		config_get _ifname $1 ifname
+
+		if [ $_disabled == "1" ]; then
+			mkdir -p /var/wifi_ok
+			touch /var/wifi_ok/$_device
+		else
+			ifconfig -a | grep -q $_ifname && {
+				mkdir -p /var/wifi_ok
+				touch /var/wifi_ok/$_device
+			}
+		fi
+	}
+
+	start
+	sleep 1
+	config_load wireless
+	config_foreach wlan_check_wifi_exist wifi-iface
+}
+
+stop() {
+	wlan_ops_lock
+	wlan_updown down
+	sleep 1
+	wlan_power_ctrl 0
+	wlan_ubus_event down
+	wlan_ops_unlock
+}
+
+restart() {
+	wlan_ops_lock
+	wlan_power_ctrl 1
+	wlan_updown down
+	wlan_updown up
+	wlan_ops_unlock
+}
+
+reload() {
+	wlan_ops_lock
+	wlan_power_ctrl 1
+	wlan_updown down
+	wlan_updown up
+	wlan_ops_unlock
+}
diff --git a/package/kernel/realtek-wl/files/lib/mwlan-1826sp801 b/package/kernel/realtek-wl/files/lib/mwlan-1826sp801
new file mode 100755
index 0000000..aae009d
--- /dev/null
+++ b/package/kernel/realtek-wl/files/lib/mwlan-1826sp801
@@ -0,0 +1,300 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2010-2018 OpenWrt.org
+
+START=40
+
+SET_WLAN="iwpriv wlan1"
+SET_WLAN_PARAM="$SET_WLAN set_mib"
+IFCONFIG=ifconfig
+
+wlan_power_ctrl() {
+	local on=$1
+	local name
+	local power
+}
+
+rtl8192fr_write_cali() {
+        $SET_WLAN  set_mib pwrlevelCCK_A=2828282828282828282828282828
+        $SET_WLAN set_mib pwrlevelCCK_B=2D2D2D2D2D2D2D2D2D2D2D2D2D2D
+        $SET_WLAN set_mib pwrlevelHT40_1S_A=2727272727272727272727272727
+        $SET_WLAN set_mib pwrlevelHT40_1S_B=2A2A2A2A2A2A2A2A2A2A2A2A2A2A
+        $SET_WLAN set_mib pwrdiffOFDM=2828282828282828282828282828
+        $SET_WLAN set_mib xcap=23
+        $SET_WLAN set_mib thermal=35
+
+}
+rtl8812fr_write_cali() {
+	$SET_WLAN set_mib pwrlevel5GHT40_1S_A=00000000000000000000000000000000000000000000000000000000000000000000005A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A54545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454
+	$SET_WLAN set_mib pwrlevel5GHT40_1S_B=00000000000000000000000000000000000000000000000000000000000000000000005A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A54545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454
+	$SET_WLAN set_mib pwrdiff5GHT40_2S=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+	$SET_WLAN set_mib pwrdiff5GHT20=00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+	$SET_WLAN set_mib pwrdiff5GOFDM=00000000000000000000000000000000000000000000000000000000000000000000005400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+	$SET_WLAN set_mib pwrlevel_TSSI5GHT40_1S_A=0000000000000000000000000000000000000000000000000000000000000000000000FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFAFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFAFAFAFAFAFAFAFAFBFBFBFBFBFBFBFBFCFCFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB
+	$SET_WLAN set_mib pwrlevel_TSSI5GHT40_1S_B=0000000000000000000000000000000000000000000000000000000000000000000000FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+	$SET_WLAN set_mib xcap=32
+	$SET_WLAN set_mib thermal1=33
+	$SET_WLAN set_mib thermal2=32
+}
+
+wlan_ops_lock() {
+	echo mwlan > /sys/power/wake_lock
+}
+
+wlan_ops_unlock() {
+	echo mwlan > /sys/power/wake_unlock	
+}
+
+wlan_ubus_event() {
+	case $1 in
+	start )
+		ubus send mwlan.stat.action ' { "stat" : "start" } ' ;;
+	up )
+		ubus send mwlan.stat.action ' { "stat" : "up" } ' ;;
+	down )
+		ubus send mwlan.stat.action ' { "stat" : "down" } ' ;;
+	* )
+		echo "unknown option ($1)" ;;
+	esac
+}
+
+wlan_enable_vap() {
+	local _device _disabled _ifname
+
+	_wlan_enable_vap() {
+		config_get _device $1 device
+		config_get _disabled $_device disabled
+		config_get _ifname $1 ifname
+		[ 1 == "$disabled" ] && return
+
+		case $_ifname in
+		*-va[0-9])
+			iwpriv ${_ifname%-va*} set_mib vap_enable=1
+			;;
+		*)
+			;;
+		esac
+
+	}
+
+	config_foreach _wlan_enable_vap wifi-iface
+}
+
+find_phy() {
+	[ -n "$path" ] && {
+		for phy in /sys/devices/$path/ieee80211/phy*; do
+			[ -e "$phy" ] && {
+				phy="${phy##*/}"
+				return 0
+			}
+		done
+	}
+	[ -n "$macaddr" ] && {
+		for phy in $(ls /sys/class/ieee80211 2>/dev/null); do
+			grep -i -q "$macaddr" "/sys/class/ieee80211/${phy}/macaddress" && return 0
+		done
+	}
+	return 1
+}
+
+wlan_set_sta_channel_to_ap() {
+	local _device _disabled _ifname _ssid
+	local ap_device=$1 root_ifname=$2 ap_channel=$3 sta_channel=
+	local path macaddr phy
+
+	__wlan_set_sta_channel_to_ap() {
+		config_get _device $1 device
+		config_get _disabled $_device disabled
+		config_get path $_device path
+		config_get _mode $1 mode
+		config_get _ifname $1 ifname
+		config_get _ssid $1 ssid
+		config_get macaddr $1 macaddr
+
+		[ 1 == "$_disabled" ] && return
+		[ "${_mode}" != "sta" ] && return
+		[ "$root_ifname" != "${_ifname%%-v*}" ] && return
+
+		find_phy || {
+			echo "Could not find PHY for device '$_device'"
+			return
+		}
+		for i in $( seq 1 10 ); do
+			iw phy "$phy" interface add "$root_ifname" type station
+			ifconfig "$root_ifname" hw ether "$macaddr"
+			ifconfig "$root_ifname" up 2>/dev/null && {
+				echo "==> $root_ifname is up for scan ssid" > /dev/kmsg
+				break
+			}
+			sleep 1
+		done
+		for i in $( seq 1 10); do
+			freq=$(iw dev "$root_ifname" scan ssid "$_ssid" | awk '/freq/{print $2}' | head -1)
+			if [ $freq -ge 2412 -a $freq -le 2472 ]; then
+				sta_channel=$((($freq - 2407)/5))
+			elif [ $freq -eq 2484 ]; then
+				sta_channel=14
+			elif [ $freq -ge 4900 -a $freq -lt 5000 ]; then
+				sta_channel=$((($freq - 4000)/5))
+			else
+				sta_channel=
+				sleep 1
+				echo "==> try $i times to scan ssid  $_ssid" > /dev/kmsg
+				continue
+			fi
+			break
+		done
+
+		echo "==> scan $_ssid, get channel = $sta_channel" > /dev/kmsg
+		[ -n "$sta_channel" ] && {
+			[ "$sta_channel" != "$ap_channel" ] && {
+				uci_set wireless $ap_device channel $sta_channel
+				uci_commit wireless
+				echo "==> $ap_device: set channel to $sta_channel" > /dev/kmsg
+			}
+			eval wifichannel_${root_ifname}=\${sta_channel}
+		}
+	}
+
+	eval wifichannel=\${wifichannel_${root_ifname}}
+	[ -n "$wifichannel" ] && {
+		echo "==> already set channel for root interface" > /dev/kmsg
+		[ "$wifichannel" !=  "$ap_channel" ] && {
+			echo "==> $ap_device: set channel to $wifichannel, same with ${root_ifname}" > /dev/kmsg
+			uci_set wireless $ap_device channel $wifichannel
+			uci_commit wireless
+		}
+		return
+	}
+
+	config_foreach __wlan_set_sta_channel_to_ap wifi-iface
+}
+
+wlan_updown() {
+	local act=up i=1
+	local _device _disabled _ifname _mode _up _isolate _channel
+	local ret
+
+	__wlan_updown() {
+		config_get _device $1 device
+		config_get _ifname $1 ifname
+		config_get _mode $1 mode
+		config_get _isolate $1 isolate
+
+		config_get _channel $_device channel
+		config_get _disabled $_device disabled
+		if [ "$act" == "down" ]; then
+			$(/sbin/wifi status $_device 2>/dev/null | grep -q "\"up\": true") || return
+			/sbin/wifi down $_device
+		elif [ "$act" == "up" -a "$_disabled" != "1" ]; then
+			$(/sbin/wifi status $_device 2>/dev/null | grep -q "\"up\": true") && return
+
+			case $_ifname in
+			*-vxd)
+				iwpriv $_ifname copy_mib
+				;;
+			*)
+				;;
+			esac
+			if [ "${_mode}" == "sta" ]; then
+				iwpriv $_ifname set_mib opmode=8
+			else
+				iwpriv $_ifname set_mib opmode=16
+				# AP need to use same channel with STA
+				wlan_set_sta_channel_to_ap $_device ${_ifname%%-v*} $_channel
+			fi
+
+			/sbin/wifi up $_device
+		else
+			return
+		fi
+
+		while [ $i -lt 20 ]
+		do
+			_up=0
+			$(/sbin/wifi status $_device 2>/dev/null | grep -q "\"up\": true") && _up=1
+			if [ "$act" == "down" -a "$_up" == "0" ]; then
+				break;
+			elif [ "$act" == "up" -a "$_up" == "1" ]; then
+				if [ $_mode == "ap" ]; then
+					if [ $_isolate == "1" ]; then
+						iwpriv $_ifname set_mib block_relay=1
+					else
+						iwpriv $_ifname set_mib block_relay=0
+					fi
+				fi
+				break;
+			fi
+			sleep 1
+			i=$(($i+1))
+		done
+		[ "$i" -ge "20" ] && LOGE "wlan_updown $act ${_device} failed" && ret=1
+	}
+
+	ret=0
+	[ "$#" -ge "1" ] && act=$1
+
+	config_load wireless
+
+	[ "$act" == "up" ] && wlan_enable_vap
+	config_foreach __wlan_updown wifi-iface
+	return $ret
+}
+
+start() {
+	wlan_ops_lock
+	wlan_ubus_event start
+	wlan_power_ctrl 1
+	wlan_updown up
+	wlan_ubus_event up
+	wlan_ops_unlock
+}
+
+boot() {
+	wlan_check_wifi_exist() {
+		local _ifname _device _disabled
+
+		config_get _device $1 device
+		config_get _disabled $_device disabled
+		config_get _ifname $1 ifname
+
+		if [ $_disabled == "1" ]; then
+			mkdir -p /var/wifi_ok
+			touch /var/wifi_ok/$_device
+		else
+			ifconfig -a | grep -q $_ifname && {
+				mkdir -p /var/wifi_ok
+				touch /var/wifi_ok/$_device
+			}
+		fi
+	}
+
+	start
+	sleep 1
+	config_load wireless
+	config_foreach wlan_check_wifi_exist wifi-iface
+}
+
+stop() {
+	wlan_ops_lock
+	wlan_updown down
+	sleep 1
+	wlan_power_ctrl 0
+	wlan_ubus_event down
+	wlan_ops_unlock
+}
+
+restart() {
+	wlan_ops_lock
+	wlan_power_ctrl 1
+	wlan_updown down
+	wlan_updown up
+	wlan_ops_unlock
+}
+
+reload() {
+	wlan_ops_lock
+	wlan_power_ctrl 1
+	wlan_updown down
+	wlan_updown up
+	wlan_ops_unlock
+}
diff --git a/package/kernel/realtek-wl/files/lib/wifi/realtek.sh b/package/kernel/realtek-wl/files/lib/wifi/realtek.sh
new file mode 100755
index 0000000..9274171
--- /dev/null
+++ b/package/kernel/realtek-wl/files/lib/wifi/realtek.sh
@@ -0,0 +1,903 @@
+append DRIVERS "realtek"
+
+set_open() {
+	echo "0" > $CONFIG_ROOT_DIR/$1/macclone_enable
+
+	echo "0" > $CONFIG_ROOT_DIR/$1/encrypt
+	echo "0" > $CONFIG_ROOT_DIR/$1/wep
+	echo "0" > $CONFIG_ROOT_DIR/$1/wep_default_key
+	echo "1" > $CONFIG_ROOT_DIR/$1/wep_key_type
+	echo "2" > $CONFIG_ROOT_DIR/$1/auth_type
+
+	echo "0" > $CONFIG_ROOT_DIR/$1/wsc_configured
+	echo "1" > $CONFIG_ROOT_DIR/$1/wsc_auth
+	echo "1" > $CONFIG_ROOT_DIR/$1/wsc_enc    
+
+	if [ "$RP" = "0" ]; then
+		echo 0 > $CONFIG_ROOT_DIR/repeater_enabled
+	fi	
+}
+
+set_wep() {
+	# wep_key_type - 0: hex mode 1: ascii
+	# wep : 1: wep-64 2: wep-128
+	echo "1" > $CONFIG_ROOT_DIR/$1/encrypt
+	echo $wep_type > $CONFIG_ROOT_DIR/$1/wep
+	echo $wep_key_idx > $CONFIG_ROOT_DIR/$1/wep_default_key
+	echo $wep_key_type > $CONFIG_ROOT_DIR/$1/wep_key_type
+	echo "2" > $CONFIG_ROOT_DIR/$1/auth_type
+
+	echo $wep64_h_key1 > $CONFIG_ROOT_DIR/$1/wepkey1_64_hex
+	echo $wep64_h_key2 > $CONFIG_ROOT_DIR/$1/wepkey2_64_hex
+	echo $wep64_h_key3 > $CONFIG_ROOT_DIR/$1/wepkey2_64_hex
+	echo $wep64_h_key4 > $CONFIG_ROOT_DIR/$1/wepkey3_64_hex
+
+	echo $wep64_a_key1 > $CONFIG_ROOT_DIR/$1/wepkey1_64_asc
+	echo $wep64_a_key2 > $CONFIG_ROOT_DIR/$1/wepkey2_64_asc
+	echo $wep64_a_key3 > $CONFIG_ROOT_DIR/$1/wepkey2_64_asc
+	echo $wep64_a_key4 > $CONFIG_ROOT_DIR/$1/wepkey3_64_asc
+
+	echo $wep128_h_key1 > $CONFIG_ROOT_DIR/$1/wepkey1_128_hex
+	echo $wep128_h_key2 > $CONFIG_ROOT_DIR/$1/wepkey2_128_hex
+	echo $wep128_h_key3 > $CONFIG_ROOT_DIR/$1/wepkey2_128_hex
+	echo $wep128_h_key4 > $CONFIG_ROOT_DIR/$1/wepkey3_128_hex
+
+	echo $wep128_a_key1 > $CONFIG_ROOT_DIR/$1/wepkey1_128_asc
+	echo $wep128_a_key2 > $CONFIG_ROOT_DIR/$1/wepkey2_128_asc
+	echo $wep128_a_key3 > $CONFIG_ROOT_DIR/$1/wepkey2_128_asc
+	echo $wep128_a_key4 > $CONFIG_ROOT_DIR/$1/wepkey3_128_asc
+
+	echo "1" > $CONFIG_ROOT_DIR/$1/wsc_configured
+	echo "1" > $CONFIG_ROOT_DIR/$1/wsc_auth
+	echo "2" > $CONFIG_ROOT_DIR/$1/wsc_enc
+	echo "0" > $CONFIG_ROOT_DIR/$1/wsc_configbyextreg
+}
+
+set_wpa_tkip() {
+	echo "2" > $CONFIG_ROOT_DIR/$1/encrypt
+	echo "0" > $CONFIG_ROOT_DIR/$1/enable_1x
+	echo "2" > $CONFIG_ROOT_DIR/$1/wpa_auth
+	echo "1" > $CONFIG_ROOT_DIR/$1/wpa_cipher
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wpa_psk
+
+	echo "1" > $CONFIG_ROOT_DIR/$1/wsc_configured
+	echo "2" > $CONFIG_ROOT_DIR/$1/wsc_auth
+	echo "4" > $CONFIG_ROOT_DIR/$1/wsc_enc
+	echo "0" > $CONFIG_ROOT_DIR/$1/wsc_configbyextreg
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wsc_psk
+}
+
+set_wpa_aes() {
+	echo "2" > $CONFIG_ROOT_DIR/$1/encrypt
+	echo "0" > $CONFIG_ROOT_DIR/$1/enable_1x
+	echo "2" > $CONFIG_ROOT_DIR/$1/wpa_auth
+	echo "2" > $CONFIG_ROOT_DIR/$1/wpa_cipher
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wpa_psk
+
+	echo "1" > $CONFIG_ROOT_DIR/$1/wsc_configured
+	echo "2" > $CONFIG_ROOT_DIR/$1/wsc_auth
+	echo "8" > $CONFIG_ROOT_DIR/$1/wsc_enc
+	echo "0" > $CONFIG_ROOT_DIR/$1/wsc_configbyextreg
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wsc_psk
+}
+
+set_wpa2_tkip () {
+	echo "4" > $CONFIG_ROOT_DIR/$1/encrypt
+	echo "0" > $CONFIG_ROOT_DIR/$1/enable_1x
+	echo "2" > $CONFIG_ROOT_DIR/$1/wpa_auth
+	echo "1" > $CONFIG_ROOT_DIR/$1/wpa2_cipher
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wpa_psk
+
+	echo "1" > $CONFIG_ROOT_DIR/$1/wsc_configured
+	echo "32" > $CONFIG_ROOT_DIR/$1/wsc_auth
+	echo "4" > $CONFIG_ROOT_DIR/$1/wsc_enc
+	echo "0" > $CONFIG_ROOT_DIR/$1/wsc_configbyextreg
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wsc_psk
+}
+
+set_wpa2_aes () {
+	echo "4" > $CONFIG_ROOT_DIR/$1/encrypt
+	echo "0" > $CONFIG_ROOT_DIR/$1/enable_1x
+	echo "2" > $CONFIG_ROOT_DIR/$1/wpa_auth
+	echo "2" > $CONFIG_ROOT_DIR/$1/wpa2_cipher
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wpa_psk
+
+	echo "1" > $CONFIG_ROOT_DIR/$1/wsc_configured
+	echo "32" > $CONFIG_ROOT_DIR/$1/wsc_auth
+	echo "8" > $CONFIG_ROOT_DIR/$1/wsc_enc
+	echo "0" > $CONFIG_ROOT_DIR/$1/wsc_configbyextreg
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wsc_psk
+}
+
+set_mixed() {
+	echo "6" > $CONFIG_ROOT_DIR/$1/encrypt
+	echo "0" > $CONFIG_ROOT_DIR/$1/enable_1x
+	echo "2" > $CONFIG_ROOT_DIR/$1/wpa_auth
+	echo "3" > $CONFIG_ROOT_DIR/$1/wpa_cipher
+	echo "3" > $CONFIG_ROOT_DIR/$1/wpa2_cipher
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wpa_psk
+
+	echo "1" > $CONFIG_ROOT_DIR/$1/wsc_configured
+	echo "34" > $CONFIG_ROOT_DIR/$1/wsc_auth
+	echo "12" > $CONFIG_ROOT_DIR/$1/wsc_enc
+	echo "0" > $CONFIG_ROOT_DIR/$1/wsc_configbyextreg
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wsc_psk
+}
+
+set_sae() {
+	echo "8" > $CONFIG_ROOT_DIR/$1/encrypt
+	echo "2" > $CONFIG_ROOT_DIR/$1/authtype
+	echo "2" > $CONFIG_ROOT_DIR/$1/encmode
+	echo "0" > $CONFIG_ROOT_DIR/$1/wpa_cipher
+	echo "8" > $CONFIG_ROOT_DIR/$1/wpa2_cipher
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wpa_psk
+}
+
+set_sae_mixed() {
+	echo "10" > $CONFIG_ROOT_DIR/$1/encrypt
+	echo "2" > $CONFIG_ROOT_DIR/$1/authtype
+	echo "2" > $CONFIG_ROOT_DIR/$1/encmode
+	echo "0" > $CONFIG_ROOT_DIR/$1/wpa_cipher
+	echo "8" > $CONFIG_ROOT_DIR/$1/wpa2_cipher
+	echo $wpa_psk > $CONFIG_ROOT_DIR/$1/wpa_psk
+}
+
+set_enc() {
+	# set_enc [enc] [intf]	
+	set_open $2
+	case $1 in
+		open)
+			echo "do nothing"
+		;;
+		wep)
+			set_wep $2
+		;;
+		wpa_tkip)
+			set_wpa_tkip $2
+		;;
+		wpa_aes)
+			set_wpa_aes $2 
+		;;
+		wpa2_tkip)
+			set_wpa2_tkip $2
+		;;
+		wpa2_aes)
+			set_wpa2_aes $2 
+		;;
+		mixed)
+			set_mixed $2
+		;;
+		sae-mixed)
+			set_sae_mixed $2
+		;;
+		sae)
+			set_sae $2
+		;;
+		802.1x)
+			echo "not supported yet"     
+		;;
+		*)
+			echo "usage: enc: open, wep, wpa_tkip, wpa2_aes, mixed"
+		exit 1
+	esac
+}
+
+start_nat() {
+	EIF="eth0"
+	IIF="br-lan"
+	INNET="192.168.10.0/24"
+
+	echo "1" > /proc/sys/net/ipv4/ip_forward
+	iptables -F
+	iptables -X
+	iptables -t nat -F
+	iptables -t nat -X 
+	iptables -P INPUT DROP
+	iptables -P OUTPUT ACCEPT
+	iptables -P FORWARD ACCEPT
+	iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
+	iptables -t nat -A POSTROUTING -o $EIF -s $INNET -j MASQUERADE
+}
+
+stop_nat() {
+	iptables -F
+	iptables -X
+	iptables -t nat -F
+	iptables -t nat -X
+}
+
+start_ap() {
+	local __ssid
+
+	if [ "$WPS" = "0" ]; then	
+		for intf in $@; do
+			echo "0" > $CONFIG_ROOT_DIR/$intf/wlan_mode
+			set_enc $ENC $intf # [enc] [intf]
+
+			NUM=${intf#w*va};
+			echo "start my $NUM"
+			#echo "$AP_SSID-$intf" > $CONFIG_ROOT_DIR/$intf/ssid
+			eval "__ssid=\$ssid_${intf}"
+			echo $__ssid > $CONFIG_ROOT_DIR/$intf/ssid
+			echo $ap_channel > $CONFIG_ROOT_DIR/$intf/channel
+		done
+		 #$IFCONFIG $INTF hw ether $MACID
+	fi
+
+	rtl_act_wlan_if start $@ # all if
+
+	if [ "$RP" = "0" ]; then
+		rtl_br_lan_if start $@ $LAN_INTF #all if
+		#$IFCONFIG $INTF hw ether $MACID
+		if [ "$ADD_BR" = "1" ]; then
+			$IFCONFIG $BR_INTF $LOCAL_IP up
+		fi
+		$START_WLAN_APP start $@ $BR_INTF 
+		#start_nat
+	fi
+}
+ 
+start_cli() {
+	if [ "$WPS" = "0" ]; then	
+		set_enc $1 $2
+
+		# auto channel
+		channel=0
+
+		#wlan_mode=0 : AP
+		#wlan_mode=1 : Client | Ad-hoc
+		#               network_type=0 : Clien
+		#               network_type=1 : Ad-hoc
+		wlan_mode=1
+		network_type=0
+
+		#1:B, 2:G, 4:A, 8:N, 64:AC
+		#band=11 : BGN
+		band=11
+
+		#phyBandSelect=1 : 2G
+		#phyBandSelect=2 : 5G
+		phyBandSelect=1
+
+		echo $channel > $CONFIG_ROOT_DIR/$2/channel
+		echo $wlan_mode > $CONFIG_ROOT_DIR/$2/wlan_mode
+		echo $network_type > $CONFIG_ROOT_DIR/$2/network_type
+		echo $STA_SSID > $CONFIG_ROOT_DIR/repeater_ssid
+		echo $STA_SSID > $CONFIG_ROOT_DIR/$2/ssid
+		echo $band > $CONFIG_ROOT_DIR/$2/band
+		echo $phyBandSelect > $CONFIG_ROOT_DIR/$2/phyBandSelect
+
+		#WPS_DISABLE=0
+		#echo $WPS_DISABLE > $CONFIG_ROOT_DIR/$2/wpa_auth    
+		#echo 0 > $CONFIG_ROOT_DIR/$2/wsc_enc
+	fi
+
+	#$IFCONFIG $INTF down    
+	#$START_WLAN_ORG $INTF
+	#$IFCONFIG $INTF hw ether $MACID
+	#$IFCONFIG $INTF $LOCAL_IP up
+
+	rtl_act_wlan_if start $2
+	#$IWPRIV $2 set_mib wsc_enable=1
+	if [ "$RP" = "0" ]; then
+		#$IFCONFIG $2 hw ether $MACID
+		rtl_br_lan_if start $2 $BR_INTF
+		#$IWRPIV $INTF set_mib nat25_disable=1
+		#$IFCONFIG $INTF hw ether $MACID
+		if [ "$ADD_BR" = "1" ]; then
+			$IFCONFIG $BR_INTF $LOCAL_IP up
+		fi
+		$START_WLAN_APP start $2 $BR_INTF
+	fi
+
+	#echo 1 > $CONFIG_ROOT_DIR/$2/wsc_enc
+	#$IWPRIV $2 set_mib wsc_enable=1
+	cat /var/run/wscd-wlan0.pid
+}
+
+start_rp() {
+	echo 1 > $CONFIG_ROOT_DIR/repeater_enabled
+	echo $AP_SSID > $CONFIG_ROOT_DIR/repeater_ssid
+
+	ENC=$1
+	VAP=0
+	RP=1
+
+	start_ap $ALL_AP_INTF
+	#$IFCONFIG $INTF up
+	VXD_INTF="$INTF-vxd"
+	start_cli $1 $VXD_INTF
+	$IFCONFIG $VXD_INTF up
+	$IFCONFIG $INTF up
+	rtl_br_lan_if start $VXD_INTF $INTF
+	if [ "$ADD_BR" = "1" ]; then
+		$IFCONFIG $BR_INTF $LOCAL_IP up
+	fi
+}
+
+start_rp11() {
+	echo 1 > $CONFIG_ROOT_DIR/repeater_enabled
+	echo $AP_SSID > $CONFIG_ROOT_DIR/repeater_ssid
+
+	VXD_INTF="$INTF-vxd"	
+	start_cli $1 $VXD_INTF
+	set_enc $1 $INTF
+	wlan_mode=0
+	network_type=0
+	repeater_enabled=1
+
+	echo $wlan_mode > $CONFIG_ROOT_DIR/$INTF/wlan_mode
+	echo $network_type > $CONFIG_ROOT_DIR/$INTF/network_type
+	echo $repeater_enabled > $CONFIG_ROOT_DIR/repeater_enabled
+	echo $AP_SSID > $CONFIG_ROOT_DIR/$INTF/ssid
+
+	rtl_act_wlan_if start $INTF
+	$IFCONFIG $INTF 0.0.0.0 up
+	$BRCTL addif $BR_INTF $INTF
+}
+
+start_rp1() {
+	start_cli $1 $INTF
+
+	VXD_INTF="$INTF-vxd"
+	set_enc $1 $VXD_INTF
+
+	wlan_mode=0
+	network_type=0
+	repeater_enabled=1
+
+	echo $wlan_mode > $CONFIG_ROOT_DIR/$VXD_INTF/wlan_mode
+	echo $network_type > $CONFIG_ROOT_DIR/$VXD_INTF/network_type
+	echo $repeater_enabled > $CONFIG_ROOT_DIR/repeater_enabled
+	echo $AP_SSID > $CONFIG_ROOT_DIR/$VXD_INTF/ssid
+
+	rtl_act_wlan_if start $VXD_INTF
+	MACID1="00:01:73:01:FF:11"
+	MACID2="00:22:88:77:33:27"
+	#$IFCONFIG $VXD_INTF hw ether $MACID1
+	#iwpriv wlan0-vxd set_mib ssid="cliff-test"
+	$IWPRIV $VXD_INTF set_mib ssid=$AP_SSID
+	#rtl_br_lan_if start $ALL_RP_INTF
+	#$IFCONFIG $BR_INTF $LOCAL_IP up
+	$IFCONFIG $VXD_INTF 0.0.0.0 up 
+	$BRCTL addif $BR_INTF $VXD_INTF
+}
+
+rtl_br_lan_if() {
+	# func args: cmd lan0 lan1 ...
+	# shutdown LAN interface (ethernt, wlan)
+
+	if [ "$1" = "start" ]; then
+		if [ "$ADD_BR" = "1" ]; then
+			$BRCTL addbr $BR_INTF
+			$IFCONFIG $BR_INTF up
+		fi
+	fi
+	for ARG in $@ ; do
+		#INTF=`$IFCONFIG $ARG`
+		#echo "$1 $INTF"
+		if [ "$ARG" = "start" ] || [ "$ARG" = "stop" ]; then
+			continue;
+		fi
+		
+		if [ "$1" = "stop" ]; then
+			$IFCONFIG $ARG down
+			if [ $ARG != $1 ]; then
+				$BRCTL delif $BR_INTF $ARG 2> /dev/null
+			fi
+		else    
+			if [ $ARG != $1 ]; then
+				$IFCONFIG $ARG 0.0.0.0 up
+				$BRCTL addif $BR_INTF $ARG 2> /dev/null
+			fi                    
+		fi
+	done
+	if [ "$1" = "stop" ]; then
+		if [ "$ADD_BR" = "1" ]; then
+			$IFCONFIG $BR_INTF down
+			$BRCTL delbr $BR_INTF
+		fi
+	fi
+}
+
+# Start WLAN interface
+rtl_act_wlan_if() {
+	VA_INTF="$INTF-va*"
+	VXD_IF="$INTF-vxd*"
+
+	#echo "VAP:$VAP"
+	#$BIN_DIR/webs -x
+
+	#echo "$WLAN_PREFIX $WLAN_PREFIX_LEN $WLAN_NAME"
+	for WLAN in $@ ; do
+		case $WLAN in
+			$VA_INTF)
+				#echo "va: $WLAN"
+				#$IWPRIV $WLAN set_mib vap_enable=0
+				EXT="va"
+			;; 
+			$VXD_IF)
+				#echo "vxd: $WLAN"
+				#$IWPRIV $WLAN set_mib vap_enable=0
+				$IWPRIV $WLAN copy_mib
+				EXT="vxd"
+			;;
+			$INTF)  
+				#echo "wlan intf: $WLAN"
+				$IWPRIV $WLAN set_mib vap_enable=$VAP
+				EXT="root"
+			;;	   
+			*)
+				#echo "cmd: $WLAN"
+				continue
+			;;
+		esac
+		$IFCONFIG $WLAN down
+		if [ "$1" = "start" ]; then
+			echo "Initialize $WLAN intf"
+			$START_WLAN $WLAN $INTF $EXT
+		fi
+	done
+}
+
+## kill 802.1x, autoconf and IAPP daemon ##
+rtl_kill_iwcontrol_pid() {
+	PIDFILE="$TOP_VAR_DIR/run/iwcontrol.pid"
+	if [ -f $PIDFILE ] ; then
+		PID=`cat $PIDFILE`
+		echo "IWCONTROL_PID=$PID"
+		if [ "$PID" != "0" ]; then
+			kill -9 $PID 2>/dev/null
+		fi
+		rm -f $PIDFILE
+	fi
+}
+
+rtl_kill_wlan_pid() {
+	for WLAN in $@ ; do
+		PIDFILE=$TOP_VAR_DIR/run/auth-$WLAN.pid
+		if [ -f $PIDFILE ] ; then
+			PID=`cat $PIDFILE`
+			echo "AUTH_PID=$PID"
+			if [ "$PID" != "0" ]; then
+				kill -9 $PID 2>/dev/null
+			fi
+			rm -f $PIDFILE
+
+			PIDFILE=$TOP_VAR_DIR/run/auth-$WLAN-vxd.pid
+			if [ -f $PIDFILE ] ; then
+				PID=`cat $PIDFILE`
+				if [ "$PID" != "0" ]; then
+					kill -9 $PID 2>/dev/null
+				fi
+				rm -f $PIDFILE
+			fi
+		fi
+
+		# for WPS ---------------------------------->>
+		PIDFILE=$TOP_VAR_DIR/run/wscd-$WLAN.pid
+		if [ "$both_band_ap" = "1" ]; then
+			PIDFILE=$TOP_VAR_DIR/run/wscd-wlan0-wlan1.pid
+		fi
+
+		if [ -f $PIDFILE ] ; then
+			PID=`cat $PIDFILE`
+			echo "WSCD_PID=$PID"
+			if [ "$PID" != "0" ]; then
+				kill -9 $PID 2>/dev/null
+			fi
+			rm -f $PIDFILE
+		fi
+	done
+	#<<----------------------------------- for WPS
+}
+
+stop_all() {
+	HAS_APP=1
+	if [ "$1" = "m-ap" ];then
+		ALL_INTF=$ALL_M_AP_INTF    
+	elif [ "$1" = "ap" ];then
+		ALL_INTF=$INTF	    
+		#stop_nat
+	elif [ "$1" = "rp" ]; then
+		ALL_INTF=$ALL_RP_INTF
+	elif [ "$1" = "wds" ]; then	
+		ALL_INTF=$ALL_WDS_INTF    
+		HAS_APP=0
+	else
+		ALL_INTF=$INTF
+		HAS_APP=0	
+	fi	    
+
+	$IWPRIV $INTF set_mib wsc_enable=0
+	rtl_act_wlan_if stop $ALL_INTF
+	rtl_br_lan_if stop $ALL_INTF $LAN_INTF
+	$START_WLAN_APP kill $ALL_INTF $BR_INTF
+	#killall webs 2> /dev/null
+	rtl_kill_iwcontrol_pid $ALL_INTF
+	rtl_kill_wlan_pid $ALL_INTF
+	rm -f $TOP_VAR_DIR/*.fifo
+}
+
+start_wds() {
+	if [ "$1" = "open"]; then
+		ENC_AUTH="0"
+	elif [ "$1" = "wep" ]; then
+		ENC_AUTH="1"
+	elif [ "$1" = "wpa-tkip" ]; then
+		ENC_AUTH="2"      	
+	elif [ "$1" = "wpa2_aes" ]; then
+		ENC_AUTH="4"	
+	fi
+
+	$IWPRIV $INTF set_mib wds_enable=1
+	$IWPRIV $INTF set_mib wds_pure=0
+	$IWPRIV $INTF set_mib wds_priority=1
+	$IWPRIV $INTF set_mib wds_num=0
+	$IWPRIV $INTF set_mib wds_encrypt=$ENC_AUTH  ## 0:none 1:wep40 2:tkip 4:aes 5:wep104
+	$IWPRIV $INTF set_mib wds_wepkey=$wep_key
+	$IWPRIV $INTF set_mib wds_passphrase=$wpa_psk
+	$IWPRIV $INTF set_mib wds_add=$WDS_PEER_MAC,0  ## peer mac address, rate
+
+	#$IWPRIV $INTF set_mib wsc_enable=0
+	rtl_act_wlan_if start $INTF
+	$IFCONFIG $WDS_INTF up
+	rtl_br_lan_if start $ALL_WDS_INTF
+	echo 1 > /proc/sys/net/ipv6/conf/$WDS_INTF/disable_ipv6
+	if [ "$ADD_BR" = "1" ]; then
+		$IFCONFIG $BR_INTF $WDS_IP
+	fi  
+	#$IFCONFIG $INTF-wds0 up
+}
+
+wps_restart() {
+	MODE=`cat $CONFIG_ROOT_DIR/$2/wlan_mode`
+
+	if [ "$MODE" = "0" ];then
+		stop_all ap
+		start_ap $ALL_AP_INTF
+	else
+		stop_all cli
+		start_cli $INTF
+	fi
+}
+
+scan_realtek() {
+	local device="$1"
+	local vif vifs channel
+	local sta_if ap_if
+
+	IFCONFIG=ifconfig
+
+	if [ "$device" = "AP0_2G" ]; then
+		INTF="wlan0"
+		CONFIG_ROOT_DIR="/var/rtl8192c"
+	elif [ "$device" = "AP1_2G" ]; then
+		INTF="wlan1"
+		CONFIG_ROOT_DIR="/var/rtl8192cd"
+	elif [ "$device" = "AP1_5G" ]; then
+		INTF="wlan1"
+		CONFIG_ROOT_DIR="/var/rtl8192cd"
+	fi
+	ADD_BR=0
+	BR_INTF="br-lan"
+	#LAN_INTF="eth0"
+	LAN_INTF=
+
+	TOP_VAR_DIR="/var"
+
+	BRCTL="brctl"
+	IWPRIV="iwpriv"
+
+	LOCAL_IP="192.168.1.254"
+	#MACID="00:01:73:01:FF:AB"
+	#LOCAL=00:01:73:01:ff:10    
+	WDS_PEER_MAC="002288773327"
+	WDS_IP="192.168.99.100"
+	ENC="wpa2_aes"
+	VAP=0
+	RP=0
+	WPS=0
+
+	ALL_AP_INTF=
+	ALL_RP_INTF=
+	ALL_WDS_INTF=
+	ALL_WLAN_INTF=
+	ALL_M_AP_INTF=
+	local _c=0
+
+	config_get channel "$device" channel
+	config_get vifs "$device" vifs
+	for vif in $vifs; do
+		config_get_bool disabled "$vif" disabled 0
+		[ $disabled -eq 0 ] || continue
+
+		local mode
+
+		config_get mode "$vif" mode
+		config_get ifname "$vif" ifname
+		config_get ssid "$vif" ssid
+
+		INTF=$ifname
+		WLAN_INTF=$INTF
+#		VA_INTF="$INTF-va0"
+		VXD_INTF="$INTF-vxd"
+		WDS_INTF="$INTF-wds0"
+
+		ALL_AP_INTF="$ALL_AP_INTF $INTF"
+		ALL_M_AP_INTF="$ALL_M_AP_INTF $INTF $VA_INTF"
+		ALL_RP_INTF="$ALL_RP_INTF $INTF $VXD_INTF"
+		ALL_WDS_INTF="$ALL_WDS_INTF $INTF $WDS_INTF"
+		ALL_WLAN_INTF="$ALL_WLAN_INTF $WLAN_INTF $VXD_INTF"
+		case "$mode" in
+			sta)
+				sta=1
+				STA_SSID=$ssid
+				sta_if="$vif"
+			;;
+			ap)
+				apmode=1
+				ap_if="${ap_if:+$ap_if }$vif"
+				ap_channel=$channel
+				eval "ssid_${ifname}=\"\$ssid\""
+				ALL_M_AP_INTF="$ALL_M_AP_INTF $ifname"
+				_c=$((${_c:-0} + 1))
+			;;
+			wds)
+				wdsmode=1
+			;;
+			*) echo "$device($vif): Invalid mode, ignored."; continue;;
+		esac
+	done
+
+	if [ "$_c" -gt 1 ]; then
+		VAP=1
+	else
+		VAP=0
+	fi
+
+	if [ -d /proc/wlan0 ] || [ -d /proc/wlan1 ]; then
+		if [ ! -d "$CONFIG_ROOT_DIR" ]; then
+			mkdir $CONFIG_ROOT_DIR
+		fi
+
+		if [ -f "$CONFIG_ROOT_DIR/wifi_script_dir" ]; then
+			SCRIPT_DIR=`cat $CONFIG_ROOT_DIR/wifi_script_dir`
+		else
+			SCRIPT_DIR=/root/wifi/script
+			echo $SCRIPT_DIR > $CONFIG_ROOT_DIR/wifi_script_dir
+		fi
+
+		if [ -f "$CONFIG_ROOT_DIR/wifi_bin_dir" ]; then
+			BIN_DIR=`cat $CONFIG_ROOT_DIR/wifi_bin_dir`
+		else
+			BIN_DIR="/bin"
+			echo $BIN_DIR > $CONFIG_ROOT_DIR/wifi_bin_dir
+		fi
+	fi
+
+	START_WLAN_ORG=$SCRIPT_DIR/wlan_8192c.sh
+	START_WLAN=$SCRIPT_DIR/mywlan_8192c.sh
+	START_WLAN_APP=$SCRIPT_DIR/wlanapp_8192c.sh
+
+	for intf in $ALL_WLAN_INTF; do
+		if [ -d /proc/wlan0 ] || [ -d /proc/wlan1 ]; then
+			if [ "$intf" == "wlan0" ] || [ "$intf" == "wlan0-vxd" ]; then
+				$SCRIPT_DIR/default_setting.sh $intf
+			fi
+			if [ "$intf" == "wlan1" ] || [ "$intf" == "wlan1-vxd" ]; then
+				grep -l "RTL8192F" /proc/wlan1/mib_rf 2> /dev/null
+				if [ $? -eq 0 ]; then
+					$SCRIPT_DIR/default_setting_rtl8192fr.sh $intf
+				fi
+				grep -l "RTL8812" /proc/wlan1/mib_rf 2> /dev/null
+				if [ $? -eq 0 ]; then
+					$SCRIPT_DIR/default_setting_ac.sh $intf
+				fi
+			fi
+		fi
+	done
+}
+
+disable_realtek() {
+	local device="$1"
+
+	if [ -d /proc/wlan0 ] || [ -d /proc/wlan1 ]; then
+		set_wifi_down "$device"
+
+		if [ "$apmode" == "1" ]; then
+			if [ "VAP" == "1" ]; then
+				stop_all m_ap
+			else
+				stop_all ap
+			fi
+		else
+			stop_all cli
+		fi
+	fi
+}
+
+enable_realtek() {
+	local device="$1"
+	local country vifs macaddr hidden
+	local hwmode htmode
+	local if_up
+	
+	if [ -d /proc/wlan0 ] || [ -d /proc/wlan1 ]; then
+
+	hidden=0
+	config_get country "$device" country
+	config_get vifs "$device" vifs
+	config_get hwmode "$device" hwmode
+	config_get htmode "$device" htmode
+	config_get hidden "$device" hidden
+
+	echo $hidden > $CONFIG_ROOT_DIR/$INTF/hidden_ssid
+
+	hwmode="${hwmode##11}"
+	case "$hwmode" in
+		ac)	BAND=76;;
+		n)	BAND=11;;
+		ng|na)	BAND=8;;
+		a)	BAND=4;;
+		g)	BAND=2;;
+		b)	BAND=1;;
+		*)	BAND=11;;
+	esac
+	echo $BAND > $CONFIG_ROOT_DIR/$INTF/band
+
+	case "$htmode" in
+		HT80-)	USE_40M=2; UPPER_SIDE=0;;
+		HT80+)	USE_40M=2; UPPER_SIDE=1;;
+		HT40-)	USE_40M=1; UPPER_SIDE=0;;
+		HT40+)	USE_40M=1; UPPER_SIDE=1;;
+		HT20)	USE_40M=0; UPPER_SIDE=0;;
+		*)	USE_40M=0; UPPER_SIDE=0;;
+	esac
+	echo $USE_40M > $CONFIG_ROOT_DIR/$INTF/channel_bonding
+	echo $UPPER_SIDE > $CONFIG_ROOT_DIR/$INTF/control_sideband
+
+	[ -n "$country" ] && {
+		echo "1" > $CONFIG_ROOT_DIR/$INTF/countrycode_enable
+		echo $country > $CONFIG_ROOT_DIR/$INTF/countrycode
+	}
+
+	for vif in $vifs; do
+		config_get_bool disabled "$vif" disabled 0
+		[ $disabled -eq 0 ] || continue
+
+		config_get ifname "$vif" ifname
+		config_get macaddr "$vif" macaddr
+		[ -n "$macaddr" ] && {
+			echo $macaddr > $CONFIG_ROOT_DIR/$ifname/wlan0_addr
+		}
+
+		config_get enc "$vif" encryption
+		case "$enc" in
+			*wep*)
+				local enc_bits key_type
+
+				config_get wep_type "$vif" encmode
+				# 0:wep disabled 1:wep-64bit 2:wep-128bit
+				[ -n $wep_type ] && wep_type=1
+				case "$wep_type" in
+					1) bits=64;;
+					2) bits=128;;
+					*) bits=64;;
+				esac
+
+				# wep_key_type - 1: hex mode 0: ascii
+				config_get wep_key_type "$vif" key_type
+				[ -n $wep_key_type ] && wep_key_type=0
+				case "$wep_key_type" in
+					0) key_type=a;;
+					1) key_type=h;;
+					*) key_type=a;;
+				esac
+
+				config_get wep_key_type "$vif" key_type
+				config_get key "$vif" key
+				case "$key" in
+					[1234])
+						local idx
+						for idx in 1 2 3 4; do
+							config_get ikey "$vif" key$idx
+							[ -n $ikey ] && {
+								eval "wep${bits}_${key_type}_key${key}=\"\$ikey\""
+							}
+						done
+
+						wep_key_idx=$key
+					;;
+				esac
+
+				ENC=wep
+			;;
+			*psk*)
+				case "$enc" in
+					*mixed*|*psk+psk2*) ENC=mixed;;
+					*psk2*) ENC=wpa2_aes;;
+					*) ENC=wpa_tkip;;
+				esac
+				case "$enc" in
+					*tkip+aes*|*tkip+ccmp*|*aes+tkip*|*ccmp+tkip*) ENC=mixed;;
+					*aes*|*ccmp*) ENC=wpa_aes;;
+					*tkip*) ENC=wpa_tkip;;
+				esac
+				config_get key "$vif" key
+				wpa_psk=$key
+			;;
+			*sae*)
+				case "$enc" in
+					*sae-mixed*) ENC=sae-mixed;;
+					*) ENC=sae;;
+				esac
+				config_get key "$vif" key
+				wpa_psk=$key
+			;;
+			*wpa*)
+				case "$enc" in
+					*mixed*|*wpa+wpa2*) ENC=mixed;;
+					*wpa2*) ENC=wpa2_aes;;
+					*) ENC=wpa_tkip;;
+				esac
+				case "$enc" in
+					*tkip+aes*|*tkip+ccmp*|*aes+tkip*|*ccmp+tkip*) ENC=mixed;;
+					*aes*|*ccmp*) ENC=wpa_aes;;
+					*tkip*) ENC=wpa_tkip;;
+				esac
+				config_get key "$vif" key
+				wpa_psk=$key
+			;;
+			*)
+				ENC=open
+			;;
+		esac
+
+		local net_cfg="$(find_net_config "$vif")"
+		[ -z "$net_cfg" ] || {
+			append if_up "set_wifi_up '$vif' '$ifname'" ";$N"
+			append if_up "start_net '$ifname' '$net_cfg'" ";$N"
+		}
+	done
+
+	ubus -t 5 wait_for network.interface.lan
+	if [ "$apmode" == "1" ]; then
+		start_ap $ALL_M_AP_INTF
+	fi
+
+	if [ "$sta" == "1" ]; then
+		start_cli $ENC $INTF
+	fi
+
+	eval "$if_up"
+
+	fi
+}
+
+detect_realtek() {
+	local i=-1
+
+	while grep -qs "^ *wl$((++i)):" /proc/net/dev; do
+		local channel type
+
+		config_get type wl${i} type
+		[ "$type" = realtek ] && continue
+		channel=1
+		cat <<EOF
+config wifi-device  rtl${i}
+	option type     realtek
+	option channel  ${channel:-11}
+	# REMOVE THIS LINE TO ENABLE WIFI:
+	option disabled 1
+
+config wifi-iface
+	option device   rtl${i}
+	option network	lan
+	option mode     ap
+	option ssid     ASR-OWRT${i#0}
+	option encryption none
+
+EOF
+	done
+}
diff --git a/package/kernel/realtek-wl/files/lib/wifi/rtk_flash.txt b/package/kernel/realtek-wl/files/lib/wifi/rtk_flash.txt
new file mode 100644
index 0000000..2ce02a7
--- /dev/null
+++ b/package/kernel/realtek-wl/files/lib/wifi/rtk_flash.txt
@@ -0,0 +1,34 @@
+HW_WLAN1_WLAN_ADDR=001122334455
+HW_WLAN0_11N_TRSWPAPE_CC=0
+HW_WLAN0_11N_TRSWPAPE_C9=0
+HW_WLAN0_WLAN_ADDR=001122334455
+HW_WLAN0_WLAN_ADDR1=223344556677
+HW_NIC1_ADDR=001122334455
+HW_NIC0_ADDR=001122334455
+HW_WLAN0_REG_DOMAIN=1
+HW_WLAN0_11N_THER=34
+HW_WLAN0_11N_XCAP=57
+HW_WLAN0_REG_DOMAIN=1
+HW_WLAN0_TX_POWER_CCK_A=2323232323232323232323232323
+HW_WLAN0_TX_POWER_CCK_B=2323232323232323232323232323
+HW_WLAN0_TX_POWER_HT40_1S_A=2323232323232323232323232323
+HW_WLAN0_TX_POWER_HT40_1S_B=2323232323232323232323232323
+HW_WLAN0_TX_POWER_DIFF_HT40_2S=0000000000000000000000000000
+HW_WLAN0_TX_POWER_DIFF_HT20=0000000000000000000000000000
+HW_WLAN0_TX_POWER_DIFF_OFDM=0000000000000000000000000000
+RF_DPK_PWSF_2G_A=18191a
+RF_DPK_PWSF_2G_B=1c1c1d
+RF_DPK_LUT_2G_EVEN_A0=0cefea0ce7ea0cefea0cf7ec0d1fee0d2fee0d47ef0d6ff20d87f30daff60dc7f80deffb0e07fd0df7fd0ecffd0fa7ff0d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_LUT_2G_ODD_A0=0ce7e90ce7ea0cefeb0d0fed0d2fed0d37ef0d5ff00d77f30d8ff50dbff70dd7f90e07fd0dfffd0e17fd0f47fe1000000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_LUT_2G_EVEN_B0=0d1fcc0d1fcf0d17d20d2fd40d4fd60d67d80d87da0dafdb0ddfde0e0fe20e27e40e87ea0ea7ef0ee7f20f3ff60faffc0d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_LUT_2G_ODD_B0=0d1fce0d17cf0d1fd40d3fd60d5fd70d77d90d9fdb0dc7dc0de7de0e17e30e47e60e87ed0ec7f10f27f40f7ff81000000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_LUT_2G_EVEN_A1=0cc7eb0ce7ed0cefec0cefef0cfff00d1ff10d37f30d47f30d6ff50d87f80db7fb0dd7fd0dd7fd0e77fc0f0ffe0fcfff0d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_LUT_2G_ODD_A1=0ccfec0cefee0ce7ee0cf7ef0d17f00d27f20d3ff30d67f40d77f70daff90dbffc0ddffd0e0ffc0eaffd0f67ff1000000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_LUT_2G_EVEN_B1=0d6fd10d67d20d67d40d87d80da7d90dbfdb0dd7de0df7df0e0fe10e47e50e6fe70eafed0ee7f20f07f50f6ff80fc7fe0d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_LUT_2G_ODD_B1=0d67d00d6fd30d77d70d97d80dafdb0ddfdd0ddfde0e0fe00e27e20e57e60e9fea0ecfef0ef7f40f2ff60f97fb1000000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_LUT_2G_EVEN_A2=0cd7e30ccfe40cd7e50cefe80d07e70d1fe80d37ea0d5fed0d8fef0daff20dc7f50dcff50de7f80e4ffc0e8ffe0fb0000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_LUT_2G_ODD_A2=0ccfe40cd7e40cdfe70cf7e70d17e80d27e90d47ec0d7fee0d9ff10dbff40dc7f40dcff50e0ffb0e6ffd0f4ffe1000000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_LUT_2G_EVEN_B2=0d1fcc0d1fd00d27d30d47d40d57d60d6fd80d97db0da7dd0dd7df0e07e30e3fe70e67eb0e97ef0edff20f47f60fbffc0d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_LUT_2G_ODD_B2=0d1fcf0d1fd20d2fd40d4fd50d67d80d8fda0d97dc0dd7dd0defe10e2fe60e5fe90e7fee0ea7f00f0ff40f6ff91000000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d78000d7800
+RF_DPK_DP_PATH_A_OK=1
+RF_DPK_DP_PATH_B_OK=1
diff --git a/package/kernel/realtek-wl/files/lib/wifi/rtk_flash_ac.txt b/package/kernel/realtek-wl/files/lib/wifi/rtk_flash_ac.txt
new file mode 100644
index 0000000..e5361fe
--- /dev/null
+++ b/package/kernel/realtek-wl/files/lib/wifi/rtk_flash_ac.txt
@@ -0,0 +1,21 @@
+HW_WLAN1_WLAN_ADDR=001122334455
+HW_WLAN1_WLAN_ADDR1=001122334411
+HW_NIC1_ADDR=001122334455
+HW_NIC0_ADDR=001122334455
+HW_WLAN1_11N_PA_TYPE=0
+HW_WLAN1_REG_DOMAIN=1
+HW_WLAN1_11N_THER=33
+HW_WLAN1_11N_THER_2=33
+HW_WLAN1_11N_XCAP=8
+HW_WLAN1_TX_POWER_5G_HT40_1S_A=00000000000000000000000000000000000000000000000000000000000000000000000b0b0b0b0b0c0c0c0c0c0c0c0c0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f101010101010101011111111111111110b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f10101010101010101111111111111111
+HW_WLAN1_TX_POWER_5G_HT40_1S_B=00000000000000000000000000000000000000000000000000000000000000000000000b0b0b0b0b0c0c0c0c0c0c0c0c0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f101010101010101011111111111111110b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f10101010101010101111111111111111
+HW_WLAN1_TX_POWER_DIFF_5G_20BW1S_OFDM1T_A=0000000000000000000000000000
+HW_WLAN1_TX_POWER_DIFF_5G_40BW2S_20BW2S_A=0000000000000000000000000000
+HW_WLAN1_TX_POWER_DIFF_5G_80BW1S_160BW1S_A=0000000000000000000000000000
+HW_WLAN1_TX_POWER_DIFF_5G_80BW2S_160BW2S_A=0000000000000000000000000000
+HW_WLAN1_TX_POWER_DIFF_5G_20BW1S_OFDM1T_B=0000000000000000000000000000
+HW_WLAN1_TX_POWER_DIFF_5G_40BW2S_20BW2S_B=0000000000000000000000000000
+HW_WLAN1_TX_POWER_DIFF_5G_80BW1S_160BW1S_B=0000000000000000000000000000
+HW_WLAN1_TX_POWER_DIFF_5G_80BW2S_160BW2S_B=0000000000000000000000000000
+HW_WLAN1_TX_POWER_TSSI_5G_HT40_1S_A=0000000000000000000000000000000000000000000000000000000000000000000000707070707050505050505050502020202020202020404040404040404080808080808080808080808080808080808080808080808080808080808080808080808080808080909090909090909050505050505050509090909090909090a0a0a0a0a0a0a0a0505050505050505080808080808080808080808080808080808080808080808080303030303030303000000000000000000000000000000000000000
+HW_WLAN1_TX_POWER_TSSI_5G_HT40_1S_B=000000000000000000000000000000000000000000000000000000000000000000000006060606060707070707070707050505050505050506060606060606060a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0a0a0a0a0a0a0a0a08080808080808080909090909090909080808080808080807070707070707070708080808080808080808080808080808060606060606060600000000000000000000000000000000000000