[][MAC80211][misc][Change revert patch for backports-5.15]

[Description]
Change revert patch for backports-5.15
Since mt7996 already merge into mt76 master tree, remove temp mt7996 source code.

[Release-log]
N/A

Change-Id: I28ec1a2b7ddf24b000bd05db5aee140d96a5a03d
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6916254
diff --git a/autobuild_mac80211_release/mt7622_mt7915_mac80211/lede-branch-build-sanity.sh b/autobuild_mac80211_release/mt7622_mt7915_mac80211/lede-branch-build-sanity.sh
index 84251d0..d5c4dec 100755
--- a/autobuild_mac80211_release/mt7622_mt7915_mac80211/lede-branch-build-sanity.sh
+++ b/autobuild_mac80211_release/mt7622_mt7915_mac80211/lede-branch-build-sanity.sh
@@ -3,6 +3,7 @@
 #get the brach_name
 temp=${0%/*}
 branch_name=${temp##*/}
+backport_new=0
 
 #step1 clean
 #clean
@@ -16,7 +17,7 @@
 
 prepare_flowoffload
 
-prepare_mac80211
+prepare_mac80211 ${backport_new}
 
 prepare_final ${branch_name}
 
diff --git a/autobuild_mac80211_release/mt7986_mac80211/lede-branch-build-sanity.sh b/autobuild_mac80211_release/mt7986_mac80211/lede-branch-build-sanity.sh
index b5a507e..df47bd4 100755
--- a/autobuild_mac80211_release/mt7986_mac80211/lede-branch-build-sanity.sh
+++ b/autobuild_mac80211_release/mt7986_mac80211/lede-branch-build-sanity.sh
@@ -58,6 +58,10 @@
 		echo "CONFIG_FRAME_WARN=4096" >> ${BUILD_DIR}/target/linux/mediatek/mt7986/config-5.4
 	}
 
+	[ "$backport_new" = "1" ] && {
+		rm -rf ${BUILD_DIR}/package/kernel/mt76/patches/*revert-for-backports*.patch
+	}
+
 }
 
 #step1 clean
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/.config b/autobuild_mac80211_release/mt7988_mt7996_mac80211/.config
index 4580ab2..57a4783 100644
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/.config
+++ b/autobuild_mac80211_release/mt7988_mt7996_mac80211/.config
@@ -45,12 +45,9 @@
 # CONFIG_TARGET_mediatek_mt7623 is not set
 # CONFIG_TARGET_mediatek_mt7629 is not set
 # CONFIG_TARGET_mediatek_mt7986 is not set
-# CONFIG_TARGET_mediatek_mt7981 is not set
 CONFIG_TARGET_mediatek_mt7988=y
 CONFIG_TARGET_MULTI_PROFILE=y
 # CONFIG_TARGET_mediatek_mt7988_DEVICE_mediatek_mt7988a-gsw-10g-spim-nand is not set
-# CONFIG_TARGET_mediatek_mt7988_DEVICE_mediatek_mt7988a-gsw-10g-spim-nand-4pcie is not set
-# CONFIG_TARGET_mediatek_mt7988_DEVICE_mediatek_mt7988a-gsw-10g-sfp-spim-nand is not set
 # CONFIG_TARGET_mediatek_mt7988_DEVICE_mediatek_mt7988a-dsa-10g-spim-nand is not set
 # CONFIG_TARGET_mediatek_mt7988_DEVICE_mediatek_mt7988a-dsa-e2p5g-spim-nand is not set
 # CONFIG_TARGET_mediatek_mt7988_DEVICE_mediatek_mt7988a-dsa-i2p5g-spim-nand is not set
@@ -71,9 +68,7 @@
 CONFIG_TARGET_DEVICE_mediatek_mt7988_DEVICE_mediatek_mt7988a-dsa-10g-spim-nor=y
 CONFIG_TARGET_DEVICE_mediatek_mt7988_DEVICE_mediatek_mt7988a-dsa-e2p5g-spim-nand=y
 CONFIG_TARGET_DEVICE_mediatek_mt7988_DEVICE_mediatek_mt7988a-dsa-i2p5g-spim-nand=y
-# CONFIG_TARGET_DEVICE_mediatek_mt7988_DEVICE_mediatek_mt7988a-gsw-10g-sfp-spim-nand is not set
 CONFIG_TARGET_DEVICE_mediatek_mt7988_DEVICE_mediatek_mt7988a-gsw-10g-spim-nand=y
-# CONFIG_TARGET_DEVICE_mediatek_mt7988_DEVICE_mediatek_mt7988a-gsw-10g-spim-nand-4pcie is not set
 # end of Target Devices
 
 CONFIG_HAS_SUBTARGETS=y
@@ -182,7 +177,6 @@
 # CONFIG_BUILDBOT is not set
 CONFIG_SIGNED_PACKAGES=y
 CONFIG_SIGNATURE_CHECK=y
-CONFIG_DOWNLOAD_CHECK_CERTIFICATE=y
 
 #
 # General build options
@@ -432,10 +426,10 @@
 CONFIG_TARGET_INIT_SUPPRESS_STDERR=y
 # CONFIG_VERSIONOPT is not set
 CONFIG_PER_FEED_REPO=y
+CONFIG_FEED_mtk_openwrt_feed=y
 CONFIG_FEED_packages=y
 CONFIG_FEED_luci=y
 CONFIG_FEED_routing=y
-CONFIG_FEED_telephony=y
 
 #
 # Base system
@@ -447,7 +441,7 @@
 # CONFIG_PACKAGE_blockd is not set
 # CONFIG_PACKAGE_bridge is not set
 CONFIG_PACKAGE_busybox=y
-CONFIG_BUSYBOX_CUSTOM=y
+# CONFIG_BUSYBOX_CUSTOM is not set
 CONFIG_BUSYBOX_DEFAULT_HAVE_DOT_CONFIG=y
 # CONFIG_BUSYBOX_DEFAULT_DESKTOP is not set
 # CONFIG_BUSYBOX_DEFAULT_EXTRA_COMPAT is not set
@@ -983,8 +977,8 @@
 # CONFIG_BUSYBOX_DEFAULT_LAST is not set
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_LAST_FANCY is not set
 # CONFIG_BUSYBOX_DEFAULT_LOSETUP is not set
-# CONFIG_BUSYBOX_DEFAULT_LSPCI is not set
-# CONFIG_BUSYBOX_DEFAULT_LSUSB is not set
+CONFIG_BUSYBOX_DEFAULT_LSPCI=y
+CONFIG_BUSYBOX_DEFAULT_LSUSB=y
 # CONFIG_BUSYBOX_DEFAULT_MDEV is not set
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_MDEV_CONF is not set
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_MDEV_RENAME is not set
@@ -1287,19 +1281,19 @@
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_TC_INGRESS is not set
 # CONFIG_BUSYBOX_DEFAULT_TCPSVD is not set
 # CONFIG_BUSYBOX_DEFAULT_UDPSVD is not set
-# CONFIG_BUSYBOX_DEFAULT_TELNET is not set
-# CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNET_TTYPE is not set
-# CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNET_AUTOLOGIN is not set
+CONFIG_BUSYBOX_DEFAULT_TELNET=y
+CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNET_TTYPE=y
+CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNET_AUTOLOGIN=y
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNET_WIDTH is not set
-# CONFIG_BUSYBOX_DEFAULT_TELNETD is not set
-# CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNETD_STANDALONE is not set
+CONFIG_BUSYBOX_DEFAULT_TELNETD=y
+CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNETD_STANDALONE=y
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_TELNETD_INETD_WAIT is not set
-# CONFIG_BUSYBOX_DEFAULT_TFTP is not set
+CONFIG_BUSYBOX_DEFAULT_TFTP=y
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_PROGRESS_BAR is not set
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_HPA_COMPAT is not set
 # CONFIG_BUSYBOX_DEFAULT_TFTPD is not set
-# CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_GET is not set
-# CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_PUT is not set
+CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_GET=y
+CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_PUT=y
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_TFTP_BLOCKSIZE is not set
 # CONFIG_BUSYBOX_DEFAULT_TFTP_DEBUG is not set
 # CONFIG_BUSYBOX_DEFAULT_TLS is not set
@@ -1309,7 +1303,7 @@
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_TRACEROUTE_USE_ICMP is not set
 # CONFIG_BUSYBOX_DEFAULT_TUNCTL is not set
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_TUNCTL_UG is not set
-# CONFIG_BUSYBOX_DEFAULT_VCONFIG is not set
+CONFIG_BUSYBOX_DEFAULT_VCONFIG=y
 # CONFIG_BUSYBOX_DEFAULT_WGET is not set
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_WGET_LONG_OPTIONS is not set
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_WGET_STATUSBAR is not set
@@ -1357,7 +1351,7 @@
 CONFIG_BUSYBOX_DEFAULT_KILLALL=y
 # CONFIG_BUSYBOX_DEFAULT_KILLALL5 is not set
 # CONFIG_BUSYBOX_DEFAULT_LSOF is not set
-# CONFIG_BUSYBOX_DEFAULT_MPSTAT is not set
+CONFIG_BUSYBOX_DEFAULT_MPSTAT=y
 # CONFIG_BUSYBOX_DEFAULT_NMETER is not set
 CONFIG_BUSYBOX_DEFAULT_PGREP=y
 # CONFIG_BUSYBOX_DEFAULT_PKILL is not set
@@ -1502,904 +1496,6 @@
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_IPC_SYSLOG is not set
 CONFIG_BUSYBOX_DEFAULT_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0
 # CONFIG_BUSYBOX_DEFAULT_FEATURE_KMSG_SYSLOG is not set
-CONFIG_BUSYBOX_CONFIG_HAVE_DOT_CONFIG=y
-
-#
-# Settings
-#
-# CONFIG_BUSYBOX_CONFIG_DESKTOP is not set
-# CONFIG_BUSYBOX_CONFIG_EXTRA_COMPAT is not set
-# CONFIG_BUSYBOX_CONFIG_FEDORA_COMPAT is not set
-CONFIG_BUSYBOX_CONFIG_INCLUDE_SUSv2=y
-CONFIG_BUSYBOX_CONFIG_LONG_OPTS=y
-CONFIG_BUSYBOX_CONFIG_SHOW_USAGE=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_VERBOSE_USAGE=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_COMPRESS_USAGE is not set
-CONFIG_BUSYBOX_CONFIG_LFS=y
-# CONFIG_BUSYBOX_CONFIG_PAM is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_DEVPTS=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_UTMP is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_PIDFILE=y
-CONFIG_BUSYBOX_CONFIG_PID_FILE_PATH="/var/run"
-# CONFIG_BUSYBOX_CONFIG_BUSYBOX is not set
-# CONFIG_BUSYBOX_CONFIG_INSTALL_NO_USR is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SUID is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_PREFER_APPLETS=y
-CONFIG_BUSYBOX_CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe"
-# CONFIG_BUSYBOX_CONFIG_SELINUX is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_CLEAN_UP is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SYSLOG_INFO is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_SYSLOG=y
-
-#
-# Build Options
-#
-# CONFIG_BUSYBOX_CONFIG_STATIC is not set
-# CONFIG_BUSYBOX_CONFIG_PIE is not set
-# CONFIG_BUSYBOX_CONFIG_NOMMU is not set
-CONFIG_BUSYBOX_CONFIG_CROSS_COMPILER_PREFIX=""
-CONFIG_BUSYBOX_CONFIG_SYSROOT=""
-CONFIG_BUSYBOX_CONFIG_EXTRA_CFLAGS=""
-CONFIG_BUSYBOX_CONFIG_EXTRA_LDFLAGS=""
-CONFIG_BUSYBOX_CONFIG_EXTRA_LDLIBS=""
-# CONFIG_BUSYBOX_CONFIG_USE_PORTABLE_CODE is not set
-# CONFIG_BUSYBOX_CONFIG_STACK_OPTIMIZATION_386 is not set
-# CONFIG_BUSYBOX_CONFIG_STATIC_LIBGCC is not set
-
-#
-# Installation Options ("make install" behavior)
-#
-CONFIG_BUSYBOX_CONFIG_INSTALL_APPLET_SYMLINKS=y
-# CONFIG_BUSYBOX_CONFIG_INSTALL_APPLET_HARDLINKS is not set
-# CONFIG_BUSYBOX_CONFIG_INSTALL_APPLET_SCRIPT_WRAPPERS is not set
-# CONFIG_BUSYBOX_CONFIG_INSTALL_APPLET_DONT is not set
-CONFIG_BUSYBOX_CONFIG_PREFIX="./_install"
-
-#
-# Debugging Options
-#
-# CONFIG_BUSYBOX_CONFIG_DEBUG is not set
-# CONFIG_BUSYBOX_CONFIG_DEBUG_SANITIZE is not set
-# CONFIG_BUSYBOX_CONFIG_UNIT_TEST is not set
-# CONFIG_BUSYBOX_CONFIG_WERROR is not set
-# CONFIG_BUSYBOX_CONFIG_WARN_SIMPLE_MSG is not set
-CONFIG_BUSYBOX_CONFIG_NO_DEBUG_LIB=y
-# CONFIG_BUSYBOX_CONFIG_DMALLOC is not set
-# CONFIG_BUSYBOX_CONFIG_EFENCE is not set
-
-#
-# Library Tuning
-#
-# CONFIG_BUSYBOX_CONFIG_FEATURE_USE_BSS_TAIL is not set
-# CONFIG_BUSYBOX_CONFIG_FLOAT_DURATION is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_RTMINMAX is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_BUFFERS_USE_MALLOC is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set
-CONFIG_BUSYBOX_CONFIG_PASSWORD_MINLEN=6
-CONFIG_BUSYBOX_CONFIG_MD5_SMALL=1
-CONFIG_BUSYBOX_CONFIG_SHA3_SMALL=1
-CONFIG_BUSYBOX_CONFIG_FEATURE_FAST_TOP=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_ETC_NETWORKS is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_ETC_SERVICES is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_MAX_LEN=512
-# CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_VI is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_HISTORY=256
-# CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_SAVEHISTORY is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_REVERSE_SEARCH is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_TAB_COMPLETION=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_USERNAME_COMPLETION is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_FANCY_PROMPT=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_WINCH is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set
-# CONFIG_BUSYBOX_CONFIG_LOCALE_SUPPORT is not set
-# CONFIG_BUSYBOX_CONFIG_UNICODE_SUPPORT is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_NON_POSIX_CP=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_USE_SENDFILE=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_COPYBUF_KB=4
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SKIP_ROOTFS is not set
-CONFIG_BUSYBOX_CONFIG_MONOTONIC_SYSCALL=y
-CONFIG_BUSYBOX_CONFIG_IOCTL_HEX2STR_ERROR=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_HWIB is not set
-# end of Settings
-
-#
-# Applets
-#
-
-#
-# Archival Utilities
-#
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SEAMLESS_XZ is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SEAMLESS_LZMA is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SEAMLESS_BZ2 is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_SEAMLESS_GZ=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SEAMLESS_Z is not set
-# CONFIG_BUSYBOX_CONFIG_AR is not set
-# CONFIG_BUSYBOX_CONFIG_UNCOMPRESS is not set
-CONFIG_BUSYBOX_CONFIG_GUNZIP=y
-CONFIG_BUSYBOX_CONFIG_ZCAT=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_GUNZIP_LONG_OPTIONS is not set
-CONFIG_BUSYBOX_CONFIG_BUNZIP2=y
-CONFIG_BUSYBOX_CONFIG_BZCAT=y
-# CONFIG_BUSYBOX_CONFIG_UNLZMA is not set
-# CONFIG_BUSYBOX_CONFIG_LZCAT is not set
-# CONFIG_BUSYBOX_CONFIG_LZMA is not set
-# CONFIG_BUSYBOX_CONFIG_UNXZ is not set
-# CONFIG_BUSYBOX_CONFIG_XZCAT is not set
-# CONFIG_BUSYBOX_CONFIG_XZ is not set
-# CONFIG_BUSYBOX_CONFIG_BZIP2 is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_BZIP2_DECOMPRESS=y
-# CONFIG_BUSYBOX_CONFIG_CPIO is not set
-# CONFIG_BUSYBOX_CONFIG_DPKG is not set
-# CONFIG_BUSYBOX_CONFIG_DPKG_DEB is not set
-CONFIG_BUSYBOX_CONFIG_GZIP=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_GZIP_LONG_OPTIONS is not set
-CONFIG_BUSYBOX_CONFIG_GZIP_FAST=0
-# CONFIG_BUSYBOX_CONFIG_FEATURE_GZIP_LEVELS is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_GZIP_DECOMPRESS=y
-# CONFIG_BUSYBOX_CONFIG_LZOP is not set
-# CONFIG_BUSYBOX_CONFIG_UNLZOP is not set
-# CONFIG_BUSYBOX_CONFIG_LZOPCAT is not set
-# CONFIG_BUSYBOX_CONFIG_RPM is not set
-# CONFIG_BUSYBOX_CONFIG_RPM2CPIO is not set
-CONFIG_BUSYBOX_CONFIG_TAR=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_LONG_OPTIONS is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_CREATE=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_AUTODETECT is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_FROM=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_UNAME_GNAME is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TAR_NOPRESERVE_TIME is not set
-# CONFIG_BUSYBOX_CONFIG_UNZIP is not set
-# end of Archival Utilities
-
-#
-# Coreutils
-#
-CONFIG_BUSYBOX_CONFIG_BASENAME=y
-CONFIG_BUSYBOX_CONFIG_CAT=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_CATN is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_CATV is not set
-CONFIG_BUSYBOX_CONFIG_CHGRP=y
-CONFIG_BUSYBOX_CONFIG_CHMOD=y
-CONFIG_BUSYBOX_CONFIG_CHOWN=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set
-CONFIG_BUSYBOX_CONFIG_CHROOT=y
-# CONFIG_BUSYBOX_CONFIG_CKSUM is not set
-# CONFIG_BUSYBOX_CONFIG_COMM is not set
-CONFIG_BUSYBOX_CONFIG_CP=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_CP_LONG_OPTIONS is not set
-CONFIG_BUSYBOX_CONFIG_CUT=y
-CONFIG_BUSYBOX_CONFIG_DATE=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_DATE_ISOFMT=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_DATE_NANO is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_DATE_COMPAT is not set
-CONFIG_BUSYBOX_CONFIG_DD=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_DD_SIGNAL_HANDLING=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_DD_THIRD_STATUS_LINE is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_DD_IBS_OBS=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_DD_STATUS is not set
-CONFIG_BUSYBOX_CONFIG_DF=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_DF_FANCY is not set
-CONFIG_BUSYBOX_CONFIG_DIRNAME=y
-# CONFIG_BUSYBOX_CONFIG_DOS2UNIX is not set
-# CONFIG_BUSYBOX_CONFIG_UNIX2DOS is not set
-CONFIG_BUSYBOX_CONFIG_DU=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y
-CONFIG_BUSYBOX_CONFIG_ECHO=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FANCY_ECHO=y
-CONFIG_BUSYBOX_CONFIG_ENV=y
-# CONFIG_BUSYBOX_CONFIG_EXPAND is not set
-# CONFIG_BUSYBOX_CONFIG_UNEXPAND is not set
-CONFIG_BUSYBOX_CONFIG_EXPR=y
-CONFIG_BUSYBOX_CONFIG_EXPR_MATH_SUPPORT_64=y
-# CONFIG_BUSYBOX_CONFIG_FACTOR is not set
-CONFIG_BUSYBOX_CONFIG_FALSE=y
-# CONFIG_BUSYBOX_CONFIG_FOLD is not set
-CONFIG_BUSYBOX_CONFIG_HEAD=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FANCY_HEAD=y
-# CONFIG_BUSYBOX_CONFIG_HOSTID is not set
-CONFIG_BUSYBOX_CONFIG_ID=y
-# CONFIG_BUSYBOX_CONFIG_GROUPS is not set
-# CONFIG_BUSYBOX_CONFIG_INSTALL is not set
-# CONFIG_BUSYBOX_CONFIG_LINK is not set
-CONFIG_BUSYBOX_CONFIG_LN=y
-# CONFIG_BUSYBOX_CONFIG_LOGNAME is not set
-CONFIG_BUSYBOX_CONFIG_LS=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_LS_FILETYPES=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_LS_FOLLOWLINKS=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_LS_RECURSIVE=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_LS_WIDTH=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_LS_SORTFILES=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_LS_TIMESTAMPS=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_LS_USERNAME=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_LS_COLOR=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y
-CONFIG_BUSYBOX_CONFIG_MD5SUM=y
-# CONFIG_BUSYBOX_CONFIG_SHA1SUM is not set
-CONFIG_BUSYBOX_CONFIG_SHA256SUM=y
-# CONFIG_BUSYBOX_CONFIG_SHA512SUM is not set
-# CONFIG_BUSYBOX_CONFIG_SHA3SUM is not set
-
-#
-# Common options for md5sum, sha1sum, sha256sum, sha512sum, sha3sum
-#
-CONFIG_BUSYBOX_CONFIG_FEATURE_MD5_SHA1_SUM_CHECK=y
-CONFIG_BUSYBOX_CONFIG_MKDIR=y
-CONFIG_BUSYBOX_CONFIG_MKFIFO=y
-CONFIG_BUSYBOX_CONFIG_MKNOD=y
-CONFIG_BUSYBOX_CONFIG_MKTEMP=y
-CONFIG_BUSYBOX_CONFIG_MV=y
-CONFIG_BUSYBOX_CONFIG_NICE=y
-# CONFIG_BUSYBOX_CONFIG_NL is not set
-# CONFIG_BUSYBOX_CONFIG_NOHUP is not set
-# CONFIG_BUSYBOX_CONFIG_NPROC is not set
-# CONFIG_BUSYBOX_CONFIG_OD is not set
-# CONFIG_BUSYBOX_CONFIG_PASTE is not set
-# CONFIG_BUSYBOX_CONFIG_PRINTENV is not set
-CONFIG_BUSYBOX_CONFIG_PRINTF=y
-CONFIG_BUSYBOX_CONFIG_PWD=y
-CONFIG_BUSYBOX_CONFIG_READLINK=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_READLINK_FOLLOW=y
-# CONFIG_BUSYBOX_CONFIG_REALPATH is not set
-CONFIG_BUSYBOX_CONFIG_RM=y
-CONFIG_BUSYBOX_CONFIG_RMDIR=y
-CONFIG_BUSYBOX_CONFIG_SEQ=y
-# CONFIG_BUSYBOX_CONFIG_SHRED is not set
-# CONFIG_BUSYBOX_CONFIG_SHUF is not set
-CONFIG_BUSYBOX_CONFIG_SLEEP=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FANCY_SLEEP=y
-CONFIG_BUSYBOX_CONFIG_SORT=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SORT_BIG is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SORT_OPTIMIZE_MEMORY is not set
-# CONFIG_BUSYBOX_CONFIG_SPLIT is not set
-# CONFIG_BUSYBOX_CONFIG_STAT is not set
-# CONFIG_BUSYBOX_CONFIG_STTY is not set
-# CONFIG_BUSYBOX_CONFIG_SUM is not set
-CONFIG_BUSYBOX_CONFIG_SYNC=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SYNC_FANCY is not set
-CONFIG_BUSYBOX_CONFIG_FSYNC=y
-# CONFIG_BUSYBOX_CONFIG_TAC is not set
-CONFIG_BUSYBOX_CONFIG_TAIL=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FANCY_TAIL=y
-CONFIG_BUSYBOX_CONFIG_TEE=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_TEE_USE_BLOCK_IO=y
-CONFIG_BUSYBOX_CONFIG_TEST=y
-CONFIG_BUSYBOX_CONFIG_TEST1=y
-CONFIG_BUSYBOX_CONFIG_TEST2=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_TEST_64=y
-# CONFIG_BUSYBOX_CONFIG_TIMEOUT is not set
-CONFIG_BUSYBOX_CONFIG_TOUCH=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TOUCH_NODEREF is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_TOUCH_SUSV3=y
-CONFIG_BUSYBOX_CONFIG_TR=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TR_CLASSES is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TR_EQUIV is not set
-CONFIG_BUSYBOX_CONFIG_TRUE=y
-# CONFIG_BUSYBOX_CONFIG_TRUNCATE is not set
-# CONFIG_BUSYBOX_CONFIG_TTY is not set
-CONFIG_BUSYBOX_CONFIG_UNAME=y
-CONFIG_BUSYBOX_CONFIG_UNAME_OSNAME="GNU/Linux"
-# CONFIG_BUSYBOX_CONFIG_BB_ARCH is not set
-CONFIG_BUSYBOX_CONFIG_UNIQ=y
-# CONFIG_BUSYBOX_CONFIG_UNLINK is not set
-# CONFIG_BUSYBOX_CONFIG_USLEEP is not set
-# CONFIG_BUSYBOX_CONFIG_UUDECODE is not set
-# CONFIG_BUSYBOX_CONFIG_BASE32 is not set
-# CONFIG_BUSYBOX_CONFIG_BASE64 is not set
-# CONFIG_BUSYBOX_CONFIG_UUENCODE is not set
-CONFIG_BUSYBOX_CONFIG_WC=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_WC_LARGE is not set
-# CONFIG_BUSYBOX_CONFIG_WHOAMI is not set
-CONFIG_BUSYBOX_CONFIG_YES=y
-
-#
-# Common options
-#
-# CONFIG_BUSYBOX_CONFIG_FEATURE_VERBOSE is not set
-
-#
-# Common options for cp and mv
-#
-CONFIG_BUSYBOX_CONFIG_FEATURE_PRESERVE_HARDLINKS=y
-
-#
-# Common options for df, du, ls
-#
-CONFIG_BUSYBOX_CONFIG_FEATURE_HUMAN_READABLE=y
-# end of Coreutils
-
-#
-# Console Utilities
-#
-# CONFIG_BUSYBOX_CONFIG_CHVT is not set
-CONFIG_BUSYBOX_CONFIG_CLEAR=y
-# CONFIG_BUSYBOX_CONFIG_DEALLOCVT is not set
-# CONFIG_BUSYBOX_CONFIG_DUMPKMAP is not set
-# CONFIG_BUSYBOX_CONFIG_FGCONSOLE is not set
-# CONFIG_BUSYBOX_CONFIG_KBD_MODE is not set
-# CONFIG_BUSYBOX_CONFIG_LOADFONT is not set
-# CONFIG_BUSYBOX_CONFIG_SETFONT is not set
-# CONFIG_BUSYBOX_CONFIG_LOADKMAP is not set
-# CONFIG_BUSYBOX_CONFIG_OPENVT is not set
-CONFIG_BUSYBOX_CONFIG_RESET=y
-# CONFIG_BUSYBOX_CONFIG_RESIZE is not set
-# CONFIG_BUSYBOX_CONFIG_SETCONSOLE is not set
-# CONFIG_BUSYBOX_CONFIG_SETKEYCODES is not set
-# CONFIG_BUSYBOX_CONFIG_SETLOGCONS is not set
-# CONFIG_BUSYBOX_CONFIG_SHOWKEY is not set
-# end of Console Utilities
-
-#
-# Debian Utilities
-#
-# CONFIG_BUSYBOX_CONFIG_PIPE_PROGRESS is not set
-# CONFIG_BUSYBOX_CONFIG_RUN_PARTS is not set
-CONFIG_BUSYBOX_CONFIG_START_STOP_DAEMON=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_START_STOP_DAEMON_LONG_OPTIONS is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_START_STOP_DAEMON_FANCY is not set
-CONFIG_BUSYBOX_CONFIG_WHICH=y
-# end of Debian Utilities
-
-#
-# klibc-utils
-#
-# CONFIG_BUSYBOX_CONFIG_MINIPS is not set
-# CONFIG_BUSYBOX_CONFIG_NUKE is not set
-# CONFIG_BUSYBOX_CONFIG_RESUME is not set
-# CONFIG_BUSYBOX_CONFIG_RUN_INIT is not set
-# end of klibc-utils
-
-#
-# Editors
-#
-CONFIG_BUSYBOX_CONFIG_AWK=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_AWK_LIBM=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_AWK_GNU_EXTENSIONS=y
-CONFIG_BUSYBOX_CONFIG_CMP=y
-# CONFIG_BUSYBOX_CONFIG_DIFF is not set
-# CONFIG_BUSYBOX_CONFIG_ED is not set
-# CONFIG_BUSYBOX_CONFIG_PATCH is not set
-CONFIG_BUSYBOX_CONFIG_SED=y
-CONFIG_BUSYBOX_CONFIG_VI=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_VI_MAX_LEN=1024
-# CONFIG_BUSYBOX_CONFIG_FEATURE_VI_8BIT is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_VI_COLON=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_VI_YANKMARK=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_VI_SEARCH=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_VI_USE_SIGNALS=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_VI_DOT_CMD=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_VI_READONLY=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_VI_SETOPTS=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_VI_SET=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_VI_WIN_RESIZE=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_VI_ASK_TERMINAL=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_VI_UNDO is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_ALLOW_EXEC=y
-# end of Editors
-
-#
-# Finding Utilities
-#
-CONFIG_BUSYBOX_CONFIG_FIND=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_PRINT0=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_MTIME=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_MMIN=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_PERM=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_TYPE=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_EXECUTABLE is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_XDEV=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_MAXDEPTH=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_NEWER=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_INUM is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_EXEC=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_EXEC_PLUS is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_USER=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_GROUP=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_NOT=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_DEPTH=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_PAREN=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_SIZE=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_PRUNE=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_QUIT is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_DELETE is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_EMPTY is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_PATH=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_REGEX=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_FIND_LINKS is not set
-CONFIG_BUSYBOX_CONFIG_GREP=y
-CONFIG_BUSYBOX_CONFIG_EGREP=y
-CONFIG_BUSYBOX_CONFIG_FGREP=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_GREP_CONTEXT=y
-CONFIG_BUSYBOX_CONFIG_XARGS=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_PARALLEL is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_XARGS_SUPPORT_ARGS_FILE is not set
-# end of Finding Utilities
-
-#
-# Init Utilities
-#
-# CONFIG_BUSYBOX_CONFIG_BOOTCHARTD is not set
-CONFIG_BUSYBOX_CONFIG_HALT=y
-CONFIG_BUSYBOX_CONFIG_POWEROFF=y
-CONFIG_BUSYBOX_CONFIG_REBOOT=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_WAIT_FOR_INIT is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_CALL_TELINIT is not set
-# CONFIG_BUSYBOX_CONFIG_INIT is not set
-# CONFIG_BUSYBOX_CONFIG_LINUXRC is not set
-# end of Init Utilities
-
-#
-# Login/Password Management Utilities
-#
-CONFIG_BUSYBOX_CONFIG_FEATURE_SHADOWPASSWDS=y
-# CONFIG_BUSYBOX_CONFIG_USE_BB_PWD_GRP is not set
-# CONFIG_BUSYBOX_CONFIG_USE_BB_CRYPT is not set
-# CONFIG_BUSYBOX_CONFIG_ADD_SHELL is not set
-# CONFIG_BUSYBOX_CONFIG_REMOVE_SHELL is not set
-# CONFIG_BUSYBOX_CONFIG_ADDGROUP is not set
-# CONFIG_BUSYBOX_CONFIG_ADDUSER is not set
-# CONFIG_BUSYBOX_CONFIG_CHPASSWD is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="md5"
-# CONFIG_BUSYBOX_CONFIG_CRYPTPW is not set
-# CONFIG_BUSYBOX_CONFIG_MKPASSWD is not set
-# CONFIG_BUSYBOX_CONFIG_DELUSER is not set
-# CONFIG_BUSYBOX_CONFIG_DELGROUP is not set
-# CONFIG_BUSYBOX_CONFIG_GETTY is not set
-CONFIG_BUSYBOX_CONFIG_LOGIN=y
-# CONFIG_BUSYBOX_CONFIG_LOGIN_SESSION_AS_CHILD is not set
-# CONFIG_BUSYBOX_CONFIG_LOGIN_SCRIPTS is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_NOLOGIN is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SECURETTY is not set
-CONFIG_BUSYBOX_CONFIG_PASSWD=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_PASSWD_WEAK_CHECK=y
-# CONFIG_BUSYBOX_CONFIG_SU is not set
-# CONFIG_BUSYBOX_CONFIG_SULOGIN is not set
-# CONFIG_BUSYBOX_CONFIG_VLOCK is not set
-# end of Login/Password Management Utilities
-
-#
-# Linux Ext2 FS Progs
-#
-# CONFIG_BUSYBOX_CONFIG_CHATTR is not set
-# CONFIG_BUSYBOX_CONFIG_FSCK is not set
-# CONFIG_BUSYBOX_CONFIG_LSATTR is not set
-# CONFIG_BUSYBOX_CONFIG_TUNE2FS is not set
-# end of Linux Ext2 FS Progs
-
-#
-# Linux Module Utilities
-#
-# CONFIG_BUSYBOX_CONFIG_MODPROBE_SMALL is not set
-# CONFIG_BUSYBOX_CONFIG_DEPMOD is not set
-# CONFIG_BUSYBOX_CONFIG_INSMOD is not set
-# CONFIG_BUSYBOX_CONFIG_LSMOD is not set
-# CONFIG_BUSYBOX_CONFIG_MODINFO is not set
-# CONFIG_BUSYBOX_CONFIG_MODPROBE is not set
-# CONFIG_BUSYBOX_CONFIG_RMMOD is not set
-
-#
-# Options common to multiple modutils
-#
-# end of Linux Module Utilities
-
-#
-# Linux System Utilities
-#
-# CONFIG_BUSYBOX_CONFIG_ACPID is not set
-# CONFIG_BUSYBOX_CONFIG_BLKDISCARD is not set
-# CONFIG_BUSYBOX_CONFIG_BLKID is not set
-# CONFIG_BUSYBOX_CONFIG_BLOCKDEV is not set
-# CONFIG_BUSYBOX_CONFIG_CAL is not set
-# CONFIG_BUSYBOX_CONFIG_CHRT is not set
-CONFIG_BUSYBOX_CONFIG_DMESG=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_DMESG_PRETTY=y
-# CONFIG_BUSYBOX_CONFIG_EJECT is not set
-# CONFIG_BUSYBOX_CONFIG_FALLOCATE is not set
-# CONFIG_BUSYBOX_CONFIG_FATATTR is not set
-# CONFIG_BUSYBOX_CONFIG_FBSET is not set
-# CONFIG_BUSYBOX_CONFIG_FDFORMAT is not set
-# CONFIG_BUSYBOX_CONFIG_FDISK is not set
-# CONFIG_BUSYBOX_CONFIG_FINDFS is not set
-CONFIG_BUSYBOX_CONFIG_FLOCK=y
-# CONFIG_BUSYBOX_CONFIG_FDFLUSH is not set
-# CONFIG_BUSYBOX_CONFIG_FREERAMDISK is not set
-# CONFIG_BUSYBOX_CONFIG_FSCK_MINIX is not set
-# CONFIG_BUSYBOX_CONFIG_FSFREEZE is not set
-# CONFIG_BUSYBOX_CONFIG_FSTRIM is not set
-# CONFIG_BUSYBOX_CONFIG_GETOPT is not set
-CONFIG_BUSYBOX_CONFIG_HEXDUMP=y
-# CONFIG_BUSYBOX_CONFIG_HD is not set
-# CONFIG_BUSYBOX_CONFIG_XXD is not set
-CONFIG_BUSYBOX_CONFIG_HWCLOCK=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set
-# CONFIG_BUSYBOX_CONFIG_IONICE is not set
-# CONFIG_BUSYBOX_CONFIG_IPCRM is not set
-# CONFIG_BUSYBOX_CONFIG_IPCS is not set
-# CONFIG_BUSYBOX_CONFIG_LOSETUP is not set
-CONFIG_BUSYBOX_CONFIG_LSPCI=y
-# CONFIG_BUSYBOX_CONFIG_LSUSB is not set
-# CONFIG_BUSYBOX_CONFIG_MDEV is not set
-# CONFIG_BUSYBOX_CONFIG_MESG is not set
-# CONFIG_BUSYBOX_CONFIG_MKE2FS is not set
-# CONFIG_BUSYBOX_CONFIG_MKFS_EXT2 is not set
-# CONFIG_BUSYBOX_CONFIG_MKFS_MINIX is not set
-# CONFIG_BUSYBOX_CONFIG_MKFS_REISER is not set
-# CONFIG_BUSYBOX_CONFIG_MKDOSFS is not set
-# CONFIG_BUSYBOX_CONFIG_MKFS_VFAT is not set
-CONFIG_BUSYBOX_CONFIG_MKSWAP=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_MKSWAP_UUID is not set
-# CONFIG_BUSYBOX_CONFIG_MORE is not set
-CONFIG_BUSYBOX_CONFIG_MOUNT=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_FAKE is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_VERBOSE is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_HELPERS=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_LABEL is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_NFS is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_CIFS=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_FLAGS=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_FSTAB=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_OTHERTAB is not set
-# CONFIG_BUSYBOX_CONFIG_MOUNTPOINT is not set
-# CONFIG_BUSYBOX_CONFIG_NSENTER is not set
-CONFIG_BUSYBOX_CONFIG_PIVOT_ROOT=y
-# CONFIG_BUSYBOX_CONFIG_RDATE is not set
-# CONFIG_BUSYBOX_CONFIG_RDEV is not set
-# CONFIG_BUSYBOX_CONFIG_READPROFILE is not set
-# CONFIG_BUSYBOX_CONFIG_RENICE is not set
-# CONFIG_BUSYBOX_CONFIG_REV is not set
-# CONFIG_BUSYBOX_CONFIG_RTCWAKE is not set
-# CONFIG_BUSYBOX_CONFIG_SCRIPT is not set
-# CONFIG_BUSYBOX_CONFIG_SCRIPTREPLAY is not set
-# CONFIG_BUSYBOX_CONFIG_SETARCH is not set
-# CONFIG_BUSYBOX_CONFIG_LINUX32 is not set
-# CONFIG_BUSYBOX_CONFIG_LINUX64 is not set
-# CONFIG_BUSYBOX_CONFIG_SETPRIV is not set
-# CONFIG_BUSYBOX_CONFIG_SETSID is not set
-CONFIG_BUSYBOX_CONFIG_SWAPON=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_SWAPON_DISCARD=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_SWAPON_PRI=y
-CONFIG_BUSYBOX_CONFIG_SWAPOFF=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SWAPONOFF_LABEL is not set
-CONFIG_BUSYBOX_CONFIG_SWITCH_ROOT=y
-# CONFIG_BUSYBOX_CONFIG_TASKSET is not set
-# CONFIG_BUSYBOX_CONFIG_UEVENT is not set
-CONFIG_BUSYBOX_CONFIG_UMOUNT=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_UMOUNT_ALL=y
-# CONFIG_BUSYBOX_CONFIG_UNSHARE is not set
-
-#
-# Common options for mount/umount
-#
-CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_LOOP=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_MTAB_SUPPORT is not set
-# CONFIG_BUSYBOX_CONFIG_VOLUMEID is not set
-# end of Linux System Utilities
-
-#
-# Miscellaneous Utilities
-#
-# CONFIG_BUSYBOX_CONFIG_ADJTIMEX is not set
-# CONFIG_BUSYBOX_CONFIG_BBCONFIG is not set
-# CONFIG_BUSYBOX_CONFIG_BC is not set
-# CONFIG_BUSYBOX_CONFIG_DC is not set
-# CONFIG_BUSYBOX_CONFIG_BEEP is not set
-# CONFIG_BUSYBOX_CONFIG_CHAT is not set
-# CONFIG_BUSYBOX_CONFIG_CONSPY is not set
-CONFIG_BUSYBOX_CONFIG_CROND=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_CROND_D is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_CROND_SPECIAL_TIMES is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_CROND_DIR="/etc"
-CONFIG_BUSYBOX_CONFIG_CRONTAB=y
-# CONFIG_BUSYBOX_CONFIG_DEVFSD is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_DEVFS is not set
-# CONFIG_BUSYBOX_CONFIG_DEVMEM is not set
-# CONFIG_BUSYBOX_CONFIG_FBSPLASH is not set
-# CONFIG_BUSYBOX_CONFIG_FLASH_ERASEALL is not set
-# CONFIG_BUSYBOX_CONFIG_FLASH_LOCK is not set
-# CONFIG_BUSYBOX_CONFIG_FLASH_UNLOCK is not set
-# CONFIG_BUSYBOX_CONFIG_FLASHCP is not set
-# CONFIG_BUSYBOX_CONFIG_HDPARM is not set
-# CONFIG_BUSYBOX_CONFIG_HEXEDIT is not set
-# CONFIG_BUSYBOX_CONFIG_I2CGET is not set
-# CONFIG_BUSYBOX_CONFIG_I2CSET is not set
-# CONFIG_BUSYBOX_CONFIG_I2CDUMP is not set
-# CONFIG_BUSYBOX_CONFIG_I2CDETECT is not set
-# CONFIG_BUSYBOX_CONFIG_I2CTRANSFER is not set
-# CONFIG_BUSYBOX_CONFIG_INOTIFYD is not set
-CONFIG_BUSYBOX_CONFIG_LESS=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_MAXLINES=9999999
-# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_BRACKETS is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_FLAGS is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_TRUNCATE is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_MARKS is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_REGEXP is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_WINCH is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_LESS_DASHCMD is not set
-CONFIG_BUSYBOX_CONFIG_LOCK=y
-# CONFIG_BUSYBOX_CONFIG_LSSCSI is not set
-# CONFIG_BUSYBOX_CONFIG_MAKEDEVS is not set
-# CONFIG_BUSYBOX_CONFIG_MAN is not set
-# CONFIG_BUSYBOX_CONFIG_MICROCOM is not set
-# CONFIG_BUSYBOX_CONFIG_MT is not set
-# CONFIG_BUSYBOX_CONFIG_NANDWRITE is not set
-# CONFIG_BUSYBOX_CONFIG_NANDDUMP is not set
-# CONFIG_BUSYBOX_CONFIG_PARTPROBE is not set
-# CONFIG_BUSYBOX_CONFIG_RAIDAUTORUN is not set
-# CONFIG_BUSYBOX_CONFIG_READAHEAD is not set
-# CONFIG_BUSYBOX_CONFIG_RFKILL is not set
-# CONFIG_BUSYBOX_CONFIG_RX is not set
-# CONFIG_BUSYBOX_CONFIG_SETFATTR is not set
-# CONFIG_BUSYBOX_CONFIG_SETSERIAL is not set
-CONFIG_BUSYBOX_CONFIG_STRINGS=y
-CONFIG_BUSYBOX_CONFIG_TIME=y
-# CONFIG_BUSYBOX_CONFIG_TS is not set
-# CONFIG_BUSYBOX_CONFIG_TTYSIZE is not set
-# CONFIG_BUSYBOX_CONFIG_UBIATTACH is not set
-# CONFIG_BUSYBOX_CONFIG_UBIDETACH is not set
-# CONFIG_BUSYBOX_CONFIG_UBIMKVOL is not set
-# CONFIG_BUSYBOX_CONFIG_UBIRMVOL is not set
-# CONFIG_BUSYBOX_CONFIG_UBIRSVOL is not set
-# CONFIG_BUSYBOX_CONFIG_UBIUPDATEVOL is not set
-# CONFIG_BUSYBOX_CONFIG_UBIRENAME is not set
-# CONFIG_BUSYBOX_CONFIG_VOLNAME is not set
-# CONFIG_BUSYBOX_CONFIG_WATCHDOG is not set
-# end of Miscellaneous Utilities
-
-#
-# Networking Utilities
-#
-CONFIG_BUSYBOX_CONFIG_FEATURE_IPV6=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_UNIX_LOCAL is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set
-CONFIG_BUSYBOX_CONFIG_VERBOSE_RESOLUTION_ERRORS=y
-# CONFIG_BUSYBOX_CONFIG_ARP is not set
-# CONFIG_BUSYBOX_CONFIG_ARPING is not set
-CONFIG_BUSYBOX_CONFIG_BRCTL=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_BRCTL_FANCY=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_BRCTL_SHOW=y
-# CONFIG_BUSYBOX_CONFIG_DNSD is not set
-# CONFIG_BUSYBOX_CONFIG_ETHER_WAKE is not set
-# CONFIG_BUSYBOX_CONFIG_FTPD is not set
-# CONFIG_BUSYBOX_CONFIG_FTPGET is not set
-# CONFIG_BUSYBOX_CONFIG_FTPPUT is not set
-# CONFIG_BUSYBOX_CONFIG_HOSTNAME is not set
-# CONFIG_BUSYBOX_CONFIG_DNSDOMAINNAME is not set
-# CONFIG_BUSYBOX_CONFIG_HTTPD is not set
-CONFIG_BUSYBOX_CONFIG_IFCONFIG=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_IFCONFIG_STATUS=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_IFCONFIG_SLIP is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_IFCONFIG_HW=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y
-# CONFIG_BUSYBOX_CONFIG_IFENSLAVE is not set
-# CONFIG_BUSYBOX_CONFIG_IFPLUGD is not set
-# CONFIG_BUSYBOX_CONFIG_IFUP is not set
-# CONFIG_BUSYBOX_CONFIG_IFDOWN is not set
-# CONFIG_BUSYBOX_CONFIG_INETD is not set
-CONFIG_BUSYBOX_CONFIG_IP=y
-# CONFIG_BUSYBOX_CONFIG_IPADDR is not set
-# CONFIG_BUSYBOX_CONFIG_IPLINK is not set
-# CONFIG_BUSYBOX_CONFIG_IPROUTE is not set
-# CONFIG_BUSYBOX_CONFIG_IPTUNNEL is not set
-# CONFIG_BUSYBOX_CONFIG_IPRULE is not set
-# CONFIG_BUSYBOX_CONFIG_IPNEIGH is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_IP_ADDRESS=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_IP_LINK=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_IP_ROUTE=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_IP_ROUTE_DIR="/etc/iproute2"
-# CONFIG_BUSYBOX_CONFIG_FEATURE_IP_TUNNEL is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_IP_RULE=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_IP_NEIGH=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_IP_RARE_PROTOCOLS is not set
-# CONFIG_BUSYBOX_CONFIG_IPCALC is not set
-# CONFIG_BUSYBOX_CONFIG_FAKEIDENTD is not set
-# CONFIG_BUSYBOX_CONFIG_NAMEIF is not set
-# CONFIG_BUSYBOX_CONFIG_NBDCLIENT is not set
-CONFIG_BUSYBOX_CONFIG_NC=y
-# CONFIG_BUSYBOX_CONFIG_NETCAT is not set
-# CONFIG_BUSYBOX_CONFIG_NC_SERVER is not set
-# CONFIG_BUSYBOX_CONFIG_NC_EXTRA is not set
-# CONFIG_BUSYBOX_CONFIG_NC_110_COMPAT is not set
-CONFIG_BUSYBOX_CONFIG_NETMSG=y
-CONFIG_BUSYBOX_CONFIG_NETSTAT=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_NETSTAT_WIDE=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_NETSTAT_PRG=y
-# CONFIG_BUSYBOX_CONFIG_NSLOOKUP is not set
-CONFIG_BUSYBOX_CONFIG_NSLOOKUP_OPENWRT=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_NSLOOKUP_OPENWRT_LONG_OPTIONS is not set
-CONFIG_BUSYBOX_CONFIG_NTPD=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_NTPD_SERVER=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_NTPD_CONF is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_NTP_AUTH is not set
-CONFIG_BUSYBOX_CONFIG_PING=y
-CONFIG_BUSYBOX_CONFIG_PING6=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_FANCY_PING=y
-# CONFIG_BUSYBOX_CONFIG_PSCAN is not set
-CONFIG_BUSYBOX_CONFIG_ROUTE=y
-# CONFIG_BUSYBOX_CONFIG_SLATTACH is not set
-# CONFIG_BUSYBOX_CONFIG_SSL_CLIENT is not set
-# CONFIG_BUSYBOX_CONFIG_TC is not set
-# CONFIG_BUSYBOX_CONFIG_TCPSVD is not set
-# CONFIG_BUSYBOX_CONFIG_UDPSVD is not set
-# CONFIG_BUSYBOX_CONFIG_TELNET is not set
-# CONFIG_BUSYBOX_CONFIG_TELNETD is not set
-CONFIG_BUSYBOX_CONFIG_TFTP=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_TFTP_PROGRESS_BAR=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_TFTP_HPA_COMPAT=y
-CONFIG_BUSYBOX_CONFIG_TFTPD=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_TFTP_GET=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_TFTP_PUT=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_TFTP_BLOCKSIZE=y
-CONFIG_BUSYBOX_CONFIG_TFTP_DEBUG=y
-# CONFIG_BUSYBOX_CONFIG_TLS is not set
-CONFIG_BUSYBOX_CONFIG_TRACEROUTE=y
-CONFIG_BUSYBOX_CONFIG_TRACEROUTE6=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_TRACEROUTE_VERBOSE=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set
-# CONFIG_BUSYBOX_CONFIG_TUNCTL is not set
-# CONFIG_BUSYBOX_CONFIG_VCONFIG is not set
-# CONFIG_BUSYBOX_CONFIG_WGET is not set
-# CONFIG_BUSYBOX_CONFIG_WHOIS is not set
-# CONFIG_BUSYBOX_CONFIG_ZCIP is not set
-# CONFIG_BUSYBOX_CONFIG_UDHCPD is not set
-# CONFIG_BUSYBOX_CONFIG_DUMPLEASES is not set
-# CONFIG_BUSYBOX_CONFIG_DHCPRELAY is not set
-CONFIG_BUSYBOX_CONFIG_UDHCPC=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_UDHCPC_ARPING is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_UDHCPC_SANITIZEOPT is not set
-CONFIG_BUSYBOX_CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script"
-# CONFIG_BUSYBOX_CONFIG_UDHCPC6 is not set
-
-#
-# Common options for DHCP applets
-#
-# CONFIG_BUSYBOX_CONFIG_FEATURE_UDHCP_PORT is not set
-CONFIG_BUSYBOX_CONFIG_UDHCP_DEBUG=0
-CONFIG_BUSYBOX_CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80
-CONFIG_BUSYBOX_CONFIG_FEATURE_UDHCP_RFC3397=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_UDHCP_8021Q is not set
-# end of Networking Utilities
-
-#
-# Print Utilities
-#
-# CONFIG_BUSYBOX_CONFIG_LPD is not set
-# CONFIG_BUSYBOX_CONFIG_LPR is not set
-# CONFIG_BUSYBOX_CONFIG_LPQ is not set
-# end of Print Utilities
-
-#
-# Mail Utilities
-#
-# CONFIG_BUSYBOX_CONFIG_MAKEMIME is not set
-# CONFIG_BUSYBOX_CONFIG_POPMAILDIR is not set
-# CONFIG_BUSYBOX_CONFIG_REFORMIME is not set
-# CONFIG_BUSYBOX_CONFIG_SENDMAIL is not set
-# end of Mail Utilities
-
-#
-# Process Utilities
-#
-CONFIG_BUSYBOX_CONFIG_FREE=y
-# CONFIG_BUSYBOX_CONFIG_FUSER is not set
-# CONFIG_BUSYBOX_CONFIG_IOSTAT is not set
-CONFIG_BUSYBOX_CONFIG_KILL=y
-CONFIG_BUSYBOX_CONFIG_KILLALL=y
-# CONFIG_BUSYBOX_CONFIG_KILLALL5 is not set
-# CONFIG_BUSYBOX_CONFIG_LSOF is not set
-# CONFIG_BUSYBOX_CONFIG_MPSTAT is not set
-# CONFIG_BUSYBOX_CONFIG_NMETER is not set
-CONFIG_BUSYBOX_CONFIG_PGREP=y
-# CONFIG_BUSYBOX_CONFIG_PKILL is not set
-CONFIG_BUSYBOX_CONFIG_PIDOF=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_PIDOF_SINGLE is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_PIDOF_OMIT is not set
-# CONFIG_BUSYBOX_CONFIG_PMAP is not set
-# CONFIG_BUSYBOX_CONFIG_POWERTOP is not set
-CONFIG_BUSYBOX_CONFIG_PS=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_PS_WIDE=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_PS_LONG is not set
-# CONFIG_BUSYBOX_CONFIG_PSTREE is not set
-# CONFIG_BUSYBOX_CONFIG_PWDX is not set
-# CONFIG_BUSYBOX_CONFIG_SMEMCAP is not set
-CONFIG_BUSYBOX_CONFIG_BB_SYSCTL=y
-CONFIG_BUSYBOX_CONFIG_TOP=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_INTERACTIVE is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_CPU_GLOBAL_PERCENTS=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_SMP_CPU is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_DECIMALS is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_SMP_PROCESS is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_TOPMEM is not set
-CONFIG_BUSYBOX_CONFIG_UPTIME=y
-# CONFIG_BUSYBOX_CONFIG_WATCH is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SHOW_THREADS is not set
-# end of Process Utilities
-
-#
-# Runit Utilities
-#
-# CONFIG_BUSYBOX_CONFIG_CHPST is not set
-# CONFIG_BUSYBOX_CONFIG_SETUIDGID is not set
-# CONFIG_BUSYBOX_CONFIG_ENVUIDGID is not set
-# CONFIG_BUSYBOX_CONFIG_ENVDIR is not set
-# CONFIG_BUSYBOX_CONFIG_SOFTLIMIT is not set
-# CONFIG_BUSYBOX_CONFIG_RUNSV is not set
-# CONFIG_BUSYBOX_CONFIG_RUNSVDIR is not set
-# CONFIG_BUSYBOX_CONFIG_SV is not set
-# CONFIG_BUSYBOX_CONFIG_SVC is not set
-# CONFIG_BUSYBOX_CONFIG_SVOK is not set
-# CONFIG_BUSYBOX_CONFIG_SVLOGD is not set
-# end of Runit Utilities
-
-#
-# Shells
-#
-CONFIG_BUSYBOX_CONFIG_SH_IS_ASH=y
-# CONFIG_BUSYBOX_CONFIG_SH_IS_HUSH is not set
-# CONFIG_BUSYBOX_CONFIG_SH_IS_NONE is not set
-# CONFIG_BUSYBOX_CONFIG_BASH_IS_ASH is not set
-# CONFIG_BUSYBOX_CONFIG_BASH_IS_HUSH is not set
-CONFIG_BUSYBOX_CONFIG_BASH_IS_NONE=y
-CONFIG_BUSYBOX_CONFIG_SHELL_ASH=y
-CONFIG_BUSYBOX_CONFIG_ASH=y
-# CONFIG_BUSYBOX_CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set
-CONFIG_BUSYBOX_CONFIG_ASH_INTERNAL_GLOB=y
-CONFIG_BUSYBOX_CONFIG_ASH_BASH_COMPAT=y
-# CONFIG_BUSYBOX_CONFIG_ASH_BASH_SOURCE_CURDIR is not set
-# CONFIG_BUSYBOX_CONFIG_ASH_BASH_NOT_FOUND_HOOK is not set
-CONFIG_BUSYBOX_CONFIG_ASH_JOB_CONTROL=y
-CONFIG_BUSYBOX_CONFIG_ASH_ALIAS=y
-# CONFIG_BUSYBOX_CONFIG_ASH_RANDOM_SUPPORT is not set
-CONFIG_BUSYBOX_CONFIG_ASH_EXPAND_PRMT=y
-# CONFIG_BUSYBOX_CONFIG_ASH_IDLE_TIMEOUT is not set
-# CONFIG_BUSYBOX_CONFIG_ASH_MAIL is not set
-CONFIG_BUSYBOX_CONFIG_ASH_ECHO=y
-CONFIG_BUSYBOX_CONFIG_ASH_PRINTF=y
-CONFIG_BUSYBOX_CONFIG_ASH_TEST=y
-# CONFIG_BUSYBOX_CONFIG_ASH_HELP is not set
-CONFIG_BUSYBOX_CONFIG_ASH_GETOPTS=y
-CONFIG_BUSYBOX_CONFIG_ASH_CMDCMD=y
-# CONFIG_BUSYBOX_CONFIG_CTTYHACK is not set
-# CONFIG_BUSYBOX_CONFIG_HUSH is not set
-# CONFIG_BUSYBOX_CONFIG_SHELL_HUSH is not set
-
-#
-# Options common to all shells
-#
-CONFIG_BUSYBOX_CONFIG_FEATURE_SH_MATH=y
-CONFIG_BUSYBOX_CONFIG_FEATURE_SH_MATH_64=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_MATH_BASE is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_EXTRA_QUIET is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_STANDALONE is not set
-CONFIG_BUSYBOX_CONFIG_FEATURE_SH_NOFORK=y
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_READ_FRAC is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_HISTFILESIZE is not set
-# CONFIG_BUSYBOX_CONFIG_FEATURE_SH_EMBEDDED_SCRIPTS is not set
-# end of Shells
-
-#
-# System Logging Utilities
-#
-# CONFIG_BUSYBOX_CONFIG_KLOGD is not set
-CONFIG_BUSYBOX_CONFIG_LOGGER=y
-# CONFIG_BUSYBOX_CONFIG_LOGREAD is not set
-# CONFIG_BUSYBOX_CONFIG_SYSLOGD is not set
-# end of System Logging Utilities
-
 # CONFIG_PACKAGE_busybox-selinux is not set
 # CONFIG_PACKAGE_ca-bundle is not set
 # CONFIG_PACKAGE_ca-certificates is not set
@@ -2552,6 +1648,7 @@
 #
 # Boot Loaders
 #
+# CONFIG_PACKAGE_optee-mediatek is not set
 # end of Boot Loaders
 
 #
@@ -2583,6 +1680,8 @@
 # CONFIG_PACKAGE_make is not set
 # CONFIG_PACKAGE_meson is not set
 CONFIG_PACKAGE_mt76-test=y
+# CONFIG_PACKAGE_mt76-vendor is not set
+# CONFIG_PACKAGE_mwctl is not set
 # CONFIG_PACKAGE_ninja is not set
 CONFIG_PACKAGE_objdump=y
 # CONFIG_PACKAGE_packr is not set
@@ -2834,7 +1933,6 @@
 # CONFIG_PACKAGE_kmod-crypto-ecb is not set
 # CONFIG_PACKAGE_kmod-crypto-ecdh is not set
 # CONFIG_PACKAGE_kmod-crypto-echainiv is not set
-# CONFIG_PACKAGE_kmod-crypto-eip197 is not set
 # CONFIG_PACKAGE_kmod-crypto-fcrypt is not set
 CONFIG_PACKAGE_kmod-crypto-gcm=y
 CONFIG_PACKAGE_kmod-crypto-gf128=y
@@ -2843,6 +1941,7 @@
 CONFIG_PACKAGE_kmod-crypto-hmac=y
 # CONFIG_PACKAGE_kmod-crypto-hw-geode is not set
 # CONFIG_PACKAGE_kmod-crypto-hw-hifn-795x is not set
+# CONFIG_PACKAGE_kmod-crypto-hw-mtk is not set
 # CONFIG_PACKAGE_kmod-crypto-hw-padlock is not set
 # CONFIG_PACKAGE_kmod-crypto-hw-talitos is not set
 # CONFIG_PACKAGE_kmod-crypto-kpp is not set
@@ -3131,7 +2230,6 @@
 # CONFIG_PACKAGE_kmod-ipt-raw is not set
 # CONFIG_PACKAGE_kmod-ipt-raw6 is not set
 # CONFIG_PACKAGE_kmod-ipt-rpfilter is not set
-# CONFIG_PACKAGE_kmod-ipt-rtpengine is not set
 # CONFIG_PACKAGE_kmod-ipt-sysrq is not set
 # CONFIG_PACKAGE_kmod-ipt-tarpit is not set
 # CONFIG_PACKAGE_kmod-ipt-tee is not set
@@ -3485,7 +2583,6 @@
 #
 # Voice over IP
 #
-# CONFIG_PACKAGE_kmod-dahdi is not set
 # end of Voice over IP
 
 #
@@ -3525,7 +2622,6 @@
 # CONFIG_PACKAGE_kmod-ath9k-htc is not set
 # CONFIG_PACKAGE_kmod-b43 is not set
 # CONFIG_PACKAGE_kmod-b43legacy is not set
-# CONFIG_PACKAGE_kmod-besra is not set
 # CONFIG_PACKAGE_kmod-brcmfmac is not set
 # CONFIG_PACKAGE_kmod-brcmsmac is not set
 # CONFIG_PACKAGE_kmod-brcmutil is not set
@@ -3541,6 +2637,7 @@
 # CONFIG_PACKAGE_kmod-iwl3945 is not set
 # CONFIG_PACKAGE_kmod-iwl4965 is not set
 # CONFIG_PACKAGE_kmod-iwlwifi is not set
+# CONFIG_PACKAGE_kmod-lib80211 is not set
 # CONFIG_PACKAGE_kmod-libertas-sdio is not set
 # CONFIG_PACKAGE_kmod-libertas-spi is not set
 # CONFIG_PACKAGE_kmod-libertas-usb is not set
@@ -3743,6 +2840,7 @@
 # CONFIG_PACKAGE_libpython3 is not set
 # CONFIG_PACKAGE_micropython is not set
 # CONFIG_PACKAGE_micropython-lib is not set
+# CONFIG_PACKAGE_python-periphery is not set
 # CONFIG_PACKAGE_python-pip-conf is not set
 # CONFIG_PACKAGE_python3 is not set
 # CONFIG_PACKAGE_python3-aiohttp is not set
@@ -4586,35 +3684,6 @@
 # end of Sound
 
 #
-# Telephony
-#
-# CONFIG_PACKAGE_bcg729 is not set
-# CONFIG_PACKAGE_dahdi-tools-libtonezone is not set
-# CONFIG_PACKAGE_gsmlib is not set
-# CONFIG_PACKAGE_libctb is not set
-# CONFIG_PACKAGE_libfreetdm is not set
-# CONFIG_PACKAGE_libiksemel is not set
-# CONFIG_PACKAGE_libks is not set
-# CONFIG_PACKAGE_libosip2 is not set
-# CONFIG_PACKAGE_libpj is not set
-# CONFIG_PACKAGE_libpjlib-util is not set
-# CONFIG_PACKAGE_libpjmedia is not set
-# CONFIG_PACKAGE_libpjnath is not set
-# CONFIG_PACKAGE_libpjsip is not set
-# CONFIG_PACKAGE_libpjsip-simple is not set
-# CONFIG_PACKAGE_libpjsip-ua is not set
-# CONFIG_PACKAGE_libpjsua is not set
-# CONFIG_PACKAGE_libpjsua2 is not set
-# CONFIG_PACKAGE_libre is not set
-# CONFIG_PACKAGE_librem is not set
-# CONFIG_PACKAGE_libspandsp is not set
-# CONFIG_PACKAGE_libspandsp3 is not set
-# CONFIG_PACKAGE_libsrtp2 is not set
-# CONFIG_PACKAGE_signalwire-client-c is not set
-# CONFIG_PACKAGE_sofia-sip is not set
-# end of Telephony
-
-#
 # libimobiledevice
 #
 # CONFIG_PACKAGE_libimobiledevice is not set
@@ -4750,6 +3819,7 @@
 # CONFIG_PACKAGE_libgphoto2 is not set
 # CONFIG_PACKAGE_libgpiod is not set
 # CONFIG_PACKAGE_libgps is not set
+CONFIG_PACKAGE_libgsl=y
 # CONFIG_PACKAGE_libh2o is not set
 # CONFIG_PACKAGE_libh2o-evloop is not set
 # CONFIG_PACKAGE_libhamlib is not set
@@ -4777,6 +3847,7 @@
 # CONFIG_PACKAGE_libkeyutils is not set
 # CONFIG_PACKAGE_libkmod is not set
 # CONFIG_PACKAGE_libksba is not set
+CONFIG_PACKAGE_libkvcutil=y
 # CONFIG_PACKAGE_libldns is not set
 # CONFIG_PACKAGE_libleptonica is not set
 # CONFIG_PACKAGE_libloragw is not set
@@ -4873,7 +3944,6 @@
 # CONFIG_PACKAGE_libpkgconf is not set
 # CONFIG_PACKAGE_libpng is not set
 # CONFIG_PACKAGE_libpopt is not set
-# CONFIG_PACKAGE_libpri is not set
 # CONFIG_PACKAGE_libprotobuf-c is not set
 # CONFIG_PACKAGE_libpsl is not set
 # CONFIG_PACKAGE_libqmi is not set
@@ -4982,6 +4052,7 @@
 # CONFIG_PACKAGE_libwebsockets-full is not set
 # CONFIG_PACKAGE_libwebsockets-mbedtls is not set
 # CONFIG_PACKAGE_libwebsockets-openssl is not set
+# CONFIG_PACKAGE_libwpactrl is not set
 # CONFIG_PACKAGE_libwrap is not set
 # CONFIG_PACKAGE_libxerces-c is not set
 # CONFIG_PACKAGE_libxerces-c-samples is not set
@@ -5154,6 +4225,7 @@
 # CONFIG_PACKAGE_luci-app-lxc is not set
 # CONFIG_PACKAGE_luci-app-minidlna is not set
 # CONFIG_PACKAGE_luci-app-mjpg-streamer is not set
+CONFIG_PACKAGE_luci-app-mtk=y
 # CONFIG_PACKAGE_luci-app-mwan3 is not set
 # CONFIG_PACKAGE_luci-app-nextdns is not set
 # CONFIG_PACKAGE_luci-app-nft-qos is not set
@@ -5411,6 +4483,82 @@
 # end of Mail
 
 #
+# MTK Properties
+#
+
+#
+# Applications
+#
+# CONFIG_PACKAGE_1905daemon is not set
+# CONFIG_PACKAGE_8021xd is not set
+# CONFIG_PACKAGE_AFC is not set
+# CONFIG_PACKAGE_apcli_detectd is not set
+# CONFIG_PACKAGE_ated_ext is not set
+# CONFIG_PACKAGE_atenl is not set
+# CONFIG_PACKAGE_atf-fuzzer-tool is not set
+# CONFIG_PACKAGE_bluedroid is not set
+# CONFIG_PACKAGE_bndstrg_plus is not set
+CONFIG_PACKAGE_datconf=y
+CONFIG_PACKAGE_datconf-lua=y
+# CONFIG_PACKAGE_fwdd is not set
+# CONFIG_PACKAGE_hostapd-2.9 is not set
+# CONFIG_PACKAGE_l2ogre is not set
+# CONFIG_PACKAGE_mapd is not set
+CONFIG_PACKAGE_mii_mgr=y
+# CONFIG_PACKAGE_miniupnpd-1.6 is not set
+# CONFIG_PACKAGE_mtk-efuse-nl-tool is not set
+CONFIG_PACKAGE_regs=y
+# CONFIG_PACKAGE_sigma_daemon is not set
+# CONFIG_PACKAGE_sigma_dut is not set
+# CONFIG_PACKAGE_sigma_one is not set
+CONFIG_PACKAGE_switch=y
+# CONFIG_PACKAGE_uart_launcher is not set
+# CONFIG_PACKAGE_ufsd_tools is not set
+# CONFIG_PACKAGE_wapp is not set
+# CONFIG_PACKAGE_wificonf is not set
+# CONFIG_PACKAGE_wpa_supplicant-2.9 is not set
+# CONFIG_PACKAGE_wpa_supplicant-dev-11be is not set
+# end of Applications
+
+#
+# Drivers
+#
+# CONFIG_PACKAGE_kmod-atf-fuzzer is not set
+# CONFIG_PACKAGE_kmod-btmtk_uart is not set
+# CONFIG_PACKAGE_kmod-conninfra is not set
+# CONFIG_PACKAGE_kmod-gen4m is not set
+# CONFIG_PACKAGE_kmod-hw_nat is not set
+# CONFIG_PACKAGE_kmod-mapfilter is not set
+# CONFIG_PACKAGE_kmod-mt7915 is not set
+# CONFIG_PACKAGE_kmod-mt_hwifi is not set
+# CONFIG_PACKAGE_kmod-mt_wifi is not set
+# CONFIG_PACKAGE_kmod-mt_wifi7 is not set
+# CONFIG_PACKAGE_kmod-mtfwd is not set
+# CONFIG_PACKAGE_kmod-mtk-efuse-nl-drv is not set
+# CONFIG_PACKAGE_kmod-mtqos is not set
+# CONFIG_PACKAGE_kmod-ufsd_driver is not set
+# CONFIG_PACKAGE_kmod-warp is not set
+# CONFIG_PACKAGE_wifi-profile is not set
+# end of Drivers
+
+#
+# Libraries
+#
+# CONFIG_PACKAGE_libmapd is not set
+# end of Libraries
+
+#
+# Misc
+#
+# CONFIG_PACKAGE_eslt is not set
+# CONFIG_PACKAGE_mtk-base-files is not set
+# CONFIG_PACKAGE_mtk_factory_rw is not set
+# CONFIG_PACKAGE_mtk_failsafe is not set
+# CONFIG_PACKAGE_wslt is not set
+# end of Misc
+# end of MTK Properties
+
+#
 # Multimedia
 #
 
@@ -5588,7 +4736,6 @@
 # CONFIG_PACKAGE_iptables-mod-psd is not set
 # CONFIG_PACKAGE_iptables-mod-quota2 is not set
 # CONFIG_PACKAGE_iptables-mod-rpfilter is not set
-# CONFIG_PACKAGE_iptables-mod-rtpengine is not set
 # CONFIG_PACKAGE_iptables-mod-sysrq is not set
 # CONFIG_PACKAGE_iptables-mod-tarpit is not set
 # CONFIG_PACKAGE_iptables-mod-tee is not set
@@ -5974,30 +5121,6 @@
 # end of Tcpreplay
 
 #
-# Telephony
-#
-# CONFIG_PACKAGE_asterisk is not set
-# CONFIG_PACKAGE_baresip is not set
-# CONFIG_PACKAGE_freeswitch is not set
-# CONFIG_PACKAGE_kamailio is not set
-# CONFIG_PACKAGE_miax is not set
-# CONFIG_PACKAGE_pcapsipdump is not set
-# CONFIG_PACKAGE_restund is not set
-# CONFIG_PACKAGE_rtpengine is not set
-# CONFIG_PACKAGE_rtpengine-no-transcode is not set
-# CONFIG_PACKAGE_rtpengine-recording is not set
-# CONFIG_PACKAGE_rtpproxy is not set
-# CONFIG_PACKAGE_sipp is not set
-# CONFIG_PACKAGE_siproxd is not set
-# CONFIG_PACKAGE_yate is not set
-# end of Telephony
-
-#
-# Telephony Lantiq
-#
-# end of Telephony Lantiq
-
-#
 # Time Synchronization
 #
 # CONFIG_PACKAGE_chrony is not set
@@ -6151,7 +5274,7 @@
 # CONFIG_PACKAGE_hs20-client is not set
 # CONFIG_PACKAGE_hs20-common is not set
 # CONFIG_PACKAGE_hs20-server is not set
-# CONFIG_PACKAGE_wpa-cli is not set
+CONFIG_PACKAGE_wpa-cli=y
 # CONFIG_PACKAGE_wpa-supplicant is not set
 # CONFIG_WPA_RFKILL_SUPPORT is not set
 CONFIG_WPA_MSG_MIN_PRIORITY=2
@@ -6160,6 +5283,7 @@
 CONFIG_DRIVER_11N_SUPPORT=y
 CONFIG_DRIVER_11AC_SUPPORT=y
 CONFIG_DRIVER_11AX_SUPPORT=y
+CONFIG_DRIVER_11BE_SUPPORT=y
 CONFIG_WPA_ENABLE_WEP=y
 CONFIG_WPA_MBO_SUPPORT=y
 # CONFIG_PACKAGE_wpa-supplicant-basic is not set
@@ -6311,6 +5435,7 @@
 # CONFIG_PACKAGE_mosquitto-ssl is not set
 # CONFIG_PACKAGE_mrd6 is not set
 # CONFIG_PACKAGE_mstpd is not set
+# CONFIG_PACKAGE_mtkhnat_util is not set
 # CONFIG_PACKAGE_mtr is not set
 # CONFIG_PACKAGE_nbd is not set
 # CONFIG_PACKAGE_nbd-server is not set
@@ -6408,6 +5533,7 @@
 # CONFIG_PACKAGE_softflowd is not set
 # CONFIG_PACKAGE_soloscli is not set
 # CONFIG_PACKAGE_speedtest-netperf is not set
+# CONFIG_PACKAGE_speedtestcli is not set
 # CONFIG_PACKAGE_spoofer is not set
 # CONFIG_PACKAGE_static-neighbor-reports is not set
 # CONFIG_PACKAGE_stunnel is not set
@@ -6548,6 +5674,7 @@
 # CONFIG_PACKAGE_blockdev is not set
 # CONFIG_PACKAGE_cfdisk is not set
 # CONFIG_PACKAGE_cgdisk is not set
+# CONFIG_PACKAGE_dmsetup is not set
 # CONFIG_PACKAGE_eject is not set
 # CONFIG_PACKAGE_fdisk is not set
 # CONFIG_PACKAGE_findfs is not set
@@ -6693,16 +5820,6 @@
 # end of Shells
 
 #
-# Telephony
-#
-# CONFIG_PACKAGE_dahdi-cfg is not set
-# CONFIG_PACKAGE_dahdi-monitor is not set
-# CONFIG_PACKAGE_gsm-utils is not set
-# CONFIG_PACKAGE_sipgrep is not set
-# CONFIG_PACKAGE_sngrep is not set
-# end of Telephony
-
-#
 # Terminal
 #
 # CONFIG_PACKAGE_agetty is not set
@@ -6848,6 +5965,7 @@
 # CONFIG_PACKAGE_dbus-utils is not set
 # CONFIG_PACKAGE_device-observatory is not set
 # CONFIG_PACKAGE_dfu-util is not set
+CONFIG_PACKAGE_dieharder=y
 # CONFIG_PACKAGE_digitemp is not set
 # CONFIG_PACKAGE_digitemp-usb is not set
 # CONFIG_PACKAGE_dmesg is not set
@@ -6907,6 +6025,7 @@
 # CONFIG_PACKAGE_inotifywait is not set
 # CONFIG_PACKAGE_inotifywatch is not set
 # CONFIG_PACKAGE_io is not set
+# CONFIG_PACKAGE_ioctlfuzzer is not set
 # CONFIG_PACKAGE_ipfs-http-client-tests is not set
 # CONFIG_PACKAGE_irqbalance is not set
 # CONFIG_PACKAGE_iwcap is not set
@@ -6914,6 +6033,7 @@
 # CONFIG_PACKAGE_jq is not set
 CONFIG_PACKAGE_jshn=y
 # CONFIG_PACKAGE_kmod is not set
+CONFIG_PACKAGE_kvcedit=y
 # CONFIG_PACKAGE_lcd4linux-custom is not set
 # CONFIG_PACKAGE_lcdproc-clients is not set
 # CONFIG_PACKAGE_lcdproc-drivers is not set
@@ -6940,6 +6060,7 @@
 # CONFIG_PACKAGE_mbtools is not set
 # CONFIG_PACKAGE_mc is not set
 # CONFIG_PACKAGE_mcookie is not set
+# CONFIG_PACKAGE_memtester is not set
 # CONFIG_PACKAGE_micrond is not set
 # CONFIG_PACKAGE_miniflux is not set
 # CONFIG_PACKAGE_mmc-utils is not set
@@ -7033,6 +6154,7 @@
 CONFIG_STRACE_NONE=y
 # CONFIG_STRACE_LIBDW is not set
 # CONFIG_STRACE_LIBUNWIND is not set
+# CONFIG_PACKAGE_streamtest is not set
 # CONFIG_PACKAGE_stress is not set
 # CONFIG_PACKAGE_stress-ng is not set
 # CONFIG_PACKAGE_sumo is not set
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/lede-branch-build-sanity.sh b/autobuild_mac80211_release/mt7988_mt7996_mac80211/lede-branch-build-sanity.sh
index e1ff249..94bb714 100755
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/lede-branch-build-sanity.sh
+++ b/autobuild_mac80211_release/mt7988_mt7996_mac80211/lede-branch-build-sanity.sh
@@ -4,30 +4,62 @@
 #get the brach_name
 temp=${0%/*}
 branch_name=${temp##*/}
+rro=0
+hwpath=0
+backport_new=1
+args=
+
+for arg in $*; do
+	case "$arg" in
+	"rro")
+		rro=1
+		;;
+	"hwpath")
+		hwpath=1
+		;;
+	*)
+		args="$args $arg"
+		;;
+	esac
+done
+set -- $args
+
+change_dot_config() {
+	[ "$rro" = "0" ] && {
+		rm -rf ${BUILD_DIR}/package/kernel/mt76/patches/*pao*.patch
+		rm -rf ${BUILD_DIR}/package/kernel/mt76/patches/*rro*.patch
+		rm -rf ${BUILD_DIR}/package/kernel/mt76/patches/*bellwether*.patch
+	}
+	[ "$hwpath" = "0" ] && {
+		echo "==========SW PATH========="
+		sed -i 's/CONFIG_BRIDGE_NETFILTER=y/# CONFIG_BRIDGE_NETFILTER is not set/g' ${BUILD_DIR}/target/linux/mediatek/mt7988/config-5.4
+		sed -i 's/CONFIG_NETFILTER_FAMILY_BRIDGE=y/# CONFIG_NETFILTER_FAMILY_BRIDGE is not set/g' ${BUILD_DIR}/target/linux/mediatek/mt7988/config-5.4
+		sed -i 's/CONFIG_SKB_EXTENSIONS=y/# CONFIG_SKB_EXTENSIONS is not set/g' ${BUILD_DIR}/target/linux/mediatek/mt7988/config-5.4
+	}
+	[ "$backport_new" = "1" ] && {
+                rm -rf ${BUILD_DIR}/package/kernel/mt76/patches/*revert-for-backports*.patch
+        }
+}
 
 #step1 clean
 #clean
 #do prepare stuff
 prepare
 
-#./scripts/feeds install mtk
-
 #hack mt7988 config5.4
 echo "CONFIG_NETFILTER=y" >> ${BUILD_DIR}/target/linux/mediatek/mt7988/config-5.4
 echo "CONFIG_NETFILTER_ADVANCED=y" >> ${BUILD_DIR}/target/linux/mediatek/mt7988/config-5.4
 echo "CONFIG_RELAY=y" >> ${BUILD_DIR}/target/linux/mediatek/mt7988/config-5.4
 
-#prepare mac80211 mt76 wifi stuff
-prepare_mac80211
+prepare_flowoffload
 
-rm -rf ${BUILD_DIR}/package/kernel/mac80211/patches/subsys/908-mac80211-mtk-mask-kernel-version-limitation-and-fill-for.patch
-rm -rf ${BUILD_DIR}/package/kernel/mac80211/patches/subsys/909-mac80211-mtk-add-fill-receive-path-ops-to-get-wed-idx.patch
-rm -rf ${BUILD_DIR}/target/linux/mediatek/patches-5.4/1007-mtketh-add-qdma-sw-solution-for-mac80211-sdk.patch
-find ${BUILD_DIR}/target/linux/mediatek/patches-5.4 -name "999*.patch" -delete
-find ${BUILD_DIR}/package/kernel/mt76/patches -name "*-mt76-*.patch" -delete
+#prepare mac80211 mt76 wifi stuff
+prepare_mac80211 ${backport_new}
 
 prepare_final ${branch_name}
 
+change_dot_config
+
 #step2 build
 if [ -z ${1} ]; then
 	build_log ${branch_name} -j1 || [ "$LOCAL" != "1" ]
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/Makefile b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/Makefile
deleted file mode 100644
index b880ee6..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/Makefile
+++ /dev/null
@@ -1,591 +0,0 @@
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=mt76
-PKG_RELEASE=4
-
-PKG_LICENSE:=GPLv2
-PKG_LICENSE_FILES:=
-
-PKG_SOURCE_URL:=https://github.com/openwrt/mt76
-PKG_SOURCE_PROTO:=git
-PKG_SOURCE_DATE:=2022-10-01
-PKG_SOURCE_VERSION:=72b87836d368685a093b927229209b61d8272541
-PKG_MIRROR_HASH:=ea4dfe93f7632d5063ac2ccf0f5a3698e2bfeadbbef45910381b5ef07e334cfc
-
-PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
-PKG_USE_NINJA:=0
-PKG_BUILD_PARALLEL:=1
-
-PKG_CONFIG_DEPENDS += \
-	CONFIG_PACKAGE_kmod-mt76-usb \
-	CONFIG_PACKAGE_kmod-mt76x02-common \
-	CONFIG_PACKAGE_kmod-mt76x0-common \
-	CONFIG_PACKAGE_kmod-mt76x0u \
-	CONFIG_PACKAGE_kmod-mt76x2-common \
-	CONFIG_PACKAGE_kmod-mt76x2 \
-	CONFIG_PACKAGE_kmod-mt76x2u \
-	CONFIG_PACKAGE_kmod-mt7603 \
-	CONFIG_PACKAGE_CFG80211_TESTMODE
-
-STAMP_CONFIGURED_DEPENDS := $(STAGING_DIR)/usr/include/mac80211-backport/backport/autoconf.h
-
-include $(INCLUDE_DIR)/kernel.mk
-include $(INCLUDE_DIR)/package.mk
-include $(INCLUDE_DIR)/cmake.mk
-
-CMAKE_SOURCE_DIR:=$(PKG_BUILD_DIR)/tools
-CMAKE_BINARY_DIR:=$(PKG_BUILD_DIR)/tools
-
-define KernelPackage/mt76-default
-  SUBMENU:=Wireless Drivers
-  DEPENDS:= \
-	+kmod-mac80211 \
-	+@DRIVER_11AC_SUPPORT +@DRIVER_11N_SUPPORT
-endef
-
-define KernelPackage/mt76
-  SUBMENU:=Wireless Drivers
-  TITLE:=MediaTek MT76x2/MT7603 wireless driver (metapackage)
-  DEPENDS:= \
-	+kmod-mt76-core +kmod-mt76x2 +kmod-mt7603
-endef
-
-define KernelPackage/mt76-core
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT76xx wireless driver
-  HIDDEN:=1
-  FILES:=\
-	$(PKG_BUILD_DIR)/mt76.ko
-endef
-
-define KernelPackage/mt76-usb
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT76xx wireless driver USB support
-  DEPENDS += +kmod-usb-core +kmod-mt76-core
-  HIDDEN:=1
-  FILES:=\
-	$(PKG_BUILD_DIR)/mt76-usb.ko
-endef
-
-define KernelPackage/mt76x02-usb
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT76x0/MT76x2 USB wireless driver common code
-  DEPENDS+=+kmod-mt76-usb +kmod-mt76x02-common
-  HIDDEN:=1
-  FILES:=$(PKG_BUILD_DIR)/mt76x02-usb.ko
-endef
-
-define KernelPackage/mt76x02-common
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT76x0/MT76x2 wireless driver common code
-  DEPENDS+=+kmod-mt76-core
-  HIDDEN:=1
-  FILES:=$(PKG_BUILD_DIR)/mt76x02-lib.ko
-endef
-
-define KernelPackage/mt76x0-common
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT76x0 wireless driver common code
-  DEPENDS+=+kmod-mt76x02-common
-  HIDDEN:=1
-  FILES:=$(PKG_BUILD_DIR)/mt76x0/mt76x0-common.ko
-endef
-
-define KernelPackage/mt76x0e
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT76x0E wireless driver
-  DEPENDS+=@PCI_SUPPORT +kmod-mt76x0-common
-  FILES:=\
-	$(PKG_BUILD_DIR)/mt76x0/mt76x0e.ko
-  AUTOLOAD:=$(call AutoProbe,mt76x0e)
-endef
-
-define KernelPackage/mt76x0u
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT76x0U wireless driver
-  DEPENDS+=+kmod-mt76x0-common +kmod-mt76x02-usb
-  FILES:=\
-	$(PKG_BUILD_DIR)/mt76x0/mt76x0u.ko
-  AUTOLOAD:=$(call AutoProbe,mt76x0u)
-endef
-
-define KernelPackage/mt76x2-common
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT76x2 wireless driver common code
-  DEPENDS+=+kmod-mt76-core +kmod-mt76x02-common
-  HIDDEN:=1
-  FILES:=$(PKG_BUILD_DIR)/mt76x2/mt76x2-common.ko
-endef
-
-define KernelPackage/mt76x2u
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT76x2U wireless driver
-  DEPENDS+=+kmod-mt76x2-common +kmod-mt76x02-usb
-  FILES:=\
-	$(PKG_BUILD_DIR)/mt76x2/mt76x2u.ko
-  AUTOLOAD:=$(call AutoProbe,mt76x2u)
-endef
-
-define KernelPackage/mt76x2
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT76x2 wireless driver
-  DEPENDS+=@PCI_SUPPORT +kmod-mt76x2-common
-  FILES:=\
-	$(PKG_BUILD_DIR)/mt76x2/mt76x2e.ko
-  AUTOLOAD:=$(call AutoProbe,mt76x2e)
-endef
-
-define KernelPackage/mt7603
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7603 wireless driver
-  DEPENDS+=@PCI_SUPPORT +kmod-mt76-core
-  FILES:=\
-	$(PKG_BUILD_DIR)/mt7603/mt7603e.ko
-  AUTOLOAD:=$(call AutoProbe,mt7603e)
-endef
-
-define KernelPackage/mt76-connac
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7615/MT79xx wireless driver common code
-  HIDDEN:=1
-  DEPENDS+=+kmod-mt76-core
-  FILES:= $(PKG_BUILD_DIR)/mt76-connac-lib.ko
-endef
-
-define KernelPackage/mt76-sdio
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7615/MT79xx SDIO driver common code
-  HIDDEN:=1
-  DEPENDS+=+kmod-mt76-core +kmod-mmc
-  FILES:= $(PKG_BUILD_DIR)/mt76-sdio.ko
-endef
-
-define KernelPackage/mt7615-common
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7615 wireless driver common code
-  HIDDEN:=1
-  DEPENDS+=@PCI_SUPPORT +kmod-mt76-core +kmod-mt76-connac +kmod-hwmon-core
-  FILES:= $(PKG_BUILD_DIR)/mt7615/mt7615-common.ko
-endef
-
-define KernelPackage/mt7615-firmware
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7615e firmware
-  DEFAULT:=PACKAGE_kmod-mt7615e
-endef
-
-define KernelPackage/mt7615e
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7615e wireless driver
-  DEPENDS+=@PCI_SUPPORT +kmod-mt7615-common
-  FILES:= $(PKG_BUILD_DIR)/mt7615/mt7615e.ko
-  AUTOLOAD:=$(call AutoProbe,mt7615e)
-endef
-
-define KernelPackage/mt7663-firmware-ap
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7663e firmware (optimized for AP)
-endef
-
-define KernelPackage/mt7663-firmware-sta
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7663e firmware (client mode offload)
-endef
-
-define KernelPackage/mt7663-usb-sdio
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7663 USB/SDIO shared code
-  DEPENDS+=+kmod-mt7615-common
-  HIDDEN:=1
-  FILES:= \
-	$(PKG_BUILD_DIR)/mt7615/mt7663-usb-sdio-common.ko
-endef
-
-define KernelPackage/mt7663s
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7663s wireless driver
-  DEPENDS+=+kmod-mt76-sdio +kmod-mt7615-common +kmod-mt7663-usb-sdio
-  FILES:= \
-	$(PKG_BUILD_DIR)/mt7615/mt7663s.ko
-  AUTOLOAD:=$(call AutoProbe,mt7663s)
-endef
-
-define KernelPackage/mt7663u
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7663u wireless driver
-  DEPENDS+=+kmod-mt76-usb +kmod-mt7615-common +kmod-mt7663-usb-sdio
-  FILES:= $(PKG_BUILD_DIR)/mt7615/mt7663u.ko
-  AUTOLOAD:=$(call AutoProbe,mt7663u)
-endef
-
-define KernelPackage/mt7915e
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7915e/MT7986/MT7916 wireless driver
-  DEPENDS+=@PCI_SUPPORT +kmod-mt7615-common +kmod-hwmon-core +kmod-thermal +@DRIVER_11AX_SUPPORT +@KERNEL_RELAY
-  FILES:= $(PKG_BUILD_DIR)/mt7915/mt7915e.ko
-  AUTOLOAD:=$(call AutoProbe,mt7915e)
-endef
-
-define KernelPackage/mt7986-firmware
-  $(KernelPackage/mt76-default)
-  DEPENDS:=+@TARGET_mediatek_mt7986
-  TITLE:=MediaTek MT7986 firmware
-endef
-
-define KernelPackage/besra
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7902/MT7990 wireless driver
-  DEPENDS+=@PCI_SUPPORT +kmod-mt76-core +kmod-mt76-connac +kmod-hwmon-core +kmod-thermal +@DRIVER_11AX_SUPPORT +@DRIVER_11BE_SUPPORT
-  FILES:= $(PKG_BUILD_DIR)/besra/besra.ko
-  AUTOLOAD:=$(call AutoProbe,besra)
-endef
-
-define KernelPackage/mt7996e
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7996/MT7995/MT7919 wireless driver
-  DEPENDS+=@PCI_SUPPORT +kmod-mt76-core +kmod-mt76-connac +kmod-hwmon-core +kmod-thermal +@DRIVER_11AX_SUPPORT +@DRIVER_11BE_SUPPORT
-  FILES:= $(PKG_BUILD_DIR)/mt7996/mt7996e.ko
-  AUTOLOAD:=$(call AutoProbe,mt7996e)
-endef
-
-define KernelPackage/mt7921-common
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7615 wireless driver common code
-  HIDDEN:=1
-  DEPENDS+=+kmod-mt76-connac +@DRIVER_11AX_SUPPORT
-  FILES:= $(PKG_BUILD_DIR)/mt7921/mt7921-common.ko
-endef
-
-define KernelPackage/mt7921u
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7921U wireless driver
-  DEPENDS+=+kmod-mt76-usb +kmod-mt7921-common
-  FILES:= $(PKG_BUILD_DIR)/mt7921/mt7921u.ko
-  AUTOLOAD:=$(call AutoProbe,mt7921u)
-endef
-
-define KernelPackage/mt7921s
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7921S wireless driver
-  DEPENDS+=+kmod-mt76-sdio +kmod-mt7921-common
-  FILES:= $(PKG_BUILD_DIR)/mt7921/mt7921s.ko
-  AUTOLOAD:=$(call AutoProbe,mt7921s)
-endef
-
-define KernelPackage/mt7921e
-  $(KernelPackage/mt76-default)
-  TITLE:=MediaTek MT7921e wireless driver
-  DEPENDS+=@PCI_SUPPORT +kmod-mt7921-common
-  FILES:= $(PKG_BUILD_DIR)/mt7921/mt7921e.ko
-  AUTOLOAD:=$(call AutoProbe,mt7921e)
-endef
-
-define Package/mt76-test
-  SECTION:=devel
-  CATEGORY:=Development
-  TITLE:=mt76 testmode CLI
-  DEPENDS:=kmod-mt76-core +libnl-tiny
-endef
-
-TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include/libnl-tiny
-
-NOSTDINC_FLAGS := \
-	$(KERNEL_NOSTDINC_FLAGS) \
-	-I$(PKG_BUILD_DIR) \
-	-I$(STAGING_DIR)/usr/include/mac80211-backport/uapi \
-	-I$(STAGING_DIR)/usr/include/mac80211-backport \
-	-I$(STAGING_DIR)/usr/include/mac80211/uapi \
-	-I$(STAGING_DIR)/usr/include/mac80211 \
-	-include backport/autoconf.h \
-	-include backport/backport.h
-
-ifdef CONFIG_PACKAGE_MAC80211_MESH
-  NOSTDINC_FLAGS += -DCONFIG_MAC80211_MESH
-endif
-
-ifdef CONFIG_PACKAGE_MAC80211_DEBUGFS
-  NOSTDINC_FLAGS += -DCONFIG_MAC80211_DEBUGFS
-  PKG_MAKE_FLAGS += CONFIG_MAC80211_DEBUGFS=y
-endif
-
-ifdef CONFIG_PACKAGE_CFG80211_TESTMODE
-  NOSTDINC_FLAGS += -DCONFIG_NL80211_TESTMODE
-  PKG_MAKE_FLAGS += CONFIG_NL80211_TESTMODE=y
-endif
-
-ifdef CONFIG_PACKAGE_kmod-mt76-usb
-  PKG_MAKE_FLAGS += CONFIG_MT76_USB=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt76x02-common
-  PKG_MAKE_FLAGS += CONFIG_MT76x02_LIB=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt76x02-usb
-  PKG_MAKE_FLAGS += CONFIG_MT76x02_USB=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt76x0-common
-  PKG_MAKE_FLAGS += CONFIG_MT76x0_COMMON=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt76x0e
-  PKG_MAKE_FLAGS += CONFIG_MT76x0E=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt76x0u
-  PKG_MAKE_FLAGS += CONFIG_MT76x0U=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt76x2-common
-  PKG_MAKE_FLAGS += CONFIG_MT76x2_COMMON=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt76x2
-  PKG_MAKE_FLAGS += CONFIG_MT76x2E=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt76x2u
-  PKG_MAKE_FLAGS += CONFIG_MT76x2U=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7603
-  PKG_MAKE_FLAGS += CONFIG_MT7603E=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt76-connac
-  PKG_MAKE_FLAGS += CONFIG_MT76_CONNAC_LIB=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt76-sdio
-  PKG_MAKE_FLAGS += CONFIG_MT76_SDIO=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7615-common
-  PKG_MAKE_FLAGS += CONFIG_MT7615_COMMON=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7615e
-  PKG_MAKE_FLAGS += CONFIG_MT7615E=m
-  ifdef CONFIG_TARGET_mediatek_mt7622
-    PKG_MAKE_FLAGS += CONFIG_MT7622_WMAC=y
-    NOSTDINC_FLAGS += -DCONFIG_MT7622_WMAC
-  endif
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7663-usb-sdio
-  PKG_MAKE_FLAGS += CONFIG_MT7663_USB_SDIO_COMMON=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7663s
-  PKG_MAKE_FLAGS += CONFIG_MT7663S=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7663u
-  PKG_MAKE_FLAGS += CONFIG_MT7663U=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7915e
-  PKG_MAKE_FLAGS += CONFIG_MT7915E=m
-  ifdef CONFIG_TARGET_mediatek_mt7986
-    PKG_MAKE_FLAGS += CONFIG_MT7986_WMAC=y
-    NOSTDINC_FLAGS += -DCONFIG_MT7986_WMAC
-  endif
-endif
-ifdef CONFIG_PACKAGE_kmod-besra
-  PKG_MAKE_FLAGS += CONFIG_BESRA=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7996e
-  PKG_MAKE_FLAGS += CONFIG_MT7996E=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7921-common
-  PKG_MAKE_FLAGS += CONFIG_MT7921_COMMON=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7921u
-  PKG_MAKE_FLAGS += CONFIG_MT7921U=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7921s
-  PKG_MAKE_FLAGS += CONFIG_MT7921S=m
-endif
-ifdef CONFIG_PACKAGE_kmod-mt7921e
-  PKG_MAKE_FLAGS += CONFIG_MT7921E=m
-endif
-
-define Build/Compile
-	+$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \
-		$(KERNEL_MAKE_FLAGS) \
-		$(PKG_MAKE_FLAGS) \
-		M="$(PKG_BUILD_DIR)" \
-		NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \
-		modules
-	$(MAKE) -C $(PKG_BUILD_DIR)/tools
-endef
-
-define Build/Install
-	:
-endef
-
-define Package/kmod-mt76/install
-	true
-endef
-
-define KernelPackage/mt76x0-common/install
-	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
-	cp \
-		$(PKG_BUILD_DIR)/firmware/mt7610e.bin \
-		$(1)/lib/firmware/mediatek
-endef
-
-define KernelPackage/mt76x2-common/install
-	$(INSTALL_DIR) $(1)/lib/firmware
-	cp \
-		$(PKG_BUILD_DIR)/firmware/mt7662_rom_patch.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7662.bin \
-		$(1)/lib/firmware
-endef
-
-define KernelPackage/mt76x0u/install
-	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
-	ln -sf mt7610e.bin $(1)/lib/firmware/mediatek/mt7610u.bin
-endef
-
-define KernelPackage/mt76x2u/install
-	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
-	ln -sf ../mt7662.bin $(1)/lib/firmware/mediatek/mt7662u.bin
-	ln -sf ../mt7662_rom_patch.bin $(1)/lib/firmware/mediatek/mt7662u_rom_patch.bin
-endef
-
-define KernelPackage/mt7603/install
-	$(INSTALL_DIR) $(1)/lib/firmware
-	cp $(if $(CONFIG_TARGET_ramips_mt76x8), \
-		$(PKG_BUILD_DIR)/firmware/mt7628_e1.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7628_e2.bin \
-		,\
-		$(PKG_BUILD_DIR)/firmware/mt7603_e1.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7603_e2.bin \
-		) \
-		$(1)/lib/firmware
-endef
-
-define KernelPackage/mt7615-firmware/install
-	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
-	cp \
-		$(PKG_BUILD_DIR)/firmware/mt7615_cr4.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7615_n9.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7615_rom_patch.bin \
-		$(if $(CONFIG_TARGET_mediatek_mt7622), \
-			$(PKG_BUILD_DIR)/firmware/mt7622_n9.bin \
-			$(PKG_BUILD_DIR)/firmware/mt7622_rom_patch.bin) \
-		$(1)/lib/firmware/mediatek
-endef
-
-define KernelPackage/mt7663-firmware-ap/install
-	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
-	cp \
-		$(PKG_BUILD_DIR)/firmware/mt7663_n9_rebb.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7663pr2h_rebb.bin \
-		$(1)/lib/firmware/mediatek
-endef
-
-define KernelPackage/mt7663-firmware-sta/install
-	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
-	cp \
-		$(PKG_BUILD_DIR)/firmware/mt7663_n9_v3.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7663pr2h.bin \
-		$(1)/lib/firmware/mediatek
-endef
-
-define KernelPackage/mt7915e/install
-	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
-	cp \
-		$(PKG_BUILD_DIR)/firmware/mt7915_wa.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7915_wm.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7915_rom_patch.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7916_wa.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7916_wm.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7916_rom_patch.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7916_eeprom.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7915_eeprom.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7915_eeprom_dbdc.bin \
-		$(1)/lib/firmware/mediatek
-endef
-
-define KernelPackage/mt7986-firmware/install
-	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
-	cp \
-		$(PKG_BUILD_DIR)/firmware/mt7986_wa.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7986_wm_mt7975.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7986_wm.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7986_rom_patch_mt7975.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7986_rom_patch.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7986_eeprom_mt7975_dual.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7986_eeprom_mt7976_dual.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7986_eeprom_mt7975.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7986_eeprom_mt7976.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7986_eeprom_mt7976_dbdc.bin \
-		$(1)/lib/firmware/mediatek
-ifdef CONFIG_NET_MEDIATEK_SOC_WED
-	cp \
-		$(PKG_BUILD_DIR)/firmware/mt7986_wo_0.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7986_wo_1.bin \
-		$(1)/lib/firmware/mediatek
-endif
-endef
-
-define KernelPackage/besra/install
-	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
-	cp \
-		$(PKG_BUILD_DIR)/firmware/mt7902_wa.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7902_wm.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7902_rom_patch.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7902_wf_rom.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7902_wf_rom_sram.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7902_eeprom.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7902_wm_7977.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7902_wf_rom_7977.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7902_wf_rom_sram_7977.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7902_eeprom_7977.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7996_wa.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7996_wm.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7996_rom_patch.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7996_eeprom.bin \
-		$(1)/lib/firmware/mediatek
-endef
-
-define KernelPackage/mt7996e/install
-	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
-	cp \
-		$(PKG_BUILD_DIR)/firmware/mt7996_wa.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7996_wm.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7996_rom_patch.bin \
-		$(PKG_BUILD_DIR)/firmware/mt7996_eeprom.bin \
-		$(1)/lib/firmware/mediatek
-endef
-
-define KernelPackage/mt7921e/install
-	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
-	cp \
-		$(PKG_BUILD_DIR)/firmware/WIFI_MT7961_patch_mcu_1_2_hdr.bin \
-		$(PKG_BUILD_DIR)/firmware/WIFI_RAM_CODE_MT7961_1.bin \
-		$(1)/lib/firmware/mediatek
-endef
-
-define Package/mt76-test/install
-	mkdir -p $(1)/usr/sbin
-	$(INSTALL_BIN) $(PKG_BUILD_DIR)/tools/mt76-test $(1)/usr/sbin
-endef
-
-$(eval $(call KernelPackage,mt76-core))
-$(eval $(call KernelPackage,mt76-usb))
-$(eval $(call KernelPackage,mt76x02-usb))
-$(eval $(call KernelPackage,mt76x02-common))
-$(eval $(call KernelPackage,mt76x0-common))
-$(eval $(call KernelPackage,mt76x0e))
-$(eval $(call KernelPackage,mt76x0u))
-$(eval $(call KernelPackage,mt76x2-common))
-$(eval $(call KernelPackage,mt76x2u))
-$(eval $(call KernelPackage,mt76x2))
-$(eval $(call KernelPackage,mt7603))
-$(eval $(call KernelPackage,mt76-connac))
-$(eval $(call KernelPackage,mt76-sdio))
-$(eval $(call KernelPackage,mt7615-common))
-$(eval $(call KernelPackage,mt7615-firmware))
-$(eval $(call KernelPackage,mt7615e))
-$(eval $(call KernelPackage,mt7663-firmware-ap))
-$(eval $(call KernelPackage,mt7663-firmware-sta))
-$(eval $(call KernelPackage,mt7663-usb-sdio))
-$(eval $(call KernelPackage,mt7663u))
-$(eval $(call KernelPackage,mt7663s))
-$(eval $(call KernelPackage,mt7915e))
-$(eval $(call KernelPackage,mt7986-firmware))
-$(eval $(call KernelPackage,mt7921-common))
-$(eval $(call KernelPackage,mt7921u))
-$(eval $(call KernelPackage,mt7921s))
-$(eval $(call KernelPackage,mt7921e))
-$(eval $(call KernelPackage,besra))
-$(eval $(call KernelPackage,mt7996e))
-$(eval $(call KernelPackage,mt76))
-$(eval $(call BuildPackage,mt76-test))
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/Makefile b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/Makefile
deleted file mode 100644
index 9c287cf..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-only
-EXTRA_CFLAGS += -Werror -DCONFIG_MT76_LEDS
-obj-m := mt76.o
-obj-$(CONFIG_MT76_USB) += mt76-usb.o
-obj-$(CONFIG_MT76_SDIO) += mt76-sdio.o
-obj-$(CONFIG_MT76x02_LIB) += mt76x02-lib.o
-obj-$(CONFIG_MT76x02_USB) += mt76x02-usb.o
-obj-$(CONFIG_MT76_CONNAC_LIB) += mt76-connac-lib.o
-
-mt76-y := \
-	mmio.o util.o trace.o dma.o mac80211.o debugfs.o eeprom.o \
-	tx.o agg-rx.o mcu.o
-
-mt76-$(CONFIG_PCI) += pci.o
-mt76-$(CONFIG_NL80211_TESTMODE) += testmode.o
-
-mt76-usb-y := usb.o usb_trace.o
-mt76-sdio-y := sdio.o sdio_txrx.o
-
-CFLAGS_trace.o := -I$(src)
-CFLAGS_usb_trace.o := -I$(src)
-CFLAGS_mt76x02_trace.o := -I$(src)
-
-mt76x02-lib-y := mt76x02_util.o mt76x02_mac.o mt76x02_mcu.o \
-		 mt76x02_eeprom.o mt76x02_phy.o mt76x02_mmio.o \
-		 mt76x02_txrx.o mt76x02_trace.o mt76x02_debugfs.o \
-		 mt76x02_dfs.o mt76x02_beacon.o
-
-mt76x02-usb-y := mt76x02_usb_mcu.o mt76x02_usb_core.o
-
-mt76-connac-lib-y := mt76_connac_mcu.o mt76_connac_mac.o
-
-obj-$(CONFIG_MT76x0_COMMON) += mt76x0/
-obj-$(CONFIG_MT76x2_COMMON) += mt76x2/
-obj-$(CONFIG_MT7603E) += mt7603/
-obj-$(CONFIG_MT7615_COMMON) += mt7615/
-obj-$(CONFIG_MT7915E) += mt7915/
-obj-$(CONFIG_MT7921_COMMON) += mt7921/
-obj-$(CONFIG_MT7996E) += mt7996/
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/agg-rx.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/agg-rx.c
deleted file mode 100644
index 10cbd9e..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/agg-rx.c
+++ /dev/null
@@ -1,301 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Felix Fietkau <nbd@nbd.name>
- */
-#include "mt76.h"
-
-static unsigned long mt76_aggr_tid_to_timeo(u8 tidno)
-{
-	/* Currently voice traffic (AC_VO) always runs without aggregation,
-	 * no special handling is needed. AC_BE/AC_BK use tids 0-3. Just check
-	 * for non AC_BK/AC_BE and set smaller timeout for it. */
-	return HZ / (tidno >= 4 ? 25 : 10);
-}
-
-static void
-mt76_aggr_release(struct mt76_rx_tid *tid, struct sk_buff_head *frames, int idx)
-{
-	struct sk_buff *skb;
-
-	tid->head = ieee80211_sn_inc(tid->head);
-
-	skb = tid->reorder_buf[idx];
-	if (!skb)
-		return;
-
-	tid->reorder_buf[idx] = NULL;
-	tid->nframes--;
-	__skb_queue_tail(frames, skb);
-}
-
-static void
-mt76_rx_aggr_release_frames(struct mt76_rx_tid *tid,
-			    struct sk_buff_head *frames,
-			    u16 head)
-{
-	int idx;
-
-	while (ieee80211_sn_less(tid->head, head)) {
-		idx = tid->head % tid->size;
-		mt76_aggr_release(tid, frames, idx);
-	}
-}
-
-static void
-mt76_rx_aggr_release_head(struct mt76_rx_tid *tid, struct sk_buff_head *frames)
-{
-	int idx = tid->head % tid->size;
-
-	while (tid->reorder_buf[idx]) {
-		mt76_aggr_release(tid, frames, idx);
-		idx = tid->head % tid->size;
-	}
-}
-
-static void
-mt76_rx_aggr_check_release(struct mt76_rx_tid *tid, struct sk_buff_head *frames)
-{
-	struct mt76_rx_status *status;
-	struct sk_buff *skb;
-	int start, idx, nframes;
-
-	if (!tid->nframes)
-		return;
-
-	mt76_rx_aggr_release_head(tid, frames);
-
-	start = tid->head % tid->size;
-	nframes = tid->nframes;
-
-	for (idx = (tid->head + 1) % tid->size;
-	     idx != start && nframes;
-	     idx = (idx + 1) % tid->size) {
-		skb = tid->reorder_buf[idx];
-		if (!skb)
-			continue;
-
-		nframes--;
-		status = (struct mt76_rx_status *)skb->cb;
-		if (!time_after32(jiffies,
-				  status->reorder_time +
-				  mt76_aggr_tid_to_timeo(tid->num)))
-			continue;
-
-		mt76_rx_aggr_release_frames(tid, frames, status->seqno);
-	}
-
-	mt76_rx_aggr_release_head(tid, frames);
-}
-
-static void
-mt76_rx_aggr_reorder_work(struct work_struct *work)
-{
-	struct mt76_rx_tid *tid = container_of(work, struct mt76_rx_tid,
-					       reorder_work.work);
-	struct mt76_dev *dev = tid->dev;
-	struct sk_buff_head frames;
-	int nframes;
-
-	__skb_queue_head_init(&frames);
-
-	local_bh_disable();
-	rcu_read_lock();
-
-	spin_lock(&tid->lock);
-	mt76_rx_aggr_check_release(tid, &frames);
-	nframes = tid->nframes;
-	spin_unlock(&tid->lock);
-
-	if (nframes)
-		ieee80211_queue_delayed_work(tid->dev->hw, &tid->reorder_work,
-					     mt76_aggr_tid_to_timeo(tid->num));
-	mt76_rx_complete(dev, &frames, NULL);
-
-	rcu_read_unlock();
-	local_bh_enable();
-}
-
-static void
-mt76_rx_aggr_check_ctl(struct sk_buff *skb, struct sk_buff_head *frames)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct ieee80211_bar *bar = mt76_skb_get_hdr(skb);
-	struct mt76_wcid *wcid = status->wcid;
-	struct mt76_rx_tid *tid;
-	u8 tidno = status->qos_ctl & IEEE80211_QOS_CTL_TID_MASK;
-	u16 seqno;
-
-	if (!ieee80211_is_ctl(bar->frame_control))
-		return;
-
-	if (!ieee80211_is_back_req(bar->frame_control))
-		return;
-
-	status->qos_ctl = tidno = le16_to_cpu(bar->control) >> 12;
-	seqno = IEEE80211_SEQ_TO_SN(le16_to_cpu(bar->start_seq_num));
-	tid = rcu_dereference(wcid->aggr[tidno]);
-	if (!tid)
-		return;
-
-	spin_lock_bh(&tid->lock);
-	if (!tid->stopped) {
-		mt76_rx_aggr_release_frames(tid, frames, seqno);
-		mt76_rx_aggr_release_head(tid, frames);
-	}
-	spin_unlock_bh(&tid->lock);
-}
-
-void mt76_rx_aggr_reorder(struct sk_buff *skb, struct sk_buff_head *frames)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct mt76_wcid *wcid = status->wcid;
-	struct ieee80211_sta *sta;
-	struct mt76_rx_tid *tid;
-	bool sn_less;
-	u16 seqno, head, size, idx;
-	u8 tidno = status->qos_ctl & IEEE80211_QOS_CTL_TID_MASK;
-	u8 ackp;
-
-	__skb_queue_tail(frames, skb);
-
-	sta = wcid_to_sta(wcid);
-	if (!sta)
-		return;
-
-	if (!status->aggr) {
-		if (!(status->flag & RX_FLAG_8023))
-			mt76_rx_aggr_check_ctl(skb, frames);
-		return;
-	}
-
-	/* not part of a BA session */
-	ackp = status->qos_ctl & IEEE80211_QOS_CTL_ACK_POLICY_MASK;
-	if (ackp == IEEE80211_QOS_CTL_ACK_POLICY_NOACK)
-		return;
-
-	tid = rcu_dereference(wcid->aggr[tidno]);
-	if (!tid)
-		return;
-
-	status->flag |= RX_FLAG_DUP_VALIDATED;
-	spin_lock_bh(&tid->lock);
-
-	if (tid->stopped)
-		goto out;
-
-	head = tid->head;
-	seqno = status->seqno;
-	size = tid->size;
-	sn_less = ieee80211_sn_less(seqno, head);
-
-	if (!tid->started) {
-		if (sn_less)
-			goto out;
-
-		tid->started = true;
-	}
-
-	if (sn_less) {
-		__skb_unlink(skb, frames);
-		dev_kfree_skb(skb);
-		goto out;
-	}
-
-	if (seqno == head) {
-		tid->head = ieee80211_sn_inc(head);
-		if (tid->nframes)
-			mt76_rx_aggr_release_head(tid, frames);
-		goto out;
-	}
-
-	__skb_unlink(skb, frames);
-
-	/*
-	 * Frame sequence number exceeds buffering window, free up some space
-	 * by releasing previous frames
-	 */
-	if (!ieee80211_sn_less(seqno, head + size)) {
-		head = ieee80211_sn_inc(ieee80211_sn_sub(seqno, size));
-		mt76_rx_aggr_release_frames(tid, frames, head);
-	}
-
-	idx = seqno % size;
-
-	/* Discard if the current slot is already in use */
-	if (tid->reorder_buf[idx]) {
-		dev_kfree_skb(skb);
-		goto out;
-	}
-
-	status->reorder_time = jiffies;
-	tid->reorder_buf[idx] = skb;
-	tid->nframes++;
-	mt76_rx_aggr_release_head(tid, frames);
-
-	ieee80211_queue_delayed_work(tid->dev->hw, &tid->reorder_work,
-				     mt76_aggr_tid_to_timeo(tid->num));
-
-out:
-	spin_unlock_bh(&tid->lock);
-}
-
-int mt76_rx_aggr_start(struct mt76_dev *dev, struct mt76_wcid *wcid, u8 tidno,
-		       u16 ssn, u16 size)
-{
-	struct mt76_rx_tid *tid;
-
-	mt76_rx_aggr_stop(dev, wcid, tidno);
-
-	tid = kzalloc(struct_size(tid, reorder_buf, size), GFP_KERNEL);
-	if (!tid)
-		return -ENOMEM;
-
-	tid->dev = dev;
-	tid->head = ssn;
-	tid->size = size;
-	tid->num = tidno;
-	INIT_DELAYED_WORK(&tid->reorder_work, mt76_rx_aggr_reorder_work);
-	spin_lock_init(&tid->lock);
-
-	rcu_assign_pointer(wcid->aggr[tidno], tid);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_rx_aggr_start);
-
-static void mt76_rx_aggr_shutdown(struct mt76_dev *dev, struct mt76_rx_tid *tid)
-{
-	u16 size = tid->size;
-	int i;
-
-	spin_lock_bh(&tid->lock);
-
-	tid->stopped = true;
-	for (i = 0; tid->nframes && i < size; i++) {
-		struct sk_buff *skb = tid->reorder_buf[i];
-
-		if (!skb)
-			continue;
-
-		tid->reorder_buf[i] = NULL;
-		tid->nframes--;
-		dev_kfree_skb(skb);
-	}
-
-	spin_unlock_bh(&tid->lock);
-
-	cancel_delayed_work_sync(&tid->reorder_work);
-}
-
-void mt76_rx_aggr_stop(struct mt76_dev *dev, struct mt76_wcid *wcid, u8 tidno)
-{
-	struct mt76_rx_tid *tid = NULL;
-
-	tid = rcu_replace_pointer(wcid->aggr[tidno], tid,
-				  lockdep_is_held(&dev->mutex));
-	if (tid) {
-		mt76_rx_aggr_shutdown(dev, tid);
-		kfree_rcu(tid, rcu_head);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_rx_aggr_stop);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/debugfs.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/debugfs.c
deleted file mode 100644
index b7aa872..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/debugfs.c
+++ /dev/null
@@ -1,101 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-#include "mt76.h"
-
-static int
-mt76_reg_set(void *data, u64 val)
-{
-	struct mt76_dev *dev = data;
-
-	__mt76_wr(dev, dev->debugfs_reg, val);
-	return 0;
-}
-
-static int
-mt76_reg_get(void *data, u64 *val)
-{
-	struct mt76_dev *dev = data;
-
-	*val = __mt76_rr(dev, dev->debugfs_reg);
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_regval, mt76_reg_get, mt76_reg_set,
-			 "0x%08llx\n");
-
-int mt76_queues_read(struct seq_file *s, void *data)
-{
-	struct mt76_dev *dev = dev_get_drvdata(s->private);
-	int i;
-
-	seq_puts(s, "     queue | hw-queued |      head |      tail |\n");
-	for (i = 0; i < ARRAY_SIZE(dev->phy.q_tx); i++) {
-		struct mt76_queue *q = dev->phy.q_tx[i];
-
-		if (!q)
-			continue;
-
-		seq_printf(s, " %9d | %9d | %9d | %9d |\n",
-			   i, q->queued, q->head, q->tail);
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_queues_read);
-
-static int mt76_rx_queues_read(struct seq_file *s, void *data)
-{
-	struct mt76_dev *dev = dev_get_drvdata(s->private);
-	int i, queued;
-
-	seq_puts(s, "     queue | hw-queued |      head |      tail |\n");
-	mt76_for_each_q_rx(dev, i) {
-		struct mt76_queue *q = &dev->q_rx[i];
-
-		queued = mt76_is_usb(dev) ? q->ndesc - q->queued : q->queued;
-		seq_printf(s, " %9d | %9d | %9d | %9d |\n",
-			   i, queued, q->head, q->tail);
-	}
-
-	return 0;
-}
-
-void mt76_seq_puts_array(struct seq_file *file, const char *str,
-			 s8 *val, int len)
-{
-	int i;
-
-	seq_printf(file, "%10s:", str);
-	for (i = 0; i < len; i++)
-		seq_printf(file, " %2d", val[i]);
-	seq_puts(file, "\n");
-}
-EXPORT_SYMBOL_GPL(mt76_seq_puts_array);
-
-struct dentry *
-mt76_register_debugfs_fops(struct mt76_phy *phy,
-			   const struct file_operations *ops)
-{
-	const struct file_operations *fops = ops ? ops : &fops_regval;
-	struct mt76_dev *dev = phy->dev;
-	struct dentry *dir;
-
-	dir = debugfs_create_dir("mt76", phy->hw->wiphy->debugfsdir);
-	if (!dir)
-		return NULL;
-
-	debugfs_create_u8("led_pin", 0600, dir, &dev->led_pin);
-	debugfs_create_bool("led_active_low", 0600, dir, &dev->led_al);
-	debugfs_create_u32("regidx", 0600, dir, &dev->debugfs_reg);
-	debugfs_create_file_unsafe("regval", 0600, dir, dev, fops);
-	debugfs_create_blob("eeprom", 0400, dir, &dev->eeprom);
-	if (dev->otp.data)
-		debugfs_create_blob("otp", 0400, dir, &dev->otp);
-	debugfs_create_devm_seqfile(dev->dev, "rx-queues", dir,
-				    mt76_rx_queues_read);
-
-	return dir;
-}
-EXPORT_SYMBOL_GPL(mt76_register_debugfs_fops);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/dma.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/dma.c
deleted file mode 100644
index 116f9cc..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/dma.c
+++ /dev/null
@@ -1,721 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/dma-mapping.h>
-#include "mt76.h"
-#include "dma.h"
-
-#define Q_READ(_dev, _q, _field)		readl(&(_q)->regs->_field)
-#define Q_WRITE(_dev, _q, _field, _val)		writel(_val, &(_q)->regs->_field)
-
-
-static struct mt76_txwi_cache *
-mt76_alloc_txwi(struct mt76_dev *dev)
-{
-	struct mt76_txwi_cache *t;
-	dma_addr_t addr;
-	u8 *txwi;
-	int size;
-
-	size = L1_CACHE_ALIGN(dev->drv->txwi_size + sizeof(*t));
-	txwi = kzalloc(size, GFP_ATOMIC);
-	if (!txwi)
-		return NULL;
-
-	addr = dma_map_single(dev->dma_dev, txwi, dev->drv->txwi_size,
-			      DMA_TO_DEVICE);
-	t = (struct mt76_txwi_cache *)(txwi + dev->drv->txwi_size);
-	t->dma_addr = addr;
-
-	return t;
-}
-
-static struct mt76_txwi_cache *
-__mt76_get_txwi(struct mt76_dev *dev)
-{
-	struct mt76_txwi_cache *t = NULL;
-
-	spin_lock(&dev->lock);
-	if (!list_empty(&dev->txwi_cache)) {
-		t = list_first_entry(&dev->txwi_cache, struct mt76_txwi_cache,
-				     list);
-		list_del(&t->list);
-	}
-	spin_unlock(&dev->lock);
-
-	return t;
-}
-
-static struct mt76_txwi_cache *
-mt76_get_txwi(struct mt76_dev *dev)
-{
-	struct mt76_txwi_cache *t = __mt76_get_txwi(dev);
-
-	if (t)
-		return t;
-
-	return mt76_alloc_txwi(dev);
-}
-
-void
-mt76_put_txwi(struct mt76_dev *dev, struct mt76_txwi_cache *t)
-{
-	if (!t)
-		return;
-
-	spin_lock(&dev->lock);
-	list_add(&t->list, &dev->txwi_cache);
-	spin_unlock(&dev->lock);
-}
-EXPORT_SYMBOL_GPL(mt76_put_txwi);
-
-static void
-mt76_free_pending_txwi(struct mt76_dev *dev)
-{
-	struct mt76_txwi_cache *t;
-
-	local_bh_disable();
-	while ((t = __mt76_get_txwi(dev)) != NULL) {
-		dma_unmap_single(dev->dma_dev, t->dma_addr, dev->drv->txwi_size,
-				 DMA_TO_DEVICE);
-		kfree(mt76_get_txwi_ptr(dev, t));
-	}
-	local_bh_enable();
-}
-
-static void
-mt76_dma_sync_idx(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	Q_WRITE(dev, q, desc_base, q->desc_dma);
-	Q_WRITE(dev, q, ring_size, q->ndesc);
-	q->head = Q_READ(dev, q, dma_idx);
-	q->tail = q->head;
-}
-
-static void
-mt76_dma_queue_reset(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	int i;
-
-	if (!q || !q->ndesc)
-		return;
-
-	/* clear descriptors */
-	for (i = 0; i < q->ndesc; i++)
-		q->desc[i].ctrl = cpu_to_le32(MT_DMA_CTL_DMA_DONE);
-
-	Q_WRITE(dev, q, cpu_idx, 0);
-	Q_WRITE(dev, q, dma_idx, 0);
-	mt76_dma_sync_idx(dev, q);
-}
-
-static int
-mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q,
-		     int idx, int n_desc, int bufsize,
-		     u32 ring_base)
-{
-	int size;
-
-	spin_lock_init(&q->lock);
-	spin_lock_init(&q->cleanup_lock);
-
-	q->regs = dev->mmio.regs + ring_base + idx * MT_RING_SIZE;
-	q->ndesc = n_desc;
-	q->buf_size = bufsize;
-	q->hw_idx = idx;
-
-	size = q->ndesc * sizeof(struct mt76_desc);
-	q->desc = dmam_alloc_coherent(dev->dma_dev, size, &q->desc_dma, GFP_KERNEL);
-	if (!q->desc)
-		return -ENOMEM;
-
-	size = q->ndesc * sizeof(*q->entry);
-	q->entry = devm_kzalloc(dev->dev, size, GFP_KERNEL);
-	if (!q->entry)
-		return -ENOMEM;
-
-	mt76_dma_queue_reset(dev, q);
-
-	return 0;
-}
-
-static int
-mt76_dma_add_buf(struct mt76_dev *dev, struct mt76_queue *q,
-		 struct mt76_queue_buf *buf, int nbufs, u32 info,
-		 struct sk_buff *skb, void *txwi)
-{
-	struct mt76_queue_entry *entry;
-	struct mt76_desc *desc;
-	u32 ctrl;
-	int i, idx = -1;
-
-	if (txwi) {
-		q->entry[q->head].txwi = DMA_DUMMY_DATA;
-		q->entry[q->head].skip_buf0 = true;
-	}
-
-	for (i = 0; i < nbufs; i += 2, buf += 2) {
-		u32 buf0 = buf[0].addr, buf1 = 0;
-
-		idx = q->head;
-		q->head = (q->head + 1) % q->ndesc;
-
-		desc = &q->desc[idx];
-		entry = &q->entry[idx];
-
-		if (buf[0].skip_unmap)
-			entry->skip_buf0 = true;
-		entry->skip_buf1 = i == nbufs - 1;
-
-		entry->dma_addr[0] = buf[0].addr;
-		entry->dma_len[0] = buf[0].len;
-
-		ctrl = FIELD_PREP(MT_DMA_CTL_SD_LEN0, buf[0].len);
-		if (i < nbufs - 1) {
-			entry->dma_addr[1] = buf[1].addr;
-			entry->dma_len[1] = buf[1].len;
-			buf1 = buf[1].addr;
-			ctrl |= FIELD_PREP(MT_DMA_CTL_SD_LEN1, buf[1].len);
-			if (buf[1].skip_unmap)
-				entry->skip_buf1 = true;
-		}
-
-		if (i == nbufs - 1)
-			ctrl |= MT_DMA_CTL_LAST_SEC0;
-		else if (i == nbufs - 2)
-			ctrl |= MT_DMA_CTL_LAST_SEC1;
-
-		WRITE_ONCE(desc->buf0, cpu_to_le32(buf0));
-		WRITE_ONCE(desc->buf1, cpu_to_le32(buf1));
-		WRITE_ONCE(desc->info, cpu_to_le32(info));
-		WRITE_ONCE(desc->ctrl, cpu_to_le32(ctrl));
-
-		q->queued++;
-	}
-
-	q->entry[idx].txwi = txwi;
-	q->entry[idx].skb = skb;
-	q->entry[idx].wcid = 0xffff;
-
-	return idx;
-}
-
-static void
-mt76_dma_tx_cleanup_idx(struct mt76_dev *dev, struct mt76_queue *q, int idx,
-			struct mt76_queue_entry *prev_e)
-{
-	struct mt76_queue_entry *e = &q->entry[idx];
-
-	if (!e->skip_buf0)
-		dma_unmap_single(dev->dma_dev, e->dma_addr[0], e->dma_len[0],
-				 DMA_TO_DEVICE);
-
-	if (!e->skip_buf1)
-		dma_unmap_single(dev->dma_dev, e->dma_addr[1], e->dma_len[1],
-				 DMA_TO_DEVICE);
-
-	if (e->txwi == DMA_DUMMY_DATA)
-		e->txwi = NULL;
-
-	if (e->skb == DMA_DUMMY_DATA)
-		e->skb = NULL;
-
-	*prev_e = *e;
-	memset(e, 0, sizeof(*e));
-}
-
-static void
-mt76_dma_kick_queue(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	wmb();
-	Q_WRITE(dev, q, cpu_idx, q->head);
-}
-
-static void
-mt76_dma_tx_cleanup(struct mt76_dev *dev, struct mt76_queue *q, bool flush)
-{
-	struct mt76_queue_entry entry;
-	int last;
-
-	if (!q || !q->ndesc)
-		return;
-
-	spin_lock_bh(&q->cleanup_lock);
-	if (flush)
-		last = -1;
-	else
-		last = Q_READ(dev, q, dma_idx);
-
-	while (q->queued > 0 && q->tail != last) {
-		mt76_dma_tx_cleanup_idx(dev, q, q->tail, &entry);
-		mt76_queue_tx_complete(dev, q, &entry);
-
-		if (entry.txwi) {
-			if (!(dev->drv->drv_flags & MT_DRV_TXWI_NO_FREE))
-				mt76_put_txwi(dev, entry.txwi);
-		}
-
-		if (!flush && q->tail == last)
-			last = Q_READ(dev, q, dma_idx);
-	}
-	spin_unlock_bh(&q->cleanup_lock);
-
-	if (flush) {
-		spin_lock_bh(&q->lock);
-		mt76_dma_sync_idx(dev, q);
-		mt76_dma_kick_queue(dev, q);
-		spin_unlock_bh(&q->lock);
-	}
-
-	if (!q->queued)
-		wake_up(&dev->tx_wait);
-}
-
-static void *
-mt76_dma_get_buf(struct mt76_dev *dev, struct mt76_queue *q, int idx,
-		 int *len, u32 *info, bool *more)
-{
-	struct mt76_queue_entry *e = &q->entry[idx];
-	struct mt76_desc *desc = &q->desc[idx];
-	dma_addr_t buf_addr;
-	void *buf = e->buf;
-	int buf_len = SKB_WITH_OVERHEAD(q->buf_size);
-
-	buf_addr = e->dma_addr[0];
-	if (len) {
-		u32 ctl = le32_to_cpu(READ_ONCE(desc->ctrl));
-		*len = FIELD_GET(MT_DMA_CTL_SD_LEN0, ctl);
-		*more = !(ctl & MT_DMA_CTL_LAST_SEC0);
-	}
-
-	if (info)
-		*info = le32_to_cpu(desc->info);
-
-	dma_unmap_single(dev->dma_dev, buf_addr, buf_len, DMA_FROM_DEVICE);
-	e->buf = NULL;
-
-	return buf;
-}
-
-static void *
-mt76_dma_dequeue(struct mt76_dev *dev, struct mt76_queue *q, bool flush,
-		 int *len, u32 *info, bool *more)
-{
-	int idx = q->tail;
-
-	*more = false;
-	if (!q->queued)
-		return NULL;
-
-	if (flush)
-		q->desc[idx].ctrl |= cpu_to_le32(MT_DMA_CTL_DMA_DONE);
-	else if (!(q->desc[idx].ctrl & cpu_to_le32(MT_DMA_CTL_DMA_DONE)))
-		return NULL;
-
-	q->tail = (q->tail + 1) % q->ndesc;
-	q->queued--;
-
-	return mt76_dma_get_buf(dev, q, idx, len, info, more);
-}
-
-static int
-mt76_dma_tx_queue_skb_raw(struct mt76_dev *dev, struct mt76_queue *q,
-			  struct sk_buff *skb, u32 tx_info)
-{
-	struct mt76_queue_buf buf = {};
-	dma_addr_t addr;
-
-	if (q->queued + 1 >= q->ndesc - 1)
-		goto error;
-
-	addr = dma_map_single(dev->dma_dev, skb->data, skb->len,
-			      DMA_TO_DEVICE);
-	if (unlikely(dma_mapping_error(dev->dma_dev, addr)))
-		goto error;
-
-	buf.addr = addr;
-	buf.len = skb->len;
-
-	spin_lock_bh(&q->lock);
-	mt76_dma_add_buf(dev, q, &buf, 1, tx_info, skb, NULL);
-	mt76_dma_kick_queue(dev, q);
-	spin_unlock_bh(&q->lock);
-
-	return 0;
-
-error:
-	dev_kfree_skb(skb);
-	return -ENOMEM;
-}
-
-static int
-mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
-		      enum mt76_txq_id qid, struct sk_buff *skb,
-		      struct mt76_wcid *wcid, struct ieee80211_sta *sta)
-{
-	struct ieee80211_tx_status status = {
-		.sta = sta,
-	};
-	struct mt76_tx_info tx_info = {
-		.skb = skb,
-	};
-	struct ieee80211_hw *hw;
-	int len, n = 0, ret = -ENOMEM;
-	struct mt76_txwi_cache *t;
-	struct sk_buff *iter;
-	dma_addr_t addr;
-	u8 *txwi;
-
-	t = mt76_get_txwi(dev);
-	if (!t)
-		goto free_skb;
-
-	txwi = mt76_get_txwi_ptr(dev, t);
-
-	skb->prev = skb->next = NULL;
-	if (dev->drv->drv_flags & MT_DRV_TX_ALIGNED4_SKBS)
-		mt76_insert_hdr_pad(skb);
-
-	len = skb_headlen(skb);
-	addr = dma_map_single(dev->dma_dev, skb->data, len, DMA_TO_DEVICE);
-	if (unlikely(dma_mapping_error(dev->dma_dev, addr)))
-		goto free;
-
-	tx_info.buf[n].addr = t->dma_addr;
-	tx_info.buf[n++].len = dev->drv->txwi_size;
-	tx_info.buf[n].addr = addr;
-	tx_info.buf[n++].len = len;
-
-	skb_walk_frags(skb, iter) {
-		if (n == ARRAY_SIZE(tx_info.buf))
-			goto unmap;
-
-		addr = dma_map_single(dev->dma_dev, iter->data, iter->len,
-				      DMA_TO_DEVICE);
-		if (unlikely(dma_mapping_error(dev->dma_dev, addr)))
-			goto unmap;
-
-		tx_info.buf[n].addr = addr;
-		tx_info.buf[n++].len = iter->len;
-	}
-	tx_info.nbuf = n;
-
-	if (q->queued + (tx_info.nbuf + 1) / 2 >= q->ndesc - 1) {
-		ret = -ENOMEM;
-		goto unmap;
-	}
-
-	dma_sync_single_for_cpu(dev->dma_dev, t->dma_addr, dev->drv->txwi_size,
-				DMA_TO_DEVICE);
-	ret = dev->drv->tx_prepare_skb(dev, txwi, qid, wcid, sta, &tx_info);
-	dma_sync_single_for_device(dev->dma_dev, t->dma_addr, dev->drv->txwi_size,
-				   DMA_TO_DEVICE);
-	if (ret < 0)
-		goto unmap;
-
-	return mt76_dma_add_buf(dev, q, tx_info.buf, tx_info.nbuf,
-				tx_info.info, tx_info.skb, t);
-
-unmap:
-	for (n--; n > 0; n--)
-		dma_unmap_single(dev->dma_dev, tx_info.buf[n].addr,
-				 tx_info.buf[n].len, DMA_TO_DEVICE);
-
-free:
-#ifdef CONFIG_NL80211_TESTMODE
-	/* fix tx_done accounting on queue overflow */
-	if (mt76_is_testmode_skb(dev, skb, &hw)) {
-		struct mt76_phy *phy = hw->priv;
-
-		if (tx_info.skb == phy->test.tx_skb)
-			phy->test.tx_done--;
-	}
-#endif
-
-	mt76_put_txwi(dev, t);
-
-free_skb:
-	status.skb = tx_info.skb;
-	hw = mt76_tx_status_get_hw(dev, tx_info.skb);
-	ieee80211_tx_status_ext(hw, &status);
-
-	return ret;
-}
-
-static int
-mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	dma_addr_t addr;
-	void *buf;
-	int frames = 0;
-	int len = SKB_WITH_OVERHEAD(q->buf_size);
-	int offset = q->buf_offset;
-
-	if (!q->ndesc)
-		return 0;
-
-	spin_lock_bh(&q->lock);
-
-	while (q->queued < q->ndesc - 1) {
-		struct mt76_queue_buf qbuf;
-
-		buf = page_frag_alloc(&q->rx_page, q->buf_size, GFP_ATOMIC);
-		if (!buf)
-			break;
-
-		addr = dma_map_single(dev->dma_dev, buf, len, DMA_FROM_DEVICE);
-		if (unlikely(dma_mapping_error(dev->dma_dev, addr))) {
-			skb_free_frag(buf);
-			break;
-		}
-
-		qbuf.addr = addr + offset;
-		qbuf.len = len - offset;
-		qbuf.skip_unmap = false;
-		mt76_dma_add_buf(dev, q, &qbuf, 1, 0, buf, NULL);
-		frames++;
-	}
-
-	if (frames)
-		mt76_dma_kick_queue(dev, q);
-
-	spin_unlock_bh(&q->lock);
-
-	return frames;
-}
-
-static void
-mt76_dma_rx_cleanup(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	struct page *page;
-	void *buf;
-	bool more;
-
-	if (!q->ndesc)
-		return;
-
-	spin_lock_bh(&q->lock);
-	do {
-		buf = mt76_dma_dequeue(dev, q, true, NULL, NULL, &more);
-		if (!buf)
-			break;
-
-		skb_free_frag(buf);
-	} while (1);
-	spin_unlock_bh(&q->lock);
-
-	if (!q->rx_page.va)
-		return;
-
-	page = virt_to_page(q->rx_page.va);
-	__page_frag_cache_drain(page, q->rx_page.pagecnt_bias);
-	memset(&q->rx_page, 0, sizeof(q->rx_page));
-}
-
-static void
-mt76_dma_rx_reset(struct mt76_dev *dev, enum mt76_rxq_id qid)
-{
-	struct mt76_queue *q = &dev->q_rx[qid];
-	int i;
-
-	if (!q->ndesc)
-		return;
-
-	for (i = 0; i < q->ndesc; i++)
-		q->desc[i].ctrl = cpu_to_le32(MT_DMA_CTL_DMA_DONE);
-
-	mt76_dma_rx_cleanup(dev, q);
-	mt76_dma_sync_idx(dev, q);
-	mt76_dma_rx_fill(dev, q);
-
-	if (!q->rx_head)
-		return;
-
-	dev_kfree_skb(q->rx_head);
-	q->rx_head = NULL;
-}
-
-static void
-mt76_add_fragment(struct mt76_dev *dev, struct mt76_queue *q, void *data,
-		  int len, bool more)
-{
-	struct sk_buff *skb = q->rx_head;
-	struct skb_shared_info *shinfo = skb_shinfo(skb);
-	int nr_frags = shinfo->nr_frags;
-
-	if (nr_frags < ARRAY_SIZE(shinfo->frags)) {
-		struct page *page = virt_to_head_page(data);
-		int offset = data - page_address(page) + q->buf_offset;
-
-		skb_add_rx_frag(skb, nr_frags, page, offset, len, q->buf_size);
-	} else {
-		skb_free_frag(data);
-	}
-
-	if (more)
-		return;
-
-	q->rx_head = NULL;
-	if (nr_frags < ARRAY_SIZE(shinfo->frags))
-		dev->drv->rx_skb(dev, q - dev->q_rx, skb);
-	else
-		dev_kfree_skb(skb);
-}
-
-static int
-mt76_dma_rx_process(struct mt76_dev *dev, struct mt76_queue *q, int budget)
-{
-	int len, data_len, done = 0;
-	struct sk_buff *skb;
-	unsigned char *data;
-	bool more;
-
-	while (done < budget) {
-		u32 info;
-
-		data = mt76_dma_dequeue(dev, q, false, &len, &info, &more);
-		if (!data)
-			break;
-
-		if (q->rx_head)
-			data_len = q->buf_size;
-		else
-			data_len = SKB_WITH_OVERHEAD(q->buf_size);
-
-		if (data_len < len + q->buf_offset) {
-			dev_kfree_skb(q->rx_head);
-			q->rx_head = NULL;
-			goto free_frag;
-		}
-
-		if (q->rx_head) {
-			mt76_add_fragment(dev, q, data, len, more);
-			continue;
-		}
-
-		if (!more && dev->drv->rx_check &&
-		    !(dev->drv->rx_check(dev, data, len)))
-			goto free_frag;
-
-		skb = build_skb(data, q->buf_size);
-		if (!skb)
-			goto free_frag;
-
-		skb_reserve(skb, q->buf_offset);
-
-		*(u32 *)skb->cb = info;
-
-		__skb_put(skb, len);
-		done++;
-
-		if (more) {
-			q->rx_head = skb;
-			continue;
-		}
-
-		dev->drv->rx_skb(dev, q - dev->q_rx, skb);
-		continue;
-
-free_frag:
-		skb_free_frag(data);
-	}
-
-	mt76_dma_rx_fill(dev, q);
-	return done;
-}
-
-int mt76_dma_rx_poll(struct napi_struct *napi, int budget)
-{
-	struct mt76_dev *dev;
-	int qid, done = 0, cur;
-
-	dev = container_of(napi->dev, struct mt76_dev, napi_dev);
-	qid = napi - dev->napi;
-
-	rcu_read_lock();
-
-	do {
-		cur = mt76_dma_rx_process(dev, &dev->q_rx[qid], budget - done);
-		mt76_rx_poll_complete(dev, qid, napi);
-		done += cur;
-	} while (cur && done < budget);
-
-	rcu_read_unlock();
-
-	if (done < budget && napi_complete(napi))
-		dev->drv->rx_poll_complete(dev, qid);
-
-	return done;
-}
-EXPORT_SYMBOL_GPL(mt76_dma_rx_poll);
-
-static int
-mt76_dma_init(struct mt76_dev *dev,
-	      int (*poll)(struct napi_struct *napi, int budget))
-{
-	int i;
-
-	init_dummy_netdev(&dev->napi_dev);
-	init_dummy_netdev(&dev->tx_napi_dev);
-	snprintf(dev->napi_dev.name, sizeof(dev->napi_dev.name), "%s",
-		 wiphy_name(dev->hw->wiphy));
-	dev->napi_dev.threaded = 1;
-
-	mt76_for_each_q_rx(dev, i) {
-		netif_napi_add(&dev->napi_dev, &dev->napi[i], poll, 64);
-		mt76_dma_rx_fill(dev, &dev->q_rx[i]);
-		napi_enable(&dev->napi[i]);
-	}
-
-	return 0;
-}
-
-static const struct mt76_queue_ops mt76_dma_ops = {
-	.init = mt76_dma_init,
-	.alloc = mt76_dma_alloc_queue,
-	.reset_q = mt76_dma_queue_reset,
-	.tx_queue_skb_raw = mt76_dma_tx_queue_skb_raw,
-	.tx_queue_skb = mt76_dma_tx_queue_skb,
-	.tx_cleanup = mt76_dma_tx_cleanup,
-	.rx_cleanup = mt76_dma_rx_cleanup,
-	.rx_reset = mt76_dma_rx_reset,
-	.kick = mt76_dma_kick_queue,
-};
-
-void mt76_dma_attach(struct mt76_dev *dev)
-{
-	dev->queue_ops = &mt76_dma_ops;
-}
-EXPORT_SYMBOL_GPL(mt76_dma_attach);
-
-void mt76_dma_cleanup(struct mt76_dev *dev)
-{
-	int i;
-
-	mt76_worker_disable(&dev->tx_worker);
-	netif_napi_del(&dev->tx_napi);
-
-	for (i = 0; i < ARRAY_SIZE(dev->phys); i++) {
-		struct mt76_phy *phy = dev->phys[i];
-		int j;
-
-		if (!phy)
-			continue;
-
-		for (j = 0; j < ARRAY_SIZE(phy->q_tx); j++)
-			mt76_dma_tx_cleanup(dev, phy->q_tx[j], true);
-	}
-
-	for (i = 0; i < ARRAY_SIZE(dev->q_mcu); i++)
-		mt76_dma_tx_cleanup(dev, dev->q_mcu[i], true);
-
-	mt76_for_each_q_rx(dev, i) {
-		netif_napi_del(&dev->napi[i]);
-		mt76_dma_rx_cleanup(dev, &dev->q_rx[i]);
-	}
-
-	mt76_free_pending_txwi(dev);
-}
-EXPORT_SYMBOL_GPL(mt76_dma_cleanup);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/dma.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/dma.h
deleted file mode 100644
index fdf786f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/dma.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-#ifndef __MT76_DMA_H
-#define __MT76_DMA_H
-
-#define DMA_DUMMY_DATA			((void *)~0)
-
-#define MT_RING_SIZE			0x10
-
-#define MT_DMA_CTL_SD_LEN1		GENMASK(13, 0)
-#define MT_DMA_CTL_LAST_SEC1		BIT(14)
-#define MT_DMA_CTL_BURST		BIT(15)
-#define MT_DMA_CTL_SD_LEN0		GENMASK(29, 16)
-#define MT_DMA_CTL_LAST_SEC0		BIT(30)
-#define MT_DMA_CTL_DMA_DONE		BIT(31)
-
-#define MT_DMA_HDR_LEN			4
-#define MT_RX_INFO_LEN			4
-#define MT_FCE_INFO_LEN			4
-#define MT_RX_RXWI_LEN			32
-
-struct mt76_desc {
-	__le32 buf0;
-	__le32 ctrl;
-	__le32 buf1;
-	__le32 info;
-} __packed __aligned(4);
-
-enum mt76_qsel {
-	MT_QSEL_MGMT,
-	MT_QSEL_HCCA,
-	MT_QSEL_EDCA,
-	MT_QSEL_EDCA_2,
-};
-
-enum mt76_mcu_evt_type {
-	EVT_CMD_DONE,
-	EVT_CMD_ERROR,
-	EVT_CMD_RETRY,
-	EVT_EVENT_PWR_RSP,
-	EVT_EVENT_WOW_RSP,
-	EVT_EVENT_CARRIER_DETECT_RSP,
-	EVT_EVENT_DFS_DETECT_RSP,
-};
-
-int mt76_dma_rx_poll(struct napi_struct *napi, int budget);
-void mt76_dma_attach(struct mt76_dev *dev);
-void mt76_dma_cleanup(struct mt76_dev *dev);
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/eeprom.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/eeprom.c
deleted file mode 100644
index 25f6776..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/eeprom.c
+++ /dev/null
@@ -1,359 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-#include <linux/of.h>
-#include <linux/of_net.h>
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/partitions.h>
-#include <linux/etherdevice.h>
-#include "mt76.h"
-
-int mt76_get_of_eeprom(struct mt76_dev *dev, void *eep, int offset, int len)
-{
-#if defined(CONFIG_OF) && defined(CONFIG_MTD)
-	struct device_node *np = dev->dev->of_node;
-	struct mtd_info *mtd;
-	const __be32 *list;
-	const void *data;
-	const char *part;
-	phandle phandle;
-	int size;
-	size_t retlen;
-	int ret;
-
-	if (!np)
-		return -ENOENT;
-
-	data = of_get_property(np, "mediatek,eeprom-data", &size);
-	if (data) {
-		if (size > len)
-			return -EINVAL;
-
-		memcpy(eep, data, size);
-
-		return 0;
-	}
-
-	list = of_get_property(np, "mediatek,mtd-eeprom", &size);
-	if (!list)
-		return -ENOENT;
-
-	phandle = be32_to_cpup(list++);
-	if (!phandle)
-		return -ENOENT;
-
-	np = of_find_node_by_phandle(phandle);
-	if (!np)
-		return -EINVAL;
-
-	part = of_get_property(np, "label", NULL);
-	if (!part)
-		part = np->name;
-
-	mtd = get_mtd_device_nm(part);
-	if (IS_ERR(mtd)) {
-		ret =  PTR_ERR(mtd);
-		goto out_put_node;
-	}
-
-	if (size <= sizeof(*list)) {
-		ret = -EINVAL;
-		goto out_put_node;
-	}
-
-	offset += be32_to_cpup(list);
-	ret = mtd_read(mtd, offset, len, &retlen, eep);
-	put_mtd_device(mtd);
-	if (mtd_is_bitflip(ret))
-		ret = 0;
-	if (ret) {
-		dev_err(dev->dev, "reading EEPROM from mtd %s failed: %i\n",
-			part, ret);
-		goto out_put_node;
-	}
-
-	if (retlen < len) {
-		ret = -EINVAL;
-		goto out_put_node;
-	}
-
-	if (of_property_read_bool(dev->dev->of_node, "big-endian")) {
-		u8 *data = (u8 *)eep;
-		int i;
-
-		/* convert eeprom data in Little Endian */
-		for (i = 0; i < round_down(len, 2); i += 2)
-			put_unaligned_le16(get_unaligned_be16(&data[i]),
-					   &data[i]);
-	}
-
-#ifdef CONFIG_NL80211_TESTMODE
-	dev->test_mtd.name = devm_kstrdup(dev->dev, part, GFP_KERNEL);
-	dev->test_mtd.offset = offset;
-#endif
-
-out_put_node:
-	of_node_put(np);
-	return ret;
-#else
-	return -ENOENT;
-#endif
-}
-EXPORT_SYMBOL_GPL(mt76_get_of_eeprom);
-
-void
-mt76_eeprom_override(struct mt76_phy *phy)
-{
-	struct mt76_dev *dev = phy->dev;
-
-	struct device_node *np = dev->dev->of_node;
-
-	of_get_mac_address(np, phy->macaddr);
-
-	if (!is_valid_ether_addr(phy->macaddr)) {
-		eth_random_addr(phy->macaddr);
-		dev_info(dev->dev,
-			 "Invalid MAC address, using random address %pM\n",
-			 phy->macaddr);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_eeprom_override);
-
-static bool mt76_string_prop_find(struct property *prop, const char *str)
-{
-	const char *cp = NULL;
-
-	if (!prop || !str || !str[0])
-		return false;
-
-	while ((cp = of_prop_next_string(prop, cp)) != NULL)
-		if (!strcasecmp(cp, str))
-			return true;
-
-	return false;
-}
-
-static struct device_node *
-mt76_find_power_limits_node(struct mt76_dev *dev)
-{
-	struct device_node *np = dev->dev->of_node;
-	const char *const region_names[] = {
-		[NL80211_DFS_ETSI] = "etsi",
-		[NL80211_DFS_FCC] = "fcc",
-		[NL80211_DFS_JP] = "jp",
-	};
-	struct device_node *cur, *fallback = NULL;
-	const char *region_name = NULL;
-
-	if (dev->region < ARRAY_SIZE(region_names))
-		region_name = region_names[dev->region];
-
-	np = of_get_child_by_name(np, "power-limits");
-	if (!np)
-		return NULL;
-
-	for_each_child_of_node(np, cur) {
-		struct property *country = of_find_property(cur, "country", NULL);
-		struct property *regd = of_find_property(cur, "regdomain", NULL);
-
-		if (!country && !regd) {
-			fallback = cur;
-			continue;
-		}
-
-		if (mt76_string_prop_find(country, dev->alpha2) ||
-		    mt76_string_prop_find(regd, region_name)) {
-			of_node_put(np);
-			return cur;
-		}
-	}
-
-	of_node_put(np);
-	return fallback;
-}
-
-static const __be32 *
-mt76_get_of_array(struct device_node *np, char *name, size_t *len, int min)
-{
-	struct property *prop = of_find_property(np, name, NULL);
-
-	if (!prop || !prop->value || prop->length < min * 4)
-		return NULL;
-
-	*len = prop->length;
-
-	return prop->value;
-}
-
-static struct device_node *
-mt76_find_channel_node(struct device_node *np, struct ieee80211_channel *chan)
-{
-	struct device_node *cur;
-	const __be32 *val;
-	size_t len;
-
-	for_each_child_of_node(np, cur) {
-		val = mt76_get_of_array(cur, "channels", &len, 2);
-		if (!val)
-			continue;
-
-		while (len >= 2 * sizeof(*val)) {
-			if (chan->hw_value >= be32_to_cpu(val[0]) &&
-			    chan->hw_value <= be32_to_cpu(val[1]))
-				return cur;
-
-			val += 2;
-			len -= 2 * sizeof(*val);
-		}
-	}
-
-	return NULL;
-}
-
-static s8
-mt76_get_txs_delta(struct device_node *np, u8 nss)
-{
-	const __be32 *val;
-	size_t len;
-
-	val = mt76_get_of_array(np, "txs-delta", &len, nss);
-	if (!val)
-		return 0;
-
-	return be32_to_cpu(val[nss - 1]);
-}
-
-static void
-mt76_apply_array_limit(s8 *pwr, size_t pwr_len, const __be32 *data,
-		       s8 target_power, s8 nss_delta, s8 *max_power)
-{
-	int i;
-
-	if (!data)
-		return;
-
-	for (i = 0; i < pwr_len; i++) {
-		pwr[i] = min_t(s8, target_power,
-			       be32_to_cpu(data[i]) + nss_delta);
-		*max_power = max(*max_power, pwr[i]);
-	}
-}
-
-static void
-mt76_apply_multi_array_limit(s8 *pwr, size_t pwr_len, s8 pwr_num,
-			     const __be32 *data, size_t len, s8 target_power,
-			     s8 nss_delta, s8 *max_power)
-{
-	int i, cur;
-
-	if (!data)
-		return;
-
-	len /= 4;
-	cur = be32_to_cpu(data[0]);
-	for (i = 0; i < pwr_num; i++) {
-		if (len < pwr_len + 1)
-			break;
-
-		mt76_apply_array_limit(pwr + pwr_len * i, pwr_len, data + 1,
-				       target_power, nss_delta, max_power);
-		if (--cur > 0)
-			continue;
-
-		data += pwr_len + 1;
-		len -= pwr_len + 1;
-		if (!len)
-			break;
-
-		cur = be32_to_cpu(data[0]);
-	}
-}
-
-s8 mt76_get_rate_power_limits(struct mt76_phy *phy,
-			      struct ieee80211_channel *chan,
-			      struct mt76_power_limits *dest,
-			      s8 target_power)
-{
-	struct mt76_dev *dev = phy->dev;
-	struct device_node *np;
-	const __be32 *val;
-	char name[16];
-	u32 mcs_rates = dev->drv->mcs_rates;
-	u32 ru_rates = ARRAY_SIZE(dest->ru[0]);
-	char band;
-	size_t len;
-	s8 max_power = 0;
-	s8 txs_delta;
-
-	if (!mcs_rates)
-		mcs_rates = 10;
-
-	memset(dest, target_power, sizeof(*dest));
-
-	if (!IS_ENABLED(CONFIG_OF))
-		return target_power;
-
-	np = mt76_find_power_limits_node(dev);
-	if (!np)
-		return target_power;
-
-	switch (chan->band) {
-	case NL80211_BAND_2GHZ:
-		band = '2';
-		break;
-	case NL80211_BAND_5GHZ:
-		band = '5';
-		break;
-	case NL80211_BAND_6GHZ:
-		band = '6';
-		break;
-	default:
-		return target_power;
-	}
-
-	snprintf(name, sizeof(name), "txpower-%cg", band);
-	np = of_get_child_by_name(np, name);
-	if (!np)
-		return target_power;
-
-	np = mt76_find_channel_node(np, chan);
-	if (!np)
-		return target_power;
-
-	txs_delta = mt76_get_txs_delta(np, hweight8(phy->antenna_mask));
-
-	val = mt76_get_of_array(np, "rates-cck", &len, ARRAY_SIZE(dest->cck));
-	mt76_apply_array_limit(dest->cck, ARRAY_SIZE(dest->cck), val,
-			       target_power, txs_delta, &max_power);
-
-	val = mt76_get_of_array(np, "rates-ofdm",
-				&len, ARRAY_SIZE(dest->ofdm));
-	mt76_apply_array_limit(dest->ofdm, ARRAY_SIZE(dest->ofdm), val,
-			       target_power, txs_delta, &max_power);
-
-	val = mt76_get_of_array(np, "rates-mcs", &len, mcs_rates + 1);
-	mt76_apply_multi_array_limit(dest->mcs[0], ARRAY_SIZE(dest->mcs[0]),
-				     ARRAY_SIZE(dest->mcs), val, len,
-				     target_power, txs_delta, &max_power);
-
-	val = mt76_get_of_array(np, "rates-ru", &len, ru_rates + 1);
-	mt76_apply_multi_array_limit(dest->ru[0], ARRAY_SIZE(dest->ru[0]),
-				     ARRAY_SIZE(dest->ru), val, len,
-				     target_power, txs_delta, &max_power);
-
-	return max_power;
-}
-EXPORT_SYMBOL_GPL(mt76_get_rate_power_limits);
-
-int
-mt76_eeprom_init(struct mt76_dev *dev, int len)
-{
-	dev->eeprom.size = len;
-	dev->eeprom.data = devm_kzalloc(dev->dev, len, GFP_KERNEL);
-	if (!dev->eeprom.data)
-		return -ENOMEM;
-
-	return !mt76_get_of_eeprom(dev, dev->eeprom.data, 0, len);
-}
-EXPORT_SYMBOL_GPL(mt76_eeprom_init);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/LICENSE b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/LICENSE
deleted file mode 100644
index be614c0..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/LICENSE
+++ /dev/null
@@ -1,39 +0,0 @@
-Copyright (c) 2014, Ralink, A MediaTek Company 
-All rights reserved.
-
-Redistribution.  Redistribution and use in binary form, without 
-modification, are permitted provided that the following conditions are 
-met:
-
-* Redistributions must reproduce the above copyright notice and the 
-  following disclaimer in the documentation and/or other materials 
-  provided with the distribution. 
-* Neither the name of Ralink Technology Corporation nor the names of its
-  suppliers may be used to endorse or promote products derived from this
-  software without specific prior written permission. 
-* No reverse engineering, decompilation, or disassembly of this software 
-  is permitted.
-
-Limited patent license. Ralink Technology Corporation grants a world-wide, 
-royalty-free, non-exclusive license under patents it now or hereafter 
-owns or controls to make, have made, use, import, offer to sell and 
-sell ("Utilize") this software, but solely to the extent that any 
-such patent is necessary to Utilize the software alone, or in 
-combination with an operating system licensed under an approved Open 
-Source license as listed by the Open Source Initiative at 
-http://opensource.org/licenses.  The patent license shall not apply to 
-any other combinations which include this software.  No hardware per 
-se is licensed hereunder.
-
-DISCLAIMER.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
-OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
-USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
-DAMAGE.
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_MT7922_patch_mcu_1_1_hdr.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_MT7922_patch_mcu_1_1_hdr.bin
deleted file mode 100644
index a95eb35..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_MT7922_patch_mcu_1_1_hdr.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_MT7961_patch_mcu_1_2_hdr.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_MT7961_patch_mcu_1_2_hdr.bin
deleted file mode 100644
index bfbcca6..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_MT7961_patch_mcu_1_2_hdr.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_RAM_CODE_MT7922_1.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_RAM_CODE_MT7922_1.bin
deleted file mode 100644
index 262aadf..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_RAM_CODE_MT7922_1.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_RAM_CODE_MT7961_1.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_RAM_CODE_MT7961_1.bin
deleted file mode 100644
index fe4a0f3..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/WIFI_RAM_CODE_MT7961_1.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7603_e1.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7603_e1.bin
deleted file mode 100644
index 829bdc5..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7603_e1.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7603_e2.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7603_e2.bin
deleted file mode 100644
index 2bc6ac4..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7603_e2.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7610e.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7610e.bin
deleted file mode 100644
index 7660084..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7610e.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7615_cr4.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7615_cr4.bin
deleted file mode 100644
index b6e1b8c..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7615_cr4.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7615_n9.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7615_n9.bin
deleted file mode 100644
index 2490ace..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7615_n9.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7615_rom_patch.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7615_rom_patch.bin
deleted file mode 100644
index 4aeaa75..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7615_rom_patch.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7622_n9.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7622_n9.bin
deleted file mode 100644
index 444d5e0..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7622_n9.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7622_rom_patch.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7622_rom_patch.bin
deleted file mode 100644
index 7d0e643..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7622_rom_patch.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7628_e1.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7628_e1.bin
deleted file mode 100644
index 72aed6f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7628_e1.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7628_e2.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7628_e2.bin
deleted file mode 100644
index 7652e4a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7628_e2.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662.bin
deleted file mode 100644
index b0cc8ae..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_firmware_e3_v1.7.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_firmware_e3_v1.7.bin
deleted file mode 100644
index 101fc83..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_firmware_e3_v1.7.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_firmware_e3_v1.9.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_firmware_e3_v1.9.bin
deleted file mode 100644
index 26c6fbb..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_firmware_e3_v1.9.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_firmware_e3_v2.3.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_firmware_e3_v2.3.bin
deleted file mode 100644
index b0cc8ae..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_firmware_e3_v2.3.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_patch_e3_hdr_v0.0.2_P69.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_patch_e3_hdr_v0.0.2_P69.bin
deleted file mode 100644
index 10b245e..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_patch_e3_hdr_v0.0.2_P69.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_rom_patch.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_rom_patch.bin
deleted file mode 100644
index 10b245e..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7662_rom_patch.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663_n9_rebb.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663_n9_rebb.bin
deleted file mode 100644
index fe5733f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663_n9_rebb.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663_n9_v3.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663_n9_v3.bin
deleted file mode 100644
index 5ff186a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663_n9_v3.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663pr2h.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663pr2h.bin
deleted file mode 100644
index 3456479..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663pr2h.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663pr2h_rebb.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663pr2h_rebb.bin
deleted file mode 100644
index 8a23b61..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7663pr2h_rebb.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_eeprom.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_eeprom.bin
deleted file mode 100644
index 465b051..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_eeprom.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_eeprom_7977.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_eeprom_7977.bin
deleted file mode 100644
index 059637f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_eeprom_7977.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_rom_patch.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_rom_patch.bin
deleted file mode 100644
index b3d73c9..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_rom_patch.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wa.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wa.bin
deleted file mode 100644
index f69659b..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wa.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom.bin
deleted file mode 100644
index 128fe4e..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_7977.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_7977.bin
deleted file mode 100644
index ae94386..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_7977.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_sram.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_sram.bin
deleted file mode 100644
index d619b6a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_sram.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_sram_7977.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_sram_7977.bin
deleted file mode 100644
index da59af1..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_sram_7977.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wm.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wm.bin
deleted file mode 100644
index 83d4f78..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wm.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wm_7977.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wm_7977.bin
deleted file mode 100644
index f74f076..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7902_wm_7977.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_eeprom.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_eeprom.bin
deleted file mode 100644
index 007df1b..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_eeprom.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_eeprom_dbdc.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_eeprom_dbdc.bin
deleted file mode 100644
index 6c0b64e..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_eeprom_dbdc.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_rom_patch.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_rom_patch.bin
deleted file mode 100644
index 1c69d39..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_rom_patch.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_wa.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_wa.bin
deleted file mode 100644
index 434e757..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_wa.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_wm.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_wm.bin
deleted file mode 100644
index fef6005..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7915_wm.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_eeprom.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_eeprom.bin
deleted file mode 100644
index 35b287c..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_eeprom.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_rom_patch.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_rom_patch.bin
deleted file mode 100644
index 07fe11a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_rom_patch.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_wa.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_wa.bin
deleted file mode 100644
index 27caa00..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_wa.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_wm.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_wm.bin
deleted file mode 100644
index 7df01ea..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7916_wm.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7975.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7975.bin
deleted file mode 100644
index 84b6aa7..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7975.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7975_dual.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7975_dual.bin
deleted file mode 100644
index dfe5376..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7975_dual.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7976.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7976.bin
deleted file mode 100644
index c821f2d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7976.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7976_dbdc.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7976_dbdc.bin
deleted file mode 100644
index 54858b0..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7976_dbdc.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7976_dual.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7976_dual.bin
deleted file mode 100644
index dc0d3e4..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_eeprom_mt7976_dual.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_rom_patch.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_rom_patch.bin
deleted file mode 100644
index c0185c8..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_rom_patch.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_rom_patch_mt7975.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_rom_patch_mt7975.bin
deleted file mode 100644
index 936cfe8..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_rom_patch_mt7975.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wa.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wa.bin
deleted file mode 100644
index f7914a9..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wa.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wm.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wm.bin
deleted file mode 100644
index 11f363f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wm.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wm_mt7975.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wm_mt7975.bin
deleted file mode 100644
index 972926c..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wm_mt7975.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wo_0.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wo_0.bin
deleted file mode 100644
index a2dfb96..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wo_0.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wo_1.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wo_1.bin
deleted file mode 100644
index f7bbf39..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7986_wo_1.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_eeprom.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_eeprom.bin
deleted file mode 100644
index 19d8126..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_eeprom.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_rom_patch.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_rom_patch.bin
deleted file mode 100644
index 6dfe002..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_rom_patch.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_wa.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_wa.bin
deleted file mode 100644
index ac65ef5..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_wa.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_wm.bin b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_wm.bin
deleted file mode 100644
index c4a1e81..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/firmware/mt7996_wm.bin
+++ /dev/null
Binary files differ
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mac80211.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mac80211.c
deleted file mode 100644
index 6d78cae..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mac80211.c
+++ /dev/null
@@ -1,1687 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-#include <linux/sched.h>
-#include <linux/of.h>
-#include "mt76.h"
-
-#define CHAN2G(_idx, _freq) {			\
-	.band = NL80211_BAND_2GHZ,		\
-	.center_freq = (_freq),			\
-	.hw_value = (_idx),			\
-	.max_power = 30,			\
-}
-
-#define CHAN5G(_idx, _freq) {			\
-	.band = NL80211_BAND_5GHZ,		\
-	.center_freq = (_freq),			\
-	.hw_value = (_idx),			\
-	.max_power = 30,			\
-}
-
-#define CHAN6G(_idx, _freq) {			\
-	.band = NL80211_BAND_6GHZ,		\
-	.center_freq = (_freq),			\
-	.hw_value = (_idx),			\
-	.max_power = 30,			\
-}
-
-static const struct ieee80211_channel mt76_channels_2ghz[] = {
-	CHAN2G(1, 2412),
-	CHAN2G(2, 2417),
-	CHAN2G(3, 2422),
-	CHAN2G(4, 2427),
-	CHAN2G(5, 2432),
-	CHAN2G(6, 2437),
-	CHAN2G(7, 2442),
-	CHAN2G(8, 2447),
-	CHAN2G(9, 2452),
-	CHAN2G(10, 2457),
-	CHAN2G(11, 2462),
-	CHAN2G(12, 2467),
-	CHAN2G(13, 2472),
-	CHAN2G(14, 2484),
-};
-
-static const struct ieee80211_channel mt76_channels_5ghz[] = {
-	CHAN5G(36, 5180),
-	CHAN5G(40, 5200),
-	CHAN5G(44, 5220),
-	CHAN5G(48, 5240),
-
-	CHAN5G(52, 5260),
-	CHAN5G(56, 5280),
-	CHAN5G(60, 5300),
-	CHAN5G(64, 5320),
-
-	CHAN5G(100, 5500),
-	CHAN5G(104, 5520),
-	CHAN5G(108, 5540),
-	CHAN5G(112, 5560),
-	CHAN5G(116, 5580),
-	CHAN5G(120, 5600),
-	CHAN5G(124, 5620),
-	CHAN5G(128, 5640),
-	CHAN5G(132, 5660),
-	CHAN5G(136, 5680),
-	CHAN5G(140, 5700),
-	CHAN5G(144, 5720),
-
-	CHAN5G(149, 5745),
-	CHAN5G(153, 5765),
-	CHAN5G(157, 5785),
-	CHAN5G(161, 5805),
-	CHAN5G(165, 5825),
-	CHAN5G(169, 5845),
-	CHAN5G(173, 5865),
-};
-
-static const struct ieee80211_channel mt76_channels_6ghz[] = {
-	/* UNII-5 */
-	CHAN6G(1, 5955),
-	CHAN6G(5, 5975),
-	CHAN6G(9, 5995),
-	CHAN6G(13, 6015),
-	CHAN6G(17, 6035),
-	CHAN6G(21, 6055),
-	CHAN6G(25, 6075),
-	CHAN6G(29, 6095),
-	CHAN6G(33, 6115),
-	CHAN6G(37, 6135),
-	CHAN6G(41, 6155),
-	CHAN6G(45, 6175),
-	CHAN6G(49, 6195),
-	CHAN6G(53, 6215),
-	CHAN6G(57, 6235),
-	CHAN6G(61, 6255),
-	CHAN6G(65, 6275),
-	CHAN6G(69, 6295),
-	CHAN6G(73, 6315),
-	CHAN6G(77, 6335),
-	CHAN6G(81, 6355),
-	CHAN6G(85, 6375),
-	CHAN6G(89, 6395),
-	CHAN6G(93, 6415),
-	/* UNII-6 */
-	CHAN6G(97, 6435),
-	CHAN6G(101, 6455),
-	CHAN6G(105, 6475),
-	CHAN6G(109, 6495),
-	CHAN6G(113, 6515),
-	CHAN6G(117, 6535),
-	/* UNII-7 */
-	CHAN6G(121, 6555),
-	CHAN6G(125, 6575),
-	CHAN6G(129, 6595),
-	CHAN6G(133, 6615),
-	CHAN6G(137, 6635),
-	CHAN6G(141, 6655),
-	CHAN6G(145, 6675),
-	CHAN6G(149, 6695),
-	CHAN6G(153, 6715),
-	CHAN6G(157, 6735),
-	CHAN6G(161, 6755),
-	CHAN6G(165, 6775),
-	CHAN6G(169, 6795),
-	CHAN6G(173, 6815),
-	CHAN6G(177, 6835),
-	CHAN6G(181, 6855),
-	CHAN6G(185, 6875),
-	/* UNII-8 */
-	CHAN6G(189, 6895),
-	CHAN6G(193, 6915),
-	CHAN6G(197, 6935),
-	CHAN6G(201, 6955),
-	CHAN6G(205, 6975),
-	CHAN6G(209, 6995),
-	CHAN6G(213, 7015),
-	CHAN6G(217, 7035),
-	CHAN6G(221, 7055),
-	CHAN6G(225, 7075),
-	CHAN6G(229, 7095),
-	CHAN6G(233, 7115),
-};
-
-static const struct ieee80211_tpt_blink mt76_tpt_blink[] = {
-	{ .throughput =   0 * 1024, .blink_time = 334 },
-	{ .throughput =   1 * 1024, .blink_time = 260 },
-	{ .throughput =   5 * 1024, .blink_time = 220 },
-	{ .throughput =  10 * 1024, .blink_time = 190 },
-	{ .throughput =  20 * 1024, .blink_time = 170 },
-	{ .throughput =  50 * 1024, .blink_time = 150 },
-	{ .throughput =  70 * 1024, .blink_time = 130 },
-	{ .throughput = 100 * 1024, .blink_time = 110 },
-	{ .throughput = 200 * 1024, .blink_time =  80 },
-	{ .throughput = 300 * 1024, .blink_time =  50 },
-};
-
-struct ieee80211_rate mt76_rates[] = {
-	CCK_RATE(0, 10),
-	CCK_RATE(1, 20),
-	CCK_RATE(2, 55),
-	CCK_RATE(3, 110),
-	OFDM_RATE(11, 60),
-	OFDM_RATE(15, 90),
-	OFDM_RATE(10, 120),
-	OFDM_RATE(14, 180),
-	OFDM_RATE(9,  240),
-	OFDM_RATE(13, 360),
-	OFDM_RATE(8,  480),
-	OFDM_RATE(12, 540),
-};
-EXPORT_SYMBOL_GPL(mt76_rates);
-
-static const struct cfg80211_sar_freq_ranges mt76_sar_freq_ranges[] = {
-	{ .start_freq = 2402, .end_freq = 2494, },
-	{ .start_freq = 5150, .end_freq = 5350, },
-	{ .start_freq = 5350, .end_freq = 5470, },
-	{ .start_freq = 5470, .end_freq = 5725, },
-	{ .start_freq = 5725, .end_freq = 5950, },
-	{ .start_freq = 5945, .end_freq = 6165, },
-	{ .start_freq = 6165, .end_freq = 6405, },
-	{ .start_freq = 6405, .end_freq = 6525, },
-	{ .start_freq = 6525, .end_freq = 6705, },
-	{ .start_freq = 6705, .end_freq = 6865, },
-	{ .start_freq = 6865, .end_freq = 7125, },
-};
-
-static const struct cfg80211_sar_capa mt76_sar_capa = {
-	.type = NL80211_SAR_TYPE_POWER,
-	.num_freq_ranges = ARRAY_SIZE(mt76_sar_freq_ranges),
-	.freq_ranges = &mt76_sar_freq_ranges[0],
-};
-
-static int mt76_led_init(struct mt76_dev *dev)
-{
-	struct device_node *np = dev->dev->of_node;
-	struct ieee80211_hw *hw = dev->hw;
-	int led_pin;
-
-	if (!dev->led_cdev.brightness_set && !dev->led_cdev.blink_set)
-		return 0;
-
-	snprintf(dev->led_name, sizeof(dev->led_name),
-		 "mt76-%s", wiphy_name(hw->wiphy));
-
-	dev->led_cdev.name = dev->led_name;
-	dev->led_cdev.default_trigger =
-		ieee80211_create_tpt_led_trigger(hw,
-					IEEE80211_TPT_LEDTRIG_FL_RADIO,
-					mt76_tpt_blink,
-					ARRAY_SIZE(mt76_tpt_blink));
-
-	np = of_get_child_by_name(np, "led");
-	if (np) {
-		if (!of_property_read_u32(np, "led-sources", &led_pin))
-			dev->led_pin = led_pin;
-		dev->led_al = of_property_read_bool(np, "led-active-low");
-		of_node_put(np);
-	}
-
-	return led_classdev_register(dev->dev, &dev->led_cdev);
-}
-
-static void mt76_led_cleanup(struct mt76_dev *dev)
-{
-	if (!dev->led_cdev.brightness_set && !dev->led_cdev.blink_set)
-		return;
-
-	led_classdev_unregister(&dev->led_cdev);
-}
-
-static void mt76_init_stream_cap(struct mt76_phy *phy,
-				 struct ieee80211_supported_band *sband,
-				 bool vht)
-{
-	struct ieee80211_sta_ht_cap *ht_cap = &sband->ht_cap;
-	int i, nstream = hweight8(phy->antenna_mask);
-	struct ieee80211_sta_vht_cap *vht_cap;
-	u16 mcs_map = 0;
-
-	if (nstream > 1)
-		ht_cap->cap |= IEEE80211_HT_CAP_TX_STBC;
-	else
-		ht_cap->cap &= ~IEEE80211_HT_CAP_TX_STBC;
-
-	for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
-		ht_cap->mcs.rx_mask[i] = i < nstream ? 0xff : 0;
-
-	if (!vht)
-		return;
-
-	vht_cap = &sband->vht_cap;
-	if (nstream > 1)
-		vht_cap->cap |= IEEE80211_VHT_CAP_TXSTBC;
-	else
-		vht_cap->cap &= ~IEEE80211_VHT_CAP_TXSTBC;
-	vht_cap->cap |= IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN |
-			IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN;
-
-	for (i = 0; i < 8; i++) {
-		if (i < nstream)
-			mcs_map |= (IEEE80211_VHT_MCS_SUPPORT_0_9 << (i * 2));
-		else
-			mcs_map |=
-				(IEEE80211_VHT_MCS_NOT_SUPPORTED << (i * 2));
-	}
-	vht_cap->vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map);
-	vht_cap->vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map);
-	if (ieee80211_hw_check(phy->hw, SUPPORTS_VHT_EXT_NSS_BW))
-		vht_cap->vht_mcs.tx_highest |=
-				cpu_to_le16(IEEE80211_VHT_EXT_NSS_BW_CAPABLE);
-}
-
-void mt76_set_stream_caps(struct mt76_phy *phy, bool vht)
-{
-	if (phy->cap.has_2ghz)
-		mt76_init_stream_cap(phy, &phy->sband_2g.sband, false);
-	if (phy->cap.has_5ghz)
-		mt76_init_stream_cap(phy, &phy->sband_5g.sband, vht);
-	if (phy->cap.has_6ghz)
-		mt76_init_stream_cap(phy, &phy->sband_6g.sband, vht);
-}
-EXPORT_SYMBOL_GPL(mt76_set_stream_caps);
-
-static int
-mt76_init_sband(struct mt76_phy *phy, struct mt76_sband *msband,
-		const struct ieee80211_channel *chan, int n_chan,
-		struct ieee80211_rate *rates, int n_rates,
-		bool ht, bool vht)
-{
-	struct ieee80211_supported_band *sband = &msband->sband;
-	struct ieee80211_sta_vht_cap *vht_cap;
-	struct ieee80211_sta_ht_cap *ht_cap;
-	struct mt76_dev *dev = phy->dev;
-	void *chanlist;
-	int size;
-
-	size = n_chan * sizeof(*chan);
-	chanlist = devm_kmemdup(dev->dev, chan, size, GFP_KERNEL);
-	if (!chanlist)
-		return -ENOMEM;
-
-	msband->chan = devm_kcalloc(dev->dev, n_chan, sizeof(*msband->chan),
-				    GFP_KERNEL);
-	if (!msband->chan)
-		return -ENOMEM;
-
-	sband->channels = chanlist;
-	sband->n_channels = n_chan;
-	sband->bitrates = rates;
-	sband->n_bitrates = n_rates;
-
-	if (!ht)
-		return 0;
-
-	ht_cap = &sband->ht_cap;
-	ht_cap->ht_supported = true;
-	ht_cap->cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
-		       IEEE80211_HT_CAP_GRN_FLD |
-		       IEEE80211_HT_CAP_SGI_20 |
-		       IEEE80211_HT_CAP_SGI_40 |
-		       (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
-
-	ht_cap->mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
-	ht_cap->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
-
-	mt76_init_stream_cap(phy, sband, vht);
-
-	if (!vht)
-		return 0;
-
-	vht_cap = &sband->vht_cap;
-	vht_cap->vht_supported = true;
-	vht_cap->cap |= IEEE80211_VHT_CAP_RXLDPC |
-			IEEE80211_VHT_CAP_RXSTBC_1 |
-			IEEE80211_VHT_CAP_SHORT_GI_80 |
-			(3 << IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT);
-
-	return 0;
-}
-
-static int
-mt76_init_sband_2g(struct mt76_phy *phy, struct ieee80211_rate *rates,
-		   int n_rates)
-{
-	phy->hw->wiphy->bands[NL80211_BAND_2GHZ] = &phy->sband_2g.sband;
-
-	return mt76_init_sband(phy, &phy->sband_2g, mt76_channels_2ghz,
-			       ARRAY_SIZE(mt76_channels_2ghz), rates,
-			       n_rates, true, false);
-}
-
-static int
-mt76_init_sband_5g(struct mt76_phy *phy, struct ieee80211_rate *rates,
-		   int n_rates, bool vht)
-{
-	phy->hw->wiphy->bands[NL80211_BAND_5GHZ] = &phy->sband_5g.sband;
-
-	return mt76_init_sband(phy, &phy->sband_5g, mt76_channels_5ghz,
-			       ARRAY_SIZE(mt76_channels_5ghz), rates,
-			       n_rates, true, vht);
-}
-
-static int
-mt76_init_sband_6g(struct mt76_phy *phy, struct ieee80211_rate *rates,
-		   int n_rates)
-{
-	phy->hw->wiphy->bands[NL80211_BAND_6GHZ] = &phy->sband_6g.sband;
-
-	return mt76_init_sband(phy, &phy->sband_6g, mt76_channels_6ghz,
-			       ARRAY_SIZE(mt76_channels_6ghz), rates,
-			       n_rates, false, false);
-}
-
-static void
-mt76_check_sband(struct mt76_phy *phy, struct mt76_sband *msband,
-		 enum nl80211_band band)
-{
-	struct ieee80211_supported_band *sband = &msband->sband;
-	bool found = false;
-	int i;
-
-	if (!sband)
-		return;
-
-	for (i = 0; i < sband->n_channels; i++) {
-		if (sband->channels[i].flags & IEEE80211_CHAN_DISABLED)
-			continue;
-
-		found = true;
-		break;
-	}
-
-	if (found) {
-		phy->chandef.chan = &sband->channels[0];
-		phy->chan_state = &msband->chan[0];
-		return;
-	}
-
-	sband->n_channels = 0;
-	phy->hw->wiphy->bands[band] = NULL;
-}
-
-static int
-mt76_phy_init(struct mt76_phy *phy, struct ieee80211_hw *hw)
-{
-	struct mt76_dev *dev = phy->dev;
-	struct wiphy *wiphy = hw->wiphy;
-
-	SET_IEEE80211_DEV(hw, dev->dev);
-	SET_IEEE80211_PERM_ADDR(hw, phy->macaddr);
-
-	wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
-	wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH |
-			WIPHY_FLAG_SUPPORTS_TDLS |
-			WIPHY_FLAG_AP_UAPSD;
-
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_AIRTIME_FAIRNESS);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_AQL);
-
-	wiphy->available_antennas_tx = phy->antenna_mask;
-	wiphy->available_antennas_rx = phy->antenna_mask;
-
-	wiphy->sar_capa = &mt76_sar_capa;
-	phy->frp = devm_kcalloc(dev->dev, wiphy->sar_capa->num_freq_ranges,
-				sizeof(struct mt76_freq_range_power),
-				GFP_KERNEL);
-	if (!phy->frp)
-		return -ENOMEM;
-
-	hw->txq_data_size = sizeof(struct mt76_txq);
-	hw->uapsd_max_sp_len = IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL;
-
-	if (!hw->max_tx_fragments)
-		hw->max_tx_fragments = 16;
-
-	ieee80211_hw_set(hw, SIGNAL_DBM);
-	ieee80211_hw_set(hw, AMPDU_AGGREGATION);
-	ieee80211_hw_set(hw, SUPPORTS_RC_TABLE);
-	ieee80211_hw_set(hw, SUPPORT_FAST_XMIT);
-	ieee80211_hw_set(hw, SUPPORTS_CLONED_SKBS);
-	ieee80211_hw_set(hw, SUPPORTS_AMSDU_IN_AMPDU);
-	ieee80211_hw_set(hw, SUPPORTS_REORDERING_BUFFER);
-
-	if (!(dev->drv->drv_flags & MT_DRV_AMSDU_OFFLOAD)) {
-		ieee80211_hw_set(hw, TX_AMSDU);
-		ieee80211_hw_set(hw, TX_FRAG_LIST);
-	}
-
-	ieee80211_hw_set(hw, MFP_CAPABLE);
-	ieee80211_hw_set(hw, AP_LINK_PS);
-	ieee80211_hw_set(hw, REPORTS_TX_ACK_STATUS);
-
-	return 0;
-}
-
-struct mt76_phy *
-mt76_alloc_phy(struct mt76_dev *dev, unsigned int size,
-	       const struct ieee80211_ops *ops, u8 band_idx)
-{
-	struct ieee80211_hw *hw;
-	unsigned int phy_size;
-	struct mt76_phy *phy;
-
-	phy_size = ALIGN(sizeof(*phy), 8);
-	hw = ieee80211_alloc_hw(size + phy_size, ops);
-	if (!hw)
-		return NULL;
-
-	phy = hw->priv;
-	phy->dev = dev;
-	phy->hw = hw;
-	phy->priv = hw->priv + phy_size;
-	phy->band_idx = band_idx;
-
-	hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
-	hw->wiphy->interface_modes =
-		BIT(NL80211_IFTYPE_STATION) |
-		BIT(NL80211_IFTYPE_AP) |
-#ifdef CONFIG_MAC80211_MESH
-		BIT(NL80211_IFTYPE_MESH_POINT) |
-#endif
-		BIT(NL80211_IFTYPE_P2P_CLIENT) |
-		BIT(NL80211_IFTYPE_P2P_GO) |
-		BIT(NL80211_IFTYPE_ADHOC);
-
-	return phy;
-}
-EXPORT_SYMBOL_GPL(mt76_alloc_phy);
-
-int mt76_register_phy(struct mt76_phy *phy, bool vht,
-		      struct ieee80211_rate *rates, int n_rates)
-{
-	int ret;
-
-	ret = mt76_phy_init(phy, phy->hw);
-	if (ret)
-		return ret;
-
-	if (phy->cap.has_2ghz) {
-		ret = mt76_init_sband_2g(phy, rates, n_rates);
-		if (ret)
-			return ret;
-	}
-
-	if (phy->cap.has_5ghz) {
-		ret = mt76_init_sband_5g(phy, rates + 4, n_rates - 4, vht);
-		if (ret)
-			return ret;
-	}
-
-	if (phy->cap.has_6ghz) {
-		ret = mt76_init_sband_6g(phy, rates + 4, n_rates - 4);
-		if (ret)
-			return ret;
-	}
-
-	wiphy_read_of_freq_limits(phy->hw->wiphy);
-	mt76_check_sband(phy, &phy->sband_2g, NL80211_BAND_2GHZ);
-	mt76_check_sband(phy, &phy->sband_5g, NL80211_BAND_5GHZ);
-	mt76_check_sband(phy, &phy->sband_6g, NL80211_BAND_6GHZ);
-
-	ret = ieee80211_register_hw(phy->hw);
-	if (ret)
-		return ret;
-
-	phy->dev->phys[phy->band_idx] = phy;
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_register_phy);
-
-void mt76_unregister_phy(struct mt76_phy *phy)
-{
-	struct mt76_dev *dev = phy->dev;
-
-	mt76_tx_status_check(dev, true);
-	ieee80211_unregister_hw(phy->hw);
-	dev->phys[phy->band_idx] = NULL;
-}
-EXPORT_SYMBOL_GPL(mt76_unregister_phy);
-
-struct mt76_dev *
-mt76_alloc_device(struct device *pdev, unsigned int size,
-		  const struct ieee80211_ops *ops,
-		  const struct mt76_driver_ops *drv_ops)
-{
-	struct ieee80211_hw *hw;
-	struct mt76_phy *phy;
-	struct mt76_dev *dev;
-	int i;
-
-	hw = ieee80211_alloc_hw(size, ops);
-	if (!hw)
-		return NULL;
-
-	dev = hw->priv;
-	dev->hw = hw;
-	dev->dev = pdev;
-	dev->drv = drv_ops;
-	dev->dma_dev = pdev;
-
-	phy = &dev->phy;
-	phy->dev = dev;
-	phy->hw = hw;
-	phy->band_idx = MT_BAND0;
-	dev->phys[phy->band_idx] = phy;
-
-	spin_lock_init(&dev->rx_lock);
-	spin_lock_init(&dev->lock);
-	spin_lock_init(&dev->cc_lock);
-	spin_lock_init(&dev->status_lock);
-	mutex_init(&dev->mutex);
-	init_waitqueue_head(&dev->tx_wait);
-
-	skb_queue_head_init(&dev->mcu.res_q);
-	init_waitqueue_head(&dev->mcu.wait);
-	mutex_init(&dev->mcu.mutex);
-	dev->tx_worker.fn = mt76_tx_worker;
-
-	hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
-	hw->wiphy->interface_modes =
-		BIT(NL80211_IFTYPE_STATION) |
-		BIT(NL80211_IFTYPE_AP) |
-#ifdef CONFIG_MAC80211_MESH
-		BIT(NL80211_IFTYPE_MESH_POINT) |
-#endif
-		BIT(NL80211_IFTYPE_P2P_CLIENT) |
-		BIT(NL80211_IFTYPE_P2P_GO) |
-		BIT(NL80211_IFTYPE_ADHOC);
-
-	spin_lock_init(&dev->token_lock);
-	idr_init(&dev->token);
-
-	INIT_LIST_HEAD(&dev->wcid_list);
-
-	INIT_LIST_HEAD(&dev->txwi_cache);
-	dev->token_size = dev->drv->token_size;
-
-	for (i = 0; i < ARRAY_SIZE(dev->q_rx); i++)
-		skb_queue_head_init(&dev->rx_skb[i]);
-
-	dev->wq = alloc_ordered_workqueue("mt76", 0);
-	if (!dev->wq) {
-		ieee80211_free_hw(hw);
-		return NULL;
-	}
-
-	return dev;
-}
-EXPORT_SYMBOL_GPL(mt76_alloc_device);
-
-int mt76_register_device(struct mt76_dev *dev, bool vht,
-			 struct ieee80211_rate *rates, int n_rates)
-{
-	struct ieee80211_hw *hw = dev->hw;
-	struct mt76_phy *phy = &dev->phy;
-	int ret;
-
-	dev_set_drvdata(dev->dev, dev);
-	ret = mt76_phy_init(phy, hw);
-	if (ret)
-		return ret;
-
-	if (phy->cap.has_2ghz) {
-		ret = mt76_init_sband_2g(phy, rates, n_rates);
-		if (ret)
-			return ret;
-	}
-
-	if (phy->cap.has_5ghz) {
-		ret = mt76_init_sband_5g(phy, rates + 4, n_rates - 4, vht);
-		if (ret)
-			return ret;
-	}
-
-	if (phy->cap.has_6ghz) {
-		ret = mt76_init_sband_6g(phy, rates + 4, n_rates - 4);
-		if (ret)
-			return ret;
-	}
-
-	wiphy_read_of_freq_limits(hw->wiphy);
-	mt76_check_sband(&dev->phy, &phy->sband_2g, NL80211_BAND_2GHZ);
-	mt76_check_sband(&dev->phy, &phy->sband_5g, NL80211_BAND_5GHZ);
-	mt76_check_sband(&dev->phy, &phy->sband_6g, NL80211_BAND_6GHZ);
-
-	if (IS_ENABLED(CONFIG_MT76_LEDS)) {
-		ret = mt76_led_init(dev);
-		if (ret)
-			return ret;
-	}
-
-	ret = ieee80211_register_hw(hw);
-	if (ret)
-		return ret;
-
-	WARN_ON(mt76_worker_setup(hw, &dev->tx_worker, NULL, "tx"));
-	sched_set_fifo_low(dev->tx_worker.task);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_register_device);
-
-void mt76_unregister_device(struct mt76_dev *dev)
-{
-	struct ieee80211_hw *hw = dev->hw;
-
-	if (IS_ENABLED(CONFIG_MT76_LEDS))
-		mt76_led_cleanup(dev);
-	mt76_tx_status_check(dev, true);
-	ieee80211_unregister_hw(hw);
-}
-EXPORT_SYMBOL_GPL(mt76_unregister_device);
-
-void mt76_free_device(struct mt76_dev *dev)
-{
-	mt76_worker_teardown(&dev->tx_worker);
-	if (dev->wq) {
-		destroy_workqueue(dev->wq);
-		dev->wq = NULL;
-	}
-	ieee80211_free_hw(dev->hw);
-}
-EXPORT_SYMBOL_GPL(mt76_free_device);
-
-static void mt76_rx_release_amsdu(struct mt76_phy *phy, enum mt76_rxq_id q)
-{
-	struct sk_buff *skb = phy->rx_amsdu[q].head;
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct mt76_dev *dev = phy->dev;
-
-	phy->rx_amsdu[q].head = NULL;
-	phy->rx_amsdu[q].tail = NULL;
-
-	/*
-	 * Validate if the amsdu has a proper first subframe.
-	 * A single MSDU can be parsed as A-MSDU when the unauthenticated A-MSDU
-	 * flag of the QoS header gets flipped. In such cases, the first
-	 * subframe has a LLC/SNAP header in the location of the destination
-	 * address.
-	 */
-	if (skb_shinfo(skb)->frag_list) {
-		int offset = 0;
-
-		if (!(status->flag & RX_FLAG_8023)) {
-			offset = ieee80211_get_hdrlen_from_skb(skb);
-
-			if ((status->flag &
-			     (RX_FLAG_DECRYPTED | RX_FLAG_IV_STRIPPED)) ==
-			    RX_FLAG_DECRYPTED)
-				offset += 8;
-		}
-
-		if (ether_addr_equal(skb->data + offset, rfc1042_header)) {
-			dev_kfree_skb(skb);
-			return;
-		}
-	}
-	__skb_queue_tail(&dev->rx_skb[q], skb);
-}
-
-static void mt76_rx_release_burst(struct mt76_phy *phy, enum mt76_rxq_id q,
-				  struct sk_buff *skb)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-
-	if (phy->rx_amsdu[q].head &&
-	    (!status->amsdu || status->first_amsdu ||
-	     status->seqno != phy->rx_amsdu[q].seqno))
-		mt76_rx_release_amsdu(phy, q);
-
-	if (!phy->rx_amsdu[q].head) {
-		phy->rx_amsdu[q].tail = &skb_shinfo(skb)->frag_list;
-		phy->rx_amsdu[q].seqno = status->seqno;
-		phy->rx_amsdu[q].head = skb;
-	} else {
-		*phy->rx_amsdu[q].tail = skb;
-		phy->rx_amsdu[q].tail = &skb->next;
-	}
-
-	if (!status->amsdu || status->last_amsdu)
-		mt76_rx_release_amsdu(phy, q);
-}
-
-void mt76_rx(struct mt76_dev *dev, enum mt76_rxq_id q, struct sk_buff *skb)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct mt76_phy *phy = mt76_dev_phy(dev, status->phy_idx);
-
-	if (!test_bit(MT76_STATE_RUNNING, &phy->state)) {
-		dev_kfree_skb(skb);
-		return;
-	}
-
-#ifdef CONFIG_NL80211_TESTMODE
-	if (phy->test.state == MT76_TM_STATE_RX_FRAMES) {
-		phy->test.rx_stats.packets[q]++;
-		if (status->flag & RX_FLAG_FAILED_FCS_CRC)
-			phy->test.rx_stats.fcs_error[q]++;
-	}
-#endif
-
-	mt76_rx_release_burst(phy, q, skb);
-}
-EXPORT_SYMBOL_GPL(mt76_rx);
-
-bool mt76_has_tx_pending(struct mt76_phy *phy)
-{
-	struct mt76_queue *q;
-	int i;
-
-	for (i = 0; i < __MT_TXQ_MAX; i++) {
-		q = phy->q_tx[i];
-		if (q && q->queued)
-			return true;
-	}
-
-	return false;
-}
-EXPORT_SYMBOL_GPL(mt76_has_tx_pending);
-
-static struct mt76_channel_state *
-mt76_channel_state(struct mt76_phy *phy, struct ieee80211_channel *c)
-{
-	struct mt76_sband *msband;
-	int idx;
-
-	if (c->band == NL80211_BAND_2GHZ)
-		msband = &phy->sband_2g;
-	else if (c->band == NL80211_BAND_6GHZ)
-		msband = &phy->sband_6g;
-	else
-		msband = &phy->sband_5g;
-
-	idx = c - &msband->sband.channels[0];
-	return &msband->chan[idx];
-}
-
-void mt76_update_survey_active_time(struct mt76_phy *phy, ktime_t time)
-{
-	struct mt76_channel_state *state = phy->chan_state;
-
-	state->cc_active += ktime_to_us(ktime_sub(time,
-						  phy->survey_time));
-	phy->survey_time = time;
-}
-EXPORT_SYMBOL_GPL(mt76_update_survey_active_time);
-
-void mt76_update_survey(struct mt76_phy *phy)
-{
-	struct mt76_dev *dev = phy->dev;
-	ktime_t cur_time;
-
-	if (dev->drv->update_survey)
-		dev->drv->update_survey(phy);
-
-	cur_time = ktime_get_boottime();
-	mt76_update_survey_active_time(phy, cur_time);
-
-	if (dev->drv->drv_flags & MT_DRV_SW_RX_AIRTIME) {
-		struct mt76_channel_state *state = phy->chan_state;
-
-		spin_lock_bh(&dev->cc_lock);
-		state->cc_bss_rx += dev->cur_cc_bss_rx;
-		dev->cur_cc_bss_rx = 0;
-		spin_unlock_bh(&dev->cc_lock);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_update_survey);
-
-void mt76_set_channel(struct mt76_phy *phy)
-{
-	struct mt76_dev *dev = phy->dev;
-	struct ieee80211_hw *hw = phy->hw;
-	struct cfg80211_chan_def *chandef = &hw->conf.chandef;
-	bool offchannel = hw->conf.flags & IEEE80211_CONF_OFFCHANNEL;
-	int timeout = HZ / 5;
-
-	wait_event_timeout(dev->tx_wait, !mt76_has_tx_pending(phy), timeout);
-	mt76_update_survey(phy);
-
-	if (phy->chandef.chan->center_freq != chandef->chan->center_freq ||
-	    phy->chandef.width != chandef->width)
-		phy->dfs_state = MT_DFS_STATE_UNKNOWN;
-
-	phy->chandef = *chandef;
-	phy->chan_state = mt76_channel_state(phy, chandef->chan);
-
-	if (!offchannel)
-		phy->main_chan = chandef->chan;
-
-	if (chandef->chan != phy->main_chan)
-		memset(phy->chan_state, 0, sizeof(*phy->chan_state));
-}
-EXPORT_SYMBOL_GPL(mt76_set_channel);
-
-int mt76_get_survey(struct ieee80211_hw *hw, int idx,
-		    struct survey_info *survey)
-{
-	struct mt76_phy *phy = hw->priv;
-	struct mt76_dev *dev = phy->dev;
-	struct mt76_sband *sband;
-	struct ieee80211_channel *chan;
-	struct mt76_channel_state *state;
-	int ret = 0;
-
-	mutex_lock(&dev->mutex);
-	if (idx == 0 && dev->drv->update_survey)
-		mt76_update_survey(phy);
-
-	if (idx >= phy->sband_2g.sband.n_channels +
-		   phy->sband_5g.sband.n_channels) {
-		idx -= (phy->sband_2g.sband.n_channels +
-			phy->sband_5g.sband.n_channels);
-		sband = &phy->sband_6g;
-	} else if (idx >= phy->sband_2g.sband.n_channels) {
-		idx -= phy->sband_2g.sband.n_channels;
-		sband = &phy->sband_5g;
-	} else {
-		sband = &phy->sband_2g;
-	}
-
-	if (idx >= sband->sband.n_channels) {
-		ret = -ENOENT;
-		goto out;
-	}
-
-	chan = &sband->sband.channels[idx];
-	state = mt76_channel_state(phy, chan);
-
-	memset(survey, 0, sizeof(*survey));
-	survey->channel = chan;
-	survey->filled = SURVEY_INFO_TIME | SURVEY_INFO_TIME_BUSY;
-	survey->filled |= dev->drv->survey_flags;
-	if (state->noise)
-		survey->filled |= SURVEY_INFO_NOISE_DBM;
-
-	if (chan == phy->main_chan) {
-		survey->filled |= SURVEY_INFO_IN_USE;
-
-		if (dev->drv->drv_flags & MT_DRV_SW_RX_AIRTIME)
-			survey->filled |= SURVEY_INFO_TIME_BSS_RX;
-	}
-
-	survey->time_busy = div_u64(state->cc_busy, 1000);
-	survey->time_rx = div_u64(state->cc_rx, 1000);
-	survey->time = div_u64(state->cc_active, 1000);
-	survey->noise = state->noise;
-
-	spin_lock_bh(&dev->cc_lock);
-	survey->time_bss_rx = div_u64(state->cc_bss_rx, 1000);
-	survey->time_tx = div_u64(state->cc_tx, 1000);
-	spin_unlock_bh(&dev->cc_lock);
-
-out:
-	mutex_unlock(&dev->mutex);
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt76_get_survey);
-
-void mt76_wcid_key_setup(struct mt76_dev *dev, struct mt76_wcid *wcid,
-			 struct ieee80211_key_conf *key)
-{
-	struct ieee80211_key_seq seq;
-	int i;
-
-	wcid->rx_check_pn = false;
-
-	if (!key)
-		return;
-
-	if (key->cipher != WLAN_CIPHER_SUITE_CCMP)
-		return;
-
-	wcid->rx_check_pn = true;
-
-	/* data frame */
-	for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
-		ieee80211_get_key_rx_seq(key, i, &seq);
-		memcpy(wcid->rx_key_pn[i], seq.ccmp.pn, sizeof(seq.ccmp.pn));
-	}
-
-	/* robust management frame */
-	ieee80211_get_key_rx_seq(key, -1, &seq);
-	memcpy(wcid->rx_key_pn[i], seq.ccmp.pn, sizeof(seq.ccmp.pn));
-
-}
-EXPORT_SYMBOL(mt76_wcid_key_setup);
-
-static int
-mt76_rx_signal(struct mt76_rx_status *status)
-{
-	s8 *chain_signal = status->chain_signal;
-	int signal = -128;
-	u8 chains;
-
-	for (chains = status->chains; chains; chains >>= 1, chain_signal++) {
-		int cur, diff;
-
-		cur = *chain_signal;
-		if (!(chains & BIT(0)) ||
-		    cur > 0)
-			continue;
-
-		if (cur > signal)
-			swap(cur, signal);
-
-		diff = signal - cur;
-		if (diff == 0)
-			signal += 3;
-		else if (diff <= 2)
-			signal += 2;
-		else if (diff <= 6)
-			signal += 1;
-	}
-
-	return signal;
-}
-
-static void
-mt76_rx_convert(struct mt76_dev *dev, struct sk_buff *skb,
-		struct ieee80211_hw **hw,
-		struct ieee80211_sta **sta)
-{
-	struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
-	struct ieee80211_hdr *hdr = mt76_skb_get_hdr(skb);
-	struct mt76_rx_status mstat;
-
-	mstat = *((struct mt76_rx_status *)skb->cb);
-	memset(status, 0, sizeof(*status));
-
-	status->flag = mstat.flag;
-	status->freq = mstat.freq;
-	status->enc_flags = mstat.enc_flags;
-	status->encoding = mstat.encoding;
-	status->bw = mstat.bw;
-	status->he_ru = mstat.he_ru;
-	status->he_gi = mstat.he_gi;
-	status->he_dcm = mstat.he_dcm;
-	status->rate_idx = mstat.rate_idx;
-	status->nss = mstat.nss;
-	status->band = mstat.band;
-	status->signal = mstat.signal;
-	status->chains = mstat.chains;
-	status->ampdu_reference = mstat.ampdu_ref;
-	status->device_timestamp = mstat.timestamp;
-	status->mactime = mstat.timestamp;
-	status->signal = mt76_rx_signal(&mstat);
-	if (status->signal <= -128)
-		status->flag |= RX_FLAG_NO_SIGNAL_VAL;
-
-	if (ieee80211_is_beacon(hdr->frame_control) ||
-	    ieee80211_is_probe_resp(hdr->frame_control))
-		status->boottime_ns = ktime_get_boottime_ns();
-
-	BUILD_BUG_ON(sizeof(mstat) > sizeof(skb->cb));
-	BUILD_BUG_ON(sizeof(status->chain_signal) !=
-		     sizeof(mstat.chain_signal));
-	memcpy(status->chain_signal, mstat.chain_signal,
-	       sizeof(mstat.chain_signal));
-
-	*sta = wcid_to_sta(mstat.wcid);
-	*hw = mt76_phy_hw(dev, mstat.phy_idx);
-}
-
-static void
-mt76_check_ccmp_pn(struct sk_buff *skb)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct mt76_wcid *wcid = status->wcid;
-	struct ieee80211_hdr *hdr;
-	int security_idx;
-	int ret;
-
-	if (!(status->flag & RX_FLAG_DECRYPTED))
-		return;
-
-	if (status->flag & RX_FLAG_ONLY_MONITOR)
-		return;
-
-	if (!wcid || !wcid->rx_check_pn)
-		return;
-
-	security_idx = status->qos_ctl & IEEE80211_QOS_CTL_TID_MASK;
-	if (status->flag & RX_FLAG_8023)
-		goto skip_hdr_check;
-
-	hdr = mt76_skb_get_hdr(skb);
-	if (!(status->flag & RX_FLAG_IV_STRIPPED)) {
-		/*
-		 * Validate the first fragment both here and in mac80211
-		 * All further fragments will be validated by mac80211 only.
-		 */
-		if (ieee80211_is_frag(hdr) &&
-		    !ieee80211_is_first_frag(hdr->frame_control))
-			return;
-	}
-
-	/* IEEE 802.11-2020, 12.5.3.4.4 "PN and replay detection" c):
-	 *
-	 * the recipient shall maintain a single replay counter for received
-	 * individually addressed robust Management frames that are received
-	 * with the To DS subfield equal to 0, [...]
-	 */
-	if (ieee80211_is_mgmt(hdr->frame_control) &&
-	    !ieee80211_has_tods(hdr->frame_control))
-		security_idx = IEEE80211_NUM_TIDS;
-
-skip_hdr_check:
-	BUILD_BUG_ON(sizeof(status->iv) != sizeof(wcid->rx_key_pn[0]));
-	ret = memcmp(status->iv, wcid->rx_key_pn[security_idx],
-		     sizeof(status->iv));
-	if (ret <= 0) {
-		status->flag |= RX_FLAG_ONLY_MONITOR;
-		return;
-	}
-
-	memcpy(wcid->rx_key_pn[security_idx], status->iv, sizeof(status->iv));
-
-	if (status->flag & RX_FLAG_IV_STRIPPED)
-		status->flag |= RX_FLAG_PN_VALIDATED;
-}
-
-static void
-mt76_airtime_report(struct mt76_dev *dev, struct mt76_rx_status *status,
-		    int len)
-{
-	struct mt76_wcid *wcid = status->wcid;
-	struct ieee80211_rx_status info = {
-		.enc_flags = status->enc_flags,
-		.rate_idx = status->rate_idx,
-		.encoding = status->encoding,
-		.band = status->band,
-		.nss = status->nss,
-		.bw = status->bw,
-	};
-	struct ieee80211_sta *sta;
-	u32 airtime;
-	u8 tidno = status->qos_ctl & IEEE80211_QOS_CTL_TID_MASK;
-
-	airtime = ieee80211_calc_rx_airtime(dev->hw, &info, len);
-	spin_lock(&dev->cc_lock);
-	dev->cur_cc_bss_rx += airtime;
-	spin_unlock(&dev->cc_lock);
-
-	if (!wcid || !wcid->sta)
-		return;
-
-	sta = container_of((void *)wcid, struct ieee80211_sta, drv_priv);
-	ieee80211_sta_register_airtime(sta, tidno, 0, airtime);
-}
-
-static void
-mt76_airtime_flush_ampdu(struct mt76_dev *dev)
-{
-	struct mt76_wcid *wcid;
-	int wcid_idx;
-
-	if (!dev->rx_ampdu_len)
-		return;
-
-	wcid_idx = dev->rx_ampdu_status.wcid_idx;
-	if (wcid_idx < ARRAY_SIZE(dev->wcid))
-		wcid = rcu_dereference(dev->wcid[wcid_idx]);
-	else
-		wcid = NULL;
-	dev->rx_ampdu_status.wcid = wcid;
-
-	mt76_airtime_report(dev, &dev->rx_ampdu_status, dev->rx_ampdu_len);
-
-	dev->rx_ampdu_len = 0;
-	dev->rx_ampdu_ref = 0;
-}
-
-static void
-mt76_airtime_check(struct mt76_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct mt76_wcid *wcid = status->wcid;
-
-	if (!(dev->drv->drv_flags & MT_DRV_SW_RX_AIRTIME))
-		return;
-
-	if (!wcid || !wcid->sta) {
-		struct ieee80211_hdr *hdr = mt76_skb_get_hdr(skb);
-
-		if (status->flag & RX_FLAG_8023)
-			return;
-
-		if (!ether_addr_equal(hdr->addr1, dev->phy.macaddr))
-			return;
-
-		wcid = NULL;
-	}
-
-	if (!(status->flag & RX_FLAG_AMPDU_DETAILS) ||
-	    status->ampdu_ref != dev->rx_ampdu_ref)
-		mt76_airtime_flush_ampdu(dev);
-
-	if (status->flag & RX_FLAG_AMPDU_DETAILS) {
-		if (!dev->rx_ampdu_len ||
-		    status->ampdu_ref != dev->rx_ampdu_ref) {
-			dev->rx_ampdu_status = *status;
-			dev->rx_ampdu_status.wcid_idx = wcid ? wcid->idx : 0xff;
-			dev->rx_ampdu_ref = status->ampdu_ref;
-		}
-
-		dev->rx_ampdu_len += skb->len;
-		return;
-	}
-
-	mt76_airtime_report(dev, status, skb->len);
-}
-
-static void
-mt76_check_sta(struct mt76_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct ieee80211_hdr *hdr = mt76_skb_get_hdr(skb);
-	struct ieee80211_sta *sta;
-	struct ieee80211_hw *hw;
-	struct mt76_wcid *wcid = status->wcid;
-	u8 tidno = status->qos_ctl & IEEE80211_QOS_CTL_TID_MASK;
-	bool ps;
-
-	hw = mt76_phy_hw(dev, status->phy_idx);
-	if (ieee80211_is_pspoll(hdr->frame_control) && !wcid &&
-	    !(status->flag & RX_FLAG_8023)) {
-		sta = ieee80211_find_sta_by_ifaddr(hw, hdr->addr2, NULL);
-		if (sta)
-			wcid = status->wcid = (struct mt76_wcid *)sta->drv_priv;
-	}
-
-	mt76_airtime_check(dev, skb);
-
-	if (!wcid || !wcid->sta)
-		return;
-
-	sta = container_of((void *)wcid, struct ieee80211_sta, drv_priv);
-
-	if (status->signal <= 0)
-		ewma_signal_add(&wcid->rssi, -status->signal);
-
-	wcid->inactive_count = 0;
-
-	if (status->flag & RX_FLAG_8023)
-		return;
-
-	if (!test_bit(MT_WCID_FLAG_CHECK_PS, &wcid->flags))
-		return;
-
-	if (ieee80211_is_pspoll(hdr->frame_control)) {
-		ieee80211_sta_pspoll(sta);
-		return;
-	}
-
-	if (ieee80211_has_morefrags(hdr->frame_control) ||
-	    !(ieee80211_is_mgmt(hdr->frame_control) ||
-	      ieee80211_is_data(hdr->frame_control)))
-		return;
-
-	ps = ieee80211_has_pm(hdr->frame_control);
-
-	if (ps && (ieee80211_is_data_qos(hdr->frame_control) ||
-		   ieee80211_is_qos_nullfunc(hdr->frame_control)))
-		ieee80211_sta_uapsd_trigger(sta, tidno);
-
-	if (!!test_bit(MT_WCID_FLAG_PS, &wcid->flags) == ps)
-		return;
-
-	if (ps)
-		set_bit(MT_WCID_FLAG_PS, &wcid->flags);
-
-	dev->drv->sta_ps(dev, sta, ps);
-
-	if (!ps)
-		clear_bit(MT_WCID_FLAG_PS, &wcid->flags);
-
-	ieee80211_sta_ps_transition(sta, ps);
-}
-
-void mt76_rx_complete(struct mt76_dev *dev, struct sk_buff_head *frames,
-		      struct napi_struct *napi)
-{
-	struct ieee80211_sta *sta;
-	struct ieee80211_hw *hw;
-	struct sk_buff *skb, *tmp;
-	LIST_HEAD(list);
-
-	spin_lock(&dev->rx_lock);
-	while ((skb = __skb_dequeue(frames)) != NULL) {
-		struct sk_buff *nskb = skb_shinfo(skb)->frag_list;
-
-		mt76_check_ccmp_pn(skb);
-		skb_shinfo(skb)->frag_list = NULL;
-		mt76_rx_convert(dev, skb, &hw, &sta);
-		ieee80211_rx_list(hw, sta, skb, &list);
-
-		/* subsequent amsdu frames */
-		while (nskb) {
-			skb = nskb;
-			nskb = nskb->next;
-			skb->next = NULL;
-
-			mt76_rx_convert(dev, skb, &hw, &sta);
-			ieee80211_rx_list(hw, sta, skb, &list);
-		}
-	}
-	spin_unlock(&dev->rx_lock);
-
-	if (!napi) {
-		netif_receive_skb_list(&list);
-		return;
-	}
-
-	list_for_each_entry_safe(skb, tmp, &list, list) {
-		skb_list_del_init(skb);
-		napi_gro_receive(napi, skb);
-	}
-}
-
-void mt76_rx_poll_complete(struct mt76_dev *dev, enum mt76_rxq_id q,
-			   struct napi_struct *napi)
-{
-	struct sk_buff_head frames;
-	struct sk_buff *skb;
-
-	__skb_queue_head_init(&frames);
-
-	while ((skb = __skb_dequeue(&dev->rx_skb[q])) != NULL) {
-		mt76_check_sta(dev, skb);
-		mt76_rx_aggr_reorder(skb, &frames);
-	}
-
-	mt76_rx_complete(dev, &frames, napi);
-}
-EXPORT_SYMBOL_GPL(mt76_rx_poll_complete);
-
-static int
-mt76_sta_add(struct mt76_phy *phy, struct ieee80211_vif *vif,
-	     struct ieee80211_sta *sta)
-{
-	struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv;
-	struct mt76_dev *dev = phy->dev;
-	int ret;
-	int i;
-
-	mutex_lock(&dev->mutex);
-
-	ret = dev->drv->sta_add(dev, vif, sta);
-	if (ret)
-		goto out;
-
-	for (i = 0; i < ARRAY_SIZE(sta->txq); i++) {
-		struct mt76_txq *mtxq;
-
-		if (!sta->txq[i])
-			continue;
-
-		mtxq = (struct mt76_txq *)sta->txq[i]->drv_priv;
-		mtxq->wcid = wcid->idx;
-	}
-
-	ewma_signal_init(&wcid->rssi);
-	if (phy->band_idx == MT_BAND1)
-		mt76_wcid_mask_set(dev->wcid_phy_mask, wcid->idx);
-	wcid->phy_idx = phy->band_idx;
-	rcu_assign_pointer(dev->wcid[wcid->idx], wcid);
-
-	mt76_packet_id_init(wcid);
-out:
-	mutex_unlock(&dev->mutex);
-
-	return ret;
-}
-
-void __mt76_sta_remove(struct mt76_dev *dev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta)
-{
-	struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv;
-	int i, idx = wcid->idx;
-
-	for (i = 0; i < ARRAY_SIZE(wcid->aggr); i++)
-		mt76_rx_aggr_stop(dev, wcid, i);
-
-	if (dev->drv->sta_remove)
-		dev->drv->sta_remove(dev, vif, sta);
-
-	mt76_packet_id_flush(dev, wcid);
-
-	mt76_wcid_mask_clear(dev->wcid_mask, idx);
-	mt76_wcid_mask_clear(dev->wcid_phy_mask, idx);
-}
-EXPORT_SYMBOL_GPL(__mt76_sta_remove);
-
-static void
-mt76_sta_remove(struct mt76_dev *dev, struct ieee80211_vif *vif,
-		struct ieee80211_sta *sta)
-{
-	mutex_lock(&dev->mutex);
-	__mt76_sta_remove(dev, vif, sta);
-	mutex_unlock(&dev->mutex);
-}
-
-int mt76_sta_state(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		   struct ieee80211_sta *sta,
-		   enum ieee80211_sta_state old_state,
-		   enum ieee80211_sta_state new_state)
-{
-	struct mt76_phy *phy = hw->priv;
-	struct mt76_dev *dev = phy->dev;
-
-	if (old_state == IEEE80211_STA_NOTEXIST &&
-	    new_state == IEEE80211_STA_NONE)
-		return mt76_sta_add(phy, vif, sta);
-
-	if (old_state == IEEE80211_STA_AUTH &&
-	    new_state == IEEE80211_STA_ASSOC &&
-	    dev->drv->sta_assoc)
-		dev->drv->sta_assoc(dev, vif, sta);
-
-	if (old_state == IEEE80211_STA_NONE &&
-	    new_state == IEEE80211_STA_NOTEXIST)
-		mt76_sta_remove(dev, vif, sta);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_sta_state);
-
-void mt76_sta_pre_rcu_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			     struct ieee80211_sta *sta)
-{
-	struct mt76_phy *phy = hw->priv;
-	struct mt76_dev *dev = phy->dev;
-	struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv;
-
-	mutex_lock(&dev->mutex);
-	spin_lock_bh(&dev->status_lock);
-	rcu_assign_pointer(dev->wcid[wcid->idx], NULL);
-	spin_unlock_bh(&dev->status_lock);
-	mutex_unlock(&dev->mutex);
-}
-EXPORT_SYMBOL_GPL(mt76_sta_pre_rcu_remove);
-
-int mt76_get_txpower(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		     int *dbm)
-{
-	struct mt76_phy *phy = hw->priv;
-	int n_chains = hweight8(phy->antenna_mask);
-	int delta = mt76_tx_power_nss_delta(n_chains);
-
-	*dbm = DIV_ROUND_UP(phy->txpower_cur + delta, 2);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_get_txpower);
-
-int mt76_init_sar_power(struct ieee80211_hw *hw,
-			const struct cfg80211_sar_specs *sar)
-{
-	struct mt76_phy *phy = hw->priv;
-	const struct cfg80211_sar_capa *capa = hw->wiphy->sar_capa;
-	int i;
-
-	if (sar->type != NL80211_SAR_TYPE_POWER || !sar->num_sub_specs)
-		return -EINVAL;
-
-	for (i = 0; i < sar->num_sub_specs; i++) {
-		u32 index = sar->sub_specs[i].freq_range_index;
-		/* SAR specifies power limitaton in 0.25dbm */
-		s32 power = sar->sub_specs[i].power >> 1;
-
-		if (power > 127 || power < -127)
-			power = 127;
-
-		phy->frp[index].range = &capa->freq_ranges[index];
-		phy->frp[index].power = power;
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_init_sar_power);
-
-int mt76_get_sar_power(struct mt76_phy *phy,
-		       struct ieee80211_channel *chan,
-		       int power)
-{
-	const struct cfg80211_sar_capa *capa = phy->hw->wiphy->sar_capa;
-	int freq, i;
-
-	if (!capa || !phy->frp)
-		return power;
-
-	if (power > 127 || power < -127)
-		power = 127;
-
-	freq = ieee80211_channel_to_frequency(chan->hw_value, chan->band);
-	for (i = 0 ; i < capa->num_freq_ranges; i++) {
-		if (phy->frp[i].range &&
-		    freq >= phy->frp[i].range->start_freq &&
-		    freq < phy->frp[i].range->end_freq) {
-			power = min_t(int, phy->frp[i].power, power);
-			break;
-		}
-	}
-
-	return power;
-}
-EXPORT_SYMBOL_GPL(mt76_get_sar_power);
-
-static void
-__mt76_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	if (vif->csa_active && ieee80211_beacon_cntdwn_is_complete(vif))
-		ieee80211_csa_finish(vif);
-}
-
-void mt76_csa_finish(struct mt76_dev *dev)
-{
-	if (!dev->csa_complete)
-		return;
-
-	ieee80211_iterate_active_interfaces_atomic(dev->hw,
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		__mt76_csa_finish, dev);
-
-	dev->csa_complete = 0;
-}
-EXPORT_SYMBOL_GPL(mt76_csa_finish);
-
-static void
-__mt76_csa_check(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	struct mt76_dev *dev = priv;
-
-	if (!vif->csa_active)
-		return;
-
-	dev->csa_complete |= ieee80211_beacon_cntdwn_is_complete(vif);
-}
-
-void mt76_csa_check(struct mt76_dev *dev)
-{
-	ieee80211_iterate_active_interfaces_atomic(dev->hw,
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		__mt76_csa_check, dev);
-}
-EXPORT_SYMBOL_GPL(mt76_csa_check);
-
-int
-mt76_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta, bool set)
-{
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_set_tim);
-
-void mt76_insert_ccmp_hdr(struct sk_buff *skb, u8 key_id)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	int hdr_len = ieee80211_get_hdrlen_from_skb(skb);
-	u8 *hdr, *pn = status->iv;
-
-	__skb_push(skb, 8);
-	memmove(skb->data, skb->data + 8, hdr_len);
-	hdr = skb->data + hdr_len;
-
-	hdr[0] = pn[5];
-	hdr[1] = pn[4];
-	hdr[2] = 0;
-	hdr[3] = 0x20 | (key_id << 6);
-	hdr[4] = pn[3];
-	hdr[5] = pn[2];
-	hdr[6] = pn[1];
-	hdr[7] = pn[0];
-
-	status->flag &= ~RX_FLAG_IV_STRIPPED;
-}
-EXPORT_SYMBOL_GPL(mt76_insert_ccmp_hdr);
-
-int mt76_get_rate(struct mt76_dev *dev,
-		  struct ieee80211_supported_band *sband,
-		  int idx, bool cck)
-{
-	int i, offset = 0, len = sband->n_bitrates;
-
-	if (cck) {
-		if (sband != &dev->phy.sband_2g.sband)
-			return 0;
-
-		idx &= ~BIT(2); /* short preamble */
-	} else if (sband == &dev->phy.sband_2g.sband) {
-		offset = 4;
-	}
-
-	for (i = offset; i < len; i++) {
-		if ((sband->bitrates[i].hw_value & GENMASK(7, 0)) == idx)
-			return i;
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_get_rate);
-
-void mt76_sw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		  const u8 *mac)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	set_bit(MT76_SCANNING, &phy->state);
-}
-EXPORT_SYMBOL_GPL(mt76_sw_scan);
-
-void mt76_sw_scan_complete(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	clear_bit(MT76_SCANNING, &phy->state);
-}
-EXPORT_SYMBOL_GPL(mt76_sw_scan_complete);
-
-int mt76_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
-{
-	struct mt76_phy *phy = hw->priv;
-	struct mt76_dev *dev = phy->dev;
-
-	mutex_lock(&dev->mutex);
-	*tx_ant = phy->antenna_mask;
-	*rx_ant = phy->antenna_mask;
-	mutex_unlock(&dev->mutex);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_get_antenna);
-
-struct mt76_queue *
-mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc,
-		int ring_base)
-{
-	struct mt76_queue *hwq;
-	int err;
-
-	hwq = devm_kzalloc(dev->dev, sizeof(*hwq), GFP_KERNEL);
-	if (!hwq)
-		return ERR_PTR(-ENOMEM);
-
-	err = dev->queue_ops->alloc(dev, hwq, idx, n_desc, 0, ring_base);
-	if (err < 0)
-		return ERR_PTR(err);
-
-	return hwq;
-}
-EXPORT_SYMBOL_GPL(mt76_init_queue);
-
-u16 mt76_calculate_default_rate(struct mt76_phy *phy, int rateidx)
-{
-	int offset = 0;
-
-	if (phy->chandef.chan->band != NL80211_BAND_2GHZ)
-		offset = 4;
-
-	/* pick the lowest rate for hidden nodes */
-	if (rateidx < 0)
-		rateidx = 0;
-
-	rateidx += offset;
-	if (rateidx >= ARRAY_SIZE(mt76_rates))
-		rateidx = offset;
-
-	return mt76_rates[rateidx].hw_value;
-}
-EXPORT_SYMBOL_GPL(mt76_calculate_default_rate);
-
-void mt76_ethtool_worker(struct mt76_ethtool_worker_info *wi,
-			 struct mt76_sta_stats *stats)
-{
-	int i, ei = wi->initial_stat_idx;
-	u64 *data = wi->data;
-
-	wi->sta_count++;
-
-	data[ei++] += stats->tx_mode[MT_PHY_TYPE_CCK];
-	data[ei++] += stats->tx_mode[MT_PHY_TYPE_OFDM];
-	data[ei++] += stats->tx_mode[MT_PHY_TYPE_HT];
-	data[ei++] += stats->tx_mode[MT_PHY_TYPE_HT_GF];
-	data[ei++] += stats->tx_mode[MT_PHY_TYPE_VHT];
-	data[ei++] += stats->tx_mode[MT_PHY_TYPE_HE_SU];
-	data[ei++] += stats->tx_mode[MT_PHY_TYPE_HE_EXT_SU];
-	data[ei++] += stats->tx_mode[MT_PHY_TYPE_HE_TB];
-	data[ei++] += stats->tx_mode[MT_PHY_TYPE_HE_MU];
-
-	for (i = 0; i < ARRAY_SIZE(stats->tx_bw); i++)
-		data[ei++] += stats->tx_bw[i];
-
-	for (i = 0; i < 12; i++)
-		data[ei++] += stats->tx_mcs[i];
-
-	wi->worker_stat_count = ei - wi->initial_stat_idx;
-}
-EXPORT_SYMBOL_GPL(mt76_ethtool_worker);
-
-enum mt76_dfs_state mt76_phy_dfs_state(struct mt76_phy *phy)
-{
-	struct ieee80211_hw *hw = phy->hw;
-	struct mt76_dev *dev = phy->dev;
-
-	if (dev->region == NL80211_DFS_UNSET ||
-	    test_bit(MT76_SCANNING, &phy->state))
-		return MT_DFS_STATE_DISABLED;
-
-	if (!hw->conf.radar_enabled) {
-		if ((hw->conf.flags & IEEE80211_CONF_MONITOR) &&
-		    (phy->chandef.chan->flags & IEEE80211_CHAN_RADAR))
-			return MT_DFS_STATE_ACTIVE;
-
-		return MT_DFS_STATE_DISABLED;
-	}
-
-	if (!cfg80211_reg_can_beacon(hw->wiphy, &phy->chandef, NL80211_IFTYPE_AP))
-		return MT_DFS_STATE_CAC;
-
-	return MT_DFS_STATE_ACTIVE;
-}
-EXPORT_SYMBOL_GPL(mt76_phy_dfs_state);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mcu.c
deleted file mode 100644
index a8cafa3..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mcu.c
+++ /dev/null
@@ -1,134 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2019 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include "mt76.h"
-
-struct sk_buff *
-__mt76_mcu_msg_alloc(struct mt76_dev *dev, const void *data,
-		     int len, int data_len, gfp_t gfp)
-{
-	const struct mt76_mcu_ops *ops = dev->mcu_ops;
-	struct sk_buff *skb;
-
-	len = max_t(int, len, data_len);
-	len = ops->headroom + len + ops->tailroom;
-
-	skb = alloc_skb(len, gfp);
-	if (!skb)
-		return NULL;
-
-	memset(skb->head, 0, len);
-	skb_reserve(skb, ops->headroom);
-
-	if (data && data_len)
-		skb_put_data(skb, data, data_len);
-
-	return skb;
-}
-EXPORT_SYMBOL_GPL(__mt76_mcu_msg_alloc);
-
-struct sk_buff *mt76_mcu_get_response(struct mt76_dev *dev,
-				      unsigned long expires)
-{
-	unsigned long timeout;
-
-	if (!time_is_after_jiffies(expires))
-		return NULL;
-
-	timeout = expires - jiffies;
-	wait_event_timeout(dev->mcu.wait,
-			   (!skb_queue_empty(&dev->mcu.res_q) ||
-			    test_bit(MT76_MCU_RESET, &dev->phy.state)),
-			   timeout);
-	return skb_dequeue(&dev->mcu.res_q);
-}
-EXPORT_SYMBOL_GPL(mt76_mcu_get_response);
-
-void mt76_mcu_rx_event(struct mt76_dev *dev, struct sk_buff *skb)
-{
-	skb_queue_tail(&dev->mcu.res_q, skb);
-	wake_up(&dev->mcu.wait);
-}
-EXPORT_SYMBOL_GPL(mt76_mcu_rx_event);
-
-int mt76_mcu_send_and_get_msg(struct mt76_dev *dev, int cmd, const void *data,
-			      int len, bool wait_resp, struct sk_buff **ret_skb)
-{
-	struct sk_buff *skb;
-
-	if (dev->mcu_ops->mcu_send_msg)
-		return dev->mcu_ops->mcu_send_msg(dev, cmd, data, len, wait_resp);
-
-	skb = mt76_mcu_msg_alloc(dev, data, len);
-	if (!skb)
-		return -ENOMEM;
-
-	return mt76_mcu_skb_send_and_get_msg(dev, skb, cmd, wait_resp, ret_skb);
-}
-EXPORT_SYMBOL_GPL(mt76_mcu_send_and_get_msg);
-
-int mt76_mcu_skb_send_and_get_msg(struct mt76_dev *dev, struct sk_buff *skb,
-				  int cmd, bool wait_resp,
-				  struct sk_buff **ret_skb)
-{
-	unsigned long expires;
-	int ret, seq;
-
-	if (ret_skb)
-		*ret_skb = NULL;
-
-	mutex_lock(&dev->mcu.mutex);
-
-	ret = dev->mcu_ops->mcu_skb_send_msg(dev, skb, cmd, &seq);
-	if (ret < 0)
-		goto out;
-
-	if (!wait_resp) {
-		ret = 0;
-		goto out;
-	}
-
-	expires = jiffies + dev->mcu.timeout;
-
-	do {
-		skb = mt76_mcu_get_response(dev, expires);
-		ret = dev->mcu_ops->mcu_parse_response(dev, cmd, skb, seq);
-		if (!ret && ret_skb)
-			*ret_skb = skb;
-		else
-			dev_kfree_skb(skb);
-	} while (ret == -EAGAIN);
-
-out:
-	mutex_unlock(&dev->mcu.mutex);
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt76_mcu_skb_send_and_get_msg);
-
-int __mt76_mcu_send_firmware(struct mt76_dev *dev, int cmd, const void *data,
-			     int len, int max_len)
-{
-	int err, cur_len;
-
-	while (len > 0) {
-		cur_len = min_t(int, max_len, len);
-
-		err = mt76_mcu_send_msg(dev, cmd, data, cur_len, false);
-		if (err)
-			return err;
-
-		data += cur_len;
-		len -= cur_len;
-
-		if (dev->queue_ops->tx_cleanup)
-			dev->queue_ops->tx_cleanup(dev,
-						   dev->q_mcu[MT_MCUQ_FWDL],
-						   false);
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(__mt76_mcu_send_firmware);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mmio.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mmio.c
deleted file mode 100644
index 26353b6..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mmio.c
+++ /dev/null
@@ -1,100 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include "mt76.h"
-#include "trace.h"
-
-static u32 mt76_mmio_rr(struct mt76_dev *dev, u32 offset)
-{
-	u32 val;
-
-	val = readl(dev->mmio.regs + offset);
-	trace_reg_rr(dev, offset, val);
-
-	return val;
-}
-
-static void mt76_mmio_wr(struct mt76_dev *dev, u32 offset, u32 val)
-{
-	trace_reg_wr(dev, offset, val);
-	writel(val, dev->mmio.regs + offset);
-}
-
-static u32 mt76_mmio_rmw(struct mt76_dev *dev, u32 offset, u32 mask, u32 val)
-{
-	val |= mt76_mmio_rr(dev, offset) & ~mask;
-	mt76_mmio_wr(dev, offset, val);
-	return val;
-}
-
-static void mt76_mmio_write_copy(struct mt76_dev *dev, u32 offset,
-				 const void *data, int len)
-{
-	__iowrite32_copy(dev->mmio.regs + offset, data, DIV_ROUND_UP(len, 4));
-}
-
-static void mt76_mmio_read_copy(struct mt76_dev *dev, u32 offset,
-				void *data, int len)
-{
-	__ioread32_copy(data, dev->mmio.regs + offset, DIV_ROUND_UP(len, 4));
-}
-
-static int mt76_mmio_wr_rp(struct mt76_dev *dev, u32 base,
-			   const struct mt76_reg_pair *data, int len)
-{
-	while (len > 0) {
-		mt76_mmio_wr(dev, data->reg, data->value);
-		data++;
-		len--;
-	}
-
-	return 0;
-}
-
-static int mt76_mmio_rd_rp(struct mt76_dev *dev, u32 base,
-			   struct mt76_reg_pair *data, int len)
-{
-	while (len > 0) {
-		data->value = mt76_mmio_rr(dev, data->reg);
-		data++;
-		len--;
-	}
-
-	return 0;
-}
-
-void mt76_set_irq_mask(struct mt76_dev *dev, u32 addr,
-		       u32 clear, u32 set)
-{
-	unsigned long flags;
-
-	spin_lock_irqsave(&dev->mmio.irq_lock, flags);
-	dev->mmio.irqmask &= ~clear;
-	dev->mmio.irqmask |= set;
-	if (addr)
-		mt76_mmio_wr(dev, addr, dev->mmio.irqmask);
-	spin_unlock_irqrestore(&dev->mmio.irq_lock, flags);
-}
-EXPORT_SYMBOL_GPL(mt76_set_irq_mask);
-
-void mt76_mmio_init(struct mt76_dev *dev, void __iomem *regs)
-{
-	static const struct mt76_bus_ops mt76_mmio_ops = {
-		.rr = mt76_mmio_rr,
-		.rmw = mt76_mmio_rmw,
-		.wr = mt76_mmio_wr,
-		.write_copy = mt76_mmio_write_copy,
-		.read_copy = mt76_mmio_read_copy,
-		.wr_rp = mt76_mmio_wr_rp,
-		.rd_rp = mt76_mmio_rd_rp,
-		.type = MT76_BUS_MMIO,
-	};
-
-	dev->bus = &mt76_mmio_ops;
-	dev->mmio.regs = regs;
-
-	spin_lock_init(&dev->mmio.irq_lock);
-}
-EXPORT_SYMBOL_GPL(mt76_mmio_init);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76.h
deleted file mode 100644
index 232b1f4..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76.h
+++ /dev/null
@@ -1,1426 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#ifndef __MT76_H
-#define __MT76_H
-
-#include <linux/kernel.h>
-#include <linux/io.h>
-#include <linux/spinlock.h>
-#include <linux/skbuff.h>
-#include <linux/leds.h>
-#include <linux/usb.h>
-#include <linux/average.h>
-#include <net/mac80211.h>
-#include "util.h"
-#include "testmode.h"
-
-#define MT_MCU_RING_SIZE	32
-#define MT_RX_BUF_SIZE		2048
-#define MT_SKB_HEAD_LEN		256
-
-#define MT_MAX_NON_AQL_PKT	16
-#define MT_TXQ_FREE_THR		32
-
-#define MT76_TOKEN_FREE_THR	64
-
-struct mt76_dev;
-struct mt76_phy;
-struct mt76_wcid;
-struct mt76s_intr;
-
-struct mt76_reg_pair {
-	u32 reg;
-	u32 value;
-};
-
-enum mt76_bus_type {
-	MT76_BUS_MMIO,
-	MT76_BUS_USB,
-	MT76_BUS_SDIO,
-};
-
-enum mt76_wed_type {
-	MT76_WED_Q_TX,
-	MT76_WED_Q_TXFREE,
-};
-
-struct mt76_bus_ops {
-	u32 (*rr)(struct mt76_dev *dev, u32 offset);
-	void (*wr)(struct mt76_dev *dev, u32 offset, u32 val);
-	u32 (*rmw)(struct mt76_dev *dev, u32 offset, u32 mask, u32 val);
-	void (*write_copy)(struct mt76_dev *dev, u32 offset, const void *data,
-			   int len);
-	void (*read_copy)(struct mt76_dev *dev, u32 offset, void *data,
-			  int len);
-	int (*wr_rp)(struct mt76_dev *dev, u32 base,
-		     const struct mt76_reg_pair *rp, int len);
-	int (*rd_rp)(struct mt76_dev *dev, u32 base,
-		     struct mt76_reg_pair *rp, int len);
-	enum mt76_bus_type type;
-};
-
-#define mt76_is_usb(dev) ((dev)->bus->type == MT76_BUS_USB)
-#define mt76_is_mmio(dev) ((dev)->bus->type == MT76_BUS_MMIO)
-#define mt76_is_sdio(dev) ((dev)->bus->type == MT76_BUS_SDIO)
-
-enum mt76_txq_id {
-	MT_TXQ_VO = IEEE80211_AC_VO,
-	MT_TXQ_VI = IEEE80211_AC_VI,
-	MT_TXQ_BE = IEEE80211_AC_BE,
-	MT_TXQ_BK = IEEE80211_AC_BK,
-	MT_TXQ_PSD,
-	MT_TXQ_BEACON,
-	MT_TXQ_CAB,
-	__MT_TXQ_MAX
-};
-
-enum mt76_mcuq_id {
-	MT_MCUQ_WM,
-	MT_MCUQ_WA,
-	MT_MCUQ_FWDL,
-	__MT_MCUQ_MAX
-};
-
-enum mt76_rxq_id {
-	MT_RXQ_MAIN,
-	MT_RXQ_MCU,
-	MT_RXQ_MCU_WA,
-	MT_RXQ_BAND1,
-	MT_RXQ_BAND1_WA,
-	MT_RXQ_MAIN_WA,
-	MT_RXQ_BAND2,
-	MT_RXQ_BAND2_WA,
-	__MT_RXQ_MAX
-};
-
-enum mt76_band_id {
-	MT_BAND0,
-	MT_BAND1,
-	MT_BAND2,
-	__MT_MAX_BAND
-};
-
-enum mt76_cipher_type {
-	MT_CIPHER_NONE,
-	MT_CIPHER_WEP40,
-	MT_CIPHER_TKIP,
-	MT_CIPHER_TKIP_NO_MIC,
-	MT_CIPHER_AES_CCMP,
-	MT_CIPHER_WEP104,
-	MT_CIPHER_BIP_CMAC_128,
-	MT_CIPHER_WEP128,
-	MT_CIPHER_WAPI,
-	MT_CIPHER_CCMP_CCX,
-	MT_CIPHER_CCMP_256,
-	MT_CIPHER_GCMP,
-	MT_CIPHER_GCMP_256,
-};
-
-enum mt76_dfs_state {
-	MT_DFS_STATE_UNKNOWN,
-	MT_DFS_STATE_DISABLED,
-	MT_DFS_STATE_CAC,
-	MT_DFS_STATE_ACTIVE,
-};
-
-struct mt76_queue_buf {
-	dma_addr_t addr;
-	u16 len;
-	bool skip_unmap;
-};
-
-struct mt76_tx_info {
-	struct mt76_queue_buf buf[32];
-	struct sk_buff *skb;
-	int nbuf;
-	u32 info;
-};
-
-struct mt76_queue_entry {
-	union {
-		void *buf;
-		struct sk_buff *skb;
-	};
-	union {
-		struct mt76_txwi_cache *txwi;
-		struct urb *urb;
-		int buf_sz;
-	};
-	u32 dma_addr[2];
-	u16 dma_len[2];
-	u16 wcid;
-	bool skip_buf0:1;
-	bool skip_buf1:1;
-	bool done:1;
-};
-
-struct mt76_queue_regs {
-	u32 desc_base;
-	u32 ring_size;
-	u32 cpu_idx;
-	u32 dma_idx;
-} __packed __aligned(4);
-
-struct mt76_queue {
-	struct mt76_queue_regs __iomem *regs;
-
-	spinlock_t lock;
-	spinlock_t cleanup_lock;
-	struct mt76_queue_entry *entry;
-	struct mt76_desc *desc;
-
-	u16 first;
-	u16 head;
-	u16 tail;
-	int ndesc;
-	int queued;
-	int buf_size;
-	bool stopped;
-	bool blocked;
-
-	u8 buf_offset;
-	u8 hw_idx;
-
-	dma_addr_t desc_dma;
-	struct sk_buff *rx_head;
-	struct page_frag_cache rx_page;
-};
-
-struct mt76_mcu_ops {
-	u32 headroom;
-	u32 tailroom;
-
-	int (*mcu_send_msg)(struct mt76_dev *dev, int cmd, const void *data,
-			    int len, bool wait_resp);
-	int (*mcu_skb_send_msg)(struct mt76_dev *dev, struct sk_buff *skb,
-				int cmd, int *seq);
-	int (*mcu_parse_response)(struct mt76_dev *dev, int cmd,
-				  struct sk_buff *skb, int seq);
-	u32 (*mcu_rr)(struct mt76_dev *dev, u32 offset);
-	void (*mcu_wr)(struct mt76_dev *dev, u32 offset, u32 val);
-	int (*mcu_wr_rp)(struct mt76_dev *dev, u32 base,
-			 const struct mt76_reg_pair *rp, int len);
-	int (*mcu_rd_rp)(struct mt76_dev *dev, u32 base,
-			 struct mt76_reg_pair *rp, int len);
-	int (*mcu_restart)(struct mt76_dev *dev);
-};
-
-struct mt76_queue_ops {
-	int (*init)(struct mt76_dev *dev,
-		    int (*poll)(struct napi_struct *napi, int budget));
-
-	int (*alloc)(struct mt76_dev *dev, struct mt76_queue *q,
-		     int idx, int n_desc, int bufsize,
-		     u32 ring_base);
-
-	int (*tx_queue_skb)(struct mt76_dev *dev, struct mt76_queue *q,
-			    enum mt76_txq_id qid, struct sk_buff *skb,
-			    struct mt76_wcid *wcid, struct ieee80211_sta *sta);
-
-	int (*tx_queue_skb_raw)(struct mt76_dev *dev, struct mt76_queue *q,
-				struct sk_buff *skb, u32 tx_info);
-
-	void *(*dequeue)(struct mt76_dev *dev, struct mt76_queue *q, bool flush,
-			 int *len, u32 *info, bool *more);
-
-	void (*rx_reset)(struct mt76_dev *dev, enum mt76_rxq_id qid);
-
-	void (*tx_cleanup)(struct mt76_dev *dev, struct mt76_queue *q,
-			   bool flush);
-
-	void (*rx_cleanup)(struct mt76_dev *dev, struct mt76_queue *q);
-
-	void (*kick)(struct mt76_dev *dev, struct mt76_queue *q);
-
-	void (*reset_q)(struct mt76_dev *dev, struct mt76_queue *q);
-};
-
-enum mt76_phy_type {
-	MT_PHY_TYPE_CCK,
-	MT_PHY_TYPE_OFDM,
-	MT_PHY_TYPE_HT,
-	MT_PHY_TYPE_HT_GF,
-	MT_PHY_TYPE_VHT,
-	MT_PHY_TYPE_HE_SU = 8,
-	MT_PHY_TYPE_HE_EXT_SU,
-	MT_PHY_TYPE_HE_TB,
-	MT_PHY_TYPE_HE_MU,
-	__MT_PHY_TYPE_HE_MAX,
-};
-
-struct mt76_sta_stats {
-	u64 tx_mode[__MT_PHY_TYPE_HE_MAX];
-	u64 tx_bw[4];		/* 20, 40, 80, 160 */
-	u64 tx_nss[4];		/* 1, 2, 3, 4 */
-	u64 tx_mcs[16];		/* mcs idx */
-	u64 tx_bytes;
-	u32 tx_packets;
-	u32 tx_retries;
-	u32 tx_failed;
-};
-
-enum mt76_wcid_flags {
-	MT_WCID_FLAG_CHECK_PS,
-	MT_WCID_FLAG_PS,
-	MT_WCID_FLAG_4ADDR,
-	MT_WCID_FLAG_HDR_TRANS,
-};
-
-#define MT76_N_WCIDS 544
-
-/* stored in ieee80211_tx_info::hw_queue */
-#define MT_TX_HW_QUEUE_PHY		GENMASK(3, 2)
-
-DECLARE_EWMA(signal, 10, 8);
-
-#define MT_WCID_TX_INFO_RATE		GENMASK(15, 0)
-#define MT_WCID_TX_INFO_NSS		GENMASK(17, 16)
-#define MT_WCID_TX_INFO_TXPWR_ADJ	GENMASK(25, 18)
-#define MT_WCID_TX_INFO_SET		BIT(31)
-
-struct mt76_wcid {
-	struct mt76_rx_tid __rcu *aggr[IEEE80211_NUM_TIDS];
-
-	atomic_t non_aql_packets;
-	unsigned long flags;
-
-	struct ewma_signal rssi;
-	int inactive_count;
-
-	struct rate_info rate;
-
-	u16 idx;
-	u8 hw_key_idx;
-	u8 hw_key_idx2;
-
-	u8 sta:1;
-	u8 amsdu:1;
-	u8 phy_idx:2;
-
-	u8 rx_check_pn;
-	u8 rx_key_pn[IEEE80211_NUM_TIDS + 1][6];
-	u16 cipher;
-
-	u32 tx_info;
-	bool sw_iv;
-
-	struct list_head list;
-	struct idr pktid;
-
-	struct mt76_sta_stats stats;
-};
-
-struct mt76_txq {
-	u16 wcid;
-
-	u16 agg_ssn;
-	bool send_bar;
-	bool aggr;
-};
-
-struct mt76_txwi_cache {
-	struct list_head list;
-	dma_addr_t dma_addr;
-
-	struct sk_buff *skb;
-};
-
-struct mt76_rx_tid {
-	struct rcu_head rcu_head;
-
-	struct mt76_dev *dev;
-
-	spinlock_t lock;
-	struct delayed_work reorder_work;
-
-	u16 head;
-	u16 size;
-	u16 nframes;
-
-	u8 num;
-
-	u8 started:1, stopped:1, timer_pending:1;
-
-	struct sk_buff *reorder_buf[];
-};
-
-#define MT_TX_CB_DMA_DONE		BIT(0)
-#define MT_TX_CB_TXS_DONE		BIT(1)
-#define MT_TX_CB_TXS_FAILED		BIT(2)
-
-#define MT_PACKET_ID_MASK		GENMASK(6, 0)
-#define MT_PACKET_ID_NO_ACK		0
-#define MT_PACKET_ID_NO_SKB		1
-#define MT_PACKET_ID_WED		2
-#define MT_PACKET_ID_FIRST		3
-#define MT_PACKET_ID_HAS_RATE		BIT(7)
-/* This is timer for when to give up when waiting for TXS callback,
- * with starting time being the time at which the DMA_DONE callback
- * was seen (so, we know packet was processed then, it should not take
- * long after that for firmware to send the TXS callback if it is going
- * to do so.)
- */
-#define MT_TX_STATUS_SKB_TIMEOUT	(HZ / 4)
-
-struct mt76_tx_cb {
-	unsigned long jiffies;
-	u16 wcid;
-	u8 pktid;
-	u8 flags;
-};
-
-enum {
-	MT76_STATE_INITIALIZED,
-	MT76_STATE_RUNNING,
-	MT76_STATE_MCU_RUNNING,
-	MT76_SCANNING,
-	MT76_HW_SCANNING,
-	MT76_HW_SCHED_SCANNING,
-	MT76_RESTART,
-	MT76_RESET,
-	MT76_MCU_RESET,
-	MT76_REMOVED,
-	MT76_READING_STATS,
-	MT76_STATE_POWER_OFF,
-	MT76_STATE_SUSPEND,
-	MT76_STATE_ROC,
-	MT76_STATE_PM,
-};
-
-struct mt76_hw_cap {
-	bool has_2ghz;
-	bool has_5ghz;
-	bool has_6ghz;
-};
-
-#define MT_DRV_TXWI_NO_FREE		BIT(0)
-#define MT_DRV_TX_ALIGNED4_SKBS		BIT(1)
-#define MT_DRV_SW_RX_AIRTIME		BIT(2)
-#define MT_DRV_RX_DMA_HDR		BIT(3)
-#define MT_DRV_HW_MGMT_TXQ		BIT(4)
-#define MT_DRV_AMSDU_OFFLOAD		BIT(5)
-
-struct mt76_driver_ops {
-	u32 drv_flags;
-	u32 survey_flags;
-	u16 txwi_size;
-	u16 token_size;
-	u8 mcs_rates;
-
-	void (*update_survey)(struct mt76_phy *phy);
-
-	int (*tx_prepare_skb)(struct mt76_dev *dev, void *txwi_ptr,
-			      enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			      struct ieee80211_sta *sta,
-			      struct mt76_tx_info *tx_info);
-
-	void (*tx_complete_skb)(struct mt76_dev *dev,
-				struct mt76_queue_entry *e);
-
-	bool (*tx_status_data)(struct mt76_dev *dev, u8 *update);
-
-	bool (*rx_check)(struct mt76_dev *dev, void *data, int len);
-
-	void (*rx_skb)(struct mt76_dev *dev, enum mt76_rxq_id q,
-		       struct sk_buff *skb);
-
-	void (*rx_poll_complete)(struct mt76_dev *dev, enum mt76_rxq_id q);
-
-	void (*sta_ps)(struct mt76_dev *dev, struct ieee80211_sta *sta,
-		       bool ps);
-
-	int (*sta_add)(struct mt76_dev *dev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta);
-
-	void (*sta_assoc)(struct mt76_dev *dev, struct ieee80211_vif *vif,
-			  struct ieee80211_sta *sta);
-
-	void (*sta_remove)(struct mt76_dev *dev, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta);
-};
-
-struct mt76_channel_state {
-	u64 cc_active;
-	u64 cc_busy;
-	u64 cc_rx;
-	u64 cc_bss_rx;
-	u64 cc_tx;
-
-	s8 noise;
-};
-
-struct mt76_sband {
-	struct ieee80211_supported_band sband;
-	struct mt76_channel_state *chan;
-};
-
-/* addr req mask */
-#define MT_VEND_TYPE_EEPROM	BIT(31)
-#define MT_VEND_TYPE_CFG	BIT(30)
-#define MT_VEND_TYPE_MASK	(MT_VEND_TYPE_EEPROM | MT_VEND_TYPE_CFG)
-
-#define MT_VEND_ADDR(type, n)	(MT_VEND_TYPE_##type | (n))
-enum mt_vendor_req {
-	MT_VEND_DEV_MODE =	0x1,
-	MT_VEND_WRITE =		0x2,
-	MT_VEND_POWER_ON =	0x4,
-	MT_VEND_MULTI_WRITE =	0x6,
-	MT_VEND_MULTI_READ =	0x7,
-	MT_VEND_READ_EEPROM =	0x9,
-	MT_VEND_WRITE_FCE =	0x42,
-	MT_VEND_WRITE_CFG =	0x46,
-	MT_VEND_READ_CFG =	0x47,
-	MT_VEND_READ_EXT =	0x63,
-	MT_VEND_WRITE_EXT =	0x66,
-	MT_VEND_FEATURE_SET =	0x91,
-};
-
-enum mt76u_in_ep {
-	MT_EP_IN_PKT_RX,
-	MT_EP_IN_CMD_RESP,
-	__MT_EP_IN_MAX,
-};
-
-enum mt76u_out_ep {
-	MT_EP_OUT_INBAND_CMD,
-	MT_EP_OUT_AC_BE,
-	MT_EP_OUT_AC_BK,
-	MT_EP_OUT_AC_VI,
-	MT_EP_OUT_AC_VO,
-	MT_EP_OUT_HCCA,
-	__MT_EP_OUT_MAX,
-};
-
-struct mt76_mcu {
-	struct mutex mutex;
-	u32 msg_seq;
-	int timeout;
-
-	struct sk_buff_head res_q;
-	wait_queue_head_t wait;
-};
-
-#define MT_TX_SG_MAX_SIZE	8
-#define MT_RX_SG_MAX_SIZE	4
-#define MT_NUM_TX_ENTRIES	256
-#define MT_NUM_RX_ENTRIES	128
-#define MCU_RESP_URB_SIZE	1024
-struct mt76_usb {
-	struct mutex usb_ctrl_mtx;
-	u8 *data;
-	u16 data_len;
-
-	struct mt76_worker status_worker;
-	struct mt76_worker rx_worker;
-
-	struct work_struct stat_work;
-
-	u8 out_ep[__MT_EP_OUT_MAX];
-	u8 in_ep[__MT_EP_IN_MAX];
-	bool sg_en;
-
-	struct mt76u_mcu {
-		u8 *data;
-		/* multiple reads */
-		struct mt76_reg_pair *rp;
-		int rp_len;
-		u32 base;
-	} mcu;
-};
-
-#define MT76S_XMIT_BUF_SZ	0x3fe00
-#define MT76S_NUM_TX_ENTRIES	256
-#define MT76S_NUM_RX_ENTRIES	512
-struct mt76_sdio {
-	struct mt76_worker txrx_worker;
-	struct mt76_worker status_worker;
-	struct mt76_worker net_worker;
-
-	struct work_struct stat_work;
-
-	u8 *xmit_buf;
-	u32 xmit_buf_sz;
-
-	struct sdio_func *func;
-	void *intr_data;
-	u8 hw_ver;
-	wait_queue_head_t wait;
-
-	struct {
-		int pse_data_quota;
-		int ple_data_quota;
-		int pse_mcu_quota;
-		int pse_page_size;
-		int deficit;
-	} sched;
-
-	int (*parse_irq)(struct mt76_dev *dev, struct mt76s_intr *intr);
-};
-
-struct mt76_mmio {
-	void __iomem *regs;
-	spinlock_t irq_lock;
-	u32 irqmask;
-};
-
-struct mt76_rx_status {
-	union {
-		struct mt76_wcid *wcid;
-		u16 wcid_idx;
-	};
-
-	u32 reorder_time;
-
-	u32 ampdu_ref;
-	u32 timestamp;
-
-	u8 iv[6];
-
-	u8 phy_idx:2;
-	u8 aggr:1;
-	u8 qos_ctl;
-	u16 seqno;
-
-	u16 freq;
-	u32 flag;
-	u8 enc_flags;
-	u8 encoding:2, bw:3, he_ru:3;
-	u8 he_gi:2, he_dcm:1;
-	u8 amsdu:1, first_amsdu:1, last_amsdu:1;
-	u8 rate_idx;
-	u8 nss;
-	u8 band;
-	s8 signal;
-	u8 chains;
-	s8 chain_signal[IEEE80211_MAX_CHAINS];
-};
-
-struct mt76_freq_range_power {
-	const struct cfg80211_sar_freq_ranges *range;
-	s8 power;
-};
-
-struct mt76_testmode_ops {
-	int (*set_state)(struct mt76_phy *phy, enum mt76_testmode_state state);
-	int (*set_params)(struct mt76_phy *phy, struct nlattr **tb,
-			  enum mt76_testmode_state new_state);
-	int (*dump_stats)(struct mt76_phy *phy, struct sk_buff *msg);
-};
-
-struct mt76_testmode_data {
-	enum mt76_testmode_state state;
-
-	u32 param_set[DIV_ROUND_UP(NUM_MT76_TM_ATTRS, 32)];
-	struct sk_buff *tx_skb;
-
-	u32 tx_count;
-	u16 tx_mpdu_len;
-
-	u8 tx_rate_mode;
-	u8 tx_rate_idx;
-	u8 tx_rate_nss;
-	u8 tx_rate_sgi;
-	u8 tx_rate_ldpc;
-	u8 tx_rate_stbc;
-	u8 tx_ltf;
-
-	u8 tx_antenna_mask;
-	u8 tx_spe_idx;
-
-	u8 tx_duty_cycle;
-	u32 tx_time;
-	u32 tx_ipg;
-
-	u32 freq_offset;
-
-	u8 tx_power[4];
-	u8 tx_power_control;
-
-	u8 addr[3][ETH_ALEN];
-
-	u32 tx_pending;
-	u32 tx_queued;
-	u16 tx_queued_limit;
-	u32 tx_done;
-	struct {
-		u64 packets[__MT_RXQ_MAX];
-		u64 fcs_error[__MT_RXQ_MAX];
-	} rx_stats;
-};
-
-struct mt76_vif {
-	u8 idx;
-	u8 omac_idx;
-	u8 band_idx;
-	u8 wmm_idx;
-	u8 scan_seq_num;
-	u8 cipher;
-};
-
-struct mt76_phy {
-	struct ieee80211_hw *hw;
-	struct mt76_dev *dev;
-	void *priv;
-
-	unsigned long state;
-	u8 band_idx;
-
-	struct mt76_queue *q_tx[__MT_TXQ_MAX];
-
-	struct cfg80211_chan_def chandef;
-	struct ieee80211_channel *main_chan;
-
-	struct mt76_channel_state *chan_state;
-	enum mt76_dfs_state dfs_state;
-	ktime_t survey_time;
-
-	struct mt76_hw_cap cap;
-	struct mt76_sband sband_2g;
-	struct mt76_sband sband_5g;
-	struct mt76_sband sband_6g;
-
-	u8 macaddr[ETH_ALEN];
-
-	int txpower_cur;
-	u8 antenna_mask;
-	u16 chainmask;
-
-#ifdef CONFIG_NL80211_TESTMODE
-	struct mt76_testmode_data test;
-#endif
-
-	struct delayed_work mac_work;
-	u8 mac_work_count;
-
-	struct {
-		struct sk_buff *head;
-		struct sk_buff **tail;
-		u16 seqno;
-	} rx_amsdu[__MT_RXQ_MAX];
-
-	struct mt76_freq_range_power *frp;
-};
-
-struct mt76_dev {
-	struct mt76_phy phy; /* must be first */
-	struct mt76_phy *phys[__MT_MAX_BAND];
-
-	struct ieee80211_hw *hw;
-
-	spinlock_t lock;
-	spinlock_t cc_lock;
-
-	u32 cur_cc_bss_rx;
-
-	struct mt76_rx_status rx_ampdu_status;
-	u32 rx_ampdu_len;
-	u32 rx_ampdu_ref;
-
-	struct mutex mutex;
-
-	const struct mt76_bus_ops *bus;
-	const struct mt76_driver_ops *drv;
-	const struct mt76_mcu_ops *mcu_ops;
-	struct device *dev;
-	struct device *dma_dev;
-
-	struct mt76_mcu mcu;
-
-	struct net_device napi_dev;
-	struct net_device tx_napi_dev;
-	spinlock_t rx_lock;
-	struct napi_struct napi[__MT_RXQ_MAX];
-	struct sk_buff_head rx_skb[__MT_RXQ_MAX];
-
-	struct list_head txwi_cache;
-	struct mt76_queue *q_mcu[__MT_MCUQ_MAX];
-	struct mt76_queue q_rx[__MT_RXQ_MAX];
-	const struct mt76_queue_ops *queue_ops;
-	int tx_dma_idx[4];
-
-	struct mt76_worker tx_worker;
-	struct napi_struct tx_napi;
-
-	spinlock_t token_lock;
-	struct idr token;
-	u16 token_count;
-	u16 token_size;
-
-	wait_queue_head_t tx_wait;
-	/* spinclock used to protect wcid pktid linked list */
-	spinlock_t status_lock;
-
-	u32 wcid_mask[DIV_ROUND_UP(MT76_N_WCIDS, 32)];
-	u32 wcid_phy_mask[DIV_ROUND_UP(MT76_N_WCIDS, 32)];
-
-	u64 vif_mask;
-
-	struct mt76_wcid global_wcid;
-	struct mt76_wcid __rcu *wcid[MT76_N_WCIDS];
-	struct list_head wcid_list;
-
-	u32 rev;
-
-	u32 aggr_stats[16 * __MT_MAX_BAND];
-
-	struct tasklet_struct pre_tbtt_tasklet;
-	int beacon_int;
-	u8 beacon_mask;
-
-	struct debugfs_blob_wrapper eeprom;
-	struct debugfs_blob_wrapper otp;
-
-	char alpha2[3];
-	enum nl80211_dfs_regions region;
-
-	u32 debugfs_reg;
-
-	struct led_classdev led_cdev;
-	char led_name[32];
-	bool led_al;
-	u8 led_pin;
-
-	u8 csa_complete;
-
-	u32 rxfilter;
-
-#ifdef CONFIG_NL80211_TESTMODE
-	const struct mt76_testmode_ops *test_ops;
-	struct {
-		const char *name;
-		u32 offset;
-	} test_mtd;
-#endif
-	struct workqueue_struct *wq;
-
-	union {
-		struct mt76_mmio mmio;
-		struct mt76_usb usb;
-		struct mt76_sdio sdio;
-	};
-};
-
-struct mt76_power_limits {
-	s8 cck[4];
-	s8 ofdm[8];
-	s8 mcs[4][10];
-	s8 ru[7][12];
-};
-
-struct mt76_ethtool_worker_info {
-	u64 *data;
-	int idx;
-	int initial_stat_idx;
-	int worker_stat_count;
-	int sta_count;
-};
-
-#define CCK_RATE(_idx, _rate) {					\
-	.bitrate = _rate,					\
-	.flags = IEEE80211_RATE_SHORT_PREAMBLE,			\
-	.hw_value = (MT_PHY_TYPE_CCK << 8) | (_idx),		\
-	.hw_value_short = (MT_PHY_TYPE_CCK << 8) | (4 + _idx),	\
-}
-
-#define OFDM_RATE(_idx, _rate) {				\
-	.bitrate = _rate,					\
-	.hw_value = (MT_PHY_TYPE_OFDM << 8) | (_idx),		\
-	.hw_value_short = (MT_PHY_TYPE_OFDM << 8) | (_idx),	\
-}
-
-extern struct ieee80211_rate mt76_rates[12];
-
-#define __mt76_rr(dev, ...)	(dev)->bus->rr((dev), __VA_ARGS__)
-#define __mt76_wr(dev, ...)	(dev)->bus->wr((dev), __VA_ARGS__)
-#define __mt76_rmw(dev, ...)	(dev)->bus->rmw((dev), __VA_ARGS__)
-#define __mt76_wr_copy(dev, ...)	(dev)->bus->write_copy((dev), __VA_ARGS__)
-#define __mt76_rr_copy(dev, ...)	(dev)->bus->read_copy((dev), __VA_ARGS__)
-
-#define __mt76_set(dev, offset, val)	__mt76_rmw(dev, offset, 0, val)
-#define __mt76_clear(dev, offset, val)	__mt76_rmw(dev, offset, val, 0)
-
-#define mt76_rr(dev, ...)	(dev)->mt76.bus->rr(&((dev)->mt76), __VA_ARGS__)
-#define mt76_wr(dev, ...)	(dev)->mt76.bus->wr(&((dev)->mt76), __VA_ARGS__)
-#define mt76_rmw(dev, ...)	(dev)->mt76.bus->rmw(&((dev)->mt76), __VA_ARGS__)
-#define mt76_wr_copy(dev, ...)	(dev)->mt76.bus->write_copy(&((dev)->mt76), __VA_ARGS__)
-#define mt76_rr_copy(dev, ...)	(dev)->mt76.bus->read_copy(&((dev)->mt76), __VA_ARGS__)
-#define mt76_wr_rp(dev, ...)	(dev)->mt76.bus->wr_rp(&((dev)->mt76), __VA_ARGS__)
-#define mt76_rd_rp(dev, ...)	(dev)->mt76.bus->rd_rp(&((dev)->mt76), __VA_ARGS__)
-
-
-#define mt76_mcu_restart(dev, ...)	(dev)->mt76.mcu_ops->mcu_restart(&((dev)->mt76))
-#define __mt76_mcu_restart(dev, ...)	(dev)->mcu_ops->mcu_restart((dev))
-
-#define mt76_set(dev, offset, val)	mt76_rmw(dev, offset, 0, val)
-#define mt76_clear(dev, offset, val)	mt76_rmw(dev, offset, val, 0)
-
-#define mt76_get_field(_dev, _reg, _field)		\
-	FIELD_GET(_field, mt76_rr(dev, _reg))
-
-#define mt76_rmw_field(_dev, _reg, _field, _val)	\
-	mt76_rmw(_dev, _reg, _field, FIELD_PREP(_field, _val))
-
-#define __mt76_rmw_field(_dev, _reg, _field, _val)	\
-	__mt76_rmw(_dev, _reg, _field, FIELD_PREP(_field, _val))
-
-#define mt76_hw(dev) (dev)->mphy.hw
-
-bool __mt76_poll(struct mt76_dev *dev, u32 offset, u32 mask, u32 val,
-		 int timeout);
-
-#define mt76_poll(dev, ...) __mt76_poll(&((dev)->mt76), __VA_ARGS__)
-
-bool __mt76_poll_msec(struct mt76_dev *dev, u32 offset, u32 mask, u32 val,
-		      int timeout);
-
-#define mt76_poll_msec(dev, ...) __mt76_poll_msec(&((dev)->mt76), __VA_ARGS__)
-
-void mt76_mmio_init(struct mt76_dev *dev, void __iomem *regs);
-void mt76_pci_disable_aspm(struct pci_dev *pdev);
-
-static inline u16 mt76_chip(struct mt76_dev *dev)
-{
-	return dev->rev >> 16;
-}
-
-static inline u16 mt76_rev(struct mt76_dev *dev)
-{
-	return dev->rev & 0xffff;
-}
-
-#define mt76xx_chip(dev) mt76_chip(&((dev)->mt76))
-#define mt76xx_rev(dev) mt76_rev(&((dev)->mt76))
-
-#define mt76_init_queues(dev, ...)		(dev)->mt76.queue_ops->init(&((dev)->mt76), __VA_ARGS__)
-#define mt76_queue_alloc(dev, ...)	(dev)->mt76.queue_ops->alloc(&((dev)->mt76), __VA_ARGS__)
-#define mt76_tx_queue_skb_raw(dev, ...)	(dev)->mt76.queue_ops->tx_queue_skb_raw(&((dev)->mt76), __VA_ARGS__)
-#define mt76_tx_queue_skb(dev, ...)	(dev)->mt76.queue_ops->tx_queue_skb(&((dev)->mt76), __VA_ARGS__)
-#define mt76_queue_rx_reset(dev, ...)	(dev)->mt76.queue_ops->rx_reset(&((dev)->mt76), __VA_ARGS__)
-#define mt76_queue_tx_cleanup(dev, ...)	(dev)->mt76.queue_ops->tx_cleanup(&((dev)->mt76), __VA_ARGS__)
-#define mt76_queue_rx_cleanup(dev, ...)	(dev)->mt76.queue_ops->rx_cleanup(&((dev)->mt76), __VA_ARGS__)
-#define mt76_queue_kick(dev, ...)	(dev)->mt76.queue_ops->kick(&((dev)->mt76), __VA_ARGS__)
-#define mt76_queue_reset(dev, ...)	(dev)->mt76.queue_ops->reset_q(&((dev)->mt76), __VA_ARGS__)
-
-#define mt76_for_each_q_rx(dev, i)	\
-	for (i = 0; i < ARRAY_SIZE((dev)->q_rx); i++)	\
-		if ((dev)->q_rx[i].ndesc)
-
-struct mt76_dev *mt76_alloc_device(struct device *pdev, unsigned int size,
-				   const struct ieee80211_ops *ops,
-				   const struct mt76_driver_ops *drv_ops);
-int mt76_register_device(struct mt76_dev *dev, bool vht,
-			 struct ieee80211_rate *rates, int n_rates);
-void mt76_unregister_device(struct mt76_dev *dev);
-void mt76_free_device(struct mt76_dev *dev);
-void mt76_unregister_phy(struct mt76_phy *phy);
-
-struct mt76_phy *mt76_alloc_phy(struct mt76_dev *dev, unsigned int size,
-				const struct ieee80211_ops *ops,
-				u8 band_idx);
-int mt76_register_phy(struct mt76_phy *phy, bool vht,
-		      struct ieee80211_rate *rates, int n_rates);
-
-struct dentry *mt76_register_debugfs_fops(struct mt76_phy *phy,
-					  const struct file_operations *ops);
-static inline struct dentry *mt76_register_debugfs(struct mt76_dev *dev)
-{
-	return mt76_register_debugfs_fops(&dev->phy, NULL);
-}
-
-int mt76_queues_read(struct seq_file *s, void *data);
-void mt76_seq_puts_array(struct seq_file *file, const char *str,
-			 s8 *val, int len);
-
-int mt76_eeprom_init(struct mt76_dev *dev, int len);
-void mt76_eeprom_override(struct mt76_phy *phy);
-int mt76_get_of_eeprom(struct mt76_dev *dev, void *data, int offset, int len);
-
-struct mt76_queue *
-mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc,
-		int ring_base);
-u16 mt76_calculate_default_rate(struct mt76_phy *phy, int rateidx);
-static inline int mt76_init_tx_queue(struct mt76_phy *phy, int qid, int idx,
-				     int n_desc, int ring_base)
-{
-	struct mt76_queue *q;
-
-	q = mt76_init_queue(phy->dev, qid, idx, n_desc, ring_base);
-	if (IS_ERR(q))
-		return PTR_ERR(q);
-
-	phy->q_tx[qid] = q;
-
-	return 0;
-}
-
-static inline int mt76_init_mcu_queue(struct mt76_dev *dev, int qid, int idx,
-				      int n_desc, int ring_base)
-{
-	struct mt76_queue *q;
-
-	q = mt76_init_queue(dev, qid, idx, n_desc, ring_base);
-	if (IS_ERR(q))
-		return PTR_ERR(q);
-
-	dev->q_mcu[qid] = q;
-
-	return 0;
-}
-
-static inline struct mt76_phy *
-mt76_dev_phy(struct mt76_dev *dev, u8 phy_idx)
-{
-	if ((phy_idx == MT_BAND1 && dev->phys[phy_idx]) ||
-	    (phy_idx == MT_BAND2 && dev->phys[phy_idx]))
-		return dev->phys[phy_idx];
-
-	return &dev->phy;
-}
-
-static inline struct ieee80211_hw *
-mt76_phy_hw(struct mt76_dev *dev, u8 phy_idx)
-{
-	return mt76_dev_phy(dev, phy_idx)->hw;
-}
-
-static inline u8 *
-mt76_get_txwi_ptr(struct mt76_dev *dev, struct mt76_txwi_cache *t)
-{
-	return (u8 *)t - dev->drv->txwi_size;
-}
-
-/* increment with wrap-around */
-static inline int mt76_incr(int val, int size)
-{
-	return (val + 1) & (size - 1);
-}
-
-/* decrement with wrap-around */
-static inline int mt76_decr(int val, int size)
-{
-	return (val - 1) & (size - 1);
-}
-
-u8 mt76_ac_to_hwq(u8 ac);
-
-static inline struct ieee80211_txq *
-mtxq_to_txq(struct mt76_txq *mtxq)
-{
-	void *ptr = mtxq;
-
-	return container_of(ptr, struct ieee80211_txq, drv_priv);
-}
-
-static inline struct ieee80211_sta *
-wcid_to_sta(struct mt76_wcid *wcid)
-{
-	void *ptr = wcid;
-
-	if (!wcid || !wcid->sta)
-		return NULL;
-
-	return container_of(ptr, struct ieee80211_sta, drv_priv);
-}
-
-static inline struct mt76_tx_cb *mt76_tx_skb_cb(struct sk_buff *skb)
-{
-	BUILD_BUG_ON(sizeof(struct mt76_tx_cb) >
-		     sizeof(IEEE80211_SKB_CB(skb)->status.status_driver_data));
-	return ((void *)IEEE80211_SKB_CB(skb)->status.status_driver_data);
-}
-
-static inline void *mt76_skb_get_hdr(struct sk_buff *skb)
-{
-	struct mt76_rx_status mstat;
-	u8 *data = skb->data;
-
-	/* Alignment concerns */
-	BUILD_BUG_ON(sizeof(struct ieee80211_radiotap_he) % 4);
-	BUILD_BUG_ON(sizeof(struct ieee80211_radiotap_he_mu) % 4);
-
-	mstat = *((struct mt76_rx_status *)skb->cb);
-
-	if (mstat.flag & RX_FLAG_RADIOTAP_HE)
-		data += sizeof(struct ieee80211_radiotap_he);
-	if (mstat.flag & RX_FLAG_RADIOTAP_HE_MU)
-		data += sizeof(struct ieee80211_radiotap_he_mu);
-
-	return data;
-}
-
-static inline void mt76_insert_hdr_pad(struct sk_buff *skb)
-{
-	int len = ieee80211_get_hdrlen_from_skb(skb);
-
-	if (len % 4 == 0)
-		return;
-
-	skb_push(skb, 2);
-	memmove(skb->data, skb->data + 2, len);
-
-	skb->data[len] = 0;
-	skb->data[len + 1] = 0;
-}
-
-static inline bool mt76_is_skb_pktid(u8 pktid)
-{
-	if (pktid & MT_PACKET_ID_HAS_RATE)
-		return false;
-
-	return pktid >= MT_PACKET_ID_FIRST;
-}
-
-static inline u8 mt76_tx_power_nss_delta(u8 nss)
-{
-	static const u8 nss_delta[4] = { 0, 6, 9, 12 };
-
-	return nss_delta[nss - 1];
-}
-
-static inline bool mt76_testmode_enabled(struct mt76_phy *phy)
-{
-#ifdef CONFIG_NL80211_TESTMODE
-	return phy->test.state != MT76_TM_STATE_OFF;
-#else
-	return false;
-#endif
-}
-
-static inline bool mt76_is_testmode_skb(struct mt76_dev *dev,
-					struct sk_buff *skb,
-					struct ieee80211_hw **hw)
-{
-#ifdef CONFIG_NL80211_TESTMODE
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(dev->phys); i++) {
-		struct mt76_phy *phy = dev->phys[i];
-
-		if (phy && skb == phy->test.tx_skb) {
-			*hw = dev->phys[i]->hw;
-			return true;
-		}
-	}
-	return false;
-#else
-	return false;
-#endif
-}
-
-void mt76_rx(struct mt76_dev *dev, enum mt76_rxq_id q, struct sk_buff *skb);
-void mt76_tx(struct mt76_phy *dev, struct ieee80211_sta *sta,
-	     struct mt76_wcid *wcid, struct sk_buff *skb);
-void mt76_wake_tx_queue(struct ieee80211_hw *hw, struct ieee80211_txq *txq);
-void mt76_stop_tx_queues(struct mt76_phy *phy, struct ieee80211_sta *sta,
-			 bool send_bar);
-void mt76_tx_check_agg_ssn(struct ieee80211_sta *sta, struct sk_buff *skb);
-void mt76_txq_schedule(struct mt76_phy *phy, enum mt76_txq_id qid);
-void mt76_txq_schedule_all(struct mt76_phy *phy);
-void mt76_tx_worker_run(struct mt76_dev *dev);
-void mt76_tx_worker(struct mt76_worker *w);
-void mt76_release_buffered_frames(struct ieee80211_hw *hw,
-				  struct ieee80211_sta *sta,
-				  u16 tids, int nframes,
-				  enum ieee80211_frame_release_type reason,
-				  bool more_data);
-bool mt76_has_tx_pending(struct mt76_phy *phy);
-void mt76_set_channel(struct mt76_phy *phy);
-void mt76_update_survey(struct mt76_phy *phy);
-void mt76_update_survey_active_time(struct mt76_phy *phy, ktime_t time);
-int mt76_get_survey(struct ieee80211_hw *hw, int idx,
-		    struct survey_info *survey);
-void mt76_set_stream_caps(struct mt76_phy *phy, bool vht);
-
-int mt76_rx_aggr_start(struct mt76_dev *dev, struct mt76_wcid *wcid, u8 tid,
-		       u16 ssn, u16 size);
-void mt76_rx_aggr_stop(struct mt76_dev *dev, struct mt76_wcid *wcid, u8 tid);
-
-void mt76_wcid_key_setup(struct mt76_dev *dev, struct mt76_wcid *wcid,
-			 struct ieee80211_key_conf *key);
-
-void mt76_tx_status_lock(struct mt76_dev *dev, struct sk_buff_head *list)
-			 __acquires(&dev->status_lock);
-void mt76_tx_status_unlock(struct mt76_dev *dev, struct sk_buff_head *list)
-			   __releases(&dev->status_lock);
-
-int mt76_tx_status_skb_add(struct mt76_dev *dev, struct mt76_wcid *wcid,
-			   struct sk_buff *skb);
-struct sk_buff *mt76_tx_status_skb_get(struct mt76_dev *dev,
-				       struct mt76_wcid *wcid, int pktid,
-				       struct sk_buff_head *list);
-void mt76_tx_status_skb_done(struct mt76_dev *dev, struct sk_buff *skb,
-			     struct sk_buff_head *list);
-void __mt76_tx_complete_skb(struct mt76_dev *dev, u16 wcid, struct sk_buff *skb,
-			    struct list_head *free_list);
-static inline void
-mt76_tx_complete_skb(struct mt76_dev *dev, u16 wcid, struct sk_buff *skb)
-{
-    __mt76_tx_complete_skb(dev, wcid, skb, NULL);
-}
-
-void mt76_tx_status_check(struct mt76_dev *dev, bool flush);
-int mt76_sta_state(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		   struct ieee80211_sta *sta,
-		   enum ieee80211_sta_state old_state,
-		   enum ieee80211_sta_state new_state);
-void __mt76_sta_remove(struct mt76_dev *dev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta);
-void mt76_sta_pre_rcu_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			     struct ieee80211_sta *sta);
-
-int mt76_get_min_avg_rssi(struct mt76_dev *dev, bool ext_phy);
-
-int mt76_get_txpower(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		     int *dbm);
-int mt76_init_sar_power(struct ieee80211_hw *hw,
-			const struct cfg80211_sar_specs *sar);
-int mt76_get_sar_power(struct mt76_phy *phy,
-		       struct ieee80211_channel *chan,
-		       int power);
-
-void mt76_csa_check(struct mt76_dev *dev);
-void mt76_csa_finish(struct mt76_dev *dev);
-
-int mt76_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant);
-int mt76_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta, bool set);
-void mt76_insert_ccmp_hdr(struct sk_buff *skb, u8 key_id);
-int mt76_get_rate(struct mt76_dev *dev,
-		  struct ieee80211_supported_band *sband,
-		  int idx, bool cck);
-void mt76_sw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		  const u8 *mac);
-void mt76_sw_scan_complete(struct ieee80211_hw *hw,
-			   struct ieee80211_vif *vif);
-enum mt76_dfs_state mt76_phy_dfs_state(struct mt76_phy *phy);
-int mt76_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		      void *data, int len);
-int mt76_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *skb,
-		       struct netlink_callback *cb, void *data, int len);
-int mt76_testmode_set_state(struct mt76_phy *phy, enum mt76_testmode_state state);
-int mt76_testmode_alloc_skb(struct mt76_phy *phy, u32 len);
-
-static inline void mt76_testmode_reset(struct mt76_phy *phy, bool disable)
-{
-#ifdef CONFIG_NL80211_TESTMODE
-	enum mt76_testmode_state state = MT76_TM_STATE_IDLE;
-
-	if (disable || phy->test.state == MT76_TM_STATE_OFF)
-		state = MT76_TM_STATE_OFF;
-
-	mt76_testmode_set_state(phy, state);
-#endif
-}
-
-
-/* internal */
-static inline struct ieee80211_hw *
-mt76_tx_status_get_hw(struct mt76_dev *dev, struct sk_buff *skb)
-{
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	u8 phy_idx = (info->hw_queue & MT_TX_HW_QUEUE_PHY) >> 2;
-	struct ieee80211_hw *hw = mt76_phy_hw(dev, phy_idx);
-
-	info->hw_queue &= ~MT_TX_HW_QUEUE_PHY;
-
-	return hw;
-}
-
-void mt76_put_txwi(struct mt76_dev *dev, struct mt76_txwi_cache *t);
-void mt76_rx_complete(struct mt76_dev *dev, struct sk_buff_head *frames,
-		      struct napi_struct *napi);
-void mt76_rx_poll_complete(struct mt76_dev *dev, enum mt76_rxq_id q,
-			   struct napi_struct *napi);
-void mt76_rx_aggr_reorder(struct sk_buff *skb, struct sk_buff_head *frames);
-void mt76_testmode_tx_pending(struct mt76_phy *phy);
-void mt76_queue_tx_complete(struct mt76_dev *dev, struct mt76_queue *q,
-			    struct mt76_queue_entry *e);
-
-/* usb */
-static inline bool mt76u_urb_error(struct urb *urb)
-{
-	return urb->status &&
-	       urb->status != -ECONNRESET &&
-	       urb->status != -ESHUTDOWN &&
-	       urb->status != -ENOENT;
-}
-
-/* Map hardware queues to usb endpoints */
-static inline u8 q2ep(u8 qid)
-{
-	/* TODO: take management packets to queue 5 */
-	return qid + 1;
-}
-
-static inline int
-mt76u_bulk_msg(struct mt76_dev *dev, void *data, int len, int *actual_len,
-	       int timeout, int ep)
-{
-	struct usb_interface *uintf = to_usb_interface(dev->dev);
-	struct usb_device *udev = interface_to_usbdev(uintf);
-	struct mt76_usb *usb = &dev->usb;
-	unsigned int pipe;
-
-	if (actual_len)
-		pipe = usb_rcvbulkpipe(udev, usb->in_ep[ep]);
-	else
-		pipe = usb_sndbulkpipe(udev, usb->out_ep[ep]);
-
-	return usb_bulk_msg(udev, pipe, data, len, actual_len, timeout);
-}
-
-void mt76_ethtool_worker(struct mt76_ethtool_worker_info *wi,
-			 struct mt76_sta_stats *stats);
-int mt76_skb_adjust_pad(struct sk_buff *skb, int pad);
-int __mt76u_vendor_request(struct mt76_dev *dev, u8 req, u8 req_type,
-			   u16 val, u16 offset, void *buf, size_t len);
-int mt76u_vendor_request(struct mt76_dev *dev, u8 req,
-			 u8 req_type, u16 val, u16 offset,
-			 void *buf, size_t len);
-void mt76u_single_wr(struct mt76_dev *dev, const u8 req,
-		     const u16 offset, const u32 val);
-void mt76u_read_copy(struct mt76_dev *dev, u32 offset,
-		     void *data, int len);
-u32 ___mt76u_rr(struct mt76_dev *dev, u8 req, u8 req_type, u32 addr);
-void ___mt76u_wr(struct mt76_dev *dev, u8 req, u8 req_type,
-		 u32 addr, u32 val);
-int __mt76u_init(struct mt76_dev *dev, struct usb_interface *intf,
-		 struct mt76_bus_ops *ops);
-int mt76u_init(struct mt76_dev *dev, struct usb_interface *intf);
-int mt76u_alloc_mcu_queue(struct mt76_dev *dev);
-int mt76u_alloc_queues(struct mt76_dev *dev);
-void mt76u_stop_tx(struct mt76_dev *dev);
-void mt76u_stop_rx(struct mt76_dev *dev);
-int mt76u_resume_rx(struct mt76_dev *dev);
-void mt76u_queues_deinit(struct mt76_dev *dev);
-
-int mt76s_init(struct mt76_dev *dev, struct sdio_func *func,
-	       const struct mt76_bus_ops *bus_ops);
-int mt76s_alloc_rx_queue(struct mt76_dev *dev, enum mt76_rxq_id qid);
-int mt76s_alloc_tx(struct mt76_dev *dev);
-void mt76s_deinit(struct mt76_dev *dev);
-void mt76s_sdio_irq(struct sdio_func *func);
-void mt76s_txrx_worker(struct mt76_sdio *sdio);
-bool mt76s_txqs_empty(struct mt76_dev *dev);
-int mt76s_hw_init(struct mt76_dev *dev, struct sdio_func *func,
-		  int hw_ver);
-u32 mt76s_rr(struct mt76_dev *dev, u32 offset);
-void mt76s_wr(struct mt76_dev *dev, u32 offset, u32 val);
-u32 mt76s_rmw(struct mt76_dev *dev, u32 offset, u32 mask, u32 val);
-u32 mt76s_read_pcr(struct mt76_dev *dev);
-void mt76s_write_copy(struct mt76_dev *dev, u32 offset,
-		      const void *data, int len);
-void mt76s_read_copy(struct mt76_dev *dev, u32 offset,
-		     void *data, int len);
-int mt76s_wr_rp(struct mt76_dev *dev, u32 base,
-		const struct mt76_reg_pair *data,
-		int len);
-int mt76s_rd_rp(struct mt76_dev *dev, u32 base,
-		struct mt76_reg_pair *data, int len);
-
-struct sk_buff *
-__mt76_mcu_msg_alloc(struct mt76_dev *dev, const void *data,
-		     int len, int data_len, gfp_t gfp);
-static inline struct sk_buff *
-mt76_mcu_msg_alloc(struct mt76_dev *dev, const void *data,
-		   int data_len)
-{
-	return __mt76_mcu_msg_alloc(dev, data, data_len, data_len, GFP_KERNEL);
-}
-
-void mt76_mcu_rx_event(struct mt76_dev *dev, struct sk_buff *skb);
-struct sk_buff *mt76_mcu_get_response(struct mt76_dev *dev,
-				      unsigned long expires);
-int mt76_mcu_send_and_get_msg(struct mt76_dev *dev, int cmd, const void *data,
-			      int len, bool wait_resp, struct sk_buff **ret);
-int mt76_mcu_skb_send_and_get_msg(struct mt76_dev *dev, struct sk_buff *skb,
-				  int cmd, bool wait_resp, struct sk_buff **ret);
-int __mt76_mcu_send_firmware(struct mt76_dev *dev, int cmd, const void *data,
-			     int len, int max_len);
-static inline int
-mt76_mcu_send_firmware(struct mt76_dev *dev, int cmd, const void *data,
-		       int len)
-{
-	int max_len = 4096 - dev->mcu_ops->headroom;
-
-	return __mt76_mcu_send_firmware(dev, cmd, data, len, max_len);
-}
-
-static inline int
-mt76_mcu_send_msg(struct mt76_dev *dev, int cmd, const void *data, int len,
-		  bool wait_resp)
-{
-	return mt76_mcu_send_and_get_msg(dev, cmd, data, len, wait_resp, NULL);
-}
-
-static inline int
-mt76_mcu_skb_send_msg(struct mt76_dev *dev, struct sk_buff *skb, int cmd,
-		      bool wait_resp)
-{
-	return mt76_mcu_skb_send_and_get_msg(dev, skb, cmd, wait_resp, NULL);
-}
-
-void mt76_set_irq_mask(struct mt76_dev *dev, u32 addr, u32 clear, u32 set);
-
-s8 mt76_get_rate_power_limits(struct mt76_phy *phy,
-			      struct ieee80211_channel *chan,
-			      struct mt76_power_limits *dest,
-			      s8 target_power);
-
-struct mt76_txwi_cache *
-mt76_token_release(struct mt76_dev *dev, int token, bool *wake);
-int mt76_token_consume(struct mt76_dev *dev, struct mt76_txwi_cache **ptxwi);
-void __mt76_set_tx_blocked(struct mt76_dev *dev, bool blocked);
-
-static inline void mt76_set_tx_blocked(struct mt76_dev *dev, bool blocked)
-{
-	spin_lock_bh(&dev->token_lock);
-	__mt76_set_tx_blocked(dev, blocked);
-	spin_unlock_bh(&dev->token_lock);
-}
-
-static inline int
-mt76_token_get(struct mt76_dev *dev, struct mt76_txwi_cache **ptxwi)
-{
-	int token;
-
-	spin_lock_bh(&dev->token_lock);
-	token = idr_alloc(&dev->token, *ptxwi, 0, dev->token_size, GFP_ATOMIC);
-	spin_unlock_bh(&dev->token_lock);
-
-	return token;
-}
-
-static inline struct mt76_txwi_cache *
-mt76_token_put(struct mt76_dev *dev, int token)
-{
-	struct mt76_txwi_cache *txwi;
-
-	spin_lock_bh(&dev->token_lock);
-	txwi = idr_remove(&dev->token, token);
-	spin_unlock_bh(&dev->token_lock);
-
-	return txwi;
-}
-
-static inline void mt76_packet_id_init(struct mt76_wcid *wcid)
-{
-	INIT_LIST_HEAD(&wcid->list);
-	idr_init(&wcid->pktid);
-}
-
-static inline void
-mt76_packet_id_flush(struct mt76_dev *dev, struct mt76_wcid *wcid)
-{
-	struct sk_buff_head list;
-
-	mt76_tx_status_lock(dev, &list);
-	mt76_tx_status_skb_get(dev, wcid, -1, &list);
-	mt76_tx_status_unlock(dev, &list);
-
-	idr_destroy(&wcid->pktid);
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/Makefile b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/Makefile
deleted file mode 100644
index 687f64f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-only
-EXTRA_CFLAGS += -Werror -DCONFIG_MT76_LEDS
-obj-m += mt7603e.o
-
-mt7603e-y := \
-	pci.o soc.o main.o init.o mcu.o \
-	core.o dma.o mac.o eeprom.o \
-	beacon.o debugfs.o
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/beacon.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/beacon.c
deleted file mode 100644
index 5807cf2..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/beacon.c
+++ /dev/null
@@ -1,190 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include "mt7603.h"
-
-struct beacon_bc_data {
-	struct mt7603_dev *dev;
-	struct sk_buff_head q;
-	struct sk_buff *tail[MT7603_MAX_INTERFACES];
-	int count[MT7603_MAX_INTERFACES];
-};
-
-static void
-mt7603_update_beacon_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	struct mt7603_dev *dev = (struct mt7603_dev *)priv;
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
-	struct sk_buff *skb = NULL;
-
-	if (!(mdev->beacon_mask & BIT(mvif->idx)))
-		return;
-
-	skb = ieee80211_beacon_get(mt76_hw(dev), vif);
-	if (!skb)
-		return;
-
-	mt76_tx_queue_skb(dev, dev->mphy.q_tx[MT_TXQ_BEACON],
-			  MT_TXQ_BEACON, skb, &mvif->sta.wcid, NULL);
-
-	spin_lock_bh(&dev->ps_lock);
-	mt76_wr(dev, MT_DMA_FQCR0, MT_DMA_FQCR0_BUSY |
-		FIELD_PREP(MT_DMA_FQCR0_TARGET_WCID, mvif->sta.wcid.idx) |
-		FIELD_PREP(MT_DMA_FQCR0_TARGET_QID,
-			   dev->mphy.q_tx[MT_TXQ_CAB]->hw_idx) |
-		FIELD_PREP(MT_DMA_FQCR0_DEST_PORT_ID, 3) |
-		FIELD_PREP(MT_DMA_FQCR0_DEST_QUEUE_ID, 8));
-
-	if (!mt76_poll(dev, MT_DMA_FQCR0, MT_DMA_FQCR0_BUSY, 0, 5000))
-		dev->beacon_check = MT7603_WATCHDOG_TIMEOUT;
-
-	spin_unlock_bh(&dev->ps_lock);
-}
-
-static void
-mt7603_add_buffered_bc(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	struct beacon_bc_data *data = priv;
-	struct mt7603_dev *dev = data->dev;
-	struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
-	struct ieee80211_tx_info *info;
-	struct sk_buff *skb;
-
-	if (!(dev->mt76.beacon_mask & BIT(mvif->idx)))
-		return;
-
-	skb = ieee80211_get_buffered_bc(mt76_hw(dev), vif);
-	if (!skb)
-		return;
-
-	info = IEEE80211_SKB_CB(skb);
-	info->control.vif = vif;
-	info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ;
-	mt76_skb_set_moredata(skb, true);
-	__skb_queue_tail(&data->q, skb);
-	data->tail[mvif->idx] = skb;
-	data->count[mvif->idx]++;
-}
-
-void mt7603_pre_tbtt_tasklet(struct tasklet_struct *t)
-{
-	struct mt7603_dev *dev = from_tasklet(dev, t, mt76.pre_tbtt_tasklet);
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt76_queue *q;
-	struct beacon_bc_data data = {};
-	struct sk_buff *skb;
-	int i, nframes;
-
-	if (mt76_hw(dev)->conf.flags & IEEE80211_CONF_OFFCHANNEL)
-		return;
-
-	data.dev = dev;
-	__skb_queue_head_init(&data.q);
-
-	q = dev->mphy.q_tx[MT_TXQ_BEACON];
-	spin_lock(&q->lock);
-	ieee80211_iterate_active_interfaces_atomic(mt76_hw(dev),
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		mt7603_update_beacon_iter, dev);
-	mt76_queue_kick(dev, q);
-	spin_unlock(&q->lock);
-
-	/* Flush all previous CAB queue packets */
-	mt76_wr(dev, MT_WF_ARB_CAB_FLUSH, GENMASK(30, 16) | BIT(0));
-
-	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_CAB], false);
-
-	mt76_csa_check(mdev);
-	if (mdev->csa_complete)
-		goto out;
-
-	q = dev->mphy.q_tx[MT_TXQ_CAB];
-	do {
-		nframes = skb_queue_len(&data.q);
-		ieee80211_iterate_active_interfaces_atomic(mt76_hw(dev),
-			IEEE80211_IFACE_ITER_RESUME_ALL,
-			mt7603_add_buffered_bc, &data);
-	} while (nframes != skb_queue_len(&data.q) &&
-		 skb_queue_len(&data.q) < 8);
-
-	if (skb_queue_empty(&data.q))
-		goto out;
-
-	for (i = 0; i < ARRAY_SIZE(data.tail); i++) {
-		if (!data.tail[i])
-			continue;
-
-		mt76_skb_set_moredata(data.tail[i], false);
-	}
-
-	spin_lock(&q->lock);
-	while ((skb = __skb_dequeue(&data.q)) != NULL) {
-		struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-		struct ieee80211_vif *vif = info->control.vif;
-		struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
-
-		mt76_tx_queue_skb(dev, q, MT_TXQ_CAB, skb, &mvif->sta.wcid, NULL);
-	}
-	mt76_queue_kick(dev, q);
-	spin_unlock(&q->lock);
-
-	for (i = 0; i < ARRAY_SIZE(data.count); i++)
-		mt76_wr(dev, MT_WF_ARB_CAB_COUNT_B0_REG(i),
-			data.count[i] << MT_WF_ARB_CAB_COUNT_B0_SHIFT(i));
-
-	mt76_wr(dev, MT_WF_ARB_CAB_START,
-		MT_WF_ARB_CAB_START_BSSn(0) |
-		(MT_WF_ARB_CAB_START_BSS0n(1) *
-		 ((1 << (MT7603_MAX_INTERFACES - 1)) - 1)));
-
-out:
-	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_BEACON], false);
-	if (dev->mphy.q_tx[MT_TXQ_BEACON]->queued > hweight8(mdev->beacon_mask))
-		dev->beacon_check++;
-}
-
-void mt7603_beacon_set_timer(struct mt7603_dev *dev, int idx, int intval)
-{
-	u32 pre_tbtt = MT7603_PRE_TBTT_TIME / 64;
-
-	if (idx >= 0) {
-		if (intval)
-			dev->mt76.beacon_mask |= BIT(idx);
-		else
-			dev->mt76.beacon_mask &= ~BIT(idx);
-	}
-
-	if (!dev->mt76.beacon_mask || (!intval && idx < 0)) {
-		mt7603_irq_disable(dev, MT_INT_MAC_IRQ3);
-		mt76_clear(dev, MT_ARB_SCR, MT_ARB_SCR_BCNQ_OPMODE_MASK);
-		mt76_wr(dev, MT_HW_INT_MASK(3), 0);
-		return;
-	}
-
-	dev->mt76.beacon_int = intval;
-	mt76_wr(dev, MT_TBTT,
-		FIELD_PREP(MT_TBTT_PERIOD, intval) | MT_TBTT_CAL_ENABLE);
-
-	mt76_wr(dev, MT_TBTT_TIMER_CFG, 0x99); /* start timer */
-
-	mt76_rmw_field(dev, MT_ARB_SCR, MT_ARB_SCR_BCNQ_OPMODE_MASK,
-		       MT_BCNQ_OPMODE_AP);
-	mt76_clear(dev, MT_ARB_SCR, MT_ARB_SCR_TBTT_BCN_PRIO);
-	mt76_set(dev, MT_ARB_SCR, MT_ARB_SCR_TBTT_BCAST_PRIO);
-
-	mt76_wr(dev, MT_PRE_TBTT, pre_tbtt);
-
-	mt76_set(dev, MT_HW_INT_MASK(3),
-		 MT_HW_INT3_PRE_TBTT0 | MT_HW_INT3_TBTT0);
-
-	mt76_set(dev, MT_WF_ARB_BCN_START,
-		 MT_WF_ARB_BCN_START_BSSn(0) |
-		 ((dev->mt76.beacon_mask >> 1) *
-		  MT_WF_ARB_BCN_START_BSS0n(1)));
-	mt7603_irq_enable(dev, MT_INT_MAC_IRQ3);
-
-	if (dev->mt76.beacon_mask & ~BIT(0))
-		mt76_set(dev, MT_LPON_SBTOR(0), MT_LPON_SBTOR_SUB_BSS_EN);
-	else
-		mt76_clear(dev, MT_LPON_SBTOR(0), MT_LPON_SBTOR_SUB_BSS_EN);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/core.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/core.c
deleted file mode 100644
index 60a996b..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/core.c
+++ /dev/null
@@ -1,65 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include "mt7603.h"
-#include "../trace.h"
-
-void mt7603_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-
-	mt7603_irq_enable(dev, MT_INT_RX_DONE(q));
-}
-
-irqreturn_t mt7603_irq_handler(int irq, void *dev_instance)
-{
-	struct mt7603_dev *dev = dev_instance;
-	u32 intr;
-
-	intr = mt76_rr(dev, MT_INT_SOURCE_CSR);
-	mt76_wr(dev, MT_INT_SOURCE_CSR, intr);
-
-	if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state))
-		return IRQ_NONE;
-
-	trace_dev_irq(&dev->mt76, intr, dev->mt76.mmio.irqmask);
-
-	intr &= dev->mt76.mmio.irqmask;
-
-	if (intr & MT_INT_MAC_IRQ3) {
-		u32 hwintr = mt76_rr(dev, MT_HW_INT_STATUS(3));
-
-		mt76_wr(dev, MT_HW_INT_STATUS(3), hwintr);
-		if (hwintr & MT_HW_INT3_PRE_TBTT0)
-			tasklet_schedule(&dev->mt76.pre_tbtt_tasklet);
-
-		if ((hwintr & MT_HW_INT3_TBTT0) && dev->mt76.csa_complete)
-			mt76_csa_finish(&dev->mt76);
-	}
-
-	if (intr & MT_INT_TX_DONE_ALL) {
-		mt7603_irq_disable(dev, MT_INT_TX_DONE_ALL);
-		napi_schedule(&dev->mt76.tx_napi);
-	}
-
-	if (intr & MT_INT_RX_DONE(0)) {
-		mt7603_irq_disable(dev, MT_INT_RX_DONE(0));
-		napi_schedule(&dev->mt76.napi[0]);
-	}
-
-	if (intr & MT_INT_RX_DONE(1)) {
-		mt7603_irq_disable(dev, MT_INT_RX_DONE(1));
-		napi_schedule(&dev->mt76.napi[1]);
-	}
-
-	return IRQ_HANDLED;
-}
-
-u32 mt7603_reg_map(struct mt7603_dev *dev, u32 addr)
-{
-	u32 base = addr & MT_MCU_PCIE_REMAP_2_BASE;
-	u32 offset = addr & MT_MCU_PCIE_REMAP_2_OFFSET;
-
-	dev->bus_ops->wr(&dev->mt76, MT_MCU_PCIE_REMAP_2, base);
-
-	return MT_PCIE_REMAP_BASE_2 + offset;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/debugfs.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/debugfs.c
deleted file mode 100644
index f52165d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/debugfs.c
+++ /dev/null
@@ -1,118 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include "mt7603.h"
-
-static int
-mt7603_reset_read(struct seq_file *s, void *data)
-{
-	struct mt7603_dev *dev = dev_get_drvdata(s->private);
-	static const char * const reset_cause_str[] = {
-		[RESET_CAUSE_TX_HANG] = "TX hang",
-		[RESET_CAUSE_TX_BUSY] = "TX DMA busy stuck",
-		[RESET_CAUSE_RX_BUSY] = "RX DMA busy stuck",
-		[RESET_CAUSE_RX_PSE_BUSY] = "RX PSE busy stuck",
-		[RESET_CAUSE_BEACON_STUCK] = "Beacon stuck",
-		[RESET_CAUSE_MCU_HANG] = "MCU hang",
-		[RESET_CAUSE_RESET_FAILED] = "PSE reset failed",
-	};
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(reset_cause_str); i++) {
-		if (!reset_cause_str[i])
-			continue;
-
-		seq_printf(s, "%20s: %u\n", reset_cause_str[i],
-			   dev->reset_cause[i]);
-	}
-
-	return 0;
-}
-
-static int
-mt7603_radio_read(struct seq_file *s, void *data)
-{
-	struct mt7603_dev *dev = dev_get_drvdata(s->private);
-
-	seq_printf(s, "Sensitivity: %d\n", dev->sensitivity);
-	seq_printf(s, "False CCA: ofdm=%d cck=%d\n",
-		   dev->false_cca_ofdm, dev->false_cca_cck);
-
-	return 0;
-}
-
-static int
-mt7603_edcca_set(void *data, u64 val)
-{
-	struct mt7603_dev *dev = data;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	dev->ed_monitor_enabled = !!val;
-	dev->ed_monitor = dev->ed_monitor_enabled &&
-			  dev->mt76.region == NL80211_DFS_ETSI;
-	mt7603_init_edcca(dev);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-static int
-mt7603_edcca_get(void *data, u64 *val)
-{
-	struct mt7603_dev *dev = data;
-
-	*val = dev->ed_monitor_enabled;
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_edcca, mt7603_edcca_get,
-			 mt7603_edcca_set, "%lld\n");
-
-static int
-mt7603_ampdu_stat_show(struct seq_file *file, void *data)
-{
-	struct mt7603_dev *dev = file->private;
-	int bound[3], i, range;
-
-	range = mt76_rr(dev, MT_AGG_ASRCR);
-	for (i = 0; i < ARRAY_SIZE(bound); i++)
-		bound[i] = MT_AGG_ASRCR_RANGE(range, i) + 1;
-
-	seq_printf(file, "Length: %8d | ", bound[0]);
-	for (i = 0; i < ARRAY_SIZE(bound) - 1; i++)
-		seq_printf(file, "%3d -%3d | ",
-			   bound[i], bound[i + 1]);
-	seq_puts(file, "\nCount:  ");
-	for (i = 0; i < ARRAY_SIZE(bound); i++)
-		seq_printf(file, "%8d | ", dev->mt76.aggr_stats[i]);
-	seq_puts(file, "\n");
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7603_ampdu_stat);
-
-void mt7603_init_debugfs(struct mt7603_dev *dev)
-{
-	struct dentry *dir;
-
-	dir = mt76_register_debugfs(&dev->mt76);
-	if (!dir)
-		return;
-
-	debugfs_create_file("ampdu_stat", 0400, dir, dev,
-			     &mt7603_ampdu_stat_fops);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "xmit-queues", dir,
-				    mt76_queues_read);
-	debugfs_create_file("edcca", 0600, dir, dev, &fops_edcca);
-	debugfs_create_u32("reset_test", 0600, dir, &dev->reset_test);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "reset", dir,
-				    mt7603_reset_read);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "radio", dir,
-				    mt7603_radio_read);
-	debugfs_create_u8("sensitivity_limit", 0600, dir,
-			    &dev->sensitivity_limit);
-	debugfs_create_bool("dynamic_sensitivity", 0600, dir,
-			    &dev->dynamic_sensitivity);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/dma.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/dma.c
deleted file mode 100644
index 590cff9..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/dma.c
+++ /dev/null
@@ -1,241 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include "mt7603.h"
-#include "mac.h"
-#include "../dma.h"
-
-static void
-mt7603_rx_loopback_skb(struct mt7603_dev *dev, struct sk_buff *skb)
-{
-	static const u8 tid_to_ac[8] = {
-		IEEE80211_AC_BE,
-		IEEE80211_AC_BK,
-		IEEE80211_AC_BK,
-		IEEE80211_AC_BE,
-		IEEE80211_AC_VI,
-		IEEE80211_AC_VI,
-		IEEE80211_AC_VO,
-		IEEE80211_AC_VO
-	};
-	__le32 *txd = (__le32 *)skb->data;
-	struct ieee80211_hdr *hdr;
-	struct ieee80211_sta *sta;
-	struct mt7603_sta *msta;
-	struct mt76_wcid *wcid;
-	void *priv;
-	int idx;
-	u32 val;
-	u8 tid = 0;
-
-	if (skb->len < MT_TXD_SIZE + sizeof(struct ieee80211_hdr))
-		goto free;
-
-	val = le32_to_cpu(txd[1]);
-	idx = FIELD_GET(MT_TXD1_WLAN_IDX, val);
-	skb->priority = FIELD_GET(MT_TXD1_TID, val);
-
-	if (idx >= MT7603_WTBL_STA - 1)
-		goto free;
-
-	wcid = rcu_dereference(dev->mt76.wcid[idx]);
-	if (!wcid)
-		goto free;
-
-	priv = msta = container_of(wcid, struct mt7603_sta, wcid);
-	val = le32_to_cpu(txd[0]);
-	val &= ~(MT_TXD0_P_IDX | MT_TXD0_Q_IDX);
-	val |= FIELD_PREP(MT_TXD0_Q_IDX, MT_TX_HW_QUEUE_MGMT);
-	txd[0] = cpu_to_le32(val);
-
-	sta = container_of(priv, struct ieee80211_sta, drv_priv);
-	hdr = (struct ieee80211_hdr *)&skb->data[MT_TXD_SIZE];
-	if (ieee80211_is_data_qos(hdr->frame_control))
-		tid = *ieee80211_get_qos_ctl(hdr) &
-		      IEEE80211_QOS_CTL_TAG1D_MASK;
-	skb_set_queue_mapping(skb, tid_to_ac[tid]);
-	ieee80211_sta_set_buffered(sta, tid, true);
-
-	spin_lock_bh(&dev->ps_lock);
-	__skb_queue_tail(&msta->psq, skb);
-	if (skb_queue_len(&msta->psq) >= 64) {
-		skb = __skb_dequeue(&msta->psq);
-		dev_kfree_skb(skb);
-	}
-	spin_unlock_bh(&dev->ps_lock);
-	return;
-
-free:
-	dev_kfree_skb(skb);
-}
-
-void mt7603_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			 struct sk_buff *skb)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-	__le32 *rxd = (__le32 *)skb->data;
-	__le32 *end = (__le32 *)&skb->data[skb->len];
-	enum rx_pkt_type type;
-
-	type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
-
-	if (q == MT_RXQ_MCU) {
-		if (type == PKT_TYPE_RX_EVENT)
-			mt76_mcu_rx_event(&dev->mt76, skb);
-		else
-			mt7603_rx_loopback_skb(dev, skb);
-		return;
-	}
-
-	switch (type) {
-	case PKT_TYPE_TXS:
-		for (rxd++; rxd + 5 <= end; rxd += 5)
-			mt7603_mac_add_txs(dev, rxd);
-		dev_kfree_skb(skb);
-		break;
-	case PKT_TYPE_RX_EVENT:
-		mt76_mcu_rx_event(&dev->mt76, skb);
-		return;
-	case PKT_TYPE_NORMAL:
-		if (mt7603_mac_fill_rx(dev, skb) == 0) {
-			mt76_rx(&dev->mt76, q, skb);
-			return;
-		}
-		fallthrough;
-	default:
-		dev_kfree_skb(skb);
-		break;
-	}
-}
-
-static int
-mt7603_init_rx_queue(struct mt7603_dev *dev, struct mt76_queue *q,
-		     int idx, int n_desc, int bufsize)
-{
-	int err;
-
-	err = mt76_queue_alloc(dev, q, idx, n_desc, bufsize,
-			       MT_RX_RING_BASE);
-	if (err < 0)
-		return err;
-
-	mt7603_irq_enable(dev, MT_INT_RX_DONE(idx));
-
-	return 0;
-}
-
-static int mt7603_poll_tx(struct napi_struct *napi, int budget)
-{
-	struct mt7603_dev *dev;
-	int i;
-
-	dev = container_of(napi, struct mt7603_dev, mt76.tx_napi);
-	dev->tx_dma_check = 0;
-
-	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], false);
-	for (i = MT_TXQ_PSD; i >= 0; i--)
-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], false);
-
-	if (napi_complete_done(napi, 0))
-		mt7603_irq_enable(dev, MT_INT_TX_DONE_ALL);
-
-	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], false);
-	for (i = MT_TXQ_PSD; i >= 0; i--)
-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], false);
-
-	mt7603_mac_sta_poll(dev);
-
-	mt76_worker_schedule(&dev->mt76.tx_worker);
-
-	return 0;
-}
-
-int mt7603_dma_init(struct mt7603_dev *dev)
-{
-	static const u8 wmm_queue_map[] = {
-		[IEEE80211_AC_BK] = 0,
-		[IEEE80211_AC_BE] = 1,
-		[IEEE80211_AC_VI] = 2,
-		[IEEE80211_AC_VO] = 3,
-	};
-	int ret;
-	int i;
-
-	mt76_dma_attach(&dev->mt76);
-
-	mt76_clear(dev, MT_WPDMA_GLO_CFG,
-		   MT_WPDMA_GLO_CFG_TX_DMA_EN |
-		   MT_WPDMA_GLO_CFG_RX_DMA_EN |
-		   MT_WPDMA_GLO_CFG_DMA_BURST_SIZE |
-		   MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE);
-
-	mt76_wr(dev, MT_WPDMA_RST_IDX, ~0);
-	mt7603_pse_client_reset(dev);
-
-	for (i = 0; i < ARRAY_SIZE(wmm_queue_map); i++) {
-		ret = mt76_init_tx_queue(&dev->mphy, i, wmm_queue_map[i],
-					 MT7603_TX_RING_SIZE, MT_TX_RING_BASE, 0);
-		if (ret)
-			return ret;
-	}
-
-	ret = mt76_init_tx_queue(&dev->mphy, MT_TXQ_PSD, MT_TX_HW_QUEUE_MGMT,
-				 MT7603_PSD_RING_SIZE, MT_TX_RING_BASE, 0);
-	if (ret)
-		return ret;
-
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WM, MT_TX_HW_QUEUE_MCU,
-				  MT_MCU_RING_SIZE, MT_TX_RING_BASE);
-	if (ret)
-		return ret;
-
-	ret = mt76_init_tx_queue(&dev->mphy, MT_TXQ_BEACON, MT_TX_HW_QUEUE_BCN,
-				 MT_MCU_RING_SIZE, MT_TX_RING_BASE, 0);
-	if (ret)
-		return ret;
-
-	ret = mt76_init_tx_queue(&dev->mphy, MT_TXQ_CAB, MT_TX_HW_QUEUE_BMC,
-				 MT_MCU_RING_SIZE, MT_TX_RING_BASE, 0);
-	if (ret)
-		return ret;
-
-	mt7603_irq_enable(dev,
-			  MT_INT_TX_DONE(IEEE80211_AC_VO) |
-			  MT_INT_TX_DONE(IEEE80211_AC_VI) |
-			  MT_INT_TX_DONE(IEEE80211_AC_BE) |
-			  MT_INT_TX_DONE(IEEE80211_AC_BK) |
-			  MT_INT_TX_DONE(MT_TX_HW_QUEUE_MGMT) |
-			  MT_INT_TX_DONE(MT_TX_HW_QUEUE_MCU) |
-			  MT_INT_TX_DONE(MT_TX_HW_QUEUE_BCN) |
-			  MT_INT_TX_DONE(MT_TX_HW_QUEUE_BMC));
-
-	ret = mt7603_init_rx_queue(dev, &dev->mt76.q_rx[MT_RXQ_MCU], 1,
-				   MT7603_MCU_RX_RING_SIZE, MT_RX_BUF_SIZE);
-	if (ret)
-		return ret;
-
-	ret = mt7603_init_rx_queue(dev, &dev->mt76.q_rx[MT_RXQ_MAIN], 0,
-				   MT7603_RX_RING_SIZE, MT_RX_BUF_SIZE);
-	if (ret)
-		return ret;
-
-	mt76_wr(dev, MT_DELAY_INT_CFG, 0);
-	ret = mt76_init_queues(dev, mt76_dma_rx_poll);
-	if (ret)
-		return ret;
-
-	netif_tx_napi_add(&dev->mt76.tx_napi_dev, &dev->mt76.tx_napi,
-			  mt7603_poll_tx, NAPI_POLL_WEIGHT);
-	napi_enable(&dev->mt76.tx_napi);
-
-	return 0;
-}
-
-void mt7603_dma_cleanup(struct mt7603_dev *dev)
-{
-	mt76_clear(dev, MT_WPDMA_GLO_CFG,
-		   MT_WPDMA_GLO_CFG_TX_DMA_EN |
-		   MT_WPDMA_GLO_CFG_RX_DMA_EN |
-		   MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE);
-
-	mt76_dma_cleanup(&dev->mt76);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/eeprom.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/eeprom.c
deleted file mode 100644
index d951cb8..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/eeprom.c
+++ /dev/null
@@ -1,187 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include <linux/of.h>
-#include "mt7603.h"
-#include "eeprom.h"
-
-static int
-mt7603_efuse_read(struct mt7603_dev *dev, u32 base, u16 addr, u8 *data)
-{
-	u32 val;
-	int i;
-
-	val = mt76_rr(dev, base + MT_EFUSE_CTRL);
-	val &= ~(MT_EFUSE_CTRL_AIN |
-		 MT_EFUSE_CTRL_MODE);
-	val |= FIELD_PREP(MT_EFUSE_CTRL_AIN, addr & ~0xf);
-	val |= MT_EFUSE_CTRL_KICK;
-	mt76_wr(dev, base + MT_EFUSE_CTRL, val);
-
-	if (!mt76_poll(dev, base + MT_EFUSE_CTRL, MT_EFUSE_CTRL_KICK, 0, 1000))
-		return -ETIMEDOUT;
-
-	udelay(2);
-
-	val = mt76_rr(dev, base + MT_EFUSE_CTRL);
-	if ((val & MT_EFUSE_CTRL_AOUT) == MT_EFUSE_CTRL_AOUT ||
-	    WARN_ON_ONCE(!(val & MT_EFUSE_CTRL_VALID))) {
-		memset(data, 0xff, 16);
-		return 0;
-	}
-
-	for (i = 0; i < 4; i++) {
-		val = mt76_rr(dev, base + MT_EFUSE_RDATA(i));
-		put_unaligned_le32(val, data + 4 * i);
-	}
-
-	return 0;
-}
-
-static int
-mt7603_efuse_init(struct mt7603_dev *dev)
-{
-	u32 base = mt7603_reg_map(dev, MT_EFUSE_BASE);
-	int len = MT7603_EEPROM_SIZE;
-	void *buf;
-	int ret, i;
-
-	if (mt76_rr(dev, base + MT_EFUSE_BASE_CTRL) & MT_EFUSE_BASE_CTRL_EMPTY)
-		return 0;
-
-	dev->mt76.otp.data = devm_kzalloc(dev->mt76.dev, len, GFP_KERNEL);
-	dev->mt76.otp.size = len;
-	if (!dev->mt76.otp.data)
-		return -ENOMEM;
-
-	buf = dev->mt76.otp.data;
-	for (i = 0; i + 16 <= len; i += 16) {
-		ret = mt7603_efuse_read(dev, base, i, buf + i);
-		if (ret)
-			return ret;
-	}
-
-	return 0;
-}
-
-static bool
-mt7603_has_cal_free_data(struct mt7603_dev *dev, u8 *efuse)
-{
-	if (!efuse[MT_EE_TEMP_SENSOR_CAL])
-		return false;
-
-	if (get_unaligned_le16(efuse + MT_EE_TX_POWER_0_START_2G) == 0)
-		return false;
-
-	if (get_unaligned_le16(efuse + MT_EE_TX_POWER_1_START_2G) == 0)
-		return false;
-
-	if (!efuse[MT_EE_CP_FT_VERSION])
-		return false;
-
-	if (!efuse[MT_EE_XTAL_FREQ_OFFSET])
-		return false;
-
-	if (!efuse[MT_EE_XTAL_WF_RFCAL])
-		return false;
-
-	return true;
-}
-
-static void
-mt7603_apply_cal_free_data(struct mt7603_dev *dev, u8 *efuse)
-{
-	static const u8 cal_free_bytes[] = {
-		MT_EE_TEMP_SENSOR_CAL,
-		MT_EE_CP_FT_VERSION,
-		MT_EE_XTAL_FREQ_OFFSET,
-		MT_EE_XTAL_WF_RFCAL,
-		/* Skip for MT7628 */
-		MT_EE_TX_POWER_0_START_2G,
-		MT_EE_TX_POWER_0_START_2G + 1,
-		MT_EE_TX_POWER_1_START_2G,
-		MT_EE_TX_POWER_1_START_2G + 1,
-	};
-	struct device_node *np = dev->mt76.dev->of_node;
-	u8 *eeprom = dev->mt76.eeprom.data;
-	int n = ARRAY_SIZE(cal_free_bytes);
-	int i;
-
-	if (!np || !of_property_read_bool(np, "mediatek,eeprom-merge-otp"))
-		return;
-
-	if (!mt7603_has_cal_free_data(dev, efuse))
-		return;
-
-	if (is_mt7628(dev))
-		n -= 4;
-
-	for (i = 0; i < n; i++) {
-		int offset = cal_free_bytes[i];
-
-		eeprom[offset] = efuse[offset];
-	}
-}
-
-static int
-mt7603_eeprom_load(struct mt7603_dev *dev)
-{
-	int ret;
-
-	ret = mt76_eeprom_init(&dev->mt76, MT7603_EEPROM_SIZE);
-	if (ret < 0)
-		return ret;
-
-	return mt7603_efuse_init(dev);
-}
-
-static int mt7603_check_eeprom(struct mt76_dev *dev)
-{
-	u16 val = get_unaligned_le16(dev->eeprom.data);
-
-	switch (val) {
-	case 0x7628:
-	case 0x7603:
-	case 0x7600:
-		return 0;
-	default:
-		return -EINVAL;
-	}
-}
-
-static inline bool is_mt7688(struct mt7603_dev *dev)
-{
-	return mt76_rr(dev, MT_EFUSE_BASE + 0x64) & BIT(4);
-}
-
-int mt7603_eeprom_init(struct mt7603_dev *dev)
-{
-	u8 *eeprom;
-	int ret;
-
-	ret = mt7603_eeprom_load(dev);
-	if (ret < 0)
-		return ret;
-
-	if (dev->mt76.otp.data) {
-		if (mt7603_check_eeprom(&dev->mt76) == 0)
-			mt7603_apply_cal_free_data(dev, dev->mt76.otp.data);
-		else
-			memcpy(dev->mt76.eeprom.data, dev->mt76.otp.data,
-			       MT7603_EEPROM_SIZE);
-	}
-
-	eeprom = (u8 *)dev->mt76.eeprom.data;
-	dev->mphy.cap.has_2ghz = true;
-	memcpy(dev->mphy.macaddr, eeprom + MT_EE_MAC_ADDR, ETH_ALEN);
-
-	/* Check for 1SS devices */
-	dev->mphy.antenna_mask = 3;
-	if (FIELD_GET(MT_EE_NIC_CONF_0_RX_PATH, eeprom[MT_EE_NIC_CONF_0]) == 1 ||
-	    FIELD_GET(MT_EE_NIC_CONF_0_TX_PATH, eeprom[MT_EE_NIC_CONF_0]) == 1 ||
-	    is_mt7688(dev))
-		dev->mphy.antenna_mask = 1;
-
-	mt76_eeprom_override(&dev->mphy);
-
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/eeprom.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/eeprom.h
deleted file mode 100644
index 4687d6d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/eeprom.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-
-#ifndef __MT7603_EEPROM_H
-#define __MT7603_EEPROM_H
-
-#include "mt7603.h"
-
-enum mt7603_eeprom_field {
-	MT_EE_CHIP_ID =				0x000,
-	MT_EE_VERSION =				0x002,
-	MT_EE_MAC_ADDR =			0x004,
-	MT_EE_NIC_CONF_0 =			0x034,
-	MT_EE_NIC_CONF_1 =			0x036,
-	MT_EE_NIC_CONF_2 =			0x042,
-
-	MT_EE_XTAL_TRIM_1 =			0x03a,
-
-	MT_EE_RSSI_OFFSET_2G =			0x046,
-	MT_EE_WIFI_RF_SETTING =			0x048,
-	MT_EE_RSSI_OFFSET_5G =			0x04a,
-
-	MT_EE_TX_POWER_DELTA_BW40 =		0x050,
-	MT_EE_TX_POWER_DELTA_BW80 =		0x052,
-
-	MT_EE_TX_POWER_EXT_PA_5G =		0x054,
-
-	MT_EE_TEMP_SENSOR_CAL =			0x055,
-
-	MT_EE_TX_POWER_0_START_2G =		0x056,
-	MT_EE_TX_POWER_1_START_2G =		0x05c,
-
-	/* used as byte arrays */
-#define MT_TX_POWER_GROUP_SIZE_5G		5
-#define MT_TX_POWER_GROUPS_5G			6
-	MT_EE_TX_POWER_0_START_5G =		0x062,
-
-	MT_EE_TX_POWER_0_GRP3_TX_POWER_DELTA =	0x074,
-	MT_EE_TX_POWER_0_GRP4_TSSI_SLOPE =	0x076,
-
-	MT_EE_TX_POWER_1_START_5G =		0x080,
-
-	MT_EE_TX_POWER_CCK =			0x0a0,
-	MT_EE_TX_POWER_OFDM_2G_6M =		0x0a2,
-	MT_EE_TX_POWER_OFDM_2G_24M =		0x0a4,
-	MT_EE_TX_POWER_OFDM_2G_54M =		0x0a6,
-	MT_EE_TX_POWER_HT_BPSK_QPSK =		0x0a8,
-	MT_EE_TX_POWER_HT_16_64_QAM =		0x0aa,
-	MT_EE_TX_POWER_HT_64_QAM =		0x0ac,
-
-	MT_EE_ELAN_RX_MODE_GAIN =		0x0c0,
-	MT_EE_ELAN_RX_MODE_NF =			0x0c1,
-	MT_EE_ELAN_RX_MODE_P1DB =		0x0c2,
-
-	MT_EE_ELAN_BYPASS_MODE_GAIN =		0x0c3,
-	MT_EE_ELAN_BYPASS_MODE_NF =		0x0c4,
-	MT_EE_ELAN_BYPASS_MODE_P1DB =		0x0c5,
-
-	MT_EE_STEP_NUM_NEG_6_7 =		0x0c6,
-	MT_EE_STEP_NUM_NEG_4_5 =		0x0c8,
-	MT_EE_STEP_NUM_NEG_2_3 =		0x0ca,
-	MT_EE_STEP_NUM_NEG_0_1 =		0x0cc,
-
-	MT_EE_REF_STEP_24G =			0x0ce,
-
-	MT_EE_STEP_NUM_PLUS_1_2 =		0x0d0,
-	MT_EE_STEP_NUM_PLUS_3_4 =		0x0d2,
-	MT_EE_STEP_NUM_PLUS_5_6 =		0x0d4,
-	MT_EE_STEP_NUM_PLUS_7 =			0x0d6,
-
-	MT_EE_CP_FT_VERSION =			0x0f0,
-
-	MT_EE_TX_POWER_TSSI_OFF =		0x0f2,
-
-	MT_EE_XTAL_FREQ_OFFSET =		0x0f4,
-	MT_EE_XTAL_TRIM_2_COMP =		0x0f5,
-	MT_EE_XTAL_TRIM_3_COMP =		0x0f6,
-	MT_EE_XTAL_WF_RFCAL =			0x0f7,
-
-	__MT_EE_MAX
-};
-
-enum mt7603_eeprom_source {
-	MT_EE_SRC_PROM,
-	MT_EE_SRC_EFUSE,
-	MT_EE_SRC_FLASH,
-};
-
-#define MT_EE_NIC_CONF_0_RX_PATH		GENMASK(3, 0)
-#define MT_EE_NIC_CONF_0_TX_PATH		GENMASK(7, 4)
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/init.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/init.c
deleted file mode 100644
index 031d39a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/init.c
+++ /dev/null
@@ -1,562 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include <linux/etherdevice.h>
-#include "mt7603.h"
-#include "mac.h"
-#include "eeprom.h"
-
-const struct mt76_driver_ops mt7603_drv_ops = {
-	.txwi_size = MT_TXD_SIZE,
-	.drv_flags = MT_DRV_SW_RX_AIRTIME,
-	.survey_flags = SURVEY_INFO_TIME_TX,
-	.tx_prepare_skb = mt7603_tx_prepare_skb,
-	.tx_complete_skb = mt7603_tx_complete_skb,
-	.rx_skb = mt7603_queue_rx_skb,
-	.rx_poll_complete = mt7603_rx_poll_complete,
-	.sta_ps = mt7603_sta_ps,
-	.sta_add = mt7603_sta_add,
-	.sta_assoc = mt7603_sta_assoc,
-	.sta_remove = mt7603_sta_remove,
-	.update_survey = mt7603_update_channel,
-};
-
-static void
-mt7603_set_tmac_template(struct mt7603_dev *dev)
-{
-	u32 desc[5] = {
-		[1] = FIELD_PREP(MT_TXD3_REM_TX_COUNT, 0xf),
-		[3] = MT_TXD5_SW_POWER_MGMT
-	};
-	u32 addr;
-	int i;
-
-	addr = mt7603_reg_map(dev, MT_CLIENT_BASE_PHYS_ADDR);
-	addr += MT_CLIENT_TMAC_INFO_TEMPLATE;
-	for (i = 0; i < ARRAY_SIZE(desc); i++)
-		mt76_wr(dev, addr + 4 * i, desc[i]);
-}
-
-static void
-mt7603_dma_sched_init(struct mt7603_dev *dev)
-{
-	int page_size = 128;
-	int page_count;
-	int max_len = 1792;
-	int max_amsdu_pages = 4096 / page_size;
-	int max_mcu_len = 4096;
-	int max_beacon_len = 512 * 4 + max_len;
-	int max_mcast_pages = 4 * max_len / page_size;
-	int reserved_count = 0;
-	int beacon_pages;
-	int mcu_pages;
-	int i;
-
-	page_count = mt76_get_field(dev, MT_PSE_FC_P0,
-				    MT_PSE_FC_P0_MAX_QUOTA);
-	beacon_pages = 4 * (max_beacon_len / page_size);
-	mcu_pages = max_mcu_len / page_size;
-
-	mt76_wr(dev, MT_PSE_FRP,
-		FIELD_PREP(MT_PSE_FRP_P0, 7) |
-		FIELD_PREP(MT_PSE_FRP_P1, 6) |
-		FIELD_PREP(MT_PSE_FRP_P2_RQ2, 4));
-
-	mt76_wr(dev, MT_HIGH_PRIORITY_1, 0x55555553);
-	mt76_wr(dev, MT_HIGH_PRIORITY_2, 0x78555555);
-
-	mt76_wr(dev, MT_QUEUE_PRIORITY_1, 0x2b1a096e);
-	mt76_wr(dev, MT_QUEUE_PRIORITY_2, 0x785f4d3c);
-
-	mt76_wr(dev, MT_PRIORITY_MASK, 0xffffffff);
-
-	mt76_wr(dev, MT_SCH_1, page_count | (2 << 28));
-	mt76_wr(dev, MT_SCH_2, max_amsdu_pages);
-
-	for (i = 0; i <= 4; i++)
-		mt76_wr(dev, MT_PAGE_COUNT(i), max_amsdu_pages);
-	reserved_count += 5 * max_amsdu_pages;
-
-	mt76_wr(dev, MT_PAGE_COUNT(5), mcu_pages);
-	reserved_count += mcu_pages;
-
-	mt76_wr(dev, MT_PAGE_COUNT(7), beacon_pages);
-	reserved_count += beacon_pages;
-
-	mt76_wr(dev, MT_PAGE_COUNT(8), max_mcast_pages);
-	reserved_count += max_mcast_pages;
-
-	if (is_mt7603(dev))
-		reserved_count = 0;
-
-	mt76_wr(dev, MT_RSV_MAX_THRESH, page_count - reserved_count);
-
-	if (is_mt7603(dev) && mt76xx_rev(dev) >= MT7603_REV_E2) {
-		mt76_wr(dev, MT_GROUP_THRESH(0),
-			page_count - beacon_pages - mcu_pages);
-		mt76_wr(dev, MT_GROUP_THRESH(1), beacon_pages);
-		mt76_wr(dev, MT_BMAP_0, 0x0080ff5f);
-		mt76_wr(dev, MT_GROUP_THRESH(2), mcu_pages);
-		mt76_wr(dev, MT_BMAP_1, 0x00000020);
-	} else {
-		mt76_wr(dev, MT_GROUP_THRESH(0), page_count);
-		mt76_wr(dev, MT_BMAP_0, 0xffff);
-	}
-
-	mt76_wr(dev, MT_SCH_4, 0);
-
-	for (i = 0; i <= 15; i++)
-		mt76_wr(dev, MT_TXTIME_THRESH(i), 0xfffff);
-
-	mt76_set(dev, MT_SCH_4, BIT(6));
-}
-
-static void
-mt7603_phy_init(struct mt7603_dev *dev)
-{
-	int rx_chains = dev->mphy.antenna_mask;
-	int tx_chains = hweight8(rx_chains) - 1;
-
-	mt76_rmw(dev, MT_WF_RMAC_RMCR,
-		 (MT_WF_RMAC_RMCR_SMPS_MODE |
-		  MT_WF_RMAC_RMCR_RX_STREAMS),
-		 (FIELD_PREP(MT_WF_RMAC_RMCR_SMPS_MODE, 3) |
-		  FIELD_PREP(MT_WF_RMAC_RMCR_RX_STREAMS, rx_chains)));
-
-	mt76_rmw_field(dev, MT_TMAC_TCR, MT_TMAC_TCR_TX_STREAMS,
-		       tx_chains);
-
-	dev->agc0 = mt76_rr(dev, MT_AGC(0));
-	dev->agc3 = mt76_rr(dev, MT_AGC(3));
-}
-
-static void
-mt7603_mac_init(struct mt7603_dev *dev)
-{
-	u8 bc_addr[ETH_ALEN];
-	u32 addr;
-	int i;
-
-	mt76_wr(dev, MT_AGG_BA_SIZE_LIMIT_0,
-		(MT_AGG_SIZE_LIMIT(0) << 0 * MT_AGG_BA_SIZE_LIMIT_SHIFT) |
-		(MT_AGG_SIZE_LIMIT(1) << 1 * MT_AGG_BA_SIZE_LIMIT_SHIFT) |
-		(MT_AGG_SIZE_LIMIT(2) << 2 * MT_AGG_BA_SIZE_LIMIT_SHIFT) |
-		(MT_AGG_SIZE_LIMIT(3) << 3 * MT_AGG_BA_SIZE_LIMIT_SHIFT));
-
-	mt76_wr(dev, MT_AGG_BA_SIZE_LIMIT_1,
-		(MT_AGG_SIZE_LIMIT(4) << 0 * MT_AGG_BA_SIZE_LIMIT_SHIFT) |
-		(MT_AGG_SIZE_LIMIT(5) << 1 * MT_AGG_BA_SIZE_LIMIT_SHIFT) |
-		(MT_AGG_SIZE_LIMIT(6) << 2 * MT_AGG_BA_SIZE_LIMIT_SHIFT) |
-		(MT_AGG_SIZE_LIMIT(7) << 3 * MT_AGG_BA_SIZE_LIMIT_SHIFT));
-
-	mt76_wr(dev, MT_AGG_LIMIT,
-		FIELD_PREP(MT_AGG_LIMIT_AC(0), 24) |
-		FIELD_PREP(MT_AGG_LIMIT_AC(1), 24) |
-		FIELD_PREP(MT_AGG_LIMIT_AC(2), 24) |
-		FIELD_PREP(MT_AGG_LIMIT_AC(3), 24));
-
-	mt76_wr(dev, MT_AGG_LIMIT_1,
-		FIELD_PREP(MT_AGG_LIMIT_AC(0), 24) |
-		FIELD_PREP(MT_AGG_LIMIT_AC(1), 24) |
-		FIELD_PREP(MT_AGG_LIMIT_AC(2), 24) |
-		FIELD_PREP(MT_AGG_LIMIT_AC(3), 24));
-
-	mt76_wr(dev, MT_AGG_CONTROL,
-		FIELD_PREP(MT_AGG_CONTROL_BAR_RATE, 0x4b) |
-		FIELD_PREP(MT_AGG_CONTROL_CFEND_RATE, 0x69) |
-		MT_AGG_CONTROL_NO_BA_AR_RULE);
-
-	mt76_wr(dev, MT_AGG_RETRY_CONTROL,
-		FIELD_PREP(MT_AGG_RETRY_CONTROL_BAR_LIMIT, 1) |
-		FIELD_PREP(MT_AGG_RETRY_CONTROL_RTS_LIMIT, 15));
-
-	mt76_wr(dev, MT_DMA_DCR0, MT_DMA_DCR0_RX_VEC_DROP |
-		FIELD_PREP(MT_DMA_DCR0_MAX_RX_LEN, 4096));
-
-	mt76_rmw(dev, MT_DMA_VCFR0, BIT(0), BIT(13));
-	mt76_rmw(dev, MT_DMA_TMCFR0, BIT(0) | BIT(1), BIT(13));
-
-	mt76_clear(dev, MT_WF_RMAC_TMR_PA, BIT(31));
-
-	mt76_set(dev, MT_WF_RMACDR, MT_WF_RMACDR_MAXLEN_20BIT);
-	mt76_rmw(dev, MT_WF_RMAC_MAXMINLEN, 0xffffff, 0x19000);
-
-	mt76_wr(dev, MT_WF_RFCR1, 0);
-
-	mt76_set(dev, MT_TMAC_TCR, MT_TMAC_TCR_RX_RIFS_MODE);
-
-	mt7603_set_tmac_template(dev);
-
-	/* Enable RX group to HIF */
-	addr = mt7603_reg_map(dev, MT_CLIENT_BASE_PHYS_ADDR);
-	mt76_set(dev, addr + MT_CLIENT_RXINF, MT_CLIENT_RXINF_RXSH_GROUPS);
-
-	/* Enable RX group to MCU */
-	mt76_set(dev, MT_DMA_DCR1, GENMASK(13, 11));
-
-	mt76_rmw_field(dev, MT_AGG_PCR_RTS, MT_AGG_PCR_RTS_PKT_THR, 3);
-	mt76_set(dev, MT_TMAC_PCR, MT_TMAC_PCR_SPE_EN);
-
-	/* include preamble detection in CCA trigger signal */
-	mt76_rmw_field(dev, MT_TXREQ, MT_TXREQ_CCA_SRC_SEL, 2);
-
-	mt76_wr(dev, MT_RXREQ, 4);
-
-	/* Configure all rx packets to HIF */
-	mt76_wr(dev, MT_DMA_RCFR0, 0xc0000000);
-
-	/* Configure MCU txs selection with aggregation */
-	mt76_wr(dev, MT_DMA_TCFR0,
-		FIELD_PREP(MT_DMA_TCFR_TXS_AGGR_TIMEOUT, 1) | /* 32 us */
-		MT_DMA_TCFR_TXS_AGGR_COUNT);
-
-	/* Configure HIF txs selection with aggregation */
-	mt76_wr(dev, MT_DMA_TCFR1,
-		FIELD_PREP(MT_DMA_TCFR_TXS_AGGR_TIMEOUT, 1) | /* 32 us */
-		MT_DMA_TCFR_TXS_AGGR_COUNT | /* Maximum count */
-		MT_DMA_TCFR_TXS_BIT_MAP);
-
-	mt76_wr(dev, MT_MCU_PCIE_REMAP_1, MT_PSE_WTBL_2_PHYS_ADDR);
-
-	for (i = 0; i < MT7603_WTBL_SIZE; i++)
-		mt7603_wtbl_clear(dev, i);
-
-	eth_broadcast_addr(bc_addr);
-	mt7603_wtbl_init(dev, MT7603_WTBL_RESERVED, -1, bc_addr);
-	dev->global_sta.wcid.idx = MT7603_WTBL_RESERVED;
-	rcu_assign_pointer(dev->mt76.wcid[MT7603_WTBL_RESERVED],
-			   &dev->global_sta.wcid);
-
-	mt76_rmw_field(dev, MT_LPON_BTEIR, MT_LPON_BTEIR_MBSS_MODE, 2);
-	mt76_rmw_field(dev, MT_WF_RMACDR, MT_WF_RMACDR_MBSSID_MASK, 2);
-
-	mt76_wr(dev, MT_AGG_ARUCR,
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(0), 7) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(1), 2) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(2), 2) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(3), 2) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(4), 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(5), 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(6), 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(7), 1));
-
-	mt76_wr(dev, MT_AGG_ARDCR,
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(0), MT7603_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(1), MT7603_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(2), MT7603_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(3), MT7603_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(4), MT7603_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(5), MT7603_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(6), MT7603_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(7), MT7603_RATE_RETRY - 1));
-
-	mt76_wr(dev, MT_AGG_ARCR,
-		(FIELD_PREP(MT_AGG_ARCR_RTS_RATE_THR, 2) |
-		 MT_AGG_ARCR_RATE_DOWN_RATIO_EN |
-		 FIELD_PREP(MT_AGG_ARCR_RATE_DOWN_RATIO, 1) |
-		 FIELD_PREP(MT_AGG_ARCR_RATE_UP_EXTRA_TH, 4)));
-
-	mt76_set(dev, MT_WTBL_RMVTCR, MT_WTBL_RMVTCR_RX_MV_MODE);
-
-	mt76_clear(dev, MT_SEC_SCR, MT_SEC_SCR_MASK_ORDER);
-	mt76_clear(dev, MT_SEC_SCR, BIT(18));
-
-	/* Set secondary beacon time offsets */
-	for (i = 0; i <= 4; i++)
-		mt76_rmw_field(dev, MT_LPON_SBTOR(i), MT_LPON_SBTOR_TIME_OFFSET,
-			       (i + 1) * (20 + 4096));
-}
-
-static int
-mt7603_init_hardware(struct mt7603_dev *dev)
-{
-	int i, ret;
-
-	mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
-
-	ret = mt7603_eeprom_init(dev);
-	if (ret < 0)
-		return ret;
-
-	ret = mt7603_dma_init(dev);
-	if (ret)
-		return ret;
-
-	mt76_wr(dev, MT_WPDMA_GLO_CFG, 0x52000850);
-	mt7603_mac_dma_start(dev);
-	dev->rxfilter = mt76_rr(dev, MT_WF_RFCR);
-	set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-
-	for (i = 0; i < MT7603_WTBL_SIZE; i++) {
-		mt76_wr(dev, MT_PSE_RTA, MT_PSE_RTA_BUSY | MT_PSE_RTA_WRITE |
-			FIELD_PREP(MT_PSE_RTA_TAG_ID, i));
-		mt76_poll(dev, MT_PSE_RTA, MT_PSE_RTA_BUSY, 0, 5000);
-	}
-
-	ret = mt7603_mcu_init(dev);
-	if (ret)
-		return ret;
-
-	mt7603_dma_sched_init(dev);
-	mt7603_mcu_set_eeprom(dev);
-	mt7603_phy_init(dev);
-	mt7603_mac_init(dev);
-
-	return 0;
-}
-
-static const struct ieee80211_iface_limit if_limits[] = {
-	{
-		.max = 1,
-		.types = BIT(NL80211_IFTYPE_ADHOC)
-	}, {
-		.max = MT7603_MAX_INTERFACES,
-		.types = BIT(NL80211_IFTYPE_STATION) |
-#ifdef CONFIG_MAC80211_MESH
-			 BIT(NL80211_IFTYPE_MESH_POINT) |
-#endif
-			 BIT(NL80211_IFTYPE_P2P_CLIENT) |
-			 BIT(NL80211_IFTYPE_P2P_GO) |
-			 BIT(NL80211_IFTYPE_AP)
-	 },
-};
-
-static const struct ieee80211_iface_combination if_comb[] = {
-	{
-		.limits = if_limits,
-		.n_limits = ARRAY_SIZE(if_limits),
-		.max_interfaces = 4,
-		.num_different_channels = 1,
-		.beacon_int_infra_match = true,
-	}
-};
-
-static void mt7603_led_set_config(struct mt76_dev *mt76, u8 delay_on,
-				  u8 delay_off)
-{
-	struct mt7603_dev *dev = container_of(mt76, struct mt7603_dev,
-					      mt76);
-	u32 val, addr;
-
-	val = FIELD_PREP(MT_LED_STATUS_DURATION, 0xffff) |
-	      FIELD_PREP(MT_LED_STATUS_OFF, delay_off) |
-	      FIELD_PREP(MT_LED_STATUS_ON, delay_on);
-
-	addr = mt7603_reg_map(dev, MT_LED_STATUS_0(mt76->led_pin));
-	mt76_wr(dev, addr, val);
-	addr = mt7603_reg_map(dev, MT_LED_STATUS_1(mt76->led_pin));
-	mt76_wr(dev, addr, val);
-
-	val = MT_LED_CTRL_REPLAY(mt76->led_pin) |
-	      MT_LED_CTRL_KICK(mt76->led_pin);
-	if (mt76->led_al)
-		val |= MT_LED_CTRL_POLARITY(mt76->led_pin);
-	addr = mt7603_reg_map(dev, MT_LED_CTRL);
-	mt76_wr(dev, addr, val);
-}
-
-static int mt7603_led_set_blink(struct led_classdev *led_cdev,
-				unsigned long *delay_on,
-				unsigned long *delay_off)
-{
-	struct mt76_dev *mt76 = container_of(led_cdev, struct mt76_dev,
-					     led_cdev);
-	u8 delta_on, delta_off;
-
-	delta_off = max_t(u8, *delay_off / 10, 1);
-	delta_on = max_t(u8, *delay_on / 10, 1);
-
-	mt7603_led_set_config(mt76, delta_on, delta_off);
-	return 0;
-}
-
-static void mt7603_led_set_brightness(struct led_classdev *led_cdev,
-				      enum led_brightness brightness)
-{
-	struct mt76_dev *mt76 = container_of(led_cdev, struct mt76_dev,
-					     led_cdev);
-
-	if (!brightness)
-		mt7603_led_set_config(mt76, 0, 0xff);
-	else
-		mt7603_led_set_config(mt76, 0xff, 0);
-}
-
-static u32 __mt7603_reg_addr(struct mt7603_dev *dev, u32 addr)
-{
-	if (addr < 0x100000)
-		return addr;
-
-	return mt7603_reg_map(dev, addr);
-}
-
-static u32 mt7603_rr(struct mt76_dev *mdev, u32 offset)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-	u32 addr = __mt7603_reg_addr(dev, offset);
-
-	return dev->bus_ops->rr(mdev, addr);
-}
-
-static void mt7603_wr(struct mt76_dev *mdev, u32 offset, u32 val)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-	u32 addr = __mt7603_reg_addr(dev, offset);
-
-	dev->bus_ops->wr(mdev, addr, val);
-}
-
-static u32 mt7603_rmw(struct mt76_dev *mdev, u32 offset, u32 mask, u32 val)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-	u32 addr = __mt7603_reg_addr(dev, offset);
-
-	return dev->bus_ops->rmw(mdev, addr, mask, val);
-}
-
-static void
-mt7603_regd_notifier(struct wiphy *wiphy,
-		     struct regulatory_request *request)
-{
-	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-	struct mt7603_dev *dev = hw->priv;
-
-	dev->mt76.region = request->dfs_region;
-	dev->ed_monitor = dev->ed_monitor_enabled &&
-			  dev->mt76.region == NL80211_DFS_ETSI;
-}
-
-static int
-mt7603_txpower_signed(int val)
-{
-	bool sign = val & BIT(6);
-
-	if (!(val & BIT(7)))
-		return 0;
-
-	val &= GENMASK(5, 0);
-	if (!sign)
-		val = -val;
-
-	return val;
-}
-
-static void
-mt7603_init_txpower(struct mt7603_dev *dev,
-		    struct ieee80211_supported_band *sband)
-{
-	struct ieee80211_channel *chan;
-	u8 *eeprom = (u8 *)dev->mt76.eeprom.data;
-	int target_power = eeprom[MT_EE_TX_POWER_0_START_2G + 2] & ~BIT(7);
-	u8 *rate_power = &eeprom[MT_EE_TX_POWER_CCK];
-	bool ext_pa = eeprom[MT_EE_NIC_CONF_0 + 1] & BIT(1);
-	int max_offset, cur_offset;
-	int i;
-
-	if (ext_pa && is_mt7603(dev))
-		target_power = eeprom[MT_EE_TX_POWER_TSSI_OFF] & ~BIT(7);
-
-	if (target_power & BIT(6))
-		target_power = -(target_power & GENMASK(5, 0));
-
-	max_offset = 0;
-	for (i = 0; i < 14; i++) {
-		cur_offset = mt7603_txpower_signed(rate_power[i]);
-		max_offset = max(max_offset, cur_offset);
-	}
-
-	target_power += max_offset;
-
-	dev->tx_power_limit = target_power;
-	dev->mphy.txpower_cur = target_power;
-
-	target_power = DIV_ROUND_UP(target_power, 2);
-
-	/* add 3 dBm for 2SS devices (combined output) */
-	if (dev->mphy.antenna_mask & BIT(1))
-		target_power += 3;
-
-	for (i = 0; i < sband->n_channels; i++) {
-		chan = &sband->channels[i];
-		chan->max_power = min_t(int, chan->max_reg_power, target_power);
-		chan->orig_mpwr = target_power;
-	}
-}
-
-int mt7603_register_device(struct mt7603_dev *dev)
-{
-	struct mt76_bus_ops *bus_ops;
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	struct wiphy *wiphy = hw->wiphy;
-	int ret;
-
-	dev->bus_ops = dev->mt76.bus;
-	bus_ops = devm_kmemdup(dev->mt76.dev, dev->bus_ops, sizeof(*bus_ops),
-			       GFP_KERNEL);
-	if (!bus_ops)
-		return -ENOMEM;
-
-	bus_ops->rr = mt7603_rr;
-	bus_ops->wr = mt7603_wr;
-	bus_ops->rmw = mt7603_rmw;
-	dev->mt76.bus = bus_ops;
-
-	INIT_LIST_HEAD(&dev->sta_poll_list);
-	spin_lock_init(&dev->sta_poll_lock);
-	spin_lock_init(&dev->ps_lock);
-
-	INIT_DELAYED_WORK(&dev->mphy.mac_work, mt7603_mac_work);
-	tasklet_setup(&dev->mt76.pre_tbtt_tasklet, mt7603_pre_tbtt_tasklet);
-
-	dev->slottime = 9;
-	dev->sensitivity_limit = 28;
-	dev->dynamic_sensitivity = true;
-
-	ret = mt7603_init_hardware(dev);
-	if (ret)
-		return ret;
-
-	hw->queues = 4;
-	hw->max_rates = 3;
-	hw->max_report_rates = 7;
-	hw->max_rate_tries = 11;
-
-	hw->radiotap_timestamp.units_pos =
-		IEEE80211_RADIOTAP_TIMESTAMP_UNIT_US;
-
-	hw->sta_data_size = sizeof(struct mt7603_sta);
-	hw->vif_data_size = sizeof(struct mt7603_vif);
-
-	wiphy->iface_combinations = if_comb;
-	wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
-
-	ieee80211_hw_set(hw, TX_STATUS_NO_AMPDU_LEN);
-	ieee80211_hw_set(hw, HOST_BROADCAST_PS_BUFFERING);
-	ieee80211_hw_set(hw, NEEDS_UNIQUE_STA_ADDR);
-
-	/* init led callbacks */
-	if (IS_ENABLED(CONFIG_MT76_LEDS)) {
-		dev->mt76.led_cdev.brightness_set = mt7603_led_set_brightness;
-		dev->mt76.led_cdev.blink_set = mt7603_led_set_blink;
-	}
-
-	wiphy->reg_notifier = mt7603_regd_notifier;
-
-	ret = mt76_register_device(&dev->mt76, true, mt76_rates,
-				   ARRAY_SIZE(mt76_rates));
-	if (ret)
-		return ret;
-
-	mt7603_init_debugfs(dev);
-	mt7603_init_txpower(dev, &dev->mphy.sband_2g.sband);
-
-	return 0;
-}
-
-void mt7603_unregister_device(struct mt7603_dev *dev)
-{
-	tasklet_disable(&dev->mt76.pre_tbtt_tasklet);
-	mt76_unregister_device(&dev->mt76);
-	mt7603_mcu_exit(dev);
-	mt7603_dma_cleanup(dev);
-	mt76_free_device(&dev->mt76);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mac.c
deleted file mode 100644
index 17713c8..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mac.c
+++ /dev/null
@@ -1,1876 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include <linux/etherdevice.h>
-#include <linux/timekeeping.h>
-#include "mt7603.h"
-#include "mac.h"
-#include "../trace.h"
-
-#define MT_PSE_PAGE_SIZE	128
-
-static u32
-mt7603_ac_queue_mask0(u32 mask)
-{
-	u32 ret = 0;
-
-	ret |= GENMASK(3, 0) * !!(mask & BIT(0));
-	ret |= GENMASK(8, 5) * !!(mask & BIT(1));
-	ret |= GENMASK(13, 10) * !!(mask & BIT(2));
-	ret |= GENMASK(19, 16) * !!(mask & BIT(3));
-	return ret;
-}
-
-static void
-mt76_stop_tx_ac(struct mt7603_dev *dev, u32 mask)
-{
-	mt76_set(dev, MT_WF_ARB_TX_STOP_0, mt7603_ac_queue_mask0(mask));
-}
-
-static void
-mt76_start_tx_ac(struct mt7603_dev *dev, u32 mask)
-{
-	mt76_set(dev, MT_WF_ARB_TX_START_0, mt7603_ac_queue_mask0(mask));
-}
-
-void mt7603_mac_reset_counters(struct mt7603_dev *dev)
-{
-	int i;
-
-	for (i = 0; i < 2; i++)
-		mt76_rr(dev, MT_TX_AGG_CNT(i));
-
-	memset(dev->mt76.aggr_stats, 0, sizeof(dev->mt76.aggr_stats));
-}
-
-void mt7603_mac_set_timing(struct mt7603_dev *dev)
-{
-	u32 cck = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 231) |
-		  FIELD_PREP(MT_TIMEOUT_VAL_CCA, 48);
-	u32 ofdm = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 60) |
-		   FIELD_PREP(MT_TIMEOUT_VAL_CCA, 24);
-	int offset = 3 * dev->coverage_class;
-	u32 reg_offset = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, offset) |
-			 FIELD_PREP(MT_TIMEOUT_VAL_CCA, offset);
-	bool is_5ghz = dev->mphy.chandef.chan->band == NL80211_BAND_5GHZ;
-	int sifs;
-	u32 val;
-
-	if (is_5ghz)
-		sifs = 16;
-	else
-		sifs = 10;
-
-	mt76_set(dev, MT_ARB_SCR,
-		 MT_ARB_SCR_TX_DISABLE | MT_ARB_SCR_RX_DISABLE);
-	udelay(1);
-
-	mt76_wr(dev, MT_TIMEOUT_CCK, cck + reg_offset);
-	mt76_wr(dev, MT_TIMEOUT_OFDM, ofdm + reg_offset);
-	mt76_wr(dev, MT_IFS,
-		FIELD_PREP(MT_IFS_EIFS, 360) |
-		FIELD_PREP(MT_IFS_RIFS, 2) |
-		FIELD_PREP(MT_IFS_SIFS, sifs) |
-		FIELD_PREP(MT_IFS_SLOT, dev->slottime));
-
-	if (dev->slottime < 20 || is_5ghz)
-		val = MT7603_CFEND_RATE_DEFAULT;
-	else
-		val = MT7603_CFEND_RATE_11B;
-
-	mt76_rmw_field(dev, MT_AGG_CONTROL, MT_AGG_CONTROL_CFEND_RATE, val);
-
-	mt76_clear(dev, MT_ARB_SCR,
-		   MT_ARB_SCR_TX_DISABLE | MT_ARB_SCR_RX_DISABLE);
-}
-
-static void
-mt7603_wtbl_update(struct mt7603_dev *dev, int idx, u32 mask)
-{
-	mt76_rmw(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_WLAN_IDX,
-		 FIELD_PREP(MT_WTBL_UPDATE_WLAN_IDX, idx) | mask);
-
-	mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000);
-}
-
-static u32
-mt7603_wtbl1_addr(int idx)
-{
-	return MT_WTBL1_BASE + idx * MT_WTBL1_SIZE;
-}
-
-static u32
-mt7603_wtbl2_addr(int idx)
-{
-	/* Mapped to WTBL2 */
-	return MT_PCIE_REMAP_BASE_1 + idx * MT_WTBL2_SIZE;
-}
-
-static u32
-mt7603_wtbl3_addr(int idx)
-{
-	u32 base = mt7603_wtbl2_addr(MT7603_WTBL_SIZE);
-
-	return base + idx * MT_WTBL3_SIZE;
-}
-
-static u32
-mt7603_wtbl4_addr(int idx)
-{
-	u32 base = mt7603_wtbl3_addr(MT7603_WTBL_SIZE);
-
-	return base + idx * MT_WTBL4_SIZE;
-}
-
-void mt7603_wtbl_init(struct mt7603_dev *dev, int idx, int vif,
-		      const u8 *mac_addr)
-{
-	const void *_mac = mac_addr;
-	u32 addr = mt7603_wtbl1_addr(idx);
-	u32 w0 = 0, w1 = 0;
-	int i;
-
-	if (_mac) {
-		w0 = FIELD_PREP(MT_WTBL1_W0_ADDR_HI,
-				get_unaligned_le16(_mac + 4));
-		w1 = FIELD_PREP(MT_WTBL1_W1_ADDR_LO,
-				get_unaligned_le32(_mac));
-	}
-
-	if (vif < 0)
-		vif = 0;
-	else
-		w0 |= MT_WTBL1_W0_RX_CHECK_A1;
-	w0 |= FIELD_PREP(MT_WTBL1_W0_MUAR_IDX, vif);
-
-	mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000);
-
-	mt76_set(dev, addr + 0 * 4, w0);
-	mt76_set(dev, addr + 1 * 4, w1);
-	mt76_set(dev, addr + 2 * 4, MT_WTBL1_W2_ADMISSION_CONTROL);
-
-	mt76_stop_tx_ac(dev, GENMASK(3, 0));
-	addr = mt7603_wtbl2_addr(idx);
-	for (i = 0; i < MT_WTBL2_SIZE; i += 4)
-		mt76_wr(dev, addr + i, 0);
-	mt7603_wtbl_update(dev, idx, MT_WTBL_UPDATE_WTBL2);
-	mt76_start_tx_ac(dev, GENMASK(3, 0));
-
-	addr = mt7603_wtbl3_addr(idx);
-	for (i = 0; i < MT_WTBL3_SIZE; i += 4)
-		mt76_wr(dev, addr + i, 0);
-
-	addr = mt7603_wtbl4_addr(idx);
-	for (i = 0; i < MT_WTBL4_SIZE; i += 4)
-		mt76_wr(dev, addr + i, 0);
-
-	mt7603_wtbl_update(dev, idx, MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-}
-
-static void
-mt7603_wtbl_set_skip_tx(struct mt7603_dev *dev, int idx, bool enabled)
-{
-	u32 addr = mt7603_wtbl1_addr(idx);
-	u32 val = mt76_rr(dev, addr + 3 * 4);
-
-	val &= ~MT_WTBL1_W3_SKIP_TX;
-	val |= enabled * MT_WTBL1_W3_SKIP_TX;
-
-	mt76_wr(dev, addr + 3 * 4, val);
-}
-
-void mt7603_filter_tx(struct mt7603_dev *dev, int idx, bool abort)
-{
-	int i, port, queue;
-
-	if (abort) {
-		port = 3; /* PSE */
-		queue = 8; /* free queue */
-	} else {
-		port = 0; /* HIF */
-		queue = 1; /* MCU queue */
-	}
-
-	mt7603_wtbl_set_skip_tx(dev, idx, true);
-
-	mt76_wr(dev, MT_TX_ABORT, MT_TX_ABORT_EN |
-			FIELD_PREP(MT_TX_ABORT_WCID, idx));
-
-	for (i = 0; i < 4; i++) {
-		mt76_wr(dev, MT_DMA_FQCR0, MT_DMA_FQCR0_BUSY |
-			FIELD_PREP(MT_DMA_FQCR0_TARGET_WCID, idx) |
-			FIELD_PREP(MT_DMA_FQCR0_TARGET_QID, i) |
-			FIELD_PREP(MT_DMA_FQCR0_DEST_PORT_ID, port) |
-			FIELD_PREP(MT_DMA_FQCR0_DEST_QUEUE_ID, queue));
-
-		mt76_poll(dev, MT_DMA_FQCR0, MT_DMA_FQCR0_BUSY, 0, 15000);
-	}
-
-	WARN_ON_ONCE(mt76_rr(dev, MT_DMA_FQCR0) & MT_DMA_FQCR0_BUSY);
-
-	mt76_wr(dev, MT_TX_ABORT, 0);
-
-	mt7603_wtbl_set_skip_tx(dev, idx, false);
-}
-
-void mt7603_wtbl_set_smps(struct mt7603_dev *dev, struct mt7603_sta *sta,
-			  bool enabled)
-{
-	u32 addr = mt7603_wtbl1_addr(sta->wcid.idx);
-
-	if (sta->smps == enabled)
-		return;
-
-	mt76_rmw_field(dev, addr + 2 * 4, MT_WTBL1_W2_SMPS, enabled);
-	sta->smps = enabled;
-}
-
-void mt7603_wtbl_set_ps(struct mt7603_dev *dev, struct mt7603_sta *sta,
-			bool enabled)
-{
-	int idx = sta->wcid.idx;
-	u32 addr;
-
-	spin_lock_bh(&dev->ps_lock);
-
-	if (sta->ps == enabled)
-		goto out;
-
-	mt76_wr(dev, MT_PSE_RTA,
-		FIELD_PREP(MT_PSE_RTA_TAG_ID, idx) |
-		FIELD_PREP(MT_PSE_RTA_PORT_ID, 0) |
-		FIELD_PREP(MT_PSE_RTA_QUEUE_ID, 1) |
-		FIELD_PREP(MT_PSE_RTA_REDIRECT_EN, enabled) |
-		MT_PSE_RTA_WRITE | MT_PSE_RTA_BUSY);
-
-	mt76_poll(dev, MT_PSE_RTA, MT_PSE_RTA_BUSY, 0, 5000);
-
-	if (enabled)
-		mt7603_filter_tx(dev, idx, false);
-
-	addr = mt7603_wtbl1_addr(idx);
-	mt76_set(dev, MT_WTBL1_OR, MT_WTBL1_OR_PSM_WRITE);
-	mt76_rmw(dev, addr + 3 * 4, MT_WTBL1_W3_POWER_SAVE,
-		 enabled * MT_WTBL1_W3_POWER_SAVE);
-	mt76_clear(dev, MT_WTBL1_OR, MT_WTBL1_OR_PSM_WRITE);
-	sta->ps = enabled;
-
-out:
-	spin_unlock_bh(&dev->ps_lock);
-}
-
-void mt7603_wtbl_clear(struct mt7603_dev *dev, int idx)
-{
-	int wtbl2_frame_size = MT_PSE_PAGE_SIZE / MT_WTBL2_SIZE;
-	int wtbl2_frame = idx / wtbl2_frame_size;
-	int wtbl2_entry = idx % wtbl2_frame_size;
-
-	int wtbl3_base_frame = MT_WTBL3_OFFSET / MT_PSE_PAGE_SIZE;
-	int wtbl3_frame_size = MT_PSE_PAGE_SIZE / MT_WTBL3_SIZE;
-	int wtbl3_frame = wtbl3_base_frame + idx / wtbl3_frame_size;
-	int wtbl3_entry = (idx % wtbl3_frame_size) * 2;
-
-	int wtbl4_base_frame = MT_WTBL4_OFFSET / MT_PSE_PAGE_SIZE;
-	int wtbl4_frame_size = MT_PSE_PAGE_SIZE / MT_WTBL4_SIZE;
-	int wtbl4_frame = wtbl4_base_frame + idx / wtbl4_frame_size;
-	int wtbl4_entry = idx % wtbl4_frame_size;
-
-	u32 addr = MT_WTBL1_BASE + idx * MT_WTBL1_SIZE;
-	int i;
-
-	mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000);
-
-	mt76_wr(dev, addr + 0 * 4,
-		MT_WTBL1_W0_RX_CHECK_A1 |
-		MT_WTBL1_W0_RX_CHECK_A2 |
-		MT_WTBL1_W0_RX_VALID);
-	mt76_wr(dev, addr + 1 * 4, 0);
-	mt76_wr(dev, addr + 2 * 4, 0);
-
-	mt76_set(dev, MT_WTBL1_OR, MT_WTBL1_OR_PSM_WRITE);
-
-	mt76_wr(dev, addr + 3 * 4,
-		FIELD_PREP(MT_WTBL1_W3_WTBL2_FRAME_ID, wtbl2_frame) |
-		FIELD_PREP(MT_WTBL1_W3_WTBL2_ENTRY_ID, wtbl2_entry) |
-		FIELD_PREP(MT_WTBL1_W3_WTBL4_FRAME_ID, wtbl4_frame) |
-		MT_WTBL1_W3_I_PSM | MT_WTBL1_W3_KEEP_I_PSM);
-	mt76_wr(dev, addr + 4 * 4,
-		FIELD_PREP(MT_WTBL1_W4_WTBL3_FRAME_ID, wtbl3_frame) |
-		FIELD_PREP(MT_WTBL1_W4_WTBL3_ENTRY_ID, wtbl3_entry) |
-		FIELD_PREP(MT_WTBL1_W4_WTBL4_ENTRY_ID, wtbl4_entry));
-
-	mt76_clear(dev, MT_WTBL1_OR, MT_WTBL1_OR_PSM_WRITE);
-
-	addr = mt7603_wtbl2_addr(idx);
-
-	/* Clear BA information */
-	mt76_wr(dev, addr + (15 * 4), 0);
-
-	mt76_stop_tx_ac(dev, GENMASK(3, 0));
-	for (i = 2; i <= 4; i++)
-		mt76_wr(dev, addr + (i * 4), 0);
-	mt7603_wtbl_update(dev, idx, MT_WTBL_UPDATE_WTBL2);
-	mt76_start_tx_ac(dev, GENMASK(3, 0));
-
-	mt7603_wtbl_update(dev, idx, MT_WTBL_UPDATE_RX_COUNT_CLEAR);
-	mt7603_wtbl_update(dev, idx, MT_WTBL_UPDATE_TX_COUNT_CLEAR);
-	mt7603_wtbl_update(dev, idx, MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-}
-
-void mt7603_wtbl_update_cap(struct mt7603_dev *dev, struct ieee80211_sta *sta)
-{
-	struct mt7603_sta *msta = (struct mt7603_sta *)sta->drv_priv;
-	int idx = msta->wcid.idx;
-	u8 ampdu_density;
-	u32 addr;
-	u32 val;
-
-	addr = mt7603_wtbl1_addr(idx);
-
-	ampdu_density = sta->ht_cap.ampdu_density;
-	if (ampdu_density < IEEE80211_HT_MPDU_DENSITY_4)
-		ampdu_density = IEEE80211_HT_MPDU_DENSITY_4;
-
-	val = mt76_rr(dev, addr + 2 * 4);
-	val &= MT_WTBL1_W2_KEY_TYPE | MT_WTBL1_W2_ADMISSION_CONTROL;
-	val |= FIELD_PREP(MT_WTBL1_W2_AMPDU_FACTOR, sta->ht_cap.ampdu_factor) |
-	       FIELD_PREP(MT_WTBL1_W2_MPDU_DENSITY, sta->ht_cap.ampdu_density) |
-	       MT_WTBL1_W2_TXS_BAF_REPORT;
-
-	if (sta->ht_cap.cap)
-		val |= MT_WTBL1_W2_HT;
-	if (sta->vht_cap.cap)
-		val |= MT_WTBL1_W2_VHT;
-
-	mt76_wr(dev, addr + 2 * 4, val);
-
-	addr = mt7603_wtbl2_addr(idx);
-	val = mt76_rr(dev, addr + 9 * 4);
-	val &= ~(MT_WTBL2_W9_SHORT_GI_20 | MT_WTBL2_W9_SHORT_GI_40 |
-		 MT_WTBL2_W9_SHORT_GI_80);
-	if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20)
-		val |= MT_WTBL2_W9_SHORT_GI_20;
-	if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40)
-		val |= MT_WTBL2_W9_SHORT_GI_40;
-	mt76_wr(dev, addr + 9 * 4, val);
-}
-
-void mt7603_mac_rx_ba_reset(struct mt7603_dev *dev, void *addr, u8 tid)
-{
-	mt76_wr(dev, MT_BA_CONTROL_0, get_unaligned_le32(addr));
-	mt76_wr(dev, MT_BA_CONTROL_1,
-		(get_unaligned_le16(addr + 4) |
-		 FIELD_PREP(MT_BA_CONTROL_1_TID, tid) |
-		 MT_BA_CONTROL_1_RESET));
-}
-
-void mt7603_mac_tx_ba_reset(struct mt7603_dev *dev, int wcid, int tid,
-			    int ba_size)
-{
-	u32 addr = mt7603_wtbl2_addr(wcid);
-	u32 tid_mask = FIELD_PREP(MT_WTBL2_W15_BA_EN_TIDS, BIT(tid)) |
-		       (MT_WTBL2_W15_BA_WIN_SIZE <<
-			(tid * MT_WTBL2_W15_BA_WIN_SIZE_SHIFT));
-	u32 tid_val;
-	int i;
-
-	if (ba_size < 0) {
-		/* disable */
-		mt76_clear(dev, addr + (15 * 4), tid_mask);
-		return;
-	}
-
-	for (i = 7; i > 0; i--) {
-		if (ba_size >= MT_AGG_SIZE_LIMIT(i))
-			break;
-	}
-
-	tid_val = FIELD_PREP(MT_WTBL2_W15_BA_EN_TIDS, BIT(tid)) |
-		  i << (tid * MT_WTBL2_W15_BA_WIN_SIZE_SHIFT);
-
-	mt76_rmw(dev, addr + (15 * 4), tid_mask, tid_val);
-}
-
-void mt7603_mac_sta_poll(struct mt7603_dev *dev)
-{
-	static const u8 ac_to_tid[4] = {
-		[IEEE80211_AC_BE] = 0,
-		[IEEE80211_AC_BK] = 1,
-		[IEEE80211_AC_VI] = 4,
-		[IEEE80211_AC_VO] = 6
-	};
-	struct ieee80211_sta *sta;
-	struct mt7603_sta *msta;
-	u32 total_airtime = 0;
-	u32 airtime[4];
-	u32 addr;
-	int i;
-
-	rcu_read_lock();
-
-	while (1) {
-		bool clear = false;
-
-		spin_lock_bh(&dev->sta_poll_lock);
-		if (list_empty(&dev->sta_poll_list)) {
-			spin_unlock_bh(&dev->sta_poll_lock);
-			break;
-		}
-
-		msta = list_first_entry(&dev->sta_poll_list, struct mt7603_sta,
-					poll_list);
-		list_del_init(&msta->poll_list);
-		spin_unlock_bh(&dev->sta_poll_lock);
-
-		addr = mt7603_wtbl4_addr(msta->wcid.idx);
-		for (i = 0; i < 4; i++) {
-			u32 airtime_last = msta->tx_airtime_ac[i];
-
-			msta->tx_airtime_ac[i] = mt76_rr(dev, addr + i * 8);
-			airtime[i] = msta->tx_airtime_ac[i] - airtime_last;
-			airtime[i] *= 32;
-			total_airtime += airtime[i];
-
-			if (msta->tx_airtime_ac[i] & BIT(22))
-				clear = true;
-		}
-
-		if (clear) {
-			mt7603_wtbl_update(dev, msta->wcid.idx,
-					   MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-			memset(msta->tx_airtime_ac, 0,
-			       sizeof(msta->tx_airtime_ac));
-		}
-
-		if (!msta->wcid.sta)
-			continue;
-
-		sta = container_of((void *)msta, struct ieee80211_sta, drv_priv);
-		for (i = 0; i < 4; i++) {
-			struct mt76_queue *q = dev->mphy.q_tx[i];
-			u8 qidx = q->hw_idx;
-			u8 tid = ac_to_tid[i];
-			u32 txtime = airtime[qidx];
-
-			if (!txtime)
-				continue;
-
-			ieee80211_sta_register_airtime(sta, tid, txtime, 0);
-		}
-	}
-
-	rcu_read_unlock();
-
-	if (!total_airtime)
-		return;
-
-	spin_lock_bh(&dev->mt76.cc_lock);
-	dev->mphy.chan_state->cc_tx += total_airtime;
-	spin_unlock_bh(&dev->mt76.cc_lock);
-}
-
-static struct mt76_wcid *
-mt7603_rx_get_wcid(struct mt7603_dev *dev, u8 idx, bool unicast)
-{
-	struct mt7603_sta *sta;
-	struct mt76_wcid *wcid;
-
-	if (idx >= MT7603_WTBL_SIZE)
-		return NULL;
-
-	wcid = rcu_dereference(dev->mt76.wcid[idx]);
-	if (unicast || !wcid)
-		return wcid;
-
-	if (!wcid->sta)
-		return NULL;
-
-	sta = container_of(wcid, struct mt7603_sta, wcid);
-	if (!sta->vif)
-		return NULL;
-
-	return &sta->vif->sta.wcid;
-}
-
-int
-mt7603_mac_fill_rx(struct mt7603_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct ieee80211_supported_band *sband;
-	struct ieee80211_hdr *hdr;
-	__le32 *rxd = (__le32 *)skb->data;
-	u32 rxd0 = le32_to_cpu(rxd[0]);
-	u32 rxd1 = le32_to_cpu(rxd[1]);
-	u32 rxd2 = le32_to_cpu(rxd[2]);
-	bool unicast = rxd1 & MT_RXD1_NORMAL_U2M;
-	bool insert_ccmp_hdr = false;
-	bool remove_pad;
-	int idx;
-	int i;
-
-	memset(status, 0, sizeof(*status));
-
-	i = FIELD_GET(MT_RXD1_NORMAL_CH_FREQ, rxd1);
-	sband = (i & 1) ? &dev->mphy.sband_5g.sband : &dev->mphy.sband_2g.sband;
-	i >>= 1;
-
-	idx = FIELD_GET(MT_RXD2_NORMAL_WLAN_IDX, rxd2);
-	status->wcid = mt7603_rx_get_wcid(dev, idx, unicast);
-
-	status->band = sband->band;
-	if (i < sband->n_channels)
-		status->freq = sband->channels[i].center_freq;
-
-	if (rxd2 & MT_RXD2_NORMAL_FCS_ERR)
-		status->flag |= RX_FLAG_FAILED_FCS_CRC;
-
-	if (rxd2 & MT_RXD2_NORMAL_TKIP_MIC_ERR)
-		status->flag |= RX_FLAG_MMIC_ERROR;
-
-	/* ICV error or CCMP/BIP/WPI MIC error */
-	if (rxd2 & MT_RXD2_NORMAL_ICV_ERR)
-		status->flag |= RX_FLAG_ONLY_MONITOR;
-
-	if (FIELD_GET(MT_RXD2_NORMAL_SEC_MODE, rxd2) != 0 &&
-	    !(rxd2 & (MT_RXD2_NORMAL_CLM | MT_RXD2_NORMAL_CM))) {
-		status->flag |= RX_FLAG_DECRYPTED;
-		status->flag |= RX_FLAG_IV_STRIPPED;
-		status->flag |= RX_FLAG_MMIC_STRIPPED | RX_FLAG_MIC_STRIPPED;
-	}
-
-	remove_pad = rxd1 & MT_RXD1_NORMAL_HDR_OFFSET;
-
-	if (rxd2 & MT_RXD2_NORMAL_MAX_LEN_ERROR)
-		return -EINVAL;
-
-	if (!sband->channels)
-		return -EINVAL;
-
-	rxd += 4;
-	if (rxd0 & MT_RXD0_NORMAL_GROUP_4) {
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-	if (rxd0 & MT_RXD0_NORMAL_GROUP_1) {
-		u8 *data = (u8 *)rxd;
-
-		if (status->flag & RX_FLAG_DECRYPTED) {
-			switch (FIELD_GET(MT_RXD2_NORMAL_SEC_MODE, rxd2)) {
-			case MT_CIPHER_AES_CCMP:
-			case MT_CIPHER_CCMP_CCX:
-			case MT_CIPHER_CCMP_256:
-				insert_ccmp_hdr =
-					FIELD_GET(MT_RXD2_NORMAL_FRAG, rxd2);
-				fallthrough;
-			case MT_CIPHER_TKIP:
-			case MT_CIPHER_TKIP_NO_MIC:
-			case MT_CIPHER_GCMP:
-			case MT_CIPHER_GCMP_256:
-				status->iv[0] = data[5];
-				status->iv[1] = data[4];
-				status->iv[2] = data[3];
-				status->iv[3] = data[2];
-				status->iv[4] = data[1];
-				status->iv[5] = data[0];
-				break;
-			default:
-				break;
-			}
-		}
-
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-	if (rxd0 & MT_RXD0_NORMAL_GROUP_2) {
-		status->timestamp = le32_to_cpu(rxd[0]);
-		status->flag |= RX_FLAG_MACTIME_START;
-
-		if (!(rxd2 & (MT_RXD2_NORMAL_NON_AMPDU_SUB |
-			      MT_RXD2_NORMAL_NON_AMPDU))) {
-			status->flag |= RX_FLAG_AMPDU_DETAILS;
-
-			/* all subframes of an A-MPDU have the same timestamp */
-			if (dev->rx_ampdu_ts != status->timestamp) {
-				if (!++dev->ampdu_ref)
-					dev->ampdu_ref++;
-			}
-			dev->rx_ampdu_ts = status->timestamp;
-
-			status->ampdu_ref = dev->ampdu_ref;
-		}
-
-		rxd += 2;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-	if (rxd0 & MT_RXD0_NORMAL_GROUP_3) {
-		u32 rxdg0 = le32_to_cpu(rxd[0]);
-		u32 rxdg3 = le32_to_cpu(rxd[3]);
-		bool cck = false;
-
-		i = FIELD_GET(MT_RXV1_TX_RATE, rxdg0);
-		switch (FIELD_GET(MT_RXV1_TX_MODE, rxdg0)) {
-		case MT_PHY_TYPE_CCK:
-			cck = true;
-			fallthrough;
-		case MT_PHY_TYPE_OFDM:
-			i = mt76_get_rate(&dev->mt76, sband, i, cck);
-			break;
-		case MT_PHY_TYPE_HT_GF:
-		case MT_PHY_TYPE_HT:
-			status->encoding = RX_ENC_HT;
-			if (i > 15)
-				return -EINVAL;
-			break;
-		default:
-			return -EINVAL;
-		}
-
-		if (rxdg0 & MT_RXV1_HT_SHORT_GI)
-			status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-		if (rxdg0 & MT_RXV1_HT_AD_CODE)
-			status->enc_flags |= RX_ENC_FLAG_LDPC;
-
-		status->enc_flags |= RX_ENC_FLAG_STBC_MASK *
-				    FIELD_GET(MT_RXV1_HT_STBC, rxdg0);
-
-		status->rate_idx = i;
-
-		status->chains = dev->mphy.antenna_mask;
-		status->chain_signal[0] = FIELD_GET(MT_RXV4_IB_RSSI0, rxdg3) +
-					  dev->rssi_offset[0];
-		status->chain_signal[1] = FIELD_GET(MT_RXV4_IB_RSSI1, rxdg3) +
-					  dev->rssi_offset[1];
-
-		if (FIELD_GET(MT_RXV1_FRAME_MODE, rxdg0) == 1)
-			status->bw = RATE_INFO_BW_40;
-
-		rxd += 6;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	} else {
-		return -EINVAL;
-	}
-
-	skb_pull(skb, (u8 *)rxd - skb->data + 2 * remove_pad);
-
-	if (insert_ccmp_hdr) {
-		u8 key_id = FIELD_GET(MT_RXD1_NORMAL_KEY_ID, rxd1);
-
-		mt76_insert_ccmp_hdr(skb, key_id);
-	}
-
-	hdr = (struct ieee80211_hdr *)skb->data;
-	if (!status->wcid || !ieee80211_is_data_qos(hdr->frame_control))
-		return 0;
-
-	status->aggr = unicast &&
-		       !ieee80211_is_qos_nullfunc(hdr->frame_control);
-	status->qos_ctl = *ieee80211_get_qos_ctl(hdr);
-	status->seqno = IEEE80211_SEQ_TO_SN(le16_to_cpu(hdr->seq_ctrl));
-
-	return 0;
-}
-
-static u16
-mt7603_mac_tx_rate_val(struct mt7603_dev *dev,
-		       const struct ieee80211_tx_rate *rate, bool stbc, u8 *bw)
-{
-	u8 phy, nss, rate_idx;
-	u16 rateval;
-
-	*bw = 0;
-	if (rate->flags & IEEE80211_TX_RC_MCS) {
-		rate_idx = rate->idx;
-		nss = 1 + (rate->idx >> 3);
-		phy = MT_PHY_TYPE_HT;
-		if (rate->flags & IEEE80211_TX_RC_GREEN_FIELD)
-			phy = MT_PHY_TYPE_HT_GF;
-		if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
-			*bw = 1;
-	} else {
-		const struct ieee80211_rate *r;
-		int band = dev->mphy.chandef.chan->band;
-		u16 val;
-
-		nss = 1;
-		r = &mt76_hw(dev)->wiphy->bands[band]->bitrates[rate->idx];
-		if (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
-			val = r->hw_value_short;
-		else
-			val = r->hw_value;
-
-		phy = val >> 8;
-		rate_idx = val & 0xff;
-	}
-
-	rateval = (FIELD_PREP(MT_TX_RATE_IDX, rate_idx) |
-		   FIELD_PREP(MT_TX_RATE_MODE, phy));
-
-	if (stbc && nss == 1)
-		rateval |= MT_TX_RATE_STBC;
-
-	return rateval;
-}
-
-void mt7603_wtbl_set_rates(struct mt7603_dev *dev, struct mt7603_sta *sta,
-			   struct ieee80211_tx_rate *probe_rate,
-			   struct ieee80211_tx_rate *rates)
-{
-	struct ieee80211_tx_rate *ref;
-	int wcid = sta->wcid.idx;
-	u32 addr = mt7603_wtbl2_addr(wcid);
-	bool stbc = false;
-	int n_rates = sta->n_rates;
-	u8 bw, bw_prev, bw_idx = 0;
-	u16 val[4];
-	u16 probe_val;
-	u32 w9 = mt76_rr(dev, addr + 9 * 4);
-	bool rateset;
-	int i, k;
-
-	if (!mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000))
-		return;
-
-	for (i = n_rates; i < 4; i++)
-		rates[i] = rates[n_rates - 1];
-
-	rateset = !(sta->rate_set_tsf & BIT(0));
-	memcpy(sta->rateset[rateset].rates, rates,
-	       sizeof(sta->rateset[rateset].rates));
-	if (probe_rate) {
-		sta->rateset[rateset].probe_rate = *probe_rate;
-		ref = &sta->rateset[rateset].probe_rate;
-	} else {
-		sta->rateset[rateset].probe_rate.idx = -1;
-		ref = &sta->rateset[rateset].rates[0];
-	}
-
-	rates = sta->rateset[rateset].rates;
-	for (i = 0; i < ARRAY_SIZE(sta->rateset[rateset].rates); i++) {
-		/*
-		 * We don't support switching between short and long GI
-		 * within the rate set. For accurate tx status reporting, we
-		 * need to make sure that flags match.
-		 * For improved performance, avoid duplicate entries by
-		 * decrementing the MCS index if necessary
-		 */
-		if ((ref->flags ^ rates[i].flags) & IEEE80211_TX_RC_SHORT_GI)
-			rates[i].flags ^= IEEE80211_TX_RC_SHORT_GI;
-
-		for (k = 0; k < i; k++) {
-			if (rates[i].idx != rates[k].idx)
-				continue;
-			if ((rates[i].flags ^ rates[k].flags) &
-			    IEEE80211_TX_RC_40_MHZ_WIDTH)
-				continue;
-
-			if (!rates[i].idx)
-				continue;
-
-			rates[i].idx--;
-		}
-	}
-
-	w9 &= MT_WTBL2_W9_SHORT_GI_20 | MT_WTBL2_W9_SHORT_GI_40 |
-	      MT_WTBL2_W9_SHORT_GI_80;
-
-	val[0] = mt7603_mac_tx_rate_val(dev, &rates[0], stbc, &bw);
-	bw_prev = bw;
-
-	if (probe_rate) {
-		probe_val = mt7603_mac_tx_rate_val(dev, probe_rate, stbc, &bw);
-		if (bw)
-			bw_idx = 1;
-		else
-			bw_prev = 0;
-	} else {
-		probe_val = val[0];
-	}
-
-	w9 |= FIELD_PREP(MT_WTBL2_W9_CC_BW_SEL, bw);
-	w9 |= FIELD_PREP(MT_WTBL2_W9_BW_CAP, bw);
-
-	val[1] = mt7603_mac_tx_rate_val(dev, &rates[1], stbc, &bw);
-	if (bw_prev) {
-		bw_idx = 3;
-		bw_prev = bw;
-	}
-
-	val[2] = mt7603_mac_tx_rate_val(dev, &rates[2], stbc, &bw);
-	if (bw_prev) {
-		bw_idx = 5;
-		bw_prev = bw;
-	}
-
-	val[3] = mt7603_mac_tx_rate_val(dev, &rates[3], stbc, &bw);
-	if (bw_prev)
-		bw_idx = 7;
-
-	w9 |= FIELD_PREP(MT_WTBL2_W9_CHANGE_BW_RATE,
-		       bw_idx ? bw_idx - 1 : 7);
-
-	mt76_wr(dev, MT_WTBL_RIUCR0, w9);
-
-	mt76_wr(dev, MT_WTBL_RIUCR1,
-		FIELD_PREP(MT_WTBL_RIUCR1_RATE0, probe_val) |
-		FIELD_PREP(MT_WTBL_RIUCR1_RATE1, val[0]) |
-		FIELD_PREP(MT_WTBL_RIUCR1_RATE2_LO, val[1]));
-
-	mt76_wr(dev, MT_WTBL_RIUCR2,
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE2_HI, val[1] >> 8) |
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE3, val[1]) |
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE4, val[2]) |
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE5_LO, val[2]));
-
-	mt76_wr(dev, MT_WTBL_RIUCR3,
-		FIELD_PREP(MT_WTBL_RIUCR3_RATE5_HI, val[2] >> 4) |
-		FIELD_PREP(MT_WTBL_RIUCR3_RATE6, val[3]) |
-		FIELD_PREP(MT_WTBL_RIUCR3_RATE7, val[3]));
-
-	mt76_set(dev, MT_LPON_T0CR, MT_LPON_T0CR_MODE); /* TSF read */
-	sta->rate_set_tsf = (mt76_rr(dev, MT_LPON_UTTR0) & ~BIT(0)) | rateset;
-
-	mt76_wr(dev, MT_WTBL_UPDATE,
-		FIELD_PREP(MT_WTBL_UPDATE_WLAN_IDX, wcid) |
-		MT_WTBL_UPDATE_RATE_UPDATE |
-		MT_WTBL_UPDATE_TX_COUNT_CLEAR);
-
-	if (!(sta->wcid.tx_info & MT_WCID_TX_INFO_SET))
-		mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000);
-
-	sta->rate_count = 2 * MT7603_RATE_RETRY * n_rates;
-	sta->wcid.tx_info |= MT_WCID_TX_INFO_SET;
-}
-
-static enum mt76_cipher_type
-mt7603_mac_get_key_info(struct ieee80211_key_conf *key, u8 *key_data)
-{
-	memset(key_data, 0, 32);
-	if (!key)
-		return MT_CIPHER_NONE;
-
-	if (key->keylen > 32)
-		return MT_CIPHER_NONE;
-
-	memcpy(key_data, key->key, key->keylen);
-
-	switch (key->cipher) {
-	case WLAN_CIPHER_SUITE_WEP40:
-		return MT_CIPHER_WEP40;
-	case WLAN_CIPHER_SUITE_WEP104:
-		return MT_CIPHER_WEP104;
-	case WLAN_CIPHER_SUITE_TKIP:
-		/* Rx/Tx MIC keys are swapped */
-		memcpy(key_data + 16, key->key + 24, 8);
-		memcpy(key_data + 24, key->key + 16, 8);
-		return MT_CIPHER_TKIP;
-	case WLAN_CIPHER_SUITE_CCMP:
-		return MT_CIPHER_AES_CCMP;
-	default:
-		return MT_CIPHER_NONE;
-	}
-}
-
-int mt7603_wtbl_set_key(struct mt7603_dev *dev, int wcid,
-			struct ieee80211_key_conf *key)
-{
-	enum mt76_cipher_type cipher;
-	u32 addr = mt7603_wtbl3_addr(wcid);
-	u8 key_data[32];
-	int key_len = sizeof(key_data);
-
-	cipher = mt7603_mac_get_key_info(key, key_data);
-	if (cipher == MT_CIPHER_NONE && key)
-		return -EOPNOTSUPP;
-
-	if (key && (cipher == MT_CIPHER_WEP40 || cipher == MT_CIPHER_WEP104)) {
-		addr += key->keyidx * 16;
-		key_len = 16;
-	}
-
-	mt76_wr_copy(dev, addr, key_data, key_len);
-
-	addr = mt7603_wtbl1_addr(wcid);
-	mt76_rmw_field(dev, addr + 2 * 4, MT_WTBL1_W2_KEY_TYPE, cipher);
-	if (key)
-		mt76_rmw_field(dev, addr, MT_WTBL1_W0_KEY_IDX, key->keyidx);
-	mt76_rmw_field(dev, addr, MT_WTBL1_W0_RX_KEY_VALID, !!key);
-
-	return 0;
-}
-
-static int
-mt7603_mac_write_txwi(struct mt7603_dev *dev, __le32 *txwi,
-		      struct sk_buff *skb, enum mt76_txq_id qid,
-		      struct mt76_wcid *wcid, struct ieee80211_sta *sta,
-		      int pid, struct ieee80211_key_conf *key)
-{
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct ieee80211_tx_rate *rate = &info->control.rates[0];
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-	struct ieee80211_bar *bar = (struct ieee80211_bar *)skb->data;
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt76_queue *q = dev->mphy.q_tx[qid];
-	struct mt7603_vif *mvif;
-	int wlan_idx;
-	int hdr_len = ieee80211_get_hdrlen_from_skb(skb);
-	int tx_count = 8;
-	u8 frame_type, frame_subtype;
-	u16 fc = le16_to_cpu(hdr->frame_control);
-	u16 seqno = 0;
-	u8 vif_idx = 0;
-	u32 val;
-	u8 bw;
-
-	if (vif) {
-		mvif = (struct mt7603_vif *)vif->drv_priv;
-		vif_idx = mvif->idx;
-		if (vif_idx && qid >= MT_TXQ_BEACON)
-			vif_idx += 0x10;
-	}
-
-	if (sta) {
-		struct mt7603_sta *msta = (struct mt7603_sta *)sta->drv_priv;
-
-		tx_count = msta->rate_count;
-	}
-
-	if (wcid)
-		wlan_idx = wcid->idx;
-	else
-		wlan_idx = MT7603_WTBL_RESERVED;
-
-	frame_type = (fc & IEEE80211_FCTL_FTYPE) >> 2;
-	frame_subtype = (fc & IEEE80211_FCTL_STYPE) >> 4;
-
-	val = FIELD_PREP(MT_TXD0_TX_BYTES, skb->len + MT_TXD_SIZE) |
-	      FIELD_PREP(MT_TXD0_Q_IDX, q->hw_idx);
-	txwi[0] = cpu_to_le32(val);
-
-	val = MT_TXD1_LONG_FORMAT |
-	      FIELD_PREP(MT_TXD1_OWN_MAC, vif_idx) |
-	      FIELD_PREP(MT_TXD1_TID,
-			 skb->priority & IEEE80211_QOS_CTL_TID_MASK) |
-	      FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_11) |
-	      FIELD_PREP(MT_TXD1_HDR_INFO, hdr_len / 2) |
-	      FIELD_PREP(MT_TXD1_WLAN_IDX, wlan_idx) |
-	      FIELD_PREP(MT_TXD1_PROTECTED, !!key);
-	txwi[1] = cpu_to_le32(val);
-
-	if (info->flags & IEEE80211_TX_CTL_NO_ACK)
-		txwi[1] |= cpu_to_le32(MT_TXD1_NO_ACK);
-
-	val = FIELD_PREP(MT_TXD2_FRAME_TYPE, frame_type) |
-	      FIELD_PREP(MT_TXD2_SUB_TYPE, frame_subtype) |
-	      FIELD_PREP(MT_TXD2_MULTICAST,
-			 is_multicast_ether_addr(hdr->addr1));
-	txwi[2] = cpu_to_le32(val);
-
-	if (!(info->flags & IEEE80211_TX_CTL_AMPDU))
-		txwi[2] |= cpu_to_le32(MT_TXD2_BA_DISABLE);
-
-	txwi[4] = 0;
-
-	val = MT_TXD5_TX_STATUS_HOST | MT_TXD5_SW_POWER_MGMT |
-	      FIELD_PREP(MT_TXD5_PID, pid);
-	txwi[5] = cpu_to_le32(val);
-
-	txwi[6] = 0;
-
-	if (rate->idx >= 0 && rate->count &&
-	    !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE)) {
-		bool stbc = info->flags & IEEE80211_TX_CTL_STBC;
-		u16 rateval = mt7603_mac_tx_rate_val(dev, rate, stbc, &bw);
-
-		txwi[2] |= cpu_to_le32(MT_TXD2_FIX_RATE);
-
-		val = MT_TXD6_FIXED_BW |
-		      FIELD_PREP(MT_TXD6_BW, bw) |
-		      FIELD_PREP(MT_TXD6_TX_RATE, rateval);
-		txwi[6] |= cpu_to_le32(val);
-
-		if (rate->flags & IEEE80211_TX_RC_SHORT_GI)
-			txwi[6] |= cpu_to_le32(MT_TXD6_SGI);
-
-		if (!(rate->flags & IEEE80211_TX_RC_MCS))
-			txwi[2] |= cpu_to_le32(MT_TXD2_BA_DISABLE);
-
-		tx_count = rate->count;
-	}
-
-	/* use maximum tx count for beacons and buffered multicast */
-	if (qid >= MT_TXQ_BEACON)
-		tx_count = 0x1f;
-
-	val = FIELD_PREP(MT_TXD3_REM_TX_COUNT, tx_count) |
-		  MT_TXD3_SN_VALID;
-
-	if (ieee80211_is_data_qos(hdr->frame_control))
-		seqno = le16_to_cpu(hdr->seq_ctrl);
-	else if (ieee80211_is_back_req(hdr->frame_control))
-		seqno = le16_to_cpu(bar->start_seq_num);
-	else
-		val &= ~MT_TXD3_SN_VALID;
-
-	val |= FIELD_PREP(MT_TXD3_SEQ, seqno >> 4);
-
-	txwi[3] = cpu_to_le32(val);
-
-	if (key) {
-		u64 pn = atomic64_inc_return(&key->tx_pn);
-
-		txwi[3] |= cpu_to_le32(MT_TXD3_PN_VALID);
-		txwi[4] = cpu_to_le32(pn & GENMASK(31, 0));
-		txwi[5] |= cpu_to_le32(FIELD_PREP(MT_TXD5_PN_HIGH, pn >> 32));
-	}
-
-	txwi[7] = 0;
-
-	return 0;
-}
-
-int mt7603_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-			  enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			  struct ieee80211_sta *sta,
-			  struct mt76_tx_info *tx_info)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-	struct mt7603_sta *msta = container_of(wcid, struct mt7603_sta, wcid);
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
-	struct ieee80211_key_conf *key = info->control.hw_key;
-	int pid;
-
-	if (!wcid)
-		wcid = &dev->global_sta.wcid;
-
-	if (sta) {
-		msta = (struct mt7603_sta *)sta->drv_priv;
-
-		if ((info->flags & (IEEE80211_TX_CTL_NO_PS_BUFFER |
-				    IEEE80211_TX_CTL_CLEAR_PS_FILT)) ||
-		    (info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE))
-			mt7603_wtbl_set_ps(dev, msta, false);
-
-		mt76_tx_check_agg_ssn(sta, tx_info->skb);
-	}
-
-	pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
-
-	if (info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE) {
-		spin_lock_bh(&dev->mt76.lock);
-		mt7603_wtbl_set_rates(dev, msta, &info->control.rates[0],
-				      msta->rates);
-		msta->rate_probe = true;
-		spin_unlock_bh(&dev->mt76.lock);
-	}
-
-	mt7603_mac_write_txwi(dev, txwi_ptr, tx_info->skb, qid, wcid,
-			      sta, pid, key);
-
-	return 0;
-}
-
-static bool
-mt7603_fill_txs(struct mt7603_dev *dev, struct mt7603_sta *sta,
-		struct ieee80211_tx_info *info, __le32 *txs_data)
-{
-	struct ieee80211_supported_band *sband;
-	struct mt7603_rate_set *rs;
-	int first_idx = 0, last_idx;
-	u32 rate_set_tsf;
-	u32 final_rate;
-	u32 final_rate_flags;
-	bool rs_idx;
-	bool ack_timeout;
-	bool fixed_rate;
-	bool probe;
-	bool ampdu;
-	bool cck = false;
-	int count;
-	u32 txs;
-	int idx;
-	int i;
-
-	fixed_rate = info->status.rates[0].count;
-	probe = !!(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE);
-
-	txs = le32_to_cpu(txs_data[4]);
-	ampdu = !fixed_rate && (txs & MT_TXS4_AMPDU);
-	count = FIELD_GET(MT_TXS4_TX_COUNT, txs);
-	last_idx = FIELD_GET(MT_TXS4_LAST_TX_RATE, txs);
-
-	txs = le32_to_cpu(txs_data[0]);
-	final_rate = FIELD_GET(MT_TXS0_TX_RATE, txs);
-	ack_timeout = txs & MT_TXS0_ACK_TIMEOUT;
-
-	if (!ampdu && (txs & MT_TXS0_RTS_TIMEOUT))
-		return false;
-
-	if (txs & MT_TXS0_QUEUE_TIMEOUT)
-		return false;
-
-	if (!ack_timeout)
-		info->flags |= IEEE80211_TX_STAT_ACK;
-
-	info->status.ampdu_len = 1;
-	info->status.ampdu_ack_len = !!(info->flags &
-					IEEE80211_TX_STAT_ACK);
-
-	if (ampdu || (info->flags & IEEE80211_TX_CTL_AMPDU))
-		info->flags |= IEEE80211_TX_STAT_AMPDU | IEEE80211_TX_CTL_AMPDU;
-
-	first_idx = max_t(int, 0, last_idx - (count - 1) / MT7603_RATE_RETRY);
-
-	if (fixed_rate && !probe) {
-		info->status.rates[0].count = count;
-		i = 0;
-		goto out;
-	}
-
-	rate_set_tsf = READ_ONCE(sta->rate_set_tsf);
-	rs_idx = !((u32)(le32_get_bits(txs_data[1], MT_TXS1_F0_TIMESTAMP) -
-			 rate_set_tsf) < 1000000);
-	rs_idx ^= rate_set_tsf & BIT(0);
-	rs = &sta->rateset[rs_idx];
-
-	if (!first_idx && rs->probe_rate.idx >= 0) {
-		info->status.rates[0] = rs->probe_rate;
-
-		spin_lock_bh(&dev->mt76.lock);
-		if (sta->rate_probe) {
-			mt7603_wtbl_set_rates(dev, sta, NULL,
-					      sta->rates);
-			sta->rate_probe = false;
-		}
-		spin_unlock_bh(&dev->mt76.lock);
-	} else {
-		info->status.rates[0] = rs->rates[first_idx / 2];
-	}
-	info->status.rates[0].count = 0;
-
-	for (i = 0, idx = first_idx; count && idx <= last_idx; idx++) {
-		struct ieee80211_tx_rate *cur_rate;
-		int cur_count;
-
-		cur_rate = &rs->rates[idx / 2];
-		cur_count = min_t(int, MT7603_RATE_RETRY, count);
-		count -= cur_count;
-
-		if (idx && (cur_rate->idx != info->status.rates[i].idx ||
-			    cur_rate->flags != info->status.rates[i].flags)) {
-			i++;
-			if (i == ARRAY_SIZE(info->status.rates)) {
-				i--;
-				break;
-			}
-
-			info->status.rates[i] = *cur_rate;
-			info->status.rates[i].count = 0;
-		}
-
-		info->status.rates[i].count += cur_count;
-	}
-
-out:
-	final_rate_flags = info->status.rates[i].flags;
-
-	switch (FIELD_GET(MT_TX_RATE_MODE, final_rate)) {
-	case MT_PHY_TYPE_CCK:
-		cck = true;
-		fallthrough;
-	case MT_PHY_TYPE_OFDM:
-		if (dev->mphy.chandef.chan->band == NL80211_BAND_5GHZ)
-			sband = &dev->mphy.sband_5g.sband;
-		else
-			sband = &dev->mphy.sband_2g.sband;
-		final_rate &= GENMASK(5, 0);
-		final_rate = mt76_get_rate(&dev->mt76, sband, final_rate,
-					   cck);
-		final_rate_flags = 0;
-		break;
-	case MT_PHY_TYPE_HT_GF:
-	case MT_PHY_TYPE_HT:
-		final_rate_flags |= IEEE80211_TX_RC_MCS;
-		final_rate &= GENMASK(5, 0);
-		if (final_rate > 15)
-			return false;
-		break;
-	default:
-		return false;
-	}
-
-	info->status.rates[i].idx = final_rate;
-	info->status.rates[i].flags = final_rate_flags;
-
-	return true;
-}
-
-static bool
-mt7603_mac_add_txs_skb(struct mt7603_dev *dev, struct mt7603_sta *sta, int pid,
-		       __le32 *txs_data)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	struct sk_buff_head list;
-	struct sk_buff *skb;
-
-	if (pid < MT_PACKET_ID_FIRST)
-		return false;
-
-	trace_mac_txdone(mdev, sta->wcid.idx, pid);
-
-	mt76_tx_status_lock(mdev, &list);
-	skb = mt76_tx_status_skb_get(mdev, &sta->wcid, pid, &list);
-	if (skb) {
-		struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-
-		if (!mt7603_fill_txs(dev, sta, info, txs_data)) {
-			info->status.rates[0].count = 0;
-			info->status.rates[0].idx = -1;
-		}
-
-		mt76_tx_status_skb_done(mdev, skb, &list);
-	}
-	mt76_tx_status_unlock(mdev, &list);
-
-	return !!skb;
-}
-
-void mt7603_mac_add_txs(struct mt7603_dev *dev, void *data)
-{
-	struct ieee80211_tx_info info = {};
-	struct ieee80211_sta *sta = NULL;
-	struct mt7603_sta *msta = NULL;
-	struct mt76_wcid *wcid;
-	__le32 *txs_data = data;
-	u8 wcidx;
-	u8 pid;
-
-	pid = le32_get_bits(txs_data[4], MT_TXS4_PID);
-	wcidx = le32_get_bits(txs_data[3], MT_TXS3_WCID);
-
-	if (pid == MT_PACKET_ID_NO_ACK)
-		return;
-
-	if (wcidx >= MT7603_WTBL_SIZE)
-		return;
-
-	rcu_read_lock();
-
-	wcid = rcu_dereference(dev->mt76.wcid[wcidx]);
-	if (!wcid)
-		goto out;
-
-	msta = container_of(wcid, struct mt7603_sta, wcid);
-	sta = wcid_to_sta(wcid);
-
-	if (list_empty(&msta->poll_list)) {
-		spin_lock_bh(&dev->sta_poll_lock);
-		list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-		spin_unlock_bh(&dev->sta_poll_lock);
-	}
-
-	if (mt7603_mac_add_txs_skb(dev, msta, pid, txs_data))
-		goto out;
-
-	if (wcidx >= MT7603_WTBL_STA || !sta)
-		goto out;
-
-	if (mt7603_fill_txs(dev, msta, &info, txs_data))
-		ieee80211_tx_status_noskb(mt76_hw(dev), sta, &info);
-
-out:
-	rcu_read_unlock();
-}
-
-void mt7603_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-	struct sk_buff *skb = e->skb;
-
-	if (!e->txwi) {
-		dev_kfree_skb_any(skb);
-		return;
-	}
-
-	dev->tx_hang_check = 0;
-	mt76_tx_complete_skb(mdev, e->wcid, skb);
-}
-
-static bool
-wait_for_wpdma(struct mt7603_dev *dev)
-{
-	return mt76_poll(dev, MT_WPDMA_GLO_CFG,
-			 MT_WPDMA_GLO_CFG_TX_DMA_BUSY |
-			 MT_WPDMA_GLO_CFG_RX_DMA_BUSY,
-			 0, 1000);
-}
-
-static void mt7603_pse_reset(struct mt7603_dev *dev)
-{
-	/* Clear previous reset result */
-	if (!dev->reset_cause[RESET_CAUSE_RESET_FAILED])
-		mt76_clear(dev, MT_MCU_DEBUG_RESET, MT_MCU_DEBUG_RESET_PSE_S);
-
-	/* Reset PSE */
-	mt76_set(dev, MT_MCU_DEBUG_RESET, MT_MCU_DEBUG_RESET_PSE);
-
-	if (!mt76_poll_msec(dev, MT_MCU_DEBUG_RESET,
-			    MT_MCU_DEBUG_RESET_PSE_S,
-			    MT_MCU_DEBUG_RESET_PSE_S, 500)) {
-		dev->reset_cause[RESET_CAUSE_RESET_FAILED]++;
-		mt76_clear(dev, MT_MCU_DEBUG_RESET, MT_MCU_DEBUG_RESET_PSE);
-	} else {
-		dev->reset_cause[RESET_CAUSE_RESET_FAILED] = 0;
-		mt76_clear(dev, MT_MCU_DEBUG_RESET, MT_MCU_DEBUG_RESET_QUEUES);
-	}
-
-	if (dev->reset_cause[RESET_CAUSE_RESET_FAILED] >= 3)
-		dev->reset_cause[RESET_CAUSE_RESET_FAILED] = 0;
-}
-
-void mt7603_mac_dma_start(struct mt7603_dev *dev)
-{
-	mt7603_mac_start(dev);
-
-	wait_for_wpdma(dev);
-	usleep_range(50, 100);
-
-	mt76_set(dev, MT_WPDMA_GLO_CFG,
-		 (MT_WPDMA_GLO_CFG_TX_DMA_EN |
-		  MT_WPDMA_GLO_CFG_RX_DMA_EN |
-		  FIELD_PREP(MT_WPDMA_GLO_CFG_DMA_BURST_SIZE, 3) |
-		  MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE));
-
-	mt7603_irq_enable(dev, MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL);
-}
-
-void mt7603_mac_start(struct mt7603_dev *dev)
-{
-	mt76_clear(dev, MT_ARB_SCR,
-		   MT_ARB_SCR_TX_DISABLE | MT_ARB_SCR_RX_DISABLE);
-	mt76_wr(dev, MT_WF_ARB_TX_START_0, ~0);
-	mt76_set(dev, MT_WF_ARB_RQCR, MT_WF_ARB_RQCR_RX_START);
-}
-
-void mt7603_mac_stop(struct mt7603_dev *dev)
-{
-	mt76_set(dev, MT_ARB_SCR,
-		 MT_ARB_SCR_TX_DISABLE | MT_ARB_SCR_RX_DISABLE);
-	mt76_wr(dev, MT_WF_ARB_TX_START_0, 0);
-	mt76_clear(dev, MT_WF_ARB_RQCR, MT_WF_ARB_RQCR_RX_START);
-}
-
-void mt7603_pse_client_reset(struct mt7603_dev *dev)
-{
-	u32 addr;
-
-	addr = mt7603_reg_map(dev, MT_CLIENT_BASE_PHYS_ADDR +
-				   MT_CLIENT_RESET_TX);
-
-	/* Clear previous reset state */
-	mt76_clear(dev, addr,
-		   MT_CLIENT_RESET_TX_R_E_1 |
-		   MT_CLIENT_RESET_TX_R_E_2 |
-		   MT_CLIENT_RESET_TX_R_E_1_S |
-		   MT_CLIENT_RESET_TX_R_E_2_S);
-
-	/* Start PSE client TX abort */
-	mt76_set(dev, addr, MT_CLIENT_RESET_TX_R_E_1);
-	mt76_poll_msec(dev, addr, MT_CLIENT_RESET_TX_R_E_1_S,
-		       MT_CLIENT_RESET_TX_R_E_1_S, 500);
-
-	mt76_set(dev, addr, MT_CLIENT_RESET_TX_R_E_2);
-	mt76_set(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_SW_RESET);
-
-	/* Wait for PSE client to clear TX FIFO */
-	mt76_poll_msec(dev, addr, MT_CLIENT_RESET_TX_R_E_2_S,
-		       MT_CLIENT_RESET_TX_R_E_2_S, 500);
-
-	/* Clear PSE client TX abort state */
-	mt76_clear(dev, addr,
-		   MT_CLIENT_RESET_TX_R_E_1 |
-		   MT_CLIENT_RESET_TX_R_E_2);
-}
-
-static void mt7603_dma_sched_reset(struct mt7603_dev *dev)
-{
-	if (!is_mt7628(dev))
-		return;
-
-	mt76_set(dev, MT_SCH_4, MT_SCH_4_RESET);
-	mt76_clear(dev, MT_SCH_4, MT_SCH_4_RESET);
-}
-
-static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev)
-{
-	int beacon_int = dev->mt76.beacon_int;
-	u32 mask = dev->mt76.mmio.irqmask;
-	int i;
-
-	ieee80211_stop_queues(dev->mt76.hw);
-	set_bit(MT76_RESET, &dev->mphy.state);
-
-	/* lock/unlock all queues to ensure that no tx is pending */
-	mt76_txq_schedule_all(&dev->mphy);
-
-	mt76_worker_disable(&dev->mt76.tx_worker);
-	tasklet_disable(&dev->mt76.pre_tbtt_tasklet);
-	napi_disable(&dev->mt76.napi[0]);
-	napi_disable(&dev->mt76.napi[1]);
-	napi_disable(&dev->mt76.tx_napi);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt7603_beacon_set_timer(dev, -1, 0);
-
-	if (dev->reset_cause[RESET_CAUSE_RESET_FAILED] ||
-	    dev->cur_reset_cause == RESET_CAUSE_RX_PSE_BUSY ||
-	    dev->cur_reset_cause == RESET_CAUSE_BEACON_STUCK ||
-	    dev->cur_reset_cause == RESET_CAUSE_TX_HANG)
-		mt7603_pse_reset(dev);
-
-	if (dev->reset_cause[RESET_CAUSE_RESET_FAILED])
-		goto skip_dma_reset;
-
-	mt7603_mac_stop(dev);
-
-	mt76_clear(dev, MT_WPDMA_GLO_CFG,
-		   MT_WPDMA_GLO_CFG_RX_DMA_EN | MT_WPDMA_GLO_CFG_TX_DMA_EN |
-		   MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE);
-	usleep_range(1000, 2000);
-
-	mt7603_irq_disable(dev, mask);
-
-	mt76_set(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_FORCE_TX_EOF);
-
-	mt7603_pse_client_reset(dev);
-
-	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], true);
-	for (i = 0; i < __MT_TXQ_MAX; i++)
-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], true);
-
-	mt76_for_each_q_rx(&dev->mt76, i) {
-		mt76_queue_rx_reset(dev, i);
-	}
-
-	mt76_tx_status_check(&dev->mt76, true);
-
-	mt7603_dma_sched_reset(dev);
-
-	mt7603_mac_dma_start(dev);
-
-	mt7603_irq_enable(dev, mask);
-
-skip_dma_reset:
-	clear_bit(MT76_RESET, &dev->mphy.state);
-	mutex_unlock(&dev->mt76.mutex);
-
-	mt76_worker_enable(&dev->mt76.tx_worker);
-
-	tasklet_enable(&dev->mt76.pre_tbtt_tasklet);
-	mt7603_beacon_set_timer(dev, -1, beacon_int);
-
-	local_bh_disable();
-	napi_enable(&dev->mt76.tx_napi);
-	napi_schedule(&dev->mt76.tx_napi);
-
-	napi_enable(&dev->mt76.napi[0]);
-	napi_schedule(&dev->mt76.napi[0]);
-
-	napi_enable(&dev->mt76.napi[1]);
-	napi_schedule(&dev->mt76.napi[1]);
-	local_bh_enable();
-
-	ieee80211_wake_queues(dev->mt76.hw);
-	mt76_txq_schedule_all(&dev->mphy);
-}
-
-static u32 mt7603_dma_debug(struct mt7603_dev *dev, u8 index)
-{
-	u32 val;
-
-	mt76_wr(dev, MT_WPDMA_DEBUG,
-		FIELD_PREP(MT_WPDMA_DEBUG_IDX, index) |
-		MT_WPDMA_DEBUG_SEL);
-
-	val = mt76_rr(dev, MT_WPDMA_DEBUG);
-	return FIELD_GET(MT_WPDMA_DEBUG_VALUE, val);
-}
-
-static bool mt7603_rx_fifo_busy(struct mt7603_dev *dev)
-{
-	if (is_mt7628(dev))
-		return mt7603_dma_debug(dev, 9) & BIT(9);
-
-	return mt7603_dma_debug(dev, 2) & BIT(8);
-}
-
-static bool mt7603_rx_dma_busy(struct mt7603_dev *dev)
-{
-	if (!(mt76_rr(dev, MT_WPDMA_GLO_CFG) & MT_WPDMA_GLO_CFG_RX_DMA_BUSY))
-		return false;
-
-	return mt7603_rx_fifo_busy(dev);
-}
-
-static bool mt7603_tx_dma_busy(struct mt7603_dev *dev)
-{
-	u32 val;
-
-	if (!(mt76_rr(dev, MT_WPDMA_GLO_CFG) & MT_WPDMA_GLO_CFG_TX_DMA_BUSY))
-		return false;
-
-	val = mt7603_dma_debug(dev, 9);
-	return (val & BIT(8)) && (val & 0xf) != 0xf;
-}
-
-static bool mt7603_tx_hang(struct mt7603_dev *dev)
-{
-	struct mt76_queue *q;
-	u32 dma_idx, prev_dma_idx;
-	int i;
-
-	for (i = 0; i < 4; i++) {
-		q = dev->mphy.q_tx[i];
-
-		if (!q->queued)
-			continue;
-
-		prev_dma_idx = dev->tx_dma_idx[i];
-		dma_idx = readl(&q->regs->dma_idx);
-		dev->tx_dma_idx[i] = dma_idx;
-
-		if (dma_idx == prev_dma_idx &&
-		    dma_idx != readl(&q->regs->cpu_idx))
-			break;
-	}
-
-	return i < 4;
-}
-
-static bool mt7603_rx_pse_busy(struct mt7603_dev *dev)
-{
-	u32 addr, val;
-
-	if (mt76_rr(dev, MT_MCU_DEBUG_RESET) & MT_MCU_DEBUG_RESET_QUEUES)
-		return true;
-
-	if (mt7603_rx_fifo_busy(dev))
-		return false;
-
-	addr = mt7603_reg_map(dev, MT_CLIENT_BASE_PHYS_ADDR + MT_CLIENT_STATUS);
-	mt76_wr(dev, addr, 3);
-	val = mt76_rr(dev, addr) >> 16;
-
-	if (is_mt7628(dev) && (val & 0x4001) == 0x4001)
-		return true;
-
-	return (val & 0x8001) == 0x8001 || (val & 0xe001) == 0xe001;
-}
-
-static bool
-mt7603_watchdog_check(struct mt7603_dev *dev, u8 *counter,
-		      enum mt7603_reset_cause cause,
-		      bool (*check)(struct mt7603_dev *dev))
-{
-	if (dev->reset_test == cause + 1) {
-		dev->reset_test = 0;
-		goto trigger;
-	}
-
-	if (check) {
-		if (!check(dev) && *counter < MT7603_WATCHDOG_TIMEOUT) {
-			*counter = 0;
-			return false;
-		}
-
-		(*counter)++;
-	}
-
-	if (*counter < MT7603_WATCHDOG_TIMEOUT)
-		return false;
-trigger:
-	dev->cur_reset_cause = cause;
-	dev->reset_cause[cause]++;
-	return true;
-}
-
-void mt7603_update_channel(struct mt76_phy *mphy)
-{
-	struct mt7603_dev *dev = container_of(mphy->dev, struct mt7603_dev, mt76);
-	struct mt76_channel_state *state;
-
-	state = mphy->chan_state;
-	state->cc_busy += mt76_rr(dev, MT_MIB_STAT_CCA);
-}
-
-void
-mt7603_edcca_set_strict(struct mt7603_dev *dev, bool val)
-{
-	u32 rxtd_6 = 0xd7c80000;
-
-	if (val == dev->ed_strict_mode)
-		return;
-
-	dev->ed_strict_mode = val;
-
-	/* Ensure that ED/CCA does not trigger if disabled */
-	if (!dev->ed_monitor)
-		rxtd_6 |= FIELD_PREP(MT_RXTD_6_CCAED_TH, 0x34);
-	else
-		rxtd_6 |= FIELD_PREP(MT_RXTD_6_CCAED_TH, 0x7d);
-
-	if (dev->ed_monitor && !dev->ed_strict_mode)
-		rxtd_6 |= FIELD_PREP(MT_RXTD_6_ACI_TH, 0x0f);
-	else
-		rxtd_6 |= FIELD_PREP(MT_RXTD_6_ACI_TH, 0x10);
-
-	mt76_wr(dev, MT_RXTD(6), rxtd_6);
-
-	mt76_rmw_field(dev, MT_RXTD(13), MT_RXTD_13_ACI_TH_EN,
-		       dev->ed_monitor && !dev->ed_strict_mode);
-}
-
-static void
-mt7603_edcca_check(struct mt7603_dev *dev)
-{
-	u32 val = mt76_rr(dev, MT_AGC(41));
-	ktime_t cur_time;
-	int rssi0, rssi1;
-	u32 active;
-	u32 ed_busy;
-
-	if (!dev->ed_monitor)
-		return;
-
-	rssi0 = FIELD_GET(MT_AGC_41_RSSI_0, val);
-	if (rssi0 > 128)
-		rssi0 -= 256;
-
-	if (dev->mphy.antenna_mask & BIT(1)) {
-		rssi1 = FIELD_GET(MT_AGC_41_RSSI_1, val);
-		if (rssi1 > 128)
-			rssi1 -= 256;
-	} else {
-		rssi1 = rssi0;
-	}
-
-	if (max(rssi0, rssi1) >= -40 &&
-	    dev->ed_strong_signal < MT7603_EDCCA_BLOCK_TH)
-		dev->ed_strong_signal++;
-	else if (dev->ed_strong_signal > 0)
-		dev->ed_strong_signal--;
-
-	cur_time = ktime_get_boottime();
-	ed_busy = mt76_rr(dev, MT_MIB_STAT_ED) & MT_MIB_STAT_ED_MASK;
-
-	active = ktime_to_us(ktime_sub(cur_time, dev->ed_time));
-	dev->ed_time = cur_time;
-
-	if (!active)
-		return;
-
-	if (100 * ed_busy / active > 90) {
-		if (dev->ed_trigger < 0)
-			dev->ed_trigger = 0;
-		dev->ed_trigger++;
-	} else {
-		if (dev->ed_trigger > 0)
-			dev->ed_trigger = 0;
-		dev->ed_trigger--;
-	}
-
-	if (dev->ed_trigger > MT7603_EDCCA_BLOCK_TH ||
-	    dev->ed_strong_signal < MT7603_EDCCA_BLOCK_TH / 2) {
-		mt7603_edcca_set_strict(dev, true);
-	} else if (dev->ed_trigger < -MT7603_EDCCA_BLOCK_TH) {
-		mt7603_edcca_set_strict(dev, false);
-	}
-
-	if (dev->ed_trigger > MT7603_EDCCA_BLOCK_TH)
-		dev->ed_trigger = MT7603_EDCCA_BLOCK_TH;
-	else if (dev->ed_trigger < -MT7603_EDCCA_BLOCK_TH)
-		dev->ed_trigger = -MT7603_EDCCA_BLOCK_TH;
-}
-
-void mt7603_cca_stats_reset(struct mt7603_dev *dev)
-{
-	mt76_set(dev, MT_PHYCTRL(2), MT_PHYCTRL_2_STATUS_RESET);
-	mt76_clear(dev, MT_PHYCTRL(2), MT_PHYCTRL_2_STATUS_RESET);
-	mt76_set(dev, MT_PHYCTRL(2), MT_PHYCTRL_2_STATUS_EN);
-}
-
-static void
-mt7603_adjust_sensitivity(struct mt7603_dev *dev)
-{
-	u32 agc0 = dev->agc0, agc3 = dev->agc3;
-	u32 adj;
-
-	if (!dev->sensitivity || dev->sensitivity < -100) {
-		dev->sensitivity = 0;
-	} else if (dev->sensitivity <= -84) {
-		adj = 7 + (dev->sensitivity + 92) / 2;
-
-		agc0 = 0x56f0076f;
-		agc0 |= adj << 12;
-		agc0 |= adj << 16;
-		agc3 = 0x81d0d5e3;
-	} else if (dev->sensitivity <= -72) {
-		adj = 7 + (dev->sensitivity + 80) / 2;
-
-		agc0 = 0x6af0006f;
-		agc0 |= adj << 8;
-		agc0 |= adj << 12;
-		agc0 |= adj << 16;
-
-		agc3 = 0x8181d5e3;
-	} else {
-		if (dev->sensitivity > -54)
-			dev->sensitivity = -54;
-
-		adj = 7 + (dev->sensitivity + 80) / 2;
-
-		agc0 = 0x7ff0000f;
-		agc0 |= adj << 4;
-		agc0 |= adj << 8;
-		agc0 |= adj << 12;
-		agc0 |= adj << 16;
-
-		agc3 = 0x818181e3;
-	}
-
-	mt76_wr(dev, MT_AGC(0), agc0);
-	mt76_wr(dev, MT_AGC1(0), agc0);
-
-	mt76_wr(dev, MT_AGC(3), agc3);
-	mt76_wr(dev, MT_AGC1(3), agc3);
-}
-
-static void
-mt7603_false_cca_check(struct mt7603_dev *dev)
-{
-	int pd_cck, pd_ofdm, mdrdy_cck, mdrdy_ofdm;
-	int false_cca;
-	int min_signal;
-	u32 val;
-
-	if (!dev->dynamic_sensitivity)
-		return;
-
-	val = mt76_rr(dev, MT_PHYCTRL_STAT_PD);
-	pd_cck = FIELD_GET(MT_PHYCTRL_STAT_PD_CCK, val);
-	pd_ofdm = FIELD_GET(MT_PHYCTRL_STAT_PD_OFDM, val);
-
-	val = mt76_rr(dev, MT_PHYCTRL_STAT_MDRDY);
-	mdrdy_cck = FIELD_GET(MT_PHYCTRL_STAT_MDRDY_CCK, val);
-	mdrdy_ofdm = FIELD_GET(MT_PHYCTRL_STAT_MDRDY_OFDM, val);
-
-	dev->false_cca_ofdm = pd_ofdm - mdrdy_ofdm;
-	dev->false_cca_cck = pd_cck - mdrdy_cck;
-
-	mt7603_cca_stats_reset(dev);
-
-	min_signal = mt76_get_min_avg_rssi(&dev->mt76, false);
-	if (!min_signal) {
-		dev->sensitivity = 0;
-		dev->last_cca_adj = jiffies;
-		goto out;
-	}
-
-	min_signal -= 15;
-
-	false_cca = dev->false_cca_ofdm + dev->false_cca_cck;
-	if (false_cca > 600 &&
-	    dev->sensitivity < -100 + dev->sensitivity_limit) {
-		if (!dev->sensitivity)
-			dev->sensitivity = -92;
-		else
-			dev->sensitivity += 2;
-		dev->last_cca_adj = jiffies;
-	} else if (false_cca < 100 ||
-		   time_after(jiffies, dev->last_cca_adj + 10 * HZ)) {
-		dev->last_cca_adj = jiffies;
-		if (!dev->sensitivity)
-			goto out;
-
-		dev->sensitivity -= 2;
-	}
-
-	if (dev->sensitivity && dev->sensitivity > min_signal) {
-		dev->sensitivity = min_signal;
-		dev->last_cca_adj = jiffies;
-	}
-
-out:
-	mt7603_adjust_sensitivity(dev);
-}
-
-void mt7603_mac_work(struct work_struct *work)
-{
-	struct mt7603_dev *dev = container_of(work, struct mt7603_dev,
-					      mphy.mac_work.work);
-	bool reset = false;
-	int i, idx;
-
-	mt76_tx_status_check(&dev->mt76, false);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	dev->mphy.mac_work_count++;
-	mt76_update_survey(&dev->mphy);
-	mt7603_edcca_check(dev);
-
-	for (i = 0, idx = 0; i < 2; i++) {
-		u32 val = mt76_rr(dev, MT_TX_AGG_CNT(i));
-
-		dev->mt76.aggr_stats[idx++] += val & 0xffff;
-		dev->mt76.aggr_stats[idx++] += val >> 16;
-	}
-
-	if (dev->mphy.mac_work_count == 10)
-		mt7603_false_cca_check(dev);
-
-	if (mt7603_watchdog_check(dev, &dev->rx_pse_check,
-				  RESET_CAUSE_RX_PSE_BUSY,
-				  mt7603_rx_pse_busy) ||
-	    mt7603_watchdog_check(dev, &dev->beacon_check,
-				  RESET_CAUSE_BEACON_STUCK,
-				  NULL) ||
-	    mt7603_watchdog_check(dev, &dev->tx_hang_check,
-				  RESET_CAUSE_TX_HANG,
-				  mt7603_tx_hang) ||
-	    mt7603_watchdog_check(dev, &dev->tx_dma_check,
-				  RESET_CAUSE_TX_BUSY,
-				  mt7603_tx_dma_busy) ||
-	    mt7603_watchdog_check(dev, &dev->rx_dma_check,
-				  RESET_CAUSE_RX_BUSY,
-				  mt7603_rx_dma_busy) ||
-	    mt7603_watchdog_check(dev, &dev->mcu_hang,
-				  RESET_CAUSE_MCU_HANG,
-				  NULL) ||
-	    dev->reset_cause[RESET_CAUSE_RESET_FAILED]) {
-		dev->beacon_check = 0;
-		dev->tx_dma_check = 0;
-		dev->tx_hang_check = 0;
-		dev->rx_dma_check = 0;
-		dev->rx_pse_check = 0;
-		dev->mcu_hang = 0;
-		dev->rx_dma_idx = ~0;
-		memset(dev->tx_dma_idx, 0xff, sizeof(dev->tx_dma_idx));
-		reset = true;
-		dev->mphy.mac_work_count = 0;
-	}
-
-	if (dev->mphy.mac_work_count >= 10)
-		dev->mphy.mac_work_count = 0;
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	if (reset)
-		mt7603_mac_watchdog_reset(dev);
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mphy.mac_work,
-				     msecs_to_jiffies(MT7603_WATCHDOG_TIME));
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mac.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mac.h
deleted file mode 100644
index 17e34ec..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mac.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-
-#ifndef __MT7603_MAC_H
-#define __MT7603_MAC_H
-
-#define MT_RXD0_LENGTH			GENMASK(15, 0)
-#define MT_RXD0_PKT_TYPE		GENMASK(31, 29)
-
-#define MT_RXD0_NORMAL_ETH_TYPE_OFS	GENMASK(22, 16)
-#define MT_RXD0_NORMAL_IP_SUM		BIT(23)
-#define MT_RXD0_NORMAL_UDP_TCP_SUM	BIT(24)
-#define MT_RXD0_NORMAL_GROUP_1		BIT(25)
-#define MT_RXD0_NORMAL_GROUP_2		BIT(26)
-#define MT_RXD0_NORMAL_GROUP_3		BIT(27)
-#define MT_RXD0_NORMAL_GROUP_4		BIT(28)
-
-enum rx_pkt_type {
-	PKT_TYPE_TXS		= 0,
-	PKT_TYPE_TXRXV		= 1,
-	PKT_TYPE_NORMAL		= 2,
-	PKT_TYPE_RX_DUP_RFB	= 3,
-	PKT_TYPE_RX_TMR		= 4,
-	PKT_TYPE_RETRIEVE	= 5,
-	PKT_TYPE_RX_EVENT	= 7,
-};
-
-#define MT_RXD1_NORMAL_BSSID		GENMASK(31, 26)
-#define MT_RXD1_NORMAL_PAYLOAD_FORMAT	GENMASK(25, 24)
-#define MT_RXD1_NORMAL_HDR_TRANS	BIT(23)
-#define MT_RXD1_NORMAL_HDR_OFFSET	BIT(22)
-#define MT_RXD1_NORMAL_MAC_HDR_LEN	GENMASK(21, 16)
-#define MT_RXD1_NORMAL_CH_FREQ		GENMASK(15, 8)
-#define MT_RXD1_NORMAL_KEY_ID		GENMASK(7, 6)
-#define MT_RXD1_NORMAL_BEACON_UC	BIT(5)
-#define MT_RXD1_NORMAL_BEACON_MC	BIT(4)
-#define MT_RXD1_NORMAL_BCAST		BIT(3)
-#define MT_RXD1_NORMAL_MCAST		BIT(2)
-#define MT_RXD1_NORMAL_U2M		BIT(1)
-#define MT_RXD1_NORMAL_HTC_VLD		BIT(0)
-
-#define MT_RXD2_NORMAL_NON_AMPDU	BIT(31)
-#define MT_RXD2_NORMAL_NON_AMPDU_SUB	BIT(30)
-#define MT_RXD2_NORMAL_NDATA		BIT(29)
-#define MT_RXD2_NORMAL_NULL_FRAME	BIT(28)
-#define MT_RXD2_NORMAL_FRAG		BIT(27)
-#define MT_RXD2_NORMAL_UDF_VALID	BIT(26)
-#define MT_RXD2_NORMAL_LLC_MIS		BIT(25)
-#define MT_RXD2_NORMAL_MAX_LEN_ERROR	BIT(24)
-#define MT_RXD2_NORMAL_AMSDU_ERR	BIT(23)
-#define MT_RXD2_NORMAL_LEN_MISMATCH	BIT(22)
-#define MT_RXD2_NORMAL_TKIP_MIC_ERR	BIT(21)
-#define MT_RXD2_NORMAL_ICV_ERR		BIT(20)
-#define MT_RXD2_NORMAL_CLM		BIT(19)
-#define MT_RXD2_NORMAL_CM		BIT(18)
-#define MT_RXD2_NORMAL_FCS_ERR		BIT(17)
-#define MT_RXD2_NORMAL_SW_BIT		BIT(16)
-#define MT_RXD2_NORMAL_SEC_MODE		GENMASK(15, 12)
-#define MT_RXD2_NORMAL_TID		GENMASK(11, 8)
-#define MT_RXD2_NORMAL_WLAN_IDX		GENMASK(7, 0)
-
-#define MT_RXD3_NORMAL_PF_STS		GENMASK(31, 30)
-#define MT_RXD3_NORMAL_PF_MODE		BIT(29)
-#define MT_RXD3_NORMAL_CLS_BITMAP	GENMASK(28, 19)
-#define MT_RXD3_NORMAL_WOL		GENMASK(18, 14)
-#define MT_RXD3_NORMAL_MAGIC_PKT	BIT(13)
-#define MT_RXD3_NORMAL_OFLD		GENMASK(12, 11)
-#define MT_RXD3_NORMAL_CLS		BIT(10)
-#define MT_RXD3_NORMAL_PATTERN_DROP	BIT(9)
-#define MT_RXD3_NORMAL_TSF_COMPARE_LOSS	BIT(8)
-#define MT_RXD3_NORMAL_RXV_SEQ		GENMASK(7, 0)
-
-#define MT_RXV1_VHTA1_B5_B4		GENMASK(31, 30)
-#define MT_RXV1_VHTA2_B8_B1		GENMASK(29, 22)
-#define MT_RXV1_HT_NO_SOUND		BIT(21)
-#define MT_RXV1_HT_SMOOTH		BIT(20)
-#define MT_RXV1_HT_SHORT_GI		BIT(19)
-#define MT_RXV1_HT_AGGR			BIT(18)
-#define MT_RXV1_VHTA1_B22		BIT(17)
-#define MT_RXV1_FRAME_MODE		GENMASK(16, 15)
-#define MT_RXV1_TX_MODE			GENMASK(14, 12)
-#define MT_RXV1_HT_EXT_LTF		GENMASK(11, 10)
-#define MT_RXV1_HT_AD_CODE		BIT(9)
-#define MT_RXV1_HT_STBC			GENMASK(8, 7)
-#define MT_RXV1_TX_RATE			GENMASK(6, 0)
-
-#define MT_RXV2_VHTA1_B16_B6		GENMASK(31, 21)
-#define MT_RXV2_LENGTH			GENMASK(20, 0)
-
-#define MT_RXV3_F_AGC1_CAL_GAIN		GENMASK(31, 29)
-#define MT_RXV3_F_AGC1_EQ_CAL		BIT(28)
-#define MT_RXV3_RCPI1			GENMASK(27, 20)
-#define MT_RXV3_F_AGC0_CAL_GAIN		GENMASK(19, 17)
-#define MT_RXV3_F_AGC0_EQ_CAL		BIT(16)
-#define MT_RXV3_RCPI0			GENMASK(15, 8)
-#define MT_RXV3_SEL_ANT			BIT(7)
-#define MT_RXV3_ACI_DET_X		BIT(6)
-#define MT_RXV3_OFDM_FREQ_TRANS_DETECT	BIT(5)
-#define MT_RXV3_VHTA1_B21_B17		GENMASK(4, 0)
-
-#define MT_RXV4_F_AGC_CAL_GAIN		GENMASK(31, 29)
-#define MT_RXV4_F_AGC2_EQ_CAL		BIT(28)
-#define MT_RXV4_IB_RSSI1		GENMASK(27, 20)
-#define MT_RXV4_F_AGC_LPF_GAIN_X	GENMASK(19, 16)
-#define MT_RXV4_WB_RSSI_X		GENMASK(15, 8)
-#define MT_RXV4_IB_RSSI0		GENMASK(7, 0)
-
-#define MT_RXV5_LTF_SNR0		GENMASK(31, 26)
-#define MT_RXV5_LTF_PROC_TIME		GENMASK(25, 19)
-#define MT_RXV5_FOE			GENMASK(18, 7)
-#define MT_RXV5_C_AGC_SATE		GENMASK(6, 4)
-#define MT_RXV5_F_AGC_LNA_GAIN_0	GENMASK(3, 2)
-#define MT_RXV5_F_AGC_LNA_GAIN_1	GENMASK(1, 0)
-
-#define MT_RXV6_C_AGC_STATE		GENMASK(30, 28)
-#define MT_RXV6_NS_TS_FIELD		GENMASK(27, 25)
-#define MT_RXV6_RX_VALID		BIT(24)
-#define MT_RXV6_NF2			GENMASK(23, 16)
-#define MT_RXV6_NF1			GENMASK(15, 8)
-#define MT_RXV6_NF0			GENMASK(7, 0)
-
-enum mt7603_tx_header_format {
-	MT_HDR_FORMAT_802_3,
-	MT_HDR_FORMAT_CMD,
-	MT_HDR_FORMAT_802_11,
-	MT_HDR_FORMAT_802_11_EXT,
-};
-
-#define MT_TXD_SIZE			(8 * 4)
-
-#define MT_TXD0_P_IDX			BIT(31)
-#define MT_TXD0_Q_IDX			GENMASK(30, 27)
-#define MT_TXD0_UTXB			BIT(26)
-#define MT_TXD0_UNXV			BIT(25)
-#define MT_TXD0_UDP_TCP_SUM		BIT(24)
-#define MT_TXD0_IP_SUM			BIT(23)
-#define MT_TXD0_ETH_TYPE_OFFSET		GENMASK(22, 16)
-#define MT_TXD0_TX_BYTES		GENMASK(15, 0)
-
-#define MT_TXD1_OWN_MAC			GENMASK(31, 26)
-#define MT_TXD1_PROTECTED		BIT(23)
-#define MT_TXD1_TID			GENMASK(22, 20)
-#define MT_TXD1_NO_ACK			BIT(19)
-#define MT_TXD1_HDR_PAD			GENMASK(18, 16)
-#define MT_TXD1_LONG_FORMAT		BIT(15)
-#define MT_TXD1_HDR_FORMAT		GENMASK(14, 13)
-#define MT_TXD1_HDR_INFO		GENMASK(12, 8)
-#define MT_TXD1_WLAN_IDX		GENMASK(7, 0)
-
-#define MT_TXD2_FIX_RATE		BIT(31)
-#define MT_TXD2_TIMING_MEASURE		BIT(30)
-#define MT_TXD2_BA_DISABLE		BIT(29)
-#define MT_TXD2_POWER_OFFSET		GENMASK(28, 24)
-#define MT_TXD2_MAX_TX_TIME		GENMASK(23, 16)
-#define MT_TXD2_FRAG			GENMASK(15, 14)
-#define MT_TXD2_HTC_VLD			BIT(13)
-#define MT_TXD2_DURATION		BIT(12)
-#define MT_TXD2_BIP			BIT(11)
-#define MT_TXD2_MULTICAST		BIT(10)
-#define MT_TXD2_RTS			BIT(9)
-#define MT_TXD2_SOUNDING		BIT(8)
-#define MT_TXD2_NDPA			BIT(7)
-#define MT_TXD2_NDP			BIT(6)
-#define MT_TXD2_FRAME_TYPE		GENMASK(5, 4)
-#define MT_TXD2_SUB_TYPE		GENMASK(3, 0)
-
-#define MT_TXD3_SN_VALID		BIT(31)
-#define MT_TXD3_PN_VALID		BIT(30)
-#define MT_TXD3_SEQ			GENMASK(27, 16)
-#define MT_TXD3_REM_TX_COUNT		GENMASK(15, 11)
-#define MT_TXD3_TX_COUNT		GENMASK(10, 6)
-
-#define MT_TXD4_PN_LOW			GENMASK(31, 0)
-
-#define MT_TXD5_PN_HIGH			GENMASK(31, 16)
-#define MT_TXD5_SW_POWER_MGMT		BIT(13)
-#define MT_TXD5_BA_SEQ_CTRL		BIT(12)
-#define MT_TXD5_DA_SELECT		BIT(11)
-#define MT_TXD5_TX_STATUS_HOST		BIT(10)
-#define MT_TXD5_TX_STATUS_MCU		BIT(9)
-#define MT_TXD5_TX_STATUS_FMT		BIT(8)
-#define MT_TXD5_PID			GENMASK(7, 0)
-
-#define MT_TXD6_SGI			BIT(31)
-#define MT_TXD6_LDPC			BIT(30)
-#define MT_TXD6_TX_RATE			GENMASK(29, 18)
-#define MT_TXD6_I_TXBF			BIT(17)
-#define MT_TXD6_E_TXBF			BIT(16)
-#define MT_TXD6_DYN_BW			BIT(15)
-#define MT_TXD6_ANT_PRI			GENMASK(14, 12)
-#define MT_TXD6_SPE_EN			BIT(11)
-#define MT_TXD6_FIXED_BW		BIT(10)
-#define MT_TXD6_BW			GENMASK(9, 8)
-#define MT_TXD6_ANT_ID			GENMASK(7, 2)
-#define MT_TXD6_FIXED_RATE		BIT(0)
-
-#define MT_TX_RATE_STBC			BIT(11)
-#define MT_TX_RATE_NSS			GENMASK(10, 9)
-#define MT_TX_RATE_MODE			GENMASK(8, 6)
-#define MT_TX_RATE_IDX			GENMASK(5, 0)
-
-#define MT_TXS0_ANTENNA			GENMASK(31, 26)
-#define MT_TXS0_TID			GENMASK(25, 22)
-#define MT_TXS0_BA_ERROR		BIT(22)
-#define MT_TXS0_PS_FLAG			BIT(21)
-#define MT_TXS0_TXOP_TIMEOUT		BIT(20)
-#define MT_TXS0_BIP_ERROR		BIT(19)
-
-#define MT_TXS0_QUEUE_TIMEOUT		BIT(18)
-#define MT_TXS0_RTS_TIMEOUT		BIT(17)
-#define MT_TXS0_ACK_TIMEOUT		BIT(16)
-#define MT_TXS0_ACK_ERROR_MASK		GENMASK(18, 16)
-
-#define MT_TXS0_TX_STATUS_HOST		BIT(15)
-#define MT_TXS0_TX_STATUS_MCU		BIT(14)
-#define MT_TXS0_TXS_FORMAT		BIT(13)
-#define MT_TXS0_FIXED_RATE		BIT(12)
-#define MT_TXS0_TX_RATE			GENMASK(11, 0)
-
-#define MT_TXS1_F0_TIMESTAMP		GENMASK(31, 0)
-#define MT_TXS1_F1_NOISE_2		GENMASK(23, 16)
-#define MT_TXS1_F1_NOISE_1		GENMASK(15, 8)
-#define MT_TXS1_F1_NOISE_0		GENMASK(7, 0)
-
-#define MT_TXS2_F0_FRONT_TIME		GENMASK(24, 0)
-#define MT_TXS2_F1_RCPI_2		GENMASK(23, 16)
-#define MT_TXS2_F1_RCPI_1		GENMASK(15, 8)
-#define MT_TXS2_F1_RCPI_0		GENMASK(7, 0)
-
-#define MT_TXS3_WCID			GENMASK(31, 24)
-#define MT_TXS3_RXV_SEQNO		GENMASK(23, 16)
-#define MT_TXS3_TX_DELAY		GENMASK(15, 0)
-
-#define MT_TXS4_LAST_TX_RATE		GENMASK(31, 29)
-#define MT_TXS4_TX_COUNT		GENMASK(28, 24)
-#define MT_TXS4_AMPDU			BIT(23)
-#define MT_TXS4_ACKED_MPDU		BIT(22)
-#define MT_TXS4_PID			GENMASK(21, 14)
-#define MT_TXS4_BW			GENMASK(13, 12)
-#define MT_TXS4_F0_SEQNO		GENMASK(11, 0)
-#define MT_TXS4_F1_TSSI			GENMASK(11, 0)
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/main.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/main.c
deleted file mode 100644
index 91425b4..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/main.c
+++ /dev/null
@@ -1,754 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include <linux/etherdevice.h>
-#include <linux/platform_device.h>
-#include <linux/pci.h>
-#include <linux/module.h>
-#include "mt7603.h"
-#include "mac.h"
-#include "eeprom.h"
-
-static int
-mt7603_start(struct ieee80211_hw *hw)
-{
-	struct mt7603_dev *dev = hw->priv;
-
-	mt7603_mac_reset_counters(dev);
-	mt7603_mac_start(dev);
-	dev->mphy.survey_time = ktime_get_boottime();
-	set_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-	mt7603_mac_work(&dev->mphy.mac_work.work);
-
-	return 0;
-}
-
-static void
-mt7603_stop(struct ieee80211_hw *hw)
-{
-	struct mt7603_dev *dev = hw->priv;
-
-	clear_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-	cancel_delayed_work_sync(&dev->mphy.mac_work);
-	mt7603_mac_stop(dev);
-}
-
-static int
-mt7603_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
-	struct mt7603_dev *dev = hw->priv;
-	struct mt76_txq *mtxq;
-	u8 bc_addr[ETH_ALEN];
-	int idx;
-	int ret = 0;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mvif->idx = __ffs64(~dev->mt76.vif_mask);
-	if (mvif->idx >= MT7603_MAX_INTERFACES) {
-		ret = -ENOSPC;
-		goto out;
-	}
-
-	mt76_wr(dev, MT_MAC_ADDR0(mvif->idx),
-		get_unaligned_le32(vif->addr));
-	mt76_wr(dev, MT_MAC_ADDR1(mvif->idx),
-		(get_unaligned_le16(vif->addr + 4) |
-		 MT_MAC_ADDR1_VALID));
-
-	if (vif->type == NL80211_IFTYPE_AP) {
-		mt76_wr(dev, MT_BSSID0(mvif->idx),
-			get_unaligned_le32(vif->addr));
-		mt76_wr(dev, MT_BSSID1(mvif->idx),
-			(get_unaligned_le16(vif->addr + 4) |
-			 MT_BSSID1_VALID));
-	}
-
-	idx = MT7603_WTBL_RESERVED - 1 - mvif->idx;
-	dev->mt76.vif_mask |= BIT_ULL(mvif->idx);
-	INIT_LIST_HEAD(&mvif->sta.poll_list);
-	mvif->sta.wcid.idx = idx;
-	mvif->sta.wcid.hw_key_idx = -1;
-	mt76_packet_id_init(&mvif->sta.wcid);
-
-	eth_broadcast_addr(bc_addr);
-	mt7603_wtbl_init(dev, idx, mvif->idx, bc_addr);
-
-	mtxq = (struct mt76_txq *)vif->txq->drv_priv;
-	mtxq->wcid = idx;
-	rcu_assign_pointer(dev->mt76.wcid[idx], &mvif->sta.wcid);
-
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static void
-mt7603_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
-	struct mt7603_sta *msta = &mvif->sta;
-	struct mt7603_dev *dev = hw->priv;
-	int idx = msta->wcid.idx;
-
-	mt76_wr(dev, MT_MAC_ADDR0(mvif->idx), 0);
-	mt76_wr(dev, MT_MAC_ADDR1(mvif->idx), 0);
-	mt76_wr(dev, MT_BSSID0(mvif->idx), 0);
-	mt76_wr(dev, MT_BSSID1(mvif->idx), 0);
-	mt7603_beacon_set_timer(dev, mvif->idx, 0);
-
-	rcu_assign_pointer(dev->mt76.wcid[idx], NULL);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (!list_empty(&msta->poll_list))
-		list_del_init(&msta->poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	mutex_lock(&dev->mt76.mutex);
-	dev->mt76.vif_mask &= ~BIT_ULL(mvif->idx);
-	mutex_unlock(&dev->mt76.mutex);
-
-	mt76_packet_id_flush(&dev->mt76, &mvif->sta.wcid);
-}
-
-void mt7603_init_edcca(struct mt7603_dev *dev)
-{
-	/* Set lower signal level to -65dBm */
-	mt76_rmw_field(dev, MT_RXTD(8), MT_RXTD_8_LOWER_SIGNAL, 0x23);
-
-	/* clear previous energy detect monitor results */
-	mt76_rr(dev, MT_MIB_STAT_ED);
-
-	if (dev->ed_monitor)
-		mt76_set(dev, MT_MIB_CTL, MT_MIB_CTL_ED_TIME);
-	else
-		mt76_clear(dev, MT_MIB_CTL, MT_MIB_CTL_ED_TIME);
-
-	dev->ed_strict_mode = 0xff;
-	dev->ed_strong_signal = 0;
-	dev->ed_time = ktime_get_boottime();
-
-	mt7603_edcca_set_strict(dev, false);
-}
-
-static int
-mt7603_set_channel(struct ieee80211_hw *hw, struct cfg80211_chan_def *def)
-{
-	struct mt7603_dev *dev = hw->priv;
-	u8 *rssi_data = (u8 *)dev->mt76.eeprom.data;
-	int idx, ret;
-	u8 bw = MT_BW_20;
-	bool failed = false;
-
-	ieee80211_stop_queues(hw);
-	cancel_delayed_work_sync(&dev->mphy.mac_work);
-	tasklet_disable(&dev->mt76.pre_tbtt_tasklet);
-
-	mutex_lock(&dev->mt76.mutex);
-	set_bit(MT76_RESET, &dev->mphy.state);
-
-	mt7603_beacon_set_timer(dev, -1, 0);
-	mt76_set_channel(&dev->mphy);
-	mt7603_mac_stop(dev);
-
-	if (def->width == NL80211_CHAN_WIDTH_40)
-		bw = MT_BW_40;
-
-	dev->mphy.chandef = *def;
-	mt76_rmw_field(dev, MT_AGG_BWCR, MT_AGG_BWCR_BW, bw);
-	ret = mt7603_mcu_set_channel(dev);
-	if (ret) {
-		failed = true;
-		goto out;
-	}
-
-	if (def->chan->band == NL80211_BAND_5GHZ) {
-		idx = 1;
-		rssi_data += MT_EE_RSSI_OFFSET_5G;
-	} else {
-		idx = 0;
-		rssi_data += MT_EE_RSSI_OFFSET_2G;
-	}
-
-	memcpy(dev->rssi_offset, rssi_data, sizeof(dev->rssi_offset));
-
-	idx |= (def->chan -
-		mt76_hw(dev)->wiphy->bands[def->chan->band]->channels) << 1;
-	mt76_wr(dev, MT_WF_RMAC_CH_FREQ, idx);
-	mt7603_mac_set_timing(dev);
-	mt7603_mac_start(dev);
-
-	clear_bit(MT76_RESET, &dev->mphy.state);
-
-	mt76_txq_schedule_all(&dev->mphy);
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mphy.mac_work,
-				     msecs_to_jiffies(MT7603_WATCHDOG_TIME));
-
-	/* reset channel stats */
-	mt76_clear(dev, MT_MIB_CTL, MT_MIB_CTL_READ_CLR_DIS);
-	mt76_set(dev, MT_MIB_CTL,
-		 MT_MIB_CTL_CCA_NAV_TX | MT_MIB_CTL_PSCCA_TIME);
-	mt76_rr(dev, MT_MIB_STAT_CCA);
-	mt7603_cca_stats_reset(dev);
-
-	dev->mphy.survey_time = ktime_get_boottime();
-
-	mt7603_init_edcca(dev);
-
-out:
-	if (!(mt76_hw(dev)->conf.flags & IEEE80211_CONF_OFFCHANNEL))
-		mt7603_beacon_set_timer(dev, -1, dev->mt76.beacon_int);
-	mutex_unlock(&dev->mt76.mutex);
-
-	tasklet_enable(&dev->mt76.pre_tbtt_tasklet);
-
-	if (failed)
-		mt7603_mac_work(&dev->mphy.mac_work.work);
-
-	ieee80211_wake_queues(hw);
-
-	return ret;
-}
-
-static int mt7603_set_sar_specs(struct ieee80211_hw *hw,
-				const struct cfg80211_sar_specs *sar)
-{
-	struct mt7603_dev *dev = hw->priv;
-	struct mt76_phy *mphy = &dev->mphy;
-	int err;
-
-	if (!cfg80211_chandef_valid(&mphy->chandef))
-		return -EINVAL;
-
-	err = mt76_init_sar_power(hw, sar);
-	if (err)
-		return err;
-
-	return mt7603_set_channel(hw, &mphy->chandef);
-}
-
-static int
-mt7603_config(struct ieee80211_hw *hw, u32 changed)
-{
-	struct mt7603_dev *dev = hw->priv;
-	int ret = 0;
-
-	if (changed & (IEEE80211_CONF_CHANGE_CHANNEL |
-		       IEEE80211_CONF_CHANGE_POWER))
-		ret = mt7603_set_channel(hw, &hw->conf.chandef);
-
-	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
-		mutex_lock(&dev->mt76.mutex);
-
-		if (!(hw->conf.flags & IEEE80211_CONF_MONITOR))
-			dev->rxfilter |= MT_WF_RFCR_DROP_OTHER_UC;
-		else
-			dev->rxfilter &= ~MT_WF_RFCR_DROP_OTHER_UC;
-
-		mt76_wr(dev, MT_WF_RFCR, dev->rxfilter);
-
-		mutex_unlock(&dev->mt76.mutex);
-	}
-
-	return ret;
-}
-
-static void
-mt7603_configure_filter(struct ieee80211_hw *hw, unsigned int changed_flags,
-			unsigned int *total_flags, u64 multicast)
-{
-	struct mt7603_dev *dev = hw->priv;
-	u32 flags = 0;
-
-#define MT76_FILTER(_flag, _hw) do { \
-		flags |= *total_flags & FIF_##_flag;			\
-		dev->rxfilter &= ~(_hw);				\
-		dev->rxfilter |= !(flags & FIF_##_flag) * (_hw);	\
-	} while (0)
-
-	dev->rxfilter &= ~(MT_WF_RFCR_DROP_OTHER_BSS |
-			   MT_WF_RFCR_DROP_OTHER_BEACON |
-			   MT_WF_RFCR_DROP_FRAME_REPORT |
-			   MT_WF_RFCR_DROP_PROBEREQ |
-			   MT_WF_RFCR_DROP_MCAST_FILTERED |
-			   MT_WF_RFCR_DROP_MCAST |
-			   MT_WF_RFCR_DROP_BCAST |
-			   MT_WF_RFCR_DROP_DUPLICATE |
-			   MT_WF_RFCR_DROP_A2_BSSID |
-			   MT_WF_RFCR_DROP_UNWANTED_CTL |
-			   MT_WF_RFCR_DROP_STBC_MULTI);
-
-	MT76_FILTER(OTHER_BSS, MT_WF_RFCR_DROP_OTHER_TIM |
-			       MT_WF_RFCR_DROP_A3_MAC |
-			       MT_WF_RFCR_DROP_A3_BSSID);
-
-	MT76_FILTER(FCSFAIL, MT_WF_RFCR_DROP_FCSFAIL);
-
-	MT76_FILTER(CONTROL, MT_WF_RFCR_DROP_CTS |
-			     MT_WF_RFCR_DROP_RTS |
-			     MT_WF_RFCR_DROP_CTL_RSV |
-			     MT_WF_RFCR_DROP_NDPA);
-
-	*total_flags = flags;
-	mt76_wr(dev, MT_WF_RFCR, dev->rxfilter);
-}
-
-static void
-mt7603_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			struct ieee80211_bss_conf *info, u32 changed)
-{
-	struct mt7603_dev *dev = hw->priv;
-	struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (changed & (BSS_CHANGED_ASSOC | BSS_CHANGED_BSSID)) {
-		if (info->assoc || info->ibss_joined) {
-			mt76_wr(dev, MT_BSSID0(mvif->idx),
-				get_unaligned_le32(info->bssid));
-			mt76_wr(dev, MT_BSSID1(mvif->idx),
-				(get_unaligned_le16(info->bssid + 4) |
-				 MT_BSSID1_VALID));
-		} else {
-			mt76_wr(dev, MT_BSSID0(mvif->idx), 0);
-			mt76_wr(dev, MT_BSSID1(mvif->idx), 0);
-		}
-	}
-
-	if (changed & BSS_CHANGED_ERP_SLOT) {
-		int slottime = info->use_short_slot ? 9 : 20;
-
-		if (slottime != dev->slottime) {
-			dev->slottime = slottime;
-			mt7603_mac_set_timing(dev);
-		}
-	}
-
-	if (changed & (BSS_CHANGED_BEACON_ENABLED | BSS_CHANGED_BEACON_INT)) {
-		int beacon_int = !!info->enable_beacon * info->beacon_int;
-
-		tasklet_disable(&dev->mt76.pre_tbtt_tasklet);
-		mt7603_beacon_set_timer(dev, mvif->idx, beacon_int);
-		tasklet_enable(&dev->mt76.pre_tbtt_tasklet);
-	}
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-int
-mt7603_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-	       struct ieee80211_sta *sta)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-	struct mt7603_sta *msta = (struct mt7603_sta *)sta->drv_priv;
-	struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
-	int idx;
-	int ret = 0;
-
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7603_WTBL_STA - 1);
-	if (idx < 0)
-		return -ENOSPC;
-
-	INIT_LIST_HEAD(&msta->poll_list);
-	__skb_queue_head_init(&msta->psq);
-	msta->ps = ~0;
-	msta->smps = ~0;
-	msta->wcid.sta = 1;
-	msta->wcid.idx = idx;
-	mt7603_wtbl_init(dev, idx, mvif->idx, sta->addr);
-	mt7603_wtbl_set_ps(dev, msta, false);
-
-	if (vif->type == NL80211_IFTYPE_AP)
-		set_bit(MT_WCID_FLAG_CHECK_PS, &msta->wcid.flags);
-
-	return ret;
-}
-
-void
-mt7603_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		 struct ieee80211_sta *sta)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-
-	mt7603_wtbl_update_cap(dev, sta);
-}
-
-void
-mt7603_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		  struct ieee80211_sta *sta)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-	struct mt7603_sta *msta = (struct mt7603_sta *)sta->drv_priv;
-	struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv;
-
-	spin_lock_bh(&dev->ps_lock);
-	__skb_queue_purge(&msta->psq);
-	mt7603_filter_tx(dev, wcid->idx, true);
-	spin_unlock_bh(&dev->ps_lock);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (!list_empty(&msta->poll_list))
-		list_del_init(&msta->poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	mt7603_wtbl_clear(dev, wcid->idx);
-}
-
-static void
-mt7603_ps_tx_list(struct mt7603_dev *dev, struct sk_buff_head *list)
-{
-	struct sk_buff *skb;
-
-	while ((skb = __skb_dequeue(list)) != NULL) {
-		int qid = skb_get_queue_mapping(skb);
-
-		mt76_tx_queue_skb_raw(dev, dev->mphy.q_tx[qid], skb, 0);
-	}
-}
-
-void
-mt7603_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-	struct mt7603_sta *msta = (struct mt7603_sta *)sta->drv_priv;
-	struct sk_buff_head list;
-
-	mt76_stop_tx_queues(&dev->mphy, sta, true);
-	mt7603_wtbl_set_ps(dev, msta, ps);
-	if (ps)
-		return;
-
-	__skb_queue_head_init(&list);
-
-	spin_lock_bh(&dev->ps_lock);
-	skb_queue_splice_tail_init(&msta->psq, &list);
-	spin_unlock_bh(&dev->ps_lock);
-
-	mt7603_ps_tx_list(dev, &list);
-}
-
-static void
-mt7603_ps_set_more_data(struct sk_buff *skb)
-{
-	struct ieee80211_hdr *hdr;
-
-	hdr = (struct ieee80211_hdr *)&skb->data[MT_TXD_SIZE];
-	hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_MOREDATA);
-}
-
-static void
-mt7603_release_buffered_frames(struct ieee80211_hw *hw,
-			       struct ieee80211_sta *sta,
-			       u16 tids, int nframes,
-			       enum ieee80211_frame_release_type reason,
-			       bool more_data)
-{
-	struct mt7603_dev *dev = hw->priv;
-	struct mt7603_sta *msta = (struct mt7603_sta *)sta->drv_priv;
-	struct sk_buff_head list;
-	struct sk_buff *skb, *tmp;
-
-	__skb_queue_head_init(&list);
-
-	mt7603_wtbl_set_ps(dev, msta, false);
-
-	spin_lock_bh(&dev->ps_lock);
-	skb_queue_walk_safe(&msta->psq, skb, tmp) {
-		if (!nframes)
-			break;
-
-		if (!(tids & BIT(skb->priority)))
-			continue;
-
-		skb_set_queue_mapping(skb, MT_TXQ_PSD);
-		__skb_unlink(skb, &msta->psq);
-		mt7603_ps_set_more_data(skb);
-		__skb_queue_tail(&list, skb);
-		nframes--;
-	}
-	spin_unlock_bh(&dev->ps_lock);
-
-	if (!skb_queue_empty(&list))
-		ieee80211_sta_eosp(sta);
-
-	mt7603_ps_tx_list(dev, &list);
-
-	if (nframes)
-		mt76_release_buffered_frames(hw, sta, tids, nframes, reason,
-					     more_data);
-}
-
-static int
-mt7603_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
-	       struct ieee80211_vif *vif, struct ieee80211_sta *sta,
-	       struct ieee80211_key_conf *key)
-{
-	struct mt7603_dev *dev = hw->priv;
-	struct mt7603_vif *mvif = (struct mt7603_vif *)vif->drv_priv;
-	struct mt7603_sta *msta = sta ? (struct mt7603_sta *)sta->drv_priv :
-				  &mvif->sta;
-	struct mt76_wcid *wcid = &msta->wcid;
-	int idx = key->keyidx;
-
-	/* fall back to sw encryption for unsupported ciphers */
-	switch (key->cipher) {
-	case WLAN_CIPHER_SUITE_TKIP:
-	case WLAN_CIPHER_SUITE_CCMP:
-		break;
-	default:
-		return -EOPNOTSUPP;
-	}
-
-	/*
-	 * The hardware does not support per-STA RX GTK, fall back
-	 * to software mode for these.
-	 */
-	if ((vif->type == NL80211_IFTYPE_ADHOC ||
-	     vif->type == NL80211_IFTYPE_MESH_POINT) &&
-	    (key->cipher == WLAN_CIPHER_SUITE_TKIP ||
-	     key->cipher == WLAN_CIPHER_SUITE_CCMP) &&
-	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
-		return -EOPNOTSUPP;
-
-	if (cmd == SET_KEY) {
-		key->hw_key_idx = wcid->idx;
-		wcid->hw_key_idx = idx;
-	} else {
-		if (idx == wcid->hw_key_idx)
-			wcid->hw_key_idx = -1;
-
-		key = NULL;
-	}
-	mt76_wcid_key_setup(&dev->mt76, wcid, key);
-
-	return mt7603_wtbl_set_key(dev, wcid->idx, key);
-}
-
-static int
-mt7603_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
-	       const struct ieee80211_tx_queue_params *params)
-{
-	struct mt7603_dev *dev = hw->priv;
-	u16 cw_min = (1 << 5) - 1;
-	u16 cw_max = (1 << 10) - 1;
-	u32 val;
-
-	queue = dev->mphy.q_tx[queue]->hw_idx;
-
-	if (params->cw_min)
-		cw_min = params->cw_min;
-	if (params->cw_max)
-		cw_max = params->cw_max;
-
-	mutex_lock(&dev->mt76.mutex);
-	mt7603_mac_stop(dev);
-
-	val = mt76_rr(dev, MT_WMM_TXOP(queue));
-	val &= ~(MT_WMM_TXOP_MASK << MT_WMM_TXOP_SHIFT(queue));
-	val |= params->txop << MT_WMM_TXOP_SHIFT(queue);
-	mt76_wr(dev, MT_WMM_TXOP(queue), val);
-
-	val = mt76_rr(dev, MT_WMM_AIFSN);
-	val &= ~(MT_WMM_AIFSN_MASK << MT_WMM_AIFSN_SHIFT(queue));
-	val |= params->aifs << MT_WMM_AIFSN_SHIFT(queue);
-	mt76_wr(dev, MT_WMM_AIFSN, val);
-
-	val = mt76_rr(dev, MT_WMM_CWMIN);
-	val &= ~(MT_WMM_CWMIN_MASK << MT_WMM_CWMIN_SHIFT(queue));
-	val |= cw_min << MT_WMM_CWMIN_SHIFT(queue);
-	mt76_wr(dev, MT_WMM_CWMIN, val);
-
-	val = mt76_rr(dev, MT_WMM_CWMAX(queue));
-	val &= ~(MT_WMM_CWMAX_MASK << MT_WMM_CWMAX_SHIFT(queue));
-	val |= cw_max << MT_WMM_CWMAX_SHIFT(queue);
-	mt76_wr(dev, MT_WMM_CWMAX(queue), val);
-
-	mt7603_mac_start(dev);
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-static void
-mt7603_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	     u32 queues, bool drop)
-{
-}
-
-static int
-mt7603_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		    struct ieee80211_ampdu_params *params)
-{
-	enum ieee80211_ampdu_mlme_action action = params->action;
-	struct mt7603_dev *dev = hw->priv;
-	struct ieee80211_sta *sta = params->sta;
-	struct ieee80211_txq *txq = sta->txq[params->tid];
-	struct mt7603_sta *msta = (struct mt7603_sta *)sta->drv_priv;
-	u16 tid = params->tid;
-	u16 ssn = params->ssn;
-	u8 ba_size = params->buf_size;
-	struct mt76_txq *mtxq;
-	int ret = 0;
-
-	if (!txq)
-		return -EINVAL;
-
-	mtxq = (struct mt76_txq *)txq->drv_priv;
-
-	mutex_lock(&dev->mt76.mutex);
-	switch (action) {
-	case IEEE80211_AMPDU_RX_START:
-		mt76_rx_aggr_start(&dev->mt76, &msta->wcid, tid, ssn,
-				   params->buf_size);
-		mt7603_mac_rx_ba_reset(dev, sta->addr, tid);
-		break;
-	case IEEE80211_AMPDU_RX_STOP:
-		mt76_rx_aggr_stop(&dev->mt76, &msta->wcid, tid);
-		break;
-	case IEEE80211_AMPDU_TX_OPERATIONAL:
-		mtxq->aggr = true;
-		mtxq->send_bar = false;
-		mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, ba_size);
-		break;
-	case IEEE80211_AMPDU_TX_STOP_FLUSH:
-	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
-		mtxq->aggr = false;
-		mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, -1);
-		break;
-	case IEEE80211_AMPDU_TX_START:
-		mtxq->agg_ssn = IEEE80211_SN_TO_SEQ(ssn);
-		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
-		break;
-	case IEEE80211_AMPDU_TX_STOP_CONT:
-		mtxq->aggr = false;
-		mt7603_mac_tx_ba_reset(dev, msta->wcid.idx, tid, -1);
-		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
-	}
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static void
-mt7603_sta_rate_tbl_update(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta)
-{
-	struct mt7603_dev *dev = hw->priv;
-	struct mt7603_sta *msta = (struct mt7603_sta *)sta->drv_priv;
-	struct ieee80211_sta_rates *sta_rates = rcu_dereference(sta->rates);
-	int i;
-
-	if (!sta_rates)
-		return;
-
-	spin_lock_bh(&dev->mt76.lock);
-	for (i = 0; i < ARRAY_SIZE(msta->rates); i++) {
-		msta->rates[i].idx = sta_rates->rate[i].idx;
-		msta->rates[i].count = sta_rates->rate[i].count;
-		msta->rates[i].flags = sta_rates->rate[i].flags;
-
-		if (msta->rates[i].idx < 0 || !msta->rates[i].count)
-			break;
-	}
-	msta->n_rates = i;
-	mt7603_wtbl_set_rates(dev, msta, NULL, msta->rates);
-	msta->rate_probe = false;
-	mt7603_wtbl_set_smps(dev, msta,
-			     sta->smps_mode == IEEE80211_SMPS_DYNAMIC);
-	spin_unlock_bh(&dev->mt76.lock);
-}
-
-static void
-mt7603_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class)
-{
-	struct mt7603_dev *dev = hw->priv;
-
-	mutex_lock(&dev->mt76.mutex);
-	dev->coverage_class = max_t(s16, coverage_class, 0);
-	mt7603_mac_set_timing(dev);
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static void mt7603_tx(struct ieee80211_hw *hw,
-		      struct ieee80211_tx_control *control,
-		      struct sk_buff *skb)
-{
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt7603_dev *dev = hw->priv;
-	struct mt76_wcid *wcid = &dev->global_sta.wcid;
-
-	if (control->sta) {
-		struct mt7603_sta *msta;
-
-		msta = (struct mt7603_sta *)control->sta->drv_priv;
-		wcid = &msta->wcid;
-	} else if (vif) {
-		struct mt7603_vif *mvif;
-
-		mvif = (struct mt7603_vif *)vif->drv_priv;
-		wcid = &mvif->sta.wcid;
-	}
-
-	mt76_tx(&dev->mphy, control->sta, wcid, skb);
-}
-
-const struct ieee80211_ops mt7603_ops = {
-	.tx = mt7603_tx,
-	.start = mt7603_start,
-	.stop = mt7603_stop,
-	.add_interface = mt7603_add_interface,
-	.remove_interface = mt7603_remove_interface,
-	.config = mt7603_config,
-	.configure_filter = mt7603_configure_filter,
-	.bss_info_changed = mt7603_bss_info_changed,
-	.sta_state = mt76_sta_state,
-	.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
-	.set_key = mt7603_set_key,
-	.conf_tx = mt7603_conf_tx,
-	.sw_scan_start = mt76_sw_scan,
-	.sw_scan_complete = mt76_sw_scan_complete,
-	.flush = mt7603_flush,
-	.ampdu_action = mt7603_ampdu_action,
-	.get_txpower = mt76_get_txpower,
-	.wake_tx_queue = mt76_wake_tx_queue,
-	.sta_rate_tbl_update = mt7603_sta_rate_tbl_update,
-	.release_buffered_frames = mt7603_release_buffered_frames,
-	.set_coverage_class = mt7603_set_coverage_class,
-	.set_tim = mt76_set_tim,
-	.get_survey = mt76_get_survey,
-	.get_antenna = mt76_get_antenna,
-	.set_sar_specs = mt7603_set_sar_specs,
-};
-
-MODULE_LICENSE("Dual BSD/GPL");
-
-static int __init mt7603_init(void)
-{
-	int ret;
-
-	ret = platform_driver_register(&mt76_wmac_driver);
-	if (ret)
-		return ret;
-
-#ifdef CONFIG_PCI
-	ret = pci_register_driver(&mt7603_pci_driver);
-	if (ret)
-		platform_driver_unregister(&mt76_wmac_driver);
-#endif
-	return ret;
-}
-
-static void __exit mt7603_exit(void)
-{
-#ifdef CONFIG_PCI
-	pci_unregister_driver(&mt7603_pci_driver);
-#endif
-	platform_driver_unregister(&mt76_wmac_driver);
-}
-
-module_init(mt7603_init);
-module_exit(mt7603_exit);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mcu.c
deleted file mode 100644
index 7884b95..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mcu.c
+++ /dev/null
@@ -1,433 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include <linux/firmware.h>
-#include "mt7603.h"
-#include "mcu.h"
-#include "eeprom.h"
-
-#define MCU_SKB_RESERVE	8
-
-struct mt7603_fw_trailer {
-	char fw_ver[10];
-	char build_date[15];
-	__le32 dl_len;
-} __packed;
-
-static int
-mt7603_mcu_parse_response(struct mt76_dev *mdev, int cmd,
-			  struct sk_buff *skb, int seq)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-	struct mt7603_mcu_rxd *rxd;
-
-	if (!skb) {
-		dev_err(mdev->dev, "MCU message %02x (seq %d) timed out\n",
-			abs(cmd), seq);
-		dev->mcu_hang = MT7603_WATCHDOG_TIMEOUT;
-		return -ETIMEDOUT;
-	}
-
-	rxd = (struct mt7603_mcu_rxd *)skb->data;
-	if (seq != rxd->seq)
-		return -EAGAIN;
-
-	return 0;
-}
-
-static int
-mt7603_mcu_skb_send_msg(struct mt76_dev *mdev, struct sk_buff *skb,
-			int cmd, int *wait_seq)
-{
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-	int hdrlen = dev->mcu_running ? sizeof(struct mt7603_mcu_txd) : 12;
-	struct mt7603_mcu_txd *txd;
-	u8 seq;
-
-	mdev->mcu.timeout = 3 * HZ;
-
-	seq = ++mdev->mcu.msg_seq & 0xf;
-	if (!seq)
-		seq = ++mdev->mcu.msg_seq & 0xf;
-
-	txd = (struct mt7603_mcu_txd *)skb_push(skb, hdrlen);
-
-	txd->len = cpu_to_le16(skb->len);
-	if (cmd == -MCU_CMD_FW_SCATTER)
-		txd->pq_id = cpu_to_le16(MCU_PORT_QUEUE_FW);
-	else
-		txd->pq_id = cpu_to_le16(MCU_PORT_QUEUE);
-	txd->pkt_type = MCU_PKT_ID;
-	txd->seq = seq;
-
-	if (cmd < 0) {
-		txd->cid = -cmd;
-		txd->set_query = MCU_Q_NA;
-	} else {
-		txd->cid = MCU_CMD_EXT_CID;
-		txd->ext_cid = cmd;
-		txd->set_query = MCU_Q_SET;
-		txd->ext_cid_ack = 1;
-	}
-
-	if (wait_seq)
-		*wait_seq = seq;
-
-	return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[MT_MCUQ_WM], skb, 0);
-}
-
-static int
-mt7603_mcu_init_download(struct mt7603_dev *dev, u32 addr, u32 len)
-{
-	struct {
-		__le32 addr;
-		__le32 len;
-		__le32 mode;
-	} req = {
-		.addr = cpu_to_le32(addr),
-		.len = cpu_to_le32(len),
-		.mode = cpu_to_le32(BIT(31)),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, -MCU_CMD_TARGET_ADDRESS_LEN_REQ,
-				 &req, sizeof(req), true);
-}
-
-static int
-mt7603_mcu_start_firmware(struct mt7603_dev *dev, u32 addr)
-{
-	struct {
-		__le32 override;
-		__le32 addr;
-	} req = {
-		.override = cpu_to_le32(addr ? 1 : 0),
-		.addr = cpu_to_le32(addr),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, -MCU_CMD_FW_START_REQ, &req,
-				 sizeof(req), true);
-}
-
-static int
-mt7603_mcu_restart(struct mt76_dev *dev)
-{
-	return mt76_mcu_send_msg(dev, -MCU_CMD_RESTART_DL_REQ, NULL, 0, true);
-}
-
-static int mt7603_load_firmware(struct mt7603_dev *dev)
-{
-	const struct firmware *fw;
-	const struct mt7603_fw_trailer *hdr;
-	const char *firmware;
-	int dl_len;
-	u32 addr, val;
-	int ret;
-
-	if (is_mt7628(dev)) {
-		if (mt76xx_rev(dev) == MT7628_REV_E1)
-			firmware = MT7628_FIRMWARE_E1;
-		else
-			firmware = MT7628_FIRMWARE_E2;
-	} else {
-		if (mt76xx_rev(dev) < MT7603_REV_E2)
-			firmware = MT7603_FIRMWARE_E1;
-		else
-			firmware = MT7603_FIRMWARE_E2;
-	}
-
-	ret = request_firmware(&fw, firmware, dev->mt76.dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
-		dev_err(dev->mt76.dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const struct mt7603_fw_trailer *)(fw->data + fw->size -
-						 sizeof(*hdr));
-
-	dev_info(dev->mt76.dev, "Firmware Version: %.10s\n", hdr->fw_ver);
-	dev_info(dev->mt76.dev, "Build Time: %.15s\n", hdr->build_date);
-
-	addr = mt7603_reg_map(dev, 0x50012498);
-	mt76_wr(dev, addr, 0x5);
-	mt76_wr(dev, addr, 0x5);
-	udelay(1);
-
-	/* switch to bypass mode */
-	mt76_rmw(dev, MT_SCH_4, MT_SCH_4_FORCE_QID,
-		 MT_SCH_4_BYPASS | FIELD_PREP(MT_SCH_4_FORCE_QID, 5));
-
-	val = mt76_rr(dev, MT_TOP_MISC2);
-	if (val & BIT(1)) {
-		dev_info(dev->mt76.dev, "Firmware already running...\n");
-		goto running;
-	}
-
-	if (!mt76_poll_msec(dev, MT_TOP_MISC2, BIT(0) | BIT(1), BIT(0), 500)) {
-		dev_err(dev->mt76.dev, "Timeout waiting for ROM code to become ready\n");
-		ret = -EIO;
-		goto out;
-	}
-
-	dl_len = le32_to_cpu(hdr->dl_len) + 4;
-	ret = mt7603_mcu_init_download(dev, MCU_FIRMWARE_ADDRESS, dl_len);
-	if (ret) {
-		dev_err(dev->mt76.dev, "Download request failed\n");
-		goto out;
-	}
-
-	ret = mt76_mcu_send_firmware(&dev->mt76, -MCU_CMD_FW_SCATTER,
-				     fw->data, dl_len);
-	if (ret) {
-		dev_err(dev->mt76.dev, "Failed to send firmware to device\n");
-		goto out;
-	}
-
-	ret = mt7603_mcu_start_firmware(dev, MCU_FIRMWARE_ADDRESS);
-	if (ret) {
-		dev_err(dev->mt76.dev, "Failed to start firmware\n");
-		goto out;
-	}
-
-	if (!mt76_poll_msec(dev, MT_TOP_MISC2, BIT(1), BIT(1), 500)) {
-		dev_err(dev->mt76.dev, "Timeout waiting for firmware to initialize\n");
-		ret = -EIO;
-		goto out;
-	}
-
-running:
-	mt76_clear(dev, MT_SCH_4, MT_SCH_4_FORCE_QID | MT_SCH_4_BYPASS);
-
-	mt76_set(dev, MT_SCH_4, BIT(8));
-	mt76_clear(dev, MT_SCH_4, BIT(8));
-
-	dev->mcu_running = true;
-	snprintf(dev->mt76.hw->wiphy->fw_version,
-		 sizeof(dev->mt76.hw->wiphy->fw_version),
-		 "%.10s-%.15s", hdr->fw_ver, hdr->build_date);
-	dev_info(dev->mt76.dev, "firmware init done\n");
-
-out:
-	release_firmware(fw);
-
-	return ret;
-}
-
-int mt7603_mcu_init(struct mt7603_dev *dev)
-{
-	static const struct mt76_mcu_ops mt7603_mcu_ops = {
-		.headroom = sizeof(struct mt7603_mcu_txd),
-		.mcu_skb_send_msg = mt7603_mcu_skb_send_msg,
-		.mcu_parse_response = mt7603_mcu_parse_response,
-		.mcu_restart = mt7603_mcu_restart,
-	};
-
-	dev->mt76.mcu_ops = &mt7603_mcu_ops;
-	return mt7603_load_firmware(dev);
-}
-
-void mt7603_mcu_exit(struct mt7603_dev *dev)
-{
-	__mt76_mcu_restart(&dev->mt76);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-}
-
-int mt7603_mcu_set_eeprom(struct mt7603_dev *dev)
-{
-	static const u16 req_fields[] = {
-#define WORD(_start)			\
-		_start,			\
-		_start + 1
-#define GROUP_2G(_start)		\
-		WORD(_start),		\
-		WORD(_start + 2),	\
-		WORD(_start + 4)
-
-		MT_EE_NIC_CONF_0 + 1,
-		WORD(MT_EE_NIC_CONF_1),
-		MT_EE_WIFI_RF_SETTING,
-		MT_EE_TX_POWER_DELTA_BW40,
-		MT_EE_TX_POWER_DELTA_BW80 + 1,
-		MT_EE_TX_POWER_EXT_PA_5G,
-		MT_EE_TEMP_SENSOR_CAL,
-		GROUP_2G(MT_EE_TX_POWER_0_START_2G),
-		GROUP_2G(MT_EE_TX_POWER_1_START_2G),
-		WORD(MT_EE_TX_POWER_CCK),
-		WORD(MT_EE_TX_POWER_OFDM_2G_6M),
-		WORD(MT_EE_TX_POWER_OFDM_2G_24M),
-		WORD(MT_EE_TX_POWER_OFDM_2G_54M),
-		WORD(MT_EE_TX_POWER_HT_BPSK_QPSK),
-		WORD(MT_EE_TX_POWER_HT_16_64_QAM),
-		WORD(MT_EE_TX_POWER_HT_64_QAM),
-		MT_EE_ELAN_RX_MODE_GAIN,
-		MT_EE_ELAN_RX_MODE_NF,
-		MT_EE_ELAN_RX_MODE_P1DB,
-		MT_EE_ELAN_BYPASS_MODE_GAIN,
-		MT_EE_ELAN_BYPASS_MODE_NF,
-		MT_EE_ELAN_BYPASS_MODE_P1DB,
-		WORD(MT_EE_STEP_NUM_NEG_6_7),
-		WORD(MT_EE_STEP_NUM_NEG_4_5),
-		WORD(MT_EE_STEP_NUM_NEG_2_3),
-		WORD(MT_EE_STEP_NUM_NEG_0_1),
-		WORD(MT_EE_REF_STEP_24G),
-		WORD(MT_EE_STEP_NUM_PLUS_1_2),
-		WORD(MT_EE_STEP_NUM_PLUS_3_4),
-		WORD(MT_EE_STEP_NUM_PLUS_5_6),
-		MT_EE_STEP_NUM_PLUS_7,
-		MT_EE_XTAL_FREQ_OFFSET,
-		MT_EE_XTAL_TRIM_2_COMP,
-		MT_EE_XTAL_TRIM_3_COMP,
-		MT_EE_XTAL_WF_RFCAL,
-
-		/* unknown fields below */
-		WORD(0x24),
-		0x34,
-		0x39,
-		0x3b,
-		WORD(0x42),
-		WORD(0x9e),
-		0xf2,
-		WORD(0xf8),
-		0xfa,
-		0x12e,
-		WORD(0x130), WORD(0x132), WORD(0x134), WORD(0x136),
-		WORD(0x138), WORD(0x13a), WORD(0x13c), WORD(0x13e),
-
-#undef GROUP_2G
-#undef WORD
-
-	};
-	struct req_data {
-		__le16 addr;
-		u8 val;
-		u8 pad;
-	} __packed;
-	struct {
-		u8 buffer_mode;
-		u8 len;
-		u8 pad[2];
-	} req_hdr = {
-		.buffer_mode = 1,
-		.len = ARRAY_SIZE(req_fields) - 1,
-	};
-	const int size = 0xff * sizeof(struct req_data);
-	u8 *req, *eep = (u8 *)dev->mt76.eeprom.data;
-	int i, ret, len = sizeof(req_hdr) + size;
-	struct req_data *data;
-
-	BUILD_BUG_ON(ARRAY_SIZE(req_fields) * sizeof(*data) > size);
-
-	req = kmalloc(len, GFP_KERNEL);
-	if (!req)
-		return -ENOMEM;
-
-	memcpy(req, &req_hdr, sizeof(req_hdr));
-	data = (struct req_data *)(req + sizeof(req_hdr));
-	memset(data, 0, size);
-	for (i = 0; i < ARRAY_SIZE(req_fields); i++) {
-		data[i].addr = cpu_to_le16(req_fields[i]);
-		data[i].val = eep[req_fields[i]];
-	}
-
-	ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_EFUSE_BUFFER_MODE,
-				req, len, true);
-	kfree(req);
-
-	return ret;
-}
-
-static int mt7603_mcu_set_tx_power(struct mt7603_dev *dev)
-{
-	struct {
-		u8 center_channel;
-		u8 tssi;
-		u8 temp_comp;
-		u8 target_power[2];
-		u8 rate_power_delta[14];
-		u8 bw_power_delta;
-		u8 ch_power_delta[6];
-		u8 temp_comp_power[17];
-		u8 reserved;
-	} req = {
-		.center_channel = dev->mphy.chandef.chan->hw_value,
-#define EEP_VAL(n) ((u8 *)dev->mt76.eeprom.data)[n]
-		.tssi = EEP_VAL(MT_EE_NIC_CONF_1 + 1),
-		.temp_comp = EEP_VAL(MT_EE_NIC_CONF_1),
-		.target_power = {
-			EEP_VAL(MT_EE_TX_POWER_0_START_2G + 2),
-			EEP_VAL(MT_EE_TX_POWER_1_START_2G + 2)
-		},
-		.bw_power_delta = EEP_VAL(MT_EE_TX_POWER_DELTA_BW40),
-		.ch_power_delta = {
-			EEP_VAL(MT_EE_TX_POWER_0_START_2G + 3),
-			EEP_VAL(MT_EE_TX_POWER_0_START_2G + 4),
-			EEP_VAL(MT_EE_TX_POWER_0_START_2G + 5),
-			EEP_VAL(MT_EE_TX_POWER_1_START_2G + 3),
-			EEP_VAL(MT_EE_TX_POWER_1_START_2G + 4),
-			EEP_VAL(MT_EE_TX_POWER_1_START_2G + 5)
-		},
-#undef EEP_VAL
-	};
-	u8 *eep = (u8 *)dev->mt76.eeprom.data;
-
-	memcpy(req.rate_power_delta, eep + MT_EE_TX_POWER_CCK,
-	       sizeof(req.rate_power_delta));
-
-	memcpy(req.temp_comp_power, eep + MT_EE_STEP_NUM_NEG_6_7,
-	       sizeof(req.temp_comp_power));
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_SET_TX_POWER_CTRL,
-				 &req, sizeof(req), true);
-}
-
-int mt7603_mcu_set_channel(struct mt7603_dev *dev)
-{
-	struct cfg80211_chan_def *chandef = &dev->mphy.chandef;
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	int n_chains = hweight8(dev->mphy.antenna_mask);
-	struct {
-		u8 control_chan;
-		u8 center_chan;
-		u8 bw;
-		u8 tx_streams;
-		u8 rx_streams;
-		u8 _res0[7];
-		u8 txpower[21];
-		u8 _res1[3];
-	} req = {
-		.control_chan = chandef->chan->hw_value,
-		.center_chan = chandef->chan->hw_value,
-		.bw = MT_BW_20,
-		.tx_streams = n_chains,
-		.rx_streams = n_chains,
-	};
-	s8 tx_power = hw->conf.power_level * 2;
-	int i, ret;
-
-	if (dev->mphy.chandef.width == NL80211_CHAN_WIDTH_40) {
-		req.bw = MT_BW_40;
-		if (chandef->center_freq1 > chandef->chan->center_freq)
-			req.center_chan += 2;
-		else
-			req.center_chan -= 2;
-	}
-
-	tx_power = mt76_get_sar_power(&dev->mphy, chandef->chan, tx_power);
-	if (dev->mphy.antenna_mask == 3)
-		tx_power -= 6;
-	tx_power = min(tx_power, dev->tx_power_limit);
-
-	dev->mphy.txpower_cur = tx_power;
-
-	for (i = 0; i < ARRAY_SIZE(req.txpower); i++)
-		req.txpower[i] = tx_power;
-
-	ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD_CHANNEL_SWITCH, &req,
-				sizeof(req), true);
-	if (ret)
-		return ret;
-
-	return mt7603_mcu_set_tx_power(dev);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mcu.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mcu.h
deleted file mode 100644
index 30df8a3..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mcu.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-
-#ifndef __MT7603_MCU_H
-#define __MT7603_MCU_H
-
-struct mt7603_mcu_txd {
-	__le16 len;
-	__le16 pq_id;
-
-	u8 cid;
-	u8 pkt_type;
-	u8 set_query;
-	u8 seq;
-
-	u8 uc_d2b0_rev;
-	u8 ext_cid;
-	u8 uc_d2b2_rev;
-	u8 ext_cid_ack;
-
-	u32 au4_d3_to_d7_rev[5];
-} __packed __aligned(4);
-
-struct mt7603_mcu_rxd {
-	__le16 len;
-	__le16 pkt_type_id;
-
-	u8 eid;
-	u8 seq;
-	__le16 __rsv;
-
-	u8 ext_eid;
-	u8 __rsv1[3];
-};
-
-#define MCU_PKT_ID		0xa0
-#define MCU_PORT_QUEUE		0x8000
-#define MCU_PORT_QUEUE_FW	0xc000
-
-#define MCU_FIRMWARE_ADDRESS	0x100000
-
-enum {
-	MCU_Q_QUERY,
-	MCU_Q_SET,
-	MCU_Q_RESERVED,
-	MCU_Q_NA
-};
-
-enum {
-	MCU_CMD_TARGET_ADDRESS_LEN_REQ = 0x01,
-	MCU_CMD_FW_START_REQ = 0x02,
-	MCU_CMD_INIT_ACCESS_REG = 0x3,
-	MCU_CMD_PATCH_START_REQ = 0x05,
-	MCU_CMD_PATCH_FINISH_REQ = 0x07,
-	MCU_CMD_PATCH_SEM_CONTROL = 0x10,
-	MCU_CMD_HIF_LOOPBACK = 0x20,
-	MCU_CMD_CH_PRIVILEGE = 0x20,
-	MCU_CMD_ACCESS_REG = 0xC2,
-	MCU_CMD_EXT_CID = 0xED,
-	MCU_CMD_FW_SCATTER = 0xEE,
-	MCU_CMD_RESTART_DL_REQ = 0xEF,
-};
-
-enum {
-	MCU_EXT_CMD_RF_REG_ACCESS = 0x02,
-	MCU_EXT_CMD_RF_TEST = 0x04,
-	MCU_EXT_CMD_RADIO_ON_OFF_CTRL = 0x05,
-	MCU_EXT_CMD_WIFI_RX_DISABLE = 0x06,
-	MCU_EXT_CMD_PM_STATE_CTRL = 0x07,
-	MCU_EXT_CMD_CHANNEL_SWITCH = 0x08,
-	MCU_EXT_CMD_NIC_CAPABILITY = 0x09,
-	MCU_EXT_CMD_PWR_SAVING = 0x0A,
-	MCU_EXT_CMD_MULTIPLE_REG_ACCESS = 0x0E,
-	MCU_EXT_CMD_AP_PWR_SAVING_CAPABILITY = 0xF,
-	MCU_EXT_CMD_SEC_ADDREMOVE_KEY = 0x10,
-	MCU_EXT_CMD_SET_TX_POWER_CTRL = 0x11,
-	MCU_EXT_CMD_FW_LOG_2_HOST = 0x13,
-	MCU_EXT_CMD_PS_RETRIEVE_START = 0x14,
-	MCU_EXT_CMD_LED_CTRL = 0x17,
-	MCU_EXT_CMD_PACKET_FILTER = 0x18,
-	MCU_EXT_CMD_PWR_MGT_BIT_WIFI = 0x1B,
-	MCU_EXT_CMD_EFUSE_BUFFER_MODE = 0x21,
-	MCU_EXT_CMD_THERMAL_PROTECT = 0x23,
-	MCU_EXT_CMD_EDCA_SET = 0x27,
-	MCU_EXT_CMD_SLOT_TIME_SET = 0x28,
-	MCU_EXT_CMD_CONFIG_INTERNAL_SETTING = 0x29,
-	MCU_EXT_CMD_NOA_OFFLOAD_CTRL = 0x2B,
-	MCU_EXT_CMD_GET_THEMAL_SENSOR = 0x2C,
-	MCU_EXT_CMD_WAKEUP_OPTION = 0x2E,
-	MCU_EXT_CMD_AC_QUEUE_CONTROL = 0x31,
-	MCU_EXT_CMD_BCN_UPDATE = 0x33
-};
-
-enum {
-	MCU_EXT_EVENT_CMD_RESULT = 0x0,
-	MCU_EXT_EVENT_RF_REG_ACCESS = 0x2,
-	MCU_EXT_EVENT_MULTI_CR_ACCESS = 0x0E,
-	MCU_EXT_EVENT_FW_LOG_2_HOST = 0x13,
-	MCU_EXT_EVENT_BEACON_LOSS = 0x1A,
-	MCU_EXT_EVENT_THERMAL_PROTECT = 0x22,
-	MCU_EXT_EVENT_BCN_UPDATE = 0x31,
-};
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mt7603.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mt7603.h
deleted file mode 100644
index 0fd46d9..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/mt7603.h
+++ /dev/null
@@ -1,265 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-
-#ifndef __MT7603_H
-#define __MT7603_H
-
-#include <linux/interrupt.h>
-#include <linux/ktime.h>
-#include "../mt76.h"
-#include "regs.h"
-
-#define MT7603_MAX_INTERFACES	4
-#define MT7603_WTBL_SIZE	128
-#define MT7603_WTBL_RESERVED	(MT7603_WTBL_SIZE - 1)
-#define MT7603_WTBL_STA		(MT7603_WTBL_RESERVED - MT7603_MAX_INTERFACES)
-
-#define MT7603_RATE_RETRY	2
-
-#define MT7603_MCU_RX_RING_SIZE	64
-#define MT7603_RX_RING_SIZE     128
-#define MT7603_TX_RING_SIZE	256
-#define MT7603_PSD_RING_SIZE	128
-
-#define MT7603_FIRMWARE_E1	"mt7603_e1.bin"
-#define MT7603_FIRMWARE_E2	"mt7603_e2.bin"
-#define MT7628_FIRMWARE_E1	"mt7628_e1.bin"
-#define MT7628_FIRMWARE_E2	"mt7628_e2.bin"
-
-#define MT7603_EEPROM_SIZE	1024
-
-#define MT_AGG_SIZE_LIMIT(_n)	(((_n) + 1) * 4)
-
-#define MT7603_PRE_TBTT_TIME	5000 /* ms */
-
-#define MT7603_WATCHDOG_TIME	100 /* ms */
-#define MT7603_WATCHDOG_TIMEOUT	10 /* number of checks */
-
-#define MT7603_EDCCA_BLOCK_TH	10
-
-#define MT7603_CFEND_RATE_DEFAULT	0x69 /* chip default (24M) */
-#define MT7603_CFEND_RATE_11B		0x03 /* 11B LP, 11M */
-
-struct mt7603_vif;
-struct mt7603_sta;
-
-enum {
-	MT7603_REV_E1 = 0x00,
-	MT7603_REV_E2 = 0x10,
-	MT7628_REV_E1 = 0x8a00,
-};
-
-enum mt7603_bw {
-	MT_BW_20,
-	MT_BW_40,
-	MT_BW_80,
-};
-
-struct mt7603_rate_set {
-	struct ieee80211_tx_rate probe_rate;
-	struct ieee80211_tx_rate rates[4];
-};
-
-struct mt7603_sta {
-	struct mt76_wcid wcid; /* must be first */
-
-	struct mt7603_vif *vif;
-
-	struct list_head poll_list;
-	u32 tx_airtime_ac[4];
-
-	struct sk_buff_head psq;
-
-	struct ieee80211_tx_rate rates[4];
-
-	struct mt7603_rate_set rateset[2];
-	u32 rate_set_tsf;
-
-	u8 rate_count;
-	u8 n_rates;
-
-	u8 rate_probe;
-	u8 smps;
-
-	u8 ps;
-};
-
-struct mt7603_vif {
-	struct mt7603_sta sta; /* must be first */
-
-	u8 idx;
-};
-
-enum mt7603_reset_cause {
-	RESET_CAUSE_TX_HANG,
-	RESET_CAUSE_TX_BUSY,
-	RESET_CAUSE_RX_BUSY,
-	RESET_CAUSE_BEACON_STUCK,
-	RESET_CAUSE_RX_PSE_BUSY,
-	RESET_CAUSE_MCU_HANG,
-	RESET_CAUSE_RESET_FAILED,
-	__RESET_CAUSE_MAX
-};
-
-struct mt7603_dev {
-	union { /* must be first */
-		struct mt76_dev mt76;
-		struct mt76_phy mphy;
-	};
-
-	const struct mt76_bus_ops *bus_ops;
-
-	u32 rxfilter;
-
-	struct list_head sta_poll_list;
-	spinlock_t sta_poll_lock;
-
-	struct mt7603_sta global_sta;
-
-	u32 agc0, agc3;
-	u32 false_cca_ofdm, false_cca_cck;
-	unsigned long last_cca_adj;
-
-	u32 ampdu_ref;
-	u32 rx_ampdu_ts;
-	u8 rssi_offset[3];
-
-	u8 slottime;
-	s16 coverage_class;
-
-	s8 tx_power_limit;
-
-	ktime_t ed_time;
-
-	spinlock_t ps_lock;
-
-	u8 mcu_running;
-
-	u8 ed_monitor_enabled;
-	u8 ed_monitor;
-	s8 ed_trigger;
-	u8 ed_strict_mode;
-	u8 ed_strong_signal;
-
-	bool dynamic_sensitivity;
-	s8 sensitivity;
-	u8 sensitivity_limit;
-
-	u8 beacon_check;
-	u8 tx_hang_check;
-	u8 tx_dma_check;
-	u8 rx_dma_check;
-	u8 rx_pse_check;
-	u8 mcu_hang;
-
-	enum mt7603_reset_cause cur_reset_cause;
-
-	u16 tx_dma_idx[4];
-	u16 rx_dma_idx;
-
-	u32 reset_test;
-
-	unsigned int reset_cause[__RESET_CAUSE_MAX];
-};
-
-extern const struct mt76_driver_ops mt7603_drv_ops;
-extern const struct ieee80211_ops mt7603_ops;
-extern struct pci_driver mt7603_pci_driver;
-extern struct platform_driver mt76_wmac_driver;
-
-static inline bool is_mt7603(struct mt7603_dev *dev)
-{
-	return mt76xx_chip(dev) == 0x7603;
-}
-
-static inline bool is_mt7628(struct mt7603_dev *dev)
-{
-	return mt76xx_chip(dev) == 0x7628;
-}
-
-/* need offset to prevent conflict with ampdu_ack_len */
-#define MT_RATE_DRIVER_DATA_OFFSET	4
-
-u32 mt7603_reg_map(struct mt7603_dev *dev, u32 addr);
-
-irqreturn_t mt7603_irq_handler(int irq, void *dev_instance);
-
-int mt7603_register_device(struct mt7603_dev *dev);
-void mt7603_unregister_device(struct mt7603_dev *dev);
-int mt7603_eeprom_init(struct mt7603_dev *dev);
-int mt7603_dma_init(struct mt7603_dev *dev);
-void mt7603_dma_cleanup(struct mt7603_dev *dev);
-int mt7603_mcu_init(struct mt7603_dev *dev);
-void mt7603_init_debugfs(struct mt7603_dev *dev);
-
-static inline void mt7603_irq_enable(struct mt7603_dev *dev, u32 mask)
-{
-	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, 0, mask);
-}
-
-static inline void mt7603_irq_disable(struct mt7603_dev *dev, u32 mask)
-{
-	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, mask, 0);
-}
-
-void mt7603_mac_reset_counters(struct mt7603_dev *dev);
-void mt7603_mac_dma_start(struct mt7603_dev *dev);
-void mt7603_mac_start(struct mt7603_dev *dev);
-void mt7603_mac_stop(struct mt7603_dev *dev);
-void mt7603_mac_work(struct work_struct *work);
-void mt7603_mac_set_timing(struct mt7603_dev *dev);
-void mt7603_beacon_set_timer(struct mt7603_dev *dev, int idx, int intval);
-int mt7603_mac_fill_rx(struct mt7603_dev *dev, struct sk_buff *skb);
-void mt7603_mac_add_txs(struct mt7603_dev *dev, void *data);
-void mt7603_mac_rx_ba_reset(struct mt7603_dev *dev, void *addr, u8 tid);
-void mt7603_mac_tx_ba_reset(struct mt7603_dev *dev, int wcid, int tid,
-			    int ba_size);
-void mt7603_mac_sta_poll(struct mt7603_dev *dev);
-
-void mt7603_pse_client_reset(struct mt7603_dev *dev);
-
-int mt7603_mcu_set_channel(struct mt7603_dev *dev);
-int mt7603_mcu_set_eeprom(struct mt7603_dev *dev);
-void mt7603_mcu_exit(struct mt7603_dev *dev);
-
-void mt7603_wtbl_init(struct mt7603_dev *dev, int idx, int vif,
-		      const u8 *mac_addr);
-void mt7603_wtbl_clear(struct mt7603_dev *dev, int idx);
-void mt7603_wtbl_update_cap(struct mt7603_dev *dev, struct ieee80211_sta *sta);
-void mt7603_wtbl_set_rates(struct mt7603_dev *dev, struct mt7603_sta *sta,
-			   struct ieee80211_tx_rate *probe_rate,
-			   struct ieee80211_tx_rate *rates);
-int mt7603_wtbl_set_key(struct mt7603_dev *dev, int wcid,
-			struct ieee80211_key_conf *key);
-void mt7603_wtbl_set_ps(struct mt7603_dev *dev, struct mt7603_sta *sta,
-			bool enabled);
-void mt7603_wtbl_set_smps(struct mt7603_dev *dev, struct mt7603_sta *sta,
-			  bool enabled);
-void mt7603_filter_tx(struct mt7603_dev *dev, int idx, bool abort);
-
-int mt7603_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-			  enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			  struct ieee80211_sta *sta,
-			  struct mt76_tx_info *tx_info);
-
-void mt7603_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e);
-
-void mt7603_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			 struct sk_buff *skb);
-void mt7603_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q);
-void mt7603_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps);
-int mt7603_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		   struct ieee80211_sta *sta);
-void mt7603_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		      struct ieee80211_sta *sta);
-void mt7603_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta);
-
-void mt7603_pre_tbtt_tasklet(struct tasklet_struct *t);
-
-void mt7603_update_channel(struct mt76_phy *mphy);
-
-void mt7603_edcca_set_strict(struct mt7603_dev *dev, bool val);
-void mt7603_cca_stats_reset(struct mt7603_dev *dev);
-
-void mt7603_init_edcca(struct mt7603_dev *dev);
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/pci.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/pci.c
deleted file mode 100644
index 3d94cdb..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/pci.c
+++ /dev/null
@@ -1,83 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/pci.h>
-
-#include "mt7603.h"
-
-static const struct pci_device_id mt76pci_device_table[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7603) },
-	{ },
-};
-
-static int
-mt76pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
-{
-	struct mt7603_dev *dev;
-	struct mt76_dev *mdev;
-	int ret;
-
-	ret = pcim_enable_device(pdev);
-	if (ret)
-		return ret;
-
-	ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
-	if (ret)
-		return ret;
-
-	pci_set_master(pdev);
-
-	ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
-	if (ret)
-		return ret;
-
-	mdev = mt76_alloc_device(&pdev->dev, sizeof(*dev), &mt7603_ops,
-				 &mt7603_drv_ops);
-	if (!mdev)
-		return -ENOMEM;
-
-	dev = container_of(mdev, struct mt7603_dev, mt76);
-	mt76_mmio_init(mdev, pcim_iomap_table(pdev)[0]);
-
-	mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |
-		    (mt76_rr(dev, MT_HW_REV) & 0xff);
-	dev_info(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-
-	ret = devm_request_irq(mdev->dev, pdev->irq, mt7603_irq_handler,
-			       IRQF_SHARED, KBUILD_MODNAME, dev);
-	if (ret)
-		goto error;
-
-	ret = mt7603_register_device(dev);
-	if (ret)
-		goto error;
-
-	return 0;
-error:
-	mt76_free_device(&dev->mt76);
-
-	return ret;
-}
-
-static void
-mt76pci_remove(struct pci_dev *pdev)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-
-	mt7603_unregister_device(dev);
-}
-
-MODULE_DEVICE_TABLE(pci, mt76pci_device_table);
-MODULE_FIRMWARE(MT7603_FIRMWARE_E1);
-MODULE_FIRMWARE(MT7603_FIRMWARE_E2);
-
-struct pci_driver mt7603_pci_driver = {
-	.name		= KBUILD_MODNAME,
-	.id_table	= mt76pci_device_table,
-	.probe		= mt76pci_probe,
-	.remove		= mt76pci_remove,
-};
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/regs.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/regs.h
deleted file mode 100644
index 3b90109..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/regs.h
+++ /dev/null
@@ -1,768 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-
-#ifndef __MT7603_REGS_H
-#define __MT7603_REGS_H
-
-#define MT_HW_REV			0x1000
-#define MT_HW_CHIPID			0x1008
-#define MT_TOP_MISC2			0x1134
-
-#define MT_MCU_BASE			0x2000
-#define MT_MCU(ofs)			(MT_MCU_BASE + (ofs))
-
-#define MT_MCU_PCIE_REMAP_1		MT_MCU(0x500)
-#define MT_MCU_PCIE_REMAP_1_OFFSET	GENMASK(17, 0)
-#define MT_MCU_PCIE_REMAP_1_BASE	GENMASK(31, 18)
-
-#define MT_MCU_PCIE_REMAP_2		MT_MCU(0x504)
-#define MT_MCU_PCIE_REMAP_2_OFFSET	GENMASK(18, 0)
-#define MT_MCU_PCIE_REMAP_2_BASE	GENMASK(31, 19)
-
-#define MT_HIF_BASE			0x4000
-#define MT_HIF(ofs)			(MT_HIF_BASE + (ofs))
-
-#define MT_INT_SOURCE_CSR		MT_HIF(0x200)
-#define MT_INT_MASK_CSR			MT_HIF(0x204)
-#define MT_DELAY_INT_CFG		MT_HIF(0x210)
-
-#define MT_INT_RX_DONE(_n)		BIT(_n)
-#define MT_INT_RX_DONE_ALL		GENMASK(1, 0)
-#define MT_INT_TX_DONE_ALL		GENMASK(19, 4)
-#define MT_INT_TX_DONE(_n)		BIT((_n) + 4)
-
-#define MT_INT_RX_COHERENT		BIT(20)
-#define MT_INT_TX_COHERENT		BIT(21)
-#define MT_INT_MAC_IRQ3			BIT(27)
-
-#define MT_INT_MCU_CMD			BIT(30)
-
-#define MT_WPDMA_GLO_CFG		MT_HIF(0x208)
-#define MT_WPDMA_GLO_CFG_TX_DMA_EN	BIT(0)
-#define MT_WPDMA_GLO_CFG_TX_DMA_BUSY	BIT(1)
-#define MT_WPDMA_GLO_CFG_RX_DMA_EN	BIT(2)
-#define MT_WPDMA_GLO_CFG_RX_DMA_BUSY	BIT(3)
-#define MT_WPDMA_GLO_CFG_DMA_BURST_SIZE	GENMASK(5, 4)
-#define MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE	BIT(6)
-#define MT_WPDMA_GLO_CFG_BIG_ENDIAN	BIT(7)
-#define MT_WPDMA_GLO_CFG_HDR_SEG_LEN	GENMASK(15, 8)
-#define MT_WPDMA_GLO_CFG_SW_RESET	BIT(24)
-#define MT_WPDMA_GLO_CFG_FORCE_TX_EOF	BIT(25)
-#define MT_WPDMA_GLO_CFG_CLK_GATE_DIS	BIT(30)
-#define MT_WPDMA_GLO_CFG_RX_2B_OFFSET	BIT(31)
-
-#define MT_WPDMA_RST_IDX		MT_HIF(0x20c)
-
-#define MT_WPDMA_DEBUG			MT_HIF(0x244)
-#define MT_WPDMA_DEBUG_VALUE		GENMASK(17, 0)
-#define MT_WPDMA_DEBUG_SEL		BIT(27)
-#define MT_WPDMA_DEBUG_IDX		GENMASK(31, 28)
-
-#define MT_TX_RING_BASE			MT_HIF(0x300)
-#define MT_RX_RING_BASE			MT_HIF(0x400)
-
-#define MT_TXTIME_THRESH_BASE		MT_HIF(0x500)
-#define MT_TXTIME_THRESH(n)		(MT_TXTIME_THRESH_BASE + ((n) * 4))
-
-#define MT_PAGE_COUNT_BASE		MT_HIF(0x540)
-#define MT_PAGE_COUNT(n)		(MT_PAGE_COUNT_BASE + ((n) * 4))
-
-#define MT_SCH_1			MT_HIF(0x588)
-#define MT_SCH_2			MT_HIF(0x58c)
-#define MT_SCH_3			MT_HIF(0x590)
-
-#define MT_SCH_4			MT_HIF(0x594)
-#define MT_SCH_4_FORCE_QID		GENMASK(4, 0)
-#define MT_SCH_4_BYPASS			BIT(5)
-#define MT_SCH_4_RESET			BIT(8)
-
-#define MT_GROUP_THRESH_BASE		MT_HIF(0x598)
-#define MT_GROUP_THRESH(n)		(MT_GROUP_THRESH_BASE + ((n) * 4))
-
-#define MT_QUEUE_PRIORITY_1		MT_HIF(0x580)
-#define MT_QUEUE_PRIORITY_2		MT_HIF(0x584)
-
-#define MT_BMAP_0			MT_HIF(0x5b0)
-#define MT_BMAP_1			MT_HIF(0x5b4)
-#define MT_BMAP_2			MT_HIF(0x5b8)
-
-#define MT_HIGH_PRIORITY_1		MT_HIF(0x5bc)
-#define MT_HIGH_PRIORITY_2		MT_HIF(0x5c0)
-
-#define MT_PRIORITY_MASK		MT_HIF(0x5c4)
-
-#define MT_RSV_MAX_THRESH		MT_HIF(0x5c8)
-
-#define MT_PSE_BASE			0x8000
-#define MT_PSE(ofs)			(MT_PSE_BASE + (ofs))
-
-#define MT_MCU_DEBUG_RESET		MT_PSE(0x16c)
-#define MT_MCU_DEBUG_RESET_PSE		BIT(0)
-#define MT_MCU_DEBUG_RESET_PSE_S	BIT(1)
-#define MT_MCU_DEBUG_RESET_QUEUES	GENMASK(6, 2)
-
-#define MT_PSE_FC_P0			MT_PSE(0x120)
-#define MT_PSE_FC_P0_MIN_RESERVE	GENMASK(11, 0)
-#define MT_PSE_FC_P0_MAX_QUOTA		GENMASK(27, 16)
-
-#define MT_PSE_FRP			MT_PSE(0x138)
-#define MT_PSE_FRP_P0			GENMASK(2, 0)
-#define MT_PSE_FRP_P1			GENMASK(5, 3)
-#define MT_PSE_FRP_P2_RQ0		GENMASK(8, 6)
-#define MT_PSE_FRP_P2_RQ1		GENMASK(11, 9)
-#define MT_PSE_FRP_P2_RQ2		GENMASK(14, 12)
-
-#define MT_FC_RSV_COUNT_0		MT_PSE(0x13c)
-#define MT_FC_RSV_COUNT_0_P0		GENMASK(11, 0)
-#define MT_FC_RSV_COUNT_0_P1		GENMASK(27, 16)
-
-#define MT_FC_SP2_Q0Q1			MT_PSE(0x14c)
-#define MT_FC_SP2_Q0Q1_SRC_COUNT_Q0	GENMASK(11, 0)
-#define MT_FC_SP2_Q0Q1_SRC_COUNT_Q1	GENMASK(27, 16)
-
-#define MT_PSE_FW_SHARED		MT_PSE(0x17c)
-
-#define MT_PSE_RTA			MT_PSE(0x194)
-#define MT_PSE_RTA_QUEUE_ID		GENMASK(4, 0)
-#define MT_PSE_RTA_PORT_ID		GENMASK(6, 5)
-#define MT_PSE_RTA_REDIRECT_EN		BIT(7)
-#define MT_PSE_RTA_TAG_ID		GENMASK(15, 8)
-#define MT_PSE_RTA_WRITE		BIT(16)
-#define MT_PSE_RTA_BUSY			BIT(31)
-
-#define MT_WF_PHY_BASE			0x10000
-#define MT_WF_PHY_OFFSET		0x1000
-#define MT_WF_PHY(ofs)			(MT_WF_PHY_BASE + (ofs))
-
-#define MT_AGC_BASE			MT_WF_PHY(0x500)
-#define MT_AGC(n)			(MT_AGC_BASE + ((n) * 4))
-
-#define MT_AGC1_BASE			MT_WF_PHY(0x1500)
-#define MT_AGC1(n)			(MT_AGC1_BASE + ((n) * 4))
-
-#define MT_AGC_41_RSSI_0		GENMASK(23, 16)
-#define MT_AGC_41_RSSI_1		GENMASK(7, 0)
-
-#define MT_RXTD_BASE			MT_WF_PHY(0x600)
-#define MT_RXTD(n)			(MT_RXTD_BASE + ((n) * 4))
-
-#define MT_RXTD_6_ACI_TH		GENMASK(4, 0)
-#define MT_RXTD_6_CCAED_TH		GENMASK(14, 8)
-
-#define MT_RXTD_8_LOWER_SIGNAL		GENMASK(5, 0)
-
-#define MT_RXTD_13_ACI_TH_EN		BIT(0)
-
-#define MT_WF_PHY_CR_TSSI_BASE		MT_WF_PHY(0xd00)
-#define MT_WF_PHY_CR_TSSI(phy, n)	(MT_WF_PHY_CR_TSSI_BASE +	\
-					 ((phy) * MT_WF_PHY_OFFSET) +	\
-					 ((n) * 4))
-
-#define MT_PHYCTRL_BASE			MT_WF_PHY(0x4100)
-#define MT_PHYCTRL(n)			(MT_PHYCTRL_BASE + ((n) * 4))
-
-#define MT_PHYCTRL_2_STATUS_RESET	BIT(6)
-#define MT_PHYCTRL_2_STATUS_EN		BIT(7)
-
-#define MT_PHYCTRL_STAT_PD		MT_PHYCTRL(3)
-#define MT_PHYCTRL_STAT_PD_OFDM		GENMASK(31, 16)
-#define MT_PHYCTRL_STAT_PD_CCK		GENMASK(15, 0)
-
-#define MT_PHYCTRL_STAT_MDRDY		MT_PHYCTRL(8)
-#define MT_PHYCTRL_STAT_MDRDY_OFDM	GENMASK(31, 16)
-#define MT_PHYCTRL_STAT_MDRDY_CCK	GENMASK(15, 0)
-
-#define MT_WF_AGG_BASE			0x21200
-#define MT_WF_AGG(ofs)			(MT_WF_AGG_BASE + (ofs))
-
-#define MT_AGG_ARCR			MT_WF_AGG(0x010)
-#define MT_AGG_ARCR_INIT_RATE1		BIT(0)
-#define MT_AGG_ARCR_FB_SGI_DISABLE	BIT(1)
-#define MT_AGG_ARCR_RATE8_DOWN_WRAP	BIT(2)
-#define MT_AGG_ARCR_RTS_RATE_THR	GENMASK(12, 8)
-#define MT_AGG_ARCR_RATE_DOWN_RATIO	GENMASK(17, 16)
-#define MT_AGG_ARCR_RATE_DOWN_RATIO_EN	BIT(19)
-#define MT_AGG_ARCR_RATE_UP_EXTRA_TH	GENMASK(22, 20)
-#define MT_AGG_ARCR_SPE_DIS_TH		GENMASK(27, 24)
-
-#define MT_AGG_ARUCR			MT_WF_AGG(0x014)
-#define MT_AGG_ARDCR			MT_WF_AGG(0x018)
-#define MT_AGG_ARxCR_LIMIT_SHIFT(_n)	(4 * (_n))
-#define MT_AGG_ARxCR_LIMIT(_n)		GENMASK(2 + \
-						MT_AGG_ARxCR_LIMIT_SHIFT(_n), \
-						MT_AGG_ARxCR_LIMIT_SHIFT(_n))
-
-#define MT_AGG_LIMIT			MT_WF_AGG(0x040)
-#define MT_AGG_LIMIT_1			MT_WF_AGG(0x044)
-#define MT_AGG_LIMIT_AC(_n)		GENMASK(((_n) + 1) * 8 - 1, (_n) * 8)
-
-#define MT_AGG_BA_SIZE_LIMIT_0		MT_WF_AGG(0x048)
-#define MT_AGG_BA_SIZE_LIMIT_1		MT_WF_AGG(0x04c)
-#define MT_AGG_BA_SIZE_LIMIT_SHIFT	8
-
-#define MT_AGG_PCR			MT_WF_AGG(0x050)
-#define MT_AGG_PCR_MM			BIT(16)
-#define MT_AGG_PCR_GF			BIT(17)
-#define MT_AGG_PCR_BW40			BIT(18)
-#define MT_AGG_PCR_RIFS			BIT(19)
-#define MT_AGG_PCR_BW80			BIT(20)
-#define MT_AGG_PCR_BW160		BIT(21)
-#define MT_AGG_PCR_ERP			BIT(22)
-
-#define MT_AGG_PCR_RTS			MT_WF_AGG(0x054)
-#define MT_AGG_PCR_RTS_THR		GENMASK(19, 0)
-#define MT_AGG_PCR_RTS_PKT_THR		GENMASK(31, 25)
-
-#define MT_AGG_ASRCR			MT_WF_AGG(0x060)
-#define MT_AGG_ASRCR_RANGE(val, n)	(((val) >> ((n) << 3)) & GENMASK(5, 0))
-
-#define MT_AGG_CONTROL			MT_WF_AGG(0x070)
-#define MT_AGG_CONTROL_NO_BA_RULE	BIT(0)
-#define MT_AGG_CONTROL_NO_BA_AR_RULE	BIT(1)
-#define MT_AGG_CONTROL_CFEND_SPE_EN	BIT(3)
-#define MT_AGG_CONTROL_CFEND_RATE	GENMASK(15, 4)
-#define MT_AGG_CONTROL_BAR_SPE_EN	BIT(19)
-#define MT_AGG_CONTROL_BAR_RATE		GENMASK(31, 20)
-
-#define MT_AGG_TMP			MT_WF_AGG(0x0d8)
-
-#define MT_AGG_BWCR			MT_WF_AGG(0x0ec)
-#define MT_AGG_BWCR_BW			GENMASK(3, 2)
-
-#define MT_AGG_RETRY_CONTROL		MT_WF_AGG(0x0f4)
-#define MT_AGG_RETRY_CONTROL_RTS_LIMIT	GENMASK(11, 7)
-#define MT_AGG_RETRY_CONTROL_BAR_LIMIT	GENMASK(15, 12)
-
-#define MT_WF_DMA_BASE			0x21c00
-#define MT_WF_DMA(ofs)			(MT_WF_DMA_BASE + (ofs))
-
-#define MT_DMA_DCR0			MT_WF_DMA(0x000)
-#define MT_DMA_DCR0_MAX_RX_LEN		GENMASK(15, 0)
-#define MT_DMA_DCR0_DAMSDU		BIT(16)
-#define MT_DMA_DCR0_RX_VEC_DROP		BIT(17)
-
-#define MT_DMA_DCR1			MT_WF_DMA(0x004)
-
-#define MT_DMA_FQCR0			MT_WF_DMA(0x008)
-#define MT_DMA_FQCR0_TARGET_WCID	GENMASK(7, 0)
-#define MT_DMA_FQCR0_TARGET_BSS		GENMASK(13, 8)
-#define MT_DMA_FQCR0_TARGET_QID		GENMASK(20, 16)
-#define MT_DMA_FQCR0_DEST_PORT_ID	GENMASK(23, 22)
-#define MT_DMA_FQCR0_DEST_QUEUE_ID	GENMASK(28, 24)
-#define MT_DMA_FQCR0_MODE		BIT(29)
-#define MT_DMA_FQCR0_STATUS		BIT(30)
-#define MT_DMA_FQCR0_BUSY		BIT(31)
-
-#define MT_DMA_RCFR0			MT_WF_DMA(0x070)
-#define MT_DMA_VCFR0			MT_WF_DMA(0x07c)
-
-#define MT_DMA_TCFR0			MT_WF_DMA(0x080)
-#define MT_DMA_TCFR1			MT_WF_DMA(0x084)
-#define MT_DMA_TCFR_TXS_AGGR_TIMEOUT	GENMASK(27, 16)
-#define MT_DMA_TCFR_TXS_QUEUE		BIT(14)
-#define MT_DMA_TCFR_TXS_AGGR_COUNT	GENMASK(12, 8)
-#define MT_DMA_TCFR_TXS_BIT_MAP		GENMASK(6, 0)
-
-#define MT_DMA_TMCFR0			MT_WF_DMA(0x088)
-
-#define MT_WF_ARB_BASE			0x21400
-#define MT_WF_ARB(ofs)			(MT_WF_ARB_BASE + (ofs))
-
-#define MT_WMM_AIFSN			MT_WF_ARB(0x020)
-#define MT_WMM_AIFSN_MASK		GENMASK(3, 0)
-#define MT_WMM_AIFSN_SHIFT(_n)		((_n) * 4)
-
-#define MT_WMM_CWMAX_BASE		MT_WF_ARB(0x028)
-#define MT_WMM_CWMAX(_n)		(MT_WMM_CWMAX_BASE + (((_n) / 2) << 2))
-#define MT_WMM_CWMAX_SHIFT(_n)		(((_n) & 1) * 16)
-#define MT_WMM_CWMAX_MASK		GENMASK(15, 0)
-
-#define MT_WMM_CWMIN			MT_WF_ARB(0x040)
-#define MT_WMM_CWMIN_MASK		GENMASK(7, 0)
-#define MT_WMM_CWMIN_SHIFT(_n)		((_n) * 8)
-
-#define MT_WF_ARB_RQCR			MT_WF_ARB(0x070)
-#define MT_WF_ARB_RQCR_RX_START		BIT(0)
-#define MT_WF_ARB_RQCR_RXV_START	BIT(4)
-#define MT_WF_ARB_RQCR_RXV_R_EN		BIT(7)
-#define MT_WF_ARB_RQCR_RXV_T_EN		BIT(8)
-
-#define MT_ARB_SCR			MT_WF_ARB(0x080)
-#define MT_ARB_SCR_BCNQ_OPMODE_MASK	GENMASK(1, 0)
-#define MT_ARB_SCR_BCNQ_OPMODE_SHIFT(n)	((n) * 2)
-#define MT_ARB_SCR_TX_DISABLE		BIT(8)
-#define MT_ARB_SCR_RX_DISABLE		BIT(9)
-#define MT_ARB_SCR_BCNQ_EMPTY_SKIP	BIT(28)
-#define MT_ARB_SCR_TTTT_BTIM_PRIO	BIT(29)
-#define MT_ARB_SCR_TBTT_BCN_PRIO	BIT(30)
-#define MT_ARB_SCR_TBTT_BCAST_PRIO	BIT(31)
-
-enum {
-	MT_BCNQ_OPMODE_STA =	0,
-	MT_BCNQ_OPMODE_AP =	1,
-	MT_BCNQ_OPMODE_ADHOC =	2,
-};
-
-#define MT_WF_ARB_TX_START_0		MT_WF_ARB(0x100)
-#define MT_WF_ARB_TX_START_1		MT_WF_ARB(0x104)
-#define MT_WF_ARB_TX_FLUSH_0		MT_WF_ARB(0x108)
-#define MT_WF_ARB_TX_FLUSH_1		MT_WF_ARB(0x10c)
-#define MT_WF_ARB_TX_STOP_0		MT_WF_ARB(0x110)
-#define MT_WF_ARB_TX_STOP_1		MT_WF_ARB(0x114)
-
-#define MT_WF_ARB_BCN_START		MT_WF_ARB(0x118)
-#define MT_WF_ARB_BCN_START_BSSn(n)	BIT(0 + (n))
-#define MT_WF_ARB_BCN_START_T_PRE_TTTT	BIT(10)
-#define MT_WF_ARB_BCN_START_T_TTTT	BIT(11)
-#define MT_WF_ARB_BCN_START_T_PRE_TBTT	BIT(12)
-#define MT_WF_ARB_BCN_START_T_TBTT	BIT(13)
-#define MT_WF_ARB_BCN_START_T_SLOT_IDLE	BIT(14)
-#define MT_WF_ARB_BCN_START_T_TX_START	BIT(15)
-#define MT_WF_ARB_BCN_START_BSS0n(n)	BIT((n) ? 16 + ((n) - 1) : 0)
-
-#define MT_WF_ARB_BCN_FLUSH		MT_WF_ARB(0x11c)
-#define MT_WF_ARB_BCN_FLUSH_BSSn(n)	BIT(0 + (n))
-#define MT_WF_ARB_BCN_FLUSH_BSS0n(n)	BIT((n) ? 16 + ((n) - 1) : 0)
-
-#define MT_WF_ARB_CAB_START		MT_WF_ARB(0x120)
-#define MT_WF_ARB_CAB_START_BSSn(n)	BIT(0 + (n))
-#define MT_WF_ARB_CAB_START_BSS0n(n)	BIT((n) ? 16 + ((n) - 1) : 0)
-
-#define MT_WF_ARB_CAB_FLUSH		MT_WF_ARB(0x124)
-#define MT_WF_ARB_CAB_FLUSH_BSSn(n)	BIT(0 + (n))
-#define MT_WF_ARB_CAB_FLUSH_BSS0n(n)	BIT((n) ? 16 + ((n) - 1) : 0)
-
-#define MT_WF_ARB_CAB_COUNT(n)		MT_WF_ARB(0x128 + (n) * 4)
-#define MT_WF_ARB_CAB_COUNT_SHIFT	4
-#define MT_WF_ARB_CAB_COUNT_MASK	GENMASK(3, 0)
-#define MT_WF_ARB_CAB_COUNT_B0_REG(n)	MT_WF_ARB_CAB_COUNT(((n) > 12 ? 2 : \
-							     ((n) > 4 ? 1 : 0)))
-#define MT_WF_ARB_CAB_COUNT_B0_SHIFT(n)	(((n) > 12 ? (n) - 12 : \
-					 ((n) > 4 ? (n) - 4 : \
-					  (n) ? (n) + 3 : 0)) * 4)
-
-#define MT_TX_ABORT			MT_WF_ARB(0x134)
-#define MT_TX_ABORT_EN			BIT(0)
-#define MT_TX_ABORT_WCID		GENMASK(15, 8)
-
-#define MT_WF_TMAC_BASE			0x21600
-#define MT_WF_TMAC(ofs)			(MT_WF_TMAC_BASE + (ofs))
-
-#define MT_TMAC_TCR			MT_WF_TMAC(0x000)
-#define MT_TMAC_TCR_BLINK_SEL		GENMASK(7, 6)
-#define MT_TMAC_TCR_PRE_RTS_GUARD	GENMASK(11, 8)
-#define MT_TMAC_TCR_PRE_RTS_SEC_IDLE	GENMASK(13, 12)
-#define MT_TMAC_TCR_RTS_SIGTA		BIT(14)
-#define MT_TMAC_TCR_LDPC_OFS		BIT(15)
-#define MT_TMAC_TCR_TX_STREAMS		GENMASK(17, 16)
-#define MT_TMAC_TCR_SCH_IDLE_SEL	GENMASK(19, 18)
-#define MT_TMAC_TCR_SCH_DET_PER_IOD	BIT(20)
-#define MT_TMAC_TCR_DCH_DET_DISABLE	BIT(21)
-#define MT_TMAC_TCR_TX_RIFS		BIT(22)
-#define MT_TMAC_TCR_RX_RIFS_MODE	BIT(23)
-#define MT_TMAC_TCR_TXOP_TBTT_CTL	BIT(24)
-#define MT_TMAC_TCR_TBTT_TX_STOP_CTL	BIT(25)
-#define MT_TMAC_TCR_TXOP_BURST_STOP	BIT(26)
-#define MT_TMAC_TCR_RDG_RA_MODE		BIT(27)
-#define MT_TMAC_TCR_RDG_RESP		BIT(29)
-#define MT_TMAC_TCR_RDG_NO_PENDING	BIT(30)
-#define MT_TMAC_TCR_SMOOTHING		BIT(31)
-
-#define MT_WMM_TXOP_BASE		MT_WF_TMAC(0x010)
-#define MT_WMM_TXOP(_n)			(MT_WMM_TXOP_BASE + \
-					 ((((_n) / 2) ^ 0x1) << 2))
-#define MT_WMM_TXOP_SHIFT(_n)		(((_n) & 1) * 16)
-#define MT_WMM_TXOP_MASK		GENMASK(15, 0)
-
-#define MT_TIMEOUT_CCK			MT_WF_TMAC(0x090)
-#define MT_TIMEOUT_OFDM			MT_WF_TMAC(0x094)
-#define MT_TIMEOUT_VAL_PLCP		GENMASK(15, 0)
-#define MT_TIMEOUT_VAL_CCA		GENMASK(31, 16)
-
-#define MT_TXREQ			MT_WF_TMAC(0x09c)
-#define MT_TXREQ_CCA_SRC_SEL		GENMASK(31, 30)
-
-#define MT_RXREQ			MT_WF_TMAC(0x0a0)
-#define MT_RXREQ_DELAY			GENMASK(8, 0)
-
-#define MT_IFS				MT_WF_TMAC(0x0a4)
-#define MT_IFS_EIFS			GENMASK(8, 0)
-#define MT_IFS_RIFS			GENMASK(14, 10)
-#define MT_IFS_SIFS			GENMASK(22, 16)
-#define MT_IFS_SLOT			GENMASK(30, 24)
-
-#define MT_TMAC_PCR			MT_WF_TMAC(0x0b4)
-#define MT_TMAC_PCR_RATE		GENMASK(8, 0)
-#define MT_TMAC_PCR_RATE_FIXED		BIT(15)
-#define MT_TMAC_PCR_ANT_ID		GENMASK(21, 16)
-#define MT_TMAC_PCR_ANT_ID_SEL		BIT(22)
-#define MT_TMAC_PCR_SPE_EN		BIT(23)
-#define MT_TMAC_PCR_ANT_PRI		GENMASK(26, 24)
-#define MT_TMAC_PCR_ANT_PRI_SEL		GENMASK(27)
-
-#define MT_WF_RMAC_BASE			0x21800
-#define MT_WF_RMAC(ofs)			(MT_WF_RMAC_BASE + (ofs))
-
-#define MT_WF_RFCR			MT_WF_RMAC(0x000)
-#define MT_WF_RFCR_DROP_STBC_MULTI	BIT(0)
-#define MT_WF_RFCR_DROP_FCSFAIL		BIT(1)
-#define MT_WF_RFCR_DROP_VERSION		BIT(3)
-#define MT_WF_RFCR_DROP_PROBEREQ	BIT(4)
-#define MT_WF_RFCR_DROP_MCAST		BIT(5)
-#define MT_WF_RFCR_DROP_BCAST		BIT(6)
-#define MT_WF_RFCR_DROP_MCAST_FILTERED	BIT(7)
-#define MT_WF_RFCR_DROP_A3_MAC		BIT(8)
-#define MT_WF_RFCR_DROP_A3_BSSID	BIT(9)
-#define MT_WF_RFCR_DROP_A2_BSSID	BIT(10)
-#define MT_WF_RFCR_DROP_OTHER_BEACON	BIT(11)
-#define MT_WF_RFCR_DROP_FRAME_REPORT	BIT(12)
-#define MT_WF_RFCR_DROP_CTL_RSV		BIT(13)
-#define MT_WF_RFCR_DROP_CTS		BIT(14)
-#define MT_WF_RFCR_DROP_RTS		BIT(15)
-#define MT_WF_RFCR_DROP_DUPLICATE	BIT(16)
-#define MT_WF_RFCR_DROP_OTHER_BSS	BIT(17)
-#define MT_WF_RFCR_DROP_OTHER_UC	BIT(18)
-#define MT_WF_RFCR_DROP_OTHER_TIM	BIT(19)
-#define MT_WF_RFCR_DROP_NDPA		BIT(20)
-#define MT_WF_RFCR_DROP_UNWANTED_CTL	BIT(21)
-
-#define MT_BSSID0(idx)			MT_WF_RMAC(0x004 + (idx) * 8)
-#define MT_BSSID1(idx)			MT_WF_RMAC(0x008 + (idx) * 8)
-#define MT_BSSID1_VALID			BIT(16)
-
-#define MT_MAC_ADDR0(idx)		MT_WF_RMAC(0x024 + (idx) * 8)
-#define MT_MAC_ADDR1(idx)		MT_WF_RMAC(0x028 + (idx) * 8)
-#define MT_MAC_ADDR1_ADDR		GENMASK(15, 0)
-#define MT_MAC_ADDR1_VALID		BIT(16)
-
-#define MT_BA_CONTROL_0			MT_WF_RMAC(0x068)
-#define MT_BA_CONTROL_1			MT_WF_RMAC(0x06c)
-#define MT_BA_CONTROL_1_ADDR		GENMASK(15, 0)
-#define MT_BA_CONTROL_1_TID		GENMASK(19, 16)
-#define MT_BA_CONTROL_1_IGNORE_TID	BIT(20)
-#define MT_BA_CONTROL_1_IGNORE_ALL	BIT(21)
-#define MT_BA_CONTROL_1_RESET		BIT(22)
-
-#define MT_WF_RMACDR			MT_WF_RMAC(0x078)
-#define MT_WF_RMACDR_TSF_PROBERSP_DIS	BIT(0)
-#define MT_WF_RMACDR_TSF_TIM		BIT(4)
-#define MT_WF_RMACDR_MBSSID_MASK	GENMASK(25, 24)
-#define MT_WF_RMACDR_CHECK_HTC_BY_RATE	BIT(26)
-#define MT_WF_RMACDR_MAXLEN_20BIT	BIT(30)
-
-#define MT_WF_RMAC_RMCR			MT_WF_RMAC(0x080)
-#define MT_WF_RMAC_RMCR_SMPS_MODE	GENMASK(21, 20)
-#define MT_WF_RMAC_RMCR_RX_STREAMS	GENMASK(24, 22)
-#define MT_WF_RMAC_RMCR_SMPS_RTS	BIT(25)
-
-#define MT_WF_RMAC_CH_FREQ		MT_WF_RMAC(0x090)
-#define MT_WF_RMAC_MAXMINLEN		MT_WF_RMAC(0x098)
-#define MT_WF_RFCR1			MT_WF_RMAC(0x0a4)
-#define MT_WF_RMAC_TMR_PA		MT_WF_RMAC(0x0e0)
-
-#define MT_WF_SEC_BASE			0x21a00
-#define MT_WF_SEC(ofs)			(MT_WF_SEC_BASE + (ofs))
-
-#define MT_SEC_SCR			MT_WF_SEC(0x004)
-#define MT_SEC_SCR_MASK_ORDER		GENMASK(1, 0)
-
-#define MT_WTBL_OFF_BASE		0x23000
-#define MT_WTBL_OFF(n)			(MT_WTBL_OFF_BASE + (n))
-
-#define MT_WTBL_UPDATE			MT_WTBL_OFF(0x000)
-#define MT_WTBL_UPDATE_WLAN_IDX		GENMASK(7, 0)
-#define MT_WTBL_UPDATE_WTBL2		BIT(11)
-#define MT_WTBL_UPDATE_ADM_COUNT_CLEAR	BIT(12)
-#define MT_WTBL_UPDATE_RATE_UPDATE	BIT(13)
-#define MT_WTBL_UPDATE_TX_COUNT_CLEAR	BIT(14)
-#define MT_WTBL_UPDATE_RX_COUNT_CLEAR	BIT(15)
-#define MT_WTBL_UPDATE_BUSY		BIT(16)
-
-#define MT_WTBL_RMVTCR			MT_WTBL_OFF(0x008)
-#define MT_WTBL_RMVTCR_RX_MV_MODE	BIT(23)
-
-#define MT_LPON_BASE			0x24000
-#define MT_LPON(n)			(MT_LPON_BASE + (n))
-
-#define MT_LPON_T0CR			MT_LPON(0x010)
-#define MT_LPON_T0CR_MODE		GENMASK(1, 0)
-
-#define MT_LPON_UTTR0			MT_LPON(0x018)
-#define MT_LPON_UTTR1			MT_LPON(0x01c)
-
-#define MT_LPON_BTEIR			MT_LPON(0x020)
-#define MT_LPON_BTEIR_MBSS_MODE		GENMASK(31, 29)
-
-#define MT_PRE_TBTT			MT_LPON(0x030)
-#define MT_PRE_TBTT_MASK		GENMASK(7, 0)
-#define MT_PRE_TBTT_SHIFT		8
-
-#define MT_TBTT				MT_LPON(0x034)
-#define MT_TBTT_PERIOD			GENMASK(15, 0)
-#define MT_TBTT_DTIM_PERIOD		GENMASK(23, 16)
-#define MT_TBTT_TBTT_WAKE_PERIOD	GENMASK(27, 24)
-#define MT_TBTT_DTIM_WAKE_PERIOD	GENMASK(30, 28)
-#define MT_TBTT_CAL_ENABLE		BIT(31)
-
-#define MT_TBTT_TIMER_CFG		MT_LPON(0x05c)
-
-#define MT_LPON_SBTOR(n)		MT_LPON(0x0a0)
-#define MT_LPON_SBTOR_SUB_BSS_EN	BIT(29)
-#define MT_LPON_SBTOR_TIME_OFFSET	GENMASK(19, 0)
-
-#define MT_INT_WAKEUP_BASE		0x24400
-#define MT_INT_WAKEUP(n)		(MT_INT_WAKEUP_BASE + (n))
-
-#define MT_HW_INT_STATUS(n)		MT_INT_WAKEUP(0x3c + (n) * 8)
-#define MT_HW_INT_MASK(n)		MT_INT_WAKEUP(0x40 + (n) * 8)
-
-#define MT_HW_INT3_TBTT0		BIT(15)
-#define MT_HW_INT3_PRE_TBTT0		BIT(31)
-
-#define MT_WTBL1_BASE			0x28000
-
-#define MT_WTBL_ON_BASE			(MT_WTBL1_BASE + 0x2000)
-#define MT_WTBL_ON(_n)			(MT_WTBL_ON_BASE + (_n))
-
-#define MT_WTBL_RIUCR0			MT_WTBL_ON(0x200)
-
-#define MT_WTBL_RIUCR1			MT_WTBL_ON(0x204)
-#define MT_WTBL_RIUCR1_RATE0		GENMASK(11, 0)
-#define MT_WTBL_RIUCR1_RATE1		GENMASK(23, 12)
-#define MT_WTBL_RIUCR1_RATE2_LO		GENMASK(31, 24)
-
-#define MT_WTBL_RIUCR2			MT_WTBL_ON(0x208)
-#define MT_WTBL_RIUCR2_RATE2_HI		GENMASK(3, 0)
-#define MT_WTBL_RIUCR2_RATE3		GENMASK(15, 4)
-#define MT_WTBL_RIUCR2_RATE4		GENMASK(27, 16)
-#define MT_WTBL_RIUCR2_RATE5_LO		GENMASK(31, 28)
-
-#define MT_WTBL_RIUCR3			MT_WTBL_ON(0x20c)
-#define MT_WTBL_RIUCR3_RATE5_HI		GENMASK(7, 0)
-#define MT_WTBL_RIUCR3_RATE6		GENMASK(19, 8)
-#define MT_WTBL_RIUCR3_RATE7		GENMASK(31, 20)
-
-#define MT_MIB_BASE			0x2c000
-#define MT_MIB(_n)			(MT_MIB_BASE + (_n))
-
-#define MT_MIB_CTL			MT_MIB(0x00)
-#define MT_MIB_CTL_PSCCA_TIME		GENMASK(13, 11)
-#define MT_MIB_CTL_CCA_NAV_TX		GENMASK(16, 14)
-#define MT_MIB_CTL_ED_TIME		GENMASK(30, 28)
-#define MT_MIB_CTL_READ_CLR_DIS		BIT(31)
-
-#define MT_MIB_STAT(_n)			MT_MIB(0x08 + (_n) * 4)
-
-#define MT_MIB_STAT_CCA			MT_MIB_STAT(9)
-#define MT_MIB_STAT_CCA_MASK		GENMASK(23, 0)
-
-#define MT_MIB_STAT_PSCCA		MT_MIB_STAT(16)
-#define MT_MIB_STAT_PSCCA_MASK		GENMASK(23, 0)
-
-#define MT_TX_AGG_CNT(n)		MT_MIB(0xa8 + ((n) << 2))
-
-#define MT_MIB_STAT_ED			MT_MIB_STAT(18)
-#define MT_MIB_STAT_ED_MASK		GENMASK(23, 0)
-
-#define MT_PCIE_REMAP_BASE_1		0x40000
-#define MT_PCIE_REMAP_BASE_2		0x80000
-
-#define MT_TX_HW_QUEUE_MGMT		4
-#define MT_TX_HW_QUEUE_MCU		5
-#define MT_TX_HW_QUEUE_BCN		7
-#define MT_TX_HW_QUEUE_BMC		8
-
-#define MT_LED_BASE_PHYS		0x80024000
-#define MT_LED_PHYS(_n)			(MT_LED_BASE_PHYS + (_n))
-
-#define MT_LED_CTRL			MT_LED_PHYS(0x00)
-
-#define MT_LED_CTRL_REPLAY(_n)		BIT(0 + (8 * (_n)))
-#define MT_LED_CTRL_POLARITY(_n)	BIT(1 + (8 * (_n)))
-#define MT_LED_CTRL_TX_BLINK_MODE(_n)	BIT(2 + (8 * (_n)))
-#define MT_LED_CTRL_TX_MANUAL_BLINK(_n)	BIT(3 + (8 * (_n)))
-#define MT_LED_CTRL_TX_OVER_BLINK(_n)	BIT(5 + (8 * (_n)))
-#define MT_LED_CTRL_KICK(_n)		BIT(7 + (8 * (_n)))
-
-#define MT_LED_STATUS_0(_n)		MT_LED_PHYS(0x10 + ((_n) * 8))
-#define MT_LED_STATUS_1(_n)		MT_LED_PHYS(0x14 + ((_n) * 8))
-#define MT_LED_STATUS_OFF		GENMASK(31, 24)
-#define MT_LED_STATUS_ON		GENMASK(23, 16)
-#define MT_LED_STATUS_DURATION		GENMASK(15, 0)
-
-#define MT_CLIENT_BASE_PHYS_ADDR	0x800c0000
-
-#define MT_CLIENT_TMAC_INFO_TEMPLATE	0x040
-
-#define MT_CLIENT_STATUS		0x06c
-
-#define MT_CLIENT_RESET_TX		0x070
-#define MT_CLIENT_RESET_TX_R_E_1	BIT(16)
-#define MT_CLIENT_RESET_TX_R_E_2	BIT(17)
-#define MT_CLIENT_RESET_TX_R_E_1_S	BIT(20)
-#define MT_CLIENT_RESET_TX_R_E_2_S	BIT(21)
-
-#define MT_EFUSE_BASE			0x81070000
-
-#define MT_EFUSE_BASE_CTRL		0x000
-#define MT_EFUSE_BASE_CTRL_EMPTY	BIT(30)
-
-#define MT_EFUSE_CTRL			0x008
-#define MT_EFUSE_CTRL_AOUT		GENMASK(5, 0)
-#define MT_EFUSE_CTRL_MODE		GENMASK(7, 6)
-#define MT_EFUSE_CTRL_LDO_OFF_TIME	GENMASK(13, 8)
-#define MT_EFUSE_CTRL_LDO_ON_TIME	GENMASK(15, 14)
-#define MT_EFUSE_CTRL_AIN		GENMASK(25, 16)
-#define MT_EFUSE_CTRL_VALID		BIT(29)
-#define MT_EFUSE_CTRL_KICK		BIT(30)
-#define MT_EFUSE_CTRL_SEL		BIT(31)
-
-#define MT_EFUSE_WDATA(_i)		(0x010 + ((_i) * 4))
-#define MT_EFUSE_RDATA(_i)		(0x030 + ((_i) * 4))
-
-#define MT_CLIENT_RXINF			0x068
-#define MT_CLIENT_RXINF_RXSH_GROUPS	GENMASK(2, 0)
-
-#define MT_PSE_BASE_PHYS_ADDR		0xa0000000
-
-#define MT_PSE_WTBL_2_PHYS_ADDR		0xa5000000
-
-#define MT_WTBL1_SIZE			(8 * 4)
-#define MT_WTBL2_SIZE			(16 * 4)
-#define MT_WTBL3_OFFSET			(MT7603_WTBL_SIZE * MT_WTBL2_SIZE)
-#define MT_WTBL3_SIZE			(16 * 4)
-#define MT_WTBL4_OFFSET			(MT7603_WTBL_SIZE * MT_WTBL3_SIZE + \
-					 MT_WTBL3_OFFSET)
-#define MT_WTBL4_SIZE			(8 * 4)
-
-#define MT_WTBL1_W0_ADDR_HI		GENMASK(15, 0)
-#define MT_WTBL1_W0_MUAR_IDX		GENMASK(21, 16)
-#define MT_WTBL1_W0_RX_CHECK_A1		BIT(22)
-#define MT_WTBL1_W0_KEY_IDX		GENMASK(24, 23)
-#define MT_WTBL1_W0_RX_CHECK_KEY_IDX	BIT(25)
-#define MT_WTBL1_W0_RX_KEY_VALID	BIT(26)
-#define MT_WTBL1_W0_RX_IK_VALID		BIT(27)
-#define MT_WTBL1_W0_RX_VALID		BIT(28)
-#define MT_WTBL1_W0_RX_CHECK_A2		BIT(29)
-#define MT_WTBL1_W0_RX_DATA_VALID	BIT(30)
-#define MT_WTBL1_W0_WRITE_BURST		BIT(31)
-
-#define MT_WTBL1_W1_ADDR_LO		GENMASK(31, 0)
-
-#define MT_WTBL1_W2_MPDU_DENSITY	GENMASK(2, 0)
-#define MT_WTBL1_W2_KEY_TYPE		GENMASK(6, 3)
-#define MT_WTBL1_W2_EVEN_PN		BIT(7)
-#define MT_WTBL1_W2_TO_DS		BIT(8)
-#define MT_WTBL1_W2_FROM_DS		BIT(9)
-#define MT_WTBL1_W2_HEADER_TRANS	BIT(10)
-#define MT_WTBL1_W2_AMPDU_FACTOR	GENMASK(13, 11)
-#define MT_WTBL1_W2_PWR_MGMT		BIT(14)
-#define MT_WTBL1_W2_RDG			BIT(15)
-#define MT_WTBL1_W2_RTS			BIT(16)
-#define MT_WTBL1_W2_CFACK		BIT(17)
-#define MT_WTBL1_W2_RDG_BA		BIT(18)
-#define MT_WTBL1_W2_SMPS		BIT(19)
-#define MT_WTBL1_W2_TXS_BAF_REPORT	BIT(20)
-#define MT_WTBL1_W2_DYN_BW		BIT(21)
-#define MT_WTBL1_W2_LDPC		BIT(22)
-#define MT_WTBL1_W2_ITXBF		BIT(23)
-#define MT_WTBL1_W2_ETXBF		BIT(24)
-#define MT_WTBL1_W2_TXOP_PS		BIT(25)
-#define MT_WTBL1_W2_MESH		BIT(26)
-#define MT_WTBL1_W2_QOS			BIT(27)
-#define MT_WTBL1_W2_HT			BIT(28)
-#define MT_WTBL1_W2_VHT			BIT(29)
-#define MT_WTBL1_W2_ADMISSION_CONTROL	BIT(30)
-#define MT_WTBL1_W2_GROUP_ID		BIT(31)
-
-#define MT_WTBL1_W3_WTBL2_FRAME_ID	GENMASK(10, 0)
-#define MT_WTBL1_W3_WTBL2_ENTRY_ID	GENMASK(15, 11)
-#define MT_WTBL1_W3_WTBL4_FRAME_ID	GENMASK(26, 16)
-#define MT_WTBL1_W3_CHECK_PER		BIT(27)
-#define MT_WTBL1_W3_KEEP_I_PSM		BIT(28)
-#define MT_WTBL1_W3_I_PSM		BIT(29)
-#define MT_WTBL1_W3_POWER_SAVE		BIT(30)
-#define MT_WTBL1_W3_SKIP_TX		BIT(31)
-
-#define MT_WTBL1_W4_WTBL3_FRAME_ID	GENMASK(10, 0)
-#define MT_WTBL1_W4_WTBL3_ENTRY_ID	GENMASK(16, 11)
-#define MT_WTBL1_W4_WTBL4_ENTRY_ID	GENMASK(22, 17)
-#define MT_WTBL1_W4_PARTIAL_AID		GENMASK(31, 23)
-
-#define MT_WTBL2_W0_PN_LO		GENMASK(31, 0)
-
-#define MT_WTBL2_W1_PN_HI		GENMASK(15, 0)
-#define MT_WTBL2_W1_NON_QOS_SEQNO	GENMASK(27, 16)
-
-#define MT_WTBL2_W2_TID0_SN		GENMASK(11, 0)
-#define MT_WTBL2_W2_TID1_SN		GENMASK(23, 12)
-#define MT_WTBL2_W2_TID2_SN_LO		GENMASK(31, 24)
-
-#define MT_WTBL2_W3_TID2_SN_HI		GENMASK(3, 0)
-#define MT_WTBL2_W3_TID3_SN		GENMASK(15, 4)
-#define MT_WTBL2_W3_TID4_SN		GENMASK(27, 16)
-#define MT_WTBL2_W3_TID5_SN_LO		GENMASK(31, 28)
-
-#define MT_WTBL2_W4_TID5_SN_HI		GENMASK(7, 0)
-#define MT_WTBL2_W4_TID6_SN		GENMASK(19, 8)
-#define MT_WTBL2_W4_TID7_SN		GENMASK(31, 20)
-
-#define MT_WTBL2_W5_TX_COUNT_RATE1	GENMASK(15, 0)
-#define MT_WTBL2_W5_FAIL_COUNT_RATE1	GENAMSK(31, 16)
-
-#define MT_WTBL2_W6_TX_COUNT_RATE2	GENMASK(7, 0)
-#define MT_WTBL2_W6_TX_COUNT_RATE3	GENMASK(15, 8)
-#define MT_WTBL2_W6_TX_COUNT_RATE4	GENMASK(23, 16)
-#define MT_WTBL2_W6_TX_COUNT_RATE5	GENMASK(31, 24)
-
-#define MT_WTBL2_W7_TX_COUNT_CUR_BW	GENMASK(15, 0)
-#define MT_WTBL2_W7_FAIL_COUNT_CUR_BW	GENMASK(31, 16)
-
-#define MT_WTBL2_W8_TX_COUNT_OTHER_BW	GENMASK(15, 0)
-#define MT_WTBL2_W8_FAIL_COUNT_OTHER_BW	GENMASK(31, 16)
-
-#define MT_WTBL2_W9_POWER_OFFSET	GENMASK(4, 0)
-#define MT_WTBL2_W9_SPATIAL_EXT		BIT(5)
-#define MT_WTBL2_W9_ANT_PRIORITY	GENMASK(8, 6)
-#define MT_WTBL2_W9_CC_BW_SEL		GENMASK(10, 9)
-#define MT_WTBL2_W9_CHANGE_BW_RATE	GENMASK(13, 11)
-#define MT_WTBL2_W9_BW_CAP		GENMASK(15, 14)
-#define MT_WTBL2_W9_SHORT_GI_20		BIT(16)
-#define MT_WTBL2_W9_SHORT_GI_40		BIT(17)
-#define MT_WTBL2_W9_SHORT_GI_80		BIT(18)
-#define MT_WTBL2_W9_SHORT_GI_160	BIT(19)
-#define MT_WTBL2_W9_MPDU_FAIL_COUNT	GENMASK(25, 23)
-#define MT_WTBL2_W9_MPDU_OK_COUNT	GENMASK(28, 26)
-#define MT_WTBL2_W9_RATE_IDX		GENMASK(31, 29)
-
-#define MT_WTBL2_W10_RATE1		GENMASK(11, 0)
-#define MT_WTBL2_W10_RATE2		GENMASK(23, 12)
-#define MT_WTBL2_W10_RATE3_LO		GENMASK(31, 24)
-
-#define MT_WTBL2_W11_RATE3_HI		GENMASK(3, 0)
-#define MT_WTBL2_W11_RATE4		GENMASK(15, 4)
-#define MT_WTBL2_W11_RATE5		GENMASK(27, 16)
-#define MT_WTBL2_W11_RATE6_LO		GENMASK(31, 28)
-
-#define MT_WTBL2_W12_RATE6_HI		GENMASK(7, 0)
-#define MT_WTBL2_W12_RATE7		GENMASK(19, 8)
-#define MT_WTBL2_W12_RATE8		GENMASK(31, 20)
-
-#define MT_WTBL2_W13_AVG_RCPI0		GENMASK(7, 0)
-#define MT_WTBL2_W13_AVG_RCPI1		GENMASK(15, 8)
-#define MT_WTBL2_W13_AVG_RCPI2		GENAMSK(23, 16)
-
-#define MT_WTBL2_W14_CC_NOISE_1S	GENMASK(6, 0)
-#define MT_WTBL2_W14_CC_NOISE_2S	GENMASK(13, 7)
-#define MT_WTBL2_W14_CC_NOISE_3S	GENMASK(20, 14)
-#define MT_WTBL2_W14_CHAN_EST_RMS	GENMASK(24, 21)
-#define MT_WTBL2_W14_CC_NOISE_SEL	BIT(15)
-#define MT_WTBL2_W14_ANT_SEL		GENMASK(31, 26)
-
-#define MT_WTBL2_W15_BA_WIN_SIZE	GENMASK(2, 0)
-#define MT_WTBL2_W15_BA_WIN_SIZE_SHIFT	3
-#define MT_WTBL2_W15_BA_EN_TIDS		GENMASK(31, 24)
-
-#define MT_WTBL1_OR			(MT_WTBL1_BASE + 0x2300)
-#define MT_WTBL1_OR_PSM_WRITE		BIT(31)
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/soc.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/soc.c
deleted file mode 100644
index ba92703..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7603/soc.c
+++ /dev/null
@@ -1,82 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-
-#include "mt7603.h"
-
-static int
-mt76_wmac_probe(struct platform_device *pdev)
-{
-	struct mt7603_dev *dev;
-	void __iomem *mem_base;
-	struct mt76_dev *mdev;
-	int irq;
-	int ret;
-
-	irq = platform_get_irq(pdev, 0);
-	if (irq < 0)
-		return irq;
-
-	mem_base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(mem_base))
-		return PTR_ERR(mem_base);
-
-	mdev = mt76_alloc_device(&pdev->dev, sizeof(*dev), &mt7603_ops,
-				 &mt7603_drv_ops);
-	if (!mdev)
-		return -ENOMEM;
-
-	dev = container_of(mdev, struct mt7603_dev, mt76);
-	mt76_mmio_init(mdev, mem_base);
-
-	mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |
-		    (mt76_rr(dev, MT_HW_REV) & 0xff);
-	dev_info(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-
-	ret = devm_request_irq(mdev->dev, irq, mt7603_irq_handler,
-			       IRQF_SHARED, KBUILD_MODNAME, dev);
-	if (ret)
-		goto error;
-
-	ret = mt7603_register_device(dev);
-	if (ret)
-		goto error;
-
-	return 0;
-error:
-	ieee80211_free_hw(mt76_hw(dev));
-	return ret;
-}
-
-static int
-mt76_wmac_remove(struct platform_device *pdev)
-{
-	struct mt76_dev *mdev = platform_get_drvdata(pdev);
-	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
-
-	mt7603_unregister_device(dev);
-
-	return 0;
-}
-
-static const struct of_device_id of_wmac_match[] = {
-	{ .compatible = "mediatek,mt7628-wmac" },
-	{},
-};
-
-MODULE_DEVICE_TABLE(of, of_wmac_match);
-MODULE_FIRMWARE(MT7628_FIRMWARE_E1);
-MODULE_FIRMWARE(MT7628_FIRMWARE_E2);
-
-struct platform_driver mt76_wmac_driver = {
-	.probe		= mt76_wmac_probe,
-	.remove		= mt76_wmac_remove,
-	.driver = {
-		.name = "mt76_wmac",
-		.of_match_table = of_wmac_match,
-	},
-};
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/Kconfig b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/Kconfig
deleted file mode 100644
index 30fba36..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/Kconfig
+++ /dev/null
@@ -1,56 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-only
-
-config MT7615_COMMON
-	tristate
-	select WANT_DEV_COREDUMP
-	select MT76_CONNAC_LIB
-
-config MT7615E
-	tristate "MediaTek MT7615E and MT7663E (PCIe) support"
-	select MT7615_COMMON
-	depends on MAC80211
-	depends on PCI
-	help
-	  This adds support for MT7615-based wireless PCIe devices,
-	  which support concurrent dual-band operation at both 5GHz
-	  and 2.4GHz, IEEE 802.11ac 4x4:4SS 1733Mbps PHY rate, wave2
-	  MU-MIMO up to 4 users/group and 160MHz channels.
-
-	  To compile this driver as a module, choose M here.
-
-config MT7622_WMAC
-	bool "MT7622 (SoC) WMAC support"
-	depends on MT7615E
-	depends on ARCH_MEDIATEK || COMPILE_TEST
-	select REGMAP
-	default y
-	help
-	  This adds support for the built-in WMAC on MT7622 SoC devices
-	  which has the same feature set as a MT7615, but limited to
-	  2.4 GHz only.
-
-config MT7663_USB_SDIO_COMMON
-	tristate
-	select MT7615_COMMON
-
-config MT7663U
-	tristate "MediaTek MT7663U (USB) support"
-	select MT76_USB
-	select MT7663_USB_SDIO_COMMON
-	depends on MAC80211
-	depends on USB
-	help
-	  This adds support for MT7663U 802.11ac 2x2:2 wireless devices.
-
-	  To compile this driver as a module, choose M here.
-
-config MT7663S
-	tristate "MediaTek MT7663S (SDIO) support"
-	select MT76_SDIO
-	select MT7663_USB_SDIO_COMMON
-	depends on MAC80211
-	depends on MMC
-	help
-	  This adds support for MT7663S 802.11ac 2x2:2 wireless devices.
-
-	  To compile this driver as a module, choose M here.
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/Makefile b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/Makefile
deleted file mode 100644
index 3564d33..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-#SPDX-License-Identifier: ISC
-
-EXTRA_CFLAGS += -DCONFIG_MT76_LEDS
-obj-$(CONFIG_MT7615_COMMON) += mt7615-common.o
-obj-$(CONFIG_MT7615E) += mt7615e.o
-obj-$(CONFIG_MT7663_USB_SDIO_COMMON) += mt7663-usb-sdio-common.o
-obj-$(CONFIG_MT7663U) += mt7663u.o
-obj-$(CONFIG_MT7663S) += mt7663s.o
-
-CFLAGS_trace.o := -I$(src)
-
-mt7615-common-y := main.o init.o mcu.o eeprom.o mac.o \
-		   debugfs.o trace.o
-mt7615-common-$(CONFIG_NL80211_TESTMODE) += testmode.o
-
-mt7615e-y := pci.o pci_init.o dma.o pci_mac.o mmio.o
-mt7615e-$(CONFIG_MT7622_WMAC) += soc.o
-
-mt7663-usb-sdio-common-y := usb_sdio.o
-mt7663u-y := usb.o usb_mcu.o
-mt7663s-y := sdio.o sdio_mcu.o
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/debugfs.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/debugfs.c
deleted file mode 100644
index c26b45a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/debugfs.c
+++ /dev/null
@@ -1,611 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include "mt7615.h"
-
-static int
-mt7615_reg_set(void *data, u64 val)
-{
-	struct mt7615_dev *dev = data;
-
-	mt7615_mutex_acquire(dev);
-	mt76_wr(dev, dev->mt76.debugfs_reg, val);
-	mt7615_mutex_release(dev);
-
-	return 0;
-}
-
-static int
-mt7615_reg_get(void *data, u64 *val)
-{
-	struct mt7615_dev *dev = data;
-
-	mt7615_mutex_acquire(dev);
-	*val = mt76_rr(dev, dev->mt76.debugfs_reg);
-	mt7615_mutex_release(dev);
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_regval, mt7615_reg_get, mt7615_reg_set,
-			 "0x%08llx\n");
-
-static int
-mt7615_radar_pattern_set(void *data, u64 val)
-{
-	struct mt7615_dev *dev = data;
-	int err;
-
-	if (!mt7615_wait_for_mcu_init(dev))
-		return 0;
-
-	mt7615_mutex_acquire(dev);
-	err = mt7615_mcu_rdd_send_pattern(dev);
-	mt7615_mutex_release(dev);
-
-	return err;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_radar_pattern, NULL,
-			 mt7615_radar_pattern_set, "%lld\n");
-
-static int mt7615_config(void *data, u64 val)
-{
-	struct mt7615_dev *dev = data;
-	int ret;
-
-	mt7615_mutex_acquire(dev);
-	ret = mt76_connac_mcu_chip_config(&dev->mt76);
-	mt7615_mutex_release(dev);
-
-	return ret;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_config, NULL, mt7615_config, "%lld\n");
-
-static int
-mt7615_scs_set(void *data, u64 val)
-{
-	struct mt7615_dev *dev = data;
-	struct mt7615_phy *ext_phy;
-
-	if (!mt7615_wait_for_mcu_init(dev))
-		return 0;
-
-	mt7615_mac_set_scs(&dev->phy, val);
-	ext_phy = mt7615_ext_phy(dev);
-	if (ext_phy)
-		mt7615_mac_set_scs(ext_phy, val);
-
-	return 0;
-}
-
-static int
-mt7615_scs_get(void *data, u64 *val)
-{
-	struct mt7615_dev *dev = data;
-
-	*val = dev->phy.scs_en;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_scs, mt7615_scs_get,
-			 mt7615_scs_set, "%lld\n");
-
-static int
-mt7615_pm_set(void *data, u64 val)
-{
-	struct mt7615_dev *dev = data;
-	struct mt76_connac_pm *pm = &dev->pm;
-	int ret = 0;
-
-	if (!mt7615_wait_for_mcu_init(dev))
-		return 0;
-
-	if (!mt7615_firmware_offload(dev) || mt76_is_usb(&dev->mt76))
-		return -EOPNOTSUPP;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (val == pm->enable)
-		goto out;
-
-	if (dev->phy.n_beacon_vif) {
-		ret = -EBUSY;
-		goto out;
-	}
-
-	if (!pm->enable) {
-		pm->stats.last_wake_event = jiffies;
-		pm->stats.last_doze_event = jiffies;
-	}
-	/* make sure the chip is awake here and ps_work is scheduled
-	 * just at end of the this routine.
-	 */
-	pm->enable = false;
-	mt76_connac_pm_wake(&dev->mphy, pm);
-
-	pm->enable = val;
-	mt76_connac_power_save_sched(&dev->mphy, pm);
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static int
-mt7615_pm_get(void *data, u64 *val)
-{
-	struct mt7615_dev *dev = data;
-
-	*val = dev->pm.enable;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_pm, mt7615_pm_get, mt7615_pm_set, "%lld\n");
-
-static int
-mt7615_pm_stats(struct seq_file *s, void *data)
-{
-	struct mt7615_dev *dev = dev_get_drvdata(s->private);
-	struct mt76_connac_pm *pm = &dev->pm;
-	unsigned long awake_time = pm->stats.awake_time;
-	unsigned long doze_time = pm->stats.doze_time;
-
-	if (!test_bit(MT76_STATE_PM, &dev->mphy.state))
-		awake_time += jiffies - pm->stats.last_wake_event;
-	else
-		doze_time += jiffies - pm->stats.last_doze_event;
-
-	seq_printf(s, "awake time: %14u\ndoze time: %15u\n",
-		   jiffies_to_msecs(awake_time),
-		   jiffies_to_msecs(doze_time));
-
-	return 0;
-}
-
-static int
-mt7615_pm_idle_timeout_set(void *data, u64 val)
-{
-	struct mt7615_dev *dev = data;
-
-	dev->pm.idle_timeout = msecs_to_jiffies(val);
-
-	return 0;
-}
-
-static int
-mt7615_pm_idle_timeout_get(void *data, u64 *val)
-{
-	struct mt7615_dev *dev = data;
-
-	*val = jiffies_to_msecs(dev->pm.idle_timeout);
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_pm_idle_timeout, mt7615_pm_idle_timeout_get,
-			 mt7615_pm_idle_timeout_set, "%lld\n");
-
-static int
-mt7615_dbdc_set(void *data, u64 val)
-{
-	struct mt7615_dev *dev = data;
-
-	if (!mt7615_wait_for_mcu_init(dev))
-		return 0;
-
-	if (val)
-		mt7615_register_ext_phy(dev);
-	else
-		mt7615_unregister_ext_phy(dev);
-
-	return 0;
-}
-
-static int
-mt7615_dbdc_get(void *data, u64 *val)
-{
-	struct mt7615_dev *dev = data;
-
-	*val = !!mt7615_ext_phy(dev);
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_dbdc, mt7615_dbdc_get,
-			 mt7615_dbdc_set, "%lld\n");
-
-static int
-mt7615_fw_debug_set(void *data, u64 val)
-{
-	struct mt7615_dev *dev = data;
-
-	if (!mt7615_wait_for_mcu_init(dev))
-		return 0;
-
-	dev->fw_debug = val;
-
-	mt7615_mutex_acquire(dev);
-	mt7615_mcu_fw_log_2_host(dev, dev->fw_debug ? 2 : 0);
-	mt7615_mutex_release(dev);
-
-	return 0;
-}
-
-static int
-mt7615_fw_debug_get(void *data, u64 *val)
-{
-	struct mt7615_dev *dev = data;
-
-	*val = dev->fw_debug;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug, mt7615_fw_debug_get,
-			 mt7615_fw_debug_set, "%lld\n");
-
-static int
-mt7615_reset_test_set(void *data, u64 val)
-{
-	struct mt7615_dev *dev = data;
-	struct sk_buff *skb;
-
-	if (!mt7615_wait_for_mcu_init(dev))
-		return 0;
-
-	skb = alloc_skb(1, GFP_KERNEL);
-	if (!skb)
-		return -ENOMEM;
-
-	skb_put(skb, 1);
-
-	mt7615_mutex_acquire(dev);
-	mt76_tx_queue_skb_raw(dev, dev->mphy.q_tx[0], skb, 0);
-	mt7615_mutex_release(dev);
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_reset_test, NULL,
-			 mt7615_reset_test_set, "%lld\n");
-
-static void
-mt7615_ampdu_stat_read_phy(struct mt7615_phy *phy,
-			   struct seq_file *file)
-{
-	struct mt7615_dev *dev = file->private;
-	u32 reg = is_mt7663(&dev->mt76) ? MT_MIB_ARNG(0) : MT_AGG_ASRCR0;
-	bool ext_phy = phy != &dev->phy;
-	int bound[7], i, range;
-
-	if (!phy)
-		return;
-
-	range = mt76_rr(dev, reg);
-	for (i = 0; i < 4; i++)
-		bound[i] = MT_AGG_ASRCR_RANGE(range, i) + 1;
-
-	range = mt76_rr(dev, reg + 4);
-	for (i = 0; i < 3; i++)
-		bound[i + 4] = MT_AGG_ASRCR_RANGE(range, i) + 1;
-
-	seq_printf(file, "\nPhy %d\n", ext_phy);
-
-	seq_printf(file, "Length: %8d | ", bound[0]);
-	for (i = 0; i < ARRAY_SIZE(bound) - 1; i++)
-		seq_printf(file, "%3d -%3d | ",
-			   bound[i], bound[i + 1]);
-	seq_puts(file, "\nCount:  ");
-
-	range = ext_phy ? ARRAY_SIZE(dev->mt76.aggr_stats) / 2 : 0;
-	for (i = 0; i < ARRAY_SIZE(bound); i++)
-		seq_printf(file, "%8d | ", dev->mt76.aggr_stats[i + range]);
-	seq_puts(file, "\n");
-
-	seq_printf(file, "BA miss count: %d\n", phy->mib.ba_miss_cnt);
-	seq_printf(file, "PER: %ld.%1ld%%\n",
-		   phy->mib.aggr_per / 10, phy->mib.aggr_per % 10);
-}
-
-static int
-mt7615_ampdu_stat_show(struct seq_file *file, void *data)
-{
-	struct mt7615_dev *dev = file->private;
-
-	mt7615_mutex_acquire(dev);
-
-	mt7615_ampdu_stat_read_phy(&dev->phy, file);
-	mt7615_ampdu_stat_read_phy(mt7615_ext_phy(dev), file);
-
-	mt7615_mutex_release(dev);
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7615_ampdu_stat);
-
-static void
-mt7615_radio_read_phy(struct mt7615_phy *phy, struct seq_file *s)
-{
-	struct mt7615_dev *dev = dev_get_drvdata(s->private);
-	bool ext_phy = phy != &dev->phy;
-
-	if (!phy)
-		return;
-
-	seq_printf(s, "Radio %d sensitivity: ofdm=%d cck=%d\n", ext_phy,
-		   phy->ofdm_sensitivity, phy->cck_sensitivity);
-	seq_printf(s, "Radio %d false CCA: ofdm=%d cck=%d\n", ext_phy,
-		   phy->false_cca_ofdm, phy->false_cca_cck);
-}
-
-static int
-mt7615_radio_read(struct seq_file *s, void *data)
-{
-	struct mt7615_dev *dev = dev_get_drvdata(s->private);
-
-	mt7615_radio_read_phy(&dev->phy, s);
-	mt7615_radio_read_phy(mt7615_ext_phy(dev), s);
-
-	return 0;
-}
-
-static int
-mt7615_queues_acq(struct seq_file *s, void *data)
-{
-	struct mt7615_dev *dev = dev_get_drvdata(s->private);
-	int i;
-
-	mt7615_mutex_acquire(dev);
-
-	for (i = 0; i < 16; i++) {
-		int j, wmm_idx = i % MT7615_MAX_WMM_SETS;
-		int acs = i / MT7615_MAX_WMM_SETS;
-		u32 ctrl, val, qlen = 0;
-
-		if (wmm_idx == 3 && is_mt7663(&dev->mt76))
-			continue;
-
-		val = mt76_rr(dev, MT_PLE_AC_QEMPTY(acs, wmm_idx));
-		ctrl = BIT(31) | BIT(15) | (acs << 8);
-
-		for (j = 0; j < 32; j++) {
-			if (val & BIT(j))
-				continue;
-
-			mt76_wr(dev, MT_PLE_FL_Q0_CTRL,
-				ctrl | (j + (wmm_idx << 5)));
-			qlen += mt76_get_field(dev, MT_PLE_FL_Q3_CTRL,
-					       GENMASK(11, 0));
-		}
-		seq_printf(s, "AC%d%d: queued=%d\n", wmm_idx, acs, qlen);
-	}
-
-	mt7615_mutex_release(dev);
-
-	return 0;
-}
-
-static int
-mt7615_queues_read(struct seq_file *s, void *data)
-{
-	struct mt7615_dev *dev = dev_get_drvdata(s->private);
-	struct {
-		struct mt76_queue *q;
-		char *queue;
-	} queue_map[] = {
-		{ dev->mphy.q_tx[MT_TXQ_BE], "PDMA0" },
-		{ dev->mt76.q_mcu[MT_MCUQ_WM], "MCUQ" },
-		{ dev->mt76.q_mcu[MT_MCUQ_FWDL], "MCUFWQ" },
-	};
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(queue_map); i++) {
-		struct mt76_queue *q = queue_map[i].q;
-
-		seq_printf(s,
-			   "%s:	queued=%d head=%d tail=%d\n",
-			   queue_map[i].queue, q->queued, q->head,
-			   q->tail);
-	}
-
-	return 0;
-}
-
-static int
-mt7615_rf_reg_set(void *data, u64 val)
-{
-	struct mt7615_dev *dev = data;
-
-	mt7615_rf_wr(dev, dev->debugfs_rf_wf, dev->debugfs_rf_reg, val);
-
-	return 0;
-}
-
-static int
-mt7615_rf_reg_get(void *data, u64 *val)
-{
-	struct mt7615_dev *dev = data;
-
-	*val = mt7615_rf_rr(dev, dev->debugfs_rf_wf, dev->debugfs_rf_reg);
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_rf_reg, mt7615_rf_reg_get, mt7615_rf_reg_set,
-			 "0x%08llx\n");
-
-static ssize_t
-mt7615_ext_mac_addr_read(struct file *file, char __user *userbuf,
-			 size_t count, loff_t *ppos)
-{
-	struct mt7615_dev *dev = file->private_data;
-	u32 len = 32 * ((ETH_ALEN * 3) + 4) + 1;
-	u8 addr[ETH_ALEN];
-	char *buf;
-	int ofs = 0;
-	int i;
-
-	buf = kzalloc(len, GFP_KERNEL);
-	if (!buf)
-		return -ENOMEM;
-
-	for (i = 0; i < 32; i++) {
-		if (!(dev->muar_mask & BIT(i)))
-			continue;
-
-		mt76_wr(dev, MT_WF_RMAC_MAR1,
-			FIELD_PREP(MT_WF_RMAC_MAR1_IDX, i * 2) |
-			MT_WF_RMAC_MAR1_START);
-		put_unaligned_le32(mt76_rr(dev, MT_WF_RMAC_MAR0), addr);
-		put_unaligned_le16((mt76_rr(dev, MT_WF_RMAC_MAR1) &
-				    MT_WF_RMAC_MAR1_ADDR), addr + 4);
-		ofs += snprintf(buf + ofs, len - ofs, "%d=%pM\n", i, addr);
-	}
-
-	ofs = simple_read_from_buffer(userbuf, count, ppos, buf, ofs);
-
-	kfree(buf);
-	return ofs;
-}
-
-static ssize_t
-mt7615_ext_mac_addr_write(struct file *file, const char __user *userbuf,
-			  size_t count, loff_t *ppos)
-{
-	struct mt7615_dev *dev = file->private_data;
-	unsigned long idx = 0;
-	u8 addr[ETH_ALEN];
-	char buf[32];
-	char *p;
-
-	if (count > sizeof(buf))
-		return -EINVAL;
-
-	if (copy_from_user(buf, userbuf, count))
-		return -EFAULT;
-
-	buf[sizeof(buf) - 1] = '\0';
-
-	p = strchr(buf, '=');
-	if (p) {
-		*p = 0;
-		p++;
-
-		if (kstrtoul(buf, 0, &idx) || idx > 31)
-			return -EINVAL;
-	} else {
-		idx = 0;
-		p = buf;
-	}
-
-	if (!mac_pton(p, addr))
-		return -EINVAL;
-
-	if (is_valid_ether_addr(addr)) {
-		dev->muar_mask |= BIT(idx);
-	} else {
-		memset(addr, 0, sizeof(addr));
-		dev->muar_mask &= ~BIT(idx);
-	}
-
-	mt76_rmw_field(dev, MT_WF_RMAC_MORE(0), MT_WF_RMAC_MORE_MUAR_MODE, 1);
-	mt76_wr(dev, MT_WF_RMAC_MAR0, get_unaligned_le32(addr));
-	mt76_wr(dev, MT_WF_RMAC_MAR1,
-		get_unaligned_le16(addr + 4) |
-		FIELD_PREP(MT_WF_RMAC_MAR1_IDX, idx * 2) |
-		MT_WF_RMAC_MAR1_START |
-		MT_WF_RMAC_MAR1_WRITE);
-
-	mt76_rmw_field(dev, MT_WF_RMAC_MORE(0), MT_WF_RMAC_MORE_MUAR_MODE, !!dev->muar_mask);
-
-	return count;
-}
-
-static const struct file_operations fops_ext_mac_addr = {
-	.open = simple_open,
-	.llseek = generic_file_llseek,
-	.read = mt7615_ext_mac_addr_read,
-	.write = mt7615_ext_mac_addr_write,
-	.owner = THIS_MODULE,
-};
-
-static int
-mt7663s_sched_quota_read(struct seq_file *s, void *data)
-{
-	struct mt7615_dev *dev = dev_get_drvdata(s->private);
-	struct mt76_sdio *sdio = &dev->mt76.sdio;
-
-	seq_printf(s, "pse_data_quota\t%d\n", sdio->sched.pse_data_quota);
-	seq_printf(s, "ple_data_quota\t%d\n", sdio->sched.ple_data_quota);
-	seq_printf(s, "pse_mcu_quota\t%d\n", sdio->sched.pse_mcu_quota);
-	seq_printf(s, "sched_deficit\t%d\n", sdio->sched.deficit);
-
-	return 0;
-}
-
-int mt7615_init_debugfs(struct mt7615_dev *dev)
-{
-	struct dentry *dir;
-
-	dir = mt76_register_debugfs_fops(&dev->mphy, &fops_regval);
-	if (!dir)
-		return -ENOMEM;
-
-	if (is_mt7615(&dev->mt76))
-		debugfs_create_devm_seqfile(dev->mt76.dev, "xmit-queues", dir,
-					    mt7615_queues_read);
-	else
-		debugfs_create_devm_seqfile(dev->mt76.dev, "xmit-queues", dir,
-					    mt76_queues_read);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "acq", dir,
-				    mt7615_queues_acq);
-	debugfs_create_file("ampdu_stat", 0400, dir, dev, &mt7615_ampdu_stat_fops);
-	debugfs_create_file("scs", 0600, dir, dev, &fops_scs);
-	debugfs_create_file("dbdc", 0600, dir, dev, &fops_dbdc);
-	debugfs_create_file("fw_debug", 0600, dir, dev, &fops_fw_debug);
-	debugfs_create_file("runtime-pm", 0600, dir, dev, &fops_pm);
-	debugfs_create_file("idle-timeout", 0600, dir, dev,
-			    &fops_pm_idle_timeout);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "runtime_pm_stats", dir,
-				    mt7615_pm_stats);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "radio", dir,
-				    mt7615_radio_read);
-
-	if (is_mt7615(&dev->mt76)) {
-		debugfs_create_u32("dfs_hw_pattern", 0400, dir,
-				   &dev->hw_pattern);
-		/* test pattern knobs */
-		debugfs_create_u8("pattern_len", 0600, dir,
-				  &dev->radar_pattern.n_pulses);
-		debugfs_create_u32("pulse_period", 0600, dir,
-				   &dev->radar_pattern.period);
-		debugfs_create_u16("pulse_width", 0600, dir,
-				   &dev->radar_pattern.width);
-		debugfs_create_u16("pulse_power", 0600, dir,
-				   &dev->radar_pattern.power);
-		debugfs_create_file("radar_trigger", 0200, dir, dev,
-				    &fops_radar_pattern);
-	}
-
-	debugfs_create_file("reset_test", 0200, dir, dev,
-			    &fops_reset_test);
-	debugfs_create_file("ext_mac_addr", 0600, dir, dev, &fops_ext_mac_addr);
-
-	debugfs_create_u32("rf_wfidx", 0600, dir, &dev->debugfs_rf_wf);
-	debugfs_create_u32("rf_regidx", 0600, dir, &dev->debugfs_rf_reg);
-	debugfs_create_file_unsafe("rf_regval", 0600, dir, dev,
-				   &fops_rf_reg);
-	if (is_mt7663(&dev->mt76))
-		debugfs_create_file("chip_config", 0600, dir, dev,
-				    &fops_config);
-	if (mt76_is_sdio(&dev->mt76))
-		debugfs_create_devm_seqfile(dev->mt76.dev, "sched-quota", dir,
-					    mt7663s_sched_quota_read);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt7615_init_debugfs);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/dma.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/dma.c
deleted file mode 100644
index ec729db..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/dma.c
+++ /dev/null
@@ -1,315 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2019 MediaTek Inc.
- *
- * Author: Ryder Lee <ryder.lee@mediatek.com>
- *         Roy Luo <royluo@google.com>
- *         Lorenzo Bianconi <lorenzo@kernel.org>
- *         Felix Fietkau <nbd@nbd.name>
- */
-
-#include "mt7615.h"
-#include "../dma.h"
-#include "mac.h"
-
-static int
-mt7622_init_tx_queues_multi(struct mt7615_dev *dev)
-{
-	static const u8 wmm_queue_map[] = {
-		[IEEE80211_AC_BK] = MT7622_TXQ_AC0,
-		[IEEE80211_AC_BE] = MT7622_TXQ_AC1,
-		[IEEE80211_AC_VI] = MT7622_TXQ_AC2,
-		[IEEE80211_AC_VO] = MT7622_TXQ_AC3,
-	};
-	int ret;
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(wmm_queue_map); i++) {
-		ret = mt76_init_tx_queue(&dev->mphy, i, wmm_queue_map[i],
-					 MT7615_TX_RING_SIZE / 2,
-					 MT_TX_RING_BASE, 0);
-		if (ret)
-			return ret;
-	}
-
-	ret = mt76_init_tx_queue(&dev->mphy, MT_TXQ_PSD, MT7622_TXQ_MGMT,
-				 MT7615_TX_MGMT_RING_SIZE,
-				 MT_TX_RING_BASE, 0);
-	if (ret)
-		return ret;
-
-	return mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WM, MT7622_TXQ_MCU,
-				   MT7615_TX_MCU_RING_SIZE, MT_TX_RING_BASE);
-}
-
-static int
-mt7615_init_tx_queues(struct mt7615_dev *dev)
-{
-	int ret;
-
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_FWDL, MT7615_TXQ_FWDL,
-				  MT7615_TX_FWDL_RING_SIZE, MT_TX_RING_BASE);
-	if (ret)
-		return ret;
-
-	if (!is_mt7615(&dev->mt76))
-		return mt7622_init_tx_queues_multi(dev);
-
-	ret = mt76_connac_init_tx_queues(&dev->mphy, 0, MT7615_TX_RING_SIZE,
-					 MT_TX_RING_BASE, 0);
-	if (ret)
-		return ret;
-
-	return mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WM, MT7615_TXQ_MCU,
-				   MT7615_TX_MCU_RING_SIZE, MT_TX_RING_BASE);
-}
-
-static int mt7615_poll_tx(struct napi_struct *napi, int budget)
-{
-	struct mt7615_dev *dev;
-
-	dev = container_of(napi, struct mt7615_dev, mt76.tx_napi);
-	if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) {
-		napi_complete(napi);
-		queue_work(dev->mt76.wq, &dev->pm.wake_work);
-		return 0;
-	}
-
-	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], false);
-	if (napi_complete(napi))
-		mt7615_irq_enable(dev, mt7615_tx_mcu_int_mask(dev));
-
-	mt76_connac_pm_unref(&dev->mphy, &dev->pm);
-
-	return 0;
-}
-
-static int mt7615_poll_rx(struct napi_struct *napi, int budget)
-{
-	struct mt7615_dev *dev;
-	int done;
-
-	dev = container_of(napi->dev, struct mt7615_dev, mt76.napi_dev);
-
-	if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) {
-		napi_complete(napi);
-		queue_work(dev->mt76.wq, &dev->pm.wake_work);
-		return 0;
-	}
-	done = mt76_dma_rx_poll(napi, budget);
-	mt76_connac_pm_unref(&dev->mphy, &dev->pm);
-
-	return done;
-}
-
-int mt7615_wait_pdma_busy(struct mt7615_dev *dev)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-
-	if (!is_mt7663(mdev)) {
-		u32 mask = MT_PDMA_TX_BUSY | MT_PDMA_RX_BUSY;
-		u32 reg = mt7615_reg_map(dev, MT_PDMA_BUSY);
-
-		if (!mt76_poll_msec(dev, reg, mask, 0, 1000)) {
-			dev_err(mdev->dev, "PDMA engine busy\n");
-			return -EIO;
-		}
-
-		return 0;
-	}
-
-	if (!mt76_poll_msec(dev, MT_PDMA_BUSY_STATUS,
-			    MT_PDMA_TX_IDX_BUSY, 0, 1000)) {
-		dev_err(mdev->dev, "PDMA engine tx busy\n");
-		return -EIO;
-	}
-
-	if (!mt76_poll_msec(dev, MT_PSE_PG_INFO,
-			    MT_PSE_SRC_CNT, 0, 1000)) {
-		dev_err(mdev->dev, "PSE engine busy\n");
-		return -EIO;
-	}
-
-	if (!mt76_poll_msec(dev, MT_PDMA_BUSY_STATUS,
-			    MT_PDMA_BUSY_IDX, 0, 1000)) {
-		dev_err(mdev->dev, "PDMA engine busy\n");
-		return -EIO;
-	}
-
-	return 0;
-}
-
-static void mt7622_dma_sched_init(struct mt7615_dev *dev)
-{
-	u32 reg = mt7615_reg_map(dev, MT_DMASHDL_BASE);
-	int i;
-
-	mt76_rmw(dev, reg + MT_DMASHDL_PKT_MAX_SIZE,
-		 MT_DMASHDL_PKT_MAX_SIZE_PLE | MT_DMASHDL_PKT_MAX_SIZE_PSE,
-		 FIELD_PREP(MT_DMASHDL_PKT_MAX_SIZE_PLE, 1) |
-		 FIELD_PREP(MT_DMASHDL_PKT_MAX_SIZE_PSE, 8));
-
-	for (i = 0; i <= 5; i++)
-		mt76_wr(dev, reg + MT_DMASHDL_GROUP_QUOTA(i),
-			FIELD_PREP(MT_DMASHDL_GROUP_QUOTA_MIN, 0x10) |
-			FIELD_PREP(MT_DMASHDL_GROUP_QUOTA_MAX, 0x800));
-
-	mt76_wr(dev, reg + MT_DMASHDL_Q_MAP(0), 0x42104210);
-	mt76_wr(dev, reg + MT_DMASHDL_Q_MAP(1), 0x42104210);
-	mt76_wr(dev, reg + MT_DMASHDL_Q_MAP(2), 0x5);
-	mt76_wr(dev, reg + MT_DMASHDL_Q_MAP(3), 0);
-
-	mt76_wr(dev, reg + MT_DMASHDL_SCHED_SET0, 0x6012345f);
-	mt76_wr(dev, reg + MT_DMASHDL_SCHED_SET1, 0xedcba987);
-}
-
-static void mt7663_dma_sched_init(struct mt7615_dev *dev)
-{
-	int i;
-
-	mt76_rmw(dev, MT_DMA_SHDL(MT_DMASHDL_PKT_MAX_SIZE),
-		 MT_DMASHDL_PKT_MAX_SIZE_PLE | MT_DMASHDL_PKT_MAX_SIZE_PSE,
-		 FIELD_PREP(MT_DMASHDL_PKT_MAX_SIZE_PLE, 1) |
-		 FIELD_PREP(MT_DMASHDL_PKT_MAX_SIZE_PSE, 8));
-
-	/* enable refill control group 0, 1, 2, 4, 5 */
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_REFILL), 0xffc80000);
-	/* enable group 0, 1, 2, 4, 5, 15 */
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_OPTIONAL), 0x70068037);
-
-	/* each group min quota must larger then PLE_PKT_MAX_SIZE_NUM */
-	for (i = 0; i < 5; i++)
-		mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_GROUP_QUOTA(i)),
-			FIELD_PREP(MT_DMASHDL_GROUP_QUOTA_MIN, 0x40) |
-			FIELD_PREP(MT_DMASHDL_GROUP_QUOTA_MAX, 0x800));
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_GROUP_QUOTA(5)),
-		FIELD_PREP(MT_DMASHDL_GROUP_QUOTA_MIN, 0x40) |
-		FIELD_PREP(MT_DMASHDL_GROUP_QUOTA_MAX, 0x40));
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_GROUP_QUOTA(15)),
-		FIELD_PREP(MT_DMASHDL_GROUP_QUOTA_MIN, 0x20) |
-		FIELD_PREP(MT_DMASHDL_GROUP_QUOTA_MAX, 0x20));
-
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_Q_MAP(0)), 0x42104210);
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_Q_MAP(1)), 0x42104210);
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_Q_MAP(2)), 0x00050005);
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_Q_MAP(3)), 0);
-	/* ALTX0 and ALTX1 QID mapping to group 5 */
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_SCHED_SET0), 0x6012345f);
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_SCHED_SET1), 0xedcba987);
-}
-
-void mt7615_dma_start(struct mt7615_dev *dev)
-{
-	/* start dma engine */
-	mt76_set(dev, MT_WPDMA_GLO_CFG,
-		 MT_WPDMA_GLO_CFG_TX_DMA_EN |
-		 MT_WPDMA_GLO_CFG_RX_DMA_EN |
-		 MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE);
-
-	if (is_mt7622(&dev->mt76))
-		mt7622_dma_sched_init(dev);
-
-	if (is_mt7663(&dev->mt76)) {
-		mt7663_dma_sched_init(dev);
-
-		mt76_wr(dev, MT_MCU2HOST_INT_ENABLE, MT7663_MCU_CMD_ERROR_MASK);
-	}
-
-}
-
-int mt7615_dma_init(struct mt7615_dev *dev)
-{
-	int rx_ring_size = MT7615_RX_RING_SIZE;
-	u32 mask;
-	int ret;
-
-	mt76_dma_attach(&dev->mt76);
-
-	mt76_wr(dev, MT_WPDMA_GLO_CFG,
-		MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE |
-		MT_WPDMA_GLO_CFG_FIFO_LITTLE_ENDIAN |
-		MT_WPDMA_GLO_CFG_OMIT_TX_INFO);
-
-	mt76_rmw_field(dev, MT_WPDMA_GLO_CFG,
-		       MT_WPDMA_GLO_CFG_TX_BT_SIZE_BIT0, 0x1);
-
-	mt76_rmw_field(dev, MT_WPDMA_GLO_CFG,
-		       MT_WPDMA_GLO_CFG_TX_BT_SIZE_BIT21, 0x1);
-
-	mt76_rmw_field(dev, MT_WPDMA_GLO_CFG,
-		       MT_WPDMA_GLO_CFG_DMA_BURST_SIZE, 0x3);
-
-	mt76_rmw_field(dev, MT_WPDMA_GLO_CFG,
-		       MT_WPDMA_GLO_CFG_MULTI_DMA_EN, 0x3);
-
-	if (is_mt7615(&dev->mt76)) {
-		mt76_set(dev, MT_WPDMA_GLO_CFG,
-			 MT_WPDMA_GLO_CFG_FIRST_TOKEN_ONLY);
-
-		mt76_wr(dev, MT_WPDMA_GLO_CFG1, 0x1);
-		mt76_wr(dev, MT_WPDMA_TX_PRE_CFG, 0xf0000);
-		mt76_wr(dev, MT_WPDMA_RX_PRE_CFG, 0xf7f0000);
-		mt76_wr(dev, MT_WPDMA_ABT_CFG, 0x4000026);
-		mt76_wr(dev, MT_WPDMA_ABT_CFG1, 0x18811881);
-		mt76_set(dev, 0x7158, BIT(16));
-		mt76_clear(dev, 0x7000, BIT(23));
-	}
-
-	mt76_wr(dev, MT_WPDMA_RST_IDX, ~0);
-
-	ret = mt7615_init_tx_queues(dev);
-	if (ret)
-		return ret;
-
-	/* init rx queues */
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU], 1,
-			       MT7615_RX_MCU_RING_SIZE, MT_RX_BUF_SIZE,
-			       MT_RX_RING_BASE);
-	if (ret)
-		return ret;
-
-	if (!is_mt7615(&dev->mt76))
-	    rx_ring_size /= 2;
-
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN], 0,
-			       rx_ring_size, MT_RX_BUF_SIZE, MT_RX_RING_BASE);
-	if (ret)
-		return ret;
-
-	mt76_wr(dev, MT_DELAY_INT_CFG, 0);
-
-	ret = mt76_init_queues(dev, mt7615_poll_rx);
-	if (ret < 0)
-		return ret;
-
-	netif_tx_napi_add(&dev->mt76.tx_napi_dev, &dev->mt76.tx_napi,
-			  mt7615_poll_tx, NAPI_POLL_WEIGHT);
-	napi_enable(&dev->mt76.tx_napi);
-
-	mt76_poll(dev, MT_WPDMA_GLO_CFG,
-		  MT_WPDMA_GLO_CFG_TX_DMA_BUSY |
-		  MT_WPDMA_GLO_CFG_RX_DMA_BUSY, 0, 1000);
-
-	/* enable interrupts for TX/RX rings */
-
-	mask = MT_INT_RX_DONE_ALL | mt7615_tx_mcu_int_mask(dev);
-	if (is_mt7663(&dev->mt76))
-	    mask |= MT7663_INT_MCU_CMD;
-	else
-	    mask |= MT_INT_MCU_CMD;
-
-	mt7615_irq_enable(dev, mask);
-
-	mt7615_dma_start(dev);
-
-	return 0;
-}
-
-void mt7615_dma_cleanup(struct mt7615_dev *dev)
-{
-	mt76_clear(dev, MT_WPDMA_GLO_CFG,
-		   MT_WPDMA_GLO_CFG_TX_DMA_EN |
-		   MT_WPDMA_GLO_CFG_RX_DMA_EN);
-	mt76_set(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_SW_RESET);
-
-	mt76_dma_cleanup(&dev->mt76);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/eeprom.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/eeprom.c
deleted file mode 100644
index 6dbaaf9..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/eeprom.c
+++ /dev/null
@@ -1,353 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2019 MediaTek Inc.
- *
- * Author: Ryder Lee <ryder.lee@mediatek.com>
- *         Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/of.h>
-#include "mt7615.h"
-#include "eeprom.h"
-
-static int mt7615_efuse_read(struct mt7615_dev *dev, u32 base,
-			     u16 addr, u8 *data)
-{
-	u32 val;
-	int i;
-
-	val = mt76_rr(dev, base + MT_EFUSE_CTRL);
-	val &= ~(MT_EFUSE_CTRL_AIN | MT_EFUSE_CTRL_MODE);
-	val |= FIELD_PREP(MT_EFUSE_CTRL_AIN, addr & ~0xf);
-	val |= MT_EFUSE_CTRL_KICK;
-	mt76_wr(dev, base + MT_EFUSE_CTRL, val);
-
-	if (!mt76_poll(dev, base + MT_EFUSE_CTRL, MT_EFUSE_CTRL_KICK, 0, 1000))
-		return -ETIMEDOUT;
-
-	udelay(2);
-
-	val = mt76_rr(dev, base + MT_EFUSE_CTRL);
-	if ((val & MT_EFUSE_CTRL_AOUT) == MT_EFUSE_CTRL_AOUT ||
-	    WARN_ON_ONCE(!(val & MT_EFUSE_CTRL_VALID))) {
-		memset(data, 0x0, 16);
-		return 0;
-	}
-
-	for (i = 0; i < 4; i++) {
-		val = mt76_rr(dev, base + MT_EFUSE_RDATA(i));
-		put_unaligned_le32(val, data + 4 * i);
-	}
-
-	return 0;
-}
-
-static int mt7615_efuse_init(struct mt7615_dev *dev, u32 base)
-{
-	int i, len = MT7615_EEPROM_SIZE;
-	void *buf;
-	u32 val;
-
-	val = mt76_rr(dev, base + MT_EFUSE_BASE_CTRL);
-	if (val & MT_EFUSE_BASE_CTRL_EMPTY)
-		return 0;
-
-	dev->mt76.otp.data = devm_kzalloc(dev->mt76.dev, len, GFP_KERNEL);
-	dev->mt76.otp.size = len;
-	if (!dev->mt76.otp.data)
-		return -ENOMEM;
-
-	buf = dev->mt76.otp.data;
-	for (i = 0; i + 16 <= len; i += 16) {
-		int ret;
-
-		ret = mt7615_efuse_read(dev, base, i, buf + i);
-		if (ret)
-			return ret;
-	}
-
-	return 0;
-}
-
-static int mt7615_eeprom_load(struct mt7615_dev *dev, u32 addr)
-{
-	int ret;
-
-	ret = mt76_eeprom_init(&dev->mt76, MT7615_EEPROM_FULL_SIZE);
-	if (ret < 0)
-		return ret;
-
-	return mt7615_efuse_init(dev, addr);
-}
-
-static int mt7615_check_eeprom(struct mt76_dev *dev)
-{
-	u16 val = get_unaligned_le16(dev->eeprom.data);
-
-	switch (val) {
-	case 0x7615:
-	case 0x7622:
-	case 0x7663:
-		return 0;
-	default:
-		return -EINVAL;
-	}
-}
-
-static void
-mt7615_eeprom_parse_hw_band_cap(struct mt7615_dev *dev)
-{
-	u8 val, *eeprom = dev->mt76.eeprom.data;
-
-	if (is_mt7663(&dev->mt76)) {
-		/* dual band */
-		dev->mphy.cap.has_2ghz = true;
-		dev->mphy.cap.has_5ghz = true;
-		return;
-	}
-
-	if (is_mt7622(&dev->mt76)) {
-		/* 2GHz only */
-		dev->mphy.cap.has_2ghz = true;
-		return;
-	}
-
-	if (is_mt7611(&dev->mt76)) {
-		/* 5GHz only */
-		dev->mphy.cap.has_5ghz = true;
-		return;
-	}
-
-	val = FIELD_GET(MT_EE_NIC_WIFI_CONF_BAND_SEL,
-			eeprom[MT_EE_WIFI_CONF]);
-	switch (val) {
-	case MT_EE_5GHZ:
-		dev->mphy.cap.has_5ghz = true;
-		break;
-	case MT_EE_2GHZ:
-		dev->mphy.cap.has_2ghz = true;
-		break;
-	case MT_EE_DBDC:
-		dev->dbdc_support = true;
-		fallthrough;
-	default:
-		dev->mphy.cap.has_2ghz = true;
-		dev->mphy.cap.has_5ghz = true;
-		break;
-	}
-}
-
-static void mt7615_eeprom_parse_hw_cap(struct mt7615_dev *dev)
-{
-	u8 *eeprom = dev->mt76.eeprom.data;
-	u8 tx_mask, max_nss;
-
-	mt7615_eeprom_parse_hw_band_cap(dev);
-
-	if (is_mt7663(&dev->mt76)) {
-		max_nss = 2;
-		tx_mask = FIELD_GET(MT_EE_HW_CONF1_TX_MASK,
-				    eeprom[MT7663_EE_HW_CONF1]);
-	} else {
-		u32 val;
-
-		/* read tx-rx mask from eeprom */
-		val = mt76_rr(dev, MT_TOP_STRAP_STA);
-		max_nss = val & MT_TOP_3NSS ? 3 : 4;
-
-		tx_mask =  FIELD_GET(MT_EE_NIC_CONF_TX_MASK,
-				     eeprom[MT_EE_NIC_CONF_0]);
-	}
-	if (!tx_mask || tx_mask > max_nss)
-		tx_mask = max_nss;
-
-	dev->chainmask = BIT(tx_mask) - 1;
-	dev->mphy.antenna_mask = dev->chainmask;
-	dev->mphy.chainmask = dev->chainmask;
-}
-
-static int mt7663_eeprom_get_target_power_index(struct mt7615_dev *dev,
-						struct ieee80211_channel *chan,
-						u8 chain_idx)
-{
-	int index, group;
-
-	if (chain_idx > 1)
-		return -EINVAL;
-
-	if (chan->band == NL80211_BAND_2GHZ)
-		return MT7663_EE_TX0_2G_TARGET_POWER + (chain_idx << 4);
-
-	group = mt7615_get_channel_group(chan->hw_value);
-	if (chain_idx == 1)
-		index = MT7663_EE_TX1_5G_G0_TARGET_POWER;
-	else
-		index = MT7663_EE_TX0_5G_G0_TARGET_POWER;
-
-	return index + group * 3;
-}
-
-int mt7615_eeprom_get_target_power_index(struct mt7615_dev *dev,
-					 struct ieee80211_channel *chan,
-					 u8 chain_idx)
-{
-	int index;
-
-	if (is_mt7663(&dev->mt76))
-		return mt7663_eeprom_get_target_power_index(dev, chan,
-							    chain_idx);
-
-	if (chain_idx > 3)
-		return -EINVAL;
-
-	/* TSSI disabled */
-	if (mt7615_ext_pa_enabled(dev, chan->band)) {
-		if (chan->band == NL80211_BAND_2GHZ)
-			return MT_EE_EXT_PA_2G_TARGET_POWER;
-		else
-			return MT_EE_EXT_PA_5G_TARGET_POWER;
-	}
-
-	/* TSSI enabled */
-	if (chan->band == NL80211_BAND_2GHZ) {
-		index = MT_EE_TX0_2G_TARGET_POWER + chain_idx * 6;
-	} else {
-		int group = mt7615_get_channel_group(chan->hw_value);
-
-		switch (chain_idx) {
-		case 1:
-			index = MT_EE_TX1_5G_G0_TARGET_POWER;
-			break;
-		case 2:
-			index = MT_EE_TX2_5G_G0_TARGET_POWER;
-			break;
-		case 3:
-			index = MT_EE_TX3_5G_G0_TARGET_POWER;
-			break;
-		case 0:
-		default:
-			index = MT_EE_TX0_5G_G0_TARGET_POWER;
-			break;
-		}
-		index += 5 * group;
-	}
-
-	return index;
-}
-
-int mt7615_eeprom_get_power_delta_index(struct mt7615_dev *dev,
-					enum nl80211_band band)
-{
-	/* assume the first rate has the highest power offset */
-	if (is_mt7663(&dev->mt76)) {
-		if (band == NL80211_BAND_2GHZ)
-			return MT_EE_TX0_5G_G0_TARGET_POWER;
-		else
-			return MT7663_EE_5G_RATE_POWER;
-	}
-
-	if (band == NL80211_BAND_2GHZ)
-		return MT_EE_2G_RATE_POWER;
-	else
-		return MT_EE_5G_RATE_POWER;
-}
-
-static void mt7615_apply_cal_free_data(struct mt7615_dev *dev)
-{
-	static const u16 ical[] = {
-		0x53, 0x54, 0x55, 0x56, 0x57, 0x5c, 0x5d, 0x62, 0x63, 0x68,
-		0x69, 0x6e, 0x6f, 0x73, 0x74, 0x78, 0x79, 0x82, 0x83, 0x87,
-		0x88, 0x8c, 0x8d, 0x91, 0x92, 0x96, 0x97, 0x9b, 0x9c, 0xa0,
-		0xa1, 0xaa, 0xab, 0xaf, 0xb0, 0xb4, 0xb5, 0xb9, 0xba, 0xf4,
-		0xf7, 0xff,
-		0x140, 0x141, 0x145, 0x146, 0x14a, 0x14b, 0x154, 0x155, 0x159,
-		0x15a, 0x15e, 0x15f, 0x163, 0x164, 0x168, 0x169, 0x16d, 0x16e,
-		0x172, 0x173, 0x17c, 0x17d, 0x181, 0x182, 0x186, 0x187, 0x18b,
-		0x18c
-	};
-	static const u16 ical_nocheck[] = {
-		0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, 0x118,
-		0x1b5, 0x1b6, 0x1b7, 0x3ac, 0x3ad, 0x3ae, 0x3af, 0x3b0, 0x3b1,
-		0x3b2
-	};
-	u8 *eeprom = dev->mt76.eeprom.data;
-	u8 *otp = dev->mt76.otp.data;
-	int i;
-
-	if (!otp)
-		return;
-
-	for (i = 0; i < ARRAY_SIZE(ical); i++)
-		if (!otp[ical[i]])
-			return;
-
-	for (i = 0; i < ARRAY_SIZE(ical); i++)
-		eeprom[ical[i]] = otp[ical[i]];
-
-	for (i = 0; i < ARRAY_SIZE(ical_nocheck); i++)
-		eeprom[ical_nocheck[i]] = otp[ical_nocheck[i]];
-}
-
-static void mt7622_apply_cal_free_data(struct mt7615_dev *dev)
-{
-	static const u16 ical[] = {
-		0x53, 0x54, 0x55, 0x56, 0xf4, 0xf7, 0x144, 0x156, 0x15b
-	};
-	u8 *eeprom = dev->mt76.eeprom.data;
-	u8 *otp = dev->mt76.otp.data;
-	int i;
-
-	if (!otp)
-		return;
-
-	for (i = 0; i < ARRAY_SIZE(ical); i++) {
-		if (!otp[ical[i]])
-			continue;
-
-		eeprom[ical[i]] = otp[ical[i]];
-	}
-}
-
-static void mt7615_cal_free_data(struct mt7615_dev *dev)
-{
-	struct device_node *np = dev->mt76.dev->of_node;
-
-	if (!np || !of_property_read_bool(np, "mediatek,eeprom-merge-otp"))
-		return;
-
-	switch (mt76_chip(&dev->mt76)) {
-	case 0x7622:
-		mt7622_apply_cal_free_data(dev);
-		break;
-	case 0x7615:
-	case 0x7611:
-		mt7615_apply_cal_free_data(dev);
-		break;
-	}
-}
-
-int mt7615_eeprom_init(struct mt7615_dev *dev, u32 addr)
-{
-	int ret;
-
-	ret = mt7615_eeprom_load(dev, addr);
-	if (ret < 0)
-		return ret;
-
-	ret = mt7615_check_eeprom(&dev->mt76);
-	if (ret && dev->mt76.otp.data) {
-		memcpy(dev->mt76.eeprom.data, dev->mt76.otp.data,
-		       MT7615_EEPROM_SIZE);
-	} else {
-		dev->flash_eeprom = true;
-		mt7615_cal_free_data(dev);
-	}
-
-	mt7615_eeprom_parse_hw_cap(dev);
-	memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
-	       ETH_ALEN);
-
-	mt76_eeprom_override(&dev->mphy);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt7615_eeprom_init);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/eeprom.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/eeprom.h
deleted file mode 100644
index a024dee..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/eeprom.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2019 MediaTek Inc. */
-
-#ifndef __MT7615_EEPROM_H
-#define __MT7615_EEPROM_H
-
-#include "mt7615.h"
-
-
-#define MT7615_EEPROM_DCOC_OFFSET		MT7615_EEPROM_SIZE
-#define MT7615_EEPROM_DCOC_SIZE			256
-#define MT7615_EEPROM_DCOC_COUNT		34
-
-#define MT7615_EEPROM_TXDPD_OFFSET		(MT7615_EEPROM_SIZE + \
-						 MT7615_EEPROM_DCOC_COUNT * \
-						 MT7615_EEPROM_DCOC_SIZE)
-#define MT7615_EEPROM_TXDPD_SIZE		216
-#define MT7615_EEPROM_TXDPD_COUNT		(44 + 3)
-
-#define MT7615_EEPROM_FULL_SIZE			(MT7615_EEPROM_TXDPD_OFFSET + \
-						 MT7615_EEPROM_TXDPD_COUNT * \
-						 MT7615_EEPROM_TXDPD_SIZE)
-
-enum mt7615_eeprom_field {
-	MT_EE_CHIP_ID =				0x000,
-	MT_EE_VERSION =				0x002,
-	MT_EE_MAC_ADDR =			0x004,
-	MT_EE_NIC_CONF_0 =			0x034,
-	MT_EE_NIC_CONF_1 =			0x036,
-	MT_EE_WIFI_CONF =			0x03e,
-	MT_EE_CALDATA_FLASH =			0x052,
-	MT_EE_TX0_2G_TARGET_POWER =		0x058,
-	MT_EE_TX0_5G_G0_TARGET_POWER =		0x070,
-	MT7663_EE_5G_RATE_POWER =		0x089,
-	MT_EE_TX1_5G_G0_TARGET_POWER =		0x098,
-	MT_EE_2G_RATE_POWER =			0x0be,
-	MT_EE_5G_RATE_POWER =			0x0d5,
-	MT7663_EE_TX0_2G_TARGET_POWER =		0x0e3,
-	MT_EE_EXT_PA_2G_TARGET_POWER =		0x0f2,
-	MT_EE_EXT_PA_5G_TARGET_POWER =		0x0f3,
-	MT_EE_TX2_5G_G0_TARGET_POWER =		0x142,
-	MT_EE_TX3_5G_G0_TARGET_POWER =		0x16a,
-	MT7663_EE_HW_CONF1 =			0x1b0,
-	MT7663_EE_TX0_5G_G0_TARGET_POWER =	0x245,
-	MT7663_EE_TX1_5G_G0_TARGET_POWER =	0x2b5,
-
-	MT7615_EE_MAX =				0x3bf,
-	MT7622_EE_MAX =				0x3db,
-	MT7663_EE_MAX =				0x400,
-};
-
-#define MT_EE_RATE_POWER_MASK			GENMASK(5, 0)
-#define MT_EE_RATE_POWER_SIGN			BIT(6)
-#define MT_EE_RATE_POWER_EN			BIT(7)
-
-#define MT_EE_CALDATA_FLASH_TX_DPD		BIT(0)
-#define MT_EE_CALDATA_FLASH_RX_CAL		BIT(1)
-
-#define MT_EE_NIC_CONF_TX_MASK			GENMASK(7, 4)
-#define MT_EE_NIC_CONF_RX_MASK			GENMASK(3, 0)
-
-#define MT_EE_HW_CONF1_TX_MASK			GENMASK(2, 0)
-
-#define MT_EE_NIC_CONF_TSSI_2G			BIT(5)
-#define MT_EE_NIC_CONF_TSSI_5G			BIT(6)
-
-#define MT_EE_NIC_WIFI_CONF_BAND_SEL		GENMASK(5, 4)
-enum mt7615_eeprom_band {
-	MT_EE_DUAL_BAND,
-	MT_EE_5GHZ,
-	MT_EE_2GHZ,
-	MT_EE_DBDC,
-};
-
-enum mt7615_channel_group {
-	MT_CH_5G_JAPAN,
-	MT_CH_5G_UNII_1,
-	MT_CH_5G_UNII_2A,
-	MT_CH_5G_UNII_2B,
-	MT_CH_5G_UNII_2E_1,
-	MT_CH_5G_UNII_2E_2,
-	MT_CH_5G_UNII_2E_3,
-	MT_CH_5G_UNII_3,
-	__MT_CH_MAX
-};
-
-static inline enum mt7615_channel_group
-mt7615_get_channel_group(int channel)
-{
-	if (channel >= 184 && channel <= 196)
-		return MT_CH_5G_JAPAN;
-	if (channel <= 48)
-		return MT_CH_5G_UNII_1;
-	if (channel <= 64)
-		return MT_CH_5G_UNII_2A;
-	if (channel <= 114)
-		return MT_CH_5G_UNII_2E_1;
-	if (channel <= 144)
-		return MT_CH_5G_UNII_2E_2;
-	if (channel <= 161)
-		return MT_CH_5G_UNII_2E_3;
-	return MT_CH_5G_UNII_3;
-}
-
-static inline bool
-mt7615_ext_pa_enabled(struct mt7615_dev *dev, enum nl80211_band band)
-{
-	u8 *eep = dev->mt76.eeprom.data;
-
-	if (band == NL80211_BAND_5GHZ)
-		return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_5G);
-	else
-		return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_2G);
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/init.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/init.c
deleted file mode 100644
index 07a1fea..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/init.c
+++ /dev/null
@@ -1,561 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2019 MediaTek Inc.
- *
- * Author: Roy Luo <royluo@google.com>
- *         Ryder Lee <ryder.lee@mediatek.com>
- *         Felix Fietkau <nbd@nbd.name>
- *         Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#include <linux/etherdevice.h>
-#include <linux/hwmon.h>
-#include <linux/hwmon-sysfs.h>
-#include "mt7615.h"
-#include "mac.h"
-#include "mcu.h"
-#include "eeprom.h"
-
-static ssize_t mt7615_thermal_show_temp(struct device *dev,
-					struct device_attribute *attr,
-					char *buf)
-{
-	struct mt7615_dev *mdev = dev_get_drvdata(dev);
-	int temperature;
-
-	if (!mt7615_wait_for_mcu_init(mdev))
-		return 0;
-
-	mt7615_mutex_acquire(mdev);
-	temperature = mt7615_mcu_get_temperature(mdev);
-	mt7615_mutex_release(mdev);
-
-	if (temperature < 0)
-		return temperature;
-
-	/* display in millidegree celcius */
-	return sprintf(buf, "%u\n", temperature * 1000);
-}
-
-static SENSOR_DEVICE_ATTR(temp1_input, 0444, mt7615_thermal_show_temp,
-			  NULL, 0);
-
-static struct attribute *mt7615_hwmon_attrs[] = {
-	&sensor_dev_attr_temp1_input.dev_attr.attr,
-	NULL,
-};
-ATTRIBUTE_GROUPS(mt7615_hwmon);
-
-int mt7615_thermal_init(struct mt7615_dev *dev)
-{
-	struct wiphy *wiphy = mt76_hw(dev)->wiphy;
-	struct device *hwmon;
-	const char *name;
-
-	if (!IS_REACHABLE(CONFIG_HWMON))
-		return 0;
-
-	name = devm_kasprintf(&wiphy->dev, GFP_KERNEL, "mt7615_%s",
-			      wiphy_name(wiphy));
-	hwmon = devm_hwmon_device_register_with_groups(&wiphy->dev, name, dev,
-						       mt7615_hwmon_groups);
-	if (IS_ERR(hwmon))
-		return PTR_ERR(hwmon);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt7615_thermal_init);
-
-static void
-mt7615_phy_init(struct mt7615_dev *dev)
-{
-	/* disable rf low power beacon mode */
-	mt76_set(dev, MT_WF_PHY_WF2_RFCTRL0(0), MT_WF_PHY_WF2_RFCTRL0_LPBCN_EN);
-	mt76_set(dev, MT_WF_PHY_WF2_RFCTRL0(1), MT_WF_PHY_WF2_RFCTRL0_LPBCN_EN);
-}
-
-static void
-mt7615_init_mac_chain(struct mt7615_dev *dev, int chain)
-{
-	u32 val;
-
-	if (!chain)
-		val = MT_CFG_CCR_MAC_D0_1X_GC_EN | MT_CFG_CCR_MAC_D0_2X_GC_EN;
-	else
-		val = MT_CFG_CCR_MAC_D1_1X_GC_EN | MT_CFG_CCR_MAC_D1_2X_GC_EN;
-
-	/* enable band 0/1 clk */
-	mt76_set(dev, MT_CFG_CCR, val);
-
-	mt76_rmw(dev, MT_TMAC_TRCR(chain),
-		 MT_TMAC_TRCR_CCA_SEL | MT_TMAC_TRCR_SEC_CCA_SEL,
-		 FIELD_PREP(MT_TMAC_TRCR_CCA_SEL, 2) |
-		 FIELD_PREP(MT_TMAC_TRCR_SEC_CCA_SEL, 0));
-
-	mt76_wr(dev, MT_AGG_ACR(chain),
-		MT_AGG_ACR_PKT_TIME_EN | MT_AGG_ACR_NO_BA_AR_RULE |
-		FIELD_PREP(MT_AGG_ACR_CFEND_RATE, MT7615_CFEND_RATE_DEFAULT) |
-		FIELD_PREP(MT_AGG_ACR_BAR_RATE, MT7615_BAR_RATE_DEFAULT));
-
-	mt76_wr(dev, MT_AGG_ARUCR(chain),
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(0), 7) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(1), 2) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(2), 2) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(3), 2) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(4), 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(5), 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(6), 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(7), 1));
-
-	mt76_wr(dev, MT_AGG_ARDCR(chain),
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(0), MT7615_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(1), MT7615_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(2), MT7615_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(3), MT7615_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(4), MT7615_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(5), MT7615_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(6), MT7615_RATE_RETRY - 1) |
-		FIELD_PREP(MT_AGG_ARxCR_LIMIT(7), MT7615_RATE_RETRY - 1));
-
-	mt76_clear(dev, MT_DMA_RCFR0(chain), MT_DMA_RCFR0_MCU_RX_TDLS);
-	if (!mt7615_firmware_offload(dev)) {
-		u32 mask, set;
-
-		mask = MT_DMA_RCFR0_MCU_RX_MGMT |
-		       MT_DMA_RCFR0_MCU_RX_CTL_NON_BAR |
-		       MT_DMA_RCFR0_MCU_RX_CTL_BAR |
-		       MT_DMA_RCFR0_MCU_RX_BYPASS |
-		       MT_DMA_RCFR0_RX_DROPPED_UCAST |
-		       MT_DMA_RCFR0_RX_DROPPED_MCAST;
-		set = FIELD_PREP(MT_DMA_RCFR0_RX_DROPPED_UCAST, 2) |
-		      FIELD_PREP(MT_DMA_RCFR0_RX_DROPPED_MCAST, 2);
-		mt76_rmw(dev, MT_DMA_RCFR0(chain), mask, set);
-	}
-}
-
-static void
-mt7615_mac_init(struct mt7615_dev *dev)
-{
-	int i;
-
-	mt7615_init_mac_chain(dev, 0);
-
-	mt76_rmw_field(dev, MT_TMAC_CTCR0,
-		       MT_TMAC_CTCR0_INS_DDLMT_REFTIME, 0x3f);
-	mt76_rmw_field(dev, MT_TMAC_CTCR0,
-		       MT_TMAC_CTCR0_INS_DDLMT_DENSITY, 0x3);
-	mt76_rmw(dev, MT_TMAC_CTCR0,
-		 MT_TMAC_CTCR0_INS_DDLMT_VHT_SMPDU_EN |
-		 MT_TMAC_CTCR0_INS_DDLMT_EN,
-		 MT_TMAC_CTCR0_INS_DDLMT_VHT_SMPDU_EN |
-		 MT_TMAC_CTCR0_INS_DDLMT_EN);
-
-	mt76_connac_mcu_set_rts_thresh(&dev->mt76, 0x92b, 0);
-	mt7615_mac_set_scs(&dev->phy, true);
-
-	mt76_rmw(dev, MT_AGG_SCR, MT_AGG_SCR_NLNAV_MID_PTEC_DIS,
-		 MT_AGG_SCR_NLNAV_MID_PTEC_DIS);
-
-	mt76_wr(dev, MT_AGG_ARCR,
-		FIELD_PREP(MT_AGG_ARCR_RTS_RATE_THR, 2) |
-		MT_AGG_ARCR_RATE_DOWN_RATIO_EN |
-		FIELD_PREP(MT_AGG_ARCR_RATE_DOWN_RATIO, 1) |
-		FIELD_PREP(MT_AGG_ARCR_RATE_UP_EXTRA_TH, 4));
-
-	for (i = 0; i < MT7615_WTBL_SIZE; i++)
-		mt7615_mac_wtbl_update(dev, i,
-				       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	mt76_set(dev, MT_WF_RMAC_MIB_TIME0, MT_WF_RMAC_MIB_RXTIME_EN);
-	mt76_set(dev, MT_WF_RMAC_MIB_AIRTIME0, MT_WF_RMAC_MIB_RXTIME_EN);
-
-	mt76_wr(dev, MT_DMA_DCR0,
-		FIELD_PREP(MT_DMA_DCR0_MAX_RX_LEN, 3072) |
-		MT_DMA_DCR0_RX_VEC_DROP | MT_DMA_DCR0_DAMSDU_EN |
-		MT_DMA_DCR0_RX_HDR_TRANS_EN);
-	/* disable TDLS filtering */
-	mt76_clear(dev, MT_WF_PFCR, MT_WF_PFCR_TDLS_EN);
-	mt76_set(dev, MT_WF_MIB_SCR0, MT_MIB_SCR0_AGG_CNT_RANGE_EN);
-	if (is_mt7663(&dev->mt76)) {
-		mt76_wr(dev, MT_WF_AGG(0x160), 0x5c341c02);
-		mt76_wr(dev, MT_WF_AGG(0x164), 0x70708040);
-	} else {
-		mt7615_init_mac_chain(dev, 1);
-	}
-	mt7615_mcu_set_rx_hdr_trans_blacklist(dev);
-}
-
-static void
-mt7615_check_offload_capability(struct mt7615_dev *dev)
-{
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	struct wiphy *wiphy = hw->wiphy;
-
-	if (mt7615_firmware_offload(dev)) {
-		ieee80211_hw_set(hw, SUPPORTS_PS);
-		ieee80211_hw_set(hw, SUPPORTS_DYNAMIC_PS);
-
-		wiphy->flags &= ~WIPHY_FLAG_4ADDR_STATION;
-		wiphy->max_remain_on_channel_duration = 5000;
-		wiphy->features |= NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR |
-				   NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR |
-				   WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL |
-				   NL80211_FEATURE_P2P_GO_CTWIN |
-				   NL80211_FEATURE_P2P_GO_OPPPS;
-	} else {
-		dev->ops->hw_scan = NULL;
-		dev->ops->cancel_hw_scan = NULL;
-		dev->ops->sched_scan_start = NULL;
-		dev->ops->sched_scan_stop = NULL;
-		dev->ops->set_rekey_data = NULL;
-		dev->ops->remain_on_channel = NULL;
-		dev->ops->cancel_remain_on_channel = NULL;
-
-		wiphy->max_sched_scan_plan_interval = 0;
-		wiphy->max_sched_scan_ie_len = 0;
-		wiphy->max_scan_ie_len = IEEE80211_MAX_DATA_LEN;
-		wiphy->max_sched_scan_ssids = 0;
-		wiphy->max_match_sets = 0;
-		wiphy->max_sched_scan_reqs = 0;
-	}
-}
-
-bool mt7615_wait_for_mcu_init(struct mt7615_dev *dev)
-{
-	flush_work(&dev->mcu_work);
-
-	return test_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-}
-EXPORT_SYMBOL_GPL(mt7615_wait_for_mcu_init);
-
-static const struct ieee80211_iface_limit if_limits[] = {
-	{
-		.max = 1,
-		.types = BIT(NL80211_IFTYPE_ADHOC)
-	}, {
-		.max = MT7615_MAX_INTERFACES,
-		.types = BIT(NL80211_IFTYPE_AP) |
-#ifdef CONFIG_MAC80211_MESH
-			 BIT(NL80211_IFTYPE_MESH_POINT) |
-#endif
-			 BIT(NL80211_IFTYPE_P2P_CLIENT) |
-			 BIT(NL80211_IFTYPE_P2P_GO) |
-			 BIT(NL80211_IFTYPE_STATION)
-	}
-};
-
-static const struct ieee80211_iface_combination if_comb_radar[] = {
-	{
-		.limits = if_limits,
-		.n_limits = ARRAY_SIZE(if_limits),
-		.max_interfaces = MT7615_MAX_INTERFACES,
-		.num_different_channels = 1,
-		.beacon_int_infra_match = true,
-		.radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
-				       BIT(NL80211_CHAN_WIDTH_20) |
-				       BIT(NL80211_CHAN_WIDTH_40) |
-				       BIT(NL80211_CHAN_WIDTH_80) |
-				       BIT(NL80211_CHAN_WIDTH_160) |
-				       BIT(NL80211_CHAN_WIDTH_80P80),
-	}
-};
-
-static const struct ieee80211_iface_combination if_comb[] = {
-	{
-		.limits = if_limits,
-		.n_limits = ARRAY_SIZE(if_limits),
-		.max_interfaces = MT7615_MAX_INTERFACES,
-		.num_different_channels = 1,
-		.beacon_int_infra_match = true,
-	}
-};
-
-void mt7615_init_txpower(struct mt7615_dev *dev,
-			 struct ieee80211_supported_band *sband)
-{
-	int i, n_chains = hweight8(dev->mphy.antenna_mask), target_chains;
-	int delta_idx, delta = mt76_tx_power_nss_delta(n_chains);
-	u8 *eep = (u8 *)dev->mt76.eeprom.data;
-	enum nl80211_band band = sband->band;
-	struct mt76_power_limits limits;
-	u8 rate_val;
-
-	delta_idx = mt7615_eeprom_get_power_delta_index(dev, band);
-	rate_val = eep[delta_idx];
-	if ((rate_val & ~MT_EE_RATE_POWER_MASK) ==
-	    (MT_EE_RATE_POWER_EN | MT_EE_RATE_POWER_SIGN))
-		delta += rate_val & MT_EE_RATE_POWER_MASK;
-
-	if (!is_mt7663(&dev->mt76) && mt7615_ext_pa_enabled(dev, band))
-		target_chains = 1;
-	else
-		target_chains = n_chains;
-
-	for (i = 0; i < sband->n_channels; i++) {
-		struct ieee80211_channel *chan = &sband->channels[i];
-		u8 target_power = 0;
-		int j;
-
-		for (j = 0; j < target_chains; j++) {
-			int index;
-
-			index = mt7615_eeprom_get_target_power_index(dev, chan, j);
-			if (index < 0)
-				continue;
-
-			target_power = max(target_power, eep[index]);
-		}
-
-		target_power = mt76_get_rate_power_limits(&dev->mphy, chan,
-							  &limits,
-							  target_power);
-		target_power += delta;
-		target_power = DIV_ROUND_UP(target_power, 2);
-		chan->max_power = min_t(int, chan->max_reg_power,
-					target_power);
-		chan->orig_mpwr = target_power;
-	}
-}
-EXPORT_SYMBOL_GPL(mt7615_init_txpower);
-
-void mt7615_init_work(struct mt7615_dev *dev)
-{
-	mt7615_mcu_set_eeprom(dev);
-	mt7615_mac_init(dev);
-	mt7615_phy_init(dev);
-	mt7615_mcu_del_wtbl_all(dev);
-	mt7615_check_offload_capability(dev);
-}
-EXPORT_SYMBOL_GPL(mt7615_init_work);
-
-static void
-mt7615_regd_notifier(struct wiphy *wiphy,
-		     struct regulatory_request *request)
-{
-	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	struct mt7615_phy *phy = mphy->priv;
-	struct cfg80211_chan_def *chandef = &mphy->chandef;
-
-	memcpy(dev->mt76.alpha2, request->alpha2, sizeof(dev->mt76.alpha2));
-	dev->mt76.region = request->dfs_region;
-
-	mt7615_init_txpower(dev, &mphy->sband_2g.sband);
-	mt7615_init_txpower(dev, &mphy->sband_5g.sband);
-
-	mt7615_mutex_acquire(dev);
-
-	if (chandef->chan->flags & IEEE80211_CHAN_RADAR)
-		mt7615_dfs_init_radar_detector(phy);
-
-	if (mt7615_firmware_offload(phy->dev)) {
-		mt76_connac_mcu_set_channel_domain(mphy);
-		mt76_connac_mcu_set_rate_txpower(mphy);
-	}
-
-	mt7615_mutex_release(dev);
-}
-
-static void
-mt7615_init_wiphy(struct ieee80211_hw *hw)
-{
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	struct wiphy *wiphy = hw->wiphy;
-
-	hw->queues = 4;
-	hw->max_rates = 3;
-	hw->max_report_rates = 7;
-	hw->max_rate_tries = 11;
-	hw->netdev_features = NETIF_F_RXCSUM;
-
-	hw->radiotap_timestamp.units_pos =
-		IEEE80211_RADIOTAP_TIMESTAMP_UNIT_US;
-
-	phy->slottime = 9;
-
-	hw->sta_data_size = sizeof(struct mt7615_sta);
-	hw->vif_data_size = sizeof(struct mt7615_vif);
-
-	if (is_mt7663(&phy->dev->mt76)) {
-		wiphy->iface_combinations = if_comb;
-		wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
-	} else {
-		wiphy->iface_combinations = if_comb_radar;
-		wiphy->n_iface_combinations = ARRAY_SIZE(if_comb_radar);
-	}
-	wiphy->reg_notifier = mt7615_regd_notifier;
-
-	wiphy->max_sched_scan_plan_interval =
-		MT76_CONNAC_MAX_TIME_SCHED_SCAN_INTERVAL;
-	wiphy->max_sched_scan_ie_len = IEEE80211_MAX_DATA_LEN;
-	wiphy->max_scan_ie_len = MT76_CONNAC_SCAN_IE_LEN;
-	wiphy->max_sched_scan_ssids = MT76_CONNAC_MAX_SCHED_SCAN_SSID;
-	wiphy->max_match_sets = MT76_CONNAC_MAX_SCAN_MATCH;
-	wiphy->max_sched_scan_reqs = 1;
-	wiphy->max_scan_ssids = 4;
-
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_SET_SCAN_DWELL);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
-
-	ieee80211_hw_set(hw, SINGLE_SCAN_ON_ALL_BANDS);
-	ieee80211_hw_set(hw, TX_STATUS_NO_AMPDU_LEN);
-	ieee80211_hw_set(hw, WANT_MONITOR_VIF);
-	ieee80211_hw_set(hw, SUPPORTS_RX_DECAP_OFFLOAD);
-	ieee80211_hw_set(hw, SUPPORTS_VHT_EXT_NSS_BW);
-
-	if (is_mt7615(&phy->dev->mt76))
-		hw->max_tx_fragments = MT_TXP_MAX_BUF_NUM;
-	else
-		hw->max_tx_fragments = MT_HW_TXP_MAX_BUF_NUM;
-
-	phy->mt76->sband_2g.sband.ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
-	phy->mt76->sband_5g.sband.ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING;
-	phy->mt76->sband_5g.sband.vht_cap.cap |=
-			IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK;
-}
-
-static void
-mt7615_cap_dbdc_enable(struct mt7615_dev *dev)
-{
-	dev->mphy.sband_5g.sband.vht_cap.cap &=
-			~(IEEE80211_VHT_CAP_SHORT_GI_160 |
-			  IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ);
-	if (dev->chainmask == 0xf)
-		dev->mphy.antenna_mask = dev->chainmask >> 2;
-	else
-		dev->mphy.antenna_mask = dev->chainmask >> 1;
-	dev->mphy.chainmask = dev->mphy.antenna_mask;
-	dev->mphy.hw->wiphy->available_antennas_rx = dev->mphy.chainmask;
-	dev->mphy.hw->wiphy->available_antennas_tx = dev->mphy.chainmask;
-	mt76_set_stream_caps(&dev->mphy, true);
-}
-
-static void
-mt7615_cap_dbdc_disable(struct mt7615_dev *dev)
-{
-	dev->mphy.sband_5g.sband.vht_cap.cap |=
-			IEEE80211_VHT_CAP_SHORT_GI_160 |
-			IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ;
-	dev->mphy.antenna_mask = dev->chainmask;
-	dev->mphy.chainmask = dev->chainmask;
-	dev->mphy.hw->wiphy->available_antennas_rx = dev->chainmask;
-	dev->mphy.hw->wiphy->available_antennas_tx = dev->chainmask;
-	mt76_set_stream_caps(&dev->mphy, true);
-}
-
-int mt7615_register_ext_phy(struct mt7615_dev *dev)
-{
-	struct mt7615_phy *phy = mt7615_ext_phy(dev);
-	struct mt76_phy *mphy;
-	int i, ret;
-
-	if (!is_mt7615(&dev->mt76))
-		return -EOPNOTSUPP;
-
-	if (test_bit(MT76_STATE_RUNNING, &dev->mphy.state))
-		return -EINVAL;
-
-	if (phy)
-		return 0;
-
-	mt7615_cap_dbdc_enable(dev);
-	mphy = mt76_alloc_phy(&dev->mt76, sizeof(*phy), &mt7615_ops, MT_BAND1);
-	if (!mphy)
-		return -ENOMEM;
-
-	phy = mphy->priv;
-	phy->dev = dev;
-	phy->mt76 = mphy;
-	mphy->chainmask = dev->chainmask & ~dev->mphy.chainmask;
-	mphy->antenna_mask = BIT(hweight8(mphy->chainmask)) - 1;
-	mt7615_init_wiphy(mphy->hw);
-
-	INIT_DELAYED_WORK(&mphy->mac_work, mt7615_mac_work);
-	INIT_DELAYED_WORK(&phy->scan_work, mt7615_scan_work);
-	skb_queue_head_init(&phy->scan_event_list);
-
-	INIT_WORK(&phy->roc_work, mt7615_roc_work);
-	timer_setup(&phy->roc_timer, mt7615_roc_timer, 0);
-	init_waitqueue_head(&phy->roc_wait);
-
-	mt7615_mac_set_scs(phy, true);
-
-	/*
-	 * Make the secondary PHY MAC address local without overlapping with
-	 * the usual MAC address allocation scheme on multiple virtual interfaces
-	 */
-	memcpy(mphy->macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
-	       ETH_ALEN);
-	mphy->macaddr[0] |= 2;
-	mphy->macaddr[0] ^= BIT(7);
-	mt76_eeprom_override(mphy);
-
-	/* second phy can only handle 5 GHz */
-	mphy->cap.has_5ghz = true;
-
-	/* mt7615 second phy shares the same hw queues with the primary one */
-	for (i = 0; i <= MT_TXQ_PSD ; i++)
-		mphy->q_tx[i] = dev->mphy.q_tx[i];
-
-	ret = mt76_register_phy(mphy, true, mt76_rates,
-				ARRAY_SIZE(mt76_rates));
-	if (ret)
-		ieee80211_free_hw(mphy->hw);
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt7615_register_ext_phy);
-
-void mt7615_unregister_ext_phy(struct mt7615_dev *dev)
-{
-	struct mt7615_phy *phy = mt7615_ext_phy(dev);
-	struct mt76_phy *mphy = dev->mt76.phys[MT_BAND1];
-
-	if (!phy)
-		return;
-
-	mt7615_cap_dbdc_disable(dev);
-	mt76_unregister_phy(mphy);
-	ieee80211_free_hw(mphy->hw);
-}
-EXPORT_SYMBOL_GPL(mt7615_unregister_ext_phy);
-
-void mt7615_init_device(struct mt7615_dev *dev)
-{
-	struct ieee80211_hw *hw = mt76_hw(dev);
-
-	dev->phy.dev = dev;
-	dev->phy.mt76 = &dev->mt76.phy;
-	dev->mt76.phy.priv = &dev->phy;
-	dev->mt76.tx_worker.fn = mt7615_tx_worker;
-
-	INIT_DELAYED_WORK(&dev->pm.ps_work, mt7615_pm_power_save_work);
-	INIT_WORK(&dev->pm.wake_work, mt7615_pm_wake_work);
-	spin_lock_init(&dev->pm.wake.lock);
-	mutex_init(&dev->pm.mutex);
-	init_waitqueue_head(&dev->pm.wait);
-	spin_lock_init(&dev->pm.txq_lock);
-	INIT_DELAYED_WORK(&dev->mphy.mac_work, mt7615_mac_work);
-	INIT_DELAYED_WORK(&dev->phy.scan_work, mt7615_scan_work);
-	INIT_DELAYED_WORK(&dev->coredump.work, mt7615_coredump_work);
-	skb_queue_head_init(&dev->phy.scan_event_list);
-	skb_queue_head_init(&dev->coredump.msg_list);
-	INIT_LIST_HEAD(&dev->sta_poll_list);
-	spin_lock_init(&dev->sta_poll_lock);
-	init_waitqueue_head(&dev->reset_wait);
-	init_waitqueue_head(&dev->phy.roc_wait);
-
-	INIT_WORK(&dev->phy.roc_work, mt7615_roc_work);
-	timer_setup(&dev->phy.roc_timer, mt7615_roc_timer, 0);
-
-	mt7615_init_wiphy(hw);
-	dev->pm.idle_timeout = MT7615_PM_TIMEOUT;
-	dev->pm.stats.last_wake_event = jiffies;
-	dev->pm.stats.last_doze_event = jiffies;
-	mt7615_cap_dbdc_disable(dev);
-
-#ifdef CONFIG_NL80211_TESTMODE
-	dev->mt76.test_ops = &mt7615_testmode_ops;
-#endif
-}
-EXPORT_SYMBOL_GPL(mt7615_init_device);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mac.c
deleted file mode 100644
index 2ce1705..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mac.c
+++ /dev/null
@@ -1,2383 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2019 MediaTek Inc.
- *
- * Author: Ryder Lee <ryder.lee@mediatek.com>
- *         Roy Luo <royluo@google.com>
- *         Felix Fietkau <nbd@nbd.name>
- *         Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#include <linux/devcoredump.h>
-#include <linux/etherdevice.h>
-#include <linux/timekeeping.h>
-#include "mt7615.h"
-#include "../trace.h"
-#include "../dma.h"
-#include "mt7615_trace.h"
-#include "mac.h"
-#include "mcu.h"
-
-#define to_rssi(field, rxv)		((FIELD_GET(field, rxv) - 220) / 2)
-
-static const struct mt7615_dfs_radar_spec etsi_radar_specs = {
-	.pulse_th = { 110, -10, -80, 40, 5200, 128, 5200 },
-	.radar_pattern = {
-		[5] =  { 1, 0,  6, 32, 28, 0, 17,  990, 5010, 1, 1 },
-		[6] =  { 1, 0,  9, 32, 28, 0, 27,  615, 5010, 1, 1 },
-		[7] =  { 1, 0, 15, 32, 28, 0, 27,  240,  445, 1, 1 },
-		[8] =  { 1, 0, 12, 32, 28, 0, 42,  240,  510, 1, 1 },
-		[9] =  { 1, 1,  0,  0,  0, 0, 14, 2490, 3343, 0, 0, 12, 32, 28 },
-		[10] = { 1, 1,  0,  0,  0, 0, 14, 2490, 3343, 0, 0, 15, 32, 24 },
-		[11] = { 1, 1,  0,  0,  0, 0, 14,  823, 2510, 0, 0, 18, 32, 28 },
-		[12] = { 1, 1,  0,  0,  0, 0, 14,  823, 2510, 0, 0, 27, 32, 24 },
-	},
-};
-
-static const struct mt7615_dfs_radar_spec fcc_radar_specs = {
-	.pulse_th = { 110, -10, -80, 40, 5200, 128, 5200 },
-	.radar_pattern = {
-		[0] = { 1, 0,  9,  32, 28, 0, 13, 508, 3076, 1,  1 },
-		[1] = { 1, 0, 12,  32, 28, 0, 17, 140,  240, 1,  1 },
-		[2] = { 1, 0,  8,  32, 28, 0, 22, 190,  510, 1,  1 },
-		[3] = { 1, 0,  6,  32, 28, 0, 32, 190,  510, 1,  1 },
-		[4] = { 1, 0,  9, 255, 28, 0, 13, 323,  343, 1, 32 },
-	},
-};
-
-static const struct mt7615_dfs_radar_spec jp_radar_specs = {
-	.pulse_th = { 110, -10, -80, 40, 5200, 128, 5200 },
-	.radar_pattern = {
-		[0] =  { 1, 0,  8, 32, 28, 0, 13,  508, 3076, 1,  1 },
-		[1] =  { 1, 0, 12, 32, 28, 0, 17,  140,  240, 1,  1 },
-		[2] =  { 1, 0,  8, 32, 28, 0, 22,  190,  510, 1,  1 },
-		[3] =  { 1, 0,  6, 32, 28, 0, 32,  190,  510, 1,  1 },
-		[4] =  { 1, 0,  9, 32, 28, 0, 13,  323,  343, 1, 32 },
-		[13] = { 1, 0, 8,  32, 28, 0, 14, 3836, 3856, 1,  1 },
-		[14] = { 1, 0, 8,  32, 28, 0, 14, 3990, 4010, 1,  1 },
-	},
-};
-
-static enum mt76_cipher_type
-mt7615_mac_get_cipher(int cipher)
-{
-	switch (cipher) {
-	case WLAN_CIPHER_SUITE_WEP40:
-		return MT_CIPHER_WEP40;
-	case WLAN_CIPHER_SUITE_WEP104:
-		return MT_CIPHER_WEP104;
-	case WLAN_CIPHER_SUITE_TKIP:
-		return MT_CIPHER_TKIP;
-	case WLAN_CIPHER_SUITE_AES_CMAC:
-		return MT_CIPHER_BIP_CMAC_128;
-	case WLAN_CIPHER_SUITE_CCMP:
-		return MT_CIPHER_AES_CCMP;
-	case WLAN_CIPHER_SUITE_CCMP_256:
-		return MT_CIPHER_CCMP_256;
-	case WLAN_CIPHER_SUITE_GCMP:
-		return MT_CIPHER_GCMP;
-	case WLAN_CIPHER_SUITE_GCMP_256:
-		return MT_CIPHER_GCMP_256;
-	case WLAN_CIPHER_SUITE_SMS4:
-		return MT_CIPHER_WAPI;
-	default:
-		return MT_CIPHER_NONE;
-	}
-}
-
-static struct mt76_wcid *mt7615_rx_get_wcid(struct mt7615_dev *dev,
-					    u8 idx, bool unicast)
-{
-	struct mt7615_sta *sta;
-	struct mt76_wcid *wcid;
-
-	if (idx >= MT7615_WTBL_SIZE)
-		return NULL;
-
-	wcid = rcu_dereference(dev->mt76.wcid[idx]);
-	if (unicast || !wcid)
-		return wcid;
-
-	if (!wcid->sta)
-		return NULL;
-
-	sta = container_of(wcid, struct mt7615_sta, wcid);
-	if (!sta->vif)
-		return NULL;
-
-	return &sta->vif->sta.wcid;
-}
-
-void mt7615_mac_reset_counters(struct mt7615_dev *dev)
-{
-	struct mt76_phy *mphy_ext = dev->mt76.phys[MT_BAND1];
-	int i;
-
-	for (i = 0; i < 4; i++) {
-		mt76_rr(dev, MT_TX_AGG_CNT(0, i));
-		mt76_rr(dev, MT_TX_AGG_CNT(1, i));
-	}
-
-	memset(dev->mt76.aggr_stats, 0, sizeof(dev->mt76.aggr_stats));
-	dev->mt76.phy.survey_time = ktime_get_boottime();
-	if (mphy_ext)
-		mphy_ext->survey_time = ktime_get_boottime();
-
-	/* reset airtime counters */
-	mt76_rr(dev, MT_MIB_SDR9(0));
-	mt76_rr(dev, MT_MIB_SDR9(1));
-
-	mt76_rr(dev, MT_MIB_SDR36(0));
-	mt76_rr(dev, MT_MIB_SDR36(1));
-
-	mt76_rr(dev, MT_MIB_SDR37(0));
-	mt76_rr(dev, MT_MIB_SDR37(1));
-
-	mt76_set(dev, MT_WF_RMAC_MIB_TIME0, MT_WF_RMAC_MIB_RXTIME_CLR);
-	mt76_set(dev, MT_WF_RMAC_MIB_AIRTIME0, MT_WF_RMAC_MIB_RXTIME_CLR);
-}
-
-void mt7615_mac_set_timing(struct mt7615_phy *phy)
-{
-	s16 coverage_class = phy->coverage_class;
-	struct mt7615_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-	u32 val, reg_offset;
-	u32 cck = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 231) |
-		  FIELD_PREP(MT_TIMEOUT_VAL_CCA, 48);
-	u32 ofdm = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 60) |
-		   FIELD_PREP(MT_TIMEOUT_VAL_CCA, 28);
-	int sifs, offset;
-	bool is_5ghz = phy->mt76->chandef.chan->band == NL80211_BAND_5GHZ;
-
-	if (!test_bit(MT76_STATE_RUNNING, &phy->mt76->state))
-		return;
-
-	if (is_5ghz)
-		sifs = 16;
-	else
-		sifs = 10;
-
-	if (ext_phy) {
-		coverage_class = max_t(s16, dev->phy.coverage_class,
-				       coverage_class);
-		mt76_set(dev, MT_ARB_SCR,
-			 MT_ARB_SCR_TX1_DISABLE | MT_ARB_SCR_RX1_DISABLE);
-	} else {
-		struct mt7615_phy *phy_ext = mt7615_ext_phy(dev);
-
-		if (phy_ext)
-			coverage_class = max_t(s16, phy_ext->coverage_class,
-					       coverage_class);
-		mt76_set(dev, MT_ARB_SCR,
-			 MT_ARB_SCR_TX0_DISABLE | MT_ARB_SCR_RX0_DISABLE);
-	}
-	udelay(1);
-
-	offset = 3 * coverage_class;
-	reg_offset = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, offset) |
-		     FIELD_PREP(MT_TIMEOUT_VAL_CCA, offset);
-	mt76_wr(dev, MT_TMAC_CDTR, cck + reg_offset);
-	mt76_wr(dev, MT_TMAC_ODTR, ofdm + reg_offset);
-
-	mt76_wr(dev, MT_TMAC_ICR(ext_phy),
-		FIELD_PREP(MT_IFS_EIFS, 360) |
-		FIELD_PREP(MT_IFS_RIFS, 2) |
-		FIELD_PREP(MT_IFS_SIFS, sifs) |
-		FIELD_PREP(MT_IFS_SLOT, phy->slottime));
-
-	if (phy->slottime < 20 || is_5ghz)
-		val = MT7615_CFEND_RATE_DEFAULT;
-	else
-		val = MT7615_CFEND_RATE_11B;
-
-	mt76_rmw_field(dev, MT_AGG_ACR(ext_phy), MT_AGG_ACR_CFEND_RATE, val);
-	if (ext_phy)
-		mt76_clear(dev, MT_ARB_SCR,
-			   MT_ARB_SCR_TX1_DISABLE | MT_ARB_SCR_RX1_DISABLE);
-	else
-		mt76_clear(dev, MT_ARB_SCR,
-			   MT_ARB_SCR_TX0_DISABLE | MT_ARB_SCR_RX0_DISABLE);
-
-}
-
-static void
-mt7615_get_status_freq_info(struct mt7615_dev *dev, struct mt76_phy *mphy,
-			    struct mt76_rx_status *status, u8 chfreq)
-{
-	if (!test_bit(MT76_HW_SCANNING, &mphy->state) &&
-	    !test_bit(MT76_HW_SCHED_SCANNING, &mphy->state) &&
-	    !test_bit(MT76_STATE_ROC, &mphy->state)) {
-		status->freq = mphy->chandef.chan->center_freq;
-		status->band = mphy->chandef.chan->band;
-		return;
-	}
-
-	status->band = chfreq <= 14 ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ;
-	status->freq = ieee80211_channel_to_frequency(chfreq, status->band);
-}
-
-static void mt7615_mac_fill_tm_rx(struct mt7615_phy *phy, __le32 *rxv)
-{
-#ifdef CONFIG_NL80211_TESTMODE
-	u32 rxv1 = le32_to_cpu(rxv[0]);
-	u32 rxv3 = le32_to_cpu(rxv[2]);
-	u32 rxv4 = le32_to_cpu(rxv[3]);
-	u32 rxv5 = le32_to_cpu(rxv[4]);
-	u8 cbw = FIELD_GET(MT_RXV1_FRAME_MODE, rxv1);
-	u8 mode = FIELD_GET(MT_RXV1_TX_MODE, rxv1);
-	s16 foe = FIELD_GET(MT_RXV5_FOE, rxv5);
-	u32 foe_const = (BIT(cbw + 1) & 0xf) * 10000;
-
-	if (!mode) {
-		/* CCK */
-		foe &= ~BIT(11);
-		foe *= 1000;
-		foe >>= 11;
-	} else {
-		if (foe > 2048)
-			foe -= 4096;
-
-		foe = (foe * foe_const) >> 15;
-	}
-
-	phy->test.last_freq_offset = foe;
-	phy->test.last_rcpi[0] = FIELD_GET(MT_RXV4_RCPI0, rxv4);
-	phy->test.last_rcpi[1] = FIELD_GET(MT_RXV4_RCPI1, rxv4);
-	phy->test.last_rcpi[2] = FIELD_GET(MT_RXV4_RCPI2, rxv4);
-	phy->test.last_rcpi[3] = FIELD_GET(MT_RXV4_RCPI3, rxv4);
-	phy->test.last_ib_rssi[0] = FIELD_GET(MT_RXV3_IB_RSSI, rxv3);
-	phy->test.last_wb_rssi[0] = FIELD_GET(MT_RXV3_WB_RSSI, rxv3);
-#endif
-}
-
-/* The HW does not translate the mac header to 802.3 for mesh point */
-static int mt7615_reverse_frag0_hdr_trans(struct sk_buff *skb, u16 hdr_gap)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct ethhdr *eth_hdr = (struct ethhdr *)(skb->data + hdr_gap);
-	struct mt7615_sta *msta = (struct mt7615_sta *)status->wcid;
-	__le32 *rxd = (__le32 *)skb->data;
-	struct ieee80211_sta *sta;
-	struct ieee80211_vif *vif;
-	struct ieee80211_hdr hdr;
-	u16 frame_control;
-
-	if (le32_get_bits(rxd[1], MT_RXD1_NORMAL_ADDR_TYPE) !=
-	    MT_RXD1_NORMAL_U2M)
-		return -EINVAL;
-
-	if (!(le32_to_cpu(rxd[0]) & MT_RXD0_NORMAL_GROUP_4))
-		return -EINVAL;
-
-	if (!msta || !msta->vif)
-		return -EINVAL;
-
-	sta = container_of((void *)msta, struct ieee80211_sta, drv_priv);
-	vif = container_of((void *)msta->vif, struct ieee80211_vif, drv_priv);
-
-	/* store the info from RXD and ethhdr to avoid being overridden */
-	frame_control = le32_get_bits(rxd[4], MT_RXD4_FRAME_CONTROL);
-	hdr.frame_control = cpu_to_le16(frame_control);
-	hdr.seq_ctrl = cpu_to_le16(le32_get_bits(rxd[6], MT_RXD6_SEQ_CTRL));
-	hdr.duration_id = 0;
-
-	ether_addr_copy(hdr.addr1, vif->addr);
-	ether_addr_copy(hdr.addr2, sta->addr);
-	switch (frame_control & (IEEE80211_FCTL_TODS |
-				 IEEE80211_FCTL_FROMDS)) {
-	case 0:
-		ether_addr_copy(hdr.addr3, vif->bss_conf.bssid);
-		break;
-	case IEEE80211_FCTL_FROMDS:
-		ether_addr_copy(hdr.addr3, eth_hdr->h_source);
-		break;
-	case IEEE80211_FCTL_TODS:
-		ether_addr_copy(hdr.addr3, eth_hdr->h_dest);
-		break;
-	case IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS:
-		ether_addr_copy(hdr.addr3, eth_hdr->h_dest);
-		ether_addr_copy(hdr.addr4, eth_hdr->h_source);
-		break;
-	default:
-		break;
-	}
-
-	skb_pull(skb, hdr_gap + sizeof(struct ethhdr) - 2);
-	if (eth_hdr->h_proto == cpu_to_be16(ETH_P_AARP) ||
-	    eth_hdr->h_proto == cpu_to_be16(ETH_P_IPX))
-		ether_addr_copy(skb_push(skb, ETH_ALEN), bridge_tunnel_header);
-	else if (be16_to_cpu(eth_hdr->h_proto) >= ETH_P_802_3_MIN)
-		ether_addr_copy(skb_push(skb, ETH_ALEN), rfc1042_header);
-	else
-		skb_pull(skb, 2);
-
-	if (ieee80211_has_order(hdr.frame_control))
-		memcpy(skb_push(skb, IEEE80211_HT_CTL_LEN), &rxd[7],
-		       IEEE80211_HT_CTL_LEN);
-
-	if (ieee80211_is_data_qos(hdr.frame_control)) {
-		__le16 qos_ctrl;
-
-		qos_ctrl = cpu_to_le16(le32_get_bits(rxd[6], MT_RXD6_QOS_CTL));
-		memcpy(skb_push(skb, IEEE80211_QOS_CTL_LEN), &qos_ctrl,
-		       IEEE80211_QOS_CTL_LEN);
-	}
-
-	if (ieee80211_has_a4(hdr.frame_control))
-		memcpy(skb_push(skb, sizeof(hdr)), &hdr, sizeof(hdr));
-	else
-		memcpy(skb_push(skb, sizeof(hdr) - 6), &hdr, sizeof(hdr) - 6);
-
-	status->flag &= ~(RX_FLAG_RADIOTAP_HE | RX_FLAG_RADIOTAP_HE_MU);
-	return 0;
-}
-
-static int mt7615_mac_fill_rx(struct mt7615_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7615_phy *phy = &dev->phy;
-	struct ieee80211_supported_band *sband;
-	struct ieee80211_hdr *hdr;
-	struct mt7615_phy *phy2;
-	__le32 *rxd = (__le32 *)skb->data;
-	u32 rxd0 = le32_to_cpu(rxd[0]);
-	u32 rxd1 = le32_to_cpu(rxd[1]);
-	u32 rxd2 = le32_to_cpu(rxd[2]);
-	u32 csum_mask = MT_RXD0_NORMAL_IP_SUM | MT_RXD0_NORMAL_UDP_TCP_SUM;
-	u32 csum_status = *(u32 *)skb->cb;
-	bool unicast, hdr_trans, remove_pad, insert_ccmp_hdr = false;
-	u16 hdr_gap;
-	int phy_idx;
-	int i, idx;
-	u8 chfreq, amsdu_info, qos_ctl = 0;
-	u16 seq_ctrl = 0;
-	__le16 fc = 0;
-
-	memset(status, 0, sizeof(*status));
-
-	chfreq = FIELD_GET(MT_RXD1_NORMAL_CH_FREQ, rxd1);
-
-	phy2 = dev->mt76.phys[MT_BAND1] ? dev->mt76.phys[MT_BAND1]->priv : NULL;
-	if (!phy2)
-		phy_idx = 0;
-	else if (phy2->chfreq == phy->chfreq)
-		phy_idx = -1;
-	else if (phy->chfreq == chfreq)
-		phy_idx = 0;
-	else if (phy2->chfreq == chfreq)
-		phy_idx = 1;
-	else
-		phy_idx = -1;
-
-	if (rxd2 & MT_RXD2_NORMAL_AMSDU_ERR)
-		return -EINVAL;
-
-	hdr_trans = rxd1 & MT_RXD1_NORMAL_HDR_TRANS;
-	if (hdr_trans && (rxd2 & MT_RXD2_NORMAL_CM))
-		return -EINVAL;
-
-	/* ICV error or CCMP/BIP/WPI MIC error */
-	if (rxd2 & MT_RXD2_NORMAL_ICV_ERR)
-		status->flag |= RX_FLAG_ONLY_MONITOR;
-
-	unicast = (rxd1 & MT_RXD1_NORMAL_ADDR_TYPE) == MT_RXD1_NORMAL_U2M;
-	idx = FIELD_GET(MT_RXD2_NORMAL_WLAN_IDX, rxd2);
-	status->wcid = mt7615_rx_get_wcid(dev, idx, unicast);
-
-	if (status->wcid) {
-		struct mt7615_sta *msta;
-
-		msta = container_of(status->wcid, struct mt7615_sta, wcid);
-		spin_lock_bh(&dev->sta_poll_lock);
-		if (list_empty(&msta->poll_list))
-			list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-		spin_unlock_bh(&dev->sta_poll_lock);
-	}
-
-	if (mt76_is_mmio(&dev->mt76) && (rxd0 & csum_mask) == csum_mask &&
-	    !(csum_status & (BIT(0) | BIT(2) | BIT(3))))
-		skb->ip_summed = CHECKSUM_UNNECESSARY;
-
-	if (rxd2 & MT_RXD2_NORMAL_FCS_ERR)
-		status->flag |= RX_FLAG_FAILED_FCS_CRC;
-
-	if (rxd2 & MT_RXD2_NORMAL_TKIP_MIC_ERR)
-		status->flag |= RX_FLAG_MMIC_ERROR;
-
-	if (FIELD_GET(MT_RXD2_NORMAL_SEC_MODE, rxd2) != 0 &&
-	    !(rxd2 & (MT_RXD2_NORMAL_CLM | MT_RXD2_NORMAL_CM))) {
-		status->flag |= RX_FLAG_DECRYPTED;
-		status->flag |= RX_FLAG_IV_STRIPPED;
-		status->flag |= RX_FLAG_MMIC_STRIPPED | RX_FLAG_MIC_STRIPPED;
-	}
-
-	remove_pad = rxd1 & MT_RXD1_NORMAL_HDR_OFFSET;
-
-	if (rxd2 & MT_RXD2_NORMAL_MAX_LEN_ERROR)
-		return -EINVAL;
-
-	rxd += 4;
-	if (rxd0 & MT_RXD0_NORMAL_GROUP_4) {
-		u32 v0 = le32_to_cpu(rxd[0]);
-		u32 v2 = le32_to_cpu(rxd[2]);
-
-		fc = cpu_to_le16(FIELD_GET(MT_RXD4_FRAME_CONTROL, v0));
-		qos_ctl = FIELD_GET(MT_RXD6_QOS_CTL, v2);
-		seq_ctrl = FIELD_GET(MT_RXD6_SEQ_CTRL, v2);
-
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	if (rxd0 & MT_RXD0_NORMAL_GROUP_1) {
-		u8 *data = (u8 *)rxd;
-
-		if (status->flag & RX_FLAG_DECRYPTED) {
-			switch (FIELD_GET(MT_RXD2_NORMAL_SEC_MODE, rxd2)) {
-			case MT_CIPHER_AES_CCMP:
-			case MT_CIPHER_CCMP_CCX:
-			case MT_CIPHER_CCMP_256:
-				insert_ccmp_hdr =
-					FIELD_GET(MT_RXD2_NORMAL_FRAG, rxd2);
-				fallthrough;
-			case MT_CIPHER_TKIP:
-			case MT_CIPHER_TKIP_NO_MIC:
-			case MT_CIPHER_GCMP:
-			case MT_CIPHER_GCMP_256:
-				status->iv[0] = data[5];
-				status->iv[1] = data[4];
-				status->iv[2] = data[3];
-				status->iv[3] = data[2];
-				status->iv[4] = data[1];
-				status->iv[5] = data[0];
-				break;
-			default:
-				break;
-			}
-		}
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	if (rxd0 & MT_RXD0_NORMAL_GROUP_2) {
-		status->timestamp = le32_to_cpu(rxd[0]);
-		status->flag |= RX_FLAG_MACTIME_START;
-
-		if (!(rxd2 & (MT_RXD2_NORMAL_NON_AMPDU_SUB |
-			      MT_RXD2_NORMAL_NON_AMPDU))) {
-			status->flag |= RX_FLAG_AMPDU_DETAILS;
-
-			/* all subframes of an A-MPDU have the same timestamp */
-			if (phy->rx_ampdu_ts != status->timestamp) {
-				if (!++phy->ampdu_ref)
-					phy->ampdu_ref++;
-			}
-			phy->rx_ampdu_ts = status->timestamp;
-
-			status->ampdu_ref = phy->ampdu_ref;
-		}
-
-		rxd += 2;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	if (rxd0 & MT_RXD0_NORMAL_GROUP_3) {
-		u32 rxdg5 = le32_to_cpu(rxd[5]);
-
-		/*
-		 * If both PHYs are on the same channel and we don't have a WCID,
-		 * we need to figure out which PHY this packet was received on.
-		 * On the primary PHY, the noise value for the chains belonging to the
-		 * second PHY will be set to the noise value of the last packet from
-		 * that PHY.
-		 */
-		if (phy_idx < 0) {
-			int first_chain = ffs(phy2->mt76->chainmask) - 1;
-
-			phy_idx = ((rxdg5 >> (first_chain * 8)) & 0xff) == 0;
-		}
-	}
-
-	if (phy_idx == 1 && phy2) {
-		mphy = dev->mt76.phys[MT_BAND1];
-		phy = phy2;
-		status->phy_idx = phy_idx;
-	}
-
-	if (!mt7615_firmware_offload(dev) && chfreq != phy->chfreq)
-		return -EINVAL;
-
-	mt7615_get_status_freq_info(dev, mphy, status, chfreq);
-	if (status->band == NL80211_BAND_5GHZ)
-		sband = &mphy->sband_5g.sband;
-	else
-		sband = &mphy->sband_2g.sband;
-
-	if (!test_bit(MT76_STATE_RUNNING, &mphy->state))
-		return -EINVAL;
-
-	if (!sband->channels)
-		return -EINVAL;
-
-	if (rxd0 & MT_RXD0_NORMAL_GROUP_3) {
-		u32 rxdg0 = le32_to_cpu(rxd[0]);
-		u32 rxdg1 = le32_to_cpu(rxd[1]);
-		u32 rxdg3 = le32_to_cpu(rxd[3]);
-		u8 stbc = FIELD_GET(MT_RXV1_HT_STBC, rxdg0);
-		bool cck = false;
-
-		i = FIELD_GET(MT_RXV1_TX_RATE, rxdg0);
-		switch (FIELD_GET(MT_RXV1_TX_MODE, rxdg0)) {
-		case MT_PHY_TYPE_CCK:
-			cck = true;
-			fallthrough;
-		case MT_PHY_TYPE_OFDM:
-			i = mt76_get_rate(&dev->mt76, sband, i, cck);
-			break;
-		case MT_PHY_TYPE_HT_GF:
-		case MT_PHY_TYPE_HT:
-			status->encoding = RX_ENC_HT;
-			if (i > 31)
-				return -EINVAL;
-			break;
-		case MT_PHY_TYPE_VHT:
-			status->nss = FIELD_GET(MT_RXV2_NSTS, rxdg1) + 1;
-			status->encoding = RX_ENC_VHT;
-			break;
-		default:
-			return -EINVAL;
-		}
-		status->rate_idx = i;
-
-		switch (FIELD_GET(MT_RXV1_FRAME_MODE, rxdg0)) {
-		case MT_PHY_BW_20:
-			break;
-		case MT_PHY_BW_40:
-			status->bw = RATE_INFO_BW_40;
-			break;
-		case MT_PHY_BW_80:
-			status->bw = RATE_INFO_BW_80;
-			break;
-		case MT_PHY_BW_160:
-			status->bw = RATE_INFO_BW_160;
-			break;
-		default:
-			return -EINVAL;
-		}
-
-		if (rxdg0 & MT_RXV1_HT_SHORT_GI)
-			status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-		if (rxdg0 & MT_RXV1_HT_AD_CODE)
-			status->enc_flags |= RX_ENC_FLAG_LDPC;
-
-		status->enc_flags |= RX_ENC_FLAG_STBC_MASK * stbc;
-
-		status->chains = mphy->antenna_mask;
-		status->chain_signal[0] = to_rssi(MT_RXV4_RCPI0, rxdg3);
-		status->chain_signal[1] = to_rssi(MT_RXV4_RCPI1, rxdg3);
-		status->chain_signal[2] = to_rssi(MT_RXV4_RCPI2, rxdg3);
-		status->chain_signal[3] = to_rssi(MT_RXV4_RCPI3, rxdg3);
-
-		mt7615_mac_fill_tm_rx(mphy->priv, rxd);
-
-		rxd += 6;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	amsdu_info = FIELD_GET(MT_RXD1_NORMAL_PAYLOAD_FORMAT, rxd1);
-	status->amsdu = !!amsdu_info;
-	if (status->amsdu) {
-		status->first_amsdu = amsdu_info == MT_RXD1_FIRST_AMSDU_FRAME;
-		status->last_amsdu = amsdu_info == MT_RXD1_LAST_AMSDU_FRAME;
-	}
-
-	hdr_gap = (u8 *)rxd - skb->data + 2 * remove_pad;
-	if (hdr_trans && ieee80211_has_morefrags(fc)) {
-		if (mt7615_reverse_frag0_hdr_trans(skb, hdr_gap))
-			return -EINVAL;
-		hdr_trans = false;
-	} else {
-		int pad_start = 0;
-
-		skb_pull(skb, hdr_gap);
-		if (!hdr_trans && status->amsdu) {
-			pad_start = ieee80211_get_hdrlen_from_skb(skb);
-		} else if (hdr_trans && (rxd2 & MT_RXD2_NORMAL_HDR_TRANS_ERROR)) {
-			/*
-			 * When header translation failure is indicated,
-			 * the hardware will insert an extra 2-byte field
-			 * containing the data length after the protocol
-			 * type field. This happens either when the LLC-SNAP
-			 * pattern did not match, or if a VLAN header was
-			 * detected.
-			 */
-			pad_start = 12;
-			if (get_unaligned_be16(skb->data + pad_start) == ETH_P_8021Q)
-				pad_start += 4;
-			else
-				pad_start = 0;
-		}
-
-		if (pad_start) {
-			memmove(skb->data + 2, skb->data, pad_start);
-			skb_pull(skb, 2);
-		}
-	}
-
-	if (insert_ccmp_hdr && !hdr_trans) {
-		u8 key_id = FIELD_GET(MT_RXD1_NORMAL_KEY_ID, rxd1);
-
-		mt76_insert_ccmp_hdr(skb, key_id);
-	}
-
-	if (!hdr_trans) {
-		hdr = (struct ieee80211_hdr *)skb->data;
-		fc = hdr->frame_control;
-		if (ieee80211_is_data_qos(fc)) {
-			seq_ctrl = le16_to_cpu(hdr->seq_ctrl);
-			qos_ctl = *ieee80211_get_qos_ctl(hdr);
-		}
-	} else {
-		status->flag |= RX_FLAG_8023;
-	}
-
-	if (!status->wcid || !ieee80211_is_data_qos(fc))
-		return 0;
-
-	status->aggr = unicast &&
-		       !ieee80211_is_qos_nullfunc(fc);
-	status->qos_ctl = qos_ctl;
-	status->seqno = IEEE80211_SEQ_TO_SN(seq_ctrl);
-
-	return 0;
-}
-
-void mt7615_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps)
-{
-}
-EXPORT_SYMBOL_GPL(mt7615_sta_ps);
-
-static u16
-mt7615_mac_tx_rate_val(struct mt7615_dev *dev,
-		       struct mt76_phy *mphy,
-		       const struct ieee80211_tx_rate *rate,
-		       bool stbc, u8 *bw)
-{
-	u8 phy, nss, rate_idx;
-	u16 rateval = 0;
-
-	*bw = 0;
-
-	if (rate->flags & IEEE80211_TX_RC_VHT_MCS) {
-		rate_idx = ieee80211_rate_get_vht_mcs(rate);
-		nss = ieee80211_rate_get_vht_nss(rate);
-		phy = MT_PHY_TYPE_VHT;
-		if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
-			*bw = 1;
-		else if (rate->flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
-			*bw = 2;
-		else if (rate->flags & IEEE80211_TX_RC_160_MHZ_WIDTH)
-			*bw = 3;
-	} else if (rate->flags & IEEE80211_TX_RC_MCS) {
-		rate_idx = rate->idx;
-		nss = 1 + (rate->idx >> 3);
-		phy = MT_PHY_TYPE_HT;
-		if (rate->flags & IEEE80211_TX_RC_GREEN_FIELD)
-			phy = MT_PHY_TYPE_HT_GF;
-		if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
-			*bw = 1;
-	} else {
-		const struct ieee80211_rate *r;
-		int band = mphy->chandef.chan->band;
-		u16 val;
-
-		nss = 1;
-		r = &mphy->hw->wiphy->bands[band]->bitrates[rate->idx];
-		if (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
-			val = r->hw_value_short;
-		else
-			val = r->hw_value;
-
-		phy = val >> 8;
-		rate_idx = val & 0xff;
-	}
-
-	if (stbc && nss == 1) {
-		nss++;
-		rateval |= MT_TX_RATE_STBC;
-	}
-
-	rateval |= (FIELD_PREP(MT_TX_RATE_IDX, rate_idx) |
-		    FIELD_PREP(MT_TX_RATE_MODE, phy) |
-		    FIELD_PREP(MT_TX_RATE_NSS, nss - 1));
-
-	return rateval;
-}
-
-int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
-			  struct sk_buff *skb, struct mt76_wcid *wcid,
-			  struct ieee80211_sta *sta, int pid,
-			  struct ieee80211_key_conf *key,
-			  enum mt76_txq_id qid, bool beacon)
-{
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-	u8 fc_type, fc_stype, p_fmt, q_idx, omac_idx = 0, wmm_idx = 0;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct ieee80211_tx_rate *rate = &info->control.rates[0];
-	u8 phy_idx = (info->hw_queue & MT_TX_HW_QUEUE_PHY) >> 2;
-	bool multicast = is_multicast_ether_addr(hdr->addr1);
-	struct ieee80211_vif *vif = info->control.vif;
-	bool is_mmio = mt76_is_mmio(&dev->mt76);
-	u32 val, sz_txd = is_mmio ? MT_TXD_SIZE : MT_USB_TXD_SIZE;
-	struct mt76_phy *mphy = &dev->mphy;
-	__le16 fc = hdr->frame_control;
-	int tx_count = 8;
-	u16 seqno = 0;
-
-	if (vif) {
-		struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-
-		omac_idx = mvif->omac_idx;
-		wmm_idx = mvif->wmm_idx;
-	}
-
-	if (sta) {
-		struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;
-
-		tx_count = msta->rate_count;
-	}
-
-	if (phy_idx && dev->mt76.phys[MT_BAND1])
-		mphy = dev->mt76.phys[MT_BAND1];
-
-	fc_type = (le16_to_cpu(fc) & IEEE80211_FCTL_FTYPE) >> 2;
-	fc_stype = (le16_to_cpu(fc) & IEEE80211_FCTL_STYPE) >> 4;
-
-	if (beacon) {
-		p_fmt = MT_TX_TYPE_FW;
-		q_idx = phy_idx ? MT_LMAC_BCN1 : MT_LMAC_BCN0;
-	} else if (qid >= MT_TXQ_PSD) {
-		p_fmt = is_mmio ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
-		q_idx = phy_idx ? MT_LMAC_ALTX1 : MT_LMAC_ALTX0;
-	} else {
-		p_fmt = is_mmio ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
-		q_idx = wmm_idx * MT7615_MAX_WMM_SETS +
-			mt7615_lmac_mapping(dev, skb_get_queue_mapping(skb));
-	}
-
-	val = FIELD_PREP(MT_TXD0_TX_BYTES, skb->len + sz_txd) |
-	      FIELD_PREP(MT_TXD0_P_IDX, MT_TX_PORT_IDX_LMAC) |
-	      FIELD_PREP(MT_TXD0_Q_IDX, q_idx);
-	txwi[0] = cpu_to_le32(val);
-
-	val = MT_TXD1_LONG_FORMAT |
-	      FIELD_PREP(MT_TXD1_WLAN_IDX, wcid->idx) |
-	      FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_11) |
-	      FIELD_PREP(MT_TXD1_HDR_INFO,
-			 ieee80211_get_hdrlen_from_skb(skb) / 2) |
-	      FIELD_PREP(MT_TXD1_TID,
-			 skb->priority & IEEE80211_QOS_CTL_TID_MASK) |
-	      FIELD_PREP(MT_TXD1_PKT_FMT, p_fmt) |
-	      FIELD_PREP(MT_TXD1_OWN_MAC, omac_idx);
-	txwi[1] = cpu_to_le32(val);
-
-	val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
-	      FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype) |
-	      FIELD_PREP(MT_TXD2_MULTICAST, multicast);
-	if (key) {
-		if (multicast && ieee80211_is_robust_mgmt_frame(skb) &&
-		    key->cipher == WLAN_CIPHER_SUITE_AES_CMAC) {
-			val |= MT_TXD2_BIP;
-			txwi[3] = 0;
-		} else {
-			txwi[3] = cpu_to_le32(MT_TXD3_PROTECT_FRAME);
-		}
-	} else {
-		txwi[3] = 0;
-	}
-	txwi[2] = cpu_to_le32(val);
-
-	if (!(info->flags & IEEE80211_TX_CTL_AMPDU))
-		txwi[2] |= cpu_to_le32(MT_TXD2_BA_DISABLE);
-
-	txwi[4] = 0;
-	txwi[6] = 0;
-
-	if (rate->idx >= 0 && rate->count &&
-	    !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE)) {
-		bool stbc = info->flags & IEEE80211_TX_CTL_STBC;
-		u8 bw;
-		u16 rateval = mt7615_mac_tx_rate_val(dev, mphy, rate, stbc,
-						     &bw);
-
-		txwi[2] |= cpu_to_le32(MT_TXD2_FIX_RATE);
-
-		val = MT_TXD6_FIXED_BW |
-		      FIELD_PREP(MT_TXD6_BW, bw) |
-		      FIELD_PREP(MT_TXD6_TX_RATE, rateval);
-		txwi[6] |= cpu_to_le32(val);
-
-		if (rate->flags & IEEE80211_TX_RC_SHORT_GI)
-			txwi[6] |= cpu_to_le32(MT_TXD6_SGI);
-
-		if (info->flags & IEEE80211_TX_CTL_LDPC)
-			txwi[6] |= cpu_to_le32(MT_TXD6_LDPC);
-
-		if (!(rate->flags & (IEEE80211_TX_RC_MCS |
-				     IEEE80211_TX_RC_VHT_MCS)))
-			txwi[2] |= cpu_to_le32(MT_TXD2_BA_DISABLE);
-
-		tx_count = rate->count;
-	}
-
-	if (!ieee80211_is_beacon(fc)) {
-		struct ieee80211_hw *hw = mt76_hw(dev);
-
-		val = MT_TXD5_TX_STATUS_HOST | FIELD_PREP(MT_TXD5_PID, pid);
-		if (!ieee80211_hw_check(hw, SUPPORTS_PS))
-			val |= MT_TXD5_SW_POWER_MGMT;
-		txwi[5] = cpu_to_le32(val);
-	} else {
-		txwi[5] = 0;
-		/* use maximum tx count for beacons */
-		tx_count = 0x1f;
-	}
-
-	val = FIELD_PREP(MT_TXD3_REM_TX_COUNT, tx_count);
-	if (info->flags & IEEE80211_TX_CTL_INJECTED) {
-		seqno = le16_to_cpu(hdr->seq_ctrl);
-
-		if (ieee80211_is_back_req(hdr->frame_control)) {
-			struct ieee80211_bar *bar;
-
-			bar = (struct ieee80211_bar *)skb->data;
-			seqno = le16_to_cpu(bar->start_seq_num);
-		}
-
-		val |= MT_TXD3_SN_VALID |
-		       FIELD_PREP(MT_TXD3_SEQ, IEEE80211_SEQ_TO_SN(seqno));
-	}
-
-	txwi[3] |= cpu_to_le32(val);
-
-	if (info->flags & IEEE80211_TX_CTL_NO_ACK)
-		txwi[3] |= cpu_to_le32(MT_TXD3_NO_ACK);
-
-	val = FIELD_PREP(MT_TXD7_TYPE, fc_type) |
-	      FIELD_PREP(MT_TXD7_SUB_TYPE, fc_stype) |
-	      FIELD_PREP(MT_TXD7_SPE_IDX, 0x18);
-	txwi[7] = cpu_to_le32(val);
-	if (!is_mmio) {
-		val = FIELD_PREP(MT_TXD8_L_TYPE, fc_type) |
-		      FIELD_PREP(MT_TXD8_L_SUB_TYPE, fc_stype);
-		txwi[8] = cpu_to_le32(val);
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt7615_mac_write_txwi);
-
-bool mt7615_mac_wtbl_update(struct mt7615_dev *dev, int idx, u32 mask)
-{
-	mt76_rmw(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_WLAN_IDX,
-		 FIELD_PREP(MT_WTBL_UPDATE_WLAN_IDX, idx) | mask);
-
-	return mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY,
-			 0, 5000);
-}
-
-void mt7615_mac_sta_poll(struct mt7615_dev *dev)
-{
-	static const u8 ac_to_tid[4] = {
-		[IEEE80211_AC_BE] = 0,
-		[IEEE80211_AC_BK] = 1,
-		[IEEE80211_AC_VI] = 4,
-		[IEEE80211_AC_VO] = 6
-	};
-	static const u8 hw_queue_map[] = {
-		[IEEE80211_AC_BK] = 0,
-		[IEEE80211_AC_BE] = 1,
-		[IEEE80211_AC_VI] = 2,
-		[IEEE80211_AC_VO] = 3,
-	};
-	struct ieee80211_sta *sta;
-	struct mt7615_sta *msta;
-	u32 addr, tx_time[4], rx_time[4];
-	struct list_head sta_poll_list;
-	int i;
-
-	INIT_LIST_HEAD(&sta_poll_list);
-	spin_lock_bh(&dev->sta_poll_lock);
-	list_splice_init(&dev->sta_poll_list, &sta_poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	while (!list_empty(&sta_poll_list)) {
-		bool clear = false;
-
-		msta = list_first_entry(&sta_poll_list, struct mt7615_sta,
-					poll_list);
-		list_del_init(&msta->poll_list);
-
-		addr = mt7615_mac_wtbl_addr(dev, msta->wcid.idx) + 19 * 4;
-
-		for (i = 0; i < 4; i++, addr += 8) {
-			u32 tx_last = msta->airtime_ac[i];
-			u32 rx_last = msta->airtime_ac[i + 4];
-
-			msta->airtime_ac[i] = mt76_rr(dev, addr);
-			msta->airtime_ac[i + 4] = mt76_rr(dev, addr + 4);
-			tx_time[i] = msta->airtime_ac[i] - tx_last;
-			rx_time[i] = msta->airtime_ac[i + 4] - rx_last;
-
-			if ((tx_last | rx_last) & BIT(30))
-				clear = true;
-		}
-
-		if (clear) {
-			mt7615_mac_wtbl_update(dev, msta->wcid.idx,
-					       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-			memset(msta->airtime_ac, 0, sizeof(msta->airtime_ac));
-		}
-
-		if (!msta->wcid.sta)
-			continue;
-
-		sta = container_of((void *)msta, struct ieee80211_sta,
-				   drv_priv);
-		for (i = 0; i < 4; i++) {
-			u32 tx_cur = tx_time[i];
-			u32 rx_cur = rx_time[hw_queue_map[i]];
-			u8 tid = ac_to_tid[i];
-
-			if (!tx_cur && !rx_cur)
-				continue;
-
-			ieee80211_sta_register_airtime(sta, tid, tx_cur,
-						       rx_cur);
-		}
-	}
-}
-EXPORT_SYMBOL_GPL(mt7615_mac_sta_poll);
-
-static void
-mt7615_mac_update_rate_desc(struct mt7615_phy *phy, struct mt7615_sta *sta,
-			    struct ieee80211_tx_rate *probe_rate,
-			    struct ieee80211_tx_rate *rates,
-			    struct mt7615_rate_desc *rd)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct mt76_phy *mphy = phy->mt76;
-	struct ieee80211_tx_rate *ref;
-	bool rateset, stbc = false;
-	int n_rates = sta->n_rates;
-	u8 bw, bw_prev;
-	int i, j;
-
-	for (i = n_rates; i < 4; i++)
-		rates[i] = rates[n_rates - 1];
-
-	rateset = !(sta->rate_set_tsf & BIT(0));
-	memcpy(sta->rateset[rateset].rates, rates,
-	       sizeof(sta->rateset[rateset].rates));
-	if (probe_rate) {
-		sta->rateset[rateset].probe_rate = *probe_rate;
-		ref = &sta->rateset[rateset].probe_rate;
-	} else {
-		sta->rateset[rateset].probe_rate.idx = -1;
-		ref = &sta->rateset[rateset].rates[0];
-	}
-
-	rates = sta->rateset[rateset].rates;
-	for (i = 0; i < ARRAY_SIZE(sta->rateset[rateset].rates); i++) {
-		/*
-		 * We don't support switching between short and long GI
-		 * within the rate set. For accurate tx status reporting, we
-		 * need to make sure that flags match.
-		 * For improved performance, avoid duplicate entries by
-		 * decrementing the MCS index if necessary
-		 */
-		if ((ref->flags ^ rates[i].flags) & IEEE80211_TX_RC_SHORT_GI)
-			rates[i].flags ^= IEEE80211_TX_RC_SHORT_GI;
-
-		for (j = 0; j < i; j++) {
-			if (rates[i].idx != rates[j].idx)
-				continue;
-			if ((rates[i].flags ^ rates[j].flags) &
-			    (IEEE80211_TX_RC_40_MHZ_WIDTH |
-			     IEEE80211_TX_RC_80_MHZ_WIDTH |
-			     IEEE80211_TX_RC_160_MHZ_WIDTH))
-				continue;
-
-			if (!rates[i].idx)
-				continue;
-
-			rates[i].idx--;
-		}
-	}
-
-	rd->val[0] = mt7615_mac_tx_rate_val(dev, mphy, &rates[0], stbc, &bw);
-	bw_prev = bw;
-
-	if (probe_rate) {
-		rd->probe_val = mt7615_mac_tx_rate_val(dev, mphy, probe_rate,
-						       stbc, &bw);
-		if (bw)
-			rd->bw_idx = 1;
-		else
-			bw_prev = 0;
-	} else {
-		rd->probe_val = rd->val[0];
-	}
-
-	rd->val[1] = mt7615_mac_tx_rate_val(dev, mphy, &rates[1], stbc, &bw);
-	if (bw_prev) {
-		rd->bw_idx = 3;
-		bw_prev = bw;
-	}
-
-	rd->val[2] = mt7615_mac_tx_rate_val(dev, mphy, &rates[2], stbc, &bw);
-	if (bw_prev) {
-		rd->bw_idx = 5;
-		bw_prev = bw;
-	}
-
-	rd->val[3] = mt7615_mac_tx_rate_val(dev, mphy, &rates[3], stbc, &bw);
-	if (bw_prev)
-		rd->bw_idx = 7;
-
-	rd->rateset = rateset;
-	rd->bw = bw;
-}
-
-static int
-mt7615_mac_queue_rate_update(struct mt7615_phy *phy, struct mt7615_sta *sta,
-			     struct ieee80211_tx_rate *probe_rate,
-			     struct ieee80211_tx_rate *rates)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct mt7615_wtbl_rate_desc *wrd;
-
-	if (work_pending(&dev->rate_work))
-		return -EBUSY;
-
-	wrd = kzalloc(sizeof(*wrd), GFP_ATOMIC);
-	if (!wrd)
-		return -ENOMEM;
-
-	wrd->sta = sta;
-	mt7615_mac_update_rate_desc(phy, sta, probe_rate, rates,
-				    &wrd->rate);
-	list_add_tail(&wrd->node, &dev->wrd_head);
-	queue_work(dev->mt76.wq, &dev->rate_work);
-
-	return 0;
-}
-
-u32 mt7615_mac_get_sta_tid_sn(struct mt7615_dev *dev, int wcid, u8 tid)
-{
-	u32 addr, val, val2;
-	u8 offset;
-
-	addr = mt7615_mac_wtbl_addr(dev, wcid) + 11 * 4;
-
-	offset = tid * 12;
-	addr += 4 * (offset / 32);
-	offset %= 32;
-
-	val = mt76_rr(dev, addr);
-	val >>= offset;
-
-	if (offset > 20) {
-		addr += 4;
-		val2 = mt76_rr(dev, addr);
-		val |= val2 << (32 - offset);
-	}
-
-	return val & GENMASK(11, 0);
-}
-
-void mt7615_mac_set_rates(struct mt7615_phy *phy, struct mt7615_sta *sta,
-			  struct ieee80211_tx_rate *probe_rate,
-			  struct ieee80211_tx_rate *rates)
-{
-	int wcid = sta->wcid.idx, n_rates = sta->n_rates;
-	struct mt7615_dev *dev = phy->dev;
-	struct mt7615_rate_desc rd;
-	u32 w5, w27, addr;
-	u16 idx = sta->vif->mt76.omac_idx;
-
-	if (!mt76_is_mmio(&dev->mt76)) {
-		mt7615_mac_queue_rate_update(phy, sta, probe_rate, rates);
-		return;
-	}
-
-	if (!mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000))
-		return;
-
-	memset(&rd, 0, sizeof(struct mt7615_rate_desc));
-	mt7615_mac_update_rate_desc(phy, sta, probe_rate, rates, &rd);
-
-	addr = mt7615_mac_wtbl_addr(dev, wcid);
-	w27 = mt76_rr(dev, addr + 27 * 4);
-	w27 &= ~MT_WTBL_W27_CC_BW_SEL;
-	w27 |= FIELD_PREP(MT_WTBL_W27_CC_BW_SEL, rd.bw);
-
-	w5 = mt76_rr(dev, addr + 5 * 4);
-	w5 &= ~(MT_WTBL_W5_BW_CAP | MT_WTBL_W5_CHANGE_BW_RATE |
-		MT_WTBL_W5_MPDU_OK_COUNT |
-		MT_WTBL_W5_MPDU_FAIL_COUNT |
-		MT_WTBL_W5_RATE_IDX);
-	w5 |= FIELD_PREP(MT_WTBL_W5_BW_CAP, rd.bw) |
-	      FIELD_PREP(MT_WTBL_W5_CHANGE_BW_RATE,
-			 rd.bw_idx ? rd.bw_idx - 1 : 7);
-
-	mt76_wr(dev, MT_WTBL_RIUCR0, w5);
-
-	mt76_wr(dev, MT_WTBL_RIUCR1,
-		FIELD_PREP(MT_WTBL_RIUCR1_RATE0, rd.probe_val) |
-		FIELD_PREP(MT_WTBL_RIUCR1_RATE1, rd.val[0]) |
-		FIELD_PREP(MT_WTBL_RIUCR1_RATE2_LO, rd.val[1]));
-
-	mt76_wr(dev, MT_WTBL_RIUCR2,
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE2_HI, rd.val[1] >> 8) |
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE3, rd.val[1]) |
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE4, rd.val[2]) |
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE5_LO, rd.val[2]));
-
-	mt76_wr(dev, MT_WTBL_RIUCR3,
-		FIELD_PREP(MT_WTBL_RIUCR3_RATE5_HI, rd.val[2] >> 4) |
-		FIELD_PREP(MT_WTBL_RIUCR3_RATE6, rd.val[3]) |
-		FIELD_PREP(MT_WTBL_RIUCR3_RATE7, rd.val[3]));
-
-	mt76_wr(dev, MT_WTBL_UPDATE,
-		FIELD_PREP(MT_WTBL_UPDATE_WLAN_IDX, wcid) |
-		MT_WTBL_UPDATE_RATE_UPDATE |
-		MT_WTBL_UPDATE_TX_COUNT_CLEAR);
-
-	mt76_wr(dev, addr + 27 * 4, w27);
-
-	idx = idx > HW_BSSID_MAX ? HW_BSSID_0 : idx;
-	addr = idx > 1 ? MT_LPON_TCR2(idx): MT_LPON_TCR0(idx);
-
-	mt76_rmw(dev, addr, MT_LPON_TCR_MODE, MT_LPON_TCR_READ); /* TSF read */
-	sta->rate_set_tsf = mt76_rr(dev, MT_LPON_UTTR0) & ~BIT(0);
-	sta->rate_set_tsf |= rd.rateset;
-
-	if (!(sta->wcid.tx_info & MT_WCID_TX_INFO_SET))
-		mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000);
-
-	sta->rate_count = 2 * MT7615_RATE_RETRY * n_rates;
-	sta->wcid.tx_info |= MT_WCID_TX_INFO_SET;
-	sta->rate_probe = !!probe_rate;
-}
-EXPORT_SYMBOL_GPL(mt7615_mac_set_rates);
-
-static int
-mt7615_mac_wtbl_update_key(struct mt7615_dev *dev, struct mt76_wcid *wcid,
-			   struct ieee80211_key_conf *key,
-			   enum mt76_cipher_type cipher, u16 cipher_mask,
-			   enum set_key_cmd cmd)
-{
-	u32 addr = mt7615_mac_wtbl_addr(dev, wcid->idx) + 30 * 4;
-	u8 data[32] = {};
-
-	if (key->keylen > sizeof(data))
-		return -EINVAL;
-
-	mt76_rr_copy(dev, addr, data, sizeof(data));
-	if (cmd == SET_KEY) {
-		if (cipher == MT_CIPHER_TKIP) {
-			/* Rx/Tx MIC keys are swapped */
-			memcpy(data, key->key, 16);
-			memcpy(data + 16, key->key + 24, 8);
-			memcpy(data + 24, key->key + 16, 8);
-		} else {
-			if (cipher_mask == BIT(cipher))
-				memcpy(data, key->key, key->keylen);
-			else if (cipher != MT_CIPHER_BIP_CMAC_128)
-				memcpy(data, key->key, 16);
-			if (cipher == MT_CIPHER_BIP_CMAC_128)
-				memcpy(data + 16, key->key, 16);
-		}
-	} else {
-		if (cipher == MT_CIPHER_BIP_CMAC_128)
-			memset(data + 16, 0, 16);
-		else if (cipher_mask)
-			memset(data, 0, 16);
-		if (!cipher_mask)
-			memset(data, 0, sizeof(data));
-	}
-
-	mt76_wr_copy(dev, addr, data, sizeof(data));
-
-	return 0;
-}
-
-static int
-mt7615_mac_wtbl_update_pk(struct mt7615_dev *dev, struct mt76_wcid *wcid,
-			  enum mt76_cipher_type cipher, u16 cipher_mask,
-			  int keyidx, enum set_key_cmd cmd)
-{
-	u32 addr = mt7615_mac_wtbl_addr(dev, wcid->idx), w0, w1;
-
-	if (!mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000))
-		return -ETIMEDOUT;
-
-	w0 = mt76_rr(dev, addr);
-	w1 = mt76_rr(dev, addr + 4);
-
-	if (cipher_mask)
-		w0 |= MT_WTBL_W0_RX_KEY_VALID;
-	else
-		w0 &= ~(MT_WTBL_W0_RX_KEY_VALID | MT_WTBL_W0_KEY_IDX);
-	if (cipher_mask & BIT(MT_CIPHER_BIP_CMAC_128))
-		w0 |= MT_WTBL_W0_RX_IK_VALID;
-	else
-		w0 &= ~MT_WTBL_W0_RX_IK_VALID;
-
-	if (cmd == SET_KEY &&
-	    (cipher != MT_CIPHER_BIP_CMAC_128 ||
-	     cipher_mask == BIT(cipher))) {
-		w0 &= ~MT_WTBL_W0_KEY_IDX;
-		w0 |= FIELD_PREP(MT_WTBL_W0_KEY_IDX, keyidx);
-	}
-
-	mt76_wr(dev, MT_WTBL_RICR0, w0);
-	mt76_wr(dev, MT_WTBL_RICR1, w1);
-
-	if (!mt7615_mac_wtbl_update(dev, wcid->idx,
-				    MT_WTBL_UPDATE_RXINFO_UPDATE))
-		return -ETIMEDOUT;
-
-	return 0;
-}
-
-static void
-mt7615_mac_wtbl_update_cipher(struct mt7615_dev *dev, struct mt76_wcid *wcid,
-			      enum mt76_cipher_type cipher, u16 cipher_mask,
-			      enum set_key_cmd cmd)
-{
-	u32 addr = mt7615_mac_wtbl_addr(dev, wcid->idx);
-
-	if (!cipher_mask) {
-		mt76_clear(dev, addr + 2 * 4, MT_WTBL_W2_KEY_TYPE);
-		return;
-	}
-
-	if (cmd != SET_KEY)
-		return;
-
-	if (cipher == MT_CIPHER_BIP_CMAC_128 &&
-	    cipher_mask & ~BIT(MT_CIPHER_BIP_CMAC_128))
-		return;
-
-	mt76_rmw(dev, addr + 2 * 4, MT_WTBL_W2_KEY_TYPE,
-		 FIELD_PREP(MT_WTBL_W2_KEY_TYPE, cipher));
-}
-
-int __mt7615_mac_wtbl_set_key(struct mt7615_dev *dev,
-			      struct mt76_wcid *wcid,
-			      struct ieee80211_key_conf *key,
-			      enum set_key_cmd cmd)
-{
-	enum mt76_cipher_type cipher;
-	u16 cipher_mask = wcid->cipher;
-	int err;
-
-	cipher = mt7615_mac_get_cipher(key->cipher);
-	if (cipher == MT_CIPHER_NONE)
-		return -EOPNOTSUPP;
-
-	if (cmd == SET_KEY)
-		cipher_mask |= BIT(cipher);
-	else
-		cipher_mask &= ~BIT(cipher);
-
-	mt7615_mac_wtbl_update_cipher(dev, wcid, cipher, cipher_mask, cmd);
-	err = mt7615_mac_wtbl_update_key(dev, wcid, key, cipher, cipher_mask,
-					 cmd);
-	if (err < 0)
-		return err;
-
-	err = mt7615_mac_wtbl_update_pk(dev, wcid, cipher, cipher_mask,
-					key->keyidx, cmd);
-	if (err < 0)
-		return err;
-
-	wcid->cipher = cipher_mask;
-
-	return 0;
-}
-
-int mt7615_mac_wtbl_set_key(struct mt7615_dev *dev,
-			    struct mt76_wcid *wcid,
-			    struct ieee80211_key_conf *key,
-			    enum set_key_cmd cmd)
-{
-	int err;
-
-	spin_lock_bh(&dev->mt76.lock);
-	err = __mt7615_mac_wtbl_set_key(dev, wcid, key, cmd);
-	spin_unlock_bh(&dev->mt76.lock);
-
-	return err;
-}
-
-static bool mt7615_fill_txs(struct mt7615_dev *dev, struct mt7615_sta *sta,
-			    struct ieee80211_tx_info *info, __le32 *txs_data)
-{
-	struct ieee80211_supported_band *sband;
-	struct mt7615_rate_set *rs;
-	struct mt76_phy *mphy;
-	int first_idx = 0, last_idx;
-	int i, idx, count;
-	bool fixed_rate, ack_timeout;
-	bool ampdu, cck = false;
-	bool rs_idx;
-	u32 rate_set_tsf;
-	u32 final_rate, final_rate_flags, final_nss, txs;
-
-	txs = le32_to_cpu(txs_data[1]);
-	ampdu = txs & MT_TXS1_AMPDU;
-
-	txs = le32_to_cpu(txs_data[3]);
-	count = FIELD_GET(MT_TXS3_TX_COUNT, txs);
-	last_idx = FIELD_GET(MT_TXS3_LAST_TX_RATE, txs);
-
-	txs = le32_to_cpu(txs_data[0]);
-	fixed_rate = txs & MT_TXS0_FIXED_RATE;
-	final_rate = FIELD_GET(MT_TXS0_TX_RATE, txs);
-	ack_timeout = txs & MT_TXS0_ACK_TIMEOUT;
-
-	if (!ampdu && (txs & MT_TXS0_RTS_TIMEOUT))
-		return false;
-
-	if (txs & MT_TXS0_QUEUE_TIMEOUT)
-		return false;
-
-	if (!ack_timeout)
-		info->flags |= IEEE80211_TX_STAT_ACK;
-
-	info->status.ampdu_len = 1;
-	info->status.ampdu_ack_len = !!(info->flags &
-					IEEE80211_TX_STAT_ACK);
-
-	if (ampdu || (info->flags & IEEE80211_TX_CTL_AMPDU))
-		info->flags |= IEEE80211_TX_STAT_AMPDU | IEEE80211_TX_CTL_AMPDU;
-
-	first_idx = max_t(int, 0, last_idx - (count - 1) / MT7615_RATE_RETRY);
-
-	if (fixed_rate) {
-		info->status.rates[0].count = count;
-		i = 0;
-		goto out;
-	}
-
-	rate_set_tsf = READ_ONCE(sta->rate_set_tsf);
-	rs_idx = !((u32)(le32_get_bits(txs_data[4], MT_TXS4_F0_TIMESTAMP) -
-			 rate_set_tsf) < 1000000);
-	rs_idx ^= rate_set_tsf & BIT(0);
-	rs = &sta->rateset[rs_idx];
-
-	if (!first_idx && rs->probe_rate.idx >= 0) {
-		info->status.rates[0] = rs->probe_rate;
-
-		spin_lock_bh(&dev->mt76.lock);
-		if (sta->rate_probe) {
-			struct mt7615_phy *phy = &dev->phy;
-
-			if (sta->wcid.phy_idx && dev->mt76.phys[MT_BAND1])
-				phy = dev->mt76.phys[MT_BAND1]->priv;
-
-			mt7615_mac_set_rates(phy, sta, NULL, sta->rates);
-		}
-		spin_unlock_bh(&dev->mt76.lock);
-	} else {
-		info->status.rates[0] = rs->rates[first_idx / 2];
-	}
-	info->status.rates[0].count = 0;
-
-	for (i = 0, idx = first_idx; count && idx <= last_idx; idx++) {
-		struct ieee80211_tx_rate *cur_rate;
-		int cur_count;
-
-		cur_rate = &rs->rates[idx / 2];
-		cur_count = min_t(int, MT7615_RATE_RETRY, count);
-		count -= cur_count;
-
-		if (idx && (cur_rate->idx != info->status.rates[i].idx ||
-			    cur_rate->flags != info->status.rates[i].flags)) {
-			i++;
-			if (i == ARRAY_SIZE(info->status.rates)) {
-				i--;
-				break;
-			}
-
-			info->status.rates[i] = *cur_rate;
-			info->status.rates[i].count = 0;
-		}
-
-		info->status.rates[i].count += cur_count;
-	}
-
-out:
-	final_rate_flags = info->status.rates[i].flags;
-
-	switch (FIELD_GET(MT_TX_RATE_MODE, final_rate)) {
-	case MT_PHY_TYPE_CCK:
-		cck = true;
-		fallthrough;
-	case MT_PHY_TYPE_OFDM:
-		mphy = &dev->mphy;
-		if (sta->wcid.phy_idx && dev->mt76.phys[MT_BAND1])
-			mphy = dev->mt76.phys[MT_BAND1];
-
-		if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
-			sband = &mphy->sband_5g.sband;
-		else
-			sband = &mphy->sband_2g.sband;
-		final_rate &= MT_TX_RATE_IDX;
-		final_rate = mt76_get_rate(&dev->mt76, sband, final_rate,
-					   cck);
-		final_rate_flags = 0;
-		break;
-	case MT_PHY_TYPE_HT_GF:
-	case MT_PHY_TYPE_HT:
-		final_rate_flags |= IEEE80211_TX_RC_MCS;
-		final_rate &= MT_TX_RATE_IDX;
-		if (final_rate > 31)
-			return false;
-		break;
-	case MT_PHY_TYPE_VHT:
-		final_nss = FIELD_GET(MT_TX_RATE_NSS, final_rate);
-
-		if ((final_rate & MT_TX_RATE_STBC) && final_nss)
-			final_nss--;
-
-		final_rate_flags |= IEEE80211_TX_RC_VHT_MCS;
-		final_rate = (final_rate & MT_TX_RATE_IDX) | (final_nss << 4);
-		break;
-	default:
-		return false;
-	}
-
-	info->status.rates[i].idx = final_rate;
-	info->status.rates[i].flags = final_rate_flags;
-
-	return true;
-}
-
-static bool mt7615_mac_add_txs_skb(struct mt7615_dev *dev,
-				   struct mt7615_sta *sta, int pid,
-				   __le32 *txs_data)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	struct sk_buff_head list;
-	struct sk_buff *skb;
-
-	if (pid < MT_PACKET_ID_FIRST)
-		return false;
-
-	trace_mac_txdone(mdev, sta->wcid.idx, pid);
-
-	mt76_tx_status_lock(mdev, &list);
-	skb = mt76_tx_status_skb_get(mdev, &sta->wcid, pid, &list);
-	if (skb) {
-		struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-
-		if (!mt7615_fill_txs(dev, sta, info, txs_data)) {
-			info->status.rates[0].count = 0;
-			info->status.rates[0].idx = -1;
-		}
-
-		mt76_tx_status_skb_done(mdev, skb, &list);
-	}
-	mt76_tx_status_unlock(mdev, &list);
-
-	return !!skb;
-}
-
-static void mt7615_mac_add_txs(struct mt7615_dev *dev, void *data)
-{
-	struct ieee80211_tx_info info = {};
-	struct ieee80211_sta *sta = NULL;
-	struct mt7615_sta *msta = NULL;
-	struct mt76_wcid *wcid;
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	__le32 *txs_data = data;
-	u8 wcidx;
-	u8 pid;
-
-	pid = le32_get_bits(txs_data[0], MT_TXS0_PID);
-	wcidx = le32_get_bits(txs_data[2], MT_TXS2_WCID);
-
-	if (pid == MT_PACKET_ID_NO_ACK)
-		return;
-
-	if (wcidx >= MT7615_WTBL_SIZE)
-		return;
-
-	rcu_read_lock();
-
-	wcid = rcu_dereference(dev->mt76.wcid[wcidx]);
-	if (!wcid)
-		goto out;
-
-	msta = container_of(wcid, struct mt7615_sta, wcid);
-	sta = wcid_to_sta(wcid);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (list_empty(&msta->poll_list))
-		list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	if (mt7615_mac_add_txs_skb(dev, msta, pid, txs_data))
-		goto out;
-
-	if (wcidx >= MT7615_WTBL_STA || !sta)
-		goto out;
-
-	if (wcid->phy_idx && dev->mt76.phys[MT_BAND1])
-		mphy = dev->mt76.phys[MT_BAND1];
-
-	if (mt7615_fill_txs(dev, msta, &info, txs_data))
-		ieee80211_tx_status_noskb(mphy->hw, sta, &info);
-
-out:
-	rcu_read_unlock();
-}
-
-static void
-mt7615_txwi_free(struct mt7615_dev *dev, struct mt76_txwi_cache *txwi)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	__le32 *txwi_data;
-	u32 val;
-	u8 wcid;
-
-	mt76_connac_txp_skb_unmap(mdev, txwi);
-	if (!txwi->skb)
-		goto out;
-
-	txwi_data = (__le32 *)mt76_get_txwi_ptr(mdev, txwi);
-	val = le32_to_cpu(txwi_data[1]);
-	wcid = FIELD_GET(MT_TXD1_WLAN_IDX, val);
-	mt76_tx_complete_skb(mdev, wcid, txwi->skb);
-
-out:
-	txwi->skb = NULL;
-	mt76_put_txwi(mdev, txwi);
-}
-
-static void
-mt7615_mac_tx_free_token(struct mt7615_dev *dev, u16 token)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt76_txwi_cache *txwi;
-
-	trace_mac_tx_free(dev, token);
-	txwi = mt76_token_put(mdev, token);
-	if (!txwi)
-		return;
-
-	mt7615_txwi_free(dev, txwi);
-}
-
-static void mt7615_mac_tx_free(struct mt7615_dev *dev, void *data, int len)
-{
-	struct mt76_connac_tx_free *free = data;
-	void *tx_token = data + sizeof(*free);
-	void *end = data + len;
-	u8 i, count;
-
-	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_PSD], false);
-	if (is_mt7615(&dev->mt76)) {
-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_BE], false);
-	} else {
-		for (i = 0; i < IEEE80211_NUM_ACS; i++)
-			mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], false);
-	}
-
-	count = le16_get_bits(free->ctrl, MT_TX_FREE_MSDU_ID_CNT);
-	if (is_mt7615(&dev->mt76)) {
-		__le16 *token = tx_token;
-
-		if (WARN_ON_ONCE((void *)&token[count] > end))
-			return;
-
-		for (i = 0; i < count; i++)
-			mt7615_mac_tx_free_token(dev, le16_to_cpu(token[i]));
-	} else {
-		__le32 *token = tx_token;
-
-		if (WARN_ON_ONCE((void *)&token[count] > end))
-			return;
-
-		for (i = 0; i < count; i++)
-			mt7615_mac_tx_free_token(dev, le32_to_cpu(token[i]));
-	}
-
-	rcu_read_lock();
-	mt7615_mac_sta_poll(dev);
-	rcu_read_unlock();
-
-	mt76_worker_schedule(&dev->mt76.tx_worker);
-}
-
-bool mt7615_rx_check(struct mt76_dev *mdev, void *data, int len)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	__le32 *rxd = (__le32 *)data;
-	__le32 *end = (__le32 *)&rxd[len / 4];
-	enum rx_pkt_type type;
-
-	type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
-
-	switch (type) {
-	case PKT_TYPE_TXRX_NOTIFY:
-		mt7615_mac_tx_free(dev, data, len);
-		return false;
-	case PKT_TYPE_TXS:
-		for (rxd++; rxd + 7 <= end; rxd += 7)
-			mt7615_mac_add_txs(dev, rxd);
-		return false;
-	default:
-		return true;
-	}
-}
-EXPORT_SYMBOL_GPL(mt7615_rx_check);
-
-void mt7615_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			 struct sk_buff *skb)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	__le32 *rxd = (__le32 *)skb->data;
-	__le32 *end = (__le32 *)&skb->data[skb->len];
-	enum rx_pkt_type type;
-	u16 flag;
-
-	type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
-	flag = le32_get_bits(rxd[0], MT_RXD0_PKT_FLAG);
-	if (type == PKT_TYPE_RX_EVENT && flag == 0x1)
-		type = PKT_TYPE_NORMAL_MCU;
-
-	switch (type) {
-	case PKT_TYPE_TXS:
-		for (rxd++; rxd + 7 <= end; rxd += 7)
-			mt7615_mac_add_txs(dev, rxd);
-		dev_kfree_skb(skb);
-		break;
-	case PKT_TYPE_TXRX_NOTIFY:
-		mt7615_mac_tx_free(dev, skb->data, skb->len);
-		dev_kfree_skb(skb);
-		break;
-	case PKT_TYPE_RX_EVENT:
-		mt7615_mcu_rx_event(dev, skb);
-		break;
-	case PKT_TYPE_NORMAL_MCU:
-	case PKT_TYPE_NORMAL:
-		if (!mt7615_mac_fill_rx(dev, skb)) {
-			mt76_rx(&dev->mt76, q, skb);
-			return;
-		}
-		fallthrough;
-	default:
-		dev_kfree_skb(skb);
-		break;
-	}
-}
-EXPORT_SYMBOL_GPL(mt7615_queue_rx_skb);
-
-static void
-mt7615_mac_set_sensitivity(struct mt7615_phy *phy, int val, bool ofdm)
-{
-	struct mt7615_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-
-	if (is_mt7663(&dev->mt76)) {
-		if (ofdm)
-			mt76_rmw(dev, MT7663_WF_PHY_MIN_PRI_PWR(ext_phy),
-				 MT_WF_PHY_PD_OFDM_MASK(0),
-				 MT_WF_PHY_PD_OFDM(0, val));
-		else
-			mt76_rmw(dev, MT7663_WF_PHY_RXTD_CCK_PD(ext_phy),
-				 MT_WF_PHY_PD_CCK_MASK(ext_phy),
-				 MT_WF_PHY_PD_CCK(ext_phy, val));
-		return;
-	}
-
-	if (ofdm)
-		mt76_rmw(dev, MT_WF_PHY_MIN_PRI_PWR(ext_phy),
-			 MT_WF_PHY_PD_OFDM_MASK(ext_phy),
-			 MT_WF_PHY_PD_OFDM(ext_phy, val));
-	else
-		mt76_rmw(dev, MT_WF_PHY_RXTD_CCK_PD(ext_phy),
-			 MT_WF_PHY_PD_CCK_MASK(ext_phy),
-			 MT_WF_PHY_PD_CCK(ext_phy, val));
-}
-
-static void
-mt7615_mac_set_default_sensitivity(struct mt7615_phy *phy)
-{
-	/* ofdm */
-	mt7615_mac_set_sensitivity(phy, 0x13c, true);
-	/* cck */
-	mt7615_mac_set_sensitivity(phy, 0x92, false);
-
-	phy->ofdm_sensitivity = -98;
-	phy->cck_sensitivity = -110;
-	phy->last_cca_adj = jiffies;
-}
-
-void mt7615_mac_set_scs(struct mt7615_phy *phy, bool enable)
-{
-	struct mt7615_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-	u32 reg, mask;
-
-	mt7615_mutex_acquire(dev);
-
-	if (phy->scs_en == enable)
-		goto out;
-
-	if (is_mt7663(&dev->mt76)) {
-		reg = MT7663_WF_PHY_MIN_PRI_PWR(ext_phy);
-		mask = MT_WF_PHY_PD_BLK(0);
-	} else {
-		reg = MT_WF_PHY_MIN_PRI_PWR(ext_phy);
-		mask = MT_WF_PHY_PD_BLK(ext_phy);
-	}
-
-	if (enable) {
-		mt76_set(dev, reg, mask);
-		if (is_mt7622(&dev->mt76)) {
-			mt76_set(dev, MT_MIB_M0_MISC_CR(0), 0x7 << 8);
-			mt76_set(dev, MT_MIB_M0_MISC_CR(0), 0x7);
-		}
-	} else {
-		mt76_clear(dev, reg, mask);
-	}
-
-	mt7615_mac_set_default_sensitivity(phy);
-	phy->scs_en = enable;
-
-out:
-	mt7615_mutex_release(dev);
-}
-
-void mt7615_mac_enable_nf(struct mt7615_dev *dev, bool ext_phy)
-{
-	u32 rxtd, reg;
-
-	if (is_mt7663(&dev->mt76))
-		reg = MT7663_WF_PHY_R0_PHYMUX_5;
-	else
-		reg = MT_WF_PHY_R0_PHYMUX_5(ext_phy);
-
-	if (ext_phy)
-		rxtd = MT_WF_PHY_RXTD2(10);
-	else
-		rxtd = MT_WF_PHY_RXTD(12);
-
-	mt76_set(dev, rxtd, BIT(18) | BIT(29));
-	mt76_set(dev, reg, 0x5 << 12);
-}
-
-void mt7615_mac_cca_stats_reset(struct mt7615_phy *phy)
-{
-	struct mt7615_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-	u32 reg;
-
-	if (is_mt7663(&dev->mt76))
-		reg = MT7663_WF_PHY_R0_PHYMUX_5;
-	else
-		reg = MT_WF_PHY_R0_PHYMUX_5(ext_phy);
-
-	/* reset PD and MDRDY counters */
-	mt76_clear(dev, reg, GENMASK(22, 20));
-	mt76_set(dev, reg, BIT(22) | BIT(20));
-}
-
-static void
-mt7615_mac_adjust_sensitivity(struct mt7615_phy *phy,
-			      u32 rts_err_rate, bool ofdm)
-{
-	struct mt7615_dev *dev = phy->dev;
-	int false_cca = ofdm ? phy->false_cca_ofdm : phy->false_cca_cck;
-	bool ext_phy = phy != &dev->phy;
-	s16 def_th = ofdm ? -98 : -110;
-	bool update = false;
-	s8 *sensitivity;
-	int signal;
-
-	sensitivity = ofdm ? &phy->ofdm_sensitivity : &phy->cck_sensitivity;
-	signal = mt76_get_min_avg_rssi(&dev->mt76, ext_phy);
-	if (!signal) {
-		mt7615_mac_set_default_sensitivity(phy);
-		return;
-	}
-
-	signal = min(signal, -72);
-	if (false_cca > 500) {
-		if (rts_err_rate > MT_FRAC(40, 100))
-			return;
-
-		/* decrease coverage */
-		if (*sensitivity == def_th && signal > -90) {
-			*sensitivity = -90;
-			update = true;
-		} else if (*sensitivity + 2 < signal) {
-			*sensitivity += 2;
-			update = true;
-		}
-	} else if ((false_cca > 0 && false_cca < 50) ||
-		   rts_err_rate > MT_FRAC(60, 100)) {
-		/* increase coverage */
-		if (*sensitivity - 2 >= def_th) {
-			*sensitivity -= 2;
-			update = true;
-		}
-	}
-
-	if (*sensitivity > signal) {
-		*sensitivity = signal;
-		update = true;
-	}
-
-	if (update) {
-		u16 val = ofdm ? *sensitivity * 2 + 512 : *sensitivity + 256;
-
-		mt7615_mac_set_sensitivity(phy, val, ofdm);
-		phy->last_cca_adj = jiffies;
-	}
-}
-
-static void
-mt7615_mac_scs_check(struct mt7615_phy *phy)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct mib_stats *mib = &phy->mib;
-	u32 val, rts_err_rate = 0;
-	u32 mdrdy_cck, mdrdy_ofdm, pd_cck, pd_ofdm;
-	bool ext_phy = phy != &dev->phy;
-
-	if (!phy->scs_en)
-		return;
-
-	if (is_mt7663(&dev->mt76))
-		val = mt76_rr(dev, MT7663_WF_PHY_R0_PHYCTRL_STS0(ext_phy));
-	else
-		val = mt76_rr(dev, MT_WF_PHY_R0_PHYCTRL_STS0(ext_phy));
-	pd_cck = FIELD_GET(MT_WF_PHYCTRL_STAT_PD_CCK, val);
-	pd_ofdm = FIELD_GET(MT_WF_PHYCTRL_STAT_PD_OFDM, val);
-
-	if (is_mt7663(&dev->mt76))
-		val = mt76_rr(dev, MT7663_WF_PHY_R0_PHYCTRL_STS5(ext_phy));
-	else
-		val = mt76_rr(dev, MT_WF_PHY_R0_PHYCTRL_STS5(ext_phy));
-	mdrdy_cck = FIELD_GET(MT_WF_PHYCTRL_STAT_MDRDY_CCK, val);
-	mdrdy_ofdm = FIELD_GET(MT_WF_PHYCTRL_STAT_MDRDY_OFDM, val);
-
-	phy->false_cca_ofdm = pd_ofdm - mdrdy_ofdm;
-	phy->false_cca_cck = pd_cck - mdrdy_cck;
-	mt7615_mac_cca_stats_reset(phy);
-
-	if (mib->rts_cnt + mib->rts_retries_cnt)
-		rts_err_rate = MT_FRAC(mib->rts_retries_cnt,
-				       mib->rts_cnt + mib->rts_retries_cnt);
-
-	/* cck */
-	mt7615_mac_adjust_sensitivity(phy, rts_err_rate, false);
-	/* ofdm */
-	mt7615_mac_adjust_sensitivity(phy, rts_err_rate, true);
-
-	if (time_after(jiffies, phy->last_cca_adj + 10 * HZ))
-		mt7615_mac_set_default_sensitivity(phy);
-}
-
-static u8
-mt7615_phy_get_nf(struct mt7615_dev *dev, int idx)
-{
-	static const u8 nf_power[] = { 92, 89, 86, 83, 80, 75, 70, 65, 60, 55, 52 };
-	u32 reg, val, sum = 0, n = 0;
-	int i;
-
-	if (is_mt7663(&dev->mt76))
-		reg = MT7663_WF_PHY_RXTD(20);
-	else
-		reg = idx ? MT_WF_PHY_RXTD2(17) : MT_WF_PHY_RXTD(20);
-
-	for (i = 0; i < ARRAY_SIZE(nf_power); i++, reg += 4) {
-		val = mt76_rr(dev, reg);
-		sum += val * nf_power[i];
-		n += val;
-	}
-
-	if (!n)
-		return 0;
-
-	return sum / n;
-}
-
-static void
-mt7615_phy_update_channel(struct mt76_phy *mphy, int idx)
-{
-	struct mt7615_dev *dev = container_of(mphy->dev, struct mt7615_dev, mt76);
-	struct mt7615_phy *phy = mphy->priv;
-	struct mt76_channel_state *state;
-	u64 busy_time, tx_time, rx_time, obss_time;
-	u32 obss_reg = idx ? MT_WF_RMAC_MIB_TIME6 : MT_WF_RMAC_MIB_TIME5;
-	int nf;
-
-	busy_time = mt76_get_field(dev, MT_MIB_SDR9(idx),
-				   MT_MIB_SDR9_BUSY_MASK);
-	tx_time = mt76_get_field(dev, MT_MIB_SDR36(idx),
-				 MT_MIB_SDR36_TXTIME_MASK);
-	rx_time = mt76_get_field(dev, MT_MIB_SDR37(idx),
-				 MT_MIB_SDR37_RXTIME_MASK);
-	obss_time = mt76_get_field(dev, obss_reg, MT_MIB_OBSSTIME_MASK);
-
-	nf = mt7615_phy_get_nf(dev, idx);
-	if (!phy->noise)
-		phy->noise = nf << 4;
-	else if (nf)
-		phy->noise += nf - (phy->noise >> 4);
-
-	state = mphy->chan_state;
-	state->cc_busy += busy_time;
-	state->cc_tx += tx_time;
-	state->cc_rx += rx_time + obss_time;
-	state->cc_bss_rx += rx_time;
-	state->noise = -(phy->noise >> 4);
-}
-
-static void mt7615_update_survey(struct mt7615_dev *dev)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt76_phy *mphy_ext = mdev->phys[MT_BAND1];
-	ktime_t cur_time;
-
-	/* MT7615 can only update both phys simultaneously
-	 * since some reisters are shared across bands.
-	 */
-
-	mt7615_phy_update_channel(&mdev->phy, 0);
-	if (mphy_ext)
-		mt7615_phy_update_channel(mphy_ext, 1);
-
-	cur_time = ktime_get_boottime();
-
-	mt76_update_survey_active_time(&mdev->phy, cur_time);
-	if (mphy_ext)
-		mt76_update_survey_active_time(mphy_ext, cur_time);
-
-	/* reset obss airtime */
-	mt76_set(dev, MT_WF_RMAC_MIB_TIME0, MT_WF_RMAC_MIB_RXTIME_CLR);
-}
-
-void mt7615_update_channel(struct mt76_phy *mphy)
-{
-	struct mt7615_dev *dev = container_of(mphy->dev, struct mt7615_dev, mt76);
-
-	if (mt76_connac_pm_wake(&dev->mphy, &dev->pm))
-		return;
-
-	mt7615_update_survey(dev);
-	mt76_connac_power_save_sched(&dev->mphy, &dev->pm);
-}
-EXPORT_SYMBOL_GPL(mt7615_update_channel);
-
-static void
-mt7615_mac_update_mib_stats(struct mt7615_phy *phy)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct mib_stats *mib = &phy->mib;
-	bool ext_phy = phy != &dev->phy;
-	int i, aggr;
-	u32 val, val2;
-
-	mib->fcs_err_cnt += mt76_get_field(dev, MT_MIB_SDR3(ext_phy),
-					   MT_MIB_SDR3_FCS_ERR_MASK);
-
-	val = mt76_get_field(dev, MT_MIB_SDR14(ext_phy),
-			     MT_MIB_AMPDU_MPDU_COUNT);
-	if (val) {
-		val2 = mt76_get_field(dev, MT_MIB_SDR15(ext_phy),
-				      MT_MIB_AMPDU_ACK_COUNT);
-		mib->aggr_per = 1000 * (val - val2) / val;
-	}
-
-	aggr = ext_phy ? ARRAY_SIZE(dev->mt76.aggr_stats) / 2 : 0;
-	for (i = 0; i < 4; i++) {
-		val = mt76_rr(dev, MT_MIB_MB_SDR1(ext_phy, i));
-		mib->ba_miss_cnt += FIELD_GET(MT_MIB_BA_MISS_COUNT_MASK, val);
-		mib->ack_fail_cnt += FIELD_GET(MT_MIB_ACK_FAIL_COUNT_MASK,
-					       val);
-
-		val = mt76_rr(dev, MT_MIB_MB_SDR0(ext_phy, i));
-		mib->rts_cnt += FIELD_GET(MT_MIB_RTS_COUNT_MASK, val);
-		mib->rts_retries_cnt += FIELD_GET(MT_MIB_RTS_RETRIES_COUNT_MASK,
-						  val);
-
-		val = mt76_rr(dev, MT_TX_AGG_CNT(ext_phy, i));
-		dev->mt76.aggr_stats[aggr++] += val & 0xffff;
-		dev->mt76.aggr_stats[aggr++] += val >> 16;
-	}
-}
-
-void mt7615_pm_wake_work(struct work_struct *work)
-{
-	struct mt7615_dev *dev;
-	struct mt76_phy *mphy;
-
-	dev = (struct mt7615_dev *)container_of(work, struct mt7615_dev,
-						pm.wake_work);
-	mphy = dev->phy.mt76;
-
-	if (!mt7615_mcu_set_drv_ctrl(dev)) {
-		struct mt76_dev *mdev = &dev->mt76;
-		int i;
-
-		if (mt76_is_sdio(mdev)) {
-			mt76_connac_pm_dequeue_skbs(mphy, &dev->pm);
-			mt76_worker_schedule(&mdev->sdio.txrx_worker);
-		} else {
-			local_bh_disable();
-			mt76_for_each_q_rx(mdev, i)
-				napi_schedule(&mdev->napi[i]);
-			local_bh_enable();
-			mt76_connac_pm_dequeue_skbs(mphy, &dev->pm);
-			mt76_queue_tx_cleanup(dev, mdev->q_mcu[MT_MCUQ_WM],
-					      false);
-		}
-
-		if (test_bit(MT76_STATE_RUNNING, &mphy->state)) {
-			unsigned long timeout;
-
-			timeout = mt7615_get_macwork_timeout(dev);
-			ieee80211_queue_delayed_work(mphy->hw, &mphy->mac_work,
-						     timeout);
-		}
-	}
-
-	ieee80211_wake_queues(mphy->hw);
-	wake_up(&dev->pm.wait);
-}
-
-void mt7615_pm_power_save_work(struct work_struct *work)
-{
-	struct mt7615_dev *dev;
-	unsigned long delta;
-
-	dev = (struct mt7615_dev *)container_of(work, struct mt7615_dev,
-						pm.ps_work.work);
-
-	delta = dev->pm.idle_timeout;
-	if (test_bit(MT76_HW_SCANNING, &dev->mphy.state) ||
-	    test_bit(MT76_HW_SCHED_SCANNING, &dev->mphy.state))
-		goto out;
-
-	if (mutex_is_locked(&dev->mt76.mutex))
-		/* if mt76 mutex is held we should not put the device
-		 * to sleep since we are currently accessing device
-		 * register map. We need to wait for the next power_save
-		 * trigger.
-		 */
-		goto out;
-
-	if (time_is_after_jiffies(dev->pm.last_activity + delta)) {
-		delta = dev->pm.last_activity + delta - jiffies;
-		goto out;
-	}
-
-	if (!mt7615_mcu_set_fw_ctrl(dev))
-		return;
-out:
-	queue_delayed_work(dev->mt76.wq, &dev->pm.ps_work, delta);
-}
-
-void mt7615_mac_work(struct work_struct *work)
-{
-	struct mt7615_phy *phy;
-	struct mt76_phy *mphy;
-	unsigned long timeout;
-
-	mphy = (struct mt76_phy *)container_of(work, struct mt76_phy,
-					       mac_work.work);
-	phy = mphy->priv;
-
-	mt7615_mutex_acquire(phy->dev);
-
-	mt7615_update_survey(phy->dev);
-	if (++mphy->mac_work_count == 5) {
-		mphy->mac_work_count = 0;
-
-		mt7615_mac_update_mib_stats(phy);
-		mt7615_mac_scs_check(phy);
-	}
-
-	mt7615_mutex_release(phy->dev);
-
-	mt76_tx_status_check(mphy->dev, false);
-
-	timeout = mt7615_get_macwork_timeout(phy->dev);
-	ieee80211_queue_delayed_work(mphy->hw, &mphy->mac_work, timeout);
-}
-
-void mt7615_tx_token_put(struct mt7615_dev *dev)
-{
-	struct mt76_txwi_cache *txwi;
-	int id;
-
-	spin_lock_bh(&dev->mt76.token_lock);
-	idr_for_each_entry(&dev->mt76.token, txwi, id)
-		mt7615_txwi_free(dev, txwi);
-	spin_unlock_bh(&dev->mt76.token_lock);
-	idr_destroy(&dev->mt76.token);
-}
-EXPORT_SYMBOL_GPL(mt7615_tx_token_put);
-
-static void mt7615_dfs_stop_radar_detector(struct mt7615_phy *phy)
-{
-	struct mt7615_dev *dev = phy->dev;
-
-	if (phy->rdd_state & BIT(0))
-		mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_STOP, 0,
-					MT_RX_SEL0, 0);
-	if (phy->rdd_state & BIT(1))
-		mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_STOP, 1,
-					MT_RX_SEL0, 0);
-}
-
-static int mt7615_dfs_start_rdd(struct mt7615_dev *dev, int chain)
-{
-	int err;
-
-	err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_START, chain,
-				      MT_RX_SEL0, 0);
-	if (err < 0)
-		return err;
-
-	return mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_DET_MODE, chain,
-				       MT_RX_SEL0, 1);
-}
-
-static int mt7615_dfs_start_radar_detector(struct mt7615_phy *phy)
-{
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	struct mt7615_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-	int err;
-
-	/* start CAC */
-	err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_CAC_START, ext_phy,
-				      MT_RX_SEL0, 0);
-	if (err < 0)
-		return err;
-
-	err = mt7615_dfs_start_rdd(dev, ext_phy);
-	if (err < 0)
-		return err;
-
-	phy->rdd_state |= BIT(ext_phy);
-
-	if (chandef->width == NL80211_CHAN_WIDTH_160 ||
-	    chandef->width == NL80211_CHAN_WIDTH_80P80) {
-		err = mt7615_dfs_start_rdd(dev, 1);
-		if (err < 0)
-			return err;
-
-		phy->rdd_state |= BIT(1);
-	}
-
-	return 0;
-}
-
-static int
-mt7615_dfs_init_radar_specs(struct mt7615_phy *phy)
-{
-	const struct mt7615_dfs_radar_spec *radar_specs;
-	struct mt7615_dev *dev = phy->dev;
-	int err, i, lpn = 500;
-
-	switch (dev->mt76.region) {
-	case NL80211_DFS_FCC:
-		radar_specs = &fcc_radar_specs;
-		lpn = 8;
-		break;
-	case NL80211_DFS_ETSI:
-		radar_specs = &etsi_radar_specs;
-		break;
-	case NL80211_DFS_JP:
-		radar_specs = &jp_radar_specs;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	/* avoid FCC radar detection in non-FCC region */
-	err = mt7615_mcu_set_fcc5_lpn(dev, lpn);
-	if (err < 0)
-		return err;
-
-	for (i = 0; i < ARRAY_SIZE(radar_specs->radar_pattern); i++) {
-		err = mt7615_mcu_set_radar_th(dev, i,
-					      &radar_specs->radar_pattern[i]);
-		if (err < 0)
-			return err;
-	}
-
-	return mt7615_mcu_set_pulse_th(dev, &radar_specs->pulse_th);
-}
-
-int mt7615_dfs_init_radar_detector(struct mt7615_phy *phy)
-{
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	struct mt7615_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-	enum mt76_dfs_state dfs_state, prev_state;
-	int err;
-
-	if (is_mt7663(&dev->mt76))
-		return 0;
-
-	prev_state = phy->mt76->dfs_state;
-	dfs_state = mt76_phy_dfs_state(phy->mt76);
-	if ((chandef->chan->flags & IEEE80211_CHAN_RADAR) &&
-	    dfs_state < MT_DFS_STATE_CAC)
-		dfs_state = MT_DFS_STATE_ACTIVE;
-
-	if (prev_state == dfs_state)
-		return 0;
-
-	if (dfs_state == MT_DFS_STATE_DISABLED)
-		goto stop;
-
-	if (prev_state <= MT_DFS_STATE_DISABLED) {
-		err = mt7615_dfs_init_radar_specs(phy);
-		if (err < 0)
-			return err;
-
-		err = mt7615_dfs_start_radar_detector(phy);
-		if (err < 0)
-			return err;
-
-		phy->mt76->dfs_state = MT_DFS_STATE_CAC;
-	}
-
-	if (dfs_state == MT_DFS_STATE_CAC)
-		return 0;
-
-	err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_CAC_END,
-				      ext_phy, MT_RX_SEL0, 0);
-	if (err < 0) {
-		phy->mt76->dfs_state = MT_DFS_STATE_UNKNOWN;
-		return err;
-	}
-
-	phy->mt76->dfs_state = MT_DFS_STATE_ACTIVE;
-	return 0;
-
-stop:
-	err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_NORMAL_START, ext_phy,
-				      MT_RX_SEL0, 0);
-	if (err < 0)
-		return err;
-
-	mt7615_dfs_stop_radar_detector(phy);
-	phy->mt76->dfs_state = MT_DFS_STATE_DISABLED;
-
-	return 0;
-}
-
-int mt7615_mac_set_beacon_filter(struct mt7615_phy *phy,
-				 struct ieee80211_vif *vif,
-				 bool enable)
-{
-	struct mt7615_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-	int err;
-
-	if (!mt7615_firmware_offload(dev))
-		return -EOPNOTSUPP;
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_MONITOR:
-		return 0;
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_ADHOC:
-	case NL80211_IFTYPE_AP:
-		if (enable)
-			phy->n_beacon_vif++;
-		else
-			phy->n_beacon_vif--;
-		fallthrough;
-	default:
-		break;
-	}
-
-	err = mt7615_mcu_set_bss_pm(dev, vif, !phy->n_beacon_vif);
-	if (err)
-		return err;
-
-	if (phy->n_beacon_vif) {
-		vif->driver_flags &= ~IEEE80211_VIF_BEACON_FILTER;
-		mt76_clear(dev, MT_WF_RFCR(ext_phy),
-			   MT_WF_RFCR_DROP_OTHER_BEACON);
-	} else {
-		vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER;
-		mt76_set(dev, MT_WF_RFCR(ext_phy),
-			 MT_WF_RFCR_DROP_OTHER_BEACON);
-	}
-
-	return 0;
-}
-
-void mt7615_coredump_work(struct work_struct *work)
-{
-	struct mt7615_dev *dev;
-	char *dump, *data;
-
-	dev = (struct mt7615_dev *)container_of(work, struct mt7615_dev,
-						coredump.work.work);
-
-	if (time_is_after_jiffies(dev->coredump.last_activity +
-				  4 * MT76_CONNAC_COREDUMP_TIMEOUT)) {
-		queue_delayed_work(dev->mt76.wq, &dev->coredump.work,
-				   MT76_CONNAC_COREDUMP_TIMEOUT);
-		return;
-	}
-
-	dump = vzalloc(MT76_CONNAC_COREDUMP_SZ);
-	data = dump;
-
-	while (true) {
-		struct sk_buff *skb;
-
-		spin_lock_bh(&dev->mt76.lock);
-		skb = __skb_dequeue(&dev->coredump.msg_list);
-		spin_unlock_bh(&dev->mt76.lock);
-
-		if (!skb)
-			break;
-
-		skb_pull(skb, sizeof(struct mt7615_mcu_rxd));
-		if (data + skb->len - dump > MT76_CONNAC_COREDUMP_SZ) {
-			dev_kfree_skb(skb);
-			continue;
-		}
-
-		memcpy(data, skb->data, skb->len);
-		data += skb->len;
-
-		dev_kfree_skb(skb);
-	}
-	dev_coredumpv(dev->mt76.dev, dump, MT76_CONNAC_COREDUMP_SZ,
-		      GFP_KERNEL);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mac.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mac.h
deleted file mode 100644
index 880c9f7..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mac.h
+++ /dev/null
@@ -1,337 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2019 MediaTek Inc. */
-
-#ifndef __MT7615_MAC_H
-#define __MT7615_MAC_H
-
-#define MT_CT_PARSE_LEN			72
-#define MT_CT_DMA_BUF_NUM		2
-
-#define MT_RXD0_LENGTH			GENMASK(15, 0)
-#define MT_RXD0_PKT_FLAG                GENMASK(19, 16)
-#define MT_RXD0_PKT_TYPE		GENMASK(31, 29)
-
-#define MT_RXD0_NORMAL_ETH_TYPE_OFS	GENMASK(22, 16)
-#define MT_RXD0_NORMAL_IP_SUM		BIT(23)
-#define MT_RXD0_NORMAL_UDP_TCP_SUM	BIT(24)
-#define MT_RXD0_NORMAL_GROUP_1		BIT(25)
-#define MT_RXD0_NORMAL_GROUP_2		BIT(26)
-#define MT_RXD0_NORMAL_GROUP_3		BIT(27)
-#define MT_RXD0_NORMAL_GROUP_4		BIT(28)
-
-enum rx_pkt_type {
-	PKT_TYPE_TXS,
-	PKT_TYPE_TXRXV,
-	PKT_TYPE_NORMAL,
-	PKT_TYPE_RX_DUP_RFB,
-	PKT_TYPE_RX_TMR,
-	PKT_TYPE_RETRIEVE,
-	PKT_TYPE_TXRX_NOTIFY,
-	PKT_TYPE_RX_EVENT,
-	PKT_TYPE_NORMAL_MCU,
-};
-
-#define MT_RXD1_NORMAL_BSSID		GENMASK(31, 26)
-#define MT_RXD1_NORMAL_PAYLOAD_FORMAT	GENMASK(25, 24)
-#define MT_RXD1_FIRST_AMSDU_FRAME	GENMASK(1, 0)
-#define MT_RXD1_MID_AMSDU_FRAME		BIT(1)
-#define MT_RXD1_LAST_AMSDU_FRAME	BIT(0)
-#define MT_RXD1_NORMAL_HDR_TRANS	BIT(23)
-#define MT_RXD1_NORMAL_HDR_OFFSET	BIT(22)
-#define MT_RXD1_NORMAL_MAC_HDR_LEN	GENMASK(21, 16)
-#define MT_RXD1_NORMAL_CH_FREQ		GENMASK(15, 8)
-#define MT_RXD1_NORMAL_KEY_ID		GENMASK(7, 6)
-#define MT_RXD1_NORMAL_BEACON_UC	BIT(5)
-#define MT_RXD1_NORMAL_BEACON_MC	BIT(4)
-#define MT_RXD1_NORMAL_BF_REPORT	BIT(3)
-#define MT_RXD1_NORMAL_ADDR_TYPE	GENMASK(2, 1)
-#define MT_RXD1_NORMAL_BCAST		GENMASK(2, 1)
-#define MT_RXD1_NORMAL_MCAST		BIT(2)
-#define MT_RXD1_NORMAL_U2M		BIT(1)
-#define MT_RXD1_NORMAL_HTC_VLD		BIT(0)
-
-#define MT_RXD2_NORMAL_NON_AMPDU	BIT(31)
-#define MT_RXD2_NORMAL_NON_AMPDU_SUB	BIT(30)
-#define MT_RXD2_NORMAL_NDATA		BIT(29)
-#define MT_RXD2_NORMAL_NULL_FRAME	BIT(28)
-#define MT_RXD2_NORMAL_FRAG		BIT(27)
-#define MT_RXD2_NORMAL_INT_FRAME	BIT(26)
-#define MT_RXD2_NORMAL_HDR_TRANS_ERROR	BIT(25)
-#define MT_RXD2_NORMAL_MAX_LEN_ERROR	BIT(24)
-#define MT_RXD2_NORMAL_AMSDU_ERR	BIT(23)
-#define MT_RXD2_NORMAL_LEN_MISMATCH	BIT(22)
-#define MT_RXD2_NORMAL_TKIP_MIC_ERR	BIT(21)
-#define MT_RXD2_NORMAL_ICV_ERR		BIT(20)
-#define MT_RXD2_NORMAL_CLM		BIT(19)
-#define MT_RXD2_NORMAL_CM		BIT(18)
-#define MT_RXD2_NORMAL_FCS_ERR		BIT(17)
-#define MT_RXD2_NORMAL_SW_BIT		BIT(16)
-#define MT_RXD2_NORMAL_SEC_MODE		GENMASK(15, 12)
-#define MT_RXD2_NORMAL_TID		GENMASK(11, 8)
-#define MT_RXD2_NORMAL_WLAN_IDX		GENMASK(7, 0)
-
-#define MT_RXD3_NORMAL_PF_STS		GENMASK(31, 30)
-#define MT_RXD3_NORMAL_PF_MODE		BIT(29)
-#define MT_RXD3_NORMAL_CLS_BITMAP	GENMASK(28, 19)
-#define MT_RXD3_NORMAL_WOL		GENMASK(18, 14)
-#define MT_RXD3_NORMAL_MAGIC_PKT	BIT(13)
-#define MT_RXD3_NORMAL_OFLD		GENMASK(12, 11)
-#define MT_RXD3_NORMAL_CLS		BIT(10)
-#define MT_RXD3_NORMAL_PATTERN_DROP	BIT(9)
-#define MT_RXD3_NORMAL_TSF_COMPARE_LOSS	BIT(8)
-#define MT_RXD3_NORMAL_RXV_SEQ		GENMASK(7, 0)
-
-#define MT_RXD4_FRAME_CONTROL		GENMASK(15, 0)
-
-#define MT_RXD6_SEQ_CTRL		GENMASK(15, 0)
-#define MT_RXD6_QOS_CTL			GENMASK(31, 16)
-
-#define MT_RXD7_HT_CONTROL		GENMASK(31, 0)
-
-#define MT_RXV1_ACID_DET_H		BIT(31)
-#define MT_RXV1_ACID_DET_L		BIT(30)
-#define MT_RXV1_VHTA2_B8_B3		GENMASK(29, 24)
-#define MT_RXV1_NUM_RX			GENMASK(23, 22)
-#define MT_RXV1_HT_NO_SOUND		BIT(21)
-#define MT_RXV1_HT_SMOOTH		BIT(20)
-#define MT_RXV1_HT_SHORT_GI		BIT(19)
-#define MT_RXV1_HT_AGGR			BIT(18)
-#define MT_RXV1_VHTA1_B22		BIT(17)
-#define MT_RXV1_FRAME_MODE		GENMASK(16, 15)
-#define MT_RXV1_TX_MODE			GENMASK(14, 12)
-#define MT_RXV1_HT_EXT_LTF		GENMASK(11, 10)
-#define MT_RXV1_HT_AD_CODE		BIT(9)
-#define MT_RXV1_HT_STBC			GENMASK(8, 7)
-#define MT_RXV1_TX_RATE			GENMASK(6, 0)
-
-#define MT_RXV2_SEL_ANT			BIT(31)
-#define MT_RXV2_VALID_BIT		BIT(30)
-#define MT_RXV2_NSTS			GENMASK(29, 27)
-#define MT_RXV2_GROUP_ID		GENMASK(26, 21)
-#define MT_RXV2_LENGTH			GENMASK(20, 0)
-
-#define MT_RXV3_WB_RSSI			GENMASK(31, 24)
-#define MT_RXV3_IB_RSSI			GENMASK(23, 16)
-
-#define MT_RXV4_RCPI3			GENMASK(31, 24)
-#define MT_RXV4_RCPI2			GENMASK(23, 16)
-#define MT_RXV4_RCPI1			GENMASK(15, 8)
-#define MT_RXV4_RCPI0			GENMASK(7, 0)
-
-#define MT_RXV5_FOE			GENMASK(11, 0)
-
-#define MT_RXV6_NF3			GENMASK(31, 24)
-#define MT_RXV6_NF2			GENMASK(23, 16)
-#define MT_RXV6_NF1			GENMASK(15, 8)
-#define MT_RXV6_NF0			GENMASK(7, 0)
-
-enum tx_header_format {
-	MT_HDR_FORMAT_802_3,
-	MT_HDR_FORMAT_CMD,
-	MT_HDR_FORMAT_802_11,
-	MT_HDR_FORMAT_802_11_EXT,
-};
-
-enum tx_pkt_type {
-	MT_TX_TYPE_CT,
-	MT_TX_TYPE_SF,
-	MT_TX_TYPE_CMD,
-	MT_TX_TYPE_FW,
-};
-
-enum tx_port_idx {
-	MT_TX_PORT_IDX_LMAC,
-	MT_TX_PORT_IDX_MCU
-};
-
-enum tx_mcu_port_q_idx {
-	MT_TX_MCU_PORT_RX_Q0 = 0,
-	MT_TX_MCU_PORT_RX_Q1,
-	MT_TX_MCU_PORT_RX_Q2,
-	MT_TX_MCU_PORT_RX_Q3,
-	MT_TX_MCU_PORT_RX_FWDL = 0x1e
-};
-
-enum tx_phy_bandwidth {
-	MT_PHY_BW_20,
-	MT_PHY_BW_40,
-	MT_PHY_BW_80,
-	MT_PHY_BW_160,
-};
-
-#define MT_CT_INFO_APPLY_TXD		BIT(0)
-#define MT_CT_INFO_COPY_HOST_TXD_ALL	BIT(1)
-#define MT_CT_INFO_MGMT_FRAME		BIT(2)
-#define MT_CT_INFO_NONE_CIPHER_FRAME	BIT(3)
-#define MT_CT_INFO_HSR2_TX		BIT(4)
-
-#define MT_TXD0_P_IDX			BIT(31)
-#define MT_TXD0_Q_IDX			GENMASK(30, 26)
-#define MT_TXD0_UDP_TCP_SUM		BIT(24)
-#define MT_TXD0_IP_SUM			BIT(23)
-#define MT_TXD0_ETH_TYPE_OFFSET		GENMASK(22, 16)
-#define MT_TXD0_TX_BYTES		GENMASK(15, 0)
-
-#define MT_TXD1_OWN_MAC			GENMASK(31, 26)
-#define MT_TXD1_PKT_FMT			GENMASK(25, 24)
-#define MT_TXD1_TID			GENMASK(23, 21)
-#define MT_TXD1_AMSDU			BIT(20)
-#define MT_TXD1_UNXV			BIT(19)
-#define MT_TXD1_HDR_PAD			GENMASK(18, 17)
-#define MT_TXD1_TXD_LEN			BIT(16)
-#define MT_TXD1_LONG_FORMAT		BIT(15)
-#define MT_TXD1_HDR_FORMAT		GENMASK(14, 13)
-#define MT_TXD1_HDR_INFO		GENMASK(12, 8)
-#define MT_TXD1_WLAN_IDX		GENMASK(7, 0)
-
-#define MT_TXD2_FIX_RATE		BIT(31)
-#define MT_TXD2_TIMING_MEASURE		BIT(30)
-#define MT_TXD2_BA_DISABLE		BIT(29)
-#define MT_TXD2_POWER_OFFSET		GENMASK(28, 24)
-#define MT_TXD2_MAX_TX_TIME		GENMASK(23, 16)
-#define MT_TXD2_FRAG			GENMASK(15, 14)
-#define MT_TXD2_HTC_VLD			BIT(13)
-#define MT_TXD2_DURATION		BIT(12)
-#define MT_TXD2_BIP			BIT(11)
-#define MT_TXD2_MULTICAST		BIT(10)
-#define MT_TXD2_RTS			BIT(9)
-#define MT_TXD2_SOUNDING		BIT(8)
-#define MT_TXD2_NDPA			BIT(7)
-#define MT_TXD2_NDP			BIT(6)
-#define MT_TXD2_FRAME_TYPE		GENMASK(5, 4)
-#define MT_TXD2_SUB_TYPE		GENMASK(3, 0)
-
-#define MT_TXD3_SN_VALID		BIT(31)
-#define MT_TXD3_PN_VALID		BIT(30)
-#define MT_TXD3_SEQ			GENMASK(27, 16)
-#define MT_TXD3_REM_TX_COUNT		GENMASK(15, 11)
-#define MT_TXD3_TX_COUNT		GENMASK(10, 6)
-#define MT_TXD3_PROTECT_FRAME		BIT(1)
-#define MT_TXD3_NO_ACK			BIT(0)
-
-#define MT_TXD4_PN_LOW			GENMASK(31, 0)
-
-#define MT_TXD5_PN_HIGH			GENMASK(31, 16)
-#define MT_TXD5_SW_POWER_MGMT		BIT(13)
-#define MT_TXD5_DA_SELECT		BIT(11)
-#define MT_TXD5_TX_STATUS_HOST		BIT(10)
-#define MT_TXD5_TX_STATUS_MCU		BIT(9)
-#define MT_TXD5_TX_STATUS_FMT		BIT(8)
-#define MT_TXD5_PID			GENMASK(7, 0)
-
-#define MT_TXD6_FIXED_RATE		BIT(31)
-#define MT_TXD6_SGI			BIT(30)
-#define MT_TXD6_LDPC			BIT(29)
-#define MT_TXD6_TX_BF			BIT(28)
-#define MT_TXD6_TX_RATE			GENMASK(27, 16)
-#define MT_TXD6_ANT_ID			GENMASK(15, 4)
-#define MT_TXD6_DYN_BW			BIT(3)
-#define MT_TXD6_FIXED_BW		BIT(2)
-#define MT_TXD6_BW			GENMASK(1, 0)
-
-/* MT7663 DW7 HW-AMSDU */
-#define MT_TXD7_HW_AMSDU_CAP		BIT(30)
-#define MT_TXD7_TYPE			GENMASK(21, 20)
-#define MT_TXD7_SUB_TYPE		GENMASK(19, 16)
-#define MT_TXD7_SPE_IDX			GENMASK(15, 11)
-#define MT_TXD7_SPE_IDX_SLE		BIT(10)
-
-#define MT_TXD8_L_TYPE			GENMASK(5, 4)
-#define MT_TXD8_L_SUB_TYPE		GENMASK(3, 0)
-
-#define MT_TX_RATE_STBC			BIT(11)
-#define MT_TX_RATE_NSS			GENMASK(10, 9)
-#define MT_TX_RATE_MODE			GENMASK(8, 6)
-#define MT_TX_RATE_IDX			GENMASK(5, 0)
-
-#define MT_TX_FREE_MSDU_ID_CNT		GENMASK(6, 0)
-
-#define MT_TXS0_PID			GENMASK(31, 24)
-#define MT_TXS0_BA_ERROR		BIT(22)
-#define MT_TXS0_PS_FLAG			BIT(21)
-#define MT_TXS0_TXOP_TIMEOUT		BIT(20)
-#define MT_TXS0_BIP_ERROR		BIT(19)
-
-#define MT_TXS0_QUEUE_TIMEOUT		BIT(18)
-#define MT_TXS0_RTS_TIMEOUT		BIT(17)
-#define MT_TXS0_ACK_TIMEOUT		BIT(16)
-#define MT_TXS0_ACK_ERROR_MASK		GENMASK(18, 16)
-
-#define MT_TXS0_TX_STATUS_HOST		BIT(15)
-#define MT_TXS0_TX_STATUS_MCU		BIT(14)
-#define MT_TXS0_TXS_FORMAT		BIT(13)
-#define MT_TXS0_FIXED_RATE		BIT(12)
-#define MT_TXS0_TX_RATE			GENMASK(11, 0)
-
-#define MT_TXS1_ANT_ID			GENMASK(31, 20)
-#define MT_TXS1_RESP_RATE		GENMASK(19, 16)
-#define MT_TXS1_BW			GENMASK(15, 14)
-#define MT_TXS1_I_TXBF			BIT(13)
-#define MT_TXS1_E_TXBF			BIT(12)
-#define MT_TXS1_TID			GENMASK(11, 9)
-#define MT_TXS1_AMPDU			BIT(8)
-#define MT_TXS1_ACKED_MPDU		BIT(7)
-#define MT_TXS1_TX_POWER_DBM		GENMASK(6, 0)
-
-#define MT_TXS2_WCID			GENMASK(31, 24)
-#define MT_TXS2_RXV_SEQNO		GENMASK(23, 16)
-#define MT_TXS2_TX_DELAY		GENMASK(15, 0)
-
-#define MT_TXS3_LAST_TX_RATE		GENMASK(31, 29)
-#define MT_TXS3_TX_COUNT		GENMASK(28, 24)
-#define MT_TXS3_F1_TSSI1		GENMASK(23, 12)
-#define MT_TXS3_F1_TSSI0		GENMASK(11, 0)
-#define MT_TXS3_F0_SEQNO		GENMASK(11, 0)
-
-#define MT_TXS4_F0_TIMESTAMP		GENMASK(31, 0)
-#define MT_TXS4_F1_TSSI3		GENMASK(23, 12)
-#define MT_TXS4_F1_TSSI2		GENMASK(11, 0)
-
-#define MT_TXS5_F0_FRONT_TIME		GENMASK(24, 0)
-#define MT_TXS5_F1_NOISE_2		GENMASK(23, 16)
-#define MT_TXS5_F1_NOISE_1		GENMASK(15, 8)
-#define MT_TXS5_F1_NOISE_0		GENMASK(7, 0)
-
-#define MT_TXS6_F1_RCPI_3		GENMASK(31, 24)
-#define MT_TXS6_F1_RCPI_2		GENMASK(23, 16)
-#define MT_TXS6_F1_RCPI_1		GENMASK(15, 8)
-#define MT_TXS6_F1_RCPI_0		GENMASK(7, 0)
-
-struct mt7615_dfs_pulse {
-	u32 max_width;		/* us */
-	int max_pwr;		/* dbm */
-	int min_pwr;		/* dbm */
-	u32 min_stgr_pri;	/* us */
-	u32 max_stgr_pri;	/* us */
-	u32 min_cr_pri;		/* us */
-	u32 max_cr_pri;		/* us */
-};
-
-struct mt7615_dfs_pattern {
-	u8 enb;
-	u8 stgr;
-	u8 min_crpn;
-	u8 max_crpn;
-	u8 min_crpr;
-	u8 min_pw;
-	u8 max_pw;
-	u32 min_pri;
-	u32 max_pri;
-	u8 min_crbn;
-	u8 max_crbn;
-	u8 min_stgpn;
-	u8 max_stgpn;
-	u8 min_stgpr;
-};
-
-struct mt7615_dfs_radar_spec {
-	struct mt7615_dfs_pulse pulse_th;
-	struct mt7615_dfs_pattern radar_pattern[16];
-};
-
-static inline u32 mt7615_mac_wtbl_addr(struct mt7615_dev *dev, int wcid)
-{
-	return MT_WTBL_BASE(dev) + wcid * MT_WTBL_ENTRY_SIZE;
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/main.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/main.c
deleted file mode 100644
index 22e6bda..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/main.c
+++ /dev/null
@@ -1,1346 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2019 MediaTek Inc.
- *
- * Author: Roy Luo <royluo@google.com>
- *         Ryder Lee <ryder.lee@mediatek.com>
- *         Felix Fietkau <nbd@nbd.name>
- *         Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#include <linux/etherdevice.h>
-#include <linux/module.h>
-#include "mt7615.h"
-#include "mcu.h"
-
-static bool mt7615_dev_running(struct mt7615_dev *dev)
-{
-	struct mt7615_phy *phy;
-
-	if (test_bit(MT76_STATE_RUNNING, &dev->mphy.state))
-		return true;
-
-	phy = mt7615_ext_phy(dev);
-
-	return phy && test_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-}
-
-static int mt7615_start(struct ieee80211_hw *hw)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	unsigned long timeout;
-	bool running;
-	int ret;
-
-	if (!mt7615_wait_for_mcu_init(dev))
-		return -EIO;
-
-	mt7615_mutex_acquire(dev);
-
-	running = mt7615_dev_running(dev);
-
-	if (!running) {
-		ret = mt7615_mcu_set_pm(dev, 0, 0);
-		if (ret)
-			goto out;
-
-		ret = mt76_connac_mcu_set_mac_enable(&dev->mt76, 0, true, false);
-		if (ret)
-			goto out;
-
-		mt7615_mac_enable_nf(dev, 0);
-	}
-
-	if (phy != &dev->phy) {
-		ret = mt7615_mcu_set_pm(dev, 1, 0);
-		if (ret)
-			goto out;
-
-		ret = mt76_connac_mcu_set_mac_enable(&dev->mt76, 1, true, false);
-		if (ret)
-			goto out;
-
-		mt7615_mac_enable_nf(dev, 1);
-	}
-
-	if (mt7615_firmware_offload(dev)) {
-		ret = mt76_connac_mcu_set_channel_domain(phy->mt76);
-		if (ret)
-			goto out;
-
-		ret = mt76_connac_mcu_set_rate_txpower(phy->mt76);
-		if (ret)
-			goto out;
-	}
-
-	ret = mt7615_mcu_set_chan_info(phy, MCU_EXT_CMD(SET_RX_PATH));
-	if (ret)
-		goto out;
-
-	set_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-
-	timeout = mt7615_get_macwork_timeout(dev);
-	ieee80211_queue_delayed_work(hw, &phy->mt76->mac_work, timeout);
-
-	if (!running)
-		mt7615_mac_reset_counters(dev);
-
-out:
-	mt7615_mutex_release(dev);
-
-	return ret;
-}
-
-static void mt7615_stop(struct ieee80211_hw *hw)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-
-	cancel_delayed_work_sync(&phy->mt76->mac_work);
-	del_timer_sync(&phy->roc_timer);
-	cancel_work_sync(&phy->roc_work);
-
-	cancel_delayed_work_sync(&dev->pm.ps_work);
-	cancel_work_sync(&dev->pm.wake_work);
-
-	mt76_connac_free_pending_tx_skbs(&dev->pm, NULL);
-
-	mt7615_mutex_acquire(dev);
-
-	mt76_testmode_reset(phy->mt76, true);
-
-	clear_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-	cancel_delayed_work_sync(&phy->scan_work);
-
-	if (phy != &dev->phy) {
-		mt7615_mcu_set_pm(dev, 1, 1);
-		mt76_connac_mcu_set_mac_enable(&dev->mt76, 1, false, false);
-	}
-
-	if (!mt7615_dev_running(dev)) {
-		mt7615_mcu_set_pm(dev, 0, 1);
-		mt76_connac_mcu_set_mac_enable(&dev->mt76, 0, false, false);
-	}
-
-	mt7615_mutex_release(dev);
-}
-
-static inline int get_free_idx(u32 mask, u8 start, u8 end)
-{
-	return ffs(~mask & GENMASK(end, start));
-}
-
-static int get_omac_idx(enum nl80211_iftype type, u64 mask)
-{
-	int i;
-
-	switch (type) {
-	case NL80211_IFTYPE_STATION:
-		/* prefer hw bssid slot 1-3 */
-		i = get_free_idx(mask, HW_BSSID_1, HW_BSSID_3);
-		if (i)
-			return i - 1;
-
-		/* next, try to find a free repeater entry for the sta */
-		i = get_free_idx(mask >> REPEATER_BSSID_START, 0,
-				 REPEATER_BSSID_MAX - REPEATER_BSSID_START);
-		if (i)
-			return i + 32 - 1;
-
-		i = get_free_idx(mask, EXT_BSSID_1, EXT_BSSID_MAX);
-		if (i)
-			return i - 1;
-
-		if (~mask & BIT(HW_BSSID_0))
-			return HW_BSSID_0;
-
-		break;
-	case NL80211_IFTYPE_ADHOC:
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_MONITOR:
-	case NL80211_IFTYPE_AP:
-		/* ap uses hw bssid 0 and ext bssid */
-		if (~mask & BIT(HW_BSSID_0))
-			return HW_BSSID_0;
-
-		i = get_free_idx(mask, EXT_BSSID_1, EXT_BSSID_MAX);
-		if (i)
-			return i - 1;
-
-		break;
-	default:
-		WARN_ON(1);
-		break;
-	}
-
-	return -1;
-}
-
-static int mt7615_add_interface(struct ieee80211_hw *hw,
-				struct ieee80211_vif *vif)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	struct mt76_txq *mtxq;
-	bool ext_phy = phy != &dev->phy;
-	int idx, ret = 0;
-
-	mt7615_mutex_acquire(dev);
-
-	mt76_testmode_reset(phy->mt76, true);
-
-	if (vif->type == NL80211_IFTYPE_MONITOR &&
-	    is_zero_ether_addr(vif->addr))
-		phy->monitor_vif = vif;
-
-	mvif->mt76.idx = __ffs64(~dev->mt76.vif_mask);
-	if (mvif->mt76.idx >= MT7615_MAX_INTERFACES) {
-		ret = -ENOSPC;
-		goto out;
-	}
-
-	idx = get_omac_idx(vif->type, dev->omac_mask);
-	if (idx < 0) {
-		ret = -ENOSPC;
-		goto out;
-	}
-	mvif->mt76.omac_idx = idx;
-
-	mvif->mt76.band_idx = ext_phy;
-	mvif->mt76.wmm_idx = vif->type != NL80211_IFTYPE_AP;
-	if (ext_phy)
-		mvif->mt76.wmm_idx += 2;
-
-	dev->mt76.vif_mask |= BIT_ULL(mvif->mt76.idx);
-	dev->omac_mask |= BIT_ULL(mvif->mt76.omac_idx);
-	phy->omac_mask |= BIT_ULL(mvif->mt76.omac_idx);
-
-	ret = mt7615_mcu_set_dbdc(dev);
-	if (ret)
-		goto out;
-
-	idx = MT7615_WTBL_RESERVED - mvif->mt76.idx;
-
-	INIT_LIST_HEAD(&mvif->sta.poll_list);
-	mvif->sta.wcid.idx = idx;
-	mvif->sta.wcid.phy_idx = mvif->mt76.band_idx;
-	mvif->sta.wcid.hw_key_idx = -1;
-	mt76_packet_id_init(&mvif->sta.wcid);
-
-	mt7615_mac_wtbl_update(dev, idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	rcu_assign_pointer(dev->mt76.wcid[idx], &mvif->sta.wcid);
-	if (vif->txq) {
-		mtxq = (struct mt76_txq *)vif->txq->drv_priv;
-		mtxq->wcid = idx;
-	}
-
-	ret = mt7615_mcu_add_dev_info(phy, vif, true);
-out:
-	mt7615_mutex_release(dev);
-
-	return ret;
-}
-
-static void mt7615_remove_interface(struct ieee80211_hw *hw,
-				    struct ieee80211_vif *vif)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt7615_sta *msta = &mvif->sta;
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	int idx = msta->wcid.idx;
-
-	mt7615_mutex_acquire(dev);
-
-	mt7615_mcu_add_bss_info(phy, vif, NULL, false);
-	mt7615_mcu_sta_add(phy, vif, NULL, false);
-
-	mt76_testmode_reset(phy->mt76, true);
-	if (vif == phy->monitor_vif)
-	    phy->monitor_vif = NULL;
-
-	mt76_connac_free_pending_tx_skbs(&dev->pm, &msta->wcid);
-
-	mt7615_mcu_add_dev_info(phy, vif, false);
-
-	rcu_assign_pointer(dev->mt76.wcid[idx], NULL);
-
-	dev->mt76.vif_mask &= ~BIT_ULL(mvif->mt76.idx);
-	dev->omac_mask &= ~BIT_ULL(mvif->mt76.omac_idx);
-	phy->omac_mask &= ~BIT_ULL(mvif->mt76.omac_idx);
-
-	mt7615_mutex_release(dev);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (!list_empty(&msta->poll_list))
-		list_del_init(&msta->poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	mt76_packet_id_flush(&dev->mt76, &mvif->sta.wcid);
-}
-
-int mt7615_set_channel(struct mt7615_phy *phy)
-{
-	struct mt7615_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-	int ret;
-
-	cancel_delayed_work_sync(&phy->mt76->mac_work);
-
-	mt7615_mutex_acquire(dev);
-
-	set_bit(MT76_RESET, &phy->mt76->state);
-
-	mt76_set_channel(phy->mt76);
-
-	if (is_mt7615(&dev->mt76) && dev->flash_eeprom) {
-		ret = mt7615_mcu_apply_rx_dcoc(phy);
-		if (ret)
-			goto out;
-
-		ret = mt7615_mcu_apply_tx_dpd(phy);
-		if (ret)
-			goto out;
-	}
-
-	ret = mt7615_mcu_set_chan_info(phy, MCU_EXT_CMD(CHANNEL_SWITCH));
-	if (ret)
-		goto out;
-
-	mt7615_mac_set_timing(phy);
-	ret = mt7615_dfs_init_radar_detector(phy);
-	if (ret)
-		goto out;
-
-	mt7615_mac_cca_stats_reset(phy);
-	ret = mt7615_mcu_set_sku_en(phy, true);
-	if (ret)
-		goto out;
-
-	mt7615_mac_reset_counters(dev);
-	phy->noise = 0;
-	phy->chfreq = mt76_rr(dev, MT_CHFREQ(ext_phy));
-
-out:
-	clear_bit(MT76_RESET, &phy->mt76->state);
-
-	mt7615_mutex_release(dev);
-
-	mt76_worker_schedule(&dev->mt76.tx_worker);
-	if (!mt76_testmode_enabled(phy->mt76)) {
-		unsigned long timeout = mt7615_get_macwork_timeout(dev);
-
-		ieee80211_queue_delayed_work(phy->mt76->hw,
-					     &phy->mt76->mac_work, timeout);
-	}
-
-	return ret;
-}
-
-static int mt7615_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
-			  struct ieee80211_vif *vif, struct ieee80211_sta *sta,
-			  struct ieee80211_key_conf *key)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt7615_sta *msta = sta ? (struct mt7615_sta *)sta->drv_priv :
-				  &mvif->sta;
-	struct mt76_wcid *wcid = &msta->wcid;
-	int idx = key->keyidx, err = 0;
-	u8 *wcid_keyidx = &wcid->hw_key_idx;
-
-	/* The hardware does not support per-STA RX GTK, fallback
-	 * to software mode for these.
-	 */
-	if ((vif->type == NL80211_IFTYPE_ADHOC ||
-	     vif->type == NL80211_IFTYPE_MESH_POINT) &&
-	    (key->cipher == WLAN_CIPHER_SUITE_TKIP ||
-	     key->cipher == WLAN_CIPHER_SUITE_CCMP) &&
-	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
-		return -EOPNOTSUPP;
-
-	/* fall back to sw encryption for unsupported ciphers */
-	switch (key->cipher) {
-	case WLAN_CIPHER_SUITE_AES_CMAC:
-		wcid_keyidx = &wcid->hw_key_idx2;
-		key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIE;
-		break;
-	case WLAN_CIPHER_SUITE_TKIP:
-	case WLAN_CIPHER_SUITE_CCMP:
-	case WLAN_CIPHER_SUITE_CCMP_256:
-	case WLAN_CIPHER_SUITE_GCMP:
-	case WLAN_CIPHER_SUITE_GCMP_256:
-	case WLAN_CIPHER_SUITE_SMS4:
-		break;
-	case WLAN_CIPHER_SUITE_WEP40:
-	case WLAN_CIPHER_SUITE_WEP104:
-	default:
-		return -EOPNOTSUPP;
-	}
-
-	mt7615_mutex_acquire(dev);
-
-	if (cmd == SET_KEY && !sta && !mvif->mt76.cipher) {
-		mvif->mt76.cipher = mt76_connac_mcu_get_cipher(key->cipher);
-		mt7615_mcu_add_bss_info(phy, vif, NULL, true);
-	}
-
-	if (cmd == SET_KEY)
-		*wcid_keyidx = idx;
-	else if (idx == *wcid_keyidx)
-		*wcid_keyidx = -1;
-	else
-		goto out;
-
-	mt76_wcid_key_setup(&dev->mt76, wcid,
-			    cmd == SET_KEY ? key : NULL);
-
-	if (mt76_is_mmio(&dev->mt76))
-		err = mt7615_mac_wtbl_set_key(dev, wcid, key, cmd);
-	else
-		err = __mt7615_mac_wtbl_set_key(dev, wcid, key, cmd);
-
-out:
-	mt7615_mutex_release(dev);
-
-	return err;
-}
-
-static int mt7615_set_sar_specs(struct ieee80211_hw *hw,
-				const struct cfg80211_sar_specs *sar)
-{
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	int err;
-
-	if (!cfg80211_chandef_valid(&phy->mt76->chandef))
-		return -EINVAL;
-
-	err = mt76_init_sar_power(hw, sar);
-	if (err)
-		return err;
-
-	if (mt7615_firmware_offload(phy->dev))
-		return mt76_connac_mcu_set_rate_txpower(phy->mt76);
-
-	ieee80211_stop_queues(hw);
-	err = mt7615_set_channel(phy);
-	ieee80211_wake_queues(hw);
-
-	return err;
-}
-
-static int mt7615_config(struct ieee80211_hw *hw, u32 changed)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	bool band = phy != &dev->phy;
-	int ret = 0;
-
-	if (changed & (IEEE80211_CONF_CHANGE_CHANNEL |
-		       IEEE80211_CONF_CHANGE_POWER)) {
-#ifdef CONFIG_NL80211_TESTMODE
-		if (phy->mt76->test.state != MT76_TM_STATE_OFF) {
-			mt7615_mutex_acquire(dev);
-			mt76_testmode_reset(phy->mt76, false);
-			mt7615_mutex_release(dev);
-		}
-#endif
-		ieee80211_stop_queues(hw);
-		ret = mt7615_set_channel(phy);
-		ieee80211_wake_queues(hw);
-	}
-
-	mt7615_mutex_acquire(dev);
-
-	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
-		mt76_testmode_reset(phy->mt76, true);
-
-		if (!(hw->conf.flags & IEEE80211_CONF_MONITOR))
-			phy->rxfilter |= MT_WF_RFCR_DROP_OTHER_UC;
-		else
-			phy->rxfilter &= ~MT_WF_RFCR_DROP_OTHER_UC;
-
-		mt76_wr(dev, MT_WF_RFCR(band), phy->rxfilter);
-	}
-
-	mt7615_mutex_release(dev);
-
-	return ret;
-}
-
-static int
-mt7615_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
-	       const struct ieee80211_tx_queue_params *params)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	int err;
-
-	mt7615_mutex_acquire(dev);
-
-	queue = mt7615_lmac_mapping(dev, queue);
-	queue += mvif->wmm_idx * MT7615_MAX_WMM_SETS;
-	err = mt7615_mcu_set_wmm(dev, queue, params);
-
-	mt7615_mutex_release(dev);
-
-	return err;
-}
-
-static void mt7615_configure_filter(struct ieee80211_hw *hw,
-				    unsigned int changed_flags,
-				    unsigned int *total_flags,
-				    u64 multicast)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	bool band = phy != &dev->phy;
-
-	u32 ctl_flags = MT_WF_RFCR1_DROP_ACK |
-			MT_WF_RFCR1_DROP_BF_POLL |
-			MT_WF_RFCR1_DROP_BA |
-			MT_WF_RFCR1_DROP_CFEND |
-			MT_WF_RFCR1_DROP_CFACK;
-	u32 flags = 0;
-
-	mt7615_mutex_acquire(dev);
-
-#define MT76_FILTER(_flag, _hw) do { \
-		flags |= *total_flags & FIF_##_flag;			\
-		phy->rxfilter &= ~(_hw);				\
-		if (!mt76_testmode_enabled(phy->mt76))			\
-			phy->rxfilter |= !(flags & FIF_##_flag) * (_hw);\
-	} while (0)
-
-	phy->rxfilter &= ~(MT_WF_RFCR_DROP_OTHER_BSS |
-			   MT_WF_RFCR_DROP_FRAME_REPORT |
-			   MT_WF_RFCR_DROP_PROBEREQ |
-			   MT_WF_RFCR_DROP_MCAST_FILTERED |
-			   MT_WF_RFCR_DROP_MCAST |
-			   MT_WF_RFCR_DROP_BCAST |
-			   MT_WF_RFCR_DROP_DUPLICATE |
-			   MT_WF_RFCR_DROP_A2_BSSID |
-			   MT_WF_RFCR_DROP_UNWANTED_CTL |
-			   MT_WF_RFCR_DROP_STBC_MULTI);
-
-	if (phy->n_beacon_vif || !mt7615_firmware_offload(dev))
-		phy->rxfilter &= ~MT_WF_RFCR_DROP_OTHER_BEACON;
-
-	MT76_FILTER(OTHER_BSS, MT_WF_RFCR_DROP_OTHER_TIM |
-			       MT_WF_RFCR_DROP_A3_MAC |
-			       MT_WF_RFCR_DROP_A3_BSSID);
-
-	MT76_FILTER(FCSFAIL, MT_WF_RFCR_DROP_FCSFAIL);
-
-	MT76_FILTER(CONTROL, MT_WF_RFCR_DROP_CTS |
-			     MT_WF_RFCR_DROP_RTS |
-			     MT_WF_RFCR_DROP_CTL_RSV |
-			     MT_WF_RFCR_DROP_NDPA);
-
-	*total_flags = flags;
-	mt76_wr(dev, MT_WF_RFCR(band), phy->rxfilter);
-
-	if (*total_flags & FIF_CONTROL)
-		mt76_clear(dev, MT_WF_RFCR1(band), ctl_flags);
-	else
-		mt76_set(dev, MT_WF_RFCR1(band), ctl_flags);
-
-	mt7615_mutex_release(dev);
-}
-
-static void mt7615_bss_info_changed(struct ieee80211_hw *hw,
-				    struct ieee80211_vif *vif,
-				    struct ieee80211_bss_conf *info,
-				    u32 changed)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-
-	mt7615_mutex_acquire(dev);
-
-	if (changed & BSS_CHANGED_ERP_SLOT) {
-		int slottime = info->use_short_slot ? 9 : 20;
-
-		if (slottime != phy->slottime) {
-			phy->slottime = slottime;
-			mt7615_mac_set_timing(phy);
-		}
-	}
-
-	if (changed & BSS_CHANGED_BEACON_ENABLED && info->enable_beacon) {
-		mt7615_mcu_add_bss_info(phy, vif, NULL, true);
-		mt7615_mcu_sta_add(phy, vif, NULL, true);
-
-		if (mt7615_firmware_offload(dev) && vif->p2p)
-			mt76_connac_mcu_set_p2p_oppps(hw, vif);
-	}
-
-	if (changed & (BSS_CHANGED_BEACON |
-		       BSS_CHANGED_BEACON_ENABLED))
-		mt7615_mcu_add_beacon(dev, hw, vif, info->enable_beacon);
-
-	if (changed & BSS_CHANGED_PS)
-		mt76_connac_mcu_set_vif_ps(&dev->mt76, vif);
-
-	if ((changed & BSS_CHANGED_ARP_FILTER) &&
-	    mt7615_firmware_offload(dev)) {
-		struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-
-		mt76_connac_mcu_update_arp_filter(&dev->mt76, &mvif->mt76,
-						  info);
-	}
-
-	if (changed & BSS_CHANGED_ASSOC)
-		mt7615_mac_set_beacon_filter(phy, vif, info->assoc);
-
-	mt7615_mutex_release(dev);
-}
-
-static void
-mt7615_channel_switch_beacon(struct ieee80211_hw *hw,
-			     struct ieee80211_vif *vif,
-			     struct cfg80211_chan_def *chandef)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-
-	mt7615_mutex_acquire(dev);
-	mt7615_mcu_add_beacon(dev, hw, vif, true);
-	mt7615_mutex_release(dev);
-}
-
-int mt7615_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt7615_phy *phy;
-	int idx, err;
-
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7615_WTBL_STA - 1);
-	if (idx < 0)
-		return -ENOSPC;
-
-	INIT_LIST_HEAD(&msta->poll_list);
-	msta->vif = mvif;
-	msta->wcid.sta = 1;
-	msta->wcid.idx = idx;
-	msta->wcid.phy_idx = mvif->mt76.band_idx;
-
-	phy = mvif->mt76.band_idx ? mt7615_ext_phy(dev) : &dev->phy;
-	err = mt76_connac_pm_wake(phy->mt76, &dev->pm);
-	if (err)
-		return err;
-
-	if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls) {
-		err = mt7615_mcu_add_bss_info(phy, vif, sta, true);
-		if (err)
-			return err;
-	}
-
-	mt7615_mac_wtbl_update(dev, idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-	err = mt7615_mcu_sta_add(&dev->phy, vif, sta, true);
-	if (err)
-		return err;
-
-	mt76_connac_power_save_sched(phy->mt76, &dev->pm);
-
-	return err;
-}
-EXPORT_SYMBOL_GPL(mt7615_mac_sta_add);
-
-void mt7615_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt7615_phy *phy;
-
-	mt76_connac_free_pending_tx_skbs(&dev->pm, &msta->wcid);
-
-	phy = mvif->mt76.band_idx ? mt7615_ext_phy(dev) : &dev->phy;
-	mt76_connac_pm_wake(phy->mt76, &dev->pm);
-
-	mt7615_mcu_sta_add(&dev->phy, vif, sta, false);
-	mt7615_mac_wtbl_update(dev, msta->wcid.idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-	if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls)
-		mt7615_mcu_add_bss_info(phy, vif, sta, false);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (!list_empty(&msta->poll_list))
-		list_del_init(&msta->poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	mt76_connac_power_save_sched(phy->mt76, &dev->pm);
-}
-EXPORT_SYMBOL_GPL(mt7615_mac_sta_remove);
-
-static void mt7615_sta_rate_tbl_update(struct ieee80211_hw *hw,
-				       struct ieee80211_vif *vif,
-				       struct ieee80211_sta *sta)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;
-	struct ieee80211_sta_rates *sta_rates = rcu_dereference(sta->rates);
-	int i;
-
-	if (!sta_rates)
-		return;
-
-	spin_lock_bh(&dev->mt76.lock);
-	for (i = 0; i < ARRAY_SIZE(msta->rates); i++) {
-		msta->rates[i].idx = sta_rates->rate[i].idx;
-		msta->rates[i].count = sta_rates->rate[i].count;
-		msta->rates[i].flags = sta_rates->rate[i].flags;
-
-		if (msta->rates[i].idx < 0 || !msta->rates[i].count)
-			break;
-	}
-	msta->n_rates = i;
-	if (mt76_connac_pm_ref(phy->mt76, &dev->pm)) {
-		mt7615_mac_set_rates(phy, msta, NULL, msta->rates);
-		mt76_connac_pm_unref(phy->mt76, &dev->pm);
-	}
-	spin_unlock_bh(&dev->mt76.lock);
-}
-
-void mt7615_tx_worker(struct mt76_worker *w)
-{
-	struct mt7615_dev *dev = container_of(w, struct mt7615_dev,
-					      mt76.tx_worker);
-
-	if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) {
-		queue_work(dev->mt76.wq, &dev->pm.wake_work);
-		return;
-	}
-
-	mt76_tx_worker_run(&dev->mt76);
-	mt76_connac_pm_unref(&dev->mphy, &dev->pm);
-}
-
-static void mt7615_tx(struct ieee80211_hw *hw,
-		      struct ieee80211_tx_control *control,
-		      struct sk_buff *skb)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-	struct mt7615_sta *msta = NULL;
-	int qid;
-
-	if (control->sta) {
-		msta = (struct mt7615_sta *)control->sta->drv_priv;
-		wcid = &msta->wcid;
-	}
-
-	if (vif && !control->sta) {
-		struct mt7615_vif *mvif;
-
-		mvif = (struct mt7615_vif *)vif->drv_priv;
-		msta = &mvif->sta;
-		wcid = &msta->wcid;
-	}
-
-	if (mt76_connac_pm_ref(mphy, &dev->pm)) {
-		mt76_tx(mphy, control->sta, wcid, skb);
-		mt76_connac_pm_unref(mphy, &dev->pm);
-		return;
-	}
-
-	qid = skb_get_queue_mapping(skb);
-	if (qid >= MT_TXQ_PSD) {
-		qid = IEEE80211_AC_BE;
-		skb_set_queue_mapping(skb, qid);
-	}
-
-	mt76_connac_pm_queue_skb(hw, &dev->pm, wcid, skb);
-}
-
-static int mt7615_set_rts_threshold(struct ieee80211_hw *hw, u32 val)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	int err, band = phy != &dev->phy;
-
-	mt7615_mutex_acquire(dev);
-	err = mt76_connac_mcu_set_rts_thresh(&dev->mt76, val, band);
-	mt7615_mutex_release(dev);
-
-	return err;
-}
-
-static int
-mt7615_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		    struct ieee80211_ampdu_params *params)
-{
-	enum ieee80211_ampdu_mlme_action action = params->action;
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct ieee80211_sta *sta = params->sta;
-	struct ieee80211_txq *txq = sta->txq[params->tid];
-	struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;
-	u16 tid = params->tid;
-	u16 ssn = params->ssn;
-	struct mt76_txq *mtxq;
-	int ret = 0;
-
-	if (!txq)
-		return -EINVAL;
-
-	mtxq = (struct mt76_txq *)txq->drv_priv;
-
-	mt7615_mutex_acquire(dev);
-
-	switch (action) {
-	case IEEE80211_AMPDU_RX_START:
-		mt76_rx_aggr_start(&dev->mt76, &msta->wcid, tid, ssn,
-				   params->buf_size);
-		ret = mt7615_mcu_add_rx_ba(dev, params, true);
-		break;
-	case IEEE80211_AMPDU_RX_STOP:
-		mt76_rx_aggr_stop(&dev->mt76, &msta->wcid, tid);
-		ret = mt7615_mcu_add_rx_ba(dev, params, false);
-		break;
-	case IEEE80211_AMPDU_TX_OPERATIONAL:
-		mtxq->aggr = true;
-		mtxq->send_bar = false;
-		ret = mt7615_mcu_add_tx_ba(dev, params, true);
-		ssn = mt7615_mac_get_sta_tid_sn(dev, msta->wcid.idx, tid);
-		ieee80211_send_bar(vif, sta->addr, tid,
-				   IEEE80211_SN_TO_SEQ(ssn));
-		break;
-	case IEEE80211_AMPDU_TX_STOP_FLUSH:
-	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
-		mtxq->aggr = false;
-		ret = mt7615_mcu_add_tx_ba(dev, params, false);
-		break;
-	case IEEE80211_AMPDU_TX_START:
-		ssn = mt7615_mac_get_sta_tid_sn(dev, msta->wcid.idx, tid);
-		params->ssn = ssn;
-		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
-		break;
-	case IEEE80211_AMPDU_TX_STOP_CONT:
-		mtxq->aggr = false;
-		ret = mt7615_mcu_add_tx_ba(dev, params, false);
-		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
-	}
-	mt7615_mutex_release(dev);
-
-	return ret;
-}
-
-static int
-mt7615_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	       struct ieee80211_sta *sta)
-{
-    return mt76_sta_state(hw, vif, sta, IEEE80211_STA_NOTEXIST,
-			  IEEE80211_STA_NONE);
-}
-
-static int
-mt7615_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		  struct ieee80211_sta *sta)
-{
-    return mt76_sta_state(hw, vif, sta, IEEE80211_STA_NONE,
-			  IEEE80211_STA_NOTEXIST);
-}
-
-static int
-mt7615_get_stats(struct ieee80211_hw *hw,
-		 struct ieee80211_low_level_stats *stats)
-{
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	struct mib_stats *mib = &phy->mib;
-
-	mt7615_mutex_acquire(phy->dev);
-
-	stats->dot11RTSSuccessCount = mib->rts_cnt;
-	stats->dot11RTSFailureCount = mib->rts_retries_cnt;
-	stats->dot11FCSErrorCount = mib->fcs_err_cnt;
-	stats->dot11ACKFailureCount = mib->ack_fail_cnt;
-
-	mt7615_mutex_release(phy->dev);
-
-	return 0;
-}
-
-static u64
-mt7615_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	union {
-		u64 t64;
-		u32 t32[2];
-	} tsf;
-	u16 idx = mvif->mt76.omac_idx;
-	u32 reg;
-
-	idx = idx > HW_BSSID_MAX ? HW_BSSID_0 : idx;
-	reg = idx > 1 ? MT_LPON_TCR2(idx): MT_LPON_TCR0(idx);
-
-	mt7615_mutex_acquire(dev);
-
-	/* TSF read */
-	mt76_rmw(dev, reg, MT_LPON_TCR_MODE, MT_LPON_TCR_READ);
-	tsf.t32[0] = mt76_rr(dev, MT_LPON_UTTR0);
-	tsf.t32[1] = mt76_rr(dev, MT_LPON_UTTR1);
-
-	mt7615_mutex_release(dev);
-
-	return tsf.t64;
-}
-
-static void
-mt7615_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	       u64 timestamp)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	union {
-		u64 t64;
-		u32 t32[2];
-	} tsf = { .t64 = timestamp, };
-	u16 idx = mvif->mt76.omac_idx;
-	u32 reg;
-
-	idx = idx > HW_BSSID_MAX ? HW_BSSID_0 : idx;
-	reg = idx > 1 ? MT_LPON_TCR2(idx): MT_LPON_TCR0(idx);
-
-	mt7615_mutex_acquire(dev);
-
-	mt76_wr(dev, MT_LPON_UTTR0, tsf.t32[0]);
-	mt76_wr(dev, MT_LPON_UTTR1, tsf.t32[1]);
-	/* TSF software overwrite */
-	mt76_rmw(dev, reg, MT_LPON_TCR_MODE, MT_LPON_TCR_WRITE);
-
-	mt7615_mutex_release(dev);
-}
-
-static void
-mt7615_offset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		  s64 timestamp)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	union {
-		u64 t64;
-		u32 t32[2];
-	} tsf = { .t64 = timestamp, };
-	u16 idx = mvif->mt76.omac_idx;
-	u32 reg;
-
-	idx = idx > HW_BSSID_MAX ? HW_BSSID_0 : idx;
-	reg = idx > 1 ? MT_LPON_TCR2(idx): MT_LPON_TCR0(idx);
-
-	mt7615_mutex_acquire(dev);
-
-	mt76_wr(dev, MT_LPON_UTTR0, tsf.t32[0]);
-	mt76_wr(dev, MT_LPON_UTTR1, tsf.t32[1]);
-	/* TSF software adjust*/
-	mt76_rmw(dev, reg, MT_LPON_TCR_MODE, MT_LPON_TCR_ADJUST);
-
-	mt7615_mutex_release(dev);
-}
-
-static void
-mt7615_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class)
-{
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	struct mt7615_dev *dev = phy->dev;
-
-	mt7615_mutex_acquire(dev);
-	phy->coverage_class = max_t(s16, coverage_class, 0);
-	mt7615_mac_set_timing(phy);
-	mt7615_mutex_release(dev);
-}
-
-static int
-mt7615_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	int max_nss = hweight8(hw->wiphy->available_antennas_tx);
-	bool ext_phy = phy != &dev->phy;
-
-	if (!tx_ant || tx_ant != rx_ant || ffs(tx_ant) > max_nss)
-		return -EINVAL;
-
-	if ((BIT(hweight8(tx_ant)) - 1) != tx_ant)
-		tx_ant = BIT(ffs(tx_ant) - 1) - 1;
-
-	mt7615_mutex_acquire(dev);
-
-	phy->mt76->antenna_mask = tx_ant;
-	if (ext_phy) {
-		if (dev->chainmask == 0xf)
-			tx_ant <<= 2;
-		else
-			tx_ant <<= 1;
-	}
-	phy->mt76->chainmask = tx_ant;
-
-	mt76_set_stream_caps(phy->mt76, true);
-
-	mt7615_mutex_release(dev);
-
-	return 0;
-}
-
-static void mt7615_roc_iter(void *priv, u8 *mac,
-			    struct ieee80211_vif *vif)
-{
-	struct mt7615_phy *phy = priv;
-
-	mt7615_mcu_set_roc(phy, vif, NULL, 0);
-}
-
-void mt7615_roc_work(struct work_struct *work)
-{
-	struct mt7615_phy *phy;
-
-	phy = (struct mt7615_phy *)container_of(work, struct mt7615_phy,
-						roc_work);
-
-	if (!test_and_clear_bit(MT76_STATE_ROC, &phy->mt76->state))
-		return;
-
-	mt7615_mutex_acquire(phy->dev);
-	ieee80211_iterate_active_interfaces(phy->mt76->hw,
-					    IEEE80211_IFACE_ITER_RESUME_ALL,
-					    mt7615_roc_iter, phy);
-	mt7615_mutex_release(phy->dev);
-	ieee80211_remain_on_channel_expired(phy->mt76->hw);
-}
-
-void mt7615_roc_timer(struct timer_list *timer)
-{
-	struct mt7615_phy *phy = from_timer(phy, timer, roc_timer);
-
-	ieee80211_queue_work(phy->mt76->hw, &phy->roc_work);
-}
-
-void mt7615_scan_work(struct work_struct *work)
-{
-	struct mt7615_phy *phy;
-
-	phy = (struct mt7615_phy *)container_of(work, struct mt7615_phy,
-						scan_work.work);
-
-	while (true) {
-		struct mt7615_mcu_rxd *rxd;
-		struct sk_buff *skb;
-
-		spin_lock_bh(&phy->dev->mt76.lock);
-		skb = __skb_dequeue(&phy->scan_event_list);
-		spin_unlock_bh(&phy->dev->mt76.lock);
-
-		if (!skb)
-			break;
-
-		rxd = (struct mt7615_mcu_rxd *)skb->data;
-		if (rxd->eid == MCU_EVENT_SCHED_SCAN_DONE) {
-			ieee80211_sched_scan_results(phy->mt76->hw);
-		} else if (test_and_clear_bit(MT76_HW_SCANNING,
-					      &phy->mt76->state)) {
-			struct cfg80211_scan_info info = {
-				.aborted = false,
-			};
-
-			ieee80211_scan_completed(phy->mt76->hw, &info);
-		}
-		dev_kfree_skb(skb);
-	}
-}
-
-static int
-mt7615_hw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	       struct ieee80211_scan_request *req)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	int err;
-
-	/* fall-back to sw-scan */
-	if (!mt7615_firmware_offload(dev))
-		return 1;
-
-	mt7615_mutex_acquire(dev);
-	err = mt76_connac_mcu_hw_scan(mphy, vif, req);
-	mt7615_mutex_release(dev);
-
-	return err;
-}
-
-static void
-mt7615_cancel_hw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-
-	mt7615_mutex_acquire(dev);
-	mt76_connac_mcu_cancel_hw_scan(mphy, vif);
-	mt7615_mutex_release(dev);
-}
-
-static int
-mt7615_start_sched_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			struct cfg80211_sched_scan_request *req,
-			struct ieee80211_scan_ies *ies)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	int err;
-
-	if (!mt7615_firmware_offload(dev))
-		return -EOPNOTSUPP;
-
-	mt7615_mutex_acquire(dev);
-
-	err = mt76_connac_mcu_sched_scan_req(mphy, vif, req);
-	if (err < 0)
-		goto out;
-
-	err = mt76_connac_mcu_sched_scan_enable(mphy, vif, true);
-out:
-	mt7615_mutex_release(dev);
-
-	return err;
-}
-
-static int
-mt7615_stop_sched_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	int err;
-
-	if (!mt7615_firmware_offload(dev))
-		return -EOPNOTSUPP;
-
-	mt7615_mutex_acquire(dev);
-	err = mt76_connac_mcu_sched_scan_enable(mphy, vif, false);
-	mt7615_mutex_release(dev);
-
-	return err;
-}
-
-static int mt7615_remain_on_channel(struct ieee80211_hw *hw,
-				    struct ieee80211_vif *vif,
-				    struct ieee80211_channel *chan,
-				    int duration,
-				    enum ieee80211_roc_type type)
-{
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	int err;
-
-	if (test_and_set_bit(MT76_STATE_ROC, &phy->mt76->state))
-		return 0;
-
-	mt7615_mutex_acquire(phy->dev);
-
-	err = mt7615_mcu_set_roc(phy, vif, chan, duration);
-	if (err < 0) {
-		clear_bit(MT76_STATE_ROC, &phy->mt76->state);
-		goto out;
-	}
-
-	if (!wait_event_timeout(phy->roc_wait, phy->roc_grant, HZ)) {
-		mt7615_mcu_set_roc(phy, vif, NULL, 0);
-		clear_bit(MT76_STATE_ROC, &phy->mt76->state);
-		err = -ETIMEDOUT;
-	}
-
-out:
-	mt7615_mutex_release(phy->dev);
-
-	return err;
-}
-
-static int mt7615_cancel_remain_on_channel(struct ieee80211_hw *hw,
-					   struct ieee80211_vif *vif)
-{
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	int err;
-
-	if (!test_and_clear_bit(MT76_STATE_ROC, &phy->mt76->state))
-		return 0;
-
-	del_timer_sync(&phy->roc_timer);
-	cancel_work_sync(&phy->roc_work);
-
-	mt7615_mutex_acquire(phy->dev);
-	err = mt7615_mcu_set_roc(phy, vif, NULL, 0);
-	mt7615_mutex_release(phy->dev);
-
-	return err;
-}
-
-static void mt7615_sta_set_decap_offload(struct ieee80211_hw *hw,
-				 struct ieee80211_vif *vif,
-				 struct ieee80211_sta *sta,
-				 bool enabled)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;
-
-	mt7615_mutex_acquire(dev);
-
-	if (enabled)
-		set_bit(MT_WCID_FLAG_HDR_TRANS, &msta->wcid.flags);
-	else
-		clear_bit(MT_WCID_FLAG_HDR_TRANS, &msta->wcid.flags);
-
-	mt7615_mcu_set_sta_decap_offload(dev, vif, sta);
-
-	mt7615_mutex_release(dev);
-}
-
-#ifdef CONFIG_PM
-static int mt7615_suspend(struct ieee80211_hw *hw,
-			  struct cfg80211_wowlan *wowlan)
-{
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	int err = 0;
-
-	cancel_delayed_work_sync(&dev->pm.ps_work);
-	mt76_connac_free_pending_tx_skbs(&dev->pm, NULL);
-
-	mt7615_mutex_acquire(dev);
-
-	clear_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-	cancel_delayed_work_sync(&phy->scan_work);
-	cancel_delayed_work_sync(&phy->mt76->mac_work);
-
-	set_bit(MT76_STATE_SUSPEND, &phy->mt76->state);
-	ieee80211_iterate_active_interfaces(hw,
-					    IEEE80211_IFACE_ITER_RESUME_ALL,
-					    mt76_connac_mcu_set_suspend_iter,
-					    phy->mt76);
-
-	if (!mt7615_dev_running(dev))
-		err = mt76_connac_mcu_set_hif_suspend(&dev->mt76, true);
-
-	mt7615_mutex_release(dev);
-
-	return err;
-}
-
-static int mt7615_resume(struct ieee80211_hw *hw)
-{
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	unsigned long timeout;
-	bool running;
-
-	mt7615_mutex_acquire(dev);
-
-	running = mt7615_dev_running(dev);
-	set_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-
-	if (!running) {
-		int err;
-
-		err = mt76_connac_mcu_set_hif_suspend(&dev->mt76, false);
-		if (err < 0) {
-			mt7615_mutex_release(dev);
-			return err;
-		}
-	}
-
-	clear_bit(MT76_STATE_SUSPEND, &phy->mt76->state);
-	ieee80211_iterate_active_interfaces(hw,
-					    IEEE80211_IFACE_ITER_RESUME_ALL,
-					    mt76_connac_mcu_set_suspend_iter,
-					    phy->mt76);
-
-	timeout = mt7615_get_macwork_timeout(dev);
-	ieee80211_queue_delayed_work(hw, &phy->mt76->mac_work, timeout);
-
-	mt7615_mutex_release(dev);
-
-	return 0;
-}
-
-static void mt7615_set_wakeup(struct ieee80211_hw *hw, bool enabled)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-	struct mt76_dev *mdev = &dev->mt76;
-
-	device_set_wakeup_enable(mdev->dev, enabled);
-}
-
-static void mt7615_set_rekey_data(struct ieee80211_hw *hw,
-				  struct ieee80211_vif *vif,
-				  struct cfg80211_gtk_rekey_data *data)
-{
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-
-	mt7615_mutex_acquire(dev);
-	mt76_connac_mcu_update_gtk_rekey(hw, vif, data);
-	mt7615_mutex_release(dev);
-}
-#endif /* CONFIG_PM */
-
-const struct ieee80211_ops mt7615_ops = {
-	.tx = mt7615_tx,
-	.start = mt7615_start,
-	.stop = mt7615_stop,
-	.add_interface = mt7615_add_interface,
-	.remove_interface = mt7615_remove_interface,
-	.config = mt7615_config,
-	.conf_tx = mt7615_conf_tx,
-	.configure_filter = mt7615_configure_filter,
-	.bss_info_changed = mt7615_bss_info_changed,
-	.sta_add = mt7615_sta_add,
-	.sta_remove = mt7615_sta_remove,
-	.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
-	.set_key = mt7615_set_key,
-	.sta_set_decap_offload = mt7615_sta_set_decap_offload,
-	.ampdu_action = mt7615_ampdu_action,
-	.set_rts_threshold = mt7615_set_rts_threshold,
-	.wake_tx_queue = mt76_wake_tx_queue,
-	.sta_rate_tbl_update = mt7615_sta_rate_tbl_update,
-	.sw_scan_start = mt76_sw_scan,
-	.sw_scan_complete = mt76_sw_scan_complete,
-	.release_buffered_frames = mt76_release_buffered_frames,
-	.get_txpower = mt76_get_txpower,
-	.channel_switch_beacon = mt7615_channel_switch_beacon,
-	.get_stats = mt7615_get_stats,
-	.get_tsf = mt7615_get_tsf,
-	.set_tsf = mt7615_set_tsf,
-	.offset_tsf = mt7615_offset_tsf,
-	.get_survey = mt76_get_survey,
-	.get_antenna = mt76_get_antenna,
-	.set_antenna = mt7615_set_antenna,
-	.set_coverage_class = mt7615_set_coverage_class,
-	.hw_scan = mt7615_hw_scan,
-	.cancel_hw_scan = mt7615_cancel_hw_scan,
-	.sched_scan_start = mt7615_start_sched_scan,
-	.sched_scan_stop = mt7615_stop_sched_scan,
-	.remain_on_channel = mt7615_remain_on_channel,
-	.cancel_remain_on_channel = mt7615_cancel_remain_on_channel,
-	CFG80211_TESTMODE_CMD(mt76_testmode_cmd)
-	CFG80211_TESTMODE_DUMP(mt76_testmode_dump)
-#ifdef CONFIG_PM
-	.suspend = mt7615_suspend,
-	.resume = mt7615_resume,
-	.set_wakeup = mt7615_set_wakeup,
-	.set_rekey_data = mt7615_set_rekey_data,
-#endif /* CONFIG_PM */
-	.set_sar_specs = mt7615_set_sar_specs,
-};
-EXPORT_SYMBOL_GPL(mt7615_ops);
-
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mcu.c
deleted file mode 100644
index e175b20..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mcu.c
+++ /dev/null
@@ -1,2570 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2019 MediaTek Inc.
- *
- * Author: Roy Luo <royluo@google.com>
- *         Ryder Lee <ryder.lee@mediatek.com>
- */
-
-#include <linux/firmware.h>
-#include "mt7615.h"
-#include "mcu.h"
-#include "mac.h"
-#include "eeprom.h"
-
-static bool prefer_offload_fw = true;
-module_param(prefer_offload_fw, bool, 0644);
-MODULE_PARM_DESC(prefer_offload_fw,
-		 "Prefer client mode offload firmware (MT7663)");
-
-struct mt7615_patch_hdr {
-	char build_date[16];
-	char platform[4];
-	__be32 hw_sw_ver;
-	__be32 patch_ver;
-	__be16 checksum;
-} __packed;
-
-struct mt7615_fw_trailer {
-	__le32 addr;
-	u8 chip_id;
-	u8 feature_set;
-	u8 eco_code;
-	char fw_ver[10];
-	char build_date[15];
-	__le32 len;
-} __packed;
-
-#define FW_V3_COMMON_TAILER_SIZE	36
-#define FW_V3_REGION_TAILER_SIZE	40
-#define FW_START_OVERRIDE		BIT(0)
-#define FW_START_DLYCAL                 BIT(1)
-#define FW_START_WORKING_PDA_CR4	BIT(2)
-
-struct mt7663_fw_buf {
-	__le32 crc;
-	__le32 d_img_size;
-	__le32 block_size;
-	u8 rsv[4];
-	__le32 img_dest_addr;
-	__le32 img_size;
-	u8 feature_set;
-};
-
-#define MT7615_PATCH_ADDRESS		0x80000
-#define MT7622_PATCH_ADDRESS		0x9c000
-#define MT7663_PATCH_ADDRESS		0xdc000
-
-#define N9_REGION_NUM			2
-#define CR4_REGION_NUM			1
-
-#define IMG_CRC_LEN			4
-
-void mt7615_mcu_fill_msg(struct mt7615_dev *dev, struct sk_buff *skb,
-			 int cmd, int *wait_seq)
-{
-	int txd_len, mcu_cmd = FIELD_GET(__MCU_CMD_FIELD_ID, cmd);
-	struct mt7615_uni_txd *uni_txd;
-	struct mt7615_mcu_txd *mcu_txd;
-	u8 seq, q_idx, pkt_fmt;
-	__le32 *txd;
-	u32 val;
-
-	/* TODO: make dynamic based on msg type */
-	dev->mt76.mcu.timeout = 20 * HZ;
-
-	seq = ++dev->mt76.mcu.msg_seq & 0xf;
-	if (!seq)
-		seq = ++dev->mt76.mcu.msg_seq & 0xf;
-	if (wait_seq)
-		*wait_seq = seq;
-
-	txd_len = cmd & __MCU_CMD_FIELD_UNI ? sizeof(*uni_txd) : sizeof(*mcu_txd);
-	txd = (__le32 *)skb_push(skb, txd_len);
-
-	if (cmd != MCU_CMD(FW_SCATTER)) {
-		q_idx = MT_TX_MCU_PORT_RX_Q0;
-		pkt_fmt = MT_TX_TYPE_CMD;
-	} else {
-		q_idx = MT_TX_MCU_PORT_RX_FWDL;
-		pkt_fmt = MT_TX_TYPE_FW;
-	}
-
-	val = FIELD_PREP(MT_TXD0_TX_BYTES, skb->len) |
-	      FIELD_PREP(MT_TXD0_P_IDX, MT_TX_PORT_IDX_MCU) |
-	      FIELD_PREP(MT_TXD0_Q_IDX, q_idx);
-	txd[0] = cpu_to_le32(val);
-
-	val = MT_TXD1_LONG_FORMAT |
-	      FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_CMD) |
-	      FIELD_PREP(MT_TXD1_PKT_FMT, pkt_fmt);
-	txd[1] = cpu_to_le32(val);
-
-	if (cmd & __MCU_CMD_FIELD_UNI) {
-		uni_txd = (struct mt7615_uni_txd *)txd;
-		uni_txd->len = cpu_to_le16(skb->len - sizeof(uni_txd->txd));
-		uni_txd->option = MCU_CMD_UNI_EXT_ACK;
-		uni_txd->cid = cpu_to_le16(mcu_cmd);
-		uni_txd->s2d_index = MCU_S2D_H2N;
-		uni_txd->pkt_type = MCU_PKT_ID;
-		uni_txd->seq = seq;
-
-		return;
-	}
-
-	mcu_txd = (struct mt7615_mcu_txd *)txd;
-	mcu_txd->len = cpu_to_le16(skb->len - sizeof(mcu_txd->txd));
-	mcu_txd->pq_id = cpu_to_le16(MCU_PQ_ID(MT_TX_PORT_IDX_MCU, q_idx));
-	mcu_txd->s2d_index = MCU_S2D_H2N;
-	mcu_txd->pkt_type = MCU_PKT_ID;
-	mcu_txd->seq = seq;
-	mcu_txd->cid = mcu_cmd;
-	mcu_txd->ext_cid = FIELD_GET(__MCU_CMD_FIELD_EXT_ID, cmd);
-
-	if (mcu_txd->ext_cid || (cmd & __MCU_CMD_FIELD_CE)) {
-		if (cmd & __MCU_CMD_FIELD_QUERY)
-			mcu_txd->set_query = MCU_Q_QUERY;
-		else
-			mcu_txd->set_query = MCU_Q_SET;
-		mcu_txd->ext_cid_ack = !!mcu_txd->ext_cid;
-	} else {
-		mcu_txd->set_query = MCU_Q_NA;
-	}
-}
-EXPORT_SYMBOL_GPL(mt7615_mcu_fill_msg);
-
-int mt7615_mcu_parse_response(struct mt76_dev *mdev, int cmd,
-			      struct sk_buff *skb, int seq)
-{
-	struct mt7615_mcu_rxd *rxd;
-	int ret = 0;
-
-	if (!skb) {
-		dev_err(mdev->dev, "Message %08x (seq %d) timeout\n",
-			cmd, seq);
-		return -ETIMEDOUT;
-	}
-
-	rxd = (struct mt7615_mcu_rxd *)skb->data;
-	if (seq != rxd->seq)
-		return -EAGAIN;
-
-	if (cmd == MCU_CMD(PATCH_SEM_CONTROL)) {
-		skb_pull(skb, sizeof(*rxd) - 4);
-		ret = *skb->data;
-	} else if (cmd == MCU_EXT_CMD(THERMAL_CTRL)) {
-		skb_pull(skb, sizeof(*rxd));
-		ret = le32_to_cpu(*(__le32 *)skb->data);
-	} else if (cmd == MCU_EXT_QUERY(RF_REG_ACCESS)) {
-		skb_pull(skb, sizeof(*rxd));
-		ret = le32_to_cpu(*(__le32 *)&skb->data[8]);
-	} else if (cmd == MCU_UNI_CMD(DEV_INFO_UPDATE) ||
-		   cmd == MCU_UNI_CMD(BSS_INFO_UPDATE) ||
-		   cmd == MCU_UNI_CMD(STA_REC_UPDATE) ||
-		   cmd == MCU_UNI_CMD(HIF_CTRL) ||
-		   cmd == MCU_UNI_CMD(OFFLOAD) ||
-		   cmd == MCU_UNI_CMD(SUSPEND)) {
-		struct mt7615_mcu_uni_event *event;
-
-		skb_pull(skb, sizeof(*rxd));
-		event = (struct mt7615_mcu_uni_event *)skb->data;
-		ret = le32_to_cpu(event->status);
-	} else if (cmd == MCU_CE_QUERY(REG_READ)) {
-		struct mt7615_mcu_reg_event *event;
-
-		skb_pull(skb, sizeof(*rxd));
-		event = (struct mt7615_mcu_reg_event *)skb->data;
-		ret = (int)le32_to_cpu(event->val);
-	}
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt7615_mcu_parse_response);
-
-static int
-mt7615_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
-			int cmd, int *seq)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	enum mt76_mcuq_id qid;
-
-	mt7615_mcu_fill_msg(dev, skb, cmd, seq);
-	if (test_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state))
-		qid = MT_MCUQ_WM;
-	else
-		qid = MT_MCUQ_FWDL;
-
-	return mt76_tx_queue_skb_raw(dev, dev->mt76.q_mcu[qid], skb, 0);
-}
-
-u32 mt7615_rf_rr(struct mt7615_dev *dev, u32 wf, u32 reg)
-{
-	struct {
-		__le32 wifi_stream;
-		__le32 address;
-		__le32 data;
-	} req = {
-		.wifi_stream = cpu_to_le32(wf),
-		.address = cpu_to_le32(reg),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_QUERY(RF_REG_ACCESS),
-				 &req, sizeof(req), true);
-}
-
-int mt7615_rf_wr(struct mt7615_dev *dev, u32 wf, u32 reg, u32 val)
-{
-	struct {
-		__le32 wifi_stream;
-		__le32 address;
-		__le32 data;
-	} req = {
-		.wifi_stream = cpu_to_le32(wf),
-		.address = cpu_to_le32(reg),
-		.data = cpu_to_le32(val),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RF_REG_ACCESS),
-				 &req, sizeof(req), false);
-}
-
-void mt7622_trigger_hif_int(struct mt7615_dev *dev, bool en)
-{
-	if (!is_mt7622(&dev->mt76))
-		return;
-
-	regmap_update_bits(dev->infracfg, MT_INFRACFG_MISC,
-			   MT_INFRACFG_MISC_AP2CONN_WAKE,
-			   !en * MT_INFRACFG_MISC_AP2CONN_WAKE);
-}
-EXPORT_SYMBOL_GPL(mt7622_trigger_hif_int);
-
-static int mt7615_mcu_drv_pmctrl(struct mt7615_dev *dev)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_pm *pm = &dev->pm;
-	struct mt76_dev *mdev = &dev->mt76;
-	u32 addr;
-	int err;
-
-	if (is_mt7663(mdev)) {
-		/* Clear firmware own via N9 eint */
-		mt76_wr(dev, MT_PCIE_DOORBELL_PUSH, MT_CFG_LPCR_HOST_DRV_OWN);
-		mt76_poll(dev, MT_CONN_ON_MISC, MT_CFG_LPCR_HOST_FW_OWN, 0, 3000);
-
-		addr = MT_CONN_HIF_ON_LPCTL;
-	} else {
-		addr = MT_CFG_LPCR_HOST;
-	}
-
-	mt76_wr(dev, addr, MT_CFG_LPCR_HOST_DRV_OWN);
-
-	mt7622_trigger_hif_int(dev, true);
-
-	err = !mt76_poll_msec(dev, addr, MT_CFG_LPCR_HOST_FW_OWN, 0, 3000);
-
-	mt7622_trigger_hif_int(dev, false);
-
-	if (err) {
-		dev_err(mdev->dev, "driver own failed\n");
-		return -ETIMEDOUT;
-	}
-
-	clear_bit(MT76_STATE_PM, &mphy->state);
-
-	pm->stats.last_wake_event = jiffies;
-	pm->stats.doze_time += pm->stats.last_wake_event -
-			       pm->stats.last_doze_event;
-
-	return 0;
-}
-
-static int mt7615_mcu_lp_drv_pmctrl(struct mt7615_dev *dev)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_pm *pm = &dev->pm;
-	int i, err = 0;
-
-	mutex_lock(&pm->mutex);
-
-	if (!test_bit(MT76_STATE_PM, &mphy->state))
-		goto out;
-
-	for (i = 0; i < MT7615_DRV_OWN_RETRY_COUNT; i++) {
-		mt76_wr(dev, MT_PCIE_DOORBELL_PUSH, MT_CFG_LPCR_HOST_DRV_OWN);
-		if (mt76_poll_msec(dev, MT_CONN_HIF_ON_LPCTL,
-				   MT_CFG_LPCR_HOST_FW_OWN, 0, 50))
-			break;
-	}
-
-	if (i == MT7615_DRV_OWN_RETRY_COUNT) {
-		dev_err(dev->mt76.dev, "driver own failed\n");
-		err = -EIO;
-		goto out;
-	}
-	clear_bit(MT76_STATE_PM, &mphy->state);
-
-	pm->stats.last_wake_event = jiffies;
-	pm->stats.doze_time += pm->stats.last_wake_event -
-			       pm->stats.last_doze_event;
-out:
-	mutex_unlock(&pm->mutex);
-
-	return err;
-}
-
-static int mt7615_mcu_fw_pmctrl(struct mt7615_dev *dev)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_pm *pm = &dev->pm;
-	int err = 0;
-	u32 addr;
-
-	mutex_lock(&pm->mutex);
-
-	if (mt76_connac_skip_fw_pmctrl(mphy, pm))
-		goto out;
-
-	mt7622_trigger_hif_int(dev, true);
-
-	addr = is_mt7663(&dev->mt76) ? MT_CONN_HIF_ON_LPCTL : MT_CFG_LPCR_HOST;
-	mt76_wr(dev, addr, MT_CFG_LPCR_HOST_FW_OWN);
-
-	if (is_mt7622(&dev->mt76) &&
-	    !mt76_poll_msec(dev, addr, MT_CFG_LPCR_HOST_FW_OWN,
-			    MT_CFG_LPCR_HOST_FW_OWN, 3000)) {
-		dev_err(dev->mt76.dev, "Timeout for firmware own\n");
-		clear_bit(MT76_STATE_PM, &mphy->state);
-		err = -EIO;
-	}
-
-	mt7622_trigger_hif_int(dev, false);
-	if (!err) {
-		pm->stats.last_doze_event = jiffies;
-		pm->stats.awake_time += pm->stats.last_doze_event -
-					pm->stats.last_wake_event;
-	}
-out:
-	mutex_unlock(&pm->mutex);
-
-	return err;
-}
-
-static void
-mt7615_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	if (vif->csa_active)
-		ieee80211_csa_finish(vif);
-}
-
-static void
-mt7615_mcu_rx_csa_notify(struct mt7615_dev *dev, struct sk_buff *skb)
-{
-	struct mt7615_phy *ext_phy = mt7615_ext_phy(dev);
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7615_mcu_csa_notify *c;
-
-	c = (struct mt7615_mcu_csa_notify *)skb->data;
-
-	if (c->omac_idx > EXT_BSSID_MAX)
-		return;
-
-	if (ext_phy && ext_phy->omac_mask & BIT_ULL(c->omac_idx))
-		mphy = dev->mt76.phys[MT_BAND1];
-
-	ieee80211_iterate_active_interfaces_atomic(mphy->hw,
-			IEEE80211_IFACE_ITER_RESUME_ALL,
-			mt7615_mcu_csa_finish, mphy->hw);
-}
-
-static void
-mt7615_mcu_rx_radar_detected(struct mt7615_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7615_mcu_rdd_report *r;
-
-	r = (struct mt7615_mcu_rdd_report *)skb->data;
-
-	if (!dev->radar_pattern.n_pulses && !r->long_detected &&
-	    !r->constant_prf_detected && !r->staggered_prf_detected)
-		return;
-
-	if (r->band_idx && dev->mt76.phys[MT_BAND1])
-		mphy = dev->mt76.phys[MT_BAND1];
-
-	if (mt76_phy_dfs_state(mphy) < MT_DFS_STATE_CAC)
-		return;
-
-	ieee80211_radar_detected(mphy->hw);
-	dev->hw_pattern++;
-}
-
-static void
-mt7615_mcu_rx_log_message(struct mt7615_dev *dev, struct sk_buff *skb)
-{
-	struct mt7615_mcu_rxd *rxd = (struct mt7615_mcu_rxd *)skb->data;
-	const char *data = (char *)&rxd[1];
-	const char *type;
-
-	switch (rxd->s2d_index) {
-	case 0:
-		type = "N9";
-		break;
-	case 2:
-		type = "CR4";
-		break;
-	default:
-		type = "unknown";
-		break;
-	}
-
-	wiphy_info(mt76_hw(dev)->wiphy, "%s: %.*s", type,
-		   (int)(skb->len - sizeof(*rxd)), data);
-}
-
-static void
-mt7615_mcu_rx_ext_event(struct mt7615_dev *dev, struct sk_buff *skb)
-{
-	struct mt7615_mcu_rxd *rxd = (struct mt7615_mcu_rxd *)skb->data;
-
-	switch (rxd->ext_eid) {
-	case MCU_EXT_EVENT_RDD_REPORT:
-		mt7615_mcu_rx_radar_detected(dev, skb);
-		break;
-	case MCU_EXT_EVENT_CSA_NOTIFY:
-		mt7615_mcu_rx_csa_notify(dev, skb);
-		break;
-	case MCU_EXT_EVENT_FW_LOG_2_HOST:
-		mt7615_mcu_rx_log_message(dev, skb);
-		break;
-	default:
-		break;
-	}
-}
-
-static void
-mt7615_mcu_scan_event(struct mt7615_dev *dev, struct sk_buff *skb)
-{
-	u8 *seq_num = skb->data + sizeof(struct mt7615_mcu_rxd);
-	struct mt7615_phy *phy;
-	struct mt76_phy *mphy;
-
-	if (*seq_num & BIT(7) && dev->mt76.phys[MT_BAND1])
-		mphy = dev->mt76.phys[MT_BAND1];
-	else
-		mphy = &dev->mt76.phy;
-
-	phy = (struct mt7615_phy *)mphy->priv;
-
-	spin_lock_bh(&dev->mt76.lock);
-	__skb_queue_tail(&phy->scan_event_list, skb);
-	spin_unlock_bh(&dev->mt76.lock);
-
-	ieee80211_queue_delayed_work(mphy->hw, &phy->scan_work,
-				     MT7615_HW_SCAN_TIMEOUT);
-}
-
-static void
-mt7615_mcu_roc_event(struct mt7615_dev *dev, struct sk_buff *skb)
-{
-	struct mt7615_roc_tlv *event;
-	struct mt7615_phy *phy;
-	struct mt76_phy *mphy;
-	int duration;
-
-	skb_pull(skb, sizeof(struct mt7615_mcu_rxd));
-	event = (struct mt7615_roc_tlv *)skb->data;
-
-	if (event->dbdc_band && dev->mt76.phys[MT_BAND1])
-		mphy = dev->mt76.phys[MT_BAND1];
-	else
-		mphy = &dev->mt76.phy;
-
-	ieee80211_ready_on_channel(mphy->hw);
-
-	phy = (struct mt7615_phy *)mphy->priv;
-	phy->roc_grant = true;
-	wake_up(&phy->roc_wait);
-
-	duration = le32_to_cpu(event->max_interval);
-	mod_timer(&phy->roc_timer,
-		  round_jiffies_up(jiffies + msecs_to_jiffies(duration)));
-}
-
-static void
-mt7615_mcu_beacon_loss_event(struct mt7615_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_connac_beacon_loss_event *event;
-	struct mt76_phy *mphy;
-	u8 band_idx = 0; /* DBDC support */
-
-	skb_pull(skb, sizeof(struct mt7615_mcu_rxd));
-	event = (struct mt76_connac_beacon_loss_event *)skb->data;
-	if (band_idx && dev->mt76.phys[MT_BAND1])
-		mphy = dev->mt76.phys[MT_BAND1];
-	else
-		mphy = &dev->mt76.phy;
-
-	ieee80211_iterate_active_interfaces_atomic(mphy->hw,
-					IEEE80211_IFACE_ITER_RESUME_ALL,
-					mt76_connac_mcu_beacon_loss_iter,
-					event);
-}
-
-static void
-mt7615_mcu_bss_event(struct mt7615_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_connac_mcu_bss_event *event;
-	struct mt76_phy *mphy;
-	u8 band_idx = 0; /* DBDC support */
-
-	skb_pull(skb, sizeof(struct mt7615_mcu_rxd));
-	event = (struct mt76_connac_mcu_bss_event *)skb->data;
-
-	if (band_idx && dev->mt76.phys[MT_BAND1])
-		mphy = dev->mt76.phys[MT_BAND1];
-	else
-		mphy = &dev->mt76.phy;
-
-	if (event->is_absent)
-		ieee80211_stop_queues(mphy->hw);
-	else
-		ieee80211_wake_queues(mphy->hw);
-}
-
-static void
-mt7615_mcu_rx_unsolicited_event(struct mt7615_dev *dev, struct sk_buff *skb)
-{
-	struct mt7615_mcu_rxd *rxd = (struct mt7615_mcu_rxd *)skb->data;
-
-	switch (rxd->eid) {
-	case MCU_EVENT_EXT:
-		mt7615_mcu_rx_ext_event(dev, skb);
-		break;
-	case MCU_EVENT_BSS_BEACON_LOSS:
-		mt7615_mcu_beacon_loss_event(dev, skb);
-		break;
-	case MCU_EVENT_ROC:
-		mt7615_mcu_roc_event(dev, skb);
-		break;
-	case MCU_EVENT_SCHED_SCAN_DONE:
-	case MCU_EVENT_SCAN_DONE:
-		mt7615_mcu_scan_event(dev, skb);
-		return;
-	case MCU_EVENT_BSS_ABSENCE:
-		mt7615_mcu_bss_event(dev, skb);
-		break;
-	case MCU_EVENT_COREDUMP:
-		mt76_connac_mcu_coredump_event(&dev->mt76, skb,
-					       &dev->coredump);
-		return;
-	default:
-		break;
-	}
-	dev_kfree_skb(skb);
-}
-
-void mt7615_mcu_rx_event(struct mt7615_dev *dev, struct sk_buff *skb)
-{
-	struct mt7615_mcu_rxd *rxd = (struct mt7615_mcu_rxd *)skb->data;
-
-	if (rxd->ext_eid == MCU_EXT_EVENT_THERMAL_PROTECT ||
-	    rxd->ext_eid == MCU_EXT_EVENT_FW_LOG_2_HOST ||
-	    rxd->ext_eid == MCU_EXT_EVENT_ASSERT_DUMP ||
-	    rxd->ext_eid == MCU_EXT_EVENT_PS_SYNC ||
-	    rxd->eid == MCU_EVENT_BSS_BEACON_LOSS ||
-	    rxd->eid == MCU_EVENT_SCHED_SCAN_DONE ||
-	    rxd->eid == MCU_EVENT_BSS_ABSENCE ||
-	    rxd->eid == MCU_EVENT_SCAN_DONE ||
-	    rxd->eid == MCU_EVENT_COREDUMP ||
-	    rxd->eid == MCU_EVENT_ROC ||
-	    !rxd->seq)
-		mt7615_mcu_rx_unsolicited_event(dev, skb);
-	else
-		mt76_mcu_rx_event(&dev->mt76, skb);
-}
-
-static int
-mt7615_mcu_muar_config(struct mt7615_dev *dev, struct ieee80211_vif *vif,
-		       bool bssid, bool enable)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	u32 idx = mvif->mt76.omac_idx - REPEATER_BSSID_START;
-	u32 mask = dev->omac_mask >> 32 & ~BIT(idx);
-	const u8 *addr = vif->addr;
-	struct {
-		u8 mode;
-		u8 force_clear;
-		u8 clear_bitmap[8];
-		u8 entry_count;
-		u8 write;
-
-		u8 index;
-		u8 bssid;
-		u8 addr[ETH_ALEN];
-	} __packed req = {
-		.mode = !!mask || enable,
-		.entry_count = 1,
-		.write = 1,
-
-		.index = idx * 2 + bssid,
-	};
-
-	if (bssid)
-		addr = vif->bss_conf.bssid;
-
-	if (enable)
-		ether_addr_copy(req.addr, addr);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(MUAR_UPDATE),
-				 &req, sizeof(req), true);
-}
-
-static int
-mt7615_mcu_add_dev(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-		   bool enable)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt7615_dev *dev = phy->dev;
-	struct {
-		struct req_hdr {
-			u8 omac_idx;
-			u8 band_idx;
-			__le16 tlv_num;
-			u8 is_tlv_append;
-			u8 rsv[3];
-		} __packed hdr;
-		struct req_tlv {
-			__le16 tag;
-			__le16 len;
-			u8 active;
-			u8 band_idx;
-			u8 omac_addr[ETH_ALEN];
-		} __packed tlv;
-	} data = {
-		.hdr = {
-			.omac_idx = mvif->mt76.omac_idx,
-			.band_idx = mvif->mt76.band_idx,
-			.tlv_num = cpu_to_le16(1),
-			.is_tlv_append = 1,
-		},
-		.tlv = {
-			.tag = cpu_to_le16(DEV_INFO_ACTIVE),
-			.len = cpu_to_le16(sizeof(struct req_tlv)),
-			.active = enable,
-			.band_idx = mvif->mt76.band_idx,
-		},
-	};
-
-	if (mvif->mt76.omac_idx >= REPEATER_BSSID_START)
-		return mt7615_mcu_muar_config(dev, vif, false, enable);
-
-	memcpy(data.tlv.omac_addr, vif->addr, ETH_ALEN);
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(DEV_INFO_UPDATE),
-				 &data, sizeof(data), true);
-}
-
-static int
-mt7615_mcu_add_beacon_offload(struct mt7615_dev *dev,
-			      struct ieee80211_hw *hw,
-			      struct ieee80211_vif *vif, bool enable)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-	struct ieee80211_mutable_offsets offs;
-	struct ieee80211_tx_info *info;
-	struct req {
-		u8 omac_idx;
-		u8 enable;
-		u8 wlan_idx;
-		u8 band_idx;
-		u8 pkt_type;
-		u8 need_pre_tbtt_int;
-		__le16 csa_ie_pos;
-		__le16 pkt_len;
-		__le16 tim_ie_pos;
-		u8 pkt[512];
-		u8 csa_cnt;
-		/* bss color change */
-		u8 bcc_cnt;
-		__le16 bcc_ie_pos;
-	} __packed req = {
-		.omac_idx = mvif->mt76.omac_idx,
-		.enable = enable,
-		.wlan_idx = wcid->idx,
-		.band_idx = mvif->mt76.band_idx,
-	};
-	struct sk_buff *skb;
-
-	if (!enable)
-		goto out;
-
-	skb = ieee80211_beacon_get_template(hw, vif, &offs);
-	if (!skb)
-		return -EINVAL;
-
-	if (skb->len > 512 - MT_TXD_SIZE) {
-		dev_err(dev->mt76.dev, "Bcn size limit exceed\n");
-		dev_kfree_skb(skb);
-		return -EINVAL;
-	}
-
-	info = IEEE80211_SKB_CB(skb);
-	info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, mvif->mt76.band_idx);
-
-	mt7615_mac_write_txwi(dev, (__le32 *)(req.pkt), skb, wcid, NULL,
-			      0, NULL, 0, true);
-	memcpy(req.pkt + MT_TXD_SIZE, skb->data, skb->len);
-	req.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
-	req.tim_ie_pos = cpu_to_le16(MT_TXD_SIZE + offs.tim_offset);
-	if (offs.cntdwn_counter_offs[0]) {
-		u16 csa_offs;
-
-		csa_offs = MT_TXD_SIZE + offs.cntdwn_counter_offs[0] - 4;
-		req.csa_ie_pos = cpu_to_le16(csa_offs);
-		req.csa_cnt = skb->data[offs.cntdwn_counter_offs[0]];
-	}
-	dev_kfree_skb(skb);
-
-out:
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(BCN_OFFLOAD), &req,
-				 sizeof(req), true);
-}
-
-static int
-mt7615_mcu_ctrl_pm_state(struct mt7615_dev *dev, int band, int state)
-{
-	return mt76_connac_mcu_set_pm(&dev->mt76, band, state);
-}
-
-static int
-mt7615_mcu_add_bss(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-		   struct ieee80211_sta *sta, bool enable)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt7615_dev *dev = phy->dev;
-	struct sk_buff *skb;
-
-	if (mvif->mt76.omac_idx >= REPEATER_BSSID_START)
-		mt7615_mcu_muar_config(dev, vif, true, enable);
-
-	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76, NULL);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	if (enable)
-		mt76_connac_mcu_bss_omac_tlv(skb, vif);
-
-	mt76_connac_mcu_bss_basic_tlv(skb, vif, sta, phy->mt76,
-				      mvif->sta.wcid.idx, enable);
-
-	if (enable && mvif->mt76.omac_idx >= EXT_BSSID_START &&
-	    mvif->mt76.omac_idx < REPEATER_BSSID_START)
-		mt76_connac_mcu_bss_ext_tlv(skb, &mvif->mt76);
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_EXT_CMD(BSS_INFO_UPDATE), true);
-}
-
-static int
-mt7615_mcu_wtbl_tx_ba(struct mt7615_dev *dev,
-		      struct ieee80211_ampdu_params *params,
-		      bool enable)
-{
-	struct mt7615_sta *msta = (struct mt7615_sta *)params->sta->drv_priv;
-	struct mt7615_vif *mvif = msta->vif;
-	struct wtbl_req_hdr *wtbl_hdr;
-	struct sk_buff *skb = NULL;
-	int err;
-
-	wtbl_hdr = mt76_connac_mcu_alloc_wtbl_req(&dev->mt76, &msta->wcid,
-						  WTBL_SET, NULL, &skb);
-	if (IS_ERR(wtbl_hdr))
-		return PTR_ERR(wtbl_hdr);
-
-	mt76_connac_mcu_wtbl_ba_tlv(&dev->mt76, skb, params, enable, true,
-				    NULL, wtbl_hdr);
-
-	err = mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				    MCU_EXT_CMD(WTBL_UPDATE), true);
-	if (err < 0)
-		return err;
-
-	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					    &msta->wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	mt76_connac_mcu_sta_ba_tlv(skb, params, enable, true);
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_EXT_CMD(STA_REC_UPDATE), true);
-}
-
-static int
-mt7615_mcu_wtbl_rx_ba(struct mt7615_dev *dev,
-		      struct ieee80211_ampdu_params *params,
-		      bool enable)
-{
-	struct mt7615_sta *msta = (struct mt7615_sta *)params->sta->drv_priv;
-	struct mt7615_vif *mvif = msta->vif;
-	struct wtbl_req_hdr *wtbl_hdr;
-	struct sk_buff *skb;
-	int err;
-
-	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					    &msta->wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	mt76_connac_mcu_sta_ba_tlv(skb, params, enable, false);
-
-	err = mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				    MCU_EXT_CMD(STA_REC_UPDATE), true);
-	if (err < 0 || !enable)
-		return err;
-
-	skb = NULL;
-	wtbl_hdr = mt76_connac_mcu_alloc_wtbl_req(&dev->mt76, &msta->wcid,
-						  WTBL_SET, NULL, &skb);
-	if (IS_ERR(wtbl_hdr))
-		return PTR_ERR(wtbl_hdr);
-
-	mt76_connac_mcu_wtbl_ba_tlv(&dev->mt76, skb, params, enable, false,
-				    NULL, wtbl_hdr);
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_EXT_CMD(WTBL_UPDATE), true);
-}
-
-static int
-mt7615_mcu_wtbl_sta_add(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-			struct ieee80211_sta *sta, bool enable)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct sk_buff *skb, *sskb, *wskb = NULL;
-	struct mt7615_dev *dev = phy->dev;
-	struct wtbl_req_hdr *wtbl_hdr;
-	struct mt7615_sta *msta;
-	bool new_entry = true;
-	int cmd, err;
-
-	msta = sta ? (struct mt7615_sta *)sta->drv_priv : &mvif->sta;
-
-	sskb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					     &msta->wcid);
-	if (IS_ERR(sskb))
-		return PTR_ERR(sskb);
-
-	if (!sta) {
-		if (mvif->sta_added)
-			new_entry = false;
-		else
-			mvif->sta_added = true;
-	}
-	mt76_connac_mcu_sta_basic_tlv(sskb, vif, sta, enable, new_entry);
-	if (enable && sta)
-		mt76_connac_mcu_sta_tlv(phy->mt76, sskb, sta, vif, 0,
-					MT76_STA_INFO_STATE_ASSOC);
-
-	wtbl_hdr = mt76_connac_mcu_alloc_wtbl_req(&dev->mt76, &msta->wcid,
-						  WTBL_RESET_AND_SET, NULL,
-						  &wskb);
-	if (IS_ERR(wtbl_hdr))
-		return PTR_ERR(wtbl_hdr);
-
-	if (enable) {
-		mt76_connac_mcu_wtbl_generic_tlv(&dev->mt76, wskb, vif, sta,
-						 NULL, wtbl_hdr);
-		if (sta)
-			mt76_connac_mcu_wtbl_ht_tlv(&dev->mt76, wskb, sta,
-						    NULL, wtbl_hdr, true, true);
-		mt76_connac_mcu_wtbl_hdr_trans_tlv(wskb, vif, &msta->wcid,
-						   NULL, wtbl_hdr);
-	}
-
-	cmd = enable ? MCU_EXT_CMD(WTBL_UPDATE) : MCU_EXT_CMD(STA_REC_UPDATE);
-	skb = enable ? wskb : sskb;
-
-	err = mt76_mcu_skb_send_msg(&dev->mt76, skb, cmd, true);
-	if (err < 0) {
-		skb = enable ? sskb : wskb;
-		dev_kfree_skb(skb);
-
-		return err;
-	}
-
-	cmd = enable ? MCU_EXT_CMD(STA_REC_UPDATE) : MCU_EXT_CMD(WTBL_UPDATE);
-	skb = enable ? sskb : wskb;
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb, cmd, true);
-}
-
-static int
-mt7615_mcu_wtbl_update_hdr_trans(struct mt7615_dev *dev,
-				 struct ieee80211_vif *vif,
-				 struct ieee80211_sta *sta)
-{
-	return mt76_connac_mcu_wtbl_update_hdr_trans(&dev->mt76, vif, sta);
-}
-
-static const struct mt7615_mcu_ops wtbl_update_ops = {
-	.add_beacon_offload = mt7615_mcu_add_beacon_offload,
-	.set_pm_state = mt7615_mcu_ctrl_pm_state,
-	.add_dev_info = mt7615_mcu_add_dev,
-	.add_bss_info = mt7615_mcu_add_bss,
-	.add_tx_ba = mt7615_mcu_wtbl_tx_ba,
-	.add_rx_ba = mt7615_mcu_wtbl_rx_ba,
-	.sta_add = mt7615_mcu_wtbl_sta_add,
-	.set_drv_ctrl = mt7615_mcu_drv_pmctrl,
-	.set_fw_ctrl = mt7615_mcu_fw_pmctrl,
-	.set_sta_decap_offload = mt7615_mcu_wtbl_update_hdr_trans,
-};
-
-static int
-mt7615_mcu_sta_ba(struct mt7615_dev *dev,
-		  struct ieee80211_ampdu_params *params,
-		  bool enable, bool tx)
-{
-	struct mt7615_sta *msta = (struct mt7615_sta *)params->sta->drv_priv;
-	struct mt7615_vif *mvif = msta->vif;
-	struct wtbl_req_hdr *wtbl_hdr;
-	struct tlv *sta_wtbl;
-	struct sk_buff *skb;
-
-	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					    &msta->wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	mt76_connac_mcu_sta_ba_tlv(skb, params, enable, tx);
-
-	sta_wtbl = mt76_connac_mcu_add_tlv(skb, STA_REC_WTBL, sizeof(struct tlv));
-
-	wtbl_hdr = mt76_connac_mcu_alloc_wtbl_req(&dev->mt76, &msta->wcid,
-						  WTBL_SET, sta_wtbl, &skb);
-	if (IS_ERR(wtbl_hdr))
-		return PTR_ERR(wtbl_hdr);
-
-	mt76_connac_mcu_wtbl_ba_tlv(&dev->mt76, skb, params, enable, tx,
-				    sta_wtbl, wtbl_hdr);
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_EXT_CMD(STA_REC_UPDATE), true);
-}
-
-static int
-mt7615_mcu_sta_tx_ba(struct mt7615_dev *dev,
-		     struct ieee80211_ampdu_params *params,
-		     bool enable)
-{
-	return mt7615_mcu_sta_ba(dev, params, enable, true);
-}
-
-static int
-mt7615_mcu_sta_rx_ba(struct mt7615_dev *dev,
-		     struct ieee80211_ampdu_params *params,
-		     bool enable)
-{
-	return mt7615_mcu_sta_ba(dev, params, enable, false);
-}
-
-static int
-__mt7615_mcu_add_sta(struct mt76_phy *phy, struct ieee80211_vif *vif,
-		     struct ieee80211_sta *sta, bool enable, int cmd,
-		     bool offload_fw)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt76_sta_cmd_info info = {
-		.sta = sta,
-		.vif = vif,
-		.offload_fw = offload_fw,
-		.enable = enable,
-		.newly = true,
-		.cmd = cmd,
-	};
-
-	info.wcid = sta ? (struct mt76_wcid *)sta->drv_priv : &mvif->sta.wcid;
-	return mt76_connac_mcu_sta_cmd(phy, &info);
-}
-
-static int
-mt7615_mcu_add_sta(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-		   struct ieee80211_sta *sta, bool enable)
-{
-	return __mt7615_mcu_add_sta(phy->mt76, vif, sta, enable,
-				    MCU_EXT_CMD(STA_REC_UPDATE), false);
-}
-
-static int
-mt7615_mcu_sta_update_hdr_trans(struct mt7615_dev *dev,
-				struct ieee80211_vif *vif,
-				struct ieee80211_sta *sta)
-{
-	struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;
-
-	return mt76_connac_mcu_sta_update_hdr_trans(&dev->mt76,
-						    vif, &msta->wcid,
-						    MCU_EXT_CMD(STA_REC_UPDATE));
-}
-
-static const struct mt7615_mcu_ops sta_update_ops = {
-	.add_beacon_offload = mt7615_mcu_add_beacon_offload,
-	.set_pm_state = mt7615_mcu_ctrl_pm_state,
-	.add_dev_info = mt7615_mcu_add_dev,
-	.add_bss_info = mt7615_mcu_add_bss,
-	.add_tx_ba = mt7615_mcu_sta_tx_ba,
-	.add_rx_ba = mt7615_mcu_sta_rx_ba,
-	.sta_add = mt7615_mcu_add_sta,
-	.set_drv_ctrl = mt7615_mcu_drv_pmctrl,
-	.set_fw_ctrl = mt7615_mcu_fw_pmctrl,
-	.set_sta_decap_offload = mt7615_mcu_sta_update_hdr_trans,
-};
-
-static int
-mt7615_mcu_uni_ctrl_pm_state(struct mt7615_dev *dev, int band, int state)
-{
-	return 0;
-}
-
-static int
-mt7615_mcu_uni_add_beacon_offload(struct mt7615_dev *dev,
-				  struct ieee80211_hw *hw,
-				  struct ieee80211_vif *vif,
-				  bool enable)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-	struct ieee80211_mutable_offsets offs;
-	struct {
-		struct req_hdr {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct bcn_content_tlv {
-			__le16 tag;
-			__le16 len;
-			__le16 tim_ie_pos;
-			__le16 csa_ie_pos;
-			__le16 bcc_ie_pos;
-			/* 0: disable beacon offload
-			 * 1: enable beacon offload
-			 * 2: update probe respond offload
-			 */
-			u8 enable;
-			/* 0: legacy format (TXD + payload)
-			 * 1: only cap field IE
-			 */
-			u8 type;
-			__le16 pkt_len;
-			u8 pkt[512];
-		} __packed beacon_tlv;
-	} req = {
-		.hdr = {
-			.bss_idx = mvif->mt76.idx,
-		},
-		.beacon_tlv = {
-			.tag = cpu_to_le16(UNI_BSS_INFO_BCN_CONTENT),
-			.len = cpu_to_le16(sizeof(struct bcn_content_tlv)),
-			.enable = enable,
-		},
-	};
-	struct sk_buff *skb;
-
-	if (!enable)
-		goto out;
-
-	skb = ieee80211_beacon_get_template(mt76_hw(dev), vif, &offs);
-	if (!skb)
-		return -EINVAL;
-
-	if (skb->len > 512 - MT_TXD_SIZE) {
-		dev_err(dev->mt76.dev, "beacon size limit exceed\n");
-		dev_kfree_skb(skb);
-		return -EINVAL;
-	}
-
-	mt7615_mac_write_txwi(dev, (__le32 *)(req.beacon_tlv.pkt), skb,
-			      wcid, NULL, 0, NULL, 0, true);
-	memcpy(req.beacon_tlv.pkt + MT_TXD_SIZE, skb->data, skb->len);
-	req.beacon_tlv.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
-	req.beacon_tlv.tim_ie_pos = cpu_to_le16(MT_TXD_SIZE + offs.tim_offset);
-
-	if (offs.cntdwn_counter_offs[0]) {
-		u16 csa_offs;
-
-		csa_offs = MT_TXD_SIZE + offs.cntdwn_counter_offs[0] - 4;
-		req.beacon_tlv.csa_ie_pos = cpu_to_le16(csa_offs);
-	}
-	dev_kfree_skb(skb);
-
-out:
-	return mt76_mcu_send_msg(&dev->mt76, MCU_UNI_CMD(BSS_INFO_UPDATE),
-				 &req, sizeof(req), true);
-}
-
-static int
-mt7615_mcu_uni_add_dev(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-		       bool enable)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-
-	return mt76_connac_mcu_uni_add_dev(phy->mt76, vif, &mvif->sta.wcid,
-					   enable);
-}
-
-static int
-mt7615_mcu_uni_add_bss(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta, bool enable)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-
-	return mt76_connac_mcu_uni_add_bss(phy->mt76, vif, &mvif->sta.wcid,
-					   enable);
-}
-
-static inline int
-mt7615_mcu_uni_add_sta(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta, bool enable)
-{
-	return __mt7615_mcu_add_sta(phy->mt76, vif, sta, enable,
-				    MCU_UNI_CMD(STA_REC_UPDATE), true);
-}
-
-static int
-mt7615_mcu_uni_tx_ba(struct mt7615_dev *dev,
-		     struct ieee80211_ampdu_params *params,
-		     bool enable)
-{
-	struct mt7615_sta *sta = (struct mt7615_sta *)params->sta->drv_priv;
-
-	return mt76_connac_mcu_sta_ba(&dev->mt76, &sta->vif->mt76, params,
-				      MCU_UNI_CMD(STA_REC_UPDATE), enable,
-				      true);
-}
-
-static int
-mt7615_mcu_uni_rx_ba(struct mt7615_dev *dev,
-		     struct ieee80211_ampdu_params *params,
-		     bool enable)
-{
-	struct mt7615_sta *msta = (struct mt7615_sta *)params->sta->drv_priv;
-	struct mt7615_vif *mvif = msta->vif;
-	struct wtbl_req_hdr *wtbl_hdr;
-	struct tlv *sta_wtbl;
-	struct sk_buff *skb;
-	int err;
-
-	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					    &msta->wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	mt76_connac_mcu_sta_ba_tlv(skb, params, enable, false);
-
-	err = mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				    MCU_UNI_CMD(STA_REC_UPDATE), true);
-	if (err < 0 || !enable)
-		return err;
-
-	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					    &msta->wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	sta_wtbl = mt76_connac_mcu_add_tlv(skb, STA_REC_WTBL,
-					   sizeof(struct tlv));
-
-	wtbl_hdr = mt76_connac_mcu_alloc_wtbl_req(&dev->mt76, &msta->wcid,
-						  WTBL_SET, sta_wtbl, &skb);
-	if (IS_ERR(wtbl_hdr))
-		return PTR_ERR(wtbl_hdr);
-
-	mt76_connac_mcu_wtbl_ba_tlv(&dev->mt76, skb, params, enable, false,
-				    sta_wtbl, wtbl_hdr);
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_UNI_CMD(STA_REC_UPDATE), true);
-}
-
-static int
-mt7615_mcu_sta_uni_update_hdr_trans(struct mt7615_dev *dev,
-				    struct ieee80211_vif *vif,
-				    struct ieee80211_sta *sta)
-{
-	struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;
-
-	return mt76_connac_mcu_sta_update_hdr_trans(&dev->mt76,
-						    vif, &msta->wcid,
-						    MCU_UNI_CMD(STA_REC_UPDATE));
-}
-
-static const struct mt7615_mcu_ops uni_update_ops = {
-	.add_beacon_offload = mt7615_mcu_uni_add_beacon_offload,
-	.set_pm_state = mt7615_mcu_uni_ctrl_pm_state,
-	.add_dev_info = mt7615_mcu_uni_add_dev,
-	.add_bss_info = mt7615_mcu_uni_add_bss,
-	.add_tx_ba = mt7615_mcu_uni_tx_ba,
-	.add_rx_ba = mt7615_mcu_uni_rx_ba,
-	.sta_add = mt7615_mcu_uni_add_sta,
-	.set_drv_ctrl = mt7615_mcu_lp_drv_pmctrl,
-	.set_fw_ctrl = mt7615_mcu_fw_pmctrl,
-	.set_sta_decap_offload = mt7615_mcu_sta_uni_update_hdr_trans,
-};
-
-int mt7615_mcu_restart(struct mt76_dev *dev)
-{
-	return mt76_mcu_send_msg(dev, MCU_CMD(RESTART_DL_REQ), NULL, 0, true);
-}
-EXPORT_SYMBOL_GPL(mt7615_mcu_restart);
-
-static int mt7615_load_patch(struct mt7615_dev *dev, u32 addr, const char *name)
-{
-	const struct mt7615_patch_hdr *hdr;
-	const struct firmware *fw = NULL;
-	int len, ret, sem;
-
-	ret = firmware_request_nowarn(&fw, name, dev->mt76.dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
-		dev_err(dev->mt76.dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto release_fw;
-	}
-
-	sem = mt76_connac_mcu_patch_sem_ctrl(&dev->mt76, true);
-	switch (sem) {
-	case PATCH_IS_DL:
-		goto release_fw;
-	case PATCH_NOT_DL_SEM_SUCCESS:
-		break;
-	default:
-		dev_err(dev->mt76.dev, "Failed to get patch semaphore\n");
-		ret = -EAGAIN;
-		goto release_fw;
-	}
-
-	hdr = (const struct mt7615_patch_hdr *)(fw->data);
-
-	dev_info(dev->mt76.dev, "HW/SW Version: 0x%x, Build Time: %.16s\n",
-		 be32_to_cpu(hdr->hw_sw_ver), hdr->build_date);
-
-	len = fw->size - sizeof(*hdr);
-
-	ret = mt76_connac_mcu_init_download(&dev->mt76, addr, len,
-					    DL_MODE_NEED_RSP);
-	if (ret) {
-		dev_err(dev->mt76.dev, "Download request failed\n");
-		goto out;
-	}
-
-	ret = mt76_mcu_send_firmware(&dev->mt76, MCU_CMD(FW_SCATTER),
-				     fw->data + sizeof(*hdr), len);
-	if (ret) {
-		dev_err(dev->mt76.dev, "Failed to send firmware to device\n");
-		goto out;
-	}
-
-	ret = mt76_connac_mcu_start_patch(&dev->mt76);
-	if (ret)
-		dev_err(dev->mt76.dev, "Failed to start patch\n");
-
-out:
-	sem = mt76_connac_mcu_patch_sem_ctrl(&dev->mt76, false);
-	switch (sem) {
-	case PATCH_REL_SEM_SUCCESS:
-		break;
-	default:
-		ret = -EAGAIN;
-		dev_err(dev->mt76.dev, "Failed to release patch semaphore\n");
-		break;
-	}
-
-release_fw:
-	release_firmware(fw);
-
-	return ret;
-}
-
-static int
-mt7615_mcu_send_ram_firmware(struct mt7615_dev *dev,
-			     const struct mt7615_fw_trailer *hdr,
-			     const u8 *data, bool is_cr4)
-{
-	int n_region = is_cr4 ? CR4_REGION_NUM : N9_REGION_NUM;
-	int err, i, offset = 0;
-	u32 len, addr, mode;
-
-	for (i = 0; i < n_region; i++) {
-		mode = mt76_connac_mcu_gen_dl_mode(&dev->mt76,
-						   hdr[i].feature_set, is_cr4);
-		len = le32_to_cpu(hdr[i].len) + IMG_CRC_LEN;
-		addr = le32_to_cpu(hdr[i].addr);
-
-		err = mt76_connac_mcu_init_download(&dev->mt76, addr, len,
-						    mode);
-		if (err) {
-			dev_err(dev->mt76.dev, "Download request failed\n");
-			return err;
-		}
-
-		err = mt76_mcu_send_firmware(&dev->mt76, MCU_CMD(FW_SCATTER),
-					     data + offset, len);
-		if (err) {
-			dev_err(dev->mt76.dev, "Failed to send firmware to device\n");
-			return err;
-		}
-
-		offset += len;
-	}
-
-	return 0;
-}
-
-static int mt7615_load_n9(struct mt7615_dev *dev, const char *name)
-{
-	const struct mt7615_fw_trailer *hdr;
-	const struct firmware *fw;
-	int ret;
-
-	ret = request_firmware(&fw, name, dev->mt76.dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < N9_REGION_NUM * sizeof(*hdr)) {
-		dev_err(dev->mt76.dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const struct mt7615_fw_trailer *)(fw->data + fw->size -
-					N9_REGION_NUM * sizeof(*hdr));
-
-	dev_info(dev->mt76.dev, "N9 Firmware Version: %.10s, Build Time: %.15s\n",
-		 hdr->fw_ver, hdr->build_date);
-
-	ret = mt7615_mcu_send_ram_firmware(dev, hdr, fw->data, false);
-	if (ret)
-		goto out;
-
-	ret = mt76_connac_mcu_start_firmware(&dev->mt76,
-					     le32_to_cpu(hdr->addr),
-					     FW_START_OVERRIDE);
-	if (ret) {
-		dev_err(dev->mt76.dev, "Failed to start N9 firmware\n");
-		goto out;
-	}
-
-	snprintf(dev->mt76.hw->wiphy->fw_version,
-		 sizeof(dev->mt76.hw->wiphy->fw_version),
-		 "%.10s-%.15s", hdr->fw_ver, hdr->build_date);
-
-	if (!is_mt7615(&dev->mt76)) {
-		dev->fw_ver = MT7615_FIRMWARE_V2;
-		dev->mcu_ops = &sta_update_ops;
-	} else {
-		dev->fw_ver = MT7615_FIRMWARE_V1;
-		dev->mcu_ops = &wtbl_update_ops;
-	}
-
-out:
-	release_firmware(fw);
-	return ret;
-}
-
-static int mt7615_load_cr4(struct mt7615_dev *dev, const char *name)
-{
-	const struct mt7615_fw_trailer *hdr;
-	const struct firmware *fw;
-	int ret;
-
-	ret = request_firmware(&fw, name, dev->mt76.dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < CR4_REGION_NUM * sizeof(*hdr)) {
-		dev_err(dev->mt76.dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const struct mt7615_fw_trailer *)(fw->data + fw->size -
-					CR4_REGION_NUM * sizeof(*hdr));
-
-	dev_info(dev->mt76.dev, "CR4 Firmware Version: %.10s, Build Time: %.15s\n",
-		 hdr->fw_ver, hdr->build_date);
-
-	ret = mt7615_mcu_send_ram_firmware(dev, hdr, fw->data, true);
-	if (ret)
-		goto out;
-
-	ret = mt76_connac_mcu_start_firmware(&dev->mt76, 0,
-					     FW_START_WORKING_PDA_CR4);
-	if (ret) {
-		dev_err(dev->mt76.dev, "Failed to start CR4 firmware\n");
-		goto out;
-	}
-
-out:
-	release_firmware(fw);
-
-	return ret;
-}
-
-static int mt7615_load_ram(struct mt7615_dev *dev)
-{
-	int ret;
-
-	ret = mt7615_load_n9(dev, MT7615_FIRMWARE_N9);
-	if (ret)
-		return ret;
-
-	return mt7615_load_cr4(dev, MT7615_FIRMWARE_CR4);
-}
-
-static int mt7615_load_firmware(struct mt7615_dev *dev)
-{
-	int ret;
-	u32 val;
-
-	val = mt76_get_field(dev, MT_TOP_MISC2, MT_TOP_MISC2_FW_STATE);
-
-	if (val != FW_STATE_FW_DOWNLOAD) {
-		dev_err(dev->mt76.dev, "Firmware is not ready for download\n");
-		return -EIO;
-	}
-
-	ret = mt7615_load_patch(dev, MT7615_PATCH_ADDRESS, MT7615_ROM_PATCH);
-	if (ret)
-		return ret;
-
-	ret = mt7615_load_ram(dev);
-	if (ret)
-		return ret;
-
-	if (!mt76_poll_msec(dev, MT_TOP_MISC2, MT_TOP_MISC2_FW_STATE,
-			    FIELD_PREP(MT_TOP_MISC2_FW_STATE,
-				       FW_STATE_RDY), 500)) {
-		dev_err(dev->mt76.dev, "Timeout for initializing firmware\n");
-		return -EIO;
-	}
-
-	return 0;
-}
-
-static int mt7622_load_firmware(struct mt7615_dev *dev)
-{
-	int ret;
-	u32 val;
-
-	mt76_set(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_BYPASS_TX_SCH);
-
-	val = mt76_get_field(dev, MT_TOP_OFF_RSV, MT_TOP_OFF_RSV_FW_STATE);
-	if (val != FW_STATE_FW_DOWNLOAD) {
-		dev_err(dev->mt76.dev, "Firmware is not ready for download\n");
-		return -EIO;
-	}
-
-	ret = mt7615_load_patch(dev, MT7622_PATCH_ADDRESS, MT7622_ROM_PATCH);
-	if (ret)
-		return ret;
-
-	ret = mt7615_load_n9(dev, MT7622_FIRMWARE_N9);
-	if (ret)
-		return ret;
-
-	if (!mt76_poll_msec(dev, MT_TOP_OFF_RSV, MT_TOP_OFF_RSV_FW_STATE,
-			    FIELD_PREP(MT_TOP_OFF_RSV_FW_STATE,
-				       FW_STATE_NORMAL_TRX), 1500)) {
-		dev_err(dev->mt76.dev, "Timeout for initializing firmware\n");
-		return -EIO;
-	}
-
-	mt76_clear(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_BYPASS_TX_SCH);
-
-	return 0;
-}
-
-int mt7615_mcu_fw_log_2_host(struct mt7615_dev *dev, u8 ctrl)
-{
-	struct {
-		u8 ctrl_val;
-		u8 pad[3];
-	} data = {
-		.ctrl_val = ctrl
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(FW_LOG_2_HOST),
-				 &data, sizeof(data), true);
-}
-
-static int mt7615_mcu_cal_cache_apply(struct mt7615_dev *dev)
-{
-	struct {
-		bool cache_enable;
-		u8 pad[3];
-	} data = {
-		.cache_enable = true
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(CAL_CACHE), &data,
-				 sizeof(data), false);
-}
-
-static int mt7663_load_n9(struct mt7615_dev *dev, const char *name)
-{
-	u32 offset = 0, override_addr = 0, flag = FW_START_DLYCAL;
-	const struct mt76_connac2_fw_trailer *hdr;
-	const struct mt7663_fw_buf *buf;
-	const struct firmware *fw;
-	const u8 *base_addr;
-	int i, ret;
-
-	ret = request_firmware(&fw, name, dev->mt76.dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < FW_V3_COMMON_TAILER_SIZE) {
-		dev_err(dev->mt76.dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const void *)(fw->data + fw->size - FW_V3_COMMON_TAILER_SIZE);
-	dev_info(dev->mt76.dev, "N9 Firmware Version: %.10s, Build Time: %.15s\n",
-		 hdr->fw_ver, hdr->build_date);
-	dev_info(dev->mt76.dev, "Region number: 0x%x\n", hdr->n_region);
-
-	base_addr = fw->data + fw->size - FW_V3_COMMON_TAILER_SIZE;
-	for (i = 0; i < hdr->n_region; i++) {
-		u32 shift = (hdr->n_region - i) * FW_V3_REGION_TAILER_SIZE;
-		u32 len, addr, mode;
-
-		dev_info(dev->mt76.dev, "Parsing tailer Region: %d\n", i);
-
-		buf = (const struct mt7663_fw_buf *)(base_addr - shift);
-		mode = mt76_connac_mcu_gen_dl_mode(&dev->mt76,
-						   buf->feature_set, false);
-		addr = le32_to_cpu(buf->img_dest_addr);
-		len = le32_to_cpu(buf->img_size);
-
-		ret = mt76_connac_mcu_init_download(&dev->mt76, addr, len,
-						    mode);
-		if (ret) {
-			dev_err(dev->mt76.dev, "Download request failed\n");
-			goto out;
-		}
-
-		ret = mt76_mcu_send_firmware(&dev->mt76, MCU_CMD(FW_SCATTER),
-					     fw->data + offset, len);
-		if (ret) {
-			dev_err(dev->mt76.dev, "Failed to send firmware\n");
-			goto out;
-		}
-
-		offset += le32_to_cpu(buf->img_size);
-		if (buf->feature_set & DL_MODE_VALID_RAM_ENTRY) {
-			override_addr = le32_to_cpu(buf->img_dest_addr);
-			dev_info(dev->mt76.dev, "Region %d, override_addr = 0x%08x\n",
-				 i, override_addr);
-		}
-	}
-
-	if (override_addr)
-		flag |= FW_START_OVERRIDE;
-
-	dev_info(dev->mt76.dev, "override_addr = 0x%08x, option = %d\n",
-		 override_addr, flag);
-
-	ret = mt76_connac_mcu_start_firmware(&dev->mt76, override_addr, flag);
-	if (ret) {
-		dev_err(dev->mt76.dev, "Failed to start N9 firmware\n");
-		goto out;
-	}
-
-	snprintf(dev->mt76.hw->wiphy->fw_version,
-		 sizeof(dev->mt76.hw->wiphy->fw_version),
-		 "%.10s-%.15s", hdr->fw_ver, hdr->build_date);
-
-out:
-	release_firmware(fw);
-
-	return ret;
-}
-
-static int
-mt7663_load_rom_patch(struct mt7615_dev *dev, const char **n9_firmware)
-{
-	const char *selected_rom, *secondary_rom = MT7663_ROM_PATCH;
-	const char *primary_rom = MT7663_OFFLOAD_ROM_PATCH;
-	int ret;
-
-	if (!prefer_offload_fw) {
-		secondary_rom = MT7663_OFFLOAD_ROM_PATCH;
-		primary_rom = MT7663_ROM_PATCH;
-	}
-	selected_rom = primary_rom;
-
-	ret = mt7615_load_patch(dev, MT7663_PATCH_ADDRESS, primary_rom);
-	if (ret) {
-		dev_info(dev->mt76.dev, "%s not found, switching to %s",
-			 primary_rom, secondary_rom);
-		ret = mt7615_load_patch(dev, MT7663_PATCH_ADDRESS,
-					secondary_rom);
-		if (ret) {
-			dev_err(dev->mt76.dev, "failed to load %s",
-				secondary_rom);
-			return ret;
-		}
-		selected_rom = secondary_rom;
-	}
-
-	if (!strcmp(selected_rom, MT7663_OFFLOAD_ROM_PATCH)) {
-		*n9_firmware = MT7663_OFFLOAD_FIRMWARE_N9;
-		dev->fw_ver = MT7615_FIRMWARE_V3;
-		dev->mcu_ops = &uni_update_ops;
-	} else {
-		*n9_firmware = MT7663_FIRMWARE_N9;
-		dev->fw_ver = MT7615_FIRMWARE_V2;
-		dev->mcu_ops = &sta_update_ops;
-	}
-
-	return 0;
-}
-
-int __mt7663_load_firmware(struct mt7615_dev *dev)
-{
-	const char *n9_firmware;
-	int ret;
-
-	ret = mt76_get_field(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_N9_RDY);
-	if (ret) {
-		dev_dbg(dev->mt76.dev, "Firmware is already download\n");
-		return -EIO;
-	}
-
-	ret = mt7663_load_rom_patch(dev, &n9_firmware);
-	if (ret)
-		return ret;
-
-	ret = mt7663_load_n9(dev, n9_firmware);
-	if (ret)
-		return ret;
-
-	if (!mt76_poll_msec(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_N9_RDY,
-			    MT_TOP_MISC2_FW_N9_RDY, 1500)) {
-		ret = mt76_get_field(dev, MT_CONN_ON_MISC,
-				     MT7663_TOP_MISC2_FW_STATE);
-		dev_err(dev->mt76.dev, "Timeout for initializing firmware\n");
-		return -EIO;
-	}
-
-#ifdef CONFIG_PM
-	if (mt7615_firmware_offload(dev))
-		dev->mt76.hw->wiphy->wowlan = &mt76_connac_wowlan_support;
-#endif /* CONFIG_PM */
-
-	dev_dbg(dev->mt76.dev, "Firmware init done\n");
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(__mt7663_load_firmware);
-
-static int mt7663_load_firmware(struct mt7615_dev *dev)
-{
-	int ret;
-
-	mt76_set(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_BYPASS_TX_SCH);
-
-	ret = __mt7663_load_firmware(dev);
-	if (ret)
-		return ret;
-
-	mt76_clear(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_BYPASS_TX_SCH);
-
-	return 0;
-}
-
-int mt7615_mcu_init(struct mt7615_dev *dev)
-{
-	static const struct mt76_mcu_ops mt7615_mcu_ops = {
-		.headroom = sizeof(struct mt7615_mcu_txd),
-		.mcu_skb_send_msg = mt7615_mcu_send_message,
-		.mcu_parse_response = mt7615_mcu_parse_response,
-		.mcu_restart = mt7615_mcu_restart,
-	};
-	int ret;
-
-	dev->mt76.mcu_ops = &mt7615_mcu_ops,
-
-	ret = mt7615_mcu_drv_pmctrl(dev);
-	if (ret)
-		return ret;
-
-	switch (mt76_chip(&dev->mt76)) {
-	case 0x7622:
-		ret = mt7622_load_firmware(dev);
-		break;
-	case 0x7663:
-		ret = mt7663_load_firmware(dev);
-		break;
-	default:
-		ret = mt7615_load_firmware(dev);
-		break;
-	}
-	if (ret)
-		return ret;
-
-	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_FWDL], false);
-	dev_dbg(dev->mt76.dev, "Firmware init done\n");
-	set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-
-	if (dev->dbdc_support) {
-		ret = mt7615_mcu_cal_cache_apply(dev);
-		if (ret)
-			return ret;
-	}
-
-	return mt7615_mcu_fw_log_2_host(dev, 0);
-}
-EXPORT_SYMBOL_GPL(mt7615_mcu_init);
-
-void mt7615_mcu_exit(struct mt7615_dev *dev)
-{
-	__mt76_mcu_restart(&dev->mt76);
-	mt7615_mcu_set_fw_ctrl(dev);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-}
-EXPORT_SYMBOL_GPL(mt7615_mcu_exit);
-
-int mt7615_mcu_set_eeprom(struct mt7615_dev *dev)
-{
-	struct {
-		u8 buffer_mode;
-		u8 content_format;
-		__le16 len;
-	} __packed req_hdr = {
-		.buffer_mode = 1,
-	};
-	u8 *eep = (u8 *)dev->mt76.eeprom.data;
-	struct sk_buff *skb;
-	int eep_len, offset;
-
-	switch (mt76_chip(&dev->mt76)) {
-	case 0x7622:
-		eep_len = MT7622_EE_MAX - MT_EE_NIC_CONF_0;
-		offset = MT_EE_NIC_CONF_0;
-		break;
-	case 0x7663:
-		eep_len = MT7663_EE_MAX - MT_EE_CHIP_ID;
-		req_hdr.content_format = 1;
-		offset = MT_EE_CHIP_ID;
-		break;
-	default:
-		eep_len = MT7615_EE_MAX - MT_EE_NIC_CONF_0;
-		offset = MT_EE_NIC_CONF_0;
-		break;
-	}
-
-	req_hdr.len = cpu_to_le16(eep_len);
-
-	skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, sizeof(req_hdr) + eep_len);
-	if (!skb)
-		return -ENOMEM;
-
-	skb_put_data(skb, &req_hdr, sizeof(req_hdr));
-	skb_put_data(skb, eep + offset, eep_len);
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_EXT_CMD(EFUSE_BUFFER_MODE), true);
-}
-
-int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue,
-		       const struct ieee80211_tx_queue_params *params)
-{
-#define WMM_AIFS_SET	BIT(0)
-#define WMM_CW_MIN_SET	BIT(1)
-#define WMM_CW_MAX_SET	BIT(2)
-#define WMM_TXOP_SET	BIT(3)
-#define WMM_PARAM_SET	(WMM_AIFS_SET | WMM_CW_MIN_SET | \
-			 WMM_CW_MAX_SET | WMM_TXOP_SET)
-	struct req_data {
-		u8 number;
-		u8 rsv[3];
-		u8 queue;
-		u8 valid;
-		u8 aifs;
-		u8 cw_min;
-		__le16 cw_max;
-		__le16 txop;
-	} __packed req = {
-		.number = 1,
-		.queue = queue,
-		.valid = WMM_PARAM_SET,
-		.aifs = params->aifs,
-		.cw_min = 5,
-		.cw_max = cpu_to_le16(10),
-		.txop = cpu_to_le16(params->txop),
-	};
-
-	if (params->cw_min)
-		req.cw_min = fls(params->cw_min);
-	if (params->cw_max)
-		req.cw_max = cpu_to_le16(fls(params->cw_max));
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(EDCA_UPDATE),
-				 &req, sizeof(req), true);
-}
-
-int mt7615_mcu_set_dbdc(struct mt7615_dev *dev)
-{
-	struct mt7615_phy *ext_phy = mt7615_ext_phy(dev);
-	struct dbdc_entry {
-		u8 type;
-		u8 index;
-		u8 band;
-		u8 _rsv;
-	};
-	struct {
-		u8 enable;
-		u8 num;
-		u8 _rsv[2];
-		struct dbdc_entry entry[64];
-	} req = {
-		.enable = !!ext_phy,
-	};
-	int i;
-
-	if (!ext_phy)
-		goto out;
-
-#define ADD_DBDC_ENTRY(_type, _idx, _band)		\
-	do { \
-		req.entry[req.num].type = _type;		\
-		req.entry[req.num].index = _idx;		\
-		req.entry[req.num++].band = _band;		\
-	} while (0)
-
-	for (i = 0; i < 4; i++) {
-		bool band = !!(ext_phy->omac_mask & BIT_ULL(i));
-
-		ADD_DBDC_ENTRY(DBDC_TYPE_BSS, i, band);
-	}
-
-	for (i = 0; i < 14; i++) {
-		bool band = !!(ext_phy->omac_mask & BIT_ULL(0x11 + i));
-
-		ADD_DBDC_ENTRY(DBDC_TYPE_MBSS, i, band);
-	}
-
-	ADD_DBDC_ENTRY(DBDC_TYPE_MU, 0, 1);
-
-	for (i = 0; i < 3; i++)
-		ADD_DBDC_ENTRY(DBDC_TYPE_BF, i, 1);
-
-	ADD_DBDC_ENTRY(DBDC_TYPE_WMM, 0, 0);
-	ADD_DBDC_ENTRY(DBDC_TYPE_WMM, 1, 0);
-	ADD_DBDC_ENTRY(DBDC_TYPE_WMM, 2, 1);
-	ADD_DBDC_ENTRY(DBDC_TYPE_WMM, 3, 1);
-
-	ADD_DBDC_ENTRY(DBDC_TYPE_MGMT, 0, 0);
-	ADD_DBDC_ENTRY(DBDC_TYPE_MGMT, 1, 1);
-
-out:
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(DBDC_CTRL), &req,
-				 sizeof(req), true);
-}
-
-int mt7615_mcu_del_wtbl_all(struct mt7615_dev *dev)
-{
-	struct wtbl_req_hdr req = {
-		.operation = WTBL_RESET_ALL,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(WTBL_UPDATE),
-				 &req, sizeof(req), true);
-}
-
-int mt7615_mcu_set_fcc5_lpn(struct mt7615_dev *dev, int val)
-{
-	struct {
-		__le16 tag;
-		__le16 min_lpn;
-	} req = {
-		.tag = cpu_to_le16(0x1),
-		.min_lpn = cpu_to_le16(val),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_RADAR_TH),
-				 &req, sizeof(req), true);
-}
-
-int mt7615_mcu_set_pulse_th(struct mt7615_dev *dev,
-			    const struct mt7615_dfs_pulse *pulse)
-{
-	struct {
-		__le16 tag;
-		__le32 max_width;	/* us */
-		__le32 max_pwr;		/* dbm */
-		__le32 min_pwr;		/* dbm */
-		__le32 min_stgr_pri;	/* us */
-		__le32 max_stgr_pri;	/* us */
-		__le32 min_cr_pri;	/* us */
-		__le32 max_cr_pri;	/* us */
-	} req = {
-		.tag = cpu_to_le16(0x3),
-#define __req_field(field) .field = cpu_to_le32(pulse->field)
-		__req_field(max_width),
-		__req_field(max_pwr),
-		__req_field(min_pwr),
-		__req_field(min_stgr_pri),
-		__req_field(max_stgr_pri),
-		__req_field(min_cr_pri),
-		__req_field(max_cr_pri),
-#undef  __req_field
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_RADAR_TH),
-				 &req, sizeof(req), true);
-}
-
-int mt7615_mcu_set_radar_th(struct mt7615_dev *dev, int index,
-			    const struct mt7615_dfs_pattern *pattern)
-{
-	struct {
-		__le16 tag;
-		__le16 radar_type;
-		u8 enb;
-		u8 stgr;
-		u8 min_crpn;
-		u8 max_crpn;
-		u8 min_crpr;
-		u8 min_pw;
-		u8 max_pw;
-		__le32 min_pri;
-		__le32 max_pri;
-		u8 min_crbn;
-		u8 max_crbn;
-		u8 min_stgpn;
-		u8 max_stgpn;
-		u8 min_stgpr;
-	} req = {
-		.tag = cpu_to_le16(0x2),
-		.radar_type = cpu_to_le16(index),
-#define __req_field_u8(field) .field = pattern->field
-#define __req_field_u32(field) .field = cpu_to_le32(pattern->field)
-		__req_field_u8(enb),
-		__req_field_u8(stgr),
-		__req_field_u8(min_crpn),
-		__req_field_u8(max_crpn),
-		__req_field_u8(min_crpr),
-		__req_field_u8(min_pw),
-		__req_field_u8(max_pw),
-		__req_field_u32(min_pri),
-		__req_field_u32(max_pri),
-		__req_field_u8(min_crbn),
-		__req_field_u8(max_crbn),
-		__req_field_u8(min_stgpn),
-		__req_field_u8(max_stgpn),
-		__req_field_u8(min_stgpr),
-#undef __req_field_u8
-#undef __req_field_u32
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_RADAR_TH),
-				 &req, sizeof(req), true);
-}
-
-int mt7615_mcu_rdd_send_pattern(struct mt7615_dev *dev)
-{
-	struct {
-		u8 pulse_num;
-		u8 rsv[3];
-		struct {
-			__le32 start_time;
-			__le16 width;
-			__le16 power;
-		} pattern[32];
-	} req = {
-		.pulse_num = dev->radar_pattern.n_pulses,
-	};
-	u32 start_time = ktime_to_ms(ktime_get_boottime());
-	int i;
-
-	if (dev->radar_pattern.n_pulses > ARRAY_SIZE(req.pattern))
-		return -EINVAL;
-
-	/* TODO: add some noise here */
-	for (i = 0; i < dev->radar_pattern.n_pulses; i++) {
-		u32 ts = start_time + i * dev->radar_pattern.period;
-
-		req.pattern[i].width = cpu_to_le16(dev->radar_pattern.width);
-		req.pattern[i].power = cpu_to_le16(dev->radar_pattern.power);
-		req.pattern[i].start_time = cpu_to_le32(ts);
-	}
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_RDD_PATTERN),
-				 &req, sizeof(req), false);
-}
-
-static void mt7615_mcu_set_txpower_sku(struct mt7615_phy *phy, u8 *sku)
-{
-	struct mt76_phy *mphy = phy->mt76;
-	struct ieee80211_hw *hw = mphy->hw;
-	struct mt76_power_limits limits;
-	s8 *limits_array = (s8 *)&limits;
-	int n_chains = hweight8(mphy->antenna_mask);
-	int tx_power = hw->conf.power_level * 2;
-	int i;
-	static const u8 sku_mapping[] = {
-#define SKU_FIELD(_type, _field) \
-		[MT_SKU_##_type] = offsetof(struct mt76_power_limits, _field)
-		SKU_FIELD(CCK_1_2, cck[0]),
-		SKU_FIELD(CCK_55_11, cck[2]),
-		SKU_FIELD(OFDM_6_9, ofdm[0]),
-		SKU_FIELD(OFDM_12_18, ofdm[2]),
-		SKU_FIELD(OFDM_24_36, ofdm[4]),
-		SKU_FIELD(OFDM_48, ofdm[6]),
-		SKU_FIELD(OFDM_54, ofdm[7]),
-		SKU_FIELD(HT20_0_8, mcs[0][0]),
-		SKU_FIELD(HT20_32, ofdm[0]),
-		SKU_FIELD(HT20_1_2_9_10, mcs[0][1]),
-		SKU_FIELD(HT20_3_4_11_12, mcs[0][3]),
-		SKU_FIELD(HT20_5_13, mcs[0][5]),
-		SKU_FIELD(HT20_6_14, mcs[0][6]),
-		SKU_FIELD(HT20_7_15, mcs[0][7]),
-		SKU_FIELD(HT40_0_8, mcs[1][0]),
-		SKU_FIELD(HT40_32, ofdm[0]),
-		SKU_FIELD(HT40_1_2_9_10, mcs[1][1]),
-		SKU_FIELD(HT40_3_4_11_12, mcs[1][3]),
-		SKU_FIELD(HT40_5_13, mcs[1][5]),
-		SKU_FIELD(HT40_6_14, mcs[1][6]),
-		SKU_FIELD(HT40_7_15, mcs[1][7]),
-		SKU_FIELD(VHT20_0, mcs[0][0]),
-		SKU_FIELD(VHT20_1_2, mcs[0][1]),
-		SKU_FIELD(VHT20_3_4, mcs[0][3]),
-		SKU_FIELD(VHT20_5_6, mcs[0][5]),
-		SKU_FIELD(VHT20_7, mcs[0][7]),
-		SKU_FIELD(VHT20_8, mcs[0][8]),
-		SKU_FIELD(VHT20_9, mcs[0][9]),
-		SKU_FIELD(VHT40_0, mcs[1][0]),
-		SKU_FIELD(VHT40_1_2, mcs[1][1]),
-		SKU_FIELD(VHT40_3_4, mcs[1][3]),
-		SKU_FIELD(VHT40_5_6, mcs[1][5]),
-		SKU_FIELD(VHT40_7, mcs[1][7]),
-		SKU_FIELD(VHT40_8, mcs[1][8]),
-		SKU_FIELD(VHT40_9, mcs[1][9]),
-		SKU_FIELD(VHT80_0, mcs[2][0]),
-		SKU_FIELD(VHT80_1_2, mcs[2][1]),
-		SKU_FIELD(VHT80_3_4, mcs[2][3]),
-		SKU_FIELD(VHT80_5_6, mcs[2][5]),
-		SKU_FIELD(VHT80_7, mcs[2][7]),
-		SKU_FIELD(VHT80_8, mcs[2][8]),
-		SKU_FIELD(VHT80_9, mcs[2][9]),
-		SKU_FIELD(VHT160_0, mcs[3][0]),
-		SKU_FIELD(VHT160_1_2, mcs[3][1]),
-		SKU_FIELD(VHT160_3_4, mcs[3][3]),
-		SKU_FIELD(VHT160_5_6, mcs[3][5]),
-		SKU_FIELD(VHT160_7, mcs[3][7]),
-		SKU_FIELD(VHT160_8, mcs[3][8]),
-		SKU_FIELD(VHT160_9, mcs[3][9]),
-#undef SKU_FIELD
-	};
-
-	tx_power = mt76_get_sar_power(mphy, mphy->chandef.chan, tx_power);
-	tx_power -= mt76_tx_power_nss_delta(n_chains);
-	tx_power = mt76_get_rate_power_limits(mphy, mphy->chandef.chan,
-					      &limits, tx_power);
-	mphy->txpower_cur = tx_power;
-
-	if (is_mt7663(mphy->dev)) {
-		memset(sku, tx_power, MT_SKU_4SS_DELTA + 1);
-		return;
-	}
-
-	for (i = 0; i < MT_SKU_1SS_DELTA; i++)
-		sku[i] = limits_array[sku_mapping[i]];
-
-	for (i = 0; i < 4; i++) {
-		int delta = 0;
-
-		if (i < n_chains - 1)
-			delta = mt76_tx_power_nss_delta(n_chains) -
-				mt76_tx_power_nss_delta(i + 1);
-		sku[MT_SKU_1SS_DELTA + i] = delta;
-	}
-}
-
-static u8 mt7615_mcu_chan_bw(struct cfg80211_chan_def *chandef)
-{
-	static const u8 width_to_bw[] = {
-		[NL80211_CHAN_WIDTH_40] = CMD_CBW_40MHZ,
-		[NL80211_CHAN_WIDTH_80] = CMD_CBW_80MHZ,
-		[NL80211_CHAN_WIDTH_80P80] = CMD_CBW_8080MHZ,
-		[NL80211_CHAN_WIDTH_160] = CMD_CBW_160MHZ,
-		[NL80211_CHAN_WIDTH_5] = CMD_CBW_5MHZ,
-		[NL80211_CHAN_WIDTH_10] = CMD_CBW_10MHZ,
-		[NL80211_CHAN_WIDTH_20] = CMD_CBW_20MHZ,
-		[NL80211_CHAN_WIDTH_20_NOHT] = CMD_CBW_20MHZ,
-	};
-
-	if (chandef->width >= ARRAY_SIZE(width_to_bw))
-		return 0;
-
-	return width_to_bw[chandef->width];
-}
-
-int mt7615_mcu_set_chan_info(struct mt7615_phy *phy, int cmd)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	int freq1 = chandef->center_freq1, freq2 = chandef->center_freq2;
-	struct {
-		u8 control_chan;
-		u8 center_chan;
-		u8 bw;
-		u8 tx_streams;
-		u8 rx_streams_mask;
-		u8 switch_reason;
-		u8 band_idx;
-		/* for 80+80 only */
-		u8 center_chan2;
-		__le16 cac_case;
-		u8 channel_band;
-		u8 rsv0;
-		__le32 outband_freq;
-		u8 txpower_drop;
-		u8 rsv1[3];
-		u8 txpower_sku[53];
-		u8 rsv2[3];
-	} req = {
-		.control_chan = chandef->chan->hw_value,
-		.center_chan = ieee80211_frequency_to_channel(freq1),
-		.tx_streams = hweight8(phy->mt76->antenna_mask),
-		.rx_streams_mask = phy->mt76->chainmask,
-		.center_chan2 = ieee80211_frequency_to_channel(freq2),
-	};
-
-	if (cmd == MCU_EXT_CMD(SET_RX_PATH) ||
-	    dev->mt76.hw->conf.flags & IEEE80211_CONF_MONITOR)
-		req.switch_reason = CH_SWITCH_NORMAL;
-	else if (phy->mt76->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)
-		req.switch_reason = CH_SWITCH_SCAN_BYPASS_DPD;
-	else if (!cfg80211_reg_can_beacon(phy->mt76->hw->wiphy, chandef,
-					  NL80211_IFTYPE_AP))
-		req.switch_reason = CH_SWITCH_DFS;
-	else
-		req.switch_reason = CH_SWITCH_NORMAL;
-
-	req.band_idx = phy != &dev->phy;
-	req.bw = mt7615_mcu_chan_bw(chandef);
-
-	if (mt76_testmode_enabled(phy->mt76))
-		memset(req.txpower_sku, 0x3f, 49);
-	else
-		mt7615_mcu_set_txpower_sku(phy, req.txpower_sku);
-
-	return mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), true);
-}
-
-int mt7615_mcu_get_temperature(struct mt7615_dev *dev)
-{
-	struct {
-		u8 action;
-		u8 rsv[3];
-	} req = {};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(THERMAL_CTRL),
-				 &req, sizeof(req), true);
-}
-
-int mt7615_mcu_set_test_param(struct mt7615_dev *dev, u8 param, bool test_mode,
-			      u32 val)
-{
-	struct {
-		u8 test_mode_en;
-		u8 param_idx;
-		u8 _rsv[2];
-
-		__le32 value;
-
-		u8 pad[8];
-	} req = {
-		.test_mode_en = test_mode,
-		.param_idx = param,
-		.value = cpu_to_le32(val),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(ATE_CTRL),
-				 &req, sizeof(req), false);
-}
-
-int mt7615_mcu_set_sku_en(struct mt7615_phy *phy, bool enable)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct {
-		u8 format_id;
-		u8 sku_enable;
-		u8 band_idx;
-		u8 rsv;
-	} req = {
-		.format_id = 0,
-		.band_idx = phy != &dev->phy,
-		.sku_enable = enable,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76,
-				 MCU_EXT_CMD(TX_POWER_FEATURE_CTRL),
-				 &req, sizeof(req), true);
-}
-
-static int mt7615_find_freq_idx(const u16 *freqs, int n_freqs, u16 cur)
-{
-	int i;
-
-	for (i = 0; i < n_freqs; i++)
-		if (cur == freqs[i])
-			return i;
-
-	return -1;
-}
-
-static int mt7615_dcoc_freq_idx(u16 freq, u8 bw)
-{
-	static const u16 freq_list[] = {
-		4980, 5805, 5905, 5190,
-		5230, 5270, 5310, 5350,
-		5390, 5430, 5470, 5510,
-		5550, 5590, 5630, 5670,
-		5710, 5755, 5795, 5835,
-		5875, 5210, 5290, 5370,
-		5450, 5530, 5610, 5690,
-		5775, 5855
-	};
-	static const u16 freq_bw40[] = {
-		5190, 5230, 5270, 5310,
-		5350, 5390, 5430, 5470,
-		5510, 5550, 5590, 5630,
-		5670, 5710, 5755, 5795,
-		5835, 5875
-	};
-	int offset_2g = ARRAY_SIZE(freq_list);
-	int idx;
-
-	if (freq < 4000) {
-		if (freq < 2427)
-			return offset_2g;
-		if (freq < 2442)
-			return offset_2g + 1;
-		if (freq < 2457)
-			return offset_2g + 2;
-
-		return offset_2g + 3;
-	}
-
-	switch (bw) {
-	case NL80211_CHAN_WIDTH_80:
-	case NL80211_CHAN_WIDTH_80P80:
-	case NL80211_CHAN_WIDTH_160:
-		break;
-	default:
-		idx = mt7615_find_freq_idx(freq_bw40, ARRAY_SIZE(freq_bw40),
-					   freq + 10);
-		if (idx >= 0) {
-			freq = freq_bw40[idx];
-			break;
-		}
-
-		idx = mt7615_find_freq_idx(freq_bw40, ARRAY_SIZE(freq_bw40),
-					   freq - 10);
-		if (idx >= 0) {
-			freq = freq_bw40[idx];
-			break;
-		}
-		fallthrough;
-	case NL80211_CHAN_WIDTH_40:
-		idx = mt7615_find_freq_idx(freq_bw40, ARRAY_SIZE(freq_bw40),
-					   freq);
-		if (idx >= 0)
-			break;
-
-		return -1;
-
-	}
-
-	return mt7615_find_freq_idx(freq_list, ARRAY_SIZE(freq_list), freq);
-}
-
-int mt7615_mcu_apply_rx_dcoc(struct mt7615_phy *phy)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	int freq2 = chandef->center_freq2;
-	int ret;
-	struct {
-		u8 direction;
-		u8 runtime_calibration;
-		u8 _rsv[2];
-
-		__le16 center_freq;
-		u8 bw;
-		u8 band;
-		u8 is_freq2;
-		u8 success;
-		u8 dbdc_en;
-
-		u8 _rsv2;
-
-		struct {
-			__le32 sx0_i_lna[4];
-			__le32 sx0_q_lna[4];
-
-			__le32 sx2_i_lna[4];
-			__le32 sx2_q_lna[4];
-		} dcoc_data[4];
-	} req = {
-		.direction = 1,
-
-		.bw = mt7615_mcu_chan_bw(chandef),
-		.band = chandef->center_freq1 > 4000,
-		.dbdc_en = !!dev->mt76.phys[MT_BAND1],
-	};
-	u16 center_freq = chandef->center_freq1;
-	int freq_idx;
-	u8 *eep = dev->mt76.eeprom.data;
-
-	if (!(eep[MT_EE_CALDATA_FLASH] & MT_EE_CALDATA_FLASH_RX_CAL))
-		return 0;
-
-	if (chandef->width == NL80211_CHAN_WIDTH_160) {
-		freq2 = center_freq + 40;
-		center_freq -= 40;
-	}
-
-again:
-	req.runtime_calibration = 1;
-	freq_idx = mt7615_dcoc_freq_idx(center_freq, chandef->width);
-	if (freq_idx < 0)
-		goto out;
-
-	memcpy(req.dcoc_data, eep + MT7615_EEPROM_DCOC_OFFSET +
-			      freq_idx * MT7615_EEPROM_DCOC_SIZE,
-	       sizeof(req.dcoc_data));
-	req.runtime_calibration = 0;
-
-out:
-	req.center_freq = cpu_to_le16(center_freq);
-	ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RXDCOC_CAL), &req,
-				sizeof(req), true);
-
-	if ((chandef->width == NL80211_CHAN_WIDTH_80P80 ||
-	     chandef->width == NL80211_CHAN_WIDTH_160) && !req.is_freq2) {
-		req.is_freq2 = true;
-		center_freq = freq2;
-		goto again;
-	}
-
-	return ret;
-}
-
-static int mt7615_dpd_freq_idx(u16 freq, u8 bw)
-{
-	static const u16 freq_list[] = {
-		4920, 4940, 4960, 4980,
-		5040, 5060, 5080, 5180,
-		5200, 5220, 5240, 5260,
-		5280, 5300, 5320, 5340,
-		5360, 5380, 5400, 5420,
-		5440, 5460, 5480, 5500,
-		5520, 5540, 5560, 5580,
-		5600, 5620, 5640, 5660,
-		5680, 5700, 5720, 5745,
-		5765, 5785, 5805, 5825,
-		5845, 5865, 5885, 5905
-	};
-	int offset_2g = ARRAY_SIZE(freq_list);
-	int idx;
-
-	if (freq < 4000) {
-		if (freq < 2432)
-			return offset_2g;
-		if (freq < 2457)
-			return offset_2g + 1;
-
-		return offset_2g + 2;
-	}
-
-	if (bw != NL80211_CHAN_WIDTH_20) {
-		idx = mt7615_find_freq_idx(freq_list, ARRAY_SIZE(freq_list),
-					   freq + 10);
-		if (idx >= 0)
-			return idx;
-
-		idx = mt7615_find_freq_idx(freq_list, ARRAY_SIZE(freq_list),
-					   freq - 10);
-		if (idx >= 0)
-			return idx;
-	}
-
-	return mt7615_find_freq_idx(freq_list, ARRAY_SIZE(freq_list), freq);
-}
-
-
-int mt7615_mcu_apply_tx_dpd(struct mt7615_phy *phy)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	int freq2 = chandef->center_freq2;
-	int ret;
-	struct {
-		u8 direction;
-		u8 runtime_calibration;
-		u8 _rsv[2];
-
-		__le16 center_freq;
-		u8 bw;
-		u8 band;
-		u8 is_freq2;
-		u8 success;
-		u8 dbdc_en;
-
-		u8 _rsv2;
-
-		struct {
-			struct {
-				u32 dpd_g0;
-				u8 data[32];
-			} wf0, wf1;
-
-			struct {
-				u32 dpd_g0_prim;
-				u32 dpd_g0_sec;
-				u8 data_prim[32];
-				u8 data_sec[32];
-			} wf2, wf3;
-		} dpd_data;
-	} req = {
-		.direction = 1,
-
-		.bw = mt7615_mcu_chan_bw(chandef),
-		.band = chandef->center_freq1 > 4000,
-		.dbdc_en = !!dev->mt76.phys[MT_BAND1],
-	};
-	u16 center_freq = chandef->center_freq1;
-	int freq_idx;
-	u8 *eep = dev->mt76.eeprom.data;
-
-	if (!(eep[MT_EE_CALDATA_FLASH] & MT_EE_CALDATA_FLASH_TX_DPD))
-		return 0;
-
-	if (chandef->width == NL80211_CHAN_WIDTH_160) {
-		freq2 = center_freq + 40;
-		center_freq -= 40;
-	}
-
-again:
-	req.runtime_calibration = 1;
-	freq_idx = mt7615_dpd_freq_idx(center_freq, chandef->width);
-	if (freq_idx < 0)
-		goto out;
-
-	memcpy(&req.dpd_data, eep + MT7615_EEPROM_TXDPD_OFFSET +
-			      freq_idx * MT7615_EEPROM_TXDPD_SIZE,
-	       sizeof(req.dpd_data));
-	req.runtime_calibration = 0;
-
-out:
-	req.center_freq = cpu_to_le16(center_freq);
-	ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(TXDPD_CAL),
-				&req, sizeof(req), true);
-
-	if ((chandef->width == NL80211_CHAN_WIDTH_80P80 ||
-	     chandef->width == NL80211_CHAN_WIDTH_160) && !req.is_freq2) {
-		req.is_freq2 = true;
-		center_freq = freq2;
-		goto again;
-	}
-
-	return ret;
-}
-
-int mt7615_mcu_set_rx_hdr_trans_blacklist(struct mt7615_dev *dev)
-{
-	struct {
-		u8 operation;
-		u8 count;
-		u8 _rsv[2];
-		u8 index;
-		u8 enable;
-		__le16 etype;
-	} req = {
-		.operation = 1,
-		.count = 1,
-		.enable = 1,
-		.etype = cpu_to_le16(ETH_P_PAE),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RX_HDR_TRANS),
-				 &req, sizeof(req), false);
-}
-
-int mt7615_mcu_set_bss_pm(struct mt7615_dev *dev, struct ieee80211_vif *vif,
-			  bool enable)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct {
-		u8 bss_idx;
-		u8 dtim_period;
-		__le16 aid;
-		__le16 bcn_interval;
-		__le16 atim_window;
-		u8 uapsd;
-		u8 bmc_delivered_ac;
-		u8 bmc_triggered_ac;
-		u8 pad;
-	} req = {
-		.bss_idx = mvif->mt76.idx,
-		.aid = cpu_to_le16(vif->bss_conf.aid),
-		.dtim_period = vif->bss_conf.dtim_period,
-		.bcn_interval = cpu_to_le16(vif->bss_conf.beacon_int),
-	};
-	struct {
-		u8 bss_idx;
-		u8 pad[3];
-	} req_hdr = {
-		.bss_idx = mvif->mt76.idx,
-	};
-	int err;
-
-	if (vif->type != NL80211_IFTYPE_STATION)
-		return 0;
-
-	err = mt76_mcu_send_msg(&dev->mt76, MCU_CE_CMD(SET_BSS_ABORT),
-				&req_hdr, sizeof(req_hdr), false);
-	if (err < 0 || !enable)
-		return err;
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_CE_CMD(SET_BSS_CONNECTED),
-				 &req, sizeof(req), false);
-}
-
-int mt7615_mcu_set_roc(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-		       struct ieee80211_channel *chan, int duration)
-{
-	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct mt7615_dev *dev = phy->dev;
-	struct mt7615_roc_tlv req = {
-		.bss_idx = mvif->mt76.idx,
-		.active = !chan,
-		.max_interval = cpu_to_le32(duration),
-		.primary_chan = chan ? chan->hw_value : 0,
-		.band = chan ? chan->band : 0,
-		.req_type = 2,
-	};
-
-	phy->roc_grant = false;
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_CE_CMD(SET_ROC),
-				 &req, sizeof(req), false);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mcu.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mcu.h
deleted file mode 100644
index 615956a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mcu.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2019 MediaTek Inc. */
-
-#ifndef __MT7615_MCU_H
-#define __MT7615_MCU_H
-
-#include "../mt76_connac_mcu.h"
-
-struct mt7615_mcu_txd {
-	__le32 txd[8];
-
-	__le16 len;
-	__le16 pq_id;
-
-	u8 cid;
-	u8 pkt_type;
-	u8 set_query; /* FW don't care */
-	u8 seq;
-
-	u8 uc_d2b0_rev;
-	u8 ext_cid;
-	u8 s2d_index;
-	u8 ext_cid_ack;
-
-	u32 reserved[5];
-} __packed __aligned(4);
-
-/**
- * struct mt7615_uni_txd - mcu command descriptor for firmware v3
- * @txd: hardware descriptor
- * @len: total length not including txd
- * @cid: command identifier
- * @pkt_type: must be 0xa0 (cmd packet by long format)
- * @frag_n: fragment number
- * @seq: sequence number
- * @checksum: 0 mean there is no checksum
- * @s2d_index: index for command source and destination
- *  Definition              | value | note
- *  CMD_S2D_IDX_H2N         | 0x00  | command from HOST to WM
- *  CMD_S2D_IDX_C2N         | 0x01  | command from WA to WM
- *  CMD_S2D_IDX_H2C         | 0x02  | command from HOST to WA
- *  CMD_S2D_IDX_H2N_AND_H2C | 0x03  | command from HOST to WA and WM
- *
- * @option: command option
- *  BIT[0]: UNI_CMD_OPT_BIT_ACK
- *          set to 1 to request a fw reply
- *          if UNI_CMD_OPT_BIT_0_ACK is set and UNI_CMD_OPT_BIT_2_SET_QUERY
- *          is set, mcu firmware will send response event EID = 0x01
- *          (UNI_EVENT_ID_CMD_RESULT) to the host.
- *  BIT[1]: UNI_CMD_OPT_BIT_UNI_CMD
- *          0: original command
- *          1: unified command
- *  BIT[2]: UNI_CMD_OPT_BIT_SET_QUERY
- *          0: QUERY command
- *          1: SET command
- */
-struct mt7615_uni_txd {
-	__le32 txd[8];
-
-	/* DW1 */
-	__le16 len;
-	__le16 cid;
-
-	/* DW2 */
-	u8 reserved;
-	u8 pkt_type;
-	u8 frag_n;
-	u8 seq;
-
-	/* DW3 */
-	__le16 checksum;
-	u8 s2d_index;
-	u8 option;
-
-	/* DW4 */
-	u8 reserved2[4];
-} __packed __aligned(4);
-
-enum {
-    MT_SKU_CCK_1_2 = 0,
-    MT_SKU_CCK_55_11,
-    MT_SKU_OFDM_6_9,
-    MT_SKU_OFDM_12_18,
-    MT_SKU_OFDM_24_36,
-    MT_SKU_OFDM_48,
-    MT_SKU_OFDM_54,
-    MT_SKU_HT20_0_8,
-    MT_SKU_HT20_32,
-    MT_SKU_HT20_1_2_9_10,
-    MT_SKU_HT20_3_4_11_12,
-    MT_SKU_HT20_5_13,
-    MT_SKU_HT20_6_14,
-    MT_SKU_HT20_7_15,
-    MT_SKU_HT40_0_8,
-    MT_SKU_HT40_32,
-    MT_SKU_HT40_1_2_9_10,
-    MT_SKU_HT40_3_4_11_12,
-    MT_SKU_HT40_5_13,
-    MT_SKU_HT40_6_14,
-    MT_SKU_HT40_7_15,
-    MT_SKU_VHT20_0,
-    MT_SKU_VHT20_1_2,
-    MT_SKU_VHT20_3_4,
-    MT_SKU_VHT20_5_6,
-    MT_SKU_VHT20_7,
-    MT_SKU_VHT20_8,
-    MT_SKU_VHT20_9,
-    MT_SKU_VHT40_0,
-    MT_SKU_VHT40_1_2,
-    MT_SKU_VHT40_3_4,
-    MT_SKU_VHT40_5_6,
-    MT_SKU_VHT40_7,
-    MT_SKU_VHT40_8,
-    MT_SKU_VHT40_9,
-    MT_SKU_VHT80_0,
-    MT_SKU_VHT80_1_2,
-    MT_SKU_VHT80_3_4,
-    MT_SKU_VHT80_5_6,
-    MT_SKU_VHT80_7,
-    MT_SKU_VHT80_8,
-    MT_SKU_VHT80_9,
-    MT_SKU_VHT160_0,
-    MT_SKU_VHT160_1_2,
-    MT_SKU_VHT160_3_4,
-    MT_SKU_VHT160_5_6,
-    MT_SKU_VHT160_7,
-    MT_SKU_VHT160_8,
-    MT_SKU_VHT160_9,
-    MT_SKU_1SS_DELTA,
-    MT_SKU_2SS_DELTA,
-    MT_SKU_3SS_DELTA,
-    MT_SKU_4SS_DELTA,
-};
-
-struct mt7615_mcu_rxd {
-	__le32 rxd[4];
-
-	__le16 len;
-	__le16 pkt_type_id;
-
-	u8 eid;
-	u8 seq;
-	__le16 __rsv;
-
-	u8 ext_eid;
-	u8 __rsv1[2];
-	u8 s2d_index;
-};
-
-struct mt7615_mcu_csa_notify {
-	struct mt7615_mcu_rxd rxd;
-
-	u8 omac_idx;
-	u8 csa_count;
-	u8 rsv[2];
-} __packed;
-
-struct mt7615_mcu_rdd_report {
-	struct mt7615_mcu_rxd rxd;
-
-	u8 band_idx;
-	u8 long_detected;
-	u8 constant_prf_detected;
-	u8 staggered_prf_detected;
-	u8 radar_type_idx;
-	u8 periodic_pulse_num;
-	u8 long_pulse_num;
-	u8 hw_pulse_num;
-
-	u8 out_lpn;
-	u8 out_spn;
-	u8 out_crpn;
-	u8 out_crpw;
-	u8 out_crbn;
-	u8 out_stgpn;
-	u8 out_stgpw;
-
-	u8 _rsv[2];
-
-	__le32 out_pri_const;
-	__le32 out_pri_stg[3];
-
-	struct {
-		__le32 start;
-		__le16 pulse_width;
-		__le16 pulse_power;
-	} long_pulse[32];
-
-	struct {
-		__le32 start;
-		__le16 pulse_width;
-		__le16 pulse_power;
-	} periodic_pulse[32];
-
-	struct {
-		__le32 start;
-		__le16 pulse_width;
-		__le16 pulse_power;
-		u8 sc_pass;
-		u8 sw_reset;
-	} hw_pulse[32];
-};
-
-enum {
-	MCU_ATE_SET_FREQ_OFFSET = 0xa,
-	MCU_ATE_SET_TX_POWER_CONTROL = 0x15,
-};
-
-struct mt7615_mcu_uni_event {
-	u8 cid;
-	u8 pad[3];
-	__le32 status; /* 0: success, others: fail */
-} __packed;
-
-struct mt7615_mcu_reg_event {
-	__le32 reg;
-	__le32 val;
-} __packed;
-
-struct mt7615_roc_tlv {
-	u8 bss_idx;
-	u8 token;
-	u8 active;
-	u8 primary_chan;
-	u8 sco;
-	u8 band;
-	u8 width;	/* To support 80/160MHz bandwidth */
-	u8 freq_seg1;	/* To support 80/160MHz bandwidth */
-	u8 freq_seg2;	/* To support 80/160MHz bandwidth */
-	u8 req_type;
-	u8 dbdc_band;
-	u8 rsv0;
-	__le32 max_interval;	/* ms */
-	u8 rsv1[8];
-} __packed;
-
-enum {
-	FW_STATE_PWR_ON = 1,
-	FW_STATE_N9_RDY = 2,
-};
-
-enum {
-	DBDC_TYPE_WMM,
-	DBDC_TYPE_MGMT,
-	DBDC_TYPE_BSS,
-	DBDC_TYPE_MBSS,
-	DBDC_TYPE_REPEATER,
-	DBDC_TYPE_MU,
-	DBDC_TYPE_BF,
-	DBDC_TYPE_PTA,
-	__DBDC_TYPE_MAX,
-};
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mmio.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mmio.c
deleted file mode 100644
index a784f9d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mmio.c
+++ /dev/null
@@ -1,292 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/pci.h>
-
-#include "mt7615.h"
-#include "regs.h"
-#include "mac.h"
-#include "../trace.h"
-
-const u32 mt7615e_reg_map[] = {
-	[MT_TOP_CFG_BASE]	= 0x01000,
-	[MT_HW_BASE]		= 0x01000,
-	[MT_PCIE_REMAP_2]	= 0x02504,
-	[MT_ARB_BASE]		= 0x20c00,
-	[MT_HIF_BASE]		= 0x04000,
-	[MT_CSR_BASE]		= 0x07000,
-	[MT_PLE_BASE]		= 0x08000,
-	[MT_PSE_BASE]		= 0x0c000,
-	[MT_CFG_BASE]		= 0x20200,
-	[MT_AGG_BASE]		= 0x20a00,
-	[MT_TMAC_BASE]		= 0x21000,
-	[MT_RMAC_BASE]		= 0x21200,
-	[MT_DMA_BASE]		= 0x21800,
-	[MT_PF_BASE]		= 0x22000,
-	[MT_WTBL_BASE_ON]	= 0x23000,
-	[MT_WTBL_BASE_OFF]	= 0x23400,
-	[MT_LPON_BASE]		= 0x24200,
-	[MT_MIB_BASE]		= 0x24800,
-	[MT_WTBL_BASE_ADDR]	= 0x30000,
-	[MT_PCIE_REMAP_BASE2]	= 0x80000,
-	[MT_TOP_MISC_BASE]	= 0xc0000,
-	[MT_EFUSE_ADDR_BASE]	= 0x81070000,
-};
-
-const u32 mt7663e_reg_map[] = {
-	[MT_TOP_CFG_BASE]	= 0x01000,
-	[MT_HW_BASE]		= 0x02000,
-	[MT_DMA_SHDL_BASE]	= 0x06000,
-	[MT_PCIE_REMAP_2]	= 0x0700c,
-	[MT_ARB_BASE]		= 0x20c00,
-	[MT_HIF_BASE]		= 0x04000,
-	[MT_CSR_BASE]		= 0x07000,
-	[MT_PLE_BASE]		= 0x08000,
-	[MT_PSE_BASE]		= 0x0c000,
-	[MT_PP_BASE]            = 0x0e000,
-	[MT_CFG_BASE]		= 0x20000,
-	[MT_AGG_BASE]		= 0x22000,
-	[MT_TMAC_BASE]		= 0x24000,
-	[MT_RMAC_BASE]		= 0x25000,
-	[MT_DMA_BASE]		= 0x27000,
-	[MT_PF_BASE]		= 0x28000,
-	[MT_WTBL_BASE_ON]	= 0x29000,
-	[MT_WTBL_BASE_OFF]	= 0x29800,
-	[MT_LPON_BASE]		= 0x2b000,
-	[MT_MIB_BASE]		= 0x2d000,
-	[MT_WTBL_BASE_ADDR]	= 0x30000,
-	[MT_PCIE_REMAP_BASE2]	= 0x90000,
-	[MT_TOP_MISC_BASE]	= 0xc0000,
-	[MT_EFUSE_ADDR_BASE]	= 0x78011000,
-};
-
-u32 mt7615_reg_map(struct mt7615_dev *dev, u32 addr)
-{
-	u32 base, offset;
-
-	if (is_mt7663(&dev->mt76)) {
-		base = addr & MT7663_MCU_PCIE_REMAP_2_BASE;
-		offset = addr & MT7663_MCU_PCIE_REMAP_2_OFFSET;
-	} else {
-		base = addr & MT_MCU_PCIE_REMAP_2_BASE;
-		offset = addr & MT_MCU_PCIE_REMAP_2_OFFSET;
-	}
-	mt76_wr(dev, MT_MCU_PCIE_REMAP_2, base);
-
-	return MT_PCIE_REMAP_BASE_2 + offset;
-}
-
-static void
-mt7615_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-
-	mt7615_irq_enable(dev, MT_INT_RX_DONE(q));
-}
-
-static irqreturn_t mt7615_irq_handler(int irq, void *dev_instance)
-{
-	struct mt7615_dev *dev = dev_instance;
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-
-	if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state))
-		return IRQ_NONE;
-
-	tasklet_schedule(&dev->irq_tasklet);
-
-	return IRQ_HANDLED;
-}
-
-static void mt7615_irq_tasklet(struct tasklet_struct *t)
-{
-	struct mt7615_dev *dev = from_tasklet(dev, t, irq_tasklet);
-	u32 intr, mask = 0, tx_mcu_mask = mt7615_tx_mcu_int_mask(dev);
-	u32 mcu_int;
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-
-	intr = mt76_rr(dev, MT_INT_SOURCE_CSR);
-	intr &= dev->mt76.mmio.irqmask;
-	mt76_wr(dev, MT_INT_SOURCE_CSR, intr);
-
-	trace_dev_irq(&dev->mt76, intr, dev->mt76.mmio.irqmask);
-
-	mask |= intr & MT_INT_RX_DONE_ALL;
-	if (intr & tx_mcu_mask)
-		mask |= tx_mcu_mask;
-	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, mask, 0);
-
-	if (intr & tx_mcu_mask)
-		napi_schedule(&dev->mt76.tx_napi);
-
-	if (intr & MT_INT_RX_DONE(0))
-		napi_schedule(&dev->mt76.napi[0]);
-
-	if (intr & MT_INT_RX_DONE(1))
-		napi_schedule(&dev->mt76.napi[1]);
-
-	if (!(intr & (MT_INT_MCU_CMD | MT7663_INT_MCU_CMD)))
-		return;
-
-	if (is_mt7663(&dev->mt76)) {
-		mcu_int = mt76_rr(dev, MT_MCU2HOST_INT_STATUS);
-		mcu_int &= MT7663_MCU_CMD_ERROR_MASK;
-		mt76_wr(dev, MT_MCU2HOST_INT_STATUS, mcu_int);
-	} else {
-		mcu_int = mt76_rr(dev, MT_MCU_CMD);
-		mcu_int &= MT_MCU_CMD_ERROR_MASK;
-	}
-
-	if (!mcu_int)
-		return;
-
-	dev->reset_state = mcu_int;
-	queue_work(dev->mt76.wq, &dev->reset_work);
-	wake_up(&dev->reset_wait);
-}
-
-static u32 __mt7615_reg_addr(struct mt7615_dev *dev, u32 addr)
-{
-	if (addr < 0x100000)
-		return addr;
-
-	return mt7615_reg_map(dev, addr);
-}
-
-static u32 mt7615_rr(struct mt76_dev *mdev, u32 offset)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	u32 addr = __mt7615_reg_addr(dev, offset);
-
-	return dev->bus_ops->rr(mdev, addr);
-}
-
-static void mt7615_wr(struct mt76_dev *mdev, u32 offset, u32 val)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	u32 addr = __mt7615_reg_addr(dev, offset);
-
-	dev->bus_ops->wr(mdev, addr, val);
-}
-
-static u32 mt7615_rmw(struct mt76_dev *mdev, u32 offset, u32 mask, u32 val)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	u32 addr = __mt7615_reg_addr(dev, offset);
-
-	return dev->bus_ops->rmw(mdev, addr, mask, val);
-}
-
-int mt7615_mmio_probe(struct device *pdev, void __iomem *mem_base,
-		      int irq, const u32 *map)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		/* txwi_size = txd size + txp size */
-		.txwi_size = MT_TXD_SIZE + sizeof(struct mt76_connac_txp_common),
-		.drv_flags = MT_DRV_TXWI_NO_FREE | MT_DRV_HW_MGMT_TXQ,
-		.survey_flags = SURVEY_INFO_TIME_TX |
-				SURVEY_INFO_TIME_RX |
-				SURVEY_INFO_TIME_BSS_RX,
-		.token_size = MT7615_TOKEN_SIZE,
-		.tx_prepare_skb = mt7615_tx_prepare_skb,
-		.tx_complete_skb = mt76_connac_tx_complete_skb,
-		.rx_check = mt7615_rx_check,
-		.rx_skb = mt7615_queue_rx_skb,
-		.rx_poll_complete = mt7615_rx_poll_complete,
-		.sta_ps = mt7615_sta_ps,
-		.sta_add = mt7615_mac_sta_add,
-		.sta_remove = mt7615_mac_sta_remove,
-		.update_survey = mt7615_update_channel,
-	};
-	struct mt76_bus_ops *bus_ops;
-	struct ieee80211_ops *ops;
-	struct mt7615_dev *dev;
-	struct mt76_dev *mdev;
-	int ret;
-
-	ops = devm_kmemdup(pdev, &mt7615_ops, sizeof(mt7615_ops), GFP_KERNEL);
-	if (!ops)
-		return -ENOMEM;
-
-	mdev = mt76_alloc_device(pdev, sizeof(*dev), ops, &drv_ops);
-	if (!mdev)
-		return -ENOMEM;
-
-	dev = container_of(mdev, struct mt7615_dev, mt76);
-	mt76_mmio_init(&dev->mt76, mem_base);
-	tasklet_setup(&dev->irq_tasklet, mt7615_irq_tasklet);
-
-	dev->reg_map = map;
-	dev->ops = ops;
-	mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |
-		    (mt76_rr(dev, MT_HW_REV) & 0xff);
-	dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
-
-	dev->bus_ops = dev->mt76.bus;
-	bus_ops = devm_kmemdup(dev->mt76.dev, dev->bus_ops, sizeof(*bus_ops),
-			       GFP_KERNEL);
-	if (!bus_ops) {
-		ret = -ENOMEM;
-		goto err_free_dev;
-	}
-
-	bus_ops->rr = mt7615_rr;
-	bus_ops->wr = mt7615_wr;
-	bus_ops->rmw = mt7615_rmw;
-	dev->mt76.bus = bus_ops;
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-
-	ret = devm_request_irq(mdev->dev, irq, mt7615_irq_handler,
-			       IRQF_SHARED, KBUILD_MODNAME, dev);
-	if (ret)
-		goto err_free_dev;
-
-	if (is_mt7663(mdev))
-		mt76_wr(dev, MT_PCIE_IRQ_ENABLE, 1);
-
-	ret = mt7615_register_device(dev);
-	if (ret)
-		goto err_free_irq;
-
-	return 0;
-
-err_free_irq:
-	devm_free_irq(pdev, irq, dev);
-err_free_dev:
-	mt76_free_device(&dev->mt76);
-
-	return ret;
-}
-
-static int __init mt7615_init(void)
-{
-	int ret;
-
-	ret = pci_register_driver(&mt7615_pci_driver);
-	if (ret)
-		return ret;
-
-	if (IS_ENABLED(CONFIG_MT7622_WMAC)) {
-		ret = platform_driver_register(&mt7622_wmac_driver);
-		if (ret)
-			pci_unregister_driver(&mt7615_pci_driver);
-	}
-
-	return ret;
-}
-
-static void __exit mt7615_exit(void)
-{
-	if (IS_ENABLED(CONFIG_MT7622_WMAC))
-		platform_driver_unregister(&mt7622_wmac_driver);
-	pci_unregister_driver(&mt7615_pci_driver);
-}
-
-module_init(mt7615_init);
-module_exit(mt7615_exit);
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mt7615.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mt7615.h
deleted file mode 100644
index 060d52c..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mt7615.h
+++ /dev/null
@@ -1,565 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2019 MediaTek Inc. */
-
-#ifndef __MT7615_H
-#define __MT7615_H
-
-#include <linux/completion.h>
-#include <linux/interrupt.h>
-#include <linux/ktime.h>
-#include <linux/regmap.h>
-#include "../mt76_connac_mcu.h"
-#include "regs.h"
-
-#define MT7615_MAX_INTERFACES		16
-#define MT7615_MAX_WMM_SETS		4
-#define MT7663_WTBL_SIZE		32
-#define MT7615_WTBL_SIZE		128
-#define MT7615_WTBL_RESERVED		(mt7615_wtbl_size(dev) - 1)
-#define MT7615_WTBL_STA			(MT7615_WTBL_RESERVED - \
-					 MT7615_MAX_INTERFACES)
-
-#define MT7615_PM_TIMEOUT		(HZ / 12)
-#define MT7615_HW_SCAN_TIMEOUT		(HZ / 10)
-#define MT7615_RESET_TIMEOUT		(30 * HZ)
-#define MT7615_RATE_RETRY		2
-
-#define MT7615_TX_RING_SIZE		1024
-#define MT7615_TX_MGMT_RING_SIZE	128
-#define MT7615_TX_MCU_RING_SIZE		128
-#define MT7615_TX_FWDL_RING_SIZE	128
-
-#define MT7615_RX_RING_SIZE		1024
-#define MT7615_RX_MCU_RING_SIZE		512
-
-#define MT7615_DRV_OWN_RETRY_COUNT	10
-
-#define MT7615_FIRMWARE_CR4		"mediatek/mt7615_cr4.bin"
-#define MT7615_FIRMWARE_N9		"mediatek/mt7615_n9.bin"
-#define MT7615_ROM_PATCH		"mediatek/mt7615_rom_patch.bin"
-
-#define MT7622_FIRMWARE_N9		"mediatek/mt7622_n9.bin"
-#define MT7622_ROM_PATCH		"mediatek/mt7622_rom_patch.bin"
-
-#define MT7615_FIRMWARE_V1		1
-#define MT7615_FIRMWARE_V2		2
-#define MT7615_FIRMWARE_V3		3
-
-#define MT7663_OFFLOAD_ROM_PATCH	"mediatek/mt7663pr2h.bin"
-#define MT7663_OFFLOAD_FIRMWARE_N9	"mediatek/mt7663_n9_v3.bin"
-#define MT7663_ROM_PATCH		"mediatek/mt7663pr2h_rebb.bin"
-#define MT7663_FIRMWARE_N9		"mediatek/mt7663_n9_rebb.bin"
-
-#define MT7615_EEPROM_SIZE		1024
-#define MT7615_TOKEN_SIZE		4096
-
-#define MT_FRAC_SCALE		12
-#define MT_FRAC(val, div)	(((val) << MT_FRAC_SCALE) / (div))
-
-#define MT_CHFREQ_VALID		BIT(7)
-#define MT_CHFREQ_DBDC_IDX	BIT(6)
-#define MT_CHFREQ_SEQ		GENMASK(5, 0)
-
-#define MT7615_BAR_RATE_DEFAULT		0x4b /* OFDM 6M */
-#define MT7615_CFEND_RATE_DEFAULT	0x49 /* OFDM 24M */
-#define MT7615_CFEND_RATE_11B		0x03 /* 11B LP, 11M */
-
-struct mt7615_vif;
-struct mt7615_sta;
-struct mt7615_dfs_pulse;
-struct mt7615_dfs_pattern;
-enum mt7615_cipher_type;
-
-enum mt7615_hw_txq_id {
-	MT7615_TXQ_MAIN,
-	MT7615_TXQ_EXT,
-	MT7615_TXQ_MCU,
-	MT7615_TXQ_FWDL,
-};
-
-enum mt7622_hw_txq_id {
-	MT7622_TXQ_AC0,
-	MT7622_TXQ_AC1,
-	MT7622_TXQ_AC2,
-	MT7622_TXQ_FWDL = MT7615_TXQ_FWDL,
-	MT7622_TXQ_AC3,
-	MT7622_TXQ_MGMT,
-	MT7622_TXQ_MCU = 15,
-};
-
-struct mt7615_rate_set {
-	struct ieee80211_tx_rate probe_rate;
-	struct ieee80211_tx_rate rates[4];
-};
-
-struct mt7615_rate_desc {
-	bool rateset;
-	u16 probe_val;
-	u16 val[4];
-	u8 bw_idx;
-	u8 bw;
-};
-
-struct mt7615_wtbl_rate_desc {
-	struct list_head node;
-
-	struct mt7615_rate_desc rate;
-	struct mt7615_sta *sta;
-};
-
-struct mt7663s_intr {
-	u32 isr;
-	struct {
-		u32 wtqcr[8];
-	} tx;
-	struct {
-		u16 num[2];
-		u16 len[2][16];
-	} rx;
-	u32 rec_mb[2];
-} __packed;
-
-struct mt7615_sta {
-	struct mt76_wcid wcid; /* must be first */
-
-	struct mt7615_vif *vif;
-
-	struct list_head poll_list;
-	u32 airtime_ac[8];
-
-	struct ieee80211_tx_rate rates[4];
-
-	struct mt7615_rate_set rateset[2];
-	u32 rate_set_tsf;
-
-	u8 rate_count;
-	u8 n_rates;
-
-	u8 rate_probe;
-};
-
-struct mt7615_vif {
-	struct mt76_vif mt76; /* must be first */
-	struct mt7615_sta sta;
-	bool sta_added;
-};
-
-struct mib_stats {
-	u32 ack_fail_cnt;
-	u32 fcs_err_cnt;
-	u32 rts_cnt;
-	u32 rts_retries_cnt;
-	u32 ba_miss_cnt;
-	unsigned long aggr_per;
-};
-
-struct mt7615_phy {
-	struct mt76_phy *mt76;
-	struct mt7615_dev *dev;
-
-	struct ieee80211_vif *monitor_vif;
-
-	u8 n_beacon_vif;
-
-	u32 rxfilter;
-	u64 omac_mask;
-
-	u16 noise;
-
-	bool scs_en;
-
-	unsigned long last_cca_adj;
-	int false_cca_ofdm, false_cca_cck;
-	s8 ofdm_sensitivity;
-	s8 cck_sensitivity;
-
-	s16 coverage_class;
-	u8 slottime;
-
-	u8 chfreq;
-	u8 rdd_state;
-
-	u32 rx_ampdu_ts;
-	u32 ampdu_ref;
-
-	struct mib_stats mib;
-
-	struct sk_buff_head scan_event_list;
-	struct delayed_work scan_work;
-
-	struct work_struct roc_work;
-	struct timer_list roc_timer;
-	wait_queue_head_t roc_wait;
-	bool roc_grant;
-
-#ifdef CONFIG_NL80211_TESTMODE
-	struct {
-		u32 *reg_backup;
-
-		s16 last_freq_offset;
-		u8 last_rcpi[4];
-		s8 last_ib_rssi[4];
-		s8 last_wb_rssi[4];
-	} test;
-#endif
-};
-
-#define mt7615_mcu_add_tx_ba(dev, ...)	(dev)->mcu_ops->add_tx_ba((dev), __VA_ARGS__)
-#define mt7615_mcu_add_rx_ba(dev, ...)	(dev)->mcu_ops->add_rx_ba((dev), __VA_ARGS__)
-#define mt7615_mcu_sta_add(phy, ...)	((phy)->dev)->mcu_ops->sta_add((phy),  __VA_ARGS__)
-#define mt7615_mcu_add_dev_info(phy, ...) ((phy)->dev)->mcu_ops->add_dev_info((phy),  __VA_ARGS__)
-#define mt7615_mcu_add_bss_info(phy, ...) ((phy)->dev)->mcu_ops->add_bss_info((phy),  __VA_ARGS__)
-#define mt7615_mcu_add_beacon(dev, ...)	(dev)->mcu_ops->add_beacon_offload((dev),  __VA_ARGS__)
-#define mt7615_mcu_set_pm(dev, ...)	(dev)->mcu_ops->set_pm_state((dev),  __VA_ARGS__)
-#define mt7615_mcu_set_drv_ctrl(dev)	(dev)->mcu_ops->set_drv_ctrl((dev))
-#define mt7615_mcu_set_fw_ctrl(dev)	(dev)->mcu_ops->set_fw_ctrl((dev))
-#define mt7615_mcu_set_sta_decap_offload(dev, ...) (dev)->mcu_ops->set_sta_decap_offload((dev), __VA_ARGS__)
-struct mt7615_mcu_ops {
-	int (*add_tx_ba)(struct mt7615_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool enable);
-	int (*add_rx_ba)(struct mt7615_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool enable);
-	int (*sta_add)(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta, bool enable);
-	int (*add_dev_info)(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-			    bool enable);
-	int (*add_bss_info)(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-			    struct ieee80211_sta *sta, bool enable);
-	int (*add_beacon_offload)(struct mt7615_dev *dev,
-				  struct ieee80211_hw *hw,
-				  struct ieee80211_vif *vif, bool enable);
-	int (*set_pm_state)(struct mt7615_dev *dev, int band, int state);
-	int (*set_drv_ctrl)(struct mt7615_dev *dev);
-	int (*set_fw_ctrl)(struct mt7615_dev *dev);
-	int (*set_sta_decap_offload)(struct mt7615_dev *dev,
-				     struct ieee80211_vif *vif,
-				     struct ieee80211_sta *sta);
-};
-
-struct mt7615_dev {
-	union { /* must be first */
-		struct mt76_dev mt76;
-		struct mt76_phy mphy;
-	};
-
-	const struct mt76_bus_ops *bus_ops;
-	struct tasklet_struct irq_tasklet;
-
-	struct mt7615_phy phy;
-	u64 omac_mask;
-
-	u16 chainmask;
-
-	struct ieee80211_ops *ops;
-	const struct mt7615_mcu_ops *mcu_ops;
-	struct regmap *infracfg;
-	const u32 *reg_map;
-
-	struct work_struct mcu_work;
-
-	struct work_struct reset_work;
-	wait_queue_head_t reset_wait;
-	u32 reset_state;
-
-	struct list_head sta_poll_list;
-	spinlock_t sta_poll_lock;
-
-	struct {
-		u8 n_pulses;
-		u32 period;
-		u16 width;
-		s16 power;
-	} radar_pattern;
-	u32 hw_pattern;
-
-	bool fw_debug;
-	bool flash_eeprom;
-	bool dbdc_support;
-
-	u8 fw_ver;
-
-	struct work_struct rate_work;
-	struct list_head wrd_head;
-
-	u32 debugfs_rf_wf;
-	u32 debugfs_rf_reg;
-
-	u32 muar_mask;
-
-	struct mt76_connac_pm pm;
-	struct mt76_connac_coredump coredump;
-};
-
-enum tx_pkt_queue_idx {
-	MT_LMAC_AC00,
-	MT_LMAC_AC01,
-	MT_LMAC_AC02,
-	MT_LMAC_AC03,
-	MT_LMAC_ALTX0 = 0x10,
-	MT_LMAC_BMC0,
-	MT_LMAC_BCN0,
-	MT_LMAC_PSMP0,
-	MT_LMAC_ALTX1,
-	MT_LMAC_BMC1,
-	MT_LMAC_BCN1,
-	MT_LMAC_PSMP1,
-};
-
-enum {
-	MT_RX_SEL0,
-	MT_RX_SEL1,
-};
-
-enum mt7615_rdd_cmd {
-	RDD_STOP,
-	RDD_START,
-	RDD_DET_MODE,
-	RDD_DET_STOP,
-	RDD_CAC_START,
-	RDD_CAC_END,
-	RDD_NORMAL_START,
-	RDD_DISABLE_DFS_CAL,
-	RDD_PULSE_DBG,
-	RDD_READ_PULSE,
-	RDD_RESUME_BF,
-};
-
-static inline struct mt7615_phy *
-mt7615_hw_phy(struct ieee80211_hw *hw)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	return phy->priv;
-}
-
-static inline struct mt7615_dev *
-mt7615_hw_dev(struct ieee80211_hw *hw)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	return container_of(phy->dev, struct mt7615_dev, mt76);
-}
-
-static inline struct mt7615_phy *
-mt7615_ext_phy(struct mt7615_dev *dev)
-{
-	struct mt76_phy *phy = dev->mt76.phys[MT_BAND1];
-
-	if (!phy)
-		return NULL;
-
-	return phy->priv;
-}
-
-extern struct ieee80211_rate mt7615_rates[12];
-extern const struct ieee80211_ops mt7615_ops;
-extern const u32 mt7615e_reg_map[__MT_BASE_MAX];
-extern const u32 mt7663e_reg_map[__MT_BASE_MAX];
-extern const u32 mt7663_usb_sdio_reg_map[__MT_BASE_MAX];
-extern struct pci_driver mt7615_pci_driver;
-extern struct platform_driver mt7622_wmac_driver;
-extern const struct mt76_testmode_ops mt7615_testmode_ops;
-
-#ifdef CONFIG_MT7622_WMAC
-int mt7622_wmac_init(struct mt7615_dev *dev);
-#else
-static inline int mt7622_wmac_init(struct mt7615_dev *dev)
-{
-	return 0;
-}
-#endif
-
-int mt7615_thermal_init(struct mt7615_dev *dev);
-int mt7615_mmio_probe(struct device *pdev, void __iomem *mem_base,
-		      int irq, const u32 *map);
-u32 mt7615_reg_map(struct mt7615_dev *dev, u32 addr);
-
-void mt7615_init_device(struct mt7615_dev *dev);
-int mt7615_register_device(struct mt7615_dev *dev);
-void mt7615_unregister_device(struct mt7615_dev *dev);
-int mt7615_register_ext_phy(struct mt7615_dev *dev);
-void mt7615_unregister_ext_phy(struct mt7615_dev *dev);
-int mt7615_eeprom_init(struct mt7615_dev *dev, u32 addr);
-int mt7615_eeprom_get_target_power_index(struct mt7615_dev *dev,
-					 struct ieee80211_channel *chan,
-					 u8 chain_idx);
-int mt7615_eeprom_get_power_delta_index(struct mt7615_dev *dev,
-					enum nl80211_band band);
-int mt7615_wait_pdma_busy(struct mt7615_dev *dev);
-int mt7615_dma_init(struct mt7615_dev *dev);
-void mt7615_dma_start(struct mt7615_dev *dev);
-void mt7615_dma_cleanup(struct mt7615_dev *dev);
-int mt7615_mcu_init(struct mt7615_dev *dev);
-bool mt7615_wait_for_mcu_init(struct mt7615_dev *dev);
-void mt7615_mac_set_rates(struct mt7615_phy *phy, struct mt7615_sta *sta,
-			  struct ieee80211_tx_rate *probe_rate,
-			  struct ieee80211_tx_rate *rates);
-void mt7615_pm_wake_work(struct work_struct *work);
-void mt7615_pm_power_save_work(struct work_struct *work);
-int mt7615_mcu_del_wtbl_all(struct mt7615_dev *dev);
-int mt7615_mcu_set_chan_info(struct mt7615_phy *phy, int cmd);
-int mt7615_mcu_set_wmm(struct mt7615_dev *dev, u8 queue,
-		       const struct ieee80211_tx_queue_params *params);
-void mt7615_mcu_rx_event(struct mt7615_dev *dev, struct sk_buff *skb);
-int mt7615_mcu_rdd_send_pattern(struct mt7615_dev *dev);
-int mt7615_mcu_fw_log_2_host(struct mt7615_dev *dev, u8 ctrl);
-
-static inline void mt7615_irq_enable(struct mt7615_dev *dev, u32 mask)
-{
-	mt76_set_irq_mask(&dev->mt76, 0, 0, mask);
-
-	tasklet_schedule(&dev->irq_tasklet);
-}
-
-static inline bool mt7615_firmware_offload(struct mt7615_dev *dev)
-{
-	return dev->fw_ver > MT7615_FIRMWARE_V2;
-}
-
-static inline u16 mt7615_wtbl_size(struct mt7615_dev *dev)
-{
-	if (is_mt7663(&dev->mt76) && mt7615_firmware_offload(dev))
-		return MT7663_WTBL_SIZE;
-	else
-		return MT7615_WTBL_SIZE;
-}
-
-#define mt7615_mutex_acquire(dev)	\
-	mt76_connac_mutex_acquire(&(dev)->mt76, &(dev)->pm)
-#define mt7615_mutex_release(dev)	\
-	mt76_connac_mutex_release(&(dev)->mt76, &(dev)->pm)
-
-static inline u8 mt7615_lmac_mapping(struct mt7615_dev *dev, u8 ac)
-{
-	static const u8 lmac_queue_map[] = {
-		[IEEE80211_AC_BK] = MT_LMAC_AC00,
-		[IEEE80211_AC_BE] = MT_LMAC_AC01,
-		[IEEE80211_AC_VI] = MT_LMAC_AC02,
-		[IEEE80211_AC_VO] = MT_LMAC_AC03,
-	};
-
-	if (WARN_ON_ONCE(ac >= ARRAY_SIZE(lmac_queue_map)))
-		return MT_LMAC_AC01; /* BE */
-
-	return lmac_queue_map[ac];
-}
-
-static inline u32 mt7615_tx_mcu_int_mask(struct mt7615_dev *dev)
-{
-	return MT_INT_TX_DONE(dev->mt76.q_mcu[MT_MCUQ_WM]->hw_idx);
-}
-
-static inline unsigned long
-mt7615_get_macwork_timeout(struct mt7615_dev *dev)
-{
-	return dev->pm.enable ? HZ / 3 : HZ / 10;
-}
-
-void mt7615_dma_reset(struct mt7615_dev *dev);
-void mt7615_scan_work(struct work_struct *work);
-void mt7615_roc_work(struct work_struct *work);
-void mt7615_roc_timer(struct timer_list *timer);
-void mt7615_init_txpower(struct mt7615_dev *dev,
-			 struct ieee80211_supported_band *sband);
-int mt7615_set_channel(struct mt7615_phy *phy);
-void mt7615_init_work(struct mt7615_dev *dev);
-
-int mt7615_mcu_restart(struct mt76_dev *dev);
-void mt7615_update_channel(struct mt76_phy *mphy);
-bool mt7615_mac_wtbl_update(struct mt7615_dev *dev, int idx, u32 mask);
-void mt7615_mac_reset_counters(struct mt7615_dev *dev);
-void mt7615_mac_cca_stats_reset(struct mt7615_phy *phy);
-void mt7615_mac_set_scs(struct mt7615_phy *phy, bool enable);
-void mt7615_mac_enable_nf(struct mt7615_dev *dev, bool ext_phy);
-void mt7615_mac_sta_poll(struct mt7615_dev *dev);
-int mt7615_mac_write_txwi(struct mt7615_dev *dev, __le32 *txwi,
-			  struct sk_buff *skb, struct mt76_wcid *wcid,
-			  struct ieee80211_sta *sta, int pid,
-			  struct ieee80211_key_conf *key,
-			  enum mt76_txq_id qid, bool beacon);
-void mt7615_mac_set_timing(struct mt7615_phy *phy);
-int __mt7615_mac_wtbl_set_key(struct mt7615_dev *dev,
-			      struct mt76_wcid *wcid,
-			      struct ieee80211_key_conf *key,
-			      enum set_key_cmd cmd);
-int mt7615_mac_wtbl_set_key(struct mt7615_dev *dev, struct mt76_wcid *wcid,
-			    struct ieee80211_key_conf *key,
-			    enum set_key_cmd cmd);
-void mt7615_mac_reset_work(struct work_struct *work);
-u32 mt7615_mac_get_sta_tid_sn(struct mt7615_dev *dev, int wcid, u8 tid);
-
-int mt7615_mcu_parse_response(struct mt76_dev *mdev, int cmd,
-			      struct sk_buff *skb, int seq);
-u32 mt7615_rf_rr(struct mt7615_dev *dev, u32 wf, u32 reg);
-int mt7615_rf_wr(struct mt7615_dev *dev, u32 wf, u32 reg, u32 val);
-int mt7615_mcu_set_dbdc(struct mt7615_dev *dev);
-int mt7615_mcu_set_eeprom(struct mt7615_dev *dev);
-int mt7615_mcu_get_temperature(struct mt7615_dev *dev);
-int mt7615_mcu_set_tx_power(struct mt7615_phy *phy);
-void mt7615_mcu_exit(struct mt7615_dev *dev);
-void mt7615_mcu_fill_msg(struct mt7615_dev *dev, struct sk_buff *skb,
-			 int cmd, int *wait_seq);
-
-int mt7615_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-			  enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			  struct ieee80211_sta *sta,
-			  struct mt76_tx_info *tx_info);
-
-void mt7615_tx_worker(struct mt76_worker *w);
-void mt7615_tx_token_put(struct mt7615_dev *dev);
-bool mt7615_rx_check(struct mt76_dev *mdev, void *data, int len);
-void mt7615_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			 struct sk_buff *skb);
-void mt7615_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps);
-int mt7615_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta);
-void mt7615_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta);
-void mt7615_mac_work(struct work_struct *work);
-int mt7615_mcu_set_rx_hdr_trans_blacklist(struct mt7615_dev *dev);
-int mt7615_mcu_set_fcc5_lpn(struct mt7615_dev *dev, int val);
-int mt7615_mcu_set_pulse_th(struct mt7615_dev *dev,
-			    const struct mt7615_dfs_pulse *pulse);
-int mt7615_mcu_set_radar_th(struct mt7615_dev *dev, int index,
-			    const struct mt7615_dfs_pattern *pattern);
-int mt7615_mcu_set_test_param(struct mt7615_dev *dev, u8 param, bool test_mode,
-			      u32 val);
-int mt7615_mcu_set_sku_en(struct mt7615_phy *phy, bool enable);
-int mt7615_mcu_apply_rx_dcoc(struct mt7615_phy *phy);
-int mt7615_mcu_apply_tx_dpd(struct mt7615_phy *phy);
-int mt7615_dfs_init_radar_detector(struct mt7615_phy *phy);
-
-int mt7615_mcu_set_roc(struct mt7615_phy *phy, struct ieee80211_vif *vif,
-		       struct ieee80211_channel *chan, int duration);
-
-int mt7615_init_debugfs(struct mt7615_dev *dev);
-int mt7615_mcu_wait_response(struct mt7615_dev *dev, int cmd, int seq);
-
-int mt7615_mac_set_beacon_filter(struct mt7615_phy *phy,
-				 struct ieee80211_vif *vif,
-				 bool enable);
-int mt7615_mcu_set_bss_pm(struct mt7615_dev *dev, struct ieee80211_vif *vif,
-			  bool enable);
-int __mt7663_load_firmware(struct mt7615_dev *dev);
-void mt7615_coredump_work(struct work_struct *work);
-
-void mt7622_trigger_hif_int(struct mt7615_dev *dev, bool en);
-
-/* usb */
-int mt7663_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-				   enum mt76_txq_id qid, struct mt76_wcid *wcid,
-				   struct ieee80211_sta *sta,
-				   struct mt76_tx_info *tx_info);
-bool mt7663_usb_sdio_tx_status_data(struct mt76_dev *mdev, u8 *update);
-void mt7663_usb_sdio_tx_complete_skb(struct mt76_dev *mdev,
-				     struct mt76_queue_entry *e);
-int mt7663_usb_sdio_register_device(struct mt7615_dev *dev);
-int mt7663u_mcu_init(struct mt7615_dev *dev);
-int mt7663u_mcu_power_on(struct mt7615_dev *dev);
-
-/* sdio */
-int mt7663s_mcu_init(struct mt7615_dev *dev);
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mt7615_trace.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mt7615_trace.h
deleted file mode 100644
index d3eb49d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/mt7615_trace.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2019 Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#if !defined(__MT7615_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
-#define __MT7615_TRACE_H
-
-#include <linux/tracepoint.h>
-#include "mt7615.h"
-
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM mt7615
-
-#define MAXNAME		32
-#define DEV_ENTRY	__array(char, wiphy_name, 32)
-#define DEV_ASSIGN	strlcpy(__entry->wiphy_name,	\
-				wiphy_name(mt76_hw(dev)->wiphy), MAXNAME)
-#define DEV_PR_FMT	"%s"
-#define DEV_PR_ARG	__entry->wiphy_name
-
-#define TOKEN_ENTRY	__field(u16, token)
-#define TOKEN_ASSIGN	__entry->token = token
-#define TOKEN_PR_FMT	" %d"
-#define TOKEN_PR_ARG	__entry->token
-
-DECLARE_EVENT_CLASS(dev_token,
-	TP_PROTO(struct mt7615_dev *dev, u16 token),
-	TP_ARGS(dev, token),
-	TP_STRUCT__entry(
-		DEV_ENTRY
-		TOKEN_ENTRY
-	),
-	TP_fast_assign(
-		DEV_ASSIGN;
-		TOKEN_ASSIGN;
-	),
-	TP_printk(
-		DEV_PR_FMT TOKEN_PR_FMT,
-		DEV_PR_ARG, TOKEN_PR_ARG
-	)
-);
-
-DEFINE_EVENT(dev_token, mac_tx_free,
-	TP_PROTO(struct mt7615_dev *dev, u16 token),
-	TP_ARGS(dev, token)
-);
-
-#endif
-
-#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
-#undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE mt7615_trace
-
-#include <trace/define_trace.h>
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/pci.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/pci.c
deleted file mode 100644
index b808248..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/pci.c
+++ /dev/null
@@ -1,202 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2019 MediaTek Inc.
- *
- * Author: Ryder Lee <ryder.lee@mediatek.com>
- *         Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/pci.h>
-
-#include "mt7615.h"
-#include "mcu.h"
-
-static const struct pci_device_id mt7615_pci_device_table[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7615) },
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7663) },
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7611) },
-	{ },
-};
-
-static int mt7615_pci_probe(struct pci_dev *pdev,
-			    const struct pci_device_id *id)
-{
-	const u32 *map;
-	int ret;
-
-	ret = pcim_enable_device(pdev);
-	if (ret)
-		return ret;
-
-	ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
-	if (ret)
-		return ret;
-
-	pci_set_master(pdev);
-
-	ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
-	if (ret < 0)
-		return ret;
-
-	ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
-	if (ret)
-		goto error;
-
-	mt76_pci_disable_aspm(pdev);
-
-	map = id->device == 0x7663 ? mt7663e_reg_map : mt7615e_reg_map;
-	ret = mt7615_mmio_probe(&pdev->dev, pcim_iomap_table(pdev)[0],
-				pdev->irq, map);
-	if (ret)
-		goto error;
-
-	return 0;
-error:
-	pci_free_irq_vectors(pdev);
-
-	return ret;
-}
-
-static void mt7615_pci_remove(struct pci_dev *pdev)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-
-	mt7615_unregister_device(dev);
-	devm_free_irq(&pdev->dev, pdev->irq, dev);
-	pci_free_irq_vectors(pdev);
-}
-
-#ifdef CONFIG_PM
-static int mt7615_pci_suspend(struct pci_dev *pdev, pm_message_t state)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	bool hif_suspend;
-	int i, err;
-
-	err = mt76_connac_pm_wake(&dev->mphy, &dev->pm);
-	if (err < 0)
-		return err;
-
-	hif_suspend = !test_bit(MT76_STATE_SUSPEND, &dev->mphy.state) &&
-		      mt7615_firmware_offload(dev);
-	if (hif_suspend) {
-		err = mt76_connac_mcu_set_hif_suspend(mdev, true);
-		if (err)
-			return err;
-	}
-
-	napi_disable(&mdev->tx_napi);
-	mt76_worker_disable(&mdev->tx_worker);
-
-	mt76_for_each_q_rx(mdev, i) {
-		napi_disable(&mdev->napi[i]);
-	}
-	tasklet_kill(&dev->irq_tasklet);
-
-	mt7615_dma_reset(dev);
-
-	err = mt7615_wait_pdma_busy(dev);
-	if (err)
-		goto restore;
-
-	if (is_mt7663(mdev)) {
-		mt76_set(dev, MT_PDMA_SLP_PROT, MT_PDMA_AXI_SLPPROT_ENABLE);
-		if (!mt76_poll_msec(dev, MT_PDMA_SLP_PROT,
-				    MT_PDMA_AXI_SLPPROT_RDY,
-				    MT_PDMA_AXI_SLPPROT_RDY, 1000)) {
-			dev_err(mdev->dev, "PDMA sleep protection failed\n");
-			err = -EIO;
-			goto restore;
-		}
-	}
-
-	pci_enable_wake(pdev, pci_choose_state(pdev, state), true);
-	pci_save_state(pdev);
-	err = pci_set_power_state(pdev, pci_choose_state(pdev, state));
-	if (err)
-		goto restore;
-
-	err = mt7615_mcu_set_fw_ctrl(dev);
-	if (err)
-		goto restore;
-
-	return 0;
-
-restore:
-	mt76_for_each_q_rx(mdev, i) {
-		napi_enable(&mdev->napi[i]);
-	}
-	napi_enable(&mdev->tx_napi);
-	if (hif_suspend)
-		mt76_connac_mcu_set_hif_suspend(mdev, false);
-
-	return err;
-}
-
-static int mt7615_pci_resume(struct pci_dev *pdev)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	bool pdma_reset;
-	int i, err;
-
-	err = mt7615_mcu_set_drv_ctrl(dev);
-	if (err < 0)
-		return err;
-
-	err = pci_set_power_state(pdev, PCI_D0);
-	if (err)
-		return err;
-
-	pci_restore_state(pdev);
-
-	if (is_mt7663(&dev->mt76)) {
-		mt76_clear(dev, MT_PDMA_SLP_PROT, MT_PDMA_AXI_SLPPROT_ENABLE);
-		mt76_wr(dev, MT_PCIE_IRQ_ENABLE, 1);
-	}
-
-	pdma_reset = !mt76_rr(dev, MT_WPDMA_TX_RING0_CTRL0) &&
-		     !mt76_rr(dev, MT_WPDMA_TX_RING0_CTRL1);
-	if (pdma_reset)
-		dev_err(mdev->dev, "PDMA engine must be reinitialized\n");
-
-	mt76_worker_enable(&mdev->tx_worker);
-	local_bh_disable();
-	mt76_for_each_q_rx(mdev, i) {
-		napi_enable(&mdev->napi[i]);
-		napi_schedule(&mdev->napi[i]);
-	}
-	napi_enable(&mdev->tx_napi);
-	napi_schedule(&mdev->tx_napi);
-	local_bh_enable();
-
-	if (!test_bit(MT76_STATE_SUSPEND, &dev->mphy.state) &&
-	    mt7615_firmware_offload(dev))
-		err = mt76_connac_mcu_set_hif_suspend(mdev, false);
-
-	return err;
-}
-#endif /* CONFIG_PM */
-
-struct pci_driver mt7615_pci_driver = {
-	.name		= KBUILD_MODNAME,
-	.id_table	= mt7615_pci_device_table,
-	.probe		= mt7615_pci_probe,
-	.remove		= mt7615_pci_remove,
-#ifdef CONFIG_PM
-	.suspend	= mt7615_pci_suspend,
-	.resume		= mt7615_pci_resume,
-#endif /* CONFIG_PM */
-};
-
-MODULE_DEVICE_TABLE(pci, mt7615_pci_device_table);
-MODULE_FIRMWARE(MT7615_FIRMWARE_CR4);
-MODULE_FIRMWARE(MT7615_FIRMWARE_N9);
-MODULE_FIRMWARE(MT7615_ROM_PATCH);
-MODULE_FIRMWARE(MT7663_OFFLOAD_FIRMWARE_N9);
-MODULE_FIRMWARE(MT7663_OFFLOAD_ROM_PATCH);
-MODULE_FIRMWARE(MT7663_FIRMWARE_N9);
-MODULE_FIRMWARE(MT7663_ROM_PATCH);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/pci_init.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/pci_init.c
deleted file mode 100644
index 87b4aa5..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/pci_init.c
+++ /dev/null
@@ -1,186 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2019 MediaTek Inc.
- *
- * Author: Roy Luo <royluo@google.com>
- *         Ryder Lee <ryder.lee@mediatek.com>
- *         Felix Fietkau <nbd@nbd.name>
- *         Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#include <linux/etherdevice.h>
-#include "mt7615.h"
-#include "mac.h"
-#include "eeprom.h"
-
-static void mt7615_pci_init_work(struct work_struct *work)
-{
-	struct mt7615_dev *dev = container_of(work, struct mt7615_dev,
-					      mcu_work);
-	int i, ret;
-
-	ret = mt7615_mcu_init(dev);
-	for (i = 0; (ret == -EAGAIN) && (i < 10); i++) {
-		msleep(200);
-		ret = mt7615_mcu_init(dev);
-	}
-
-	if (ret)
-		return;
-
-	mt7615_init_work(dev);
-}
-
-static int mt7615_init_hardware(struct mt7615_dev *dev)
-{
-	u32 addr = mt7615_reg_map(dev, MT_EFUSE_BASE);
-	int ret, idx;
-
-	mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
-
-	INIT_WORK(&dev->mcu_work, mt7615_pci_init_work);
-	ret = mt7615_eeprom_init(dev, addr);
-	if (ret < 0)
-		return ret;
-
-	if (is_mt7663(&dev->mt76)) {
-		/* Reset RGU */
-		mt76_clear(dev, MT_MCU_CIRQ_IRQ_SEL(4), BIT(1));
-		mt76_set(dev, MT_MCU_CIRQ_IRQ_SEL(4), BIT(1));
-	}
-
-	ret = mt7615_dma_init(dev);
-	if (ret)
-		return ret;
-
-	set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-
-	/* Beacon and mgmt frames should occupy wcid 0 */
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7615_WTBL_STA - 1);
-	if (idx)
-		return -ENOSPC;
-
-	dev->mt76.global_wcid.idx = idx;
-	dev->mt76.global_wcid.hw_key_idx = -1;
-	rcu_assign_pointer(dev->mt76.wcid[idx], &dev->mt76.global_wcid);
-
-	return 0;
-}
-
-static void
-mt7615_led_set_config(struct led_classdev *led_cdev,
-		      u8 delay_on, u8 delay_off)
-{
-	struct mt7615_dev *dev;
-	struct mt76_dev *mt76;
-	u32 val, addr;
-
-	mt76 = container_of(led_cdev, struct mt76_dev, led_cdev);
-	dev = container_of(mt76, struct mt7615_dev, mt76);
-
-	if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm))
-		return;
-
-	val = FIELD_PREP(MT_LED_STATUS_DURATION, 0xffff) |
-	      FIELD_PREP(MT_LED_STATUS_OFF, delay_off) |
-	      FIELD_PREP(MT_LED_STATUS_ON, delay_on);
-
-	addr = mt7615_reg_map(dev, MT_LED_STATUS_0(mt76->led_pin));
-	mt76_wr(dev, addr, val);
-	addr = mt7615_reg_map(dev, MT_LED_STATUS_1(mt76->led_pin));
-	mt76_wr(dev, addr, val);
-
-	val = MT_LED_CTRL_REPLAY(mt76->led_pin) |
-	      MT_LED_CTRL_KICK(mt76->led_pin);
-	if (mt76->led_al)
-		val |= MT_LED_CTRL_POLARITY(mt76->led_pin);
-	addr = mt7615_reg_map(dev, MT_LED_CTRL);
-	mt76_wr(dev, addr, val);
-
-	mt76_connac_pm_unref(&dev->mphy, &dev->pm);
-}
-
-static int
-mt7615_led_set_blink(struct led_classdev *led_cdev,
-		     unsigned long *delay_on,
-		     unsigned long *delay_off)
-{
-	u8 delta_on, delta_off;
-
-	delta_off = max_t(u8, *delay_off / 10, 1);
-	delta_on = max_t(u8, *delay_on / 10, 1);
-
-	mt7615_led_set_config(led_cdev, delta_on, delta_off);
-
-	return 0;
-}
-
-static void
-mt7615_led_set_brightness(struct led_classdev *led_cdev,
-			  enum led_brightness brightness)
-{
-	if (!brightness)
-		mt7615_led_set_config(led_cdev, 0, 0xff);
-	else
-		mt7615_led_set_config(led_cdev, 0xff, 0);
-}
-
-int mt7615_register_device(struct mt7615_dev *dev)
-{
-	int ret;
-
-	mt7615_init_device(dev);
-	INIT_WORK(&dev->reset_work, mt7615_mac_reset_work);
-
-	/* init led callbacks */
-	if (IS_ENABLED(CONFIG_MT76_LEDS)) {
-		dev->mt76.led_cdev.brightness_set = mt7615_led_set_brightness;
-		dev->mt76.led_cdev.blink_set = mt7615_led_set_blink;
-	}
-
-	ret = mt7622_wmac_init(dev);
-	if (ret)
-		return ret;
-
-	ret = mt7615_init_hardware(dev);
-	if (ret)
-		return ret;
-
-	ret = mt76_register_device(&dev->mt76, true, mt76_rates,
-				   ARRAY_SIZE(mt76_rates));
-	if (ret)
-		return ret;
-
-	ret = mt7615_thermal_init(dev);
-	if (ret)
-		return ret;
-
-	ieee80211_queue_work(mt76_hw(dev), &dev->mcu_work);
-	mt7615_init_txpower(dev, &dev->mphy.sband_2g.sband);
-	mt7615_init_txpower(dev, &dev->mphy.sband_5g.sband);
-
-	if (dev->dbdc_support) {
-		ret = mt7615_register_ext_phy(dev);
-		if (ret)
-			return ret;
-	}
-
-	return mt7615_init_debugfs(dev);
-}
-
-void mt7615_unregister_device(struct mt7615_dev *dev)
-{
-	bool mcu_running;
-
-	mcu_running = mt7615_wait_for_mcu_init(dev);
-
-	mt7615_unregister_ext_phy(dev);
-	mt76_unregister_device(&dev->mt76);
-	if (mcu_running)
-		mt7615_mcu_exit(dev);
-
-	mt7615_tx_token_put(dev);
-	mt7615_dma_cleanup(dev);
-	tasklet_disable(&dev->irq_tasklet);
-
-	mt76_free_device(&dev->mt76);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/pci_mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/pci_mac.c
deleted file mode 100644
index 0019890..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/pci_mac.c
+++ /dev/null
@@ -1,293 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc.
- *
- * Author: Ryder Lee <ryder.lee@mediatek.com>
- *         Roy Luo <royluo@google.com>
- *         Felix Fietkau <nbd@nbd.name>
- *         Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#include <linux/etherdevice.h>
-#include <linux/timekeeping.h>
-
-#include "mt7615.h"
-#include "../dma.h"
-#include "mac.h"
-
-static void
-mt7615_write_fw_txp(struct mt7615_dev *dev, struct mt76_tx_info *tx_info,
-		    void *txp_ptr, u32 id)
-{
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx_info->skb->data;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
-	struct ieee80211_key_conf *key = info->control.hw_key;
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt76_connac_fw_txp *txp = txp_ptr;
-	u8 *rept_wds_wcid = (u8 *)&txp->rept_wds_wcid;
-	int nbuf = tx_info->nbuf - 1;
-	int i;
-
-	for (i = 0; i < nbuf; i++) {
-		txp->buf[i] = cpu_to_le32(tx_info->buf[i + 1].addr);
-		txp->len[i] = cpu_to_le16(tx_info->buf[i + 1].len);
-	}
-	txp->nbuf = nbuf;
-
-	/* pass partial skb header to fw */
-	tx_info->buf[0].len = MT_TXD_SIZE + sizeof(*txp);
-	tx_info->buf[1].len = MT_CT_PARSE_LEN;
-	tx_info->buf[1].skip_unmap = true;
-	tx_info->nbuf = MT_CT_DMA_BUF_NUM;
-
-	txp->flags = cpu_to_le16(MT_CT_INFO_APPLY_TXD);
-
-	if (!key)
-		txp->flags |= cpu_to_le16(MT_CT_INFO_NONE_CIPHER_FRAME);
-
-	if (ieee80211_is_mgmt(hdr->frame_control))
-		txp->flags |= cpu_to_le16(MT_CT_INFO_MGMT_FRAME);
-
-	if (vif) {
-		struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-
-		txp->bss_idx = mvif->idx;
-	}
-
-	txp->token = cpu_to_le16(id);
-	*rept_wds_wcid = 0xff;
-}
-
-int mt7615_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-			  enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			  struct ieee80211_sta *sta,
-			  struct mt76_tx_info *tx_info)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
-	struct ieee80211_key_conf *key = info->control.hw_key;
-	int pid, id;
-	u8 *txwi = (u8 *)txwi_ptr;
-	struct mt76_txwi_cache *t;
-	struct mt7615_sta *msta;
-	void *txp;
-
-	msta = wcid ? container_of(wcid, struct mt7615_sta, wcid) : NULL;
-	if (!wcid)
-		wcid = &dev->mt76.global_wcid;
-
-	if ((info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE) && msta) {
-		struct mt7615_phy *phy = &dev->phy;
-		u8 phy_idx = (info->hw_queue & MT_TX_HW_QUEUE_PHY) >> 2;
-
-		if (phy_idx && mdev->phys[MT_BAND1])
-			phy = mdev->phys[MT_BAND1]->priv;
-
-		spin_lock_bh(&dev->mt76.lock);
-		mt7615_mac_set_rates(phy, msta, &info->control.rates[0],
-				     msta->rates);
-		spin_unlock_bh(&dev->mt76.lock);
-	}
-
-	t = (struct mt76_txwi_cache *)(txwi + mdev->drv->txwi_size);
-	t->skb = tx_info->skb;
-
-	id = mt76_token_get(mdev, &t);
-	if (id < 0)
-		return id;
-
-	pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
-	mt7615_mac_write_txwi(dev, txwi_ptr, tx_info->skb, wcid, sta,
-			      pid, key, qid, false);
-
-	txp = txwi + MT_TXD_SIZE;
-	memset(txp, 0, sizeof(struct mt76_connac_txp_common));
-	if (is_mt7615(&dev->mt76))
-		mt7615_write_fw_txp(dev, tx_info, txp, id);
-	else
-		mt76_connac_write_hw_txp(mdev, tx_info, txp, id);
-
-	tx_info->skb = DMA_DUMMY_DATA;
-
-	return 0;
-}
-
-void mt7615_dma_reset(struct mt7615_dev *dev)
-{
-	int i;
-
-	mt76_clear(dev, MT_WPDMA_GLO_CFG,
-		   MT_WPDMA_GLO_CFG_RX_DMA_EN | MT_WPDMA_GLO_CFG_TX_DMA_EN |
-		   MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE);
-
-	usleep_range(1000, 2000);
-
-	for (i = 0; i < __MT_TXQ_MAX; i++)
-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], true);
-
-	for (i = 0; i < __MT_MCUQ_MAX; i++)
-		mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[i], true);
-
-	mt76_for_each_q_rx(&dev->mt76, i)
-		mt76_queue_rx_reset(dev, i);
-
-	mt76_tx_status_check(&dev->mt76, true);
-
-	mt7615_dma_start(dev);
-}
-EXPORT_SYMBOL_GPL(mt7615_dma_reset);
-
-static void
-mt7615_hif_int_event_trigger(struct mt7615_dev *dev, u8 event)
-{
-	u32 reg = MT_MCU_INT_EVENT;
-
-	if (is_mt7663(&dev->mt76))
-		reg = MT7663_MCU_INT_EVENT;
-
-	mt76_wr(dev, reg, event);
-
-	mt7622_trigger_hif_int(dev, true);
-	mt7622_trigger_hif_int(dev, false);
-}
-
-static bool
-mt7615_wait_reset_state(struct mt7615_dev *dev, u32 state)
-{
-	bool ret;
-
-	ret = wait_event_timeout(dev->reset_wait,
-				 (READ_ONCE(dev->reset_state) & state),
-				 MT7615_RESET_TIMEOUT);
-	WARN(!ret, "Timeout waiting for MCU reset state %x\n", state);
-	return ret;
-}
-
-static void
-mt7615_update_vif_beacon(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	struct ieee80211_hw *hw = priv;
-	struct mt7615_dev *dev = mt7615_hw_dev(hw);
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_ADHOC:
-	case NL80211_IFTYPE_AP:
-		mt7615_mcu_add_beacon(dev, hw, vif,
-				      vif->bss_conf.enable_beacon);
-		break;
-	default:
-		break;
-	}
-}
-
-static void
-mt7615_update_beacons(struct mt7615_dev *dev)
-{
-	struct mt76_phy *mphy_ext = dev->mt76.phys[MT_BAND1];
-
-	ieee80211_iterate_active_interfaces(dev->mt76.hw,
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		mt7615_update_vif_beacon, dev->mt76.hw);
-
-	if (!mphy_ext)
-		return;
-
-	ieee80211_iterate_active_interfaces(mphy_ext->hw,
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		mt7615_update_vif_beacon, mphy_ext->hw);
-}
-
-void mt7615_mac_reset_work(struct work_struct *work)
-{
-	struct mt7615_phy *phy2;
-	struct mt76_phy *ext_phy;
-	struct mt7615_dev *dev;
-	unsigned long timeout;
-	int i;
-
-	dev = container_of(work, struct mt7615_dev, reset_work);
-	ext_phy = dev->mt76.phys[MT_BAND1];
-	phy2 = ext_phy ? ext_phy->priv : NULL;
-
-	if (!(READ_ONCE(dev->reset_state) & MT_MCU_CMD_STOP_PDMA))
-		return;
-
-	ieee80211_stop_queues(mt76_hw(dev));
-	if (ext_phy)
-		ieee80211_stop_queues(ext_phy->hw);
-
-	set_bit(MT76_RESET, &dev->mphy.state);
-	set_bit(MT76_MCU_RESET, &dev->mphy.state);
-	wake_up(&dev->mt76.mcu.wait);
-	cancel_delayed_work_sync(&dev->mphy.mac_work);
-	del_timer_sync(&dev->phy.roc_timer);
-	cancel_work_sync(&dev->phy.roc_work);
-	if (phy2) {
-		set_bit(MT76_RESET, &phy2->mt76->state);
-		cancel_delayed_work_sync(&phy2->mt76->mac_work);
-		del_timer_sync(&phy2->roc_timer);
-		cancel_work_sync(&phy2->roc_work);
-	}
-
-	/* lock/unlock all queues to ensure that no tx is pending */
-	mt76_txq_schedule_all(&dev->mphy);
-	if (ext_phy)
-		mt76_txq_schedule_all(ext_phy);
-
-	mt76_worker_disable(&dev->mt76.tx_worker);
-	mt76_for_each_q_rx(&dev->mt76, i)
-		napi_disable(&dev->mt76.napi[i]);
-	napi_disable(&dev->mt76.tx_napi);
-
-	mt7615_mutex_acquire(dev);
-
-	mt7615_hif_int_event_trigger(dev, MT_MCU_INT_EVENT_PDMA_STOPPED);
-
-	if (mt7615_wait_reset_state(dev, MT_MCU_CMD_RESET_DONE)) {
-		mt7615_dma_reset(dev);
-
-		mt7615_tx_token_put(dev);
-		idr_init(&dev->mt76.token);
-
-		mt76_wr(dev, MT_WPDMA_MEM_RNG_ERR, 0);
-
-		mt7615_hif_int_event_trigger(dev, MT_MCU_INT_EVENT_PDMA_INIT);
-		mt7615_wait_reset_state(dev, MT_MCU_CMD_RECOVERY_DONE);
-	}
-
-	clear_bit(MT76_MCU_RESET, &dev->mphy.state);
-	clear_bit(MT76_RESET, &dev->mphy.state);
-	if (phy2)
-		clear_bit(MT76_RESET, &phy2->mt76->state);
-
-	mt76_worker_enable(&dev->mt76.tx_worker);
-
-	local_bh_disable();
-	napi_enable(&dev->mt76.tx_napi);
-	napi_schedule(&dev->mt76.tx_napi);
-
-	mt76_for_each_q_rx(&dev->mt76, i) {
-		napi_enable(&dev->mt76.napi[i]);
-		napi_schedule(&dev->mt76.napi[i]);
-	}
-	local_bh_enable();
-
-	ieee80211_wake_queues(mt76_hw(dev));
-	if (ext_phy)
-		ieee80211_wake_queues(ext_phy->hw);
-
-	mt7615_hif_int_event_trigger(dev, MT_MCU_INT_EVENT_RESET_DONE);
-	mt7615_wait_reset_state(dev, MT_MCU_CMD_NORMAL_STATE);
-
-	mt7615_update_beacons(dev);
-
-	mt7615_mutex_release(dev);
-
-	timeout = mt7615_get_macwork_timeout(dev);
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mphy.mac_work,
-				     timeout);
-	if (phy2)
-		ieee80211_queue_delayed_work(ext_phy->hw,
-					     &phy2->mt76->mac_work, timeout);
-
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/regs.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/regs.h
deleted file mode 100644
index 6712ad9..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/regs.h
+++ /dev/null
@@ -1,609 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2019 MediaTek Inc. */
-
-#ifndef __MT7615_REGS_H
-#define __MT7615_REGS_H
-
-enum mt7615_reg_base {
-	MT_TOP_CFG_BASE,
-	MT_HW_BASE,
-	MT_DMA_SHDL_BASE,
-	MT_PCIE_REMAP_2,
-	MT_ARB_BASE,
-	MT_HIF_BASE,
-	MT_CSR_BASE,
-	MT_PLE_BASE,
-	MT_PSE_BASE,
-	MT_CFG_BASE,
-	MT_AGG_BASE,
-	MT_TMAC_BASE,
-	MT_RMAC_BASE,
-	MT_DMA_BASE,
-	MT_PF_BASE,
-	MT_WTBL_BASE_ON,
-	MT_WTBL_BASE_OFF,
-	MT_LPON_BASE,
-	MT_MIB_BASE,
-	MT_WTBL_BASE_ADDR,
-	MT_PCIE_REMAP_BASE2,
-	MT_TOP_MISC_BASE,
-	MT_EFUSE_ADDR_BASE,
-	MT_PP_BASE,
-	__MT_BASE_MAX,
-};
-
-#define MT_HW_INFO_BASE			((dev)->reg_map[MT_HW_BASE])
-#define MT_HW_INFO(ofs)			(MT_HW_INFO_BASE + (ofs))
-#define MT_HW_REV			MT_HW_INFO(0x000)
-#define MT_HW_CHIPID			MT_HW_INFO(0x008)
-#define MT_TOP_STRAP_STA		MT_HW_INFO(0x010)
-#define MT_TOP_3NSS			BIT(24)
-
-#define MT_TOP_OFF_RSV			0x1128
-#define MT_TOP_OFF_RSV_FW_STATE		GENMASK(18, 16)
-
-#define MT_TOP_MISC2			((dev)->reg_map[MT_TOP_CFG_BASE] + 0x134)
-#define MT_TOP_MISC2_FW_STATE		GENMASK(2, 0)
-
-#define MT7663_TOP_MISC2_FW_STATE	GENMASK(3, 1)
-#define MT_TOP_MISC2_FW_PWR_ON		BIT(1)
-
-#define MT_MCU_BASE			0x2000
-#define MT_MCU(ofs)			(MT_MCU_BASE + (ofs))
-
-#define MT_MCU_PCIE_REMAP_1		MT_MCU(0x500)
-#define MT_MCU_PCIE_REMAP_1_OFFSET	GENMASK(17, 0)
-#define MT_MCU_PCIE_REMAP_1_BASE	GENMASK(31, 18)
-#define MT_PCIE_REMAP_BASE_1		0x40000
-
-#define MT_MCU_PCIE_REMAP_2		((dev)->reg_map[MT_PCIE_REMAP_2])
-#define MT_MCU_PCIE_REMAP_2_OFFSET	GENMASK(18, 0)
-#define MT_MCU_PCIE_REMAP_2_BASE	GENMASK(31, 19)
-#define MT_PCIE_REMAP_BASE_2		((dev)->reg_map[MT_PCIE_REMAP_BASE2])
-
-#define MT_MCU_CIRQ_BASE		0xc0000
-#define MT_MCU_CIRQ(ofs)		(MT_MCU_CIRQ_BASE + (ofs))
-
-#define MT_MCU_CIRQ_IRQ_SEL(n)		MT_MCU_CIRQ((n) << 2)
-
-#define MT_HIF(ofs)			((dev)->reg_map[MT_HIF_BASE] + (ofs))
-#define MT_HIF_RST			MT_HIF(0x100)
-#define MT_HIF_LOGIC_RST_N		BIT(4)
-
-#define MT_PDMA_SLP_PROT		MT_HIF(0x154)
-#define MT_PDMA_AXI_SLPPROT_ENABLE	BIT(0)
-#define MT_PDMA_AXI_SLPPROT_RDY		BIT(16)
-
-#define MT_PDMA_BUSY_STATUS		MT_HIF(0x168)
-#define MT_PDMA_TX_IDX_BUSY		BIT(2)
-#define MT_PDMA_BUSY_IDX		BIT(31)
-
-#define MT_WPDMA_TX_RING0_CTRL0		MT_HIF(0x300)
-#define MT_WPDMA_TX_RING0_CTRL1		MT_HIF(0x304)
-
-#define MT7663_MCU_PCIE_REMAP_2_OFFSET	GENMASK(15, 0)
-#define MT7663_MCU_PCIE_REMAP_2_BASE	GENMASK(31, 16)
-
-#define MT_HIF2_BASE			0xf0000
-#define MT_HIF2(ofs)			(MT_HIF2_BASE + (ofs))
-#define MT_PCIE_IRQ_ENABLE		MT_HIF2(0x188)
-#define MT_PCIE_DOORBELL_PUSH		MT_HIF2(0x1484)
-
-#define MT_CFG_LPCR_HOST		MT_HIF(0x1f0)
-#define MT_CFG_LPCR_HOST_FW_OWN		BIT(0)
-#define MT_CFG_LPCR_HOST_DRV_OWN	BIT(1)
-
-#define MT_MCU2HOST_INT_STATUS		MT_HIF(0x1f0)
-#define MT_MCU2HOST_INT_ENABLE		MT_HIF(0x1f4)
-
-#define MT7663_MCU_INT_EVENT		MT_HIF(0x108)
-#define MT_MCU_INT_EVENT		MT_HIF(0x1f8)
-#define MT_MCU_INT_EVENT_PDMA_STOPPED	BIT(0)
-#define MT_MCU_INT_EVENT_PDMA_INIT	BIT(1)
-#define MT_MCU_INT_EVENT_SER_TRIGGER	BIT(2)
-#define MT_MCU_INT_EVENT_RESET_DONE	BIT(3)
-
-#define MT_INT_SOURCE_CSR		MT_HIF(0x200)
-#define MT_INT_MASK_CSR			MT_HIF(0x204)
-#define MT_DELAY_INT_CFG		MT_HIF(0x210)
-
-#define MT_INT_RX_DONE(_n)		BIT(_n)
-#define MT_INT_RX_DONE_ALL		GENMASK(1, 0)
-#define MT_INT_TX_DONE_ALL		GENMASK(19, 4)
-#define MT_INT_TX_DONE(_n)		BIT((_n) + 4)
-#define MT7663_INT_MCU_CMD		BIT(29)
-#define MT_INT_MCU_CMD			BIT(30)
-
-#define MT_WPDMA_GLO_CFG		MT_HIF(0x208)
-#define MT_WPDMA_GLO_CFG_TX_DMA_EN	BIT(0)
-#define MT_WPDMA_GLO_CFG_TX_DMA_BUSY	BIT(1)
-#define MT_WPDMA_GLO_CFG_RX_DMA_EN	BIT(2)
-#define MT_WPDMA_GLO_CFG_RX_DMA_BUSY	BIT(3)
-#define MT_WPDMA_GLO_CFG_DMA_BURST_SIZE	GENMASK(5, 4)
-#define MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE	BIT(6)
-#define MT_WPDMA_GLO_CFG_BIG_ENDIAN	BIT(7)
-#define MT_WPDMA_GLO_CFG_TX_BT_SIZE_BIT0	BIT(9)
-#define MT_WPDMA_GLO_CFG_BYPASS_TX_SCH		BIT(9) /* MT7622 */
-#define MT_WPDMA_GLO_CFG_MULTI_DMA_EN	GENMASK(11, 10)
-#define MT_WPDMA_GLO_CFG_FIFO_LITTLE_ENDIAN	BIT(12)
-#define MT_WPDMA_GLO_CFG_TX_BT_SIZE_BIT21	GENMASK(23, 22)
-#define MT_WPDMA_GLO_CFG_SW_RESET	BIT(24)
-#define MT_WPDMA_GLO_CFG_FIRST_TOKEN_ONLY	BIT(26)
-#define MT_WPDMA_GLO_CFG_OMIT_TX_INFO	BIT(28)
-
-#define MT_WPDMA_RST_IDX		MT_HIF(0x20c)
-
-#define MT_WPDMA_MEM_RNG_ERR		MT_HIF(0x224)
-
-#define MT_MCU_CMD			MT_HIF(0x234)
-#define MT_MCU_CMD_CLEAR_FW_OWN		BIT(0)
-#define MT_MCU_CMD_STOP_PDMA_FW_RELOAD	BIT(1)
-#define MT_MCU_CMD_STOP_PDMA		BIT(2)
-#define MT_MCU_CMD_RESET_DONE		BIT(3)
-#define MT_MCU_CMD_RECOVERY_DONE	BIT(4)
-#define MT_MCU_CMD_NORMAL_STATE		BIT(5)
-#define MT_MCU_CMD_LMAC_ERROR		BIT(24)
-#define MT_MCU_CMD_PSE_ERROR		BIT(25)
-#define MT_MCU_CMD_PLE_ERROR		BIT(26)
-#define MT_MCU_CMD_PDMA_ERROR		BIT(27)
-#define MT_MCU_CMD_PCIE_ERROR		BIT(28)
-#define MT_MCU_CMD_ERROR_MASK		(GENMASK(5, 1) | GENMASK(28, 24))
-#define MT7663_MCU_CMD_ERROR_MASK	GENMASK(5, 2)
-
-#define MT_TX_RING_BASE			MT_HIF(0x300)
-#define MT_RX_RING_BASE			MT_HIF(0x400)
-
-#define MT_WPDMA_GLO_CFG1		MT_HIF(0x500)
-#define MT_WPDMA_TX_PRE_CFG		MT_HIF(0x510)
-#define MT_WPDMA_RX_PRE_CFG		MT_HIF(0x520)
-#define MT_WPDMA_ABT_CFG		MT_HIF(0x530)
-#define MT_WPDMA_ABT_CFG1		MT_HIF(0x534)
-
-#define MT_CSR(ofs)			((dev)->reg_map[MT_CSR_BASE] + (ofs))
-#define MT_CONN_HIF_ON_LPCTL		MT_CSR(0x000)
-
-#define MT_PLE(ofs)			((dev)->reg_map[MT_PLE_BASE] + (ofs))
-
-#define MT_PLE_PG_HIF0_GROUP		MT_PLE(0x110)
-#define MT_HIF0_MIN_QUOTA		GENMASK(11, 0)
-#define MT_PLE_FL_Q0_CTRL		MT_PLE(0x1b0)
-#define MT_PLE_FL_Q1_CTRL		MT_PLE(0x1b4)
-#define MT_PLE_FL_Q2_CTRL		MT_PLE(0x1b8)
-#define MT_PLE_FL_Q3_CTRL		MT_PLE(0x1bc)
-
-#define MT_PLE_AC_QEMPTY(ac, n)		MT_PLE(0x300 + 0x10 * (ac) + \
-					       ((n) << 2))
-
-#define MT_PSE(ofs)			((dev)->reg_map[MT_PSE_BASE] + (ofs))
-#define MT_PSE_PG_HIF0_GROUP		MT_PSE(0x110)
-#define MT_HIF0_MIN_QUOTA		GENMASK(11, 0)
-#define MT_PSE_PG_HIF1_GROUP		MT_PSE(0x118)
-#define MT_HIF1_MIN_QUOTA		GENMASK(11, 0)
-#define MT_PSE_QUEUE_EMPTY		MT_PSE(0x0b4)
-#define MT_HIF_0_EMPTY_MASK		BIT(16)
-#define MT_HIF_1_EMPTY_MASK		BIT(17)
-#define MT_HIF_ALL_EMPTY_MASK		GENMASK(17, 16)
-#define MT_PSE_PG_INFO			MT_PSE(0x194)
-#define MT_PSE_SRC_CNT			GENMASK(27, 16)
-
-#define MT_PP(ofs)			((dev)->reg_map[MT_PP_BASE] + (ofs))
-#define MT_PP_TXDWCNT			MT_PP(0x0)
-#define MT_PP_TXDWCNT_TX0_ADD_DW_CNT	GENMASK(7, 0)
-#define MT_PP_TXDWCNT_TX1_ADD_DW_CNT	GENMASK(15, 8)
-
-#define MT_WF_PHY_BASE			0x82070000
-#define MT_WF_PHY(ofs)			(MT_WF_PHY_BASE + (ofs))
-
-#define MT_WF_PHY_WF2_RFCTRL0(n)	MT_WF_PHY(0x1900 + (n) * 0x400)
-#define MT_WF_PHY_WF2_RFCTRL0_LPBCN_EN	BIT(9)
-
-#define MT_WF_PHY_R0_PHYMUX_5(_phy)	MT_WF_PHY(0x0614 + ((_phy) << 9))
-#define MT7663_WF_PHY_R0_PHYMUX_5	MT_WF_PHY(0x0414)
-
-#define MT_WF_PHY_R0_PHYCTRL_STS0(_phy)	MT_WF_PHY(0x020c + ((_phy) << 9))
-#define MT_WF_PHYCTRL_STAT_PD_OFDM	GENMASK(31, 16)
-#define MT_WF_PHYCTRL_STAT_PD_CCK	GENMASK(15, 0)
-
-#define MT7663_WF_PHY_R0_PHYCTRL_STS0(_phy)	MT_WF_PHY(0x0210 + ((_phy) << 12))
-
-#define MT_WF_PHY_R0_PHYCTRL_STS5(_phy)	MT_WF_PHY(0x0220 + ((_phy) << 9))
-#define MT_WF_PHYCTRL_STAT_MDRDY_OFDM	GENMASK(31, 16)
-#define MT_WF_PHYCTRL_STAT_MDRDY_CCK	GENMASK(15, 0)
-
-#define MT7663_WF_PHY_R0_PHYCTRL_STS5(_phy)	MT_WF_PHY(0x0224 + ((_phy) << 12))
-
-#define MT_WF_PHY_MIN_PRI_PWR(_phy)	MT_WF_PHY((_phy) ? 0x084 : 0x229c)
-#define MT_WF_PHY_PD_OFDM_MASK(_phy)	((_phy) ? GENMASK(24, 16) : \
-					 GENMASK(28, 20))
-#define MT_WF_PHY_PD_OFDM(_phy, v)	((v) << ((_phy) ? 16 : 20))
-#define MT_WF_PHY_PD_BLK(_phy)		((_phy) ? BIT(25) : BIT(19))
-
-#define MT7663_WF_PHY_MIN_PRI_PWR(_phy)	MT_WF_PHY((_phy) ? 0x2aec : 0x22f0)
-
-#define MT_WF_PHY_RXTD_BASE		MT_WF_PHY(0x2200)
-#define MT_WF_PHY_RXTD(_n)		(MT_WF_PHY_RXTD_BASE + ((_n) << 2))
-
-#define MT7663_WF_PHY_RXTD(_n)		(MT_WF_PHY(0x25b0) + ((_n) << 2))
-
-#define MT_WF_PHY_RXTD_CCK_PD(_phy)	MT_WF_PHY((_phy) ? 0x2314 : 0x2310)
-#define MT_WF_PHY_PD_CCK_MASK(_phy)	(_phy) ? GENMASK(31, 24) : \
-					 GENMASK(8, 1)
-#define MT_WF_PHY_PD_CCK(_phy, v)	((v) << ((_phy) ? 24 : 1))
-
-#define MT7663_WF_PHY_RXTD_CCK_PD(_phy)	MT_WF_PHY((_phy) ? 0x2350 : 0x234c)
-
-#define MT_WF_PHY_RXTD2_BASE		MT_WF_PHY(0x2a00)
-#define MT_WF_PHY_RXTD2(_n)		(MT_WF_PHY_RXTD2_BASE + ((_n) << 2))
-
-#define MT_WF_PHY_RFINTF3_0(_n)		MT_WF_PHY(0x1100 + (_n) * 0x400)
-#define MT_WF_PHY_RFINTF3_0_ANT		GENMASK(7, 4)
-
-#define MT_WF_CFG_BASE			((dev)->reg_map[MT_CFG_BASE])
-#define MT_WF_CFG(ofs)			(MT_WF_CFG_BASE + (ofs))
-
-#define MT_CFG_CCR			MT_WF_CFG(0x000)
-#define MT_CFG_CCR_MAC_D1_1X_GC_EN	BIT(24)
-#define MT_CFG_CCR_MAC_D0_1X_GC_EN	BIT(25)
-#define MT_CFG_CCR_MAC_D1_2X_GC_EN	BIT(30)
-#define MT_CFG_CCR_MAC_D0_2X_GC_EN	BIT(31)
-
-#define MT_WF_AGG_BASE			((dev)->reg_map[MT_AGG_BASE])
-#define MT_WF_AGG(ofs)			(MT_WF_AGG_BASE + (ofs))
-
-#define MT_AGG_ARCR			MT_WF_AGG(0x010)
-#define MT_AGG_ARCR_INIT_RATE1		BIT(0)
-#define MT_AGG_ARCR_RTS_RATE_THR	GENMASK(12, 8)
-#define MT_AGG_ARCR_RATE_DOWN_RATIO	GENMASK(17, 16)
-#define MT_AGG_ARCR_RATE_DOWN_RATIO_EN	BIT(19)
-#define MT_AGG_ARCR_RATE_UP_EXTRA_TH	GENMASK(22, 20)
-
-#define MT_AGG_ARUCR(_band)		MT_WF_AGG(0x018 + (_band) * 0x100)
-#define MT_AGG_ARDCR(_band)		MT_WF_AGG(0x01c + (_band) * 0x100)
-#define MT_AGG_ARxCR_LIMIT_SHIFT(_n)	(4 * (_n))
-#define MT_AGG_ARxCR_LIMIT(_n)		GENMASK(2 + \
-					MT_AGG_ARxCR_LIMIT_SHIFT(_n), \
-					MT_AGG_ARxCR_LIMIT_SHIFT(_n))
-
-#define MT_AGG_ASRCR0			MT_WF_AGG(0x060)
-#define MT_AGG_ASRCR1			MT_WF_AGG(0x064)
-#define MT_AGG_ASRCR_RANGE(val, n)	(((val) >> ((n) << 3)) & GENMASK(5, 0))
-
-#define MT_AGG_ACR(_band)		MT_WF_AGG(0x070 + (_band) * 0x100)
-#define MT_AGG_ACR_NO_BA_RULE		BIT(0)
-#define MT_AGG_ACR_NO_BA_AR_RULE	BIT(1)
-#define MT_AGG_ACR_PKT_TIME_EN		BIT(2)
-#define MT_AGG_ACR_CFEND_RATE		GENMASK(15, 4)
-#define MT_AGG_ACR_BAR_RATE		GENMASK(31, 20)
-
-#define MT_AGG_SCR			MT_WF_AGG(0x0fc)
-#define MT_AGG_SCR_NLNAV_MID_PTEC_DIS	BIT(3)
-
-#define MT_WF_ARB_BASE			((dev)->reg_map[MT_ARB_BASE])
-#define MT_WF_ARB(ofs)			(MT_WF_ARB_BASE + (ofs))
-
-#define MT_ARB_RQCR			MT_WF_ARB(0x070)
-#define MT_ARB_RQCR_RX_START		BIT(0)
-#define MT_ARB_RQCR_RXV_START		BIT(4)
-#define MT_ARB_RQCR_RXV_R_EN		BIT(7)
-#define MT_ARB_RQCR_RXV_T_EN		BIT(8)
-#define MT_ARB_RQCR_BAND_SHIFT		16
-
-#define MT_ARB_SCR			MT_WF_ARB(0x080)
-#define MT_ARB_SCR_TX0_DISABLE		BIT(8)
-#define MT_ARB_SCR_RX0_DISABLE		BIT(9)
-#define MT_ARB_SCR_TX1_DISABLE		BIT(10)
-#define MT_ARB_SCR_RX1_DISABLE		BIT(11)
-
-#define MT_WF_TMAC_BASE			((dev)->reg_map[MT_TMAC_BASE])
-#define MT_WF_TMAC(ofs)			(MT_WF_TMAC_BASE + (ofs))
-
-#define MT_TMAC_CDTR			MT_WF_TMAC(0x090)
-#define MT_TMAC_ODTR			MT_WF_TMAC(0x094)
-#define MT_TIMEOUT_VAL_PLCP		GENMASK(15, 0)
-#define MT_TIMEOUT_VAL_CCA		GENMASK(31, 16)
-
-#define MT_TMAC_TRCR(_band)		MT_WF_TMAC((_band) ? 0x070 : 0x09c)
-#define MT_TMAC_TRCR_CCA_SEL		GENMASK(31, 30)
-#define MT_TMAC_TRCR_SEC_CCA_SEL	GENMASK(29, 28)
-
-#define MT_TMAC_ICR(_band)		MT_WF_TMAC((_band) ? 0x074 : 0x0a4)
-#define MT_IFS_EIFS			GENMASK(8, 0)
-#define MT_IFS_RIFS			GENMASK(14, 10)
-#define MT_IFS_SIFS			GENMASK(22, 16)
-#define MT_IFS_SLOT			GENMASK(30, 24)
-
-#define MT_TMAC_CTCR0			MT_WF_TMAC(0x0f4)
-#define MT_TMAC_CTCR0_INS_DDLMT_REFTIME	GENMASK(5, 0)
-#define MT_TMAC_CTCR0_INS_DDLMT_DENSITY	GENMASK(15, 12)
-#define MT_TMAC_CTCR0_INS_DDLMT_EN	BIT(17)
-#define MT_TMAC_CTCR0_INS_DDLMT_VHT_SMPDU_EN	BIT(18)
-
-#define MT_WF_RMAC_BASE			((dev)->reg_map[MT_RMAC_BASE])
-#define MT_WF_RMAC(ofs)			(MT_WF_RMAC_BASE + (ofs))
-
-#define MT_WF_RFCR(_band)		MT_WF_RMAC((_band) ? 0x100 : 0x000)
-#define MT_WF_RFCR_DROP_STBC_MULTI	BIT(0)
-#define MT_WF_RFCR_DROP_FCSFAIL		BIT(1)
-#define MT_WF_RFCR_DROP_VERSION		BIT(3)
-#define MT_WF_RFCR_DROP_PROBEREQ	BIT(4)
-#define MT_WF_RFCR_DROP_MCAST		BIT(5)
-#define MT_WF_RFCR_DROP_BCAST		BIT(6)
-#define MT_WF_RFCR_DROP_MCAST_FILTERED	BIT(7)
-#define MT_WF_RFCR_DROP_A3_MAC		BIT(8)
-#define MT_WF_RFCR_DROP_A3_BSSID	BIT(9)
-#define MT_WF_RFCR_DROP_A2_BSSID	BIT(10)
-#define MT_WF_RFCR_DROP_OTHER_BEACON	BIT(11)
-#define MT_WF_RFCR_DROP_FRAME_REPORT	BIT(12)
-#define MT_WF_RFCR_DROP_CTL_RSV		BIT(13)
-#define MT_WF_RFCR_DROP_CTS		BIT(14)
-#define MT_WF_RFCR_DROP_RTS		BIT(15)
-#define MT_WF_RFCR_DROP_DUPLICATE	BIT(16)
-#define MT_WF_RFCR_DROP_OTHER_BSS	BIT(17)
-#define MT_WF_RFCR_DROP_OTHER_UC	BIT(18)
-#define MT_WF_RFCR_DROP_OTHER_TIM	BIT(19)
-#define MT_WF_RFCR_DROP_NDPA		BIT(20)
-#define MT_WF_RFCR_DROP_UNWANTED_CTL	BIT(21)
-
-#define MT_WF_RMAC_MORE(_band)		MT_WF_RMAC((_band) ? 0x124 : 0x024)
-#define MT_WF_RMAC_MORE_MUAR_MODE	GENMASK(31, 30)
-
-#define MT_WF_RFCR1(_band)		MT_WF_RMAC((_band) ? 0x104 : 0x004)
-#define MT_WF_RFCR1_DROP_ACK		BIT(4)
-#define MT_WF_RFCR1_DROP_BF_POLL	BIT(5)
-#define MT_WF_RFCR1_DROP_BA		BIT(6)
-#define MT_WF_RFCR1_DROP_CFEND		BIT(7)
-#define MT_WF_RFCR1_DROP_CFACK		BIT(8)
-
-#define MT_CHFREQ(_band)		MT_WF_RMAC((_band) ? 0x130 : 0x030)
-
-#define MT_WF_RMAC_MAR0			MT_WF_RMAC(0x025c)
-#define MT_WF_RMAC_MAR1			MT_WF_RMAC(0x0260)
-#define MT_WF_RMAC_MAR1_ADDR		GENMASK(15, 0)
-#define MT_WF_RMAC_MAR1_START		BIT(16)
-#define MT_WF_RMAC_MAR1_WRITE		BIT(17)
-#define MT_WF_RMAC_MAR1_IDX		GENMASK(29, 24)
-#define MT_WF_RMAC_MAR1_GROUP		GENMASK(31, 30)
-
-#define MT_WF_RMAC_MIB_TIME0		MT_WF_RMAC(0x03c4)
-#define MT_WF_RMAC_MIB_RXTIME_CLR	BIT(31)
-#define MT_WF_RMAC_MIB_RXTIME_EN	BIT(30)
-
-#define MT_WF_RMAC_MIB_AIRTIME0		MT_WF_RMAC(0x0380)
-
-#define MT_WF_RMAC_MIB_TIME5		MT_WF_RMAC(0x03d8)
-#define MT_WF_RMAC_MIB_TIME6		MT_WF_RMAC(0x03dc)
-#define MT_MIB_OBSSTIME_MASK		GENMASK(23, 0)
-
-#define MT_WF_DMA_BASE			((dev)->reg_map[MT_DMA_BASE])
-#define MT_WF_DMA(ofs)			(MT_WF_DMA_BASE + (ofs))
-
-#define MT_DMA_DCR0			MT_WF_DMA(0x000)
-#define MT_DMA_DCR0_MAX_RX_LEN		GENMASK(15, 2)
-#define MT_DMA_DCR0_DAMSDU_EN		BIT(16)
-#define MT_DMA_DCR0_RX_VEC_DROP		BIT(17)
-#define MT_DMA_DCR0_RX_HDR_TRANS_EN	BIT(19)
-
-#define MT_DMA_RCFR0(_band)		MT_WF_DMA(0x070 + (_band) * 0x40)
-#define MT_DMA_RCFR0_MCU_RX_MGMT	BIT(2)
-#define MT_DMA_RCFR0_MCU_RX_CTL_NON_BAR	BIT(3)
-#define MT_DMA_RCFR0_MCU_RX_CTL_BAR	BIT(4)
-#define MT_DMA_RCFR0_MCU_RX_TDLS	BIT(19)
-#define MT_DMA_RCFR0_MCU_RX_BYPASS	BIT(21)
-#define MT_DMA_RCFR0_RX_DROPPED_UCAST	GENMASK(25, 24)
-#define MT_DMA_RCFR0_RX_DROPPED_MCAST	GENMASK(27, 26)
-
-#define MT_WF_PF_BASE			((dev)->reg_map[MT_PF_BASE])
-#define MT_WF_PF(ofs)			(MT_WF_PF_BASE + (ofs))
-
-#define MT_WF_PFCR			MT_WF_PF(0x000)
-#define MT_WF_PFCR_TDLS_EN		BIT(9)
-
-#define MT_WTBL_BASE(dev)		((dev)->reg_map[MT_WTBL_BASE_ADDR])
-#define MT_WTBL_ENTRY_SIZE		256
-
-#define MT_WTBL_OFF_BASE		((dev)->reg_map[MT_WTBL_BASE_OFF])
-#define MT_WTBL_OFF(n)			(MT_WTBL_OFF_BASE + (n))
-
-#define MT_WTBL_W0_KEY_IDX		GENMASK(24, 23)
-#define MT_WTBL_W0_RX_KEY_VALID		BIT(26)
-#define MT_WTBL_W0_RX_IK_VALID		BIT(27)
-
-#define MT_WTBL_W2_KEY_TYPE		GENMASK(7, 4)
-
-#define MT_WTBL_UPDATE			MT_WTBL_OFF(0x030)
-#define MT_WTBL_UPDATE_WLAN_IDX		GENMASK(7, 0)
-#define MT_WTBL_UPDATE_RXINFO_UPDATE	BIT(11)
-#define MT_WTBL_UPDATE_ADM_COUNT_CLEAR	BIT(12)
-#define MT_WTBL_UPDATE_RATE_UPDATE	BIT(13)
-#define MT_WTBL_UPDATE_TX_COUNT_CLEAR	BIT(14)
-#define MT_WTBL_UPDATE_BUSY		BIT(31)
-
-#define MT_TOP_MISC(ofs)		((dev)->reg_map[MT_TOP_MISC_BASE] + (ofs))
-#define MT_CONN_ON_MISC			MT_TOP_MISC(0x1140)
-#define MT_TOP_MISC2_FW_N9_RDY		BIT(2)
-
-#define MT_WTBL_ON_BASE			((dev)->reg_map[MT_WTBL_BASE_ON])
-#define MT_WTBL_ON(_n)			(MT_WTBL_ON_BASE + (_n))
-
-#define MT_WTBL_RICR0			MT_WTBL_ON(0x010)
-#define MT_WTBL_RICR1			MT_WTBL_ON(0x014)
-
-#define MT_WTBL_RIUCR0			MT_WTBL_ON(0x020)
-
-#define MT_WTBL_RIUCR1			MT_WTBL_ON(0x024)
-#define MT_WTBL_RIUCR1_RATE0		GENMASK(11, 0)
-#define MT_WTBL_RIUCR1_RATE1		GENMASK(23, 12)
-#define MT_WTBL_RIUCR1_RATE2_LO		GENMASK(31, 24)
-
-#define MT_WTBL_RIUCR2			MT_WTBL_ON(0x028)
-#define MT_WTBL_RIUCR2_RATE2_HI		GENMASK(3, 0)
-#define MT_WTBL_RIUCR2_RATE3		GENMASK(15, 4)
-#define MT_WTBL_RIUCR2_RATE4		GENMASK(27, 16)
-#define MT_WTBL_RIUCR2_RATE5_LO		GENMASK(31, 28)
-
-#define MT_WTBL_RIUCR3			MT_WTBL_ON(0x02c)
-#define MT_WTBL_RIUCR3_RATE5_HI		GENMASK(7, 0)
-#define MT_WTBL_RIUCR3_RATE6		GENMASK(19, 8)
-#define MT_WTBL_RIUCR3_RATE7		GENMASK(31, 20)
-
-#define MT_WTBL_W5_CHANGE_BW_RATE	GENMASK(7, 5)
-#define MT_WTBL_W5_SHORT_GI_20		BIT(8)
-#define MT_WTBL_W5_SHORT_GI_40		BIT(9)
-#define MT_WTBL_W5_SHORT_GI_80		BIT(10)
-#define MT_WTBL_W5_SHORT_GI_160		BIT(11)
-#define MT_WTBL_W5_BW_CAP		GENMASK(13, 12)
-#define MT_WTBL_W5_MPDU_FAIL_COUNT	GENMASK(25, 23)
-#define MT_WTBL_W5_MPDU_OK_COUNT	GENMASK(28, 26)
-#define MT_WTBL_W5_RATE_IDX		GENMASK(31, 29)
-
-#define MT_WTBL_W27_CC_BW_SEL		GENMASK(6, 5)
-
-#define MT_LPON(_n)			((dev)->reg_map[MT_LPON_BASE] + (_n))
-
-#define MT_LPON_TCR0(_n)		MT_LPON(0x010 + ((_n) * 4))
-#define MT_LPON_TCR2(_n)		MT_LPON(0x0f8 + ((_n) - 2) * 4)
-#define MT_LPON_TCR_MODE		GENMASK(1, 0)
-#define MT_LPON_TCR_READ		GENMASK(1, 0)
-#define MT_LPON_TCR_WRITE		BIT(0)
-#define MT_LPON_TCR_ADJUST		BIT(1)
-
-#define MT_LPON_UTTR0			MT_LPON(0x018)
-#define MT_LPON_UTTR1			MT_LPON(0x01c)
-
-#define MT_WF_MIB_BASE			(dev->reg_map[MT_MIB_BASE])
-#define MT_WF_MIB(_band, ofs)		(MT_WF_MIB_BASE + (ofs) + (_band) * 0x200)
-
-#define MT_WF_MIB_SCR0			MT_WF_MIB(0, 0)
-#define MT_MIB_SCR0_AGG_CNT_RANGE_EN	BIT(21)
-
-#define MT_MIB_M0_MISC_CR(_band)	MT_WF_MIB(_band, 0x00c)
-
-#define MT_MIB_SDR3(_band)		MT_WF_MIB(_band, 0x014)
-#define MT_MIB_SDR3_FCS_ERR_MASK	GENMASK(15, 0)
-
-#define MT_MIB_SDR9(_band)		MT_WF_MIB(_band, 0x02c)
-#define MT_MIB_SDR9_BUSY_MASK		GENMASK(23, 0)
-
-#define MT_MIB_SDR14(_band)		MT_WF_MIB(_band, 0x040)
-#define MT_MIB_AMPDU_MPDU_COUNT		GENMASK(23, 0)
-
-#define MT_MIB_SDR15(_band)		MT_WF_MIB(_band, 0x044)
-#define MT_MIB_AMPDU_ACK_COUNT		GENMASK(23, 0)
-
-#define MT_MIB_SDR16(_band)		MT_WF_MIB(_band, 0x048)
-#define MT_MIB_SDR16_BUSY_MASK		GENMASK(23, 0)
-
-#define MT_MIB_SDR36(_band)		MT_WF_MIB(_band, 0x098)
-#define MT_MIB_SDR36_TXTIME_MASK	GENMASK(23, 0)
-#define MT_MIB_SDR37(_band)		MT_WF_MIB(_band, 0x09c)
-#define MT_MIB_SDR37_RXTIME_MASK	GENMASK(23, 0)
-
-#define MT_MIB_MB_SDR0(_band, n)	MT_WF_MIB(_band, 0x100 + ((n) << 4))
-#define MT_MIB_RTS_RETRIES_COUNT_MASK	GENMASK(31, 16)
-#define MT_MIB_RTS_COUNT_MASK		GENMASK(15, 0)
-
-#define MT_MIB_MB_SDR1(_band, n)	MT_WF_MIB(_band, 0x104 + ((n) << 4))
-#define MT_MIB_BA_MISS_COUNT_MASK	GENMASK(15, 0)
-#define MT_MIB_ACK_FAIL_COUNT_MASK	GENMASK(31, 16)
-
-#define MT_MIB_ARNG(n)			MT_WF_MIB(0, 0x4b8 + ((n) << 2))
-
-#define MT_TX_AGG_CNT(_band, n)		MT_WF_MIB(_band, 0xa8 + ((n) << 2))
-
-#define MT_DMA_SHDL(ofs)		(dev->reg_map[MT_DMA_SHDL_BASE] + (ofs))
-
-#define MT_DMASHDL_BASE			0x5000a000
-#define MT_DMASHDL_OPTIONAL		0x008
-#define MT_DMASHDL_PAGE			0x00c
-
-#define MT_DMASHDL_REFILL		0x010
-
-#define MT_DMASHDL_PKT_MAX_SIZE		0x01c
-#define MT_DMASHDL_PKT_MAX_SIZE_PLE	GENMASK(11, 0)
-#define MT_DMASHDL_PKT_MAX_SIZE_PSE	GENMASK(27, 16)
-
-#define MT_DMASHDL_GROUP_QUOTA(_n)	(0x020 + ((_n) << 2))
-#define MT_DMASHDL_GROUP_QUOTA_MIN	GENMASK(11, 0)
-#define MT_DMASHDL_GROUP_QUOTA_MAX	GENMASK(27, 16)
-
-#define MT_DMASHDL_SCHED_SET0		0x0b0
-#define MT_DMASHDL_SCHED_SET1		0x0b4
-
-#define MT_DMASHDL_Q_MAP(_n)		(0x0d0 + ((_n) << 2))
-#define MT_DMASHDL_Q_MAP_MASK		GENMASK(3, 0)
-#define MT_DMASHDL_Q_MAP_SHIFT(_n)	(4 * ((_n) % 8))
-
-#define MT_LED_BASE_PHYS		0x80024000
-#define MT_LED_PHYS(_n)			(MT_LED_BASE_PHYS + (_n))
-
-#define MT_LED_CTRL			MT_LED_PHYS(0x00)
-
-#define MT_LED_CTRL_REPLAY(_n)		BIT(0 + (8 * (_n)))
-#define MT_LED_CTRL_POLARITY(_n)	BIT(1 + (8 * (_n)))
-#define MT_LED_CTRL_TX_BLINK_MODE(_n)	BIT(2 + (8 * (_n)))
-#define MT_LED_CTRL_TX_MANUAL_BLINK(_n)	BIT(3 + (8 * (_n)))
-#define MT_LED_CTRL_TX_OVER_BLINK(_n)	BIT(5 + (8 * (_n)))
-#define MT_LED_CTRL_KICK(_n)		BIT(7 + (8 * (_n)))
-
-#define MT_LED_STATUS_0(_n)		MT_LED_PHYS(0x10 + ((_n) * 8))
-#define MT_LED_STATUS_1(_n)		MT_LED_PHYS(0x14 + ((_n) * 8))
-#define MT_LED_STATUS_OFF		GENMASK(31, 24)
-#define MT_LED_STATUS_ON		GENMASK(23, 16)
-#define MT_LED_STATUS_DURATION		GENMASK(15, 0)
-
-#define MT_PDMA_BUSY			0x82000504
-#define MT_PDMA_TX_BUSY			BIT(0)
-#define MT_PDMA_RX_BUSY			BIT(1)
-
-#define MT_EFUSE_BASE			((dev)->reg_map[MT_EFUSE_ADDR_BASE])
-#define MT_EFUSE_BASE_CTRL		0x000
-#define MT_EFUSE_BASE_CTRL_EMPTY	BIT(30)
-
-#define MT_EFUSE_CTRL			0x008
-#define MT_EFUSE_CTRL_AOUT		GENMASK(5, 0)
-#define MT_EFUSE_CTRL_MODE		GENMASK(7, 6)
-#define MT_EFUSE_CTRL_LDO_OFF_TIME	GENMASK(13, 8)
-#define MT_EFUSE_CTRL_LDO_ON_TIME	GENMASK(15, 14)
-#define MT_EFUSE_CTRL_AIN		GENMASK(25, 16)
-#define MT_EFUSE_CTRL_VALID		BIT(29)
-#define MT_EFUSE_CTRL_KICK		BIT(30)
-#define MT_EFUSE_CTRL_SEL		BIT(31)
-
-#define MT_EFUSE_WDATA(_i)		(0x010 + ((_i) * 4))
-#define MT_EFUSE_RDATA(_i)		(0x030 + ((_i) * 4))
-
-/* INFRACFG host register range on MT7622 */
-#define MT_INFRACFG_MISC		0x700
-#define MT_INFRACFG_MISC_AP2CONN_WAKE	BIT(1)
-
-#define MT_UMAC_BASE			0x7c000000
-#define MT_UMAC(ofs)			(MT_UMAC_BASE + (ofs))
-#define MT_UDMA_TX_QSEL			MT_UMAC(0x008)
-#define MT_FW_DL_EN			BIT(3)
-
-#define MT_UDMA_WLCFG_1			MT_UMAC(0x00c)
-#define MT_WL_RX_AGG_PKT_LMT		GENMASK(7, 0)
-#define MT_WL_TX_TMOUT_LMT		GENMASK(27, 8)
-
-#define MT_UDMA_WLCFG_0			MT_UMAC(0x18)
-#define MT_WL_RX_AGG_TO			GENMASK(7, 0)
-#define MT_WL_RX_AGG_LMT		GENMASK(15, 8)
-#define MT_WL_TX_TMOUT_FUNC_EN		BIT(16)
-#define MT_WL_TX_DPH_CHK_EN		BIT(17)
-#define MT_WL_RX_MPSZ_PAD0		BIT(18)
-#define MT_WL_RX_FLUSH			BIT(19)
-#define MT_TICK_1US_EN			BIT(20)
-#define MT_WL_RX_AGG_EN			BIT(21)
-#define MT_WL_RX_EN			BIT(22)
-#define MT_WL_TX_EN			BIT(23)
-#define MT_WL_RX_BUSY			BIT(30)
-#define MT_WL_TX_BUSY			BIT(31)
-
-#define MT_MCU_PTA_BASE			0x81060000
-#define MT_MCU_PTA(_n)			(MT_MCU_PTA_BASE + (_n))
-
-#define MT_ANT_SWITCH_CON(_n)		MT_MCU_PTA(0x0c8 + ((_n) - 1) * 4)
-#define MT_ANT_SWITCH_CON_MODE(_n)	(GENMASK(4, 0) << (_n * 8))
-#define MT_ANT_SWITCH_CON_MODE1(_n)	(GENMASK(3, 0) << (_n * 8))
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/sdio.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/sdio.c
deleted file mode 100644
index 8fd4abc..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/sdio.c
+++ /dev/null
@@ -1,266 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc.
- *
- * Author: Felix Fietkau <nbd@nbd.name>
- *	   Lorenzo Bianconi <lorenzo@kernel.org>
- *	   Sean Wang <sean.wang@mediatek.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/iopoll.h>
-#include <linux/module.h>
-
-#include <linux/mmc/host.h>
-#include <linux/mmc/sdio_ids.h>
-#include <linux/mmc/sdio_func.h>
-
-#include "../sdio.h"
-#include "mt7615.h"
-#include "mac.h"
-#include "mcu.h"
-
-static const struct sdio_device_id mt7663s_table[] = {
-	{ SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, 0x7603) },
-	{ }	/* Terminating entry */
-};
-
-static void mt7663s_txrx_worker(struct mt76_worker *w)
-{
-	struct mt76_sdio *sdio = container_of(w, struct mt76_sdio,
-					      txrx_worker);
-	struct mt76_dev *mdev = container_of(sdio, struct mt76_dev, sdio);
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-
-	if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) {
-		queue_work(mdev->wq, &dev->pm.wake_work);
-		return;
-	}
-	mt76s_txrx_worker(sdio);
-	mt76_connac_pm_unref(&dev->mphy, &dev->pm);
-}
-
-static void mt7663s_init_work(struct work_struct *work)
-{
-	struct mt7615_dev *dev;
-
-	dev = container_of(work, struct mt7615_dev, mcu_work);
-	if (mt7663s_mcu_init(dev))
-		return;
-
-	mt7615_init_work(dev);
-}
-
-static int mt7663s_parse_intr(struct mt76_dev *dev, struct mt76s_intr *intr)
-{
-	struct mt76_sdio *sdio = &dev->sdio;
-	struct mt7663s_intr *irq_data = sdio->intr_data;
-	int i, err;
-
-	sdio_claim_host(sdio->func);
-	err = sdio_readsb(sdio->func, irq_data, MCR_WHISR, sizeof(*irq_data));
-	sdio_release_host(sdio->func);
-
-	if (err)
-		return err;
-
-	intr->isr = irq_data->isr;
-	intr->rec_mb = irq_data->rec_mb;
-	intr->tx.wtqcr = irq_data->tx.wtqcr;
-	intr->rx.num = irq_data->rx.num;
-	for (i = 0; i < 2 ; i++)
-		intr->rx.len[i] = irq_data->rx.len[i];
-
-	return 0;
-}
-
-static int mt7663s_probe(struct sdio_func *func,
-			 const struct sdio_device_id *id)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		.txwi_size = MT_USB_TXD_SIZE,
-		.drv_flags = MT_DRV_RX_DMA_HDR,
-		.tx_prepare_skb = mt7663_usb_sdio_tx_prepare_skb,
-		.tx_complete_skb = mt7663_usb_sdio_tx_complete_skb,
-		.tx_status_data = mt7663_usb_sdio_tx_status_data,
-		.rx_skb = mt7615_queue_rx_skb,
-		.rx_check = mt7615_rx_check,
-		.sta_ps = mt7615_sta_ps,
-		.sta_add = mt7615_mac_sta_add,
-		.sta_remove = mt7615_mac_sta_remove,
-		.update_survey = mt7615_update_channel,
-	};
-	static const struct mt76_bus_ops mt7663s_ops = {
-		.rr = mt76s_rr,
-		.rmw = mt76s_rmw,
-		.wr = mt76s_wr,
-		.write_copy = mt76s_write_copy,
-		.read_copy = mt76s_read_copy,
-		.wr_rp = mt76s_wr_rp,
-		.rd_rp = mt76s_rd_rp,
-		.type = MT76_BUS_SDIO,
-	};
-	struct ieee80211_ops *ops;
-	struct mt7615_dev *dev;
-	struct mt76_dev *mdev;
-	int ret;
-
-	ops = devm_kmemdup(&func->dev, &mt7615_ops, sizeof(mt7615_ops),
-			   GFP_KERNEL);
-	if (!ops)
-		return -ENOMEM;
-
-	mdev = mt76_alloc_device(&func->dev, sizeof(*dev), ops, &drv_ops);
-	if (!mdev)
-		return -ENOMEM;
-
-	dev = container_of(mdev, struct mt7615_dev, mt76);
-
-	INIT_WORK(&dev->mcu_work, mt7663s_init_work);
-	dev->reg_map = mt7663_usb_sdio_reg_map;
-	dev->ops = ops;
-	sdio_set_drvdata(func, dev);
-
-	ret = mt76s_init(mdev, func, &mt7663s_ops);
-	if (ret < 0)
-		goto error;
-
-	ret = mt76s_hw_init(mdev, func, MT76_CONNAC_SDIO);
-	if (ret)
-		goto error;
-
-	mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |
-		    (mt76_rr(dev, MT_HW_REV) & 0xff);
-	dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
-
-	mdev->sdio.parse_irq = mt7663s_parse_intr;
-	mdev->sdio.intr_data = devm_kmalloc(mdev->dev,
-					    sizeof(struct mt7663s_intr),
-					    GFP_KERNEL);
-	if (!mdev->sdio.intr_data) {
-		ret = -ENOMEM;
-		goto error;
-	}
-
-	ret = mt76s_alloc_rx_queue(mdev, MT_RXQ_MAIN);
-	if (ret)
-		goto error;
-
-	ret = mt76s_alloc_tx(mdev);
-	if (ret)
-		goto error;
-
-	ret = mt76_worker_setup(mt76_hw(dev), &mdev->sdio.txrx_worker,
-				mt7663s_txrx_worker, "sdio-txrx");
-	if (ret)
-		goto error;
-
-	sched_set_fifo_low(mdev->sdio.txrx_worker.task);
-
-	ret = mt7663_usb_sdio_register_device(dev);
-	if (ret)
-		goto error;
-
-	return 0;
-
-error:
-	mt76s_deinit(&dev->mt76);
-	mt76_free_device(&dev->mt76);
-
-	return ret;
-}
-
-static void mt7663s_remove(struct sdio_func *func)
-{
-	struct mt7615_dev *dev = sdio_get_drvdata(func);
-
-	if (!test_and_clear_bit(MT76_STATE_INITIALIZED, &dev->mphy.state))
-		return;
-
-	ieee80211_unregister_hw(dev->mt76.hw);
-	mt76s_deinit(&dev->mt76);
-	mt76_free_device(&dev->mt76);
-}
-
-#ifdef CONFIG_PM
-static int mt7663s_suspend(struct device *dev)
-{
-	struct sdio_func *func = dev_to_sdio_func(dev);
-	struct mt7615_dev *mdev = sdio_get_drvdata(func);
-	int err;
-
-	if (!test_bit(MT76_STATE_SUSPEND, &mdev->mphy.state) &&
-	    mt7615_firmware_offload(mdev)) {
-		int err;
-
-		err = mt76_connac_mcu_set_hif_suspend(&mdev->mt76, true);
-		if (err < 0)
-			return err;
-	}
-
-	sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
-
-	err = mt7615_mcu_set_fw_ctrl(mdev);
-	if (err)
-		return err;
-
-	mt76_worker_disable(&mdev->mt76.sdio.txrx_worker);
-	mt76_worker_disable(&mdev->mt76.sdio.status_worker);
-	mt76_worker_disable(&mdev->mt76.sdio.net_worker);
-
-	cancel_work_sync(&mdev->mt76.sdio.stat_work);
-	clear_bit(MT76_READING_STATS, &mdev->mphy.state);
-
-	mt76_tx_status_check(&mdev->mt76, true);
-
-	return 0;
-}
-
-static int mt7663s_resume(struct device *dev)
-{
-	struct sdio_func *func = dev_to_sdio_func(dev);
-	struct mt7615_dev *mdev = sdio_get_drvdata(func);
-	int err;
-
-	mt76_worker_enable(&mdev->mt76.sdio.txrx_worker);
-	mt76_worker_enable(&mdev->mt76.sdio.status_worker);
-	mt76_worker_enable(&mdev->mt76.sdio.net_worker);
-
-	err = mt7615_mcu_set_drv_ctrl(mdev);
-	if (err)
-		return err;
-
-	if (!test_bit(MT76_STATE_SUSPEND, &mdev->mphy.state) &&
-	    mt7615_firmware_offload(mdev))
-		err = mt76_connac_mcu_set_hif_suspend(&mdev->mt76, false);
-
-	return err;
-}
-
-static const struct dev_pm_ops mt7663s_pm_ops = {
-	.suspend = mt7663s_suspend,
-	.resume = mt7663s_resume,
-};
-#endif
-
-MODULE_DEVICE_TABLE(sdio, mt7663s_table);
-MODULE_FIRMWARE(MT7663_OFFLOAD_FIRMWARE_N9);
-MODULE_FIRMWARE(MT7663_OFFLOAD_ROM_PATCH);
-MODULE_FIRMWARE(MT7663_FIRMWARE_N9);
-MODULE_FIRMWARE(MT7663_ROM_PATCH);
-
-static struct sdio_driver mt7663s_driver = {
-	.name		= KBUILD_MODNAME,
-	.probe		= mt7663s_probe,
-	.remove		= mt7663s_remove,
-	.id_table	= mt7663s_table,
-#ifdef CONFIG_PM
-	.drv = {
-		.pm = &mt7663s_pm_ops,
-	}
-#endif
-};
-module_sdio_driver(mt7663s_driver);
-
-MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
-MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>");
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/sdio_mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/sdio_mcu.c
deleted file mode 100644
index dc9a2f0..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/sdio_mcu.c
+++ /dev/null
@@ -1,181 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright (C) 2020 MediaTek Inc.
- *
- * Author: Felix Fietkau <nbd@nbd.name>
- *	   Lorenzo Bianconi <lorenzo@kernel.org>
- *	   Sean Wang <sean.wang@mediatek.com>
- */
-#include <linux/kernel.h>
-#include <linux/mmc/sdio_func.h>
-#include <linux/module.h>
-#include <linux/iopoll.h>
-
-#include "../sdio.h"
-#include "mt7615.h"
-#include "mac.h"
-#include "mcu.h"
-#include "regs.h"
-
-static int mt7663s_mcu_init_sched(struct mt7615_dev *dev)
-{
-	struct mt76_sdio *sdio = &dev->mt76.sdio;
-	u32 txdwcnt;
-
-	sdio->sched.pse_data_quota = mt76_get_field(dev, MT_PSE_PG_HIF0_GROUP,
-						    MT_HIF0_MIN_QUOTA);
-	sdio->sched.pse_mcu_quota = mt76_get_field(dev, MT_PSE_PG_HIF1_GROUP,
-						   MT_HIF1_MIN_QUOTA);
-	sdio->sched.ple_data_quota = mt76_get_field(dev, MT_PLE_PG_HIF0_GROUP,
-						    MT_HIF0_MIN_QUOTA);
-	sdio->sched.pse_page_size = MT_PSE_PAGE_SZ;
-	txdwcnt = mt76_get_field(dev, MT_PP_TXDWCNT,
-				 MT_PP_TXDWCNT_TX1_ADD_DW_CNT);
-	sdio->sched.deficit = txdwcnt << 2;
-
-	return 0;
-}
-
-static int
-mt7663s_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
-			 int cmd, int *seq)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	int ret;
-
-	mt7615_mcu_fill_msg(dev, skb, cmd, seq);
-	ret = mt76_tx_queue_skb_raw(dev, mdev->q_mcu[MT_MCUQ_WM], skb, 0);
-	if (ret)
-		return ret;
-
-	mt76_queue_kick(dev, mdev->q_mcu[MT_MCUQ_WM]);
-
-	return ret;
-}
-
-static int __mt7663s_mcu_drv_pmctrl(struct mt7615_dev *dev)
-{
-	struct sdio_func *func = dev->mt76.sdio.func;
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_pm *pm = &dev->pm;
-	u32 status;
-	int ret;
-
-	sdio_claim_host(func);
-
-	sdio_writel(func, WHLPCR_FW_OWN_REQ_CLR, MCR_WHLPCR, NULL);
-
-	ret = readx_poll_timeout(mt76s_read_pcr, &dev->mt76, status,
-				 status & WHLPCR_IS_DRIVER_OWN, 2000, 1000000);
-	if (ret < 0) {
-		dev_err(dev->mt76.dev, "Cannot get ownership from device");
-	} else {
-		clear_bit(MT76_STATE_PM, &mphy->state);
-
-		pm->stats.last_wake_event = jiffies;
-		pm->stats.doze_time += pm->stats.last_wake_event -
-				       pm->stats.last_doze_event;
-	}
-	sdio_release_host(func);
-
-	return ret;
-}
-
-static int mt7663s_mcu_drv_pmctrl(struct mt7615_dev *dev)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	int ret = 0;
-
-	mutex_lock(&dev->pm.mutex);
-
-	if (test_bit(MT76_STATE_PM, &mphy->state))
-		ret = __mt7663s_mcu_drv_pmctrl(dev);
-
-	mutex_unlock(&dev->pm.mutex);
-
-	return ret;
-}
-
-static int mt7663s_mcu_fw_pmctrl(struct mt7615_dev *dev)
-{
-	struct sdio_func *func = dev->mt76.sdio.func;
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_pm *pm = &dev->pm;
-	int ret = 0;
-	u32 status;
-
-	mutex_lock(&pm->mutex);
-
-	if (mt76_connac_skip_fw_pmctrl(mphy, pm))
-		goto out;
-
-	sdio_claim_host(func);
-
-	sdio_writel(func, WHLPCR_FW_OWN_REQ_SET, MCR_WHLPCR, NULL);
-
-	ret = readx_poll_timeout(mt76s_read_pcr, &dev->mt76, status,
-				 !(status & WHLPCR_IS_DRIVER_OWN), 2000, 1000000);
-	if (ret < 0) {
-		dev_err(dev->mt76.dev, "Cannot set ownership to device");
-		clear_bit(MT76_STATE_PM, &mphy->state);
-	} else {
-		pm->stats.last_doze_event = jiffies;
-		pm->stats.awake_time += pm->stats.last_doze_event -
-					pm->stats.last_wake_event;
-	}
-
-	sdio_release_host(func);
-out:
-	mutex_unlock(&pm->mutex);
-
-	return ret;
-}
-
-int mt7663s_mcu_init(struct mt7615_dev *dev)
-{
-	static const struct mt76_mcu_ops mt7663s_mcu_ops = {
-		.headroom = sizeof(struct mt7615_mcu_txd),
-		.tailroom = MT_USB_TAIL_SIZE,
-		.mcu_skb_send_msg = mt7663s_mcu_send_message,
-		.mcu_parse_response = mt7615_mcu_parse_response,
-		.mcu_restart = mt7615_mcu_restart,
-		.mcu_rr = mt76_connac_mcu_reg_rr,
-		.mcu_wr = mt76_connac_mcu_reg_wr,
-	};
-	struct mt7615_mcu_ops *mcu_ops;
-	int ret;
-
-	ret = __mt7663s_mcu_drv_pmctrl(dev);
-	if (ret)
-		return ret;
-
-	dev->mt76.mcu_ops = &mt7663s_mcu_ops,
-
-	ret = mt76_get_field(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_N9_RDY);
-	if (ret) {
-		mt7615_mcu_restart(&dev->mt76);
-		if (!mt76_poll_msec(dev, MT_CONN_ON_MISC,
-				    MT_TOP_MISC2_FW_N9_RDY, 0, 500))
-			return -EIO;
-	}
-
-	ret = __mt7663_load_firmware(dev);
-	if (ret)
-		return ret;
-
-	mcu_ops = devm_kmemdup(dev->mt76.dev, dev->mcu_ops, sizeof(*mcu_ops),
-			       GFP_KERNEL);
-	if (!mcu_ops)
-		return -ENOMEM;
-
-	mcu_ops->set_drv_ctrl = mt7663s_mcu_drv_pmctrl;
-	mcu_ops->set_fw_ctrl = mt7663s_mcu_fw_pmctrl;
-	dev->mcu_ops = mcu_ops;
-
-	ret = mt7663s_mcu_init_sched(dev);
-	if (ret)
-		return ret;
-
-	set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/soc.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/soc.c
deleted file mode 100644
index be9a69f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/soc.c
+++ /dev/null
@@ -1,73 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2019 MediaTek Inc.
- *
- * Author: Ryder Lee <ryder.lee@mediatek.com>
- *         Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/regmap.h>
-#include <linux/mfd/syscon.h>
-#include <linux/of.h>
-#include "mt7615.h"
-
-int mt7622_wmac_init(struct mt7615_dev *dev)
-{
-	struct device_node *np = dev->mt76.dev->of_node;
-
-	if (!is_mt7622(&dev->mt76))
-		return 0;
-
-	dev->infracfg = syscon_regmap_lookup_by_phandle(np, "mediatek,infracfg");
-	if (IS_ERR(dev->infracfg)) {
-		dev_err(dev->mt76.dev, "Cannot find infracfg controller\n");
-		return PTR_ERR(dev->infracfg);
-	}
-
-	return 0;
-}
-
-static int mt7622_wmac_probe(struct platform_device *pdev)
-{
-	struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	void __iomem *mem_base;
-	int irq;
-
-	irq = platform_get_irq(pdev, 0);
-	if (irq < 0)
-		return irq;
-
-	mem_base = devm_ioremap_resource(&pdev->dev, res);
-	if (IS_ERR(mem_base))
-		return PTR_ERR(mem_base);
-
-	return mt7615_mmio_probe(&pdev->dev, mem_base, irq, mt7615e_reg_map);
-}
-
-static int mt7622_wmac_remove(struct platform_device *pdev)
-{
-	struct mt7615_dev *dev = platform_get_drvdata(pdev);
-
-	mt7615_unregister_device(dev);
-
-	return 0;
-}
-
-static const struct of_device_id mt7622_wmac_of_match[] = {
-	{ .compatible = "mediatek,mt7622-wmac" },
-	{},
-};
-
-struct platform_driver mt7622_wmac_driver = {
-	.driver = {
-		.name = "mt7622-wmac",
-		.of_match_table = mt7622_wmac_of_match,
-	},
-	.probe = mt7622_wmac_probe,
-	.remove = mt7622_wmac_remove,
-};
-
-MODULE_FIRMWARE(MT7622_FIRMWARE_N9);
-MODULE_FIRMWARE(MT7622_ROM_PATCH);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/testmode.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/testmode.c
deleted file mode 100644
index a3d1cfa..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/testmode.c
+++ /dev/null
@@ -1,376 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 Felix Fietkau <nbd@nbd.name> */
-
-#include "mt7615.h"
-#include "eeprom.h"
-#include "mcu.h"
-
-enum {
-	TM_CHANGED_TXPOWER_CTRL,
-	TM_CHANGED_TXPOWER,
-	TM_CHANGED_FREQ_OFFSET,
-
-	/* must be last */
-	NUM_TM_CHANGED
-};
-
-
-static const u8 tm_change_map[] = {
-	[TM_CHANGED_TXPOWER_CTRL] = MT76_TM_ATTR_TX_POWER_CONTROL,
-	[TM_CHANGED_TXPOWER] = MT76_TM_ATTR_TX_POWER,
-	[TM_CHANGED_FREQ_OFFSET] = MT76_TM_ATTR_FREQ_OFFSET,
-};
-
-static const u32 reg_backup_list[] = {
-	MT_WF_PHY_RFINTF3_0(0),
-	MT_WF_PHY_RFINTF3_0(1),
-	MT_WF_PHY_RFINTF3_0(2),
-	MT_WF_PHY_RFINTF3_0(3),
-	MT_ANT_SWITCH_CON(2),
-	MT_ANT_SWITCH_CON(3),
-	MT_ANT_SWITCH_CON(4),
-	MT_ANT_SWITCH_CON(6),
-	MT_ANT_SWITCH_CON(7),
-	MT_ANT_SWITCH_CON(8),
-};
-
-static const struct {
-	u16 wf;
-	u16 reg;
-} rf_backup_list[] = {
-	{ 0, 0x48 },
-	{ 1, 0x48 },
-	{ 2, 0x48 },
-	{ 3, 0x48 },
-};
-
-static int
-mt7615_tm_set_tx_power(struct mt7615_phy *phy)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct mt76_phy *mphy = phy->mt76;
-	int i, ret, n_chains = hweight8(mphy->antenna_mask);
-	struct cfg80211_chan_def *chandef = &mphy->chandef;
-	int freq = chandef->center_freq1, len, target_chains;
-	u8 *data, *eep = (u8 *)dev->mt76.eeprom.data;
-	enum nl80211_band band = chandef->chan->band;
-	struct sk_buff *skb;
-	struct {
-		u8 center_chan;
-		u8 dbdc_idx;
-		u8 band;
-		u8 rsv;
-	} __packed req_hdr = {
-		.center_chan = ieee80211_frequency_to_channel(freq),
-		.band = band,
-		.dbdc_idx = phy != &dev->phy,
-	};
-	u8 *tx_power = NULL;
-
-	if (mphy->test.state != MT76_TM_STATE_OFF)
-		tx_power = mphy->test.tx_power;
-
-	len = MT7615_EE_MAX - MT_EE_NIC_CONF_0;
-	skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, sizeof(req_hdr) + len);
-	if (!skb)
-		return -ENOMEM;
-
-	skb_put_data(skb, &req_hdr, sizeof(req_hdr));
-	data = skb_put_data(skb, eep + MT_EE_NIC_CONF_0, len);
-
-	target_chains = mt7615_ext_pa_enabled(dev, band) ? 1 : n_chains;
-	for (i = 0; i < target_chains; i++) {
-		ret = mt7615_eeprom_get_target_power_index(dev, chandef->chan, i);
-		if (ret < 0) {
-			dev_kfree_skb(skb);
-			return -EINVAL;
-		}
-
-		if (tx_power && tx_power[i])
-			data[ret - MT_EE_NIC_CONF_0] = tx_power[i];
-	}
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_EXT_CMD(SET_TX_POWER_CTRL), false);
-}
-
-static void
-mt7615_tm_reg_backup_restore(struct mt7615_phy *phy)
-{
-	struct mt7615_dev *dev = phy->dev;
-	u32 *b = phy->test.reg_backup;
-	int n_regs = ARRAY_SIZE(reg_backup_list);
-	int n_rf_regs = ARRAY_SIZE(rf_backup_list);
-	int i;
-
-	if (phy->mt76->test.state == MT76_TM_STATE_OFF) {
-		for (i = 0; i < n_regs; i++)
-			mt76_wr(dev, reg_backup_list[i], b[i]);
-
-		for (i = 0; i < n_rf_regs; i++)
-			mt7615_rf_wr(dev, rf_backup_list[i].wf,
-				     rf_backup_list[i].reg, b[n_regs + i]);
-		return;
-	}
-
-	if (b)
-		return;
-
-	b = devm_kzalloc(dev->mt76.dev, 4 * (n_regs + n_rf_regs),
-			 GFP_KERNEL);
-	if (!b)
-		return;
-
-	phy->test.reg_backup = b;
-	for (i = 0; i < n_regs; i++)
-		b[i] = mt76_rr(dev, reg_backup_list[i]);
-	for (i = 0; i < n_rf_regs; i++)
-		b[n_regs + i] = mt7615_rf_rr(dev, rf_backup_list[i].wf,
-					     rf_backup_list[i].reg);
-}
-
-static void
-mt7615_tm_init(struct mt7615_phy *phy)
-{
-	struct mt7615_dev *dev = phy->dev;
-	unsigned int total_flags = ~0;
-
-	if (!test_bit(MT76_STATE_RUNNING, &phy->mt76->state))
-		return;
-
-	mt7615_mcu_set_sku_en(phy, phy->mt76->test.state == MT76_TM_STATE_OFF);
-
-	mutex_unlock(&dev->mt76.mutex);
-	mt7615_set_channel(phy);
-	mt7615_ops.configure_filter(phy->mt76->hw, 0, &total_flags, 0);
-	mutex_lock(&dev->mt76.mutex);
-
-	mt7615_tm_reg_backup_restore(phy);
-}
-
-static void
-mt7615_tm_set_rx_enable(struct mt7615_dev *dev, bool en)
-{
-	u32 rqcr_mask = (MT_ARB_RQCR_RX_START |
-			 MT_ARB_RQCR_RXV_START |
-			 MT_ARB_RQCR_RXV_R_EN |
-			 MT_ARB_RQCR_RXV_T_EN) *
-			(BIT(0) | BIT(MT_ARB_RQCR_BAND_SHIFT));
-
-	if (en) {
-		mt76_clear(dev, MT_ARB_SCR,
-			   MT_ARB_SCR_RX0_DISABLE | MT_ARB_SCR_RX1_DISABLE);
-		mt76_set(dev, MT_ARB_RQCR, rqcr_mask);
-	} else {
-		mt76_set(dev, MT_ARB_SCR,
-			 MT_ARB_SCR_RX0_DISABLE | MT_ARB_SCR_RX1_DISABLE);
-		mt76_clear(dev, MT_ARB_RQCR, rqcr_mask);
-	}
-}
-
-static void
-mt7615_tm_set_tx_antenna(struct mt7615_phy *phy, bool en)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct mt76_testmode_data *td = &phy->mt76->test;
-	u8 mask = td->tx_antenna_mask;
-	int i;
-
-	if (!mask)
-		return;
-
-	if (!en)
-		mask = phy->mt76->chainmask;
-
-	for (i = 0; i < 4; i++) {
-		mt76_rmw_field(dev, MT_WF_PHY_RFINTF3_0(i),
-			       MT_WF_PHY_RFINTF3_0_ANT,
-			       (mask & BIT(i)) ? 0 : 0xa);
-	}
-
-	/* 2.4 GHz band */
-	mt76_rmw_field(dev, MT_ANT_SWITCH_CON(3), MT_ANT_SWITCH_CON_MODE(0),
-		       (mask & BIT(0)) ? 0x8 : 0x1b);
-	mt76_rmw_field(dev, MT_ANT_SWITCH_CON(4), MT_ANT_SWITCH_CON_MODE(2),
-		       (mask & BIT(1)) ? 0xe : 0x1b);
-	mt76_rmw_field(dev, MT_ANT_SWITCH_CON(6), MT_ANT_SWITCH_CON_MODE1(0),
-		       (mask & BIT(2)) ? 0x0 : 0xf);
-	mt76_rmw_field(dev, MT_ANT_SWITCH_CON(7), MT_ANT_SWITCH_CON_MODE1(2),
-		       (mask & BIT(3)) ? 0x6 : 0xf);
-
-	/* 5 GHz band */
-	mt76_rmw_field(dev, MT_ANT_SWITCH_CON(4), MT_ANT_SWITCH_CON_MODE(1),
-		       (mask & BIT(0)) ? 0xd : 0x1b);
-	mt76_rmw_field(dev, MT_ANT_SWITCH_CON(2), MT_ANT_SWITCH_CON_MODE(3),
-		       (mask & BIT(1)) ? 0x13 : 0x1b);
-	mt76_rmw_field(dev, MT_ANT_SWITCH_CON(7), MT_ANT_SWITCH_CON_MODE1(1),
-		       (mask & BIT(2)) ? 0x5 : 0xf);
-	mt76_rmw_field(dev, MT_ANT_SWITCH_CON(8), MT_ANT_SWITCH_CON_MODE1(3),
-		       (mask & BIT(3)) ? 0xb : 0xf);
-
-	for (i = 0; i < 4; i++) {
-		u32 val;
-
-		val = mt7615_rf_rr(dev, i, 0x48);
-		val &= ~(0x3ff << 20);
-		if (mask & BIT(i))
-			val |= 3 << 20;
-		else
-			val |= (2 << 28) | (2 << 26) | (8 << 20);
-		mt7615_rf_wr(dev, i, 0x48, val);
-	}
-}
-
-static void
-mt7615_tm_set_tx_frames(struct mt7615_phy *phy, bool en)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct ieee80211_tx_info *info;
-	struct sk_buff *skb = phy->mt76->test.tx_skb;
-
-	mt7615_mcu_set_chan_info(phy, MCU_EXT_CMD(SET_RX_PATH));
-	mt7615_tm_set_tx_antenna(phy, en);
-	mt7615_tm_set_rx_enable(dev, !en);
-	if (!en || !skb)
-		return;
-
-	info = IEEE80211_SKB_CB(skb);
-	info->control.vif = phy->monitor_vif;
-}
-
-static void
-mt7615_tm_update_params(struct mt7615_phy *phy, u32 changed)
-{
-	struct mt7615_dev *dev = phy->dev;
-	struct mt76_testmode_data *td = &phy->mt76->test;
-	bool en = phy->mt76->test.state != MT76_TM_STATE_OFF;
-
-	if (changed & BIT(TM_CHANGED_TXPOWER_CTRL))
-		mt7615_mcu_set_test_param(dev, MCU_ATE_SET_TX_POWER_CONTROL,
-					  en, en && td->tx_power_control);
-	if (changed & BIT(TM_CHANGED_FREQ_OFFSET))
-		mt7615_mcu_set_test_param(dev, MCU_ATE_SET_FREQ_OFFSET,
-					  en, en ? td->freq_offset : 0);
-	if (changed & BIT(TM_CHANGED_TXPOWER))
-		mt7615_tm_set_tx_power(phy);
-}
-
-static int
-mt7615_tm_set_state(struct mt76_phy *mphy, enum mt76_testmode_state state)
-{
-	struct mt7615_phy *phy = mphy->priv;
-	struct mt76_testmode_data *td = &mphy->test;
-	enum mt76_testmode_state prev_state = td->state;
-
-	mphy->test.state = state;
-
-	if (prev_state == MT76_TM_STATE_TX_FRAMES)
-		mt7615_tm_set_tx_frames(phy, false);
-	else if (state == MT76_TM_STATE_TX_FRAMES)
-		mt7615_tm_set_tx_frames(phy, true);
-
-	if (state <= MT76_TM_STATE_IDLE)
-		mt7615_tm_init(phy);
-
-	if ((state == MT76_TM_STATE_IDLE &&
-	     prev_state == MT76_TM_STATE_OFF) ||
-	    (state == MT76_TM_STATE_OFF &&
-	     prev_state == MT76_TM_STATE_IDLE)) {
-		u32 changed = 0;
-		int i;
-
-		for (i = 0; i < ARRAY_SIZE(tm_change_map); i++) {
-			u16 cur = tm_change_map[i];
-
-			if (td->param_set[cur / 32] & BIT(cur % 32))
-				changed |= BIT(i);
-		}
-
-		mt7615_tm_update_params(phy, changed);
-	}
-
-	return 0;
-}
-
-static int
-mt7615_tm_set_params(struct mt76_phy *mphy, struct nlattr **tb,
-		     enum mt76_testmode_state new_state)
-{
-	struct mt76_testmode_data *td = &mphy->test;
-	struct mt7615_phy *phy = mphy->priv;
-	u32 changed = 0;
-	int i;
-
-	BUILD_BUG_ON(NUM_TM_CHANGED >= 32);
-
-	if (new_state == MT76_TM_STATE_OFF ||
-	    td->state == MT76_TM_STATE_OFF)
-		return 0;
-
-	if (td->tx_antenna_mask & ~mphy->chainmask)
-		return -EINVAL;
-
-	for (i = 0; i < ARRAY_SIZE(tm_change_map); i++) {
-		if (tb[tm_change_map[i]])
-			changed |= BIT(i);
-	}
-
-	mt7615_tm_update_params(phy, changed);
-
-	return 0;
-}
-
-static int
-mt7615_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
-{
-	struct mt7615_phy *phy = mphy->priv;
-	void *rx, *rssi;
-	int i;
-
-	rx = nla_nest_start(msg, MT76_TM_STATS_ATTR_LAST_RX);
-	if (!rx)
-		return -ENOMEM;
-
-	if (nla_put_s32(msg, MT76_TM_RX_ATTR_FREQ_OFFSET, phy->test.last_freq_offset))
-		return -ENOMEM;
-
-	rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_RCPI);
-	if (!rssi)
-		return -ENOMEM;
-
-	for (i = 0; i < ARRAY_SIZE(phy->test.last_rcpi); i++)
-		if (nla_put_u8(msg, i, phy->test.last_rcpi[i]))
-			return -ENOMEM;
-
-	nla_nest_end(msg, rssi);
-
-	rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_IB_RSSI);
-	if (!rssi)
-		return -ENOMEM;
-
-	for (i = 0; i < ARRAY_SIZE(phy->test.last_ib_rssi); i++)
-		if (nla_put_s8(msg, i, phy->test.last_ib_rssi[i]))
-			return -ENOMEM;
-
-	nla_nest_end(msg, rssi);
-
-	rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_WB_RSSI);
-	if (!rssi)
-		return -ENOMEM;
-
-	for (i = 0; i < ARRAY_SIZE(phy->test.last_wb_rssi); i++)
-		if (nla_put_s8(msg, i, phy->test.last_wb_rssi[i]))
-			return -ENOMEM;
-
-	nla_nest_end(msg, rssi);
-
-	nla_nest_end(msg, rx);
-
-	return 0;
-}
-
-const struct mt76_testmode_ops mt7615_testmode_ops = {
-	.set_state = mt7615_tm_set_state,
-	.set_params = mt7615_tm_set_params,
-	.dump_stats = mt7615_tm_dump_stats,
-};
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/trace.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/trace.c
deleted file mode 100644
index 6c02d5a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/trace.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2019 Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#include <linux/module.h>
-
-#ifndef __CHECKER__
-#define CREATE_TRACE_POINTS
-#include "mt7615_trace.h"
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/usb.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/usb.c
deleted file mode 100644
index f2d651d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/usb.c
+++ /dev/null
@@ -1,285 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2019 MediaTek Inc.
- *
- * Author: Felix Fietkau <nbd@nbd.name>
- *	   Lorenzo Bianconi <lorenzo@kernel.org>
- *	   Sean Wang <sean.wang@mediatek.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/usb.h>
-
-#include "mt7615.h"
-#include "mac.h"
-#include "mcu.h"
-#include "regs.h"
-
-static const struct usb_device_id mt7615_device_table[] = {
-	{ USB_DEVICE_AND_INTERFACE_INFO(0x0e8d, 0x7663, 0xff, 0xff, 0xff) },
-	{ USB_DEVICE_AND_INTERFACE_INFO(0x043e, 0x310c, 0xff, 0xff, 0xff) },
-	{ },
-};
-
-static u32 mt7663u_rr(struct mt76_dev *dev, u32 addr)
-{
-	u32 ret;
-
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	ret = ___mt76u_rr(dev, MT_VEND_READ_EXT,
-			  USB_DIR_IN | USB_TYPE_VENDOR, addr);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-
-	return ret;
-}
-
-static void mt7663u_wr(struct mt76_dev *dev, u32 addr, u32 val)
-{
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	___mt76u_wr(dev, MT_VEND_WRITE_EXT,
-		    USB_DIR_OUT | USB_TYPE_VENDOR, addr, val);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-}
-
-static u32 mt7663u_rmw(struct mt76_dev *dev, u32 addr,
-		       u32 mask, u32 val)
-{
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	val |= ___mt76u_rr(dev, MT_VEND_READ_EXT,
-			   USB_DIR_IN | USB_TYPE_VENDOR, addr) & ~mask;
-	___mt76u_wr(dev, MT_VEND_WRITE_EXT,
-		    USB_DIR_OUT | USB_TYPE_VENDOR, addr, val);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-
-	return val;
-}
-
-static void mt7663u_copy(struct mt76_dev *dev, u32 offset,
-			 const void *data, int len)
-{
-	struct mt76_usb *usb = &dev->usb;
-	int ret, i = 0, batch_len;
-	const u8 *val = data;
-
-	len = round_up(len, 4);
-
-	mutex_lock(&usb->usb_ctrl_mtx);
-	while (i < len) {
-		batch_len = min_t(int, usb->data_len, len - i);
-		memcpy(usb->data, val + i, batch_len);
-		ret = __mt76u_vendor_request(dev, MT_VEND_WRITE_EXT,
-					     USB_DIR_OUT | USB_TYPE_VENDOR,
-					     (offset + i) >> 16, offset + i,
-					     usb->data, batch_len);
-		if (ret < 0)
-			break;
-
-		i += batch_len;
-	}
-	mutex_unlock(&usb->usb_ctrl_mtx);
-}
-
-static void mt7663u_stop(struct ieee80211_hw *hw)
-{
-	struct mt7615_phy *phy = mt7615_hw_phy(hw);
-	struct mt7615_dev *dev = hw->priv;
-
-	clear_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-	del_timer_sync(&phy->roc_timer);
-	cancel_work_sync(&phy->roc_work);
-	cancel_delayed_work_sync(&phy->scan_work);
-	cancel_delayed_work_sync(&phy->mt76->mac_work);
-	mt76u_stop_tx(&dev->mt76);
-}
-
-static void mt7663u_cleanup(struct mt7615_dev *dev)
-{
-	clear_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-	mt76u_queues_deinit(&dev->mt76);
-}
-
-static void mt7663u_init_work(struct work_struct *work)
-{
-	struct mt7615_dev *dev;
-
-	dev = container_of(work, struct mt7615_dev, mcu_work);
-	if (mt7663u_mcu_init(dev))
-		return;
-
-	mt7615_init_work(dev);
-}
-
-static int mt7663u_probe(struct usb_interface *usb_intf,
-			 const struct usb_device_id *id)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		.txwi_size = MT_USB_TXD_SIZE,
-		.drv_flags = MT_DRV_RX_DMA_HDR | MT_DRV_HW_MGMT_TXQ,
-		.tx_prepare_skb = mt7663_usb_sdio_tx_prepare_skb,
-		.tx_complete_skb = mt7663_usb_sdio_tx_complete_skb,
-		.tx_status_data = mt7663_usb_sdio_tx_status_data,
-		.rx_skb = mt7615_queue_rx_skb,
-		.rx_check = mt7615_rx_check,
-		.sta_ps = mt7615_sta_ps,
-		.sta_add = mt7615_mac_sta_add,
-		.sta_remove = mt7615_mac_sta_remove,
-		.update_survey = mt7615_update_channel,
-	};
-	static struct mt76_bus_ops bus_ops = {
-		.rr = mt7663u_rr,
-		.wr = mt7663u_wr,
-		.rmw = mt7663u_rmw,
-		.read_copy = mt76u_read_copy,
-		.write_copy = mt7663u_copy,
-		.type = MT76_BUS_USB,
-	};
-	struct usb_device *udev = interface_to_usbdev(usb_intf);
-	struct ieee80211_ops *ops;
-	struct mt7615_dev *dev;
-	struct mt76_dev *mdev;
-	int ret;
-
-	ops = devm_kmemdup(&usb_intf->dev, &mt7615_ops, sizeof(mt7615_ops),
-			   GFP_KERNEL);
-	if (!ops)
-		return -ENOMEM;
-
-	ops->stop = mt7663u_stop;
-
-	mdev = mt76_alloc_device(&usb_intf->dev, sizeof(*dev), ops, &drv_ops);
-	if (!mdev)
-		return -ENOMEM;
-
-	dev = container_of(mdev, struct mt7615_dev, mt76);
-	udev = usb_get_dev(udev);
-	usb_reset_device(udev);
-
-	usb_set_intfdata(usb_intf, dev);
-
-	INIT_WORK(&dev->mcu_work, mt7663u_init_work);
-	dev->reg_map = mt7663_usb_sdio_reg_map;
-	dev->ops = ops;
-	ret = __mt76u_init(mdev, usb_intf, &bus_ops);
-	if (ret < 0)
-		goto error;
-
-	mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |
-		    (mt76_rr(dev, MT_HW_REV) & 0xff);
-	dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
-
-	if (!mt76_poll_msec(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_PWR_ON,
-			    FW_STATE_PWR_ON << 1, 500)) {
-		ret = mt7663u_mcu_power_on(dev);
-		if (ret)
-			goto error;
-	} else {
-		set_bit(MT76_STATE_POWER_OFF, &dev->mphy.state);
-	}
-
-	ret = mt76u_alloc_mcu_queue(&dev->mt76);
-	if (ret)
-		goto error;
-
-	ret = mt76u_alloc_queues(&dev->mt76);
-	if (ret)
-		goto error;
-
-	ret = mt7663_usb_sdio_register_device(dev);
-	if (ret)
-		goto error;
-
-	return 0;
-
-error:
-	mt76u_queues_deinit(&dev->mt76);
-	usb_set_intfdata(usb_intf, NULL);
-	usb_put_dev(interface_to_usbdev(usb_intf));
-
-	mt76_free_device(&dev->mt76);
-
-	return ret;
-}
-
-static void mt7663u_disconnect(struct usb_interface *usb_intf)
-{
-	struct mt7615_dev *dev = usb_get_intfdata(usb_intf);
-
-	if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state))
-		return;
-
-	ieee80211_unregister_hw(dev->mt76.hw);
-	mt7663u_cleanup(dev);
-
-	usb_set_intfdata(usb_intf, NULL);
-	usb_put_dev(interface_to_usbdev(usb_intf));
-
-	mt76_free_device(&dev->mt76);
-}
-
-#ifdef CONFIG_PM
-static int mt7663u_suspend(struct usb_interface *intf, pm_message_t state)
-{
-	struct mt7615_dev *dev = usb_get_intfdata(intf);
-
-	if (!test_bit(MT76_STATE_SUSPEND, &dev->mphy.state) &&
-	    mt7615_firmware_offload(dev)) {
-		int err;
-
-		err = mt76_connac_mcu_set_hif_suspend(&dev->mt76, true);
-		if (err < 0)
-			return err;
-	}
-
-	mt76u_stop_rx(&dev->mt76);
-	mt76u_stop_tx(&dev->mt76);
-
-	return 0;
-}
-
-static int mt7663u_resume(struct usb_interface *intf)
-{
-	struct mt7615_dev *dev = usb_get_intfdata(intf);
-	int err;
-
-	err = mt76u_vendor_request(&dev->mt76, MT_VEND_FEATURE_SET,
-				   USB_DIR_OUT | USB_TYPE_VENDOR,
-				   0x5, 0x0, NULL, 0);
-	if (err)
-		return err;
-
-	err = mt76u_resume_rx(&dev->mt76);
-	if (err < 0)
-		return err;
-
-	if (!test_bit(MT76_STATE_SUSPEND, &dev->mphy.state) &&
-	    mt7615_firmware_offload(dev))
-		err = mt76_connac_mcu_set_hif_suspend(&dev->mt76, false);
-
-	return err;
-}
-#endif /* CONFIG_PM */
-
-MODULE_DEVICE_TABLE(usb, mt7615_device_table);
-MODULE_FIRMWARE(MT7663_OFFLOAD_FIRMWARE_N9);
-MODULE_FIRMWARE(MT7663_OFFLOAD_ROM_PATCH);
-MODULE_FIRMWARE(MT7663_FIRMWARE_N9);
-MODULE_FIRMWARE(MT7663_ROM_PATCH);
-
-static struct usb_driver mt7663u_driver = {
-	.name		= KBUILD_MODNAME,
-	.id_table	= mt7615_device_table,
-	.probe		= mt7663u_probe,
-	.disconnect	= mt7663u_disconnect,
-#ifdef CONFIG_PM
-	.suspend	= mt7663u_suspend,
-	.resume		= mt7663u_resume,
-	.reset_resume	= mt7663u_resume,
-#endif /* CONFIG_PM */
-	.soft_unbind	= 1,
-	.disable_hub_initiated_lpm = 1,
-};
-module_usb_driver(mt7663u_driver);
-
-MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
-MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>");
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/usb_mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/usb_mcu.c
deleted file mode 100644
index 98bf2f6..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/usb_mcu.c
+++ /dev/null
@@ -1,101 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright (C) 2019 MediaTek Inc.
- *
- * Author: Felix Fietkau <nbd@nbd.name>
- *	   Lorenzo Bianconi <lorenzo@kernel.org>
- *	   Sean Wang <sean.wang@mediatek.com>
- */
-#include <linux/kernel.h>
-#include <linux/module.h>
-
-#include "mt7615.h"
-#include "mac.h"
-#include "mcu.h"
-#include "regs.h"
-
-static int
-mt7663u_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
-			 int cmd, int *seq)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	int ret, ep, len, pad;
-
-	mt7615_mcu_fill_msg(dev, skb, cmd, seq);
-	if (cmd != MCU_CMD(FW_SCATTER))
-		ep = MT_EP_OUT_INBAND_CMD;
-	else
-		ep = MT_EP_OUT_AC_BE;
-
-	len = skb->len;
-	put_unaligned_le32(len, skb_push(skb, sizeof(len)));
-	pad = round_up(skb->len, 4) + 4 - skb->len;
-	ret = mt76_skb_adjust_pad(skb, pad);
-	if (ret < 0)
-		goto out;
-
-	ret = mt76u_bulk_msg(&dev->mt76, skb->data, skb->len, NULL,
-			     1000, ep);
-
-out:
-	dev_kfree_skb(skb);
-
-	return ret;
-}
-
-int mt7663u_mcu_power_on(struct mt7615_dev *dev)
-{
-	int ret;
-
-	ret = mt76u_vendor_request(&dev->mt76, MT_VEND_POWER_ON,
-				   USB_DIR_OUT | USB_TYPE_VENDOR,
-				   0x0, 0x1, NULL, 0);
-	if (ret)
-		return ret;
-
-	if (!mt76_poll_msec(dev, MT_CONN_ON_MISC,
-			    MT_TOP_MISC2_FW_PWR_ON,
-			    FW_STATE_PWR_ON << 1, 500)) {
-		dev_err(dev->mt76.dev, "Timeout for power on\n");
-		ret = -EIO;
-	}
-
-	return 0;
-}
-
-int mt7663u_mcu_init(struct mt7615_dev *dev)
-{
-	static const struct mt76_mcu_ops mt7663u_mcu_ops = {
-		.headroom = MT_USB_HDR_SIZE + sizeof(struct mt7615_mcu_txd),
-		.tailroom = MT_USB_TAIL_SIZE,
-		.mcu_skb_send_msg = mt7663u_mcu_send_message,
-		.mcu_parse_response = mt7615_mcu_parse_response,
-		.mcu_restart = mt7615_mcu_restart,
-	};
-	int ret;
-
-	dev->mt76.mcu_ops = &mt7663u_mcu_ops,
-
-	mt76_set(dev, MT_UDMA_TX_QSEL, MT_FW_DL_EN);
-	if (test_and_clear_bit(MT76_STATE_POWER_OFF, &dev->mphy.state)) {
-		ret = mt7615_mcu_restart(&dev->mt76);
-		if (ret)
-			return ret;
-
-		if (!mt76_poll_msec(dev, MT_CONN_ON_MISC,
-				    MT_TOP_MISC2_FW_PWR_ON, 0, 500))
-			return -EIO;
-
-		ret = mt7663u_mcu_power_on(dev);
-		if (ret)
-			return ret;
-	}
-
-	ret = __mt7663_load_firmware(dev);
-	if (ret)
-		return ret;
-
-	mt76_clear(dev, MT_UDMA_TX_QSEL, MT_FW_DL_EN);
-	set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/usb_sdio.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/usb_sdio.c
deleted file mode 100644
index 0052d10..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7615/usb_sdio.c
+++ /dev/null
@@ -1,352 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc.
- *
- * Author: Lorenzo Bianconi <lorenzo@kernel.org>
- *	   Sean Wang <sean.wang@mediatek.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/usb.h>
-
-#include "mt7615.h"
-#include "mac.h"
-#include "mcu.h"
-#include "regs.h"
-
-const u32 mt7663_usb_sdio_reg_map[] = {
-	[MT_TOP_CFG_BASE]	= 0x80020000,
-	[MT_HW_BASE]		= 0x80000000,
-	[MT_DMA_SHDL_BASE]	= 0x5000a000,
-	[MT_HIF_BASE]		= 0x50000000,
-	[MT_CSR_BASE]		= 0x40000000,
-	[MT_EFUSE_ADDR_BASE]	= 0x78011000,
-	[MT_TOP_MISC_BASE]	= 0x81020000,
-	[MT_PLE_BASE]		= 0x82060000,
-	[MT_PSE_BASE]		= 0x82068000,
-	[MT_PP_BASE]		= 0x8206c000,
-	[MT_WTBL_BASE_ADDR]	= 0x820e0000,
-	[MT_CFG_BASE]		= 0x820f0000,
-	[MT_AGG_BASE]		= 0x820f2000,
-	[MT_ARB_BASE]		= 0x820f3000,
-	[MT_TMAC_BASE]		= 0x820f4000,
-	[MT_RMAC_BASE]		= 0x820f5000,
-	[MT_DMA_BASE]		= 0x820f7000,
-	[MT_PF_BASE]		= 0x820f8000,
-	[MT_WTBL_BASE_ON]	= 0x820f9000,
-	[MT_WTBL_BASE_OFF]	= 0x820f9800,
-	[MT_LPON_BASE]		= 0x820fb000,
-	[MT_MIB_BASE]		= 0x820fd000,
-};
-EXPORT_SYMBOL_GPL(mt7663_usb_sdio_reg_map);
-
-static void
-mt7663_usb_sdio_write_txwi(struct mt7615_dev *dev, struct mt76_wcid *wcid,
-			   enum mt76_txq_id qid, struct ieee80211_sta *sta,
-			   struct ieee80211_key_conf *key, int pid,
-			   struct sk_buff *skb)
-{
-	__le32 *txwi = (__le32 *)(skb->data - MT_USB_TXD_SIZE);
-
-	memset(txwi, 0, MT_USB_TXD_SIZE);
-	mt7615_mac_write_txwi(dev, txwi, skb, wcid, sta, pid, key, qid, false);
-	skb_push(skb, MT_USB_TXD_SIZE);
-}
-
-static int mt7663_usb_sdio_set_rates(struct mt7615_dev *dev,
-				     struct mt7615_wtbl_rate_desc *wrd)
-{
-	struct mt7615_rate_desc *rate = &wrd->rate;
-	struct mt7615_sta *sta = wrd->sta;
-	u32 w5, w27, addr, val;
-	u16 idx;
-
-	lockdep_assert_held(&dev->mt76.mutex);
-
-	if (!sta)
-		return -EINVAL;
-
-	if (!mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000))
-		return -ETIMEDOUT;
-
-	addr = mt7615_mac_wtbl_addr(dev, sta->wcid.idx);
-
-	w27 = mt76_rr(dev, addr + 27 * 4);
-	w27 &= ~MT_WTBL_W27_CC_BW_SEL;
-	w27 |= FIELD_PREP(MT_WTBL_W27_CC_BW_SEL, rate->bw);
-
-	w5 = mt76_rr(dev, addr + 5 * 4);
-	w5 &= ~(MT_WTBL_W5_BW_CAP | MT_WTBL_W5_CHANGE_BW_RATE |
-		MT_WTBL_W5_MPDU_OK_COUNT |
-		MT_WTBL_W5_MPDU_FAIL_COUNT |
-		MT_WTBL_W5_RATE_IDX);
-	w5 |= FIELD_PREP(MT_WTBL_W5_BW_CAP, rate->bw) |
-	      FIELD_PREP(MT_WTBL_W5_CHANGE_BW_RATE,
-			 rate->bw_idx ? rate->bw_idx - 1 : 7);
-
-	mt76_wr(dev, MT_WTBL_RIUCR0, w5);
-
-	mt76_wr(dev, MT_WTBL_RIUCR1,
-		FIELD_PREP(MT_WTBL_RIUCR1_RATE0, rate->probe_val) |
-		FIELD_PREP(MT_WTBL_RIUCR1_RATE1, rate->val[0]) |
-		FIELD_PREP(MT_WTBL_RIUCR1_RATE2_LO, rate->val[1]));
-
-	mt76_wr(dev, MT_WTBL_RIUCR2,
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE2_HI, rate->val[1] >> 8) |
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE3, rate->val[1]) |
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE4, rate->val[2]) |
-		FIELD_PREP(MT_WTBL_RIUCR2_RATE5_LO, rate->val[2]));
-
-	mt76_wr(dev, MT_WTBL_RIUCR3,
-		FIELD_PREP(MT_WTBL_RIUCR3_RATE5_HI, rate->val[2] >> 4) |
-		FIELD_PREP(MT_WTBL_RIUCR3_RATE6, rate->val[3]) |
-		FIELD_PREP(MT_WTBL_RIUCR3_RATE7, rate->val[3]));
-
-	mt76_wr(dev, MT_WTBL_UPDATE,
-		FIELD_PREP(MT_WTBL_UPDATE_WLAN_IDX, sta->wcid.idx) |
-		MT_WTBL_UPDATE_RATE_UPDATE |
-		MT_WTBL_UPDATE_TX_COUNT_CLEAR);
-
-	mt76_wr(dev, addr + 27 * 4, w27);
-
-	sta->rate_probe = sta->rateset[rate->rateset].probe_rate.idx != -1;
-
-	idx = sta->vif->mt76.omac_idx;
-	idx = idx > HW_BSSID_MAX ? HW_BSSID_0 : idx;
-	addr = idx > 1 ? MT_LPON_TCR2(idx): MT_LPON_TCR0(idx);
-
-	mt76_rmw(dev, addr, MT_LPON_TCR_MODE, MT_LPON_TCR_READ); /* TSF read */
-	val = mt76_rr(dev, MT_LPON_UTTR0);
-	sta->rate_set_tsf = (val & ~BIT(0)) | rate->rateset;
-
-	if (!(sta->wcid.tx_info & MT_WCID_TX_INFO_SET))
-		mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY, 0, 5000);
-
-	sta->rate_count = 2 * MT7615_RATE_RETRY * sta->n_rates;
-	sta->wcid.tx_info |= MT_WCID_TX_INFO_SET;
-
-	return 0;
-}
-
-static void mt7663_usb_sdio_rate_work(struct work_struct *work)
-{
-	struct mt7615_wtbl_rate_desc *wrd, *wrd_next;
-	struct list_head wrd_list;
-	struct mt7615_dev *dev;
-
-	dev = (struct mt7615_dev *)container_of(work, struct mt7615_dev,
-						rate_work);
-
-	INIT_LIST_HEAD(&wrd_list);
-	spin_lock_bh(&dev->mt76.lock);
-	list_splice_init(&dev->wrd_head, &wrd_list);
-	spin_unlock_bh(&dev->mt76.lock);
-
-	list_for_each_entry_safe(wrd, wrd_next, &wrd_list, node) {
-		list_del(&wrd->node);
-
-		mt7615_mutex_acquire(dev);
-		mt7663_usb_sdio_set_rates(dev, wrd);
-		mt7615_mutex_release(dev);
-
-		kfree(wrd);
-	}
-}
-
-bool mt7663_usb_sdio_tx_status_data(struct mt76_dev *mdev, u8 *update)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-
-	mt7615_mutex_acquire(dev);
-	mt7615_mac_sta_poll(dev);
-	mt7615_mutex_release(dev);
-
-	return false;
-}
-EXPORT_SYMBOL_GPL(mt7663_usb_sdio_tx_status_data);
-
-void mt7663_usb_sdio_tx_complete_skb(struct mt76_dev *mdev,
-				     struct mt76_queue_entry *e)
-{
-	unsigned int headroom = MT_USB_TXD_SIZE;
-
-	if (mt76_is_usb(mdev))
-		headroom += MT_USB_HDR_SIZE;
-	skb_pull(e->skb, headroom);
-
-	mt76_tx_complete_skb(mdev, e->wcid, e->skb);
-}
-EXPORT_SYMBOL_GPL(mt7663_usb_sdio_tx_complete_skb);
-
-int mt7663_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-				   enum mt76_txq_id qid, struct mt76_wcid *wcid,
-				   struct ieee80211_sta *sta,
-				   struct mt76_tx_info *tx_info)
-{
-	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
-	struct sk_buff *skb = tx_info->skb;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct ieee80211_key_conf *key = info->control.hw_key;
-	struct mt7615_sta *msta;
-	int pad, err, pktid;
-
-	msta = wcid ? container_of(wcid, struct mt7615_sta, wcid) : NULL;
-	if (!wcid)
-		wcid = &dev->mt76.global_wcid;
-
-	if ((info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE) &&
-	    msta && !msta->rate_probe) {
-		/* request to configure sampling rate */
-		spin_lock_bh(&dev->mt76.lock);
-		mt7615_mac_set_rates(&dev->phy, msta, &info->control.rates[0],
-				     msta->rates);
-		spin_unlock_bh(&dev->mt76.lock);
-	}
-
-	pktid = mt76_tx_status_skb_add(&dev->mt76, wcid, skb);
-	mt7663_usb_sdio_write_txwi(dev, wcid, qid, sta, key, pktid, skb);
-	if (mt76_is_usb(mdev)) {
-		u32 len = skb->len;
-
-		put_unaligned_le32(len, skb_push(skb, sizeof(len)));
-		pad = round_up(skb->len, 4) + 4 - skb->len;
-	} else {
-		pad = round_up(skb->len, 4) - skb->len;
-	}
-
-	err = mt76_skb_adjust_pad(skb, pad);
-	if (err)
-		/* Release pktid in case of error. */
-		idr_remove(&wcid->pktid, pktid);
-
-	return err;
-}
-EXPORT_SYMBOL_GPL(mt7663_usb_sdio_tx_prepare_skb);
-
-static int mt7663u_dma_sched_init(struct mt7615_dev *dev)
-{
-	int i;
-
-	mt76_rmw(dev, MT_DMA_SHDL(MT_DMASHDL_PKT_MAX_SIZE),
-		 MT_DMASHDL_PKT_MAX_SIZE_PLE | MT_DMASHDL_PKT_MAX_SIZE_PSE,
-		 FIELD_PREP(MT_DMASHDL_PKT_MAX_SIZE_PLE, 1) |
-		 FIELD_PREP(MT_DMASHDL_PKT_MAX_SIZE_PSE, 8));
-
-	/* disable refill group 5 - group 15 and raise group 2
-	 * and 3 as high priority.
-	 */
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_REFILL), 0xffe00006);
-	mt76_clear(dev, MT_DMA_SHDL(MT_DMASHDL_PAGE), BIT(16));
-
-	for (i = 0; i < 5; i++)
-		mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_GROUP_QUOTA(i)),
-			FIELD_PREP(MT_DMASHDL_GROUP_QUOTA_MIN, 0x3) |
-			FIELD_PREP(MT_DMASHDL_GROUP_QUOTA_MAX, 0x1ff));
-
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_Q_MAP(0)), 0x42104210);
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_Q_MAP(1)), 0x42104210);
-
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_Q_MAP(2)), 0x4444);
-
-	/* group pririority from high to low:
-	 * 15 (cmd groups) > 4 > 3 > 2 > 1 > 0.
-	 */
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_SCHED_SET0), 0x6501234f);
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_SCHED_SET1), 0xedcba987);
-	mt76_wr(dev, MT_DMA_SHDL(MT_DMASHDL_OPTIONAL), 0x7004801c);
-
-	mt76_wr(dev, MT_UDMA_WLCFG_1,
-		FIELD_PREP(MT_WL_TX_TMOUT_LMT, 80000) |
-		FIELD_PREP(MT_WL_RX_AGG_PKT_LMT, 1));
-
-	/* setup UDMA Rx Flush */
-	mt76_clear(dev, MT_UDMA_WLCFG_0, MT_WL_RX_FLUSH);
-	/* hif reset */
-	mt76_set(dev, MT_HIF_RST, MT_HIF_LOGIC_RST_N);
-
-	mt76_set(dev, MT_UDMA_WLCFG_0,
-		 MT_WL_RX_AGG_EN | MT_WL_RX_EN | MT_WL_TX_EN |
-		 MT_WL_RX_MPSZ_PAD0 | MT_TICK_1US_EN |
-		 MT_WL_TX_TMOUT_FUNC_EN);
-	mt76_rmw(dev, MT_UDMA_WLCFG_0, MT_WL_RX_AGG_LMT | MT_WL_RX_AGG_TO,
-		 FIELD_PREP(MT_WL_RX_AGG_LMT, 32) |
-		 FIELD_PREP(MT_WL_RX_AGG_TO, 100));
-
-	return 0;
-}
-
-static int mt7663_usb_sdio_init_hardware(struct mt7615_dev *dev)
-{
-	int ret, idx;
-
-	ret = mt7615_eeprom_init(dev, MT_EFUSE_BASE);
-	if (ret < 0)
-		return ret;
-
-	if (mt76_is_usb(&dev->mt76)) {
-		ret = mt7663u_dma_sched_init(dev);
-		if (ret)
-			return ret;
-	}
-
-	set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-
-	/* Beacon and mgmt frames should occupy wcid 0 */
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7615_WTBL_STA - 1);
-	if (idx)
-		return -ENOSPC;
-
-	dev->mt76.global_wcid.idx = idx;
-	dev->mt76.global_wcid.hw_key_idx = -1;
-	rcu_assign_pointer(dev->mt76.wcid[idx], &dev->mt76.global_wcid);
-
-	return 0;
-}
-
-int mt7663_usb_sdio_register_device(struct mt7615_dev *dev)
-{
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	int err;
-
-	INIT_WORK(&dev->rate_work, mt7663_usb_sdio_rate_work);
-	INIT_LIST_HEAD(&dev->wrd_head);
-	mt7615_init_device(dev);
-
-	err = mt7663_usb_sdio_init_hardware(dev);
-	if (err)
-		return err;
-
-	hw->extra_tx_headroom += MT_USB_TXD_SIZE;
-	if (mt76_is_usb(&dev->mt76)) {
-		hw->extra_tx_headroom += MT_USB_HDR_SIZE;
-		/* check hw sg support in order to enable AMSDU */
-		if (dev->mt76.usb.sg_en)
-			hw->max_tx_fragments = MT_HW_TXP_MAX_BUF_NUM;
-		else
-			hw->max_tx_fragments = 1;
-	}
-
-	err = mt76_register_device(&dev->mt76, true, mt76_rates,
-				   ARRAY_SIZE(mt76_rates));
-	if (err < 0)
-		return err;
-
-	if (!dev->mt76.usb.sg_en) {
-		struct ieee80211_sta_vht_cap *vht_cap;
-
-		/* decrease max A-MSDU size if SG is not supported */
-		vht_cap = &dev->mphy.sband_5g.sband.vht_cap;
-		vht_cap->cap &= ~IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454;
-	}
-
-	ieee80211_queue_work(hw, &dev->mcu_work);
-	mt7615_init_txpower(dev, &dev->mphy.sband_2g.sband);
-	mt7615_init_txpower(dev, &dev->mphy.sband_5g.sband);
-
-	return mt7615_init_debugfs(dev);
-}
-EXPORT_SYMBOL_GPL(mt7663_usb_sdio_register_device);
-
-MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>");
-MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac.h
deleted file mode 100644
index 8ba883b..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac.h
+++ /dev/null
@@ -1,387 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT76_CONNAC_H
-#define __MT76_CONNAC_H
-
-#include "mt76.h"
-
-#define MT76_CONNAC_SCAN_IE_LEN			600
-#define MT76_CONNAC_MAX_NUM_SCHED_SCAN_INTERVAL	 10
-#define MT76_CONNAC_MAX_TIME_SCHED_SCAN_INTERVAL U16_MAX
-#define MT76_CONNAC_MAX_SCHED_SCAN_SSID		10
-#define MT76_CONNAC_MAX_SCAN_MATCH		16
-
-#define MT76_CONNAC_MAX_WMM_SETS		4
-
-#define MT76_CONNAC_COREDUMP_TIMEOUT		(HZ / 20)
-#define MT76_CONNAC_COREDUMP_SZ			(1300 * 1024)
-
-#define MT_TXD_SIZE				(8 * 4)
-
-#define MT_USB_TXD_SIZE				(MT_TXD_SIZE + 8 * 4)
-#define MT_USB_HDR_SIZE				4
-#define MT_USB_TAIL_SIZE			4
-
-#define MT_SDIO_TXD_SIZE			(MT_TXD_SIZE + 8 * 4)
-#define MT_SDIO_TAIL_SIZE			8
-#define MT_SDIO_HDR_SIZE			4
-
-#define MT_MSDU_ID_VALID		BIT(15)
-
-#define MT_TXD_LEN_LAST			BIT(15)
-#define MT_TXD_LEN_MASK			GENMASK(11, 0)
-#define MT_TXD_LEN_MSDU_LAST		BIT(14)
-#define MT_TXD_LEN_AMSDU_LAST		BIT(15)
-
-enum {
-	CMD_CBW_20MHZ = IEEE80211_STA_RX_BW_20,
-	CMD_CBW_40MHZ = IEEE80211_STA_RX_BW_40,
-	CMD_CBW_80MHZ = IEEE80211_STA_RX_BW_80,
-	CMD_CBW_160MHZ = IEEE80211_STA_RX_BW_160,
-	CMD_CBW_10MHZ,
-	CMD_CBW_5MHZ,
-	CMD_CBW_8080MHZ,
-
-	CMD_HE_MCS_BW80 = 0,
-	CMD_HE_MCS_BW160,
-	CMD_HE_MCS_BW8080,
-	CMD_HE_MCS_BW_NUM
-};
-
-enum {
-	HW_BSSID_0 = 0x0,
-	HW_BSSID_1,
-	HW_BSSID_2,
-	HW_BSSID_3,
-	HW_BSSID_MAX = HW_BSSID_3,
-	EXT_BSSID_START = 0x10,
-	EXT_BSSID_1,
-	EXT_BSSID_15 = 0x1f,
-	EXT_BSSID_MAX = EXT_BSSID_15,
-	REPEATER_BSSID_START = 0x20,
-	REPEATER_BSSID_MAX = 0x3f,
-};
-
-struct mt76_connac_reg_map {
-	u32 phys;
-	u32 maps;
-	u32 size;
-};
-
-struct mt76_connac_pm {
-	bool enable:1;
-	bool enable_user:1;
-	bool ds_enable:1;
-	bool ds_enable_user:1;
-	bool suspended:1;
-
-	spinlock_t txq_lock;
-	struct {
-		struct mt76_wcid *wcid;
-		struct sk_buff *skb;
-	} tx_q[IEEE80211_NUM_ACS];
-
-	struct work_struct wake_work;
-	wait_queue_head_t wait;
-
-	struct {
-		spinlock_t lock;
-		u32 count;
-	} wake;
-	struct mutex mutex;
-
-	struct delayed_work ps_work;
-	unsigned long last_activity;
-	unsigned long idle_timeout;
-
-	struct {
-		unsigned long last_wake_event;
-		unsigned long awake_time;
-		unsigned long last_doze_event;
-		unsigned long doze_time;
-		unsigned int lp_wake;
-	} stats;
-};
-
-struct mt76_connac_coredump {
-	struct sk_buff_head msg_list;
-	struct delayed_work work;
-	unsigned long last_activity;
-};
-
-struct mt76_connac_sta_key_conf {
-	s8 keyidx;
-	u8 key[16];
-};
-
-#define MT_TXP_MAX_BUF_NUM		6
-
-struct mt76_connac_fw_txp {
-	__le16 flags;
-	__le16 token;
-	u8 bss_idx;
-	__le16 rept_wds_wcid;
-	u8 nbuf;
-	__le32 buf[MT_TXP_MAX_BUF_NUM];
-	__le16 len[MT_TXP_MAX_BUF_NUM];
-} __packed __aligned(4);
-
-#define MT_HW_TXP_MAX_MSDU_NUM		4
-#define MT_HW_TXP_MAX_BUF_NUM		4
-
-struct mt76_connac_txp_ptr {
-	__le32 buf0;
-	__le16 len0;
-	__le16 len1;
-	__le32 buf1;
-} __packed __aligned(4);
-
-struct mt76_connac_hw_txp {
-	__le16 msdu_id[MT_HW_TXP_MAX_MSDU_NUM];
-	struct mt76_connac_txp_ptr ptr[MT_HW_TXP_MAX_BUF_NUM / 2];
-} __packed __aligned(4);
-
-struct mt76_connac_txp_common {
-	union {
-		struct mt76_connac_fw_txp fw;
-		struct mt76_connac_hw_txp hw;
-	};
-};
-
-struct mt76_connac_tx_free {
-	__le16 rx_byte_cnt;
-	__le16 ctrl;
-	__le32 txd;
-} __packed __aligned(4);
-
-extern const struct wiphy_wowlan_support mt76_connac_wowlan_support;
-
-static inline bool is_mt7922(struct mt76_dev *dev)
-{
-	return mt76_chip(dev) == 0x7922;
-}
-
-static inline bool is_mt7921(struct mt76_dev *dev)
-{
-	return mt76_chip(dev) == 0x7961 || is_mt7922(dev);
-}
-
-static inline bool is_mt7663(struct mt76_dev *dev)
-{
-	return mt76_chip(dev) == 0x7663;
-}
-
-static inline bool is_mt7915(struct mt76_dev *dev)
-{
-	return mt76_chip(dev) == 0x7915;
-}
-
-static inline bool is_mt7916(struct mt76_dev *dev)
-{
-	return mt76_chip(dev) == 0x7906;
-}
-
-static inline bool is_mt7986(struct mt76_dev *dev)
-{
-	return mt76_chip(dev) == 0x7986;
-}
-
-static inline bool is_mt7996(struct mt76_dev *dev)
-{
-	return mt76_chip(dev) == 0x7990;
-}
-
-static inline bool is_mt7622(struct mt76_dev *dev)
-{
-	if (!IS_ENABLED(CONFIG_MT7622_WMAC))
-		return false;
-
-	return mt76_chip(dev) == 0x7622;
-}
-
-static inline bool is_mt7615(struct mt76_dev *dev)
-{
-	return mt76_chip(dev) == 0x7615 || mt76_chip(dev) == 0x7611;
-}
-
-static inline bool is_mt7611(struct mt76_dev *dev)
-{
-	return mt76_chip(dev) == 0x7611;
-}
-
-static inline bool is_connac_v1(struct mt76_dev *dev)
-{
-	return is_mt7615(dev) || is_mt7663(dev) || is_mt7622(dev);
-}
-
-static inline bool is_mt76_fw_txp(struct mt76_dev *dev)
-{
-	switch (mt76_chip(dev)) {
-	case 0x7961:
-	case 0x7922:
-	case 0x7663:
-	case 0x7622:
-		return false;
-	default:
-		return true;
-	}
-}
-
-static inline u8 mt76_connac_chan_bw(struct cfg80211_chan_def *chandef)
-{
-	static const u8 width_to_bw[] = {
-		[NL80211_CHAN_WIDTH_40] = CMD_CBW_40MHZ,
-		[NL80211_CHAN_WIDTH_80] = CMD_CBW_80MHZ,
-		[NL80211_CHAN_WIDTH_80P80] = CMD_CBW_8080MHZ,
-		[NL80211_CHAN_WIDTH_160] = CMD_CBW_160MHZ,
-		[NL80211_CHAN_WIDTH_5] = CMD_CBW_5MHZ,
-		[NL80211_CHAN_WIDTH_10] = CMD_CBW_10MHZ,
-		[NL80211_CHAN_WIDTH_20] = CMD_CBW_20MHZ,
-		[NL80211_CHAN_WIDTH_20_NOHT] = CMD_CBW_20MHZ,
-	};
-
-	if (chandef->width >= ARRAY_SIZE(width_to_bw))
-		return 0;
-
-	return width_to_bw[chandef->width];
-}
-
-static inline u8 mt76_connac_lmac_mapping(u8 ac)
-{
-	/* LMAC uses the reverse order of mac80211 AC indexes */
-	return 3 - ac;
-}
-
-static inline void *
-mt76_connac_txwi_to_txp(struct mt76_dev *dev, struct mt76_txwi_cache *t)
-{
-	u8 *txwi;
-
-	if (!t)
-		return NULL;
-
-	txwi = mt76_get_txwi_ptr(dev, t);
-
-	return (void *)(txwi + MT_TXD_SIZE);
-}
-
-static inline u8 mt76_connac_spe_idx(u8 antenna_mask)
-{
-	static const u8 ant_to_spe[] = {0, 0, 1, 0, 3, 2, 4, 0,
-					9, 8, 6, 10, 16, 12, 18, 0};
-
-	if (antenna_mask >= sizeof(ant_to_spe))
-		return 0;
-
-	return ant_to_spe[antenna_mask];
-}
-
-int mt76_connac_pm_wake(struct mt76_phy *phy, struct mt76_connac_pm *pm);
-void mt76_connac_power_save_sched(struct mt76_phy *phy,
-				  struct mt76_connac_pm *pm);
-void mt76_connac_free_pending_tx_skbs(struct mt76_connac_pm *pm,
-				      struct mt76_wcid *wcid);
-
-static inline void mt76_connac_tx_cleanup(struct mt76_dev *dev)
-{
-	dev->queue_ops->tx_cleanup(dev, dev->q_mcu[MT_MCUQ_WM], false);
-	dev->queue_ops->tx_cleanup(dev, dev->q_mcu[MT_MCUQ_WA], false);
-}
-
-static inline bool
-mt76_connac_pm_ref(struct mt76_phy *phy, struct mt76_connac_pm *pm)
-{
-	bool ret = false;
-
-	spin_lock_bh(&pm->wake.lock);
-	if (test_bit(MT76_STATE_PM, &phy->state))
-		goto out;
-
-	pm->wake.count++;
-	ret = true;
-out:
-	spin_unlock_bh(&pm->wake.lock);
-
-	return ret;
-}
-
-static inline void
-mt76_connac_pm_unref(struct mt76_phy *phy, struct mt76_connac_pm *pm)
-{
-	spin_lock_bh(&pm->wake.lock);
-
-	pm->last_activity = jiffies;
-	if (--pm->wake.count == 0 &&
-	    test_bit(MT76_STATE_MCU_RUNNING, &phy->state))
-		mt76_connac_power_save_sched(phy, pm);
-
-	spin_unlock_bh(&pm->wake.lock);
-}
-
-static inline bool
-mt76_connac_skip_fw_pmctrl(struct mt76_phy *phy, struct mt76_connac_pm *pm)
-{
-	struct mt76_dev *dev = phy->dev;
-	bool ret;
-
-	if (dev->token_count)
-		return true;
-
-	spin_lock_bh(&pm->wake.lock);
-	ret = pm->wake.count || test_and_set_bit(MT76_STATE_PM, &phy->state);
-	spin_unlock_bh(&pm->wake.lock);
-
-	return ret;
-}
-
-static inline void
-mt76_connac_mutex_acquire(struct mt76_dev *dev, struct mt76_connac_pm *pm)
-	__acquires(&dev->mutex)
-{
-	mutex_lock(&dev->mutex);
-	mt76_connac_pm_wake(&dev->phy, pm);
-}
-
-static inline void
-mt76_connac_mutex_release(struct mt76_dev *dev, struct mt76_connac_pm *pm)
-	__releases(&dev->mutex)
-{
-	mt76_connac_power_save_sched(&dev->phy, pm);
-	mutex_unlock(&dev->mutex);
-}
-
-int mt76_connac_init_tx_queues(struct mt76_phy *phy, int idx, int n_desc,
-			       int ring_base, u32 flags);
-void mt76_connac_write_hw_txp(struct mt76_dev *dev,
-			      struct mt76_tx_info *tx_info,
-			      void *txp_ptr, u32 id);
-void mt76_connac_txp_skb_unmap(struct mt76_dev *dev,
-			       struct mt76_txwi_cache *txwi);
-void mt76_connac_tx_complete_skb(struct mt76_dev *mdev,
-				 struct mt76_queue_entry *e);
-void mt76_connac_pm_queue_skb(struct ieee80211_hw *hw,
-			      struct mt76_connac_pm *pm,
-			      struct mt76_wcid *wcid,
-			      struct sk_buff *skb);
-void mt76_connac_pm_dequeue_skbs(struct mt76_phy *phy,
-				 struct mt76_connac_pm *pm);
-void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
-				 struct sk_buff *skb, struct mt76_wcid *wcid,
-				 struct ieee80211_key_conf *key, int pid,
-				 enum mt76_txq_id qid, u32 changed);
-bool mt76_connac2_mac_fill_txs(struct mt76_dev *dev, struct mt76_wcid *wcid,
-			       __le32 *txs_data);
-bool mt76_connac2_mac_add_txs_skb(struct mt76_dev *dev, struct mt76_wcid *wcid,
-				  int pid, __le32 *txs_data);
-void mt76_connac2_mac_decode_he_radiotap(struct mt76_dev *dev,
-					 struct sk_buff *skb,
-					 __le32 *rxv, u32 mode);
-int mt76_connac2_reverse_frag0_hdr_trans(struct ieee80211_vif *vif,
-					 struct sk_buff *skb, u16 hdr_offset);
-int mt76_connac2_mac_fill_rx_rate(struct mt76_dev *dev,
-				  struct mt76_rx_status *status,
-				  struct ieee80211_supported_band *sband,
-				  __le32 *rxv, u8 *mode);
-
-#endif /* __MT76_CONNAC_H */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac2_mac.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac2_mac.h
deleted file mode 100644
index f33171b..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac2_mac.h
+++ /dev/null
@@ -1,331 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2022 MediaTek Inc. */
-
-#ifndef __MT76_CONNAC2_MAC_H
-#define __MT76_CONNAC2_MAC_H
-
-enum tx_header_format {
-	MT_HDR_FORMAT_802_3,
-	MT_HDR_FORMAT_CMD,
-	MT_HDR_FORMAT_802_11,
-	MT_HDR_FORMAT_802_11_EXT,
-};
-
-enum tx_pkt_type {
-	MT_TX_TYPE_CT,
-	MT_TX_TYPE_SF,
-	MT_TX_TYPE_CMD,
-	MT_TX_TYPE_FW,
-};
-
-enum {
-	MT_CTX0,
-	MT_HIF0 = 0x0,
-
-	MT_LMAC_AC00 = 0x0,
-	MT_LMAC_AC01,
-	MT_LMAC_AC02,
-	MT_LMAC_AC03,
-	MT_LMAC_ALTX0 = 0x10,
-	MT_LMAC_BMC0,
-	MT_LMAC_BCN0,
-	MT_LMAC_PSMP0,
-};
-
-#define MT_TXD0_Q_IDX			GENMASK(31, 25)
-#define MT_TXD0_PKT_FMT			GENMASK(24, 23)
-#define MT_TXD0_ETH_TYPE_OFFSET		GENMASK(22, 16)
-#define MT_TXD0_TX_BYTES		GENMASK(15, 0)
-
-#define MT_TXD1_LONG_FORMAT		BIT(31)
-#define MT_TXD1_TGID			BIT(30)
-#define MT_TXD1_OWN_MAC			GENMASK(29, 24)
-#define MT_TXD1_AMSDU			BIT(23)
-#define MT_TXD1_TID			GENMASK(22, 20)
-#define MT_TXD1_HDR_PAD			GENMASK(19, 18)
-#define MT_TXD1_HDR_FORMAT		GENMASK(17, 16)
-#define MT_TXD1_HDR_INFO		GENMASK(15, 11)
-#define MT_TXD1_ETH_802_3		BIT(15)
-#define MT_TXD1_VTA			BIT(10)
-#define MT_TXD1_WLAN_IDX		GENMASK(9, 0)
-
-#define MT_TXD2_FIX_RATE		BIT(31)
-#define MT_TXD2_FIXED_RATE		BIT(30)
-#define MT_TXD2_POWER_OFFSET		GENMASK(29, 24)
-#define MT_TXD2_MAX_TX_TIME		GENMASK(23, 16)
-#define MT_TXD2_FRAG			GENMASK(15, 14)
-#define MT_TXD2_HTC_VLD			BIT(13)
-#define MT_TXD2_DURATION		BIT(12)
-#define MT_TXD2_BIP			BIT(11)
-#define MT_TXD2_MULTICAST		BIT(10)
-#define MT_TXD2_RTS			BIT(9)
-#define MT_TXD2_SOUNDING		BIT(8)
-#define MT_TXD2_NDPA			BIT(7)
-#define MT_TXD2_NDP			BIT(6)
-#define MT_TXD2_FRAME_TYPE		GENMASK(5, 4)
-#define MT_TXD2_SUB_TYPE		GENMASK(3, 0)
-
-#define MT_TXD3_SN_VALID		BIT(31)
-#define MT_TXD3_PN_VALID		BIT(30)
-#define MT_TXD3_SW_POWER_MGMT		BIT(29)
-#define MT_TXD3_BA_DISABLE		BIT(28)
-#define MT_TXD3_SEQ			GENMASK(27, 16)
-#define MT_TXD3_REM_TX_COUNT		GENMASK(15, 11)
-#define MT_TXD3_TX_COUNT		GENMASK(10, 6)
-#define MT_TXD3_TIMING_MEASURE		BIT(5)
-#define MT_TXD3_DAS			BIT(4)
-#define MT_TXD3_EEOSP			BIT(3)
-#define MT_TXD3_EMRD			BIT(2)
-#define MT_TXD3_PROTECT_FRAME		BIT(1)
-#define MT_TXD3_NO_ACK			BIT(0)
-
-#define MT_TXD4_PN_LOW			GENMASK(31, 0)
-
-#define MT_TXD5_PN_HIGH			GENMASK(31, 16)
-#define MT_TXD5_MD			BIT(15)
-#define MT_TXD5_ADD_BA			BIT(14)
-#define MT_TXD5_TX_STATUS_HOST		BIT(10)
-#define MT_TXD5_TX_STATUS_MCU		BIT(9)
-#define MT_TXD5_TX_STATUS_FMT		BIT(8)
-#define MT_TXD5_PID			GENMASK(7, 0)
-
-#define MT_TXD6_TX_IBF			BIT(31)
-#define MT_TXD6_TX_EBF			BIT(30)
-#define MT_TXD6_TX_RATE			GENMASK(29, 16)
-#define MT_TXD6_SGI			GENMASK(15, 14)
-#define MT_TXD6_HELTF			GENMASK(13, 12)
-#define MT_TXD6_LDPC			BIT(11)
-#define MT_TXD6_SPE_ID_IDX		BIT(10)
-#define MT_TXD6_ANT_ID			GENMASK(7, 4)
-#define MT_TXD6_DYN_BW			BIT(3)
-#define MT_TXD6_FIXED_BW		BIT(2)
-#define MT_TXD6_BW			GENMASK(1, 0)
-
-#define MT_TXD7_TXD_LEN			GENMASK(31, 30)
-#define MT_TXD7_UDP_TCP_SUM		BIT(29)
-#define MT_TXD7_IP_SUM			BIT(28)
-#define MT_TXD7_TYPE			GENMASK(21, 20)
-#define MT_TXD7_SUB_TYPE		GENMASK(19, 16)
-
-#define MT_TXD7_PSE_FID			GENMASK(27, 16)
-#define MT_TXD7_SPE_IDX			GENMASK(15, 11)
-#define MT_TXD7_HW_AMSDU		BIT(10)
-#define MT_TXD7_TX_TIME			GENMASK(9, 0)
-
-#define MT_TXD8_L_TYPE			GENMASK(5, 4)
-#define MT_TXD8_L_SUB_TYPE		GENMASK(3, 0)
-
-#define MT_TX_RATE_STBC			BIT(13)
-#define MT_TX_RATE_NSS			GENMASK(12, 10)
-#define MT_TX_RATE_MODE			GENMASK(9, 6)
-#define MT_TX_RATE_SU_EXT_TONE		BIT(5)
-#define MT_TX_RATE_DCM			BIT(4)
-/* VHT/HE only use bits 0-3 */
-#define MT_TX_RATE_IDX			GENMASK(5, 0)
-
-#define MT_TXS0_FIXED_RATE		BIT(31)
-#define MT_TXS0_BW			GENMASK(30, 29)
-#define MT_TXS0_TID			GENMASK(28, 26)
-#define MT_TXS0_AMPDU			BIT(25)
-#define MT_TXS0_TXS_FORMAT		GENMASK(24, 23)
-#define MT_TXS0_BA_ERROR		BIT(22)
-#define MT_TXS0_PS_FLAG			BIT(21)
-#define MT_TXS0_TXOP_TIMEOUT		BIT(20)
-#define MT_TXS0_BIP_ERROR		BIT(19)
-
-#define MT_TXS0_QUEUE_TIMEOUT		BIT(18)
-#define MT_TXS0_RTS_TIMEOUT		BIT(17)
-#define MT_TXS0_ACK_TIMEOUT		BIT(16)
-#define MT_TXS0_ACK_ERROR_MASK		GENMASK(18, 16)
-
-#define MT_TXS0_TX_STATUS_HOST		BIT(15)
-#define MT_TXS0_TX_STATUS_MCU		BIT(14)
-#define MT_TXS0_TX_RATE			GENMASK(13, 0)
-
-#define MT_TXS1_SEQNO			GENMASK(31, 20)
-#define MT_TXS1_RESP_RATE		GENMASK(19, 16)
-#define MT_TXS1_RXV_SEQNO		GENMASK(15, 8)
-#define MT_TXS1_TX_POWER_DBM		GENMASK(7, 0)
-
-#define MT_TXS2_BF_STATUS		GENMASK(31, 30)
-#define MT_TXS2_LAST_TX_RATE		GENMASK(29, 27)
-#define MT_TXS2_SHARED_ANTENNA		BIT(26)
-#define MT_TXS2_WCID			GENMASK(25, 16)
-#define MT_TXS2_TX_DELAY		GENMASK(15, 0)
-
-#define MT_TXS3_PID			GENMASK(31, 24)
-#define MT_TXS3_ANT_ID			GENMASK(23, 0)
-
-#define MT_TXS4_TIMESTAMP		GENMASK(31, 0)
-
-/* PPDU based TXS */
-#define MT_TXS5_MPDU_TX_BYTE		GENMASK(22, 0)
-#define MT_TXS5_MPDU_TX_CNT		GENMASK(31, 23)
-
-#define MT_TXS6_MPDU_FAIL_CNT		GENMASK(31, 23)
-
-#define MT_TXS7_MPDU_RETRY_CNT		GENMASK(31, 23)
-
-/* RXD DW1 */
-#define MT_RXD1_NORMAL_WLAN_IDX		GENMASK(9, 0)
-#define MT_RXD1_NORMAL_GROUP_1		BIT(11)
-#define MT_RXD1_NORMAL_GROUP_2		BIT(12)
-#define MT_RXD1_NORMAL_GROUP_3		BIT(13)
-#define MT_RXD1_NORMAL_GROUP_4		BIT(14)
-#define MT_RXD1_NORMAL_GROUP_5		BIT(15)
-#define MT_RXD1_NORMAL_SEC_MODE		GENMASK(20, 16)
-#define MT_RXD1_NORMAL_KEY_ID		GENMASK(22, 21)
-#define MT_RXD1_NORMAL_CM		BIT(23)
-#define MT_RXD1_NORMAL_CLM		BIT(24)
-#define MT_RXD1_NORMAL_ICV_ERR		BIT(25)
-#define MT_RXD1_NORMAL_TKIP_MIC_ERR	BIT(26)
-#define MT_RXD1_NORMAL_FCS_ERR		BIT(27)
-#define MT_RXD1_NORMAL_BAND_IDX		BIT(28)
-#define MT_RXD1_NORMAL_SPP_EN		BIT(29)
-#define MT_RXD1_NORMAL_ADD_OM		BIT(30)
-#define MT_RXD1_NORMAL_SEC_DONE		BIT(31)
-
-/* RXD DW2 */
-#define MT_RXD2_NORMAL_BSSID		GENMASK(5, 0)
-#define MT_RXD2_NORMAL_CO_ANT		BIT(6)
-#define MT_RXD2_NORMAL_BF_CQI		BIT(7)
-#define MT_RXD2_NORMAL_MAC_HDR_LEN	GENMASK(12, 8)
-#define MT_RXD2_NORMAL_HDR_TRANS	BIT(13)
-#define MT_RXD2_NORMAL_HDR_OFFSET	GENMASK(15, 14)
-#define MT_RXD2_NORMAL_TID		GENMASK(19, 16)
-#define MT_RXD2_NORMAL_MU_BAR		BIT(21)
-#define MT_RXD2_NORMAL_SW_BIT		BIT(22)
-#define MT_RXD2_NORMAL_AMSDU_ERR	BIT(23)
-#define MT_RXD2_NORMAL_MAX_LEN_ERROR	BIT(24)
-#define MT_RXD2_NORMAL_HDR_TRANS_ERROR	BIT(25)
-#define MT_RXD2_NORMAL_INT_FRAME	BIT(26)
-#define MT_RXD2_NORMAL_FRAG		BIT(27)
-#define MT_RXD2_NORMAL_NULL_FRAME	BIT(28)
-#define MT_RXD2_NORMAL_NDATA		BIT(29)
-#define MT_RXD2_NORMAL_NON_AMPDU	BIT(30)
-#define MT_RXD2_NORMAL_BF_REPORT	BIT(31)
-
-/* RXD DW4 */
-#define MT_RXD4_NORMAL_PAYLOAD_FORMAT	GENMASK(1, 0)
-#define MT_RXD4_FIRST_AMSDU_FRAME	GENMASK(1, 0)
-#define MT_RXD4_MID_AMSDU_FRAME		BIT(1)
-#define MT_RXD4_LAST_AMSDU_FRAME	BIT(0)
-#define MT_RXD4_NORMAL_PATTERN_DROP	BIT(9)
-#define MT_RXD4_NORMAL_CLS		BIT(10)
-#define MT_RXD4_NORMAL_OFLD		GENMASK(12, 11)
-#define MT_RXD4_NORMAL_MAGIC_PKT	BIT(13)
-#define MT_RXD4_NORMAL_WOL		GENMASK(18, 14)
-#define MT_RXD4_NORMAL_CLS_BITMAP	GENMASK(28, 19)
-#define MT_RXD3_NORMAL_PF_MODE		BIT(29)
-#define MT_RXD3_NORMAL_PF_STS		GENMASK(31, 30)
-
-#define MT_RXV_HDR_BAND_IDX		BIT(24)
-
-/* RXD DW3 */
-#define MT_RXD3_NORMAL_RXV_SEQ		GENMASK(7, 0)
-#define MT_RXD3_NORMAL_CH_FREQ		GENMASK(15, 8)
-#define MT_RXD3_NORMAL_ADDR_TYPE	GENMASK(17, 16)
-#define MT_RXD3_NORMAL_U2M		BIT(0)
-#define MT_RXD3_NORMAL_HTC_VLD		BIT(0)
-#define MT_RXD3_NORMAL_TSF_COMPARE_LOSS	BIT(19)
-#define MT_RXD3_NORMAL_BEACON_MC	BIT(20)
-#define MT_RXD3_NORMAL_BEACON_UC	BIT(21)
-#define MT_RXD3_NORMAL_AMSDU		BIT(22)
-#define MT_RXD3_NORMAL_MESH		BIT(23)
-#define MT_RXD3_NORMAL_MHCP		BIT(24)
-#define MT_RXD3_NORMAL_NO_INFO_WB	BIT(25)
-#define MT_RXD3_NORMAL_DISABLE_RX_HDR_TRANS	BIT(26)
-#define MT_RXD3_NORMAL_POWER_SAVE_STAT	BIT(27)
-#define MT_RXD3_NORMAL_MORE		BIT(28)
-#define MT_RXD3_NORMAL_UNWANT		BIT(29)
-#define MT_RXD3_NORMAL_RX_DROP		BIT(30)
-#define MT_RXD3_NORMAL_VLAN2ETH		BIT(31)
-
-/* RXD GROUP4 */
-#define MT_RXD6_FRAME_CONTROL		GENMASK(15, 0)
-#define MT_RXD6_TA_LO			GENMASK(31, 16)
-
-#define MT_RXD7_TA_HI			GENMASK(31, 0)
-
-#define MT_RXD8_SEQ_CTRL		GENMASK(15, 0)
-#define MT_RXD8_QOS_CTL			GENMASK(31, 16)
-
-#define MT_RXD9_HT_CONTROL		GENMASK(31, 0)
-
-/* P-RXV DW0 */
-#define MT_PRXV_TX_RATE			GENMASK(6, 0)
-#define MT_PRXV_TX_DCM			BIT(4)
-#define MT_PRXV_TX_ER_SU_106T		BIT(5)
-#define MT_PRXV_NSTS			GENMASK(9, 7)
-#define MT_PRXV_TXBF			BIT(10)
-#define MT_PRXV_HT_AD_CODE		BIT(11)
-#define MT_PRXV_HE_RU_ALLOC_L		GENMASK(31, 28)
-
-#define MT_PRXV_FRAME_MODE		GENMASK(14, 12)
-#define MT_PRXV_HT_SGI			GENMASK(16, 15)
-#define MT_PRXV_HT_STBC			GENMASK(23, 22)
-#define MT_PRXV_TX_MODE			GENMASK(27, 24)
-#define MT_PRXV_DCM			BIT(17)
-#define MT_PRXV_NUM_RX			BIT(20, 18)
-
-/* P-RXV DW1 */
-#define MT_PRXV_RCPI3			GENMASK(31, 24)
-#define MT_PRXV_RCPI2			GENMASK(23, 16)
-#define MT_PRXV_RCPI1			GENMASK(15, 8)
-#define MT_PRXV_RCPI0			GENMASK(7, 0)
-#define MT_PRXV_HE_RU_ALLOC_H		GENMASK(3, 0)
-
-/* C-RXV */
-#define MT_CRXV_HT_STBC			GENMASK(1, 0)
-#define MT_CRXV_TX_MODE			GENMASK(7, 4)
-#define MT_CRXV_FRAME_MODE		GENMASK(10, 8)
-#define MT_CRXV_HT_SHORT_GI		GENMASK(14, 13)
-#define MT_CRXV_HE_LTF_SIZE		GENMASK(18, 17)
-#define MT_CRXV_HE_LDPC_EXT_SYM		BIT(20)
-#define MT_CRXV_HE_PE_DISAMBIG		BIT(23)
-#define MT_CRXV_HE_NUM_USER		GENMASK(30, 24)
-#define MT_CRXV_HE_UPLINK		BIT(31)
-
-#define MT_CRXV_HE_RU0			GENMASK(7, 0)
-#define MT_CRXV_HE_RU1			GENMASK(15, 8)
-#define MT_CRXV_HE_RU2			GENMASK(23, 16)
-#define MT_CRXV_HE_RU3			GENMASK(31, 24)
-
-#define MT_CRXV_HE_MU_AID		GENMASK(30, 20)
-
-#define MT_CRXV_HE_SR_MASK		GENMASK(11, 8)
-#define MT_CRXV_HE_SR1_MASK		GENMASK(16, 12)
-#define MT_CRXV_HE_SR2_MASK             GENMASK(20, 17)
-#define MT_CRXV_HE_SR3_MASK             GENMASK(24, 21)
-
-#define MT_CRXV_HE_BSS_COLOR		GENMASK(5, 0)
-#define MT_CRXV_HE_TXOP_DUR		GENMASK(12, 6)
-#define MT_CRXV_HE_BEAM_CHNG		BIT(13)
-#define MT_CRXV_HE_DOPPLER		BIT(16)
-
-#define MT_CRXV_SNR		GENMASK(18, 13)
-#define MT_CRXV_FOE_LO		GENMASK(31, 19)
-#define MT_CRXV_FOE_HI		GENMASK(6, 0)
-#define MT_CRXV_FOE_SHIFT	13
-
-#define MT_CT_INFO_APPLY_TXD		BIT(0)
-#define MT_CT_INFO_COPY_HOST_TXD_ALL	BIT(1)
-#define MT_CT_INFO_MGMT_FRAME		BIT(2)
-#define MT_CT_INFO_NONE_CIPHER_FRAME	BIT(3)
-#define MT_CT_INFO_HSR2_TX		BIT(4)
-#define MT_CT_INFO_FROM_HOST		BIT(7)
-
-enum tx_mcu_port_q_idx {
-	MT_TX_MCU_PORT_RX_Q0 = 0x20,
-	MT_TX_MCU_PORT_RX_Q1,
-	MT_TX_MCU_PORT_RX_Q2,
-	MT_TX_MCU_PORT_RX_Q3,
-	MT_TX_MCU_PORT_RX_FWDL = 0x3e
-};
-
-enum tx_port_idx {
-	MT_TX_PORT_IDX_LMAC,
-	MT_TX_PORT_IDX_MCU
-};
-
-#endif /* __MT76_CONNAC2_MAC_H */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac_mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac_mac.c
deleted file mode 100644
index 60575bd..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac_mac.c
+++ /dev/null
@@ -1,1064 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include "mt76_connac.h"
-#include "mt76_connac2_mac.h"
-#include "dma.h"
-
-#define HE_BITS(f)		cpu_to_le16(IEEE80211_RADIOTAP_HE_##f)
-#define HE_PREP(f, m, v)	le16_encode_bits(le32_get_bits(v, MT_CRXV_HE_##m),\
-						 IEEE80211_RADIOTAP_HE_##f)
-
-int mt76_connac_pm_wake(struct mt76_phy *phy, struct mt76_connac_pm *pm)
-{
-	struct mt76_dev *dev = phy->dev;
-
-	if (mt76_is_usb(dev))
-		return 0;
-
-	cancel_delayed_work_sync(&pm->ps_work);
-	if (!test_bit(MT76_STATE_PM, &phy->state))
-		return 0;
-
-	if (pm->suspended)
-		return 0;
-
-	queue_work(dev->wq, &pm->wake_work);
-	if (!wait_event_timeout(pm->wait,
-				!test_bit(MT76_STATE_PM, &phy->state),
-				3 * HZ)) {
-		ieee80211_wake_queues(phy->hw);
-		return -ETIMEDOUT;
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_pm_wake);
-
-void mt76_connac_power_save_sched(struct mt76_phy *phy,
-				  struct mt76_connac_pm *pm)
-{
-	struct mt76_dev *dev = phy->dev;
-
-	if (mt76_is_usb(dev))
-		return;
-
-	if (!pm->enable)
-		return;
-
-	if (pm->suspended)
-		return;
-
-	pm->last_activity = jiffies;
-
-	if (!test_bit(MT76_STATE_PM, &phy->state)) {
-		cancel_delayed_work(&phy->mac_work);
-		queue_delayed_work(dev->wq, &pm->ps_work, pm->idle_timeout);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_connac_power_save_sched);
-
-void mt76_connac_free_pending_tx_skbs(struct mt76_connac_pm *pm,
-				      struct mt76_wcid *wcid)
-{
-	int i;
-
-	spin_lock_bh(&pm->txq_lock);
-	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-		if (wcid && pm->tx_q[i].wcid != wcid)
-			continue;
-
-		dev_kfree_skb(pm->tx_q[i].skb);
-		pm->tx_q[i].skb = NULL;
-	}
-	spin_unlock_bh(&pm->txq_lock);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_free_pending_tx_skbs);
-
-void mt76_connac_pm_queue_skb(struct ieee80211_hw *hw,
-			      struct mt76_connac_pm *pm,
-			      struct mt76_wcid *wcid,
-			      struct sk_buff *skb)
-{
-	int qid = skb_get_queue_mapping(skb);
-	struct mt76_phy *phy = hw->priv;
-
-	spin_lock_bh(&pm->txq_lock);
-	if (!pm->tx_q[qid].skb) {
-		ieee80211_stop_queues(hw);
-		pm->tx_q[qid].wcid = wcid;
-		pm->tx_q[qid].skb = skb;
-		queue_work(phy->dev->wq, &pm->wake_work);
-	} else {
-		dev_kfree_skb(skb);
-	}
-	spin_unlock_bh(&pm->txq_lock);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_pm_queue_skb);
-
-void mt76_connac_pm_dequeue_skbs(struct mt76_phy *phy,
-				 struct mt76_connac_pm *pm)
-{
-	int i;
-
-	spin_lock_bh(&pm->txq_lock);
-	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-		struct mt76_wcid *wcid = pm->tx_q[i].wcid;
-		struct ieee80211_sta *sta = NULL;
-
-		if (!pm->tx_q[i].skb)
-			continue;
-
-		if (wcid && wcid->sta)
-			sta = container_of((void *)wcid, struct ieee80211_sta,
-					   drv_priv);
-
-		mt76_tx(phy, sta, wcid, pm->tx_q[i].skb);
-		pm->tx_q[i].skb = NULL;
-	}
-	spin_unlock_bh(&pm->txq_lock);
-
-	mt76_worker_schedule(&phy->dev->tx_worker);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_pm_dequeue_skbs);
-
-void mt76_connac_tx_complete_skb(struct mt76_dev *mdev,
-				 struct mt76_queue_entry *e)
-{
-	if (!e->txwi) {
-		dev_kfree_skb_any(e->skb);
-		return;
-	}
-
-	/* error path */
-	if (e->skb == DMA_DUMMY_DATA) {
-		struct mt76_connac_txp_common *txp;
-		struct mt76_txwi_cache *t;
-		u16 token;
-
-		txp = mt76_connac_txwi_to_txp(mdev, e->txwi);
-		if (is_mt76_fw_txp(mdev))
-			token = le16_to_cpu(txp->fw.token);
-		else
-			token = le16_to_cpu(txp->hw.msdu_id[0]) &
-				~MT_MSDU_ID_VALID;
-
-		t = mt76_token_put(mdev, token);
-		e->skb = t ? t->skb : NULL;
-	}
-
-	if (e->skb)
-		mt76_tx_complete_skb(mdev, e->wcid, e->skb);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_tx_complete_skb);
-
-void mt76_connac_write_hw_txp(struct mt76_dev *dev,
-			      struct mt76_tx_info *tx_info,
-			      void *txp_ptr, u32 id)
-{
-	struct mt76_connac_hw_txp *txp = txp_ptr;
-	struct mt76_connac_txp_ptr *ptr = &txp->ptr[0];
-	int i, nbuf = tx_info->nbuf - 1;
-	u32 last_mask;
-
-	tx_info->buf[0].len = MT_TXD_SIZE + sizeof(*txp);
-	tx_info->nbuf = 1;
-
-	txp->msdu_id[0] = cpu_to_le16(id | MT_MSDU_ID_VALID);
-
-	if (is_mt7663(dev) || is_mt7921(dev))
-		last_mask = MT_TXD_LEN_LAST;
-	else
-		last_mask = MT_TXD_LEN_AMSDU_LAST |
-			    MT_TXD_LEN_MSDU_LAST;
-
-	for (i = 0; i < nbuf; i++) {
-		u16 len = tx_info->buf[i + 1].len & MT_TXD_LEN_MASK;
-		u32 addr = tx_info->buf[i + 1].addr;
-
-		if (i == nbuf - 1)
-			len |= last_mask;
-
-		if (i & 1) {
-			ptr->buf1 = cpu_to_le32(addr);
-			ptr->len1 = cpu_to_le16(len);
-			ptr++;
-		} else {
-			ptr->buf0 = cpu_to_le32(addr);
-			ptr->len0 = cpu_to_le16(len);
-		}
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_connac_write_hw_txp);
-
-static void
-mt76_connac_txp_skb_unmap_fw(struct mt76_dev *mdev,
-			     struct mt76_connac_fw_txp *txp)
-{
-	struct device *dev = is_connac_v1(mdev) ? mdev->dev : mdev->dma_dev;
-	int i;
-
-	for (i = 0; i < txp->nbuf; i++)
-		dma_unmap_single(dev, le32_to_cpu(txp->buf[i]),
-				 le16_to_cpu(txp->len[i]), DMA_TO_DEVICE);
-}
-
-static void
-mt76_connac_txp_skb_unmap_hw(struct mt76_dev *dev,
-			     struct mt76_connac_hw_txp *txp)
-{
-	u32 last_mask;
-	int i;
-
-	if (is_mt7663(dev) || is_mt7921(dev))
-		last_mask = MT_TXD_LEN_LAST;
-	else
-		last_mask = MT_TXD_LEN_MSDU_LAST;
-
-	for (i = 0; i < ARRAY_SIZE(txp->ptr); i++) {
-		struct mt76_connac_txp_ptr *ptr = &txp->ptr[i];
-		bool last;
-		u16 len;
-
-		len = le16_to_cpu(ptr->len0);
-		last = len & last_mask;
-		len &= MT_TXD_LEN_MASK;
-		dma_unmap_single(dev->dev, le32_to_cpu(ptr->buf0), len,
-				 DMA_TO_DEVICE);
-		if (last)
-			break;
-
-		len = le16_to_cpu(ptr->len1);
-		last = len & last_mask;
-		len &= MT_TXD_LEN_MASK;
-		dma_unmap_single(dev->dev, le32_to_cpu(ptr->buf1), len,
-				 DMA_TO_DEVICE);
-		if (last)
-			break;
-	}
-}
-
-void mt76_connac_txp_skb_unmap(struct mt76_dev *dev,
-			       struct mt76_txwi_cache *t)
-{
-	struct mt76_connac_txp_common *txp;
-
-	txp = mt76_connac_txwi_to_txp(dev, t);
-	if (is_mt76_fw_txp(dev))
-		mt76_connac_txp_skb_unmap_fw(dev, &txp->fw);
-	else
-		mt76_connac_txp_skb_unmap_hw(dev, &txp->hw);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_txp_skb_unmap);
-
-int mt76_connac_init_tx_queues(struct mt76_phy *phy, int idx, int n_desc,
-			       int ring_base, u32 flags)
-{
-	int i, err;
-
-	err = mt76_init_tx_queue(phy, 0, idx, n_desc, ring_base);
-	if (err < 0)
-		return err;
-
-	for (i = 1; i <= MT_TXQ_PSD; i++)
-		phy->q_tx[i] = phy->q_tx[0];
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_init_tx_queues);
-
-static u16
-mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy, struct ieee80211_vif *vif,
-			     bool beacon, bool mcast)
-{
-	u8 mode = 0, band = mphy->chandef.chan->band;
-	int rateidx = 0, mcast_rate;
-
-	if (!vif)
-		goto legacy;
-
-	if (is_mt7921(mphy->dev)) {
-		rateidx = ffs(vif->bss_conf.basic_rates) - 1;
-		goto legacy;
-	}
-
-	if (beacon) {
-		struct cfg80211_bitrate_mask *mask;
-
-		mask = &vif->bss_conf.beacon_tx_rate;
-		if (hweight16(mask->control[band].he_mcs[0]) == 1) {
-			rateidx = ffs(mask->control[band].he_mcs[0]) - 1;
-			mode = MT_PHY_TYPE_HE_SU;
-			goto out;
-		} else if (hweight16(mask->control[band].vht_mcs[0]) == 1) {
-			rateidx = ffs(mask->control[band].vht_mcs[0]) - 1;
-			mode = MT_PHY_TYPE_VHT;
-			goto out;
-		} else if (hweight8(mask->control[band].ht_mcs[0]) == 1) {
-			rateidx = ffs(mask->control[band].ht_mcs[0]) - 1;
-			mode = MT_PHY_TYPE_HT;
-			goto out;
-		} else if (hweight32(mask->control[band].legacy) == 1) {
-			rateidx = ffs(mask->control[band].legacy) - 1;
-			goto legacy;
-		}
-	}
-
-	mcast_rate = vif->bss_conf.mcast_rate[band];
-	if (mcast && mcast_rate > 0)
-		rateidx = mcast_rate - 1;
-	else
-		rateidx = ffs(vif->bss_conf.basic_rates) - 1;
-
-legacy:
-	rateidx = mt76_calculate_default_rate(mphy, rateidx);
-	mode = rateidx >> 8;
-	rateidx &= GENMASK(7, 0);
-
-out:
-	return FIELD_PREP(MT_TX_RATE_IDX, rateidx) |
-	       FIELD_PREP(MT_TX_RATE_MODE, mode);
-}
-
-static void
-mt76_connac2_mac_write_txwi_8023(__le32 *txwi, struct sk_buff *skb,
-				 struct mt76_wcid *wcid)
-{
-	u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
-	u8 fc_type, fc_stype;
-	u16 ethertype;
-	bool wmm = false;
-	u32 val;
-
-	if (wcid->sta) {
-		struct ieee80211_sta *sta;
-
-		sta = container_of((void *)wcid, struct ieee80211_sta, drv_priv);
-		wmm = sta->wme;
-	}
-
-	val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_3) |
-	      FIELD_PREP(MT_TXD1_TID, tid);
-
-	ethertype = get_unaligned_be16(&skb->data[12]);
-	if (ethertype >= ETH_P_802_3_MIN)
-		val |= MT_TXD1_ETH_802_3;
-
-	txwi[1] |= cpu_to_le32(val);
-
-	fc_type = IEEE80211_FTYPE_DATA >> 2;
-	fc_stype = wmm ? IEEE80211_STYPE_QOS_DATA >> 4 : 0;
-
-	val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
-	      FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype);
-
-	txwi[2] |= cpu_to_le32(val);
-
-	val = FIELD_PREP(MT_TXD7_TYPE, fc_type) |
-	      FIELD_PREP(MT_TXD7_SUB_TYPE, fc_stype);
-
-	txwi[7] |= cpu_to_le32(val);
-}
-
-static void
-mt76_connac2_mac_write_txwi_80211(struct mt76_dev *dev, __le32 *txwi,
-				  struct sk_buff *skb,
-				  struct ieee80211_key_conf *key)
-{
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-	struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	bool multicast = is_multicast_ether_addr(hdr->addr1);
-	u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
-	__le16 fc = hdr->frame_control;
-	u8 fc_type, fc_stype;
-	u32 val;
-
-	if (ieee80211_is_action(fc) &&
-	    mgmt->u.action.category == WLAN_CATEGORY_BACK &&
-	    mgmt->u.action.u.addba_req.action_code == WLAN_ACTION_ADDBA_REQ) {
-		u16 capab = le16_to_cpu(mgmt->u.action.u.addba_req.capab);
-
-		txwi[5] |= cpu_to_le32(MT_TXD5_ADD_BA);
-		tid = (capab >> 2) & IEEE80211_QOS_CTL_TID_MASK;
-	} else if (ieee80211_is_back_req(hdr->frame_control)) {
-		struct ieee80211_bar *bar = (struct ieee80211_bar *)hdr;
-		u16 control = le16_to_cpu(bar->control);
-
-		tid = FIELD_GET(IEEE80211_BAR_CTRL_TID_INFO_MASK, control);
-	}
-
-	val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_11) |
-	      FIELD_PREP(MT_TXD1_HDR_INFO,
-			 ieee80211_get_hdrlen_from_skb(skb) / 2) |
-	      FIELD_PREP(MT_TXD1_TID, tid);
-
-	txwi[1] |= cpu_to_le32(val);
-
-	fc_type = (le16_to_cpu(fc) & IEEE80211_FCTL_FTYPE) >> 2;
-	fc_stype = (le16_to_cpu(fc) & IEEE80211_FCTL_STYPE) >> 4;
-
-	val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
-	      FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype) |
-	      FIELD_PREP(MT_TXD2_MULTICAST, multicast);
-
-	if (key && multicast && ieee80211_is_robust_mgmt_frame(skb) &&
-	    key->cipher == WLAN_CIPHER_SUITE_AES_CMAC) {
-		val |= MT_TXD2_BIP;
-		txwi[3] &= ~cpu_to_le32(MT_TXD3_PROTECT_FRAME);
-	}
-
-	if (!ieee80211_is_data(fc) || multicast ||
-	    info->flags & IEEE80211_TX_CTL_USE_MINRATE)
-		val |= MT_TXD2_FIX_RATE;
-
-	txwi[2] |= cpu_to_le32(val);
-
-	if (ieee80211_is_beacon(fc)) {
-		txwi[3] &= ~cpu_to_le32(MT_TXD3_SW_POWER_MGMT);
-		txwi[3] |= cpu_to_le32(MT_TXD3_REM_TX_COUNT);
-	}
-
-	if (info->flags & IEEE80211_TX_CTL_INJECTED) {
-		u16 seqno = le16_to_cpu(hdr->seq_ctrl);
-
-		if (ieee80211_is_back_req(hdr->frame_control)) {
-			struct ieee80211_bar *bar;
-
-			bar = (struct ieee80211_bar *)skb->data;
-			seqno = le16_to_cpu(bar->start_seq_num);
-		}
-
-		val = MT_TXD3_SN_VALID |
-		      FIELD_PREP(MT_TXD3_SEQ, IEEE80211_SEQ_TO_SN(seqno));
-		txwi[3] |= cpu_to_le32(val);
-		txwi[7] &= ~cpu_to_le32(MT_TXD7_HW_AMSDU);
-	}
-
-	if (mt76_is_mmio(dev)) {
-		val = FIELD_PREP(MT_TXD7_TYPE, fc_type) |
-		      FIELD_PREP(MT_TXD7_SUB_TYPE, fc_stype);
-		txwi[7] |= cpu_to_le32(val);
-	} else {
-		val = FIELD_PREP(MT_TXD8_L_TYPE, fc_type) |
-		      FIELD_PREP(MT_TXD8_L_SUB_TYPE, fc_stype);
-		txwi[8] |= cpu_to_le32(val);
-	}
-}
-
-void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
-				 struct sk_buff *skb, struct mt76_wcid *wcid,
-				 struct ieee80211_key_conf *key, int pid,
-				 enum mt76_txq_id qid, u32 changed)
-{
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	u8 phy_idx = (info->hw_queue & MT_TX_HW_QUEUE_PHY) >> 2;
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt76_phy *mphy = &dev->phy;
-	u8 p_fmt, q_idx, omac_idx = 0, wmm_idx = 0, band_idx = 0;
-	u32 val, sz_txd = mt76_is_mmio(dev) ? MT_TXD_SIZE : MT_SDIO_TXD_SIZE;
-	bool is_8023 = info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP;
-	bool beacon = !!(changed & (BSS_CHANGED_BEACON |
-				    BSS_CHANGED_BEACON_ENABLED));
-	bool inband_disc = !!(changed & (BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |
-					 BSS_CHANGED_FILS_DISCOVERY));
-
-	if (vif) {
-		struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-
-		omac_idx = mvif->omac_idx;
-		wmm_idx = mvif->wmm_idx;
-		band_idx = mvif->band_idx;
-	}
-
-	if (phy_idx && dev->phys[MT_BAND1])
-		mphy = dev->phys[MT_BAND1];
-
-	if (inband_disc) {
-		p_fmt = MT_TX_TYPE_FW;
-		q_idx = MT_LMAC_ALTX0;
-	} else if (beacon) {
-		p_fmt = MT_TX_TYPE_FW;
-		q_idx = MT_LMAC_BCN0;
-	} else if (qid >= MT_TXQ_PSD) {
-		p_fmt = mt76_is_mmio(dev) ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
-		q_idx = MT_LMAC_ALTX0;
-	} else {
-		p_fmt = mt76_is_mmio(dev) ? MT_TX_TYPE_CT : MT_TX_TYPE_SF;
-		q_idx = wmm_idx * MT76_CONNAC_MAX_WMM_SETS +
-			mt76_connac_lmac_mapping(skb_get_queue_mapping(skb));
-
-		/* counting non-offloading skbs */
-		wcid->stats.tx_bytes += skb->len;
-		wcid->stats.tx_packets++;
-	}
-
-	val = FIELD_PREP(MT_TXD0_TX_BYTES, skb->len + sz_txd) |
-	      FIELD_PREP(MT_TXD0_PKT_FMT, p_fmt) |
-	      FIELD_PREP(MT_TXD0_Q_IDX, q_idx);
-	txwi[0] = cpu_to_le32(val);
-
-	val = MT_TXD1_LONG_FORMAT |
-	      FIELD_PREP(MT_TXD1_WLAN_IDX, wcid->idx) |
-	      FIELD_PREP(MT_TXD1_OWN_MAC, omac_idx);
-	if (!is_mt7921(dev))
-		val |= MT_TXD1_VTA;
-	if (phy_idx || band_idx)
-		val |= MT_TXD1_TGID;
-
-	txwi[1] = cpu_to_le32(val);
-	txwi[2] = 0;
-
-	val = FIELD_PREP(MT_TXD3_REM_TX_COUNT, 15);
-	if (!is_mt7921(dev))
-		val |= MT_TXD3_SW_POWER_MGMT;
-	if (key)
-		val |= MT_TXD3_PROTECT_FRAME;
-	if (info->flags & IEEE80211_TX_CTL_NO_ACK)
-		val |= MT_TXD3_NO_ACK;
-
-	txwi[3] = cpu_to_le32(val);
-	txwi[4] = 0;
-
-	val = FIELD_PREP(MT_TXD5_PID, pid);
-	if (pid >= MT_PACKET_ID_FIRST)
-		val |= MT_TXD5_TX_STATUS_HOST;
-
-	txwi[5] = cpu_to_le32(val);
-	txwi[6] = 0;
-	txwi[7] = wcid->amsdu ? cpu_to_le32(MT_TXD7_HW_AMSDU) : 0;
-
-	if (is_8023)
-		mt76_connac2_mac_write_txwi_8023(txwi, skb, wcid);
-	else
-		mt76_connac2_mac_write_txwi_80211(dev, txwi, skb, key);
-
-	if (txwi[2] & cpu_to_le32(MT_TXD2_FIX_RATE)) {
-		/* Fixed rata is available just for 802.11 txd */
-		struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-		bool multicast = is_multicast_ether_addr(hdr->addr1);
-		u16 rate = mt76_connac2_mac_tx_rate_val(mphy, vif, beacon,
-							multicast);
-		u32 val = MT_TXD6_FIXED_BW;
-
-		/* hardware won't add HTC for mgmt/ctrl frame */
-		txwi[2] |= cpu_to_le32(MT_TXD2_HTC_VLD);
-
-		val |= FIELD_PREP(MT_TXD6_TX_RATE, rate);
-		txwi[6] |= cpu_to_le32(val);
-		txwi[3] |= cpu_to_le32(MT_TXD3_BA_DISABLE);
-
-		if (!is_mt7921(dev)) {
-			u8 spe_idx = mt76_connac_spe_idx(mphy->antenna_mask);
-
-			if (!spe_idx)
-				spe_idx = 24 + phy_idx;
-			txwi[7] |= cpu_to_le32(FIELD_PREP(MT_TXD7_SPE_IDX, spe_idx));
-		}
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_connac2_mac_write_txwi);
-
-bool mt76_connac2_mac_fill_txs(struct mt76_dev *dev, struct mt76_wcid *wcid,
-			       __le32 *txs_data)
-{
-	struct mt76_sta_stats *stats = &wcid->stats;
-	struct ieee80211_supported_band *sband;
-	struct mt76_phy *mphy;
-	struct rate_info rate = {};
-	bool cck = false;
-	u32 txrate, txs, mode;
-
-	txs = le32_to_cpu(txs_data[0]);
-
-	/* PPDU based reporting */
-	if (FIELD_GET(MT_TXS0_TXS_FORMAT, txs) > 1) {
-		stats->tx_bytes +=
-			le32_get_bits(txs_data[5], MT_TXS5_MPDU_TX_BYTE);
-		stats->tx_packets +=
-			le32_get_bits(txs_data[5], MT_TXS5_MPDU_TX_CNT);
-		stats->tx_failed +=
-			le32_get_bits(txs_data[6], MT_TXS6_MPDU_FAIL_CNT);
-		stats->tx_retries +=
-			le32_get_bits(txs_data[7], MT_TXS7_MPDU_RETRY_CNT);
-	}
-
-	txrate = FIELD_GET(MT_TXS0_TX_RATE, txs);
-
-	rate.mcs = FIELD_GET(MT_TX_RATE_IDX, txrate);
-	rate.nss = FIELD_GET(MT_TX_RATE_NSS, txrate) + 1;
-
-	if (rate.nss - 1 < ARRAY_SIZE(stats->tx_nss))
-		stats->tx_nss[rate.nss - 1]++;
-	if (rate.mcs < ARRAY_SIZE(stats->tx_mcs))
-		stats->tx_mcs[rate.mcs]++;
-
-	mode = FIELD_GET(MT_TX_RATE_MODE, txrate);
-	switch (mode) {
-	case MT_PHY_TYPE_CCK:
-		cck = true;
-		fallthrough;
-	case MT_PHY_TYPE_OFDM:
-		mphy = &dev->phy;
-		if (wcid->phy_idx == MT_BAND1 && dev->phys[MT_BAND1])
-			mphy = dev->phys[MT_BAND1];
-
-		if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
-			sband = &mphy->sband_5g.sband;
-		else if (mphy->chandef.chan->band == NL80211_BAND_6GHZ)
-			sband = &mphy->sband_6g.sband;
-		else
-			sband = &mphy->sband_2g.sband;
-
-		rate.mcs = mt76_get_rate(mphy->dev, sband, rate.mcs, cck);
-		rate.legacy = sband->bitrates[rate.mcs].bitrate;
-		break;
-	case MT_PHY_TYPE_HT:
-	case MT_PHY_TYPE_HT_GF:
-		if (rate.mcs > 31)
-			return false;
-
-		rate.flags = RATE_INFO_FLAGS_MCS;
-		if (wcid->rate.flags & RATE_INFO_FLAGS_SHORT_GI)
-			rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
-		break;
-	case MT_PHY_TYPE_VHT:
-		if (rate.mcs > 9)
-			return false;
-
-		rate.flags = RATE_INFO_FLAGS_VHT_MCS;
-		break;
-	case MT_PHY_TYPE_HE_SU:
-	case MT_PHY_TYPE_HE_EXT_SU:
-	case MT_PHY_TYPE_HE_TB:
-	case MT_PHY_TYPE_HE_MU:
-		if (rate.mcs > 11)
-			return false;
-
-		rate.he_gi = wcid->rate.he_gi;
-		rate.he_dcm = FIELD_GET(MT_TX_RATE_DCM, txrate);
-		rate.flags = RATE_INFO_FLAGS_HE_MCS;
-		break;
-	default:
-		return false;
-	}
-
-	stats->tx_mode[mode]++;
-
-	switch (FIELD_GET(MT_TXS0_BW, txs)) {
-	case IEEE80211_STA_RX_BW_160:
-		rate.bw = RATE_INFO_BW_160;
-		stats->tx_bw[3]++;
-		break;
-	case IEEE80211_STA_RX_BW_80:
-		rate.bw = RATE_INFO_BW_80;
-		stats->tx_bw[2]++;
-		break;
-	case IEEE80211_STA_RX_BW_40:
-		rate.bw = RATE_INFO_BW_40;
-		stats->tx_bw[1]++;
-		break;
-	default:
-		rate.bw = RATE_INFO_BW_20;
-		stats->tx_bw[0]++;
-		break;
-	}
-	wcid->rate = rate;
-
-	return true;
-}
-EXPORT_SYMBOL_GPL(mt76_connac2_mac_fill_txs);
-
-bool mt76_connac2_mac_add_txs_skb(struct mt76_dev *dev, struct mt76_wcid *wcid,
-				  int pid, __le32 *txs_data)
-{
-	struct sk_buff_head list;
-	struct sk_buff *skb;
-
-	mt76_tx_status_lock(dev, &list);
-	skb = mt76_tx_status_skb_get(dev, wcid, pid, &list);
-	if (skb) {
-		struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-		bool noacked = !(info->flags & IEEE80211_TX_STAT_ACK);
-
-		if (!(le32_to_cpu(txs_data[0]) & MT_TXS0_ACK_ERROR_MASK))
-			info->flags |= IEEE80211_TX_STAT_ACK;
-
-		info->status.ampdu_len = 1;
-		info->status.ampdu_ack_len = !noacked;
-		info->status.rates[0].idx = -1;
-
-		wcid->stats.tx_failed += noacked;
-
-		mt76_connac2_mac_fill_txs(dev, wcid, txs_data);
-		mt76_tx_status_skb_done(dev, skb, &list);
-	}
-	mt76_tx_status_unlock(dev, &list);
-
-	return !!skb;
-}
-EXPORT_SYMBOL_GPL(mt76_connac2_mac_add_txs_skb);
-
-static void
-mt76_connac2_mac_decode_he_radiotap_ru(struct mt76_rx_status *status,
-				       struct ieee80211_radiotap_he *he,
-				       __le32 *rxv)
-{
-	u32 ru_h, ru_l;
-	u8 ru, offs = 0;
-
-	ru_l = le32_get_bits(rxv[0], MT_PRXV_HE_RU_ALLOC_L);
-	ru_h = le32_get_bits(rxv[1], MT_PRXV_HE_RU_ALLOC_H);
-	ru = (u8)(ru_l | ru_h << 4);
-
-	status->bw = RATE_INFO_BW_HE_RU;
-
-	switch (ru) {
-	case 0 ... 36:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_26;
-		offs = ru;
-		break;
-	case 37 ... 52:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_52;
-		offs = ru - 37;
-		break;
-	case 53 ... 60:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_106;
-		offs = ru - 53;
-		break;
-	case 61 ... 64:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_242;
-		offs = ru - 61;
-		break;
-	case 65 ... 66:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_484;
-		offs = ru - 65;
-		break;
-	case 67:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_996;
-		break;
-	case 68:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_2x996;
-		break;
-	}
-
-	he->data1 |= HE_BITS(DATA1_BW_RU_ALLOC_KNOWN);
-	he->data2 |= HE_BITS(DATA2_RU_OFFSET_KNOWN) |
-		     le16_encode_bits(offs,
-				      IEEE80211_RADIOTAP_HE_DATA2_RU_OFFSET);
-}
-
-static void
-mt76_connac2_mac_decode_he_mu_radiotap(struct mt76_dev *dev, struct sk_buff *skb,
-				       __le32 *rxv)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	static struct ieee80211_radiotap_he_mu mu_known = {
-		.flags1 = HE_BITS(MU_FLAGS1_SIG_B_MCS_KNOWN) |
-			  HE_BITS(MU_FLAGS1_SIG_B_DCM_KNOWN) |
-			  HE_BITS(MU_FLAGS1_CH1_RU_KNOWN) |
-			  HE_BITS(MU_FLAGS1_SIG_B_SYMS_USERS_KNOWN),
-		.flags2 = HE_BITS(MU_FLAGS2_BW_FROM_SIG_A_BW_KNOWN),
-	};
-	struct ieee80211_radiotap_he_mu *he_mu;
-
-	if (is_mt7921(dev)) {
-		mu_known.flags1 |= HE_BITS(MU_FLAGS1_SIG_B_COMP_KNOWN);
-		mu_known.flags2 |= HE_BITS(MU_FLAGS2_PUNC_FROM_SIG_A_BW_KNOWN);
-	}
-
-	status->flag |= RX_FLAG_RADIOTAP_HE_MU;
-
-	he_mu = skb_push(skb, sizeof(mu_known));
-	memcpy(he_mu, &mu_known, sizeof(mu_known));
-
-#define MU_PREP(f, v)	le16_encode_bits(v, IEEE80211_RADIOTAP_HE_MU_##f)
-
-	he_mu->flags1 |= MU_PREP(FLAGS1_SIG_B_MCS, status->rate_idx);
-	if (status->he_dcm)
-		he_mu->flags1 |= MU_PREP(FLAGS1_SIG_B_DCM, status->he_dcm);
-
-	he_mu->flags2 |= MU_PREP(FLAGS2_BW_FROM_SIG_A_BW, status->bw) |
-			 MU_PREP(FLAGS2_SIG_B_SYMS_USERS,
-				 le32_get_bits(rxv[2], MT_CRXV_HE_NUM_USER));
-
-	he_mu->ru_ch1[0] = le32_get_bits(rxv[3], MT_CRXV_HE_RU0);
-
-	if (status->bw >= RATE_INFO_BW_40) {
-		he_mu->flags1 |= HE_BITS(MU_FLAGS1_CH2_RU_KNOWN);
-		he_mu->ru_ch2[0] =
-			le32_get_bits(rxv[3], MT_CRXV_HE_RU1);
-	}
-
-	if (status->bw >= RATE_INFO_BW_80) {
-		he_mu->ru_ch1[1] =
-			le32_get_bits(rxv[3], MT_CRXV_HE_RU2);
-		he_mu->ru_ch2[1] =
-			le32_get_bits(rxv[3], MT_CRXV_HE_RU3);
-	}
-}
-
-void mt76_connac2_mac_decode_he_radiotap(struct mt76_dev *dev,
-					 struct sk_buff *skb,
-					 __le32 *rxv, u32 mode)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	static const struct ieee80211_radiotap_he known = {
-		.data1 = HE_BITS(DATA1_DATA_MCS_KNOWN) |
-			 HE_BITS(DATA1_DATA_DCM_KNOWN) |
-			 HE_BITS(DATA1_STBC_KNOWN) |
-			 HE_BITS(DATA1_CODING_KNOWN) |
-			 HE_BITS(DATA1_LDPC_XSYMSEG_KNOWN) |
-			 HE_BITS(DATA1_DOPPLER_KNOWN) |
-			 HE_BITS(DATA1_SPTL_REUSE_KNOWN) |
-			 HE_BITS(DATA1_BSS_COLOR_KNOWN),
-		.data2 = HE_BITS(DATA2_GI_KNOWN) |
-			 HE_BITS(DATA2_TXBF_KNOWN) |
-			 HE_BITS(DATA2_PE_DISAMBIG_KNOWN) |
-			 HE_BITS(DATA2_TXOP_KNOWN),
-	};
-	u32 ltf_size = le32_get_bits(rxv[2], MT_CRXV_HE_LTF_SIZE) + 1;
-	struct ieee80211_radiotap_he *he;
-
-	status->flag |= RX_FLAG_RADIOTAP_HE;
-
-	he = skb_push(skb, sizeof(known));
-	memcpy(he, &known, sizeof(known));
-
-	he->data3 = HE_PREP(DATA3_BSS_COLOR, BSS_COLOR, rxv[14]) |
-		    HE_PREP(DATA3_LDPC_XSYMSEG, LDPC_EXT_SYM, rxv[2]);
-	he->data4 = HE_PREP(DATA4_SU_MU_SPTL_REUSE, SR_MASK, rxv[11]);
-	he->data5 = HE_PREP(DATA5_PE_DISAMBIG, PE_DISAMBIG, rxv[2]) |
-		    le16_encode_bits(ltf_size,
-				     IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE);
-	if (le32_to_cpu(rxv[0]) & MT_PRXV_TXBF)
-		he->data5 |= HE_BITS(DATA5_TXBF);
-	he->data6 = HE_PREP(DATA6_TXOP, TXOP_DUR, rxv[14]) |
-		    HE_PREP(DATA6_DOPPLER, DOPPLER, rxv[14]);
-
-	switch (mode) {
-	case MT_PHY_TYPE_HE_SU:
-		he->data1 |= HE_BITS(DATA1_FORMAT_SU) |
-			     HE_BITS(DATA1_UL_DL_KNOWN) |
-			     HE_BITS(DATA1_BEAM_CHANGE_KNOWN) |
-			     HE_BITS(DATA1_BW_RU_ALLOC_KNOWN);
-
-		he->data3 |= HE_PREP(DATA3_BEAM_CHANGE, BEAM_CHNG, rxv[14]) |
-			     HE_PREP(DATA3_UL_DL, UPLINK, rxv[2]);
-		break;
-	case MT_PHY_TYPE_HE_EXT_SU:
-		he->data1 |= HE_BITS(DATA1_FORMAT_EXT_SU) |
-			     HE_BITS(DATA1_UL_DL_KNOWN) |
-			     HE_BITS(DATA1_BW_RU_ALLOC_KNOWN);
-
-		he->data3 |= HE_PREP(DATA3_UL_DL, UPLINK, rxv[2]);
-		break;
-	case MT_PHY_TYPE_HE_MU:
-		he->data1 |= HE_BITS(DATA1_FORMAT_MU) |
-			     HE_BITS(DATA1_UL_DL_KNOWN);
-
-		he->data3 |= HE_PREP(DATA3_UL_DL, UPLINK, rxv[2]);
-		he->data4 |= HE_PREP(DATA4_MU_STA_ID, MU_AID, rxv[7]);
-
-		mt76_connac2_mac_decode_he_radiotap_ru(status, he, rxv);
-		mt76_connac2_mac_decode_he_mu_radiotap(dev, skb, rxv);
-		break;
-	case MT_PHY_TYPE_HE_TB:
-		he->data1 |= HE_BITS(DATA1_FORMAT_TRIG) |
-			     HE_BITS(DATA1_SPTL_REUSE2_KNOWN) |
-			     HE_BITS(DATA1_SPTL_REUSE3_KNOWN) |
-			     HE_BITS(DATA1_SPTL_REUSE4_KNOWN);
-
-		he->data4 |= HE_PREP(DATA4_TB_SPTL_REUSE1, SR_MASK, rxv[11]) |
-			     HE_PREP(DATA4_TB_SPTL_REUSE2, SR1_MASK, rxv[11]) |
-			     HE_PREP(DATA4_TB_SPTL_REUSE3, SR2_MASK, rxv[11]) |
-			     HE_PREP(DATA4_TB_SPTL_REUSE4, SR3_MASK, rxv[11]);
-
-		mt76_connac2_mac_decode_he_radiotap_ru(status, he, rxv);
-		break;
-	default:
-		break;
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_connac2_mac_decode_he_radiotap);
-
-/* The HW does not translate the mac header to 802.3 for mesh point */
-int mt76_connac2_reverse_frag0_hdr_trans(struct ieee80211_vif *vif,
-					 struct sk_buff *skb, u16 hdr_offset)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct ethhdr *eth_hdr = (struct ethhdr *)(skb->data + hdr_offset);
-	__le32 *rxd = (__le32 *)skb->data;
-	struct ieee80211_sta *sta;
-	struct ieee80211_hdr hdr;
-	u16 frame_control;
-
-	if (le32_get_bits(rxd[3], MT_RXD3_NORMAL_ADDR_TYPE) !=
-	    MT_RXD3_NORMAL_U2M)
-		return -EINVAL;
-
-	if (!(le32_to_cpu(rxd[1]) & MT_RXD1_NORMAL_GROUP_4))
-		return -EINVAL;
-
-	sta = container_of((void *)status->wcid, struct ieee80211_sta, drv_priv);
-
-	/* store the info from RXD and ethhdr to avoid being overridden */
-	frame_control = le32_get_bits(rxd[6], MT_RXD6_FRAME_CONTROL);
-	hdr.frame_control = cpu_to_le16(frame_control);
-	hdr.seq_ctrl = cpu_to_le16(le32_get_bits(rxd[8], MT_RXD8_SEQ_CTRL));
-	hdr.duration_id = 0;
-
-	ether_addr_copy(hdr.addr1, vif->addr);
-	ether_addr_copy(hdr.addr2, sta->addr);
-	switch (frame_control & (IEEE80211_FCTL_TODS |
-				 IEEE80211_FCTL_FROMDS)) {
-	case 0:
-		ether_addr_copy(hdr.addr3, vif->bss_conf.bssid);
-		break;
-	case IEEE80211_FCTL_FROMDS:
-		ether_addr_copy(hdr.addr3, eth_hdr->h_source);
-		break;
-	case IEEE80211_FCTL_TODS:
-		ether_addr_copy(hdr.addr3, eth_hdr->h_dest);
-		break;
-	case IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS:
-		ether_addr_copy(hdr.addr3, eth_hdr->h_dest);
-		ether_addr_copy(hdr.addr4, eth_hdr->h_source);
-		break;
-	default:
-		break;
-	}
-
-	skb_pull(skb, hdr_offset + sizeof(struct ethhdr) - 2);
-	if (eth_hdr->h_proto == cpu_to_be16(ETH_P_AARP) ||
-	    eth_hdr->h_proto == cpu_to_be16(ETH_P_IPX))
-		ether_addr_copy(skb_push(skb, ETH_ALEN), bridge_tunnel_header);
-	else if (be16_to_cpu(eth_hdr->h_proto) >= ETH_P_802_3_MIN)
-		ether_addr_copy(skb_push(skb, ETH_ALEN), rfc1042_header);
-	else
-		skb_pull(skb, 2);
-
-	if (ieee80211_has_order(hdr.frame_control))
-		memcpy(skb_push(skb, IEEE80211_HT_CTL_LEN), &rxd[9],
-		       IEEE80211_HT_CTL_LEN);
-	if (ieee80211_is_data_qos(hdr.frame_control)) {
-		__le16 qos_ctrl;
-
-		qos_ctrl = cpu_to_le16(le32_get_bits(rxd[8], MT_RXD8_QOS_CTL));
-		memcpy(skb_push(skb, IEEE80211_QOS_CTL_LEN), &qos_ctrl,
-		       IEEE80211_QOS_CTL_LEN);
-	}
-
-	if (ieee80211_has_a4(hdr.frame_control))
-		memcpy(skb_push(skb, sizeof(hdr)), &hdr, sizeof(hdr));
-	else
-		memcpy(skb_push(skb, sizeof(hdr) - 6), &hdr, sizeof(hdr) - 6);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_connac2_reverse_frag0_hdr_trans);
-
-int mt76_connac2_mac_fill_rx_rate(struct mt76_dev *dev,
-				  struct mt76_rx_status *status,
-				  struct ieee80211_supported_band *sband,
-				  __le32 *rxv, u8 *mode)
-{
-	u32 v0, v2;
-	u8 stbc, gi, bw, dcm, nss;
-	int i, idx;
-	bool cck = false;
-
-	v0 = le32_to_cpu(rxv[0]);
-	v2 = le32_to_cpu(rxv[2]);
-
-	idx = i = FIELD_GET(MT_PRXV_TX_RATE, v0);
-	nss = FIELD_GET(MT_PRXV_NSTS, v0) + 1;
-
-	if (!is_mt7915(dev)) {
-		stbc = FIELD_GET(MT_PRXV_HT_STBC, v0);
-		gi = FIELD_GET(MT_PRXV_HT_SGI, v0);
-		*mode = FIELD_GET(MT_PRXV_TX_MODE, v0);
-		if (is_mt7921(dev))
-			dcm = !!(idx & MT_PRXV_TX_DCM);
-		else
-			dcm = FIELD_GET(MT_PRXV_DCM, v0);
-		bw = FIELD_GET(MT_PRXV_FRAME_MODE, v0);
-	} else {
-		stbc = FIELD_GET(MT_CRXV_HT_STBC, v2);
-		gi = FIELD_GET(MT_CRXV_HT_SHORT_GI, v2);
-		*mode = FIELD_GET(MT_CRXV_TX_MODE, v2);
-		dcm = !!(idx & GENMASK(3, 0) & MT_PRXV_TX_DCM);
-		bw = FIELD_GET(MT_CRXV_FRAME_MODE, v2);
-	}
-
-	switch (*mode) {
-	case MT_PHY_TYPE_CCK:
-		cck = true;
-		fallthrough;
-	case MT_PHY_TYPE_OFDM:
-		i = mt76_get_rate(dev, sband, i, cck);
-		break;
-	case MT_PHY_TYPE_HT_GF:
-	case MT_PHY_TYPE_HT:
-		status->encoding = RX_ENC_HT;
-		if (gi)
-			status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-		if (i > 31)
-			return -EINVAL;
-		break;
-	case MT_PHY_TYPE_VHT:
-		status->nss = nss;
-		status->encoding = RX_ENC_VHT;
-		if (gi)
-			status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-		if (i > 11)
-			return -EINVAL;
-		break;
-	case MT_PHY_TYPE_HE_MU:
-	case MT_PHY_TYPE_HE_SU:
-	case MT_PHY_TYPE_HE_EXT_SU:
-	case MT_PHY_TYPE_HE_TB:
-		status->nss = nss;
-		status->encoding = RX_ENC_HE;
-		i &= GENMASK(3, 0);
-
-		if (gi <= NL80211_RATE_INFO_HE_GI_3_2)
-			status->he_gi = gi;
-
-		status->he_dcm = dcm;
-		break;
-	default:
-		return -EINVAL;
-	}
-	status->rate_idx = i;
-
-	switch (bw) {
-	case IEEE80211_STA_RX_BW_20:
-		break;
-	case IEEE80211_STA_RX_BW_40:
-		if (*mode & MT_PHY_TYPE_HE_EXT_SU &&
-		    (idx & MT_PRXV_TX_ER_SU_106T)) {
-			status->bw = RATE_INFO_BW_HE_RU;
-			status->he_ru =
-				NL80211_RATE_INFO_HE_RU_ALLOC_106;
-		} else {
-			status->bw = RATE_INFO_BW_40;
-		}
-		break;
-	case IEEE80211_STA_RX_BW_80:
-		status->bw = RATE_INFO_BW_80;
-		break;
-	case IEEE80211_STA_RX_BW_160:
-		status->bw = RATE_INFO_BW_160;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	status->enc_flags |= RX_ENC_FLAG_STBC_MASK * stbc;
-	if (*mode < MT_PHY_TYPE_HE_SU && gi)
-		status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_connac2_mac_fill_rx_rate);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac_mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac_mcu.c
deleted file mode 100644
index bd9875a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac_mcu.c
+++ /dev/null
@@ -1,3153 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/firmware.h>
-#include "mt76_connac2_mac.h"
-#include "mt76_connac_mcu.h"
-
-int mt76_connac_mcu_start_firmware(struct mt76_dev *dev, u32 addr, u32 option)
-{
-	struct {
-		__le32 option;
-		__le32 addr;
-	} req = {
-		.option = cpu_to_le32(option),
-		.addr = cpu_to_le32(addr),
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_CMD(FW_START_REQ), &req,
-				 sizeof(req), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_start_firmware);
-
-int mt76_connac_mcu_patch_sem_ctrl(struct mt76_dev *dev, bool get)
-{
-	u32 op = get ? PATCH_SEM_GET : PATCH_SEM_RELEASE;
-	struct {
-		__le32 op;
-	} req = {
-		.op = cpu_to_le32(op),
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_CMD(PATCH_SEM_CONTROL),
-				 &req, sizeof(req), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_patch_sem_ctrl);
-
-int mt76_connac_mcu_start_patch(struct mt76_dev *dev)
-{
-	struct {
-		u8 check_crc;
-		u8 reserved[3];
-	} req = {
-		.check_crc = 0,
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_CMD(PATCH_FINISH_REQ),
-				 &req, sizeof(req), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_start_patch);
-
-#define MCU_PATCH_ADDRESS	0x200000
-
-int mt76_connac_mcu_init_download(struct mt76_dev *dev, u32 addr, u32 len,
-				  u32 mode)
-{
-	struct {
-		__le32 addr;
-		__le32 len;
-		__le32 mode;
-	} req = {
-		.addr = cpu_to_le32(addr),
-		.len = cpu_to_le32(len),
-		.mode = cpu_to_le32(mode),
-	};
-	int cmd;
-
-	if ((!is_connac_v1(dev) && addr == MCU_PATCH_ADDRESS) ||
-	    (is_mt7921(dev) && addr == 0x900000) ||
-	    (is_mt7996(dev) && addr == 0x900000))
-		cmd = MCU_CMD(PATCH_START_REQ);
-	else
-		cmd = MCU_CMD(TARGET_ADDRESS_LEN_REQ);
-
-	return mt76_mcu_send_msg(dev, cmd, &req, sizeof(req), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_init_download);
-
-int mt76_connac_mcu_set_channel_domain(struct mt76_phy *phy)
-{
-	int len, i, n_max_channels, n_2ch = 0, n_5ch = 0, n_6ch = 0;
-	struct mt76_connac_mcu_channel_domain {
-		u8 alpha2[4]; /* regulatory_request.alpha2 */
-		u8 bw_2g; /* BW_20_40M		0
-			   * BW_20M		1
-			   * BW_20_40_80M	2
-			   * BW_20_40_80_160M	3
-			   * BW_20_40_80_8080M	4
-			   */
-		u8 bw_5g;
-		u8 bw_6g;
-		u8 pad;
-		u8 n_2ch;
-		u8 n_5ch;
-		u8 n_6ch;
-		u8 pad2;
-	} __packed hdr = {
-		.bw_2g = 0,
-		.bw_5g = 3, /* BW_20_40_80_160M */
-		.bw_6g = 3,
-	};
-	struct mt76_connac_mcu_chan {
-		__le16 hw_value;
-		__le16 pad;
-		__le32 flags;
-	} __packed channel;
-	struct mt76_dev *dev = phy->dev;
-	struct ieee80211_channel *chan;
-	struct sk_buff *skb;
-
-	n_max_channels = phy->sband_2g.sband.n_channels +
-			 phy->sband_5g.sband.n_channels +
-			 phy->sband_6g.sband.n_channels;
-	len = sizeof(hdr) + n_max_channels * sizeof(channel);
-
-	skb = mt76_mcu_msg_alloc(dev, NULL, len);
-	if (!skb)
-		return -ENOMEM;
-
-	skb_reserve(skb, sizeof(hdr));
-
-	for (i = 0; i < phy->sband_2g.sband.n_channels; i++) {
-		chan = &phy->sband_2g.sband.channels[i];
-		if (chan->flags & IEEE80211_CHAN_DISABLED)
-			continue;
-
-		channel.hw_value = cpu_to_le16(chan->hw_value);
-		channel.flags = cpu_to_le32(chan->flags);
-		channel.pad = 0;
-
-		skb_put_data(skb, &channel, sizeof(channel));
-		n_2ch++;
-	}
-	for (i = 0; i < phy->sband_5g.sband.n_channels; i++) {
-		chan = &phy->sband_5g.sband.channels[i];
-		if (chan->flags & IEEE80211_CHAN_DISABLED)
-			continue;
-
-		channel.hw_value = cpu_to_le16(chan->hw_value);
-		channel.flags = cpu_to_le32(chan->flags);
-		channel.pad = 0;
-
-		skb_put_data(skb, &channel, sizeof(channel));
-		n_5ch++;
-	}
-	for (i = 0; i < phy->sband_6g.sband.n_channels; i++) {
-		chan = &phy->sband_6g.sband.channels[i];
-		if (chan->flags & IEEE80211_CHAN_DISABLED)
-			continue;
-
-		channel.hw_value = cpu_to_le16(chan->hw_value);
-		channel.flags = cpu_to_le32(chan->flags);
-		channel.pad = 0;
-
-		skb_put_data(skb, &channel, sizeof(channel));
-		n_6ch++;
-	}
-
-	BUILD_BUG_ON(sizeof(dev->alpha2) > sizeof(hdr.alpha2));
-	memcpy(hdr.alpha2, dev->alpha2, sizeof(dev->alpha2));
-	hdr.n_2ch = n_2ch;
-	hdr.n_5ch = n_5ch;
-	hdr.n_6ch = n_6ch;
-
-	memcpy(__skb_push(skb, sizeof(hdr)), &hdr, sizeof(hdr));
-
-	return mt76_mcu_skb_send_msg(dev, skb, MCU_CE_CMD(SET_CHAN_DOMAIN),
-				     false);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_channel_domain);
-
-int mt76_connac_mcu_set_mac_enable(struct mt76_dev *dev, int band, bool enable,
-				   bool hdr_trans)
-{
-	struct {
-		u8 enable;
-		u8 band;
-		u8 rsv[2];
-	} __packed req_mac = {
-		.enable = enable,
-		.band = band,
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_EXT_CMD(MAC_INIT_CTRL), &req_mac,
-				 sizeof(req_mac), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_mac_enable);
-
-int mt76_connac_mcu_set_vif_ps(struct mt76_dev *dev, struct ieee80211_vif *vif)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct {
-		u8 bss_idx;
-		u8 ps_state; /* 0: device awake
-			      * 1: static power save
-			      * 2: dynamic power saving
-			      */
-	} req = {
-		.bss_idx = mvif->idx,
-		.ps_state = vif->bss_conf.ps ? 2 : 0,
-	};
-
-	if (vif->type != NL80211_IFTYPE_STATION)
-		return -EOPNOTSUPP;
-
-	return mt76_mcu_send_msg(dev, MCU_CE_CMD(SET_PS_PROFILE),
-				 &req, sizeof(req), false);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_vif_ps);
-
-int mt76_connac_mcu_set_rts_thresh(struct mt76_dev *dev, u32 val, u8 band)
-{
-	struct {
-		u8 prot_idx;
-		u8 band;
-		u8 rsv[2];
-		__le32 len_thresh;
-		__le32 pkt_thresh;
-	} __packed req = {
-		.prot_idx = 1,
-		.band = band,
-		.len_thresh = cpu_to_le32(val),
-		.pkt_thresh = cpu_to_le32(0x2),
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_EXT_CMD(PROTECT_CTRL), &req,
-				 sizeof(req), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_rts_thresh);
-
-void mt76_connac_mcu_beacon_loss_iter(void *priv, u8 *mac,
-				      struct ieee80211_vif *vif)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct mt76_connac_beacon_loss_event *event = priv;
-
-	if (mvif->idx != event->bss_idx)
-		return;
-
-	if (!(vif->driver_flags & IEEE80211_VIF_BEACON_FILTER))
-		return;
-
-	ieee80211_beacon_loss(vif);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_beacon_loss_iter);
-
-struct tlv *
-mt76_connac_mcu_add_nested_tlv(struct sk_buff *skb, int tag, int len,
-			       void *sta_ntlv, void *sta_wtbl)
-{
-	struct sta_ntlv_hdr *ntlv_hdr = sta_ntlv;
-	struct tlv *sta_hdr = sta_wtbl;
-	struct tlv *ptlv, tlv = {
-		.tag = cpu_to_le16(tag),
-		.len = cpu_to_le16(len),
-	};
-	u16 ntlv;
-
-	ptlv = skb_put(skb, len);
-	memcpy(ptlv, &tlv, sizeof(tlv));
-
-	ntlv = le16_to_cpu(ntlv_hdr->tlv_num);
-	ntlv_hdr->tlv_num = cpu_to_le16(ntlv + 1);
-
-	if (sta_hdr) {
-		len += le16_to_cpu(sta_hdr->len);
-		sta_hdr->len = cpu_to_le16(len);
-	}
-
-	return ptlv;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_add_nested_tlv);
-
-struct sk_buff *
-__mt76_connac_mcu_alloc_sta_req(struct mt76_dev *dev, struct mt76_vif *mvif,
-				struct mt76_wcid *wcid, int len)
-{
-	struct sta_req_hdr hdr = {
-		.bss_idx = mvif->idx,
-		.muar_idx = wcid ? mvif->omac_idx : 0,
-		.is_tlv_append = 1,
-	};
-	struct sk_buff *skb;
-
-	mt76_connac_mcu_get_wlan_idx(dev, wcid, &hdr.wlan_idx_lo,
-				     &hdr.wlan_idx_hi);
-	skb = mt76_mcu_msg_alloc(dev, NULL, len);
-	if (!skb)
-		return ERR_PTR(-ENOMEM);
-
-	skb_put_data(skb, &hdr, sizeof(hdr));
-
-	return skb;
-}
-EXPORT_SYMBOL_GPL(__mt76_connac_mcu_alloc_sta_req);
-
-struct wtbl_req_hdr *
-mt76_connac_mcu_alloc_wtbl_req(struct mt76_dev *dev, struct mt76_wcid *wcid,
-			       int cmd, void *sta_wtbl, struct sk_buff **skb)
-{
-	struct tlv *sta_hdr = sta_wtbl;
-	struct wtbl_req_hdr hdr = {
-		.operation = cmd,
-	};
-	struct sk_buff *nskb = *skb;
-
-	mt76_connac_mcu_get_wlan_idx(dev, wcid, &hdr.wlan_idx_lo,
-				     &hdr.wlan_idx_hi);
-	if (!nskb) {
-		nskb = mt76_mcu_msg_alloc(dev, NULL,
-					  MT76_CONNAC_WTBL_UPDATE_MAX_SIZE);
-		if (!nskb)
-			return ERR_PTR(-ENOMEM);
-
-		*skb = nskb;
-	}
-
-	if (sta_hdr)
-		le16_add_cpu(&sta_hdr->len, sizeof(hdr));
-
-	return skb_put_data(nskb, &hdr, sizeof(hdr));
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_alloc_wtbl_req);
-
-void mt76_connac_mcu_bss_omac_tlv(struct sk_buff *skb,
-				  struct ieee80211_vif *vif)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	u8 omac_idx = mvif->omac_idx;
-	struct bss_info_omac *omac;
-	struct tlv *tlv;
-	u32 type = 0;
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_MONITOR:
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_AP:
-		if (vif->p2p)
-			type = CONNECTION_P2P_GO;
-		else
-			type = CONNECTION_INFRA_AP;
-		break;
-	case NL80211_IFTYPE_STATION:
-		if (vif->p2p)
-			type = CONNECTION_P2P_GC;
-		else
-			type = CONNECTION_INFRA_STA;
-		break;
-	case NL80211_IFTYPE_ADHOC:
-		type = CONNECTION_IBSS_ADHOC;
-		break;
-	default:
-		WARN_ON(1);
-		break;
-	}
-
-	tlv = mt76_connac_mcu_add_tlv(skb, BSS_INFO_OMAC, sizeof(*omac));
-
-	omac = (struct bss_info_omac *)tlv;
-	omac->conn_type = cpu_to_le32(type);
-	omac->omac_idx = mvif->omac_idx;
-	omac->band_idx = mvif->band_idx;
-	omac->hw_bss_idx = omac_idx > EXT_BSSID_START ? HW_BSSID_0 : omac_idx;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_bss_omac_tlv);
-
-void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
-				   struct ieee80211_vif *vif,
-				   struct ieee80211_sta *sta,
-				   bool enable, bool newly)
-{
-	struct sta_rec_basic *basic;
-	struct tlv *tlv;
-	int conn_type;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_BASIC, sizeof(*basic));
-
-	basic = (struct sta_rec_basic *)tlv;
-	basic->extra_info = cpu_to_le16(EXTRA_INFO_VER);
-
-	if (enable) {
-		if (newly)
-			basic->extra_info |= cpu_to_le16(EXTRA_INFO_NEW);
-		basic->conn_state = CONN_STATE_PORT_SECURE;
-	} else {
-		basic->conn_state = CONN_STATE_DISCONNECT;
-	}
-
-	if (!sta) {
-		basic->conn_type = cpu_to_le32(CONNECTION_INFRA_BC);
-		eth_broadcast_addr(basic->peer_addr);
-		return;
-	}
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_AP:
-		if (vif->p2p)
-			conn_type = CONNECTION_P2P_GC;
-		else
-			conn_type = CONNECTION_INFRA_STA;
-		basic->conn_type = cpu_to_le32(conn_type);
-		basic->aid = cpu_to_le16(sta->aid);
-		break;
-	case NL80211_IFTYPE_STATION:
-		if (vif->p2p)
-			conn_type = CONNECTION_P2P_GO;
-		else
-			conn_type = CONNECTION_INFRA_AP;
-		basic->conn_type = cpu_to_le32(conn_type);
-		basic->aid = cpu_to_le16(vif->bss_conf.aid);
-		break;
-	case NL80211_IFTYPE_ADHOC:
-		basic->conn_type = cpu_to_le32(CONNECTION_IBSS_ADHOC);
-		basic->aid = cpu_to_le16(sta->aid);
-		break;
-	default:
-		WARN_ON(1);
-		break;
-	}
-
-	memcpy(basic->peer_addr, sta->addr, ETH_ALEN);
-	basic->qos = sta->wme;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_basic_tlv);
-
-void mt76_connac_mcu_sta_uapsd(struct sk_buff *skb, struct ieee80211_vif *vif,
-			       struct ieee80211_sta *sta)
-{
-	struct sta_rec_uapsd *uapsd;
-	struct tlv *tlv;
-
-	if (vif->type != NL80211_IFTYPE_AP || !sta->wme)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_APPS, sizeof(*uapsd));
-	uapsd = (struct sta_rec_uapsd *)tlv;
-
-	if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO) {
-		uapsd->dac_map |= BIT(3);
-		uapsd->tac_map |= BIT(3);
-	}
-	if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI) {
-		uapsd->dac_map |= BIT(2);
-		uapsd->tac_map |= BIT(2);
-	}
-	if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE) {
-		uapsd->dac_map |= BIT(1);
-		uapsd->tac_map |= BIT(1);
-	}
-	if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK) {
-		uapsd->dac_map |= BIT(0);
-		uapsd->tac_map |= BIT(0);
-	}
-	uapsd->max_sp = sta->max_sp;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_uapsd);
-
-void mt76_connac_mcu_wtbl_hdr_trans_tlv(struct sk_buff *skb,
-					struct ieee80211_vif *vif,
-					struct mt76_wcid *wcid,
-					void *sta_wtbl, void *wtbl_tlv)
-{
-	struct wtbl_hdr_trans *htr;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_HDR_TRANS,
-					     sizeof(*htr),
-					     wtbl_tlv, sta_wtbl);
-	htr = (struct wtbl_hdr_trans *)tlv;
-	htr->no_rx_trans = true;
-
-	if (vif->type == NL80211_IFTYPE_STATION)
-		htr->to_ds = true;
-	else
-		htr->from_ds = true;
-
-	if (!wcid)
-		return;
-
-	htr->no_rx_trans = !test_bit(MT_WCID_FLAG_HDR_TRANS, &wcid->flags);
-	if (test_bit(MT_WCID_FLAG_4ADDR, &wcid->flags)) {
-		htr->to_ds = true;
-		htr->from_ds = true;
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_hdr_trans_tlv);
-
-int mt76_connac_mcu_sta_update_hdr_trans(struct mt76_dev *dev,
-					 struct ieee80211_vif *vif,
-					 struct mt76_wcid *wcid, int cmd)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct wtbl_req_hdr *wtbl_hdr;
-	struct tlv *sta_wtbl;
-	struct sk_buff *skb;
-
-	skb = mt76_connac_mcu_alloc_sta_req(dev, mvif, wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	sta_wtbl = mt76_connac_mcu_add_tlv(skb, STA_REC_WTBL,
-					   sizeof(struct tlv));
-
-	wtbl_hdr = mt76_connac_mcu_alloc_wtbl_req(dev, wcid, WTBL_SET,
-						  sta_wtbl, &skb);
-	if (IS_ERR(wtbl_hdr))
-		return PTR_ERR(wtbl_hdr);
-
-	mt76_connac_mcu_wtbl_hdr_trans_tlv(skb, vif, wcid, sta_wtbl, wtbl_hdr);
-
-	return mt76_mcu_skb_send_msg(dev, skb, cmd, true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_update_hdr_trans);
-
-int mt76_connac_mcu_wtbl_update_hdr_trans(struct mt76_dev *dev,
-					  struct ieee80211_vif *vif,
-					  struct ieee80211_sta *sta)
-{
-	struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv;
-	struct wtbl_req_hdr *wtbl_hdr;
-	struct sk_buff *skb = NULL;
-
-	wtbl_hdr = mt76_connac_mcu_alloc_wtbl_req(dev, wcid, WTBL_SET, NULL,
-						  &skb);
-	if (IS_ERR(wtbl_hdr))
-		return PTR_ERR(wtbl_hdr);
-
-	mt76_connac_mcu_wtbl_hdr_trans_tlv(skb, vif, wcid, NULL, wtbl_hdr);
-
-	return mt76_mcu_skb_send_msg(dev, skb, MCU_EXT_CMD(WTBL_UPDATE), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_update_hdr_trans);
-
-void mt76_connac_mcu_wtbl_generic_tlv(struct mt76_dev *dev,
-				      struct sk_buff *skb,
-				      struct ieee80211_vif *vif,
-				      struct ieee80211_sta *sta,
-				      void *sta_wtbl, void *wtbl_tlv)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct wtbl_generic *generic;
-	struct wtbl_rx *rx;
-	struct wtbl_spe *spe;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_GENERIC,
-					     sizeof(*generic),
-					     wtbl_tlv, sta_wtbl);
-
-	generic = (struct wtbl_generic *)tlv;
-
-	if (sta) {
-		if (vif->type == NL80211_IFTYPE_STATION)
-			generic->partial_aid = cpu_to_le16(vif->bss_conf.aid);
-		else
-			generic->partial_aid = cpu_to_le16(sta->aid);
-		memcpy(generic->peer_addr, sta->addr, ETH_ALEN);
-		generic->muar_idx = mvif->omac_idx;
-		generic->qos = sta->wme;
-	} else {
-		if (!is_connac_v1(dev) && vif->type == NL80211_IFTYPE_STATION)
-			memcpy(generic->peer_addr, vif->bss_conf.bssid,
-			       ETH_ALEN);
-		else
-			eth_broadcast_addr(generic->peer_addr);
-
-		generic->muar_idx = 0xe;
-	}
-
-	tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_RX, sizeof(*rx),
-					     wtbl_tlv, sta_wtbl);
-
-	rx = (struct wtbl_rx *)tlv;
-	rx->rca1 = sta ? vif->type != NL80211_IFTYPE_AP : 1;
-	rx->rca2 = 1;
-	rx->rv = 1;
-
-	if (!is_connac_v1(dev))
-		return;
-
-	tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_SPE, sizeof(*spe),
-					     wtbl_tlv, sta_wtbl);
-	spe = (struct wtbl_spe *)tlv;
-	spe->spe_idx = 24;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_generic_tlv);
-
-static void
-mt76_connac_mcu_sta_amsdu_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
-			      struct ieee80211_vif *vif)
-{
-	struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv;
-	struct sta_rec_amsdu *amsdu;
-	struct tlv *tlv;
-
-	if (vif->type != NL80211_IFTYPE_AP &&
-	    vif->type != NL80211_IFTYPE_STATION)
-		return;
-
-	if (!sta->max_amsdu_len)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HW_AMSDU, sizeof(*amsdu));
-	amsdu = (struct sta_rec_amsdu *)tlv;
-	amsdu->max_amsdu_num = 8;
-	amsdu->amsdu_en = true;
-	amsdu->max_mpdu_size = sta->max_amsdu_len >=
-			       IEEE80211_MAX_MPDU_LEN_VHT_7991;
-
-	wcid->amsdu = true;
-}
-
-#define HE_PHY(p, c)	u8_get_bits(c, IEEE80211_HE_PHY_##p)
-#define HE_MAC(m, c)	u8_get_bits(c, IEEE80211_HE_MAC_##m)
-static void
-mt76_connac_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
-{
-	struct ieee80211_sta_he_cap *he_cap = &sta->he_cap;
-	struct ieee80211_he_cap_elem *elem = &he_cap->he_cap_elem;
-	struct sta_rec_he *he;
-	struct tlv *tlv;
-	u32 cap = 0;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HE, sizeof(*he));
-
-	he = (struct sta_rec_he *)tlv;
-
-	if (elem->mac_cap_info[0] & IEEE80211_HE_MAC_CAP0_HTC_HE)
-		cap |= STA_REC_HE_CAP_HTC;
-
-	if (elem->mac_cap_info[2] & IEEE80211_HE_MAC_CAP2_BSR)
-		cap |= STA_REC_HE_CAP_BSR;
-
-	if (elem->mac_cap_info[3] & IEEE80211_HE_MAC_CAP3_OMI_CONTROL)
-		cap |= STA_REC_HE_CAP_OM;
-
-	if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU)
-		cap |= STA_REC_HE_CAP_AMSDU_IN_AMPDU;
-
-	if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_BQR)
-		cap |= STA_REC_HE_CAP_BQR;
-
-	if (elem->phy_cap_info[0] &
-	    (IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_2G |
-	     IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_5G))
-		cap |= STA_REC_HE_CAP_BW20_RU242_SUPPORT;
-
-	if (elem->phy_cap_info[1] &
-	    IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD)
-		cap |= STA_REC_HE_CAP_LDPC;
-
-	if (elem->phy_cap_info[1] &
-	    IEEE80211_HE_PHY_CAP1_HE_LTF_AND_GI_FOR_HE_PPDUS_0_8US)
-		cap |= STA_REC_HE_CAP_SU_PPDU_1LTF_8US_GI;
-
-	if (elem->phy_cap_info[2] &
-	    IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US)
-		cap |= STA_REC_HE_CAP_NDP_4LTF_3DOT2MS_GI;
-
-	if (elem->phy_cap_info[2] &
-	    IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ)
-		cap |= STA_REC_HE_CAP_LE_EQ_80M_TX_STBC;
-
-	if (elem->phy_cap_info[2] &
-	    IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ)
-		cap |= STA_REC_HE_CAP_LE_EQ_80M_RX_STBC;
-
-	if (elem->phy_cap_info[6] &
-	    IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE)
-		cap |= STA_REC_HE_CAP_PARTIAL_BW_EXT_RANGE;
-
-	if (elem->phy_cap_info[7] &
-	    IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI)
-		cap |= STA_REC_HE_CAP_SU_MU_PPDU_4LTF_8US_GI;
-
-	if (elem->phy_cap_info[7] &
-	    IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ)
-		cap |= STA_REC_HE_CAP_GT_80M_TX_STBC;
-
-	if (elem->phy_cap_info[7] &
-	    IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ)
-		cap |= STA_REC_HE_CAP_GT_80M_RX_STBC;
-
-	if (elem->phy_cap_info[8] &
-	    IEEE80211_HE_PHY_CAP8_HE_ER_SU_PPDU_4XLTF_AND_08_US_GI)
-		cap |= STA_REC_HE_CAP_ER_SU_PPDU_4LTF_8US_GI;
-
-	if (elem->phy_cap_info[8] &
-	    IEEE80211_HE_PHY_CAP8_HE_ER_SU_1XLTF_AND_08_US_GI)
-		cap |= STA_REC_HE_CAP_ER_SU_PPDU_1LTF_8US_GI;
-
-	if (elem->phy_cap_info[9] &
-	    IEEE80211_HE_PHY_CAP9_NON_TRIGGERED_CQI_FEEDBACK)
-		cap |= STA_REC_HE_CAP_TRIG_CQI_FK;
-
-	if (elem->phy_cap_info[9] &
-	    IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU)
-		cap |= STA_REC_HE_CAP_TX_1024QAM_UNDER_RU242;
-
-	if (elem->phy_cap_info[9] &
-	    IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU)
-		cap |= STA_REC_HE_CAP_RX_1024QAM_UNDER_RU242;
-
-	he->he_cap = cpu_to_le32(cap);
-
-	switch (sta->bandwidth) {
-	case IEEE80211_STA_RX_BW_160:
-		if (elem->phy_cap_info[0] &
-		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
-			he->max_nss_mcs[CMD_HE_MCS_BW8080] =
-				he_cap->he_mcs_nss_supp.rx_mcs_80p80;
-
-		he->max_nss_mcs[CMD_HE_MCS_BW160] =
-				he_cap->he_mcs_nss_supp.rx_mcs_160;
-		fallthrough;
-	default:
-		he->max_nss_mcs[CMD_HE_MCS_BW80] =
-				he_cap->he_mcs_nss_supp.rx_mcs_80;
-		break;
-	}
-
-	he->t_frame_dur =
-		HE_MAC(CAP1_TF_MAC_PAD_DUR_MASK, elem->mac_cap_info[1]);
-	he->max_ampdu_exp =
-		HE_MAC(CAP3_MAX_AMPDU_LEN_EXP_MASK, elem->mac_cap_info[3]);
-
-	he->bw_set =
-		HE_PHY(CAP0_CHANNEL_WIDTH_SET_MASK, elem->phy_cap_info[0]);
-	he->device_class =
-		HE_PHY(CAP1_DEVICE_CLASS_A, elem->phy_cap_info[1]);
-	he->punc_pream_rx =
-		HE_PHY(CAP1_PREAMBLE_PUNC_RX_MASK, elem->phy_cap_info[1]);
-
-	he->dcm_tx_mode =
-		HE_PHY(CAP3_DCM_MAX_CONST_TX_MASK, elem->phy_cap_info[3]);
-	he->dcm_tx_max_nss =
-		HE_PHY(CAP3_DCM_MAX_TX_NSS_2, elem->phy_cap_info[3]);
-	he->dcm_rx_mode =
-		HE_PHY(CAP3_DCM_MAX_CONST_RX_MASK, elem->phy_cap_info[3]);
-	he->dcm_rx_max_nss =
-		HE_PHY(CAP3_DCM_MAX_RX_NSS_2, elem->phy_cap_info[3]);
-	he->dcm_rx_max_nss =
-		HE_PHY(CAP8_DCM_MAX_RU_MASK, elem->phy_cap_info[8]);
-
-	he->pkt_ext = 2;
-}
-
-static void
-mt76_connac_mcu_sta_he_tlv_v2(struct sk_buff *skb, struct ieee80211_sta *sta)
-{
-	struct ieee80211_sta_he_cap *he_cap = &sta->he_cap;
-	struct ieee80211_he_cap_elem *elem = &he_cap->he_cap_elem;
-	struct sta_rec_he_v2 *he;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HE_V2, sizeof(*he));
-
-	he = (struct sta_rec_he_v2 *)tlv;
-	memcpy(he->he_phy_cap, elem->phy_cap_info, sizeof(he->he_phy_cap));
-	memcpy(he->he_mac_cap, elem->mac_cap_info, sizeof(he->he_mac_cap));
-
-	switch (sta->bandwidth) {
-	case IEEE80211_STA_RX_BW_160:
-		if (elem->phy_cap_info[0] &
-		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
-			he->max_nss_mcs[CMD_HE_MCS_BW8080] =
-				he_cap->he_mcs_nss_supp.rx_mcs_80p80;
-
-		he->max_nss_mcs[CMD_HE_MCS_BW160] =
-				he_cap->he_mcs_nss_supp.rx_mcs_160;
-		fallthrough;
-	default:
-		he->max_nss_mcs[CMD_HE_MCS_BW80] =
-				he_cap->he_mcs_nss_supp.rx_mcs_80;
-		break;
-	}
-
-	he->pkt_ext = IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_16US;
-}
-
-static u8
-mt76_connac_get_phy_mode_v2(struct mt76_phy *mphy, struct ieee80211_vif *vif,
-			    enum nl80211_band band, struct ieee80211_sta *sta)
-{
-	struct ieee80211_sta_ht_cap *ht_cap;
-	struct ieee80211_sta_vht_cap *vht_cap;
-	const struct ieee80211_sta_he_cap *he_cap;
-	u8 mode = 0;
-
-	if (sta) {
-		ht_cap = &sta->ht_cap;
-		vht_cap = &sta->vht_cap;
-		he_cap = &sta->he_cap;
-	} else {
-		struct ieee80211_supported_band *sband;
-
-		sband = mphy->hw->wiphy->bands[band];
-		ht_cap = &sband->ht_cap;
-		vht_cap = &sband->vht_cap;
-		he_cap = ieee80211_get_he_iftype_cap(sband, vif->type);
-	}
-
-	if (band == NL80211_BAND_2GHZ) {
-		mode |= PHY_TYPE_BIT_HR_DSSS | PHY_TYPE_BIT_ERP;
-
-		if (ht_cap->ht_supported)
-			mode |= PHY_TYPE_BIT_HT;
-
-		if (he_cap && he_cap->has_he)
-			mode |= PHY_TYPE_BIT_HE;
-	} else if (band == NL80211_BAND_5GHZ || band == NL80211_BAND_6GHZ) {
-		mode |= PHY_TYPE_BIT_OFDM;
-
-		if (ht_cap->ht_supported)
-			mode |= PHY_TYPE_BIT_HT;
-
-		if (vht_cap->vht_supported)
-			mode |= PHY_TYPE_BIT_VHT;
-
-		if (he_cap && he_cap->has_he)
-			mode |= PHY_TYPE_BIT_HE;
-	}
-
-	return mode;
-}
-
-void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
-			     struct ieee80211_sta *sta,
-			     struct ieee80211_vif *vif,
-			     u8 rcpi, u8 sta_state)
-{
-	struct cfg80211_chan_def *chandef = &mphy->chandef;
-	enum nl80211_band band = chandef->chan->band;
-	struct mt76_dev *dev = mphy->dev;
-	struct sta_rec_ra_info *ra_info;
-	struct sta_rec_state *state;
-	struct sta_rec_phy *phy;
-	struct tlv *tlv;
-	u16 supp_rates;
-
-	/* starec ht */
-	if (sta->ht_cap.ht_supported) {
-		struct sta_rec_ht *ht;
-
-		tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HT, sizeof(*ht));
-		ht = (struct sta_rec_ht *)tlv;
-		ht->ht_cap = cpu_to_le16(sta->ht_cap.cap);
-	}
-
-	/* starec vht */
-	if (sta->vht_cap.vht_supported) {
-		struct sta_rec_vht *vht;
-		int len;
-
-		len = is_mt7921(dev) ? sizeof(*vht) : sizeof(*vht) - 4;
-		tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_VHT, len);
-		vht = (struct sta_rec_vht *)tlv;
-		vht->vht_cap = cpu_to_le32(sta->vht_cap.cap);
-		vht->vht_rx_mcs_map = sta->vht_cap.vht_mcs.rx_mcs_map;
-		vht->vht_tx_mcs_map = sta->vht_cap.vht_mcs.tx_mcs_map;
-	}
-
-	/* starec uapsd */
-	mt76_connac_mcu_sta_uapsd(skb, vif, sta);
-
-	if (!is_mt7921(dev))
-		return;
-
-	if (sta->ht_cap.ht_supported || sta->he_cap.has_he)
-		mt76_connac_mcu_sta_amsdu_tlv(skb, sta, vif);
-
-	/* starec he */
-	if (sta->he_cap.has_he) {
-		mt76_connac_mcu_sta_he_tlv(skb, sta);
-		mt76_connac_mcu_sta_he_tlv_v2(skb, sta);
-		if (band == NL80211_BAND_6GHZ &&
-		    sta_state == MT76_STA_INFO_STATE_ASSOC) {
-			struct sta_rec_he_6g_capa *he_6g_capa;
-
-			tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HE_6G,
-						      sizeof(*he_6g_capa));
-			he_6g_capa = (struct sta_rec_he_6g_capa *)tlv;
-			he_6g_capa->capa = sta->he_6ghz_capa.capa;
-		}
-	}
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_PHY, sizeof(*phy));
-	phy = (struct sta_rec_phy *)tlv;
-	phy->phy_type = mt76_connac_get_phy_mode_v2(mphy, vif, band, sta);
-	phy->basic_rate = cpu_to_le16((u16)vif->bss_conf.basic_rates);
-	phy->rcpi = rcpi;
-	phy->ampdu = FIELD_PREP(IEEE80211_HT_AMPDU_PARM_FACTOR,
-				sta->ht_cap.ampdu_factor) |
-		     FIELD_PREP(IEEE80211_HT_AMPDU_PARM_DENSITY,
-				sta->ht_cap.ampdu_density);
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_RA, sizeof(*ra_info));
-	ra_info = (struct sta_rec_ra_info *)tlv;
-
-	supp_rates = sta->supp_rates[band];
-	if (band == NL80211_BAND_2GHZ)
-		supp_rates = FIELD_PREP(RA_LEGACY_OFDM, supp_rates >> 4) |
-			     FIELD_PREP(RA_LEGACY_CCK, supp_rates & 0xf);
-	else
-		supp_rates = FIELD_PREP(RA_LEGACY_OFDM, supp_rates);
-
-	ra_info->legacy = cpu_to_le16(supp_rates);
-
-	if (sta->ht_cap.ht_supported)
-		memcpy(ra_info->rx_mcs_bitmask, sta->ht_cap.mcs.rx_mask,
-		       HT_MCS_MASK_NUM);
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_STATE, sizeof(*state));
-	state = (struct sta_rec_state *)tlv;
-	state->state = sta_state;
-
-	if (sta->vht_cap.vht_supported) {
-		state->vht_opmode = sta->bandwidth;
-		state->vht_opmode |= (sta->rx_nss - 1) <<
-			IEEE80211_OPMODE_NOTIF_RX_NSS_SHIFT;
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_tlv);
-
-void mt76_connac_mcu_wtbl_smps_tlv(struct sk_buff *skb,
-				   struct ieee80211_sta *sta,
-				   void *sta_wtbl, void *wtbl_tlv)
-{
-	struct wtbl_smps *smps;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_SMPS, sizeof(*smps),
-					     wtbl_tlv, sta_wtbl);
-	smps = (struct wtbl_smps *)tlv;
-	smps->smps = (sta->smps_mode == IEEE80211_SMPS_DYNAMIC);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_smps_tlv);
-
-void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
-				 struct ieee80211_sta *sta, void *sta_wtbl,
-				 void *wtbl_tlv, bool ht_ldpc, bool vht_ldpc)
-{
-	struct wtbl_ht *ht = NULL;
-	struct tlv *tlv;
-	u32 flags = 0;
-
-	if (sta->ht_cap.ht_supported || sta->he_6ghz_capa.capa) {
-		tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_HT, sizeof(*ht),
-						     wtbl_tlv, sta_wtbl);
-		ht = (struct wtbl_ht *)tlv;
-		ht->ldpc = ht_ldpc &&
-			   !!(sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING);
-
-		if (sta->ht_cap.ht_supported) {
-			ht->af = sta->ht_cap.ampdu_factor;
-			ht->mm = sta->ht_cap.ampdu_density;
-		} else {
-			ht->af = le16_get_bits(sta->he_6ghz_capa.capa,
-					       IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP);
-			ht->mm = le16_get_bits(sta->he_6ghz_capa.capa,
-					       IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START);
-		}
-
-		ht->ht = true;
-	}
-
-	if (sta->vht_cap.vht_supported || sta->he_6ghz_capa.capa) {
-		struct wtbl_vht *vht;
-		u8 af;
-
-		tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_VHT,
-						     sizeof(*vht), wtbl_tlv,
-						     sta_wtbl);
-		vht = (struct wtbl_vht *)tlv;
-		vht->ldpc = vht_ldpc &&
-			    !!(sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC);
-		vht->vht = true;
-
-		af = FIELD_GET(IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK,
-			       sta->vht_cap.cap);
-		if (ht)
-			ht->af = max(ht->af, af);
-	}
-
-	mt76_connac_mcu_wtbl_smps_tlv(skb, sta, sta_wtbl, wtbl_tlv);
-
-	if (is_connac_v1(dev) && sta->ht_cap.ht_supported) {
-		/* sgi */
-		u32 msk = MT_WTBL_W5_SHORT_GI_20 | MT_WTBL_W5_SHORT_GI_40 |
-			  MT_WTBL_W5_SHORT_GI_80 | MT_WTBL_W5_SHORT_GI_160;
-		struct wtbl_raw *raw;
-
-		tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_RAW_DATA,
-						     sizeof(*raw), wtbl_tlv,
-						     sta_wtbl);
-
-		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20)
-			flags |= MT_WTBL_W5_SHORT_GI_20;
-		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40)
-			flags |= MT_WTBL_W5_SHORT_GI_40;
-
-		if (sta->vht_cap.vht_supported) {
-			if (sta->vht_cap.cap & IEEE80211_VHT_CAP_SHORT_GI_80)
-				flags |= MT_WTBL_W5_SHORT_GI_80;
-			if (sta->vht_cap.cap & IEEE80211_VHT_CAP_SHORT_GI_160)
-				flags |= MT_WTBL_W5_SHORT_GI_160;
-		}
-		raw = (struct wtbl_raw *)tlv;
-		raw->val = cpu_to_le32(flags);
-		raw->msk = cpu_to_le32(~msk);
-		raw->wtbl_idx = 1;
-		raw->dw = 5;
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_ht_tlv);
-
-int mt76_connac_mcu_sta_cmd(struct mt76_phy *phy,
-			    struct mt76_sta_cmd_info *info)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)info->vif->drv_priv;
-	struct mt76_dev *dev = phy->dev;
-	struct wtbl_req_hdr *wtbl_hdr;
-	struct tlv *sta_wtbl;
-	struct sk_buff *skb;
-
-	skb = mt76_connac_mcu_alloc_sta_req(dev, mvif, info->wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	if (info->sta || !info->offload_fw)
-		mt76_connac_mcu_sta_basic_tlv(skb, info->vif, info->sta,
-					      info->enable, info->newly);
-	if (info->sta && info->enable)
-		mt76_connac_mcu_sta_tlv(phy, skb, info->sta,
-					info->vif, info->rcpi,
-					info->state);
-
-	sta_wtbl = mt76_connac_mcu_add_tlv(skb, STA_REC_WTBL,
-					   sizeof(struct tlv));
-
-	wtbl_hdr = mt76_connac_mcu_alloc_wtbl_req(dev, info->wcid,
-						  WTBL_RESET_AND_SET,
-						  sta_wtbl, &skb);
-	if (IS_ERR(wtbl_hdr))
-		return PTR_ERR(wtbl_hdr);
-
-	if (info->enable) {
-		mt76_connac_mcu_wtbl_generic_tlv(dev, skb, info->vif,
-						 info->sta, sta_wtbl,
-						 wtbl_hdr);
-		mt76_connac_mcu_wtbl_hdr_trans_tlv(skb, info->vif, info->wcid,
-						   sta_wtbl, wtbl_hdr);
-		if (info->sta)
-			mt76_connac_mcu_wtbl_ht_tlv(dev, skb, info->sta,
-						    sta_wtbl, wtbl_hdr,
-						    true, true);
-	}
-
-	return mt76_mcu_skb_send_msg(dev, skb, info->cmd, true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_cmd);
-
-void mt76_connac_mcu_wtbl_ba_tlv(struct mt76_dev *dev, struct sk_buff *skb,
-				 struct ieee80211_ampdu_params *params,
-				 bool enable, bool tx, void *sta_wtbl,
-				 void *wtbl_tlv)
-{
-	struct wtbl_ba *ba;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_BA, sizeof(*ba),
-					     wtbl_tlv, sta_wtbl);
-
-	ba = (struct wtbl_ba *)tlv;
-	ba->tid = params->tid;
-
-	if (tx) {
-		ba->ba_type = MT_BA_TYPE_ORIGINATOR;
-		ba->sn = enable ? cpu_to_le16(params->ssn) : 0;
-		ba->ba_winsize = enable ? cpu_to_le16(params->buf_size) : 0;
-		ba->ba_en = enable;
-	} else {
-		memcpy(ba->peer_addr, params->sta->addr, ETH_ALEN);
-		ba->ba_type = MT_BA_TYPE_RECIPIENT;
-		ba->rst_ba_tid = params->tid;
-		ba->rst_ba_sel = RST_BA_MAC_TID_MATCH;
-		ba->rst_ba_sb = 1;
-	}
-
-	if (!is_connac_v1(dev)) {
-		ba->ba_winsize = enable ? cpu_to_le16(params->buf_size) : 0;
-		return;
-	}
-
-	if (enable && tx) {
-		static const u8 ba_range[] = { 4, 8, 12, 24, 36, 48, 54, 64 };
-		int i;
-
-		for (i = 7; i > 0; i--) {
-			if (params->buf_size >= ba_range[i])
-				break;
-		}
-		ba->ba_winsize_idx = i;
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_ba_tlv);
-
-int mt76_connac_mcu_uni_add_dev(struct mt76_phy *phy,
-				struct ieee80211_vif *vif,
-				struct mt76_wcid *wcid,
-				bool enable)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct mt76_dev *dev = phy->dev;
-	struct {
-		struct {
-			u8 omac_idx;
-			u8 band_idx;
-			__le16 pad;
-		} __packed hdr;
-		struct req_tlv {
-			__le16 tag;
-			__le16 len;
-			u8 active;
-			u8 pad;
-			u8 omac_addr[ETH_ALEN];
-		} __packed tlv;
-	} dev_req = {
-		.hdr = {
-			.omac_idx = mvif->omac_idx,
-			.band_idx = mvif->band_idx,
-		},
-		.tlv = {
-			.tag = cpu_to_le16(DEV_INFO_ACTIVE),
-			.len = cpu_to_le16(sizeof(struct req_tlv)),
-			.active = enable,
-		},
-	};
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct mt76_connac_bss_basic_tlv basic;
-	} basic_req = {
-		.hdr = {
-			.bss_idx = mvif->idx,
-		},
-		.basic = {
-			.tag = cpu_to_le16(UNI_BSS_INFO_BASIC),
-			.len = cpu_to_le16(sizeof(struct mt76_connac_bss_basic_tlv)),
-			.omac_idx = mvif->omac_idx,
-			.band_idx = mvif->band_idx,
-			.wmm_idx = mvif->wmm_idx,
-			.active = enable,
-			.bmc_tx_wlan_idx = cpu_to_le16(wcid->idx),
-			.sta_idx = cpu_to_le16(wcid->idx),
-			.conn_state = 1,
-		},
-	};
-	int err, idx, cmd, len;
-	void *data;
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_MONITOR:
-	case NL80211_IFTYPE_AP:
-		basic_req.basic.conn_type = cpu_to_le32(CONNECTION_INFRA_AP);
-		break;
-	case NL80211_IFTYPE_STATION:
-		basic_req.basic.conn_type = cpu_to_le32(CONNECTION_INFRA_STA);
-		break;
-	case NL80211_IFTYPE_ADHOC:
-		basic_req.basic.conn_type = cpu_to_le32(CONNECTION_IBSS_ADHOC);
-		break;
-	default:
-		WARN_ON(1);
-		break;
-	}
-
-	idx = mvif->omac_idx > EXT_BSSID_START ? HW_BSSID_0 : mvif->omac_idx;
-	basic_req.basic.hw_bss_idx = idx;
-
-	memcpy(dev_req.tlv.omac_addr, vif->addr, ETH_ALEN);
-
-	cmd = enable ? MCU_UNI_CMD(DEV_INFO_UPDATE) : MCU_UNI_CMD(BSS_INFO_UPDATE);
-	data = enable ? (void *)&dev_req : (void *)&basic_req;
-	len = enable ? sizeof(dev_req) : sizeof(basic_req);
-
-	err = mt76_mcu_send_msg(dev, cmd, data, len, true);
-	if (err < 0)
-		return err;
-
-	cmd = enable ? MCU_UNI_CMD(BSS_INFO_UPDATE) : MCU_UNI_CMD(DEV_INFO_UPDATE);
-	data = enable ? (void *)&basic_req : (void *)&dev_req;
-	len = enable ? sizeof(basic_req) : sizeof(dev_req);
-
-	return mt76_mcu_send_msg(dev, cmd, data, len, true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_uni_add_dev);
-
-void mt76_connac_mcu_sta_ba_tlv(struct sk_buff *skb,
-				struct ieee80211_ampdu_params *params,
-				bool enable, bool tx)
-{
-	struct sta_rec_ba *ba;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_BA, sizeof(*ba));
-
-	ba = (struct sta_rec_ba *)tlv;
-	ba->ba_type = tx ? MT_BA_TYPE_ORIGINATOR : MT_BA_TYPE_RECIPIENT;
-	ba->winsize = cpu_to_le16(params->buf_size);
-	ba->ssn = cpu_to_le16(params->ssn);
-	ba->ba_en = enable << params->tid;
-	ba->amsdu = params->amsdu;
-	ba->tid = params->tid;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_ba_tlv);
-
-int mt76_connac_mcu_sta_ba(struct mt76_dev *dev, struct mt76_vif *mvif,
-			   struct ieee80211_ampdu_params *params,
-			   int cmd, bool enable, bool tx)
-{
-	struct mt76_wcid *wcid = (struct mt76_wcid *)params->sta->drv_priv;
-	struct wtbl_req_hdr *wtbl_hdr;
-	struct tlv *sta_wtbl;
-	struct sk_buff *skb;
-	int ret;
-
-	skb = mt76_connac_mcu_alloc_sta_req(dev, mvif, wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	sta_wtbl = mt76_connac_mcu_add_tlv(skb, STA_REC_WTBL,
-					   sizeof(struct tlv));
-
-	wtbl_hdr = mt76_connac_mcu_alloc_wtbl_req(dev, wcid, WTBL_SET,
-						  sta_wtbl, &skb);
-	if (IS_ERR(wtbl_hdr))
-		return PTR_ERR(wtbl_hdr);
-
-	mt76_connac_mcu_wtbl_ba_tlv(dev, skb, params, enable, tx, sta_wtbl,
-				    wtbl_hdr);
-
-	ret = mt76_mcu_skb_send_msg(dev, skb, cmd, true);
-	if (ret)
-		return ret;
-
-	skb = mt76_connac_mcu_alloc_sta_req(dev, mvif, wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	mt76_connac_mcu_sta_ba_tlv(skb, params, enable, tx);
-
-	return mt76_mcu_skb_send_msg(dev, skb, cmd, true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_ba);
-
-u8 mt76_connac_get_phy_mode(struct mt76_phy *phy, struct ieee80211_vif *vif,
-			    enum nl80211_band band, struct ieee80211_sta *sta)
-{
-	struct mt76_dev *dev = phy->dev;
-	const struct ieee80211_sta_he_cap *he_cap;
-	struct ieee80211_sta_vht_cap *vht_cap;
-	struct ieee80211_sta_ht_cap *ht_cap;
-	u8 mode = 0;
-
-	if (is_connac_v1(dev))
-		return 0x38;
-
-	if (sta) {
-		ht_cap = &sta->ht_cap;
-		vht_cap = &sta->vht_cap;
-		he_cap = &sta->he_cap;
-	} else {
-		struct ieee80211_supported_band *sband;
-
-		sband = phy->hw->wiphy->bands[band];
-		ht_cap = &sband->ht_cap;
-		vht_cap = &sband->vht_cap;
-		he_cap = ieee80211_get_he_iftype_cap(sband, vif->type);
-	}
-
-	if (band == NL80211_BAND_2GHZ) {
-		mode |= PHY_MODE_B | PHY_MODE_G;
-
-		if (ht_cap->ht_supported)
-			mode |= PHY_MODE_GN;
-
-		if (he_cap && he_cap->has_he)
-			mode |= PHY_MODE_AX_24G;
-	} else if (band == NL80211_BAND_5GHZ) {
-		mode |= PHY_MODE_A;
-
-		if (ht_cap->ht_supported)
-			mode |= PHY_MODE_AN;
-
-		if (vht_cap->vht_supported)
-			mode |= PHY_MODE_AC;
-
-		if (he_cap && he_cap->has_he)
-			mode |= PHY_MODE_AX_5G;
-	} else if (band == NL80211_BAND_6GHZ) {
-		mode |= PHY_MODE_A | PHY_MODE_AN |
-			PHY_MODE_AC | PHY_MODE_AX_5G;
-	}
-
-	return mode;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_get_phy_mode);
-
-const struct ieee80211_sta_he_cap *
-mt76_connac_get_he_phy_cap(struct mt76_phy *phy, struct ieee80211_vif *vif)
-{
-	enum nl80211_band band = phy->chandef.chan->band;
-	struct ieee80211_supported_band *sband;
-
-	sband = phy->hw->wiphy->bands[band];
-
-	return ieee80211_get_he_iftype_cap(sband, vif->type);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_get_he_phy_cap);
-
-#define DEFAULT_HE_PE_DURATION		4
-#define DEFAULT_HE_DURATION_RTS_THRES	1023
-static void
-mt76_connac_mcu_uni_bss_he_tlv(struct mt76_phy *phy, struct ieee80211_vif *vif,
-			       struct tlv *tlv)
-{
-	const struct ieee80211_sta_he_cap *cap;
-	struct bss_info_uni_he *he;
-
-	cap = mt76_connac_get_he_phy_cap(phy, vif);
-
-	he = (struct bss_info_uni_he *)tlv;
-	he->he_pe_duration = vif->bss_conf.htc_trig_based_pkt_ext;
-	if (!he->he_pe_duration)
-		he->he_pe_duration = DEFAULT_HE_PE_DURATION;
-
-	he->he_rts_thres = cpu_to_le16(vif->bss_conf.frame_time_rts_th);
-	if (!he->he_rts_thres)
-		he->he_rts_thres = cpu_to_le16(DEFAULT_HE_DURATION_RTS_THRES);
-
-	he->max_nss_mcs[CMD_HE_MCS_BW80] = cap->he_mcs_nss_supp.tx_mcs_80;
-	he->max_nss_mcs[CMD_HE_MCS_BW160] = cap->he_mcs_nss_supp.tx_mcs_160;
-	he->max_nss_mcs[CMD_HE_MCS_BW8080] = cap->he_mcs_nss_supp.tx_mcs_80p80;
-}
-
-int mt76_connac_mcu_uni_add_bss(struct mt76_phy *phy,
-				struct ieee80211_vif *vif,
-				struct mt76_wcid *wcid,
-				bool enable)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct cfg80211_chan_def *chandef = &phy->chandef;
-	int freq1 = chandef->center_freq1, freq2 = chandef->center_freq2;
-	enum nl80211_band band = chandef->chan->band;
-	struct mt76_dev *mdev = phy->dev;
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct mt76_connac_bss_basic_tlv basic;
-		struct mt76_connac_bss_qos_tlv qos;
-	} basic_req = {
-		.hdr = {
-			.bss_idx = mvif->idx,
-		},
-		.basic = {
-			.tag = cpu_to_le16(UNI_BSS_INFO_BASIC),
-			.len = cpu_to_le16(sizeof(struct mt76_connac_bss_basic_tlv)),
-			.bcn_interval = cpu_to_le16(vif->bss_conf.beacon_int),
-			.dtim_period = vif->bss_conf.dtim_period,
-			.omac_idx = mvif->omac_idx,
-			.band_idx = mvif->band_idx,
-			.wmm_idx = mvif->wmm_idx,
-			.active = true, /* keep bss deactivated */
-			.phymode = mt76_connac_get_phy_mode(phy, vif, band, NULL),
-		},
-		.qos = {
-			.tag = cpu_to_le16(UNI_BSS_INFO_QBSS),
-			.len = cpu_to_le16(sizeof(struct mt76_connac_bss_qos_tlv)),
-			.qos = vif->bss_conf.qos,
-		},
-	};
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct rlm_tlv {
-			__le16 tag;
-			__le16 len;
-			u8 control_channel;
-			u8 center_chan;
-			u8 center_chan2;
-			u8 bw;
-			u8 tx_streams;
-			u8 rx_streams;
-			u8 short_st;
-			u8 ht_op_info;
-			u8 sco;
-			u8 band;
-			u8 pad[2];
-		} __packed rlm;
-	} __packed rlm_req = {
-		.hdr = {
-			.bss_idx = mvif->idx,
-		},
-		.rlm = {
-			.tag = cpu_to_le16(UNI_BSS_INFO_RLM),
-			.len = cpu_to_le16(sizeof(struct rlm_tlv)),
-			.control_channel = chandef->chan->hw_value,
-			.center_chan = ieee80211_frequency_to_channel(freq1),
-			.center_chan2 = ieee80211_frequency_to_channel(freq2),
-			.tx_streams = hweight8(phy->antenna_mask),
-			.ht_op_info = 4, /* set HT 40M allowed */
-			.rx_streams = phy->chainmask,
-			.short_st = true,
-			.band = band,
-		},
-	};
-	int err, conn_type;
-	u8 idx, basic_phy;
-
-	idx = mvif->omac_idx > EXT_BSSID_START ? HW_BSSID_0 : mvif->omac_idx;
-	basic_req.basic.hw_bss_idx = idx;
-	if (band == NL80211_BAND_6GHZ)
-		basic_req.basic.phymode_ext = PHY_MODE_AX_6G;
-
-	basic_phy = mt76_connac_get_phy_mode_v2(phy, vif, band, NULL);
-	basic_req.basic.nonht_basic_phy = cpu_to_le16(basic_phy);
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_AP:
-		if (vif->p2p)
-			conn_type = CONNECTION_P2P_GO;
-		else
-			conn_type = CONNECTION_INFRA_AP;
-		basic_req.basic.conn_type = cpu_to_le32(conn_type);
-		/* Fully active/deactivate BSS network in AP mode only */
-		basic_req.basic.active = enable;
-		break;
-	case NL80211_IFTYPE_STATION:
-		if (vif->p2p)
-			conn_type = CONNECTION_P2P_GC;
-		else
-			conn_type = CONNECTION_INFRA_STA;
-		basic_req.basic.conn_type = cpu_to_le32(conn_type);
-		break;
-	case NL80211_IFTYPE_ADHOC:
-		basic_req.basic.conn_type = cpu_to_le32(CONNECTION_IBSS_ADHOC);
-		break;
-	default:
-		WARN_ON(1);
-		break;
-	}
-
-	memcpy(basic_req.basic.bssid, vif->bss_conf.bssid, ETH_ALEN);
-	basic_req.basic.bmc_tx_wlan_idx = cpu_to_le16(wcid->idx);
-	basic_req.basic.sta_idx = cpu_to_le16(wcid->idx);
-	basic_req.basic.conn_state = !enable;
-
-	err = mt76_mcu_send_msg(mdev, MCU_UNI_CMD(BSS_INFO_UPDATE), &basic_req,
-				sizeof(basic_req), true);
-	if (err < 0)
-		return err;
-
-	if (vif->bss_conf.he_support) {
-		struct {
-			struct {
-				u8 bss_idx;
-				u8 pad[3];
-			} __packed hdr;
-			struct bss_info_uni_he he;
-			struct bss_info_uni_bss_color bss_color;
-		} he_req = {
-			.hdr = {
-				.bss_idx = mvif->idx,
-			},
-			.he = {
-				.tag = cpu_to_le16(UNI_BSS_INFO_HE_BASIC),
-				.len = cpu_to_le16(sizeof(struct bss_info_uni_he)),
-			},
-			.bss_color = {
-				.tag = cpu_to_le16(UNI_BSS_INFO_BSS_COLOR),
-				.len = cpu_to_le16(sizeof(struct bss_info_uni_bss_color)),
-				.enable = 0,
-				.bss_color = 0,
-			},
-		};
-
-		if (enable) {
-			he_req.bss_color.enable =
-				vif->bss_conf.he_bss_color.enabled;
-			he_req.bss_color.bss_color =
-				vif->bss_conf.he_bss_color.color;
-		}
-
-		mt76_connac_mcu_uni_bss_he_tlv(phy, vif,
-					       (struct tlv *)&he_req.he);
-		err = mt76_mcu_send_msg(mdev, MCU_UNI_CMD(BSS_INFO_UPDATE),
-					&he_req, sizeof(he_req), true);
-		if (err < 0)
-			return err;
-	}
-
-	switch (chandef->width) {
-	case NL80211_CHAN_WIDTH_40:
-		rlm_req.rlm.bw = CMD_CBW_40MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_80:
-		rlm_req.rlm.bw = CMD_CBW_80MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_80P80:
-		rlm_req.rlm.bw = CMD_CBW_8080MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_160:
-		rlm_req.rlm.bw = CMD_CBW_160MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_5:
-		rlm_req.rlm.bw = CMD_CBW_5MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_10:
-		rlm_req.rlm.bw = CMD_CBW_10MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_20_NOHT:
-	case NL80211_CHAN_WIDTH_20:
-	default:
-		rlm_req.rlm.bw = CMD_CBW_20MHZ;
-		rlm_req.rlm.ht_op_info = 0;
-		break;
-	}
-
-	if (rlm_req.rlm.control_channel < rlm_req.rlm.center_chan)
-		rlm_req.rlm.sco = 1; /* SCA */
-	else if (rlm_req.rlm.control_channel > rlm_req.rlm.center_chan)
-		rlm_req.rlm.sco = 3; /* SCB */
-
-	return mt76_mcu_send_msg(mdev, MCU_UNI_CMD(BSS_INFO_UPDATE), &rlm_req,
-				 sizeof(rlm_req), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_uni_add_bss);
-
-#define MT76_CONNAC_SCAN_CHANNEL_TIME		60
-int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
-			    struct ieee80211_scan_request *scan_req)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct cfg80211_scan_request *sreq = &scan_req->req;
-	int n_ssids = 0, err, i, duration;
-	int ext_channels_num = max_t(int, sreq->n_channels - 32, 0);
-	struct ieee80211_channel **scan_list = sreq->channels;
-	struct mt76_dev *mdev = phy->dev;
-	struct mt76_connac_mcu_scan_channel *chan;
-	struct mt76_connac_hw_scan_req *req;
-	struct sk_buff *skb;
-
-	skb = mt76_mcu_msg_alloc(mdev, NULL, sizeof(*req));
-	if (!skb)
-		return -ENOMEM;
-
-	set_bit(MT76_HW_SCANNING, &phy->state);
-	mvif->scan_seq_num = (mvif->scan_seq_num + 1) & 0x7f;
-
-	req = (struct mt76_connac_hw_scan_req *)skb_put(skb, sizeof(*req));
-
-	req->seq_num = mvif->scan_seq_num | mvif->band_idx << 7;
-	req->bss_idx = mvif->idx;
-	req->scan_type = sreq->n_ssids ? 1 : 0;
-	req->probe_req_num = sreq->n_ssids ? 2 : 0;
-	req->version = 1;
-
-	for (i = 0; i < sreq->n_ssids; i++) {
-		if (!sreq->ssids[i].ssid_len)
-			continue;
-
-		req->ssids[i].ssid_len = cpu_to_le32(sreq->ssids[i].ssid_len);
-		memcpy(req->ssids[i].ssid, sreq->ssids[i].ssid,
-		       sreq->ssids[i].ssid_len);
-		n_ssids++;
-	}
-	req->ssid_type = n_ssids ? BIT(2) : BIT(0);
-	req->ssid_type_ext = n_ssids ? BIT(0) : 0;
-	req->ssids_num = n_ssids;
-
-	duration = is_mt7921(phy->dev) ? 0 : MT76_CONNAC_SCAN_CHANNEL_TIME;
-	/* increase channel time for passive scan */
-	if (!sreq->n_ssids)
-		duration *= 2;
-	req->timeout_value = cpu_to_le16(sreq->n_channels * duration);
-	req->channel_min_dwell_time = cpu_to_le16(duration);
-	req->channel_dwell_time = cpu_to_le16(duration);
-
-	req->channels_num = min_t(u8, sreq->n_channels, 32);
-	req->ext_channels_num = min_t(u8, ext_channels_num, 32);
-	for (i = 0; i < req->channels_num + req->ext_channels_num; i++) {
-		if (i >= 32)
-			chan = &req->ext_channels[i - 32];
-		else
-			chan = &req->channels[i];
-
-		switch (scan_list[i]->band) {
-		case NL80211_BAND_2GHZ:
-			chan->band = 1;
-			break;
-		case NL80211_BAND_6GHZ:
-			chan->band = 3;
-			break;
-		default:
-			chan->band = 2;
-			break;
-		}
-		chan->channel_num = scan_list[i]->hw_value;
-	}
-	req->channel_type = sreq->n_channels ? 4 : 0;
-
-	if (sreq->ie_len > 0) {
-		memcpy(req->ies, sreq->ie, sreq->ie_len);
-		req->ies_len = cpu_to_le16(sreq->ie_len);
-	}
-
-	if (is_mt7921(phy->dev))
-		req->scan_func |= SCAN_FUNC_SPLIT_SCAN;
-
-	memcpy(req->bssid, sreq->bssid, ETH_ALEN);
-	if (sreq->flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
-		get_random_mask_addr(req->random_mac, sreq->mac_addr,
-				     sreq->mac_addr_mask);
-		req->scan_func |= SCAN_FUNC_RANDOM_MAC;
-	}
-
-	err = mt76_mcu_skb_send_msg(mdev, skb, MCU_CE_CMD(START_HW_SCAN),
-				    false);
-	if (err < 0)
-		clear_bit(MT76_HW_SCANNING, &phy->state);
-
-	return err;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_hw_scan);
-
-int mt76_connac_mcu_cancel_hw_scan(struct mt76_phy *phy,
-				   struct ieee80211_vif *vif)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct {
-		u8 seq_num;
-		u8 is_ext_channel;
-		u8 rsv[2];
-	} __packed req = {
-		.seq_num = mvif->scan_seq_num,
-	};
-
-	if (test_and_clear_bit(MT76_HW_SCANNING, &phy->state)) {
-		struct cfg80211_scan_info info = {
-			.aborted = true,
-		};
-
-		ieee80211_scan_completed(phy->hw, &info);
-	}
-
-	return mt76_mcu_send_msg(phy->dev, MCU_CE_CMD(CANCEL_HW_SCAN),
-				 &req, sizeof(req), false);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_cancel_hw_scan);
-
-int mt76_connac_mcu_sched_scan_req(struct mt76_phy *phy,
-				   struct ieee80211_vif *vif,
-				   struct cfg80211_sched_scan_request *sreq)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct ieee80211_channel **scan_list = sreq->channels;
-	struct mt76_connac_mcu_scan_channel *chan;
-	struct mt76_connac_sched_scan_req *req;
-	struct mt76_dev *mdev = phy->dev;
-	struct cfg80211_match_set *match;
-	struct cfg80211_ssid *ssid;
-	struct sk_buff *skb;
-	int i;
-
-	skb = mt76_mcu_msg_alloc(mdev, NULL, sizeof(*req) + sreq->ie_len);
-	if (!skb)
-		return -ENOMEM;
-
-	mvif->scan_seq_num = (mvif->scan_seq_num + 1) & 0x7f;
-
-	req = (struct mt76_connac_sched_scan_req *)skb_put(skb, sizeof(*req));
-	req->version = 1;
-	req->seq_num = mvif->scan_seq_num | mvif->band_idx << 7;
-
-	if (sreq->flags & NL80211_SCAN_FLAG_RANDOM_ADDR) {
-		u8 *addr = is_mt7663(phy->dev) ? req->mt7663.random_mac
-					       : req->mt7921.random_mac;
-
-		req->scan_func = 1;
-		get_random_mask_addr(addr, sreq->mac_addr,
-				     sreq->mac_addr_mask);
-	}
-	if (is_mt7921(phy->dev)) {
-		req->mt7921.bss_idx = mvif->idx;
-		req->mt7921.delay = cpu_to_le32(sreq->delay);
-	}
-
-	req->ssids_num = sreq->n_ssids;
-	for (i = 0; i < req->ssids_num; i++) {
-		ssid = &sreq->ssids[i];
-		memcpy(req->ssids[i].ssid, ssid->ssid, ssid->ssid_len);
-		req->ssids[i].ssid_len = cpu_to_le32(ssid->ssid_len);
-	}
-
-	req->match_num = sreq->n_match_sets;
-	for (i = 0; i < req->match_num; i++) {
-		match = &sreq->match_sets[i];
-		memcpy(req->match[i].ssid, match->ssid.ssid,
-		       match->ssid.ssid_len);
-		req->match[i].rssi_th = cpu_to_le32(match->rssi_thold);
-		req->match[i].ssid_len = match->ssid.ssid_len;
-	}
-
-	req->channel_type = sreq->n_channels ? 4 : 0;
-	req->channels_num = min_t(u8, sreq->n_channels, 64);
-	for (i = 0; i < req->channels_num; i++) {
-		chan = &req->channels[i];
-
-		switch (scan_list[i]->band) {
-		case NL80211_BAND_2GHZ:
-			chan->band = 1;
-			break;
-		case NL80211_BAND_6GHZ:
-			chan->band = 3;
-			break;
-		default:
-			chan->band = 2;
-			break;
-		}
-		chan->channel_num = scan_list[i]->hw_value;
-	}
-
-	req->intervals_num = sreq->n_scan_plans;
-	for (i = 0; i < req->intervals_num; i++)
-		req->intervals[i] = cpu_to_le16(sreq->scan_plans[i].interval);
-
-	if (sreq->ie_len > 0) {
-		req->ie_len = cpu_to_le16(sreq->ie_len);
-		memcpy(skb_put(skb, sreq->ie_len), sreq->ie, sreq->ie_len);
-	}
-
-	return mt76_mcu_skb_send_msg(mdev, skb, MCU_CE_CMD(SCHED_SCAN_REQ),
-				     false);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_sched_scan_req);
-
-int mt76_connac_mcu_sched_scan_enable(struct mt76_phy *phy,
-				      struct ieee80211_vif *vif,
-				      bool enable)
-{
-	struct {
-		u8 active; /* 0: enabled 1: disabled */
-		u8 rsv[3];
-	} __packed req = {
-		.active = !enable,
-	};
-
-	if (enable)
-		set_bit(MT76_HW_SCHED_SCANNING, &phy->state);
-	else
-		clear_bit(MT76_HW_SCHED_SCANNING, &phy->state);
-
-	return mt76_mcu_send_msg(phy->dev, MCU_CE_CMD(SCHED_SCAN_ENABLE),
-				 &req, sizeof(req), false);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_sched_scan_enable);
-
-int mt76_connac_mcu_chip_config(struct mt76_dev *dev)
-{
-	struct mt76_connac_config req = {
-		.resp_type = 0,
-	};
-
-	memcpy(req.data, "assert", 7);
-
-	return mt76_mcu_send_msg(dev, MCU_CE_CMD(CHIP_CONFIG),
-				 &req, sizeof(req), false);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_chip_config);
-
-int mt76_connac_mcu_set_deep_sleep(struct mt76_dev *dev, bool enable)
-{
-	struct mt76_connac_config req = {
-		.resp_type = 0,
-	};
-
-	snprintf(req.data, sizeof(req.data), "KeepFullPwr %d", !enable);
-
-	return mt76_mcu_send_msg(dev, MCU_CE_CMD(CHIP_CONFIG),
-				 &req, sizeof(req), false);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_deep_sleep);
-
-int mt76_connac_sta_state_dp(struct mt76_dev *dev,
-			     enum ieee80211_sta_state old_state,
-			     enum ieee80211_sta_state new_state)
-{
-	if ((old_state == IEEE80211_STA_ASSOC &&
-	     new_state == IEEE80211_STA_AUTHORIZED) ||
-	    (old_state == IEEE80211_STA_NONE &&
-	     new_state == IEEE80211_STA_NOTEXIST))
-		mt76_connac_mcu_set_deep_sleep(dev, true);
-
-	if ((old_state == IEEE80211_STA_NOTEXIST &&
-	     new_state == IEEE80211_STA_NONE) ||
-	    (old_state == IEEE80211_STA_AUTHORIZED &&
-	     new_state == IEEE80211_STA_ASSOC))
-		mt76_connac_mcu_set_deep_sleep(dev, false);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_sta_state_dp);
-
-void mt76_connac_mcu_coredump_event(struct mt76_dev *dev, struct sk_buff *skb,
-				    struct mt76_connac_coredump *coredump)
-{
-	spin_lock_bh(&dev->lock);
-	__skb_queue_tail(&coredump->msg_list, skb);
-	spin_unlock_bh(&dev->lock);
-
-	coredump->last_activity = jiffies;
-
-	queue_delayed_work(dev->wq, &coredump->work,
-			   MT76_CONNAC_COREDUMP_TIMEOUT);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_coredump_event);
-
-static void mt76_connac_mcu_parse_tx_resource(struct mt76_dev *dev,
-					      struct sk_buff *skb)
-{
-	struct mt76_sdio *sdio = &dev->sdio;
-	struct mt76_connac_tx_resource {
-		__le32 version;
-		__le32 pse_data_quota;
-		__le32 pse_mcu_quota;
-		__le32 ple_data_quota;
-		__le32 ple_mcu_quota;
-		__le16 pse_page_size;
-		__le16 ple_page_size;
-		u8 pp_padding;
-		u8 pad[3];
-	} __packed * tx_res;
-
-	tx_res = (struct mt76_connac_tx_resource *)skb->data;
-	sdio->sched.pse_data_quota = le32_to_cpu(tx_res->pse_data_quota);
-	sdio->sched.pse_mcu_quota = le32_to_cpu(tx_res->pse_mcu_quota);
-	sdio->sched.ple_data_quota = le32_to_cpu(tx_res->ple_data_quota);
-	sdio->sched.pse_page_size = le16_to_cpu(tx_res->pse_page_size);
-	sdio->sched.deficit = tx_res->pp_padding;
-}
-
-static void mt76_connac_mcu_parse_phy_cap(struct mt76_dev *dev,
-					  struct sk_buff *skb)
-{
-	struct mt76_connac_phy_cap {
-		u8 ht;
-		u8 vht;
-		u8 _5g;
-		u8 max_bw;
-		u8 nss;
-		u8 dbdc;
-		u8 tx_ldpc;
-		u8 rx_ldpc;
-		u8 tx_stbc;
-		u8 rx_stbc;
-		u8 hw_path;
-		u8 he;
-	} __packed * cap;
-
-	enum {
-		WF0_24G,
-		WF0_5G
-	};
-
-	cap = (struct mt76_connac_phy_cap *)skb->data;
-
-	dev->phy.antenna_mask = BIT(cap->nss) - 1;
-	dev->phy.chainmask = dev->phy.antenna_mask;
-	dev->phy.cap.has_2ghz = cap->hw_path & BIT(WF0_24G);
-	dev->phy.cap.has_5ghz = cap->hw_path & BIT(WF0_5G);
-}
-
-int mt76_connac_mcu_get_nic_capability(struct mt76_phy *phy)
-{
-	struct mt76_connac_cap_hdr {
-		__le16 n_element;
-		u8 rsv[2];
-	} __packed * hdr;
-	struct sk_buff *skb;
-	int ret, i;
-
-	ret = mt76_mcu_send_and_get_msg(phy->dev, MCU_CE_CMD(GET_NIC_CAPAB),
-					NULL, 0, true, &skb);
-	if (ret)
-		return ret;
-
-	hdr = (struct mt76_connac_cap_hdr *)skb->data;
-	if (skb->len < sizeof(*hdr)) {
-		ret = -EINVAL;
-		goto out;
-	}
-
-	skb_pull(skb, sizeof(*hdr));
-
-	for (i = 0; i < le16_to_cpu(hdr->n_element); i++) {
-		struct tlv_hdr {
-			__le32 type;
-			__le32 len;
-		} __packed * tlv = (struct tlv_hdr *)skb->data;
-		int len;
-
-		if (skb->len < sizeof(*tlv))
-			break;
-
-		skb_pull(skb, sizeof(*tlv));
-
-		len = le32_to_cpu(tlv->len);
-		if (skb->len < len)
-			break;
-
-		switch (le32_to_cpu(tlv->type)) {
-		case MT_NIC_CAP_6G:
-			phy->cap.has_6ghz = skb->data[0];
-			break;
-		case MT_NIC_CAP_MAC_ADDR:
-			memcpy(phy->macaddr, (void *)skb->data, ETH_ALEN);
-			break;
-		case MT_NIC_CAP_PHY:
-			mt76_connac_mcu_parse_phy_cap(phy->dev, skb);
-			break;
-		case MT_NIC_CAP_TX_RESOURCE:
-			if (mt76_is_sdio(phy->dev))
-				mt76_connac_mcu_parse_tx_resource(phy->dev,
-								  skb);
-			break;
-		default:
-			break;
-		}
-		skb_pull(skb, len);
-	}
-out:
-	dev_kfree_skb(skb);
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_get_nic_capability);
-
-static void
-mt76_connac_mcu_build_sku(struct mt76_dev *dev, s8 *sku,
-			  struct mt76_power_limits *limits,
-			  enum nl80211_band band)
-{
-	int max_power = is_mt7921(dev) ? 127 : 63;
-	int i, offset = sizeof(limits->cck);
-
-	memset(sku, max_power, MT_SKU_POWER_LIMIT);
-
-	if (band == NL80211_BAND_2GHZ) {
-		/* cck */
-		memcpy(sku, limits->cck, sizeof(limits->cck));
-	}
-
-	/* ofdm */
-	memcpy(&sku[offset], limits->ofdm, sizeof(limits->ofdm));
-	offset += sizeof(limits->ofdm);
-
-	/* ht */
-	for (i = 0; i < 2; i++) {
-		memcpy(&sku[offset], limits->mcs[i], 8);
-		offset += 8;
-	}
-	sku[offset++] = limits->mcs[0][0];
-
-	/* vht */
-	for (i = 0; i < ARRAY_SIZE(limits->mcs); i++) {
-		memcpy(&sku[offset], limits->mcs[i],
-		       ARRAY_SIZE(limits->mcs[i]));
-		offset += 12;
-	}
-
-	if (!is_mt7921(dev))
-		return;
-
-	/* he */
-	for (i = 0; i < ARRAY_SIZE(limits->ru); i++) {
-		memcpy(&sku[offset], limits->ru[i], ARRAY_SIZE(limits->ru[i]));
-		offset += ARRAY_SIZE(limits->ru[i]);
-	}
-}
-
-static s8 mt76_connac_get_ch_power(struct mt76_phy *phy,
-				   struct ieee80211_channel *chan,
-				   s8 target_power)
-{
-	struct mt76_dev *dev = phy->dev;
-	struct ieee80211_supported_band *sband;
-	int i;
-
-	switch (chan->band) {
-	case NL80211_BAND_2GHZ:
-		sband = &phy->sband_2g.sband;
-		break;
-	case NL80211_BAND_5GHZ:
-		sband = &phy->sband_5g.sband;
-		break;
-	case NL80211_BAND_6GHZ:
-		sband = &phy->sband_6g.sband;
-		break;
-	default:
-		return target_power;
-	}
-
-	for (i = 0; i < sband->n_channels; i++) {
-		struct ieee80211_channel *ch = &sband->channels[i];
-
-		if (ch->hw_value == chan->hw_value) {
-			if (!(ch->flags & IEEE80211_CHAN_DISABLED)) {
-				int power = 2 * ch->max_reg_power;
-
-				if (is_mt7663(dev) && (power > 63 || power < -64))
-					power = 63;
-				target_power = min_t(s8, power, target_power);
-			}
-			break;
-		}
-	}
-
-	return target_power;
-}
-
-static int
-mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy,
-				  enum nl80211_band band)
-{
-	struct mt76_dev *dev = phy->dev;
-	int sku_len, batch_len = is_mt7921(dev) ? 8 : 16;
-	static const u8 chan_list_2ghz[] = {
-		1, 2,  3,  4,  5,  6,  7,
-		8, 9, 10, 11, 12, 13, 14
-	};
-	static const u8 chan_list_5ghz[] = {
-		 36,  38,  40,  42,  44,  46,  48,
-		 50,  52,  54,  56,  58,  60,  62,
-		 64, 100, 102, 104, 106, 108, 110,
-		112, 114, 116, 118, 120, 122, 124,
-		126, 128, 132, 134, 136, 138, 140,
-		142, 144, 149, 151, 153, 155, 157,
-		159, 161, 165
-	};
-	static const u8 chan_list_6ghz[] = {
-		  1,   3,   5,   7,   9,  11,  13,
-		 15,  17,  19,  21,  23,  25,  27,
-		 29,  33,  35,  37,  39,  41,  43,
-		 45,  47,  49,  51,  53,  55,  57,
-		 59,  61,  65,  67,  69,  71,  73,
-		 75,  77,  79,  81,  83,  85,  87,
-		 89,  91,  93,  97,  99, 101, 103,
-		105, 107, 109, 111, 113, 115, 117,
-		119, 121, 123, 125, 129, 131, 133,
-		135, 137, 139, 141, 143, 145, 147,
-		149, 151, 153, 155, 157, 161, 163,
-		165, 167, 169, 171, 173, 175, 177,
-		179, 181, 183, 185, 187, 189, 193,
-		195, 197, 199, 201, 203, 205, 207,
-		209, 211, 213, 215, 217, 219, 221,
-		225, 227, 229, 233
-	};
-	int i, n_chan, batch_size, idx = 0, tx_power, last_ch;
-	struct mt76_connac_sku_tlv sku_tlbv;
-	struct mt76_power_limits limits;
-	const u8 *ch_list;
-
-	sku_len = is_mt7921(dev) ? sizeof(sku_tlbv) : sizeof(sku_tlbv) - 92;
-	tx_power = 2 * phy->hw->conf.power_level;
-	if (!tx_power)
-		tx_power = 127;
-
-	if (band == NL80211_BAND_2GHZ) {
-		n_chan = ARRAY_SIZE(chan_list_2ghz);
-		ch_list = chan_list_2ghz;
-	} else if (band == NL80211_BAND_6GHZ) {
-		n_chan = ARRAY_SIZE(chan_list_6ghz);
-		ch_list = chan_list_6ghz;
-	} else {
-		n_chan = ARRAY_SIZE(chan_list_5ghz);
-		ch_list = chan_list_5ghz;
-	}
-	batch_size = DIV_ROUND_UP(n_chan, batch_len);
-
-	if (phy->cap.has_6ghz)
-		last_ch = chan_list_6ghz[ARRAY_SIZE(chan_list_6ghz) - 1];
-	else if (phy->cap.has_5ghz)
-		last_ch = chan_list_5ghz[ARRAY_SIZE(chan_list_5ghz) - 1];
-	else
-		last_ch = chan_list_2ghz[ARRAY_SIZE(chan_list_2ghz) - 1];
-
-	for (i = 0; i < batch_size; i++) {
-		struct mt76_connac_tx_power_limit_tlv tx_power_tlv = {};
-		int j, err, msg_len, num_ch;
-		struct sk_buff *skb;
-
-		num_ch = i == batch_size - 1 ? n_chan % batch_len : batch_len;
-		msg_len = sizeof(tx_power_tlv) + num_ch * sizeof(sku_tlbv);
-		skb = mt76_mcu_msg_alloc(dev, NULL, msg_len);
-		if (!skb)
-			return -ENOMEM;
-
-		skb_reserve(skb, sizeof(tx_power_tlv));
-
-		BUILD_BUG_ON(sizeof(dev->alpha2) > sizeof(tx_power_tlv.alpha2));
-		memcpy(tx_power_tlv.alpha2, dev->alpha2, sizeof(dev->alpha2));
-		tx_power_tlv.n_chan = num_ch;
-
-		switch (band) {
-		case NL80211_BAND_2GHZ:
-			tx_power_tlv.band = 1;
-			break;
-		case NL80211_BAND_6GHZ:
-			tx_power_tlv.band = 3;
-			break;
-		default:
-			tx_power_tlv.band = 2;
-			break;
-		}
-
-		for (j = 0; j < num_ch; j++, idx++) {
-			struct ieee80211_channel chan = {
-				.hw_value = ch_list[idx],
-				.band = band,
-			};
-			s8 reg_power, sar_power;
-
-			reg_power = mt76_connac_get_ch_power(phy, &chan,
-							     tx_power);
-			sar_power = mt76_get_sar_power(phy, &chan, reg_power);
-
-			mt76_get_rate_power_limits(phy, &chan, &limits,
-						   sar_power);
-
-			tx_power_tlv.last_msg = ch_list[idx] == last_ch;
-			sku_tlbv.channel = ch_list[idx];
-
-			mt76_connac_mcu_build_sku(dev, sku_tlbv.pwr_limit,
-						  &limits, band);
-			skb_put_data(skb, &sku_tlbv, sku_len);
-		}
-		__skb_push(skb, sizeof(tx_power_tlv));
-		memcpy(skb->data, &tx_power_tlv, sizeof(tx_power_tlv));
-
-		err = mt76_mcu_skb_send_msg(dev, skb,
-					    MCU_CE_CMD(SET_RATE_TX_POWER),
-					    false);
-		if (err < 0)
-			return err;
-	}
-
-	return 0;
-}
-
-int mt76_connac_mcu_set_rate_txpower(struct mt76_phy *phy)
-{
-	int err;
-
-	if (phy->cap.has_2ghz) {
-		err = mt76_connac_mcu_rate_txpower_band(phy,
-							NL80211_BAND_2GHZ);
-		if (err < 0)
-			return err;
-	}
-	if (phy->cap.has_5ghz) {
-		err = mt76_connac_mcu_rate_txpower_band(phy,
-							NL80211_BAND_5GHZ);
-		if (err < 0)
-			return err;
-	}
-	if (phy->cap.has_6ghz) {
-		err = mt76_connac_mcu_rate_txpower_band(phy,
-							NL80211_BAND_6GHZ);
-		if (err < 0)
-			return err;
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_rate_txpower);
-
-int mt76_connac_mcu_update_arp_filter(struct mt76_dev *dev,
-				      struct mt76_vif *vif,
-				      struct ieee80211_bss_conf *info)
-{
-	struct sk_buff *skb;
-	int i, len = min_t(int, info->arp_addr_cnt,
-			   IEEE80211_BSS_ARP_ADDR_LIST_LEN);
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct mt76_connac_arpns_tlv arp;
-	} req_hdr = {
-		.hdr = {
-			.bss_idx = vif->idx,
-		},
-		.arp = {
-			.tag = cpu_to_le16(UNI_OFFLOAD_OFFLOAD_ARP),
-			.len = cpu_to_le16(sizeof(struct mt76_connac_arpns_tlv)),
-			.ips_num = len,
-			.mode = 2,  /* update */
-			.option = 1,
-		},
-	};
-
-	skb = mt76_mcu_msg_alloc(dev, NULL,
-				 sizeof(req_hdr) + len * sizeof(__be32));
-	if (!skb)
-		return -ENOMEM;
-
-	skb_put_data(skb, &req_hdr, sizeof(req_hdr));
-	for (i = 0; i < len; i++)
-		skb_put_data(skb, &info->arp_addr_list[i], sizeof(__be32));
-
-	return mt76_mcu_skb_send_msg(dev, skb, MCU_UNI_CMD(OFFLOAD), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_update_arp_filter);
-
-int mt76_connac_mcu_set_p2p_oppps(struct ieee80211_hw *hw,
-				  struct ieee80211_vif *vif)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	int ct_window = vif->bss_conf.p2p_noa_attr.oppps_ctwindow;
-	struct mt76_phy *phy = hw->priv;
-	struct {
-		__le32 ct_win;
-		u8 bss_idx;
-		u8 rsv[3];
-	} __packed req = {
-		.ct_win = cpu_to_le32(ct_window),
-		.bss_idx = mvif->idx,
-	};
-
-	return mt76_mcu_send_msg(phy->dev, MCU_CE_CMD(SET_P2P_OPPPS),
-				 &req, sizeof(req), false);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_p2p_oppps);
-
-#ifdef CONFIG_PM
-
-const struct wiphy_wowlan_support mt76_connac_wowlan_support = {
-	.flags = WIPHY_WOWLAN_MAGIC_PKT | WIPHY_WOWLAN_DISCONNECT |
-		 WIPHY_WOWLAN_SUPPORTS_GTK_REKEY | WIPHY_WOWLAN_NET_DETECT,
-	.n_patterns = 1,
-	.pattern_min_len = 1,
-	.pattern_max_len = MT76_CONNAC_WOW_PATTEN_MAX_LEN,
-	.max_nd_match_sets = 10,
-};
-EXPORT_SYMBOL_GPL(mt76_connac_wowlan_support);
-
-static void
-mt76_connac_mcu_key_iter(struct ieee80211_hw *hw,
-			 struct ieee80211_vif *vif,
-			 struct ieee80211_sta *sta,
-			 struct ieee80211_key_conf *key,
-			 void *data)
-{
-	struct mt76_connac_gtk_rekey_tlv *gtk_tlv = data;
-	u32 cipher;
-
-	if (key->cipher != WLAN_CIPHER_SUITE_AES_CMAC &&
-	    key->cipher != WLAN_CIPHER_SUITE_CCMP &&
-	    key->cipher != WLAN_CIPHER_SUITE_TKIP)
-		return;
-
-	if (key->cipher == WLAN_CIPHER_SUITE_TKIP)
-		cipher = BIT(3);
-	else
-		cipher = BIT(4);
-
-	/* we are assuming here to have a single pairwise key */
-	if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE) {
-		if (key->cipher == WLAN_CIPHER_SUITE_TKIP)
-			gtk_tlv->proto = cpu_to_le32(NL80211_WPA_VERSION_1);
-		else
-			gtk_tlv->proto = cpu_to_le32(NL80211_WPA_VERSION_2);
-
-		gtk_tlv->pairwise_cipher = cpu_to_le32(cipher);
-		gtk_tlv->keyid = key->keyidx;
-	} else {
-		gtk_tlv->group_cipher = cpu_to_le32(cipher);
-	}
-}
-
-int mt76_connac_mcu_update_gtk_rekey(struct ieee80211_hw *hw,
-				     struct ieee80211_vif *vif,
-				     struct cfg80211_gtk_rekey_data *key)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct mt76_connac_gtk_rekey_tlv *gtk_tlv;
-	struct mt76_phy *phy = hw->priv;
-	struct sk_buff *skb;
-	struct {
-		u8 bss_idx;
-		u8 pad[3];
-	} __packed hdr = {
-		.bss_idx = mvif->idx,
-	};
-
-	skb = mt76_mcu_msg_alloc(phy->dev, NULL,
-				 sizeof(hdr) + sizeof(*gtk_tlv));
-	if (!skb)
-		return -ENOMEM;
-
-	skb_put_data(skb, &hdr, sizeof(hdr));
-	gtk_tlv = (struct mt76_connac_gtk_rekey_tlv *)skb_put(skb,
-							 sizeof(*gtk_tlv));
-	gtk_tlv->tag = cpu_to_le16(UNI_OFFLOAD_OFFLOAD_GTK_REKEY);
-	gtk_tlv->len = cpu_to_le16(sizeof(*gtk_tlv));
-	gtk_tlv->rekey_mode = 2;
-	gtk_tlv->option = 1;
-
-	rcu_read_lock();
-	ieee80211_iter_keys_rcu(hw, vif, mt76_connac_mcu_key_iter, gtk_tlv);
-	rcu_read_unlock();
-
-	memcpy(gtk_tlv->kek, key->kek, NL80211_KEK_LEN);
-	memcpy(gtk_tlv->kck, key->kck, NL80211_KCK_LEN);
-	memcpy(gtk_tlv->replay_ctr, key->replay_ctr, NL80211_REPLAY_CTR_LEN);
-
-	return mt76_mcu_skb_send_msg(phy->dev, skb,
-				     MCU_UNI_CMD(OFFLOAD), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_update_gtk_rekey);
-
-static int
-mt76_connac_mcu_set_arp_filter(struct mt76_dev *dev, struct ieee80211_vif *vif,
-			       bool suspend)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct mt76_connac_arpns_tlv arpns;
-	} req = {
-		.hdr = {
-			.bss_idx = mvif->idx,
-		},
-		.arpns = {
-			.tag = cpu_to_le16(UNI_OFFLOAD_OFFLOAD_ARP),
-			.len = cpu_to_le16(sizeof(struct mt76_connac_arpns_tlv)),
-			.mode = suspend,
-		},
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_UNI_CMD(OFFLOAD), &req,
-				 sizeof(req), true);
-}
-
-static int
-mt76_connac_mcu_set_gtk_rekey(struct mt76_dev *dev, struct ieee80211_vif *vif,
-			      bool suspend)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct mt76_connac_gtk_rekey_tlv gtk_tlv;
-	} __packed req = {
-		.hdr = {
-			.bss_idx = mvif->idx,
-		},
-		.gtk_tlv = {
-			.tag = cpu_to_le16(UNI_OFFLOAD_OFFLOAD_GTK_REKEY),
-			.len = cpu_to_le16(sizeof(struct mt76_connac_gtk_rekey_tlv)),
-			.rekey_mode = !suspend,
-		},
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_UNI_CMD(OFFLOAD), &req,
-				 sizeof(req), true);
-}
-
-static int
-mt76_connac_mcu_set_suspend_mode(struct mt76_dev *dev,
-				 struct ieee80211_vif *vif,
-				 bool enable, u8 mdtim,
-				 bool wow_suspend)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct mt76_connac_suspend_tlv suspend_tlv;
-	} req = {
-		.hdr = {
-			.bss_idx = mvif->idx,
-		},
-		.suspend_tlv = {
-			.tag = cpu_to_le16(UNI_SUSPEND_MODE_SETTING),
-			.len = cpu_to_le16(sizeof(struct mt76_connac_suspend_tlv)),
-			.enable = enable,
-			.mdtim = mdtim,
-			.wow_suspend = wow_suspend,
-		},
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_UNI_CMD(SUSPEND), &req,
-				 sizeof(req), true);
-}
-
-static int
-mt76_connac_mcu_set_wow_pattern(struct mt76_dev *dev,
-				struct ieee80211_vif *vif,
-				u8 index, bool enable,
-				struct cfg80211_pkt_pattern *pattern)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct mt76_connac_wow_pattern_tlv *ptlv;
-	struct sk_buff *skb;
-	struct req_hdr {
-		u8 bss_idx;
-		u8 pad[3];
-	} __packed hdr = {
-		.bss_idx = mvif->idx,
-	};
-
-	skb = mt76_mcu_msg_alloc(dev, NULL, sizeof(hdr) + sizeof(*ptlv));
-	if (!skb)
-		return -ENOMEM;
-
-	skb_put_data(skb, &hdr, sizeof(hdr));
-	ptlv = (struct mt76_connac_wow_pattern_tlv *)skb_put(skb, sizeof(*ptlv));
-	ptlv->tag = cpu_to_le16(UNI_SUSPEND_WOW_PATTERN);
-	ptlv->len = cpu_to_le16(sizeof(*ptlv));
-	ptlv->data_len = pattern->pattern_len;
-	ptlv->enable = enable;
-	ptlv->index = index;
-
-	memcpy(ptlv->pattern, pattern->pattern, pattern->pattern_len);
-	memcpy(ptlv->mask, pattern->mask, DIV_ROUND_UP(pattern->pattern_len, 8));
-
-	return mt76_mcu_skb_send_msg(dev, skb, MCU_UNI_CMD(SUSPEND), true);
-}
-
-static int
-mt76_connac_mcu_set_wow_ctrl(struct mt76_phy *phy, struct ieee80211_vif *vif,
-			     bool suspend, struct cfg80211_wowlan *wowlan)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct mt76_dev *dev = phy->dev;
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct mt76_connac_wow_ctrl_tlv wow_ctrl_tlv;
-		struct mt76_connac_wow_gpio_param_tlv gpio_tlv;
-	} req = {
-		.hdr = {
-			.bss_idx = mvif->idx,
-		},
-		.wow_ctrl_tlv = {
-			.tag = cpu_to_le16(UNI_SUSPEND_WOW_CTRL),
-			.len = cpu_to_le16(sizeof(struct mt76_connac_wow_ctrl_tlv)),
-			.cmd = suspend ? 1 : 2,
-		},
-		.gpio_tlv = {
-			.tag = cpu_to_le16(UNI_SUSPEND_WOW_GPIO_PARAM),
-			.len = cpu_to_le16(sizeof(struct mt76_connac_wow_gpio_param_tlv)),
-			.gpio_pin = 0xff, /* follow fw about GPIO pin */
-		},
-	};
-
-	if (wowlan->magic_pkt)
-		req.wow_ctrl_tlv.trigger |= UNI_WOW_DETECT_TYPE_MAGIC;
-	if (wowlan->disconnect)
-		req.wow_ctrl_tlv.trigger |= (UNI_WOW_DETECT_TYPE_DISCONNECT |
-					     UNI_WOW_DETECT_TYPE_BCN_LOST);
-	if (wowlan->nd_config) {
-		mt76_connac_mcu_sched_scan_req(phy, vif, wowlan->nd_config);
-		req.wow_ctrl_tlv.trigger |= UNI_WOW_DETECT_TYPE_SCH_SCAN_HIT;
-		mt76_connac_mcu_sched_scan_enable(phy, vif, suspend);
-	}
-	if (wowlan->n_patterns)
-		req.wow_ctrl_tlv.trigger |= UNI_WOW_DETECT_TYPE_BITMAP;
-
-	if (mt76_is_mmio(dev))
-		req.wow_ctrl_tlv.wakeup_hif = WOW_PCIE;
-	else if (mt76_is_usb(dev))
-		req.wow_ctrl_tlv.wakeup_hif = WOW_USB;
-	else if (mt76_is_sdio(dev))
-		req.wow_ctrl_tlv.wakeup_hif = WOW_GPIO;
-
-	return mt76_mcu_send_msg(dev, MCU_UNI_CMD(SUSPEND), &req,
-				 sizeof(req), true);
-}
-
-int mt76_connac_mcu_set_hif_suspend(struct mt76_dev *dev, bool suspend)
-{
-	struct {
-		struct {
-			u8 hif_type; /* 0x0: HIF_SDIO
-				      * 0x1: HIF_USB
-				      * 0x2: HIF_PCIE
-				      */
-			u8 pad[3];
-		} __packed hdr;
-		struct hif_suspend_tlv {
-			__le16 tag;
-			__le16 len;
-			u8 suspend;
-		} __packed hif_suspend;
-	} req = {
-		.hif_suspend = {
-			.tag = cpu_to_le16(0), /* 0: UNI_HIF_CTRL_BASIC */
-			.len = cpu_to_le16(sizeof(struct hif_suspend_tlv)),
-			.suspend = suspend,
-		},
-	};
-
-	if (mt76_is_mmio(dev))
-		req.hdr.hif_type = 2;
-	else if (mt76_is_usb(dev))
-		req.hdr.hif_type = 1;
-	else if (mt76_is_sdio(dev))
-		req.hdr.hif_type = 0;
-
-	return mt76_mcu_send_msg(dev, MCU_UNI_CMD(HIF_CTRL), &req,
-				 sizeof(req), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_hif_suspend);
-
-void mt76_connac_mcu_set_suspend_iter(void *priv, u8 *mac,
-				      struct ieee80211_vif *vif)
-{
-	struct mt76_phy *phy = priv;
-	bool suspend = !test_bit(MT76_STATE_RUNNING, &phy->state);
-	struct ieee80211_hw *hw = phy->hw;
-	struct cfg80211_wowlan *wowlan = hw->wiphy->wowlan_config;
-	int i;
-
-	mt76_connac_mcu_set_gtk_rekey(phy->dev, vif, suspend);
-	mt76_connac_mcu_set_arp_filter(phy->dev, vif, suspend);
-
-	mt76_connac_mcu_set_suspend_mode(phy->dev, vif, suspend, 1, true);
-
-	for (i = 0; i < wowlan->n_patterns; i++)
-		mt76_connac_mcu_set_wow_pattern(phy->dev, vif, i, suspend,
-						&wowlan->patterns[i]);
-	mt76_connac_mcu_set_wow_ctrl(phy, vif, suspend, wowlan);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_suspend_iter);
-#endif /* CONFIG_PM */
-
-u32 mt76_connac_mcu_reg_rr(struct mt76_dev *dev, u32 offset)
-{
-	struct {
-		__le32 addr;
-		__le32 val;
-	} __packed req = {
-		.addr = cpu_to_le32(offset),
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_CE_QUERY(REG_READ), &req,
-				 sizeof(req), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_reg_rr);
-
-void mt76_connac_mcu_reg_wr(struct mt76_dev *dev, u32 offset, u32 val)
-{
-	struct {
-		__le32 addr;
-		__le32 val;
-	} __packed req = {
-		.addr = cpu_to_le32(offset),
-		.val = cpu_to_le32(val),
-	};
-
-	mt76_mcu_send_msg(dev, MCU_CE_CMD(REG_WRITE), &req,
-			  sizeof(req), false);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_reg_wr);
-
-static int
-mt76_connac_mcu_sta_key_tlv(struct mt76_connac_sta_key_conf *sta_key_conf,
-			    struct sk_buff *skb,
-			    struct ieee80211_key_conf *key,
-			    enum set_key_cmd cmd)
-{
-	struct sta_rec_sec *sec;
-	u32 len = sizeof(*sec);
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_KEY_V2, sizeof(*sec));
-	sec = (struct sta_rec_sec *)tlv;
-	sec->add = cmd;
-
-	if (cmd == SET_KEY) {
-		struct sec_key *sec_key;
-		u8 cipher;
-
-		cipher = mt76_connac_mcu_get_cipher(key->cipher);
-		if (cipher == MCU_CIPHER_NONE)
-			return -EOPNOTSUPP;
-
-		sec_key = &sec->key[0];
-		sec_key->cipher_len = sizeof(*sec_key);
-
-		if (cipher == MCU_CIPHER_BIP_CMAC_128) {
-			sec_key->cipher_id = MCU_CIPHER_AES_CCMP;
-			sec_key->key_id = sta_key_conf->keyidx;
-			sec_key->key_len = 16;
-			memcpy(sec_key->key, sta_key_conf->key, 16);
-
-			sec_key = &sec->key[1];
-			sec_key->cipher_id = MCU_CIPHER_BIP_CMAC_128;
-			sec_key->cipher_len = sizeof(*sec_key);
-			sec_key->key_len = 16;
-			memcpy(sec_key->key, key->key, 16);
-			sec->n_cipher = 2;
-		} else {
-			sec_key->cipher_id = cipher;
-			sec_key->key_id = key->keyidx;
-			sec_key->key_len = key->keylen;
-			memcpy(sec_key->key, key->key, key->keylen);
-
-			if (cipher == MCU_CIPHER_TKIP) {
-				/* Rx/Tx MIC keys are swapped */
-				memcpy(sec_key->key + 16, key->key + 24, 8);
-				memcpy(sec_key->key + 24, key->key + 16, 8);
-			}
-
-			/* store key_conf for BIP batch update */
-			if (cipher == MCU_CIPHER_AES_CCMP) {
-				memcpy(sta_key_conf->key, key->key, key->keylen);
-				sta_key_conf->keyidx = key->keyidx;
-			}
-
-			len -= sizeof(*sec_key);
-			sec->n_cipher = 1;
-		}
-	} else {
-		len -= sizeof(sec->key);
-		sec->n_cipher = 0;
-	}
-	sec->len = cpu_to_le16(len);
-
-	return 0;
-}
-
-int mt76_connac_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif,
-			    struct mt76_connac_sta_key_conf *sta_key_conf,
-			    struct ieee80211_key_conf *key, int mcu_cmd,
-			    struct mt76_wcid *wcid, enum set_key_cmd cmd)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct sk_buff *skb;
-	int ret;
-
-	skb = mt76_connac_mcu_alloc_sta_req(dev, mvif, wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	ret = mt76_connac_mcu_sta_key_tlv(sta_key_conf, skb, key, cmd);
-	if (ret)
-		return ret;
-
-	return mt76_mcu_skb_send_msg(dev, skb, mcu_cmd, true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_add_key);
-
-/* SIFS 20us + 512 byte beacon transmitted by 1Mbps (3906us) */
-#define BCN_TX_ESTIMATE_TIME (4096 + 20)
-void mt76_connac_mcu_bss_ext_tlv(struct sk_buff *skb, struct mt76_vif *mvif)
-{
-	struct bss_info_ext_bss *ext;
-	int ext_bss_idx, tsf_offset;
-	struct tlv *tlv;
-
-	ext_bss_idx = mvif->omac_idx - EXT_BSSID_START;
-	if (ext_bss_idx < 0)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, BSS_INFO_EXT_BSS, sizeof(*ext));
-
-	ext = (struct bss_info_ext_bss *)tlv;
-	tsf_offset = ext_bss_idx * BCN_TX_ESTIMATE_TIME;
-	ext->mbss_tsf_offset = cpu_to_le32(tsf_offset);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_bss_ext_tlv);
-
-int mt76_connac_mcu_bss_basic_tlv(struct sk_buff *skb,
-				  struct ieee80211_vif *vif,
-				  struct ieee80211_sta *sta,
-				  struct mt76_phy *phy, u16 wlan_idx,
-				  bool enable)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	u32 type = vif->p2p ? NETWORK_P2P : NETWORK_INFRA;
-	struct bss_info_basic *bss;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, BSS_INFO_BASIC, sizeof(*bss));
-	bss = (struct bss_info_basic *)tlv;
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_MONITOR:
-		break;
-	case NL80211_IFTYPE_AP:
-		if (ieee80211_hw_check(phy->hw, SUPPORTS_MULTI_BSSID)) {
-			u8 bssid_id = vif->bss_conf.bssid_indicator;
-			struct wiphy *wiphy = phy->hw->wiphy;
-
-			if (bssid_id > ilog2(wiphy->mbssid_max_interfaces))
-				return -EINVAL;
-
-			bss->non_tx_bssid = vif->bss_conf.bssid_index;
-			bss->max_bssid = bssid_id;
-		}
-		break;
-	case NL80211_IFTYPE_STATION:
-		if (enable) {
-			rcu_read_lock();
-			if (!sta)
-				sta = ieee80211_find_sta(vif,
-							 vif->bss_conf.bssid);
-			/* TODO: enable BSS_INFO_UAPSD & BSS_INFO_PM */
-			if (sta) {
-				struct mt76_wcid *wcid;
-
-				wcid = (struct mt76_wcid *)sta->drv_priv;
-				wlan_idx = wcid->idx;
-			}
-			rcu_read_unlock();
-		}
-		break;
-	case NL80211_IFTYPE_ADHOC:
-		type = NETWORK_IBSS;
-		break;
-	default:
-		WARN_ON(1);
-		break;
-	}
-
-	bss->network_type = cpu_to_le32(type);
-	bss->bmc_wcid_lo = to_wcid_lo(wlan_idx);
-	bss->bmc_wcid_hi = to_wcid_hi(wlan_idx);
-	bss->wmm_idx = mvif->wmm_idx;
-	bss->active = enable;
-	bss->cipher = mvif->cipher;
-
-	if (vif->type != NL80211_IFTYPE_MONITOR) {
-		struct cfg80211_chan_def *chandef = &phy->chandef;
-
-		memcpy(bss->bssid, vif->bss_conf.bssid, ETH_ALEN);
-		bss->bcn_interval = cpu_to_le16(vif->bss_conf.beacon_int);
-		bss->dtim_period = vif->bss_conf.dtim_period;
-		bss->phy_mode = mt76_connac_get_phy_mode(phy, vif,
-							 chandef->chan->band, NULL);
-	} else {
-		memcpy(bss->bssid, phy->macaddr, ETH_ALEN);
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_bss_basic_tlv);
-
-#define ENTER_PM_STATE		1
-#define EXIT_PM_STATE		2
-int mt76_connac_mcu_set_pm(struct mt76_dev *dev, int band, int enter)
-{
-	struct {
-		u8 pm_number;
-		u8 pm_state;
-		u8 bssid[ETH_ALEN];
-		u8 dtim_period;
-		u8 wlan_idx_lo;
-		__le16 bcn_interval;
-		__le32 aid;
-		__le32 rx_filter;
-		u8 band_idx;
-		u8 wlan_idx_hi;
-		u8 rsv[2];
-		__le32 feature;
-		u8 omac_idx;
-		u8 wmm_idx;
-		u8 bcn_loss_cnt;
-		u8 bcn_sp_duration;
-	} __packed req = {
-		.pm_number = 5,
-		.pm_state = enter ? ENTER_PM_STATE : EXIT_PM_STATE,
-		.band_idx = band,
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_EXT_CMD(PM_STATE_CTRL), &req,
-				 sizeof(req), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_pm);
-
-int mt76_connac_mcu_restart(struct mt76_dev *dev)
-{
-	struct {
-		u8 power_mode;
-		u8 rsv[3];
-	} req = {
-		.power_mode = 1,
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_CMD(NIC_POWER_CTRL), &req,
-				 sizeof(req), false);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_restart);
-
-int mt76_connac_mcu_rdd_cmd(struct mt76_dev *dev, int cmd, u8 index,
-			    u8 rx_sel, u8 val)
-{
-	struct {
-		u8 ctrl;
-		u8 rdd_idx;
-		u8 rdd_rx_sel;
-		u8 val;
-		u8 rsv[4];
-	} __packed req = {
-		.ctrl = cmd,
-		.rdd_idx = index,
-		.rdd_rx_sel = rx_sel,
-		.val = val,
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_EXT_CMD(SET_RDD_CTRL), &req,
-				 sizeof(req), true);
-}
-EXPORT_SYMBOL_GPL(mt76_connac_mcu_rdd_cmd);
-
-static int
-mt76_connac_mcu_send_ram_firmware(struct mt76_dev *dev,
-				  const struct mt76_connac2_fw_trailer *hdr,
-				  const u8 *data, bool is_wa)
-{
-	int i, offset = 0, max_len = mt76_is_sdio(dev) ? 2048 : 4096;
-	u32 override = 0, option = 0;
-
-	for (i = 0; i < hdr->n_region; i++) {
-		const struct mt76_connac2_fw_region *region;
-		u32 len, addr, mode;
-		int err;
-
-		region = (const void *)((const u8 *)hdr -
-					(hdr->n_region - i) * sizeof(*region));
-		mode = mt76_connac_mcu_gen_dl_mode(dev, region->feature_set,
-						   is_wa);
-		len = le32_to_cpu(region->len);
-		addr = le32_to_cpu(region->addr);
-
-		if (region->feature_set & FW_FEATURE_OVERRIDE_ADDR)
-			override = addr;
-
-		err = mt76_connac_mcu_init_download(dev, addr, len, mode);
-		if (err) {
-			dev_err(dev->dev, "Download request failed\n");
-			return err;
-		}
-
-		err = __mt76_mcu_send_firmware(dev, MCU_CMD(FW_SCATTER),
-					       data + offset, len, max_len);
-		if (err) {
-			dev_err(dev->dev, "Failed to send firmware.\n");
-			return err;
-		}
-
-		offset += len;
-	}
-
-	if (override)
-		option |= FW_START_OVERRIDE;
-	if (is_wa)
-		option |= FW_START_WORKING_PDA_CR4;
-
-	return mt76_connac_mcu_start_firmware(dev, override, option);
-}
-
-int mt76_connac2_load_ram(struct mt76_dev *dev, const char *fw_wm,
-			  const char *fw_wa)
-{
-	const struct mt76_connac2_fw_trailer *hdr;
-	const struct firmware *fw;
-	int ret;
-
-	ret = request_firmware(&fw, fw_wm, dev->dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
-		dev_err(dev->dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const void *)(fw->data + fw->size - sizeof(*hdr));
-	dev_info(dev->dev, "WM Firmware Version: %.10s, Build Time: %.15s\n",
-		 hdr->fw_ver, hdr->build_date);
-
-	ret = mt76_connac_mcu_send_ram_firmware(dev, hdr, fw->data, false);
-	if (ret) {
-		dev_err(dev->dev, "Failed to start WM firmware\n");
-		goto out;
-	}
-
-	snprintf(dev->hw->wiphy->fw_version,
-		 sizeof(dev->hw->wiphy->fw_version),
-		 "%.10s-%.15s", hdr->fw_ver, hdr->build_date);
-
-	release_firmware(fw);
-
-	if (!fw_wa)
-		return 0;
-
-	ret = request_firmware(&fw, fw_wa, dev->dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
-		dev_err(dev->dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const void *)(fw->data + fw->size - sizeof(*hdr));
-	dev_info(dev->dev, "WA Firmware Version: %.10s, Build Time: %.15s\n",
-		 hdr->fw_ver, hdr->build_date);
-
-	ret = mt76_connac_mcu_send_ram_firmware(dev, hdr, fw->data, true);
-	if (ret) {
-		dev_err(dev->dev, "Failed to start WA firmware\n");
-		goto out;
-	}
-
-	snprintf(dev->hw->wiphy->fw_version,
-		 sizeof(dev->hw->wiphy->fw_version),
-		 "%.10s-%.15s", hdr->fw_ver, hdr->build_date);
-
-out:
-	release_firmware(fw);
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt76_connac2_load_ram);
-
-static u32 mt76_connac2_get_data_mode(struct mt76_dev *dev, u32 info)
-{
-	u32 mode = DL_MODE_NEED_RSP;
-
-	if (!is_mt7921(dev) || info == PATCH_SEC_NOT_SUPPORT)
-		return mode;
-
-	switch (FIELD_GET(PATCH_SEC_ENC_TYPE_MASK, info)) {
-	case PATCH_SEC_ENC_TYPE_PLAIN:
-		break;
-	case PATCH_SEC_ENC_TYPE_AES:
-		mode |= DL_MODE_ENCRYPT;
-		mode |= FIELD_PREP(DL_MODE_KEY_IDX,
-				(info & PATCH_SEC_ENC_AES_KEY_MASK)) & DL_MODE_KEY_IDX;
-		mode |= DL_MODE_RESET_SEC_IV;
-		break;
-	case PATCH_SEC_ENC_TYPE_SCRAMBLE:
-		mode |= DL_MODE_ENCRYPT;
-		mode |= DL_CONFIG_ENCRY_MODE_SEL;
-		mode |= DL_MODE_RESET_SEC_IV;
-		break;
-	default:
-		dev_err(dev->dev, "Encryption type not support!\n");
-	}
-
-	return mode;
-}
-
-int mt76_connac2_load_patch(struct mt76_dev *dev, const char *fw_name)
-{
-	int i, ret, sem, max_len = mt76_is_sdio(dev) ? 2048 : 4096;
-	const struct mt76_connac2_patch_hdr *hdr;
-	const struct firmware *fw = NULL;
-
-	sem = mt76_connac_mcu_patch_sem_ctrl(dev, true);
-	switch (sem) {
-	case PATCH_IS_DL:
-		return 0;
-	case PATCH_NOT_DL_SEM_SUCCESS:
-		break;
-	default:
-		dev_err(dev->dev, "Failed to get patch semaphore\n");
-		return -EAGAIN;
-	}
-
-	ret = request_firmware(&fw, fw_name, dev->dev);
-	if (ret)
-		goto out;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
-		dev_err(dev->dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const void *)fw->data;
-	dev_info(dev->dev, "HW/SW Version: 0x%x, Build Time: %.16s\n",
-		 be32_to_cpu(hdr->hw_sw_ver), hdr->build_date);
-
-	for (i = 0; i < be32_to_cpu(hdr->desc.n_region); i++) {
-		struct mt76_connac2_patch_sec *sec;
-		u32 len, addr, mode;
-		const u8 *dl;
-		u32 sec_info;
-
-		sec = (void *)(fw->data + sizeof(*hdr) + i * sizeof(*sec));
-		if ((be32_to_cpu(sec->type) & PATCH_SEC_TYPE_MASK) !=
-		    PATCH_SEC_TYPE_INFO) {
-			ret = -EINVAL;
-			goto out;
-		}
-
-		addr = be32_to_cpu(sec->info.addr);
-		len = be32_to_cpu(sec->info.len);
-		dl = fw->data + be32_to_cpu(sec->offs);
-		sec_info = be32_to_cpu(sec->info.sec_key_idx);
-		mode = mt76_connac2_get_data_mode(dev, sec_info);
-
-		ret = mt76_connac_mcu_init_download(dev, addr, len, mode);
-		if (ret) {
-			dev_err(dev->dev, "Download request failed\n");
-			goto out;
-		}
-
-		ret = __mt76_mcu_send_firmware(dev, MCU_CMD(FW_SCATTER),
-					       dl, len, max_len);
-		if (ret) {
-			dev_err(dev->dev, "Failed to send patch\n");
-			goto out;
-		}
-	}
-
-	ret = mt76_connac_mcu_start_patch(dev);
-	if (ret)
-		dev_err(dev->dev, "Failed to start patch\n");
-
-out:
-	sem = mt76_connac_mcu_patch_sem_ctrl(dev, false);
-	switch (sem) {
-	case PATCH_REL_SEM_SUCCESS:
-		break;
-	default:
-		ret = -EAGAIN;
-		dev_err(dev->dev, "Failed to release patch semaphore\n");
-		break;
-	}
-
-	release_firmware(fw);
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt76_connac2_load_patch);
-
-int mt76_connac2_mcu_fill_message(struct mt76_dev *dev, struct sk_buff *skb,
-				  int cmd, int *wait_seq)
-{
-	int txd_len, mcu_cmd = FIELD_GET(__MCU_CMD_FIELD_ID, cmd);
-	struct mt76_connac2_mcu_uni_txd *uni_txd;
-	struct mt76_connac2_mcu_txd *mcu_txd;
-	__le32 *txd;
-	u32 val;
-	u8 seq;
-
-	/* TODO: make dynamic based on msg type */
-	dev->mcu.timeout = 20 * HZ;
-
-	seq = ++dev->mcu.msg_seq & 0xf;
-	if (!seq)
-		seq = ++dev->mcu.msg_seq & 0xf;
-
-	if (cmd == MCU_CMD(FW_SCATTER))
-		goto exit;
-
-	txd_len = cmd & __MCU_CMD_FIELD_UNI ? sizeof(*uni_txd) : sizeof(*mcu_txd);
-	txd = (__le32 *)skb_push(skb, txd_len);
-
-	val = FIELD_PREP(MT_TXD0_TX_BYTES, skb->len) |
-	      FIELD_PREP(MT_TXD0_PKT_FMT, MT_TX_TYPE_CMD) |
-	      FIELD_PREP(MT_TXD0_Q_IDX, MT_TX_MCU_PORT_RX_Q0);
-	txd[0] = cpu_to_le32(val);
-
-	val = MT_TXD1_LONG_FORMAT |
-	      FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_CMD);
-	txd[1] = cpu_to_le32(val);
-
-	if (cmd & __MCU_CMD_FIELD_UNI) {
-		uni_txd = (struct mt76_connac2_mcu_uni_txd *)txd;
-		uni_txd->len = cpu_to_le16(skb->len - sizeof(uni_txd->txd));
-		uni_txd->option = MCU_CMD_UNI_EXT_ACK;
-		uni_txd->cid = cpu_to_le16(mcu_cmd);
-		uni_txd->s2d_index = MCU_S2D_H2N;
-		uni_txd->pkt_type = MCU_PKT_ID;
-		uni_txd->seq = seq;
-
-		goto exit;
-	}
-
-	mcu_txd = (struct mt76_connac2_mcu_txd *)txd;
-	mcu_txd->len = cpu_to_le16(skb->len - sizeof(mcu_txd->txd));
-	mcu_txd->pq_id = cpu_to_le16(MCU_PQ_ID(MT_TX_PORT_IDX_MCU,
-					       MT_TX_MCU_PORT_RX_Q0));
-	mcu_txd->pkt_type = MCU_PKT_ID;
-	mcu_txd->seq = seq;
-	mcu_txd->cid = mcu_cmd;
-	mcu_txd->ext_cid = FIELD_GET(__MCU_CMD_FIELD_EXT_ID, cmd);
-
-	if (mcu_txd->ext_cid || (cmd & __MCU_CMD_FIELD_CE)) {
-		if (cmd & __MCU_CMD_FIELD_QUERY)
-			mcu_txd->set_query = MCU_Q_QUERY;
-		else
-			mcu_txd->set_query = MCU_Q_SET;
-		mcu_txd->ext_cid_ack = !!mcu_txd->ext_cid;
-	} else {
-		mcu_txd->set_query = MCU_Q_NA;
-	}
-
-	if (cmd & __MCU_CMD_FIELD_WA)
-		mcu_txd->s2d_index = MCU_S2D_H2C;
-	else
-		mcu_txd->s2d_index = MCU_S2D_H2N;
-
-exit:
-	if (wait_seq)
-		*wait_seq = seq;
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_connac2_mcu_fill_message);
-
-MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>");
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac_mcu.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac_mcu.h
deleted file mode 100644
index 991e3fe..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76_connac_mcu.h
+++ /dev/null
@@ -1,1886 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT76_CONNAC_MCU_H
-#define __MT76_CONNAC_MCU_H
-
-#include "mt76_connac.h"
-
-#define FW_FEATURE_SET_ENCRYPT		BIT(0)
-#define FW_FEATURE_SET_KEY_IDX		GENMASK(2, 1)
-#define FW_FEATURE_ENCRY_MODE		BIT(4)
-#define FW_FEATURE_OVERRIDE_ADDR	BIT(5)
-#define FW_FEATURE_NON_DL		BIT(6)
-
-#define DL_MODE_ENCRYPT			BIT(0)
-#define DL_MODE_KEY_IDX			GENMASK(2, 1)
-#define DL_MODE_RESET_SEC_IV		BIT(3)
-#define DL_MODE_WORKING_PDA_CR4		BIT(4)
-#define DL_MODE_VALID_RAM_ENTRY         BIT(5)
-#define DL_CONFIG_ENCRY_MODE_SEL	BIT(6)
-#define DL_MODE_NEED_RSP		BIT(31)
-
-#define FW_START_OVERRIDE		BIT(0)
-#define FW_START_WORKING_PDA_CR4	BIT(2)
-
-#define PATCH_SEC_NOT_SUPPORT		GENMASK(31, 0)
-#define PATCH_SEC_TYPE_MASK		GENMASK(15, 0)
-#define PATCH_SEC_TYPE_INFO		0x2
-
-#define PATCH_SEC_ENC_TYPE_MASK			GENMASK(31, 24)
-#define PATCH_SEC_ENC_TYPE_PLAIN		0x00
-#define PATCH_SEC_ENC_TYPE_AES			0x01
-#define PATCH_SEC_ENC_TYPE_SCRAMBLE		0x02
-#define PATCH_SEC_ENC_SCRAMBLE_INFO_MASK	GENMASK(15, 0)
-#define PATCH_SEC_ENC_AES_KEY_MASK		GENMASK(7, 0)
-
-enum {
-	FW_TYPE_DEFAULT = 0,
-	FW_TYPE_CLC = 2,
-	FW_TYPE_MAX_NUM = 255
-};
-
-#define MCU_PQ_ID(p, q)		(((p) << 15) | ((q) << 10))
-#define MCU_PKT_ID		0xa0
-
-struct mt76_connac2_mcu_txd {
-	__le32 txd[8];
-
-	__le16 len;
-	__le16 pq_id;
-
-	u8 cid;
-	u8 pkt_type;
-	u8 set_query; /* FW don't care */
-	u8 seq;
-
-	u8 uc_d2b0_rev;
-	u8 ext_cid;
-	u8 s2d_index;
-	u8 ext_cid_ack;
-
-	u32 rsv[5];
-} __packed __aligned(4);
-
-/**
- * struct mt76_connac2_mcu_uni_txd - mcu command descriptor for connac2 and connac3
- * @txd: hardware descriptor
- * @len: total length not including txd
- * @cid: command identifier
- * @pkt_type: must be 0xa0 (cmd packet by long format)
- * @frag_n: fragment number
- * @seq: sequence number
- * @checksum: 0 mean there is no checksum
- * @s2d_index: index for command source and destination
- *  Definition              | value | note
- *  CMD_S2D_IDX_H2N         | 0x00  | command from HOST to WM
- *  CMD_S2D_IDX_C2N         | 0x01  | command from WA to WM
- *  CMD_S2D_IDX_H2C         | 0x02  | command from HOST to WA
- *  CMD_S2D_IDX_H2N_AND_H2C | 0x03  | command from HOST to WA and WM
- *
- * @option: command option
- *  BIT[0]: UNI_CMD_OPT_BIT_ACK
- *          set to 1 to request a fw reply
- *          if UNI_CMD_OPT_BIT_0_ACK is set and UNI_CMD_OPT_BIT_2_SET_QUERY
- *          is set, mcu firmware will send response event EID = 0x01
- *          (UNI_EVENT_ID_CMD_RESULT) to the host.
- *  BIT[1]: UNI_CMD_OPT_BIT_UNI_CMD
- *          0: original command
- *          1: unified command
- *  BIT[2]: UNI_CMD_OPT_BIT_SET_QUERY
- *          0: QUERY command
- *          1: SET command
- */
-struct mt76_connac2_mcu_uni_txd {
-	__le32 txd[8];
-
-	/* DW1 */
-	__le16 len;
-	__le16 cid;
-
-	/* DW2 */
-	u8 rsv;
-	u8 pkt_type;
-	u8 frag_n;
-	u8 seq;
-
-	/* DW3 */
-	__le16 checksum;
-	u8 s2d_index;
-	u8 option;
-
-	/* DW4 */
-	u8 rsv1[4];
-} __packed __aligned(4);
-
-struct mt76_connac2_mcu_rxd {
-	__le32 rxd[6];
-
-	__le16 len;
-	__le16 pkt_type_id;
-
-	u8 eid;
-	u8 seq;
-	u8 rsv[2];
-
-	u8 ext_eid;
-	u8 rsv1[2];
-	u8 s2d_index;
-};
-
-struct mt76_connac2_patch_hdr {
-	char build_date[16];
-	char platform[4];
-	__be32 hw_sw_ver;
-	__be32 patch_ver;
-	__be16 checksum;
-	u16 rsv;
-	struct {
-		__be32 patch_ver;
-		__be32 subsys;
-		__be32 feature;
-		__be32 n_region;
-		__be32 crc;
-		u32 rsv[11];
-	} desc;
-} __packed;
-
-struct mt76_connac2_patch_sec {
-	__be32 type;
-	__be32 offs;
-	__be32 size;
-	union {
-		__be32 spec[13];
-		struct {
-			__be32 addr;
-			__be32 len;
-			__be32 sec_key_idx;
-			__be32 align_len;
-			u32 rsv[9];
-		} info;
-	};
-} __packed;
-
-struct mt76_connac2_fw_trailer {
-	u8 chip_id;
-	u8 eco_code;
-	u8 n_region;
-	u8 format_ver;
-	u8 format_flag;
-	u8 rsv[2];
-	char fw_ver[10];
-	char build_date[15];
-	__le32 crc;
-} __packed;
-
-struct mt76_connac2_fw_region {
-	__le32 decomp_crc;
-	__le32 decomp_len;
-	__le32 decomp_blk_sz;
-	u8 rsv[4];
-	__le32 addr;
-	__le32 len;
-	u8 feature_set;
-	u8 type;
-	u8 rsv1[14];
-} __packed;
-
-struct tlv {
-	__le16 tag;
-	__le16 len;
-} __packed;
-
-struct bss_info_omac {
-	__le16 tag;
-	__le16 len;
-	u8 hw_bss_idx;
-	u8 omac_idx;
-	u8 band_idx;
-	u8 rsv0;
-	__le32 conn_type;
-	u32 rsv1;
-} __packed;
-
-struct bss_info_basic {
-	__le16 tag;
-	__le16 len;
-	__le32 network_type;
-	u8 active;
-	u8 rsv0;
-	__le16 bcn_interval;
-	u8 bssid[ETH_ALEN];
-	u8 wmm_idx;
-	u8 dtim_period;
-	u8 bmc_wcid_lo;
-	u8 cipher;
-	u8 phy_mode;
-	u8 max_bssid;	/* max BSSID. range: 1 ~ 8, 0: MBSSID disabled */
-	u8 non_tx_bssid;/* non-transmitted BSSID, 0: transmitted BSSID */
-	u8 bmc_wcid_hi;	/* high Byte and version */
-	u8 rsv[2];
-} __packed;
-
-struct bss_info_rf_ch {
-	__le16 tag;
-	__le16 len;
-	u8 pri_ch;
-	u8 center_ch0;
-	u8 center_ch1;
-	u8 bw;
-	u8 he_ru26_block;	/* 1: don't send HETB in RU26, 0: allow */
-	u8 he_all_disable;	/* 1: disallow all HETB, 0: allow */
-	u8 rsv[2];
-} __packed;
-
-struct bss_info_ext_bss {
-	__le16 tag;
-	__le16 len;
-	__le32 mbss_tsf_offset; /* in unit of us */
-	u8 rsv[8];
-} __packed;
-
-enum {
-	BSS_INFO_OMAC,
-	BSS_INFO_BASIC,
-	BSS_INFO_RF_CH,		/* optional, for BT/LTE coex */
-	BSS_INFO_PM,		/* sta only */
-	BSS_INFO_UAPSD,		/* sta only */
-	BSS_INFO_ROAM_DETECT,	/* obsoleted */
-	BSS_INFO_LQ_RM,		/* obsoleted */
-	BSS_INFO_EXT_BSS,
-	BSS_INFO_BMC_RATE,	/* for bmc rate control in CR4 */
-	BSS_INFO_SYNC_MODE,	/* obsoleted */
-	BSS_INFO_RA,
-	BSS_INFO_HW_AMSDU,
-	BSS_INFO_BSS_COLOR,
-	BSS_INFO_HE_BASIC,
-	BSS_INFO_PROTECT_INFO,
-	BSS_INFO_OFFLOAD,
-	BSS_INFO_11V_MBSSID,
-	BSS_INFO_MAX_NUM
-};
-
-/* sta_rec */
-
-struct sta_ntlv_hdr {
-	u8 rsv[2];
-	__le16 tlv_num;
-} __packed;
-
-struct sta_req_hdr {
-	u8 bss_idx;
-	u8 wlan_idx_lo;
-	__le16 tlv_num;
-	u8 is_tlv_append;
-	u8 muar_idx;
-	u8 wlan_idx_hi;
-	u8 rsv;
-} __packed;
-
-struct sta_rec_basic {
-	__le16 tag;
-	__le16 len;
-	__le32 conn_type;
-	u8 conn_state;
-	u8 qos;
-	__le16 aid;
-	u8 peer_addr[ETH_ALEN];
-#define EXTRA_INFO_VER	BIT(0)
-#define EXTRA_INFO_NEW	BIT(1)
-	__le16 extra_info;
-} __packed;
-
-struct sta_rec_ht {
-	__le16 tag;
-	__le16 len;
-	__le16 ht_cap;
-	u16 rsv;
-} __packed;
-
-struct sta_rec_vht {
-	__le16 tag;
-	__le16 len;
-	__le32 vht_cap;
-	__le16 vht_rx_mcs_map;
-	__le16 vht_tx_mcs_map;
-	/* mt7915 - mt7921 */
-	u8 rts_bw_sig;
-	u8 rsv[3];
-} __packed;
-
-struct sta_rec_uapsd {
-	__le16 tag;
-	__le16 len;
-	u8 dac_map;
-	u8 tac_map;
-	u8 max_sp;
-	u8 rsv0;
-	__le16 listen_interval;
-	u8 rsv1[2];
-} __packed;
-
-struct sta_rec_ba {
-	__le16 tag;
-	__le16 len;
-	u8 tid;
-	u8 ba_type;
-	u8 amsdu;
-	u8 ba_en;
-	__le16 ssn;
-	__le16 winsize;
-} __packed;
-
-struct sta_rec_he {
-	__le16 tag;
-	__le16 len;
-
-	__le32 he_cap;
-
-	u8 t_frame_dur;
-	u8 max_ampdu_exp;
-	u8 bw_set;
-	u8 device_class;
-	u8 dcm_tx_mode;
-	u8 dcm_tx_max_nss;
-	u8 dcm_rx_mode;
-	u8 dcm_rx_max_nss;
-	u8 dcm_max_ru;
-	u8 punc_pream_rx;
-	u8 pkt_ext;
-	u8 rsv1;
-
-	__le16 max_nss_mcs[CMD_HE_MCS_BW_NUM];
-
-	u8 rsv2[2];
-} __packed;
-
-struct sta_rec_he_v2 {
-	__le16 tag;
-	__le16 len;
-	u8 he_mac_cap[6];
-	u8 he_phy_cap[11];
-	u8 pkt_ext;
-	/* 0: BW80, 1: BW160, 2: BW8080 */
-	__le16 max_nss_mcs[CMD_HE_MCS_BW_NUM];
-} __packed;
-
-struct sta_rec_amsdu {
-	__le16 tag;
-	__le16 len;
-	u8 max_amsdu_num;
-	u8 max_mpdu_size;
-	u8 amsdu_en;
-	u8 rsv;
-} __packed;
-
-struct sta_rec_state {
-	__le16 tag;
-	__le16 len;
-	__le32 flags;
-	u8 state;
-	u8 vht_opmode;
-	u8 action;
-	u8 rsv[1];
-} __packed;
-
-#define RA_LEGACY_OFDM GENMASK(13, 6)
-#define RA_LEGACY_CCK  GENMASK(3, 0)
-#define HT_MCS_MASK_NUM 10
-struct sta_rec_ra_info {
-	__le16 tag;
-	__le16 len;
-	__le16 legacy;
-	u8 rx_mcs_bitmask[HT_MCS_MASK_NUM];
-} __packed;
-
-struct sta_rec_phy {
-	__le16 tag;
-	__le16 len;
-	__le16 basic_rate;
-	u8 phy_type;
-	u8 ampdu;
-	u8 rts_policy;
-	u8 rcpi;
-	u8 max_ampdu_len; /* connac3 */
-	u8 rsv[1];
-} __packed;
-
-struct sta_rec_he_6g_capa {
-	__le16 tag;
-	__le16 len;
-	__le16 capa;
-	u8 rsv[2];
-} __packed;
-
-struct sec_key {
-	u8 cipher_id;
-	u8 cipher_len;
-	u8 key_id;
-	u8 key_len;
-	u8 key[32];
-} __packed;
-
-struct sta_rec_sec {
-	__le16 tag;
-	__le16 len;
-	u8 add;
-	u8 n_cipher;
-	u8 rsv[2];
-
-	struct sec_key key[2];
-} __packed;
-
-struct sta_rec_bf {
-	__le16 tag;
-	__le16 len;
-
-	__le16 pfmu;		/* 0xffff: no access right for PFMU */
-	bool su_mu;		/* 0: SU, 1: MU */
-	u8 bf_cap;		/* 0: iBF, 1: eBF */
-	u8 sounding_phy;	/* 0: legacy, 1: OFDM, 2: HT, 4: VHT */
-	u8 ndpa_rate;
-	u8 ndp_rate;
-	u8 rept_poll_rate;
-	u8 tx_mode;		/* 0: legacy, 1: OFDM, 2: HT, 4: VHT ... */
-	u8 ncol;
-	u8 nrow;
-	u8 bw;			/* 0: 20M, 1: 40M, 2: 80M, 3: 160M */
-
-	u8 mem_total;
-	u8 mem_20m;
-	struct {
-		u8 row;
-		u8 col: 6, row_msb: 2;
-	} mem[4];
-
-	__le16 smart_ant;
-	u8 se_idx;
-	u8 auto_sounding;	/* b7: low traffic indicator
-				 * b6: Stop sounding for this entry
-				 * b5 ~ b0: postpone sounding
-				 */
-	u8 ibf_timeout;
-	u8 ibf_dbw;
-	u8 ibf_ncol;
-	u8 ibf_nrow;
-	u8 nrow_gt_bw80;
-	u8 ncol_gt_bw80;
-	u8 ru_start_idx;
-	u8 ru_end_idx;
-
-	bool trigger_su;
-	bool trigger_mu;
-	bool ng16_su;
-	bool ng16_mu;
-	bool codebook42_su;
-	bool codebook75_mu;
-
-	u8 he_ltf;
-	u8 rsv[3];
-} __packed;
-
-struct sta_rec_bfee {
-	__le16 tag;
-	__le16 len;
-	bool fb_identity_matrix;	/* 1: feedback identity matrix */
-	bool ignore_feedback;		/* 1: ignore */
-	u8 rsv[2];
-} __packed;
-
-struct sta_rec_muru {
-	__le16 tag;
-	__le16 len;
-
-	struct {
-		bool ofdma_dl_en;
-		bool ofdma_ul_en;
-		bool mimo_dl_en;
-		bool mimo_ul_en;
-		u8 rsv[4];
-	} cfg;
-
-	struct {
-		u8 punc_pream_rx;
-		bool he_20m_in_40m_2g;
-		bool he_20m_in_160m;
-		bool he_80m_in_160m;
-		bool lt16_sigb;
-		bool rx_su_comp_sigb;
-		bool rx_su_non_comp_sigb;
-		u8 rsv;
-	} ofdma_dl;
-
-	struct {
-		u8 t_frame_dur;
-		u8 mu_cascading;
-		u8 uo_ra;
-		u8 he_2x996_tone;
-		u8 rx_t_frame_11ac;
-		u8 rsv[3];
-	} ofdma_ul;
-
-	struct {
-		bool vht_mu_bfee;
-		bool partial_bw_dl_mimo;
-		u8 rsv[2];
-	} mimo_dl;
-
-	struct {
-		bool full_ul_mimo;
-		bool partial_ul_mimo;
-		u8 rsv[2];
-	} mimo_ul;
-} __packed;
-
-struct sta_phy {
-	u8 type;
-	u8 flag;
-	u8 stbc;
-	u8 sgi;
-	u8 bw;
-	u8 ldpc;
-	u8 mcs;
-	u8 nss;
-	u8 he_ltf;
-};
-
-struct sta_rec_ra {
-	__le16 tag;
-	__le16 len;
-
-	u8 valid;
-	u8 auto_rate;
-	u8 phy_mode;
-	u8 channel;
-	u8 bw;
-	u8 disable_cck;
-	u8 ht_mcs32;
-	u8 ht_gf;
-	u8 ht_mcs[4];
-	u8 mmps_mode;
-	u8 gband_256;
-	u8 af;
-	u8 auth_wapi_mode;
-	u8 rate_len;
-
-	u8 supp_mode;
-	u8 supp_cck_rate;
-	u8 supp_ofdm_rate;
-	__le32 supp_ht_mcs;
-	__le16 supp_vht_mcs[4];
-
-	u8 op_mode;
-	u8 op_vht_chan_width;
-	u8 op_vht_rx_nss;
-	u8 op_vht_rx_nss_type;
-
-	__le32 sta_cap;
-
-	struct sta_phy phy;
-} __packed;
-
-struct sta_rec_ra_fixed {
-	__le16 tag;
-	__le16 len;
-
-	__le32 field;
-	u8 op_mode;
-	u8 op_vht_chan_width;
-	u8 op_vht_rx_nss;
-	u8 op_vht_rx_nss_type;
-
-	struct sta_phy phy;
-
-	u8 spe_idx;
-	u8 short_preamble;
-	u8 is_5g;
-	u8 mmps_mode;
-} __packed;
-
-/* wtbl_rec */
-
-struct wtbl_req_hdr {
-	u8 wlan_idx_lo;
-	u8 operation;
-	__le16 tlv_num;
-	u8 wlan_idx_hi;
-	u8 rsv[3];
-} __packed;
-
-struct wtbl_generic {
-	__le16 tag;
-	__le16 len;
-	u8 peer_addr[ETH_ALEN];
-	u8 muar_idx;
-	u8 skip_tx;
-	u8 cf_ack;
-	u8 qos;
-	u8 mesh;
-	u8 adm;
-	__le16 partial_aid;
-	u8 baf_en;
-	u8 aad_om;
-} __packed;
-
-struct wtbl_rx {
-	__le16 tag;
-	__le16 len;
-	u8 rcid;
-	u8 rca1;
-	u8 rca2;
-	u8 rv;
-	u8 rsv[4];
-} __packed;
-
-struct wtbl_ht {
-	__le16 tag;
-	__le16 len;
-	u8 ht;
-	u8 ldpc;
-	u8 af;
-	u8 mm;
-	u8 rsv[4];
-} __packed;
-
-struct wtbl_vht {
-	__le16 tag;
-	__le16 len;
-	u8 ldpc;
-	u8 dyn_bw;
-	u8 vht;
-	u8 txop_ps;
-	u8 rsv[4];
-} __packed;
-
-struct wtbl_tx_ps {
-	__le16 tag;
-	__le16 len;
-	u8 txps;
-	u8 rsv[3];
-} __packed;
-
-struct wtbl_hdr_trans {
-	__le16 tag;
-	__le16 len;
-	u8 to_ds;
-	u8 from_ds;
-	u8 no_rx_trans;
-	u8 rsv;
-} __packed;
-
-struct wtbl_ba {
-	__le16 tag;
-	__le16 len;
-	/* common */
-	u8 tid;
-	u8 ba_type;
-	u8 rsv0[2];
-	/* originator only */
-	__le16 sn;
-	u8 ba_en;
-	u8 ba_winsize_idx;
-	/* originator & recipient */
-	__le16 ba_winsize;
-	/* recipient only */
-	u8 peer_addr[ETH_ALEN];
-	u8 rst_ba_tid;
-	u8 rst_ba_sel;
-	u8 rst_ba_sb;
-	u8 band_idx;
-	u8 rsv1[4];
-} __packed;
-
-struct wtbl_smps {
-	__le16 tag;
-	__le16 len;
-	u8 smps;
-	u8 rsv[3];
-} __packed;
-
-/* mt7615 only */
-
-struct wtbl_bf {
-	__le16 tag;
-	__le16 len;
-	u8 ibf;
-	u8 ebf;
-	u8 ibf_vht;
-	u8 ebf_vht;
-	u8 gid;
-	u8 pfmu_idx;
-	u8 rsv[2];
-} __packed;
-
-struct wtbl_pn {
-	__le16 tag;
-	__le16 len;
-	u8 pn[6];
-	u8 rsv[2];
-} __packed;
-
-struct wtbl_spe {
-	__le16 tag;
-	__le16 len;
-	u8 spe_idx;
-	u8 rsv[3];
-} __packed;
-
-struct wtbl_raw {
-	__le16 tag;
-	__le16 len;
-	u8 wtbl_idx;
-	u8 dw;
-	u8 rsv[2];
-	__le32 msk;
-	__le32 val;
-} __packed;
-
-#define MT76_CONNAC_WTBL_UPDATE_MAX_SIZE (sizeof(struct wtbl_req_hdr) +	\
-					  sizeof(struct wtbl_generic) +	\
-					  sizeof(struct wtbl_rx) +	\
-					  sizeof(struct wtbl_ht) +	\
-					  sizeof(struct wtbl_vht) +	\
-					  sizeof(struct wtbl_tx_ps) +	\
-					  sizeof(struct wtbl_hdr_trans) +\
-					  sizeof(struct wtbl_ba) +	\
-					  sizeof(struct wtbl_bf) +	\
-					  sizeof(struct wtbl_smps) +	\
-					  sizeof(struct wtbl_pn) +	\
-					  sizeof(struct wtbl_spe))
-
-#define MT76_CONNAC_STA_UPDATE_MAX_SIZE	(sizeof(struct sta_req_hdr) +	\
-					 sizeof(struct sta_rec_basic) +	\
-					 sizeof(struct sta_rec_bf) +	\
-					 sizeof(struct sta_rec_ht) +	\
-					 sizeof(struct sta_rec_he) +	\
-					 sizeof(struct sta_rec_ba) +	\
-					 sizeof(struct sta_rec_vht) +	\
-					 sizeof(struct sta_rec_uapsd) + \
-					 sizeof(struct sta_rec_amsdu) +	\
-					 sizeof(struct sta_rec_muru) +	\
-					 sizeof(struct sta_rec_bfee) +	\
-					 sizeof(struct sta_rec_ra) +	\
-					 sizeof(struct sta_rec_sec) +	\
-					 sizeof(struct sta_rec_ra_fixed) + \
-					 sizeof(struct sta_rec_he_6g_capa) + \
-					 sizeof(struct tlv) +		\
-					 MT76_CONNAC_WTBL_UPDATE_MAX_SIZE)
-
-enum {
-	STA_REC_BASIC,
-	STA_REC_RA,
-	STA_REC_RA_CMM_INFO,
-	STA_REC_RA_UPDATE,
-	STA_REC_BF,
-	STA_REC_AMSDU,
-	STA_REC_BA,
-	STA_REC_STATE,
-	STA_REC_TX_PROC,	/* for hdr trans and CSO in CR4 */
-	STA_REC_HT,
-	STA_REC_VHT,
-	STA_REC_APPS,
-	STA_REC_KEY,
-	STA_REC_WTBL,
-	STA_REC_HE,
-	STA_REC_HW_AMSDU,
-	STA_REC_WTBL_AADOM,
-	STA_REC_KEY_V2,
-	STA_REC_MURU,
-	STA_REC_MUEDCA,
-	STA_REC_BFEE,
-	STA_REC_PHY = 0x15,
-	STA_REC_HE_6G = 0x17,
-	STA_REC_HE_V2 = 0x19,
-	STA_REC_HDRT = 0x28,
-	STA_REC_HDR_TRANS = 0x2B,
-	STA_REC_MAX_NUM
-};
-
-enum {
-	WTBL_GENERIC,
-	WTBL_RX,
-	WTBL_HT,
-	WTBL_VHT,
-	WTBL_PEER_PS,		/* not used */
-	WTBL_TX_PS,
-	WTBL_HDR_TRANS,
-	WTBL_SEC_KEY,
-	WTBL_BA,
-	WTBL_RDG,		/* obsoleted */
-	WTBL_PROTECT,		/* not used */
-	WTBL_CLEAR,		/* not used */
-	WTBL_BF,
-	WTBL_SMPS,
-	WTBL_RAW_DATA,		/* debug only */
-	WTBL_PN,
-	WTBL_SPE,
-	WTBL_MAX_NUM
-};
-
-#define STA_TYPE_STA			BIT(0)
-#define STA_TYPE_AP			BIT(1)
-#define STA_TYPE_ADHOC			BIT(2)
-#define STA_TYPE_WDS			BIT(4)
-#define STA_TYPE_BC			BIT(5)
-
-#define NETWORK_INFRA			BIT(16)
-#define NETWORK_P2P			BIT(17)
-#define NETWORK_IBSS			BIT(18)
-#define NETWORK_WDS			BIT(21)
-
-#define SCAN_FUNC_RANDOM_MAC		BIT(0)
-#define SCAN_FUNC_SPLIT_SCAN		BIT(5)
-
-#define CONNECTION_INFRA_STA		(STA_TYPE_STA | NETWORK_INFRA)
-#define CONNECTION_INFRA_AP		(STA_TYPE_AP | NETWORK_INFRA)
-#define CONNECTION_P2P_GC		(STA_TYPE_STA | NETWORK_P2P)
-#define CONNECTION_P2P_GO		(STA_TYPE_AP | NETWORK_P2P)
-#define CONNECTION_IBSS_ADHOC		(STA_TYPE_ADHOC | NETWORK_IBSS)
-#define CONNECTION_WDS			(STA_TYPE_WDS | NETWORK_WDS)
-#define CONNECTION_INFRA_BC		(STA_TYPE_BC | NETWORK_INFRA)
-
-#define CONN_STATE_DISCONNECT		0
-#define CONN_STATE_CONNECT		1
-#define CONN_STATE_PORT_SECURE		2
-
-/* HE MAC */
-#define STA_REC_HE_CAP_HTC			BIT(0)
-#define STA_REC_HE_CAP_BQR			BIT(1)
-#define STA_REC_HE_CAP_BSR			BIT(2)
-#define STA_REC_HE_CAP_OM			BIT(3)
-#define STA_REC_HE_CAP_AMSDU_IN_AMPDU		BIT(4)
-/* HE PHY */
-#define STA_REC_HE_CAP_DUAL_BAND		BIT(5)
-#define STA_REC_HE_CAP_LDPC			BIT(6)
-#define STA_REC_HE_CAP_TRIG_CQI_FK		BIT(7)
-#define STA_REC_HE_CAP_PARTIAL_BW_EXT_RANGE	BIT(8)
-/* STBC */
-#define STA_REC_HE_CAP_LE_EQ_80M_TX_STBC	BIT(9)
-#define STA_REC_HE_CAP_LE_EQ_80M_RX_STBC	BIT(10)
-#define STA_REC_HE_CAP_GT_80M_TX_STBC		BIT(11)
-#define STA_REC_HE_CAP_GT_80M_RX_STBC		BIT(12)
-/* GI */
-#define STA_REC_HE_CAP_SU_PPDU_1LTF_8US_GI	BIT(13)
-#define STA_REC_HE_CAP_SU_MU_PPDU_4LTF_8US_GI	BIT(14)
-#define STA_REC_HE_CAP_ER_SU_PPDU_1LTF_8US_GI	BIT(15)
-#define STA_REC_HE_CAP_ER_SU_PPDU_4LTF_8US_GI	BIT(16)
-#define STA_REC_HE_CAP_NDP_4LTF_3DOT2MS_GI	BIT(17)
-/* 242 TONE */
-#define STA_REC_HE_CAP_BW20_RU242_SUPPORT	BIT(18)
-#define STA_REC_HE_CAP_TX_1024QAM_UNDER_RU242	BIT(19)
-#define STA_REC_HE_CAP_RX_1024QAM_UNDER_RU242	BIT(20)
-
-#define PHY_MODE_A				BIT(0)
-#define PHY_MODE_B				BIT(1)
-#define PHY_MODE_G				BIT(2)
-#define PHY_MODE_GN				BIT(3)
-#define PHY_MODE_AN				BIT(4)
-#define PHY_MODE_AC				BIT(5)
-#define PHY_MODE_AX_24G				BIT(6)
-#define PHY_MODE_AX_5G				BIT(7)
-
-#define PHY_MODE_AX_6G				BIT(0) /* phymode_ext */
-
-#define MODE_CCK				BIT(0)
-#define MODE_OFDM				BIT(1)
-#define MODE_HT					BIT(2)
-#define MODE_VHT				BIT(3)
-#define MODE_HE					BIT(4)
-
-#define STA_CAP_WMM				BIT(0)
-#define STA_CAP_SGI_20				BIT(4)
-#define STA_CAP_SGI_40				BIT(5)
-#define STA_CAP_TX_STBC				BIT(6)
-#define STA_CAP_RX_STBC				BIT(7)
-#define STA_CAP_VHT_SGI_80			BIT(16)
-#define STA_CAP_VHT_SGI_160			BIT(17)
-#define STA_CAP_VHT_TX_STBC			BIT(18)
-#define STA_CAP_VHT_RX_STBC			BIT(19)
-#define STA_CAP_VHT_LDPC			BIT(23)
-#define STA_CAP_LDPC				BIT(24)
-#define STA_CAP_HT				BIT(26)
-#define STA_CAP_VHT				BIT(27)
-#define STA_CAP_HE				BIT(28)
-
-enum {
-	PHY_TYPE_HR_DSSS_INDEX = 0,
-	PHY_TYPE_ERP_INDEX,
-	PHY_TYPE_ERP_P2P_INDEX,
-	PHY_TYPE_OFDM_INDEX,
-	PHY_TYPE_HT_INDEX,
-	PHY_TYPE_VHT_INDEX,
-	PHY_TYPE_HE_INDEX,
-	PHY_TYPE_INDEX_NUM
-};
-
-#define PHY_TYPE_BIT_HR_DSSS			BIT(PHY_TYPE_HR_DSSS_INDEX)
-#define PHY_TYPE_BIT_ERP			BIT(PHY_TYPE_ERP_INDEX)
-#define PHY_TYPE_BIT_OFDM			BIT(PHY_TYPE_OFDM_INDEX)
-#define PHY_TYPE_BIT_HT				BIT(PHY_TYPE_HT_INDEX)
-#define PHY_TYPE_BIT_VHT			BIT(PHY_TYPE_VHT_INDEX)
-#define PHY_TYPE_BIT_HE				BIT(PHY_TYPE_HE_INDEX)
-
-#define MT_WTBL_RATE_TX_MODE			GENMASK(9, 6)
-#define MT_WTBL_RATE_MCS			GENMASK(5, 0)
-#define MT_WTBL_RATE_NSS			GENMASK(12, 10)
-#define MT_WTBL_RATE_HE_GI			GENMASK(7, 4)
-#define MT_WTBL_RATE_GI				GENMASK(3, 0)
-
-#define MT_WTBL_W5_CHANGE_BW_RATE		GENMASK(7, 5)
-#define MT_WTBL_W5_SHORT_GI_20			BIT(8)
-#define MT_WTBL_W5_SHORT_GI_40			BIT(9)
-#define MT_WTBL_W5_SHORT_GI_80			BIT(10)
-#define MT_WTBL_W5_SHORT_GI_160			BIT(11)
-#define MT_WTBL_W5_BW_CAP			GENMASK(13, 12)
-#define MT_WTBL_W5_MPDU_FAIL_COUNT		GENMASK(25, 23)
-#define MT_WTBL_W5_MPDU_OK_COUNT		GENMASK(28, 26)
-#define MT_WTBL_W5_RATE_IDX			GENMASK(31, 29)
-
-enum {
-	WTBL_RESET_AND_SET = 1,
-	WTBL_SET,
-	WTBL_QUERY,
-	WTBL_RESET_ALL
-};
-
-enum {
-	MT_BA_TYPE_INVALID,
-	MT_BA_TYPE_ORIGINATOR,
-	MT_BA_TYPE_RECIPIENT
-};
-
-enum {
-	RST_BA_MAC_TID_MATCH,
-	RST_BA_MAC_MATCH,
-	RST_BA_NO_MATCH
-};
-
-enum {
-	DEV_INFO_ACTIVE,
-	DEV_INFO_MAX_NUM
-};
-
-/* event table */
-enum {
-	MCU_EVENT_TARGET_ADDRESS_LEN = 0x01,
-	MCU_EVENT_FW_START = 0x01,
-	MCU_EVENT_GENERIC = 0x01,
-	MCU_EVENT_ACCESS_REG = 0x02,
-	MCU_EVENT_MT_PATCH_SEM = 0x04,
-	MCU_EVENT_REG_ACCESS = 0x05,
-	MCU_EVENT_LP_INFO = 0x07,
-	MCU_EVENT_SCAN_DONE = 0x0d,
-	MCU_EVENT_TX_DONE = 0x0f,
-	MCU_EVENT_ROC = 0x10,
-	MCU_EVENT_BSS_ABSENCE  = 0x11,
-	MCU_EVENT_BSS_BEACON_LOSS = 0x13,
-	MCU_EVENT_CH_PRIVILEGE = 0x18,
-	MCU_EVENT_SCHED_SCAN_DONE = 0x23,
-	MCU_EVENT_DBG_MSG = 0x27,
-	MCU_EVENT_TXPWR = 0xd0,
-	MCU_EVENT_EXT = 0xed,
-	MCU_EVENT_RESTART_DL = 0xef,
-	MCU_EVENT_COREDUMP = 0xf0,
-};
-
-/* ext event table */
-enum {
-	MCU_EXT_EVENT_PS_SYNC = 0x5,
-	MCU_EXT_EVENT_FW_LOG_2_HOST = 0x13,
-	MCU_EXT_EVENT_THERMAL_PROTECT = 0x22,
-	MCU_EXT_EVENT_ASSERT_DUMP = 0x23,
-	MCU_EXT_EVENT_RDD_REPORT = 0x3a,
-	MCU_EXT_EVENT_CSA_NOTIFY = 0x4f,
-	MCU_EXT_EVENT_BCC_NOTIFY = 0x75,
-	MCU_EXT_EVENT_MURU_CTRL = 0x9f,
-};
-
-/* unified event table */
-enum {
-	MCU_UNI_EVENT_RESULT = 0x01,
-	MCU_UNI_EVENT_FW_LOG_2_HOST = 0x04,
-	MCU_UNI_EVENT_IE_COUNTDOWN = 0x09,
-	MCU_UNI_EVENT_RDD_REPORT = 0x11,
-};
-
-#define MCU_UNI_CMD_EVENT			BIT(1)
-#define MCU_UNI_CMD_UNSOLICITED_EVENT		BIT(2)
-
-enum {
-	MCU_Q_QUERY,
-	MCU_Q_SET,
-	MCU_Q_RESERVED,
-	MCU_Q_NA
-};
-
-enum {
-	MCU_S2D_H2N,
-	MCU_S2D_C2N,
-	MCU_S2D_H2C,
-	MCU_S2D_H2CN
-};
-
-enum {
-	PATCH_NOT_DL_SEM_FAIL,
-	PATCH_IS_DL,
-	PATCH_NOT_DL_SEM_SUCCESS,
-	PATCH_REL_SEM_SUCCESS
-};
-
-enum {
-	FW_STATE_INITIAL,
-	FW_STATE_FW_DOWNLOAD,
-	FW_STATE_NORMAL_OPERATION,
-	FW_STATE_NORMAL_TRX,
-	FW_STATE_RDY = 7
-};
-
-enum {
-	CH_SWITCH_NORMAL = 0,
-	CH_SWITCH_SCAN = 3,
-	CH_SWITCH_MCC = 4,
-	CH_SWITCH_DFS = 5,
-	CH_SWITCH_BACKGROUND_SCAN_START = 6,
-	CH_SWITCH_BACKGROUND_SCAN_RUNNING = 7,
-	CH_SWITCH_BACKGROUND_SCAN_STOP = 8,
-	CH_SWITCH_SCAN_BYPASS_DPD = 9
-};
-
-enum {
-	THERMAL_SENSOR_TEMP_QUERY,
-	THERMAL_SENSOR_MANUAL_CTRL,
-	THERMAL_SENSOR_INFO_QUERY,
-	THERMAL_SENSOR_TASK_CTRL,
-};
-
-enum mcu_cipher_type {
-	MCU_CIPHER_NONE = 0,
-	MCU_CIPHER_WEP40,
-	MCU_CIPHER_WEP104,
-	MCU_CIPHER_WEP128,
-	MCU_CIPHER_TKIP,
-	MCU_CIPHER_AES_CCMP,
-	MCU_CIPHER_CCMP_256,
-	MCU_CIPHER_GCMP,
-	MCU_CIPHER_GCMP_256,
-	MCU_CIPHER_WAPI,
-	MCU_CIPHER_BIP_CMAC_128,
-};
-
-enum {
-	EE_MODE_EFUSE,
-	EE_MODE_BUFFER,
-};
-
-enum {
-	EE_FORMAT_BIN,
-	EE_FORMAT_WHOLE,
-	EE_FORMAT_MULTIPLE,
-};
-
-enum {
-	MCU_PHY_STATE_TX_RATE,
-	MCU_PHY_STATE_RX_RATE,
-	MCU_PHY_STATE_RSSI,
-	MCU_PHY_STATE_CONTENTION_RX_RATE,
-	MCU_PHY_STATE_OFDMLQ_CNINFO,
-};
-
-#define MCU_CMD_ACK				BIT(0)
-#define MCU_CMD_UNI				BIT(1)
-#define MCU_CMD_SET				BIT(2)
-
-#define MCU_CMD_UNI_EXT_ACK			(MCU_CMD_ACK | MCU_CMD_UNI | \
-						 MCU_CMD_SET)
-#define MCU_CMD_UNI_QUERY_ACK			(MCU_CMD_ACK | MCU_CMD_UNI)
-
-#define __MCU_CMD_FIELD_ID			GENMASK(7, 0)
-#define __MCU_CMD_FIELD_EXT_ID			GENMASK(15, 8)
-#define __MCU_CMD_FIELD_QUERY			BIT(16)
-#define __MCU_CMD_FIELD_UNI			BIT(17)
-#define __MCU_CMD_FIELD_CE			BIT(18)
-#define __MCU_CMD_FIELD_WA			BIT(19)
-#define __MCU_CMD_FIELD_WM			BIT(20)
-
-#define MCU_CMD(_t)				FIELD_PREP(__MCU_CMD_FIELD_ID,		\
-							   MCU_CMD_##_t)
-#define MCU_EXT_CMD(_t)				(MCU_CMD(EXT_CID) | \
-						 FIELD_PREP(__MCU_CMD_FIELD_EXT_ID,	\
-							    MCU_EXT_CMD_##_t))
-#define MCU_EXT_QUERY(_t)			(MCU_EXT_CMD(_t) | __MCU_CMD_FIELD_QUERY)
-#define MCU_UNI_CMD(_t)				(__MCU_CMD_FIELD_UNI |			\
-						 FIELD_PREP(__MCU_CMD_FIELD_ID,		\
-							    MCU_UNI_CMD_##_t))
-#define MCU_CE_CMD(_t)				(__MCU_CMD_FIELD_CE |			\
-						 FIELD_PREP(__MCU_CMD_FIELD_ID,		\
-							   MCU_CE_CMD_##_t))
-#define MCU_CE_QUERY(_t)			(MCU_CE_CMD(_t) | __MCU_CMD_FIELD_QUERY)
-
-#define MCU_WA_CMD(_t)				(MCU_CMD(_t) | __MCU_CMD_FIELD_WA)
-#define MCU_WA_EXT_CMD(_t)			(MCU_EXT_CMD(_t) | __MCU_CMD_FIELD_WA)
-#define MCU_WA_PARAM_CMD(_t)			(MCU_WA_CMD(WA_PARAM) | \
-						 FIELD_PREP(__MCU_CMD_FIELD_EXT_ID, \
-							    MCU_WA_PARAM_CMD_##_t))
-
-#define MCU_WM_UNI_CMD(_t)			(MCU_UNI_CMD(_t) |	\
-						 __MCU_CMD_FIELD_WM)
-#define MCU_WM_UNI_CMD_QUERY(_t)		(MCU_UNI_CMD(_t) |	\
-						 __MCU_CMD_FIELD_QUERY |\
-						 __MCU_CMD_FIELD_WM)
-#define MCU_WA_UNI_CMD(_t)			(MCU_UNI_CMD(_t) |	\
-						 __MCU_CMD_FIELD_WA)
-#define MCU_WMWA_UNI_CMD(_t)			(MCU_WM_UNI_CMD(_t) |	\
-						 __MCU_CMD_FIELD_WA)
-
-enum {
-	MCU_EXT_CMD_EFUSE_ACCESS = 0x01,
-	MCU_EXT_CMD_RF_REG_ACCESS = 0x02,
-	MCU_EXT_CMD_RF_TEST = 0x04,
-	MCU_EXT_CMD_PM_STATE_CTRL = 0x07,
-	MCU_EXT_CMD_CHANNEL_SWITCH = 0x08,
-	MCU_EXT_CMD_SET_TX_POWER_CTRL = 0x11,
-	MCU_EXT_CMD_FW_LOG_2_HOST = 0x13,
-	MCU_EXT_CMD_TXBF_ACTION = 0x1e,
-	MCU_EXT_CMD_EFUSE_BUFFER_MODE = 0x21,
-	MCU_EXT_CMD_THERMAL_PROT = 0x23,
-	MCU_EXT_CMD_STA_REC_UPDATE = 0x25,
-	MCU_EXT_CMD_BSS_INFO_UPDATE = 0x26,
-	MCU_EXT_CMD_EDCA_UPDATE = 0x27,
-	MCU_EXT_CMD_DEV_INFO_UPDATE = 0x2A,
-	MCU_EXT_CMD_THERMAL_CTRL = 0x2c,
-	MCU_EXT_CMD_WTBL_UPDATE = 0x32,
-	MCU_EXT_CMD_SET_DRR_CTRL = 0x36,
-	MCU_EXT_CMD_SET_RDD_CTRL = 0x3a,
-	MCU_EXT_CMD_ATE_CTRL = 0x3d,
-	MCU_EXT_CMD_PROTECT_CTRL = 0x3e,
-	MCU_EXT_CMD_DBDC_CTRL = 0x45,
-	MCU_EXT_CMD_MAC_INIT_CTRL = 0x46,
-	MCU_EXT_CMD_RX_HDR_TRANS = 0x47,
-	MCU_EXT_CMD_MUAR_UPDATE = 0x48,
-	MCU_EXT_CMD_BCN_OFFLOAD = 0x49,
-	MCU_EXT_CMD_RX_AIRTIME_CTRL = 0x4a,
-	MCU_EXT_CMD_SET_RX_PATH = 0x4e,
-	MCU_EXT_CMD_EFUSE_FREE_BLOCK = 0x4f,
-	MCU_EXT_CMD_TX_POWER_FEATURE_CTRL = 0x58,
-	MCU_EXT_CMD_RXDCOC_CAL = 0x59,
-	MCU_EXT_CMD_GET_MIB_INFO = 0x5a,
-	MCU_EXT_CMD_TXDPD_CAL = 0x60,
-	MCU_EXT_CMD_CAL_CACHE = 0x67,
-	MCU_EXT_CMD_SET_RADAR_TH = 0x7c,
-	MCU_EXT_CMD_SET_RDD_PATTERN = 0x7d,
-	MCU_EXT_CMD_MWDS_SUPPORT = 0x80,
-	MCU_EXT_CMD_SET_SER_TRIGGER = 0x81,
-	MCU_EXT_CMD_TWT_AGRT_UPDATE = 0x94,
-	MCU_EXT_CMD_FW_DBG_CTRL = 0x95,
-	MCU_EXT_CMD_OFFCH_SCAN_CTRL = 0x9a,
-	MCU_EXT_CMD_SET_RDD_TH = 0x9d,
-	MCU_EXT_CMD_MURU_CTRL = 0x9f,
-	MCU_EXT_CMD_SET_SPR = 0xa8,
-	MCU_EXT_CMD_GROUP_PRE_CAL_INFO = 0xab,
-	MCU_EXT_CMD_DPD_PRE_CAL_INFO = 0xac,
-	MCU_EXT_CMD_PHY_STAT_INFO = 0xad,
-};
-
-enum {
-	MCU_UNI_CMD_DEV_INFO_UPDATE = 0x01,
-	MCU_UNI_CMD_BSS_INFO_UPDATE = 0x02,
-	MCU_UNI_CMD_STA_REC_UPDATE = 0x03,
-	MCU_UNI_CMD_EDCA_UPDATE = 0x04,
-	MCU_UNI_CMD_SUSPEND = 0x05,
-	MCU_UNI_CMD_OFFLOAD = 0x06,
-	MCU_UNI_CMD_HIF_CTRL = 0x07,
-	MCU_UNI_CMD_BAND_CONFIG = 0x08,
-	MCU_UNI_CMD_WSYS_CONFIG = 0x0b,
-	MCU_UNI_CMD_REG_ACCESS = 0x0d,
-	MCU_UNI_CMD_POWER_CREL = 0x0f,
-	MCU_UNI_CMD_RX_HDR_TRANS = 0x12,
-	MCU_UNI_CMD_TWT = 0x14,
-	MCU_UNI_CMD_RDD_CTRL = 0x19,
-	MCU_UNI_CMD_GET_MIB_INFO = 0x22,
-	MCU_UNI_CMD_SNIFFER = 0x24,
-	MCU_UNI_CMD_SR = 0x25,
-	MCU_UNI_CMD_TXPOWER = 0x2b,
-	MCU_UNI_CMD_EFUSE_CTRL = 0x2d,
-	MCU_UNI_CMD_RA = 0x2f,
-	MCU_UNI_CMD_MURU = 0x31,
-	MCU_UNI_CMD_BF = 0x33,
-	MCU_UNI_CMD_CHANNEL_SWITCH = 0x34,
-	MCU_UNI_CMD_THERMAL = 0x35,
-	MCU_UNI_CMD_VOW = 0x37,
-	MCU_UNI_CMD_RRO = 0x57,
-};
-
-enum {
-	MCU_CMD_TARGET_ADDRESS_LEN_REQ = 0x01,
-	MCU_CMD_FW_START_REQ = 0x02,
-	MCU_CMD_INIT_ACCESS_REG = 0x3,
-	MCU_CMD_NIC_POWER_CTRL = 0x4,
-	MCU_CMD_PATCH_START_REQ = 0x05,
-	MCU_CMD_PATCH_FINISH_REQ = 0x07,
-	MCU_CMD_PATCH_SEM_CONTROL = 0x10,
-	MCU_CMD_WA_PARAM = 0xc4,
-	MCU_CMD_EXT_CID = 0xed,
-	MCU_CMD_FW_SCATTER = 0xee,
-	MCU_CMD_RESTART_DL_REQ = 0xef,
-};
-
-/* offload mcu commands */
-enum {
-	MCU_CE_CMD_TEST_CTRL = 0x01,
-	MCU_CE_CMD_START_HW_SCAN = 0x03,
-	MCU_CE_CMD_SET_PS_PROFILE = 0x05,
-	MCU_CE_CMD_SET_CHAN_DOMAIN = 0x0f,
-	MCU_CE_CMD_SET_BSS_CONNECTED = 0x16,
-	MCU_CE_CMD_SET_BSS_ABORT = 0x17,
-	MCU_CE_CMD_CANCEL_HW_SCAN = 0x1b,
-	MCU_CE_CMD_SET_ROC = 0x1c,
-	MCU_CE_CMD_SET_EDCA_PARMS = 0x1d,
-	MCU_CE_CMD_SET_P2P_OPPPS = 0x33,
-	MCU_CE_CMD_SET_CLC = 0x5c,
-	MCU_CE_CMD_SET_RATE_TX_POWER = 0x5d,
-	MCU_CE_CMD_SCHED_SCAN_ENABLE = 0x61,
-	MCU_CE_CMD_SCHED_SCAN_REQ = 0x62,
-	MCU_CE_CMD_GET_NIC_CAPAB = 0x8a,
-	MCU_CE_CMD_SET_MU_EDCA_PARMS = 0xb0,
-	MCU_CE_CMD_REG_WRITE = 0xc0,
-	MCU_CE_CMD_REG_READ = 0xc0,
-	MCU_CE_CMD_CHIP_CONFIG = 0xca,
-	MCU_CE_CMD_FWLOG_2_HOST = 0xc5,
-	MCU_CE_CMD_GET_WTBL = 0xcd,
-	MCU_CE_CMD_GET_TXPWR = 0xd0,
-};
-
-enum {
-	PATCH_SEM_RELEASE,
-	PATCH_SEM_GET
-};
-
-enum {
-	UNI_BSS_INFO_BASIC = 0,
-	UNI_BSS_INFO_RA = 1,
-	UNI_BSS_INFO_RLM = 2,
-	UNI_BSS_INFO_BSS_COLOR = 4,
-	UNI_BSS_INFO_HE_BASIC = 5,
-	UNI_BSS_INFO_BCN_CONTENT = 7,
-	UNI_BSS_INFO_BCN_CSA = 8,
-	UNI_BSS_INFO_BCN_BCC = 9,
-	UNI_BSS_INFO_BCN_MBSSID = 10,
-	UNI_BSS_INFO_RATE = 11,
-	UNI_BSS_INFO_QBSS = 15,
-	UNI_BSS_INFO_SEC = 16,
-	UNI_BSS_INFO_TXCMD = 18,
-	UNI_BSS_INFO_UAPSD = 19,
-	UNI_BSS_INFO_PS = 21,
-	UNI_BSS_INFO_BCNFT = 22,
-	UNI_BSS_INFO_OFFLOAD = 25,
-	UNI_BSS_INFO_MLD = 26,
-};
-
-enum {
-	UNI_OFFLOAD_OFFLOAD_ARP,
-	UNI_OFFLOAD_OFFLOAD_ND,
-	UNI_OFFLOAD_OFFLOAD_GTK_REKEY,
-	UNI_OFFLOAD_OFFLOAD_BMC_RPY_DETECT,
-};
-
-enum {
-	MT_NIC_CAP_TX_RESOURCE,
-	MT_NIC_CAP_TX_EFUSE_ADDR,
-	MT_NIC_CAP_COEX,
-	MT_NIC_CAP_SINGLE_SKU,
-	MT_NIC_CAP_CSUM_OFFLOAD,
-	MT_NIC_CAP_HW_VER,
-	MT_NIC_CAP_SW_VER,
-	MT_NIC_CAP_MAC_ADDR,
-	MT_NIC_CAP_PHY,
-	MT_NIC_CAP_MAC,
-	MT_NIC_CAP_FRAME_BUF,
-	MT_NIC_CAP_BEAM_FORM,
-	MT_NIC_CAP_LOCATION,
-	MT_NIC_CAP_MUMIMO,
-	MT_NIC_CAP_BUFFER_MODE_INFO,
-	MT_NIC_CAP_HW_ADIE_VERSION = 0x14,
-	MT_NIC_CAP_ANTSWP = 0x16,
-	MT_NIC_CAP_WFDMA_REALLOC,
-	MT_NIC_CAP_6G,
-};
-
-#define UNI_WOW_DETECT_TYPE_MAGIC		BIT(0)
-#define UNI_WOW_DETECT_TYPE_ANY			BIT(1)
-#define UNI_WOW_DETECT_TYPE_DISCONNECT		BIT(2)
-#define UNI_WOW_DETECT_TYPE_GTK_REKEY_FAIL	BIT(3)
-#define UNI_WOW_DETECT_TYPE_BCN_LOST		BIT(4)
-#define UNI_WOW_DETECT_TYPE_SCH_SCAN_HIT	BIT(5)
-#define UNI_WOW_DETECT_TYPE_BITMAP		BIT(6)
-
-enum {
-	UNI_SUSPEND_MODE_SETTING,
-	UNI_SUSPEND_WOW_CTRL,
-	UNI_SUSPEND_WOW_GPIO_PARAM,
-	UNI_SUSPEND_WOW_WAKEUP_PORT,
-	UNI_SUSPEND_WOW_PATTERN,
-};
-
-enum {
-	WOW_USB = 1,
-	WOW_PCIE = 2,
-	WOW_GPIO = 3,
-};
-
-struct mt76_connac_bss_basic_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 active;
-	u8 omac_idx;
-	u8 hw_bss_idx;
-	u8 band_idx;
-	__le32 conn_type;
-	u8 conn_state;
-	u8 wmm_idx;
-	u8 bssid[ETH_ALEN];
-	__le16 bmc_tx_wlan_idx;
-	__le16 bcn_interval;
-	u8 dtim_period;
-	u8 phymode; /* bit(0): A
-		     * bit(1): B
-		     * bit(2): G
-		     * bit(3): GN
-		     * bit(4): AN
-		     * bit(5): AC
-		     * bit(6): AX2
-		     * bit(7): AX5
-		     * bit(8): AX6
-		     */
-	__le16 sta_idx;
-	__le16 nonht_basic_phy;
-	u8 phymode_ext; /* bit(0) AX_6G */
-	u8 pad[1];
-} __packed;
-
-struct mt76_connac_bss_qos_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 qos;
-	u8 pad[3];
-} __packed;
-
-struct mt76_connac_beacon_loss_event {
-	u8 bss_idx;
-	u8 reason;
-	u8 pad[2];
-} __packed;
-
-struct mt76_connac_mcu_bss_event {
-	u8 bss_idx;
-	u8 is_absent;
-	u8 free_quota;
-	u8 pad;
-} __packed;
-
-struct mt76_connac_mcu_scan_ssid {
-	__le32 ssid_len;
-	u8 ssid[IEEE80211_MAX_SSID_LEN];
-} __packed;
-
-struct mt76_connac_mcu_scan_channel {
-	u8 band; /* 1: 2.4GHz
-		  * 2: 5.0GHz
-		  * Others: Reserved
-		  */
-	u8 channel_num;
-} __packed;
-
-struct mt76_connac_mcu_scan_match {
-	__le32 rssi_th;
-	u8 ssid[IEEE80211_MAX_SSID_LEN];
-	u8 ssid_len;
-	u8 rsv[3];
-} __packed;
-
-struct mt76_connac_hw_scan_req {
-	u8 seq_num;
-	u8 bss_idx;
-	u8 scan_type; /* 0: PASSIVE SCAN
-		       * 1: ACTIVE SCAN
-		       */
-	u8 ssid_type; /* BIT(0) wildcard SSID
-		       * BIT(1) P2P wildcard SSID
-		       * BIT(2) specified SSID + wildcard SSID
-		       * BIT(2) + ssid_type_ext BIT(0) specified SSID only
-		       */
-	u8 ssids_num;
-	u8 probe_req_num; /* Number of probe request for each SSID */
-	u8 scan_func; /* BIT(0) Enable random MAC scan
-		       * BIT(1) Disable DBDC scan type 1~3.
-		       * BIT(2) Use DBDC scan type 3 (dedicated one RF to scan).
-		       */
-	u8 version; /* 0: Not support fields after ies.
-		     * 1: Support fields after ies.
-		     */
-	struct mt76_connac_mcu_scan_ssid ssids[4];
-	__le16 probe_delay_time;
-	__le16 channel_dwell_time; /* channel Dwell interval */
-	__le16 timeout_value;
-	u8 channel_type; /* 0: Full channels
-			  * 1: Only 2.4GHz channels
-			  * 2: Only 5GHz channels
-			  * 3: P2P social channel only (channel #1, #6 and #11)
-			  * 4: Specified channels
-			  * Others: Reserved
-			  */
-	u8 channels_num; /* valid when channel_type is 4 */
-	/* valid when channels_num is set */
-	struct mt76_connac_mcu_scan_channel channels[32];
-	__le16 ies_len;
-	u8 ies[MT76_CONNAC_SCAN_IE_LEN];
-	/* following fields are valid if version > 0 */
-	u8 ext_channels_num;
-	u8 ext_ssids_num;
-	__le16 channel_min_dwell_time;
-	struct mt76_connac_mcu_scan_channel ext_channels[32];
-	struct mt76_connac_mcu_scan_ssid ext_ssids[6];
-	u8 bssid[ETH_ALEN];
-	u8 random_mac[ETH_ALEN]; /* valid when BIT(1) in scan_func is set. */
-	u8 pad[63];
-	u8 ssid_type_ext;
-} __packed;
-
-#define MT76_CONNAC_SCAN_DONE_EVENT_MAX_CHANNEL_NUM		64
-
-struct mt76_connac_hw_scan_done {
-	u8 seq_num;
-	u8 sparse_channel_num;
-	struct mt76_connac_mcu_scan_channel sparse_channel;
-	u8 complete_channel_num;
-	u8 current_state;
-	u8 version;
-	u8 pad;
-	__le32 beacon_scan_num;
-	u8 pno_enabled;
-	u8 pad2[3];
-	u8 sparse_channel_valid_num;
-	u8 pad3[3];
-	u8 channel_num[MT76_CONNAC_SCAN_DONE_EVENT_MAX_CHANNEL_NUM];
-	/* idle format for channel_idle_time
-	 * 0: first bytes: idle time(ms) 2nd byte: dwell time(ms)
-	 * 1: first bytes: idle time(8ms) 2nd byte: dwell time(8ms)
-	 * 2: dwell time (16us)
-	 */
-	__le16 channel_idle_time[MT76_CONNAC_SCAN_DONE_EVENT_MAX_CHANNEL_NUM];
-	/* beacon and probe response count */
-	u8 beacon_probe_num[MT76_CONNAC_SCAN_DONE_EVENT_MAX_CHANNEL_NUM];
-	u8 mdrdy_count[MT76_CONNAC_SCAN_DONE_EVENT_MAX_CHANNEL_NUM];
-	__le32 beacon_2g_num;
-	__le32 beacon_5g_num;
-} __packed;
-
-struct mt76_connac_sched_scan_req {
-	u8 version;
-	u8 seq_num;
-	u8 stop_on_match;
-	u8 ssids_num;
-	u8 match_num;
-	u8 pad;
-	__le16 ie_len;
-	struct mt76_connac_mcu_scan_ssid ssids[MT76_CONNAC_MAX_SCHED_SCAN_SSID];
-	struct mt76_connac_mcu_scan_match match[MT76_CONNAC_MAX_SCAN_MATCH];
-	u8 channel_type;
-	u8 channels_num;
-	u8 intervals_num;
-	u8 scan_func; /* MT7663: BIT(0) eable random mac address */
-	struct mt76_connac_mcu_scan_channel channels[64];
-	__le16 intervals[MT76_CONNAC_MAX_NUM_SCHED_SCAN_INTERVAL];
-	union {
-		struct {
-			u8 random_mac[ETH_ALEN];
-			u8 pad2[58];
-		} mt7663;
-		struct {
-			u8 bss_idx;
-			u8 pad1[3];
-			__le32 delay;
-			u8 pad2[12];
-			u8 random_mac[ETH_ALEN];
-			u8 pad3[38];
-		} mt7921;
-	};
-} __packed;
-
-struct mt76_connac_sched_scan_done {
-	u8 seq_num;
-	u8 status; /* 0: ssid found */
-	__le16 pad;
-} __packed;
-
-struct bss_info_uni_bss_color {
-	__le16 tag;
-	__le16 len;
-	u8 enable;
-	u8 bss_color;
-	u8 rsv[2];
-} __packed;
-
-struct bss_info_uni_he {
-	__le16 tag;
-	__le16 len;
-	__le16 he_rts_thres;
-	u8 he_pe_duration;
-	u8 su_disable;
-	__le16 max_nss_mcs[CMD_HE_MCS_BW_NUM];
-	u8 rsv[2];
-} __packed;
-
-struct mt76_connac_gtk_rekey_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 kek[NL80211_KEK_LEN];
-	u8 kck[NL80211_KCK_LEN];
-	u8 replay_ctr[NL80211_REPLAY_CTR_LEN];
-	u8 rekey_mode; /* 0: rekey offload enable
-			* 1: rekey offload disable
-			* 2: rekey update
-			*/
-	u8 keyid;
-	u8 option; /* 1: rekey data update without enabling offload */
-	u8 pad[1];
-	__le32 proto; /* WPA-RSN-WAPI-OPSN */
-	__le32 pairwise_cipher;
-	__le32 group_cipher;
-	__le32 key_mgmt; /* NONE-PSK-IEEE802.1X */
-	__le32 mgmt_group_cipher;
-	u8 reserverd[4];
-} __packed;
-
-#define MT76_CONNAC_WOW_MASK_MAX_LEN			16
-#define MT76_CONNAC_WOW_PATTEN_MAX_LEN			128
-
-struct mt76_connac_wow_pattern_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 index; /* pattern index */
-	u8 enable; /* 0: disable
-		    * 1: enable
-		    */
-	u8 data_len; /* pattern length */
-	u8 pad;
-	u8 mask[MT76_CONNAC_WOW_MASK_MAX_LEN];
-	u8 pattern[MT76_CONNAC_WOW_PATTEN_MAX_LEN];
-	u8 rsv[4];
-} __packed;
-
-struct mt76_connac_wow_ctrl_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 cmd; /* 0x1: PM_WOWLAN_REQ_START
-		 * 0x2: PM_WOWLAN_REQ_STOP
-		 * 0x3: PM_WOWLAN_PARAM_CLEAR
-		 */
-	u8 trigger; /* 0: NONE
-		     * BIT(0): NL80211_WOWLAN_TRIG_MAGIC_PKT
-		     * BIT(1): NL80211_WOWLAN_TRIG_ANY
-		     * BIT(2): NL80211_WOWLAN_TRIG_DISCONNECT
-		     * BIT(3): NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE
-		     * BIT(4): BEACON_LOST
-		     * BIT(5): NL80211_WOWLAN_TRIG_NET_DETECT
-		     */
-	u8 wakeup_hif; /* 0x0: HIF_SDIO
-			* 0x1: HIF_USB
-			* 0x2: HIF_PCIE
-			* 0x3: HIF_GPIO
-			*/
-	u8 pad;
-	u8 rsv[4];
-} __packed;
-
-struct mt76_connac_wow_gpio_param_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 gpio_pin;
-	u8 trigger_lvl;
-	u8 pad[2];
-	__le32 gpio_interval;
-	u8 rsv[4];
-} __packed;
-
-struct mt76_connac_arpns_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 mode;
-	u8 ips_num;
-	u8 option;
-	u8 pad[1];
-} __packed;
-
-struct mt76_connac_suspend_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 enable; /* 0: suspend mode disabled
-		    * 1: suspend mode enabled
-		    */
-	u8 mdtim; /* LP parameter */
-	u8 wow_suspend; /* 0: update by origin policy
-			 * 1: update by wow dtim
-			 */
-	u8 pad[5];
-} __packed;
-
-enum mt76_sta_info_state {
-	MT76_STA_INFO_STATE_NONE,
-	MT76_STA_INFO_STATE_AUTH,
-	MT76_STA_INFO_STATE_ASSOC
-};
-
-struct mt76_sta_cmd_info {
-	struct ieee80211_sta *sta;
-	struct mt76_wcid *wcid;
-
-	struct ieee80211_vif *vif;
-
-	bool offload_fw;
-	bool enable;
-	bool newly;
-	int cmd;
-	u8 rcpi;
-	u8 state;
-};
-
-#define MT_SKU_POWER_LIMIT	161
-
-struct mt76_connac_sku_tlv {
-	u8 channel;
-	s8 pwr_limit[MT_SKU_POWER_LIMIT];
-} __packed;
-
-struct mt76_connac_tx_power_limit_tlv {
-	/* DW0 - common info*/
-	u8 ver;
-	u8 pad0;
-	__le16 len;
-	/* DW1 - cmd hint */
-	u8 n_chan; /* # channel */
-	u8 band; /* 2.4GHz - 5GHz - 6GHz */
-	u8 last_msg;
-	u8 pad1;
-	/* DW3 */
-	u8 alpha2[4]; /* regulatory_request.alpha2 */
-	u8 pad2[32];
-} __packed;
-
-struct mt76_connac_config {
-	__le16 id;
-	u8 type;
-	u8 resp_type;
-	__le16 data_size;
-	__le16 resv;
-	u8 data[320];
-} __packed;
-
-static inline enum mcu_cipher_type
-mt76_connac_mcu_get_cipher(int cipher)
-{
-	switch (cipher) {
-	case WLAN_CIPHER_SUITE_WEP40:
-		return MCU_CIPHER_WEP40;
-	case WLAN_CIPHER_SUITE_WEP104:
-		return MCU_CIPHER_WEP104;
-	case WLAN_CIPHER_SUITE_TKIP:
-		return MCU_CIPHER_TKIP;
-	case WLAN_CIPHER_SUITE_AES_CMAC:
-		return MCU_CIPHER_BIP_CMAC_128;
-	case WLAN_CIPHER_SUITE_CCMP:
-		return MCU_CIPHER_AES_CCMP;
-	case WLAN_CIPHER_SUITE_CCMP_256:
-		return MCU_CIPHER_CCMP_256;
-	case WLAN_CIPHER_SUITE_GCMP:
-		return MCU_CIPHER_GCMP;
-	case WLAN_CIPHER_SUITE_GCMP_256:
-		return MCU_CIPHER_GCMP_256;
-	case WLAN_CIPHER_SUITE_SMS4:
-		return MCU_CIPHER_WAPI;
-	default:
-		return MCU_CIPHER_NONE;
-	}
-}
-
-static inline u32
-mt76_connac_mcu_gen_dl_mode(struct mt76_dev *dev, u8 feature_set, bool is_wa)
-{
-	u32 ret = 0;
-
-	ret |= feature_set & FW_FEATURE_SET_ENCRYPT ?
-	       DL_MODE_ENCRYPT | DL_MODE_RESET_SEC_IV : 0;
-	if (is_mt7921(dev))
-		ret |= feature_set & FW_FEATURE_ENCRY_MODE ?
-		       DL_CONFIG_ENCRY_MODE_SEL : 0;
-	ret |= FIELD_PREP(DL_MODE_KEY_IDX,
-			  FIELD_GET(FW_FEATURE_SET_KEY_IDX, feature_set));
-	ret |= DL_MODE_NEED_RSP;
-	ret |= is_wa ? DL_MODE_WORKING_PDA_CR4 : 0;
-
-	return ret;
-}
-
-#define to_wcid_lo(id)		FIELD_GET(GENMASK(7, 0), (u16)id)
-#define to_wcid_hi(id)		FIELD_GET(GENMASK(9, 8), (u16)id)
-
-static inline void
-mt76_connac_mcu_get_wlan_idx(struct mt76_dev *dev, struct mt76_wcid *wcid,
-			     u8 *wlan_idx_lo, u8 *wlan_idx_hi)
-{
-	*wlan_idx_hi = 0;
-
-	if (!is_connac_v1(dev)) {
-		*wlan_idx_lo = wcid ? to_wcid_lo(wcid->idx) : 0;
-		*wlan_idx_hi = wcid ? to_wcid_hi(wcid->idx) : 0;
-	} else {
-		*wlan_idx_lo = wcid ? wcid->idx : 0;
-	}
-}
-
-struct sk_buff *
-__mt76_connac_mcu_alloc_sta_req(struct mt76_dev *dev, struct mt76_vif *mvif,
-				struct mt76_wcid *wcid, int len);
-static inline struct sk_buff *
-mt76_connac_mcu_alloc_sta_req(struct mt76_dev *dev, struct mt76_vif *mvif,
-			      struct mt76_wcid *wcid)
-{
-	return __mt76_connac_mcu_alloc_sta_req(dev, mvif, wcid,
-					       MT76_CONNAC_STA_UPDATE_MAX_SIZE);
-}
-
-struct wtbl_req_hdr *
-mt76_connac_mcu_alloc_wtbl_req(struct mt76_dev *dev, struct mt76_wcid *wcid,
-			       int cmd, void *sta_wtbl, struct sk_buff **skb);
-struct tlv *mt76_connac_mcu_add_nested_tlv(struct sk_buff *skb, int tag,
-					   int len, void *sta_ntlv,
-					   void *sta_wtbl);
-static inline struct tlv *
-mt76_connac_mcu_add_tlv(struct sk_buff *skb, int tag, int len)
-{
-	return mt76_connac_mcu_add_nested_tlv(skb, tag, len, skb->data, NULL);
-}
-
-int mt76_connac_mcu_set_channel_domain(struct mt76_phy *phy);
-int mt76_connac_mcu_set_vif_ps(struct mt76_dev *dev, struct ieee80211_vif *vif);
-void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
-				   struct ieee80211_vif *vif,
-				   struct ieee80211_sta *sta, bool enable,
-				   bool newly);
-void mt76_connac_mcu_wtbl_generic_tlv(struct mt76_dev *dev, struct sk_buff *skb,
-				      struct ieee80211_vif *vif,
-				      struct ieee80211_sta *sta, void *sta_wtbl,
-				      void *wtbl_tlv);
-void mt76_connac_mcu_wtbl_hdr_trans_tlv(struct sk_buff *skb,
-					struct ieee80211_vif *vif,
-					struct mt76_wcid *wcid,
-					void *sta_wtbl, void *wtbl_tlv);
-int mt76_connac_mcu_sta_update_hdr_trans(struct mt76_dev *dev,
-					 struct ieee80211_vif *vif,
-					 struct mt76_wcid *wcid, int cmd);
-int mt76_connac_mcu_wtbl_update_hdr_trans(struct mt76_dev *dev,
-					  struct ieee80211_vif *vif,
-					  struct ieee80211_sta *sta);
-void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
-			     struct ieee80211_sta *sta,
-			     struct ieee80211_vif *vif,
-			     u8 rcpi, u8 state);
-void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
-				 struct ieee80211_sta *sta, void *sta_wtbl,
-				 void *wtbl_tlv, bool ht_ldpc, bool vht_ldpc);
-void mt76_connac_mcu_wtbl_ba_tlv(struct mt76_dev *dev, struct sk_buff *skb,
-				 struct ieee80211_ampdu_params *params,
-				 bool enable, bool tx, void *sta_wtbl,
-				 void *wtbl_tlv);
-void mt76_connac_mcu_sta_ba_tlv(struct sk_buff *skb,
-				struct ieee80211_ampdu_params *params,
-				bool enable, bool tx);
-int mt76_connac_mcu_uni_add_dev(struct mt76_phy *phy,
-				struct ieee80211_vif *vif,
-				struct mt76_wcid *wcid,
-				bool enable);
-int mt76_connac_mcu_sta_ba(struct mt76_dev *dev, struct mt76_vif *mvif,
-			   struct ieee80211_ampdu_params *params,
-			   int cmd, bool enable, bool tx);
-int mt76_connac_mcu_uni_add_bss(struct mt76_phy *phy,
-				struct ieee80211_vif *vif,
-				struct mt76_wcid *wcid,
-				bool enable);
-int mt76_connac_mcu_sta_cmd(struct mt76_phy *phy,
-			    struct mt76_sta_cmd_info *info);
-void mt76_connac_mcu_beacon_loss_iter(void *priv, u8 *mac,
-				      struct ieee80211_vif *vif);
-int mt76_connac_mcu_set_rts_thresh(struct mt76_dev *dev, u32 val, u8 band);
-int mt76_connac_mcu_set_mac_enable(struct mt76_dev *dev, int band, bool enable,
-				   bool hdr_trans);
-int mt76_connac_mcu_init_download(struct mt76_dev *dev, u32 addr, u32 len,
-				  u32 mode);
-int mt76_connac_mcu_start_patch(struct mt76_dev *dev);
-int mt76_connac_mcu_patch_sem_ctrl(struct mt76_dev *dev, bool get);
-int mt76_connac_mcu_start_firmware(struct mt76_dev *dev, u32 addr, u32 option);
-int mt76_connac_mcu_get_nic_capability(struct mt76_phy *phy);
-
-int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
-			    struct ieee80211_scan_request *scan_req);
-int mt76_connac_mcu_cancel_hw_scan(struct mt76_phy *phy,
-				   struct ieee80211_vif *vif);
-int mt76_connac_mcu_sched_scan_req(struct mt76_phy *phy,
-				   struct ieee80211_vif *vif,
-				   struct cfg80211_sched_scan_request *sreq);
-int mt76_connac_mcu_sched_scan_enable(struct mt76_phy *phy,
-				      struct ieee80211_vif *vif,
-				      bool enable);
-int mt76_connac_mcu_update_arp_filter(struct mt76_dev *dev,
-				      struct mt76_vif *vif,
-				      struct ieee80211_bss_conf *info);
-int mt76_connac_mcu_update_gtk_rekey(struct ieee80211_hw *hw,
-				     struct ieee80211_vif *vif,
-				     struct cfg80211_gtk_rekey_data *key);
-int mt76_connac_mcu_set_hif_suspend(struct mt76_dev *dev, bool suspend);
-void mt76_connac_mcu_set_suspend_iter(void *priv, u8 *mac,
-				      struct ieee80211_vif *vif);
-int mt76_connac_sta_state_dp(struct mt76_dev *dev,
-			     enum ieee80211_sta_state old_state,
-			     enum ieee80211_sta_state new_state);
-int mt76_connac_mcu_chip_config(struct mt76_dev *dev);
-int mt76_connac_mcu_set_deep_sleep(struct mt76_dev *dev, bool enable);
-void mt76_connac_mcu_coredump_event(struct mt76_dev *dev, struct sk_buff *skb,
-				    struct mt76_connac_coredump *coredump);
-int mt76_connac_mcu_set_rate_txpower(struct mt76_phy *phy);
-int mt76_connac_mcu_set_p2p_oppps(struct ieee80211_hw *hw,
-				  struct ieee80211_vif *vif);
-u32 mt76_connac_mcu_reg_rr(struct mt76_dev *dev, u32 offset);
-void mt76_connac_mcu_reg_wr(struct mt76_dev *dev, u32 offset, u32 val);
-
-const struct ieee80211_sta_he_cap *
-mt76_connac_get_he_phy_cap(struct mt76_phy *phy, struct ieee80211_vif *vif);
-u8 mt76_connac_get_phy_mode(struct mt76_phy *phy, struct ieee80211_vif *vif,
-			    enum nl80211_band band, struct ieee80211_sta *sta);
-
-int mt76_connac_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif,
-			    struct mt76_connac_sta_key_conf *sta_key_conf,
-			    struct ieee80211_key_conf *key, int mcu_cmd,
-			    struct mt76_wcid *wcid, enum set_key_cmd cmd);
-
-void mt76_connac_mcu_bss_ext_tlv(struct sk_buff *skb, struct mt76_vif *mvif);
-void mt76_connac_mcu_bss_omac_tlv(struct sk_buff *skb,
-				  struct ieee80211_vif *vif);
-int mt76_connac_mcu_bss_basic_tlv(struct sk_buff *skb,
-				  struct ieee80211_vif *vif,
-				  struct ieee80211_sta *sta,
-				  struct mt76_phy *phy, u16 wlan_idx,
-				  bool enable);
-void mt76_connac_mcu_sta_uapsd(struct sk_buff *skb, struct ieee80211_vif *vif,
-			       struct ieee80211_sta *sta);
-void mt76_connac_mcu_wtbl_smps_tlv(struct sk_buff *skb,
-				   struct ieee80211_sta *sta,
-				   void *sta_wtbl, void *wtbl_tlv);
-int mt76_connac_mcu_set_pm(struct mt76_dev *dev, int band, int enter);
-int mt76_connac_mcu_restart(struct mt76_dev *dev);
-int mt76_connac_mcu_rdd_cmd(struct mt76_dev *dev, int cmd, u8 index,
-			    u8 rx_sel, u8 val);
-int mt76_connac2_load_ram(struct mt76_dev *dev, const char *fw_wm,
-			  const char *fw_wa);
-int mt76_connac2_load_patch(struct mt76_dev *dev, const char *fw_name);
-int mt76_connac2_mcu_fill_message(struct mt76_dev *mdev, struct sk_buff *skb,
-				  int cmd, int *wait_seq);
-#endif /* __MT76_CONNAC_MCU_H */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/Makefile b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/Makefile
deleted file mode 100644
index 8dcfb4c..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-only
-obj-$(CONFIG_MT76x0U) += mt76x0u.o
-obj-$(CONFIG_MT76x0E) += mt76x0e.o
-obj-$(CONFIG_MT76x0_COMMON) += mt76x0-common.o
-
-mt76x0-common-y := init.o main.o eeprom.o phy.o
-
-mt76x0u-y := usb.o usb_mcu.o
-mt76x0e-y := pci.o pci_mcu.o
-
-# ccflags-y := -DDEBUG
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/eeprom.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/eeprom.c
deleted file mode 100644
index c3a392a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/eeprom.c
+++ /dev/null
@@ -1,345 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-
-#include <linux/module.h>
-#include <linux/of.h>
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/partitions.h>
-#include <linux/etherdevice.h>
-#include <asm/unaligned.h>
-#include "mt76x0.h"
-#include "eeprom.h"
-#include "../mt76x02_phy.h"
-
-#define MT_MAP_READS	DIV_ROUND_UP(MT_EFUSE_USAGE_MAP_SIZE, 16)
-static int
-mt76x0_efuse_physical_size_check(struct mt76x02_dev *dev)
-{
-	u8 data[MT_MAP_READS * 16];
-	int ret, i;
-	u32 start = 0, end = 0, cnt_free;
-
-	ret = mt76x02_get_efuse_data(dev, MT_EE_USAGE_MAP_START, data,
-				     sizeof(data), MT_EE_PHYSICAL_READ);
-	if (ret)
-		return ret;
-
-	for (i = 0; i < MT_EFUSE_USAGE_MAP_SIZE; i++)
-		if (!data[i]) {
-			if (!start)
-				start = MT_EE_USAGE_MAP_START + i;
-			end = MT_EE_USAGE_MAP_START + i;
-		}
-	cnt_free = end - start + 1;
-
-	if (MT_EFUSE_USAGE_MAP_SIZE - cnt_free < 5) {
-		dev_err(dev->mt76.dev,
-			"driver does not support default EEPROM\n");
-		return -EINVAL;
-	}
-
-	return 0;
-}
-
-static void mt76x0_set_chip_cap(struct mt76x02_dev *dev)
-{
-	u16 nic_conf0 = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_0);
-	u16 nic_conf1 = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1);
-
-	mt76x02_eeprom_parse_hw_cap(dev);
-	dev_dbg(dev->mt76.dev, "2GHz %d 5GHz %d\n",
-		dev->mphy.cap.has_2ghz, dev->mphy.cap.has_5ghz);
-
-	if (dev->no_2ghz) {
-		dev->mphy.cap.has_2ghz = false;
-		dev_dbg(dev->mt76.dev, "mask out 2GHz support\n");
-	}
-
-	if (is_mt7630(dev)) {
-		dev->mphy.cap.has_5ghz = false;
-		dev_dbg(dev->mt76.dev, "mask out 5GHz support\n");
-	}
-
-	if (!mt76x02_field_valid(nic_conf1 & 0xff))
-		nic_conf1 &= 0xff00;
-
-	if (nic_conf1 & MT_EE_NIC_CONF_1_HW_RF_CTRL)
-		dev_dbg(dev->mt76.dev,
-			"driver does not support HW RF ctrl\n");
-
-	if (!mt76x02_field_valid(nic_conf0 >> 8))
-		return;
-
-	if (FIELD_GET(MT_EE_NIC_CONF_0_RX_PATH, nic_conf0) > 1 ||
-	    FIELD_GET(MT_EE_NIC_CONF_0_TX_PATH, nic_conf0) > 1)
-		dev_err(dev->mt76.dev, "invalid tx-rx stream\n");
-}
-
-static void mt76x0_set_temp_offset(struct mt76x02_dev *dev)
-{
-	u8 val;
-
-	val = mt76x02_eeprom_get(dev, MT_EE_2G_TARGET_POWER) >> 8;
-	if (mt76x02_field_valid(val))
-		dev->cal.rx.temp_offset = mt76x02_sign_extend(val, 8);
-	else
-		dev->cal.rx.temp_offset = -10;
-}
-
-static void mt76x0_set_freq_offset(struct mt76x02_dev *dev)
-{
-	struct mt76x02_rx_freq_cal *caldata = &dev->cal.rx;
-	u8 val;
-
-	val = mt76x02_eeprom_get(dev, MT_EE_FREQ_OFFSET);
-	if (!mt76x02_field_valid(val))
-		val = 0;
-	caldata->freq_offset = val;
-
-	val = mt76x02_eeprom_get(dev, MT_EE_TSSI_BOUND4) >> 8;
-	if (!mt76x02_field_valid(val))
-		val = 0;
-
-	caldata->freq_offset -= mt76x02_sign_extend(val, 8);
-}
-
-void mt76x0_read_rx_gain(struct mt76x02_dev *dev)
-{
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-	struct mt76x02_rx_freq_cal *caldata = &dev->cal.rx;
-	s8 val, lna_5g[3], lna_2g;
-	u16 rssi_offset;
-	int i;
-
-	mt76x02_get_rx_gain(dev, chan->band, &rssi_offset, &lna_2g, lna_5g);
-	caldata->lna_gain = mt76x02_get_lna_gain(dev, &lna_2g, lna_5g, chan);
-
-	for (i = 0; i < ARRAY_SIZE(caldata->rssi_offset); i++) {
-		val = rssi_offset >> (8 * i);
-		if (val < -10 || val > 10)
-			val = 0;
-
-		caldata->rssi_offset[i] = val;
-	}
-}
-
-static s8 mt76x0_get_delta(struct mt76x02_dev *dev)
-{
-	struct cfg80211_chan_def *chandef = &dev->mphy.chandef;
-	u8 val;
-
-	if (chandef->width == NL80211_CHAN_WIDTH_80) {
-		val = mt76x02_eeprom_get(dev, MT_EE_5G_TARGET_POWER) >> 8;
-	} else if (chandef->width == NL80211_CHAN_WIDTH_40) {
-		u16 data;
-
-		data = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_DELTA_BW40);
-		if (chandef->chan->band == NL80211_BAND_5GHZ)
-			val = data >> 8;
-		else
-			val = data;
-	} else {
-		return 0;
-	}
-
-	return mt76x02_rate_power_val(val);
-}
-
-void mt76x0_get_tx_power_per_rate(struct mt76x02_dev *dev,
-				  struct ieee80211_channel *chan,
-				  struct mt76x02_rate_power *t)
-{
-	bool is_2ghz = chan->band == NL80211_BAND_2GHZ;
-	u16 val, addr;
-	s8 delta;
-
-	memset(t, 0, sizeof(*t));
-
-	/* cck 1M, 2M, 5.5M, 11M */
-	val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_BYRATE_BASE);
-	t->cck[0] = t->cck[1] = s6_to_s8(val);
-	t->cck[2] = t->cck[3] = s6_to_s8(val >> 8);
-
-	/* ofdm 6M, 9M, 12M, 18M */
-	addr = is_2ghz ? MT_EE_TX_POWER_BYRATE_BASE + 2 : 0x120;
-	val = mt76x02_eeprom_get(dev, addr);
-	t->ofdm[0] = t->ofdm[1] = s6_to_s8(val);
-	t->ofdm[2] = t->ofdm[3] = s6_to_s8(val >> 8);
-
-	/* ofdm 24M, 36M, 48M, 54M */
-	addr = is_2ghz ? MT_EE_TX_POWER_BYRATE_BASE + 4 : 0x122;
-	val = mt76x02_eeprom_get(dev, addr);
-	t->ofdm[4] = t->ofdm[5] = s6_to_s8(val);
-	t->ofdm[6] = t->ofdm[7] = s6_to_s8(val >> 8);
-
-	/* ht-vht mcs 1ss 0, 1, 2, 3 */
-	addr = is_2ghz ? MT_EE_TX_POWER_BYRATE_BASE + 6 : 0x124;
-	val = mt76x02_eeprom_get(dev, addr);
-	t->ht[0] = t->ht[1] = s6_to_s8(val);
-	t->ht[2] = t->ht[3] = s6_to_s8(val >> 8);
-
-	/* ht-vht mcs 1ss 4, 5, 6 */
-	addr = is_2ghz ? MT_EE_TX_POWER_BYRATE_BASE + 8 : 0x126;
-	val = mt76x02_eeprom_get(dev, addr);
-	t->ht[4] = t->ht[5] = s6_to_s8(val);
-	t->ht[6] = t->ht[7] = s6_to_s8(val >> 8);
-
-	/* vht mcs 8, 9 5GHz */
-	val = mt76x02_eeprom_get(dev, 0x12c);
-	t->vht[0] = s6_to_s8(val);
-	t->vht[1] = s6_to_s8(val >> 8);
-
-	delta = mt76x0_tssi_enabled(dev) ? 0 : mt76x0_get_delta(dev);
-	mt76x02_add_rate_power_offset(t, delta);
-}
-
-void mt76x0_get_power_info(struct mt76x02_dev *dev,
-			   struct ieee80211_channel *chan, s8 *tp)
-{
-	static const struct mt76x0_chan_map {
-		u8 chan;
-		u8 offset;
-	} chan_map[] = {
-		{   2,  0 }, {   4,  2 }, {   6,  4 }, {   8,  6 },
-		{  10,  8 }, {  12, 10 }, {  14, 12 }, {  38,  0 },
-		{  44,  2 }, {  48,  4 }, {  54,  6 }, {  60,  8 },
-		{  64, 10 }, { 102, 12 }, { 108, 14 }, { 112, 16 },
-		{ 118, 18 }, { 124, 20 }, { 128, 22 }, { 134, 24 },
-		{ 140, 26 }, { 151, 28 }, { 157, 30 }, { 161, 32 },
-		{ 167, 34 }, { 171, 36 }, { 175, 38 },
-	};
-	u8 offset, addr;
-	int i, idx = 0;
-	u16 data;
-
-	if (mt76x0_tssi_enabled(dev)) {
-		s8 target_power;
-
-		if (chan->band == NL80211_BAND_5GHZ)
-			data = mt76x02_eeprom_get(dev, MT_EE_5G_TARGET_POWER);
-		else
-			data = mt76x02_eeprom_get(dev, MT_EE_2G_TARGET_POWER);
-		target_power = (data & 0xff) - dev->rate_power.ofdm[7];
-		*tp = target_power + mt76x0_get_delta(dev);
-
-		return;
-	}
-
-	for (i = 0; i < ARRAY_SIZE(chan_map); i++) {
-		if (chan->hw_value <= chan_map[i].chan) {
-			idx = (chan->hw_value == chan_map[i].chan);
-			offset = chan_map[i].offset;
-			break;
-		}
-	}
-	if (i == ARRAY_SIZE(chan_map))
-		offset = chan_map[0].offset;
-
-	if (chan->band == NL80211_BAND_2GHZ) {
-		addr = MT_EE_TX_POWER_DELTA_BW80 + offset;
-	} else {
-		switch (chan->hw_value) {
-		case 42:
-			offset = 2;
-			break;
-		case 58:
-			offset = 8;
-			break;
-		case 106:
-			offset = 14;
-			break;
-		case 122:
-			offset = 20;
-			break;
-		case 155:
-			offset = 30;
-			break;
-		default:
-			break;
-		}
-		addr = MT_EE_TX_POWER_0_GRP4_TSSI_SLOPE + 2 + offset;
-	}
-
-	data = mt76x02_eeprom_get(dev, addr);
-	*tp = data >> (8 * idx);
-	if (*tp < 0 || *tp > 0x3f)
-		*tp = 5;
-}
-
-static int mt76x0_check_eeprom(struct mt76x02_dev *dev)
-{
-	u16 val;
-
-	val = get_unaligned_le16(dev->mt76.eeprom.data);
-	if (!val)
-		val = get_unaligned_le16(dev->mt76.eeprom.data +
-					 MT_EE_PCI_ID);
-
-	switch (val) {
-	case 0x7650:
-	case 0x7610:
-		return 0;
-	default:
-		dev_err(dev->mt76.dev, "EEPROM data check failed: %04x\n",
-			val);
-		return -EINVAL;
-	}
-}
-
-static int mt76x0_load_eeprom(struct mt76x02_dev *dev)
-{
-	int found;
-
-	found = mt76_eeprom_init(&dev->mt76, MT76X0_EEPROM_SIZE);
-	if (found < 0)
-		return found;
-
-	if (found && !mt76x0_check_eeprom(dev))
-		return 0;
-
-	found = mt76x0_efuse_physical_size_check(dev);
-	if (found < 0)
-		return found;
-
-	return mt76x02_get_efuse_data(dev, 0, dev->mt76.eeprom.data,
-				      MT76X0_EEPROM_SIZE, MT_EE_READ);
-}
-
-int mt76x0_eeprom_init(struct mt76x02_dev *dev)
-{
-	u8 version, fae;
-	u16 data;
-	int err;
-
-	err = mt76x0_load_eeprom(dev);
-	if (err < 0)
-		return err;
-
-	data = mt76x02_eeprom_get(dev, MT_EE_VERSION);
-	version = data >> 8;
-	fae = data;
-
-	if (version > MT76X0U_EE_MAX_VER)
-		dev_warn(dev->mt76.dev,
-			 "Warning: unsupported EEPROM version %02hhx\n",
-			 version);
-	dev_info(dev->mt76.dev, "EEPROM ver:%02hhx fae:%02hhx\n",
-		 version, fae);
-
-	memcpy(dev->mphy.macaddr, (u8 *)dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
-	       ETH_ALEN);
-	mt76_eeprom_override(&dev->mphy);
-	mt76x02_mac_setaddr(dev, dev->mphy.macaddr);
-
-	mt76x0_set_chip_cap(dev);
-	mt76x0_set_freq_offset(dev);
-	mt76x0_set_temp_offset(dev);
-
-	return 0;
-}
-
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/eeprom.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/eeprom.h
deleted file mode 100644
index 08f1b10..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/eeprom.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-
-#ifndef __MT76X0U_EEPROM_H
-#define __MT76X0U_EEPROM_H
-
-#include "../mt76x02_eeprom.h"
-
-struct mt76x02_dev;
-
-#define MT76X0U_EE_MAX_VER		0x0c
-#define MT76X0_EEPROM_SIZE		512
-
-int mt76x0_eeprom_init(struct mt76x02_dev *dev);
-void mt76x0_read_rx_gain(struct mt76x02_dev *dev);
-void mt76x0_get_tx_power_per_rate(struct mt76x02_dev *dev,
-				  struct ieee80211_channel *chan,
-				  struct mt76x02_rate_power *t);
-void mt76x0_get_power_info(struct mt76x02_dev *dev,
-			   struct ieee80211_channel *chan, s8 *tp);
-
-static inline s8 s6_to_s8(u32 val)
-{
-	s8 ret = val & GENMASK(5, 0);
-
-	if (ret & BIT(5))
-		ret -= BIT(6);
-	return ret;
-}
-
-static inline bool mt76x0_tssi_enabled(struct mt76x02_dev *dev)
-{
-	return (mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1) &
-		MT_EE_NIC_CONF_1_TX_ALC_EN);
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/init.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/init.c
deleted file mode 100644
index 6257460..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/init.c
+++ /dev/null
@@ -1,266 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * (c) Copyright 2002-2010, Ralink Technology, Inc.
- * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-
-#include "mt76x0.h"
-#include "eeprom.h"
-#include "mcu.h"
-#include "initvals.h"
-#include "initvals_init.h"
-#include "../mt76x02_phy.h"
-
-static void
-mt76x0_set_wlan_state(struct mt76x02_dev *dev, u32 val, bool enable)
-{
-	u32 mask = MT_CMB_CTRL_XTAL_RDY | MT_CMB_CTRL_PLL_LD;
-
-	/* Note: we don't turn off WLAN_CLK because that makes the device
-	 *	 not respond properly on the probe path.
-	 *	 In case anyone (PSM?) wants to use this function we can
-	 *	 bring the clock stuff back and fixup the probe path.
-	 */
-
-	if (enable)
-		val |= (MT_WLAN_FUN_CTRL_WLAN_EN |
-			MT_WLAN_FUN_CTRL_WLAN_CLK_EN);
-	else
-		val &= ~(MT_WLAN_FUN_CTRL_WLAN_EN);
-
-	mt76_wr(dev, MT_WLAN_FUN_CTRL, val);
-	udelay(20);
-
-	/* Note: vendor driver tries to disable/enable wlan here and retry
-	 *       but the code which does it is so buggy it must have never
-	 *       triggered, so don't bother.
-	 */
-	if (enable && !mt76_poll(dev, MT_CMB_CTRL, mask, mask, 2000))
-		dev_err(dev->mt76.dev, "PLL and XTAL check failed\n");
-}
-
-void mt76x0_chip_onoff(struct mt76x02_dev *dev, bool enable, bool reset)
-{
-	u32 val;
-
-	val = mt76_rr(dev, MT_WLAN_FUN_CTRL);
-
-	if (reset) {
-		val |= MT_WLAN_FUN_CTRL_GPIO_OUT_EN;
-		val &= ~MT_WLAN_FUN_CTRL_FRC_WL_ANT_SEL;
-
-		if (val & MT_WLAN_FUN_CTRL_WLAN_EN) {
-			val |= (MT_WLAN_FUN_CTRL_WLAN_RESET |
-				MT_WLAN_FUN_CTRL_WLAN_RESET_RF);
-			mt76_wr(dev, MT_WLAN_FUN_CTRL, val);
-			udelay(20);
-
-			val &= ~(MT_WLAN_FUN_CTRL_WLAN_RESET |
-				 MT_WLAN_FUN_CTRL_WLAN_RESET_RF);
-		}
-	}
-
-	mt76_wr(dev, MT_WLAN_FUN_CTRL, val);
-	udelay(20);
-
-	mt76x0_set_wlan_state(dev, val, enable);
-}
-EXPORT_SYMBOL_GPL(mt76x0_chip_onoff);
-
-static void mt76x0_reset_csr_bbp(struct mt76x02_dev *dev)
-{
-	mt76_wr(dev, MT_MAC_SYS_CTRL,
-		MT_MAC_SYS_CTRL_RESET_CSR |
-		MT_MAC_SYS_CTRL_RESET_BBP);
-	msleep(200);
-	mt76_clear(dev, MT_MAC_SYS_CTRL,
-		   MT_MAC_SYS_CTRL_RESET_CSR |
-		   MT_MAC_SYS_CTRL_RESET_BBP);
-}
-
-#define RANDOM_WRITE(dev, tab)			\
-	mt76_wr_rp(dev, MT_MCU_MEMMAP_WLAN,	\
-		   tab, ARRAY_SIZE(tab))
-
-static int mt76x0_init_bbp(struct mt76x02_dev *dev)
-{
-	int ret, i;
-
-	ret = mt76x0_phy_wait_bbp_ready(dev);
-	if (ret)
-		return ret;
-
-	RANDOM_WRITE(dev, mt76x0_bbp_init_tab);
-
-	for (i = 0; i < ARRAY_SIZE(mt76x0_bbp_switch_tab); i++) {
-		const struct mt76x0_bbp_switch_item *item = &mt76x0_bbp_switch_tab[i];
-		const struct mt76_reg_pair *pair = &item->reg_pair;
-
-		if (((RF_G_BAND | RF_BW_20) & item->bw_band) == (RF_G_BAND | RF_BW_20))
-			mt76_wr(dev, pair->reg, pair->value);
-	}
-
-	RANDOM_WRITE(dev, mt76x0_dcoc_tab);
-
-	return 0;
-}
-
-static void mt76x0_init_mac_registers(struct mt76x02_dev *dev)
-{
-	RANDOM_WRITE(dev, common_mac_reg_table);
-
-	/* Enable PBF and MAC clock SYS_CTRL[11:10] = 0x3 */
-	RANDOM_WRITE(dev, mt76x0_mac_reg_table);
-
-	/* Release BBP and MAC reset MAC_SYS_CTRL[1:0] = 0x0 */
-	mt76_clear(dev, MT_MAC_SYS_CTRL, 0x3);
-
-	/* Set 0x141C[15:12]=0xF */
-	mt76_set(dev, MT_EXT_CCA_CFG, 0xf000);
-
-	mt76_clear(dev, MT_FCE_L2_STUFF, MT_FCE_L2_STUFF_WR_MPDU_LEN_EN);
-
-	/*
-	 * tx_ring 9 is for mgmt frame
-	 * tx_ring 8 is for in-band command frame.
-	 * WMM_RG0_TXQMA: this register setting is for FCE to
-	 *		  define the rule of tx_ring 9
-	 * WMM_RG1_TXQMA: this register setting is for FCE to
-	 *		  define the rule of tx_ring 8
-	 */
-	mt76_rmw(dev, MT_WMM_CTRL, 0x3ff, 0x201);
-}
-
-void mt76x0_mac_stop(struct mt76x02_dev *dev)
-{
-	int i = 200, ok = 0;
-
-	mt76_clear(dev, MT_TXOP_CTRL_CFG, MT_TXOP_ED_CCA_EN);
-
-	/* Page count on TxQ */
-	while (i-- && ((mt76_rr(dev, 0x0438) & 0xffffffff) ||
-		       (mt76_rr(dev, 0x0a30) & 0x000000ff) ||
-		       (mt76_rr(dev, 0x0a34) & 0x00ff00ff)))
-		msleep(10);
-
-	if (!mt76_poll(dev, MT_MAC_STATUS, MT_MAC_STATUS_TX, 0, 1000))
-		dev_warn(dev->mt76.dev, "Warning: MAC TX did not stop!\n");
-
-	mt76_clear(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_RX |
-					 MT_MAC_SYS_CTRL_ENABLE_TX);
-
-	/* Page count on RxQ */
-	for (i = 0; i < 200; i++) {
-		if (!(mt76_rr(dev, MT_RXQ_STA) & 0x00ff0000) &&
-		    !mt76_rr(dev, 0x0a30) &&
-		    !mt76_rr(dev, 0x0a34)) {
-			if (ok++ > 5)
-				break;
-			continue;
-		}
-		msleep(1);
-	}
-
-	if (!mt76_poll(dev, MT_MAC_STATUS, MT_MAC_STATUS_RX, 0, 1000))
-		dev_warn(dev->mt76.dev, "Warning: MAC RX did not stop!\n");
-}
-EXPORT_SYMBOL_GPL(mt76x0_mac_stop);
-
-int mt76x0_init_hardware(struct mt76x02_dev *dev)
-{
-	int ret, i, k;
-
-	if (!mt76x02_wait_for_wpdma(&dev->mt76, 1000))
-		return -EIO;
-
-	/* Wait for ASIC ready after FW load. */
-	if (!mt76x02_wait_for_mac(&dev->mt76))
-		return -ETIMEDOUT;
-
-	mt76x0_reset_csr_bbp(dev);
-	ret = mt76x02_mcu_function_select(dev, Q_SELECT, 1);
-	if (ret)
-		return ret;
-
-	mt76x0_init_mac_registers(dev);
-
-	if (!mt76x02_wait_for_txrx_idle(&dev->mt76))
-		return -EIO;
-
-	ret = mt76x0_init_bbp(dev);
-	if (ret)
-		return ret;
-
-	dev->mt76.rxfilter = mt76_rr(dev, MT_RX_FILTR_CFG);
-
-	for (i = 0; i < 16; i++)
-		for (k = 0; k < 4; k++)
-			mt76x02_mac_shared_key_setup(dev, i, k, NULL);
-
-	for (i = 0; i < 256; i++)
-		mt76x02_mac_wcid_setup(dev, i, 0, NULL);
-
-	ret = mt76x0_eeprom_init(dev);
-	if (ret)
-		return ret;
-
-	mt76x0_phy_init(dev);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x0_init_hardware);
-
-static void
-mt76x0_init_txpower(struct mt76x02_dev *dev,
-		    struct ieee80211_supported_band *sband)
-{
-	struct ieee80211_channel *chan;
-	struct mt76x02_rate_power t;
-	s8 tp;
-	int i;
-
-	for (i = 0; i < sband->n_channels; i++) {
-		chan = &sband->channels[i];
-
-		mt76x0_get_tx_power_per_rate(dev, chan, &t);
-		mt76x0_get_power_info(dev, chan, &tp);
-
-		chan->orig_mpwr = (mt76x02_get_max_rate_power(&t) + tp) / 2;
-		chan->max_power = min_t(int, chan->max_reg_power,
-					chan->orig_mpwr);
-	}
-}
-
-int mt76x0_register_device(struct mt76x02_dev *dev)
-{
-	int ret;
-
-	ret = mt76x02_init_device(dev);
-	if (ret)
-		return ret;
-
-	mt76x02_config_mac_addr_list(dev);
-
-	ret = mt76_register_device(&dev->mt76, true, mt76x02_rates,
-				   ARRAY_SIZE(mt76x02_rates));
-	if (ret)
-		return ret;
-
-	if (dev->mphy.cap.has_5ghz) {
-		struct ieee80211_supported_band *sband;
-
-		sband = &dev->mphy.sband_5g.sband;
-		sband->vht_cap.cap &= ~IEEE80211_VHT_CAP_RXLDPC;
-		mt76x0_init_txpower(dev, sband);
-	}
-
-	if (dev->mphy.cap.has_2ghz)
-		mt76x0_init_txpower(dev, &dev->mphy.sband_2g.sband);
-
-	mt76x02_init_debugfs(dev);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x0_register_device);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/initvals.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/initvals.h
deleted file mode 100644
index 99808ed..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/initvals.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * (c) Copyright 2002-2010, Ralink Technology, Inc.
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#ifndef __MT76X0U_INITVALS_H
-#define __MT76X0U_INITVALS_H
-
-#include "phy.h"
-
-static const struct mt76x0_bbp_switch_item mt76x0_bbp_switch_tab[] = {
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 4),	0x1FEDA049 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 4),	0x1FECA054 } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 6),	0x00000045 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 6),	0x0000000A } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 8),	0x16344EF0 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 8),	0x122C54F2 } },
-
-	{ RF_G_BAND | RF_BW_20,				{ MT_BBP(AGC, 12),	0x05052879 } },
-	{ RF_G_BAND | RF_BW_40,				{ MT_BBP(AGC, 12),	0x050528F9 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 12),	0x050528F9 } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 13),	0x35050004 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 13),	0x2C3A0406 } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 14),	0x310F2E3C } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 14),	0x310F2A3F } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 26),	0x007C2005 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 26),	0x007C2005 } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 27),	0x000000E1 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 27),	0x000000EC } },
-
-	{ RF_G_BAND | RF_BW_20,				{ MT_BBP(AGC, 28),	0x00060806 } },
-	{ RF_G_BAND | RF_BW_40,				{ MT_BBP(AGC, 28),	0x00050806 } },
-	{ RF_A_BAND | RF_BW_40,				{ MT_BBP(AGC, 28),	0x00060801 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_80,		{ MT_BBP(AGC, 28),	0x00060806 } },
-
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(RXO, 28),	0x0000008A } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 31),	0x00000E23 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 31),	0x00000E13 } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 32),	0x00003218 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 32),	0x0000181C } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 33),	0x00003240 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 33),	0x00003218 } },
-
-	{ RF_G_BAND | RF_BW_20,				{ MT_BBP(AGC, 35),	0x11111616 } },
-	{ RF_G_BAND | RF_BW_40,				{ MT_BBP(AGC, 35),	0x11111516 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 35),	0x11111111 } },
-
-	{ RF_G_BAND | RF_BW_20,				{ MT_BBP(AGC, 39),	0x2A2A3036 } },
-	{ RF_G_BAND | RF_BW_40,				{ MT_BBP(AGC, 39),	0x2A2A2C36 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 39),	0x2A2A2A2A } },
-
-	{ RF_G_BAND | RF_BW_20,				{ MT_BBP(AGC, 43),	0x27273438 } },
-	{ RF_G_BAND | RF_BW_40,				{ MT_BBP(AGC, 43),	0x27272D38 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 43),	0x27271A1A } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 51),	0x17171C1C } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 51),	0xFFFFFFFF } },
-
-	{ RF_G_BAND | RF_BW_20,				{ MT_BBP(AGC, 53),	0x26262A2F } },
-	{ RF_G_BAND | RF_BW_40,				{ MT_BBP(AGC, 53),	0x2626322F } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 53),	0xFFFFFFFF } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 55),	0x40404040 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 55),	0xFFFFFFFF } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(AGC, 58),	0x00001010 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(AGC, 58),	0x00000000 } },
-
-	{ RF_G_BAND | RF_BW_20 | RF_BW_40,		{ MT_BBP(RXFE, 0),	0x3D5000E0 } },
-	{ RF_A_BAND | RF_BW_20 | RF_BW_40 | RF_BW_80,	{ MT_BBP(RXFE, 0),	0x895000E0 } },
-};
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/initvals_init.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/initvals_init.h
deleted file mode 100644
index 9e99ba7..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/initvals_init.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * (c) Copyright 2002-2010, Ralink Technology, Inc.
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#ifndef __MT76X0U_INITVALS_INIT_H
-#define __MT76X0U_INITVALS_INIT_H
-
-#include "phy.h"
-
-static const struct mt76_reg_pair common_mac_reg_table[] = {
-	{ MT_BCN_OFFSET(0),		0xf8f0e8e0 },
-	{ MT_BCN_OFFSET(1),		0x6f77d0c8 },
-	{ MT_LEGACY_BASIC_RATE,		0x0000013f },
-	{ MT_HT_BASIC_RATE,		0x00008003 },
-	{ MT_MAC_SYS_CTRL,		0x00000000 },
-	{ MT_RX_FILTR_CFG,		0x00017f97 },
-	{ MT_BKOFF_SLOT_CFG,		0x00000209 },
-	{ MT_TX_SW_CFG0,		0x00000000 },
-	{ MT_TX_SW_CFG1,		0x00080606 },
-	{ MT_TX_LINK_CFG,		0x00001020 },
-	{ MT_TX_TIMEOUT_CFG,		0x000a2090 },
-	{ MT_MAX_LEN_CFG,		0xa0fff | 0x00001000 },
-	{ MT_LED_CFG,			0x7f031e46 },
-	{ MT_PBF_TX_MAX_PCNT,		0x1fbf1f1f },
-	{ MT_PBF_RX_MAX_PCNT,		0x0000fe9f },
-	{ MT_TX_RETRY_CFG,		0x47d01f0f },
-	{ MT_AUTO_RSP_CFG,		0x00000013 },
-	{ MT_CCK_PROT_CFG,		0x07f40003 },
-	{ MT_OFDM_PROT_CFG,		0x07f42004 },
-	{ MT_PBF_CFG,			0x00f40006 },
-	{ MT_WPDMA_GLO_CFG,		0x00000030 },
-	{ MT_GF20_PROT_CFG,		0x01742004 },
-	{ MT_GF40_PROT_CFG,		0x03f42084 },
-	{ MT_MM20_PROT_CFG,		0x01742004 },
-	{ MT_MM40_PROT_CFG,		0x03f42084 },
-	{ MT_TXOP_CTRL_CFG,		0x0000583f },
-	{ MT_TX_RTS_CFG,		0x00ffff20 },
-	{ MT_EXP_ACK_TIME,		0x002400ca },
-	{ MT_TXOP_HLDR_ET,		0x00000002 },
-	{ MT_XIFS_TIME_CFG,		0x33a41010 },
-	{ MT_PWR_PIN_CFG,		0x00000000 },
-};
-
-static const struct mt76_reg_pair mt76x0_mac_reg_table[] = {
-	{ MT_IOCFG_6,			0xa0040080 },
-	{ MT_PBF_SYS_CTRL,		0x00080c00 },
-	{ MT_PBF_CFG,			0x77723c1f },
-	{ MT_FCE_PSE_CTRL,		0x00000001 },
-	{ MT_AMPDU_MAX_LEN_20M1S,	0xAAA99887 },
-	{ MT_TX_SW_CFG0,		0x00000601 },
-	{ MT_TX_SW_CFG1,		0x00040000 },
-	{ MT_TX_SW_CFG2,		0x00000000 },
-	{ 0xa44,			0x00000000 },
-	{ MT_HEADER_TRANS_CTRL_REG,	0x00000000 },
-	{ MT_TSO_CTRL,			0x00000000 },
-	{ MT_BB_PA_MODE_CFG1,		0x00500055 },
-	{ MT_RF_PA_MODE_CFG1,		0x00500055 },
-	{ MT_TX_ALC_CFG_0,		0x2F2F000C },
-	{ MT_TX0_BB_GAIN_ATTEN,		0x00000000 },
-	{ MT_TX_PWR_CFG_0,		0x3A3A3A3A },
-	{ MT_TX_PWR_CFG_1,		0x3A3A3A3A },
-	{ MT_TX_PWR_CFG_2,		0x3A3A3A3A },
-	{ MT_TX_PWR_CFG_3,		0x3A3A3A3A },
-	{ MT_TX_PWR_CFG_4,		0x3A3A3A3A },
-	{ MT_TX_PWR_CFG_7,		0x3A3A3A3A },
-	{ MT_TX_PWR_CFG_8,		0x0000003A },
-	{ MT_TX_PWR_CFG_9,		0x0000003A },
-	{ 0x150C,			0x00000002 },
-	{ 0x1238,			0x001700C8 },
-	{ MT_LDO_CTRL_0,		0x00A647B6 },
-	{ MT_LDO_CTRL_1,		0x6B006464 },
-	{ MT_HT_BASIC_RATE,		0x00004003 },
-	{ MT_HT_CTRL_CFG,		0x000001FF },
-	{ MT_TXOP_HLDR_ET,		0x00000000 },
-	{ MT_PN_PAD_MODE,		0x00000003 },
-	{ MT_TX_PROT_CFG6,		0xe3f42004 },
-	{ MT_TX_PROT_CFG7,		0xe3f42084 },
-	{ MT_TX_PROT_CFG8,		0xe3f42104 },
-	{ MT_VHT_HT_FBK_CFG1,		0xedcba980 },
-};
-
-static const struct mt76_reg_pair mt76x0_bbp_init_tab[] = {
-	{ MT_BBP(CORE, 1),	0x00000002 },
-	{ MT_BBP(CORE, 4),	0x00000000 },
-	{ MT_BBP(CORE, 24),	0x00000000 },
-	{ MT_BBP(CORE, 32),	0x4003000a },
-	{ MT_BBP(CORE, 42),	0x00000000 },
-	{ MT_BBP(CORE, 44),	0x00000000 },
-	{ MT_BBP(IBI, 11),	0x0FDE8081 },
-	{ MT_BBP(AGC, 0),	0x00021400 },
-	{ MT_BBP(AGC, 1),	0x00000003 },
-	{ MT_BBP(AGC, 2),	0x003A6464 },
-	{ MT_BBP(AGC, 15),	0x88A28CB8 },
-	{ MT_BBP(AGC, 22),	0x00001E21 },
-	{ MT_BBP(AGC, 23),	0x0000272C },
-	{ MT_BBP(AGC, 24),	0x00002F3A },
-	{ MT_BBP(AGC, 25),	0x8000005A },
-	{ MT_BBP(AGC, 26),	0x007C2005 },
-	{ MT_BBP(AGC, 33),	0x00003238 },
-	{ MT_BBP(AGC, 34),	0x000A0C0C },
-	{ MT_BBP(AGC, 37),	0x2121262C },
-	{ MT_BBP(AGC, 41),	0x38383E45 },
-	{ MT_BBP(AGC, 57),	0x00001010 },
-	{ MT_BBP(AGC, 59),	0xBAA20E96 },
-	{ MT_BBP(AGC, 63),	0x00000001 },
-	{ MT_BBP(TXC, 0),	0x00280403 },
-	{ MT_BBP(TXC, 1),	0x00000000 },
-	{ MT_BBP(RXC, 1),	0x00000012 },
-	{ MT_BBP(RXC, 2),	0x00000011 },
-	{ MT_BBP(RXC, 3),	0x00000005 },
-	{ MT_BBP(RXC, 4),	0x00000000 },
-	{ MT_BBP(RXC, 5),	0xF977C4EC },
-	{ MT_BBP(RXC, 7),	0x00000090 },
-	{ MT_BBP(TXO, 8),	0x00000000 },
-	{ MT_BBP(TXBE, 0),	0x00000000 },
-	{ MT_BBP(TXBE, 4),	0x00000004 },
-	{ MT_BBP(TXBE, 6),	0x00000000 },
-	{ MT_BBP(TXBE, 8),	0x00000014 },
-	{ MT_BBP(TXBE, 9),	0x20000000 },
-	{ MT_BBP(TXBE, 10),	0x00000000 },
-	{ MT_BBP(TXBE, 12),	0x00000000 },
-	{ MT_BBP(TXBE, 13),	0x00000000 },
-	{ MT_BBP(TXBE, 14),	0x00000000 },
-	{ MT_BBP(TXBE, 15),	0x00000000 },
-	{ MT_BBP(TXBE, 16),	0x00000000 },
-	{ MT_BBP(TXBE, 17),	0x00000000 },
-	{ MT_BBP(RXFE, 1),	0x00008800 },
-	{ MT_BBP(RXFE, 3),	0x00000000 },
-	{ MT_BBP(RXFE, 4),	0x00000000 },
-	{ MT_BBP(RXO, 13),	0x00000192 },
-	{ MT_BBP(RXO, 14),	0x00060612 },
-	{ MT_BBP(RXO, 15),	0xC8321B18 },
-	{ MT_BBP(RXO, 16),	0x0000001E },
-	{ MT_BBP(RXO, 17),	0x00000000 },
-	{ MT_BBP(RXO, 18),	0xCC00A993 },
-	{ MT_BBP(RXO, 19),	0xB9CB9CB9 },
-	{ MT_BBP(RXO, 20),	0x26c00057 },
-	{ MT_BBP(RXO, 21),	0x00000001 },
-	{ MT_BBP(RXO, 24),	0x00000006 },
-	{ MT_BBP(RXO, 28),	0x0000003F },
-};
-
-static const struct mt76_reg_pair mt76x0_dcoc_tab[] = {
-	{ MT_BBP(CAL, 47), 0x000010F0 },
-	{ MT_BBP(CAL, 48), 0x00008080 },
-	{ MT_BBP(CAL, 49), 0x00000F07 },
-	{ MT_BBP(CAL, 50), 0x00000040 },
-	{ MT_BBP(CAL, 51), 0x00000404 },
-	{ MT_BBP(CAL, 52), 0x00080803 },
-	{ MT_BBP(CAL, 53), 0x00000704 },
-	{ MT_BBP(CAL, 54), 0x00002828 },
-	{ MT_BBP(CAL, 55), 0x00005050 },
-};
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/initvals_phy.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/initvals_phy.h
deleted file mode 100644
index 42a7988..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/initvals_phy.h
+++ /dev/null
@@ -1,633 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * (c) Copyright 2002-2010, Ralink Technology, Inc.
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-
-#ifndef __MT76X0U_PHY_INITVALS_H
-#define __MT76X0U_PHY_INITVALS_H
-
-static const struct mt76_reg_pair mt76x0_rf_central_tab[] = {
-	{ MT_RF(0,  1), 0x01 },
-	{ MT_RF(0,  2), 0x11 },
-	/* R3 ~ R7: VCO Cal */
-	{ MT_RF(0,  3), 0x73 }, /* VCO Freq Cal */
-	{ MT_RF(0,  4), 0x30 }, /* R4 b<7>=1, VCO cal */
-	{ MT_RF(0,  5), 0x00 },
-	{ MT_RF(0,  6), 0x41 },
-	{ MT_RF(0,  7), 0x00 },
-	{ MT_RF(0,  8), 0x00 },
-	{ MT_RF(0,  9), 0x00 },
-	{ MT_RF(0, 10), 0x0C },
-	{ MT_RF(0, 11), 0x00 },
-	{ MT_RF(0, 12), 0x00 },
-	/* BG */
-	{ MT_RF(0, 13), 0x00 },
-	{ MT_RF(0, 14), 0x00 },
-	{ MT_RF(0, 15), 0x00 },
-	/* LDO */
-	{ MT_RF(0, 19), 0x20 },
-	{ MT_RF(0, 20), 0x22 },
-	{ MT_RF(0, 21), 0x12 },
-	{ MT_RF(0, 23), 0x00 },
-	{ MT_RF(0, 24), 0x33 },
-	{ MT_RF(0, 25), 0x00 },
-	/* PLL */
-	{ MT_RF(0, 26), 0x00 },
-	{ MT_RF(0, 27), 0x00 },
-	{ MT_RF(0, 28), 0x00 },
-	{ MT_RF(0, 29), 0x00 },
-	{ MT_RF(0, 30), 0x00 },
-	{ MT_RF(0, 31), 0x00 },
-	{ MT_RF(0, 32), 0x00 },
-	{ MT_RF(0, 33), 0x00 },
-	{ MT_RF(0, 34), 0x00 },
-	{ MT_RF(0, 35), 0x00 },
-	{ MT_RF(0, 36), 0x00 },
-	{ MT_RF(0, 37), 0x00 },
-	/* LO Buffer */
-	{ MT_RF(0, 38), 0x2F },
-	/* Test Ports */
-	{ MT_RF(0, 64), 0x00 },
-	{ MT_RF(0, 65), 0x80 },
-	{ MT_RF(0, 66), 0x01 },
-	{ MT_RF(0, 67), 0x04 },
-	/* ADC-DAC */
-	{ MT_RF(0, 68), 0x00 },
-	{ MT_RF(0, 69), 0x08 },
-	{ MT_RF(0, 70), 0x08 },
-	{ MT_RF(0, 71), 0x40 },
-	{ MT_RF(0, 72), 0xD0 },
-	{ MT_RF(0, 73), 0x93 },
-};
-
-static const struct mt76_reg_pair mt76x0_rf_2g_channel_0_tab[] = {
-	/* RX logic operation */
-	{ MT_RF(5,  2), 0x0C }, /* 5G+2G */
-	{ MT_RF(5,  3), 0x00 },
-	/* TX logic operation */
-	{ MT_RF(5,  4), 0x00 },
-	{ MT_RF(5,  5), 0x84 },
-	{ MT_RF(5,  6), 0x02 },
-	/* LDO */
-	{ MT_RF(5,  7), 0x00 },
-	{ MT_RF(5,  8), 0x00 },
-	{ MT_RF(5,  9), 0x00 },
-	/* RX */
-	{ MT_RF(5, 10), 0x51 },
-	{ MT_RF(5, 11), 0x22 },
-	{ MT_RF(5, 12), 0x22 },
-	{ MT_RF(5, 13), 0x0F },
-	{ MT_RF(5, 14), 0x47 },
-	{ MT_RF(5, 15), 0x25 },
-	{ MT_RF(5, 16), 0xC7 },
-	{ MT_RF(5, 17), 0x00 },
-	{ MT_RF(5, 18), 0x00 },
-	{ MT_RF(5, 19), 0x30 },
-	{ MT_RF(5, 20), 0x33 },
-	{ MT_RF(5, 21), 0x02 },
-	{ MT_RF(5, 22), 0x32 },
-	{ MT_RF(5, 23), 0x00 },
-	{ MT_RF(5, 24), 0x25 },
-	{ MT_RF(5, 26), 0x00 },
-	{ MT_RF(5, 27), 0x12 },
-	{ MT_RF(5, 28), 0x0F },
-	{ MT_RF(5, 29), 0x00 },
-	/* LOGEN */
-	{ MT_RF(5, 30), 0x51 },
-	{ MT_RF(5, 31), 0x35 },
-	{ MT_RF(5, 32), 0x31 },
-	{ MT_RF(5, 33), 0x31 },
-	{ MT_RF(5, 34), 0x34 },
-	{ MT_RF(5, 35), 0x03 },
-	{ MT_RF(5, 36), 0x00 },
-	/* TX */
-	{ MT_RF(5, 37), 0xDD },
-	{ MT_RF(5, 38), 0xB3 },
-	{ MT_RF(5, 39), 0x33 },
-	{ MT_RF(5, 40), 0xB1 },
-	{ MT_RF(5, 41), 0x71 },
-	{ MT_RF(5, 42), 0xF2 },
-	{ MT_RF(5, 43), 0x47 },
-	{ MT_RF(5, 44), 0x77 },
-	{ MT_RF(5, 45), 0x0E },
-	{ MT_RF(5, 46), 0x10 },
-	{ MT_RF(5, 47), 0x00 },
-	{ MT_RF(5, 48), 0x53 },
-	{ MT_RF(5, 49), 0x03 },
-	{ MT_RF(5, 50), 0xEF },
-	{ MT_RF(5, 51), 0xC7 },
-	{ MT_RF(5, 52), 0x62 },
-	{ MT_RF(5, 53), 0x62 },
-	{ MT_RF(5, 54), 0x00 },
-	{ MT_RF(5, 55), 0x00 },
-	{ MT_RF(5, 56), 0x0F },
-	{ MT_RF(5, 57), 0x0F },
-	{ MT_RF(5, 58), 0x16 },
-	{ MT_RF(5, 59), 0x16 },
-	{ MT_RF(5, 60), 0x10 },
-	{ MT_RF(5, 61), 0x10 },
-	{ MT_RF(5, 62), 0xD0 },
-	{ MT_RF(5, 63), 0x6C },
-	{ MT_RF(5, 64), 0x58 },
-	{ MT_RF(5, 65), 0x58 },
-	{ MT_RF(5, 66), 0xF2 },
-	{ MT_RF(5, 67), 0xE8 },
-	{ MT_RF(5, 68), 0xF0 },
-	{ MT_RF(5, 69), 0xF0 },
-	{ MT_RF(5, 127), 0x04 },
-};
-
-static const struct mt76_reg_pair mt76x0_rf_5g_channel_0_tab[] = {
-	/* RX logic operation */
-	{ MT_RF(6, 2), 0x0C },
-	{ MT_RF(6, 3), 0x00 },
-	/* TX logic operation */
-	{ MT_RF(6, 4), 0x00 },
-	{ MT_RF(6, 5), 0x84 },
-	{ MT_RF(6, 6), 0x02 },
-	/* LDO */
-	{ MT_RF(6, 7), 0x00 },
-	{ MT_RF(6, 8), 0x00 },
-	{ MT_RF(6, 9), 0x00 },
-	/* RX */
-	{ MT_RF(6, 10), 0x00 },
-	{ MT_RF(6, 11), 0x01 },
-	{ MT_RF(6, 13), 0x23 },
-	{ MT_RF(6, 14), 0x00 },
-	{ MT_RF(6, 15), 0x04 },
-	{ MT_RF(6, 16), 0x22 },
-	{ MT_RF(6, 18), 0x08 },
-	{ MT_RF(6, 19), 0x00 },
-	{ MT_RF(6, 20), 0x00 },
-	{ MT_RF(6, 21), 0x00 },
-	{ MT_RF(6, 22), 0xFB },
-	/* LOGEN5G */
-	{ MT_RF(6, 25), 0x76 },
-	{ MT_RF(6, 26), 0x24 },
-	{ MT_RF(6, 27), 0x04 },
-	{ MT_RF(6, 28), 0x00 },
-	{ MT_RF(6, 29), 0x00 },
-	/* TX */
-	{ MT_RF(6, 37), 0xBB },
-	{ MT_RF(6, 38), 0xB3 },
-	{ MT_RF(6, 40), 0x33 },
-	{ MT_RF(6, 41), 0x33 },
-	{ MT_RF(6, 43), 0x03 },
-	{ MT_RF(6, 44), 0xB3 },
-	{ MT_RF(6, 46), 0x17 },
-	{ MT_RF(6, 47), 0x0E },
-	{ MT_RF(6, 48), 0x10 },
-	{ MT_RF(6, 49), 0x07 },
-	{ MT_RF(6, 62), 0x00 },
-	{ MT_RF(6, 63), 0x00 },
-	{ MT_RF(6, 64), 0xF1 },
-	{ MT_RF(6, 65), 0x0F },
-};
-
-static const struct mt76_reg_pair mt76x0_rf_vga_channel_0_tab[] = {
-	/* E3 CR */
-	{ MT_RF(7,  0), 0x47 },
-	{ MT_RF(7,  1), 0x00 },
-	{ MT_RF(7,  2), 0x00 },
-	{ MT_RF(7,  3), 0x00 },
-	{ MT_RF(7,  4), 0x00 },
-	{ MT_RF(7, 10), 0x13 },
-	{ MT_RF(7, 11), 0x0F },
-	{ MT_RF(7, 12), 0x13 },
-	{ MT_RF(7, 13), 0x13 },
-	{ MT_RF(7, 14), 0x13 },
-	{ MT_RF(7, 15), 0x20 },
-	{ MT_RF(7, 16), 0x22 },
-	{ MT_RF(7, 17), 0x7C },
-	{ MT_RF(7, 18), 0x00 },
-	{ MT_RF(7, 19), 0x00 },
-	{ MT_RF(7, 20), 0x00 },
-	{ MT_RF(7, 21), 0xF1 },
-	{ MT_RF(7, 22), 0x11 },
-	{ MT_RF(7, 23), 0xC2 },
-	{ MT_RF(7, 24), 0x41 },
-	{ MT_RF(7, 25), 0x20 },
-	{ MT_RF(7, 26), 0x40 },
-	{ MT_RF(7, 27), 0xD7 },
-	{ MT_RF(7, 28), 0xA2 },
-	{ MT_RF(7, 29), 0x60 },
-	{ MT_RF(7, 30), 0x49 },
-	{ MT_RF(7, 31), 0x20 },
-	{ MT_RF(7, 32), 0x44 },
-	{ MT_RF(7, 33), 0xC1 },
-	{ MT_RF(7, 34), 0x60 },
-	{ MT_RF(7, 35), 0xC0 },
-	{ MT_RF(7, 61), 0x01 },
-	{ MT_RF(7, 72), 0x3C },
-	{ MT_RF(7, 73), 0x34 },
-	{ MT_RF(7, 74), 0x00 },
-};
-
-static const struct mt76x0_rf_switch_item mt76x0_rf_bw_switch_tab[] = {
-	/* bank, reg	bw/band			value */
-	{ MT_RF(0, 17),	RF_G_BAND | RF_BW_20,	0x00 },
-	{ MT_RF(0, 17),	RF_G_BAND | RF_BW_40,	0x00 },
-	{ MT_RF(0, 17),	RF_A_BAND | RF_BW_20,	0x00 },
-	{ MT_RF(0, 17),	RF_A_BAND | RF_BW_40,	0x00 },
-	{ MT_RF(0, 17),	RF_A_BAND | RF_BW_80,	0x00 },
-	{ MT_RF(7,  6),	RF_G_BAND | RF_BW_20,	0x40 },
-	{ MT_RF(7,  6),	RF_G_BAND | RF_BW_40,	0x1C },
-	{ MT_RF(7,  6),	RF_A_BAND | RF_BW_20,	0x40 },
-	{ MT_RF(7,  6),	RF_A_BAND | RF_BW_40,	0x20 },
-	{ MT_RF(7,  6),	RF_A_BAND | RF_BW_80,	0x10 },
-	{ MT_RF(7,  7),	RF_G_BAND | RF_BW_20,	0x40 },
-	{ MT_RF(7,  7),	RF_G_BAND | RF_BW_40,	0x20 },
-	{ MT_RF(7,  7),	RF_A_BAND | RF_BW_20,	0x40 },
-	{ MT_RF(7,  7),	RF_A_BAND | RF_BW_40,	0x20 },
-	{ MT_RF(7,  7),	RF_A_BAND | RF_BW_80,	0x10 },
-	{ MT_RF(7,  8),	RF_G_BAND | RF_BW_20,	0x03 },
-	{ MT_RF(7,  8),	RF_G_BAND | RF_BW_40,	0x01 },
-	{ MT_RF(7,  8),	RF_A_BAND | RF_BW_20,	0x03 },
-	{ MT_RF(7,  8),	RF_A_BAND | RF_BW_40,	0x01 },
-	{ MT_RF(7,  8),	RF_A_BAND | RF_BW_80,	0x00 },
-	{ MT_RF(7, 58),	RF_G_BAND | RF_BW_20,	0x40 },
-	{ MT_RF(7, 58),	RF_G_BAND | RF_BW_40,	0x40 },
-	{ MT_RF(7, 58),	RF_A_BAND | RF_BW_20,	0x40 },
-	{ MT_RF(7, 58),	RF_A_BAND | RF_BW_40,	0x40 },
-	{ MT_RF(7, 58),	RF_A_BAND | RF_BW_80,	0x10 },
-	{ MT_RF(7, 59),	RF_G_BAND | RF_BW_20,	0x40 },
-	{ MT_RF(7, 59),	RF_G_BAND | RF_BW_40,	0x40 },
-	{ MT_RF(7, 59),	RF_A_BAND | RF_BW_20,	0x40 },
-	{ MT_RF(7, 59),	RF_A_BAND | RF_BW_40,	0x40 },
-	{ MT_RF(7, 59),	RF_A_BAND | RF_BW_80,	0x10 },
-	{ MT_RF(7, 60),	RF_G_BAND | RF_BW_20,	0xAA },
-	{ MT_RF(7, 60),	RF_G_BAND | RF_BW_40,	0xAA },
-	{ MT_RF(7, 60),	RF_A_BAND | RF_BW_20,	0xAA },
-	{ MT_RF(7, 60),	RF_A_BAND | RF_BW_40,	0xAA },
-	{ MT_RF(7, 60),	RF_A_BAND | RF_BW_80,	0xAA },
-	{ MT_RF(7, 76),	RF_BW_20,		0x40 },
-	{ MT_RF(7, 76),	RF_BW_40,		0x40 },
-	{ MT_RF(7, 76),	RF_BW_80,		0x10 },
-	{ MT_RF(7, 77),	RF_BW_20,		0x40 },
-	{ MT_RF(7, 77),	RF_BW_40,		0x40 },
-	{ MT_RF(7, 77),	RF_BW_80,		0x10 },
-};
-
-static const struct mt76x0_rf_switch_item mt76x0_rf_band_switch_tab[] = {
-	/* bank, reg		bw/band		value */
-	{ MT_RF(0,  16),	RF_G_BAND,	0x20 },
-	{ MT_RF(0,  16),	RF_A_BAND,	0x20 },
-	{ MT_RF(0,  18),	RF_G_BAND,	0x00 },
-	{ MT_RF(0,  18),	RF_A_BAND,	0x00 },
-	{ MT_RF(0,  39),	RF_G_BAND,	0x36 },
-	{ MT_RF(0,  39),	RF_A_BAND_LB,	0x34 },
-	{ MT_RF(0,  39),	RF_A_BAND_MB,	0x33 },
-	{ MT_RF(0,  39),	RF_A_BAND_HB,	0x31 },
-	{ MT_RF(0,  39),	RF_A_BAND_11J,	0x36 },
-	{ MT_RF(6,  12),	RF_A_BAND_LB,	0x44 },
-	{ MT_RF(6,  12),	RF_A_BAND_MB,	0x44 },
-	{ MT_RF(6,  12),	RF_A_BAND_HB,	0x55 },
-	{ MT_RF(6,  12),	RF_A_BAND_11J,	0x44 },
-	{ MT_RF(6,  17),	RF_A_BAND_LB,	0x02 },
-	{ MT_RF(6,  17),	RF_A_BAND_MB,	0x00 },
-	{ MT_RF(6,  17),	RF_A_BAND_HB,	0x00 },
-	{ MT_RF(6,  17),	RF_A_BAND_11J,	0x05 },
-	{ MT_RF(6,  24),	RF_A_BAND_LB,	0xA1 },
-	{ MT_RF(6,  24),	RF_A_BAND_MB,	0x41 },
-	{ MT_RF(6,  24),	RF_A_BAND_HB,	0x21 },
-	{ MT_RF(6,  24),	RF_A_BAND_11J,	0xE1 },
-	{ MT_RF(6,  39),	RF_A_BAND_LB,	0x36 },
-	{ MT_RF(6,  39),	RF_A_BAND_MB,	0x34 },
-	{ MT_RF(6,  39),	RF_A_BAND_HB,	0x32 },
-	{ MT_RF(6,  39),	RF_A_BAND_11J,	0x37 },
-	{ MT_RF(6,  42),	RF_A_BAND_LB,	0xFB },
-	{ MT_RF(6,  42),	RF_A_BAND_MB,	0xF3 },
-	{ MT_RF(6,  42),	RF_A_BAND_HB,	0xEB },
-	{ MT_RF(6,  42),	RF_A_BAND_11J,	0xEB },
-	{ MT_RF(6, 127),	RF_G_BAND,	0x84 },
-	{ MT_RF(6, 127),	RF_A_BAND,	0x04 },
-	{ MT_RF(7,   5),	RF_G_BAND,	0x40 },
-	{ MT_RF(7,   5),	RF_A_BAND,	0x00 },
-	{ MT_RF(7,   9),	RF_G_BAND,	0x00 },
-	{ MT_RF(7,   9),	RF_A_BAND,	0x00 },
-	{ MT_RF(7,  70),	RF_G_BAND,	0x00 },
-	{ MT_RF(7,  70),	RF_A_BAND,	0x6D },
-	{ MT_RF(7,  71),	RF_G_BAND,	0x00 },
-	{ MT_RF(7,  71),	RF_A_BAND,	0xB0 },
-	{ MT_RF(7,  78),	RF_G_BAND,	0x00 },
-	{ MT_RF(7,  78),	RF_A_BAND,	0x55 },
-	{ MT_RF(7,  79),	RF_G_BAND,	0x00 },
-	{ MT_RF(7,  79),	RF_A_BAND,	0x55 },
-};
-
-static const struct mt76x0_freq_item mt76x0_frequency_plan[] = {
-	{   1,	RF_G_BAND,			0x02, 0x3F, 0x28, 0xDD, 0xE2, 0x40, 0x02, 0x40, 0x02, 0, 0, 1, 0x28, 0, 0x30, 0, 0, 0x3 }, /* Freq 2412 */
-	{   2, 	RF_G_BAND,			0x02, 0x3F, 0x3C, 0xDD, 0xE4, 0x40, 0x07, 0x40, 0x02, 0, 0, 1, 0xA1, 0, 0x30, 0, 0, 0x1 }, /* Freq 2417 */
-	{   3, 	RF_G_BAND,			0x02, 0x3F, 0x3C, 0xDD, 0xE2, 0x40, 0x07, 0x40, 0x0B, 0, 0, 1, 0x50, 0, 0x30, 0, 0, 0x0 }, /* Freq 2422 */
-	{   4, 	RF_G_BAND,			0x02, 0x3F, 0x28, 0xDD, 0xD4, 0x40, 0x02, 0x40, 0x09, 0, 0, 1, 0x50, 0, 0x30, 0, 0, 0x0 }, /* Freq 2427 */
-	{   5, 	RF_G_BAND,			0x02, 0x3F, 0x3C, 0xDD, 0xD4, 0x40, 0x07, 0x40, 0x02, 0, 0, 1, 0xA2, 0, 0x30, 0, 0, 0x1 }, /* Freq 2432 */
-	{   6, 	RF_G_BAND,			0x02, 0x3F, 0x3C, 0xDD, 0xD4, 0x40, 0x07, 0x40, 0x07, 0, 0, 1, 0xA2, 0, 0x30, 0, 0, 0x1 }, /* Freq 2437 */
-	{   7, 	RF_G_BAND,			0x02, 0x3F, 0x28, 0xDD, 0xE2, 0x40, 0x02, 0x40, 0x07, 0, 0, 1, 0x28, 0, 0x30, 0, 0, 0x3 }, /* Freq 2442 */
-	{   8, 	RF_G_BAND,			0x02, 0x3F, 0x3C, 0xDD, 0xD4, 0x40, 0x07, 0x40, 0x02, 0, 0, 1, 0xA3, 0, 0x30, 0, 0, 0x1 }, /* Freq 2447 */
-	{   9, 	RF_G_BAND,			0x02, 0x3F, 0x3C, 0xDD, 0xF2, 0x40, 0x07, 0x40, 0x0D, 0, 0, 1, 0x28, 0, 0x30, 0, 0, 0x3 }, /* Freq 2452 */
-	{  10, 	RF_G_BAND,			0x02, 0x3F, 0x28, 0xDD, 0xD4, 0x40, 0x02, 0x40, 0x09, 0, 0, 1, 0x51, 0, 0x30, 0, 0, 0x0 }, /* Freq 2457 */
-	{  11, 	RF_G_BAND,			0x02, 0x3F, 0x3C, 0xDD, 0xD4, 0x40, 0x07, 0x40, 0x02, 0, 0, 1, 0xA4, 0, 0x30, 0, 0, 0x1 }, /* Freq 2462 */
-	{  12, 	RF_G_BAND,			0x02, 0x3F, 0x3C, 0xDD, 0xD4, 0x40, 0x07, 0x40, 0x07, 0, 0, 1, 0xA4, 0, 0x30, 0, 0, 0x1 }, /* Freq 2467 */
-	{  13, 	RF_G_BAND,			0x02, 0x3F, 0x28, 0xDD, 0xF2, 0x40, 0x02, 0x40, 0x02, 0, 0, 1, 0x29, 0, 0x30, 0, 0, 0x3 }, /* Freq 2472 */
-	{  14, 	RF_G_BAND,			0x02, 0x3F, 0x28, 0xDD, 0xF2, 0x40, 0x02, 0x40, 0x04, 0, 0, 1, 0x29, 0, 0x30, 0, 0, 0x3 }, /* Freq 2484 */
-	{ 183, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x70, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x17, 0, 0, 1, 0x28, 0, 0x30, 0, 0, 0x3 }, /* Freq 4915 */
-	{ 184, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x00, 0, 0, 1, 0x29, 0, 0x30, 0, 0, 0x3 }, /* Freq 4920 */
-	{ 185, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x01, 0, 0, 1, 0x29, 0, 0x30, 0, 0, 0x3 }, /* Freq 4925 */
-	{ 187, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x03, 0, 0, 1, 0x29, 0, 0x30, 0, 0, 0x3 }, /* Freq 4935 */
-	{ 188, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x02, 0, 0, 1, 0x29, 0, 0x30, 0, 0, 0x3 }, /* Freq 4940 */
-	{ 189, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x05, 0, 0, 1, 0x29, 0, 0x30, 0, 0, 0x3 }, /* Freq 4945 */
-	{ 192, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x04, 0, 0, 1, 0x29, 0, 0x30, 0, 0, 0x3 }, /* Freq 4960 */
-	{ 196, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x06, 0, 0, 1, 0x29, 0, 0x30, 0, 0, 0x3 }, /* Freq 4980 */
-	{  36, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x02, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5180 */
-	{  37, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x05, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5185 */
-	{  38, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x03, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5190 */
-	{  39, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x07, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5195 */
-	{  40, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x04, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5200 */
-	{  41, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x09, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5205 */
-	{  42, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x05, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5210 */
-	{  43, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0B, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5215 */
-	{  44, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x06, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5220 */
-	{  45, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0D, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5225 */
-	{  46, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x07, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5230 */
-	{  47, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0F, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5235 */
-	{  48, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x08, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5240 */
-	{  49, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x11, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5245 */
-	{  50, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x09, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5250 */
-	{  51, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x13, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5255 */
-	{  52, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x0A, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5260 */
-	{  53, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x15, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5265 */
-	{  54, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x0B, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5270 */
-	{  55, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x70, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x17, 0, 0, 1, 0x2B, 0, 0x30, 0, 0, 0x3 }, /* Freq 5275 */
-	{  56, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x00, 0, 0, 1, 0x2C, 0, 0x30, 0, 0, 0x3 }, /* Freq 5280 */
-	{  57, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x01, 0, 0, 1, 0x2C, 0, 0x30, 0, 0, 0x3 }, /* Freq 5285 */
-	{  58, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x01, 0, 0, 1, 0x2C, 0, 0x30, 0, 0, 0x3 }, /* Freq 5290 */
-	{  59, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x03, 0, 0, 1, 0x2C, 0, 0x30, 0, 0, 0x3 }, /* Freq 5295 */
-	{  60, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x02, 0, 0, 1, 0x2C, 0, 0x30, 0, 0, 0x3 }, /* Freq 5300 */
-	{  61, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x05, 0, 0, 1, 0x2C, 0, 0x30, 0, 0, 0x3 }, /* Freq 5305 */
-	{  62, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x03, 0, 0, 1, 0x2C, 0, 0x30, 0, 0, 0x3 }, /* Freq 5310 */
-	{  63, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x07, 0, 0, 1, 0x2C, 0, 0x30, 0, 0, 0x3 }, /* Freq 5315 */
-	{  64, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x04, 0, 0, 1, 0x2C, 0, 0x30, 0, 0, 0x3 }, /* Freq 5320 */
-	{ 100, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x0A, 0, 0, 1, 0x2D, 0, 0x30, 0, 0, 0x3 }, /* Freq 5500 */
-	{ 101, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x15, 0, 0, 1, 0x2D, 0, 0x30, 0, 0, 0x3 }, /* Freq 5505 */
-	{ 102, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x0B, 0, 0, 1, 0x2D, 0, 0x30, 0, 0, 0x3 }, /* Freq 5510 */
-	{ 103, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x70, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x17, 0, 0, 1, 0x2D, 0, 0x30, 0, 0, 0x3 }, /* Freq 5515 */
-	{ 104, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x00, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5520 */
-	{ 105, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x01, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5525 */
-	{ 106, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x01, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5530 */
-	{ 107, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x03, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5535 */
-	{ 108, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x02, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5540 */
-	{ 109, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x05, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5545 */
-	{ 110, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x03, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5550 */
-	{ 111, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x07, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5555 */
-	{ 112, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x04, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5560 */
-	{ 113, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x09, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5565 */
-	{ 114, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x05, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5570 */
-	{ 115, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0B, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5575 */
-	{ 116, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x06, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5580 */
-	{ 117, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0D, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5585 */
-	{ 118, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x07, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5590 */
-	{ 119, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0F, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5595 */
-	{ 120, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x08, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5600 */
-	{ 121, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x11, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5605 */
-	{ 122, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x09, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5610 */
-	{ 123, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x13, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5615 */
-	{ 124, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x0A, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5620 */
-	{ 125, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x15, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5625 */
-	{ 126, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x0B, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5630 */
-	{ 127, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x70, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x17, 0, 0, 1, 0x2E, 0, 0x30, 0, 0, 0x3 }, /* Freq 5635 */
-	{ 128, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x00, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5640 */
-	{ 129, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x01, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5645 */
-	{ 130, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x01, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5650 */
-	{ 131, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x03, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5655 */
-	{ 132, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x02, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5660 */
-	{ 133, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x05, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5665 */
-	{ 134, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x03, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5670 */
-	{ 135, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x07, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5675 */
-	{ 136, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x04, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5680 */
-	{ 137, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x09, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5685 */
-	{ 138, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x05, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5690 */
-	{ 139, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0B, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5695 */
-	{ 140, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x06, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5700 */
-	{ 141, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0D, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5705 */
-	{ 142, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x07, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5710 */
-	{ 143, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0F, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5715 */
-	{ 144, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x08, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5720 */
-	{ 145, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x11, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5725 */
-	{ 146, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x09, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5730 */
-	{ 147, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x13, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5735 */
-	{ 148, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x0A, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5740 */
-	{ 149, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x15, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5745 */
-	{ 150, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x0B, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5750 */
-	{ 151, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x70, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x17, 0, 0, 1, 0x2F, 0, 0x30, 0, 0, 0x3 }, /* Freq 5755 */
-	{ 152, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x00, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5760 */
-	{ 153, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x01, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5765 */
-	{ 154, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x01, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5770 */
-	{ 155, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x03, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5775 */
-	{ 156, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x02, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5780 */
-	{ 157, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x05, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5785 */
-	{ 158, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x03, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5790 */
-	{ 159, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x07, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5795 */
-	{ 160, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x04, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5800 */
-	{ 161, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x09, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5805 */
-	{ 162, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x05, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5810 */
-	{ 163, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0B, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5815 */
-	{ 164, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x06, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5820 */
-	{ 165, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0D, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5825 */
-	{ 166, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0xDD, 0xD2, 0x40, 0x04, 0x40, 0x07, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5830 */
-	{ 167, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x0F, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5835 */
-	{ 168, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x08, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5840 */
-	{ 169, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x11, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5845 */
-	{ 170, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x09, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5850 */
-	{ 171, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x13, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5855 */
-	{ 172, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x30, 0x97, 0xD2, 0x40, 0x04, 0x40, 0x0A, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5860 */
-	{ 173, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x68, 0xDD, 0xD2, 0x40, 0x10, 0x40, 0x15, 0, 0, 1, 0x30, 0, 0x30, 0, 0, 0x3 }, /* Freq 5865 */
-};
-
-static const struct mt76x0_freq_item mt76x0_sdm_frequency_plan[] = {
-	{   1,	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x28, 0, 0x0, 0x8, 0x0CCCC, 0x3 }, /* Freq 2412 */
-	{   2, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x28, 0, 0x0, 0x8, 0x12222, 0x3 }, /* Freq 2417 */
-	{   3, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x28, 0, 0x0, 0x8, 0x17777, 0x3 }, /* Freq 2422 */
-	{   4, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x28, 0, 0x0, 0x8, 0x1CCCC, 0x3 }, /* Freq 2427 */
-	{   5, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x28, 0, 0x0, 0x8, 0x22222, 0x3 }, /* Freq 2432 */
-	{   6, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x28, 0, 0x0, 0x8, 0x27777, 0x3 }, /* Freq 2437 */
-	{   7, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x28, 0, 0x0, 0x8, 0x2CCCC, 0x3 }, /* Freq 2442 */
-	{   8, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x28, 0, 0x0, 0x8, 0x32222, 0x3 }, /* Freq 2447 */
-	{   9, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x28, 0, 0x0, 0x8, 0x37777, 0x3 }, /* Freq 2452 */
-	{  10, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x28, 0, 0x0, 0x8, 0x3CCCC, 0x3 }, /* Freq 2457 */
-	{  11, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x29, 0, 0x0, 0x8, 0x02222, 0x3 }, /* Freq 2462 */
-	{  12, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x29, 0, 0x0, 0x8, 0x07777, 0x3 }, /* Freq 2467 */
-	{  13, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x29, 0, 0x0, 0x8, 0x0CCCC, 0x3 }, /* Freq 2472 */
-	{  14, 	RF_G_BAND,			0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x29, 0, 0x0, 0x8, 0x19999, 0x3 }, /* Freq 2484 */
-	{ 183, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x28, 0, 0x0, 0x8, 0x3D555, 0x3 }, /* Freq 4915 */
-	{ 184, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x29, 0, 0x0, 0x8, 0x00000, 0x3 }, /* Freq 4920 */
-	{ 185, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x29, 0, 0x0, 0x8, 0x02AAA, 0x3 }, /* Freq 4925 */
-	{ 187, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x29, 0, 0x0, 0x8, 0x08000, 0x3 }, /* Freq 4935 */
-	{ 188, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x29, 0, 0x0, 0x8, 0x0AAAA, 0x3 }, /* Freq 4940 */
-	{ 189, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x29, 0, 0x0, 0x8, 0x0D555, 0x3 }, /* Freq 4945 */
-	{ 192, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x29, 0, 0x0, 0x8, 0x15555, 0x3 }, /* Freq 4960 */
-	{ 196, 	(RF_A_BAND | RF_A_BAND_11J),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x29, 0, 0x0, 0x8, 0x20000, 0x3 }, /* Freq 4980 */
-	{  36, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x0AAAA, 0x3 }, /* Freq 5180 */
-	{  37, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x0D555, 0x3 }, /* Freq 5185 */
-	{  38, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x10000, 0x3 }, /* Freq 5190 */
-	{  39, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x12AAA, 0x3 }, /* Freq 5195 */
-	{  40, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x15555, 0x3 }, /* Freq 5200 */
-	{  41, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x18000, 0x3 }, /* Freq 5205 */
-	{  42, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x1AAAA, 0x3 }, /* Freq 5210 */
-	{  43, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x1D555, 0x3 }, /* Freq 5215 */
-	{  44, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x20000, 0x3 }, /* Freq 5220 */
-	{  45, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x22AAA, 0x3 }, /* Freq 5225 */
-	{  46, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x25555, 0x3 }, /* Freq 5230 */
-	{  47, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x28000, 0x3 }, /* Freq 5235 */
-	{  48, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x2AAAA, 0x3 }, /* Freq 5240 */
-	{  49, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x2D555, 0x3 }, /* Freq 5245 */
-	{  50, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x30000, 0x3 }, /* Freq 5250 */
-	{  51, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x32AAA, 0x3 }, /* Freq 5255 */
-	{  52, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x35555, 0x3 }, /* Freq 5260 */
-	{  53, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x38000, 0x3 }, /* Freq 5265 */
-	{  54, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x3AAAA, 0x3 }, /* Freq 5270 */
-	{  55, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2B, 0, 0x0, 0x8, 0x3D555, 0x3 }, /* Freq 5275 */
-	{  56, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2C, 0, 0x0, 0x8, 0x00000, 0x3 }, /* Freq 5280 */
-	{  57, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2C, 0, 0x0, 0x8, 0x02AAA, 0x3 }, /* Freq 5285 */
-	{  58, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2C, 0, 0x0, 0x8, 0x05555, 0x3 }, /* Freq 5290 */
-	{  59, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2C, 0, 0x0, 0x8, 0x08000, 0x3 }, /* Freq 5295 */
-	{  60, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2C, 0, 0x0, 0x8, 0x0AAAA, 0x3 }, /* Freq 5300 */
-	{  61, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2C, 0, 0x0, 0x8, 0x0D555, 0x3 }, /* Freq 5305 */
-	{  62, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2C, 0, 0x0, 0x8, 0x10000, 0x3 }, /* Freq 5310 */
-	{  63, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2C, 0, 0x0, 0x8, 0x12AAA, 0x3 }, /* Freq 5315 */
-	{  64, 	(RF_A_BAND | RF_A_BAND_LB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2C, 0, 0x0, 0x8, 0x15555, 0x3 }, /* Freq 5320 */
-	{ 100, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2D, 0, 0x0, 0x8, 0x35555, 0x3 }, /* Freq 5500 */
-	{ 101, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2D, 0, 0x0, 0x8, 0x38000, 0x3 }, /* Freq 5505 */
-	{ 102, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2D, 0, 0x0, 0x8, 0x3AAAA, 0x3 }, /* Freq 5510 */
-	{ 103, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2D, 0, 0x0, 0x8, 0x3D555, 0x3 }, /* Freq 5515 */
-	{ 104, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x00000, 0x3 }, /* Freq 5520 */
-	{ 105, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x02AAA, 0x3 }, /* Freq 5525 */
-	{ 106, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x05555, 0x3 }, /* Freq 5530 */
-	{ 107, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x08000, 0x3 }, /* Freq 5535 */
-	{ 108, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x0AAAA, 0x3 }, /* Freq 5540 */
-	{ 109, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x0D555, 0x3 }, /* Freq 5545 */
-	{ 110, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x10000, 0x3 }, /* Freq 5550 */
-	{ 111, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x12AAA, 0x3 }, /* Freq 5555 */
-	{ 112, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x15555, 0x3 }, /* Freq 5560 */
-	{ 113, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x18000, 0x3 }, /* Freq 5565 */
-	{ 114, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x1AAAA, 0x3 }, /* Freq 5570 */
-	{ 115, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x1D555, 0x3 }, /* Freq 5575 */
-	{ 116, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x20000, 0x3 }, /* Freq 5580 */
-	{ 117, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x22AAA, 0x3 }, /* Freq 5585 */
-	{ 118, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x25555, 0x3 }, /* Freq 5590 */
-	{ 119, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x28000, 0x3 }, /* Freq 5595 */
-	{ 120, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x2AAAA, 0x3 }, /* Freq 5600 */
-	{ 121, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x2D555, 0x3 }, /* Freq 5605 */
-	{ 122, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x30000, 0x3 }, /* Freq 5610 */
-	{ 123, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x32AAA, 0x3 }, /* Freq 5615 */
-	{ 124, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x35555, 0x3 }, /* Freq 5620 */
-	{ 125, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x38000, 0x3 }, /* Freq 5625 */
-	{ 126, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x3AAAA, 0x3 }, /* Freq 5630 */
-	{ 127, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2E, 0, 0x0, 0x8, 0x3D555, 0x3 }, /* Freq 5635 */
-	{ 128, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x00000, 0x3 }, /* Freq 5640 */
-	{ 129, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x02AAA, 0x3 }, /* Freq 5645 */
-	{ 130, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x05555, 0x3 }, /* Freq 5650 */
-	{ 131, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x08000, 0x3 }, /* Freq 5655 */
-	{ 132, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x0AAAA, 0x3 }, /* Freq 5660 */
-	{ 133, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x0D555, 0x3 }, /* Freq 5665 */
-	{ 134, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x10000, 0x3 }, /* Freq 5670 */
-	{ 135, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x12AAA, 0x3 }, /* Freq 5675 */
-	{ 136, 	(RF_A_BAND | RF_A_BAND_MB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x15555, 0x3 }, /* Freq 5680 */
-	{ 137, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x18000, 0x3 }, /* Freq 5685 */
-	{ 138, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x1AAAA, 0x3 }, /* Freq 5690 */
-	{ 139, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x1D555, 0x3 }, /* Freq 5695 */
-	{ 140, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x20000, 0x3 }, /* Freq 5700 */
-	{ 141, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x22AAA, 0x3 }, /* Freq 5705 */
-	{ 142, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x25555, 0x3 }, /* Freq 5710 */
-	{ 143, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x28000, 0x3 }, /* Freq 5715 */
-	{ 144, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x2AAAA, 0x3 }, /* Freq 5720 */
-	{ 145, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x2D555, 0x3 }, /* Freq 5725 */
-	{ 146, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x30000, 0x3 }, /* Freq 5730 */
-	{ 147, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x32AAA, 0x3 }, /* Freq 5735 */
-	{ 148, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x35555, 0x3 }, /* Freq 5740 */
-	{ 149, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x38000, 0x3 }, /* Freq 5745 */
-	{ 150, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x3AAAA, 0x3 }, /* Freq 5750 */
-	{ 151, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x2F, 0, 0x0, 0x8, 0x3D555, 0x3 }, /* Freq 5755 */
-	{ 152, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x00000, 0x3 }, /* Freq 5760 */
-	{ 153, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x02AAA, 0x3 }, /* Freq 5765 */
-	{ 154, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x05555, 0x3 }, /* Freq 5770 */
-	{ 155, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x08000, 0x3 }, /* Freq 5775 */
-	{ 156, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x0AAAA, 0x3 }, /* Freq 5780 */
-	{ 157, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x0D555, 0x3 }, /* Freq 5785 */
-	{ 158, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x10000, 0x3 }, /* Freq 5790 */
-	{ 159, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x12AAA, 0x3 }, /* Freq 5795 */
-	{ 160, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x15555, 0x3 }, /* Freq 5800 */
-	{ 161, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x18000, 0x3 }, /* Freq 5805 */
-	{ 162, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x1AAAA, 0x3 }, /* Freq 5810 */
-	{ 163, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x1D555, 0x3 }, /* Freq 5815 */
-	{ 164, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x20000, 0x3 }, /* Freq 5820 */
-	{ 165, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x22AAA, 0x3 }, /* Freq 5825 */
-	{ 166, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x25555, 0x3 }, /* Freq 5830 */
-	{ 167, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x28000, 0x3 }, /* Freq 5835 */
-	{ 168, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x2AAAA, 0x3 }, /* Freq 5840 */
-	{ 169, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x2D555, 0x3 }, /* Freq 5845 */
-	{ 170, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x30000, 0x3 }, /* Freq 5850 */
-	{ 171, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x32AAA, 0x3 }, /* Freq 5855 */
-	{ 172, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x35555, 0x3 }, /* Freq 5860 */
-	{ 173, 	(RF_A_BAND | RF_A_BAND_HB),	0x02, 0x3F, 0x7F, 0xDD, 0xC3, 0x40, 0x0, 0x80, 0x0, 0, 0, 0, 0x30, 0, 0x0, 0x8, 0x38000, 0x3 }, /* Freq 5865 */
-};
-
-static const u8 mt76x0_sdm_channel[] = {
-	183, 185,  43,  45,
-	54,   55,  57,  58,
-	102, 103, 105, 106,
-	115, 117, 126, 127,
-	129, 130, 139, 141,
-	150, 151, 153, 154,
-	163, 165
-};
-
-static const struct mt76x0_rf_switch_item mt76x0_rf_ext_pa_tab[] = {
-	{ MT_RF(6, 45),	RF_A_BAND_LB,	0x63 },
-	{ MT_RF(6, 45),	RF_A_BAND_MB,	0x43 },
-	{ MT_RF(6, 45),	RF_A_BAND_HB,	0x33 },
-	{ MT_RF(6, 45),	RF_A_BAND_11J,	0x73 },
-	{ MT_RF(6, 50),	RF_A_BAND_LB,	0x02 },
-	{ MT_RF(6, 50),	RF_A_BAND_MB,	0x02 },
-	{ MT_RF(6, 50),	RF_A_BAND_HB,	0x02 },
-	{ MT_RF(6, 50),	RF_A_BAND_11J,	0x02 },
-	{ MT_RF(6, 51),	RF_A_BAND_LB,	0x02 },
-	{ MT_RF(6, 51),	RF_A_BAND_MB,	0x02 },
-	{ MT_RF(6, 51),	RF_A_BAND_HB,	0x02 },
-	{ MT_RF(6, 51),	RF_A_BAND_11J,	0x02 },
-	{ MT_RF(6, 52),	RF_A_BAND_LB,	0x08 },
-	{ MT_RF(6, 52),	RF_A_BAND_MB,	0x08 },
-	{ MT_RF(6, 52),	RF_A_BAND_HB,	0x08 },
-	{ MT_RF(6, 52),	RF_A_BAND_11J,	0x08 },
-	{ MT_RF(6, 53),	RF_A_BAND_LB,	0x08 },
-	{ MT_RF(6, 53),	RF_A_BAND_MB,	0x08 },
-	{ MT_RF(6, 53),	RF_A_BAND_HB,	0x08 },
-	{ MT_RF(6, 53),	RF_A_BAND_11J,	0x08 },
-	{ MT_RF(6, 54),	RF_A_BAND_LB,	0x0A },
-	{ MT_RF(6, 54),	RF_A_BAND_MB,	0x0A },
-	{ MT_RF(6, 54),	RF_A_BAND_HB,	0x0A },
-	{ MT_RF(6, 54),	RF_A_BAND_11J,	0x0A },
-	{ MT_RF(6, 55),	RF_A_BAND_LB,	0x0A },
-	{ MT_RF(6, 55),	RF_A_BAND_MB,	0x0A },
-	{ MT_RF(6, 55),	RF_A_BAND_HB,	0x0A },
-	{ MT_RF(6, 55),	RF_A_BAND_11J,	0x0A },
-	{ MT_RF(6, 56),	RF_A_BAND_LB,	0x05 },
-	{ MT_RF(6, 56),	RF_A_BAND_MB,	0x05 },
-	{ MT_RF(6, 56),	RF_A_BAND_HB,	0x05 },
-	{ MT_RF(6, 56),	RF_A_BAND_11J,	0x05 },
-	{ MT_RF(6, 57),	RF_A_BAND_LB,	0x05 },
-	{ MT_RF(6, 57),	RF_A_BAND_MB,	0x05 },
-	{ MT_RF(6, 57),	RF_A_BAND_HB,	0x05 },
-	{ MT_RF(6, 57),	RF_A_BAND_11J,	0x05 },
-	{ MT_RF(6, 58),	RF_A_BAND_LB,	0x05 },
-	{ MT_RF(6, 58),	RF_A_BAND_MB,	0x03 },
-	{ MT_RF(6, 58),	RF_A_BAND_HB,	0x02 },
-	{ MT_RF(6, 58),	RF_A_BAND_11J,	0x07 },
-	{ MT_RF(6, 59),	RF_A_BAND_LB,	0x05 },
-	{ MT_RF(6, 59),	RF_A_BAND_MB,	0x03 },
-	{ MT_RF(6, 59),	RF_A_BAND_HB,	0x02 },
-	{ MT_RF(6, 59),	RF_A_BAND_11J,	0x07 },
-};
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/main.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/main.c
deleted file mode 100644
index 07380cc..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/main.c
+++ /dev/null
@@ -1,96 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-
-#include <linux/etherdevice.h>
-#include "mt76x0.h"
-
-static void
-mt76x0_set_channel(struct mt76x02_dev *dev, struct cfg80211_chan_def *chandef)
-{
-	cancel_delayed_work_sync(&dev->cal_work);
-	mt76x02_pre_tbtt_enable(dev, false);
-	if (mt76_is_mmio(&dev->mt76))
-		tasklet_disable(&dev->dfs_pd.dfs_tasklet);
-
-	mt76_set_channel(&dev->mphy);
-	mt76x0_phy_set_channel(dev, chandef);
-
-	mt76x02_mac_cc_reset(dev);
-	mt76x02_edcca_init(dev);
-
-	if (mt76_is_mmio(&dev->mt76)) {
-		mt76x02_dfs_init_params(dev);
-		tasklet_enable(&dev->dfs_pd.dfs_tasklet);
-	}
-	mt76x02_pre_tbtt_enable(dev, true);
-
-	mt76_txq_schedule_all(&dev->mphy);
-}
-
-int mt76x0_set_sar_specs(struct ieee80211_hw *hw,
-			 const struct cfg80211_sar_specs *sar)
-{
-	int err = -EINVAL, power = hw->conf.power_level * 2;
-	struct mt76x02_dev *dev = hw->priv;
-	struct mt76_phy *mphy = &dev->mphy;
-
-	mutex_lock(&dev->mt76.mutex);
-	if (!cfg80211_chandef_valid(&mphy->chandef))
-		goto out;
-
-	err = mt76_init_sar_power(hw, sar);
-	if (err)
-		goto out;
-
-	dev->txpower_conf = mt76_get_sar_power(mphy, mphy->chandef.chan,
-					       power);
-	if (test_bit(MT76_STATE_RUNNING, &mphy->state))
-		mt76x0_phy_set_txpower(dev);
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return err;
-}
-EXPORT_SYMBOL_GPL(mt76x0_set_sar_specs);
-
-int mt76x0_config(struct ieee80211_hw *hw, u32 changed)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
-		ieee80211_stop_queues(hw);
-		mt76x0_set_channel(dev, &hw->conf.chandef);
-		ieee80211_wake_queues(hw);
-	}
-
-	if (changed & IEEE80211_CONF_CHANGE_POWER) {
-		struct mt76_phy *mphy = &dev->mphy;
-
-		dev->txpower_conf = hw->conf.power_level * 2;
-		dev->txpower_conf = mt76_get_sar_power(mphy,
-						       mphy->chandef.chan,
-						       dev->txpower_conf);
-		if (test_bit(MT76_STATE_RUNNING, &mphy->state))
-			mt76x0_phy_set_txpower(dev);
-	}
-
-	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
-		if (!(hw->conf.flags & IEEE80211_CONF_MONITOR))
-			dev->mt76.rxfilter |= MT_RX_FILTR_CFG_PROMISC;
-		else
-			dev->mt76.rxfilter &= ~MT_RX_FILTR_CFG_PROMISC;
-
-		mt76_wr(dev, MT_RX_FILTR_CFG, dev->mt76.rxfilter);
-	}
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x0_config);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/mcu.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/mcu.h
deleted file mode 100644
index 0ef29f1..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/mcu.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- */
-
-#ifndef __MT76X0U_MCU_H
-#define __MT76X0U_MCU_H
-
-#include "../mt76x02_mcu.h"
-
-struct mt76x02_dev;
-
-#define MT_MCU_IVB_SIZE			0x40
-#define MT_MCU_DLM_OFFSET		0x80000
-
-/* We use same space for BBP as for MAC regs
- * #define MT_MCU_MEMMAP_BBP		0x40000000
- */
-#define MT_MCU_MEMMAP_RF		0x80000000
-
-enum mcu_calibrate {
-	MCU_CAL_R = 1,
-	MCU_CAL_RXDCOC,
-	MCU_CAL_LC,
-	MCU_CAL_LOFT,
-	MCU_CAL_TXIQ,
-	MCU_CAL_BW,
-	MCU_CAL_DPD,
-	MCU_CAL_RXIQ,
-	MCU_CAL_TXDCOC,
-	MCU_CAL_RX_GROUP_DELAY,
-	MCU_CAL_TX_GROUP_DELAY,
-	MCU_CAL_VCO,
-	MCU_CAL_NO_SIGNAL = 0xfe,
-	MCU_CAL_FULL = 0xff,
-};
-
-int mt76x0e_mcu_init(struct mt76x02_dev *dev);
-int mt76x0u_mcu_init(struct mt76x02_dev *dev);
-static inline int mt76x0_firmware_running(struct mt76x02_dev *dev)
-{
-	return mt76_rr(dev, MT_MCU_COM_REG0) == 1;
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/mt76x0.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/mt76x0.h
deleted file mode 100644
index 99dcb8f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/mt76x0.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-
-#ifndef MT76X0U_H
-#define MT76X0U_H
-
-#include <linux/bitfield.h>
-#include <linux/kernel.h>
-#include <linux/device.h>
-#include <linux/mutex.h>
-#include <linux/usb.h>
-#include <linux/completion.h>
-#include <net/mac80211.h>
-#include <linux/debugfs.h>
-
-#include "../mt76x02.h"
-#include "eeprom.h"
-
-#define MT7610E_FIRMWARE		"mediatek/mt7610e.bin"
-#define MT7650E_FIRMWARE		"mediatek/mt7650e.bin"
-
-#define MT7610U_FIRMWARE		"mediatek/mt7610u.bin"
-
-#define MT_USB_AGGR_SIZE_LIMIT		21 /* * 1024B */
-#define MT_USB_AGGR_TIMEOUT		0x80 /* * 33ns */
-
-static inline bool is_mt7610e(struct mt76x02_dev *dev)
-{
-	if (!mt76_is_mmio(&dev->mt76))
-		return false;
-
-	return mt76_chip(&dev->mt76) == 0x7610;
-}
-
-static inline bool is_mt7630(struct mt76x02_dev *dev)
-{
-	return mt76_chip(&dev->mt76) == 0x7630;
-}
-
-/* Init */
-int mt76x0_init_hardware(struct mt76x02_dev *dev);
-int mt76x0_register_device(struct mt76x02_dev *dev);
-void mt76x0_chip_onoff(struct mt76x02_dev *dev, bool enable, bool reset);
-
-void mt76x0_mac_stop(struct mt76x02_dev *dev);
-
-int mt76x0_config(struct ieee80211_hw *hw, u32 changed);
-int mt76x0_set_sar_specs(struct ieee80211_hw *hw,
-			 const struct cfg80211_sar_specs *sar);
-
-/* PHY */
-void mt76x0_phy_init(struct mt76x02_dev *dev);
-int mt76x0_phy_wait_bbp_ready(struct mt76x02_dev *dev);
-void mt76x0_phy_set_channel(struct mt76x02_dev *dev,
-			    struct cfg80211_chan_def *chandef);
-void mt76x0_phy_set_txpower(struct mt76x02_dev *dev);
-void mt76x0_phy_calibrate(struct mt76x02_dev *dev, bool power_on);
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/pci.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/pci.c
deleted file mode 100644
index 9277ff3..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/pci.c
+++ /dev/null
@@ -1,318 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/pci.h>
-
-#include "mt76x0.h"
-#include "mcu.h"
-
-static int mt76x0e_start(struct ieee80211_hw *hw)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	mt76x02_mac_start(dev);
-	mt76x0_phy_calibrate(dev, true);
-	ieee80211_queue_delayed_work(dev->mt76.hw, &dev->mphy.mac_work,
-				     MT_MAC_WORK_INTERVAL);
-	ieee80211_queue_delayed_work(dev->mt76.hw, &dev->cal_work,
-				     MT_CALIBRATE_INTERVAL);
-	set_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-
-	return 0;
-}
-
-static void mt76x0e_stop_hw(struct mt76x02_dev *dev)
-{
-	cancel_delayed_work_sync(&dev->cal_work);
-	cancel_delayed_work_sync(&dev->mphy.mac_work);
-	clear_bit(MT76_RESTART, &dev->mphy.state);
-
-	if (!mt76_poll(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_TX_DMA_BUSY,
-		       0, 1000))
-		dev_warn(dev->mt76.dev, "TX DMA did not stop\n");
-	mt76_clear(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_TX_DMA_EN);
-
-	mt76x0_mac_stop(dev);
-
-	if (!mt76_poll(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_RX_DMA_BUSY,
-		       0, 1000))
-		dev_warn(dev->mt76.dev, "TX DMA did not stop\n");
-	mt76_clear(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_RX_DMA_EN);
-}
-
-static void mt76x0e_stop(struct ieee80211_hw *hw)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	clear_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-	mt76x0e_stop_hw(dev);
-}
-
-static void
-mt76x0e_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	      u32 queues, bool drop)
-{
-}
-
-static const struct ieee80211_ops mt76x0e_ops = {
-	.tx = mt76x02_tx,
-	.start = mt76x0e_start,
-	.stop = mt76x0e_stop,
-	.add_interface = mt76x02_add_interface,
-	.remove_interface = mt76x02_remove_interface,
-	.config = mt76x0_config,
-	.configure_filter = mt76x02_configure_filter,
-	.bss_info_changed = mt76x02_bss_info_changed,
-	.sta_state = mt76_sta_state,
-	.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
-	.set_key = mt76x02_set_key,
-	.conf_tx = mt76x02_conf_tx,
-	.sw_scan_start = mt76_sw_scan,
-	.sw_scan_complete = mt76x02_sw_scan_complete,
-	.ampdu_action = mt76x02_ampdu_action,
-	.sta_rate_tbl_update = mt76x02_sta_rate_tbl_update,
-	.wake_tx_queue = mt76_wake_tx_queue,
-	.get_survey = mt76_get_survey,
-	.get_txpower = mt76_get_txpower,
-	.flush = mt76x0e_flush,
-	.set_tim = mt76_set_tim,
-	.release_buffered_frames = mt76_release_buffered_frames,
-	.set_coverage_class = mt76x02_set_coverage_class,
-	.set_rts_threshold = mt76x02_set_rts_threshold,
-	.get_antenna = mt76_get_antenna,
-	.reconfig_complete = mt76x02_reconfig_complete,
-	.set_sar_specs = mt76x0_set_sar_specs,
-};
-
-static int mt76x0e_init_hardware(struct mt76x02_dev *dev, bool resume)
-{
-	int err;
-
-	mt76x0_chip_onoff(dev, true, false);
-	if (!mt76x02_wait_for_mac(&dev->mt76))
-		return -ETIMEDOUT;
-
-	mt76x02_dma_disable(dev);
-	err = mt76x0e_mcu_init(dev);
-	if (err < 0)
-		return err;
-
-	if (!resume) {
-		err = mt76x02_dma_init(dev);
-		if (err < 0)
-			return err;
-	}
-
-	err = mt76x0_init_hardware(dev);
-	if (err < 0)
-		return err;
-
-	mt76x02e_init_beacon_config(dev);
-
-	if (mt76_chip(&dev->mt76) == 0x7610) {
-		u16 val;
-
-		mt76_clear(dev, MT_COEXCFG0, BIT(0));
-
-		val = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_0);
-		if (!(val & MT_EE_NIC_CONF_0_PA_IO_CURRENT))
-			mt76_set(dev, MT_XO_CTRL7, 0xc03);
-	}
-
-	mt76_clear(dev, 0x110, BIT(9));
-	mt76_set(dev, MT_MAX_LEN_CFG, BIT(13));
-
-	return 0;
-}
-
-static int mt76x0e_register_device(struct mt76x02_dev *dev)
-{
-	int err;
-
-	err = mt76x0e_init_hardware(dev, false);
-	if (err < 0)
-		return err;
-
-	err = mt76x0_register_device(dev);
-	if (err < 0)
-		return err;
-
-	set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-
-	return 0;
-}
-
-static int
-mt76x0e_probe(struct pci_dev *pdev, const struct pci_device_id *id)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		.txwi_size = sizeof(struct mt76x02_txwi),
-		.drv_flags = MT_DRV_TX_ALIGNED4_SKBS |
-			     MT_DRV_SW_RX_AIRTIME,
-		.survey_flags = SURVEY_INFO_TIME_TX,
-		.update_survey = mt76x02_update_channel,
-		.tx_prepare_skb = mt76x02_tx_prepare_skb,
-		.tx_complete_skb = mt76x02_tx_complete_skb,
-		.rx_skb = mt76x02_queue_rx_skb,
-		.rx_poll_complete = mt76x02_rx_poll_complete,
-		.sta_ps = mt76x02_sta_ps,
-		.sta_add = mt76x02_sta_add,
-		.sta_remove = mt76x02_sta_remove,
-	};
-	struct mt76x02_dev *dev;
-	struct mt76_dev *mdev;
-	int ret;
-
-	ret = pcim_enable_device(pdev);
-	if (ret)
-		return ret;
-
-	ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
-	if (ret)
-		return ret;
-
-	pci_set_master(pdev);
-
-	ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
-	if (ret)
-		return ret;
-
-	mt76_pci_disable_aspm(pdev);
-
-	mdev = mt76_alloc_device(&pdev->dev, sizeof(*dev), &mt76x0e_ops,
-				 &drv_ops);
-	if (!mdev)
-		return -ENOMEM;
-
-	dev = container_of(mdev, struct mt76x02_dev, mt76);
-	mutex_init(&dev->phy_mutex);
-
-	mt76_mmio_init(mdev, pcim_iomap_table(pdev)[0]);
-
-	mdev->rev = mt76_rr(dev, MT_ASIC_VERSION);
-	dev_info(mdev->dev, "ASIC revision: %08x\n", mdev->rev);
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-
-	ret = devm_request_irq(mdev->dev, pdev->irq, mt76x02_irq_handler,
-			       IRQF_SHARED, KBUILD_MODNAME, dev);
-	if (ret)
-		goto error;
-
-	ret = mt76x0e_register_device(dev);
-	if (ret < 0)
-		goto error;
-
-	return 0;
-
-error:
-	mt76_free_device(&dev->mt76);
-
-	return ret;
-}
-
-static void mt76x0e_cleanup(struct mt76x02_dev *dev)
-{
-	clear_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-	tasklet_disable(&dev->mt76.pre_tbtt_tasklet);
-	mt76x0_chip_onoff(dev, false, false);
-	mt76x0e_stop_hw(dev);
-	mt76_dma_cleanup(&dev->mt76);
-	mt76x02_mcu_cleanup(dev);
-}
-
-static void
-mt76x0e_remove(struct pci_dev *pdev)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-
-	mt76_unregister_device(mdev);
-	mt76x0e_cleanup(dev);
-	mt76_free_device(mdev);
-}
-
-#ifdef CONFIG_PM
-static int mt76x0e_suspend(struct pci_dev *pdev, pm_message_t state)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	int i;
-
-	mt76_worker_disable(&mdev->tx_worker);
-	for (i = 0; i < ARRAY_SIZE(mdev->phy.q_tx); i++)
-		mt76_queue_tx_cleanup(dev, mdev->phy.q_tx[i], true);
-	for (i = 0; i < ARRAY_SIZE(mdev->q_mcu); i++)
-		mt76_queue_tx_cleanup(dev, mdev->q_mcu[i], true);
-	napi_disable(&mdev->tx_napi);
-
-	mt76_for_each_q_rx(mdev, i)
-		napi_disable(&mdev->napi[i]);
-
-	mt76x02_dma_disable(dev);
-	mt76x02_mcu_cleanup(dev);
-	mt76x0_chip_onoff(dev, false, false);
-
-	pci_enable_wake(pdev, pci_choose_state(pdev, state), true);
-	pci_save_state(pdev);
-
-	return pci_set_power_state(pdev, pci_choose_state(pdev, state));
-}
-
-static int mt76x0e_resume(struct pci_dev *pdev)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	int err, i;
-
-	err = pci_set_power_state(pdev, PCI_D0);
-	if (err)
-		return err;
-
-	pci_restore_state(pdev);
-
-	mt76_worker_enable(&mdev->tx_worker);
-
-	local_bh_disable();
-	mt76_for_each_q_rx(mdev, i) {
-		mt76_queue_rx_reset(dev, i);
-		napi_enable(&mdev->napi[i]);
-		napi_schedule(&mdev->napi[i]);
-	}
-
-	napi_enable(&mdev->tx_napi);
-	napi_schedule(&mdev->tx_napi);
-	local_bh_enable();
-
-	return mt76x0e_init_hardware(dev, true);
-}
-#endif /* CONFIG_PM */
-
-static const struct pci_device_id mt76x0e_device_table[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7610) },
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7630) },
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7650) },
-	{ },
-};
-
-MODULE_DEVICE_TABLE(pci, mt76x0e_device_table);
-MODULE_FIRMWARE(MT7610E_FIRMWARE);
-MODULE_FIRMWARE(MT7650E_FIRMWARE);
-MODULE_LICENSE("Dual BSD/GPL");
-
-static struct pci_driver mt76x0e_driver = {
-	.name		= KBUILD_MODNAME,
-	.id_table	= mt76x0e_device_table,
-	.probe		= mt76x0e_probe,
-	.remove		= mt76x0e_remove,
-#ifdef CONFIG_PM
-	.suspend	= mt76x0e_suspend,
-	.resume		= mt76x0e_resume,
-#endif /* CONFIG_PM */
-};
-
-module_pci_driver(mt76x0e_driver);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/pci_mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/pci_mcu.c
deleted file mode 100644
index f096250..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/pci_mcu.c
+++ /dev/null
@@ -1,133 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-#include <linux/kernel.h>
-#include <linux/firmware.h>
-
-#include "mt76x0.h"
-#include "mcu.h"
-
-#define MT_MCU_IVB_ADDR		(MT_MCU_ILM_ADDR + 0x54000 - MT_MCU_IVB_SIZE)
-
-static int mt76x0e_load_firmware(struct mt76x02_dev *dev)
-{
-	bool is_combo_chip = mt76_chip(&dev->mt76) != 0x7610;
-	u32 val, ilm_len, dlm_len, offset = 0;
-	const struct mt76x02_fw_header *hdr;
-	const struct firmware *fw;
-	const char *firmware;
-	const u8 *fw_payload;
-	int len, err;
-
-	if (is_combo_chip)
-		firmware = MT7650E_FIRMWARE;
-	else
-		firmware = MT7610E_FIRMWARE;
-
-	err = request_firmware(&fw, firmware, dev->mt76.dev);
-	if (err)
-		return err;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
-		err = -EIO;
-		goto out;
-	}
-
-	hdr = (const struct mt76x02_fw_header *)fw->data;
-
-	len = sizeof(*hdr);
-	len += le32_to_cpu(hdr->ilm_len);
-	len += le32_to_cpu(hdr->dlm_len);
-
-	if (fw->size != len) {
-		err = -EIO;
-		goto out;
-	}
-
-	fw_payload = fw->data + sizeof(*hdr);
-
-	val = le16_to_cpu(hdr->fw_ver);
-	dev_info(dev->mt76.dev, "Firmware Version: %d.%d.%02d\n",
-		 (val >> 12) & 0xf, (val >> 8) & 0xf, val & 0xf);
-
-	val = le16_to_cpu(hdr->fw_ver);
-	dev_dbg(dev->mt76.dev,
-		"Firmware Version: %d.%d.%02d Build: %x Build time: %.16s\n",
-		(val >> 12) & 0xf, (val >> 8) & 0xf, val & 0xf,
-		le16_to_cpu(hdr->build_ver), hdr->build_time);
-
-	if (is_combo_chip && !mt76_poll(dev, MT_MCU_SEMAPHORE_00, 1, 1, 600)) {
-		dev_err(dev->mt76.dev,
-			"Could not get hardware semaphore for loading fw\n");
-		err = -ETIMEDOUT;
-		goto out;
-	}
-
-	/* upload ILM. */
-	mt76_wr(dev, MT_MCU_PCIE_REMAP_BASE4, 0);
-	ilm_len = le32_to_cpu(hdr->ilm_len);
-	if (is_combo_chip) {
-		ilm_len -= MT_MCU_IVB_SIZE;
-		offset = MT_MCU_IVB_SIZE;
-	}
-	dev_dbg(dev->mt76.dev, "loading FW - ILM %u\n", ilm_len);
-	mt76_wr_copy(dev, MT_MCU_ILM_ADDR + offset, fw_payload + offset,
-		     ilm_len);
-
-	/* upload IVB. */
-	if (is_combo_chip) {
-		dev_dbg(dev->mt76.dev, "loading FW - IVB %u\n",
-			MT_MCU_IVB_SIZE);
-		mt76_wr_copy(dev, MT_MCU_IVB_ADDR, fw_payload, MT_MCU_IVB_SIZE);
-	}
-
-	/* upload DLM. */
-	mt76_wr(dev, MT_MCU_PCIE_REMAP_BASE4, MT_MCU_DLM_OFFSET);
-	dlm_len = le32_to_cpu(hdr->dlm_len);
-	dev_dbg(dev->mt76.dev, "loading FW - DLM %u\n", dlm_len);
-	mt76_wr_copy(dev, MT_MCU_ILM_ADDR,
-		     fw_payload + le32_to_cpu(hdr->ilm_len), dlm_len);
-
-	/* trigger firmware */
-	mt76_wr(dev, MT_MCU_PCIE_REMAP_BASE4, 0);
-	if (is_combo_chip)
-		mt76_wr(dev, MT_MCU_INT_LEVEL, 0x3);
-	else
-		mt76_wr(dev, MT_MCU_RESET_CTL, 0x300);
-
-	if (!mt76_poll_msec(dev, MT_MCU_COM_REG0, 1, 1, 1000)) {
-		dev_err(dev->mt76.dev, "Firmware failed to start\n");
-		err = -ETIMEDOUT;
-		goto out;
-	}
-
-	mt76x02_set_ethtool_fwver(dev, hdr);
-	dev_dbg(dev->mt76.dev, "Firmware running!\n");
-
-out:
-	if (is_combo_chip)
-		mt76_wr(dev, MT_MCU_SEMAPHORE_00, 0x1);
-	release_firmware(fw);
-
-	return err;
-}
-
-int mt76x0e_mcu_init(struct mt76x02_dev *dev)
-{
-	static const struct mt76_mcu_ops mt76x0e_mcu_ops = {
-		.mcu_send_msg = mt76x02_mcu_msg_send,
-		.mcu_parse_response = mt76x02_mcu_parse_response,
-	};
-	int err;
-
-	dev->mt76.mcu_ops = &mt76x0e_mcu_ops;
-
-	err = mt76x0e_load_firmware(dev);
-	if (err < 0)
-		return err;
-
-	set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/phy.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/phy.c
deleted file mode 100644
index 8a89fe4..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/phy.c
+++ /dev/null
@@ -1,1213 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * (c) Copyright 2002-2010, Ralink Technology, Inc.
- * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-
-#include <linux/kernel.h>
-#include <linux/etherdevice.h>
-
-#include "mt76x0.h"
-#include "mcu.h"
-#include "eeprom.h"
-#include "phy.h"
-#include "initvals.h"
-#include "initvals_phy.h"
-#include "../mt76x02_phy.h"
-
-static int
-mt76x0_rf_csr_wr(struct mt76x02_dev *dev, u32 offset, u8 value)
-{
-	int ret = 0;
-	u8 bank, reg;
-
-	if (test_bit(MT76_REMOVED, &dev->mphy.state))
-		return -ENODEV;
-
-	bank = MT_RF_BANK(offset);
-	reg = MT_RF_REG(offset);
-
-	if (WARN_ON_ONCE(reg > 127) || WARN_ON_ONCE(bank > 8))
-		return -EINVAL;
-
-	mutex_lock(&dev->phy_mutex);
-
-	if (!mt76_poll(dev, MT_RF_CSR_CFG, MT_RF_CSR_CFG_KICK, 0, 100)) {
-		ret = -ETIMEDOUT;
-		goto out;
-	}
-
-	mt76_wr(dev, MT_RF_CSR_CFG,
-		FIELD_PREP(MT_RF_CSR_CFG_DATA, value) |
-		FIELD_PREP(MT_RF_CSR_CFG_REG_BANK, bank) |
-		FIELD_PREP(MT_RF_CSR_CFG_REG_ID, reg) |
-		MT_RF_CSR_CFG_WR |
-		MT_RF_CSR_CFG_KICK);
-
-out:
-	mutex_unlock(&dev->phy_mutex);
-
-	if (ret < 0)
-		dev_err(dev->mt76.dev, "Error: RF write %d:%d failed:%d!!\n",
-			bank, reg, ret);
-
-	return ret;
-}
-
-static int mt76x0_rf_csr_rr(struct mt76x02_dev *dev, u32 offset)
-{
-	int ret = -ETIMEDOUT;
-	u32 val;
-	u8 bank, reg;
-
-	if (test_bit(MT76_REMOVED, &dev->mphy.state))
-		return -ENODEV;
-
-	bank = MT_RF_BANK(offset);
-	reg = MT_RF_REG(offset);
-
-	if (WARN_ON_ONCE(reg > 127) || WARN_ON_ONCE(bank > 8))
-		return -EINVAL;
-
-	mutex_lock(&dev->phy_mutex);
-
-	if (!mt76_poll(dev, MT_RF_CSR_CFG, MT_RF_CSR_CFG_KICK, 0, 100))
-		goto out;
-
-	mt76_wr(dev, MT_RF_CSR_CFG,
-		FIELD_PREP(MT_RF_CSR_CFG_REG_BANK, bank) |
-		FIELD_PREP(MT_RF_CSR_CFG_REG_ID, reg) |
-		MT_RF_CSR_CFG_KICK);
-
-	if (!mt76_poll(dev, MT_RF_CSR_CFG, MT_RF_CSR_CFG_KICK, 0, 100))
-		goto out;
-
-	val = mt76_rr(dev, MT_RF_CSR_CFG);
-	if (FIELD_GET(MT_RF_CSR_CFG_REG_ID, val) == reg &&
-	    FIELD_GET(MT_RF_CSR_CFG_REG_BANK, val) == bank)
-		ret = FIELD_GET(MT_RF_CSR_CFG_DATA, val);
-
-out:
-	mutex_unlock(&dev->phy_mutex);
-
-	if (ret < 0)
-		dev_err(dev->mt76.dev, "Error: RF read %d:%d failed:%d!!\n",
-			bank, reg, ret);
-
-	return ret;
-}
-
-static int
-mt76x0_rf_wr(struct mt76x02_dev *dev, u32 offset, u8 val)
-{
-	if (mt76_is_usb(&dev->mt76)) {
-		struct mt76_reg_pair pair = {
-			.reg = offset,
-			.value = val,
-		};
-
-		WARN_ON_ONCE(!test_bit(MT76_STATE_MCU_RUNNING,
-				       &dev->mphy.state));
-		return mt76_wr_rp(dev, MT_MCU_MEMMAP_RF, &pair, 1);
-	} else {
-		return mt76x0_rf_csr_wr(dev, offset, val);
-	}
-}
-
-static int mt76x0_rf_rr(struct mt76x02_dev *dev, u32 offset)
-{
-	int ret;
-	u32 val;
-
-	if (mt76_is_usb(&dev->mt76)) {
-		struct mt76_reg_pair pair = {
-			.reg = offset,
-		};
-
-		WARN_ON_ONCE(!test_bit(MT76_STATE_MCU_RUNNING,
-				       &dev->mphy.state));
-		ret = mt76_rd_rp(dev, MT_MCU_MEMMAP_RF, &pair, 1);
-		val = pair.value;
-	} else {
-		ret = val = mt76x0_rf_csr_rr(dev, offset);
-	}
-
-	return (ret < 0) ? ret : val;
-}
-
-static int
-mt76x0_rf_rmw(struct mt76x02_dev *dev, u32 offset, u8 mask, u8 val)
-{
-	int ret;
-
-	ret = mt76x0_rf_rr(dev, offset);
-	if (ret < 0)
-		return ret;
-
-	val |= ret & ~mask;
-
-	ret = mt76x0_rf_wr(dev, offset, val);
-	return ret ? ret : val;
-}
-
-static int
-mt76x0_rf_set(struct mt76x02_dev *dev, u32 offset, u8 val)
-{
-	return mt76x0_rf_rmw(dev, offset, 0, val);
-}
-
-static int
-mt76x0_rf_clear(struct mt76x02_dev *dev, u32 offset, u8 mask)
-{
-	return mt76x0_rf_rmw(dev, offset, mask, 0);
-}
-
-static void
-mt76x0_phy_rf_csr_wr_rp(struct mt76x02_dev *dev,
-			const struct mt76_reg_pair *data,
-			int n)
-{
-	while (n-- > 0) {
-		mt76x0_rf_csr_wr(dev, data->reg, data->value);
-		data++;
-	}
-}
-
-#define RF_RANDOM_WRITE(dev, tab) do {					\
-	if (mt76_is_mmio(&dev->mt76))					\
-		mt76x0_phy_rf_csr_wr_rp(dev, tab, ARRAY_SIZE(tab));	\
-	else								\
-		mt76_wr_rp(dev, MT_MCU_MEMMAP_RF, tab, ARRAY_SIZE(tab));\
-} while (0)
-
-int mt76x0_phy_wait_bbp_ready(struct mt76x02_dev *dev)
-{
-	int i = 20;
-	u32 val;
-
-	do {
-		val = mt76_rr(dev, MT_BBP(CORE, 0));
-		if (val && ~val)
-			break;
-	} while (--i);
-
-	if (!i) {
-		dev_err(dev->mt76.dev, "Error: BBP is not ready\n");
-		return -EIO;
-	}
-
-	dev_dbg(dev->mt76.dev, "BBP version %08x\n", val);
-	return 0;
-}
-
-static void
-mt76x0_phy_set_band(struct mt76x02_dev *dev, enum nl80211_band band)
-{
-	switch (band) {
-	case NL80211_BAND_2GHZ:
-		RF_RANDOM_WRITE(dev, mt76x0_rf_2g_channel_0_tab);
-
-		mt76x0_rf_wr(dev, MT_RF(5, 0), 0x45);
-		mt76x0_rf_wr(dev, MT_RF(6, 0), 0x44);
-
-		mt76_wr(dev, MT_TX_ALC_VGA3, 0x00050007);
-		mt76_wr(dev, MT_TX0_RF_GAIN_CORR, 0x003E0002);
-		break;
-	case NL80211_BAND_5GHZ:
-		RF_RANDOM_WRITE(dev, mt76x0_rf_5g_channel_0_tab);
-
-		mt76x0_rf_wr(dev, MT_RF(5, 0), 0x44);
-		mt76x0_rf_wr(dev, MT_RF(6, 0), 0x45);
-
-		mt76_wr(dev, MT_TX_ALC_VGA3, 0x00000005);
-		mt76_wr(dev, MT_TX0_RF_GAIN_CORR, 0x01010102);
-		break;
-	default:
-		break;
-	}
-}
-
-static void
-mt76x0_phy_set_chan_rf_params(struct mt76x02_dev *dev, u8 channel,
-			      u16 rf_bw_band)
-{
-	const struct mt76x0_freq_item *freq_item;
-	u16 rf_band = rf_bw_band & 0xff00;
-	u16 rf_bw = rf_bw_band & 0x00ff;
-	enum nl80211_band band;
-	bool b_sdm = false;
-	u32 mac_reg;
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(mt76x0_sdm_channel); i++) {
-		if (channel == mt76x0_sdm_channel[i]) {
-			b_sdm = true;
-			break;
-		}
-	}
-
-	for (i = 0; i < ARRAY_SIZE(mt76x0_frequency_plan); i++) {
-		if (channel == mt76x0_frequency_plan[i].channel) {
-			rf_band = mt76x0_frequency_plan[i].band;
-
-			if (b_sdm)
-				freq_item = &mt76x0_sdm_frequency_plan[i];
-			else
-				freq_item = &mt76x0_frequency_plan[i];
-
-			mt76x0_rf_wr(dev, MT_RF(0, 37), freq_item->pllR37);
-			mt76x0_rf_wr(dev, MT_RF(0, 36), freq_item->pllR36);
-			mt76x0_rf_wr(dev, MT_RF(0, 35), freq_item->pllR35);
-			mt76x0_rf_wr(dev, MT_RF(0, 34), freq_item->pllR34);
-			mt76x0_rf_wr(dev, MT_RF(0, 33), freq_item->pllR33);
-
-			mt76x0_rf_rmw(dev, MT_RF(0, 32), 0xe0,
-				      freq_item->pllR32_b7b5);
-
-			/* R32<4:0> pll_den: (Denomina - 8) */
-			mt76x0_rf_rmw(dev, MT_RF(0, 32), MT_RF_PLL_DEN_MASK,
-				      freq_item->pllR32_b4b0);
-
-			/* R31<7:5> */
-			mt76x0_rf_rmw(dev, MT_RF(0, 31), 0xe0,
-				      freq_item->pllR31_b7b5);
-
-			/* R31<4:0> pll_k(Nominator) */
-			mt76x0_rf_rmw(dev, MT_RF(0, 31), MT_RF_PLL_K_MASK,
-				      freq_item->pllR31_b4b0);
-
-			/* R30<7> sdm_reset_n */
-			if (b_sdm) {
-				mt76x0_rf_clear(dev, MT_RF(0, 30),
-						MT_RF_SDM_RESET_MASK);
-				mt76x0_rf_set(dev, MT_RF(0, 30),
-					      MT_RF_SDM_RESET_MASK);
-			} else {
-				mt76x0_rf_rmw(dev, MT_RF(0, 30),
-					      MT_RF_SDM_RESET_MASK,
-					      freq_item->pllR30_b7);
-			}
-
-			/* R30<6:2> sdmmash_prbs,sin */
-			mt76x0_rf_rmw(dev, MT_RF(0, 30),
-				      MT_RF_SDM_MASH_PRBS_MASK,
-				      freq_item->pllR30_b6b2);
-
-			/* R30<1> sdm_bp */
-			mt76x0_rf_rmw(dev, MT_RF(0, 30), MT_RF_SDM_BP_MASK,
-				      freq_item->pllR30_b1 << 1);
-
-			/* R30<0> R29<7:0> (hex) pll_n */
-			mt76x0_rf_wr(dev, MT_RF(0, 29),
-				     freq_item->pll_n & 0xff);
-
-			mt76x0_rf_rmw(dev, MT_RF(0, 30), 0x1,
-				      (freq_item->pll_n >> 8) & 0x1);
-
-			/* R28<7:6> isi_iso */
-			mt76x0_rf_rmw(dev, MT_RF(0, 28), MT_RF_ISI_ISO_MASK,
-				      freq_item->pllR28_b7b6);
-
-			/* R28<5:4> pfd_dly */
-			mt76x0_rf_rmw(dev, MT_RF(0, 28), MT_RF_PFD_DLY_MASK,
-				      freq_item->pllR28_b5b4);
-
-			/* R28<3:2> clksel option */
-			mt76x0_rf_rmw(dev, MT_RF(0, 28), MT_RF_CLK_SEL_MASK,
-				      freq_item->pllR28_b3b2);
-
-			/* R28<1:0> R27<7:0> R26<7:0> (hex) sdm_k */
-			mt76x0_rf_wr(dev, MT_RF(0, 26),
-				     freq_item->pll_sdm_k & 0xff);
-			mt76x0_rf_wr(dev, MT_RF(0, 27),
-				     (freq_item->pll_sdm_k >> 8) & 0xff);
-
-			mt76x0_rf_rmw(dev, MT_RF(0, 28), 0x3,
-				      (freq_item->pll_sdm_k >> 16) & 0x3);
-
-			/* R24<1:0> xo_div */
-			mt76x0_rf_rmw(dev, MT_RF(0, 24), MT_RF_XO_DIV_MASK,
-				      freq_item->pllR24_b1b0);
-
-			break;
-		}
-	}
-
-	for (i = 0; i < ARRAY_SIZE(mt76x0_rf_bw_switch_tab); i++) {
-		if (rf_bw == mt76x0_rf_bw_switch_tab[i].bw_band) {
-			mt76x0_rf_wr(dev,
-				     mt76x0_rf_bw_switch_tab[i].rf_bank_reg,
-				     mt76x0_rf_bw_switch_tab[i].value);
-		} else if ((rf_bw == (mt76x0_rf_bw_switch_tab[i].bw_band & 0xFF)) &&
-			   (rf_band & mt76x0_rf_bw_switch_tab[i].bw_band)) {
-			mt76x0_rf_wr(dev,
-				     mt76x0_rf_bw_switch_tab[i].rf_bank_reg,
-				     mt76x0_rf_bw_switch_tab[i].value);
-		}
-	}
-
-	for (i = 0; i < ARRAY_SIZE(mt76x0_rf_band_switch_tab); i++) {
-		if (mt76x0_rf_band_switch_tab[i].bw_band & rf_band) {
-			mt76x0_rf_wr(dev,
-				     mt76x0_rf_band_switch_tab[i].rf_bank_reg,
-				     mt76x0_rf_band_switch_tab[i].value);
-		}
-	}
-
-	mt76_clear(dev, MT_RF_MISC, 0xc);
-
-	band = (rf_band & RF_G_BAND) ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ;
-	if (mt76x02_ext_pa_enabled(dev, band)) {
-		/* MT_RF_MISC (offset: 0x0518)
-		 * [2]1'b1: enable external A band PA
-		 *    1'b0: disable external A band PA
-		 * [3]1'b1: enable external G band PA
-		 *    1'b0: disable external G band PA
-		 */
-		if (rf_band & RF_A_BAND)
-			mt76_set(dev, MT_RF_MISC, BIT(2));
-		else
-			mt76_set(dev, MT_RF_MISC, BIT(3));
-
-		/* External PA */
-		for (i = 0; i < ARRAY_SIZE(mt76x0_rf_ext_pa_tab); i++)
-			if (mt76x0_rf_ext_pa_tab[i].bw_band & rf_band)
-				mt76x0_rf_wr(dev,
-					mt76x0_rf_ext_pa_tab[i].rf_bank_reg,
-					mt76x0_rf_ext_pa_tab[i].value);
-	}
-
-	if (rf_band & RF_G_BAND) {
-		mt76_wr(dev, MT_TX0_RF_GAIN_ATTEN, 0x63707400);
-		/* Set Atten mode = 2 For G band, Disable Tx Inc dcoc. */
-		mac_reg = mt76_rr(dev, MT_TX_ALC_CFG_1);
-		mac_reg &= 0x896400FF;
-		mt76_wr(dev, MT_TX_ALC_CFG_1, mac_reg);
-	} else {
-		mt76_wr(dev, MT_TX0_RF_GAIN_ATTEN, 0x686A7800);
-		/* Set Atten mode = 0
-		 * For Ext A band, Disable Tx Inc dcoc Cal.
-		 */
-		mac_reg = mt76_rr(dev, MT_TX_ALC_CFG_1);
-		mac_reg &= 0x890400FF;
-		mt76_wr(dev, MT_TX_ALC_CFG_1, mac_reg);
-	}
-}
-
-static void
-mt76x0_phy_set_chan_bbp_params(struct mt76x02_dev *dev, u16 rf_bw_band)
-{
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(mt76x0_bbp_switch_tab); i++) {
-		const struct mt76x0_bbp_switch_item *item = &mt76x0_bbp_switch_tab[i];
-		const struct mt76_reg_pair *pair = &item->reg_pair;
-
-		if ((rf_bw_band & item->bw_band) != rf_bw_band)
-			continue;
-
-		if (pair->reg == MT_BBP(AGC, 8)) {
-			u32 val = pair->value;
-			u8 gain;
-
-			gain = FIELD_GET(MT_BBP_AGC_GAIN, val);
-			gain -= dev->cal.rx.lna_gain * 2;
-			val &= ~MT_BBP_AGC_GAIN;
-			val |= FIELD_PREP(MT_BBP_AGC_GAIN, gain);
-			mt76_wr(dev, pair->reg, val);
-		} else {
-			mt76_wr(dev, pair->reg, pair->value);
-		}
-	}
-}
-
-static void mt76x0_phy_ant_select(struct mt76x02_dev *dev)
-{
-	u16 ee_ant = mt76x02_eeprom_get(dev, MT_EE_ANTENNA);
-	u16 ee_cfg1 = mt76x02_eeprom_get(dev, MT_EE_CFG1_INIT);
-	u16 nic_conf2 = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_2);
-	u32 wlan, coex3;
-	bool ant_div;
-
-	wlan = mt76_rr(dev, MT_WLAN_FUN_CTRL);
-	coex3 = mt76_rr(dev, MT_COEXCFG3);
-
-	ee_ant &= ~(BIT(14) | BIT(12));
-	wlan  &= ~(BIT(6) | BIT(5));
-	coex3 &= ~GENMASK(5, 2);
-
-	if (ee_ant & MT_EE_ANTENNA_DUAL) {
-		/* dual antenna mode */
-		ant_div = !(nic_conf2 & MT_EE_NIC_CONF_2_ANT_OPT) &&
-			  (nic_conf2 & MT_EE_NIC_CONF_2_ANT_DIV);
-		if (ant_div)
-			ee_ant |= BIT(12);
-		else
-			coex3 |= BIT(4);
-		coex3 |= BIT(3);
-		if (dev->mphy.cap.has_2ghz)
-			wlan |= BIT(6);
-	} else {
-		/* sigle antenna mode */
-		if (dev->mphy.cap.has_5ghz) {
-			coex3 |= BIT(3) | BIT(4);
-		} else {
-			wlan |= BIT(6);
-			coex3 |= BIT(1);
-		}
-	}
-
-	if (is_mt7630(dev))
-		ee_ant |= BIT(14) | BIT(11);
-
-	mt76_wr(dev, MT_WLAN_FUN_CTRL, wlan);
-	mt76_rmw(dev, MT_CMB_CTRL, GENMASK(15, 0), ee_ant);
-	mt76_rmw(dev, MT_CSR_EE_CFG1, GENMASK(15, 0), ee_cfg1);
-	mt76_clear(dev, MT_COEXCFG0, BIT(2));
-	mt76_wr(dev, MT_COEXCFG3, coex3);
-}
-
-static void
-mt76x0_phy_bbp_set_bw(struct mt76x02_dev *dev, enum nl80211_chan_width width)
-{
-	enum { BW_20 = 0, BW_40 = 1, BW_80 = 2, BW_10 = 4};
-	int bw;
-
-	switch (width) {
-	default:
-	case NL80211_CHAN_WIDTH_20_NOHT:
-	case NL80211_CHAN_WIDTH_20:
-		bw = BW_20;
-		break;
-	case NL80211_CHAN_WIDTH_40:
-		bw = BW_40;
-		break;
-	case NL80211_CHAN_WIDTH_80:
-		bw = BW_80;
-		break;
-	case NL80211_CHAN_WIDTH_10:
-		bw = BW_10;
-		break;
-	case NL80211_CHAN_WIDTH_80P80:
-	case NL80211_CHAN_WIDTH_160:
-	case NL80211_CHAN_WIDTH_5:
-		/* TODO error */
-		return;
-	}
-
-	mt76x02_mcu_function_select(dev, BW_SETTING, bw);
-}
-
-static void mt76x0_phy_tssi_dc_calibrate(struct mt76x02_dev *dev)
-{
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-	u32 val;
-
-	if (chan->band == NL80211_BAND_5GHZ)
-		mt76x0_rf_clear(dev, MT_RF(0, 67), 0xf);
-
-	/* bypass ADDA control */
-	mt76_wr(dev, MT_RF_SETTING_0, 0x60002237);
-	mt76_wr(dev, MT_RF_BYPASS_0, 0xffffffff);
-
-	/* bbp sw reset */
-	mt76_set(dev, MT_BBP(CORE, 4), BIT(0));
-	usleep_range(500, 1000);
-	mt76_clear(dev, MT_BBP(CORE, 4), BIT(0));
-
-	val = (chan->band == NL80211_BAND_5GHZ) ? 0x80055 : 0x80050;
-	mt76_wr(dev, MT_BBP(CORE, 34), val);
-
-	/* enable TX with DAC0 input */
-	mt76_wr(dev, MT_BBP(TXBE, 6), BIT(31));
-
-	mt76_poll_msec(dev, MT_BBP(CORE, 34), BIT(4), 0, 200);
-	dev->cal.tssi_dc = mt76_rr(dev, MT_BBP(CORE, 35)) & 0xff;
-
-	/* stop bypass ADDA */
-	mt76_wr(dev, MT_RF_BYPASS_0, 0);
-	/* stop TX */
-	mt76_wr(dev, MT_BBP(TXBE, 6), 0);
-	/* bbp sw reset */
-	mt76_set(dev, MT_BBP(CORE, 4), BIT(0));
-	usleep_range(500, 1000);
-	mt76_clear(dev, MT_BBP(CORE, 4), BIT(0));
-
-	if (chan->band == NL80211_BAND_5GHZ)
-		mt76x0_rf_rmw(dev, MT_RF(0, 67), 0xf, 0x4);
-}
-
-static int
-mt76x0_phy_tssi_adc_calibrate(struct mt76x02_dev *dev, s16 *ltssi,
-			      u8 *info)
-{
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-	u32 val;
-
-	val = (chan->band == NL80211_BAND_5GHZ) ? 0x80055 : 0x80050;
-	mt76_wr(dev, MT_BBP(CORE, 34), val);
-
-	if (!mt76_poll_msec(dev, MT_BBP(CORE, 34), BIT(4), 0, 200)) {
-		mt76_clear(dev, MT_BBP(CORE, 34), BIT(4));
-		return -ETIMEDOUT;
-	}
-
-	*ltssi = mt76_rr(dev, MT_BBP(CORE, 35)) & 0xff;
-	if (chan->band == NL80211_BAND_5GHZ)
-		*ltssi += 128;
-
-	/* set packet info#1 mode */
-	mt76_wr(dev, MT_BBP(CORE, 34), 0x80041);
-	info[0] = mt76_rr(dev, MT_BBP(CORE, 35)) & 0xff;
-
-	/* set packet info#2 mode */
-	mt76_wr(dev, MT_BBP(CORE, 34), 0x80042);
-	info[1] = mt76_rr(dev, MT_BBP(CORE, 35)) & 0xff;
-
-	/* set packet info#3 mode */
-	mt76_wr(dev, MT_BBP(CORE, 34), 0x80043);
-	info[2] = mt76_rr(dev, MT_BBP(CORE, 35)) & 0xff;
-
-	return 0;
-}
-
-static u8 mt76x0_phy_get_rf_pa_mode(struct mt76x02_dev *dev,
-				    int index, u8 tx_rate)
-{
-	u32 val, reg;
-
-	reg = (index == 1) ? MT_RF_PA_MODE_CFG1 : MT_RF_PA_MODE_CFG0;
-	val = mt76_rr(dev, reg);
-	return (val & (3 << (tx_rate * 2))) >> (tx_rate * 2);
-}
-
-static int
-mt76x0_phy_get_target_power(struct mt76x02_dev *dev, u8 tx_mode,
-			    u8 *info, s8 *target_power,
-			    s8 *target_pa_power)
-{
-	u8 tx_rate, cur_power;
-
-	cur_power = mt76_rr(dev, MT_TX_ALC_CFG_0) & MT_TX_ALC_CFG_0_CH_INIT_0;
-	switch (tx_mode) {
-	case 0:
-		/* cck rates */
-		tx_rate = (info[0] & 0x60) >> 5;
-		if (tx_rate > 3)
-			return -EINVAL;
-
-		*target_power = cur_power + dev->rate_power.cck[tx_rate];
-		*target_pa_power = mt76x0_phy_get_rf_pa_mode(dev, 0, tx_rate);
-		break;
-	case 1: {
-		u8 index;
-
-		/* ofdm rates */
-		tx_rate = (info[0] & 0xf0) >> 4;
-		switch (tx_rate) {
-		case 0xb:
-			index = 0;
-			break;
-		case 0xf:
-			index = 1;
-			break;
-		case 0xa:
-			index = 2;
-			break;
-		case 0xe:
-			index = 3;
-			break;
-		case 0x9:
-			index = 4;
-			break;
-		case 0xd:
-			index = 5;
-			break;
-		case 0x8:
-			index = 6;
-			break;
-		case 0xc:
-			index = 7;
-			break;
-		default:
-			return -EINVAL;
-		}
-
-		*target_power = cur_power + dev->rate_power.ofdm[index];
-		*target_pa_power = mt76x0_phy_get_rf_pa_mode(dev, 0, index + 4);
-		break;
-	}
-	case 4:
-		/* vht rates */
-		tx_rate = info[1] & 0xf;
-		if (tx_rate > 9)
-			return -EINVAL;
-
-		*target_power = cur_power + dev->rate_power.vht[tx_rate];
-		*target_pa_power = mt76x0_phy_get_rf_pa_mode(dev, 1, tx_rate);
-		break;
-	default:
-		/* ht rates */
-		tx_rate = info[1] & 0x7f;
-		if (tx_rate > 9)
-			return -EINVAL;
-
-		*target_power = cur_power + dev->rate_power.ht[tx_rate];
-		*target_pa_power = mt76x0_phy_get_rf_pa_mode(dev, 1, tx_rate);
-		break;
-	}
-
-	return 0;
-}
-
-static s16 mt76x0_phy_lin2db(u16 val)
-{
-	u32 mantissa = val << 4;
-	int ret, data;
-	s16 exp = -4;
-
-	while (mantissa < BIT(15)) {
-		mantissa <<= 1;
-		if (--exp < -20)
-			return -10000;
-	}
-	while (mantissa > 0xffff) {
-		mantissa >>= 1;
-		if (++exp > 20)
-			return -10000;
-	}
-
-	/* s(15,0) */
-	if (mantissa <= 47104)
-		data = mantissa + (mantissa >> 3) + (mantissa >> 4) - 38400;
-	else
-		data = mantissa - (mantissa >> 3) - (mantissa >> 6) - 23040;
-	data = max_t(int, 0, data);
-
-	ret = ((15 + exp) << 15) + data;
-	ret = (ret << 2) + (ret << 1) + (ret >> 6) + (ret >> 7);
-	return ret >> 10;
-}
-
-static int
-mt76x0_phy_get_delta_power(struct mt76x02_dev *dev, u8 tx_mode,
-			   s8 target_power, s8 target_pa_power,
-			   s16 ltssi)
-{
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-	int tssi_target = target_power << 12, tssi_slope;
-	int tssi_offset, tssi_db, ret;
-	u32 data;
-	u16 val;
-
-	if (chan->band == NL80211_BAND_5GHZ) {
-		u8 bound[7];
-		int i, err;
-
-		err = mt76x02_eeprom_copy(dev, MT_EE_TSSI_BOUND1, bound,
-					  sizeof(bound));
-		if (err < 0)
-			return err;
-
-		for (i = 0; i < ARRAY_SIZE(bound); i++) {
-			if (chan->hw_value <= bound[i] || !bound[i])
-				break;
-		}
-		val = mt76x02_eeprom_get(dev, MT_EE_TSSI_SLOPE_5G + i * 2);
-
-		tssi_offset = val >> 8;
-		if ((tssi_offset >= 64 && tssi_offset <= 127) ||
-		    (tssi_offset & BIT(7)))
-			tssi_offset -= BIT(8);
-	} else {
-		val = mt76x02_eeprom_get(dev, MT_EE_TSSI_SLOPE_2G);
-
-		tssi_offset = val >> 8;
-		if (tssi_offset & BIT(7))
-			tssi_offset -= BIT(8);
-	}
-	tssi_slope = val & 0xff;
-
-	switch (target_pa_power) {
-	case 1:
-		if (chan->band == NL80211_BAND_2GHZ)
-			tssi_target += 29491; /* 3.6 * 8192 */
-		fallthrough;
-	case 0:
-		break;
-	default:
-		tssi_target += 4424; /* 0.54 * 8192 */
-		break;
-	}
-
-	if (!tx_mode) {
-		data = mt76_rr(dev, MT_BBP(CORE, 1));
-		if (is_mt7630(dev) && mt76_is_mmio(&dev->mt76)) {
-			int offset;
-
-			/* 2.3 * 8192 or 1.5 * 8192 */
-			offset = (data & BIT(5)) ? 18841 : 12288;
-			tssi_target += offset;
-		} else if (data & BIT(5)) {
-			/* 0.8 * 8192 */
-			tssi_target += 6554;
-		}
-	}
-
-	data = mt76_rr(dev, MT_BBP(TXBE, 4));
-	switch (data & 0x3) {
-	case 1:
-		tssi_target -= 49152; /* -6db * 8192 */
-		break;
-	case 2:
-		tssi_target -= 98304; /* -12db * 8192 */
-		break;
-	case 3:
-		tssi_target += 49152; /* 6db * 8192 */
-		break;
-	default:
-		break;
-	}
-
-	tssi_db = mt76x0_phy_lin2db(ltssi - dev->cal.tssi_dc) * tssi_slope;
-	if (chan->band == NL80211_BAND_5GHZ) {
-		tssi_db += ((tssi_offset - 50) << 10); /* offset s4.3 */
-		tssi_target -= tssi_db;
-		if (ltssi > 254 && tssi_target > 0) {
-			/* upper saturate */
-			tssi_target = 0;
-		}
-	} else {
-		tssi_db += (tssi_offset << 9); /* offset s3.4 */
-		tssi_target -= tssi_db;
-		/* upper-lower saturate */
-		if ((ltssi > 126 && tssi_target > 0) ||
-		    ((ltssi - dev->cal.tssi_dc) < 1 && tssi_target < 0)) {
-			tssi_target = 0;
-		}
-	}
-
-	if ((dev->cal.tssi_target ^ tssi_target) < 0 &&
-	    dev->cal.tssi_target > -4096 && dev->cal.tssi_target < 4096 &&
-	    tssi_target > -4096 && tssi_target < 4096) {
-		if ((tssi_target < 0 &&
-		     tssi_target + dev->cal.tssi_target > 0) ||
-		    (tssi_target > 0 &&
-		     tssi_target + dev->cal.tssi_target <= 0))
-			tssi_target = 0;
-		else
-			dev->cal.tssi_target = tssi_target;
-	} else {
-		dev->cal.tssi_target = tssi_target;
-	}
-
-	/* make the compensate value to the nearest compensate code */
-	if (tssi_target > 0)
-		tssi_target += 2048;
-	else
-		tssi_target -= 2048;
-	tssi_target >>= 12;
-
-	ret = mt76_get_field(dev, MT_TX_ALC_CFG_1, MT_TX_ALC_CFG_1_TEMP_COMP);
-	if (ret & BIT(5))
-		ret -= BIT(6);
-	ret += tssi_target;
-
-	ret = min_t(int, 31, ret);
-	return max_t(int, -32, ret);
-}
-
-static void mt76x0_phy_tssi_calibrate(struct mt76x02_dev *dev)
-{
-	s8 target_power, target_pa_power;
-	u8 tssi_info[3], tx_mode;
-	s16 ltssi;
-	s8 val;
-
-	if (mt76x0_phy_tssi_adc_calibrate(dev, &ltssi, tssi_info) < 0)
-		return;
-
-	tx_mode = tssi_info[0] & 0x7;
-	if (mt76x0_phy_get_target_power(dev, tx_mode, tssi_info,
-					&target_power, &target_pa_power) < 0)
-		return;
-
-	val = mt76x0_phy_get_delta_power(dev, tx_mode, target_power,
-					 target_pa_power, ltssi);
-	mt76_rmw_field(dev, MT_TX_ALC_CFG_1, MT_TX_ALC_CFG_1_TEMP_COMP, val);
-}
-
-void mt76x0_phy_set_txpower(struct mt76x02_dev *dev)
-{
-	struct mt76x02_rate_power *t = &dev->rate_power;
-	s8 info;
-
-	mt76x0_get_tx_power_per_rate(dev, dev->mphy.chandef.chan, t);
-	mt76x0_get_power_info(dev, dev->mphy.chandef.chan, &info);
-
-	mt76x02_add_rate_power_offset(t, info);
-	mt76x02_limit_rate_power(t, dev->txpower_conf);
-	dev->mphy.txpower_cur = mt76x02_get_max_rate_power(t);
-	mt76x02_add_rate_power_offset(t, -info);
-
-	dev->target_power = info;
-	mt76x02_phy_set_txpower(dev, info, info);
-}
-
-void mt76x0_phy_calibrate(struct mt76x02_dev *dev, bool power_on)
-{
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-	int is_5ghz = (chan->band == NL80211_BAND_5GHZ) ? 1 : 0;
-	u32 val, tx_alc, reg_val;
-
-	if (is_mt7630(dev))
-		return;
-
-	if (power_on) {
-		mt76x02_mcu_calibrate(dev, MCU_CAL_R, 0);
-		mt76x02_mcu_calibrate(dev, MCU_CAL_VCO, chan->hw_value);
-		usleep_range(10, 20);
-
-		if (mt76x0_tssi_enabled(dev)) {
-			mt76_wr(dev, MT_MAC_SYS_CTRL,
-				MT_MAC_SYS_CTRL_ENABLE_RX);
-			mt76x0_phy_tssi_dc_calibrate(dev);
-			mt76_wr(dev, MT_MAC_SYS_CTRL,
-				MT_MAC_SYS_CTRL_ENABLE_TX |
-				MT_MAC_SYS_CTRL_ENABLE_RX);
-		}
-	}
-
-	tx_alc = mt76_rr(dev, MT_TX_ALC_CFG_0);
-	mt76_wr(dev, MT_TX_ALC_CFG_0, 0);
-	usleep_range(500, 700);
-
-	reg_val = mt76_rr(dev, MT_BBP(IBI, 9));
-	mt76_wr(dev, MT_BBP(IBI, 9), 0xffffff7e);
-
-	if (is_5ghz) {
-		if (chan->hw_value < 100)
-			val = 0x701;
-		else if (chan->hw_value < 140)
-			val = 0x801;
-		else
-			val = 0x901;
-	} else {
-		val = 0x600;
-	}
-
-	mt76x02_mcu_calibrate(dev, MCU_CAL_FULL, val);
-	mt76x02_mcu_calibrate(dev, MCU_CAL_LC, is_5ghz);
-	usleep_range(15000, 20000);
-
-	mt76_wr(dev, MT_BBP(IBI, 9), reg_val);
-	mt76_wr(dev, MT_TX_ALC_CFG_0, tx_alc);
-	mt76x02_mcu_calibrate(dev, MCU_CAL_RXDCOC, 1);
-}
-EXPORT_SYMBOL_GPL(mt76x0_phy_calibrate);
-
-void mt76x0_phy_set_channel(struct mt76x02_dev *dev,
-			    struct cfg80211_chan_def *chandef)
-{
-	u32 ext_cca_chan[4] = {
-		[0] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(0)),
-		[1] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(1)),
-		[2] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(2)),
-		[3] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(3)),
-	};
-	bool scan = test_bit(MT76_SCANNING, &dev->mphy.state);
-	int ch_group_index, freq, freq1;
-	u8 channel;
-	u32 val;
-	u16 rf_bw_band;
-
-	freq = chandef->chan->center_freq;
-	freq1 = chandef->center_freq1;
-	channel = chandef->chan->hw_value;
-	rf_bw_band = (channel <= 14) ? RF_G_BAND : RF_A_BAND;
-
-	switch (chandef->width) {
-	case NL80211_CHAN_WIDTH_40:
-		if (freq1 > freq)
-			ch_group_index = 0;
-		else
-			ch_group_index = 1;
-		channel += 2 - ch_group_index * 4;
-		rf_bw_band |= RF_BW_40;
-		break;
-	case NL80211_CHAN_WIDTH_80:
-		ch_group_index = (freq - freq1 + 30) / 20;
-		if (WARN_ON(ch_group_index < 0 || ch_group_index > 3))
-			ch_group_index = 0;
-		channel += 6 - ch_group_index * 4;
-		rf_bw_band |= RF_BW_80;
-		break;
-	default:
-		ch_group_index = 0;
-		rf_bw_band |= RF_BW_20;
-		break;
-	}
-
-	if (mt76_is_usb(&dev->mt76)) {
-		mt76x0_phy_bbp_set_bw(dev, chandef->width);
-	} else {
-		if (chandef->width == NL80211_CHAN_WIDTH_80 ||
-		    chandef->width == NL80211_CHAN_WIDTH_40)
-			val = 0x201;
-		else
-			val = 0x601;
-		mt76_wr(dev, MT_TX_SW_CFG0, val);
-	}
-	mt76x02_phy_set_bw(dev, chandef->width, ch_group_index);
-	mt76x02_phy_set_band(dev, chandef->chan->band,
-			     ch_group_index & 1);
-
-	mt76_rmw(dev, MT_EXT_CCA_CFG,
-		 (MT_EXT_CCA_CFG_CCA0 |
-		  MT_EXT_CCA_CFG_CCA1 |
-		  MT_EXT_CCA_CFG_CCA2 |
-		  MT_EXT_CCA_CFG_CCA3 |
-		  MT_EXT_CCA_CFG_CCA_MASK),
-		 ext_cca_chan[ch_group_index]);
-
-	mt76x0_phy_set_band(dev, chandef->chan->band);
-	mt76x0_phy_set_chan_rf_params(dev, channel, rf_bw_band);
-
-	/* set Japan Tx filter at channel 14 */
-	if (channel == 14)
-		mt76_set(dev, MT_BBP(CORE, 1), 0x20);
-	else
-		mt76_clear(dev, MT_BBP(CORE, 1), 0x20);
-
-	mt76x0_read_rx_gain(dev);
-	mt76x0_phy_set_chan_bbp_params(dev, rf_bw_band);
-
-	/* enable vco */
-	mt76x0_rf_set(dev, MT_RF(0, 4), BIT(7));
-	if (scan)
-		return;
-
-	mt76x02_init_agc_gain(dev);
-	mt76x0_phy_calibrate(dev, false);
-	mt76x0_phy_set_txpower(dev);
-
-	ieee80211_queue_delayed_work(dev->mt76.hw, &dev->cal_work,
-				     MT_CALIBRATE_INTERVAL);
-}
-
-static void mt76x0_phy_temp_sensor(struct mt76x02_dev *dev)
-{
-	u8 rf_b7_73, rf_b0_66, rf_b0_67;
-	s8 val;
-
-	rf_b7_73 = mt76x0_rf_rr(dev, MT_RF(7, 73));
-	rf_b0_66 = mt76x0_rf_rr(dev, MT_RF(0, 66));
-	rf_b0_67 = mt76x0_rf_rr(dev, MT_RF(0, 67));
-
-	mt76x0_rf_wr(dev, MT_RF(7, 73), 0x02);
-	mt76x0_rf_wr(dev, MT_RF(0, 66), 0x23);
-	mt76x0_rf_wr(dev, MT_RF(0, 67), 0x01);
-
-	mt76_wr(dev, MT_BBP(CORE, 34), 0x00080055);
-	if (!mt76_poll_msec(dev, MT_BBP(CORE, 34), BIT(4), 0, 200)) {
-		mt76_clear(dev, MT_BBP(CORE, 34), BIT(4));
-		goto done;
-	}
-
-	val = mt76_rr(dev, MT_BBP(CORE, 35));
-	val = (35 * (val - dev->cal.rx.temp_offset)) / 10 + 25;
-
-	if (abs(val - dev->cal.temp_vco) > 20) {
-		mt76x02_mcu_calibrate(dev, MCU_CAL_VCO,
-				      dev->mphy.chandef.chan->hw_value);
-		dev->cal.temp_vco = val;
-	}
-	if (abs(val - dev->cal.temp) > 30) {
-		mt76x0_phy_calibrate(dev, false);
-		dev->cal.temp = val;
-	}
-
-done:
-	mt76x0_rf_wr(dev, MT_RF(7, 73), rf_b7_73);
-	mt76x0_rf_wr(dev, MT_RF(0, 66), rf_b0_66);
-	mt76x0_rf_wr(dev, MT_RF(0, 67), rf_b0_67);
-}
-
-static void mt76x0_phy_set_gain_val(struct mt76x02_dev *dev)
-{
-	u8 gain = dev->cal.agc_gain_cur[0] - dev->cal.agc_gain_adjust;
-
-	mt76_rmw_field(dev, MT_BBP(AGC, 8), MT_BBP_AGC_GAIN, gain);
-
-	if ((dev->mphy.chandef.chan->flags & IEEE80211_CHAN_RADAR) &&
-	    !is_mt7630(dev))
-		mt76x02_phy_dfs_adjust_agc(dev);
-}
-
-static void
-mt76x0_phy_update_channel_gain(struct mt76x02_dev *dev)
-{
-	bool gain_change;
-	u8 gain_delta;
-	int low_gain;
-
-	dev->cal.avg_rssi_all = mt76_get_min_avg_rssi(&dev->mt76, false);
-	if (!dev->cal.avg_rssi_all)
-		dev->cal.avg_rssi_all = -75;
-
-	low_gain = (dev->cal.avg_rssi_all > mt76x02_get_rssi_gain_thresh(dev)) +
-		(dev->cal.avg_rssi_all > mt76x02_get_low_rssi_gain_thresh(dev));
-
-	gain_change = dev->cal.low_gain < 0 ||
-		      (dev->cal.low_gain & 2) ^ (low_gain & 2);
-	dev->cal.low_gain = low_gain;
-
-	if (!gain_change) {
-		if (mt76x02_phy_adjust_vga_gain(dev))
-			mt76x0_phy_set_gain_val(dev);
-		return;
-	}
-
-	dev->cal.agc_gain_adjust = (low_gain == 2) ? 0 : 10;
-	gain_delta = (low_gain == 2) ? 10 : 0;
-
-	dev->cal.agc_gain_cur[0] = dev->cal.agc_gain_init[0] - gain_delta;
-	mt76x0_phy_set_gain_val(dev);
-
-	/* clear false CCA counters */
-	mt76_rr(dev, MT_RX_STAT_1);
-}
-
-static void mt76x0_phy_calibration_work(struct work_struct *work)
-{
-	struct mt76x02_dev *dev = container_of(work, struct mt76x02_dev,
-					       cal_work.work);
-
-	mt76x0_phy_update_channel_gain(dev);
-	if (mt76x0_tssi_enabled(dev))
-		mt76x0_phy_tssi_calibrate(dev);
-	else
-		mt76x0_phy_temp_sensor(dev);
-
-	ieee80211_queue_delayed_work(dev->mt76.hw, &dev->cal_work,
-				     4 * MT_CALIBRATE_INTERVAL);
-}
-
-static void mt76x0_rf_patch_reg_array(struct mt76x02_dev *dev,
-				      const struct mt76_reg_pair *rp, int len)
-{
-	int i;
-
-	for (i = 0; i < len; i++) {
-		u32 reg = rp[i].reg;
-		u8 val = rp[i].value;
-
-		switch (reg) {
-		case MT_RF(0, 3):
-			if (mt76_is_mmio(&dev->mt76)) {
-				if (is_mt7630(dev))
-					val = 0x70;
-				else
-					val = 0x63;
-			} else {
-				val = 0x73;
-			}
-			break;
-		case MT_RF(0, 21):
-			if (is_mt7610e(dev))
-				val = 0x10;
-			else
-				val = 0x12;
-			break;
-		case MT_RF(5, 2):
-			if (is_mt7630(dev))
-				val = 0x1d;
-			else if (is_mt7610e(dev))
-				val = 0x00;
-			else
-				val = 0x0c;
-			break;
-		default:
-			break;
-		}
-		mt76x0_rf_wr(dev, reg, val);
-	}
-}
-
-static void mt76x0_phy_rf_init(struct mt76x02_dev *dev)
-{
-	int i;
-
-	mt76x0_rf_patch_reg_array(dev, mt76x0_rf_central_tab,
-				  ARRAY_SIZE(mt76x0_rf_central_tab));
-	mt76x0_rf_patch_reg_array(dev, mt76x0_rf_2g_channel_0_tab,
-				  ARRAY_SIZE(mt76x0_rf_2g_channel_0_tab));
-	RF_RANDOM_WRITE(dev, mt76x0_rf_5g_channel_0_tab);
-	RF_RANDOM_WRITE(dev, mt76x0_rf_vga_channel_0_tab);
-
-	for (i = 0; i < ARRAY_SIZE(mt76x0_rf_bw_switch_tab); i++) {
-		const struct mt76x0_rf_switch_item *item = &mt76x0_rf_bw_switch_tab[i];
-
-		if (item->bw_band == RF_BW_20)
-			mt76x0_rf_wr(dev, item->rf_bank_reg, item->value);
-		else if (((RF_G_BAND | RF_BW_20) & item->bw_band) ==
-			  (RF_G_BAND | RF_BW_20))
-			mt76x0_rf_wr(dev, item->rf_bank_reg, item->value);
-	}
-
-	for (i = 0; i < ARRAY_SIZE(mt76x0_rf_band_switch_tab); i++) {
-		if (mt76x0_rf_band_switch_tab[i].bw_band & RF_G_BAND) {
-			mt76x0_rf_wr(dev,
-				     mt76x0_rf_band_switch_tab[i].rf_bank_reg,
-				     mt76x0_rf_band_switch_tab[i].value);
-		}
-	}
-
-	/* Frequency calibration
-	 * E1: B0.R22<6:0>: xo_cxo<6:0>
-	 * E2: B0.R21<0>: xo_cxo<0>, B0.R22<7:0>: xo_cxo<8:1>
-	 */
-	mt76x0_rf_wr(dev, MT_RF(0, 22),
-		     min_t(u8, dev->cal.rx.freq_offset, 0xbf));
-	mt76x0_rf_rr(dev, MT_RF(0, 22));
-
-	/* Reset procedure DAC during power-up:
-	 * - set B0.R73<7>
-	 * - clear B0.R73<7>
-	 * - set B0.R73<7>
-	 */
-	mt76x0_rf_set(dev, MT_RF(0, 73), BIT(7));
-	mt76x0_rf_clear(dev, MT_RF(0, 73), BIT(7));
-	mt76x0_rf_set(dev, MT_RF(0, 73), BIT(7));
-
-	/* vcocal_en: initiate VCO calibration (reset after completion)) */
-	mt76x0_rf_set(dev, MT_RF(0, 4), 0x80);
-}
-
-void mt76x0_phy_init(struct mt76x02_dev *dev)
-{
-	INIT_DELAYED_WORK(&dev->cal_work, mt76x0_phy_calibration_work);
-
-	mt76x0_phy_ant_select(dev);
-	mt76x0_phy_rf_init(dev);
-	mt76x02_phy_set_rxpath(dev);
-	mt76x02_phy_set_txdac(dev);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/phy.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/phy.h
deleted file mode 100644
index 441d655..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/phy.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * (c) Copyright 2002-2010, Ralink Technology, Inc.
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-#ifndef _MT76X0_PHY_H_
-#define _MT76X0_PHY_H_
-
-#define RF_G_BAND	0x0100
-#define RF_A_BAND	0x0200
-#define RF_A_BAND_LB	0x0400
-#define RF_A_BAND_MB	0x0800
-#define RF_A_BAND_HB	0x1000
-#define RF_A_BAND_11J	0x2000
-
-#define RF_BW_20        1
-#define RF_BW_40        2
-#define RF_BW_10        4
-#define RF_BW_80        8
-
-#define MT_RF(bank, reg)		((bank) << 16 | (reg))
-#define MT_RF_BANK(offset)		((offset) >> 16)
-#define MT_RF_REG(offset)		((offset) & 0xff)
-
-#define MT_RF_VCO_BP_CLOSE_LOOP		BIT(3)
-#define MT_RF_VCO_BP_CLOSE_LOOP_MASK	GENMASK(3, 0)
-#define MT_RF_VCO_CAL_MASK		GENMASK(2, 0)
-#define MT_RF_START_TIME		0x3
-#define MT_RF_START_TIME_MASK		GENMASK(2, 0)
-#define MT_RF_SETTLE_TIME_MASK		GENMASK(6, 4)
-
-#define MT_RF_PLL_DEN_MASK		GENMASK(4, 0)
-#define MT_RF_PLL_K_MASK		GENMASK(4, 0)
-#define MT_RF_SDM_RESET_MASK		BIT(7)
-#define MT_RF_SDM_MASH_PRBS_MASK	GENMASK(6, 2)
-#define MT_RF_SDM_BP_MASK		BIT(1)
-#define MT_RF_ISI_ISO_MASK		GENMASK(7, 6)
-#define MT_RF_PFD_DLY_MASK		GENMASK(5, 4)
-#define MT_RF_CLK_SEL_MASK		GENMASK(3, 2)
-#define MT_RF_XO_DIV_MASK		GENMASK(1, 0)
-
-struct mt76x0_bbp_switch_item {
-	u16 bw_band;
-	struct mt76_reg_pair reg_pair;
-};
-
-struct mt76x0_rf_switch_item {
-	u32 rf_bank_reg;
-	u16 bw_band;
-	u8 value;
-};
-
-struct mt76x0_freq_item {
-	u8 channel;
-	u32 band;
-	u8 pllR37;
-	u8 pllR36;
-	u8 pllR35;
-	u8 pllR34;
-	u8 pllR33;
-	u8 pllR32_b7b5;
-	u8 pllR32_b4b0; /* PLL_DEN (Denomina - 8) */
-	u8 pllR31_b7b5;
-	u8 pllR31_b4b0; /* PLL_K (Nominator *)*/
-	u8 pllR30_b7;	/* sdm_reset_n */
-	u8 pllR30_b6b2; /* sdmmash_prbs,sin */
-	u8 pllR30_b1;	/* sdm_bp */
-	u16 pll_n;	/* R30<0>, R29<7:0> (hex) */
-	u8 pllR28_b7b6; /* isi,iso */
-	u8 pllR28_b5b4;	/* pfd_dly */
-	u8 pllR28_b3b2;	/* clksel option */
-	u32 pll_sdm_k;	/* R28<1:0>, R27<7:0>, R26<7:0> (hex) SDM_k */
-	u8 pllR24_b1b0;	/* xo_div */
-};
-
-struct mt76x0_rate_pwr_item {
-	s8 mcs_power;
-	u8 rf_pa_mode;
-};
-
-struct mt76x0_rate_pwr_tab {
-	struct mt76x0_rate_pwr_item cck[4];
-	struct mt76x0_rate_pwr_item ofdm[8];
-	struct mt76x0_rate_pwr_item ht[8];
-	struct mt76x0_rate_pwr_item vht[10];
-	struct mt76x0_rate_pwr_item stbc[8];
-	struct mt76x0_rate_pwr_item mcs32;
-};
-
-#endif /* _MT76X0_PHY_H_ */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/usb.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/usb.c
deleted file mode 100644
index 0422c33..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/usb.c
+++ /dev/null
@@ -1,352 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/usb.h>
-
-#include "mt76x0.h"
-#include "mcu.h"
-#include "../mt76x02_usb.h"
-
-static struct usb_device_id mt76x0_device_table[] = {
-	{ USB_DEVICE(0x148F, 0x7610) },	/* MT7610U */
-	{ USB_DEVICE(0x13B1, 0x003E) },	/* Linksys AE6000 */
-	{ USB_DEVICE(0x0E8D, 0x7610) },	/* Sabrent NTWLAC */
-	{ USB_DEVICE(0x7392, 0xa711) },	/* Edimax 7711mac */
-	{ USB_DEVICE(0x7392, 0xb711) },	/* Edimax / Elecom  */
-	{ USB_DEVICE(0x148f, 0x761a) },	/* TP-Link TL-WDN5200 */
-	{ USB_DEVICE(0x148f, 0x760a) },	/* TP-Link unknown */
-	{ USB_DEVICE(0x0b05, 0x17d1) },	/* Asus USB-AC51 */
-	{ USB_DEVICE(0x0b05, 0x17db) },	/* Asus USB-AC50 */
-	{ USB_DEVICE(0x0df6, 0x0075) },	/* Sitecom WLA-3100 */
-	{ USB_DEVICE(0x2019, 0xab31) },	/* Planex GW-450D */
-	{ USB_DEVICE(0x2001, 0x3d02) },	/* D-LINK DWA-171 rev B1 */
-	{ USB_DEVICE(0x0586, 0x3425) },	/* Zyxel NWD6505 */
-	{ USB_DEVICE(0x07b8, 0x7610) },	/* AboCom AU7212 */
-	{ USB_DEVICE(0x04bb, 0x0951) },	/* I-O DATA WN-AC433UK */
-	{ USB_DEVICE(0x057c, 0x8502) },	/* AVM FRITZ!WLAN USB Stick AC 430 */
-	{ USB_DEVICE(0x293c, 0x5702) },	/* Comcast Xfinity KXW02AAA  */
-	{ USB_DEVICE(0x20f4, 0x806b) },	/* TRENDnet TEW-806UBH  */
-	{ USB_DEVICE(0x7392, 0xc711) }, /* Devolo Wifi ac Stick */
-	{ USB_DEVICE(0x0df6, 0x0079) }, /* Sitecom Europe B.V. ac  Stick */
-	{ USB_DEVICE(0x2357, 0x0123) }, /* TP-LINK T2UHP_US_v1 */
-	{ USB_DEVICE(0x2357, 0x010b) }, /* TP-LINK T2UHP_UN_v1 */
-	/* TP-LINK Archer T1U */
-	{ USB_DEVICE(0x2357, 0x0105), .driver_info = 1, },
-	/* MT7630U */
-	{ USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7630, 0xff, 0x2, 0xff)},
-	/* MT7650U */
-	{ USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7650, 0xff, 0x2, 0xff)},
-	{ 0, }
-};
-
-static void mt76x0_init_usb_dma(struct mt76x02_dev *dev)
-{
-	u32 val;
-
-	val = mt76_rr(dev, MT_USB_DMA_CFG);
-
-	val |= MT_USB_DMA_CFG_RX_BULK_EN |
-	       MT_USB_DMA_CFG_TX_BULK_EN;
-
-	/* disable AGGR_BULK_RX in order to receive one
-	 * frame in each rx urb and avoid copies
-	 */
-	val &= ~MT_USB_DMA_CFG_RX_BULK_AGG_EN;
-	mt76_wr(dev, MT_USB_DMA_CFG, val);
-
-	val = mt76_rr(dev, MT_COM_REG0);
-	if (val & 1)
-		dev_dbg(dev->mt76.dev, "MCU not ready\n");
-
-	val = mt76_rr(dev, MT_USB_DMA_CFG);
-
-	val |= MT_USB_DMA_CFG_RX_DROP_OR_PAD;
-	mt76_wr(dev, MT_USB_DMA_CFG, val);
-	val &= ~MT_USB_DMA_CFG_RX_DROP_OR_PAD;
-	mt76_wr(dev, MT_USB_DMA_CFG, val);
-}
-
-static void mt76x0u_cleanup(struct mt76x02_dev *dev)
-{
-	clear_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-	mt76x0_chip_onoff(dev, false, false);
-	mt76u_queues_deinit(&dev->mt76);
-}
-
-static void mt76x0u_stop(struct ieee80211_hw *hw)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	clear_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-	cancel_delayed_work_sync(&dev->cal_work);
-	cancel_delayed_work_sync(&dev->mphy.mac_work);
-	mt76u_stop_tx(&dev->mt76);
-	mt76x02u_exit_beacon_config(dev);
-
-	if (test_bit(MT76_REMOVED, &dev->mphy.state))
-		return;
-
-	if (!mt76_poll(dev, MT_USB_DMA_CFG, MT_USB_DMA_CFG_TX_BUSY, 0, 1000))
-		dev_warn(dev->mt76.dev, "TX DMA did not stop\n");
-
-	mt76x0_mac_stop(dev);
-
-	if (!mt76_poll(dev, MT_USB_DMA_CFG, MT_USB_DMA_CFG_RX_BUSY, 0, 1000))
-		dev_warn(dev->mt76.dev, "RX DMA did not stop\n");
-}
-
-static int mt76x0u_start(struct ieee80211_hw *hw)
-{
-	struct mt76x02_dev *dev = hw->priv;
-	int ret;
-
-	ret = mt76x02u_mac_start(dev);
-	if (ret)
-		return ret;
-
-	mt76x0_phy_calibrate(dev, true);
-	ieee80211_queue_delayed_work(dev->mt76.hw, &dev->mphy.mac_work,
-				     MT_MAC_WORK_INTERVAL);
-	ieee80211_queue_delayed_work(dev->mt76.hw, &dev->cal_work,
-				     MT_CALIBRATE_INTERVAL);
-	set_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-	return 0;
-}
-
-static const struct ieee80211_ops mt76x0u_ops = {
-	.tx = mt76x02_tx,
-	.start = mt76x0u_start,
-	.stop = mt76x0u_stop,
-	.add_interface = mt76x02_add_interface,
-	.remove_interface = mt76x02_remove_interface,
-	.config = mt76x0_config,
-	.configure_filter = mt76x02_configure_filter,
-	.bss_info_changed = mt76x02_bss_info_changed,
-	.sta_state = mt76_sta_state,
-	.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
-	.set_key = mt76x02_set_key,
-	.conf_tx = mt76x02_conf_tx,
-	.sw_scan_start = mt76_sw_scan,
-	.sw_scan_complete = mt76x02_sw_scan_complete,
-	.ampdu_action = mt76x02_ampdu_action,
-	.sta_rate_tbl_update = mt76x02_sta_rate_tbl_update,
-	.set_rts_threshold = mt76x02_set_rts_threshold,
-	.wake_tx_queue = mt76_wake_tx_queue,
-	.get_txpower = mt76_get_txpower,
-	.get_survey = mt76_get_survey,
-	.set_tim = mt76_set_tim,
-	.release_buffered_frames = mt76_release_buffered_frames,
-	.get_antenna = mt76_get_antenna,
-	.set_sar_specs = mt76x0_set_sar_specs,
-};
-
-static int mt76x0u_init_hardware(struct mt76x02_dev *dev, bool reset)
-{
-	int err;
-
-	mt76x0_chip_onoff(dev, true, reset);
-
-	if (!mt76x02_wait_for_mac(&dev->mt76))
-		return -ETIMEDOUT;
-
-	err = mt76x0u_mcu_init(dev);
-	if (err < 0)
-		return err;
-
-	mt76x0_init_usb_dma(dev);
-	err = mt76x0_init_hardware(dev);
-	if (err < 0)
-		return err;
-
-	mt76x02u_init_beacon_config(dev);
-
-	mt76_rmw(dev, MT_US_CYC_CFG, MT_US_CYC_CNT, 0x1e);
-	mt76_wr(dev, MT_TXOP_CTRL_CFG,
-		FIELD_PREP(MT_TXOP_TRUN_EN, 0x3f) |
-		FIELD_PREP(MT_TXOP_EXT_CCA_DLY, 0x58));
-
-	return 0;
-}
-
-static int mt76x0u_register_device(struct mt76x02_dev *dev)
-{
-	struct ieee80211_hw *hw = dev->mt76.hw;
-	struct mt76_usb *usb = &dev->mt76.usb;
-	int err;
-
-	usb->mcu.data = devm_kmalloc(dev->mt76.dev, MCU_RESP_URB_SIZE,
-				     GFP_KERNEL);
-	if (!usb->mcu.data)
-		return -ENOMEM;
-
-	err = mt76u_alloc_queues(&dev->mt76);
-	if (err < 0)
-		goto out_err;
-
-	err = mt76x0u_init_hardware(dev, true);
-	if (err < 0)
-		goto out_err;
-
-	/* check hw sg support in order to enable AMSDU */
-	hw->max_tx_fragments = dev->mt76.usb.sg_en ? MT_TX_SG_MAX_SIZE : 1;
-	err = mt76x0_register_device(dev);
-	if (err < 0)
-		goto out_err;
-
-	set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-
-	return 0;
-
-out_err:
-	mt76x0u_cleanup(dev);
-	return err;
-}
-
-static int mt76x0u_probe(struct usb_interface *usb_intf,
-			 const struct usb_device_id *id)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		.drv_flags = MT_DRV_SW_RX_AIRTIME,
-		.survey_flags = SURVEY_INFO_TIME_TX,
-		.update_survey = mt76x02_update_channel,
-		.tx_prepare_skb = mt76x02u_tx_prepare_skb,
-		.tx_complete_skb = mt76x02u_tx_complete_skb,
-		.tx_status_data = mt76x02_tx_status_data,
-		.rx_skb = mt76x02_queue_rx_skb,
-		.sta_ps = mt76x02_sta_ps,
-		.sta_add = mt76x02_sta_add,
-		.sta_remove = mt76x02_sta_remove,
-	};
-	struct usb_device *usb_dev = interface_to_usbdev(usb_intf);
-	struct mt76x02_dev *dev;
-	struct mt76_dev *mdev;
-	u32 mac_rev;
-	int ret;
-
-	mdev = mt76_alloc_device(&usb_intf->dev, sizeof(*dev), &mt76x0u_ops,
-				 &drv_ops);
-	if (!mdev)
-		return -ENOMEM;
-
-	dev = container_of(mdev, struct mt76x02_dev, mt76);
-	mutex_init(&dev->phy_mutex);
-
-	/* Quirk for Archer T1U */
-	if (id->driver_info)
-		dev->no_2ghz = true;
-
-	usb_dev = usb_get_dev(usb_dev);
-	usb_reset_device(usb_dev);
-
-	usb_set_intfdata(usb_intf, dev);
-
-	mt76x02u_init_mcu(mdev);
-	ret = mt76u_init(mdev, usb_intf);
-	if (ret)
-		goto err;
-
-	/* Disable the HW, otherwise MCU fail to initialize on hot reboot */
-	mt76x0_chip_onoff(dev, false, false);
-
-	if (!mt76x02_wait_for_mac(mdev)) {
-		ret = -ETIMEDOUT;
-		goto err;
-	}
-
-	mdev->rev = mt76_rr(dev, MT_ASIC_VERSION);
-	mac_rev = mt76_rr(dev, MT_MAC_CSR0);
-	dev_info(mdev->dev, "ASIC revision: %08x MAC revision: %08x\n",
-		 mdev->rev, mac_rev);
-	if (!is_mt76x0(dev)) {
-		ret = -ENODEV;
-		goto err;
-	}
-
-	/* Note: vendor driver skips this check for MT76X0U */
-	if (!(mt76_rr(dev, MT_EFUSE_CTRL) & MT_EFUSE_CTRL_SEL))
-		dev_warn(mdev->dev, "Warning: eFUSE not present\n");
-
-	ret = mt76x0u_register_device(dev);
-	if (ret < 0)
-		goto err;
-
-	return 0;
-
-err:
-	usb_set_intfdata(usb_intf, NULL);
-	usb_put_dev(interface_to_usbdev(usb_intf));
-	mt76u_queues_deinit(&dev->mt76);
-	mt76_free_device(&dev->mt76);
-
-	return ret;
-}
-
-static void mt76x0_disconnect(struct usb_interface *usb_intf)
-{
-	struct mt76x02_dev *dev = usb_get_intfdata(usb_intf);
-	bool initialized = test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-
-	if (!initialized)
-		return;
-
-	ieee80211_unregister_hw(dev->mt76.hw);
-	mt76x0u_cleanup(dev);
-
-	usb_set_intfdata(usb_intf, NULL);
-	usb_put_dev(interface_to_usbdev(usb_intf));
-
-	mt76_free_device(&dev->mt76);
-}
-
-static int __maybe_unused mt76x0_suspend(struct usb_interface *usb_intf,
-					 pm_message_t state)
-{
-	struct mt76x02_dev *dev = usb_get_intfdata(usb_intf);
-
-	mt76u_stop_rx(&dev->mt76);
-	clear_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-	mt76x0_chip_onoff(dev, false, false);
-
-	return 0;
-}
-
-static int __maybe_unused mt76x0_resume(struct usb_interface *usb_intf)
-{
-	struct mt76x02_dev *dev = usb_get_intfdata(usb_intf);
-	int ret;
-
-	ret = mt76u_resume_rx(&dev->mt76);
-	if (ret < 0)
-		goto err;
-
-	ret = mt76x0u_init_hardware(dev, false);
-	if (ret)
-		goto err;
-
-	return 0;
-err:
-	mt76x0u_cleanup(dev);
-	return ret;
-}
-
-MODULE_DEVICE_TABLE(usb, mt76x0_device_table);
-MODULE_FIRMWARE(MT7610E_FIRMWARE);
-MODULE_FIRMWARE(MT7610U_FIRMWARE);
-MODULE_LICENSE("GPL");
-
-static struct usb_driver mt76x0_driver = {
-	.name		= KBUILD_MODNAME,
-	.id_table	= mt76x0_device_table,
-	.probe		= mt76x0u_probe,
-	.disconnect	= mt76x0_disconnect,
-	.suspend	= mt76x0_suspend,
-	.resume		= mt76x0_resume,
-	.reset_resume	= mt76x0_resume,
-	.soft_unbind	= 1,
-	.disable_hub_initiated_lpm = 1,
-};
-module_usb_driver(mt76x0_driver);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/usb_mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/usb_mcu.c
deleted file mode 100644
index 45502fd..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x0/usb_mcu.c
+++ /dev/null
@@ -1,174 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-#include <linux/kernel.h>
-#include <linux/firmware.h>
-#include <linux/module.h>
-
-#include "mt76x0.h"
-#include "mcu.h"
-#include "../mt76x02_usb.h"
-
-#define MCU_FW_URB_MAX_PAYLOAD		0x38f8
-#define MCU_FW_URB_SIZE			(MCU_FW_URB_MAX_PAYLOAD + 12)
-
-static int
-mt76x0u_upload_firmware(struct mt76x02_dev *dev,
-			const struct mt76x02_fw_header *hdr)
-{
-	u8 *fw_payload = (u8 *)(hdr + 1);
-	u32 ilm_len, dlm_len;
-	void *ivb;
-	int err;
-
-	ivb = kmemdup(fw_payload, MT_MCU_IVB_SIZE, GFP_KERNEL);
-	if (!ivb)
-		return -ENOMEM;
-
-	ilm_len = le32_to_cpu(hdr->ilm_len) - MT_MCU_IVB_SIZE;
-	dev_dbg(dev->mt76.dev, "loading FW - ILM %u + IVB %u\n",
-		ilm_len, MT_MCU_IVB_SIZE);
-	err = mt76x02u_mcu_fw_send_data(dev, fw_payload + MT_MCU_IVB_SIZE,
-					ilm_len, MCU_FW_URB_MAX_PAYLOAD,
-					MT_MCU_IVB_SIZE);
-	if (err)
-		goto out;
-
-	dlm_len = le32_to_cpu(hdr->dlm_len);
-	dev_dbg(dev->mt76.dev, "loading FW - DLM %u\n", dlm_len);
-	err = mt76x02u_mcu_fw_send_data(dev,
-					fw_payload + le32_to_cpu(hdr->ilm_len),
-					dlm_len, MCU_FW_URB_MAX_PAYLOAD,
-					MT_MCU_DLM_OFFSET);
-	if (err)
-		goto out;
-
-	err = mt76u_vendor_request(&dev->mt76, MT_VEND_DEV_MODE,
-				   USB_DIR_OUT | USB_TYPE_VENDOR,
-				   0x12, 0, ivb, MT_MCU_IVB_SIZE);
-	if (err < 0)
-		goto out;
-
-	if (!mt76_poll_msec(dev, MT_MCU_COM_REG0, 1, 1, 1000)) {
-		dev_err(dev->mt76.dev, "Firmware failed to start\n");
-		err = -ETIMEDOUT;
-		goto out;
-	}
-
-	dev_dbg(dev->mt76.dev, "Firmware running!\n");
-
-out:
-	kfree(ivb);
-
-	return err;
-}
-
-static int mt76x0_get_firmware(struct mt76x02_dev *dev,
-			       const struct firmware **fw)
-{
-	int err;
-
-	/* try to load mt7610e fw if available
-	 * otherwise fall back to mt7610u one
-	 */
-	err = firmware_request_nowarn(fw, MT7610E_FIRMWARE, dev->mt76.dev);
-	if (err) {
-		dev_info(dev->mt76.dev, "%s not found, switching to %s",
-			 MT7610E_FIRMWARE, MT7610U_FIRMWARE);
-		return request_firmware(fw, MT7610U_FIRMWARE,
-					dev->mt76.dev);
-	}
-	return 0;
-}
-
-static int mt76x0u_load_firmware(struct mt76x02_dev *dev)
-{
-	const struct firmware *fw;
-	const struct mt76x02_fw_header *hdr;
-	int len, ret;
-	u32 val;
-
-	mt76_wr(dev, MT_USB_DMA_CFG, (MT_USB_DMA_CFG_RX_BULK_EN |
-				      MT_USB_DMA_CFG_TX_BULK_EN));
-
-	if (mt76x0_firmware_running(dev))
-		return 0;
-
-	ret = mt76x0_get_firmware(dev, &fw);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr))
-		goto err_inv_fw;
-
-	hdr = (const struct mt76x02_fw_header *)fw->data;
-
-	if (le32_to_cpu(hdr->ilm_len) <= MT_MCU_IVB_SIZE)
-		goto err_inv_fw;
-
-	len = sizeof(*hdr);
-	len += le32_to_cpu(hdr->ilm_len);
-	len += le32_to_cpu(hdr->dlm_len);
-
-	if (fw->size != len)
-		goto err_inv_fw;
-
-	val = le16_to_cpu(hdr->fw_ver);
-	dev_dbg(dev->mt76.dev,
-		"Firmware Version: %d.%d.%02d Build: %x Build time: %.16s\n",
-		(val >> 12) & 0xf, (val >> 8) & 0xf, val & 0xf,
-		le16_to_cpu(hdr->build_ver), hdr->build_time);
-
-	len = le32_to_cpu(hdr->ilm_len);
-
-	mt76_wr(dev, 0x1004, 0x2c);
-
-	mt76_set(dev, MT_USB_DMA_CFG,
-		 (MT_USB_DMA_CFG_RX_BULK_EN | MT_USB_DMA_CFG_TX_BULK_EN) |
-		 FIELD_PREP(MT_USB_DMA_CFG_RX_BULK_AGG_TOUT, 0x20));
-	mt76x02u_mcu_fw_reset(dev);
-	usleep_range(5000, 6000);
-
-	mt76_wr(dev, MT_FCE_PSE_CTRL, 1);
-
-	/* FCE tx_fs_base_ptr */
-	mt76_wr(dev, MT_TX_CPU_FROM_FCE_BASE_PTR, 0x400230);
-	/* FCE tx_fs_max_cnt */
-	mt76_wr(dev, MT_TX_CPU_FROM_FCE_MAX_COUNT, 1);
-	/* FCE pdma enable */
-	mt76_wr(dev, MT_FCE_PDMA_GLOBAL_CONF, 0x44);
-	/* FCE skip_fs_en */
-	mt76_wr(dev, MT_FCE_SKIP_FS, 3);
-
-	val = mt76_rr(dev, MT_USB_DMA_CFG);
-	val |= MT_USB_DMA_CFG_UDMA_TX_WL_DROP;
-	mt76_wr(dev, MT_USB_DMA_CFG, val);
-	val &= ~MT_USB_DMA_CFG_UDMA_TX_WL_DROP;
-	mt76_wr(dev, MT_USB_DMA_CFG, val);
-
-	ret = mt76x0u_upload_firmware(dev, hdr);
-	release_firmware(fw);
-
-	mt76_wr(dev, MT_FCE_PSE_CTRL, 1);
-
-	return ret;
-
-err_inv_fw:
-	dev_err(dev->mt76.dev, "Invalid firmware image\n");
-	release_firmware(fw);
-	return -ENOENT;
-}
-
-int mt76x0u_mcu_init(struct mt76x02_dev *dev)
-{
-	int ret;
-
-	ret = mt76x0u_load_firmware(dev);
-	if (ret < 0)
-		return ret;
-
-	set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02.h
deleted file mode 100644
index 849c264..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02.h
+++ /dev/null
@@ -1,286 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-
-#ifndef __MT76x02_H
-#define __MT76x02_H
-
-#include <linux/kfifo.h>
-
-#include "mt76.h"
-#include "mt76x02_regs.h"
-#include "mt76x02_mac.h"
-#include "mt76x02_dfs.h"
-#include "mt76x02_dma.h"
-
-#define MT76x02_TX_RING_SIZE	512
-#define MT76x02_PSD_RING_SIZE	128
-#define MT76x02_N_WCIDS 128
-#define MT_CALIBRATE_INTERVAL	HZ
-#define MT_MAC_WORK_INTERVAL	(HZ / 10)
-
-#define MT_WATCHDOG_TIME	(HZ / 10)
-#define MT_TX_HANG_TH		10
-
-#define MT_MAX_CHAINS		2
-struct mt76x02_rx_freq_cal {
-	s8 high_gain[MT_MAX_CHAINS];
-	s8 rssi_offset[MT_MAX_CHAINS];
-	s8 lna_gain;
-	u32 mcu_gain;
-	s16 temp_offset;
-	u8 freq_offset;
-};
-
-struct mt76x02_calibration {
-	struct mt76x02_rx_freq_cal rx;
-
-	u8 agc_gain_init[MT_MAX_CHAINS];
-	u8 agc_gain_cur[MT_MAX_CHAINS];
-
-	u16 false_cca;
-	s8 avg_rssi_all;
-	s8 agc_gain_adjust;
-	s8 agc_lowest_gain;
-	s8 low_gain;
-
-	s8 temp_vco;
-	s8 temp;
-
-	bool init_cal_done;
-	bool tssi_cal_done;
-	bool tssi_comp_pending;
-	bool dpd_cal_done;
-	bool channel_cal_done;
-	bool gain_init_done;
-
-	int tssi_target;
-	s8 tssi_dc;
-};
-
-struct mt76x02_beacon_ops {
-	unsigned int nslots;
-	unsigned int slot_size;
-	void (*pre_tbtt_enable)(struct mt76x02_dev *dev, bool en);
-	void (*beacon_enable)(struct mt76x02_dev *dev, bool en);
-};
-
-#define mt76x02_beacon_enable(dev, enable)	\
-	(dev)->beacon_ops->beacon_enable(dev, enable)
-#define mt76x02_pre_tbtt_enable(dev, enable)	\
-	(dev)->beacon_ops->pre_tbtt_enable(dev, enable)
-
-struct mt76x02_rate_power {
-	union {
-		struct {
-			s8 cck[4];
-			s8 ofdm[8];
-			s8 ht[16];
-			s8 vht[2];
-		};
-		s8 all[30];
-	};
-};
-
-struct mt76x02_dev {
-	union { /* must be first */
-		struct mt76_dev mt76;
-		struct mt76_phy mphy;
-	};
-
-	struct mac_address macaddr_list[8];
-
-	struct mutex phy_mutex;
-
-	u8 txdone_seq;
-	DECLARE_KFIFO_PTR(txstatus_fifo, struct mt76x02_tx_status);
-	spinlock_t txstatus_fifo_lock;
-	u32 tx_airtime;
-	u32 ampdu_ref;
-
-	struct sk_buff *rx_head;
-
-	struct delayed_work cal_work;
-	struct delayed_work wdt_work;
-
-	struct hrtimer pre_tbtt_timer;
-	struct work_struct pre_tbtt_work;
-
-	const struct mt76x02_beacon_ops *beacon_ops;
-
-	u8 beacon_data_count;
-
-	u8 tbtt_count;
-
-	u32 tx_hang_reset;
-	u8 tx_hang_check[4];
-	u8 beacon_hang_check;
-	u8 mcu_timeout;
-
-	struct mt76x02_rate_power rate_power;
-
-	struct mt76x02_calibration cal;
-
-	int txpower_conf;
-	s8 target_power;
-	s8 target_power_delta[2];
-	bool enable_tpc;
-
-	bool no_2ghz;
-
-	s16 coverage_class;
-	u8 slottime;
-
-	struct mt76x02_dfs_pattern_detector dfs_pd;
-
-	/* edcca monitor */
-	unsigned long ed_trigger_timeout;
-	bool ed_tx_blocked;
-	bool ed_monitor;
-	u8 ed_monitor_enabled;
-	u8 ed_monitor_learning;
-	u8 ed_trigger;
-	u8 ed_silent;
-	ktime_t ed_time;
-};
-
-extern struct ieee80211_rate mt76x02_rates[12];
-
-int mt76x02_init_device(struct mt76x02_dev *dev);
-void mt76x02_configure_filter(struct ieee80211_hw *hw,
-			      unsigned int changed_flags,
-			      unsigned int *total_flags, u64 multicast);
-int mt76x02_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		    struct ieee80211_sta *sta);
-void mt76x02_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			struct ieee80211_sta *sta);
-
-void mt76x02_config_mac_addr_list(struct mt76x02_dev *dev);
-
-int mt76x02_add_interface(struct ieee80211_hw *hw,
-			  struct ieee80211_vif *vif);
-void mt76x02_remove_interface(struct ieee80211_hw *hw,
-			      struct ieee80211_vif *vif);
-
-int mt76x02_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			 struct ieee80211_ampdu_params *params);
-int mt76x02_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
-		    struct ieee80211_vif *vif, struct ieee80211_sta *sta,
-		    struct ieee80211_key_conf *key);
-int mt76x02_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		    u16 queue, const struct ieee80211_tx_queue_params *params);
-void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
-				 struct ieee80211_vif *vif,
-				 struct ieee80211_sta *sta);
-s8 mt76x02_tx_get_max_txpwr_adj(struct mt76x02_dev *dev,
-				const struct ieee80211_tx_rate *rate);
-s8 mt76x02_tx_get_txpwr_adj(struct mt76x02_dev *dev, s8 txpwr,
-			    s8 max_txpwr_adj);
-void mt76x02_wdt_work(struct work_struct *work);
-void mt76x02_tx_set_txpwr_auto(struct mt76x02_dev *dev, s8 txpwr);
-void mt76x02_set_tx_ackto(struct mt76x02_dev *dev);
-void mt76x02_set_coverage_class(struct ieee80211_hw *hw,
-				s16 coverage_class);
-int mt76x02_set_rts_threshold(struct ieee80211_hw *hw, u32 val);
-void mt76x02_remove_hdr_pad(struct sk_buff *skb, int len);
-bool mt76x02_tx_status_data(struct mt76_dev *mdev, u8 *update);
-void mt76x02_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			  struct sk_buff *skb);
-void mt76x02_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q);
-irqreturn_t mt76x02_irq_handler(int irq, void *dev_instance);
-void mt76x02_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
-		struct sk_buff *skb);
-int mt76x02_tx_prepare_skb(struct mt76_dev *mdev, void *txwi,
-			   enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			   struct ieee80211_sta *sta,
-			   struct mt76_tx_info *tx_info);
-void mt76x02_sw_scan_complete(struct ieee80211_hw *hw,
-			      struct ieee80211_vif *vif);
-void mt76x02_sta_ps(struct mt76_dev *dev, struct ieee80211_sta *sta, bool ps);
-void mt76x02_bss_info_changed(struct ieee80211_hw *hw,
-			      struct ieee80211_vif *vif,
-			      struct ieee80211_bss_conf *info, u32 changed);
-void mt76x02_reconfig_complete(struct ieee80211_hw *hw,
-			       enum ieee80211_reconfig_type reconfig_type);
-
-struct beacon_bc_data {
-	struct mt76x02_dev *dev;
-	struct sk_buff_head q;
-	struct sk_buff *tail[8];
-};
-
-void mt76x02_init_beacon_config(struct mt76x02_dev *dev);
-void mt76x02e_init_beacon_config(struct mt76x02_dev *dev);
-void mt76x02_resync_beacon_timer(struct mt76x02_dev *dev);
-void mt76x02_update_beacon_iter(void *priv, u8 *mac, struct ieee80211_vif *vif);
-void mt76x02_enqueue_buffered_bc(struct mt76x02_dev *dev,
-				 struct beacon_bc_data *data,
-				 int max_nframes);
-
-void mt76x02_mac_start(struct mt76x02_dev *dev);
-
-void mt76x02_init_debugfs(struct mt76x02_dev *dev);
-
-static inline bool is_mt76x0(struct mt76x02_dev *dev)
-{
-	return mt76_chip(&dev->mt76) == 0x7610 ||
-	       mt76_chip(&dev->mt76) == 0x7630 ||
-	       mt76_chip(&dev->mt76) == 0x7650;
-}
-
-static inline bool is_mt76x2(struct mt76x02_dev *dev)
-{
-	return mt76_chip(&dev->mt76) == 0x7612 ||
-	       mt76_chip(&dev->mt76) == 0x7632 ||
-	       mt76_chip(&dev->mt76) == 0x7662 ||
-	       mt76_chip(&dev->mt76) == 0x7602;
-}
-
-static inline void mt76x02_irq_enable(struct mt76x02_dev *dev, u32 mask)
-{
-	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, 0, mask);
-}
-
-static inline void mt76x02_irq_disable(struct mt76x02_dev *dev, u32 mask)
-{
-	mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, mask, 0);
-}
-
-static inline bool
-mt76x02_wait_for_txrx_idle(struct mt76_dev *dev)
-{
-	return __mt76_poll_msec(dev, MT_MAC_STATUS,
-				MT_MAC_STATUS_TX | MT_MAC_STATUS_RX,
-				0, 100);
-}
-
-static inline struct mt76x02_sta *
-mt76x02_rx_get_sta(struct mt76_dev *dev, u8 idx)
-{
-	struct mt76_wcid *wcid;
-
-	if (idx >= MT76x02_N_WCIDS)
-		return NULL;
-
-	wcid = rcu_dereference(dev->wcid[idx]);
-	if (!wcid)
-		return NULL;
-
-	return container_of(wcid, struct mt76x02_sta, wcid);
-}
-
-static inline struct mt76_wcid *
-mt76x02_rx_get_sta_wcid(struct mt76x02_sta *sta, bool unicast)
-{
-	if (!sta)
-		return NULL;
-
-	if (unicast)
-		return &sta->wcid;
-	else
-		return &sta->vif->group_wcid;
-}
-
-#endif /* __MT76x02_H */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_beacon.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_beacon.c
deleted file mode 100644
index 67844e2..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_beacon.c
+++ /dev/null
@@ -1,217 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-
-#include "mt76x02.h"
-
-static void mt76x02_set_beacon_offsets(struct mt76x02_dev *dev)
-{
-	u32 regs[4] = {};
-	u16 val;
-	int i;
-
-	for (i = 0; i < dev->beacon_ops->nslots; i++) {
-		val = i * dev->beacon_ops->slot_size;
-		regs[i / 4] |= (val / 64) << (8 * (i % 4));
-	}
-
-	for (i = 0; i < 4; i++)
-		mt76_wr(dev, MT_BCN_OFFSET(i), regs[i]);
-}
-
-static int
-mt76x02_write_beacon(struct mt76x02_dev *dev, int offset, struct sk_buff *skb)
-{
-	int beacon_len = dev->beacon_ops->slot_size;
-
-	if (WARN_ON_ONCE(beacon_len < skb->len + sizeof(struct mt76x02_txwi)))
-		return -ENOSPC;
-
-	/* USB devices already reserve enough skb headroom for txwi's. This
-	 * helps to save slow copies over USB.
-	 */
-	if (mt76_is_usb(&dev->mt76)) {
-		struct mt76x02_txwi *txwi;
-
-		txwi = (struct mt76x02_txwi *)(skb->data - sizeof(*txwi));
-		mt76x02_mac_write_txwi(dev, txwi, skb, NULL, NULL, skb->len);
-		skb_push(skb, sizeof(*txwi));
-	} else {
-		struct mt76x02_txwi txwi;
-
-		mt76x02_mac_write_txwi(dev, &txwi, skb, NULL, NULL, skb->len);
-		mt76_wr_copy(dev, offset, &txwi, sizeof(txwi));
-		offset += sizeof(txwi);
-	}
-
-	mt76_wr_copy(dev, offset, skb->data, skb->len);
-	return 0;
-}
-
-void mt76x02_mac_set_beacon(struct mt76x02_dev *dev,
-			    struct sk_buff *skb)
-{
-	int bcn_len = dev->beacon_ops->slot_size;
-	int bcn_addr = MT_BEACON_BASE + (bcn_len * dev->beacon_data_count);
-
-	if (!mt76x02_write_beacon(dev, bcn_addr, skb)) {
-		if (!dev->beacon_data_count)
-			dev->beacon_hang_check++;
-		dev->beacon_data_count++;
-	}
-	dev_kfree_skb(skb);
-}
-EXPORT_SYMBOL_GPL(mt76x02_mac_set_beacon);
-
-void mt76x02_mac_set_beacon_enable(struct mt76x02_dev *dev,
-				   struct ieee80211_vif *vif, bool enable)
-{
-	struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
-	u8 old_mask = dev->mt76.beacon_mask;
-
-	mt76x02_pre_tbtt_enable(dev, false);
-
-	if (!dev->mt76.beacon_mask)
-		dev->tbtt_count = 0;
-
-	dev->beacon_hang_check = 0;
-	if (enable) {
-		dev->mt76.beacon_mask |= BIT(mvif->idx);
-	} else {
-		dev->mt76.beacon_mask &= ~BIT(mvif->idx);
-	}
-
-	if (!!old_mask == !!dev->mt76.beacon_mask)
-		goto out;
-
-	if (dev->mt76.beacon_mask)
-		mt76_set(dev, MT_BEACON_TIME_CFG,
-			 MT_BEACON_TIME_CFG_BEACON_TX |
-			 MT_BEACON_TIME_CFG_TBTT_EN |
-			 MT_BEACON_TIME_CFG_TIMER_EN);
-	else
-		mt76_clear(dev, MT_BEACON_TIME_CFG,
-			   MT_BEACON_TIME_CFG_BEACON_TX |
-			   MT_BEACON_TIME_CFG_TBTT_EN |
-			   MT_BEACON_TIME_CFG_TIMER_EN);
-	mt76x02_beacon_enable(dev, !!dev->mt76.beacon_mask);
-
-out:
-	mt76x02_pre_tbtt_enable(dev, true);
-}
-
-void
-mt76x02_resync_beacon_timer(struct mt76x02_dev *dev)
-{
-	u32 timer_val = dev->mt76.beacon_int << 4;
-
-	dev->tbtt_count++;
-
-	/*
-	 * Beacon timer drifts by 1us every tick, the timer is configured
-	 * in 1/16 TU (64us) units.
-	 */
-	if (dev->tbtt_count < 63)
-		return;
-
-	/*
-	 * The updated beacon interval takes effect after two TBTT, because
-	 * at this point the original interval has already been loaded into
-	 * the next TBTT_TIMER value
-	 */
-	if (dev->tbtt_count == 63)
-		timer_val -= 1;
-
-	mt76_rmw_field(dev, MT_BEACON_TIME_CFG,
-		       MT_BEACON_TIME_CFG_INTVAL, timer_val);
-
-	if (dev->tbtt_count >= 64)
-		dev->tbtt_count = 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_resync_beacon_timer);
-
-void
-mt76x02_update_beacon_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	struct mt76x02_dev *dev = (struct mt76x02_dev *)priv;
-	struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
-	struct sk_buff *skb = NULL;
-
-	if (!(dev->mt76.beacon_mask & BIT(mvif->idx)))
-		return;
-
-	skb = ieee80211_beacon_get(mt76_hw(dev), vif);
-	if (!skb)
-		return;
-
-	mt76x02_mac_set_beacon(dev, skb);
-}
-EXPORT_SYMBOL_GPL(mt76x02_update_beacon_iter);
-
-static void
-mt76x02_add_buffered_bc(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	struct beacon_bc_data *data = priv;
-	struct mt76x02_dev *dev = data->dev;
-	struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
-	struct ieee80211_tx_info *info;
-	struct sk_buff *skb;
-
-	if (!(dev->mt76.beacon_mask & BIT(mvif->idx)))
-		return;
-
-	skb = ieee80211_get_buffered_bc(mt76_hw(dev), vif);
-	if (!skb)
-		return;
-
-	info = IEEE80211_SKB_CB(skb);
-	info->control.vif = vif;
-	info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ;
-	mt76_skb_set_moredata(skb, true);
-	__skb_queue_tail(&data->q, skb);
-	data->tail[mvif->idx] = skb;
-}
-
-void
-mt76x02_enqueue_buffered_bc(struct mt76x02_dev *dev,
-			    struct beacon_bc_data *data,
-			    int max_nframes)
-{
-	int i, nframes;
-
-	data->dev = dev;
-	__skb_queue_head_init(&data->q);
-
-	do {
-		nframes = skb_queue_len(&data->q);
-		ieee80211_iterate_active_interfaces_atomic(mt76_hw(dev),
-			IEEE80211_IFACE_ITER_RESUME_ALL,
-			mt76x02_add_buffered_bc, data);
-	} while (nframes != skb_queue_len(&data->q) &&
-		 skb_queue_len(&data->q) < max_nframes);
-
-	if (!skb_queue_len(&data->q))
-		return;
-
-	for (i = 0; i < ARRAY_SIZE(data->tail); i++) {
-		if (!data->tail[i])
-			continue;
-		mt76_skb_set_moredata(data->tail[i], false);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76x02_enqueue_buffered_bc);
-
-void mt76x02_init_beacon_config(struct mt76x02_dev *dev)
-{
-	mt76_clear(dev, MT_BEACON_TIME_CFG, (MT_BEACON_TIME_CFG_TIMER_EN |
-					     MT_BEACON_TIME_CFG_TBTT_EN |
-					     MT_BEACON_TIME_CFG_BEACON_TX));
-	mt76_set(dev, MT_BEACON_TIME_CFG, MT_BEACON_TIME_CFG_SYNC_MODE);
-	mt76_wr(dev, MT_BCN_BYPASS_MASK, 0xffff);
-	mt76x02_set_beacon_offsets(dev);
-}
-EXPORT_SYMBOL_GPL(mt76x02_init_beacon_config);
-
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_debugfs.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_debugfs.c
deleted file mode 100644
index 981ac8e..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_debugfs.c
+++ /dev/null
@@ -1,157 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/debugfs.h>
-#include "mt76x02.h"
-
-static int
-mt76x02_ampdu_stat_show(struct seq_file *file, void *data)
-{
-	struct mt76x02_dev *dev = file->private;
-	int i, j;
-
-	for (i = 0; i < 4; i++) {
-		seq_puts(file, "Length: ");
-		for (j = 0; j < 8; j++)
-			seq_printf(file, "%8d | ", i * 8 + j + 1);
-		seq_puts(file, "\n");
-		seq_puts(file, "Count:  ");
-		for (j = 0; j < 8; j++)
-			seq_printf(file, "%8d | ",
-				   dev->mt76.aggr_stats[i * 8 + j]);
-		seq_puts(file, "\n");
-		seq_puts(file, "--------");
-		for (j = 0; j < 8; j++)
-			seq_puts(file, "-----------");
-		seq_puts(file, "\n");
-	}
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt76x02_ampdu_stat);
-
-static int read_txpower(struct seq_file *file, void *data)
-{
-	struct mt76x02_dev *dev = dev_get_drvdata(file->private);
-
-	seq_printf(file, "Target power: %d\n", dev->target_power);
-
-	mt76_seq_puts_array(file, "Delta", dev->target_power_delta,
-			    ARRAY_SIZE(dev->target_power_delta));
-	return 0;
-}
-
-static int
-mt76x02_dfs_stat_show(struct seq_file *file, void *data)
-{
-	struct mt76x02_dev *dev = file->private;
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-	int i;
-
-	seq_printf(file, "allocated sequences:\t%d\n",
-		   dfs_pd->seq_stats.seq_pool_len);
-	seq_printf(file, "used sequences:\t\t%d\n",
-		   dfs_pd->seq_stats.seq_len);
-	seq_puts(file, "\n");
-
-	for (i = 0; i < MT_DFS_NUM_ENGINES; i++) {
-		seq_printf(file, "engine: %d\n", i);
-		seq_printf(file, "  hw pattern detected:\t%d\n",
-			   dfs_pd->stats[i].hw_pattern);
-		seq_printf(file, "  hw pulse discarded:\t%d\n",
-			   dfs_pd->stats[i].hw_pulse_discarded);
-		seq_printf(file, "  sw pattern detected:\t%d\n",
-			   dfs_pd->stats[i].sw_pattern);
-	}
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt76x02_dfs_stat);
-
-static int read_agc(struct seq_file *file, void *data)
-{
-	struct mt76x02_dev *dev = dev_get_drvdata(file->private);
-
-	seq_printf(file, "avg_rssi: %d\n", dev->cal.avg_rssi_all);
-	seq_printf(file, "low_gain: %d\n", dev->cal.low_gain);
-	seq_printf(file, "false_cca: %d\n", dev->cal.false_cca);
-	seq_printf(file, "agc_gain_adjust: %d\n", dev->cal.agc_gain_adjust);
-
-	return 0;
-}
-
-static int
-mt76_edcca_set(void *data, u64 val)
-{
-	struct mt76x02_dev *dev = data;
-	enum nl80211_dfs_regions region = dev->mt76.region;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	dev->ed_monitor_enabled = !!val;
-	dev->ed_monitor = dev->ed_monitor_enabled &&
-			  region == NL80211_DFS_ETSI;
-	mt76x02_edcca_init(dev);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-static int
-mt76_edcca_get(void *data, u64 *val)
-{
-	struct mt76x02_dev *dev = data;
-
-	*val = dev->ed_monitor_enabled;
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_edcca, mt76_edcca_get, mt76_edcca_set,
-			 "%lld\n");
-
-static int mt76x02_read_rate_txpower(struct seq_file *s, void *data)
-{
-	struct mt76x02_dev *dev = dev_get_drvdata(s->private);
-
-	mt76_seq_puts_array(s, "CCK", dev->rate_power.cck,
-			    ARRAY_SIZE(dev->rate_power.cck));
-	mt76_seq_puts_array(s, "OFDM", dev->rate_power.ofdm,
-			    ARRAY_SIZE(dev->rate_power.ofdm));
-	mt76_seq_puts_array(s, "HT", dev->rate_power.ht,
-			    ARRAY_SIZE(dev->rate_power.ht));
-	mt76_seq_puts_array(s, "VHT", dev->rate_power.vht,
-			    ARRAY_SIZE(dev->rate_power.vht));
-	return 0;
-}
-
-void mt76x02_init_debugfs(struct mt76x02_dev *dev)
-{
-	struct dentry *dir;
-
-	dir = mt76_register_debugfs(&dev->mt76);
-	if (!dir)
-		return;
-
-	debugfs_create_devm_seqfile(dev->mt76.dev, "xmit-queues", dir,
-				    mt76_queues_read);
-	debugfs_create_u8("temperature", 0400, dir, &dev->cal.temp);
-	debugfs_create_bool("tpc", 0600, dir, &dev->enable_tpc);
-
-	debugfs_create_file("edcca", 0600, dir, dev, &fops_edcca);
-	debugfs_create_file("ampdu_stat", 0400, dir, dev, &mt76x02_ampdu_stat_fops);
-	debugfs_create_file("dfs_stats", 0400, dir, dev, &mt76x02_dfs_stat_fops);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "txpower", dir,
-				    read_txpower);
-
-	debugfs_create_devm_seqfile(dev->mt76.dev, "rate_txpower", dir,
-				    mt76x02_read_rate_txpower);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "agc", dir, read_agc);
-
-	debugfs_create_u32("tx_hang_reset", 0400, dir, &dev->tx_hang_reset);
-}
-EXPORT_SYMBOL_GPL(mt76x02_init_debugfs);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_dfs.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_dfs.c
deleted file mode 100644
index 024a5c0..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_dfs.c
+++ /dev/null
@@ -1,892 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include "mt76x02.h"
-
-#define RADAR_SPEC(m, len, el, eh, wl, wh,		\
-		   w_tolerance, tl, th, t_tolerance,	\
-		   bl, bh, event_exp, power_jmp)	\
-{							\
-	.mode = m,					\
-	.avg_len = len,					\
-	.e_low = el,					\
-	.e_high = eh,					\
-	.w_low = wl,					\
-	.w_high = wh,					\
-	.w_margin = w_tolerance,			\
-	.t_low = tl,					\
-	.t_high = th,					\
-	.t_margin = t_tolerance,			\
-	.b_low = bl,					\
-	.b_high = bh,					\
-	.event_expiration = event_exp,			\
-	.pwr_jmp = power_jmp				\
-}
-
-static const struct mt76x02_radar_specs etsi_radar_specs[] = {
-	/* 20MHz */
-	RADAR_SPEC(0, 8, 2, 15, 106, 150, 10, 4900, 100096, 10, 0,
-		   0x7fffffff, 0x155cc0, 0x19cc),
-	RADAR_SPEC(0, 40, 4, 59, 96, 380, 150, 4900, 100096, 40, 0,
-		   0x7fffffff, 0x155cc0, 0x19cc),
-	RADAR_SPEC(3, 60, 20, 46, 300, 640, 80, 4900, 10100, 80, 0,
-		   0x7fffffff, 0x155cc0, 0x19dd),
-	RADAR_SPEC(8, 8, 2, 9, 106, 150, 32, 4900, 296704, 32, 0,
-		   0x7fffffff, 0x2191c0, 0x15cc),
-	/* 40MHz */
-	RADAR_SPEC(0, 8, 2, 15, 106, 150, 10, 4900, 100096, 10, 0,
-		   0x7fffffff, 0x155cc0, 0x19cc),
-	RADAR_SPEC(0, 40, 4, 59, 96, 380, 150, 4900, 100096, 40, 0,
-		   0x7fffffff, 0x155cc0, 0x19cc),
-	RADAR_SPEC(3, 60, 20, 46, 300, 640, 80, 4900, 10100, 80, 0,
-		   0x7fffffff, 0x155cc0, 0x19dd),
-	RADAR_SPEC(8, 8, 2, 9, 106, 150, 32, 4900, 296704, 32, 0,
-		   0x7fffffff, 0x2191c0, 0x15cc),
-	/* 80MHz */
-	RADAR_SPEC(0, 8, 2, 15, 106, 150, 10, 4900, 100096, 10, 0,
-		   0x7fffffff, 0x155cc0, 0x19cc),
-	RADAR_SPEC(0, 40, 4, 59, 96, 380, 150, 4900, 100096, 40, 0,
-		   0x7fffffff, 0x155cc0, 0x19cc),
-	RADAR_SPEC(3, 60, 20, 46, 300, 640, 80, 4900, 10100, 80, 0,
-		   0x7fffffff, 0x155cc0, 0x19dd),
-	RADAR_SPEC(8, 8, 2, 9, 106, 150, 32, 4900, 296704, 32, 0,
-		   0x7fffffff, 0x2191c0, 0x15cc)
-};
-
-static const struct mt76x02_radar_specs fcc_radar_specs[] = {
-	/* 20MHz */
-	RADAR_SPEC(0, 8, 2, 12, 106, 150, 5, 2900, 80100, 5, 0,
-		   0x7fffffff, 0xfe808, 0x13dc),
-	RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
-		   0x7fffffff, 0xfe808, 0x19dd),
-	RADAR_SPEC(0, 40, 4, 54, 96, 480, 150, 2900, 80100, 40, 0,
-		   0x7fffffff, 0xfe808, 0x12cc),
-	RADAR_SPEC(2, 60, 15, 63, 640, 2080, 32, 19600, 40200, 32, 0,
-		   0x3938700, 0x57bcf00, 0x1289),
-	/* 40MHz */
-	RADAR_SPEC(0, 8, 2, 12, 106, 150, 5, 2900, 80100, 5, 0,
-		   0x7fffffff, 0xfe808, 0x13dc),
-	RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
-		   0x7fffffff, 0xfe808, 0x19dd),
-	RADAR_SPEC(0, 40, 4, 54, 96, 480, 150, 2900, 80100, 40, 0,
-		   0x7fffffff, 0xfe808, 0x12cc),
-	RADAR_SPEC(2, 60, 15, 63, 640, 2080, 32, 19600, 40200, 32, 0,
-		   0x3938700, 0x57bcf00, 0x1289),
-	/* 80MHz */
-	RADAR_SPEC(0, 8, 2, 14, 106, 150, 15, 2900, 80100, 15, 0,
-		   0x7fffffff, 0xfe808, 0x16cc),
-	RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
-		   0x7fffffff, 0xfe808, 0x19dd),
-	RADAR_SPEC(0, 40, 4, 54, 96, 480, 150, 2900, 80100, 40, 0,
-		   0x7fffffff, 0xfe808, 0x12cc),
-	RADAR_SPEC(2, 60, 15, 63, 640, 2080, 32, 19600, 40200, 32, 0,
-		   0x3938700, 0x57bcf00, 0x1289)
-};
-
-static const struct mt76x02_radar_specs jp_w56_radar_specs[] = {
-	/* 20MHz */
-	RADAR_SPEC(0, 8, 2, 7, 106, 150, 5, 2900, 80100, 5, 0,
-		   0x7fffffff, 0x14c080, 0x13dc),
-	RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
-		   0x7fffffff, 0x14c080, 0x19dd),
-	RADAR_SPEC(0, 40, 4, 44, 96, 480, 150, 2900, 80100, 40, 0,
-		   0x7fffffff, 0x14c080, 0x12cc),
-	RADAR_SPEC(2, 60, 15, 48, 940, 2080, 32, 19600, 40200, 32, 0,
-		   0x3938700, 0X57bcf00, 0x1289),
-	/* 40MHz */
-	RADAR_SPEC(0, 8, 2, 7, 106, 150, 5, 2900, 80100, 5, 0,
-		   0x7fffffff, 0x14c080, 0x13dc),
-	RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
-		   0x7fffffff, 0x14c080, 0x19dd),
-	RADAR_SPEC(0, 40, 4, 44, 96, 480, 150, 2900, 80100, 40, 0,
-		   0x7fffffff, 0x14c080, 0x12cc),
-	RADAR_SPEC(2, 60, 15, 48, 940, 2080, 32, 19600, 40200, 32, 0,
-		   0x3938700, 0X57bcf00, 0x1289),
-	/* 80MHz */
-	RADAR_SPEC(0, 8, 2, 9, 106, 150, 15, 2900, 80100, 15, 0,
-		   0x7fffffff, 0x14c080, 0x16cc),
-	RADAR_SPEC(0, 8, 2, 7, 106, 140, 5, 27600, 27900, 5, 0,
-		   0x7fffffff, 0x14c080, 0x19dd),
-	RADAR_SPEC(0, 40, 4, 44, 96, 480, 150, 2900, 80100, 40, 0,
-		   0x7fffffff, 0x14c080, 0x12cc),
-	RADAR_SPEC(2, 60, 15, 48, 940, 2080, 32, 19600, 40200, 32, 0,
-		   0x3938700, 0X57bcf00, 0x1289)
-};
-
-static const struct mt76x02_radar_specs jp_w53_radar_specs[] = {
-	/* 20MHz */
-	RADAR_SPEC(0, 8, 2, 9, 106, 150, 20, 28400, 77000, 20, 0,
-		   0x7fffffff, 0x14c080, 0x16cc),
-	{ 0 },
-	RADAR_SPEC(0, 40, 4, 44, 96, 200, 150, 28400, 77000, 60, 0,
-		   0x7fffffff, 0x14c080, 0x16cc),
-	{ 0 },
-	/* 40MHz */
-	RADAR_SPEC(0, 8, 2, 9, 106, 150, 20, 28400, 77000, 20, 0,
-		   0x7fffffff, 0x14c080, 0x16cc),
-	{ 0 },
-	RADAR_SPEC(0, 40, 4, 44, 96, 200, 150, 28400, 77000, 60, 0,
-		   0x7fffffff, 0x14c080, 0x16cc),
-	{ 0 },
-	/* 80MHz */
-	RADAR_SPEC(0, 8, 2, 9, 106, 150, 20, 28400, 77000, 20, 0,
-		   0x7fffffff, 0x14c080, 0x16cc),
-	{ 0 },
-	RADAR_SPEC(0, 40, 4, 44, 96, 200, 150, 28400, 77000, 60, 0,
-		   0x7fffffff, 0x14c080, 0x16cc),
-	{ 0 }
-};
-
-static void
-mt76x02_dfs_set_capture_mode_ctrl(struct mt76x02_dev *dev, u8 enable)
-{
-	u32 data;
-
-	data = (1 << 1) | enable;
-	mt76_wr(dev, MT_BBP(DFS, 36), data);
-}
-
-static void mt76x02_dfs_seq_pool_put(struct mt76x02_dev *dev,
-				     struct mt76x02_dfs_sequence *seq)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-
-	list_add(&seq->head, &dfs_pd->seq_pool);
-
-	dfs_pd->seq_stats.seq_pool_len++;
-	dfs_pd->seq_stats.seq_len--;
-}
-
-static struct mt76x02_dfs_sequence *
-mt76x02_dfs_seq_pool_get(struct mt76x02_dev *dev)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-	struct mt76x02_dfs_sequence *seq;
-
-	if (list_empty(&dfs_pd->seq_pool)) {
-		seq = devm_kzalloc(dev->mt76.dev, sizeof(*seq), GFP_ATOMIC);
-	} else {
-		seq = list_first_entry(&dfs_pd->seq_pool,
-				       struct mt76x02_dfs_sequence,
-				       head);
-		list_del(&seq->head);
-		dfs_pd->seq_stats.seq_pool_len--;
-	}
-	if (seq)
-		dfs_pd->seq_stats.seq_len++;
-
-	return seq;
-}
-
-static int mt76x02_dfs_get_multiple(int val, int frac, int margin)
-{
-	int remainder, factor;
-
-	if (!frac)
-		return 0;
-
-	if (abs(val - frac) <= margin)
-		return 1;
-
-	factor = val / frac;
-	remainder = val % frac;
-
-	if (remainder > margin) {
-		if ((frac - remainder) <= margin)
-			factor++;
-		else
-			factor = 0;
-	}
-	return factor;
-}
-
-static void mt76x02_dfs_detector_reset(struct mt76x02_dev *dev)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-	struct mt76x02_dfs_sequence *seq, *tmp_seq;
-	int i;
-
-	/* reset hw detector */
-	mt76_wr(dev, MT_BBP(DFS, 1), 0xf);
-
-	/* reset sw detector */
-	for (i = 0; i < ARRAY_SIZE(dfs_pd->event_rb); i++) {
-		dfs_pd->event_rb[i].h_rb = 0;
-		dfs_pd->event_rb[i].t_rb = 0;
-	}
-
-	list_for_each_entry_safe(seq, tmp_seq, &dfs_pd->sequences, head) {
-		list_del_init(&seq->head);
-		mt76x02_dfs_seq_pool_put(dev, seq);
-	}
-}
-
-static bool mt76x02_dfs_check_chirp(struct mt76x02_dev *dev)
-{
-	bool ret = false;
-	u32 current_ts, delta_ts;
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-
-	current_ts = mt76_rr(dev, MT_PBF_LIFE_TIMER);
-	delta_ts = current_ts - dfs_pd->chirp_pulse_ts;
-	dfs_pd->chirp_pulse_ts = current_ts;
-
-	/* 12 sec */
-	if (delta_ts <= (12 * (1 << 20))) {
-		if (++dfs_pd->chirp_pulse_cnt > 8)
-			ret = true;
-	} else {
-		dfs_pd->chirp_pulse_cnt = 1;
-	}
-
-	return ret;
-}
-
-static void mt76x02_dfs_get_hw_pulse(struct mt76x02_dev *dev,
-				     struct mt76x02_dfs_hw_pulse *pulse)
-{
-	u32 data;
-
-	/* select channel */
-	data = (MT_DFS_CH_EN << 16) | pulse->engine;
-	mt76_wr(dev, MT_BBP(DFS, 0), data);
-
-	/* reported period */
-	pulse->period = mt76_rr(dev, MT_BBP(DFS, 19));
-
-	/* reported width */
-	pulse->w1 = mt76_rr(dev, MT_BBP(DFS, 20));
-	pulse->w2 = mt76_rr(dev, MT_BBP(DFS, 23));
-
-	/* reported burst number */
-	pulse->burst = mt76_rr(dev, MT_BBP(DFS, 22));
-}
-
-static bool mt76x02_dfs_check_hw_pulse(struct mt76x02_dev *dev,
-				       struct mt76x02_dfs_hw_pulse *pulse)
-{
-	bool ret = false;
-
-	if (!pulse->period || !pulse->w1)
-		return false;
-
-	switch (dev->mt76.region) {
-	case NL80211_DFS_FCC:
-		if (pulse->engine > 3)
-			break;
-
-		if (pulse->engine == 3) {
-			ret = mt76x02_dfs_check_chirp(dev);
-			break;
-		}
-
-		/* check short pulse*/
-		if (pulse->w1 < 120)
-			ret = (pulse->period >= 2900 &&
-			       (pulse->period <= 4700 ||
-				pulse->period >= 6400) &&
-			       (pulse->period <= 6800 ||
-				pulse->period >= 10200) &&
-			       pulse->period <= 61600);
-		else if (pulse->w1 < 130) /* 120 - 130 */
-			ret = (pulse->period >= 2900 &&
-			       pulse->period <= 61600);
-		else
-			ret = (pulse->period >= 3500 &&
-			       pulse->period <= 10100);
-		break;
-	case NL80211_DFS_ETSI:
-		if (pulse->engine >= 3)
-			break;
-
-		ret = (pulse->period >= 4900 &&
-		       (pulse->period <= 10200 ||
-			pulse->period >= 12400) &&
-		       pulse->period <= 100100);
-		break;
-	case NL80211_DFS_JP:
-		if (dev->mphy.chandef.chan->center_freq >= 5250 &&
-		    dev->mphy.chandef.chan->center_freq <= 5350) {
-			/* JPW53 */
-			if (pulse->w1 <= 130)
-				ret = (pulse->period >= 28360 &&
-				       (pulse->period <= 28700 ||
-					pulse->period >= 76900) &&
-				       pulse->period <= 76940);
-			break;
-		}
-
-		if (pulse->engine > 3)
-			break;
-
-		if (pulse->engine == 3) {
-			ret = mt76x02_dfs_check_chirp(dev);
-			break;
-		}
-
-		/* check short pulse*/
-		if (pulse->w1 < 120)
-			ret = (pulse->period >= 2900 &&
-			       (pulse->period <= 4700 ||
-				pulse->period >= 6400) &&
-			       (pulse->period <= 6800 ||
-				pulse->period >= 27560) &&
-			       (pulse->period <= 27960 ||
-				pulse->period >= 28360) &&
-			       (pulse->period <= 28700 ||
-				pulse->period >= 79900) &&
-			       pulse->period <= 80100);
-		else if (pulse->w1 < 130) /* 120 - 130 */
-			ret = (pulse->period >= 2900 &&
-			       (pulse->period <= 10100 ||
-				pulse->period >= 27560) &&
-			       (pulse->period <= 27960 ||
-				pulse->period >= 28360) &&
-			       (pulse->period <= 28700 ||
-				pulse->period >= 79900) &&
-			       pulse->period <= 80100);
-		else
-			ret = (pulse->period >= 3900 &&
-			       pulse->period <= 10100);
-		break;
-	case NL80211_DFS_UNSET:
-	default:
-		return false;
-	}
-
-	return ret;
-}
-
-static bool mt76x02_dfs_fetch_event(struct mt76x02_dev *dev,
-				    struct mt76x02_dfs_event *event)
-{
-	u32 data;
-
-	/* 1st: DFS_R37[31]: 0 (engine 0) - 1 (engine 2)
-	 * 2nd: DFS_R37[21:0]: pulse time
-	 * 3rd: DFS_R37[11:0]: pulse width
-	 * 3rd: DFS_R37[25:16]: phase
-	 * 4th: DFS_R37[12:0]: current pwr
-	 * 4th: DFS_R37[21:16]: pwr stable counter
-	 *
-	 * 1st: DFS_R37[31:0] set to 0xffffffff means no event detected
-	 */
-	data = mt76_rr(dev, MT_BBP(DFS, 37));
-	if (!MT_DFS_CHECK_EVENT(data))
-		return false;
-
-	event->engine = MT_DFS_EVENT_ENGINE(data);
-	data = mt76_rr(dev, MT_BBP(DFS, 37));
-	event->ts = MT_DFS_EVENT_TIMESTAMP(data);
-	data = mt76_rr(dev, MT_BBP(DFS, 37));
-	event->width = MT_DFS_EVENT_WIDTH(data);
-
-	return true;
-}
-
-static bool mt76x02_dfs_check_event(struct mt76x02_dev *dev,
-				    struct mt76x02_dfs_event *event)
-{
-	if (event->engine == 2) {
-		struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-		struct mt76x02_dfs_event_rb *event_buff = &dfs_pd->event_rb[1];
-		u16 last_event_idx;
-		u32 delta_ts;
-
-		last_event_idx = mt76_decr(event_buff->t_rb,
-					   MT_DFS_EVENT_BUFLEN);
-		delta_ts = event->ts - event_buff->data[last_event_idx].ts;
-		if (delta_ts < MT_DFS_EVENT_TIME_MARGIN &&
-		    event_buff->data[last_event_idx].width >= 200)
-			return false;
-	}
-	return true;
-}
-
-static void mt76x02_dfs_queue_event(struct mt76x02_dev *dev,
-				    struct mt76x02_dfs_event *event)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-	struct mt76x02_dfs_event_rb *event_buff;
-
-	/* add radar event to ring buffer */
-	event_buff = event->engine == 2 ? &dfs_pd->event_rb[1]
-					: &dfs_pd->event_rb[0];
-	event_buff->data[event_buff->t_rb] = *event;
-	event_buff->data[event_buff->t_rb].fetch_ts = jiffies;
-
-	event_buff->t_rb = mt76_incr(event_buff->t_rb, MT_DFS_EVENT_BUFLEN);
-	if (event_buff->t_rb == event_buff->h_rb)
-		event_buff->h_rb = mt76_incr(event_buff->h_rb,
-					     MT_DFS_EVENT_BUFLEN);
-}
-
-static int mt76x02_dfs_create_sequence(struct mt76x02_dev *dev,
-				       struct mt76x02_dfs_event *event,
-				       u16 cur_len)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-	struct mt76x02_dfs_sw_detector_params *sw_params;
-	u32 width_delta, with_sum;
-	struct mt76x02_dfs_sequence seq, *seq_p;
-	struct mt76x02_dfs_event_rb *event_rb;
-	struct mt76x02_dfs_event *cur_event;
-	int i, j, end, pri, factor, cur_pri;
-
-	event_rb = event->engine == 2 ? &dfs_pd->event_rb[1]
-				      : &dfs_pd->event_rb[0];
-
-	i = mt76_decr(event_rb->t_rb, MT_DFS_EVENT_BUFLEN);
-	end = mt76_decr(event_rb->h_rb, MT_DFS_EVENT_BUFLEN);
-
-	while (i != end) {
-		cur_event = &event_rb->data[i];
-		with_sum = event->width + cur_event->width;
-
-		sw_params = &dfs_pd->sw_dpd_params;
-		switch (dev->mt76.region) {
-		case NL80211_DFS_FCC:
-		case NL80211_DFS_JP:
-			if (with_sum < 600)
-				width_delta = 8;
-			else
-				width_delta = with_sum >> 3;
-			break;
-		case NL80211_DFS_ETSI:
-			if (event->engine == 2)
-				width_delta = with_sum >> 6;
-			else if (with_sum < 620)
-				width_delta = 24;
-			else
-				width_delta = 8;
-			break;
-		case NL80211_DFS_UNSET:
-		default:
-			return -EINVAL;
-		}
-
-		pri = event->ts - cur_event->ts;
-		if (abs(event->width - cur_event->width) > width_delta ||
-		    pri < sw_params->min_pri)
-			goto next;
-
-		if (pri > sw_params->max_pri)
-			break;
-
-		seq.pri = event->ts - cur_event->ts;
-		seq.first_ts = cur_event->ts;
-		seq.last_ts = event->ts;
-		seq.engine = event->engine;
-		seq.count = 2;
-
-		j = mt76_decr(i, MT_DFS_EVENT_BUFLEN);
-		while (j != end) {
-			cur_event = &event_rb->data[j];
-			cur_pri = event->ts - cur_event->ts;
-			factor = mt76x02_dfs_get_multiple(cur_pri, seq.pri,
-						sw_params->pri_margin);
-			if (factor > 0) {
-				seq.first_ts = cur_event->ts;
-				seq.count++;
-			}
-
-			j = mt76_decr(j, MT_DFS_EVENT_BUFLEN);
-		}
-		if (seq.count <= cur_len)
-			goto next;
-
-		seq_p = mt76x02_dfs_seq_pool_get(dev);
-		if (!seq_p)
-			return -ENOMEM;
-
-		*seq_p = seq;
-		INIT_LIST_HEAD(&seq_p->head);
-		list_add(&seq_p->head, &dfs_pd->sequences);
-next:
-		i = mt76_decr(i, MT_DFS_EVENT_BUFLEN);
-	}
-	return 0;
-}
-
-static u16 mt76x02_dfs_add_event_to_sequence(struct mt76x02_dev *dev,
-					     struct mt76x02_dfs_event *event)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-	struct mt76x02_dfs_sw_detector_params *sw_params;
-	struct mt76x02_dfs_sequence *seq, *tmp_seq;
-	u16 max_seq_len = 0;
-	int factor, pri;
-
-	sw_params = &dfs_pd->sw_dpd_params;
-	list_for_each_entry_safe(seq, tmp_seq, &dfs_pd->sequences, head) {
-		if (event->ts > seq->first_ts + MT_DFS_SEQUENCE_WINDOW) {
-			list_del_init(&seq->head);
-			mt76x02_dfs_seq_pool_put(dev, seq);
-			continue;
-		}
-
-		if (event->engine != seq->engine)
-			continue;
-
-		pri = event->ts - seq->last_ts;
-		factor = mt76x02_dfs_get_multiple(pri, seq->pri,
-						  sw_params->pri_margin);
-		if (factor > 0) {
-			seq->last_ts = event->ts;
-			seq->count++;
-			max_seq_len = max_t(u16, max_seq_len, seq->count);
-		}
-	}
-	return max_seq_len;
-}
-
-static bool mt76x02_dfs_check_detection(struct mt76x02_dev *dev)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-	struct mt76x02_dfs_sequence *seq;
-
-	if (list_empty(&dfs_pd->sequences))
-		return false;
-
-	list_for_each_entry(seq, &dfs_pd->sequences, head) {
-		if (seq->count > MT_DFS_SEQUENCE_TH) {
-			dfs_pd->stats[seq->engine].sw_pattern++;
-			return true;
-		}
-	}
-	return false;
-}
-
-static void mt76x02_dfs_add_events(struct mt76x02_dev *dev)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-	struct mt76x02_dfs_event event;
-	int i, seq_len;
-
-	/* disable debug mode */
-	mt76x02_dfs_set_capture_mode_ctrl(dev, false);
-	for (i = 0; i < MT_DFS_EVENT_LOOP; i++) {
-		if (!mt76x02_dfs_fetch_event(dev, &event))
-			break;
-
-		if (dfs_pd->last_event_ts > event.ts)
-			mt76x02_dfs_detector_reset(dev);
-		dfs_pd->last_event_ts = event.ts;
-
-		if (!mt76x02_dfs_check_event(dev, &event))
-			continue;
-
-		seq_len = mt76x02_dfs_add_event_to_sequence(dev, &event);
-		mt76x02_dfs_create_sequence(dev, &event, seq_len);
-
-		mt76x02_dfs_queue_event(dev, &event);
-	}
-	mt76x02_dfs_set_capture_mode_ctrl(dev, true);
-}
-
-static void mt76x02_dfs_check_event_window(struct mt76x02_dev *dev)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-	struct mt76x02_dfs_event_rb *event_buff;
-	struct mt76x02_dfs_event *event;
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(dfs_pd->event_rb); i++) {
-		event_buff = &dfs_pd->event_rb[i];
-
-		while (event_buff->h_rb != event_buff->t_rb) {
-			event = &event_buff->data[event_buff->h_rb];
-
-			/* sorted list */
-			if (time_is_after_jiffies(event->fetch_ts +
-						  MT_DFS_EVENT_WINDOW))
-				break;
-			event_buff->h_rb = mt76_incr(event_buff->h_rb,
-						     MT_DFS_EVENT_BUFLEN);
-		}
-	}
-}
-
-static void mt76x02_dfs_tasklet(struct tasklet_struct *t)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = from_tasklet(dfs_pd, t,
-								   dfs_tasklet);
-	struct mt76x02_dev *dev = container_of(dfs_pd, typeof(*dev), dfs_pd);
-	u32 engine_mask;
-	int i;
-
-	if (test_bit(MT76_SCANNING, &dev->mphy.state))
-		goto out;
-
-	if (time_is_before_jiffies(dfs_pd->last_sw_check +
-				   MT_DFS_SW_TIMEOUT)) {
-		bool radar_detected;
-
-		dfs_pd->last_sw_check = jiffies;
-
-		mt76x02_dfs_add_events(dev);
-		radar_detected = mt76x02_dfs_check_detection(dev);
-		if (radar_detected) {
-			/* sw detector rx radar pattern */
-			ieee80211_radar_detected(dev->mt76.hw);
-			mt76x02_dfs_detector_reset(dev);
-
-			return;
-		}
-		mt76x02_dfs_check_event_window(dev);
-	}
-
-	engine_mask = mt76_rr(dev, MT_BBP(DFS, 1));
-	if (!(engine_mask & 0xf))
-		goto out;
-
-	for (i = 0; i < MT_DFS_NUM_ENGINES; i++) {
-		struct mt76x02_dfs_hw_pulse pulse;
-
-		if (!(engine_mask & (1 << i)))
-			continue;
-
-		pulse.engine = i;
-		mt76x02_dfs_get_hw_pulse(dev, &pulse);
-
-		if (!mt76x02_dfs_check_hw_pulse(dev, &pulse)) {
-			dfs_pd->stats[i].hw_pulse_discarded++;
-			continue;
-		}
-
-		/* hw detector rx radar pattern */
-		dfs_pd->stats[i].hw_pattern++;
-		ieee80211_radar_detected(dev->mt76.hw);
-		mt76x02_dfs_detector_reset(dev);
-
-		return;
-	}
-
-	/* reset hw detector */
-	mt76_wr(dev, MT_BBP(DFS, 1), 0xf);
-
-out:
-	mt76x02_irq_enable(dev, MT_INT_GPTIMER);
-}
-
-static void mt76x02_dfs_init_sw_detector(struct mt76x02_dev *dev)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-
-	switch (dev->mt76.region) {
-	case NL80211_DFS_FCC:
-		dfs_pd->sw_dpd_params.max_pri = MT_DFS_FCC_MAX_PRI;
-		dfs_pd->sw_dpd_params.min_pri = MT_DFS_FCC_MIN_PRI;
-		dfs_pd->sw_dpd_params.pri_margin = MT_DFS_PRI_MARGIN;
-		break;
-	case NL80211_DFS_ETSI:
-		dfs_pd->sw_dpd_params.max_pri = MT_DFS_ETSI_MAX_PRI;
-		dfs_pd->sw_dpd_params.min_pri = MT_DFS_ETSI_MIN_PRI;
-		dfs_pd->sw_dpd_params.pri_margin = MT_DFS_PRI_MARGIN << 2;
-		break;
-	case NL80211_DFS_JP:
-		dfs_pd->sw_dpd_params.max_pri = MT_DFS_JP_MAX_PRI;
-		dfs_pd->sw_dpd_params.min_pri = MT_DFS_JP_MIN_PRI;
-		dfs_pd->sw_dpd_params.pri_margin = MT_DFS_PRI_MARGIN;
-		break;
-	case NL80211_DFS_UNSET:
-	default:
-		break;
-	}
-}
-
-static void mt76x02_dfs_set_bbp_params(struct mt76x02_dev *dev)
-{
-	const struct mt76x02_radar_specs *radar_specs;
-	u8 i, shift;
-	u32 data;
-
-	switch (dev->mphy.chandef.width) {
-	case NL80211_CHAN_WIDTH_40:
-		shift = MT_DFS_NUM_ENGINES;
-		break;
-	case NL80211_CHAN_WIDTH_80:
-		shift = 2 * MT_DFS_NUM_ENGINES;
-		break;
-	default:
-		shift = 0;
-		break;
-	}
-
-	switch (dev->mt76.region) {
-	case NL80211_DFS_FCC:
-		radar_specs = &fcc_radar_specs[shift];
-		break;
-	case NL80211_DFS_ETSI:
-		radar_specs = &etsi_radar_specs[shift];
-		break;
-	case NL80211_DFS_JP:
-		if (dev->mphy.chandef.chan->center_freq >= 5250 &&
-		    dev->mphy.chandef.chan->center_freq <= 5350)
-			radar_specs = &jp_w53_radar_specs[shift];
-		else
-			radar_specs = &jp_w56_radar_specs[shift];
-		break;
-	case NL80211_DFS_UNSET:
-	default:
-		return;
-	}
-
-	data = (MT_DFS_VGA_MASK << 16) |
-	       (MT_DFS_PWR_GAIN_OFFSET << 12) |
-	       (MT_DFS_PWR_DOWN_TIME << 8) |
-	       (MT_DFS_SYM_ROUND << 4) |
-	       (MT_DFS_DELTA_DELAY & 0xf);
-	mt76_wr(dev, MT_BBP(DFS, 2), data);
-
-	data = (MT_DFS_RX_PE_MASK << 16) | MT_DFS_PKT_END_MASK;
-	mt76_wr(dev, MT_BBP(DFS, 3), data);
-
-	for (i = 0; i < MT_DFS_NUM_ENGINES; i++) {
-		/* configure engine */
-		mt76_wr(dev, MT_BBP(DFS, 0), i);
-
-		/* detection mode + avg_len */
-		data = ((radar_specs[i].avg_len & 0x1ff) << 16) |
-		       (radar_specs[i].mode & 0xf);
-		mt76_wr(dev, MT_BBP(DFS, 4), data);
-
-		/* dfs energy */
-		data = ((radar_specs[i].e_high & 0x0fff) << 16) |
-		       (radar_specs[i].e_low & 0x0fff);
-		mt76_wr(dev, MT_BBP(DFS, 5), data);
-
-		/* dfs period */
-		mt76_wr(dev, MT_BBP(DFS, 7), radar_specs[i].t_low);
-		mt76_wr(dev, MT_BBP(DFS, 9), radar_specs[i].t_high);
-
-		/* dfs burst */
-		mt76_wr(dev, MT_BBP(DFS, 11), radar_specs[i].b_low);
-		mt76_wr(dev, MT_BBP(DFS, 13), radar_specs[i].b_high);
-
-		/* dfs width */
-		data = ((radar_specs[i].w_high & 0x0fff) << 16) |
-		       (radar_specs[i].w_low & 0x0fff);
-		mt76_wr(dev, MT_BBP(DFS, 14), data);
-
-		/* dfs margins */
-		data = (radar_specs[i].w_margin << 16) |
-		       radar_specs[i].t_margin;
-		mt76_wr(dev, MT_BBP(DFS, 15), data);
-
-		/* dfs event expiration */
-		mt76_wr(dev, MT_BBP(DFS, 17), radar_specs[i].event_expiration);
-
-		/* dfs pwr adj */
-		mt76_wr(dev, MT_BBP(DFS, 30), radar_specs[i].pwr_jmp);
-	}
-
-	/* reset status */
-	mt76_wr(dev, MT_BBP(DFS, 1), 0xf);
-	mt76_wr(dev, MT_BBP(DFS, 36), 0x3);
-
-	/* enable detection*/
-	mt76_wr(dev, MT_BBP(DFS, 0), MT_DFS_CH_EN << 16);
-	mt76_wr(dev, MT_BBP(IBI, 11), 0x0c350001);
-}
-
-void mt76x02_phy_dfs_adjust_agc(struct mt76x02_dev *dev)
-{
-	u32 agc_r8, agc_r4, val_r8, val_r4, dfs_r31;
-
-	agc_r8 = mt76_rr(dev, MT_BBP(AGC, 8));
-	agc_r4 = mt76_rr(dev, MT_BBP(AGC, 4));
-
-	val_r8 = (agc_r8 & 0x00007e00) >> 9;
-	val_r4 = agc_r4 & ~0x1f000000;
-	val_r4 += (((val_r8 + 1) >> 1) << 24);
-	mt76_wr(dev, MT_BBP(AGC, 4), val_r4);
-
-	dfs_r31 = FIELD_GET(MT_BBP_AGC_LNA_HIGH_GAIN, val_r4);
-	dfs_r31 += val_r8;
-	dfs_r31 -= (agc_r8 & 0x00000038) >> 3;
-	dfs_r31 = (dfs_r31 << 16) | 0x00000307;
-	mt76_wr(dev, MT_BBP(DFS, 31), dfs_r31);
-
-	if (is_mt76x2(dev)) {
-		mt76_wr(dev, MT_BBP(DFS, 32), 0x00040071);
-	} else {
-		/* disable hw detector */
-		mt76_wr(dev, MT_BBP(DFS, 0), 0);
-		/* enable hw detector */
-		mt76_wr(dev, MT_BBP(DFS, 0), MT_DFS_CH_EN << 16);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76x02_phy_dfs_adjust_agc);
-
-void mt76x02_dfs_init_params(struct mt76x02_dev *dev)
-{
-	if (mt76_phy_dfs_state(&dev->mphy) > MT_DFS_STATE_DISABLED) {
-		mt76x02_dfs_init_sw_detector(dev);
-		mt76x02_dfs_set_bbp_params(dev);
-		/* enable debug mode */
-		mt76x02_dfs_set_capture_mode_ctrl(dev, true);
-
-		mt76x02_irq_enable(dev, MT_INT_GPTIMER);
-		mt76_rmw_field(dev, MT_INT_TIMER_EN,
-			       MT_INT_TIMER_EN_GP_TIMER_EN, 1);
-	} else {
-		/* disable hw detector */
-		mt76_wr(dev, MT_BBP(DFS, 0), 0);
-		/* clear detector status */
-		mt76_wr(dev, MT_BBP(DFS, 1), 0xf);
-		if (mt76_chip(&dev->mt76) == 0x7610 ||
-		    mt76_chip(&dev->mt76) == 0x7630)
-			mt76_wr(dev, MT_BBP(IBI, 11), 0xfde8081);
-		else
-			mt76_wr(dev, MT_BBP(IBI, 11), 0);
-
-		mt76x02_irq_disable(dev, MT_INT_GPTIMER);
-		mt76_rmw_field(dev, MT_INT_TIMER_EN,
-			       MT_INT_TIMER_EN_GP_TIMER_EN, 0);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76x02_dfs_init_params);
-
-void mt76x02_dfs_init_detector(struct mt76x02_dev *dev)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-
-	INIT_LIST_HEAD(&dfs_pd->sequences);
-	INIT_LIST_HEAD(&dfs_pd->seq_pool);
-	dev->mt76.region = NL80211_DFS_UNSET;
-	dfs_pd->last_sw_check = jiffies;
-	tasklet_setup(&dfs_pd->dfs_tasklet, mt76x02_dfs_tasklet);
-}
-
-static void
-mt76x02_dfs_set_domain(struct mt76x02_dev *dev,
-		       enum nl80211_dfs_regions region)
-{
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-
-	mutex_lock(&dev->mt76.mutex);
-	if (dev->mt76.region != region) {
-		tasklet_disable(&dfs_pd->dfs_tasklet);
-
-		dev->ed_monitor = dev->ed_monitor_enabled &&
-				  region == NL80211_DFS_ETSI;
-		mt76x02_edcca_init(dev);
-
-		dev->mt76.region = region;
-		mt76x02_dfs_init_params(dev);
-		tasklet_enable(&dfs_pd->dfs_tasklet);
-	}
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-void mt76x02_regd_notifier(struct wiphy *wiphy,
-			   struct regulatory_request *request)
-{
-	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-	struct mt76x02_dev *dev = hw->priv;
-
-	mt76x02_dfs_set_domain(dev, request->dfs_region);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_dfs.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_dfs.h
deleted file mode 100644
index 491010a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_dfs.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#ifndef __MT76x02_DFS_H
-#define __MT76x02_DFS_H
-
-#include <linux/types.h>
-#include <linux/nl80211.h>
-
-#define MT_DFS_GP_INTERVAL		(10 << 4) /* 64 us unit */
-#define MT_DFS_NUM_ENGINES		4
-
-/* bbp params */
-#define MT_DFS_SYM_ROUND		0
-#define MT_DFS_DELTA_DELAY		2
-#define MT_DFS_VGA_MASK			0
-#define MT_DFS_PWR_GAIN_OFFSET		3
-#define MT_DFS_PWR_DOWN_TIME		0xf
-#define MT_DFS_RX_PE_MASK		0xff
-#define MT_DFS_PKT_END_MASK		0
-#define MT_DFS_CH_EN			0xf
-
-/* sw detector params */
-#define MT_DFS_EVENT_LOOP		64
-#define MT_DFS_SW_TIMEOUT		(HZ / 20)
-#define MT_DFS_EVENT_WINDOW		(HZ / 5)
-#define MT_DFS_SEQUENCE_WINDOW		(200 * (1 << 20))
-#define MT_DFS_EVENT_TIME_MARGIN	2000
-#define MT_DFS_PRI_MARGIN		4
-#define MT_DFS_SEQUENCE_TH		6
-
-#define MT_DFS_FCC_MAX_PRI		((28570 << 1) + 1000)
-#define MT_DFS_FCC_MIN_PRI		(3000 - 2)
-#define MT_DFS_JP_MAX_PRI		((80000 << 1) + 1000)
-#define MT_DFS_JP_MIN_PRI		(28500 - 2)
-#define MT_DFS_ETSI_MAX_PRI		(133333 + 125000 + 117647 + 1000)
-#define MT_DFS_ETSI_MIN_PRI		(4500 - 20)
-
-struct mt76x02_radar_specs {
-	u8 mode;
-	u16 avg_len;
-	u16 e_low;
-	u16 e_high;
-	u16 w_low;
-	u16 w_high;
-	u16 w_margin;
-	u32 t_low;
-	u32 t_high;
-	u16 t_margin;
-	u32 b_low;
-	u32 b_high;
-	u32 event_expiration;
-	u16 pwr_jmp;
-};
-
-#define MT_DFS_CHECK_EVENT(x)		((x) != GENMASK(31, 0))
-#define MT_DFS_EVENT_ENGINE(x)		(((x) & BIT(31)) ? 2 : 0)
-#define MT_DFS_EVENT_TIMESTAMP(x)	((x) & GENMASK(21, 0))
-#define MT_DFS_EVENT_WIDTH(x)		((x) & GENMASK(11, 0))
-struct mt76x02_dfs_event {
-	unsigned long fetch_ts;
-	u32 ts;
-	u16 width;
-	u8 engine;
-};
-
-#define MT_DFS_EVENT_BUFLEN		256
-struct mt76x02_dfs_event_rb {
-	struct mt76x02_dfs_event data[MT_DFS_EVENT_BUFLEN];
-	int h_rb, t_rb;
-};
-
-struct mt76x02_dfs_sequence {
-	struct list_head head;
-	u32 first_ts;
-	u32 last_ts;
-	u32 pri;
-	u16 count;
-	u8 engine;
-};
-
-struct mt76x02_dfs_hw_pulse {
-	u8 engine;
-	u32 period;
-	u32 w1;
-	u32 w2;
-	u32 burst;
-};
-
-struct mt76x02_dfs_sw_detector_params {
-	u32 min_pri;
-	u32 max_pri;
-	u32 pri_margin;
-};
-
-struct mt76x02_dfs_engine_stats {
-	u32 hw_pattern;
-	u32 hw_pulse_discarded;
-	u32 sw_pattern;
-};
-
-struct mt76x02_dfs_seq_stats {
-	u32 seq_pool_len;
-	u32 seq_len;
-};
-
-struct mt76x02_dfs_pattern_detector {
-	u8 chirp_pulse_cnt;
-	u32 chirp_pulse_ts;
-
-	struct mt76x02_dfs_sw_detector_params sw_dpd_params;
-	struct mt76x02_dfs_event_rb event_rb[2];
-
-	struct list_head sequences;
-	struct list_head seq_pool;
-	struct mt76x02_dfs_seq_stats seq_stats;
-
-	unsigned long last_sw_check;
-	u32 last_event_ts;
-
-	struct mt76x02_dfs_engine_stats stats[MT_DFS_NUM_ENGINES];
-	struct tasklet_struct dfs_tasklet;
-};
-
-void mt76x02_dfs_init_params(struct mt76x02_dev *dev);
-void mt76x02_dfs_init_detector(struct mt76x02_dev *dev);
-void mt76x02_regd_notifier(struct wiphy *wiphy,
-			   struct regulatory_request *request);
-void mt76x02_phy_dfs_adjust_agc(struct mt76x02_dev *dev);
-#endif /* __MT76x02_DFS_H */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_dma.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_dma.h
deleted file mode 100644
index 23b0e7d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_dma.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#ifndef __MT76x02_DMA_H
-#define __MT76x02_DMA_H
-
-#include "mt76x02.h"
-#include "dma.h"
-
-#define MT_TXD_INFO_LEN			GENMASK(15, 0)
-#define MT_TXD_INFO_NEXT_VLD		BIT(16)
-#define MT_TXD_INFO_TX_BURST		BIT(17)
-#define MT_TXD_INFO_80211		BIT(19)
-#define MT_TXD_INFO_TSO			BIT(20)
-#define MT_TXD_INFO_CSO			BIT(21)
-#define MT_TXD_INFO_WIV			BIT(24)
-#define MT_TXD_INFO_QSEL		GENMASK(26, 25)
-#define MT_TXD_INFO_DPORT		GENMASK(29, 27)
-#define MT_TXD_INFO_TYPE		GENMASK(31, 30)
-
-#define MT_RX_FCE_INFO_LEN		GENMASK(13, 0)
-#define MT_RX_FCE_INFO_SELF_GEN		BIT(15)
-#define MT_RX_FCE_INFO_CMD_SEQ		GENMASK(19, 16)
-#define MT_RX_FCE_INFO_EVT_TYPE		GENMASK(23, 20)
-#define MT_RX_FCE_INFO_PCIE_INTR	BIT(24)
-#define MT_RX_FCE_INFO_QSEL		GENMASK(26, 25)
-#define MT_RX_FCE_INFO_D_PORT		GENMASK(29, 27)
-#define MT_RX_FCE_INFO_TYPE		GENMASK(31, 30)
-
-/* MCU request message header  */
-#define MT_MCU_MSG_LEN			GENMASK(15, 0)
-#define MT_MCU_MSG_CMD_SEQ		GENMASK(19, 16)
-#define MT_MCU_MSG_CMD_TYPE		GENMASK(26, 20)
-#define MT_MCU_MSG_PORT			GENMASK(29, 27)
-#define MT_MCU_MSG_TYPE			GENMASK(31, 30)
-#define MT_MCU_MSG_TYPE_CMD		BIT(30)
-
-#define MT_RX_HEADROOM			32
-#define MT76X02_RX_RING_SIZE		256
-
-enum dma_msg_port {
-	WLAN_PORT,
-	CPU_RX_PORT,
-	CPU_TX_PORT,
-	HOST_PORT,
-	VIRTUAL_CPU_RX_PORT,
-	VIRTUAL_CPU_TX_PORT,
-	DISCARD,
-};
-
-static inline bool
-mt76x02_wait_for_wpdma(struct mt76_dev *dev, int timeout)
-{
-	return __mt76_poll(dev, MT_WPDMA_GLO_CFG,
-			   MT_WPDMA_GLO_CFG_TX_DMA_BUSY |
-			   MT_WPDMA_GLO_CFG_RX_DMA_BUSY,
-			   0, timeout);
-}
-
-int mt76x02_dma_init(struct mt76x02_dev *dev);
-void mt76x02_dma_disable(struct mt76x02_dev *dev);
-
-#endif /* __MT76x02_DMA_H */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_eeprom.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_eeprom.c
deleted file mode 100644
index 0acabba..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_eeprom.c
+++ /dev/null
@@ -1,154 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <asm/unaligned.h>
-
-#include "mt76x02_eeprom.h"
-
-static int
-mt76x02_efuse_read(struct mt76x02_dev *dev, u16 addr, u8 *data,
-		   enum mt76x02_eeprom_modes mode)
-{
-	u32 val;
-	int i;
-
-	val = mt76_rr(dev, MT_EFUSE_CTRL);
-	val &= ~(MT_EFUSE_CTRL_AIN |
-		 MT_EFUSE_CTRL_MODE);
-	val |= FIELD_PREP(MT_EFUSE_CTRL_AIN, addr & ~0xf);
-	val |= FIELD_PREP(MT_EFUSE_CTRL_MODE, mode);
-	val |= MT_EFUSE_CTRL_KICK;
-	mt76_wr(dev, MT_EFUSE_CTRL, val);
-
-	if (!mt76_poll_msec(dev, MT_EFUSE_CTRL, MT_EFUSE_CTRL_KICK, 0, 1000))
-		return -ETIMEDOUT;
-
-	udelay(2);
-
-	val = mt76_rr(dev, MT_EFUSE_CTRL);
-	if ((val & MT_EFUSE_CTRL_AOUT) == MT_EFUSE_CTRL_AOUT) {
-		memset(data, 0xff, 16);
-		return 0;
-	}
-
-	for (i = 0; i < 4; i++) {
-		val = mt76_rr(dev, MT_EFUSE_DATA(i));
-		put_unaligned_le32(val, data + 4 * i);
-	}
-
-	return 0;
-}
-
-int mt76x02_eeprom_copy(struct mt76x02_dev *dev,
-			enum mt76x02_eeprom_field field,
-			void *dest, int len)
-{
-	if (field + len > dev->mt76.eeprom.size)
-		return -1;
-
-	memcpy(dest, dev->mt76.eeprom.data + field, len);
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_eeprom_copy);
-
-int mt76x02_get_efuse_data(struct mt76x02_dev *dev, u16 base, void *buf,
-			   int len, enum mt76x02_eeprom_modes mode)
-{
-	int ret, i;
-
-	for (i = 0; i + 16 <= len; i += 16) {
-		ret = mt76x02_efuse_read(dev, base + i, buf + i, mode);
-		if (ret)
-			return ret;
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_get_efuse_data);
-
-void mt76x02_eeprom_parse_hw_cap(struct mt76x02_dev *dev)
-{
-	u16 val = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_0);
-
-	switch (FIELD_GET(MT_EE_NIC_CONF_0_BOARD_TYPE, val)) {
-	case BOARD_TYPE_5GHZ:
-		dev->mphy.cap.has_5ghz = true;
-		break;
-	case BOARD_TYPE_2GHZ:
-		dev->mphy.cap.has_2ghz = true;
-		break;
-	default:
-		dev->mphy.cap.has_2ghz = true;
-		dev->mphy.cap.has_5ghz = true;
-		break;
-	}
-}
-EXPORT_SYMBOL_GPL(mt76x02_eeprom_parse_hw_cap);
-
-bool mt76x02_ext_pa_enabled(struct mt76x02_dev *dev, enum nl80211_band band)
-{
-	u16 conf0 = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_0);
-
-	if (band == NL80211_BAND_5GHZ)
-		return !(conf0 & MT_EE_NIC_CONF_0_PA_INT_5G);
-	else
-		return !(conf0 & MT_EE_NIC_CONF_0_PA_INT_2G);
-}
-EXPORT_SYMBOL_GPL(mt76x02_ext_pa_enabled);
-
-void mt76x02_get_rx_gain(struct mt76x02_dev *dev, enum nl80211_band band,
-			 u16 *rssi_offset, s8 *lna_2g, s8 *lna_5g)
-{
-	u16 val;
-
-	val = mt76x02_eeprom_get(dev, MT_EE_LNA_GAIN);
-	*lna_2g = val & 0xff;
-	lna_5g[0] = val >> 8;
-
-	val = mt76x02_eeprom_get(dev, MT_EE_RSSI_OFFSET_2G_1);
-	lna_5g[1] = val >> 8;
-
-	val = mt76x02_eeprom_get(dev, MT_EE_RSSI_OFFSET_5G_1);
-	lna_5g[2] = val >> 8;
-
-	if (!mt76x02_field_valid(lna_5g[1]))
-		lna_5g[1] = lna_5g[0];
-
-	if (!mt76x02_field_valid(lna_5g[2]))
-		lna_5g[2] = lna_5g[0];
-
-	if (band == NL80211_BAND_2GHZ)
-		*rssi_offset = mt76x02_eeprom_get(dev, MT_EE_RSSI_OFFSET_2G_0);
-	else
-		*rssi_offset = mt76x02_eeprom_get(dev, MT_EE_RSSI_OFFSET_5G_0);
-}
-EXPORT_SYMBOL_GPL(mt76x02_get_rx_gain);
-
-u8 mt76x02_get_lna_gain(struct mt76x02_dev *dev,
-			s8 *lna_2g, s8 *lna_5g,
-			struct ieee80211_channel *chan)
-{
-	u16 val;
-	u8 lna;
-
-	val = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1);
-	if (val & MT_EE_NIC_CONF_1_LNA_EXT_2G)
-		*lna_2g = 0;
-	if (val & MT_EE_NIC_CONF_1_LNA_EXT_5G)
-		memset(lna_5g, 0, sizeof(s8) * 3);
-
-	if (chan->band == NL80211_BAND_2GHZ)
-		lna = *lna_2g;
-	else if (chan->hw_value <= 64)
-		lna = lna_5g[0];
-	else if (chan->hw_value <= 128)
-		lna = lna_5g[1];
-	else
-		lna = lna_5g[2];
-
-	return lna != 0xff ? lna : 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_get_lna_gain);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_eeprom.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_eeprom.h
deleted file mode 100644
index 13fa708..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_eeprom.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#ifndef __MT76x02_EEPROM_H
-#define __MT76x02_EEPROM_H
-
-#include "mt76x02.h"
-
-enum mt76x02_eeprom_field {
-	MT_EE_CHIP_ID =				0x000,
-	MT_EE_VERSION =				0x002,
-	MT_EE_MAC_ADDR =			0x004,
-	MT_EE_PCI_ID =				0x00A,
-	MT_EE_ANTENNA =				0x022,
-	MT_EE_CFG1_INIT =			0x024,
-	MT_EE_NIC_CONF_0 =			0x034,
-	MT_EE_NIC_CONF_1 =			0x036,
-	MT_EE_COUNTRY_REGION_5GHZ =		0x038,
-	MT_EE_COUNTRY_REGION_2GHZ =		0x039,
-	MT_EE_FREQ_OFFSET =			0x03a,
-	MT_EE_NIC_CONF_2 =			0x042,
-
-	MT_EE_XTAL_TRIM_1 =			0x03a,
-	MT_EE_XTAL_TRIM_2 =			0x09e,
-
-	MT_EE_LNA_GAIN =			0x044,
-	MT_EE_RSSI_OFFSET_2G_0 =		0x046,
-	MT_EE_RSSI_OFFSET_2G_1 =		0x048,
-	MT_EE_LNA_GAIN_5GHZ_1 =			0x049,
-	MT_EE_RSSI_OFFSET_5G_0 =		0x04a,
-	MT_EE_RSSI_OFFSET_5G_1 =		0x04c,
-	MT_EE_LNA_GAIN_5GHZ_2 =			0x04d,
-
-	MT_EE_TX_POWER_DELTA_BW40 =		0x050,
-	MT_EE_TX_POWER_DELTA_BW80 =		0x052,
-
-	MT_EE_TX_POWER_EXT_PA_5G =		0x054,
-
-	MT_EE_TX_POWER_0_START_2G =		0x056,
-	MT_EE_TX_POWER_1_START_2G =		0x05c,
-
-	/* used as byte arrays */
-#define MT_TX_POWER_GROUP_SIZE_5G		5
-#define MT_TX_POWER_GROUPS_5G			6
-	MT_EE_TX_POWER_0_START_5G =		0x062,
-	MT_EE_TSSI_SLOPE_2G =			0x06e,
-
-	MT_EE_TX_POWER_0_GRP3_TX_POWER_DELTA =	0x074,
-	MT_EE_TX_POWER_0_GRP4_TSSI_SLOPE =	0x076,
-
-	MT_EE_TX_POWER_1_START_5G =		0x080,
-
-	MT_EE_TX_POWER_CCK =			0x0a0,
-	MT_EE_TX_POWER_OFDM_2G_6M =		0x0a2,
-	MT_EE_TX_POWER_OFDM_2G_24M =		0x0a4,
-	MT_EE_TX_POWER_OFDM_5G_6M =		0x0b2,
-	MT_EE_TX_POWER_OFDM_5G_24M =		0x0b4,
-	MT_EE_TX_POWER_HT_MCS0 =		0x0a6,
-	MT_EE_TX_POWER_HT_MCS4 =		0x0a8,
-	MT_EE_TX_POWER_HT_MCS8 =		0x0aa,
-	MT_EE_TX_POWER_HT_MCS12 =		0x0ac,
-	MT_EE_TX_POWER_VHT_MCS8 =		0x0be,
-
-	MT_EE_2G_TARGET_POWER =			0x0d0,
-	MT_EE_TEMP_OFFSET =			0x0d1,
-	MT_EE_5G_TARGET_POWER =			0x0d2,
-	MT_EE_TSSI_BOUND1 =			0x0d4,
-	MT_EE_TSSI_BOUND2 =			0x0d6,
-	MT_EE_TSSI_BOUND3 =			0x0d8,
-	MT_EE_TSSI_BOUND4 =			0x0da,
-	MT_EE_FREQ_OFFSET_COMPENSATION =	0x0db,
-	MT_EE_TSSI_BOUND5 =			0x0dc,
-	MT_EE_TX_POWER_BYRATE_BASE =		0x0de,
-
-	MT_EE_TSSI_SLOPE_5G =			0x0f0,
-	MT_EE_RF_TEMP_COMP_SLOPE_5G =		0x0f2,
-	MT_EE_RF_TEMP_COMP_SLOPE_2G =		0x0f4,
-
-	MT_EE_RF_2G_TSSI_OFF_TXPOWER =		0x0f6,
-	MT_EE_RF_2G_RX_HIGH_GAIN =		0x0f8,
-	MT_EE_RF_5G_GRP0_1_RX_HIGH_GAIN =	0x0fa,
-	MT_EE_RF_5G_GRP2_3_RX_HIGH_GAIN =	0x0fc,
-	MT_EE_RF_5G_GRP4_5_RX_HIGH_GAIN =	0x0fe,
-
-	MT_EE_BT_RCAL_RESULT =			0x138,
-	MT_EE_BT_VCDL_CALIBRATION =		0x13c,
-	MT_EE_BT_PMUCFG =			0x13e,
-
-	MT_EE_USAGE_MAP_START =			0x1e0,
-	MT_EE_USAGE_MAP_END =			0x1fc,
-
-	__MT_EE_MAX
-};
-
-#define MT_EE_ANTENNA_DUAL			BIT(15)
-
-#define MT_EE_NIC_CONF_0_RX_PATH		GENMASK(3, 0)
-#define MT_EE_NIC_CONF_0_TX_PATH		GENMASK(7, 4)
-#define MT_EE_NIC_CONF_0_PA_TYPE		GENMASK(9, 8)
-#define MT_EE_NIC_CONF_0_PA_INT_2G		BIT(8)
-#define MT_EE_NIC_CONF_0_PA_INT_5G		BIT(9)
-#define MT_EE_NIC_CONF_0_PA_IO_CURRENT		BIT(10)
-#define MT_EE_NIC_CONF_0_BOARD_TYPE		GENMASK(13, 12)
-
-#define MT_EE_NIC_CONF_1_HW_RF_CTRL		BIT(0)
-#define MT_EE_NIC_CONF_1_TEMP_TX_ALC		BIT(1)
-#define MT_EE_NIC_CONF_1_LNA_EXT_2G		BIT(2)
-#define MT_EE_NIC_CONF_1_LNA_EXT_5G		BIT(3)
-#define MT_EE_NIC_CONF_1_TX_ALC_EN		BIT(13)
-
-#define MT_EE_NIC_CONF_2_ANT_OPT		BIT(3)
-#define MT_EE_NIC_CONF_2_ANT_DIV		BIT(4)
-#define MT_EE_NIC_CONF_2_XTAL_OPTION		GENMASK(10, 9)
-
-#define MT_EFUSE_USAGE_MAP_SIZE			(MT_EE_USAGE_MAP_END - \
-						 MT_EE_USAGE_MAP_START + 1)
-
-enum mt76x02_eeprom_modes {
-	MT_EE_READ,
-	MT_EE_PHYSICAL_READ,
-};
-
-enum mt76x02_board_type {
-	BOARD_TYPE_2GHZ = 1,
-	BOARD_TYPE_5GHZ = 2,
-};
-
-static inline bool mt76x02_field_valid(u8 val)
-{
-	return val != 0 && val != 0xff;
-}
-
-static inline int
-mt76x02_sign_extend(u32 val, unsigned int size)
-{
-	bool sign = val & BIT(size - 1);
-
-	val &= BIT(size - 1) - 1;
-
-	return sign ? val : -val;
-}
-
-static inline int
-mt76x02_sign_extend_optional(u32 val, unsigned int size)
-{
-	bool enable = val & BIT(size);
-
-	return enable ? mt76x02_sign_extend(val, size) : 0;
-}
-
-static inline s8 mt76x02_rate_power_val(u8 val)
-{
-	if (!mt76x02_field_valid(val))
-		return 0;
-
-	return mt76x02_sign_extend_optional(val, 7);
-}
-
-static inline int
-mt76x02_eeprom_get(struct mt76x02_dev *dev,
-		   enum mt76x02_eeprom_field field)
-{
-	if ((field & 1) || field >= __MT_EE_MAX)
-		return -1;
-
-	return get_unaligned_le16(dev->mt76.eeprom.data + field);
-}
-
-bool mt76x02_ext_pa_enabled(struct mt76x02_dev *dev, enum nl80211_band band);
-int mt76x02_get_efuse_data(struct mt76x02_dev *dev, u16 base, void *buf,
-			   int len, enum mt76x02_eeprom_modes mode);
-void mt76x02_get_rx_gain(struct mt76x02_dev *dev, enum nl80211_band band,
-			 u16 *rssi_offset, s8 *lna_2g, s8 *lna_5g);
-u8 mt76x02_get_lna_gain(struct mt76x02_dev *dev,
-			s8 *lna_2g, s8 *lna_5g,
-			struct ieee80211_channel *chan);
-void mt76x02_eeprom_parse_hw_cap(struct mt76x02_dev *dev);
-int mt76x02_eeprom_copy(struct mt76x02_dev *dev,
-			enum mt76x02_eeprom_field field,
-			void *dest, int len);
-
-#endif /* __MT76x02_EEPROM_H */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mac.c
deleted file mode 100644
index d1ec2b1..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mac.c
+++ /dev/null
@@ -1,1236 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-
-#include "mt76x02.h"
-#include "mt76x02_trace.h"
-#include "trace.h"
-
-void mt76x02_mac_reset_counters(struct mt76x02_dev *dev)
-{
-	int i;
-
-	mt76_rr(dev, MT_RX_STAT_0);
-	mt76_rr(dev, MT_RX_STAT_1);
-	mt76_rr(dev, MT_RX_STAT_2);
-	mt76_rr(dev, MT_TX_STA_0);
-	mt76_rr(dev, MT_TX_STA_1);
-	mt76_rr(dev, MT_TX_STA_2);
-
-	for (i = 0; i < 16; i++)
-		mt76_rr(dev, MT_TX_AGG_CNT(i));
-
-	for (i = 0; i < 16; i++)
-		mt76_rr(dev, MT_TX_STAT_FIFO);
-
-	memset(dev->mt76.aggr_stats, 0, sizeof(dev->mt76.aggr_stats));
-}
-EXPORT_SYMBOL_GPL(mt76x02_mac_reset_counters);
-
-static enum mt76x02_cipher_type
-mt76x02_mac_get_key_info(struct ieee80211_key_conf *key, u8 *key_data)
-{
-	memset(key_data, 0, 32);
-	if (!key)
-		return MT76X02_CIPHER_NONE;
-
-	if (key->keylen > 32)
-		return MT76X02_CIPHER_NONE;
-
-	memcpy(key_data, key->key, key->keylen);
-
-	switch (key->cipher) {
-	case WLAN_CIPHER_SUITE_WEP40:
-		return MT76X02_CIPHER_WEP40;
-	case WLAN_CIPHER_SUITE_WEP104:
-		return MT76X02_CIPHER_WEP104;
-	case WLAN_CIPHER_SUITE_TKIP:
-		return MT76X02_CIPHER_TKIP;
-	case WLAN_CIPHER_SUITE_CCMP:
-		return MT76X02_CIPHER_AES_CCMP;
-	default:
-		return MT76X02_CIPHER_NONE;
-	}
-}
-
-int mt76x02_mac_shared_key_setup(struct mt76x02_dev *dev, u8 vif_idx,
-				 u8 key_idx, struct ieee80211_key_conf *key)
-{
-	enum mt76x02_cipher_type cipher;
-	u8 key_data[32];
-	u32 val;
-
-	cipher = mt76x02_mac_get_key_info(key, key_data);
-	if (cipher == MT76X02_CIPHER_NONE && key)
-		return -EOPNOTSUPP;
-
-	val = mt76_rr(dev, MT_SKEY_MODE(vif_idx));
-	val &= ~(MT_SKEY_MODE_MASK << MT_SKEY_MODE_SHIFT(vif_idx, key_idx));
-	val |= cipher << MT_SKEY_MODE_SHIFT(vif_idx, key_idx);
-	mt76_wr(dev, MT_SKEY_MODE(vif_idx), val);
-
-	mt76_wr_copy(dev, MT_SKEY(vif_idx, key_idx), key_data,
-		     sizeof(key_data));
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_mac_shared_key_setup);
-
-void mt76x02_mac_wcid_sync_pn(struct mt76x02_dev *dev, u8 idx,
-			      struct ieee80211_key_conf *key)
-{
-	enum mt76x02_cipher_type cipher;
-	u8 key_data[32];
-	u32 iv, eiv;
-	u64 pn;
-
-	cipher = mt76x02_mac_get_key_info(key, key_data);
-	iv = mt76_rr(dev, MT_WCID_IV(idx));
-	eiv = mt76_rr(dev, MT_WCID_IV(idx) + 4);
-
-	pn = (u64)eiv << 16;
-	if (cipher == MT76X02_CIPHER_TKIP) {
-		pn |= (iv >> 16) & 0xff;
-		pn |= (iv & 0xff) << 8;
-	} else if (cipher >= MT76X02_CIPHER_AES_CCMP) {
-		pn |= iv & 0xffff;
-	} else {
-		return;
-	}
-
-	atomic64_set(&key->tx_pn, pn);
-}
-
-int mt76x02_mac_wcid_set_key(struct mt76x02_dev *dev, u8 idx,
-			     struct ieee80211_key_conf *key)
-{
-	enum mt76x02_cipher_type cipher;
-	u8 key_data[32];
-	u8 iv_data[8];
-	u64 pn;
-
-	cipher = mt76x02_mac_get_key_info(key, key_data);
-	if (cipher == MT76X02_CIPHER_NONE && key)
-		return -EOPNOTSUPP;
-
-	mt76_wr_copy(dev, MT_WCID_KEY(idx), key_data, sizeof(key_data));
-	mt76_rmw_field(dev, MT_WCID_ATTR(idx), MT_WCID_ATTR_PKEY_MODE, cipher);
-
-	memset(iv_data, 0, sizeof(iv_data));
-	if (key) {
-		mt76_rmw_field(dev, MT_WCID_ATTR(idx), MT_WCID_ATTR_PAIRWISE,
-			       !!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE));
-
-		pn = atomic64_read(&key->tx_pn);
-
-		iv_data[3] = key->keyidx << 6;
-		if (cipher >= MT76X02_CIPHER_TKIP) {
-			iv_data[3] |= 0x20;
-			put_unaligned_le32(pn >> 16, &iv_data[4]);
-		}
-
-		if (cipher == MT76X02_CIPHER_TKIP) {
-			iv_data[0] = (pn >> 8) & 0xff;
-			iv_data[1] = (iv_data[0] | 0x20) & 0x7f;
-			iv_data[2] = pn & 0xff;
-		} else if (cipher >= MT76X02_CIPHER_AES_CCMP) {
-			put_unaligned_le16((pn & 0xffff), &iv_data[0]);
-		}
-	}
-
-	mt76_wr_copy(dev, MT_WCID_IV(idx), iv_data, sizeof(iv_data));
-
-	return 0;
-}
-
-void mt76x02_mac_wcid_setup(struct mt76x02_dev *dev, u8 idx,
-			    u8 vif_idx, u8 *mac)
-{
-	struct mt76_wcid_addr addr = {};
-	u32 attr;
-
-	attr = FIELD_PREP(MT_WCID_ATTR_BSS_IDX, vif_idx & 7) |
-	       FIELD_PREP(MT_WCID_ATTR_BSS_IDX_EXT, !!(vif_idx & 8));
-
-	mt76_wr(dev, MT_WCID_ATTR(idx), attr);
-
-	if (idx >= 128)
-		return;
-
-	if (mac)
-		memcpy(addr.macaddr, mac, ETH_ALEN);
-
-	mt76_wr_copy(dev, MT_WCID_ADDR(idx), &addr, sizeof(addr));
-}
-EXPORT_SYMBOL_GPL(mt76x02_mac_wcid_setup);
-
-void mt76x02_mac_wcid_set_drop(struct mt76x02_dev *dev, u8 idx, bool drop)
-{
-	u32 val = mt76_rr(dev, MT_WCID_DROP(idx));
-	u32 bit = MT_WCID_DROP_MASK(idx);
-
-	/* prevent unnecessary writes */
-	if ((val & bit) != (bit * drop))
-		mt76_wr(dev, MT_WCID_DROP(idx), (val & ~bit) | (bit * drop));
-}
-
-static u16
-mt76x02_mac_tx_rate_val(struct mt76x02_dev *dev,
-			const struct ieee80211_tx_rate *rate, u8 *nss_val)
-{
-	u8 phy, rate_idx, nss, bw = 0;
-	u16 rateval;
-
-	if (rate->flags & IEEE80211_TX_RC_VHT_MCS) {
-		rate_idx = rate->idx;
-		nss = 1 + (rate->idx >> 4);
-		phy = MT_PHY_TYPE_VHT;
-		if (rate->flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
-			bw = 2;
-		else if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
-			bw = 1;
-	} else if (rate->flags & IEEE80211_TX_RC_MCS) {
-		rate_idx = rate->idx;
-		nss = 1 + (rate->idx >> 3);
-		phy = MT_PHY_TYPE_HT;
-		if (rate->flags & IEEE80211_TX_RC_GREEN_FIELD)
-			phy = MT_PHY_TYPE_HT_GF;
-		if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
-			bw = 1;
-	} else {
-		const struct ieee80211_rate *r;
-		int band = dev->mphy.chandef.chan->band;
-		u16 val;
-
-		r = &dev->mt76.hw->wiphy->bands[band]->bitrates[rate->idx];
-		if (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
-			val = r->hw_value_short;
-		else
-			val = r->hw_value;
-
-		phy = val >> 8;
-		rate_idx = val & 0xff;
-		nss = 1;
-	}
-
-	rateval = FIELD_PREP(MT_RXWI_RATE_INDEX, rate_idx);
-	rateval |= FIELD_PREP(MT_RXWI_RATE_PHY, phy);
-	rateval |= FIELD_PREP(MT_RXWI_RATE_BW, bw);
-	if (rate->flags & IEEE80211_TX_RC_SHORT_GI)
-		rateval |= MT_RXWI_RATE_SGI;
-
-	*nss_val = nss;
-	return rateval;
-}
-
-void mt76x02_mac_wcid_set_rate(struct mt76x02_dev *dev, struct mt76_wcid *wcid,
-			       const struct ieee80211_tx_rate *rate)
-{
-	s8 max_txpwr_adj = mt76x02_tx_get_max_txpwr_adj(dev, rate);
-	u16 rateval;
-	u32 tx_info;
-	s8 nss;
-
-	rateval = mt76x02_mac_tx_rate_val(dev, rate, &nss);
-	tx_info = FIELD_PREP(MT_WCID_TX_INFO_RATE, rateval) |
-		  FIELD_PREP(MT_WCID_TX_INFO_NSS, nss) |
-		  FIELD_PREP(MT_WCID_TX_INFO_TXPWR_ADJ, max_txpwr_adj) |
-		  MT_WCID_TX_INFO_SET;
-	wcid->tx_info = tx_info;
-}
-
-void mt76x02_mac_set_short_preamble(struct mt76x02_dev *dev, bool enable)
-{
-	if (enable)
-		mt76_set(dev, MT_AUTO_RSP_CFG, MT_AUTO_RSP_PREAMB_SHORT);
-	else
-		mt76_clear(dev, MT_AUTO_RSP_CFG, MT_AUTO_RSP_PREAMB_SHORT);
-}
-
-bool mt76x02_mac_load_tx_status(struct mt76x02_dev *dev,
-				struct mt76x02_tx_status *stat)
-{
-	u32 stat1, stat2;
-
-	stat2 = mt76_rr(dev, MT_TX_STAT_FIFO_EXT);
-	stat1 = mt76_rr(dev, MT_TX_STAT_FIFO);
-
-	stat->valid = !!(stat1 & MT_TX_STAT_FIFO_VALID);
-	if (!stat->valid)
-		return false;
-
-	stat->success = !!(stat1 & MT_TX_STAT_FIFO_SUCCESS);
-	stat->aggr = !!(stat1 & MT_TX_STAT_FIFO_AGGR);
-	stat->ack_req = !!(stat1 & MT_TX_STAT_FIFO_ACKREQ);
-	stat->wcid = FIELD_GET(MT_TX_STAT_FIFO_WCID, stat1);
-	stat->rate = FIELD_GET(MT_TX_STAT_FIFO_RATE, stat1);
-
-	stat->retry = FIELD_GET(MT_TX_STAT_FIFO_EXT_RETRY, stat2);
-	stat->pktid = FIELD_GET(MT_TX_STAT_FIFO_EXT_PKTID, stat2);
-
-	trace_mac_txstat_fetch(dev, stat);
-
-	return true;
-}
-
-static int
-mt76x02_mac_process_tx_rate(struct ieee80211_tx_rate *txrate, u16 rate,
-			    enum nl80211_band band)
-{
-	u8 idx = FIELD_GET(MT_RXWI_RATE_INDEX, rate);
-
-	txrate->idx = 0;
-	txrate->flags = 0;
-	txrate->count = 1;
-
-	switch (FIELD_GET(MT_RXWI_RATE_PHY, rate)) {
-	case MT_PHY_TYPE_OFDM:
-		if (band == NL80211_BAND_2GHZ)
-			idx += 4;
-
-		txrate->idx = idx;
-		return 0;
-	case MT_PHY_TYPE_CCK:
-		if (idx >= 8)
-			idx -= 8;
-
-		txrate->idx = idx;
-		return 0;
-	case MT_PHY_TYPE_HT_GF:
-		txrate->flags |= IEEE80211_TX_RC_GREEN_FIELD;
-		fallthrough;
-	case MT_PHY_TYPE_HT:
-		txrate->flags |= IEEE80211_TX_RC_MCS;
-		txrate->idx = idx;
-		break;
-	case MT_PHY_TYPE_VHT:
-		txrate->flags |= IEEE80211_TX_RC_VHT_MCS;
-		txrate->idx = idx;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	switch (FIELD_GET(MT_RXWI_RATE_BW, rate)) {
-	case MT_PHY_BW_20:
-		break;
-	case MT_PHY_BW_40:
-		txrate->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
-		break;
-	case MT_PHY_BW_80:
-		txrate->flags |= IEEE80211_TX_RC_80_MHZ_WIDTH;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	if (rate & MT_RXWI_RATE_SGI)
-		txrate->flags |= IEEE80211_TX_RC_SHORT_GI;
-
-	return 0;
-}
-
-void mt76x02_mac_write_txwi(struct mt76x02_dev *dev, struct mt76x02_txwi *txwi,
-			    struct sk_buff *skb, struct mt76_wcid *wcid,
-			    struct ieee80211_sta *sta, int len)
-{
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct ieee80211_tx_rate *rate = &info->control.rates[0];
-	struct ieee80211_key_conf *key = info->control.hw_key;
-	u32 wcid_tx_info;
-	u16 rate_ht_mask = FIELD_PREP(MT_RXWI_RATE_PHY, BIT(1) | BIT(2));
-	u16 txwi_flags = 0, rateval;
-	u8 nss;
-	s8 txpwr_adj, max_txpwr_adj;
-	u8 ccmp_pn[8], nstreams = dev->mphy.chainmask & 0xf;
-
-	memset(txwi, 0, sizeof(*txwi));
-
-	mt76_tx_check_agg_ssn(sta, skb);
-
-	if (!info->control.hw_key && wcid && wcid->hw_key_idx != 0xff &&
-	    ieee80211_has_protected(hdr->frame_control)) {
-		wcid = NULL;
-		ieee80211_get_tx_rates(info->control.vif, sta, skb,
-				       info->control.rates, 1);
-	}
-
-	if (wcid)
-		txwi->wcid = wcid->idx;
-	else
-		txwi->wcid = 0xff;
-
-	if (wcid && wcid->sw_iv && key) {
-		u64 pn = atomic64_inc_return(&key->tx_pn);
-
-		ccmp_pn[0] = pn;
-		ccmp_pn[1] = pn >> 8;
-		ccmp_pn[2] = 0;
-		ccmp_pn[3] = 0x20 | (key->keyidx << 6);
-		ccmp_pn[4] = pn >> 16;
-		ccmp_pn[5] = pn >> 24;
-		ccmp_pn[6] = pn >> 32;
-		ccmp_pn[7] = pn >> 40;
-		txwi->iv = *((__le32 *)&ccmp_pn[0]);
-		txwi->eiv = *((__le32 *)&ccmp_pn[4]);
-	}
-
-	if (wcid && (rate->idx < 0 || !rate->count)) {
-		wcid_tx_info = wcid->tx_info;
-		rateval = FIELD_GET(MT_WCID_TX_INFO_RATE, wcid_tx_info);
-		max_txpwr_adj = FIELD_GET(MT_WCID_TX_INFO_TXPWR_ADJ,
-					  wcid_tx_info);
-		nss = FIELD_GET(MT_WCID_TX_INFO_NSS, wcid_tx_info);
-	} else {
-		rateval = mt76x02_mac_tx_rate_val(dev, rate, &nss);
-		max_txpwr_adj = mt76x02_tx_get_max_txpwr_adj(dev, rate);
-	}
-	txwi->rate = cpu_to_le16(rateval);
-
-	txpwr_adj = mt76x02_tx_get_txpwr_adj(dev, dev->txpower_conf,
-					     max_txpwr_adj);
-	txwi->ctl2 = FIELD_PREP(MT_TX_PWR_ADJ, txpwr_adj);
-
-	if (nstreams > 1 && mt76_rev(&dev->mt76) >= MT76XX_REV_E4)
-		txwi->txstream = 0x13;
-	else if (nstreams > 1 && mt76_rev(&dev->mt76) >= MT76XX_REV_E3 &&
-		 !(txwi->rate & cpu_to_le16(rate_ht_mask)))
-		txwi->txstream = 0x93;
-
-	if (is_mt76x2(dev) && (info->flags & IEEE80211_TX_CTL_LDPC))
-		txwi->rate |= cpu_to_le16(MT_RXWI_RATE_LDPC);
-	if ((info->flags & IEEE80211_TX_CTL_STBC) && nss == 1)
-		txwi->rate |= cpu_to_le16(MT_RXWI_RATE_STBC);
-	if (nss > 1 && sta && sta->smps_mode == IEEE80211_SMPS_DYNAMIC)
-		txwi_flags |= MT_TXWI_FLAGS_MMPS;
-	if (!(info->flags & IEEE80211_TX_CTL_NO_ACK))
-		txwi->ack_ctl |= MT_TXWI_ACK_CTL_REQ;
-	if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)
-		txwi->ack_ctl |= MT_TXWI_ACK_CTL_NSEQ;
-	if ((info->flags & IEEE80211_TX_CTL_AMPDU) && sta) {
-		u8 ba_size = IEEE80211_MIN_AMPDU_BUF;
-		u8 ampdu_density = sta->ht_cap.ampdu_density;
-
-		ba_size <<= sta->ht_cap.ampdu_factor;
-		ba_size = min_t(int, 63, ba_size - 1);
-		if (info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE)
-			ba_size = 0;
-		txwi->ack_ctl |= FIELD_PREP(MT_TXWI_ACK_CTL_BA_WINDOW, ba_size);
-
-		if (ampdu_density < IEEE80211_HT_MPDU_DENSITY_4)
-			ampdu_density = IEEE80211_HT_MPDU_DENSITY_4;
-
-		txwi_flags |= MT_TXWI_FLAGS_AMPDU |
-			 FIELD_PREP(MT_TXWI_FLAGS_MPDU_DENSITY, ampdu_density);
-	}
-
-	if (ieee80211_is_probe_resp(hdr->frame_control) ||
-	    ieee80211_is_beacon(hdr->frame_control))
-		txwi_flags |= MT_TXWI_FLAGS_TS;
-
-	txwi->flags |= cpu_to_le16(txwi_flags);
-	txwi->len_ctl = cpu_to_le16(len);
-}
-EXPORT_SYMBOL_GPL(mt76x02_mac_write_txwi);
-
-static void
-mt76x02_tx_rate_fallback(struct ieee80211_tx_rate *rates, int idx, int phy)
-{
-	u8 mcs, nss;
-
-	if (!idx)
-		return;
-
-	rates += idx - 1;
-	rates[1] = rates[0];
-	switch (phy) {
-	case MT_PHY_TYPE_VHT:
-		mcs = ieee80211_rate_get_vht_mcs(rates);
-		nss = ieee80211_rate_get_vht_nss(rates);
-
-		if (mcs == 0)
-			nss = max_t(int, nss - 1, 1);
-		else
-			mcs--;
-
-		ieee80211_rate_set_vht(rates + 1, mcs, nss);
-		break;
-	case MT_PHY_TYPE_HT_GF:
-	case MT_PHY_TYPE_HT:
-		/* MCS 8 falls back to MCS 0 */
-		if (rates[0].idx == 8) {
-			rates[1].idx = 0;
-			break;
-		}
-		fallthrough;
-	default:
-		rates[1].idx = max_t(int, rates[0].idx - 1, 0);
-		break;
-	}
-}
-
-static void
-mt76x02_mac_fill_tx_status(struct mt76x02_dev *dev, struct mt76x02_sta *msta,
-			   struct ieee80211_tx_info *info,
-			   struct mt76x02_tx_status *st, int n_frames)
-{
-	struct ieee80211_tx_rate *rate = info->status.rates;
-	struct ieee80211_tx_rate last_rate;
-	u16 first_rate;
-	int retry = st->retry;
-	int phy;
-	int i;
-
-	if (!n_frames)
-		return;
-
-	phy = FIELD_GET(MT_RXWI_RATE_PHY, st->rate);
-
-	if (st->pktid & MT_PACKET_ID_HAS_RATE) {
-		first_rate = st->rate & ~MT_PKTID_RATE;
-		first_rate |= st->pktid & MT_PKTID_RATE;
-
-		mt76x02_mac_process_tx_rate(&rate[0], first_rate,
-					    dev->mphy.chandef.chan->band);
-	} else if (rate[0].idx < 0) {
-		if (!msta)
-			return;
-
-		mt76x02_mac_process_tx_rate(&rate[0], msta->wcid.tx_info,
-					    dev->mphy.chandef.chan->band);
-	}
-
-	mt76x02_mac_process_tx_rate(&last_rate, st->rate,
-				    dev->mphy.chandef.chan->band);
-
-	for (i = 0; i < ARRAY_SIZE(info->status.rates); i++) {
-		retry--;
-		if (i + 1 == ARRAY_SIZE(info->status.rates)) {
-			info->status.rates[i] = last_rate;
-			info->status.rates[i].count = max_t(int, retry, 1);
-			break;
-		}
-
-		mt76x02_tx_rate_fallback(info->status.rates, i, phy);
-		if (info->status.rates[i].idx == last_rate.idx)
-			break;
-	}
-
-	if (i + 1 < ARRAY_SIZE(info->status.rates)) {
-		info->status.rates[i + 1].idx = -1;
-		info->status.rates[i + 1].count = 0;
-	}
-
-	info->status.ampdu_len = n_frames;
-	info->status.ampdu_ack_len = st->success ? n_frames : 0;
-
-	if (st->aggr)
-		info->flags |= IEEE80211_TX_CTL_AMPDU |
-			       IEEE80211_TX_STAT_AMPDU;
-
-	if (!st->ack_req)
-		info->flags |= IEEE80211_TX_CTL_NO_ACK;
-	else if (st->success)
-		info->flags |= IEEE80211_TX_STAT_ACK;
-}
-
-void mt76x02_send_tx_status(struct mt76x02_dev *dev,
-			    struct mt76x02_tx_status *stat, u8 *update)
-{
-	struct ieee80211_tx_info info = {};
-	struct ieee80211_tx_status status = {
-		.info = &info
-	};
-	static const u8 ac_to_tid[4] = {
-		[IEEE80211_AC_BE] = 0,
-		[IEEE80211_AC_BK] = 1,
-		[IEEE80211_AC_VI] = 4,
-		[IEEE80211_AC_VO] = 6
-	};
-	struct mt76_wcid *wcid = NULL;
-	struct mt76x02_sta *msta = NULL;
-	struct mt76_dev *mdev = &dev->mt76;
-	struct sk_buff_head list;
-	u32 duration = 0;
-	u8 cur_pktid;
-	u32 ac = 0;
-	int len = 0;
-
-	if (stat->pktid == MT_PACKET_ID_NO_ACK)
-		return;
-
-	rcu_read_lock();
-
-	if (stat->wcid < MT76x02_N_WCIDS)
-		wcid = rcu_dereference(dev->mt76.wcid[stat->wcid]);
-
-	if (wcid && wcid->sta) {
-		void *priv;
-
-		priv = msta = container_of(wcid, struct mt76x02_sta, wcid);
-		status.sta = container_of(priv, struct ieee80211_sta,
-					  drv_priv);
-	}
-
-	mt76_tx_status_lock(mdev, &list);
-
-	if (wcid) {
-		if (mt76_is_skb_pktid(stat->pktid))
-			status.skb = mt76_tx_status_skb_get(mdev, wcid,
-							    stat->pktid, &list);
-		if (status.skb)
-			status.info = IEEE80211_SKB_CB(status.skb);
-	}
-
-	if (!status.skb && !(stat->pktid & MT_PACKET_ID_HAS_RATE)) {
-		mt76_tx_status_unlock(mdev, &list);
-		goto out;
-	}
-
-
-	if (msta && stat->aggr && !status.skb) {
-		u32 stat_val, stat_cache;
-
-		stat_val = stat->rate;
-		stat_val |= ((u32)stat->retry) << 16;
-		stat_cache = msta->status.rate;
-		stat_cache |= ((u32)msta->status.retry) << 16;
-
-		if (*update == 0 && stat_val == stat_cache &&
-		    stat->wcid == msta->status.wcid && msta->n_frames < 32) {
-			msta->n_frames++;
-			mt76_tx_status_unlock(mdev, &list);
-			goto out;
-		}
-
-		cur_pktid = msta->status.pktid;
-		mt76x02_mac_fill_tx_status(dev, msta, status.info,
-					   &msta->status, msta->n_frames);
-
-		msta->status = *stat;
-		msta->n_frames = 1;
-		*update = 0;
-	} else {
-		cur_pktid = stat->pktid;
-		mt76x02_mac_fill_tx_status(dev, msta, status.info, stat, 1);
-		*update = 1;
-	}
-
-	if (status.skb) {
-		info = *status.info;
-		len = status.skb->len;
-		ac = skb_get_queue_mapping(status.skb);
-		mt76_tx_status_skb_done(mdev, status.skb, &list);
-	} else if (msta) {
-		len = status.info->status.ampdu_len * ewma_pktlen_read(&msta->pktlen);
-		ac = FIELD_GET(MT_PKTID_AC, cur_pktid);
-	}
-
-	mt76_tx_status_unlock(mdev, &list);
-
-	if (!status.skb)
-		ieee80211_tx_status_ext(mt76_hw(dev), &status);
-
-	if (!len)
-		goto out;
-
-	duration = ieee80211_calc_tx_airtime(mt76_hw(dev), &info, len);
-
-	spin_lock_bh(&dev->mt76.cc_lock);
-	dev->tx_airtime += duration;
-	spin_unlock_bh(&dev->mt76.cc_lock);
-
-	if (msta)
-		ieee80211_sta_register_airtime(status.sta, ac_to_tid[ac], duration, 0);
-
-out:
-	rcu_read_unlock();
-}
-
-static int
-mt76x02_mac_process_rate(struct mt76x02_dev *dev,
-			 struct mt76_rx_status *status,
-			 u16 rate)
-{
-	u8 idx = FIELD_GET(MT_RXWI_RATE_INDEX, rate);
-
-	switch (FIELD_GET(MT_RXWI_RATE_PHY, rate)) {
-	case MT_PHY_TYPE_OFDM:
-		if (idx >= 8)
-			idx = 0;
-
-		if (status->band == NL80211_BAND_2GHZ)
-			idx += 4;
-
-		status->rate_idx = idx;
-		return 0;
-	case MT_PHY_TYPE_CCK:
-		if (idx >= 8) {
-			idx -= 8;
-			status->enc_flags |= RX_ENC_FLAG_SHORTPRE;
-		}
-
-		if (idx >= 4)
-			idx = 0;
-
-		status->rate_idx = idx;
-		return 0;
-	case MT_PHY_TYPE_HT_GF:
-		status->enc_flags |= RX_ENC_FLAG_HT_GF;
-		fallthrough;
-	case MT_PHY_TYPE_HT:
-		status->encoding = RX_ENC_HT;
-		status->rate_idx = idx;
-		break;
-	case MT_PHY_TYPE_VHT: {
-		u8 n_rxstream = dev->mphy.chainmask & 0xf;
-
-		status->encoding = RX_ENC_VHT;
-		status->rate_idx = FIELD_GET(MT_RATE_INDEX_VHT_IDX, idx);
-		status->nss = min_t(u8, n_rxstream,
-				    FIELD_GET(MT_RATE_INDEX_VHT_NSS, idx) + 1);
-		break;
-	}
-	default:
-		return -EINVAL;
-	}
-
-	if (rate & MT_RXWI_RATE_LDPC)
-		status->enc_flags |= RX_ENC_FLAG_LDPC;
-
-	if (rate & MT_RXWI_RATE_SGI)
-		status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-
-	if (rate & MT_RXWI_RATE_STBC)
-		status->enc_flags |= 1 << RX_ENC_FLAG_STBC_SHIFT;
-
-	switch (FIELD_GET(MT_RXWI_RATE_BW, rate)) {
-	case MT_PHY_BW_20:
-		break;
-	case MT_PHY_BW_40:
-		status->bw = RATE_INFO_BW_40;
-		break;
-	case MT_PHY_BW_80:
-		status->bw = RATE_INFO_BW_80;
-		break;
-	default:
-		break;
-	}
-
-	return 0;
-}
-
-void mt76x02_mac_setaddr(struct mt76x02_dev *dev, const u8 *addr)
-{
-	static const u8 null_addr[ETH_ALEN] = {};
-	int i;
-
-	ether_addr_copy(dev->mphy.macaddr, addr);
-
-	if (!is_valid_ether_addr(dev->mphy.macaddr)) {
-		eth_random_addr(dev->mphy.macaddr);
-		dev_info(dev->mt76.dev,
-			 "Invalid MAC address, using random address %pM\n",
-			 dev->mphy.macaddr);
-	}
-
-	mt76_wr(dev, MT_MAC_ADDR_DW0, get_unaligned_le32(dev->mphy.macaddr));
-	mt76_wr(dev, MT_MAC_ADDR_DW1,
-		get_unaligned_le16(dev->mphy.macaddr + 4) |
-		FIELD_PREP(MT_MAC_ADDR_DW1_U2ME_MASK, 0xff));
-
-	mt76_wr(dev, MT_MAC_BSSID_DW0,
-		get_unaligned_le32(dev->mphy.macaddr));
-	mt76_wr(dev, MT_MAC_BSSID_DW1,
-		get_unaligned_le16(dev->mphy.macaddr + 4) |
-		FIELD_PREP(MT_MAC_BSSID_DW1_MBSS_MODE, 3) | /* 8 APs + 8 STAs */
-		MT_MAC_BSSID_DW1_MBSS_LOCAL_BIT);
-	/* enable 7 additional beacon slots and control them with bypass mask */
-	mt76_rmw_field(dev, MT_MAC_BSSID_DW1, MT_MAC_BSSID_DW1_MBEACON_N, 7);
-
-	for (i = 0; i < 16; i++)
-		mt76x02_mac_set_bssid(dev, i, null_addr);
-}
-EXPORT_SYMBOL_GPL(mt76x02_mac_setaddr);
-
-static int
-mt76x02_mac_get_rssi(struct mt76x02_dev *dev, s8 rssi, int chain)
-{
-	struct mt76x02_rx_freq_cal *cal = &dev->cal.rx;
-
-	rssi += cal->rssi_offset[chain];
-	rssi -= cal->lna_gain;
-
-	return rssi;
-}
-
-int mt76x02_mac_process_rx(struct mt76x02_dev *dev, struct sk_buff *skb,
-			   void *rxi)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct ieee80211_hdr *hdr;
-	struct mt76x02_rxwi *rxwi = rxi;
-	struct mt76x02_sta *sta;
-	u32 rxinfo = le32_to_cpu(rxwi->rxinfo);
-	u32 ctl = le32_to_cpu(rxwi->ctl);
-	u16 rate = le16_to_cpu(rxwi->rate);
-	u16 tid_sn = le16_to_cpu(rxwi->tid_sn);
-	bool unicast = rxwi->rxinfo & cpu_to_le32(MT_RXINFO_UNICAST);
-	int pad_len = 0, nstreams = dev->mphy.chainmask & 0xf;
-	s8 signal;
-	u8 pn_len;
-	u8 wcid;
-	int len;
-
-	if (!test_bit(MT76_STATE_RUNNING, &dev->mphy.state))
-		return -EINVAL;
-
-	if (rxinfo & MT_RXINFO_L2PAD)
-		pad_len += 2;
-
-	if (rxinfo & MT_RXINFO_DECRYPT) {
-		status->flag |= RX_FLAG_DECRYPTED;
-		status->flag |= RX_FLAG_MMIC_STRIPPED;
-		status->flag |= RX_FLAG_MIC_STRIPPED;
-		status->flag |= RX_FLAG_IV_STRIPPED;
-	}
-
-	wcid = FIELD_GET(MT_RXWI_CTL_WCID, ctl);
-	sta = mt76x02_rx_get_sta(&dev->mt76, wcid);
-	status->wcid = mt76x02_rx_get_sta_wcid(sta, unicast);
-
-	len = FIELD_GET(MT_RXWI_CTL_MPDU_LEN, ctl);
-	pn_len = FIELD_GET(MT_RXINFO_PN_LEN, rxinfo);
-	if (pn_len) {
-		int offset = ieee80211_get_hdrlen_from_skb(skb) + pad_len;
-		u8 *data = skb->data + offset;
-
-		status->iv[0] = data[7];
-		status->iv[1] = data[6];
-		status->iv[2] = data[5];
-		status->iv[3] = data[4];
-		status->iv[4] = data[1];
-		status->iv[5] = data[0];
-
-		/*
-		 * Driver CCMP validation can't deal with fragments.
-		 * Let mac80211 take care of it.
-		 */
-		if (rxinfo & MT_RXINFO_FRAG) {
-			status->flag &= ~RX_FLAG_IV_STRIPPED;
-		} else {
-			pad_len += pn_len << 2;
-			len -= pn_len << 2;
-		}
-	}
-
-	mt76x02_remove_hdr_pad(skb, pad_len);
-
-	if ((rxinfo & MT_RXINFO_BA) && !(rxinfo & MT_RXINFO_NULL))
-		status->aggr = true;
-
-	if (rxinfo & MT_RXINFO_AMPDU) {
-		status->flag |= RX_FLAG_AMPDU_DETAILS;
-		status->ampdu_ref = dev->ampdu_ref;
-
-		/*
-		 * When receiving an A-MPDU subframe and RSSI info is not valid,
-		 * we can assume that more subframes belonging to the same A-MPDU
-		 * are coming. The last one will have valid RSSI info
-		 */
-		if (rxinfo & MT_RXINFO_RSSI) {
-			if (!++dev->ampdu_ref)
-				dev->ampdu_ref++;
-		}
-	}
-
-	if (WARN_ON_ONCE(len > skb->len))
-		return -EINVAL;
-
-	pskb_trim(skb, len);
-
-	status->chains = BIT(0);
-	signal = mt76x02_mac_get_rssi(dev, rxwi->rssi[0], 0);
-	status->chain_signal[0] = signal;
-	if (nstreams > 1) {
-		status->chains |= BIT(1);
-		status->chain_signal[1] = mt76x02_mac_get_rssi(dev,
-							       rxwi->rssi[1],
-							       1);
-	}
-	status->freq = dev->mphy.chandef.chan->center_freq;
-	status->band = dev->mphy.chandef.chan->band;
-
-	hdr = (struct ieee80211_hdr *)skb->data;
-	status->qos_ctl = *ieee80211_get_qos_ctl(hdr);
-	status->seqno = FIELD_GET(MT_RXWI_SN, tid_sn);
-
-	return mt76x02_mac_process_rate(dev, status, rate);
-}
-
-void mt76x02_mac_poll_tx_status(struct mt76x02_dev *dev, bool irq)
-{
-	struct mt76x02_tx_status stat = {};
-	u8 update = 1;
-	bool ret;
-
-	if (!test_bit(MT76_STATE_RUNNING, &dev->mphy.state))
-		return;
-
-	trace_mac_txstat_poll(dev);
-
-	while (!irq || !kfifo_is_full(&dev->txstatus_fifo)) {
-		if (!spin_trylock(&dev->txstatus_fifo_lock))
-			break;
-
-		ret = mt76x02_mac_load_tx_status(dev, &stat);
-		spin_unlock(&dev->txstatus_fifo_lock);
-
-		if (!ret)
-			break;
-
-		if (!irq) {
-			mt76x02_send_tx_status(dev, &stat, &update);
-			continue;
-		}
-
-		kfifo_put(&dev->txstatus_fifo, stat);
-	}
-}
-
-void mt76x02_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e)
-{
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	struct mt76x02_txwi *txwi;
-	u8 *txwi_ptr;
-
-	if (!e->txwi) {
-		dev_kfree_skb_any(e->skb);
-		return;
-	}
-
-	mt76x02_mac_poll_tx_status(dev, false);
-
-	txwi_ptr = mt76_get_txwi_ptr(mdev, e->txwi);
-	txwi = (struct mt76x02_txwi *)txwi_ptr;
-	trace_mac_txdone(mdev, txwi->wcid, txwi->pktid);
-
-	mt76_tx_complete_skb(mdev, e->wcid, e->skb);
-}
-EXPORT_SYMBOL_GPL(mt76x02_tx_complete_skb);
-
-void mt76x02_mac_set_rts_thresh(struct mt76x02_dev *dev, u32 val)
-{
-	u32 data = 0;
-
-	if (val != ~0)
-		data = FIELD_PREP(MT_PROT_CFG_CTRL, 1) |
-		       MT_PROT_CFG_RTS_THRESH;
-
-	mt76_rmw_field(dev, MT_TX_RTS_CFG, MT_TX_RTS_CFG_THRESH, val);
-
-	mt76_rmw(dev, MT_CCK_PROT_CFG,
-		 MT_PROT_CFG_CTRL | MT_PROT_CFG_RTS_THRESH, data);
-	mt76_rmw(dev, MT_OFDM_PROT_CFG,
-		 MT_PROT_CFG_CTRL | MT_PROT_CFG_RTS_THRESH, data);
-}
-
-void mt76x02_mac_set_tx_protection(struct mt76x02_dev *dev, bool legacy_prot,
-				   int ht_mode)
-{
-	int mode = ht_mode & IEEE80211_HT_OP_MODE_PROTECTION;
-	bool non_gf = !!(ht_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT);
-	u32 prot[6];
-	u32 vht_prot[3];
-	int i;
-	u16 rts_thr;
-
-	for (i = 0; i < ARRAY_SIZE(prot); i++) {
-		prot[i] = mt76_rr(dev, MT_CCK_PROT_CFG + i * 4);
-		prot[i] &= ~MT_PROT_CFG_CTRL;
-		if (i >= 2)
-			prot[i] &= ~MT_PROT_CFG_RATE;
-	}
-
-	for (i = 0; i < ARRAY_SIZE(vht_prot); i++) {
-		vht_prot[i] = mt76_rr(dev, MT_TX_PROT_CFG6 + i * 4);
-		vht_prot[i] &= ~(MT_PROT_CFG_CTRL | MT_PROT_CFG_RATE);
-	}
-
-	rts_thr = mt76_get_field(dev, MT_TX_RTS_CFG, MT_TX_RTS_CFG_THRESH);
-
-	if (rts_thr != 0xffff)
-		prot[0] |= MT_PROT_CTRL_RTS_CTS;
-
-	if (legacy_prot) {
-		prot[1] |= MT_PROT_CTRL_CTS2SELF;
-
-		prot[2] |= MT_PROT_RATE_CCK_11;
-		prot[3] |= MT_PROT_RATE_CCK_11;
-		prot[4] |= MT_PROT_RATE_CCK_11;
-		prot[5] |= MT_PROT_RATE_CCK_11;
-
-		vht_prot[0] |= MT_PROT_RATE_CCK_11;
-		vht_prot[1] |= MT_PROT_RATE_CCK_11;
-		vht_prot[2] |= MT_PROT_RATE_CCK_11;
-	} else {
-		if (rts_thr != 0xffff)
-			prot[1] |= MT_PROT_CTRL_RTS_CTS;
-
-		prot[2] |= MT_PROT_RATE_OFDM_24;
-		prot[3] |= MT_PROT_RATE_DUP_OFDM_24;
-		prot[4] |= MT_PROT_RATE_OFDM_24;
-		prot[5] |= MT_PROT_RATE_DUP_OFDM_24;
-
-		vht_prot[0] |= MT_PROT_RATE_OFDM_24;
-		vht_prot[1] |= MT_PROT_RATE_DUP_OFDM_24;
-		vht_prot[2] |= MT_PROT_RATE_SGI_OFDM_24;
-	}
-
-	switch (mode) {
-	case IEEE80211_HT_OP_MODE_PROTECTION_NONMEMBER:
-	case IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED:
-		prot[2] |= MT_PROT_CTRL_RTS_CTS;
-		prot[3] |= MT_PROT_CTRL_RTS_CTS;
-		prot[4] |= MT_PROT_CTRL_RTS_CTS;
-		prot[5] |= MT_PROT_CTRL_RTS_CTS;
-		vht_prot[0] |= MT_PROT_CTRL_RTS_CTS;
-		vht_prot[1] |= MT_PROT_CTRL_RTS_CTS;
-		vht_prot[2] |= MT_PROT_CTRL_RTS_CTS;
-		break;
-	case IEEE80211_HT_OP_MODE_PROTECTION_20MHZ:
-		prot[3] |= MT_PROT_CTRL_RTS_CTS;
-		prot[5] |= MT_PROT_CTRL_RTS_CTS;
-		vht_prot[1] |= MT_PROT_CTRL_RTS_CTS;
-		vht_prot[2] |= MT_PROT_CTRL_RTS_CTS;
-		break;
-	}
-
-	if (non_gf) {
-		prot[4] |= MT_PROT_CTRL_RTS_CTS;
-		prot[5] |= MT_PROT_CTRL_RTS_CTS;
-	}
-
-	for (i = 0; i < ARRAY_SIZE(prot); i++)
-		mt76_wr(dev, MT_CCK_PROT_CFG + i * 4, prot[i]);
-
-	for (i = 0; i < ARRAY_SIZE(vht_prot); i++)
-		mt76_wr(dev, MT_TX_PROT_CFG6 + i * 4, vht_prot[i]);
-}
-
-void mt76x02_update_channel(struct mt76_phy *mphy)
-{
-	struct mt76x02_dev *dev = container_of(mphy->dev, struct mt76x02_dev, mt76);
-	struct mt76_channel_state *state;
-
-	state = mphy->chan_state;
-	state->cc_busy += mt76_rr(dev, MT_CH_BUSY);
-
-	spin_lock_bh(&dev->mt76.cc_lock);
-	state->cc_tx += dev->tx_airtime;
-	dev->tx_airtime = 0;
-	spin_unlock_bh(&dev->mt76.cc_lock);
-}
-EXPORT_SYMBOL_GPL(mt76x02_update_channel);
-
-static void mt76x02_check_mac_err(struct mt76x02_dev *dev)
-{
-	if (dev->mt76.beacon_mask) {
-		if (mt76_rr(dev, MT_TX_STA_0) & MT_TX_STA_0_BEACONS) {
-			dev->beacon_hang_check = 0;
-			return;
-		}
-
-		if (dev->beacon_hang_check < 10)
-			return;
-
-	} else {
-		u32 val = mt76_rr(dev, 0x10f4);
-		if (!(val & BIT(29)) || !(val & (BIT(7) | BIT(5))))
-			return;
-	}
-
-	dev_err(dev->mt76.dev, "MAC error detected\n");
-
-	mt76_wr(dev, MT_MAC_SYS_CTRL, 0);
-	if (!mt76x02_wait_for_txrx_idle(&dev->mt76)) {
-		dev_err(dev->mt76.dev, "MAC stop failed\n");
-		goto out;
-	}
-
-	dev->beacon_hang_check = 0;
-	mt76_set(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_RESET_CSR);
-	udelay(10);
-
-out:
-	mt76_wr(dev, MT_MAC_SYS_CTRL,
-		MT_MAC_SYS_CTRL_ENABLE_TX | MT_MAC_SYS_CTRL_ENABLE_RX);
-}
-
-static void
-mt76x02_edcca_tx_enable(struct mt76x02_dev *dev, bool enable)
-{
-	if (enable) {
-		u32 data;
-
-		mt76_set(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_TX);
-		mt76_set(dev, MT_AUTO_RSP_CFG, MT_AUTO_RSP_EN);
-		/* enable pa-lna */
-		data = mt76_rr(dev, MT_TX_PIN_CFG);
-		data |= MT_TX_PIN_CFG_TXANT |
-			MT_TX_PIN_CFG_RXANT |
-			MT_TX_PIN_RFTR_EN |
-			MT_TX_PIN_TRSW_EN;
-		mt76_wr(dev, MT_TX_PIN_CFG, data);
-	} else {
-		mt76_clear(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_TX);
-		mt76_clear(dev, MT_AUTO_RSP_CFG, MT_AUTO_RSP_EN);
-		/* disable pa-lna */
-		mt76_clear(dev, MT_TX_PIN_CFG, MT_TX_PIN_CFG_TXANT);
-		mt76_clear(dev, MT_TX_PIN_CFG, MT_TX_PIN_CFG_RXANT);
-	}
-	dev->ed_tx_blocked = !enable;
-}
-
-void mt76x02_edcca_init(struct mt76x02_dev *dev)
-{
-	dev->ed_trigger = 0;
-	dev->ed_silent = 0;
-
-	if (dev->ed_monitor) {
-		struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-		u8 ed_th = chan->band == NL80211_BAND_5GHZ ? 0x0e : 0x20;
-
-		mt76_clear(dev, MT_TX_LINK_CFG, MT_TX_CFACK_EN);
-		mt76_set(dev, MT_TXOP_CTRL_CFG, MT_TXOP_ED_CCA_EN);
-		mt76_rmw(dev, MT_BBP(AGC, 2), GENMASK(15, 0),
-			 ed_th << 8 | ed_th);
-		mt76_set(dev, MT_TXOP_HLDR_ET, MT_TXOP_HLDR_TX40M_BLK_EN);
-	} else {
-		mt76_set(dev, MT_TX_LINK_CFG, MT_TX_CFACK_EN);
-		mt76_clear(dev, MT_TXOP_CTRL_CFG, MT_TXOP_ED_CCA_EN);
-		if (is_mt76x2(dev)) {
-			mt76_wr(dev, MT_BBP(AGC, 2), 0x00007070);
-			mt76_set(dev, MT_TXOP_HLDR_ET,
-				 MT_TXOP_HLDR_TX40M_BLK_EN);
-		} else {
-			mt76_wr(dev, MT_BBP(AGC, 2), 0x003a6464);
-			mt76_clear(dev, MT_TXOP_HLDR_ET,
-				   MT_TXOP_HLDR_TX40M_BLK_EN);
-		}
-	}
-	mt76x02_edcca_tx_enable(dev, true);
-	dev->ed_monitor_learning = true;
-
-	/* clear previous CCA timer value */
-	mt76_rr(dev, MT_ED_CCA_TIMER);
-	dev->ed_time = ktime_get_boottime();
-}
-EXPORT_SYMBOL_GPL(mt76x02_edcca_init);
-
-#define MT_EDCCA_TH		92
-#define MT_EDCCA_BLOCK_TH	2
-#define MT_EDCCA_LEARN_TH	50
-#define MT_EDCCA_LEARN_CCA	180
-#define MT_EDCCA_LEARN_TIMEOUT	(20 * HZ)
-
-static void mt76x02_edcca_check(struct mt76x02_dev *dev)
-{
-	ktime_t cur_time;
-	u32 active, val, busy;
-
-	cur_time = ktime_get_boottime();
-	val = mt76_rr(dev, MT_ED_CCA_TIMER);
-
-	active = ktime_to_us(ktime_sub(cur_time, dev->ed_time));
-	dev->ed_time = cur_time;
-
-	busy = (val * 100) / active;
-	busy = min_t(u32, busy, 100);
-
-	if (busy > MT_EDCCA_TH) {
-		dev->ed_trigger++;
-		dev->ed_silent = 0;
-	} else {
-		dev->ed_silent++;
-		dev->ed_trigger = 0;
-	}
-
-	if (dev->cal.agc_lowest_gain &&
-	    dev->cal.false_cca > MT_EDCCA_LEARN_CCA &&
-	    dev->ed_trigger > MT_EDCCA_LEARN_TH) {
-		dev->ed_monitor_learning = false;
-		dev->ed_trigger_timeout = jiffies + 20 * HZ;
-	} else if (!dev->ed_monitor_learning &&
-		   time_is_after_jiffies(dev->ed_trigger_timeout)) {
-		dev->ed_monitor_learning = true;
-		mt76x02_edcca_tx_enable(dev, true);
-	}
-
-	if (dev->ed_monitor_learning)
-		return;
-
-	if (dev->ed_trigger > MT_EDCCA_BLOCK_TH && !dev->ed_tx_blocked)
-		mt76x02_edcca_tx_enable(dev, false);
-	else if (dev->ed_silent > MT_EDCCA_BLOCK_TH && dev->ed_tx_blocked)
-		mt76x02_edcca_tx_enable(dev, true);
-}
-
-void mt76x02_mac_work(struct work_struct *work)
-{
-	struct mt76x02_dev *dev = container_of(work, struct mt76x02_dev,
-					       mphy.mac_work.work);
-	int i, idx;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt76_update_survey(&dev->mphy);
-	for (i = 0, idx = 0; i < 16; i++) {
-		u32 val = mt76_rr(dev, MT_TX_AGG_CNT(i));
-
-		dev->mt76.aggr_stats[idx++] += val & 0xffff;
-		dev->mt76.aggr_stats[idx++] += val >> 16;
-	}
-
-	mt76x02_check_mac_err(dev);
-
-	if (dev->ed_monitor)
-		mt76x02_edcca_check(dev);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	mt76_tx_status_check(&dev->mt76, false);
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mphy.mac_work,
-				     MT_MAC_WORK_INTERVAL);
-}
-
-void mt76x02_mac_cc_reset(struct mt76x02_dev *dev)
-{
-	dev->mphy.survey_time = ktime_get_boottime();
-
-	mt76_wr(dev, MT_CH_TIME_CFG,
-		MT_CH_TIME_CFG_TIMER_EN |
-		MT_CH_TIME_CFG_TX_AS_BUSY |
-		MT_CH_TIME_CFG_RX_AS_BUSY |
-		MT_CH_TIME_CFG_NAV_AS_BUSY |
-		MT_CH_TIME_CFG_EIFS_AS_BUSY |
-		MT_CH_CCA_RC_EN |
-		FIELD_PREP(MT_CH_TIME_CFG_CH_TIMER_CLR, 1));
-
-	/* channel cycle counters read-and-clear */
-	mt76_rr(dev, MT_CH_BUSY);
-	mt76_rr(dev, MT_CH_IDLE);
-}
-EXPORT_SYMBOL_GPL(mt76x02_mac_cc_reset);
-
-void mt76x02_mac_set_bssid(struct mt76x02_dev *dev, u8 idx, const u8 *addr)
-{
-	idx &= 7;
-	mt76_wr(dev, MT_MAC_APC_BSSID_L(idx), get_unaligned_le32(addr));
-	mt76_rmw_field(dev, MT_MAC_APC_BSSID_H(idx), MT_MAC_APC_BSSID_H_ADDR,
-		       get_unaligned_le16(addr + 4));
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mac.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mac.h
deleted file mode 100644
index 5dc6c83..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mac.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- */
-
-#ifndef __MT76X02_MAC_H
-#define __MT76X02_MAC_H
-
-struct mt76x02_dev;
-
-struct mt76x02_tx_status {
-	u8 valid:1;
-	u8 success:1;
-	u8 aggr:1;
-	u8 ack_req:1;
-	u8 wcid;
-	u8 pktid;
-	u8 retry;
-	u16 rate;
-} __packed __aligned(2);
-
-#define MT_VIF_WCID(_n)		(254 - ((_n) & 7))
-#define MT_MAX_VIFS		8
-
-#define MT_PKTID_RATE		GENMASK(4, 0)
-#define MT_PKTID_AC		GENMASK(6, 5)
-
-struct mt76x02_vif {
-	struct mt76_wcid group_wcid; /* must be first */
-	u8 idx;
-};
-
-DECLARE_EWMA(pktlen, 8, 8);
-
-struct mt76x02_sta {
-	struct mt76_wcid wcid; /* must be first */
-
-	struct mt76x02_vif *vif;
-	struct mt76x02_tx_status status;
-	int n_frames;
-
-	struct ewma_pktlen pktlen;
-};
-
-#define MT_RXINFO_BA			BIT(0)
-#define MT_RXINFO_DATA			BIT(1)
-#define MT_RXINFO_NULL			BIT(2)
-#define MT_RXINFO_FRAG			BIT(3)
-#define MT_RXINFO_UNICAST		BIT(4)
-#define MT_RXINFO_MULTICAST		BIT(5)
-#define MT_RXINFO_BROADCAST		BIT(6)
-#define MT_RXINFO_MYBSS			BIT(7)
-#define MT_RXINFO_CRCERR		BIT(8)
-#define MT_RXINFO_ICVERR		BIT(9)
-#define MT_RXINFO_MICERR		BIT(10)
-#define MT_RXINFO_AMSDU			BIT(11)
-#define MT_RXINFO_HTC			BIT(12)
-#define MT_RXINFO_RSSI			BIT(13)
-#define MT_RXINFO_L2PAD			BIT(14)
-#define MT_RXINFO_AMPDU			BIT(15)
-#define MT_RXINFO_DECRYPT		BIT(16)
-#define MT_RXINFO_BSSIDX3		BIT(17)
-#define MT_RXINFO_WAPI_KEY		BIT(18)
-#define MT_RXINFO_PN_LEN		GENMASK(21, 19)
-#define MT_RXINFO_SW_FTYPE0		BIT(22)
-#define MT_RXINFO_SW_FTYPE1		BIT(23)
-#define MT_RXINFO_PROBE_RESP		BIT(24)
-#define MT_RXINFO_BEACON		BIT(25)
-#define MT_RXINFO_DISASSOC		BIT(26)
-#define MT_RXINFO_DEAUTH		BIT(27)
-#define MT_RXINFO_ACTION		BIT(28)
-#define MT_RXINFO_TCP_SUM_ERR		BIT(30)
-#define MT_RXINFO_IP_SUM_ERR		BIT(31)
-
-#define MT_RXWI_CTL_WCID		GENMASK(7, 0)
-#define MT_RXWI_CTL_KEY_IDX		GENMASK(9, 8)
-#define MT_RXWI_CTL_BSS_IDX		GENMASK(12, 10)
-#define MT_RXWI_CTL_UDF			GENMASK(15, 13)
-#define MT_RXWI_CTL_MPDU_LEN		GENMASK(29, 16)
-#define MT_RXWI_CTL_EOF			BIT(31)
-
-#define MT_RXWI_TID			GENMASK(3, 0)
-#define MT_RXWI_SN			GENMASK(15, 4)
-
-#define MT_RXWI_RATE_INDEX		GENMASK(5, 0)
-#define MT_RXWI_RATE_LDPC		BIT(6)
-#define MT_RXWI_RATE_BW			GENMASK(8, 7)
-#define MT_RXWI_RATE_SGI		BIT(9)
-#define MT_RXWI_RATE_STBC		BIT(10)
-#define MT_RXWI_RATE_LDPC_EXSYM		BIT(11)
-#define MT_RXWI_RATE_PHY		GENMASK(15, 13)
-
-#define MT_RATE_INDEX_VHT_IDX		GENMASK(3, 0)
-#define MT_RATE_INDEX_VHT_NSS		GENMASK(5, 4)
-
-struct mt76x02_rxwi {
-	__le32 rxinfo;
-
-	__le32 ctl;
-
-	__le16 tid_sn;
-	__le16 rate;
-
-	u8 rssi[4];
-
-	__le32 bbp_rxinfo[4];
-};
-
-#define MT_TX_PWR_ADJ			GENMASK(3, 0)
-
-enum mt76x2_phy_bandwidth {
-	MT_PHY_BW_20,
-	MT_PHY_BW_40,
-	MT_PHY_BW_80,
-};
-
-#define MT_TXWI_FLAGS_FRAG		BIT(0)
-#define MT_TXWI_FLAGS_MMPS		BIT(1)
-#define MT_TXWI_FLAGS_CFACK		BIT(2)
-#define MT_TXWI_FLAGS_TS		BIT(3)
-#define MT_TXWI_FLAGS_AMPDU		BIT(4)
-#define MT_TXWI_FLAGS_MPDU_DENSITY	GENMASK(7, 5)
-#define MT_TXWI_FLAGS_TXOP		GENMASK(9, 8)
-#define MT_TXWI_FLAGS_NDPS		BIT(10)
-#define MT_TXWI_FLAGS_RTSBWSIG		BIT(11)
-#define MT_TXWI_FLAGS_NDP_BW		GENMASK(13, 12)
-#define MT_TXWI_FLAGS_SOUND		BIT(14)
-#define MT_TXWI_FLAGS_TX_RATE_LUT	BIT(15)
-
-#define MT_TXWI_ACK_CTL_REQ		BIT(0)
-#define MT_TXWI_ACK_CTL_NSEQ		BIT(1)
-#define MT_TXWI_ACK_CTL_BA_WINDOW	GENMASK(7, 2)
-
-struct mt76x02_txwi {
-	__le16 flags;
-	__le16 rate;
-	u8 ack_ctl;
-	u8 wcid;
-	__le16 len_ctl;
-	__le32 iv;
-	__le32 eiv;
-	u8 aid;
-	u8 txstream;
-	u8 ctl2;
-	u8 pktid;
-} __packed __aligned(4);
-
-static inline bool mt76x02_wait_for_mac(struct mt76_dev *dev)
-{
-	const u32 MAC_CSR0 = 0x1000;
-	int i;
-
-	for (i = 0; i < 500; i++) {
-		if (test_bit(MT76_REMOVED, &dev->phy.state))
-			return false;
-
-		switch (dev->bus->rr(dev, MAC_CSR0)) {
-		case 0:
-		case ~0:
-			break;
-		default:
-			return true;
-		}
-		usleep_range(5000, 10000);
-	}
-	return false;
-}
-
-void mt76x02_mac_reset_counters(struct mt76x02_dev *dev);
-void mt76x02_mac_set_short_preamble(struct mt76x02_dev *dev, bool enable);
-int mt76x02_mac_shared_key_setup(struct mt76x02_dev *dev, u8 vif_idx,
-				 u8 key_idx, struct ieee80211_key_conf *key);
-int mt76x02_mac_wcid_set_key(struct mt76x02_dev *dev, u8 idx,
-			     struct ieee80211_key_conf *key);
-void mt76x02_mac_wcid_sync_pn(struct mt76x02_dev *dev, u8 idx,
-			      struct ieee80211_key_conf *key);
-void mt76x02_mac_wcid_setup(struct mt76x02_dev *dev, u8 idx, u8 vif_idx,
-			    u8 *mac);
-void mt76x02_mac_wcid_set_drop(struct mt76x02_dev *dev, u8 idx, bool drop);
-void mt76x02_mac_wcid_set_rate(struct mt76x02_dev *dev, struct mt76_wcid *wcid,
-			       const struct ieee80211_tx_rate *rate);
-bool mt76x02_mac_load_tx_status(struct mt76x02_dev *dev,
-				struct mt76x02_tx_status *stat);
-void mt76x02_send_tx_status(struct mt76x02_dev *dev,
-			    struct mt76x02_tx_status *stat, u8 *update);
-int mt76x02_mac_process_rx(struct mt76x02_dev *dev, struct sk_buff *skb,
-			   void *rxi);
-void mt76x02_mac_set_tx_protection(struct mt76x02_dev *dev, bool legacy_prot,
-				   int ht_mode);
-void mt76x02_mac_set_rts_thresh(struct mt76x02_dev *dev, u32 val);
-void mt76x02_mac_setaddr(struct mt76x02_dev *dev, const u8 *addr);
-void mt76x02_mac_write_txwi(struct mt76x02_dev *dev, struct mt76x02_txwi *txwi,
-			    struct sk_buff *skb, struct mt76_wcid *wcid,
-			    struct ieee80211_sta *sta, int len);
-void mt76x02_mac_poll_tx_status(struct mt76x02_dev *dev, bool irq);
-void mt76x02_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e);
-void mt76x02_update_channel(struct mt76_phy *mphy);
-void mt76x02_mac_work(struct work_struct *work);
-
-void mt76x02_mac_cc_reset(struct mt76x02_dev *dev);
-void mt76x02_mac_set_bssid(struct mt76x02_dev *dev, u8 idx, const u8 *addr);
-void mt76x02_mac_set_beacon(struct mt76x02_dev *dev, struct sk_buff *skb);
-void mt76x02_mac_set_beacon_enable(struct mt76x02_dev *dev,
-				   struct ieee80211_vif *vif, bool enable);
-
-void mt76x02_edcca_init(struct mt76x02_dev *dev);
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mcu.c
deleted file mode 100644
index 7597882..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mcu.c
+++ /dev/null
@@ -1,171 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/firmware.h>
-#include <linux/delay.h>
-
-#include "mt76x02_mcu.h"
-
-int mt76x02_mcu_parse_response(struct mt76_dev *mdev, int cmd,
-			       struct sk_buff *skb, int seq)
-{
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	u32 *rxfce;
-
-	if (!skb) {
-		dev_err(mdev->dev, "MCU message %02x (seq %d) timed out\n",
-			abs(cmd), seq);
-		dev->mcu_timeout = 1;
-		return -ETIMEDOUT;
-	}
-
-	rxfce = (u32 *)skb->cb;
-	if (seq != FIELD_GET(MT_RX_FCE_INFO_CMD_SEQ, *rxfce))
-		return -EAGAIN;
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_mcu_parse_response);
-
-int mt76x02_mcu_msg_send(struct mt76_dev *mdev, int cmd, const void *data,
-			 int len, bool wait_resp)
-{
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	unsigned long expires = jiffies + HZ;
-	struct sk_buff *skb;
-	u32 tx_info;
-	int ret;
-	u8 seq;
-
-	if (dev->mcu_timeout)
-		return -EIO;
-
-	skb = mt76_mcu_msg_alloc(mdev, data, len);
-	if (!skb)
-		return -ENOMEM;
-
-	mutex_lock(&mdev->mcu.mutex);
-
-	seq = ++mdev->mcu.msg_seq & 0xf;
-	if (!seq)
-		seq = ++mdev->mcu.msg_seq & 0xf;
-
-	tx_info = MT_MCU_MSG_TYPE_CMD |
-		  FIELD_PREP(MT_MCU_MSG_CMD_TYPE, cmd) |
-		  FIELD_PREP(MT_MCU_MSG_CMD_SEQ, seq) |
-		  FIELD_PREP(MT_MCU_MSG_PORT, CPU_TX_PORT) |
-		  FIELD_PREP(MT_MCU_MSG_LEN, skb->len);
-
-	ret = mt76_tx_queue_skb_raw(dev, mdev->q_mcu[MT_MCUQ_WM], skb, tx_info);
-	if (ret)
-		goto out;
-
-	while (wait_resp) {
-		skb = mt76_mcu_get_response(&dev->mt76, expires);
-		ret = mt76x02_mcu_parse_response(mdev, cmd, skb, seq);
-		dev_kfree_skb(skb);
-		if (ret != -EAGAIN)
-			break;
-	}
-
-out:
-	mutex_unlock(&mdev->mcu.mutex);
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt76x02_mcu_msg_send);
-
-int mt76x02_mcu_function_select(struct mt76x02_dev *dev, enum mcu_function func,
-				u32 val)
-{
-	struct {
-		__le32 id;
-		__le32 value;
-	} __packed __aligned(4) msg = {
-		.id = cpu_to_le32(func),
-		.value = cpu_to_le32(val),
-	};
-	bool wait = false;
-
-	if (func != Q_SELECT)
-		wait = true;
-
-	return mt76_mcu_send_msg(&dev->mt76, CMD_FUN_SET_OP, &msg,
-				 sizeof(msg), wait);
-}
-EXPORT_SYMBOL_GPL(mt76x02_mcu_function_select);
-
-int mt76x02_mcu_set_radio_state(struct mt76x02_dev *dev, bool on)
-{
-	struct {
-		__le32 mode;
-		__le32 level;
-	} __packed __aligned(4) msg = {
-		.mode = cpu_to_le32(on ? RADIO_ON : RADIO_OFF),
-		.level = cpu_to_le32(0),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, CMD_POWER_SAVING_OP, &msg,
-				 sizeof(msg), false);
-}
-EXPORT_SYMBOL_GPL(mt76x02_mcu_set_radio_state);
-
-int mt76x02_mcu_calibrate(struct mt76x02_dev *dev, int type, u32 param)
-{
-	struct {
-		__le32 id;
-		__le32 value;
-	} __packed __aligned(4) msg = {
-		.id = cpu_to_le32(type),
-		.value = cpu_to_le32(param),
-	};
-	bool is_mt76x2e = mt76_is_mmio(&dev->mt76) && is_mt76x2(dev);
-	int ret;
-
-	if (is_mt76x2e)
-		mt76_rmw(dev, MT_MCU_COM_REG0, BIT(31), 0);
-
-	ret = mt76_mcu_send_msg(&dev->mt76, CMD_CALIBRATION_OP, &msg,
-				sizeof(msg), true);
-	if (ret)
-		return ret;
-
-	if (is_mt76x2e &&
-	    WARN_ON(!mt76_poll_msec(dev, MT_MCU_COM_REG0,
-				    BIT(31), BIT(31), 100)))
-		return -ETIMEDOUT;
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_mcu_calibrate);
-
-int mt76x02_mcu_cleanup(struct mt76x02_dev *dev)
-{
-	struct sk_buff *skb;
-
-	mt76_wr(dev, MT_MCU_INT_LEVEL, 1);
-	usleep_range(20000, 30000);
-
-	while ((skb = skb_dequeue(&dev->mt76.mcu.res_q)) != NULL)
-		dev_kfree_skb(skb);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_mcu_cleanup);
-
-void mt76x02_set_ethtool_fwver(struct mt76x02_dev *dev,
-			       const struct mt76x02_fw_header *h)
-{
-	u16 bld = le16_to_cpu(h->build_ver);
-	u16 ver = le16_to_cpu(h->fw_ver);
-
-	snprintf(dev->mt76.hw->wiphy->fw_version,
-		 sizeof(dev->mt76.hw->wiphy->fw_version),
-		 "%d.%d.%02d-b%x",
-		 (ver >> 12) & 0xf, (ver >> 8) & 0xf, ver & 0xf, bld);
-}
-EXPORT_SYMBOL_GPL(mt76x02_set_ethtool_fwver);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mcu.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mcu.h
deleted file mode 100644
index e187ed5..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mcu.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#ifndef __MT76x02_MCU_H
-#define __MT76x02_MCU_H
-
-#include "mt76x02.h"
-
-#define MT_MCU_RESET_CTL		0x070C
-#define MT_MCU_INT_LEVEL		0x0718
-#define MT_MCU_COM_REG0			0x0730
-#define MT_MCU_COM_REG1			0x0734
-#define MT_MCU_COM_REG2			0x0738
-#define MT_MCU_COM_REG3			0x073C
-
-#define MT_INBAND_PACKET_MAX_LEN	192
-#define MT_MCU_MEMMAP_WLAN		0x410000
-
-#define MT_MCU_PCIE_REMAP_BASE4		0x074C
-
-#define MT_MCU_SEMAPHORE_00		0x07B0
-#define MT_MCU_SEMAPHORE_01		0x07B4
-#define MT_MCU_SEMAPHORE_02		0x07B8
-#define MT_MCU_SEMAPHORE_03		0x07BC
-
-#define MT_MCU_ILM_ADDR			0x80000
-
-enum mcu_cmd {
-	CMD_FUN_SET_OP = 1,
-	CMD_LOAD_CR = 2,
-	CMD_INIT_GAIN_OP = 3,
-	CMD_DYNC_VGA_OP = 6,
-	CMD_TDLS_CH_SW = 7,
-	CMD_BURST_WRITE = 8,
-	CMD_READ_MODIFY_WRITE = 9,
-	CMD_RANDOM_READ = 10,
-	CMD_BURST_READ = 11,
-	CMD_RANDOM_WRITE = 12,
-	CMD_LED_MODE_OP = 16,
-	CMD_POWER_SAVING_OP = 20,
-	CMD_WOW_CONFIG = 21,
-	CMD_WOW_QUERY = 22,
-	CMD_WOW_FEATURE = 24,
-	CMD_CARRIER_DETECT_OP = 28,
-	CMD_RADOR_DETECT_OP = 29,
-	CMD_SWITCH_CHANNEL_OP = 30,
-	CMD_CALIBRATION_OP = 31,
-	CMD_BEACON_OP = 32,
-	CMD_ANTENNA_OP = 33,
-};
-
-enum mcu_power_mode {
-	RADIO_OFF = 0x30,
-	RADIO_ON = 0x31,
-	RADIO_OFF_AUTO_WAKEUP = 0x32,
-	RADIO_OFF_ADVANCE = 0x33,
-	RADIO_ON_ADVANCE = 0x34,
-};
-
-enum mcu_function {
-	Q_SELECT = 1,
-	BW_SETTING = 2,
-	USB2_SW_DISCONNECT = 2,
-	USB3_SW_DISCONNECT = 3,
-	LOG_FW_DEBUG_MSG = 4,
-	GET_FW_VERSION = 5,
-};
-
-struct mt76x02_fw_header {
-	__le32 ilm_len;
-	__le32 dlm_len;
-	__le16 build_ver;
-	__le16 fw_ver;
-	u8 pad[4];
-	char build_time[16];
-};
-
-struct mt76x02_patch_header {
-	char build_time[16];
-	char platform[4];
-	char hw_version[4];
-	char patch_version[4];
-	u8 pad[2];
-};
-
-int mt76x02_mcu_cleanup(struct mt76x02_dev *dev);
-int mt76x02_mcu_calibrate(struct mt76x02_dev *dev, int type, u32 param);
-int mt76x02_mcu_msg_send(struct mt76_dev *mdev, int cmd, const void *data,
-			 int len, bool wait_resp);
-int mt76x02_mcu_parse_response(struct mt76_dev *mdev, int cmd,
-			       struct sk_buff *skb, int seq);
-int mt76x02_mcu_function_select(struct mt76x02_dev *dev, enum mcu_function func,
-				u32 val);
-int mt76x02_mcu_set_radio_state(struct mt76x02_dev *dev, bool on);
-void mt76x02_set_ethtool_fwver(struct mt76x02_dev *dev,
-			       const struct mt76x02_fw_header *h);
-
-#endif /* __MT76x02_MCU_H */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mmio.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mmio.c
deleted file mode 100644
index 648f4ab..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_mmio.c
+++ /dev/null
@@ -1,556 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/irq.h>
-
-#include "mt76x02.h"
-#include "mt76x02_mcu.h"
-#include "trace.h"
-
-static void mt76x02_pre_tbtt_tasklet(struct tasklet_struct *t)
-{
-	struct mt76x02_dev *dev = from_tasklet(dev, t, mt76.pre_tbtt_tasklet);
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt76_queue *q = dev->mphy.q_tx[MT_TXQ_PSD];
-	struct beacon_bc_data data = {};
-	struct sk_buff *skb;
-	int i;
-
-	if (mt76_hw(dev)->conf.flags & IEEE80211_CONF_OFFCHANNEL)
-		return;
-
-	mt76x02_resync_beacon_timer(dev);
-
-	/* Prevent corrupt transmissions during update */
-	mt76_set(dev, MT_BCN_BYPASS_MASK, 0xffff);
-	dev->beacon_data_count = 0;
-
-	ieee80211_iterate_active_interfaces_atomic(mt76_hw(dev),
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		mt76x02_update_beacon_iter, dev);
-
-	mt76_wr(dev, MT_BCN_BYPASS_MASK,
-		0xff00 | ~(0xff00 >> dev->beacon_data_count));
-
-	mt76_csa_check(mdev);
-
-	if (mdev->csa_complete)
-		return;
-
-	mt76x02_enqueue_buffered_bc(dev, &data, 8);
-
-	if (!skb_queue_len(&data.q))
-		return;
-
-	for (i = 0; i < ARRAY_SIZE(data.tail); i++) {
-		if (!data.tail[i])
-			continue;
-
-		mt76_skb_set_moredata(data.tail[i], false);
-	}
-
-	spin_lock(&q->lock);
-	while ((skb = __skb_dequeue(&data.q)) != NULL) {
-		struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-		struct ieee80211_vif *vif = info->control.vif;
-		struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
-
-		mt76_tx_queue_skb(dev, q, MT_TXQ_PSD, skb, &mvif->group_wcid,
-				  NULL);
-	}
-	spin_unlock(&q->lock);
-}
-
-static void mt76x02e_pre_tbtt_enable(struct mt76x02_dev *dev, bool en)
-{
-	if (en)
-		tasklet_enable(&dev->mt76.pre_tbtt_tasklet);
-	else
-		tasklet_disable(&dev->mt76.pre_tbtt_tasklet);
-}
-
-static void mt76x02e_beacon_enable(struct mt76x02_dev *dev, bool en)
-{
-	mt76_rmw_field(dev, MT_INT_TIMER_EN, MT_INT_TIMER_EN_PRE_TBTT_EN, en);
-	if (en)
-		mt76x02_irq_enable(dev, MT_INT_PRE_TBTT | MT_INT_TBTT);
-	else
-		mt76x02_irq_disable(dev, MT_INT_PRE_TBTT | MT_INT_TBTT);
-}
-
-void mt76x02e_init_beacon_config(struct mt76x02_dev *dev)
-{
-	static const struct mt76x02_beacon_ops beacon_ops = {
-		.nslots = 8,
-		.slot_size = 1024,
-		.pre_tbtt_enable = mt76x02e_pre_tbtt_enable,
-		.beacon_enable = mt76x02e_beacon_enable,
-	};
-
-	dev->beacon_ops = &beacon_ops;
-
-	/* Fire a pre-TBTT interrupt 8 ms before TBTT */
-	mt76_rmw_field(dev, MT_INT_TIMER_CFG, MT_INT_TIMER_CFG_PRE_TBTT,
-		       8 << 4);
-	mt76_rmw_field(dev, MT_INT_TIMER_CFG, MT_INT_TIMER_CFG_GP_TIMER,
-		       MT_DFS_GP_INTERVAL);
-	mt76_wr(dev, MT_INT_TIMER_EN, 0);
-
-	mt76x02_init_beacon_config(dev);
-}
-EXPORT_SYMBOL_GPL(mt76x02e_init_beacon_config);
-
-static int
-mt76x02_init_rx_queue(struct mt76x02_dev *dev, struct mt76_queue *q,
-		      int idx, int n_desc, int bufsize)
-{
-	int err;
-
-	err = mt76_queue_alloc(dev, q, idx, n_desc, bufsize,
-			       MT_RX_RING_BASE);
-	if (err < 0)
-		return err;
-
-	mt76x02_irq_enable(dev, MT_INT_RX_DONE(idx));
-
-	return 0;
-}
-
-static void mt76x02_process_tx_status_fifo(struct mt76x02_dev *dev)
-{
-	struct mt76x02_tx_status stat;
-	u8 update = 1;
-
-	while (kfifo_get(&dev->txstatus_fifo, &stat))
-		mt76x02_send_tx_status(dev, &stat, &update);
-}
-
-static void mt76x02_tx_worker(struct mt76_worker *w)
-{
-	struct mt76x02_dev *dev;
-
-	dev = container_of(w, struct mt76x02_dev, mt76.tx_worker);
-
-	mt76x02_mac_poll_tx_status(dev, false);
-	mt76x02_process_tx_status_fifo(dev);
-
-	mt76_txq_schedule_all(&dev->mphy);
-}
-
-static int mt76x02_poll_tx(struct napi_struct *napi, int budget)
-{
-	struct mt76x02_dev *dev = container_of(napi, struct mt76x02_dev,
-					       mt76.tx_napi);
-	int i;
-
-	mt76x02_mac_poll_tx_status(dev, false);
-
-	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], false);
-	for (i = MT_TXQ_PSD; i >= 0; i--)
-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], false);
-
-	if (napi_complete_done(napi, 0))
-		mt76x02_irq_enable(dev, MT_INT_TX_DONE_ALL);
-
-	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], false);
-	for (i = MT_TXQ_PSD; i >= 0; i--)
-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], false);
-
-	mt76_worker_schedule(&dev->mt76.tx_worker);
-
-	return 0;
-}
-
-int mt76x02_dma_init(struct mt76x02_dev *dev)
-{
-	struct mt76_txwi_cache __maybe_unused *t;
-	int i, ret, fifo_size;
-	struct mt76_queue *q;
-	void *status_fifo;
-
-	BUILD_BUG_ON(sizeof(struct mt76x02_rxwi) > MT_RX_HEADROOM);
-
-	fifo_size = roundup_pow_of_two(32 * sizeof(struct mt76x02_tx_status));
-	status_fifo = devm_kzalloc(dev->mt76.dev, fifo_size, GFP_KERNEL);
-	if (!status_fifo)
-		return -ENOMEM;
-
-	dev->mt76.tx_worker.fn = mt76x02_tx_worker;
-	tasklet_setup(&dev->mt76.pre_tbtt_tasklet, mt76x02_pre_tbtt_tasklet);
-
-	spin_lock_init(&dev->txstatus_fifo_lock);
-	kfifo_init(&dev->txstatus_fifo, status_fifo, fifo_size);
-
-	mt76_dma_attach(&dev->mt76);
-
-	mt76_wr(dev, MT_WPDMA_RST_IDX, ~0);
-
-	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-		ret = mt76_init_tx_queue(&dev->mphy, i, mt76_ac_to_hwq(i),
-					 MT76x02_TX_RING_SIZE,
-					 MT_TX_RING_BASE, 0);
-		if (ret)
-			return ret;
-	}
-
-	ret = mt76_init_tx_queue(&dev->mphy, MT_TXQ_PSD, MT_TX_HW_QUEUE_MGMT,
-				 MT76x02_PSD_RING_SIZE, MT_TX_RING_BASE, 0);
-	if (ret)
-		return ret;
-
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WM, MT_TX_HW_QUEUE_MCU,
-				  MT_MCU_RING_SIZE, MT_TX_RING_BASE);
-	if (ret)
-		return ret;
-
-	mt76x02_irq_enable(dev,
-			   MT_INT_TX_DONE(IEEE80211_AC_VO) |
-			   MT_INT_TX_DONE(IEEE80211_AC_VI) |
-			   MT_INT_TX_DONE(IEEE80211_AC_BE) |
-			   MT_INT_TX_DONE(IEEE80211_AC_BK) |
-			   MT_INT_TX_DONE(MT_TX_HW_QUEUE_MGMT) |
-			   MT_INT_TX_DONE(MT_TX_HW_QUEUE_MCU));
-
-	ret = mt76x02_init_rx_queue(dev, &dev->mt76.q_rx[MT_RXQ_MCU], 1,
-				    MT_MCU_RING_SIZE, MT_RX_BUF_SIZE);
-	if (ret)
-		return ret;
-
-	q = &dev->mt76.q_rx[MT_RXQ_MAIN];
-	q->buf_offset = MT_RX_HEADROOM - sizeof(struct mt76x02_rxwi);
-	ret = mt76x02_init_rx_queue(dev, q, 0, MT76X02_RX_RING_SIZE,
-				    MT_RX_BUF_SIZE);
-	if (ret)
-		return ret;
-
-	ret = mt76_init_queues(dev, mt76_dma_rx_poll);
-	if (ret)
-		return ret;
-
-	netif_tx_napi_add(&dev->mt76.tx_napi_dev, &dev->mt76.tx_napi,
-			  mt76x02_poll_tx, NAPI_POLL_WEIGHT);
-	napi_enable(&dev->mt76.tx_napi);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_dma_init);
-
-void mt76x02_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q)
-{
-	struct mt76x02_dev *dev;
-
-	dev = container_of(mdev, struct mt76x02_dev, mt76);
-	mt76x02_irq_enable(dev, MT_INT_RX_DONE(q));
-}
-EXPORT_SYMBOL_GPL(mt76x02_rx_poll_complete);
-
-irqreturn_t mt76x02_irq_handler(int irq, void *dev_instance)
-{
-	struct mt76x02_dev *dev = dev_instance;
-	u32 intr, mask;
-
-	intr = mt76_rr(dev, MT_INT_SOURCE_CSR);
-	intr &= dev->mt76.mmio.irqmask;
-	mt76_wr(dev, MT_INT_SOURCE_CSR, intr);
-
-	if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state))
-		return IRQ_NONE;
-
-	trace_dev_irq(&dev->mt76, intr, dev->mt76.mmio.irqmask);
-
-	mask = intr & (MT_INT_RX_DONE_ALL | MT_INT_GPTIMER);
-	if (intr & (MT_INT_TX_DONE_ALL | MT_INT_TX_STAT))
-		mask |= MT_INT_TX_DONE_ALL;
-
-	mt76x02_irq_disable(dev, mask);
-
-	if (intr & MT_INT_RX_DONE(0))
-		napi_schedule(&dev->mt76.napi[0]);
-
-	if (intr & MT_INT_RX_DONE(1))
-		napi_schedule(&dev->mt76.napi[1]);
-
-	if (intr & MT_INT_PRE_TBTT)
-		tasklet_schedule(&dev->mt76.pre_tbtt_tasklet);
-
-	/* send buffered multicast frames now */
-	if (intr & MT_INT_TBTT) {
-		if (dev->mt76.csa_complete)
-			mt76_csa_finish(&dev->mt76);
-		else
-			mt76_queue_kick(dev, dev->mphy.q_tx[MT_TXQ_PSD]);
-	}
-
-	if (intr & MT_INT_TX_STAT)
-		mt76x02_mac_poll_tx_status(dev, true);
-
-	if (intr & (MT_INT_TX_STAT | MT_INT_TX_DONE_ALL))
-		napi_schedule(&dev->mt76.tx_napi);
-
-	if (intr & MT_INT_GPTIMER)
-		tasklet_schedule(&dev->dfs_pd.dfs_tasklet);
-
-	return IRQ_HANDLED;
-}
-EXPORT_SYMBOL_GPL(mt76x02_irq_handler);
-
-static void mt76x02_dma_enable(struct mt76x02_dev *dev)
-{
-	u32 val;
-
-	mt76_wr(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_TX);
-	mt76x02_wait_for_wpdma(&dev->mt76, 1000);
-	usleep_range(50, 100);
-
-	val = FIELD_PREP(MT_WPDMA_GLO_CFG_DMA_BURST_SIZE, 3) |
-	      MT_WPDMA_GLO_CFG_TX_DMA_EN |
-	      MT_WPDMA_GLO_CFG_RX_DMA_EN;
-	mt76_set(dev, MT_WPDMA_GLO_CFG, val);
-	mt76_clear(dev, MT_WPDMA_GLO_CFG,
-		   MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE);
-}
-
-void mt76x02_dma_disable(struct mt76x02_dev *dev)
-{
-	u32 val = mt76_rr(dev, MT_WPDMA_GLO_CFG);
-
-	val &= MT_WPDMA_GLO_CFG_DMA_BURST_SIZE |
-	       MT_WPDMA_GLO_CFG_BIG_ENDIAN |
-	       MT_WPDMA_GLO_CFG_HDR_SEG_LEN;
-	val |= MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE;
-	mt76_wr(dev, MT_WPDMA_GLO_CFG, val);
-}
-EXPORT_SYMBOL_GPL(mt76x02_dma_disable);
-
-void mt76x02_mac_start(struct mt76x02_dev *dev)
-{
-	mt76x02_mac_reset_counters(dev);
-	mt76x02_dma_enable(dev);
-	mt76_wr(dev, MT_RX_FILTR_CFG, dev->mt76.rxfilter);
-	mt76_wr(dev, MT_MAC_SYS_CTRL,
-		MT_MAC_SYS_CTRL_ENABLE_TX |
-		MT_MAC_SYS_CTRL_ENABLE_RX);
-	mt76x02_irq_enable(dev,
-			   MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL |
-			   MT_INT_TX_STAT);
-}
-EXPORT_SYMBOL_GPL(mt76x02_mac_start);
-
-static bool mt76x02_tx_hang(struct mt76x02_dev *dev)
-{
-	u32 dma_idx, prev_dma_idx;
-	struct mt76_queue *q;
-	int i;
-
-	for (i = 0; i < 4; i++) {
-		q = dev->mphy.q_tx[i];
-
-		prev_dma_idx = dev->mt76.tx_dma_idx[i];
-		dma_idx = readl(&q->regs->dma_idx);
-		dev->mt76.tx_dma_idx[i] = dma_idx;
-
-		if (!q->queued || prev_dma_idx != dma_idx) {
-			dev->tx_hang_check[i] = 0;
-			continue;
-		}
-
-		if (++dev->tx_hang_check[i] >= MT_TX_HANG_TH)
-			return true;
-	}
-
-	return false;
-}
-
-static void mt76x02_key_sync(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			     struct ieee80211_sta *sta,
-			     struct ieee80211_key_conf *key, void *data)
-{
-	struct mt76x02_dev *dev = hw->priv;
-	struct mt76_wcid *wcid;
-
-	if (!sta)
-		return;
-
-	wcid = (struct mt76_wcid *)sta->drv_priv;
-
-	if (wcid->hw_key_idx != key->keyidx || wcid->sw_iv)
-		return;
-
-	mt76x02_mac_wcid_sync_pn(dev, wcid->idx, key);
-}
-
-static void mt76x02_reset_state(struct mt76x02_dev *dev)
-{
-	int i;
-
-	lockdep_assert_held(&dev->mt76.mutex);
-
-	clear_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-
-	rcu_read_lock();
-	ieee80211_iter_keys_rcu(dev->mt76.hw, NULL, mt76x02_key_sync, NULL);
-	rcu_read_unlock();
-
-	for (i = 0; i < MT76x02_N_WCIDS; i++) {
-		struct ieee80211_sta *sta;
-		struct ieee80211_vif *vif;
-		struct mt76x02_sta *msta;
-		struct mt76_wcid *wcid;
-		void *priv;
-
-		wcid = rcu_dereference_protected(dev->mt76.wcid[i],
-					lockdep_is_held(&dev->mt76.mutex));
-		if (!wcid)
-			continue;
-
-		rcu_assign_pointer(dev->mt76.wcid[i], NULL);
-
-		priv = msta = container_of(wcid, struct mt76x02_sta, wcid);
-		sta = container_of(priv, struct ieee80211_sta, drv_priv);
-
-		priv = msta->vif;
-		vif = container_of(priv, struct ieee80211_vif, drv_priv);
-
-		__mt76_sta_remove(&dev->mt76, vif, sta);
-		memset(msta, 0, sizeof(*msta));
-	}
-
-	dev->mt76.vif_mask = 0;
-	dev->mt76.beacon_mask = 0;
-}
-
-static void mt76x02_watchdog_reset(struct mt76x02_dev *dev)
-{
-	u32 mask = dev->mt76.mmio.irqmask;
-	bool restart = dev->mt76.mcu_ops->mcu_restart;
-	int i;
-
-	ieee80211_stop_queues(dev->mt76.hw);
-	set_bit(MT76_RESET, &dev->mphy.state);
-
-	tasklet_disable(&dev->mt76.pre_tbtt_tasklet);
-	mt76_worker_disable(&dev->mt76.tx_worker);
-	napi_disable(&dev->mt76.tx_napi);
-
-	mt76_for_each_q_rx(&dev->mt76, i) {
-		napi_disable(&dev->mt76.napi[i]);
-	}
-
-	mutex_lock(&dev->mt76.mutex);
-
-	dev->mcu_timeout = 0;
-	if (restart)
-		mt76x02_reset_state(dev);
-
-	if (dev->mt76.beacon_mask)
-		mt76_clear(dev, MT_BEACON_TIME_CFG,
-			   MT_BEACON_TIME_CFG_BEACON_TX |
-			   MT_BEACON_TIME_CFG_TBTT_EN);
-
-	mt76x02_irq_disable(dev, mask);
-
-	/* perform device reset */
-	mt76_clear(dev, MT_TXOP_CTRL_CFG, MT_TXOP_ED_CCA_EN);
-	mt76_wr(dev, MT_MAC_SYS_CTRL, 0);
-	mt76_clear(dev, MT_WPDMA_GLO_CFG,
-		   MT_WPDMA_GLO_CFG_TX_DMA_EN | MT_WPDMA_GLO_CFG_RX_DMA_EN);
-	usleep_range(5000, 10000);
-	mt76_wr(dev, MT_INT_SOURCE_CSR, 0xffffffff);
-
-	/* let fw reset DMA */
-	mt76_set(dev, 0x734, 0x3);
-
-	if (restart)
-		mt76_mcu_restart(dev);
-
-	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], true);
-	for (i = 0; i < __MT_TXQ_MAX; i++)
-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], true);
-
-	mt76_for_each_q_rx(&dev->mt76, i) {
-		mt76_queue_rx_reset(dev, i);
-	}
-
-	mt76_tx_status_check(&dev->mt76, true);
-
-	mt76x02_mac_start(dev);
-
-	if (dev->ed_monitor)
-		mt76_set(dev, MT_TXOP_CTRL_CFG, MT_TXOP_ED_CCA_EN);
-
-	if (dev->mt76.beacon_mask && !restart)
-		mt76_set(dev, MT_BEACON_TIME_CFG,
-			 MT_BEACON_TIME_CFG_BEACON_TX |
-			 MT_BEACON_TIME_CFG_TBTT_EN);
-
-	mt76x02_irq_enable(dev, mask);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	clear_bit(MT76_RESET, &dev->mphy.state);
-
-	mt76_worker_enable(&dev->mt76.tx_worker);
-	tasklet_enable(&dev->mt76.pre_tbtt_tasklet);
-
-	local_bh_disable();
-	napi_enable(&dev->mt76.tx_napi);
-	napi_schedule(&dev->mt76.tx_napi);
-
-	mt76_for_each_q_rx(&dev->mt76, i) {
-		napi_enable(&dev->mt76.napi[i]);
-		napi_schedule(&dev->mt76.napi[i]);
-	}
-	local_bh_enable();
-
-	if (restart) {
-		set_bit(MT76_RESTART, &dev->mphy.state);
-		mt76x02_mcu_function_select(dev, Q_SELECT, 1);
-		ieee80211_restart_hw(dev->mt76.hw);
-	} else {
-		ieee80211_wake_queues(dev->mt76.hw);
-		mt76_txq_schedule_all(&dev->mphy);
-	}
-}
-
-void mt76x02_reconfig_complete(struct ieee80211_hw *hw,
-			       enum ieee80211_reconfig_type reconfig_type)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
-		return;
-
-	clear_bit(MT76_RESTART, &dev->mphy.state);
-}
-EXPORT_SYMBOL_GPL(mt76x02_reconfig_complete);
-
-static void mt76x02_check_tx_hang(struct mt76x02_dev *dev)
-{
-	if (test_bit(MT76_RESTART, &dev->mphy.state))
-		return;
-
-	if (!mt76x02_tx_hang(dev) && !dev->mcu_timeout)
-		return;
-
-	mt76x02_watchdog_reset(dev);
-
-	dev->tx_hang_reset++;
-	memset(dev->tx_hang_check, 0, sizeof(dev->tx_hang_check));
-	memset(dev->mt76.tx_dma_idx, 0xff,
-	       sizeof(dev->mt76.tx_dma_idx));
-}
-
-void mt76x02_wdt_work(struct work_struct *work)
-{
-	struct mt76x02_dev *dev = container_of(work, struct mt76x02_dev,
-					       wdt_work.work);
-
-	mt76x02_check_tx_hang(dev);
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->wdt_work,
-				     MT_WATCHDOG_TIME);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_phy.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_phy.c
deleted file mode 100644
index cbe7e6f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_phy.c
+++ /dev/null
@@ -1,204 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <linux/kernel.h>
-
-#include "mt76x02.h"
-#include "mt76x02_phy.h"
-
-void mt76x02_phy_set_rxpath(struct mt76x02_dev *dev)
-{
-	u32 val;
-
-	val = mt76_rr(dev, MT_BBP(AGC, 0));
-	val &= ~BIT(4);
-
-	switch (dev->mphy.chainmask & 0xf) {
-	case 2:
-		val |= BIT(3);
-		break;
-	default:
-		val &= ~BIT(3);
-		break;
-	}
-
-	mt76_wr(dev, MT_BBP(AGC, 0), val);
-	mb();
-	val = mt76_rr(dev, MT_BBP(AGC, 0));
-}
-EXPORT_SYMBOL_GPL(mt76x02_phy_set_rxpath);
-
-void mt76x02_phy_set_txdac(struct mt76x02_dev *dev)
-{
-	int txpath;
-
-	txpath = (dev->mphy.chainmask >> 8) & 0xf;
-	switch (txpath) {
-	case 2:
-		mt76_set(dev, MT_BBP(TXBE, 5), 0x3);
-		break;
-	default:
-		mt76_clear(dev, MT_BBP(TXBE, 5), 0x3);
-		break;
-	}
-}
-EXPORT_SYMBOL_GPL(mt76x02_phy_set_txdac);
-
-static u32
-mt76x02_tx_power_mask(u8 v1, u8 v2, u8 v3, u8 v4)
-{
-	u32 val = 0;
-
-	val |= (v1 & (BIT(6) - 1)) << 0;
-	val |= (v2 & (BIT(6) - 1)) << 8;
-	val |= (v3 & (BIT(6) - 1)) << 16;
-	val |= (v4 & (BIT(6) - 1)) << 24;
-	return val;
-}
-
-int mt76x02_get_max_rate_power(struct mt76x02_rate_power *r)
-{
-	s8 ret = 0;
-	int i;
-
-	for (i = 0; i < sizeof(r->all); i++)
-		ret = max(ret, r->all[i]);
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt76x02_get_max_rate_power);
-
-void mt76x02_limit_rate_power(struct mt76x02_rate_power *r, int limit)
-{
-	int i;
-
-	for (i = 0; i < sizeof(r->all); i++)
-		if (r->all[i] > limit)
-			r->all[i] = limit;
-}
-EXPORT_SYMBOL_GPL(mt76x02_limit_rate_power);
-
-void mt76x02_add_rate_power_offset(struct mt76x02_rate_power *r, int offset)
-{
-	int i;
-
-	for (i = 0; i < sizeof(r->all); i++)
-		r->all[i] += offset;
-}
-EXPORT_SYMBOL_GPL(mt76x02_add_rate_power_offset);
-
-void mt76x02_phy_set_txpower(struct mt76x02_dev *dev, int txp_0, int txp_1)
-{
-	struct mt76x02_rate_power *t = &dev->rate_power;
-
-	mt76_rmw_field(dev, MT_TX_ALC_CFG_0, MT_TX_ALC_CFG_0_CH_INIT_0, txp_0);
-	mt76_rmw_field(dev, MT_TX_ALC_CFG_0, MT_TX_ALC_CFG_0_CH_INIT_1, txp_1);
-
-	mt76_wr(dev, MT_TX_PWR_CFG_0,
-		mt76x02_tx_power_mask(t->cck[0], t->cck[2], t->ofdm[0],
-				      t->ofdm[2]));
-	mt76_wr(dev, MT_TX_PWR_CFG_1,
-		mt76x02_tx_power_mask(t->ofdm[4], t->ofdm[6], t->ht[0],
-				      t->ht[2]));
-	mt76_wr(dev, MT_TX_PWR_CFG_2,
-		mt76x02_tx_power_mask(t->ht[4], t->ht[6], t->ht[8],
-				      t->ht[10]));
-	mt76_wr(dev, MT_TX_PWR_CFG_3,
-		mt76x02_tx_power_mask(t->ht[12], t->ht[14], t->ht[0],
-				      t->ht[2]));
-	mt76_wr(dev, MT_TX_PWR_CFG_4,
-		mt76x02_tx_power_mask(t->ht[4], t->ht[6], 0, 0));
-	mt76_wr(dev, MT_TX_PWR_CFG_7,
-		mt76x02_tx_power_mask(t->ofdm[7], t->vht[0], t->ht[7],
-				      t->vht[1]));
-	mt76_wr(dev, MT_TX_PWR_CFG_8,
-		mt76x02_tx_power_mask(t->ht[14], 0, t->vht[0], t->vht[1]));
-	mt76_wr(dev, MT_TX_PWR_CFG_9,
-		mt76x02_tx_power_mask(t->ht[7], 0, t->vht[0], t->vht[1]));
-}
-EXPORT_SYMBOL_GPL(mt76x02_phy_set_txpower);
-
-void mt76x02_phy_set_bw(struct mt76x02_dev *dev, int width, u8 ctrl)
-{
-	int core_val, agc_val;
-
-	switch (width) {
-	case NL80211_CHAN_WIDTH_80:
-		core_val = 3;
-		agc_val = 7;
-		break;
-	case NL80211_CHAN_WIDTH_40:
-		core_val = 2;
-		agc_val = 3;
-		break;
-	default:
-		core_val = 0;
-		agc_val = 1;
-		break;
-	}
-
-	mt76_rmw_field(dev, MT_BBP(CORE, 1), MT_BBP_CORE_R1_BW, core_val);
-	mt76_rmw_field(dev, MT_BBP(AGC, 0), MT_BBP_AGC_R0_BW, agc_val);
-	mt76_rmw_field(dev, MT_BBP(AGC, 0), MT_BBP_AGC_R0_CTRL_CHAN, ctrl);
-	mt76_rmw_field(dev, MT_BBP(TXBE, 0), MT_BBP_TXBE_R0_CTRL_CHAN, ctrl);
-}
-EXPORT_SYMBOL_GPL(mt76x02_phy_set_bw);
-
-void mt76x02_phy_set_band(struct mt76x02_dev *dev, int band,
-			  bool primary_upper)
-{
-	switch (band) {
-	case NL80211_BAND_2GHZ:
-		mt76_set(dev, MT_TX_BAND_CFG, MT_TX_BAND_CFG_2G);
-		mt76_clear(dev, MT_TX_BAND_CFG, MT_TX_BAND_CFG_5G);
-		break;
-	case NL80211_BAND_5GHZ:
-		mt76_clear(dev, MT_TX_BAND_CFG, MT_TX_BAND_CFG_2G);
-		mt76_set(dev, MT_TX_BAND_CFG, MT_TX_BAND_CFG_5G);
-		break;
-	}
-
-	mt76_rmw_field(dev, MT_TX_BAND_CFG, MT_TX_BAND_CFG_UPPER_40M,
-		       primary_upper);
-}
-EXPORT_SYMBOL_GPL(mt76x02_phy_set_band);
-
-bool mt76x02_phy_adjust_vga_gain(struct mt76x02_dev *dev)
-{
-	u8 limit = dev->cal.low_gain > 0 ? 16 : 4;
-	bool ret = false;
-	u32 false_cca;
-
-	false_cca = FIELD_GET(MT_RX_STAT_1_CCA_ERRORS,
-			      mt76_rr(dev, MT_RX_STAT_1));
-	dev->cal.false_cca = false_cca;
-	if (false_cca > 800 && dev->cal.agc_gain_adjust < limit) {
-		dev->cal.agc_gain_adjust += 2;
-		ret = true;
-	} else if ((false_cca < 10 && dev->cal.agc_gain_adjust > 0) ||
-		   (dev->cal.agc_gain_adjust >= limit && false_cca < 500)) {
-		dev->cal.agc_gain_adjust -= 2;
-		ret = true;
-	}
-
-	dev->cal.agc_lowest_gain = dev->cal.agc_gain_adjust >= limit;
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt76x02_phy_adjust_vga_gain);
-
-void mt76x02_init_agc_gain(struct mt76x02_dev *dev)
-{
-	dev->cal.agc_gain_init[0] = mt76_get_field(dev, MT_BBP(AGC, 8),
-						   MT_BBP_AGC_GAIN);
-	dev->cal.agc_gain_init[1] = mt76_get_field(dev, MT_BBP(AGC, 9),
-						   MT_BBP_AGC_GAIN);
-	memcpy(dev->cal.agc_gain_cur, dev->cal.agc_gain_init,
-	       sizeof(dev->cal.agc_gain_cur));
-	dev->cal.low_gain = -1;
-	dev->cal.gain_init_done = true;
-}
-EXPORT_SYMBOL_GPL(mt76x02_init_agc_gain);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_phy.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_phy.h
deleted file mode 100644
index 84d8a61..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_phy.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#ifndef __MT76x02_PHY_H
-#define __MT76x02_PHY_H
-
-#include "mt76x02_regs.h"
-
-static inline int
-mt76x02_get_rssi_gain_thresh(struct mt76x02_dev *dev)
-{
-	switch (dev->mphy.chandef.width) {
-	case NL80211_CHAN_WIDTH_80:
-		return -62;
-	case NL80211_CHAN_WIDTH_40:
-		return -65;
-	default:
-		return -68;
-	}
-}
-
-static inline int
-mt76x02_get_low_rssi_gain_thresh(struct mt76x02_dev *dev)
-{
-	switch (dev->mphy.chandef.width) {
-	case NL80211_CHAN_WIDTH_80:
-		return -76;
-	case NL80211_CHAN_WIDTH_40:
-		return -79;
-	default:
-		return -82;
-	}
-}
-
-void mt76x02_add_rate_power_offset(struct mt76x02_rate_power *r, int offset);
-void mt76x02_phy_set_txpower(struct mt76x02_dev *dev, int txp_0, int txp_2);
-void mt76x02_limit_rate_power(struct mt76x02_rate_power *r, int limit);
-int mt76x02_get_max_rate_power(struct mt76x02_rate_power *r);
-void mt76x02_phy_set_rxpath(struct mt76x02_dev *dev);
-void mt76x02_phy_set_txdac(struct mt76x02_dev *dev);
-void mt76x02_phy_set_bw(struct mt76x02_dev *dev, int width, u8 ctrl);
-void mt76x02_phy_set_band(struct mt76x02_dev *dev, int band,
-			  bool primary_upper);
-bool mt76x02_phy_adjust_vga_gain(struct mt76x02_dev *dev);
-void mt76x02_init_agc_gain(struct mt76x02_dev *dev);
-
-#endif /* __MT76x02_PHY_H */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_regs.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_regs.h
deleted file mode 100644
index fe0c5e3..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_regs.h
+++ /dev/null
@@ -1,708 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#ifndef __MT76X02_REGS_H
-#define __MT76X02_REGS_H
-
-#define MT_ASIC_VERSION			0x0000
-
-#define MT76XX_REV_E3			0x22
-#define MT76XX_REV_E4			0x33
-
-#define MT_CMB_CTRL			0x0020
-#define MT_CMB_CTRL_XTAL_RDY		BIT(22)
-#define MT_CMB_CTRL_PLL_LD		BIT(23)
-
-#define MT_EFUSE_CTRL			0x0024
-#define MT_EFUSE_CTRL_AOUT		GENMASK(5, 0)
-#define MT_EFUSE_CTRL_MODE		GENMASK(7, 6)
-#define MT_EFUSE_CTRL_LDO_OFF_TIME	GENMASK(13, 8)
-#define MT_EFUSE_CTRL_LDO_ON_TIME	GENMASK(15, 14)
-#define MT_EFUSE_CTRL_AIN		GENMASK(25, 16)
-#define MT_EFUSE_CTRL_KICK		BIT(30)
-#define MT_EFUSE_CTRL_SEL		BIT(31)
-
-#define MT_EFUSE_DATA_BASE		0x0028
-#define MT_EFUSE_DATA(_n)		(MT_EFUSE_DATA_BASE + ((_n) << 2))
-
-#define MT_COEXCFG0			0x0040
-#define MT_COEXCFG0_COEX_EN		BIT(0)
-
-#define MT_WLAN_FUN_CTRL		0x0080
-#define MT_WLAN_FUN_CTRL_WLAN_EN	BIT(0)
-#define MT_WLAN_FUN_CTRL_WLAN_CLK_EN	BIT(1)
-#define MT_WLAN_FUN_CTRL_WLAN_RESET_RF	BIT(2)
-
-#define MT_COEXCFG3			0x004c
-
-#define	MT_LDO_CTRL_0			0x006c
-#define	MT_LDO_CTRL_1			0x0070
-
-#define MT_WLAN_FUN_CTRL_WLAN_RESET	BIT(3) /* MT76x0 */
-#define MT_WLAN_FUN_CTRL_CSR_F20M_CKEN	BIT(3) /* MT76x2 */
-
-#define MT_WLAN_FUN_CTRL_PCIE_CLK_REQ	BIT(4)
-#define MT_WLAN_FUN_CTRL_FRC_WL_ANT_SEL	BIT(5)
-#define MT_WLAN_FUN_CTRL_INV_ANT_SEL	BIT(6)
-#define MT_WLAN_FUN_CTRL_WAKE_HOST	BIT(7)
-
-#define MT_WLAN_FUN_CTRL_THERM_RST	BIT(8) /* MT76x2 */
-#define MT_WLAN_FUN_CTRL_THERM_CKEN	BIT(9) /* MT76x2 */
-
-#define MT_WLAN_FUN_CTRL_GPIO_IN	GENMASK(15, 8) /* MT76x0 */
-#define MT_WLAN_FUN_CTRL_GPIO_OUT	GENMASK(23, 16) /* MT76x0 */
-#define MT_WLAN_FUN_CTRL_GPIO_OUT_EN	GENMASK(31, 24) /* MT76x0 */
-
-/* MT76x0 */
-#define MT_CSR_EE_CFG1			0x0104
-
-#define MT_XO_CTRL0			0x0100
-#define MT_XO_CTRL1			0x0104
-#define MT_XO_CTRL2			0x0108
-#define MT_XO_CTRL3			0x010c
-#define MT_XO_CTRL4			0x0110
-
-#define MT_XO_CTRL5			0x0114
-#define MT_XO_CTRL5_C2_VAL		GENMASK(14, 8)
-
-#define MT_XO_CTRL6			0x0118
-#define MT_XO_CTRL6_C2_CTRL		GENMASK(14, 8)
-
-#define MT_XO_CTRL7			0x011c
-
-#define MT_IOCFG_6			0x0124
-
-#define MT_USB_U3DMA_CFG		0x9018
-#define MT_USB_DMA_CFG_RX_BULK_AGG_TOUT	GENMASK(7, 0)
-#define MT_USB_DMA_CFG_RX_BULK_AGG_LMT	GENMASK(15, 8)
-#define MT_USB_DMA_CFG_UDMA_TX_WL_DROP	BIT(16)
-#define MT_USB_DMA_CFG_WAKE_UP_EN	BIT(17)
-#define MT_USB_DMA_CFG_RX_DROP_OR_PAD	BIT(18)
-#define MT_USB_DMA_CFG_TX_CLR		BIT(19)
-#define MT_USB_DMA_CFG_TXOP_HALT	BIT(20)
-#define MT_USB_DMA_CFG_RX_BULK_AGG_EN	BIT(21)
-#define MT_USB_DMA_CFG_RX_BULK_EN	BIT(22)
-#define MT_USB_DMA_CFG_TX_BULK_EN	BIT(23)
-#define MT_USB_DMA_CFG_EP_OUT_VALID	GENMASK(29, 24)
-#define MT_USB_DMA_CFG_RX_BUSY		BIT(30)
-#define MT_USB_DMA_CFG_TX_BUSY		BIT(31)
-
-#define MT_WLAN_MTC_CTRL		0x10148
-#define MT_WLAN_MTC_CTRL_MTCMOS_PWR_UP	BIT(0)
-#define MT_WLAN_MTC_CTRL_PWR_ACK	BIT(12)
-#define MT_WLAN_MTC_CTRL_PWR_ACK_S	BIT(13)
-#define MT_WLAN_MTC_CTRL_BBP_MEM_PD	GENMASK(19, 16)
-#define MT_WLAN_MTC_CTRL_PBF_MEM_PD	BIT(20)
-#define MT_WLAN_MTC_CTRL_FCE_MEM_PD	BIT(21)
-#define MT_WLAN_MTC_CTRL_TSO_MEM_PD	BIT(22)
-#define MT_WLAN_MTC_CTRL_BBP_MEM_RB	BIT(24)
-#define MT_WLAN_MTC_CTRL_PBF_MEM_RB	BIT(25)
-#define MT_WLAN_MTC_CTRL_FCE_MEM_RB	BIT(26)
-#define MT_WLAN_MTC_CTRL_TSO_MEM_RB	BIT(27)
-#define MT_WLAN_MTC_CTRL_STATE_UP	BIT(28)
-
-#define MT_INT_SOURCE_CSR		0x0200
-#define MT_INT_MASK_CSR			0x0204
-
-#define MT_INT_RX_DONE(_n)		BIT(_n)
-#define MT_INT_RX_DONE_ALL		GENMASK(1, 0)
-#define MT_INT_TX_DONE_ALL		GENMASK(13, 4)
-#define MT_INT_TX_DONE(_n)		BIT((_n) + 4)
-#define MT_INT_RX_COHERENT		BIT(16)
-#define MT_INT_TX_COHERENT		BIT(17)
-#define MT_INT_ANY_COHERENT		BIT(18)
-#define MT_INT_MCU_CMD			BIT(19)
-#define MT_INT_TBTT			BIT(20)
-#define MT_INT_PRE_TBTT			BIT(21)
-#define MT_INT_TX_STAT			BIT(22)
-#define MT_INT_AUTO_WAKEUP		BIT(23)
-#define MT_INT_GPTIMER			BIT(24)
-#define MT_INT_RXDELAYINT		BIT(26)
-#define MT_INT_TXDELAYINT		BIT(27)
-
-#define MT_WPDMA_GLO_CFG		0x0208
-#define MT_WPDMA_GLO_CFG_TX_DMA_EN	BIT(0)
-#define MT_WPDMA_GLO_CFG_TX_DMA_BUSY	BIT(1)
-#define MT_WPDMA_GLO_CFG_RX_DMA_EN	BIT(2)
-#define MT_WPDMA_GLO_CFG_RX_DMA_BUSY	BIT(3)
-#define MT_WPDMA_GLO_CFG_DMA_BURST_SIZE	GENMASK(5, 4)
-#define MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE	BIT(6)
-#define MT_WPDMA_GLO_CFG_BIG_ENDIAN	BIT(7)
-#define MT_WPDMA_GLO_CFG_HDR_SEG_LEN	GENMASK(15, 8)
-#define MT_WPDMA_GLO_CFG_CLK_GATE_DIS	BIT(30)
-#define MT_WPDMA_GLO_CFG_RX_2B_OFFSET	BIT(31)
-
-#define MT_WPDMA_RST_IDX		0x020c
-
-#define MT_WPDMA_DELAY_INT_CFG		0x0210
-
-#define MT_WMM_AIFSN			0x0214
-#define MT_WMM_AIFSN_MASK		GENMASK(3, 0)
-#define MT_WMM_AIFSN_SHIFT(_n)		((_n) * 4)
-
-#define MT_WMM_CWMIN			0x0218
-#define MT_WMM_CWMIN_MASK		GENMASK(3, 0)
-#define MT_WMM_CWMIN_SHIFT(_n)		((_n) * 4)
-
-#define MT_WMM_CWMAX			0x021c
-#define MT_WMM_CWMAX_MASK		GENMASK(3, 0)
-#define MT_WMM_CWMAX_SHIFT(_n)		((_n) * 4)
-
-#define MT_WMM_TXOP_BASE		0x0220
-#define MT_WMM_TXOP(_n)			(MT_WMM_TXOP_BASE + (((_n) / 2) << 2))
-#define MT_WMM_TXOP_SHIFT(_n)		(((_n) & 1) * 16)
-#define MT_WMM_TXOP_MASK		GENMASK(15, 0)
-
-#define MT_WMM_CTRL			0x0230 /* MT76x0 */
-#define MT_FCE_DMA_ADDR			0x0230
-#define MT_FCE_DMA_LEN			0x0234
-#define MT_USB_DMA_CFG			0x0238
-
-#define MT_TSO_CTRL			0x0250
-#define MT_HEADER_TRANS_CTRL_REG	0x0260
-
-#define MT_US_CYC_CFG			0x02a4
-#define MT_US_CYC_CNT			GENMASK(7, 0)
-
-#define MT_TX_RING_BASE			0x0300
-#define MT_RX_RING_BASE			0x03c0
-
-#define MT_TX_HW_QUEUE_MCU		8
-#define MT_TX_HW_QUEUE_MGMT		9
-
-#define MT_PBF_SYS_CTRL			0x0400
-#define MT_PBF_SYS_CTRL_MCU_RESET	BIT(0)
-#define MT_PBF_SYS_CTRL_DMA_RESET	BIT(1)
-#define MT_PBF_SYS_CTRL_MAC_RESET	BIT(2)
-#define MT_PBF_SYS_CTRL_PBF_RESET	BIT(3)
-#define MT_PBF_SYS_CTRL_ASY_RESET	BIT(4)
-
-#define MT_PBF_CFG			0x0404
-#define MT_PBF_CFG_TX0Q_EN		BIT(0)
-#define MT_PBF_CFG_TX1Q_EN		BIT(1)
-#define MT_PBF_CFG_TX2Q_EN		BIT(2)
-#define MT_PBF_CFG_TX3Q_EN		BIT(3)
-#define MT_PBF_CFG_RX0Q_EN		BIT(4)
-#define MT_PBF_CFG_RX_DROP_EN		BIT(8)
-
-#define MT_PBF_TX_MAX_PCNT		0x0408
-#define MT_PBF_RX_MAX_PCNT		0x040c
-
-#define MT_BCN_OFFSET_BASE		0x041c
-#define MT_BCN_OFFSET(_n)		(MT_BCN_OFFSET_BASE + ((_n) << 2))
-
-#define MT_RXQ_STA			0x0430
-#define MT_TXQ_STA			0x0434
-#define	MT_RF_CSR_CFG			0x0500
-#define MT_RF_CSR_CFG_DATA		GENMASK(7, 0)
-#define MT_RF_CSR_CFG_REG_ID		GENMASK(14, 8)
-#define MT_RF_CSR_CFG_REG_BANK		GENMASK(17, 15)
-#define MT_RF_CSR_CFG_WR		BIT(30)
-#define MT_RF_CSR_CFG_KICK		BIT(31)
-
-#define MT_RF_BYPASS_0			0x0504
-#define MT_RF_BYPASS_1			0x0508
-#define MT_RF_SETTING_0			0x050c
-
-#define MT_RF_MISC			0x0518
-#define MT_RF_DATA_WRITE		0x0524
-
-#define MT_RF_CTRL			0x0528
-#define MT_RF_CTRL_ADDR			GENMASK(11, 0)
-#define MT_RF_CTRL_WRITE		BIT(12)
-#define MT_RF_CTRL_BUSY			BIT(13)
-#define MT_RF_CTRL_IDX			BIT(16)
-
-#define MT_RF_DATA_READ			0x052c
-
-#define MT_COM_REG0			0x0730
-#define MT_COM_REG1			0x0734
-#define MT_COM_REG2			0x0738
-#define MT_COM_REG3			0x073C
-
-#define MT_LED_CTRL			0x0770
-#define MT_LED_CTRL_REPLAY(_n)		BIT(0 + (8 * (_n)))
-#define MT_LED_CTRL_POLARITY(_n)	BIT(1 + (8 * (_n)))
-#define MT_LED_CTRL_TX_BLINK_MODE(_n)	BIT(2 + (8 * (_n)))
-#define MT_LED_CTRL_KICK(_n)		BIT(7 + (8 * (_n)))
-
-#define MT_LED_TX_BLINK_0		0x0774
-#define MT_LED_TX_BLINK_1		0x0778
-
-#define MT_LED_S0_BASE			0x077C
-#define MT_LED_S0(_n)			(MT_LED_S0_BASE + 8 * (_n))
-#define MT_LED_S1_BASE			0x0780
-#define MT_LED_S1(_n)			(MT_LED_S1_BASE + 8 * (_n))
-#define MT_LED_STATUS_OFF		GENMASK(31, 24)
-#define MT_LED_STATUS_ON		GENMASK(23, 16)
-#define MT_LED_STATUS_DURATION		GENMASK(15, 8)
-
-#define MT_FCE_PSE_CTRL			0x0800
-#define MT_FCE_PARAMETERS		0x0804
-#define MT_FCE_CSO			0x0808
-
-#define MT_FCE_L2_STUFF			0x080c
-#define MT_FCE_L2_STUFF_HT_L2_EN	BIT(0)
-#define MT_FCE_L2_STUFF_QOS_L2_EN	BIT(1)
-#define MT_FCE_L2_STUFF_RX_STUFF_EN	BIT(2)
-#define MT_FCE_L2_STUFF_TX_STUFF_EN	BIT(3)
-#define MT_FCE_L2_STUFF_WR_MPDU_LEN_EN	BIT(4)
-#define MT_FCE_L2_STUFF_MVINV_BSWAP	BIT(5)
-#define MT_FCE_L2_STUFF_TS_CMD_QSEL_EN	GENMASK(15, 8)
-#define MT_FCE_L2_STUFF_TS_LEN_EN	GENMASK(23, 16)
-#define MT_FCE_L2_STUFF_OTHER_PORT	GENMASK(25, 24)
-
-#define MT_FCE_WLAN_FLOW_CONTROL1	0x0824
-
-#define MT_TX_CPU_FROM_FCE_BASE_PTR	0x09a0
-#define MT_TX_CPU_FROM_FCE_MAX_COUNT	0x09a4
-#define MT_TX_CPU_FROM_FCE_CPU_DESC_IDX	0x09a8
-#define MT_FCE_PDMA_GLOBAL_CONF		0x09c4
-#define MT_FCE_SKIP_FS			0x0a6c
-
-#define MT_PAUSE_ENABLE_CONTROL1	0x0a38
-
-#define MT_MAC_CSR0			0x1000
-
-#define MT_MAC_SYS_CTRL			0x1004
-#define MT_MAC_SYS_CTRL_RESET_CSR	BIT(0)
-#define MT_MAC_SYS_CTRL_RESET_BBP	BIT(1)
-#define MT_MAC_SYS_CTRL_ENABLE_TX	BIT(2)
-#define MT_MAC_SYS_CTRL_ENABLE_RX	BIT(3)
-
-#define MT_MAC_ADDR_DW0			0x1008
-#define MT_MAC_ADDR_DW1			0x100c
-#define MT_MAC_ADDR_DW1_U2ME_MASK	GENMASK(23, 16)
-
-#define MT_MAC_BSSID_DW0		0x1010
-#define MT_MAC_BSSID_DW1		0x1014
-#define MT_MAC_BSSID_DW1_ADDR		GENMASK(15, 0)
-#define MT_MAC_BSSID_DW1_MBSS_MODE	GENMASK(17, 16)
-#define MT_MAC_BSSID_DW1_MBEACON_N	GENMASK(20, 18)
-#define MT_MAC_BSSID_DW1_MBSS_LOCAL_BIT	BIT(21)
-#define MT_MAC_BSSID_DW1_MBSS_MODE_B2	BIT(22)
-#define MT_MAC_BSSID_DW1_MBEACON_N_B3	BIT(23)
-#define MT_MAC_BSSID_DW1_MBSS_IDX_BYTE	GENMASK(26, 24)
-
-#define MT_MAX_LEN_CFG			0x1018
-#define MT_MAX_LEN_CFG_AMPDU		GENMASK(13, 12)
-
-#define MT_LED_CFG			0x102c
-
-#define MT_AMPDU_MAX_LEN_20M1S		0x1030
-#define MT_AMPDU_MAX_LEN_20M2S		0x1034
-#define MT_AMPDU_MAX_LEN_40M1S		0x1038
-#define MT_AMPDU_MAX_LEN_40M2S		0x103c
-#define MT_AMPDU_MAX_LEN		0x1040
-
-#define MT_WCID_DROP_BASE		0x106c
-#define MT_WCID_DROP(_n)		(MT_WCID_DROP_BASE + ((_n) >> 5) * 4)
-#define MT_WCID_DROP_MASK(_n)		BIT((_n) % 32)
-
-#define MT_BCN_BYPASS_MASK		0x108c
-
-#define MT_MAC_APC_BSSID_BASE		0x1090
-#define MT_MAC_APC_BSSID_L(_n)		(MT_MAC_APC_BSSID_BASE + ((_n) * 8))
-#define MT_MAC_APC_BSSID_H(_n)		(MT_MAC_APC_BSSID_BASE + ((_n) * 8 + 4))
-#define MT_MAC_APC_BSSID_H_ADDR		GENMASK(15, 0)
-#define MT_MAC_APC_BSSID0_H_EN		BIT(16)
-
-#define MT_XIFS_TIME_CFG		0x1100
-#define MT_XIFS_TIME_CFG_CCK_SIFS	GENMASK(7, 0)
-#define MT_XIFS_TIME_CFG_OFDM_SIFS	GENMASK(15, 8)
-#define MT_XIFS_TIME_CFG_OFDM_XIFS	GENMASK(19, 16)
-#define MT_XIFS_TIME_CFG_EIFS		GENMASK(28, 20)
-#define MT_XIFS_TIME_CFG_BB_RXEND_EN	BIT(29)
-
-#define MT_BKOFF_SLOT_CFG		0x1104
-#define MT_BKOFF_SLOT_CFG_SLOTTIME	GENMASK(7, 0)
-#define MT_BKOFF_SLOT_CFG_CC_DELAY	GENMASK(11, 8)
-
-#define MT_CH_TIME_CFG			0x110c
-#define MT_CH_TIME_CFG_TIMER_EN		BIT(0)
-#define MT_CH_TIME_CFG_TX_AS_BUSY	BIT(1)
-#define MT_CH_TIME_CFG_RX_AS_BUSY	BIT(2)
-#define MT_CH_TIME_CFG_NAV_AS_BUSY	BIT(3)
-#define MT_CH_TIME_CFG_EIFS_AS_BUSY	BIT(4)
-#define MT_CH_TIME_CFG_MDRDY_CNT_EN	BIT(5)
-#define MT_CH_CCA_RC_EN			BIT(6)
-#define MT_CH_TIME_CFG_CH_TIMER_CLR	GENMASK(9, 8)
-#define MT_CH_TIME_CFG_MDRDY_CLR	GENMASK(11, 10)
-
-#define MT_PBF_LIFE_TIMER		0x1110
-
-#define MT_BEACON_TIME_CFG		0x1114
-#define MT_BEACON_TIME_CFG_INTVAL	GENMASK(15, 0)
-#define MT_BEACON_TIME_CFG_TIMER_EN	BIT(16)
-#define MT_BEACON_TIME_CFG_SYNC_MODE	GENMASK(18, 17)
-#define MT_BEACON_TIME_CFG_TBTT_EN	BIT(19)
-#define MT_BEACON_TIME_CFG_BEACON_TX	BIT(20)
-#define MT_BEACON_TIME_CFG_TSF_COMP	GENMASK(31, 24)
-
-#define MT_TBTT_SYNC_CFG		0x1118
-#define MT_TSF_TIMER_DW0		0x111c
-#define MT_TSF_TIMER_DW1		0x1120
-#define MT_TBTT_TIMER			0x1124
-#define MT_TBTT_TIMER_VAL		GENMASK(16, 0)
-
-#define MT_INT_TIMER_CFG		0x1128
-#define MT_INT_TIMER_CFG_PRE_TBTT	GENMASK(15, 0)
-#define MT_INT_TIMER_CFG_GP_TIMER	GENMASK(31, 16)
-
-#define MT_INT_TIMER_EN			0x112c
-#define MT_INT_TIMER_EN_PRE_TBTT_EN	BIT(0)
-#define MT_INT_TIMER_EN_GP_TIMER_EN	BIT(1)
-
-#define MT_CH_IDLE			0x1130
-#define MT_CH_BUSY			0x1134
-#define MT_EXT_CH_BUSY			0x1138
-#define MT_ED_CCA_TIMER			0x1140
-
-#define MT_MAC_STATUS			0x1200
-#define MT_MAC_STATUS_TX		BIT(0)
-#define MT_MAC_STATUS_RX		BIT(1)
-
-#define MT_PWR_PIN_CFG			0x1204
-#define MT_AUX_CLK_CFG			0x120c
-
-#define MT_BB_PA_MODE_CFG0		0x1214
-#define MT_BB_PA_MODE_CFG1		0x1218
-#define MT_RF_PA_MODE_CFG0		0x121c
-#define MT_RF_PA_MODE_CFG1		0x1220
-
-#define MT_RF_PA_MODE_ADJ0		0x1228
-#define MT_RF_PA_MODE_ADJ1		0x122c
-
-#define MT_DACCLK_EN_DLY_CFG		0x1264
-
-#define MT_EDCA_CFG_BASE		0x1300
-#define MT_EDCA_CFG_AC(_n)		(MT_EDCA_CFG_BASE + ((_n) << 2))
-#define MT_EDCA_CFG_TXOP		GENMASK(7, 0)
-#define MT_EDCA_CFG_AIFSN		GENMASK(11, 8)
-#define MT_EDCA_CFG_CWMIN		GENMASK(15, 12)
-#define MT_EDCA_CFG_CWMAX		GENMASK(19, 16)
-
-#define MT_TX_PWR_CFG_0			0x1314
-#define MT_TX_PWR_CFG_1			0x1318
-#define MT_TX_PWR_CFG_2			0x131c
-#define MT_TX_PWR_CFG_3			0x1320
-#define MT_TX_PWR_CFG_4			0x1324
-#define MT_TX_PIN_CFG			0x1328
-#define MT_TX_PIN_CFG_TXANT		GENMASK(3, 0)
-#define MT_TX_PIN_CFG_RXANT		GENMASK(11, 8)
-#define MT_TX_PIN_RFTR_EN		BIT(16)
-#define MT_TX_PIN_TRSW_EN		BIT(18)
-
-#define MT_TX_BAND_CFG			0x132c
-#define MT_TX_BAND_CFG_UPPER_40M	BIT(0)
-#define MT_TX_BAND_CFG_5G		BIT(1)
-#define MT_TX_BAND_CFG_2G		BIT(2)
-
-#define MT_HT_FBK_TO_LEGACY		0x1384
-#define MT_TX_MPDU_ADJ_INT		0x1388
-
-#define MT_TX_PWR_CFG_7			0x13d4
-#define MT_TX_PWR_CFG_8			0x13d8
-#define MT_TX_PWR_CFG_9			0x13dc
-
-#define MT_TX_SW_CFG0			0x1330
-#define MT_TX_SW_CFG1			0x1334
-#define MT_TX_SW_CFG2			0x1338
-
-#define MT_TXOP_CTRL_CFG		0x1340
-#define MT_TXOP_TRUN_EN			GENMASK(5, 0)
-#define MT_TXOP_EXT_CCA_DLY		GENMASK(15, 8)
-#define MT_TXOP_ED_CCA_EN		BIT(20)
-
-#define MT_TX_RTS_CFG			0x1344
-#define MT_TX_RTS_CFG_RETRY_LIMIT	GENMASK(7, 0)
-#define MT_TX_RTS_CFG_THRESH		GENMASK(23, 8)
-#define MT_TX_RTS_FALLBACK		BIT(24)
-
-#define MT_TX_TIMEOUT_CFG		0x1348
-#define MT_TX_TIMEOUT_CFG_ACKTO		GENMASK(15, 8)
-
-#define MT_TX_RETRY_CFG			0x134c
-#define MT_TX_LINK_CFG			0x1350
-#define MT_TX_CFACK_EN			BIT(12)
-#define MT_VHT_HT_FBK_CFG0		0x1354
-#define MT_VHT_HT_FBK_CFG1		0x1358
-#define MT_LG_FBK_CFG0			0x135c
-#define MT_LG_FBK_CFG1			0x1360
-
-#define MT_PROT_CFG_RATE		GENMASK(15, 0)
-#define MT_PROT_CFG_CTRL		GENMASK(17, 16)
-#define MT_PROT_CFG_NAV			GENMASK(19, 18)
-#define MT_PROT_CFG_TXOP_ALLOW		GENMASK(25, 20)
-#define MT_PROT_CFG_RTS_THRESH		BIT(26)
-
-#define MT_CCK_PROT_CFG			0x1364
-#define MT_OFDM_PROT_CFG		0x1368
-#define MT_MM20_PROT_CFG		0x136c
-#define MT_MM40_PROT_CFG		0x1370
-#define MT_GF20_PROT_CFG		0x1374
-#define MT_GF40_PROT_CFG		0x1378
-
-#define MT_PROT_RATE			GENMASK(15, 0)
-#define MT_PROT_CTRL_RTS_CTS		BIT(16)
-#define MT_PROT_CTRL_CTS2SELF		BIT(17)
-#define MT_PROT_NAV_SHORT		BIT(18)
-#define MT_PROT_NAV_LONG		BIT(19)
-#define MT_PROT_TXOP_ALLOW_CCK		BIT(20)
-#define MT_PROT_TXOP_ALLOW_OFDM		BIT(21)
-#define MT_PROT_TXOP_ALLOW_MM20		BIT(22)
-#define MT_PROT_TXOP_ALLOW_MM40		BIT(23)
-#define MT_PROT_TXOP_ALLOW_GF20		BIT(24)
-#define MT_PROT_TXOP_ALLOW_GF40		BIT(25)
-#define MT_PROT_RTS_THR_EN		BIT(26)
-#define MT_PROT_RATE_CCK_11		0x0003
-#define MT_PROT_RATE_OFDM_6		0x2000
-#define MT_PROT_RATE_OFDM_24		0x2004
-#define MT_PROT_RATE_DUP_OFDM_24	0x2084
-#define MT_PROT_RATE_SGI_OFDM_24	0x2104
-#define MT_PROT_TXOP_ALLOW_ALL		GENMASK(25, 20)
-#define MT_PROT_TXOP_ALLOW_BW20		(MT_PROT_TXOP_ALLOW_ALL &	\
-					 ~MT_PROT_TXOP_ALLOW_MM40 &	\
-					 ~MT_PROT_TXOP_ALLOW_GF40)
-
-#define MT_EXP_ACK_TIME			0x1380
-
-#define MT_TX_PWR_CFG_0_EXT		0x1390
-#define MT_TX_PWR_CFG_1_EXT		0x1394
-
-#define MT_TX_FBK_LIMIT			0x1398
-#define MT_TX_FBK_LIMIT_MPDU_FBK	GENMASK(7, 0)
-#define MT_TX_FBK_LIMIT_AMPDU_FBK	GENMASK(15, 8)
-#define MT_TX_FBK_LIMIT_MPDU_UP_CLEAR	BIT(16)
-#define MT_TX_FBK_LIMIT_AMPDU_UP_CLEAR	BIT(17)
-#define MT_TX_FBK_LIMIT_RATE_LUT	BIT(18)
-
-#define MT_TX0_RF_GAIN_CORR		0x13a0
-#define MT_TX1_RF_GAIN_CORR		0x13a4
-#define MT_TX0_RF_GAIN_ATTEN		0x13a8
-#define MT_TX0_RF_GAIN_ATTEN		0x13a8 /* MT76x0 */
-
-#define MT_TX_ALC_CFG_0			0x13b0
-#define MT_TX_ALC_CFG_0_CH_INIT_0	GENMASK(5, 0)
-#define MT_TX_ALC_CFG_0_CH_INIT_1	GENMASK(13, 8)
-#define MT_TX_ALC_CFG_0_LIMIT_0		GENMASK(21, 16)
-#define MT_TX_ALC_CFG_0_LIMIT_1		GENMASK(29, 24)
-
-#define MT_TX_ALC_CFG_1			0x13b4
-#define MT_TX_ALC_CFG_1_TEMP_COMP	GENMASK(5, 0)
-
-#define MT_TX_ALC_CFG_2			0x13a8
-#define MT_TX_ALC_CFG_2_TEMP_COMP	GENMASK(5, 0)
-
-#define MT_TX_ALC_CFG_3			0x13ac
-#define MT_TX_ALC_CFG_4			0x13c0
-#define MT_TX_ALC_CFG_4_LOWGAIN_CH_EN	BIT(31)
-#define MT_TX0_BB_GAIN_ATTEN		0x13c0 /* MT76x0 */
-
-#define MT_TX_ALC_VGA3			0x13c8
-
-#define MT_TX_PROT_CFG6			0x13e0
-#define MT_TX_PROT_CFG7			0x13e4
-#define MT_TX_PROT_CFG8			0x13e8
-
-#define MT_PIFS_TX_CFG			0x13ec
-
-#define MT_RX_FILTR_CFG			0x1400
-
-#define MT_RX_FILTR_CFG_CRC_ERR		BIT(0)
-#define MT_RX_FILTR_CFG_PHY_ERR		BIT(1)
-#define MT_RX_FILTR_CFG_PROMISC		BIT(2)
-#define MT_RX_FILTR_CFG_OTHER_BSS	BIT(3)
-#define MT_RX_FILTR_CFG_VER_ERR		BIT(4)
-#define MT_RX_FILTR_CFG_MCAST		BIT(5)
-#define MT_RX_FILTR_CFG_BCAST		BIT(6)
-#define MT_RX_FILTR_CFG_DUP		BIT(7)
-#define MT_RX_FILTR_CFG_CFACK		BIT(8)
-#define MT_RX_FILTR_CFG_CFEND		BIT(9)
-#define MT_RX_FILTR_CFG_ACK		BIT(10)
-#define MT_RX_FILTR_CFG_CTS		BIT(11)
-#define MT_RX_FILTR_CFG_RTS		BIT(12)
-#define MT_RX_FILTR_CFG_PSPOLL		BIT(13)
-#define MT_RX_FILTR_CFG_BA		BIT(14)
-#define MT_RX_FILTR_CFG_BAR		BIT(15)
-#define MT_RX_FILTR_CFG_CTRL_RSV	BIT(16)
-
-#define MT_AUTO_RSP_CFG			0x1404
-#define MT_AUTO_RSP_EN			BIT(0)
-#define MT_AUTO_RSP_PREAMB_SHORT	BIT(4)
-#define MT_LEGACY_BASIC_RATE		0x1408
-#define MT_HT_BASIC_RATE		0x140c
-
-#define MT_HT_CTRL_CFG			0x1410
-#define MT_RX_PARSER_CFG		0x1418
-#define MT_RX_PARSER_RX_SET_NAV_ALL	BIT(0)
-
-#define MT_EXT_CCA_CFG			0x141c
-#define MT_EXT_CCA_CFG_CCA0		GENMASK(1, 0)
-#define MT_EXT_CCA_CFG_CCA1		GENMASK(3, 2)
-#define MT_EXT_CCA_CFG_CCA2		GENMASK(5, 4)
-#define MT_EXT_CCA_CFG_CCA3		GENMASK(7, 6)
-#define MT_EXT_CCA_CFG_CCA_MASK		GENMASK(11, 8)
-#define MT_EXT_CCA_CFG_ED_CCA_MASK	GENMASK(15, 12)
-
-#define MT_TX_SW_CFG3			0x1478
-
-#define MT_PN_PAD_MODE			0x150c
-
-#define MT_TXOP_HLDR_ET			0x1608
-#define MT_TXOP_HLDR_TX40M_BLK_EN	BIT(1)
-
-#define MT_PROT_AUTO_TX_CFG		0x1648
-#define MT_PROT_AUTO_TX_CFG_PROT_PADJ	GENMASK(11, 8)
-#define MT_PROT_AUTO_TX_CFG_AUTO_PADJ	GENMASK(27, 24)
-
-#define MT_RX_STAT_0			0x1700
-#define MT_RX_STAT_0_CRC_ERRORS		GENMASK(15, 0)
-#define MT_RX_STAT_0_PHY_ERRORS		GENMASK(31, 16)
-
-#define MT_RX_STAT_1			0x1704
-#define MT_RX_STAT_1_CCA_ERRORS		GENMASK(15, 0)
-#define MT_RX_STAT_1_PLCP_ERRORS	GENMASK(31, 16)
-
-#define MT_RX_STAT_2			0x1708
-#define MT_RX_STAT_2_DUP_ERRORS		GENMASK(15, 0)
-#define MT_RX_STAT_2_OVERFLOW_ERRORS	GENMASK(31, 16)
-
-#define MT_TX_STA_0			0x170c
-#define MT_TX_STA_0_BEACONS		GENMASK(31, 16)
-
-#define MT_TX_STA_1			0x1710
-#define MT_TX_STA_2			0x1714
-
-#define MT_TX_STAT_FIFO			0x1718
-#define MT_TX_STAT_FIFO_VALID		BIT(0)
-#define MT_TX_STAT_FIFO_SUCCESS		BIT(5)
-#define MT_TX_STAT_FIFO_AGGR		BIT(6)
-#define MT_TX_STAT_FIFO_ACKREQ		BIT(7)
-#define MT_TX_STAT_FIFO_WCID		GENMASK(15, 8)
-#define MT_TX_STAT_FIFO_RATE		GENMASK(31, 16)
-
-#define MT_TX_AGG_STAT			0x171c
-
-#define MT_TX_AGG_CNT_BASE0		0x1720
-#define MT_MPDU_DENSITY_CNT		0x1740
-#define MT_TX_AGG_CNT_BASE1		0x174c
-
-#define MT_TX_AGG_CNT(_id)		((_id) < 8 ?			\
-					 MT_TX_AGG_CNT_BASE0 + ((_id) << 2) : \
-					 MT_TX_AGG_CNT_BASE1 + (((_id) - 8) << 2))
-
-#define MT_TX_STAT_FIFO_EXT		0x1798
-#define MT_TX_STAT_FIFO_EXT_RETRY	GENMASK(7, 0)
-#define MT_TX_STAT_FIFO_EXT_PKTID	GENMASK(15, 8)
-
-#define MT_WCID_TX_RATE_BASE		0x1c00
-#define MT_WCID_TX_RATE(_i)		(MT_WCID_TX_RATE_BASE + ((_i) << 3))
-
-#define MT_BBP_CORE_BASE		0x2000
-#define MT_BBP_IBI_BASE			0x2100
-#define MT_BBP_AGC_BASE			0x2300
-#define MT_BBP_TXC_BASE			0x2400
-#define MT_BBP_RXC_BASE			0x2500
-#define MT_BBP_TXO_BASE			0x2600
-#define MT_BBP_TXBE_BASE		0x2700
-#define MT_BBP_RXFE_BASE		0x2800
-#define MT_BBP_RXO_BASE			0x2900
-#define MT_BBP_DFS_BASE			0x2a00
-#define MT_BBP_TR_BASE			0x2b00
-#define MT_BBP_CAL_BASE			0x2c00
-#define MT_BBP_DSC_BASE			0x2e00
-#define MT_BBP_PFMU_BASE		0x2f00
-
-#define MT_BBP(_type, _n)		(MT_BBP_##_type##_BASE + ((_n) << 2))
-
-#define MT_BBP_CORE_R1_BW		GENMASK(4, 3)
-
-#define MT_BBP_AGC_R0_CTRL_CHAN		GENMASK(9, 8)
-#define MT_BBP_AGC_R0_BW		GENMASK(14, 12)
-
-/* AGC, R4/R5 */
-#define MT_BBP_AGC_LNA_HIGH_GAIN	GENMASK(21, 16)
-#define MT_BBP_AGC_LNA_MID_GAIN		GENMASK(13, 8)
-#define MT_BBP_AGC_LNA_LOW_GAIN		GENMASK(5, 0)
-
-/* AGC, R6/R7 */
-#define MT_BBP_AGC_LNA_ULOW_GAIN	GENMASK(5, 0)
-
-/* AGC, R8/R9 */
-#define MT_BBP_AGC_LNA_GAIN_MODE	GENMASK(7, 6)
-#define MT_BBP_AGC_GAIN			GENMASK(14, 8)
-
-#define MT_BBP_AGC20_RSSI0		GENMASK(7, 0)
-#define MT_BBP_AGC20_RSSI1		GENMASK(15, 8)
-
-#define MT_BBP_TXBE_R0_CTRL_CHAN	GENMASK(1, 0)
-
-#define MT_WCID_ADDR_BASE		0x1800
-#define MT_WCID_ADDR(_n)		(MT_WCID_ADDR_BASE + (_n) * 8)
-
-#define MT_SRAM_BASE			0x4000
-
-#define MT_WCID_KEY_BASE		0x8000
-#define MT_WCID_KEY(_n)			(MT_WCID_KEY_BASE + (_n) * 32)
-
-#define MT_WCID_IV_BASE			0xa000
-#define MT_WCID_IV(_n)			(MT_WCID_IV_BASE + (_n) * 8)
-
-#define MT_WCID_ATTR_BASE		0xa800
-#define MT_WCID_ATTR(_n)		(MT_WCID_ATTR_BASE + (_n) * 4)
-
-#define MT_WCID_ATTR_PAIRWISE		BIT(0)
-#define MT_WCID_ATTR_PKEY_MODE		GENMASK(3, 1)
-#define MT_WCID_ATTR_BSS_IDX		GENMASK(6, 4)
-#define MT_WCID_ATTR_RXWI_UDF		GENMASK(9, 7)
-#define MT_WCID_ATTR_PKEY_MODE_EXT	BIT(10)
-#define MT_WCID_ATTR_BSS_IDX_EXT	BIT(11)
-#define MT_WCID_ATTR_WAPI_MCBC		BIT(15)
-#define MT_WCID_ATTR_WAPI_KEYID		GENMASK(31, 24)
-
-#define MT_SKEY_BASE_0			0xac00
-#define MT_SKEY_BASE_1			0xb400
-#define MT_SKEY_0(_bss, _idx)		(MT_SKEY_BASE_0 + (4 * (_bss) + (_idx)) * 32)
-#define MT_SKEY_1(_bss, _idx)		(MT_SKEY_BASE_1 + (4 * ((_bss) & 7) + (_idx)) * 32)
-#define MT_SKEY(_bss, _idx)		(((_bss) & 8) ? MT_SKEY_1(_bss, _idx) : MT_SKEY_0(_bss, _idx))
-
-#define MT_SKEY_MODE_BASE_0		0xb000
-#define MT_SKEY_MODE_BASE_1		0xb3f0
-#define MT_SKEY_MODE_0(_bss)		(MT_SKEY_MODE_BASE_0 + (((_bss) / 2) << 2))
-#define MT_SKEY_MODE_1(_bss)		(MT_SKEY_MODE_BASE_1 + ((((_bss) & 7) / 2) << 2))
-#define MT_SKEY_MODE(_bss)		(((_bss) & 8) ? MT_SKEY_MODE_1(_bss) : MT_SKEY_MODE_0(_bss))
-#define MT_SKEY_MODE_MASK		GENMASK(3, 0)
-#define MT_SKEY_MODE_SHIFT(_bss, _idx)	(4 * ((_idx) + 4 * ((_bss) & 1)))
-
-#define MT_BEACON_BASE			0xc000
-
-#define MT_TEMP_SENSOR			0x1d000
-#define MT_TEMP_SENSOR_VAL		GENMASK(6, 0)
-
-struct mt76_wcid_addr {
-	u8 macaddr[6];
-	__le16 ba_mask;
-} __packed __aligned(4);
-
-struct mt76_wcid_key {
-	u8 key[16];
-	u8 tx_mic[8];
-	u8 rx_mic[8];
-} __packed __aligned(4);
-
-enum mt76x02_cipher_type {
-	MT76X02_CIPHER_NONE,
-	MT76X02_CIPHER_WEP40,
-	MT76X02_CIPHER_WEP104,
-	MT76X02_CIPHER_TKIP,
-	MT76X02_CIPHER_AES_CCMP,
-	MT76X02_CIPHER_CKIP40,
-	MT76X02_CIPHER_CKIP104,
-	MT76X02_CIPHER_CKIP128,
-	MT76X02_CIPHER_WAPI,
-};
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_trace.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_trace.c
deleted file mode 100644
index a812c3a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_trace.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/module.h>
-
-#ifndef __CHECKER__
-#define CREATE_TRACE_POINTS
-#include "mt76x02_trace.h"
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_trace.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_trace.h
deleted file mode 100644
index 6a98092..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_trace.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#if !defined(__MT76x02_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
-#define __MT76x02_TRACE_H
-
-#include <linux/tracepoint.h>
-#include "mt76x02.h"
-
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM mt76x02
-
-#define MAXNAME		32
-#define DEV_ENTRY	__array(char, wiphy_name, 32)
-#define DEV_ASSIGN	strlcpy(__entry->wiphy_name,	\
-				wiphy_name(mt76_hw(dev)->wiphy), MAXNAME)
-#define DEV_PR_FMT	"%s"
-#define DEV_PR_ARG	__entry->wiphy_name
-
-#define TXID_ENTRY	__field(u8, wcid) __field(u8, pktid)
-#define TXID_PR_FMT	" [%d:%d]"
-#define TXID_PR_ARG	__entry->wcid, __entry->pktid
-
-DECLARE_EVENT_CLASS(dev_evt,
-	TP_PROTO(struct mt76x02_dev *dev),
-	TP_ARGS(dev),
-	TP_STRUCT__entry(
-		DEV_ENTRY
-	),
-	TP_fast_assign(
-		DEV_ASSIGN;
-	),
-	TP_printk(DEV_PR_FMT, DEV_PR_ARG)
-);
-
-DEFINE_EVENT(dev_evt, mac_txstat_poll,
-	TP_PROTO(struct mt76x02_dev *dev),
-	TP_ARGS(dev)
-);
-
-TRACE_EVENT(mac_txstat_fetch,
-	TP_PROTO(struct mt76x02_dev *dev,
-		 struct mt76x02_tx_status *stat),
-
-	TP_ARGS(dev, stat),
-
-	TP_STRUCT__entry(
-		DEV_ENTRY
-		TXID_ENTRY
-		__field(bool, success)
-		__field(bool, aggr)
-		__field(bool, ack_req)
-		__field(u16, rate)
-		__field(u8, retry)
-	),
-
-	TP_fast_assign(
-		DEV_ASSIGN;
-		__entry->success = stat->success;
-		__entry->aggr = stat->aggr;
-		__entry->ack_req = stat->ack_req;
-		__entry->wcid = stat->wcid;
-		__entry->pktid = stat->pktid;
-		__entry->rate = stat->rate;
-		__entry->retry = stat->retry;
-	),
-
-	TP_printk(
-		DEV_PR_FMT TXID_PR_FMT
-		" success:%d aggr:%d ack_req:%d"
-		" rate:%04x retry:%d",
-		DEV_PR_ARG, TXID_PR_ARG,
-		__entry->success, __entry->aggr, __entry->ack_req,
-		__entry->rate, __entry->retry
-	)
-);
-
-#endif
-
-#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
-#undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE mt76x02_trace
-
-#include <trace/define_trace.h>
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_txrx.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_txrx.c
deleted file mode 100644
index 3a31307..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_txrx.c
+++ /dev/null
@@ -1,183 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <linux/kernel.h>
-
-#include "mt76x02.h"
-
-void mt76x02_tx(struct ieee80211_hw *hw, struct ieee80211_tx_control *control,
-		struct sk_buff *skb)
-{
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct mt76x02_dev *dev = hw->priv;
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-
-	if (control->sta) {
-		struct mt76x02_sta *msta;
-
-		msta = (struct mt76x02_sta *)control->sta->drv_priv;
-		wcid = &msta->wcid;
-	} else if (vif) {
-		struct mt76x02_vif *mvif;
-
-		mvif = (struct mt76x02_vif *)vif->drv_priv;
-		wcid = &mvif->group_wcid;
-	}
-
-	mt76_tx(&dev->mphy, control->sta, wcid, skb);
-}
-EXPORT_SYMBOL_GPL(mt76x02_tx);
-
-void mt76x02_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			  struct sk_buff *skb)
-{
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	void *rxwi = skb->data;
-
-	if (q == MT_RXQ_MCU) {
-		mt76_mcu_rx_event(&dev->mt76, skb);
-		return;
-	}
-
-	skb_pull(skb, sizeof(struct mt76x02_rxwi));
-	if (mt76x02_mac_process_rx(dev, skb, rxwi)) {
-		dev_kfree_skb(skb);
-		return;
-	}
-
-	mt76_rx(mdev, q, skb);
-}
-EXPORT_SYMBOL_GPL(mt76x02_queue_rx_skb);
-
-s8 mt76x02_tx_get_max_txpwr_adj(struct mt76x02_dev *dev,
-				const struct ieee80211_tx_rate *rate)
-{
-	s8 max_txpwr;
-
-	if (rate->flags & IEEE80211_TX_RC_VHT_MCS) {
-		u8 mcs = ieee80211_rate_get_vht_mcs(rate);
-
-		if (mcs == 8 || mcs == 9) {
-			max_txpwr = dev->rate_power.vht[0];
-		} else {
-			u8 nss, idx;
-
-			nss = ieee80211_rate_get_vht_nss(rate);
-			idx = ((nss - 1) << 3) + mcs;
-			max_txpwr = dev->rate_power.ht[idx & 0xf];
-		}
-	} else if (rate->flags & IEEE80211_TX_RC_MCS) {
-		max_txpwr = dev->rate_power.ht[rate->idx & 0xf];
-	} else {
-		enum nl80211_band band = dev->mphy.chandef.chan->band;
-
-		if (band == NL80211_BAND_2GHZ) {
-			const struct ieee80211_rate *r;
-			struct wiphy *wiphy = dev->mt76.hw->wiphy;
-			struct mt76x02_rate_power *rp = &dev->rate_power;
-
-			r = &wiphy->bands[band]->bitrates[rate->idx];
-			if (r->flags & IEEE80211_RATE_SHORT_PREAMBLE)
-				max_txpwr = rp->cck[r->hw_value & 0x3];
-			else
-				max_txpwr = rp->ofdm[r->hw_value & 0x7];
-		} else {
-			max_txpwr = dev->rate_power.ofdm[rate->idx & 0x7];
-		}
-	}
-
-	return max_txpwr;
-}
-
-s8 mt76x02_tx_get_txpwr_adj(struct mt76x02_dev *dev, s8 txpwr, s8 max_txpwr_adj)
-{
-	txpwr = min_t(s8, txpwr, dev->txpower_conf);
-	txpwr -= (dev->target_power + dev->target_power_delta[0]);
-	txpwr = min_t(s8, txpwr, max_txpwr_adj);
-
-	if (!dev->enable_tpc)
-		return 0;
-	else if (txpwr >= 0)
-		return min_t(s8, txpwr, 7);
-	else
-		return (txpwr < -16) ? 8 : (txpwr + 32) / 2;
-}
-
-void mt76x02_tx_set_txpwr_auto(struct mt76x02_dev *dev, s8 txpwr)
-{
-	s8 txpwr_adj;
-
-	txpwr_adj = mt76x02_tx_get_txpwr_adj(dev, txpwr,
-					     dev->rate_power.ofdm[4]);
-	mt76_rmw_field(dev, MT_PROT_AUTO_TX_CFG,
-		       MT_PROT_AUTO_TX_CFG_PROT_PADJ, txpwr_adj);
-	mt76_rmw_field(dev, MT_PROT_AUTO_TX_CFG,
-		       MT_PROT_AUTO_TX_CFG_AUTO_PADJ, txpwr_adj);
-}
-EXPORT_SYMBOL_GPL(mt76x02_tx_set_txpwr_auto);
-
-bool mt76x02_tx_status_data(struct mt76_dev *mdev, u8 *update)
-{
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	struct mt76x02_tx_status stat;
-
-	if (!mt76x02_mac_load_tx_status(dev, &stat))
-		return false;
-
-	mt76x02_send_tx_status(dev, &stat, update);
-
-	return true;
-}
-EXPORT_SYMBOL_GPL(mt76x02_tx_status_data);
-
-int mt76x02_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-			   enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			   struct ieee80211_sta *sta,
-			   struct mt76_tx_info *tx_info)
-{
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx_info->skb->data;
-	struct mt76x02_txwi *txwi = txwi_ptr;
-	bool ampdu = IEEE80211_SKB_CB(tx_info->skb)->flags & IEEE80211_TX_CTL_AMPDU;
-	int hdrlen, len, pid, qsel = MT_QSEL_EDCA;
-
-	if (qid == MT_TXQ_PSD && wcid && wcid->idx < 128)
-		mt76x02_mac_wcid_set_drop(dev, wcid->idx, false);
-
-	hdrlen = ieee80211_hdrlen(hdr->frame_control);
-	len = tx_info->skb->len - (hdrlen & 2);
-	mt76x02_mac_write_txwi(dev, txwi, tx_info->skb, wcid, sta, len);
-
-	pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
-
-	/* encode packet rate for no-skb packet id to fix up status reporting */
-	if (pid == MT_PACKET_ID_NO_SKB)
-		pid = MT_PACKET_ID_HAS_RATE |
-		      (le16_to_cpu(txwi->rate) & MT_RXWI_RATE_INDEX) |
-		      FIELD_PREP(MT_PKTID_AC,
-				 skb_get_queue_mapping(tx_info->skb));
-
-	txwi->pktid = pid;
-
-	if (mt76_is_skb_pktid(pid) && ampdu)
-		qsel = MT_QSEL_MGMT;
-
-	tx_info->info = FIELD_PREP(MT_TXD_INFO_QSEL, qsel) |
-			MT_TXD_INFO_80211;
-
-	if (!wcid || wcid->hw_key_idx == 0xff || wcid->sw_iv)
-		tx_info->info |= MT_TXD_INFO_WIV;
-
-	if (sta) {
-		struct mt76x02_sta *msta = (struct mt76x02_sta *)sta->drv_priv;
-
-		ewma_pktlen_add(&msta->pktlen, tx_info->skb->len);
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_tx_prepare_skb);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_usb.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_usb.h
deleted file mode 100644
index b5be884..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_usb.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#ifndef __MT76x02_USB_H
-#define __MT76x02_USB_H
-
-#include "mt76x02.h"
-
-int mt76x02u_mac_start(struct mt76x02_dev *dev);
-void mt76x02u_init_mcu(struct mt76_dev *dev);
-void mt76x02u_mcu_fw_reset(struct mt76x02_dev *dev);
-int mt76x02u_mcu_fw_send_data(struct mt76x02_dev *dev, const void *data,
-			      int data_len, u32 max_payload, u32 offset);
-
-int mt76x02u_skb_dma_info(struct sk_buff *skb, int port, u32 flags);
-int mt76x02u_tx_prepare_skb(struct mt76_dev *mdev, void *data,
-			    enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			    struct ieee80211_sta *sta,
-			    struct mt76_tx_info *tx_info);
-void mt76x02u_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e);
-void mt76x02u_init_beacon_config(struct mt76x02_dev *dev);
-void mt76x02u_exit_beacon_config(struct mt76x02_dev *dev);
-#endif /* __MT76x02_USB_H */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_usb_core.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_usb_core.c
deleted file mode 100644
index 2c6c038..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_usb_core.c
+++ /dev/null
@@ -1,282 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include "mt76x02_usb.h"
-
-static void mt76x02u_remove_dma_hdr(struct sk_buff *skb)
-{
-	int hdr_len;
-
-	skb_pull(skb, sizeof(struct mt76x02_txwi) + MT_DMA_HDR_LEN);
-	hdr_len = ieee80211_get_hdrlen_from_skb(skb);
-	if (hdr_len % 4)
-		mt76x02_remove_hdr_pad(skb, 2);
-}
-
-void mt76x02u_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e)
-{
-	mt76x02u_remove_dma_hdr(e->skb);
-	mt76_tx_complete_skb(mdev, e->wcid, e->skb);
-}
-EXPORT_SYMBOL_GPL(mt76x02u_tx_complete_skb);
-
-int mt76x02u_mac_start(struct mt76x02_dev *dev)
-{
-	mt76x02_mac_reset_counters(dev);
-
-	mt76_wr(dev, MT_MAC_SYS_CTRL, MT_MAC_SYS_CTRL_ENABLE_TX);
-	if (!mt76x02_wait_for_wpdma(&dev->mt76, 200000))
-		return -ETIMEDOUT;
-
-	mt76_wr(dev, MT_RX_FILTR_CFG, dev->mt76.rxfilter);
-
-	mt76_wr(dev, MT_MAC_SYS_CTRL,
-		MT_MAC_SYS_CTRL_ENABLE_TX |
-		MT_MAC_SYS_CTRL_ENABLE_RX);
-
-	if (!mt76x02_wait_for_wpdma(&dev->mt76, 50))
-		return -ETIMEDOUT;
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02u_mac_start);
-
-int mt76x02u_skb_dma_info(struct sk_buff *skb, int port, u32 flags)
-{
-	u32 info, pad;
-
-	/* Buffer layout:
-	 *	|   4B   | xfer len |      pad       |  4B  |
-	 *	| TXINFO | pkt/cmd  | zero pad to 4B | zero |
-	 *
-	 * length field of TXINFO should be set to 'xfer len'.
-	 */
-	info = FIELD_PREP(MT_TXD_INFO_LEN, round_up(skb->len, 4)) |
-	       FIELD_PREP(MT_TXD_INFO_DPORT, port) | flags;
-	put_unaligned_le32(info, skb_push(skb, sizeof(info)));
-
-	pad = round_up(skb->len, 4) + 4 - skb->len;
-	return mt76_skb_adjust_pad(skb, pad);
-}
-
-int mt76x02u_tx_prepare_skb(struct mt76_dev *mdev, void *data,
-			    enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			    struct ieee80211_sta *sta,
-			    struct mt76_tx_info *tx_info)
-{
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	int pid, len = tx_info->skb->len, ep = q2ep(dev->mphy.q_tx[qid]->hw_idx);
-	struct mt76x02_txwi *txwi;
-	bool ampdu = IEEE80211_SKB_CB(tx_info->skb)->flags & IEEE80211_TX_CTL_AMPDU;
-	enum mt76_qsel qsel;
-	u32 flags;
-	int err;
-
-	mt76_insert_hdr_pad(tx_info->skb);
-
-	txwi = (struct mt76x02_txwi *)(tx_info->skb->data - sizeof(*txwi));
-	mt76x02_mac_write_txwi(dev, txwi, tx_info->skb, wcid, sta, len);
-	skb_push(tx_info->skb, sizeof(*txwi));
-
-	pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
-
-	/* encode packet rate for no-skb packet id to fix up status reporting */
-	if (pid == MT_PACKET_ID_NO_SKB)
-		pid = MT_PACKET_ID_HAS_RATE |
-		      (le16_to_cpu(txwi->rate) & MT_PKTID_RATE) |
-		      FIELD_PREP(MT_PKTID_AC,
-				 skb_get_queue_mapping(tx_info->skb));
-
-	txwi->pktid = pid;
-
-	if ((mt76_is_skb_pktid(pid) && ampdu) || ep == MT_EP_OUT_HCCA)
-		qsel = MT_QSEL_MGMT;
-	else
-		qsel = MT_QSEL_EDCA;
-
-	flags = FIELD_PREP(MT_TXD_INFO_QSEL, qsel) |
-		MT_TXD_INFO_80211;
-	if (!wcid || wcid->hw_key_idx == 0xff || wcid->sw_iv)
-		flags |= MT_TXD_INFO_WIV;
-
-	if (sta) {
-		struct mt76x02_sta *msta = (struct mt76x02_sta *)sta->drv_priv;
-
-		ewma_pktlen_add(&msta->pktlen, tx_info->skb->len);
-	}
-
-	err = mt76x02u_skb_dma_info(tx_info->skb, WLAN_PORT, flags);
-	if (err && wcid)
-		/* Release pktid in case of error. */
-		idr_remove(&wcid->pktid, pid);
-
-	return err;
-}
-EXPORT_SYMBOL_GPL(mt76x02u_tx_prepare_skb);
-
-/* Trigger pre-TBTT event 8 ms before TBTT */
-#define PRE_TBTT_USEC 8000
-
-/* Beacon SRAM memory is limited to 8kB. We need to send PS buffered frames
- * (which can be 1500 bytes big) via beacon memory. That make limit of number
- * of slots to 5. TODO: dynamically calculate offsets in beacon SRAM.
- */
-#define N_BCN_SLOTS 5
-
-static void mt76x02u_start_pre_tbtt_timer(struct mt76x02_dev *dev)
-{
-	u64 time;
-	u32 tbtt;
-
-	/* Get remaining TBTT in usec */
-	tbtt = mt76_get_field(dev, MT_TBTT_TIMER, MT_TBTT_TIMER_VAL);
-	tbtt *= 32;
-
-	if (tbtt <= PRE_TBTT_USEC) {
-		queue_work(system_highpri_wq, &dev->pre_tbtt_work);
-		return;
-	}
-
-	time = (tbtt - PRE_TBTT_USEC) * 1000ull;
-	hrtimer_start(&dev->pre_tbtt_timer, time, HRTIMER_MODE_REL);
-}
-
-static void mt76x02u_restart_pre_tbtt_timer(struct mt76x02_dev *dev)
-{
-	u32 tbtt, dw0, dw1;
-	u64 tsf, time;
-
-	/* Get remaining TBTT in usec */
-	tbtt = mt76_get_field(dev, MT_TBTT_TIMER, MT_TBTT_TIMER_VAL);
-	tbtt *= 32;
-
-	dw0 = mt76_rr(dev, MT_TSF_TIMER_DW0);
-	dw1 = mt76_rr(dev, MT_TSF_TIMER_DW1);
-	tsf = (u64)dw0 << 32 | dw1;
-	dev_dbg(dev->mt76.dev, "TSF: %llu us TBTT %u us\n", tsf, tbtt);
-
-	/* Convert beacon interval in TU (1024 usec) to nsec */
-	time = ((1000000000ull * dev->mt76.beacon_int) >> 10);
-
-	/* Adjust time to trigger hrtimer 8ms before TBTT */
-	if (tbtt < PRE_TBTT_USEC)
-		time -= (PRE_TBTT_USEC - tbtt) * 1000ull;
-	else
-		time += (tbtt - PRE_TBTT_USEC) * 1000ull;
-
-	hrtimer_start(&dev->pre_tbtt_timer, time, HRTIMER_MODE_REL);
-}
-
-static void mt76x02u_stop_pre_tbtt_timer(struct mt76x02_dev *dev)
-{
-	do {
-		hrtimer_cancel(&dev->pre_tbtt_timer);
-		cancel_work_sync(&dev->pre_tbtt_work);
-		/* Timer can be rearmed by work. */
-	} while (hrtimer_active(&dev->pre_tbtt_timer));
-}
-
-static void mt76x02u_pre_tbtt_work(struct work_struct *work)
-{
-	struct mt76x02_dev *dev =
-		container_of(work, struct mt76x02_dev, pre_tbtt_work);
-	struct beacon_bc_data data = {};
-	struct sk_buff *skb;
-	int nbeacons;
-
-	if (!dev->mt76.beacon_mask)
-		return;
-
-	if (mt76_hw(dev)->conf.flags & IEEE80211_CONF_OFFCHANNEL)
-		return;
-
-	mt76x02_resync_beacon_timer(dev);
-
-	/* Prevent corrupt transmissions during update */
-	mt76_set(dev, MT_BCN_BYPASS_MASK, 0xffff);
-	dev->beacon_data_count = 0;
-
-	ieee80211_iterate_active_interfaces(mt76_hw(dev),
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		mt76x02_update_beacon_iter, dev);
-
-	mt76_csa_check(&dev->mt76);
-
-	if (dev->mt76.csa_complete) {
-		mt76_csa_finish(&dev->mt76);
-		goto out;
-	}
-
-	nbeacons = hweight8(dev->mt76.beacon_mask);
-	mt76x02_enqueue_buffered_bc(dev, &data, N_BCN_SLOTS - nbeacons);
-
-	while ((skb = __skb_dequeue(&data.q)) != NULL)
-		mt76x02_mac_set_beacon(dev, skb);
-
-out:
-	mt76_wr(dev, MT_BCN_BYPASS_MASK,
-		0xff00 | ~(0xff00 >> dev->beacon_data_count));
-
-	mt76x02u_restart_pre_tbtt_timer(dev);
-}
-
-static enum hrtimer_restart mt76x02u_pre_tbtt_interrupt(struct hrtimer *timer)
-{
-	struct mt76x02_dev *dev =
-	    container_of(timer, struct mt76x02_dev, pre_tbtt_timer);
-
-	queue_work(system_highpri_wq, &dev->pre_tbtt_work);
-
-	return HRTIMER_NORESTART;
-}
-
-static void mt76x02u_pre_tbtt_enable(struct mt76x02_dev *dev, bool en)
-{
-	if (en && dev->mt76.beacon_mask &&
-	    !hrtimer_active(&dev->pre_tbtt_timer))
-		mt76x02u_start_pre_tbtt_timer(dev);
-	if (!en)
-		mt76x02u_stop_pre_tbtt_timer(dev);
-}
-
-static void mt76x02u_beacon_enable(struct mt76x02_dev *dev, bool en)
-{
-	if (WARN_ON_ONCE(!dev->mt76.beacon_int))
-		return;
-
-	if (en)
-		mt76x02u_start_pre_tbtt_timer(dev);
-}
-
-void mt76x02u_init_beacon_config(struct mt76x02_dev *dev)
-{
-	static const struct mt76x02_beacon_ops beacon_ops = {
-		.nslots = N_BCN_SLOTS,
-		.slot_size = (8192 / N_BCN_SLOTS) & ~63,
-		.pre_tbtt_enable = mt76x02u_pre_tbtt_enable,
-		.beacon_enable = mt76x02u_beacon_enable,
-	};
-	dev->beacon_ops = &beacon_ops;
-
-	hrtimer_init(&dev->pre_tbtt_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
-	dev->pre_tbtt_timer.function = mt76x02u_pre_tbtt_interrupt;
-	INIT_WORK(&dev->pre_tbtt_work, mt76x02u_pre_tbtt_work);
-
-	mt76x02_init_beacon_config(dev);
-}
-EXPORT_SYMBOL_GPL(mt76x02u_init_beacon_config);
-
-void mt76x02u_exit_beacon_config(struct mt76x02_dev *dev)
-{
-	if (!test_bit(MT76_REMOVED, &dev->mphy.state))
-		mt76_clear(dev, MT_BEACON_TIME_CFG,
-			   MT_BEACON_TIME_CFG_TIMER_EN |
-			   MT_BEACON_TIME_CFG_SYNC_MODE |
-			   MT_BEACON_TIME_CFG_TBTT_EN |
-			   MT_BEACON_TIME_CFG_BEACON_TX);
-
-	mt76x02u_stop_pre_tbtt_timer(dev);
-}
-EXPORT_SYMBOL_GPL(mt76x02u_exit_beacon_config);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_usb_mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_usb_mcu.c
deleted file mode 100644
index 02da543..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_usb_mcu.c
+++ /dev/null
@@ -1,296 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <linux/module.h>
-#include <linux/firmware.h>
-
-#include "mt76x02.h"
-#include "mt76x02_mcu.h"
-#include "mt76x02_usb.h"
-
-#define MT_CMD_HDR_LEN			4
-
-#define MT_FCE_DMA_ADDR			0x0230
-#define MT_FCE_DMA_LEN			0x0234
-
-#define MT_TX_CPU_FROM_FCE_CPU_DESC_IDX	0x09a8
-
-static void
-mt76x02u_multiple_mcu_reads(struct mt76_dev *dev, u8 *data, int len)
-{
-	struct mt76_usb *usb = &dev->usb;
-	int i;
-
-	WARN_ON_ONCE(len / 8 != usb->mcu.rp_len);
-
-	for (i = 0; i < usb->mcu.rp_len; i++) {
-		u32 reg = get_unaligned_le32(data + 8 * i) - usb->mcu.base;
-		u32 val = get_unaligned_le32(data + 8 * i + 4);
-
-		WARN_ON_ONCE(usb->mcu.rp[i].reg != reg);
-		usb->mcu.rp[i].value = val;
-	}
-}
-
-static int mt76x02u_mcu_wait_resp(struct mt76_dev *dev, u8 seq)
-{
-	struct mt76_usb *usb = &dev->usb;
-	u8 *data = usb->mcu.data;
-	int i, len, ret;
-	u32 rxfce;
-
-	for (i = 0; i < 5; i++) {
-		ret = mt76u_bulk_msg(dev, data, MCU_RESP_URB_SIZE, &len,
-				     300, MT_EP_IN_CMD_RESP);
-		if (ret == -ETIMEDOUT)
-			continue;
-		if (ret)
-			goto out;
-
-		if (usb->mcu.rp)
-			mt76x02u_multiple_mcu_reads(dev, data + 4, len - 8);
-
-		rxfce = get_unaligned_le32(data);
-		if (seq == FIELD_GET(MT_RX_FCE_INFO_CMD_SEQ, rxfce) &&
-		    FIELD_GET(MT_RX_FCE_INFO_EVT_TYPE, rxfce) == EVT_CMD_DONE)
-			return 0;
-
-		dev_err(dev->dev, "error: MCU resp evt:%lx seq:%hhx-%lx\n",
-			FIELD_GET(MT_RX_FCE_INFO_EVT_TYPE, rxfce),
-			seq, FIELD_GET(MT_RX_FCE_INFO_CMD_SEQ, rxfce));
-	}
-out:
-	dev_err(dev->dev, "error: %s failed with %d\n", __func__, ret);
-	return ret;
-}
-
-static int
-__mt76x02u_mcu_send_msg(struct mt76_dev *dev, struct sk_buff *skb,
-			int cmd, bool wait_resp)
-{
-	u8 seq = 0;
-	u32 info;
-	int ret;
-
-	if (test_bit(MT76_REMOVED, &dev->phy.state)) {
-		ret = 0;
-		goto out;
-	}
-
-	if (wait_resp) {
-		seq = ++dev->mcu.msg_seq & 0xf;
-		if (!seq)
-			seq = ++dev->mcu.msg_seq & 0xf;
-	}
-
-	info = FIELD_PREP(MT_MCU_MSG_CMD_SEQ, seq) |
-	       FIELD_PREP(MT_MCU_MSG_CMD_TYPE, cmd) |
-	       MT_MCU_MSG_TYPE_CMD;
-	ret = mt76x02u_skb_dma_info(skb, CPU_TX_PORT, info);
-	if (ret)
-		return ret;
-
-	ret = mt76u_bulk_msg(dev, skb->data, skb->len, NULL, 500,
-			     MT_EP_OUT_INBAND_CMD);
-	if (ret)
-		goto out;
-
-	if (wait_resp)
-		ret = mt76x02u_mcu_wait_resp(dev, seq);
-
-out:
-	consume_skb(skb);
-
-	return ret;
-}
-
-static int
-mt76x02u_mcu_send_msg(struct mt76_dev *dev, int cmd, const void *data,
-		      int len, bool wait_resp)
-{
-	struct sk_buff *skb;
-	int err;
-
-	skb = mt76_mcu_msg_alloc(dev, data, len);
-	if (!skb)
-		return -ENOMEM;
-
-	mutex_lock(&dev->mcu.mutex);
-	err = __mt76x02u_mcu_send_msg(dev, skb, cmd, wait_resp);
-	mutex_unlock(&dev->mcu.mutex);
-
-	return err;
-}
-
-static inline void skb_put_le32(struct sk_buff *skb, u32 val)
-{
-	put_unaligned_le32(val, skb_put(skb, 4));
-}
-
-static int
-mt76x02u_mcu_wr_rp(struct mt76_dev *dev, u32 base,
-		   const struct mt76_reg_pair *data, int n)
-{
-	const int max_vals_per_cmd = MT_INBAND_PACKET_MAX_LEN / 8;
-	const int CMD_RANDOM_WRITE = 12;
-	struct sk_buff *skb;
-	int cnt, i, ret;
-
-	if (!n)
-		return 0;
-
-	cnt = min(max_vals_per_cmd, n);
-
-	skb = alloc_skb(cnt * 8 + MT_DMA_HDR_LEN + 4, GFP_KERNEL);
-	if (!skb)
-		return -ENOMEM;
-	skb_reserve(skb, MT_DMA_HDR_LEN);
-
-	for (i = 0; i < cnt; i++) {
-		skb_put_le32(skb, base + data[i].reg);
-		skb_put_le32(skb, data[i].value);
-	}
-
-	mutex_lock(&dev->mcu.mutex);
-	ret = __mt76x02u_mcu_send_msg(dev, skb, CMD_RANDOM_WRITE, cnt == n);
-	mutex_unlock(&dev->mcu.mutex);
-	if (ret)
-		return ret;
-
-	return mt76x02u_mcu_wr_rp(dev, base, data + cnt, n - cnt);
-}
-
-static int
-mt76x02u_mcu_rd_rp(struct mt76_dev *dev, u32 base,
-		   struct mt76_reg_pair *data, int n)
-{
-	const int CMD_RANDOM_READ = 10;
-	const int max_vals_per_cmd = MT_INBAND_PACKET_MAX_LEN / 8;
-	struct mt76_usb *usb = &dev->usb;
-	struct sk_buff *skb;
-	int cnt, i, ret;
-
-	if (!n)
-		return 0;
-
-	cnt = min(max_vals_per_cmd, n);
-	if (cnt != n)
-		return -EINVAL;
-
-	skb = alloc_skb(cnt * 8 + MT_DMA_HDR_LEN + 4, GFP_KERNEL);
-	if (!skb)
-		return -ENOMEM;
-	skb_reserve(skb, MT_DMA_HDR_LEN);
-
-	for (i = 0; i < cnt; i++) {
-		skb_put_le32(skb, base + data[i].reg);
-		skb_put_le32(skb, data[i].value);
-	}
-
-	mutex_lock(&dev->mcu.mutex);
-
-	usb->mcu.rp = data;
-	usb->mcu.rp_len = n;
-	usb->mcu.base = base;
-
-	ret = __mt76x02u_mcu_send_msg(dev, skb, CMD_RANDOM_READ, true);
-
-	usb->mcu.rp = NULL;
-
-	mutex_unlock(&dev->mcu.mutex);
-
-	return ret;
-}
-
-void mt76x02u_mcu_fw_reset(struct mt76x02_dev *dev)
-{
-	mt76u_vendor_request(&dev->mt76, MT_VEND_DEV_MODE,
-			     USB_DIR_OUT | USB_TYPE_VENDOR,
-			     0x1, 0, NULL, 0);
-}
-EXPORT_SYMBOL_GPL(mt76x02u_mcu_fw_reset);
-
-static int
-__mt76x02u_mcu_fw_send_data(struct mt76x02_dev *dev, u8 *data,
-			    const void *fw_data, int len, u32 dst_addr)
-{
-	__le32 info;
-	u32 val;
-	int err, data_len;
-
-	info = cpu_to_le32(FIELD_PREP(MT_MCU_MSG_PORT, CPU_TX_PORT) |
-			   FIELD_PREP(MT_MCU_MSG_LEN, len) |
-			   MT_MCU_MSG_TYPE_CMD);
-
-	memcpy(data, &info, sizeof(info));
-	memcpy(data + sizeof(info), fw_data, len);
-	memset(data + sizeof(info) + len, 0, 4);
-
-	mt76u_single_wr(&dev->mt76, MT_VEND_WRITE_FCE,
-			MT_FCE_DMA_ADDR, dst_addr);
-	len = roundup(len, 4);
-	mt76u_single_wr(&dev->mt76, MT_VEND_WRITE_FCE,
-			MT_FCE_DMA_LEN, len << 16);
-
-	data_len = MT_CMD_HDR_LEN + len + sizeof(info);
-
-	err = mt76u_bulk_msg(&dev->mt76, data, data_len, NULL, 1000,
-			     MT_EP_OUT_INBAND_CMD);
-	if (err) {
-		dev_err(dev->mt76.dev, "firmware upload failed: %d\n", err);
-		return err;
-	}
-
-	val = mt76_rr(dev, MT_TX_CPU_FROM_FCE_CPU_DESC_IDX);
-	val++;
-	mt76_wr(dev, MT_TX_CPU_FROM_FCE_CPU_DESC_IDX, val);
-
-	return 0;
-}
-
-int mt76x02u_mcu_fw_send_data(struct mt76x02_dev *dev, const void *data,
-			      int data_len, u32 max_payload, u32 offset)
-{
-	int len, err = 0, pos = 0, max_len = max_payload - 8;
-	u8 *buf;
-
-	buf = kmalloc(max_payload, GFP_KERNEL);
-	if (!buf)
-		return -ENOMEM;
-
-	while (data_len > 0) {
-		len = min_t(int, data_len, max_len);
-		err = __mt76x02u_mcu_fw_send_data(dev, buf, data + pos,
-						  len, offset + pos);
-		if (err < 0)
-			break;
-
-		data_len -= len;
-		pos += len;
-		usleep_range(5000, 10000);
-	}
-	kfree(buf);
-
-	return err;
-}
-EXPORT_SYMBOL_GPL(mt76x02u_mcu_fw_send_data);
-
-void mt76x02u_init_mcu(struct mt76_dev *dev)
-{
-	static const struct mt76_mcu_ops mt76x02u_mcu_ops = {
-		.headroom = MT_CMD_HDR_LEN,
-		.tailroom = 8,
-		.mcu_send_msg = mt76x02u_mcu_send_msg,
-		.mcu_parse_response = mt76x02_mcu_parse_response,
-		.mcu_wr_rp = mt76x02u_mcu_wr_rp,
-		.mcu_rd_rp = mt76x02u_mcu_rd_rp,
-	};
-
-	dev->mcu_ops = &mt76x02u_mcu_ops;
-}
-EXPORT_SYMBOL_GPL(mt76x02u_init_mcu);
-
-MODULE_AUTHOR("Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>");
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_util.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_util.c
deleted file mode 100644
index 5bd0a0b..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x02_util.c
+++ /dev/null
@@ -1,699 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl>
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/module.h>
-#include "mt76x02.h"
-
-#define MT76x02_CCK_RATE(_idx, _rate) {					\
-	.bitrate = _rate,					\
-	.flags = IEEE80211_RATE_SHORT_PREAMBLE,			\
-	.hw_value = (MT_PHY_TYPE_CCK << 8) | (_idx),		\
-	.hw_value_short = (MT_PHY_TYPE_CCK << 8) | (8 + (_idx)),	\
-}
-
-struct ieee80211_rate mt76x02_rates[] = {
-	MT76x02_CCK_RATE(0, 10),
-	MT76x02_CCK_RATE(1, 20),
-	MT76x02_CCK_RATE(2, 55),
-	MT76x02_CCK_RATE(3, 110),
-	OFDM_RATE(0, 60),
-	OFDM_RATE(1, 90),
-	OFDM_RATE(2, 120),
-	OFDM_RATE(3, 180),
-	OFDM_RATE(4, 240),
-	OFDM_RATE(5, 360),
-	OFDM_RATE(6, 480),
-	OFDM_RATE(7, 540),
-};
-EXPORT_SYMBOL_GPL(mt76x02_rates);
-
-static const struct ieee80211_iface_limit mt76x02_if_limits[] = {
-	{
-		.max = 1,
-		.types = BIT(NL80211_IFTYPE_ADHOC)
-	}, {
-		.max = 8,
-		.types = BIT(NL80211_IFTYPE_STATION) |
-#ifdef CONFIG_MAC80211_MESH
-			 BIT(NL80211_IFTYPE_MESH_POINT) |
-#endif
-			 BIT(NL80211_IFTYPE_P2P_CLIENT) |
-			 BIT(NL80211_IFTYPE_P2P_GO) |
-			 BIT(NL80211_IFTYPE_AP)
-	 },
-};
-
-static const struct ieee80211_iface_limit mt76x02u_if_limits[] = {
-	{
-		.max = 1,
-		.types = BIT(NL80211_IFTYPE_ADHOC)
-	}, {
-		.max = 2,
-		.types = BIT(NL80211_IFTYPE_STATION) |
-#ifdef CONFIG_MAC80211_MESH
-			 BIT(NL80211_IFTYPE_MESH_POINT) |
-#endif
-			 BIT(NL80211_IFTYPE_P2P_CLIENT) |
-			 BIT(NL80211_IFTYPE_P2P_GO) |
-			 BIT(NL80211_IFTYPE_AP)
-	},
-};
-
-static const struct ieee80211_iface_combination mt76x02_if_comb[] = {
-	{
-		.limits = mt76x02_if_limits,
-		.n_limits = ARRAY_SIZE(mt76x02_if_limits),
-		.max_interfaces = 8,
-		.num_different_channels = 1,
-		.beacon_int_infra_match = true,
-		.radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
-				       BIT(NL80211_CHAN_WIDTH_20) |
-				       BIT(NL80211_CHAN_WIDTH_40) |
-				       BIT(NL80211_CHAN_WIDTH_80),
-	}
-};
-
-static const struct ieee80211_iface_combination mt76x02u_if_comb[] = {
-	{
-		.limits = mt76x02u_if_limits,
-		.n_limits = ARRAY_SIZE(mt76x02u_if_limits),
-		.max_interfaces = 2,
-		.num_different_channels = 1,
-		.beacon_int_infra_match = true,
-	}
-};
-
-static void
-mt76x02_led_set_config(struct mt76_dev *mdev, u8 delay_on,
-		       u8 delay_off)
-{
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev,
-					       mt76);
-	u32 val;
-
-	val = FIELD_PREP(MT_LED_STATUS_DURATION, 0xff) |
-	      FIELD_PREP(MT_LED_STATUS_OFF, delay_off) |
-	      FIELD_PREP(MT_LED_STATUS_ON, delay_on);
-
-	mt76_wr(dev, MT_LED_S0(mdev->led_pin), val);
-	mt76_wr(dev, MT_LED_S1(mdev->led_pin), val);
-
-	val = MT_LED_CTRL_REPLAY(mdev->led_pin) |
-	      MT_LED_CTRL_KICK(mdev->led_pin);
-	if (mdev->led_al)
-		val |= MT_LED_CTRL_POLARITY(mdev->led_pin);
-	mt76_wr(dev, MT_LED_CTRL, val);
-}
-
-static int
-mt76x02_led_set_blink(struct led_classdev *led_cdev,
-		      unsigned long *delay_on,
-		      unsigned long *delay_off)
-{
-	struct mt76_dev *mdev = container_of(led_cdev, struct mt76_dev,
-					     led_cdev);
-	u8 delta_on, delta_off;
-
-	delta_off = max_t(u8, *delay_off / 10, 1);
-	delta_on = max_t(u8, *delay_on / 10, 1);
-
-	mt76x02_led_set_config(mdev, delta_on, delta_off);
-
-	return 0;
-}
-
-static void
-mt76x02_led_set_brightness(struct led_classdev *led_cdev,
-			   enum led_brightness brightness)
-{
-	struct mt76_dev *mdev = container_of(led_cdev, struct mt76_dev,
-					     led_cdev);
-
-	if (!brightness)
-		mt76x02_led_set_config(mdev, 0, 0xff);
-	else
-		mt76x02_led_set_config(mdev, 0xff, 0);
-}
-
-int mt76x02_init_device(struct mt76x02_dev *dev)
-{
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	struct wiphy *wiphy = hw->wiphy;
-
-	INIT_DELAYED_WORK(&dev->mphy.mac_work, mt76x02_mac_work);
-
-	hw->queues = 4;
-	hw->max_rates = 1;
-	hw->max_report_rates = 7;
-	hw->max_rate_tries = 1;
-	hw->extra_tx_headroom = 2;
-
-	if (mt76_is_usb(&dev->mt76)) {
-		hw->extra_tx_headroom += sizeof(struct mt76x02_txwi) +
-					 MT_DMA_HDR_LEN;
-		wiphy->iface_combinations = mt76x02u_if_comb;
-		wiphy->n_iface_combinations = ARRAY_SIZE(mt76x02u_if_comb);
-	} else {
-		INIT_DELAYED_WORK(&dev->wdt_work, mt76x02_wdt_work);
-
-		mt76x02_dfs_init_detector(dev);
-
-		wiphy->reg_notifier = mt76x02_regd_notifier;
-		wiphy->iface_combinations = mt76x02_if_comb;
-		wiphy->n_iface_combinations = ARRAY_SIZE(mt76x02_if_comb);
-
-		/* init led callbacks */
-		if (IS_ENABLED(CONFIG_MT76_LEDS)) {
-			dev->mt76.led_cdev.brightness_set =
-					mt76x02_led_set_brightness;
-			dev->mt76.led_cdev.blink_set = mt76x02_led_set_blink;
-		}
-	}
-
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
-
-	hw->sta_data_size = sizeof(struct mt76x02_sta);
-	hw->vif_data_size = sizeof(struct mt76x02_vif);
-
-	ieee80211_hw_set(hw, SUPPORTS_HT_CCK_RATES);
-	ieee80211_hw_set(hw, HOST_BROADCAST_PS_BUFFERING);
-	ieee80211_hw_set(hw, NEEDS_UNIQUE_STA_ADDR);
-
-	dev->mt76.global_wcid.idx = 255;
-	dev->mt76.global_wcid.hw_key_idx = -1;
-	dev->slottime = 9;
-
-	if (is_mt76x2(dev)) {
-		dev->mphy.sband_2g.sband.ht_cap.cap |=
-				IEEE80211_HT_CAP_LDPC_CODING;
-		dev->mphy.sband_5g.sband.ht_cap.cap |=
-				IEEE80211_HT_CAP_LDPC_CODING;
-		dev->mphy.chainmask = 0x202;
-		dev->mphy.antenna_mask = 3;
-	} else {
-		dev->mphy.chainmask = 0x101;
-		dev->mphy.antenna_mask = 1;
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_init_device);
-
-void mt76x02_configure_filter(struct ieee80211_hw *hw,
-			      unsigned int changed_flags,
-			      unsigned int *total_flags, u64 multicast)
-{
-	struct mt76x02_dev *dev = hw->priv;
-	u32 flags = 0;
-
-#define MT76_FILTER(_flag, _hw) do { \
-		flags |= *total_flags & FIF_##_flag;			\
-		dev->mt76.rxfilter &= ~(_hw);				\
-		dev->mt76.rxfilter |= !(flags & FIF_##_flag) * (_hw);	\
-	} while (0)
-
-	mutex_lock(&dev->mt76.mutex);
-
-	dev->mt76.rxfilter &= ~MT_RX_FILTR_CFG_OTHER_BSS;
-
-	MT76_FILTER(FCSFAIL, MT_RX_FILTR_CFG_CRC_ERR);
-	MT76_FILTER(PLCPFAIL, MT_RX_FILTR_CFG_PHY_ERR);
-	MT76_FILTER(CONTROL, MT_RX_FILTR_CFG_ACK |
-			     MT_RX_FILTR_CFG_CTS |
-			     MT_RX_FILTR_CFG_CFEND |
-			     MT_RX_FILTR_CFG_CFACK |
-			     MT_RX_FILTR_CFG_BA |
-			     MT_RX_FILTR_CFG_CTRL_RSV);
-	MT76_FILTER(PSPOLL, MT_RX_FILTR_CFG_PSPOLL);
-
-	*total_flags = flags;
-	mt76_wr(dev, MT_RX_FILTR_CFG, dev->mt76.rxfilter);
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-EXPORT_SYMBOL_GPL(mt76x02_configure_filter);
-
-int mt76x02_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		    struct ieee80211_sta *sta)
-{
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	struct mt76x02_sta *msta = (struct mt76x02_sta *)sta->drv_priv;
-	struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
-	int idx = 0;
-
-	memset(msta, 0, sizeof(*msta));
-
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT76x02_N_WCIDS);
-	if (idx < 0)
-		return -ENOSPC;
-
-	msta->vif = mvif;
-	msta->wcid.sta = 1;
-	msta->wcid.idx = idx;
-	msta->wcid.hw_key_idx = -1;
-	mt76x02_mac_wcid_setup(dev, idx, mvif->idx, sta->addr);
-	mt76x02_mac_wcid_set_drop(dev, idx, false);
-	ewma_pktlen_init(&msta->pktlen);
-
-	if (vif->type == NL80211_IFTYPE_AP)
-		set_bit(MT_WCID_FLAG_CHECK_PS, &msta->wcid.flags);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_sta_add);
-
-void mt76x02_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			struct ieee80211_sta *sta)
-{
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv;
-	int idx = wcid->idx;
-
-	mt76x02_mac_wcid_set_drop(dev, idx, true);
-	mt76x02_mac_wcid_setup(dev, idx, 0, NULL);
-}
-EXPORT_SYMBOL_GPL(mt76x02_sta_remove);
-
-static void
-mt76x02_vif_init(struct mt76x02_dev *dev, struct ieee80211_vif *vif,
-		 unsigned int idx)
-{
-	struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
-	struct mt76_txq *mtxq;
-
-	memset(mvif, 0, sizeof(*mvif));
-
-	mvif->idx = idx;
-	mvif->group_wcid.idx = MT_VIF_WCID(idx);
-	mvif->group_wcid.hw_key_idx = -1;
-	mt76_packet_id_init(&mvif->group_wcid);
-
-	mtxq = (struct mt76_txq *)vif->txq->drv_priv;
-	rcu_assign_pointer(dev->mt76.wcid[MT_VIF_WCID(idx)], &mvif->group_wcid);
-	mtxq->wcid = MT_VIF_WCID(idx);
-}
-
-int
-mt76x02_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt76x02_dev *dev = hw->priv;
-	unsigned int idx = 0;
-
-	/* Allow to change address in HW if we create first interface. */
-	if (!dev->mt76.vif_mask &&
-	    (((vif->addr[0] ^ dev->mphy.macaddr[0]) & ~GENMASK(4, 1)) ||
-	     memcmp(vif->addr + 1, dev->mphy.macaddr + 1, ETH_ALEN - 1)))
-		mt76x02_mac_setaddr(dev, vif->addr);
-
-	if (vif->addr[0] & BIT(1))
-		idx = 1 + (((dev->mphy.macaddr[0] ^ vif->addr[0]) >> 2) & 7);
-
-	/*
-	 * Client mode typically only has one configurable BSSID register,
-	 * which is used for bssidx=0. This is linked to the MAC address.
-	 * Since mac80211 allows changing interface types, and we cannot
-	 * force the use of the primary MAC address for a station mode
-	 * interface, we need some other way of configuring a per-interface
-	 * remote BSSID.
-	 * The hardware provides an AP-Client feature, where bssidx 0-7 are
-	 * used for AP mode and bssidx 8-15 for client mode.
-	 * We shift the station interface bss index by 8 to force the
-	 * hardware to recognize the BSSID.
-	 * The resulting bssidx mismatch for unicast frames is ignored by hw.
-	 */
-	if (vif->type == NL80211_IFTYPE_STATION)
-		idx += 8;
-
-	/* vif is already set or idx is 8 for AP/Mesh/... */
-	if (dev->mt76.vif_mask & BIT_ULL(idx) ||
-	    (vif->type != NL80211_IFTYPE_STATION && idx > 7))
-		return -EBUSY;
-
-	dev->mt76.vif_mask |= BIT_ULL(idx);
-
-	mt76x02_vif_init(dev, vif, idx);
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_add_interface);
-
-void mt76x02_remove_interface(struct ieee80211_hw *hw,
-			      struct ieee80211_vif *vif)
-{
-	struct mt76x02_dev *dev = hw->priv;
-	struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
-
-	dev->mt76.vif_mask &= ~BIT_ULL(mvif->idx);
-	rcu_assign_pointer(dev->mt76.wcid[mvif->group_wcid.idx], NULL);
-	mt76_packet_id_flush(&dev->mt76, &mvif->group_wcid);
-}
-EXPORT_SYMBOL_GPL(mt76x02_remove_interface);
-
-int mt76x02_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			 struct ieee80211_ampdu_params *params)
-{
-	enum ieee80211_ampdu_mlme_action action = params->action;
-	struct ieee80211_sta *sta = params->sta;
-	struct mt76x02_dev *dev = hw->priv;
-	struct mt76x02_sta *msta = (struct mt76x02_sta *)sta->drv_priv;
-	struct ieee80211_txq *txq = sta->txq[params->tid];
-	u16 tid = params->tid;
-	u16 ssn = params->ssn;
-	struct mt76_txq *mtxq;
-	int ret = 0;
-
-	if (!txq)
-		return -EINVAL;
-
-	mtxq = (struct mt76_txq *)txq->drv_priv;
-
-	mutex_lock(&dev->mt76.mutex);
-	switch (action) {
-	case IEEE80211_AMPDU_RX_START:
-		mt76_rx_aggr_start(&dev->mt76, &msta->wcid, tid,
-				   ssn, params->buf_size);
-		mt76_set(dev, MT_WCID_ADDR(msta->wcid.idx) + 4, BIT(16 + tid));
-		break;
-	case IEEE80211_AMPDU_RX_STOP:
-		mt76_rx_aggr_stop(&dev->mt76, &msta->wcid, tid);
-		mt76_clear(dev, MT_WCID_ADDR(msta->wcid.idx) + 4,
-			   BIT(16 + tid));
-		break;
-	case IEEE80211_AMPDU_TX_OPERATIONAL:
-		mtxq->aggr = true;
-		mtxq->send_bar = false;
-		ieee80211_send_bar(vif, sta->addr, tid, mtxq->agg_ssn);
-		break;
-	case IEEE80211_AMPDU_TX_STOP_FLUSH:
-	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
-		mtxq->aggr = false;
-		break;
-	case IEEE80211_AMPDU_TX_START:
-		mtxq->agg_ssn = IEEE80211_SN_TO_SEQ(ssn);
-		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
-		break;
-	case IEEE80211_AMPDU_TX_STOP_CONT:
-		mtxq->aggr = false;
-		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
-	}
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt76x02_ampdu_action);
-
-int mt76x02_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
-		    struct ieee80211_vif *vif, struct ieee80211_sta *sta,
-		    struct ieee80211_key_conf *key)
-{
-	struct mt76x02_dev *dev = hw->priv;
-	struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
-	struct mt76x02_sta *msta;
-	struct mt76_wcid *wcid;
-	int idx = key->keyidx;
-	int ret;
-
-	/* fall back to sw encryption for unsupported ciphers */
-	switch (key->cipher) {
-	case WLAN_CIPHER_SUITE_WEP40:
-	case WLAN_CIPHER_SUITE_WEP104:
-	case WLAN_CIPHER_SUITE_TKIP:
-	case WLAN_CIPHER_SUITE_CCMP:
-		break;
-	default:
-		return -EOPNOTSUPP;
-	}
-
-	/*
-	 * The hardware does not support per-STA RX GTK, fall back
-	 * to software mode for these.
-	 */
-	if ((vif->type == NL80211_IFTYPE_ADHOC ||
-	     vif->type == NL80211_IFTYPE_MESH_POINT) &&
-	    (key->cipher == WLAN_CIPHER_SUITE_TKIP ||
-	     key->cipher == WLAN_CIPHER_SUITE_CCMP) &&
-	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
-		return -EOPNOTSUPP;
-
-	/*
-	 * In USB AP mode, broadcast/multicast frames are setup in beacon
-	 * data registers and sent via HW beacons engine, they require to
-	 * be already encrypted.
-	 */
-	if (mt76_is_usb(&dev->mt76) &&
-	    vif->type == NL80211_IFTYPE_AP &&
-	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
-		return -EOPNOTSUPP;
-
-	/* MT76x0 GTK offloading does not work with more than one VIF */
-	if (is_mt76x0(dev) && !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
-		return -EOPNOTSUPP;
-
-	msta = sta ? (struct mt76x02_sta *)sta->drv_priv : NULL;
-	wcid = msta ? &msta->wcid : &mvif->group_wcid;
-
-	if (cmd == SET_KEY) {
-		key->hw_key_idx = wcid->idx;
-		wcid->hw_key_idx = idx;
-		if (key->flags & IEEE80211_KEY_FLAG_RX_MGMT) {
-			key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
-			wcid->sw_iv = true;
-		}
-	} else {
-		if (idx == wcid->hw_key_idx) {
-			wcid->hw_key_idx = -1;
-			wcid->sw_iv = false;
-		}
-
-		key = NULL;
-	}
-	mt76_wcid_key_setup(&dev->mt76, wcid, key);
-
-	if (!msta) {
-		if (key || wcid->hw_key_idx == idx) {
-			ret = mt76x02_mac_wcid_set_key(dev, wcid->idx, key);
-			if (ret)
-				return ret;
-		}
-
-		return mt76x02_mac_shared_key_setup(dev, mvif->idx, idx, key);
-	}
-
-	return mt76x02_mac_wcid_set_key(dev, msta->wcid.idx, key);
-}
-EXPORT_SYMBOL_GPL(mt76x02_set_key);
-
-int mt76x02_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		    u16 queue, const struct ieee80211_tx_queue_params *params)
-{
-	struct mt76x02_dev *dev = hw->priv;
-	u8 cw_min = 5, cw_max = 10, qid;
-	u32 val;
-
-	qid = dev->mphy.q_tx[queue]->hw_idx;
-
-	if (params->cw_min)
-		cw_min = fls(params->cw_min);
-	if (params->cw_max)
-		cw_max = fls(params->cw_max);
-
-	val = FIELD_PREP(MT_EDCA_CFG_TXOP, params->txop) |
-	      FIELD_PREP(MT_EDCA_CFG_AIFSN, params->aifs) |
-	      FIELD_PREP(MT_EDCA_CFG_CWMIN, cw_min) |
-	      FIELD_PREP(MT_EDCA_CFG_CWMAX, cw_max);
-	mt76_wr(dev, MT_EDCA_CFG_AC(qid), val);
-
-	val = mt76_rr(dev, MT_WMM_TXOP(qid));
-	val &= ~(MT_WMM_TXOP_MASK << MT_WMM_TXOP_SHIFT(qid));
-	val |= params->txop << MT_WMM_TXOP_SHIFT(qid);
-	mt76_wr(dev, MT_WMM_TXOP(qid), val);
-
-	val = mt76_rr(dev, MT_WMM_AIFSN);
-	val &= ~(MT_WMM_AIFSN_MASK << MT_WMM_AIFSN_SHIFT(qid));
-	val |= params->aifs << MT_WMM_AIFSN_SHIFT(qid);
-	mt76_wr(dev, MT_WMM_AIFSN, val);
-
-	val = mt76_rr(dev, MT_WMM_CWMIN);
-	val &= ~(MT_WMM_CWMIN_MASK << MT_WMM_CWMIN_SHIFT(qid));
-	val |= cw_min << MT_WMM_CWMIN_SHIFT(qid);
-	mt76_wr(dev, MT_WMM_CWMIN, val);
-
-	val = mt76_rr(dev, MT_WMM_CWMAX);
-	val &= ~(MT_WMM_CWMAX_MASK << MT_WMM_CWMAX_SHIFT(qid));
-	val |= cw_max << MT_WMM_CWMAX_SHIFT(qid);
-	mt76_wr(dev, MT_WMM_CWMAX, val);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_conf_tx);
-
-void mt76x02_set_tx_ackto(struct mt76x02_dev *dev)
-{
-	u8 ackto, sifs, slottime = dev->slottime;
-
-	/* As defined by IEEE 802.11-2007 17.3.8.6 */
-	slottime += 3 * dev->coverage_class;
-	mt76_rmw_field(dev, MT_BKOFF_SLOT_CFG,
-		       MT_BKOFF_SLOT_CFG_SLOTTIME, slottime);
-
-	sifs = mt76_get_field(dev, MT_XIFS_TIME_CFG,
-			      MT_XIFS_TIME_CFG_OFDM_SIFS);
-
-	ackto = slottime + sifs;
-	mt76_rmw_field(dev, MT_TX_TIMEOUT_CFG,
-		       MT_TX_TIMEOUT_CFG_ACKTO, ackto);
-}
-EXPORT_SYMBOL_GPL(mt76x02_set_tx_ackto);
-
-void mt76x02_set_coverage_class(struct ieee80211_hw *hw,
-				s16 coverage_class)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	mutex_lock(&dev->mt76.mutex);
-	dev->coverage_class = max_t(s16, coverage_class, 0);
-	mt76x02_set_tx_ackto(dev);
-	mutex_unlock(&dev->mt76.mutex);
-}
-EXPORT_SYMBOL_GPL(mt76x02_set_coverage_class);
-
-int mt76x02_set_rts_threshold(struct ieee80211_hw *hw, u32 val)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	if (val != ~0 && val > 0xffff)
-		return -EINVAL;
-
-	mutex_lock(&dev->mt76.mutex);
-	mt76x02_mac_set_rts_thresh(dev, val);
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x02_set_rts_threshold);
-
-void mt76x02_sta_rate_tbl_update(struct ieee80211_hw *hw,
-				 struct ieee80211_vif *vif,
-				 struct ieee80211_sta *sta)
-{
-	struct mt76x02_dev *dev = hw->priv;
-	struct mt76x02_sta *msta = (struct mt76x02_sta *)sta->drv_priv;
-	struct ieee80211_sta_rates *rates = rcu_dereference(sta->rates);
-	struct ieee80211_tx_rate rate = {};
-
-	if (!rates)
-		return;
-
-	rate.idx = rates->rate[0].idx;
-	rate.flags = rates->rate[0].flags;
-	mt76x02_mac_wcid_set_rate(dev, &msta->wcid, &rate);
-}
-EXPORT_SYMBOL_GPL(mt76x02_sta_rate_tbl_update);
-
-void mt76x02_remove_hdr_pad(struct sk_buff *skb, int len)
-{
-	int hdrlen;
-
-	if (!len)
-		return;
-
-	hdrlen = ieee80211_get_hdrlen_from_skb(skb);
-	memmove(skb->data + len, skb->data, hdrlen);
-	skb_pull(skb, len);
-}
-EXPORT_SYMBOL_GPL(mt76x02_remove_hdr_pad);
-
-void mt76x02_sw_scan_complete(struct ieee80211_hw *hw,
-			      struct ieee80211_vif *vif)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	clear_bit(MT76_SCANNING, &dev->mphy.state);
-	if (dev->cal.gain_init_done) {
-		/* Restore AGC gain and resume calibration after scanning. */
-		dev->cal.low_gain = -1;
-		ieee80211_queue_delayed_work(hw, &dev->cal_work, 0);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76x02_sw_scan_complete);
-
-void mt76x02_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta,
-		    bool ps)
-{
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	struct mt76x02_sta *msta = (struct mt76x02_sta *)sta->drv_priv;
-	int idx = msta->wcid.idx;
-
-	mt76_stop_tx_queues(&dev->mphy, sta, true);
-	if (mt76_is_mmio(mdev))
-		mt76x02_mac_wcid_set_drop(dev, idx, ps);
-}
-EXPORT_SYMBOL_GPL(mt76x02_sta_ps);
-
-void mt76x02_bss_info_changed(struct ieee80211_hw *hw,
-			      struct ieee80211_vif *vif,
-			      struct ieee80211_bss_conf *info,
-			      u32 changed)
-{
-	struct mt76x02_vif *mvif = (struct mt76x02_vif *)vif->drv_priv;
-	struct mt76x02_dev *dev = hw->priv;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (changed & BSS_CHANGED_BSSID)
-		mt76x02_mac_set_bssid(dev, mvif->idx, info->bssid);
-
-	if (changed & BSS_CHANGED_HT || changed & BSS_CHANGED_ERP_CTS_PROT)
-		mt76x02_mac_set_tx_protection(dev, info->use_cts_prot,
-					      info->ht_operation_mode);
-
-	if (changed & BSS_CHANGED_BEACON_INT) {
-		mt76_rmw_field(dev, MT_BEACON_TIME_CFG,
-			       MT_BEACON_TIME_CFG_INTVAL,
-			       info->beacon_int << 4);
-		dev->mt76.beacon_int = info->beacon_int;
-	}
-
-	if (changed & BSS_CHANGED_BEACON_ENABLED)
-		mt76x02_mac_set_beacon_enable(dev, vif, info->enable_beacon);
-
-	if (changed & BSS_CHANGED_ERP_PREAMBLE)
-		mt76x02_mac_set_short_preamble(dev, info->use_short_preamble);
-
-	if (changed & BSS_CHANGED_ERP_SLOT) {
-		int slottime = info->use_short_slot ? 9 : 20;
-
-		dev->slottime = slottime;
-		mt76x02_set_tx_ackto(dev);
-	}
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-EXPORT_SYMBOL_GPL(mt76x02_bss_info_changed);
-
-void mt76x02_config_mac_addr_list(struct mt76x02_dev *dev)
-{
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	struct wiphy *wiphy = hw->wiphy;
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(dev->macaddr_list); i++) {
-		u8 *addr = dev->macaddr_list[i].addr;
-
-		memcpy(addr, dev->mphy.macaddr, ETH_ALEN);
-
-		if (!i)
-			continue;
-
-		addr[0] |= BIT(1);
-		addr[0] ^= ((i - 1) << 2);
-	}
-	wiphy->addresses = dev->macaddr_list;
-	wiphy->n_addresses = ARRAY_SIZE(dev->macaddr_list);
-}
-EXPORT_SYMBOL_GPL(mt76x02_config_mac_addr_list);
-
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/Makefile b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/Makefile
deleted file mode 100644
index caf0895..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-only
-obj-$(CONFIG_MT76x2_COMMON) += mt76x2-common.o
-obj-$(CONFIG_MT76x2E) += mt76x2e.o
-obj-$(CONFIG_MT76x2U) += mt76x2u.o
-
-mt76x2-common-y := \
-	eeprom.o mac.o init.o phy.o mcu.o
-
-mt76x2e-y := \
-	pci.o pci_main.o pci_init.o pci_mcu.o \
-	pci_phy.o
-
-mt76x2u-y := \
-	usb.o usb_init.o usb_main.o usb_mac.o usb_mcu.o \
-	usb_phy.o
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/debugfs.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/debugfs.c
deleted file mode 100644
index a9d52ba..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/debugfs.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <linux/debugfs.h>
-#include "mt76x02.h"
-
-static int
-mt76x02_ampdu_stat_read(struct seq_file *file, void *data)
-{
-	struct mt76x02_dev *dev = file->private;
-	int i, j;
-
-	for (i = 0; i < 4; i++) {
-		seq_puts(file, "Length: ");
-		for (j = 0; j < 8; j++)
-			seq_printf(file, "%8d | ", i * 8 + j + 1);
-		seq_puts(file, "\n");
-		seq_puts(file, "Count:  ");
-		for (j = 0; j < 8; j++)
-			seq_printf(file, "%8d | ", dev->aggr_stats[i * 8 + j]);
-		seq_puts(file, "\n");
-		seq_puts(file, "--------");
-		for (j = 0; j < 8; j++)
-			seq_puts(file, "-----------");
-		seq_puts(file, "\n");
-	}
-
-	return 0;
-}
-
-static int
-mt76x02_ampdu_stat_open(struct inode *inode, struct file *f)
-{
-	return single_open(f, mt76x02_ampdu_stat_read, inode->i_private);
-}
-
-static int read_txpower(struct seq_file *file, void *data)
-{
-	struct mt76x02_dev *dev = dev_get_drvdata(file->private);
-
-	seq_printf(file, "Target power: %d\n", dev->target_power);
-
-	mt76_seq_puts_array(file, "Delta", dev->target_power_delta,
-			    ARRAY_SIZE(dev->target_power_delta));
-	return 0;
-}
-
-static const struct file_operations fops_ampdu_stat = {
-	.open = mt76x02_ampdu_stat_open,
-	.read = seq_read,
-	.llseek = seq_lseek,
-	.release = single_release,
-};
-
-static int
-mt76x02_dfs_stat_read(struct seq_file *file, void *data)
-{
-	struct mt76x02_dev *dev = file->private;
-	struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
-	int i;
-
-	seq_printf(file, "allocated sequences:\t%d\n",
-		   dfs_pd->seq_stats.seq_pool_len);
-	seq_printf(file, "used sequences:\t\t%d\n",
-		   dfs_pd->seq_stats.seq_len);
-	seq_puts(file, "\n");
-
-	for (i = 0; i < MT_DFS_NUM_ENGINES; i++) {
-		seq_printf(file, "engine: %d\n", i);
-		seq_printf(file, "  hw pattern detected:\t%d\n",
-			   dfs_pd->stats[i].hw_pattern);
-		seq_printf(file, "  hw pulse discarded:\t%d\n",
-			   dfs_pd->stats[i].hw_pulse_discarded);
-		seq_printf(file, "  sw pattern detected:\t%d\n",
-			   dfs_pd->stats[i].sw_pattern);
-	}
-
-	return 0;
-}
-
-static int
-mt76x02_dfs_stat_open(struct inode *inode, struct file *f)
-{
-	return single_open(f, mt76x02_dfs_stat_read, inode->i_private);
-}
-
-static const struct file_operations fops_dfs_stat = {
-	.open = mt76x02_dfs_stat_open,
-	.read = seq_read,
-	.llseek = seq_lseek,
-	.release = single_release,
-};
-
-static int read_agc(struct seq_file *file, void *data)
-{
-	struct mt76x02_dev *dev = dev_get_drvdata(file->private);
-
-	seq_printf(file, "avg_rssi: %d\n", dev->cal.avg_rssi_all);
-	seq_printf(file, "low_gain: %d\n", dev->cal.low_gain);
-	seq_printf(file, "false_cca: %d\n", dev->cal.false_cca);
-	seq_printf(file, "agc_gain_adjust: %d\n", dev->cal.agc_gain_adjust);
-
-	return 0;
-}
-
-void mt76x02_init_debugfs(struct mt76x02_dev *dev)
-{
-	struct dentry *dir;
-
-	dir = mt76_register_debugfs(&dev->mt76);
-	if (!dir)
-		return;
-
-	debugfs_create_u8("temperature", 0400, dir, &dev->cal.temp);
-	debugfs_create_bool("tpc", 0600, dir, &dev->enable_tpc);
-
-	debugfs_create_file("ampdu_stat", 0400, dir, dev, &fops_ampdu_stat);
-	debugfs_create_file("dfs_stats", 0400, dir, dev, &fops_dfs_stat);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "txpower", dir,
-				    read_txpower);
-
-	debugfs_create_devm_seqfile(dev->mt76.dev, "agc", dir, read_agc);
-}
-EXPORT_SYMBOL_GPL(mt76x02_init_debugfs);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/eeprom.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/eeprom.c
deleted file mode 100644
index d580940..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/eeprom.c
+++ /dev/null
@@ -1,500 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/module.h>
-#include <linux/of.h>
-#include <asm/unaligned.h>
-#include "mt76x2.h"
-#include "eeprom.h"
-
-#define EE_FIELD(_name, _value) [MT_EE_##_name] = (_value) | 1
-
-static int
-mt76x2_eeprom_get_macaddr(struct mt76x02_dev *dev)
-{
-	void *src = dev->mt76.eeprom.data + MT_EE_MAC_ADDR;
-
-	memcpy(dev->mphy.macaddr, src, ETH_ALEN);
-	return 0;
-}
-
-static bool
-mt76x2_has_cal_free_data(struct mt76x02_dev *dev, u8 *efuse)
-{
-	u16 *efuse_w = (u16 *)efuse;
-
-	if (efuse_w[MT_EE_NIC_CONF_0] != 0)
-		return false;
-
-	if (efuse_w[MT_EE_XTAL_TRIM_1] == 0xffff)
-		return false;
-
-	if (efuse_w[MT_EE_TX_POWER_DELTA_BW40] != 0)
-		return false;
-
-	if (efuse_w[MT_EE_TX_POWER_0_START_2G] == 0xffff)
-		return false;
-
-	if (efuse_w[MT_EE_TX_POWER_0_GRP3_TX_POWER_DELTA] != 0)
-		return false;
-
-	if (efuse_w[MT_EE_TX_POWER_0_GRP4_TSSI_SLOPE] == 0xffff)
-		return false;
-
-	return true;
-}
-
-static void
-mt76x2_apply_cal_free_data(struct mt76x02_dev *dev, u8 *efuse)
-{
-#define GROUP_5G(_id)							   \
-	MT_EE_TX_POWER_0_START_5G + MT_TX_POWER_GROUP_SIZE_5G * (_id),	   \
-	MT_EE_TX_POWER_0_START_5G + MT_TX_POWER_GROUP_SIZE_5G * (_id) + 1, \
-	MT_EE_TX_POWER_1_START_5G + MT_TX_POWER_GROUP_SIZE_5G * (_id),	   \
-	MT_EE_TX_POWER_1_START_5G + MT_TX_POWER_GROUP_SIZE_5G * (_id) + 1
-
-	static const u8 cal_free_bytes[] = {
-		MT_EE_XTAL_TRIM_1,
-		MT_EE_TX_POWER_EXT_PA_5G + 1,
-		MT_EE_TX_POWER_0_START_2G,
-		MT_EE_TX_POWER_0_START_2G + 1,
-		MT_EE_TX_POWER_1_START_2G,
-		MT_EE_TX_POWER_1_START_2G + 1,
-		GROUP_5G(0),
-		GROUP_5G(1),
-		GROUP_5G(2),
-		GROUP_5G(3),
-		GROUP_5G(4),
-		GROUP_5G(5),
-		MT_EE_RF_2G_TSSI_OFF_TXPOWER,
-		MT_EE_RF_2G_RX_HIGH_GAIN + 1,
-		MT_EE_RF_5G_GRP0_1_RX_HIGH_GAIN,
-		MT_EE_RF_5G_GRP0_1_RX_HIGH_GAIN + 1,
-		MT_EE_RF_5G_GRP2_3_RX_HIGH_GAIN,
-		MT_EE_RF_5G_GRP2_3_RX_HIGH_GAIN + 1,
-		MT_EE_RF_5G_GRP4_5_RX_HIGH_GAIN,
-		MT_EE_RF_5G_GRP4_5_RX_HIGH_GAIN + 1,
-	};
-	struct device_node *np = dev->mt76.dev->of_node;
-	u8 *eeprom = dev->mt76.eeprom.data;
-	u8 prev_grp0[4] = {
-		eeprom[MT_EE_TX_POWER_0_START_5G],
-		eeprom[MT_EE_TX_POWER_0_START_5G + 1],
-		eeprom[MT_EE_TX_POWER_1_START_5G],
-		eeprom[MT_EE_TX_POWER_1_START_5G + 1]
-	};
-	u16 val;
-	int i;
-
-	if (!np || !of_property_read_bool(np, "mediatek,eeprom-merge-otp"))
-		return;
-
-	if (!mt76x2_has_cal_free_data(dev, efuse))
-		return;
-
-	for (i = 0; i < ARRAY_SIZE(cal_free_bytes); i++) {
-		int offset = cal_free_bytes[i];
-
-		eeprom[offset] = efuse[offset];
-	}
-
-	if (!(efuse[MT_EE_TX_POWER_0_START_5G] |
-	      efuse[MT_EE_TX_POWER_0_START_5G + 1]))
-		memcpy(eeprom + MT_EE_TX_POWER_0_START_5G, prev_grp0, 2);
-	if (!(efuse[MT_EE_TX_POWER_1_START_5G] |
-	      efuse[MT_EE_TX_POWER_1_START_5G + 1]))
-		memcpy(eeprom + MT_EE_TX_POWER_1_START_5G, prev_grp0 + 2, 2);
-
-	val = get_unaligned_le16(efuse + MT_EE_BT_RCAL_RESULT);
-	if (val != 0xffff)
-		eeprom[MT_EE_BT_RCAL_RESULT] = val & 0xff;
-
-	val = get_unaligned_le16(efuse + MT_EE_BT_VCDL_CALIBRATION);
-	if (val != 0xffff)
-		eeprom[MT_EE_BT_VCDL_CALIBRATION + 1] = val >> 8;
-
-	val = get_unaligned_le16(efuse + MT_EE_BT_PMUCFG);
-	if (val != 0xffff)
-		eeprom[MT_EE_BT_PMUCFG] = val & 0xff;
-}
-
-static int mt76x2_check_eeprom(struct mt76x02_dev *dev)
-{
-	u16 val = get_unaligned_le16(dev->mt76.eeprom.data);
-
-	if (!val)
-		val = get_unaligned_le16(dev->mt76.eeprom.data + MT_EE_PCI_ID);
-
-	switch (val) {
-	case 0x7662:
-	case 0x7612:
-		return 0;
-	default:
-		dev_err(dev->mt76.dev, "EEPROM data check failed: %04x\n", val);
-		return -EINVAL;
-	}
-}
-
-static int
-mt76x2_eeprom_load(struct mt76x02_dev *dev)
-{
-	void *efuse;
-	bool found;
-	int ret;
-
-	ret = mt76_eeprom_init(&dev->mt76, MT7662_EEPROM_SIZE);
-	if (ret < 0)
-		return ret;
-
-	found = ret;
-	if (found)
-		found = !mt76x2_check_eeprom(dev);
-
-	dev->mt76.otp.data = devm_kzalloc(dev->mt76.dev, MT7662_EEPROM_SIZE,
-					  GFP_KERNEL);
-	dev->mt76.otp.size = MT7662_EEPROM_SIZE;
-	if (!dev->mt76.otp.data)
-		return -ENOMEM;
-
-	efuse = dev->mt76.otp.data;
-
-	if (mt76x02_get_efuse_data(dev, 0, efuse, MT7662_EEPROM_SIZE,
-				   MT_EE_READ))
-		goto out;
-
-	if (found) {
-		mt76x2_apply_cal_free_data(dev, efuse);
-	} else {
-		/* FIXME: check if efuse data is complete */
-		found = true;
-		memcpy(dev->mt76.eeprom.data, efuse, MT7662_EEPROM_SIZE);
-	}
-
-out:
-	if (!found)
-		return -ENOENT;
-
-	return 0;
-}
-
-static void
-mt76x2_set_rx_gain_group(struct mt76x02_dev *dev, u8 val)
-{
-	s8 *dest = dev->cal.rx.high_gain;
-
-	if (!mt76x02_field_valid(val)) {
-		dest[0] = 0;
-		dest[1] = 0;
-		return;
-	}
-
-	dest[0] = mt76x02_sign_extend(val, 4);
-	dest[1] = mt76x02_sign_extend(val >> 4, 4);
-}
-
-static void
-mt76x2_set_rssi_offset(struct mt76x02_dev *dev, int chain, u8 val)
-{
-	s8 *dest = dev->cal.rx.rssi_offset;
-
-	if (!mt76x02_field_valid(val)) {
-		dest[chain] = 0;
-		return;
-	}
-
-	dest[chain] = mt76x02_sign_extend_optional(val, 7);
-}
-
-static enum mt76x2_cal_channel_group
-mt76x2_get_cal_channel_group(int channel)
-{
-	if (channel >= 184 && channel <= 196)
-		return MT_CH_5G_JAPAN;
-	if (channel <= 48)
-		return MT_CH_5G_UNII_1;
-	if (channel <= 64)
-		return MT_CH_5G_UNII_2;
-	if (channel <= 114)
-		return MT_CH_5G_UNII_2E_1;
-	if (channel <= 144)
-		return MT_CH_5G_UNII_2E_2;
-	return MT_CH_5G_UNII_3;
-}
-
-static u8
-mt76x2_get_5g_rx_gain(struct mt76x02_dev *dev, u8 channel)
-{
-	enum mt76x2_cal_channel_group group;
-
-	group = mt76x2_get_cal_channel_group(channel);
-	switch (group) {
-	case MT_CH_5G_JAPAN:
-		return mt76x02_eeprom_get(dev,
-					  MT_EE_RF_5G_GRP0_1_RX_HIGH_GAIN);
-	case MT_CH_5G_UNII_1:
-		return mt76x02_eeprom_get(dev,
-					  MT_EE_RF_5G_GRP0_1_RX_HIGH_GAIN) >> 8;
-	case MT_CH_5G_UNII_2:
-		return mt76x02_eeprom_get(dev,
-					  MT_EE_RF_5G_GRP2_3_RX_HIGH_GAIN);
-	case MT_CH_5G_UNII_2E_1:
-		return mt76x02_eeprom_get(dev,
-					  MT_EE_RF_5G_GRP2_3_RX_HIGH_GAIN) >> 8;
-	case MT_CH_5G_UNII_2E_2:
-		return mt76x02_eeprom_get(dev,
-					  MT_EE_RF_5G_GRP4_5_RX_HIGH_GAIN);
-	default:
-		return mt76x02_eeprom_get(dev,
-					  MT_EE_RF_5G_GRP4_5_RX_HIGH_GAIN) >> 8;
-	}
-}
-
-void mt76x2_read_rx_gain(struct mt76x02_dev *dev)
-{
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-	int channel = chan->hw_value;
-	s8 lna_5g[3], lna_2g;
-	u8 lna;
-	u16 val;
-
-	if (chan->band == NL80211_BAND_2GHZ)
-		val = mt76x02_eeprom_get(dev, MT_EE_RF_2G_RX_HIGH_GAIN) >> 8;
-	else
-		val = mt76x2_get_5g_rx_gain(dev, channel);
-
-	mt76x2_set_rx_gain_group(dev, val);
-
-	mt76x02_get_rx_gain(dev, chan->band, &val, &lna_2g, lna_5g);
-	mt76x2_set_rssi_offset(dev, 0, val);
-	mt76x2_set_rssi_offset(dev, 1, val >> 8);
-
-	dev->cal.rx.mcu_gain =  (lna_2g & 0xff);
-	dev->cal.rx.mcu_gain |= (lna_5g[0] & 0xff) << 8;
-	dev->cal.rx.mcu_gain |= (lna_5g[1] & 0xff) << 16;
-	dev->cal.rx.mcu_gain |= (lna_5g[2] & 0xff) << 24;
-
-	lna = mt76x02_get_lna_gain(dev, &lna_2g, lna_5g, chan);
-	dev->cal.rx.lna_gain = mt76x02_sign_extend(lna, 8);
-}
-EXPORT_SYMBOL_GPL(mt76x2_read_rx_gain);
-
-void mt76x2_get_rate_power(struct mt76x02_dev *dev, struct mt76x02_rate_power *t,
-			   struct ieee80211_channel *chan)
-{
-	bool is_5ghz;
-	u16 val;
-
-	is_5ghz = chan->band == NL80211_BAND_5GHZ;
-
-	memset(t, 0, sizeof(*t));
-
-	val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_CCK);
-	t->cck[0] = t->cck[1] = mt76x02_rate_power_val(val);
-	t->cck[2] = t->cck[3] = mt76x02_rate_power_val(val >> 8);
-
-	if (is_5ghz)
-		val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_OFDM_5G_6M);
-	else
-		val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_OFDM_2G_6M);
-	t->ofdm[0] = t->ofdm[1] = mt76x02_rate_power_val(val);
-	t->ofdm[2] = t->ofdm[3] = mt76x02_rate_power_val(val >> 8);
-
-	if (is_5ghz)
-		val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_OFDM_5G_24M);
-	else
-		val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_OFDM_2G_24M);
-	t->ofdm[4] = t->ofdm[5] = mt76x02_rate_power_val(val);
-	t->ofdm[6] = t->ofdm[7] = mt76x02_rate_power_val(val >> 8);
-
-	val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_HT_MCS0);
-	t->ht[0] = t->ht[1] = mt76x02_rate_power_val(val);
-	t->ht[2] = t->ht[3] = mt76x02_rate_power_val(val >> 8);
-
-	val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_HT_MCS4);
-	t->ht[4] = t->ht[5] = mt76x02_rate_power_val(val);
-	t->ht[6] = t->ht[7] = mt76x02_rate_power_val(val >> 8);
-
-	val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_HT_MCS8);
-	t->ht[8] = t->ht[9] = mt76x02_rate_power_val(val);
-	t->ht[10] = t->ht[11] = mt76x02_rate_power_val(val >> 8);
-
-	val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_HT_MCS12);
-	t->ht[12] = t->ht[13] = mt76x02_rate_power_val(val);
-	t->ht[14] = t->ht[15] = mt76x02_rate_power_val(val >> 8);
-
-	val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_VHT_MCS8);
-	if (!is_5ghz)
-		val >>= 8;
-	t->vht[0] = t->vht[1] = mt76x02_rate_power_val(val >> 8);
-}
-EXPORT_SYMBOL_GPL(mt76x2_get_rate_power);
-
-static void
-mt76x2_get_power_info_2g(struct mt76x02_dev *dev,
-			 struct mt76x2_tx_power_info *t,
-			 struct ieee80211_channel *chan,
-			 int chain, int offset)
-{
-	int channel = chan->hw_value;
-	int delta_idx;
-	u8 data[6];
-	u16 val;
-
-	if (channel < 6)
-		delta_idx = 3;
-	else if (channel < 11)
-		delta_idx = 4;
-	else
-		delta_idx = 5;
-
-	mt76x02_eeprom_copy(dev, offset, data, sizeof(data));
-
-	t->chain[chain].tssi_slope = data[0];
-	t->chain[chain].tssi_offset = data[1];
-	t->chain[chain].target_power = data[2];
-	t->chain[chain].delta =
-		mt76x02_sign_extend_optional(data[delta_idx], 7);
-
-	val = mt76x02_eeprom_get(dev, MT_EE_RF_2G_TSSI_OFF_TXPOWER);
-	t->target_power = val >> 8;
-}
-
-static void
-mt76x2_get_power_info_5g(struct mt76x02_dev *dev,
-			 struct mt76x2_tx_power_info *t,
-			 struct ieee80211_channel *chan,
-			 int chain, int offset)
-{
-	int channel = chan->hw_value;
-	enum mt76x2_cal_channel_group group;
-	int delta_idx;
-	u16 val;
-	u8 data[5];
-
-	group = mt76x2_get_cal_channel_group(channel);
-	offset += group * MT_TX_POWER_GROUP_SIZE_5G;
-
-	if (channel >= 192)
-		delta_idx = 4;
-	else if (channel >= 184)
-		delta_idx = 3;
-	else if (channel < 44)
-		delta_idx = 3;
-	else if (channel < 52)
-		delta_idx = 4;
-	else if (channel < 58)
-		delta_idx = 3;
-	else if (channel < 98)
-		delta_idx = 4;
-	else if (channel < 106)
-		delta_idx = 3;
-	else if (channel < 116)
-		delta_idx = 4;
-	else if (channel < 130)
-		delta_idx = 3;
-	else if (channel < 149)
-		delta_idx = 4;
-	else if (channel < 157)
-		delta_idx = 3;
-	else
-		delta_idx = 4;
-
-	mt76x02_eeprom_copy(dev, offset, data, sizeof(data));
-
-	t->chain[chain].tssi_slope = data[0];
-	t->chain[chain].tssi_offset = data[1];
-	t->chain[chain].target_power = data[2];
-	t->chain[chain].delta =
-		mt76x02_sign_extend_optional(data[delta_idx], 7);
-
-	val = mt76x02_eeprom_get(dev, MT_EE_RF_2G_RX_HIGH_GAIN);
-	t->target_power = val & 0xff;
-}
-
-void mt76x2_get_power_info(struct mt76x02_dev *dev,
-			   struct mt76x2_tx_power_info *t,
-			   struct ieee80211_channel *chan)
-{
-	u16 bw40, bw80;
-
-	memset(t, 0, sizeof(*t));
-
-	bw40 = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_DELTA_BW40);
-	bw80 = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_DELTA_BW80);
-
-	if (chan->band == NL80211_BAND_5GHZ) {
-		bw40 >>= 8;
-		mt76x2_get_power_info_5g(dev, t, chan, 0,
-					 MT_EE_TX_POWER_0_START_5G);
-		mt76x2_get_power_info_5g(dev, t, chan, 1,
-					 MT_EE_TX_POWER_1_START_5G);
-	} else {
-		mt76x2_get_power_info_2g(dev, t, chan, 0,
-					 MT_EE_TX_POWER_0_START_2G);
-		mt76x2_get_power_info_2g(dev, t, chan, 1,
-					 MT_EE_TX_POWER_1_START_2G);
-	}
-
-	if (mt76x2_tssi_enabled(dev) ||
-	    !mt76x02_field_valid(t->target_power))
-		t->target_power = t->chain[0].target_power;
-
-	t->delta_bw40 = mt76x02_rate_power_val(bw40);
-	t->delta_bw80 = mt76x02_rate_power_val(bw80);
-}
-EXPORT_SYMBOL_GPL(mt76x2_get_power_info);
-
-int mt76x2_get_temp_comp(struct mt76x02_dev *dev, struct mt76x2_temp_comp *t)
-{
-	enum nl80211_band band = dev->mphy.chandef.chan->band;
-	u16 val, slope;
-	u8 bounds;
-
-	memset(t, 0, sizeof(*t));
-
-	if (!mt76x2_temp_tx_alc_enabled(dev))
-		return -EINVAL;
-
-	if (!mt76x02_ext_pa_enabled(dev, band))
-		return -EINVAL;
-
-	val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_EXT_PA_5G) >> 8;
-	t->temp_25_ref = val & 0x7f;
-	if (band == NL80211_BAND_5GHZ) {
-		slope = mt76x02_eeprom_get(dev, MT_EE_RF_TEMP_COMP_SLOPE_5G);
-		bounds = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_EXT_PA_5G);
-	} else {
-		slope = mt76x02_eeprom_get(dev, MT_EE_RF_TEMP_COMP_SLOPE_2G);
-		bounds = mt76x02_eeprom_get(dev,
-					    MT_EE_TX_POWER_DELTA_BW80) >> 8;
-	}
-
-	t->high_slope = slope & 0xff;
-	t->low_slope = slope >> 8;
-	t->lower_bound = 0 - (bounds & 0xf);
-	t->upper_bound = (bounds >> 4) & 0xf;
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x2_get_temp_comp);
-
-int mt76x2_eeprom_init(struct mt76x02_dev *dev)
-{
-	int ret;
-
-	ret = mt76x2_eeprom_load(dev);
-	if (ret)
-		return ret;
-
-	mt76x02_eeprom_parse_hw_cap(dev);
-	mt76x2_eeprom_get_macaddr(dev);
-	mt76_eeprom_override(&dev->mphy);
-	dev->mphy.macaddr[0] &= ~BIT(1);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76x2_eeprom_init);
-
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/eeprom.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/eeprom.h
deleted file mode 100644
index 43430ef..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/eeprom.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#ifndef __MT76x2_EEPROM_H
-#define __MT76x2_EEPROM_H
-
-#include "../mt76x02_eeprom.h"
-
-enum mt76x2_cal_channel_group {
-	MT_CH_5G_JAPAN,
-	MT_CH_5G_UNII_1,
-	MT_CH_5G_UNII_2,
-	MT_CH_5G_UNII_2E_1,
-	MT_CH_5G_UNII_2E_2,
-	MT_CH_5G_UNII_3,
-	__MT_CH_MAX
-};
-
-struct mt76x2_tx_power_info {
-	u8 target_power;
-
-	s8 delta_bw40;
-	s8 delta_bw80;
-
-	struct {
-		s8 tssi_slope;
-		s8 tssi_offset;
-		s8 target_power;
-		s8 delta;
-	} chain[MT_MAX_CHAINS];
-};
-
-struct mt76x2_temp_comp {
-	u8 temp_25_ref;
-	int lower_bound; /* J */
-	int upper_bound; /* J */
-	unsigned int high_slope; /* J / dB */
-	unsigned int low_slope; /* J / dB */
-};
-
-void mt76x2_get_rate_power(struct mt76x02_dev *dev, struct mt76x02_rate_power *t,
-			   struct ieee80211_channel *chan);
-void mt76x2_get_power_info(struct mt76x02_dev *dev,
-			   struct mt76x2_tx_power_info *t,
-			   struct ieee80211_channel *chan);
-int mt76x2_get_temp_comp(struct mt76x02_dev *dev, struct mt76x2_temp_comp *t);
-void mt76x2_read_rx_gain(struct mt76x02_dev *dev);
-
-static inline bool
-mt76x2_has_ext_lna(struct mt76x02_dev *dev)
-{
-	u32 val = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1);
-
-	if (dev->mphy.chandef.chan->band == NL80211_BAND_2GHZ)
-		return val & MT_EE_NIC_CONF_1_LNA_EXT_2G;
-	else
-		return val & MT_EE_NIC_CONF_1_LNA_EXT_5G;
-}
-
-static inline bool
-mt76x2_temp_tx_alc_enabled(struct mt76x02_dev *dev)
-{
-	u16 val;
-
-	val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_EXT_PA_5G);
-	if (!(val & BIT(15)))
-		return false;
-
-	return mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1) &
-	       MT_EE_NIC_CONF_1_TEMP_TX_ALC;
-}
-
-static inline bool
-mt76x2_tssi_enabled(struct mt76x02_dev *dev)
-{
-	return !mt76x2_temp_tx_alc_enabled(dev) &&
-	       (mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1) &
-		MT_EE_NIC_CONF_1_TX_ALC_EN);
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/init.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/init.c
deleted file mode 100644
index 19c1392..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/init.c
+++ /dev/null
@@ -1,204 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include "mt76x2.h"
-#include "eeprom.h"
-#include "../mt76x02_phy.h"
-
-int mt76x2_set_sar_specs(struct ieee80211_hw *hw,
-			 const struct cfg80211_sar_specs *sar)
-{
-	int err = -EINVAL, power = hw->conf.power_level * 2;
-	struct mt76x02_dev *dev = hw->priv;
-	struct mt76_phy *mphy = &dev->mphy;
-
-	mutex_lock(&dev->mt76.mutex);
-	if (!cfg80211_chandef_valid(&mphy->chandef))
-		goto out;
-
-	err = mt76_init_sar_power(hw, sar);
-	if (err)
-		goto out;
-
-	dev->txpower_conf = mt76_get_sar_power(mphy, mphy->chandef.chan,
-					       power);
-	/* convert to per-chain power for 2x2 devices */
-	dev->txpower_conf -= 6;
-
-	if (test_bit(MT76_STATE_RUNNING, &mphy->state))
-		mt76x2_phy_set_txpower(dev);
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return err;
-}
-EXPORT_SYMBOL_GPL(mt76x2_set_sar_specs);
-
-static void
-mt76x2_set_wlan_state(struct mt76x02_dev *dev, bool enable)
-{
-	u32 val = mt76_rr(dev, MT_WLAN_FUN_CTRL);
-
-	if (enable)
-		val |= (MT_WLAN_FUN_CTRL_WLAN_EN |
-			MT_WLAN_FUN_CTRL_WLAN_CLK_EN);
-	else
-		val &= ~(MT_WLAN_FUN_CTRL_WLAN_EN |
-			 MT_WLAN_FUN_CTRL_WLAN_CLK_EN);
-
-	mt76_wr(dev, MT_WLAN_FUN_CTRL, val);
-	udelay(20);
-}
-
-void mt76x2_reset_wlan(struct mt76x02_dev *dev, bool enable)
-{
-	u32 val;
-
-	if (!enable)
-		goto out;
-
-	val = mt76_rr(dev, MT_WLAN_FUN_CTRL);
-
-	val &= ~MT_WLAN_FUN_CTRL_FRC_WL_ANT_SEL;
-
-	if (val & MT_WLAN_FUN_CTRL_WLAN_EN) {
-		val |= MT_WLAN_FUN_CTRL_WLAN_RESET_RF;
-		mt76_wr(dev, MT_WLAN_FUN_CTRL, val);
-		udelay(20);
-
-		val &= ~MT_WLAN_FUN_CTRL_WLAN_RESET_RF;
-	}
-
-	mt76_wr(dev, MT_WLAN_FUN_CTRL, val);
-	udelay(20);
-
-out:
-	mt76x2_set_wlan_state(dev, enable);
-}
-EXPORT_SYMBOL_GPL(mt76x2_reset_wlan);
-
-void mt76_write_mac_initvals(struct mt76x02_dev *dev)
-{
-#define DEFAULT_PROT_CFG_CCK				\
-	(FIELD_PREP(MT_PROT_CFG_RATE, 0x3) |		\
-	 FIELD_PREP(MT_PROT_CFG_NAV, 1) |		\
-	 FIELD_PREP(MT_PROT_CFG_TXOP_ALLOW, 0x3f) |	\
-	 MT_PROT_CFG_RTS_THRESH)
-
-#define DEFAULT_PROT_CFG_OFDM				\
-	(FIELD_PREP(MT_PROT_CFG_RATE, 0x2004) |		\
-	 FIELD_PREP(MT_PROT_CFG_NAV, 1) |			\
-	 FIELD_PREP(MT_PROT_CFG_TXOP_ALLOW, 0x3f) |	\
-	 MT_PROT_CFG_RTS_THRESH)
-
-#define DEFAULT_PROT_CFG_20				\
-	(FIELD_PREP(MT_PROT_CFG_RATE, 0x2004) |		\
-	 FIELD_PREP(MT_PROT_CFG_CTRL, 1) |		\
-	 FIELD_PREP(MT_PROT_CFG_NAV, 1) |			\
-	 FIELD_PREP(MT_PROT_CFG_TXOP_ALLOW, 0x17))
-
-#define DEFAULT_PROT_CFG_40				\
-	(FIELD_PREP(MT_PROT_CFG_RATE, 0x2084) |		\
-	 FIELD_PREP(MT_PROT_CFG_CTRL, 1) |		\
-	 FIELD_PREP(MT_PROT_CFG_NAV, 1) |			\
-	 FIELD_PREP(MT_PROT_CFG_TXOP_ALLOW, 0x3f))
-
-	static const struct mt76_reg_pair vals[] = {
-		/* Copied from MediaTek reference source */
-		{ MT_PBF_SYS_CTRL,		0x00080c00 },
-		{ MT_PBF_CFG,			0x1efebcff },
-		{ MT_FCE_PSE_CTRL,		0x00000001 },
-		{ MT_MAC_SYS_CTRL,		0x00000000 },
-		{ MT_MAX_LEN_CFG,		0x003e3f00 },
-		{ MT_AMPDU_MAX_LEN_20M1S,	0xaaa99887 },
-		{ MT_AMPDU_MAX_LEN_20M2S,	0x000000aa },
-		{ MT_XIFS_TIME_CFG,		0x33a40d0a },
-		{ MT_BKOFF_SLOT_CFG,		0x00000209 },
-		{ MT_TBTT_SYNC_CFG,		0x00422010 },
-		{ MT_PWR_PIN_CFG,		0x00000000 },
-		{ 0x1238,			0x001700c8 },
-		{ MT_TX_SW_CFG0,		0x00101001 },
-		{ MT_TX_SW_CFG1,		0x00010000 },
-		{ MT_TX_SW_CFG2,		0x00000000 },
-		{ MT_TXOP_CTRL_CFG,		0x0400583f },
-		{ MT_TX_RTS_CFG,		0x00ffff20 },
-		{ MT_TX_TIMEOUT_CFG,		0x000a2290 },
-		{ MT_TX_RETRY_CFG,		0x47f01f0f },
-		{ MT_EXP_ACK_TIME,		0x002c00dc },
-		{ MT_TX_PROT_CFG6,		0xe3f42004 },
-		{ MT_TX_PROT_CFG7,		0xe3f42084 },
-		{ MT_TX_PROT_CFG8,		0xe3f42104 },
-		{ MT_PIFS_TX_CFG,		0x00060fff },
-		{ MT_RX_FILTR_CFG,		0x00015f97 },
-		{ MT_LEGACY_BASIC_RATE,		0x0000017f },
-		{ MT_HT_BASIC_RATE,		0x00004003 },
-		{ MT_PN_PAD_MODE,		0x00000003 },
-		{ MT_TXOP_HLDR_ET,		0x00000002 },
-		{ 0xa44,			0x00000000 },
-		{ MT_HEADER_TRANS_CTRL_REG,	0x00000000 },
-		{ MT_TSO_CTRL,			0x00000000 },
-		{ MT_AUX_CLK_CFG,		0x00000000 },
-		{ MT_DACCLK_EN_DLY_CFG,		0x00000000 },
-		{ MT_TX_ALC_CFG_4,		0x00000000 },
-		{ MT_TX_ALC_VGA3,		0x00000000 },
-		{ MT_TX_PWR_CFG_0,		0x3a3a3a3a },
-		{ MT_TX_PWR_CFG_1,		0x3a3a3a3a },
-		{ MT_TX_PWR_CFG_2,		0x3a3a3a3a },
-		{ MT_TX_PWR_CFG_3,		0x3a3a3a3a },
-		{ MT_TX_PWR_CFG_4,		0x3a3a3a3a },
-		{ MT_TX_PWR_CFG_7,		0x3a3a3a3a },
-		{ MT_TX_PWR_CFG_8,		0x0000003a },
-		{ MT_TX_PWR_CFG_9,		0x0000003a },
-		{ MT_EFUSE_CTRL,		0x0000d000 },
-		{ MT_PAUSE_ENABLE_CONTROL1,	0x0000000a },
-		{ MT_FCE_WLAN_FLOW_CONTROL1,	0x60401c18 },
-		{ MT_WPDMA_DELAY_INT_CFG,	0x94ff0000 },
-		{ MT_TX_SW_CFG3,		0x00000004 },
-		{ MT_HT_FBK_TO_LEGACY,		0x00001818 },
-		{ MT_VHT_HT_FBK_CFG1,		0xedcba980 },
-		{ MT_PROT_AUTO_TX_CFG,		0x00830083 },
-		{ MT_HT_CTRL_CFG,		0x000001ff },
-		{ MT_TX_LINK_CFG,		0x00001020 },
-	};
-	struct mt76_reg_pair prot_vals[] = {
-		{ MT_CCK_PROT_CFG,		DEFAULT_PROT_CFG_CCK },
-		{ MT_OFDM_PROT_CFG,		DEFAULT_PROT_CFG_OFDM },
-		{ MT_MM20_PROT_CFG,		DEFAULT_PROT_CFG_20 },
-		{ MT_MM40_PROT_CFG,		DEFAULT_PROT_CFG_40 },
-		{ MT_GF20_PROT_CFG,		DEFAULT_PROT_CFG_20 },
-		{ MT_GF40_PROT_CFG,		DEFAULT_PROT_CFG_40 },
-	};
-
-	mt76_wr_rp(dev, 0, vals, ARRAY_SIZE(vals));
-	mt76_wr_rp(dev, 0, prot_vals, ARRAY_SIZE(prot_vals));
-}
-EXPORT_SYMBOL_GPL(mt76_write_mac_initvals);
-
-void mt76x2_init_txpower(struct mt76x02_dev *dev,
-			 struct ieee80211_supported_band *sband)
-{
-	struct ieee80211_channel *chan;
-	struct mt76x2_tx_power_info txp;
-	struct mt76x02_rate_power t = {};
-	int i;
-
-	for (i = 0; i < sband->n_channels; i++) {
-		chan = &sband->channels[i];
-
-		mt76x2_get_power_info(dev, &txp, chan);
-		mt76x2_get_rate_power(dev, &t, chan);
-
-		chan->orig_mpwr = mt76x02_get_max_rate_power(&t) +
-				  txp.target_power;
-		chan->orig_mpwr = DIV_ROUND_UP(chan->orig_mpwr, 2);
-
-		/* convert to combined output power on 2x2 devices */
-		chan->orig_mpwr += 3;
-		chan->max_power = min_t(int, chan->max_reg_power,
-					chan->orig_mpwr);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76x2_init_txpower);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mac.c
deleted file mode 100644
index e08740c..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mac.c
+++ /dev/null
@@ -1,46 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include "mt76x2.h"
-
-void mt76x2_mac_stop(struct mt76x02_dev *dev, bool force)
-{
-	bool stopped = false;
-	u32 rts_cfg;
-	int i;
-
-	mt76_clear(dev, MT_TXOP_CTRL_CFG, MT_TXOP_ED_CCA_EN);
-	mt76_clear(dev, MT_TXOP_HLDR_ET, MT_TXOP_HLDR_TX40M_BLK_EN);
-
-	mt76_wr(dev, MT_MAC_SYS_CTRL, 0);
-
-	rts_cfg = mt76_rr(dev, MT_TX_RTS_CFG);
-	mt76_wr(dev, MT_TX_RTS_CFG, rts_cfg & ~MT_TX_RTS_CFG_RETRY_LIMIT);
-
-	/* Wait for MAC to become idle */
-	for (i = 0; i < 300; i++) {
-		if ((mt76_rr(dev, MT_MAC_STATUS) &
-		     (MT_MAC_STATUS_RX | MT_MAC_STATUS_TX)) ||
-		    mt76_rr(dev, MT_BBP(IBI, 12))) {
-			udelay(1);
-			continue;
-		}
-
-		stopped = true;
-		break;
-	}
-
-	if (force && !stopped) {
-		mt76_set(dev, MT_BBP(CORE, 4), BIT(1));
-		mt76_clear(dev, MT_BBP(CORE, 4), BIT(1));
-
-		mt76_set(dev, MT_BBP(CORE, 4), BIT(0));
-		mt76_clear(dev, MT_BBP(CORE, 4), BIT(0));
-	}
-
-	mt76_wr(dev, MT_TX_RTS_CFG, rts_cfg);
-}
-EXPORT_SYMBOL_GPL(mt76x2_mac_stop);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mac.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mac.h
deleted file mode 100644
index d5c3d26..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mac.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#ifndef __MT76x2_MAC_H
-#define __MT76x2_MAC_H
-
-#include "mt76x2.h"
-
-struct mt76x02_dev;
-struct mt76x2_sta;
-struct mt76x02_vif;
-
-void mt76x2_mac_stop(struct mt76x02_dev *dev, bool force);
-
-static inline void mt76x2_mac_resume(struct mt76x02_dev *dev)
-{
-	mt76_wr(dev, MT_MAC_SYS_CTRL,
-		MT_MAC_SYS_CTRL_ENABLE_TX |
-		MT_MAC_SYS_CTRL_ENABLE_RX);
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mcu.c
deleted file mode 100644
index ac83ce5..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mcu.c
+++ /dev/null
@@ -1,108 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/firmware.h>
-#include <linux/delay.h>
-
-#include "mt76x2.h"
-#include "mcu.h"
-#include "eeprom.h"
-
-int mt76x2_mcu_set_channel(struct mt76x02_dev *dev, u8 channel, u8 bw,
-			   u8 bw_index, bool scan)
-{
-	struct {
-		u8 idx;
-		u8 scan;
-		u8 bw;
-		u8 _pad0;
-
-		__le16 chainmask;
-		u8 ext_chan;
-		u8 _pad1;
-
-	} __packed __aligned(4) msg = {
-		.idx = channel,
-		.scan = scan,
-		.bw = bw,
-		.chainmask = cpu_to_le16(dev->mphy.chainmask),
-	};
-
-	/* first set the channel without the extension channel info */
-	mt76_mcu_send_msg(&dev->mt76, CMD_SWITCH_CHANNEL_OP, &msg,
-			  sizeof(msg), true);
-
-	usleep_range(5000, 10000);
-
-	msg.ext_chan = 0xe0 + bw_index;
-	return mt76_mcu_send_msg(&dev->mt76, CMD_SWITCH_CHANNEL_OP, &msg,
-				 sizeof(msg), true);
-}
-EXPORT_SYMBOL_GPL(mt76x2_mcu_set_channel);
-
-int mt76x2_mcu_load_cr(struct mt76x02_dev *dev, u8 type, u8 temp_level,
-		       u8 channel)
-{
-	struct {
-		u8 cr_mode;
-		u8 temp;
-		u8 ch;
-		u8 _pad0;
-
-		__le32 cfg;
-	} __packed __aligned(4) msg = {
-		.cr_mode = type,
-		.temp = temp_level,
-		.ch = channel,
-	};
-	u32 val;
-
-	val = BIT(31);
-	val |= (mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_0) >> 8) & 0x00ff;
-	val |= (mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1) << 8) & 0xff00;
-	msg.cfg = cpu_to_le32(val);
-
-	/* first set the channel without the extension channel info */
-	return mt76_mcu_send_msg(&dev->mt76, CMD_LOAD_CR, &msg, sizeof(msg),
-				 true);
-}
-EXPORT_SYMBOL_GPL(mt76x2_mcu_load_cr);
-
-int mt76x2_mcu_init_gain(struct mt76x02_dev *dev, u8 channel, u32 gain,
-			 bool force)
-{
-	struct {
-		__le32 channel;
-		__le32 gain_val;
-	} __packed __aligned(4) msg = {
-		.channel = cpu_to_le32(channel),
-		.gain_val = cpu_to_le32(gain),
-	};
-
-	if (force)
-		msg.channel |= cpu_to_le32(BIT(31));
-
-	return mt76_mcu_send_msg(&dev->mt76, CMD_INIT_GAIN_OP, &msg,
-				 sizeof(msg), true);
-}
-EXPORT_SYMBOL_GPL(mt76x2_mcu_init_gain);
-
-int mt76x2_mcu_tssi_comp(struct mt76x02_dev *dev,
-			 struct mt76x2_tssi_comp *tssi_data)
-{
-	struct {
-		__le32 id;
-		struct mt76x2_tssi_comp data;
-	} __packed __aligned(4) msg = {
-		.id = cpu_to_le32(MCU_CAL_TSSI_COMP),
-		.data = *tssi_data,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, CMD_CALIBRATION_OP, &msg,
-				 sizeof(msg), true);
-}
-EXPORT_SYMBOL_GPL(mt76x2_mcu_tssi_comp);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mcu.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mcu.h
deleted file mode 100644
index 41fd665..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mcu.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#ifndef __MT76x2_MCU_H
-#define __MT76x2_MCU_H
-
-#include "../mt76x02_mcu.h"
-
-/* Register definitions */
-#define MT_MCU_CPU_CTL			0x0704
-#define MT_MCU_CLOCK_CTL		0x0708
-#define MT_MCU_PCIE_REMAP_BASE1		0x0740
-#define MT_MCU_PCIE_REMAP_BASE2		0x0744
-#define MT_MCU_PCIE_REMAP_BASE3		0x0748
-
-#define MT_MCU_ROM_PATCH_OFFSET		0x80000
-#define MT_MCU_ROM_PATCH_ADDR		0x90000
-
-#define MT_MCU_ILM_OFFSET		0x80000
-
-#define MT_MCU_DLM_OFFSET		0x100000
-#define MT_MCU_DLM_ADDR			0x90000
-#define MT_MCU_DLM_ADDR_E3		0x90800
-
-enum mcu_calibration {
-	MCU_CAL_R = 1,
-	MCU_CAL_TEMP_SENSOR,
-	MCU_CAL_RXDCOC,
-	MCU_CAL_RC,
-	MCU_CAL_SX_LOGEN,
-	MCU_CAL_LC,
-	MCU_CAL_TX_LOFT,
-	MCU_CAL_TXIQ,
-	MCU_CAL_TSSI,
-	MCU_CAL_TSSI_COMP,
-	MCU_CAL_DPD,
-	MCU_CAL_RXIQC_FI,
-	MCU_CAL_RXIQC_FD,
-	MCU_CAL_PWRON,
-	MCU_CAL_TX_SHAPING,
-};
-
-enum mt76x2_mcu_cr_mode {
-	MT_RF_CR,
-	MT_BBP_CR,
-	MT_RF_BBP_CR,
-	MT_HL_TEMP_CR_UPDATE,
-};
-
-struct mt76x2_tssi_comp {
-	u8 pa_mode;
-	u8 cal_mode;
-	u16 pad;
-
-	u8 slope0;
-	u8 slope1;
-	u8 offset0;
-	u8 offset1;
-} __packed __aligned(4);
-
-int mt76x2_mcu_tssi_comp(struct mt76x02_dev *dev,
-			 struct mt76x2_tssi_comp *tssi_data);
-int mt76x2_mcu_init_gain(struct mt76x02_dev *dev, u8 channel, u32 gain,
-			 bool force);
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mt76x2.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mt76x2.h
deleted file mode 100644
index be12173..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mt76x2.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#ifndef __MT76x2_H
-#define __MT76x2_H
-
-#include <linux/device.h>
-#include <linux/dma-mapping.h>
-#include <linux/spinlock.h>
-#include <linux/skbuff.h>
-#include <linux/netdevice.h>
-#include <linux/irq.h>
-#include <linux/interrupt.h>
-#include <linux/mutex.h>
-#include <linux/bitops.h>
-
-#define MT7662_FIRMWARE		"mt7662.bin"
-#define MT7662_ROM_PATCH	"mt7662_rom_patch.bin"
-#define MT7662_EEPROM_SIZE	512
-
-#include "../mt76x02.h"
-#include "mac.h"
-
-static inline bool is_mt7612(struct mt76x02_dev *dev)
-{
-	return mt76_chip(&dev->mt76) == 0x7612;
-}
-
-static inline bool mt76x2_channel_silent(struct mt76x02_dev *dev)
-{
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-
-	return ((chan->flags & IEEE80211_CHAN_RADAR) &&
-		chan->dfs_state != NL80211_DFS_AVAILABLE);
-}
-
-extern const struct ieee80211_ops mt76x2_ops;
-
-int mt76x2_register_device(struct mt76x02_dev *dev);
-int mt76x2_resume_device(struct mt76x02_dev *dev);
-
-int mt76x2_set_sar_specs(struct ieee80211_hw *hw,
-			 const struct cfg80211_sar_specs *sar);
-void mt76x2_phy_power_on(struct mt76x02_dev *dev);
-void mt76x2_stop_hardware(struct mt76x02_dev *dev);
-int mt76x2_eeprom_init(struct mt76x02_dev *dev);
-int mt76x2_apply_calibration_data(struct mt76x02_dev *dev, int channel);
-
-void mt76x2_phy_set_antenna(struct mt76x02_dev *dev);
-int mt76x2_phy_start(struct mt76x02_dev *dev);
-int mt76x2_phy_set_channel(struct mt76x02_dev *dev,
-			   struct cfg80211_chan_def *chandef);
-void mt76x2_phy_calibrate(struct work_struct *work);
-void mt76x2_phy_set_txpower(struct mt76x02_dev *dev);
-
-int mt76x2_mcu_init(struct mt76x02_dev *dev);
-int mt76x2_mcu_set_channel(struct mt76x02_dev *dev, u8 channel, u8 bw,
-			   u8 bw_index, bool scan);
-int mt76x2_mcu_load_cr(struct mt76x02_dev *dev, u8 type, u8 temp_level,
-		       u8 channel);
-
-void mt76x2_cleanup(struct mt76x02_dev *dev);
-
-int mt76x2_mac_reset(struct mt76x02_dev *dev, bool hard);
-void mt76x2_reset_wlan(struct mt76x02_dev *dev, bool enable);
-void mt76x2_init_txpower(struct mt76x02_dev *dev,
-			 struct ieee80211_supported_band *sband);
-void mt76_write_mac_initvals(struct mt76x02_dev *dev);
-
-void mt76x2_phy_tssi_compensate(struct mt76x02_dev *dev);
-void mt76x2_phy_set_txpower_regs(struct mt76x02_dev *dev,
-				 enum nl80211_band band);
-void mt76x2_configure_tx_delay(struct mt76x02_dev *dev,
-			       enum nl80211_band band, u8 bw);
-void mt76x2_apply_gain_adj(struct mt76x02_dev *dev);
-void mt76x2_phy_update_channel_gain(struct mt76x02_dev *dev);
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mt76x2u.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mt76x2u.h
deleted file mode 100644
index f9d37c6..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/mt76x2u.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#ifndef __MT76x2U_H
-#define __MT76x2U_H
-
-#include <linux/device.h>
-
-#include "mt76x2.h"
-#include "mcu.h"
-
-#define MT7612U_EEPROM_SIZE		512
-
-#define MT_USB_AGGR_SIZE_LIMIT		21 /* 1024B unit */
-#define MT_USB_AGGR_TIMEOUT		0x80 /* 33ns unit */
-
-extern const struct ieee80211_ops mt76x2u_ops;
-
-int mt76x2u_register_device(struct mt76x02_dev *dev);
-int mt76x2u_init_hardware(struct mt76x02_dev *dev);
-void mt76x2u_cleanup(struct mt76x02_dev *dev);
-void mt76x2u_stop_hw(struct mt76x02_dev *dev);
-
-int mt76x2u_mac_reset(struct mt76x02_dev *dev);
-int mt76x2u_mac_stop(struct mt76x02_dev *dev);
-
-int mt76x2u_phy_set_channel(struct mt76x02_dev *dev,
-			    struct cfg80211_chan_def *chandef);
-void mt76x2u_phy_calibrate(struct work_struct *work);
-
-void mt76x2u_mcu_complete_urb(struct urb *urb);
-int mt76x2u_mcu_init(struct mt76x02_dev *dev);
-int mt76x2u_mcu_fw_init(struct mt76x02_dev *dev);
-
-int mt76x2u_alloc_queues(struct mt76x02_dev *dev);
-void mt76x2u_queues_deinit(struct mt76x02_dev *dev);
-void mt76x2u_stop_queues(struct mt76x02_dev *dev);
-int mt76x2u_skb_dma_info(struct sk_buff *skb, enum dma_msg_port port,
-			 u32 flags);
-
-#endif /* __MT76x2U_H */
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci.c
deleted file mode 100644
index 8a22ee5..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci.c
+++ /dev/null
@@ -1,181 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/pci.h>
-
-#include "mt76x2.h"
-
-static const struct pci_device_id mt76x2e_device_table[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7662) },
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7612) },
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7602) },
-	{ },
-};
-
-static int
-mt76x2e_probe(struct pci_dev *pdev, const struct pci_device_id *id)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		.txwi_size = sizeof(struct mt76x02_txwi),
-		.drv_flags = MT_DRV_TX_ALIGNED4_SKBS |
-			     MT_DRV_SW_RX_AIRTIME,
-		.survey_flags = SURVEY_INFO_TIME_TX,
-		.update_survey = mt76x02_update_channel,
-		.tx_prepare_skb = mt76x02_tx_prepare_skb,
-		.tx_complete_skb = mt76x02_tx_complete_skb,
-		.rx_skb = mt76x02_queue_rx_skb,
-		.rx_poll_complete = mt76x02_rx_poll_complete,
-		.sta_ps = mt76x02_sta_ps,
-		.sta_add = mt76x02_sta_add,
-		.sta_remove = mt76x02_sta_remove,
-	};
-	struct mt76x02_dev *dev;
-	struct mt76_dev *mdev;
-	int ret;
-
-	ret = pcim_enable_device(pdev);
-	if (ret)
-		return ret;
-
-	ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
-	if (ret)
-		return ret;
-
-	pci_set_master(pdev);
-
-	ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
-	if (ret)
-		return ret;
-
-	mdev = mt76_alloc_device(&pdev->dev, sizeof(*dev), &mt76x2_ops,
-				 &drv_ops);
-	if (!mdev)
-		return -ENOMEM;
-
-	dev = container_of(mdev, struct mt76x02_dev, mt76);
-	mt76_mmio_init(mdev, pcim_iomap_table(pdev)[0]);
-	mt76x2_reset_wlan(dev, false);
-
-	mdev->rev = mt76_rr(dev, MT_ASIC_VERSION);
-	dev_info(mdev->dev, "ASIC revision: %08x\n", mdev->rev);
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-
-	ret = devm_request_irq(mdev->dev, pdev->irq, mt76x02_irq_handler,
-			       IRQF_SHARED, KBUILD_MODNAME, dev);
-	if (ret)
-		goto error;
-
-	ret = mt76x2_register_device(dev);
-	if (ret)
-		goto error;
-
-	/* Fix up ASPM configuration */
-
-	/* RG_SSUSB_G1_CDR_BIR_LTR = 0x9 */
-	mt76_rmw_field(dev, 0x15a10, 0x1f << 16, 0x9);
-
-	/* RG_SSUSB_G1_CDR_BIC_LTR = 0xf */
-	mt76_rmw_field(dev, 0x15a0c, 0xf << 28, 0xf);
-
-	/* RG_SSUSB_CDR_BR_PE1D = 0x3 */
-	mt76_rmw_field(dev, 0x15c58, 0x3 << 6, 0x3);
-
-	mt76_pci_disable_aspm(pdev);
-
-	return 0;
-
-error:
-	mt76_free_device(&dev->mt76);
-
-	return ret;
-}
-
-static void
-mt76x2e_remove(struct pci_dev *pdev)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-
-	mt76_unregister_device(mdev);
-	mt76x2_cleanup(dev);
-	mt76_free_device(mdev);
-}
-
-static int __maybe_unused
-mt76x2e_suspend(struct pci_dev *pdev, pm_message_t state)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	int i, err;
-
-	napi_disable(&mdev->tx_napi);
-	tasklet_kill(&mdev->pre_tbtt_tasklet);
-	mt76_worker_disable(&mdev->tx_worker);
-
-	mt76_for_each_q_rx(mdev, i)
-		napi_disable(&mdev->napi[i]);
-
-	pci_enable_wake(pdev, pci_choose_state(pdev, state), true);
-	pci_save_state(pdev);
-	err = pci_set_power_state(pdev, pci_choose_state(pdev, state));
-	if (err)
-		goto restore;
-
-	return 0;
-
-restore:
-	mt76_for_each_q_rx(mdev, i)
-		napi_enable(&mdev->napi[i]);
-	napi_enable(&mdev->tx_napi);
-
-	return err;
-}
-
-static int __maybe_unused
-mt76x2e_resume(struct pci_dev *pdev)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt76x02_dev *dev = container_of(mdev, struct mt76x02_dev, mt76);
-	int i, err;
-
-	err = pci_set_power_state(pdev, PCI_D0);
-	if (err)
-		return err;
-
-	pci_restore_state(pdev);
-
-	mt76_worker_enable(&mdev->tx_worker);
-
-	local_bh_disable();
-	mt76_for_each_q_rx(mdev, i) {
-		napi_enable(&mdev->napi[i]);
-		napi_schedule(&mdev->napi[i]);
-	}
-	napi_enable(&mdev->tx_napi);
-	napi_schedule(&mdev->tx_napi);
-	local_bh_enable();
-
-	return mt76x2_resume_device(dev);
-}
-
-MODULE_DEVICE_TABLE(pci, mt76x2e_device_table);
-MODULE_FIRMWARE(MT7662_FIRMWARE);
-MODULE_FIRMWARE(MT7662_ROM_PATCH);
-MODULE_LICENSE("Dual BSD/GPL");
-
-static struct pci_driver mt76pci_driver = {
-	.name		= KBUILD_MODNAME,
-	.id_table	= mt76x2e_device_table,
-	.probe		= mt76x2e_probe,
-	.remove		= mt76x2e_remove,
-#ifdef CONFIG_PM
-	.suspend	= mt76x2e_suspend,
-	.resume		= mt76x2e_resume,
-#endif /* CONFIG_PM */
-};
-
-module_pci_driver(mt76pci_driver);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_init.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_init.c
deleted file mode 100644
index e38e8e5..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_init.c
+++ /dev/null
@@ -1,320 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/delay.h>
-#include "mt76x2.h"
-#include "eeprom.h"
-#include "mcu.h"
-#include "../mt76x02_mac.h"
-
-static void
-mt76x2_mac_pbf_init(struct mt76x02_dev *dev)
-{
-	u32 val;
-
-	val = MT_PBF_SYS_CTRL_MCU_RESET |
-	      MT_PBF_SYS_CTRL_DMA_RESET |
-	      MT_PBF_SYS_CTRL_MAC_RESET |
-	      MT_PBF_SYS_CTRL_PBF_RESET |
-	      MT_PBF_SYS_CTRL_ASY_RESET;
-
-	mt76_set(dev, MT_PBF_SYS_CTRL, val);
-	mt76_clear(dev, MT_PBF_SYS_CTRL, val);
-
-	mt76_wr(dev, MT_PBF_TX_MAX_PCNT, 0xefef3f1f);
-	mt76_wr(dev, MT_PBF_RX_MAX_PCNT, 0xfebf);
-}
-
-static void
-mt76x2_fixup_xtal(struct mt76x02_dev *dev)
-{
-	u16 eep_val;
-	s8 offset = 0;
-
-	eep_val = mt76x02_eeprom_get(dev, MT_EE_XTAL_TRIM_2);
-
-	offset = eep_val & 0x7f;
-	if ((eep_val & 0xff) == 0xff)
-		offset = 0;
-	else if (eep_val & 0x80)
-		offset = 0 - offset;
-
-	eep_val >>= 8;
-	if (eep_val == 0x00 || eep_val == 0xff) {
-		eep_val = mt76x02_eeprom_get(dev, MT_EE_XTAL_TRIM_1);
-		eep_val &= 0xff;
-
-		if (eep_val == 0x00 || eep_val == 0xff)
-			eep_val = 0x14;
-	}
-
-	eep_val &= 0x7f;
-	mt76_rmw_field(dev, MT_XO_CTRL5, MT_XO_CTRL5_C2_VAL, eep_val + offset);
-	mt76_set(dev, MT_XO_CTRL6, MT_XO_CTRL6_C2_CTRL);
-
-	eep_val = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_2);
-	switch (FIELD_GET(MT_EE_NIC_CONF_2_XTAL_OPTION, eep_val)) {
-	case 0:
-		mt76_wr(dev, MT_XO_CTRL7, 0x5c1fee80);
-		break;
-	case 1:
-		mt76_wr(dev, MT_XO_CTRL7, 0x5c1feed0);
-		break;
-	default:
-		break;
-	}
-}
-
-int mt76x2_mac_reset(struct mt76x02_dev *dev, bool hard)
-{
-	const u8 *macaddr = dev->mphy.macaddr;
-	u32 val;
-	int i, k;
-
-	if (!mt76x02_wait_for_mac(&dev->mt76))
-		return -ETIMEDOUT;
-
-	val = mt76_rr(dev, MT_WPDMA_GLO_CFG);
-
-	val &= ~(MT_WPDMA_GLO_CFG_TX_DMA_EN |
-		 MT_WPDMA_GLO_CFG_TX_DMA_BUSY |
-		 MT_WPDMA_GLO_CFG_RX_DMA_EN |
-		 MT_WPDMA_GLO_CFG_RX_DMA_BUSY |
-		 MT_WPDMA_GLO_CFG_DMA_BURST_SIZE);
-	val |= FIELD_PREP(MT_WPDMA_GLO_CFG_DMA_BURST_SIZE, 3);
-
-	mt76_wr(dev, MT_WPDMA_GLO_CFG, val);
-
-	mt76x2_mac_pbf_init(dev);
-	mt76_write_mac_initvals(dev);
-	mt76x2_fixup_xtal(dev);
-
-	mt76_clear(dev, MT_MAC_SYS_CTRL,
-		   MT_MAC_SYS_CTRL_RESET_CSR |
-		   MT_MAC_SYS_CTRL_RESET_BBP);
-
-	if (is_mt7612(dev))
-		mt76_clear(dev, MT_COEXCFG0, MT_COEXCFG0_COEX_EN);
-
-	mt76_set(dev, MT_EXT_CCA_CFG, 0x0000f000);
-	mt76_clear(dev, MT_TX_ALC_CFG_4, BIT(31));
-
-	mt76_wr(dev, MT_RF_BYPASS_0, 0x06000000);
-	mt76_wr(dev, MT_RF_SETTING_0, 0x08800000);
-	usleep_range(5000, 10000);
-	mt76_wr(dev, MT_RF_BYPASS_0, 0x00000000);
-
-	mt76_wr(dev, MT_MCU_CLOCK_CTL, 0x1401);
-	mt76_clear(dev, MT_FCE_L2_STUFF, MT_FCE_L2_STUFF_WR_MPDU_LEN_EN);
-
-	mt76x02_mac_setaddr(dev, macaddr);
-	mt76x02e_init_beacon_config(dev);
-	if (!hard)
-		return 0;
-
-	for (i = 0; i < 256 / 32; i++)
-		mt76_wr(dev, MT_WCID_DROP_BASE + i * 4, 0);
-
-	for (i = 0; i < 256; i++) {
-		mt76x02_mac_wcid_setup(dev, i, 0, NULL);
-		mt76_wr(dev, MT_WCID_TX_RATE(i), 0);
-		mt76_wr(dev, MT_WCID_TX_RATE(i) + 4, 0);
-	}
-
-	for (i = 0; i < MT_MAX_VIFS; i++)
-		mt76x02_mac_wcid_setup(dev, MT_VIF_WCID(i), i, NULL);
-
-	for (i = 0; i < 16; i++)
-		for (k = 0; k < 4; k++)
-			mt76x02_mac_shared_key_setup(dev, i, k, NULL);
-
-	for (i = 0; i < 16; i++)
-		mt76_rr(dev, MT_TX_STAT_FIFO);
-
-	mt76x02_set_tx_ackto(dev);
-
-	return 0;
-}
-
-static void
-mt76x2_power_on_rf_patch(struct mt76x02_dev *dev)
-{
-	mt76_set(dev, 0x10130, BIT(0) | BIT(16));
-	udelay(1);
-
-	mt76_clear(dev, 0x1001c, 0xff);
-	mt76_set(dev, 0x1001c, 0x30);
-
-	mt76_wr(dev, 0x10014, 0x484f);
-	udelay(1);
-
-	mt76_set(dev, 0x10130, BIT(17));
-	udelay(125);
-
-	mt76_clear(dev, 0x10130, BIT(16));
-	udelay(50);
-
-	mt76_set(dev, 0x1014c, BIT(19) | BIT(20));
-}
-
-static void
-mt76x2_power_on_rf(struct mt76x02_dev *dev, int unit)
-{
-	int shift = unit ? 8 : 0;
-
-	/* Enable RF BG */
-	mt76_set(dev, 0x10130, BIT(0) << shift);
-	udelay(10);
-
-	/* Enable RFDIG LDO/AFE/ABB/ADDA */
-	mt76_set(dev, 0x10130, (BIT(1) | BIT(3) | BIT(4) | BIT(5)) << shift);
-	udelay(10);
-
-	/* Switch RFDIG power to internal LDO */
-	mt76_clear(dev, 0x10130, BIT(2) << shift);
-	udelay(10);
-
-	mt76x2_power_on_rf_patch(dev);
-
-	mt76_set(dev, 0x530, 0xf);
-}
-
-static void
-mt76x2_power_on(struct mt76x02_dev *dev)
-{
-	u32 val;
-
-	/* Turn on WL MTCMOS */
-	mt76_set(dev, MT_WLAN_MTC_CTRL, MT_WLAN_MTC_CTRL_MTCMOS_PWR_UP);
-
-	val = MT_WLAN_MTC_CTRL_STATE_UP |
-	      MT_WLAN_MTC_CTRL_PWR_ACK |
-	      MT_WLAN_MTC_CTRL_PWR_ACK_S;
-
-	mt76_poll(dev, MT_WLAN_MTC_CTRL, val, val, 1000);
-
-	mt76_clear(dev, MT_WLAN_MTC_CTRL, 0x7f << 16);
-	udelay(10);
-
-	mt76_clear(dev, MT_WLAN_MTC_CTRL, 0xf << 24);
-	udelay(10);
-
-	mt76_set(dev, MT_WLAN_MTC_CTRL, 0xf << 24);
-	mt76_clear(dev, MT_WLAN_MTC_CTRL, 0xfff);
-
-	/* Turn on AD/DA power down */
-	mt76_clear(dev, 0x11204, BIT(3));
-
-	/* WLAN function enable */
-	mt76_set(dev, 0x10080, BIT(0));
-
-	/* Release BBP software reset */
-	mt76_clear(dev, 0x10064, BIT(18));
-
-	mt76x2_power_on_rf(dev, 0);
-	mt76x2_power_on_rf(dev, 1);
-}
-
-int mt76x2_resume_device(struct mt76x02_dev *dev)
-{
-	int err;
-
-	mt76x02_dma_disable(dev);
-	mt76x2_reset_wlan(dev, true);
-	mt76x2_power_on(dev);
-
-	err = mt76x2_mac_reset(dev, true);
-	if (err)
-		return err;
-
-	mt76x02_mac_start(dev);
-
-	return mt76x2_mcu_init(dev);
-}
-
-static int mt76x2_init_hardware(struct mt76x02_dev *dev)
-{
-	int ret;
-
-	mt76x02_dma_disable(dev);
-	mt76x2_reset_wlan(dev, true);
-	mt76x2_power_on(dev);
-
-	ret = mt76x2_eeprom_init(dev);
-	if (ret)
-		return ret;
-
-	ret = mt76x2_mac_reset(dev, true);
-	if (ret)
-		return ret;
-
-	dev->mt76.rxfilter = mt76_rr(dev, MT_RX_FILTR_CFG);
-
-	ret = mt76x02_dma_init(dev);
-	if (ret)
-		return ret;
-
-	set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-	mt76x02_mac_start(dev);
-
-	ret = mt76x2_mcu_init(dev);
-	if (ret)
-		return ret;
-
-	mt76x2_mac_stop(dev, false);
-
-	return 0;
-}
-
-void mt76x2_stop_hardware(struct mt76x02_dev *dev)
-{
-	cancel_delayed_work_sync(&dev->cal_work);
-	cancel_delayed_work_sync(&dev->mphy.mac_work);
-	cancel_delayed_work_sync(&dev->wdt_work);
-	clear_bit(MT76_RESTART, &dev->mphy.state);
-	mt76x02_mcu_set_radio_state(dev, false);
-	mt76x2_mac_stop(dev, false);
-}
-
-void mt76x2_cleanup(struct mt76x02_dev *dev)
-{
-	tasklet_disable(&dev->dfs_pd.dfs_tasklet);
-	tasklet_disable(&dev->mt76.pre_tbtt_tasklet);
-	mt76x2_stop_hardware(dev);
-	mt76_dma_cleanup(&dev->mt76);
-	mt76x02_mcu_cleanup(dev);
-}
-
-int mt76x2_register_device(struct mt76x02_dev *dev)
-{
-	int ret;
-
-	INIT_DELAYED_WORK(&dev->cal_work, mt76x2_phy_calibrate);
-	ret = mt76x02_init_device(dev);
-	if (ret)
-		return ret;
-
-	ret = mt76x2_init_hardware(dev);
-	if (ret)
-		return ret;
-
-	mt76x02_config_mac_addr_list(dev);
-
-	ret = mt76_register_device(&dev->mt76, true, mt76x02_rates,
-				   ARRAY_SIZE(mt76x02_rates));
-	if (ret)
-		goto fail;
-
-	mt76x02_init_debugfs(dev);
-	mt76x2_init_txpower(dev, &dev->mphy.sband_2g.sband);
-	mt76x2_init_txpower(dev, &dev->mphy.sband_5g.sband);
-
-	return 0;
-
-fail:
-	mt76x2_stop_hardware(dev);
-	return ret;
-}
-
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_main.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_main.c
deleted file mode 100644
index b38bb7a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_main.c
+++ /dev/null
@@ -1,164 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include "mt76x2.h"
-#include "../mt76x02_mac.h"
-
-static int
-mt76x2_start(struct ieee80211_hw *hw)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	mt76x02_mac_start(dev);
-	mt76x2_phy_start(dev);
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mphy.mac_work,
-				     MT_MAC_WORK_INTERVAL);
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->wdt_work,
-				     MT_WATCHDOG_TIME);
-
-	set_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-	return 0;
-}
-
-static void
-mt76x2_stop(struct ieee80211_hw *hw)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	clear_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-	mt76x2_stop_hardware(dev);
-}
-
-static void
-mt76x2_set_channel(struct mt76x02_dev *dev, struct cfg80211_chan_def *chandef)
-{
-	cancel_delayed_work_sync(&dev->cal_work);
-	tasklet_disable(&dev->mt76.pre_tbtt_tasklet);
-	tasklet_disable(&dev->dfs_pd.dfs_tasklet);
-
-	mutex_lock(&dev->mt76.mutex);
-	set_bit(MT76_RESET, &dev->mphy.state);
-
-	mt76_set_channel(&dev->mphy);
-
-	mt76x2_mac_stop(dev, true);
-	mt76x2_phy_set_channel(dev, chandef);
-
-	mt76x02_mac_cc_reset(dev);
-	mt76x02_dfs_init_params(dev);
-
-	mt76x2_mac_resume(dev);
-
-	clear_bit(MT76_RESET, &dev->mphy.state);
-	mutex_unlock(&dev->mt76.mutex);
-
-	tasklet_enable(&dev->dfs_pd.dfs_tasklet);
-	tasklet_enable(&dev->mt76.pre_tbtt_tasklet);
-
-	mt76_txq_schedule_all(&dev->mphy);
-}
-
-static int
-mt76x2_config(struct ieee80211_hw *hw, u32 changed)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
-		if (!(hw->conf.flags & IEEE80211_CONF_MONITOR))
-			dev->mt76.rxfilter |= MT_RX_FILTR_CFG_PROMISC;
-		else
-			dev->mt76.rxfilter &= ~MT_RX_FILTR_CFG_PROMISC;
-
-		mt76_wr(dev, MT_RX_FILTR_CFG, dev->mt76.rxfilter);
-	}
-
-	if (changed & IEEE80211_CONF_CHANGE_POWER) {
-		struct mt76_phy *mphy = &dev->mphy;
-
-		dev->txpower_conf = hw->conf.power_level * 2;
-		dev->txpower_conf = mt76_get_sar_power(mphy,
-						       mphy->chandef.chan,
-						       dev->txpower_conf);
-		/* convert to per-chain power for 2x2 devices */
-		dev->txpower_conf -= 6;
-
-		if (test_bit(MT76_STATE_RUNNING, &dev->mphy.state)) {
-			mt76x2_phy_set_txpower(dev);
-			mt76x02_tx_set_txpwr_auto(dev, dev->txpower_conf);
-		}
-	}
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
-		ieee80211_stop_queues(hw);
-		mt76x2_set_channel(dev, &hw->conf.chandef);
-		ieee80211_wake_queues(hw);
-	}
-
-	return 0;
-}
-
-static void
-mt76x2_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	     u32 queues, bool drop)
-{
-}
-
-static int mt76x2_set_antenna(struct ieee80211_hw *hw, u32 tx_ant,
-			      u32 rx_ant)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	if (!tx_ant || tx_ant > 3 || tx_ant != rx_ant)
-		return -EINVAL;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	dev->mphy.chainmask = (tx_ant == 3) ? 0x202 : 0x101;
-	dev->mphy.antenna_mask = tx_ant;
-
-	mt76_set_stream_caps(&dev->mphy, true);
-	mt76x2_phy_set_antenna(dev);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-const struct ieee80211_ops mt76x2_ops = {
-	.tx = mt76x02_tx,
-	.start = mt76x2_start,
-	.stop = mt76x2_stop,
-	.add_interface = mt76x02_add_interface,
-	.remove_interface = mt76x02_remove_interface,
-	.config = mt76x2_config,
-	.configure_filter = mt76x02_configure_filter,
-	.bss_info_changed = mt76x02_bss_info_changed,
-	.sta_state = mt76_sta_state,
-	.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
-	.set_key = mt76x02_set_key,
-	.conf_tx = mt76x02_conf_tx,
-	.sw_scan_start = mt76_sw_scan,
-	.sw_scan_complete = mt76x02_sw_scan_complete,
-	.flush = mt76x2_flush,
-	.ampdu_action = mt76x02_ampdu_action,
-	.get_txpower = mt76_get_txpower,
-	.wake_tx_queue = mt76_wake_tx_queue,
-	.sta_rate_tbl_update = mt76x02_sta_rate_tbl_update,
-	.release_buffered_frames = mt76_release_buffered_frames,
-	.set_coverage_class = mt76x02_set_coverage_class,
-	.get_survey = mt76_get_survey,
-	.set_tim = mt76_set_tim,
-	.set_antenna = mt76x2_set_antenna,
-	.get_antenna = mt76_get_antenna,
-	.set_rts_threshold = mt76x02_set_rts_threshold,
-	.reconfig_complete = mt76x02_reconfig_complete,
-	.set_sar_specs = mt76x2_set_sar_specs,
-};
-
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_mcu.c
deleted file mode 100644
index e5b6282..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_mcu.c
+++ /dev/null
@@ -1,198 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/kernel.h>
-#include <linux/firmware.h>
-#include <linux/delay.h>
-
-#include "mt76x2.h"
-#include "mcu.h"
-#include "eeprom.h"
-
-static int
-mt76pci_load_rom_patch(struct mt76x02_dev *dev)
-{
-	const struct firmware *fw = NULL;
-	struct mt76x02_patch_header *hdr;
-	bool rom_protect = !is_mt7612(dev);
-	int len, ret = 0;
-	__le32 *cur;
-	u32 patch_mask, patch_reg;
-
-	if (rom_protect && !mt76_poll(dev, MT_MCU_SEMAPHORE_03, 1, 1, 600)) {
-		dev_err(dev->mt76.dev,
-			"Could not get hardware semaphore for ROM PATCH\n");
-		return -ETIMEDOUT;
-	}
-
-	if (mt76xx_rev(dev) >= MT76XX_REV_E3) {
-		patch_mask = BIT(0);
-		patch_reg = MT_MCU_CLOCK_CTL;
-	} else {
-		patch_mask = BIT(1);
-		patch_reg = MT_MCU_COM_REG0;
-	}
-
-	if (rom_protect && (mt76_rr(dev, patch_reg) & patch_mask)) {
-		dev_info(dev->mt76.dev, "ROM patch already applied\n");
-		goto out;
-	}
-
-	ret = request_firmware(&fw, MT7662_ROM_PATCH, dev->mt76.dev);
-	if (ret)
-		goto out;
-
-	if (!fw || !fw->data || fw->size <= sizeof(*hdr)) {
-		ret = -EIO;
-		dev_err(dev->mt76.dev, "Failed to load firmware\n");
-		goto out;
-	}
-
-	hdr = (struct mt76x02_patch_header *)fw->data;
-	dev_info(dev->mt76.dev, "ROM patch build: %.15s\n", hdr->build_time);
-
-	mt76_wr(dev, MT_MCU_PCIE_REMAP_BASE4, MT_MCU_ROM_PATCH_OFFSET);
-
-	cur = (__le32 *)(fw->data + sizeof(*hdr));
-	len = fw->size - sizeof(*hdr);
-	mt76_wr_copy(dev, MT_MCU_ROM_PATCH_ADDR, cur, len);
-
-	mt76_wr(dev, MT_MCU_PCIE_REMAP_BASE4, 0);
-
-	/* Trigger ROM */
-	mt76_wr(dev, MT_MCU_INT_LEVEL, 4);
-
-	if (!mt76_poll_msec(dev, patch_reg, patch_mask, patch_mask, 2000)) {
-		dev_err(dev->mt76.dev, "Failed to load ROM patch\n");
-		ret = -ETIMEDOUT;
-	}
-
-out:
-	/* release semaphore */
-	if (rom_protect)
-		mt76_wr(dev, MT_MCU_SEMAPHORE_03, 1);
-	release_firmware(fw);
-	return ret;
-}
-
-static int
-mt76pci_load_firmware(struct mt76x02_dev *dev)
-{
-	const struct firmware *fw;
-	const struct mt76x02_fw_header *hdr;
-	int len, ret;
-	__le32 *cur;
-	u32 offset, val;
-
-	ret = request_firmware(&fw, MT7662_FIRMWARE, dev->mt76.dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr))
-		goto error;
-
-	hdr = (const struct mt76x02_fw_header *)fw->data;
-
-	len = sizeof(*hdr);
-	len += le32_to_cpu(hdr->ilm_len);
-	len += le32_to_cpu(hdr->dlm_len);
-
-	if (fw->size != len)
-		goto error;
-
-	val = le16_to_cpu(hdr->fw_ver);
-	dev_info(dev->mt76.dev, "Firmware Version: %d.%d.%02d\n",
-		 (val >> 12) & 0xf, (val >> 8) & 0xf, val & 0xf);
-
-	val = le16_to_cpu(hdr->build_ver);
-	dev_info(dev->mt76.dev, "Build: %x\n", val);
-	dev_info(dev->mt76.dev, "Build Time: %.16s\n", hdr->build_time);
-
-	cur = (__le32 *)(fw->data + sizeof(*hdr));
-	len = le32_to_cpu(hdr->ilm_len);
-
-	mt76_wr(dev, MT_MCU_PCIE_REMAP_BASE4, MT_MCU_ILM_OFFSET);
-	mt76_wr_copy(dev, MT_MCU_ILM_ADDR, cur, len);
-
-	cur += len / sizeof(*cur);
-	len = le32_to_cpu(hdr->dlm_len);
-
-	if (mt76xx_rev(dev) >= MT76XX_REV_E3)
-		offset = MT_MCU_DLM_ADDR_E3;
-	else
-		offset = MT_MCU_DLM_ADDR;
-
-	mt76_wr(dev, MT_MCU_PCIE_REMAP_BASE4, MT_MCU_DLM_OFFSET);
-	mt76_wr_copy(dev, offset, cur, len);
-
-	mt76_wr(dev, MT_MCU_PCIE_REMAP_BASE4, 0);
-
-	val = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_2);
-	if (FIELD_GET(MT_EE_NIC_CONF_2_XTAL_OPTION, val) == 1)
-		mt76_set(dev, MT_MCU_COM_REG0, BIT(30));
-
-	/* trigger firmware */
-	mt76_wr(dev, MT_MCU_INT_LEVEL, 2);
-	if (!mt76_poll_msec(dev, MT_MCU_COM_REG0, 1, 1, 200)) {
-		dev_err(dev->mt76.dev, "Firmware failed to start\n");
-		release_firmware(fw);
-		return -ETIMEDOUT;
-	}
-
-	mt76x02_set_ethtool_fwver(dev, hdr);
-	dev_info(dev->mt76.dev, "Firmware running!\n");
-
-	release_firmware(fw);
-
-	return ret;
-
-error:
-	dev_err(dev->mt76.dev, "Invalid firmware\n");
-	release_firmware(fw);
-	return -ENOENT;
-}
-
-static int
-mt76pci_mcu_restart(struct mt76_dev *mdev)
-{
-	struct mt76x02_dev *dev;
-	int ret;
-
-	dev = container_of(mdev, struct mt76x02_dev, mt76);
-
-	mt76x02_mcu_cleanup(dev);
-	mt76x2_mac_reset(dev, true);
-
-	ret = mt76pci_load_firmware(dev);
-	if (ret)
-		return ret;
-
-	mt76_wr(dev, MT_WPDMA_RST_IDX, ~0);
-
-	return 0;
-}
-
-int mt76x2_mcu_init(struct mt76x02_dev *dev)
-{
-	static const struct mt76_mcu_ops mt76x2_mcu_ops = {
-		.mcu_restart = mt76pci_mcu_restart,
-		.mcu_send_msg = mt76x02_mcu_msg_send,
-		.mcu_parse_response = mt76x02_mcu_parse_response,
-	};
-	int ret;
-
-	dev->mt76.mcu_ops = &mt76x2_mcu_ops;
-
-	ret = mt76pci_load_rom_patch(dev);
-	if (ret)
-		return ret;
-
-	ret = mt76pci_load_firmware(dev);
-	if (ret)
-		return ret;
-
-	mt76x02_mcu_function_select(dev, Q_SELECT, 1);
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_phy.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_phy.c
deleted file mode 100644
index 8831337..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/pci_phy.c
+++ /dev/null
@@ -1,311 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/delay.h>
-#include "mt76x2.h"
-#include "mcu.h"
-#include "eeprom.h"
-#include "../mt76x02_phy.h"
-
-static bool
-mt76x2_phy_tssi_init_cal(struct mt76x02_dev *dev)
-{
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-	u32 flag = 0;
-
-	if (!mt76x2_tssi_enabled(dev))
-		return false;
-
-	if (mt76x2_channel_silent(dev))
-		return false;
-
-	if (chan->band == NL80211_BAND_5GHZ)
-		flag |= BIT(0);
-
-	if (mt76x02_ext_pa_enabled(dev, chan->band))
-		flag |= BIT(8);
-
-	mt76x02_mcu_calibrate(dev, MCU_CAL_TSSI, flag);
-	dev->cal.tssi_cal_done = true;
-	return true;
-}
-
-static void
-mt76x2_phy_channel_calibrate(struct mt76x02_dev *dev, bool mac_stopped)
-{
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-	bool is_5ghz = chan->band == NL80211_BAND_5GHZ;
-
-	if (dev->cal.channel_cal_done)
-		return;
-
-	if (mt76x2_channel_silent(dev))
-		return;
-
-	if (!dev->cal.tssi_cal_done)
-		mt76x2_phy_tssi_init_cal(dev);
-
-	if (!mac_stopped)
-		mt76x2_mac_stop(dev, false);
-
-	if (is_5ghz)
-		mt76x02_mcu_calibrate(dev, MCU_CAL_LC, 0);
-
-	mt76x02_mcu_calibrate(dev, MCU_CAL_TX_LOFT, is_5ghz);
-	mt76x02_mcu_calibrate(dev, MCU_CAL_TXIQ, is_5ghz);
-	mt76x02_mcu_calibrate(dev, MCU_CAL_RXIQC_FI, is_5ghz);
-	mt76x02_mcu_calibrate(dev, MCU_CAL_TEMP_SENSOR, 0);
-	mt76x02_mcu_calibrate(dev, MCU_CAL_TX_SHAPING, 0);
-
-	if (!mac_stopped)
-		mt76x2_mac_resume(dev);
-
-	mt76x2_apply_gain_adj(dev);
-	mt76x02_edcca_init(dev);
-
-	dev->cal.channel_cal_done = true;
-}
-
-void mt76x2_phy_set_antenna(struct mt76x02_dev *dev)
-{
-	u32 val;
-
-	val = mt76_rr(dev, MT_BBP(AGC, 0));
-	val &= ~(BIT(4) | BIT(1));
-	switch (dev->mphy.antenna_mask) {
-	case 1:
-		/* disable mac DAC control */
-		mt76_clear(dev, MT_BBP(IBI, 9), BIT(11));
-		mt76_clear(dev, MT_BBP(TXBE, 5), 3);
-		mt76_rmw_field(dev, MT_TX_PIN_CFG, MT_TX_PIN_CFG_TXANT, 0x3);
-		mt76_rmw_field(dev, MT_BBP(CORE, 32), GENMASK(21, 20), 2);
-		/* disable DAC 1 */
-		mt76_rmw_field(dev, MT_BBP(CORE, 33), GENMASK(12, 9), 4);
-
-		val &= ~(BIT(3) | BIT(0));
-		break;
-	case 2:
-		/* disable mac DAC control */
-		mt76_clear(dev, MT_BBP(IBI, 9), BIT(11));
-		mt76_rmw_field(dev, MT_BBP(TXBE, 5), 3, 1);
-		mt76_rmw_field(dev, MT_TX_PIN_CFG, MT_TX_PIN_CFG_TXANT, 0xc);
-		mt76_rmw_field(dev, MT_BBP(CORE, 32), GENMASK(21, 20), 1);
-		/* disable DAC 0 */
-		mt76_rmw_field(dev, MT_BBP(CORE, 33), GENMASK(12, 9), 1);
-
-		val &= ~BIT(3);
-		val |= BIT(0);
-		break;
-	case 3:
-	default:
-		/* enable mac DAC control */
-		mt76_set(dev, MT_BBP(IBI, 9), BIT(11));
-		mt76_set(dev, MT_BBP(TXBE, 5), 3);
-		mt76_rmw_field(dev, MT_TX_PIN_CFG, MT_TX_PIN_CFG_TXANT, 0xf);
-		mt76_clear(dev, MT_BBP(CORE, 32), GENMASK(21, 20));
-		mt76_clear(dev, MT_BBP(CORE, 33), GENMASK(12, 9));
-
-		val &= ~BIT(0);
-		val |= BIT(3);
-		break;
-	}
-	mt76_wr(dev, MT_BBP(AGC, 0), val);
-}
-
-int mt76x2_phy_set_channel(struct mt76x02_dev *dev,
-			   struct cfg80211_chan_def *chandef)
-{
-	struct ieee80211_channel *chan = chandef->chan;
-	bool scan = test_bit(MT76_SCANNING, &dev->mphy.state);
-	enum nl80211_band band = chan->band;
-	u8 channel;
-
-	u32 ext_cca_chan[4] = {
-		[0] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(0)),
-		[1] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(1)),
-		[2] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(2)),
-		[3] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(3)),
-	};
-	int ch_group_index;
-	u8 bw, bw_index;
-	int freq, freq1;
-	int ret;
-
-	dev->cal.channel_cal_done = false;
-	freq = chandef->chan->center_freq;
-	freq1 = chandef->center_freq1;
-	channel = chan->hw_value;
-
-	switch (chandef->width) {
-	case NL80211_CHAN_WIDTH_40:
-		bw = 1;
-		if (freq1 > freq) {
-			bw_index = 1;
-			ch_group_index = 0;
-		} else {
-			bw_index = 3;
-			ch_group_index = 1;
-		}
-		channel += 2 - ch_group_index * 4;
-		break;
-	case NL80211_CHAN_WIDTH_80:
-		ch_group_index = (freq - freq1 + 30) / 20;
-		if (WARN_ON(ch_group_index < 0 || ch_group_index > 3))
-			ch_group_index = 0;
-		bw = 2;
-		bw_index = ch_group_index;
-		channel += 6 - ch_group_index * 4;
-		break;
-	default:
-		bw = 0;
-		bw_index = 0;
-		ch_group_index = 0;
-		break;
-	}
-
-	mt76x2_read_rx_gain(dev);
-	mt76x2_phy_set_txpower_regs(dev, band);
-	mt76x2_configure_tx_delay(dev, band, bw);
-	mt76x2_phy_set_txpower(dev);
-
-	mt76x02_phy_set_band(dev, chan->band, ch_group_index & 1);
-	mt76x02_phy_set_bw(dev, chandef->width, ch_group_index);
-
-	mt76_rmw(dev, MT_EXT_CCA_CFG,
-		 (MT_EXT_CCA_CFG_CCA0 |
-		  MT_EXT_CCA_CFG_CCA1 |
-		  MT_EXT_CCA_CFG_CCA2 |
-		  MT_EXT_CCA_CFG_CCA3 |
-		  MT_EXT_CCA_CFG_CCA_MASK),
-		 ext_cca_chan[ch_group_index]);
-
-	ret = mt76x2_mcu_set_channel(dev, channel, bw, bw_index, scan);
-	if (ret)
-		return ret;
-
-	mt76x2_mcu_init_gain(dev, channel, dev->cal.rx.mcu_gain, true);
-
-	mt76x2_phy_set_antenna(dev);
-
-	/* Enable LDPC Rx */
-	if (mt76xx_rev(dev) >= MT76XX_REV_E3)
-		mt76_set(dev, MT_BBP(RXO, 13), BIT(10));
-
-	if (!dev->cal.init_cal_done) {
-		u8 val = mt76x02_eeprom_get(dev, MT_EE_BT_RCAL_RESULT);
-
-		if (val != 0xff)
-			mt76x02_mcu_calibrate(dev, MCU_CAL_R, 0);
-	}
-
-	mt76x02_mcu_calibrate(dev, MCU_CAL_RXDCOC, channel);
-
-	/* Rx LPF calibration */
-	if (!dev->cal.init_cal_done)
-		mt76x02_mcu_calibrate(dev, MCU_CAL_RC, 0);
-
-	dev->cal.init_cal_done = true;
-
-	mt76_wr(dev, MT_BBP(AGC, 61), 0xFF64A4E2);
-	mt76_wr(dev, MT_BBP(AGC, 7), 0x08081010);
-	mt76_wr(dev, MT_BBP(AGC, 11), 0x00000404);
-	mt76_wr(dev, MT_BBP(AGC, 2), 0x00007070);
-	mt76_wr(dev, MT_TXOP_CTRL_CFG, 0x04101B3F);
-
-	if (scan)
-		return 0;
-
-	mt76x2_phy_channel_calibrate(dev, true);
-	mt76x02_init_agc_gain(dev);
-
-	/* init default values for temp compensation */
-	if (mt76x2_tssi_enabled(dev)) {
-		mt76_rmw_field(dev, MT_TX_ALC_CFG_1, MT_TX_ALC_CFG_1_TEMP_COMP,
-			       0x38);
-		mt76_rmw_field(dev, MT_TX_ALC_CFG_2, MT_TX_ALC_CFG_2_TEMP_COMP,
-			       0x38);
-	}
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->cal_work,
-				     MT_CALIBRATE_INTERVAL);
-
-	return 0;
-}
-
-static void
-mt76x2_phy_temp_compensate(struct mt76x02_dev *dev)
-{
-	struct mt76x2_temp_comp t;
-	int temp, db_diff;
-
-	if (mt76x2_get_temp_comp(dev, &t))
-		return;
-
-	temp = mt76_get_field(dev, MT_TEMP_SENSOR, MT_TEMP_SENSOR_VAL);
-	temp -= t.temp_25_ref;
-	temp = (temp * 1789) / 1000 + 25;
-	dev->cal.temp = temp;
-
-	if (temp > 25)
-		db_diff = (temp - 25) / t.high_slope;
-	else
-		db_diff = (25 - temp) / t.low_slope;
-
-	db_diff = min(db_diff, t.upper_bound);
-	db_diff = max(db_diff, t.lower_bound);
-
-	mt76_rmw_field(dev, MT_TX_ALC_CFG_1, MT_TX_ALC_CFG_1_TEMP_COMP,
-		       db_diff * 2);
-	mt76_rmw_field(dev, MT_TX_ALC_CFG_2, MT_TX_ALC_CFG_2_TEMP_COMP,
-		       db_diff * 2);
-}
-
-void mt76x2_phy_calibrate(struct work_struct *work)
-{
-	struct mt76x02_dev *dev;
-
-	dev = container_of(work, struct mt76x02_dev, cal_work.work);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt76x2_phy_channel_calibrate(dev, false);
-	mt76x2_phy_tssi_compensate(dev);
-	mt76x2_phy_temp_compensate(dev);
-	mt76x2_phy_update_channel_gain(dev);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->cal_work,
-				     MT_CALIBRATE_INTERVAL);
-}
-
-int mt76x2_phy_start(struct mt76x02_dev *dev)
-{
-	int ret;
-
-	ret = mt76x02_mcu_set_radio_state(dev, true);
-	if (ret)
-		return ret;
-
-	mt76x2_mcu_load_cr(dev, MT_RF_BBP_CR, 0, 0);
-
-	return ret;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/phy.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/phy.c
deleted file mode 100644
index f84517d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/phy.c
+++ /dev/null
@@ -1,349 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include "mt76x2.h"
-#include "eeprom.h"
-#include "mcu.h"
-#include "../mt76x02_phy.h"
-
-static void
-mt76x2_adjust_high_lna_gain(struct mt76x02_dev *dev, int reg, s8 offset)
-{
-	s8 gain;
-
-	gain = FIELD_GET(MT_BBP_AGC_LNA_HIGH_GAIN,
-			 mt76_rr(dev, MT_BBP(AGC, reg)));
-	gain -= offset / 2;
-	mt76_rmw_field(dev, MT_BBP(AGC, reg), MT_BBP_AGC_LNA_HIGH_GAIN, gain);
-}
-
-static void
-mt76x2_adjust_agc_gain(struct mt76x02_dev *dev, int reg, s8 offset)
-{
-	s8 gain;
-
-	gain = FIELD_GET(MT_BBP_AGC_GAIN, mt76_rr(dev, MT_BBP(AGC, reg)));
-	gain += offset;
-	mt76_rmw_field(dev, MT_BBP(AGC, reg), MT_BBP_AGC_GAIN, gain);
-}
-
-void mt76x2_apply_gain_adj(struct mt76x02_dev *dev)
-{
-	s8 *gain_adj = dev->cal.rx.high_gain;
-
-	mt76x2_adjust_high_lna_gain(dev, 4, gain_adj[0]);
-	mt76x2_adjust_high_lna_gain(dev, 5, gain_adj[1]);
-
-	mt76x2_adjust_agc_gain(dev, 8, gain_adj[0]);
-	mt76x2_adjust_agc_gain(dev, 9, gain_adj[1]);
-}
-EXPORT_SYMBOL_GPL(mt76x2_apply_gain_adj);
-
-void mt76x2_phy_set_txpower_regs(struct mt76x02_dev *dev,
-				 enum nl80211_band band)
-{
-	u32 pa_mode[2];
-	u32 pa_mode_adj;
-
-	if (band == NL80211_BAND_2GHZ) {
-		pa_mode[0] = 0x010055ff;
-		pa_mode[1] = 0x00550055;
-
-		mt76_wr(dev, MT_TX_ALC_CFG_2, 0x35160a00);
-		mt76_wr(dev, MT_TX_ALC_CFG_3, 0x35160a06);
-
-		if (mt76x02_ext_pa_enabled(dev, band)) {
-			mt76_wr(dev, MT_RF_PA_MODE_ADJ0, 0x0000ec00);
-			mt76_wr(dev, MT_RF_PA_MODE_ADJ1, 0x0000ec00);
-		} else {
-			mt76_wr(dev, MT_RF_PA_MODE_ADJ0, 0xf4000200);
-			mt76_wr(dev, MT_RF_PA_MODE_ADJ1, 0xfa000200);
-		}
-	} else {
-		pa_mode[0] = 0x0000ffff;
-		pa_mode[1] = 0x00ff00ff;
-
-		if (mt76x02_ext_pa_enabled(dev, band)) {
-			mt76_wr(dev, MT_TX_ALC_CFG_2, 0x2f0f0400);
-			mt76_wr(dev, MT_TX_ALC_CFG_3, 0x2f0f0476);
-		} else {
-			mt76_wr(dev, MT_TX_ALC_CFG_2, 0x1b0f0400);
-			mt76_wr(dev, MT_TX_ALC_CFG_3, 0x1b0f0476);
-		}
-
-		if (mt76x02_ext_pa_enabled(dev, band))
-			pa_mode_adj = 0x04000000;
-		else
-			pa_mode_adj = 0;
-
-		mt76_wr(dev, MT_RF_PA_MODE_ADJ0, pa_mode_adj);
-		mt76_wr(dev, MT_RF_PA_MODE_ADJ1, pa_mode_adj);
-	}
-
-	mt76_wr(dev, MT_BB_PA_MODE_CFG0, pa_mode[0]);
-	mt76_wr(dev, MT_BB_PA_MODE_CFG1, pa_mode[1]);
-	mt76_wr(dev, MT_RF_PA_MODE_CFG0, pa_mode[0]);
-	mt76_wr(dev, MT_RF_PA_MODE_CFG1, pa_mode[1]);
-
-	if (mt76x02_ext_pa_enabled(dev, band)) {
-		u32 val;
-
-		if (band == NL80211_BAND_2GHZ)
-			val = 0x3c3c023c;
-		else
-			val = 0x363c023c;
-
-		mt76_wr(dev, MT_TX0_RF_GAIN_CORR, val);
-		mt76_wr(dev, MT_TX1_RF_GAIN_CORR, val);
-		mt76_wr(dev, MT_TX_ALC_CFG_4, 0x00001818);
-	} else {
-		if (band == NL80211_BAND_2GHZ) {
-			u32 val = 0x0f3c3c3c;
-
-			mt76_wr(dev, MT_TX0_RF_GAIN_CORR, val);
-			mt76_wr(dev, MT_TX1_RF_GAIN_CORR, val);
-			mt76_wr(dev, MT_TX_ALC_CFG_4, 0x00000606);
-		} else {
-			mt76_wr(dev, MT_TX0_RF_GAIN_CORR, 0x383c023c);
-			mt76_wr(dev, MT_TX1_RF_GAIN_CORR, 0x24282e28);
-			mt76_wr(dev, MT_TX_ALC_CFG_4, 0);
-		}
-	}
-}
-EXPORT_SYMBOL_GPL(mt76x2_phy_set_txpower_regs);
-
-static int
-mt76x2_get_min_rate_power(struct mt76x02_rate_power *r)
-{
-	int i;
-	s8 ret = 0;
-
-	for (i = 0; i < sizeof(r->all); i++) {
-		if (!r->all[i])
-			continue;
-
-		if (ret)
-			ret = min(ret, r->all[i]);
-		else
-			ret = r->all[i];
-	}
-
-	return ret;
-}
-
-void mt76x2_phy_set_txpower(struct mt76x02_dev *dev)
-{
-	enum nl80211_chan_width width = dev->mphy.chandef.width;
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-	struct mt76x2_tx_power_info txp;
-	int txp_0, txp_1, delta = 0;
-	struct mt76x02_rate_power t = {};
-	int base_power, gain;
-
-	mt76x2_get_power_info(dev, &txp, chan);
-
-	if (width == NL80211_CHAN_WIDTH_40)
-		delta = txp.delta_bw40;
-	else if (width == NL80211_CHAN_WIDTH_80)
-		delta = txp.delta_bw80;
-
-	mt76x2_get_rate_power(dev, &t, chan);
-	mt76x02_add_rate_power_offset(&t, txp.target_power + delta);
-	mt76x02_limit_rate_power(&t, dev->txpower_conf);
-	dev->mphy.txpower_cur = mt76x02_get_max_rate_power(&t);
-
-	base_power = mt76x2_get_min_rate_power(&t);
-	delta = base_power - txp.target_power;
-	txp_0 = txp.chain[0].target_power + txp.chain[0].delta + delta;
-	txp_1 = txp.chain[1].target_power + txp.chain[1].delta + delta;
-
-	gain = min(txp_0, txp_1);
-	if (gain < 0) {
-		base_power -= gain;
-		txp_0 -= gain;
-		txp_1 -= gain;
-	} else if (gain > 0x2f) {
-		base_power -= gain - 0x2f;
-		txp_0 = 0x2f;
-		txp_1 = 0x2f;
-	}
-
-	mt76x02_add_rate_power_offset(&t, -base_power);
-	dev->target_power = txp.target_power;
-	dev->target_power_delta[0] = txp_0 - txp.chain[0].target_power;
-	dev->target_power_delta[1] = txp_1 - txp.chain[0].target_power;
-	dev->rate_power = t;
-
-	mt76x02_phy_set_txpower(dev, txp_0, txp_1);
-}
-EXPORT_SYMBOL_GPL(mt76x2_phy_set_txpower);
-
-void mt76x2_configure_tx_delay(struct mt76x02_dev *dev,
-			       enum nl80211_band band, u8 bw)
-{
-	u32 cfg0, cfg1;
-
-	if (mt76x02_ext_pa_enabled(dev, band)) {
-		cfg0 = bw ? 0x000b0c01 : 0x00101101;
-		cfg1 = 0x00011414;
-	} else {
-		cfg0 = bw ? 0x000b0b01 : 0x00101001;
-		cfg1 = 0x00021414;
-	}
-	mt76_wr(dev, MT_TX_SW_CFG0, cfg0);
-	mt76_wr(dev, MT_TX_SW_CFG1, cfg1);
-
-	mt76_rmw_field(dev, MT_XIFS_TIME_CFG, MT_XIFS_TIME_CFG_OFDM_SIFS, 15);
-}
-EXPORT_SYMBOL_GPL(mt76x2_configure_tx_delay);
-
-void mt76x2_phy_tssi_compensate(struct mt76x02_dev *dev)
-{
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-	struct mt76x2_tx_power_info txp;
-	struct mt76x2_tssi_comp t = {};
-
-	if (!dev->cal.tssi_cal_done)
-		return;
-
-	if (!dev->cal.tssi_comp_pending) {
-		/* TSSI trigger */
-		t.cal_mode = BIT(0);
-		mt76x2_mcu_tssi_comp(dev, &t);
-		dev->cal.tssi_comp_pending = true;
-	} else {
-		if (mt76_rr(dev, MT_BBP(CORE, 34)) & BIT(4))
-			return;
-
-		dev->cal.tssi_comp_pending = false;
-		mt76x2_get_power_info(dev, &txp, chan);
-
-		if (mt76x02_ext_pa_enabled(dev, chan->band))
-			t.pa_mode = 1;
-
-		t.cal_mode = BIT(1);
-		t.slope0 = txp.chain[0].tssi_slope;
-		t.offset0 = txp.chain[0].tssi_offset;
-		t.slope1 = txp.chain[1].tssi_slope;
-		t.offset1 = txp.chain[1].tssi_offset;
-		mt76x2_mcu_tssi_comp(dev, &t);
-
-		if (t.pa_mode || dev->cal.dpd_cal_done || dev->ed_tx_blocked)
-			return;
-
-		usleep_range(10000, 20000);
-		mt76x02_mcu_calibrate(dev, MCU_CAL_DPD, chan->hw_value);
-		dev->cal.dpd_cal_done = true;
-	}
-}
-EXPORT_SYMBOL_GPL(mt76x2_phy_tssi_compensate);
-
-static void
-mt76x2_phy_set_gain_val(struct mt76x02_dev *dev)
-{
-	u32 val;
-	u8 gain_val[2];
-
-	gain_val[0] = dev->cal.agc_gain_cur[0] - dev->cal.agc_gain_adjust;
-	gain_val[1] = dev->cal.agc_gain_cur[1] - dev->cal.agc_gain_adjust;
-
-	val = 0x1836 << 16;
-	if (!mt76x2_has_ext_lna(dev) &&
-	    dev->mphy.chandef.width >= NL80211_CHAN_WIDTH_40)
-		val = 0x1e42 << 16;
-
-	if (mt76x2_has_ext_lna(dev) &&
-	    dev->mphy.chandef.chan->band == NL80211_BAND_2GHZ &&
-	    dev->mphy.chandef.width < NL80211_CHAN_WIDTH_40)
-		val = 0x0f36 << 16;
-
-	val |= 0xf8;
-
-	mt76_wr(dev, MT_BBP(AGC, 8),
-		val | FIELD_PREP(MT_BBP_AGC_GAIN, gain_val[0]));
-	mt76_wr(dev, MT_BBP(AGC, 9),
-		val | FIELD_PREP(MT_BBP_AGC_GAIN, gain_val[1]));
-
-	if (dev->mphy.chandef.chan->flags & IEEE80211_CHAN_RADAR)
-		mt76x02_phy_dfs_adjust_agc(dev);
-}
-
-void mt76x2_phy_update_channel_gain(struct mt76x02_dev *dev)
-{
-	u8 *gain = dev->cal.agc_gain_init;
-	u8 low_gain_delta, gain_delta;
-	u32 agc_35, agc_37;
-	bool gain_change;
-	int low_gain;
-	u32 val;
-
-	dev->cal.avg_rssi_all = mt76_get_min_avg_rssi(&dev->mt76, false);
-	if (!dev->cal.avg_rssi_all)
-		dev->cal.avg_rssi_all = -75;
-
-	low_gain = (dev->cal.avg_rssi_all > mt76x02_get_rssi_gain_thresh(dev)) +
-		(dev->cal.avg_rssi_all > mt76x02_get_low_rssi_gain_thresh(dev));
-
-	gain_change = dev->cal.low_gain < 0 ||
-		      (dev->cal.low_gain & 2) ^ (low_gain & 2);
-	dev->cal.low_gain = low_gain;
-
-	if (!gain_change) {
-		if (mt76x02_phy_adjust_vga_gain(dev))
-			mt76x2_phy_set_gain_val(dev);
-		return;
-	}
-
-	if (dev->mphy.chandef.width == NL80211_CHAN_WIDTH_80) {
-		mt76_wr(dev, MT_BBP(RXO, 14), 0x00560211);
-		val = mt76_rr(dev, MT_BBP(AGC, 26)) & ~0xf;
-		if (low_gain == 2)
-			val |= 0x3;
-		else
-			val |= 0x5;
-		mt76_wr(dev, MT_BBP(AGC, 26), val);
-	} else {
-		mt76_wr(dev, MT_BBP(RXO, 14), 0x00560423);
-	}
-
-	if (mt76x2_has_ext_lna(dev))
-		low_gain_delta = 10;
-	else
-		low_gain_delta = 14;
-
-	agc_37 = 0x2121262c;
-	if (dev->mphy.chandef.chan->band == NL80211_BAND_2GHZ)
-		agc_35 = 0x11111516;
-	else if (low_gain == 2)
-		agc_35 = agc_37 = 0x08080808;
-	else if (dev->mphy.chandef.width == NL80211_CHAN_WIDTH_80)
-		agc_35 = 0x10101014;
-	else
-		agc_35 = 0x11111116;
-
-	if (low_gain == 2) {
-		mt76_wr(dev, MT_BBP(RXO, 18), 0xf000a990);
-		mt76_wr(dev, MT_BBP(AGC, 35), 0x08080808);
-		mt76_wr(dev, MT_BBP(AGC, 37), 0x08080808);
-		gain_delta = low_gain_delta;
-		dev->cal.agc_gain_adjust = 0;
-	} else {
-		mt76_wr(dev, MT_BBP(RXO, 18), 0xf000a991);
-		gain_delta = 0;
-		dev->cal.agc_gain_adjust = low_gain_delta;
-	}
-
-	mt76_wr(dev, MT_BBP(AGC, 35), agc_35);
-	mt76_wr(dev, MT_BBP(AGC, 37), agc_37);
-
-	dev->cal.agc_gain_cur[0] = gain[0] - gain_delta;
-	dev->cal.agc_gain_cur[1] = gain[1] - gain_delta;
-	mt76x2_phy_set_gain_val(dev);
-
-	/* clear false CCA counters */
-	mt76_rr(dev, MT_RX_STAT_1);
-}
-EXPORT_SYMBOL_GPL(mt76x2_phy_update_channel_gain);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb.c
deleted file mode 100644
index 55068f3..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb.c
+++ /dev/null
@@ -1,150 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-
-#include "../mt76x02_usb.h"
-#include "mt76x2u.h"
-
-static const struct usb_device_id mt76x2u_device_table[] = {
-	{ USB_DEVICE(0x0b05, 0x1833) },	/* Asus USB-AC54 */
-	{ USB_DEVICE(0x0b05, 0x17eb) },	/* Asus USB-AC55 */
-	{ USB_DEVICE(0x0b05, 0x180b) },	/* Asus USB-N53 B1 */
-	{ USB_DEVICE(0x0e8d, 0x7612) },	/* Aukey USBAC1200 - Alfa AWUS036ACM */
-	{ USB_DEVICE(0x057c, 0x8503) },	/* Avm FRITZ!WLAN AC860 */
-	{ USB_DEVICE(0x7392, 0xb711) },	/* Edimax EW 7722 UAC */
-	{ USB_DEVICE(0x0e8d, 0x7632) },	/* HC-M7662BU1 */
-	{ USB_DEVICE(0x2c4e, 0x0103) },	/* Mercury UD13 */
-	{ USB_DEVICE(0x0846, 0x9053) },	/* Netgear A6210 */
-	{ USB_DEVICE(0x045e, 0x02e6) },	/* XBox One Wireless Adapter */
-	{ USB_DEVICE(0x045e, 0x02fe) },	/* XBox One Wireless Adapter */
-	{ },
-};
-
-static int mt76x2u_probe(struct usb_interface *intf,
-			 const struct usb_device_id *id)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		.drv_flags = MT_DRV_SW_RX_AIRTIME,
-		.survey_flags = SURVEY_INFO_TIME_TX,
-		.update_survey = mt76x02_update_channel,
-		.tx_prepare_skb = mt76x02u_tx_prepare_skb,
-		.tx_complete_skb = mt76x02u_tx_complete_skb,
-		.tx_status_data = mt76x02_tx_status_data,
-		.rx_skb = mt76x02_queue_rx_skb,
-		.sta_ps = mt76x02_sta_ps,
-		.sta_add = mt76x02_sta_add,
-		.sta_remove = mt76x02_sta_remove,
-	};
-	struct usb_device *udev = interface_to_usbdev(intf);
-	struct mt76x02_dev *dev;
-	struct mt76_dev *mdev;
-	int err;
-
-	mdev = mt76_alloc_device(&intf->dev, sizeof(*dev), &mt76x2u_ops,
-				 &drv_ops);
-	if (!mdev)
-		return -ENOMEM;
-
-	dev = container_of(mdev, struct mt76x02_dev, mt76);
-
-	udev = usb_get_dev(udev);
-	usb_reset_device(udev);
-
-	usb_set_intfdata(intf, dev);
-
-	mt76x02u_init_mcu(mdev);
-	err = mt76u_init(mdev, intf);
-	if (err < 0)
-		goto err;
-
-	mdev->rev = mt76_rr(dev, MT_ASIC_VERSION);
-	dev_info(mdev->dev, "ASIC revision: %08x\n", mdev->rev);
-	if (!is_mt76x2(dev)) {
-		err = -ENODEV;
-		goto err;
-	}
-
-	err = mt76x2u_register_device(dev);
-	if (err < 0)
-		goto err;
-
-	return 0;
-
-err:
-	mt76u_queues_deinit(&dev->mt76);
-	mt76_free_device(&dev->mt76);
-	usb_set_intfdata(intf, NULL);
-	usb_put_dev(udev);
-
-	return err;
-}
-
-static void mt76x2u_disconnect(struct usb_interface *intf)
-{
-	struct usb_device *udev = interface_to_usbdev(intf);
-	struct mt76x02_dev *dev = usb_get_intfdata(intf);
-	struct ieee80211_hw *hw = mt76_hw(dev);
-
-	set_bit(MT76_REMOVED, &dev->mphy.state);
-	ieee80211_unregister_hw(hw);
-	mt76x2u_cleanup(dev);
-	mt76_free_device(&dev->mt76);
-	usb_set_intfdata(intf, NULL);
-	usb_put_dev(udev);
-}
-
-static int __maybe_unused mt76x2u_suspend(struct usb_interface *intf,
-					  pm_message_t state)
-{
-	struct mt76x02_dev *dev = usb_get_intfdata(intf);
-
-	mt76u_stop_rx(&dev->mt76);
-
-	return 0;
-}
-
-static int __maybe_unused mt76x2u_resume(struct usb_interface *intf)
-{
-	struct mt76x02_dev *dev = usb_get_intfdata(intf);
-	int err;
-
-	err = mt76u_resume_rx(&dev->mt76);
-	if (err < 0)
-		goto err;
-
-	err = mt76x2u_init_hardware(dev);
-	if (err < 0)
-		goto err;
-
-	return 0;
-
-err:
-	mt76x2u_cleanup(dev);
-	return err;
-}
-
-MODULE_DEVICE_TABLE(usb, mt76x2u_device_table);
-MODULE_FIRMWARE(MT7662_FIRMWARE);
-MODULE_FIRMWARE(MT7662_ROM_PATCH);
-
-static struct usb_driver mt76x2u_driver = {
-	.name		= KBUILD_MODNAME,
-	.id_table	= mt76x2u_device_table,
-	.probe		= mt76x2u_probe,
-	.disconnect	= mt76x2u_disconnect,
-#ifdef CONFIG_PM
-	.suspend	= mt76x2u_suspend,
-	.resume		= mt76x2u_resume,
-	.reset_resume	= mt76x2u_resume,
-#endif /* CONFIG_PM */
-	.soft_unbind	= 1,
-	.disable_hub_initiated_lpm = 1,
-};
-module_usb_driver(mt76x2u_driver);
-
-MODULE_AUTHOR("Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>");
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_init.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_init.c
deleted file mode 100644
index 33a1436..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_init.c
+++ /dev/null
@@ -1,250 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <linux/delay.h>
-
-#include "mt76x2u.h"
-#include "eeprom.h"
-#include "../mt76x02_phy.h"
-#include "../mt76x02_usb.h"
-
-static void mt76x2u_init_dma(struct mt76x02_dev *dev)
-{
-	u32 val = mt76_rr(dev, MT_VEND_ADDR(CFG, MT_USB_U3DMA_CFG));
-
-	val |= MT_USB_DMA_CFG_RX_DROP_OR_PAD |
-	       MT_USB_DMA_CFG_RX_BULK_EN |
-	       MT_USB_DMA_CFG_TX_BULK_EN;
-
-	/* disable AGGR_BULK_RX in order to receive one
-	 * frame in each rx urb and avoid copies
-	 */
-	val &= ~MT_USB_DMA_CFG_RX_BULK_AGG_EN;
-	mt76_wr(dev, MT_VEND_ADDR(CFG, MT_USB_U3DMA_CFG), val);
-}
-
-static void mt76x2u_power_on_rf_patch(struct mt76x02_dev *dev)
-{
-	mt76_set(dev, MT_VEND_ADDR(CFG, 0x130), BIT(0) | BIT(16));
-	udelay(1);
-
-	mt76_clear(dev, MT_VEND_ADDR(CFG, 0x1c), 0xff);
-	mt76_set(dev, MT_VEND_ADDR(CFG, 0x1c), 0x30);
-
-	mt76_wr(dev, MT_VEND_ADDR(CFG, 0x14), 0x484f);
-	udelay(1);
-
-	mt76_set(dev, MT_VEND_ADDR(CFG, 0x130), BIT(17));
-	usleep_range(150, 200);
-
-	mt76_clear(dev, MT_VEND_ADDR(CFG, 0x130), BIT(16));
-	usleep_range(50, 100);
-
-	mt76_set(dev, MT_VEND_ADDR(CFG, 0x14c), BIT(19) | BIT(20));
-}
-
-static void mt76x2u_power_on_rf(struct mt76x02_dev *dev, int unit)
-{
-	int shift = unit ? 8 : 0;
-	u32 val = (BIT(1) | BIT(3) | BIT(4) | BIT(5)) << shift;
-
-	/* Enable RF BG */
-	mt76_set(dev, MT_VEND_ADDR(CFG, 0x130), BIT(0) << shift);
-	usleep_range(10, 20);
-
-	/* Enable RFDIG LDO/AFE/ABB/ADDA */
-	mt76_set(dev, MT_VEND_ADDR(CFG, 0x130), val);
-	usleep_range(10, 20);
-
-	/* Switch RFDIG power to internal LDO */
-	mt76_clear(dev, MT_VEND_ADDR(CFG, 0x130), BIT(2) << shift);
-	usleep_range(10, 20);
-
-	mt76x2u_power_on_rf_patch(dev);
-
-	mt76_set(dev, 0x530, 0xf);
-}
-
-static void mt76x2u_power_on(struct mt76x02_dev *dev)
-{
-	u32 val;
-
-	/* Turn on WL MTCMOS */
-	mt76_set(dev, MT_VEND_ADDR(CFG, 0x148),
-		 MT_WLAN_MTC_CTRL_MTCMOS_PWR_UP);
-
-	val = MT_WLAN_MTC_CTRL_STATE_UP |
-	      MT_WLAN_MTC_CTRL_PWR_ACK |
-	      MT_WLAN_MTC_CTRL_PWR_ACK_S;
-
-	mt76_poll(dev, MT_VEND_ADDR(CFG, 0x148), val, val, 1000);
-
-	mt76_clear(dev, MT_VEND_ADDR(CFG, 0x148), 0x7f << 16);
-	usleep_range(10, 20);
-
-	mt76_clear(dev, MT_VEND_ADDR(CFG, 0x148), 0xf << 24);
-	usleep_range(10, 20);
-
-	mt76_set(dev, MT_VEND_ADDR(CFG, 0x148), 0xf << 24);
-	mt76_clear(dev, MT_VEND_ADDR(CFG, 0x148), 0xfff);
-
-	/* Turn on AD/DA power down */
-	mt76_clear(dev, MT_VEND_ADDR(CFG, 0x1204), BIT(3));
-
-	/* WLAN function enable */
-	mt76_set(dev, MT_VEND_ADDR(CFG, 0x80), BIT(0));
-
-	/* Release BBP software reset */
-	mt76_clear(dev, MT_VEND_ADDR(CFG, 0x64), BIT(18));
-
-	mt76x2u_power_on_rf(dev, 0);
-	mt76x2u_power_on_rf(dev, 1);
-}
-
-static int mt76x2u_init_eeprom(struct mt76x02_dev *dev)
-{
-	u32 val, i;
-
-	dev->mt76.eeprom.data = devm_kzalloc(dev->mt76.dev,
-					     MT7612U_EEPROM_SIZE,
-					     GFP_KERNEL);
-	dev->mt76.eeprom.size = MT7612U_EEPROM_SIZE;
-	if (!dev->mt76.eeprom.data)
-		return -ENOMEM;
-
-	for (i = 0; i + 4 <= MT7612U_EEPROM_SIZE; i += 4) {
-		val = mt76_rr(dev, MT_VEND_ADDR(EEPROM, i));
-		put_unaligned_le32(val, dev->mt76.eeprom.data + i);
-	}
-
-	mt76x02_eeprom_parse_hw_cap(dev);
-	return 0;
-}
-
-int mt76x2u_init_hardware(struct mt76x02_dev *dev)
-{
-	int i, k, err;
-
-	mt76x2_reset_wlan(dev, true);
-	mt76x2u_power_on(dev);
-
-	if (!mt76x02_wait_for_mac(&dev->mt76))
-		return -ETIMEDOUT;
-
-	err = mt76x2u_mcu_fw_init(dev);
-	if (err < 0)
-		return err;
-
-	if (!mt76_poll_msec(dev, MT_WPDMA_GLO_CFG,
-			    MT_WPDMA_GLO_CFG_TX_DMA_BUSY |
-			    MT_WPDMA_GLO_CFG_RX_DMA_BUSY, 0, 100))
-		return -EIO;
-
-	/* wait for asic ready after fw load. */
-	if (!mt76x02_wait_for_mac(&dev->mt76))
-		return -ETIMEDOUT;
-
-	mt76x2u_init_dma(dev);
-
-	err = mt76x2u_mcu_init(dev);
-	if (err < 0)
-		return err;
-
-	err = mt76x2u_mac_reset(dev);
-	if (err < 0)
-		return err;
-
-	mt76x02_mac_setaddr(dev, dev->mt76.eeprom.data + MT_EE_MAC_ADDR);
-	dev->mt76.rxfilter = mt76_rr(dev, MT_RX_FILTR_CFG);
-
-	if (!mt76x02_wait_for_txrx_idle(&dev->mt76))
-		return -ETIMEDOUT;
-
-	/* reset wcid table */
-	for (i = 0; i < 256; i++)
-		mt76x02_mac_wcid_setup(dev, i, 0, NULL);
-
-	/* reset shared key table and pairwise key table */
-	for (i = 0; i < 16; i++) {
-		for (k = 0; k < 4; k++)
-			mt76x02_mac_shared_key_setup(dev, i, k, NULL);
-	}
-
-	mt76x02u_init_beacon_config(dev);
-
-	mt76_rmw(dev, MT_US_CYC_CFG, MT_US_CYC_CNT, 0x1e);
-	mt76_wr(dev, MT_TXOP_CTRL_CFG, 0x583f);
-
-	err = mt76x2_mcu_load_cr(dev, MT_RF_BBP_CR, 0, 0);
-	if (err < 0)
-		return err;
-
-	mt76x02_phy_set_rxpath(dev);
-	mt76x02_phy_set_txdac(dev);
-
-	return mt76x2u_mac_stop(dev);
-}
-
-int mt76x2u_register_device(struct mt76x02_dev *dev)
-{
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	struct mt76_usb *usb = &dev->mt76.usb;
-	int err;
-
-	INIT_DELAYED_WORK(&dev->cal_work, mt76x2u_phy_calibrate);
-	err = mt76x02_init_device(dev);
-	if (err)
-		return err;
-
-	err = mt76x2u_init_eeprom(dev);
-	if (err < 0)
-		return err;
-
-	usb->mcu.data = devm_kmalloc(dev->mt76.dev, MCU_RESP_URB_SIZE,
-				     GFP_KERNEL);
-	if (!usb->mcu.data)
-		return -ENOMEM;
-
-	err = mt76u_alloc_queues(&dev->mt76);
-	if (err < 0)
-		goto fail;
-
-	err = mt76x2u_init_hardware(dev);
-	if (err < 0)
-		goto fail;
-
-	/* check hw sg support in order to enable AMSDU */
-	hw->max_tx_fragments = dev->mt76.usb.sg_en ? MT_TX_SG_MAX_SIZE : 1;
-	err = mt76_register_device(&dev->mt76, true, mt76x02_rates,
-				   ARRAY_SIZE(mt76x02_rates));
-	if (err)
-		goto fail;
-
-	set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-
-	mt76x02_init_debugfs(dev);
-	mt76x2_init_txpower(dev, &dev->mphy.sband_2g.sband);
-	mt76x2_init_txpower(dev, &dev->mphy.sband_5g.sband);
-
-	return 0;
-
-fail:
-	mt76x2u_cleanup(dev);
-	return err;
-}
-
-void mt76x2u_stop_hw(struct mt76x02_dev *dev)
-{
-	cancel_delayed_work_sync(&dev->cal_work);
-	cancel_delayed_work_sync(&dev->mphy.mac_work);
-	mt76x2u_mac_stop(dev);
-}
-
-void mt76x2u_cleanup(struct mt76x02_dev *dev)
-{
-	mt76x02_mcu_set_radio_state(dev, false);
-	mt76x2u_stop_hw(dev);
-	mt76u_queues_deinit(&dev->mt76);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_mac.c
deleted file mode 100644
index eaa6228..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_mac.c
+++ /dev/null
@@ -1,174 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include "mt76x2u.h"
-#include "eeprom.h"
-
-static void mt76x2u_mac_fixup_xtal(struct mt76x02_dev *dev)
-{
-	s8 offset = 0;
-	u16 eep_val;
-
-	eep_val = mt76x02_eeprom_get(dev, MT_EE_XTAL_TRIM_2);
-
-	offset = eep_val & 0x7f;
-	if ((eep_val & 0xff) == 0xff)
-		offset = 0;
-	else if (eep_val & 0x80)
-		offset = 0 - offset;
-
-	eep_val >>= 8;
-	if (eep_val == 0x00 || eep_val == 0xff) {
-		eep_val = mt76x02_eeprom_get(dev, MT_EE_XTAL_TRIM_1);
-		eep_val &= 0xff;
-
-		if (eep_val == 0x00 || eep_val == 0xff)
-			eep_val = 0x14;
-	}
-
-	eep_val &= 0x7f;
-	mt76_rmw_field(dev, MT_VEND_ADDR(CFG, MT_XO_CTRL5),
-		       MT_XO_CTRL5_C2_VAL, eep_val + offset);
-	mt76_set(dev, MT_VEND_ADDR(CFG, MT_XO_CTRL6), MT_XO_CTRL6_C2_CTRL);
-
-	mt76_wr(dev, 0x504, 0x06000000);
-	mt76_wr(dev, 0x50c, 0x08800000);
-	mdelay(5);
-	mt76_wr(dev, 0x504, 0x0);
-
-	/* decrease SIFS from 16us to 13us */
-	mt76_rmw_field(dev, MT_XIFS_TIME_CFG,
-		       MT_XIFS_TIME_CFG_OFDM_SIFS, 0xd);
-	mt76_rmw_field(dev, MT_BKOFF_SLOT_CFG, MT_BKOFF_SLOT_CFG_CC_DELAY, 1);
-
-	/* init fce */
-	mt76_clear(dev, MT_FCE_L2_STUFF, MT_FCE_L2_STUFF_WR_MPDU_LEN_EN);
-
-	eep_val = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_2);
-	switch (FIELD_GET(MT_EE_NIC_CONF_2_XTAL_OPTION, eep_val)) {
-	case 0:
-		mt76_wr(dev, MT_XO_CTRL7, 0x5c1fee80);
-		break;
-	case 1:
-		mt76_wr(dev, MT_XO_CTRL7, 0x5c1feed0);
-		break;
-	default:
-		break;
-	}
-}
-
-int mt76x2u_mac_reset(struct mt76x02_dev *dev)
-{
-	mt76_wr(dev, MT_WPDMA_GLO_CFG, BIT(4) | BIT(5));
-
-	/* init pbf regs */
-	mt76_wr(dev, MT_PBF_TX_MAX_PCNT, 0xefef3f1f);
-	mt76_wr(dev, MT_PBF_RX_MAX_PCNT, 0xfebf);
-
-	mt76_write_mac_initvals(dev);
-
-	mt76_wr(dev, MT_TX_LINK_CFG, 0x1020);
-	mt76_wr(dev, MT_AUTO_RSP_CFG, 0x13);
-	mt76_wr(dev, MT_MAX_LEN_CFG, 0x2f00);
-
-	mt76_wr(dev, MT_WMM_AIFSN, 0x2273);
-	mt76_wr(dev, MT_WMM_CWMIN, 0x2344);
-	mt76_wr(dev, MT_WMM_CWMAX, 0x34aa);
-
-	mt76_clear(dev, MT_MAC_SYS_CTRL,
-		   MT_MAC_SYS_CTRL_RESET_CSR |
-		   MT_MAC_SYS_CTRL_RESET_BBP);
-
-	if (is_mt7612(dev))
-		mt76_clear(dev, MT_COEXCFG0, MT_COEXCFG0_COEX_EN);
-
-	mt76_set(dev, MT_EXT_CCA_CFG, 0xf000);
-	mt76_clear(dev, MT_TX_ALC_CFG_4, BIT(31));
-
-	mt76x2u_mac_fixup_xtal(dev);
-
-	return 0;
-}
-
-int mt76x2u_mac_stop(struct mt76x02_dev *dev)
-{
-	int i, count = 0, val;
-	bool stopped = false;
-	u32 rts_cfg;
-
-	if (test_bit(MT76_REMOVED, &dev->mphy.state))
-		return -EIO;
-
-	rts_cfg = mt76_rr(dev, MT_TX_RTS_CFG);
-	mt76_wr(dev, MT_TX_RTS_CFG, rts_cfg & ~MT_TX_RTS_CFG_RETRY_LIMIT);
-
-	mt76_clear(dev, MT_TXOP_CTRL_CFG, MT_TXOP_ED_CCA_EN);
-	mt76_clear(dev, MT_TXOP_HLDR_ET, MT_TXOP_HLDR_TX40M_BLK_EN);
-
-	/* wait tx dma to stop */
-	for (i = 0; i < 2000; i++) {
-		val = mt76_rr(dev, MT_VEND_ADDR(CFG, MT_USB_U3DMA_CFG));
-		if (!(val & MT_USB_DMA_CFG_TX_BUSY) && i > 10)
-			break;
-		usleep_range(50, 100);
-	}
-
-	/* page count on TxQ */
-	for (i = 0; i < 200; i++) {
-		if (!(mt76_rr(dev, 0x0438) & 0xffffffff) &&
-		    !(mt76_rr(dev, 0x0a30) & 0x000000ff) &&
-		    !(mt76_rr(dev, 0x0a34) & 0xff00ff00))
-			break;
-		usleep_range(10, 20);
-	}
-
-	/* disable tx-rx */
-	mt76_clear(dev, MT_MAC_SYS_CTRL,
-		   MT_MAC_SYS_CTRL_ENABLE_RX |
-		   MT_MAC_SYS_CTRL_ENABLE_TX);
-
-	/* Wait for MAC to become idle */
-	for (i = 0; i < 1000; i++) {
-		if (!(mt76_rr(dev, MT_MAC_STATUS) & MT_MAC_STATUS_TX) &&
-		    !mt76_rr(dev, MT_BBP(IBI, 12))) {
-			stopped = true;
-			break;
-		}
-		usleep_range(10, 20);
-	}
-
-	if (!stopped) {
-		mt76_set(dev, MT_BBP(CORE, 4), BIT(1));
-		mt76_clear(dev, MT_BBP(CORE, 4), BIT(1));
-
-		mt76_set(dev, MT_BBP(CORE, 4), BIT(0));
-		mt76_clear(dev, MT_BBP(CORE, 4), BIT(0));
-	}
-
-	/* page count on RxQ */
-	for (i = 0; i < 200; i++) {
-		if (!(mt76_rr(dev, 0x0430) & 0x00ff0000) &&
-		    !(mt76_rr(dev, 0x0a30) & 0xffffffff) &&
-		    !(mt76_rr(dev, 0x0a34) & 0xffffffff) &&
-		    ++count > 10)
-			break;
-		msleep(50);
-	}
-
-	if (!mt76_poll(dev, MT_MAC_STATUS, MT_MAC_STATUS_RX, 0, 2000))
-		dev_warn(dev->mt76.dev, "MAC RX failed to stop\n");
-
-	/* wait rx dma to stop */
-	for (i = 0; i < 2000; i++) {
-		val = mt76_rr(dev, MT_VEND_ADDR(CFG, MT_USB_U3DMA_CFG));
-		if (!(val & MT_USB_DMA_CFG_RX_BUSY) && i > 10)
-			break;
-		usleep_range(50, 100);
-	}
-
-	mt76_wr(dev, MT_TX_RTS_CFG, rts_cfg);
-
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_main.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_main.c
deleted file mode 100644
index ac07ed1..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_main.c
+++ /dev/null
@@ -1,129 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include "mt76x2u.h"
-#include "../mt76x02_usb.h"
-
-static int mt76x2u_start(struct ieee80211_hw *hw)
-{
-	struct mt76x02_dev *dev = hw->priv;
-	int ret;
-
-	ret = mt76x02u_mac_start(dev);
-	if (ret)
-		return ret;
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mphy.mac_work,
-				     MT_MAC_WORK_INTERVAL);
-	set_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-
-	return 0;
-}
-
-static void mt76x2u_stop(struct ieee80211_hw *hw)
-{
-	struct mt76x02_dev *dev = hw->priv;
-
-	clear_bit(MT76_STATE_RUNNING, &dev->mphy.state);
-	mt76u_stop_tx(&dev->mt76);
-	mt76x2u_stop_hw(dev);
-}
-
-static int
-mt76x2u_set_channel(struct mt76x02_dev *dev,
-		    struct cfg80211_chan_def *chandef)
-{
-	int err;
-
-	cancel_delayed_work_sync(&dev->cal_work);
-	mt76x02_pre_tbtt_enable(dev, false);
-
-	mutex_lock(&dev->mt76.mutex);
-	set_bit(MT76_RESET, &dev->mphy.state);
-
-	mt76_set_channel(&dev->mphy);
-
-	mt76x2_mac_stop(dev, false);
-
-	err = mt76x2u_phy_set_channel(dev, chandef);
-
-	mt76x02_mac_cc_reset(dev);
-	mt76x2_mac_resume(dev);
-
-	clear_bit(MT76_RESET, &dev->mphy.state);
-	mutex_unlock(&dev->mt76.mutex);
-
-	mt76x02_pre_tbtt_enable(dev, true);
-	mt76_txq_schedule_all(&dev->mphy);
-
-	return err;
-}
-
-static int
-mt76x2u_config(struct ieee80211_hw *hw, u32 changed)
-{
-	struct mt76x02_dev *dev = hw->priv;
-	int err = 0;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
-		if (!(hw->conf.flags & IEEE80211_CONF_MONITOR))
-			dev->mt76.rxfilter |= MT_RX_FILTR_CFG_PROMISC;
-		else
-			dev->mt76.rxfilter &= ~MT_RX_FILTR_CFG_PROMISC;
-		mt76_wr(dev, MT_RX_FILTR_CFG, dev->mt76.rxfilter);
-	}
-
-	if (changed & IEEE80211_CONF_CHANGE_POWER) {
-		struct mt76_phy *mphy = &dev->mphy;
-
-		dev->txpower_conf = hw->conf.power_level * 2;
-		dev->txpower_conf = mt76_get_sar_power(mphy,
-						       mphy->chandef.chan,
-						       dev->txpower_conf);
-		/* convert to per-chain power for 2x2 devices */
-		dev->txpower_conf -= 6;
-
-		if (test_bit(MT76_STATE_RUNNING, &mphy->state))
-			mt76x2_phy_set_txpower(dev);
-	}
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
-		ieee80211_stop_queues(hw);
-		err = mt76x2u_set_channel(dev, &hw->conf.chandef);
-		ieee80211_wake_queues(hw);
-	}
-
-	return err;
-}
-
-const struct ieee80211_ops mt76x2u_ops = {
-	.tx = mt76x02_tx,
-	.start = mt76x2u_start,
-	.stop = mt76x2u_stop,
-	.add_interface = mt76x02_add_interface,
-	.remove_interface = mt76x02_remove_interface,
-	.sta_state = mt76_sta_state,
-	.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
-	.set_key = mt76x02_set_key,
-	.ampdu_action = mt76x02_ampdu_action,
-	.config = mt76x2u_config,
-	.wake_tx_queue = mt76_wake_tx_queue,
-	.bss_info_changed = mt76x02_bss_info_changed,
-	.configure_filter = mt76x02_configure_filter,
-	.conf_tx = mt76x02_conf_tx,
-	.sw_scan_start = mt76_sw_scan,
-	.sw_scan_complete = mt76x02_sw_scan_complete,
-	.sta_rate_tbl_update = mt76x02_sta_rate_tbl_update,
-	.get_txpower = mt76_get_txpower,
-	.get_survey = mt76_get_survey,
-	.set_tim = mt76_set_tim,
-	.release_buffered_frames = mt76_release_buffered_frames,
-	.get_antenna = mt76_get_antenna,
-	.set_sar_specs = mt76x2_set_sar_specs,
-};
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_mcu.c
deleted file mode 100644
index dd22d8a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_mcu.c
+++ /dev/null
@@ -1,255 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <linux/firmware.h>
-
-#include "mt76x2u.h"
-#include "eeprom.h"
-#include "../mt76x02_usb.h"
-
-#define MT_CMD_HDR_LEN			4
-
-#define MCU_FW_URB_MAX_PAYLOAD		0x3900
-#define MCU_ROM_PATCH_MAX_PAYLOAD	2048
-
-#define MT76U_MCU_ILM_OFFSET		0x80000
-#define MT76U_MCU_DLM_OFFSET		0x110000
-#define MT76U_MCU_ROM_PATCH_OFFSET	0x90000
-
-static void mt76x2u_mcu_load_ivb(struct mt76x02_dev *dev)
-{
-	mt76u_vendor_request(&dev->mt76, MT_VEND_DEV_MODE,
-			     USB_DIR_OUT | USB_TYPE_VENDOR,
-			     0x12, 0, NULL, 0);
-}
-
-static void mt76x2u_mcu_enable_patch(struct mt76x02_dev *dev)
-{
-	struct mt76_usb *usb = &dev->mt76.usb;
-	static const u8 data[] = {
-		0x6f, 0xfc, 0x08, 0x01,
-		0x20, 0x04, 0x00, 0x00,
-		0x00, 0x09, 0x00,
-	};
-
-	memcpy(usb->data, data, sizeof(data));
-	mt76u_vendor_request(&dev->mt76, MT_VEND_DEV_MODE,
-			     USB_DIR_OUT | USB_TYPE_CLASS,
-			     0x12, 0, usb->data, sizeof(data));
-}
-
-static void mt76x2u_mcu_reset_wmt(struct mt76x02_dev *dev)
-{
-	struct mt76_usb *usb = &dev->mt76.usb;
-	u8 data[] = {
-		0x6f, 0xfc, 0x05, 0x01,
-		0x07, 0x01, 0x00, 0x04
-	};
-
-	memcpy(usb->data, data, sizeof(data));
-	mt76u_vendor_request(&dev->mt76, MT_VEND_DEV_MODE,
-			     USB_DIR_OUT | USB_TYPE_CLASS,
-			     0x12, 0, usb->data, sizeof(data));
-}
-
-static int mt76x2u_mcu_load_rom_patch(struct mt76x02_dev *dev)
-{
-	bool rom_protect = !is_mt7612(dev);
-	struct mt76x02_patch_header *hdr;
-	u32 val, patch_mask, patch_reg;
-	const struct firmware *fw;
-	int err;
-
-	if (rom_protect &&
-	    !mt76_poll_msec(dev, MT_MCU_SEMAPHORE_03, 1, 1, 600)) {
-		dev_err(dev->mt76.dev,
-			"could not get hardware semaphore for ROM PATCH\n");
-		return -ETIMEDOUT;
-	}
-
-	if (mt76xx_rev(dev) >= MT76XX_REV_E3) {
-		patch_mask = BIT(0);
-		patch_reg = MT_MCU_CLOCK_CTL;
-	} else {
-		patch_mask = BIT(1);
-		patch_reg = MT_MCU_COM_REG0;
-	}
-
-	if (rom_protect && (mt76_rr(dev, patch_reg) & patch_mask)) {
-		dev_info(dev->mt76.dev, "ROM patch already applied\n");
-		return 0;
-	}
-
-	err = request_firmware(&fw, MT7662_ROM_PATCH, dev->mt76.dev);
-	if (err < 0)
-		return err;
-
-	if (!fw || !fw->data || fw->size <= sizeof(*hdr)) {
-		dev_err(dev->mt76.dev, "failed to load firmware\n");
-		err = -EIO;
-		goto out;
-	}
-
-	hdr = (struct mt76x02_patch_header *)fw->data;
-	dev_info(dev->mt76.dev, "ROM patch build: %.15s\n", hdr->build_time);
-
-	/* enable USB_DMA_CFG */
-	val = MT_USB_DMA_CFG_RX_BULK_EN |
-	      MT_USB_DMA_CFG_TX_BULK_EN |
-	      FIELD_PREP(MT_USB_DMA_CFG_RX_BULK_AGG_TOUT, 0x20);
-	mt76_wr(dev, MT_VEND_ADDR(CFG, MT_USB_U3DMA_CFG), val);
-
-	/* vendor reset */
-	mt76x02u_mcu_fw_reset(dev);
-	usleep_range(5000, 10000);
-
-	/* enable FCE to send in-band cmd */
-	mt76_wr(dev, MT_FCE_PSE_CTRL, 0x1);
-	/* FCE tx_fs_base_ptr */
-	mt76_wr(dev, MT_TX_CPU_FROM_FCE_BASE_PTR, 0x400230);
-	/* FCE tx_fs_max_cnt */
-	mt76_wr(dev, MT_TX_CPU_FROM_FCE_MAX_COUNT, 0x1);
-	/* FCE pdma enable */
-	mt76_wr(dev, MT_FCE_PDMA_GLOBAL_CONF, 0x44);
-	/* FCE skip_fs_en */
-	mt76_wr(dev, MT_FCE_SKIP_FS, 0x3);
-
-	err = mt76x02u_mcu_fw_send_data(dev, fw->data + sizeof(*hdr),
-					fw->size - sizeof(*hdr),
-					MCU_ROM_PATCH_MAX_PAYLOAD,
-					MT76U_MCU_ROM_PATCH_OFFSET);
-	if (err < 0) {
-		err = -EIO;
-		goto out;
-	}
-
-	mt76x2u_mcu_enable_patch(dev);
-	mt76x2u_mcu_reset_wmt(dev);
-	mdelay(20);
-
-	if (!mt76_poll_msec(dev, patch_reg, patch_mask, patch_mask, 100)) {
-		dev_err(dev->mt76.dev, "failed to load ROM patch\n");
-		err = -ETIMEDOUT;
-	}
-
-out:
-	if (rom_protect)
-		mt76_wr(dev, MT_MCU_SEMAPHORE_03, 1);
-	release_firmware(fw);
-	return err;
-}
-
-static int mt76x2u_mcu_load_firmware(struct mt76x02_dev *dev)
-{
-	u32 val, dlm_offset = MT76U_MCU_DLM_OFFSET;
-	const struct mt76x02_fw_header *hdr;
-	int err, len, ilm_len, dlm_len;
-	const struct firmware *fw;
-
-	err = request_firmware(&fw, MT7662_FIRMWARE, dev->mt76.dev);
-	if (err < 0)
-		return err;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
-		err = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const struct mt76x02_fw_header *)fw->data;
-	ilm_len = le32_to_cpu(hdr->ilm_len);
-	dlm_len = le32_to_cpu(hdr->dlm_len);
-	len = sizeof(*hdr) + ilm_len + dlm_len;
-	if (fw->size != len) {
-		err = -EINVAL;
-		goto out;
-	}
-
-	val = le16_to_cpu(hdr->fw_ver);
-	dev_info(dev->mt76.dev, "Firmware Version: %d.%d.%02d\n",
-		 (val >> 12) & 0xf, (val >> 8) & 0xf, val & 0xf);
-
-	val = le16_to_cpu(hdr->build_ver);
-	dev_info(dev->mt76.dev, "Build: %x\n", val);
-	dev_info(dev->mt76.dev, "Build Time: %.16s\n", hdr->build_time);
-
-	/* vendor reset */
-	mt76x02u_mcu_fw_reset(dev);
-	usleep_range(5000, 10000);
-
-	/* enable USB_DMA_CFG */
-	val = MT_USB_DMA_CFG_RX_BULK_EN |
-	      MT_USB_DMA_CFG_TX_BULK_EN |
-	      FIELD_PREP(MT_USB_DMA_CFG_RX_BULK_AGG_TOUT, 0x20);
-	mt76_wr(dev, MT_VEND_ADDR(CFG, MT_USB_U3DMA_CFG), val);
-	/* enable FCE to send in-band cmd */
-	mt76_wr(dev, MT_FCE_PSE_CTRL, 0x1);
-	/* FCE tx_fs_base_ptr */
-	mt76_wr(dev, MT_TX_CPU_FROM_FCE_BASE_PTR, 0x400230);
-	/* FCE tx_fs_max_cnt */
-	mt76_wr(dev, MT_TX_CPU_FROM_FCE_MAX_COUNT, 0x1);
-	/* FCE pdma enable */
-	mt76_wr(dev, MT_FCE_PDMA_GLOBAL_CONF, 0x44);
-	/* FCE skip_fs_en */
-	mt76_wr(dev, MT_FCE_SKIP_FS, 0x3);
-
-	/* load ILM */
-	err = mt76x02u_mcu_fw_send_data(dev, fw->data + sizeof(*hdr),
-					ilm_len, MCU_FW_URB_MAX_PAYLOAD,
-					MT76U_MCU_ILM_OFFSET);
-	if (err < 0) {
-		err = -EIO;
-		goto out;
-	}
-
-	/* load DLM */
-	if (mt76xx_rev(dev) >= MT76XX_REV_E3)
-		dlm_offset += 0x800;
-	err = mt76x02u_mcu_fw_send_data(dev, fw->data + sizeof(*hdr) + ilm_len,
-					dlm_len, MCU_FW_URB_MAX_PAYLOAD,
-					dlm_offset);
-	if (err < 0) {
-		err = -EIO;
-		goto out;
-	}
-
-	mt76x2u_mcu_load_ivb(dev);
-	if (!mt76_poll_msec(dev, MT_MCU_COM_REG0, 1, 1, 100)) {
-		dev_err(dev->mt76.dev, "firmware failed to start\n");
-		err = -ETIMEDOUT;
-		goto out;
-	}
-
-	mt76_set(dev, MT_MCU_COM_REG0, BIT(1));
-	/* enable FCE to send in-band cmd */
-	mt76_wr(dev, MT_FCE_PSE_CTRL, 0x1);
-	mt76x02_set_ethtool_fwver(dev, hdr);
-	dev_dbg(dev->mt76.dev, "firmware running\n");
-
-out:
-	release_firmware(fw);
-	return err;
-}
-
-int mt76x2u_mcu_fw_init(struct mt76x02_dev *dev)
-{
-	int err;
-
-	err = mt76x2u_mcu_load_rom_patch(dev);
-	if (err < 0)
-		return err;
-
-	return mt76x2u_mcu_load_firmware(dev);
-}
-
-int mt76x2u_mcu_init(struct mt76x02_dev *dev)
-{
-	int err;
-
-	err = mt76x02_mcu_function_select(dev, Q_SELECT, 1);
-	if (err < 0)
-		return err;
-
-	return mt76x02_mcu_set_radio_state(dev, true);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_phy.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_phy.c
deleted file mode 100644
index a04a98f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt76x2/usb_phy.c
+++ /dev/null
@@ -1,201 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include "mt76x2u.h"
-#include "eeprom.h"
-#include "../mt76x02_phy.h"
-
-static void
-mt76x2u_phy_channel_calibrate(struct mt76x02_dev *dev, bool mac_stopped)
-{
-	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
-	bool is_5ghz = chan->band == NL80211_BAND_5GHZ;
-
-	if (dev->cal.channel_cal_done)
-		return;
-
-	if (mt76x2_channel_silent(dev))
-		return;
-
-	if (!mac_stopped)
-		mt76x2u_mac_stop(dev);
-
-	if (is_5ghz)
-		mt76x02_mcu_calibrate(dev, MCU_CAL_LC, 0);
-
-	mt76x02_mcu_calibrate(dev, MCU_CAL_TX_LOFT, is_5ghz);
-	mt76x02_mcu_calibrate(dev, MCU_CAL_TXIQ, is_5ghz);
-	mt76x02_mcu_calibrate(dev, MCU_CAL_RXIQC_FI, is_5ghz);
-	mt76x02_mcu_calibrate(dev, MCU_CAL_TEMP_SENSOR, 0);
-	mt76x02_mcu_calibrate(dev, MCU_CAL_TX_SHAPING, 0);
-
-	if (!mac_stopped)
-		mt76x2_mac_resume(dev);
-	mt76x2_apply_gain_adj(dev);
-	mt76x02_edcca_init(dev);
-
-	dev->cal.channel_cal_done = true;
-}
-
-void mt76x2u_phy_calibrate(struct work_struct *work)
-{
-	struct mt76x02_dev *dev;
-
-	dev = container_of(work, struct mt76x02_dev, cal_work.work);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt76x2u_phy_channel_calibrate(dev, false);
-	mt76x2_phy_tssi_compensate(dev);
-	mt76x2_phy_update_channel_gain(dev);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->cal_work,
-				     MT_CALIBRATE_INTERVAL);
-}
-
-int mt76x2u_phy_set_channel(struct mt76x02_dev *dev,
-			    struct cfg80211_chan_def *chandef)
-{
-	u32 ext_cca_chan[4] = {
-		[0] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(0)),
-		[1] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(1)),
-		[2] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(2)),
-		[3] = FIELD_PREP(MT_EXT_CCA_CFG_CCA0, 3) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA1, 2) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA2, 1) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA3, 0) |
-		      FIELD_PREP(MT_EXT_CCA_CFG_CCA_MASK, BIT(3)),
-	};
-	bool scan = test_bit(MT76_SCANNING, &dev->mphy.state);
-	struct ieee80211_channel *chan = chandef->chan;
-	u8 channel = chan->hw_value, bw, bw_index;
-	int ch_group_index, freq, freq1, ret;
-
-	dev->cal.channel_cal_done = false;
-	freq = chandef->chan->center_freq;
-	freq1 = chandef->center_freq1;
-
-	switch (chandef->width) {
-	case NL80211_CHAN_WIDTH_40:
-		bw = 1;
-		if (freq1 > freq) {
-			bw_index = 1;
-			ch_group_index = 0;
-		} else {
-			bw_index = 3;
-			ch_group_index = 1;
-		}
-		channel += 2 - ch_group_index * 4;
-		break;
-	case NL80211_CHAN_WIDTH_80:
-		ch_group_index = (freq - freq1 + 30) / 20;
-		if (WARN_ON(ch_group_index < 0 || ch_group_index > 3))
-			ch_group_index = 0;
-		bw = 2;
-		bw_index = ch_group_index;
-		channel += 6 - ch_group_index * 4;
-		break;
-	default:
-		bw = 0;
-		bw_index = 0;
-		ch_group_index = 0;
-		break;
-	}
-
-	mt76x2_read_rx_gain(dev);
-	mt76x2_phy_set_txpower_regs(dev, chan->band);
-	mt76x2_configure_tx_delay(dev, chan->band, bw);
-	mt76x2_phy_set_txpower(dev);
-
-	mt76x02_phy_set_band(dev, chan->band, ch_group_index & 1);
-	mt76x02_phy_set_bw(dev, chandef->width, ch_group_index);
-
-	mt76_rmw(dev, MT_EXT_CCA_CFG,
-		 (MT_EXT_CCA_CFG_CCA0 |
-		  MT_EXT_CCA_CFG_CCA1 |
-		  MT_EXT_CCA_CFG_CCA2 |
-		  MT_EXT_CCA_CFG_CCA3 |
-		  MT_EXT_CCA_CFG_CCA_MASK),
-		 ext_cca_chan[ch_group_index]);
-
-	ret = mt76x2_mcu_set_channel(dev, channel, bw, bw_index, scan);
-	if (ret)
-		return ret;
-
-	mt76x2_mcu_init_gain(dev, channel, dev->cal.rx.mcu_gain, true);
-
-	/* Enable LDPC Rx */
-	if (mt76xx_rev(dev) >= MT76XX_REV_E3)
-		mt76_set(dev, MT_BBP(RXO, 13), BIT(10));
-
-	if (!dev->cal.init_cal_done) {
-		u8 val = mt76x02_eeprom_get(dev, MT_EE_BT_RCAL_RESULT);
-
-		if (val != 0xff)
-			mt76x02_mcu_calibrate(dev, MCU_CAL_R, 0);
-	}
-
-	mt76x02_mcu_calibrate(dev, MCU_CAL_RXDCOC, channel);
-
-	/* Rx LPF calibration */
-	if (!dev->cal.init_cal_done)
-		mt76x02_mcu_calibrate(dev, MCU_CAL_RC, 0);
-	dev->cal.init_cal_done = true;
-
-	mt76_wr(dev, MT_BBP(AGC, 61), 0xff64a4e2);
-	mt76_wr(dev, MT_BBP(AGC, 7), 0x08081010);
-	mt76_wr(dev, MT_BBP(AGC, 11), 0x00000404);
-	mt76_wr(dev, MT_BBP(AGC, 2), 0x00007070);
-	mt76_wr(dev, MT_TXOP_CTRL_CFG, 0X04101b3f);
-
-	mt76_set(dev, MT_BBP(TXO, 4), BIT(25));
-	mt76_set(dev, MT_BBP(RXO, 13), BIT(8));
-
-	if (scan)
-		return 0;
-
-	mt76x2u_phy_channel_calibrate(dev, true);
-	mt76x02_init_agc_gain(dev);
-
-	if (mt76x2_tssi_enabled(dev)) {
-		/* init default values for temp compensation */
-		mt76_rmw_field(dev, MT_TX_ALC_CFG_1, MT_TX_ALC_CFG_1_TEMP_COMP,
-			       0x38);
-		mt76_rmw_field(dev, MT_TX_ALC_CFG_2, MT_TX_ALC_CFG_2_TEMP_COMP,
-			       0x38);
-
-		/* init tssi calibration */
-		if (!mt76x2_channel_silent(dev)) {
-			struct ieee80211_channel *chan;
-			u32 flag = 0;
-
-			chan = dev->mphy.chandef.chan;
-			if (chan->band == NL80211_BAND_5GHZ)
-				flag |= BIT(0);
-			if (mt76x02_ext_pa_enabled(dev, chan->band))
-				flag |= BIT(8);
-			mt76x02_mcu_calibrate(dev, MCU_CAL_TSSI, flag);
-			dev->cal.tssi_cal_done = true;
-		}
-	}
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->cal_work,
-				     MT_CALIBRATE_INTERVAL);
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/Kconfig b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/Kconfig
deleted file mode 100644
index 856d54a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/Kconfig
+++ /dev/null
@@ -1,23 +0,0 @@
-# SPDX-License-Identifier: ISC
-config MT7915E
-	tristate "MediaTek MT7915E (PCIe) support"
-	select MT76_CONNAC_LIB
-	depends on MAC80211
-	depends on PCI
-	help
-	  This adds support for MT7915-based wireless PCIe devices,
-	  which support concurrent dual-band operation at both 5GHz
-	  and 2.4GHz IEEE 802.11ax 4x4:4SS 1024-QAM, 160MHz channels,
-	  OFDMA, spatial reuse and dual carrier modulation.
-
-	  To compile this driver as a module, choose M here.
-
-config MT7986_WMAC
-	bool "MT7986 (SoC) WMAC support"
-	depends on MT7915E
-	depends on ARCH_MEDIATEK || COMPILE_TEST
-	select REGMAP
-	help
-	  This adds support for the built-in WMAC on MT7986 SoC device
-	  which has the same feature set as a MT7915, but enables 6E
-	  support.
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/Makefile b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/Makefile
deleted file mode 100644
index b794ceb..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-# SPDX-License-Identifier: ISC
-
-obj-$(CONFIG_MT7915E) += mt7915e.o
-
-mt7915e-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o \
-	     debugfs.o mmio.o
-
-mt7915e-$(CONFIG_NL80211_TESTMODE) += testmode.o
-mt7915e-$(CONFIG_MT7986_WMAC) += soc.o
\ No newline at end of file
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/debugfs.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/debugfs.c
deleted file mode 100644
index b95c81d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/debugfs.c
+++ /dev/null
@@ -1,1188 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/relay.h>
-#include "mt7915.h"
-#include "eeprom.h"
-#include "mcu.h"
-#include "mac.h"
-
-#define FW_BIN_LOG_MAGIC	0x44e98caf
-
-/** global debugfs **/
-
-struct hw_queue_map {
-	const char *name;
-	u8 index;
-	u8 pid;
-	u8 qid;
-};
-
-static int
-mt7915_implicit_txbf_set(void *data, u64 val)
-{
-	struct mt7915_dev *dev = data;
-
-	/* The existing connected stations shall reconnect to apply
-	 * new implicit txbf configuration.
-	 */
-	dev->ibf = !!val;
-
-	return mt7915_mcu_set_txbf(dev, MT_BF_TYPE_UPDATE);
-}
-
-static int
-mt7915_implicit_txbf_get(void *data, u64 *val)
-{
-	struct mt7915_dev *dev = data;
-
-	*val = dev->ibf;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_implicit_txbf, mt7915_implicit_txbf_get,
-			 mt7915_implicit_txbf_set, "%lld\n");
-
-/* test knob of system error recovery */
-static ssize_t
-mt7915_fw_ser_set(struct file *file, const char __user *user_buf,
-		  size_t count, loff_t *ppos)
-{
-	struct mt7915_phy *phy = file->private_data;
-	struct mt7915_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-	char buf[16];
-	int ret = 0;
-	u16 val;
-
-	if (count >= sizeof(buf))
-		return -EINVAL;
-
-	if (copy_from_user(buf, user_buf, count))
-		return -EFAULT;
-
-	if (count && buf[count - 1] == '\n')
-		buf[count - 1] = '\0';
-	else
-		buf[count] = '\0';
-
-	if (kstrtou16(buf, 0, &val))
-		return -EINVAL;
-
-	switch (val) {
-	case SER_QUERY:
-		/* grab firmware SER stats */
-		ret = mt7915_mcu_set_ser(dev, 0, 0, ext_phy);
-		break;
-	case SER_SET_RECOVER_L1:
-	case SER_SET_RECOVER_L2:
-	case SER_SET_RECOVER_L3_RX_ABORT:
-	case SER_SET_RECOVER_L3_TX_ABORT:
-	case SER_SET_RECOVER_L3_TX_DISABLE:
-	case SER_SET_RECOVER_L3_BF:
-		ret = mt7915_mcu_set_ser(dev, SER_ENABLE, BIT(val), ext_phy);
-		if (ret)
-			return ret;
-
-		ret = mt7915_mcu_set_ser(dev, SER_RECOVER, val, ext_phy);
-		break;
-	default:
-		break;
-	}
-
-	return ret ? ret : count;
-}
-
-static ssize_t
-mt7915_fw_ser_get(struct file *file, char __user *user_buf,
-		  size_t count, loff_t *ppos)
-{
-	struct mt7915_phy *phy = file->private_data;
-	struct mt7915_dev *dev = phy->dev;
-	char *buff;
-	int desc = 0;
-	ssize_t ret;
-	static const size_t bufsz = 400;
-
-	buff = kmalloc(bufsz, GFP_KERNEL);
-	if (!buff)
-		return -ENOMEM;
-
-	desc += scnprintf(buff + desc, bufsz - desc,
-			  "::E  R , SER_STATUS        = 0x%08x\n",
-			  mt76_rr(dev, MT_SWDEF_SER_STATS));
-	desc += scnprintf(buff + desc, bufsz - desc,
-			  "::E  R , SER_PLE_ERR       = 0x%08x\n",
-			  mt76_rr(dev, MT_SWDEF_PLE_STATS));
-	desc += scnprintf(buff + desc, bufsz - desc,
-			  "::E  R , SER_PLE_ERR_1     = 0x%08x\n",
-			  mt76_rr(dev, MT_SWDEF_PLE1_STATS));
-	desc += scnprintf(buff + desc, bufsz - desc,
-			  "::E  R , SER_PLE_ERR_AMSDU = 0x%08x\n",
-			  mt76_rr(dev, MT_SWDEF_PLE_AMSDU_STATS));
-	desc += scnprintf(buff + desc, bufsz - desc,
-			  "::E  R , SER_PSE_ERR       = 0x%08x\n",
-			  mt76_rr(dev, MT_SWDEF_PSE_STATS));
-	desc += scnprintf(buff + desc, bufsz - desc,
-			  "::E  R , SER_PSE_ERR_1     = 0x%08x\n",
-			  mt76_rr(dev, MT_SWDEF_PSE1_STATS));
-	desc += scnprintf(buff + desc, bufsz - desc,
-			  "::E  R , SER_LMAC_WISR6_B0 = 0x%08x\n",
-			  mt76_rr(dev, MT_SWDEF_LAMC_WISR6_BN0_STATS));
-	desc += scnprintf(buff + desc, bufsz - desc,
-			  "::E  R , SER_LMAC_WISR6_B1 = 0x%08x\n",
-			  mt76_rr(dev, MT_SWDEF_LAMC_WISR6_BN1_STATS));
-	desc += scnprintf(buff + desc, bufsz - desc,
-			  "::E  R , SER_LMAC_WISR7_B0 = 0x%08x\n",
-			  mt76_rr(dev, MT_SWDEF_LAMC_WISR7_BN0_STATS));
-	desc += scnprintf(buff + desc, bufsz - desc,
-			  "::E  R , SER_LMAC_WISR7_B1 = 0x%08x\n",
-			  mt76_rr(dev, MT_SWDEF_LAMC_WISR7_BN1_STATS));
-
-	ret = simple_read_from_buffer(user_buf, count, ppos, buff, desc);
-	kfree(buff);
-	return ret;
-}
-
-static const struct file_operations mt7915_fw_ser_ops = {
-	.write = mt7915_fw_ser_set,
-	.read = mt7915_fw_ser_get,
-	.open = simple_open,
-	.llseek = default_llseek,
-};
-
-static int
-mt7915_radar_trigger(void *data, u64 val)
-{
-	struct mt7915_dev *dev = data;
-
-	if (val > MT_RX_SEL2)
-		return -EINVAL;
-
-	return mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_RADAR_EMULATE,
-				       val, 0, 0);
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_radar_trigger, NULL,
-			 mt7915_radar_trigger, "%lld\n");
-
-static int
-mt7915_muru_debug_set(void *data, u64 val)
-{
-	struct mt7915_dev *dev = data;
-
-	dev->muru_debug = val;
-	mt7915_mcu_muru_debug_set(dev, dev->muru_debug);
-
-	return 0;
-}
-
-static int
-mt7915_muru_debug_get(void *data, u64 *val)
-{
-	struct mt7915_dev *dev = data;
-
-	*val = dev->muru_debug;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_muru_debug, mt7915_muru_debug_get,
-			 mt7915_muru_debug_set, "%lld\n");
-
-static int mt7915_muru_stats_show(struct seq_file *file, void *data)
-{
-	struct mt7915_phy *phy = file->private;
-	struct mt7915_dev *dev = phy->dev;
-	struct mt7915_mcu_muru_stats mu_stats = {};
-	static const char * const dl_non_he_type[] = {
-		"CCK", "OFDM", "HT MIX", "HT GF",
-		"VHT SU", "VHT 2MU", "VHT 3MU", "VHT 4MU"
-	};
-	static const char * const dl_he_type[] = {
-		"HE SU", "HE EXT", "HE 2MU", "HE 3MU", "HE 4MU",
-		"HE 2RU", "HE 3RU", "HE 4RU", "HE 5-8RU", "HE 9-16RU",
-		"HE >16RU"
-	};
-	static const char * const ul_he_type[] = {
-		"HE 2MU", "HE 3MU", "HE 4MU", "HE SU", "HE 2RU",
-		"HE 3RU", "HE 4RU", "HE 5-8RU", "HE 9-16RU", "HE >16RU"
-	};
-	int ret, i;
-	u64 total_ppdu_cnt, sub_total_cnt;
-
-	if (!dev->muru_debug) {
-		seq_puts(file, "Please enable muru_debug first.\n");
-		return 0;
-	}
-
-	mutex_lock(&dev->mt76.mutex);
-
-	ret = mt7915_mcu_muru_debug_get(phy, &mu_stats);
-	if (ret)
-		goto exit;
-
-	/* Non-HE Downlink*/
-	seq_puts(file, "[Non-HE]\nDownlink\nData Type:  ");
-
-	for (i = 0; i < 5; i++)
-		seq_printf(file, "%8s | ", dl_non_he_type[i]);
-
-#define __dl_u32(s)     le32_to_cpu(mu_stats.dl.s)
-	seq_puts(file, "\nTotal Count:");
-	seq_printf(file, "%8u | %8u | %8u | %8u | %8u | ",
-		   __dl_u32(cck_cnt),
-		   __dl_u32(ofdm_cnt),
-		   __dl_u32(htmix_cnt),
-		   __dl_u32(htgf_cnt),
-		   __dl_u32(vht_su_cnt));
-
-	seq_puts(file, "\nDownlink MU-MIMO\nData Type:  ");
-
-	for (i = 5; i < 8; i++)
-		seq_printf(file, "%8s | ", dl_non_he_type[i]);
-
-	seq_puts(file, "\nTotal Count:");
-	seq_printf(file, "%8u | %8u | %8u | ",
-		   __dl_u32(vht_2mu_cnt),
-		   __dl_u32(vht_3mu_cnt),
-		   __dl_u32(vht_4mu_cnt));
-
-	sub_total_cnt = __dl_u32(vht_2mu_cnt) +
-		__dl_u32(vht_3mu_cnt) +
-		__dl_u32(vht_4mu_cnt);
-
-	seq_printf(file, "\nTotal non-HE MU-MIMO DL PPDU count: %lld",
-		   sub_total_cnt);
-
-	total_ppdu_cnt = sub_total_cnt +
-		__dl_u32(cck_cnt) +
-		__dl_u32(ofdm_cnt) +
-		__dl_u32(htmix_cnt) +
-		__dl_u32(htgf_cnt) +
-		__dl_u32(vht_su_cnt);
-
-	seq_printf(file, "\nAll non-HE DL PPDU count: %lld", total_ppdu_cnt);
-
-	/* HE Downlink */
-	seq_puts(file, "\n\n[HE]\nDownlink\nData Type:  ");
-
-	for (i = 0; i < 2; i++)
-		seq_printf(file, "%8s | ", dl_he_type[i]);
-
-	seq_puts(file, "\nTotal Count:");
-	seq_printf(file, "%8u | %8u | ",
-		   __dl_u32(he_su_cnt),
-		   __dl_u32(he_ext_su_cnt));
-
-	seq_puts(file, "\nDownlink MU-MIMO\nData Type:  ");
-
-	for (i = 2; i < 5; i++)
-		seq_printf(file, "%8s | ", dl_he_type[i]);
-
-	seq_puts(file, "\nTotal Count:");
-	seq_printf(file, "%8u | %8u | %8u | ",
-		   __dl_u32(he_2mu_cnt),
-		   __dl_u32(he_3mu_cnt),
-		   __dl_u32(he_4mu_cnt));
-
-	seq_puts(file, "\nDownlink OFDMA\nData Type:  ");
-
-	for (i = 5; i < 11; i++)
-		seq_printf(file, "%8s | ", dl_he_type[i]);
-
-	seq_puts(file, "\nTotal Count:");
-	seq_printf(file, "%8u | %8u | %8u | %8u | %9u | %8u | ",
-		   __dl_u32(he_2ru_cnt),
-		   __dl_u32(he_3ru_cnt),
-		   __dl_u32(he_4ru_cnt),
-		   __dl_u32(he_5to8ru_cnt),
-		   __dl_u32(he_9to16ru_cnt),
-		   __dl_u32(he_gtr16ru_cnt));
-
-	sub_total_cnt = __dl_u32(he_2mu_cnt) +
-		__dl_u32(he_3mu_cnt) +
-		__dl_u32(he_4mu_cnt);
-	total_ppdu_cnt = sub_total_cnt;
-
-	seq_printf(file, "\nTotal HE MU-MIMO DL PPDU count: %lld",
-		   sub_total_cnt);
-
-	sub_total_cnt = __dl_u32(he_2ru_cnt) +
-		__dl_u32(he_3ru_cnt) +
-		__dl_u32(he_4ru_cnt) +
-		__dl_u32(he_5to8ru_cnt) +
-		__dl_u32(he_9to16ru_cnt) +
-		__dl_u32(he_gtr16ru_cnt);
-	total_ppdu_cnt += sub_total_cnt;
-
-	seq_printf(file, "\nTotal HE OFDMA DL PPDU count: %lld",
-		   sub_total_cnt);
-
-	total_ppdu_cnt += __dl_u32(he_su_cnt) +
-		__dl_u32(he_ext_su_cnt);
-
-	seq_printf(file, "\nAll HE DL PPDU count: %lld", total_ppdu_cnt);
-#undef __dl_u32
-
-	/* HE Uplink */
-	seq_puts(file, "\n\nUplink");
-	seq_puts(file, "\nTrigger-based Uplink MU-MIMO\nData Type:  ");
-
-	for (i = 0; i < 3; i++)
-		seq_printf(file, "%8s | ", ul_he_type[i]);
-
-#define __ul_u32(s)     le32_to_cpu(mu_stats.ul.s)
-	seq_puts(file, "\nTotal Count:");
-	seq_printf(file, "%8u | %8u | %8u | ",
-		   __ul_u32(hetrig_2mu_cnt),
-		   __ul_u32(hetrig_3mu_cnt),
-		   __ul_u32(hetrig_4mu_cnt));
-
-	seq_puts(file, "\nTrigger-based Uplink OFDMA\nData Type:  ");
-
-	for (i = 3; i < 10; i++)
-		seq_printf(file, "%8s | ", ul_he_type[i]);
-
-	seq_puts(file, "\nTotal Count:");
-	seq_printf(file, "%8u | %8u | %8u | %8u | %8u | %9u |  %7u | ",
-		   __ul_u32(hetrig_su_cnt),
-		   __ul_u32(hetrig_2ru_cnt),
-		   __ul_u32(hetrig_3ru_cnt),
-		   __ul_u32(hetrig_4ru_cnt),
-		   __ul_u32(hetrig_5to8ru_cnt),
-		   __ul_u32(hetrig_9to16ru_cnt),
-		   __ul_u32(hetrig_gtr16ru_cnt));
-
-	sub_total_cnt = __ul_u32(hetrig_2mu_cnt) +
-		__ul_u32(hetrig_3mu_cnt) +
-		__ul_u32(hetrig_4mu_cnt);
-	total_ppdu_cnt = sub_total_cnt;
-
-	seq_printf(file, "\nTotal HE MU-MIMO UL TB PPDU count: %lld",
-		   sub_total_cnt);
-
-	sub_total_cnt = __ul_u32(hetrig_2ru_cnt) +
-		__ul_u32(hetrig_3ru_cnt) +
-		__ul_u32(hetrig_4ru_cnt) +
-		__ul_u32(hetrig_5to8ru_cnt) +
-		__ul_u32(hetrig_9to16ru_cnt) +
-		__ul_u32(hetrig_gtr16ru_cnt);
-	total_ppdu_cnt += sub_total_cnt;
-
-	seq_printf(file, "\nTotal HE OFDMA UL TB PPDU count: %lld",
-		   sub_total_cnt);
-
-	total_ppdu_cnt += __ul_u32(hetrig_su_cnt);
-
-	seq_printf(file, "\nAll HE UL TB PPDU count: %lld\n", total_ppdu_cnt);
-#undef __ul_u32
-
-exit:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-DEFINE_SHOW_ATTRIBUTE(mt7915_muru_stats);
-
-static int
-mt7915_rdd_monitor(struct seq_file *s, void *data)
-{
-	struct mt7915_dev *dev = dev_get_drvdata(s->private);
-	struct cfg80211_chan_def *chandef = &dev->rdd2_chandef;
-	const char *bw;
-	int ret = 0;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (!cfg80211_chandef_valid(chandef)) {
-		ret = -EINVAL;
-		goto out;
-	}
-
-	if (!dev->rdd2_phy) {
-		seq_puts(s, "not running\n");
-		goto out;
-	}
-
-	switch (chandef->width) {
-	case NL80211_CHAN_WIDTH_40:
-		bw = "40";
-		break;
-	case NL80211_CHAN_WIDTH_80:
-		bw = "80";
-		break;
-	case NL80211_CHAN_WIDTH_160:
-		bw = "160";
-		break;
-	case NL80211_CHAN_WIDTH_80P80:
-		bw = "80P80";
-		break;
-	default:
-		bw = "20";
-		break;
-	}
-
-	seq_printf(s, "channel %d (%d MHz) width %s MHz center1: %d MHz\n",
-		   chandef->chan->hw_value, chandef->chan->center_freq,
-		   bw, chandef->center_freq1);
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static int
-mt7915_fw_debug_wm_set(void *data, u64 val)
-{
-	struct mt7915_dev *dev = data;
-	enum {
-		DEBUG_TXCMD = 62,
-		DEBUG_CMD_RPT_TX,
-		DEBUG_CMD_RPT_TRIG,
-		DEBUG_SPL,
-		DEBUG_RPT_RX,
-	} debug;
-	bool tx, rx, en;
-	int ret;
-
-	dev->fw.debug_wm = val ? MCU_FW_LOG_TO_HOST : 0;
-
-	if (dev->fw.debug_bin)
-		val = 16;
-	else
-		val = dev->fw.debug_wm;
-
-	tx = dev->fw.debug_wm || (dev->fw.debug_bin & BIT(1));
-	rx = dev->fw.debug_wm || (dev->fw.debug_bin & BIT(2));
-	en = dev->fw.debug_wm || (dev->fw.debug_bin & BIT(0));
-
-	ret = mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, val);
-	if (ret)
-		goto out;
-
-	for (debug = DEBUG_TXCMD; debug <= DEBUG_RPT_RX; debug++) {
-		if (debug == DEBUG_RPT_RX)
-			val = en && rx;
-		else
-			val = en && tx;
-
-		ret = mt7915_mcu_fw_dbg_ctrl(dev, debug, val);
-		if (ret)
-			goto out;
-	}
-
-	/* WM CPU info record control */
-	mt76_clear(dev, MT_CPU_UTIL_CTRL, BIT(0));
-	mt76_wr(dev, MT_DIC_CMD_REG_CMD, BIT(2) | BIT(13) | !dev->fw.debug_wm);
-	mt76_wr(dev, MT_MCU_WM_CIRQ_IRQ_MASK_CLR_ADDR, BIT(5));
-	mt76_wr(dev, MT_MCU_WM_CIRQ_IRQ_SOFT_ADDR, BIT(5));
-
-out:
-	if (ret)
-		dev->fw.debug_wm = 0;
-
-	return ret;
-}
-
-static int
-mt7915_fw_debug_wm_get(void *data, u64 *val)
-{
-	struct mt7915_dev *dev = data;
-
-	*val = dev->fw.debug_wm;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_wm, mt7915_fw_debug_wm_get,
-			 mt7915_fw_debug_wm_set, "%lld\n");
-
-static int
-mt7915_fw_debug_wa_set(void *data, u64 val)
-{
-	struct mt7915_dev *dev = data;
-	int ret;
-
-	dev->fw.debug_wa = val ? MCU_FW_LOG_TO_HOST : 0;
-
-	ret = mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, dev->fw.debug_wa);
-	if (ret)
-		goto out;
-
-	ret = mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),
-				MCU_WA_PARAM_PDMA_RX, !!dev->fw.debug_wa, 0);
-out:
-	if (ret)
-		dev->fw.debug_wa = 0;
-
-	return ret;
-}
-
-static int
-mt7915_fw_debug_wa_get(void *data, u64 *val)
-{
-	struct mt7915_dev *dev = data;
-
-	*val = dev->fw.debug_wa;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_wa, mt7915_fw_debug_wa_get,
-			 mt7915_fw_debug_wa_set, "%lld\n");
-
-static struct dentry *
-create_buf_file_cb(const char *filename, struct dentry *parent, umode_t mode,
-		   struct rchan_buf *buf, int *is_global)
-{
-	struct dentry *f;
-
-	f = debugfs_create_file("fwlog_data", mode, parent, buf,
-				&relay_file_operations);
-	if (IS_ERR(f))
-		return NULL;
-
-	*is_global = 1;
-
-	return f;
-}
-
-static int
-remove_buf_file_cb(struct dentry *f)
-{
-	debugfs_remove(f);
-
-	return 0;
-}
-
-static int
-mt7915_fw_debug_bin_set(void *data, u64 val)
-{
-	static struct rchan_callbacks relay_cb = {
-		.create_buf_file = create_buf_file_cb,
-		.remove_buf_file = remove_buf_file_cb,
-	};
-	struct mt7915_dev *dev = data;
-
-	if (!dev->relay_fwlog)
-		dev->relay_fwlog = relay_open("fwlog_data", dev->debugfs_dir,
-					    1500, 512, &relay_cb, NULL);
-	if (!dev->relay_fwlog)
-		return -ENOMEM;
-
-	dev->fw.debug_bin = val;
-
-	relay_reset(dev->relay_fwlog);
-
-	return mt7915_fw_debug_wm_set(dev, dev->fw.debug_wm);
-}
-
-static int
-mt7915_fw_debug_bin_get(void *data, u64 *val)
-{
-	struct mt7915_dev *dev = data;
-
-	*val = dev->fw.debug_bin;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_bin, mt7915_fw_debug_bin_get,
-			 mt7915_fw_debug_bin_set, "%lld\n");
-
-static int
-mt7915_fw_util_wm_show(struct seq_file *file, void *data)
-{
-	struct mt7915_dev *dev = file->private;
-
-	seq_printf(file, "Program counter: 0x%x\n", mt76_rr(dev, MT_WM_MCU_PC));
-	seq_printf(file, "Exception state: 0x%x\n",
-		   is_mt7915(&dev->mt76) ?
-		   (u32)mt76_get_field(dev, MT_FW_EXCEPTION, GENMASK(15, 8)) :
-		   (u32)mt76_get_field(dev, MT_FW_EXCEPTION, GENMASK(7, 0)));
-
-	if (dev->fw.debug_wm) {
-		seq_printf(file, "Busy: %u%%  Peak busy: %u%%\n",
-			   mt76_rr(dev, MT_CPU_UTIL_BUSY_PCT),
-			   mt76_rr(dev, MT_CPU_UTIL_PEAK_BUSY_PCT));
-		seq_printf(file, "Idle count: %u  Peak idle count: %u\n",
-			   mt76_rr(dev, MT_CPU_UTIL_IDLE_CNT),
-			   mt76_rr(dev, MT_CPU_UTIL_PEAK_IDLE_CNT));
-	}
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7915_fw_util_wm);
-
-static int
-mt7915_fw_util_wa_show(struct seq_file *file, void *data)
-{
-	struct mt7915_dev *dev = file->private;
-
-	seq_printf(file, "Program counter: 0x%x\n", mt76_rr(dev, MT_WA_MCU_PC));
-
-	if (dev->fw.debug_wa)
-		return mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(QUERY),
-					 MCU_WA_PARAM_CPU_UTIL, 0, 0);
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7915_fw_util_wa);
-
-static void
-mt7915_ampdu_stat_read_phy(struct mt7915_phy *phy,
-			   struct seq_file *file)
-{
-	struct mt7915_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-	int bound[15], range[4], i, n;
-
-	/* Tx ampdu stat */
-	for (i = 0; i < ARRAY_SIZE(range); i++)
-		range[i] = mt76_rr(dev, MT_MIB_ARNG(phy->band_idx, i));
-
-	for (i = 0; i < ARRAY_SIZE(bound); i++)
-		bound[i] = MT_MIB_ARNCR_RANGE(range[i / 4], i % 4) + 1;
-
-	seq_printf(file, "\nPhy %d, Phy band %d\n", ext_phy, phy->band_idx);
-
-	seq_printf(file, "Length: %8d | ", bound[0]);
-	for (i = 0; i < ARRAY_SIZE(bound) - 1; i++)
-		seq_printf(file, "%3d -%3d | ",
-			   bound[i] + 1, bound[i + 1]);
-
-	seq_puts(file, "\nCount:  ");
-	n = phy->band_idx ? ARRAY_SIZE(dev->mt76.aggr_stats) / 2 : 0;
-	for (i = 0; i < ARRAY_SIZE(bound); i++)
-		seq_printf(file, "%8d | ", dev->mt76.aggr_stats[i + n]);
-	seq_puts(file, "\n");
-
-	seq_printf(file, "BA miss count: %d\n", phy->mib.ba_miss_cnt);
-}
-
-static void
-mt7915_txbf_stat_read_phy(struct mt7915_phy *phy, struct seq_file *s)
-{
-	static const char * const bw[] = {
-		"BW20", "BW40", "BW80", "BW160"
-	};
-	struct mib_stats *mib = &phy->mib;
-
-	/* Tx Beamformer monitor */
-	seq_puts(s, "\nTx Beamformer applied PPDU counts: ");
-
-	seq_printf(s, "iBF: %d, eBF: %d\n",
-		   mib->tx_bf_ibf_ppdu_cnt,
-		   mib->tx_bf_ebf_ppdu_cnt);
-
-	/* Tx Beamformer Rx feedback monitor */
-	seq_puts(s, "Tx Beamformer Rx feedback statistics: ");
-
-	seq_printf(s, "All: %d, HE: %d, VHT: %d, HT: %d, ",
-		   mib->tx_bf_rx_fb_all_cnt,
-		   mib->tx_bf_rx_fb_he_cnt,
-		   mib->tx_bf_rx_fb_vht_cnt,
-		   mib->tx_bf_rx_fb_ht_cnt);
-
-	seq_printf(s, "%s, NC: %d, NR: %d\n",
-		   bw[mib->tx_bf_rx_fb_bw],
-		   mib->tx_bf_rx_fb_nc_cnt,
-		   mib->tx_bf_rx_fb_nr_cnt);
-
-	/* Tx Beamformee Rx NDPA & Tx feedback report */
-	seq_printf(s, "Tx Beamformee successful feedback frames: %d\n",
-		   mib->tx_bf_fb_cpl_cnt);
-	seq_printf(s, "Tx Beamformee feedback triggered counts: %d\n",
-		   mib->tx_bf_fb_trig_cnt);
-
-	/* Tx SU & MU counters */
-	seq_printf(s, "Tx multi-user Beamforming counts: %d\n",
-		   mib->tx_bf_cnt);
-	seq_printf(s, "Tx multi-user MPDU counts: %d\n", mib->tx_mu_mpdu_cnt);
-	seq_printf(s, "Tx multi-user successful MPDU counts: %d\n",
-		   mib->tx_mu_acked_mpdu_cnt);
-	seq_printf(s, "Tx single-user successful MPDU counts: %d\n",
-		   mib->tx_su_acked_mpdu_cnt);
-
-	seq_puts(s, "\n");
-}
-
-static int
-mt7915_tx_stats_show(struct seq_file *file, void *data)
-{
-	struct mt7915_phy *phy = file->private;
-	struct mt7915_dev *dev = phy->dev;
-	struct mib_stats *mib = &phy->mib;
-	int i;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt7915_ampdu_stat_read_phy(phy, file);
-	mt7915_mac_update_stats(phy);
-	mt7915_txbf_stat_read_phy(phy, file);
-
-	/* Tx amsdu info */
-	seq_puts(file, "Tx MSDU statistics:\n");
-	for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++) {
-		seq_printf(file, "AMSDU pack count of %d MSDU in TXD: %8d ",
-			   i + 1, mib->tx_amsdu[i]);
-		if (mib->tx_amsdu_cnt)
-			seq_printf(file, "(%3d%%)\n",
-				   mib->tx_amsdu[i] * 100 / mib->tx_amsdu_cnt);
-		else
-			seq_puts(file, "\n");
-	}
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7915_tx_stats);
-
-static void
-mt7915_hw_queue_read(struct seq_file *s, u32 size,
-		     const struct hw_queue_map *map)
-{
-	struct mt7915_phy *phy = s->private;
-	struct mt7915_dev *dev = phy->dev;
-	u32 i, val;
-
-	val = mt76_rr(dev, MT_FL_Q_EMPTY);
-	for (i = 0; i < size; i++) {
-		u32 ctrl, head, tail, queued;
-
-		if (val & BIT(map[i].index))
-			continue;
-
-		ctrl = BIT(31) | (map[i].pid << 10) | (map[i].qid << 24);
-		mt76_wr(dev, MT_FL_Q0_CTRL, ctrl);
-
-		head = mt76_get_field(dev, MT_FL_Q2_CTRL,
-				      GENMASK(11, 0));
-		tail = mt76_get_field(dev, MT_FL_Q2_CTRL,
-				      GENMASK(27, 16));
-		queued = mt76_get_field(dev, MT_FL_Q3_CTRL,
-					GENMASK(11, 0));
-
-		seq_printf(s, "\t%s: ", map[i].name);
-		seq_printf(s, "queued:0x%03x head:0x%03x tail:0x%03x\n",
-			   queued, head, tail);
-	}
-}
-
-static void
-mt7915_sta_hw_queue_read(void *data, struct ieee80211_sta *sta)
-{
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct mt7915_dev *dev = msta->vif->phy->dev;
-	struct seq_file *s = data;
-	u8 ac;
-
-	for (ac = 0; ac < 4; ac++) {
-		u32 qlen, ctrl, val;
-		u32 idx = msta->wcid.idx >> 5;
-		u8 offs = msta->wcid.idx & GENMASK(4, 0);
-
-		ctrl = BIT(31) | BIT(11) | (ac << 24);
-		val = mt76_rr(dev, MT_PLE_AC_QEMPTY(ac, idx));
-
-		if (val & BIT(offs))
-			continue;
-
-		mt76_wr(dev, MT_FL_Q0_CTRL, ctrl | msta->wcid.idx);
-		qlen = mt76_get_field(dev, MT_FL_Q3_CTRL,
-				      GENMASK(11, 0));
-		seq_printf(s, "\tSTA %pM wcid %d: AC%d%d queued:%d\n",
-			   sta->addr, msta->wcid.idx,
-			   msta->vif->mt76.wmm_idx, ac, qlen);
-	}
-}
-
-static int
-mt7915_hw_queues_show(struct seq_file *file, void *data)
-{
-	struct mt7915_phy *phy = file->private;
-	struct mt7915_dev *dev = phy->dev;
-	static const struct hw_queue_map ple_queue_map[] = {
-		{ "CPU_Q0",  0,  1, MT_CTX0	      },
-		{ "CPU_Q1",  1,  1, MT_CTX0 + 1	      },
-		{ "CPU_Q2",  2,  1, MT_CTX0 + 2	      },
-		{ "CPU_Q3",  3,  1, MT_CTX0 + 3	      },
-		{ "ALTX_Q0", 8,  2, MT_LMAC_ALTX0     },
-		{ "BMC_Q0",  9,  2, MT_LMAC_BMC0      },
-		{ "BCN_Q0",  10, 2, MT_LMAC_BCN0      },
-		{ "PSMP_Q0", 11, 2, MT_LMAC_PSMP0     },
-		{ "ALTX_Q1", 12, 2, MT_LMAC_ALTX0 + 4 },
-		{ "BMC_Q1",  13, 2, MT_LMAC_BMC0  + 4 },
-		{ "BCN_Q1",  14, 2, MT_LMAC_BCN0  + 4 },
-		{ "PSMP_Q1", 15, 2, MT_LMAC_PSMP0 + 4 },
-	};
-	static const struct hw_queue_map pse_queue_map[] = {
-		{ "CPU Q0",  0,  1, MT_CTX0	      },
-		{ "CPU Q1",  1,  1, MT_CTX0 + 1	      },
-		{ "CPU Q2",  2,  1, MT_CTX0 + 2	      },
-		{ "CPU Q3",  3,  1, MT_CTX0 + 3	      },
-		{ "HIF_Q0",  8,  0, MT_HIF0	      },
-		{ "HIF_Q1",  9,  0, MT_HIF0 + 1	      },
-		{ "HIF_Q2",  10, 0, MT_HIF0 + 2	      },
-		{ "HIF_Q3",  11, 0, MT_HIF0 + 3	      },
-		{ "HIF_Q4",  12, 0, MT_HIF0 + 4	      },
-		{ "HIF_Q5",  13, 0, MT_HIF0 + 5	      },
-		{ "LMAC_Q",  16, 2, 0		      },
-		{ "MDP_TXQ", 17, 2, 1		      },
-		{ "MDP_RXQ", 18, 2, 2		      },
-		{ "SEC_TXQ", 19, 2, 3		      },
-		{ "SEC_RXQ", 20, 2, 4		      },
-	};
-	u32 val, head, tail;
-
-	/* ple queue */
-	val = mt76_rr(dev, MT_PLE_FREEPG_CNT);
-	head = mt76_get_field(dev, MT_PLE_FREEPG_HEAD_TAIL, GENMASK(11, 0));
-	tail = mt76_get_field(dev, MT_PLE_FREEPG_HEAD_TAIL, GENMASK(27, 16));
-	seq_puts(file, "PLE page info:\n");
-	seq_printf(file,
-		   "\tTotal free page: 0x%08x head: 0x%03x tail: 0x%03x\n",
-		   val, head, tail);
-
-	val = mt76_rr(dev, MT_PLE_PG_HIF_GROUP);
-	head = mt76_get_field(dev, MT_PLE_HIF_PG_INFO, GENMASK(11, 0));
-	tail = mt76_get_field(dev, MT_PLE_HIF_PG_INFO, GENMASK(27, 16));
-	seq_printf(file, "\tHIF free page: 0x%03x res: 0x%03x used: 0x%03x\n",
-		   val, head, tail);
-
-	seq_puts(file, "PLE non-empty queue info:\n");
-	mt7915_hw_queue_read(file, ARRAY_SIZE(ple_queue_map),
-			     &ple_queue_map[0]);
-
-	/* iterate per-sta ple queue */
-	ieee80211_iterate_stations_atomic(phy->mt76->hw,
-					  mt7915_sta_hw_queue_read, file);
-	/* pse queue */
-	seq_puts(file, "PSE non-empty queue info:\n");
-	mt7915_hw_queue_read(file, ARRAY_SIZE(pse_queue_map),
-			     &pse_queue_map[0]);
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7915_hw_queues);
-
-static int
-mt7915_xmit_queues_show(struct seq_file *file, void *data)
-{
-	struct mt7915_phy *phy = file->private;
-	struct mt7915_dev *dev = phy->dev;
-	struct {
-		struct mt76_queue *q;
-		char *queue;
-	} queue_map[] = {
-		{ phy->mt76->q_tx[MT_TXQ_BE],	 "   MAIN"  },
-		{ dev->mt76.q_mcu[MT_MCUQ_WM],	 "  MCUWM"  },
-		{ dev->mt76.q_mcu[MT_MCUQ_WA],	 "  MCUWA"  },
-		{ dev->mt76.q_mcu[MT_MCUQ_FWDL], "MCUFWDL" },
-	};
-	int i;
-
-	seq_puts(file, "     queue | hw-queued |      head |      tail |\n");
-	for (i = 0; i < ARRAY_SIZE(queue_map); i++) {
-		struct mt76_queue *q = queue_map[i].q;
-
-		if (!q)
-			continue;
-
-		seq_printf(file, "   %s | %9d | %9d | %9d |\n",
-			   queue_map[i].queue, q->queued, q->head,
-			   q->tail);
-	}
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7915_xmit_queues);
-
-static int
-mt7915_rate_txpower_show(struct seq_file *file, void *data)
-{
-	static const char * const sku_group_name[] = {
-		"CCK", "OFDM", "HT20", "HT40",
-		"VHT20", "VHT40", "VHT80", "VHT160",
-		"RU26", "RU52", "RU106", "RU242/SU20",
-		"RU484/SU40", "RU996/SU80", "RU2x996/SU160"
-	};
-	struct mt7915_phy *phy = file->private;
-	s8 txpower[MT7915_SKU_RATE_NUM], *buf;
-	int i;
-
-	seq_printf(file, "\nBand %d\n", phy != &phy->dev->phy);
-	mt7915_mcu_get_txpower_sku(phy, txpower, sizeof(txpower));
-	for (i = 0, buf = txpower; i < ARRAY_SIZE(mt7915_sku_group_len); i++) {
-		u8 mcs_num = mt7915_sku_group_len[i];
-
-		if (i >= SKU_VHT_BW20 && i <= SKU_VHT_BW160)
-			mcs_num = 10;
-
-		mt76_seq_puts_array(file, sku_group_name[i], buf, mcs_num);
-		buf += mt7915_sku_group_len[i];
-	}
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7915_rate_txpower);
-
-static int
-mt7915_twt_stats(struct seq_file *s, void *data)
-{
-	struct mt7915_dev *dev = dev_get_drvdata(s->private);
-	struct mt7915_twt_flow *iter;
-
-	rcu_read_lock();
-
-	seq_puts(s, "     wcid |       id |    flags |      exp | mantissa");
-	seq_puts(s, " | duration |            tsf |\n");
-	list_for_each_entry_rcu(iter, &dev->twt_list, list)
-		seq_printf(s,
-			"%9d | %8d | %5c%c%c%c | %8d | %8d | %8d | %14lld |\n",
-			iter->wcid, iter->id,
-			iter->sched ? 's' : 'u',
-			iter->protection ? 'p' : '-',
-			iter->trigger ? 't' : '-',
-			iter->flowtype ? '-' : 'a',
-			iter->exp, iter->mantissa,
-			iter->duration, iter->tsf);
-
-	rcu_read_unlock();
-
-	return 0;
-}
-
-/* The index of RF registers use the generic regidx, combined with two parts:
- * WF selection [31:24] and offset [23:0].
- */
-static int
-mt7915_rf_regval_get(void *data, u64 *val)
-{
-	struct mt7915_dev *dev = data;
-	u32 regval;
-	int ret;
-
-	ret = mt7915_mcu_rf_regval(dev, dev->mt76.debugfs_reg, &regval, false);
-	if (ret)
-		return ret;
-
-	*val = regval;
-
-	return 0;
-}
-
-static int
-mt7915_rf_regval_set(void *data, u64 val)
-{
-	struct mt7915_dev *dev = data;
-	u32 val32 = val;
-
-	return mt7915_mcu_rf_regval(dev, dev->mt76.debugfs_reg, &val32, true);
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_rf_regval, mt7915_rf_regval_get,
-			 mt7915_rf_regval_set, "0x%08llx\n");
-
-int mt7915_init_debugfs(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-	struct dentry *dir;
-
-	dir = mt76_register_debugfs_fops(phy->mt76, NULL);
-	if (!dir)
-		return -ENOMEM;
-	debugfs_create_file("muru_debug", 0600, dir, dev, &fops_muru_debug);
-	debugfs_create_file("muru_stats", 0400, dir, phy,
-			    &mt7915_muru_stats_fops);
-	debugfs_create_file("hw-queues", 0400, dir, phy,
-			    &mt7915_hw_queues_fops);
-	debugfs_create_file("xmit-queues", 0400, dir, phy,
-			    &mt7915_xmit_queues_fops);
-	debugfs_create_file("tx_stats", 0400, dir, phy, &mt7915_tx_stats_fops);
-	debugfs_create_file("fw_ser", 0600, dir, phy, &mt7915_fw_ser_ops);
-	debugfs_create_file("fw_debug_wm", 0600, dir, dev, &fops_fw_debug_wm);
-	debugfs_create_file("fw_debug_wa", 0600, dir, dev, &fops_fw_debug_wa);
-	debugfs_create_file("fw_debug_bin", 0600, dir, dev, &fops_fw_debug_bin);
-	debugfs_create_file("fw_util_wm", 0400, dir, dev,
-			    &mt7915_fw_util_wm_fops);
-	debugfs_create_file("fw_util_wa", 0400, dir, dev,
-			    &mt7915_fw_util_wa_fops);
-	debugfs_create_file("implicit_txbf", 0600, dir, dev,
-			    &fops_implicit_txbf);
-	debugfs_create_file("txpower_sku", 0400, dir, phy,
-			    &mt7915_rate_txpower_fops);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "twt_stats", dir,
-				    mt7915_twt_stats);
-	debugfs_create_file("rf_regval", 0600, dir, dev, &fops_rf_regval);
-
-	if (!dev->dbdc_support || phy->band_idx) {
-		debugfs_create_u32("dfs_hw_pattern", 0400, dir,
-				   &dev->hw_pattern);
-		debugfs_create_file("radar_trigger", 0200, dir, dev,
-				    &fops_radar_trigger);
-		debugfs_create_devm_seqfile(dev->mt76.dev, "rdd_monitor", dir,
-					    mt7915_rdd_monitor);
-	}
-
-	if (!ext_phy)
-		dev->debugfs_dir = dir;
-
-	return 0;
-}
-
-static void
-mt7915_debugfs_write_fwlog(struct mt7915_dev *dev, const void *hdr, int hdrlen,
-			 const void *data, int len)
-{
-	static DEFINE_SPINLOCK(lock);
-	unsigned long flags;
-	void *dest;
-
-	spin_lock_irqsave(&lock, flags);
-	dest = relay_reserve(dev->relay_fwlog, hdrlen + len + 4);
-	if (dest) {
-		*(u32 *)dest = hdrlen + len;
-		dest += 4;
-
-		if (hdrlen) {
-			memcpy(dest, hdr, hdrlen);
-			dest += hdrlen;
-		}
-
-		memcpy(dest, data, len);
-		relay_flush(dev->relay_fwlog);
-	}
-	spin_unlock_irqrestore(&lock, flags);
-}
-
-void mt7915_debugfs_rx_fw_monitor(struct mt7915_dev *dev, const void *data, int len)
-{
-	struct {
-		__le32 magic;
-		__le32 timestamp;
-		__le16 msg_type;
-		__le16 len;
-	} hdr = {
-		.magic = cpu_to_le32(FW_BIN_LOG_MAGIC),
-		.msg_type = cpu_to_le16(PKT_TYPE_RX_FW_MONITOR),
-	};
-
-	if (!dev->relay_fwlog)
-		return;
-
-	hdr.timestamp = cpu_to_le32(mt76_rr(dev, MT_LPON_FRCR(0)));
-	hdr.len = *(__le16 *)data;
-	mt7915_debugfs_write_fwlog(dev, &hdr, sizeof(hdr), data, len);
-}
-
-bool mt7915_debugfs_rx_log(struct mt7915_dev *dev, const void *data, int len)
-{
-	if (get_unaligned_le32(data) != FW_BIN_LOG_MAGIC)
-		return false;
-
-	if (dev->relay_fwlog)
-		mt7915_debugfs_write_fwlog(dev, NULL, 0, data, len);
-
-	return true;
-}
-
-#ifdef CONFIG_MAC80211_DEBUGFS
-/** per-station debugfs **/
-
-static ssize_t mt7915_sta_fixed_rate_set(struct file *file,
-					 const char __user *user_buf,
-					 size_t count, loff_t *ppos)
-{
-	struct ieee80211_sta *sta = file->private_data;
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct mt7915_dev *dev = msta->vif->phy->dev;
-	struct ieee80211_vif *vif;
-	struct sta_phy phy = {};
-	char buf[100];
-	int ret;
-	u32 field;
-	u8 i, gi, he_ltf;
-
-	if (count >= sizeof(buf))
-		return -EINVAL;
-
-	if (copy_from_user(buf, user_buf, count))
-		return -EFAULT;
-
-	if (count && buf[count - 1] == '\n')
-		buf[count - 1] = '\0';
-	else
-		buf[count] = '\0';
-
-	/* mode - cck: 0, ofdm: 1, ht: 2, gf: 3, vht: 4, he_su: 8, he_er: 9
-	 * bw - bw20: 0, bw40: 1, bw80: 2, bw160: 3
-	 * nss - vht: 1~4, he: 1~4, others: ignore
-	 * mcs - cck: 0~4, ofdm: 0~7, ht: 0~32, vht: 0~9, he_su: 0~11, he_er: 0~2
-	 * gi - (ht/vht) lgi: 0, sgi: 1; (he) 0.8us: 0, 1.6us: 1, 3.2us: 2
-	 * ldpc - off: 0, on: 1
-	 * stbc - off: 0, on: 1
-	 * he_ltf - 1xltf: 0, 2xltf: 1, 4xltf: 2
-	 */
-	if (sscanf(buf, "%hhu %hhu %hhu %hhu %hhu %hhu %hhu %hhu",
-		   &phy.type, &phy.bw, &phy.nss, &phy.mcs, &gi,
-		   &phy.ldpc, &phy.stbc, &he_ltf) != 8) {
-		dev_warn(dev->mt76.dev,
-			 "format: Mode BW NSS MCS (HE)GI LDPC STBC HE_LTF\n");
-		field = RATE_PARAM_AUTO;
-		goto out;
-	}
-
-	phy.ldpc = (phy.bw || phy.ldpc) * GENMASK(2, 0);
-	for (i = 0; i <= phy.bw; i++) {
-		phy.sgi |= gi << (i << sta->he_cap.has_he);
-		phy.he_ltf |= he_ltf << (i << sta->he_cap.has_he);
-	}
-	field = RATE_PARAM_FIXED;
-
-out:
-	vif = container_of((void *)msta->vif, struct ieee80211_vif, drv_priv);
-	ret = mt7915_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy, field);
-	if (ret)
-		return -EFAULT;
-
-	return count;
-}
-
-static const struct file_operations fops_fixed_rate = {
-	.write = mt7915_sta_fixed_rate_set,
-	.open = simple_open,
-	.owner = THIS_MODULE,
-	.llseek = default_llseek,
-};
-
-static int
-mt7915_queues_show(struct seq_file *s, void *data)
-{
-	struct ieee80211_sta *sta = s->private;
-
-	mt7915_sta_hw_queue_read(s, sta);
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7915_queues);
-
-void mt7915_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			    struct ieee80211_sta *sta, struct dentry *dir)
-{
-	debugfs_create_file("fixed_rate", 0600, dir, sta, &fops_fixed_rate);
-	debugfs_create_file("hw-queues", 0400, dir, sta, &mt7915_queues_fops);
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/dma.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/dma.c
deleted file mode 100644
index edae845..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/dma.c
+++ /dev/null
@@ -1,522 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include "mt7915.h"
-#include "../dma.h"
-#include "mac.h"
-
-static int
-mt7915_init_tx_queues(struct mt7915_phy *phy, int idx, int n_desc, int ring_base)
-{
-	struct mt7915_dev *dev = phy->dev;
-
-	if (mtk_wed_device_active(&phy->dev->mt76.mmio.wed)) {
-		if (is_mt7986(&dev->mt76))
-			ring_base += MT_TXQ_ID(0) * MT_RING_SIZE;
-		else
-			ring_base = MT_WED_TX_RING_BASE;
-
-		idx -= MT_TXQ_ID(0);
-	}
-
-	return mt76_connac_init_tx_queues(phy->mt76, idx, n_desc, ring_base,
-					  MT_WED_Q_TX(idx));
-}
-
-static int mt7915_poll_tx(struct napi_struct *napi, int budget)
-{
-	struct mt7915_dev *dev;
-
-	dev = container_of(napi, struct mt7915_dev, mt76.tx_napi);
-
-	mt76_connac_tx_cleanup(&dev->mt76);
-	if (napi_complete_done(napi, 0))
-		mt7915_irq_enable(dev, MT_INT_TX_DONE_MCU);
-
-	return 0;
-}
-
-static void mt7915_dma_config(struct mt7915_dev *dev)
-{
-#define Q_CONFIG(q, wfdma, int, id) do {		\
-		if (wfdma)				\
-			dev->wfdma_mask |= (1 << (q));	\
-		dev->q_int_mask[(q)] = int;		\
-		dev->q_id[(q)] = id;			\
-	} while (0)
-
-#define MCUQ_CONFIG(q, wfdma, int, id)	Q_CONFIG(q, (wfdma), (int), (id))
-#define RXQ_CONFIG(q, wfdma, int, id)	Q_CONFIG(__RXQ(q), (wfdma), (int), (id))
-#define TXQ_CONFIG(q, wfdma, int, id)	Q_CONFIG(__TXQ(q), (wfdma), (int), (id))
-
-	if (is_mt7915(&dev->mt76)) {
-		RXQ_CONFIG(MT_RXQ_MAIN, WFDMA0, MT_INT_RX_DONE_BAND0, MT7915_RXQ_BAND0);
-		RXQ_CONFIG(MT_RXQ_MCU, WFDMA1, MT_INT_RX_DONE_WM, MT7915_RXQ_MCU_WM);
-		RXQ_CONFIG(MT_RXQ_MCU_WA, WFDMA1, MT_INT_RX_DONE_WA, MT7915_RXQ_MCU_WA);
-		RXQ_CONFIG(MT_RXQ_BAND1, WFDMA0, MT_INT_RX_DONE_BAND1, MT7915_RXQ_BAND1);
-		RXQ_CONFIG(MT_RXQ_BAND1_WA, WFDMA1, MT_INT_RX_DONE_WA_EXT, MT7915_RXQ_MCU_WA_EXT);
-		RXQ_CONFIG(MT_RXQ_MAIN_WA, WFDMA1, MT_INT_RX_DONE_WA_MAIN, MT7915_RXQ_MCU_WA);
-		TXQ_CONFIG(0, WFDMA1, MT_INT_TX_DONE_BAND0, MT7915_TXQ_BAND0);
-		TXQ_CONFIG(1, WFDMA1, MT_INT_TX_DONE_BAND1, MT7915_TXQ_BAND1);
-		MCUQ_CONFIG(MT_MCUQ_WM, WFDMA1, MT_INT_TX_DONE_MCU_WM, MT7915_TXQ_MCU_WM);
-		MCUQ_CONFIG(MT_MCUQ_WA, WFDMA1, MT_INT_TX_DONE_MCU_WA, MT7915_TXQ_MCU_WA);
-		MCUQ_CONFIG(MT_MCUQ_FWDL, WFDMA1, MT_INT_TX_DONE_FWDL, MT7915_TXQ_FWDL);
-	} else {
-		RXQ_CONFIG(MT_RXQ_MCU, WFDMA0, MT_INT_RX_DONE_WM, MT7916_RXQ_MCU_WM);
-		RXQ_CONFIG(MT_RXQ_BAND1_WA, WFDMA0, MT_INT_RX_DONE_WA_EXT_MT7916, MT7916_RXQ_MCU_WA_EXT);
-		MCUQ_CONFIG(MT_MCUQ_WM, WFDMA0, MT_INT_TX_DONE_MCU_WM, MT7915_TXQ_MCU_WM);
-		MCUQ_CONFIG(MT_MCUQ_WA, WFDMA0, MT_INT_TX_DONE_MCU_WA_MT7916, MT7915_TXQ_MCU_WA);
-		MCUQ_CONFIG(MT_MCUQ_FWDL, WFDMA0, MT_INT_TX_DONE_FWDL, MT7915_TXQ_FWDL);
-
-		if (is_mt7916(&dev->mt76) && mtk_wed_device_active(&dev->mt76.mmio.wed)) {
-			RXQ_CONFIG(MT_RXQ_MAIN, WFDMA0, MT_INT_WED_RX_DONE_BAND0_MT7916,
-				   MT7916_RXQ_BAND0);
-			RXQ_CONFIG(MT_RXQ_MCU_WA, WFDMA0, MT_INT_WED_RX_DONE_WA_MT7916,
-				   MT7916_RXQ_MCU_WA);
-			RXQ_CONFIG(MT_RXQ_BAND1, WFDMA0, MT_INT_WED_RX_DONE_BAND1_MT7916,
-				   MT7916_RXQ_BAND1);
-			RXQ_CONFIG(MT_RXQ_MAIN_WA, WFDMA0, MT_INT_WED_RX_DONE_WA_MAIN_MT7916,
-				   MT7916_RXQ_MCU_WA_MAIN);
-			TXQ_CONFIG(0, WFDMA0, MT_INT_WED_TX_DONE_BAND0, MT7915_TXQ_BAND0);
-			TXQ_CONFIG(1, WFDMA0, MT_INT_WED_TX_DONE_BAND1, MT7915_TXQ_BAND1);
-		} else {
-			RXQ_CONFIG(MT_RXQ_MAIN, WFDMA0, MT_INT_RX_DONE_BAND0_MT7916, MT7916_RXQ_BAND0);
-			RXQ_CONFIG(MT_RXQ_MCU_WA, WFDMA0, MT_INT_RX_DONE_WA, MT7916_RXQ_MCU_WA);
-			RXQ_CONFIG(MT_RXQ_BAND1, WFDMA0, MT_INT_RX_DONE_BAND1_MT7916, MT7916_RXQ_BAND1);
-			RXQ_CONFIG(MT_RXQ_MAIN_WA, WFDMA0, MT_INT_RX_DONE_WA_MAIN_MT7916,
-				   MT7916_RXQ_MCU_WA_MAIN);
-			TXQ_CONFIG(0, WFDMA0, MT_INT_TX_DONE_BAND0, MT7915_TXQ_BAND0);
-			TXQ_CONFIG(1, WFDMA0, MT_INT_TX_DONE_BAND1, MT7915_TXQ_BAND1);
-		}
-	}
-}
-
-static void __mt7915_dma_prefetch(struct mt7915_dev *dev, u32 ofs)
-{
-#define PREFETCH(_base, _depth)	((_base) << 16 | (_depth))
-	u32 base = 0;
-
-	/* prefetch SRAM wrapping boundary for tx/rx ring. */
-	mt76_wr(dev, MT_MCUQ_EXT_CTRL(MT_MCUQ_FWDL) + ofs, PREFETCH(0x0, 0x4));
-	mt76_wr(dev, MT_MCUQ_EXT_CTRL(MT_MCUQ_WM) + ofs, PREFETCH(0x40, 0x4));
-	mt76_wr(dev, MT_TXQ_EXT_CTRL(0) + ofs, PREFETCH(0x80, 0x4));
-	mt76_wr(dev, MT_TXQ_EXT_CTRL(1) + ofs, PREFETCH(0xc0, 0x4));
-	mt76_wr(dev, MT_MCUQ_EXT_CTRL(MT_MCUQ_WA) + ofs, PREFETCH(0x100, 0x4));
-
-	mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MCU) + ofs,
-		PREFETCH(0x140, 0x4));
-	mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MCU_WA) + ofs,
-		PREFETCH(0x180, 0x4));
-	if (!is_mt7915(&dev->mt76)) {
-		mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MAIN_WA) + ofs,
-			PREFETCH(0x1c0, 0x4));
-		base = 0x40;
-	}
-	mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_BAND1_WA) + ofs,
-		PREFETCH(0x1c0 + base, 0x4));
-	mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MAIN) + ofs,
-		PREFETCH(0x200 + base, 0x4));
-	mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_BAND1) + ofs,
-		PREFETCH(0x240 + base, 0x4));
-
-	/* for mt7915, the ring which is next the last
-	 * used ring must be initialized.
-	 */
-	if (is_mt7915(&dev->mt76)) {
-		ofs += 0x4;
-		mt76_wr(dev, MT_MCUQ_EXT_CTRL(MT_MCUQ_WA) + ofs,
-			PREFETCH(0x140, 0x0));
-		mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_BAND1_WA) + ofs,
-			PREFETCH(0x200 + base, 0x0));
-		mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_BAND1) + ofs,
-			PREFETCH(0x280 + base, 0x0));
-	}
-}
-
-void mt7915_dma_prefetch(struct mt7915_dev *dev)
-{
-	__mt7915_dma_prefetch(dev, 0);
-	if (dev->hif2)
-		__mt7915_dma_prefetch(dev, MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0));
-}
-
-static void mt7915_dma_disable(struct mt7915_dev *dev, bool rst)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	u32 hif1_ofs = 0;
-
-	if (dev->hif2)
-		hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
-
-	/* reset */
-	if (rst) {
-		mt76_clear(dev, MT_WFDMA0_RST,
-			   MT_WFDMA0_RST_DMASHDL_ALL_RST |
-			   MT_WFDMA0_RST_LOGIC_RST);
-
-		mt76_set(dev, MT_WFDMA0_RST,
-			 MT_WFDMA0_RST_DMASHDL_ALL_RST |
-			 MT_WFDMA0_RST_LOGIC_RST);
-
-		if (is_mt7915(mdev)) {
-			mt76_clear(dev, MT_WFDMA1_RST,
-				   MT_WFDMA1_RST_DMASHDL_ALL_RST |
-				   MT_WFDMA1_RST_LOGIC_RST);
-
-			mt76_set(dev, MT_WFDMA1_RST,
-				 MT_WFDMA1_RST_DMASHDL_ALL_RST |
-				 MT_WFDMA1_RST_LOGIC_RST);
-		}
-
-		if (dev->hif2) {
-			mt76_clear(dev, MT_WFDMA0_RST + hif1_ofs,
-				   MT_WFDMA0_RST_DMASHDL_ALL_RST |
-				   MT_WFDMA0_RST_LOGIC_RST);
-
-			mt76_set(dev, MT_WFDMA0_RST + hif1_ofs,
-				 MT_WFDMA0_RST_DMASHDL_ALL_RST |
-				 MT_WFDMA0_RST_LOGIC_RST);
-
-			if (is_mt7915(mdev)) {
-				mt76_clear(dev, MT_WFDMA1_RST + hif1_ofs,
-					   MT_WFDMA1_RST_DMASHDL_ALL_RST |
-					   MT_WFDMA1_RST_LOGIC_RST);
-
-				mt76_set(dev, MT_WFDMA1_RST + hif1_ofs,
-					 MT_WFDMA1_RST_DMASHDL_ALL_RST |
-					 MT_WFDMA1_RST_LOGIC_RST);
-			}
-		}
-	}
-
-	/* disable */
-	mt76_clear(dev, MT_WFDMA0_GLO_CFG,
-		   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-		   MT_WFDMA0_GLO_CFG_RX_DMA_EN |
-		   MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-		   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO |
-		   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
-
-	if (is_mt7915(mdev))
-		mt76_clear(dev, MT_WFDMA1_GLO_CFG,
-			   MT_WFDMA1_GLO_CFG_TX_DMA_EN |
-			   MT_WFDMA1_GLO_CFG_RX_DMA_EN |
-			   MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
-			   MT_WFDMA1_GLO_CFG_OMIT_RX_INFO |
-			   MT_WFDMA1_GLO_CFG_OMIT_RX_INFO_PFET2);
-
-	if (dev->hif2) {
-		mt76_clear(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
-			   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-			   MT_WFDMA0_GLO_CFG_RX_DMA_EN |
-			   MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-			   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO |
-			   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
-
-		if (is_mt7915(mdev))
-			mt76_clear(dev, MT_WFDMA1_GLO_CFG + hif1_ofs,
-				   MT_WFDMA1_GLO_CFG_TX_DMA_EN |
-				   MT_WFDMA1_GLO_CFG_RX_DMA_EN |
-				   MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
-				   MT_WFDMA1_GLO_CFG_OMIT_RX_INFO |
-				   MT_WFDMA1_GLO_CFG_OMIT_RX_INFO_PFET2);
-	}
-}
-
-static int mt7915_dma_enable(struct mt7915_dev *dev)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	u32 hif1_ofs = 0;
-	u32 irq_mask;
-
-	if (dev->hif2)
-		hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
-
-	/* reset dma idx */
-	mt76_wr(dev, MT_WFDMA0_RST_DTX_PTR, ~0);
-	if (is_mt7915(mdev))
-		mt76_wr(dev, MT_WFDMA1_RST_DTX_PTR, ~0);
-	if (dev->hif2) {
-		mt76_wr(dev, MT_WFDMA0_RST_DTX_PTR + hif1_ofs, ~0);
-		if (is_mt7915(mdev))
-			mt76_wr(dev, MT_WFDMA1_RST_DTX_PTR + hif1_ofs, ~0);
-	}
-
-	/* configure delay interrupt off */
-	mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG0, 0);
-	if (is_mt7915(mdev)) {
-		mt76_wr(dev, MT_WFDMA1_PRI_DLY_INT_CFG0, 0);
-	} else {
-		mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG1, 0);
-		mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG2, 0);
-	}
-
-	if (dev->hif2) {
-		mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG0 + hif1_ofs, 0);
-		if (is_mt7915(mdev)) {
-			mt76_wr(dev, MT_WFDMA1_PRI_DLY_INT_CFG0 +
-				hif1_ofs, 0);
-		} else {
-			mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG1 +
-				hif1_ofs, 0);
-			mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG2 +
-				hif1_ofs, 0);
-		}
-	}
-
-	/* configure perfetch settings */
-	mt7915_dma_prefetch(dev);
-
-	/* hif wait WFDMA idle */
-	mt76_set(dev, MT_WFDMA0_BUSY_ENA,
-		 MT_WFDMA0_BUSY_ENA_TX_FIFO0 |
-		 MT_WFDMA0_BUSY_ENA_TX_FIFO1 |
-		 MT_WFDMA0_BUSY_ENA_RX_FIFO);
-
-	if (is_mt7915(mdev))
-		mt76_set(dev, MT_WFDMA1_BUSY_ENA,
-			 MT_WFDMA1_BUSY_ENA_TX_FIFO0 |
-			 MT_WFDMA1_BUSY_ENA_TX_FIFO1 |
-			 MT_WFDMA1_BUSY_ENA_RX_FIFO);
-
-	if (dev->hif2) {
-		mt76_set(dev, MT_WFDMA0_BUSY_ENA + hif1_ofs,
-			 MT_WFDMA0_PCIE1_BUSY_ENA_TX_FIFO0 |
-			 MT_WFDMA0_PCIE1_BUSY_ENA_TX_FIFO1 |
-			 MT_WFDMA0_PCIE1_BUSY_ENA_RX_FIFO);
-
-		if (is_mt7915(mdev))
-			mt76_set(dev, MT_WFDMA1_BUSY_ENA + hif1_ofs,
-				 MT_WFDMA1_PCIE1_BUSY_ENA_TX_FIFO0 |
-				 MT_WFDMA1_PCIE1_BUSY_ENA_TX_FIFO1 |
-				 MT_WFDMA1_PCIE1_BUSY_ENA_RX_FIFO);
-	}
-
-	mt76_poll(dev, MT_WFDMA_EXT_CSR_HIF_MISC,
-		  MT_WFDMA_EXT_CSR_HIF_MISC_BUSY, 0, 1000);
-
-	/* set WFDMA Tx/Rx */
-	mt76_set(dev, MT_WFDMA0_GLO_CFG,
-		 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-		 MT_WFDMA0_GLO_CFG_RX_DMA_EN |
-		 MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-		 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
-
-	if (is_mt7915(mdev))
-		mt76_set(dev, MT_WFDMA1_GLO_CFG,
-			 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
-			 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
-			 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
-			 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO);
-
-	if (dev->hif2) {
-		mt76_set(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
-			 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-			 MT_WFDMA0_GLO_CFG_RX_DMA_EN |
-			 MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-			 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
-
-		if (is_mt7915(mdev))
-			mt76_set(dev, MT_WFDMA1_GLO_CFG + hif1_ofs,
-				 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
-				 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
-				 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
-				 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO);
-
-		mt76_set(dev, MT_WFDMA_HOST_CONFIG,
-			 MT_WFDMA_HOST_CONFIG_PDMA_BAND);
-	}
-
-	/* enable interrupts for TX/RX rings */
-	irq_mask = MT_INT_RX_DONE_MCU |
-		   MT_INT_TX_DONE_MCU |
-		   MT_INT_MCU_CMD;
-
-	if (!dev->phy.band_idx)
-		irq_mask |= MT_INT_BAND0_RX_DONE;
-
-	if (dev->dbdc_support || dev->phy.band_idx)
-		irq_mask |= MT_INT_BAND1_RX_DONE;
-
-	if (mtk_wed_device_active(&dev->mt76.mmio.wed)) {
-		u32 wed_irq_mask = irq_mask;
-
-		wed_irq_mask |= MT_INT_TX_DONE_BAND0 | MT_INT_TX_DONE_BAND1;
-		if (!is_mt7986(&dev->mt76))
-			mt76_wr(dev, MT_INT_WED_MASK_CSR, wed_irq_mask);
-		mt76_wr(dev, MT_INT_MASK_CSR, wed_irq_mask);
-		mtk_wed_device_start(&dev->mt76.mmio.wed, wed_irq_mask);
-	}
-
-	mt7915_irq_enable(dev, irq_mask);
-
-	return 0;
-}
-
-int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	u32 wa_rx_base, wa_rx_idx;
-	u32 hif1_ofs = 0;
-	int ret;
-
-	mt7915_dma_config(dev);
-
-	mt76_dma_attach(&dev->mt76);
-
-	if (dev->hif2)
-		hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
-
-	mt7915_dma_disable(dev, true);
-
-	if (mtk_wed_device_active(&mdev->mmio.wed)) {
-		if (!is_mt7986(mdev)) {
-			u8 wed_control_rx1 = is_mt7915(mdev) ? 1 : 2;
-
-			mt76_set(dev, MT_WFDMA_HOST_CONFIG,
-				 MT_WFDMA_HOST_CONFIG_WED);
-			mt76_wr(dev, MT_WFDMA_WED_RING_CONTROL,
-				FIELD_PREP(MT_WFDMA_WED_RING_CONTROL_TX0, 18) |
-				FIELD_PREP(MT_WFDMA_WED_RING_CONTROL_TX1, 19) |
-				FIELD_PREP(MT_WFDMA_WED_RING_CONTROL_RX1,
-					   wed_control_rx1));
-		}
-	} else {
-		mt76_clear(dev, MT_WFDMA_HOST_CONFIG, MT_WFDMA_HOST_CONFIG_WED);
-	}
-
-	/* init tx queue */
-	ret = mt7915_init_tx_queues(&dev->phy,
-				    MT_TXQ_ID(dev->phy.band_idx),
-				    MT7915_TX_RING_SIZE,
-				    MT_TXQ_RING_BASE(0));
-	if (ret)
-		return ret;
-
-	if (phy2) {
-		ret = mt7915_init_tx_queues(phy2,
-					    MT_TXQ_ID(phy2->band_idx),
-					    MT7915_TX_RING_SIZE,
-					    MT_TXQ_RING_BASE(1));
-		if (ret)
-			return ret;
-	}
-
-	/* command to WM */
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WM,
-				  MT_MCUQ_ID(MT_MCUQ_WM),
-				  MT7915_TX_MCU_RING_SIZE,
-				  MT_MCUQ_RING_BASE(MT_MCUQ_WM));
-	if (ret)
-		return ret;
-
-	/* command to WA */
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WA,
-				  MT_MCUQ_ID(MT_MCUQ_WA),
-				  MT7915_TX_MCU_RING_SIZE,
-				  MT_MCUQ_RING_BASE(MT_MCUQ_WA));
-	if (ret)
-		return ret;
-
-	/* firmware download */
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_FWDL,
-				  MT_MCUQ_ID(MT_MCUQ_FWDL),
-				  MT7915_TX_FWDL_RING_SIZE,
-				  MT_MCUQ_RING_BASE(MT_MCUQ_FWDL));
-	if (ret)
-		return ret;
-
-	/* event from WM */
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU],
-			       MT_RXQ_ID(MT_RXQ_MCU),
-			       MT7915_RX_MCU_RING_SIZE,
-			       MT_RX_BUF_SIZE,
-			       MT_RXQ_RING_BASE(MT_RXQ_MCU));
-	if (ret)
-		return ret;
-
-	/* event from WA */
-	if (mtk_wed_device_active(&mdev->mmio.wed) && is_mt7915(mdev)) {
-		wa_rx_base = MT_WED_RX_RING_BASE;
-		wa_rx_idx = MT7915_RXQ_MCU_WA;
-		dev->mt76.q_rx[MT_RXQ_MCU_WA].flags = MT_WED_Q_TXFREE;
-	} else {
-		wa_rx_base = MT_RXQ_RING_BASE(MT_RXQ_MCU_WA);
-		wa_rx_idx = MT_RXQ_ID(MT_RXQ_MCU_WA);
-	}
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU_WA],
-			       wa_rx_idx, MT7915_RX_MCU_RING_SIZE,
-			       MT_RX_BUF_SIZE, wa_rx_base);
-	if (ret)
-		return ret;
-
-	/* rx data queue for band0 */
-	if (!dev->phy.band_idx) {
-		ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN],
-				       MT_RXQ_ID(MT_RXQ_MAIN),
-				       MT7915_RX_RING_SIZE,
-				       MT_RX_BUF_SIZE,
-				       MT_RXQ_RING_BASE(MT_RXQ_MAIN));
-		if (ret)
-			return ret;
-	}
-
-	/* tx free notify event from WA for band0 */
-	if (!is_mt7915(mdev)) {
-		wa_rx_base = MT_RXQ_RING_BASE(MT_RXQ_MAIN_WA);
-		wa_rx_idx = MT_RXQ_ID(MT_RXQ_MAIN_WA);
-
-		if (mtk_wed_device_active(&mdev->mmio.wed)) {
-			mdev->q_rx[MT_RXQ_MAIN_WA].flags = MT_WED_Q_TXFREE;
-			if (is_mt7916(mdev)) {
-				wa_rx_base =  MT_WED_RX_RING_BASE;
-				wa_rx_idx = MT7915_RXQ_MCU_WA;
-			}
-		}
-
-		ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN_WA],
-				       wa_rx_idx, MT7915_RX_MCU_RING_SIZE,
-				       MT_RX_BUF_SIZE, wa_rx_base);
-		if (ret)
-			return ret;
-	}
-
-	if (dev->dbdc_support || dev->phy.band_idx) {
-		/* rx data queue for band1 */
-		ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_BAND1],
-				       MT_RXQ_ID(MT_RXQ_BAND1),
-				       MT7915_RX_RING_SIZE,
-				       MT_RX_BUF_SIZE,
-				       MT_RXQ_RING_BASE(MT_RXQ_BAND1) + hif1_ofs);
-		if (ret)
-			return ret;
-
-		/* tx free notify event from WA for band1 */
-		ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_BAND1_WA],
-				       MT_RXQ_ID(MT_RXQ_BAND1_WA),
-				       MT7915_RX_MCU_RING_SIZE,
-				       MT_RX_BUF_SIZE,
-				       MT_RXQ_RING_BASE(MT_RXQ_BAND1_WA) + hif1_ofs);
-		if (ret)
-			return ret;
-	}
-
-	ret = mt76_init_queues(dev, mt76_dma_rx_poll);
-	if (ret < 0)
-		return ret;
-
-	netif_tx_napi_add(&dev->mt76.tx_napi_dev, &dev->mt76.tx_napi,
-			  mt7915_poll_tx, NAPI_POLL_WEIGHT);
-	napi_enable(&dev->mt76.tx_napi);
-
-	mt7915_dma_enable(dev);
-
-	return 0;
-}
-
-void mt7915_dma_cleanup(struct mt7915_dev *dev)
-{
-	mt7915_dma_disable(dev, true);
-
-	mt76_dma_cleanup(&dev->mt76);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/eeprom.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/eeprom.c
deleted file mode 100644
index e2482c6..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/eeprom.c
+++ /dev/null
@@ -1,337 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/firmware.h>
-#include "mt7915.h"
-#include "eeprom.h"
-
-static int mt7915_eeprom_load_precal(struct mt7915_dev *dev)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	u8 *eeprom = mdev->eeprom.data;
-	u32 val = eeprom[MT_EE_DO_PRE_CAL];
-	u32 offs;
-
-	if (!dev->flash_mode)
-		return 0;
-
-	if (val != (MT_EE_WIFI_CAL_DPD | MT_EE_WIFI_CAL_GROUP))
-		return 0;
-
-	val = MT_EE_CAL_GROUP_SIZE + MT_EE_CAL_DPD_SIZE;
-	dev->cal = devm_kzalloc(mdev->dev, val, GFP_KERNEL);
-	if (!dev->cal)
-		return -ENOMEM;
-
-	offs = is_mt7915(&dev->mt76) ? MT_EE_PRECAL : MT_EE_PRECAL_V2;
-
-	return mt76_get_of_eeprom(mdev, dev->cal, offs, val);
-}
-
-static int mt7915_check_eeprom(struct mt7915_dev *dev)
-{
-	u8 *eeprom = dev->mt76.eeprom.data;
-	u16 val = get_unaligned_le16(eeprom);
-
-	switch (val) {
-	case 0x7915:
-	case 0x7916:
-	case 0x7986:
-		return 0;
-	default:
-		return -EINVAL;
-	}
-}
-
-static char *mt7915_eeprom_name(struct mt7915_dev *dev)
-{
-	switch (mt76_chip(&dev->mt76)) {
-	case 0x7915:
-		return dev->dbdc_support ?
-		       MT7915_EEPROM_DEFAULT_DBDC : MT7915_EEPROM_DEFAULT;
-	case 0x7986:
-		switch (mt7915_check_adie(dev, true)) {
-		case MT7976_ONE_ADIE_DBDC:
-			return MT7986_EEPROM_MT7976_DEFAULT_DBDC;
-		case MT7975_ONE_ADIE:
-			return MT7986_EEPROM_MT7975_DEFAULT;
-		case MT7976_ONE_ADIE:
-			return MT7986_EEPROM_MT7976_DEFAULT;
-		case MT7975_DUAL_ADIE:
-			return MT7986_EEPROM_MT7975_DUAL_DEFAULT;
-		case MT7976_DUAL_ADIE:
-			return MT7986_EEPROM_MT7976_DUAL_DEFAULT;
-		default:
-			break;
-		}
-		return NULL;
-	default:
-		return MT7916_EEPROM_DEFAULT;
-	}
-}
-
-static int
-mt7915_eeprom_load_default(struct mt7915_dev *dev)
-{
-	u8 *eeprom = dev->mt76.eeprom.data;
-	const struct firmware *fw = NULL;
-	int ret;
-
-	ret = request_firmware(&fw, mt7915_eeprom_name(dev), dev->mt76.dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data) {
-		dev_err(dev->mt76.dev, "Invalid default bin\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	memcpy(eeprom, fw->data, mt7915_eeprom_size(dev));
-	dev->flash_mode = true;
-
-out:
-	release_firmware(fw);
-
-	return ret;
-}
-
-static int mt7915_eeprom_load(struct mt7915_dev *dev)
-{
-	int ret;
-	u16 eeprom_size = mt7915_eeprom_size(dev);
-
-	ret = mt76_eeprom_init(&dev->mt76, eeprom_size);
-	if (ret < 0)
-		return ret;
-
-	if (ret) {
-		dev->flash_mode = true;
-	} else {
-		u8 free_block_num;
-		u32 block_num, i;
-
-		mt7915_mcu_get_eeprom_free_block(dev, &free_block_num);
-		/* efuse info not enough */
-		if (free_block_num >= 29)
-			return -EINVAL;
-
-		/* read eeprom data from efuse */
-		block_num = DIV_ROUND_UP(eeprom_size,
-					 MT7915_EEPROM_BLOCK_SIZE);
-		for (i = 0; i < block_num; i++)
-			mt7915_mcu_get_eeprom(dev,
-					      i * MT7915_EEPROM_BLOCK_SIZE);
-	}
-
-	return mt7915_check_eeprom(dev);
-}
-
-static void mt7915_eeprom_parse_band_config(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	u8 *eeprom = dev->mt76.eeprom.data;
-	u32 val;
-
-	val = eeprom[MT_EE_WIFI_CONF + phy->band_idx];
-	val = FIELD_GET(MT_EE_WIFI_CONF0_BAND_SEL, val);
-
-	if (!is_mt7915(&dev->mt76)) {
-		switch (val) {
-		case MT_EE_V2_BAND_SEL_5GHZ:
-			phy->mt76->cap.has_5ghz = true;
-			return;
-		case MT_EE_V2_BAND_SEL_6GHZ:
-			phy->mt76->cap.has_6ghz = true;
-			return;
-		case MT_EE_V2_BAND_SEL_5GHZ_6GHZ:
-			phy->mt76->cap.has_5ghz = true;
-			phy->mt76->cap.has_6ghz = true;
-			return;
-		default:
-			phy->mt76->cap.has_2ghz = true;
-			return;
-		}
-	} else if (val == MT_EE_BAND_SEL_DEFAULT && dev->dbdc_support) {
-		val = phy->band_idx ? MT_EE_BAND_SEL_5GHZ : MT_EE_BAND_SEL_2GHZ;
-	}
-
-	switch (val) {
-	case MT_EE_BAND_SEL_5GHZ:
-		phy->mt76->cap.has_5ghz = true;
-		break;
-	case MT_EE_BAND_SEL_2GHZ:
-		phy->mt76->cap.has_2ghz = true;
-		break;
-	default:
-		phy->mt76->cap.has_2ghz = true;
-		phy->mt76->cap.has_5ghz = true;
-		break;
-	}
-}
-
-void mt7915_eeprom_parse_hw_cap(struct mt7915_dev *dev,
-				struct mt7915_phy *phy)
-{
-	u8 path, nss, nss_max = 4, *eeprom = dev->mt76.eeprom.data;
-	struct mt76_phy *mphy = phy->mt76;
-
-	mt7915_eeprom_parse_band_config(phy);
-
-	/* read tx/rx path from eeprom */
-	if (is_mt7915(&dev->mt76)) {
-		path = FIELD_GET(MT_EE_WIFI_CONF0_TX_PATH,
-				 eeprom[MT_EE_WIFI_CONF]);
-	} else {
-		path = FIELD_GET(MT_EE_WIFI_CONF0_TX_PATH,
-				 eeprom[MT_EE_WIFI_CONF + phy->band_idx]);
-	}
-
-	if (!path || path > 4)
-		path = 4;
-
-	/* read tx/rx stream */
-	nss = path;
-	if (dev->dbdc_support) {
-		if (is_mt7915(&dev->mt76)) {
-			nss = FIELD_GET(MT_EE_WIFI_CONF3_TX_PATH_B0,
-					eeprom[MT_EE_WIFI_CONF + 3]);
-			if (phy->band_idx)
-				nss = FIELD_GET(MT_EE_WIFI_CONF3_TX_PATH_B1,
-						eeprom[MT_EE_WIFI_CONF + 3]);
-		} else {
-			nss = FIELD_GET(MT_EE_WIFI_CONF_STREAM_NUM,
-					eeprom[MT_EE_WIFI_CONF + 2 + phy->band_idx]);
-		}
-
-		if (!is_mt7986(&dev->mt76))
-			nss_max = 2;
-	}
-
-	nss = min_t(u8, min_t(u8, nss_max, nss), path);
-
-	mphy->chainmask = BIT(path) - 1;
-	if (phy->band_idx)
-		mphy->chainmask <<= dev->chainshift;
-	mphy->antenna_mask = BIT(nss) - 1;
-	dev->chainmask |= mphy->chainmask;
-	dev->chainshift = hweight8(dev->mphy.chainmask);
-}
-
-int mt7915_eeprom_init(struct mt7915_dev *dev)
-{
-	int ret;
-
-	ret = mt7915_eeprom_load(dev);
-	if (ret < 0) {
-		if (ret != -EINVAL)
-			return ret;
-
-		dev_warn(dev->mt76.dev, "eeprom load fail, use default bin\n");
-		ret = mt7915_eeprom_load_default(dev);
-		if (ret)
-			return ret;
-	}
-
-	ret = mt7915_eeprom_load_precal(dev);
-	if (ret)
-		return ret;
-
-	mt7915_eeprom_parse_hw_cap(dev, &dev->phy);
-	memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
-	       ETH_ALEN);
-
-	mt76_eeprom_override(&dev->mphy);
-
-	return 0;
-}
-
-int mt7915_eeprom_get_target_power(struct mt7915_dev *dev,
-				   struct ieee80211_channel *chan,
-				   u8 chain_idx)
-{
-	u8 *eeprom = dev->mt76.eeprom.data;
-	int index, target_power;
-	bool tssi_on, is_7976;
-
-	if (chain_idx > 3)
-		return -EINVAL;
-
-	tssi_on = mt7915_tssi_enabled(dev, chan->band);
-	is_7976 = mt7915_check_adie(dev, false) || is_mt7916(&dev->mt76);
-
-	if (chan->band == NL80211_BAND_2GHZ) {
-		if (is_7976) {
-			index = MT_EE_TX0_POWER_2G_V2 + chain_idx;
-			target_power = eeprom[index];
-		} else {
-			index = MT_EE_TX0_POWER_2G + chain_idx * 3;
-			target_power = eeprom[index];
-
-			if (!tssi_on)
-				target_power += eeprom[index + 1];
-		}
-	} else if (chan->band == NL80211_BAND_5GHZ) {
-		int group = mt7915_get_channel_group_5g(chan->hw_value, is_7976);
-
-		if (is_7976) {
-			index = MT_EE_TX0_POWER_5G_V2 + chain_idx * 5;
-			target_power = eeprom[index + group];
-		} else {
-			index = MT_EE_TX0_POWER_5G + chain_idx * 12;
-			target_power = eeprom[index + group];
-
-			if (!tssi_on)
-				target_power += eeprom[index + 8];
-		}
-	} else {
-		int group = mt7915_get_channel_group_6g(chan->hw_value);
-
-		index = MT_EE_TX0_POWER_6G_V2 + chain_idx * 8;
-		target_power = is_7976 ? eeprom[index + group] : 0;
-	}
-
-	return target_power;
-}
-
-s8 mt7915_eeprom_get_power_delta(struct mt7915_dev *dev, int band)
-{
-	u8 *eeprom = dev->mt76.eeprom.data;
-	u32 val, offs;
-	s8 delta;
-	bool is_7976 = mt7915_check_adie(dev, false) || is_mt7916(&dev->mt76);
-
-	if (band == NL80211_BAND_2GHZ)
-		offs = is_7976 ? MT_EE_RATE_DELTA_2G_V2 : MT_EE_RATE_DELTA_2G;
-	else if (band == NL80211_BAND_5GHZ)
-		offs = is_7976 ? MT_EE_RATE_DELTA_5G_V2 : MT_EE_RATE_DELTA_5G;
-	else
-		offs = is_7976 ? MT_EE_RATE_DELTA_6G_V2 : 0;
-
-	val = eeprom[offs];
-
-	if (!offs || !(val & MT_EE_RATE_DELTA_EN))
-		return 0;
-
-	delta = FIELD_GET(MT_EE_RATE_DELTA_MASK, val);
-
-	return val & MT_EE_RATE_DELTA_SIGN ? delta : -delta;
-}
-
-const u8 mt7915_sku_group_len[] = {
-	[SKU_CCK] = 4,
-	[SKU_OFDM] = 8,
-	[SKU_HT_BW20] = 8,
-	[SKU_HT_BW40] = 9,
-	[SKU_VHT_BW20] = 12,
-	[SKU_VHT_BW40] = 12,
-	[SKU_VHT_BW80] = 12,
-	[SKU_VHT_BW160] = 12,
-	[SKU_HE_RU26] = 12,
-	[SKU_HE_RU52] = 12,
-	[SKU_HE_RU106] = 12,
-	[SKU_HE_RU242] = 12,
-	[SKU_HE_RU484] = 12,
-	[SKU_HE_RU996] = 12,
-	[SKU_HE_RU2x996] = 12
-};
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/eeprom.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/eeprom.h
deleted file mode 100644
index f3e5681..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/eeprom.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT7915_EEPROM_H
-#define __MT7915_EEPROM_H
-
-#include "mt7915.h"
-
-struct cal_data {
-	u8 count;
-	u16 offset[60];
-};
-
-enum mt7915_eeprom_field {
-	MT_EE_CHIP_ID =		0x000,
-	MT_EE_VERSION =		0x002,
-	MT_EE_MAC_ADDR =	0x004,
-	MT_EE_MAC_ADDR2 =	0x00a,
-	MT_EE_DDIE_FT_VERSION =	0x050,
-	MT_EE_DO_PRE_CAL =	0x062,
-	MT_EE_WIFI_CONF =	0x190,
-	MT_EE_RATE_DELTA_2G =	0x252,
-	MT_EE_RATE_DELTA_5G =	0x29d,
-	MT_EE_TX0_POWER_2G =	0x2fc,
-	MT_EE_TX0_POWER_5G =	0x34b,
-	MT_EE_RATE_DELTA_2G_V2 = 0x7d3,
-	MT_EE_RATE_DELTA_5G_V2 = 0x81e,
-	MT_EE_RATE_DELTA_6G_V2 = 0x884, /* 6g fields only appear in eeprom v2 */
-	MT_EE_TX0_POWER_2G_V2 =	0x441,
-	MT_EE_TX0_POWER_5G_V2 =	0x445,
-	MT_EE_TX0_POWER_6G_V2 =	0x465,
-	MT_EE_ADIE_FT_VERSION =	0x9a0,
-
-	__MT_EE_MAX =		0xe00,
-	__MT_EE_MAX_V2 =	0x1000,
-	/* 0xe10 ~ 0x5780 used to save group cal data */
-	MT_EE_PRECAL =		0xe10,
-	MT_EE_PRECAL_V2 =	0x1010
-};
-
-#define MT_EE_WIFI_CAL_GROUP			BIT(0)
-#define MT_EE_WIFI_CAL_DPD			GENMASK(2, 1)
-#define MT_EE_CAL_UNIT				1024
-#define MT_EE_CAL_GROUP_SIZE			(49 * MT_EE_CAL_UNIT + 16)
-#define MT_EE_CAL_DPD_SIZE			(54 * MT_EE_CAL_UNIT)
-
-#define MT_EE_WIFI_CONF0_TX_PATH		GENMASK(2, 0)
-#define MT_EE_WIFI_CONF0_BAND_SEL		GENMASK(7, 6)
-#define MT_EE_WIFI_CONF1_BAND_SEL		GENMASK(7, 6)
-#define MT_EE_WIFI_CONF_STREAM_NUM		GENMASK(7, 5)
-#define MT_EE_WIFI_CONF3_TX_PATH_B0		GENMASK(1, 0)
-#define MT_EE_WIFI_CONF3_TX_PATH_B1		GENMASK(5, 4)
-#define MT_EE_WIFI_CONF7_TSSI0_2G		BIT(0)
-#define MT_EE_WIFI_CONF7_TSSI0_5G		BIT(2)
-#define MT_EE_WIFI_CONF7_TSSI1_5G		BIT(4)
-
-#define MT_EE_RATE_DELTA_MASK			GENMASK(5, 0)
-#define MT_EE_RATE_DELTA_SIGN			BIT(6)
-#define MT_EE_RATE_DELTA_EN			BIT(7)
-
-enum mt7915_adie_sku {
-	MT7976_ONE_ADIE_DBDC = 0x7,
-	MT7975_ONE_ADIE	= 0x8,
-	MT7976_ONE_ADIE	= 0xa,
-	MT7975_DUAL_ADIE = 0xd,
-	MT7976_DUAL_ADIE = 0xf,
-};
-
-enum mt7915_eeprom_band {
-	MT_EE_BAND_SEL_DEFAULT,
-	MT_EE_BAND_SEL_5GHZ,
-	MT_EE_BAND_SEL_2GHZ,
-	MT_EE_BAND_SEL_DUAL,
-};
-
-enum {
-	MT_EE_V2_BAND_SEL_2GHZ,
-	MT_EE_V2_BAND_SEL_5GHZ,
-	MT_EE_V2_BAND_SEL_6GHZ,
-	MT_EE_V2_BAND_SEL_5GHZ_6GHZ,
-};
-
-enum mt7915_sku_rate_group {
-	SKU_CCK,
-	SKU_OFDM,
-	SKU_HT_BW20,
-	SKU_HT_BW40,
-	SKU_VHT_BW20,
-	SKU_VHT_BW40,
-	SKU_VHT_BW80,
-	SKU_VHT_BW160,
-	SKU_HE_RU26,
-	SKU_HE_RU52,
-	SKU_HE_RU106,
-	SKU_HE_RU242,
-	SKU_HE_RU484,
-	SKU_HE_RU996,
-	SKU_HE_RU2x996,
-	MAX_SKU_RATE_GROUP_NUM,
-};
-
-static inline int
-mt7915_get_channel_group_5g(int channel, bool is_7976)
-{
-	if (is_7976) {
-		if (channel <= 64)
-			return 0;
-		if (channel <= 96)
-			return 1;
-		if (channel <= 128)
-			return 2;
-		if (channel <= 144)
-			return 3;
-		return 4;
-	}
-
-	if (channel >= 184 && channel <= 196)
-		return 0;
-	if (channel <= 48)
-		return 1;
-	if (channel <= 64)
-		return 2;
-	if (channel <= 96)
-		return 3;
-	if (channel <= 112)
-		return 4;
-	if (channel <= 128)
-		return 5;
-	if (channel <= 144)
-		return 6;
-	return 7;
-}
-
-static inline int
-mt7915_get_channel_group_6g(int channel)
-{
-	if (channel <= 29)
-		return 0;
-
-	return DIV_ROUND_UP(channel - 29, 32);
-}
-
-static inline bool
-mt7915_tssi_enabled(struct mt7915_dev *dev, enum nl80211_band band)
-{
-	u8 *eep = dev->mt76.eeprom.data;
-	u8 val = eep[MT_EE_WIFI_CONF + 7];
-
-	if (band == NL80211_BAND_2GHZ)
-		return val & MT_EE_WIFI_CONF7_TSSI0_2G;
-
-	if (dev->dbdc_support)
-		return val & MT_EE_WIFI_CONF7_TSSI1_5G;
-	else
-		return val & MT_EE_WIFI_CONF7_TSSI0_5G;
-}
-
-extern const u8 mt7915_sku_group_len[MAX_SKU_RATE_GROUP_NUM];
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/init.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/init.c
deleted file mode 100644
index 416e5ac..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/init.c
+++ /dev/null
@@ -1,1146 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/etherdevice.h>
-#include <linux/hwmon.h>
-#include <linux/hwmon-sysfs.h>
-#include <linux/thermal.h>
-#include "mt7915.h"
-#include "mac.h"
-#include "mcu.h"
-#include "eeprom.h"
-
-static const struct ieee80211_iface_limit if_limits[] = {
-	{
-		.max = 1,
-		.types = BIT(NL80211_IFTYPE_ADHOC)
-	}, {
-		.max = 16,
-		.types = BIT(NL80211_IFTYPE_AP)
-#ifdef CONFIG_MAC80211_MESH
-			 | BIT(NL80211_IFTYPE_MESH_POINT)
-#endif
-	}, {
-		.max = MT7915_MAX_INTERFACES,
-		.types = BIT(NL80211_IFTYPE_STATION)
-	}
-};
-
-static const struct ieee80211_iface_combination if_comb[] = {
-	{
-		.limits = if_limits,
-		.n_limits = ARRAY_SIZE(if_limits),
-		.max_interfaces = MT7915_MAX_INTERFACES,
-		.num_different_channels = 1,
-		.beacon_int_infra_match = true,
-		.radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
-				       BIT(NL80211_CHAN_WIDTH_20) |
-				       BIT(NL80211_CHAN_WIDTH_40) |
-				       BIT(NL80211_CHAN_WIDTH_80) |
-				       BIT(NL80211_CHAN_WIDTH_160) |
-				       BIT(NL80211_CHAN_WIDTH_80P80),
-	}
-};
-
-static ssize_t mt7915_thermal_temp_show(struct device *dev,
-					struct device_attribute *attr,
-					char *buf)
-{
-	struct mt7915_phy *phy = dev_get_drvdata(dev);
-	int i = to_sensor_dev_attr(attr)->index;
-	int temperature;
-
-	switch (i) {
-	case 0:
-		temperature = mt7915_mcu_get_temperature(phy);
-		if (temperature < 0)
-			return temperature;
-		/* display in millidegree celcius */
-		return sprintf(buf, "%u\n", temperature * 1000);
-	case 1:
-	case 2:
-		return sprintf(buf, "%u\n",
-			       phy->throttle_temp[i - 1] * 1000);
-	case 3:
-		return sprintf(buf, "%hhu\n", phy->throttle_state);
-	default:
-		return -EINVAL;
-	}
-}
-
-static ssize_t mt7915_thermal_temp_store(struct device *dev,
-					 struct device_attribute *attr,
-					 const char *buf, size_t count)
-{
-	struct mt7915_phy *phy = dev_get_drvdata(dev);
-	int ret, i = to_sensor_dev_attr(attr)->index;
-	long val;
-
-	ret = kstrtol(buf, 10, &val);
-	if (ret < 0)
-		return ret;
-
-	mutex_lock(&phy->dev->mt76.mutex);
-	val = clamp_val(DIV_ROUND_CLOSEST(val, 1000), 60, 130);
-	phy->throttle_temp[i - 1] = val;
-	mutex_unlock(&phy->dev->mt76.mutex);
-
-	return count;
-}
-
-static SENSOR_DEVICE_ATTR_RO(temp1_input, mt7915_thermal_temp, 0);
-static SENSOR_DEVICE_ATTR_RW(temp1_crit, mt7915_thermal_temp, 1);
-static SENSOR_DEVICE_ATTR_RW(temp1_max, mt7915_thermal_temp, 2);
-static SENSOR_DEVICE_ATTR_RO(throttle1, mt7915_thermal_temp, 3);
-
-static struct attribute *mt7915_hwmon_attrs[] = {
-	&sensor_dev_attr_temp1_input.dev_attr.attr,
-	&sensor_dev_attr_temp1_crit.dev_attr.attr,
-	&sensor_dev_attr_temp1_max.dev_attr.attr,
-	&sensor_dev_attr_throttle1.dev_attr.attr,
-	NULL,
-};
-ATTRIBUTE_GROUPS(mt7915_hwmon);
-
-static int
-mt7915_thermal_get_max_throttle_state(struct thermal_cooling_device *cdev,
-				      unsigned long *state)
-{
-	*state = MT7915_CDEV_THROTTLE_MAX;
-
-	return 0;
-}
-
-static int
-mt7915_thermal_get_cur_throttle_state(struct thermal_cooling_device *cdev,
-				      unsigned long *state)
-{
-	struct mt7915_phy *phy = cdev->devdata;
-
-	*state = phy->cdev_state;
-
-	return 0;
-}
-
-static int
-mt7915_thermal_set_cur_throttle_state(struct thermal_cooling_device *cdev,
-				      unsigned long state)
-{
-	struct mt7915_phy *phy = cdev->devdata;
-	u8 throttling = MT7915_THERMAL_THROTTLE_MAX - state;
-	int ret;
-
-	if (state > MT7915_CDEV_THROTTLE_MAX)
-		return -EINVAL;
-
-	if (phy->throttle_temp[0] > phy->throttle_temp[1])
-		return 0;
-
-	if (state == phy->cdev_state)
-		return 0;
-
-	/*
-	 * cooling_device convention: 0 = no cooling, more = more cooling
-	 * mcu convention: 1 = max cooling, more = less cooling
-	 */
-	ret = mt7915_mcu_set_thermal_throttling(phy, throttling);
-	if (ret)
-		return ret;
-
-	phy->cdev_state = state;
-
-	return 0;
-}
-
-static const struct thermal_cooling_device_ops mt7915_thermal_ops = {
-	.get_max_state = mt7915_thermal_get_max_throttle_state,
-	.get_cur_state = mt7915_thermal_get_cur_throttle_state,
-	.set_cur_state = mt7915_thermal_set_cur_throttle_state,
-};
-
-static void mt7915_unregister_thermal(struct mt7915_phy *phy)
-{
-	struct wiphy *wiphy = phy->mt76->hw->wiphy;
-
-	if (!phy->cdev)
-	    return;
-
-	sysfs_remove_link(&wiphy->dev.kobj, "cooling_device");
-	thermal_cooling_device_unregister(phy->cdev);
-}
-
-static int mt7915_thermal_init(struct mt7915_phy *phy)
-{
-	struct wiphy *wiphy = phy->mt76->hw->wiphy;
-	struct thermal_cooling_device *cdev;
-	struct device *hwmon;
-	const char *name;
-
-	name = devm_kasprintf(&wiphy->dev, GFP_KERNEL, "mt7915_%s",
-			      wiphy_name(wiphy));
-
-	cdev = thermal_cooling_device_register(name, phy, &mt7915_thermal_ops);
-	if (!IS_ERR(cdev)) {
-		if (sysfs_create_link(&wiphy->dev.kobj, &cdev->device.kobj,
-				      "cooling_device") < 0)
-			thermal_cooling_device_unregister(cdev);
-		else
-			phy->cdev = cdev;
-	}
-
-	if (!IS_REACHABLE(CONFIG_HWMON))
-		return 0;
-
-	hwmon = devm_hwmon_device_register_with_groups(&wiphy->dev, name, phy,
-						       mt7915_hwmon_groups);
-	if (IS_ERR(hwmon))
-		return PTR_ERR(hwmon);
-
-	/* initialize critical/maximum high temperature */
-	phy->throttle_temp[0] = 110;
-	phy->throttle_temp[1] = 120;
-
-	return mt7915_mcu_set_thermal_throttling(phy,
-						 MT7915_THERMAL_THROTTLE_MAX);
-}
-
-static void mt7915_led_set_config(struct led_classdev *led_cdev,
-				  u8 delay_on, u8 delay_off)
-{
-	struct mt7915_dev *dev;
-	struct mt76_dev *mt76;
-	u32 val;
-
-	mt76 = container_of(led_cdev, struct mt76_dev, led_cdev);
-	dev = container_of(mt76, struct mt7915_dev, mt76);
-
-	/* select TX blink mode, 2: only data frames */
-	mt76_rmw_field(dev, MT_TMAC_TCR0(0), MT_TMAC_TCR0_TX_BLINK, 2);
-
-	/* enable LED */
-	mt76_wr(dev, MT_LED_EN(0), 1);
-
-	/* set LED Tx blink on/off time */
-	val = FIELD_PREP(MT_LED_TX_BLINK_ON_MASK, delay_on) |
-	      FIELD_PREP(MT_LED_TX_BLINK_OFF_MASK, delay_off);
-	mt76_wr(dev, MT_LED_TX_BLINK(0), val);
-
-	/* control LED */
-	val = MT_LED_CTRL_BLINK_MODE | MT_LED_CTRL_KICK;
-	if (dev->mt76.led_al)
-		val |= MT_LED_CTRL_POLARITY;
-
-	mt76_wr(dev, MT_LED_CTRL(0), val);
-	mt76_clear(dev, MT_LED_CTRL(0), MT_LED_CTRL_KICK);
-}
-
-static int mt7915_led_set_blink(struct led_classdev *led_cdev,
-				unsigned long *delay_on,
-				unsigned long *delay_off)
-{
-	u16 delta_on = 0, delta_off = 0;
-
-#define HW_TICK		10
-#define TO_HW_TICK(_t)	(((_t) > HW_TICK) ? ((_t) / HW_TICK) : HW_TICK)
-
-	if (*delay_on)
-		delta_on = TO_HW_TICK(*delay_on);
-	if (*delay_off)
-		delta_off = TO_HW_TICK(*delay_off);
-
-	mt7915_led_set_config(led_cdev, delta_on, delta_off);
-
-	return 0;
-}
-
-static void mt7915_led_set_brightness(struct led_classdev *led_cdev,
-				      enum led_brightness brightness)
-{
-	if (!brightness)
-		mt7915_led_set_config(led_cdev, 0, 0xff);
-	else
-		mt7915_led_set_config(led_cdev, 0xff, 0);
-}
-
-static void
-mt7915_init_txpower(struct mt7915_dev *dev,
-		    struct ieee80211_supported_band *sband)
-{
-	int i, n_chains = hweight8(dev->mphy.antenna_mask);
-	int nss_delta = mt76_tx_power_nss_delta(n_chains);
-	int pwr_delta = mt7915_eeprom_get_power_delta(dev, sband->band);
-	struct mt76_power_limits limits;
-
-	for (i = 0; i < sband->n_channels; i++) {
-		struct ieee80211_channel *chan = &sband->channels[i];
-		u32 target_power = 0;
-		int j;
-
-		for (j = 0; j < n_chains; j++) {
-			u32 val;
-
-			val = mt7915_eeprom_get_target_power(dev, chan, j);
-			target_power = max(target_power, val);
-		}
-
-		target_power += pwr_delta;
-		target_power = mt76_get_rate_power_limits(&dev->mphy, chan,
-							  &limits,
-							  target_power);
-		target_power += nss_delta;
-		target_power = DIV_ROUND_UP(target_power, 2);
-		chan->max_power = min_t(int, chan->max_reg_power,
-					target_power);
-		chan->orig_mpwr = target_power;
-	}
-}
-
-static void
-mt7915_regd_notifier(struct wiphy *wiphy,
-		     struct regulatory_request *request)
-{
-	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	struct mt7915_phy *phy = mphy->priv;
-
-	memcpy(dev->mt76.alpha2, request->alpha2, sizeof(dev->mt76.alpha2));
-	dev->mt76.region = request->dfs_region;
-
-	if (dev->mt76.region == NL80211_DFS_UNSET)
-		mt7915_mcu_rdd_background_enable(phy, NULL);
-
-	mt7915_init_txpower(dev, &mphy->sband_2g.sband);
-	mt7915_init_txpower(dev, &mphy->sband_5g.sband);
-	mt7915_init_txpower(dev, &mphy->sband_6g.sband);
-
-	mphy->dfs_state = MT_DFS_STATE_UNKNOWN;
-	mt7915_dfs_init_radar_detector(phy);
-}
-
-static void
-mt7915_init_wiphy(struct ieee80211_hw *hw)
-{
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt76_dev *mdev = &phy->dev->mt76;
-	struct wiphy *wiphy = hw->wiphy;
-	struct mt7915_dev *dev = phy->dev;
-
-	hw->queues = 4;
-	hw->max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF;
-	hw->max_tx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF;
-	hw->netdev_features = NETIF_F_RXCSUM;
-
-	hw->radiotap_timestamp.units_pos =
-		IEEE80211_RADIOTAP_TIMESTAMP_UNIT_US;
-
-	phy->slottime = 9;
-
-	hw->sta_data_size = sizeof(struct mt7915_sta);
-	hw->vif_data_size = sizeof(struct mt7915_vif);
-
-	wiphy->iface_combinations = if_comb;
-	wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
-	wiphy->reg_notifier = mt7915_regd_notifier;
-	wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
-	wiphy->mbssid_max_interfaces = 16;
-
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BSS_COLOR);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_LEGACY);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HT);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_VHT);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HE);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_FILS_DISCOVERY);
-
-	if (!mdev->dev->of_node ||
-	    !of_property_read_bool(mdev->dev->of_node,
-				   "mediatek,disable-radar-background"))
-		wiphy_ext_feature_set(wiphy,
-				      NL80211_EXT_FEATURE_RADAR_BACKGROUND);
-
-	ieee80211_hw_set(hw, HAS_RATE_CONTROL);
-	ieee80211_hw_set(hw, SUPPORTS_TX_ENCAP_OFFLOAD);
-	ieee80211_hw_set(hw, SUPPORTS_RX_DECAP_OFFLOAD);
-	ieee80211_hw_set(hw, SUPPORTS_MULTI_BSSID);
-	ieee80211_hw_set(hw, WANT_MONITOR_VIF);
-	ieee80211_hw_set(hw, SUPPORTS_VHT_EXT_NSS_BW);
-
-	hw->max_tx_fragments = 4;
-
-	if (!phy->dev->dbdc_support)
-		wiphy->txq_memory_limit = 32 << 20; /* 32 MiB */
-
-	if (phy->mt76->cap.has_2ghz) {
-		phy->mt76->sband_2g.sband.ht_cap.cap |=
-			IEEE80211_HT_CAP_LDPC_CODING |
-			IEEE80211_HT_CAP_MAX_AMSDU;
-		phy->mt76->sband_2g.sband.ht_cap.ampdu_density =
-			IEEE80211_HT_MPDU_DENSITY_4;
-	}
-
-	if (phy->mt76->cap.has_5ghz) {
-		phy->mt76->sband_5g.sband.ht_cap.cap |=
-			IEEE80211_HT_CAP_LDPC_CODING |
-			IEEE80211_HT_CAP_MAX_AMSDU;
-		phy->mt76->sband_5g.sband.ht_cap.ampdu_density =
-			IEEE80211_HT_MPDU_DENSITY_4;
-
-		if (is_mt7915(&dev->mt76)) {
-			phy->mt76->sband_5g.sband.vht_cap.cap |=
-				IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991 |
-				IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK;
-
-			if (!dev->dbdc_support)
-				phy->mt76->sband_5g.sband.vht_cap.cap |=
-					IEEE80211_VHT_CAP_SHORT_GI_160 |
-					IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ;
-		} else {
-			phy->mt76->sband_5g.sband.vht_cap.cap |=
-				IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 |
-				IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK;
-
-			/* mt7916 dbdc with 2g 2x2 bw40 and 5g 2x2 bw160c */
-			phy->mt76->sband_5g.sband.vht_cap.cap |=
-				IEEE80211_VHT_CAP_SHORT_GI_160 |
-				IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ;
-		}
-	}
-
-	mt76_set_stream_caps(phy->mt76, true);
-	mt7915_set_stream_vht_txbf_caps(phy);
-	mt7915_set_stream_he_caps(phy);
-
-	wiphy->available_antennas_rx = phy->mt76->antenna_mask;
-	wiphy->available_antennas_tx = phy->mt76->antenna_mask;
-}
-
-static void
-mt7915_mac_init_band(struct mt7915_dev *dev, u8 band)
-{
-	u32 mask, set;
-
-	mt76_rmw_field(dev, MT_TMAC_CTCR0(band),
-		       MT_TMAC_CTCR0_INS_DDLMT_REFTIME, 0x3f);
-	mt76_set(dev, MT_TMAC_CTCR0(band),
-		 MT_TMAC_CTCR0_INS_DDLMT_VHT_SMPDU_EN |
-		 MT_TMAC_CTCR0_INS_DDLMT_EN);
-
-	mask = MT_MDP_RCFR0_MCU_RX_MGMT |
-	       MT_MDP_RCFR0_MCU_RX_CTL_NON_BAR |
-	       MT_MDP_RCFR0_MCU_RX_CTL_BAR;
-	set = FIELD_PREP(MT_MDP_RCFR0_MCU_RX_MGMT, MT_MDP_TO_HIF) |
-	      FIELD_PREP(MT_MDP_RCFR0_MCU_RX_CTL_NON_BAR, MT_MDP_TO_HIF) |
-	      FIELD_PREP(MT_MDP_RCFR0_MCU_RX_CTL_BAR, MT_MDP_TO_HIF);
-	mt76_rmw(dev, MT_MDP_BNRCFR0(band), mask, set);
-
-	mask = MT_MDP_RCFR1_MCU_RX_BYPASS |
-	       MT_MDP_RCFR1_RX_DROPPED_UCAST |
-	       MT_MDP_RCFR1_RX_DROPPED_MCAST;
-	set = FIELD_PREP(MT_MDP_RCFR1_MCU_RX_BYPASS, MT_MDP_TO_HIF) |
-	      FIELD_PREP(MT_MDP_RCFR1_RX_DROPPED_UCAST, MT_MDP_TO_HIF) |
-	      FIELD_PREP(MT_MDP_RCFR1_RX_DROPPED_MCAST, MT_MDP_TO_HIF);
-	mt76_rmw(dev, MT_MDP_BNRCFR1(band), mask, set);
-
-	mt76_rmw_field(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_MAX_RX_LEN, 0x680);
-
-	/* mt7915: disable rx rate report by default due to hw issues */
-	mt76_clear(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_RXD_G5_EN);
-}
-
-static void mt7915_mac_init(struct mt7915_dev *dev)
-{
-	int i;
-	u32 rx_len = is_mt7915(&dev->mt76) ? 0x400 : 0x680;
-
-	/* config pse qid6 wfdma port selection */
-	if (!is_mt7915(&dev->mt76) && dev->hif2)
-		mt76_rmw(dev, MT_WF_PP_TOP_RXQ_WFDMA_CF_5, 0,
-			 MT_WF_PP_TOP_RXQ_QID6_WFDMA_HIF_SEL_MASK);
-
-	mt76_rmw_field(dev, MT_MDP_DCR1, MT_MDP_DCR1_MAX_RX_LEN, rx_len);
-
-	if (!is_mt7915(&dev->mt76))
-		mt76_clear(dev, MT_MDP_DCR2, MT_MDP_DCR2_RX_TRANS_SHORT);
-
-	/* enable hardware de-agg */
-	mt76_set(dev, MT_MDP_DCR0, MT_MDP_DCR0_DAMSDU_EN);
-
-	for (i = 0; i < mt7915_wtbl_size(dev); i++)
-		mt7915_mac_wtbl_update(dev, i,
-				       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-	for (i = 0; i < 2; i++)
-		mt7915_mac_init_band(dev, i);
-
-	if (IS_ENABLED(CONFIG_MT76_LEDS)) {
-		i = dev->mt76.led_pin ? MT_LED_GPIO_MUX3 : MT_LED_GPIO_MUX2;
-		mt76_rmw_field(dev, i, MT_LED_GPIO_SEL_MASK, 4);
-	}
-}
-
-static int mt7915_txbf_init(struct mt7915_dev *dev)
-{
-	int ret;
-
-	if (dev->dbdc_support) {
-		ret = mt7915_mcu_set_txbf(dev, MT_BF_MODULE_UPDATE);
-		if (ret)
-			return ret;
-	}
-
-	/* trigger sounding packets */
-	ret = mt7915_mcu_set_txbf(dev, MT_BF_SOUNDING_ON);
-	if (ret)
-		return ret;
-
-	/* enable eBF */
-	return mt7915_mcu_set_txbf(dev, MT_BF_TYPE_UPDATE);
-}
-
-static struct mt7915_phy *
-mt7915_alloc_ext_phy(struct mt7915_dev *dev)
-{
-	struct mt7915_phy *phy;
-	struct mt76_phy *mphy;
-
-	if (!dev->dbdc_support)
-		return NULL;
-
-	mphy = mt76_alloc_phy(&dev->mt76, sizeof(*phy), &mt7915_ops, MT_BAND1);
-	if (!mphy)
-		return ERR_PTR(-ENOMEM);
-
-	phy = mphy->priv;
-	phy->dev = dev;
-	phy->mt76 = mphy;
-
-	/* Bind main phy to band0 and ext_phy to band1 for dbdc case */
-	phy->band_idx = 1;
-
-	return phy;
-}
-
-static int
-mt7915_register_ext_phy(struct mt7915_dev *dev, struct mt7915_phy *phy)
-{
-	struct mt76_phy *mphy = phy->mt76;
-	int ret;
-
-	INIT_DELAYED_WORK(&mphy->mac_work, mt7915_mac_work);
-
-	mt7915_eeprom_parse_hw_cap(dev, phy);
-
-	memcpy(mphy->macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR2,
-	       ETH_ALEN);
-	/* Make the secondary PHY MAC address local without overlapping with
-	 * the usual MAC address allocation scheme on multiple virtual interfaces
-	 */
-	if (!is_valid_ether_addr(mphy->macaddr)) {
-		memcpy(mphy->macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
-		       ETH_ALEN);
-		mphy->macaddr[0] |= 2;
-		mphy->macaddr[0] ^= BIT(7);
-	}
-	mt76_eeprom_override(mphy);
-
-	/* init wiphy according to mphy and phy */
-	mt7915_init_wiphy(mphy->hw);
-
-	ret = mt76_register_phy(mphy, true, mt76_rates,
-				ARRAY_SIZE(mt76_rates));
-	if (ret)
-		return ret;
-
-	ret = mt7915_thermal_init(phy);
-	if (ret)
-		goto unreg;
-
-	mt7915_init_debugfs(phy);
-
-	return 0;
-
-unreg:
-	mt76_unregister_phy(mphy);
-	return ret;
-}
-
-static void mt7915_init_work(struct work_struct *work)
-{
-	struct mt7915_dev *dev = container_of(work, struct mt7915_dev,
-				 init_work);
-
-	mt7915_mcu_set_eeprom(dev);
-	mt7915_mac_init(dev);
-	mt7915_init_txpower(dev, &dev->mphy.sband_2g.sband);
-	mt7915_init_txpower(dev, &dev->mphy.sband_5g.sband);
-	mt7915_init_txpower(dev, &dev->mphy.sband_6g.sband);
-	mt7915_txbf_init(dev);
-}
-
-void mt7915_wfsys_reset(struct mt7915_dev *dev)
-{
-#define MT_MCU_DUMMY_RANDOM	GENMASK(15, 0)
-#define MT_MCU_DUMMY_DEFAULT	GENMASK(31, 16)
-
-	if (is_mt7915(&dev->mt76)) {
-		u32 val = MT_TOP_PWR_KEY | MT_TOP_PWR_SW_PWR_ON | MT_TOP_PWR_PWR_ON;
-
-		mt76_wr(dev, MT_MCU_WFDMA0_DUMMY_CR, MT_MCU_DUMMY_RANDOM);
-
-		/* change to software control */
-		val |= MT_TOP_PWR_SW_RST;
-		mt76_wr(dev, MT_TOP_PWR_CTRL, val);
-
-		/* reset wfsys */
-		val &= ~MT_TOP_PWR_SW_RST;
-		mt76_wr(dev, MT_TOP_PWR_CTRL, val);
-
-		/* release wfsys then mcu re-executes romcode */
-		val |= MT_TOP_PWR_SW_RST;
-		mt76_wr(dev, MT_TOP_PWR_CTRL, val);
-
-		/* switch to hw control */
-		val &= ~MT_TOP_PWR_SW_RST;
-		val |= MT_TOP_PWR_HW_CTRL;
-		mt76_wr(dev, MT_TOP_PWR_CTRL, val);
-
-		/* check whether mcu resets to default */
-		if (!mt76_poll_msec(dev, MT_MCU_WFDMA0_DUMMY_CR,
-				    MT_MCU_DUMMY_DEFAULT, MT_MCU_DUMMY_DEFAULT,
-				    1000)) {
-			dev_err(dev->mt76.dev, "wifi subsystem reset failure\n");
-			return;
-		}
-
-		/* wfsys reset won't clear host registers */
-		mt76_clear(dev, MT_TOP_MISC, MT_TOP_MISC_FW_STATE);
-
-		msleep(100);
-	} else if (is_mt7986(&dev->mt76)) {
-		mt7986_wmac_disable(dev);
-		msleep(20);
-
-		mt7986_wmac_enable(dev);
-		msleep(20);
-	} else {
-		mt76_set(dev, MT_WF_SUBSYS_RST, 0x1);
-		msleep(20);
-
-		mt76_clear(dev, MT_WF_SUBSYS_RST, 0x1);
-		msleep(20);
-	}
-}
-
-static bool mt7915_band_config(struct mt7915_dev *dev)
-{
-	bool ret = true;
-
-	dev->phy.band_idx = 0;
-
-	if (is_mt7986(&dev->mt76)) {
-		u32 sku = mt7915_check_adie(dev, true);
-
-		/*
-		 * for mt7986, dbdc support is determined by the number
-		 * of adie chips and the main phy is bound to band1 when
-		 * dbdc is disabled.
-		 */
-		if (sku == MT7975_ONE_ADIE || sku == MT7976_ONE_ADIE) {
-			dev->phy.band_idx = 1;
-			ret = false;
-		}
-	} else {
-		ret = is_mt7915(&dev->mt76) ?
-		      !!(mt76_rr(dev, MT_HW_BOUND) & BIT(5)) : true;
-	}
-
-	return ret;
-}
-
-static int
-mt7915_init_hardware(struct mt7915_dev *dev, struct mt7915_phy *phy2)
-{
-	int ret, idx;
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-	mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
-
-	INIT_WORK(&dev->init_work, mt7915_init_work);
-
-	ret = mt7915_dma_init(dev, phy2);
-	if (ret)
-		return ret;
-
-	set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-
-	ret = mt7915_mcu_init(dev);
-	if (ret)
-		return ret;
-
-	ret = mt7915_eeprom_init(dev);
-	if (ret < 0)
-		return ret;
-
-	if (dev->flash_mode) {
-		ret = mt7915_mcu_apply_group_cal(dev);
-		if (ret)
-			return ret;
-	}
-
-	/* Beacon and mgmt frames should occupy wcid 0 */
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7915_WTBL_STA);
-	if (idx)
-		return -ENOSPC;
-
-	dev->mt76.global_wcid.idx = idx;
-	dev->mt76.global_wcid.hw_key_idx = -1;
-	dev->mt76.global_wcid.tx_info |= MT_WCID_TX_INFO_SET;
-	rcu_assign_pointer(dev->mt76.wcid[idx], &dev->mt76.global_wcid);
-
-	return 0;
-}
-
-void mt7915_set_stream_vht_txbf_caps(struct mt7915_phy *phy)
-{
-	int sts;
-	u32 *cap;
-
-	if (!phy->mt76->cap.has_5ghz)
-		return;
-
-	sts = hweight8(phy->mt76->chainmask);
-	cap = &phy->mt76->sband_5g.sband.vht_cap.cap;
-
-	*cap |= IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
-		IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE |
-		(3 << IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT);
-
-	*cap &= ~(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK |
-		  IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
-		  IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE);
-
-	if (sts < 2)
-		return;
-
-	*cap |= IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
-		IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE |
-		FIELD_PREP(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK,
-			   sts - 1);
-}
-
-static void
-mt7915_set_stream_he_txbf_caps(struct mt7915_phy *phy,
-			       struct ieee80211_sta_he_cap *he_cap, int vif)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct ieee80211_he_cap_elem *elem = &he_cap->he_cap_elem;
-	int sts = hweight8(phy->mt76->chainmask);
-	u8 c, sts_160 = sts;
-
-	/* Can do 1/2 of STS in 160Mhz mode for mt7915 */
-	if (is_mt7915(&dev->mt76) && !dev->dbdc_support)
-		sts_160 /= 2;
-
-#ifdef CONFIG_MAC80211_MESH
-	if (vif == NL80211_IFTYPE_MESH_POINT)
-		return;
-#endif
-
-	elem->phy_cap_info[3] &= ~IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER;
-	elem->phy_cap_info[4] &= ~IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER;
-
-	c = IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK |
-	    IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK;
-	elem->phy_cap_info[5] &= ~c;
-
-	c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB |
-	    IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB;
-	elem->phy_cap_info[6] &= ~c;
-
-	elem->phy_cap_info[7] &= ~IEEE80211_HE_PHY_CAP7_MAX_NC_MASK;
-
-	c = IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US;
-	if (!is_mt7915(&dev->mt76))
-		c |= IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO |
-		     IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO;
-	elem->phy_cap_info[2] |= c;
-
-	c = IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE |
-	    IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_4 |
-	    IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_4;
-	elem->phy_cap_info[4] |= c;
-
-	/* do not support NG16 due to spec D4.0 changes subcarrier idx */
-	c = IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_42_SU |
-	    IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU;
-
-	if (vif == NL80211_IFTYPE_STATION)
-		c |= IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO;
-
-	elem->phy_cap_info[6] |= c;
-
-	if (sts < 2)
-		return;
-
-	/* the maximum cap is 4 x 3, (Nr, Nc) = (3, 2) */
-	elem->phy_cap_info[7] |= min_t(int, sts - 1, 2) << 3;
-
-	if (vif != NL80211_IFTYPE_AP)
-		return;
-
-	elem->phy_cap_info[3] |= IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER;
-	elem->phy_cap_info[4] |= IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER;
-
-	/* num_snd_dim
-	 * for mt7915, max supported sts is 2 for bw > 80MHz
-	 */
-	c = FIELD_PREP(IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK,
-		       sts - 1) |
-	    FIELD_PREP(IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK,
-		       sts_160 - 1);
-	elem->phy_cap_info[5] |= c;
-
-	c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB |
-	    IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB;
-	elem->phy_cap_info[6] |= c;
-
-	if (!is_mt7915(&dev->mt76)) {
-		c = IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ |
-		    IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ;
-		elem->phy_cap_info[7] |= c;
-	}
-}
-
-static void
-mt7915_gen_ppe_thresh(u8 *he_ppet, int nss)
-{
-	u8 i, ppet_bits, ppet_size, ru_bit_mask = 0x7; /* HE80 */
-	static const u8 ppet16_ppet8_ru3_ru0[] = {0x1c, 0xc7, 0x71};
-
-	he_ppet[0] = FIELD_PREP(IEEE80211_PPE_THRES_NSS_MASK, nss - 1) |
-		     FIELD_PREP(IEEE80211_PPE_THRES_RU_INDEX_BITMASK_MASK,
-				ru_bit_mask);
-
-	ppet_bits = IEEE80211_PPE_THRES_INFO_PPET_SIZE *
-		    nss * hweight8(ru_bit_mask) * 2;
-	ppet_size = DIV_ROUND_UP(ppet_bits, 8);
-
-	for (i = 0; i < ppet_size - 1; i++)
-		he_ppet[i + 1] = ppet16_ppet8_ru3_ru0[i % 3];
-
-	he_ppet[i + 1] = ppet16_ppet8_ru3_ru0[i % 3] &
-			 (0xff >> (8 - (ppet_bits - 1) % 8));
-}
-
-static int
-mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
-		    struct ieee80211_sband_iftype_data *data)
-{
-	struct mt7915_dev *dev = phy->dev;
-	int i, idx = 0, nss = hweight8(phy->mt76->antenna_mask);
-	u16 mcs_map = 0;
-	u16 mcs_map_160 = 0;
-	u8 nss_160;
-
-	/* Can do 1/2 of NSS streams in 160Mhz mode for mt7915 */
-	if (is_mt7915(&dev->mt76) && !dev->dbdc_support)
-		nss_160 = nss / 2;
-	else
-		nss_160 = nss;
-
-	for (i = 0; i < 8; i++) {
-		if (i < nss)
-			mcs_map |= (IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2));
-		else
-			mcs_map |= (IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2));
-
-		if (i < nss_160)
-			mcs_map_160 |= (IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2));
-		else
-			mcs_map_160 |= (IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2));
-	}
-
-	for (i = 0; i < NUM_NL80211_IFTYPES; i++) {
-		struct ieee80211_sta_he_cap *he_cap = &data[idx].he_cap;
-		struct ieee80211_he_cap_elem *he_cap_elem =
-				&he_cap->he_cap_elem;
-		struct ieee80211_he_mcs_nss_supp *he_mcs =
-				&he_cap->he_mcs_nss_supp;
-
-		switch (i) {
-		case NL80211_IFTYPE_STATION:
-		case NL80211_IFTYPE_AP:
-#ifdef CONFIG_MAC80211_MESH
-		case NL80211_IFTYPE_MESH_POINT:
-#endif
-			break;
-		default:
-			continue;
-		}
-
-		data[idx].types_mask = BIT(i);
-		he_cap->has_he = true;
-
-		he_cap_elem->mac_cap_info[0] =
-			IEEE80211_HE_MAC_CAP0_HTC_HE;
-		he_cap_elem->mac_cap_info[3] =
-			IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
-			IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3;
-		he_cap_elem->mac_cap_info[4] =
-			IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU;
-
-		if (band == NL80211_BAND_2GHZ)
-			he_cap_elem->phy_cap_info[0] =
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G;
-		else
-			he_cap_elem->phy_cap_info[0] =
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G |
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
-
-		he_cap_elem->phy_cap_info[1] =
-			IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD;
-		he_cap_elem->phy_cap_info[2] =
-			IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ |
-			IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ;
-
-		switch (i) {
-		case NL80211_IFTYPE_AP:
-			he_cap_elem->mac_cap_info[0] |=
-				IEEE80211_HE_MAC_CAP0_TWT_RES;
-			he_cap_elem->mac_cap_info[2] |=
-				IEEE80211_HE_MAC_CAP2_BSR;
-			he_cap_elem->mac_cap_info[4] |=
-				IEEE80211_HE_MAC_CAP4_BQR;
-			he_cap_elem->mac_cap_info[5] |=
-				IEEE80211_HE_MAC_CAP5_OM_CTRL_UL_MU_DATA_DIS_RX;
-			he_cap_elem->phy_cap_info[3] |=
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_QPSK |
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_QPSK;
-			he_cap_elem->phy_cap_info[6] |=
-				IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE |
-				IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT;
-			he_cap_elem->phy_cap_info[9] |=
-				IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU |
-				IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU;
-			break;
-		case NL80211_IFTYPE_STATION:
-			he_cap_elem->mac_cap_info[1] |=
-				IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US;
-
-			if (band == NL80211_BAND_2GHZ)
-				he_cap_elem->phy_cap_info[0] |=
-					IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_2G;
-			else
-				he_cap_elem->phy_cap_info[0] |=
-					IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_5G;
-
-			he_cap_elem->phy_cap_info[1] |=
-				IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A |
-				IEEE80211_HE_PHY_CAP1_HE_LTF_AND_GI_FOR_HE_PPDUS_0_8US;
-			he_cap_elem->phy_cap_info[3] |=
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_QPSK |
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_QPSK;
-			he_cap_elem->phy_cap_info[6] |=
-				IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB |
-				IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE |
-				IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT;
-			he_cap_elem->phy_cap_info[7] |=
-				IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP |
-				IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI;
-			he_cap_elem->phy_cap_info[8] |=
-				IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G |
-				IEEE80211_HE_PHY_CAP8_20MHZ_IN_160MHZ_HE_PPDU |
-				IEEE80211_HE_PHY_CAP8_80MHZ_IN_160MHZ_HE_PPDU |
-				IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_484;
-			he_cap_elem->phy_cap_info[9] |=
-				IEEE80211_HE_PHY_CAP9_LONGER_THAN_16_SIGB_OFDM_SYM |
-				IEEE80211_HE_PHY_CAP9_NON_TRIGGERED_CQI_FEEDBACK |
-				IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU |
-				IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU |
-				IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_COMP_SIGB |
-				IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_NON_COMP_SIGB;
-			break;
-		}
-
-		he_mcs->rx_mcs_80 = cpu_to_le16(mcs_map);
-		he_mcs->tx_mcs_80 = cpu_to_le16(mcs_map);
-		he_mcs->rx_mcs_160 = cpu_to_le16(mcs_map_160);
-		he_mcs->tx_mcs_160 = cpu_to_le16(mcs_map_160);
-		he_mcs->rx_mcs_80p80 = cpu_to_le16(mcs_map_160);
-		he_mcs->tx_mcs_80p80 = cpu_to_le16(mcs_map_160);
-
-		mt7915_set_stream_he_txbf_caps(phy, he_cap, i);
-
-		memset(he_cap->ppe_thres, 0, sizeof(he_cap->ppe_thres));
-		if (he_cap_elem->phy_cap_info[6] &
-		    IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT) {
-			mt7915_gen_ppe_thresh(he_cap->ppe_thres, nss);
-		} else {
-			he_cap_elem->phy_cap_info[9] |=
-				IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_16US;
-		}
-
-		if (band == NL80211_BAND_6GHZ) {
-			u16 cap = IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS |
-				  IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS;
-
-			cap |= u16_encode_bits(IEEE80211_HT_MPDU_DENSITY_2,
-					       IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START) |
-			       u16_encode_bits(IEEE80211_VHT_MAX_AMPDU_1024K,
-					       IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP) |
-			       u16_encode_bits(IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454,
-					       IEEE80211_HE_6GHZ_CAP_MAX_MPDU_LEN);
-
-			data[idx].he_6ghz_capa.capa = cpu_to_le16(cap);
-		}
-
-		idx++;
-	}
-
-	return idx;
-}
-
-void mt7915_set_stream_he_caps(struct mt7915_phy *phy)
-{
-	struct ieee80211_sband_iftype_data *data;
-	struct ieee80211_supported_band *band;
-	int n;
-
-	if (phy->mt76->cap.has_2ghz) {
-		data = phy->iftype[NL80211_BAND_2GHZ];
-		n = mt7915_init_he_caps(phy, NL80211_BAND_2GHZ, data);
-
-		band = &phy->mt76->sband_2g.sband;
-		band->iftype_data = data;
-		band->n_iftype_data = n;
-	}
-
-	if (phy->mt76->cap.has_5ghz) {
-		data = phy->iftype[NL80211_BAND_5GHZ];
-		n = mt7915_init_he_caps(phy, NL80211_BAND_5GHZ, data);
-
-		band = &phy->mt76->sband_5g.sband;
-		band->iftype_data = data;
-		band->n_iftype_data = n;
-	}
-
-	if (phy->mt76->cap.has_6ghz) {
-		data = phy->iftype[NL80211_BAND_6GHZ];
-		n = mt7915_init_he_caps(phy, NL80211_BAND_6GHZ, data);
-
-		band = &phy->mt76->sband_6g.sband;
-		band->iftype_data = data;
-		band->n_iftype_data = n;
-	}
-}
-
-static void mt7915_unregister_ext_phy(struct mt7915_dev *dev)
-{
-	struct mt7915_phy *phy = mt7915_ext_phy(dev);
-	struct mt76_phy *mphy = dev->mt76.phys[MT_BAND1];
-
-	if (!phy)
-		return;
-
-	mt7915_unregister_thermal(phy);
-	mt76_unregister_phy(mphy);
-	ieee80211_free_hw(mphy->hw);
-}
-
-static void mt7915_stop_hardware(struct mt7915_dev *dev)
-{
-	mt7915_mcu_exit(dev);
-	mt7915_tx_token_put(dev);
-	mt7915_dma_cleanup(dev);
-	tasklet_disable(&dev->irq_tasklet);
-
-	if (is_mt7986(&dev->mt76))
-		mt7986_wmac_disable(dev);
-}
-
-
-int mt7915_register_device(struct mt7915_dev *dev)
-{
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	struct mt7915_phy *phy2;
-	int ret;
-
-	dev->phy.dev = dev;
-	dev->phy.mt76 = &dev->mt76.phy;
-	dev->mt76.phy.priv = &dev->phy;
-	INIT_WORK(&dev->rc_work, mt7915_mac_sta_rc_work);
-	INIT_DELAYED_WORK(&dev->mphy.mac_work, mt7915_mac_work);
-	INIT_LIST_HEAD(&dev->sta_rc_list);
-	INIT_LIST_HEAD(&dev->sta_poll_list);
-	INIT_LIST_HEAD(&dev->twt_list);
-	spin_lock_init(&dev->sta_poll_lock);
-
-	init_waitqueue_head(&dev->reset_wait);
-	INIT_WORK(&dev->reset_work, mt7915_mac_reset_work);
-
-	dev->dbdc_support = mt7915_band_config(dev);
-
-	phy2 = mt7915_alloc_ext_phy(dev);
-	if (IS_ERR(phy2))
-		return PTR_ERR(phy2);
-
-	ret = mt7915_init_hardware(dev, phy2);
-	if (ret)
-		goto free_phy2;
-
-	mt7915_init_wiphy(hw);
-
-#ifdef CONFIG_NL80211_TESTMODE
-	dev->mt76.test_ops = &mt7915_testmode_ops;
-#endif
-
-	/* init led callbacks */
-	if (IS_ENABLED(CONFIG_MT76_LEDS)) {
-		dev->mt76.led_cdev.brightness_set = mt7915_led_set_brightness;
-		dev->mt76.led_cdev.blink_set = mt7915_led_set_blink;
-	}
-
-	ret = mt76_register_device(&dev->mt76, true, mt76_rates,
-				   ARRAY_SIZE(mt76_rates));
-	if (ret)
-		goto stop_hw;
-
-	ret = mt7915_thermal_init(&dev->phy);
-	if (ret)
-		goto unreg_dev;
-
-	ieee80211_queue_work(mt76_hw(dev), &dev->init_work);
-
-	if (phy2) {
-		ret = mt7915_register_ext_phy(dev, phy2);
-		if (ret)
-			goto unreg_thermal;
-	}
-
-	mt7915_init_debugfs(&dev->phy);
-
-	return 0;
-
-unreg_thermal:
-	mt7915_unregister_thermal(&dev->phy);
-unreg_dev:
-	mt76_unregister_device(&dev->mt76);
-stop_hw:
-	mt7915_stop_hardware(dev);
-free_phy2:
-	if (phy2)
-		ieee80211_free_hw(phy2->mt76->hw);
-	return ret;
-}
-
-void mt7915_unregister_device(struct mt7915_dev *dev)
-{
-	mt7915_unregister_ext_phy(dev);
-	mt7915_unregister_thermal(&dev->phy);
-	mt76_unregister_device(&dev->mt76);
-	mt7915_stop_hardware(dev);
-
-	mt76_free_device(&dev->mt76);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mac.c
deleted file mode 100644
index 66aae55..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mac.c
+++ /dev/null
@@ -1,2187 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/etherdevice.h>
-#include <linux/timekeeping.h>
-#include "mt7915.h"
-#include "../dma.h"
-#include "mac.h"
-#include "mcu.h"
-
-#define to_rssi(field, rxv)	((FIELD_GET(field, rxv) - 220) / 2)
-
-static const struct mt7915_dfs_radar_spec etsi_radar_specs = {
-	.pulse_th = { 110, -10, -80, 40, 5200, 128, 5200 },
-	.radar_pattern = {
-		[5] =  { 1, 0,  6, 32, 28, 0,  990, 5010, 17, 1, 1 },
-		[6] =  { 1, 0,  9, 32, 28, 0,  615, 5010, 27, 1, 1 },
-		[7] =  { 1, 0, 15, 32, 28, 0,  240,  445, 27, 1, 1 },
-		[8] =  { 1, 0, 12, 32, 28, 0,  240,  510, 42, 1, 1 },
-		[9] =  { 1, 1,  0,  0,  0, 0, 2490, 3343, 14, 0, 0, 12, 32, 28, { }, 126 },
-		[10] = { 1, 1,  0,  0,  0, 0, 2490, 3343, 14, 0, 0, 15, 32, 24, { }, 126 },
-		[11] = { 1, 1,  0,  0,  0, 0,  823, 2510, 14, 0, 0, 18, 32, 28, { },  54 },
-		[12] = { 1, 1,  0,  0,  0, 0,  823, 2510, 14, 0, 0, 27, 32, 24, { },  54 },
-	},
-};
-
-static const struct mt7915_dfs_radar_spec fcc_radar_specs = {
-	.pulse_th = { 110, -10, -80, 40, 5200, 128, 5200 },
-	.radar_pattern = {
-		[0] = { 1, 0,  8,  32, 28, 0, 508, 3076, 13, 1,  1 },
-		[1] = { 1, 0, 12,  32, 28, 0, 140,  240, 17, 1,  1 },
-		[2] = { 1, 0,  8,  32, 28, 0, 190,  510, 22, 1,  1 },
-		[3] = { 1, 0,  6,  32, 28, 0, 190,  510, 32, 1,  1 },
-		[4] = { 1, 0,  9, 255, 28, 0, 323,  343, 13, 1, 32 },
-	},
-};
-
-static const struct mt7915_dfs_radar_spec jp_radar_specs = {
-	.pulse_th = { 110, -10, -80, 40, 5200, 128, 5200 },
-	.radar_pattern = {
-		[0] =  { 1, 0,  8,  32, 28, 0,  508, 3076,  13, 1,  1 },
-		[1] =  { 1, 0, 12,  32, 28, 0,  140,  240,  17, 1,  1 },
-		[2] =  { 1, 0,  8,  32, 28, 0,  190,  510,  22, 1,  1 },
-		[3] =  { 1, 0,  6,  32, 28, 0,  190,  510,  32, 1,  1 },
-		[4] =  { 1, 0,  9, 255, 28, 0,  323,  343,  13, 1, 32 },
-		[13] = { 1, 0,  7,  32, 28, 0, 3836, 3856,  14, 1,  1 },
-		[14] = { 1, 0,  6,  32, 28, 0,  615, 5010, 110, 1,  1 },
-		[15] = { 1, 1,  0,   0,  0, 0,   15, 5010, 110, 0,  0, 12, 32, 28 },
-	},
-};
-
-static struct mt76_wcid *mt7915_rx_get_wcid(struct mt7915_dev *dev,
-					    u16 idx, bool unicast)
-{
-	struct mt7915_sta *sta;
-	struct mt76_wcid *wcid;
-
-	if (idx >= ARRAY_SIZE(dev->mt76.wcid))
-		return NULL;
-
-	wcid = rcu_dereference(dev->mt76.wcid[idx]);
-	if (unicast || !wcid)
-		return wcid;
-
-	if (!wcid->sta)
-		return NULL;
-
-	sta = container_of(wcid, struct mt7915_sta, wcid);
-	if (!sta->vif)
-		return NULL;
-
-	return &sta->vif->sta.wcid;
-}
-
-void mt7915_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps)
-{
-}
-
-bool mt7915_mac_wtbl_update(struct mt7915_dev *dev, int idx, u32 mask)
-{
-	mt76_rmw(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_WLAN_IDX,
-		 FIELD_PREP(MT_WTBL_UPDATE_WLAN_IDX, idx) | mask);
-
-	return mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY,
-			 0, 5000);
-}
-
-u32 mt7915_mac_wtbl_lmac_addr(struct mt7915_dev *dev, u16 wcid, u8 dw)
-{
-	mt76_wr(dev, MT_WTBLON_TOP_WDUCR,
-		FIELD_PREP(MT_WTBLON_TOP_WDUCR_GROUP, (wcid >> 7)));
-
-	return MT_WTBL_LMAC_OFFS(wcid, dw);
-}
-
-static void mt7915_mac_sta_poll(struct mt7915_dev *dev)
-{
-	static const u8 ac_to_tid[] = {
-		[IEEE80211_AC_BE] = 0,
-		[IEEE80211_AC_BK] = 1,
-		[IEEE80211_AC_VI] = 4,
-		[IEEE80211_AC_VO] = 6
-	};
-	struct ieee80211_sta *sta;
-	struct mt7915_sta *msta;
-	struct rate_info *rate;
-	u32 tx_time[IEEE80211_NUM_ACS], rx_time[IEEE80211_NUM_ACS];
-	LIST_HEAD(sta_poll_list);
-	int i;
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	list_splice_init(&dev->sta_poll_list, &sta_poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	rcu_read_lock();
-
-	while (true) {
-		bool clear = false;
-		u32 addr, val;
-		u16 idx;
-		u8 bw;
-
-		spin_lock_bh(&dev->sta_poll_lock);
-		if (list_empty(&sta_poll_list)) {
-			spin_unlock_bh(&dev->sta_poll_lock);
-			break;
-		}
-		msta = list_first_entry(&sta_poll_list,
-					struct mt7915_sta, poll_list);
-		list_del_init(&msta->poll_list);
-		spin_unlock_bh(&dev->sta_poll_lock);
-
-		idx = msta->wcid.idx;
-		addr = mt7915_mac_wtbl_lmac_addr(dev, idx, 20);
-
-		for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-			u32 tx_last = msta->airtime_ac[i];
-			u32 rx_last = msta->airtime_ac[i + 4];
-
-			msta->airtime_ac[i] = mt76_rr(dev, addr);
-			msta->airtime_ac[i + 4] = mt76_rr(dev, addr + 4);
-
-			tx_time[i] = msta->airtime_ac[i] - tx_last;
-			rx_time[i] = msta->airtime_ac[i + 4] - rx_last;
-
-			if ((tx_last | rx_last) & BIT(30))
-				clear = true;
-
-			addr += 8;
-		}
-
-		if (clear) {
-			mt7915_mac_wtbl_update(dev, idx,
-					       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-			memset(msta->airtime_ac, 0, sizeof(msta->airtime_ac));
-		}
-
-		if (!msta->wcid.sta)
-			continue;
-
-		sta = container_of((void *)msta, struct ieee80211_sta,
-				   drv_priv);
-		for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-			u8 q = mt76_connac_lmac_mapping(i);
-			u32 tx_cur = tx_time[q];
-			u32 rx_cur = rx_time[q];
-			u8 tid = ac_to_tid[i];
-
-			if (!tx_cur && !rx_cur)
-				continue;
-
-			ieee80211_sta_register_airtime(sta, tid, tx_cur,
-						       rx_cur);
-		}
-
-		/*
-		 * We don't support reading GI info from txs packets.
-		 * For accurate tx status reporting and AQL improvement,
-		 * we need to make sure that flags match so polling GI
-		 * from per-sta counters directly.
-		 */
-		rate = &msta->wcid.rate;
-		addr = mt7915_mac_wtbl_lmac_addr(dev, idx, 7);
-		val = mt76_rr(dev, addr);
-
-		switch (rate->bw) {
-		case RATE_INFO_BW_160:
-			bw = IEEE80211_STA_RX_BW_160;
-			break;
-		case RATE_INFO_BW_80:
-			bw = IEEE80211_STA_RX_BW_80;
-			break;
-		case RATE_INFO_BW_40:
-			bw = IEEE80211_STA_RX_BW_40;
-			break;
-		default:
-			bw = IEEE80211_STA_RX_BW_20;
-			break;
-		}
-
-		if (rate->flags & RATE_INFO_FLAGS_HE_MCS) {
-			u8 offs = 24 + 2 * bw;
-
-			rate->he_gi = (val & (0x3 << offs)) >> offs;
-		} else if (rate->flags &
-			   (RATE_INFO_FLAGS_VHT_MCS | RATE_INFO_FLAGS_MCS)) {
-			if (val & BIT(12 + bw))
-				rate->flags |= RATE_INFO_FLAGS_SHORT_GI;
-			else
-				rate->flags &= ~RATE_INFO_FLAGS_SHORT_GI;
-		}
-	}
-
-	rcu_read_unlock();
-}
-
-static int
-mt7915_mac_fill_rx(struct mt7915_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7915_phy *phy = &dev->phy;
-	struct ieee80211_supported_band *sband;
-	__le32 *rxd = (__le32 *)skb->data;
-	__le32 *rxv = NULL;
-	u32 rxd0 = le32_to_cpu(rxd[0]);
-	u32 rxd1 = le32_to_cpu(rxd[1]);
-	u32 rxd2 = le32_to_cpu(rxd[2]);
-	u32 rxd3 = le32_to_cpu(rxd[3]);
-	u32 rxd4 = le32_to_cpu(rxd[4]);
-	u32 csum_mask = MT_RXD0_NORMAL_IP_SUM | MT_RXD0_NORMAL_UDP_TCP_SUM;
-	bool unicast, insert_ccmp_hdr = false;
-	u8 remove_pad, amsdu_info;
-	u8 mode = 0, qos_ctl = 0;
-	struct mt7915_sta *msta = NULL;
-	u32 csum_status = *(u32 *)skb->cb;
-	bool hdr_trans;
-	u16 hdr_gap;
-	u16 seq_ctrl = 0;
-	__le16 fc = 0;
-	int idx;
-
-	memset(status, 0, sizeof(*status));
-
-	if ((rxd1 & MT_RXD1_NORMAL_BAND_IDX) && !phy->band_idx) {
-		mphy = dev->mt76.phys[MT_BAND1];
-		if (!mphy)
-			return -EINVAL;
-
-		phy = mphy->priv;
-		status->phy_idx = 1;
-	}
-
-	if (!test_bit(MT76_STATE_RUNNING, &mphy->state))
-		return -EINVAL;
-
-	if (rxd2 & MT_RXD2_NORMAL_AMSDU_ERR)
-		return -EINVAL;
-
-	hdr_trans = rxd2 & MT_RXD2_NORMAL_HDR_TRANS;
-	if (hdr_trans && (rxd1 & MT_RXD1_NORMAL_CM))
-		return -EINVAL;
-
-	/* ICV error or CCMP/BIP/WPI MIC error */
-	if (rxd1 & MT_RXD1_NORMAL_ICV_ERR)
-		status->flag |= RX_FLAG_ONLY_MONITOR;
-
-	unicast = FIELD_GET(MT_RXD3_NORMAL_ADDR_TYPE, rxd3) == MT_RXD3_NORMAL_U2M;
-	idx = FIELD_GET(MT_RXD1_NORMAL_WLAN_IDX, rxd1);
-	status->wcid = mt7915_rx_get_wcid(dev, idx, unicast);
-
-	if (status->wcid) {
-		msta = container_of(status->wcid, struct mt7915_sta, wcid);
-		spin_lock_bh(&dev->sta_poll_lock);
-		if (list_empty(&msta->poll_list))
-			list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-		spin_unlock_bh(&dev->sta_poll_lock);
-	}
-
-	status->freq = mphy->chandef.chan->center_freq;
-	status->band = mphy->chandef.chan->band;
-	if (status->band == NL80211_BAND_5GHZ)
-		sband = &mphy->sband_5g.sband;
-	else if (status->band == NL80211_BAND_6GHZ)
-		sband = &mphy->sband_6g.sband;
-	else
-		sband = &mphy->sband_2g.sband;
-
-	if (!sband->channels)
-		return -EINVAL;
-
-	if ((rxd0 & csum_mask) == csum_mask &&
-	    !(csum_status & (BIT(0) | BIT(2) | BIT(3))))
-		skb->ip_summed = CHECKSUM_UNNECESSARY;
-
-	if (rxd1 & MT_RXD1_NORMAL_FCS_ERR)
-		status->flag |= RX_FLAG_FAILED_FCS_CRC;
-
-	if (rxd1 & MT_RXD1_NORMAL_TKIP_MIC_ERR)
-		status->flag |= RX_FLAG_MMIC_ERROR;
-
-	if (FIELD_GET(MT_RXD1_NORMAL_SEC_MODE, rxd1) != 0 &&
-	    !(rxd1 & (MT_RXD1_NORMAL_CLM | MT_RXD1_NORMAL_CM))) {
-		status->flag |= RX_FLAG_DECRYPTED;
-		status->flag |= RX_FLAG_IV_STRIPPED;
-		status->flag |= RX_FLAG_MMIC_STRIPPED | RX_FLAG_MIC_STRIPPED;
-	}
-
-	remove_pad = FIELD_GET(MT_RXD2_NORMAL_HDR_OFFSET, rxd2);
-
-	if (rxd2 & MT_RXD2_NORMAL_MAX_LEN_ERROR)
-		return -EINVAL;
-
-	rxd += 6;
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_4) {
-		u32 v0 = le32_to_cpu(rxd[0]);
-		u32 v2 = le32_to_cpu(rxd[2]);
-
-		fc = cpu_to_le16(FIELD_GET(MT_RXD6_FRAME_CONTROL, v0));
-		qos_ctl = FIELD_GET(MT_RXD8_QOS_CTL, v2);
-		seq_ctrl = FIELD_GET(MT_RXD8_SEQ_CTRL, v2);
-
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_1) {
-		u8 *data = (u8 *)rxd;
-
-		if (status->flag & RX_FLAG_DECRYPTED) {
-			switch (FIELD_GET(MT_RXD1_NORMAL_SEC_MODE, rxd1)) {
-			case MT_CIPHER_AES_CCMP:
-			case MT_CIPHER_CCMP_CCX:
-			case MT_CIPHER_CCMP_256:
-				insert_ccmp_hdr =
-					FIELD_GET(MT_RXD2_NORMAL_FRAG, rxd2);
-				fallthrough;
-			case MT_CIPHER_TKIP:
-			case MT_CIPHER_TKIP_NO_MIC:
-			case MT_CIPHER_GCMP:
-			case MT_CIPHER_GCMP_256:
-				status->iv[0] = data[5];
-				status->iv[1] = data[4];
-				status->iv[2] = data[3];
-				status->iv[3] = data[2];
-				status->iv[4] = data[1];
-				status->iv[5] = data[0];
-				break;
-			default:
-				break;
-			}
-		}
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_2) {
-		status->timestamp = le32_to_cpu(rxd[0]);
-		status->flag |= RX_FLAG_MACTIME_START;
-
-		if (!(rxd2 & MT_RXD2_NORMAL_NON_AMPDU)) {
-			status->flag |= RX_FLAG_AMPDU_DETAILS;
-
-			/* all subframes of an A-MPDU have the same timestamp */
-			if (phy->rx_ampdu_ts != status->timestamp) {
-				if (!++phy->ampdu_ref)
-					phy->ampdu_ref++;
-			}
-			phy->rx_ampdu_ts = status->timestamp;
-
-			status->ampdu_ref = phy->ampdu_ref;
-		}
-
-		rxd += 2;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	/* RXD Group 3 - P-RXV */
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_3) {
-		u32 v0, v1;
-		int ret;
-
-		rxv = rxd;
-		rxd += 2;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-
-		v0 = le32_to_cpu(rxv[0]);
-		v1 = le32_to_cpu(rxv[1]);
-
-		if (v0 & MT_PRXV_HT_AD_CODE)
-			status->enc_flags |= RX_ENC_FLAG_LDPC;
-
-		status->chains = mphy->antenna_mask;
-		status->chain_signal[0] = to_rssi(MT_PRXV_RCPI0, v1);
-		status->chain_signal[1] = to_rssi(MT_PRXV_RCPI1, v1);
-		status->chain_signal[2] = to_rssi(MT_PRXV_RCPI2, v1);
-		status->chain_signal[3] = to_rssi(MT_PRXV_RCPI3, v1);
-
-		/* RXD Group 5 - C-RXV */
-		if (rxd1 & MT_RXD1_NORMAL_GROUP_5) {
-			rxd += 18;
-			if ((u8 *)rxd - skb->data >= skb->len)
-				return -EINVAL;
-		}
-
-		if (!is_mt7915(&dev->mt76) || (rxd1 & MT_RXD1_NORMAL_GROUP_5)) {
-			ret = mt76_connac2_mac_fill_rx_rate(&dev->mt76, status,
-							    sband, rxv, &mode);
-			if (ret < 0)
-				return ret;
-		}
-	}
-
-	amsdu_info = FIELD_GET(MT_RXD4_NORMAL_PAYLOAD_FORMAT, rxd4);
-	status->amsdu = !!amsdu_info;
-	if (status->amsdu) {
-		status->first_amsdu = amsdu_info == MT_RXD4_FIRST_AMSDU_FRAME;
-		status->last_amsdu = amsdu_info == MT_RXD4_LAST_AMSDU_FRAME;
-	}
-
-	hdr_gap = (u8 *)rxd - skb->data + 2 * remove_pad;
-	if (hdr_trans && ieee80211_has_morefrags(fc)) {
-		struct ieee80211_vif *vif;
-		int err;
-
-		if (!msta || !msta->vif)
-			return -EINVAL;
-
-		vif = container_of((void *)msta->vif, struct ieee80211_vif,
-				   drv_priv);
-		err = mt76_connac2_reverse_frag0_hdr_trans(vif, skb, hdr_gap);
-		if (err)
-			return err;
-
-		hdr_trans = false;
-	} else {
-		int pad_start = 0;
-
-		skb_pull(skb, hdr_gap);
-		if (!hdr_trans && status->amsdu) {
-			pad_start = ieee80211_get_hdrlen_from_skb(skb);
-		} else if (hdr_trans && (rxd2 & MT_RXD2_NORMAL_HDR_TRANS_ERROR)) {
-			/*
-			 * When header translation failure is indicated,
-			 * the hardware will insert an extra 2-byte field
-			 * containing the data length after the protocol
-			 * type field. This happens either when the LLC-SNAP
-			 * pattern did not match, or if a VLAN header was
-			 * detected.
-			 */
-			pad_start = 12;
-			if (get_unaligned_be16(skb->data + pad_start) == ETH_P_8021Q)
-				pad_start += 4;
-			else
-				pad_start = 0;
-		}
-
-		if (pad_start) {
-			memmove(skb->data + 2, skb->data, pad_start);
-			skb_pull(skb, 2);
-		}
-	}
-
-	if (!hdr_trans) {
-		struct ieee80211_hdr *hdr;
-
-		if (insert_ccmp_hdr) {
-			u8 key_id = FIELD_GET(MT_RXD1_NORMAL_KEY_ID, rxd1);
-
-			mt76_insert_ccmp_hdr(skb, key_id);
-		}
-
-		hdr = mt76_skb_get_hdr(skb);
-		fc = hdr->frame_control;
-		if (ieee80211_is_data_qos(fc)) {
-			seq_ctrl = le16_to_cpu(hdr->seq_ctrl);
-			qos_ctl = *ieee80211_get_qos_ctl(hdr);
-		}
-	} else {
-		status->flag |= RX_FLAG_8023;
-	}
-
-	if (rxv && mode >= MT_PHY_TYPE_HE_SU && !(status->flag & RX_FLAG_8023))
-		mt76_connac2_mac_decode_he_radiotap(&dev->mt76, skb, rxv, mode);
-
-	if (!status->wcid || !ieee80211_is_data_qos(fc))
-		return 0;
-
-	status->aggr = unicast &&
-		       !ieee80211_is_qos_nullfunc(fc);
-	status->qos_ctl = qos_ctl;
-	status->seqno = IEEE80211_SEQ_TO_SN(seq_ctrl);
-
-	return 0;
-}
-
-static void
-mt7915_mac_fill_rx_vector(struct mt7915_dev *dev, struct sk_buff *skb)
-{
-#ifdef CONFIG_NL80211_TESTMODE
-	struct mt7915_phy *phy = &dev->phy;
-	__le32 *rxd = (__le32 *)skb->data;
-	__le32 *rxv_hdr = rxd + 2;
-	__le32 *rxv = rxd + 4;
-	u32 rcpi, ib_rssi, wb_rssi, v20, v21;
-	u8 band_idx;
-	s32 foe;
-	u8 snr;
-	int i;
-
-	band_idx = le32_get_bits(rxv_hdr[1], MT_RXV_HDR_BAND_IDX);
-	if (band_idx && !phy->band_idx) {
-		phy = mt7915_ext_phy(dev);
-		if (!phy)
-			goto out;
-	}
-
-	rcpi = le32_to_cpu(rxv[6]);
-	ib_rssi = le32_to_cpu(rxv[7]);
-	wb_rssi = le32_to_cpu(rxv[8]) >> 5;
-
-	for (i = 0; i < 4; i++, rcpi >>= 8, ib_rssi >>= 8, wb_rssi >>= 9) {
-		if (i == 3)
-			wb_rssi = le32_to_cpu(rxv[9]);
-
-		phy->test.last_rcpi[i] = rcpi & 0xff;
-		phy->test.last_ib_rssi[i] = ib_rssi & 0xff;
-		phy->test.last_wb_rssi[i] = wb_rssi & 0xff;
-	}
-
-	v20 = le32_to_cpu(rxv[20]);
-	v21 = le32_to_cpu(rxv[21]);
-
-	foe = FIELD_GET(MT_CRXV_FOE_LO, v20) |
-	      (FIELD_GET(MT_CRXV_FOE_HI, v21) << MT_CRXV_FOE_SHIFT);
-
-	snr = FIELD_GET(MT_CRXV_SNR, v20) - 16;
-
-	phy->test.last_freq_offset = foe;
-	phy->test.last_snr = snr;
-out:
-#endif
-	dev_kfree_skb(skb);
-}
-
-static void
-mt7915_mac_write_txwi_tm(struct mt7915_phy *phy, __le32 *txwi,
-			 struct sk_buff *skb)
-{
-#ifdef CONFIG_NL80211_TESTMODE
-	struct mt76_testmode_data *td = &phy->mt76->test;
-	const struct ieee80211_rate *r;
-	u8 bw, mode, nss = td->tx_rate_nss;
-	u8 rate_idx = td->tx_rate_idx;
-	u16 rateval = 0;
-	u32 val;
-	bool cck = false;
-	int band;
-
-	if (skb != phy->mt76->test.tx_skb)
-		return;
-
-	switch (td->tx_rate_mode) {
-	case MT76_TM_TX_MODE_HT:
-		nss = 1 + (rate_idx >> 3);
-		mode = MT_PHY_TYPE_HT;
-		break;
-	case MT76_TM_TX_MODE_VHT:
-		mode = MT_PHY_TYPE_VHT;
-		break;
-	case MT76_TM_TX_MODE_HE_SU:
-		mode = MT_PHY_TYPE_HE_SU;
-		break;
-	case MT76_TM_TX_MODE_HE_EXT_SU:
-		mode = MT_PHY_TYPE_HE_EXT_SU;
-		break;
-	case MT76_TM_TX_MODE_HE_TB:
-		mode = MT_PHY_TYPE_HE_TB;
-		break;
-	case MT76_TM_TX_MODE_HE_MU:
-		mode = MT_PHY_TYPE_HE_MU;
-		break;
-	case MT76_TM_TX_MODE_CCK:
-		cck = true;
-		fallthrough;
-	case MT76_TM_TX_MODE_OFDM:
-		band = phy->mt76->chandef.chan->band;
-		if (band == NL80211_BAND_2GHZ && !cck)
-			rate_idx += 4;
-
-		r = &phy->mt76->hw->wiphy->bands[band]->bitrates[rate_idx];
-		val = cck ? r->hw_value_short : r->hw_value;
-
-		mode = val >> 8;
-		rate_idx = val & 0xff;
-		break;
-	default:
-		mode = MT_PHY_TYPE_OFDM;
-		break;
-	}
-
-	switch (phy->mt76->chandef.width) {
-	case NL80211_CHAN_WIDTH_40:
-		bw = 1;
-		break;
-	case NL80211_CHAN_WIDTH_80:
-		bw = 2;
-		break;
-	case NL80211_CHAN_WIDTH_80P80:
-	case NL80211_CHAN_WIDTH_160:
-		bw = 3;
-		break;
-	default:
-		bw = 0;
-		break;
-	}
-
-	if (td->tx_rate_stbc && nss == 1) {
-		nss++;
-		rateval |= MT_TX_RATE_STBC;
-	}
-
-	rateval |= FIELD_PREP(MT_TX_RATE_IDX, rate_idx) |
-		   FIELD_PREP(MT_TX_RATE_MODE, mode) |
-		   FIELD_PREP(MT_TX_RATE_NSS, nss - 1);
-
-	txwi[2] |= cpu_to_le32(MT_TXD2_FIX_RATE);
-
-	le32p_replace_bits(&txwi[3], 1, MT_TXD3_REM_TX_COUNT);
-	if (td->tx_rate_mode < MT76_TM_TX_MODE_HT)
-		txwi[3] |= cpu_to_le32(MT_TXD3_BA_DISABLE);
-
-	val = MT_TXD6_FIXED_BW |
-	      FIELD_PREP(MT_TXD6_BW, bw) |
-	      FIELD_PREP(MT_TXD6_TX_RATE, rateval) |
-	      FIELD_PREP(MT_TXD6_SGI, td->tx_rate_sgi);
-
-	/* for HE_SU/HE_EXT_SU PPDU
-	 * - 1x, 2x, 4x LTF + 0.8us GI
-	 * - 2x LTF + 1.6us GI, 4x LTF + 3.2us GI
-	 * for HE_MU PPDU
-	 * - 2x, 4x LTF + 0.8us GI
-	 * - 2x LTF + 1.6us GI, 4x LTF + 3.2us GI
-	 * for HE_TB PPDU
-	 * - 1x, 2x LTF + 1.6us GI
-	 * - 4x LTF + 3.2us GI
-	 */
-	if (mode >= MT_PHY_TYPE_HE_SU)
-		val |= FIELD_PREP(MT_TXD6_HELTF, td->tx_ltf);
-
-	if (td->tx_rate_ldpc || (bw > 0 && mode >= MT_PHY_TYPE_HE_SU))
-		val |= MT_TXD6_LDPC;
-
-	txwi[3] &= ~cpu_to_le32(MT_TXD3_SN_VALID);
-	txwi[6] |= cpu_to_le32(val);
-	txwi[7] |= cpu_to_le32(FIELD_PREP(MT_TXD7_SPE_IDX,
-					  phy->test.spe_idx));
-#endif
-}
-
-void mt7915_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
-			   struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
-			   struct ieee80211_key_conf *key,
-			   enum mt76_txq_id qid, u32 changed)
-{
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	u8 phy_idx = (info->hw_queue & MT_TX_HW_QUEUE_PHY) >> 2;
-	struct mt76_phy *mphy = &dev->phy;
-
-	if (phy_idx && dev->phys[MT_BAND1])
-		mphy = dev->phys[MT_BAND1];
-
-	mt76_connac2_mac_write_txwi(dev, txwi, skb, wcid, key, pid, qid, changed);
-
-	if (mt76_testmode_enabled(mphy))
-		mt7915_mac_write_txwi_tm(mphy->priv, txwi, skb);
-}
-
-int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-			  enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			  struct ieee80211_sta *sta,
-			  struct mt76_tx_info *tx_info)
-{
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx_info->skb->data;
-	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
-	struct ieee80211_key_conf *key = info->control.hw_key;
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt76_connac_fw_txp *txp;
-	struct mt76_txwi_cache *t;
-	int id, i, nbuf = tx_info->nbuf - 1;
-	u8 *txwi = (u8 *)txwi_ptr;
-	int pid;
-
-	if (unlikely(tx_info->skb->len <= ETH_HLEN))
-		return -EINVAL;
-
-	if (!wcid)
-		wcid = &dev->mt76.global_wcid;
-
-	if (sta) {
-		struct mt7915_sta *msta;
-
-		msta = (struct mt7915_sta *)sta->drv_priv;
-
-		if (time_after(jiffies, msta->jiffies + HZ / 4)) {
-			info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
-			msta->jiffies = jiffies;
-		}
-	}
-
-	t = (struct mt76_txwi_cache *)(txwi + mdev->drv->txwi_size);
-	t->skb = tx_info->skb;
-
-	id = mt76_token_consume(mdev, &t);
-	if (id < 0)
-		return id;
-
-	pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
-	mt7915_mac_write_txwi(mdev, txwi_ptr, tx_info->skb, wcid, pid, key,
-			      qid, 0);
-
-	txp = (struct mt76_connac_fw_txp *)(txwi + MT_TXD_SIZE);
-	for (i = 0; i < nbuf; i++) {
-		txp->buf[i] = cpu_to_le32(tx_info->buf[i + 1].addr);
-		txp->len[i] = cpu_to_le16(tx_info->buf[i + 1].len);
-	}
-	txp->nbuf = nbuf;
-
-	txp->flags = cpu_to_le16(MT_CT_INFO_APPLY_TXD | MT_CT_INFO_FROM_HOST);
-
-	if (!key)
-		txp->flags |= cpu_to_le16(MT_CT_INFO_NONE_CIPHER_FRAME);
-
-	if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) &&
-	    ieee80211_is_mgmt(hdr->frame_control))
-		txp->flags |= cpu_to_le16(MT_CT_INFO_MGMT_FRAME);
-
-	if (vif) {
-		struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-
-		txp->bss_idx = mvif->mt76.idx;
-	}
-
-	txp->token = cpu_to_le16(id);
-	if (test_bit(MT_WCID_FLAG_4ADDR, &wcid->flags))
-		txp->rept_wds_wcid = cpu_to_le16(wcid->idx);
-	else
-		txp->rept_wds_wcid = cpu_to_le16(0x3ff);
-	tx_info->skb = DMA_DUMMY_DATA;
-
-	/* pass partial skb header to fw */
-	tx_info->buf[1].len = MT_CT_PARSE_LEN;
-	tx_info->buf[1].skip_unmap = true;
-	tx_info->nbuf = MT_CT_DMA_BUF_NUM;
-
-	return 0;
-}
-
-u32 mt7915_wed_init_buf(void *ptr, dma_addr_t phys, int token_id)
-{
-	struct mt76_connac_fw_txp *txp = ptr + MT_TXD_SIZE;
-	__le32 *txwi = ptr;
-	u32 val;
-
-	memset(ptr, 0, MT_TXD_SIZE + sizeof(*txp));
-
-	val = FIELD_PREP(MT_TXD0_TX_BYTES, MT_TXD_SIZE) |
-	      FIELD_PREP(MT_TXD0_PKT_FMT, MT_TX_TYPE_CT);
-	txwi[0] = cpu_to_le32(val);
-
-	val = MT_TXD1_LONG_FORMAT |
-	      FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_3);
-	txwi[1] = cpu_to_le32(val);
-
-	txp->token = cpu_to_le16(token_id);
-	txp->nbuf = 1;
-	txp->buf[0] = cpu_to_le32(phys + MT_TXD_SIZE + sizeof(*txp));
-
-	return MT_TXD_SIZE + sizeof(*txp);
-}
-
-static void
-mt7915_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
-{
-	struct mt7915_sta *msta;
-	u16 fc, tid;
-	u32 val;
-
-	if (!sta || !(sta->ht_cap.ht_supported || sta->he_cap.has_he))
-		return;
-
-	tid = le32_get_bits(txwi[1], MT_TXD1_TID);
-	if (tid >= 6) /* skip VO queue */
-		return;
-
-	val = le32_to_cpu(txwi[2]);
-	fc = FIELD_GET(MT_TXD2_FRAME_TYPE, val) << 2 |
-	     FIELD_GET(MT_TXD2_SUB_TYPE, val) << 4;
-	if (unlikely(fc != (IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_DATA)))
-		return;
-
-	msta = (struct mt7915_sta *)sta->drv_priv;
-	if (!test_and_set_bit(tid, &msta->ampdu_state))
-		ieee80211_start_tx_ba_session(sta, tid, 0);
-}
-
-static void
-mt7915_txwi_free(struct mt7915_dev *dev, struct mt76_txwi_cache *t,
-		 struct ieee80211_sta *sta, struct list_head *free_list)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt7915_sta *msta;
-	struct mt76_wcid *wcid;
-	__le32 *txwi;
-	u16 wcid_idx;
-
-	mt76_connac_txp_skb_unmap(mdev, t);
-	if (!t->skb)
-		goto out;
-
-	txwi = (__le32 *)mt76_get_txwi_ptr(mdev, t);
-	if (sta) {
-		wcid = (struct mt76_wcid *)sta->drv_priv;
-		wcid_idx = wcid->idx;
-	} else {
-		wcid_idx = le32_get_bits(txwi[1], MT_TXD1_WLAN_IDX);
-		wcid = rcu_dereference(dev->mt76.wcid[wcid_idx]);
-
-		if (wcid && wcid->sta) {
-			msta = container_of(wcid, struct mt7915_sta, wcid);
-			sta = container_of((void *)msta, struct ieee80211_sta,
-					  drv_priv);
-			spin_lock_bh(&dev->sta_poll_lock);
-			if (list_empty(&msta->poll_list))
-				list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-			spin_unlock_bh(&dev->sta_poll_lock);
-		}
-	}
-
-	if (sta && likely(t->skb->protocol != cpu_to_be16(ETH_P_PAE)))
-		mt7915_tx_check_aggr(sta, txwi);
-
-	__mt76_tx_complete_skb(mdev, wcid_idx, t->skb, free_list);
-
-out:
-	t->skb = NULL;
-	mt76_put_txwi(mdev, t);
-}
-
-static void
-mt7915_mac_tx_free_prepare(struct mt7915_dev *dev)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt76_phy *mphy_ext = mdev->phys[MT_BAND1];
-
-	/* clean DMA queues and unmap buffers first */
-	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_PSD], false);
-	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_BE], false);
-	if (mphy_ext) {
-		mt76_queue_tx_cleanup(dev, mphy_ext->q_tx[MT_TXQ_PSD], false);
-		mt76_queue_tx_cleanup(dev, mphy_ext->q_tx[MT_TXQ_BE], false);
-	}
-}
-
-static void
-mt7915_mac_tx_free_done(struct mt7915_dev *dev,
-			struct list_head *free_list, bool wake)
-{
-	struct sk_buff *skb, *tmp;
-
-	mt7915_mac_sta_poll(dev);
-
-	if (wake)
-		mt76_set_tx_blocked(&dev->mt76, false);
-
-	mt76_worker_schedule(&dev->mt76.tx_worker);
-
-	list_for_each_entry_safe(skb, tmp, free_list, list) {
-		skb_list_del_init(skb);
-		napi_consume_skb(skb, 1);
-	}
-}
-
-static void
-mt7915_mac_tx_free(struct mt7915_dev *dev, void *data, int len)
-{
-	struct mt76_connac_tx_free *free = data;
-	__le32 *tx_info = (__le32 *)(data + sizeof(*free));
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt76_txwi_cache *txwi;
-	struct ieee80211_sta *sta = NULL;
-	LIST_HEAD(free_list);
-	void *end = data + len;
-	bool v3, wake = false;
-	u16 total, count = 0;
-	u32 txd = le32_to_cpu(free->txd);
-	__le32 *cur_info;
-
-	mt7915_mac_tx_free_prepare(dev);
-
-	total = le16_get_bits(free->ctrl, MT_TX_FREE_MSDU_CNT);
-	v3 = (FIELD_GET(MT_TX_FREE_VER, txd) == 0x4);
-
-	for (cur_info = tx_info; count < total; cur_info++) {
-		u32 msdu, info;
-		u8 i;
-
-		if (WARN_ON_ONCE((void *)cur_info >= end))
-			return;
-
-		/*
-		 * 1'b1: new wcid pair.
-		 * 1'b0: msdu_id with the same 'wcid pair' as above.
-		 */
-		info = le32_to_cpu(*cur_info);
-		if (info & MT_TX_FREE_PAIR) {
-			struct mt7915_sta *msta;
-			struct mt76_wcid *wcid;
-			u16 idx;
-
-			idx = FIELD_GET(MT_TX_FREE_WLAN_ID, info);
-			wcid = rcu_dereference(dev->mt76.wcid[idx]);
-			sta = wcid_to_sta(wcid);
-			if (!sta)
-				continue;
-
-			msta = container_of(wcid, struct mt7915_sta, wcid);
-			spin_lock_bh(&dev->sta_poll_lock);
-			if (list_empty(&msta->poll_list))
-				list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-			spin_unlock_bh(&dev->sta_poll_lock);
-			continue;
-		}
-
-		if (v3 && (info & MT_TX_FREE_MPDU_HEADER))
-			continue;
-
-		for (i = 0; i < 1 + v3; i++) {
-			if (v3) {
-				msdu = (info >> (15 * i)) & MT_TX_FREE_MSDU_ID_V3;
-				if (msdu == MT_TX_FREE_MSDU_ID_V3)
-					continue;
-			} else {
-				msdu = FIELD_GET(MT_TX_FREE_MSDU_ID, info);
-			}
-			count++;
-			txwi = mt76_token_release(mdev, msdu, &wake);
-			if (!txwi)
-				continue;
-
-			mt7915_txwi_free(dev, txwi, sta, &free_list);
-		}
-	}
-
-	mt7915_mac_tx_free_done(dev, &free_list, wake);
-}
-
-static void
-mt7915_mac_tx_free_v0(struct mt7915_dev *dev, void *data, int len)
-{
-	struct mt76_connac_tx_free *free = data;
-	__le16 *info = (__le16 *)(data + sizeof(*free));
-	struct mt76_dev *mdev = &dev->mt76;
-	void *end = data + len;
-	LIST_HEAD(free_list);
-	bool wake = false;
-	u8 i, count;
-
-	mt7915_mac_tx_free_prepare(dev);
-
-	count = FIELD_GET(MT_TX_FREE_MSDU_CNT_V0, le16_to_cpu(free->ctrl));
-	if (WARN_ON_ONCE((void *)&info[count] > end))
-		return;
-
-	for (i = 0; i < count; i++) {
-		struct mt76_txwi_cache *txwi;
-		u16 msdu = le16_to_cpu(info[i]);
-
-		txwi = mt76_token_release(mdev, msdu, &wake);
-		if (!txwi)
-			continue;
-
-		mt7915_txwi_free(dev, txwi, NULL, &free_list);
-	}
-
-	mt7915_mac_tx_free_done(dev, &free_list, wake);
-}
-
-static void mt7915_mac_add_txs(struct mt7915_dev *dev, void *data)
-{
-	struct mt7915_sta *msta = NULL;
-	struct mt76_wcid *wcid;
-	__le32 *txs_data = data;
-	u16 wcidx;
-	u8 pid;
-
-	if (le32_get_bits(txs_data[0], MT_TXS0_TXS_FORMAT) > 1)
-		return;
-
-	wcidx = le32_get_bits(txs_data[2], MT_TXS2_WCID);
-	pid = le32_get_bits(txs_data[3], MT_TXS3_PID);
-
-	if (pid < MT_PACKET_ID_WED)
-		return;
-
-	if (wcidx >= mt7915_wtbl_size(dev))
-		return;
-
-	rcu_read_lock();
-
-	wcid = rcu_dereference(dev->mt76.wcid[wcidx]);
-	if (!wcid)
-		goto out;
-
-	msta = container_of(wcid, struct mt7915_sta, wcid);
-
-	if (pid == MT_PACKET_ID_WED)
-		mt76_connac2_mac_fill_txs(&dev->mt76, wcid, txs_data);
-	else
-		mt76_connac2_mac_add_txs_skb(&dev->mt76, wcid, pid, txs_data);
-
-	if (!wcid->sta)
-		goto out;
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (list_empty(&msta->poll_list))
-		list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-out:
-	rcu_read_unlock();
-}
-
-bool mt7915_rx_check(struct mt76_dev *mdev, void *data, int len)
-{
-	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
-	__le32 *rxd = (__le32 *)data;
-	__le32 *end = (__le32 *)&rxd[len / 4];
-	enum rx_pkt_type type;
-
-	type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
-
-	switch (type) {
-	case PKT_TYPE_TXRX_NOTIFY:
-		mt7915_mac_tx_free(dev, data, len);
-		return false;
-	case PKT_TYPE_TXRX_NOTIFY_V0:
-		mt7915_mac_tx_free_v0(dev, data, len);
-		return false;
-	case PKT_TYPE_TXS:
-		for (rxd += 2; rxd + 8 <= end; rxd += 8)
-			mt7915_mac_add_txs(dev, rxd);
-		return false;
-	case PKT_TYPE_RX_FW_MONITOR:
-		mt7915_debugfs_rx_fw_monitor(dev, data, len);
-		return false;
-	default:
-		return true;
-	}
-}
-
-void mt7915_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			 struct sk_buff *skb)
-{
-	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
-	__le32 *rxd = (__le32 *)skb->data;
-	__le32 *end = (__le32 *)&skb->data[skb->len];
-	enum rx_pkt_type type;
-
-	type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
-
-	switch (type) {
-	case PKT_TYPE_TXRX_NOTIFY:
-		mt7915_mac_tx_free(dev, skb->data, skb->len);
-		napi_consume_skb(skb, 1);
-		break;
-	case PKT_TYPE_TXRX_NOTIFY_V0:
-		mt7915_mac_tx_free_v0(dev, skb->data, skb->len);
-		napi_consume_skb(skb, 1);
-		break;
-	case PKT_TYPE_RX_EVENT:
-		mt7915_mcu_rx_event(dev, skb);
-		break;
-	case PKT_TYPE_TXRXV:
-		mt7915_mac_fill_rx_vector(dev, skb);
-		break;
-	case PKT_TYPE_TXS:
-		for (rxd += 2; rxd + 8 <= end; rxd += 8)
-			mt7915_mac_add_txs(dev, rxd);
-		dev_kfree_skb(skb);
-		break;
-	case PKT_TYPE_RX_FW_MONITOR:
-		mt7915_debugfs_rx_fw_monitor(dev, skb->data, skb->len);
-		dev_kfree_skb(skb);
-		break;
-	case PKT_TYPE_NORMAL:
-		if (!mt7915_mac_fill_rx(dev, skb)) {
-			mt76_rx(&dev->mt76, q, skb);
-			return;
-		}
-		fallthrough;
-	default:
-		dev_kfree_skb(skb);
-		break;
-	}
-}
-
-void mt7915_mac_cca_stats_reset(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	u32 reg = MT_WF_PHY_RX_CTRL1(phy->band_idx);
-
-	mt76_clear(dev, reg, MT_WF_PHY_RX_CTRL1_STSCNT_EN);
-	mt76_set(dev, reg, BIT(11) | BIT(9));
-}
-
-void mt7915_mac_reset_counters(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	int i;
-
-	for (i = 0; i < 4; i++) {
-		mt76_rr(dev, MT_TX_AGG_CNT(phy->band_idx, i));
-		mt76_rr(dev, MT_TX_AGG_CNT2(phy->band_idx, i));
-	}
-
-	i = 0;
-	phy->mt76->survey_time = ktime_get_boottime();
-	if (phy->band_idx)
-		i = ARRAY_SIZE(dev->mt76.aggr_stats) / 2;
-
-	memset(&dev->mt76.aggr_stats[i], 0, sizeof(dev->mt76.aggr_stats) / 2);
-
-	/* reset airtime counters */
-	mt76_set(dev, MT_WF_RMAC_MIB_AIRTIME0(phy->band_idx),
-		 MT_WF_RMAC_MIB_RXTIME_CLR);
-
-	mt7915_mcu_get_chan_mib_info(phy, true);
-}
-
-void mt7915_mac_set_timing(struct mt7915_phy *phy)
-{
-	s16 coverage_class = phy->coverage_class;
-	struct mt7915_dev *dev = phy->dev;
-	struct mt7915_phy *ext_phy = mt7915_ext_phy(dev);
-	u32 val, reg_offset;
-	u32 cck = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 231) |
-		  FIELD_PREP(MT_TIMEOUT_VAL_CCA, 48);
-	u32 ofdm = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 60) |
-		   FIELD_PREP(MT_TIMEOUT_VAL_CCA, 28);
-	int eifs_ofdm = 360, sifs = 10, offset;
-	bool a_band = !(phy->mt76->chandef.chan->band == NL80211_BAND_2GHZ);
-
-	if (!test_bit(MT76_STATE_RUNNING, &phy->mt76->state))
-		return;
-
-	if (ext_phy)
-		coverage_class = max_t(s16, dev->phy.coverage_class,
-				       ext_phy->coverage_class);
-
-	mt76_set(dev, MT_ARB_SCR(phy->band_idx),
-		 MT_ARB_SCR_TX_DISABLE | MT_ARB_SCR_RX_DISABLE);
-	udelay(1);
-
-	offset = 3 * coverage_class;
-	reg_offset = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, offset) |
-		     FIELD_PREP(MT_TIMEOUT_VAL_CCA, offset);
-
-	if (!is_mt7915(&dev->mt76)) {
-		if (!a_band) {
-			mt76_wr(dev, MT_TMAC_ICR1(phy->band_idx),
-				FIELD_PREP(MT_IFS_EIFS_CCK, 314));
-			eifs_ofdm = 78;
-		} else {
-			eifs_ofdm = 84;
-		}
-	} else if (a_band) {
-		sifs = 16;
-	}
-
-	mt76_wr(dev, MT_TMAC_CDTR(phy->band_idx), cck + reg_offset);
-	mt76_wr(dev, MT_TMAC_ODTR(phy->band_idx), ofdm + reg_offset);
-	mt76_wr(dev, MT_TMAC_ICR0(phy->band_idx),
-		FIELD_PREP(MT_IFS_EIFS_OFDM, eifs_ofdm) |
-		FIELD_PREP(MT_IFS_RIFS, 2) |
-		FIELD_PREP(MT_IFS_SIFS, sifs) |
-		FIELD_PREP(MT_IFS_SLOT, phy->slottime));
-
-	if (phy->slottime < 20 || a_band)
-		val = MT7915_CFEND_RATE_DEFAULT;
-	else
-		val = MT7915_CFEND_RATE_11B;
-
-	mt76_rmw_field(dev, MT_AGG_ACR0(phy->band_idx), MT_AGG_ACR_CFEND_RATE, val);
-	mt76_clear(dev, MT_ARB_SCR(phy->band_idx),
-		   MT_ARB_SCR_TX_DISABLE | MT_ARB_SCR_RX_DISABLE);
-}
-
-void mt7915_mac_enable_nf(struct mt7915_dev *dev, bool ext_phy)
-{
-	u32 reg;
-
-	reg = is_mt7915(&dev->mt76) ? MT_WF_PHY_RXTD12(ext_phy) :
-		MT_WF_PHY_RXTD12_MT7916(ext_phy);
-	mt76_set(dev, reg,
-		 MT_WF_PHY_RXTD12_IRPI_SW_CLR_ONLY |
-		 MT_WF_PHY_RXTD12_IRPI_SW_CLR);
-
-	reg = is_mt7915(&dev->mt76) ? MT_WF_PHY_RX_CTRL1(ext_phy) :
-		MT_WF_PHY_RX_CTRL1_MT7916(ext_phy);
-	mt76_set(dev, reg, FIELD_PREP(MT_WF_PHY_RX_CTRL1_IPI_EN, 0x5));
-}
-
-static u8
-mt7915_phy_get_nf(struct mt7915_phy *phy, int idx)
-{
-	static const u8 nf_power[] = { 92, 89, 86, 83, 80, 75, 70, 65, 60, 55, 52 };
-	struct mt7915_dev *dev = phy->dev;
-	u32 val, sum = 0, n = 0;
-	int nss, i;
-
-	for (nss = 0; nss < hweight8(phy->mt76->chainmask); nss++) {
-		u32 reg = is_mt7915(&dev->mt76) ?
-			MT_WF_IRPI_NSS(0, nss + (idx << dev->dbdc_support)) :
-			MT_WF_IRPI_NSS_MT7916(idx, nss);
-
-		for (i = 0; i < ARRAY_SIZE(nf_power); i++, reg += 4) {
-			val = mt76_rr(dev, reg);
-			sum += val * nf_power[i];
-			n += val;
-		}
-	}
-
-	if (!n)
-		return 0;
-
-	return sum / n;
-}
-
-void mt7915_update_channel(struct mt76_phy *mphy)
-{
-	struct mt7915_phy *phy = (struct mt7915_phy *)mphy->priv;
-	struct mt76_channel_state *state = mphy->chan_state;
-	int nf;
-
-	mt7915_mcu_get_chan_mib_info(phy, false);
-
-	nf = mt7915_phy_get_nf(phy, phy->band_idx);
-	if (!phy->noise)
-		phy->noise = nf << 4;
-	else if (nf)
-		phy->noise += nf - (phy->noise >> 4);
-
-	state->noise = -(phy->noise >> 4);
-}
-
-static bool
-mt7915_wait_reset_state(struct mt7915_dev *dev, u32 state)
-{
-	bool ret;
-
-	ret = wait_event_timeout(dev->reset_wait,
-				 (READ_ONCE(dev->reset_state) & state),
-				 MT7915_RESET_TIMEOUT);
-
-	WARN(!ret, "Timeout waiting for MCU reset state %x\n", state);
-	return ret;
-}
-
-static void
-mt7915_update_vif_beacon(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	struct ieee80211_hw *hw = priv;
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_ADHOC:
-	case NL80211_IFTYPE_AP:
-		mt7915_mcu_add_beacon(hw, vif, vif->bss_conf.enable_beacon,
-				      BSS_CHANGED_BEACON_ENABLED);
-		break;
-	default:
-		break;
-	}
-}
-
-static void
-mt7915_update_beacons(struct mt7915_dev *dev)
-{
-	struct mt76_phy *mphy_ext = dev->mt76.phys[MT_BAND1];
-
-	ieee80211_iterate_active_interfaces(dev->mt76.hw,
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		mt7915_update_vif_beacon, dev->mt76.hw);
-
-	if (!mphy_ext)
-		return;
-
-	ieee80211_iterate_active_interfaces(mphy_ext->hw,
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		mt7915_update_vif_beacon, mphy_ext->hw);
-}
-
-static void
-mt7915_dma_reset(struct mt7915_dev *dev)
-{
-	struct mt76_phy *mphy_ext = dev->mt76.phys[MT_BAND1];
-	u32 hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
-	int i;
-
-	mt76_clear(dev, MT_WFDMA0_GLO_CFG,
-		   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-		   MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-
-	if (is_mt7915(&dev->mt76))
-		mt76_clear(dev, MT_WFDMA1_GLO_CFG,
-			   MT_WFDMA1_GLO_CFG_TX_DMA_EN |
-			   MT_WFDMA1_GLO_CFG_RX_DMA_EN);
-	if (dev->hif2) {
-		mt76_clear(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
-			   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-			   MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-
-		if (is_mt7915(&dev->mt76))
-			mt76_clear(dev, MT_WFDMA1_GLO_CFG + hif1_ofs,
-				   MT_WFDMA1_GLO_CFG_TX_DMA_EN |
-				   MT_WFDMA1_GLO_CFG_RX_DMA_EN);
-	}
-
-	usleep_range(1000, 2000);
-
-	for (i = 0; i < __MT_TXQ_MAX; i++) {
-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], true);
-		if (mphy_ext)
-			mt76_queue_tx_cleanup(dev, mphy_ext->q_tx[i], true);
-	}
-
-	for (i = 0; i < __MT_MCUQ_MAX; i++)
-		mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[i], true);
-
-	mt76_for_each_q_rx(&dev->mt76, i)
-		mt76_queue_rx_reset(dev, i);
-
-	mt76_tx_status_check(&dev->mt76, true);
-
-	/* re-init prefetch settings after reset */
-	mt7915_dma_prefetch(dev);
-
-	mt76_set(dev, MT_WFDMA0_GLO_CFG,
-		 MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-	if (is_mt7915(&dev->mt76))
-		mt76_set(dev, MT_WFDMA1_GLO_CFG,
-			 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
-			 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
-			 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
-			 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO);
-	if (dev->hif2) {
-		mt76_set(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
-			 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-			 MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-
-		if (is_mt7915(&dev->mt76))
-			mt76_set(dev, MT_WFDMA1_GLO_CFG + hif1_ofs,
-				 MT_WFDMA1_GLO_CFG_TX_DMA_EN |
-				 MT_WFDMA1_GLO_CFG_RX_DMA_EN |
-				 MT_WFDMA1_GLO_CFG_OMIT_TX_INFO |
-				 MT_WFDMA1_GLO_CFG_OMIT_RX_INFO);
-	}
-}
-
-void mt7915_tx_token_put(struct mt7915_dev *dev)
-{
-	struct mt76_txwi_cache *txwi;
-	int id;
-
-	spin_lock_bh(&dev->mt76.token_lock);
-	idr_for_each_entry(&dev->mt76.token, txwi, id) {
-		mt7915_txwi_free(dev, txwi, NULL, NULL);
-		dev->mt76.token_count--;
-	}
-	spin_unlock_bh(&dev->mt76.token_lock);
-	idr_destroy(&dev->mt76.token);
-}
-
-/* system error recovery */
-void mt7915_mac_reset_work(struct work_struct *work)
-{
-	struct mt7915_phy *phy2;
-	struct mt76_phy *ext_phy;
-	struct mt7915_dev *dev;
-	int i;
-
-	dev = container_of(work, struct mt7915_dev, reset_work);
-	ext_phy = dev->mt76.phys[MT_BAND1];
-	phy2 = ext_phy ? ext_phy->priv : NULL;
-
-	if (!(READ_ONCE(dev->reset_state) & MT_MCU_CMD_STOP_DMA))
-		return;
-
-	ieee80211_stop_queues(mt76_hw(dev));
-	if (ext_phy)
-		ieee80211_stop_queues(ext_phy->hw);
-
-	set_bit(MT76_RESET, &dev->mphy.state);
-	set_bit(MT76_MCU_RESET, &dev->mphy.state);
-	wake_up(&dev->mt76.mcu.wait);
-	cancel_delayed_work_sync(&dev->mphy.mac_work);
-	if (phy2) {
-		set_bit(MT76_RESET, &phy2->mt76->state);
-		cancel_delayed_work_sync(&phy2->mt76->mac_work);
-	}
-	mt76_worker_disable(&dev->mt76.tx_worker);
-	mt76_for_each_q_rx(&dev->mt76, i)
-		napi_disable(&dev->mt76.napi[i]);
-	napi_disable(&dev->mt76.tx_napi);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_DMA_STOPPED);
-
-	if (mt7915_wait_reset_state(dev, MT_MCU_CMD_RESET_DONE)) {
-		mt7915_dma_reset(dev);
-
-		mt7915_tx_token_put(dev);
-		idr_init(&dev->mt76.token);
-
-		mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_DMA_INIT);
-		mt7915_wait_reset_state(dev, MT_MCU_CMD_RECOVERY_DONE);
-	}
-
-	clear_bit(MT76_MCU_RESET, &dev->mphy.state);
-	clear_bit(MT76_RESET, &dev->mphy.state);
-	if (phy2)
-		clear_bit(MT76_RESET, &phy2->mt76->state);
-
-	local_bh_disable();
-	mt76_for_each_q_rx(&dev->mt76, i) {
-		napi_enable(&dev->mt76.napi[i]);
-		napi_schedule(&dev->mt76.napi[i]);
-	}
-	local_bh_enable();
-
-	tasklet_schedule(&dev->irq_tasklet);
-
-	mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_RESET_DONE);
-	mt7915_wait_reset_state(dev, MT_MCU_CMD_NORMAL_STATE);
-
-	mt76_worker_enable(&dev->mt76.tx_worker);
-
-	local_bh_disable();
-	napi_enable(&dev->mt76.tx_napi);
-	napi_schedule(&dev->mt76.tx_napi);
-	local_bh_enable();
-
-	ieee80211_wake_queues(mt76_hw(dev));
-	if (ext_phy)
-		ieee80211_wake_queues(ext_phy->hw);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	mt7915_update_beacons(dev);
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mphy.mac_work,
-				     MT7915_WATCHDOG_TIME);
-	if (phy2)
-		ieee80211_queue_delayed_work(ext_phy->hw,
-					     &phy2->mt76->mac_work,
-					     MT7915_WATCHDOG_TIME);
-}
-
-void mt7915_mac_update_stats(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct mib_stats *mib = &phy->mib;
-	int i, aggr0, aggr1, cnt;
-	u32 val;
-
-	cnt = mt76_rr(dev, MT_MIB_SDR3(phy->band_idx));
-	mib->fcs_err_cnt += is_mt7915(&dev->mt76) ?
-		FIELD_GET(MT_MIB_SDR3_FCS_ERR_MASK, cnt) :
-		FIELD_GET(MT_MIB_SDR3_FCS_ERR_MASK_MT7916, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR4(phy->band_idx));
-	mib->rx_fifo_full_cnt += FIELD_GET(MT_MIB_SDR4_RX_FIFO_FULL_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR5(phy->band_idx));
-	mib->rx_mpdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_SDR6(phy->band_idx));
-	mib->channel_idle_cnt += FIELD_GET(MT_MIB_SDR6_CHANNEL_IDL_CNT_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR7(phy->band_idx));
-	mib->rx_vector_mismatch_cnt +=
-		FIELD_GET(MT_MIB_SDR7_RX_VECTOR_MISMATCH_CNT_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR8(phy->band_idx));
-	mib->rx_delimiter_fail_cnt +=
-		FIELD_GET(MT_MIB_SDR8_RX_DELIMITER_FAIL_CNT_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR10(phy->band_idx));
-	mib->rx_mrdy_cnt += is_mt7915(&dev->mt76) ?
-		FIELD_GET(MT_MIB_SDR10_MRDY_COUNT_MASK, cnt) :
-		FIELD_GET(MT_MIB_SDR10_MRDY_COUNT_MASK_MT7916, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR11(phy->band_idx));
-	mib->rx_len_mismatch_cnt +=
-		FIELD_GET(MT_MIB_SDR11_RX_LEN_MISMATCH_CNT_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR12(phy->band_idx));
-	mib->tx_ampdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_SDR13(phy->band_idx));
-	mib->tx_stop_q_empty_cnt +=
-		FIELD_GET(MT_MIB_SDR13_TX_STOP_Q_EMPTY_CNT_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR14(phy->band_idx));
-	mib->tx_mpdu_attempts_cnt += is_mt7915(&dev->mt76) ?
-		FIELD_GET(MT_MIB_SDR14_TX_MPDU_ATTEMPTS_CNT_MASK, cnt) :
-		FIELD_GET(MT_MIB_SDR14_TX_MPDU_ATTEMPTS_CNT_MASK_MT7916, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR15(phy->band_idx));
-	mib->tx_mpdu_success_cnt += is_mt7915(&dev->mt76) ?
-		FIELD_GET(MT_MIB_SDR15_TX_MPDU_SUCCESS_CNT_MASK, cnt) :
-		FIELD_GET(MT_MIB_SDR15_TX_MPDU_SUCCESS_CNT_MASK_MT7916, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR16(phy->band_idx));
-	mib->primary_cca_busy_time +=
-		FIELD_GET(MT_MIB_SDR16_PRIMARY_CCA_BUSY_TIME_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR17(phy->band_idx));
-	mib->secondary_cca_busy_time +=
-		FIELD_GET(MT_MIB_SDR17_SECONDARY_CCA_BUSY_TIME_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR18(phy->band_idx));
-	mib->primary_energy_detect_time +=
-		FIELD_GET(MT_MIB_SDR18_PRIMARY_ENERGY_DETECT_TIME_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR19(phy->band_idx));
-	mib->cck_mdrdy_time += FIELD_GET(MT_MIB_SDR19_CCK_MDRDY_TIME_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR20(phy->band_idx));
-	mib->ofdm_mdrdy_time +=
-		FIELD_GET(MT_MIB_SDR20_OFDM_VHT_MDRDY_TIME_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR21(phy->band_idx));
-	mib->green_mdrdy_time +=
-		FIELD_GET(MT_MIB_SDR21_GREEN_MDRDY_TIME_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR22(phy->band_idx));
-	mib->rx_ampdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_SDR23(phy->band_idx));
-	mib->rx_ampdu_bytes_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_SDR24(phy->band_idx));
-	mib->rx_ampdu_valid_subframe_cnt += is_mt7915(&dev->mt76) ?
-		FIELD_GET(MT_MIB_SDR24_RX_AMPDU_SF_CNT_MASK, cnt) :
-		FIELD_GET(MT_MIB_SDR24_RX_AMPDU_SF_CNT_MASK_MT7916, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR25(phy->band_idx));
-	mib->rx_ampdu_valid_subframe_bytes_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_SDR27(phy->band_idx));
-	mib->tx_rwp_fail_cnt +=
-		FIELD_GET(MT_MIB_SDR27_TX_RWP_FAIL_CNT_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR28(phy->band_idx));
-	mib->tx_rwp_need_cnt +=
-		FIELD_GET(MT_MIB_SDR28_TX_RWP_NEED_CNT_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR29(phy->band_idx));
-	mib->rx_pfdrop_cnt += is_mt7915(&dev->mt76) ?
-		FIELD_GET(MT_MIB_SDR29_RX_PFDROP_CNT_MASK, cnt) :
-		FIELD_GET(MT_MIB_SDR29_RX_PFDROP_CNT_MASK_MT7916, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDRVEC(phy->band_idx));
-	mib->rx_vec_queue_overflow_drop_cnt += is_mt7915(&dev->mt76) ?
-		FIELD_GET(MT_MIB_SDR30_RX_VEC_QUEUE_OVERFLOW_DROP_CNT_MASK, cnt) :
-		FIELD_GET(MT_MIB_SDR30_RX_VEC_QUEUE_OVERFLOW_DROP_CNT_MASK_MT7916, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR31(phy->band_idx));
-	mib->rx_ba_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_SDRMUBF(phy->band_idx));
-	mib->tx_bf_cnt += FIELD_GET(MT_MIB_MU_BF_TX_CNT, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_DR8(phy->band_idx));
-	mib->tx_mu_mpdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_DR9(phy->band_idx));
-	mib->tx_mu_acked_mpdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_DR11(phy->band_idx));
-	mib->tx_su_acked_mpdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_ETBF_PAR_RPT0(phy->band_idx));
-	mib->tx_bf_rx_fb_bw = FIELD_GET(MT_ETBF_PAR_RPT0_FB_BW, cnt);
-	mib->tx_bf_rx_fb_nc_cnt += FIELD_GET(MT_ETBF_PAR_RPT0_FB_NC, cnt);
-	mib->tx_bf_rx_fb_nr_cnt += FIELD_GET(MT_ETBF_PAR_RPT0_FB_NR, cnt);
-
-	for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++) {
-		cnt = mt76_rr(dev, MT_PLE_AMSDU_PACK_MSDU_CNT(i));
-		mib->tx_amsdu[i] += cnt;
-		mib->tx_amsdu_cnt += cnt;
-	}
-
-	aggr0 = phy->band_idx ? ARRAY_SIZE(dev->mt76.aggr_stats) / 2 : 0;
-	if (is_mt7915(&dev->mt76)) {
-		for (i = 0, aggr1 = aggr0 + 4; i < 4; i++) {
-			val = mt76_rr(dev, MT_MIB_MB_SDR1(phy->band_idx, (i << 4)));
-			mib->ba_miss_cnt +=
-				FIELD_GET(MT_MIB_BA_MISS_COUNT_MASK, val);
-			mib->ack_fail_cnt +=
-				FIELD_GET(MT_MIB_ACK_FAIL_COUNT_MASK, val);
-
-			val = mt76_rr(dev, MT_MIB_MB_SDR0(phy->band_idx, (i << 4)));
-			mib->rts_cnt += FIELD_GET(MT_MIB_RTS_COUNT_MASK, val);
-			mib->rts_retries_cnt +=
-				FIELD_GET(MT_MIB_RTS_RETRIES_COUNT_MASK, val);
-
-			val = mt76_rr(dev, MT_TX_AGG_CNT(phy->band_idx, i));
-			dev->mt76.aggr_stats[aggr0++] += val & 0xffff;
-			dev->mt76.aggr_stats[aggr0++] += val >> 16;
-
-			val = mt76_rr(dev, MT_TX_AGG_CNT2(phy->band_idx, i));
-			dev->mt76.aggr_stats[aggr1++] += val & 0xffff;
-			dev->mt76.aggr_stats[aggr1++] += val >> 16;
-		}
-
-		cnt = mt76_rr(dev, MT_MIB_SDR32(phy->band_idx));
-		mib->tx_pkt_ebf_cnt += FIELD_GET(MT_MIB_SDR32_TX_PKT_EBF_CNT, cnt);
-
-		cnt = mt76_rr(dev, MT_MIB_SDR33(phy->band_idx));
-		mib->tx_pkt_ibf_cnt += FIELD_GET(MT_MIB_SDR33_TX_PKT_IBF_CNT, cnt);
-
-		cnt = mt76_rr(dev, MT_ETBF_TX_APP_CNT(phy->band_idx));
-		mib->tx_bf_ibf_ppdu_cnt += FIELD_GET(MT_ETBF_TX_IBF_CNT, cnt);
-		mib->tx_bf_ebf_ppdu_cnt += FIELD_GET(MT_ETBF_TX_EBF_CNT, cnt);
-
-		cnt = mt76_rr(dev, MT_ETBF_TX_NDP_BFRP(phy->band_idx));
-		mib->tx_bf_fb_cpl_cnt += FIELD_GET(MT_ETBF_TX_FB_CPL, cnt);
-		mib->tx_bf_fb_trig_cnt += FIELD_GET(MT_ETBF_TX_FB_TRI, cnt);
-
-		cnt = mt76_rr(dev, MT_ETBF_RX_FB_CNT(phy->band_idx));
-		mib->tx_bf_rx_fb_all_cnt += FIELD_GET(MT_ETBF_RX_FB_ALL, cnt);
-		mib->tx_bf_rx_fb_he_cnt += FIELD_GET(MT_ETBF_RX_FB_HE, cnt);
-		mib->tx_bf_rx_fb_vht_cnt += FIELD_GET(MT_ETBF_RX_FB_VHT, cnt);
-		mib->tx_bf_rx_fb_ht_cnt += FIELD_GET(MT_ETBF_RX_FB_HT, cnt);
-	} else {
-		for (i = 0; i < 2; i++) {
-			/* rts count */
-			val = mt76_rr(dev, MT_MIB_MB_SDR0(phy->band_idx, (i << 2)));
-			mib->rts_cnt += FIELD_GET(GENMASK(15, 0), val);
-			mib->rts_cnt += FIELD_GET(GENMASK(31, 16), val);
-
-			/* rts retry count */
-			val = mt76_rr(dev, MT_MIB_MB_SDR1(phy->band_idx, (i << 2)));
-			mib->rts_retries_cnt += FIELD_GET(GENMASK(15, 0), val);
-			mib->rts_retries_cnt += FIELD_GET(GENMASK(31, 16), val);
-
-			/* ba miss count */
-			val = mt76_rr(dev, MT_MIB_MB_SDR2(phy->band_idx, (i << 2)));
-			mib->ba_miss_cnt += FIELD_GET(GENMASK(15, 0), val);
-			mib->ba_miss_cnt += FIELD_GET(GENMASK(31, 16), val);
-
-			/* ack fail count */
-			val = mt76_rr(dev, MT_MIB_MB_BFTF(phy->band_idx, (i << 2)));
-			mib->ack_fail_cnt += FIELD_GET(GENMASK(15, 0), val);
-			mib->ack_fail_cnt += FIELD_GET(GENMASK(31, 16), val);
-		}
-
-		for (i = 0; i < 8; i++) {
-			val = mt76_rr(dev, MT_TX_AGG_CNT(phy->band_idx, i));
-			dev->mt76.aggr_stats[aggr0++] += FIELD_GET(GENMASK(15, 0), val);
-			dev->mt76.aggr_stats[aggr0++] += FIELD_GET(GENMASK(31, 16), val);
-		}
-
-		cnt = mt76_rr(dev, MT_MIB_SDR32(phy->band_idx));
-		mib->tx_pkt_ibf_cnt += FIELD_GET(MT_MIB_SDR32_TX_PKT_IBF_CNT, cnt);
-		mib->tx_bf_ibf_ppdu_cnt += FIELD_GET(MT_MIB_SDR32_TX_PKT_IBF_CNT, cnt);
-		mib->tx_pkt_ebf_cnt += FIELD_GET(MT_MIB_SDR32_TX_PKT_EBF_CNT, cnt);
-		mib->tx_bf_ebf_ppdu_cnt += FIELD_GET(MT_MIB_SDR32_TX_PKT_EBF_CNT, cnt);
-
-		cnt = mt76_rr(dev, MT_MIB_BFCR7(phy->band_idx));
-		mib->tx_bf_fb_cpl_cnt += FIELD_GET(MT_MIB_BFCR7_BFEE_TX_FB_CPL, cnt);
-
-		cnt = mt76_rr(dev, MT_MIB_BFCR2(phy->band_idx));
-		mib->tx_bf_fb_trig_cnt += FIELD_GET(MT_MIB_BFCR2_BFEE_TX_FB_TRIG, cnt);
-
-		cnt = mt76_rr(dev, MT_MIB_BFCR0(phy->band_idx));
-		mib->tx_bf_rx_fb_vht_cnt += FIELD_GET(MT_MIB_BFCR0_RX_FB_VHT, cnt);
-		mib->tx_bf_rx_fb_all_cnt += FIELD_GET(MT_MIB_BFCR0_RX_FB_VHT, cnt);
-		mib->tx_bf_rx_fb_ht_cnt += FIELD_GET(MT_MIB_BFCR0_RX_FB_HT, cnt);
-		mib->tx_bf_rx_fb_all_cnt += FIELD_GET(MT_MIB_BFCR0_RX_FB_HT, cnt);
-
-		cnt = mt76_rr(dev, MT_MIB_BFCR1(phy->band_idx));
-		mib->tx_bf_rx_fb_he_cnt += FIELD_GET(MT_MIB_BFCR1_RX_FB_HE, cnt);
-		mib->tx_bf_rx_fb_all_cnt += FIELD_GET(MT_MIB_BFCR1_RX_FB_HE, cnt);
-	}
-}
-
-static void mt7915_mac_severe_check(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	bool ext_phy = phy != &dev->phy;
-	u32 trb;
-
-	if (!phy->omac_mask)
-		return;
-
-	/* In rare cases, TRB pointers might be out of sync leads to RMAC
-	 * stopping Rx, so check status periodically to see if TRB hardware
-	 * requires minimal recovery.
-	 */
-	trb = mt76_rr(dev, MT_TRB_RXPSR0(phy->band_idx));
-
-	if ((FIELD_GET(MT_TRB_RXPSR0_RX_RMAC_PTR, trb) !=
-	     FIELD_GET(MT_TRB_RXPSR0_RX_WTBL_PTR, trb)) &&
-	    (FIELD_GET(MT_TRB_RXPSR0_RX_RMAC_PTR, phy->trb_ts) !=
-	     FIELD_GET(MT_TRB_RXPSR0_RX_WTBL_PTR, phy->trb_ts)) &&
-	    trb == phy->trb_ts)
-		mt7915_mcu_set_ser(dev, SER_RECOVER, SER_SET_RECOVER_L3_RX_ABORT,
-				   ext_phy);
-
-	phy->trb_ts = trb;
-}
-
-void mt7915_mac_sta_rc_work(struct work_struct *work)
-{
-	struct mt7915_dev *dev = container_of(work, struct mt7915_dev, rc_work);
-	struct ieee80211_sta *sta;
-	struct ieee80211_vif *vif;
-	struct mt7915_sta *msta;
-	u32 changed;
-	LIST_HEAD(list);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	list_splice_init(&dev->sta_rc_list, &list);
-
-	while (!list_empty(&list)) {
-		msta = list_first_entry(&list, struct mt7915_sta, rc_list);
-		list_del_init(&msta->rc_list);
-		changed = msta->changed;
-		msta->changed = 0;
-		spin_unlock_bh(&dev->sta_poll_lock);
-
-		sta = container_of((void *)msta, struct ieee80211_sta, drv_priv);
-		vif = container_of((void *)msta->vif, struct ieee80211_vif, drv_priv);
-
-		if (changed & (IEEE80211_RC_SUPP_RATES_CHANGED |
-			       IEEE80211_RC_NSS_CHANGED |
-			       IEEE80211_RC_BW_CHANGED))
-			mt7915_mcu_add_rate_ctrl(dev, vif, sta, true);
-
-		if (changed & IEEE80211_RC_SMPS_CHANGED)
-			mt7915_mcu_add_smps(dev, vif, sta);
-
-		spin_lock_bh(&dev->sta_poll_lock);
-	}
-
-	spin_unlock_bh(&dev->sta_poll_lock);
-}
-
-void mt7915_mac_work(struct work_struct *work)
-{
-	struct mt7915_phy *phy;
-	struct mt76_phy *mphy;
-
-	mphy = (struct mt76_phy *)container_of(work, struct mt76_phy,
-					       mac_work.work);
-	phy = mphy->priv;
-
-	mutex_lock(&mphy->dev->mutex);
-
-	mt76_update_survey(mphy);
-	if (++mphy->mac_work_count == 5) {
-		mphy->mac_work_count = 0;
-
-		mt7915_mac_update_stats(phy);
-		mt7915_mac_severe_check(phy);
-	}
-
-	mutex_unlock(&mphy->dev->mutex);
-
-	mt76_tx_status_check(mphy->dev, false);
-
-	ieee80211_queue_delayed_work(mphy->hw, &mphy->mac_work,
-				     MT7915_WATCHDOG_TIME);
-}
-
-static void mt7915_dfs_stop_radar_detector(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-
-	if (phy->rdd_state & BIT(0))
-		mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_STOP, 0,
-					MT_RX_SEL0, 0);
-	if (phy->rdd_state & BIT(1))
-		mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_STOP, 1,
-					MT_RX_SEL0, 0);
-}
-
-static int mt7915_dfs_start_rdd(struct mt7915_dev *dev, int chain)
-{
-	int err, region;
-
-	switch (dev->mt76.region) {
-	case NL80211_DFS_ETSI:
-		region = 0;
-		break;
-	case NL80211_DFS_JP:
-		region = 2;
-		break;
-	case NL80211_DFS_FCC:
-	default:
-		region = 1;
-		break;
-	}
-
-	err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_START, chain,
-				      MT_RX_SEL0, region);
-	if (err < 0)
-		return err;
-
-	if (is_mt7915(&dev->mt76)) {
-		err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_SET_WF_ANT, chain,
-					      0, dev->dbdc_support ? 2 : 0);
-		if (err < 0)
-			return err;
-	}
-
-	return mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_DET_MODE, chain,
-				       MT_RX_SEL0, 1);
-}
-
-static int mt7915_dfs_start_radar_detector(struct mt7915_phy *phy)
-{
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	struct mt7915_dev *dev = phy->dev;
-	int err;
-
-	/* start CAC */
-	err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_CAC_START, phy->band_idx,
-				      MT_RX_SEL0, 0);
-	if (err < 0)
-		return err;
-
-	err = mt7915_dfs_start_rdd(dev, phy->band_idx);
-	if (err < 0)
-		return err;
-
-	phy->rdd_state |= BIT(phy->band_idx);
-
-	if (!is_mt7915(&dev->mt76))
-		return 0;
-
-	if (chandef->width == NL80211_CHAN_WIDTH_160 ||
-	    chandef->width == NL80211_CHAN_WIDTH_80P80) {
-		err = mt7915_dfs_start_rdd(dev, 1);
-		if (err < 0)
-			return err;
-
-		phy->rdd_state |= BIT(1);
-	}
-
-	return 0;
-}
-
-static int
-mt7915_dfs_init_radar_specs(struct mt7915_phy *phy)
-{
-	const struct mt7915_dfs_radar_spec *radar_specs;
-	struct mt7915_dev *dev = phy->dev;
-	int err, i;
-
-	switch (dev->mt76.region) {
-	case NL80211_DFS_FCC:
-		radar_specs = &fcc_radar_specs;
-		err = mt7915_mcu_set_fcc5_lpn(dev, 8);
-		if (err < 0)
-			return err;
-		break;
-	case NL80211_DFS_ETSI:
-		radar_specs = &etsi_radar_specs;
-		break;
-	case NL80211_DFS_JP:
-		radar_specs = &jp_radar_specs;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	for (i = 0; i < ARRAY_SIZE(radar_specs->radar_pattern); i++) {
-		err = mt7915_mcu_set_radar_th(dev, i,
-					      &radar_specs->radar_pattern[i]);
-		if (err < 0)
-			return err;
-	}
-
-	return mt7915_mcu_set_pulse_th(dev, &radar_specs->pulse_th);
-}
-
-int mt7915_dfs_init_radar_detector(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	enum mt76_dfs_state dfs_state, prev_state;
-	int err;
-
-	prev_state = phy->mt76->dfs_state;
-	dfs_state = mt76_phy_dfs_state(phy->mt76);
-
-	if (prev_state == dfs_state)
-		return 0;
-
-	if (prev_state == MT_DFS_STATE_UNKNOWN)
-		mt7915_dfs_stop_radar_detector(phy);
-
-	if (dfs_state == MT_DFS_STATE_DISABLED)
-		goto stop;
-
-	if (prev_state <= MT_DFS_STATE_DISABLED) {
-		err = mt7915_dfs_init_radar_specs(phy);
-		if (err < 0)
-			return err;
-
-		err = mt7915_dfs_start_radar_detector(phy);
-		if (err < 0)
-			return err;
-
-		phy->mt76->dfs_state = MT_DFS_STATE_CAC;
-	}
-
-	if (dfs_state == MT_DFS_STATE_CAC)
-		return 0;
-
-	err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_CAC_END,
-				      phy->band_idx, MT_RX_SEL0, 0);
-	if (err < 0) {
-		phy->mt76->dfs_state = MT_DFS_STATE_UNKNOWN;
-		return err;
-	}
-
-	phy->mt76->dfs_state = MT_DFS_STATE_ACTIVE;
-	return 0;
-
-stop:
-	err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_NORMAL_START,
-				      phy->band_idx, MT_RX_SEL0, 0);
-	if (err < 0)
-		return err;
-
-	if (is_mt7915(&dev->mt76)) {
-		err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_SET_WF_ANT,
-					      phy->band_idx, 0,
-					      dev->dbdc_support ? 2 : 0);
-		if (err < 0)
-			return err;
-	}
-
-	mt7915_dfs_stop_radar_detector(phy);
-	phy->mt76->dfs_state = MT_DFS_STATE_DISABLED;
-
-	return 0;
-}
-
-static int
-mt7915_mac_twt_duration_align(int duration)
-{
-	return duration << 8;
-}
-
-static u64
-mt7915_mac_twt_sched_list_add(struct mt7915_dev *dev,
-			      struct mt7915_twt_flow *flow)
-{
-	struct mt7915_twt_flow *iter, *iter_next;
-	u32 duration = flow->duration << 8;
-	u64 start_tsf;
-
-	iter = list_first_entry_or_null(&dev->twt_list,
-					struct mt7915_twt_flow, list);
-	if (!iter || !iter->sched || iter->start_tsf > duration) {
-		/* add flow as first entry in the list */
-		list_add(&flow->list, &dev->twt_list);
-		return 0;
-	}
-
-	list_for_each_entry_safe(iter, iter_next, &dev->twt_list, list) {
-		start_tsf = iter->start_tsf +
-			    mt7915_mac_twt_duration_align(iter->duration);
-		if (list_is_last(&iter->list, &dev->twt_list))
-			break;
-
-		if (!iter_next->sched ||
-		    iter_next->start_tsf > start_tsf + duration) {
-			list_add(&flow->list, &iter->list);
-			goto out;
-		}
-	}
-
-	/* add flow as last entry in the list */
-	list_add_tail(&flow->list, &dev->twt_list);
-out:
-	return start_tsf;
-}
-
-static int mt7915_mac_check_twt_req(struct ieee80211_twt_setup *twt)
-{
-	struct ieee80211_twt_params *twt_agrt;
-	u64 interval, duration;
-	u16 mantissa;
-	u8 exp;
-
-	/* only individual agreement supported */
-	if (twt->control & IEEE80211_TWT_CONTROL_NEG_TYPE_BROADCAST)
-		return -EOPNOTSUPP;
-
-	/* only 256us unit supported */
-	if (twt->control & IEEE80211_TWT_CONTROL_WAKE_DUR_UNIT)
-		return -EOPNOTSUPP;
-
-	twt_agrt = (struct ieee80211_twt_params *)twt->params;
-
-	/* explicit agreement not supported */
-	if (!(twt_agrt->req_type & cpu_to_le16(IEEE80211_TWT_REQTYPE_IMPLICIT)))
-		return -EOPNOTSUPP;
-
-	exp = FIELD_GET(IEEE80211_TWT_REQTYPE_WAKE_INT_EXP,
-			le16_to_cpu(twt_agrt->req_type));
-	mantissa = le16_to_cpu(twt_agrt->mantissa);
-	duration = twt_agrt->min_twt_dur << 8;
-
-	interval = (u64)mantissa << exp;
-	if (interval < duration)
-		return -EOPNOTSUPP;
-
-	return 0;
-}
-
-static bool
-mt7915_mac_twt_param_equal(struct mt7915_sta *msta,
-			   struct ieee80211_twt_params *twt_agrt)
-{
-	u16 type = le16_to_cpu(twt_agrt->req_type);
-	u8 exp;
-	int i;
-
-	exp = FIELD_GET(IEEE80211_TWT_REQTYPE_WAKE_INT_EXP, type);
-	for (i = 0; i < MT7915_MAX_STA_TWT_AGRT; i++) {
-		struct mt7915_twt_flow *f;
-
-		if (!(msta->twt.flowid_mask & BIT(i)))
-			continue;
-
-		f = &msta->twt.flow[i];
-		if (f->duration == twt_agrt->min_twt_dur &&
-		    f->mantissa == twt_agrt->mantissa &&
-		    f->exp == exp &&
-		    f->protection == !!(type & IEEE80211_TWT_REQTYPE_PROTECTION) &&
-		    f->flowtype == !!(type & IEEE80211_TWT_REQTYPE_FLOWTYPE) &&
-		    f->trigger == !!(type & IEEE80211_TWT_REQTYPE_TRIGGER))
-			return true;
-	}
-
-	return false;
-}
-
-void mt7915_mac_add_twt_setup(struct ieee80211_hw *hw,
-			      struct ieee80211_sta *sta,
-			      struct ieee80211_twt_setup *twt)
-{
-	enum ieee80211_twt_setup_cmd setup_cmd = TWT_SETUP_CMD_REJECT;
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct ieee80211_twt_params *twt_agrt = (void *)twt->params;
-	u16 req_type = le16_to_cpu(twt_agrt->req_type);
-	enum ieee80211_twt_setup_cmd sta_setup_cmd;
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_twt_flow *flow;
-	int flowid, table_id;
-	u8 exp;
-
-	if (mt7915_mac_check_twt_req(twt))
-		goto out;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (dev->twt.n_agrt == MT7915_MAX_TWT_AGRT)
-		goto unlock;
-
-	if (hweight8(msta->twt.flowid_mask) == ARRAY_SIZE(msta->twt.flow))
-		goto unlock;
-
-	if (twt_agrt->min_twt_dur < MT7915_MIN_TWT_DUR) {
-		setup_cmd = TWT_SETUP_CMD_DICTATE;
-		twt_agrt->min_twt_dur = MT7915_MIN_TWT_DUR;
-		goto unlock;
-	}
-
-	flowid = ffs(~msta->twt.flowid_mask) - 1;
-	twt_agrt->req_type &= ~cpu_to_le16(IEEE80211_TWT_REQTYPE_FLOWID);
-	twt_agrt->req_type |= le16_encode_bits(flowid,
-					       IEEE80211_TWT_REQTYPE_FLOWID);
-
-	table_id = ffs(~dev->twt.table_mask) - 1;
-	exp = FIELD_GET(IEEE80211_TWT_REQTYPE_WAKE_INT_EXP, req_type);
-	sta_setup_cmd = FIELD_GET(IEEE80211_TWT_REQTYPE_SETUP_CMD, req_type);
-
-	if (mt7915_mac_twt_param_equal(msta, twt_agrt))
-		goto unlock;
-
-	flow = &msta->twt.flow[flowid];
-	memset(flow, 0, sizeof(*flow));
-	INIT_LIST_HEAD(&flow->list);
-	flow->wcid = msta->wcid.idx;
-	flow->table_id = table_id;
-	flow->id = flowid;
-	flow->duration = twt_agrt->min_twt_dur;
-	flow->mantissa = twt_agrt->mantissa;
-	flow->exp = exp;
-	flow->protection = !!(req_type & IEEE80211_TWT_REQTYPE_PROTECTION);
-	flow->flowtype = !!(req_type & IEEE80211_TWT_REQTYPE_FLOWTYPE);
-	flow->trigger = !!(req_type & IEEE80211_TWT_REQTYPE_TRIGGER);
-
-	if (sta_setup_cmd == TWT_SETUP_CMD_REQUEST ||
-	    sta_setup_cmd == TWT_SETUP_CMD_SUGGEST) {
-		u64 interval = (u64)le16_to_cpu(twt_agrt->mantissa) << exp;
-		u64 flow_tsf, curr_tsf;
-		u32 rem;
-
-		flow->sched = true;
-		flow->start_tsf = mt7915_mac_twt_sched_list_add(dev, flow);
-		curr_tsf = __mt7915_get_tsf(hw, msta->vif);
-		div_u64_rem(curr_tsf - flow->start_tsf, interval, &rem);
-		flow_tsf = curr_tsf + interval - rem;
-		twt_agrt->twt = cpu_to_le64(flow_tsf);
-	} else {
-		list_add_tail(&flow->list, &dev->twt_list);
-	}
-	flow->tsf = le64_to_cpu(twt_agrt->twt);
-
-	if (mt7915_mcu_twt_agrt_update(dev, msta->vif, flow, MCU_TWT_AGRT_ADD))
-		goto unlock;
-
-	setup_cmd = TWT_SETUP_CMD_ACCEPT;
-	dev->twt.table_mask |= BIT(table_id);
-	msta->twt.flowid_mask |= BIT(flowid);
-	dev->twt.n_agrt++;
-
-unlock:
-	mutex_unlock(&dev->mt76.mutex);
-out:
-	twt_agrt->req_type &= ~cpu_to_le16(IEEE80211_TWT_REQTYPE_SETUP_CMD);
-	twt_agrt->req_type |=
-		le16_encode_bits(setup_cmd, IEEE80211_TWT_REQTYPE_SETUP_CMD);
-	twt->control = (twt->control & IEEE80211_TWT_CONTROL_WAKE_DUR_UNIT) |
-		       (twt->control & IEEE80211_TWT_CONTROL_RX_DISABLED);
-}
-
-void mt7915_mac_twt_teardown_flow(struct mt7915_dev *dev,
-				  struct mt7915_sta *msta,
-				  u8 flowid)
-{
-	struct mt7915_twt_flow *flow;
-
-	lockdep_assert_held(&dev->mt76.mutex);
-
-	if (flowid >= ARRAY_SIZE(msta->twt.flow))
-		return;
-
-	if (!(msta->twt.flowid_mask & BIT(flowid)))
-		return;
-
-	flow = &msta->twt.flow[flowid];
-	if (mt7915_mcu_twt_agrt_update(dev, msta->vif, flow,
-				       MCU_TWT_AGRT_DELETE))
-		return;
-
-	list_del_init(&flow->list);
-	msta->twt.flowid_mask &= ~BIT(flowid);
-	dev->twt.table_mask &= ~BIT(flow->table_id);
-	dev->twt.n_agrt--;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mac.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mac.h
deleted file mode 100644
index 6fa9c79..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mac.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT7915_MAC_H
-#define __MT7915_MAC_H
-
-#include "../mt76_connac2_mac.h"
-
-#define MT_CT_PARSE_LEN			72
-#define MT_CT_DMA_BUF_NUM		2
-
-#define MT_RXD0_LENGTH			GENMASK(15, 0)
-#define MT_RXD0_PKT_TYPE		GENMASK(31, 27)
-
-#define MT_RXD0_NORMAL_ETH_TYPE_OFS	GENMASK(22, 16)
-#define MT_RXD0_NORMAL_IP_SUM		BIT(23)
-#define MT_RXD0_NORMAL_UDP_TCP_SUM	BIT(24)
-
-enum rx_pkt_type {
-	PKT_TYPE_TXS,
-	PKT_TYPE_TXRXV,
-	PKT_TYPE_NORMAL,
-	PKT_TYPE_RX_DUP_RFB,
-	PKT_TYPE_RX_TMR,
-	PKT_TYPE_RETRIEVE,
-	PKT_TYPE_TXRX_NOTIFY,
-	PKT_TYPE_RX_EVENT,
-	PKT_TYPE_RX_FW_MONITOR = 0x0c,
-	PKT_TYPE_TXRX_NOTIFY_V0 = 0x18,
-};
-
-#define MT_TX_FREE_VER			GENMASK(18, 16)
-#define MT_TX_FREE_MSDU_CNT		GENMASK(9, 0)
-#define MT_TX_FREE_MSDU_CNT_V0	GENMASK(6, 0)
-#define MT_TX_FREE_WLAN_ID		GENMASK(23, 14)
-#define MT_TX_FREE_LATENCY		GENMASK(12, 0)
-/* 0: success, others: dropped */
-#define MT_TX_FREE_MSDU_ID		GENMASK(30, 16)
-#define MT_TX_FREE_PAIR			BIT(31)
-#define MT_TX_FREE_MPDU_HEADER		BIT(30)
-#define MT_TX_FREE_MSDU_ID_V3		GENMASK(14, 0)
-
-/* will support this field in further revision */
-#define MT_TX_FREE_RATE			GENMASK(13, 0)
-
-#define MT_TXS5_F0_FINAL_MPDU		BIT(31)
-#define MT_TXS5_F0_QOS			BIT(30)
-#define MT_TXS5_F0_TX_COUNT		GENMASK(29, 25)
-#define MT_TXS5_F0_FRONT_TIME		GENMASK(24, 0)
-#define MT_TXS5_F1_MPDU_TX_COUNT	GENMASK(31, 24)
-#define MT_TXS5_F1_MPDU_TX_BYTES	GENMASK(23, 0)
-
-#define MT_TXS6_F0_NOISE_3		GENMASK(31, 24)
-#define MT_TXS6_F0_NOISE_2		GENMASK(23, 16)
-#define MT_TXS6_F0_NOISE_1		GENMASK(15, 8)
-#define MT_TXS6_F0_NOISE_0		GENMASK(7, 0)
-#define MT_TXS6_F1_MPDU_FAIL_COUNT	GENMASK(31, 24)
-#define MT_TXS6_F1_MPDU_FAIL_BYTES	GENMASK(23, 0)
-
-#define MT_TXS7_F0_RCPI_3		GENMASK(31, 24)
-#define MT_TXS7_F0_RCPI_2		GENMASK(23, 16)
-#define MT_TXS7_F0_RCPI_1		GENMASK(15, 8)
-#define MT_TXS7_F0_RCPI_0		GENMASK(7, 0)
-#define MT_TXS7_F1_MPDU_RETRY_COUNT	GENMASK(31, 24)
-#define MT_TXS7_F1_MPDU_RETRY_BYTES	GENMASK(23, 0)
-
-struct mt7915_dfs_pulse {
-	u32 max_width;		/* us */
-	int max_pwr;		/* dbm */
-	int min_pwr;		/* dbm */
-	u32 min_stgr_pri;	/* us */
-	u32 max_stgr_pri;	/* us */
-	u32 min_cr_pri;		/* us */
-	u32 max_cr_pri;		/* us */
-};
-
-struct mt7915_dfs_pattern {
-	u8 enb;
-	u8 stgr;
-	u8 min_crpn;
-	u8 max_crpn;
-	u8 min_crpr;
-	u8 min_pw;
-	u32 min_pri;
-	u32 max_pri;
-	u8 max_pw;
-	u8 min_crbn;
-	u8 max_crbn;
-	u8 min_stgpn;
-	u8 max_stgpn;
-	u8 min_stgpr;
-	u8 rsv[2];
-	u32 min_stgpr_diff;
-} __packed;
-
-struct mt7915_dfs_radar_spec {
-	struct mt7915_dfs_pulse pulse_th;
-	struct mt7915_dfs_pattern radar_pattern[16];
-};
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/main.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/main.c
deleted file mode 100644
index 0dffe82..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/main.c
+++ /dev/null
@@ -1,1490 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/etherdevice.h>
-#include <linux/platform_device.h>
-#include <linux/pci.h>
-#include <linux/module.h>
-#include "mt7915.h"
-#include "mcu.h"
-
-static bool mt7915_dev_running(struct mt7915_dev *dev)
-{
-	struct mt7915_phy *phy;
-
-	if (test_bit(MT76_STATE_RUNNING, &dev->mphy.state))
-		return true;
-
-	phy = mt7915_ext_phy(dev);
-
-	return phy && test_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-}
-
-static int mt7915_start(struct ieee80211_hw *hw)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	bool running;
-	int ret;
-
-	flush_work(&dev->init_work);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	running = mt7915_dev_running(dev);
-
-	if (!running) {
-		ret = mt76_connac_mcu_set_pm(&dev->mt76, 0, 0);
-		if (ret)
-			goto out;
-
-		ret = mt7915_mcu_set_mac(dev, 0, true, true);
-		if (ret)
-			goto out;
-
-		mt7915_mac_enable_nf(dev, 0);
-	}
-
-	if (phy != &dev->phy || phy->band_idx) {
-		ret = mt76_connac_mcu_set_pm(&dev->mt76, 1, 0);
-		if (ret)
-			goto out;
-
-		ret = mt7915_mcu_set_mac(dev, 1, true, true);
-		if (ret)
-			goto out;
-
-		mt7915_mac_enable_nf(dev, 1);
-	}
-
-	ret = mt76_connac_mcu_set_rts_thresh(&dev->mt76, 0x92b,
-					     phy != &dev->phy);
-	if (ret)
-		goto out;
-
-	ret = mt7915_mcu_set_sku_en(phy, true);
-	if (ret)
-		goto out;
-
-	ret = mt7915_mcu_set_chan_info(phy, MCU_EXT_CMD(SET_RX_PATH));
-	if (ret)
-		goto out;
-
-	set_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-
-	if (!mt76_testmode_enabled(phy->mt76))
-		ieee80211_queue_delayed_work(hw, &phy->mt76->mac_work,
-					     MT7915_WATCHDOG_TIME);
-
-	if (!running)
-		mt7915_mac_reset_counters(phy);
-
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static void mt7915_stop(struct ieee80211_hw *hw)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-
-	cancel_delayed_work_sync(&phy->mt76->mac_work);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt76_testmode_reset(phy->mt76, true);
-
-	clear_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-
-	if (phy != &dev->phy) {
-		mt76_connac_mcu_set_pm(&dev->mt76, 1, 1);
-		mt7915_mcu_set_mac(dev, 1, false, false);
-	}
-
-	if (!mt7915_dev_running(dev)) {
-		mt76_connac_mcu_set_pm(&dev->mt76, 0, 1);
-		mt7915_mcu_set_mac(dev, 0, false, false);
-	}
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static inline int get_free_idx(u32 mask, u8 start, u8 end)
-{
-	return ffs(~mask & GENMASK(end, start));
-}
-
-static int get_omac_idx(enum nl80211_iftype type, u64 mask)
-{
-	int i;
-
-	switch (type) {
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_ADHOC:
-	case NL80211_IFTYPE_STATION:
-		/* prefer hw bssid slot 1-3 */
-		i = get_free_idx(mask, HW_BSSID_1, HW_BSSID_3);
-		if (i)
-			return i - 1;
-
-		if (type != NL80211_IFTYPE_STATION)
-			break;
-
-		i = get_free_idx(mask, EXT_BSSID_1, EXT_BSSID_MAX);
-		if (i)
-			return i - 1;
-
-		if (~mask & BIT(HW_BSSID_0))
-			return HW_BSSID_0;
-
-		break;
-	case NL80211_IFTYPE_MONITOR:
-	case NL80211_IFTYPE_AP:
-		/* ap uses hw bssid 0 and ext bssid */
-		if (~mask & BIT(HW_BSSID_0))
-			return HW_BSSID_0;
-
-		i = get_free_idx(mask, EXT_BSSID_1, EXT_BSSID_MAX);
-		if (i)
-			return i - 1;
-
-		break;
-	default:
-		WARN_ON(1);
-		break;
-	}
-
-	return -1;
-}
-
-static void mt7915_init_bitrate_mask(struct ieee80211_vif *vif)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(mvif->bitrate_mask.control); i++) {
-		mvif->bitrate_mask.control[i].gi = NL80211_TXRATE_DEFAULT_GI;
-		mvif->bitrate_mask.control[i].he_gi = 0xff;
-		mvif->bitrate_mask.control[i].he_ltf = 0xff;
-		mvif->bitrate_mask.control[i].legacy = GENMASK(31, 0);
-		memset(mvif->bitrate_mask.control[i].ht_mcs, 0xff,
-		       sizeof(mvif->bitrate_mask.control[i].ht_mcs));
-		memset(mvif->bitrate_mask.control[i].vht_mcs, 0xff,
-		       sizeof(mvif->bitrate_mask.control[i].vht_mcs));
-		memset(mvif->bitrate_mask.control[i].he_mcs, 0xff,
-		       sizeof(mvif->bitrate_mask.control[i].he_mcs));
-	}
-}
-
-static int mt7915_add_interface(struct ieee80211_hw *hw,
-				struct ieee80211_vif *vif)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt76_txq *mtxq;
-	bool ext_phy = phy != &dev->phy;
-	int idx, ret = 0;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt76_testmode_reset(phy->mt76, true);
-
-	if (vif->type == NL80211_IFTYPE_MONITOR &&
-	    is_zero_ether_addr(vif->addr))
-		phy->monitor_vif = vif;
-
-	mvif->mt76.idx = __ffs64(~dev->mt76.vif_mask);
-	if (mvif->mt76.idx >= (MT7915_MAX_INTERFACES << dev->dbdc_support)) {
-		ret = -ENOSPC;
-		goto out;
-	}
-
-	idx = get_omac_idx(vif->type, phy->omac_mask);
-	if (idx < 0) {
-		ret = -ENOSPC;
-		goto out;
-	}
-	mvif->mt76.omac_idx = idx;
-	mvif->phy = phy;
-	mvif->mt76.band_idx = phy->band_idx;
-
-	mvif->mt76.wmm_idx = vif->type != NL80211_IFTYPE_AP;
-	if (ext_phy)
-		mvif->mt76.wmm_idx += 2;
-
-	ret = mt7915_mcu_add_dev_info(phy, vif, true);
-	if (ret)
-		goto out;
-
-	dev->mt76.vif_mask |= BIT_ULL(mvif->mt76.idx);
-	phy->omac_mask |= BIT_ULL(mvif->mt76.omac_idx);
-
-	idx = MT7915_WTBL_RESERVED - mvif->mt76.idx;
-
-	INIT_LIST_HEAD(&mvif->sta.rc_list);
-	INIT_LIST_HEAD(&mvif->sta.poll_list);
-	mvif->sta.wcid.idx = idx;
-	mvif->sta.wcid.phy_idx = ext_phy;
-	mvif->sta.wcid.hw_key_idx = -1;
-	mvif->sta.wcid.tx_info |= MT_WCID_TX_INFO_SET;
-	mt76_packet_id_init(&mvif->sta.wcid);
-
-	mt7915_mac_wtbl_update(dev, idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	if (vif->txq) {
-		mtxq = (struct mt76_txq *)vif->txq->drv_priv;
-		mtxq->wcid = idx;
-	}
-
-	if (vif->type != NL80211_IFTYPE_AP &&
-	    (!mvif->mt76.omac_idx || mvif->mt76.omac_idx > 3))
-		vif->offload_flags = 0;
-	vif->offload_flags |= IEEE80211_OFFLOAD_ENCAP_4ADDR;
-
-	mt7915_init_bitrate_mask(vif);
-	memset(&mvif->cap, -1, sizeof(mvif->cap));
-
-	mt7915_mcu_add_bss_info(phy, vif, true);
-	mt7915_mcu_add_sta(dev, vif, NULL, true);
-	rcu_assign_pointer(dev->mt76.wcid[idx], &mvif->sta.wcid);
-
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static void mt7915_remove_interface(struct ieee80211_hw *hw,
-				    struct ieee80211_vif *vif)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_sta *msta = &mvif->sta;
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	int idx = msta->wcid.idx;
-
-	mt7915_mcu_add_bss_info(phy, vif, false);
-	mt7915_mcu_add_sta(dev, vif, NULL, false);
-
-	mutex_lock(&dev->mt76.mutex);
-	mt76_testmode_reset(phy->mt76, true);
-	mutex_unlock(&dev->mt76.mutex);
-
-	if (vif == phy->monitor_vif)
-		phy->monitor_vif = NULL;
-
-	mt7915_mcu_add_dev_info(phy, vif, false);
-
-	rcu_assign_pointer(dev->mt76.wcid[idx], NULL);
-
-	mutex_lock(&dev->mt76.mutex);
-	dev->mt76.vif_mask &= ~BIT_ULL(mvif->mt76.idx);
-	phy->omac_mask &= ~BIT_ULL(mvif->mt76.omac_idx);
-	mutex_unlock(&dev->mt76.mutex);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (!list_empty(&msta->poll_list))
-		list_del_init(&msta->poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	mt76_packet_id_flush(&dev->mt76, &msta->wcid);
-}
-
-int mt7915_set_channel(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	int ret;
-
-	cancel_delayed_work_sync(&phy->mt76->mac_work);
-
-	mutex_lock(&dev->mt76.mutex);
-	set_bit(MT76_RESET, &phy->mt76->state);
-
-	mt76_set_channel(phy->mt76);
-
-	if (dev->flash_mode) {
-		ret = mt7915_mcu_apply_tx_dpd(phy);
-		if (ret)
-			goto out;
-	}
-
-	ret = mt7915_mcu_set_chan_info(phy, MCU_EXT_CMD(CHANNEL_SWITCH));
-	if (ret)
-		goto out;
-
-	mt7915_mac_set_timing(phy);
-	ret = mt7915_dfs_init_radar_detector(phy);
-	mt7915_mac_cca_stats_reset(phy);
-
-	mt7915_mac_reset_counters(phy);
-	phy->noise = 0;
-
-out:
-	clear_bit(MT76_RESET, &phy->mt76->state);
-	mutex_unlock(&dev->mt76.mutex);
-
-	mt76_txq_schedule_all(phy->mt76);
-
-	if (!mt76_testmode_enabled(phy->mt76))
-		ieee80211_queue_delayed_work(phy->mt76->hw,
-					     &phy->mt76->mac_work,
-					     MT7915_WATCHDOG_TIME);
-
-	return ret;
-}
-
-static int mt7915_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
-			  struct ieee80211_vif *vif, struct ieee80211_sta *sta,
-			  struct ieee80211_key_conf *key)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_sta *msta = sta ? (struct mt7915_sta *)sta->drv_priv :
-				  &mvif->sta;
-	struct mt76_wcid *wcid = &msta->wcid;
-	u8 *wcid_keyidx = &wcid->hw_key_idx;
-	int idx = key->keyidx;
-	int err = 0;
-
-	/* The hardware does not support per-STA RX GTK, fallback
-	 * to software mode for these.
-	 */
-	if ((vif->type == NL80211_IFTYPE_ADHOC ||
-	     vif->type == NL80211_IFTYPE_MESH_POINT) &&
-	    (key->cipher == WLAN_CIPHER_SUITE_TKIP ||
-	     key->cipher == WLAN_CIPHER_SUITE_CCMP) &&
-	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
-		return -EOPNOTSUPP;
-
-	/* fall back to sw encryption for unsupported ciphers */
-	switch (key->cipher) {
-	case WLAN_CIPHER_SUITE_AES_CMAC:
-		wcid_keyidx = &wcid->hw_key_idx2;
-		key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIE;
-		break;
-	case WLAN_CIPHER_SUITE_TKIP:
-	case WLAN_CIPHER_SUITE_CCMP:
-	case WLAN_CIPHER_SUITE_CCMP_256:
-	case WLAN_CIPHER_SUITE_GCMP:
-	case WLAN_CIPHER_SUITE_GCMP_256:
-	case WLAN_CIPHER_SUITE_SMS4:
-		break;
-	case WLAN_CIPHER_SUITE_WEP40:
-	case WLAN_CIPHER_SUITE_WEP104:
-	default:
-		return -EOPNOTSUPP;
-	}
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (cmd == SET_KEY && !sta && !mvif->mt76.cipher) {
-		mvif->mt76.cipher = mt76_connac_mcu_get_cipher(key->cipher);
-		mt7915_mcu_add_bss_info(phy, vif, true);
-	}
-
-	if (cmd == SET_KEY)
-		*wcid_keyidx = idx;
-	else if (idx == *wcid_keyidx)
-		*wcid_keyidx = -1;
-	else
-		goto out;
-
-	mt76_wcid_key_setup(&dev->mt76, wcid,
-			    cmd == SET_KEY ? key : NULL);
-
-	err = mt76_connac_mcu_add_key(&dev->mt76, vif, &msta->bip,
-				      key, MCU_EXT_CMD(STA_REC_UPDATE),
-				      &msta->wcid, cmd);
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return err;
-}
-
-static int mt7915_set_sar_specs(struct ieee80211_hw *hw,
-				const struct cfg80211_sar_specs *sar)
-{
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	int err = -EINVAL;
-
-	mutex_lock(&dev->mt76.mutex);
-	if (!cfg80211_chandef_valid(&phy->mt76->chandef))
-		goto out;
-
-	err = mt76_init_sar_power(hw, sar);
-	if (err)
-		goto out;
-
-	err = mt7915_mcu_set_txpower_sku(phy);
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return err;
-}
-
-static int mt7915_config(struct ieee80211_hw *hw, u32 changed)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	bool band = phy != &dev->phy;
-	int ret;
-
-	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
-#ifdef CONFIG_NL80211_TESTMODE
-		if (phy->mt76->test.state != MT76_TM_STATE_OFF) {
-			mutex_lock(&dev->mt76.mutex);
-			mt76_testmode_reset(phy->mt76, false);
-			mutex_unlock(&dev->mt76.mutex);
-		}
-#endif
-		ieee80211_stop_queues(hw);
-		ret = mt7915_set_channel(phy);
-		if (ret)
-			return ret;
-		ieee80211_wake_queues(hw);
-	}
-
-	if (changed & IEEE80211_CONF_CHANGE_POWER) {
-		ret = mt7915_mcu_set_txpower_sku(phy);
-		if (ret)
-			return ret;
-	}
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
-		bool enabled = !!(hw->conf.flags & IEEE80211_CONF_MONITOR);
-
-		if (!enabled)
-			phy->rxfilter |= MT_WF_RFCR_DROP_OTHER_UC;
-		else
-			phy->rxfilter &= ~MT_WF_RFCR_DROP_OTHER_UC;
-
-		mt76_rmw_field(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_RXD_G5_EN,
-			       enabled);
-		mt76_testmode_reset(phy->mt76, true);
-		mt76_wr(dev, MT_WF_RFCR(band), phy->rxfilter);
-	}
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-static int
-mt7915_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
-	       const struct ieee80211_tx_queue_params *params)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-
-	/* no need to update right away, we'll get BSS_CHANGED_QOS */
-	queue = mt76_connac_lmac_mapping(queue);
-	mvif->queue_params[queue] = *params;
-
-	return 0;
-}
-
-static void mt7915_configure_filter(struct ieee80211_hw *hw,
-				    unsigned int changed_flags,
-				    unsigned int *total_flags,
-				    u64 multicast)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	bool band = phy != &dev->phy;
-	u32 ctl_flags = MT_WF_RFCR1_DROP_ACK |
-			MT_WF_RFCR1_DROP_BF_POLL |
-			MT_WF_RFCR1_DROP_BA |
-			MT_WF_RFCR1_DROP_CFEND |
-			MT_WF_RFCR1_DROP_CFACK;
-	u32 flags = 0;
-
-#define MT76_FILTER(_flag, _hw) do {					\
-		flags |= *total_flags & FIF_##_flag;			\
-		phy->rxfilter &= ~(_hw);				\
-		phy->rxfilter |= !(flags & FIF_##_flag) * (_hw);	\
-	} while (0)
-
-	mutex_lock(&dev->mt76.mutex);
-
-	phy->rxfilter &= ~(MT_WF_RFCR_DROP_OTHER_BSS |
-			   MT_WF_RFCR_DROP_OTHER_BEACON |
-			   MT_WF_RFCR_DROP_FRAME_REPORT |
-			   MT_WF_RFCR_DROP_PROBEREQ |
-			   MT_WF_RFCR_DROP_MCAST_FILTERED |
-			   MT_WF_RFCR_DROP_MCAST |
-			   MT_WF_RFCR_DROP_BCAST |
-			   MT_WF_RFCR_DROP_DUPLICATE |
-			   MT_WF_RFCR_DROP_A2_BSSID |
-			   MT_WF_RFCR_DROP_UNWANTED_CTL |
-			   MT_WF_RFCR_DROP_STBC_MULTI);
-
-	MT76_FILTER(OTHER_BSS, MT_WF_RFCR_DROP_OTHER_TIM |
-			       MT_WF_RFCR_DROP_A3_MAC |
-			       MT_WF_RFCR_DROP_A3_BSSID);
-
-	MT76_FILTER(FCSFAIL, MT_WF_RFCR_DROP_FCSFAIL);
-
-	MT76_FILTER(CONTROL, MT_WF_RFCR_DROP_CTS |
-			     MT_WF_RFCR_DROP_RTS |
-			     MT_WF_RFCR_DROP_CTL_RSV |
-			     MT_WF_RFCR_DROP_NDPA);
-
-	*total_flags = flags;
-	mt76_wr(dev, MT_WF_RFCR(band), phy->rxfilter);
-
-	if (*total_flags & FIF_CONTROL)
-		mt76_clear(dev, MT_WF_RFCR1(band), ctl_flags);
-	else
-		mt76_set(dev, MT_WF_RFCR1(band), ctl_flags);
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static void
-mt7915_update_bss_color(struct ieee80211_hw *hw,
-			struct ieee80211_vif *vif,
-			struct cfg80211_he_bss_color *bss_color)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_AP: {
-		struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-
-		if (mvif->mt76.omac_idx > HW_BSSID_MAX)
-			return;
-		fallthrough;
-	}
-	case NL80211_IFTYPE_STATION:
-		mt7915_mcu_update_bss_color(dev, vif, bss_color);
-		break;
-	default:
-		break;
-	}
-}
-
-static void mt7915_bss_info_changed(struct ieee80211_hw *hw,
-				    struct ieee80211_vif *vif,
-				    struct ieee80211_bss_conf *info,
-				    u32 changed)
-{
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	/*
-	 * station mode uses BSSID to map the wlan entry to a peer,
-	 * and then peer references bss_info_rfch to set bandwidth cap.
-	 */
-	if (changed & BSS_CHANGED_BSSID &&
-	    vif->type == NL80211_IFTYPE_STATION) {
-		bool join = !is_zero_ether_addr(info->bssid);
-
-		mt7915_mcu_add_bss_info(phy, vif, join);
-		mt7915_mcu_add_sta(dev, vif, NULL, join);
-	}
-
-	if (changed & BSS_CHANGED_ASSOC) {
-		mt7915_mcu_add_bss_info(phy, vif, info->assoc);
-		mt7915_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
-	}
-
-	if (changed & BSS_CHANGED_ERP_SLOT) {
-		int slottime = info->use_short_slot ? 9 : 20;
-
-		if (slottime != phy->slottime) {
-			phy->slottime = slottime;
-			mt7915_mac_set_timing(phy);
-		}
-	}
-
-	if (changed & BSS_CHANGED_BEACON_ENABLED && info->enable_beacon) {
-		mt7915_mcu_add_bss_info(phy, vif, true);
-		mt7915_mcu_add_sta(dev, vif, NULL, true);
-	}
-
-	/* ensure that enable txcmd_mode after bss_info */
-	if (changed & (BSS_CHANGED_QOS | BSS_CHANGED_BEACON_ENABLED))
-		mt7915_mcu_set_tx(dev, vif);
-
-	if (changed & BSS_CHANGED_HE_OBSS_PD)
-		mt7915_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
-
-	if (changed & BSS_CHANGED_HE_BSS_COLOR)
-		mt7915_update_bss_color(hw, vif, &info->he_bss_color);
-
-	if (changed & (BSS_CHANGED_BEACON |
-		       BSS_CHANGED_BEACON_ENABLED |
-		       BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |
-		       BSS_CHANGED_FILS_DISCOVERY))
-		mt7915_mcu_add_beacon(hw, vif, info->enable_beacon, changed);
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static void
-mt7915_channel_switch_beacon(struct ieee80211_hw *hw,
-			     struct ieee80211_vif *vif,
-			     struct cfg80211_chan_def *chandef)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-
-	mutex_lock(&dev->mt76.mutex);
-	mt7915_mcu_add_beacon(hw, vif, true, BSS_CHANGED_BEACON);
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta)
-{
-	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	bool ext_phy = mvif->phy != &dev->phy;
-	int ret, idx;
-
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7915_WTBL_STA);
-	if (idx < 0)
-		return -ENOSPC;
-
-	INIT_LIST_HEAD(&msta->rc_list);
-	INIT_LIST_HEAD(&msta->poll_list);
-	msta->vif = mvif;
-	msta->wcid.sta = 1;
-	msta->wcid.idx = idx;
-	msta->wcid.phy_idx = ext_phy;
-	msta->wcid.tx_info |= MT_WCID_TX_INFO_SET;
-	msta->jiffies = jiffies;
-
-	mt7915_mac_wtbl_update(dev, idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	ret = mt7915_mcu_add_sta(dev, vif, sta, true);
-	if (ret)
-		return ret;
-
-	return mt7915_mcu_add_rate_ctrl(dev, vif, sta, false);
-}
-
-void mt7915_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta)
-{
-	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	int i;
-
-	mt7915_mcu_add_sta(dev, vif, sta, false);
-
-	mt7915_mac_wtbl_update(dev, msta->wcid.idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	for (i = 0; i < ARRAY_SIZE(msta->twt.flow); i++)
-		mt7915_mac_twt_teardown_flow(dev, msta, i);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (!list_empty(&msta->poll_list))
-		list_del_init(&msta->poll_list);
-	if (!list_empty(&msta->rc_list))
-		list_del_init(&msta->rc_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-}
-
-static void mt7915_tx(struct ieee80211_hw *hw,
-		      struct ieee80211_tx_control *control,
-		      struct sk_buff *skb)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-
-	if (control->sta) {
-		struct mt7915_sta *sta;
-
-		sta = (struct mt7915_sta *)control->sta->drv_priv;
-		wcid = &sta->wcid;
-	}
-
-	if (vif && !control->sta) {
-		struct mt7915_vif *mvif;
-
-		mvif = (struct mt7915_vif *)vif->drv_priv;
-		wcid = &mvif->sta.wcid;
-	}
-
-	mt76_tx(mphy, control->sta, wcid, skb);
-}
-
-static int mt7915_set_rts_threshold(struct ieee80211_hw *hw, u32 val)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	int ret;
-
-	mutex_lock(&dev->mt76.mutex);
-	ret = mt76_connac_mcu_set_rts_thresh(&dev->mt76, val, phy != &dev->phy);
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static int
-mt7915_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		    struct ieee80211_ampdu_params *params)
-{
-	enum ieee80211_ampdu_mlme_action action = params->action;
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct ieee80211_sta *sta = params->sta;
-	struct ieee80211_txq *txq = sta->txq[params->tid];
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	u16 tid = params->tid;
-	u16 ssn = params->ssn;
-	struct mt76_txq *mtxq;
-	int ret = 0;
-
-	if (!txq)
-		return -EINVAL;
-
-	mtxq = (struct mt76_txq *)txq->drv_priv;
-
-	mutex_lock(&dev->mt76.mutex);
-	switch (action) {
-	case IEEE80211_AMPDU_RX_START:
-		mt76_rx_aggr_start(&dev->mt76, &msta->wcid, tid, ssn,
-				   params->buf_size);
-		ret = mt7915_mcu_add_rx_ba(dev, params, true);
-		break;
-	case IEEE80211_AMPDU_RX_STOP:
-		mt76_rx_aggr_stop(&dev->mt76, &msta->wcid, tid);
-		ret = mt7915_mcu_add_rx_ba(dev, params, false);
-		break;
-	case IEEE80211_AMPDU_TX_OPERATIONAL:
-		mtxq->aggr = true;
-		mtxq->send_bar = false;
-		ret = mt7915_mcu_add_tx_ba(dev, params, true);
-		break;
-	case IEEE80211_AMPDU_TX_STOP_FLUSH:
-	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
-		mtxq->aggr = false;
-		clear_bit(tid, &msta->ampdu_state);
-		ret = mt7915_mcu_add_tx_ba(dev, params, false);
-		break;
-	case IEEE80211_AMPDU_TX_START:
-		set_bit(tid, &msta->ampdu_state);
-		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
-		break;
-	case IEEE80211_AMPDU_TX_STOP_CONT:
-		mtxq->aggr = false;
-		clear_bit(tid, &msta->ampdu_state);
-		ret = mt7915_mcu_add_tx_ba(dev, params, false);
-		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
-	}
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static int
-mt7915_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	       struct ieee80211_sta *sta)
-{
-	return mt76_sta_state(hw, vif, sta, IEEE80211_STA_NOTEXIST,
-			      IEEE80211_STA_NONE);
-}
-
-static int
-mt7915_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		  struct ieee80211_sta *sta)
-{
-	return mt76_sta_state(hw, vif, sta, IEEE80211_STA_NONE,
-			      IEEE80211_STA_NOTEXIST);
-}
-
-static int
-mt7915_get_stats(struct ieee80211_hw *hw,
-		 struct ieee80211_low_level_stats *stats)
-{
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mib_stats *mib = &phy->mib;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	stats->dot11RTSSuccessCount = mib->rts_cnt;
-	stats->dot11RTSFailureCount = mib->rts_retries_cnt;
-	stats->dot11FCSErrorCount = mib->fcs_err_cnt;
-	stats->dot11ACKFailureCount = mib->ack_fail_cnt;
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-u64 __mt7915_get_tsf(struct ieee80211_hw *hw, struct mt7915_vif *mvif)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	bool band = phy != &dev->phy;
-	union {
-		u64 t64;
-		u32 t32[2];
-	} tsf;
-	u16 n;
-
-	lockdep_assert_held(&dev->mt76.mutex);
-
-	n = mvif->mt76.omac_idx > HW_BSSID_MAX ? HW_BSSID_0
-					       : mvif->mt76.omac_idx;
-	/* TSF software read */
-	if (is_mt7915(&dev->mt76))
-		mt76_rmw(dev, MT_LPON_TCR(band, n), MT_LPON_TCR_SW_MODE,
-			 MT_LPON_TCR_SW_READ);
-	else
-		mt76_rmw(dev, MT_LPON_TCR_MT7916(band, n), MT_LPON_TCR_SW_MODE,
-			 MT_LPON_TCR_SW_READ);
-	tsf.t32[0] = mt76_rr(dev, MT_LPON_UTTR0(band));
-	tsf.t32[1] = mt76_rr(dev, MT_LPON_UTTR1(band));
-
-	return tsf.t64;
-}
-
-static u64
-mt7915_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	u64 ret;
-
-	mutex_lock(&dev->mt76.mutex);
-	ret = __mt7915_get_tsf(hw, mvif);
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static void
-mt7915_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	       u64 timestamp)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	bool band = phy != &dev->phy;
-	union {
-		u64 t64;
-		u32 t32[2];
-	} tsf = { .t64 = timestamp, };
-	u16 n;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	n = mvif->mt76.omac_idx > HW_BSSID_MAX ? HW_BSSID_0
-					       : mvif->mt76.omac_idx;
-	mt76_wr(dev, MT_LPON_UTTR0(band), tsf.t32[0]);
-	mt76_wr(dev, MT_LPON_UTTR1(band), tsf.t32[1]);
-	/* TSF software overwrite */
-	if (is_mt7915(&dev->mt76))
-		mt76_rmw(dev, MT_LPON_TCR(band, n), MT_LPON_TCR_SW_MODE,
-			 MT_LPON_TCR_SW_WRITE);
-	else
-		mt76_rmw(dev, MT_LPON_TCR_MT7916(band, n), MT_LPON_TCR_SW_MODE,
-			 MT_LPON_TCR_SW_WRITE);
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static void
-mt7915_offset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		  s64 timestamp)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	bool band = phy != &dev->phy;
-	union {
-		u64 t64;
-		u32 t32[2];
-	} tsf = { .t64 = timestamp, };
-	u16 n;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	n = mvif->mt76.omac_idx > HW_BSSID_MAX ? HW_BSSID_0
-					       : mvif->mt76.omac_idx;
-	mt76_wr(dev, MT_LPON_UTTR0(band), tsf.t32[0]);
-	mt76_wr(dev, MT_LPON_UTTR1(band), tsf.t32[1]);
-	/* TSF software adjust*/
-	if (is_mt7915(&dev->mt76))
-		mt76_rmw(dev, MT_LPON_TCR(band, n), MT_LPON_TCR_SW_MODE,
-			 MT_LPON_TCR_SW_ADJUST);
-	else
-		mt76_rmw(dev, MT_LPON_TCR_MT7916(band, n), MT_LPON_TCR_SW_MODE,
-			 MT_LPON_TCR_SW_ADJUST);
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static void
-mt7915_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class)
-{
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_dev *dev = phy->dev;
-
-	mutex_lock(&dev->mt76.mutex);
-	phy->coverage_class = max_t(s16, coverage_class, 0);
-	mt7915_mac_set_timing(phy);
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static int
-mt7915_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	int max_nss = hweight8(hw->wiphy->available_antennas_tx);
-	bool ext_phy = phy != &dev->phy;
-
-	if (!tx_ant || tx_ant != rx_ant || ffs(tx_ant) > max_nss)
-		return -EINVAL;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	phy->mt76->antenna_mask = tx_ant;
-
-	/* handle a variant of mt7916 which has 3T3R but nss2 on 5 GHz band */
-	if (is_mt7916(&dev->mt76) && ext_phy && hweight8(tx_ant) == max_nss)
-		phy->mt76->chainmask = dev->chainmask >> dev->chainshift;
-	else
-		phy->mt76->chainmask = tx_ant << (dev->chainshift * ext_phy);
-
-	mt76_set_stream_caps(phy->mt76, true);
-	mt7915_set_stream_vht_txbf_caps(phy);
-	mt7915_set_stream_he_caps(phy);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-static void mt7915_sta_statistics(struct ieee80211_hw *hw,
-				  struct ieee80211_vif *vif,
-				  struct ieee80211_sta *sta,
-				  struct station_info *sinfo)
-{
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct rate_info *txrate = &msta->wcid.rate;
-	struct rate_info rxrate = {};
-
-	if (is_mt7915(&phy->dev->mt76) &&
-	    !mt7915_mcu_get_rx_rate(phy, vif, sta, &rxrate)) {
-		sinfo->rxrate = rxrate;
-		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_BITRATE);
-	}
-
-	if (!txrate->legacy && !txrate->flags)
-		return;
-
-	if (txrate->legacy) {
-		sinfo->txrate.legacy = txrate->legacy;
-	} else {
-		sinfo->txrate.mcs = txrate->mcs;
-		sinfo->txrate.nss = txrate->nss;
-		sinfo->txrate.bw = txrate->bw;
-		sinfo->txrate.he_gi = txrate->he_gi;
-		sinfo->txrate.he_dcm = txrate->he_dcm;
-		sinfo->txrate.he_ru_alloc = txrate->he_ru_alloc;
-	}
-	sinfo->txrate.flags = txrate->flags;
-	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BITRATE);
-
-	/* offloading flows bypass networking stack, so driver counts and
-	 * reports sta statistics via NL80211_STA_INFO when WED is active.
-	 */
-	if (mtk_wed_device_active(&phy->dev->mt76.mmio.wed)) {
-		sinfo->tx_bytes = msta->wcid.stats.tx_bytes;
-		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BYTES64);
-
-		sinfo->tx_packets = msta->wcid.stats.tx_packets;
-		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_PACKETS);
-
-		sinfo->tx_failed = msta->wcid.stats.tx_failed;
-		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_FAILED);
-
-		sinfo->tx_retries = msta->wcid.stats.tx_retries;
-		sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_RETRIES);
-	}
-}
-
-static void mt7915_sta_rc_work(void *data, struct ieee80211_sta *sta)
-{
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct mt7915_dev *dev = msta->vif->phy->dev;
-	u32 *changed = data;
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	msta->changed |= *changed;
-	if (list_empty(&msta->rc_list))
-		list_add_tail(&msta->rc_list, &dev->sta_rc_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-}
-
-static void mt7915_sta_rc_update(struct ieee80211_hw *hw,
-				 struct ieee80211_vif *vif,
-				 struct ieee80211_sta *sta,
-				 u32 changed)
-{
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_dev *dev = phy->dev;
-
-	mt7915_sta_rc_work(&changed, sta);
-	ieee80211_queue_work(hw, &dev->rc_work);
-}
-
-static int
-mt7915_set_bitrate_mask(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			const struct cfg80211_bitrate_mask *mask)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_dev *dev = phy->dev;
-	u32 changed = IEEE80211_RC_SUPP_RATES_CHANGED;
-
-	mvif->bitrate_mask = *mask;
-
-	/* if multiple rates across different preambles are given we can
-	 * reconfigure this info with all peers using sta_rec command with
-	 * the below exception cases.
-	 * - single rate : if a rate is passed along with different preambles,
-	 * we select the highest one as fixed rate. i.e VHT MCS for VHT peers.
-	 * - multiple rates: if it's not in range format i.e 0-{7,8,9} for VHT
-	 * then multiple MCS setting (MCS 4,5,6) is not supported.
-	 */
-	ieee80211_iterate_stations_atomic(hw, mt7915_sta_rc_work, &changed);
-	ieee80211_queue_work(hw, &dev->rc_work);
-
-	return 0;
-}
-
-static void mt7915_sta_set_4addr(struct ieee80211_hw *hw,
-				 struct ieee80211_vif *vif,
-				 struct ieee80211_sta *sta,
-				 bool enabled)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-
-	if (enabled)
-		set_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags);
-	else
-		clear_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags);
-
-	mt76_connac_mcu_wtbl_update_hdr_trans(&dev->mt76, vif, sta);
-}
-
-static void mt7915_sta_set_decap_offload(struct ieee80211_hw *hw,
-				 struct ieee80211_vif *vif,
-				 struct ieee80211_sta *sta,
-				 bool enabled)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-
-	if (enabled)
-		set_bit(MT_WCID_FLAG_HDR_TRANS, &msta->wcid.flags);
-	else
-		clear_bit(MT_WCID_FLAG_HDR_TRANS, &msta->wcid.flags);
-
-	mt76_connac_mcu_wtbl_update_hdr_trans(&dev->mt76, vif, sta);
-}
-
-static const char mt7915_gstrings_stats[][ETH_GSTRING_LEN] = {
-	"tx_ampdu_cnt",
-	"tx_stop_q_empty_cnt",
-	"tx_mpdu_attempts",
-	"tx_mpdu_success",
-	"tx_rwp_fail_cnt",
-	"tx_rwp_need_cnt",
-	"tx_pkt_ebf_cnt",
-	"tx_pkt_ibf_cnt",
-	"tx_ampdu_len:0-1",
-	"tx_ampdu_len:2-10",
-	"tx_ampdu_len:11-19",
-	"tx_ampdu_len:20-28",
-	"tx_ampdu_len:29-37",
-	"tx_ampdu_len:38-46",
-	"tx_ampdu_len:47-55",
-	"tx_ampdu_len:56-79",
-	"tx_ampdu_len:80-103",
-	"tx_ampdu_len:104-127",
-	"tx_ampdu_len:128-151",
-	"tx_ampdu_len:152-175",
-	"tx_ampdu_len:176-199",
-	"tx_ampdu_len:200-223",
-	"tx_ampdu_len:224-247",
-	"ba_miss_count",
-	"tx_beamformer_ppdu_iBF",
-	"tx_beamformer_ppdu_eBF",
-	"tx_beamformer_rx_feedback_all",
-	"tx_beamformer_rx_feedback_he",
-	"tx_beamformer_rx_feedback_vht",
-	"tx_beamformer_rx_feedback_ht",
-	"tx_beamformer_rx_feedback_bw", /* zero based idx: 20, 40, 80, 160 */
-	"tx_beamformer_rx_feedback_nc",
-	"tx_beamformer_rx_feedback_nr",
-	"tx_beamformee_ok_feedback_pkts",
-	"tx_beamformee_feedback_trig",
-	"tx_mu_beamforming",
-	"tx_mu_mpdu",
-	"tx_mu_successful_mpdu",
-	"tx_su_successful_mpdu",
-	"tx_msdu_pack_1",
-	"tx_msdu_pack_2",
-	"tx_msdu_pack_3",
-	"tx_msdu_pack_4",
-	"tx_msdu_pack_5",
-	"tx_msdu_pack_6",
-	"tx_msdu_pack_7",
-	"tx_msdu_pack_8",
-
-	/* rx counters */
-	"rx_fifo_full_cnt",
-	"rx_mpdu_cnt",
-	"channel_idle_cnt",
-	"primary_cca_busy_time",
-	"secondary_cca_busy_time",
-	"primary_energy_detect_time",
-	"cck_mdrdy_time",
-	"ofdm_mdrdy_time",
-	"green_mdrdy_time",
-	"rx_vector_mismatch_cnt",
-	"rx_delimiter_fail_cnt",
-	"rx_mrdy_cnt",
-	"rx_len_mismatch_cnt",
-	"rx_ampdu_cnt",
-	"rx_ampdu_bytes_cnt",
-	"rx_ampdu_valid_subframe_cnt",
-	"rx_ampdu_valid_subframe_b_cnt",
-	"rx_pfdrop_cnt",
-	"rx_vec_queue_overflow_drop_cnt",
-	"rx_ba_cnt",
-
-	/* per vif counters */
-	"v_tx_mode_cck",
-	"v_tx_mode_ofdm",
-	"v_tx_mode_ht",
-	"v_tx_mode_ht_gf",
-	"v_tx_mode_vht",
-	"v_tx_mode_he_su",
-	"v_tx_mode_he_ext_su",
-	"v_tx_mode_he_tb",
-	"v_tx_mode_he_mu",
-	"v_tx_bw_20",
-	"v_tx_bw_40",
-	"v_tx_bw_80",
-	"v_tx_bw_160",
-	"v_tx_mcs_0",
-	"v_tx_mcs_1",
-	"v_tx_mcs_2",
-	"v_tx_mcs_3",
-	"v_tx_mcs_4",
-	"v_tx_mcs_5",
-	"v_tx_mcs_6",
-	"v_tx_mcs_7",
-	"v_tx_mcs_8",
-	"v_tx_mcs_9",
-	"v_tx_mcs_10",
-	"v_tx_mcs_11",
-};
-
-#define MT7915_SSTATS_LEN ARRAY_SIZE(mt7915_gstrings_stats)
-
-/* Ethtool related API */
-static
-void mt7915_get_et_strings(struct ieee80211_hw *hw,
-			   struct ieee80211_vif *vif,
-			   u32 sset, u8 *data)
-{
-	if (sset == ETH_SS_STATS)
-		memcpy(data, *mt7915_gstrings_stats,
-		       sizeof(mt7915_gstrings_stats));
-}
-
-static
-int mt7915_get_et_sset_count(struct ieee80211_hw *hw,
-			     struct ieee80211_vif *vif, int sset)
-{
-	if (sset == ETH_SS_STATS)
-		return MT7915_SSTATS_LEN;
-
-	return 0;
-}
-
-static void mt7915_ethtool_worker(void *wi_data, struct ieee80211_sta *sta)
-{
-	struct mt76_ethtool_worker_info *wi = wi_data;
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-
-	if (msta->vif->mt76.idx != wi->idx)
-		return;
-
-	mt76_ethtool_worker(wi, &msta->wcid.stats);
-}
-
-static
-void mt7915_get_et_stats(struct ieee80211_hw *hw,
-			 struct ieee80211_vif *vif,
-			 struct ethtool_stats *stats, u64 *data)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt76_ethtool_worker_info wi = {
-		.data = data,
-		.idx = mvif->mt76.idx,
-	};
-	struct mib_stats *mib = &phy->mib;
-	/* See mt7915_ampdu_stat_read_phy, etc */
-	int i, n, ei = 0;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt7915_mac_update_stats(phy);
-
-	data[ei++] = mib->tx_ampdu_cnt;
-	data[ei++] = mib->tx_stop_q_empty_cnt;
-	data[ei++] = mib->tx_mpdu_attempts_cnt;
-	data[ei++] = mib->tx_mpdu_success_cnt;
-	data[ei++] = mib->tx_rwp_fail_cnt;
-	data[ei++] = mib->tx_rwp_need_cnt;
-	data[ei++] = mib->tx_pkt_ebf_cnt;
-	data[ei++] = mib->tx_pkt_ibf_cnt;
-
-	/* Tx ampdu stat */
-	n = phy->band_idx ? ARRAY_SIZE(dev->mt76.aggr_stats) / 2 : 0;
-	for (i = 0; i < 15 /*ARRAY_SIZE(bound)*/; i++)
-		data[ei++] = dev->mt76.aggr_stats[i + n];
-
-	data[ei++] = phy->mib.ba_miss_cnt;
-
-	/* Tx Beamformer monitor */
-	data[ei++] = mib->tx_bf_ibf_ppdu_cnt;
-	data[ei++] = mib->tx_bf_ebf_ppdu_cnt;
-
-	/* Tx Beamformer Rx feedback monitor */
-	data[ei++] = mib->tx_bf_rx_fb_all_cnt;
-	data[ei++] = mib->tx_bf_rx_fb_he_cnt;
-	data[ei++] = mib->tx_bf_rx_fb_vht_cnt;
-	data[ei++] = mib->tx_bf_rx_fb_ht_cnt;
-
-	data[ei++] = mib->tx_bf_rx_fb_bw;
-	data[ei++] = mib->tx_bf_rx_fb_nc_cnt;
-	data[ei++] = mib->tx_bf_rx_fb_nr_cnt;
-
-	/* Tx Beamformee Rx NDPA & Tx feedback report */
-	data[ei++] = mib->tx_bf_fb_cpl_cnt;
-	data[ei++] = mib->tx_bf_fb_trig_cnt;
-
-	/* Tx SU & MU counters */
-	data[ei++] = mib->tx_bf_cnt;
-	data[ei++] = mib->tx_mu_mpdu_cnt;
-	data[ei++] = mib->tx_mu_acked_mpdu_cnt;
-	data[ei++] = mib->tx_su_acked_mpdu_cnt;
-
-	/* Tx amsdu info (pack-count histogram) */
-	for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++)
-		data[ei++] = mib->tx_amsdu[i];
-
-	/* rx counters */
-	data[ei++] = mib->rx_fifo_full_cnt;
-	data[ei++] = mib->rx_mpdu_cnt;
-	data[ei++] = mib->channel_idle_cnt;
-	data[ei++] = mib->primary_cca_busy_time;
-	data[ei++] = mib->secondary_cca_busy_time;
-	data[ei++] = mib->primary_energy_detect_time;
-	data[ei++] = mib->cck_mdrdy_time;
-	data[ei++] = mib->ofdm_mdrdy_time;
-	data[ei++] = mib->green_mdrdy_time;
-	data[ei++] = mib->rx_vector_mismatch_cnt;
-	data[ei++] = mib->rx_delimiter_fail_cnt;
-	data[ei++] = mib->rx_mrdy_cnt;
-	data[ei++] = mib->rx_len_mismatch_cnt;
-	data[ei++] = mib->rx_ampdu_cnt;
-	data[ei++] = mib->rx_ampdu_bytes_cnt;
-	data[ei++] = mib->rx_ampdu_valid_subframe_cnt;
-	data[ei++] = mib->rx_ampdu_valid_subframe_bytes_cnt;
-	data[ei++] = mib->rx_pfdrop_cnt;
-	data[ei++] = mib->rx_vec_queue_overflow_drop_cnt;
-	data[ei++] = mib->rx_ba_cnt;
-
-	/* Add values for all stations owned by this vif */
-	wi.initial_stat_idx = ei;
-	ieee80211_iterate_stations_atomic(hw, mt7915_ethtool_worker, &wi);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	if (wi.sta_count == 0)
-		return;
-
-	ei += wi.worker_stat_count;
-	if (ei != MT7915_SSTATS_LEN)
-		dev_err(dev->mt76.dev, "ei: %d  MT7915_SSTATS_LEN: %d",
-			ei, (int)MT7915_SSTATS_LEN);
-}
-
-static void
-mt7915_twt_teardown_request(struct ieee80211_hw *hw,
-			    struct ieee80211_sta *sta,
-			    u8 flowid)
-{
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-
-	mutex_lock(&dev->mt76.mutex);
-	mt7915_mac_twt_teardown_flow(dev, msta, flowid);
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static int
-mt7915_set_radar_background(struct ieee80211_hw *hw,
-			    struct cfg80211_chan_def *chandef)
-{
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_dev *dev = phy->dev;
-	int ret = -EINVAL;
-	bool running;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (dev->mt76.region == NL80211_DFS_UNSET)
-		goto out;
-
-	if (dev->rdd2_phy && dev->rdd2_phy != phy) {
-		/* rdd2 is already locked */
-		ret = -EBUSY;
-		goto out;
-	}
-
-	/* rdd2 already configured on a radar channel */
-	running = dev->rdd2_phy &&
-		  cfg80211_chandef_valid(&dev->rdd2_chandef) &&
-		  !!(dev->rdd2_chandef.chan->flags & IEEE80211_CHAN_RADAR);
-
-	if (!chandef || running ||
-	    !(chandef->chan->flags & IEEE80211_CHAN_RADAR)) {
-		ret = mt7915_mcu_rdd_background_enable(phy, NULL);
-		if (ret)
-			goto out;
-
-		if (!running)
-			goto update_phy;
-	}
-
-	ret = mt7915_mcu_rdd_background_enable(phy, chandef);
-	if (ret)
-		goto out;
-
-update_phy:
-	dev->rdd2_phy = chandef ? phy : NULL;
-	if (chandef)
-		dev->rdd2_chandef = *chandef;
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-#ifdef CONFIG_NET_MEDIATEK_SOC_WED
-static int
-mt7915_net_fill_forward_path(struct ieee80211_hw *hw,
-			     struct ieee80211_vif *vif,
-			     struct ieee80211_sta *sta,
-			     struct net_device_path_ctx *ctx,
-			     struct net_device_path *path)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mtk_wed_device *wed = &dev->mt76.mmio.wed;
-
-	if (!mtk_wed_device_active(wed))
-		return -ENODEV;
-
-	if (msta->wcid.idx > 0xff)
-		return -EIO;
-
-	path->type = DEV_PATH_MTK_WDMA;
-	path->dev = ctx->dev;
-	path->mtk_wdma.wdma_idx = wed->wdma_idx;
-	path->mtk_wdma.bss = mvif->mt76.idx;
-	path->mtk_wdma.wcid = is_mt7915(&dev->mt76) ? msta->wcid.idx : 0x3ff;
-	path->mtk_wdma.queue = phy != &dev->phy;
-
-	ctx->dev = NULL;
-
-	return 0;
-}
-#endif
-
-const struct ieee80211_ops mt7915_ops = {
-	.tx = mt7915_tx,
-	.start = mt7915_start,
-	.stop = mt7915_stop,
-	.add_interface = mt7915_add_interface,
-	.remove_interface = mt7915_remove_interface,
-	.config = mt7915_config,
-	.conf_tx = mt7915_conf_tx,
-	.configure_filter = mt7915_configure_filter,
-	.bss_info_changed = mt7915_bss_info_changed,
-	.sta_add = mt7915_sta_add,
-	.sta_remove = mt7915_sta_remove,
-	.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
-	.sta_rc_update = mt7915_sta_rc_update,
-	.set_key = mt7915_set_key,
-	.ampdu_action = mt7915_ampdu_action,
-	.set_rts_threshold = mt7915_set_rts_threshold,
-	.wake_tx_queue = mt76_wake_tx_queue,
-	.sw_scan_start = mt76_sw_scan,
-	.sw_scan_complete = mt76_sw_scan_complete,
-	.release_buffered_frames = mt76_release_buffered_frames,
-	.get_txpower = mt76_get_txpower,
-	.set_sar_specs = mt7915_set_sar_specs,
-	.channel_switch_beacon = mt7915_channel_switch_beacon,
-	.get_stats = mt7915_get_stats,
-	.get_et_sset_count = mt7915_get_et_sset_count,
-	.get_et_stats = mt7915_get_et_stats,
-	.get_et_strings = mt7915_get_et_strings,
-	.get_tsf = mt7915_get_tsf,
-	.set_tsf = mt7915_set_tsf,
-	.offset_tsf = mt7915_offset_tsf,
-	.get_survey = mt76_get_survey,
-	.get_antenna = mt76_get_antenna,
-	.set_antenna = mt7915_set_antenna,
-	.set_bitrate_mask = mt7915_set_bitrate_mask,
-	.set_coverage_class = mt7915_set_coverage_class,
-	.sta_statistics = mt7915_sta_statistics,
-	.sta_set_4addr = mt7915_sta_set_4addr,
-	.sta_set_decap_offload = mt7915_sta_set_decap_offload,
-	.add_twt_setup = mt7915_mac_add_twt_setup,
-	.twt_teardown_request = mt7915_twt_teardown_request,
-	CFG80211_TESTMODE_CMD(mt76_testmode_cmd)
-	CFG80211_TESTMODE_DUMP(mt76_testmode_dump)
-#ifdef CONFIG_MAC80211_DEBUGFS
-	.sta_add_debugfs = mt7915_sta_add_debugfs,
-#endif
-	.set_radar_background = mt7915_set_radar_background,
-#ifdef CONFIG_NET_MEDIATEK_SOC_WED
-	.net_fill_forward_path = mt7915_net_fill_forward_path,
-#endif
-};
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mcu.c
deleted file mode 100644
index bf5ad96..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mcu.c
+++ /dev/null
@@ -1,3483 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/fs.h>
-#include "mt7915.h"
-#include "mcu.h"
-#include "mac.h"
-#include "eeprom.h"
-
-#define fw_name(_dev, name, ...)	({			\
-	char *_fw;						\
-	switch (mt76_chip(&(_dev)->mt76)) {			\
-	case 0x7915:						\
-		_fw = MT7915_##name;				\
-		break;						\
-	case 0x7986:						\
-		_fw = MT7986_##name##__VA_ARGS__;		\
-		break;						\
-	default:						\
-		_fw = MT7916_##name;				\
-		break;						\
-	}							\
-	_fw;							\
-})
-
-#define fw_name_var(_dev, name)		(mt7915_check_adie(dev, false) ?	\
-					 fw_name(_dev, name) :			\
-					 fw_name(_dev, name, _MT7975))
-
-#define MCU_PATCH_ADDRESS		0x200000
-
-#define HE_PHY(p, c)			u8_get_bits(c, IEEE80211_HE_PHY_##p)
-#define HE_MAC(m, c)			u8_get_bits(c, IEEE80211_HE_MAC_##m)
-
-static u8
-mt7915_mcu_get_sta_nss(u16 mcs_map)
-{
-	u8 nss;
-
-	for (nss = 8; nss > 0; nss--) {
-		u8 nss_mcs = (mcs_map >> (2 * (nss - 1))) & 3;
-
-		if (nss_mcs != IEEE80211_VHT_MCS_NOT_SUPPORTED)
-			break;
-	}
-
-	return nss - 1;
-}
-
-static void
-mt7915_mcu_set_sta_he_mcs(struct ieee80211_sta *sta, __le16 *he_mcs,
-			  u16 mcs_map)
-{
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct mt7915_dev *dev = msta->vif->phy->dev;
-	enum nl80211_band band = msta->vif->phy->mt76->chandef.chan->band;
-	const u16 *mask = msta->vif->bitrate_mask.control[band].he_mcs;
-	int nss, max_nss = sta->rx_nss > 3 ? 4 : sta->rx_nss;
-
-	for (nss = 0; nss < max_nss; nss++) {
-		int mcs;
-
-		switch ((mcs_map >> (2 * nss)) & 0x3) {
-		case IEEE80211_HE_MCS_SUPPORT_0_11:
-			mcs = GENMASK(11, 0);
-			break;
-		case IEEE80211_HE_MCS_SUPPORT_0_9:
-			mcs = GENMASK(9, 0);
-			break;
-		case IEEE80211_HE_MCS_SUPPORT_0_7:
-			mcs = GENMASK(7, 0);
-			break;
-		default:
-			mcs = 0;
-		}
-
-		mcs = mcs ? fls(mcs & mask[nss]) - 1 : -1;
-
-		switch (mcs) {
-		case 0 ... 7:
-			mcs = IEEE80211_HE_MCS_SUPPORT_0_7;
-			break;
-		case 8 ... 9:
-			mcs = IEEE80211_HE_MCS_SUPPORT_0_9;
-			break;
-		case 10 ... 11:
-			mcs = IEEE80211_HE_MCS_SUPPORT_0_11;
-			break;
-		default:
-			mcs = IEEE80211_HE_MCS_NOT_SUPPORTED;
-			break;
-		}
-		mcs_map &= ~(0x3 << (nss * 2));
-		mcs_map |= mcs << (nss * 2);
-
-		/* only support 2ss on 160MHz for mt7915 */
-		if (is_mt7915(&dev->mt76) && nss > 1 &&
-		    sta->bandwidth == IEEE80211_STA_RX_BW_160)
-			break;
-	}
-
-	*he_mcs = cpu_to_le16(mcs_map);
-}
-
-static void
-mt7915_mcu_set_sta_vht_mcs(struct ieee80211_sta *sta, __le16 *vht_mcs,
-			   const u16 *mask)
-{
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct mt7915_dev *dev = msta->vif->phy->dev;
-	u16 mcs_map = le16_to_cpu(sta->vht_cap.vht_mcs.rx_mcs_map);
-	int nss, max_nss = sta->rx_nss > 3 ? 4 : sta->rx_nss;
-	u16 mcs;
-
-	for (nss = 0; nss < max_nss; nss++, mcs_map >>= 2) {
-		switch (mcs_map & 0x3) {
-		case IEEE80211_VHT_MCS_SUPPORT_0_9:
-			mcs = GENMASK(9, 0);
-			break;
-		case IEEE80211_VHT_MCS_SUPPORT_0_8:
-			mcs = GENMASK(8, 0);
-			break;
-		case IEEE80211_VHT_MCS_SUPPORT_0_7:
-			mcs = GENMASK(7, 0);
-			break;
-		default:
-			mcs = 0;
-		}
-
-		vht_mcs[nss] = cpu_to_le16(mcs & mask[nss]);
-
-		/* only support 2ss on 160MHz for mt7915 */
-		if (is_mt7915(&dev->mt76) && nss > 1 &&
-		    sta->bandwidth == IEEE80211_STA_RX_BW_160)
-			break;
-	}
-}
-
-static void
-mt7915_mcu_set_sta_ht_mcs(struct ieee80211_sta *sta, u8 *ht_mcs,
-			  const u8 *mask)
-{
-	int nss, max_nss = sta->rx_nss > 3 ? 4 : sta->rx_nss;
-
-	for (nss = 0; nss < max_nss; nss++)
-		ht_mcs[nss] = sta->ht_cap.mcs.rx_mask[nss] & mask[nss];
-}
-
-static int
-mt7915_mcu_parse_response(struct mt76_dev *mdev, int cmd,
-			  struct sk_buff *skb, int seq)
-{
-	struct mt76_connac2_mcu_rxd *rxd;
-	int ret = 0;
-
-	if (!skb) {
-		dev_err(mdev->dev, "Message %08x (seq %d) timeout\n",
-			cmd, seq);
-		return -ETIMEDOUT;
-	}
-
-	rxd = (struct mt76_connac2_mcu_rxd *)skb->data;
-	if (seq != rxd->seq)
-		return -EAGAIN;
-
-	if (cmd == MCU_CMD(PATCH_SEM_CONTROL)) {
-		skb_pull(skb, sizeof(*rxd) - 4);
-		ret = *skb->data;
-	} else if (cmd == MCU_EXT_CMD(THERMAL_CTRL)) {
-		skb_pull(skb, sizeof(*rxd) + 4);
-		ret = le32_to_cpu(*(__le32 *)skb->data);
-	} else {
-		skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
-	}
-
-	return ret;
-}
-
-static int
-mt7915_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
-			int cmd, int *wait_seq)
-{
-	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
-	enum mt76_mcuq_id qid;
-	int ret;
-
-	ret = mt76_connac2_mcu_fill_message(mdev, skb, cmd, wait_seq);
-	if (ret)
-		return ret;
-
-	if (cmd == MCU_CMD(FW_SCATTER))
-		qid = MT_MCUQ_FWDL;
-	else if (test_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state))
-		qid = MT_MCUQ_WA;
-	else
-		qid = MT_MCUQ_WM;
-
-	return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[qid], skb, 0);
-}
-
-int mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
-{
-	struct {
-		__le32 args[3];
-	} req = {
-		.args = {
-			cpu_to_le32(a1),
-			cpu_to_le32(a2),
-			cpu_to_le32(a3),
-		},
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), false);
-}
-
-static void
-mt7915_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	if (vif->csa_active)
-		ieee80211_csa_finish(vif);
-}
-
-static void
-mt7915_mcu_rx_csa_notify(struct mt7915_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7915_mcu_csa_notify *c;
-
-	c = (struct mt7915_mcu_csa_notify *)skb->data;
-
-	if ((c->band_idx && !dev->phy.band_idx) && dev->mt76.phys[MT_BAND1])
-		mphy = dev->mt76.phys[MT_BAND1];
-
-	ieee80211_iterate_active_interfaces_atomic(mphy->hw,
-			IEEE80211_IFACE_ITER_RESUME_ALL,
-			mt7915_mcu_csa_finish, mphy->hw);
-}
-
-static void
-mt7915_mcu_rx_thermal_notify(struct mt7915_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7915_mcu_thermal_notify *t;
-	struct mt7915_phy *phy;
-
-	t = (struct mt7915_mcu_thermal_notify *)skb->data;
-	if (t->ctrl.ctrl_id != THERMAL_PROTECT_ENABLE)
-		return;
-
-	if ((t->ctrl.band_idx && !dev->phy.band_idx) && dev->mt76.phys[MT_BAND1])
-		mphy = dev->mt76.phys[MT_BAND1];
-
-	phy = (struct mt7915_phy *)mphy->priv;
-	phy->throttle_state = t->ctrl.duty.duty_cycle;
-}
-
-static void
-mt7915_mcu_rx_radar_detected(struct mt7915_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7915_mcu_rdd_report *r;
-
-	r = (struct mt7915_mcu_rdd_report *)skb->data;
-
-	if ((r->band_idx && !dev->phy.band_idx) && dev->mt76.phys[MT_BAND1])
-		mphy = dev->mt76.phys[MT_BAND1];
-
-	if (r->band_idx == MT_RX_SEL2)
-		cfg80211_background_radar_event(mphy->hw->wiphy,
-						&dev->rdd2_chandef,
-						GFP_ATOMIC);
-	else
-		ieee80211_radar_detected(mphy->hw);
-	dev->hw_pattern++;
-}
-
-static void
-mt7915_mcu_rx_log_message(struct mt7915_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_connac2_mcu_rxd *rxd;
-	int len = skb->len - sizeof(*rxd);
-	const char *data, *type;
-
-	rxd = (struct mt76_connac2_mcu_rxd *)skb->data;
-	data = (char *)&rxd[1];
-
-	switch (rxd->s2d_index) {
-	case 0:
-		if (mt7915_debugfs_rx_log(dev, data, len))
-			return;
-
-		type = "WM";
-		break;
-	case 2:
-		type = "WA";
-		break;
-	default:
-		type = "unknown";
-		break;
-	}
-
-	wiphy_info(mt76_hw(dev)->wiphy, "%s: %.*s", type, len, data);
-}
-
-static void
-mt7915_mcu_cca_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	if (!vif->color_change_active)
-		return;
-
-	ieee80211_color_change_finish(vif);
-}
-
-static void
-mt7915_mcu_rx_bcc_notify(struct mt7915_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7915_mcu_bcc_notify *b;
-
-	b = (struct mt7915_mcu_bcc_notify *)skb->data;
-
-	if ((b->band_idx && !dev->phy.band_idx) && dev->mt76.phys[MT_BAND1])
-		mphy = dev->mt76.phys[MT_BAND1];
-
-	ieee80211_iterate_active_interfaces_atomic(mphy->hw,
-			IEEE80211_IFACE_ITER_RESUME_ALL,
-			mt7915_mcu_cca_finish, mphy->hw);
-}
-
-static void
-mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_connac2_mcu_rxd *rxd;
-
-	rxd = (struct mt76_connac2_mcu_rxd *)skb->data;
-	switch (rxd->ext_eid) {
-	case MCU_EXT_EVENT_THERMAL_PROTECT:
-		mt7915_mcu_rx_thermal_notify(dev, skb);
-		break;
-	case MCU_EXT_EVENT_RDD_REPORT:
-		mt7915_mcu_rx_radar_detected(dev, skb);
-		break;
-	case MCU_EXT_EVENT_CSA_NOTIFY:
-		mt7915_mcu_rx_csa_notify(dev, skb);
-		break;
-	case MCU_EXT_EVENT_FW_LOG_2_HOST:
-		mt7915_mcu_rx_log_message(dev, skb);
-		break;
-	case MCU_EXT_EVENT_BCC_NOTIFY:
-		mt7915_mcu_rx_bcc_notify(dev, skb);
-		break;
-	default:
-		break;
-	}
-}
-
-static void
-mt7915_mcu_rx_unsolicited_event(struct mt7915_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_connac2_mcu_rxd *rxd;
-
-	rxd = (struct mt76_connac2_mcu_rxd *)skb->data;
-	switch (rxd->eid) {
-	case MCU_EVENT_EXT:
-		mt7915_mcu_rx_ext_event(dev, skb);
-		break;
-	default:
-		break;
-	}
-	dev_kfree_skb(skb);
-}
-
-void mt7915_mcu_rx_event(struct mt7915_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_connac2_mcu_rxd *rxd;
-
-	rxd = (struct mt76_connac2_mcu_rxd *)skb->data;
-	if (rxd->ext_eid == MCU_EXT_EVENT_THERMAL_PROTECT ||
-	    rxd->ext_eid == MCU_EXT_EVENT_FW_LOG_2_HOST ||
-	    rxd->ext_eid == MCU_EXT_EVENT_ASSERT_DUMP ||
-	    rxd->ext_eid == MCU_EXT_EVENT_PS_SYNC ||
-	    rxd->ext_eid == MCU_EXT_EVENT_BCC_NOTIFY ||
-	    !rxd->seq)
-		mt7915_mcu_rx_unsolicited_event(dev, skb);
-	else
-		mt76_mcu_rx_event(&dev->mt76, skb);
-}
-
-static struct tlv *
-mt7915_mcu_add_nested_subtlv(struct sk_buff *skb, int sub_tag, int sub_len,
-			     __le16 *sub_ntlv, __le16 *len)
-{
-	struct tlv *ptlv, tlv = {
-		.tag = cpu_to_le16(sub_tag),
-		.len = cpu_to_le16(sub_len),
-	};
-
-	ptlv = skb_put(skb, sub_len);
-	memcpy(ptlv, &tlv, sizeof(tlv));
-
-	le16_add_cpu(sub_ntlv, 1);
-	le16_add_cpu(len, sub_len);
-
-	return ptlv;
-}
-
-/** bss info **/
-struct mt7915_he_obss_narrow_bw_ru_data {
-	bool tolerated;
-};
-
-static void mt7915_check_he_obss_narrow_bw_ru_iter(struct wiphy *wiphy,
-						   struct cfg80211_bss *bss,
-						   void *_data)
-{
-	struct mt7915_he_obss_narrow_bw_ru_data *data = _data;
-	const struct element *elem;
-
-	rcu_read_lock();
-	elem = ieee80211_bss_get_elem(bss, WLAN_EID_EXT_CAPABILITY);
-
-	if (!elem || elem->datalen <= 10 ||
-	    !(elem->data[10] &
-	      WLAN_EXT_CAPA10_OBSS_NARROW_BW_RU_TOLERANCE_SUPPORT))
-		data->tolerated = false;
-
-	rcu_read_unlock();
-}
-
-static bool mt7915_check_he_obss_narrow_bw_ru(struct ieee80211_hw *hw,
-					      struct ieee80211_vif *vif)
-{
-	struct mt7915_he_obss_narrow_bw_ru_data iter_data = {
-		.tolerated = true,
-	};
-
-	if (!(vif->bss_conf.chandef.chan->flags & IEEE80211_CHAN_RADAR))
-		return false;
-
-	cfg80211_bss_iter(hw->wiphy, &vif->bss_conf.chandef,
-			  mt7915_check_he_obss_narrow_bw_ru_iter,
-			  &iter_data);
-
-	/*
-	 * If there is at least one AP on radar channel that cannot
-	 * tolerate 26-tone RU UL OFDMA transmissions using HE TB PPDU.
-	 */
-	return !iter_data.tolerated;
-}
-
-static void
-mt7915_mcu_bss_rfch_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
-			struct mt7915_phy *phy)
-{
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	struct bss_info_rf_ch *ch;
-	struct tlv *tlv;
-	int freq1 = chandef->center_freq1;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, BSS_INFO_RF_CH, sizeof(*ch));
-
-	ch = (struct bss_info_rf_ch *)tlv;
-	ch->pri_ch = chandef->chan->hw_value;
-	ch->center_ch0 = ieee80211_frequency_to_channel(freq1);
-	ch->bw = mt76_connac_chan_bw(chandef);
-
-	if (chandef->width == NL80211_CHAN_WIDTH_80P80) {
-		int freq2 = chandef->center_freq2;
-
-		ch->center_ch1 = ieee80211_frequency_to_channel(freq2);
-	}
-
-	if (vif->bss_conf.he_support && vif->type == NL80211_IFTYPE_STATION) {
-		struct mt76_phy *mphy = phy->mt76;
-
-		ch->he_ru26_block =
-			mt7915_check_he_obss_narrow_bw_ru(mphy->hw, vif);
-		ch->he_all_disable = false;
-	} else {
-		ch->he_all_disable = true;
-	}
-}
-
-static void
-mt7915_mcu_bss_ra_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
-		      struct mt7915_phy *phy)
-{
-	int max_nss = hweight8(phy->mt76->antenna_mask);
-	struct bss_info_ra *ra;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, BSS_INFO_RA, sizeof(*ra));
-
-	ra = (struct bss_info_ra *)tlv;
-	ra->op_mode = vif->type == NL80211_IFTYPE_AP;
-	ra->adhoc_en = vif->type == NL80211_IFTYPE_ADHOC;
-	ra->short_preamble = true;
-	ra->tx_streams = max_nss;
-	ra->rx_streams = max_nss;
-	ra->algo = 4;
-	ra->train_up_rule = 2;
-	ra->train_up_high_thres = 110;
-	ra->train_up_rule_rssi = -70;
-	ra->low_traffic_thres = 2;
-	ra->phy_cap = cpu_to_le32(0xfdf);
-	ra->interval = cpu_to_le32(500);
-	ra->fast_interval = cpu_to_le32(100);
-}
-
-static void
-mt7915_mcu_bss_he_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
-		      struct mt7915_phy *phy)
-{
-#define DEFAULT_HE_PE_DURATION		4
-#define DEFAULT_HE_DURATION_RTS_THRES	1023
-	const struct ieee80211_sta_he_cap *cap;
-	struct bss_info_he *he;
-	struct tlv *tlv;
-
-	cap = mt76_connac_get_he_phy_cap(phy->mt76, vif);
-
-	tlv = mt76_connac_mcu_add_tlv(skb, BSS_INFO_HE_BASIC, sizeof(*he));
-
-	he = (struct bss_info_he *)tlv;
-	he->he_pe_duration = vif->bss_conf.htc_trig_based_pkt_ext;
-	if (!he->he_pe_duration)
-		he->he_pe_duration = DEFAULT_HE_PE_DURATION;
-
-	he->he_rts_thres = cpu_to_le16(vif->bss_conf.frame_time_rts_th);
-	if (!he->he_rts_thres)
-		he->he_rts_thres = cpu_to_le16(DEFAULT_HE_DURATION_RTS_THRES);
-
-	he->max_nss_mcs[CMD_HE_MCS_BW80] = cap->he_mcs_nss_supp.tx_mcs_80;
-	he->max_nss_mcs[CMD_HE_MCS_BW160] = cap->he_mcs_nss_supp.tx_mcs_160;
-	he->max_nss_mcs[CMD_HE_MCS_BW8080] = cap->he_mcs_nss_supp.tx_mcs_80p80;
-}
-
-static void
-mt7915_mcu_bss_hw_amsdu_tlv(struct sk_buff *skb)
-{
-#define TXD_CMP_MAP1		GENMASK(15, 0)
-#define TXD_CMP_MAP2		(GENMASK(31, 0) & ~BIT(23))
-	struct bss_info_hw_amsdu *amsdu;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, BSS_INFO_HW_AMSDU, sizeof(*amsdu));
-
-	amsdu = (struct bss_info_hw_amsdu *)tlv;
-	amsdu->cmp_bitmap_0 = cpu_to_le32(TXD_CMP_MAP1);
-	amsdu->cmp_bitmap_1 = cpu_to_le32(TXD_CMP_MAP2);
-	amsdu->trig_thres = cpu_to_le16(2);
-	amsdu->enable = true;
-}
-
-static void
-mt7915_mcu_bss_bmc_tlv(struct sk_buff *skb, struct mt7915_phy *phy)
-{
-	struct bss_info_bmc_rate *bmc;
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	enum nl80211_band band = chandef->chan->band;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, BSS_INFO_BMC_RATE, sizeof(*bmc));
-
-	bmc = (struct bss_info_bmc_rate *)tlv;
-	if (band == NL80211_BAND_2GHZ) {
-		bmc->short_preamble = true;
-	} else {
-		bmc->bc_trans = cpu_to_le16(0x2000);
-		bmc->mc_trans = cpu_to_le16(0x2080);
-	}
-}
-
-static int
-mt7915_mcu_muar_config(struct mt7915_phy *phy, struct ieee80211_vif *vif,
-		       bool bssid, bool enable)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	u32 idx = mvif->mt76.omac_idx - REPEATER_BSSID_START;
-	u32 mask = phy->omac_mask >> 32 & ~BIT(idx);
-	const u8 *addr = vif->addr;
-	struct {
-		u8 mode;
-		u8 force_clear;
-		u8 clear_bitmap[8];
-		u8 entry_count;
-		u8 write;
-		u8 band;
-
-		u8 index;
-		u8 bssid;
-		u8 addr[ETH_ALEN];
-	} __packed req = {
-		.mode = !!mask || enable,
-		.entry_count = 1,
-		.write = 1,
-		.band = phy != &dev->phy,
-		.index = idx * 2 + bssid,
-	};
-
-	if (bssid)
-		addr = vif->bss_conf.bssid;
-
-	if (enable)
-		ether_addr_copy(req.addr, addr);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(MUAR_UPDATE), &req,
-				 sizeof(req), true);
-}
-
-int mt7915_mcu_add_bss_info(struct mt7915_phy *phy,
-			    struct ieee80211_vif *vif, int enable)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_dev *dev = phy->dev;
-	struct sk_buff *skb;
-
-	if (mvif->mt76.omac_idx >= REPEATER_BSSID_START) {
-		mt7915_mcu_muar_config(phy, vif, false, enable);
-		mt7915_mcu_muar_config(phy, vif, true, enable);
-	}
-
-	skb = __mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76, NULL,
-					      MT7915_BSS_UPDATE_MAX_SIZE);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	/* bss_omac must be first */
-	if (enable)
-		mt76_connac_mcu_bss_omac_tlv(skb, vif);
-
-	mt76_connac_mcu_bss_basic_tlv(skb, vif, NULL, phy->mt76,
-				      mvif->sta.wcid.idx, enable);
-
-	if (vif->type == NL80211_IFTYPE_MONITOR)
-		goto out;
-
-	if (enable) {
-		mt7915_mcu_bss_rfch_tlv(skb, vif, phy);
-		mt7915_mcu_bss_bmc_tlv(skb, phy);
-		mt7915_mcu_bss_ra_tlv(skb, vif, phy);
-		mt7915_mcu_bss_hw_amsdu_tlv(skb);
-
-		if (vif->bss_conf.he_support)
-			mt7915_mcu_bss_he_tlv(skb, vif, phy);
-
-		if (mvif->mt76.omac_idx >= EXT_BSSID_START &&
-		    mvif->mt76.omac_idx < REPEATER_BSSID_START)
-			mt76_connac_mcu_bss_ext_tlv(skb, &mvif->mt76);
-	}
-out:
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_EXT_CMD(BSS_INFO_UPDATE), true);
-}
-
-/** starec & wtbl **/
-int mt7915_mcu_add_tx_ba(struct mt7915_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool enable)
-{
-	struct mt7915_sta *msta = (struct mt7915_sta *)params->sta->drv_priv;
-	struct mt7915_vif *mvif = msta->vif;
-
-	if (enable && !params->amsdu)
-		msta->wcid.amsdu = false;
-
-	return mt76_connac_mcu_sta_ba(&dev->mt76, &mvif->mt76, params,
-				      MCU_EXT_CMD(STA_REC_UPDATE),
-				      enable, true);
-}
-
-int mt7915_mcu_add_rx_ba(struct mt7915_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool enable)
-{
-	struct mt7915_sta *msta = (struct mt7915_sta *)params->sta->drv_priv;
-	struct mt7915_vif *mvif = msta->vif;
-
-	return mt76_connac_mcu_sta_ba(&dev->mt76, &mvif->mt76, params,
-				      MCU_EXT_CMD(STA_REC_UPDATE),
-				      enable, false);
-}
-
-static void
-mt7915_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
-		      struct ieee80211_vif *vif)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct ieee80211_he_cap_elem *elem = &sta->he_cap.he_cap_elem;
-	struct ieee80211_he_mcs_nss_supp mcs_map;
-	struct sta_rec_he *he;
-	struct tlv *tlv;
-	u32 cap = 0;
-
-	if (!sta->he_cap.has_he)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HE, sizeof(*he));
-
-	he = (struct sta_rec_he *)tlv;
-
-	if (elem->mac_cap_info[0] & IEEE80211_HE_MAC_CAP0_HTC_HE)
-		cap |= STA_REC_HE_CAP_HTC;
-
-	if (elem->mac_cap_info[2] & IEEE80211_HE_MAC_CAP2_BSR)
-		cap |= STA_REC_HE_CAP_BSR;
-
-	if (elem->mac_cap_info[3] & IEEE80211_HE_MAC_CAP3_OMI_CONTROL)
-		cap |= STA_REC_HE_CAP_OM;
-
-	if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU)
-		cap |= STA_REC_HE_CAP_AMSDU_IN_AMPDU;
-
-	if (elem->mac_cap_info[4] & IEEE80211_HE_MAC_CAP4_BQR)
-		cap |= STA_REC_HE_CAP_BQR;
-
-	if (elem->phy_cap_info[0] &
-	    (IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_2G |
-	     IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_5G))
-		cap |= STA_REC_HE_CAP_BW20_RU242_SUPPORT;
-
-	if (mvif->cap.he_ldpc &&
-	    (elem->phy_cap_info[1] &
-	     IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD))
-		cap |= STA_REC_HE_CAP_LDPC;
-
-	if (elem->phy_cap_info[1] &
-	    IEEE80211_HE_PHY_CAP1_HE_LTF_AND_GI_FOR_HE_PPDUS_0_8US)
-		cap |= STA_REC_HE_CAP_SU_PPDU_1LTF_8US_GI;
-
-	if (elem->phy_cap_info[2] &
-	    IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US)
-		cap |= STA_REC_HE_CAP_NDP_4LTF_3DOT2MS_GI;
-
-	if (elem->phy_cap_info[2] &
-	    IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ)
-		cap |= STA_REC_HE_CAP_LE_EQ_80M_TX_STBC;
-
-	if (elem->phy_cap_info[2] &
-	    IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ)
-		cap |= STA_REC_HE_CAP_LE_EQ_80M_RX_STBC;
-
-	if (elem->phy_cap_info[6] &
-	    IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB)
-		cap |= STA_REC_HE_CAP_TRIG_CQI_FK;
-
-	if (elem->phy_cap_info[6] &
-	    IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE)
-		cap |= STA_REC_HE_CAP_PARTIAL_BW_EXT_RANGE;
-
-	if (elem->phy_cap_info[7] &
-	    IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI)
-		cap |= STA_REC_HE_CAP_SU_MU_PPDU_4LTF_8US_GI;
-
-	if (elem->phy_cap_info[7] &
-	    IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ)
-		cap |= STA_REC_HE_CAP_GT_80M_TX_STBC;
-
-	if (elem->phy_cap_info[7] &
-	    IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ)
-		cap |= STA_REC_HE_CAP_GT_80M_RX_STBC;
-
-	if (elem->phy_cap_info[8] &
-	    IEEE80211_HE_PHY_CAP8_HE_ER_SU_PPDU_4XLTF_AND_08_US_GI)
-		cap |= STA_REC_HE_CAP_ER_SU_PPDU_4LTF_8US_GI;
-
-	if (elem->phy_cap_info[8] &
-	    IEEE80211_HE_PHY_CAP8_HE_ER_SU_1XLTF_AND_08_US_GI)
-		cap |= STA_REC_HE_CAP_ER_SU_PPDU_1LTF_8US_GI;
-
-	if (elem->phy_cap_info[9] &
-	    IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU)
-		cap |= STA_REC_HE_CAP_TX_1024QAM_UNDER_RU242;
-
-	if (elem->phy_cap_info[9] &
-	    IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU)
-		cap |= STA_REC_HE_CAP_RX_1024QAM_UNDER_RU242;
-
-	he->he_cap = cpu_to_le32(cap);
-
-	mcs_map = sta->he_cap.he_mcs_nss_supp;
-	switch (sta->bandwidth) {
-	case IEEE80211_STA_RX_BW_160:
-		if (elem->phy_cap_info[0] &
-		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
-			mt7915_mcu_set_sta_he_mcs(sta,
-						  &he->max_nss_mcs[CMD_HE_MCS_BW8080],
-						  le16_to_cpu(mcs_map.rx_mcs_80p80));
-
-		mt7915_mcu_set_sta_he_mcs(sta,
-					  &he->max_nss_mcs[CMD_HE_MCS_BW160],
-					  le16_to_cpu(mcs_map.rx_mcs_160));
-		fallthrough;
-	default:
-		mt7915_mcu_set_sta_he_mcs(sta,
-					  &he->max_nss_mcs[CMD_HE_MCS_BW80],
-					  le16_to_cpu(mcs_map.rx_mcs_80));
-		break;
-	}
-
-	he->t_frame_dur =
-		HE_MAC(CAP1_TF_MAC_PAD_DUR_MASK, elem->mac_cap_info[1]);
-	he->max_ampdu_exp =
-		HE_MAC(CAP3_MAX_AMPDU_LEN_EXP_MASK, elem->mac_cap_info[3]);
-
-	he->bw_set =
-		HE_PHY(CAP0_CHANNEL_WIDTH_SET_MASK, elem->phy_cap_info[0]);
-	he->device_class =
-		HE_PHY(CAP1_DEVICE_CLASS_A, elem->phy_cap_info[1]);
-	he->punc_pream_rx =
-		HE_PHY(CAP1_PREAMBLE_PUNC_RX_MASK, elem->phy_cap_info[1]);
-
-	he->dcm_tx_mode =
-		HE_PHY(CAP3_DCM_MAX_CONST_TX_MASK, elem->phy_cap_info[3]);
-	he->dcm_tx_max_nss =
-		HE_PHY(CAP3_DCM_MAX_TX_NSS_2, elem->phy_cap_info[3]);
-	he->dcm_rx_mode =
-		HE_PHY(CAP3_DCM_MAX_CONST_RX_MASK, elem->phy_cap_info[3]);
-	he->dcm_rx_max_nss =
-		HE_PHY(CAP3_DCM_MAX_RX_NSS_2, elem->phy_cap_info[3]);
-	he->dcm_rx_max_nss =
-		HE_PHY(CAP8_DCM_MAX_RU_MASK, elem->phy_cap_info[8]);
-
-	he->pkt_ext = 2;
-}
-
-static void
-mt7915_mcu_sta_muru_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
-			struct ieee80211_sta *sta, struct ieee80211_vif *vif)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct ieee80211_he_cap_elem *elem = &sta->he_cap.he_cap_elem;
-	struct sta_rec_muru *muru;
-	struct tlv *tlv;
-
-	if (vif->type != NL80211_IFTYPE_STATION &&
-	    vif->type != NL80211_IFTYPE_AP)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_MURU, sizeof(*muru));
-
-	muru = (struct sta_rec_muru *)tlv;
-
-	muru->cfg.mimo_dl_en = mvif->cap.he_mu_ebfer ||
-			       mvif->cap.vht_mu_ebfer ||
-			       mvif->cap.vht_mu_ebfee;
-	if (!is_mt7915(&dev->mt76))
-		muru->cfg.mimo_ul_en = true;
-	muru->cfg.ofdma_dl_en = true;
-
-	if (sta->vht_cap.vht_supported)
-		muru->mimo_dl.vht_mu_bfee =
-			!!(sta->vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE);
-
-	if (!sta->he_cap.has_he)
-		return;
-
-	muru->mimo_dl.partial_bw_dl_mimo =
-		HE_PHY(CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO, elem->phy_cap_info[6]);
-
-	muru->mimo_ul.full_ul_mimo =
-		HE_PHY(CAP2_UL_MU_FULL_MU_MIMO, elem->phy_cap_info[2]);
-	muru->mimo_ul.partial_ul_mimo =
-		HE_PHY(CAP2_UL_MU_PARTIAL_MU_MIMO, elem->phy_cap_info[2]);
-
-	muru->ofdma_dl.punc_pream_rx =
-		HE_PHY(CAP1_PREAMBLE_PUNC_RX_MASK, elem->phy_cap_info[1]);
-	muru->ofdma_dl.he_20m_in_40m_2g =
-		HE_PHY(CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G, elem->phy_cap_info[8]);
-	muru->ofdma_dl.he_20m_in_160m =
-		HE_PHY(CAP8_20MHZ_IN_160MHZ_HE_PPDU, elem->phy_cap_info[8]);
-	muru->ofdma_dl.he_80m_in_160m =
-		HE_PHY(CAP8_80MHZ_IN_160MHZ_HE_PPDU, elem->phy_cap_info[8]);
-
-	muru->ofdma_ul.t_frame_dur =
-		HE_MAC(CAP1_TF_MAC_PAD_DUR_MASK, elem->mac_cap_info[1]);
-	muru->ofdma_ul.mu_cascading =
-		HE_MAC(CAP2_MU_CASCADING, elem->mac_cap_info[2]);
-	muru->ofdma_ul.uo_ra =
-		HE_MAC(CAP3_OFDMA_RA, elem->mac_cap_info[3]);
-}
-
-static void
-mt7915_mcu_sta_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
-{
-	struct sta_rec_ht *ht;
-	struct tlv *tlv;
-
-	if (!sta->ht_cap.ht_supported)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HT, sizeof(*ht));
-
-	ht = (struct sta_rec_ht *)tlv;
-	ht->ht_cap = cpu_to_le16(sta->ht_cap.cap);
-}
-
-static void
-mt7915_mcu_sta_vht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
-{
-	struct sta_rec_vht *vht;
-	struct tlv *tlv;
-
-	if (!sta->vht_cap.vht_supported)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_VHT, sizeof(*vht));
-
-	vht = (struct sta_rec_vht *)tlv;
-	vht->vht_cap = cpu_to_le32(sta->vht_cap.cap);
-	vht->vht_rx_mcs_map = sta->vht_cap.vht_mcs.rx_mcs_map;
-	vht->vht_tx_mcs_map = sta->vht_cap.vht_mcs.tx_mcs_map;
-}
-
-static void
-mt7915_mcu_sta_amsdu_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
-			 struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-{
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct sta_rec_amsdu *amsdu;
-	struct tlv *tlv;
-
-	if (vif->type != NL80211_IFTYPE_STATION &&
-	    vif->type != NL80211_IFTYPE_AP)
-		return;
-
-	if (!sta->max_amsdu_len)
-	    return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HW_AMSDU, sizeof(*amsdu));
-	amsdu = (struct sta_rec_amsdu *)tlv;
-	amsdu->max_amsdu_num = 8;
-	amsdu->amsdu_en = true;
-	msta->wcid.amsdu = true;
-
-	switch (sta->max_amsdu_len) {
-	case IEEE80211_MAX_MPDU_LEN_VHT_11454:
-		if (!is_mt7915(&dev->mt76)) {
-			amsdu->max_mpdu_size =
-				IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454;
-			return;
-		}
-		fallthrough;
-	case IEEE80211_MAX_MPDU_LEN_HT_7935:
-	case IEEE80211_MAX_MPDU_LEN_VHT_7991:
-		amsdu->max_mpdu_size = IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991;
-		return;
-	default:
-		amsdu->max_mpdu_size = IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895;
-		return;
-	}
-}
-
-static int
-mt7915_mcu_sta_wtbl_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
-			struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_sta *msta;
-	struct wtbl_req_hdr *wtbl_hdr;
-	struct mt76_wcid *wcid;
-	struct tlv *tlv;
-
-	msta = sta ? (struct mt7915_sta *)sta->drv_priv : &mvif->sta;
-	wcid = sta ? &msta->wcid : NULL;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_WTBL, sizeof(struct tlv));
-	wtbl_hdr = mt76_connac_mcu_alloc_wtbl_req(&dev->mt76, &msta->wcid,
-						  WTBL_RESET_AND_SET, tlv,
-						  &skb);
-	if (IS_ERR(wtbl_hdr))
-		return PTR_ERR(wtbl_hdr);
-
-	mt76_connac_mcu_wtbl_generic_tlv(&dev->mt76, skb, vif, sta, tlv,
-					 wtbl_hdr);
-	mt76_connac_mcu_wtbl_hdr_trans_tlv(skb, vif, wcid, tlv, wtbl_hdr);
-	if (sta)
-		mt76_connac_mcu_wtbl_ht_tlv(&dev->mt76, skb, sta, tlv,
-					    wtbl_hdr, mvif->cap.ht_ldpc,
-					    mvif->cap.vht_ldpc);
-
-	return 0;
-}
-
-static inline bool
-mt7915_is_ebf_supported(struct mt7915_phy *phy, struct ieee80211_vif *vif,
-			struct ieee80211_sta *sta, bool bfee)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	int tx_ant = hweight8(phy->mt76->chainmask) - 1;
-
-	if (vif->type != NL80211_IFTYPE_STATION &&
-	    vif->type != NL80211_IFTYPE_AP)
-		return false;
-
-	if (!bfee && tx_ant < 2)
-		return false;
-
-	if (sta->he_cap.has_he) {
-		struct ieee80211_he_cap_elem *pe = &sta->he_cap.he_cap_elem;
-
-		if (bfee)
-			return mvif->cap.he_su_ebfee &&
-			       HE_PHY(CAP3_SU_BEAMFORMER, pe->phy_cap_info[3]);
-		else
-			return mvif->cap.he_su_ebfer &&
-			       HE_PHY(CAP4_SU_BEAMFORMEE, pe->phy_cap_info[4]);
-	}
-
-	if (sta->vht_cap.vht_supported) {
-		u32 cap = sta->vht_cap.cap;
-
-		if (bfee)
-			return mvif->cap.vht_su_ebfee &&
-			       (cap & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE);
-		else
-			return mvif->cap.vht_su_ebfer &&
-			       (cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE);
-	}
-
-	return false;
-}
-
-static void
-mt7915_mcu_sta_sounding_rate(struct sta_rec_bf *bf)
-{
-	bf->sounding_phy = MT_PHY_TYPE_OFDM;
-	bf->ndp_rate = 0;				/* mcs0 */
-	bf->ndpa_rate = MT7915_CFEND_RATE_DEFAULT;	/* ofdm 24m */
-	bf->rept_poll_rate = MT7915_CFEND_RATE_DEFAULT;	/* ofdm 24m */
-}
-
-static void
-mt7915_mcu_sta_bfer_ht(struct ieee80211_sta *sta, struct mt7915_phy *phy,
-		       struct sta_rec_bf *bf)
-{
-	struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs;
-	u8 n = 0;
-
-	bf->tx_mode = MT_PHY_TYPE_HT;
-
-	if ((mcs->tx_params & IEEE80211_HT_MCS_TX_RX_DIFF) &&
-	    (mcs->tx_params & IEEE80211_HT_MCS_TX_DEFINED))
-		n = FIELD_GET(IEEE80211_HT_MCS_TX_MAX_STREAMS_MASK,
-			      mcs->tx_params);
-	else if (mcs->rx_mask[3])
-		n = 3;
-	else if (mcs->rx_mask[2])
-		n = 2;
-	else if (mcs->rx_mask[1])
-		n = 1;
-
-	bf->nrow = hweight8(phy->mt76->chainmask) - 1;
-	bf->ncol = min_t(u8, bf->nrow, n);
-	bf->ibf_ncol = n;
-}
-
-static void
-mt7915_mcu_sta_bfer_vht(struct ieee80211_sta *sta, struct mt7915_phy *phy,
-			struct sta_rec_bf *bf, bool explicit)
-{
-	struct ieee80211_sta_vht_cap *pc = &sta->vht_cap;
-	struct ieee80211_sta_vht_cap *vc = &phy->mt76->sband_5g.sband.vht_cap;
-	u16 mcs_map = le16_to_cpu(pc->vht_mcs.rx_mcs_map);
-	u8 nss_mcs = mt7915_mcu_get_sta_nss(mcs_map);
-	u8 tx_ant = hweight8(phy->mt76->chainmask) - 1;
-
-	bf->tx_mode = MT_PHY_TYPE_VHT;
-
-	if (explicit) {
-		u8 sts, snd_dim;
-
-		mt7915_mcu_sta_sounding_rate(bf);
-
-		sts = FIELD_GET(IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK,
-				pc->cap);
-		snd_dim = FIELD_GET(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK,
-				    vc->cap);
-		bf->nrow = min_t(u8, min_t(u8, snd_dim, sts), tx_ant);
-		bf->ncol = min_t(u8, nss_mcs, bf->nrow);
-		bf->ibf_ncol = bf->ncol;
-
-		if (sta->bandwidth == IEEE80211_STA_RX_BW_160)
-			bf->nrow = 1;
-	} else {
-		bf->nrow = tx_ant;
-		bf->ncol = min_t(u8, nss_mcs, bf->nrow);
-		bf->ibf_ncol = nss_mcs;
-
-		if (sta->bandwidth == IEEE80211_STA_RX_BW_160)
-			bf->ibf_nrow = 1;
-	}
-}
-
-static void
-mt7915_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,
-		       struct mt7915_phy *phy, struct sta_rec_bf *bf)
-{
-	struct ieee80211_sta_he_cap *pc = &sta->he_cap;
-	struct ieee80211_he_cap_elem *pe = &pc->he_cap_elem;
-	const struct ieee80211_sta_he_cap *vc =
-		mt76_connac_get_he_phy_cap(phy->mt76, vif);
-	const struct ieee80211_he_cap_elem *ve = &vc->he_cap_elem;
-	u16 mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_80);
-	u8 nss_mcs = mt7915_mcu_get_sta_nss(mcs_map);
-	u8 snd_dim, sts;
-
-	bf->tx_mode = MT_PHY_TYPE_HE_SU;
-
-	mt7915_mcu_sta_sounding_rate(bf);
-
-	bf->trigger_su = HE_PHY(CAP6_TRIG_SU_BEAMFORMING_FB,
-				pe->phy_cap_info[6]);
-	bf->trigger_mu = HE_PHY(CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB,
-				pe->phy_cap_info[6]);
-	snd_dim = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK,
-			 ve->phy_cap_info[5]);
-	sts = HE_PHY(CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_MASK,
-		     pe->phy_cap_info[4]);
-	bf->nrow = min_t(u8, snd_dim, sts);
-	bf->ncol = min_t(u8, nss_mcs, bf->nrow);
-	bf->ibf_ncol = bf->ncol;
-
-	if (sta->bandwidth != IEEE80211_STA_RX_BW_160)
-		return;
-
-	/* go over for 160MHz and 80p80 */
-	if (pe->phy_cap_info[0] &
-	    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G) {
-		mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_160);
-		nss_mcs = mt7915_mcu_get_sta_nss(mcs_map);
-
-		bf->ncol_gt_bw80 = nss_mcs;
-	}
-
-	if (pe->phy_cap_info[0] &
-	    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G) {
-		mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_80p80);
-		nss_mcs = mt7915_mcu_get_sta_nss(mcs_map);
-
-		if (bf->ncol_gt_bw80)
-			bf->ncol_gt_bw80 = min_t(u8, bf->ncol_gt_bw80, nss_mcs);
-		else
-			bf->ncol_gt_bw80 = nss_mcs;
-	}
-
-	snd_dim = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK,
-			 ve->phy_cap_info[5]);
-	sts = HE_PHY(CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_MASK,
-		     pe->phy_cap_info[4]);
-
-	bf->nrow_gt_bw80 = min_t(int, snd_dim, sts);
-}
-
-static void
-mt7915_mcu_sta_bfer_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
-			struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_phy *phy = mvif->phy;
-	int tx_ant = hweight8(phy->mt76->chainmask) - 1;
-	struct sta_rec_bf *bf;
-	struct tlv *tlv;
-	const u8 matrix[4][4] = {
-		{0, 0, 0, 0},
-		{1, 1, 0, 0},	/* 2x1, 2x2, 2x3, 2x4 */
-		{2, 4, 4, 0},	/* 3x1, 3x2, 3x3, 3x4 */
-		{3, 5, 6, 0}	/* 4x1, 4x2, 4x3, 4x4 */
-	};
-	bool ebf;
-
-	if (!(sta->ht_cap.ht_supported || sta->he_cap.has_he))
-		return;
-
-	ebf = mt7915_is_ebf_supported(phy, vif, sta, false);
-	if (!ebf && !dev->ibf)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_BF, sizeof(*bf));
-	bf = (struct sta_rec_bf *)tlv;
-
-	/* he: eBF only, in accordance with spec
-	 * vht: support eBF and iBF
-	 * ht: iBF only, since mac80211 lacks of eBF support
-	 */
-	if (sta->he_cap.has_he && ebf)
-		mt7915_mcu_sta_bfer_he(sta, vif, phy, bf);
-	else if (sta->vht_cap.vht_supported)
-		mt7915_mcu_sta_bfer_vht(sta, phy, bf, ebf);
-	else if (sta->ht_cap.ht_supported)
-		mt7915_mcu_sta_bfer_ht(sta, phy, bf);
-	else
-		return;
-
-	bf->bf_cap = ebf ? ebf : dev->ibf << 1;
-	bf->bw = sta->bandwidth;
-	bf->ibf_dbw = sta->bandwidth;
-	bf->ibf_nrow = tx_ant;
-
-	if (!ebf && sta->bandwidth <= IEEE80211_STA_RX_BW_40 && !bf->ncol)
-		bf->ibf_timeout = 0x48;
-	else
-		bf->ibf_timeout = 0x18;
-
-	if (ebf && bf->nrow != tx_ant)
-		bf->mem_20m = matrix[tx_ant][bf->ncol];
-	else
-		bf->mem_20m = matrix[bf->nrow][bf->ncol];
-
-	switch (sta->bandwidth) {
-	case IEEE80211_STA_RX_BW_160:
-	case IEEE80211_STA_RX_BW_80:
-		bf->mem_total = bf->mem_20m * 2;
-		break;
-	case IEEE80211_STA_RX_BW_40:
-		bf->mem_total = bf->mem_20m;
-		break;
-	case IEEE80211_STA_RX_BW_20:
-	default:
-		break;
-	}
-}
-
-static void
-mt7915_mcu_sta_bfee_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
-			struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_phy *phy = mvif->phy;
-	int tx_ant = hweight8(phy->mt76->chainmask) - 1;
-	struct sta_rec_bfee *bfee;
-	struct tlv *tlv;
-	u8 nrow = 0;
-
-	if (!(sta->vht_cap.vht_supported || sta->he_cap.has_he))
-		return;
-
-	if (!mt7915_is_ebf_supported(phy, vif, sta, true))
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_BFEE, sizeof(*bfee));
-	bfee = (struct sta_rec_bfee *)tlv;
-
-	if (sta->he_cap.has_he) {
-		struct ieee80211_he_cap_elem *pe = &sta->he_cap.he_cap_elem;
-
-		nrow = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK,
-			      pe->phy_cap_info[5]);
-	} else if (sta->vht_cap.vht_supported) {
-		struct ieee80211_sta_vht_cap *pc = &sta->vht_cap;
-
-		nrow = FIELD_GET(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK,
-				 pc->cap);
-	}
-
-	/* reply with identity matrix to avoid 2x2 BF negative gain */
-	bfee->fb_identity_matrix = (nrow == 1 && tx_ant == 2);
-}
-
-static enum mcu_mmps_mode
-mt7915_mcu_get_mmps_mode(enum ieee80211_smps_mode smps)
-{
-	switch (smps) {
-	case IEEE80211_SMPS_OFF:
-		return MCU_MMPS_DISABLE;
-	case IEEE80211_SMPS_STATIC:
-		return MCU_MMPS_STATIC;
-	case IEEE80211_SMPS_DYNAMIC:
-		return MCU_MMPS_DYNAMIC;
-	default:
-		return MCU_MMPS_DISABLE;
-	}
-}
-
-int mt7915_mcu_set_fixed_rate_ctrl(struct mt7915_dev *dev,
-				   struct ieee80211_vif *vif,
-				   struct ieee80211_sta *sta,
-				   void *data, u32 field)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct sta_phy *phy = data;
-	struct sta_rec_ra_fixed *ra;
-	struct sk_buff *skb;
-	struct tlv *tlv;
-
-	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					    &msta->wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_RA_UPDATE, sizeof(*ra));
-	ra = (struct sta_rec_ra_fixed *)tlv;
-
-	switch (field) {
-	case RATE_PARAM_AUTO:
-		break;
-	case RATE_PARAM_FIXED:
-	case RATE_PARAM_FIXED_MCS:
-	case RATE_PARAM_FIXED_GI:
-	case RATE_PARAM_FIXED_HE_LTF:
-		if (phy)
-			ra->phy = *phy;
-		break;
-	case RATE_PARAM_MMPS_UPDATE:
-		ra->mmps_mode = mt7915_mcu_get_mmps_mode(sta->smps_mode);
-		break;
-	case RATE_PARAM_SPE_UPDATE:
-		ra->spe_idx = *(u8 *)data;
-		break;
-	default:
-		break;
-	}
-	ra->field = cpu_to_le32(field);
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_EXT_CMD(STA_REC_UPDATE), true);
-}
-
-int mt7915_mcu_add_smps(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-			struct ieee80211_sta *sta)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct wtbl_req_hdr *wtbl_hdr;
-	struct tlv *sta_wtbl;
-	struct sk_buff *skb;
-	int ret;
-
-	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					    &msta->wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	sta_wtbl = mt76_connac_mcu_add_tlv(skb, STA_REC_WTBL,
-					   sizeof(struct tlv));
-	wtbl_hdr = mt76_connac_mcu_alloc_wtbl_req(&dev->mt76, &msta->wcid,
-						  WTBL_SET, sta_wtbl, &skb);
-	if (IS_ERR(wtbl_hdr))
-		return PTR_ERR(wtbl_hdr);
-
-	mt76_connac_mcu_wtbl_smps_tlv(skb, sta, sta_wtbl, wtbl_hdr);
-
-	ret = mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				    MCU_EXT_CMD(STA_REC_UPDATE), true);
-	if (ret)
-		return ret;
-
-	return mt7915_mcu_set_fixed_rate_ctrl(dev, vif, sta, NULL,
-					      RATE_PARAM_MMPS_UPDATE);
-}
-
-static int
-mt7915_mcu_set_spe_idx(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt76_phy *mphy = mvif->phy->mt76;
-	u8 spe_idx = mt76_connac_spe_idx(mphy->antenna_mask);
-
-	return mt7915_mcu_set_fixed_rate_ctrl(dev, vif, sta, &spe_idx,
-					      RATE_PARAM_SPE_UPDATE);
-}
-
-static int
-mt7915_mcu_add_rate_ctrl_fixed(struct mt7915_dev *dev,
-			       struct ieee80211_vif *vif,
-			       struct ieee80211_sta *sta)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct cfg80211_chan_def *chandef = &mvif->phy->mt76->chandef;
-	struct cfg80211_bitrate_mask *mask = &mvif->bitrate_mask;
-	enum nl80211_band band = chandef->chan->band;
-	struct sta_phy phy = {};
-	int ret, nrates = 0;
-
-#define __sta_phy_bitrate_mask_check(_mcs, _gi, _ht, _he)			\
-	do {									\
-		u8 i, gi = mask->control[band]._gi;				\
-		gi = (_he) ? gi : gi == NL80211_TXRATE_FORCE_SGI;		\
-		for (i = 0; i <= sta->bandwidth; i++) {				\
-			phy.sgi |= gi << (i << (_he));				\
-			phy.he_ltf |= mask->control[band].he_ltf << (i << (_he));\
-		}								\
-		for (i = 0; i < ARRAY_SIZE(mask->control[band]._mcs); i++) {	\
-			if (!mask->control[band]._mcs[i])			\
-				continue;					\
-			nrates += hweight16(mask->control[band]._mcs[i]);	\
-			phy.mcs = ffs(mask->control[band]._mcs[i]) - 1;		\
-			if (_ht)						\
-				phy.mcs += 8 * i;				\
-		}								\
-	} while (0)
-
-	if (sta->he_cap.has_he) {
-		__sta_phy_bitrate_mask_check(he_mcs, he_gi, 0, 1);
-	} else if (sta->vht_cap.vht_supported) {
-		__sta_phy_bitrate_mask_check(vht_mcs, gi, 0, 0);
-	} else if (sta->ht_cap.ht_supported) {
-		__sta_phy_bitrate_mask_check(ht_mcs, gi, 1, 0);
-	} else {
-		nrates = hweight32(mask->control[band].legacy);
-		phy.mcs = ffs(mask->control[band].legacy) - 1;
-	}
-#undef __sta_phy_bitrate_mask_check
-
-	/* fall back to auto rate control */
-	if (mask->control[band].gi == NL80211_TXRATE_DEFAULT_GI &&
-	    mask->control[band].he_gi == GENMASK(7, 0) &&
-	    mask->control[band].he_ltf == GENMASK(7, 0) &&
-	    nrates != 1)
-		return 0;
-
-	/* fixed single rate */
-	if (nrates == 1) {
-		ret = mt7915_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy,
-						     RATE_PARAM_FIXED_MCS);
-		if (ret)
-			return ret;
-	}
-
-	/* fixed GI */
-	if (mask->control[band].gi != NL80211_TXRATE_DEFAULT_GI ||
-	    mask->control[band].he_gi != GENMASK(7, 0)) {
-		struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-		u32 addr;
-
-		/* firmware updates only TXCMD but doesn't take WTBL into
-		 * account, so driver should update here to reflect the
-		 * actual txrate hardware sends out.
-		 */
-		addr = mt7915_mac_wtbl_lmac_addr(dev, msta->wcid.idx, 7);
-		if (sta->he_cap.has_he)
-			mt76_rmw_field(dev, addr, GENMASK(31, 24), phy.sgi);
-		else
-			mt76_rmw_field(dev, addr, GENMASK(15, 12), phy.sgi);
-
-		ret = mt7915_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy,
-						     RATE_PARAM_FIXED_GI);
-		if (ret)
-			return ret;
-	}
-
-	/* fixed HE_LTF */
-	if (mask->control[band].he_ltf != GENMASK(7, 0)) {
-		ret = mt7915_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy,
-						     RATE_PARAM_FIXED_HE_LTF);
-		if (ret)
-			return ret;
-	}
-
-	return mt7915_mcu_set_spe_idx(dev, vif, sta);
-}
-
-static void
-mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev,
-			     struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt76_phy *mphy = mvif->phy->mt76;
-	struct cfg80211_chan_def *chandef = &mphy->chandef;
-	struct cfg80211_bitrate_mask *mask = &mvif->bitrate_mask;
-	enum nl80211_band band = chandef->chan->band;
-	struct sta_rec_ra *ra;
-	struct tlv *tlv;
-	u32 supp_rate = sta->supp_rates[band];
-	u32 cap = sta->wme ? STA_CAP_WMM : 0;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_RA, sizeof(*ra));
-	ra = (struct sta_rec_ra *)tlv;
-
-	ra->valid = true;
-	ra->auto_rate = true;
-	ra->phy_mode = mt76_connac_get_phy_mode(mphy, vif, band, sta);
-	ra->channel = chandef->chan->hw_value;
-	ra->bw = sta->bandwidth;
-	ra->phy.bw = sta->bandwidth;
-	ra->mmps_mode = mt7915_mcu_get_mmps_mode(sta->smps_mode);
-
-	if (supp_rate) {
-		supp_rate &= mask->control[band].legacy;
-		ra->rate_len = hweight32(supp_rate);
-
-		if (band == NL80211_BAND_2GHZ) {
-			ra->supp_mode = MODE_CCK;
-			ra->supp_cck_rate = supp_rate & GENMASK(3, 0);
-
-			if (ra->rate_len > 4) {
-				ra->supp_mode |= MODE_OFDM;
-				ra->supp_ofdm_rate = supp_rate >> 4;
-			}
-		} else {
-			ra->supp_mode = MODE_OFDM;
-			ra->supp_ofdm_rate = supp_rate;
-		}
-	}
-
-	if (sta->ht_cap.ht_supported) {
-		ra->supp_mode |= MODE_HT;
-		ra->af = sta->ht_cap.ampdu_factor;
-		ra->ht_gf = !!(sta->ht_cap.cap & IEEE80211_HT_CAP_GRN_FLD);
-
-		cap |= STA_CAP_HT;
-		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20)
-			cap |= STA_CAP_SGI_20;
-		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40)
-			cap |= STA_CAP_SGI_40;
-		if (sta->ht_cap.cap & IEEE80211_HT_CAP_TX_STBC)
-			cap |= STA_CAP_TX_STBC;
-		if (sta->ht_cap.cap & IEEE80211_HT_CAP_RX_STBC)
-			cap |= STA_CAP_RX_STBC;
-		if (mvif->cap.ht_ldpc &&
-		    (sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING))
-			cap |= STA_CAP_LDPC;
-
-		mt7915_mcu_set_sta_ht_mcs(sta, ra->ht_mcs,
-					  mask->control[band].ht_mcs);
-		ra->supp_ht_mcs = *(__le32 *)ra->ht_mcs;
-	}
-
-	if (sta->vht_cap.vht_supported) {
-		u8 af;
-
-		ra->supp_mode |= MODE_VHT;
-		af = FIELD_GET(IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK,
-			       sta->vht_cap.cap);
-		ra->af = max_t(u8, ra->af, af);
-
-		cap |= STA_CAP_VHT;
-		if (sta->vht_cap.cap & IEEE80211_VHT_CAP_SHORT_GI_80)
-			cap |= STA_CAP_VHT_SGI_80;
-		if (sta->vht_cap.cap & IEEE80211_VHT_CAP_SHORT_GI_160)
-			cap |= STA_CAP_VHT_SGI_160;
-		if (sta->vht_cap.cap & IEEE80211_VHT_CAP_TXSTBC)
-			cap |= STA_CAP_VHT_TX_STBC;
-		if (sta->vht_cap.cap & IEEE80211_VHT_CAP_RXSTBC_1)
-			cap |= STA_CAP_VHT_RX_STBC;
-		if (mvif->cap.vht_ldpc &&
-		    (sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC))
-			cap |= STA_CAP_VHT_LDPC;
-
-		mt7915_mcu_set_sta_vht_mcs(sta, ra->supp_vht_mcs,
-					   mask->control[band].vht_mcs);
-	}
-
-	if (sta->he_cap.has_he) {
-		ra->supp_mode |= MODE_HE;
-		cap |= STA_CAP_HE;
-
-		if (sta->he_6ghz_capa.capa)
-			ra->af = le16_get_bits(sta->he_6ghz_capa.capa,
-					       IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP);
-	}
-
-	ra->sta_cap = cpu_to_le32(cap);
-}
-
-int mt7915_mcu_add_rate_ctrl(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-			     struct ieee80211_sta *sta, bool changed)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct sk_buff *skb;
-	int ret;
-
-	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					    &msta->wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	/* firmware rc algorithm refers to sta_rec_he for HE control.
-	 * once dev->rc_work changes the settings driver should also
-	 * update sta_rec_he here.
-	 */
-	if (changed)
-		mt7915_mcu_sta_he_tlv(skb, sta, vif);
-
-	/* sta_rec_ra accommodates BW, NSS and only MCS range format
-	 * i.e 0-{7,8,9} for VHT.
-	 */
-	mt7915_mcu_sta_rate_ctrl_tlv(skb, dev, vif, sta);
-
-	ret = mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				    MCU_EXT_CMD(STA_REC_UPDATE), true);
-	if (ret)
-		return ret;
-
-	/* sta_rec_ra_fixed accommodates single rate, (HE)GI and HE_LTE,
-	 * and updates as peer fixed rate parameters, which overrides
-	 * sta_rec_ra and firmware rate control algorithm.
-	 */
-	return mt7915_mcu_add_rate_ctrl_fixed(dev, vif, sta);
-}
-
-static int
-mt7915_mcu_add_group(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-		     struct ieee80211_sta *sta)
-{
-#define MT_STA_BSS_GROUP		1
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_sta *msta;
-	struct {
-		__le32 action;
-		u8 wlan_idx_lo;
-		u8 status;
-		u8 wlan_idx_hi;
-		u8 rsv0[5];
-		__le32 val;
-		u8 rsv1[8];
-	} __packed req = {
-		.action = cpu_to_le32(MT_STA_BSS_GROUP),
-		.val = cpu_to_le32(mvif->mt76.idx % 16),
-	};
-
-	msta = sta ? (struct mt7915_sta *)sta->drv_priv : &mvif->sta;
-	req.wlan_idx_lo = to_wcid_lo(msta->wcid.idx);
-	req.wlan_idx_hi = to_wcid_hi(msta->wcid.idx);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_DRR_CTRL), &req,
-				 sizeof(req), true);
-}
-
-int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta, bool enable)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_sta *msta;
-	struct sk_buff *skb;
-	int ret;
-
-	msta = sta ? (struct mt7915_sta *)sta->drv_priv : &mvif->sta;
-
-	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					    &msta->wcid);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	/* starec basic */
-	mt76_connac_mcu_sta_basic_tlv(skb, vif, sta, enable,
-			!rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
-	if (!enable)
-		goto out;
-
-	/* tag order is in accordance with firmware dependency. */
-	if (sta) {
-		/* starec bfer */
-		mt7915_mcu_sta_bfer_tlv(dev, skb, vif, sta);
-		/* starec ht */
-		mt7915_mcu_sta_ht_tlv(skb, sta);
-		/* starec vht */
-		mt7915_mcu_sta_vht_tlv(skb, sta);
-		/* starec uapsd */
-		mt76_connac_mcu_sta_uapsd(skb, vif, sta);
-	}
-
-	ret = mt7915_mcu_sta_wtbl_tlv(dev, skb, vif, sta);
-	if (ret) {
-		dev_kfree_skb(skb);
-		return ret;
-	}
-
-	if (sta) {
-		/* starec amsdu */
-		mt7915_mcu_sta_amsdu_tlv(dev, skb, vif, sta);
-		/* starec he */
-		mt7915_mcu_sta_he_tlv(skb, sta, vif);
-		/* starec muru */
-		mt7915_mcu_sta_muru_tlv(dev, skb, sta, vif);
-		/* starec bfee */
-		mt7915_mcu_sta_bfee_tlv(dev, skb, vif, sta);
-	}
-
-	ret = mt7915_mcu_add_group(dev, vif, sta);
-	if (ret) {
-		dev_kfree_skb(skb);
-		return ret;
-	}
-out:
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_EXT_CMD(STA_REC_UPDATE), true);
-}
-
-int mt7915_mcu_add_dev_info(struct mt7915_phy *phy,
-			    struct ieee80211_vif *vif, bool enable)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct {
-		struct req_hdr {
-			u8 omac_idx;
-			u8 dbdc_idx;
-			__le16 tlv_num;
-			u8 is_tlv_append;
-			u8 rsv[3];
-		} __packed hdr;
-		struct req_tlv {
-			__le16 tag;
-			__le16 len;
-			u8 active;
-			u8 dbdc_idx;
-			u8 omac_addr[ETH_ALEN];
-		} __packed tlv;
-	} data = {
-		.hdr = {
-			.omac_idx = mvif->mt76.omac_idx,
-			.dbdc_idx = mvif->mt76.band_idx,
-			.tlv_num = cpu_to_le16(1),
-			.is_tlv_append = 1,
-		},
-		.tlv = {
-			.tag = cpu_to_le16(DEV_INFO_ACTIVE),
-			.len = cpu_to_le16(sizeof(struct req_tlv)),
-			.active = enable,
-			.dbdc_idx = mvif->mt76.band_idx,
-		},
-	};
-
-	if (mvif->mt76.omac_idx >= REPEATER_BSSID_START)
-		return mt7915_mcu_muar_config(phy, vif, false, enable);
-
-	memcpy(data.tlv.omac_addr, vif->addr, ETH_ALEN);
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(DEV_INFO_UPDATE),
-				 &data, sizeof(data), true);
-}
-
-static void
-mt7915_mcu_beacon_cntdwn(struct ieee80211_vif *vif, struct sk_buff *rskb,
-			 struct sk_buff *skb, struct bss_info_bcn *bcn,
-			 struct ieee80211_mutable_offsets *offs)
-{
-	struct bss_info_bcn_cntdwn *info;
-	struct tlv *tlv;
-	int sub_tag;
-
-	if (!offs->cntdwn_counter_offs[0])
-		return;
-
-	sub_tag = vif->csa_active ? BSS_INFO_BCN_CSA : BSS_INFO_BCN_BCC;
-	tlv = mt7915_mcu_add_nested_subtlv(rskb, sub_tag, sizeof(*info),
-					   &bcn->sub_ntlv, &bcn->len);
-	info = (struct bss_info_bcn_cntdwn *)tlv;
-	info->cnt = skb->data[offs->cntdwn_counter_offs[0]];
-}
-
-static void
-mt7915_mcu_beacon_mbss(struct sk_buff *rskb, struct sk_buff *skb,
-		       struct ieee80211_vif *vif, struct bss_info_bcn *bcn,
-		       struct ieee80211_mutable_offsets *offs)
-{
-	struct bss_info_bcn_mbss *mbss;
-	const struct element *elem;
-	struct tlv *tlv;
-
-	if (!vif->bss_conf.bssid_indicator)
-		return;
-
-	tlv = mt7915_mcu_add_nested_subtlv(rskb, BSS_INFO_BCN_MBSSID,
-					   sizeof(*mbss), &bcn->sub_ntlv,
-					   &bcn->len);
-
-	mbss = (struct bss_info_bcn_mbss *)tlv;
-	mbss->offset[0] = cpu_to_le16(offs->tim_offset);
-	mbss->bitmap = cpu_to_le32(1);
-
-	for_each_element_id(elem, WLAN_EID_MULTIPLE_BSSID,
-			    &skb->data[offs->mbssid_off],
-			    skb->len - offs->mbssid_off) {
-		const struct element *sub_elem;
-
-		if (elem->datalen < 2)
-			continue;
-
-		for_each_element(sub_elem, elem->data + 1, elem->datalen - 1) {
-			const struct ieee80211_bssid_index *idx;
-			const u8 *idx_ie;
-
-			if (sub_elem->id || sub_elem->datalen < 4)
-				continue; /* not a valid BSS profile */
-
-			/* Find WLAN_EID_MULTI_BSSID_IDX
-			 * in the merged nontransmitted profile
-			 */
-			idx_ie = cfg80211_find_ie(WLAN_EID_MULTI_BSSID_IDX,
-						  sub_elem->data,
-						  sub_elem->datalen);
-			if (!idx_ie || idx_ie[1] < sizeof(*idx))
-				continue;
-
-			idx = (void *)(idx_ie + 2);
-			if (!idx->bssid_index || idx->bssid_index > 31)
-				continue;
-
-			mbss->offset[idx->bssid_index] =
-				cpu_to_le16(idx_ie - skb->data);
-			mbss->bitmap |= cpu_to_le32(BIT(idx->bssid_index));
-		}
-	}
-}
-
-static void
-mt7915_mcu_beacon_cont(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-		       struct sk_buff *rskb, struct sk_buff *skb,
-		       struct bss_info_bcn *bcn,
-		       struct ieee80211_mutable_offsets *offs)
-{
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-	struct bss_info_bcn_cont *cont;
-	struct tlv *tlv;
-	u8 *buf;
-	int len = sizeof(*cont) + MT_TXD_SIZE + skb->len;
-
-	len = (len & 0x3) ? ((len | 0x3) + 1) : len;
-	tlv = mt7915_mcu_add_nested_subtlv(rskb, BSS_INFO_BCN_CONTENT,
-					   len, &bcn->sub_ntlv, &bcn->len);
-
-	cont = (struct bss_info_bcn_cont *)tlv;
-	cont->pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
-	cont->tim_ofs = cpu_to_le16(offs->tim_offset);
-
-	if (offs->cntdwn_counter_offs[0]) {
-		u16 offset = offs->cntdwn_counter_offs[0];
-
-		if (vif->csa_active)
-			cont->csa_ofs = cpu_to_le16(offset - 4);
-		if (vif->color_change_active)
-			cont->bcc_ofs = cpu_to_le16(offset - 3);
-	}
-
-	buf = (u8 *)tlv + sizeof(*cont);
-	mt7915_mac_write_txwi(&dev->mt76, (__le32 *)buf, skb, wcid, 0, NULL,
-			      0, BSS_CHANGED_BEACON);
-	memcpy(buf + MT_TXD_SIZE, skb->data, skb->len);
-}
-
-static void
-mt7915_mcu_beacon_check_caps(struct mt7915_phy *phy, struct ieee80211_vif *vif,
-			     struct sk_buff *skb)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_vif_cap *vc = &mvif->cap;
-	const struct ieee80211_he_cap_elem *he;
-	const struct ieee80211_vht_cap *vht;
-	const struct ieee80211_ht_cap *ht;
-	struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
-	const u8 *ie;
-	u32 len, bc;
-
-	/* Check missing configuration options to allow AP mode in mac80211
-	 * to remain in sync with hostapd settings, and get a subset of
-	 * beacon and hardware capabilities.
-	 */
-	if (WARN_ON_ONCE(skb->len <= (mgmt->u.beacon.variable - skb->data)))
-		return;
-
-	memset(vc, 0, sizeof(*vc));
-
-	len = skb->len - (mgmt->u.beacon.variable - skb->data);
-
-	ie = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, mgmt->u.beacon.variable,
-			      len);
-	if (ie && ie[1] >= sizeof(*ht)) {
-		ht = (void *)(ie + 2);
-		vc->ht_ldpc = !!(le16_to_cpu(ht->cap_info) &
-				 IEEE80211_HT_CAP_LDPC_CODING);
-	}
-
-	ie = cfg80211_find_ie(WLAN_EID_VHT_CAPABILITY, mgmt->u.beacon.variable,
-			      len);
-	if (ie && ie[1] >= sizeof(*vht)) {
-		u32 pc = phy->mt76->sband_5g.sband.vht_cap.cap;
-
-		vht = (void *)(ie + 2);
-		bc = le32_to_cpu(vht->vht_cap_info);
-
-		vc->vht_ldpc = !!(bc & IEEE80211_VHT_CAP_RXLDPC);
-		vc->vht_su_ebfer =
-			(bc & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE) &&
-			(pc & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE);
-		vc->vht_su_ebfee =
-			(bc & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE) &&
-			(pc & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE);
-		vc->vht_mu_ebfer =
-			(bc & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE) &&
-			(pc & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE);
-		vc->vht_mu_ebfee =
-			(bc & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE) &&
-			(pc & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE);
-	}
-
-	ie = cfg80211_find_ext_ie(WLAN_EID_EXT_HE_CAPABILITY,
-				  mgmt->u.beacon.variable, len);
-	if (ie && ie[1] >= sizeof(*he) + 1) {
-		const struct ieee80211_sta_he_cap *pc =
-			mt76_connac_get_he_phy_cap(phy->mt76, vif);
-		const struct ieee80211_he_cap_elem *pe = &pc->he_cap_elem;
-
-		he = (void *)(ie + 3);
-
-		vc->he_ldpc =
-			HE_PHY(CAP1_LDPC_CODING_IN_PAYLOAD, pe->phy_cap_info[1]);
-		vc->he_su_ebfer =
-			HE_PHY(CAP3_SU_BEAMFORMER, he->phy_cap_info[3]) &&
-			HE_PHY(CAP3_SU_BEAMFORMER, pe->phy_cap_info[3]);
-		vc->he_su_ebfee =
-			HE_PHY(CAP4_SU_BEAMFORMEE, he->phy_cap_info[4]) &&
-			HE_PHY(CAP4_SU_BEAMFORMEE, pe->phy_cap_info[4]);
-		vc->he_mu_ebfer =
-			HE_PHY(CAP4_MU_BEAMFORMER, he->phy_cap_info[4]) &&
-			HE_PHY(CAP4_MU_BEAMFORMER, pe->phy_cap_info[4]);
-	}
-}
-
-static void
-mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-				struct sk_buff *rskb, struct bss_info_bcn *bcn,
-				u32 changed)
-{
-#define OFFLOAD_TX_MODE_SU	BIT(0)
-#define OFFLOAD_TX_MODE_MU	BIT(1)
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct cfg80211_chan_def *chandef = &mvif->phy->mt76->chandef;
-	enum nl80211_band band = chandef->chan->band;
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-	struct bss_info_inband_discovery *discov;
-	struct ieee80211_tx_info *info;
-	struct sk_buff *skb = NULL;
-	struct tlv *tlv;
-	bool ext_phy = phy != &dev->phy;
-	u8 *buf, interval;
-	int len;
-
-	if (changed & BSS_CHANGED_FILS_DISCOVERY &&
-	    vif->bss_conf.fils_discovery.max_interval) {
-		interval = vif->bss_conf.fils_discovery.max_interval;
-		skb = ieee80211_get_fils_discovery_tmpl(hw, vif);
-	} else if (changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP &&
-		   vif->bss_conf.unsol_bcast_probe_resp_interval) {
-		interval = vif->bss_conf.unsol_bcast_probe_resp_interval;
-		skb = ieee80211_get_unsol_bcast_probe_resp_tmpl(hw, vif);
-	}
-
-	if (!skb)
-		return;
-
-	info = IEEE80211_SKB_CB(skb);
-	info->control.vif = vif;
-	info->band = band;
-
-	info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, ext_phy);
-
-	len = sizeof(*discov) + MT_TXD_SIZE + skb->len;
-	len = (len & 0x3) ? ((len | 0x3) + 1) : len;
-
-	if (len > (MT7915_MAX_BSS_OFFLOAD_SIZE - rskb->len)) {
-		dev_err(dev->mt76.dev, "inband discovery size limit exceed\n");
-		dev_kfree_skb(skb);
-		return;
-	}
-
-	tlv = mt7915_mcu_add_nested_subtlv(rskb, BSS_INFO_BCN_DISCOV,
-					   len, &bcn->sub_ntlv, &bcn->len);
-	discov = (struct bss_info_inband_discovery *)tlv;
-	discov->tx_mode = OFFLOAD_TX_MODE_SU;
-	/* 0: UNSOL PROBE RESP, 1: FILS DISCOV */
-	discov->tx_type = !!(changed & BSS_CHANGED_FILS_DISCOVERY);
-	discov->tx_interval = interval;
-	discov->prob_rsp_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
-	discov->enable = true;
-
-	buf = (u8 *)tlv + sizeof(*discov);
-
-	mt7915_mac_write_txwi(&dev->mt76, (__le32 *)buf, skb, wcid, 0, NULL,
-			      0, changed);
-	memcpy(buf + MT_TXD_SIZE, skb->data, skb->len);
-
-	dev_kfree_skb(skb);
-}
-
-int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			  int en, u32 changed)
-{
-	struct mt7915_dev *dev = mt7915_hw_dev(hw);
-	struct mt7915_phy *phy = mt7915_hw_phy(hw);
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct ieee80211_mutable_offsets offs;
-	struct ieee80211_tx_info *info;
-	struct sk_buff *skb, *rskb;
-	struct tlv *tlv;
-	struct bss_info_bcn *bcn;
-	int len = MT7915_MAX_BSS_OFFLOAD_SIZE;
-	bool ext_phy = phy != &dev->phy;
-
-	if (vif->bss_conf.nontransmitted)
-		return 0;
-
-	rskb = __mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					       NULL, len);
-	if (IS_ERR(rskb))
-		return PTR_ERR(rskb);
-
-	tlv = mt76_connac_mcu_add_tlv(rskb, BSS_INFO_OFFLOAD, sizeof(*bcn));
-	bcn = (struct bss_info_bcn *)tlv;
-	bcn->enable = en;
-
-	if (!en)
-		goto out;
-
-	skb = ieee80211_beacon_get_template(hw, vif, &offs);
-	if (!skb)
-		return -EINVAL;
-
-	if (skb->len > MT7915_MAX_BEACON_SIZE - MT_TXD_SIZE) {
-		dev_err(dev->mt76.dev, "Bcn size limit exceed\n");
-		dev_kfree_skb(skb);
-		return -EINVAL;
-	}
-
-	info = IEEE80211_SKB_CB(skb);
-	info->hw_queue = FIELD_PREP(MT_TX_HW_QUEUE_PHY, ext_phy);
-
-	mt7915_mcu_beacon_check_caps(phy, vif, skb);
-
-	mt7915_mcu_beacon_cntdwn(vif, rskb, skb, bcn, &offs);
-	mt7915_mcu_beacon_mbss(rskb, skb, vif, bcn, &offs);
-	mt7915_mcu_beacon_cont(dev, vif, rskb, skb, bcn, &offs);
-	dev_kfree_skb(skb);
-
-	if (changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP ||
-	    changed & BSS_CHANGED_FILS_DISCOVERY)
-		mt7915_mcu_beacon_inband_discov(dev, vif, rskb,
-						bcn, changed);
-
-out:
-	return mt76_mcu_skb_send_msg(&phy->dev->mt76, rskb,
-				     MCU_EXT_CMD(BSS_INFO_UPDATE), true);
-}
-
-static int mt7915_driver_own(struct mt7915_dev *dev, u8 band)
-{
-	mt76_wr(dev, MT_TOP_LPCR_HOST_BAND(band), MT_TOP_LPCR_HOST_DRV_OWN);
-	if (!mt76_poll_msec(dev, MT_TOP_LPCR_HOST_BAND(band),
-			    MT_TOP_LPCR_HOST_FW_OWN_STAT, 0, 500)) {
-		dev_err(dev->mt76.dev, "Timeout for driver own\n");
-		return -EIO;
-	}
-
-	/* clear irq when the driver own success */
-	mt76_wr(dev, MT_TOP_LPCR_HOST_BAND_IRQ_STAT(band),
-		MT_TOP_LPCR_HOST_BAND_STAT);
-
-	return 0;
-}
-
-static int
-mt7915_firmware_state(struct mt7915_dev *dev, bool wa)
-{
-	u32 state = FIELD_PREP(MT_TOP_MISC_FW_STATE,
-			       wa ? FW_STATE_RDY : FW_STATE_FW_DOWNLOAD);
-
-	if (!mt76_poll_msec(dev, MT_TOP_MISC, MT_TOP_MISC_FW_STATE,
-			    state, 1000)) {
-		dev_err(dev->mt76.dev, "Timeout for initializing firmware\n");
-		return -EIO;
-	}
-	return 0;
-}
-
-static int mt7915_load_firmware(struct mt7915_dev *dev)
-{
-	int ret;
-
-	/* make sure fw is download state */
-	if (mt7915_firmware_state(dev, false)) {
-		/* restart firmware once */
-		__mt76_mcu_restart(&dev->mt76);
-		ret = mt7915_firmware_state(dev, false);
-		if (ret) {
-			dev_err(dev->mt76.dev,
-				"Firmware is not ready for download\n");
-			return ret;
-		}
-	}
-
-	ret = mt76_connac2_load_patch(&dev->mt76, fw_name_var(dev, ROM_PATCH));
-	if (ret)
-		return ret;
-
-	ret = mt76_connac2_load_ram(&dev->mt76, fw_name_var(dev, FIRMWARE_WM),
-				    fw_name(dev, FIRMWARE_WA));
-	if (ret)
-		return ret;
-
-	ret = mt7915_firmware_state(dev, true);
-	if (ret)
-		return ret;
-
-	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_FWDL], false);
-
-	dev_dbg(dev->mt76.dev, "Firmware init done\n");
-
-	return 0;
-}
-
-int mt7915_mcu_fw_log_2_host(struct mt7915_dev *dev, u8 type, u8 ctrl)
-{
-	struct {
-		u8 ctrl_val;
-		u8 pad[3];
-	} data = {
-		.ctrl_val = ctrl
-	};
-
-	if (type == MCU_FW_LOG_WA)
-		return mt76_mcu_send_msg(&dev->mt76, MCU_WA_EXT_CMD(FW_LOG_2_HOST),
-					 &data, sizeof(data), true);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(FW_LOG_2_HOST), &data,
-				 sizeof(data), true);
-}
-
-int mt7915_mcu_fw_dbg_ctrl(struct mt7915_dev *dev, u32 module, u8 level)
-{
-	struct {
-		u8 ver;
-		u8 pad;
-		__le16 len;
-		u8 level;
-		u8 rsv[3];
-		__le32 module_idx;
-	} data = {
-		.module_idx = cpu_to_le32(module),
-		.level = level,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(FW_DBG_CTRL), &data,
-				 sizeof(data), false);
-}
-
-int mt7915_mcu_muru_debug_set(struct mt7915_dev *dev, bool enabled)
-{
-	struct {
-		__le32 cmd;
-		u8 enable;
-	} data = {
-		.cmd = cpu_to_le32(MURU_SET_TXC_TX_STATS_EN),
-		.enable = enabled,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(MURU_CTRL), &data,
-				sizeof(data), false);
-}
-
-int mt7915_mcu_muru_debug_get(struct mt7915_phy *phy, void *ms)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct sk_buff *skb;
-	struct mt7915_mcu_muru_stats *mu_stats =
-				(struct mt7915_mcu_muru_stats *)ms;
-	int ret;
-
-	struct {
-		__le32 cmd;
-		u8 band_idx;
-	} req = {
-		.cmd = cpu_to_le32(MURU_GET_TXC_TX_STATS),
-		.band_idx = phy->band_idx,
-	};
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_CMD(MURU_CTRL),
-					&req, sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	memcpy(mu_stats, skb->data, sizeof(struct mt7915_mcu_muru_stats));
-	dev_kfree_skb(skb);
-
-	return 0;
-}
-
-static int mt7915_mcu_set_mwds(struct mt7915_dev *dev, bool enabled)
-{
-	struct {
-		u8 enable;
-		u8 _rsv[3];
-	} __packed req = {
-		.enable = enabled
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WA_EXT_CMD(MWDS_SUPPORT), &req,
-				 sizeof(req), false);
-}
-
-int mt7915_mcu_set_muru_ctrl(struct mt7915_dev *dev, u32 cmd, u32 val)
-{
-	struct {
-		__le32 cmd;
-		u8 val[4];
-	} __packed req = {
-		.cmd = cpu_to_le32(cmd),
-	};
-
-	put_unaligned_le32(val, req.val);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(MURU_CTRL), &req,
-				 sizeof(req), false);
-}
-
-static int
-mt7915_mcu_init_rx_airtime(struct mt7915_dev *dev)
-{
-#define RX_AIRTIME_FEATURE_CTRL		1
-#define RX_AIRTIME_BITWISE_CTRL		2
-#define RX_AIRTIME_CLEAR_EN	1
-	struct {
-		__le16 field;
-		__le16 sub_field;
-		__le32 set_status;
-		__le32 get_status;
-		u8 _rsv[12];
-
-		bool airtime_en;
-		bool mibtime_en;
-		bool earlyend_en;
-		u8 _rsv1[9];
-
-		bool airtime_clear;
-		bool mibtime_clear;
-		u8 _rsv2[98];
-	} __packed req = {
-		.field = cpu_to_le16(RX_AIRTIME_BITWISE_CTRL),
-		.sub_field = cpu_to_le16(RX_AIRTIME_CLEAR_EN),
-		.airtime_clear = true,
-	};
-	int ret;
-
-	ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RX_AIRTIME_CTRL), &req,
-				sizeof(req), true);
-	if (ret)
-		return ret;
-
-	req.field = cpu_to_le16(RX_AIRTIME_FEATURE_CTRL);
-	req.sub_field = cpu_to_le16(RX_AIRTIME_CLEAR_EN);
-	req.airtime_en = true;
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RX_AIRTIME_CTRL), &req,
-				 sizeof(req), true);
-}
-
-int mt7915_mcu_init(struct mt7915_dev *dev)
-{
-	static const struct mt76_mcu_ops mt7915_mcu_ops = {
-		.headroom = sizeof(struct mt76_connac2_mcu_txd),
-		.mcu_skb_send_msg = mt7915_mcu_send_message,
-		.mcu_parse_response = mt7915_mcu_parse_response,
-		.mcu_restart = mt76_connac_mcu_restart,
-	};
-	int ret;
-
-	dev->mt76.mcu_ops = &mt7915_mcu_ops;
-
-	/* force firmware operation mode into normal state,
-	 * which should be set before firmware download stage.
-	 */
-	mt76_wr(dev, MT_SWDEF_MODE, MT_SWDEF_NORMAL_MODE);
-
-	ret = mt7915_driver_own(dev, 0);
-	if (ret)
-		return ret;
-	/* set driver own for band1 when two hif exist */
-	if (dev->hif2) {
-		ret = mt7915_driver_own(dev, 1);
-		if (ret)
-			return ret;
-	}
-
-	ret = mt7915_load_firmware(dev);
-	if (ret)
-		return ret;
-
-	set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-	ret = mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, 0);
-	if (ret)
-		return ret;
-
-	ret = mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, 0);
-	if (ret)
-		return ret;
-
-	if (mtk_wed_device_active(&dev->mt76.mmio.wed) && is_mt7915(&dev->mt76))
-		mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(CAPABILITY), 0, 0, 0);
-
-	ret = mt7915_mcu_set_mwds(dev, 1);
-	if (ret)
-		return ret;
-
-	ret = mt7915_mcu_set_muru_ctrl(dev, MURU_SET_PLATFORM_TYPE,
-				       MURU_PLATFORM_TYPE_PERF_LEVEL_2);
-	if (ret)
-		return ret;
-
-	ret = mt7915_mcu_init_rx_airtime(dev);
-	if (ret)
-		return ret;
-
-	return mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),
-				 MCU_WA_PARAM_RED, 0, 0);
-}
-
-void mt7915_mcu_exit(struct mt7915_dev *dev)
-{
-	__mt76_mcu_restart(&dev->mt76);
-	if (mt7915_firmware_state(dev, false)) {
-		dev_err(dev->mt76.dev, "Failed to exit mcu\n");
-		return;
-	}
-
-	mt76_wr(dev, MT_TOP_LPCR_HOST_BAND(0), MT_TOP_LPCR_HOST_FW_OWN);
-	if (dev->hif2)
-		mt76_wr(dev, MT_TOP_LPCR_HOST_BAND(1),
-			MT_TOP_LPCR_HOST_FW_OWN);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-}
-
-static int
-mt7915_mcu_set_rx_hdr_trans_blacklist(struct mt7915_dev *dev, int band)
-{
-	struct {
-		u8 operation;
-		u8 count;
-		u8 _rsv[2];
-		u8 index;
-		u8 enable;
-		__le16 etype;
-	} req = {
-		.operation = 1,
-		.count = 1,
-		.enable = 1,
-		.etype = cpu_to_le16(ETH_P_PAE),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RX_HDR_TRANS),
-				 &req, sizeof(req), false);
-}
-
-int mt7915_mcu_set_mac(struct mt7915_dev *dev, int band,
-		       bool enable, bool hdr_trans)
-{
-	struct {
-		u8 operation;
-		u8 enable;
-		u8 check_bssid;
-		u8 insert_vlan;
-		u8 remove_vlan;
-		u8 tid;
-		u8 mode;
-		u8 rsv;
-	} __packed req_trans = {
-		.enable = hdr_trans,
-	};
-	struct {
-		u8 enable;
-		u8 band;
-		u8 rsv[2];
-	} __packed req_mac = {
-		.enable = enable,
-		.band = band,
-	};
-	int ret;
-
-	ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RX_HDR_TRANS),
-				&req_trans, sizeof(req_trans), false);
-	if (ret)
-		return ret;
-
-	if (hdr_trans)
-		mt7915_mcu_set_rx_hdr_trans_blacklist(dev, band);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(MAC_INIT_CTRL),
-				 &req_mac, sizeof(req_mac), true);
-}
-
-int mt7915_mcu_update_edca(struct mt7915_dev *dev, void *param)
-{
-	struct mt7915_mcu_tx *req = (struct mt7915_mcu_tx *)param;
-	u8 num = req->total;
-	size_t len = sizeof(*req) -
-		     (IEEE80211_NUM_ACS - num) * sizeof(struct edca);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(EDCA_UPDATE), req,
-				 len, true);
-}
-
-int mt7915_mcu_set_tx(struct mt7915_dev *dev, struct ieee80211_vif *vif)
-{
-#define TX_CMD_MODE		1
-	struct mt7915_mcu_tx req = {
-		.valid = true,
-		.mode = TX_CMD_MODE,
-		.total = IEEE80211_NUM_ACS,
-	};
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	int ac;
-
-	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
-		struct ieee80211_tx_queue_params *q = &mvif->queue_params[ac];
-		struct edca *e = &req.edca[ac];
-
-		e->set = WMM_PARAM_SET;
-		e->queue = ac + mvif->mt76.wmm_idx * MT76_CONNAC_MAX_WMM_SETS;
-		e->aifs = q->aifs;
-		e->txop = cpu_to_le16(q->txop);
-
-		if (q->cw_min)
-			e->cw_min = fls(q->cw_min);
-		else
-			e->cw_min = 5;
-
-		if (q->cw_max)
-			e->cw_max = cpu_to_le16(fls(q->cw_max));
-		else
-			e->cw_max = cpu_to_le16(10);
-	}
-
-	return mt7915_mcu_update_edca(dev, &req);
-}
-
-int mt7915_mcu_set_fcc5_lpn(struct mt7915_dev *dev, int val)
-{
-	struct {
-		__le32 tag;
-		__le16 min_lpn;
-		u8 rsv[2];
-	} __packed req = {
-		.tag = cpu_to_le32(0x1),
-		.min_lpn = cpu_to_le16(val),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_RDD_TH), &req,
-				 sizeof(req), true);
-}
-
-int mt7915_mcu_set_pulse_th(struct mt7915_dev *dev,
-			    const struct mt7915_dfs_pulse *pulse)
-{
-	struct {
-		__le32 tag;
-
-		__le32 max_width;		/* us */
-		__le32 max_pwr;			/* dbm */
-		__le32 min_pwr;			/* dbm */
-		__le32 min_stgr_pri;		/* us */
-		__le32 max_stgr_pri;		/* us */
-		__le32 min_cr_pri;		/* us */
-		__le32 max_cr_pri;		/* us */
-	} __packed req = {
-		.tag = cpu_to_le32(0x3),
-
-#define __req_field(field) .field = cpu_to_le32(pulse->field)
-		__req_field(max_width),
-		__req_field(max_pwr),
-		__req_field(min_pwr),
-		__req_field(min_stgr_pri),
-		__req_field(max_stgr_pri),
-		__req_field(min_cr_pri),
-		__req_field(max_cr_pri),
-#undef __req_field
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_RDD_TH), &req,
-				 sizeof(req), true);
-}
-
-int mt7915_mcu_set_radar_th(struct mt7915_dev *dev, int index,
-			    const struct mt7915_dfs_pattern *pattern)
-{
-	struct {
-		__le32 tag;
-		__le16 radar_type;
-
-		u8 enb;
-		u8 stgr;
-		u8 min_crpn;
-		u8 max_crpn;
-		u8 min_crpr;
-		u8 min_pw;
-		__le32 min_pri;
-		__le32 max_pri;
-		u8 max_pw;
-		u8 min_crbn;
-		u8 max_crbn;
-		u8 min_stgpn;
-		u8 max_stgpn;
-		u8 min_stgpr;
-		u8 rsv[2];
-		__le32 min_stgpr_diff;
-	} __packed req = {
-		.tag = cpu_to_le32(0x2),
-		.radar_type = cpu_to_le16(index),
-
-#define __req_field_u8(field) .field = pattern->field
-#define __req_field_u32(field) .field = cpu_to_le32(pattern->field)
-		__req_field_u8(enb),
-		__req_field_u8(stgr),
-		__req_field_u8(min_crpn),
-		__req_field_u8(max_crpn),
-		__req_field_u8(min_crpr),
-		__req_field_u8(min_pw),
-		__req_field_u32(min_pri),
-		__req_field_u32(max_pri),
-		__req_field_u8(max_pw),
-		__req_field_u8(min_crbn),
-		__req_field_u8(max_crbn),
-		__req_field_u8(min_stgpn),
-		__req_field_u8(max_stgpn),
-		__req_field_u8(min_stgpr),
-		__req_field_u32(min_stgpr_diff),
-#undef __req_field_u8
-#undef __req_field_u32
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_RDD_TH), &req,
-				 sizeof(req), true);
-}
-
-static int
-mt7915_mcu_background_chain_ctrl(struct mt7915_phy *phy,
-				 struct cfg80211_chan_def *chandef,
-				 int cmd)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct mt76_phy *mphy = phy->mt76;
-	struct ieee80211_channel *chan = mphy->chandef.chan;
-	int freq = mphy->chandef.center_freq1;
-	struct mt7915_mcu_background_chain_ctrl req = {
-		.monitor_scan_type = 2, /* simple rx */
-	};
-
-	if (!chandef && cmd != CH_SWITCH_BACKGROUND_SCAN_STOP)
-		return -EINVAL;
-
-	if (!cfg80211_chandef_valid(&mphy->chandef))
-		return -EINVAL;
-
-	switch (cmd) {
-	case CH_SWITCH_BACKGROUND_SCAN_START: {
-		req.chan = chan->hw_value;
-		req.central_chan = ieee80211_frequency_to_channel(freq);
-		req.bw = mt76_connac_chan_bw(&mphy->chandef);
-		req.monitor_chan = chandef->chan->hw_value;
-		req.monitor_central_chan =
-			ieee80211_frequency_to_channel(chandef->center_freq1);
-		req.monitor_bw = mt76_connac_chan_bw(chandef);
-		req.band_idx = phy != &dev->phy;
-		req.scan_mode = 1;
-		break;
-	}
-	case CH_SWITCH_BACKGROUND_SCAN_RUNNING:
-		req.monitor_chan = chandef->chan->hw_value;
-		req.monitor_central_chan =
-			ieee80211_frequency_to_channel(chandef->center_freq1);
-		req.band_idx = phy != &dev->phy;
-		req.scan_mode = 2;
-		break;
-	case CH_SWITCH_BACKGROUND_SCAN_STOP:
-		req.chan = chan->hw_value;
-		req.central_chan = ieee80211_frequency_to_channel(freq);
-		req.bw = mt76_connac_chan_bw(&mphy->chandef);
-		req.tx_stream = hweight8(mphy->antenna_mask);
-		req.rx_stream = mphy->antenna_mask;
-		break;
-	default:
-		return -EINVAL;
-	}
-	req.band = chandef ? chandef->chan->band == NL80211_BAND_5GHZ : 1;
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(OFFCH_SCAN_CTRL),
-				 &req, sizeof(req), false);
-}
-
-int mt7915_mcu_rdd_background_enable(struct mt7915_phy *phy,
-				     struct cfg80211_chan_def *chandef)
-{
-	struct mt7915_dev *dev = phy->dev;
-	int err, region;
-
-	if (!chandef) { /* disable offchain */
-		err = mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_STOP, MT_RX_SEL2,
-					      0, 0);
-		if (err)
-			return err;
-
-		return mt7915_mcu_background_chain_ctrl(phy, NULL,
-				CH_SWITCH_BACKGROUND_SCAN_STOP);
-	}
-
-	err = mt7915_mcu_background_chain_ctrl(phy, chandef,
-					       CH_SWITCH_BACKGROUND_SCAN_START);
-	if (err)
-		return err;
-
-	switch (dev->mt76.region) {
-	case NL80211_DFS_ETSI:
-		region = 0;
-		break;
-	case NL80211_DFS_JP:
-		region = 2;
-		break;
-	case NL80211_DFS_FCC:
-	default:
-		region = 1;
-		break;
-	}
-
-	return mt76_connac_mcu_rdd_cmd(&dev->mt76, RDD_START, MT_RX_SEL2,
-				       0, region);
-}
-
-int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd)
-{
-	static const u8 ch_band[] = {
-		[NL80211_BAND_2GHZ] = 0,
-		[NL80211_BAND_5GHZ] = 1,
-		[NL80211_BAND_6GHZ] = 2,
-	};
-	struct mt7915_dev *dev = phy->dev;
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	int freq1 = chandef->center_freq1;
-	struct {
-		u8 control_ch;
-		u8 center_ch;
-		u8 bw;
-		u8 tx_streams_num;
-		u8 rx_streams;	/* mask or num */
-		u8 switch_reason;
-		u8 band_idx;
-		u8 center_ch2;	/* for 80+80 only */
-		__le16 cac_case;
-		u8 channel_band;
-		u8 rsv0;
-		__le32 outband_freq;
-		u8 txpower_drop;
-		u8 ap_bw;
-		u8 ap_center_ch;
-		u8 rsv1[57];
-	} __packed req = {
-		.control_ch = chandef->chan->hw_value,
-		.center_ch = ieee80211_frequency_to_channel(freq1),
-		.bw = mt76_connac_chan_bw(chandef),
-		.tx_streams_num = hweight8(phy->mt76->antenna_mask),
-		.rx_streams = phy->mt76->antenna_mask,
-		.band_idx = phy->band_idx,
-		.channel_band = ch_band[chandef->chan->band],
-	};
-
-#ifdef CONFIG_NL80211_TESTMODE
-	if (phy->mt76->test.tx_antenna_mask &&
-	    mt76_testmode_enabled(phy->mt76)) {
-		req.tx_streams_num = fls(phy->mt76->test.tx_antenna_mask);
-		req.rx_streams = phy->mt76->test.tx_antenna_mask;
-	}
-#endif
-
-	if (mt76_connac_spe_idx(phy->mt76->antenna_mask))
-		req.tx_streams_num = fls(phy->mt76->antenna_mask);
-
-	if (cmd == MCU_EXT_CMD(SET_RX_PATH) ||
-	    dev->mt76.hw->conf.flags & IEEE80211_CONF_MONITOR)
-		req.switch_reason = CH_SWITCH_NORMAL;
-	else if (phy->mt76->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)
-		req.switch_reason = CH_SWITCH_SCAN_BYPASS_DPD;
-	else if (!cfg80211_reg_can_beacon(phy->mt76->hw->wiphy, chandef,
-					  NL80211_IFTYPE_AP))
-		req.switch_reason = CH_SWITCH_DFS;
-	else
-		req.switch_reason = CH_SWITCH_NORMAL;
-
-	if (cmd == MCU_EXT_CMD(CHANNEL_SWITCH))
-		req.rx_streams = hweight8(req.rx_streams);
-
-	if (chandef->width == NL80211_CHAN_WIDTH_80P80) {
-		int freq2 = chandef->center_freq2;
-
-		req.center_ch2 = ieee80211_frequency_to_channel(freq2);
-	}
-
-	return mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), true);
-}
-
-static int mt7915_mcu_set_eeprom_flash(struct mt7915_dev *dev)
-{
-#define MAX_PAGE_IDX_MASK	GENMASK(7, 5)
-#define PAGE_IDX_MASK		GENMASK(4, 2)
-#define PER_PAGE_SIZE		0x400
-	struct mt7915_mcu_eeprom req = { .buffer_mode = EE_MODE_BUFFER };
-	u16 eeprom_size = mt7915_eeprom_size(dev);
-	u8 total = DIV_ROUND_UP(eeprom_size, PER_PAGE_SIZE);
-	u8 *eep = (u8 *)dev->mt76.eeprom.data;
-	int eep_len;
-	int i;
-
-	for (i = 0; i < total; i++, eep += eep_len) {
-		struct sk_buff *skb;
-		int ret;
-
-		if (i == total - 1 && !!(eeprom_size % PER_PAGE_SIZE))
-			eep_len = eeprom_size % PER_PAGE_SIZE;
-		else
-			eep_len = PER_PAGE_SIZE;
-
-		skb = mt76_mcu_msg_alloc(&dev->mt76, NULL,
-					 sizeof(req) + eep_len);
-		if (!skb)
-			return -ENOMEM;
-
-		req.format = FIELD_PREP(MAX_PAGE_IDX_MASK, total - 1) |
-			     FIELD_PREP(PAGE_IDX_MASK, i) | EE_FORMAT_WHOLE;
-		req.len = cpu_to_le16(eep_len);
-
-		skb_put_data(skb, &req, sizeof(req));
-		skb_put_data(skb, eep, eep_len);
-
-		ret = mt76_mcu_skb_send_msg(&dev->mt76, skb,
-					    MCU_EXT_CMD(EFUSE_BUFFER_MODE), true);
-		if (ret)
-			return ret;
-	}
-
-	return 0;
-}
-
-int mt7915_mcu_set_eeprom(struct mt7915_dev *dev)
-{
-	struct mt7915_mcu_eeprom req = {
-		.buffer_mode = EE_MODE_EFUSE,
-		.format = EE_FORMAT_WHOLE,
-	};
-
-	if (dev->flash_mode)
-		return mt7915_mcu_set_eeprom_flash(dev);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(EFUSE_BUFFER_MODE),
-				 &req, sizeof(req), true);
-}
-
-int mt7915_mcu_get_eeprom(struct mt7915_dev *dev, u32 offset)
-{
-	struct mt7915_mcu_eeprom_info req = {
-		.addr = cpu_to_le32(round_down(offset,
-				    MT7915_EEPROM_BLOCK_SIZE)),
-	};
-	struct mt7915_mcu_eeprom_info *res;
-	struct sk_buff *skb;
-	int ret;
-	u8 *buf;
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_QUERY(EFUSE_ACCESS), &req,
-				sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	res = (struct mt7915_mcu_eeprom_info *)skb->data;
-	buf = dev->mt76.eeprom.data + le32_to_cpu(res->addr);
-	memcpy(buf, res->data, MT7915_EEPROM_BLOCK_SIZE);
-	dev_kfree_skb(skb);
-
-	return 0;
-}
-
-int mt7915_mcu_get_eeprom_free_block(struct mt7915_dev *dev, u8 *block_num)
-{
-	struct {
-		u8 _rsv;
-		u8 version;
-		u8 die_idx;
-		u8 _rsv2;
-	} __packed req = {
-		.version = 1,
-	};
-	struct sk_buff *skb;
-	int ret;
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_QUERY(EFUSE_FREE_BLOCK), &req,
-					sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	*block_num = *(u8 *)skb->data;
-	dev_kfree_skb(skb);
-
-	return 0;
-}
-
-static int mt7915_mcu_set_pre_cal(struct mt7915_dev *dev, u8 idx,
-				  u8 *data, u32 len, int cmd)
-{
-	struct {
-		u8 dir;
-		u8 valid;
-		__le16 bitmap;
-		s8 precal;
-		u8 action;
-		u8 band;
-		u8 idx;
-		u8 rsv[4];
-		__le32 len;
-	} req = {};
-	struct sk_buff *skb;
-
-	skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, sizeof(req) + len);
-	if (!skb)
-		return -ENOMEM;
-
-	req.idx = idx;
-	req.len = cpu_to_le32(len);
-	skb_put_data(skb, &req, sizeof(req));
-	skb_put_data(skb, data, len);
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb, cmd, false);
-}
-
-int mt7915_mcu_apply_group_cal(struct mt7915_dev *dev)
-{
-	u8 idx = 0, *cal = dev->cal, *eep = dev->mt76.eeprom.data;
-	u32 total = MT_EE_CAL_GROUP_SIZE;
-
-	if (1 || !(eep[MT_EE_DO_PRE_CAL] & MT_EE_WIFI_CAL_GROUP))
-		return 0;
-
-	/*
-	 * Items: Rx DCOC, RSSI DCOC, Tx TSSI DCOC, Tx LPFG
-	 * Tx FDIQ, Tx DCIQ, Rx FDIQ, Rx FIIQ, ADCDCOC
-	 */
-	while (total > 0) {
-		int ret, len;
-
-		len = min_t(u32, total, MT_EE_CAL_UNIT);
-
-		ret = mt7915_mcu_set_pre_cal(dev, idx, cal, len,
-					     MCU_EXT_CMD(GROUP_PRE_CAL_INFO));
-		if (ret)
-			return ret;
-
-		total -= len;
-		cal += len;
-		idx++;
-	}
-
-	return 0;
-}
-
-static int mt7915_find_freq_idx(const u16 *freqs, int n_freqs, u16 cur)
-{
-	int i;
-
-	for (i = 0; i < n_freqs; i++)
-		if (cur == freqs[i])
-			return i;
-
-	return -1;
-}
-
-static int mt7915_dpd_freq_idx(u16 freq, u8 bw)
-{
-	static const u16 freq_list[] = {
-		5180, 5200, 5220, 5240,
-		5260, 5280, 5300, 5320,
-		5500, 5520, 5540, 5560,
-		5580, 5600, 5620, 5640,
-		5660, 5680, 5700, 5745,
-		5765, 5785, 5805, 5825
-	};
-	int offset_2g = ARRAY_SIZE(freq_list);
-	int idx;
-
-	if (freq < 4000) {
-		if (freq < 2432)
-			return offset_2g;
-		if (freq < 2457)
-			return offset_2g + 1;
-
-		return offset_2g + 2;
-	}
-
-	if (bw == NL80211_CHAN_WIDTH_80P80 || bw == NL80211_CHAN_WIDTH_160)
-		return -1;
-
-	if (bw != NL80211_CHAN_WIDTH_20) {
-		idx = mt7915_find_freq_idx(freq_list, ARRAY_SIZE(freq_list),
-					   freq + 10);
-		if (idx >= 0)
-			return idx;
-
-		idx = mt7915_find_freq_idx(freq_list, ARRAY_SIZE(freq_list),
-					   freq - 10);
-		if (idx >= 0)
-			return idx;
-	}
-
-	return mt7915_find_freq_idx(freq_list, ARRAY_SIZE(freq_list), freq);
-}
-
-int mt7915_mcu_apply_tx_dpd(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	u16 total = 2, center_freq = chandef->center_freq1;
-	u8 *cal = dev->cal, *eep = dev->mt76.eeprom.data;
-	int idx;
-
-	if (1 || !(eep[MT_EE_DO_PRE_CAL] & MT_EE_WIFI_CAL_DPD))
-		return 0;
-
-	idx = mt7915_dpd_freq_idx(center_freq, chandef->width);
-	if (idx < 0)
-		return -EINVAL;
-
-	/* Items: Tx DPD, Tx Flatness */
-	idx = idx * 2;
-	cal += MT_EE_CAL_GROUP_SIZE;
-
-	while (total--) {
-		int ret;
-
-		cal += (idx * MT_EE_CAL_UNIT);
-		ret = mt7915_mcu_set_pre_cal(dev, idx, cal, MT_EE_CAL_UNIT,
-					     MCU_EXT_CMD(DPD_PRE_CAL_INFO));
-		if (ret)
-			return ret;
-
-		idx++;
-	}
-
-	return 0;
-}
-
-int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch)
-{
-	/* strict order */
-	static const u32 offs[] = {
-		MIB_BUSY_TIME, MIB_TX_TIME, MIB_RX_TIME, MIB_OBSS_AIRTIME,
-		MIB_BUSY_TIME_V2, MIB_TX_TIME_V2, MIB_RX_TIME_V2,
-		MIB_OBSS_AIRTIME_V2
-	};
-	struct mt76_channel_state *state = phy->mt76->chan_state;
-	struct mt76_channel_state *state_ts = &phy->state_ts;
-	struct mt7915_dev *dev = phy->dev;
-	struct mt7915_mcu_mib *res, req[4];
-	struct sk_buff *skb;
-	int i, ret, start = 0, ofs = 20;
-
-	if (!is_mt7915(&dev->mt76)) {
-		start = 4;
-		ofs = 0;
-	}
-
-	for (i = 0; i < 4; i++) {
-		req[i].band = cpu_to_le32(phy != &dev->phy);
-		req[i].offs = cpu_to_le32(offs[i + start]);
-	}
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_CMD(GET_MIB_INFO),
-					req, sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	res = (struct mt7915_mcu_mib *)(skb->data + ofs);
-
-	if (chan_switch)
-		goto out;
-
-#define __res_u64(s) le64_to_cpu(res[s].data)
-	state->cc_busy += __res_u64(0) - state_ts->cc_busy;
-	state->cc_tx += __res_u64(1) - state_ts->cc_tx;
-	state->cc_bss_rx += __res_u64(2) - state_ts->cc_bss_rx;
-	state->cc_rx += __res_u64(2) + __res_u64(3) - state_ts->cc_rx;
-
-out:
-	state_ts->cc_busy = __res_u64(0);
-	state_ts->cc_tx = __res_u64(1);
-	state_ts->cc_bss_rx = __res_u64(2);
-	state_ts->cc_rx = __res_u64(2) + __res_u64(3);
-#undef __res_u64
-
-	dev_kfree_skb(skb);
-
-	return 0;
-}
-
-int mt7915_mcu_get_temperature(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct {
-		u8 ctrl_id;
-		u8 action;
-		u8 dbdc_idx;
-		u8 rsv[5];
-	} req = {
-		.ctrl_id = THERMAL_SENSOR_TEMP_QUERY,
-		.dbdc_idx = phy != &dev->phy,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(THERMAL_CTRL), &req,
-				 sizeof(req), true);
-}
-
-int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct {
-		struct mt7915_mcu_thermal_ctrl ctrl;
-
-		__le32 trigger_temp;
-		__le32 restore_temp;
-		__le16 sustain_time;
-		u8 rsv[2];
-	} __packed req = {
-		.ctrl = {
-			.band_idx = phy->band_idx,
-		},
-	};
-	int level;
-
-	if (!state) {
-		req.ctrl.ctrl_id = THERMAL_PROTECT_DISABLE;
-		goto out;
-	}
-
-	/* set duty cycle and level */
-	for (level = 0; level < 4; level++) {
-		int ret;
-
-		req.ctrl.ctrl_id = THERMAL_PROTECT_DUTY_CONFIG;
-		req.ctrl.duty.duty_level = level;
-		req.ctrl.duty.duty_cycle = state;
-		state /= 2;
-
-		ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(THERMAL_PROT),
-					&req, sizeof(req.ctrl), false);
-		if (ret)
-			return ret;
-	}
-
-	/* set high-temperature trigger threshold */
-	req.ctrl.ctrl_id = THERMAL_PROTECT_ENABLE;
-	/* add a safety margin ~10 */
-	req.restore_temp = cpu_to_le32(phy->throttle_temp[0] - 10);
-	req.trigger_temp = cpu_to_le32(phy->throttle_temp[1]);
-	req.sustain_time = cpu_to_le16(10);
-
-out:
-	req.ctrl.type.protect_type = 1;
-	req.ctrl.type.trigger_type = 1;
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(THERMAL_PROT),
-				 &req, sizeof(req), false);
-}
-
-int mt7915_mcu_set_txpower_sku(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct mt76_phy *mphy = phy->mt76;
-	struct ieee80211_hw *hw = mphy->hw;
-	struct mt7915_sku_val {
-		u8 format_id;
-		u8 limit_type;
-		u8 dbdc_idx;
-		s8 val[MT7915_SKU_RATE_NUM];
-	} __packed req = {
-		.format_id = 4,
-		.dbdc_idx = phy != &dev->phy,
-	};
-	struct mt76_power_limits limits_array;
-	s8 *la = (s8 *)&limits_array;
-	int i, idx, n_chains = hweight8(mphy->antenna_mask);
-	int tx_power = hw->conf.power_level * 2;
-
-	tx_power = mt76_get_sar_power(mphy, mphy->chandef.chan,
-				      tx_power);
-	tx_power -= mt76_tx_power_nss_delta(n_chains);
-	tx_power = mt76_get_rate_power_limits(mphy, mphy->chandef.chan,
-					      &limits_array, tx_power);
-	mphy->txpower_cur = tx_power;
-
-	for (i = 0, idx = 0; i < ARRAY_SIZE(mt7915_sku_group_len); i++) {
-		u8 mcs_num, len = mt7915_sku_group_len[i];
-		int j;
-
-		if (i >= SKU_HT_BW20 && i <= SKU_VHT_BW160) {
-			mcs_num = 10;
-
-			if (i == SKU_HT_BW20 || i == SKU_VHT_BW20)
-				la = (s8 *)&limits_array + 12;
-		} else {
-			mcs_num = len;
-		}
-
-		for (j = 0; j < min_t(u8, mcs_num, len); j++)
-			req.val[idx + j] = la[j];
-
-		la += mcs_num;
-		idx += len;
-	}
-
-	return mt76_mcu_send_msg(&dev->mt76,
-				 MCU_EXT_CMD(TX_POWER_FEATURE_CTRL), &req,
-				 sizeof(req), true);
-}
-
-int mt7915_mcu_get_txpower_sku(struct mt7915_phy *phy, s8 *txpower, int len)
-{
-#define RATE_POWER_INFO	2
-	struct mt7915_dev *dev = phy->dev;
-	struct {
-		u8 format_id;
-		u8 category;
-		u8 band;
-		u8 _rsv;
-	} __packed req = {
-		.format_id = 7,
-		.category = RATE_POWER_INFO,
-		.band = phy != &dev->phy,
-	};
-	s8 res[MT7915_SKU_RATE_NUM][2];
-	struct sk_buff *skb;
-	int ret, i;
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76,
-					MCU_EXT_CMD(TX_POWER_FEATURE_CTRL),
-					&req, sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	memcpy(res, skb->data + 4, sizeof(res));
-	for (i = 0; i < len; i++)
-		txpower[i] = res[i][req.band];
-
-	dev_kfree_skb(skb);
-
-	return 0;
-}
-
-int mt7915_mcu_set_test_param(struct mt7915_dev *dev, u8 param, bool test_mode,
-			      u8 en)
-{
-	struct {
-		u8 test_mode_en;
-		u8 param_idx;
-		u8 _rsv[2];
-
-		u8 enable;
-		u8 _rsv2[3];
-
-		u8 pad[8];
-	} __packed req = {
-		.test_mode_en = test_mode,
-		.param_idx = param,
-		.enable = en,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(ATE_CTRL), &req,
-				 sizeof(req), false);
-}
-
-int mt7915_mcu_set_sku_en(struct mt7915_phy *phy, bool enable)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct mt7915_sku {
-		u8 format_id;
-		u8 sku_enable;
-		u8 dbdc_idx;
-		u8 rsv;
-	} __packed req = {
-		.format_id = 0,
-		.dbdc_idx = phy != &dev->phy,
-		.sku_enable = enable,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76,
-				 MCU_EXT_CMD(TX_POWER_FEATURE_CTRL), &req,
-				 sizeof(req), true);
-}
-
-int mt7915_mcu_set_ser(struct mt7915_dev *dev, u8 action, u8 set, u8 band)
-{
-	struct {
-		u8 action;
-		u8 set;
-		u8 band;
-		u8 rsv;
-	} req = {
-		.action = action,
-		.set = set,
-		.band = band,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_SER_TRIGGER),
-				 &req, sizeof(req), false);
-}
-
-int mt7915_mcu_set_txbf(struct mt7915_dev *dev, u8 action)
-{
-	struct {
-		u8 action;
-		union {
-			struct {
-				u8 snd_mode;
-				u8 sta_num;
-				u8 rsv;
-				u8 wlan_idx[4];
-				__le32 snd_period;	/* ms */
-			} __packed snd;
-			struct {
-				bool ebf;
-				bool ibf;
-				u8 rsv;
-			} __packed type;
-			struct {
-				u8 bf_num;
-				u8 bf_bitmap;
-				u8 bf_sel[8];
-				u8 rsv[5];
-			} __packed mod;
-		};
-	} __packed req = {
-		.action = action,
-	};
-
-#define MT_BF_PROCESSING	4
-	switch (action) {
-	case MT_BF_SOUNDING_ON:
-		req.snd.snd_mode = MT_BF_PROCESSING;
-		break;
-	case MT_BF_TYPE_UPDATE:
-		req.type.ebf = true;
-		req.type.ibf = dev->ibf;
-		break;
-	case MT_BF_MODULE_UPDATE:
-		req.mod.bf_num = 2;
-		req.mod.bf_bitmap = GENMASK(1, 0);
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(TXBF_ACTION), &req,
-				 sizeof(req), true);
-}
-
-int mt7915_mcu_add_obss_spr(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-			    bool enable)
-{
-#define MT_SPR_ENABLE		1
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct {
-		u8 action;
-		u8 arg_num;
-		u8 band_idx;
-		u8 status;
-		u8 drop_tx_idx;
-		u8 sta_idx;	/* 256 sta */
-		u8 rsv[2];
-		__le32 val;
-	} __packed req = {
-		.action = MT_SPR_ENABLE,
-		.arg_num = 1,
-		.band_idx = mvif->mt76.band_idx,
-		.val = cpu_to_le32(enable),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_SPR), &req,
-				 sizeof(req), true);
-}
-
-int mt7915_mcu_get_rx_rate(struct mt7915_phy *phy, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta, struct rate_info *rate)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
-	struct mt7915_dev *dev = phy->dev;
-	struct mt76_phy *mphy = phy->mt76;
-	struct {
-		u8 category;
-		u8 band;
-		__le16 wcid;
-	} __packed req = {
-		.category = MCU_PHY_STATE_CONTENTION_RX_RATE,
-		.band = mvif->mt76.band_idx,
-		.wcid = cpu_to_le16(msta->wcid.idx),
-	};
-	struct ieee80211_supported_band *sband;
-	struct mt7915_mcu_phy_rx_info *res;
-	struct sk_buff *skb;
-	int ret;
-	bool cck = false;
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_CMD(PHY_STAT_INFO),
-					&req, sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	res = (struct mt7915_mcu_phy_rx_info *)skb->data;
-
-	rate->mcs = res->rate;
-	rate->nss = res->nsts + 1;
-
-	switch (res->mode) {
-	case MT_PHY_TYPE_CCK:
-		cck = true;
-		fallthrough;
-	case MT_PHY_TYPE_OFDM:
-		if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
-			sband = &mphy->sband_5g.sband;
-		else if (mphy->chandef.chan->band == NL80211_BAND_6GHZ)
-			sband = &mphy->sband_6g.sband;
-		else
-			sband = &mphy->sband_2g.sband;
-
-		rate->mcs = mt76_get_rate(&dev->mt76, sband, rate->mcs, cck);
-		rate->legacy = sband->bitrates[rate->mcs].bitrate;
-		break;
-	case MT_PHY_TYPE_HT:
-	case MT_PHY_TYPE_HT_GF:
-		if (rate->mcs > 31) {
-			ret = -EINVAL;
-			goto out;
-		}
-
-		rate->flags = RATE_INFO_FLAGS_MCS;
-		if (res->gi)
-			rate->flags |= RATE_INFO_FLAGS_SHORT_GI;
-		break;
-	case MT_PHY_TYPE_VHT:
-		if (rate->mcs > 9) {
-			ret = -EINVAL;
-			goto out;
-		}
-
-		rate->flags = RATE_INFO_FLAGS_VHT_MCS;
-		if (res->gi)
-			rate->flags |= RATE_INFO_FLAGS_SHORT_GI;
-		break;
-	case MT_PHY_TYPE_HE_SU:
-	case MT_PHY_TYPE_HE_EXT_SU:
-	case MT_PHY_TYPE_HE_TB:
-	case MT_PHY_TYPE_HE_MU:
-		if (res->gi > NL80211_RATE_INFO_HE_GI_3_2 || rate->mcs > 11) {
-			ret = -EINVAL;
-			goto out;
-		}
-		rate->he_gi = res->gi;
-		rate->flags = RATE_INFO_FLAGS_HE_MCS;
-		break;
-	default:
-		ret = -EINVAL;
-		goto out;
-	}
-
-	switch (res->bw) {
-	case IEEE80211_STA_RX_BW_160:
-		rate->bw = RATE_INFO_BW_160;
-		break;
-	case IEEE80211_STA_RX_BW_80:
-		rate->bw = RATE_INFO_BW_80;
-		break;
-	case IEEE80211_STA_RX_BW_40:
-		rate->bw = RATE_INFO_BW_40;
-		break;
-	default:
-		rate->bw = RATE_INFO_BW_20;
-		break;
-	}
-
-out:
-	dev_kfree_skb(skb);
-
-	return ret;
-}
-
-int mt7915_mcu_update_bss_color(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-				struct cfg80211_he_bss_color *he_bss_color)
-{
-	int len = sizeof(struct sta_req_hdr) + sizeof(struct bss_info_color);
-	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
-	struct bss_info_color *bss_color;
-	struct sk_buff *skb;
-	struct tlv *tlv;
-
-	skb = __mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					      NULL, len);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	tlv = mt76_connac_mcu_add_tlv(skb, BSS_INFO_BSS_COLOR,
-				      sizeof(*bss_color));
-	bss_color = (struct bss_info_color *)tlv;
-	bss_color->disable = !he_bss_color->enabled;
-	bss_color->color = he_bss_color->color;
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_EXT_CMD(BSS_INFO_UPDATE), true);
-}
-
-#define TWT_AGRT_TRIGGER	BIT(0)
-#define TWT_AGRT_ANNOUNCE	BIT(1)
-#define TWT_AGRT_PROTECT	BIT(2)
-
-int mt7915_mcu_twt_agrt_update(struct mt7915_dev *dev,
-			       struct mt7915_vif *mvif,
-			       struct mt7915_twt_flow *flow,
-			       int cmd)
-{
-	struct {
-		u8 tbl_idx;
-		u8 cmd;
-		u8 own_mac_idx;
-		u8 flowid; /* 0xff for group id */
-		__le16 peer_id; /* specify the peer_id (msb=0)
-				 * or group_id (msb=1)
-				 */
-		u8 duration; /* 256 us */
-		u8 bss_idx;
-		__le64 start_tsf;
-		__le16 mantissa;
-		u8 exponent;
-		u8 is_ap;
-		u8 agrt_params;
-		u8 rsv[23];
-	} __packed req = {
-		.tbl_idx = flow->table_id,
-		.cmd = cmd,
-		.own_mac_idx = mvif->mt76.omac_idx,
-		.flowid = flow->id,
-		.peer_id = cpu_to_le16(flow->wcid),
-		.duration = flow->duration,
-		.bss_idx = mvif->mt76.idx,
-		.start_tsf = cpu_to_le64(flow->tsf),
-		.mantissa = flow->mantissa,
-		.exponent = flow->exp,
-		.is_ap = true,
-	};
-
-	if (flow->protection)
-		req.agrt_params |= TWT_AGRT_PROTECT;
-	if (!flow->flowtype)
-		req.agrt_params |= TWT_AGRT_ANNOUNCE;
-	if (flow->trigger)
-		req.agrt_params |= TWT_AGRT_TRIGGER;
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(TWT_AGRT_UPDATE),
-				 &req, sizeof(req), true);
-}
-
-int mt7915_mcu_rf_regval(struct mt7915_dev *dev, u32 regidx, u32 *val, bool set)
-{
-	struct {
-		__le32 idx;
-		__le32 ofs;
-		__le32 data;
-	} __packed req = {
-		.idx = cpu_to_le32(u32_get_bits(regidx, GENMASK(31, 24))),
-		.ofs = cpu_to_le32(u32_get_bits(regidx, GENMASK(23, 0))),
-		.data = set ? cpu_to_le32(*val) : 0,
-	};
-	struct sk_buff *skb;
-	int ret;
-
-	if (set)
-		return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RF_REG_ACCESS),
-					 &req, sizeof(req), false);
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_QUERY(RF_REG_ACCESS),
-					&req, sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	*val = le32_to_cpu(*(__le32 *)(skb->data + 8));
-	dev_kfree_skb(skb);
-
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mcu.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mcu.h
deleted file mode 100644
index 87cd1bf..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mcu.h
+++ /dev/null
@@ -1,478 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT7915_MCU_H
-#define __MT7915_MCU_H
-
-#include "../mt76_connac_mcu.h"
-
-enum {
-	MCU_ATE_SET_TRX = 0x1,
-	MCU_ATE_SET_FREQ_OFFSET = 0xa,
-	MCU_ATE_SET_SLOT_TIME = 0x13,
-	MCU_ATE_CLEAN_TXQUEUE = 0x1c,
-};
-
-struct mt7915_mcu_thermal_ctrl {
-	u8 ctrl_id;
-	u8 band_idx;
-	union {
-		struct {
-			u8 protect_type; /* 1: duty admit, 2: radio off */
-			u8 trigger_type; /* 0: low, 1: high */
-		} __packed type;
-		struct {
-			u8 duty_level;	/* level 0~3 */
-			u8 duty_cycle;
-		} __packed duty;
-	};
-} __packed;
-
-struct mt7915_mcu_thermal_notify {
-	struct mt76_connac2_mcu_rxd rxd;
-
-	struct mt7915_mcu_thermal_ctrl ctrl;
-	__le32 temperature;
-	u8 rsv[8];
-} __packed;
-
-struct mt7915_mcu_csa_notify {
-	struct mt76_connac2_mcu_rxd rxd;
-
-	u8 omac_idx;
-	u8 csa_count;
-	u8 band_idx;
-	u8 rsv;
-} __packed;
-
-struct mt7915_mcu_bcc_notify {
-	struct mt76_connac2_mcu_rxd rxd;
-
-	u8 band_idx;
-	u8 omac_idx;
-	u8 cca_count;
-	u8 rsv;
-} __packed;
-
-struct mt7915_mcu_rdd_report {
-	struct mt76_connac2_mcu_rxd rxd;
-
-	u8 band_idx;
-	u8 long_detected;
-	u8 constant_prf_detected;
-	u8 staggered_prf_detected;
-	u8 radar_type_idx;
-	u8 periodic_pulse_num;
-	u8 long_pulse_num;
-	u8 hw_pulse_num;
-
-	u8 out_lpn;
-	u8 out_spn;
-	u8 out_crpn;
-	u8 out_crpw;
-	u8 out_crbn;
-	u8 out_stgpn;
-	u8 out_stgpw;
-
-	u8 rsv;
-
-	__le32 out_pri_const;
-	__le32 out_pri_stg[3];
-
-	struct {
-		__le32 start;
-		__le16 pulse_width;
-		__le16 pulse_power;
-		u8 mdrdy_flag;
-		u8 rsv[3];
-	} long_pulse[32];
-
-	struct {
-		__le32 start;
-		__le16 pulse_width;
-		__le16 pulse_power;
-		u8 mdrdy_flag;
-		u8 rsv[3];
-	} periodic_pulse[32];
-
-	struct {
-		__le32 start;
-		__le16 pulse_width;
-		__le16 pulse_power;
-		u8 sc_pass;
-		u8 sw_reset;
-		u8 mdrdy_flag;
-		u8 tx_active;
-	} hw_pulse[32];
-} __packed;
-
-struct mt7915_mcu_background_chain_ctrl {
-	u8 chan;		/* primary channel */
-	u8 central_chan;	/* central channel */
-	u8 bw;
-	u8 tx_stream;
-	u8 rx_stream;
-
-	u8 monitor_chan;	/* monitor channel */
-	u8 monitor_central_chan;/* monitor central channel */
-	u8 monitor_bw;
-	u8 monitor_tx_stream;
-	u8 monitor_rx_stream;
-
-	u8 scan_mode;		/* 0: ScanStop
-				 * 1: ScanStart
-				 * 2: ScanRunning
-				 */
-	u8 band_idx;		/* DBDC */
-	u8 monitor_scan_type;
-	u8 band;		/* 0: 2.4GHz, 1: 5GHz */
-	u8 rsv[2];
-} __packed;
-
-struct mt7915_mcu_eeprom {
-	u8 buffer_mode;
-	u8 format;
-	__le16 len;
-} __packed;
-
-struct mt7915_mcu_eeprom_info {
-	__le32 addr;
-	__le32 valid;
-	u8 data[16];
-} __packed;
-
-struct mt7915_mcu_phy_rx_info {
-	u8 category;
-	u8 rate;
-	u8 mode;
-	u8 nsts;
-	u8 gi;
-	u8 coding;
-	u8 stbc;
-	u8 bw;
-};
-
-struct mt7915_mcu_mib {
-	__le32 band;
-	__le32 offs;
-	__le64 data;
-} __packed;
-
-enum mt7915_chan_mib_offs {
-	/* mt7915 */
-	MIB_BUSY_TIME = 14,
-	MIB_TX_TIME = 81,
-	MIB_RX_TIME,
-	MIB_OBSS_AIRTIME = 86,
-	/* mt7916 */
-	MIB_BUSY_TIME_V2 = 0,
-	MIB_TX_TIME_V2 = 6,
-	MIB_RX_TIME_V2 = 8,
-	MIB_OBSS_AIRTIME_V2 = 490
-};
-
-struct edca {
-	u8 queue;
-	u8 set;
-	u8 aifs;
-	u8 cw_min;
-	__le16 cw_max;
-	__le16 txop;
-};
-
-struct mt7915_mcu_tx {
-	u8 total;
-	u8 action;
-	u8 valid;
-	u8 mode;
-
-	struct edca edca[IEEE80211_NUM_ACS];
-} __packed;
-
-struct mt7915_mcu_muru_stats {
-	__le32 event_id;
-	struct {
-		__le32 cck_cnt;
-		__le32 ofdm_cnt;
-		__le32 htmix_cnt;
-		__le32 htgf_cnt;
-		__le32 vht_su_cnt;
-		__le32 vht_2mu_cnt;
-		__le32 vht_3mu_cnt;
-		__le32 vht_4mu_cnt;
-		__le32 he_su_cnt;
-		__le32 he_ext_su_cnt;
-		__le32 he_2ru_cnt;
-		__le32 he_2mu_cnt;
-		__le32 he_3ru_cnt;
-		__le32 he_3mu_cnt;
-		__le32 he_4ru_cnt;
-		__le32 he_4mu_cnt;
-		__le32 he_5to8ru_cnt;
-		__le32 he_9to16ru_cnt;
-		__le32 he_gtr16ru_cnt;
-	} dl;
-
-	struct {
-		__le32 hetrig_su_cnt;
-		__le32 hetrig_2ru_cnt;
-		__le32 hetrig_3ru_cnt;
-		__le32 hetrig_4ru_cnt;
-		__le32 hetrig_5to8ru_cnt;
-		__le32 hetrig_9to16ru_cnt;
-		__le32 hetrig_gtr16ru_cnt;
-		__le32 hetrig_2mu_cnt;
-		__le32 hetrig_3mu_cnt;
-		__le32 hetrig_4mu_cnt;
-	} ul;
-};
-
-#define WMM_AIFS_SET		BIT(0)
-#define WMM_CW_MIN_SET		BIT(1)
-#define WMM_CW_MAX_SET		BIT(2)
-#define WMM_TXOP_SET		BIT(3)
-#define WMM_PARAM_SET		GENMASK(3, 0)
-
-enum {
-	MCU_FW_LOG_WM,
-	MCU_FW_LOG_WA,
-	MCU_FW_LOG_TO_HOST,
-};
-
-enum {
-	MCU_TWT_AGRT_ADD,
-	MCU_TWT_AGRT_MODIFY,
-	MCU_TWT_AGRT_DELETE,
-	MCU_TWT_AGRT_TEARDOWN,
-	MCU_TWT_AGRT_GET_TSF,
-};
-
-enum {
-	MCU_WA_PARAM_CMD_QUERY,
-	MCU_WA_PARAM_CMD_SET,
-	MCU_WA_PARAM_CMD_CAPABILITY,
-	MCU_WA_PARAM_CMD_DEBUG,
-};
-
-enum {
-	MCU_WA_PARAM_PDMA_RX = 0x04,
-	MCU_WA_PARAM_CPU_UTIL = 0x0b,
-	MCU_WA_PARAM_RED = 0x0e,
-};
-
-enum mcu_mmps_mode {
-	MCU_MMPS_STATIC,
-	MCU_MMPS_DYNAMIC,
-	MCU_MMPS_RSV,
-	MCU_MMPS_DISABLE,
-};
-
-struct bss_info_bmc_rate {
-	__le16 tag;
-	__le16 len;
-	__le16 bc_trans;
-	__le16 mc_trans;
-	u8 short_preamble;
-	u8 rsv[7];
-} __packed;
-
-struct bss_info_ra {
-	__le16 tag;
-	__le16 len;
-	u8 op_mode;
-	u8 adhoc_en;
-	u8 short_preamble;
-	u8 tx_streams;
-	u8 rx_streams;
-	u8 algo;
-	u8 force_sgi;
-	u8 force_gf;
-	u8 ht_mode;
-	u8 has_20_sta;		/* Check if any sta support GF. */
-	u8 bss_width_trigger_events;
-	u8 vht_nss_cap;
-	u8 vht_bw_signal;	/* not use */
-	u8 vht_force_sgi;	/* not use */
-	u8 se_off;
-	u8 antenna_idx;
-	u8 train_up_rule;
-	u8 rsv[3];
-	unsigned short train_up_high_thres;
-	short train_up_rule_rssi;
-	unsigned short low_traffic_thres;
-	__le16 max_phyrate;
-	__le32 phy_cap;
-	__le32 interval;
-	__le32 fast_interval;
-} __packed;
-
-struct bss_info_hw_amsdu {
-	__le16 tag;
-	__le16 len;
-	__le32 cmp_bitmap_0;
-	__le32 cmp_bitmap_1;
-	__le16 trig_thres;
-	u8 enable;
-	u8 rsv;
-} __packed;
-
-struct bss_info_color {
-	__le16 tag;
-	__le16 len;
-	u8 disable;
-	u8 color;
-	u8 rsv[2];
-} __packed;
-
-struct bss_info_he {
-	__le16 tag;
-	__le16 len;
-	u8 he_pe_duration;
-	u8 vht_op_info_present;
-	__le16 he_rts_thres;
-	__le16 max_nss_mcs[CMD_HE_MCS_BW_NUM];
-	u8 rsv[6];
-} __packed;
-
-struct bss_info_bcn {
-	__le16 tag;
-	__le16 len;
-	u8 ver;
-	u8 enable;
-	__le16 sub_ntlv;
-} __packed __aligned(4);
-
-struct bss_info_bcn_cntdwn {
-	__le16 tag;
-	__le16 len;
-	u8 cnt;
-	u8 rsv[3];
-} __packed __aligned(4);
-
-struct bss_info_bcn_mbss {
-#define MAX_BEACON_NUM	32
-	__le16 tag;
-	__le16 len;
-	__le32 bitmap;
-	__le16 offset[MAX_BEACON_NUM];
-	u8 rsv[8];
-} __packed __aligned(4);
-
-struct bss_info_bcn_cont {
-	__le16 tag;
-	__le16 len;
-	__le16 tim_ofs;
-	__le16 csa_ofs;
-	__le16 bcc_ofs;
-	__le16 pkt_len;
-} __packed __aligned(4);
-
-struct bss_info_inband_discovery {
-	__le16 tag;
-	__le16 len;
-	u8 tx_type;
-	u8 tx_mode;
-	u8 tx_interval;
-	u8 enable;
-	__le16 rsv;
-	__le16 prob_rsp_len;
-} __packed __aligned(4);
-
-enum {
-	BSS_INFO_BCN_CSA,
-	BSS_INFO_BCN_BCC,
-	BSS_INFO_BCN_MBSSID,
-	BSS_INFO_BCN_CONTENT,
-	BSS_INFO_BCN_DISCOV,
-	BSS_INFO_BCN_MAX
-};
-
-enum {
-	RATE_PARAM_FIXED = 3,
-	RATE_PARAM_MMPS_UPDATE = 5,
-	RATE_PARAM_FIXED_HE_LTF = 7,
-	RATE_PARAM_FIXED_MCS,
-	RATE_PARAM_FIXED_GI = 11,
-	RATE_PARAM_AUTO = 20,
-	RATE_PARAM_SPE_UPDATE = 22,
-};
-
-#define RATE_CFG_MCS			GENMASK(3, 0)
-#define RATE_CFG_NSS			GENMASK(7, 4)
-#define RATE_CFG_GI			GENMASK(11, 8)
-#define RATE_CFG_BW			GENMASK(15, 12)
-#define RATE_CFG_STBC			GENMASK(19, 16)
-#define RATE_CFG_LDPC			GENMASK(23, 20)
-#define RATE_CFG_PHY_TYPE		GENMASK(27, 24)
-#define RATE_CFG_HE_LTF			GENMASK(31, 28)
-
-enum {
-	THERMAL_PROTECT_PARAMETER_CTRL,
-	THERMAL_PROTECT_BASIC_INFO,
-	THERMAL_PROTECT_ENABLE,
-	THERMAL_PROTECT_DISABLE,
-	THERMAL_PROTECT_DUTY_CONFIG,
-	THERMAL_PROTECT_MECH_INFO,
-	THERMAL_PROTECT_DUTY_INFO,
-	THERMAL_PROTECT_STATE_ACT,
-};
-
-enum {
-	MT_BF_SOUNDING_ON = 1,
-	MT_BF_TYPE_UPDATE = 20,
-	MT_BF_MODULE_UPDATE = 25
-};
-
-enum {
-	MURU_SET_ARB_OP_MODE = 14,
-	MURU_SET_PLATFORM_TYPE = 25,
-};
-
-enum {
-	MURU_PLATFORM_TYPE_PERF_LEVEL_1 = 1,
-	MURU_PLATFORM_TYPE_PERF_LEVEL_2,
-};
-
-/* tx cmd tx statistics */
-enum {
-	MURU_SET_TXC_TX_STATS_EN = 150,
-	MURU_GET_TXC_TX_STATS = 151,
-};
-
-enum {
-	SER_QUERY,
-	/* recovery */
-	SER_SET_RECOVER_L1,
-	SER_SET_RECOVER_L2,
-	SER_SET_RECOVER_L3_RX_ABORT,
-	SER_SET_RECOVER_L3_TX_ABORT,
-	SER_SET_RECOVER_L3_TX_DISABLE,
-	SER_SET_RECOVER_L3_BF,
-	/* action */
-	SER_ENABLE = 2,
-	SER_RECOVER
-};
-
-#define MT7915_MAX_BEACON_SIZE		512
-#define MT7915_MAX_INBAND_FRAME_SIZE	256
-#define MT7915_MAX_BSS_OFFLOAD_SIZE	(MT7915_MAX_BEACON_SIZE +	  \
-					 MT7915_MAX_INBAND_FRAME_SIZE +	  \
-					 MT7915_BEACON_UPDATE_SIZE)
-
-#define MT7915_BSS_UPDATE_MAX_SIZE	(sizeof(struct sta_req_hdr) +	\
-					 sizeof(struct bss_info_omac) +	\
-					 sizeof(struct bss_info_basic) +\
-					 sizeof(struct bss_info_rf_ch) +\
-					 sizeof(struct bss_info_ra) +	\
-					 sizeof(struct bss_info_hw_amsdu) +\
-					 sizeof(struct bss_info_he) +	\
-					 sizeof(struct bss_info_bmc_rate) +\
-					 sizeof(struct bss_info_ext_bss))
-
-#define MT7915_BEACON_UPDATE_SIZE	(sizeof(struct sta_req_hdr) +	\
-					 sizeof(struct bss_info_bcn_cntdwn) + \
-					 sizeof(struct bss_info_bcn_mbss) + \
-					 sizeof(struct bss_info_bcn_cont) + \
-					 sizeof(struct bss_info_inband_discovery))
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mmio.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mmio.c
deleted file mode 100644
index be1b8ea..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mmio.c
+++ /dev/null
@@ -1,863 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/pci.h>
-
-#include "mt7915.h"
-#include "mac.h"
-#include "../trace.h"
-
-static bool wed_enable;
-module_param(wed_enable, bool, 0644);
-
-static const u32 mt7915_reg[] = {
-	[INT_SOURCE_CSR]	= 0xd7010,
-	[INT_MASK_CSR]		= 0xd7014,
-	[INT1_SOURCE_CSR]	= 0xd7088,
-	[INT1_MASK_CSR]		= 0xd708c,
-	[INT_MCU_CMD_SOURCE]	= 0xd51f0,
-	[INT_MCU_CMD_EVENT]	= 0x3108,
-	[WFDMA0_ADDR]		= 0xd4000,
-	[WFDMA0_PCIE1_ADDR]	= 0xd8000,
-	[WFDMA_EXT_CSR_ADDR]	= 0xd7000,
-	[CBTOP1_PHY_END]	= 0x77ffffff,
-	[INFRA_MCU_ADDR_END]	= 0x7c3fffff,
-	[FW_EXCEPTION_ADDR]	= 0x219848,
-	[SWDEF_BASE_ADDR]	= 0x41f200,
-	[TXQ_WED_RING_BASE]	= 0xd7300,
-	[RXQ_WED_RING_BASE]	= 0xd7410,
-};
-
-static const u32 mt7916_reg[] = {
-	[INT_SOURCE_CSR]	= 0xd4200,
-	[INT_MASK_CSR]		= 0xd4204,
-	[INT1_SOURCE_CSR]	= 0xd8200,
-	[INT1_MASK_CSR]		= 0xd8204,
-	[INT_MCU_CMD_SOURCE]	= 0xd41f0,
-	[INT_MCU_CMD_EVENT]	= 0x2108,
-	[WFDMA0_ADDR]		= 0xd4000,
-	[WFDMA0_PCIE1_ADDR]	= 0xd8000,
-	[WFDMA_EXT_CSR_ADDR]	= 0xd7000,
-	[CBTOP1_PHY_END]	= 0x7fffffff,
-	[INFRA_MCU_ADDR_END]	= 0x7c085fff,
-	[FW_EXCEPTION_ADDR]	= 0x022050bc,
-	[SWDEF_BASE_ADDR]	= 0x411400,
-	[TXQ_WED_RING_BASE]	= 0xd7300,
-	[RXQ_WED_RING_BASE]	= 0xd7410,
-};
-
-static const u32 mt7986_reg[] = {
-	[INT_SOURCE_CSR]	= 0x24200,
-	[INT_MASK_CSR]		= 0x24204,
-	[INT1_SOURCE_CSR]	= 0x28200,
-	[INT1_MASK_CSR]		= 0x28204,
-	[INT_MCU_CMD_SOURCE]	= 0x241f0,
-	[INT_MCU_CMD_EVENT]	= 0x54000108,
-	[WFDMA0_ADDR]		= 0x24000,
-	[WFDMA0_PCIE1_ADDR]	= 0x28000,
-	[WFDMA_EXT_CSR_ADDR]	= 0x27000,
-	[CBTOP1_PHY_END]	= 0x7fffffff,
-	[INFRA_MCU_ADDR_END]	= 0x7c085fff,
-	[FW_EXCEPTION_ADDR]	= 0x02204ffc,
-	[SWDEF_BASE_ADDR]	= 0x411400,
-	[TXQ_WED_RING_BASE]	= 0x24420,
-	[RXQ_WED_RING_BASE]	= 0x24520,
-};
-
-static const u32 mt7915_offs[] = {
-	[TMAC_CDTR]		= 0x090,
-	[TMAC_ODTR]		= 0x094,
-	[TMAC_ATCR]		= 0x098,
-	[TMAC_TRCR0]		= 0x09c,
-	[TMAC_ICR0]		= 0x0a4,
-	[TMAC_ICR1]		= 0x0b4,
-	[TMAC_CTCR0]		= 0x0f4,
-	[TMAC_TFCR0]		= 0x1e0,
-	[MDP_BNRCFR0]		= 0x070,
-	[MDP_BNRCFR1]		= 0x074,
-	[ARB_DRNGR0]		= 0x194,
-	[ARB_SCR]		= 0x080,
-	[RMAC_MIB_AIRTIME14]	= 0x3b8,
-	[AGG_AWSCR0]		= 0x05c,
-	[AGG_PCR0]		= 0x06c,
-	[AGG_ACR0]		= 0x084,
-	[AGG_ACR4]		= 0x08c,
-	[AGG_MRCR]		= 0x098,
-	[AGG_ATCR1]		= 0x0f0,
-	[AGG_ATCR3]		= 0x0f4,
-	[LPON_UTTR0]		= 0x080,
-	[LPON_UTTR1]		= 0x084,
-	[LPON_FRCR]		= 0x314,
-	[MIB_SDR3]		= 0x014,
-	[MIB_SDR4]		= 0x018,
-	[MIB_SDR5]		= 0x01c,
-	[MIB_SDR7]		= 0x024,
-	[MIB_SDR8]		= 0x028,
-	[MIB_SDR9]		= 0x02c,
-	[MIB_SDR10]		= 0x030,
-	[MIB_SDR11]		= 0x034,
-	[MIB_SDR12]		= 0x038,
-	[MIB_SDR13]		= 0x03c,
-	[MIB_SDR14]		= 0x040,
-	[MIB_SDR15]		= 0x044,
-	[MIB_SDR16]		= 0x048,
-	[MIB_SDR17]		= 0x04c,
-	[MIB_SDR18]		= 0x050,
-	[MIB_SDR19]		= 0x054,
-	[MIB_SDR20]		= 0x058,
-	[MIB_SDR21]		= 0x05c,
-	[MIB_SDR22]		= 0x060,
-	[MIB_SDR23]		= 0x064,
-	[MIB_SDR24]		= 0x068,
-	[MIB_SDR25]		= 0x06c,
-	[MIB_SDR27]		= 0x074,
-	[MIB_SDR28]		= 0x078,
-	[MIB_SDR29]		= 0x07c,
-	[MIB_SDRVEC]		= 0x080,
-	[MIB_SDR31]		= 0x084,
-	[MIB_SDR32]		= 0x088,
-	[MIB_SDRMUBF]		= 0x090,
-	[MIB_DR8]		= 0x0c0,
-	[MIB_DR9]		= 0x0c4,
-	[MIB_DR11]		= 0x0cc,
-	[MIB_MB_SDR0]		= 0x100,
-	[MIB_MB_SDR1]		= 0x104,
-	[TX_AGG_CNT]		= 0x0a8,
-	[TX_AGG_CNT2]		= 0x164,
-	[MIB_ARNG]		= 0x4b8,
-	[WTBLON_TOP_WDUCR]	= 0x0,
-	[WTBL_UPDATE]		= 0x030,
-	[PLE_FL_Q_EMPTY]	= 0x0b0,
-	[PLE_FL_Q_CTRL]		= 0x1b0,
-	[PLE_AC_QEMPTY]		= 0x500,
-	[PLE_FREEPG_CNT]	= 0x100,
-	[PLE_FREEPG_HEAD_TAIL]	= 0x104,
-	[PLE_PG_HIF_GROUP]	= 0x110,
-	[PLE_HIF_PG_INFO]	= 0x114,
-	[AC_OFFSET]		= 0x040,
-	[ETBF_PAR_RPT0]		= 0x068,
-};
-
-static const u32 mt7916_offs[] = {
-	[TMAC_CDTR]		= 0x0c8,
-	[TMAC_ODTR]		= 0x0cc,
-	[TMAC_ATCR]		= 0x00c,
-	[TMAC_TRCR0]		= 0x010,
-	[TMAC_ICR0]		= 0x014,
-	[TMAC_ICR1]		= 0x018,
-	[TMAC_CTCR0]		= 0x114,
-	[TMAC_TFCR0]		= 0x0e4,
-	[MDP_BNRCFR0]		= 0x090,
-	[MDP_BNRCFR1]		= 0x094,
-	[ARB_DRNGR0]		= 0x1e0,
-	[ARB_SCR]		= 0x000,
-	[RMAC_MIB_AIRTIME14]	= 0x0398,
-	[AGG_AWSCR0]		= 0x030,
-	[AGG_PCR0]		= 0x040,
-	[AGG_ACR0]		= 0x054,
-	[AGG_ACR4]		= 0x05c,
-	[AGG_MRCR]		= 0x068,
-	[AGG_ATCR1]		= 0x1a8,
-	[AGG_ATCR3]		= 0x080,
-	[LPON_UTTR0]		= 0x360,
-	[LPON_UTTR1]		= 0x364,
-	[LPON_FRCR]		= 0x37c,
-	[MIB_SDR3]		= 0x698,
-	[MIB_SDR4]		= 0x788,
-	[MIB_SDR5]		= 0x780,
-	[MIB_SDR7]		= 0x5a8,
-	[MIB_SDR8]		= 0x78c,
-	[MIB_SDR9]		= 0x024,
-	[MIB_SDR10]		= 0x76c,
-	[MIB_SDR11]		= 0x790,
-	[MIB_SDR12]		= 0x558,
-	[MIB_SDR13]		= 0x560,
-	[MIB_SDR14]		= 0x564,
-	[MIB_SDR15]		= 0x568,
-	[MIB_SDR16]		= 0x7fc,
-	[MIB_SDR17]		= 0x800,
-	[MIB_SDR18]		= 0x030,
-	[MIB_SDR19]		= 0x5ac,
-	[MIB_SDR20]		= 0x5b0,
-	[MIB_SDR21]		= 0x5b4,
-	[MIB_SDR22]		= 0x770,
-	[MIB_SDR23]		= 0x774,
-	[MIB_SDR24]		= 0x778,
-	[MIB_SDR25]		= 0x77c,
-	[MIB_SDR27]		= 0x080,
-	[MIB_SDR28]		= 0x084,
-	[MIB_SDR29]		= 0x650,
-	[MIB_SDRVEC]		= 0x5a8,
-	[MIB_SDR31]		= 0x55c,
-	[MIB_SDR32]		= 0x7a8,
-	[MIB_SDRMUBF]		= 0x7ac,
-	[MIB_DR8]		= 0x56c,
-	[MIB_DR9]		= 0x570,
-	[MIB_DR11]		= 0x574,
-	[MIB_MB_SDR0]		= 0x688,
-	[MIB_MB_SDR1]		= 0x690,
-	[TX_AGG_CNT]		= 0x7dc,
-	[TX_AGG_CNT2]		= 0x7ec,
-	[MIB_ARNG]		= 0x0b0,
-	[WTBLON_TOP_WDUCR]	= 0x200,
-	[WTBL_UPDATE]		= 0x230,
-	[PLE_FL_Q_EMPTY]	= 0x360,
-	[PLE_FL_Q_CTRL]		= 0x3e0,
-	[PLE_AC_QEMPTY]		= 0x600,
-	[PLE_FREEPG_CNT]	= 0x380,
-	[PLE_FREEPG_HEAD_TAIL]	= 0x384,
-	[PLE_PG_HIF_GROUP]	= 0x00c,
-	[PLE_HIF_PG_INFO]	= 0x388,
-	[AC_OFFSET]		= 0x080,
-	[ETBF_PAR_RPT0]		= 0x100,
-};
-
-static const struct mt76_connac_reg_map mt7915_reg_map[] = {
-	{ 0x00400000, 0x80000, 0x10000 }, /* WF_MCU_SYSRAM */
-	{ 0x00410000, 0x90000, 0x10000 }, /* WF_MCU_SYSRAM (configure regs) */
-	{ 0x40000000, 0x70000, 0x10000 }, /* WF_UMAC_SYSRAM */
-	{ 0x54000000, 0x02000, 0x01000 }, /* WFDMA PCIE0 MCU DMA0 */
-	{ 0x55000000, 0x03000, 0x01000 }, /* WFDMA PCIE0 MCU DMA1 */
-	{ 0x58000000, 0x06000, 0x01000 }, /* WFDMA PCIE1 MCU DMA0 (MEM_DMA) */
-	{ 0x59000000, 0x07000, 0x01000 }, /* WFDMA PCIE1 MCU DMA1 */
-	{ 0x7c000000, 0xf0000, 0x10000 }, /* CONN_INFRA */
-	{ 0x7c020000, 0xd0000, 0x10000 }, /* CONN_INFRA, WFDMA */
-	{ 0x80020000, 0xb0000, 0x10000 }, /* WF_TOP_MISC_OFF */
-	{ 0x81020000, 0xc0000, 0x10000 }, /* WF_TOP_MISC_ON */
-	{ 0x820c0000, 0x08000, 0x04000 }, /* WF_UMAC_TOP (PLE) */
-	{ 0x820c8000, 0x0c000, 0x02000 }, /* WF_UMAC_TOP (PSE) */
-	{ 0x820cc000, 0x0e000, 0x02000 }, /* WF_UMAC_TOP (PP) */
-	{ 0x820ce000, 0x21c00, 0x00200 }, /* WF_LMAC_TOP (WF_SEC) */
-	{ 0x820cf000, 0x22000, 0x01000 }, /* WF_LMAC_TOP (WF_PF) */
-	{ 0x820d0000, 0x30000, 0x10000 }, /* WF_LMAC_TOP (WF_WTBLON) */
-	{ 0x820e0000, 0x20000, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_CFG) */
-	{ 0x820e1000, 0x20400, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_TRB) */
-	{ 0x820e2000, 0x20800, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_AGG) */
-	{ 0x820e3000, 0x20c00, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_ARB) */
-	{ 0x820e4000, 0x21000, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_TMAC) */
-	{ 0x820e5000, 0x21400, 0x00800 }, /* WF_LMAC_TOP BN0 (WF_RMAC) */
-	{ 0x820e7000, 0x21e00, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_DMA) */
-	{ 0x820e9000, 0x23400, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_WTBLOFF) */
-	{ 0x820ea000, 0x24000, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_ETBF) */
-	{ 0x820eb000, 0x24200, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_LPON) */
-	{ 0x820ec000, 0x24600, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_INT) */
-	{ 0x820ed000, 0x24800, 0x00800 }, /* WF_LMAC_TOP BN0 (WF_MIB) */
-	{ 0x820f0000, 0xa0000, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_CFG) */
-	{ 0x820f1000, 0xa0600, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_TRB) */
-	{ 0x820f2000, 0xa0800, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_AGG) */
-	{ 0x820f3000, 0xa0c00, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_ARB) */
-	{ 0x820f4000, 0xa1000, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_TMAC) */
-	{ 0x820f5000, 0xa1400, 0x00800 }, /* WF_LMAC_TOP BN1 (WF_RMAC) */
-	{ 0x820f7000, 0xa1e00, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_DMA) */
-	{ 0x820f9000, 0xa3400, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_WTBLOFF) */
-	{ 0x820fa000, 0xa4000, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_ETBF) */
-	{ 0x820fb000, 0xa4200, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_LPON) */
-	{ 0x820fc000, 0xa4600, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_INT) */
-	{ 0x820fd000, 0xa4800, 0x00800 }, /* WF_LMAC_TOP BN1 (WF_MIB) */
-	{ 0x0, 0x0, 0x0 }, /* imply end of search */
-};
-
-static const struct mt76_connac_reg_map mt7916_reg_map[] = {
-	{ 0x54000000, 0x02000, 0x01000 }, /* WFDMA_0 (PCIE0 MCU DMA0) */
-	{ 0x55000000, 0x03000, 0x01000 }, /* WFDMA_1 (PCIE0 MCU DMA1) */
-	{ 0x56000000, 0x04000, 0x01000 }, /* WFDMA_2 (Reserved) */
-	{ 0x57000000, 0x05000, 0x01000 }, /* WFDMA_3 (MCU wrap CR) */
-	{ 0x58000000, 0x06000, 0x01000 }, /* WFDMA_4 (PCIE1 MCU DMA0) */
-	{ 0x59000000, 0x07000, 0x01000 }, /* WFDMA_5 (PCIE1 MCU DMA1) */
-	{ 0x820c0000, 0x08000, 0x04000 }, /* WF_UMAC_TOP (PLE) */
-	{ 0x820c8000, 0x0c000, 0x02000 }, /* WF_UMAC_TOP (PSE) */
-	{ 0x820cc000, 0x0e000, 0x02000 }, /* WF_UMAC_TOP (PP) */
-	{ 0x820e0000, 0x20000, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_CFG) */
-	{ 0x820e1000, 0x20400, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_TRB) */
-	{ 0x820e2000, 0x20800, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_AGG) */
-	{ 0x820e3000, 0x20c00, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_ARB) */
-	{ 0x820e4000, 0x21000, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_TMAC) */
-	{ 0x820e5000, 0x21400, 0x00800 }, /* WF_LMAC_TOP BN0 (WF_RMAC) */
-	{ 0x820ce000, 0x21c00, 0x00200 }, /* WF_LMAC_TOP (WF_SEC) */
-	{ 0x820e7000, 0x21e00, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_DMA) */
-	{ 0x820cf000, 0x22000, 0x01000 }, /* WF_LMAC_TOP (WF_PF) */
-	{ 0x820e9000, 0x23400, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_WTBLOFF) */
-	{ 0x820ea000, 0x24000, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_ETBF) */
-	{ 0x820eb000, 0x24200, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_LPON) */
-	{ 0x820ec000, 0x24600, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_INT) */
-	{ 0x820ed000, 0x24800, 0x00800 }, /* WF_LMAC_TOP BN0 (WF_MIB) */
-	{ 0x820ca000, 0x26000, 0x02000 }, /* WF_LMAC_TOP BN0 (WF_MUCOP) */
-	{ 0x820d0000, 0x30000, 0x10000 }, /* WF_LMAC_TOP (WF_WTBLON) */
-	{ 0x00400000, 0x80000, 0x10000 }, /* WF_MCU_SYSRAM */
-	{ 0x00410000, 0x90000, 0x10000 }, /* WF_MCU_SYSRAM (configure cr) */
-	{ 0x820f0000, 0xa0000, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_CFG) */
-	{ 0x820f1000, 0xa0600, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_TRB) */
-	{ 0x820f2000, 0xa0800, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_AGG) */
-	{ 0x820f3000, 0xa0c00, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_ARB) */
-	{ 0x820f4000, 0xa1000, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_TMAC) */
-	{ 0x820f5000, 0xa1400, 0x00800 }, /* WF_LMAC_TOP BN1 (WF_RMAC) */
-	{ 0x820f7000, 0xa1e00, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_DMA) */
-	{ 0x820f9000, 0xa3400, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_WTBLOFF) */
-	{ 0x820fa000, 0xa4000, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_ETBF) */
-	{ 0x820fb000, 0xa4200, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_LPON) */
-	{ 0x820fc000, 0xa4600, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_INT) */
-	{ 0x820fd000, 0xa4800, 0x00800 }, /* WF_LMAC_TOP BN1 (WF_MIB) */
-	{ 0x820c4000, 0xa8000, 0x01000 }, /* WF_LMAC_TOP (WF_UWTBL ) */
-	{ 0x820b0000, 0xae000, 0x01000 }, /* [APB2] WFSYS_ON */
-	{ 0x80020000, 0xb0000, 0x10000 }, /* WF_TOP_MISC_OFF */
-	{ 0x81020000, 0xc0000, 0x10000 }, /* WF_TOP_MISC_ON */
-	{ 0x0, 0x0, 0x0 }, /* imply end of search */
-};
-
-static const struct mt76_connac_reg_map mt7986_reg_map[] = {
-	{ 0x54000000, 0x402000, 0x01000 }, /* WFDMA_0 (PCIE0 MCU DMA0) */
-	{ 0x55000000, 0x403000, 0x01000 }, /* WFDMA_1 (PCIE0 MCU DMA1) */
-	{ 0x56000000, 0x404000, 0x01000 }, /* WFDMA_2 (Reserved) */
-	{ 0x57000000, 0x405000, 0x01000 }, /* WFDMA_3 (MCU wrap CR) */
-	{ 0x58000000, 0x406000, 0x01000 }, /* WFDMA_4 (PCIE1 MCU DMA0) */
-	{ 0x59000000, 0x407000, 0x01000 }, /* WFDMA_5 (PCIE1 MCU DMA1) */
-	{ 0x820c0000, 0x408000, 0x04000 }, /* WF_UMAC_TOP (PLE) */
-	{ 0x820c8000, 0x40c000, 0x02000 }, /* WF_UMAC_TOP (PSE) */
-	{ 0x820cc000, 0x40e000, 0x02000 }, /* WF_UMAC_TOP (PP) */
-	{ 0x820e0000, 0x420000, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_CFG) */
-	{ 0x820e1000, 0x420400, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_TRB) */
-	{ 0x820e2000, 0x420800, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_AGG) */
-	{ 0x820e3000, 0x420c00, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_ARB) */
-	{ 0x820e4000, 0x421000, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_TMAC) */
-	{ 0x820e5000, 0x421400, 0x00800 }, /* WF_LMAC_TOP BN0 (WF_RMAC) */
-	{ 0x820ce000, 0x421c00, 0x00200 }, /* WF_LMAC_TOP (WF_SEC) */
-	{ 0x820e7000, 0x421e00, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_DMA) */
-	{ 0x820cf000, 0x422000, 0x01000 }, /* WF_LMAC_TOP (WF_PF) */
-	{ 0x820e9000, 0x423400, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_WTBLOFF) */
-	{ 0x820ea000, 0x424000, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_ETBF) */
-	{ 0x820eb000, 0x424200, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_LPON) */
-	{ 0x820ec000, 0x424600, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_INT) */
-	{ 0x820ed000, 0x424800, 0x00800 }, /* WF_LMAC_TOP BN0 (WF_MIB) */
-	{ 0x820ca000, 0x426000, 0x02000 }, /* WF_LMAC_TOP BN0 (WF_MUCOP) */
-	{ 0x820d0000, 0x430000, 0x10000 }, /* WF_LMAC_TOP (WF_WTBLON) */
-	{ 0x00400000, 0x480000, 0x10000 }, /* WF_MCU_SYSRAM */
-	{ 0x00410000, 0x490000, 0x10000 }, /* WF_MCU_SYSRAM */
-	{ 0x820f0000, 0x4a0000, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_CFG) */
-	{ 0x820f1000, 0x4a0600, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_TRB) */
-	{ 0x820f2000, 0x4a0800, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_AGG) */
-	{ 0x820f3000, 0x4a0c00, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_ARB) */
-	{ 0x820f4000, 0x4a1000, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_TMAC) */
-	{ 0x820f5000, 0x4a1400, 0x00800 }, /* WF_LMAC_TOP BN1 (WF_RMAC) */
-	{ 0x820f7000, 0x4a1e00, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_DMA) */
-	{ 0x820f9000, 0x4a3400, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_WTBLOFF) */
-	{ 0x820fa000, 0x4a4000, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_ETBF) */
-	{ 0x820fb000, 0x4a4200, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_LPON) */
-	{ 0x820fc000, 0x4a4600, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_INT) */
-	{ 0x820fd000, 0x4a4800, 0x00800 }, /* WF_LMAC_TOP BN1 (WF_MIB) */
-	{ 0x820c4000, 0x4a8000, 0x01000 }, /* WF_LMAC_TOP (WF_UWTBL ) */
-	{ 0x820b0000, 0x4ae000, 0x01000 }, /* [APB2] WFSYS_ON */
-	{ 0x80020000, 0x4b0000, 0x10000 }, /* WF_TOP_MISC_OFF */
-	{ 0x81020000, 0x4c0000, 0x10000 }, /* WF_TOP_MISC_ON */
-	{ 0x89000000, 0x4d0000, 0x01000 }, /* WF_MCU_CFG_ON */
-	{ 0x89010000, 0x4d1000, 0x01000 }, /* WF_MCU_CIRQ */
-	{ 0x89020000, 0x4d2000, 0x01000 }, /* WF_MCU_GPT */
-	{ 0x89030000, 0x4d3000, 0x01000 }, /* WF_MCU_WDT */
-	{ 0x80010000, 0x4d4000, 0x01000 }, /* WF_AXIDMA */
-	{ 0x0, 0x0, 0x0 }, /* imply end of search */
-};
-
-static u32 mt7915_reg_map_l1(struct mt7915_dev *dev, u32 addr)
-{
-	u32 offset = FIELD_GET(MT_HIF_REMAP_L1_OFFSET, addr);
-	u32 base = FIELD_GET(MT_HIF_REMAP_L1_BASE, addr);
-	u32 l1_remap;
-
-	if (is_mt7986(&dev->mt76))
-		return MT_CONN_INFRA_OFFSET(addr);
-
-	l1_remap = is_mt7915(&dev->mt76) ?
-		   MT_HIF_REMAP_L1 : MT_HIF_REMAP_L1_MT7916;
-
-	dev->bus_ops->rmw(&dev->mt76, l1_remap,
-			  MT_HIF_REMAP_L1_MASK,
-			  FIELD_PREP(MT_HIF_REMAP_L1_MASK, base));
-	/* use read to push write */
-	dev->bus_ops->rr(&dev->mt76, l1_remap);
-
-	return MT_HIF_REMAP_BASE_L1 + offset;
-}
-
-static u32 mt7915_reg_map_l2(struct mt7915_dev *dev, u32 addr)
-{
-	u32 offset, base;
-
-	if (is_mt7915(&dev->mt76)) {
-		offset = FIELD_GET(MT_HIF_REMAP_L2_OFFSET, addr);
-		base = FIELD_GET(MT_HIF_REMAP_L2_BASE, addr);
-
-		dev->bus_ops->rmw(&dev->mt76, MT_HIF_REMAP_L2,
-				  MT_HIF_REMAP_L2_MASK,
-				  FIELD_PREP(MT_HIF_REMAP_L2_MASK, base));
-
-		/* use read to push write */
-		dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L2);
-	} else {
-		u32 ofs = is_mt7986(&dev->mt76) ? 0x400000 : 0;
-
-		offset = FIELD_GET(MT_HIF_REMAP_L2_OFFSET_MT7916, addr);
-		base = FIELD_GET(MT_HIF_REMAP_L2_BASE_MT7916, addr);
-
-		dev->bus_ops->rmw(&dev->mt76, MT_HIF_REMAP_L2_MT7916 + ofs,
-				  MT_HIF_REMAP_L2_MASK_MT7916,
-				  FIELD_PREP(MT_HIF_REMAP_L2_MASK_MT7916, base));
-
-		/* use read to push write */
-		dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L2_MT7916 + ofs);
-
-		offset += (MT_HIF_REMAP_BASE_L2_MT7916 + ofs);
-	}
-
-	return offset;
-}
-
-static u32 __mt7915_reg_addr(struct mt7915_dev *dev, u32 addr)
-{
-	int i;
-
-	if (addr < 0x100000)
-		return addr;
-
-	if (!dev->reg.map) {
-		dev_err(dev->mt76.dev, "err: reg_map is null\n");
-		return addr;
-	}
-
-	for (i = 0; i < dev->reg.map_size; i++) {
-		u32 ofs;
-
-		if (addr < dev->reg.map[i].phys)
-			continue;
-
-		ofs = addr - dev->reg.map[i].phys;
-		if (ofs > dev->reg.map[i].size)
-			continue;
-
-		return dev->reg.map[i].maps + ofs;
-	}
-
-	if ((addr >= MT_INFRA_BASE && addr < MT_WFSYS0_PHY_START) ||
-	    (addr >= MT_WFSYS0_PHY_START && addr < MT_WFSYS1_PHY_START) ||
-	    (addr >= MT_WFSYS1_PHY_START && addr <= MT_WFSYS1_PHY_END))
-		return mt7915_reg_map_l1(dev, addr);
-
-	if (dev_is_pci(dev->mt76.dev) &&
-	    ((addr >= MT_CBTOP1_PHY_START && addr <= MT_CBTOP1_PHY_END) ||
-	     (addr >= MT_CBTOP2_PHY_START && addr <= MT_CBTOP2_PHY_END)))
-		return mt7915_reg_map_l1(dev, addr);
-
-	/* CONN_INFRA: covert to phyiscal addr and use layer 1 remap */
-	if (addr >= MT_INFRA_MCU_START && addr <= MT_INFRA_MCU_END) {
-		addr = addr - MT_INFRA_MCU_START + MT_INFRA_BASE;
-		return mt7915_reg_map_l1(dev, addr);
-	}
-
-	return mt7915_reg_map_l2(dev, addr);
-}
-
-static u32 mt7915_rr(struct mt76_dev *mdev, u32 offset)
-{
-	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
-	u32 addr = __mt7915_reg_addr(dev, offset);
-
-	return dev->bus_ops->rr(mdev, addr);
-}
-
-static void mt7915_wr(struct mt76_dev *mdev, u32 offset, u32 val)
-{
-	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
-	u32 addr = __mt7915_reg_addr(dev, offset);
-
-	dev->bus_ops->wr(mdev, addr, val);
-}
-
-static u32 mt7915_rmw(struct mt76_dev *mdev, u32 offset, u32 mask, u32 val)
-{
-	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
-	u32 addr = __mt7915_reg_addr(dev, offset);
-
-	return dev->bus_ops->rmw(mdev, addr, mask, val);
-}
-
-#ifdef CONFIG_NET_MEDIATEK_SOC_WED
-static int mt7915_mmio_wed_offload_enable(struct mtk_wed_device *wed)
-{
-	struct mt7915_dev *dev;
-	struct mt7915_phy *phy;
-	int ret;
-
-	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
-
-	spin_lock_bh(&dev->mt76.token_lock);
-	dev->mt76.token_size = wed->wlan.token_start;
-	spin_unlock_bh(&dev->mt76.token_lock);
-
-	ret = wait_event_timeout(dev->mt76.tx_wait,
-				 !dev->mt76.wed_token_count, HZ);
-	if (!ret)
-		return -EAGAIN;
-
-	phy = &dev->phy;
-	mt76_set(dev, MT_AGG_ACR4(phy->band_idx), MT_AGG_ACR_PPDU_TXS2H);
-
-	phy = dev->mt76.phys[MT_BAND1] ? dev->mt76.phys[MT_BAND1]->priv : NULL;
-	if (phy)
-		mt76_set(dev, MT_AGG_ACR4(phy->band_idx),
-			 MT_AGG_ACR_PPDU_TXS2H);
-
-	return 0;
-}
-
-static void mt7915_mmio_wed_offload_disable(struct mtk_wed_device *wed)
-{
-	struct mt7915_dev *dev;
-	struct mt7915_phy *phy;
-
-	dev = container_of(wed, struct mt7915_dev, mt76.mmio.wed);
-
-	spin_lock_bh(&dev->mt76.token_lock);
-	dev->mt76.token_size = MT7915_TOKEN_SIZE;
-	spin_unlock_bh(&dev->mt76.token_lock);
-
-	/* MT_TXD5_TX_STATUS_HOST (MPDU format) has higher priority than
-	 * MT_AGG_ACR_PPDU_TXS2H (PPDU format) even though ACR bit is set.
-	 */
-	phy = &dev->phy;
-	mt76_clear(dev, MT_AGG_ACR4(phy->band_idx), MT_AGG_ACR_PPDU_TXS2H);
-
-	phy = dev->mt76.phys[MT_BAND1] ? dev->mt76.phys[MT_BAND1]->priv : NULL;
-	if (phy)
-		mt76_clear(dev, MT_AGG_ACR4(phy->band_idx),
-			   MT_AGG_ACR_PPDU_TXS2H);
-}
-#endif
-
-int mt7915_mmio_wed_init(struct mt7915_dev *dev, void *pdev_ptr,
-			 bool pci, int *irq)
-{
-#ifdef CONFIG_NET_MEDIATEK_SOC_WED
-	struct mtk_wed_device *wed = &dev->mt76.mmio.wed;
-	int ret;
-
-	if (!wed_enable)
-		return 0;
-
-	if (pci) {
-		struct pci_dev *pci_dev = pdev_ptr;
-
-		wed->wlan.pci_dev = pci_dev;
-		wed->wlan.bus_type = MTK_WED_BUS_PCIE;
-		wed->wlan.wpdma_int = pci_resource_start(pci_dev, 0) +
-				      MT_INT_WED_SOURCE_CSR;
-		wed->wlan.wpdma_mask = pci_resource_start(pci_dev, 0) +
-				       MT_INT_WED_MASK_CSR;
-		wed->wlan.wpdma_phys = pci_resource_start(pci_dev, 0) +
-				       MT_WFDMA_EXT_CSR_BASE;
-		wed->wlan.wpdma_tx = pci_resource_start(pci_dev, 0) +
-				     MT_TXQ_WED_RING_BASE;
-		wed->wlan.wpdma_txfree = pci_resource_start(pci_dev, 0) +
-					 MT_RXQ_WED_RING_BASE;
-	} else {
-		struct platform_device *plat_dev = pdev_ptr;
-		struct resource *res;
-
-		res = platform_get_resource(plat_dev, IORESOURCE_MEM, 0);
-		if (!res)
-			return -ENOMEM;
-
-		wed->wlan.platform_dev = plat_dev;
-		wed->wlan.bus_type = MTK_WED_BUS_AXI;
-		wed->wlan.wpdma_int = res->start + MT_INT_SOURCE_CSR;
-		wed->wlan.wpdma_mask = res->start + MT_INT_MASK_CSR;
-		wed->wlan.wpdma_tx = res->start + MT_TXQ_WED_RING_BASE;
-		wed->wlan.wpdma_txfree = res->start + MT_RXQ_WED_RING_BASE;
-	}
-	wed->wlan.nbuf = 4096;
-	wed->wlan.tx_tbit[0] = is_mt7915(&dev->mt76) ? 4 : 30;
-	wed->wlan.tx_tbit[1] = is_mt7915(&dev->mt76) ? 5 : 31;
-	wed->wlan.txfree_tbit = is_mt7915(&dev->mt76) ? 1 : 2;
-	wed->wlan.token_start = MT7915_TOKEN_SIZE - wed->wlan.nbuf;
-	wed->wlan.init_buf = mt7915_wed_init_buf;
-	wed->wlan.offload_enable = mt7915_mmio_wed_offload_enable;
-	wed->wlan.offload_disable = mt7915_mmio_wed_offload_disable;
-
-	if (mtk_wed_device_attach(wed))
-		return 0;
-
-	*irq = wed->irq;
-	dev->mt76.dma_dev = wed->dev;
-
-	ret = dma_set_mask(wed->dev, DMA_BIT_MASK(32));
-	if (ret)
-		return ret;
-
-	return 1;
-#else
-	return 0;
-#endif
-}
-
-static int mt7915_mmio_init(struct mt76_dev *mdev,
-			    void __iomem *mem_base,
-			    u32 device_id)
-{
-	struct mt76_bus_ops *bus_ops;
-	struct mt7915_dev *dev;
-
-	dev = container_of(mdev, struct mt7915_dev, mt76);
-	mt76_mmio_init(&dev->mt76, mem_base);
-
-	switch (device_id) {
-	case 0x7915:
-		dev->reg.reg_rev = mt7915_reg;
-		dev->reg.offs_rev = mt7915_offs;
-		dev->reg.map = mt7915_reg_map;
-		dev->reg.map_size = ARRAY_SIZE(mt7915_reg_map);
-		break;
-	case 0x7906:
-		dev->reg.reg_rev = mt7916_reg;
-		dev->reg.offs_rev = mt7916_offs;
-		dev->reg.map = mt7916_reg_map;
-		dev->reg.map_size = ARRAY_SIZE(mt7916_reg_map);
-		break;
-	case 0x7986:
-		dev->reg.reg_rev = mt7986_reg;
-		dev->reg.offs_rev = mt7916_offs;
-		dev->reg.map = mt7986_reg_map;
-		dev->reg.map_size = ARRAY_SIZE(mt7986_reg_map);
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	dev->bus_ops = dev->mt76.bus;
-	bus_ops = devm_kmemdup(dev->mt76.dev, dev->bus_ops, sizeof(*bus_ops),
-			       GFP_KERNEL);
-	if (!bus_ops)
-		return -ENOMEM;
-
-	bus_ops->rr = mt7915_rr;
-	bus_ops->wr = mt7915_wr;
-	bus_ops->rmw = mt7915_rmw;
-	dev->mt76.bus = bus_ops;
-
-	mdev->rev = (device_id << 16) |
-		    (mt76_rr(dev, MT_HW_REV) & 0xff);
-	dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
-
-	return 0;
-}
-
-void mt7915_dual_hif_set_irq_mask(struct mt7915_dev *dev,
-				  bool write_reg,
-				  u32 clear, u32 set)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	unsigned long flags;
-
-	spin_lock_irqsave(&mdev->mmio.irq_lock, flags);
-
-	mdev->mmio.irqmask &= ~clear;
-	mdev->mmio.irqmask |= set;
-
-	if (write_reg) {
-		if (mtk_wed_device_active(&mdev->mmio.wed))
-			mtk_wed_device_irq_set_mask(&mdev->mmio.wed,
-						    mdev->mmio.irqmask);
-		else
-			mt76_wr(dev, MT_INT_MASK_CSR, mdev->mmio.irqmask);
-		mt76_wr(dev, MT_INT1_MASK_CSR, mdev->mmio.irqmask);
-	}
-
-	spin_unlock_irqrestore(&mdev->mmio.irq_lock, flags);
-}
-
-static void mt7915_rx_poll_complete(struct mt76_dev *mdev,
-				    enum mt76_rxq_id q)
-{
-	struct mt7915_dev *dev = container_of(mdev, struct mt7915_dev, mt76);
-
-	mt7915_irq_enable(dev, MT_INT_RX(q));
-}
-
-/* TODO: support 2/4/6/8 MSI-X vectors */
-static void mt7915_irq_tasklet(struct tasklet_struct *t)
-{
-	struct mt7915_dev *dev = from_tasklet(dev, t, irq_tasklet);
-	struct mtk_wed_device *wed = &dev->mt76.mmio.wed;
-	u32 intr, intr1, mask;
-
-	if (mtk_wed_device_active(wed)) {
-		mtk_wed_device_irq_set_mask(wed, 0);
-		if (dev->hif2)
-			mt76_wr(dev, MT_INT1_MASK_CSR, 0);
-		intr = mtk_wed_device_irq_get(wed, dev->mt76.mmio.irqmask);
-	} else {
-		mt76_wr(dev, MT_INT_MASK_CSR, 0);
-		if (dev->hif2)
-			mt76_wr(dev, MT_INT1_MASK_CSR, 0);
-
-		intr = mt76_rr(dev, MT_INT_SOURCE_CSR);
-		intr &= dev->mt76.mmio.irqmask;
-		mt76_wr(dev, MT_INT_SOURCE_CSR, intr);
-	}
-
-	if (dev->hif2) {
-		intr1 = mt76_rr(dev, MT_INT1_SOURCE_CSR);
-		intr1 &= dev->mt76.mmio.irqmask;
-		mt76_wr(dev, MT_INT1_SOURCE_CSR, intr1);
-
-		intr |= intr1;
-	}
-
-	trace_dev_irq(&dev->mt76, intr, dev->mt76.mmio.irqmask);
-
-	mask = intr & MT_INT_RX_DONE_ALL;
-	if (intr & MT_INT_TX_DONE_MCU)
-		mask |= MT_INT_TX_DONE_MCU;
-
-	mt7915_irq_disable(dev, mask);
-
-	if (intr & MT_INT_TX_DONE_MCU)
-		napi_schedule(&dev->mt76.tx_napi);
-
-	if (intr & MT_INT_RX(MT_RXQ_MAIN))
-		napi_schedule(&dev->mt76.napi[MT_RXQ_MAIN]);
-
-	if (intr & MT_INT_RX(MT_RXQ_BAND1))
-		napi_schedule(&dev->mt76.napi[MT_RXQ_BAND1]);
-
-	if (intr & MT_INT_RX(MT_RXQ_MCU))
-		napi_schedule(&dev->mt76.napi[MT_RXQ_MCU]);
-
-	if (intr & MT_INT_RX(MT_RXQ_MCU_WA))
-		napi_schedule(&dev->mt76.napi[MT_RXQ_MCU_WA]);
-
-	if (!is_mt7915(&dev->mt76) &&
-	    (intr & MT_INT_RX(MT_RXQ_MAIN_WA)))
-		napi_schedule(&dev->mt76.napi[MT_RXQ_MAIN_WA]);
-
-	if (intr & MT_INT_RX(MT_RXQ_BAND1_WA))
-		napi_schedule(&dev->mt76.napi[MT_RXQ_BAND1_WA]);
-
-	if (intr & MT_INT_MCU_CMD) {
-		u32 val = mt76_rr(dev, MT_MCU_CMD);
-
-		mt76_wr(dev, MT_MCU_CMD, val);
-		if (val & MT_MCU_CMD_ERROR_MASK) {
-			dev->reset_state = val;
-			queue_work(dev->mt76.wq, &dev->reset_work);
-			wake_up(&dev->reset_wait);
-		}
-	}
-}
-
-irqreturn_t mt7915_irq_handler(int irq, void *dev_instance)
-{
-	struct mt7915_dev *dev = dev_instance;
-	struct mtk_wed_device *wed = &dev->mt76.mmio.wed;
-
-	if (mtk_wed_device_active(wed)) {
-		mtk_wed_device_irq_set_mask(wed, 0);
-	} else {
-		mt76_wr(dev, MT_INT_MASK_CSR, 0);
-		if (dev->hif2)
-			mt76_wr(dev, MT_INT1_MASK_CSR, 0);
-	}
-
-	if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state))
-		return IRQ_NONE;
-
-	tasklet_schedule(&dev->irq_tasklet);
-
-	return IRQ_HANDLED;
-}
-
-struct mt7915_dev *mt7915_mmio_probe(struct device *pdev,
-				     void __iomem *mem_base, u32 device_id)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		/* txwi_size = txd size + txp size */
-		.txwi_size = MT_TXD_SIZE + sizeof(struct mt76_connac_fw_txp),
-		.drv_flags = MT_DRV_TXWI_NO_FREE | MT_DRV_HW_MGMT_TXQ |
-			     MT_DRV_AMSDU_OFFLOAD,
-		.survey_flags = SURVEY_INFO_TIME_TX |
-				SURVEY_INFO_TIME_RX |
-				SURVEY_INFO_TIME_BSS_RX,
-		.token_size = MT7915_TOKEN_SIZE,
-		.tx_prepare_skb = mt7915_tx_prepare_skb,
-		.tx_complete_skb = mt76_connac_tx_complete_skb,
-		.rx_skb = mt7915_queue_rx_skb,
-		.rx_check = mt7915_rx_check,
-		.rx_poll_complete = mt7915_rx_poll_complete,
-		.sta_ps = mt7915_sta_ps,
-		.sta_add = mt7915_mac_sta_add,
-		.sta_remove = mt7915_mac_sta_remove,
-		.update_survey = mt7915_update_channel,
-	};
-	struct mt7915_dev *dev;
-	struct mt76_dev *mdev;
-	int ret;
-
-	mdev = mt76_alloc_device(pdev, sizeof(*dev), &mt7915_ops, &drv_ops);
-	if (!mdev)
-		return ERR_PTR(-ENOMEM);
-
-	dev = container_of(mdev, struct mt7915_dev, mt76);
-
-	ret = mt7915_mmio_init(mdev, mem_base, device_id);
-	if (ret)
-		goto error;
-
-	tasklet_setup(&dev->irq_tasklet, mt7915_irq_tasklet);
-
-	return dev;
-
-error:
-	mt76_free_device(&dev->mt76);
-
-	return ERR_PTR(ret);
-}
-
-static int __init mt7915_init(void)
-{
-	int ret;
-
-	ret = pci_register_driver(&mt7915_hif_driver);
-	if (ret)
-		return ret;
-
-	ret = pci_register_driver(&mt7915_pci_driver);
-	if (ret)
-		goto error_pci;
-
-	if (IS_ENABLED(CONFIG_MT7986_WMAC)) {
-		ret = platform_driver_register(&mt7986_wmac_driver);
-		if (ret)
-			goto error_wmac;
-	}
-
-	return 0;
-
-error_wmac:
-	pci_unregister_driver(&mt7915_pci_driver);
-error_pci:
-	pci_unregister_driver(&mt7915_hif_driver);
-
-	return ret;
-}
-
-static void __exit mt7915_exit(void)
-{
-	if (IS_ENABLED(CONFIG_MT7986_WMAC))
-		platform_driver_unregister(&mt7986_wmac_driver);
-
-	pci_unregister_driver(&mt7915_pci_driver);
-	pci_unregister_driver(&mt7915_hif_driver);
-}
-
-module_init(mt7915_init);
-module_exit(mt7915_exit);
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mt7915.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mt7915.h
deleted file mode 100644
index fe6a6d3..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/mt7915.h
+++ /dev/null
@@ -1,597 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT7915_H
-#define __MT7915_H
-
-#include <linux/interrupt.h>
-#include <linux/ktime.h>
-#include "../mt76_connac.h"
-#include "regs.h"
-
-#define MT7915_MAX_INTERFACES		19
-#define MT7915_WTBL_SIZE		288
-#define MT7916_WTBL_SIZE		544
-#define MT7915_WTBL_RESERVED		(mt7915_wtbl_size(dev) - 1)
-#define MT7915_WTBL_STA			(MT7915_WTBL_RESERVED - \
-					 MT7915_MAX_INTERFACES)
-
-#define MT7915_WATCHDOG_TIME		(HZ / 10)
-#define MT7915_RESET_TIMEOUT		(30 * HZ)
-
-#define MT7915_TX_RING_SIZE		2048
-#define MT7915_TX_MCU_RING_SIZE		256
-#define MT7915_TX_FWDL_RING_SIZE	128
-
-#define MT7915_RX_RING_SIZE		1536
-#define MT7915_RX_MCU_RING_SIZE		512
-
-#define MT7915_FIRMWARE_WA		"mediatek/mt7915_wa.bin"
-#define MT7915_FIRMWARE_WM		"mediatek/mt7915_wm.bin"
-#define MT7915_ROM_PATCH		"mediatek/mt7915_rom_patch.bin"
-
-#define MT7916_FIRMWARE_WA		"mediatek/mt7916_wa.bin"
-#define MT7916_FIRMWARE_WM		"mediatek/mt7916_wm.bin"
-#define MT7916_ROM_PATCH		"mediatek/mt7916_rom_patch.bin"
-
-#define MT7986_FIRMWARE_WA		"mediatek/mt7986_wa.bin"
-#define MT7986_FIRMWARE_WM		"mediatek/mt7986_wm.bin"
-#define MT7986_FIRMWARE_WM_MT7975	"mediatek/mt7986_wm_mt7975.bin"
-#define MT7986_ROM_PATCH		"mediatek/mt7986_rom_patch.bin"
-#define MT7986_ROM_PATCH_MT7975		"mediatek/mt7986_rom_patch_mt7975.bin"
-
-#define MT7915_EEPROM_DEFAULT		"mediatek/mt7915_eeprom.bin"
-#define MT7915_EEPROM_DEFAULT_DBDC	"mediatek/mt7915_eeprom_dbdc.bin"
-#define MT7916_EEPROM_DEFAULT		"mediatek/mt7916_eeprom.bin"
-#define MT7986_EEPROM_MT7975_DEFAULT		"mediatek/mt7986_eeprom_mt7975.bin"
-#define MT7986_EEPROM_MT7975_DUAL_DEFAULT	"mediatek/mt7986_eeprom_mt7975_dual.bin"
-#define MT7986_EEPROM_MT7976_DEFAULT		"mediatek/mt7986_eeprom_mt7976.bin"
-#define MT7986_EEPROM_MT7976_DEFAULT_DBDC	"mediatek/mt7986_eeprom_mt7976_dbdc.bin"
-#define MT7986_EEPROM_MT7976_DUAL_DEFAULT	"mediatek/mt7986_eeprom_mt7976_dual.bin"
-
-#define MT7915_EEPROM_SIZE		3584
-#define MT7916_EEPROM_SIZE		4096
-
-#define MT7915_EEPROM_BLOCK_SIZE	16
-#define MT7915_TOKEN_SIZE		8192
-
-#define MT7915_CFEND_RATE_DEFAULT	0x49	/* OFDM 24M */
-#define MT7915_CFEND_RATE_11B		0x03	/* 11B LP, 11M */
-
-#define MT7915_THERMAL_THROTTLE_MAX	100
-#define MT7915_CDEV_THROTTLE_MAX	99
-
-#define MT7915_SKU_RATE_NUM		161
-
-#define MT7915_MAX_TWT_AGRT		16
-#define MT7915_MAX_STA_TWT_AGRT		8
-#define MT7915_MIN_TWT_DUR 64
-#define MT7915_MAX_QUEUE		(MT_RXQ_BAND2 + __MT_MCUQ_MAX + 2)
-
-struct mt7915_vif;
-struct mt7915_sta;
-struct mt7915_dfs_pulse;
-struct mt7915_dfs_pattern;
-
-enum mt7915_txq_id {
-	MT7915_TXQ_FWDL = 16,
-	MT7915_TXQ_MCU_WM,
-	MT7915_TXQ_BAND0,
-	MT7915_TXQ_BAND1,
-	MT7915_TXQ_MCU_WA,
-};
-
-enum mt7915_rxq_id {
-	MT7915_RXQ_BAND0 = 0,
-	MT7915_RXQ_BAND1,
-	MT7915_RXQ_MCU_WM = 0,
-	MT7915_RXQ_MCU_WA,
-	MT7915_RXQ_MCU_WA_EXT,
-};
-
-enum mt7916_rxq_id {
-	MT7916_RXQ_MCU_WM = 0,
-	MT7916_RXQ_MCU_WA,
-	MT7916_RXQ_MCU_WA_MAIN,
-	MT7916_RXQ_MCU_WA_EXT,
-	MT7916_RXQ_BAND0,
-	MT7916_RXQ_BAND1,
-};
-
-struct mt7915_twt_flow {
-	struct list_head list;
-	u64 start_tsf;
-	u64 tsf;
-	u32 duration;
-	u16 wcid;
-	__le16 mantissa;
-	u8 exp;
-	u8 table_id;
-	u8 id;
-	u8 protection:1;
-	u8 flowtype:1;
-	u8 trigger:1;
-	u8 sched:1;
-};
-
-struct mt7915_sta {
-	struct mt76_wcid wcid; /* must be first */
-
-	struct mt7915_vif *vif;
-
-	struct list_head poll_list;
-	struct list_head rc_list;
-	u32 airtime_ac[8];
-
-	unsigned long changed;
-	unsigned long jiffies;
-	unsigned long ampdu_state;
-
-	struct mt76_connac_sta_key_conf bip;
-
-	struct {
-		u8 flowid_mask;
-		struct mt7915_twt_flow flow[MT7915_MAX_STA_TWT_AGRT];
-	} twt;
-};
-
-struct mt7915_vif_cap {
-	bool ht_ldpc:1;
-	bool vht_ldpc:1;
-	bool he_ldpc:1;
-	bool vht_su_ebfer:1;
-	bool vht_su_ebfee:1;
-	bool vht_mu_ebfer:1;
-	bool vht_mu_ebfee:1;
-	bool he_su_ebfer:1;
-	bool he_su_ebfee:1;
-	bool he_mu_ebfer:1;
-};
-
-struct mt7915_vif {
-	struct mt76_vif mt76; /* must be first */
-
-	struct mt7915_vif_cap cap;
-	struct mt7915_sta sta;
-	struct mt7915_phy *phy;
-
-	struct ieee80211_tx_queue_params queue_params[IEEE80211_NUM_ACS];
-	struct cfg80211_bitrate_mask bitrate_mask;
-};
-
-/* per-phy stats.  */
-struct mib_stats {
-	u32 ack_fail_cnt;
-	u32 fcs_err_cnt;
-	u32 rts_cnt;
-	u32 rts_retries_cnt;
-	u32 ba_miss_cnt;
-	u32 tx_bf_cnt;
-	u32 tx_mu_mpdu_cnt;
-	u32 tx_mu_acked_mpdu_cnt;
-	u32 tx_su_acked_mpdu_cnt;
-	u32 tx_bf_ibf_ppdu_cnt;
-	u32 tx_bf_ebf_ppdu_cnt;
-
-	u32 tx_bf_rx_fb_all_cnt;
-	u32 tx_bf_rx_fb_he_cnt;
-	u32 tx_bf_rx_fb_vht_cnt;
-	u32 tx_bf_rx_fb_ht_cnt;
-
-	u32 tx_bf_rx_fb_bw; /* value of last sample, not cumulative */
-	u32 tx_bf_rx_fb_nc_cnt;
-	u32 tx_bf_rx_fb_nr_cnt;
-	u32 tx_bf_fb_cpl_cnt;
-	u32 tx_bf_fb_trig_cnt;
-
-	u32 tx_ampdu_cnt;
-	u32 tx_stop_q_empty_cnt;
-	u32 tx_mpdu_attempts_cnt;
-	u32 tx_mpdu_success_cnt;
-	u32 tx_pkt_ebf_cnt;
-	u32 tx_pkt_ibf_cnt;
-
-	u32 tx_rwp_fail_cnt;
-	u32 tx_rwp_need_cnt;
-
-	/* rx stats */
-	u32 rx_fifo_full_cnt;
-	u32 channel_idle_cnt;
-	u32 primary_cca_busy_time;
-	u32 secondary_cca_busy_time;
-	u32 primary_energy_detect_time;
-	u32 cck_mdrdy_time;
-	u32 ofdm_mdrdy_time;
-	u32 green_mdrdy_time;
-	u32 rx_vector_mismatch_cnt;
-	u32 rx_delimiter_fail_cnt;
-	u32 rx_mrdy_cnt;
-	u32 rx_len_mismatch_cnt;
-	u32 rx_mpdu_cnt;
-	u32 rx_ampdu_cnt;
-	u32 rx_ampdu_bytes_cnt;
-	u32 rx_ampdu_valid_subframe_cnt;
-	u32 rx_ampdu_valid_subframe_bytes_cnt;
-	u32 rx_pfdrop_cnt;
-	u32 rx_vec_queue_overflow_drop_cnt;
-	u32 rx_ba_cnt;
-
-	u32 tx_amsdu[8];
-	u32 tx_amsdu_cnt;
-};
-
-struct mt7915_hif {
-	struct list_head list;
-
-	struct device *dev;
-	void __iomem *regs;
-	int irq;
-};
-
-struct mt7915_phy {
-	struct mt76_phy *mt76;
-	struct mt7915_dev *dev;
-
-	struct ieee80211_sband_iftype_data iftype[NUM_NL80211_BANDS][NUM_NL80211_IFTYPES];
-
-	struct ieee80211_vif *monitor_vif;
-
-	struct thermal_cooling_device *cdev;
-	u8 cdev_state;
-	u8 throttle_state;
-	u32 throttle_temp[2]; /* 0: critical high, 1: maximum */
-
-	u32 rxfilter;
-	u64 omac_mask;
-	u8 band_idx;
-
-	u16 noise;
-
-	s16 coverage_class;
-	u8 slottime;
-
-	u8 rdd_state;
-
-	u32 trb_ts;
-
-	u32 rx_ampdu_ts;
-	u32 ampdu_ref;
-
-	struct mib_stats mib;
-	struct mt76_channel_state state_ts;
-
-#ifdef CONFIG_NL80211_TESTMODE
-	struct {
-		u32 *reg_backup;
-
-		s32 last_freq_offset;
-		u8 last_rcpi[4];
-		s8 last_ib_rssi[4];
-		s8 last_wb_rssi[4];
-		u8 last_snr;
-
-		u8 spe_idx;
-	} test;
-#endif
-};
-
-struct mt7915_dev {
-	union { /* must be first */
-		struct mt76_dev mt76;
-		struct mt76_phy mphy;
-	};
-
-	struct mt7915_hif *hif2;
-	struct mt7915_reg_desc reg;
-	u8 q_id[MT7915_MAX_QUEUE];
-	u32 q_int_mask[MT7915_MAX_QUEUE];
-	u32 wfdma_mask;
-
-	const struct mt76_bus_ops *bus_ops;
-	struct tasklet_struct irq_tasklet;
-	struct mt7915_phy phy;
-
-	/* monitor rx chain configured channel */
-	struct cfg80211_chan_def rdd2_chandef;
-	struct mt7915_phy *rdd2_phy;
-
-	u16 chainmask;
-	u16 chainshift;
-	u32 hif_idx;
-
-	struct work_struct init_work;
-	struct work_struct rc_work;
-	struct work_struct reset_work;
-	wait_queue_head_t reset_wait;
-	u32 reset_state;
-
-	struct list_head sta_rc_list;
-	struct list_head sta_poll_list;
-	struct list_head twt_list;
-	spinlock_t sta_poll_lock;
-
-	u32 hw_pattern;
-
-	bool dbdc_support;
-	bool flash_mode;
-	bool muru_debug;
-	bool ibf;
-
-	struct dentry *debugfs_dir;
-	struct rchan *relay_fwlog;
-
-	void *cal;
-
-	struct {
-		u8 debug_wm;
-		u8 debug_wa;
-		u8 debug_bin;
-	} fw;
-
-	struct {
-		u16 table_mask;
-		u8 n_agrt;
-	} twt;
-
-	struct reset_control *rstc;
-	void __iomem *dcm;
-	void __iomem *sku;
-};
-
-enum {
-	WFDMA0 = 0x0,
-	WFDMA1,
-	WFDMA_EXT,
-	__MT_WFDMA_MAX,
-};
-
-enum {
-	MT_RX_SEL0,
-	MT_RX_SEL1,
-	MT_RX_SEL2, /* monitor chain */
-};
-
-enum mt7915_rdd_cmd {
-	RDD_STOP,
-	RDD_START,
-	RDD_DET_MODE,
-	RDD_RADAR_EMULATE,
-	RDD_START_TXQ = 20,
-	RDD_SET_WF_ANT = 30,
-	RDD_CAC_START = 50,
-	RDD_CAC_END,
-	RDD_NORMAL_START,
-	RDD_DISABLE_DFS_CAL,
-	RDD_PULSE_DBG,
-	RDD_READ_PULSE,
-	RDD_RESUME_BF,
-	RDD_IRQ_OFF,
-};
-
-static inline struct mt7915_phy *
-mt7915_hw_phy(struct ieee80211_hw *hw)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	return phy->priv;
-}
-
-static inline struct mt7915_dev *
-mt7915_hw_dev(struct ieee80211_hw *hw)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	return container_of(phy->dev, struct mt7915_dev, mt76);
-}
-
-static inline struct mt7915_phy *
-mt7915_ext_phy(struct mt7915_dev *dev)
-{
-	struct mt76_phy *phy = dev->mt76.phys[MT_BAND1];
-
-	if (!phy)
-		return NULL;
-
-	return phy->priv;
-}
-
-static inline u32 mt7915_check_adie(struct mt7915_dev *dev, bool sku)
-{
-	u32 mask = sku ? MT_CONNINFRA_SKU_MASK : MT_ADIE_TYPE_MASK;
-
-	if (!is_mt7986(&dev->mt76))
-		return 0;
-
-	return mt76_rr(dev, MT_CONNINFRA_SKU_DEC_ADDR) & mask;
-}
-
-extern const struct ieee80211_ops mt7915_ops;
-extern const struct mt76_testmode_ops mt7915_testmode_ops;
-extern struct pci_driver mt7915_pci_driver;
-extern struct pci_driver mt7915_hif_driver;
-extern struct platform_driver mt7986_wmac_driver;
-
-#ifdef CONFIG_MT7986_WMAC
-int mt7986_wmac_enable(struct mt7915_dev *dev);
-void mt7986_wmac_disable(struct mt7915_dev *dev);
-#else
-static inline int mt7986_wmac_enable(struct mt7915_dev *dev)
-{
-	return 0;
-}
-
-static inline void mt7986_wmac_disable(struct mt7915_dev *dev)
-{
-}
-#endif
-struct mt7915_dev *mt7915_mmio_probe(struct device *pdev,
-				     void __iomem *mem_base, u32 device_id);
-void mt7915_wfsys_reset(struct mt7915_dev *dev);
-irqreturn_t mt7915_irq_handler(int irq, void *dev_instance);
-u64 __mt7915_get_tsf(struct ieee80211_hw *hw, struct mt7915_vif *mvif);
-u32 mt7915_wed_init_buf(void *ptr, dma_addr_t phys, int token_id);
-
-int mt7915_register_device(struct mt7915_dev *dev);
-void mt7915_unregister_device(struct mt7915_dev *dev);
-int mt7915_eeprom_init(struct mt7915_dev *dev);
-void mt7915_eeprom_parse_hw_cap(struct mt7915_dev *dev,
-				struct mt7915_phy *phy);
-int mt7915_eeprom_get_target_power(struct mt7915_dev *dev,
-				   struct ieee80211_channel *chan,
-				   u8 chain_idx);
-s8 mt7915_eeprom_get_power_delta(struct mt7915_dev *dev, int band);
-int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2);
-void mt7915_dma_prefetch(struct mt7915_dev *dev);
-void mt7915_dma_cleanup(struct mt7915_dev *dev);
-int mt7915_mcu_init(struct mt7915_dev *dev);
-int mt7915_mcu_twt_agrt_update(struct mt7915_dev *dev,
-			       struct mt7915_vif *mvif,
-			       struct mt7915_twt_flow *flow,
-			       int cmd);
-int mt7915_mcu_add_dev_info(struct mt7915_phy *phy,
-			    struct ieee80211_vif *vif, bool enable);
-int mt7915_mcu_add_bss_info(struct mt7915_phy *phy,
-			    struct ieee80211_vif *vif, int enable);
-int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta, bool enable);
-int mt7915_mcu_add_tx_ba(struct mt7915_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool add);
-int mt7915_mcu_add_rx_ba(struct mt7915_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool add);
-int mt7915_mcu_update_bss_color(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-				struct cfg80211_he_bss_color *he_bss_color);
-int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			  int enable, u32 changed);
-int mt7915_mcu_add_obss_spr(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-                            bool enable);
-int mt7915_mcu_add_rate_ctrl(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-			     struct ieee80211_sta *sta, bool changed);
-int mt7915_mcu_add_smps(struct mt7915_dev *dev, struct ieee80211_vif *vif,
-			struct ieee80211_sta *sta);
-int mt7915_set_channel(struct mt7915_phy *phy);
-int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd);
-int mt7915_mcu_set_tx(struct mt7915_dev *dev, struct ieee80211_vif *vif);
-int mt7915_mcu_update_edca(struct mt7915_dev *dev, void *req);
-int mt7915_mcu_set_fixed_rate_ctrl(struct mt7915_dev *dev,
-				   struct ieee80211_vif *vif,
-				   struct ieee80211_sta *sta,
-				   void *data, u32 field);
-int mt7915_mcu_set_eeprom(struct mt7915_dev *dev);
-int mt7915_mcu_get_eeprom(struct mt7915_dev *dev, u32 offset);
-int mt7915_mcu_get_eeprom_free_block(struct mt7915_dev *dev, u8 *block_num);
-int mt7915_mcu_set_mac(struct mt7915_dev *dev, int band, bool enable,
-		       bool hdr_trans);
-int mt7915_mcu_set_test_param(struct mt7915_dev *dev, u8 param, bool test_mode,
-			      u8 en);
-int mt7915_mcu_set_ser(struct mt7915_dev *dev, u8 action, u8 set, u8 band);
-int mt7915_mcu_set_sku_en(struct mt7915_phy *phy, bool enable);
-int mt7915_mcu_set_txpower_sku(struct mt7915_phy *phy);
-int mt7915_mcu_get_txpower_sku(struct mt7915_phy *phy, s8 *txpower, int len);
-int mt7915_mcu_set_txbf(struct mt7915_dev *dev, u8 action);
-int mt7915_mcu_set_fcc5_lpn(struct mt7915_dev *dev, int val);
-int mt7915_mcu_set_pulse_th(struct mt7915_dev *dev,
-			    const struct mt7915_dfs_pulse *pulse);
-int mt7915_mcu_set_radar_th(struct mt7915_dev *dev, int index,
-			    const struct mt7915_dfs_pattern *pattern);
-int mt7915_mcu_set_muru_ctrl(struct mt7915_dev *dev, u32 cmd, u32 val);
-int mt7915_mcu_apply_group_cal(struct mt7915_dev *dev);
-int mt7915_mcu_apply_tx_dpd(struct mt7915_phy *phy);
-int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch);
-int mt7915_mcu_get_temperature(struct mt7915_phy *phy);
-int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state);
-int mt7915_mcu_get_rx_rate(struct mt7915_phy *phy, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta, struct rate_info *rate);
-int mt7915_mcu_rdd_background_enable(struct mt7915_phy *phy,
-				     struct cfg80211_chan_def *chandef);
-int mt7915_mcu_rf_regval(struct mt7915_dev *dev, u32 regidx, u32 *val, bool set);
-int mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3);
-int mt7915_mcu_fw_log_2_host(struct mt7915_dev *dev, u8 type, u8 ctrl);
-int mt7915_mcu_fw_dbg_ctrl(struct mt7915_dev *dev, u32 module, u8 level);
-void mt7915_mcu_rx_event(struct mt7915_dev *dev, struct sk_buff *skb);
-void mt7915_mcu_exit(struct mt7915_dev *dev);
-
-static inline u16 mt7915_wtbl_size(struct mt7915_dev *dev)
-{
-	return is_mt7915(&dev->mt76) ? MT7915_WTBL_SIZE : MT7916_WTBL_SIZE;
-}
-
-static inline u16 mt7915_eeprom_size(struct mt7915_dev *dev)
-{
-	return is_mt7915(&dev->mt76) ? MT7915_EEPROM_SIZE : MT7916_EEPROM_SIZE;
-}
-
-void mt7915_dual_hif_set_irq_mask(struct mt7915_dev *dev, bool write_reg,
-				  u32 clear, u32 set);
-
-static inline void mt7915_irq_enable(struct mt7915_dev *dev, u32 mask)
-{
-	if (dev->hif2)
-		mt7915_dual_hif_set_irq_mask(dev, false, 0, mask);
-	else
-		mt76_set_irq_mask(&dev->mt76, 0, 0, mask);
-
-	tasklet_schedule(&dev->irq_tasklet);
-}
-
-static inline void mt7915_irq_disable(struct mt7915_dev *dev, u32 mask)
-{
-	if (dev->hif2)
-		mt7915_dual_hif_set_irq_mask(dev, true, mask, 0);
-	else
-		mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, mask, 0);
-}
-
-u32 mt7915_mac_wtbl_lmac_addr(struct mt7915_dev *dev, u16 wcid, u8 dw);
-bool mt7915_mac_wtbl_update(struct mt7915_dev *dev, int idx, u32 mask);
-void mt7915_mac_reset_counters(struct mt7915_phy *phy);
-void mt7915_mac_cca_stats_reset(struct mt7915_phy *phy);
-void mt7915_mac_enable_nf(struct mt7915_dev *dev, bool ext_phy);
-void mt7915_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,
-			   struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
-			   struct ieee80211_key_conf *key,
-			   enum mt76_txq_id qid, u32 changed);
-void mt7915_mac_set_timing(struct mt7915_phy *phy);
-int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta);
-void mt7915_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta);
-void mt7915_mac_work(struct work_struct *work);
-void mt7915_mac_reset_work(struct work_struct *work);
-void mt7915_mac_sta_rc_work(struct work_struct *work);
-void mt7915_mac_update_stats(struct mt7915_phy *phy);
-void mt7915_mac_twt_teardown_flow(struct mt7915_dev *dev,
-				  struct mt7915_sta *msta,
-				  u8 flowid);
-void mt7915_mac_add_twt_setup(struct ieee80211_hw *hw,
-			      struct ieee80211_sta *sta,
-			      struct ieee80211_twt_setup *twt);
-int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-			  enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			  struct ieee80211_sta *sta,
-			  struct mt76_tx_info *tx_info);
-void mt7915_tx_token_put(struct mt7915_dev *dev);
-void mt7915_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			 struct sk_buff *skb);
-bool mt7915_rx_check(struct mt76_dev *mdev, void *data, int len);
-void mt7915_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps);
-void mt7915_stats_work(struct work_struct *work);
-int mt76_dfs_start_rdd(struct mt7915_dev *dev, bool force);
-int mt7915_dfs_init_radar_detector(struct mt7915_phy *phy);
-void mt7915_set_stream_he_caps(struct mt7915_phy *phy);
-void mt7915_set_stream_vht_txbf_caps(struct mt7915_phy *phy);
-void mt7915_update_channel(struct mt76_phy *mphy);
-int mt7915_mcu_muru_debug_set(struct mt7915_dev *dev, bool enable);
-int mt7915_mcu_muru_debug_get(struct mt7915_phy *phy, void *ms);
-int mt7915_init_debugfs(struct mt7915_phy *phy);
-void mt7915_debugfs_rx_fw_monitor(struct mt7915_dev *dev, const void *data, int len);
-bool mt7915_debugfs_rx_log(struct mt7915_dev *dev, const void *data, int len);
-#ifdef CONFIG_MAC80211_DEBUGFS
-void mt7915_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			    struct ieee80211_sta *sta, struct dentry *dir);
-#endif
-int mt7915_mmio_wed_init(struct mt7915_dev *dev, void *pdev_ptr,
-			 bool pci, int *irq);
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/pci.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/pci.c
deleted file mode 100644
index 743f01f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/pci.c
+++ /dev/null
@@ -1,234 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc.
- *
- * Author: Ryder Lee <ryder.lee@mediatek.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/pci.h>
-
-#include "mt7915.h"
-#include "mac.h"
-#include "../trace.h"
-
-static LIST_HEAD(hif_list);
-static DEFINE_SPINLOCK(hif_lock);
-static u32 hif_idx;
-
-static const struct pci_device_id mt7915_pci_device_table[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7915) },
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7906) },
-	{ },
-};
-
-static const struct pci_device_id mt7915_hif_device_table[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7916) },
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x790a) },
-	{ },
-};
-
-static struct mt7915_hif *mt7915_pci_get_hif2(u32 idx)
-{
-	struct mt7915_hif *hif;
-	u32 val;
-
-	spin_lock_bh(&hif_lock);
-
-	list_for_each_entry(hif, &hif_list, list) {
-		val = readl(hif->regs + MT_PCIE_RECOG_ID);
-		val &= MT_PCIE_RECOG_ID_MASK;
-		if (val != idx)
-			continue;
-
-		get_device(hif->dev);
-		goto out;
-	}
-	hif = NULL;
-
-out:
-	spin_unlock_bh(&hif_lock);
-
-	return hif;
-}
-
-static void mt7915_put_hif2(struct mt7915_hif *hif)
-{
-	if (!hif)
-		return;
-
-	put_device(hif->dev);
-}
-
-static struct mt7915_hif *mt7915_pci_init_hif2(struct pci_dev *pdev)
-{
-	hif_idx++;
-	if (!pci_get_device(PCI_VENDOR_ID_MEDIATEK, 0x7916, NULL) &&
-	    !pci_get_device(PCI_VENDOR_ID_MEDIATEK, 0x790a, NULL))
-		return NULL;
-
-	writel(hif_idx | MT_PCIE_RECOG_ID_SEM,
-	       pcim_iomap_table(pdev)[0] + MT_PCIE_RECOG_ID);
-
-	return mt7915_pci_get_hif2(hif_idx);
-}
-
-static int mt7915_pci_hif2_probe(struct pci_dev *pdev)
-{
-	struct mt7915_hif *hif;
-
-	hif = devm_kzalloc(&pdev->dev, sizeof(*hif), GFP_KERNEL);
-	if (!hif)
-		return -ENOMEM;
-
-	hif->dev = &pdev->dev;
-	hif->regs = pcim_iomap_table(pdev)[0];
-	hif->irq = pdev->irq;
-	spin_lock_bh(&hif_lock);
-	list_add(&hif->list, &hif_list);
-	spin_unlock_bh(&hif_lock);
-	pci_set_drvdata(pdev, hif);
-
-	return 0;
-}
-
-static int mt7915_pci_probe(struct pci_dev *pdev,
-			    const struct pci_device_id *id)
-{
-	struct mt7915_hif *hif2 = NULL;
-	struct mt7915_dev *dev;
-	struct mt76_dev *mdev;
-	int irq;
-	int ret;
-
-	ret = pcim_enable_device(pdev);
-	if (ret)
-		return ret;
-
-	ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
-	if (ret)
-		return ret;
-
-	pci_set_master(pdev);
-
-	ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
-	if (ret)
-		return ret;
-
-	mt76_pci_disable_aspm(pdev);
-
-	if (id->device == 0x7916 || id->device == 0x790a)
-		return mt7915_pci_hif2_probe(pdev);
-
-	dev = mt7915_mmio_probe(&pdev->dev, pcim_iomap_table(pdev)[0],
-				id->device);
-	if (IS_ERR(dev))
-		return PTR_ERR(dev);
-
-	mdev = &dev->mt76;
-	mt7915_wfsys_reset(dev);
-	hif2 = mt7915_pci_init_hif2(pdev);
-
-	ret = mt7915_mmio_wed_init(dev, pdev, true, &irq);
-	if (ret < 0)
-		goto free_wed_or_irq_vector;
-
-	if (!ret) {
-		hif2 = mt7915_pci_init_hif2(pdev);
-
-		ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
-		if (ret < 0)
-			goto free_device;
-
-		irq = pdev->irq;
-	}
-
-	ret = devm_request_irq(mdev->dev, irq, mt7915_irq_handler,
-			       IRQF_SHARED, KBUILD_MODNAME, dev);
-	if (ret)
-		goto free_wed_or_irq_vector;
-
-	/* master switch of PCIe tnterrupt enable */
-	mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
-
-	if (hif2) {
-		dev->hif2 = hif2;
-
-		mt76_wr(dev, MT_INT1_MASK_CSR, 0);
-		/* master switch of PCIe tnterrupt enable */
-		if (is_mt7915(mdev))
-			mt76_wr(dev, MT_PCIE1_MAC_INT_ENABLE, 0xff);
-		else
-			mt76_wr(dev, MT_PCIE1_MAC_INT_ENABLE_MT7916, 0xff);
-
-		ret = devm_request_irq(mdev->dev, dev->hif2->irq,
-				       mt7915_irq_handler, IRQF_SHARED,
-				       KBUILD_MODNAME "-hif", dev);
-		if (ret)
-			goto free_hif2;
-	}
-
-	ret = mt7915_register_device(dev);
-	if (ret)
-		goto free_hif2_irq;
-
-	return 0;
-
-free_hif2_irq:
-	if (dev->hif2)
-		devm_free_irq(mdev->dev, dev->hif2->irq, dev);
-free_hif2:
-	if (dev->hif2)
-		put_device(dev->hif2->dev);
-	devm_free_irq(mdev->dev, irq, dev);
-free_wed_or_irq_vector:
-	if (mtk_wed_device_active(&mdev->mmio.wed))
-		mtk_wed_device_detach(&mdev->mmio.wed);
-	else
-		pci_free_irq_vectors(pdev);
-free_device:
-	mt76_free_device(&dev->mt76);
-
-	return ret;
-}
-
-static void mt7915_hif_remove(struct pci_dev *pdev)
-{
-	struct mt7915_hif *hif = pci_get_drvdata(pdev);
-
-	list_del(&hif->list);
-}
-
-static void mt7915_pci_remove(struct pci_dev *pdev)
-{
-	struct mt76_dev *mdev;
-	struct mt7915_dev *dev;
-
-	mdev = pci_get_drvdata(pdev);
-	dev = container_of(mdev, struct mt7915_dev, mt76);
-	mt7915_put_hif2(dev->hif2);
-	mt7915_unregister_device(dev);
-}
-
-struct pci_driver mt7915_hif_driver = {
-	.name		= KBUILD_MODNAME "_hif",
-	.id_table	= mt7915_hif_device_table,
-	.probe		= mt7915_pci_probe,
-	.remove		= mt7915_hif_remove,
-};
-
-struct pci_driver mt7915_pci_driver = {
-	.name		= KBUILD_MODNAME,
-	.id_table	= mt7915_pci_device_table,
-	.probe		= mt7915_pci_probe,
-	.remove		= mt7915_pci_remove,
-};
-
-MODULE_DEVICE_TABLE(pci, mt7915_pci_device_table);
-MODULE_DEVICE_TABLE(pci, mt7915_hif_device_table);
-MODULE_FIRMWARE(MT7915_FIRMWARE_WA);
-MODULE_FIRMWARE(MT7915_FIRMWARE_WM);
-MODULE_FIRMWARE(MT7915_ROM_PATCH);
-MODULE_FIRMWARE(MT7916_FIRMWARE_WA);
-MODULE_FIRMWARE(MT7916_FIRMWARE_WM);
-MODULE_FIRMWARE(MT7916_ROM_PATCH);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/regs.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/regs.h
deleted file mode 100644
index 5180dd9..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/regs.h
+++ /dev/null
@@ -1,1129 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT7915_REGS_H
-#define __MT7915_REGS_H
-
-/* used to differentiate between generations */
-struct mt7915_reg_desc {
-	const u32 *reg_rev;
-	const u32 *offs_rev;
-	const struct mt76_connac_reg_map *map;
-	u32 map_size;
-};
-
-enum reg_rev {
-	INT_SOURCE_CSR,
-	INT_MASK_CSR,
-	INT1_SOURCE_CSR,
-	INT1_MASK_CSR,
-	INT_MCU_CMD_SOURCE,
-	INT_MCU_CMD_EVENT,
-	WFDMA0_ADDR,
-	WFDMA0_PCIE1_ADDR,
-	WFDMA_EXT_CSR_ADDR,
-	CBTOP1_PHY_END,
-	INFRA_MCU_ADDR_END,
-	FW_EXCEPTION_ADDR,
-	SWDEF_BASE_ADDR,
-	TXQ_WED_RING_BASE,
-	RXQ_WED_RING_BASE,
-	__MT_REG_MAX,
-};
-
-enum offs_rev {
-	TMAC_CDTR,
-	TMAC_ODTR,
-	TMAC_ATCR,
-	TMAC_TRCR0,
-	TMAC_ICR0,
-	TMAC_ICR1,
-	TMAC_CTCR0,
-	TMAC_TFCR0,
-	MDP_BNRCFR0,
-	MDP_BNRCFR1,
-	ARB_DRNGR0,
-	ARB_SCR,
-	RMAC_MIB_AIRTIME14,
-	AGG_AWSCR0,
-	AGG_PCR0,
-	AGG_ACR0,
-	AGG_ACR4,
-	AGG_MRCR,
-	AGG_ATCR1,
-	AGG_ATCR3,
-	LPON_UTTR0,
-	LPON_UTTR1,
-	LPON_FRCR,
-	MIB_SDR3,
-	MIB_SDR4,
-	MIB_SDR5,
-	MIB_SDR7,
-	MIB_SDR8,
-	MIB_SDR9,
-	MIB_SDR10,
-	MIB_SDR11,
-	MIB_SDR12,
-	MIB_SDR13,
-	MIB_SDR14,
-	MIB_SDR15,
-	MIB_SDR16,
-	MIB_SDR17,
-	MIB_SDR18,
-	MIB_SDR19,
-	MIB_SDR20,
-	MIB_SDR21,
-	MIB_SDR22,
-	MIB_SDR23,
-	MIB_SDR24,
-	MIB_SDR25,
-	MIB_SDR27,
-	MIB_SDR28,
-	MIB_SDR29,
-	MIB_SDRVEC,
-	MIB_SDR31,
-	MIB_SDR32,
-	MIB_SDRMUBF,
-	MIB_DR8,
-	MIB_DR9,
-	MIB_DR11,
-	MIB_MB_SDR0,
-	MIB_MB_SDR1,
-	TX_AGG_CNT,
-	TX_AGG_CNT2,
-	MIB_ARNG,
-	WTBLON_TOP_WDUCR,
-	WTBL_UPDATE,
-	PLE_FL_Q_EMPTY,
-	PLE_FL_Q_CTRL,
-	PLE_AC_QEMPTY,
-	PLE_FREEPG_CNT,
-	PLE_FREEPG_HEAD_TAIL,
-	PLE_PG_HIF_GROUP,
-	PLE_HIF_PG_INFO,
-	AC_OFFSET,
-	ETBF_PAR_RPT0,
-	__MT_OFFS_MAX,
-};
-
-#define __REG(id)			(dev->reg.reg_rev[(id)])
-#define __OFFS(id)			(dev->reg.offs_rev[(id)])
-
-/* MCU WFDMA0 */
-#define MT_MCU_WFDMA0_BASE		0x2000
-#define MT_MCU_WFDMA0(ofs)		(MT_MCU_WFDMA0_BASE + (ofs))
-
-#define MT_MCU_WFDMA0_DUMMY_CR		MT_MCU_WFDMA0(0x120)
-
-/* MCU WFDMA1 */
-#define MT_MCU_WFDMA1_BASE		0x3000
-#define MT_MCU_WFDMA1(ofs)		(MT_MCU_WFDMA1_BASE + (ofs))
-
-#define MT_MCU_INT_EVENT		__REG(INT_MCU_CMD_EVENT)
-#define MT_MCU_INT_EVENT_DMA_STOPPED	BIT(0)
-#define MT_MCU_INT_EVENT_DMA_INIT	BIT(1)
-#define MT_MCU_INT_EVENT_SER_TRIGGER	BIT(2)
-#define MT_MCU_INT_EVENT_RESET_DONE	BIT(3)
-
-/* PLE */
-#define MT_PLE_BASE			0x820c0000
-#define MT_PLE(ofs)			(MT_PLE_BASE + (ofs))
-
-#define MT_FL_Q_EMPTY			MT_PLE(__OFFS(PLE_FL_Q_EMPTY))
-#define MT_FL_Q0_CTRL			MT_PLE(__OFFS(PLE_FL_Q_CTRL))
-#define MT_FL_Q2_CTRL			MT_PLE(__OFFS(PLE_FL_Q_CTRL) + 0x8)
-#define MT_FL_Q3_CTRL			MT_PLE(__OFFS(PLE_FL_Q_CTRL) + 0xc)
-
-#define MT_PLE_FREEPG_CNT		MT_PLE(__OFFS(PLE_FREEPG_CNT))
-#define MT_PLE_FREEPG_HEAD_TAIL		MT_PLE(__OFFS(PLE_FREEPG_HEAD_TAIL))
-#define MT_PLE_PG_HIF_GROUP		MT_PLE(__OFFS(PLE_PG_HIF_GROUP))
-#define MT_PLE_HIF_PG_INFO		MT_PLE(__OFFS(PLE_HIF_PG_INFO))
-
-#define MT_PLE_AC_QEMPTY(ac, n)		MT_PLE(__OFFS(PLE_AC_QEMPTY) +	\
-					       __OFFS(AC_OFFSET) *	\
-					       (ac) + ((n) << 2))
-#define MT_PLE_AMSDU_PACK_MSDU_CNT(n)	MT_PLE(0x10e0 + ((n) << 2))
-
-#define MT_PSE_BASE			0x820c8000
-#define MT_PSE(ofs)			(MT_PSE_BASE + (ofs))
-
-/* WF MDP TOP */
-#define MT_MDP_BASE			0x820cd000
-#define MT_MDP(ofs)			(MT_MDP_BASE + (ofs))
-
-#define MT_MDP_DCR0			MT_MDP(0x000)
-#define MT_MDP_DCR0_DAMSDU_EN		BIT(15)
-
-#define MT_MDP_DCR1			MT_MDP(0x004)
-#define MT_MDP_DCR1_MAX_RX_LEN		GENMASK(15, 3)
-
-#define MT_MDP_DCR2			MT_MDP(0x0e8)
-#define MT_MDP_DCR2_RX_TRANS_SHORT	BIT(2)
-
-#define MT_MDP_BNRCFR0(_band)		MT_MDP(__OFFS(MDP_BNRCFR0) + \
-					       ((_band) << 8))
-#define MT_MDP_RCFR0_MCU_RX_MGMT	GENMASK(5, 4)
-#define MT_MDP_RCFR0_MCU_RX_CTL_NON_BAR	GENMASK(7, 6)
-#define MT_MDP_RCFR0_MCU_RX_CTL_BAR	GENMASK(9, 8)
-
-#define MT_MDP_BNRCFR1(_band)		MT_MDP(__OFFS(MDP_BNRCFR1) + \
-					       ((_band) << 8))
-#define MT_MDP_RCFR1_MCU_RX_BYPASS	GENMASK(23, 22)
-#define MT_MDP_RCFR1_RX_DROPPED_UCAST	GENMASK(28, 27)
-#define MT_MDP_RCFR1_RX_DROPPED_MCAST	GENMASK(30, 29)
-#define MT_MDP_TO_HIF			0
-#define MT_MDP_TO_WM			1
-
-/* TRB: band 0(0x820e1000), band 1(0x820f1000) */
-#define MT_WF_TRB_BASE(_band)		((_band) ? 0x820f1000 : 0x820e1000)
-#define MT_WF_TRB(_band, ofs)		(MT_WF_TRB_BASE(_band) + (ofs))
-
-#define MT_TRB_RXPSR0(_band)		MT_WF_TRB(_band, 0x03c)
-#define MT_TRB_RXPSR0_RX_WTBL_PTR	GENMASK(25, 16)
-#define MT_TRB_RXPSR0_RX_RMAC_PTR	GENMASK(9, 0)
-
-/* TMAC: band 0(0x820e4000), band 1(0x820f4000) */
-#define MT_WF_TMAC_BASE(_band)		((_band) ? 0x820f4000 : 0x820e4000)
-#define MT_WF_TMAC(_band, ofs)		(MT_WF_TMAC_BASE(_band) + (ofs))
-
-#define MT_TMAC_TCR0(_band)		MT_WF_TMAC(_band, 0)
-#define MT_TMAC_TCR0_TX_BLINK		GENMASK(7, 6)
-#define MT_TMAC_TCR0_TBTT_STOP_CTRL	BIT(25)
-
-#define MT_TMAC_CDTR(_band)		MT_WF_TMAC(_band, __OFFS(TMAC_CDTR))
- #define MT_TMAC_ODTR(_band)		MT_WF_TMAC(_band, __OFFS(TMAC_ODTR))
-#define MT_TIMEOUT_VAL_PLCP		GENMASK(15, 0)
-#define MT_TIMEOUT_VAL_CCA		GENMASK(31, 16)
-
-#define MT_TMAC_ATCR(_band)		MT_WF_TMAC(_band, __OFFS(TMAC_ATCR))
-#define MT_TMAC_ATCR_TXV_TOUT		GENMASK(7, 0)
-
-#define MT_TMAC_TRCR0(_band)		MT_WF_TMAC(_band, __OFFS(TMAC_TRCR0))
-#define MT_TMAC_TRCR0_TR2T_CHK		GENMASK(8, 0)
-#define MT_TMAC_TRCR0_I2T_CHK		GENMASK(24, 16)
-
-#define MT_TMAC_ICR0(_band)		MT_WF_TMAC(_band, __OFFS(TMAC_ICR0))
-#define MT_IFS_EIFS_OFDM		GENMASK(8, 0)
-#define MT_IFS_RIFS			GENMASK(14, 10)
-#define MT_IFS_SIFS			GENMASK(22, 16)
-#define MT_IFS_SLOT			GENMASK(30, 24)
-
-#define MT_TMAC_ICR1(_band)		MT_WF_TMAC(_band, __OFFS(TMAC_ICR1))
-#define MT_IFS_EIFS_CCK			GENMASK(8, 0)
-
-#define MT_TMAC_CTCR0(_band)		MT_WF_TMAC(_band, __OFFS(TMAC_CTCR0))
-#define MT_TMAC_CTCR0_INS_DDLMT_REFTIME		GENMASK(5, 0)
-#define MT_TMAC_CTCR0_INS_DDLMT_EN		BIT(17)
-#define MT_TMAC_CTCR0_INS_DDLMT_VHT_SMPDU_EN	BIT(18)
-
-#define MT_TMAC_TFCR0(_band)		MT_WF_TMAC(_band, __OFFS(TMAC_TFCR0))
-
-/* WF DMA TOP: band 0(0x820e7000),band 1(0x820f7000) */
-#define MT_WF_DMA_BASE(_band)		((_band) ? 0x820f7000 : 0x820e7000)
-#define MT_WF_DMA(_band, ofs)		(MT_WF_DMA_BASE(_band) + (ofs))
-
-#define MT_DMA_DCR0(_band)		MT_WF_DMA(_band, 0x000)
-#define MT_DMA_DCR0_MAX_RX_LEN		GENMASK(15, 3)
-#define MT_DMA_DCR0_RXD_G5_EN		BIT(23)
-
-/* ETBF: band 0(0x820ea000), band 1(0x820fa000) */
-#define MT_WF_ETBF_BASE(_band)		((_band) ? 0x820fa000 : 0x820ea000)
-#define MT_WF_ETBF(_band, ofs)		(MT_WF_ETBF_BASE(_band) + (ofs))
-
-#define MT_ETBF_TX_NDP_BFRP(_band)	MT_WF_ETBF(_band, 0x040)
-#define MT_ETBF_TX_FB_CPL		GENMASK(31, 16)
-#define MT_ETBF_TX_FB_TRI		GENMASK(15, 0)
-
-#define MT_ETBF_PAR_RPT0(_band)		MT_WF_ETBF(_band, __OFFS(ETBF_PAR_RPT0))
-#define MT_ETBF_PAR_RPT0_FB_BW		GENMASK(7, 6)
-#define MT_ETBF_PAR_RPT0_FB_NC		GENMASK(5, 3)
-#define MT_ETBF_PAR_RPT0_FB_NR		GENMASK(2, 0)
-
-#define MT_ETBF_TX_APP_CNT(_band)	MT_WF_ETBF(_band, 0x0f0)
-#define MT_ETBF_TX_IBF_CNT		GENMASK(31, 16)
-#define MT_ETBF_TX_EBF_CNT		GENMASK(15, 0)
-
-#define MT_ETBF_RX_FB_CNT(_band)	MT_WF_ETBF(_band, 0x0f8)
-#define MT_ETBF_RX_FB_ALL		GENMASK(31, 24)
-#define MT_ETBF_RX_FB_HE		GENMASK(23, 16)
-#define MT_ETBF_RX_FB_VHT		GENMASK(15, 8)
-#define MT_ETBF_RX_FB_HT		GENMASK(7, 0)
-
-/* LPON: band 0(0x820eb000), band 1(0x820fb000) */
-#define MT_WF_LPON_BASE(_band)		((_band) ? 0x820fb000 : 0x820eb000)
-#define MT_WF_LPON(_band, ofs)		(MT_WF_LPON_BASE(_band) + (ofs))
-
-#define MT_LPON_UTTR0(_band)		MT_WF_LPON(_band, __OFFS(LPON_UTTR0))
-#define MT_LPON_UTTR1(_band)		MT_WF_LPON(_band, __OFFS(LPON_UTTR1))
-#define MT_LPON_FRCR(_band)		MT_WF_LPON(_band, __OFFS(LPON_FRCR))
-
-#define MT_LPON_TCR(_band, n)		MT_WF_LPON(_band, 0x0a8 +	\
-						   (((n) * 4) << 1))
-#define MT_LPON_TCR_MT7916(_band, n)	MT_WF_LPON(_band, 0x0a8 +	\
-						   (((n) * 4) << 4))
-#define MT_LPON_TCR_SW_MODE		GENMASK(1, 0)
-#define MT_LPON_TCR_SW_WRITE		BIT(0)
-#define MT_LPON_TCR_SW_ADJUST		BIT(1)
-#define MT_LPON_TCR_SW_READ		GENMASK(1, 0)
-
-/* MIB: band 0(0x820ed000), band 1(0x820fd000) */
-/* These counters are (mostly?) clear-on-read.  So, some should not
- * be read at all in case firmware is already reading them.  These
- * are commented with 'DNR' below.  The DNR stats will be read by querying
- * the firmware API for the appropriate message.  For counters the driver
- * does read, the driver should accumulate the counters.
- */
-#define MT_WF_MIB_BASE(_band)		((_band) ? 0x820fd000 : 0x820ed000)
-#define MT_WF_MIB(_band, ofs)		(MT_WF_MIB_BASE(_band) + (ofs))
-
-#define MT_MIB_SDR0(_band)		MT_WF_MIB(_band, 0x010)
-#define MT_MIB_SDR0_BERACON_TX_CNT_MASK	GENMASK(15, 0)
-
-#define MT_MIB_SDR3(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR3))
-#define MT_MIB_SDR3_FCS_ERR_MASK	GENMASK(15, 0)
-#define MT_MIB_SDR3_FCS_ERR_MASK_MT7916	GENMASK(31, 16)
-
-#define MT_MIB_SDR4(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR4))
-#define MT_MIB_SDR4_RX_FIFO_FULL_MASK	GENMASK(15, 0)
-
-/* rx mpdu counter, full 32 bits */
-#define MT_MIB_SDR5(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR5))
-
-#define MT_MIB_SDR6(_band)		MT_WF_MIB(_band, 0x020)
-#define MT_MIB_SDR6_CHANNEL_IDL_CNT_MASK	GENMASK(15, 0)
-
-#define MT_MIB_SDR7(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR7))
-#define MT_MIB_SDR7_RX_VECTOR_MISMATCH_CNT_MASK	GENMASK(15, 0)
-
-#define MT_MIB_SDR8(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR8))
-#define MT_MIB_SDR8_RX_DELIMITER_FAIL_CNT_MASK	GENMASK(15, 0)
-
-/* aka CCA_NAV_TX_TIME */
-#define MT_MIB_SDR9_DNR(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR9))
-#define MT_MIB_SDR9_CCA_BUSY_TIME_MASK		GENMASK(23, 0)
-
-#define MT_MIB_SDR10(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR10))
-#define MT_MIB_SDR10_MRDY_COUNT_MASK		GENMASK(25, 0)
-#define MT_MIB_SDR10_MRDY_COUNT_MASK_MT7916	GENMASK(31, 0)
-
-#define MT_MIB_SDR11(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR11))
-#define MT_MIB_SDR11_RX_LEN_MISMATCH_CNT_MASK	GENMASK(15, 0)
-
-/* tx ampdu cnt, full 32 bits */
-#define MT_MIB_SDR12(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR12))
-
-#define MT_MIB_SDR13(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR13))
-#define MT_MIB_SDR13_TX_STOP_Q_EMPTY_CNT_MASK	GENMASK(15, 0)
-
-/* counts all mpdus in ampdu, regardless of success */
-#define MT_MIB_SDR14(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR14))
-#define MT_MIB_SDR14_TX_MPDU_ATTEMPTS_CNT_MASK	GENMASK(23, 0)
-#define MT_MIB_SDR14_TX_MPDU_ATTEMPTS_CNT_MASK_MT7916	GENMASK(31, 0)
-
-/* counts all successfully tx'd mpdus in ampdu */
-#define MT_MIB_SDR15(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR15))
-#define MT_MIB_SDR15_TX_MPDU_SUCCESS_CNT_MASK	GENMASK(23, 0)
-#define MT_MIB_SDR15_TX_MPDU_SUCCESS_CNT_MASK_MT7916	GENMASK(31, 0)
-
-/* in units of 'us' */
-#define MT_MIB_SDR16(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR16))
-#define MT_MIB_SDR16_PRIMARY_CCA_BUSY_TIME_MASK	GENMASK(23, 0)
-
-#define MT_MIB_SDR17(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR17))
-#define MT_MIB_SDR17_SECONDARY_CCA_BUSY_TIME_MASK	GENMASK(23, 0)
-
-#define MT_MIB_SDR18(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR18))
-#define MT_MIB_SDR18_PRIMARY_ENERGY_DETECT_TIME_MASK	GENMASK(23, 0)
-
-/* units are us */
-#define MT_MIB_SDR19(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR19))
-#define MT_MIB_SDR19_CCK_MDRDY_TIME_MASK	GENMASK(23, 0)
-
-#define MT_MIB_SDR20(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR20))
-#define MT_MIB_SDR20_OFDM_VHT_MDRDY_TIME_MASK	GENMASK(23, 0)
-
-#define MT_MIB_SDR21(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR21))
-#define MT_MIB_SDR21_GREEN_MDRDY_TIME_MASK	GENMASK(23, 0)
-
-/* rx ampdu count, 32-bit */
-#define MT_MIB_SDR22(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR22))
-
-/* rx ampdu bytes count, 32-bit */
-#define MT_MIB_SDR23(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR23))
-
-/* rx ampdu valid subframe count */
-#define MT_MIB_SDR24(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR24))
-#define MT_MIB_SDR24_RX_AMPDU_SF_CNT_MASK	GENMASK(23, 0)
-#define MT_MIB_SDR24_RX_AMPDU_SF_CNT_MASK_MT7916	GENMASK(31, 0)
-
-/* rx ampdu valid subframe bytes count, 32bits */
-#define MT_MIB_SDR25(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR25))
-
-/* remaining windows protected stats */
-#define MT_MIB_SDR27(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR27))
-#define MT_MIB_SDR27_TX_RWP_FAIL_CNT_MASK	GENMASK(15, 0)
-
-#define MT_MIB_SDR28(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR28))
-#define MT_MIB_SDR28_TX_RWP_NEED_CNT_MASK	GENMASK(15, 0)
-
-#define MT_MIB_SDR29(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR29))
-#define MT_MIB_SDR29_RX_PFDROP_CNT_MASK		GENMASK(7, 0)
-#define MT_MIB_SDR29_RX_PFDROP_CNT_MASK_MT7916	GENMASK(15, 0)
-
-#define MT_MIB_SDRVEC(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDRVEC))
-#define MT_MIB_SDR30_RX_VEC_QUEUE_OVERFLOW_DROP_CNT_MASK	GENMASK(15, 0)
-#define MT_MIB_SDR30_RX_VEC_QUEUE_OVERFLOW_DROP_CNT_MASK_MT7916	GENMASK(31, 16)
-
-/* rx blockack count, 32 bits */
-#define MT_MIB_SDR31(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR31))
-
-#define MT_MIB_SDR32(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDR32))
-#define MT_MIB_SDR32_TX_PKT_EBF_CNT	GENMASK(15, 0)
-#define MT_MIB_SDR32_TX_PKT_IBF_CNT	GENMASK(31, 16)
-
-#define MT_MIB_SDR33(_band)		MT_WF_MIB(_band, 0x088)
-#define MT_MIB_SDR33_TX_PKT_IBF_CNT	GENMASK(15, 0)
-
-#define MT_MIB_SDRMUBF(_band)		MT_WF_MIB(_band, __OFFS(MIB_SDRMUBF))
-#define MT_MIB_MU_BF_TX_CNT		GENMASK(15, 0)
-
-/* 36, 37 both DNR */
-
-#define MT_MIB_DR8(_band)		MT_WF_MIB(_band, __OFFS(MIB_DR8))
-#define MT_MIB_DR9(_band)		MT_WF_MIB(_band, __OFFS(MIB_DR9))
-#define MT_MIB_DR11(_band)		MT_WF_MIB(_band, __OFFS(MIB_DR11))
-
-#define MT_MIB_MB_SDR0(_band, n)	MT_WF_MIB(_band, __OFFS(MIB_MB_SDR0) + (n))
-#define MT_MIB_RTS_RETRIES_COUNT_MASK	GENMASK(31, 16)
-#define MT_MIB_RTS_COUNT_MASK		GENMASK(15, 0)
-
-#define MT_MIB_MB_SDR1(_band, n)	MT_WF_MIB(_band, __OFFS(MIB_MB_SDR1) + (n))
-#define MT_MIB_BA_MISS_COUNT_MASK	GENMASK(15, 0)
-#define MT_MIB_ACK_FAIL_COUNT_MASK	GENMASK(31, 16)
-
-#define MT_MIB_MB_SDR2(_band, n)	MT_WF_MIB(_band, 0x518 + (n))
-#define MT_MIB_MB_BFTF(_band, n)	MT_WF_MIB(_band, 0x510 + (n))
-
-#define MT_TX_AGG_CNT(_band, n)		MT_WF_MIB(_band, __OFFS(TX_AGG_CNT) +	\
-						  ((n) << 2))
-#define MT_TX_AGG_CNT2(_band, n)	MT_WF_MIB(_band, __OFFS(TX_AGG_CNT2) +	\
-						  ((n) << 2))
-#define MT_MIB_ARNG(_band, n)		MT_WF_MIB(_band, __OFFS(MIB_ARNG) +	\
-						  ((n) << 2))
-#define MT_MIB_ARNCR_RANGE(val, n)	(((val) >> ((n) << 3)) & GENMASK(7, 0))
-
-#define MT_MIB_BFCR0(_band)		MT_WF_MIB(_band, 0x7b0)
-#define MT_MIB_BFCR0_RX_FB_HT		GENMASK(15, 0)
-#define MT_MIB_BFCR0_RX_FB_VHT		GENMASK(31, 16)
-
-#define MT_MIB_BFCR1(_band)		MT_WF_MIB(_band, 0x7b4)
-#define MT_MIB_BFCR1_RX_FB_HE		GENMASK(15, 0)
-
-#define MT_MIB_BFCR2(_band)		MT_WF_MIB(_band, 0x7b8)
-#define MT_MIB_BFCR2_BFEE_TX_FB_TRIG	GENMASK(15, 0)
-
-#define MT_MIB_BFCR7(_band)		MT_WF_MIB(_band, 0x7cc)
-#define MT_MIB_BFCR7_BFEE_TX_FB_CPL	GENMASK(15, 0)
-
-/* WTBLON TOP */
-#define MT_WTBLON_TOP_BASE		0x820d4000
-#define MT_WTBLON_TOP(ofs)		(MT_WTBLON_TOP_BASE + (ofs))
-#define MT_WTBLON_TOP_WDUCR		MT_WTBLON_TOP(__OFFS(WTBLON_TOP_WDUCR))
-#define MT_WTBLON_TOP_WDUCR_GROUP	GENMASK(2, 0)
-
-#define MT_WTBL_UPDATE			MT_WTBLON_TOP(__OFFS(WTBL_UPDATE))
-#define MT_WTBL_UPDATE_WLAN_IDX		GENMASK(9, 0)
-#define MT_WTBL_UPDATE_ADM_COUNT_CLEAR	BIT(12)
-#define MT_WTBL_UPDATE_BUSY		BIT(31)
-
-/* WTBL */
-#define MT_WTBL_BASE			0x820d8000
-#define MT_WTBL_LMAC_ID			GENMASK(14, 8)
-#define MT_WTBL_LMAC_DW			GENMASK(7, 2)
-#define MT_WTBL_LMAC_OFFS(_id, _dw)	(MT_WTBL_BASE | \
-					 FIELD_PREP(MT_WTBL_LMAC_ID, _id) | \
-					 FIELD_PREP(MT_WTBL_LMAC_DW, _dw))
-
-/* AGG: band 0(0x820e2000), band 1(0x820f2000) */
-#define MT_WF_AGG_BASE(_band)		((_band) ? 0x820f2000 : 0x820e2000)
-#define MT_WF_AGG(_band, ofs)		(MT_WF_AGG_BASE(_band) + (ofs))
-
-#define MT_AGG_AWSCR0(_band, _n)	MT_WF_AGG(_band, (__OFFS(AGG_AWSCR0) +	\
-							  (_n) * 4))
-#define MT_AGG_PCR0(_band, _n)		MT_WF_AGG(_band, (__OFFS(AGG_PCR0) +	\
-							  (_n) * 4))
-#define MT_AGG_PCR0_MM_PROT		BIT(0)
-#define MT_AGG_PCR0_GF_PROT		BIT(1)
-#define MT_AGG_PCR0_BW20_PROT		BIT(2)
-#define MT_AGG_PCR0_BW40_PROT		BIT(4)
-#define MT_AGG_PCR0_BW80_PROT		BIT(6)
-#define MT_AGG_PCR0_ERP_PROT		GENMASK(12, 8)
-#define MT_AGG_PCR0_VHT_PROT		BIT(13)
-#define MT_AGG_PCR0_PTA_WIN_DIS		BIT(15)
-
-#define MT_AGG_PCR1_RTS0_NUM_THRES	GENMASK(31, 23)
-#define MT_AGG_PCR1_RTS0_LEN_THRES	GENMASK(19, 0)
-
-#define MT_AGG_ACR0(_band)		MT_WF_AGG(_band, __OFFS(AGG_ACR0))
-#define MT_AGG_ACR_CFEND_RATE		GENMASK(13, 0)
-#define MT_AGG_ACR_BAR_RATE		GENMASK(29, 16)
-
-#define MT_AGG_ACR4(_band)		MT_WF_AGG(_band, __OFFS(AGG_ACR4))
-#define MT_AGG_ACR_PPDU_TXS2H		BIT(1)
-
-#define MT_AGG_MRCR(_band)		MT_WF_AGG(_band, __OFFS(AGG_MRCR))
-#define MT_AGG_MRCR_BAR_CNT_LIMIT		GENMASK(15, 12)
-#define MT_AGG_MRCR_LAST_RTS_CTS_RN		BIT(6)
-#define MT_AGG_MRCR_RTS_FAIL_LIMIT		GENMASK(11, 7)
-#define MT_AGG_MRCR_TXCMD_RTS_FAIL_LIMIT	GENMASK(28, 24)
-
-#define MT_AGG_ATCR1(_band)		MT_WF_AGG(_band, __OFFS(AGG_ATCR1))
-#define MT_AGG_ATCR3(_band)		MT_WF_AGG(_band, __OFFS(AGG_ATCR3))
-
-/* ARB: band 0(0x820e3000), band 1(0x820f3000) */
-#define MT_WF_ARB_BASE(_band)		((_band) ? 0x820f3000 : 0x820e3000)
-#define MT_WF_ARB(_band, ofs)		(MT_WF_ARB_BASE(_band) + (ofs))
-
-#define MT_ARB_SCR(_band)		MT_WF_ARB(_band, __OFFS(ARB_SCR))
-#define MT_ARB_SCR_TX_DISABLE		BIT(8)
-#define MT_ARB_SCR_RX_DISABLE		BIT(9)
-
-#define MT_ARB_DRNGR0(_band, _n)	MT_WF_ARB(_band, (__OFFS(ARB_DRNGR0) +	\
-							  (_n) * 4))
-
-/* RMAC: band 0(0x820e5000), band 1(0x820f5000) */
-#define MT_WF_RMAC_BASE(_band)		((_band) ? 0x820f5000 : 0x820e5000)
-#define MT_WF_RMAC(_band, ofs)		(MT_WF_RMAC_BASE(_band) + (ofs))
-
-#define MT_WF_RFCR(_band)		MT_WF_RMAC(_band, 0x000)
-#define MT_WF_RFCR_DROP_STBC_MULTI	BIT(0)
-#define MT_WF_RFCR_DROP_FCSFAIL		BIT(1)
-#define MT_WF_RFCR_DROP_VERSION		BIT(3)
-#define MT_WF_RFCR_DROP_PROBEREQ	BIT(4)
-#define MT_WF_RFCR_DROP_MCAST		BIT(5)
-#define MT_WF_RFCR_DROP_BCAST		BIT(6)
-#define MT_WF_RFCR_DROP_MCAST_FILTERED	BIT(7)
-#define MT_WF_RFCR_DROP_A3_MAC		BIT(8)
-#define MT_WF_RFCR_DROP_A3_BSSID	BIT(9)
-#define MT_WF_RFCR_DROP_A2_BSSID	BIT(10)
-#define MT_WF_RFCR_DROP_OTHER_BEACON	BIT(11)
-#define MT_WF_RFCR_DROP_FRAME_REPORT	BIT(12)
-#define MT_WF_RFCR_DROP_CTL_RSV		BIT(13)
-#define MT_WF_RFCR_DROP_CTS		BIT(14)
-#define MT_WF_RFCR_DROP_RTS		BIT(15)
-#define MT_WF_RFCR_DROP_DUPLICATE	BIT(16)
-#define MT_WF_RFCR_DROP_OTHER_BSS	BIT(17)
-#define MT_WF_RFCR_DROP_OTHER_UC	BIT(18)
-#define MT_WF_RFCR_DROP_OTHER_TIM	BIT(19)
-#define MT_WF_RFCR_DROP_NDPA		BIT(20)
-#define MT_WF_RFCR_DROP_UNWANTED_CTL	BIT(21)
-
-#define MT_WF_RFCR1(_band)		MT_WF_RMAC(_band, 0x004)
-#define MT_WF_RFCR1_DROP_ACK		BIT(4)
-#define MT_WF_RFCR1_DROP_BF_POLL	BIT(5)
-#define MT_WF_RFCR1_DROP_BA		BIT(6)
-#define MT_WF_RFCR1_DROP_CFEND		BIT(7)
-#define MT_WF_RFCR1_DROP_CFACK		BIT(8)
-
-#define MT_WF_RMAC_MIB_AIRTIME0(_band)	MT_WF_RMAC(_band, 0x0380)
-#define MT_WF_RMAC_MIB_RXTIME_CLR	BIT(31)
-
-/* WFDMA0 */
-#define MT_WFDMA0_BASE			__REG(WFDMA0_ADDR)
-#define MT_WFDMA0(ofs)			(MT_WFDMA0_BASE + (ofs))
-
-#define MT_WFDMA0_RST			MT_WFDMA0(0x100)
-#define MT_WFDMA0_RST_LOGIC_RST		BIT(4)
-#define MT_WFDMA0_RST_DMASHDL_ALL_RST	BIT(5)
-
-#define MT_WFDMA0_BUSY_ENA		MT_WFDMA0(0x13c)
-#define MT_WFDMA0_BUSY_ENA_TX_FIFO0	BIT(0)
-#define MT_WFDMA0_BUSY_ENA_TX_FIFO1	BIT(1)
-#define MT_WFDMA0_BUSY_ENA_RX_FIFO	BIT(2)
-
-#define MT_WFDMA0_GLO_CFG		MT_WFDMA0(0x208)
-#define MT_WFDMA0_GLO_CFG_TX_DMA_EN	BIT(0)
-#define MT_WFDMA0_GLO_CFG_RX_DMA_EN	BIT(2)
-#define MT_WFDMA0_GLO_CFG_OMIT_TX_INFO	BIT(28)
-#define MT_WFDMA0_GLO_CFG_OMIT_RX_INFO	BIT(27)
-#define MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2	BIT(21)
-
-#define MT_WFDMA0_RST_DTX_PTR		MT_WFDMA0(0x20c)
-#define MT_WFDMA0_PRI_DLY_INT_CFG0	MT_WFDMA0(0x2f0)
-#define MT_WFDMA0_PRI_DLY_INT_CFG1	MT_WFDMA0(0x2f4)
-#define MT_WFDMA0_PRI_DLY_INT_CFG2	MT_WFDMA0(0x2f8)
-
-/* WFDMA1 */
-#define MT_WFDMA1_BASE			0xd5000
-#define MT_WFDMA1(ofs)			(MT_WFDMA1_BASE + (ofs))
-
-#define MT_WFDMA1_RST			MT_WFDMA1(0x100)
-#define MT_WFDMA1_RST_LOGIC_RST		BIT(4)
-#define MT_WFDMA1_RST_DMASHDL_ALL_RST	BIT(5)
-
-#define MT_WFDMA1_BUSY_ENA		MT_WFDMA1(0x13c)
-#define MT_WFDMA1_BUSY_ENA_TX_FIFO0	BIT(0)
-#define MT_WFDMA1_BUSY_ENA_TX_FIFO1	BIT(1)
-#define MT_WFDMA1_BUSY_ENA_RX_FIFO	BIT(2)
-
-#define MT_WFDMA1_GLO_CFG		MT_WFDMA1(0x208)
-#define MT_WFDMA1_GLO_CFG_TX_DMA_EN	BIT(0)
-#define MT_WFDMA1_GLO_CFG_RX_DMA_EN	BIT(2)
-#define MT_WFDMA1_GLO_CFG_OMIT_TX_INFO	BIT(28)
-#define MT_WFDMA1_GLO_CFG_OMIT_RX_INFO	BIT(27)
-#define MT_WFDMA1_GLO_CFG_OMIT_RX_INFO_PFET2	BIT(21)
-
-#define MT_WFDMA1_RST_DTX_PTR		MT_WFDMA1(0x20c)
-#define MT_WFDMA1_PRI_DLY_INT_CFG0	MT_WFDMA1(0x2f0)
-
-/* WFDMA CSR */
-#define MT_WFDMA_EXT_CSR_BASE		__REG(WFDMA_EXT_CSR_ADDR)
-#define MT_WFDMA_EXT_CSR_PHYS_BASE	0x18027000
-#define MT_WFDMA_EXT_CSR(ofs)		(MT_WFDMA_EXT_CSR_BASE + (ofs))
-#define MT_WFDMA_EXT_CSR_PHYS(ofs)	(MT_WFDMA_EXT_CSR_PHYS_BASE + (ofs))
-
-#define MT_WFDMA_HOST_CONFIG		MT_WFDMA_EXT_CSR_PHYS(0x30)
-#define MT_WFDMA_HOST_CONFIG_PDMA_BAND	BIT(0)
-#define MT_WFDMA_HOST_CONFIG_WED	BIT(1)
-
-#define MT_WFDMA_WED_RING_CONTROL	MT_WFDMA_EXT_CSR_PHYS(0x34)
-#define MT_WFDMA_WED_RING_CONTROL_TX0	GENMASK(4, 0)
-#define MT_WFDMA_WED_RING_CONTROL_TX1	GENMASK(12, 8)
-#define MT_WFDMA_WED_RING_CONTROL_RX1	GENMASK(20, 16)
-
-#define MT_WFDMA_EXT_CSR_HIF_MISC	MT_WFDMA_EXT_CSR_PHYS(0x44)
-#define MT_WFDMA_EXT_CSR_HIF_MISC_BUSY	BIT(0)
-
-#define MT_PCIE_RECOG_ID		0xd7090
-#define MT_PCIE_RECOG_ID_MASK		GENMASK(30, 0)
-#define MT_PCIE_RECOG_ID_SEM		BIT(31)
-
-#define MT_INT_WED_SOURCE_CSR		MT_WFDMA_EXT_CSR(0x200)
-#define MT_INT_WED_MASK_CSR		MT_WFDMA_EXT_CSR(0x204)
-
-#define MT_WED_TX_RING_BASE		MT_WFDMA_EXT_CSR(0x300)
-#define MT_WED_RX_RING_BASE		MT_WFDMA_EXT_CSR(0x400)
-
-/* WFDMA0 PCIE1 */
-#define MT_WFDMA0_PCIE1_BASE		__REG(WFDMA0_PCIE1_ADDR)
-#define MT_WFDMA0_PCIE1(ofs)		(MT_WFDMA0_PCIE1_BASE + (ofs))
-
-#define MT_WFDMA0_PCIE1_BUSY_ENA	MT_WFDMA0_PCIE1(0x13c)
-#define MT_WFDMA0_PCIE1_BUSY_ENA_TX_FIFO0	BIT(0)
-#define MT_WFDMA0_PCIE1_BUSY_ENA_TX_FIFO1	BIT(1)
-#define MT_WFDMA0_PCIE1_BUSY_ENA_RX_FIFO	BIT(2)
-
-/* WFDMA1 PCIE1 */
-#define MT_WFDMA1_PCIE1_BASE		0xd9000
-#define MT_WFDMA1_PCIE1(ofs)		(MT_WFDMA1_PCIE1_BASE + (ofs))
-
-#define MT_WFDMA1_PCIE1_BUSY_ENA	MT_WFDMA1_PCIE1(0x13c)
-#define MT_WFDMA1_PCIE1_BUSY_ENA_TX_FIFO0	BIT(0)
-#define MT_WFDMA1_PCIE1_BUSY_ENA_TX_FIFO1	BIT(1)
-#define MT_WFDMA1_PCIE1_BUSY_ENA_RX_FIFO	BIT(2)
-
-/* WFDMA COMMON */
-#define __RXQ(q)			((q) + __MT_MCUQ_MAX)
-#define __TXQ(q)			(__RXQ(q) + MT_RXQ_BAND2)
-
-#define MT_Q_ID(q)			(dev->q_id[(q)])
-#define MT_Q_BASE(q)			((dev->wfdma_mask >> (q)) & 0x1 ?	\
-					 MT_WFDMA1_BASE : MT_WFDMA0_BASE)
-
-#define MT_MCUQ_ID(q)			MT_Q_ID(q)
-#define MT_TXQ_ID(q)			MT_Q_ID(__TXQ(q))
-#define MT_RXQ_ID(q)			MT_Q_ID(__RXQ(q))
-
-#define MT_MCUQ_RING_BASE(q)		(MT_Q_BASE(q) + 0x300)
-#define MT_TXQ_RING_BASE(q)		(MT_Q_BASE(__TXQ(q)) + 0x300)
-#define MT_RXQ_RING_BASE(q)		(MT_Q_BASE(__RXQ(q)) + 0x500)
-
-#define MT_MCUQ_EXT_CTRL(q)		(MT_Q_BASE(q) +	0x600 +	\
-					 MT_MCUQ_ID(q)* 0x4)
-#define MT_RXQ_BAND1_CTRL(q)		(MT_Q_BASE(__RXQ(q)) + 0x680 +	\
-					 MT_RXQ_ID(q)* 0x4)
-#define MT_TXQ_EXT_CTRL(q)		(MT_Q_BASE(__TXQ(q)) + 0x600 +	\
-					 MT_TXQ_ID(q)* 0x4)
-
-#define MT_TXQ_WED_RING_BASE		__REG(TXQ_WED_RING_BASE)
-#define MT_RXQ_WED_RING_BASE		__REG(RXQ_WED_RING_BASE)
-
-#define MT_INT_SOURCE_CSR		__REG(INT_SOURCE_CSR)
-#define MT_INT_MASK_CSR			__REG(INT_MASK_CSR)
-
-#define MT_INT1_SOURCE_CSR		__REG(INT1_SOURCE_CSR)
-#define MT_INT1_MASK_CSR		__REG(INT1_MASK_CSR)
-
-#define MT_INT_RX_DONE_BAND0		BIT(16)
-#define MT_INT_RX_DONE_BAND1		BIT(17)
-#define MT_INT_RX_DONE_WM		BIT(0)
-#define MT_INT_RX_DONE_WA		BIT(1)
-#define MT_INT_RX_DONE_WA_MAIN		BIT(1)
-#define MT_INT_RX_DONE_WA_EXT		BIT(2)
-#define MT_INT_MCU_CMD			BIT(29)
-#define MT_INT_RX_DONE_BAND0_MT7916	BIT(22)
-#define MT_INT_RX_DONE_BAND1_MT7916	BIT(23)
-#define MT_INT_RX_DONE_WA_MAIN_MT7916	BIT(2)
-#define MT_INT_RX_DONE_WA_EXT_MT7916	BIT(3)
-
-#define MT_INT_WED_RX_DONE_BAND0_MT7916		BIT(18)
-#define MT_INT_WED_RX_DONE_BAND1_MT7916		BIT(19)
-#define MT_INT_WED_RX_DONE_WA_MAIN_MT7916	BIT(1)
-#define MT_INT_WED_RX_DONE_WA_MT7916		BIT(17)
-
-#define MT_INT_RX(q)			(dev->q_int_mask[__RXQ(q)])
-#define MT_INT_TX_MCU(q)		(dev->q_int_mask[(q)])
-
-#define MT_INT_RX_DONE_MCU		(MT_INT_RX(MT_RXQ_MCU) |	\
-					 MT_INT_RX(MT_RXQ_MCU_WA))
-
-#define MT_INT_BAND0_RX_DONE		(MT_INT_RX(MT_RXQ_MAIN) |	\
-					 MT_INT_RX(MT_RXQ_MAIN_WA))
-
-#define MT_INT_BAND1_RX_DONE		(MT_INT_RX(MT_RXQ_BAND1) |	\
-					 MT_INT_RX(MT_RXQ_BAND1_WA) |	\
-					 MT_INT_RX(MT_RXQ_MAIN_WA))
-
-#define MT_INT_RX_DONE_ALL		(MT_INT_RX_DONE_MCU |		\
-					 MT_INT_BAND0_RX_DONE |		\
-					 MT_INT_BAND1_RX_DONE)
-
-#define MT_INT_TX_DONE_FWDL		BIT(26)
-#define MT_INT_TX_DONE_MCU_WM		BIT(27)
-#define MT_INT_TX_DONE_MCU_WA		BIT(15)
-#define MT_INT_TX_DONE_BAND0		BIT(30)
-#define MT_INT_TX_DONE_BAND1		BIT(31)
-#define MT_INT_TX_DONE_MCU_WA_MT7916	BIT(25)
-#define MT_INT_WED_TX_DONE_BAND0	BIT(4)
-#define MT_INT_WED_TX_DONE_BAND1	BIT(5)
-
-#define MT_INT_TX_DONE_MCU		(MT_INT_TX_MCU(MT_MCUQ_WA) |	\
-					 MT_INT_TX_MCU(MT_MCUQ_WM) |	\
-					 MT_INT_TX_MCU(MT_MCUQ_FWDL))
-
-#define MT_MCU_CMD			__REG(INT_MCU_CMD_SOURCE)
-#define MT_MCU_CMD_STOP_DMA_FW_RELOAD	BIT(1)
-#define MT_MCU_CMD_STOP_DMA		BIT(2)
-#define MT_MCU_CMD_RESET_DONE		BIT(3)
-#define MT_MCU_CMD_RECOVERY_DONE	BIT(4)
-#define MT_MCU_CMD_NORMAL_STATE		BIT(5)
-#define MT_MCU_CMD_ERROR_MASK		GENMASK(5, 1)
-
-/* TOP RGU */
-#define MT_TOP_RGU_BASE			0x18000000
-#define MT_TOP_PWR_CTRL			(MT_TOP_RGU_BASE + (0x0))
-#define MT_TOP_PWR_KEY			(0x5746 << 16)
-#define MT_TOP_PWR_SW_RST		BIT(0)
-#define MT_TOP_PWR_SW_PWR_ON		GENMASK(3, 2)
-#define MT_TOP_PWR_HW_CTRL		BIT(4)
-#define MT_TOP_PWR_PWR_ON		BIT(7)
-
-#define MT_TOP_RGU_SYSRAM_PDN		(MT_TOP_RGU_BASE + 0x050)
-#define MT_TOP_RGU_SYSRAM_SLP		(MT_TOP_RGU_BASE + 0x054)
-#define MT_TOP_WFSYS_PWR		(MT_TOP_RGU_BASE + 0x010)
-#define MT_TOP_PWR_EN_MASK		BIT(7)
-#define MT_TOP_PWR_ACK_MASK		BIT(6)
-#define MT_TOP_PWR_KEY_MASK		GENMASK(31, 16)
-
-#define MT7986_TOP_WM_RESET		(MT_TOP_RGU_BASE + 0x120)
-#define MT7986_TOP_WM_RESET_MASK	BIT(0)
-
-/* l1/l2 remap */
-#define MT_HIF_REMAP_L1			0xf11ac
-#define MT_HIF_REMAP_L1_MT7916		0xfe260
-#define MT_HIF_REMAP_L1_MASK		GENMASK(15, 0)
-#define MT_HIF_REMAP_L1_OFFSET		GENMASK(15, 0)
-#define MT_HIF_REMAP_L1_BASE		GENMASK(31, 16)
-#define MT_HIF_REMAP_BASE_L1		0xe0000
-
-#define MT_HIF_REMAP_L2			0xf11b0
-#define MT_HIF_REMAP_L2_MASK		GENMASK(19, 0)
-#define MT_HIF_REMAP_L2_OFFSET		GENMASK(11, 0)
-#define MT_HIF_REMAP_L2_BASE		GENMASK(31, 12)
-#define MT_HIF_REMAP_L2_MT7916		0x1b8
-#define MT_HIF_REMAP_L2_MASK_MT7916	GENMASK(31, 16)
-#define MT_HIF_REMAP_L2_OFFSET_MT7916	GENMASK(15, 0)
-#define MT_HIF_REMAP_L2_BASE_MT7916	GENMASK(31, 16)
-#define MT_HIF_REMAP_BASE_L2_MT7916	0x40000
-
-#define MT_INFRA_BASE			0x18000000
-#define MT_WFSYS0_PHY_START		0x18400000
-#define MT_WFSYS1_PHY_START		0x18800000
-#define MT_WFSYS1_PHY_END		0x18bfffff
-#define MT_CBTOP1_PHY_START		0x70000000
-#define MT_CBTOP1_PHY_END		__REG(CBTOP1_PHY_END)
-#define MT_CBTOP2_PHY_START		0xf0000000
-#define MT_CBTOP2_PHY_END		0xffffffff
-#define MT_INFRA_MCU_START		0x7c000000
-#define MT_INFRA_MCU_END		__REG(INFRA_MCU_ADDR_END)
-#define MT_CONN_INFRA_OFFSET(p)		((p) - MT_INFRA_BASE)
-
-/* CONN INFRA CFG */
-#define MT_CONN_INFRA_BASE		0x18001000
-#define MT_CONN_INFRA(ofs)		(MT_CONN_INFRA_BASE + (ofs))
-
-#define MT_CONN_INFRA_EFUSE		MT_CONN_INFRA(0x020)
-
-#define MT_CONN_INFRA_ADIE_RESET	MT_CONN_INFRA(0x030)
-#define MT_CONN_INFRA_ADIE1_RESET_MASK	BIT(0)
-#define MT_CONN_INFRA_ADIE2_RESET_MASK	BIT(2)
-
-#define MT_CONN_INFRA_OSC_RC_EN		MT_CONN_INFRA(0x380)
-
-#define MT_CONN_INFRA_OSC_CTRL		MT_CONN_INFRA(0x300)
-#define MT_CONN_INFRA_OSC_RC_EN_MASK	BIT(7)
-#define MT_CONN_INFRA_OSC_STB_TIME_MASK	GENMASK(23, 0)
-
-#define MT_CONN_INFRA_HW_CTRL		MT_CONN_INFRA(0x200)
-#define MT_CONN_INFRA_HW_CTRL_MASK	BIT(0)
-
-#define MT_CONN_INFRA_WF_SLP_PROT	MT_CONN_INFRA(0x540)
-#define MT_CONN_INFRA_WF_SLP_PROT_MASK	BIT(0)
-
-#define MT_CONN_INFRA_WF_SLP_PROT_RDY	MT_CONN_INFRA(0x544)
-#define MT_CONN_INFRA_CONN_WF_MASK	(BIT(29) | BIT(31))
-#define MT_CONN_INFRA_CONN		(BIT(25) | BIT(29) | BIT(31))
-
-#define MT_CONN_INFRA_EMI_REQ		MT_CONN_INFRA(0x414)
-#define MT_CONN_INFRA_EMI_REQ_MASK	BIT(0)
-#define MT_CONN_INFRA_INFRA_REQ_MASK	BIT(5)
-
-/* AFE */
-#define MT_AFE_CTRL_BASE(_band)		(0x18003000 + ((_band) << 19))
-#define MT_AFE_CTRL(_band, ofs)		(MT_AFE_CTRL_BASE(_band) + (ofs))
-
-#define MT_AFE_DIG_EN_01(_band)		MT_AFE_CTRL(_band, 0x00)
-#define MT_AFE_DIG_EN_02(_band)		MT_AFE_CTRL(_band, 0x04)
-#define MT_AFE_DIG_EN_03(_band)		MT_AFE_CTRL(_band, 0x08)
-#define MT_AFE_DIG_TOP_01(_band)	MT_AFE_CTRL(_band, 0x0c)
-
-#define MT_AFE_PLL_STB_TIME(_band)	MT_AFE_CTRL(_band, 0xf4)
-#define MT_AFE_PLL_STB_TIME_MASK	(GENMASK(30, 16) | GENMASK(14, 0))
-#define MT_AFE_PLL_STB_TIME_VAL		(FIELD_PREP(GENMASK(30, 16), 0x4bc) | \
-					 FIELD_PREP(GENMASK(14, 0), 0x7e4))
-#define MT_AFE_BPLL_CFG_MASK		GENMASK(7, 6)
-#define MT_AFE_WPLL_CFG_MASK		GENMASK(1, 0)
-#define MT_AFE_MCU_WPLL_CFG_MASK	GENMASK(3, 2)
-#define MT_AFE_MCU_BPLL_CFG_MASK	GENMASK(17, 16)
-#define MT_AFE_PLL_CFG_MASK		(MT_AFE_BPLL_CFG_MASK | \
-					 MT_AFE_WPLL_CFG_MASK | \
-					 MT_AFE_MCU_WPLL_CFG_MASK | \
-					 MT_AFE_MCU_BPLL_CFG_MASK)
-#define MT_AFE_PLL_CFG_VAL		(FIELD_PREP(MT_AFE_BPLL_CFG_MASK, 0x1) | \
-					 FIELD_PREP(MT_AFE_WPLL_CFG_MASK, 0x2) | \
-					 FIELD_PREP(MT_AFE_MCU_WPLL_CFG_MASK, 0x1) | \
-					 FIELD_PREP(MT_AFE_MCU_BPLL_CFG_MASK, 0x2))
-
-#define MT_AFE_DIG_TOP_01_MASK		GENMASK(18, 15)
-#define MT_AFE_DIG_TOP_01_VAL		FIELD_PREP(MT_AFE_DIG_TOP_01_MASK, 0x9)
-
-#define MT_AFE_RG_WBG_EN_RCK_MASK	BIT(0)
-#define MT_AFE_RG_WBG_EN_BPLL_UP_MASK	BIT(21)
-#define MT_AFE_RG_WBG_EN_WPLL_UP_MASK	BIT(20)
-#define MT_AFE_RG_WBG_EN_PLL_UP_MASK	(MT_AFE_RG_WBG_EN_BPLL_UP_MASK | \
-					 MT_AFE_RG_WBG_EN_WPLL_UP_MASK)
-#define MT_AFE_RG_WBG_EN_TXCAL_MASK	GENMASK(21, 17)
-
-#define MT_ADIE_SLP_CTRL_BASE(_band)	(0x18005000 + ((_band) << 19))
-#define MT_ADIE_SLP_CTRL(_band, ofs)	(MT_ADIE_SLP_CTRL_BASE(_band) + (ofs))
-
-#define MT_ADIE_SLP_CTRL_CK0(_band)	MT_ADIE_SLP_CTRL(_band, 0x120)
-
-/* ADIE */
-#define MT_ADIE_CHIP_ID			0x02c
-#define MT_ADIE_VERSION_MASK		GENMASK(15, 0)
-#define MT_ADIE_CHIP_ID_MASK		GENMASK(31, 16)
-#define MT_ADIE_IDX0			GENMASK(15, 0)
-#define MT_ADIE_IDX1			GENMASK(31, 16)
-
-#define MT_ADIE_RG_TOP_THADC_BG		0x034
-#define MT_ADIE_VRPI_SEL_CR_MASK	GENMASK(15, 12)
-#define MT_ADIE_VRPI_SEL_EFUSE_MASK	GENMASK(6, 3)
-
-#define MT_ADIE_RG_TOP_THADC		0x038
-#define MT_ADIE_PGA_GAIN_MASK		GENMASK(25, 23)
-#define MT_ADIE_PGA_GAIN_EFUSE_MASK	GENMASK(2, 0)
-#define MT_ADIE_LDO_CTRL_MASK		GENMASK(27, 26)
-#define MT_ADIE_LDO_CTRL_EFUSE_MASK	GENMASK(6, 5)
-
-#define MT_AFE_RG_ENCAL_WBTAC_IF_SW	0x070
-#define MT_ADIE_EFUSE_RDATA0		0x130
-
-#define MT_ADIE_EFUSE2_CTRL		0x148
-#define MT_ADIE_EFUSE_CTRL_MASK		BIT(1)
-
-#define MT_ADIE_EFUSE_CFG		0x144
-#define MT_ADIE_EFUSE_MODE_MASK		GENMASK(7, 6)
-#define MT_ADIE_EFUSE_ADDR_MASK		GENMASK(25, 16)
-#define MT_ADIE_EFUSE_VALID_MASK	BIT(29)
-#define MT_ADIE_EFUSE_KICK_MASK		BIT(30)
-
-#define MT_ADIE_THADC_ANALOG		0x3a6
-
-#define MT_ADIE_THADC_SLOP		0x3a7
-#define MT_ADIE_ANA_EN_MASK		BIT(7)
-
-#define MT_ADIE_7975_XTAL_CAL		0x3a1
-#define MT_ADIE_TRIM_MASK		GENMASK(6, 0)
-#define MT_ADIE_EFUSE_TRIM_MASK		GENMASK(5, 0)
-#define MT_ADIE_XO_TRIM_EN_MASK		BIT(7)
-#define MT_ADIE_XTAL_DECREASE_MASK	BIT(6)
-
-#define MT_ADIE_7975_XO_TRIM2		0x3a2
-#define MT_ADIE_7975_XO_TRIM3		0x3a3
-#define MT_ADIE_7975_XO_TRIM4		0x3a4
-#define MT_ADIE_7975_XTAL_EN		0x3a5
-
-#define MT_ADIE_XO_TRIM_FLOW		0x3ac
-#define MT_ADIE_XTAL_AXM_80M_OSC	0x390
-#define MT_ADIE_XTAL_AXM_40M_OSC	0x391
-#define MT_ADIE_XTAL_TRIM1_80M_OSC	0x398
-#define MT_ADIE_XTAL_TRIM1_40M_OSC	0x399
-#define MT_ADIE_WRI_CK_SEL		0x4ac
-#define MT_ADIE_RG_STRAP_PIN_IN		0x4fc
-#define MT_ADIE_XTAL_C1			0x654
-#define MT_ADIE_XTAL_C2			0x658
-#define MT_ADIE_RG_XO_01		0x65c
-#define MT_ADIE_RG_XO_03		0x664
-
-#define MT_ADIE_CLK_EN			0xa00
-
-#define MT_ADIE_7975_XTAL		0xa18
-#define MT_ADIE_7975_XTAL_EN_MASK	BIT(29)
-
-#define MT_ADIE_7975_COCLK		0xa1c
-#define MT_ADIE_7975_XO_2		0xa84
-#define MT_ADIE_7975_XO_2_FIX_EN	BIT(31)
-
-#define MT_ADIE_7975_XO_CTRL2		0xa94
-#define MT_ADIE_7975_XO_CTRL2_C1_MASK	GENMASK(26, 20)
-#define MT_ADIE_7975_XO_CTRL2_C2_MASK	GENMASK(18, 12)
-#define MT_ADIE_7975_XO_CTRL2_MASK	(MT_ADIE_7975_XO_CTRL2_C1_MASK | \
-					 MT_ADIE_7975_XO_CTRL2_C2_MASK)
-
-#define MT_ADIE_7975_XO_CTRL6		0xaa4
-#define MT_ADIE_7975_XO_CTRL6_MASK	BIT(16)
-
-/* TOP SPI */
-#define MT_TOP_SPI_ADIE_BASE(_band)	(0x18004000 + ((_band) << 19))
-#define MT_TOP_SPI_ADIE(_band, ofs)	(MT_TOP_SPI_ADIE_BASE(_band) + (ofs))
-
-#define MT_TOP_SPI_BUSY_CR(_band)	MT_TOP_SPI_ADIE(_band, 0)
-#define MT_TOP_SPI_POLLING_BIT		BIT(5)
-
-#define MT_TOP_SPI_ADDR_CR(_band)	MT_TOP_SPI_ADIE(_band, 0x50)
-#define MT_TOP_SPI_READ_ADDR_FORMAT	(BIT(12) | BIT(13) | BIT(15))
-#define MT_TOP_SPI_WRITE_ADDR_FORMAT	(BIT(13) | BIT(15))
-
-#define MT_TOP_SPI_WRITE_DATA_CR(_band)	MT_TOP_SPI_ADIE(_band, 0x54)
-#define MT_TOP_SPI_READ_DATA_CR(_band)	MT_TOP_SPI_ADIE(_band, 0x58)
-
-/* CONN INFRA CKGEN */
-#define MT_INFRA_CKGEN_BASE		0x18009000
-#define MT_INFRA_CKGEN(ofs)		(MT_INFRA_CKGEN_BASE + (ofs))
-
-#define MT_INFRA_CKGEN_BUS		MT_INFRA_CKGEN(0xa00)
-#define MT_INFRA_CKGEN_BUS_CLK_SEL_MASK	BIT(23)
-#define MT_INFRA_CKGEN_BUS_RDY_SEL_MASK	BIT(29)
-
-#define MT_INFRA_CKGEN_BUS_WPLL_DIV_1	MT_INFRA_CKGEN(0x008)
-#define MT_INFRA_CKGEN_BUS_WPLL_DIV_2	MT_INFRA_CKGEN(0x00c)
-
-#define MT_INFRA_CKGEN_RFSPI_WPLL_DIV	MT_INFRA_CKGEN(0x040)
-#define MT_INFRA_CKGEN_DIV_SEL_MASK	GENMASK(7, 2)
-#define MT_INFRA_CKGEN_DIV_EN_MASK	BIT(0)
-
-/* CONN INFRA BUS */
-#define MT_INFRA_BUS_BASE		0x1800e000
-#define MT_INFRA_BUS(ofs)		(MT_INFRA_BUS_BASE + (ofs))
-
-#define MT_INFRA_BUS_OFF_TIMEOUT	MT_INFRA_BUS(0x300)
-#define MT_INFRA_BUS_TIMEOUT_LIMIT_MASK	GENMASK(14, 7)
-#define MT_INFRA_BUS_TIMEOUT_EN_MASK	GENMASK(3, 0)
-
-#define MT_INFRA_BUS_ON_TIMEOUT		MT_INFRA_BUS(0x31c)
-#define MT_INFRA_BUS_EMI_START		MT_INFRA_BUS(0x360)
-#define MT_INFRA_BUS_EMI_END		MT_INFRA_BUS(0x364)
-
-/* CONN_INFRA_SKU */
-#define MT_CONNINFRA_SKU_DEC_ADDR	0x18050000
-#define MT_CONNINFRA_SKU_MASK		GENMASK(15, 0)
-#define MT_ADIE_TYPE_MASK		BIT(1)
-
-/* FW MODE SYNC */
-#define MT_FW_EXCEPTION			__REG(FW_EXCEPTION_ADDR)
-
-#define MT_SWDEF_BASE			__REG(SWDEF_BASE_ADDR)
-
-#define MT_SWDEF(ofs)			(MT_SWDEF_BASE + (ofs))
-#define MT_SWDEF_MODE			MT_SWDEF(0x3c)
-#define MT_SWDEF_NORMAL_MODE		0
-#define MT_SWDEF_ICAP_MODE		1
-#define MT_SWDEF_SPECTRUM_MODE		2
-
-#define MT_SWDEF_SER_STATS		MT_SWDEF(0x040)
-#define MT_SWDEF_PLE_STATS		MT_SWDEF(0x044)
-#define MT_SWDEF_PLE1_STATS		MT_SWDEF(0x048)
-#define MT_SWDEF_PLE_AMSDU_STATS	MT_SWDEF(0x04C)
-#define MT_SWDEF_PSE_STATS		MT_SWDEF(0x050)
-#define MT_SWDEF_PSE1_STATS		MT_SWDEF(0x054)
-#define MT_SWDEF_LAMC_WISR6_BN0_STATS	MT_SWDEF(0x058)
-#define MT_SWDEF_LAMC_WISR6_BN1_STATS	MT_SWDEF(0x05C)
-#define MT_SWDEF_LAMC_WISR7_BN0_STATS	MT_SWDEF(0x060)
-#define MT_SWDEF_LAMC_WISR7_BN1_STATS	MT_SWDEF(0x064)
-
-#define MT_DIC_CMD_REG_BASE		0x41f000
-#define MT_DIC_CMD_REG(ofs)		(MT_DIC_CMD_REG_BASE + (ofs))
-#define MT_DIC_CMD_REG_CMD		MT_DIC_CMD_REG(0x10)
-
-#define MT_CPU_UTIL_BASE		0x41f030
-#define MT_CPU_UTIL(ofs)		(MT_CPU_UTIL_BASE + (ofs))
-#define MT_CPU_UTIL_BUSY_PCT		MT_CPU_UTIL(0x00)
-#define MT_CPU_UTIL_PEAK_BUSY_PCT	MT_CPU_UTIL(0x04)
-#define MT_CPU_UTIL_IDLE_CNT		MT_CPU_UTIL(0x08)
-#define MT_CPU_UTIL_PEAK_IDLE_CNT	MT_CPU_UTIL(0x0c)
-#define MT_CPU_UTIL_CTRL		MT_CPU_UTIL(0x1c)
-
-/* LED */
-#define MT_LED_TOP_BASE			0x18013000
-#define MT_LED_PHYS(_n)			(MT_LED_TOP_BASE + (_n))
-
-#define MT_LED_CTRL(_n)			MT_LED_PHYS(0x00 + ((_n) * 4))
-#define MT_LED_CTRL_KICK		BIT(7)
-#define MT_LED_CTRL_BLINK_MODE		BIT(2)
-#define MT_LED_CTRL_POLARITY		BIT(1)
-
-#define MT_LED_TX_BLINK(_n)		MT_LED_PHYS(0x10 + ((_n) * 4))
-#define MT_LED_TX_BLINK_ON_MASK		GENMASK(7, 0)
-#define MT_LED_TX_BLINK_OFF_MASK        GENMASK(15, 8)
-
-#define MT_LED_EN(_n)			MT_LED_PHYS(0x40 + ((_n) * 4))
-
-#define MT_LED_GPIO_MUX2                0x70005058 /* GPIO 18 */
-#define MT_LED_GPIO_MUX3                0x7000505C /* GPIO 26 */
-#define MT_LED_GPIO_SEL_MASK            GENMASK(11, 8)
-
-/* MT TOP */
-#define MT_TOP_BASE			0x18060000
-#define MT_TOP(ofs)			(MT_TOP_BASE + (ofs))
-
-#define MT_TOP_LPCR_HOST_BAND(_band)	MT_TOP(0x10 + ((_band) * 0x10))
-#define MT_TOP_LPCR_HOST_FW_OWN		BIT(0)
-#define MT_TOP_LPCR_HOST_DRV_OWN	BIT(1)
-#define MT_TOP_LPCR_HOST_FW_OWN_STAT	BIT(2)
-
-#define MT_TOP_LPCR_HOST_BAND_IRQ_STAT(_band)	MT_TOP(0x14 + ((_band) * 0x10))
-#define MT_TOP_LPCR_HOST_BAND_STAT	BIT(0)
-
-#define MT_TOP_MISC			MT_TOP(0xf0)
-#define MT_TOP_MISC_FW_STATE		GENMASK(2, 0)
-
-#define MT_TOP_WFSYS_WAKEUP		MT_TOP(0x1a4)
-#define MT_TOP_WFSYS_WAKEUP_MASK	BIT(0)
-
-#define MT_TOP_MCU_EMI_BASE		MT_TOP(0x1c4)
-#define MT_TOP_MCU_EMI_BASE_MASK	GENMASK(19, 0)
-
-#define MT_TOP_CONN_INFRA_WAKEUP	MT_TOP(0x1a0)
-#define MT_TOP_CONN_INFRA_WAKEUP_MASK	BIT(0)
-
-#define MT_TOP_WFSYS_RESET_STATUS	MT_TOP(0x2cc)
-#define MT_TOP_WFSYS_RESET_STATUS_MASK	BIT(30)
-
-/* SEMA */
-#define MT_SEMA_BASE			0x18070000
-#define MT_SEMA(ofs)			(MT_SEMA_BASE + (ofs))
-
-#define MT_SEMA_RFSPI_STATUS		(MT_SEMA(0x2000) + (11 * 4))
-#define MT_SEMA_RFSPI_RELEASE		(MT_SEMA(0x2200) + (11 * 4))
-#define MT_SEMA_RFSPI_STATUS_MASK	BIT(1)
-
-/* MCU BUS */
-#define MT_MCU_BUS_BASE			0x18400000
-#define MT_MCU_BUS(ofs)			(MT_MCU_BUS_BASE + (ofs))
-
-#define MT_MCU_BUS_TIMEOUT		MT_MCU_BUS(0xf0440)
-#define MT_MCU_BUS_TIMEOUT_SET_MASK	GENMASK(7, 0)
-#define MT_MCU_BUS_TIMEOUT_CG_EN_MASK	BIT(28)
-#define MT_MCU_BUS_TIMEOUT_EN_MASK	BIT(31)
-
-#define MT_MCU_BUS_REMAP		MT_MCU_BUS(0x120)
-
-/* TOP CFG */
-#define MT_TOP_CFG_BASE			0x184b0000
-#define MT_TOP_CFG(ofs)			(MT_TOP_CFG_BASE + (ofs))
-
-#define MT_TOP_CFG_IP_VERSION_ADDR	MT_TOP_CFG(0x010)
-
-/* TOP CFG ON */
-#define MT_TOP_CFG_ON_BASE		0x184c1000
-#define MT_TOP_CFG_ON(ofs)		(MT_TOP_CFG_ON_BASE + (ofs))
-
-#define MT_TOP_CFG_ON_ROM_IDX		MT_TOP_CFG_ON(0x604)
-
-/* SLP CTRL */
-#define MT_SLP_BASE			0x184c3000
-#define MT_SLP(ofs)			(MT_SLP_BASE + (ofs))
-
-#define MT_SLP_STATUS			MT_SLP(0x00c)
-#define MT_SLP_WFDMA2CONN_MASK		(BIT(21) | BIT(23))
-#define MT_SLP_CTRL_EN_MASK		BIT(0)
-#define MT_SLP_CTRL_BSY_MASK		BIT(1)
-
-/* MCU BUS DBG */
-#define MT_MCU_BUS_DBG_BASE		0x18500000
-#define MT_MCU_BUS_DBG(ofs)		(MT_MCU_BUS_DBG_BASE + (ofs))
-
-#define MT_MCU_BUS_DBG_TIMEOUT		MT_MCU_BUS_DBG(0x0)
-#define MT_MCU_BUS_DBG_TIMEOUT_SET_MASK GENMASK(31, 16)
-#define MT_MCU_BUS_DBG_TIMEOUT_CK_EN_MASK BIT(3)
-#define MT_MCU_BUS_DBG_TIMEOUT_EN_MASK	BIT(2)
-
-#define MT_HW_BOUND			0x70010020
-#define MT_HW_REV			0x70010204
-#define MT_WF_SUBSYS_RST		0x70002600
-
-/* PCIE MAC */
-#define MT_PCIE_MAC_BASE		0x74030000
-#define MT_PCIE_MAC(ofs)		(MT_PCIE_MAC_BASE + (ofs))
-#define MT_PCIE_MAC_INT_ENABLE		MT_PCIE_MAC(0x188)
-
-#define MT_PCIE1_MAC_INT_ENABLE		0x74020188
-#define MT_PCIE1_MAC_INT_ENABLE_MT7916	0x74090188
-
-#define MT_WM_MCU_PC			0x7c060204
-#define MT_WA_MCU_PC			0x7c06020c
-
-/* PP TOP */
-#define MT_WF_PP_TOP_BASE		0x820cc000
-#define MT_WF_PP_TOP(ofs)		(MT_WF_PP_TOP_BASE + (ofs))
-
-#define MT_WF_PP_TOP_RXQ_WFDMA_CF_5	MT_WF_PP_TOP(0x0e8)
-#define MT_WF_PP_TOP_RXQ_QID6_WFDMA_HIF_SEL_MASK	BIT(6)
-
-#define MT_WF_IRPI_BASE			0x83000000
-#define MT_WF_IRPI(ofs)			(MT_WF_IRPI_BASE + (ofs))
-
-#define MT_WF_IRPI_NSS(phy, nss)	MT_WF_IRPI(0x6000 + ((phy) << 20) + ((nss) << 16))
-#define MT_WF_IRPI_NSS_MT7916(phy, nss)	MT_WF_IRPI(0x1000 + ((phy) << 20) + ((nss) << 16))
-
-/* PHY */
-#define MT_WF_PHY_BASE			0x83080000
-#define MT_WF_PHY(ofs)			(MT_WF_PHY_BASE + (ofs))
-
-#define MT_WF_PHY_RX_CTRL1(_phy)	MT_WF_PHY(0x2004 + ((_phy) << 16))
-#define MT_WF_PHY_RX_CTRL1_MT7916(_phy)	MT_WF_PHY(0x2004 + ((_phy) << 20))
-#define MT_WF_PHY_RX_CTRL1_IPI_EN	GENMASK(2, 0)
-#define MT_WF_PHY_RX_CTRL1_STSCNT_EN	GENMASK(11, 9)
-
-#define MT_WF_PHY_RXTD12(_phy)		MT_WF_PHY(0x8230 + ((_phy) << 16))
-#define MT_WF_PHY_RXTD12_MT7916(_phy)	MT_WF_PHY(0x8230 + ((_phy) << 20))
-#define MT_WF_PHY_RXTD12_IRPI_SW_CLR_ONLY	BIT(18)
-#define MT_WF_PHY_RXTD12_IRPI_SW_CLR		BIT(29)
-
-#define MT_MCU_WM_CIRQ_BASE			0x89010000
-#define MT_MCU_WM_CIRQ(ofs)			(MT_MCU_WM_CIRQ_BASE + (ofs))
-#define MT_MCU_WM_CIRQ_IRQ_MASK_CLR_ADDR	MT_MCU_WM_CIRQ(0x80)
-#define MT_MCU_WM_CIRQ_IRQ_SOFT_ADDR		MT_MCU_WM_CIRQ(0xc0)
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/soc.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/soc.c
deleted file mode 100644
index 8b398d5..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/soc.c
+++ /dev/null
@@ -1,1251 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2022 MediaTek Inc. */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-#include <linux/of.h>
-#include <linux/of_device.h>
-#include <linux/of_reserved_mem.h>
-#include <linux/of_gpio.h>
-#include <linux/iopoll.h>
-#include <linux/reset.h>
-#include <linux/of_net.h>
-#include <linux/clk.h>
-
-#include "mt7915.h"
-
-/* INFRACFG */
-#define MT_INFRACFG_CONN2AP_SLPPROT	0x0d0
-#define MT_INFRACFG_AP2CONN_SLPPROT	0x0d4
-
-#define MT_INFRACFG_RX_EN_MASK		BIT(16)
-#define MT_INFRACFG_TX_RDY_MASK		BIT(4)
-#define MT_INFRACFG_TX_EN_MASK		BIT(0)
-
-/* TOP POS */
-#define MT_TOP_POS_FAST_CTRL		0x114
-#define MT_TOP_POS_FAST_EN_MASK		BIT(3)
-
-#define MT_TOP_POS_SKU			0x21c
-#define MT_TOP_POS_SKU_MASK		GENMASK(31, 28)
-#define MT_TOP_POS_SKU_ADIE_DBDC_MASK	BIT(2)
-
-enum {
-	ADIE_SB,
-	ADIE_DBDC
-};
-
-static int
-mt76_wmac_spi_read(struct mt7915_dev *dev, u8 adie, u32 addr, u32 *val)
-{
-	int ret;
-	u32 cur;
-
-	ret = read_poll_timeout(mt76_rr, cur, !(cur & MT_TOP_SPI_POLLING_BIT),
-				USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				dev, MT_TOP_SPI_BUSY_CR(adie));
-	if (ret)
-		return ret;
-
-	mt76_wr(dev, MT_TOP_SPI_ADDR_CR(adie),
-		MT_TOP_SPI_READ_ADDR_FORMAT | addr);
-	mt76_wr(dev, MT_TOP_SPI_WRITE_DATA_CR(adie), 0);
-
-	ret = read_poll_timeout(mt76_rr, cur, !(cur & MT_TOP_SPI_POLLING_BIT),
-				USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				dev, MT_TOP_SPI_BUSY_CR(adie));
-	if (ret)
-		return ret;
-
-	*val = mt76_rr(dev, MT_TOP_SPI_READ_DATA_CR(adie));
-
-	return 0;
-}
-
-static int
-mt76_wmac_spi_write(struct mt7915_dev *dev, u8 adie, u32 addr, u32 val)
-{
-	int ret;
-	u32 cur;
-
-	ret = read_poll_timeout(mt76_rr, cur, !(cur & MT_TOP_SPI_POLLING_BIT),
-				USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				dev, MT_TOP_SPI_BUSY_CR(adie));
-	if (ret)
-		return ret;
-
-	mt76_wr(dev, MT_TOP_SPI_ADDR_CR(adie),
-		MT_TOP_SPI_WRITE_ADDR_FORMAT | addr);
-	mt76_wr(dev, MT_TOP_SPI_WRITE_DATA_CR(adie), val);
-
-	return read_poll_timeout(mt76_rr, cur, !(cur & MT_TOP_SPI_POLLING_BIT),
-				 USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				 dev, MT_TOP_SPI_BUSY_CR(adie));
-}
-
-static int
-mt76_wmac_spi_rmw(struct mt7915_dev *dev, u8 adie,
-		  u32 addr, u32 mask, u32 val)
-{
-	u32 cur, ret;
-
-	ret = mt76_wmac_spi_read(dev, adie, addr, &cur);
-	if (ret)
-		return ret;
-
-	cur &= ~mask;
-	cur |= val;
-
-	return mt76_wmac_spi_write(dev, adie, addr, cur);
-}
-
-static int
-mt7986_wmac_adie_efuse_read(struct mt7915_dev *dev, u8 adie,
-			    u32 addr, u32 *data)
-{
-	int ret, temp;
-	u32 val, mask;
-
-	ret = mt76_wmac_spi_write(dev, adie, MT_ADIE_EFUSE_CFG,
-				  MT_ADIE_EFUSE_CTRL_MASK);
-	if (ret)
-		return ret;
-
-	ret = mt76_wmac_spi_rmw(dev, adie, MT_ADIE_EFUSE2_CTRL, BIT(30), 0x0);
-	if (ret)
-		return ret;
-
-	mask = (MT_ADIE_EFUSE_MODE_MASK | MT_ADIE_EFUSE_ADDR_MASK |
-		MT_ADIE_EFUSE_KICK_MASK);
-	val = FIELD_PREP(MT_ADIE_EFUSE_MODE_MASK, 0) |
-	      FIELD_PREP(MT_ADIE_EFUSE_ADDR_MASK, addr) |
-	      FIELD_PREP(MT_ADIE_EFUSE_KICK_MASK, 1);
-	ret = mt76_wmac_spi_rmw(dev, adie, MT_ADIE_EFUSE2_CTRL, mask, val);
-	if (ret)
-		return ret;
-
-	ret = read_poll_timeout(mt76_wmac_spi_read, temp,
-				!temp && !FIELD_GET(MT_ADIE_EFUSE_KICK_MASK, val),
-				USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				dev, adie, MT_ADIE_EFUSE2_CTRL, &val);
-	if (ret)
-		return ret;
-
-	ret = mt76_wmac_spi_read(dev, adie, MT_ADIE_EFUSE2_CTRL, &val);
-	if (ret)
-		return ret;
-
-	if (FIELD_GET(MT_ADIE_EFUSE_VALID_MASK, val) == 1)
-		ret = mt76_wmac_spi_read(dev, adie, MT_ADIE_EFUSE_RDATA0,
-					 data);
-
-	return ret;
-}
-
-static inline void mt76_wmac_spi_lock(struct mt7915_dev *dev)
-{
-	u32 cur;
-
-	read_poll_timeout(mt76_rr, cur,
-			  FIELD_GET(MT_SEMA_RFSPI_STATUS_MASK, cur),
-			  1000, 1000 * MSEC_PER_SEC, false, dev,
-			  MT_SEMA_RFSPI_STATUS);
-}
-
-static inline void mt76_wmac_spi_unlock(struct mt7915_dev *dev)
-{
-	mt76_wr(dev, MT_SEMA_RFSPI_RELEASE, 1);
-}
-
-static u32 mt76_wmac_rmw(void __iomem *base, u32 offset, u32 mask, u32 val)
-{
-	val |= readl(base + offset) & ~mask;
-	writel(val, base + offset);
-
-	return val;
-}
-
-static u8 mt7986_wmac_check_adie_type(struct mt7915_dev *dev)
-{
-	u32 val;
-
-	val = readl(dev->sku + MT_TOP_POS_SKU);
-
-	return FIELD_GET(MT_TOP_POS_SKU_ADIE_DBDC_MASK, val);
-}
-
-static int mt7986_wmac_consys_reset(struct mt7915_dev *dev, bool enable)
-{
-	if (!enable)
-		return reset_control_assert(dev->rstc);
-
-	mt76_wmac_rmw(dev->sku, MT_TOP_POS_FAST_CTRL,
-		      MT_TOP_POS_FAST_EN_MASK,
-		      FIELD_PREP(MT_TOP_POS_FAST_EN_MASK, 0x1));
-
-	return reset_control_deassert(dev->rstc);
-}
-
-static int mt7986_wmac_gpio_setup(struct mt7915_dev *dev)
-{
-	struct pinctrl_state *state;
-	struct pinctrl *pinctrl;
-	int ret;
-	u8 type;
-
-	type = mt7986_wmac_check_adie_type(dev);
-	pinctrl = devm_pinctrl_get(dev->mt76.dev);
-	if (IS_ERR(pinctrl))
-		return PTR_ERR(pinctrl);
-
-	switch (type) {
-	case ADIE_SB:
-		state = pinctrl_lookup_state(pinctrl, "default");
-		if (IS_ERR_OR_NULL(state))
-			return -EINVAL;
-		break;
-	case ADIE_DBDC:
-		state = pinctrl_lookup_state(pinctrl, "dbdc");
-		if (IS_ERR_OR_NULL(state))
-			return -EINVAL;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	ret = pinctrl_select_state(pinctrl, state);
-	if (ret)
-		return ret;
-
-	usleep_range(500, 1000);
-
-	return 0;
-}
-
-static int mt7986_wmac_consys_lockup(struct mt7915_dev *dev, bool enable)
-{
-	int ret;
-	u32 cur;
-
-	mt76_wmac_rmw(dev->dcm, MT_INFRACFG_AP2CONN_SLPPROT,
-		      MT_INFRACFG_RX_EN_MASK,
-		      FIELD_PREP(MT_INFRACFG_RX_EN_MASK, enable));
-	ret = read_poll_timeout(readl, cur, !(cur & MT_INFRACFG_RX_EN_MASK),
-				USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				dev->dcm + MT_INFRACFG_AP2CONN_SLPPROT);
-	if (ret)
-		return ret;
-
-	mt76_wmac_rmw(dev->dcm, MT_INFRACFG_AP2CONN_SLPPROT,
-		      MT_INFRACFG_TX_EN_MASK,
-		      FIELD_PREP(MT_INFRACFG_TX_EN_MASK, enable));
-	ret = read_poll_timeout(readl, cur, !(cur & MT_INFRACFG_TX_RDY_MASK),
-				USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				dev->dcm + MT_INFRACFG_AP2CONN_SLPPROT);
-	if (ret)
-		return ret;
-
-	mt76_wmac_rmw(dev->dcm, MT_INFRACFG_CONN2AP_SLPPROT,
-		      MT_INFRACFG_RX_EN_MASK,
-		      FIELD_PREP(MT_INFRACFG_RX_EN_MASK, enable));
-	mt76_wmac_rmw(dev->dcm, MT_INFRACFG_CONN2AP_SLPPROT,
-		      MT_INFRACFG_TX_EN_MASK,
-		      FIELD_PREP(MT_INFRACFG_TX_EN_MASK, enable));
-
-	return 0;
-}
-
-static int mt7986_wmac_coninfra_check(struct mt7915_dev *dev)
-{
-	u32 cur;
-
-	return read_poll_timeout(mt76_rr, cur, (cur == 0x02070000),
-				 USEC_PER_MSEC, 50 * USEC_PER_MSEC,
-				 false, dev, MT_CONN_INFRA_BASE);
-}
-
-static int mt7986_wmac_coninfra_setup(struct mt7915_dev *dev)
-{
-	struct device *pdev = dev->mt76.dev;
-	struct reserved_mem *rmem;
-	struct device_node *np;
-	u32 val;
-
-	np = of_parse_phandle(pdev->of_node, "memory-region", 0);
-	if (!np)
-		return -EINVAL;
-
-	rmem = of_reserved_mem_lookup(np);
-	if (!rmem)
-		return -EINVAL;
-
-	val = (rmem->base >> 16) & MT_TOP_MCU_EMI_BASE_MASK;
-
-	/* Set conninfra subsys PLL check */
-	mt76_rmw_field(dev, MT_INFRA_CKGEN_BUS,
-		       MT_INFRA_CKGEN_BUS_RDY_SEL_MASK, 0x1);
-	mt76_rmw_field(dev, MT_INFRA_CKGEN_BUS,
-		       MT_INFRA_CKGEN_BUS_RDY_SEL_MASK, 0x1);
-
-	mt76_rmw_field(dev, MT_TOP_MCU_EMI_BASE,
-		       MT_TOP_MCU_EMI_BASE_MASK, val);
-
-	mt76_wr(dev, MT_INFRA_BUS_EMI_START, rmem->base);
-	mt76_wr(dev, MT_INFRA_BUS_EMI_END, rmem->size);
-
-	mt76_rr(dev, MT_CONN_INFRA_EFUSE);
-
-	/* Set conninfra sysram */
-	mt76_wr(dev, MT_TOP_RGU_SYSRAM_PDN, 0);
-	mt76_wr(dev, MT_TOP_RGU_SYSRAM_SLP, 1);
-
-	return 0;
-}
-
-static int mt7986_wmac_sku_setup(struct mt7915_dev *dev, u32 *adie_type)
-{
-	int ret;
-	u32 adie_main, adie_ext;
-
-	mt76_rmw_field(dev, MT_CONN_INFRA_ADIE_RESET,
-		       MT_CONN_INFRA_ADIE1_RESET_MASK, 0x1);
-	mt76_rmw_field(dev, MT_CONN_INFRA_ADIE_RESET,
-		       MT_CONN_INFRA_ADIE2_RESET_MASK, 0x1);
-
-	mt76_wmac_spi_lock(dev);
-
-	ret = mt76_wmac_spi_read(dev, 0, MT_ADIE_CHIP_ID, &adie_main);
-	if (ret)
-		goto out;
-
-	ret = mt76_wmac_spi_read(dev, 1, MT_ADIE_CHIP_ID, &adie_ext);
-	if (ret)
-		goto out;
-
-	*adie_type = FIELD_GET(MT_ADIE_CHIP_ID_MASK, adie_main) |
-		     (MT_ADIE_CHIP_ID_MASK & adie_ext);
-
-out:
-	mt76_wmac_spi_unlock(dev);
-
-	return 0;
-}
-
-static inline u16 mt7986_adie_idx(u8 adie, u32 adie_type)
-{
-	if (adie == 0)
-		return u32_get_bits(adie_type, MT_ADIE_IDX0);
-	else
-		return u32_get_bits(adie_type, MT_ADIE_IDX1);
-}
-
-static inline bool is_7975(struct mt7915_dev *dev, u8 adie, u32 adie_type)
-{
-	return mt7986_adie_idx(adie, adie_type) == 0x7975;
-}
-
-static inline bool is_7976(struct mt7915_dev *dev, u8 adie, u32 adie_type)
-{
-	return mt7986_adie_idx(adie, adie_type) == 0x7976;
-}
-
-static int mt7986_wmac_adie_thermal_cal(struct mt7915_dev *dev, u8 adie)
-{
-	int ret;
-	u32 data, val;
-
-	ret = mt7986_wmac_adie_efuse_read(dev, adie, MT_ADIE_THADC_ANALOG,
-					  &data);
-	if (ret || FIELD_GET(MT_ADIE_ANA_EN_MASK, data)) {
-		val = FIELD_GET(MT_ADIE_VRPI_SEL_EFUSE_MASK, data);
-		ret = mt76_wmac_spi_rmw(dev, adie, MT_ADIE_RG_TOP_THADC_BG,
-					MT_ADIE_VRPI_SEL_CR_MASK,
-					FIELD_PREP(MT_ADIE_VRPI_SEL_CR_MASK, val));
-		if (ret)
-			return ret;
-
-		val = FIELD_GET(MT_ADIE_PGA_GAIN_EFUSE_MASK, data);
-		ret = mt76_wmac_spi_rmw(dev, adie, MT_ADIE_RG_TOP_THADC,
-					MT_ADIE_PGA_GAIN_MASK,
-					FIELD_PREP(MT_ADIE_PGA_GAIN_MASK, val));
-		if (ret)
-			return ret;
-	}
-
-	ret = mt7986_wmac_adie_efuse_read(dev, adie, MT_ADIE_THADC_SLOP,
-					  &data);
-	if (ret || FIELD_GET(MT_ADIE_ANA_EN_MASK, data)) {
-		val = FIELD_GET(MT_ADIE_LDO_CTRL_EFUSE_MASK, data);
-
-		return mt76_wmac_spi_rmw(dev, adie, MT_ADIE_RG_TOP_THADC,
-					 MT_ADIE_LDO_CTRL_MASK,
-					 FIELD_PREP(MT_ADIE_LDO_CTRL_MASK, val));
-	}
-
-	return 0;
-}
-
-static int
-mt7986_read_efuse_xo_trim_7976(struct mt7915_dev *dev, u8 adie,
-			       bool is_40m, int *result)
-{
-	int ret;
-	u32 data, addr;
-
-	addr = is_40m ? MT_ADIE_XTAL_AXM_40M_OSC : MT_ADIE_XTAL_AXM_80M_OSC;
-	ret = mt7986_wmac_adie_efuse_read(dev, adie, addr, &data);
-	if (ret)
-		return ret;
-
-	if (!FIELD_GET(MT_ADIE_XO_TRIM_EN_MASK, data)) {
-		*result = 64;
-	} else {
-		*result = FIELD_GET(MT_ADIE_TRIM_MASK, data);
-		addr = is_40m ? MT_ADIE_XTAL_TRIM1_40M_OSC :
-				MT_ADIE_XTAL_TRIM1_80M_OSC;
-		ret = mt7986_wmac_adie_efuse_read(dev, adie, addr, &data);
-		if (ret)
-			return ret;
-
-		if (FIELD_GET(MT_ADIE_XO_TRIM_EN_MASK, data) &&
-		    FIELD_GET(MT_ADIE_XTAL_DECREASE_MASK, data))
-			*result -= FIELD_GET(MT_ADIE_EFUSE_TRIM_MASK, data);
-		else if (FIELD_GET(MT_ADIE_XO_TRIM_EN_MASK, data))
-			*result += FIELD_GET(MT_ADIE_EFUSE_TRIM_MASK, data);
-
-		*result = max(0, min(127, *result));
-	}
-
-	return 0;
-}
-
-static int mt7986_wmac_adie_xtal_trim_7976(struct mt7915_dev *dev, u8 adie)
-{
-	int ret, trim_80m, trim_40m;
-	u32 data, val, mode;
-
-	ret = mt7986_wmac_adie_efuse_read(dev, adie, MT_ADIE_XO_TRIM_FLOW,
-					  &data);
-	if (ret || !FIELD_GET(BIT(1), data))
-		return 0;
-
-	ret = mt7986_read_efuse_xo_trim_7976(dev, adie, false, &trim_80m);
-	if (ret)
-		return ret;
-
-	ret = mt7986_read_efuse_xo_trim_7976(dev, adie, true, &trim_40m);
-	if (ret)
-		return ret;
-
-	ret = mt76_wmac_spi_read(dev, adie, MT_ADIE_RG_STRAP_PIN_IN, &val);
-	if (ret)
-		return ret;
-
-	mode = FIELD_PREP(GENMASK(6, 4), val);
-	if (!mode || mode == 0x2) {
-		ret = mt76_wmac_spi_rmw(dev, adie, MT_ADIE_XTAL_C1,
-					GENMASK(31, 24),
-					FIELD_PREP(GENMASK(31, 24), trim_80m));
-		if (ret)
-			return ret;
-
-		ret = mt76_wmac_spi_rmw(dev, adie, MT_ADIE_XTAL_C2,
-					GENMASK(31, 24),
-					FIELD_PREP(GENMASK(31, 24), trim_80m));
-	} else if (mode == 0x3 || mode == 0x4 || mode == 0x6) {
-		ret = mt76_wmac_spi_rmw(dev, adie, MT_ADIE_XTAL_C1,
-					GENMASK(23, 16),
-					FIELD_PREP(GENMASK(23, 16), trim_40m));
-		if (ret)
-			return ret;
-
-		ret = mt76_wmac_spi_rmw(dev, adie, MT_ADIE_XTAL_C2,
-					GENMASK(23, 16),
-					FIELD_PREP(GENMASK(23, 16), trim_40m));
-	}
-
-	return ret;
-}
-
-static int mt7986_wmac_adie_patch_7976(struct mt7915_dev *dev, u8 adie)
-{
-	u32 id, version, rg_xo_01, rg_xo_03;
-	int ret;
-
-	ret = mt76_wmac_spi_read(dev, adie, MT_ADIE_CHIP_ID, &id);
-	if (ret)
-		return ret;
-
-	version = FIELD_GET(MT_ADIE_VERSION_MASK, id);
-
-	ret = mt76_wmac_spi_write(dev, adie, MT_ADIE_RG_TOP_THADC, 0x4a563b00);
-	if (ret)
-		return ret;
-
-	if (version == 0x8a00 || version == 0x8a10 || version == 0x8b00) {
-		rg_xo_01 = 0x1d59080f;
-		rg_xo_03 = 0x34c00fe0;
-	} else {
-		rg_xo_01 = 0x1959f80f;
-		rg_xo_03 = 0x34d00fe0;
-	}
-
-	ret = mt76_wmac_spi_write(dev, adie, MT_ADIE_RG_XO_01, rg_xo_01);
-	if (ret)
-		return ret;
-
-	return mt76_wmac_spi_write(dev, adie, MT_ADIE_RG_XO_03, rg_xo_03);
-}
-
-static int
-mt7986_read_efuse_xo_trim_7975(struct mt7915_dev *dev, u8 adie,
-			       u32 addr, u32 *result)
-{
-	int ret;
-	u32 data;
-
-	ret = mt7986_wmac_adie_efuse_read(dev, adie, addr, &data);
-	if (ret)
-		return ret;
-
-	if ((data & MT_ADIE_XO_TRIM_EN_MASK)) {
-		if ((data & MT_ADIE_XTAL_DECREASE_MASK))
-			*result -= (data & MT_ADIE_EFUSE_TRIM_MASK);
-		else
-			*result += (data & MT_ADIE_EFUSE_TRIM_MASK);
-
-		*result = (*result & MT_ADIE_TRIM_MASK);
-	}
-
-	return 0;
-}
-
-static int mt7986_wmac_adie_xtal_trim_7975(struct mt7915_dev *dev, u8 adie)
-{
-	int ret;
-	u32 data, result = 0, value;
-
-	ret = mt7986_wmac_adie_efuse_read(dev, adie, MT_ADIE_7975_XTAL_EN,
-					  &data);
-	if (ret || !(data & BIT(1)))
-		return 0;
-
-	ret = mt7986_wmac_adie_efuse_read(dev, adie, MT_ADIE_7975_XTAL_CAL,
-					  &data);
-	if (ret)
-		return ret;
-
-	if (data & MT_ADIE_XO_TRIM_EN_MASK)
-		result = (data & MT_ADIE_TRIM_MASK);
-
-	ret = mt7986_read_efuse_xo_trim_7975(dev, adie, MT_ADIE_7975_XO_TRIM2,
-					     &result);
-	if (ret)
-		return ret;
-
-	ret = mt7986_read_efuse_xo_trim_7975(dev, adie, MT_ADIE_7975_XO_TRIM3,
-					     &result);
-	if (ret)
-		return ret;
-
-	ret = mt7986_read_efuse_xo_trim_7975(dev, adie, MT_ADIE_7975_XO_TRIM4,
-					     &result);
-	if (ret)
-		return ret;
-
-	/* Update trim value to C1 and C2*/
-	value = FIELD_GET(MT_ADIE_7975_XO_CTRL2_C1_MASK, result) |
-		FIELD_GET(MT_ADIE_7975_XO_CTRL2_C2_MASK, result);
-	ret = mt76_wmac_spi_rmw(dev, adie, MT_ADIE_7975_XO_CTRL2,
-				MT_ADIE_7975_XO_CTRL2_MASK, value);
-	if (ret)
-		return ret;
-
-	ret = mt76_wmac_spi_read(dev, adie, MT_ADIE_7975_XTAL, &value);
-	if (ret)
-		return ret;
-
-	if (value & MT_ADIE_7975_XTAL_EN_MASK) {
-		ret = mt76_wmac_spi_rmw(dev, adie, MT_ADIE_7975_XO_2,
-					MT_ADIE_7975_XO_2_FIX_EN, 0x0);
-		if (ret)
-			return ret;
-	}
-
-	return mt76_wmac_spi_rmw(dev, adie, MT_ADIE_7975_XO_CTRL6,
-				 MT_ADIE_7975_XO_CTRL6_MASK, 0x1);
-}
-
-static int mt7986_wmac_adie_patch_7975(struct mt7915_dev *dev, u8 adie)
-{
-	int ret;
-
-	/* disable CAL LDO and fine tune RFDIG LDO */
-	ret = mt76_wmac_spi_write(dev, adie, 0x348, 0x00000002);
-	if (ret)
-		return ret;
-
-	ret = mt76_wmac_spi_write(dev, adie, 0x378, 0x00000002);
-	if (ret)
-		return ret;
-
-	ret = mt76_wmac_spi_write(dev, adie, 0x3a8, 0x00000002);
-	if (ret)
-		return ret;
-
-	ret = mt76_wmac_spi_write(dev, adie, 0x3d8, 0x00000002);
-	if (ret)
-		return ret;
-
-	/* set CKA driving and filter */
-	ret = mt76_wmac_spi_write(dev, adie, 0xa1c, 0x30000aaa);
-	if (ret)
-		return ret;
-
-	/* set CKB LDO to 1.4V */
-	ret = mt76_wmac_spi_write(dev, adie, 0xa84, 0x8470008a);
-	if (ret)
-		return ret;
-
-	/* turn on SX0 LTBUF */
-	ret = mt76_wmac_spi_write(dev, adie, 0x074, 0x00000002);
-	if (ret)
-		return ret;
-
-	/* CK_BUF_SW_EN = 1 (all buf in manual mode.) */
-	ret = mt76_wmac_spi_write(dev, adie, 0xaa4, 0x01001fc0);
-	if (ret)
-		return ret;
-
-	/* BT mode/WF normal mode 00000005 */
-	ret = mt76_wmac_spi_write(dev, adie, 0x070, 0x00000005);
-	if (ret)
-		return ret;
-
-	/* BG thermal sensor offset update */
-	ret = mt76_wmac_spi_write(dev, adie, 0x344, 0x00000088);
-	if (ret)
-		return ret;
-
-	ret = mt76_wmac_spi_write(dev, adie, 0x374, 0x00000088);
-	if (ret)
-		return ret;
-
-	ret = mt76_wmac_spi_write(dev, adie, 0x3a4, 0x00000088);
-	if (ret)
-		return ret;
-
-	ret = mt76_wmac_spi_write(dev, adie, 0x3d4, 0x00000088);
-	if (ret)
-		return ret;
-
-	/* set WCON VDD IPTAT to "0000" */
-	ret = mt76_wmac_spi_write(dev, adie, 0xa80, 0x44d07000);
-	if (ret)
-		return ret;
-
-	/* change back LTBUF SX3 drving to default value */
-	ret = mt76_wmac_spi_write(dev, adie, 0xa88, 0x3900aaaa);
-	if (ret)
-		return ret;
-
-	/* SM input cap off */
-	ret = mt76_wmac_spi_write(dev, adie, 0x2c4, 0x00000000);
-	if (ret)
-		return ret;
-
-	/* set CKB driving and filter */
-	return mt76_wmac_spi_write(dev, adie, 0x2c8, 0x00000072);
-}
-
-static int mt7986_wmac_adie_cfg(struct mt7915_dev *dev, u8 adie, u32 adie_type)
-{
-	int ret;
-
-	mt76_wmac_spi_lock(dev);
-	ret = mt76_wmac_spi_write(dev, adie, MT_ADIE_CLK_EN, ~0);
-	if (ret)
-		goto out;
-
-	if (is_7975(dev, adie, adie_type)) {
-		ret = mt76_wmac_spi_rmw(dev, adie, MT_ADIE_7975_COCLK,
-					BIT(1), 0x1);
-		if (ret)
-			goto out;
-
-		ret = mt7986_wmac_adie_thermal_cal(dev, adie);
-		if (ret)
-			goto out;
-
-		ret = mt7986_wmac_adie_xtal_trim_7975(dev, adie);
-		if (ret)
-			goto out;
-
-		ret = mt7986_wmac_adie_patch_7975(dev, adie);
-	} else if (is_7976(dev, adie, adie_type)) {
-		if (mt7986_wmac_check_adie_type(dev) == ADIE_DBDC) {
-			ret = mt76_wmac_spi_write(dev, adie,
-						  MT_ADIE_WRI_CK_SEL, 0x1c);
-			if (ret)
-				goto out;
-		}
-
-		ret = mt7986_wmac_adie_thermal_cal(dev, adie);
-		if (ret)
-			goto out;
-
-		ret = mt7986_wmac_adie_xtal_trim_7976(dev, adie);
-		if (ret)
-			goto out;
-
-		ret = mt7986_wmac_adie_patch_7976(dev, adie);
-	}
-out:
-	mt76_wmac_spi_unlock(dev);
-
-	return ret;
-}
-
-static int
-mt7986_wmac_afe_cal(struct mt7915_dev *dev, u8 adie, bool dbdc, u32 adie_type)
-{
-	int ret;
-	u8 idx;
-
-	mt76_wmac_spi_lock(dev);
-	if (is_7975(dev, adie, adie_type))
-		ret = mt76_wmac_spi_write(dev, adie,
-					  MT_AFE_RG_ENCAL_WBTAC_IF_SW,
-					  0x80000000);
-	else
-		ret = mt76_wmac_spi_write(dev, adie,
-					  MT_AFE_RG_ENCAL_WBTAC_IF_SW,
-					  0x88888005);
-	if (ret)
-		goto out;
-
-	idx = dbdc ? ADIE_DBDC : adie;
-
-	mt76_rmw_field(dev, MT_AFE_DIG_EN_01(idx),
-		       MT_AFE_RG_WBG_EN_RCK_MASK, 0x1);
-	usleep_range(60, 100);
-
-	mt76_rmw(dev, MT_AFE_DIG_EN_01(idx),
-		 MT_AFE_RG_WBG_EN_RCK_MASK, 0x0);
-
-	mt76_rmw_field(dev, MT_AFE_DIG_EN_03(idx),
-		       MT_AFE_RG_WBG_EN_BPLL_UP_MASK, 0x1);
-	usleep_range(30, 100);
-
-	mt76_rmw_field(dev, MT_AFE_DIG_EN_03(idx),
-		       MT_AFE_RG_WBG_EN_WPLL_UP_MASK, 0x1);
-	usleep_range(60, 100);
-
-	mt76_rmw_field(dev, MT_AFE_DIG_EN_01(idx),
-		       MT_AFE_RG_WBG_EN_TXCAL_MASK, 0x1f);
-	usleep_range(800, 1000);
-
-	mt76_rmw(dev, MT_AFE_DIG_EN_01(idx),
-		 MT_AFE_RG_WBG_EN_TXCAL_MASK, 0x0);
-	mt76_rmw(dev, MT_AFE_DIG_EN_03(idx),
-		 MT_AFE_RG_WBG_EN_PLL_UP_MASK, 0x0);
-
-	ret = mt76_wmac_spi_write(dev, adie, MT_AFE_RG_ENCAL_WBTAC_IF_SW,
-				  0x5);
-
-out:
-	mt76_wmac_spi_unlock(dev);
-
-	return ret;
-}
-
-static void mt7986_wmac_subsys_pll_initial(struct mt7915_dev *dev, u8 band)
-{
-	mt76_rmw(dev, MT_AFE_PLL_STB_TIME(band),
-		 MT_AFE_PLL_STB_TIME_MASK, MT_AFE_PLL_STB_TIME_VAL);
-
-	mt76_rmw(dev, MT_AFE_DIG_EN_02(band),
-		 MT_AFE_PLL_CFG_MASK, MT_AFE_PLL_CFG_VAL);
-
-	mt76_rmw(dev, MT_AFE_DIG_TOP_01(band),
-		 MT_AFE_DIG_TOP_01_MASK, MT_AFE_DIG_TOP_01_VAL);
-}
-
-static void mt7986_wmac_subsys_setting(struct mt7915_dev *dev)
-{
-	/* Subsys pll init */
-	mt7986_wmac_subsys_pll_initial(dev, 0);
-	mt7986_wmac_subsys_pll_initial(dev, 1);
-
-	/* Set legacy OSC control stable time*/
-	mt76_rmw(dev, MT_CONN_INFRA_OSC_RC_EN,
-		 MT_CONN_INFRA_OSC_RC_EN_MASK, 0x0);
-	mt76_rmw(dev, MT_CONN_INFRA_OSC_CTRL,
-		 MT_CONN_INFRA_OSC_STB_TIME_MASK, 0x80706);
-
-	/* prevent subsys from power on/of in a short time interval */
-	mt76_rmw(dev, MT_TOP_WFSYS_PWR,
-		 MT_TOP_PWR_ACK_MASK | MT_TOP_PWR_KEY_MASK,
-		 MT_TOP_PWR_KEY);
-}
-
-static int mt7986_wmac_bus_timeout(struct mt7915_dev *dev)
-{
-	mt76_rmw_field(dev, MT_INFRA_BUS_OFF_TIMEOUT,
-		       MT_INFRA_BUS_TIMEOUT_LIMIT_MASK, 0x2);
-
-	mt76_rmw_field(dev, MT_INFRA_BUS_OFF_TIMEOUT,
-		       MT_INFRA_BUS_TIMEOUT_EN_MASK, 0xf);
-
-	mt76_rmw_field(dev, MT_INFRA_BUS_ON_TIMEOUT,
-		       MT_INFRA_BUS_TIMEOUT_LIMIT_MASK, 0xc);
-
-	mt76_rmw_field(dev, MT_INFRA_BUS_ON_TIMEOUT,
-		       MT_INFRA_BUS_TIMEOUT_EN_MASK, 0xf);
-
-	return mt7986_wmac_coninfra_check(dev);
-}
-
-static void mt7986_wmac_clock_enable(struct mt7915_dev *dev, u32 adie_type)
-{
-	u32 cur;
-
-	mt76_rmw_field(dev, MT_INFRA_CKGEN_BUS_WPLL_DIV_1,
-		       MT_INFRA_CKGEN_DIV_SEL_MASK, 0x1);
-
-	mt76_rmw_field(dev, MT_INFRA_CKGEN_BUS_WPLL_DIV_2,
-		       MT_INFRA_CKGEN_DIV_SEL_MASK, 0x1);
-
-	mt76_rmw_field(dev, MT_INFRA_CKGEN_BUS_WPLL_DIV_1,
-		       MT_INFRA_CKGEN_DIV_EN_MASK, 0x1);
-
-	mt76_rmw_field(dev, MT_INFRA_CKGEN_BUS_WPLL_DIV_2,
-		       MT_INFRA_CKGEN_DIV_EN_MASK, 0x1);
-
-	mt76_rmw_field(dev, MT_INFRA_CKGEN_RFSPI_WPLL_DIV,
-		       MT_INFRA_CKGEN_DIV_SEL_MASK, 0x8);
-
-	mt76_rmw_field(dev, MT_INFRA_CKGEN_RFSPI_WPLL_DIV,
-		       MT_INFRA_CKGEN_DIV_EN_MASK, 0x1);
-
-	mt76_rmw_field(dev, MT_INFRA_CKGEN_BUS,
-		       MT_INFRA_CKGEN_BUS_CLK_SEL_MASK, 0x0);
-
-	mt76_rmw_field(dev, MT_CONN_INFRA_HW_CTRL,
-		       MT_CONN_INFRA_HW_CTRL_MASK, 0x1);
-
-	mt76_rmw(dev, MT_TOP_CONN_INFRA_WAKEUP,
-		 MT_TOP_CONN_INFRA_WAKEUP_MASK, 0x1);
-
-	usleep_range(900, 1000);
-
-	mt76_wmac_spi_lock(dev);
-	if (is_7975(dev, 0, adie_type) || is_7976(dev, 0, adie_type)) {
-		mt76_rmw_field(dev, MT_ADIE_SLP_CTRL_CK0(0),
-			       MT_SLP_CTRL_EN_MASK, 0x1);
-
-		read_poll_timeout(mt76_rr, cur, !(cur & MT_SLP_CTRL_BSY_MASK),
-				  USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				  dev, MT_ADIE_SLP_CTRL_CK0(0));
-	}
-	if (is_7975(dev, 1, adie_type) || is_7976(dev, 1, adie_type)) {
-		mt76_rmw_field(dev, MT_ADIE_SLP_CTRL_CK0(1),
-			       MT_SLP_CTRL_EN_MASK, 0x1);
-
-		read_poll_timeout(mt76_rr, cur, !(cur & MT_SLP_CTRL_BSY_MASK),
-				  USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				  dev, MT_ADIE_SLP_CTRL_CK0(0));
-	}
-	mt76_wmac_spi_unlock(dev);
-
-	mt76_rmw(dev, MT_TOP_CONN_INFRA_WAKEUP,
-		 MT_TOP_CONN_INFRA_WAKEUP_MASK, 0x0);
-	usleep_range(900, 1000);
-}
-
-static int mt7986_wmac_top_wfsys_wakeup(struct mt7915_dev *dev, bool enable)
-{
-	mt76_rmw_field(dev, MT_TOP_WFSYS_WAKEUP,
-		       MT_TOP_WFSYS_WAKEUP_MASK, enable);
-
-	usleep_range(900, 1000);
-
-	if (!enable)
-		return 0;
-
-	return mt7986_wmac_coninfra_check(dev);
-}
-
-static int mt7986_wmac_wm_enable(struct mt7915_dev *dev, bool enable)
-{
-	u32 cur;
-
-	mt76_rmw_field(dev, MT7986_TOP_WM_RESET,
-		       MT7986_TOP_WM_RESET_MASK, enable);
-	if (!enable)
-		return 0;
-
-	return read_poll_timeout(mt76_rr, cur, (cur == 0x1d1e),
-				 USEC_PER_MSEC, 5000 * USEC_PER_MSEC, false,
-				 dev, MT_TOP_CFG_ON_ROM_IDX);
-}
-
-static int mt7986_wmac_wfsys_poweron(struct mt7915_dev *dev, bool enable)
-{
-	u32 mask = MT_TOP_PWR_EN_MASK | MT_TOP_PWR_KEY_MASK;
-	u32 cur;
-
-	mt76_rmw(dev, MT_TOP_WFSYS_PWR, mask,
-		 MT_TOP_PWR_KEY | FIELD_PREP(MT_TOP_PWR_EN_MASK, enable));
-
-	return read_poll_timeout(mt76_rr, cur,
-		(FIELD_GET(MT_TOP_WFSYS_RESET_STATUS_MASK, cur) == enable),
-		USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-		dev, MT_TOP_WFSYS_RESET_STATUS);
-}
-
-static int mt7986_wmac_wfsys_setting(struct mt7915_dev *dev)
-{
-	int ret;
-	u32 cur;
-
-	/* Turn off wfsys2conn bus sleep protect */
-	mt76_rmw(dev, MT_CONN_INFRA_WF_SLP_PROT,
-		 MT_CONN_INFRA_WF_SLP_PROT_MASK, 0x0);
-
-	ret = mt7986_wmac_wfsys_poweron(dev, true);
-	if (ret)
-		return ret;
-
-	/* Check bus sleep protect */
-
-	ret = read_poll_timeout(mt76_rr, cur,
-				!(cur & MT_CONN_INFRA_CONN_WF_MASK),
-				USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				dev, MT_CONN_INFRA_WF_SLP_PROT_RDY);
-	if (ret)
-		return ret;
-
-	ret = read_poll_timeout(mt76_rr, cur, !(cur & MT_SLP_WFDMA2CONN_MASK),
-				USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				dev, MT_SLP_STATUS);
-	if (ret)
-		return ret;
-
-	return read_poll_timeout(mt76_rr, cur, (cur == 0x02060000),
-				 USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-				 dev, MT_TOP_CFG_IP_VERSION_ADDR);
-}
-
-static void mt7986_wmac_wfsys_set_timeout(struct mt7915_dev *dev)
-{
-	u32 mask = MT_MCU_BUS_TIMEOUT_SET_MASK |
-		   MT_MCU_BUS_TIMEOUT_CG_EN_MASK |
-		   MT_MCU_BUS_TIMEOUT_EN_MASK;
-	u32 val = FIELD_PREP(MT_MCU_BUS_TIMEOUT_SET_MASK, 1) |
-		  FIELD_PREP(MT_MCU_BUS_TIMEOUT_CG_EN_MASK, 1) |
-		  FIELD_PREP(MT_MCU_BUS_TIMEOUT_EN_MASK, 1);
-
-	mt76_rmw(dev, MT_MCU_BUS_TIMEOUT, mask, val);
-
-	mt76_wr(dev, MT_MCU_BUS_REMAP, 0x810f0000);
-
-	mask = MT_MCU_BUS_DBG_TIMEOUT_SET_MASK |
-	       MT_MCU_BUS_DBG_TIMEOUT_CK_EN_MASK |
-	       MT_MCU_BUS_DBG_TIMEOUT_EN_MASK;
-	val = FIELD_PREP(MT_MCU_BUS_DBG_TIMEOUT_SET_MASK, 0x3aa) |
-	      FIELD_PREP(MT_MCU_BUS_DBG_TIMEOUT_CK_EN_MASK, 1) |
-	      FIELD_PREP(MT_MCU_BUS_DBG_TIMEOUT_EN_MASK, 1);
-
-	mt76_rmw(dev, MT_MCU_BUS_DBG_TIMEOUT, mask, val);
-}
-
-static int mt7986_wmac_sku_update(struct mt7915_dev *dev, u32 adie_type)
-{
-	u32 val;
-
-	if (is_7976(dev, 0, adie_type) && is_7976(dev, 1, adie_type))
-		val = 0xf;
-	else if (is_7975(dev, 0, adie_type) && is_7975(dev, 1, adie_type))
-		val = 0xd;
-	else if (is_7976(dev, 0, adie_type))
-		val = 0x7;
-	else if (is_7975(dev, 1, adie_type))
-		val = 0x8;
-	else if (is_7976(dev, 1, adie_type))
-		val = 0xa;
-	else
-		return -EINVAL;
-
-	mt76_wmac_rmw(dev->sku, MT_TOP_POS_SKU, MT_TOP_POS_SKU_MASK,
-		      FIELD_PREP(MT_TOP_POS_SKU_MASK, val));
-
-	mt76_wr(dev, MT_CONNINFRA_SKU_DEC_ADDR, val);
-
-	return 0;
-}
-
-static int
-mt7986_wmac_adie_setup(struct mt7915_dev *dev, u8 adie, u32 adie_type)
-{
-	int ret;
-
-	if (!(is_7975(dev, adie, adie_type) || is_7976(dev, adie, adie_type)))
-		return 0;
-
-	ret = mt7986_wmac_adie_cfg(dev, adie, adie_type);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_afe_cal(dev, adie, false, adie_type);
-	if (ret)
-		return ret;
-
-	if (!adie && (mt7986_wmac_check_adie_type(dev) == ADIE_DBDC))
-		ret = mt7986_wmac_afe_cal(dev, adie, true, adie_type);
-
-	return ret;
-}
-
-static int mt7986_wmac_subsys_powerup(struct mt7915_dev *dev, u32 adie_type)
-{
-	int ret;
-
-	mt7986_wmac_subsys_setting(dev);
-
-	ret = mt7986_wmac_bus_timeout(dev);
-	if (ret)
-		return ret;
-
-	mt7986_wmac_clock_enable(dev, adie_type);
-
-	return 0;
-}
-
-static int mt7986_wmac_wfsys_powerup(struct mt7915_dev *dev)
-{
-	int ret;
-
-	ret = mt7986_wmac_wm_enable(dev, false);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_wfsys_setting(dev);
-	if (ret)
-		return ret;
-
-	mt7986_wmac_wfsys_set_timeout(dev);
-
-	return mt7986_wmac_wm_enable(dev, true);
-}
-
-int mt7986_wmac_enable(struct mt7915_dev *dev)
-{
-	int ret;
-	u32 adie_type;
-
-	ret = mt7986_wmac_consys_reset(dev, true);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_gpio_setup(dev);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_consys_lockup(dev, false);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_coninfra_check(dev);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_coninfra_setup(dev);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_sku_setup(dev, &adie_type);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_adie_setup(dev, 0, adie_type);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_adie_setup(dev, 1, adie_type);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_subsys_powerup(dev, adie_type);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_top_wfsys_wakeup(dev, true);
-	if (ret)
-		return ret;
-
-	ret = mt7986_wmac_wfsys_powerup(dev);
-	if (ret)
-		return ret;
-
-	return mt7986_wmac_sku_update(dev, adie_type);
-}
-
-void mt7986_wmac_disable(struct mt7915_dev *dev)
-{
-	u32 cur;
-
-	mt7986_wmac_top_wfsys_wakeup(dev, true);
-
-	/* Turn on wfsys2conn bus sleep protect */
-	mt76_rmw_field(dev, MT_CONN_INFRA_WF_SLP_PROT,
-		       MT_CONN_INFRA_WF_SLP_PROT_MASK, 0x1);
-
-	/* Check wfsys2conn bus sleep protect */
-	read_poll_timeout(mt76_rr, cur, !(cur ^ MT_CONN_INFRA_CONN),
-			  USEC_PER_MSEC, 50 * USEC_PER_MSEC, false,
-			  dev, MT_CONN_INFRA_WF_SLP_PROT_RDY);
-
-	mt7986_wmac_wfsys_poweron(dev, false);
-
-	/* Turn back wpll setting */
-	mt76_rmw_field(dev, MT_AFE_DIG_EN_02(0), MT_AFE_MCU_BPLL_CFG_MASK, 0x2);
-	mt76_rmw_field(dev, MT_AFE_DIG_EN_02(0), MT_AFE_WPLL_CFG_MASK, 0x2);
-
-	/* Reset EMI */
-	mt76_rmw_field(dev, MT_CONN_INFRA_EMI_REQ,
-		       MT_CONN_INFRA_EMI_REQ_MASK, 0x1);
-	mt76_rmw_field(dev, MT_CONN_INFRA_EMI_REQ,
-		       MT_CONN_INFRA_EMI_REQ_MASK, 0x0);
-	mt76_rmw_field(dev, MT_CONN_INFRA_EMI_REQ,
-		       MT_CONN_INFRA_INFRA_REQ_MASK, 0x1);
-	mt76_rmw_field(dev, MT_CONN_INFRA_EMI_REQ,
-		       MT_CONN_INFRA_INFRA_REQ_MASK, 0x0);
-
-	mt7986_wmac_top_wfsys_wakeup(dev, false);
-	mt7986_wmac_consys_lockup(dev, true);
-	mt7986_wmac_consys_reset(dev, false);
-}
-
-static int mt7986_wmac_init(struct mt7915_dev *dev)
-{
-	struct device *pdev = dev->mt76.dev;
-	struct platform_device *pfdev = to_platform_device(pdev);
-	struct clk *mcu_clk, *ap_conn_clk;
-
-	mcu_clk = devm_clk_get(pdev, "mcu");
-	if (IS_ERR(mcu_clk))
-		dev_err(pdev, "mcu clock not found\n");
-	else if (clk_prepare_enable(mcu_clk))
-		dev_err(pdev, "mcu clock configuration failed\n");
-
-	ap_conn_clk = devm_clk_get(pdev, "ap2conn");
-	if (IS_ERR(ap_conn_clk))
-		dev_err(pdev, "ap2conn clock not found\n");
-	else if (clk_prepare_enable(ap_conn_clk))
-		dev_err(pdev, "ap2conn clock configuration failed\n");
-
-	dev->dcm = devm_platform_ioremap_resource(pfdev, 1);
-	if (IS_ERR(dev->dcm))
-		return PTR_ERR(dev->dcm);
-
-	dev->sku = devm_platform_ioremap_resource(pfdev, 2);
-	if (IS_ERR(dev->sku))
-		return PTR_ERR(dev->sku);
-
-	dev->rstc = devm_reset_control_get(pdev, "consys");
-	if (IS_ERR(dev->rstc))
-		return PTR_ERR(dev->rstc);
-
-	return 0;
-}
-
-static int mt7986_wmac_probe(struct platform_device *pdev)
-{
-	void __iomem *mem_base;
-	struct mt7915_dev *dev;
-	struct mt76_dev *mdev;
-	int irq, ret;
-	u32 chip_id;
-
-	chip_id = (uintptr_t)of_device_get_match_data(&pdev->dev);
-
-	mem_base = devm_platform_ioremap_resource(pdev, 0);
-	if (IS_ERR(mem_base)) {
-		dev_err(&pdev->dev, "Failed to get memory resource\n");
-		return PTR_ERR(mem_base);
-	}
-
-	dev = mt7915_mmio_probe(&pdev->dev, mem_base, chip_id);
-	if (IS_ERR(dev))
-		return PTR_ERR(dev);
-
-	mdev = &dev->mt76;
-	ret = mt7915_mmio_wed_init(dev, pdev, false, &irq);
-	if (ret < 0)
-		goto free_device;
-
-	if (!ret) {
-		irq = platform_get_irq(pdev, 0);
-		if (irq < 0) {
-			ret = irq;
-			goto free_device;
-		}
-	}
-
-	ret = devm_request_irq(mdev->dev, irq, mt7915_irq_handler,
-			       IRQF_SHARED, KBUILD_MODNAME, dev);
-	if (ret)
-		goto free_device;
-
-	ret = mt7986_wmac_init(dev);
-	if (ret)
-		goto free_irq;
-
-	mt7915_wfsys_reset(dev);
-
-	ret = mt7915_register_device(dev);
-	if (ret)
-		goto free_irq;
-
-	return 0;
-
-free_irq:
-	devm_free_irq(mdev->dev, irq, dev);
-free_device:
-	if (mtk_wed_device_active(&mdev->mmio.wed))
-		mtk_wed_device_detach(&mdev->mmio.wed);
-	mt76_free_device(mdev);
-
-	return ret;
-}
-
-static int mt7986_wmac_remove(struct platform_device *pdev)
-{
-	struct mt7915_dev *dev = platform_get_drvdata(pdev);
-
-	mt7915_unregister_device(dev);
-
-	return 0;
-}
-
-static const struct of_device_id mt7986_wmac_of_match[] = {
-	{ .compatible = "mediatek,mt7986-wmac", .data = (u32 *)0x7986 },
-	{},
-};
-
-struct platform_driver mt7986_wmac_driver = {
-	.driver = {
-		.name = "mt7986-wmac",
-		.of_match_table = mt7986_wmac_of_match,
-	},
-	.probe = mt7986_wmac_probe,
-	.remove = mt7986_wmac_remove,
-};
-
-MODULE_FIRMWARE(MT7986_FIRMWARE_WA);
-MODULE_FIRMWARE(MT7986_FIRMWARE_WM);
-MODULE_FIRMWARE(MT7986_FIRMWARE_WM_MT7975);
-MODULE_FIRMWARE(MT7986_ROM_PATCH);
-MODULE_FIRMWARE(MT7986_ROM_PATCH_MT7975);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/testmode.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/testmode.c
deleted file mode 100644
index a979460..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/testmode.c
+++ /dev/null
@@ -1,785 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include "mt7915.h"
-#include "mac.h"
-#include "mcu.h"
-#include "testmode.h"
-
-enum {
-	TM_CHANGED_TXPOWER,
-	TM_CHANGED_FREQ_OFFSET,
-
-	/* must be last */
-	NUM_TM_CHANGED
-};
-
-static const u8 tm_change_map[] = {
-	[TM_CHANGED_TXPOWER] = MT76_TM_ATTR_TX_POWER,
-	[TM_CHANGED_FREQ_OFFSET] = MT76_TM_ATTR_FREQ_OFFSET,
-};
-
-struct reg_band {
-	u32 band[2];
-};
-
-#define REG_BAND(_list, _reg) \
-		{ _list.band[0] = MT_##_reg(0);	\
-		  _list.band[1] = MT_##_reg(1); }
-#define REG_BAND_IDX(_list, _reg, _idx) \
-		{ _list.band[0] = MT_##_reg(0, _idx);	\
-		  _list.band[1] = MT_##_reg(1, _idx); }
-
-#define TM_REG_MAX_ID	17
-static struct reg_band reg_backup_list[TM_REG_MAX_ID];
-
-
-static int
-mt7915_tm_set_tx_power(struct mt7915_phy *phy)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct mt76_phy *mphy = phy->mt76;
-	struct cfg80211_chan_def *chandef = &mphy->chandef;
-	int freq = chandef->center_freq1;
-	int ret;
-	struct {
-		u8 format_id;
-		u8 dbdc_idx;
-		s8 tx_power;
-		u8 ant_idx;	/* Only 0 is valid */
-		u8 center_chan;
-		u8 rsv[3];
-	} __packed req = {
-		.format_id = 0xf,
-		.dbdc_idx = phy != &dev->phy,
-		.center_chan = ieee80211_frequency_to_channel(freq),
-	};
-	u8 *tx_power = NULL;
-
-	if (phy->mt76->test.state != MT76_TM_STATE_OFF)
-		tx_power = phy->mt76->test.tx_power;
-
-	/* Tx power of the other antennas are the same as antenna 0 */
-	if (tx_power && tx_power[0])
-		req.tx_power = tx_power[0];
-
-	ret = mt76_mcu_send_msg(&dev->mt76,
-				MCU_EXT_CMD(TX_POWER_FEATURE_CTRL),
-				&req, sizeof(req), false);
-
-	return ret;
-}
-
-static int
-mt7915_tm_set_freq_offset(struct mt7915_phy *phy, bool en, u32 val)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct mt7915_tm_cmd req = {
-		.testmode_en = en,
-		.param_idx = MCU_ATE_SET_FREQ_OFFSET,
-		.param.freq.band = phy != &dev->phy,
-		.param.freq.freq_offset = cpu_to_le32(val),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(ATE_CTRL), &req,
-				 sizeof(req), false);
-}
-
-static int
-mt7915_tm_mode_ctrl(struct mt7915_dev *dev, bool enable)
-{
-	struct {
-		u8 format_id;
-		bool enable;
-		u8 rsv[2];
-	} __packed req = {
-		.format_id = 0x6,
-		.enable = enable,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76,
-				 MCU_EXT_CMD(TX_POWER_FEATURE_CTRL),
-				 &req, sizeof(req), false);
-}
-
-static int
-mt7915_tm_set_trx(struct mt7915_phy *phy, int type, bool en)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct mt7915_tm_cmd req = {
-		.testmode_en = 1,
-		.param_idx = MCU_ATE_SET_TRX,
-		.param.trx.type = type,
-		.param.trx.enable = en,
-		.param.trx.band = phy != &dev->phy,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(ATE_CTRL), &req,
-				 sizeof(req), false);
-}
-
-static int
-mt7915_tm_clean_hwq(struct mt7915_phy *phy, u8 wcid)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct mt7915_tm_cmd req = {
-		.testmode_en = 1,
-		.param_idx = MCU_ATE_CLEAN_TXQUEUE,
-		.param.clean.wcid = wcid,
-		.param.clean.band = phy != &dev->phy,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(ATE_CTRL), &req,
-				 sizeof(req), false);
-}
-
-static int
-mt7915_tm_set_slot_time(struct mt7915_phy *phy, u8 slot_time, u8 sifs)
-{
-	struct mt7915_dev *dev = phy->dev;
-	struct mt7915_tm_cmd req = {
-		.testmode_en = !(phy->mt76->test.state == MT76_TM_STATE_OFF),
-		.param_idx = MCU_ATE_SET_SLOT_TIME,
-		.param.slot.slot_time = slot_time,
-		.param.slot.sifs = sifs,
-		.param.slot.rifs = 2,
-		.param.slot.eifs = cpu_to_le16(60),
-		.param.slot.band = phy != &dev->phy,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(ATE_CTRL), &req,
-				 sizeof(req), false);
-}
-
-static int
-mt7915_tm_set_tam_arb(struct mt7915_phy *phy, bool enable, bool mu)
-{
-	struct mt7915_dev *dev = phy->dev;
-	u32 op_mode;
-
-	if (!enable)
-		op_mode = TAM_ARB_OP_MODE_NORMAL;
-	else if (mu)
-		op_mode = TAM_ARB_OP_MODE_TEST;
-	else
-		op_mode = TAM_ARB_OP_MODE_FORCE_SU;
-
-	return mt7915_mcu_set_muru_ctrl(dev, MURU_SET_ARB_OP_MODE, op_mode);
-}
-
-static int
-mt7915_tm_set_wmm_qid(struct mt7915_phy *phy, u8 qid, u8 aifs, u8 cw_min,
-		      u16 cw_max, u16 txop)
-{
-	struct mt7915_vif *mvif = (struct mt7915_vif *)phy->monitor_vif->drv_priv;
-	struct mt7915_mcu_tx req = { .total = 1 };
-	struct edca *e = &req.edca[0];
-
-	e->queue = qid + mvif->mt76.wmm_idx * MT76_CONNAC_MAX_WMM_SETS;
-	e->set = WMM_PARAM_SET;
-
-	e->aifs = aifs;
-	e->cw_min = cw_min;
-	e->cw_max = cpu_to_le16(cw_max);
-	e->txop = cpu_to_le16(txop);
-
-	return mt7915_mcu_update_edca(phy->dev, &req);
-}
-
-static int
-mt7915_tm_set_ipg_params(struct mt7915_phy *phy, u32 ipg, u8 mode)
-{
-#define TM_DEFAULT_SIFS	10
-#define TM_MAX_SIFS	127
-#define TM_MAX_AIFSN	0xf
-#define TM_MIN_AIFSN	0x1
-#define BBP_PROC_TIME	1500
-	struct mt7915_dev *dev = phy->dev;
-	u8 sig_ext = (mode == MT76_TM_TX_MODE_CCK) ? 0 : 6;
-	u8 slot_time = 9, sifs = TM_DEFAULT_SIFS;
-	u8 aifsn = TM_MIN_AIFSN;
-	u32 i2t_time, tr2t_time, txv_time;
-	u16 cw = 0;
-
-	if (ipg < sig_ext + slot_time + sifs)
-		ipg = 0;
-
-	if (!ipg)
-		goto done;
-
-	ipg -= sig_ext;
-
-	if (ipg <= (TM_MAX_SIFS + slot_time)) {
-		sifs = ipg - slot_time;
-	} else {
-		u32 val = (ipg + slot_time) / slot_time;
-
-		while (val >>= 1)
-			cw++;
-
-		if (cw > 16)
-			cw = 16;
-
-		ipg -= ((1 << cw) - 1) * slot_time;
-
-		aifsn = ipg / slot_time;
-		if (aifsn > TM_MAX_AIFSN)
-			aifsn = TM_MAX_AIFSN;
-
-		ipg -= aifsn * slot_time;
-
-		if (ipg > TM_DEFAULT_SIFS)
-			sifs = min_t(u32, ipg, TM_MAX_SIFS);
-	}
-done:
-	txv_time = mt76_get_field(dev, MT_TMAC_ATCR(phy->band_idx),
-				  MT_TMAC_ATCR_TXV_TOUT);
-	txv_time *= 50;	/* normal clock time */
-
-	i2t_time = (slot_time * 1000 - txv_time - BBP_PROC_TIME) / 50;
-	tr2t_time = (sifs * 1000 - txv_time - BBP_PROC_TIME) / 50;
-
-	mt76_set(dev, MT_TMAC_TRCR0(phy->band_idx),
-		 FIELD_PREP(MT_TMAC_TRCR0_TR2T_CHK, tr2t_time) |
-		 FIELD_PREP(MT_TMAC_TRCR0_I2T_CHK, i2t_time));
-
-	mt7915_tm_set_slot_time(phy, slot_time, sifs);
-
-	return mt7915_tm_set_wmm_qid(phy,
-				     mt76_connac_lmac_mapping(IEEE80211_AC_BE),
-				     aifsn, cw, cw, 0);
-}
-
-static int
-mt7915_tm_set_tx_len(struct mt7915_phy *phy, u32 tx_time)
-{
-	struct mt76_phy *mphy = phy->mt76;
-	struct mt76_testmode_data *td = &mphy->test;
-	struct ieee80211_supported_band *sband;
-	struct rate_info rate = {};
-	u16 flags = 0, tx_len;
-	u32 bitrate;
-	int ret;
-
-	if (!tx_time)
-		return 0;
-
-	rate.mcs = td->tx_rate_idx;
-	rate.nss = td->tx_rate_nss;
-
-	switch (td->tx_rate_mode) {
-	case MT76_TM_TX_MODE_CCK:
-	case MT76_TM_TX_MODE_OFDM:
-		if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
-			sband = &mphy->sband_5g.sband;
-		else if (mphy->chandef.chan->band == NL80211_BAND_6GHZ)
-			sband = &mphy->sband_6g.sband;
-		else
-			sband = &mphy->sband_2g.sband;
-
-		rate.legacy = sband->bitrates[rate.mcs].bitrate;
-		break;
-	case MT76_TM_TX_MODE_HT:
-		rate.mcs += rate.nss * 8;
-		flags |= RATE_INFO_FLAGS_MCS;
-
-		if (td->tx_rate_sgi)
-			flags |= RATE_INFO_FLAGS_SHORT_GI;
-		break;
-	case MT76_TM_TX_MODE_VHT:
-		flags |= RATE_INFO_FLAGS_VHT_MCS;
-
-		if (td->tx_rate_sgi)
-			flags |= RATE_INFO_FLAGS_SHORT_GI;
-		break;
-	case MT76_TM_TX_MODE_HE_SU:
-	case MT76_TM_TX_MODE_HE_EXT_SU:
-	case MT76_TM_TX_MODE_HE_TB:
-	case MT76_TM_TX_MODE_HE_MU:
-		rate.he_gi = td->tx_rate_sgi;
-		flags |= RATE_INFO_FLAGS_HE_MCS;
-		break;
-	default:
-		break;
-	}
-	rate.flags = flags;
-
-	switch (mphy->chandef.width) {
-	case NL80211_CHAN_WIDTH_160:
-	case NL80211_CHAN_WIDTH_80P80:
-		rate.bw = RATE_INFO_BW_160;
-		break;
-	case NL80211_CHAN_WIDTH_80:
-		rate.bw = RATE_INFO_BW_80;
-		break;
-	case NL80211_CHAN_WIDTH_40:
-		rate.bw = RATE_INFO_BW_40;
-		break;
-	default:
-		rate.bw = RATE_INFO_BW_20;
-		break;
-	}
-
-	bitrate = cfg80211_calculate_bitrate(&rate);
-	tx_len = bitrate * tx_time / 10 / 8;
-
-	ret = mt76_testmode_alloc_skb(phy->mt76, tx_len);
-	if (ret)
-		return ret;
-
-	return 0;
-}
-
-static void
-mt7915_tm_reg_backup_restore(struct mt7915_phy *phy)
-{
-	int n_regs = ARRAY_SIZE(reg_backup_list);
-	struct mt7915_dev *dev = phy->dev;
-	u32 *b = phy->test.reg_backup;
-	int i;
-
-	REG_BAND_IDX(reg_backup_list[0], AGG_PCR0, 0);
-	REG_BAND_IDX(reg_backup_list[1], AGG_PCR0, 1);
-	REG_BAND_IDX(reg_backup_list[2], AGG_AWSCR0, 0);
-	REG_BAND_IDX(reg_backup_list[3], AGG_AWSCR0, 1);
-	REG_BAND_IDX(reg_backup_list[4], AGG_AWSCR0, 2);
-	REG_BAND_IDX(reg_backup_list[5], AGG_AWSCR0, 3);
-	REG_BAND(reg_backup_list[6], AGG_MRCR);
-	REG_BAND(reg_backup_list[7], TMAC_TFCR0);
-	REG_BAND(reg_backup_list[8], TMAC_TCR0);
-	REG_BAND(reg_backup_list[9], AGG_ATCR1);
-	REG_BAND(reg_backup_list[10], AGG_ATCR3);
-	REG_BAND(reg_backup_list[11], TMAC_TRCR0);
-	REG_BAND(reg_backup_list[12], TMAC_ICR0);
-	REG_BAND_IDX(reg_backup_list[13], ARB_DRNGR0, 0);
-	REG_BAND_IDX(reg_backup_list[14], ARB_DRNGR0, 1);
-	REG_BAND(reg_backup_list[15], WF_RFCR);
-	REG_BAND(reg_backup_list[16], WF_RFCR1);
-
-	if (phy->mt76->test.state == MT76_TM_STATE_OFF) {
-		for (i = 0; i < n_regs; i++)
-			mt76_wr(dev, reg_backup_list[i].band[phy->band_idx], b[i]);
-		return;
-	}
-
-	if (!b) {
-		b = devm_kzalloc(dev->mt76.dev, 4 * n_regs, GFP_KERNEL);
-		if (!b)
-			return;
-
-		phy->test.reg_backup = b;
-		for (i = 0; i < n_regs; i++)
-			b[i] = mt76_rr(dev, reg_backup_list[i].band[phy->band_idx]);
-	}
-
-	mt76_clear(dev, MT_AGG_PCR0(phy->band_idx, 0), MT_AGG_PCR0_MM_PROT |
-		   MT_AGG_PCR0_GF_PROT | MT_AGG_PCR0_ERP_PROT |
-		   MT_AGG_PCR0_VHT_PROT | MT_AGG_PCR0_BW20_PROT |
-		   MT_AGG_PCR0_BW40_PROT | MT_AGG_PCR0_BW80_PROT);
-	mt76_set(dev, MT_AGG_PCR0(phy->band_idx, 0), MT_AGG_PCR0_PTA_WIN_DIS);
-
-	mt76_wr(dev, MT_AGG_PCR0(phy->band_idx, 1), MT_AGG_PCR1_RTS0_NUM_THRES |
-		MT_AGG_PCR1_RTS0_LEN_THRES);
-
-	mt76_clear(dev, MT_AGG_MRCR(phy->band_idx), MT_AGG_MRCR_BAR_CNT_LIMIT |
-		   MT_AGG_MRCR_LAST_RTS_CTS_RN | MT_AGG_MRCR_RTS_FAIL_LIMIT |
-		   MT_AGG_MRCR_TXCMD_RTS_FAIL_LIMIT);
-
-	mt76_rmw(dev, MT_AGG_MRCR(phy->band_idx), MT_AGG_MRCR_RTS_FAIL_LIMIT |
-		 MT_AGG_MRCR_TXCMD_RTS_FAIL_LIMIT,
-		 FIELD_PREP(MT_AGG_MRCR_RTS_FAIL_LIMIT, 1) |
-		 FIELD_PREP(MT_AGG_MRCR_TXCMD_RTS_FAIL_LIMIT, 1));
-
-	mt76_wr(dev, MT_TMAC_TFCR0(phy->band_idx), 0);
-	mt76_clear(dev, MT_TMAC_TCR0(phy->band_idx), MT_TMAC_TCR0_TBTT_STOP_CTRL);
-
-	/* config rx filter for testmode rx */
-	mt76_wr(dev, MT_WF_RFCR(phy->band_idx), 0xcf70a);
-	mt76_wr(dev, MT_WF_RFCR1(phy->band_idx), 0);
-}
-
-static void
-mt7915_tm_init(struct mt7915_phy *phy, bool en)
-{
-	struct mt7915_dev *dev = phy->dev;
-
-	if (!test_bit(MT76_STATE_RUNNING, &phy->mt76->state))
-		return;
-
-	mt7915_mcu_set_sku_en(phy, !en);
-
-	mt7915_tm_mode_ctrl(dev, en);
-	mt7915_tm_reg_backup_restore(phy);
-	mt7915_tm_set_trx(phy, TM_MAC_TXRX, !en);
-
-	mt7915_mcu_add_bss_info(phy, phy->monitor_vif, en);
-	mt7915_mcu_add_sta(dev, phy->monitor_vif, NULL, en);
-
-	if (!en)
-		mt7915_tm_set_tam_arb(phy, en, 0);
-}
-
-static void
-mt7915_tm_update_channel(struct mt7915_phy *phy)
-{
-	mutex_unlock(&phy->dev->mt76.mutex);
-	mt7915_set_channel(phy);
-	mutex_lock(&phy->dev->mt76.mutex);
-
-	mt7915_mcu_set_chan_info(phy, MCU_EXT_CMD(SET_RX_PATH));
-}
-
-static void
-mt7915_tm_set_tx_frames(struct mt7915_phy *phy, bool en)
-{
-	struct mt76_testmode_data *td = &phy->mt76->test;
-	struct mt7915_dev *dev = phy->dev;
-	struct ieee80211_tx_info *info;
-	u8 duty_cycle = td->tx_duty_cycle;
-	u32 tx_time = td->tx_time;
-	u32 ipg = td->tx_ipg;
-
-	mt7915_tm_set_trx(phy, TM_MAC_RX_RXV, false);
-	mt7915_tm_clean_hwq(phy, dev->mt76.global_wcid.idx);
-
-	if (en) {
-		mt7915_tm_update_channel(phy);
-
-		if (td->tx_spe_idx)
-			phy->test.spe_idx = td->tx_spe_idx;
-		else
-			phy->test.spe_idx = mt76_connac_spe_idx(td->tx_antenna_mask);
-	}
-
-	mt7915_tm_set_tam_arb(phy, en,
-			      td->tx_rate_mode == MT76_TM_TX_MODE_HE_MU);
-
-	/* if all three params are set, duty_cycle will be ignored */
-	if (duty_cycle && tx_time && !ipg) {
-		ipg = tx_time * 100 / duty_cycle - tx_time;
-	} else if (duty_cycle && !tx_time && ipg) {
-		if (duty_cycle < 100)
-			tx_time = duty_cycle * ipg / (100 - duty_cycle);
-	}
-
-	mt7915_tm_set_ipg_params(phy, ipg, td->tx_rate_mode);
-	mt7915_tm_set_tx_len(phy, tx_time);
-
-	if (ipg)
-		td->tx_queued_limit = MT76_TM_TIMEOUT * 1000000 / ipg / 2;
-
-	if (!en || !td->tx_skb)
-		return;
-
-	info = IEEE80211_SKB_CB(td->tx_skb);
-	info->control.vif = phy->monitor_vif;
-
-	mt7915_tm_set_trx(phy, TM_MAC_TX, en);
-}
-
-static void
-mt7915_tm_set_rx_frames(struct mt7915_phy *phy, bool en)
-{
-	mt7915_tm_set_trx(phy, TM_MAC_RX_RXV, false);
-
-	if (en) {
-		struct mt7915_dev *dev = phy->dev;
-
-		mt7915_tm_update_channel(phy);
-
-		/* read-clear */
-		mt76_rr(dev, MT_MIB_SDR3(phy != &dev->phy));
-		mt7915_tm_set_trx(phy, TM_MAC_RX_RXV, en);
-	}
-}
-
-static int
-mt7915_tm_rf_switch_mode(struct mt7915_dev *dev, u32 oper)
-{
-	struct mt7915_tm_rf_test req = {
-		.op.op_mode = cpu_to_le32(oper),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RF_TEST), &req,
-				 sizeof(req), true);
-}
-
-static int
-mt7915_tm_set_tx_cont(struct mt7915_phy *phy, bool en)
-{
-#define TX_CONT_START	0x05
-#define TX_CONT_STOP	0x06
-	struct mt7915_dev *dev = phy->dev;
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	int freq1 = ieee80211_frequency_to_channel(chandef->center_freq1);
-	struct mt76_testmode_data *td = &phy->mt76->test;
-	u32 func_idx = en ? TX_CONT_START : TX_CONT_STOP;
-	u8 rate_idx = td->tx_rate_idx, mode;
-	u16 rateval;
-	struct mt7915_tm_rf_test req = {
-		.action = 1,
-		.icap_len = 120,
-		.op.rf.func_idx = cpu_to_le32(func_idx),
-	};
-	struct tm_tx_cont *tx_cont = &req.op.rf.param.tx_cont;
-
-	tx_cont->control_ch = chandef->chan->hw_value;
-	tx_cont->center_ch = freq1;
-	tx_cont->tx_ant = td->tx_antenna_mask;
-	tx_cont->band = phy != &dev->phy;
-
-	switch (chandef->width) {
-	case NL80211_CHAN_WIDTH_40:
-		tx_cont->bw = CMD_CBW_40MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_80:
-		tx_cont->bw = CMD_CBW_80MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_80P80:
-		tx_cont->bw = CMD_CBW_8080MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_160:
-		tx_cont->bw = CMD_CBW_160MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_5:
-		tx_cont->bw = CMD_CBW_5MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_10:
-		tx_cont->bw = CMD_CBW_10MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_20:
-		tx_cont->bw = CMD_CBW_20MHZ;
-		break;
-	case NL80211_CHAN_WIDTH_20_NOHT:
-		tx_cont->bw = CMD_CBW_20MHZ;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	if (!en) {
-		req.op.rf.param.func_data = cpu_to_le32(phy != &dev->phy);
-		goto out;
-	}
-
-	if (td->tx_rate_mode <= MT76_TM_TX_MODE_OFDM) {
-		struct ieee80211_supported_band *sband;
-		u8 idx = rate_idx;
-
-		if (chandef->chan->band == NL80211_BAND_5GHZ)
-			sband = &phy->mt76->sband_5g.sband;
-		else if (chandef->chan->band == NL80211_BAND_6GHZ)
-			sband = &phy->mt76->sband_6g.sband;
-		else
-			sband = &phy->mt76->sband_2g.sband;
-
-		if (td->tx_rate_mode == MT76_TM_TX_MODE_OFDM)
-			idx += 4;
-		rate_idx = sband->bitrates[idx].hw_value & 0xff;
-	}
-
-	switch (td->tx_rate_mode) {
-	case MT76_TM_TX_MODE_CCK:
-		mode = MT_PHY_TYPE_CCK;
-		break;
-	case MT76_TM_TX_MODE_OFDM:
-		mode = MT_PHY_TYPE_OFDM;
-		break;
-	case MT76_TM_TX_MODE_HT:
-		mode = MT_PHY_TYPE_HT;
-		break;
-	case MT76_TM_TX_MODE_VHT:
-		mode = MT_PHY_TYPE_VHT;
-		break;
-	case MT76_TM_TX_MODE_HE_SU:
-		mode = MT_PHY_TYPE_HE_SU;
-		break;
-	case MT76_TM_TX_MODE_HE_EXT_SU:
-		mode = MT_PHY_TYPE_HE_EXT_SU;
-		break;
-	case MT76_TM_TX_MODE_HE_TB:
-		mode = MT_PHY_TYPE_HE_TB;
-		break;
-	case MT76_TM_TX_MODE_HE_MU:
-		mode = MT_PHY_TYPE_HE_MU;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	rateval =  mode << 6 | rate_idx;
-	tx_cont->rateval = cpu_to_le16(rateval);
-
-out:
-	if (!en) {
-		int ret;
-
-		ret = mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RF_TEST), &req,
-					sizeof(req), true);
-		if (ret)
-			return ret;
-
-		return mt7915_tm_rf_switch_mode(dev, RF_OPER_NORMAL);
-	}
-
-	mt7915_tm_rf_switch_mode(dev, RF_OPER_RF_TEST);
-	mt7915_tm_update_channel(phy);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RF_TEST), &req,
-				 sizeof(req), true);
-}
-
-static void
-mt7915_tm_update_params(struct mt7915_phy *phy, u32 changed)
-{
-	struct mt76_testmode_data *td = &phy->mt76->test;
-	bool en = phy->mt76->test.state != MT76_TM_STATE_OFF;
-
-	if (changed & BIT(TM_CHANGED_FREQ_OFFSET))
-		mt7915_tm_set_freq_offset(phy, en, en ? td->freq_offset : 0);
-	if (changed & BIT(TM_CHANGED_TXPOWER))
-		mt7915_tm_set_tx_power(phy);
-}
-
-static int
-mt7915_tm_set_state(struct mt76_phy *mphy, enum mt76_testmode_state state)
-{
-	struct mt76_testmode_data *td = &mphy->test;
-	struct mt7915_phy *phy = mphy->priv;
-	enum mt76_testmode_state prev_state = td->state;
-
-	mphy->test.state = state;
-
-	if (prev_state == MT76_TM_STATE_TX_FRAMES ||
-	    state == MT76_TM_STATE_TX_FRAMES)
-		mt7915_tm_set_tx_frames(phy, state == MT76_TM_STATE_TX_FRAMES);
-	else if (prev_state == MT76_TM_STATE_RX_FRAMES ||
-		 state == MT76_TM_STATE_RX_FRAMES)
-		mt7915_tm_set_rx_frames(phy, state == MT76_TM_STATE_RX_FRAMES);
-	else if (prev_state == MT76_TM_STATE_TX_CONT ||
-		 state == MT76_TM_STATE_TX_CONT)
-		mt7915_tm_set_tx_cont(phy, state == MT76_TM_STATE_TX_CONT);
-	else if (prev_state == MT76_TM_STATE_OFF ||
-		 state == MT76_TM_STATE_OFF)
-		mt7915_tm_init(phy, !(state == MT76_TM_STATE_OFF));
-
-	if ((state == MT76_TM_STATE_IDLE &&
-	     prev_state == MT76_TM_STATE_OFF) ||
-	    (state == MT76_TM_STATE_OFF &&
-	     prev_state == MT76_TM_STATE_IDLE)) {
-		u32 changed = 0;
-		int i;
-
-		for (i = 0; i < ARRAY_SIZE(tm_change_map); i++) {
-			u16 cur = tm_change_map[i];
-
-			if (td->param_set[cur / 32] & BIT(cur % 32))
-				changed |= BIT(i);
-		}
-
-		mt7915_tm_update_params(phy, changed);
-	}
-
-	return 0;
-}
-
-static int
-mt7915_tm_set_params(struct mt76_phy *mphy, struct nlattr **tb,
-		     enum mt76_testmode_state new_state)
-{
-	struct mt76_testmode_data *td = &mphy->test;
-	struct mt7915_phy *phy = mphy->priv;
-	struct mt7915_dev *dev = phy->dev;
-	u32 chainmask = mphy->chainmask, changed = 0;
-	bool ext_phy = phy != &dev->phy;
-	int i;
-
-	BUILD_BUG_ON(NUM_TM_CHANGED >= 32);
-
-	if (new_state == MT76_TM_STATE_OFF ||
-	    td->state == MT76_TM_STATE_OFF)
-		return 0;
-
-	chainmask = ext_phy ? chainmask >> dev->chainshift : chainmask;
-	if (td->tx_antenna_mask > chainmask)
-		return -EINVAL;
-
-	for (i = 0; i < ARRAY_SIZE(tm_change_map); i++) {
-		if (tb[tm_change_map[i]])
-			changed |= BIT(i);
-	}
-
-	mt7915_tm_update_params(phy, changed);
-
-	return 0;
-}
-
-static int
-mt7915_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
-{
-	struct mt7915_phy *phy = mphy->priv;
-	struct mt7915_dev *dev = phy->dev;
-	enum mt76_rxq_id q;
-	void *rx, *rssi;
-	u16 fcs_err;
-	int i;
-	u32 cnt;
-
-	rx = nla_nest_start(msg, MT76_TM_STATS_ATTR_LAST_RX);
-	if (!rx)
-		return -ENOMEM;
-
-	if (nla_put_s32(msg, MT76_TM_RX_ATTR_FREQ_OFFSET, phy->test.last_freq_offset))
-		return -ENOMEM;
-
-	rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_RCPI);
-	if (!rssi)
-		return -ENOMEM;
-
-	for (i = 0; i < ARRAY_SIZE(phy->test.last_rcpi); i++)
-		if (nla_put_u8(msg, i, phy->test.last_rcpi[i]))
-			return -ENOMEM;
-
-	nla_nest_end(msg, rssi);
-
-	rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_IB_RSSI);
-	if (!rssi)
-		return -ENOMEM;
-
-	for (i = 0; i < ARRAY_SIZE(phy->test.last_ib_rssi); i++)
-		if (nla_put_s8(msg, i, phy->test.last_ib_rssi[i]))
-			return -ENOMEM;
-
-	nla_nest_end(msg, rssi);
-
-	rssi = nla_nest_start(msg, MT76_TM_RX_ATTR_WB_RSSI);
-	if (!rssi)
-		return -ENOMEM;
-
-	for (i = 0; i < ARRAY_SIZE(phy->test.last_wb_rssi); i++)
-		if (nla_put_s8(msg, i, phy->test.last_wb_rssi[i]))
-			return -ENOMEM;
-
-	nla_nest_end(msg, rssi);
-
-	if (nla_put_u8(msg, MT76_TM_RX_ATTR_SNR, phy->test.last_snr))
-		return -ENOMEM;
-
-	nla_nest_end(msg, rx);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR3(phy->band_idx));
-	fcs_err = is_mt7915(&dev->mt76) ? FIELD_GET(MT_MIB_SDR3_FCS_ERR_MASK, cnt) :
-		FIELD_GET(MT_MIB_SDR3_FCS_ERR_MASK_MT7916, cnt);
-
-	q = phy->band_idx ? MT_RXQ_BAND1 : MT_RXQ_MAIN;
-	mphy->test.rx_stats.packets[q] += fcs_err;
-	mphy->test.rx_stats.fcs_error[q] += fcs_err;
-
-	return 0;
-}
-
-const struct mt76_testmode_ops mt7915_testmode_ops = {
-	.set_state = mt7915_tm_set_state,
-	.set_params = mt7915_tm_set_params,
-	.dump_stats = mt7915_tm_dump_stats,
-};
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/testmode.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/testmode.h
deleted file mode 100644
index 5573ac3..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7915/testmode.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT7915_TESTMODE_H
-#define __MT7915_TESTMODE_H
-
-struct mt7915_tm_trx {
-	u8 type;
-	u8 enable;
-	u8 band;
-	u8 rsv;
-};
-
-struct mt7915_tm_freq_offset {
-	u8 band;
-	__le32 freq_offset;
-};
-
-struct mt7915_tm_slot_time {
-	u8 slot_time;
-	u8 sifs;
-	u8 rifs;
-	u8 _rsv;
-	__le16 eifs;
-	u8 band;
-	u8 _rsv1[5];
-};
-
-struct mt7915_tm_clean_txq {
-	bool sta_pause;
-	u8 wcid;	/* 256 sta */
-	u8 band;
-	u8 rsv;
-};
-
-struct mt7915_tm_cmd {
-	u8 testmode_en;
-	u8 param_idx;
-	u8 _rsv[2];
-	union {
-		__le32 data;
-		struct mt7915_tm_trx trx;
-		struct mt7915_tm_freq_offset freq;
-		struct mt7915_tm_slot_time slot;
-		struct mt7915_tm_clean_txq clean;
-		u8 test[72];
-	} param;
-} __packed;
-
-enum {
-	TM_MAC_TX = 1,
-	TM_MAC_RX,
-	TM_MAC_TXRX,
-	TM_MAC_TXRX_RXV,
-	TM_MAC_RXV,
-	TM_MAC_RX_RXV,
-};
-
-struct tm_tx_cont {
-	u8 control_ch;
-	u8 center_ch;
-	u8 bw;
-	u8 tx_ant;
-	__le16 rateval;
-	u8 band;
-	u8 txfd_mode;
-};
-
-struct mt7915_tm_rf_test {
-	u8 action;
-	u8 icap_len;
-	u8 _rsv[2];
-	union {
-		__le32 op_mode;
-		__le32 freq;
-
-		struct {
-			__le32 func_idx;
-			union {
-				__le32 func_data;
-				__le32 cal_dump;
-
-				struct tm_tx_cont tx_cont;
-
-				u8 _pad[80];
-			} param;
-		} rf;
-	} op;
-} __packed;
-
-enum {
-	RF_OPER_NORMAL,
-	RF_OPER_RF_TEST,
-	RF_OPER_ICAP,
-	RF_OPER_ICAP_OVERLAP,
-	RF_OPER_WIFI_SPECTRUM,
-};
-
-enum {
-	TAM_ARB_OP_MODE_NORMAL = 1,
-	TAM_ARB_OP_MODE_TEST,
-	TAM_ARB_OP_MODE_FORCE_SU = 5,
-};
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/Kconfig b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/Kconfig
deleted file mode 100644
index adff2d7..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/Kconfig
+++ /dev/null
@@ -1,37 +0,0 @@
-# SPDX-License-Identifier: ISC
-config MT7921_COMMON
-	tristate
-	select MT76_CONNAC_LIB
-	select WANT_DEV_COREDUMP
-
-config MT7921E
-	tristate "MediaTek MT7921E (PCIe) support"
-	select MT7921_COMMON
-	depends on MAC80211
-	depends on PCI
-	help
-	  This adds support for MT7921E 802.11ax 2x2:2SS wireless devices.
-
-	  To compile this driver as a module, choose M here.
-
-config MT7921S
-	tristate "MediaTek MT7921S (SDIO) support"
-	select MT76_SDIO
-	select MT7921_COMMON
-	depends on MAC80211
-	depends on MMC
-	help
-	  This adds support for MT7921S 802.11ax 2x2:2SS wireless devices.
-
-	  To compile this driver as a module, choose M here.
-
-config MT7921U
-	tristate "MediaTek MT7921U (USB) support"
-	select MT76_USB
-	select MT7921_COMMON
-	depends on MAC80211
-	depends on USB
-	help
-	  This adds support for MT7921U 802.11ax 2x2:2SS wireless devices.
-
-	  To compile this driver as a module, choose M here.
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/Makefile b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/Makefile
deleted file mode 100644
index e5d2d2e..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-# SPDX-License-Identifier: ISC
-
-obj-$(CONFIG_MT7921_COMMON) += mt7921-common.o
-obj-$(CONFIG_MT7921E) += mt7921e.o
-obj-$(CONFIG_MT7921S) += mt7921s.o
-obj-$(CONFIG_MT7921U) += mt7921u.o
-
-CFLAGS_trace.o := -I$(src)
-
-mt7921-common-y := mac.o mcu.o main.o init.o debugfs.o trace.o
-mt7921-common-$(CONFIG_NL80211_TESTMODE) += testmode.o
-mt7921-common-$(CONFIG_ACPI) += acpi_sar.o
-mt7921e-y := pci.o pci_mac.o pci_mcu.o dma.o
-mt7921s-y := sdio.o sdio_mac.o sdio_mcu.o
-mt7921u-y := usb.o usb_mac.o
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/acpi_sar.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/acpi_sar.c
deleted file mode 100644
index 47e034a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/acpi_sar.c
+++ /dev/null
@@ -1,282 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2022 MediaTek Inc. */
-
-#include <linux/acpi.h>
-#include "mt7921.h"
-
-static int
-mt7921_acpi_read(struct mt7921_dev *dev, u8 *method, u8 **tbl, u32 *len)
-{
-	struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER, NULL };
-	union acpi_object *sar_root, *sar_unit;
-	struct mt76_dev *mdev = &dev->mt76;
-	acpi_handle root, handle;
-	acpi_status status;
-	u32 i = 0;
-	int ret;
-
-	root = ACPI_HANDLE(mdev->dev);
-	if (!root)
-		return -EOPNOTSUPP;
-
-	status = acpi_get_handle(root, method, &handle);
-	if (ACPI_FAILURE(status))
-		return -EIO;
-
-	status = acpi_evaluate_object(handle, NULL, NULL, &buf);
-	if (ACPI_FAILURE(status))
-		return -EIO;
-
-	sar_root = buf.pointer;
-	if (sar_root->type != ACPI_TYPE_PACKAGE ||
-	    sar_root->package.count < 4 ||
-	    sar_root->package.elements[0].type != ACPI_TYPE_INTEGER) {
-		dev_err(mdev->dev, "sar cnt = %d\n",
-			sar_root->package.count);
-		goto free;
-	}
-
-	if (!*tbl) {
-		*tbl = devm_kzalloc(mdev->dev, sar_root->package.count,
-				    GFP_KERNEL);
-		if (!*tbl)
-			goto free;
-	}
-	if (len)
-		*len = sar_root->package.count;
-
-	for (i = 0; i < sar_root->package.count; i++) {
-		sar_unit = &sar_root->package.elements[i];
-
-		if (sar_unit->type != ACPI_TYPE_INTEGER)
-			break;
-		*(*tbl + i) = (u8)sar_unit->integer.value;
-	}
-free:
-	ret = (i == sar_root->package.count) ? 0 : -EINVAL;
-
-	kfree(sar_root);
-
-	return ret;
-}
-
-/* MTCL : Country List Table for 6G band */
-static int
-mt7921_asar_acpi_read_mtcl(struct mt7921_dev *dev, u8 **table, u8 *version)
-{
-	*version = (mt7921_acpi_read(dev, MT7921_ACPI_MTCL, table, NULL) < 0)
-		   ? 1 : 2;
-	return 0;
-}
-
-/* MTDS : Dynamic SAR Power Table */
-static int
-mt7921_asar_acpi_read_mtds(struct mt7921_dev *dev, u8 **table, u8 version)
-{
-	int len, ret, sarlen, prelen, tblcnt;
-	bool enable;
-
-	ret = mt7921_acpi_read(dev, MT7921_ACPI_MTDS, table, &len);
-	if (ret)
-		return ret;
-
-	/* Table content validation */
-	switch (version) {
-	case 1:
-		enable = ((struct mt7921_asar_dyn *)*table)->enable;
-		sarlen = sizeof(struct mt7921_asar_dyn_limit);
-		prelen = sizeof(struct mt7921_asar_dyn);
-		break;
-	case 2:
-		enable = ((struct mt7921_asar_dyn_v2 *)*table)->enable;
-		sarlen = sizeof(struct mt7921_asar_dyn_limit_v2);
-		prelen = sizeof(struct mt7921_asar_dyn_v2);
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	tblcnt = (len - prelen) / sarlen;
-	if (!enable ||
-	    tblcnt > MT7921_ASAR_MAX_DYN || tblcnt < MT7921_ASAR_MIN_DYN)
-		ret = -EINVAL;
-
-	return ret;
-}
-
-/* MTGS : Geo SAR Power Table */
-static int
-mt7921_asar_acpi_read_mtgs(struct mt7921_dev *dev, u8 **table, u8 version)
-{
-	int len, ret = 0, sarlen, prelen, tblcnt;
-
-	ret = mt7921_acpi_read(dev, MT7921_ACPI_MTGS, table, &len);
-	if (ret)
-		return ret;
-
-	/* Table content validation */
-	switch (version) {
-	case 1:
-		sarlen = sizeof(struct mt7921_asar_geo_limit);
-		prelen = sizeof(struct mt7921_asar_geo);
-		break;
-	case 2:
-		sarlen = sizeof(struct mt7921_asar_geo_limit_v2);
-		prelen = sizeof(struct mt7921_asar_geo_v2);
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	tblcnt = (len - prelen) / sarlen;
-	if (tblcnt > MT7921_ASAR_MAX_GEO || tblcnt < MT7921_ASAR_MIN_GEO)
-		ret = -EINVAL;
-
-	return ret;
-}
-
-int mt7921_init_acpi_sar(struct mt7921_dev *dev)
-{
-	struct mt7921_acpi_sar *asar;
-	int ret;
-
-	asar = devm_kzalloc(dev->mt76.dev, sizeof(*asar), GFP_KERNEL);
-	if (!asar)
-		return -ENOMEM;
-
-	mt7921_asar_acpi_read_mtcl(dev, (u8 **)&asar->countrylist, &asar->ver);
-
-	/* MTDS is mandatory. Return error if table is invalid */
-	ret = mt7921_asar_acpi_read_mtds(dev, (u8 **)&asar->dyn, asar->ver);
-	if (ret) {
-		devm_kfree(dev->mt76.dev, asar->dyn);
-		devm_kfree(dev->mt76.dev, asar->countrylist);
-		devm_kfree(dev->mt76.dev, asar);
-		return ret;
-	}
-
-	/* MTGS is optional */
-	ret = mt7921_asar_acpi_read_mtgs(dev, (u8 **)&asar->geo, asar->ver);
-	if (ret) {
-		devm_kfree(dev->mt76.dev, asar->geo);
-		asar->geo = NULL;
-	}
-
-	dev->phy.acpisar = asar;
-
-	return 0;
-}
-
-static s8
-mt7921_asar_get_geo_pwr(struct mt7921_phy *phy,
-			enum nl80211_band band, s8 dyn_power)
-{
-	struct mt7921_acpi_sar *asar = phy->acpisar;
-	struct mt7921_asar_geo_band *band_pwr;
-	s8 geo_power;
-	u8 idx, max;
-
-	if (!asar->geo)
-		return dyn_power;
-
-	switch (phy->mt76->dev->region) {
-	case NL80211_DFS_FCC:
-		idx = 0;
-		break;
-	case NL80211_DFS_ETSI:
-		idx = 1;
-		break;
-	default: /* WW */
-		idx = 2;
-		break;
-	}
-
-	if (asar->ver == 1) {
-		band_pwr = &asar->geo->tbl[idx].band[0];
-		max = ARRAY_SIZE(asar->geo->tbl[idx].band);
-	} else {
-		band_pwr = &asar->geo_v2->tbl[idx].band[0];
-		max = ARRAY_SIZE(asar->geo_v2->tbl[idx].band);
-	}
-
-	switch (band) {
-	case NL80211_BAND_2GHZ:
-		idx = 0;
-		break;
-	case NL80211_BAND_5GHZ:
-		idx = 1;
-		break;
-	case NL80211_BAND_6GHZ:
-		idx = 2;
-		break;
-	default:
-		return dyn_power;
-	}
-
-	if (idx >= max)
-		return dyn_power;
-
-	geo_power = (band_pwr + idx)->pwr;
-	dyn_power += (band_pwr + idx)->offset;
-
-	return min(geo_power, dyn_power);
-}
-
-static s8
-mt7921_asar_range_pwr(struct mt7921_phy *phy,
-		      const struct cfg80211_sar_freq_ranges *range,
-		      u8 idx)
-{
-	const struct cfg80211_sar_capa *capa = phy->mt76->hw->wiphy->sar_capa;
-	struct mt7921_acpi_sar *asar = phy->acpisar;
-	u8 *limit, band, max;
-
-	if (!capa)
-		return 127;
-
-	if (asar->ver == 1) {
-		limit = &asar->dyn->tbl[0].frp[0];
-		max = ARRAY_SIZE(asar->dyn->tbl[0].frp);
-	} else {
-		limit = &asar->dyn_v2->tbl[0].frp[0];
-		max = ARRAY_SIZE(asar->dyn_v2->tbl[0].frp);
-	}
-
-	if (idx >= max)
-		return 127;
-
-	if (range->start_freq >= 5945)
-		band = NL80211_BAND_6GHZ;
-	else if (range->start_freq >= 5150)
-		band = NL80211_BAND_5GHZ;
-	else
-		band = NL80211_BAND_2GHZ;
-
-	return mt7921_asar_get_geo_pwr(phy, band, limit[idx]);
-}
-
-int mt7921_init_acpi_sar_power(struct mt7921_phy *phy, bool set_default)
-{
-	const struct cfg80211_sar_capa *capa = phy->mt76->hw->wiphy->sar_capa;
-	int i;
-
-	if (!phy->acpisar)
-		return 0;
-
-	/* When ACPI SAR enabled in HW, we should apply rules for .frp
-	 * 1. w/o .sar_specs : set ACPI SAR power as the defatul value
-	 * 2. w/  .sar_specs : set power with min(.sar_specs, ACPI_SAR)
-	 */
-	for (i = 0; i < capa->num_freq_ranges; i++) {
-		struct mt76_freq_range_power *frp = &phy->mt76->frp[i];
-
-		frp->range = set_default ? &capa->freq_ranges[i] : frp->range;
-		if (!frp->range)
-			continue;
-
-		frp->power = min_t(s8, set_default ? 127 : frp->power,
-				   mt7921_asar_range_pwr(phy, frp->range, i));
-	}
-
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/acpi_sar.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/acpi_sar.h
deleted file mode 100644
index 23f86bf..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/acpi_sar.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2022 MediaTek Inc. */
-
-#ifndef __MT7921_ACPI_SAR_H
-#define __MT7921_ACPI_SAR_H
-
-#define MT7921_ASAR_MIN_DYN		1
-#define MT7921_ASAR_MAX_DYN		8
-#define MT7921_ASAR_MIN_GEO		3
-#define MT7921_ASAR_MAX_GEO		8
-
-#define MT7921_ACPI_MTCL		"MTCL"
-#define MT7921_ACPI_MTDS		"MTDS"
-#define MT7921_ACPI_MTGS		"MTGS"
-
-struct mt7921_asar_dyn_limit {
-	u8 idx;
-	u8 frp[5];
-} __packed;
-
-struct mt7921_asar_dyn {
-	u8 names[4];
-	u8 enable;
-	u8 nr_tbl;
-	struct mt7921_asar_dyn_limit tbl[0];
-} __packed;
-
-struct mt7921_asar_dyn_limit_v2 {
-	u8 idx;
-	u8 frp[11];
-} __packed;
-
-struct mt7921_asar_dyn_v2 {
-	u8 names[4];
-	u8 enable;
-	u8 rsvd;
-	u8 nr_tbl;
-	struct mt7921_asar_dyn_limit_v2 tbl[0];
-} __packed;
-
-struct mt7921_asar_geo_band {
-	u8 pwr;
-	u8 offset;
-} __packed;
-
-struct mt7921_asar_geo_limit {
-	u8 idx;
-	/* 0:2G, 1:5G */
-	struct mt7921_asar_geo_band band[2];
-} __packed;
-
-struct mt7921_asar_geo {
-	u8 names[4];
-	u8 version;
-	u8 nr_tbl;
-	struct mt7921_asar_geo_limit tbl[0];
-} __packed;
-
-struct mt7921_asar_geo_limit_v2 {
-	u8 idx;
-	/* 0:2G, 1:5G, 2:6G */
-	struct mt7921_asar_geo_band band[3];
-} __packed;
-
-struct mt7921_asar_geo_v2 {
-	u8 names[4];
-	u8 version;
-	u8 rsvd;
-	u8 nr_tbl;
-	struct mt7921_asar_geo_limit_v2 tbl[0];
-} __packed;
-
-struct mt7921_asar_cl {
-	u8 names[4];
-	u8 version;
-	u8 mode_6g;
-	u8 cl6g[6];
-} __packed;
-
-struct mt7921_acpi_sar {
-	u8 ver;
-	union {
-		struct mt7921_asar_dyn *dyn;
-		struct mt7921_asar_dyn_v2 *dyn_v2;
-	};
-	union {
-		struct mt7921_asar_geo *geo;
-		struct mt7921_asar_geo_v2 *geo_v2;
-	};
-	struct mt7921_asar_cl *countrylist;
-};
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/debugfs.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/debugfs.c
deleted file mode 100644
index bce7641..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/debugfs.c
+++ /dev/null
@@ -1,461 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include "mt7921.h"
-#include "eeprom.h"
-
-static int
-mt7921_reg_set(void *data, u64 val)
-{
-	struct mt7921_dev *dev = data;
-
-	mt7921_mutex_acquire(dev);
-	mt76_wr(dev, dev->mt76.debugfs_reg, val);
-	mt7921_mutex_release(dev);
-
-	return 0;
-}
-
-static int
-mt7921_reg_get(void *data, u64 *val)
-{
-	struct mt7921_dev *dev = data;
-
-	mt7921_mutex_acquire(dev);
-	*val = mt76_rr(dev, dev->mt76.debugfs_reg);
-	mt7921_mutex_release(dev);
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_regval, mt7921_reg_get, mt7921_reg_set,
-			 "0x%08llx\n");
-static int
-mt7921_fw_debug_set(void *data, u64 val)
-{
-	struct mt7921_dev *dev = data;
-
-	mt7921_mutex_acquire(dev);
-
-	dev->fw_debug = (u8)val;
-	mt7921_mcu_fw_log_2_host(dev, dev->fw_debug);
-
-	mt7921_mutex_release(dev);
-
-	return 0;
-}
-
-static int
-mt7921_fw_debug_get(void *data, u64 *val)
-{
-	struct mt7921_dev *dev = data;
-
-	*val = dev->fw_debug;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug, mt7921_fw_debug_get,
-			 mt7921_fw_debug_set, "%lld\n");
-
-static void
-mt7921_ampdu_stat_read_phy(struct mt7921_phy *phy,
-			   struct seq_file *file)
-{
-	struct mt7921_dev *dev = file->private;
-	int bound[15], range[4], i;
-
-	if (!phy)
-		return;
-
-	mt7921_mac_update_mib_stats(phy);
-
-	/* Tx ampdu stat */
-	for (i = 0; i < ARRAY_SIZE(range); i++)
-		range[i] = mt76_rr(dev, MT_MIB_ARNG(0, i));
-
-	for (i = 0; i < ARRAY_SIZE(bound); i++)
-		bound[i] = MT_MIB_ARNCR_RANGE(range[i / 4], i % 4) + 1;
-
-	seq_printf(file, "\nPhy0\n");
-
-	seq_printf(file, "Length: %8d | ", bound[0]);
-	for (i = 0; i < ARRAY_SIZE(bound) - 1; i++)
-		seq_printf(file, "%3d  %3d | ", bound[i] + 1, bound[i + 1]);
-
-	seq_puts(file, "\nCount:  ");
-	for (i = 0; i < ARRAY_SIZE(bound); i++)
-		seq_printf(file, "%8d | ", dev->mt76.aggr_stats[i]);
-	seq_puts(file, "\n");
-
-	seq_printf(file, "BA miss count: %d\n", phy->mib.ba_miss_cnt);
-}
-
-static int
-mt7921_tx_stats_show(struct seq_file *file, void *data)
-{
-	struct mt7921_dev *dev = file->private;
-	struct mt7921_phy *phy = &dev->phy;
-	struct mib_stats *mib = &phy->mib;
-	int i;
-
-	mt7921_mutex_acquire(dev);
-
-	mt7921_ampdu_stat_read_phy(phy, file);
-
-	seq_puts(file, "Tx MSDU stat:\n");
-	for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++) {
-		seq_printf(file, "AMSDU pack count of %d MSDU in TXD: %8d ",
-			   i + 1, mib->tx_amsdu[i]);
-		if (mib->tx_amsdu_cnt)
-			seq_printf(file, "(%3d%%)\n",
-				   mib->tx_amsdu[i] * 100 / mib->tx_amsdu_cnt);
-		else
-			seq_puts(file, "\n");
-	}
-
-	mt7921_mutex_release(dev);
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7921_tx_stats);
-
-static int
-mt7921_queues_acq(struct seq_file *s, void *data)
-{
-	struct mt7921_dev *dev = dev_get_drvdata(s->private);
-	int i;
-
-	mt7921_mutex_acquire(dev);
-
-	for (i = 0; i < 4; i++) {
-		u32 ctrl, val, qlen = 0;
-		int j;
-
-		val = mt76_rr(dev, MT_PLE_AC_QEMPTY(i));
-		ctrl = BIT(31) | BIT(11) | (i << 24);
-
-		for (j = 0; j < 32; j++) {
-			if (val & BIT(j))
-				continue;
-
-			mt76_wr(dev, MT_PLE_FL_Q0_CTRL, ctrl | j);
-			qlen += mt76_get_field(dev, MT_PLE_FL_Q3_CTRL,
-					       GENMASK(11, 0));
-		}
-		seq_printf(s, "AC%d: queued=%d\n", i, qlen);
-	}
-
-	mt7921_mutex_release(dev);
-
-	return 0;
-}
-
-static int
-mt7921_queues_read(struct seq_file *s, void *data)
-{
-	struct mt7921_dev *dev = dev_get_drvdata(s->private);
-	struct {
-		struct mt76_queue *q;
-		char *queue;
-	} queue_map[] = {
-		{ dev->mphy.q_tx[MT_TXQ_BE],	 "WFDMA0" },
-		{ dev->mt76.q_mcu[MT_MCUQ_WM],	 "MCUWM"  },
-		{ dev->mt76.q_mcu[MT_MCUQ_FWDL], "MCUFWQ" },
-	};
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(queue_map); i++) {
-		struct mt76_queue *q = queue_map[i].q;
-
-		if (!q)
-			continue;
-
-		seq_printf(s,
-			   "%s:	queued=%d head=%d tail=%d\n",
-			   queue_map[i].queue, q->queued, q->head,
-			   q->tail);
-	}
-
-	return 0;
-}
-
-static void
-mt7921_seq_puts_array(struct seq_file *file, const char *str,
-		      s8 *val, int len)
-{
-	int i;
-
-	seq_printf(file, "%-16s:", str);
-	for (i = 0; i < len; i++)
-		if (val[i] == 127)
-			seq_printf(file, " %6s", "N.A");
-		else
-			seq_printf(file, " %6d", val[i]);
-	seq_puts(file, "\n");
-}
-
-#define mt7921_print_txpwr_entry(prefix, rate)				\
-({									\
-	mt7921_seq_puts_array(s, #prefix " (user)",			\
-			      txpwr.data[TXPWR_USER].rate,		\
-			      ARRAY_SIZE(txpwr.data[TXPWR_USER].rate)); \
-	mt7921_seq_puts_array(s, #prefix " (eeprom)",			\
-			      txpwr.data[TXPWR_EEPROM].rate,		\
-			      ARRAY_SIZE(txpwr.data[TXPWR_EEPROM].rate)); \
-	mt7921_seq_puts_array(s, #prefix " (tmac)",			\
-			      txpwr.data[TXPWR_MAC].rate,		\
-			      ARRAY_SIZE(txpwr.data[TXPWR_MAC].rate));	\
-})
-
-static int
-mt7921_txpwr(struct seq_file *s, void *data)
-{
-	struct mt7921_dev *dev = dev_get_drvdata(s->private);
-	struct mt7921_txpwr txpwr;
-	int ret;
-
-	mt7921_mutex_acquire(dev);
-	ret = mt7921_get_txpwr_info(dev, &txpwr);
-	mt7921_mutex_release(dev);
-
-	if (ret)
-		return ret;
-
-	seq_printf(s, "Tx power table (channel %d)\n", txpwr.ch);
-	seq_printf(s, "%-16s  %6s %6s %6s %6s\n",
-		   " ", "1m", "2m", "5m", "11m");
-	mt7921_print_txpwr_entry(CCK, cck);
-
-	seq_printf(s, "%-16s  %6s %6s %6s %6s %6s %6s %6s %6s\n",
-		   " ", "6m", "9m", "12m", "18m", "24m", "36m",
-		   "48m", "54m");
-	mt7921_print_txpwr_entry(OFDM, ofdm);
-
-	seq_printf(s, "%-16s  %6s %6s %6s %6s %6s %6s %6s %6s\n",
-		   " ", "mcs0", "mcs1", "mcs2", "mcs3", "mcs4", "mcs5",
-		   "mcs6", "mcs7");
-	mt7921_print_txpwr_entry(HT20, ht20);
-
-	seq_printf(s, "%-16s  %6s %6s %6s %6s %6s %6s %6s %6s %6s\n",
-		   " ", "mcs0", "mcs1", "mcs2", "mcs3", "mcs4", "mcs5",
-		   "mcs6", "mcs7", "mcs32");
-	mt7921_print_txpwr_entry(HT40, ht40);
-
-	seq_printf(s, "%-16s  %6s %6s %6s %6s %6s %6s %6s %6s %6s %6s %6s %6s\n",
-		   " ", "mcs0", "mcs1", "mcs2", "mcs3", "mcs4", "mcs5",
-		   "mcs6", "mcs7", "mcs8", "mcs9", "mcs10", "mcs11");
-	mt7921_print_txpwr_entry(VHT20, vht20);
-	mt7921_print_txpwr_entry(VHT40, vht40);
-	mt7921_print_txpwr_entry(VHT80, vht80);
-	mt7921_print_txpwr_entry(VHT160, vht160);
-	mt7921_print_txpwr_entry(HE26, he26);
-	mt7921_print_txpwr_entry(HE52, he52);
-	mt7921_print_txpwr_entry(HE106, he106);
-	mt7921_print_txpwr_entry(HE242, he242);
-	mt7921_print_txpwr_entry(HE484, he484);
-	mt7921_print_txpwr_entry(HE996, he996);
-	mt7921_print_txpwr_entry(HE996x2, he996x2);
-
-	return 0;
-}
-
-static int
-mt7921_pm_set(void *data, u64 val)
-{
-	struct mt7921_dev *dev = data;
-	struct mt76_connac_pm *pm = &dev->pm;
-
-	if (mt76_is_usb(&dev->mt76))
-		return -EOPNOTSUPP;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (val == pm->enable_user)
-		goto out;
-
-	if (!pm->enable_user) {
-		pm->stats.last_wake_event = jiffies;
-		pm->stats.last_doze_event = jiffies;
-	}
-	/* make sure the chip is awake here and ps_work is scheduled
-	 * just at end of the this routine.
-	 */
-	pm->enable = false;
-	mt76_connac_pm_wake(&dev->mphy, pm);
-
-	pm->enable_user = val;
-	mt7921_set_runtime_pm(dev);
-	mt76_connac_power_save_sched(&dev->mphy, pm);
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-static int
-mt7921_pm_get(void *data, u64 *val)
-{
-	struct mt7921_dev *dev = data;
-
-	*val = dev->pm.enable_user;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_pm, mt7921_pm_get, mt7921_pm_set, "%lld\n");
-
-static int
-mt7921_deep_sleep_set(void *data, u64 val)
-{
-	struct mt7921_dev *dev = data;
-	struct mt76_connac_pm *pm = &dev->pm;
-	bool monitor = !!(dev->mphy.hw->conf.flags & IEEE80211_CONF_MONITOR);
-	bool enable = !!val;
-
-	if (mt76_is_usb(&dev->mt76))
-		return -EOPNOTSUPP;
-
-	mt7921_mutex_acquire(dev);
-	if (pm->ds_enable_user == enable)
-		goto out;
-
-	pm->ds_enable_user = enable;
-	pm->ds_enable = enable && !monitor;
-	mt76_connac_mcu_set_deep_sleep(&dev->mt76, pm->ds_enable);
-out:
-	mt7921_mutex_release(dev);
-
-	return 0;
-}
-
-static int
-mt7921_deep_sleep_get(void *data, u64 *val)
-{
-	struct mt7921_dev *dev = data;
-
-	*val = dev->pm.ds_enable_user;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_ds, mt7921_deep_sleep_get,
-			 mt7921_deep_sleep_set, "%lld\n");
-
-static int
-mt7921_pm_stats(struct seq_file *s, void *data)
-{
-	struct mt7921_dev *dev = dev_get_drvdata(s->private);
-	struct mt76_connac_pm *pm = &dev->pm;
-
-	unsigned long awake_time = pm->stats.awake_time;
-	unsigned long doze_time = pm->stats.doze_time;
-
-	if (!test_bit(MT76_STATE_PM, &dev->mphy.state))
-		awake_time += jiffies - pm->stats.last_wake_event;
-	else
-		doze_time += jiffies - pm->stats.last_doze_event;
-
-	seq_printf(s, "awake time: %14u\ndoze time: %15u\n",
-		   jiffies_to_msecs(awake_time),
-		   jiffies_to_msecs(doze_time));
-
-	seq_printf(s, "low power wakes: %9d\n", pm->stats.lp_wake);
-
-	return 0;
-}
-
-static int
-mt7921_pm_idle_timeout_set(void *data, u64 val)
-{
-	struct mt7921_dev *dev = data;
-
-	dev->pm.idle_timeout = msecs_to_jiffies(val);
-
-	return 0;
-}
-
-static int
-mt7921_pm_idle_timeout_get(void *data, u64 *val)
-{
-	struct mt7921_dev *dev = data;
-
-	*val = jiffies_to_msecs(dev->pm.idle_timeout);
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_pm_idle_timeout, mt7921_pm_idle_timeout_get,
-			 mt7921_pm_idle_timeout_set, "%lld\n");
-
-static int mt7921_chip_reset(void *data, u64 val)
-{
-	struct mt7921_dev *dev = data;
-	int ret = 0;
-
-	switch (val) {
-	case 1:
-		/* Reset wifisys directly. */
-		mt7921_reset(&dev->mt76);
-		break;
-	default:
-		/* Collect the core dump before reset wifisys. */
-		mt7921_mutex_acquire(dev);
-		ret = mt76_connac_mcu_chip_config(&dev->mt76);
-		mt7921_mutex_release(dev);
-		break;
-	}
-
-	return ret;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_reset, NULL, mt7921_chip_reset, "%lld\n");
-
-static int
-mt7921s_sched_quota_read(struct seq_file *s, void *data)
-{
-	struct mt7921_dev *dev = dev_get_drvdata(s->private);
-	struct mt76_sdio *sdio = &dev->mt76.sdio;
-
-	seq_printf(s, "pse_data_quota\t%d\n", sdio->sched.pse_data_quota);
-	seq_printf(s, "ple_data_quota\t%d\n", sdio->sched.ple_data_quota);
-	seq_printf(s, "pse_mcu_quota\t%d\n", sdio->sched.pse_mcu_quota);
-	seq_printf(s, "sched_deficit\t%d\n", sdio->sched.deficit);
-
-	return 0;
-}
-
-int mt7921_init_debugfs(struct mt7921_dev *dev)
-{
-	struct dentry *dir;
-
-	dir = mt76_register_debugfs_fops(&dev->mphy, &fops_regval);
-	if (!dir)
-		return -ENOMEM;
-
-	if (mt76_is_mmio(&dev->mt76))
-		debugfs_create_devm_seqfile(dev->mt76.dev, "xmit-queues",
-					    dir, mt7921_queues_read);
-	else
-		debugfs_create_devm_seqfile(dev->mt76.dev, "xmit-queues",
-					    dir, mt76_queues_read);
-
-	debugfs_create_devm_seqfile(dev->mt76.dev, "acq", dir,
-				    mt7921_queues_acq);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "txpower_sku", dir,
-				    mt7921_txpwr);
-	debugfs_create_file("tx_stats", 0400, dir, dev, &mt7921_tx_stats_fops);
-	debugfs_create_file("fw_debug", 0600, dir, dev, &fops_fw_debug);
-	debugfs_create_file("runtime-pm", 0600, dir, dev, &fops_pm);
-	debugfs_create_file("idle-timeout", 0600, dir, dev,
-			    &fops_pm_idle_timeout);
-	debugfs_create_file("chip_reset", 0600, dir, dev, &fops_reset);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "runtime_pm_stats", dir,
-				    mt7921_pm_stats);
-	debugfs_create_file("deep-sleep", 0600, dir, dev, &fops_ds);
-	if (mt76_is_sdio(&dev->mt76))
-		debugfs_create_devm_seqfile(dev->mt76.dev, "sched-quota", dir,
-					    mt7921s_sched_quota_read);
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/dma.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/dma.c
deleted file mode 100644
index 6456c9a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/dma.c
+++ /dev/null
@@ -1,314 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include "mt7921.h"
-#include "../dma.h"
-#include "mac.h"
-
-static int mt7921_poll_tx(struct napi_struct *napi, int budget)
-{
-	struct mt7921_dev *dev;
-
-	dev = container_of(napi, struct mt7921_dev, mt76.tx_napi);
-
-	if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) {
-		napi_complete(napi);
-		queue_work(dev->mt76.wq, &dev->pm.wake_work);
-		return 0;
-	}
-
-	mt76_connac_tx_cleanup(&dev->mt76);
-	if (napi_complete(napi))
-		mt7921_irq_enable(dev, MT_INT_TX_DONE_ALL);
-	mt76_connac_pm_unref(&dev->mphy, &dev->pm);
-
-	return 0;
-}
-
-static int mt7921_poll_rx(struct napi_struct *napi, int budget)
-{
-	struct mt7921_dev *dev;
-	int done;
-
-	dev = container_of(napi->dev, struct mt7921_dev, mt76.napi_dev);
-
-	if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) {
-		napi_complete(napi);
-		queue_work(dev->mt76.wq, &dev->pm.wake_work);
-		return 0;
-	}
-	done = mt76_dma_rx_poll(napi, budget);
-	mt76_connac_pm_unref(&dev->mphy, &dev->pm);
-
-	return done;
-}
-
-static void mt7921_dma_prefetch(struct mt7921_dev *dev)
-{
-#define PREFETCH(base, depth)	((base) << 16 | (depth))
-
-	mt76_wr(dev, MT_WFDMA0_RX_RING0_EXT_CTRL, PREFETCH(0x0, 0x4));
-	mt76_wr(dev, MT_WFDMA0_RX_RING2_EXT_CTRL, PREFETCH(0x40, 0x4));
-	mt76_wr(dev, MT_WFDMA0_RX_RING3_EXT_CTRL, PREFETCH(0x80, 0x4));
-	mt76_wr(dev, MT_WFDMA0_RX_RING4_EXT_CTRL, PREFETCH(0xc0, 0x4));
-	mt76_wr(dev, MT_WFDMA0_RX_RING5_EXT_CTRL, PREFETCH(0x100, 0x4));
-
-	mt76_wr(dev, MT_WFDMA0_TX_RING0_EXT_CTRL, PREFETCH(0x140, 0x4));
-	mt76_wr(dev, MT_WFDMA0_TX_RING1_EXT_CTRL, PREFETCH(0x180, 0x4));
-	mt76_wr(dev, MT_WFDMA0_TX_RING2_EXT_CTRL, PREFETCH(0x1c0, 0x4));
-	mt76_wr(dev, MT_WFDMA0_TX_RING3_EXT_CTRL, PREFETCH(0x200, 0x4));
-	mt76_wr(dev, MT_WFDMA0_TX_RING4_EXT_CTRL, PREFETCH(0x240, 0x4));
-	mt76_wr(dev, MT_WFDMA0_TX_RING5_EXT_CTRL, PREFETCH(0x280, 0x4));
-	mt76_wr(dev, MT_WFDMA0_TX_RING6_EXT_CTRL, PREFETCH(0x2c0, 0x4));
-	mt76_wr(dev, MT_WFDMA0_TX_RING16_EXT_CTRL, PREFETCH(0x340, 0x4));
-	mt76_wr(dev, MT_WFDMA0_TX_RING17_EXT_CTRL, PREFETCH(0x380, 0x4));
-}
-
-static int mt7921_dma_disable(struct mt7921_dev *dev, bool force)
-{
-	if (force) {
-		/* reset */
-		mt76_clear(dev, MT_WFDMA0_RST,
-			   MT_WFDMA0_RST_DMASHDL_ALL_RST |
-			   MT_WFDMA0_RST_LOGIC_RST);
-
-		mt76_set(dev, MT_WFDMA0_RST,
-			 MT_WFDMA0_RST_DMASHDL_ALL_RST |
-			 MT_WFDMA0_RST_LOGIC_RST);
-	}
-
-	/* disable dmashdl */
-	mt76_clear(dev, MT_WFDMA0_GLO_CFG_EXT0,
-		   MT_WFDMA0_CSR_TX_DMASHDL_ENABLE);
-	mt76_set(dev, MT_DMASHDL_SW_CONTROL, MT_DMASHDL_DMASHDL_BYPASS);
-
-	/* disable WFDMA0 */
-	mt76_clear(dev, MT_WFDMA0_GLO_CFG,
-		   MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN |
-		   MT_WFDMA0_GLO_CFG_CSR_DISP_BASE_PTR_CHAIN_EN |
-		   MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-		   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO |
-		   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
-
-	if (!mt76_poll(dev, MT_WFDMA0_GLO_CFG,
-		       MT_WFDMA0_GLO_CFG_TX_DMA_BUSY |
-		       MT_WFDMA0_GLO_CFG_RX_DMA_BUSY, 0, 1000))
-		return -ETIMEDOUT;
-
-	return 0;
-}
-
-static int mt7921_dma_enable(struct mt7921_dev *dev)
-{
-	/* configure perfetch settings */
-	mt7921_dma_prefetch(dev);
-
-	/* reset dma idx */
-	mt76_wr(dev, MT_WFDMA0_RST_DTX_PTR, ~0);
-
-	/* configure delay interrupt */
-	mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG0, 0);
-
-	mt76_set(dev, MT_WFDMA0_GLO_CFG,
-		 MT_WFDMA0_GLO_CFG_TX_WB_DDONE |
-		 MT_WFDMA0_GLO_CFG_FIFO_LITTLE_ENDIAN |
-		 MT_WFDMA0_GLO_CFG_CLK_GAT_DIS |
-		 MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-		 MT_WFDMA0_GLO_CFG_CSR_DISP_BASE_PTR_CHAIN_EN |
-		 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
-
-	mt76_set(dev, MT_WFDMA0_GLO_CFG,
-		 MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-
-	mt76_set(dev, MT_WFDMA_DUMMY_CR, MT_WFDMA_NEED_REINIT);
-
-	/* enable interrupts for TX/RX rings */
-	mt7921_irq_enable(dev,
-			  MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL |
-			  MT_INT_MCU_CMD);
-	mt76_set(dev, MT_MCU2HOST_SW_INT_ENA, MT_MCU_CMD_WAKE_RX_PCIE);
-
-	return 0;
-}
-
-static int mt7921_dma_reset(struct mt7921_dev *dev, bool force)
-{
-	int i, err;
-
-	err = mt7921_dma_disable(dev, force);
-	if (err)
-		return err;
-
-	/* reset hw queues */
-	for (i = 0; i < __MT_TXQ_MAX; i++)
-		mt76_queue_reset(dev, dev->mphy.q_tx[i]);
-
-	for (i = 0; i < __MT_MCUQ_MAX; i++)
-		mt76_queue_reset(dev, dev->mt76.q_mcu[i]);
-
-	mt76_for_each_q_rx(&dev->mt76, i)
-		mt76_queue_reset(dev, &dev->mt76.q_rx[i]);
-
-	mt76_tx_status_check(&dev->mt76, true);
-
-	return mt7921_dma_enable(dev);
-}
-
-int mt7921_wfsys_reset(struct mt7921_dev *dev)
-{
-	mt76_clear(dev, MT_WFSYS_SW_RST_B, WFSYS_SW_RST_B);
-	msleep(50);
-	mt76_set(dev, MT_WFSYS_SW_RST_B, WFSYS_SW_RST_B);
-
-	if (!__mt76_poll_msec(&dev->mt76, MT_WFSYS_SW_RST_B,
-			      WFSYS_SW_INIT_DONE, WFSYS_SW_INIT_DONE, 500))
-		return -ETIMEDOUT;
-
-	return 0;
-}
-
-int mt7921_wpdma_reset(struct mt7921_dev *dev, bool force)
-{
-	int i, err;
-
-	/* clean up hw queues */
-	for (i = 0; i < ARRAY_SIZE(dev->mt76.phy.q_tx); i++)
-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], true);
-
-	for (i = 0; i < ARRAY_SIZE(dev->mt76.q_mcu); i++)
-		mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[i], true);
-
-	mt76_for_each_q_rx(&dev->mt76, i)
-		mt76_queue_rx_cleanup(dev, &dev->mt76.q_rx[i]);
-
-	if (force) {
-		err = mt7921_wfsys_reset(dev);
-		if (err)
-			return err;
-	}
-	err = mt7921_dma_reset(dev, force);
-	if (err)
-		return err;
-
-	mt76_for_each_q_rx(&dev->mt76, i)
-		mt76_queue_rx_reset(dev, i);
-
-	return 0;
-}
-
-int mt7921_wpdma_reinit_cond(struct mt7921_dev *dev)
-{
-	struct mt76_connac_pm *pm = &dev->pm;
-	int err;
-
-	/* check if the wpdma must be reinitialized */
-	if (mt7921_dma_need_reinit(dev)) {
-		/* disable interrutpts */
-		mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0);
-		mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0x0);
-
-		err = mt7921_wpdma_reset(dev, false);
-		if (err) {
-			dev_err(dev->mt76.dev, "wpdma reset failed\n");
-			return err;
-		}
-
-		/* enable interrutpts */
-		mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
-		pm->stats.lp_wake++;
-	}
-
-	return 0;
-}
-
-int mt7921_dma_init(struct mt7921_dev *dev)
-{
-	int ret;
-
-	mt76_dma_attach(&dev->mt76);
-
-	ret = mt7921_dma_disable(dev, true);
-	if (ret)
-		return ret;
-
-	ret = mt7921_wfsys_reset(dev);
-	if (ret)
-		return ret;
-
-	/* init tx queue */
-	ret = mt76_connac_init_tx_queues(dev->phy.mt76, MT7921_TXQ_BAND0,
-					 MT7921_TX_RING_SIZE,
-					 MT_TX_RING_BASE, 0);
-	if (ret)
-		return ret;
-
-	mt76_wr(dev, MT_WFDMA0_TX_RING0_EXT_CTRL, 0x4);
-
-	/* command to WM */
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WM, MT7921_TXQ_MCU_WM,
-				  MT7921_TX_MCU_RING_SIZE, MT_TX_RING_BASE);
-	if (ret)
-		return ret;
-
-	/* firmware download */
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_FWDL, MT7921_TXQ_FWDL,
-				  MT7921_TX_FWDL_RING_SIZE, MT_TX_RING_BASE);
-	if (ret)
-		return ret;
-
-	/* event from WM before firmware download */
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU],
-			       MT7921_RXQ_MCU_WM,
-			       MT7921_RX_MCU_RING_SIZE,
-			       MT_RX_BUF_SIZE, MT_RX_EVENT_RING_BASE);
-	if (ret)
-		return ret;
-
-	/* Change mcu queue after firmware download */
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU_WA],
-			       MT7921_RXQ_MCU_WM,
-			       MT7921_RX_MCU_RING_SIZE,
-			       MT_RX_BUF_SIZE, MT_WFDMA0(0x540));
-	if (ret)
-		return ret;
-
-	/* rx data */
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN],
-			       MT7921_RXQ_BAND0, MT7921_RX_RING_SIZE,
-			       MT_RX_BUF_SIZE, MT_RX_DATA_RING_BASE);
-	if (ret)
-		return ret;
-
-	ret = mt76_init_queues(dev, mt7921_poll_rx);
-	if (ret < 0)
-		return ret;
-
-	netif_tx_napi_add(&dev->mt76.tx_napi_dev, &dev->mt76.tx_napi,
-			  mt7921_poll_tx, NAPI_POLL_WEIGHT);
-	napi_enable(&dev->mt76.tx_napi);
-
-	return mt7921_dma_enable(dev);
-}
-
-void mt7921_dma_cleanup(struct mt7921_dev *dev)
-{
-	/* disable */
-	mt76_clear(dev, MT_WFDMA0_GLO_CFG,
-		   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-		   MT_WFDMA0_GLO_CFG_RX_DMA_EN |
-		   MT_WFDMA0_GLO_CFG_CSR_DISP_BASE_PTR_CHAIN_EN |
-		   MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-		   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO |
-		   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
-
-	/* reset */
-	mt76_clear(dev, MT_WFDMA0_RST,
-		   MT_WFDMA0_RST_DMASHDL_ALL_RST |
-		   MT_WFDMA0_RST_LOGIC_RST);
-
-	mt76_set(dev, MT_WFDMA0_RST,
-		 MT_WFDMA0_RST_DMASHDL_ALL_RST |
-		 MT_WFDMA0_RST_LOGIC_RST);
-
-	mt76_dma_cleanup(&dev->mt76);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/eeprom.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/eeprom.h
deleted file mode 100644
index 4b64727..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/eeprom.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT7921_EEPROM_H
-#define __MT7921_EEPROM_H
-
-#include "mt7921.h"
-
-enum mt7921_eeprom_field {
-	MT_EE_CHIP_ID =		0x000,
-	MT_EE_VERSION =		0x002,
-	MT_EE_MAC_ADDR =	0x004,
-	MT_EE_WIFI_CONF =	0x07c,
-	MT_EE_HW_TYPE =		0x55b,
-	__MT_EE_MAX =		0x9ff
-};
-
-#define MT_EE_WIFI_CONF_TX_MASK			BIT(0)
-#define MT_EE_WIFI_CONF_BAND_SEL		GENMASK(3, 2)
-
-#define MT_EE_HW_TYPE_ENCAP			BIT(0)
-
-enum mt7921_eeprom_band {
-	MT_EE_NA,
-	MT_EE_5GHZ,
-	MT_EE_2GHZ,
-	MT_EE_DUAL_BAND,
-};
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/init.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/init.c
deleted file mode 100644
index 739d18f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/init.c
+++ /dev/null
@@ -1,328 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/etherdevice.h>
-#include "mt7921.h"
-#include "mac.h"
-#include "mcu.h"
-#include "eeprom.h"
-
-static const struct ieee80211_iface_limit if_limits[] = {
-	{
-		.max = MT7921_MAX_INTERFACES,
-		.types = BIT(NL80211_IFTYPE_STATION)
-	},
-	{
-		.max = 1,
-		.types = BIT(NL80211_IFTYPE_AP)
-	}
-};
-
-static const struct ieee80211_iface_combination if_comb[] = {
-	{
-		.limits = if_limits,
-		.n_limits = ARRAY_SIZE(if_limits),
-		.max_interfaces = MT7921_MAX_INTERFACES,
-		.num_different_channels = 1,
-		.beacon_int_infra_match = true,
-	}
-};
-
-static void
-mt7921_regd_notifier(struct wiphy *wiphy,
-		     struct regulatory_request *request)
-{
-	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-
-	memcpy(dev->mt76.alpha2, request->alpha2, sizeof(dev->mt76.alpha2));
-	dev->mt76.region = request->dfs_region;
-
-	mt7921_mutex_acquire(dev);
-	mt7921_mcu_set_clc(dev, request->alpha2, request->country_ie_env);
-	mt76_connac_mcu_set_channel_domain(hw->priv);
-	mt7921_set_tx_sar_pwr(hw, NULL);
-	mt7921_mutex_release(dev);
-}
-
-static int
-mt7921_init_wiphy(struct ieee80211_hw *hw)
-{
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	struct mt7921_dev *dev = phy->dev;
-	struct wiphy *wiphy = hw->wiphy;
-
-	hw->queues = 4;
-	hw->max_rx_aggregation_subframes = 256;
-	hw->max_tx_aggregation_subframes = 256;
-	hw->netdev_features = NETIF_F_RXCSUM;
-
-	hw->radiotap_timestamp.units_pos =
-		IEEE80211_RADIOTAP_TIMESTAMP_UNIT_US;
-
-	phy->slottime = 9;
-
-	hw->sta_data_size = sizeof(struct mt7921_sta);
-	hw->vif_data_size = sizeof(struct mt7921_vif);
-
-	wiphy->iface_combinations = if_comb;
-	wiphy->flags &= ~(WIPHY_FLAG_IBSS_RSN | WIPHY_FLAG_4ADDR_AP |
-			  WIPHY_FLAG_4ADDR_STATION);
-	wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
-				 BIT(NL80211_IFTYPE_AP);
-	wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
-	wiphy->max_scan_ie_len = MT76_CONNAC_SCAN_IE_LEN;
-	wiphy->max_scan_ssids = 4;
-	wiphy->max_sched_scan_plan_interval =
-		MT76_CONNAC_MAX_TIME_SCHED_SCAN_INTERVAL;
-	wiphy->max_sched_scan_ie_len = IEEE80211_MAX_DATA_LEN;
-	wiphy->max_sched_scan_ssids = MT76_CONNAC_MAX_SCHED_SCAN_SSID;
-	wiphy->max_match_sets = MT76_CONNAC_MAX_SCAN_MATCH;
-	wiphy->max_sched_scan_reqs = 1;
-	wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
-	wiphy->reg_notifier = mt7921_regd_notifier;
-
-	wiphy->features |= NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR |
-			   NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR;
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_SET_SCAN_DWELL);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_LEGACY);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HT);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_VHT);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HE);
-
-	ieee80211_hw_set(hw, SINGLE_SCAN_ON_ALL_BANDS);
-	ieee80211_hw_set(hw, HAS_RATE_CONTROL);
-	ieee80211_hw_set(hw, SUPPORTS_TX_ENCAP_OFFLOAD);
-	ieee80211_hw_set(hw, SUPPORTS_RX_DECAP_OFFLOAD);
-	ieee80211_hw_set(hw, WANT_MONITOR_VIF);
-	ieee80211_hw_set(hw, SUPPORTS_PS);
-	ieee80211_hw_set(hw, SUPPORTS_DYNAMIC_PS);
-	ieee80211_hw_set(hw, SUPPORTS_VHT_EXT_NSS_BW);
-	ieee80211_hw_set(hw, CONNECTION_MONITOR);
-
-	if (dev->pm.enable)
-		ieee80211_hw_set(hw, CONNECTION_MONITOR);
-
-	hw->max_tx_fragments = 4;
-
-	return 0;
-}
-
-static void
-mt7921_mac_init_band(struct mt7921_dev *dev, u8 band)
-{
-	mt76_rmw_field(dev, MT_TMAC_CTCR0(band),
-		       MT_TMAC_CTCR0_INS_DDLMT_REFTIME, 0x3f);
-	mt76_set(dev, MT_TMAC_CTCR0(band),
-		 MT_TMAC_CTCR0_INS_DDLMT_VHT_SMPDU_EN |
-		 MT_TMAC_CTCR0_INS_DDLMT_EN);
-
-	mt76_set(dev, MT_WF_RMAC_MIB_TIME0(band), MT_WF_RMAC_MIB_RXTIME_EN);
-	mt76_set(dev, MT_WF_RMAC_MIB_AIRTIME0(band), MT_WF_RMAC_MIB_RXTIME_EN);
-
-	/* enable MIB tx-rx time reporting */
-	mt76_set(dev, MT_MIB_SCR1(band), MT_MIB_TXDUR_EN);
-	mt76_set(dev, MT_MIB_SCR1(band), MT_MIB_RXDUR_EN);
-
-	mt76_rmw_field(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_MAX_RX_LEN, 1536);
-	/* disable rx rate report by default due to hw issues */
-	mt76_clear(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_RXD_G5_EN);
-}
-
-int mt7921_mac_init(struct mt7921_dev *dev)
-{
-	int i;
-
-	mt76_rmw_field(dev, MT_MDP_DCR1, MT_MDP_DCR1_MAX_RX_LEN, 1536);
-	/* enable hardware de-agg */
-	mt76_set(dev, MT_MDP_DCR0, MT_MDP_DCR0_DAMSDU_EN);
-	/* enable hardware rx header translation */
-	mt76_set(dev, MT_MDP_DCR0, MT_MDP_DCR0_RX_HDR_TRANS_EN);
-
-	for (i = 0; i < MT7921_WTBL_SIZE; i++)
-		mt7921_mac_wtbl_update(dev, i,
-				       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-	for (i = 0; i < 2; i++)
-		mt7921_mac_init_band(dev, i);
-
-	dev->mt76.rxfilter = mt76_rr(dev, MT_WF_RFCR(0));
-
-	return mt76_connac_mcu_set_rts_thresh(&dev->mt76, 0x92b, 0);
-}
-EXPORT_SYMBOL_GPL(mt7921_mac_init);
-
-static int __mt7921_init_hardware(struct mt7921_dev *dev)
-{
-	int ret;
-
-	/* force firmware operation mode into normal state,
-	 * which should be set before firmware download stage.
-	 */
-	mt76_wr(dev, MT_SWDEF_MODE, MT_SWDEF_NORMAL_MODE);
-	ret = mt7921_mcu_init(dev);
-	if (ret)
-		goto out;
-
-	mt76_eeprom_override(&dev->mphy);
-
-	ret = mt7921_mcu_set_eeprom(dev);
-	if (ret)
-		goto out;
-
-	ret = mt7921_mac_init(dev);
-out:
-	return ret;
-}
-
-static int mt7921_init_hardware(struct mt7921_dev *dev)
-{
-	int ret, i;
-
-	set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-
-	for (i = 0; i < MT7921_MCU_INIT_RETRY_COUNT; i++) {
-		ret = __mt7921_init_hardware(dev);
-		if (!ret)
-			break;
-
-		mt7921_init_reset(dev);
-	}
-
-	if (i == MT7921_MCU_INIT_RETRY_COUNT) {
-		dev_err(dev->mt76.dev, "hardware init failed\n");
-		return ret;
-	}
-
-	return 0;
-}
-
-static int mt7921_init_wcid(struct mt7921_dev *dev)
-{
-	int idx;
-
-	/* Beacon and mgmt frames should occupy wcid 0 */
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7921_WTBL_STA - 1);
-	if (idx)
-		return -ENOSPC;
-
-	dev->mt76.global_wcid.idx = idx;
-	dev->mt76.global_wcid.hw_key_idx = -1;
-	dev->mt76.global_wcid.tx_info |= MT_WCID_TX_INFO_SET;
-	rcu_assign_pointer(dev->mt76.wcid[idx], &dev->mt76.global_wcid);
-
-	return 0;
-}
-
-static void mt7921_init_work(struct work_struct *work)
-{
-	struct mt7921_dev *dev = container_of(work, struct mt7921_dev,
-					      init_work);
-	int ret;
-
-	ret = mt7921_init_hardware(dev);
-	if (ret)
-		return;
-
-	mt76_set_stream_caps(&dev->mphy, true);
-	mt7921_set_stream_he_caps(&dev->phy);
-
-	ret = mt76_register_device(&dev->mt76, true, mt76_rates,
-				   ARRAY_SIZE(mt76_rates));
-	if (ret) {
-		dev_err(dev->mt76.dev, "register device failed\n");
-		return;
-	}
-
-	ret = mt7921_init_debugfs(dev);
-	if (ret) {
-		dev_err(dev->mt76.dev, "register debugfs failed\n");
-		return;
-	}
-
-	/* we support chip reset now */
-	dev->hw_init_done = true;
-
-	mt76_connac_mcu_set_deep_sleep(&dev->mt76, dev->pm.ds_enable);
-}
-
-int mt7921_register_device(struct mt7921_dev *dev)
-{
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	int ret;
-
-	dev->phy.dev = dev;
-	dev->phy.mt76 = &dev->mt76.phy;
-	dev->mt76.phy.priv = &dev->phy;
-	dev->mt76.tx_worker.fn = mt7921_tx_worker;
-
-	INIT_DELAYED_WORK(&dev->pm.ps_work, mt7921_pm_power_save_work);
-	INIT_WORK(&dev->pm.wake_work, mt7921_pm_wake_work);
-	spin_lock_init(&dev->pm.wake.lock);
-	mutex_init(&dev->pm.mutex);
-	init_waitqueue_head(&dev->pm.wait);
-	if (mt76_is_sdio(&dev->mt76))
-		init_waitqueue_head(&dev->mt76.sdio.wait);
-	spin_lock_init(&dev->pm.txq_lock);
-	INIT_DELAYED_WORK(&dev->mphy.mac_work, mt7921_mac_work);
-	INIT_DELAYED_WORK(&dev->phy.scan_work, mt7921_scan_work);
-	INIT_DELAYED_WORK(&dev->coredump.work, mt7921_coredump_work);
-#if IS_ENABLED(CONFIG_IPV6)
-	INIT_WORK(&dev->ipv6_ns_work, mt7921_set_ipv6_ns_work);
-	skb_queue_head_init(&dev->ipv6_ns_list);
-#endif
-	skb_queue_head_init(&dev->phy.scan_event_list);
-	skb_queue_head_init(&dev->coredump.msg_list);
-	INIT_LIST_HEAD(&dev->sta_poll_list);
-	spin_lock_init(&dev->sta_poll_lock);
-
-	INIT_WORK(&dev->reset_work, mt7921_mac_reset_work);
-	INIT_WORK(&dev->init_work, mt7921_init_work);
-
-	dev->pm.idle_timeout = MT7921_PM_TIMEOUT;
-	dev->pm.stats.last_wake_event = jiffies;
-	dev->pm.stats.last_doze_event = jiffies;
-	if (!mt76_is_usb(&dev->mt76)) {
-		dev->pm.enable_user = true;
-		dev->pm.enable = true;
-		dev->pm.ds_enable_user = true;
-		dev->pm.ds_enable = true;
-	}
-
-	if (!mt76_is_mmio(&dev->mt76))
-		hw->extra_tx_headroom += MT_SDIO_TXD_SIZE + MT_SDIO_HDR_SIZE;
-
-	mt7921_init_acpi_sar(dev);
-
-	ret = mt7921_init_wcid(dev);
-	if (ret)
-		return ret;
-
-	ret = mt7921_init_wiphy(hw);
-	if (ret)
-		return ret;
-
-	dev->mphy.sband_2g.sband.ht_cap.cap |=
-			IEEE80211_HT_CAP_LDPC_CODING |
-			IEEE80211_HT_CAP_MAX_AMSDU;
-	dev->mphy.sband_5g.sband.ht_cap.cap |=
-			IEEE80211_HT_CAP_LDPC_CODING |
-			IEEE80211_HT_CAP_MAX_AMSDU;
-	dev->mphy.sband_5g.sband.vht_cap.cap |=
-			IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 |
-			IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK |
-			IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
-			IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE |
-			(3 << IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT);
-	if (is_mt7922(&dev->mt76))
-		dev->mphy.sband_5g.sband.vht_cap.cap |=
-			IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ |
-			IEEE80211_VHT_CAP_SHORT_GI_160;
-
-	dev->mphy.hw->wiphy->available_antennas_rx = dev->mphy.chainmask;
-	dev->mphy.hw->wiphy->available_antennas_tx = dev->mphy.chainmask;
-
-	queue_work(system_wq, &dev->init_work);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt7921_register_device);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mac.c
deleted file mode 100644
index 1abf7d9..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mac.c
+++ /dev/null
@@ -1,1257 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/devcoredump.h>
-#include <linux/etherdevice.h>
-#include <linux/timekeeping.h>
-#include "mt7921.h"
-#include "../dma.h"
-#include "mac.h"
-#include "mcu.h"
-
-static struct mt76_wcid *mt7921_rx_get_wcid(struct mt7921_dev *dev,
-					    u16 idx, bool unicast)
-{
-	struct mt7921_sta *sta;
-	struct mt76_wcid *wcid;
-
-	if (idx >= ARRAY_SIZE(dev->mt76.wcid))
-		return NULL;
-
-	wcid = rcu_dereference(dev->mt76.wcid[idx]);
-	if (unicast || !wcid)
-		return wcid;
-
-	if (!wcid->sta)
-		return NULL;
-
-	sta = container_of(wcid, struct mt7921_sta, wcid);
-	if (!sta->vif)
-		return NULL;
-
-	return &sta->vif->sta.wcid;
-}
-
-void mt7921_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps)
-{
-}
-EXPORT_SYMBOL_GPL(mt7921_sta_ps);
-
-bool mt7921_mac_wtbl_update(struct mt7921_dev *dev, int idx, u32 mask)
-{
-	mt76_rmw(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_WLAN_IDX,
-		 FIELD_PREP(MT_WTBL_UPDATE_WLAN_IDX, idx) | mask);
-
-	return mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY,
-			 0, 5000);
-}
-
-void mt7921_mac_sta_poll(struct mt7921_dev *dev)
-{
-	static const u8 ac_to_tid[] = {
-		[IEEE80211_AC_BE] = 0,
-		[IEEE80211_AC_BK] = 1,
-		[IEEE80211_AC_VI] = 4,
-		[IEEE80211_AC_VO] = 6
-	};
-	struct ieee80211_sta *sta;
-	struct mt7921_sta *msta;
-	u32 tx_time[IEEE80211_NUM_ACS], rx_time[IEEE80211_NUM_ACS];
-	LIST_HEAD(sta_poll_list);
-	struct rate_info *rate;
-	int i;
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	list_splice_init(&dev->sta_poll_list, &sta_poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	while (true) {
-		bool clear = false;
-		u32 addr, val;
-		u16 idx;
-		u8 bw;
-
-		spin_lock_bh(&dev->sta_poll_lock);
-		if (list_empty(&sta_poll_list)) {
-			spin_unlock_bh(&dev->sta_poll_lock);
-			break;
-		}
-		msta = list_first_entry(&sta_poll_list,
-					struct mt7921_sta, poll_list);
-		list_del_init(&msta->poll_list);
-		spin_unlock_bh(&dev->sta_poll_lock);
-
-		idx = msta->wcid.idx;
-		addr = mt7921_mac_wtbl_lmac_addr(idx, MT_WTBL_AC0_CTT_OFFSET);
-
-		for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-			u32 tx_last = msta->airtime_ac[i];
-			u32 rx_last = msta->airtime_ac[i + 4];
-
-			msta->airtime_ac[i] = mt76_rr(dev, addr);
-			msta->airtime_ac[i + 4] = mt76_rr(dev, addr + 4);
-
-			tx_time[i] = msta->airtime_ac[i] - tx_last;
-			rx_time[i] = msta->airtime_ac[i + 4] - rx_last;
-
-			if ((tx_last | rx_last) & BIT(30))
-				clear = true;
-
-			addr += 8;
-		}
-
-		if (clear) {
-			mt7921_mac_wtbl_update(dev, idx,
-					       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-			memset(msta->airtime_ac, 0, sizeof(msta->airtime_ac));
-		}
-
-		if (!msta->wcid.sta)
-			continue;
-
-		sta = container_of((void *)msta, struct ieee80211_sta,
-				   drv_priv);
-		for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-			u8 q = mt76_connac_lmac_mapping(i);
-			u32 tx_cur = tx_time[q];
-			u32 rx_cur = rx_time[q];
-			u8 tid = ac_to_tid[i];
-
-			if (!tx_cur && !rx_cur)
-				continue;
-
-			ieee80211_sta_register_airtime(sta, tid, tx_cur,
-						       rx_cur);
-		}
-
-		/* We don't support reading GI info from txs packets.
-		 * For accurate tx status reporting and AQL improvement,
-		 * we need to make sure that flags match so polling GI
-		 * from per-sta counters directly.
-		 */
-		rate = &msta->wcid.rate;
-		addr = mt7921_mac_wtbl_lmac_addr(idx,
-						 MT_WTBL_TXRX_CAP_RATE_OFFSET);
-		val = mt76_rr(dev, addr);
-
-		switch (rate->bw) {
-		case RATE_INFO_BW_160:
-			bw = IEEE80211_STA_RX_BW_160;
-			break;
-		case RATE_INFO_BW_80:
-			bw = IEEE80211_STA_RX_BW_80;
-			break;
-		case RATE_INFO_BW_40:
-			bw = IEEE80211_STA_RX_BW_40;
-			break;
-		default:
-			bw = IEEE80211_STA_RX_BW_20;
-			break;
-		}
-
-		if (rate->flags & RATE_INFO_FLAGS_HE_MCS) {
-			u8 offs = MT_WTBL_TXRX_RATE_G2_HE + 2 * bw;
-
-			rate->he_gi = (val & (0x3 << offs)) >> offs;
-		} else if (rate->flags &
-			   (RATE_INFO_FLAGS_VHT_MCS | RATE_INFO_FLAGS_MCS)) {
-			if (val & BIT(MT_WTBL_TXRX_RATE_G2 + bw))
-				rate->flags |= RATE_INFO_FLAGS_SHORT_GI;
-			else
-				rate->flags &= ~RATE_INFO_FLAGS_SHORT_GI;
-		}
-	}
-}
-EXPORT_SYMBOL_GPL(mt7921_mac_sta_poll);
-
-static void
-mt7921_get_status_freq_info(struct mt7921_dev *dev, struct mt76_phy *mphy,
-			    struct mt76_rx_status *status, u8 chfreq)
-{
-	if (!test_bit(MT76_HW_SCANNING, &mphy->state) &&
-	    !test_bit(MT76_HW_SCHED_SCANNING, &mphy->state) &&
-	    !test_bit(MT76_STATE_ROC, &mphy->state)) {
-		status->freq = mphy->chandef.chan->center_freq;
-		status->band = mphy->chandef.chan->band;
-		return;
-	}
-
-	if (chfreq > 180) {
-		status->band = NL80211_BAND_6GHZ;
-		chfreq = (chfreq - 181) * 4 + 1;
-	} else if (chfreq > 14) {
-		status->band = NL80211_BAND_5GHZ;
-	} else {
-		status->band = NL80211_BAND_2GHZ;
-	}
-	status->freq = ieee80211_channel_to_frequency(chfreq, status->band);
-}
-
-static void
-mt7921_mac_rssi_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	struct sk_buff *skb = priv;
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct ieee80211_hdr *hdr = mt76_skb_get_hdr(skb);
-
-	if (status->signal > 0)
-		return;
-
-	if (!ether_addr_equal(vif->addr, hdr->addr1))
-		return;
-
-	ewma_rssi_add(&mvif->rssi, -status->signal);
-}
-
-static void
-mt7921_mac_assoc_rssi(struct mt7921_dev *dev, struct sk_buff *skb)
-{
-	struct ieee80211_hdr *hdr = mt76_skb_get_hdr(skb);
-
-	if (!ieee80211_is_assoc_resp(hdr->frame_control) &&
-	    !ieee80211_is_auth(hdr->frame_control))
-		return;
-
-	ieee80211_iterate_active_interfaces_atomic(mt76_hw(dev),
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		mt7921_mac_rssi_iter, skb);
-}
-
-static int
-mt7921_mac_fill_rx(struct mt7921_dev *dev, struct sk_buff *skb)
-{
-	u32 csum_mask = MT_RXD0_NORMAL_IP_SUM | MT_RXD0_NORMAL_UDP_TCP_SUM;
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	bool hdr_trans, unicast, insert_ccmp_hdr = false;
-	u8 chfreq, qos_ctl = 0, remove_pad, amsdu_info;
-	u16 hdr_gap;
-	__le32 *rxv = NULL, *rxd = (__le32 *)skb->data;
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7921_phy *phy = &dev->phy;
-	struct ieee80211_supported_band *sband;
-	u32 csum_status = *(u32 *)skb->cb;
-	u32 rxd0 = le32_to_cpu(rxd[0]);
-	u32 rxd1 = le32_to_cpu(rxd[1]);
-	u32 rxd2 = le32_to_cpu(rxd[2]);
-	u32 rxd3 = le32_to_cpu(rxd[3]);
-	u32 rxd4 = le32_to_cpu(rxd[4]);
-	struct mt7921_sta *msta = NULL;
-	u16 seq_ctrl = 0;
-	__le16 fc = 0;
-	u8 mode = 0;
-	int i, idx;
-
-	memset(status, 0, sizeof(*status));
-
-	if (rxd1 & MT_RXD1_NORMAL_BAND_IDX)
-		return -EINVAL;
-
-	if (!test_bit(MT76_STATE_RUNNING, &mphy->state))
-		return -EINVAL;
-
-	if (rxd2 & MT_RXD2_NORMAL_AMSDU_ERR)
-		return -EINVAL;
-
-	hdr_trans = rxd2 & MT_RXD2_NORMAL_HDR_TRANS;
-	if (hdr_trans && (rxd1 & MT_RXD1_NORMAL_CM))
-		return -EINVAL;
-
-	/* ICV error or CCMP/BIP/WPI MIC error */
-	if (rxd1 & MT_RXD1_NORMAL_ICV_ERR)
-		status->flag |= RX_FLAG_ONLY_MONITOR;
-
-	chfreq = FIELD_GET(MT_RXD3_NORMAL_CH_FREQ, rxd3);
-	unicast = FIELD_GET(MT_RXD3_NORMAL_ADDR_TYPE, rxd3) == MT_RXD3_NORMAL_U2M;
-	idx = FIELD_GET(MT_RXD1_NORMAL_WLAN_IDX, rxd1);
-	status->wcid = mt7921_rx_get_wcid(dev, idx, unicast);
-
-	if (status->wcid) {
-		msta = container_of(status->wcid, struct mt7921_sta, wcid);
-		spin_lock_bh(&dev->sta_poll_lock);
-		if (list_empty(&msta->poll_list))
-			list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-		spin_unlock_bh(&dev->sta_poll_lock);
-	}
-
-	mt7921_get_status_freq_info(dev, mphy, status, chfreq);
-
-	switch (status->band) {
-	case NL80211_BAND_5GHZ:
-		sband = &mphy->sband_5g.sband;
-		break;
-	case NL80211_BAND_6GHZ:
-		sband = &mphy->sband_6g.sband;
-		break;
-	default:
-		sband = &mphy->sband_2g.sband;
-		break;
-	}
-
-	if (!sband->channels)
-		return -EINVAL;
-
-	if (mt76_is_mmio(&dev->mt76) && (rxd0 & csum_mask) == csum_mask &&
-	    !(csum_status & (BIT(0) | BIT(2) | BIT(3))))
-		skb->ip_summed = CHECKSUM_UNNECESSARY;
-
-	if (rxd1 & MT_RXD1_NORMAL_FCS_ERR)
-		status->flag |= RX_FLAG_FAILED_FCS_CRC;
-
-	if (rxd1 & MT_RXD1_NORMAL_TKIP_MIC_ERR)
-		status->flag |= RX_FLAG_MMIC_ERROR;
-
-	if (FIELD_GET(MT_RXD1_NORMAL_SEC_MODE, rxd1) != 0 &&
-	    !(rxd1 & (MT_RXD1_NORMAL_CLM | MT_RXD1_NORMAL_CM))) {
-		status->flag |= RX_FLAG_DECRYPTED;
-		status->flag |= RX_FLAG_IV_STRIPPED;
-		status->flag |= RX_FLAG_MMIC_STRIPPED | RX_FLAG_MIC_STRIPPED;
-	}
-
-	remove_pad = FIELD_GET(MT_RXD2_NORMAL_HDR_OFFSET, rxd2);
-
-	if (rxd2 & MT_RXD2_NORMAL_MAX_LEN_ERROR)
-		return -EINVAL;
-
-	rxd += 6;
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_4) {
-		u32 v0 = le32_to_cpu(rxd[0]);
-		u32 v2 = le32_to_cpu(rxd[2]);
-
-		fc = cpu_to_le16(FIELD_GET(MT_RXD6_FRAME_CONTROL, v0));
-		seq_ctrl = FIELD_GET(MT_RXD8_SEQ_CTRL, v2);
-		qos_ctl = FIELD_GET(MT_RXD8_QOS_CTL, v2);
-
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_1) {
-		u8 *data = (u8 *)rxd;
-
-		if (status->flag & RX_FLAG_DECRYPTED) {
-			switch (FIELD_GET(MT_RXD1_NORMAL_SEC_MODE, rxd1)) {
-			case MT_CIPHER_AES_CCMP:
-			case MT_CIPHER_CCMP_CCX:
-			case MT_CIPHER_CCMP_256:
-				insert_ccmp_hdr =
-					FIELD_GET(MT_RXD2_NORMAL_FRAG, rxd2);
-				fallthrough;
-			case MT_CIPHER_TKIP:
-			case MT_CIPHER_TKIP_NO_MIC:
-			case MT_CIPHER_GCMP:
-			case MT_CIPHER_GCMP_256:
-				status->iv[0] = data[5];
-				status->iv[1] = data[4];
-				status->iv[2] = data[3];
-				status->iv[3] = data[2];
-				status->iv[4] = data[1];
-				status->iv[5] = data[0];
-				break;
-			default:
-				break;
-			}
-		}
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_2) {
-		status->timestamp = le32_to_cpu(rxd[0]);
-		status->flag |= RX_FLAG_MACTIME_START;
-
-		if (!(rxd2 & MT_RXD2_NORMAL_NON_AMPDU)) {
-			status->flag |= RX_FLAG_AMPDU_DETAILS;
-
-			/* all subframes of an A-MPDU have the same timestamp */
-			if (phy->rx_ampdu_ts != status->timestamp) {
-				if (!++phy->ampdu_ref)
-					phy->ampdu_ref++;
-			}
-			phy->rx_ampdu_ts = status->timestamp;
-
-			status->ampdu_ref = phy->ampdu_ref;
-		}
-
-		rxd += 2;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	/* RXD Group 3 - P-RXV */
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_3) {
-		u32 v0, v1;
-		int ret;
-
-		rxv = rxd;
-		rxd += 2;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-
-		v0 = le32_to_cpu(rxv[0]);
-		v1 = le32_to_cpu(rxv[1]);
-
-		if (v0 & MT_PRXV_HT_AD_CODE)
-			status->enc_flags |= RX_ENC_FLAG_LDPC;
-
-		ret = mt76_connac2_mac_fill_rx_rate(&dev->mt76, status, sband,
-						    rxv, &mode);
-		if (ret < 0)
-			return ret;
-
-		if (rxd1 & MT_RXD1_NORMAL_GROUP_5) {
-			rxd += 6;
-			if ((u8 *)rxd - skb->data >= skb->len)
-				return -EINVAL;
-
-			rxv = rxd;
-			/* Monitor mode would use RCPI described in GROUP 5
-			 * instead.
-			 */
-			v1 = le32_to_cpu(rxv[0]);
-
-			rxd += 12;
-			if ((u8 *)rxd - skb->data >= skb->len)
-				return -EINVAL;
-		}
-
-		status->chains = mphy->antenna_mask;
-		status->chain_signal[0] = to_rssi(MT_PRXV_RCPI0, v1);
-		status->chain_signal[1] = to_rssi(MT_PRXV_RCPI1, v1);
-		status->chain_signal[2] = to_rssi(MT_PRXV_RCPI2, v1);
-		status->chain_signal[3] = to_rssi(MT_PRXV_RCPI3, v1);
-		status->signal = -128;
-		for (i = 0; i < hweight8(mphy->antenna_mask); i++) {
-			if (!(status->chains & BIT(i)) ||
-			    status->chain_signal[i] >= 0)
-				continue;
-
-			status->signal = max(status->signal,
-					     status->chain_signal[i]);
-		}
-	}
-
-	amsdu_info = FIELD_GET(MT_RXD4_NORMAL_PAYLOAD_FORMAT, rxd4);
-	status->amsdu = !!amsdu_info;
-	if (status->amsdu) {
-		status->first_amsdu = amsdu_info == MT_RXD4_FIRST_AMSDU_FRAME;
-		status->last_amsdu = amsdu_info == MT_RXD4_LAST_AMSDU_FRAME;
-	}
-
-	hdr_gap = (u8 *)rxd - skb->data + 2 * remove_pad;
-	if (hdr_trans && ieee80211_has_morefrags(fc)) {
-		struct ieee80211_vif *vif;
-		int err;
-
-		if (!msta || !msta->vif)
-			return -EINVAL;
-
-		vif = container_of((void *)msta->vif, struct ieee80211_vif,
-				   drv_priv);
-		err = mt76_connac2_reverse_frag0_hdr_trans(vif, skb, hdr_gap);
-		if (err)
-			return err;
-
-		hdr_trans = false;
-	} else {
-		skb_pull(skb, hdr_gap);
-		if (!hdr_trans && status->amsdu) {
-			memmove(skb->data + 2, skb->data,
-				ieee80211_get_hdrlen_from_skb(skb));
-			skb_pull(skb, 2);
-		}
-	}
-
-	if (!hdr_trans) {
-		struct ieee80211_hdr *hdr;
-
-		if (insert_ccmp_hdr) {
-			u8 key_id = FIELD_GET(MT_RXD1_NORMAL_KEY_ID, rxd1);
-
-			mt76_insert_ccmp_hdr(skb, key_id);
-		}
-
-		hdr = mt76_skb_get_hdr(skb);
-		fc = hdr->frame_control;
-		if (ieee80211_is_data_qos(fc)) {
-			seq_ctrl = le16_to_cpu(hdr->seq_ctrl);
-			qos_ctl = *ieee80211_get_qos_ctl(hdr);
-		}
-	} else {
-		status->flag |= RX_FLAG_8023;
-	}
-
-	mt7921_mac_assoc_rssi(dev, skb);
-
-	if (rxv && mode >= MT_PHY_TYPE_HE_SU && !(status->flag & RX_FLAG_8023))
-		mt76_connac2_mac_decode_he_radiotap(&dev->mt76, skb, rxv, mode);
-
-	if (!status->wcid || !ieee80211_is_data_qos(fc))
-		return 0;
-
-	status->aggr = unicast && !ieee80211_is_qos_nullfunc(fc);
-	status->seqno = IEEE80211_SEQ_TO_SN(seq_ctrl);
-	status->qos_ctl = qos_ctl;
-
-	return 0;
-}
-
-static void mt7921_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
-{
-	struct mt7921_sta *msta;
-	u16 fc, tid;
-	u32 val;
-
-	if (!sta || !(sta->ht_cap.ht_supported || sta->he_cap.has_he))
-		return;
-
-	tid = le32_get_bits(txwi[1], MT_TXD1_TID);
-	if (tid >= 6) /* skip VO queue */
-		return;
-
-	val = le32_to_cpu(txwi[2]);
-	fc = FIELD_GET(MT_TXD2_FRAME_TYPE, val) << 2 |
-	     FIELD_GET(MT_TXD2_SUB_TYPE, val) << 4;
-	if (unlikely(fc != (IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_DATA)))
-		return;
-
-	msta = (struct mt7921_sta *)sta->drv_priv;
-	if (!test_and_set_bit(tid, &msta->ampdu_state))
-		ieee80211_start_tx_ba_session(sta, tid, 0);
-}
-
-void mt7921_mac_add_txs(struct mt7921_dev *dev, void *data)
-{
-	struct mt7921_sta *msta = NULL;
-	struct mt76_wcid *wcid;
-	__le32 *txs_data = data;
-	u16 wcidx;
-	u8 pid;
-
-	if (le32_get_bits(txs_data[0], MT_TXS0_TXS_FORMAT) > 1)
-		return;
-
-	wcidx = le32_get_bits(txs_data[2], MT_TXS2_WCID);
-	pid = le32_get_bits(txs_data[3], MT_TXS3_PID);
-
-	if (pid < MT_PACKET_ID_FIRST)
-		return;
-
-	if (wcidx >= MT7921_WTBL_SIZE)
-		return;
-
-	rcu_read_lock();
-
-	wcid = rcu_dereference(dev->mt76.wcid[wcidx]);
-	if (!wcid)
-		goto out;
-
-	msta = container_of(wcid, struct mt7921_sta, wcid);
-
-	mt76_connac2_mac_add_txs_skb(&dev->mt76, wcid, pid, txs_data);
-	if (!wcid->sta)
-		goto out;
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (list_empty(&msta->poll_list))
-		list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-out:
-	rcu_read_unlock();
-}
-
-void mt7921_txwi_free(struct mt7921_dev *dev, struct mt76_txwi_cache *t,
-		      struct ieee80211_sta *sta, bool clear_status,
-		      struct list_head *free_list)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	__le32 *txwi;
-	u16 wcid_idx;
-
-	mt76_connac_txp_skb_unmap(mdev, t);
-	if (!t->skb)
-		goto out;
-
-	txwi = (__le32 *)mt76_get_txwi_ptr(mdev, t);
-	if (sta) {
-		struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv;
-
-		if (likely(t->skb->protocol != cpu_to_be16(ETH_P_PAE)))
-			mt7921_tx_check_aggr(sta, txwi);
-
-		wcid_idx = wcid->idx;
-	} else {
-		wcid_idx = le32_get_bits(txwi[1], MT_TXD1_WLAN_IDX);
-	}
-
-	__mt76_tx_complete_skb(mdev, wcid_idx, t->skb, free_list);
-out:
-	t->skb = NULL;
-	mt76_put_txwi(mdev, t);
-}
-EXPORT_SYMBOL_GPL(mt7921_txwi_free);
-
-static void mt7921_mac_tx_free(struct mt7921_dev *dev, void *data, int len)
-{
-	struct mt76_connac_tx_free *free = data;
-	__le32 *tx_info = (__le32 *)(data + sizeof(*free));
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt76_txwi_cache *txwi;
-	struct ieee80211_sta *sta = NULL;
-	struct sk_buff *skb, *tmp;
-	void *end = data + len;
-	LIST_HEAD(free_list);
-	bool wake = false;
-	u8 i, count;
-
-	/* clean DMA queues and unmap buffers first */
-	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_PSD], false);
-	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_BE], false);
-
-	count = le16_get_bits(free->ctrl, MT_TX_FREE_MSDU_CNT);
-	if (WARN_ON_ONCE((void *)&tx_info[count] > end))
-		return;
-
-	for (i = 0; i < count; i++) {
-		u32 msdu, info = le32_to_cpu(tx_info[i]);
-		u8 stat;
-
-		/* 1'b1: new wcid pair.
-		 * 1'b0: msdu_id with the same 'wcid pair' as above.
-		 */
-		if (info & MT_TX_FREE_PAIR) {
-			struct mt7921_sta *msta;
-			struct mt76_wcid *wcid;
-			u16 idx;
-
-			count++;
-			idx = FIELD_GET(MT_TX_FREE_WLAN_ID, info);
-			wcid = rcu_dereference(dev->mt76.wcid[idx]);
-			sta = wcid_to_sta(wcid);
-			if (!sta)
-				continue;
-
-			msta = container_of(wcid, struct mt7921_sta, wcid);
-			spin_lock_bh(&dev->sta_poll_lock);
-			if (list_empty(&msta->poll_list))
-				list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-			spin_unlock_bh(&dev->sta_poll_lock);
-			continue;
-		}
-
-		msdu = FIELD_GET(MT_TX_FREE_MSDU_ID, info);
-		stat = FIELD_GET(MT_TX_FREE_STATUS, info);
-
-		txwi = mt76_token_release(mdev, msdu, &wake);
-		if (!txwi)
-			continue;
-
-		mt7921_txwi_free(dev, txwi, sta, stat, &free_list);
-	}
-
-	if (wake)
-		mt76_set_tx_blocked(&dev->mt76, false);
-
-	list_for_each_entry_safe(skb, tmp, &free_list, list) {
-		skb_list_del_init(skb);
-		napi_consume_skb(skb, 1);
-	}
-
-	rcu_read_lock();
-	mt7921_mac_sta_poll(dev);
-	rcu_read_unlock();
-
-	mt76_worker_schedule(&dev->mt76.tx_worker);
-}
-
-bool mt7921_rx_check(struct mt76_dev *mdev, void *data, int len)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	__le32 *rxd = (__le32 *)data;
-	__le32 *end = (__le32 *)&rxd[len / 4];
-	enum rx_pkt_type type;
-
-	type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
-
-	switch (type) {
-	case PKT_TYPE_TXRX_NOTIFY:
-		/* PKT_TYPE_TXRX_NOTIFY can be received only by mmio devices */
-		mt7921_mac_tx_free(dev, data, len); /* mmio */
-		return false;
-	case PKT_TYPE_TXS:
-		for (rxd += 2; rxd + 8 <= end; rxd += 8)
-			mt7921_mac_add_txs(dev, rxd);
-		return false;
-	default:
-		return true;
-	}
-}
-EXPORT_SYMBOL_GPL(mt7921_rx_check);
-
-void mt7921_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			 struct sk_buff *skb)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	__le32 *rxd = (__le32 *)skb->data;
-	__le32 *end = (__le32 *)&skb->data[skb->len];
-	enum rx_pkt_type type;
-	u16 flag;
-
-	type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
-	flag = le32_get_bits(rxd[0], MT_RXD0_PKT_FLAG);
-
-	if (type == PKT_TYPE_RX_EVENT && flag == 0x1)
-		type = PKT_TYPE_NORMAL_MCU;
-
-	switch (type) {
-	case PKT_TYPE_TXRX_NOTIFY:
-		/* PKT_TYPE_TXRX_NOTIFY can be received only by mmio devices */
-		mt7921_mac_tx_free(dev, skb->data, skb->len);
-		napi_consume_skb(skb, 1);
-		break;
-	case PKT_TYPE_RX_EVENT:
-		mt7921_mcu_rx_event(dev, skb);
-		break;
-	case PKT_TYPE_TXS:
-		for (rxd += 2; rxd + 8 <= end; rxd += 8)
-			mt7921_mac_add_txs(dev, rxd);
-		dev_kfree_skb(skb);
-		break;
-	case PKT_TYPE_NORMAL_MCU:
-	case PKT_TYPE_NORMAL:
-		if (!mt7921_mac_fill_rx(dev, skb)) {
-			mt76_rx(&dev->mt76, q, skb);
-			return;
-		}
-		fallthrough;
-	default:
-		dev_kfree_skb(skb);
-		break;
-	}
-}
-EXPORT_SYMBOL_GPL(mt7921_queue_rx_skb);
-
-void mt7921_mac_reset_counters(struct mt7921_phy *phy)
-{
-	struct mt7921_dev *dev = phy->dev;
-	int i;
-
-	for (i = 0; i < 4; i++) {
-		mt76_rr(dev, MT_TX_AGG_CNT(0, i));
-		mt76_rr(dev, MT_TX_AGG_CNT2(0, i));
-	}
-
-	dev->mt76.phy.survey_time = ktime_get_boottime();
-	memset(&dev->mt76.aggr_stats[0], 0, sizeof(dev->mt76.aggr_stats) / 2);
-
-	/* reset airtime counters */
-	mt76_rr(dev, MT_MIB_SDR9(0));
-	mt76_rr(dev, MT_MIB_SDR36(0));
-	mt76_rr(dev, MT_MIB_SDR37(0));
-
-	mt76_set(dev, MT_WF_RMAC_MIB_TIME0(0), MT_WF_RMAC_MIB_RXTIME_CLR);
-	mt76_set(dev, MT_WF_RMAC_MIB_AIRTIME0(0), MT_WF_RMAC_MIB_RXTIME_CLR);
-}
-
-void mt7921_mac_set_timing(struct mt7921_phy *phy)
-{
-	s16 coverage_class = phy->coverage_class;
-	struct mt7921_dev *dev = phy->dev;
-	u32 val, reg_offset;
-	u32 cck = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 231) |
-		  FIELD_PREP(MT_TIMEOUT_VAL_CCA, 48);
-	u32 ofdm = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 60) |
-		   FIELD_PREP(MT_TIMEOUT_VAL_CCA, 28);
-	bool is_2ghz = phy->mt76->chandef.chan->band == NL80211_BAND_2GHZ;
-	int sifs = is_2ghz ? 10 : 16, offset;
-
-	if (!test_bit(MT76_STATE_RUNNING, &phy->mt76->state))
-		return;
-
-	mt76_set(dev, MT_ARB_SCR(0),
-		 MT_ARB_SCR_TX_DISABLE | MT_ARB_SCR_RX_DISABLE);
-	udelay(1);
-
-	offset = 3 * coverage_class;
-	reg_offset = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, offset) |
-		     FIELD_PREP(MT_TIMEOUT_VAL_CCA, offset);
-
-	mt76_wr(dev, MT_TMAC_CDTR(0), cck + reg_offset);
-	mt76_wr(dev, MT_TMAC_ODTR(0), ofdm + reg_offset);
-	mt76_wr(dev, MT_TMAC_ICR0(0),
-		FIELD_PREP(MT_IFS_EIFS, 360) |
-		FIELD_PREP(MT_IFS_RIFS, 2) |
-		FIELD_PREP(MT_IFS_SIFS, sifs) |
-		FIELD_PREP(MT_IFS_SLOT, phy->slottime));
-
-	if (phy->slottime < 20 || !is_2ghz)
-		val = MT7921_CFEND_RATE_DEFAULT;
-	else
-		val = MT7921_CFEND_RATE_11B;
-
-	mt76_rmw_field(dev, MT_AGG_ACR0(0), MT_AGG_ACR_CFEND_RATE, val);
-	mt76_clear(dev, MT_ARB_SCR(0),
-		   MT_ARB_SCR_TX_DISABLE | MT_ARB_SCR_RX_DISABLE);
-}
-
-static u8
-mt7921_phy_get_nf(struct mt7921_phy *phy, int idx)
-{
-	return 0;
-}
-
-static void
-mt7921_phy_update_channel(struct mt76_phy *mphy, int idx)
-{
-	struct mt7921_dev *dev = container_of(mphy->dev, struct mt7921_dev, mt76);
-	struct mt7921_phy *phy = (struct mt7921_phy *)mphy->priv;
-	struct mt76_channel_state *state;
-	u64 busy_time, tx_time, rx_time, obss_time;
-	int nf;
-
-	busy_time = mt76_get_field(dev, MT_MIB_SDR9(idx),
-				   MT_MIB_SDR9_BUSY_MASK);
-	tx_time = mt76_get_field(dev, MT_MIB_SDR36(idx),
-				 MT_MIB_SDR36_TXTIME_MASK);
-	rx_time = mt76_get_field(dev, MT_MIB_SDR37(idx),
-				 MT_MIB_SDR37_RXTIME_MASK);
-	obss_time = mt76_get_field(dev, MT_WF_RMAC_MIB_AIRTIME14(idx),
-				   MT_MIB_OBSSTIME_MASK);
-
-	nf = mt7921_phy_get_nf(phy, idx);
-	if (!phy->noise)
-		phy->noise = nf << 4;
-	else if (nf)
-		phy->noise += nf - (phy->noise >> 4);
-
-	state = mphy->chan_state;
-	state->cc_busy += busy_time;
-	state->cc_tx += tx_time;
-	state->cc_rx += rx_time + obss_time;
-	state->cc_bss_rx += rx_time;
-	state->noise = -(phy->noise >> 4);
-}
-
-void mt7921_update_channel(struct mt76_phy *mphy)
-{
-	struct mt7921_dev *dev = container_of(mphy->dev, struct mt7921_dev, mt76);
-
-	if (mt76_connac_pm_wake(mphy, &dev->pm))
-		return;
-
-	mt7921_phy_update_channel(mphy, 0);
-	/* reset obss airtime */
-	mt76_set(dev, MT_WF_RMAC_MIB_TIME0(0), MT_WF_RMAC_MIB_RXTIME_CLR);
-
-	mt76_connac_power_save_sched(mphy, &dev->pm);
-}
-EXPORT_SYMBOL_GPL(mt7921_update_channel);
-
-static void
-mt7921_vif_connect_iter(void *priv, u8 *mac,
-			struct ieee80211_vif *vif)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct mt7921_dev *dev = mvif->phy->dev;
-	struct ieee80211_hw *hw = mt76_hw(dev);
-
-	if (vif->type == NL80211_IFTYPE_STATION)
-		ieee80211_disconnect(vif, true);
-
-	mt76_connac_mcu_uni_add_dev(&dev->mphy, vif, &mvif->sta.wcid, true);
-	mt7921_mcu_set_tx(dev, vif);
-
-	if (vif->type == NL80211_IFTYPE_AP) {
-		mt76_connac_mcu_uni_add_bss(dev->phy.mt76, vif, &mvif->sta.wcid,
-					    true);
-		mt7921_mcu_sta_update(dev, NULL, vif, true,
-				      MT76_STA_INFO_STATE_NONE);
-		mt7921_mcu_uni_add_beacon_offload(dev, hw, vif, true);
-	}
-}
-
-/* system error recovery */
-void mt7921_mac_reset_work(struct work_struct *work)
-{
-	struct mt7921_dev *dev = container_of(work, struct mt7921_dev,
-					      reset_work);
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	struct mt76_connac_pm *pm = &dev->pm;
-	int i, ret;
-
-	dev_dbg(dev->mt76.dev, "chip reset\n");
-	dev->hw_full_reset = true;
-	ieee80211_stop_queues(hw);
-
-	cancel_delayed_work_sync(&dev->mphy.mac_work);
-	cancel_delayed_work_sync(&pm->ps_work);
-	cancel_work_sync(&pm->wake_work);
-
-	for (i = 0; i < 10; i++) {
-		mutex_lock(&dev->mt76.mutex);
-		ret = mt7921_dev_reset(dev);
-		mutex_unlock(&dev->mt76.mutex);
-
-		if (!ret)
-			break;
-	}
-
-	if (i == 10)
-		dev_err(dev->mt76.dev, "chip reset failed\n");
-
-	if (test_and_clear_bit(MT76_HW_SCANNING, &dev->mphy.state)) {
-		struct cfg80211_scan_info info = {
-			.aborted = true,
-		};
-
-		ieee80211_scan_completed(dev->mphy.hw, &info);
-	}
-
-	dev->hw_full_reset = false;
-	pm->suspended = false;
-	ieee80211_wake_queues(hw);
-	ieee80211_iterate_active_interfaces(hw,
-					    IEEE80211_IFACE_ITER_RESUME_ALL,
-					    mt7921_vif_connect_iter, NULL);
-	mt76_connac_power_save_sched(&dev->mt76.phy, pm);
-}
-
-void mt7921_reset(struct mt76_dev *mdev)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	struct mt76_connac_pm *pm = &dev->pm;
-
-	if (!dev->hw_init_done)
-		return;
-
-	if (dev->hw_full_reset)
-		return;
-
-	if (pm->suspended)
-		return;
-
-	queue_work(dev->mt76.wq, &dev->reset_work);
-}
-EXPORT_SYMBOL_GPL(mt7921_reset);
-
-void mt7921_mac_update_mib_stats(struct mt7921_phy *phy)
-{
-	struct mt7921_dev *dev = phy->dev;
-	struct mib_stats *mib = &phy->mib;
-	int i, aggr0 = 0, aggr1;
-	u32 val;
-
-	mib->fcs_err_cnt += mt76_get_field(dev, MT_MIB_SDR3(0),
-					   MT_MIB_SDR3_FCS_ERR_MASK);
-	mib->ack_fail_cnt += mt76_get_field(dev, MT_MIB_MB_BSDR3(0),
-					    MT_MIB_ACK_FAIL_COUNT_MASK);
-	mib->ba_miss_cnt += mt76_get_field(dev, MT_MIB_MB_BSDR2(0),
-					   MT_MIB_BA_FAIL_COUNT_MASK);
-	mib->rts_cnt += mt76_get_field(dev, MT_MIB_MB_BSDR0(0),
-				       MT_MIB_RTS_COUNT_MASK);
-	mib->rts_retries_cnt += mt76_get_field(dev, MT_MIB_MB_BSDR1(0),
-					       MT_MIB_RTS_FAIL_COUNT_MASK);
-
-	mib->tx_ampdu_cnt += mt76_rr(dev, MT_MIB_SDR12(0));
-	mib->tx_mpdu_attempts_cnt += mt76_rr(dev, MT_MIB_SDR14(0));
-	mib->tx_mpdu_success_cnt += mt76_rr(dev, MT_MIB_SDR15(0));
-
-	val = mt76_rr(dev, MT_MIB_SDR32(0));
-	mib->tx_pkt_ebf_cnt += FIELD_GET(MT_MIB_SDR9_EBF_CNT_MASK, val);
-	mib->tx_pkt_ibf_cnt += FIELD_GET(MT_MIB_SDR9_IBF_CNT_MASK, val);
-
-	val = mt76_rr(dev, MT_ETBF_TX_APP_CNT(0));
-	mib->tx_bf_ibf_ppdu_cnt += FIELD_GET(MT_ETBF_TX_IBF_CNT, val);
-	mib->tx_bf_ebf_ppdu_cnt += FIELD_GET(MT_ETBF_TX_EBF_CNT, val);
-
-	val = mt76_rr(dev, MT_ETBF_RX_FB_CNT(0));
-	mib->tx_bf_rx_fb_all_cnt += FIELD_GET(MT_ETBF_RX_FB_ALL, val);
-	mib->tx_bf_rx_fb_he_cnt += FIELD_GET(MT_ETBF_RX_FB_HE, val);
-	mib->tx_bf_rx_fb_vht_cnt += FIELD_GET(MT_ETBF_RX_FB_VHT, val);
-	mib->tx_bf_rx_fb_ht_cnt += FIELD_GET(MT_ETBF_RX_FB_HT, val);
-
-	mib->rx_mpdu_cnt += mt76_rr(dev, MT_MIB_SDR5(0));
-	mib->rx_ampdu_cnt += mt76_rr(dev, MT_MIB_SDR22(0));
-	mib->rx_ampdu_bytes_cnt += mt76_rr(dev, MT_MIB_SDR23(0));
-	mib->rx_ba_cnt += mt76_rr(dev, MT_MIB_SDR31(0));
-
-	for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++) {
-		val = mt76_rr(dev, MT_PLE_AMSDU_PACK_MSDU_CNT(i));
-		mib->tx_amsdu[i] += val;
-		mib->tx_amsdu_cnt += val;
-	}
-
-	for (i = 0, aggr1 = aggr0 + 4; i < 4; i++) {
-		u32 val2;
-
-		val = mt76_rr(dev, MT_TX_AGG_CNT(0, i));
-		val2 = mt76_rr(dev, MT_TX_AGG_CNT2(0, i));
-
-		dev->mt76.aggr_stats[aggr0++] += val & 0xffff;
-		dev->mt76.aggr_stats[aggr0++] += val >> 16;
-		dev->mt76.aggr_stats[aggr1++] += val2 & 0xffff;
-		dev->mt76.aggr_stats[aggr1++] += val2 >> 16;
-	}
-}
-
-void mt7921_mac_work(struct work_struct *work)
-{
-	struct mt7921_phy *phy;
-	struct mt76_phy *mphy;
-
-	mphy = (struct mt76_phy *)container_of(work, struct mt76_phy,
-					       mac_work.work);
-	phy = mphy->priv;
-
-	mt7921_mutex_acquire(phy->dev);
-
-	mt76_update_survey(mphy);
-	if (++mphy->mac_work_count == 2) {
-		mphy->mac_work_count = 0;
-
-		mt7921_mac_update_mib_stats(phy);
-	}
-
-	mt7921_mutex_release(phy->dev);
-
-	mt76_tx_status_check(mphy->dev, false);
-	ieee80211_queue_delayed_work(phy->mt76->hw, &mphy->mac_work,
-				     MT7921_WATCHDOG_TIME);
-}
-
-void mt7921_pm_wake_work(struct work_struct *work)
-{
-	struct mt7921_dev *dev;
-	struct mt76_phy *mphy;
-
-	dev = (struct mt7921_dev *)container_of(work, struct mt7921_dev,
-						pm.wake_work);
-	mphy = dev->phy.mt76;
-
-	if (!mt7921_mcu_drv_pmctrl(dev)) {
-		struct mt76_dev *mdev = &dev->mt76;
-		int i;
-
-		if (mt76_is_sdio(mdev)) {
-			mt76_connac_pm_dequeue_skbs(mphy, &dev->pm);
-			mt76_worker_schedule(&mdev->sdio.txrx_worker);
-		} else {
-			local_bh_disable();
-			mt76_for_each_q_rx(mdev, i)
-				napi_schedule(&mdev->napi[i]);
-			local_bh_enable();
-			mt76_connac_pm_dequeue_skbs(mphy, &dev->pm);
-			mt76_connac_tx_cleanup(mdev);
-		}
-		if (test_bit(MT76_STATE_RUNNING, &mphy->state))
-			ieee80211_queue_delayed_work(mphy->hw, &mphy->mac_work,
-						     MT7921_WATCHDOG_TIME);
-	}
-
-	ieee80211_wake_queues(mphy->hw);
-	wake_up(&dev->pm.wait);
-}
-
-void mt7921_pm_power_save_work(struct work_struct *work)
-{
-	struct mt7921_dev *dev;
-	unsigned long delta;
-	struct mt76_phy *mphy;
-
-	dev = (struct mt7921_dev *)container_of(work, struct mt7921_dev,
-						pm.ps_work.work);
-	mphy = dev->phy.mt76;
-
-	delta = dev->pm.idle_timeout;
-	if (test_bit(MT76_HW_SCANNING, &mphy->state) ||
-	    test_bit(MT76_HW_SCHED_SCANNING, &mphy->state) ||
-	    dev->fw_assert)
-		goto out;
-
-	if (mutex_is_locked(&dev->mt76.mutex))
-		/* if mt76 mutex is held we should not put the device
-		 * to sleep since we are currently accessing device
-		 * register map. We need to wait for the next power_save
-		 * trigger.
-		 */
-		goto out;
-
-	if (time_is_after_jiffies(dev->pm.last_activity + delta)) {
-		delta = dev->pm.last_activity + delta - jiffies;
-		goto out;
-	}
-
-	if (!mt7921_mcu_fw_pmctrl(dev)) {
-		cancel_delayed_work_sync(&mphy->mac_work);
-		return;
-	}
-out:
-	queue_delayed_work(dev->mt76.wq, &dev->pm.ps_work, delta);
-}
-
-void mt7921_coredump_work(struct work_struct *work)
-{
-	struct mt7921_dev *dev;
-	char *dump, *data;
-
-	dev = (struct mt7921_dev *)container_of(work, struct mt7921_dev,
-						coredump.work.work);
-
-	if (time_is_after_jiffies(dev->coredump.last_activity +
-				  4 * MT76_CONNAC_COREDUMP_TIMEOUT)) {
-		queue_delayed_work(dev->mt76.wq, &dev->coredump.work,
-				   MT76_CONNAC_COREDUMP_TIMEOUT);
-		return;
-	}
-
-	dump = vzalloc(MT76_CONNAC_COREDUMP_SZ);
-	data = dump;
-
-	while (true) {
-		struct sk_buff *skb;
-
-		spin_lock_bh(&dev->mt76.lock);
-		skb = __skb_dequeue(&dev->coredump.msg_list);
-		spin_unlock_bh(&dev->mt76.lock);
-
-		if (!skb)
-			break;
-
-		skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
-		if (!dump || data + skb->len - dump > MT76_CONNAC_COREDUMP_SZ) {
-			dev_kfree_skb(skb);
-			continue;
-		}
-
-		memcpy(data, skb->data, skb->len);
-		data += skb->len;
-
-		dev_kfree_skb(skb);
-	}
-
-	if (dump)
-		dev_coredumpv(dev->mt76.dev, dump, MT76_CONNAC_COREDUMP_SZ,
-			      GFP_KERNEL);
-
-	mt7921_reset(&dev->mt76);
-}
-
-/* usb_sdio */
-static void
-mt7921_usb_sdio_write_txwi(struct mt7921_dev *dev, struct mt76_wcid *wcid,
-			   enum mt76_txq_id qid, struct ieee80211_sta *sta,
-			   struct ieee80211_key_conf *key, int pid,
-			   struct sk_buff *skb)
-{
-	__le32 *txwi = (__le32 *)(skb->data - MT_SDIO_TXD_SIZE);
-
-	memset(txwi, 0, MT_SDIO_TXD_SIZE);
-	mt76_connac2_mac_write_txwi(&dev->mt76, txwi, skb, wcid, key, pid, qid, 0);
-	skb_push(skb, MT_SDIO_TXD_SIZE);
-}
-
-int mt7921_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-				   enum mt76_txq_id qid, struct mt76_wcid *wcid,
-				   struct ieee80211_sta *sta,
-				   struct mt76_tx_info *tx_info)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
-	struct ieee80211_key_conf *key = info->control.hw_key;
-	struct sk_buff *skb = tx_info->skb;
-	int err, pad, pktid, type;
-
-	if (unlikely(tx_info->skb->len <= ETH_HLEN))
-		return -EINVAL;
-
-	if (!wcid)
-		wcid = &dev->mt76.global_wcid;
-
-	if (sta) {
-		struct mt7921_sta *msta = (struct mt7921_sta *)sta->drv_priv;
-
-		if (time_after(jiffies, msta->last_txs + HZ / 4)) {
-			info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
-			msta->last_txs = jiffies;
-		}
-	}
-
-	pktid = mt76_tx_status_skb_add(&dev->mt76, wcid, skb);
-	mt7921_usb_sdio_write_txwi(dev, wcid, qid, sta, key, pktid, skb);
-
-	type = mt76_is_sdio(mdev) ? MT7921_SDIO_DATA : 0;
-	mt7921_skb_add_usb_sdio_hdr(dev, skb, type);
-	pad = round_up(skb->len, 4) - skb->len;
-	if (mt76_is_usb(mdev))
-		pad += 4;
-
-	err = mt76_skb_adjust_pad(skb, pad);
-	if (err)
-		/* Release pktid in case of error. */
-		idr_remove(&wcid->pktid, pktid);
-
-	return err;
-}
-EXPORT_SYMBOL_GPL(mt7921_usb_sdio_tx_prepare_skb);
-
-void mt7921_usb_sdio_tx_complete_skb(struct mt76_dev *mdev,
-				     struct mt76_queue_entry *e)
-{
-	__le32 *txwi = (__le32 *)(e->skb->data + MT_SDIO_HDR_SIZE);
-	unsigned int headroom = MT_SDIO_TXD_SIZE + MT_SDIO_HDR_SIZE;
-	struct ieee80211_sta *sta;
-	struct mt76_wcid *wcid;
-	u16 idx;
-
-	idx = le32_get_bits(txwi[1], MT_TXD1_WLAN_IDX);
-	wcid = rcu_dereference(mdev->wcid[idx]);
-	sta = wcid_to_sta(wcid);
-
-	if (sta && likely(e->skb->protocol != cpu_to_be16(ETH_P_PAE)))
-		mt7921_tx_check_aggr(sta, txwi);
-
-	skb_pull(e->skb, headroom);
-	mt76_tx_complete_skb(mdev, e->wcid, e->skb);
-}
-EXPORT_SYMBOL_GPL(mt7921_usb_sdio_tx_complete_skb);
-
-bool mt7921_usb_sdio_tx_status_data(struct mt76_dev *mdev, u8 *update)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-
-	mt7921_mutex_acquire(dev);
-	mt7921_mac_sta_poll(dev);
-	mt7921_mutex_release(dev);
-
-	return false;
-}
-EXPORT_SYMBOL_GPL(mt7921_usb_sdio_tx_status_data);
-
-#if IS_ENABLED(CONFIG_IPV6)
-void mt7921_set_ipv6_ns_work(struct work_struct *work)
-{
-	struct mt7921_dev *dev = container_of(work, struct mt7921_dev,
-						ipv6_ns_work);
-	struct sk_buff *skb;
-	int ret = 0;
-
-	do {
-		skb = skb_dequeue(&dev->ipv6_ns_list);
-
-		if (!skb)
-			break;
-
-		mt7921_mutex_acquire(dev);
-		ret = mt76_mcu_skb_send_msg(&dev->mt76, skb,
-					    MCU_UNI_CMD(OFFLOAD), true);
-		mt7921_mutex_release(dev);
-
-	} while (!ret);
-
-	if (ret)
-		skb_queue_purge(&dev->ipv6_ns_list);
-}
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mac.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mac.h
deleted file mode 100644
index 8afec60..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mac.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT7921_MAC_H
-#define __MT7921_MAC_H
-
-#include "../mt76_connac2_mac.h"
-
-#define MT_CT_PARSE_LEN			72
-#define MT_CT_DMA_BUF_NUM		2
-
-#define MT_RXD0_LENGTH			GENMASK(15, 0)
-#define MT_RXD0_PKT_FLAG                GENMASK(19, 16)
-#define MT_RXD0_PKT_TYPE		GENMASK(31, 27)
-
-#define MT_RXD0_NORMAL_ETH_TYPE_OFS	GENMASK(22, 16)
-#define MT_RXD0_NORMAL_IP_SUM		BIT(23)
-#define MT_RXD0_NORMAL_UDP_TCP_SUM	BIT(24)
-
-enum rx_pkt_type {
-	PKT_TYPE_TXS,
-	PKT_TYPE_TXRXV,
-	PKT_TYPE_NORMAL,
-	PKT_TYPE_RX_DUP_RFB,
-	PKT_TYPE_RX_TMR,
-	PKT_TYPE_RETRIEVE,
-	PKT_TYPE_TXRX_NOTIFY,
-	PKT_TYPE_RX_EVENT,
-	PKT_TYPE_NORMAL_MCU,
-};
-
-#define MT_TX_FREE_MSDU_CNT		GENMASK(9, 0)
-#define MT_TX_FREE_WLAN_ID		GENMASK(23, 14)
-#define MT_TX_FREE_LATENCY		GENMASK(12, 0)
-/* 0: success, others: dropped */
-#define MT_TX_FREE_STATUS		GENMASK(14, 13)
-#define MT_TX_FREE_MSDU_ID		GENMASK(30, 16)
-#define MT_TX_FREE_PAIR			BIT(31)
-/* will support this field in further revision */
-#define MT_TX_FREE_RATE			GENMASK(13, 0)
-
-#define MT_WTBL_TXRX_CAP_RATE_OFFSET	7
-#define MT_WTBL_TXRX_RATE_G2_HE		24
-#define MT_WTBL_TXRX_RATE_G2		12
-
-#define MT_WTBL_AC0_CTT_OFFSET		20
-
-static inline u32 mt7921_mac_wtbl_lmac_addr(int idx, u8 offset)
-{
-	return MT_WTBL_LMAC_OFFS(idx, 0) + offset * 4;
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/main.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/main.c
deleted file mode 100644
index b4eac59..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/main.c
+++ /dev/null
@@ -1,1626 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/etherdevice.h>
-#include <linux/platform_device.h>
-#include <linux/pci.h>
-#include <linux/module.h>
-#include <net/ipv6.h>
-#include "mt7921.h"
-#include "mcu.h"
-
-static void
-mt7921_gen_ppe_thresh(u8 *he_ppet, int nss)
-{
-	u8 i, ppet_bits, ppet_size, ru_bit_mask = 0x7; /* HE80 */
-	static const u8 ppet16_ppet8_ru3_ru0[] = {0x1c, 0xc7, 0x71};
-
-	he_ppet[0] = FIELD_PREP(IEEE80211_PPE_THRES_NSS_MASK, nss - 1) |
-		     FIELD_PREP(IEEE80211_PPE_THRES_RU_INDEX_BITMASK_MASK,
-				ru_bit_mask);
-
-	ppet_bits = IEEE80211_PPE_THRES_INFO_PPET_SIZE *
-		    nss * hweight8(ru_bit_mask) * 2;
-	ppet_size = DIV_ROUND_UP(ppet_bits, 8);
-
-	for (i = 0; i < ppet_size - 1; i++)
-		he_ppet[i + 1] = ppet16_ppet8_ru3_ru0[i % 3];
-
-	he_ppet[i + 1] = ppet16_ppet8_ru3_ru0[i % 3] &
-			 (0xff >> (8 - (ppet_bits - 1) % 8));
-}
-
-static int
-mt7921_init_he_caps(struct mt7921_phy *phy, enum nl80211_band band,
-		    struct ieee80211_sband_iftype_data *data)
-{
-	int i, idx = 0;
-	int nss = hweight8(phy->mt76->chainmask);
-	u16 mcs_map = 0;
-
-	for (i = 0; i < 8; i++) {
-		if (i < nss)
-			mcs_map |= (IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2));
-		else
-			mcs_map |= (IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2));
-	}
-
-	for (i = 0; i < NUM_NL80211_IFTYPES; i++) {
-		struct ieee80211_sta_he_cap *he_cap = &data[idx].he_cap;
-		struct ieee80211_he_cap_elem *he_cap_elem =
-				&he_cap->he_cap_elem;
-		struct ieee80211_he_mcs_nss_supp *he_mcs =
-				&he_cap->he_mcs_nss_supp;
-
-		switch (i) {
-		case NL80211_IFTYPE_STATION:
-		case NL80211_IFTYPE_AP:
-			break;
-		default:
-			continue;
-		}
-
-		data[idx].types_mask = BIT(i);
-		he_cap->has_he = true;
-
-		he_cap_elem->mac_cap_info[0] =
-			IEEE80211_HE_MAC_CAP0_HTC_HE;
-		he_cap_elem->mac_cap_info[3] =
-			IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
-			IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3;
-		he_cap_elem->mac_cap_info[4] =
-			IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU;
-
-		if (band == NL80211_BAND_2GHZ)
-			he_cap_elem->phy_cap_info[0] =
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G;
-		else
-			he_cap_elem->phy_cap_info[0] =
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G;
-
-		he_cap_elem->phy_cap_info[1] =
-			IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD;
-		he_cap_elem->phy_cap_info[2] =
-			IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US |
-			IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ |
-			IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ |
-			IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO |
-			IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO;
-
-		switch (i) {
-		case NL80211_IFTYPE_AP:
-			he_cap_elem->mac_cap_info[2] |=
-				IEEE80211_HE_MAC_CAP2_BSR;
-			he_cap_elem->mac_cap_info[4] |=
-				IEEE80211_HE_MAC_CAP4_BQR;
-			he_cap_elem->mac_cap_info[5] |=
-				IEEE80211_HE_MAC_CAP5_OM_CTRL_UL_MU_DATA_DIS_RX;
-			he_cap_elem->phy_cap_info[3] |=
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_QPSK |
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_QPSK;
-			he_cap_elem->phy_cap_info[6] |=
-				IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE |
-				IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT;
-			he_cap_elem->phy_cap_info[9] |=
-				IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU |
-				IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU;
-			break;
-		case NL80211_IFTYPE_STATION:
-			he_cap_elem->mac_cap_info[1] |=
-				IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US;
-
-			if (band == NL80211_BAND_2GHZ)
-				he_cap_elem->phy_cap_info[0] |=
-					IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_2G;
-			else
-				he_cap_elem->phy_cap_info[0] |=
-					IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_5G;
-
-			he_cap_elem->phy_cap_info[1] |=
-				IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A |
-				IEEE80211_HE_PHY_CAP1_HE_LTF_AND_GI_FOR_HE_PPDUS_0_8US;
-			he_cap_elem->phy_cap_info[3] |=
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_QPSK |
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_QPSK;
-			he_cap_elem->phy_cap_info[4] |=
-				IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE |
-				IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_4;
-			he_cap_elem->phy_cap_info[5] |=
-				IEEE80211_HE_PHY_CAP5_NG16_SU_FEEDBACK |
-				IEEE80211_HE_PHY_CAP5_NG16_MU_FEEDBACK;
-			he_cap_elem->phy_cap_info[6] |=
-				IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_42_SU |
-				IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU |
-				IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB |
-				IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE |
-				IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT;
-			he_cap_elem->phy_cap_info[7] |=
-				IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP |
-				IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI;
-			he_cap_elem->phy_cap_info[8] |=
-				IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G |
-				IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_484;
-			he_cap_elem->phy_cap_info[9] |=
-				IEEE80211_HE_PHY_CAP9_LONGER_THAN_16_SIGB_OFDM_SYM |
-				IEEE80211_HE_PHY_CAP9_NON_TRIGGERED_CQI_FEEDBACK |
-				IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU |
-				IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU |
-				IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_COMP_SIGB |
-				IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_NON_COMP_SIGB;
-
-			if (is_mt7922(phy->mt76->dev)) {
-				he_cap_elem->phy_cap_info[0] |=
-					IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G;
-				he_cap_elem->phy_cap_info[8] |=
-					IEEE80211_HE_PHY_CAP8_20MHZ_IN_160MHZ_HE_PPDU |
-					IEEE80211_HE_PHY_CAP8_80MHZ_IN_160MHZ_HE_PPDU;
-			}
-			break;
-		}
-
-		he_mcs->rx_mcs_80 = cpu_to_le16(mcs_map);
-		he_mcs->tx_mcs_80 = cpu_to_le16(mcs_map);
-		if (is_mt7922(phy->mt76->dev)) {
-			he_mcs->rx_mcs_160 = cpu_to_le16(mcs_map);
-			he_mcs->tx_mcs_160 = cpu_to_le16(mcs_map);
-		}
-
-		memset(he_cap->ppe_thres, 0, sizeof(he_cap->ppe_thres));
-		if (he_cap_elem->phy_cap_info[6] &
-		    IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT) {
-			mt7921_gen_ppe_thresh(he_cap->ppe_thres, nss);
-		} else {
-			he_cap_elem->phy_cap_info[9] |=
-				IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_16US;
-		}
-
-		if (band == NL80211_BAND_6GHZ) {
-			struct ieee80211_supported_band *sband =
-				&phy->mt76->sband_5g.sband;
-			struct ieee80211_sta_vht_cap *vht_cap = &sband->vht_cap;
-			struct ieee80211_sta_ht_cap *ht_cap = &sband->ht_cap;
-			u32 exp;
-			u16 cap;
-
-			cap = u16_encode_bits(ht_cap->ampdu_density,
-					IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START);
-			exp = u32_get_bits(vht_cap->cap,
-				IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK);
-			cap |= u16_encode_bits(exp,
-					IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP);
-			exp = u32_get_bits(vht_cap->cap,
-					   IEEE80211_VHT_CAP_MAX_MPDU_MASK);
-			cap |= u16_encode_bits(exp,
-					IEEE80211_HE_6GHZ_CAP_MAX_MPDU_LEN);
-			if (vht_cap->cap & IEEE80211_VHT_CAP_TX_ANTENNA_PATTERN)
-				cap |= IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS;
-			if (vht_cap->cap & IEEE80211_VHT_CAP_RX_ANTENNA_PATTERN)
-				cap |= IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS;
-
-			data[idx].he_6ghz_capa.capa = cpu_to_le16(cap);
-		}
-		idx++;
-	}
-
-	return idx;
-}
-
-void mt7921_set_stream_he_caps(struct mt7921_phy *phy)
-{
-	struct ieee80211_sband_iftype_data *data;
-	struct ieee80211_supported_band *band;
-	int n;
-
-	if (phy->mt76->cap.has_2ghz) {
-		data = phy->iftype[NL80211_BAND_2GHZ];
-		n = mt7921_init_he_caps(phy, NL80211_BAND_2GHZ, data);
-
-		band = &phy->mt76->sband_2g.sband;
-		band->iftype_data = data;
-		band->n_iftype_data = n;
-	}
-
-	if (phy->mt76->cap.has_5ghz) {
-		data = phy->iftype[NL80211_BAND_5GHZ];
-		n = mt7921_init_he_caps(phy, NL80211_BAND_5GHZ, data);
-
-		band = &phy->mt76->sband_5g.sband;
-		band->iftype_data = data;
-		band->n_iftype_data = n;
-
-		if (phy->mt76->cap.has_6ghz) {
-			data = phy->iftype[NL80211_BAND_6GHZ];
-			n = mt7921_init_he_caps(phy, NL80211_BAND_6GHZ, data);
-
-			band = &phy->mt76->sband_6g.sband;
-			band->iftype_data = data;
-			band->n_iftype_data = n;
-		}
-	}
-}
-
-int __mt7921_start(struct mt7921_phy *phy)
-{
-	struct mt76_phy *mphy = phy->mt76;
-	int err;
-
-	err = mt76_connac_mcu_set_mac_enable(mphy->dev, 0, true, false);
-	if (err)
-		return err;
-
-	err = mt76_connac_mcu_set_channel_domain(mphy);
-	if (err)
-		return err;
-
-	err = mt7921_mcu_set_chan_info(phy, MCU_EXT_CMD(SET_RX_PATH));
-	if (err)
-		return err;
-
-	err = mt7921_set_tx_sar_pwr(mphy->hw, NULL);
-	if (err)
-		return err;
-
-	mt7921_mac_reset_counters(phy);
-	set_bit(MT76_STATE_RUNNING, &mphy->state);
-
-	ieee80211_queue_delayed_work(mphy->hw, &mphy->mac_work,
-				     MT7921_WATCHDOG_TIME);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(__mt7921_start);
-
-static int mt7921_start(struct ieee80211_hw *hw)
-{
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	int err;
-
-	mt7921_mutex_acquire(phy->dev);
-	err = __mt7921_start(phy);
-	mt7921_mutex_release(phy->dev);
-
-	return err;
-}
-
-void mt7921_stop(struct ieee80211_hw *hw)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-
-	cancel_delayed_work_sync(&phy->mt76->mac_work);
-
-	cancel_delayed_work_sync(&dev->pm.ps_work);
-	cancel_work_sync(&dev->pm.wake_work);
-	cancel_work_sync(&dev->reset_work);
-	mt76_connac_free_pending_tx_skbs(&dev->pm, NULL);
-
-	mt7921_mutex_acquire(dev);
-	clear_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-	mt76_connac_mcu_set_mac_enable(&dev->mt76, 0, false, false);
-	mt7921_mutex_release(dev);
-}
-EXPORT_SYMBOL_GPL(mt7921_stop);
-
-static int mt7921_add_interface(struct ieee80211_hw *hw,
-				struct ieee80211_vif *vif)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	struct mt76_txq *mtxq;
-	int idx, ret = 0;
-
-	mt7921_mutex_acquire(dev);
-
-	mvif->mt76.idx = __ffs64(~dev->mt76.vif_mask);
-	if (mvif->mt76.idx >= MT7921_MAX_INTERFACES) {
-		ret = -ENOSPC;
-		goto out;
-	}
-
-	mvif->mt76.omac_idx = mvif->mt76.idx;
-	mvif->phy = phy;
-	mvif->mt76.band_idx = 0;
-	mvif->mt76.wmm_idx = mvif->mt76.idx % MT76_CONNAC_MAX_WMM_SETS;
-
-	ret = mt76_connac_mcu_uni_add_dev(&dev->mphy, vif, &mvif->sta.wcid,
-					  true);
-	if (ret)
-		goto out;
-
-	dev->mt76.vif_mask |= BIT_ULL(mvif->mt76.idx);
-	phy->omac_mask |= BIT_ULL(mvif->mt76.omac_idx);
-
-	idx = MT7921_WTBL_RESERVED - mvif->mt76.idx;
-
-	INIT_LIST_HEAD(&mvif->sta.poll_list);
-	mvif->sta.wcid.idx = idx;
-	mvif->sta.wcid.phy_idx = mvif->mt76.band_idx;
-	mvif->sta.wcid.hw_key_idx = -1;
-	mvif->sta.wcid.tx_info |= MT_WCID_TX_INFO_SET;
-	mt76_packet_id_init(&mvif->sta.wcid);
-
-	mt7921_mac_wtbl_update(dev, idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	ewma_rssi_init(&mvif->rssi);
-
-	rcu_assign_pointer(dev->mt76.wcid[idx], &mvif->sta.wcid);
-	if (vif->txq) {
-		mtxq = (struct mt76_txq *)vif->txq->drv_priv;
-		mtxq->wcid = idx;
-	}
-
-	vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER;
-out:
-	mt7921_mutex_release(dev);
-
-	return ret;
-}
-
-static void mt7921_remove_interface(struct ieee80211_hw *hw,
-				    struct ieee80211_vif *vif)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct mt7921_sta *msta = &mvif->sta;
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	int idx = msta->wcid.idx;
-
-	mt7921_mutex_acquire(dev);
-	mt76_connac_free_pending_tx_skbs(&dev->pm, &msta->wcid);
-	mt76_connac_mcu_uni_add_dev(&dev->mphy, vif, &mvif->sta.wcid, false);
-
-	rcu_assign_pointer(dev->mt76.wcid[idx], NULL);
-
-	dev->mt76.vif_mask &= ~BIT_ULL(mvif->mt76.idx);
-	phy->omac_mask &= ~BIT_ULL(mvif->mt76.omac_idx);
-	mt7921_mutex_release(dev);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (!list_empty(&msta->poll_list))
-		list_del_init(&msta->poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	mt76_packet_id_flush(&dev->mt76, &msta->wcid);
-}
-
-static int mt7921_set_channel(struct mt7921_phy *phy)
-{
-	struct mt7921_dev *dev = phy->dev;
-	int ret;
-
-	cancel_delayed_work_sync(&phy->mt76->mac_work);
-
-	mt7921_mutex_acquire(dev);
-	set_bit(MT76_RESET, &phy->mt76->state);
-
-	mt76_set_channel(phy->mt76);
-
-	ret = mt7921_mcu_set_chan_info(phy, MCU_EXT_CMD(CHANNEL_SWITCH));
-	if (ret)
-		goto out;
-
-	mt7921_mac_set_timing(phy);
-
-	mt7921_mac_reset_counters(phy);
-	phy->noise = 0;
-
-out:
-	clear_bit(MT76_RESET, &phy->mt76->state);
-	mt7921_mutex_release(dev);
-
-	mt76_worker_schedule(&dev->mt76.tx_worker);
-	ieee80211_queue_delayed_work(phy->mt76->hw, &phy->mt76->mac_work,
-				     MT7921_WATCHDOG_TIME);
-
-	return ret;
-}
-
-static int mt7921_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
-			  struct ieee80211_vif *vif, struct ieee80211_sta *sta,
-			  struct ieee80211_key_conf *key)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct mt7921_sta *msta = sta ? (struct mt7921_sta *)sta->drv_priv :
-				  &mvif->sta;
-	struct mt76_wcid *wcid = &msta->wcid;
-	u8 *wcid_keyidx = &wcid->hw_key_idx;
-	int idx = key->keyidx, err = 0;
-
-	/* The hardware does not support per-STA RX GTK, fallback
-	 * to software mode for these.
-	 */
-	if ((vif->type == NL80211_IFTYPE_ADHOC ||
-	     vif->type == NL80211_IFTYPE_MESH_POINT) &&
-	    (key->cipher == WLAN_CIPHER_SUITE_TKIP ||
-	     key->cipher == WLAN_CIPHER_SUITE_CCMP) &&
-	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
-		return -EOPNOTSUPP;
-
-	/* fall back to sw encryption for unsupported ciphers */
-	switch (key->cipher) {
-	case WLAN_CIPHER_SUITE_AES_CMAC:
-		key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIE;
-		wcid_keyidx = &wcid->hw_key_idx2;
-		break;
-	case WLAN_CIPHER_SUITE_WEP40:
-	case WLAN_CIPHER_SUITE_WEP104:
-		if (!mvif->wep_sta)
-			return -EOPNOTSUPP;
-		break;
-	case WLAN_CIPHER_SUITE_TKIP:
-	case WLAN_CIPHER_SUITE_CCMP:
-	case WLAN_CIPHER_SUITE_CCMP_256:
-	case WLAN_CIPHER_SUITE_GCMP:
-	case WLAN_CIPHER_SUITE_GCMP_256:
-	case WLAN_CIPHER_SUITE_SMS4:
-		break;
-	default:
-		return -EOPNOTSUPP;
-	}
-
-	mt7921_mutex_acquire(dev);
-
-	if (cmd == SET_KEY)
-		*wcid_keyidx = idx;
-	else if (idx == *wcid_keyidx)
-		*wcid_keyidx = -1;
-	else
-		goto out;
-
-	mt76_wcid_key_setup(&dev->mt76, wcid,
-			    cmd == SET_KEY ? key : NULL);
-
-	err = mt76_connac_mcu_add_key(&dev->mt76, vif, &msta->bip,
-				      key, MCU_UNI_CMD(STA_REC_UPDATE),
-				      &msta->wcid, cmd);
-	if (err)
-		goto out;
-
-	if (key->cipher == WLAN_CIPHER_SUITE_WEP104 ||
-	    key->cipher == WLAN_CIPHER_SUITE_WEP40)
-		err = mt76_connac_mcu_add_key(&dev->mt76, vif,
-					      &mvif->wep_sta->bip,
-					      key, MCU_UNI_CMD(STA_REC_UPDATE),
-					      &mvif->wep_sta->wcid, cmd);
-out:
-	mt7921_mutex_release(dev);
-
-	return err;
-}
-
-static void
-mt7921_pm_interface_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	struct mt7921_dev *dev = priv;
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	bool pm_enable = dev->pm.enable;
-	int err;
-
-	err = mt7921_mcu_set_beacon_filter(dev, vif, pm_enable);
-	if (err < 0)
-		return;
-
-	if (pm_enable) {
-		vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER;
-		ieee80211_hw_set(hw, CONNECTION_MONITOR);
-	} else {
-		vif->driver_flags &= ~IEEE80211_VIF_BEACON_FILTER;
-		__clear_bit(IEEE80211_HW_CONNECTION_MONITOR, hw->flags);
-	}
-}
-
-static void
-mt7921_sniffer_interface_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	struct mt7921_dev *dev = priv;
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	struct mt76_connac_pm *pm = &dev->pm;
-	bool monitor = !!(hw->conf.flags & IEEE80211_CONF_MONITOR);
-
-	mt7921_mcu_set_sniffer(dev, vif, monitor);
-	pm->enable = pm->enable_user && !monitor;
-	pm->ds_enable = pm->ds_enable_user && !monitor;
-
-	mt76_connac_mcu_set_deep_sleep(&dev->mt76, pm->ds_enable);
-
-	if (monitor)
-		mt7921_mcu_set_beacon_filter(dev, vif, false);
-}
-
-void mt7921_set_runtime_pm(struct mt7921_dev *dev)
-{
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	struct mt76_connac_pm *pm = &dev->pm;
-	bool monitor = !!(hw->conf.flags & IEEE80211_CONF_MONITOR);
-
-	pm->enable = pm->enable_user && !monitor;
-	ieee80211_iterate_active_interfaces(hw,
-					    IEEE80211_IFACE_ITER_RESUME_ALL,
-					    mt7921_pm_interface_iter, dev);
-	pm->ds_enable = pm->ds_enable_user && !monitor;
-	mt76_connac_mcu_set_deep_sleep(&dev->mt76, pm->ds_enable);
-}
-
-static int mt7921_config(struct ieee80211_hw *hw, u32 changed)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	int ret = 0;
-
-	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
-		ieee80211_stop_queues(hw);
-		ret = mt7921_set_channel(phy);
-		if (ret)
-			return ret;
-		ieee80211_wake_queues(hw);
-	}
-
-	mt7921_mutex_acquire(dev);
-
-	if (changed & IEEE80211_CONF_CHANGE_POWER) {
-		ret = mt7921_set_tx_sar_pwr(hw, NULL);
-		if (ret)
-			goto out;
-	}
-
-	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
-		ieee80211_iterate_active_interfaces(hw,
-						    IEEE80211_IFACE_ITER_RESUME_ALL,
-						    mt7921_sniffer_interface_iter, dev);
-		dev->mt76.rxfilter = mt76_rr(dev, MT_WF_RFCR(0));
-	}
-
-out:
-	mt7921_mutex_release(dev);
-
-	return ret;
-}
-
-static int
-mt7921_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
-	       const struct ieee80211_tx_queue_params *params)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-
-	/* no need to update right away, we'll get BSS_CHANGED_QOS */
-	queue = mt76_connac_lmac_mapping(queue);
-	mvif->queue_params[queue] = *params;
-
-	return 0;
-}
-
-static void mt7921_configure_filter(struct ieee80211_hw *hw,
-				    unsigned int changed_flags,
-				    unsigned int *total_flags,
-				    u64 multicast)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	u32 ctl_flags = MT_WF_RFCR1_DROP_ACK |
-			MT_WF_RFCR1_DROP_BF_POLL |
-			MT_WF_RFCR1_DROP_BA |
-			MT_WF_RFCR1_DROP_CFEND |
-			MT_WF_RFCR1_DROP_CFACK;
-	u32 flags = 0;
-
-#define MT76_FILTER(_flag, _hw) do {					\
-		flags |= *total_flags & FIF_##_flag;			\
-		dev->mt76.rxfilter &= ~(_hw);				\
-		dev->mt76.rxfilter |= !(flags & FIF_##_flag) * (_hw);	\
-	} while (0)
-
-	mt7921_mutex_acquire(dev);
-
-	dev->mt76.rxfilter &= ~(MT_WF_RFCR_DROP_OTHER_BSS |
-				MT_WF_RFCR_DROP_OTHER_BEACON |
-				MT_WF_RFCR_DROP_FRAME_REPORT |
-				MT_WF_RFCR_DROP_PROBEREQ |
-				MT_WF_RFCR_DROP_MCAST_FILTERED |
-				MT_WF_RFCR_DROP_MCAST |
-				MT_WF_RFCR_DROP_BCAST |
-				MT_WF_RFCR_DROP_DUPLICATE |
-				MT_WF_RFCR_DROP_A2_BSSID |
-				MT_WF_RFCR_DROP_UNWANTED_CTL |
-				MT_WF_RFCR_DROP_STBC_MULTI);
-
-	MT76_FILTER(OTHER_BSS, MT_WF_RFCR_DROP_OTHER_TIM |
-			       MT_WF_RFCR_DROP_A3_MAC |
-			       MT_WF_RFCR_DROP_A3_BSSID);
-
-	MT76_FILTER(FCSFAIL, MT_WF_RFCR_DROP_FCSFAIL);
-
-	MT76_FILTER(CONTROL, MT_WF_RFCR_DROP_CTS |
-			     MT_WF_RFCR_DROP_RTS |
-			     MT_WF_RFCR_DROP_CTL_RSV |
-			     MT_WF_RFCR_DROP_NDPA);
-
-	*total_flags = flags;
-	mt76_wr(dev, MT_WF_RFCR(0), dev->mt76.rxfilter);
-
-	if (*total_flags & FIF_CONTROL)
-		mt76_clear(dev, MT_WF_RFCR1(0), ctl_flags);
-	else
-		mt76_set(dev, MT_WF_RFCR1(0), ctl_flags);
-
-	mt7921_mutex_release(dev);
-}
-
-static void mt7921_bss_info_changed(struct ieee80211_hw *hw,
-				    struct ieee80211_vif *vif,
-				    struct ieee80211_bss_conf *info,
-				    u32 changed)
-{
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-
-	mt7921_mutex_acquire(dev);
-
-	if (changed & BSS_CHANGED_ERP_SLOT) {
-		int slottime = info->use_short_slot ? 9 : 20;
-
-		if (slottime != phy->slottime) {
-			phy->slottime = slottime;
-			mt7921_mac_set_timing(phy);
-		}
-	}
-
-	if (changed & (BSS_CHANGED_BEACON |
-		       BSS_CHANGED_BEACON_ENABLED))
-		mt7921_mcu_uni_add_beacon_offload(dev, hw, vif,
-						  info->enable_beacon);
-
-	/* ensure that enable txcmd_mode after bss_info */
-	if (changed & (BSS_CHANGED_QOS | BSS_CHANGED_BEACON_ENABLED))
-		mt7921_mcu_set_tx(dev, vif);
-
-	if (changed & BSS_CHANGED_PS)
-		mt7921_mcu_uni_bss_ps(dev, vif);
-
-	if (changed & BSS_CHANGED_ASSOC) {
-		mt7921_mcu_sta_update(dev, NULL, vif, true,
-				      MT76_STA_INFO_STATE_ASSOC);
-		mt7921_mcu_set_beacon_filter(dev, vif, info->assoc);
-	}
-
-	if (changed & BSS_CHANGED_ARP_FILTER) {
-		struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-
-		mt76_connac_mcu_update_arp_filter(&dev->mt76, &mvif->mt76,
-						  info);
-	}
-
-	mt7921_mutex_release(dev);
-}
-
-int mt7921_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	struct mt7921_sta *msta = (struct mt7921_sta *)sta->drv_priv;
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	int ret, idx;
-
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7921_WTBL_STA - 1);
-	if (idx < 0)
-		return -ENOSPC;
-
-	INIT_LIST_HEAD(&msta->poll_list);
-	msta->vif = mvif;
-	msta->wcid.sta = 1;
-	msta->wcid.idx = idx;
-	msta->wcid.phy_idx = mvif->mt76.band_idx;
-	msta->wcid.tx_info |= MT_WCID_TX_INFO_SET;
-	msta->last_txs = jiffies;
-
-	ret = mt76_connac_pm_wake(&dev->mphy, &dev->pm);
-	if (ret)
-		return ret;
-
-	if (vif->type == NL80211_IFTYPE_STATION)
-		mvif->wep_sta = msta;
-
-	mt7921_mac_wtbl_update(dev, idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	ret = mt7921_mcu_sta_update(dev, sta, vif, true,
-				    MT76_STA_INFO_STATE_NONE);
-	if (ret)
-		return ret;
-
-	mt76_connac_power_save_sched(&dev->mphy, &dev->pm);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt7921_mac_sta_add);
-
-void mt7921_mac_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			  struct ieee80211_sta *sta)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	struct mt7921_sta *msta = (struct mt7921_sta *)sta->drv_priv;
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-
-	mt7921_mutex_acquire(dev);
-
-	if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls)
-		mt76_connac_mcu_uni_add_bss(&dev->mphy, vif, &mvif->sta.wcid,
-					    true);
-
-	mt7921_mac_wtbl_update(dev, msta->wcid.idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-	memset(msta->airtime_ac, 0, sizeof(msta->airtime_ac));
-
-	mt7921_mcu_sta_update(dev, sta, vif, true, MT76_STA_INFO_STATE_ASSOC);
-
-	mt7921_mutex_release(dev);
-}
-EXPORT_SYMBOL_GPL(mt7921_mac_sta_assoc);
-
-void mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	struct mt7921_sta *msta = (struct mt7921_sta *)sta->drv_priv;
-
-	mt76_connac_free_pending_tx_skbs(&dev->pm, &msta->wcid);
-	mt76_connac_pm_wake(&dev->mphy, &dev->pm);
-
-	mt7921_mcu_sta_update(dev, sta, vif, false, MT76_STA_INFO_STATE_NONE);
-	mt7921_mac_wtbl_update(dev, msta->wcid.idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	if (vif->type == NL80211_IFTYPE_STATION) {
-		struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-
-		mvif->wep_sta = NULL;
-		ewma_rssi_init(&mvif->rssi);
-		if (!sta->tdls)
-			mt76_connac_mcu_uni_add_bss(&dev->mphy, vif,
-						    &mvif->sta.wcid, false);
-	}
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (!list_empty(&msta->poll_list))
-		list_del_init(&msta->poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	mt76_connac_power_save_sched(&dev->mphy, &dev->pm);
-}
-EXPORT_SYMBOL_GPL(mt7921_mac_sta_remove);
-
-void mt7921_tx_worker(struct mt76_worker *w)
-{
-	struct mt7921_dev *dev = container_of(w, struct mt7921_dev,
-					      mt76.tx_worker);
-
-	if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) {
-		queue_work(dev->mt76.wq, &dev->pm.wake_work);
-		return;
-	}
-
-	mt76_txq_schedule_all(&dev->mphy);
-	mt76_connac_pm_unref(&dev->mphy, &dev->pm);
-}
-
-static void mt7921_tx(struct ieee80211_hw *hw,
-		      struct ieee80211_tx_control *control,
-		      struct sk_buff *skb)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-	int qid;
-
-	if (control->sta) {
-		struct mt7921_sta *sta;
-
-		sta = (struct mt7921_sta *)control->sta->drv_priv;
-		wcid = &sta->wcid;
-	}
-
-	if (vif && !control->sta) {
-		struct mt7921_vif *mvif;
-
-		mvif = (struct mt7921_vif *)vif->drv_priv;
-		wcid = &mvif->sta.wcid;
-	}
-
-	if (mt76_connac_pm_ref(mphy, &dev->pm)) {
-		mt76_tx(mphy, control->sta, wcid, skb);
-		mt76_connac_pm_unref(mphy, &dev->pm);
-		return;
-	}
-
-	qid = skb_get_queue_mapping(skb);
-	if (qid >= MT_TXQ_PSD) {
-		qid = IEEE80211_AC_BE;
-		skb_set_queue_mapping(skb, qid);
-	}
-
-	mt76_connac_pm_queue_skb(hw, &dev->pm, wcid, skb);
-}
-
-static int mt7921_set_rts_threshold(struct ieee80211_hw *hw, u32 val)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-
-	mt7921_mutex_acquire(dev);
-	mt76_connac_mcu_set_rts_thresh(&dev->mt76, val, 0);
-	mt7921_mutex_release(dev);
-
-	return 0;
-}
-
-static int
-mt7921_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		    struct ieee80211_ampdu_params *params)
-{
-	enum ieee80211_ampdu_mlme_action action = params->action;
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct ieee80211_sta *sta = params->sta;
-	struct ieee80211_txq *txq = sta->txq[params->tid];
-	struct mt7921_sta *msta = (struct mt7921_sta *)sta->drv_priv;
-	u16 tid = params->tid;
-	u16 ssn = params->ssn;
-	struct mt76_txq *mtxq;
-	int ret = 0;
-
-	if (!txq)
-		return -EINVAL;
-
-	mtxq = (struct mt76_txq *)txq->drv_priv;
-
-	mt7921_mutex_acquire(dev);
-	switch (action) {
-	case IEEE80211_AMPDU_RX_START:
-		mt76_rx_aggr_start(&dev->mt76, &msta->wcid, tid, ssn,
-				   params->buf_size);
-		mt7921_mcu_uni_rx_ba(dev, params, true);
-		break;
-	case IEEE80211_AMPDU_RX_STOP:
-		mt76_rx_aggr_stop(&dev->mt76, &msta->wcid, tid);
-		mt7921_mcu_uni_rx_ba(dev, params, false);
-		break;
-	case IEEE80211_AMPDU_TX_OPERATIONAL:
-		mtxq->aggr = true;
-		mtxq->send_bar = false;
-		mt7921_mcu_uni_tx_ba(dev, params, true);
-		break;
-	case IEEE80211_AMPDU_TX_STOP_FLUSH:
-	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
-		mtxq->aggr = false;
-		clear_bit(tid, &msta->ampdu_state);
-		mt7921_mcu_uni_tx_ba(dev, params, false);
-		break;
-	case IEEE80211_AMPDU_TX_START:
-		set_bit(tid, &msta->ampdu_state);
-		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
-		break;
-	case IEEE80211_AMPDU_TX_STOP_CONT:
-		mtxq->aggr = false;
-		clear_bit(tid, &msta->ampdu_state);
-		mt7921_mcu_uni_tx_ba(dev, params, false);
-		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
-	}
-	mt7921_mutex_release(dev);
-
-	return ret;
-}
-
-static int mt7921_sta_state(struct ieee80211_hw *hw,
-			    struct ieee80211_vif *vif,
-			    struct ieee80211_sta *sta,
-			    enum ieee80211_sta_state old_state,
-			    enum ieee80211_sta_state new_state)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-
-	if (dev->pm.ds_enable) {
-		mt7921_mutex_acquire(dev);
-		mt76_connac_sta_state_dp(&dev->mt76, old_state, new_state);
-		mt7921_mutex_release(dev);
-	}
-
-	return mt76_sta_state(hw, vif, sta, old_state, new_state);
-}
-
-static int
-mt7921_get_stats(struct ieee80211_hw *hw,
-		 struct ieee80211_low_level_stats *stats)
-{
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	struct mib_stats *mib = &phy->mib;
-
-	mt7921_mutex_acquire(phy->dev);
-
-	stats->dot11RTSSuccessCount = mib->rts_cnt;
-	stats->dot11RTSFailureCount = mib->rts_retries_cnt;
-	stats->dot11FCSErrorCount = mib->fcs_err_cnt;
-	stats->dot11ACKFailureCount = mib->ack_fail_cnt;
-
-	mt7921_mutex_release(phy->dev);
-
-	return 0;
-}
-
-static const char mt7921_gstrings_stats[][ETH_GSTRING_LEN] = {
-	/* tx counters */
-	"tx_ampdu_cnt",
-	"tx_mpdu_attempts",
-	"tx_mpdu_success",
-	"tx_pkt_ebf_cnt",
-	"tx_pkt_ibf_cnt",
-	"tx_ampdu_len:0-1",
-	"tx_ampdu_len:2-10",
-	"tx_ampdu_len:11-19",
-	"tx_ampdu_len:20-28",
-	"tx_ampdu_len:29-37",
-	"tx_ampdu_len:38-46",
-	"tx_ampdu_len:47-55",
-	"tx_ampdu_len:56-79",
-	"tx_ampdu_len:80-103",
-	"tx_ampdu_len:104-127",
-	"tx_ampdu_len:128-151",
-	"tx_ampdu_len:152-175",
-	"tx_ampdu_len:176-199",
-	"tx_ampdu_len:200-223",
-	"tx_ampdu_len:224-247",
-	"ba_miss_count",
-	"tx_beamformer_ppdu_iBF",
-	"tx_beamformer_ppdu_eBF",
-	"tx_beamformer_rx_feedback_all",
-	"tx_beamformer_rx_feedback_he",
-	"tx_beamformer_rx_feedback_vht",
-	"tx_beamformer_rx_feedback_ht",
-	"tx_msdu_pack_1",
-	"tx_msdu_pack_2",
-	"tx_msdu_pack_3",
-	"tx_msdu_pack_4",
-	"tx_msdu_pack_5",
-	"tx_msdu_pack_6",
-	"tx_msdu_pack_7",
-	"tx_msdu_pack_8",
-	/* rx counters */
-	"rx_mpdu_cnt",
-	"rx_ampdu_cnt",
-	"rx_ampdu_bytes_cnt",
-	"rx_ba_cnt",
-	/* per vif counters */
-	"v_tx_mode_cck",
-	"v_tx_mode_ofdm",
-	"v_tx_mode_ht",
-	"v_tx_mode_ht_gf",
-	"v_tx_mode_vht",
-	"v_tx_mode_he_su",
-	"v_tx_mode_he_ext_su",
-	"v_tx_mode_he_tb",
-	"v_tx_mode_he_mu",
-	"v_tx_bw_20",
-	"v_tx_bw_40",
-	"v_tx_bw_80",
-	"v_tx_bw_160",
-	"v_tx_mcs_0",
-	"v_tx_mcs_1",
-	"v_tx_mcs_2",
-	"v_tx_mcs_3",
-	"v_tx_mcs_4",
-	"v_tx_mcs_5",
-	"v_tx_mcs_6",
-	"v_tx_mcs_7",
-	"v_tx_mcs_8",
-	"v_tx_mcs_9",
-	"v_tx_mcs_10",
-	"v_tx_mcs_11",
-};
-
-static void
-mt7921_get_et_strings(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		      u32 sset, u8 *data)
-{
-	if (sset != ETH_SS_STATS)
-		return;
-
-	memcpy(data, *mt7921_gstrings_stats, sizeof(mt7921_gstrings_stats));
-}
-
-static int
-mt7921_get_et_sset_count(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			 int sset)
-{
-	return sset == ETH_SS_STATS ? ARRAY_SIZE(mt7921_gstrings_stats) : 0;
-}
-
-static void
-mt7921_ethtool_worker(void *wi_data, struct ieee80211_sta *sta)
-{
-	struct mt7921_sta *msta = (struct mt7921_sta *)sta->drv_priv;
-	struct mt76_ethtool_worker_info *wi = wi_data;
-
-	if (msta->vif->mt76.idx != wi->idx)
-		return;
-
-	mt76_ethtool_worker(wi, &msta->wcid.stats);
-}
-
-static
-void mt7921_get_et_stats(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			 struct ethtool_stats *stats, u64 *data)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	struct mt7921_dev *dev = phy->dev;
-	struct mib_stats *mib = &phy->mib;
-	struct mt76_ethtool_worker_info wi = {
-		.data = data,
-		.idx = mvif->mt76.idx,
-	};
-	int i, ei = 0;
-
-	mt7921_mutex_acquire(dev);
-
-	mt7921_mac_update_mib_stats(phy);
-
-	data[ei++] = mib->tx_ampdu_cnt;
-	data[ei++] = mib->tx_mpdu_attempts_cnt;
-	data[ei++] = mib->tx_mpdu_success_cnt;
-	data[ei++] = mib->tx_pkt_ebf_cnt;
-	data[ei++] = mib->tx_pkt_ibf_cnt;
-
-	/* Tx ampdu stat */
-	for (i = 0; i < 15; i++)
-		data[ei++] = dev->mt76.aggr_stats[i];
-
-	data[ei++] = phy->mib.ba_miss_cnt;
-
-	/* Tx Beamformer monitor */
-	data[ei++] = mib->tx_bf_ibf_ppdu_cnt;
-	data[ei++] = mib->tx_bf_ebf_ppdu_cnt;
-
-	/* Tx Beamformer Rx feedback monitor */
-	data[ei++] = mib->tx_bf_rx_fb_all_cnt;
-	data[ei++] = mib->tx_bf_rx_fb_he_cnt;
-	data[ei++] = mib->tx_bf_rx_fb_vht_cnt;
-	data[ei++] = mib->tx_bf_rx_fb_ht_cnt;
-
-	/* Tx amsdu info (pack-count histogram) */
-	for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++)
-		data[ei++] = mib->tx_amsdu[i];
-
-	/* rx counters */
-	data[ei++] = mib->rx_mpdu_cnt;
-	data[ei++] = mib->rx_ampdu_cnt;
-	data[ei++] = mib->rx_ampdu_bytes_cnt;
-	data[ei++] = mib->rx_ba_cnt;
-
-	/* Add values for all stations owned by this vif */
-	wi.initial_stat_idx = ei;
-	ieee80211_iterate_stations_atomic(hw, mt7921_ethtool_worker, &wi);
-
-	mt7921_mutex_release(dev);
-
-	if (!wi.sta_count)
-		return;
-
-	ei += wi.worker_stat_count;
-	if (ei != ARRAY_SIZE(mt7921_gstrings_stats))
-		dev_err(dev->mt76.dev, "ei: %d  SSTATS_LEN: %zu",
-			ei, ARRAY_SIZE(mt7921_gstrings_stats));
-}
-
-static u64
-mt7921_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	u8 omac_idx = mvif->mt76.omac_idx;
-	union {
-		u64 t64;
-		u32 t32[2];
-	} tsf;
-	u16 n;
-
-	mt7921_mutex_acquire(dev);
-
-	n = omac_idx > HW_BSSID_MAX ? HW_BSSID_0 : omac_idx;
-	/* TSF software read */
-	mt76_set(dev, MT_LPON_TCR(0, n), MT_LPON_TCR_SW_MODE);
-	tsf.t32[0] = mt76_rr(dev, MT_LPON_UTTR0(0));
-	tsf.t32[1] = mt76_rr(dev, MT_LPON_UTTR1(0));
-
-	mt7921_mutex_release(dev);
-
-	return tsf.t64;
-}
-
-static void
-mt7921_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	       u64 timestamp)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	u8 omac_idx = mvif->mt76.omac_idx;
-	union {
-		u64 t64;
-		u32 t32[2];
-	} tsf = { .t64 = timestamp, };
-	u16 n;
-
-	mt7921_mutex_acquire(dev);
-
-	n = omac_idx > HW_BSSID_MAX ? HW_BSSID_0 : omac_idx;
-	mt76_wr(dev, MT_LPON_UTTR0(0), tsf.t32[0]);
-	mt76_wr(dev, MT_LPON_UTTR1(0), tsf.t32[1]);
-	/* TSF software overwrite */
-	mt76_set(dev, MT_LPON_TCR(0, n), MT_LPON_TCR_SW_WRITE);
-
-	mt7921_mutex_release(dev);
-}
-
-static void
-mt7921_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class)
-{
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	struct mt7921_dev *dev = phy->dev;
-
-	mt7921_mutex_acquire(dev);
-	phy->coverage_class = max_t(s16, coverage_class, 0);
-	mt7921_mac_set_timing(phy);
-	mt7921_mutex_release(dev);
-}
-
-void mt7921_scan_work(struct work_struct *work)
-{
-	struct mt7921_phy *phy;
-
-	phy = (struct mt7921_phy *)container_of(work, struct mt7921_phy,
-						scan_work.work);
-
-	while (true) {
-		struct mt76_connac2_mcu_rxd *rxd;
-		struct sk_buff *skb;
-
-		spin_lock_bh(&phy->dev->mt76.lock);
-		skb = __skb_dequeue(&phy->scan_event_list);
-		spin_unlock_bh(&phy->dev->mt76.lock);
-
-		if (!skb)
-			break;
-
-		rxd = (struct mt76_connac2_mcu_rxd *)skb->data;
-		if (rxd->eid == MCU_EVENT_SCHED_SCAN_DONE) {
-			ieee80211_sched_scan_results(phy->mt76->hw);
-		} else if (test_and_clear_bit(MT76_HW_SCANNING,
-					      &phy->mt76->state)) {
-			struct cfg80211_scan_info info = {
-				.aborted = false,
-			};
-
-			ieee80211_scan_completed(phy->mt76->hw, &info);
-		}
-		dev_kfree_skb(skb);
-	}
-}
-
-static int
-mt7921_hw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	       struct ieee80211_scan_request *req)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	int err;
-
-	mt7921_mutex_acquire(dev);
-	err = mt76_connac_mcu_hw_scan(mphy, vif, req);
-	mt7921_mutex_release(dev);
-
-	return err;
-}
-
-static void
-mt7921_cancel_hw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-
-	mt7921_mutex_acquire(dev);
-	mt76_connac_mcu_cancel_hw_scan(mphy, vif);
-	mt7921_mutex_release(dev);
-}
-
-static int
-mt7921_start_sched_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			struct cfg80211_sched_scan_request *req,
-			struct ieee80211_scan_ies *ies)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	int err;
-
-	mt7921_mutex_acquire(dev);
-
-	err = mt76_connac_mcu_sched_scan_req(mphy, vif, req);
-	if (err < 0)
-		goto out;
-
-	err = mt76_connac_mcu_sched_scan_enable(mphy, vif, true);
-out:
-	mt7921_mutex_release(dev);
-
-	return err;
-}
-
-static int
-mt7921_stop_sched_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	int err;
-
-	mt7921_mutex_acquire(dev);
-	err = mt76_connac_mcu_sched_scan_enable(mphy, vif, false);
-	mt7921_mutex_release(dev);
-
-	return err;
-}
-
-static int
-mt7921_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	int max_nss = hweight8(hw->wiphy->available_antennas_tx);
-
-	if (!tx_ant || tx_ant != rx_ant || ffs(tx_ant) > max_nss)
-		return -EINVAL;
-
-	if ((BIT(hweight8(tx_ant)) - 1) != tx_ant)
-		tx_ant = BIT(ffs(tx_ant) - 1) - 1;
-
-	mt7921_mutex_acquire(dev);
-
-	phy->mt76->antenna_mask = tx_ant;
-	phy->mt76->chainmask = tx_ant;
-
-	mt76_set_stream_caps(phy->mt76, true);
-	mt7921_set_stream_he_caps(phy);
-
-	mt7921_mutex_release(dev);
-
-	return 0;
-}
-
-static void mt7921_sta_statistics(struct ieee80211_hw *hw,
-				  struct ieee80211_vif *vif,
-				  struct ieee80211_sta *sta,
-				  struct station_info *sinfo)
-{
-	struct mt7921_sta *msta = (struct mt7921_sta *)sta->drv_priv;
-	struct rate_info *txrate = &msta->wcid.rate;
-
-	if (!txrate->legacy && !txrate->flags)
-		return;
-
-	if (txrate->legacy) {
-		sinfo->txrate.legacy = txrate->legacy;
-	} else {
-		sinfo->txrate.mcs = txrate->mcs;
-		sinfo->txrate.nss = txrate->nss;
-		sinfo->txrate.bw = txrate->bw;
-		sinfo->txrate.he_gi = txrate->he_gi;
-		sinfo->txrate.he_dcm = txrate->he_dcm;
-		sinfo->txrate.he_ru_alloc = txrate->he_ru_alloc;
-	}
-	sinfo->txrate.flags = txrate->flags;
-	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BITRATE);
-}
-
-#ifdef CONFIG_PM
-static int mt7921_suspend(struct ieee80211_hw *hw,
-			  struct cfg80211_wowlan *wowlan)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-
-	cancel_delayed_work_sync(&phy->scan_work);
-	cancel_delayed_work_sync(&phy->mt76->mac_work);
-
-	cancel_delayed_work_sync(&dev->pm.ps_work);
-	mt76_connac_free_pending_tx_skbs(&dev->pm, NULL);
-
-	mt7921_mutex_acquire(dev);
-
-	clear_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-	ieee80211_iterate_active_interfaces(hw,
-					    IEEE80211_IFACE_ITER_RESUME_ALL,
-					    mt7921_mcu_set_suspend_iter,
-					    &dev->mphy);
-
-	mt7921_mutex_release(dev);
-
-	return 0;
-}
-
-static int mt7921_resume(struct ieee80211_hw *hw)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-
-	mt7921_mutex_acquire(dev);
-
-	set_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-	ieee80211_iterate_active_interfaces(hw,
-					    IEEE80211_IFACE_ITER_RESUME_ALL,
-					    mt76_connac_mcu_set_suspend_iter,
-					    &dev->mphy);
-
-	ieee80211_queue_delayed_work(hw, &phy->mt76->mac_work,
-				     MT7921_WATCHDOG_TIME);
-
-	mt7921_mutex_release(dev);
-
-	return 0;
-}
-
-static void mt7921_set_wakeup(struct ieee80211_hw *hw, bool enabled)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	struct mt76_dev *mdev = &dev->mt76;
-
-	device_set_wakeup_enable(mdev->dev, enabled);
-}
-
-static void mt7921_set_rekey_data(struct ieee80211_hw *hw,
-				  struct ieee80211_vif *vif,
-				  struct cfg80211_gtk_rekey_data *data)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-
-	mt7921_mutex_acquire(dev);
-	mt76_connac_mcu_update_gtk_rekey(hw, vif, data);
-	mt7921_mutex_release(dev);
-}
-#endif /* CONFIG_PM */
-
-static void mt7921_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			 u32 queues, bool drop)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-
-	wait_event_timeout(dev->mt76.tx_wait, !mt76_has_tx_pending(&dev->mphy),
-			   HZ / 2);
-}
-
-static void mt7921_sta_set_decap_offload(struct ieee80211_hw *hw,
-					 struct ieee80211_vif *vif,
-					 struct ieee80211_sta *sta,
-					 bool enabled)
-{
-	struct mt7921_sta *msta = (struct mt7921_sta *)sta->drv_priv;
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-
-	mt7921_mutex_acquire(dev);
-
-	if (enabled)
-		set_bit(MT_WCID_FLAG_HDR_TRANS, &msta->wcid.flags);
-	else
-		clear_bit(MT_WCID_FLAG_HDR_TRANS, &msta->wcid.flags);
-
-	mt76_connac_mcu_sta_update_hdr_trans(&dev->mt76, vif, &msta->wcid,
-					     MCU_UNI_CMD(STA_REC_UPDATE));
-
-	mt7921_mutex_release(dev);
-}
-
-#if IS_ENABLED(CONFIG_IPV6)
-static void mt7921_ipv6_addr_change(struct ieee80211_hw *hw,
-				    struct ieee80211_vif *vif,
-				    struct inet6_dev *idev)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct mt7921_dev *dev = mvif->phy->dev;
-	struct inet6_ifaddr *ifa;
-	struct in6_addr ns_addrs[IEEE80211_BSS_ARP_ADDR_LIST_LEN];
-	struct sk_buff *skb;
-	u8 i, idx = 0;
-
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct mt76_connac_arpns_tlv arpns;
-	} req_hdr = {
-		.hdr = {
-			.bss_idx = mvif->mt76.idx,
-		},
-		.arpns = {
-			.tag = cpu_to_le16(UNI_OFFLOAD_OFFLOAD_ND),
-			.mode = 2,  /* update */
-			.option = 1, /* update only */
-		},
-	};
-
-	read_lock_bh(&idev->lock);
-	list_for_each_entry(ifa, &idev->addr_list, if_list) {
-		if (ifa->flags & IFA_F_TENTATIVE)
-			continue;
-		ns_addrs[idx] = ifa->addr;
-		if (++idx >= IEEE80211_BSS_ARP_ADDR_LIST_LEN)
-			break;
-	}
-	read_unlock_bh(&idev->lock);
-
-	if (!idx)
-		return;
-
-	req_hdr.arpns.ips_num = idx;
-	req_hdr.arpns.len = cpu_to_le16(sizeof(struct mt76_connac_arpns_tlv)
-					+ idx * sizeof(struct in6_addr));
-	skb = __mt76_mcu_msg_alloc(&dev->mt76, &req_hdr,
-			sizeof(req_hdr) + idx * sizeof(struct in6_addr),
-			sizeof(req_hdr), GFP_ATOMIC);
-	if (!skb)
-		return;
-
-	for (i = 0; i < idx; i++)
-		skb_put_data(skb, &ns_addrs[i].in6_u, sizeof(struct in6_addr));
-
-	skb_queue_tail(&dev->ipv6_ns_list, skb);
-
-	ieee80211_queue_work(dev->mt76.hw, &dev->ipv6_ns_work);
-}
-#endif
-
-int mt7921_set_tx_sar_pwr(struct ieee80211_hw *hw,
-			  const struct cfg80211_sar_specs *sar)
-{
-	struct mt76_phy *mphy = hw->priv;
-	int err;
-
-	if (sar) {
-		err = mt76_init_sar_power(hw, sar);
-		if (err)
-			return err;
-	}
-
-	mt7921_init_acpi_sar_power(mt7921_hw_phy(hw), !sar);
-
-	err = mt76_connac_mcu_set_rate_txpower(mphy);
-
-	return err;
-}
-
-static int mt7921_set_sar_specs(struct ieee80211_hw *hw,
-				const struct cfg80211_sar_specs *sar)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	int err;
-
-	mt7921_mutex_acquire(dev);
-	err = mt7921_set_tx_sar_pwr(hw, sar);
-	mt7921_mutex_release(dev);
-
-	return err;
-}
-
-static void
-mt7921_channel_switch_beacon(struct ieee80211_hw *hw,
-			     struct ieee80211_vif *vif,
-			     struct cfg80211_chan_def *chandef)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-
-	mt7921_mutex_acquire(dev);
-	mt7921_mcu_uni_add_beacon_offload(dev, hw, vif, true);
-	mt7921_mutex_release(dev);
-}
-
-static int
-mt7921_start_ap(struct ieee80211_hw *hw,
-		struct ieee80211_vif *vif)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	int err;
-
-	mt7921_mutex_acquire(dev);
-
-	err = mt76_connac_mcu_uni_add_bss(phy->mt76, vif, &mvif->sta.wcid,
-					  true);
-	if (err)
-		goto out;
-
-	err = mt7921_mcu_set_bss_pm(dev, vif, true);
-	if (err)
-		goto out;
-
-	err = mt7921_mcu_sta_update(dev, NULL, vif, true,
-				    MT76_STA_INFO_STATE_NONE);
-out:
-	mt7921_mutex_release(dev);
-
-	return err;
-}
-
-static void
-mt7921_stop_ap(struct ieee80211_hw *hw,
-	       struct ieee80211_vif *vif)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct mt7921_phy *phy = mt7921_hw_phy(hw);
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-	int err;
-
-	mt7921_mutex_acquire(dev);
-
-	err = mt7921_mcu_set_bss_pm(dev, vif, false);
-	if (err)
-		goto out;
-
-	mt76_connac_mcu_uni_add_bss(phy->mt76, vif, &mvif->sta.wcid, false);
-
-out:
-	mt7921_mutex_release(dev);
-}
-
-const struct ieee80211_ops mt7921_ops = {
-	.tx = mt7921_tx,
-	.start = mt7921_start,
-	.stop = mt7921_stop,
-	.add_interface = mt7921_add_interface,
-	.remove_interface = mt7921_remove_interface,
-	.config = mt7921_config,
-	.conf_tx = mt7921_conf_tx,
-	.configure_filter = mt7921_configure_filter,
-	.bss_info_changed = mt7921_bss_info_changed,
-	.start_ap = mt7921_start_ap,
-	.stop_ap = mt7921_stop_ap,
-	.sta_state = mt7921_sta_state,
-	.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
-	.set_key = mt7921_set_key,
-	.sta_set_decap_offload = mt7921_sta_set_decap_offload,
-#if IS_ENABLED(CONFIG_IPV6)
-	.ipv6_addr_change = mt7921_ipv6_addr_change,
-#endif /* CONFIG_IPV6 */
-	.ampdu_action = mt7921_ampdu_action,
-	.set_rts_threshold = mt7921_set_rts_threshold,
-	.wake_tx_queue = mt76_wake_tx_queue,
-	.release_buffered_frames = mt76_release_buffered_frames,
-	.channel_switch_beacon = mt7921_channel_switch_beacon,
-	.get_txpower = mt76_get_txpower,
-	.get_stats = mt7921_get_stats,
-	.get_et_sset_count = mt7921_get_et_sset_count,
-	.get_et_strings = mt7921_get_et_strings,
-	.get_et_stats = mt7921_get_et_stats,
-	.get_tsf = mt7921_get_tsf,
-	.set_tsf = mt7921_set_tsf,
-	.get_survey = mt76_get_survey,
-	.get_antenna = mt76_get_antenna,
-	.set_antenna = mt7921_set_antenna,
-	.set_coverage_class = mt7921_set_coverage_class,
-	.hw_scan = mt7921_hw_scan,
-	.cancel_hw_scan = mt7921_cancel_hw_scan,
-	.sta_statistics = mt7921_sta_statistics,
-	.sched_scan_start = mt7921_start_sched_scan,
-	.sched_scan_stop = mt7921_stop_sched_scan,
-	CFG80211_TESTMODE_CMD(mt7921_testmode_cmd)
-	CFG80211_TESTMODE_DUMP(mt7921_testmode_dump)
-#ifdef CONFIG_PM
-	.suspend = mt7921_suspend,
-	.resume = mt7921_resume,
-	.set_wakeup = mt7921_set_wakeup,
-	.set_rekey_data = mt7921_set_rekey_data,
-#endif /* CONFIG_PM */
-	.flush = mt7921_flush,
-	.set_sar_specs = mt7921_set_sar_specs,
-};
-EXPORT_SYMBOL_GPL(mt7921_ops);
-
-MODULE_LICENSE("Dual BSD/GPL");
-MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mcu.c
deleted file mode 100644
index 9d533fa..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mcu.c
+++ /dev/null
@@ -1,1130 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#include <linux/fs.h>
-#include <linux/firmware.h>
-#include "mt7921.h"
-#include "mt7921_trace.h"
-#include "eeprom.h"
-#include "mcu.h"
-#include "mac.h"
-
-#define MT_STA_BFER			BIT(0)
-#define MT_STA_BFEE			BIT(1)
-
-static bool mt7921_disable_clc;
-module_param_named(disable_clc, mt7921_disable_clc, bool, 0644);
-MODULE_PARM_DESC(disable_clc, "disable CLC support");
-
-static int
-mt7921_mcu_parse_eeprom(struct mt76_dev *dev, struct sk_buff *skb)
-{
-	struct mt7921_mcu_eeprom_info *res;
-	u8 *buf;
-
-	if (!skb)
-		return -EINVAL;
-
-	skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
-
-	res = (struct mt7921_mcu_eeprom_info *)skb->data;
-	buf = dev->eeprom.data + le32_to_cpu(res->addr);
-	memcpy(buf, res->data, 16);
-
-	return 0;
-}
-
-int mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd,
-			      struct sk_buff *skb, int seq)
-{
-	int mcu_cmd = FIELD_GET(__MCU_CMD_FIELD_ID, cmd);
-	struct mt76_connac2_mcu_rxd *rxd;
-	int ret = 0;
-
-	if (!skb) {
-		dev_err(mdev->dev, "Message %08x (seq %d) timeout\n",
-			cmd, seq);
-		mt7921_reset(mdev);
-
-		return -ETIMEDOUT;
-	}
-
-	rxd = (struct mt76_connac2_mcu_rxd *)skb->data;
-	if (seq != rxd->seq)
-		return -EAGAIN;
-
-	if (cmd == MCU_CMD(PATCH_SEM_CONTROL) ||
-	    cmd == MCU_CMD(PATCH_FINISH_REQ)) {
-		skb_pull(skb, sizeof(*rxd) - 4);
-		ret = *skb->data;
-	} else if (cmd == MCU_EXT_CMD(THERMAL_CTRL)) {
-		skb_pull(skb, sizeof(*rxd) + 4);
-		ret = le32_to_cpu(*(__le32 *)skb->data);
-	} else if (cmd == MCU_EXT_CMD(EFUSE_ACCESS)) {
-		ret = mt7921_mcu_parse_eeprom(mdev, skb);
-	} else if (cmd == MCU_UNI_CMD(DEV_INFO_UPDATE) ||
-		   cmd == MCU_UNI_CMD(BSS_INFO_UPDATE) ||
-		   cmd == MCU_UNI_CMD(STA_REC_UPDATE) ||
-		   cmd == MCU_UNI_CMD(HIF_CTRL) ||
-		   cmd == MCU_UNI_CMD(OFFLOAD) ||
-		   cmd == MCU_UNI_CMD(SUSPEND)) {
-		struct mt7921_mcu_uni_event *event;
-
-		skb_pull(skb, sizeof(*rxd));
-		event = (struct mt7921_mcu_uni_event *)skb->data;
-		ret = le32_to_cpu(event->status);
-		/* skip invalid event */
-		if (mcu_cmd != event->cid)
-			ret = -EAGAIN;
-	} else if (cmd == MCU_CE_QUERY(REG_READ)) {
-		struct mt7921_mcu_reg_event *event;
-
-		skb_pull(skb, sizeof(*rxd));
-		event = (struct mt7921_mcu_reg_event *)skb->data;
-		ret = (int)le32_to_cpu(event->val);
-	} else {
-		skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
-	}
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt7921_mcu_parse_response);
-
-static int mt7921_mcu_read_eeprom(struct mt7921_dev *dev, u32 offset, u8 *val)
-{
-	struct mt7921_mcu_eeprom_info *res, req = {
-		.addr = cpu_to_le32(round_down(offset,
-				    MT7921_EEPROM_BLOCK_SIZE)),
-	};
-	struct sk_buff *skb;
-	int ret;
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_QUERY(EFUSE_ACCESS),
-					&req, sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	res = (struct mt7921_mcu_eeprom_info *)skb->data;
-	*val = res->data[offset % MT7921_EEPROM_BLOCK_SIZE];
-	dev_kfree_skb(skb);
-
-	return 0;
-}
-
-#ifdef CONFIG_PM
-
-static int
-mt7921_mcu_set_ipv6_ns_filter(struct mt76_dev *dev,
-			      struct ieee80211_vif *vif, bool suspend)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct mt76_connac_arpns_tlv arpns;
-	} req = {
-		.hdr = {
-			.bss_idx = mvif->mt76.idx,
-		},
-		.arpns = {
-			.tag = cpu_to_le16(UNI_OFFLOAD_OFFLOAD_ND),
-			.len = cpu_to_le16(sizeof(struct mt76_connac_arpns_tlv)),
-			.mode = suspend,
-		},
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_UNI_CMD_OFFLOAD, &req, sizeof(req),
-				 true);
-}
-
-void mt7921_mcu_set_suspend_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	if (IS_ENABLED(CONFIG_IPV6)) {
-		struct mt76_phy *phy = priv;
-
-		mt7921_mcu_set_ipv6_ns_filter(phy->dev, vif,
-					      !test_bit(MT76_STATE_RUNNING,
-					      &phy->state));
-	}
-
-	mt76_connac_mcu_set_suspend_iter(priv, mac, vif);
-}
-
-#endif /* CONFIG_PM */
-
-static void
-mt7921_mcu_scan_event(struct mt7921_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7921_phy *phy = (struct mt7921_phy *)mphy->priv;
-
-	spin_lock_bh(&dev->mt76.lock);
-	__skb_queue_tail(&phy->scan_event_list, skb);
-	spin_unlock_bh(&dev->mt76.lock);
-
-	ieee80211_queue_delayed_work(mphy->hw, &phy->scan_work,
-				     MT7921_HW_SCAN_TIMEOUT);
-}
-
-static void
-mt7921_mcu_connection_loss_iter(void *priv, u8 *mac,
-				struct ieee80211_vif *vif)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct mt76_connac_beacon_loss_event *event = priv;
-
-	if (mvif->idx != event->bss_idx)
-		return;
-
-	if (!(vif->driver_flags & IEEE80211_VIF_BEACON_FILTER) ||
-	    vif->type != NL80211_IFTYPE_STATION)
-		return;
-
-	ieee80211_connection_loss(vif);
-}
-
-static void
-mt7921_mcu_connection_loss_event(struct mt7921_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_connac_beacon_loss_event *event;
-	struct mt76_phy *mphy = &dev->mt76.phy;
-
-	skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
-	event = (struct mt76_connac_beacon_loss_event *)skb->data;
-
-	ieee80211_iterate_active_interfaces_atomic(mphy->hw,
-					IEEE80211_IFACE_ITER_RESUME_ALL,
-					mt7921_mcu_connection_loss_iter, event);
-}
-
-static void
-mt7921_mcu_bss_event(struct mt7921_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_mcu_bss_event *event;
-
-	skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
-	event = (struct mt76_connac_mcu_bss_event *)skb->data;
-	if (event->is_absent)
-		ieee80211_stop_queues(mphy->hw);
-	else
-		ieee80211_wake_queues(mphy->hw);
-}
-
-static void
-mt7921_mcu_debug_msg_event(struct mt7921_dev *dev, struct sk_buff *skb)
-{
-	struct mt7921_debug_msg {
-		__le16 id;
-		u8 type;
-		u8 flag;
-		__le32 value;
-		__le16 len;
-		u8 content[512];
-	} __packed * msg;
-
-	skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
-	msg = (struct mt7921_debug_msg *)skb->data;
-
-	if (msg->type == 3) { /* fw log */
-		u16 len = min_t(u16, le16_to_cpu(msg->len), 512);
-		int i;
-
-		for (i = 0 ; i < len; i++) {
-			if (!msg->content[i])
-				msg->content[i] = ' ';
-		}
-		wiphy_info(mt76_hw(dev)->wiphy, "%.*s", len, msg->content);
-	}
-}
-
-static void
-mt7921_mcu_low_power_event(struct mt7921_dev *dev, struct sk_buff *skb)
-{
-	struct mt7921_mcu_lp_event {
-		u8 state;
-		u8 reserved[3];
-	} __packed * event;
-
-	skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
-	event = (struct mt7921_mcu_lp_event *)skb->data;
-
-	trace_lp_event(dev, event->state);
-}
-
-static void
-mt7921_mcu_tx_done_event(struct mt7921_dev *dev, struct sk_buff *skb)
-{
-	struct mt7921_mcu_tx_done_event *event;
-
-	skb_pull(skb, sizeof(struct mt76_connac2_mcu_rxd));
-	event = (struct mt7921_mcu_tx_done_event *)skb->data;
-
-	mt7921_mac_add_txs(dev, event->txs);
-}
-
-static void
-mt7921_mcu_rx_unsolicited_event(struct mt7921_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_connac2_mcu_rxd *rxd;
-
-	rxd = (struct mt76_connac2_mcu_rxd *)skb->data;
-	switch (rxd->eid) {
-	case MCU_EVENT_BSS_BEACON_LOSS:
-		mt7921_mcu_connection_loss_event(dev, skb);
-		break;
-	case MCU_EVENT_SCHED_SCAN_DONE:
-	case MCU_EVENT_SCAN_DONE:
-		mt7921_mcu_scan_event(dev, skb);
-		return;
-	case MCU_EVENT_BSS_ABSENCE:
-		mt7921_mcu_bss_event(dev, skb);
-		break;
-	case MCU_EVENT_DBG_MSG:
-		mt7921_mcu_debug_msg_event(dev, skb);
-		break;
-	case MCU_EVENT_COREDUMP:
-		dev->fw_assert = true;
-		mt76_connac_mcu_coredump_event(&dev->mt76, skb,
-					       &dev->coredump);
-		return;
-	case MCU_EVENT_LP_INFO:
-		mt7921_mcu_low_power_event(dev, skb);
-		break;
-	case MCU_EVENT_TX_DONE:
-		mt7921_mcu_tx_done_event(dev, skb);
-		break;
-	default:
-		break;
-	}
-	dev_kfree_skb(skb);
-}
-
-void mt7921_mcu_rx_event(struct mt7921_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_connac2_mcu_rxd *rxd;
-
-	if (skb_linearize(skb))
-		return;
-
-	rxd = (struct mt76_connac2_mcu_rxd *)skb->data;
-
-	if (rxd->eid == 0x6) {
-		mt76_mcu_rx_event(&dev->mt76, skb);
-		return;
-	}
-
-	if (rxd->ext_eid == MCU_EXT_EVENT_RATE_REPORT ||
-	    rxd->eid == MCU_EVENT_BSS_BEACON_LOSS ||
-	    rxd->eid == MCU_EVENT_SCHED_SCAN_DONE ||
-	    rxd->eid == MCU_EVENT_BSS_ABSENCE ||
-	    rxd->eid == MCU_EVENT_SCAN_DONE ||
-	    rxd->eid == MCU_EVENT_TX_DONE ||
-	    rxd->eid == MCU_EVENT_DBG_MSG ||
-	    rxd->eid == MCU_EVENT_COREDUMP ||
-	    rxd->eid == MCU_EVENT_LP_INFO ||
-	    !rxd->seq)
-		mt7921_mcu_rx_unsolicited_event(dev, skb);
-	else
-		mt76_mcu_rx_event(&dev->mt76, skb);
-}
-
-/** starec & wtbl **/
-int mt7921_mcu_uni_tx_ba(struct mt7921_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool enable)
-{
-	struct mt7921_sta *msta = (struct mt7921_sta *)params->sta->drv_priv;
-
-	if (enable && !params->amsdu)
-		msta->wcid.amsdu = false;
-
-	return mt76_connac_mcu_sta_ba(&dev->mt76, &msta->vif->mt76, params,
-				      MCU_UNI_CMD(STA_REC_UPDATE),
-				      enable, true);
-}
-
-int mt7921_mcu_uni_rx_ba(struct mt7921_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool enable)
-{
-	struct mt7921_sta *msta = (struct mt7921_sta *)params->sta->drv_priv;
-
-	return mt76_connac_mcu_sta_ba(&dev->mt76, &msta->vif->mt76, params,
-				      MCU_UNI_CMD(STA_REC_UPDATE),
-				      enable, false);
-}
-
-static char *mt7921_patch_name(struct mt7921_dev *dev)
-{
-	char *ret;
-
-	if (is_mt7922(&dev->mt76))
-		ret = MT7922_ROM_PATCH;
-	else
-		ret = MT7921_ROM_PATCH;
-
-	return ret;
-}
-
-static char *mt7921_ram_name(struct mt7921_dev *dev)
-{
-	char *ret;
-
-	if (is_mt7922(&dev->mt76))
-		ret = MT7922_FIRMWARE_WM;
-	else
-		ret = MT7921_FIRMWARE_WM;
-
-	return ret;
-}
-
-static int mt7921_load_clc(struct mt7921_dev *dev, const char *fw_name)
-{
-	const struct mt76_connac2_fw_trailer *hdr;
-	const struct mt76_connac2_fw_region *region;
-	const struct mt7921_clc *clc;
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt7921_phy *phy = &dev->phy;
-	const struct firmware *fw;
-	int ret, i, len, offset = 0;
-	u8 *clc_base = NULL, hw_encap = 0;
-
-	if (mt7921_disable_clc ||
-	    mt76_is_usb(&dev->mt76))
-		return 0;
-
-	if (mt76_is_mmio(&dev->mt76)) {
-		ret = mt7921_mcu_read_eeprom(dev, MT_EE_HW_TYPE, &hw_encap);
-		if (ret)
-			return ret;
-		hw_encap = u8_get_bits(hw_encap, MT_EE_HW_TYPE_ENCAP);
-	}
-
-	ret = request_firmware(&fw, fw_name, mdev->dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
-		dev_err(mdev->dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const void *)(fw->data + fw->size - sizeof(*hdr));
-	for (i = 0; i < hdr->n_region; i++) {
-		region = (const void *)((const u8 *)hdr -
-					(hdr->n_region - i) * sizeof(*region));
-		len = le32_to_cpu(region->len);
-
-		/* check if we have valid buffer size */
-		if (offset + len > fw->size) {
-			dev_err(mdev->dev, "Invalid firmware region\n");
-			ret = -EINVAL;
-			goto out;
-		}
-
-		if ((region->feature_set & FW_FEATURE_NON_DL) &&
-		    region->type == FW_TYPE_CLC) {
-			clc_base = (u8 *)(fw->data + offset);
-			break;
-		}
-		offset += len;
-	}
-
-	if (!clc_base)
-		goto out;
-
-	for (offset = 0; offset < len; offset += le32_to_cpu(clc->len)) {
-		clc = (const struct mt7921_clc *)(clc_base + offset);
-
-		/* do not init buf again if chip reset triggered */
-		if (phy->clc[clc->idx])
-			continue;
-
-		/* header content sanity */
-		if (clc->idx == MT7921_CLC_POWER &&
-		    u8_get_bits(clc->type, MT_EE_HW_TYPE_ENCAP) != hw_encap)
-			continue;
-
-		phy->clc[clc->idx] = devm_kmemdup(mdev->dev, clc,
-						  le32_to_cpu(clc->len),
-						  GFP_KERNEL);
-
-		if (!phy->clc[clc->idx]) {
-			ret = -ENOMEM;
-			goto out;
-		}
-	}
-	ret = mt7921_mcu_set_clc(dev, "00", ENVIRON_INDOOR);
-out:
-	release_firmware(fw);
-
-	return ret;
-}
-
-static int mt7921_load_firmware(struct mt7921_dev *dev)
-{
-	int ret;
-
-	ret = mt76_get_field(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_N9_RDY);
-	if (ret && mt76_is_mmio(&dev->mt76)) {
-		dev_dbg(dev->mt76.dev, "Firmware is already download\n");
-		goto fw_loaded;
-	}
-
-	ret = mt76_connac2_load_patch(&dev->mt76, mt7921_patch_name(dev));
-	if (ret)
-		return ret;
-
-	if (mt76_is_sdio(&dev->mt76)) {
-		/* activate again */
-		ret = __mt7921_mcu_fw_pmctrl(dev);
-		if (!ret)
-			ret = __mt7921_mcu_drv_pmctrl(dev);
-	}
-
-	ret = mt76_connac2_load_ram(&dev->mt76, mt7921_ram_name(dev), NULL);
-	if (ret)
-		return ret;
-
-	if (!mt76_poll_msec(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_N9_RDY,
-			    MT_TOP_MISC2_FW_N9_RDY, 1500)) {
-		dev_err(dev->mt76.dev, "Timeout for initializing firmware\n");
-
-		return -EIO;
-	}
-
-fw_loaded:
-
-#ifdef CONFIG_PM
-	dev->mt76.hw->wiphy->wowlan = &mt76_connac_wowlan_support;
-#endif /* CONFIG_PM */
-
-	dev_dbg(dev->mt76.dev, "Firmware init done\n");
-
-	return 0;
-}
-
-int mt7921_mcu_fw_log_2_host(struct mt7921_dev *dev, u8 ctrl)
-{
-	struct {
-		u8 ctrl_val;
-		u8 pad[3];
-	} data = {
-		.ctrl_val = ctrl
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_CE_CMD(FWLOG_2_HOST),
-				 &data, sizeof(data), false);
-}
-
-int mt7921_run_firmware(struct mt7921_dev *dev)
-{
-	int err;
-
-	err = mt7921_load_firmware(dev);
-	if (err)
-		return err;
-
-	err = mt76_connac_mcu_get_nic_capability(&dev->mphy);
-	if (err)
-		return err;
-
-	set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-	err = mt7921_load_clc(dev, mt7921_ram_name(dev));
-	if (err)
-		return err;
-
-	return mt7921_mcu_fw_log_2_host(dev, 1);
-}
-EXPORT_SYMBOL_GPL(mt7921_run_firmware);
-
-int mt7921_mcu_set_tx(struct mt7921_dev *dev, struct ieee80211_vif *vif)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct edca {
-		__le16 cw_min;
-		__le16 cw_max;
-		__le16 txop;
-		__le16 aifs;
-		u8 guardtime;
-		u8 acm;
-	} __packed;
-	struct mt7921_mcu_tx {
-		struct edca edca[IEEE80211_NUM_ACS];
-		u8 bss_idx;
-		u8 qos;
-		u8 wmm_idx;
-		u8 pad;
-	} __packed req = {
-		.bss_idx = mvif->mt76.idx,
-		.qos = vif->bss_conf.qos,
-		.wmm_idx = mvif->mt76.wmm_idx,
-	};
-	struct mu_edca {
-		u8 cw_min;
-		u8 cw_max;
-		u8 aifsn;
-		u8 acm;
-		u8 timer;
-		u8 padding[3];
-	};
-	struct mt7921_mcu_mu_tx {
-		u8 ver;
-		u8 pad0;
-		__le16 len;
-		u8 bss_idx;
-		u8 qos;
-		u8 wmm_idx;
-		u8 pad1;
-		struct mu_edca edca[IEEE80211_NUM_ACS];
-		u8 pad3[32];
-	} __packed req_mu = {
-		.bss_idx = mvif->mt76.idx,
-		.qos = vif->bss_conf.qos,
-		.wmm_idx = mvif->mt76.wmm_idx,
-	};
-	static const int to_aci[] = { 1, 0, 2, 3 };
-	int ac, ret;
-
-	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
-		struct ieee80211_tx_queue_params *q = &mvif->queue_params[ac];
-		struct edca *e = &req.edca[to_aci[ac]];
-
-		e->aifs = cpu_to_le16(q->aifs);
-		e->txop = cpu_to_le16(q->txop);
-
-		if (q->cw_min)
-			e->cw_min = cpu_to_le16(q->cw_min);
-		else
-			e->cw_min = cpu_to_le16(5);
-
-		if (q->cw_max)
-			e->cw_max = cpu_to_le16(q->cw_max);
-		else
-			e->cw_max = cpu_to_le16(10);
-	}
-
-	ret = mt76_mcu_send_msg(&dev->mt76, MCU_CE_CMD(SET_EDCA_PARMS), &req,
-				sizeof(req), false);
-	if (ret)
-		return ret;
-
-	if (!vif->bss_conf.he_support)
-		return 0;
-
-	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
-		struct ieee80211_he_mu_edca_param_ac_rec *q;
-		struct mu_edca *e;
-
-		if (!mvif->queue_params[ac].mu_edca)
-			break;
-
-		q = &mvif->queue_params[ac].mu_edca_param_rec;
-		e = &(req_mu.edca[to_aci[ac]]);
-
-		e->cw_min = q->ecw_min_max & 0xf;
-		e->cw_max = (q->ecw_min_max & 0xf0) >> 4;
-		e->aifsn = q->aifsn;
-		e->timer = q->mu_edca_timer;
-	}
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_CE_CMD(SET_MU_EDCA_PARMS),
-				 &req_mu, sizeof(req_mu), false);
-}
-
-int mt7921_mcu_set_chan_info(struct mt7921_phy *phy, int cmd)
-{
-	struct mt7921_dev *dev = phy->dev;
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	int freq1 = chandef->center_freq1;
-	struct {
-		u8 control_ch;
-		u8 center_ch;
-		u8 bw;
-		u8 tx_streams_num;
-		u8 rx_streams;	/* mask or num */
-		u8 switch_reason;
-		u8 band_idx;
-		u8 center_ch2;	/* for 80+80 only */
-		__le16 cac_case;
-		u8 channel_band;
-		u8 rsv0;
-		__le32 outband_freq;
-		u8 txpower_drop;
-		u8 ap_bw;
-		u8 ap_center_ch;
-		u8 rsv1[57];
-	} __packed req = {
-		.control_ch = chandef->chan->hw_value,
-		.center_ch = ieee80211_frequency_to_channel(freq1),
-		.bw = mt76_connac_chan_bw(chandef),
-		.tx_streams_num = hweight8(phy->mt76->antenna_mask),
-		.rx_streams = phy->mt76->antenna_mask,
-		.band_idx = phy != &dev->phy,
-	};
-
-	if (chandef->chan->band == NL80211_BAND_6GHZ)
-		req.channel_band = 2;
-	else
-		req.channel_band = chandef->chan->band;
-
-	if (cmd == MCU_EXT_CMD(SET_RX_PATH) ||
-	    dev->mt76.hw->conf.flags & IEEE80211_CONF_MONITOR)
-		req.switch_reason = CH_SWITCH_NORMAL;
-	else if (dev->mt76.hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)
-		req.switch_reason = CH_SWITCH_SCAN_BYPASS_DPD;
-	else if (!cfg80211_reg_can_beacon(dev->mt76.hw->wiphy, chandef,
-					  NL80211_IFTYPE_AP))
-		req.switch_reason = CH_SWITCH_DFS;
-	else
-		req.switch_reason = CH_SWITCH_NORMAL;
-
-	if (cmd == MCU_EXT_CMD(CHANNEL_SWITCH))
-		req.rx_streams = hweight8(req.rx_streams);
-
-	if (chandef->width == NL80211_CHAN_WIDTH_80P80) {
-		int freq2 = chandef->center_freq2;
-
-		req.center_ch2 = ieee80211_frequency_to_channel(freq2);
-	}
-
-	return mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), true);
-}
-
-int mt7921_mcu_set_eeprom(struct mt7921_dev *dev)
-{
-	struct req_hdr {
-		u8 buffer_mode;
-		u8 format;
-		__le16 len;
-	} __packed req = {
-		.buffer_mode = EE_MODE_EFUSE,
-		.format = EE_FORMAT_WHOLE,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(EFUSE_BUFFER_MODE),
-				 &req, sizeof(req), true);
-}
-EXPORT_SYMBOL_GPL(mt7921_mcu_set_eeprom);
-
-int mt7921_mcu_uni_bss_ps(struct mt7921_dev *dev, struct ieee80211_vif *vif)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct ps_tlv {
-			__le16 tag;
-			__le16 len;
-			u8 ps_state; /* 0: device awake
-				      * 1: static power save
-				      * 2: dynamic power saving
-				      * 3: enter TWT power saving
-				      * 4: leave TWT power saving
-				      */
-			u8 pad[3];
-		} __packed ps;
-	} __packed ps_req = {
-		.hdr = {
-			.bss_idx = mvif->mt76.idx,
-		},
-		.ps = {
-			.tag = cpu_to_le16(UNI_BSS_INFO_PS),
-			.len = cpu_to_le16(sizeof(struct ps_tlv)),
-			.ps_state = vif->bss_conf.ps ? 2 : 0,
-		},
-	};
-
-	if (vif->type != NL80211_IFTYPE_STATION)
-		return -EOPNOTSUPP;
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_UNI_CMD(BSS_INFO_UPDATE),
-				 &ps_req, sizeof(ps_req), true);
-}
-
-static int
-mt7921_mcu_uni_bss_bcnft(struct mt7921_dev *dev, struct ieee80211_vif *vif,
-			 bool enable)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct {
-		struct {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct bcnft_tlv {
-			__le16 tag;
-			__le16 len;
-			__le16 bcn_interval;
-			u8 dtim_period;
-			u8 pad;
-		} __packed bcnft;
-	} __packed bcnft_req = {
-		.hdr = {
-			.bss_idx = mvif->mt76.idx,
-		},
-		.bcnft = {
-			.tag = cpu_to_le16(UNI_BSS_INFO_BCNFT),
-			.len = cpu_to_le16(sizeof(struct bcnft_tlv)),
-			.bcn_interval = cpu_to_le16(vif->bss_conf.beacon_int),
-			.dtim_period = vif->bss_conf.dtim_period,
-		},
-	};
-
-	if (vif->type != NL80211_IFTYPE_STATION)
-		return 0;
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_UNI_CMD(BSS_INFO_UPDATE),
-				 &bcnft_req, sizeof(bcnft_req), true);
-}
-
-int
-mt7921_mcu_set_bss_pm(struct mt7921_dev *dev, struct ieee80211_vif *vif,
-		      bool enable)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct {
-		u8 bss_idx;
-		u8 dtim_period;
-		__le16 aid;
-		__le16 bcn_interval;
-		__le16 atim_window;
-		u8 uapsd;
-		u8 bmc_delivered_ac;
-		u8 bmc_triggered_ac;
-		u8 pad;
-	} req = {
-		.bss_idx = mvif->mt76.idx,
-		.aid = cpu_to_le16(vif->bss_conf.aid),
-		.dtim_period = vif->bss_conf.dtim_period,
-		.bcn_interval = cpu_to_le16(vif->bss_conf.beacon_int),
-	};
-	struct {
-		u8 bss_idx;
-		u8 pad[3];
-	} req_hdr = {
-		.bss_idx = mvif->mt76.idx,
-	};
-	int err;
-
-	err = mt76_mcu_send_msg(&dev->mt76, MCU_CE_CMD(SET_BSS_ABORT),
-				&req_hdr, sizeof(req_hdr), false);
-	if (err < 0 || !enable)
-		return err;
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_CE_CMD(SET_BSS_CONNECTED),
-				 &req, sizeof(req), false);
-}
-
-int mt7921_mcu_sta_update(struct mt7921_dev *dev, struct ieee80211_sta *sta,
-			  struct ieee80211_vif *vif, bool enable,
-			  enum mt76_sta_info_state state)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	int rssi = -ewma_rssi_read(&mvif->rssi);
-	struct mt76_sta_cmd_info info = {
-		.sta = sta,
-		.vif = vif,
-		.enable = enable,
-		.cmd = MCU_UNI_CMD(STA_REC_UPDATE),
-		.state = state,
-		.offload_fw = true,
-		.rcpi = to_rcpi(rssi),
-	};
-	struct mt7921_sta *msta;
-
-	msta = sta ? (struct mt7921_sta *)sta->drv_priv : NULL;
-	info.wcid = msta ? &msta->wcid : &mvif->sta.wcid;
-	info.newly = msta ? state != MT76_STA_INFO_STATE_ASSOC : true;
-
-	return mt76_connac_mcu_sta_cmd(&dev->mphy, &info);
-}
-
-int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_pm *pm = &dev->pm;
-	int err = 0;
-
-	mutex_lock(&pm->mutex);
-
-	if (!test_bit(MT76_STATE_PM, &mphy->state))
-		goto out;
-
-	err = __mt7921_mcu_drv_pmctrl(dev);
-out:
-	mutex_unlock(&pm->mutex);
-
-	if (err)
-		mt7921_reset(&dev->mt76);
-
-	return err;
-}
-EXPORT_SYMBOL_GPL(mt7921_mcu_drv_pmctrl);
-
-int mt7921_mcu_fw_pmctrl(struct mt7921_dev *dev)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_pm *pm = &dev->pm;
-	int err = 0;
-
-	mutex_lock(&pm->mutex);
-
-	if (mt76_connac_skip_fw_pmctrl(mphy, pm))
-		goto out;
-
-	err = __mt7921_mcu_fw_pmctrl(dev);
-out:
-	mutex_unlock(&pm->mutex);
-
-	if (err)
-		mt7921_reset(&dev->mt76);
-
-	return err;
-}
-EXPORT_SYMBOL_GPL(mt7921_mcu_fw_pmctrl);
-
-int mt7921_mcu_set_beacon_filter(struct mt7921_dev *dev,
-				 struct ieee80211_vif *vif,
-				 bool enable)
-{
-	int err;
-
-	if (enable) {
-		err = mt7921_mcu_uni_bss_bcnft(dev, vif, true);
-		if (err)
-			return err;
-
-		mt76_set(dev, MT_WF_RFCR(0), MT_WF_RFCR_DROP_OTHER_BEACON);
-
-		return 0;
-	}
-
-	err = mt7921_mcu_set_bss_pm(dev, vif, false);
-	if (err)
-		return err;
-
-	mt76_clear(dev, MT_WF_RFCR(0), MT_WF_RFCR_DROP_OTHER_BEACON);
-
-	return 0;
-}
-
-int mt7921_get_txpwr_info(struct mt7921_dev *dev, struct mt7921_txpwr *txpwr)
-{
-	struct mt7921_txpwr_event *event;
-	struct mt7921_txpwr_req req = {
-		.dbdc_idx = 0,
-	};
-	struct sk_buff *skb;
-	int ret;
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_CE_CMD(GET_TXPWR),
-					&req, sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	event = (struct mt7921_txpwr_event *)skb->data;
-	WARN_ON(skb->len != le16_to_cpu(event->len));
-	memcpy(txpwr, &event->txpwr, sizeof(event->txpwr));
-
-	dev_kfree_skb(skb);
-
-	return 0;
-}
-
-int mt7921_mcu_set_sniffer(struct mt7921_dev *dev, struct ieee80211_vif *vif,
-			   bool enable)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct {
-		struct {
-			u8 band_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct sniffer_enable_tlv {
-			__le16 tag;
-			__le16 len;
-			u8 enable;
-			u8 pad[3];
-		} __packed enable;
-	} req = {
-		.hdr = {
-			.band_idx = mvif->band_idx,
-		},
-		.enable = {
-			.tag = cpu_to_le16(0),
-			.len = cpu_to_le16(sizeof(struct sniffer_enable_tlv)),
-			.enable = enable,
-		},
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_UNI_CMD(SNIFFER), &req, sizeof(req),
-				 true);
-}
-
-int
-mt7921_mcu_uni_add_beacon_offload(struct mt7921_dev *dev,
-				  struct ieee80211_hw *hw,
-				  struct ieee80211_vif *vif,
-				  bool enable)
-{
-	struct mt7921_vif *mvif = (struct mt7921_vif *)vif->drv_priv;
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-	struct ieee80211_mutable_offsets offs;
-	struct {
-		struct req_hdr {
-			u8 bss_idx;
-			u8 pad[3];
-		} __packed hdr;
-		struct bcn_content_tlv {
-			__le16 tag;
-			__le16 len;
-			__le16 tim_ie_pos;
-			__le16 csa_ie_pos;
-			__le16 bcc_ie_pos;
-			/* 0: disable beacon offload
-			 * 1: enable beacon offload
-			 * 2: update probe respond offload
-			 */
-			u8 enable;
-			/* 0: legacy format (TXD + payload)
-			 * 1: only cap field IE
-			 */
-			u8 type;
-			__le16 pkt_len;
-			u8 pkt[512];
-		} __packed beacon_tlv;
-	} req = {
-		.hdr = {
-			.bss_idx = mvif->mt76.idx,
-		},
-		.beacon_tlv = {
-			.tag = cpu_to_le16(UNI_BSS_INFO_BCN_CONTENT),
-			.len = cpu_to_le16(sizeof(struct bcn_content_tlv)),
-			.enable = enable,
-		},
-	};
-	struct sk_buff *skb;
-
-	/* support enable/update process only
-	 * disable flow would be handled in bss stop handler automatically
-	 */
-	if (!enable)
-		return -EOPNOTSUPP;
-
-	skb = ieee80211_beacon_get_template(mt76_hw(dev), vif, &offs);
-	if (!skb)
-		return -EINVAL;
-
-	if (skb->len > 512 - MT_TXD_SIZE) {
-		dev_err(dev->mt76.dev, "beacon size limit exceed\n");
-		dev_kfree_skb(skb);
-		return -EINVAL;
-	}
-
-	mt76_connac2_mac_write_txwi(&dev->mt76, (__le32 *)(req.beacon_tlv.pkt),
-				    skb, wcid, NULL, 0, 0, BSS_CHANGED_BEACON);
-	memcpy(req.beacon_tlv.pkt + MT_TXD_SIZE, skb->data, skb->len);
-	req.beacon_tlv.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
-	req.beacon_tlv.tim_ie_pos = cpu_to_le16(MT_TXD_SIZE + offs.tim_offset);
-
-	if (offs.cntdwn_counter_offs[0]) {
-		u16 csa_offs;
-
-		csa_offs = MT_TXD_SIZE + offs.cntdwn_counter_offs[0] - 4;
-		req.beacon_tlv.csa_ie_pos = cpu_to_le16(csa_offs);
-	}
-	dev_kfree_skb(skb);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_UNI_CMD(BSS_INFO_UPDATE),
-				 &req, sizeof(req), true);
-}
-
-static
-int __mt7921_mcu_set_clc(struct mt7921_dev *dev, u8 *alpha2,
-			 enum environment_cap env_cap,
-			 struct mt7921_clc *clc,
-			 u8 idx)
-{
-	struct sk_buff *skb;
-	struct {
-		u8 ver;
-		u8 pad0;
-		__le16 len;
-		u8 idx;
-		u8 env;
-		u8 pad1[2];
-		u8 alpha2[2];
-		u8 type[2];
-		u8 rsvd[64];
-	} __packed req = {
-		.idx = idx,
-		.env = env_cap,
-	};
-	int ret, valid_cnt = 0;
-	u8 i, *pos;
-
-	if (!clc)
-		return 0;
-
-	pos = clc->data;
-	for (i = 0; i < clc->nr_country; i++) {
-		struct mt7921_clc_rule *rule = (struct mt7921_clc_rule *)pos;
-		u16 len = le16_to_cpu(rule->len);
-
-		pos += len + sizeof(*rule);
-		if (rule->alpha2[0] != alpha2[0] ||
-		    rule->alpha2[1] != alpha2[1])
-			continue;
-
-		memcpy(req.alpha2, rule->alpha2, 2);
-		memcpy(req.type, rule->type, 2);
-
-		req.len = cpu_to_le16(sizeof(req) + len);
-		skb = __mt76_mcu_msg_alloc(&dev->mt76, &req,
-					   le16_to_cpu(req.len),
-					   sizeof(req), GFP_KERNEL);
-		if (!skb)
-			return -ENOMEM;
-		skb_put_data(skb, rule->data, len);
-
-		ret = mt76_mcu_skb_send_msg(&dev->mt76, skb,
-					    MCU_CE_CMD(SET_CLC), false);
-		if (ret < 0)
-			return ret;
-		valid_cnt++;
-	}
-
-	if (!valid_cnt)
-		return -ENOENT;
-
-	return 0;
-}
-
-int mt7921_mcu_set_clc(struct mt7921_dev *dev, u8 *alpha2,
-		       enum environment_cap env_cap)
-{
-	struct mt7921_phy *phy = (struct mt7921_phy *)&dev->phy;
-	int i, ret;
-
-	/* submit all clc config */
-	for (i = 0; i < ARRAY_SIZE(phy->clc); i++) {
-		ret = __mt7921_mcu_set_clc(dev, alpha2, env_cap,
-					   phy->clc[i], i);
-
-		/* If no country found, set "00" as default */
-		if (ret == -ENOENT)
-			ret = __mt7921_mcu_set_clc(dev, "00",
-						   ENVIRON_INDOOR,
-						   phy->clc[i], i);
-		if (ret < 0)
-			return ret;
-	}
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mcu.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mcu.h
deleted file mode 100644
index 96dc870..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mcu.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT7921_MCU_H
-#define __MT7921_MCU_H
-
-#include "../mt76_connac_mcu.h"
-
-struct mt7921_mcu_tx_done_event {
-	u8 pid;
-	u8 status;
-	__le16 seq;
-
-	u8 wlan_idx;
-	u8 tx_cnt;
-	__le16 tx_rate;
-
-	u8 flag;
-	u8 tid;
-	u8 rsp_rate;
-	u8 mcs;
-
-	u8 bw;
-	u8 tx_pwr;
-	u8 reason;
-	u8 rsv0[1];
-
-	__le32 delay;
-	__le32 timestamp;
-	__le32 applied_flag;
-	u8 txs[28];
-
-	u8 rsv1[32];
-} __packed;
-
-/* ext event table */
-enum {
-	MCU_EXT_EVENT_RATE_REPORT = 0x87,
-};
-
-struct mt7921_mcu_eeprom_info {
-	__le32 addr;
-	__le32 valid;
-	u8 data[MT7921_EEPROM_BLOCK_SIZE];
-} __packed;
-
-#define MT_RA_RATE_NSS			GENMASK(8, 6)
-#define MT_RA_RATE_MCS			GENMASK(3, 0)
-#define MT_RA_RATE_TX_MODE		GENMASK(12, 9)
-#define MT_RA_RATE_DCM_EN		BIT(4)
-#define MT_RA_RATE_BW			GENMASK(14, 13)
-
-struct mt7921_mcu_uni_event {
-	u8 cid;
-	u8 pad[3];
-	__le32 status; /* 0: success, others: fail */
-} __packed;
-
-enum {
-	MT_EBF = BIT(0),	/* explicit beamforming */
-	MT_IBF = BIT(1)		/* implicit beamforming */
-};
-
-struct mt7921_mcu_reg_event {
-	__le32 reg;
-	__le32 val;
-} __packed;
-
-struct mt7921_mcu_ant_id_config {
-	u8 ant_id[4];
-} __packed;
-
-struct mt7921_txpwr_req {
-	u8 ver;
-	u8 action;
-	__le16 len;
-	u8 dbdc_idx;
-	u8 rsv[3];
-} __packed;
-
-struct mt7921_txpwr_event {
-	u8 ver;
-	u8 action;
-	__le16 len;
-	struct mt7921_txpwr txpwr;
-} __packed;
-
-enum {
-	TM_SWITCH_MODE,
-	TM_SET_AT_CMD,
-	TM_QUERY_AT_CMD,
-};
-
-enum {
-	MT7921_TM_NORMAL,
-	MT7921_TM_TESTMODE,
-	MT7921_TM_ICAP,
-	MT7921_TM_ICAP_OVERLAP,
-	MT7921_TM_WIFISPECTRUM,
-};
-
-struct mt7921_rftest_cmd {
-	u8 action;
-	u8 rsv[3];
-	__le32 param0;
-	__le32 param1;
-} __packed;
-
-struct mt7921_rftest_evt {
-	__le32 param0;
-	__le32 param1;
-} __packed;
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mt7921.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mt7921.h
deleted file mode 100644
index eaba114..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mt7921.h
+++ /dev/null
@@ -1,511 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT7921_H
-#define __MT7921_H
-
-#include <linux/interrupt.h>
-#include <linux/ktime.h>
-#include "../mt76_connac_mcu.h"
-#include "regs.h"
-#include "acpi_sar.h"
-
-#define MT7921_MAX_INTERFACES		4
-#define MT7921_WTBL_SIZE		20
-#define MT7921_WTBL_RESERVED		(MT7921_WTBL_SIZE - 1)
-#define MT7921_WTBL_STA			(MT7921_WTBL_RESERVED - \
-					 MT7921_MAX_INTERFACES)
-
-#define MT7921_PM_TIMEOUT		(HZ / 12)
-#define MT7921_HW_SCAN_TIMEOUT		(HZ / 10)
-#define MT7921_WATCHDOG_TIME		(HZ / 4)
-#define MT7921_RESET_TIMEOUT		(30 * HZ)
-
-#define MT7921_TX_RING_SIZE		2048
-#define MT7921_TX_MCU_RING_SIZE		256
-#define MT7921_TX_FWDL_RING_SIZE	128
-
-#define MT7921_RX_RING_SIZE		1536
-#define MT7921_RX_MCU_RING_SIZE		512
-
-#define MT7921_DRV_OWN_RETRY_COUNT	10
-#define MT7921_MCU_INIT_RETRY_COUNT	10
-#define MT7921_WFSYS_INIT_RETRY_COUNT	2
-
-#define MT7921_FIRMWARE_WM		"mediatek/WIFI_RAM_CODE_MT7961_1.bin"
-#define MT7921_ROM_PATCH		"mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin"
-
-#define MT7922_FIRMWARE_WM		"mediatek/WIFI_RAM_CODE_MT7922_1.bin"
-#define MT7922_ROM_PATCH		"mediatek/WIFI_MT7922_patch_mcu_1_1_hdr.bin"
-
-#define MT7921_EEPROM_SIZE		3584
-#define MT7921_TOKEN_SIZE		8192
-
-#define MT7921_EEPROM_BLOCK_SIZE	16
-
-#define MT7921_CFEND_RATE_DEFAULT	0x49	/* OFDM 24M */
-#define MT7921_CFEND_RATE_11B		0x03	/* 11B LP, 11M */
-
-#define MT7921_SKU_RATE_NUM		161
-#define MT7921_SKU_MAX_DELTA_IDX	MT7921_SKU_RATE_NUM
-#define MT7921_SKU_TABLE_SIZE		(MT7921_SKU_RATE_NUM + 1)
-
-#define MT7921_SDIO_HDR_TX_BYTES	GENMASK(15, 0)
-#define MT7921_SDIO_HDR_PKT_TYPE	GENMASK(17, 16)
-
-enum mt7921_sdio_pkt_type {
-	MT7921_SDIO_TXD,
-	MT7921_SDIO_DATA,
-	MT7921_SDIO_CMD,
-	MT7921_SDIO_FWDL,
-};
-
-struct mt7921_sdio_intr {
-	u32 isr;
-	struct {
-		u32 wtqcr[16];
-	} tx;
-	struct {
-		u16 num[2];
-		u16 len0[16];
-		u16 len1[128];
-	} rx;
-	u32 rec_mb[2];
-} __packed;
-
-#define to_rssi(field, rxv)		((FIELD_GET(field, rxv) - 220) / 2)
-#define to_rcpi(rssi)			(2 * (rssi) + 220)
-
-struct mt7921_vif;
-struct mt7921_sta;
-
-enum mt7921_txq_id {
-	MT7921_TXQ_BAND0,
-	MT7921_TXQ_BAND1,
-	MT7921_TXQ_FWDL = 16,
-	MT7921_TXQ_MCU_WM,
-};
-
-enum mt7921_rxq_id {
-	MT7921_RXQ_BAND0 = 0,
-	MT7921_RXQ_BAND1,
-	MT7921_RXQ_MCU_WM = 0,
-};
-
-struct mt7921_sta {
-	struct mt76_wcid wcid; /* must be first */
-
-	struct mt7921_vif *vif;
-
-	struct list_head poll_list;
-	u32 airtime_ac[8];
-
-	unsigned long last_txs;
-	unsigned long ampdu_state;
-
-	struct mt76_connac_sta_key_conf bip;
-};
-
-DECLARE_EWMA(rssi, 10, 8);
-
-struct mt7921_vif {
-	struct mt76_vif mt76; /* must be first */
-
-	struct mt7921_sta sta;
-	struct mt7921_sta *wep_sta;
-
-	struct mt7921_phy *phy;
-
-	struct ewma_rssi rssi;
-
-	struct ieee80211_tx_queue_params queue_params[IEEE80211_NUM_ACS];
-};
-
-struct mib_stats {
-	u32 ack_fail_cnt;
-	u32 fcs_err_cnt;
-	u32 rts_cnt;
-	u32 rts_retries_cnt;
-	u32 ba_miss_cnt;
-
-	u32 tx_bf_ibf_ppdu_cnt;
-	u32 tx_bf_ebf_ppdu_cnt;
-	u32 tx_bf_rx_fb_all_cnt;
-	u32 tx_bf_rx_fb_he_cnt;
-	u32 tx_bf_rx_fb_vht_cnt;
-	u32 tx_bf_rx_fb_ht_cnt;
-
-	u32 tx_ampdu_cnt;
-	u32 tx_mpdu_attempts_cnt;
-	u32 tx_mpdu_success_cnt;
-	u32 tx_pkt_ebf_cnt;
-	u32 tx_pkt_ibf_cnt;
-
-	u32 rx_mpdu_cnt;
-	u32 rx_ampdu_cnt;
-	u32 rx_ampdu_bytes_cnt;
-	u32 rx_ba_cnt;
-
-	u32 tx_amsdu[8];
-	u32 tx_amsdu_cnt;
-};
-
-enum {
-	MT7921_CLC_POWER,
-	MT7921_CLC_CHAN,
-	MT7921_CLC_MAX_NUM,
-};
-
-struct mt7921_clc_rule {
-	u8 alpha2[2];
-	u8 type[2];
-	__le16 len;
-	u8 data[];
-} __packed;
-
-struct mt7921_clc {
-	__le32 len;
-	u8 idx;
-	u8 ver;
-	u8 nr_country;
-	u8 type;
-	u8 rsv[8];
-	u8 data[];
-};
-
-struct mt7921_phy {
-	struct mt76_phy *mt76;
-	struct mt7921_dev *dev;
-
-	struct ieee80211_sband_iftype_data iftype[NUM_NL80211_BANDS][NUM_NL80211_IFTYPES];
-
-	u64 omac_mask;
-
-	u16 noise;
-
-	s16 coverage_class;
-	u8 slottime;
-
-	u32 rx_ampdu_ts;
-	u32 ampdu_ref;
-
-	struct mib_stats mib;
-
-	u8 sta_work_count;
-
-	struct sk_buff_head scan_event_list;
-	struct delayed_work scan_work;
-#ifdef CONFIG_ACPI
-	struct mt7921_acpi_sar *acpisar;
-#endif
-
-	struct mt7921_clc *clc[MT7921_CLC_MAX_NUM];
-};
-
-#define mt7921_init_reset(dev)		((dev)->hif_ops->init_reset(dev))
-#define mt7921_dev_reset(dev)		((dev)->hif_ops->reset(dev))
-#define mt7921_mcu_init(dev)		((dev)->hif_ops->mcu_init(dev))
-#define __mt7921_mcu_drv_pmctrl(dev)	((dev)->hif_ops->drv_own(dev))
-#define	__mt7921_mcu_fw_pmctrl(dev)	((dev)->hif_ops->fw_own(dev))
-struct mt7921_hif_ops {
-	int (*init_reset)(struct mt7921_dev *dev);
-	int (*reset)(struct mt7921_dev *dev);
-	int (*mcu_init)(struct mt7921_dev *dev);
-	int (*drv_own)(struct mt7921_dev *dev);
-	int (*fw_own)(struct mt7921_dev *dev);
-};
-
-struct mt7921_dev {
-	union { /* must be first */
-		struct mt76_dev mt76;
-		struct mt76_phy mphy;
-	};
-
-	const struct mt76_bus_ops *bus_ops;
-	struct mt7921_phy phy;
-	struct tasklet_struct irq_tasklet;
-
-	struct work_struct reset_work;
-	bool hw_full_reset:1;
-	bool hw_init_done:1;
-	bool fw_assert:1;
-
-	struct list_head sta_poll_list;
-	spinlock_t sta_poll_lock;
-
-	struct work_struct init_work;
-
-	u8 fw_debug;
-
-	struct mt76_connac_pm pm;
-	struct mt76_connac_coredump coredump;
-	const struct mt7921_hif_ops *hif_ops;
-
-	struct work_struct ipv6_ns_work;
-	/* IPv6 addresses for WoWLAN */
-	struct sk_buff_head ipv6_ns_list;
-};
-
-enum {
-	TXPWR_USER,
-	TXPWR_EEPROM,
-	TXPWR_MAC,
-	TXPWR_MAX_NUM,
-};
-
-struct mt7921_txpwr {
-	u8 ch;
-	u8 rsv[3];
-	struct {
-		u8 ch;
-		u8 cck[4];
-		u8 ofdm[8];
-		u8 ht20[8];
-		u8 ht40[9];
-		u8 vht20[12];
-		u8 vht40[12];
-		u8 vht80[12];
-		u8 vht160[12];
-		u8 he26[12];
-		u8 he52[12];
-		u8 he106[12];
-		u8 he242[12];
-		u8 he484[12];
-		u8 he996[12];
-		u8 he996x2[12];
-	} data[TXPWR_MAX_NUM];
-};
-
-static inline struct mt7921_phy *
-mt7921_hw_phy(struct ieee80211_hw *hw)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	return phy->priv;
-}
-
-static inline struct mt7921_dev *
-mt7921_hw_dev(struct ieee80211_hw *hw)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	return container_of(phy->dev, struct mt7921_dev, mt76);
-}
-
-#define mt7921_mutex_acquire(dev)	\
-	mt76_connac_mutex_acquire(&(dev)->mt76, &(dev)->pm)
-#define mt7921_mutex_release(dev)	\
-	mt76_connac_mutex_release(&(dev)->mt76, &(dev)->pm)
-
-extern const struct ieee80211_ops mt7921_ops;
-
-u32 mt7921_reg_map(struct mt7921_dev *dev, u32 addr);
-
-int __mt7921_start(struct mt7921_phy *phy);
-int mt7921_register_device(struct mt7921_dev *dev);
-void mt7921_unregister_device(struct mt7921_dev *dev);
-int mt7921_dma_init(struct mt7921_dev *dev);
-int mt7921_wpdma_reset(struct mt7921_dev *dev, bool force);
-int mt7921_wpdma_reinit_cond(struct mt7921_dev *dev);
-void mt7921_dma_cleanup(struct mt7921_dev *dev);
-int mt7921_run_firmware(struct mt7921_dev *dev);
-int mt7921_mcu_set_bss_pm(struct mt7921_dev *dev, struct ieee80211_vif *vif,
-			  bool enable);
-int mt7921_mcu_sta_update(struct mt7921_dev *dev, struct ieee80211_sta *sta,
-			  struct ieee80211_vif *vif, bool enable,
-			  enum mt76_sta_info_state state);
-int mt7921_mcu_set_chan_info(struct mt7921_phy *phy, int cmd);
-int mt7921_mcu_set_tx(struct mt7921_dev *dev, struct ieee80211_vif *vif);
-int mt7921_mcu_set_eeprom(struct mt7921_dev *dev);
-int mt7921_mcu_get_rx_rate(struct mt7921_phy *phy, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta, struct rate_info *rate);
-int mt7921_mcu_fw_log_2_host(struct mt7921_dev *dev, u8 ctrl);
-void mt7921_mcu_rx_event(struct mt7921_dev *dev, struct sk_buff *skb);
-
-static inline void mt7921_irq_enable(struct mt7921_dev *dev, u32 mask)
-{
-	mt76_set_irq_mask(&dev->mt76, 0, 0, mask);
-
-	tasklet_schedule(&dev->irq_tasklet);
-}
-
-static inline u32
-mt7921_reg_map_l1(struct mt7921_dev *dev, u32 addr)
-{
-	u32 offset = FIELD_GET(MT_HIF_REMAP_L1_OFFSET, addr);
-	u32 base = FIELD_GET(MT_HIF_REMAP_L1_BASE, addr);
-
-	mt76_rmw_field(dev, MT_HIF_REMAP_L1, MT_HIF_REMAP_L1_MASK, base);
-	/* use read to push write */
-	mt76_rr(dev, MT_HIF_REMAP_L1);
-
-	return MT_HIF_REMAP_BASE_L1 + offset;
-}
-
-static inline u32
-mt7921_l1_rr(struct mt7921_dev *dev, u32 addr)
-{
-	return mt76_rr(dev, mt7921_reg_map_l1(dev, addr));
-}
-
-static inline void
-mt7921_l1_wr(struct mt7921_dev *dev, u32 addr, u32 val)
-{
-	mt76_wr(dev, mt7921_reg_map_l1(dev, addr), val);
-}
-
-static inline u32
-mt7921_l1_rmw(struct mt7921_dev *dev, u32 addr, u32 mask, u32 val)
-{
-	val |= mt7921_l1_rr(dev, addr) & ~mask;
-	mt7921_l1_wr(dev, addr, val);
-
-	return val;
-}
-
-#define mt7921_l1_set(dev, addr, val)	mt7921_l1_rmw(dev, addr, 0, val)
-#define mt7921_l1_clear(dev, addr, val)	mt7921_l1_rmw(dev, addr, val, 0)
-
-static inline bool mt7921_dma_need_reinit(struct mt7921_dev *dev)
-{
-	return !mt76_get_field(dev, MT_WFDMA_DUMMY_CR, MT_WFDMA_NEED_REINIT);
-}
-
-static inline void
-mt7921_skb_add_usb_sdio_hdr(struct mt7921_dev *dev, struct sk_buff *skb,
-			    int type)
-{
-	u32 hdr, len;
-
-	len = mt76_is_usb(&dev->mt76) ? skb->len : skb->len + sizeof(hdr);
-	hdr = FIELD_PREP(MT7921_SDIO_HDR_TX_BYTES, len) |
-	      FIELD_PREP(MT7921_SDIO_HDR_PKT_TYPE, type);
-
-	put_unaligned_le32(hdr, skb_push(skb, sizeof(hdr)));
-}
-
-void mt7921_stop(struct ieee80211_hw *hw);
-int mt7921_mac_init(struct mt7921_dev *dev);
-bool mt7921_mac_wtbl_update(struct mt7921_dev *dev, int idx, u32 mask);
-void mt7921_mac_reset_counters(struct mt7921_phy *phy);
-void mt7921_mac_set_timing(struct mt7921_phy *phy);
-int mt7921_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta);
-void mt7921_mac_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			  struct ieee80211_sta *sta);
-void mt7921_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta);
-void mt7921_mac_work(struct work_struct *work);
-void mt7921_mac_reset_work(struct work_struct *work);
-void mt7921_mac_update_mib_stats(struct mt7921_phy *phy);
-void mt7921_reset(struct mt76_dev *mdev);
-int mt7921e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-			   enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			   struct ieee80211_sta *sta,
-			   struct mt76_tx_info *tx_info);
-
-void mt7921_tx_worker(struct mt76_worker *w);
-void mt7921_tx_token_put(struct mt7921_dev *dev);
-bool mt7921_rx_check(struct mt76_dev *mdev, void *data, int len);
-void mt7921_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			 struct sk_buff *skb);
-void mt7921_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps);
-void mt7921_stats_work(struct work_struct *work);
-void mt7921_set_stream_he_caps(struct mt7921_phy *phy);
-void mt7921_update_channel(struct mt76_phy *mphy);
-int mt7921_init_debugfs(struct mt7921_dev *dev);
-
-int mt7921_mcu_set_beacon_filter(struct mt7921_dev *dev,
-				 struct ieee80211_vif *vif,
-				 bool enable);
-int mt7921_mcu_uni_tx_ba(struct mt7921_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool enable);
-int mt7921_mcu_uni_rx_ba(struct mt7921_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool enable);
-void mt7921_scan_work(struct work_struct *work);
-int mt7921_mcu_uni_bss_ps(struct mt7921_dev *dev, struct ieee80211_vif *vif);
-int mt7921_mcu_drv_pmctrl(struct mt7921_dev *dev);
-int mt7921_mcu_fw_pmctrl(struct mt7921_dev *dev);
-void mt7921_pm_wake_work(struct work_struct *work);
-void mt7921_pm_power_save_work(struct work_struct *work);
-void mt7921_coredump_work(struct work_struct *work);
-int mt7921_wfsys_reset(struct mt7921_dev *dev);
-int mt7921_get_txpwr_info(struct mt7921_dev *dev, struct mt7921_txpwr *txpwr);
-int mt7921_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			void *data, int len);
-int mt7921_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
-			 struct netlink_callback *cb, void *data, int len);
-void mt7921_txwi_free(struct mt7921_dev *dev, struct mt76_txwi_cache *t,
-		      struct ieee80211_sta *sta, bool clear_status,
-		      struct list_head *free_list);
-void mt7921_mac_sta_poll(struct mt7921_dev *dev);
-int mt7921_mcu_parse_response(struct mt76_dev *mdev, int cmd,
-			      struct sk_buff *skb, int seq);
-
-int mt7921e_driver_own(struct mt7921_dev *dev);
-int mt7921e_mac_reset(struct mt7921_dev *dev);
-int mt7921e_mcu_init(struct mt7921_dev *dev);
-int mt7921s_wfsys_reset(struct mt7921_dev *dev);
-int mt7921s_mac_reset(struct mt7921_dev *dev);
-int mt7921s_init_reset(struct mt7921_dev *dev);
-int __mt7921e_mcu_drv_pmctrl(struct mt7921_dev *dev);
-int mt7921e_mcu_drv_pmctrl(struct mt7921_dev *dev);
-int mt7921e_mcu_fw_pmctrl(struct mt7921_dev *dev);
-
-int mt7921s_mcu_init(struct mt7921_dev *dev);
-int mt7921s_mcu_drv_pmctrl(struct mt7921_dev *dev);
-int mt7921s_mcu_fw_pmctrl(struct mt7921_dev *dev);
-void mt7921_mac_add_txs(struct mt7921_dev *dev, void *data);
-void mt7921_set_runtime_pm(struct mt7921_dev *dev);
-void mt7921_mcu_set_suspend_iter(void *priv, u8 *mac,
-				 struct ieee80211_vif *vif);
-void mt7921_set_ipv6_ns_work(struct work_struct *work);
-
-int mt7921_mcu_set_sniffer(struct mt7921_dev *dev, struct ieee80211_vif *vif,
-			   bool enable);
-
-int mt7921_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-				   enum mt76_txq_id qid, struct mt76_wcid *wcid,
-				   struct ieee80211_sta *sta,
-				   struct mt76_tx_info *tx_info);
-void mt7921_usb_sdio_tx_complete_skb(struct mt76_dev *mdev,
-				     struct mt76_queue_entry *e);
-bool mt7921_usb_sdio_tx_status_data(struct mt76_dev *mdev, u8 *update);
-
-/* usb */
-#define MT_USB_TYPE_VENDOR	(USB_TYPE_VENDOR | 0x1f)
-#define MT_USB_TYPE_UHW_VENDOR	(USB_TYPE_VENDOR | 0x1e)
-
-int mt7921u_mcu_power_on(struct mt7921_dev *dev);
-int mt7921u_wfsys_reset(struct mt7921_dev *dev);
-int mt7921u_dma_init(struct mt7921_dev *dev, bool resume);
-int mt7921u_init_reset(struct mt7921_dev *dev);
-int mt7921u_mac_reset(struct mt7921_dev *dev);
-int mt7921_mcu_uni_add_beacon_offload(struct mt7921_dev *dev,
-				      struct ieee80211_hw *hw,
-				      struct ieee80211_vif *vif,
-				      bool enable);
-#ifdef CONFIG_ACPI
-int mt7921_init_acpi_sar(struct mt7921_dev *dev);
-int mt7921_init_acpi_sar_power(struct mt7921_phy *phy, bool set_default);
-#else
-static inline int
-mt7921_init_acpi_sar(struct mt7921_dev *dev)
-{
-	return 0;
-}
-
-static inline int
-mt7921_init_acpi_sar_power(struct mt7921_phy *phy, bool set_default)
-{
-	return 0;
-}
-#endif
-int mt7921_set_tx_sar_pwr(struct ieee80211_hw *hw,
-			  const struct cfg80211_sar_specs *sar);
-
-int mt7921_mcu_set_clc(struct mt7921_dev *dev, u8 *alpha2,
-		       enum environment_cap env_cap);
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mt7921_trace.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mt7921_trace.h
deleted file mode 100644
index 9bc4db6..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/mt7921_trace.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2021 Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#if !defined(__MT7921_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
-#define __MT7921_TRACE_H
-
-#include <linux/tracepoint.h>
-#include "mt7921.h"
-
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM mt7921
-
-#define MAXNAME		32
-#define DEV_ENTRY	__array(char, wiphy_name, 32)
-#define DEV_ASSIGN	strlcpy(__entry->wiphy_name,	\
-				wiphy_name(mt76_hw(dev)->wiphy), MAXNAME)
-#define DEV_PR_FMT	"%s"
-#define DEV_PR_ARG	__entry->wiphy_name
-#define LP_STATE_PR_ARG	__entry->lp_state ? "lp ready" : "lp not ready"
-
-TRACE_EVENT(lp_event,
-	TP_PROTO(struct mt7921_dev *dev, u8 lp_state),
-
-	TP_ARGS(dev, lp_state),
-
-	TP_STRUCT__entry(
-		DEV_ENTRY
-		__field(u8, lp_state)
-	),
-
-	TP_fast_assign(
-		DEV_ASSIGN;
-		__entry->lp_state = lp_state;
-	),
-
-	TP_printk(
-		DEV_PR_FMT " %s",
-		DEV_PR_ARG, LP_STATE_PR_ARG
-	)
-);
-
-#endif
-
-#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
-#undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE mt7921_trace
-
-#include <trace/define_trace.h>
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/pci.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/pci.c
deleted file mode 100644
index 4f34cb9..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/pci.c
+++ /dev/null
@@ -1,517 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc.
- *
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/pci.h>
-
-#include "mt7921.h"
-#include "mac.h"
-#include "mcu.h"
-#include "../trace.h"
-
-static const struct pci_device_id mt7921_pci_device_table[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7961) },
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7922) },
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x0608) },
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x0616) },
-	{ },
-};
-
-static bool mt7921_disable_aspm;
-module_param_named(disable_aspm, mt7921_disable_aspm, bool, 0644);
-MODULE_PARM_DESC(disable_aspm, "disable PCI ASPM support");
-
-static void
-mt7921_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-
-	if (q == MT_RXQ_MAIN)
-		mt7921_irq_enable(dev, MT_INT_RX_DONE_DATA);
-	else if (q == MT_RXQ_MCU_WA)
-		mt7921_irq_enable(dev, MT_INT_RX_DONE_WM2);
-	else
-		mt7921_irq_enable(dev, MT_INT_RX_DONE_WM);
-}
-
-static irqreturn_t mt7921_irq_handler(int irq, void *dev_instance)
-{
-	struct mt7921_dev *dev = dev_instance;
-
-	mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0);
-
-	if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state))
-		return IRQ_NONE;
-
-	tasklet_schedule(&dev->irq_tasklet);
-
-	return IRQ_HANDLED;
-}
-
-static void mt7921_irq_tasklet(unsigned long data)
-{
-	struct mt7921_dev *dev = (struct mt7921_dev *)data;
-	u32 intr, mask = 0;
-
-	mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0);
-
-	intr = mt76_rr(dev, MT_WFDMA0_HOST_INT_STA);
-	intr &= dev->mt76.mmio.irqmask;
-	mt76_wr(dev, MT_WFDMA0_HOST_INT_STA, intr);
-
-	trace_dev_irq(&dev->mt76, intr, dev->mt76.mmio.irqmask);
-
-	mask |= intr & MT_INT_RX_DONE_ALL;
-	if (intr & MT_INT_TX_DONE_MCU)
-		mask |= MT_INT_TX_DONE_MCU;
-
-	if (intr & MT_INT_MCU_CMD) {
-		u32 intr_sw;
-
-		intr_sw = mt76_rr(dev, MT_MCU_CMD);
-		/* ack MCU2HOST_SW_INT_STA */
-		mt76_wr(dev, MT_MCU_CMD, intr_sw);
-		if (intr_sw & MT_MCU_CMD_WAKE_RX_PCIE) {
-			mask |= MT_INT_RX_DONE_DATA;
-			intr |= MT_INT_RX_DONE_DATA;
-		}
-	}
-
-	mt76_set_irq_mask(&dev->mt76, MT_WFDMA0_HOST_INT_ENA, mask, 0);
-
-	if (intr & MT_INT_TX_DONE_ALL)
-		napi_schedule(&dev->mt76.tx_napi);
-
-	if (intr & MT_INT_RX_DONE_WM)
-		napi_schedule(&dev->mt76.napi[MT_RXQ_MCU]);
-
-	if (intr & MT_INT_RX_DONE_WM2)
-		napi_schedule(&dev->mt76.napi[MT_RXQ_MCU_WA]);
-
-	if (intr & MT_INT_RX_DONE_DATA)
-		napi_schedule(&dev->mt76.napi[MT_RXQ_MAIN]);
-}
-
-static int mt7921e_init_reset(struct mt7921_dev *dev)
-{
-	return mt7921_wpdma_reset(dev, true);
-}
-
-static void mt7921e_unregister_device(struct mt7921_dev *dev)
-{
-	int i;
-	struct mt76_connac_pm *pm = &dev->pm;
-
-	cancel_work_sync(&dev->init_work);
-	mt76_unregister_device(&dev->mt76);
-	mt76_for_each_q_rx(&dev->mt76, i)
-		napi_disable(&dev->mt76.napi[i]);
-	cancel_delayed_work_sync(&pm->ps_work);
-	cancel_work_sync(&pm->wake_work);
-
-	mt7921_tx_token_put(dev);
-	mt7921_mcu_drv_pmctrl(dev);
-	mt7921_dma_cleanup(dev);
-	mt7921_wfsys_reset(dev);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-
-	tasklet_disable(&dev->irq_tasklet);
-}
-
-static u32 __mt7921_reg_addr(struct mt7921_dev *dev, u32 addr)
-{
-	static const struct mt76_connac_reg_map fixed_map[] = {
-		{ 0x820d0000, 0x30000, 0x10000 }, /* WF_LMAC_TOP (WF_WTBLON) */
-		{ 0x820ed000, 0x24800, 0x00800 }, /* WF_LMAC_TOP BN0 (WF_MIB) */
-		{ 0x820e4000, 0x21000, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_TMAC) */
-		{ 0x820e7000, 0x21e00, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_DMA) */
-		{ 0x820eb000, 0x24200, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_LPON) */
-		{ 0x820e2000, 0x20800, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_AGG) */
-		{ 0x820e3000, 0x20c00, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_ARB) */
-		{ 0x820e5000, 0x21400, 0x00800 }, /* WF_LMAC_TOP BN0 (WF_RMAC) */
-		{ 0x00400000, 0x80000, 0x10000 }, /* WF_MCU_SYSRAM */
-		{ 0x00410000, 0x90000, 0x10000 }, /* WF_MCU_SYSRAM (configure register) */
-		{ 0x40000000, 0x70000, 0x10000 }, /* WF_UMAC_SYSRAM */
-		{ 0x54000000, 0x02000, 0x01000 }, /* WFDMA PCIE0 MCU DMA0 */
-		{ 0x55000000, 0x03000, 0x01000 }, /* WFDMA PCIE0 MCU DMA1 */
-		{ 0x58000000, 0x06000, 0x01000 }, /* WFDMA PCIE1 MCU DMA0 (MEM_DMA) */
-		{ 0x59000000, 0x07000, 0x01000 }, /* WFDMA PCIE1 MCU DMA1 */
-		{ 0x7c000000, 0xf0000, 0x10000 }, /* CONN_INFRA */
-		{ 0x7c020000, 0xd0000, 0x10000 }, /* CONN_INFRA, WFDMA */
-		{ 0x7c060000, 0xe0000, 0x10000 }, /* CONN_INFRA, conn_host_csr_top */
-		{ 0x80020000, 0xb0000, 0x10000 }, /* WF_TOP_MISC_OFF */
-		{ 0x81020000, 0xc0000, 0x10000 }, /* WF_TOP_MISC_ON */
-		{ 0x820c0000, 0x08000, 0x04000 }, /* WF_UMAC_TOP (PLE) */
-		{ 0x820c8000, 0x0c000, 0x02000 }, /* WF_UMAC_TOP (PSE) */
-		{ 0x820cc000, 0x0e000, 0x01000 }, /* WF_UMAC_TOP (PP) */
-		{ 0x820cd000, 0x0f000, 0x01000 }, /* WF_MDP_TOP */
-		{ 0x74030000, 0x10000, 0x10000 }, /* PCIE_MAC_IREG */
-		{ 0x820ce000, 0x21c00, 0x00200 }, /* WF_LMAC_TOP (WF_SEC) */
-		{ 0x820cf000, 0x22000, 0x01000 }, /* WF_LMAC_TOP (WF_PF) */
-		{ 0x820e0000, 0x20000, 0x00400 }, /* WF_LMAC_TOP BN0 (WF_CFG) */
-		{ 0x820e1000, 0x20400, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_TRB) */
-		{ 0x820e9000, 0x23400, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_WTBLOFF) */
-		{ 0x820ea000, 0x24000, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_ETBF) */
-		{ 0x820ec000, 0x24600, 0x00200 }, /* WF_LMAC_TOP BN0 (WF_INT) */
-		{ 0x820f0000, 0xa0000, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_CFG) */
-		{ 0x820f1000, 0xa0600, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_TRB) */
-		{ 0x820f2000, 0xa0800, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_AGG) */
-		{ 0x820f3000, 0xa0c00, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_ARB) */
-		{ 0x820f4000, 0xa1000, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_TMAC) */
-		{ 0x820f5000, 0xa1400, 0x00800 }, /* WF_LMAC_TOP BN1 (WF_RMAC) */
-		{ 0x820f7000, 0xa1e00, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_DMA) */
-		{ 0x820f9000, 0xa3400, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_WTBLOFF) */
-		{ 0x820fa000, 0xa4000, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_ETBF) */
-		{ 0x820fb000, 0xa4200, 0x00400 }, /* WF_LMAC_TOP BN1 (WF_LPON) */
-		{ 0x820fc000, 0xa4600, 0x00200 }, /* WF_LMAC_TOP BN1 (WF_INT) */
-		{ 0x820fd000, 0xa4800, 0x00800 }, /* WF_LMAC_TOP BN1 (WF_MIB) */
-	};
-	int i;
-
-	if (addr < 0x100000)
-		return addr;
-
-	for (i = 0; i < ARRAY_SIZE(fixed_map); i++) {
-		u32 ofs;
-
-		if (addr < fixed_map[i].phys)
-			continue;
-
-		ofs = addr - fixed_map[i].phys;
-		if (ofs > fixed_map[i].size)
-			continue;
-
-		return fixed_map[i].maps + ofs;
-	}
-
-	if ((addr >= 0x18000000 && addr < 0x18c00000) ||
-	    (addr >= 0x70000000 && addr < 0x78000000) ||
-	    (addr >= 0x7c000000 && addr < 0x7c400000))
-		return mt7921_reg_map_l1(dev, addr);
-
-	dev_err(dev->mt76.dev, "Access currently unsupported address %08x\n",
-		addr);
-
-	return 0;
-}
-
-static u32 mt7921_rr(struct mt76_dev *mdev, u32 offset)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	u32 addr = __mt7921_reg_addr(dev, offset);
-
-	return dev->bus_ops->rr(mdev, addr);
-}
-
-static void mt7921_wr(struct mt76_dev *mdev, u32 offset, u32 val)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	u32 addr = __mt7921_reg_addr(dev, offset);
-
-	dev->bus_ops->wr(mdev, addr, val);
-}
-
-static u32 mt7921_rmw(struct mt76_dev *mdev, u32 offset, u32 mask, u32 val)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	u32 addr = __mt7921_reg_addr(dev, offset);
-
-	return dev->bus_ops->rmw(mdev, addr, mask, val);
-}
-
-static int mt7921_pci_probe(struct pci_dev *pdev,
-			    const struct pci_device_id *id)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		/* txwi_size = txd size + txp size */
-		.txwi_size = MT_TXD_SIZE + sizeof(struct mt76_connac_hw_txp),
-		.drv_flags = MT_DRV_TXWI_NO_FREE | MT_DRV_HW_MGMT_TXQ |
-			     MT_DRV_AMSDU_OFFLOAD,
-		.survey_flags = SURVEY_INFO_TIME_TX |
-				SURVEY_INFO_TIME_RX |
-				SURVEY_INFO_TIME_BSS_RX,
-		.token_size = MT7921_TOKEN_SIZE,
-		.tx_prepare_skb = mt7921e_tx_prepare_skb,
-		.tx_complete_skb = mt76_connac_tx_complete_skb,
-		.rx_check = mt7921_rx_check,
-		.rx_skb = mt7921_queue_rx_skb,
-		.rx_poll_complete = mt7921_rx_poll_complete,
-		.sta_ps = mt7921_sta_ps,
-		.sta_add = mt7921_mac_sta_add,
-		.sta_assoc = mt7921_mac_sta_assoc,
-		.sta_remove = mt7921_mac_sta_remove,
-		.update_survey = mt7921_update_channel,
-	};
-	static const struct mt7921_hif_ops mt7921_pcie_ops = {
-		.init_reset = mt7921e_init_reset,
-		.reset = mt7921e_mac_reset,
-		.mcu_init = mt7921e_mcu_init,
-		.drv_own = mt7921e_mcu_drv_pmctrl,
-		.fw_own = mt7921e_mcu_fw_pmctrl,
-	};
-
-	struct mt76_bus_ops *bus_ops;
-	struct mt7921_dev *dev;
-	struct mt76_dev *mdev;
-	int ret;
-
-	ret = pcim_enable_device(pdev);
-	if (ret)
-		return ret;
-
-	ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
-	if (ret)
-		return ret;
-
-	pci_set_master(pdev);
-
-	ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
-	if (ret < 0)
-		return ret;
-
-	ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
-	if (ret)
-		goto err_free_pci_vec;
-
-	if (mt7921_disable_aspm)
-		mt76_pci_disable_aspm(pdev);
-
-	mdev = mt76_alloc_device(&pdev->dev, sizeof(*dev), &mt7921_ops,
-				 &drv_ops);
-	if (!mdev) {
-		ret = -ENOMEM;
-		goto err_free_pci_vec;
-	}
-
-	pci_set_drvdata(pdev, mdev);
-
-	dev = container_of(mdev, struct mt7921_dev, mt76);
-	dev->hif_ops = &mt7921_pcie_ops;
-
-	mt76_mmio_init(&dev->mt76, pcim_iomap_table(pdev)[0]);
-	tasklet_init(&dev->irq_tasklet, mt7921_irq_tasklet, (unsigned long)dev);
-
-	dev->phy.dev = dev;
-	dev->phy.mt76 = &dev->mt76.phy;
-	dev->mt76.phy.priv = &dev->phy;
-	dev->bus_ops = dev->mt76.bus;
-	bus_ops = devm_kmemdup(dev->mt76.dev, dev->bus_ops, sizeof(*bus_ops),
-			       GFP_KERNEL);
-	if (!bus_ops) {
-		ret = -ENOMEM;
-		goto err_free_dev;
-	}
-
-	bus_ops->rr = mt7921_rr;
-	bus_ops->wr = mt7921_wr;
-	bus_ops->rmw = mt7921_rmw;
-	dev->mt76.bus = bus_ops;
-
-	ret = __mt7921e_mcu_drv_pmctrl(dev);
-	if (ret)
-		goto err_free_dev;
-
-	mdev->rev = (mt7921_l1_rr(dev, MT_HW_CHIPID) << 16) |
-		    (mt7921_l1_rr(dev, MT_HW_REV) & 0xff);
-	dev_info(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
-
-	mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0);
-
-	mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
-
-	ret = devm_request_irq(mdev->dev, pdev->irq, mt7921_irq_handler,
-			       IRQF_SHARED, KBUILD_MODNAME, dev);
-	if (ret)
-		goto err_free_dev;
-
-	ret = mt7921_dma_init(dev);
-	if (ret)
-		goto err_free_irq;
-
-	ret = mt7921_register_device(dev);
-	if (ret)
-		goto err_free_irq;
-
-	return 0;
-
-err_free_irq:
-	devm_free_irq(&pdev->dev, pdev->irq, dev);
-err_free_dev:
-	mt76_free_device(&dev->mt76);
-err_free_pci_vec:
-	pci_free_irq_vectors(pdev);
-
-	return ret;
-}
-
-static void mt7921_pci_remove(struct pci_dev *pdev)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-
-	mt7921e_unregister_device(dev);
-	devm_free_irq(&pdev->dev, pdev->irq, dev);
-	mt76_free_device(&dev->mt76);
-	pci_free_irq_vectors(pdev);
-}
-
-#ifdef CONFIG_PM
-static int mt7921_pci_suspend(struct pci_dev *pdev, pm_message_t state)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	struct mt76_connac_pm *pm = &dev->pm;
-	int i, err;
-
-	pm->suspended = true;
-	flush_work(&dev->reset_work);
-	cancel_delayed_work_sync(&pm->ps_work);
-	cancel_work_sync(&pm->wake_work);
-
-	err = mt7921_mcu_drv_pmctrl(dev);
-	if (err < 0)
-		goto restore_suspend;
-
-	err = mt76_connac_mcu_set_hif_suspend(mdev, true);
-	if (err)
-		goto restore_suspend;
-
-	/* always enable deep sleep during suspend to reduce
-	 * power consumption
-	 */
-	mt76_connac_mcu_set_deep_sleep(&dev->mt76, true);
-
-	napi_disable(&mdev->tx_napi);
-	mt76_worker_disable(&mdev->tx_worker);
-
-	mt76_for_each_q_rx(mdev, i) {
-		napi_disable(&mdev->napi[i]);
-	}
-
-	pci_enable_wake(pdev, pci_choose_state(pdev, state), true);
-
-	/* wait until dma is idle  */
-	mt76_poll(dev, MT_WFDMA0_GLO_CFG,
-		  MT_WFDMA0_GLO_CFG_TX_DMA_BUSY |
-		  MT_WFDMA0_GLO_CFG_RX_DMA_BUSY, 0, 1000);
-
-	/* put dma disabled */
-	mt76_clear(dev, MT_WFDMA0_GLO_CFG,
-		   MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-
-	/* disable interrupt */
-	mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0);
-	mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0x0);
-	synchronize_irq(pdev->irq);
-	tasklet_kill(&dev->irq_tasklet);
-
-	err = mt7921_mcu_fw_pmctrl(dev);
-	if (err)
-		goto restore_napi;
-
-	pci_save_state(pdev);
-	err = pci_set_power_state(pdev, pci_choose_state(pdev, state));
-	if (err)
-		goto restore_napi;
-
-	return 0;
-
-restore_napi:
-	mt76_for_each_q_rx(mdev, i) {
-		napi_enable(&mdev->napi[i]);
-	}
-	napi_enable(&mdev->tx_napi);
-
-	if (!pm->ds_enable)
-		mt76_connac_mcu_set_deep_sleep(&dev->mt76, false);
-
-	mt76_connac_mcu_set_hif_suspend(mdev, false);
-
-restore_suspend:
-	pm->suspended = false;
-
-	if (err < 0)
-		mt7921_reset(&dev->mt76);
-
-	return err;
-}
-
-static int mt7921_pci_resume(struct pci_dev *pdev)
-{
-	struct mt76_dev *mdev = pci_get_drvdata(pdev);
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	struct mt76_connac_pm *pm = &dev->pm;
-	int i, err;
-
-	err = pci_set_power_state(pdev, PCI_D0);
-	if (err)
-		return err;
-
-	pci_restore_state(pdev);
-
-	err = mt7921_mcu_drv_pmctrl(dev);
-	if (err < 0)
-		goto failed;
-
-	mt7921_wpdma_reinit_cond(dev);
-
-	/* enable interrupt */
-	mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
-	mt7921_irq_enable(dev, MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL |
-			  MT_INT_MCU_CMD);
-	mt76_set(dev, MT_MCU2HOST_SW_INT_ENA, MT_MCU_CMD_WAKE_RX_PCIE);
-
-	/* put dma enabled */
-	mt76_set(dev, MT_WFDMA0_GLO_CFG,
-		 MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-
-	mt76_worker_enable(&mdev->tx_worker);
-
-	local_bh_disable();
-	mt76_for_each_q_rx(mdev, i) {
-		napi_enable(&mdev->napi[i]);
-		napi_schedule(&mdev->napi[i]);
-	}
-	napi_enable(&mdev->tx_napi);
-	napi_schedule(&mdev->tx_napi);
-	local_bh_enable();
-
-	/* restore previous ds setting */
-	if (!pm->ds_enable)
-		mt76_connac_mcu_set_deep_sleep(&dev->mt76, false);
-
-	err = mt76_connac_mcu_set_hif_suspend(mdev, false);
-failed:
-	pm->suspended = false;
-
-	if (err < 0)
-		mt7921_reset(&dev->mt76);
-
-	return err;
-}
-#endif /* CONFIG_PM */
-
-static struct pci_driver mt7921_pci_driver = {
-	.name		= KBUILD_MODNAME,
-	.id_table	= mt7921_pci_device_table,
-	.probe		= mt7921_pci_probe,
-	.remove		= mt7921_pci_remove,
-#ifdef CONFIG_PM
-	.suspend	= mt7921_pci_suspend,
-	.resume		= mt7921_pci_resume,
-#endif /* CONFIG_PM */
-};
-
-module_pci_driver(mt7921_pci_driver);
-
-MODULE_DEVICE_TABLE(pci, mt7921_pci_device_table);
-MODULE_FIRMWARE(MT7921_FIRMWARE_WM);
-MODULE_FIRMWARE(MT7921_ROM_PATCH);
-MODULE_FIRMWARE(MT7922_FIRMWARE_WM);
-MODULE_FIRMWARE(MT7922_ROM_PATCH);
-MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
-MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>");
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/pci_mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/pci_mac.c
deleted file mode 100644
index 436f07b..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/pci_mac.c
+++ /dev/null
@@ -1,142 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2021 MediaTek Inc. */
-
-#include "mt7921.h"
-#include "../dma.h"
-#include "mac.h"
-
-int mt7921e_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-			   enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			   struct ieee80211_sta *sta,
-			   struct mt76_tx_info *tx_info)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
-	struct ieee80211_key_conf *key = info->control.hw_key;
-	struct mt76_connac_hw_txp *txp;
-	struct mt76_txwi_cache *t;
-	int id, pid;
-	u8 *txwi = (u8 *)txwi_ptr;
-
-	if (unlikely(tx_info->skb->len <= ETH_HLEN))
-		return -EINVAL;
-
-	if (!wcid)
-		wcid = &dev->mt76.global_wcid;
-
-	t = (struct mt76_txwi_cache *)(txwi + mdev->drv->txwi_size);
-	t->skb = tx_info->skb;
-
-	id = mt76_token_consume(mdev, &t);
-	if (id < 0)
-		return id;
-
-	if (sta) {
-		struct mt7921_sta *msta = (struct mt7921_sta *)sta->drv_priv;
-
-		if (time_after(jiffies, msta->last_txs + HZ / 4)) {
-			info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
-			msta->last_txs = jiffies;
-		}
-	}
-
-	pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
-	mt76_connac2_mac_write_txwi(mdev, txwi_ptr, tx_info->skb, wcid, key,
-				    pid, qid, 0);
-
-	txp = (struct mt76_connac_hw_txp *)(txwi + MT_TXD_SIZE);
-	memset(txp, 0, sizeof(struct mt76_connac_hw_txp));
-	mt76_connac_write_hw_txp(mdev, tx_info, txp, id);
-
-	tx_info->skb = DMA_DUMMY_DATA;
-
-	return 0;
-}
-
-void mt7921_tx_token_put(struct mt7921_dev *dev)
-{
-	struct mt76_txwi_cache *txwi;
-	int id;
-
-	spin_lock_bh(&dev->mt76.token_lock);
-	idr_for_each_entry(&dev->mt76.token, txwi, id) {
-		mt7921_txwi_free(dev, txwi, NULL, false, NULL);
-		dev->mt76.token_count--;
-	}
-	spin_unlock_bh(&dev->mt76.token_lock);
-	idr_destroy(&dev->mt76.token);
-}
-
-int mt7921e_mac_reset(struct mt7921_dev *dev)
-{
-	int i, err;
-
-	mt7921e_mcu_drv_pmctrl(dev);
-
-	mt76_connac_free_pending_tx_skbs(&dev->pm, NULL);
-
-	mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0);
-	mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0x0);
-
-	set_bit(MT76_RESET, &dev->mphy.state);
-	set_bit(MT76_MCU_RESET, &dev->mphy.state);
-	wake_up(&dev->mt76.mcu.wait);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-
-	mt76_txq_schedule_all(&dev->mphy);
-
-	mt76_worker_disable(&dev->mt76.tx_worker);
-	napi_disable(&dev->mt76.napi[MT_RXQ_MAIN]);
-	napi_disable(&dev->mt76.napi[MT_RXQ_MCU]);
-	napi_disable(&dev->mt76.napi[MT_RXQ_MCU_WA]);
-	napi_disable(&dev->mt76.tx_napi);
-
-	mt7921_tx_token_put(dev);
-	idr_init(&dev->mt76.token);
-
-	mt7921_wpdma_reset(dev, true);
-
-	local_bh_disable();
-	mt76_for_each_q_rx(&dev->mt76, i) {
-		napi_enable(&dev->mt76.napi[i]);
-		napi_schedule(&dev->mt76.napi[i]);
-	}
-	local_bh_enable();
-
-	dev->fw_assert = false;
-	clear_bit(MT76_MCU_RESET, &dev->mphy.state);
-
-	mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA,
-		MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL |
-		MT_INT_MCU_CMD);
-	mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
-
-	err = mt7921e_driver_own(dev);
-	if (err)
-		return err;
-
-	err = mt7921_run_firmware(dev);
-	if (err)
-		goto out;
-
-	err = mt7921_mcu_set_eeprom(dev);
-	if (err)
-		goto out;
-
-	err = mt7921_mac_init(dev);
-	if (err)
-		goto out;
-
-	err = __mt7921_start(&dev->phy);
-out:
-	clear_bit(MT76_RESET, &dev->mphy.state);
-
-	local_bh_disable();
-	napi_enable(&dev->mt76.tx_napi);
-	napi_schedule(&dev->mt76.tx_napi);
-	local_bh_enable();
-
-	mt76_worker_enable(&dev->mt76.tx_worker);
-
-	return err;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/pci_mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/pci_mcu.c
deleted file mode 100644
index 86340d3..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/pci_mcu.c
+++ /dev/null
@@ -1,129 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2021 MediaTek Inc. */
-
-#include "mt7921.h"
-#include "mcu.h"
-
-int mt7921e_driver_own(struct mt7921_dev *dev)
-{
-	u32 reg = mt7921_reg_map_l1(dev, MT_TOP_LPCR_HOST_BAND0);
-
-	mt76_wr(dev, reg, MT_TOP_LPCR_HOST_DRV_OWN);
-	if (!mt76_poll_msec(dev, reg, MT_TOP_LPCR_HOST_FW_OWN,
-			    0, 500)) {
-		dev_err(dev->mt76.dev, "Timeout for driver own\n");
-		return -EIO;
-	}
-
-	return 0;
-}
-
-static int
-mt7921_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
-			int cmd, int *seq)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	enum mt76_mcuq_id txq = MT_MCUQ_WM;
-	int ret;
-
-	ret = mt76_connac2_mcu_fill_message(mdev, skb, cmd, seq);
-	if (ret)
-		return ret;
-
-	mdev->mcu.timeout = 3 * HZ;
-
-	if (cmd == MCU_CMD(FW_SCATTER))
-		txq = MT_MCUQ_FWDL;
-
-	return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[txq], skb, 0);
-}
-
-int mt7921e_mcu_init(struct mt7921_dev *dev)
-{
-	static const struct mt76_mcu_ops mt7921_mcu_ops = {
-		.headroom = sizeof(struct mt76_connac2_mcu_txd),
-		.mcu_skb_send_msg = mt7921_mcu_send_message,
-		.mcu_parse_response = mt7921_mcu_parse_response,
-		.mcu_restart = mt76_connac_mcu_restart,
-	};
-	int err;
-
-	dev->mt76.mcu_ops = &mt7921_mcu_ops;
-
-	err = mt7921e_driver_own(dev);
-	if (err)
-		return err;
-
-	mt76_rmw_field(dev, MT_PCIE_MAC_PM, MT_PCIE_MAC_PM_L0S_DIS, 1);
-
-	err = mt7921_run_firmware(dev);
-
-	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_FWDL], false);
-
-	return err;
-}
-
-int __mt7921e_mcu_drv_pmctrl(struct mt7921_dev *dev)
-{
-	int i, err = 0;
-
-	for (i = 0; i < MT7921_DRV_OWN_RETRY_COUNT; i++) {
-		mt76_wr(dev, MT_CONN_ON_LPCTL, PCIE_LPCR_HOST_CLR_OWN);
-		if (mt76_poll_msec(dev, MT_CONN_ON_LPCTL,
-				   PCIE_LPCR_HOST_OWN_SYNC, 0, 50))
-			break;
-	}
-
-	if (i == MT7921_DRV_OWN_RETRY_COUNT) {
-		dev_err(dev->mt76.dev, "driver own failed\n");
-		err = -EIO;
-	}
-
-	return err;
-}
-
-int mt7921e_mcu_drv_pmctrl(struct mt7921_dev *dev)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_pm *pm = &dev->pm;
-	int err;
-
-	err = __mt7921e_mcu_drv_pmctrl(dev);
-	if (err < 0)
-		goto out;
-
-	mt7921_wpdma_reinit_cond(dev);
-	clear_bit(MT76_STATE_PM, &mphy->state);
-
-	pm->stats.last_wake_event = jiffies;
-	pm->stats.doze_time += pm->stats.last_wake_event -
-			       pm->stats.last_doze_event;
-out:
-	return err;
-}
-
-int mt7921e_mcu_fw_pmctrl(struct mt7921_dev *dev)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_pm *pm = &dev->pm;
-	int i;
-
-	for (i = 0; i < MT7921_DRV_OWN_RETRY_COUNT; i++) {
-		mt76_wr(dev, MT_CONN_ON_LPCTL, PCIE_LPCR_HOST_SET_OWN);
-		if (mt76_poll_msec(dev, MT_CONN_ON_LPCTL,
-				   PCIE_LPCR_HOST_OWN_SYNC, 4, 50))
-			break;
-	}
-
-	if (i == MT7921_DRV_OWN_RETRY_COUNT) {
-		dev_err(dev->mt76.dev, "firmware own failed\n");
-		clear_bit(MT76_STATE_PM, &mphy->state);
-		return -EIO;
-	}
-
-	pm->stats.last_doze_event = jiffies;
-	pm->stats.awake_time += pm->stats.last_doze_event -
-				pm->stats.last_wake_event;
-
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/regs.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/regs.h
deleted file mode 100644
index c65582a..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/regs.h
+++ /dev/null
@@ -1,526 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __MT7921_REGS_H
-#define __MT7921_REGS_H
-
-/* MCU WFDMA1 */
-#define MT_MCU_WFDMA1_BASE		0x3000
-#define MT_MCU_WFDMA1(ofs)		(MT_MCU_WFDMA1_BASE + (ofs))
-
-#define MT_MCU_INT_EVENT		MT_MCU_WFDMA1(0x108)
-#define MT_MCU_INT_EVENT_DMA_STOPPED	BIT(0)
-#define MT_MCU_INT_EVENT_DMA_INIT	BIT(1)
-#define MT_MCU_INT_EVENT_SER_TRIGGER	BIT(2)
-#define MT_MCU_INT_EVENT_RESET_DONE	BIT(3)
-
-#define MT_PLE_BASE			0x820c0000
-#define MT_PLE(ofs)			(MT_PLE_BASE + (ofs))
-
-#define MT_PLE_FL_Q0_CTRL		MT_PLE(0x3e0)
-#define MT_PLE_FL_Q1_CTRL		MT_PLE(0x3e4)
-#define MT_PLE_FL_Q2_CTRL		MT_PLE(0x3e8)
-#define MT_PLE_FL_Q3_CTRL		MT_PLE(0x3ec)
-
-#define MT_PLE_AC_QEMPTY(_n)		MT_PLE(0x500 + 0x40 * (_n))
-#define MT_PLE_AMSDU_PACK_MSDU_CNT(n)	MT_PLE(0x10e0 + ((n) << 2))
-
-#define MT_MDP_BASE			0x820cd000
-#define MT_MDP(ofs)			(MT_MDP_BASE + (ofs))
-
-#define MT_MDP_DCR0			MT_MDP(0x000)
-#define MT_MDP_DCR0_DAMSDU_EN		BIT(15)
-#define MT_MDP_DCR0_RX_HDR_TRANS_EN	BIT(19)
-
-#define MT_MDP_DCR1			MT_MDP(0x004)
-#define MT_MDP_DCR1_MAX_RX_LEN		GENMASK(15, 3)
-
-#define MT_MDP_BNRCFR0(_band)		MT_MDP(0x070 + ((_band) << 8))
-#define MT_MDP_RCFR0_MCU_RX_MGMT	GENMASK(5, 4)
-#define MT_MDP_RCFR0_MCU_RX_CTL_NON_BAR	GENMASK(7, 6)
-#define MT_MDP_RCFR0_MCU_RX_CTL_BAR	GENMASK(9, 8)
-
-#define MT_MDP_BNRCFR1(_band)		MT_MDP(0x074 + ((_band) << 8))
-#define MT_MDP_RCFR1_MCU_RX_BYPASS	GENMASK(23, 22)
-#define MT_MDP_RCFR1_RX_DROPPED_UCAST	GENMASK(28, 27)
-#define MT_MDP_RCFR1_RX_DROPPED_MCAST	GENMASK(30, 29)
-#define MT_MDP_TO_HIF			0
-#define MT_MDP_TO_WM			1
-
-/* TMAC: band 0(0x21000), band 1(0xa1000) */
-#define MT_WF_TMAC_BASE(_band)		((_band) ? 0x820f4000 : 0x820e4000)
-#define MT_WF_TMAC(_band, ofs)		(MT_WF_TMAC_BASE(_band) + (ofs))
-
-#define MT_TMAC_TCR0(_band)		MT_WF_TMAC(_band, 0)
-#define MT_TMAC_TCR0_TBTT_STOP_CTRL	BIT(25)
-
-#define MT_TMAC_CDTR(_band)		MT_WF_TMAC(_band, 0x090)
-#define MT_TMAC_ODTR(_band)		MT_WF_TMAC(_band, 0x094)
-#define MT_TIMEOUT_VAL_PLCP		GENMASK(15, 0)
-#define MT_TIMEOUT_VAL_CCA		GENMASK(31, 16)
-
-#define MT_TMAC_ICR0(_band)		MT_WF_TMAC(_band, 0x0a4)
-#define MT_IFS_EIFS			GENMASK(8, 0)
-#define MT_IFS_RIFS			GENMASK(14, 10)
-#define MT_IFS_SIFS			GENMASK(22, 16)
-#define MT_IFS_SLOT			GENMASK(30, 24)
-
-#define MT_TMAC_CTCR0(_band)			MT_WF_TMAC(_band, 0x0f4)
-#define MT_TMAC_CTCR0_INS_DDLMT_REFTIME		GENMASK(5, 0)
-#define MT_TMAC_CTCR0_INS_DDLMT_EN		BIT(17)
-#define MT_TMAC_CTCR0_INS_DDLMT_VHT_SMPDU_EN	BIT(18)
-
-#define MT_TMAC_TRCR0(_band)		MT_WF_TMAC(_band, 0x09c)
-#define MT_TMAC_TFCR0(_band)		MT_WF_TMAC(_band, 0x1e0)
-
-#define MT_WF_DMA_BASE(_band)		((_band) ? 0x820f7000 : 0x820e7000)
-#define MT_WF_DMA(_band, ofs)		(MT_WF_DMA_BASE(_band) + (ofs))
-
-#define MT_DMA_DCR0(_band)		MT_WF_DMA(_band, 0x000)
-#define MT_DMA_DCR0_MAX_RX_LEN		GENMASK(15, 3)
-#define MT_DMA_DCR0_RXD_G5_EN		BIT(23)
-
-/* LPON: band 0(0x24200), band 1(0xa4200) */
-#define MT_WF_LPON_BASE(_band)		((_band) ? 0x820fb000 : 0x820eb000)
-#define MT_WF_LPON(_band, ofs)		(MT_WF_LPON_BASE(_band) + (ofs))
-
-#define MT_LPON_UTTR0(_band)		MT_WF_LPON(_band, 0x080)
-#define MT_LPON_UTTR1(_band)		MT_WF_LPON(_band, 0x084)
-
-#define MT_LPON_TCR(_band, n)		MT_WF_LPON(_band, 0x0a8 + (n) * 4)
-#define MT_LPON_TCR_SW_MODE		GENMASK(1, 0)
-#define MT_LPON_TCR_SW_WRITE		BIT(0)
-
-/* ETBF: band 0(0x24000), band 1(0xa4000) */
-#define MT_WF_ETBF_BASE(_band)		((_band) ? 0x820fa000 : 0x820ea000)
-#define MT_WF_ETBF(_band, ofs)		(MT_WF_ETBF_BASE(_band) + (ofs))
-
-#define MT_ETBF_TX_APP_CNT(_band)	MT_WF_ETBF(_band, 0x150)
-#define MT_ETBF_TX_IBF_CNT		GENMASK(31, 16)
-#define MT_ETBF_TX_EBF_CNT		GENMASK(15, 0)
-
-#define MT_ETBF_RX_FB_CNT(_band)	MT_WF_ETBF(_band, 0x158)
-#define MT_ETBF_RX_FB_ALL		GENMASK(31, 24)
-#define MT_ETBF_RX_FB_HE		GENMASK(23, 16)
-#define MT_ETBF_RX_FB_VHT		GENMASK(15, 8)
-#define MT_ETBF_RX_FB_HT		GENMASK(7, 0)
-
-/* MIB: band 0(0x24800), band 1(0xa4800) */
-#define MT_WF_MIB_BASE(_band)		((_band) ? 0x820fd000 : 0x820ed000)
-#define MT_WF_MIB(_band, ofs)		(MT_WF_MIB_BASE(_band) + (ofs))
-
-#define MT_MIB_SCR1(_band)		MT_WF_MIB(_band, 0x004)
-#define MT_MIB_TXDUR_EN			BIT(8)
-#define MT_MIB_RXDUR_EN			BIT(9)
-
-#define MT_MIB_SDR3(_band)		MT_WF_MIB(_band, 0x698)
-#define MT_MIB_SDR3_FCS_ERR_MASK	GENMASK(31, 16)
-
-#define MT_MIB_SDR5(_band)		MT_WF_MIB(_band, 0x780)
-
-#define MT_MIB_SDR9(_band)		MT_WF_MIB(_band, 0x02c)
-#define MT_MIB_SDR9_BUSY_MASK		GENMASK(23, 0)
-
-#define MT_MIB_SDR12(_band)		MT_WF_MIB(_band, 0x558)
-#define MT_MIB_SDR14(_band)		MT_WF_MIB(_band, 0x564)
-#define MT_MIB_SDR15(_band)		MT_WF_MIB(_band, 0x568)
-
-#define MT_MIB_SDR16(_band)		MT_WF_MIB(_band, 0x048)
-#define MT_MIB_SDR16_BUSY_MASK		GENMASK(23, 0)
-
-#define MT_MIB_SDR22(_band)		MT_WF_MIB(_band, 0x770)
-#define MT_MIB_SDR23(_band)		MT_WF_MIB(_band, 0x774)
-#define MT_MIB_SDR31(_band)		MT_WF_MIB(_band, 0x55c)
-
-#define MT_MIB_SDR32(_band)		MT_WF_MIB(_band, 0x7a8)
-#define MT_MIB_SDR9_IBF_CNT_MASK	GENMASK(31, 16)
-#define MT_MIB_SDR9_EBF_CNT_MASK	GENMASK(15, 0)
-
-#define MT_MIB_SDR34(_band)		MT_WF_MIB(_band, 0x090)
-#define MT_MIB_MU_BF_TX_CNT		GENMASK(15, 0)
-
-#define MT_MIB_SDR36(_band)		MT_WF_MIB(_band, 0x054)
-#define MT_MIB_SDR36_TXTIME_MASK	GENMASK(23, 0)
-#define MT_MIB_SDR37(_band)		MT_WF_MIB(_band, 0x058)
-#define MT_MIB_SDR37_RXTIME_MASK	GENMASK(23, 0)
-
-#define MT_MIB_DR8(_band)		MT_WF_MIB(_band, 0x0c0)
-#define MT_MIB_DR9(_band)		MT_WF_MIB(_band, 0x0c4)
-#define MT_MIB_DR11(_band)		MT_WF_MIB(_band, 0x0cc)
-
-#define MT_MIB_MB_SDR0(_band, n)	MT_WF_MIB(_band, 0x100 + ((n) << 4))
-#define MT_MIB_RTS_RETRIES_COUNT_MASK	GENMASK(31, 16)
-#define MT_MIB_RTS_COUNT_MASK		GENMASK(15, 0)
-
-#define MT_MIB_MB_BSDR0(_band)		MT_WF_MIB(_band, 0x688)
-#define MT_MIB_RTS_COUNT_MASK		GENMASK(15, 0)
-#define MT_MIB_MB_BSDR1(_band)		MT_WF_MIB(_band, 0x690)
-#define MT_MIB_RTS_FAIL_COUNT_MASK	GENMASK(15, 0)
-#define MT_MIB_MB_BSDR2(_band)		MT_WF_MIB(_band, 0x518)
-#define MT_MIB_BA_FAIL_COUNT_MASK	GENMASK(15, 0)
-#define MT_MIB_MB_BSDR3(_band)		MT_WF_MIB(_band, 0x520)
-#define MT_MIB_ACK_FAIL_COUNT_MASK	GENMASK(15, 0)
-
-#define MT_MIB_MB_SDR2(_band, n)	MT_WF_MIB(_band, 0x108 + ((n) << 4))
-#define MT_MIB_FRAME_RETRIES_COUNT_MASK	GENMASK(15, 0)
-
-#define MT_TX_AGG_CNT(_band, n)		MT_WF_MIB(_band, 0x7dc + ((n) << 2))
-#define MT_TX_AGG_CNT2(_band, n)	MT_WF_MIB(_band, 0x7ec + ((n) << 2))
-#define MT_MIB_ARNG(_band, n)		MT_WF_MIB(_band, 0x0b0 + ((n) << 2))
-#define MT_MIB_ARNCR_RANGE(val, n)	(((val) >> ((n) << 3)) & GENMASK(7, 0))
-
-#define MT_WTBLON_TOP_BASE		0x820d4000
-#define MT_WTBLON_TOP(ofs)		(MT_WTBLON_TOP_BASE + (ofs))
-#define MT_WTBLON_TOP_WDUCR		MT_WTBLON_TOP(0x200)
-#define MT_WTBLON_TOP_WDUCR_GROUP	GENMASK(2, 0)
-
-#define MT_WTBL_UPDATE			MT_WTBLON_TOP(0x230)
-#define MT_WTBL_UPDATE_WLAN_IDX		GENMASK(9, 0)
-#define MT_WTBL_UPDATE_ADM_COUNT_CLEAR	BIT(12)
-#define MT_WTBL_UPDATE_BUSY		BIT(31)
-
-#define MT_WTBL_BASE			0x820d8000
-#define MT_WTBL_LMAC_ID			GENMASK(14, 8)
-#define MT_WTBL_LMAC_DW			GENMASK(7, 2)
-#define MT_WTBL_LMAC_OFFS(_id, _dw)	(MT_WTBL_BASE | \
-					FIELD_PREP(MT_WTBL_LMAC_ID, _id) | \
-					FIELD_PREP(MT_WTBL_LMAC_DW, _dw))
-
-/* AGG: band 0(0x20800), band 1(0xa0800) */
-#define MT_WF_AGG_BASE(_band)		((_band) ? 0x820f2000 : 0x820e2000)
-#define MT_WF_AGG(_band, ofs)		(MT_WF_AGG_BASE(_band) + (ofs))
-
-#define MT_AGG_AWSCR0(_band, _n)	MT_WF_AGG(_band, 0x05c + (_n) * 4)
-#define MT_AGG_PCR0(_band, _n)		MT_WF_AGG(_band, 0x06c + (_n) * 4)
-#define MT_AGG_PCR0_MM_PROT		BIT(0)
-#define MT_AGG_PCR0_GF_PROT		BIT(1)
-#define MT_AGG_PCR0_BW20_PROT		BIT(2)
-#define MT_AGG_PCR0_BW40_PROT		BIT(4)
-#define MT_AGG_PCR0_BW80_PROT		BIT(6)
-#define MT_AGG_PCR0_ERP_PROT		GENMASK(12, 8)
-#define MT_AGG_PCR0_VHT_PROT		BIT(13)
-#define MT_AGG_PCR0_PTA_WIN_DIS		BIT(15)
-
-#define MT_AGG_PCR1_RTS0_NUM_THRES	GENMASK(31, 23)
-#define MT_AGG_PCR1_RTS0_LEN_THRES	GENMASK(19, 0)
-
-#define MT_AGG_ACR0(_band)		MT_WF_AGG(_band, 0x084)
-#define MT_AGG_ACR_CFEND_RATE		GENMASK(13, 0)
-#define MT_AGG_ACR_BAR_RATE		GENMASK(29, 16)
-
-#define MT_AGG_MRCR(_band)		MT_WF_AGG(_band, 0x098)
-#define MT_AGG_MRCR_BAR_CNT_LIMIT	GENMASK(15, 12)
-#define MT_AGG_MRCR_LAST_RTS_CTS_RN	BIT(6)
-#define MT_AGG_MRCR_RTS_FAIL_LIMIT	GENMASK(11, 7)
-#define MT_AGG_MRCR_TXCMD_RTS_FAIL_LIMIT	GENMASK(28, 24)
-
-#define MT_AGG_ATCR1(_band)		MT_WF_AGG(_band, 0x0f0)
-#define MT_AGG_ATCR3(_band)		MT_WF_AGG(_band, 0x0f4)
-
-/* ARB: band 0(0x20c00), band 1(0xa0c00) */
-#define MT_WF_ARB_BASE(_band)		((_band) ? 0x820f3000 : 0x820e3000)
-#define MT_WF_ARB(_band, ofs)		(MT_WF_ARB_BASE(_band) + (ofs))
-
-#define MT_ARB_SCR(_band)		MT_WF_ARB(_band, 0x080)
-#define MT_ARB_SCR_TX_DISABLE		BIT(8)
-#define MT_ARB_SCR_RX_DISABLE		BIT(9)
-
-#define MT_ARB_DRNGR0(_band, _n)	MT_WF_ARB(_band, 0x194 + (_n) * 4)
-
-/* RMAC: band 0(0x21400), band 1(0xa1400) */
-#define MT_WF_RMAC_BASE(_band)		((_band) ? 0x820f5000 : 0x820e5000)
-#define MT_WF_RMAC(_band, ofs)		(MT_WF_RMAC_BASE(_band) + (ofs))
-
-#define MT_WF_RFCR(_band)		MT_WF_RMAC(_band, 0x000)
-#define MT_WF_RFCR_DROP_STBC_MULTI	BIT(0)
-#define MT_WF_RFCR_DROP_FCSFAIL		BIT(1)
-#define MT_WF_RFCR_DROP_VERSION		BIT(3)
-#define MT_WF_RFCR_DROP_PROBEREQ	BIT(4)
-#define MT_WF_RFCR_DROP_MCAST		BIT(5)
-#define MT_WF_RFCR_DROP_BCAST		BIT(6)
-#define MT_WF_RFCR_DROP_MCAST_FILTERED	BIT(7)
-#define MT_WF_RFCR_DROP_A3_MAC		BIT(8)
-#define MT_WF_RFCR_DROP_A3_BSSID	BIT(9)
-#define MT_WF_RFCR_DROP_A2_BSSID	BIT(10)
-#define MT_WF_RFCR_DROP_OTHER_BEACON	BIT(11)
-#define MT_WF_RFCR_DROP_FRAME_REPORT	BIT(12)
-#define MT_WF_RFCR_DROP_CTL_RSV		BIT(13)
-#define MT_WF_RFCR_DROP_CTS		BIT(14)
-#define MT_WF_RFCR_DROP_RTS		BIT(15)
-#define MT_WF_RFCR_DROP_DUPLICATE	BIT(16)
-#define MT_WF_RFCR_DROP_OTHER_BSS	BIT(17)
-#define MT_WF_RFCR_DROP_OTHER_UC	BIT(18)
-#define MT_WF_RFCR_DROP_OTHER_TIM	BIT(19)
-#define MT_WF_RFCR_DROP_NDPA		BIT(20)
-#define MT_WF_RFCR_DROP_UNWANTED_CTL	BIT(21)
-
-#define MT_WF_RFCR1(_band)		MT_WF_RMAC(_band, 0x004)
-#define MT_WF_RFCR1_DROP_ACK		BIT(4)
-#define MT_WF_RFCR1_DROP_BF_POLL	BIT(5)
-#define MT_WF_RFCR1_DROP_BA		BIT(6)
-#define MT_WF_RFCR1_DROP_CFEND		BIT(7)
-#define MT_WF_RFCR1_DROP_CFACK		BIT(8)
-
-#define MT_WF_RMAC_MIB_TIME0(_band)	MT_WF_RMAC(_band, 0x03c4)
-#define MT_WF_RMAC_MIB_RXTIME_CLR	BIT(31)
-#define MT_WF_RMAC_MIB_RXTIME_EN	BIT(30)
-
-#define MT_WF_RMAC_MIB_AIRTIME14(_band)	MT_WF_RMAC(_band, 0x03b8)
-#define MT_MIB_OBSSTIME_MASK		GENMASK(23, 0)
-#define MT_WF_RMAC_MIB_AIRTIME0(_band)	MT_WF_RMAC(_band, 0x0380)
-
-/* WFDMA0 */
-#define MT_WFDMA0_BASE			0xd4000
-#define MT_WFDMA0(ofs)			(MT_WFDMA0_BASE + (ofs))
-
-#define MT_WFDMA0_RST			MT_WFDMA0(0x100)
-#define MT_WFDMA0_RST_LOGIC_RST		BIT(4)
-#define MT_WFDMA0_RST_DMASHDL_ALL_RST	BIT(5)
-
-#define MT_WFDMA0_BUSY_ENA		MT_WFDMA0(0x13c)
-#define MT_WFDMA0_BUSY_ENA_TX_FIFO0	BIT(0)
-#define MT_WFDMA0_BUSY_ENA_TX_FIFO1	BIT(1)
-#define MT_WFDMA0_BUSY_ENA_RX_FIFO	BIT(2)
-
-#define MT_MCU_CMD			MT_WFDMA0(0x1f0)
-#define MT_MCU_CMD_WAKE_RX_PCIE		BIT(0)
-#define MT_MCU_CMD_STOP_DMA_FW_RELOAD	BIT(1)
-#define MT_MCU_CMD_STOP_DMA		BIT(2)
-#define MT_MCU_CMD_RESET_DONE		BIT(3)
-#define MT_MCU_CMD_RECOVERY_DONE	BIT(4)
-#define MT_MCU_CMD_NORMAL_STATE		BIT(5)
-#define MT_MCU_CMD_ERROR_MASK		GENMASK(5, 1)
-
-#define MT_MCU2HOST_SW_INT_ENA		MT_WFDMA0(0x1f4)
-
-#define MT_WFDMA0_HOST_INT_STA		MT_WFDMA0(0x200)
-#define HOST_RX_DONE_INT_STS0		BIT(0)	/* Rx mcu */
-#define HOST_RX_DONE_INT_STS2		BIT(2)	/* Rx data */
-#define HOST_RX_DONE_INT_STS4		BIT(22)	/* Rx mcu after fw downloaded */
-#define HOST_TX_DONE_INT_STS16		BIT(26)
-#define HOST_TX_DONE_INT_STS17		BIT(27) /* MCU tx done*/
-
-#define MT_WFDMA0_HOST_INT_ENA		MT_WFDMA0(0x204)
-#define HOST_RX_DONE_INT_ENA0		BIT(0)
-#define HOST_RX_DONE_INT_ENA1		BIT(1)
-#define HOST_RX_DONE_INT_ENA2		BIT(2)
-#define HOST_RX_DONE_INT_ENA3		BIT(3)
-#define HOST_TX_DONE_INT_ENA0		BIT(4)
-#define HOST_TX_DONE_INT_ENA1		BIT(5)
-#define HOST_TX_DONE_INT_ENA2		BIT(6)
-#define HOST_TX_DONE_INT_ENA3		BIT(7)
-#define HOST_TX_DONE_INT_ENA4		BIT(8)
-#define HOST_TX_DONE_INT_ENA5		BIT(9)
-#define HOST_TX_DONE_INT_ENA6		BIT(10)
-#define HOST_TX_DONE_INT_ENA7		BIT(11)
-#define HOST_TX_DONE_INT_ENA8		BIT(12)
-#define HOST_TX_DONE_INT_ENA9		BIT(13)
-#define HOST_TX_DONE_INT_ENA10		BIT(14)
-#define HOST_TX_DONE_INT_ENA11		BIT(15)
-#define HOST_TX_DONE_INT_ENA12		BIT(16)
-#define HOST_TX_DONE_INT_ENA13		BIT(17)
-#define HOST_TX_DONE_INT_ENA14		BIT(18)
-#define HOST_RX_COHERENT_EN		BIT(20)
-#define HOST_TX_COHERENT_EN		BIT(21)
-#define HOST_RX_DONE_INT_ENA4		BIT(22)
-#define HOST_RX_DONE_INT_ENA5		BIT(23)
-#define HOST_TX_DONE_INT_ENA16		BIT(26)
-#define HOST_TX_DONE_INT_ENA17		BIT(27)
-#define MCU2HOST_SW_INT_ENA		BIT(29)
-#define HOST_TX_DONE_INT_ENA18		BIT(30)
-
-/* WFDMA interrupt */
-#define MT_INT_RX_DONE_DATA		HOST_RX_DONE_INT_ENA2
-#define MT_INT_RX_DONE_WM		HOST_RX_DONE_INT_ENA0
-#define MT_INT_RX_DONE_WM2		HOST_RX_DONE_INT_ENA4
-#define MT_INT_RX_DONE_ALL		(MT_INT_RX_DONE_DATA | \
-					 MT_INT_RX_DONE_WM | \
-					 MT_INT_RX_DONE_WM2)
-#define MT_INT_TX_DONE_MCU_WM		HOST_TX_DONE_INT_ENA17
-#define MT_INT_TX_DONE_FWDL		HOST_TX_DONE_INT_ENA16
-#define MT_INT_TX_DONE_BAND0		HOST_TX_DONE_INT_ENA0
-#define MT_INT_MCU_CMD			MCU2HOST_SW_INT_ENA
-
-#define MT_INT_TX_DONE_MCU		(MT_INT_TX_DONE_MCU_WM |	\
-					 MT_INT_TX_DONE_FWDL)
-#define MT_INT_TX_DONE_ALL		(MT_INT_TX_DONE_MCU_WM |	\
-					 MT_INT_TX_DONE_BAND0 |	\
-					GENMASK(18, 4))
-
-#define MT_WFDMA0_GLO_CFG		MT_WFDMA0(0x208)
-#define MT_WFDMA0_GLO_CFG_TX_DMA_EN	BIT(0)
-#define MT_WFDMA0_GLO_CFG_TX_DMA_BUSY	BIT(1)
-#define MT_WFDMA0_GLO_CFG_RX_DMA_EN	BIT(2)
-#define MT_WFDMA0_GLO_CFG_RX_DMA_BUSY	BIT(3)
-#define MT_WFDMA0_GLO_CFG_TX_WB_DDONE	BIT(6)
-#define MT_WFDMA0_GLO_CFG_FW_DWLD_BYPASS_DMASHDL BIT(9)
-#define MT_WFDMA0_GLO_CFG_FIFO_LITTLE_ENDIAN	BIT(12)
-#define MT_WFDMA0_GLO_CFG_CSR_DISP_BASE_PTR_CHAIN_EN BIT(15)
-#define MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2	BIT(21)
-#define MT_WFDMA0_GLO_CFG_OMIT_RX_INFO	BIT(27)
-#define MT_WFDMA0_GLO_CFG_OMIT_TX_INFO	BIT(28)
-#define MT_WFDMA0_GLO_CFG_CLK_GAT_DIS	BIT(30)
-
-#define MT_WFDMA0_RST_DTX_PTR		MT_WFDMA0(0x20c)
-#define MT_WFDMA0_GLO_CFG_EXT0		MT_WFDMA0(0x2b0)
-#define MT_WFDMA0_CSR_TX_DMASHDL_ENABLE	BIT(6)
-#define MT_WFDMA0_PRI_DLY_INT_CFG0	MT_WFDMA0(0x2f0)
-
-#define MT_RX_DATA_RING_BASE		MT_WFDMA0(0x520)
-
-#define MT_WFDMA0_TX_RING0_EXT_CTRL	MT_WFDMA0(0x600)
-#define MT_WFDMA0_TX_RING1_EXT_CTRL	MT_WFDMA0(0x604)
-#define MT_WFDMA0_TX_RING2_EXT_CTRL	MT_WFDMA0(0x608)
-#define MT_WFDMA0_TX_RING3_EXT_CTRL	MT_WFDMA0(0x60c)
-#define MT_WFDMA0_TX_RING4_EXT_CTRL	MT_WFDMA0(0x610)
-#define MT_WFDMA0_TX_RING5_EXT_CTRL	MT_WFDMA0(0x614)
-#define MT_WFDMA0_TX_RING6_EXT_CTRL	MT_WFDMA0(0x618)
-#define MT_WFDMA0_TX_RING16_EXT_CTRL	MT_WFDMA0(0x640)
-#define MT_WFDMA0_TX_RING17_EXT_CTRL	MT_WFDMA0(0x644)
-
-#define MT_WPDMA0_MAX_CNT_MASK		GENMASK(7, 0)
-#define MT_WPDMA0_BASE_PTR_MASK		GENMASK(31, 16)
-
-#define MT_WFDMA0_RX_RING0_EXT_CTRL	MT_WFDMA0(0x680)
-#define MT_WFDMA0_RX_RING1_EXT_CTRL	MT_WFDMA0(0x684)
-#define MT_WFDMA0_RX_RING2_EXT_CTRL	MT_WFDMA0(0x688)
-#define MT_WFDMA0_RX_RING3_EXT_CTRL	MT_WFDMA0(0x68c)
-#define MT_WFDMA0_RX_RING4_EXT_CTRL	MT_WFDMA0(0x690)
-#define MT_WFDMA0_RX_RING5_EXT_CTRL	MT_WFDMA0(0x694)
-
-#define MT_TX_RING_BASE			MT_WFDMA0(0x300)
-#define MT_RX_EVENT_RING_BASE		MT_WFDMA0(0x500)
-
-/* WFDMA CSR */
-#define MT_WFDMA_EXT_CSR_BASE          0xd7000
-#define MT_WFDMA_EXT_CSR(ofs)          (MT_WFDMA_EXT_CSR_BASE + (ofs))
-#define MT_WFDMA_EXT_CSR_HIF_MISC	MT_WFDMA_EXT_CSR(0x44)
-#define MT_WFDMA_EXT_CSR_HIF_MISC_BUSY	BIT(0)
-
-#define MT_INFRA_CFG_BASE		0xfe000
-#define MT_INFRA(ofs)			(MT_INFRA_CFG_BASE + (ofs))
-
-#define MT_HIF_REMAP_L1			MT_INFRA(0x24c)
-#define MT_HIF_REMAP_L1_MASK		GENMASK(15, 0)
-#define MT_HIF_REMAP_L1_OFFSET		GENMASK(15, 0)
-#define MT_HIF_REMAP_L1_BASE		GENMASK(31, 16)
-#define MT_HIF_REMAP_BASE_L1		0x40000
-
-#define MT_SWDEF_BASE			0x41f200
-#define MT_SWDEF(ofs)			(MT_SWDEF_BASE + (ofs))
-#define MT_SWDEF_MODE			MT_SWDEF(0x3c)
-#define MT_SWDEF_NORMAL_MODE		0
-#define MT_SWDEF_ICAP_MODE		1
-#define MT_SWDEF_SPECTRUM_MODE		2
-
-#define MT_TOP_BASE			0x18060000
-#define MT_TOP(ofs)			(MT_TOP_BASE + (ofs))
-
-#define MT_TOP_LPCR_HOST_BAND0		MT_TOP(0x10)
-#define MT_TOP_LPCR_HOST_FW_OWN		BIT(0)
-#define MT_TOP_LPCR_HOST_DRV_OWN	BIT(1)
-
-#define MT_TOP_MISC			MT_TOP(0xf0)
-#define MT_TOP_MISC_FW_STATE		GENMASK(2, 0)
-
-#define MT_MCU_WPDMA0_BASE		0x54000000
-#define MT_MCU_WPDMA0(ofs)		(MT_MCU_WPDMA0_BASE + (ofs))
-
-#define MT_WFDMA_DUMMY_CR		MT_MCU_WPDMA0(0x120)
-#define MT_WFDMA_NEED_REINIT		BIT(1)
-
-#define MT_CBTOP_RGU(ofs)		(0x70002000 + (ofs))
-#define MT_CBTOP_RGU_WF_SUBSYS_RST	MT_CBTOP_RGU(0x600)
-#define MT_CBTOP_RGU_WF_SUBSYS_RST_WF_WHOLE_PATH BIT(0)
-
-#define MT_HW_BOUND			0x70010020
-#define MT_HW_CHIPID			0x70010200
-#define MT_HW_REV			0x70010204
-
-#define MT_PCIE_MAC_BASE		0x10000
-#define MT_PCIE_MAC(ofs)		(MT_PCIE_MAC_BASE + (ofs))
-#define MT_PCIE_MAC_INT_ENABLE		MT_PCIE_MAC(0x188)
-#define MT_PCIE_MAC_PM			MT_PCIE_MAC(0x194)
-#define MT_PCIE_MAC_PM_L0S_DIS		BIT(8)
-
-#define MT_DMA_SHDL(ofs)		(0x7c026000 + (ofs))
-#define MT_DMASHDL_SW_CONTROL		MT_DMA_SHDL(0x004)
-#define MT_DMASHDL_DMASHDL_BYPASS	BIT(28)
-#define MT_DMASHDL_OPTIONAL		MT_DMA_SHDL(0x008)
-#define MT_DMASHDL_PAGE			MT_DMA_SHDL(0x00c)
-#define MT_DMASHDL_GROUP_SEQ_ORDER	BIT(16)
-#define MT_DMASHDL_REFILL		MT_DMA_SHDL(0x010)
-#define MT_DMASHDL_REFILL_MASK		GENMASK(31, 16)
-#define MT_DMASHDL_PKT_MAX_SIZE		MT_DMA_SHDL(0x01c)
-#define MT_DMASHDL_PKT_MAX_SIZE_PLE	GENMASK(11, 0)
-#define MT_DMASHDL_PKT_MAX_SIZE_PSE	GENMASK(27, 16)
-
-#define MT_DMASHDL_GROUP_QUOTA(_n)	MT_DMA_SHDL(0x020 + ((_n) << 2))
-#define MT_DMASHDL_GROUP_QUOTA_MIN	GENMASK(11, 0)
-#define MT_DMASHDL_GROUP_QUOTA_MAX	GENMASK(27, 16)
-
-#define MT_DMASHDL_Q_MAP(_n)		MT_DMA_SHDL(0x060 + ((_n) << 2))
-#define MT_DMASHDL_Q_MAP_MASK		GENMASK(3, 0)
-#define MT_DMASHDL_Q_MAP_SHIFT(_n)	(4 * ((_n) % 8))
-
-#define MT_DMASHDL_SCHED_SET(_n)	MT_DMA_SHDL(0x070 + ((_n) << 2))
-
-#define MT_WFDMA_HOST_CONFIG		0x7c027030
-#define MT_WFDMA_HOST_CONFIG_USB_RXEVT_EP4_EN	BIT(6)
-
-#define MT_UMAC(ofs)			(0x74000000 + (ofs))
-#define MT_UDMA_TX_QSEL			MT_UMAC(0x008)
-#define MT_FW_DL_EN			BIT(3)
-
-#define MT_UDMA_WLCFG_1			MT_UMAC(0x00c)
-#define MT_WL_RX_AGG_PKT_LMT		GENMASK(7, 0)
-#define MT_WL_TX_TMOUT_LMT		GENMASK(27, 8)
-
-#define MT_UDMA_WLCFG_0			MT_UMAC(0x18)
-#define MT_WL_RX_AGG_TO			GENMASK(7, 0)
-#define MT_WL_RX_AGG_LMT		GENMASK(15, 8)
-#define MT_WL_TX_TMOUT_FUNC_EN		BIT(16)
-#define MT_WL_TX_DPH_CHK_EN		BIT(17)
-#define MT_WL_RX_MPSZ_PAD0		BIT(18)
-#define MT_WL_RX_FLUSH			BIT(19)
-#define MT_TICK_1US_EN			BIT(20)
-#define MT_WL_RX_AGG_EN			BIT(21)
-#define MT_WL_RX_EN			BIT(22)
-#define MT_WL_TX_EN			BIT(23)
-#define MT_WL_RX_BUSY			BIT(30)
-#define MT_WL_TX_BUSY			BIT(31)
-
-#define MT_UDMA_CONN_INFRA_STATUS	MT_UMAC(0xa20)
-#define MT_UDMA_CONN_WFSYS_INIT_DONE	BIT(22)
-#define MT_UDMA_CONN_INFRA_STATUS_SEL	MT_UMAC(0xa24)
-
-#define MT_SSUSB_EPCTL_CSR(ofs)		(0x74011800 + (ofs))
-#define MT_SSUSB_EPCTL_CSR_EP_RST_OPT	MT_SSUSB_EPCTL_CSR(0x090)
-
-#define MT_UWFDMA0(ofs)			(0x7c024000 + (ofs))
-#define MT_UWFDMA0_GLO_CFG		MT_UWFDMA0(0x208)
-#define MT_UWFDMA0_GLO_CFG_EXT0		MT_UWFDMA0(0x2b0)
-#define MT_UWFDMA0_TX_RING_EXT_CTRL(_n)	MT_UWFDMA0(0x600 + ((_n) << 2))
-
-#define MT_CONN_STATUS			0x7c053c10
-#define MT_WIFI_PATCH_DL_STATE		BIT(0)
-
-#define MT_CONN_ON_LPCTL		0x7c060010
-#define PCIE_LPCR_HOST_OWN_SYNC		BIT(2)
-#define PCIE_LPCR_HOST_CLR_OWN		BIT(1)
-#define PCIE_LPCR_HOST_SET_OWN		BIT(0)
-
-#define MT_WFSYS_SW_RST_B		0x18000140
-#define WFSYS_SW_RST_B			BIT(0)
-#define WFSYS_SW_INIT_DONE		BIT(4)
-
-#define MT_CONN_ON_MISC			0x7c0600f0
-#define MT_TOP_MISC2_FW_PWR_ON		BIT(0)
-#define MT_TOP_MISC2_FW_N9_RDY		GENMASK(1, 0)
-
-#define MT_WF_SW_DEF_CR(ofs)		(0x401a00 + (ofs))
-#define MT_WF_SW_DEF_CR_USB_MCU_EVENT	MT_WF_SW_DEF_CR(0x028)
-#define MT_WF_SW_SER_TRIGGER_SUSPEND	BIT(6)
-#define MT_WF_SW_SER_DONE_SUSPEND	BIT(7)
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/sdio.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/sdio.c
deleted file mode 100644
index 031d99d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/sdio.c
+++ /dev/null
@@ -1,329 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2021 MediaTek Inc.
- *
- */
-
-#include <linux/kernel.h>
-#include <linux/iopoll.h>
-#include <linux/module.h>
-
-#include <linux/mmc/host.h>
-#include <linux/mmc/sdio_ids.h>
-#include <linux/mmc/sdio_func.h>
-
-#include "mt7921.h"
-#include "../sdio.h"
-#include "mac.h"
-#include "mcu.h"
-
-static const struct sdio_device_id mt7921s_table[] = {
-	{ SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, 0x7901) },
-	{ }	/* Terminating entry */
-};
-
-static void mt7921s_txrx_worker(struct mt76_worker *w)
-{
-	struct mt76_sdio *sdio = container_of(w, struct mt76_sdio,
-					      txrx_worker);
-	struct mt76_dev *mdev = container_of(sdio, struct mt76_dev, sdio);
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-
-	if (!mt76_connac_pm_ref(&dev->mphy, &dev->pm)) {
-		queue_work(mdev->wq, &dev->pm.wake_work);
-		return;
-	}
-
-	mt76s_txrx_worker(sdio);
-	mt76_connac_pm_unref(&dev->mphy, &dev->pm);
-}
-
-static void mt7921s_unregister_device(struct mt7921_dev *dev)
-{
-	struct mt76_connac_pm *pm = &dev->pm;
-
-	cancel_work_sync(&dev->init_work);
-	mt76_unregister_device(&dev->mt76);
-	cancel_delayed_work_sync(&pm->ps_work);
-	cancel_work_sync(&pm->wake_work);
-
-	mt76s_deinit(&dev->mt76);
-	mt7921s_wfsys_reset(dev);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-
-	mt76_free_device(&dev->mt76);
-}
-
-static int mt7921s_parse_intr(struct mt76_dev *dev, struct mt76s_intr *intr)
-{
-	struct mt76_sdio *sdio = &dev->sdio;
-	struct mt7921_sdio_intr *irq_data = sdio->intr_data;
-	int i, err;
-
-	sdio_claim_host(sdio->func);
-	err = sdio_readsb(sdio->func, irq_data, MCR_WHISR, sizeof(*irq_data));
-	sdio_release_host(sdio->func);
-
-	if (err < 0)
-		return err;
-
-	if (irq_data->rx.num[0] > 16 ||
-	    irq_data->rx.num[1] > 128)
-		return -EINVAL;
-
-	intr->isr = irq_data->isr;
-	intr->rec_mb = irq_data->rec_mb;
-	intr->tx.wtqcr = irq_data->tx.wtqcr;
-	intr->rx.num = irq_data->rx.num;
-	for (i = 0; i < 2 ; i++) {
-		if (!i)
-			intr->rx.len[0] = irq_data->rx.len0;
-		else
-			intr->rx.len[1] = irq_data->rx.len1;
-	}
-
-	return 0;
-}
-
-static int mt7921s_probe(struct sdio_func *func,
-			 const struct sdio_device_id *id)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		.txwi_size = MT_SDIO_TXD_SIZE,
-		.drv_flags = MT_DRV_AMSDU_OFFLOAD,
-		.survey_flags = SURVEY_INFO_TIME_TX |
-				SURVEY_INFO_TIME_RX |
-				SURVEY_INFO_TIME_BSS_RX,
-		.tx_prepare_skb = mt7921_usb_sdio_tx_prepare_skb,
-		.tx_complete_skb = mt7921_usb_sdio_tx_complete_skb,
-		.tx_status_data = mt7921_usb_sdio_tx_status_data,
-		.rx_skb = mt7921_queue_rx_skb,
-		.rx_check = mt7921_rx_check,
-		.sta_ps = mt7921_sta_ps,
-		.sta_add = mt7921_mac_sta_add,
-		.sta_assoc = mt7921_mac_sta_assoc,
-		.sta_remove = mt7921_mac_sta_remove,
-		.update_survey = mt7921_update_channel,
-	};
-	static const struct mt76_bus_ops mt7921s_ops = {
-		.rr = mt76s_rr,
-		.rmw = mt76s_rmw,
-		.wr = mt76s_wr,
-		.write_copy = mt76s_write_copy,
-		.read_copy = mt76s_read_copy,
-		.wr_rp = mt76s_wr_rp,
-		.rd_rp = mt76s_rd_rp,
-		.type = MT76_BUS_SDIO,
-	};
-	static const struct mt7921_hif_ops mt7921_sdio_ops = {
-		.init_reset = mt7921s_init_reset,
-		.reset = mt7921s_mac_reset,
-		.mcu_init = mt7921s_mcu_init,
-		.drv_own = mt7921s_mcu_drv_pmctrl,
-		.fw_own = mt7921s_mcu_fw_pmctrl,
-	};
-
-	struct mt7921_dev *dev;
-	struct mt76_dev *mdev;
-	int ret;
-
-	mdev = mt76_alloc_device(&func->dev, sizeof(*dev), &mt7921_ops,
-				 &drv_ops);
-	if (!mdev)
-		return -ENOMEM;
-
-	dev = container_of(mdev, struct mt7921_dev, mt76);
-	dev->hif_ops = &mt7921_sdio_ops;
-
-	sdio_set_drvdata(func, dev);
-
-	ret = mt76s_init(mdev, func, &mt7921s_ops);
-	if (ret < 0)
-		goto error;
-
-	ret = mt76s_hw_init(mdev, func, MT76_CONNAC2_SDIO);
-	if (ret)
-		goto error;
-
-	mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |
-		    (mt76_rr(dev, MT_HW_REV) & 0xff);
-	dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
-
-	mdev->sdio.parse_irq = mt7921s_parse_intr;
-	mdev->sdio.intr_data = devm_kmalloc(mdev->dev,
-					    sizeof(struct mt7921_sdio_intr),
-					    GFP_KERNEL);
-	if (!mdev->sdio.intr_data) {
-		ret = -ENOMEM;
-		goto error;
-	}
-
-	ret = mt76s_alloc_rx_queue(mdev, MT_RXQ_MAIN);
-	if (ret)
-		goto error;
-
-	ret = mt76s_alloc_rx_queue(mdev, MT_RXQ_MCU);
-	if (ret)
-		goto error;
-
-	ret = mt76s_alloc_tx(mdev);
-	if (ret)
-		goto error;
-
-	ret = mt76_worker_setup(mt76_hw(dev), &mdev->sdio.txrx_worker,
-				mt7921s_txrx_worker, "sdio-txrx");
-	if (ret)
-		goto error;
-
-	sched_set_fifo_low(mdev->sdio.txrx_worker.task);
-
-	ret = mt7921_register_device(dev);
-	if (ret)
-		goto error;
-
-	return 0;
-
-error:
-	mt76s_deinit(&dev->mt76);
-	mt76_free_device(&dev->mt76);
-
-	return ret;
-}
-
-static void mt7921s_remove(struct sdio_func *func)
-{
-	struct mt7921_dev *dev = sdio_get_drvdata(func);
-
-	mt7921s_unregister_device(dev);
-}
-
-#ifdef CONFIG_PM
-static int mt7921s_suspend(struct device *__dev)
-{
-	struct sdio_func *func = dev_to_sdio_func(__dev);
-	struct mt7921_dev *dev = sdio_get_drvdata(func);
-	struct mt76_connac_pm *pm = &dev->pm;
-	struct mt76_dev *mdev = &dev->mt76;
-	int err;
-
-	pm->suspended = true;
-	set_bit(MT76_STATE_SUSPEND, &mdev->phy.state);
-
-	flush_work(&dev->reset_work);
-	cancel_delayed_work_sync(&pm->ps_work);
-	cancel_work_sync(&pm->wake_work);
-
-	err = mt7921_mcu_drv_pmctrl(dev);
-	if (err < 0)
-		goto restore_suspend;
-
-	/* always enable deep sleep during suspend to reduce
-	 * power consumption
-	 */
-	mt76_connac_mcu_set_deep_sleep(mdev, true);
-
-	mt76_txq_schedule_all(&dev->mphy);
-	mt76_worker_disable(&mdev->tx_worker);
-	mt76_worker_disable(&mdev->sdio.status_worker);
-	cancel_work_sync(&mdev->sdio.stat_work);
-	clear_bit(MT76_READING_STATS, &dev->mphy.state);
-	mt76_tx_status_check(mdev, true);
-
-	mt76_worker_schedule(&mdev->sdio.txrx_worker);
-	wait_event_timeout(dev->mt76.sdio.wait,
-			   mt76s_txqs_empty(&dev->mt76), 5 * HZ);
-
-	/* It is supposed that SDIO bus is idle at the point */
-	err = mt76_connac_mcu_set_hif_suspend(mdev, true);
-	if (err)
-		goto restore_worker;
-
-	mt76_worker_disable(&mdev->sdio.txrx_worker);
-	mt76_worker_disable(&mdev->sdio.net_worker);
-
-	err = mt7921_mcu_fw_pmctrl(dev);
-	if (err)
-		goto restore_txrx_worker;
-
-	sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
-
-	return 0;
-
-restore_txrx_worker:
-	mt76_worker_enable(&mdev->sdio.net_worker);
-	mt76_worker_enable(&mdev->sdio.txrx_worker);
-	mt76_connac_mcu_set_hif_suspend(mdev, false);
-
-restore_worker:
-	mt76_worker_enable(&mdev->tx_worker);
-	mt76_worker_enable(&mdev->sdio.status_worker);
-
-	if (!pm->ds_enable)
-		mt76_connac_mcu_set_deep_sleep(mdev, false);
-
-restore_suspend:
-	clear_bit(MT76_STATE_SUSPEND, &mdev->phy.state);
-	pm->suspended = false;
-
-	if (err < 0)
-		mt7921_reset(&dev->mt76);
-
-	return err;
-}
-
-static int mt7921s_resume(struct device *__dev)
-{
-	struct sdio_func *func = dev_to_sdio_func(__dev);
-	struct mt7921_dev *dev = sdio_get_drvdata(func);
-	struct mt76_connac_pm *pm = &dev->pm;
-	struct mt76_dev *mdev = &dev->mt76;
-	int err;
-
-	clear_bit(MT76_STATE_SUSPEND, &mdev->phy.state);
-
-	err = mt7921_mcu_drv_pmctrl(dev);
-	if (err < 0)
-		goto failed;
-
-	mt76_worker_enable(&mdev->tx_worker);
-	mt76_worker_enable(&mdev->sdio.txrx_worker);
-	mt76_worker_enable(&mdev->sdio.status_worker);
-	mt76_worker_enable(&mdev->sdio.net_worker);
-
-	/* restore previous ds setting */
-	if (!pm->ds_enable)
-		mt76_connac_mcu_set_deep_sleep(mdev, false);
-
-	err = mt76_connac_mcu_set_hif_suspend(mdev, false);
-failed:
-	pm->suspended = false;
-
-	if (err < 0)
-		mt7921_reset(&dev->mt76);
-
-	return err;
-}
-
-static const struct dev_pm_ops mt7921s_pm_ops = {
-	.suspend = mt7921s_suspend,
-	.resume = mt7921s_resume,
-};
-#endif
-
-MODULE_DEVICE_TABLE(sdio, mt7921s_table);
-MODULE_FIRMWARE(MT7921_FIRMWARE_WM);
-MODULE_FIRMWARE(MT7921_ROM_PATCH);
-
-static struct sdio_driver mt7921s_driver = {
-	.name		= KBUILD_MODNAME,
-	.probe		= mt7921s_probe,
-	.remove		= mt7921s_remove,
-	.id_table	= mt7921s_table,
-#ifdef CONFIG_PM
-	.drv = {
-		.pm = &mt7921s_pm_ops,
-	}
-#endif
-};
-module_sdio_driver(mt7921s_driver);
-MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/sdio_mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/sdio_mac.c
deleted file mode 100644
index 1b3adb3..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/sdio_mac.c
+++ /dev/null
@@ -1,142 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2021 MediaTek Inc. */
-
-#include <linux/iopoll.h>
-#include <linux/mmc/sdio_func.h>
-#include "mt7921.h"
-#include "mac.h"
-#include "../sdio.h"
-
-static void mt7921s_enable_irq(struct mt76_dev *dev)
-{
-	struct mt76_sdio *sdio = &dev->sdio;
-
-	sdio_claim_host(sdio->func);
-	sdio_writel(sdio->func, WHLPCR_INT_EN_SET, MCR_WHLPCR, NULL);
-	sdio_release_host(sdio->func);
-}
-
-static void mt7921s_disable_irq(struct mt76_dev *dev)
-{
-	struct mt76_sdio *sdio = &dev->sdio;
-
-	sdio_claim_host(sdio->func);
-	sdio_writel(sdio->func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, NULL);
-	sdio_release_host(sdio->func);
-}
-
-static u32 mt7921s_read_whcr(struct mt76_dev *dev)
-{
-	return sdio_readl(dev->sdio.func, MCR_WHCR, NULL);
-}
-
-int mt7921s_wfsys_reset(struct mt7921_dev *dev)
-{
-	struct mt76_sdio *sdio = &dev->mt76.sdio;
-	u32 val, status;
-
-	mt7921s_mcu_drv_pmctrl(dev);
-
-	sdio_claim_host(sdio->func);
-
-	val = sdio_readl(sdio->func, MCR_WHCR, NULL);
-	val &= ~WF_WHOLE_PATH_RSTB;
-	sdio_writel(sdio->func, val, MCR_WHCR, NULL);
-
-	msleep(50);
-
-	val = sdio_readl(sdio->func, MCR_WHCR, NULL);
-	val &= ~WF_SDIO_WF_PATH_RSTB;
-	sdio_writel(sdio->func, val, MCR_WHCR, NULL);
-
-	usleep_range(1000, 2000);
-
-	val = sdio_readl(sdio->func, MCR_WHCR, NULL);
-	val |= WF_WHOLE_PATH_RSTB;
-	sdio_writel(sdio->func, val, MCR_WHCR, NULL);
-
-	readx_poll_timeout(mt7921s_read_whcr, &dev->mt76, status,
-			   status & WF_RST_DONE, 50000, 2000000);
-
-	sdio_release_host(sdio->func);
-
-	clear_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-
-	/* activate mt7921s again */
-	mt7921s_mcu_drv_pmctrl(dev);
-	mt76_clear(dev, MT_CONN_STATUS, MT_WIFI_PATCH_DL_STATE);
-	mt7921s_mcu_fw_pmctrl(dev);
-	mt7921s_mcu_drv_pmctrl(dev);
-
-	return 0;
-}
-
-int mt7921s_init_reset(struct mt7921_dev *dev)
-{
-	set_bit(MT76_MCU_RESET, &dev->mphy.state);
-
-	wake_up(&dev->mt76.mcu.wait);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-	wait_event_timeout(dev->mt76.sdio.wait,
-			   mt76s_txqs_empty(&dev->mt76), 5 * HZ);
-	mt76_worker_disable(&dev->mt76.sdio.txrx_worker);
-
-	mt7921s_disable_irq(&dev->mt76);
-	mt7921s_wfsys_reset(dev);
-
-	mt76_worker_enable(&dev->mt76.sdio.txrx_worker);
-	clear_bit(MT76_MCU_RESET, &dev->mphy.state);
-	mt7921s_enable_irq(&dev->mt76);
-
-	return 0;
-}
-
-int mt7921s_mac_reset(struct mt7921_dev *dev)
-{
-	int err;
-
-	mt76_connac_free_pending_tx_skbs(&dev->pm, NULL);
-	mt76_txq_schedule_all(&dev->mphy);
-	mt76_worker_disable(&dev->mt76.tx_worker);
-	set_bit(MT76_RESET, &dev->mphy.state);
-	set_bit(MT76_MCU_RESET, &dev->mphy.state);
-	wake_up(&dev->mt76.mcu.wait);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-	wait_event_timeout(dev->mt76.sdio.wait,
-			   mt76s_txqs_empty(&dev->mt76), 5 * HZ);
-	mt76_worker_disable(&dev->mt76.sdio.txrx_worker);
-	mt76_worker_disable(&dev->mt76.sdio.status_worker);
-	mt76_worker_disable(&dev->mt76.sdio.net_worker);
-	cancel_work_sync(&dev->mt76.sdio.stat_work);
-
-	mt7921s_disable_irq(&dev->mt76);
-	mt7921s_wfsys_reset(dev);
-
-	mt76_worker_enable(&dev->mt76.sdio.txrx_worker);
-	mt76_worker_enable(&dev->mt76.sdio.status_worker);
-	mt76_worker_enable(&dev->mt76.sdio.net_worker);
-
-	dev->fw_assert = false;
-	clear_bit(MT76_MCU_RESET, &dev->mphy.state);
-	mt7921s_enable_irq(&dev->mt76);
-
-	err = mt7921_run_firmware(dev);
-	if (err)
-		goto out;
-
-	err = mt7921_mcu_set_eeprom(dev);
-	if (err)
-		goto out;
-
-	err = mt7921_mac_init(dev);
-	if (err)
-		goto out;
-
-	err = __mt7921_start(&dev->phy);
-out:
-	clear_bit(MT76_RESET, &dev->mphy.state);
-
-	mt76_worker_enable(&dev->mt76.tx_worker);
-
-	return err;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/sdio_mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/sdio_mcu.c
deleted file mode 100644
index 5c14897..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/sdio_mcu.c
+++ /dev/null
@@ -1,175 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2021 MediaTek Inc. */
-
-#include <linux/kernel.h>
-#include <linux/mmc/sdio_func.h>
-#include <linux/module.h>
-#include <linux/iopoll.h>
-
-#include "mt7921.h"
-#include "../sdio.h"
-#include "mac.h"
-#include "mcu.h"
-#include "regs.h"
-
-static int
-mt7921s_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
-			 int cmd, int *seq)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	enum mt7921_sdio_pkt_type type = MT7921_SDIO_CMD;
-	enum mt76_mcuq_id txq = MT_MCUQ_WM;
-	int ret, pad;
-
-	/* We just return in case firmware assertion to avoid blocking the
-	 * common workqueue to run, for example, the coredump work might be
-	 * blocked by mt7921_mac_work that is excuting register access via sdio
-	 * bus.
-	 */
-	if (dev->fw_assert)
-		return -EBUSY;
-
-	ret = mt76_connac2_mcu_fill_message(mdev, skb, cmd, seq);
-	if (ret)
-		return ret;
-
-	mdev->mcu.timeout = 3 * HZ;
-
-	if (cmd == MCU_CMD(FW_SCATTER))
-		type = MT7921_SDIO_FWDL;
-
-	mt7921_skb_add_usb_sdio_hdr(dev, skb, type);
-	pad = round_up(skb->len, 4) - skb->len;
-	__skb_put_zero(skb, pad);
-
-	ret = mt76_tx_queue_skb_raw(dev, mdev->q_mcu[txq], skb, 0);
-	if (ret)
-		return ret;
-
-	mt76_queue_kick(dev, mdev->q_mcu[txq]);
-
-	return ret;
-}
-
-static u32 mt7921s_read_rm3r(struct mt7921_dev *dev)
-{
-	struct mt76_sdio *sdio = &dev->mt76.sdio;
-
-	return sdio_readl(sdio->func, MCR_D2HRM3R, NULL);
-}
-
-static u32 mt7921s_clear_rm3r_drv_own(struct mt7921_dev *dev)
-{
-	struct mt76_sdio *sdio = &dev->mt76.sdio;
-	u32 val;
-
-	val = sdio_readl(sdio->func, MCR_D2HRM3R, NULL);
-	if (val)
-		sdio_writel(sdio->func, H2D_SW_INT_CLEAR_MAILBOX_ACK,
-			    MCR_WSICR, NULL);
-
-	return val;
-}
-
-int mt7921s_mcu_init(struct mt7921_dev *dev)
-{
-	static const struct mt76_mcu_ops mt7921s_mcu_ops = {
-		.headroom = MT_SDIO_HDR_SIZE +
-			    sizeof(struct mt76_connac2_mcu_txd),
-		.tailroom = MT_SDIO_TAIL_SIZE,
-		.mcu_skb_send_msg = mt7921s_mcu_send_message,
-		.mcu_parse_response = mt7921_mcu_parse_response,
-		.mcu_rr = mt76_connac_mcu_reg_rr,
-		.mcu_wr = mt76_connac_mcu_reg_wr,
-	};
-	int ret;
-
-	mt7921s_mcu_drv_pmctrl(dev);
-
-	dev->mt76.mcu_ops = &mt7921s_mcu_ops;
-
-	ret = mt7921_run_firmware(dev);
-	if (ret)
-		return ret;
-
-	set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-
-	return 0;
-}
-
-int mt7921s_mcu_drv_pmctrl(struct mt7921_dev *dev)
-{
-	struct sdio_func *func = dev->mt76.sdio.func;
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_pm *pm = &dev->pm;
-	u32 status;
-	int err;
-
-	sdio_claim_host(func);
-
-	sdio_writel(func, WHLPCR_FW_OWN_REQ_CLR, MCR_WHLPCR, NULL);
-
-	err = readx_poll_timeout(mt76s_read_pcr, &dev->mt76, status,
-				 status & WHLPCR_IS_DRIVER_OWN, 2000, 1000000);
-
-	if (!err && test_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state))
-		err = readx_poll_timeout(mt7921s_read_rm3r, dev, status,
-					 status & D2HRM3R_IS_DRIVER_OWN,
-					 2000, 1000000);
-
-	sdio_release_host(func);
-
-	if (err < 0) {
-		dev_err(dev->mt76.dev, "driver own failed\n");
-		return -EIO;
-	}
-
-	clear_bit(MT76_STATE_PM, &mphy->state);
-
-	pm->stats.last_wake_event = jiffies;
-	pm->stats.doze_time += pm->stats.last_wake_event -
-			       pm->stats.last_doze_event;
-
-	return 0;
-}
-
-int mt7921s_mcu_fw_pmctrl(struct mt7921_dev *dev)
-{
-	struct sdio_func *func = dev->mt76.sdio.func;
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt76_connac_pm *pm = &dev->pm;
-	u32 status;
-	int err;
-
-	sdio_claim_host(func);
-
-	if (test_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state)) {
-		err = readx_poll_timeout(mt7921s_clear_rm3r_drv_own,
-					 dev, status,
-					 !(status & D2HRM3R_IS_DRIVER_OWN),
-					 2000, 1000000);
-		if (err < 0) {
-			dev_err(dev->mt76.dev, "mailbox ACK not cleared\n");
-			goto out;
-		}
-	}
-
-	sdio_writel(func, WHLPCR_FW_OWN_REQ_SET, MCR_WHLPCR, NULL);
-
-	err = readx_poll_timeout(mt76s_read_pcr, &dev->mt76, status,
-				 !(status & WHLPCR_IS_DRIVER_OWN), 2000, 1000000);
-out:
-	sdio_release_host(func);
-
-	if (err < 0) {
-		dev_err(dev->mt76.dev, "firmware own failed\n");
-		clear_bit(MT76_STATE_PM, &mphy->state);
-		return -EIO;
-	}
-
-	pm->stats.last_doze_event = jiffies;
-	pm->stats.awake_time += pm->stats.last_doze_event -
-				pm->stats.last_wake_event;
-
-	return 0;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/testmode.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/testmode.c
deleted file mode 100644
index bdec868..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/testmode.c
+++ /dev/null
@@ -1,197 +0,0 @@
-// SPDX-License-Identifier: ISC
-
-#include "mt7921.h"
-#include "mcu.h"
-
-enum mt7921_testmode_attr {
-	MT7921_TM_ATTR_UNSPEC,
-	MT7921_TM_ATTR_SET,
-	MT7921_TM_ATTR_QUERY,
-	MT7921_TM_ATTR_RSP,
-
-	/* keep last */
-	NUM_MT7921_TM_ATTRS,
-	MT7921_TM_ATTR_MAX = NUM_MT7921_TM_ATTRS - 1,
-};
-
-struct mt7921_tm_cmd {
-	u8 action;
-	u32 param0;
-	u32 param1;
-};
-
-struct mt7921_tm_evt {
-	u32 param0;
-	u32 param1;
-};
-
-static const struct nla_policy mt7921_tm_policy[NUM_MT7921_TM_ATTRS] = {
-	[MT7921_TM_ATTR_SET] = NLA_POLICY_EXACT_LEN(sizeof(struct mt7921_tm_cmd)),
-	[MT7921_TM_ATTR_QUERY] = NLA_POLICY_EXACT_LEN(sizeof(struct mt7921_tm_cmd)),
-};
-
-static int
-mt7921_tm_set(struct mt7921_dev *dev, struct mt7921_tm_cmd *req)
-{
-	struct mt7921_rftest_cmd cmd = {
-		.action = req->action,
-		.param0 = cpu_to_le32(req->param0),
-		.param1 = cpu_to_le32(req->param1),
-	};
-	bool testmode = false, normal = false;
-	struct mt76_connac_pm *pm = &dev->pm;
-	struct mt76_phy *phy = &dev->mphy;
-	int ret = -ENOTCONN;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (req->action == TM_SWITCH_MODE) {
-		if (req->param0 == MT7921_TM_NORMAL)
-			normal = true;
-		else
-			testmode = true;
-	}
-
-	if (testmode) {
-		/* Make sure testmode running on full power mode */
-		pm->enable = false;
-		cancel_delayed_work_sync(&pm->ps_work);
-		cancel_work_sync(&pm->wake_work);
-		__mt7921_mcu_drv_pmctrl(dev);
-
-		mt76_wr(dev, MT_WF_RFCR(0), dev->mt76.rxfilter);
-		phy->test.state = MT76_TM_STATE_ON;
-	}
-
-	if (!mt76_testmode_enabled(phy))
-		goto out;
-
-	ret = mt76_mcu_send_msg(&dev->mt76, MCU_CE_CMD(TEST_CTRL), &cmd,
-				sizeof(cmd), false);
-	if (ret)
-		goto out;
-
-	if (normal) {
-		/* Switch back to the normal world */
-		phy->test.state = MT76_TM_STATE_OFF;
-		pm->enable = true;
-	}
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static int
-mt7921_tm_query(struct mt7921_dev *dev, struct mt7921_tm_cmd *req,
-		struct mt7921_tm_evt *evt_resp)
-{
-	struct mt7921_rftest_cmd cmd = {
-		.action = req->action,
-		.param0 = cpu_to_le32(req->param0),
-		.param1 = cpu_to_le32(req->param1),
-	};
-	struct mt7921_rftest_evt *evt;
-	struct sk_buff *skb;
-	int ret;
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_CE_CMD(TEST_CTRL),
-					&cmd, sizeof(cmd), true, &skb);
-	if (ret)
-		goto out;
-
-	evt = (struct mt7921_rftest_evt *)skb->data;
-	evt_resp->param0 = le32_to_cpu(evt->param0);
-	evt_resp->param1 = le32_to_cpu(evt->param1);
-out:
-	dev_kfree_skb(skb);
-
-	return ret;
-}
-
-int mt7921_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			void *data, int len)
-{
-	struct nlattr *tb[NUM_MT76_TM_ATTRS];
-	struct mt76_phy *mphy = hw->priv;
-	struct mt7921_phy *phy = mphy->priv;
-	int err;
-
-	if (!test_bit(MT76_STATE_RUNNING, &mphy->state) ||
-	    !(hw->conf.flags & IEEE80211_CONF_MONITOR))
-		return -ENOTCONN;
-
-	err = nla_parse_deprecated(tb, MT76_TM_ATTR_MAX, data, len,
-				   mt76_tm_policy, NULL);
-	if (err)
-		return err;
-
-	if (tb[MT76_TM_ATTR_DRV_DATA]) {
-		struct nlattr *drv_tb[NUM_MT7921_TM_ATTRS], *data;
-		int ret;
-
-		data = tb[MT76_TM_ATTR_DRV_DATA];
-		ret = nla_parse_nested_deprecated(drv_tb,
-						  MT7921_TM_ATTR_MAX,
-						  data, mt7921_tm_policy,
-						  NULL);
-		if (ret)
-			return ret;
-
-		data = drv_tb[MT7921_TM_ATTR_SET];
-		if (data)
-			return mt7921_tm_set(phy->dev, nla_data(data));
-	}
-
-	return -EINVAL;
-}
-
-int mt7921_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
-			 struct netlink_callback *cb, void *data, int len)
-{
-	struct nlattr *tb[NUM_MT76_TM_ATTRS];
-	struct mt76_phy *mphy = hw->priv;
-	struct mt7921_phy *phy = mphy->priv;
-	int err;
-
-	if (!test_bit(MT76_STATE_RUNNING, &mphy->state) ||
-	    !(hw->conf.flags & IEEE80211_CONF_MONITOR) ||
-	    !mt76_testmode_enabled(mphy))
-		return -ENOTCONN;
-
-	if (cb->args[2]++ > 0)
-		return -ENOENT;
-
-	err = nla_parse_deprecated(tb, MT76_TM_ATTR_MAX, data, len,
-				   mt76_tm_policy, NULL);
-	if (err)
-		return err;
-
-	if (tb[MT76_TM_ATTR_DRV_DATA]) {
-		struct nlattr *drv_tb[NUM_MT7921_TM_ATTRS], *data;
-		int ret;
-
-		data = tb[MT76_TM_ATTR_DRV_DATA];
-		ret = nla_parse_nested_deprecated(drv_tb,
-						  MT7921_TM_ATTR_MAX,
-						  data, mt7921_tm_policy,
-						  NULL);
-		if (ret)
-			return ret;
-
-		data = drv_tb[MT7921_TM_ATTR_QUERY];
-		if (data) {
-			struct mt7921_tm_evt evt_resp;
-
-			err = mt7921_tm_query(phy->dev, nla_data(data),
-					      &evt_resp);
-			if (err)
-				return err;
-
-			return nla_put(msg, MT7921_TM_ATTR_RSP,
-				       sizeof(evt_resp), &evt_resp);
-		}
-	}
-
-	return -EINVAL;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/trace.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/trace.c
deleted file mode 100644
index 4dc3c7b..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/trace.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2021 Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#include <linux/module.h>
-
-#ifndef __CHECKER__
-#define CREATE_TRACE_POINTS
-#include "mt7921_trace.h"
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/usb.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/usb.c
deleted file mode 100644
index 89249f0..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/usb.c
+++ /dev/null
@@ -1,387 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2022 MediaTek Inc.
- *
- * Author: Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/usb.h>
-
-#include "mt7921.h"
-#include "mcu.h"
-#include "mac.h"
-
-static const struct usb_device_id mt7921u_device_table[] = {
-	{ USB_DEVICE_AND_INTERFACE_INFO(0x0e8d, 0x7961, 0xff, 0xff, 0xff) },
-	{ },
-};
-
-static u32 mt7921u_rr(struct mt76_dev *dev, u32 addr)
-{
-	u32 ret;
-
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	ret = ___mt76u_rr(dev, MT_VEND_READ_EXT,
-			  USB_DIR_IN | MT_USB_TYPE_VENDOR, addr);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-
-	return ret;
-}
-
-static void mt7921u_wr(struct mt76_dev *dev, u32 addr, u32 val)
-{
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	___mt76u_wr(dev, MT_VEND_WRITE_EXT,
-		    USB_DIR_OUT | MT_USB_TYPE_VENDOR, addr, val);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-}
-
-static u32 mt7921u_rmw(struct mt76_dev *dev, u32 addr,
-		       u32 mask, u32 val)
-{
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	val |= ___mt76u_rr(dev, MT_VEND_READ_EXT,
-			   USB_DIR_IN | MT_USB_TYPE_VENDOR, addr) & ~mask;
-	___mt76u_wr(dev, MT_VEND_WRITE_EXT,
-		    USB_DIR_OUT | MT_USB_TYPE_VENDOR, addr, val);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-
-	return val;
-}
-
-static void mt7921u_copy(struct mt76_dev *dev, u32 offset,
-			 const void *data, int len)
-{
-	struct mt76_usb *usb = &dev->usb;
-	int ret, i = 0, batch_len;
-	const u8 *val = data;
-
-	len = round_up(len, 4);
-
-	mutex_lock(&usb->usb_ctrl_mtx);
-	while (i < len) {
-		batch_len = min_t(int, usb->data_len, len - i);
-		memcpy(usb->data, val + i, batch_len);
-		ret = __mt76u_vendor_request(dev, MT_VEND_WRITE_EXT,
-					     USB_DIR_OUT | MT_USB_TYPE_VENDOR,
-					     (offset + i) >> 16, offset + i,
-					     usb->data, batch_len);
-		if (ret < 0)
-			break;
-
-		i += batch_len;
-	}
-	mutex_unlock(&usb->usb_ctrl_mtx);
-}
-
-int mt7921u_mcu_power_on(struct mt7921_dev *dev)
-{
-	int ret;
-
-	ret = mt76u_vendor_request(&dev->mt76, MT_VEND_POWER_ON,
-				   USB_DIR_OUT | MT_USB_TYPE_VENDOR,
-				   0x0, 0x1, NULL, 0);
-	if (ret)
-		return ret;
-
-	if (!mt76_poll_msec(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_PWR_ON,
-			    MT_TOP_MISC2_FW_PWR_ON, 500)) {
-		dev_err(dev->mt76.dev, "Timeout for power on\n");
-		ret = -EIO;
-	}
-
-	return ret;
-}
-
-static int
-mt7921u_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
-			 int cmd, int *seq)
-{
-	struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
-	u32 pad, ep;
-	int ret;
-
-	ret = mt76_connac2_mcu_fill_message(mdev, skb, cmd, seq);
-	if (ret)
-		return ret;
-
-	mdev->mcu.timeout = 3 * HZ;
-
-	if (cmd != MCU_CMD(FW_SCATTER))
-		ep = MT_EP_OUT_INBAND_CMD;
-	else
-		ep = MT_EP_OUT_AC_BE;
-
-	mt7921_skb_add_usb_sdio_hdr(dev, skb, 0);
-	pad = round_up(skb->len, 4) + 4 - skb->len;
-	__skb_put_zero(skb, pad);
-
-	ret = mt76u_bulk_msg(&dev->mt76, skb->data, skb->len, NULL,
-			     1000, ep);
-	dev_kfree_skb(skb);
-
-	return ret;
-}
-
-static int mt7921u_mcu_init(struct mt7921_dev *dev)
-{
-	static const struct mt76_mcu_ops mcu_ops = {
-		.headroom = MT_SDIO_HDR_SIZE +
-			    sizeof(struct mt76_connac2_mcu_txd),
-		.tailroom = MT_USB_TAIL_SIZE,
-		.mcu_skb_send_msg = mt7921u_mcu_send_message,
-		.mcu_parse_response = mt7921_mcu_parse_response,
-		.mcu_restart = mt76_connac_mcu_restart,
-	};
-	int ret;
-
-	dev->mt76.mcu_ops = &mcu_ops;
-
-	mt76_set(dev, MT_UDMA_TX_QSEL, MT_FW_DL_EN);
-	ret = mt7921_run_firmware(dev);
-	if (ret)
-		return ret;
-
-	set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-	mt76_clear(dev, MT_UDMA_TX_QSEL, MT_FW_DL_EN);
-
-	return 0;
-}
-
-static void mt7921u_stop(struct ieee80211_hw *hw)
-{
-	struct mt7921_dev *dev = mt7921_hw_dev(hw);
-
-	mt76u_stop_tx(&dev->mt76);
-	mt7921_stop(hw);
-}
-
-static void mt7921u_cleanup(struct mt7921_dev *dev)
-{
-	clear_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-	mt7921u_wfsys_reset(dev);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-	mt76u_queues_deinit(&dev->mt76);
-}
-
-static int mt7921u_probe(struct usb_interface *usb_intf,
-			 const struct usb_device_id *id)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		.txwi_size = MT_SDIO_TXD_SIZE,
-		.drv_flags = MT_DRV_RX_DMA_HDR | MT_DRV_HW_MGMT_TXQ |
-			     MT_DRV_AMSDU_OFFLOAD,
-		.survey_flags = SURVEY_INFO_TIME_TX |
-				SURVEY_INFO_TIME_RX |
-				SURVEY_INFO_TIME_BSS_RX,
-		.tx_prepare_skb = mt7921_usb_sdio_tx_prepare_skb,
-		.tx_complete_skb = mt7921_usb_sdio_tx_complete_skb,
-		.tx_status_data = mt7921_usb_sdio_tx_status_data,
-		.rx_skb = mt7921_queue_rx_skb,
-		.rx_check = mt7921_rx_check,
-		.sta_ps = mt7921_sta_ps,
-		.sta_add = mt7921_mac_sta_add,
-		.sta_assoc = mt7921_mac_sta_assoc,
-		.sta_remove = mt7921_mac_sta_remove,
-		.update_survey = mt7921_update_channel,
-	};
-	static const struct mt7921_hif_ops hif_ops = {
-		.mcu_init = mt7921u_mcu_init,
-		.init_reset = mt7921u_init_reset,
-		.reset = mt7921u_mac_reset,
-	};
-	static struct mt76_bus_ops bus_ops = {
-		.rr = mt7921u_rr,
-		.wr = mt7921u_wr,
-		.rmw = mt7921u_rmw,
-		.read_copy = mt76u_read_copy,
-		.write_copy = mt7921u_copy,
-		.type = MT76_BUS_USB,
-	};
-	struct usb_device *udev = interface_to_usbdev(usb_intf);
-	struct ieee80211_ops *ops;
-	struct ieee80211_hw *hw;
-	struct mt7921_dev *dev;
-	struct mt76_dev *mdev;
-	int ret;
-
-	ops = devm_kmemdup(&usb_intf->dev, &mt7921_ops, sizeof(mt7921_ops),
-			   GFP_KERNEL);
-	if (!ops)
-		return -ENOMEM;
-
-	ops->stop = mt7921u_stop;
-
-	mdev = mt76_alloc_device(&usb_intf->dev, sizeof(*dev), ops, &drv_ops);
-	if (!mdev)
-		return -ENOMEM;
-
-	dev = container_of(mdev, struct mt7921_dev, mt76);
-	dev->hif_ops = &hif_ops;
-
-	udev = usb_get_dev(udev);
-	usb_reset_device(udev);
-
-	usb_set_intfdata(usb_intf, dev);
-
-	ret = __mt76u_init(mdev, usb_intf, &bus_ops);
-	if (ret < 0)
-		goto error;
-
-	mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |
-		    (mt76_rr(dev, MT_HW_REV) & 0xff);
-	dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
-
-	if (mt76_get_field(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_N9_RDY)) {
-		ret = mt7921u_wfsys_reset(dev);
-		if (ret)
-			goto error;
-	}
-
-	ret = mt7921u_mcu_power_on(dev);
-	if (ret)
-		goto error;
-
-	ret = mt76u_alloc_mcu_queue(&dev->mt76);
-	if (ret)
-		goto error;
-
-	ret = mt76u_alloc_queues(&dev->mt76);
-	if (ret)
-		goto error;
-
-	ret = mt7921u_dma_init(dev, false);
-	if (ret)
-		return ret;
-
-	hw = mt76_hw(dev);
-	/* check hw sg support in order to enable AMSDU */
-	hw->max_tx_fragments = mdev->usb.sg_en ? MT_HW_TXP_MAX_BUF_NUM : 1;
-
-	ret = mt7921_register_device(dev);
-	if (ret)
-		goto error;
-
-	return 0;
-
-error:
-	mt76u_queues_deinit(&dev->mt76);
-
-	usb_set_intfdata(usb_intf, NULL);
-	usb_put_dev(interface_to_usbdev(usb_intf));
-
-	mt76_free_device(&dev->mt76);
-
-	return ret;
-}
-
-static void mt7921u_disconnect(struct usb_interface *usb_intf)
-{
-	struct mt7921_dev *dev = usb_get_intfdata(usb_intf);
-
-	cancel_work_sync(&dev->init_work);
-	if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state))
-		return;
-
-	mt76_unregister_device(&dev->mt76);
-	mt7921u_cleanup(dev);
-
-	usb_set_intfdata(usb_intf, NULL);
-	usb_put_dev(interface_to_usbdev(usb_intf));
-
-	mt76_free_device(&dev->mt76);
-}
-
-#ifdef CONFIG_PM
-static int mt7921u_suspend(struct usb_interface *intf, pm_message_t state)
-{
-	struct mt7921_dev *dev = usb_get_intfdata(intf);
-	struct mt76_connac_pm *pm = &dev->pm;
-	int err;
-
-	pm->suspended = true;
-	flush_work(&dev->reset_work);
-
-	err = mt76_connac_mcu_set_hif_suspend(&dev->mt76, true);
-	if (err)
-		goto failed;
-
-	mt76u_stop_rx(&dev->mt76);
-	mt76u_stop_tx(&dev->mt76);
-
-	return 0;
-
-failed:
-	pm->suspended = false;
-
-	if (err < 0)
-		mt7921_reset(&dev->mt76);
-
-	return err;
-}
-
-static int mt7921u_resume(struct usb_interface *intf)
-{
-	struct mt7921_dev *dev = usb_get_intfdata(intf);
-	struct mt76_connac_pm *pm = &dev->pm;
-	bool reinit = true;
-	int err, i;
-
-	for (i = 0; i < 10; i++) {
-		u32 val = mt76_rr(dev, MT_WF_SW_DEF_CR_USB_MCU_EVENT);
-
-		if (!(val & MT_WF_SW_SER_TRIGGER_SUSPEND)) {
-			reinit = false;
-			break;
-		}
-		if (val & MT_WF_SW_SER_DONE_SUSPEND) {
-			mt76_wr(dev, MT_WF_SW_DEF_CR_USB_MCU_EVENT, 0);
-			break;
-		}
-
-		msleep(20);
-	}
-
-	if (reinit || mt7921_dma_need_reinit(dev)) {
-		err = mt7921u_dma_init(dev, true);
-		if (err)
-			goto failed;
-	}
-
-	err = mt76u_resume_rx(&dev->mt76);
-	if (err < 0)
-		goto failed;
-
-	err = mt76_connac_mcu_set_hif_suspend(&dev->mt76, false);
-failed:
-	pm->suspended = false;
-
-	if (err < 0)
-		mt7921_reset(&dev->mt76);
-
-	return err;
-}
-#endif /* CONFIG_PM */
-
-MODULE_DEVICE_TABLE(usb, mt7921u_device_table);
-MODULE_FIRMWARE(MT7921_FIRMWARE_WM);
-MODULE_FIRMWARE(MT7921_ROM_PATCH);
-
-static struct usb_driver mt7921u_driver = {
-	.name		= KBUILD_MODNAME,
-	.id_table	= mt7921u_device_table,
-	.probe		= mt7921u_probe,
-	.disconnect	= mt7921u_disconnect,
-#ifdef CONFIG_PM
-	.suspend	= mt7921u_suspend,
-	.resume		= mt7921u_resume,
-	.reset_resume	= mt7921u_resume,
-#endif /* CONFIG_PM */
-	.soft_unbind	= 1,
-	.disable_hub_initiated_lpm = 1,
-};
-module_usb_driver(mt7921u_driver);
-
-MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>");
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/usb_mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/usb_mac.c
deleted file mode 100644
index efbd395..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7921/usb_mac.c
+++ /dev/null
@@ -1,255 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2022 MediaTek Inc.
- *
- * Author: Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/usb.h>
-
-#include "mt7921.h"
-#include "mcu.h"
-#include "mac.h"
-
-static u32 mt7921u_uhw_rr(struct mt76_dev *dev, u32 addr)
-{
-	u32 ret;
-
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	ret = ___mt76u_rr(dev, MT_VEND_DEV_MODE,
-			  USB_DIR_IN | MT_USB_TYPE_UHW_VENDOR, addr);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-
-	return ret;
-}
-
-static void mt7921u_uhw_wr(struct mt76_dev *dev, u32 addr, u32 val)
-{
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	___mt76u_wr(dev, MT_VEND_WRITE,
-		    USB_DIR_OUT | MT_USB_TYPE_UHW_VENDOR, addr, val);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-}
-
-static void mt7921u_dma_prefetch(struct mt7921_dev *dev)
-{
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(0),
-		 MT_WPDMA0_MAX_CNT_MASK, 4);
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(0),
-		 MT_WPDMA0_BASE_PTR_MASK, 0x80);
-
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(1),
-		 MT_WPDMA0_MAX_CNT_MASK, 4);
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(1),
-		 MT_WPDMA0_BASE_PTR_MASK, 0xc0);
-
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(2),
-		 MT_WPDMA0_MAX_CNT_MASK, 4);
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(2),
-		 MT_WPDMA0_BASE_PTR_MASK, 0x100);
-
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(3),
-		 MT_WPDMA0_MAX_CNT_MASK, 4);
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(3),
-		 MT_WPDMA0_BASE_PTR_MASK, 0x140);
-
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(4),
-		 MT_WPDMA0_MAX_CNT_MASK, 4);
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(4),
-		 MT_WPDMA0_BASE_PTR_MASK, 0x180);
-
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(16),
-		 MT_WPDMA0_MAX_CNT_MASK, 4);
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(16),
-		 MT_WPDMA0_BASE_PTR_MASK, 0x280);
-
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(17),
-		 MT_WPDMA0_MAX_CNT_MASK, 4);
-	mt76_rmw(dev, MT_UWFDMA0_TX_RING_EXT_CTRL(17),
-		 MT_WPDMA0_BASE_PTR_MASK,  0x2c0);
-}
-
-static void mt7921u_wfdma_init(struct mt7921_dev *dev)
-{
-	mt7921u_dma_prefetch(dev);
-
-	mt76_clear(dev, MT_UWFDMA0_GLO_CFG, MT_WFDMA0_GLO_CFG_OMIT_RX_INFO);
-	mt76_set(dev, MT_UWFDMA0_GLO_CFG,
-		 MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-		 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2 |
-		 MT_WFDMA0_GLO_CFG_FW_DWLD_BYPASS_DMASHDL |
-		 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-		 MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-
-	/* disable dmashdl */
-	mt76_clear(dev, MT_UWFDMA0_GLO_CFG_EXT0,
-		   MT_WFDMA0_CSR_TX_DMASHDL_ENABLE);
-	mt76_set(dev, MT_DMASHDL_SW_CONTROL, MT_DMASHDL_DMASHDL_BYPASS);
-
-	mt76_set(dev, MT_WFDMA_DUMMY_CR, MT_WFDMA_NEED_REINIT);
-}
-
-static int mt7921u_dma_rx_evt_ep4(struct mt7921_dev *dev)
-{
-	if (!mt76_poll(dev, MT_UWFDMA0_GLO_CFG,
-		       MT_WFDMA0_GLO_CFG_RX_DMA_BUSY, 0, 1000))
-		return -ETIMEDOUT;
-
-	mt76_clear(dev, MT_UWFDMA0_GLO_CFG, MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-	mt76_set(dev, MT_WFDMA_HOST_CONFIG,
-		 MT_WFDMA_HOST_CONFIG_USB_RXEVT_EP4_EN);
-	mt76_set(dev, MT_UWFDMA0_GLO_CFG, MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-
-	return 0;
-}
-
-static void mt7921u_epctl_rst_opt(struct mt7921_dev *dev, bool reset)
-{
-	u32 val;
-
-	/* usb endpoint reset opt
-	 * bits[4,9]: out blk ep 4-9
-	 * bits[20,21]: in blk ep 4-5
-	 * bits[22]: in int ep 6
-	 */
-	val = mt7921u_uhw_rr(&dev->mt76, MT_SSUSB_EPCTL_CSR_EP_RST_OPT);
-	if (reset)
-		val |= GENMASK(9, 4) | GENMASK(22, 20);
-	else
-		val &= ~(GENMASK(9, 4) | GENMASK(22, 20));
-	mt7921u_uhw_wr(&dev->mt76, MT_SSUSB_EPCTL_CSR_EP_RST_OPT, val);
-}
-
-int mt7921u_dma_init(struct mt7921_dev *dev, bool resume)
-{
-	int err;
-
-	mt7921u_wfdma_init(dev);
-
-	mt76_clear(dev, MT_UDMA_WLCFG_0, MT_WL_RX_FLUSH);
-
-	mt76_set(dev, MT_UDMA_WLCFG_0,
-		 MT_WL_RX_EN | MT_WL_TX_EN |
-		 MT_WL_RX_MPSZ_PAD0 | MT_TICK_1US_EN);
-	mt76_clear(dev, MT_UDMA_WLCFG_0,
-		   MT_WL_RX_AGG_TO | MT_WL_RX_AGG_LMT);
-	mt76_clear(dev, MT_UDMA_WLCFG_1, MT_WL_RX_AGG_PKT_LMT);
-
-	if (resume)
-		return 0;
-
-	err = mt7921u_dma_rx_evt_ep4(dev);
-	if (err)
-		return err;
-
-	mt7921u_epctl_rst_opt(dev, false);
-
-	return 0;
-}
-
-int mt7921u_wfsys_reset(struct mt7921_dev *dev)
-{
-	u32 val;
-	int i;
-
-	mt7921u_epctl_rst_opt(dev, false);
-
-	val = mt7921u_uhw_rr(&dev->mt76, MT_CBTOP_RGU_WF_SUBSYS_RST);
-	val |= MT_CBTOP_RGU_WF_SUBSYS_RST_WF_WHOLE_PATH;
-	mt7921u_uhw_wr(&dev->mt76, MT_CBTOP_RGU_WF_SUBSYS_RST, val);
-
-	usleep_range(10, 20);
-
-	val = mt7921u_uhw_rr(&dev->mt76, MT_CBTOP_RGU_WF_SUBSYS_RST);
-	val &= ~MT_CBTOP_RGU_WF_SUBSYS_RST_WF_WHOLE_PATH;
-	mt7921u_uhw_wr(&dev->mt76, MT_CBTOP_RGU_WF_SUBSYS_RST, val);
-
-	mt7921u_uhw_wr(&dev->mt76, MT_UDMA_CONN_INFRA_STATUS_SEL, 0);
-	for (i = 0; i < MT7921_WFSYS_INIT_RETRY_COUNT; i++) {
-		val = mt7921u_uhw_rr(&dev->mt76, MT_UDMA_CONN_INFRA_STATUS);
-		if (val & MT_UDMA_CONN_WFSYS_INIT_DONE)
-			break;
-
-		msleep(100);
-	}
-
-	if (i == MT7921_WFSYS_INIT_RETRY_COUNT)
-		return -ETIMEDOUT;
-
-	return 0;
-}
-
-int mt7921u_init_reset(struct mt7921_dev *dev)
-{
-	set_bit(MT76_RESET, &dev->mphy.state);
-
-	wake_up(&dev->mt76.mcu.wait);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-
-	mt76u_stop_rx(&dev->mt76);
-	mt76u_stop_tx(&dev->mt76);
-
-	mt7921u_wfsys_reset(dev);
-
-	clear_bit(MT76_RESET, &dev->mphy.state);
-
-	return mt76u_resume_rx(&dev->mt76);
-}
-
-int mt7921u_mac_reset(struct mt7921_dev *dev)
-{
-	int err;
-
-	mt76_txq_schedule_all(&dev->mphy);
-	mt76_worker_disable(&dev->mt76.tx_worker);
-
-	set_bit(MT76_RESET, &dev->mphy.state);
-	set_bit(MT76_MCU_RESET, &dev->mphy.state);
-
-	wake_up(&dev->mt76.mcu.wait);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-
-	mt76u_stop_rx(&dev->mt76);
-	mt76u_stop_tx(&dev->mt76);
-
-	mt7921u_wfsys_reset(dev);
-
-	clear_bit(MT76_MCU_RESET, &dev->mphy.state);
-	err = mt76u_resume_rx(&dev->mt76);
-	if (err)
-		goto out;
-
-	err = mt7921u_mcu_power_on(dev);
-	if (err)
-		goto out;
-
-	err = mt7921u_dma_init(dev, false);
-	if (err)
-		goto out;
-
-	mt76_wr(dev, MT_SWDEF_MODE, MT_SWDEF_NORMAL_MODE);
-	mt76_set(dev, MT_UDMA_TX_QSEL, MT_FW_DL_EN);
-
-	err = mt7921_run_firmware(dev);
-	if (err)
-		goto out;
-
-	mt76_clear(dev, MT_UDMA_TX_QSEL, MT_FW_DL_EN);
-
-	err = mt7921_mcu_set_eeprom(dev);
-	if (err)
-		goto out;
-
-	err = mt7921_mac_init(dev);
-	if (err)
-		goto out;
-
-	err = __mt7921_start(&dev->phy);
-out:
-	clear_bit(MT76_RESET, &dev->mphy.state);
-
-	mt76_worker_enable(&dev->mt76.tx_worker);
-
-	return err;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/Kconfig b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/Kconfig
deleted file mode 100644
index 5c5fc56..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/Kconfig
+++ /dev/null
@@ -1,12 +0,0 @@
-# SPDX-License-Identifier: ISC
-config MT7996E
-	tristate "MediaTek MT7996 (PCIe) support"
-	select MT76_CONNAC_LIB
-	depends on MAC80211
-	depends on PCI
-	help
-	  This adds support for MT7996-based wireless PCIe devices,
-	  which support concurrent tri-band operation at 6GHz, 5GHz,
-	  and 2.4GHz IEEE 802.11be 4x4:4SS 4096-QAM, 320MHz channels.
-
-	  To compile this driver as a module, choose M here.
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/Makefile b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/Makefile
deleted file mode 100644
index bcb9a3c..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-# SPDX-License-Identifier: ISC
-
-obj-$(CONFIG_MT7996E) += mt7996e.o
-
-mt7996e-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o \
-	     debugfs.o mmio.o
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/debugfs.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/debugfs.c
deleted file mode 100644
index 8884263..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/debugfs.c
+++ /dev/null
@@ -1,829 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#include <linux/relay.h>
-#include "mt7996.h"
-#include "eeprom.h"
-#include "mcu.h"
-#include "mac.h"
-
-#define FW_BIN_LOG_MAGIC	0x44d9c99a
-
-/** global debugfs **/
-
-struct hw_queue_map {
-	const char *name;
-	u8 index;
-	u8 pid;
-	u8 qid;
-};
-
-static int
-mt7996_implicit_txbf_set(void *data, u64 val)
-{
-	struct mt7996_dev *dev = data;
-
-	/* The existing connected stations shall reconnect to apply
-	 * new implicit txbf configuration.
-	 */
-	dev->ibf = !!val;
-
-	return mt7996_mcu_set_txbf(dev, BF_HW_EN_UPDATE);
-}
-
-static int
-mt7996_implicit_txbf_get(void *data, u64 *val)
-{
-	struct mt7996_dev *dev = data;
-
-	*val = dev->ibf;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_implicit_txbf, mt7996_implicit_txbf_get,
-			 mt7996_implicit_txbf_set, "%lld\n");
-
-/* test knob of system layer 1/2 error recovery */
-static int mt7996_fw_ser_set(void *data, u64 val)
-{
-	enum {
-		SER_SET_RECOVER_L1 = 1,
-		SER_SET_RECOVER_L2,
-		SER_ENABLE = 2,
-		SER_RECOVER
-	};
-	struct mt7996_dev *dev = data;
-	int ret = 0;
-
-	switch (val) {
-	case SER_SET_RECOVER_L1:
-	case SER_SET_RECOVER_L2:
-		ret = mt7996_mcu_set_ser(dev, SER_ENABLE, BIT(val), 0);
-		if (ret)
-			return ret;
-
-		return mt7996_mcu_set_ser(dev, SER_RECOVER, val, 0);
-	default:
-		break;
-	}
-
-	return ret;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_ser, NULL,
-			 mt7996_fw_ser_set, "%lld\n");
-
-static int
-mt7996_radar_trigger(void *data, u64 val)
-{
-	struct mt7996_dev *dev = data;
-
-	if (val > MT_RX_SEL2)
-		return -EINVAL;
-
-	return mt7996_mcu_rdd_cmd(dev, RDD_RADAR_EMULATE,
-				  val, 0, 0);
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_radar_trigger, NULL,
-			 mt7996_radar_trigger, "%lld\n");
-
-static int
-mt7996_rdd_monitor(struct seq_file *s, void *data)
-{
-	struct mt7996_dev *dev = dev_get_drvdata(s->private);
-	struct cfg80211_chan_def *chandef = &dev->rdd2_chandef;
-	const char *bw;
-	int ret = 0;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (!cfg80211_chandef_valid(chandef)) {
-		ret = -EINVAL;
-		goto out;
-	}
-
-	if (!dev->rdd2_phy) {
-		seq_puts(s, "not running\n");
-		goto out;
-	}
-
-	switch (chandef->width) {
-	case NL80211_CHAN_WIDTH_40:
-		bw = "40";
-		break;
-	case NL80211_CHAN_WIDTH_80:
-		bw = "80";
-		break;
-	case NL80211_CHAN_WIDTH_160:
-		bw = "160";
-		break;
-	case NL80211_CHAN_WIDTH_80P80:
-		bw = "80P80";
-		break;
-	default:
-		bw = "20";
-		break;
-	}
-
-	seq_printf(s, "channel %d (%d MHz) width %s MHz center1: %d MHz\n",
-		   chandef->chan->hw_value, chandef->chan->center_freq,
-		   bw, chandef->center_freq1);
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static int
-mt7996_fw_debug_wm_set(void *data, u64 val)
-{
-	struct mt7996_dev *dev = data;
-	enum {
-		DEBUG_TXCMD = 62,
-		DEBUG_CMD_RPT_TX,
-		DEBUG_CMD_RPT_TRIG,
-		DEBUG_SPL,
-		DEBUG_RPT_RX,
-		DEBUG_RPT_RA = 68,
-	} debug;
-	bool tx, rx, en;
-	int ret;
-
-	dev->fw_debug_wm = val ? MCU_FW_LOG_TO_HOST : 0;
-
-	if (dev->fw_debug_bin)
-		val = MCU_FW_LOG_RELAY;
-	else
-		val = dev->fw_debug_wm;
-
-	tx = dev->fw_debug_wm || (dev->fw_debug_bin & BIT(1));
-	rx = dev->fw_debug_wm || (dev->fw_debug_bin & BIT(2));
-	en = dev->fw_debug_wm || (dev->fw_debug_bin & BIT(0));
-
-	ret = mt7996_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, val);
-	if (ret)
-		return ret;
-
-	for (debug = DEBUG_TXCMD; debug <= DEBUG_RPT_RA; debug++) {
-		if (debug == 67)
-			continue;
-
-		if (debug == DEBUG_RPT_RX)
-			val = en && rx;
-		else
-			val = en && tx;
-
-		ret = mt7996_mcu_fw_dbg_ctrl(dev, debug, val);
-		if (ret)
-			return ret;
-	}
-
-	return 0;
-}
-
-static int
-mt7996_fw_debug_wm_get(void *data, u64 *val)
-{
-	struct mt7996_dev *dev = data;
-
-	*val = dev->fw_debug_wm;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_wm, mt7996_fw_debug_wm_get,
-			 mt7996_fw_debug_wm_set, "%lld\n");
-
-static int
-mt7996_fw_debug_wa_set(void *data, u64 val)
-{
-	struct mt7996_dev *dev = data;
-	int ret;
-
-	dev->fw_debug_wa = val ? MCU_FW_LOG_TO_HOST : 0;
-
-	ret = mt7996_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, dev->fw_debug_wa);
-	if (ret)
-		return ret;
-
-	return mt7996_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET), MCU_WA_PARAM_PDMA_RX,
-				 !!dev->fw_debug_wa, 0);
-}
-
-static int
-mt7996_fw_debug_wa_get(void *data, u64 *val)
-{
-	struct mt7996_dev *dev = data;
-
-	*val = dev->fw_debug_wa;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_wa, mt7996_fw_debug_wa_get,
-			 mt7996_fw_debug_wa_set, "%lld\n");
-
-static struct dentry *
-create_buf_file_cb(const char *filename, struct dentry *parent, umode_t mode,
-		   struct rchan_buf *buf, int *is_global)
-{
-	struct dentry *f;
-
-	f = debugfs_create_file("fwlog_data", mode, parent, buf,
-				&relay_file_operations);
-	if (IS_ERR(f))
-		return NULL;
-
-	*is_global = 1;
-
-	return f;
-}
-
-static int
-remove_buf_file_cb(struct dentry *f)
-{
-	debugfs_remove(f);
-
-	return 0;
-}
-
-static int
-mt7996_fw_debug_bin_set(void *data, u64 val)
-{
-	static struct rchan_callbacks relay_cb = {
-		.create_buf_file = create_buf_file_cb,
-		.remove_buf_file = remove_buf_file_cb,
-	};
-	struct mt7996_dev *dev = data;
-
-	if (!dev->relay_fwlog)
-		dev->relay_fwlog = relay_open("fwlog_data", dev->debugfs_dir,
-					      1500, 512, &relay_cb, NULL);
-	if (!dev->relay_fwlog)
-		return -ENOMEM;
-
-	dev->fw_debug_bin = val;
-
-	relay_reset(dev->relay_fwlog);
-
-	return mt7996_fw_debug_wm_set(dev, dev->fw_debug_wm);
-}
-
-static int
-mt7996_fw_debug_bin_get(void *data, u64 *val)
-{
-	struct mt7996_dev *dev = data;
-
-	*val = dev->fw_debug_bin;
-
-	return 0;
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_bin, mt7996_fw_debug_bin_get,
-			 mt7996_fw_debug_bin_set, "%lld\n");
-
-static int
-mt7996_fw_util_wa_show(struct seq_file *file, void *data)
-{
-	struct mt7996_dev *dev = file->private;
-
-	if (dev->fw_debug_wa)
-		return mt7996_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(QUERY),
-					 MCU_WA_PARAM_CPU_UTIL, 0, 0);
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7996_fw_util_wa);
-
-static void
-mt7996_ampdu_stat_read_phy(struct mt7996_phy *phy, struct seq_file *file)
-{
-	struct mt7996_dev *dev = phy->dev;
-	int bound[15], range[8], i, n;
-	u8 band_idx = phy->mt76->band_idx;
-
-	/* Tx ampdu stat */
-	for (i = 0; i < ARRAY_SIZE(range); i++)
-		range[i] = mt76_rr(dev, MT_MIB_ARNG(band_idx, i));
-
-	for (i = 0; i < ARRAY_SIZE(bound); i++)
-		bound[i] = MT_MIB_ARNCR_RANGE(range[i / 2], i % 2) + 1;
-
-	seq_printf(file, "\nPhy %s, Phy band %d\n",
-		wiphy_name(phy->mt76->hw->wiphy), band_idx);
-
-	seq_printf(file, "Length: %8d | ", bound[0]);
-	for (i = 0; i < ARRAY_SIZE(bound) - 1; i++)
-		seq_printf(file, "%3d -%3d | ",
-			   bound[i] + 1, bound[i + 1]);
-
-	seq_puts(file, "\nCount:  ");
-	n =  ARRAY_SIZE(dev->mt76.aggr_stats) / __MT_MAX_BAND * band_idx;
-	for (i = 0; i < ARRAY_SIZE(bound); i++)
-		seq_printf(file, "%8d | ", dev->mt76.aggr_stats[i + n]);
-	seq_puts(file, "\n");
-
-	seq_printf(file, "BA miss count: %d\n", phy->mib.ba_miss_cnt);
-}
-
-static void
-mt7996_txbf_stat_read_phy(struct mt7996_phy *phy, struct seq_file *s)
-{
-	static const char * const bw[] = {
-		"BW20", "BW40", "BW80", "BW160"
-	};
-	struct mib_stats *mib = &phy->mib;
-
-	/* Tx Beamformer monitor */
-	seq_puts(s, "\nTx Beamformer applied PPDU counts: ");
-
-	seq_printf(s, "iBF: %d, eBF: %d\n",
-		   mib->tx_bf_ibf_ppdu_cnt,
-		   mib->tx_bf_ebf_ppdu_cnt);
-
-	/* Tx Beamformer Rx feedback monitor */
-	seq_puts(s, "Tx Beamformer Rx feedback statistics: ");
-
-	seq_printf(s, "All: %d, HE: %d, VHT: %d, HT: %d, ",
-		   mib->tx_bf_rx_fb_all_cnt,
-		   mib->tx_bf_rx_fb_he_cnt,
-		   mib->tx_bf_rx_fb_vht_cnt,
-		   mib->tx_bf_rx_fb_ht_cnt);
-
-	seq_printf(s, "%s, NC: %d, NR: %d\n",
-		   bw[mib->tx_bf_rx_fb_bw],
-		   mib->tx_bf_rx_fb_nc_cnt,
-		   mib->tx_bf_rx_fb_nr_cnt);
-
-	/* Tx Beamformee Rx NDPA & Tx feedback report */
-	seq_printf(s, "Tx Beamformee successful feedback frames: %d\n",
-		   mib->tx_bf_fb_cpl_cnt);
-	seq_printf(s, "Tx Beamformee feedback triggered counts: %d\n",
-		   mib->tx_bf_fb_trig_cnt);
-
-	/* Tx SU & MU counters */
-	seq_printf(s, "Tx multi-user Beamforming counts: %d\n",
-		   mib->tx_mu_bf_cnt);
-	seq_printf(s, "Tx multi-user MPDU counts: %d\n", mib->tx_mu_mpdu_cnt);
-	seq_printf(s, "Tx multi-user successful MPDU counts: %d\n",
-		   mib->tx_mu_acked_mpdu_cnt);
-	seq_printf(s, "Tx single-user successful MPDU counts: %d\n",
-		   mib->tx_su_acked_mpdu_cnt);
-
-	seq_puts(s, "\n");
-}
-
-static int
-mt7996_tx_stats_show(struct seq_file *file, void *data)
-{
-	struct mt7996_phy *phy = file->private;
-	struct mt7996_dev *dev = phy->dev;
-	struct mib_stats *mib = &phy->mib;
-	int i;
-	u32 attempts, success, per;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt7996_mac_update_stats(phy);
-	mt7996_ampdu_stat_read_phy(phy, file);
-
-	attempts = mib->tx_mpdu_attempts_cnt;
-	success = mib->tx_mpdu_success_cnt;
-	per = attempts ? 100 - success * 100 / attempts : 100;
-	seq_printf(file, "Tx attempts: %8u (MPDUs)\n", attempts);
-	seq_printf(file, "Tx success: %8u (MPDUs)\n", success);
-	seq_printf(file, "Tx PER: %u%%\n", per);
-
-	mt7996_txbf_stat_read_phy(phy, file);
-
-	/* Tx amsdu info */
-	seq_puts(file, "Tx MSDU statistics:\n");
-	for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++) {
-		seq_printf(file, "AMSDU pack count of %d MSDU in TXD: %8d ",
-			   i + 1, mib->tx_amsdu[i]);
-		if (mib->tx_amsdu_cnt)
-			seq_printf(file, "(%3d%%)\n",
-				   mib->tx_amsdu[i] * 100 / mib->tx_amsdu_cnt);
-		else
-			seq_puts(file, "\n");
-	}
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7996_tx_stats);
-
-static void
-mt7996_hw_queue_read(struct seq_file *s, u32 size,
-		     const struct hw_queue_map *map)
-{
-	struct mt7996_phy *phy = s->private;
-	struct mt7996_dev *dev = phy->dev;
-	u32 i, val;
-
-	val = mt76_rr(dev, MT_FL_Q_EMPTY);
-	for (i = 0; i < size; i++) {
-		u32 ctrl, head, tail, queued;
-
-		if (val & BIT(map[i].index))
-			continue;
-
-		ctrl = BIT(31) | (map[i].pid << 10) | (map[i].qid << 24);
-		mt76_wr(dev, MT_FL_Q0_CTRL, ctrl);
-
-		head = mt76_get_field(dev, MT_FL_Q2_CTRL,
-				      GENMASK(11, 0));
-		tail = mt76_get_field(dev, MT_FL_Q2_CTRL,
-				      GENMASK(27, 16));
-		queued = mt76_get_field(dev, MT_FL_Q3_CTRL,
-					GENMASK(11, 0));
-
-		seq_printf(s, "\t%s: ", map[i].name);
-		seq_printf(s, "queued:0x%03x head:0x%03x tail:0x%03x\n",
-			   queued, head, tail);
-	}
-}
-
-static void
-mt7996_sta_hw_queue_read(void *data, struct ieee80211_sta *sta)
-{
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	struct mt7996_dev *dev = msta->vif->phy->dev;
-	struct seq_file *s = data;
-	u8 ac;
-
-	for (ac = 0; ac < 4; ac++) {
-		u32 qlen, ctrl, val;
-		u32 idx = msta->wcid.idx >> 5;
-		u8 offs = msta->wcid.idx & GENMASK(4, 0);
-
-		ctrl = BIT(31) | BIT(11) | (ac << 24);
-		val = mt76_rr(dev, MT_PLE_AC_QEMPTY(ac, idx));
-
-		if (val & BIT(offs))
-			continue;
-
-		mt76_wr(dev, MT_FL_Q0_CTRL, ctrl | msta->wcid.idx);
-		qlen = mt76_get_field(dev, MT_FL_Q3_CTRL,
-				      GENMASK(11, 0));
-		seq_printf(s, "\tSTA %pM wcid %d: AC%d%d queued:%d\n",
-			   sta->addr, msta->wcid.idx,
-			   msta->vif->mt76.wmm_idx, ac, qlen);
-	}
-}
-
-static int
-mt7996_hw_queues_show(struct seq_file *file, void *data)
-{
-	struct mt7996_phy *phy = file->private;
-	struct mt7996_dev *dev = phy->dev;
-	static const struct hw_queue_map ple_queue_map[] = {
-		{ "CPU_Q0",  0,  1, MT_CTX0	      },
-		{ "CPU_Q1",  1,  1, MT_CTX0 + 1	      },
-		{ "CPU_Q2",  2,  1, MT_CTX0 + 2	      },
-		{ "CPU_Q3",  3,  1, MT_CTX0 + 3	      },
-		{ "ALTX_Q0", 8,  2, MT_LMAC_ALTX0     },
-		{ "BMC_Q0",  9,  2, MT_LMAC_BMC0      },
-		{ "BCN_Q0",  10, 2, MT_LMAC_BCN0      },
-		{ "PSMP_Q0", 11, 2, MT_LMAC_PSMP0     },
-		{ "ALTX_Q1", 12, 2, MT_LMAC_ALTX0 + 4 },
-		{ "BMC_Q1",  13, 2, MT_LMAC_BMC0  + 4 },
-		{ "BCN_Q1",  14, 2, MT_LMAC_BCN0  + 4 },
-		{ "PSMP_Q1", 15, 2, MT_LMAC_PSMP0 + 4 },
-	};
-	static const struct hw_queue_map pse_queue_map[] = {
-		{ "CPU Q0",  0,  1, MT_CTX0	      },
-		{ "CPU Q1",  1,  1, MT_CTX0 + 1	      },
-		{ "CPU Q2",  2,  1, MT_CTX0 + 2	      },
-		{ "CPU Q3",  3,  1, MT_CTX0 + 3	      },
-		{ "HIF_Q0",  8,  0, MT_HIF0	      },
-		{ "HIF_Q1",  9,  0, MT_HIF0 + 1	      },
-		{ "HIF_Q2",  10, 0, MT_HIF0 + 2	      },
-		{ "HIF_Q3",  11, 0, MT_HIF0 + 3	      },
-		{ "HIF_Q4",  12, 0, MT_HIF0 + 4	      },
-		{ "HIF_Q5",  13, 0, MT_HIF0 + 5	      },
-		{ "LMAC_Q",  16, 2, 0		      },
-		{ "MDP_TXQ", 17, 2, 1		      },
-		{ "MDP_RXQ", 18, 2, 2		      },
-		{ "SEC_TXQ", 19, 2, 3		      },
-		{ "SEC_RXQ", 20, 2, 4		      },
-	};
-	u32 val, head, tail;
-
-	/* ple queue */
-	val = mt76_rr(dev, MT_PLE_FREEPG_CNT);
-	head = mt76_get_field(dev, MT_PLE_FREEPG_HEAD_TAIL, GENMASK(11, 0));
-	tail = mt76_get_field(dev, MT_PLE_FREEPG_HEAD_TAIL, GENMASK(27, 16));
-	seq_puts(file, "PLE page info:\n");
-	seq_printf(file,
-		   "\tTotal free page: 0x%08x head: 0x%03x tail: 0x%03x\n",
-		   val, head, tail);
-
-	val = mt76_rr(dev, MT_PLE_PG_HIF_GROUP);
-	head = mt76_get_field(dev, MT_PLE_HIF_PG_INFO, GENMASK(11, 0));
-	tail = mt76_get_field(dev, MT_PLE_HIF_PG_INFO, GENMASK(27, 16));
-	seq_printf(file, "\tHIF free page: 0x%03x res: 0x%03x used: 0x%03x\n",
-		   val, head, tail);
-
-	seq_puts(file, "PLE non-empty queue info:\n");
-	mt7996_hw_queue_read(file, ARRAY_SIZE(ple_queue_map),
-			     &ple_queue_map[0]);
-
-	/* iterate per-sta ple queue */
-	ieee80211_iterate_stations_atomic(phy->mt76->hw,
-					  mt7996_sta_hw_queue_read, file);
-	/* pse queue */
-	seq_puts(file, "PSE non-empty queue info:\n");
-	mt7996_hw_queue_read(file, ARRAY_SIZE(pse_queue_map),
-			     &pse_queue_map[0]);
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7996_hw_queues);
-
-static int
-mt7996_xmit_queues_show(struct seq_file *file, void *data)
-{
-	struct mt7996_phy *phy = file->private;
-	struct mt7996_dev *dev = phy->dev;
-	struct {
-		struct mt76_queue *q;
-		char *queue;
-	} queue_map[] = {
-		{ phy->mt76->q_tx[MT_TXQ_BE],	 "   MAIN"  },
-		{ dev->mt76.q_mcu[MT_MCUQ_WM],	 "  MCUWM"  },
-		{ dev->mt76.q_mcu[MT_MCUQ_WA],	 "  MCUWA"  },
-		{ dev->mt76.q_mcu[MT_MCUQ_FWDL], "MCUFWDL" },
-	};
-	int i;
-
-	seq_puts(file, "     queue | hw-queued |      head |      tail |\n");
-	for (i = 0; i < ARRAY_SIZE(queue_map); i++) {
-		struct mt76_queue *q = queue_map[i].q;
-
-		if (!q)
-			continue;
-
-		seq_printf(file, "   %s | %9d | %9d | %9d |\n",
-			   queue_map[i].queue, q->queued, q->head,
-			   q->tail);
-	}
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7996_xmit_queues);
-
-static int
-mt7996_twt_stats(struct seq_file *s, void *data)
-{
-	struct mt7996_dev *dev = dev_get_drvdata(s->private);
-	struct mt7996_twt_flow *iter;
-
-	rcu_read_lock();
-
-	seq_puts(s, "     wcid |       id |    flags |      exp | mantissa");
-	seq_puts(s, " | duration |            tsf |\n");
-	list_for_each_entry_rcu(iter, &dev->twt_list, list)
-		seq_printf(s,
-			"%9d | %8d | %5c%c%c%c | %8d | %8d | %8d | %14lld |\n",
-			iter->wcid, iter->id,
-			iter->sched ? 's' : 'u',
-			iter->protection ? 'p' : '-',
-			iter->trigger ? 't' : '-',
-			iter->flowtype ? '-' : 'a',
-			iter->exp, iter->mantissa,
-			iter->duration, iter->tsf);
-
-	rcu_read_unlock();
-
-	return 0;
-}
-
-/* The index of RF registers use the generic regidx, combined with two parts:
- * WF selection [31:24] and offset [23:0].
- */
-static int
-mt7996_rf_regval_get(void *data, u64 *val)
-{
-	struct mt7996_dev *dev = data;
-	u32 regval;
-	int ret;
-
-	ret = mt7996_mcu_rf_regval(dev, dev->mt76.debugfs_reg, &regval, false);
-	if (ret)
-		return ret;
-
-	*val = le32_to_cpu(regval);
-
-	return 0;
-}
-
-static int
-mt7996_rf_regval_set(void *data, u64 val)
-{
-	struct mt7996_dev *dev = data;
-
-	return mt7996_mcu_rf_regval(dev, dev->mt76.debugfs_reg, (u32 *)&val, true);
-}
-
-DEFINE_DEBUGFS_ATTRIBUTE(fops_rf_regval, mt7996_rf_regval_get,
-			 mt7996_rf_regval_set, "0x%08llx\n");
-
-int mt7996_init_debugfs(struct mt7996_phy *phy)
-{
-	struct mt7996_dev *dev = phy->dev;
-	struct dentry *dir;
-
-	dir = mt76_register_debugfs_fops(phy->mt76, NULL);
-	if (!dir)
-		return -ENOMEM;
-	debugfs_create_file("hw-queues", 0400, dir, phy,
-			    &mt7996_hw_queues_fops);
-	debugfs_create_file("xmit-queues", 0400, dir, phy,
-			    &mt7996_xmit_queues_fops);
-	debugfs_create_file("tx_stats", 0400, dir, phy, &mt7996_tx_stats_fops);
-	debugfs_create_file("fw_debug_wm", 0600, dir, dev, &fops_fw_debug_wm);
-	debugfs_create_file("fw_debug_wa", 0600, dir, dev, &fops_fw_debug_wa);
-	debugfs_create_file("fw_debug_bin", 0600, dir, dev, &fops_fw_debug_bin);
-	/* TODO: wm fw cpu utilization */
-	debugfs_create_file("fw_util_wa", 0400, dir, dev,
-			    &mt7996_fw_util_wa_fops);
-	debugfs_create_file("implicit_txbf", 0600, dir, dev,
-			    &fops_implicit_txbf);
-	debugfs_create_devm_seqfile(dev->mt76.dev, "twt_stats", dir,
-				    mt7996_twt_stats);
-	debugfs_create_file("fw_ser", 0200, dir, dev, &fops_fw_ser);
-	debugfs_create_file("rf_regval", 0600, dir, dev, &fops_rf_regval);
-
-	if (phy->mt76->cap.has_5ghz) {
-		debugfs_create_u32("dfs_hw_pattern", 0400, dir,
-				   &dev->hw_pattern);
-		debugfs_create_file("radar_trigger", 0200, dir, dev,
-				    &fops_radar_trigger);
-		debugfs_create_devm_seqfile(dev->mt76.dev, "rdd_monitor", dir,
-					    mt7996_rdd_monitor);
-	}
-
-	if (phy == &dev->phy)
-		dev->debugfs_dir = dir;
-
-	return 0;
-}
-
-static void
-mt7996_debugfs_write_fwlog(struct mt7996_dev *dev, const void *hdr, int hdrlen,
-			   const void *data, int len)
-{
-	static DEFINE_SPINLOCK(lock);
-	unsigned long flags;
-	void *dest;
-
-	spin_lock_irqsave(&lock, flags);
-	dest = relay_reserve(dev->relay_fwlog, hdrlen + len + 4);
-	if (dest) {
-		*(u32 *)dest = hdrlen + len;
-		dest += 4;
-
-		if (hdrlen) {
-			memcpy(dest, hdr, hdrlen);
-			dest += hdrlen;
-		}
-
-		memcpy(dest, data, len);
-		relay_flush(dev->relay_fwlog);
-	}
-	spin_unlock_irqrestore(&lock, flags);
-}
-
-void mt7996_debugfs_rx_fw_monitor(struct mt7996_dev *dev, const void *data, int len)
-{
-	struct {
-		__le32 magic;
-		u8 version;
-		u8 _rsv;
-		__le16 serial_id;
-		__le32 timestamp;
-		__le16 msg_type;
-		__le16 len;
-	} hdr = {
-		.version = 0x1,
-		.magic = cpu_to_le32(FW_BIN_LOG_MAGIC),
-		.msg_type = cpu_to_le16(PKT_TYPE_RX_FW_MONITOR),
-	};
-
-	if (!dev->relay_fwlog)
-		return;
-
-	hdr.serial_id = cpu_to_le16(dev->fw_debug_seq++);
-	hdr.timestamp = cpu_to_le32(mt76_rr(dev, MT_LPON_FRCR(0)));
-	hdr.len = *(__le16 *)data;
-	mt7996_debugfs_write_fwlog(dev, &hdr, sizeof(hdr), data, len);
-}
-
-bool mt7996_debugfs_rx_log(struct mt7996_dev *dev, const void *data, int len)
-{
-	if (get_unaligned_le32(data) != FW_BIN_LOG_MAGIC)
-		return false;
-
-	if (dev->relay_fwlog)
-		mt7996_debugfs_write_fwlog(dev, NULL, 0, data, len);
-
-	return true;
-}
-
-#ifdef CONFIG_MAC80211_DEBUGFS
-/** per-station debugfs **/
-
-static ssize_t mt7996_sta_fixed_rate_set(struct file *file,
-					 const char __user *user_buf,
-					 size_t count, loff_t *ppos)
-{
-#define SHORT_PREAMBLE 0
-#define LONG_PREAMBLE 1
-	struct ieee80211_sta *sta = file->private_data;
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	struct mt7996_dev *dev = msta->vif->phy->dev;
-	struct ra_rate phy = {};
-	char buf[100];
-	int ret;
-	u16 gi, ltf;
-
-	if (count >= sizeof(buf))
-		return -EINVAL;
-
-	if (copy_from_user(buf, user_buf, count))
-		return -EFAULT;
-
-	if (count && buf[count - 1] == '\n')
-		buf[count - 1] = '\0';
-	else
-		buf[count] = '\0';
-
-	/* mode - cck: 0, ofdm: 1, ht: 2, gf: 3, vht: 4, he_su: 8, he_er: 9
-	 * bw - bw20: 0, bw40: 1, bw80: 2, bw160: 3
-	 * nss - vht: 1~4, he: 1~4, others: ignore
-	 * mcs - cck: 0~4, ofdm: 0~7, ht: 0~32, vht: 0~9, he_su: 0~11, he_er: 0~2
-	 * gi - (ht/vht) lgi: 0, sgi: 1; (he) 0.8us: 0, 1.6us: 1, 3.2us: 2
-	 * preamble - short: 1, long: 0
-	 * ldpc - off: 0, on: 1
-	 * stbc - off: 0, on: 1
-	 * ltf - 1xltf: 0, 2xltf: 1, 4xltf: 2
-	 */
-	if (sscanf(buf, "%hhu %hhu %hhu %hhu %hu %hhu %hhu %hhu %hhu %hu",
-		   &phy.mode, &phy.bw, &phy.mcs, &phy.nss, &gi,
-		   &phy.preamble, &phy.stbc, &phy.ldpc, &phy.spe, &ltf) != 10) {
-		dev_warn(dev->mt76.dev,
-			 "format: Mode BW MCS NSS GI Preamble STBC LDPC SPE ltf\n");
-		goto out;
-	}
-
-	phy.wlan_idx = cpu_to_le16(msta->wcid.idx);
-	phy.gi = cpu_to_le16(gi);
-	phy.ltf = cpu_to_le16(ltf);
-	phy.ldpc = phy.ldpc ? 7 : 0;
-	phy.preamble = phy.preamble ? SHORT_PREAMBLE : LONG_PREAMBLE;
-
-	ret = mt7996_mcu_set_fixed_rate_ctrl(dev, &phy, 0);
-	if (ret)
-		return -EFAULT;
-
-out:
-	return count;
-}
-
-static const struct file_operations fops_fixed_rate = {
-	.write = mt7996_sta_fixed_rate_set,
-	.open = simple_open,
-	.owner = THIS_MODULE,
-	.llseek = default_llseek,
-};
-
-static int
-mt7996_queues_show(struct seq_file *s, void *data)
-{
-	struct ieee80211_sta *sta = s->private;
-
-	mt7996_sta_hw_queue_read(s, sta);
-
-	return 0;
-}
-
-DEFINE_SHOW_ATTRIBUTE(mt7996_queues);
-
-void mt7996_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			    struct ieee80211_sta *sta, struct dentry *dir)
-{
-	debugfs_create_file("fixed_rate", 0600, dir, sta, &fops_fixed_rate);
-	debugfs_create_file("hw-queues", 0400, dir, sta, &mt7996_queues_fops);
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/dma.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/dma.c
deleted file mode 100644
index 4d45dc5..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/dma.c
+++ /dev/null
@@ -1,360 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#include "mt7996.h"
-#include "../dma.h"
-#include "mac.h"
-
-static int mt7996_poll_tx(struct napi_struct *napi, int budget)
-{
-	struct mt7996_dev *dev;
-
-	dev = container_of(napi, struct mt7996_dev, mt76.tx_napi);
-
-	mt76_connac_tx_cleanup(&dev->mt76);
-	if (napi_complete_done(napi, 0))
-		mt7996_irq_enable(dev, MT_INT_TX_DONE_MCU);
-
-	return 0;
-}
-
-static void mt7996_dma_config(struct mt7996_dev *dev)
-{
-#define Q_CONFIG(q, wfdma, int, id) do {			\
-		if (wfdma)					\
-			dev->q_wfdma_mask |= (1 << (q));	\
-		dev->q_int_mask[(q)] = int;			\
-		dev->q_id[(q)] = id;				\
-	} while (0)
-
-#define MCUQ_CONFIG(q, wfdma, int, id)	Q_CONFIG(q, (wfdma), (int), (id))
-#define RXQ_CONFIG(q, wfdma, int, id)	Q_CONFIG(__RXQ(q), (wfdma), (int), (id))
-#define TXQ_CONFIG(q, wfdma, int, id)	Q_CONFIG(__TXQ(q), (wfdma), (int), (id))
-
-	/* rx queue */
-	RXQ_CONFIG(MT_RXQ_MCU, WFDMA0, MT_INT_RX_DONE_WM, MT7996_RXQ_MCU_WM);
-	RXQ_CONFIG(MT_RXQ_MCU_WA, WFDMA0, MT_INT_RX_DONE_WA, MT7996_RXQ_MCU_WA);
-
-	/* band0/band1 */
-	RXQ_CONFIG(MT_RXQ_MAIN, WFDMA0, MT_INT_RX_DONE_BAND0, MT7996_RXQ_BAND0);
-	RXQ_CONFIG(MT_RXQ_MAIN_WA, WFDMA0, MT_INT_RX_DONE_WA_MAIN, MT7996_RXQ_MCU_WA_MAIN);
-
-	/* band2 */
-	RXQ_CONFIG(MT_RXQ_BAND2, WFDMA0, MT_INT_RX_DONE_BAND2, MT7996_RXQ_BAND2);
-	RXQ_CONFIG(MT_RXQ_BAND2_WA, WFDMA0, MT_INT_RX_DONE_WA_TRI, MT7996_RXQ_MCU_WA_TRI);
-
-	/* data tx queue */
-	TXQ_CONFIG(0, WFDMA0, MT_INT_TX_DONE_BAND0, MT7996_TXQ_BAND0);
-	TXQ_CONFIG(1, WFDMA0, MT_INT_TX_DONE_BAND1, MT7996_TXQ_BAND1);
-	TXQ_CONFIG(2, WFDMA0, MT_INT_TX_DONE_BAND2, MT7996_TXQ_BAND2);
-
-	/* mcu tx queue */
-	MCUQ_CONFIG(MT_MCUQ_WM, WFDMA0, MT_INT_TX_DONE_MCU_WM, MT7996_TXQ_MCU_WM);
-	MCUQ_CONFIG(MT_MCUQ_WA, WFDMA0, MT_INT_TX_DONE_MCU_WA, MT7996_TXQ_MCU_WA);
-	MCUQ_CONFIG(MT_MCUQ_FWDL, WFDMA0, MT_INT_TX_DONE_FWDL, MT7996_TXQ_FWDL);
-}
-
-static void __mt7996_dma_prefetch(struct mt7996_dev *dev, u32 ofs)
-{
-#define PREFETCH(_base, _depth)	((_base) << 16 | (_depth))
-	/* prefetch SRAM wrapping boundary for tx/rx ring. */
-	mt76_wr(dev, MT_MCUQ_EXT_CTRL(MT_MCUQ_FWDL) + ofs, PREFETCH(0x0, 0x2));
-	mt76_wr(dev, MT_MCUQ_EXT_CTRL(MT_MCUQ_WM) + ofs, PREFETCH(0x20, 0x2));
-	mt76_wr(dev, MT_TXQ_EXT_CTRL(0) + ofs, PREFETCH(0x40, 0x4));
-	mt76_wr(dev, MT_TXQ_EXT_CTRL(1) + ofs, PREFETCH(0x80, 0x4));
-	mt76_wr(dev, MT_MCUQ_EXT_CTRL(MT_MCUQ_WA) + ofs, PREFETCH(0xc0, 0x2));
-	mt76_wr(dev, MT_TXQ_EXT_CTRL(2) + ofs, PREFETCH(0xe0, 0x4));
-	mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MCU) + ofs, PREFETCH(0x120, 0x2));
-	mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MCU_WA) + ofs, PREFETCH(0x140, 0x2));
-	mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MAIN_WA) + ofs, PREFETCH(0x160, 0x2));
-	mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_BAND2_WA) + ofs, PREFETCH(0x180, 0x2));
-	mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_MAIN) + ofs, PREFETCH(0x1a0, 0x10));
-	mt76_wr(dev, MT_RXQ_BAND1_CTRL(MT_RXQ_BAND2) + ofs, PREFETCH(0x2a0, 0x10));
-
-	mt76_set(dev, WF_WFDMA0_GLO_CFG_EXT1 + ofs, WF_WFDMA0_GLO_CFG_EXT1_CALC_MODE);
-}
-
-void mt7996_dma_prefetch(struct mt7996_dev *dev)
-{
-	__mt7996_dma_prefetch(dev, 0);
-	if (dev->hif2)
-		__mt7996_dma_prefetch(dev, MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0));
-}
-
-static void mt7996_dma_disable(struct mt7996_dev *dev, bool reset)
-{
-	u32 hif1_ofs = 0;
-
-	if (dev->hif2)
-		hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
-
-	if (reset) {
-		mt76_clear(dev, MT_WFDMA0_RST,
-			   MT_WFDMA0_RST_DMASHDL_ALL_RST |
-			   MT_WFDMA0_RST_LOGIC_RST);
-
-		mt76_set(dev, MT_WFDMA0_RST,
-			 MT_WFDMA0_RST_DMASHDL_ALL_RST |
-			 MT_WFDMA0_RST_LOGIC_RST);
-
-		if (dev->hif2) {
-			mt76_clear(dev, MT_WFDMA0_RST + hif1_ofs,
-				   MT_WFDMA0_RST_DMASHDL_ALL_RST |
-				   MT_WFDMA0_RST_LOGIC_RST);
-
-			mt76_set(dev, MT_WFDMA0_RST + hif1_ofs,
-				 MT_WFDMA0_RST_DMASHDL_ALL_RST |
-				 MT_WFDMA0_RST_LOGIC_RST);
-		}
-	}
-
-	/* disable */
-	mt76_clear(dev, MT_WFDMA0_GLO_CFG,
-		   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-		   MT_WFDMA0_GLO_CFG_RX_DMA_EN |
-		   MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-		   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO |
-		   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
-
-	if (dev->hif2) {
-		mt76_clear(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
-			   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-			   MT_WFDMA0_GLO_CFG_RX_DMA_EN |
-			   MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-			   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO |
-			   MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
-	}
-}
-
-static int mt7996_dma_enable(struct mt7996_dev *dev)
-{
-	u32 hif1_ofs = 0;
-	u32 irq_mask;
-
-	if (dev->hif2)
-		hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
-
-	/* reset dma idx */
-	mt76_wr(dev, MT_WFDMA0_RST_DTX_PTR, ~0);
-	if (dev->hif2)
-		mt76_wr(dev, MT_WFDMA0_RST_DTX_PTR + hif1_ofs, ~0);
-
-	/* configure delay interrupt off */
-	mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG0, 0);
-	mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG1, 0);
-	mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG2, 0);
-
-	if (dev->hif2) {
-		mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG0 + hif1_ofs, 0);
-		mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG1 + hif1_ofs, 0);
-		mt76_wr(dev, MT_WFDMA0_PRI_DLY_INT_CFG2 + hif1_ofs, 0);
-	}
-
-	/* configure perfetch settings */
-	mt7996_dma_prefetch(dev);
-
-	/* hif wait WFDMA idle */
-	mt76_set(dev, MT_WFDMA0_BUSY_ENA,
-		 MT_WFDMA0_BUSY_ENA_TX_FIFO0 |
-		 MT_WFDMA0_BUSY_ENA_TX_FIFO1 |
-		 MT_WFDMA0_BUSY_ENA_RX_FIFO);
-
-	if (dev->hif2)
-		mt76_set(dev, MT_WFDMA0_BUSY_ENA + hif1_ofs,
-			 MT_WFDMA0_PCIE1_BUSY_ENA_TX_FIFO0 |
-			 MT_WFDMA0_PCIE1_BUSY_ENA_TX_FIFO1 |
-			 MT_WFDMA0_PCIE1_BUSY_ENA_RX_FIFO);
-
-	mt76_poll(dev, MT_WFDMA_EXT_CSR_HIF_MISC,
-		  MT_WFDMA_EXT_CSR_HIF_MISC_BUSY, 0, 1000);
-
-	/* set WFDMA Tx/Rx */
-	mt76_set(dev, MT_WFDMA0_GLO_CFG,
-		 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-		 MT_WFDMA0_GLO_CFG_RX_DMA_EN |
-		 MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-		 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
-
-	/* GLO_CFG_EXT0 */
-	mt76_set(dev, WF_WFDMA0_GLO_CFG_EXT0,
-		WF_WFDMA0_GLO_CFG_EXT0_RX_WB_RXD |
-		WF_WFDMA0_GLO_CFG_EXT0_WED_MERGE_MODE);
-
-	/* GLO_CFG_EXT1 */
-	mt76_set(dev, WF_WFDMA0_GLO_CFG_EXT1,
-		WF_WFDMA0_GLO_CFG_EXT1_TX_FCTRL_MODE);
-
-	if (dev->hif2) {
-		mt76_set(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
-			 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-			 MT_WFDMA0_GLO_CFG_RX_DMA_EN |
-			 MT_WFDMA0_GLO_CFG_OMIT_TX_INFO |
-			 MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2);
-
-		/* GLO_CFG_EXT0 */
-		mt76_set(dev, WF_WFDMA0_GLO_CFG_EXT0 + hif1_ofs,
-			WF_WFDMA0_GLO_CFG_EXT0_RX_WB_RXD |
-			WF_WFDMA0_GLO_CFG_EXT0_WED_MERGE_MODE);
-
-		/* GLO_CFG_EXT1 */
-		mt76_set(dev, WF_WFDMA0_GLO_CFG_EXT1 + hif1_ofs,
-			WF_WFDMA0_GLO_CFG_EXT1_TX_FCTRL_MODE);
-
-		mt76_set(dev, MT_WFDMA_HOST_CONFIG,
-			 MT_WFDMA_HOST_CONFIG_PDMA_BAND);
-	}
-
-	if (dev->hif2) {
-		/* fix hardware limitation, pcie1's rx ring3 is not available
-		 * so, redirect pcie0 rx ring3 interrupt to pcie1
-		 */
-		mt76_set(dev, MT_WFDMA0_RX_INT_PCIE_SEL,
-			 MT_WFDMA0_RX_INT_SEL_RING3);
-
-		/* TODO: redirect rx ring6 interrupt to pcie0 for wed function */
-	}
-
-	/* enable interrupts for TX/RX rings */
-	irq_mask = MT_INT_RX_DONE_MCU |
-		   MT_INT_TX_DONE_MCU |
-		   MT_INT_MCU_CMD;
-
-	if (!dev->mphy.band_idx)
-		irq_mask |= MT_INT_BAND0_RX_DONE;
-
-	if (dev->dbdc_support)
-		irq_mask |= MT_INT_BAND1_RX_DONE;
-
-	if (dev->tbtc_support)
-		irq_mask |= MT_INT_BAND2_RX_DONE;
-
-	mt7996_irq_enable(dev, irq_mask);
-
-	return 0;
-}
-
-int mt7996_dma_init(struct mt7996_dev *dev)
-{
-	u32 hif1_ofs = 0;
-	int ret;
-
-	mt7996_dma_config(dev);
-
-	mt76_dma_attach(&dev->mt76);
-
-	if (dev->hif2)
-		hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
-
-	mt7996_dma_disable(dev, true);
-
-	/* init tx queue */
-	ret = mt76_connac_init_tx_queues(dev->phy.mt76,
-					 MT_TXQ_ID(dev->mphy.band_idx),
-					 MT7996_TX_RING_SIZE,
-					 MT_TXQ_RING_BASE(0), 0);
-	if (ret)
-		return ret;
-
-	/* command to WM */
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WM,
-				  MT_MCUQ_ID(MT_MCUQ_WM),
-				  MT7996_TX_MCU_RING_SIZE,
-				  MT_MCUQ_RING_BASE(MT_MCUQ_WM));
-	if (ret)
-		return ret;
-
-	/* command to WA */
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WA,
-				  MT_MCUQ_ID(MT_MCUQ_WA),
-				  MT7996_TX_MCU_RING_SIZE,
-				  MT_MCUQ_RING_BASE(MT_MCUQ_WA));
-	if (ret)
-		return ret;
-
-	/* firmware download */
-	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_FWDL,
-				  MT_MCUQ_ID(MT_MCUQ_FWDL),
-				  MT7996_TX_FWDL_RING_SIZE,
-				  MT_MCUQ_RING_BASE(MT_MCUQ_FWDL));
-	if (ret)
-		return ret;
-
-	/* event from WM */
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU],
-			       MT_RXQ_ID(MT_RXQ_MCU),
-			       MT7996_RX_MCU_RING_SIZE,
-			       MT_RX_BUF_SIZE,
-			       MT_RXQ_RING_BASE(MT_RXQ_MCU));
-	if (ret)
-		return ret;
-
-	/* event from WA */
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU_WA],
-			       MT_RXQ_ID(MT_RXQ_MCU_WA),
-			       MT7996_RX_MCU_RING_SIZE,
-			       MT_RX_BUF_SIZE,
-			       MT_RXQ_RING_BASE(MT_RXQ_MCU_WA));
-	if (ret)
-		return ret;
-
-	/* rx data queue for band0 and band1 */
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN],
-			       MT_RXQ_ID(MT_RXQ_MAIN),
-			       MT7996_RX_RING_SIZE,
-			       MT_RX_BUF_SIZE,
-			       MT_RXQ_RING_BASE(MT_RXQ_MAIN));
-	if (ret)
-		return ret;
-
-	/* tx free notify event from WA for band0 */
-	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN_WA],
-			       MT_RXQ_ID(MT_RXQ_MAIN_WA),
-			       MT7996_RX_MCU_RING_SIZE,
-			       MT_RX_BUF_SIZE,
-			       MT_RXQ_RING_BASE(MT_RXQ_MAIN_WA));
-	if (ret)
-		return ret;
-
-	if (dev->tbtc_support || (dev->mphy.band_idx == MT_BAND2)) {
-		/* rx data queue for band2 */
-		ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_BAND2],
-				       MT_RXQ_ID(MT_RXQ_BAND2),
-				       MT7996_RX_RING_SIZE,
-				       MT_RX_BUF_SIZE,
-				       MT_RXQ_RING_BASE(MT_RXQ_BAND2) + hif1_ofs);
-		if (ret)
-			return ret;
-
-		/* tx free notify event from WA for band2
-		 * use pcie0's rx ring3, but, redirect pcie0 rx ring3 interrupt to pcie1
-		 */
-		ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_BAND2_WA],
-				       MT_RXQ_ID(MT_RXQ_BAND2_WA),
-				       MT7996_RX_MCU_RING_SIZE,
-				       MT_RX_BUF_SIZE,
-				       MT_RXQ_RING_BASE(MT_RXQ_BAND2_WA));
-		if (ret)
-			return ret;
-	}
-
-	ret = mt76_init_queues(dev, mt76_dma_rx_poll);
-	if (ret < 0)
-		return ret;
-
-	netif_tx_napi_add(&dev->mt76.tx_napi_dev, &dev->mt76.tx_napi,
-			  mt7996_poll_tx, NAPI_POLL_WEIGHT);
-	napi_enable(&dev->mt76.tx_napi);
-
-	mt7996_dma_enable(dev);
-
-	return 0;
-}
-
-void mt7996_dma_cleanup(struct mt7996_dev *dev)
-{
-	mt7996_dma_disable(dev, true);
-
-	mt76_dma_cleanup(&dev->mt76);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/eeprom.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/eeprom.c
deleted file mode 100644
index b9f62be..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/eeprom.c
+++ /dev/null
@@ -1,229 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#include <linux/firmware.h>
-#include "mt7996.h"
-#include "eeprom.h"
-
-static int mt7996_check_eeprom(struct mt7996_dev *dev)
-{
-	u8 *eeprom = dev->mt76.eeprom.data;
-	u16 val = get_unaligned_le16(eeprom);
-
-	switch (val) {
-	case 0x7990:
-		return 0;
-	default:
-		return -EINVAL;
-	}
-}
-
-static char *mt7996_eeprom_name(struct mt7996_dev *dev)
-{
-	/* reserve for future variants */
-	return MT7996_EEPROM_DEFAULT;
-}
-
-static int
-mt7996_eeprom_load_default(struct mt7996_dev *dev)
-{
-	u8 *eeprom = dev->mt76.eeprom.data;
-	const struct firmware *fw = NULL;
-	int ret;
-
-	ret = request_firmware(&fw, mt7996_eeprom_name(dev), dev->mt76.dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data) {
-		dev_err(dev->mt76.dev, "Invalid default bin\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	memcpy(eeprom, fw->data, MT7996_EEPROM_SIZE);
-	dev->flash_mode = true;
-
-out:
-	release_firmware(fw);
-
-	return ret;
-}
-
-static int mt7996_eeprom_load(struct mt7996_dev *dev)
-{
-	int ret;
-
-	ret = mt76_eeprom_init(&dev->mt76, MT7996_EEPROM_SIZE);
-	if (ret < 0)
-		return ret;
-
-	if (ret) {
-		dev->flash_mode = true;
-	} else {
-		u8 free_block_num;
-		u32 block_num, i;
-
-		/* TODO: check free block event */
-		mt7996_mcu_get_eeprom_free_block(dev, &free_block_num);
-		/* efuse info not enough */
-		if (free_block_num >= 59)
-			return -EINVAL;
-
-		/* read eeprom data from efuse */
-		block_num = DIV_ROUND_UP(MT7996_EEPROM_SIZE, MT7996_EEPROM_BLOCK_SIZE);
-		for (i = 0; i < block_num; i++)
-			mt7996_mcu_get_eeprom(dev, i * MT7996_EEPROM_BLOCK_SIZE);
-	}
-
-	return mt7996_check_eeprom(dev);
-}
-
-static int mt7996_eeprom_parse_band_config(struct mt7996_phy *phy)
-{
-	u8 *eeprom = phy->dev->mt76.eeprom.data;
-	u32 val = eeprom[MT_EE_WIFI_CONF];
-	int ret = 0;
-
-	switch (phy->mt76->band_idx) {
-	case MT_BAND1:
-		val = FIELD_GET(MT_EE_WIFI_CONF1_BAND_SEL, val);
-		break;
-	case MT_BAND2:
-		val = eeprom[MT_EE_WIFI_CONF + 1];
-		val = FIELD_GET(MT_EE_WIFI_CONF2_BAND_SEL, val);
-		break;
-	default:
-		val = FIELD_GET(MT_EE_WIFI_CONF0_BAND_SEL, val);
-		break;
-	}
-
-	switch (val) {
-	case MT_EE_BAND_SEL_2GHZ:
-		phy->mt76->cap.has_2ghz = true;
-		break;
-	case MT_EE_BAND_SEL_5GHZ:
-		phy->mt76->cap.has_5ghz = true;
-		break;
-	case MT_EE_BAND_SEL_6GHZ:
-		phy->mt76->cap.has_6ghz = true;
-		break;
-	case MT_EE_BAND_SEL_5GHZ_6GHZ:
-		phy->mt76->cap.has_5ghz = true;
-		phy->mt76->cap.has_6ghz = true;
-		break;
-	default:
-		ret = -EINVAL;
-		break;
-	}
-
-	return ret;
-}
-
-int mt7996_eeprom_parse_hw_cap(struct mt7996_dev *dev, struct mt7996_phy *phy)
-{
-	u8 path, nss, band_idx = phy->mt76->band_idx;
-	u8 *eeprom = dev->mt76.eeprom.data;
-	struct mt76_phy *mphy = phy->mt76;
-
-	switch (band_idx) {
-	case MT_BAND1:
-		path = FIELD_GET(MT_EE_WIFI_CONF2_TX_PATH_BAND1,
-				 eeprom[MT_EE_WIFI_CONF + 2]);
-		nss = FIELD_GET(MT_EE_WIFI_CONF5_STREAM_NUM_BAND1,
-				eeprom[MT_EE_WIFI_CONF + 5]);
-		break;
-	case MT_BAND2:
-		path = FIELD_GET(MT_EE_WIFI_CONF2_TX_PATH_BAND2,
-				 eeprom[MT_EE_WIFI_CONF + 2]);
-		nss = FIELD_GET(MT_EE_WIFI_CONF5_STREAM_NUM_BAND2,
-				eeprom[MT_EE_WIFI_CONF + 5]);
-		break;
-	default:
-		path = FIELD_GET(MT_EE_WIFI_CONF1_TX_PATH_BAND0,
-				 eeprom[MT_EE_WIFI_CONF + 1]);
-		nss = FIELD_GET(MT_EE_WIFI_CONF4_STREAM_NUM_BAND0,
-				eeprom[MT_EE_WIFI_CONF + 4]);
-		break;
-	}
-
-	if (!path || path > 4)
-		path = 4;
-
-	nss = min_t(u8, min_t(u8, 4, nss), path);
-
-	mphy->antenna_mask = BIT(nss) - 1;
-	mphy->chainmask = (BIT(path) - 1) << dev->chainshift[band_idx];
-	dev->chainmask |= mphy->chainmask;
-	if (band_idx < MT_BAND2)
-		dev->chainshift[band_idx + 1] = dev->chainshift[band_idx] +
-						hweight16(mphy->chainmask);
-
-	return mt7996_eeprom_parse_band_config(phy);
-}
-
-int mt7996_eeprom_init(struct mt7996_dev *dev)
-{
-	int ret;
-
-	ret = mt7996_eeprom_load(dev);
-	if (ret < 0) {
-		if (ret != -EINVAL)
-			return ret;
-
-		dev_warn(dev->mt76.dev, "eeprom load fail, use default bin\n");
-		ret = mt7996_eeprom_load_default(dev);
-		if (ret)
-			return ret;
-	}
-
-	ret = mt7996_eeprom_parse_hw_cap(dev, &dev->phy);
-	if (ret < 0)
-		return ret;
-
-	memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR, ETH_ALEN);
-	mt76_eeprom_override(&dev->mphy);
-
-	return 0;
-}
-
-int mt7996_eeprom_get_target_power(struct mt7996_dev *dev,
-				   struct ieee80211_channel *chan)
-{
-	u8 *eeprom = dev->mt76.eeprom.data;
-	int target_power;
-
-	if (chan->band == NL80211_BAND_5GHZ)
-		target_power = eeprom[MT_EE_TX0_POWER_5G +
-				      mt7996_get_channel_group_5g(chan->hw_value)];
-	else if (chan->band == NL80211_BAND_6GHZ)
-		target_power = eeprom[MT_EE_TX0_POWER_6G +
-				      mt7996_get_channel_group_6g(chan->hw_value)];
-	else
-		target_power = eeprom[MT_EE_TX0_POWER_2G];
-
-	return target_power;
-}
-
-s8 mt7996_eeprom_get_power_delta(struct mt7996_dev *dev, int band)
-{
-	u8 *eeprom = dev->mt76.eeprom.data;
-	u32 val;
-	s8 delta;
-
-	if (band == NL80211_BAND_5GHZ)
-		val = eeprom[MT_EE_RATE_DELTA_5G];
-	else if (band == NL80211_BAND_6GHZ)
-		val = eeprom[MT_EE_RATE_DELTA_6G];
-	else
-		val = eeprom[MT_EE_RATE_DELTA_2G];
-
-	if (!(val & MT_EE_RATE_DELTA_EN))
-		return 0;
-
-	delta = FIELD_GET(MT_EE_RATE_DELTA_MASK, val);
-
-	return val & MT_EE_RATE_DELTA_SIGN ? delta : -delta;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/eeprom.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/eeprom.h
deleted file mode 100644
index 8da599e..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/eeprom.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#ifndef __MT7996_EEPROM_H
-#define __MT7996_EEPROM_H
-
-#include "mt7996.h"
-
-enum mt7996_eeprom_field {
-	MT_EE_CHIP_ID =		0x000,
-	MT_EE_VERSION =		0x002,
-	MT_EE_MAC_ADDR =	0x004,
-	MT_EE_MAC_ADDR2 =	0x00a,
-	MT_EE_WIFI_CONF =	0x190,
-	MT_EE_MAC_ADDR3 =	0x2c0,
-	MT_EE_RATE_DELTA_2G =	0x1400,
-	MT_EE_RATE_DELTA_5G =	0x147d,
-	MT_EE_RATE_DELTA_6G =	0x154a,
-	MT_EE_TX0_POWER_2G =	0x1300,
-	MT_EE_TX0_POWER_5G =	0x1301,
-	MT_EE_TX0_POWER_6G =	0x1310,
-
-	__MT_EE_MAX =	0x1dff,
-};
-
-#define MT_EE_WIFI_CONF0_TX_PATH		GENMASK(2, 0)
-#define MT_EE_WIFI_CONF0_BAND_SEL		GENMASK(2, 0)
-#define MT_EE_WIFI_CONF1_BAND_SEL		GENMASK(5, 3)
-#define MT_EE_WIFI_CONF2_BAND_SEL		GENMASK(2, 0)
-
-#define MT_EE_WIFI_CONF1_TX_PATH_BAND0		GENMASK(5, 3)
-#define MT_EE_WIFI_CONF2_TX_PATH_BAND1		GENMASK(5, 3)
-#define MT_EE_WIFI_CONF2_TX_PATH_BAND2		GENMASK(2, 0)
-#define MT_EE_WIFI_CONF4_STREAM_NUM_BAND0	GENMASK(5, 3)
-#define MT_EE_WIFI_CONF5_STREAM_NUM_BAND1	GENMASK(5, 3)
-#define MT_EE_WIFI_CONF5_STREAM_NUM_BAND2	GENMASK(2, 0)
-
-#define MT_EE_RATE_DELTA_MASK			GENMASK(5, 0)
-#define MT_EE_RATE_DELTA_SIGN			BIT(6)
-#define MT_EE_RATE_DELTA_EN			BIT(7)
-
-enum mt7996_eeprom_band {
-	MT_EE_BAND_SEL_DEFAULT,
-	MT_EE_BAND_SEL_2GHZ,
-	MT_EE_BAND_SEL_5GHZ,
-	MT_EE_BAND_SEL_6GHZ,
-	MT_EE_BAND_SEL_5GHZ_6GHZ,
-};
-
-static inline int
-mt7996_get_channel_group_5g(int channel)
-{
-	if (channel <= 64)
-		return 0;
-	if (channel <= 96)
-		return 1;
-	if (channel <= 128)
-		return 2;
-	if (channel <= 144)
-		return 3;
-	return 4;
-}
-
-static inline int
-mt7996_get_channel_group_6g(int channel)
-{
-	if (channel <= 29)
-		return 0;
-
-	return DIV_ROUND_UP(channel - 29, 32);
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/init.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/init.c
deleted file mode 100644
index e88b8f4..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/init.c
+++ /dev/null
@@ -1,816 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#include <linux/etherdevice.h>
-#include <linux/thermal.h>
-#include "mt7996.h"
-#include "mac.h"
-#include "mcu.h"
-#include "eeprom.h"
-
-static const struct ieee80211_iface_limit if_limits[] = {
-	{
-		.max = 1,
-		.types = BIT(NL80211_IFTYPE_ADHOC)
-	}, {
-		.max = 16,
-		.types = BIT(NL80211_IFTYPE_AP)
-#ifdef CONFIG_MAC80211_MESH
-			 | BIT(NL80211_IFTYPE_MESH_POINT)
-#endif
-	}, {
-		.max = MT7996_MAX_INTERFACES,
-		.types = BIT(NL80211_IFTYPE_STATION)
-	}
-};
-
-static const struct ieee80211_iface_combination if_comb[] = {
-	{
-		.limits = if_limits,
-		.n_limits = ARRAY_SIZE(if_limits),
-		.max_interfaces = MT7996_MAX_INTERFACES,
-		.num_different_channels = 1,
-		.beacon_int_infra_match = true,
-		.radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
-				       BIT(NL80211_CHAN_WIDTH_20) |
-				       BIT(NL80211_CHAN_WIDTH_40) |
-				       BIT(NL80211_CHAN_WIDTH_80) |
-				       BIT(NL80211_CHAN_WIDTH_160) |
-				       BIT(NL80211_CHAN_WIDTH_80P80),
-	}
-};
-
-static void mt7996_led_set_config(struct led_classdev *led_cdev,
-				  u8 delay_on, u8 delay_off)
-{
-	struct mt7996_dev *dev;
-	struct mt76_dev *mt76;
-	u32 val;
-
-	mt76 = container_of(led_cdev, struct mt76_dev, led_cdev);
-	dev = container_of(mt76, struct mt7996_dev, mt76);
-
-	/* select TX blink mode, 2: only data frames */
-	mt76_rmw_field(dev, MT_TMAC_TCR0(0), MT_TMAC_TCR0_TX_BLINK, 2);
-
-	/* enable LED */
-	mt76_wr(dev, MT_LED_EN(0), 1);
-
-	/* set LED Tx blink on/off time */
-	val = FIELD_PREP(MT_LED_TX_BLINK_ON_MASK, delay_on) |
-	      FIELD_PREP(MT_LED_TX_BLINK_OFF_MASK, delay_off);
-	mt76_wr(dev, MT_LED_TX_BLINK(0), val);
-
-	/* control LED */
-	val = MT_LED_CTRL_BLINK_MODE | MT_LED_CTRL_KICK;
-	if (dev->mt76.led_al)
-		val |= MT_LED_CTRL_POLARITY;
-
-	mt76_wr(dev, MT_LED_CTRL(0), val);
-	mt76_clear(dev, MT_LED_CTRL(0), MT_LED_CTRL_KICK);
-}
-
-static int mt7996_led_set_blink(struct led_classdev *led_cdev,
-				unsigned long *delay_on,
-				unsigned long *delay_off)
-{
-	u16 delta_on = 0, delta_off = 0;
-
-#define HW_TICK		10
-#define TO_HW_TICK(_t)	(((_t) > HW_TICK) ? ((_t) / HW_TICK) : HW_TICK)
-
-	if (*delay_on)
-		delta_on = TO_HW_TICK(*delay_on);
-	if (*delay_off)
-		delta_off = TO_HW_TICK(*delay_off);
-
-	mt7996_led_set_config(led_cdev, delta_on, delta_off);
-
-	return 0;
-}
-
-static void mt7996_led_set_brightness(struct led_classdev *led_cdev,
-				      enum led_brightness brightness)
-{
-	if (!brightness)
-		mt7996_led_set_config(led_cdev, 0, 0xff);
-	else
-		mt7996_led_set_config(led_cdev, 0xff, 0);
-}
-
-static void
-mt7996_init_txpower(struct mt7996_dev *dev,
-		    struct ieee80211_supported_band *sband)
-{
-	int i, nss = hweight8(dev->mphy.antenna_mask);
-	int nss_delta = mt76_tx_power_nss_delta(nss);
-	int pwr_delta = mt7996_eeprom_get_power_delta(dev, sband->band);
-	struct mt76_power_limits limits;
-
-	for (i = 0; i < sband->n_channels; i++) {
-		struct ieee80211_channel *chan = &sband->channels[i];
-		int target_power = mt7996_eeprom_get_target_power(dev, chan);
-
-		target_power += pwr_delta;
-		target_power = mt76_get_rate_power_limits(&dev->mphy, chan,
-							  &limits,
-							  target_power);
-		target_power += nss_delta;
-		target_power = DIV_ROUND_UP(target_power, 2);
-		chan->max_power = min_t(int, chan->max_reg_power,
-					target_power);
-		chan->orig_mpwr = target_power;
-	}
-}
-
-static void
-mt7996_regd_notifier(struct wiphy *wiphy,
-		     struct regulatory_request *request)
-{
-	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-
-	memcpy(dev->mt76.alpha2, request->alpha2, sizeof(dev->mt76.alpha2));
-	dev->mt76.region = request->dfs_region;
-
-	if (dev->mt76.region == NL80211_DFS_UNSET)
-		mt7996_mcu_rdd_background_enable(phy, NULL);
-
-	mt7996_init_txpower(dev, &phy->mt76->sband_2g.sband);
-	mt7996_init_txpower(dev, &phy->mt76->sband_5g.sband);
-	mt7996_init_txpower(dev, &phy->mt76->sband_6g.sband);
-
-	phy->mt76->dfs_state = MT_DFS_STATE_UNKNOWN;
-	mt7996_dfs_init_radar_detector(phy);
-}
-
-static void
-mt7996_init_wiphy(struct ieee80211_hw *hw)
-{
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt76_dev *mdev = &phy->dev->mt76;
-	struct wiphy *wiphy = hw->wiphy;
-
-	hw->queues = 4;
-	hw->max_rx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HE;
-	hw->max_tx_aggregation_subframes = IEEE80211_MAX_AMPDU_BUF_HE;
-	hw->netdev_features = NETIF_F_RXCSUM;
-
-	hw->radiotap_timestamp.units_pos =
-		IEEE80211_RADIOTAP_TIMESTAMP_UNIT_US;
-
-	phy->slottime = 9;
-
-	hw->sta_data_size = sizeof(struct mt7996_sta);
-	hw->vif_data_size = sizeof(struct mt7996_vif);
-
-	wiphy->iface_combinations = if_comb;
-	wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
-	wiphy->reg_notifier = mt7996_regd_notifier;
-	wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
-
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BSS_COLOR);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_VHT_IBSS);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_LEGACY);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HT);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_VHT);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BEACON_RATE_HE);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP);
-	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_FILS_DISCOVERY);
-
-	if (!mdev->dev->of_node ||
-	    !of_property_read_bool(mdev->dev->of_node,
-				   "mediatek,disable-radar-background"))
-		wiphy_ext_feature_set(wiphy,
-				      NL80211_EXT_FEATURE_RADAR_BACKGROUND);
-
-	ieee80211_hw_set(hw, HAS_RATE_CONTROL);
-	ieee80211_hw_set(hw, SUPPORTS_TX_ENCAP_OFFLOAD);
-	ieee80211_hw_set(hw, SUPPORTS_RX_DECAP_OFFLOAD);
-	ieee80211_hw_set(hw, WANT_MONITOR_VIF);
-
-	hw->max_tx_fragments = 4;
-
-	if (phy->mt76->cap.has_2ghz)
-		phy->mt76->sband_2g.sband.ht_cap.cap |=
-			IEEE80211_HT_CAP_LDPC_CODING |
-			IEEE80211_HT_CAP_MAX_AMSDU;
-
-	if (phy->mt76->cap.has_5ghz) {
-		phy->mt76->sband_5g.sband.ht_cap.cap |=
-			IEEE80211_HT_CAP_LDPC_CODING |
-			IEEE80211_HT_CAP_MAX_AMSDU;
-
-		phy->mt76->sband_5g.sband.vht_cap.cap |=
-			IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 |
-			IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK |
-			IEEE80211_VHT_CAP_SHORT_GI_160 |
-			IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ;
-	}
-
-	mt76_set_stream_caps(phy->mt76, true);
-	mt7996_set_stream_vht_txbf_caps(phy);
-	mt7996_set_stream_he_caps(phy);
-
-	wiphy->available_antennas_rx = phy->mt76->antenna_mask;
-	wiphy->available_antennas_tx = phy->mt76->antenna_mask;
-}
-
-static void
-mt7996_mac_init_band(struct mt7996_dev *dev, u8 band)
-{
-	u32 mask, set;
-
-	/* clear estimated value of EIFS for Rx duration & OBSS time */
-	mt76_wr(dev, MT_WF_RMAC_RSVD0(band), MT_WF_RMAC_RSVD0_EIFS_CLR);
-
-	/* clear backoff time for Rx duration  */
-	mt76_clear(dev, MT_WF_RMAC_MIB_AIRTIME1(band),
-		   MT_WF_RMAC_MIB_NONQOSD_BACKOFF);
-	mt76_clear(dev, MT_WF_RMAC_MIB_AIRTIME3(band),
-		   MT_WF_RMAC_MIB_QOS01_BACKOFF);
-	mt76_clear(dev, MT_WF_RMAC_MIB_AIRTIME4(band),
-		   MT_WF_RMAC_MIB_QOS23_BACKOFF);
-
-	/* clear backoff time and set software compensation for OBSS time */
-	mask = MT_WF_RMAC_MIB_OBSS_BACKOFF | MT_WF_RMAC_MIB_ED_OFFSET;
-	set = FIELD_PREP(MT_WF_RMAC_MIB_OBSS_BACKOFF, 0) |
-	      FIELD_PREP(MT_WF_RMAC_MIB_ED_OFFSET, 4);
-	mt76_rmw(dev, MT_WF_RMAC_MIB_AIRTIME0(band), mask, set);
-}
-
-static void mt7996_mac_init(struct mt7996_dev *dev)
-{
-#define HIF_TXD_V2_1	4
-	int i;
-
-	mt76_clear(dev, MT_MDP_DCR2, MT_MDP_DCR2_RX_TRANS_SHORT);
-
-	for (i = 0; i < MT7996_WTBL_SIZE; i++)
-		mt7996_mac_wtbl_update(dev, i,
-				       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	if (IS_ENABLED(CONFIG_MT76_LEDS)) {
-		i = dev->mt76.led_pin ? MT_LED_GPIO_MUX3 : MT_LED_GPIO_MUX2;
-		mt76_rmw_field(dev, i, MT_LED_GPIO_SEL_MASK, 4);
-	}
-
-	/* txs report queue */
-	mt76_rmw_field(dev, MT_DMA_TCRF1(0), MT_DMA_TCRF1_QIDX, 0);
-	mt76_rmw_field(dev, MT_DMA_TCRF1(1), MT_DMA_TCRF1_QIDX, 6);
-	mt76_rmw_field(dev, MT_DMA_TCRF1(2), MT_DMA_TCRF1_QIDX, 0);
-
-	/* rro module init */
-	mt7996_mcu_set_rro(dev, UNI_RRO_SET_PLATFORM_TYPE, 2);
-	mt7996_mcu_set_rro(dev, UNI_RRO_SET_BYPASS_MODE, 3);
-	mt7996_mcu_set_rro(dev, UNI_RRO_SET_TXFREE_PATH, 1);
-
-	mt7996_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),
-			  MCU_WA_PARAM_HW_PATH_HIF_VER,
-			  HIF_TXD_V2_1, 0);
-
-	for (i = MT_BAND0; i <= MT_BAND2; i++)
-		mt7996_mac_init_band(dev, i);
-}
-
-static int mt7996_txbf_init(struct mt7996_dev *dev)
-{
-	int ret;
-
-	if (dev->dbdc_support) {
-		ret = mt7996_mcu_set_txbf(dev, BF_MOD_EN_CTRL);
-		if (ret)
-			return ret;
-	}
-
-	/* trigger sounding packets */
-	ret = mt7996_mcu_set_txbf(dev, BF_SOUNDING_ON);
-	if (ret)
-		return ret;
-
-	/* enable eBF */
-	return mt7996_mcu_set_txbf(dev, BF_HW_EN_UPDATE);
-}
-
-static int mt7996_register_phy(struct mt7996_dev *dev, struct mt7996_phy *phy,
-			       enum mt76_band_id band)
-{
-	struct mt76_phy *mphy;
-	u32 mac_ofs, hif1_ofs = 0;
-	int ret;
-
-	if (band != MT_BAND1 && band != MT_BAND2)
-		return 0;
-
-	if ((band == MT_BAND1 && !dev->dbdc_support) ||
-	    (band == MT_BAND2 && !dev->tbtc_support))
-		return 0;
-
-	if (phy)
-		return 0;
-
-	if (band == MT_BAND2 && dev->hif2)
-		hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
-
-	mphy = mt76_alloc_phy(&dev->mt76, sizeof(*phy), &mt7996_ops, band);
-	if (!mphy)
-		return -ENOMEM;
-
-	phy = mphy->priv;
-	phy->dev = dev;
-	phy->mt76 = mphy;
-	mphy->dev->phys[band] = mphy;
-
-	INIT_DELAYED_WORK(&mphy->mac_work, mt7996_mac_work);
-
-	ret = mt7996_eeprom_parse_hw_cap(dev, phy);
-	if (ret)
-		goto error;
-
-	mac_ofs = band == MT_BAND2 ? MT_EE_MAC_ADDR3 : MT_EE_MAC_ADDR2;
-	memcpy(mphy->macaddr, dev->mt76.eeprom.data + mac_ofs, ETH_ALEN);
-	/* Make the extra PHY MAC address local without overlapping with
-	 * the usual MAC address allocation scheme on multiple virtual interfaces
-	 */
-	if (!is_valid_ether_addr(mphy->macaddr)) {
-		memcpy(mphy->macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
-		       ETH_ALEN);
-		mphy->macaddr[0] |= 2;
-		mphy->macaddr[0] ^= BIT(7);
-		if (band == MT_BAND2)
-			mphy->macaddr[0] ^= BIT(6);
-	}
-	mt76_eeprom_override(mphy);
-
-	/* init wiphy according to mphy and phy */
-	mt7996_init_wiphy(mphy->hw);
-	ret = mt76_connac_init_tx_queues(phy->mt76,
-					 MT_TXQ_ID(band),
-					 MT7996_TX_RING_SIZE,
-					 MT_TXQ_RING_BASE(band) + hif1_ofs, 0);
-	if (ret)
-		goto error;
-
-	ret = mt76_register_phy(mphy, true, mt76_rates,
-				ARRAY_SIZE(mt76_rates));
-	if (ret)
-		goto error;
-
-	ret = mt7996_init_debugfs(phy);
-	if (ret)
-		goto error;
-
-	return 0;
-
-error:
-	mphy->dev->phys[band] = NULL;
-	ieee80211_free_hw(mphy->hw);
-	return ret;
-}
-
-static void
-mt7996_unregister_phy(struct mt7996_phy *phy, enum mt76_band_id band)
-{
-	struct mt76_phy *mphy;
-
-	if (!phy)
-		return;
-
-	mphy = phy->dev->mt76.phys[band];
-	mt76_unregister_phy(mphy);
-	ieee80211_free_hw(mphy->hw);
-	phy->dev->mt76.phys[band] = NULL;
-}
-
-static void mt7996_init_work(struct work_struct *work)
-{
-	struct mt7996_dev *dev = container_of(work, struct mt7996_dev,
-				 init_work);
-
-	mt7996_mcu_set_eeprom(dev);
-	mt7996_mac_init(dev);
-	mt7996_init_txpower(dev, &dev->mphy.sband_2g.sband);
-	mt7996_init_txpower(dev, &dev->mphy.sband_5g.sband);
-	mt7996_init_txpower(dev, &dev->mphy.sband_6g.sband);
-	mt7996_txbf_init(dev);
-}
-
-void mt7996_wfsys_reset(struct mt7996_dev *dev)
-{
-	mt76_set(dev, MT_WF_SUBSYS_RST, 0x1);
-	msleep(20);
-
-	mt76_clear(dev, MT_WF_SUBSYS_RST, 0x1);
-	msleep(20);
-}
-
-static int mt7996_init_hardware(struct mt7996_dev *dev)
-{
-	int ret, idx;
-
-	mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
-
-	INIT_WORK(&dev->init_work, mt7996_init_work);
-
-	dev->dbdc_support = true;
-	dev->tbtc_support = true;
-
-	ret = mt7996_dma_init(dev);
-	if (ret)
-		return ret;
-
-	set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
-
-	ret = mt7996_mcu_init(dev);
-	if (ret)
-		return ret;
-
-	ret = mt7996_eeprom_init(dev);
-	if (ret < 0)
-		return ret;
-
-	/* Beacon and mgmt frames should occupy wcid 0 */
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7996_WTBL_STA);
-	if (idx)
-		return -ENOSPC;
-
-	dev->mt76.global_wcid.idx = idx;
-	dev->mt76.global_wcid.hw_key_idx = -1;
-	dev->mt76.global_wcid.tx_info |= MT_WCID_TX_INFO_SET;
-	rcu_assign_pointer(dev->mt76.wcid[idx], &dev->mt76.global_wcid);
-
-	return 0;
-}
-
-void mt7996_set_stream_vht_txbf_caps(struct mt7996_phy *phy)
-{
-	int sts;
-	u32 *cap;
-
-	if (!phy->mt76->cap.has_5ghz)
-		return;
-
-	sts = hweight16(phy->mt76->chainmask);
-	cap = &phy->mt76->sband_5g.sband.vht_cap.cap;
-
-	*cap |= IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE |
-		IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE |
-		(3 << IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT);
-
-	*cap &= ~(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK |
-		  IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
-		  IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE);
-
-	if (sts < 2)
-		return;
-
-	*cap |= IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE |
-		IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE |
-		FIELD_PREP(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK, sts - 1);
-}
-
-static void
-mt7996_set_stream_he_txbf_caps(struct mt7996_phy *phy,
-			       struct ieee80211_sta_he_cap *he_cap, int vif)
-{
-	struct ieee80211_he_cap_elem *elem = &he_cap->he_cap_elem;
-	int sts = hweight16(phy->mt76->chainmask);
-	u8 c;
-
-#ifdef CONFIG_MAC80211_MESH
-	if (vif == NL80211_IFTYPE_MESH_POINT)
-		return;
-#endif
-
-	elem->phy_cap_info[3] &= ~IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER;
-	elem->phy_cap_info[4] &= ~IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER;
-
-	c = IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK |
-	    IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK;
-	elem->phy_cap_info[5] &= ~c;
-
-	c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB |
-	    IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB;
-	elem->phy_cap_info[6] &= ~c;
-
-	elem->phy_cap_info[7] &= ~IEEE80211_HE_PHY_CAP7_MAX_NC_MASK;
-
-	c = IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US |
-	    IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO |
-	    IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO;
-	elem->phy_cap_info[2] |= c;
-
-	c = IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE |
-	    IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_4 |
-	    IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_4;
-	elem->phy_cap_info[4] |= c;
-
-	/* do not support NG16 due to spec D4.0 changes subcarrier idx */
-	c = IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_42_SU |
-	    IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU;
-
-	if (vif == NL80211_IFTYPE_STATION)
-		c |= IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO;
-
-	elem->phy_cap_info[6] |= c;
-
-	if (sts < 2)
-		return;
-
-	/* the maximum cap is 4 x 3, (Nr, Nc) = (3, 2) */
-	elem->phy_cap_info[7] |= min_t(int, sts - 1, 2) << 3;
-
-	if (vif != NL80211_IFTYPE_AP)
-		return;
-
-	elem->phy_cap_info[3] |= IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER;
-	elem->phy_cap_info[4] |= IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER;
-
-	c = FIELD_PREP(IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK,
-		       sts - 1) |
-	    FIELD_PREP(IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK,
-		       sts - 1);
-	elem->phy_cap_info[5] |= c;
-
-	c = IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB |
-	    IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB;
-	elem->phy_cap_info[6] |= c;
-
-	c = IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ |
-	    IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ;
-	elem->phy_cap_info[7] |= c;
-}
-
-static void
-mt7996_gen_ppe_thresh(u8 *he_ppet, int nss)
-{
-	u8 i, ppet_bits, ppet_size, ru_bit_mask = 0x7; /* HE80 */
-	static const u8 ppet16_ppet8_ru3_ru0[] = {0x1c, 0xc7, 0x71};
-
-	he_ppet[0] = FIELD_PREP(IEEE80211_PPE_THRES_NSS_MASK, nss - 1) |
-		     FIELD_PREP(IEEE80211_PPE_THRES_RU_INDEX_BITMASK_MASK,
-				ru_bit_mask);
-
-	ppet_bits = IEEE80211_PPE_THRES_INFO_PPET_SIZE *
-		    nss * hweight8(ru_bit_mask) * 2;
-	ppet_size = DIV_ROUND_UP(ppet_bits, 8);
-
-	for (i = 0; i < ppet_size - 1; i++)
-		he_ppet[i + 1] = ppet16_ppet8_ru3_ru0[i % 3];
-
-	he_ppet[i + 1] = ppet16_ppet8_ru3_ru0[i % 3] &
-			 (0xff >> (8 - (ppet_bits - 1) % 8));
-}
-
-static int
-mt7996_init_he_caps(struct mt7996_phy *phy, enum nl80211_band band,
-		    struct ieee80211_sband_iftype_data *data)
-{
-	int i, idx = 0, nss = hweight8(phy->mt76->antenna_mask);
-	u16 mcs_map = 0;
-
-	for (i = 0; i < 8; i++) {
-		if (i < nss)
-			mcs_map |= (IEEE80211_HE_MCS_SUPPORT_0_11 << (i * 2));
-		else
-			mcs_map |= (IEEE80211_HE_MCS_NOT_SUPPORTED << (i * 2));
-	}
-
-	for (i = 0; i < NUM_NL80211_IFTYPES; i++) {
-		struct ieee80211_sta_he_cap *he_cap = &data[idx].he_cap;
-		struct ieee80211_he_cap_elem *he_cap_elem =
-				&he_cap->he_cap_elem;
-		struct ieee80211_he_mcs_nss_supp *he_mcs =
-				&he_cap->he_mcs_nss_supp;
-
-		switch (i) {
-		case NL80211_IFTYPE_STATION:
-		case NL80211_IFTYPE_AP:
-#ifdef CONFIG_MAC80211_MESH
-		case NL80211_IFTYPE_MESH_POINT:
-#endif
-			break;
-		default:
-			continue;
-		}
-
-		data[idx].types_mask = BIT(i);
-		he_cap->has_he = true;
-
-		he_cap_elem->mac_cap_info[0] =
-			IEEE80211_HE_MAC_CAP0_HTC_HE;
-		he_cap_elem->mac_cap_info[3] =
-			IEEE80211_HE_MAC_CAP3_OMI_CONTROL |
-			IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3;
-		he_cap_elem->mac_cap_info[4] =
-			IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU;
-
-		if (band == NL80211_BAND_2GHZ)
-			he_cap_elem->phy_cap_info[0] =
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G;
-		else
-			he_cap_elem->phy_cap_info[0] =
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G |
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G |
-				IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G;
-
-		he_cap_elem->phy_cap_info[1] =
-			IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD;
-		he_cap_elem->phy_cap_info[2] =
-			IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ |
-			IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ;
-
-		switch (i) {
-		case NL80211_IFTYPE_AP:
-			he_cap_elem->mac_cap_info[0] |=
-				IEEE80211_HE_MAC_CAP0_TWT_RES;
-			he_cap_elem->mac_cap_info[2] |=
-				IEEE80211_HE_MAC_CAP2_BSR;
-			he_cap_elem->mac_cap_info[4] |=
-				IEEE80211_HE_MAC_CAP4_BQR;
-			he_cap_elem->mac_cap_info[5] |=
-				IEEE80211_HE_MAC_CAP5_OM_CTRL_UL_MU_DATA_DIS_RX;
-			he_cap_elem->phy_cap_info[3] |=
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_QPSK |
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_QPSK;
-			he_cap_elem->phy_cap_info[6] |=
-				IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE |
-				IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT;
-			he_cap_elem->phy_cap_info[9] |=
-				IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU |
-				IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU;
-			break;
-		case NL80211_IFTYPE_STATION:
-			he_cap_elem->mac_cap_info[1] |=
-				IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US;
-
-			if (band == NL80211_BAND_2GHZ)
-				he_cap_elem->phy_cap_info[0] |=
-					IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_2G;
-			else
-				he_cap_elem->phy_cap_info[0] |=
-					IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_5G;
-
-			he_cap_elem->phy_cap_info[1] |=
-				IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A |
-				IEEE80211_HE_PHY_CAP1_HE_LTF_AND_GI_FOR_HE_PPDUS_0_8US;
-			he_cap_elem->phy_cap_info[3] |=
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_QPSK |
-				IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_QPSK;
-			he_cap_elem->phy_cap_info[6] |=
-				IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB |
-				IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE |
-				IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT;
-			he_cap_elem->phy_cap_info[7] |=
-				IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP |
-				IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI;
-			he_cap_elem->phy_cap_info[8] |=
-				IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G |
-				IEEE80211_HE_PHY_CAP8_20MHZ_IN_160MHZ_HE_PPDU |
-				IEEE80211_HE_PHY_CAP8_80MHZ_IN_160MHZ_HE_PPDU |
-				IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_484;
-			he_cap_elem->phy_cap_info[9] |=
-				IEEE80211_HE_PHY_CAP9_LONGER_THAN_16_SIGB_OFDM_SYM |
-				IEEE80211_HE_PHY_CAP9_NON_TRIGGERED_CQI_FEEDBACK |
-				IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU |
-				IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU |
-				IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_COMP_SIGB |
-				IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_NON_COMP_SIGB;
-			break;
-		}
-
-		he_mcs->rx_mcs_80 = cpu_to_le16(mcs_map);
-		he_mcs->tx_mcs_80 = cpu_to_le16(mcs_map);
-		he_mcs->rx_mcs_160 = cpu_to_le16(mcs_map);
-		he_mcs->tx_mcs_160 = cpu_to_le16(mcs_map);
-		he_mcs->rx_mcs_80p80 = cpu_to_le16(mcs_map);
-		he_mcs->tx_mcs_80p80 = cpu_to_le16(mcs_map);
-
-		mt7996_set_stream_he_txbf_caps(phy, he_cap, i);
-
-		memset(he_cap->ppe_thres, 0, sizeof(he_cap->ppe_thres));
-		if (he_cap_elem->phy_cap_info[6] &
-		    IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT) {
-			mt7996_gen_ppe_thresh(he_cap->ppe_thres, nss);
-		} else {
-			he_cap_elem->phy_cap_info[9] |=
-				IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_16US;
-		}
-
-		if (band == NL80211_BAND_6GHZ) {
-			u16 cap = IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS |
-				  IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS;
-
-			cap |= u16_encode_bits(IEEE80211_HT_MPDU_DENSITY_2,
-					       IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START) |
-			       u16_encode_bits(IEEE80211_VHT_MAX_AMPDU_1024K,
-					       IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP) |
-			       u16_encode_bits(IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454,
-					       IEEE80211_HE_6GHZ_CAP_MAX_MPDU_LEN);
-
-			data[idx].he_6ghz_capa.capa = cpu_to_le16(cap);
-		}
-
-		idx++;
-	}
-
-	return idx;
-}
-
-void mt7996_set_stream_he_caps(struct mt7996_phy *phy)
-{
-	struct ieee80211_sband_iftype_data *data;
-	struct ieee80211_supported_band *band;
-	int n;
-
-	if (phy->mt76->cap.has_2ghz) {
-		data = phy->iftype[NL80211_BAND_2GHZ];
-		n = mt7996_init_he_caps(phy, NL80211_BAND_2GHZ, data);
-
-		band = &phy->mt76->sband_2g.sband;
-		band->iftype_data = data;
-		band->n_iftype_data = n;
-	}
-
-	if (phy->mt76->cap.has_5ghz) {
-		data = phy->iftype[NL80211_BAND_5GHZ];
-		n = mt7996_init_he_caps(phy, NL80211_BAND_5GHZ, data);
-
-		band = &phy->mt76->sband_5g.sband;
-		band->iftype_data = data;
-		band->n_iftype_data = n;
-	}
-
-	if (phy->mt76->cap.has_6ghz) {
-		data = phy->iftype[NL80211_BAND_6GHZ];
-		n = mt7996_init_he_caps(phy, NL80211_BAND_6GHZ, data);
-
-		band = &phy->mt76->sband_6g.sband;
-		band->iftype_data = data;
-		band->n_iftype_data = n;
-	}
-}
-
-int mt7996_register_device(struct mt7996_dev *dev)
-{
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	int ret;
-
-	dev->phy.dev = dev;
-	dev->phy.mt76 = &dev->mt76.phy;
-	dev->mt76.phy.priv = &dev->phy;
-	INIT_WORK(&dev->rc_work, mt7996_mac_sta_rc_work);
-	INIT_DELAYED_WORK(&dev->mphy.mac_work, mt7996_mac_work);
-	INIT_LIST_HEAD(&dev->sta_rc_list);
-	INIT_LIST_HEAD(&dev->sta_poll_list);
-	INIT_LIST_HEAD(&dev->twt_list);
-	spin_lock_init(&dev->sta_poll_lock);
-
-	init_waitqueue_head(&dev->reset_wait);
-	INIT_WORK(&dev->reset_work, mt7996_mac_reset_work);
-
-	ret = mt7996_init_hardware(dev);
-	if (ret)
-		return ret;
-
-	mt7996_init_wiphy(hw);
-
-	/* init led callbacks */
-	if (IS_ENABLED(CONFIG_MT76_LEDS)) {
-		dev->mt76.led_cdev.brightness_set = mt7996_led_set_brightness;
-		dev->mt76.led_cdev.blink_set = mt7996_led_set_blink;
-	}
-
-	ret = mt76_register_device(&dev->mt76, true, mt76_rates,
-				   ARRAY_SIZE(mt76_rates));
-	if (ret)
-		return ret;
-
-	ieee80211_queue_work(mt76_hw(dev), &dev->init_work);
-
-	ret = mt7996_register_phy(dev, mt7996_phy2(dev), MT_BAND1);
-	if (ret)
-		return ret;
-
-	ret = mt7996_register_phy(dev, mt7996_phy3(dev), MT_BAND2);
-	if (ret)
-		return ret;
-
-	return mt7996_init_debugfs(&dev->phy);
-}
-
-void mt7996_unregister_device(struct mt7996_dev *dev)
-{
-	mt7996_unregister_phy(mt7996_phy3(dev), MT_BAND2);
-	mt7996_unregister_phy(mt7996_phy2(dev), MT_BAND1);
-	mt76_unregister_device(&dev->mt76);
-	mt7996_mcu_exit(dev);
-	mt7996_tx_token_put(dev);
-	mt7996_dma_cleanup(dev);
-	tasklet_disable(&dev->irq_tasklet);
-
-	mt76_free_device(&dev->mt76);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mac.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mac.c
deleted file mode 100644
index 50c6e8f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mac.c
+++ /dev/null
@@ -1,2475 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#include <linux/etherdevice.h>
-#include <linux/timekeeping.h>
-#include "mt7996.h"
-#include "../dma.h"
-#include "mac.h"
-#include "mcu.h"
-
-#define to_rssi(field, rxv)	((FIELD_GET(field, rxv) - 220) / 2)
-
-#define HE_BITS(f)		cpu_to_le16(IEEE80211_RADIOTAP_HE_##f)
-#define HE_PREP(f, m, v)	le16_encode_bits(le32_get_bits(v, MT_CRXV_HE_##m),\
-						 IEEE80211_RADIOTAP_HE_##f)
-
-static const struct mt7996_dfs_radar_spec etsi_radar_specs = {
-	.pulse_th = { 110, -10, -80, 40, 5200, 128, 5200 },
-	.radar_pattern = {
-		[5] =  { 1, 0,  6, 32, 28, 0,  990, 5010, 17, 1, 1 },
-		[6] =  { 1, 0,  9, 32, 28, 0,  615, 5010, 27, 1, 1 },
-		[7] =  { 1, 0, 15, 32, 28, 0,  240,  445, 27, 1, 1 },
-		[8] =  { 1, 0, 12, 32, 28, 0,  240,  510, 42, 1, 1 },
-		[9] =  { 1, 1,  0,  0,  0, 0, 2490, 3343, 14, 0, 0, 12, 32, 28, { }, 126 },
-		[10] = { 1, 1,  0,  0,  0, 0, 2490, 3343, 14, 0, 0, 15, 32, 24, { }, 126 },
-		[11] = { 1, 1,  0,  0,  0, 0,  823, 2510, 14, 0, 0, 18, 32, 28, { },  54 },
-		[12] = { 1, 1,  0,  0,  0, 0,  823, 2510, 14, 0, 0, 27, 32, 24, { },  54 },
-	},
-};
-
-static const struct mt7996_dfs_radar_spec fcc_radar_specs = {
-	.pulse_th = { 110, -10, -80, 40, 5200, 128, 5200 },
-	.radar_pattern = {
-		[0] = { 1, 0,  8,  32, 28, 0, 508, 3076, 13, 1,  1 },
-		[1] = { 1, 0, 12,  32, 28, 0, 140,  240, 17, 1,  1 },
-		[2] = { 1, 0,  8,  32, 28, 0, 190,  510, 22, 1,  1 },
-		[3] = { 1, 0,  6,  32, 28, 0, 190,  510, 32, 1,  1 },
-		[4] = { 1, 0,  9, 255, 28, 0, 323,  343, 13, 1, 32 },
-	},
-};
-
-static const struct mt7996_dfs_radar_spec jp_radar_specs = {
-	.pulse_th = { 110, -10, -80, 40, 5200, 128, 5200 },
-	.radar_pattern = {
-		[0] =  { 1, 0,  8,  32, 28, 0,  508, 3076,  13, 1,  1 },
-		[1] =  { 1, 0, 12,  32, 28, 0,  140,  240,  17, 1,  1 },
-		[2] =  { 1, 0,  8,  32, 28, 0,  190,  510,  22, 1,  1 },
-		[3] =  { 1, 0,  6,  32, 28, 0,  190,  510,  32, 1,  1 },
-		[4] =  { 1, 0,  9, 255, 28, 0,  323,  343,  13, 1, 32 },
-		[13] = { 1, 0,  7,  32, 28, 0, 3836, 3856,  14, 1,  1 },
-		[14] = { 1, 0,  6,  32, 28, 0,  615, 5010, 110, 1,  1 },
-		[15] = { 1, 1,  0,   0,  0, 0,   15, 5010, 110, 0,  0, 12, 32, 28 },
-	},
-};
-
-static struct mt76_wcid *mt7996_rx_get_wcid(struct mt7996_dev *dev,
-					    u16 idx, bool unicast)
-{
-	struct mt7996_sta *sta;
-	struct mt76_wcid *wcid;
-
-	if (idx >= ARRAY_SIZE(dev->mt76.wcid))
-		return NULL;
-
-	wcid = rcu_dereference(dev->mt76.wcid[idx]);
-	if (unicast || !wcid)
-		return wcid;
-
-	if (!wcid->sta)
-		return NULL;
-
-	sta = container_of(wcid, struct mt7996_sta, wcid);
-	if (!sta->vif)
-		return NULL;
-
-	return &sta->vif->sta.wcid;
-}
-
-void mt7996_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps)
-{
-}
-
-bool mt7996_mac_wtbl_update(struct mt7996_dev *dev, int idx, u32 mask)
-{
-	mt76_rmw(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_WLAN_IDX,
-		 FIELD_PREP(MT_WTBL_UPDATE_WLAN_IDX, idx) | mask);
-
-	return mt76_poll(dev, MT_WTBL_UPDATE, MT_WTBL_UPDATE_BUSY,
-			 0, 5000);
-}
-
-u32 mt7996_mac_wtbl_lmac_addr(struct mt7996_dev *dev, u16 wcid, u8 dw)
-{
-	mt76_wr(dev, MT_WTBLON_TOP_WDUCR,
-		FIELD_PREP(MT_WTBLON_TOP_WDUCR_GROUP, (wcid >> 7)));
-
-	return MT_WTBL_LMAC_OFFS(wcid, dw);
-}
-
-static void mt7996_mac_sta_poll(struct mt7996_dev *dev)
-{
-	static const u8 ac_to_tid[] = {
-		[IEEE80211_AC_BE] = 0,
-		[IEEE80211_AC_BK] = 1,
-		[IEEE80211_AC_VI] = 4,
-		[IEEE80211_AC_VO] = 6
-	};
-	struct ieee80211_sta *sta;
-	struct mt7996_sta *msta;
-	struct rate_info *rate;
-	u32 tx_time[IEEE80211_NUM_ACS], rx_time[IEEE80211_NUM_ACS];
-	LIST_HEAD(sta_poll_list);
-	int i;
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	list_splice_init(&dev->sta_poll_list, &sta_poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	rcu_read_lock();
-
-	while (true) {
-		bool clear = false;
-		u32 addr, val;
-		u16 idx;
-		u8 bw;
-
-		spin_lock_bh(&dev->sta_poll_lock);
-		if (list_empty(&sta_poll_list)) {
-			spin_unlock_bh(&dev->sta_poll_lock);
-			break;
-		}
-		msta = list_first_entry(&sta_poll_list,
-					struct mt7996_sta, poll_list);
-		list_del_init(&msta->poll_list);
-		spin_unlock_bh(&dev->sta_poll_lock);
-
-		idx = msta->wcid.idx;
-		addr = mt7996_mac_wtbl_lmac_addr(dev, idx, 20);
-
-		for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-			u32 tx_last = msta->airtime_ac[i];
-			u32 rx_last = msta->airtime_ac[i + 4];
-
-			msta->airtime_ac[i] = mt76_rr(dev, addr);
-			msta->airtime_ac[i + 4] = mt76_rr(dev, addr + 4);
-
-			tx_time[i] = msta->airtime_ac[i] - tx_last;
-			rx_time[i] = msta->airtime_ac[i + 4] - rx_last;
-
-			if ((tx_last | rx_last) & BIT(30))
-				clear = true;
-
-			addr += 8;
-		}
-
-		if (clear) {
-			mt7996_mac_wtbl_update(dev, idx,
-					       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-			memset(msta->airtime_ac, 0, sizeof(msta->airtime_ac));
-		}
-
-		if (!msta->wcid.sta)
-			continue;
-
-		sta = container_of((void *)msta, struct ieee80211_sta,
-				   drv_priv);
-		for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-			u8 q = mt76_connac_lmac_mapping(i);
-			u32 tx_cur = tx_time[q];
-			u32 rx_cur = rx_time[q];
-			u8 tid = ac_to_tid[i];
-
-			if (!tx_cur && !rx_cur)
-				continue;
-
-			ieee80211_sta_register_airtime(sta, tid, tx_cur, rx_cur);
-		}
-
-		/*
-		 * We don't support reading GI info from txs packets.
-		 * For accurate tx status reporting and AQL improvement,
-		 * we need to make sure that flags match so polling GI
-		 * from per-sta counters directly.
-		 */
-		rate = &msta->wcid.rate;
-
-		switch (rate->bw) {
-		case RATE_INFO_BW_160:
-			bw = IEEE80211_STA_RX_BW_160;
-			break;
-		case RATE_INFO_BW_80:
-			bw = IEEE80211_STA_RX_BW_80;
-			break;
-		case RATE_INFO_BW_40:
-			bw = IEEE80211_STA_RX_BW_40;
-			break;
-		default:
-			bw = IEEE80211_STA_RX_BW_20;
-			break;
-		}
-
-		if (rate->flags & RATE_INFO_FLAGS_HE_MCS) {
-			u8 offs = 24 + 2 * bw;
-
-			addr = mt7996_mac_wtbl_lmac_addr(dev, idx, 6);
-			val = mt76_rr(dev, addr);
-			rate->he_gi = (val & (0x3 << offs)) >> offs;
-		} else if (rate->flags &
-			   (RATE_INFO_FLAGS_VHT_MCS | RATE_INFO_FLAGS_MCS)) {
-			if (val & BIT(12 + bw))
-				rate->flags |= RATE_INFO_FLAGS_SHORT_GI;
-			else
-				rate->flags &= ~RATE_INFO_FLAGS_SHORT_GI;
-		}
-	}
-
-	rcu_read_unlock();
-}
-
-static void
-mt7996_mac_decode_he_radiotap_ru(struct mt76_rx_status *status,
-				 struct ieee80211_radiotap_he *he,
-				 __le32 *rxv)
-{
-	u32 ru_h, ru_l;
-	u8 ru, offs = 0;
-
-	ru_l = le32_get_bits(rxv[0], MT_PRXV_HE_RU_ALLOC_L);
-	ru_h = le32_get_bits(rxv[1], MT_PRXV_HE_RU_ALLOC_H);
-	ru = (u8)(ru_l | ru_h << 4);
-
-	status->bw = RATE_INFO_BW_HE_RU;
-
-	switch (ru) {
-	case 0 ... 36:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_26;
-		offs = ru;
-		break;
-	case 37 ... 52:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_52;
-		offs = ru - 37;
-		break;
-	case 53 ... 60:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_106;
-		offs = ru - 53;
-		break;
-	case 61 ... 64:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_242;
-		offs = ru - 61;
-		break;
-	case 65 ... 66:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_484;
-		offs = ru - 65;
-		break;
-	case 67:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_996;
-		break;
-	case 68:
-		status->he_ru = NL80211_RATE_INFO_HE_RU_ALLOC_2x996;
-		break;
-	}
-
-	he->data1 |= HE_BITS(DATA1_BW_RU_ALLOC_KNOWN);
-	he->data2 |= HE_BITS(DATA2_RU_OFFSET_KNOWN) |
-		     le16_encode_bits(offs,
-				      IEEE80211_RADIOTAP_HE_DATA2_RU_OFFSET);
-}
-
-static void
-mt7996_mac_decode_he_mu_radiotap(struct sk_buff *skb, __le32 *rxv)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	static const struct ieee80211_radiotap_he_mu mu_known = {
-		.flags1 = HE_BITS(MU_FLAGS1_SIG_B_MCS_KNOWN) |
-			  HE_BITS(MU_FLAGS1_SIG_B_DCM_KNOWN) |
-			  HE_BITS(MU_FLAGS1_CH1_RU_KNOWN) |
-			  HE_BITS(MU_FLAGS1_SIG_B_SYMS_USERS_KNOWN),
-		.flags2 = HE_BITS(MU_FLAGS2_BW_FROM_SIG_A_BW_KNOWN),
-	};
-	struct ieee80211_radiotap_he_mu *he_mu = NULL;
-
-	status->flag |= RX_FLAG_RADIOTAP_HE_MU;
-
-	he_mu = skb_push(skb, sizeof(mu_known));
-	memcpy(he_mu, &mu_known, sizeof(mu_known));
-
-#define MU_PREP(f, v)	le16_encode_bits(v, IEEE80211_RADIOTAP_HE_MU_##f)
-
-	he_mu->flags1 |= MU_PREP(FLAGS1_SIG_B_MCS, status->rate_idx);
-	if (status->he_dcm)
-		he_mu->flags1 |= MU_PREP(FLAGS1_SIG_B_DCM, status->he_dcm);
-
-	he_mu->flags2 |= MU_PREP(FLAGS2_BW_FROM_SIG_A_BW, status->bw) |
-			 MU_PREP(FLAGS2_SIG_B_SYMS_USERS,
-				 le32_get_bits(rxv[2], MT_CRXV_HE_NUM_USER));
-
-	he_mu->ru_ch1[0] = le32_get_bits(rxv[3], MT_CRXV_HE_RU0);
-
-	if (status->bw >= RATE_INFO_BW_40) {
-		he_mu->flags1 |= HE_BITS(MU_FLAGS1_CH2_RU_KNOWN);
-		he_mu->ru_ch2[0] = le32_get_bits(rxv[3], MT_CRXV_HE_RU1);
-	}
-
-	if (status->bw >= RATE_INFO_BW_80) {
-		he_mu->ru_ch1[1] = le32_get_bits(rxv[3], MT_CRXV_HE_RU2);
-		he_mu->ru_ch2[1] = le32_get_bits(rxv[3], MT_CRXV_HE_RU3);
-	}
-}
-
-static void
-mt7996_mac_decode_he_radiotap(struct sk_buff *skb, __le32 *rxv, u8 mode)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	static const struct ieee80211_radiotap_he known = {
-		.data1 = HE_BITS(DATA1_DATA_MCS_KNOWN) |
-			 HE_BITS(DATA1_DATA_DCM_KNOWN) |
-			 HE_BITS(DATA1_STBC_KNOWN) |
-			 HE_BITS(DATA1_CODING_KNOWN) |
-			 HE_BITS(DATA1_LDPC_XSYMSEG_KNOWN) |
-			 HE_BITS(DATA1_DOPPLER_KNOWN) |
-			 HE_BITS(DATA1_SPTL_REUSE_KNOWN) |
-			 HE_BITS(DATA1_BSS_COLOR_KNOWN),
-		.data2 = HE_BITS(DATA2_GI_KNOWN) |
-			 HE_BITS(DATA2_TXBF_KNOWN) |
-			 HE_BITS(DATA2_PE_DISAMBIG_KNOWN) |
-			 HE_BITS(DATA2_TXOP_KNOWN),
-	};
-	struct ieee80211_radiotap_he *he = NULL;
-	u32 ltf_size = le32_get_bits(rxv[2], MT_CRXV_HE_LTF_SIZE) + 1;
-
-	status->flag |= RX_FLAG_RADIOTAP_HE;
-
-	he = skb_push(skb, sizeof(known));
-	memcpy(he, &known, sizeof(known));
-
-	he->data3 = HE_PREP(DATA3_BSS_COLOR, BSS_COLOR, rxv[14]) |
-		    HE_PREP(DATA3_LDPC_XSYMSEG, LDPC_EXT_SYM, rxv[2]);
-	he->data4 = HE_PREP(DATA4_SU_MU_SPTL_REUSE, SR_MASK, rxv[11]);
-	he->data5 = HE_PREP(DATA5_PE_DISAMBIG, PE_DISAMBIG, rxv[2]) |
-		    le16_encode_bits(ltf_size,
-				     IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE);
-	if (le32_to_cpu(rxv[0]) & MT_PRXV_TXBF)
-		he->data5 |= HE_BITS(DATA5_TXBF);
-	he->data6 = HE_PREP(DATA6_TXOP, TXOP_DUR, rxv[14]) |
-		    HE_PREP(DATA6_DOPPLER, DOPPLER, rxv[14]);
-
-	switch (mode) {
-	case MT_PHY_TYPE_HE_SU:
-		he->data1 |= HE_BITS(DATA1_FORMAT_SU) |
-			     HE_BITS(DATA1_UL_DL_KNOWN) |
-			     HE_BITS(DATA1_BEAM_CHANGE_KNOWN) |
-			     HE_BITS(DATA1_BW_RU_ALLOC_KNOWN);
-
-		he->data3 |= HE_PREP(DATA3_BEAM_CHANGE, BEAM_CHNG, rxv[14]) |
-			     HE_PREP(DATA3_UL_DL, UPLINK, rxv[2]);
-		break;
-	case MT_PHY_TYPE_HE_EXT_SU:
-		he->data1 |= HE_BITS(DATA1_FORMAT_EXT_SU) |
-			     HE_BITS(DATA1_UL_DL_KNOWN) |
-			     HE_BITS(DATA1_BW_RU_ALLOC_KNOWN);
-
-		he->data3 |= HE_PREP(DATA3_UL_DL, UPLINK, rxv[2]);
-		break;
-	case MT_PHY_TYPE_HE_MU:
-		he->data1 |= HE_BITS(DATA1_FORMAT_MU) |
-			     HE_BITS(DATA1_UL_DL_KNOWN);
-
-		he->data3 |= HE_PREP(DATA3_UL_DL, UPLINK, rxv[2]);
-		he->data4 |= HE_PREP(DATA4_MU_STA_ID, MU_AID, rxv[7]);
-
-		mt7996_mac_decode_he_radiotap_ru(status, he, rxv);
-		mt7996_mac_decode_he_mu_radiotap(skb, rxv);
-		break;
-	case MT_PHY_TYPE_HE_TB:
-		he->data1 |= HE_BITS(DATA1_FORMAT_TRIG) |
-			     HE_BITS(DATA1_SPTL_REUSE2_KNOWN) |
-			     HE_BITS(DATA1_SPTL_REUSE3_KNOWN) |
-			     HE_BITS(DATA1_SPTL_REUSE4_KNOWN);
-
-		he->data4 |= HE_PREP(DATA4_TB_SPTL_REUSE1, SR_MASK, rxv[11]) |
-			     HE_PREP(DATA4_TB_SPTL_REUSE2, SR1_MASK, rxv[11]) |
-			     HE_PREP(DATA4_TB_SPTL_REUSE3, SR2_MASK, rxv[11]) |
-			     HE_PREP(DATA4_TB_SPTL_REUSE4, SR3_MASK, rxv[11]);
-
-		mt7996_mac_decode_he_radiotap_ru(status, he, rxv);
-		break;
-	default:
-		break;
-	}
-}
-
-/* The HW does not translate the mac header to 802.3 for mesh point */
-static int mt7996_reverse_frag0_hdr_trans(struct sk_buff *skb, u16 hdr_gap)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct ethhdr *eth_hdr = (struct ethhdr *)(skb->data + hdr_gap);
-	struct mt7996_sta *msta = (struct mt7996_sta *)status->wcid;
-	__le32 *rxd = (__le32 *)skb->data;
-	struct ieee80211_sta *sta;
-	struct ieee80211_vif *vif;
-	struct ieee80211_hdr hdr;
-	u16 frame_control;
-
-	if (le32_get_bits(rxd[3], MT_RXD3_NORMAL_ADDR_TYPE) !=
-	    MT_RXD3_NORMAL_U2M)
-		return -EINVAL;
-
-	if (!(le32_to_cpu(rxd[1]) & MT_RXD1_NORMAL_GROUP_4))
-		return -EINVAL;
-
-	if (!msta || !msta->vif)
-		return -EINVAL;
-
-	sta = container_of((void *)msta, struct ieee80211_sta, drv_priv);
-	vif = container_of((void *)msta->vif, struct ieee80211_vif, drv_priv);
-
-	/* store the info from RXD and ethhdr to avoid being overridden */
-	frame_control = le32_get_bits(rxd[8], MT_RXD8_FRAME_CONTROL);
-	hdr.frame_control = cpu_to_le16(frame_control);
-	hdr.seq_ctrl = cpu_to_le16(le32_get_bits(rxd[10], MT_RXD10_SEQ_CTRL));
-	hdr.duration_id = 0;
-
-	ether_addr_copy(hdr.addr1, vif->addr);
-	ether_addr_copy(hdr.addr2, sta->addr);
-	switch (frame_control & (IEEE80211_FCTL_TODS |
-				 IEEE80211_FCTL_FROMDS)) {
-	case 0:
-		ether_addr_copy(hdr.addr3, vif->bss_conf.bssid);
-		break;
-	case IEEE80211_FCTL_FROMDS:
-		ether_addr_copy(hdr.addr3, eth_hdr->h_source);
-		break;
-	case IEEE80211_FCTL_TODS:
-		ether_addr_copy(hdr.addr3, eth_hdr->h_dest);
-		break;
-	case IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS:
-		ether_addr_copy(hdr.addr3, eth_hdr->h_dest);
-		ether_addr_copy(hdr.addr4, eth_hdr->h_source);
-		break;
-	default:
-		break;
-	}
-
-	skb_pull(skb, hdr_gap + sizeof(struct ethhdr) - 2);
-	if (eth_hdr->h_proto == cpu_to_be16(ETH_P_AARP) ||
-	    eth_hdr->h_proto == cpu_to_be16(ETH_P_IPX))
-		ether_addr_copy(skb_push(skb, ETH_ALEN), bridge_tunnel_header);
-	else if (be16_to_cpu(eth_hdr->h_proto) >= ETH_P_802_3_MIN)
-		ether_addr_copy(skb_push(skb, ETH_ALEN), rfc1042_header);
-	else
-		skb_pull(skb, 2);
-
-	if (ieee80211_has_order(hdr.frame_control))
-		memcpy(skb_push(skb, IEEE80211_HT_CTL_LEN), &rxd[11],
-		       IEEE80211_HT_CTL_LEN);
-	if (ieee80211_is_data_qos(hdr.frame_control)) {
-		__le16 qos_ctrl;
-
-		qos_ctrl = cpu_to_le16(le32_get_bits(rxd[10], MT_RXD10_QOS_CTL));
-		memcpy(skb_push(skb, IEEE80211_QOS_CTL_LEN), &qos_ctrl,
-		       IEEE80211_QOS_CTL_LEN);
-	}
-
-	if (ieee80211_has_a4(hdr.frame_control))
-		memcpy(skb_push(skb, sizeof(hdr)), &hdr, sizeof(hdr));
-	else
-		memcpy(skb_push(skb, sizeof(hdr) - 6), &hdr, sizeof(hdr) - 6);
-
-	return 0;
-}
-
-static int
-mt7996_mac_fill_rx_rate(struct mt7996_dev *dev,
-			struct mt76_rx_status *status,
-			struct ieee80211_supported_band *sband,
-			__le32 *rxv, u8 *mode)
-{
-	u32 v0, v2;
-	u8 stbc, gi, bw, dcm, nss;
-	int i, idx;
-	bool cck = false;
-
-	v0 = le32_to_cpu(rxv[0]);
-	v2 = le32_to_cpu(rxv[2]);
-
-	idx = i = FIELD_GET(MT_PRXV_TX_RATE, v0);
-	nss = FIELD_GET(MT_PRXV_NSTS, v0) + 1;
-
-	stbc = FIELD_GET(MT_PRXV_HT_STBC, v2);
-	gi = FIELD_GET(MT_PRXV_HT_SHORT_GI, v2);
-	*mode = FIELD_GET(MT_PRXV_TX_MODE, v2);
-	dcm = FIELD_GET(MT_PRXV_DCM, v2);
-	bw = FIELD_GET(MT_PRXV_FRAME_MODE, v2);
-
-	switch (*mode) {
-	case MT_PHY_TYPE_CCK:
-		cck = true;
-		fallthrough;
-	case MT_PHY_TYPE_OFDM:
-		i = mt76_get_rate(&dev->mt76, sband, i, cck);
-		break;
-	case MT_PHY_TYPE_HT_GF:
-	case MT_PHY_TYPE_HT:
-		status->encoding = RX_ENC_HT;
-		if (gi)
-			status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-		if (i > 31)
-			return -EINVAL;
-		break;
-	case MT_PHY_TYPE_VHT:
-		status->nss = nss;
-		status->encoding = RX_ENC_VHT;
-		if (gi)
-			status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-		if (i > 11)
-			return -EINVAL;
-		break;
-	case MT_PHY_TYPE_HE_MU:
-	case MT_PHY_TYPE_HE_SU:
-	case MT_PHY_TYPE_HE_EXT_SU:
-	case MT_PHY_TYPE_HE_TB:
-		status->nss = nss;
-		status->encoding = RX_ENC_HE;
-		i &= GENMASK(3, 0);
-
-		if (gi <= NL80211_RATE_INFO_HE_GI_3_2)
-			status->he_gi = gi;
-
-		status->he_dcm = dcm;
-		break;
-	default:
-		return -EINVAL;
-	}
-	status->rate_idx = i;
-
-	switch (bw) {
-	case IEEE80211_STA_RX_BW_20:
-		break;
-	case IEEE80211_STA_RX_BW_40:
-		if (*mode & MT_PHY_TYPE_HE_EXT_SU &&
-		    (idx & MT_PRXV_TX_ER_SU_106T)) {
-			status->bw = RATE_INFO_BW_HE_RU;
-			status->he_ru =
-				NL80211_RATE_INFO_HE_RU_ALLOC_106;
-		} else {
-			status->bw = RATE_INFO_BW_40;
-		}
-		break;
-	case IEEE80211_STA_RX_BW_80:
-		status->bw = RATE_INFO_BW_80;
-		break;
-	case IEEE80211_STA_RX_BW_160:
-		status->bw = RATE_INFO_BW_160;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	status->enc_flags |= RX_ENC_FLAG_STBC_MASK * stbc;
-	if (*mode < MT_PHY_TYPE_HE_SU && gi)
-		status->enc_flags |= RX_ENC_FLAG_SHORT_GI;
-
-	return 0;
-}
-
-static int
-mt7996_mac_fill_rx(struct mt7996_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_rx_status *status = (struct mt76_rx_status *)skb->cb;
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7996_phy *phy = &dev->phy;
-	struct ieee80211_supported_band *sband;
-	__le32 *rxd = (__le32 *)skb->data;
-	__le32 *rxv = NULL;
-	u32 rxd0 = le32_to_cpu(rxd[0]);
-	u32 rxd1 = le32_to_cpu(rxd[1]);
-	u32 rxd2 = le32_to_cpu(rxd[2]);
-	u32 rxd3 = le32_to_cpu(rxd[3]);
-	u32 rxd4 = le32_to_cpu(rxd[4]);
-	u32 csum_mask = MT_RXD0_NORMAL_IP_SUM | MT_RXD0_NORMAL_UDP_TCP_SUM;
-	u32 csum_status = *(u32 *)skb->cb;
-	bool unicast, insert_ccmp_hdr = false;
-	u8 remove_pad, amsdu_info, band_idx;
-	u8 mode = 0, qos_ctl = 0;
-	bool hdr_trans;
-	u16 hdr_gap;
-	u16 seq_ctrl = 0;
-	__le16 fc = 0;
-	int idx;
-
-	memset(status, 0, sizeof(*status));
-
-	band_idx = FIELD_GET(MT_RXD1_NORMAL_BAND_IDX, rxd1);
-	mphy = dev->mt76.phys[band_idx];
-	phy = mphy->priv;
-	status->phy_idx = mphy->band_idx;
-
-	if (!test_bit(MT76_STATE_RUNNING, &mphy->state))
-		return -EINVAL;
-
-	if (rxd2 & MT_RXD2_NORMAL_AMSDU_ERR)
-		return -EINVAL;
-
-	hdr_trans = rxd2 & MT_RXD2_NORMAL_HDR_TRANS;
-	if (hdr_trans && (rxd1 & MT_RXD1_NORMAL_CM))
-		return -EINVAL;
-
-	/* ICV error or CCMP/BIP/WPI MIC error */
-	if (rxd1 & MT_RXD1_NORMAL_ICV_ERR)
-		status->flag |= RX_FLAG_ONLY_MONITOR;
-
-	unicast = FIELD_GET(MT_RXD3_NORMAL_ADDR_TYPE, rxd3) == MT_RXD3_NORMAL_U2M;
-	idx = FIELD_GET(MT_RXD1_NORMAL_WLAN_IDX, rxd1);
-	status->wcid = mt7996_rx_get_wcid(dev, idx, unicast);
-
-	if (status->wcid) {
-		struct mt7996_sta *msta;
-
-		msta = container_of(status->wcid, struct mt7996_sta, wcid);
-		spin_lock_bh(&dev->sta_poll_lock);
-		if (list_empty(&msta->poll_list))
-			list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-		spin_unlock_bh(&dev->sta_poll_lock);
-	}
-
-	status->freq = mphy->chandef.chan->center_freq;
-	status->band = mphy->chandef.chan->band;
-	if (status->band == NL80211_BAND_5GHZ)
-		sband = &mphy->sband_5g.sband;
-	else if (status->band == NL80211_BAND_6GHZ)
-		sband = &mphy->sband_6g.sband;
-	else
-		sband = &mphy->sband_2g.sband;
-
-	if (!sband->channels)
-		return -EINVAL;
-
-	if ((rxd0 & csum_mask) == csum_mask &&
-	    !(csum_status & (BIT(0) | BIT(2) | BIT(3))))
-		skb->ip_summed = CHECKSUM_UNNECESSARY;
-
-	if (rxd1 & MT_RXD3_NORMAL_FCS_ERR)
-		status->flag |= RX_FLAG_FAILED_FCS_CRC;
-
-	if (rxd1 & MT_RXD1_NORMAL_TKIP_MIC_ERR)
-		status->flag |= RX_FLAG_MMIC_ERROR;
-
-	if (FIELD_GET(MT_RXD2_NORMAL_SEC_MODE, rxd2) != 0 &&
-	    !(rxd1 & (MT_RXD1_NORMAL_CLM | MT_RXD1_NORMAL_CM))) {
-		status->flag |= RX_FLAG_DECRYPTED;
-		status->flag |= RX_FLAG_IV_STRIPPED;
-		status->flag |= RX_FLAG_MMIC_STRIPPED | RX_FLAG_MIC_STRIPPED;
-	}
-
-	remove_pad = FIELD_GET(MT_RXD2_NORMAL_HDR_OFFSET, rxd2);
-
-	if (rxd2 & MT_RXD2_NORMAL_MAX_LEN_ERROR)
-		return -EINVAL;
-
-	rxd += 8;
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_4) {
-		u32 v0 = le32_to_cpu(rxd[0]);
-		u32 v2 = le32_to_cpu(rxd[2]);
-
-		fc = cpu_to_le16(FIELD_GET(MT_RXD8_FRAME_CONTROL, v0));
-		qos_ctl = FIELD_GET(MT_RXD10_QOS_CTL, v2);
-		seq_ctrl = FIELD_GET(MT_RXD10_SEQ_CTRL, v2);
-
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_1) {
-		u8 *data = (u8 *)rxd;
-
-		if (status->flag & RX_FLAG_DECRYPTED) {
-			switch (FIELD_GET(MT_RXD2_NORMAL_SEC_MODE, rxd2)) {
-			case MT_CIPHER_AES_CCMP:
-			case MT_CIPHER_CCMP_CCX:
-			case MT_CIPHER_CCMP_256:
-				insert_ccmp_hdr =
-					FIELD_GET(MT_RXD2_NORMAL_FRAG, rxd2);
-				fallthrough;
-			case MT_CIPHER_TKIP:
-			case MT_CIPHER_TKIP_NO_MIC:
-			case MT_CIPHER_GCMP:
-			case MT_CIPHER_GCMP_256:
-				status->iv[0] = data[5];
-				status->iv[1] = data[4];
-				status->iv[2] = data[3];
-				status->iv[3] = data[2];
-				status->iv[4] = data[1];
-				status->iv[5] = data[0];
-				break;
-			default:
-				break;
-			}
-		}
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_2) {
-		status->timestamp = le32_to_cpu(rxd[0]);
-		status->flag |= RX_FLAG_MACTIME_START;
-
-		if (!(rxd2 & MT_RXD2_NORMAL_NON_AMPDU)) {
-			status->flag |= RX_FLAG_AMPDU_DETAILS;
-
-			/* all subframes of an A-MPDU have the same timestamp */
-			if (phy->rx_ampdu_ts != status->timestamp) {
-				if (!++phy->ampdu_ref)
-					phy->ampdu_ref++;
-			}
-			phy->rx_ampdu_ts = status->timestamp;
-
-			status->ampdu_ref = phy->ampdu_ref;
-		}
-
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-	}
-
-	/* RXD Group 3 - P-RXV */
-	if (rxd1 & MT_RXD1_NORMAL_GROUP_3) {
-		u32 v3;
-		int ret;
-
-		rxv = rxd;
-		rxd += 4;
-		if ((u8 *)rxd - skb->data >= skb->len)
-			return -EINVAL;
-
-		v3 = le32_to_cpu(rxv[3]);
-
-		status->chains = mphy->antenna_mask;
-		status->chain_signal[0] = to_rssi(MT_PRXV_RCPI0, v3);
-		status->chain_signal[1] = to_rssi(MT_PRXV_RCPI1, v3);
-		status->chain_signal[2] = to_rssi(MT_PRXV_RCPI2, v3);
-		status->chain_signal[3] = to_rssi(MT_PRXV_RCPI3, v3);
-
-		/* RXD Group 5 - C-RXV */
-		if (rxd1 & MT_RXD1_NORMAL_GROUP_5) {
-			rxd += 24;
-			if ((u8 *)rxd - skb->data >= skb->len)
-				return -EINVAL;
-		}
-
-		ret = mt7996_mac_fill_rx_rate(dev, status, sband, rxv, &mode);
-		if (ret < 0)
-			return ret;
-	}
-
-	amsdu_info = FIELD_GET(MT_RXD4_NORMAL_PAYLOAD_FORMAT, rxd4);
-	status->amsdu = !!amsdu_info;
-	if (status->amsdu) {
-		status->first_amsdu = amsdu_info == MT_RXD4_FIRST_AMSDU_FRAME;
-		status->last_amsdu = amsdu_info == MT_RXD4_LAST_AMSDU_FRAME;
-	}
-
-	hdr_gap = (u8 *)rxd - skb->data + 2 * remove_pad;
-	if (hdr_trans && ieee80211_has_morefrags(fc)) {
-		if (mt7996_reverse_frag0_hdr_trans(skb, hdr_gap))
-			return -EINVAL;
-		hdr_trans = false;
-	} else {
-		int pad_start = 0;
-
-		skb_pull(skb, hdr_gap);
-		if (!hdr_trans && status->amsdu) {
-			pad_start = ieee80211_get_hdrlen_from_skb(skb);
-		} else if (hdr_trans && (rxd2 & MT_RXD2_NORMAL_HDR_TRANS_ERROR)) {
-			/*
-			 * When header translation failure is indicated,
-			 * the hardware will insert an extra 2-byte field
-			 * containing the data length after the protocol
-			 * type field.
-			 */
-			pad_start = 12;
-			if (get_unaligned_be16(skb->data + pad_start) == ETH_P_8021Q)
-				pad_start += 4;
-			else
-				pad_start = 0;
-		}
-
-		if (pad_start) {
-			memmove(skb->data + 2, skb->data, pad_start);
-			skb_pull(skb, 2);
-		}
-	}
-
-	if (!hdr_trans) {
-		struct ieee80211_hdr *hdr;
-
-		if (insert_ccmp_hdr) {
-			u8 key_id = FIELD_GET(MT_RXD1_NORMAL_KEY_ID, rxd1);
-
-			mt76_insert_ccmp_hdr(skb, key_id);
-		}
-
-		hdr = mt76_skb_get_hdr(skb);
-		fc = hdr->frame_control;
-		if (ieee80211_is_data_qos(fc)) {
-			seq_ctrl = le16_to_cpu(hdr->seq_ctrl);
-			qos_ctl = *ieee80211_get_qos_ctl(hdr);
-		}
-	} else {
-		status->flag |= RX_FLAG_8023;
-	}
-
-	if (rxv && mode >= MT_PHY_TYPE_HE_SU && !(status->flag & RX_FLAG_8023))
-		mt7996_mac_decode_he_radiotap(skb, rxv, mode);
-
-	if (!status->wcid || !ieee80211_is_data_qos(fc))
-		return 0;
-
-	status->aggr = unicast &&
-		       !ieee80211_is_qos_nullfunc(fc);
-	status->qos_ctl = qos_ctl;
-	status->seqno = IEEE80211_SEQ_TO_SN(seq_ctrl);
-
-	return 0;
-}
-
-static void
-mt7996_mac_write_txwi_8023(struct mt7996_dev *dev, __le32 *txwi,
-			   struct sk_buff *skb, struct mt76_wcid *wcid)
-{
-
-	u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
-	u8 fc_type, fc_stype;
-	u16 ethertype;
-	bool wmm = false;
-	u32 val;
-
-	if (wcid->sta) {
-		struct ieee80211_sta *sta;
-
-		sta = container_of((void *)wcid, struct ieee80211_sta, drv_priv);
-		wmm = sta->wme;
-	}
-
-	val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_3) |
-	      FIELD_PREP(MT_TXD1_TID, tid);
-
-	ethertype = get_unaligned_be16(&skb->data[12]);
-	if (ethertype >= ETH_P_802_3_MIN)
-		val |= MT_TXD1_ETH_802_3;
-
-	txwi[1] |= cpu_to_le32(val);
-
-	fc_type = IEEE80211_FTYPE_DATA >> 2;
-	fc_stype = wmm ? IEEE80211_STYPE_QOS_DATA >> 4 : 0;
-
-	val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
-	      FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype);
-
-	txwi[2] |= cpu_to_le32(val);
-}
-
-static void
-mt7996_mac_write_txwi_80211(struct mt7996_dev *dev, __le32 *txwi,
-			    struct sk_buff *skb, struct ieee80211_key_conf *key)
-{
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-	struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	bool multicast = is_multicast_ether_addr(hdr->addr1);
-	u8 tid = skb->priority & IEEE80211_QOS_CTL_TID_MASK;
-	__le16 fc = hdr->frame_control;
-	u8 fc_type, fc_stype;
-	u32 val;
-
-	if (ieee80211_is_action(fc) &&
-	    mgmt->u.action.category == WLAN_CATEGORY_BACK &&
-	    mgmt->u.action.u.addba_req.action_code == WLAN_ACTION_ADDBA_REQ)
-		tid = MT_TX_ADDBA;
-	else if (ieee80211_is_mgmt(hdr->frame_control))
-		tid = MT_TX_NORMAL;
-
-	val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_802_11) |
-	      FIELD_PREP(MT_TXD1_HDR_INFO,
-			 ieee80211_get_hdrlen_from_skb(skb) / 2) |
-	      FIELD_PREP(MT_TXD1_TID, tid);
-
-	if (!ieee80211_is_data(fc) || multicast ||
-	    info->flags & IEEE80211_TX_CTL_USE_MINRATE)
-		val |= MT_TXD1_FIXED_RATE;
-
-	if (key && multicast && ieee80211_is_robust_mgmt_frame(skb) &&
-	    key->cipher == WLAN_CIPHER_SUITE_AES_CMAC) {
-		val |= MT_TXD1_BIP;
-		txwi[3] &= ~cpu_to_le32(MT_TXD3_PROTECT_FRAME);
-	}
-
-	txwi[1] |= cpu_to_le32(val);
-
-	fc_type = (le16_to_cpu(fc) & IEEE80211_FCTL_FTYPE) >> 2;
-	fc_stype = (le16_to_cpu(fc) & IEEE80211_FCTL_STYPE) >> 4;
-
-	val = FIELD_PREP(MT_TXD2_FRAME_TYPE, fc_type) |
-	      FIELD_PREP(MT_TXD2_SUB_TYPE, fc_stype);
-
-	txwi[2] |= cpu_to_le32(val);
-
-	txwi[3] |= FIELD_PREP(MT_TXD3_BCM, multicast);
-	if (ieee80211_is_beacon(fc)) {
-		txwi[3] &= ~cpu_to_le32(MT_TXD3_SW_POWER_MGMT);
-		txwi[3] |= cpu_to_le32(MT_TXD3_REM_TX_COUNT);
-	}
-
-	if (info->flags & IEEE80211_TX_CTL_INJECTED) {
-		u16 seqno = le16_to_cpu(hdr->seq_ctrl);
-
-		if (ieee80211_is_back_req(hdr->frame_control)) {
-			struct ieee80211_bar *bar;
-
-			bar = (struct ieee80211_bar *)skb->data;
-			seqno = le16_to_cpu(bar->start_seq_num);
-		}
-
-		val = MT_TXD3_SN_VALID |
-		      FIELD_PREP(MT_TXD3_SEQ, IEEE80211_SEQ_TO_SN(seqno));
-		txwi[3] |= cpu_to_le32(val);
-		txwi[3] &= ~cpu_to_le32(MT_TXD3_HW_AMSDU);
-	}
-}
-
-static u16
-mt7996_mac_tx_rate_val(struct mt76_phy *mphy, struct ieee80211_vif *vif,
-		       bool beacon, bool mcast)
-{
-	u8 mode = 0, band = mphy->chandef.chan->band;
-	int rateidx = 0, mcast_rate;
-
-	if (beacon) {
-		struct cfg80211_bitrate_mask *mask;
-
-		mask = &vif->bss_conf.beacon_tx_rate;
-		if (hweight16(mask->control[band].he_mcs[0]) == 1) {
-			rateidx = ffs(mask->control[band].he_mcs[0]) - 1;
-			mode = MT_PHY_TYPE_HE_SU;
-			goto out;
-		} else if (hweight16(mask->control[band].vht_mcs[0]) == 1) {
-			rateidx = ffs(mask->control[band].vht_mcs[0]) - 1;
-			mode = MT_PHY_TYPE_VHT;
-			goto out;
-		} else if (hweight8(mask->control[band].ht_mcs[0]) == 1) {
-			rateidx = ffs(mask->control[band].ht_mcs[0]) - 1;
-			mode = MT_PHY_TYPE_HT;
-			goto out;
-		} else if (hweight32(mask->control[band].legacy) == 1) {
-			rateidx = ffs(mask->control[band].legacy) - 1;
-			goto legacy;
-		}
-	}
-
-	mcast_rate = vif->bss_conf.mcast_rate[band];
-	if (mcast && mcast_rate > 0)
-		rateidx = mcast_rate - 1;
-	else
-		rateidx = ffs(vif->bss_conf.basic_rates) - 1;
-
-legacy:
-	rateidx = mt76_calculate_default_rate(mphy, rateidx);
-	mode = rateidx >> 8;
-	rateidx &= GENMASK(7, 0);
-
-out:
-	return FIELD_PREP(MT_TX_RATE_IDX, rateidx) |
-	       FIELD_PREP(MT_TX_RATE_MODE, mode);
-}
-
-void mt7996_mac_write_txwi(struct mt7996_dev *dev, __le32 *txwi,
-			  struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
-			  struct ieee80211_key_conf *key, u32 changed)
-{
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt76_phy *mphy = &dev->mphy;
-	u8 band_idx = (info->hw_queue & MT_TX_HW_QUEUE_PHY) >> 2;
-	u8 p_fmt, q_idx, omac_idx = 0, wmm_idx = 0;
-	bool is_8023 = info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP;
-	u16 tx_count = 15;
-	u32 val;
-	bool beacon = !!(changed & (BSS_CHANGED_BEACON |
-				    BSS_CHANGED_BEACON_ENABLED));
-	bool inband_disc = !!(changed & (BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |
-					 BSS_CHANGED_FILS_DISCOVERY));
-
-	if (vif) {
-		struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-
-		omac_idx = mvif->mt76.omac_idx;
-		wmm_idx = mvif->mt76.wmm_idx;
-		band_idx = mvif->mt76.band_idx;
-	}
-
-	mphy = mt76_dev_phy(&dev->mt76, band_idx);
-
-	if (inband_disc) {
-		p_fmt = MT_TX_TYPE_FW;
-		q_idx = MT_LMAC_ALTX0;
-	} else if (beacon) {
-		p_fmt = MT_TX_TYPE_FW;
-		q_idx = MT_LMAC_BCN0;
-	} else if (skb_get_queue_mapping(skb) >= MT_TXQ_PSD) {
-		p_fmt = MT_TX_TYPE_CT;
-		q_idx = MT_LMAC_ALTX0;
-	} else {
-		p_fmt = MT_TX_TYPE_CT;
-		q_idx = wmm_idx * MT7996_MAX_WMM_SETS +
-			mt76_connac_lmac_mapping(skb_get_queue_mapping(skb));
-	}
-
-	val = FIELD_PREP(MT_TXD0_TX_BYTES, skb->len + MT_TXD_SIZE) |
-	      FIELD_PREP(MT_TXD0_PKT_FMT, p_fmt) |
-	      FIELD_PREP(MT_TXD0_Q_IDX, q_idx);
-	txwi[0] = cpu_to_le32(val);
-
-	val = FIELD_PREP(MT_TXD1_WLAN_IDX, wcid->idx) |
-	      FIELD_PREP(MT_TXD1_OWN_MAC, omac_idx);
-
-	if (band_idx)
-		val |= FIELD_PREP(MT_TXD1_TGID, band_idx);
-
-	txwi[1] = cpu_to_le32(val);
-	txwi[2] = 0;
-
-	val = MT_TXD3_SW_POWER_MGMT |
-	      FIELD_PREP(MT_TXD3_REM_TX_COUNT, tx_count);
-	if (key)
-		val |= MT_TXD3_PROTECT_FRAME;
-	if (info->flags & IEEE80211_TX_CTL_NO_ACK)
-		val |= MT_TXD3_NO_ACK;
-	if (wcid->amsdu)
-		val |= MT_TXD3_HW_AMSDU;
-
-	txwi[3] = cpu_to_le32(val);
-	txwi[4] = 0;
-
-	val = FIELD_PREP(MT_TXD5_PID, pid);
-	if (pid >= MT_PACKET_ID_FIRST)
-		val |= MT_TXD5_TX_STATUS_HOST;
-	txwi[5] = cpu_to_le32(val);
-
-	val = MT_TXD6_DIS_MAT | MT_TXD6_DAS |
-	      FIELD_PREP(MT_TXD6_MSDU_CNT, 1);
-	txwi[6] = cpu_to_le32(val);
-	txwi[7] = 0;
-
-	if (is_8023)
-		mt7996_mac_write_txwi_8023(dev, txwi, skb, wcid);
-	else
-		mt7996_mac_write_txwi_80211(dev, txwi, skb, key);
-
-	if (txwi[1] & cpu_to_le32(MT_TXD1_FIXED_RATE)) {
-		/* Fixed rata is available just for 802.11 txd */
-		struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-		bool multicast = is_multicast_ether_addr(hdr->addr1);
-		u16 rate = mt7996_mac_tx_rate_val(mphy, vif, beacon, multicast);
-
-		/* fix to bw 20 */
-		val = MT_TXD6_FIXED_BW |
-		      FIELD_PREP(MT_TXD6_BW, 0) |
-		      FIELD_PREP(MT_TXD6_TX_RATE, rate);
-
-		txwi[6] |= cpu_to_le32(val);
-		txwi[3] |= cpu_to_le32(MT_TXD3_BA_DISABLE);
-	}
-}
-
-int mt7996_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-			  enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			  struct ieee80211_sta *sta,
-			  struct mt76_tx_info *tx_info)
-{
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)tx_info->skb->data;
-	struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76);
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(tx_info->skb);
-	struct ieee80211_key_conf *key = info->control.hw_key;
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt76_txwi_cache *t;
-	struct mt7996_txp *txp;
-	int id, i, pid, nbuf = tx_info->nbuf - 1;
-	bool is_8023 = info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP;
-	u8 *txwi = (u8 *)txwi_ptr;
-
-	if (unlikely(tx_info->skb->len <= ETH_HLEN))
-		return -EINVAL;
-
-	if (!wcid)
-		wcid = &dev->mt76.global_wcid;
-
-	if (sta) {
-		struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-
-		if (time_after(jiffies, msta->jiffies + HZ / 4)) {
-			info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
-			msta->jiffies = jiffies;
-		}
-	}
-
-	t = (struct mt76_txwi_cache *)(txwi + mdev->drv->txwi_size);
-	t->skb = tx_info->skb;
-
-	id = mt76_token_consume(mdev, &t);
-	if (id < 0)
-		return id;
-
-	pid = mt76_tx_status_skb_add(mdev, wcid, tx_info->skb);
-	memset(txwi_ptr, 0, MT_TXD_SIZE);
-	/* Transmit non qos data by 802.11 header and need to fill txd by host*/
-	if (!is_8023 || pid >= MT_PACKET_ID_FIRST)
-		mt7996_mac_write_txwi(dev, txwi_ptr, tx_info->skb, wcid, pid,
-				      key, 0);
-
-	txp = (struct mt7996_txp *)(txwi + MT_TXD_SIZE);
-	for (i = 0; i < nbuf; i++) {
-		txp->buf[i] = cpu_to_le32(tx_info->buf[i + 1].addr);
-		txp->len[i] = cpu_to_le16(tx_info->buf[i + 1].len);
-	}
-	txp->nbuf = nbuf;
-
-	txp->flags = cpu_to_le16(MT_CT_INFO_FROM_HOST);
-
-	if (!is_8023 || pid >= MT_PACKET_ID_FIRST)
-		txp->flags |= cpu_to_le16(MT_CT_INFO_APPLY_TXD);
-
-	if (!key)
-		txp->flags |= cpu_to_le16(MT_CT_INFO_NONE_CIPHER_FRAME);
-
-	if (!is_8023 && ieee80211_is_mgmt(hdr->frame_control))
-		txp->flags |= cpu_to_le16(MT_CT_INFO_MGMT_FRAME);
-
-	if (vif) {
-		struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-
-		txp->bss_idx = mvif->mt76.idx;
-	}
-
-	txp->token = cpu_to_le16(id);
-	if (test_bit(MT_WCID_FLAG_4ADDR, &wcid->flags))
-		txp->rept_wds_wcid = cpu_to_le16(wcid->idx);
-	else
-		txp->rept_wds_wcid = cpu_to_le16(0xfff);
-	tx_info->skb = DMA_DUMMY_DATA;
-
-	/* pass partial skb header to fw */
-	tx_info->buf[1].len = MT_CT_PARSE_LEN;
-	tx_info->buf[1].skip_unmap = true;
-	tx_info->nbuf = MT_CT_DMA_BUF_NUM;
-
-	return 0;
-}
-
-static void
-mt7996_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
-{
-	struct mt7996_sta *msta;
-	u16 fc, tid;
-	u32 val;
-
-	if (!sta || !(sta->ht_cap.ht_supported || sta->he_cap.has_he))
-		return;
-
-	tid = le32_get_bits(txwi[1], MT_TXD1_TID);
-	if (tid >= 6) /* skip VO queue */
-		return;
-
-	val = le32_to_cpu(txwi[2]);
-	fc = FIELD_GET(MT_TXD2_FRAME_TYPE, val) << 2 |
-	     FIELD_GET(MT_TXD2_SUB_TYPE, val) << 4;
-	if (unlikely(fc != (IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_DATA)))
-		return;
-
-	msta = (struct mt7996_sta *)sta->drv_priv;
-	if (!test_and_set_bit(tid, &msta->ampdu_state))
-		ieee80211_start_tx_ba_session(sta, tid, 0);
-}
-
-static void
-mt7996_txp_skb_unmap(struct mt76_dev *dev, struct mt76_txwi_cache *t)
-{
-	struct mt7996_txp *txp;
-	int i;
-
-	txp = mt7996_txwi_to_txp(dev, t);
-	for (i = 0; i < txp->nbuf; i++)
-		dma_unmap_single(dev->dev, le32_to_cpu(txp->buf[i]),
-				 le16_to_cpu(txp->len[i]), DMA_TO_DEVICE);
-}
-
-static void
-mt7996_txwi_free(struct mt7996_dev *dev, struct mt76_txwi_cache *t,
-		 struct ieee80211_sta *sta, struct list_head *free_list)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt76_wcid *wcid;
-	__le32 *txwi;
-	u16 wcid_idx;
-
-	mt7996_txp_skb_unmap(mdev, t);
-	if (!t->skb)
-		goto out;
-
-	txwi = (__le32 *)mt76_get_txwi_ptr(mdev, t);
-	if (sta) {
-		wcid = (struct mt76_wcid *)sta->drv_priv;
-		wcid_idx = wcid->idx;
-
-		if (likely(t->skb->protocol != cpu_to_be16(ETH_P_PAE)))
-			mt7996_tx_check_aggr(sta, txwi);
-	} else {
-		wcid_idx = le32_get_bits(txwi[1], MT_TXD1_WLAN_IDX);
-	}
-
-	__mt76_tx_complete_skb(mdev, wcid_idx, t->skb, free_list);
-
-out:
-	t->skb = NULL;
-	mt76_put_txwi(mdev, t);
-}
-
-static void
-mt7996_mac_tx_free(struct mt7996_dev *dev, void *data, int len)
-{
-	__le32 *tx_free = (__le32 *)data, *cur_info;
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt76_phy *phy2 = mdev->phys[MT_BAND1];
-	struct mt76_phy *phy3 = mdev->phys[MT_BAND2];
-	struct mt76_txwi_cache *txwi;
-	struct ieee80211_sta *sta = NULL;
-	LIST_HEAD(free_list);
-	struct sk_buff *skb, *tmp;
-	void *end = data + len;
-	bool wake = false;
-	u16 total, count = 0;
-
-	/* clean DMA queues and unmap buffers first */
-	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_PSD], false);
-	mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[MT_TXQ_BE], false);
-	if (phy2) {
-		mt76_queue_tx_cleanup(dev, phy2->q_tx[MT_TXQ_PSD], false);
-		mt76_queue_tx_cleanup(dev, phy2->q_tx[MT_TXQ_BE], false);
-	}
-	if (phy3) {
-		mt76_queue_tx_cleanup(dev, phy3->q_tx[MT_TXQ_PSD], false);
-		mt76_queue_tx_cleanup(dev, phy3->q_tx[MT_TXQ_BE], false);
-	}
-
-	if (WARN_ON_ONCE(le32_get_bits(tx_free[1], MT_TXFREE1_VER) < 4))
-		return;
-
-	total = le32_get_bits(tx_free[0], MT_TXFREE0_MSDU_CNT);
-	for (cur_info = &tx_free[2]; count < total; cur_info++) {
-		u32 msdu, info;
-		u8 i;
-
-		if (WARN_ON_ONCE((void *)cur_info >= end))
-			return;
-		/*
-		 * 1'b1: new wcid pair.
-		 * 1'b0: msdu_id with the same 'wcid pair' as above.
-		 */
-		info = le32_to_cpu(*cur_info);
-		if (info & MT_TXFREE_INFO_PAIR) {
-			struct mt7996_sta *msta;
-			struct mt76_wcid *wcid;
-			u16 idx;
-
-			idx = FIELD_GET(MT_TXFREE_INFO_WLAN_ID, info);
-			wcid = rcu_dereference(dev->mt76.wcid[idx]);
-			sta = wcid_to_sta(wcid);
-			if (!sta)
-				continue;
-
-			msta = container_of(wcid, struct mt7996_sta, wcid);
-			spin_lock_bh(&dev->sta_poll_lock);
-			if (list_empty(&msta->poll_list))
-				list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-			spin_unlock_bh(&dev->sta_poll_lock);
-			continue;
-		}
-
-		if (info & MT_TXFREE_INFO_HEADER)
-			continue;
-
-		for (i = 0; i < 2; i++) {
-			msdu = (info >> (15 * i)) & MT_TXFREE_INFO_MSDU_ID;
-			if (msdu == MT_TXFREE_INFO_MSDU_ID)
-				continue;
-
-			count++;
-			txwi = mt76_token_release(mdev, msdu, &wake);
-			if (!txwi)
-				continue;
-
-			mt7996_txwi_free(dev, txwi, sta, &free_list);
-		}
-	}
-
-	mt7996_mac_sta_poll(dev);
-
-	if (wake)
-		mt76_set_tx_blocked(&dev->mt76, false);
-
-	mt76_worker_schedule(&dev->mt76.tx_worker);
-
-	list_for_each_entry_safe(skb, tmp, &free_list, list) {
-		skb_list_del_init(skb);
-		napi_consume_skb(skb, 1);
-	}
-}
-
-static bool
-mt7996_mac_add_txs_skb(struct mt7996_dev *dev, struct mt76_wcid *wcid, int pid,
-		       __le32 *txs_data, struct mt76_sta_stats *stats)
-{
-	struct ieee80211_supported_band *sband;
-	struct mt76_dev *mdev = &dev->mt76;
-	struct mt76_phy *mphy;
-	struct ieee80211_tx_info *info;
-	struct sk_buff_head list;
-	struct rate_info rate = {};
-	struct sk_buff *skb;
-	bool cck = false;
-	u32 txrate, txs, mode, stbc;
-
-	mt76_tx_status_lock(mdev, &list);
-	skb = mt76_tx_status_skb_get(mdev, wcid, pid, &list);
-	if (!skb)
-		goto out_no_skb;
-
-	txs = le32_to_cpu(txs_data[0]);
-
-	info = IEEE80211_SKB_CB(skb);
-	if (!(txs & MT_TXS0_ACK_ERROR_MASK))
-		info->flags |= IEEE80211_TX_STAT_ACK;
-
-	info->status.ampdu_len = 1;
-	info->status.ampdu_ack_len = !!(info->flags &
-					IEEE80211_TX_STAT_ACK);
-
-	info->status.rates[0].idx = -1;
-
-	txrate = FIELD_GET(MT_TXS0_TX_RATE, txs);
-
-	rate.mcs = FIELD_GET(MT_TX_RATE_IDX, txrate);
-	rate.nss = FIELD_GET(MT_TX_RATE_NSS, txrate) + 1;
-	stbc = le32_get_bits(txs_data[3], MT_TXS3_RATE_STBC);
-
-	if (stbc && rate.nss > 1)
-		rate.nss >>= 1;
-
-	if (rate.nss - 1 < ARRAY_SIZE(stats->tx_nss))
-		stats->tx_nss[rate.nss - 1]++;
-	if (rate.mcs < ARRAY_SIZE(stats->tx_mcs))
-		stats->tx_mcs[rate.mcs]++;
-
-	mode = FIELD_GET(MT_TX_RATE_MODE, txrate);
-	switch (mode) {
-	case MT_PHY_TYPE_CCK:
-		cck = true;
-		fallthrough;
-	case MT_PHY_TYPE_OFDM:
-		mphy = mt76_dev_phy(mdev, wcid->phy_idx);
-
-		if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
-			sband = &mphy->sband_5g.sband;
-		else if (mphy->chandef.chan->band == NL80211_BAND_6GHZ)
-			sband = &mphy->sband_6g.sband;
-		else
-			sband = &mphy->sband_2g.sband;
-
-		rate.mcs = mt76_get_rate(mphy->dev, sband, rate.mcs, cck);
-		rate.legacy = sband->bitrates[rate.mcs].bitrate;
-		break;
-	case MT_PHY_TYPE_HT:
-	case MT_PHY_TYPE_HT_GF:
-		if (rate.mcs > 31)
-			goto out;
-
-		rate.flags = RATE_INFO_FLAGS_MCS;
-		if (wcid->rate.flags & RATE_INFO_FLAGS_SHORT_GI)
-			rate.flags |= RATE_INFO_FLAGS_SHORT_GI;
-		break;
-	case MT_PHY_TYPE_VHT:
-		if (rate.mcs > 9)
-			goto out;
-
-		rate.flags = RATE_INFO_FLAGS_VHT_MCS;
-		break;
-	case MT_PHY_TYPE_HE_SU:
-	case MT_PHY_TYPE_HE_EXT_SU:
-	case MT_PHY_TYPE_HE_TB:
-	case MT_PHY_TYPE_HE_MU:
-		if (rate.mcs > 11)
-			goto out;
-
-		rate.he_gi = wcid->rate.he_gi;
-		rate.he_dcm = FIELD_GET(MT_TX_RATE_DCM, txrate);
-		rate.flags = RATE_INFO_FLAGS_HE_MCS;
-		break;
-	default:
-		goto out;
-	}
-
-	stats->tx_mode[mode]++;
-
-	switch (FIELD_GET(MT_TXS0_BW, txs)) {
-	case IEEE80211_STA_RX_BW_160:
-		rate.bw = RATE_INFO_BW_160;
-		stats->tx_bw[3]++;
-		break;
-	case IEEE80211_STA_RX_BW_80:
-		rate.bw = RATE_INFO_BW_80;
-		stats->tx_bw[2]++;
-		break;
-	case IEEE80211_STA_RX_BW_40:
-		rate.bw = RATE_INFO_BW_40;
-		stats->tx_bw[1]++;
-		break;
-	default:
-		rate.bw = RATE_INFO_BW_20;
-		stats->tx_bw[0]++;
-		break;
-	}
-	wcid->rate = rate;
-
-out:
-	mt76_tx_status_skb_done(mdev, skb, &list);
-
-out_no_skb:
-	mt76_tx_status_unlock(mdev, &list);
-
-	return !!skb;
-}
-
-static void mt7996_mac_add_txs(struct mt7996_dev *dev, void *data)
-{
-	struct mt7996_sta *msta = NULL;
-	struct mt76_wcid *wcid;
-	__le32 *txs_data = data;
-	u16 wcidx;
-	u8 pid;
-
-	if (le32_get_bits(txs_data[0], MT_TXS0_TXS_FORMAT) > 1)
-		return;
-
-	wcidx = le32_get_bits(txs_data[2], MT_TXS2_WCID);
-	pid = le32_get_bits(txs_data[3], MT_TXS3_PID);
-
-	if (pid < MT_PACKET_ID_FIRST)
-		return;
-
-	if (wcidx >= MT7996_WTBL_SIZE)
-		return;
-
-	rcu_read_lock();
-
-	wcid = rcu_dereference(dev->mt76.wcid[wcidx]);
-	if (!wcid)
-		goto out;
-
-	msta = container_of(wcid, struct mt7996_sta, wcid);
-
-	mt7996_mac_add_txs_skb(dev, wcid, pid, txs_data, &msta->stats);
-
-	if (!wcid->sta)
-		goto out;
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (list_empty(&msta->poll_list))
-		list_add_tail(&msta->poll_list, &dev->sta_poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-out:
-	rcu_read_unlock();
-}
-
-bool mt7996_rx_check(struct mt76_dev *mdev, void *data, int len)
-{
-	struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76);
-	__le32 *rxd = (__le32 *)data;
-	__le32 *end = (__le32 *)&rxd[len / 4];
-	enum rx_pkt_type type;
-
-	type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
-	if (type != PKT_TYPE_NORMAL) {
-		u32 sw_type = le32_get_bits(rxd[0], MT_RXD0_SW_PKT_TYPE_MASK);
-
-		if (unlikely((sw_type & MT_RXD0_SW_PKT_TYPE_MAP) ==
-			     MT_RXD0_SW_PKT_TYPE_FRAME))
-			return true;
-	}
-
-	switch (type) {
-	case PKT_TYPE_TXRX_NOTIFY:
-		mt7996_mac_tx_free(dev, data, len);
-		return false;
-	case PKT_TYPE_TXS:
-		for (rxd += 4; rxd + 8 <= end; rxd += 8)
-			mt7996_mac_add_txs(dev, rxd);
-		return false;
-	case PKT_TYPE_RX_FW_MONITOR:
-		mt7996_debugfs_rx_fw_monitor(dev, data, len);
-		return false;
-	default:
-		return true;
-	}
-}
-
-void mt7996_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			 struct sk_buff *skb)
-{
-	struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76);
-	__le32 *rxd = (__le32 *)skb->data;
-	__le32 *end = (__le32 *)&skb->data[skb->len];
-	enum rx_pkt_type type;
-
-	type = le32_get_bits(rxd[0], MT_RXD0_PKT_TYPE);
-	if (type != PKT_TYPE_NORMAL) {
-		u32 sw_type = le32_get_bits(rxd[0], MT_RXD0_SW_PKT_TYPE_MASK);
-
-		if (unlikely((sw_type & MT_RXD0_SW_PKT_TYPE_MAP) ==
-			     MT_RXD0_SW_PKT_TYPE_FRAME))
-			type = PKT_TYPE_NORMAL;
-	}
-
-	switch (type) {
-	case PKT_TYPE_TXRX_NOTIFY:
-		mt7996_mac_tx_free(dev, skb->data, skb->len);
-		napi_consume_skb(skb, 1);
-		break;
-	case PKT_TYPE_RX_EVENT:
-		mt7996_mcu_rx_event(dev, skb);
-		break;
-	case PKT_TYPE_TXS:
-		for (rxd += 4; rxd + 8 <= end; rxd += 8)
-			mt7996_mac_add_txs(dev, rxd);
-		dev_kfree_skb(skb);
-		break;
-	case PKT_TYPE_RX_FW_MONITOR:
-		mt7996_debugfs_rx_fw_monitor(dev, skb->data, skb->len);
-		dev_kfree_skb(skb);
-		break;
-	case PKT_TYPE_NORMAL:
-		if (!mt7996_mac_fill_rx(dev, skb)) {
-			mt76_rx(&dev->mt76, q, skb);
-			return;
-		}
-		fallthrough;
-	default:
-		dev_kfree_skb(skb);
-		break;
-	}
-}
-
-void mt7996_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e)
-{
-	if (!e->txwi) {
-		dev_kfree_skb_any(e->skb);
-		return;
-	}
-
-	/* error path */
-	if (e->skb == DMA_DUMMY_DATA) {
-		struct mt76_txwi_cache *t;
-		struct mt7996_txp *txp;
-
-		txp = mt7996_txwi_to_txp(mdev, e->txwi);
-		t = mt76_token_put(mdev, le16_to_cpu(txp->token));
-		e->skb = t ? t->skb : NULL;
-	}
-
-	if (e->skb)
-		mt76_tx_complete_skb(mdev, e->wcid, e->skb);
-}
-
-void mt7996_mac_cca_stats_reset(struct mt7996_phy *phy)
-{
-	struct mt7996_dev *dev = phy->dev;
-	u32 reg = MT_WF_PHYRX_BAND_RX_CTRL1(phy->mt76->band_idx);
-
-	mt76_clear(dev, reg, MT_WF_PHYRX_BAND_RX_CTRL1_STSCNT_EN);
-	mt76_set(dev, reg, BIT(11) | BIT(9));
-}
-
-void mt7996_mac_reset_counters(struct mt7996_phy *phy)
-{
-	struct mt7996_dev *dev = phy->dev;
-	u8 band_idx = phy->mt76->band_idx;
-	int i;
-
-	for (i = 0; i < 16; i++)
-		mt76_rr(dev, MT_TX_AGG_CNT(band_idx, i));
-
-	phy->mt76->survey_time = ktime_get_boottime();
-
-	i = ARRAY_SIZE(dev->mt76.aggr_stats) / __MT_MAX_BAND * band_idx;
-	memset(&dev->mt76.aggr_stats[i], 0,
-	       sizeof(dev->mt76.aggr_stats) / __MT_MAX_BAND);
-
-	/* reset airtime counters */
-	mt76_set(dev, MT_WF_RMAC_MIB_AIRTIME0(band_idx),
-		 MT_WF_RMAC_MIB_RXTIME_CLR);
-
-	mt7996_mcu_get_chan_mib_info(phy, true);
-}
-
-void mt7996_mac_set_timing(struct mt7996_phy *phy)
-{
-	s16 coverage_class = phy->coverage_class;
-	struct mt7996_dev *dev = phy->dev;
-	struct mt7996_phy *phy2 = mt7996_phy2(dev);
-	struct mt7996_phy *phy3 = mt7996_phy3(dev);
-	u32 val, reg_offset;
-	u32 cck = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 231) |
-		  FIELD_PREP(MT_TIMEOUT_VAL_CCA, 48);
-	u32 ofdm = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 60) |
-		   FIELD_PREP(MT_TIMEOUT_VAL_CCA, 28);
-	u8 band_idx = phy->mt76->band_idx;
-	int offset;
-	bool a_band = !(phy->mt76->chandef.chan->band == NL80211_BAND_2GHZ);
-
-	if (!test_bit(MT76_STATE_RUNNING, &phy->mt76->state))
-		return;
-
-	if (phy2)
-		coverage_class = max_t(s16, dev->phy.coverage_class,
-				       phy2->coverage_class);
-
-	if (phy3)
-		coverage_class = max_t(s16, coverage_class,
-				       phy3->coverage_class);
-
-	mt76_set(dev, MT_ARB_SCR(band_idx),
-		 MT_ARB_SCR_TX_DISABLE | MT_ARB_SCR_RX_DISABLE);
-	udelay(1);
-
-	offset = 3 * coverage_class;
-	reg_offset = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, offset) |
-		     FIELD_PREP(MT_TIMEOUT_VAL_CCA, offset);
-
-	mt76_wr(dev, MT_TMAC_CDTR(band_idx), cck + reg_offset);
-	mt76_wr(dev, MT_TMAC_ODTR(band_idx), ofdm + reg_offset);
-	mt76_wr(dev, MT_TMAC_ICR0(band_idx),
-		FIELD_PREP(MT_IFS_EIFS_OFDM, a_band ? 84 : 78) |
-		FIELD_PREP(MT_IFS_RIFS, 2) |
-		FIELD_PREP(MT_IFS_SIFS, 10) |
-		FIELD_PREP(MT_IFS_SLOT, phy->slottime));
-
-	if (!a_band)
-		mt76_wr(dev, MT_TMAC_ICR1(band_idx),
-			FIELD_PREP(MT_IFS_EIFS_CCK, 314));
-
-	if (phy->slottime < 20 || a_band)
-		val = MT7996_CFEND_RATE_DEFAULT;
-	else
-		val = MT7996_CFEND_RATE_11B;
-
-	mt76_rmw_field(dev, MT_AGG_ACR0(band_idx), MT_AGG_ACR_CFEND_RATE, val);
-	mt76_clear(dev, MT_ARB_SCR(band_idx),
-		   MT_ARB_SCR_TX_DISABLE | MT_ARB_SCR_RX_DISABLE);
-}
-
-void mt7996_mac_enable_nf(struct mt7996_dev *dev, u8 band)
-{
-	mt76_set(dev, MT_WF_PHYRX_CSD_BAND_RXTD12(band),
-		 MT_WF_PHYRX_CSD_BAND_RXTD12_IRPI_SW_CLR_ONLY |
-		 MT_WF_PHYRX_CSD_BAND_RXTD12_IRPI_SW_CLR);
-
-	mt76_set(dev, MT_WF_PHYRX_BAND_RX_CTRL1(band),
-		 FIELD_PREP(MT_WF_PHYRX_BAND_RX_CTRL1_IPI_EN, 0x5));
-}
-
-static u8
-mt7996_phy_get_nf(struct mt7996_phy *phy, u8 band_idx)
-{
-	static const u8 nf_power[] = { 92, 89, 86, 83, 80, 75, 70, 65, 60, 55, 52 };
-	struct mt7996_dev *dev = phy->dev;
-	u32 val, sum = 0, n = 0;
-	int ant, i;
-
-	for (ant = 0; ant < hweight8(phy->mt76->antenna_mask); ant++) {
-		u32 reg = MT_WF_PHYRX_CSD_IRPI(band_idx, ant);
-
-		for (i = 0; i < ARRAY_SIZE(nf_power); i++, reg += 4) {
-			val = mt76_rr(dev, reg);
-			sum += val * nf_power[i];
-			n += val;
-		}
-	}
-
-	return n ? sum / n : 0;
-}
-
-void mt7996_update_channel(struct mt76_phy *mphy)
-{
-	struct mt7996_phy *phy = (struct mt7996_phy *)mphy->priv;
-	struct mt76_channel_state *state = mphy->chan_state;
-	int nf;
-
-	mt7996_mcu_get_chan_mib_info(phy, false);
-
-	nf = mt7996_phy_get_nf(phy, mphy->band_idx);
-	if (!phy->noise)
-		phy->noise = nf << 4;
-	else if (nf)
-		phy->noise += nf - (phy->noise >> 4);
-
-	state->noise = -(phy->noise >> 4);
-}
-
-static bool
-mt7996_wait_reset_state(struct mt7996_dev *dev, u32 state)
-{
-	bool ret;
-
-	ret = wait_event_timeout(dev->reset_wait,
-				 (READ_ONCE(dev->reset_state) & state),
-				 MT7996_RESET_TIMEOUT);
-
-	WARN(!ret, "Timeout waiting for MCU reset state %x\n", state);
-	return ret;
-}
-
-static void
-mt7996_update_vif_beacon(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	struct ieee80211_hw *hw = priv;
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_ADHOC:
-	case NL80211_IFTYPE_AP:
-		mt7996_mcu_add_beacon(hw, vif, vif->bss_conf.enable_beacon);
-		break;
-	default:
-		break;
-	}
-}
-
-static void
-mt7996_update_beacons(struct mt7996_dev *dev)
-{
-	struct mt76_phy *phy2, *phy3;
-
-	ieee80211_iterate_active_interfaces(dev->mt76.hw,
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		mt7996_update_vif_beacon, dev->mt76.hw);
-
-	phy2 = dev->mt76.phys[MT_BAND1];
-	if (!phy2)
-		return;
-
-	ieee80211_iterate_active_interfaces(phy2->hw,
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		mt7996_update_vif_beacon, phy2->hw);
-
-	phy3 = dev->mt76.phys[MT_BAND2];
-	if (!phy3)
-		return;
-
-	ieee80211_iterate_active_interfaces(phy3->hw,
-		IEEE80211_IFACE_ITER_RESUME_ALL,
-		mt7996_update_vif_beacon, phy3->hw);
-}
-
-static void
-mt7996_dma_reset(struct mt7996_dev *dev)
-{
-	struct mt76_phy *phy2 = dev->mt76.phys[MT_BAND1];
-	struct mt76_phy *phy3 = dev->mt76.phys[MT_BAND2];
-	u32 hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
-	int i;
-
-	mt76_clear(dev, MT_WFDMA0_GLO_CFG,
-		   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-		   MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-
-	if (dev->hif2)
-		mt76_clear(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
-			   MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-			   MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-
-	usleep_range(1000, 2000);
-
-	for (i = 0; i < __MT_TXQ_MAX; i++) {
-		mt76_queue_tx_cleanup(dev, dev->mphy.q_tx[i], true);
-		if (phy2)
-			mt76_queue_tx_cleanup(dev, phy2->q_tx[i], true);
-		if (phy3)
-			mt76_queue_tx_cleanup(dev, phy3->q_tx[i], true);
-	}
-
-	for (i = 0; i < __MT_MCUQ_MAX; i++)
-		mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[i], true);
-
-	mt76_for_each_q_rx(&dev->mt76, i)
-		mt76_queue_rx_reset(dev, i);
-
-	mt76_tx_status_check(&dev->mt76, true);
-
-	/* re-init prefetch settings after reset */
-	mt7996_dma_prefetch(dev);
-
-	mt76_set(dev, MT_WFDMA0_GLO_CFG,
-		 MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-
-	if (dev->hif2)
-		mt76_set(dev, MT_WFDMA0_GLO_CFG + hif1_ofs,
-			 MT_WFDMA0_GLO_CFG_TX_DMA_EN |
-			 MT_WFDMA0_GLO_CFG_RX_DMA_EN);
-}
-
-void mt7996_tx_token_put(struct mt7996_dev *dev)
-{
-	struct mt76_txwi_cache *txwi;
-	int id;
-
-	spin_lock_bh(&dev->mt76.token_lock);
-	idr_for_each_entry(&dev->mt76.token, txwi, id) {
-		mt7996_txwi_free(dev, txwi, NULL, NULL);
-		dev->mt76.token_count--;
-	}
-	spin_unlock_bh(&dev->mt76.token_lock);
-	idr_destroy(&dev->mt76.token);
-}
-
-/* system error recovery */
-void mt7996_mac_reset_work(struct work_struct *work)
-{
-	struct mt7996_phy *phy2, *phy3;
-	struct mt7996_dev *dev;
-	int i;
-
-	dev = container_of(work, struct mt7996_dev, reset_work);
-	phy2 = mt7996_phy2(dev);
-	phy3 = mt7996_phy3(dev);
-
-	if (!(READ_ONCE(dev->reset_state) & MT_MCU_CMD_STOP_DMA))
-		return;
-
-	ieee80211_stop_queues(mt76_hw(dev));
-	if (phy2)
-		ieee80211_stop_queues(phy2->mt76->hw);
-	if (phy3)
-		ieee80211_stop_queues(phy3->mt76->hw);
-
-	set_bit(MT76_RESET, &dev->mphy.state);
-	set_bit(MT76_MCU_RESET, &dev->mphy.state);
-	wake_up(&dev->mt76.mcu.wait);
-	cancel_delayed_work_sync(&dev->mphy.mac_work);
-	if (phy2) {
-		set_bit(MT76_RESET, &phy2->mt76->state);
-		cancel_delayed_work_sync(&phy2->mt76->mac_work);
-	}
-	if (phy3) {
-		set_bit(MT76_RESET, &phy3->mt76->state);
-		cancel_delayed_work_sync(&phy3->mt76->mac_work);
-	}
-	mt76_worker_disable(&dev->mt76.tx_worker);
-	mt76_for_each_q_rx(&dev->mt76, i)
-		napi_disable(&dev->mt76.napi[i]);
-	napi_disable(&dev->mt76.tx_napi);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_DMA_STOPPED);
-
-	if (mt7996_wait_reset_state(dev, MT_MCU_CMD_RESET_DONE)) {
-		mt7996_dma_reset(dev);
-
-		mt7996_tx_token_put(dev);
-		idr_init(&dev->mt76.token);
-
-		mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_DMA_INIT);
-		mt7996_wait_reset_state(dev, MT_MCU_CMD_RECOVERY_DONE);
-	}
-
-	clear_bit(MT76_MCU_RESET, &dev->mphy.state);
-	clear_bit(MT76_RESET, &dev->mphy.state);
-	if (phy2)
-		clear_bit(MT76_RESET, &phy2->mt76->state);
-	if (phy3)
-		clear_bit(MT76_RESET, &phy3->mt76->state);
-
-	local_bh_disable();
-	mt76_for_each_q_rx(&dev->mt76, i) {
-		napi_enable(&dev->mt76.napi[i]);
-		napi_schedule(&dev->mt76.napi[i]);
-	}
-	local_bh_enable();
-
-	tasklet_schedule(&dev->irq_tasklet);
-
-	mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_RESET_DONE);
-	mt7996_wait_reset_state(dev, MT_MCU_CMD_NORMAL_STATE);
-
-	mt76_worker_enable(&dev->mt76.tx_worker);
-
-	local_bh_disable();
-	napi_enable(&dev->mt76.tx_napi);
-	napi_schedule(&dev->mt76.tx_napi);
-	local_bh_enable();
-
-	ieee80211_wake_queues(mt76_hw(dev));
-	if (phy2)
-		ieee80211_wake_queues(phy2->mt76->hw);
-	if (phy3)
-		ieee80211_wake_queues(phy3->mt76->hw);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	mt7996_update_beacons(dev);
-
-	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mphy.mac_work,
-				     MT7996_WATCHDOG_TIME);
-	if (phy2)
-		ieee80211_queue_delayed_work(phy2->mt76->hw,
-					     &phy2->mt76->mac_work,
-					     MT7996_WATCHDOG_TIME);
-	if (phy3)
-		ieee80211_queue_delayed_work(phy3->mt76->hw,
-					     &phy3->mt76->mac_work,
-					     MT7996_WATCHDOG_TIME);
-}
-
-void mt7996_mac_update_stats(struct mt7996_phy *phy)
-{
-	struct mt7996_dev *dev = phy->dev;
-	struct mib_stats *mib = &phy->mib;
-	int i, aggr0;
-	u8 band_idx = phy->mt76->band_idx;
-	u32 val, cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_RSCR1(band_idx));
-	mib->fcs_err_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_RSCR33(band_idx));
-	mib->rx_fifo_full_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_RSCR31(band_idx));
-	mib->rx_mpdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_SDR6(band_idx));
-	mib->channel_idle_cnt += FIELD_GET(MT_MIB_SDR6_CHANNEL_IDL_CNT_MASK, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_RVSR0(band_idx));
-	mib->rx_vector_mismatch_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_RSCR35(band_idx));
-	mib->rx_delimiter_fail_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_RSCR36(band_idx));
-	mib->rx_len_mismatch_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_TSCR0(band_idx));
-	mib->tx_ampdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_TSCR2(band_idx));
-	mib->tx_stop_q_empty_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_TSCR3(band_idx));
-	mib->tx_mpdu_attempts_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_TSCR4(band_idx));
-	mib->tx_mpdu_success_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_RSCR27(band_idx));
-	mib->rx_ampdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_RSCR28(band_idx));
-	mib->rx_ampdu_bytes_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_RSCR29(band_idx));
-	mib->rx_ampdu_valid_subframe_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_RSCR30(band_idx));
-	mib->rx_ampdu_valid_subframe_bytes_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_SDR27(band_idx));
-	mib->tx_rwp_fail_cnt += FIELD_GET(MT_MIB_SDR27_TX_RWP_FAIL_CNT, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_SDR28(band_idx));
-	mib->tx_rwp_need_cnt += FIELD_GET(MT_MIB_SDR28_TX_RWP_NEED_CNT, cnt);
-
-	cnt = mt76_rr(dev, MT_UMIB_RPDCR(band_idx));
-	mib->rx_pfdrop_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_RVSR1(band_idx));
-	mib->rx_vec_queue_overflow_drop_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_TSCR1(band_idx));
-	mib->rx_ba_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_BSCR0(band_idx));
-	mib->tx_bf_ebf_ppdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_BSCR1(band_idx));
-	mib->tx_bf_ibf_ppdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_BSCR2(band_idx));
-	mib->tx_mu_bf_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_TSCR5(band_idx));
-	mib->tx_mu_mpdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_TSCR6(band_idx));
-	mib->tx_mu_acked_mpdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_TSCR7(band_idx));
-	mib->tx_su_acked_mpdu_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_BSCR3(band_idx));
-	mib->tx_bf_rx_fb_ht_cnt += cnt;
-	mib->tx_bf_rx_fb_all_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_BSCR4(band_idx));
-	mib->tx_bf_rx_fb_vht_cnt += cnt;
-	mib->tx_bf_rx_fb_all_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_BSCR5(band_idx));
-	mib->tx_bf_rx_fb_he_cnt += cnt;
-	mib->tx_bf_rx_fb_all_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_BSCR6(band_idx));
-	mib->tx_bf_rx_fb_eht_cnt += cnt;
-	mib->tx_bf_rx_fb_all_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_ETBF_RX_FB_CONT(band_idx));
-	mib->tx_bf_rx_fb_bw = FIELD_GET(MT_ETBF_RX_FB_BW, cnt);
-	mib->tx_bf_rx_fb_nc_cnt += FIELD_GET(MT_ETBF_RX_FB_NC, cnt);
-	mib->tx_bf_rx_fb_nr_cnt += FIELD_GET(MT_ETBF_RX_FB_NR, cnt);
-
-	cnt = mt76_rr(dev, MT_MIB_BSCR7(band_idx));
-	mib->tx_bf_fb_trig_cnt += cnt;
-
-	cnt = mt76_rr(dev, MT_MIB_BSCR17(band_idx));
-	mib->tx_bf_fb_cpl_cnt += cnt;
-
-	for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++) {
-		cnt = mt76_rr(dev, MT_PLE_AMSDU_PACK_MSDU_CNT(i));
-		mib->tx_amsdu[i] += cnt;
-		mib->tx_amsdu_cnt += cnt;
-	}
-
-	aggr0 = ARRAY_SIZE(dev->mt76.aggr_stats) / __MT_MAX_BAND * band_idx;
-
-	/* rts count */
-	val = mt76_rr(dev, MT_MIB_BTSCR5(band_idx));
-	mib->rts_cnt += val;
-
-	/* rts retry count */
-	val = mt76_rr(dev, MT_MIB_BTSCR6(band_idx));
-	mib->rts_retries_cnt += val;
-
-	/* ba miss count */
-	val = mt76_rr(dev, MT_MIB_BTSCR0(band_idx));
-	mib->ba_miss_cnt += val;
-
-	/* ack fail count */
-	val = mt76_rr(dev, MT_MIB_BFTFCR(band_idx));
-	mib->ack_fail_cnt += val;
-
-	for (i = 0; i < 16; i++) {
-		val = mt76_rr(dev, MT_TX_AGG_CNT(band_idx, i));
-		dev->mt76.aggr_stats[aggr0++] += val;
-	}
-}
-
-void mt7996_mac_sta_rc_work(struct work_struct *work)
-{
-	struct mt7996_dev *dev = container_of(work, struct mt7996_dev, rc_work);
-	struct ieee80211_sta *sta;
-	struct ieee80211_vif *vif;
-	struct mt7996_sta *msta;
-	u32 changed;
-	LIST_HEAD(list);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	list_splice_init(&dev->sta_rc_list, &list);
-
-	while (!list_empty(&list)) {
-		msta = list_first_entry(&list, struct mt7996_sta, rc_list);
-		list_del_init(&msta->rc_list);
-		changed = msta->changed;
-		msta->changed = 0;
-		spin_unlock_bh(&dev->sta_poll_lock);
-
-		sta = container_of((void *)msta, struct ieee80211_sta, drv_priv);
-		vif = container_of((void *)msta->vif, struct ieee80211_vif, drv_priv);
-
-		if (changed & (IEEE80211_RC_SUPP_RATES_CHANGED |
-			       IEEE80211_RC_NSS_CHANGED |
-			       IEEE80211_RC_BW_CHANGED))
-			mt7996_mcu_add_rate_ctrl(dev, vif, sta, true);
-
-		/* TODO: smps change */
-
-		spin_lock_bh(&dev->sta_poll_lock);
-	}
-
-	spin_unlock_bh(&dev->sta_poll_lock);
-}
-
-void mt7996_mac_work(struct work_struct *work)
-{
-	struct mt7996_phy *phy;
-	struct mt76_phy *mphy;
-
-	mphy = (struct mt76_phy *)container_of(work, struct mt76_phy,
-					       mac_work.work);
-	phy = mphy->priv;
-
-	mutex_lock(&mphy->dev->mutex);
-
-	mt76_update_survey(mphy);
-	if (++mphy->mac_work_count == 5) {
-		mphy->mac_work_count = 0;
-
-		mt7996_mac_update_stats(phy);
-	}
-
-	mutex_unlock(&mphy->dev->mutex);
-
-	mt76_tx_status_check(mphy->dev, false);
-
-	ieee80211_queue_delayed_work(mphy->hw, &mphy->mac_work,
-				     MT7996_WATCHDOG_TIME);
-}
-
-static void mt7996_dfs_stop_radar_detector(struct mt7996_phy *phy)
-{
-	struct mt7996_dev *dev = phy->dev;
-
-	if (phy->rdd_state & BIT(0))
-		mt7996_mcu_rdd_cmd(dev, RDD_STOP, 0,
-				  MT_RX_SEL0, 0);
-	if (phy->rdd_state & BIT(1))
-		mt7996_mcu_rdd_cmd(dev, RDD_STOP, 1,
-				  MT_RX_SEL0, 0);
-}
-
-static int mt7996_dfs_start_rdd(struct mt7996_dev *dev, int chain)
-{
-	int err, region;
-
-	switch (dev->mt76.region) {
-	case NL80211_DFS_ETSI:
-		region = 0;
-		break;
-	case NL80211_DFS_JP:
-		region = 2;
-		break;
-	case NL80211_DFS_FCC:
-	default:
-		region = 1;
-		break;
-	}
-
-	err = mt7996_mcu_rdd_cmd(dev, RDD_START, chain,
-				MT_RX_SEL0, region);
-	if (err < 0)
-		return err;
-
-	return mt7996_mcu_rdd_cmd(dev, RDD_DET_MODE, chain,
-				 MT_RX_SEL0, 1);
-}
-
-static int mt7996_dfs_start_radar_detector(struct mt7996_phy *phy)
-{
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	struct mt7996_dev *dev = phy->dev;
-	u8 band_idx = phy->mt76->band_idx;
-	int err;
-
-	/* start CAC */
-	err = mt7996_mcu_rdd_cmd(dev, RDD_CAC_START, band_idx,
-				MT_RX_SEL0, 0);
-	if (err < 0)
-		return err;
-
-	err = mt7996_dfs_start_rdd(dev, band_idx);
-	if (err < 0)
-		return err;
-
-	phy->rdd_state |= BIT(band_idx);
-
-	if (chandef->width == NL80211_CHAN_WIDTH_160 ||
-	    chandef->width == NL80211_CHAN_WIDTH_80P80) {
-		err = mt7996_dfs_start_rdd(dev, 1);
-		if (err < 0)
-			return err;
-
-		phy->rdd_state |= BIT(1);
-	}
-
-	return 0;
-}
-
-static int
-mt7996_dfs_init_radar_specs(struct mt7996_phy *phy)
-{
-	const struct mt7996_dfs_radar_spec *radar_specs;
-	struct mt7996_dev *dev = phy->dev;
-	int err, i;
-
-	switch (dev->mt76.region) {
-	case NL80211_DFS_FCC:
-		radar_specs = &fcc_radar_specs;
-		err = mt7996_mcu_set_fcc5_lpn(dev, 8);
-		if (err < 0)
-			return err;
-		break;
-	case NL80211_DFS_ETSI:
-		radar_specs = &etsi_radar_specs;
-		break;
-	case NL80211_DFS_JP:
-		radar_specs = &jp_radar_specs;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	for (i = 0; i < ARRAY_SIZE(radar_specs->radar_pattern); i++) {
-		err = mt7996_mcu_set_radar_th(dev, i,
-					      &radar_specs->radar_pattern[i]);
-		if (err < 0)
-			return err;
-	}
-
-	return mt7996_mcu_set_pulse_th(dev, &radar_specs->pulse_th);
-}
-
-int mt7996_dfs_init_radar_detector(struct mt7996_phy *phy)
-{
-	struct mt7996_dev *dev = phy->dev;
-	enum mt76_dfs_state dfs_state, prev_state;
-	int err;
-
-	prev_state = phy->mt76->dfs_state;
-	dfs_state = mt76_phy_dfs_state(phy->mt76);
-
-	if (prev_state == dfs_state)
-		return 0;
-
-	if (prev_state == MT_DFS_STATE_UNKNOWN)
-		mt7996_dfs_stop_radar_detector(phy);
-
-	if (dfs_state == MT_DFS_STATE_DISABLED)
-		goto stop;
-
-	if (prev_state <= MT_DFS_STATE_DISABLED) {
-		err = mt7996_dfs_init_radar_specs(phy);
-		if (err < 0)
-			return err;
-
-		err = mt7996_dfs_start_radar_detector(phy);
-		if (err < 0)
-			return err;
-
-		phy->mt76->dfs_state = MT_DFS_STATE_CAC;
-	}
-
-	if (dfs_state == MT_DFS_STATE_CAC)
-		return 0;
-
-	err = mt7996_mcu_rdd_cmd(dev, RDD_CAC_END,
-				 phy->mt76->band_idx, MT_RX_SEL0, 0);
-	if (err < 0) {
-		phy->mt76->dfs_state = MT_DFS_STATE_UNKNOWN;
-		return err;
-	}
-
-	phy->mt76->dfs_state = MT_DFS_STATE_ACTIVE;
-	return 0;
-
-stop:
-	err = mt7996_mcu_rdd_cmd(dev, RDD_NORMAL_START,
-				 phy->mt76->band_idx, MT_RX_SEL0, 0);
-	if (err < 0)
-		return err;
-
-	mt7996_dfs_stop_radar_detector(phy);
-	phy->mt76->dfs_state = MT_DFS_STATE_DISABLED;
-
-	return 0;
-}
-
-static int
-mt7996_mac_twt_duration_align(int duration)
-{
-	return duration << 8;
-}
-
-static u64
-mt7996_mac_twt_sched_list_add(struct mt7996_dev *dev,
-			      struct mt7996_twt_flow *flow)
-{
-	struct mt7996_twt_flow *iter, *iter_next;
-	u32 duration = flow->duration << 8;
-	u64 start_tsf;
-
-	iter = list_first_entry_or_null(&dev->twt_list,
-					struct mt7996_twt_flow, list);
-	if (!iter || !iter->sched || iter->start_tsf > duration) {
-		/* add flow as first entry in the list */
-		list_add(&flow->list, &dev->twt_list);
-		return 0;
-	}
-
-	list_for_each_entry_safe(iter, iter_next, &dev->twt_list, list) {
-		start_tsf = iter->start_tsf +
-			    mt7996_mac_twt_duration_align(iter->duration);
-		if (list_is_last(&iter->list, &dev->twt_list))
-			break;
-
-		if (!iter_next->sched ||
-		    iter_next->start_tsf > start_tsf + duration) {
-			list_add(&flow->list, &iter->list);
-			goto out;
-		}
-	}
-
-	/* add flow as last entry in the list */
-	list_add_tail(&flow->list, &dev->twt_list);
-out:
-	return start_tsf;
-}
-
-static int mt7996_mac_check_twt_req(struct ieee80211_twt_setup *twt)
-{
-	struct ieee80211_twt_params *twt_agrt;
-	u64 interval, duration;
-	u16 mantissa;
-	u8 exp;
-
-	/* only individual agreement supported */
-	if (twt->control & IEEE80211_TWT_CONTROL_NEG_TYPE_BROADCAST)
-		return -EOPNOTSUPP;
-
-	/* only 256us unit supported */
-	if (twt->control & IEEE80211_TWT_CONTROL_WAKE_DUR_UNIT)
-		return -EOPNOTSUPP;
-
-	twt_agrt = (struct ieee80211_twt_params *)twt->params;
-
-	/* explicit agreement not supported */
-	if (!(twt_agrt->req_type & cpu_to_le16(IEEE80211_TWT_REQTYPE_IMPLICIT)))
-		return -EOPNOTSUPP;
-
-	exp = FIELD_GET(IEEE80211_TWT_REQTYPE_WAKE_INT_EXP,
-			le16_to_cpu(twt_agrt->req_type));
-	mantissa = le16_to_cpu(twt_agrt->mantissa);
-	duration = twt_agrt->min_twt_dur << 8;
-
-	interval = (u64)mantissa << exp;
-	if (interval < duration)
-		return -EOPNOTSUPP;
-
-	return 0;
-}
-
-void mt7996_mac_add_twt_setup(struct ieee80211_hw *hw,
-			      struct ieee80211_sta *sta,
-			      struct ieee80211_twt_setup *twt)
-{
-	enum ieee80211_twt_setup_cmd setup_cmd = TWT_SETUP_CMD_REJECT;
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	struct ieee80211_twt_params *twt_agrt = (void *)twt->params;
-	u16 req_type = le16_to_cpu(twt_agrt->req_type);
-	enum ieee80211_twt_setup_cmd sta_setup_cmd;
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_twt_flow *flow;
-	int flowid, table_id;
-	u8 exp;
-
-	if (mt7996_mac_check_twt_req(twt))
-		goto out;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (dev->twt.n_agrt == MT7996_MAX_TWT_AGRT)
-		goto unlock;
-
-	if (hweight8(msta->twt.flowid_mask) == ARRAY_SIZE(msta->twt.flow))
-		goto unlock;
-
-	flowid = ffs(~msta->twt.flowid_mask) - 1;
-	le16p_replace_bits(&twt_agrt->req_type, flowid,
-			   IEEE80211_TWT_REQTYPE_FLOWID);
-
-	table_id = ffs(~dev->twt.table_mask) - 1;
-	exp = FIELD_GET(IEEE80211_TWT_REQTYPE_WAKE_INT_EXP, req_type);
-	sta_setup_cmd = FIELD_GET(IEEE80211_TWT_REQTYPE_SETUP_CMD, req_type);
-
-	flow = &msta->twt.flow[flowid];
-	memset(flow, 0, sizeof(*flow));
-	INIT_LIST_HEAD(&flow->list);
-	flow->wcid = msta->wcid.idx;
-	flow->table_id = table_id;
-	flow->id = flowid;
-	flow->duration = twt_agrt->min_twt_dur;
-	flow->mantissa = twt_agrt->mantissa;
-	flow->exp = exp;
-	flow->protection = !!(req_type & IEEE80211_TWT_REQTYPE_PROTECTION);
-	flow->flowtype = !!(req_type & IEEE80211_TWT_REQTYPE_FLOWTYPE);
-	flow->trigger = !!(req_type & IEEE80211_TWT_REQTYPE_TRIGGER);
-
-	if (sta_setup_cmd == TWT_SETUP_CMD_REQUEST ||
-	    sta_setup_cmd == TWT_SETUP_CMD_SUGGEST) {
-		u64 interval = (u64)le16_to_cpu(twt_agrt->mantissa) << exp;
-		u64 flow_tsf, curr_tsf;
-		u32 rem;
-
-		flow->sched = true;
-		flow->start_tsf = mt7996_mac_twt_sched_list_add(dev, flow);
-		curr_tsf = __mt7996_get_tsf(hw, msta->vif);
-		div_u64_rem(curr_tsf - flow->start_tsf, interval, &rem);
-		flow_tsf = curr_tsf + interval - rem;
-		twt_agrt->twt = cpu_to_le64(flow_tsf);
-	} else {
-		list_add_tail(&flow->list, &dev->twt_list);
-	}
-	flow->tsf = le64_to_cpu(twt_agrt->twt);
-
-	if (mt7996_mcu_twt_agrt_update(dev, msta->vif, flow, MCU_TWT_AGRT_ADD))
-		goto unlock;
-
-	setup_cmd = TWT_SETUP_CMD_ACCEPT;
-	dev->twt.table_mask |= BIT(table_id);
-	msta->twt.flowid_mask |= BIT(flowid);
-	dev->twt.n_agrt++;
-
-unlock:
-	mutex_unlock(&dev->mt76.mutex);
-out:
-	le16p_replace_bits(&twt_agrt->req_type, setup_cmd,
-			   IEEE80211_TWT_REQTYPE_SETUP_CMD);
-	twt->control = (twt->control & IEEE80211_TWT_CONTROL_WAKE_DUR_UNIT) |
-		       (twt->control & IEEE80211_TWT_CONTROL_RX_DISABLED);
-}
-
-void mt7996_mac_twt_teardown_flow(struct mt7996_dev *dev,
-				  struct mt7996_sta *msta,
-				  u8 flowid)
-{
-	struct mt7996_twt_flow *flow;
-
-	lockdep_assert_held(&dev->mt76.mutex);
-
-	if (flowid >= ARRAY_SIZE(msta->twt.flow))
-		return;
-
-	if (!(msta->twt.flowid_mask & BIT(flowid)))
-		return;
-
-	flow = &msta->twt.flow[flowid];
-	if (mt7996_mcu_twt_agrt_update(dev, msta->vif, flow,
-				       MCU_TWT_AGRT_DELETE))
-		return;
-
-	list_del_init(&flow->list);
-	msta->twt.flowid_mask &= ~BIT(flowid);
-	dev->twt.table_mask &= ~BIT(flow->table_id);
-	dev->twt.n_agrt--;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mac.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mac.h
deleted file mode 100644
index 9f68852..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mac.h
+++ /dev/null
@@ -1,398 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#ifndef __MT7996_MAC_H
-#define __MT7996_MAC_H
-
-#define MT_CT_PARSE_LEN			72
-#define MT_CT_DMA_BUF_NUM		2
-
-#define MT_RXD0_LENGTH			GENMASK(15, 0)
-#define MT_RXD0_PKT_TYPE		GENMASK(31, 27)
-
-#define MT_RXD0_NORMAL_ETH_TYPE_OFS	GENMASK(22, 16)
-#define MT_RXD0_NORMAL_IP_SUM		BIT(23)
-#define MT_RXD0_NORMAL_UDP_TCP_SUM	BIT(24)
-
-#define MT_RXD0_SW_PKT_TYPE_MASK	GENMASK(31, 16)
-#define MT_RXD0_SW_PKT_TYPE_MAP		0x380F
-#define MT_RXD0_SW_PKT_TYPE_FRAME	0x3801
-
-enum rx_pkt_type {
-	PKT_TYPE_TXS,
-	PKT_TYPE_TXRXV,
-	PKT_TYPE_NORMAL,
-	PKT_TYPE_RX_DUP_RFB,
-	PKT_TYPE_RX_TMR,
-	PKT_TYPE_RETRIEVE,
-	PKT_TYPE_TXRX_NOTIFY,
-	PKT_TYPE_RX_EVENT,
-	PKT_TYPE_RX_FW_MONITOR = 0x0c,
-};
-
-/* RXD DW1 */
-#define MT_RXD1_NORMAL_WLAN_IDX		GENMASK(11, 0)
-#define MT_RXD1_NORMAL_GROUP_1		BIT(16)
-#define MT_RXD1_NORMAL_GROUP_2		BIT(17)
-#define MT_RXD1_NORMAL_GROUP_3		BIT(18)
-#define MT_RXD1_NORMAL_GROUP_4		BIT(19)
-#define MT_RXD1_NORMAL_GROUP_5		BIT(20)
-#define MT_RXD1_NORMAL_KEY_ID		GENMASK(22, 21)
-#define MT_RXD1_NORMAL_CM		BIT(23)
-#define MT_RXD1_NORMAL_CLM		BIT(24)
-#define MT_RXD1_NORMAL_ICV_ERR		BIT(25)
-#define MT_RXD1_NORMAL_TKIP_MIC_ERR	BIT(26)
-#define MT_RXD1_NORMAL_BAND_IDX		GENMASK(28, 27)
-#define MT_RXD1_NORMAL_SPP_EN		BIT(29)
-#define MT_RXD1_NORMAL_ADD_OM		BIT(30)
-#define MT_RXD1_NORMAL_SEC_DONE		BIT(31)
-
-/* RXD DW2 */
-#define MT_RXD2_NORMAL_BSSID		GENMASK(5, 0)
-#define MT_RXD2_NORMAL_MAC_HDR_LEN	GENMASK(12, 8)
-#define MT_RXD2_NORMAL_HDR_TRANS	BIT(7)
-#define MT_RXD2_NORMAL_HDR_OFFSET	GENMASK(15, 13)
-#define MT_RXD2_NORMAL_SEC_MODE		GENMASK(20, 16)
-#define MT_RXD2_NORMAL_MU_BAR		BIT(21)
-#define MT_RXD2_NORMAL_SW_BIT		BIT(22)
-#define MT_RXD2_NORMAL_AMSDU_ERR	BIT(23)
-#define MT_RXD2_NORMAL_MAX_LEN_ERROR	BIT(24)
-#define MT_RXD2_NORMAL_HDR_TRANS_ERROR	BIT(25)
-#define MT_RXD2_NORMAL_INT_FRAME	BIT(26)
-#define MT_RXD2_NORMAL_FRAG		BIT(27)
-#define MT_RXD2_NORMAL_NULL_FRAME	BIT(28)
-#define MT_RXD2_NORMAL_NDATA		BIT(29)
-#define MT_RXD2_NORMAL_NON_AMPDU	BIT(30)
-#define MT_RXD2_NORMAL_BF_REPORT	BIT(31)
-
-/* RXD DW3 */
-#define MT_RXD3_NORMAL_RXV_SEQ		GENMASK(7, 0)
-#define MT_RXD3_NORMAL_CH_FREQ		GENMASK(15, 8)
-#define MT_RXD3_NORMAL_ADDR_TYPE	GENMASK(17, 16)
-#define MT_RXD3_NORMAL_U2M		BIT(0)
-#define MT_RXD3_NORMAL_HTC_VLD		BIT(18)
-#define MT_RXD3_NORMAL_BEACON_MC	BIT(20)
-#define MT_RXD3_NORMAL_BEACON_UC	BIT(21)
-#define MT_RXD3_NORMAL_CO_ANT		BIT(22)
-#define MT_RXD3_NORMAL_FCS_ERR		BIT(24)
-#define MT_RXD3_NORMAL_VLAN2ETH		BIT(31)
-
-/* RXD DW4 */
-#define MT_RXD4_NORMAL_PAYLOAD_FORMAT	GENMASK(1, 0)
-#define MT_RXD4_FIRST_AMSDU_FRAME	GENMASK(1, 0)
-#define MT_RXD4_MID_AMSDU_FRAME		BIT(1)
-#define MT_RXD4_LAST_AMSDU_FRAME	BIT(0)
-
-#define MT_RXV_HDR_BAND_IDX		BIT(24)
-
-/* RXD GROUP4 */
-#define MT_RXD8_FRAME_CONTROL		GENMASK(15, 0)
-
-#define MT_RXD10_SEQ_CTRL		GENMASK(15, 0)
-#define MT_RXD10_QOS_CTL		GENMASK(31, 16)
-
-#define MT_RXD11_HT_CONTROL		GENMASK(31, 0)
-
-/* P-RXV */
-#define MT_PRXV_TX_RATE			GENMASK(6, 0)
-#define MT_PRXV_TX_DCM			BIT(4)
-#define MT_PRXV_TX_ER_SU_106T		BIT(5)
-#define MT_PRXV_NSTS			GENMASK(10, 7)
-#define MT_PRXV_TXBF			BIT(11)
-#define MT_PRXV_HT_AD_CODE		BIT(12)
-#define MT_PRXV_HE_RU_ALLOC_L		GENMASK(31, 28)
-#define MT_PRXV_HE_RU_ALLOC_H		GENMASK(3, 0)
-#define MT_PRXV_RCPI3			GENMASK(31, 24)
-#define MT_PRXV_RCPI2			GENMASK(23, 16)
-#define MT_PRXV_RCPI1			GENMASK(15, 8)
-#define MT_PRXV_RCPI0			GENMASK(7, 0)
-#define MT_PRXV_HT_SHORT_GI		GENMASK(4, 3)
-#define MT_PRXV_HT_STBC			GENMASK(10, 9)
-#define MT_PRXV_TX_MODE			GENMASK(14, 11)
-#define MT_PRXV_FRAME_MODE		GENMASK(2, 0)
-#define MT_PRXV_DCM			BIT(5)
-#define MT_PRXV_NUM_RX			BIT(8, 6)
-
-/* C-RXV */
-#define MT_CRXV_HT_STBC			GENMASK(1, 0)
-#define MT_CRXV_TX_MODE			GENMASK(7, 4)
-#define MT_CRXV_FRAME_MODE		GENMASK(10, 8)
-#define MT_CRXV_HT_SHORT_GI		GENMASK(14, 13)
-#define MT_CRXV_HE_LTF_SIZE		GENMASK(18, 17)
-#define MT_CRXV_HE_LDPC_EXT_SYM		BIT(20)
-#define MT_CRXV_HE_PE_DISAMBIG		BIT(23)
-#define MT_CRXV_HE_NUM_USER		GENMASK(30, 24)
-#define MT_CRXV_HE_UPLINK		BIT(31)
-#define MT_CRXV_HE_RU0			GENMASK(7, 0)
-#define MT_CRXV_HE_RU1			GENMASK(15, 8)
-#define MT_CRXV_HE_RU2			GENMASK(23, 16)
-#define MT_CRXV_HE_RU3			GENMASK(31, 24)
-
-#define MT_CRXV_HE_MU_AID		GENMASK(30, 20)
-
-#define MT_CRXV_HE_SR_MASK		GENMASK(11, 8)
-#define MT_CRXV_HE_SR1_MASK		GENMASK(16, 12)
-#define MT_CRXV_HE_SR2_MASK             GENMASK(20, 17)
-#define MT_CRXV_HE_SR3_MASK             GENMASK(24, 21)
-
-#define MT_CRXV_HE_BSS_COLOR		GENMASK(5, 0)
-#define MT_CRXV_HE_TXOP_DUR		GENMASK(12, 6)
-#define MT_CRXV_HE_BEAM_CHNG		BIT(13)
-#define MT_CRXV_HE_DOPPLER		BIT(16)
-
-enum tx_header_format {
-	MT_HDR_FORMAT_802_3,
-	MT_HDR_FORMAT_CMD,
-	MT_HDR_FORMAT_802_11,
-	MT_HDR_FORMAT_802_11_EXT,
-};
-
-enum tx_pkt_type {
-	MT_TX_TYPE_CT,
-	MT_TX_TYPE_SF,
-	MT_TX_TYPE_CMD,
-	MT_TX_TYPE_FW,
-};
-
-enum tx_port_idx {
-	MT_TX_PORT_IDX_LMAC,
-	MT_TX_PORT_IDX_MCU
-};
-
-enum tx_mcu_port_q_idx {
-	MT_TX_MCU_PORT_RX_Q0 = 0x20,
-	MT_TX_MCU_PORT_RX_Q1,
-	MT_TX_MCU_PORT_RX_Q2,
-	MT_TX_MCU_PORT_RX_Q3,
-	MT_TX_MCU_PORT_RX_FWDL = 0x3e
-};
-
-enum tx_mgnt_type {
-	MT_TX_NORMAL,
-	MT_TX_TIMING,
-	MT_TX_ADDBA,
-};
-
-#define MT_CT_INFO_APPLY_TXD		BIT(0)
-#define MT_CT_INFO_COPY_HOST_TXD_ALL	BIT(1)
-#define MT_CT_INFO_MGMT_FRAME		BIT(2)
-#define MT_CT_INFO_NONE_CIPHER_FRAME	BIT(3)
-#define MT_CT_INFO_HSR2_TX		BIT(4)
-#define MT_CT_INFO_FROM_HOST		BIT(7)
-
-#define MT_TXD_SIZE			(8 * 4)
-
-#define MT_TXD0_Q_IDX			GENMASK(31, 25)
-#define MT_TXD0_PKT_FMT			GENMASK(24, 23)
-#define MT_TXD0_ETH_TYPE_OFFSET		GENMASK(22, 16)
-#define MT_TXD0_TX_BYTES		GENMASK(15, 0)
-
-#define MT_TXD1_FIXED_RATE		BIT(31)
-#define MT_TXD1_OWN_MAC			GENMASK(30, 25)
-#define MT_TXD1_TID			GENMASK(24, 21)
-#define MT_TXD1_BIP			BIT(24)
-#define MT_TXD1_ETH_802_3		BIT(20)
-#define MT_TXD1_HDR_INFO		GENMASK(20, 16)
-#define MT_TXD1_HDR_FORMAT		GENMASK(15, 14)
-#define MT_TXD1_TGID			GENMASK(13, 12)
-#define MT_TXD1_WLAN_IDX		GENMASK(11, 0)
-
-#define MT_TXD2_POWER_OFFSET		GENMASK(31, 26)
-#define MT_TXD2_MAX_TX_TIME		GENMASK(25, 16)
-#define MT_TXD2_FRAG			GENMASK(15, 14)
-#define MT_TXD2_HTC_VLD			BIT(13)
-#define MT_TXD2_DURATION		BIT(12)
-#define MT_TXD2_HDR_PAD			GENMASK(11, 10)
-#define MT_TXD2_RTS			BIT(9)
-#define MT_TXD2_OWN_MAC_MAP		BIT(8)
-#define MT_TXD2_BF_TYPE			GENMASK(6, 7)
-#define MT_TXD2_FRAME_TYPE		GENMASK(5, 4)
-#define MT_TXD2_SUB_TYPE		GENMASK(3, 0)
-
-#define MT_TXD3_SN_VALID		BIT(31)
-#define MT_TXD3_PN_VALID		BIT(30)
-#define MT_TXD3_SW_POWER_MGMT		BIT(29)
-#define MT_TXD3_BA_DISABLE		BIT(28)
-#define MT_TXD3_SEQ			GENMASK(27, 16)
-#define MT_TXD3_REM_TX_COUNT		GENMASK(15, 11)
-#define MT_TXD3_TX_COUNT		GENMASK(10, 6)
-#define MT_TXD3_HW_AMSDU		BIT(5)
-#define MT_TXD3_BCM			BIT(4)
-#define MT_TXD3_EEOSP			BIT(3)
-#define MT_TXD3_EMRD			BIT(2)
-#define MT_TXD3_PROTECT_FRAME		BIT(1)
-#define MT_TXD3_NO_ACK			BIT(0)
-
-#define MT_TXD4_PN_LOW			GENMASK(31, 0)
-
-#define MT_TXD5_PN_HIGH			GENMASK(31, 16)
-#define MT_TXD5_FL			BIT(15)
-#define MT_TXD5_BYPASS_TBB		BIT(14)
-#define MT_TXD5_BYPASS_RBB		BIT(13)
-#define MT_TXD5_BSS_COLOR_ZERO		BIT(12)
-#define MT_TXD5_TX_STATUS_HOST		BIT(10)
-#define MT_TXD5_TX_STATUS_MCU		BIT(9)
-#define MT_TXD5_TX_STATUS_FMT		BIT(8)
-#define MT_TXD5_PID			GENMASK(7, 0)
-
-#define MT_TXD6_TX_SRC			GENMASK(31, 30)
-#define MT_TXD6_VTA			BIT(28)
-#define MT_TXD6_FIXED_BW		BIT(25)
-#define MT_TXD6_BW			GENMASK(24, 22)
-#define MT_TXD6_TX_RATE			GENMASK(21, 16)
-#define MT_TXD6_TIMESTAMP_OFS_EN	BIT(15)
-#define MT_TXD6_TIMESTAMP_OFS_IDX	GENMASK(14, 10)
-#define MT_TXD6_MSDU_CNT		GENMASK(9, 4)
-#define MT_TXD6_SPE_ID_IDX		BIT(10)
-#define MT_TXD6_ANT_ID			GENMASK(7, 4)
-#define MT_TXD6_DIS_MAT			BIT(3)
-#define MT_TXD6_DAS			BIT(2)
-#define MT_TXD6_AMSDU_CAP		BIT(1)
-
-#define MT_TXD7_TXD_LEN			GENMASK(31, 30)
-#define MT_TXD7_IP_SUM			BIT(29)
-#define MT_TXD7_DROP_BY_SDO		BIT(28)
-#define MT_TXD7_MAC_TXD			BIT(27)
-#define MT_TXD7_CTXD			BIT(26)
-#define MT_TXD7_CTXD_CNT		GENMASK(25, 22)
-#define MT_TXD7_UDP_TCP_SUM		BIT(15)
-#define MT_TXD7_TX_TIME			GENMASK(9, 0)
-
-#define MT_TX_RATE_STBC			BIT(13)
-#define MT_TX_RATE_NSS			GENMASK(13, 10)
-#define MT_TX_RATE_MODE			GENMASK(9, 6)
-#define MT_TX_RATE_SU_EXT_TONE		BIT(5)
-#define MT_TX_RATE_DCM			BIT(4)
-/* VHT/HE only use bits 0-3 */
-#define MT_TX_RATE_IDX			GENMASK(5, 0)
-
-struct mt7996_txp {
-	__le16 flags;
-	__le16 token;
-	u8 bss_idx;
-	__le16 rept_wds_wcid;
-	u8 nbuf;
-#define MT_TXP_MAX_BUF_NUM	6
-	__le32 buf[MT_TXP_MAX_BUF_NUM];
-	__le16 len[MT_TXP_MAX_BUF_NUM];
-} __packed __aligned(4);
-
-#define MT_TXFREE0_PKT_TYPE		GENMASK(31, 27)
-#define MT_TXFREE0_MSDU_CNT		GENMASK(25, 16)
-#define MT_TXFREE0_RX_BYTE		GENMASK(15, 0)
-
-#define MT_TXFREE1_VER			GENMASK(18, 16)
-
-#define MT_TXFREE_INFO_PAIR		BIT(31)
-#define MT_TXFREE_INFO_HEADER		BIT(30)
-#define MT_TXFREE_INFO_WLAN_ID		GENMASK(23, 12)
-#define MT_TXFREE_INFO_MSDU_ID		GENMASK(14, 0)
-
-#define MT_TXS0_BW			GENMASK(31, 29)
-#define MT_TXS0_TID			GENMASK(28, 26)
-#define MT_TXS0_AMPDU			BIT(25)
-#define MT_TXS0_TXS_FORMAT		GENMASK(24, 23)
-#define MT_TXS0_BA_ERROR		BIT(22)
-#define MT_TXS0_PS_FLAG			BIT(21)
-#define MT_TXS0_TXOP_TIMEOUT		BIT(20)
-#define MT_TXS0_BIP_ERROR		BIT(19)
-
-#define MT_TXS0_QUEUE_TIMEOUT		BIT(18)
-#define MT_TXS0_RTS_TIMEOUT		BIT(17)
-#define MT_TXS0_ACK_TIMEOUT		BIT(16)
-#define MT_TXS0_ACK_ERROR_MASK		GENMASK(18, 16)
-
-#define MT_TXS0_TX_STATUS_HOST		BIT(15)
-#define MT_TXS0_TX_STATUS_MCU		BIT(14)
-#define MT_TXS0_TX_RATE			GENMASK(13, 0)
-
-#define MT_TXS1_SEQNO			GENMASK(31, 20)
-#define MT_TXS1_RESP_RATE		GENMASK(19, 16)
-#define MT_TXS1_RXV_SEQNO		GENMASK(15, 8)
-#define MT_TXS1_TX_POWER_DBM		GENMASK(7, 0)
-
-#define MT_TXS2_BF_STATUS		GENMASK(31, 30)
-#define MT_TXS2_BAND			GENMASK(29, 28)
-#define MT_TXS2_WCID			GENMASK(27, 16)
-#define MT_TXS2_TX_DELAY		GENMASK(15, 0)
-
-#define MT_TXS3_PID			GENMASK(31, 24)
-#define MT_TXS3_RATE_STBC		BIT(7)
-#define MT_TXS3_FIXED_RATE		BIT(6)
-#define MT_TXS3_SRC			GENMASK(5, 4)
-#define MT_TXS3_SHARED_ANTENNA		BIT(3)
-#define MT_TXS3_LAST_TX_RATE		GENMASK(2, 0)
-
-#define MT_TXS4_TIMESTAMP		GENMASK(31, 0)
-
-#define MT_TXS5_F0_FINAL_MPDU		BIT(31)
-#define MT_TXS5_F0_QOS			BIT(30)
-#define MT_TXS5_F0_TX_COUNT		GENMASK(29, 25)
-#define MT_TXS5_F0_FRONT_TIME		GENMASK(24, 0)
-#define MT_TXS5_F1_MPDU_TX_COUNT	GENMASK(31, 24)
-#define MT_TXS5_F1_MPDU_TX_BYTES	GENMASK(23, 0)
-
-#define MT_TXS6_F0_NOISE_3		GENMASK(31, 24)
-#define MT_TXS6_F0_NOISE_2		GENMASK(23, 16)
-#define MT_TXS6_F0_NOISE_1		GENMASK(15, 8)
-#define MT_TXS6_F0_NOISE_0		GENMASK(7, 0)
-#define MT_TXS6_F1_MPDU_FAIL_COUNT	GENMASK(31, 24)
-#define MT_TXS6_F1_MPDU_FAIL_BYTES	GENMASK(23, 0)
-
-#define MT_TXS7_F0_RCPI_3		GENMASK(31, 24)
-#define MT_TXS7_F0_RCPI_2		GENMASK(23, 16)
-#define MT_TXS7_F0_RCPI_1		GENMASK(15, 8)
-#define MT_TXS7_F0_RCPI_0		GENMASK(7, 0)
-#define MT_TXS7_F1_MPDU_RETRY_COUNT	GENMASK(31, 24)
-#define MT_TXS7_F1_MPDU_RETRY_BYTES	GENMASK(23, 0)
-
-struct mt7996_dfs_pulse {
-	u32 max_width;		/* us */
-	int max_pwr;		/* dbm */
-	int min_pwr;		/* dbm */
-	u32 min_stgr_pri;	/* us */
-	u32 max_stgr_pri;	/* us */
-	u32 min_cr_pri;		/* us */
-	u32 max_cr_pri;		/* us */
-};
-
-struct mt7996_dfs_pattern {
-	u8 enb;
-	u8 stgr;
-	u8 min_crpn;
-	u8 max_crpn;
-	u8 min_crpr;
-	u8 min_pw;
-	u32 min_pri;
-	u32 max_pri;
-	u8 max_pw;
-	u8 min_crbn;
-	u8 max_crbn;
-	u8 min_stgpn;
-	u8 max_stgpn;
-	u8 min_stgpr;
-	u8 rsv[2];
-	u32 min_stgpr_diff;
-} __packed;
-
-struct mt7996_dfs_radar_spec {
-	struct mt7996_dfs_pulse pulse_th;
-	struct mt7996_dfs_pattern radar_pattern[16];
-};
-
-static inline struct mt7996_txp *
-mt7996_txwi_to_txp(struct mt76_dev *dev, struct mt76_txwi_cache *t)
-{
-	u8 *txwi;
-
-	if (!t)
-		return NULL;
-
-	txwi = mt76_get_txwi_ptr(dev, t);
-
-	return (struct mt7996_txp *)(txwi + MT_TXD_SIZE);
-}
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/main.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/main.c
deleted file mode 100644
index 945d9b2..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/main.c
+++ /dev/null
@@ -1,1327 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#include "mt7996.h"
-#include "mcu.h"
-
-static bool mt7996_dev_running(struct mt7996_dev *dev)
-{
-	struct mt7996_phy *phy;
-
-	if (test_bit(MT76_STATE_RUNNING, &dev->mphy.state))
-		return true;
-
-	phy = mt7996_phy2(dev);
-	if (phy && test_bit(MT76_STATE_RUNNING, &phy->mt76->state))
-		return true;
-
-	phy = mt7996_phy3(dev);
-
-	return phy && test_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-}
-
-static int mt7996_start(struct ieee80211_hw *hw)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	bool running;
-	int ret;
-
-	flush_work(&dev->init_work);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	running = mt7996_dev_running(dev);
-	if (!running) {
-		ret = mt7996_mcu_set_hdr_trans(dev, true);
-		if (ret)
-			goto out;
-	}
-
-	mt7996_mac_enable_nf(dev, phy->mt76->band_idx);
-
-	ret = mt7996_mcu_set_rts_thresh(phy, 0x92b);
-	if (ret)
-		goto out;
-
-	ret = mt7996_mcu_set_chan_info(phy, UNI_CHANNEL_RX_PATH);
-	if (ret)
-		goto out;
-
-	set_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-
-	ieee80211_iterate_interfaces(dev->mt76.hw,
-				     IEEE80211_IFACE_ITER_RESUME_ALL,
-				     mt7996_mcu_set_pm, dev->mt76.hw);
-
-	ieee80211_queue_delayed_work(hw, &phy->mt76->mac_work,
-				     MT7996_WATCHDOG_TIME);
-
-	if (!running)
-		mt7996_mac_reset_counters(phy);
-
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static void mt7996_stop(struct ieee80211_hw *hw)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-
-	cancel_delayed_work_sync(&phy->mt76->mac_work);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	clear_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-
-	ieee80211_iterate_interfaces(dev->mt76.hw,
-				     IEEE80211_IFACE_ITER_RESUME_ALL,
-				     mt7996_mcu_set_pm, dev->mt76.hw);
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static inline int get_free_idx(u32 mask, u8 start, u8 end)
-{
-	return ffs(~mask & GENMASK(end, start));
-}
-
-static int get_omac_idx(enum nl80211_iftype type, u64 mask)
-{
-	int i;
-
-	switch (type) {
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_ADHOC:
-	case NL80211_IFTYPE_STATION:
-		/* prefer hw bssid slot 1-3 */
-		i = get_free_idx(mask, HW_BSSID_1, HW_BSSID_3);
-		if (i)
-			return i - 1;
-
-		if (type != NL80211_IFTYPE_STATION)
-			break;
-
-		i = get_free_idx(mask, EXT_BSSID_1, EXT_BSSID_MAX);
-		if (i)
-			return i - 1;
-
-		if (~mask & BIT(HW_BSSID_0))
-			return HW_BSSID_0;
-
-		break;
-	case NL80211_IFTYPE_MONITOR:
-	case NL80211_IFTYPE_AP:
-		/* ap uses hw bssid 0 and ext bssid */
-		if (~mask & BIT(HW_BSSID_0))
-			return HW_BSSID_0;
-
-		i = get_free_idx(mask, EXT_BSSID_1, EXT_BSSID_MAX);
-		if (i)
-			return i - 1;
-
-		break;
-	default:
-		WARN_ON(1);
-		break;
-	}
-
-	return -1;
-}
-
-static void mt7996_init_bitrate_mask(struct ieee80211_vif *vif)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(mvif->bitrate_mask.control); i++) {
-		mvif->bitrate_mask.control[i].gi = NL80211_TXRATE_DEFAULT_GI;
-		mvif->bitrate_mask.control[i].he_gi = 0xff;
-		mvif->bitrate_mask.control[i].he_ltf = 0xff;
-		mvif->bitrate_mask.control[i].legacy = GENMASK(31, 0);
-		memset(mvif->bitrate_mask.control[i].ht_mcs, 0xff,
-		       sizeof(mvif->bitrate_mask.control[i].ht_mcs));
-		memset(mvif->bitrate_mask.control[i].vht_mcs, 0xff,
-		       sizeof(mvif->bitrate_mask.control[i].vht_mcs));
-		memset(mvif->bitrate_mask.control[i].he_mcs, 0xff,
-		       sizeof(mvif->bitrate_mask.control[i].he_mcs));
-	}
-}
-
-static int mt7996_add_interface(struct ieee80211_hw *hw,
-				struct ieee80211_vif *vif)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt76_txq *mtxq;
-	u8 band_idx = phy->mt76->band_idx;
-	int idx, ret = 0;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (vif->type == NL80211_IFTYPE_MONITOR &&
-	    is_zero_ether_addr(vif->addr))
-		phy->monitor_vif = vif;
-
-	mvif->mt76.idx = __ffs64(~dev->mt76.vif_mask);
-	if (mvif->mt76.idx >= (MT7996_MAX_INTERFACES << dev->dbdc_support)) {
-		ret = -ENOSPC;
-		goto out;
-	}
-
-	idx = get_omac_idx(vif->type, phy->omac_mask);
-	if (idx < 0) {
-		ret = -ENOSPC;
-		goto out;
-	}
-	mvif->mt76.omac_idx = idx;
-	mvif->phy = phy;
-	mvif->mt76.band_idx = band_idx;
-	mvif->mt76.wmm_idx = band_idx;
-
-	ret = mt7996_mcu_add_dev_info(phy, vif, true);
-	if (ret)
-		goto out;
-
-	ret = mt7996_mcu_set_radio_en(phy, true);
-	if (ret)
-		goto out;
-
-	dev->mt76.vif_mask |= BIT_ULL(mvif->mt76.idx);
-	phy->omac_mask |= BIT_ULL(mvif->mt76.omac_idx);
-
-	idx = MT7996_WTBL_RESERVED - mvif->mt76.idx;
-
-	INIT_LIST_HEAD(&mvif->sta.rc_list);
-	INIT_LIST_HEAD(&mvif->sta.poll_list);
-	mvif->sta.wcid.idx = idx;
-	mvif->sta.wcid.phy_idx = band_idx;
-	mvif->sta.wcid.hw_key_idx = -1;
-	mvif->sta.wcid.tx_info |= MT_WCID_TX_INFO_SET;
-	mt76_packet_id_init(&mvif->sta.wcid);
-
-	mt7996_mac_wtbl_update(dev, idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	if (vif->txq) {
-		mtxq = (struct mt76_txq *)vif->txq->drv_priv;
-		mtxq->wcid = idx;
-	}
-
-	if (vif->type != NL80211_IFTYPE_AP &&
-	    (!mvif->mt76.omac_idx || mvif->mt76.omac_idx > 3))
-		vif->offload_flags = 0;
-	vif->offload_flags |= IEEE80211_OFFLOAD_ENCAP_4ADDR;
-
-	mt7996_init_bitrate_mask(vif);
-	memset(&mvif->cap, -1, sizeof(mvif->cap));
-
-	mt7996_mcu_add_bss_info(phy, vif, true);
-	mt7996_mcu_add_sta(dev, vif, NULL, true);
-	rcu_assign_pointer(dev->mt76.wcid[idx], &mvif->sta.wcid);
-
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static void mt7996_remove_interface(struct ieee80211_hw *hw,
-				    struct ieee80211_vif *vif)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_sta *msta = &mvif->sta;
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	int idx = msta->wcid.idx;
-
-	mt7996_mcu_add_bss_info(phy, vif, false);
-	mt7996_mcu_add_sta(dev, vif, NULL, false);
-
-	if (vif == phy->monitor_vif)
-		phy->monitor_vif = NULL;
-
-	mt7996_mcu_add_dev_info(phy, vif, false);
-	mt7996_mcu_set_radio_en(phy, false);
-
-	rcu_assign_pointer(dev->mt76.wcid[idx], NULL);
-
-	mutex_lock(&dev->mt76.mutex);
-	dev->mt76.vif_mask &= ~BIT_ULL(mvif->mt76.idx);
-	phy->omac_mask &= ~BIT_ULL(mvif->mt76.omac_idx);
-	mutex_unlock(&dev->mt76.mutex);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (!list_empty(&msta->poll_list))
-		list_del_init(&msta->poll_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-
-	mt76_packet_id_flush(&dev->mt76, &msta->wcid);
-}
-
-int mt7996_set_channel(struct mt7996_phy *phy)
-{
-	struct mt7996_dev *dev = phy->dev;
-	int ret;
-
-	cancel_delayed_work_sync(&phy->mt76->mac_work);
-
-	mutex_lock(&dev->mt76.mutex);
-	set_bit(MT76_RESET, &phy->mt76->state);
-
-	mt76_set_channel(phy->mt76);
-
-	ret = mt7996_mcu_set_chan_info(phy, UNI_CHANNEL_SWITCH);
-	if (ret)
-		goto out;
-
-	mt7996_mac_set_timing(phy);
-	ret = mt7996_dfs_init_radar_detector(phy);
-	mt7996_mac_cca_stats_reset(phy);
-
-	mt7996_mac_reset_counters(phy);
-	phy->noise = 0;
-
-out:
-	clear_bit(MT76_RESET, &phy->mt76->state);
-	mutex_unlock(&dev->mt76.mutex);
-
-	mt76_txq_schedule_all(phy->mt76);
-
-	ieee80211_queue_delayed_work(phy->mt76->hw,
-				     &phy->mt76->mac_work,
-				     MT7996_WATCHDOG_TIME);
-
-	return ret;
-}
-
-static int mt7996_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
-			  struct ieee80211_vif *vif, struct ieee80211_sta *sta,
-			  struct ieee80211_key_conf *key)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_sta *msta = sta ? (struct mt7996_sta *)sta->drv_priv :
-				  &mvif->sta;
-	struct mt76_wcid *wcid = &msta->wcid;
-	u8 *wcid_keyidx = &wcid->hw_key_idx;
-	int idx = key->keyidx;
-	int err = 0;
-
-	/* The hardware does not support per-STA RX GTK, fallback
-	 * to software mode for these.
-	 */
-	if ((vif->type == NL80211_IFTYPE_ADHOC ||
-	     vif->type == NL80211_IFTYPE_MESH_POINT) &&
-	    (key->cipher == WLAN_CIPHER_SUITE_TKIP ||
-	     key->cipher == WLAN_CIPHER_SUITE_CCMP) &&
-	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))
-		return -EOPNOTSUPP;
-
-	/* fall back to sw encryption for unsupported ciphers */
-	switch (key->cipher) {
-	case WLAN_CIPHER_SUITE_AES_CMAC:
-		wcid_keyidx = &wcid->hw_key_idx2;
-		key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIE;
-		break;
-	case WLAN_CIPHER_SUITE_TKIP:
-	case WLAN_CIPHER_SUITE_CCMP:
-	case WLAN_CIPHER_SUITE_CCMP_256:
-	case WLAN_CIPHER_SUITE_GCMP:
-	case WLAN_CIPHER_SUITE_GCMP_256:
-	case WLAN_CIPHER_SUITE_SMS4:
-		break;
-	case WLAN_CIPHER_SUITE_WEP40:
-	case WLAN_CIPHER_SUITE_WEP104:
-	default:
-		return -EOPNOTSUPP;
-	}
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (cmd == SET_KEY && !sta && !mvif->mt76.cipher) {
-		mvif->mt76.cipher = mt76_connac_mcu_get_cipher(key->cipher);
-		mt7996_mcu_add_bss_info(phy, vif, true);
-	}
-
-	if (cmd == SET_KEY)
-		*wcid_keyidx = idx;
-	else if (idx == *wcid_keyidx)
-		*wcid_keyidx = -1;
-	else
-		goto out;
-
-	mt76_wcid_key_setup(&dev->mt76, wcid,
-			    cmd == SET_KEY ? key : NULL);
-
-	err = mt7996_mcu_add_key(&dev->mt76, vif, &msta->bip,
-				key, MCU_WMWA_UNI_CMD(STA_REC_UPDATE),
-				&msta->wcid, cmd);
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return err;
-}
-
-static int mt7996_config(struct ieee80211_hw *hw, u32 changed)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	int ret;
-
-	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
-		ieee80211_stop_queues(hw);
-		ret = mt7996_set_channel(phy);
-		if (ret)
-			return ret;
-		ieee80211_wake_queues(hw);
-	}
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
-		bool enabled = !!(hw->conf.flags & IEEE80211_CONF_MONITOR);
-
-		if (!enabled)
-			phy->rxfilter |= MT_WF_RFCR_DROP_OTHER_UC;
-		else
-			phy->rxfilter &= ~MT_WF_RFCR_DROP_OTHER_UC;
-
-		mt76_rmw_field(dev, MT_DMA_DCR0(phy->mt76->band_idx),
-			       MT_DMA_DCR0_RXD_G5_EN, enabled);
-		mt76_wr(dev, MT_WF_RFCR(phy->mt76->band_idx), phy->rxfilter);
-	}
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-static int
-mt7996_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
-	       const struct ieee80211_tx_queue_params *params)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-
-	/* no need to update right away, we'll get BSS_CHANGED_QOS */
-	queue = mt76_connac_lmac_mapping(queue);
-	mvif->queue_params[queue] = *params;
-
-	return 0;
-}
-
-static void mt7996_configure_filter(struct ieee80211_hw *hw,
-				    unsigned int changed_flags,
-				    unsigned int *total_flags,
-				    u64 multicast)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	u32 ctl_flags = MT_WF_RFCR1_DROP_ACK |
-			MT_WF_RFCR1_DROP_BF_POLL |
-			MT_WF_RFCR1_DROP_BA |
-			MT_WF_RFCR1_DROP_CFEND |
-			MT_WF_RFCR1_DROP_CFACK;
-	u32 flags = 0;
-
-#define MT76_FILTER(_flag, _hw) do {					\
-		flags |= *total_flags & FIF_##_flag;			\
-		phy->rxfilter &= ~(_hw);				\
-		phy->rxfilter |= !(flags & FIF_##_flag) * (_hw);	\
-	} while (0)
-
-	mutex_lock(&dev->mt76.mutex);
-
-	phy->rxfilter &= ~(MT_WF_RFCR_DROP_OTHER_BSS |
-			   MT_WF_RFCR_DROP_OTHER_BEACON |
-			   MT_WF_RFCR_DROP_FRAME_REPORT |
-			   MT_WF_RFCR_DROP_PROBEREQ |
-			   MT_WF_RFCR_DROP_MCAST_FILTERED |
-			   MT_WF_RFCR_DROP_MCAST |
-			   MT_WF_RFCR_DROP_BCAST |
-			   MT_WF_RFCR_DROP_DUPLICATE |
-			   MT_WF_RFCR_DROP_A2_BSSID |
-			   MT_WF_RFCR_DROP_UNWANTED_CTL |
-			   MT_WF_RFCR_DROP_STBC_MULTI);
-
-	MT76_FILTER(OTHER_BSS, MT_WF_RFCR_DROP_OTHER_TIM |
-			       MT_WF_RFCR_DROP_A3_MAC |
-			       MT_WF_RFCR_DROP_A3_BSSID);
-
-	MT76_FILTER(FCSFAIL, MT_WF_RFCR_DROP_FCSFAIL);
-
-	MT76_FILTER(CONTROL, MT_WF_RFCR_DROP_CTS |
-			     MT_WF_RFCR_DROP_RTS |
-			     MT_WF_RFCR_DROP_CTL_RSV |
-			     MT_WF_RFCR_DROP_NDPA);
-
-	*total_flags = flags;
-	mt76_wr(dev, MT_WF_RFCR(phy->mt76->band_idx), phy->rxfilter);
-
-	if (*total_flags & FIF_CONTROL)
-		mt76_clear(dev, MT_WF_RFCR1(phy->mt76->band_idx), ctl_flags);
-	else
-		mt76_set(dev, MT_WF_RFCR1(phy->mt76->band_idx), ctl_flags);
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static void
-mt7996_update_bss_color(struct ieee80211_hw *hw,
-			struct ieee80211_vif *vif,
-			struct cfg80211_he_bss_color *bss_color)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_AP: {
-		struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-
-		if (mvif->mt76.omac_idx > HW_BSSID_MAX)
-			return;
-		fallthrough;
-	}
-	case NL80211_IFTYPE_STATION:
-		mt7996_mcu_update_bss_color(dev, vif, bss_color);
-		break;
-	default:
-		break;
-	}
-}
-
-static void mt7996_bss_info_changed(struct ieee80211_hw *hw,
-				    struct ieee80211_vif *vif,
-				    struct ieee80211_bss_conf *info,
-				    u32 changed)
-{
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-
-	mutex_lock(&dev->mt76.mutex);
-
-	/*
-	 * station mode uses BSSID to map the wlan entry to a peer,
-	 * and then peer references bss_info_rfch to set bandwidth cap.
-	 */
-	if (changed & BSS_CHANGED_BSSID &&
-	    vif->type == NL80211_IFTYPE_STATION) {
-		bool join = !is_zero_ether_addr(info->bssid);
-
-		mt7996_mcu_add_bss_info(phy, vif, join);
-		mt7996_mcu_add_sta(dev, vif, NULL, join);
-	}
-
-	if (changed & BSS_CHANGED_ASSOC) {
-		mt7996_mcu_add_bss_info(phy, vif, info->assoc);
-		mt7996_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
-	}
-
-	if (changed & BSS_CHANGED_ERP_SLOT) {
-		int slottime = info->use_short_slot ? 9 : 20;
-
-		if (slottime != phy->slottime) {
-			phy->slottime = slottime;
-			mt7996_mac_set_timing(phy);
-		}
-	}
-
-	if (changed & BSS_CHANGED_BEACON_ENABLED && info->enable_beacon) {
-		mt7996_mcu_add_bss_info(phy, vif, true);
-		mt7996_mcu_add_sta(dev, vif, NULL, true);
-	}
-
-	/* ensure that enable txcmd_mode after bss_info */
-	if (changed & (BSS_CHANGED_QOS | BSS_CHANGED_BEACON_ENABLED))
-		mt7996_mcu_set_tx(dev, vif);
-
-	if (changed & BSS_CHANGED_HE_OBSS_PD)
-		mt7996_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
-
-	if (changed & BSS_CHANGED_HE_BSS_COLOR)
-		mt7996_update_bss_color(hw, vif, &info->he_bss_color);
-
-	if (changed & (BSS_CHANGED_BEACON |
-		       BSS_CHANGED_BEACON_ENABLED))
-		mt7996_mcu_add_beacon(hw, vif, info->enable_beacon);
-
-	if (changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP ||
-	    changed & BSS_CHANGED_FILS_DISCOVERY)
-		mt7996_mcu_beacon_inband_discov(dev, vif, changed);
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static void
-mt7996_channel_switch_beacon(struct ieee80211_hw *hw,
-			     struct ieee80211_vif *vif,
-			     struct cfg80211_chan_def *chandef)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-
-	mutex_lock(&dev->mt76.mutex);
-	mt7996_mcu_add_beacon(hw, vif, true);
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-int mt7996_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta)
-{
-	struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76);
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	u8 band_idx = mvif->phy->mt76->band_idx;
-	int ret, idx;
-
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, MT7996_WTBL_STA);
-	if (idx < 0)
-		return -ENOSPC;
-
-	INIT_LIST_HEAD(&msta->rc_list);
-	INIT_LIST_HEAD(&msta->poll_list);
-	msta->vif = mvif;
-	msta->wcid.sta = 1;
-	msta->wcid.idx = idx;
-	msta->wcid.phy_idx = band_idx;
-	msta->wcid.tx_info |= MT_WCID_TX_INFO_SET;
-	msta->jiffies = jiffies;
-
-	mt7996_mac_wtbl_update(dev, idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	ret = mt7996_mcu_add_sta(dev, vif, sta, true);
-	if (ret)
-		return ret;
-
-	return mt7996_mcu_add_rate_ctrl(dev, vif, sta, false);
-}
-
-void mt7996_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta)
-{
-	struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76);
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	int i;
-
-	mt7996_mcu_add_sta(dev, vif, sta, false);
-
-	mt7996_mac_wtbl_update(dev, msta->wcid.idx,
-			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
-
-	for (i = 0; i < ARRAY_SIZE(msta->twt.flow); i++)
-		mt7996_mac_twt_teardown_flow(dev, msta, i);
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	if (!list_empty(&msta->poll_list))
-		list_del_init(&msta->poll_list);
-	if (!list_empty(&msta->rc_list))
-		list_del_init(&msta->rc_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-}
-
-static void mt7996_tx(struct ieee80211_hw *hw,
-		      struct ieee80211_tx_control *control,
-		      struct sk_buff *skb)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt76_phy *mphy = hw->priv;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct ieee80211_vif *vif = info->control.vif;
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-
-	if (control->sta) {
-		struct mt7996_sta *sta;
-
-		sta = (struct mt7996_sta *)control->sta->drv_priv;
-		wcid = &sta->wcid;
-	}
-
-	if (vif && !control->sta) {
-		struct mt7996_vif *mvif;
-
-		mvif = (struct mt7996_vif *)vif->drv_priv;
-		wcid = &mvif->sta.wcid;
-	}
-
-	mt76_tx(mphy, control->sta, wcid, skb);
-}
-
-static int mt7996_set_rts_threshold(struct ieee80211_hw *hw, u32 val)
-{
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	int ret;
-
-	mutex_lock(&phy->dev->mt76.mutex);
-	ret = mt7996_mcu_set_rts_thresh(phy, val);
-	mutex_unlock(&phy->dev->mt76.mutex);
-
-	return ret;
-}
-
-static int
-mt7996_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		    struct ieee80211_ampdu_params *params)
-{
-	enum ieee80211_ampdu_mlme_action action = params->action;
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct ieee80211_sta *sta = params->sta;
-	struct ieee80211_txq *txq = sta->txq[params->tid];
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	u16 tid = params->tid;
-	u16 ssn = params->ssn;
-	struct mt76_txq *mtxq;
-	int ret = 0;
-
-	if (!txq)
-		return -EINVAL;
-
-	mtxq = (struct mt76_txq *)txq->drv_priv;
-
-	mutex_lock(&dev->mt76.mutex);
-	switch (action) {
-	case IEEE80211_AMPDU_RX_START:
-		mt76_rx_aggr_start(&dev->mt76, &msta->wcid, tid, ssn,
-				   params->buf_size);
-		ret = mt7996_mcu_add_rx_ba(dev, params, true);
-		break;
-	case IEEE80211_AMPDU_RX_STOP:
-		mt76_rx_aggr_stop(&dev->mt76, &msta->wcid, tid);
-		ret = mt7996_mcu_add_rx_ba(dev, params, false);
-		break;
-	case IEEE80211_AMPDU_TX_OPERATIONAL:
-		mtxq->aggr = true;
-		mtxq->send_bar = false;
-		ret = mt7996_mcu_add_tx_ba(dev, params, true);
-		break;
-	case IEEE80211_AMPDU_TX_STOP_FLUSH:
-	case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
-		mtxq->aggr = false;
-		clear_bit(tid, &msta->ampdu_state);
-		ret = mt7996_mcu_add_tx_ba(dev, params, false);
-		break;
-	case IEEE80211_AMPDU_TX_START:
-		set_bit(tid, &msta->ampdu_state);
-		ret = IEEE80211_AMPDU_TX_START_IMMEDIATE;
-		break;
-	case IEEE80211_AMPDU_TX_STOP_CONT:
-		mtxq->aggr = false;
-		clear_bit(tid, &msta->ampdu_state);
-		ret = mt7996_mcu_add_tx_ba(dev, params, false);
-		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
-		break;
-	}
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static int
-mt7996_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	       struct ieee80211_sta *sta)
-{
-	return mt76_sta_state(hw, vif, sta, IEEE80211_STA_NOTEXIST,
-			      IEEE80211_STA_NONE);
-}
-
-static int
-mt7996_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		  struct ieee80211_sta *sta)
-{
-	return mt76_sta_state(hw, vif, sta, IEEE80211_STA_NONE,
-			      IEEE80211_STA_NOTEXIST);
-}
-
-static int
-mt7996_get_stats(struct ieee80211_hw *hw,
-		 struct ieee80211_low_level_stats *stats)
-{
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mib_stats *mib = &phy->mib;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	stats->dot11RTSSuccessCount = mib->rts_cnt;
-	stats->dot11RTSFailureCount = mib->rts_retries_cnt;
-	stats->dot11FCSErrorCount = mib->fcs_err_cnt;
-	stats->dot11ACKFailureCount = mib->ack_fail_cnt;
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-u64 __mt7996_get_tsf(struct ieee80211_hw *hw, struct mt7996_vif *mvif)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	union {
-		u64 t64;
-		u32 t32[2];
-	} tsf;
-	u16 n;
-
-	lockdep_assert_held(&dev->mt76.mutex);
-
-	n = mvif->mt76.omac_idx > HW_BSSID_MAX ? HW_BSSID_0
-					       : mvif->mt76.omac_idx;
-	/* TSF software read */
-	mt76_rmw(dev, MT_LPON_TCR(phy->mt76->band_idx, n), MT_LPON_TCR_SW_MODE,
-		 MT_LPON_TCR_SW_READ);
-	tsf.t32[0] = mt76_rr(dev, MT_LPON_UTTR0(phy->mt76->band_idx));
-	tsf.t32[1] = mt76_rr(dev, MT_LPON_UTTR1(phy->mt76->band_idx));
-
-	return tsf.t64;
-}
-
-static u64
-mt7996_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	u64 ret;
-
-	mutex_lock(&dev->mt76.mutex);
-	ret = __mt7996_get_tsf(hw, mvif);
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-static void
-mt7996_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-	       u64 timestamp)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	union {
-		u64 t64;
-		u32 t32[2];
-	} tsf = { .t64 = timestamp, };
-	u16 n;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	n = mvif->mt76.omac_idx > HW_BSSID_MAX ? HW_BSSID_0
-					       : mvif->mt76.omac_idx;
-	mt76_wr(dev, MT_LPON_UTTR0(phy->mt76->band_idx), tsf.t32[0]);
-	mt76_wr(dev, MT_LPON_UTTR1(phy->mt76->band_idx), tsf.t32[1]);
-	/* TSF software overwrite */
-	mt76_rmw(dev, MT_LPON_TCR(phy->mt76->band_idx, n), MT_LPON_TCR_SW_MODE,
-		 MT_LPON_TCR_SW_WRITE);
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static void
-mt7996_offset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		  s64 timestamp)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	union {
-		u64 t64;
-		u32 t32[2];
-	} tsf = { .t64 = timestamp, };
-	u16 n;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	n = mvif->mt76.omac_idx > HW_BSSID_MAX ? HW_BSSID_0
-					       : mvif->mt76.omac_idx;
-	mt76_wr(dev, MT_LPON_UTTR0(phy->mt76->band_idx), tsf.t32[0]);
-	mt76_wr(dev, MT_LPON_UTTR1(phy->mt76->band_idx), tsf.t32[1]);
-	/* TSF software adjust*/
-	mt76_rmw(dev, MT_LPON_TCR(phy->mt76->band_idx, n), MT_LPON_TCR_SW_MODE,
-		 MT_LPON_TCR_SW_ADJUST);
-
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static void
-mt7996_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class)
-{
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt7996_dev *dev = phy->dev;
-
-	mutex_lock(&dev->mt76.mutex);
-	phy->coverage_class = max_t(s16, coverage_class, 0);
-	mt7996_mac_set_timing(phy);
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static int
-mt7996_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	int max_nss = hweight8(hw->wiphy->available_antennas_tx);
-	u8 band_idx = phy->mt76->band_idx, shift = dev->chainshift[band_idx];
-
-	if (!tx_ant || tx_ant != rx_ant || ffs(tx_ant) > max_nss)
-		return -EINVAL;
-
-	if ((BIT(hweight8(tx_ant)) - 1) != tx_ant)
-		tx_ant = BIT(ffs(tx_ant) - 1) - 1;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	phy->mt76->antenna_mask = tx_ant;
-
-	/* restore to the origin chainmask which might have auxiliary path */
-	if (hweight8(tx_ant) == max_nss)
-		phy->mt76->chainmask = (dev->chainmask >> shift) << shift;
-	else
-		phy->mt76->chainmask = tx_ant << shift;
-
-	mt76_set_stream_caps(phy->mt76, true);
-	mt7996_set_stream_vht_txbf_caps(phy);
-	mt7996_set_stream_he_caps(phy);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	return 0;
-}
-
-static void mt7996_sta_statistics(struct ieee80211_hw *hw,
-				  struct ieee80211_vif *vif,
-				  struct ieee80211_sta *sta,
-				  struct station_info *sinfo)
-{
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	struct rate_info *txrate = &msta->wcid.rate;
-
-	if (!txrate->legacy && !txrate->flags)
-		return;
-
-	if (txrate->legacy) {
-		sinfo->txrate.legacy = txrate->legacy;
-	} else {
-		sinfo->txrate.mcs = txrate->mcs;
-		sinfo->txrate.nss = txrate->nss;
-		sinfo->txrate.bw = txrate->bw;
-		sinfo->txrate.he_gi = txrate->he_gi;
-		sinfo->txrate.he_dcm = txrate->he_dcm;
-		sinfo->txrate.he_ru_alloc = txrate->he_ru_alloc;
-	}
-	sinfo->txrate.flags = txrate->flags;
-	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BITRATE);
-}
-
-static void mt7996_sta_rc_work(void *data, struct ieee80211_sta *sta)
-{
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	struct mt7996_dev *dev = msta->vif->phy->dev;
-	u32 *changed = data;
-
-	spin_lock_bh(&dev->sta_poll_lock);
-	msta->changed |= *changed;
-	if (list_empty(&msta->rc_list))
-		list_add_tail(&msta->rc_list, &dev->sta_rc_list);
-	spin_unlock_bh(&dev->sta_poll_lock);
-}
-
-static void mt7996_sta_rc_update(struct ieee80211_hw *hw,
-				 struct ieee80211_vif *vif,
-				 struct ieee80211_sta *sta,
-				 u32 changed)
-{
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt7996_dev *dev = phy->dev;
-
-	mt7996_sta_rc_work(&changed, sta);
-	ieee80211_queue_work(hw, &dev->rc_work);
-}
-
-static int
-mt7996_set_bitrate_mask(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			const struct cfg80211_bitrate_mask *mask)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt7996_dev *dev = phy->dev;
-	u32 changed = IEEE80211_RC_SUPP_RATES_CHANGED;
-
-	mvif->bitrate_mask = *mask;
-
-	/* if multiple rates across different preambles are given we can
-	 * reconfigure this info with all peers using sta_rec command with
-	 * the below exception cases.
-	 * - single rate : if a rate is passed along with different preambles,
-	 * we select the highest one as fixed rate. i.e VHT MCS for VHT peers.
-	 * - multiple rates: if it's not in range format i.e 0-{7,8,9} for VHT
-	 * then multiple MCS setting (MCS 4,5,6) is not supported.
-	 */
-	ieee80211_iterate_stations_atomic(hw, mt7996_sta_rc_work, &changed);
-	ieee80211_queue_work(hw, &dev->rc_work);
-
-	return 0;
-}
-
-static void mt7996_sta_set_4addr(struct ieee80211_hw *hw,
-				 struct ieee80211_vif *vif,
-				 struct ieee80211_sta *sta,
-				 bool enabled)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-
-	if (enabled)
-		set_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags);
-	else
-		clear_bit(MT_WCID_FLAG_4ADDR, &msta->wcid.flags);
-
-	mt7996_mcu_wtbl_update_hdr_trans(dev, vif, sta);
-}
-
-static void mt7996_sta_set_decap_offload(struct ieee80211_hw *hw,
-					 struct ieee80211_vif *vif,
-					 struct ieee80211_sta *sta,
-					 bool enabled)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-
-	if (enabled)
-		set_bit(MT_WCID_FLAG_HDR_TRANS, &msta->wcid.flags);
-	else
-		clear_bit(MT_WCID_FLAG_HDR_TRANS, &msta->wcid.flags);
-
-	mt7996_mcu_wtbl_update_hdr_trans(dev, vif, sta);
-}
-
-static const char mt7996_gstrings_stats[][ETH_GSTRING_LEN] = {
-	"tx_ampdu_cnt",
-	"tx_stop_q_empty_cnt",
-	"tx_mpdu_attempts",
-	"tx_mpdu_success",
-	"tx_rwp_fail_cnt",
-	"tx_rwp_need_cnt",
-	"tx_pkt_ebf_cnt",
-	"tx_pkt_ibf_cnt",
-	"tx_ampdu_len:0-1",
-	"tx_ampdu_len:2-10",
-	"tx_ampdu_len:11-19",
-	"tx_ampdu_len:20-28",
-	"tx_ampdu_len:29-37",
-	"tx_ampdu_len:38-46",
-	"tx_ampdu_len:47-55",
-	"tx_ampdu_len:56-79",
-	"tx_ampdu_len:80-103",
-	"tx_ampdu_len:104-127",
-	"tx_ampdu_len:128-151",
-	"tx_ampdu_len:152-175",
-	"tx_ampdu_len:176-199",
-	"tx_ampdu_len:200-223",
-	"tx_ampdu_len:224-247",
-	"ba_miss_count",
-	"tx_beamformer_ppdu_iBF",
-	"tx_beamformer_ppdu_eBF",
-	"tx_beamformer_rx_feedback_all",
-	"tx_beamformer_rx_feedback_he",
-	"tx_beamformer_rx_feedback_vht",
-	"tx_beamformer_rx_feedback_ht",
-	"tx_beamformer_rx_feedback_bw", /* zero based idx: 20, 40, 80, 160 */
-	"tx_beamformer_rx_feedback_nc",
-	"tx_beamformer_rx_feedback_nr",
-	"tx_beamformee_ok_feedback_pkts",
-	"tx_beamformee_feedback_trig",
-	"tx_mu_beamforming",
-	"tx_mu_mpdu",
-	"tx_mu_successful_mpdu",
-	"tx_su_successful_mpdu",
-	"tx_msdu_pack_1",
-	"tx_msdu_pack_2",
-	"tx_msdu_pack_3",
-	"tx_msdu_pack_4",
-	"tx_msdu_pack_5",
-	"tx_msdu_pack_6",
-	"tx_msdu_pack_7",
-	"tx_msdu_pack_8",
-
-	/* rx counters */
-	"rx_fifo_full_cnt",
-	"rx_mpdu_cnt",
-	"channel_idle_cnt",
-	"rx_vector_mismatch_cnt",
-	"rx_delimiter_fail_cnt",
-	"rx_len_mismatch_cnt",
-	"rx_ampdu_cnt",
-	"rx_ampdu_bytes_cnt",
-	"rx_ampdu_valid_subframe_cnt",
-	"rx_ampdu_valid_subframe_b_cnt",
-	"rx_pfdrop_cnt",
-	"rx_vec_queue_overflow_drop_cnt",
-	"rx_ba_cnt",
-
-	/* per vif counters */
-	"v_tx_mode_cck",
-	"v_tx_mode_ofdm",
-	"v_tx_mode_ht",
-	"v_tx_mode_ht_gf",
-	"v_tx_mode_vht",
-	"v_tx_mode_he_su",
-	"v_tx_mode_he_ext_su",
-	"v_tx_mode_he_tb",
-	"v_tx_mode_he_mu",
-	"v_tx_bw_20",
-	"v_tx_bw_40",
-	"v_tx_bw_80",
-	"v_tx_bw_160",
-	"v_tx_mcs_0",
-	"v_tx_mcs_1",
-	"v_tx_mcs_2",
-	"v_tx_mcs_3",
-	"v_tx_mcs_4",
-	"v_tx_mcs_5",
-	"v_tx_mcs_6",
-	"v_tx_mcs_7",
-	"v_tx_mcs_8",
-	"v_tx_mcs_9",
-	"v_tx_mcs_10",
-	"v_tx_mcs_11",
-};
-
-#define MT7996_SSTATS_LEN ARRAY_SIZE(mt7996_gstrings_stats)
-
-/* Ethtool related API */
-static
-void mt7996_get_et_strings(struct ieee80211_hw *hw,
-			   struct ieee80211_vif *vif,
-			   u32 sset, u8 *data)
-{
-	if (sset == ETH_SS_STATS)
-		memcpy(data, *mt7996_gstrings_stats,
-		       sizeof(mt7996_gstrings_stats));
-}
-
-static
-int mt7996_get_et_sset_count(struct ieee80211_hw *hw,
-			     struct ieee80211_vif *vif, int sset)
-{
-	if (sset == ETH_SS_STATS)
-		return MT7996_SSTATS_LEN;
-
-	return 0;
-}
-
-static void mt7996_ethtool_worker(void *wi_data, struct ieee80211_sta *sta)
-{
-	struct mt76_ethtool_worker_info *wi = wi_data;
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-
-	if (msta->vif->mt76.idx != wi->idx)
-		return;
-
-	mt76_ethtool_worker(wi, &msta->stats);
-}
-
-static
-void mt7996_get_et_stats(struct ieee80211_hw *hw,
-			 struct ieee80211_vif *vif,
-			 struct ethtool_stats *stats, u64 *data)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt76_ethtool_worker_info wi = {
-		.data = data,
-		.idx = mvif->mt76.idx,
-	};
-	struct mib_stats *mib = &phy->mib;
-	/* See mt7996_ampdu_stat_read_phy, etc */
-	int i, n, ei = 0;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	mt7996_mac_update_stats(phy);
-
-	data[ei++] = mib->tx_ampdu_cnt;
-	data[ei++] = mib->tx_stop_q_empty_cnt;
-	data[ei++] = mib->tx_mpdu_attempts_cnt;
-	data[ei++] = mib->tx_mpdu_success_cnt;
-	data[ei++] = mib->tx_rwp_fail_cnt;
-	data[ei++] = mib->tx_rwp_need_cnt;
-	data[ei++] = mib->tx_bf_ebf_ppdu_cnt;
-	data[ei++] = mib->tx_bf_ibf_ppdu_cnt;
-
-	/* Tx ampdu stat */
-	n = ARRAY_SIZE(dev->mt76.aggr_stats) / __MT_MAX_BAND * phy->mt76->band_idx;
-	for (i = 0; i < 15 /*ARRAY_SIZE(bound)*/; i++)
-		data[ei++] = dev->mt76.aggr_stats[i + n];
-
-	data[ei++] = phy->mib.ba_miss_cnt;
-
-	/* Tx Beamformer monitor */
-	data[ei++] = mib->tx_bf_ibf_ppdu_cnt;
-	data[ei++] = mib->tx_bf_ebf_ppdu_cnt;
-
-	/* Tx Beamformer Rx feedback monitor */
-	data[ei++] = mib->tx_bf_rx_fb_all_cnt;
-	data[ei++] = mib->tx_bf_rx_fb_he_cnt;
-	data[ei++] = mib->tx_bf_rx_fb_vht_cnt;
-	data[ei++] = mib->tx_bf_rx_fb_ht_cnt;
-
-	data[ei++] = mib->tx_bf_rx_fb_bw;
-	data[ei++] = mib->tx_bf_rx_fb_nc_cnt;
-	data[ei++] = mib->tx_bf_rx_fb_nr_cnt;
-
-	/* Tx Beamformee Rx NDPA & Tx feedback report */
-	data[ei++] = mib->tx_bf_fb_cpl_cnt;
-	data[ei++] = mib->tx_bf_fb_trig_cnt;
-
-	/* Tx SU & MU counters */
-	data[ei++] = mib->tx_mu_bf_cnt;
-	data[ei++] = mib->tx_mu_mpdu_cnt;
-	data[ei++] = mib->tx_mu_acked_mpdu_cnt;
-	data[ei++] = mib->tx_su_acked_mpdu_cnt;
-
-	/* Tx amsdu info (pack-count histogram) */
-	for (i = 0; i < ARRAY_SIZE(mib->tx_amsdu); i++)
-		data[ei++] = mib->tx_amsdu[i];
-
-	/* rx counters */
-	data[ei++] = mib->rx_fifo_full_cnt;
-	data[ei++] = mib->rx_mpdu_cnt;
-	data[ei++] = mib->channel_idle_cnt;
-	data[ei++] = mib->rx_vector_mismatch_cnt;
-	data[ei++] = mib->rx_delimiter_fail_cnt;
-	data[ei++] = mib->rx_len_mismatch_cnt;
-	data[ei++] = mib->rx_ampdu_cnt;
-	data[ei++] = mib->rx_ampdu_bytes_cnt;
-	data[ei++] = mib->rx_ampdu_valid_subframe_cnt;
-	data[ei++] = mib->rx_ampdu_valid_subframe_bytes_cnt;
-	data[ei++] = mib->rx_pfdrop_cnt;
-	data[ei++] = mib->rx_vec_queue_overflow_drop_cnt;
-	data[ei++] = mib->rx_ba_cnt;
-
-	/* Add values for all stations owned by this vif */
-	wi.initial_stat_idx = ei;
-	ieee80211_iterate_stations_atomic(hw, mt7996_ethtool_worker, &wi);
-
-	mutex_unlock(&dev->mt76.mutex);
-
-	if (wi.sta_count == 0)
-		return;
-
-	ei += wi.worker_stat_count;
-	if (ei != MT7996_SSTATS_LEN)
-		dev_err(dev->mt76.dev, "ei: %d  MT7996_SSTATS_LEN: %d",
-			ei, (int)MT7996_SSTATS_LEN);
-}
-
-static void
-mt7996_twt_teardown_request(struct ieee80211_hw *hw,
-			    struct ieee80211_sta *sta,
-			    u8 flowid)
-{
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-
-	mutex_lock(&dev->mt76.mutex);
-	mt7996_mac_twt_teardown_flow(dev, msta, flowid);
-	mutex_unlock(&dev->mt76.mutex);
-}
-
-static int
-mt7996_set_radar_background(struct ieee80211_hw *hw,
-			    struct cfg80211_chan_def *chandef)
-{
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt7996_dev *dev = phy->dev;
-	int ret = -EINVAL;
-	bool running;
-
-	mutex_lock(&dev->mt76.mutex);
-
-	if (dev->mt76.region == NL80211_DFS_UNSET)
-		goto out;
-
-	if (dev->rdd2_phy && dev->rdd2_phy != phy) {
-		/* rdd2 is already locked */
-		ret = -EBUSY;
-		goto out;
-	}
-
-	/* rdd2 already configured on a radar channel */
-	running = dev->rdd2_phy &&
-		  cfg80211_chandef_valid(&dev->rdd2_chandef) &&
-		  !!(dev->rdd2_chandef.chan->flags & IEEE80211_CHAN_RADAR);
-
-	if (!chandef || running ||
-	    !(chandef->chan->flags & IEEE80211_CHAN_RADAR)) {
-		ret = mt7996_mcu_rdd_background_enable(phy, NULL);
-		if (ret)
-			goto out;
-
-		if (!running)
-			goto update_phy;
-	}
-
-	ret = mt7996_mcu_rdd_background_enable(phy, chandef);
-	if (ret)
-		goto out;
-
-update_phy:
-	dev->rdd2_phy = chandef ? phy : NULL;
-	if (chandef)
-		dev->rdd2_chandef = *chandef;
-out:
-	mutex_unlock(&dev->mt76.mutex);
-
-	return ret;
-}
-
-const struct ieee80211_ops mt7996_ops = {
-	.tx = mt7996_tx,
-	.start = mt7996_start,
-	.stop = mt7996_stop,
-	.add_interface = mt7996_add_interface,
-	.remove_interface = mt7996_remove_interface,
-	.config = mt7996_config,
-	.conf_tx = mt7996_conf_tx,
-	.configure_filter = mt7996_configure_filter,
-	.bss_info_changed = mt7996_bss_info_changed,
-	.sta_add = mt7996_sta_add,
-	.sta_remove = mt7996_sta_remove,
-	.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
-	.sta_rc_update = mt7996_sta_rc_update,
-	.set_key = mt7996_set_key,
-	.ampdu_action = mt7996_ampdu_action,
-	.set_rts_threshold = mt7996_set_rts_threshold,
-	.wake_tx_queue = mt76_wake_tx_queue,
-	.sw_scan_start = mt76_sw_scan,
-	.sw_scan_complete = mt76_sw_scan_complete,
-	.release_buffered_frames = mt76_release_buffered_frames,
-	.get_txpower = mt76_get_txpower,
-	.channel_switch_beacon = mt7996_channel_switch_beacon,
-	.get_stats = mt7996_get_stats,
-	.get_et_sset_count = mt7996_get_et_sset_count,
-	.get_et_stats = mt7996_get_et_stats,
-	.get_et_strings = mt7996_get_et_strings,
-	.get_tsf = mt7996_get_tsf,
-	.set_tsf = mt7996_set_tsf,
-	.offset_tsf = mt7996_offset_tsf,
-	.get_survey = mt76_get_survey,
-	.get_antenna = mt76_get_antenna,
-	.set_antenna = mt7996_set_antenna,
-	.set_bitrate_mask = mt7996_set_bitrate_mask,
-	.set_coverage_class = mt7996_set_coverage_class,
-	.sta_statistics = mt7996_sta_statistics,
-	.sta_set_4addr = mt7996_sta_set_4addr,
-	.sta_set_decap_offload = mt7996_sta_set_decap_offload,
-	.add_twt_setup = mt7996_mac_add_twt_setup,
-	.twt_teardown_request = mt7996_twt_teardown_request,
-#ifdef CONFIG_MAC80211_DEBUGFS
-	.sta_add_debugfs = mt7996_sta_add_debugfs,
-#endif
-	.set_radar_background = mt7996_set_radar_background,
-};
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mcu.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mcu.c
deleted file mode 100644
index d410fa7..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mcu.c
+++ /dev/null
@@ -1,3479 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#include <linux/firmware.h>
-#include <linux/fs.h>
-#include "mt7996.h"
-#include "mcu.h"
-#include "mac.h"
-#include "eeprom.h"
-
-struct mt7996_patch_hdr {
-	char build_date[16];
-	char platform[4];
-	__be32 hw_sw_ver;
-	__be32 patch_ver;
-	__be16 checksum;
-	u16 reserved;
-	struct {
-		__be32 patch_ver;
-		__be32 subsys;
-		__be32 feature;
-		__be32 n_region;
-		__be32 crc;
-		u32 reserved[11];
-	} desc;
-} __packed;
-
-struct mt7996_patch_sec {
-	__be32 type;
-	__be32 offs;
-	__be32 size;
-	union {
-		__be32 spec[13];
-		struct {
-			__be32 addr;
-			__be32 len;
-			__be32 sec_key_idx;
-			__be32 align_len;
-			u32 reserved[9];
-		} info;
-	};
-} __packed;
-
-struct mt7996_fw_trailer {
-	u8 chip_id;
-	u8 eco_code;
-	u8 n_region;
-	u8 format_ver;
-	u8 format_flag;
-	u8 reserved[2];
-	char fw_ver[10];
-	char build_date[15];
-	u32 crc;
-} __packed;
-
-struct mt7996_fw_region {
-	__le32 decomp_crc;
-	__le32 decomp_len;
-	__le32 decomp_blk_sz;
-	u8 reserved[4];
-	__le32 addr;
-	__le32 len;
-	u8 feature_set;
-	u8 reserved1[15];
-} __packed;
-
-#define MCU_PATCH_ADDRESS		0x200000
-
-#define HE_PHY(p, c)			u8_get_bits(c, IEEE80211_HE_PHY_##p)
-#define HE_MAC(m, c)			u8_get_bits(c, IEEE80211_HE_MAC_##m)
-
-static u8
-mt7996_mcu_get_sta_nss(u16 mcs_map)
-{
-	u8 nss;
-
-	for (nss = 8; nss > 0; nss--) {
-		u8 nss_mcs = (mcs_map >> (2 * (nss - 1))) & 3;
-
-		if (nss_mcs != IEEE80211_VHT_MCS_NOT_SUPPORTED)
-			break;
-	}
-
-	return nss - 1;
-}
-
-static void
-mt7996_mcu_set_sta_he_mcs(struct ieee80211_sta *sta, __le16 *he_mcs,
-			  u16 mcs_map)
-{
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	enum nl80211_band band = msta->vif->phy->mt76->chandef.chan->band;
-	const u16 *mask = msta->vif->bitrate_mask.control[band].he_mcs;
-	int nss, max_nss = sta->rx_nss > 3 ? 4 : sta->rx_nss;
-
-	for (nss = 0; nss < max_nss; nss++) {
-		int mcs;
-
-		switch ((mcs_map >> (2 * nss)) & 0x3) {
-		case IEEE80211_HE_MCS_SUPPORT_0_11:
-			mcs = GENMASK(11, 0);
-			break;
-		case IEEE80211_HE_MCS_SUPPORT_0_9:
-			mcs = GENMASK(9, 0);
-			break;
-		case IEEE80211_HE_MCS_SUPPORT_0_7:
-			mcs = GENMASK(7, 0);
-			break;
-		default:
-			mcs = 0;
-		}
-
-		mcs = mcs ? fls(mcs & mask[nss]) - 1 : -1;
-
-		switch (mcs) {
-		case 0 ... 7:
-			mcs = IEEE80211_HE_MCS_SUPPORT_0_7;
-			break;
-		case 8 ... 9:
-			mcs = IEEE80211_HE_MCS_SUPPORT_0_9;
-			break;
-		case 10 ... 11:
-			mcs = IEEE80211_HE_MCS_SUPPORT_0_11;
-			break;
-		default:
-			mcs = IEEE80211_HE_MCS_NOT_SUPPORTED;
-			break;
-		}
-		mcs_map &= ~(0x3 << (nss * 2));
-		mcs_map |= mcs << (nss * 2);
-	}
-
-	*he_mcs = cpu_to_le16(mcs_map);
-}
-
-static void
-mt7996_mcu_set_sta_vht_mcs(struct ieee80211_sta *sta, __le16 *vht_mcs,
-			   const u16 *mask)
-{
-	u16 mcs, mcs_map = le16_to_cpu(sta->vht_cap.vht_mcs.rx_mcs_map);
-	int nss, max_nss = sta->rx_nss > 3 ? 4 : sta->rx_nss;
-
-	for (nss = 0; nss < max_nss; nss++, mcs_map >>= 2) {
-		switch (mcs_map & 0x3) {
-		case IEEE80211_VHT_MCS_SUPPORT_0_9:
-			mcs = GENMASK(9, 0);
-			break;
-		case IEEE80211_VHT_MCS_SUPPORT_0_8:
-			mcs = GENMASK(8, 0);
-			break;
-		case IEEE80211_VHT_MCS_SUPPORT_0_7:
-			mcs = GENMASK(7, 0);
-			break;
-		default:
-			mcs = 0;
-		}
-
-		vht_mcs[nss] = cpu_to_le16(mcs & mask[nss]);
-	}
-}
-
-static void
-mt7996_mcu_set_sta_ht_mcs(struct ieee80211_sta *sta, u8 *ht_mcs,
-			  const u8 *mask)
-{
-	int nss, max_nss = sta->rx_nss > 3 ? 4 : sta->rx_nss;
-
-	for (nss = 0; nss < max_nss; nss++)
-		ht_mcs[nss] = sta->ht_cap.mcs.rx_mask[nss] & mask[nss];
-}
-
-static int
-mt7996_mcu_parse_response(struct mt76_dev *mdev, int cmd,
-			  struct sk_buff *skb, int seq)
-{
-	struct mt7996_mcu_rxd *rxd;
-	struct mt7996_mcu_uni_event *event;
-	int mcu_cmd = FIELD_GET(__MCU_CMD_FIELD_ID, cmd);
-	int ret = 0;
-
-	if (!skb) {
-		dev_err(mdev->dev, "Message %08x (seq %d) timeout\n",
-			cmd, seq);
-		return -ETIMEDOUT;
-	}
-
-	rxd = (struct mt7996_mcu_rxd *)skb->data;
-	if (seq != rxd->seq)
-		return -EAGAIN;
-
-	if (cmd == MCU_CMD(PATCH_SEM_CONTROL)) {
-		skb_pull(skb, sizeof(*rxd) - 4);
-		ret = *skb->data;
-	} else if ((rxd->option & MCU_UNI_CMD_EVENT) &&
-		    rxd->eid == MCU_UNI_EVENT_RESULT) {
-		skb_pull(skb, sizeof(*rxd));
-		event = (struct mt7996_mcu_uni_event *)skb->data;
-		ret = le32_to_cpu(event->status);
-		/* skip invalid event */
-		if (mcu_cmd != event->cid)
-			ret = -EAGAIN;
-	} else {
-		skb_pull(skb, sizeof(struct mt7996_mcu_rxd));
-	}
-
-	return ret;
-}
-
-static int
-mt7996_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
-			int cmd, int *wait_seq)
-{
-	struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76);
-	int txd_len, mcu_cmd = FIELD_GET(__MCU_CMD_FIELD_ID, cmd);
-	struct mt76_connac2_mcu_uni_txd *uni_txd;
-	struct mt76_connac2_mcu_txd *mcu_txd;
-	enum mt76_mcuq_id qid;
-	__le32 *txd;
-	u32 val;
-	u8 seq;
-
-	mdev->mcu.timeout = 20 * HZ;
-
-	seq = ++dev->mt76.mcu.msg_seq & 0xf;
-	if (!seq)
-		seq = ++dev->mt76.mcu.msg_seq & 0xf;
-
-	if (cmd == MCU_CMD(FW_SCATTER)) {
-		qid = MT_MCUQ_FWDL;
-		goto exit;
-	}
-
-	txd_len = cmd & __MCU_CMD_FIELD_UNI ? sizeof(*uni_txd) : sizeof(*mcu_txd);
-	txd = (__le32 *)skb_push(skb, txd_len);
-	if (test_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state))
-		qid = MT_MCUQ_WA;
-	else
-		qid = MT_MCUQ_WM;
-
-	val = FIELD_PREP(MT_TXD0_TX_BYTES, skb->len) |
-	      FIELD_PREP(MT_TXD0_PKT_FMT, MT_TX_TYPE_CMD) |
-	      FIELD_PREP(MT_TXD0_Q_IDX, MT_TX_MCU_PORT_RX_Q0);
-	txd[0] = cpu_to_le32(val);
-
-	val = FIELD_PREP(MT_TXD1_HDR_FORMAT, MT_HDR_FORMAT_CMD);
-	txd[1] = cpu_to_le32(val);
-
-	if (cmd & __MCU_CMD_FIELD_UNI) {
-		uni_txd = (struct mt76_connac2_mcu_uni_txd *)txd;
-		uni_txd->len = cpu_to_le16(skb->len - sizeof(uni_txd->txd));
-		uni_txd->cid = cpu_to_le16(mcu_cmd);
-		uni_txd->s2d_index = MCU_S2D_H2CN;
-		uni_txd->pkt_type = MCU_PKT_ID;
-		uni_txd->seq = seq;
-
-		if (cmd & __MCU_CMD_FIELD_QUERY)
-			uni_txd->option = MCU_CMD_UNI_QUERY_ACK;
-		else
-			uni_txd->option = MCU_CMD_UNI_EXT_ACK;
-
-		if ((cmd & __MCU_CMD_FIELD_WA) && (cmd & __MCU_CMD_FIELD_WM))
-			uni_txd->s2d_index = MCU_S2D_H2CN;
-		else if (cmd & __MCU_CMD_FIELD_WA)
-			uni_txd->s2d_index = MCU_S2D_H2C;
-		else if (cmd & __MCU_CMD_FIELD_WM)
-			uni_txd->s2d_index = MCU_S2D_H2N;
-
-		goto exit;
-	}
-
-	mcu_txd = (struct mt76_connac2_mcu_txd *)txd;
-	mcu_txd->len = cpu_to_le16(skb->len - sizeof(mcu_txd->txd));
-	mcu_txd->pq_id = cpu_to_le16(MCU_PQ_ID(MT_TX_PORT_IDX_MCU,
-					       MT_TX_MCU_PORT_RX_Q0));
-	mcu_txd->pkt_type = MCU_PKT_ID;
-	mcu_txd->seq = seq;
-
-	mcu_txd->cid = FIELD_GET(__MCU_CMD_FIELD_ID, cmd);
-	mcu_txd->set_query = MCU_Q_NA;
-	mcu_txd->ext_cid = FIELD_GET(__MCU_CMD_FIELD_EXT_ID, cmd);
-	if (mcu_txd->ext_cid) {
-		mcu_txd->ext_cid_ack = 1;
-
-		if (cmd & __MCU_CMD_FIELD_QUERY)
-			mcu_txd->set_query = MCU_Q_QUERY;
-		else
-			mcu_txd->set_query = MCU_Q_SET;
-	}
-
-	if (cmd & __MCU_CMD_FIELD_WA)
-		mcu_txd->s2d_index = MCU_S2D_H2C;
-	else
-		mcu_txd->s2d_index = MCU_S2D_H2N;
-
-exit:
-	if (wait_seq)
-		*wait_seq = seq;
-
-	return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[qid], skb, 0);
-}
-
-int mt7996_mcu_wa_cmd(struct mt7996_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
-{
-	struct {
-		__le32 args[3];
-	} req = {
-		.args = {
-			cpu_to_le32(a1),
-			cpu_to_le32(a2),
-			cpu_to_le32(a3),
-		},
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), false);
-}
-
-static void
-mt7996_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	if (vif->csa_active)
-		ieee80211_csa_finish(vif);
-}
-
-static void
-mt7996_mcu_rx_radar_detected(struct mt7996_dev *dev, struct sk_buff *skb)
-{
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7996_mcu_rdd_report *r;
-
-	r = (struct mt7996_mcu_rdd_report *)skb->data;
-
-	mphy = dev->mt76.phys[r->band_idx];
-	if (!mphy)
-		return;
-
-	if (r->band_idx == MT_RX_SEL2)
-		cfg80211_background_radar_event(mphy->hw->wiphy,
-						&dev->rdd2_chandef,
-						GFP_ATOMIC);
-	else
-		ieee80211_radar_detected(mphy->hw);
-	dev->hw_pattern++;
-}
-
-static void
-mt7996_mcu_rx_log_message(struct mt7996_dev *dev, struct sk_buff *skb)
-{
-#define UNI_EVENT_FW_LOG_FORMAT 0
-	struct mt7996_mcu_rxd *rxd = (struct mt7996_mcu_rxd *)skb->data;
-	const char *data = (char *)&rxd[1] + 4, *type;
-	struct tlv *tlv = (struct tlv *)data;
-	int len;
-
-	if (!(rxd->option & MCU_UNI_CMD_EVENT)) {
-		len = skb->len - sizeof(*rxd);
-		data = (char *)&rxd[1];
-		goto out;
-	}
-
-	if (le16_to_cpu(tlv->tag) != UNI_EVENT_FW_LOG_FORMAT)
-		return;
-
-	data += sizeof(*tlv) + 4;
-	len = le16_to_cpu(tlv->len) - sizeof(*tlv) - 4;
-
-out:
-	switch (rxd->s2d_index) {
-	case 0:
-		if (mt7996_debugfs_rx_log(dev, data, len))
-			return;
-
-		type = "WM";
-		break;
-	case 2:
-		type = "WA";
-		break;
-	default:
-		type = "unknown";
-		break;
-	}
-
-	wiphy_info(mt76_hw(dev)->wiphy, "%s: %.*s", type, len, data);
-}
-
-static void
-mt7996_mcu_cca_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-	if (!vif->color_change_active)
-		return;
-
-	ieee80211_color_change_finish(vif);
-}
-
-static void
-mt7996_mcu_ie_countdown(struct mt7996_dev *dev, struct sk_buff *skb)
-{
-#define UNI_EVENT_IE_COUNTDOWN_CSA 0
-#define UNI_EVENT_IE_COUNTDOWN_BCC 1
-	struct header {
-		u8 band;
-		u8 rsv[3];
-	};
-	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct mt7996_mcu_rxd *rxd = (struct mt7996_mcu_rxd *)skb->data;
-	const char *data = (char *)&rxd[1], *tail;
-	struct header *hdr = (struct header *)data;
-	struct tlv *tlv = (struct tlv *)(data + 4);
-
-	if (hdr->band && dev->mt76.phys[hdr->band])
-		mphy = dev->mt76.phys[hdr->band];
-
-	tail = skb->data + le16_to_cpu(rxd->len);
-	while (data + sizeof(struct tlv) < tail && le16_to_cpu(tlv->len)) {
-		switch (le16_to_cpu(tlv->tag)) {
-		case UNI_EVENT_IE_COUNTDOWN_CSA:
-			ieee80211_iterate_active_interfaces_atomic(mphy->hw,
-				IEEE80211_IFACE_ITER_RESUME_ALL,
-				mt7996_mcu_csa_finish, mphy->hw);
-			break;
-		case UNI_EVENT_IE_COUNTDOWN_BCC:
-			ieee80211_iterate_active_interfaces_atomic(mphy->hw,
-				IEEE80211_IFACE_ITER_RESUME_ALL,
-				mt7996_mcu_cca_finish, mphy->hw);
-			break;
-		}
-
-		data += le16_to_cpu(tlv->len);
-		tlv = (struct tlv *)data;
-	}
-}
-
-static void
-mt7996_mcu_rx_ext_event(struct mt7996_dev *dev, struct sk_buff *skb)
-{
-	struct mt7996_mcu_rxd *rxd = (struct mt7996_mcu_rxd *)skb->data;
-
-	switch (rxd->ext_eid) {
-	case MCU_EXT_EVENT_FW_LOG_2_HOST:
-		mt7996_mcu_rx_log_message(dev, skb);
-		break;
-	default:
-		break;
-	}
-}
-
-static void
-mt7996_mcu_rx_unsolicited_event(struct mt7996_dev *dev, struct sk_buff *skb)
-{
-	struct mt7996_mcu_rxd *rxd = (struct mt7996_mcu_rxd *)skb->data;
-
-	switch (rxd->eid) {
-	case MCU_EVENT_EXT:
-		mt7996_mcu_rx_ext_event(dev, skb);
-		break;
-	default:
-		break;
-	}
-	dev_kfree_skb(skb);
-}
-
-static void
-mt7996_mcu_uni_rx_unsolicited_event(struct mt7996_dev *dev, struct sk_buff *skb)
-{
-	struct mt7996_mcu_rxd *rxd = (struct mt7996_mcu_rxd *)skb->data;
-
-	switch (rxd->eid) {
-	case MCU_UNI_EVENT_FW_LOG_2_HOST:
-		mt7996_mcu_rx_log_message(dev, skb);
-		break;
-	case MCU_UNI_EVENT_IE_COUNTDOWN:
-		mt7996_mcu_ie_countdown(dev, skb);
-		break;
-	case MCU_UNI_EVENT_RDD_REPORT:
-		mt7996_mcu_rx_radar_detected(dev, skb);
-		break;
-	default:
-		break;
-	}
-	dev_kfree_skb(skb);
-}
-
-void mt7996_mcu_rx_event(struct mt7996_dev *dev, struct sk_buff *skb)
-{
-	struct mt7996_mcu_rxd *rxd = (struct mt7996_mcu_rxd *)skb->data;
-
-	if (rxd->option & MCU_UNI_CMD_UNSOLICITED_EVENT) {
-		mt7996_mcu_uni_rx_unsolicited_event(dev, skb);
-		return;
-	}
-
-	/* WA still uses legacy event*/
-	if (rxd->ext_eid == MCU_EXT_EVENT_FW_LOG_2_HOST ||
-	    !rxd->seq)
-		mt7996_mcu_rx_unsolicited_event(dev, skb);
-	else
-		mt76_mcu_rx_event(&dev->mt76, skb);
-}
-
-static struct tlv *
-mt7996_mcu_add_uni_tlv(struct sk_buff *skb, u16 tag, u16 len)
-{
-	struct tlv *ptlv, tlv = {
-		.tag = cpu_to_le16(tag),
-		.len = cpu_to_le16(len),
-	};
-
-	ptlv = skb_put(skb, len);
-	memcpy(ptlv, &tlv, sizeof(tlv));
-
-	return ptlv;
-}
-
-static void
-mt7996_mcu_bss_rfch_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
-			struct mt7996_phy *phy)
-{
-	static const u8 rlm_ch_band[] = {
-		[NL80211_BAND_2GHZ] = 1,
-		[NL80211_BAND_5GHZ] = 2,
-		[NL80211_BAND_6GHZ] = 3,
-	};
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	struct bss_rlm_tlv *ch;
-	struct tlv *tlv;
-	int freq1 = chandef->center_freq1;
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_BSS_INFO_RLM, sizeof(*ch));
-
-	ch = (struct bss_rlm_tlv *)tlv;
-	ch->control_channel = chandef->chan->hw_value;
-	ch->center_chan = ieee80211_frequency_to_channel(freq1);
-	ch->bw = mt76_connac_chan_bw(chandef);
-	ch->tx_streams = hweight8(phy->mt76->antenna_mask);
-	ch->rx_streams = hweight8(phy->mt76->antenna_mask);
-	ch->band = rlm_ch_band[chandef->chan->band];
-
-	if (chandef->width == NL80211_CHAN_WIDTH_80P80) {
-		int freq2 = chandef->center_freq2;
-
-		ch->center_chan2 = ieee80211_frequency_to_channel(freq2);
-	}
-}
-
-static void
-mt7996_mcu_bss_ra_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
-		      struct mt7996_phy *phy)
-{
-	struct bss_ra_tlv *ra;
-	struct tlv *tlv;
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_BSS_INFO_RA, sizeof(*ra));
-
-	ra = (struct bss_ra_tlv *)tlv;
-	ra->short_preamble = true;
-}
-
-static void
-mt7996_mcu_bss_he_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
-		      struct mt7996_phy *phy)
-{
-#define DEFAULT_HE_PE_DURATION		4
-#define DEFAULT_HE_DURATION_RTS_THRES	1023
-	const struct ieee80211_sta_he_cap *cap;
-	struct bss_info_uni_he *he;
-	struct tlv *tlv;
-
-	cap = mt76_connac_get_he_phy_cap(phy->mt76, vif);
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_BSS_INFO_HE_BASIC, sizeof(*he));
-
-	he = (struct bss_info_uni_he *)tlv;
-	he->he_pe_duration = vif->bss_conf.htc_trig_based_pkt_ext;
-	if (!he->he_pe_duration)
-		he->he_pe_duration = DEFAULT_HE_PE_DURATION;
-
-	he->he_rts_thres = cpu_to_le16(vif->bss_conf.frame_time_rts_th);
-	if (!he->he_rts_thres)
-		he->he_rts_thres = cpu_to_le16(DEFAULT_HE_DURATION_RTS_THRES);
-
-	he->max_nss_mcs[CMD_HE_MCS_BW80] = cap->he_mcs_nss_supp.tx_mcs_80;
-	he->max_nss_mcs[CMD_HE_MCS_BW160] = cap->he_mcs_nss_supp.tx_mcs_160;
-	he->max_nss_mcs[CMD_HE_MCS_BW8080] = cap->he_mcs_nss_supp.tx_mcs_80p80;
-}
-
-static void
-mt7996_mcu_bss_bmc_tlv(struct sk_buff *skb, struct mt7996_phy *phy)
-{
-	struct bss_rate_tlv *bmc;
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	enum nl80211_band band = chandef->chan->band;
-	struct tlv *tlv;
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_BSS_INFO_RATE, sizeof(*bmc));
-
-	bmc = (struct bss_rate_tlv *)tlv;
-	if (band == NL80211_BAND_2GHZ) {
-		bmc->short_preamble = true;
-	} else {
-		bmc->bc_trans = cpu_to_le16(0x8080);
-		bmc->mc_trans = cpu_to_le16(0x8080);
-		bmc->bc_fixed_rate = 1;
-		bmc->mc_fixed_rate = 1;
-		bmc->short_preamble = 1;
-	}
-}
-
-static void
-mt7996_mcu_bss_txcmd_tlv(struct sk_buff *skb, bool en)
-{
-	struct bss_txcmd_tlv *txcmd;
-	struct tlv *tlv;
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_BSS_INFO_TXCMD, sizeof(*txcmd));
-
-	txcmd = (struct bss_txcmd_tlv *)tlv;
-	txcmd->txcmd_mode = en;
-}
-
-static void
-mt7996_mcu_bss_mld_tlv(struct sk_buff *skb, struct ieee80211_vif *vif)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct bss_mld_tlv *mld;
-	struct tlv *tlv;
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_BSS_INFO_MLD, sizeof(*mld));
-
-	mld = (struct bss_mld_tlv *)tlv;
-	mld->group_mld_id = 0xff;
-	mld->own_mld_id = mvif->mt76.idx;
-	mld->remap_idx = 0xff;
-}
-
-static void
-mt7996_mcu_bss_sec_tlv(struct sk_buff *skb, struct ieee80211_vif *vif)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct bss_sec_tlv *sec;
-	struct tlv *tlv;
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_BSS_INFO_SEC, sizeof(*sec));
-
-	sec = (struct bss_sec_tlv *)tlv;
-	sec->cipher = mvif->cipher;
-}
-
-static int
-mt7996_mcu_muar_config(struct mt7996_phy *phy, struct ieee80211_vif *vif,
-		       bool bssid, bool enable)
-{
-	struct mt7996_dev *dev = phy->dev;
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	u32 idx = mvif->mt76.omac_idx - REPEATER_BSSID_START;
-	u32 mask = phy->omac_mask >> 32 & ~BIT(idx);
-	const u8 *addr = vif->addr;
-	struct {
-		u8 mode;
-		u8 force_clear;
-		u8 clear_bitmap[8];
-		u8 entry_count;
-		u8 write;
-		u8 band;
-
-		u8 index;
-		u8 bssid;
-		u8 addr[ETH_ALEN];
-	} __packed req = {
-		.mode = !!mask || enable,
-		.entry_count = 1,
-		.write = 1,
-		.band = phy->mt76->band_idx,
-		.index = idx * 2 + bssid,
-	};
-
-	if (bssid)
-		addr = vif->bss_conf.bssid;
-
-	if (enable)
-		ether_addr_copy(req.addr, addr);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(MUAR_UPDATE), &req,
-				 sizeof(req), true);
-}
-
-static int
-mt7996_mcu_bss_basic_tlv(struct sk_buff *skb,
-			struct ieee80211_vif *vif,
-			struct ieee80211_sta *sta,
-			struct mt76_phy *phy, u16 wlan_idx,
-			bool enable)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct cfg80211_chan_def *chandef = &phy->chandef;
-	struct mt76_connac_bss_basic_tlv *bss;
-	struct tlv *tlv;
-	u32 type;
-	int idx;
-
-	switch (vif->type) {
-	case NL80211_IFTYPE_MESH_POINT:
-	case NL80211_IFTYPE_AP:
-	case NL80211_IFTYPE_MONITOR:
-		type = CONNECTION_INFRA_AP;
-		break;
-	case NL80211_IFTYPE_STATION:
-		if (enable) {
-			rcu_read_lock();
-			if (!sta)
-				sta = ieee80211_find_sta(vif,
-							 vif->bss_conf.bssid);
-			/* TODO: enable BSS_INFO_UAPSD & BSS_INFO_PM */
-			if (sta) {
-				struct mt76_wcid *wcid;
-
-				wcid = (struct mt76_wcid *)sta->drv_priv;
-				wlan_idx = wcid->idx;
-			}
-			rcu_read_unlock();
-		}
-		type = CONNECTION_INFRA_STA;
-		break;
-	case NL80211_IFTYPE_ADHOC:
-		type = CONNECTION_IBSS_ADHOC;
-		break;
-	default:
-		WARN_ON(1);
-		break;
-	}
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_BSS_INFO_BASIC, sizeof(*bss));
-
-	bss = (struct mt76_connac_bss_basic_tlv *)tlv;
-	bss->bcn_interval = cpu_to_le16(vif->bss_conf.beacon_int);
-	bss->dtim_period = vif->bss_conf.dtim_period;
-	bss->bmc_tx_wlan_idx = cpu_to_le16(wlan_idx);
-	bss->sta_idx = cpu_to_le16(wlan_idx);
-	bss->conn_type = cpu_to_le32(type);
-	bss->omac_idx = mvif->omac_idx;
-	bss->band_idx = mvif->band_idx;
-	bss->wmm_idx = mvif->wmm_idx;
-	bss->conn_state = !enable;
-	bss->active = enable;
-
-	idx = mvif->omac_idx > EXT_BSSID_START ? HW_BSSID_0 : mvif->omac_idx;
-	bss->hw_bss_idx = idx;
-
-	if (vif->type == NL80211_IFTYPE_MONITOR) {
-		memcpy(bss->bssid, phy->macaddr, ETH_ALEN);
-		return 0;
-	}
-
-	memcpy(bss->bssid, vif->bss_conf.bssid, ETH_ALEN);
-	bss->bcn_interval = cpu_to_le16(vif->bss_conf.beacon_int);
-	bss->dtim_period = vif->bss_conf.dtim_period;
-	bss->phymode = mt76_connac_get_phy_mode(phy, vif,
-						chandef->chan->band, NULL);
-
-	if (chandef->chan->band == NL80211_BAND_6GHZ)
-		bss->phymode_ext |= PHY_MODE_AX_6G;
-
-	return 0;
-}
-
-static struct sk_buff *
-__mt7996_mcu_alloc_bss_req(struct mt76_dev *dev, struct mt76_vif *mvif, int len)
-{
-	struct bss_req_hdr hdr = {
-		.bss_idx = mvif->idx,
-	};
-	struct sk_buff *skb;
-
-	skb = mt76_mcu_msg_alloc(dev, NULL, len);
-	if (!skb)
-		return ERR_PTR(-ENOMEM);
-
-	skb_put_data(skb, &hdr, sizeof(hdr));
-
-	return skb;
-}
-
-int mt7996_mcu_add_bss_info(struct mt7996_phy *phy,
-			    struct ieee80211_vif *vif, int enable)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_dev *dev = phy->dev;
-	struct sk_buff *skb;
-
-	if (mvif->mt76.omac_idx >= REPEATER_BSSID_START) {
-		mt7996_mcu_muar_config(phy, vif, false, enable);
-		mt7996_mcu_muar_config(phy, vif, true, enable);
-	}
-
-	skb = __mt7996_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
-					 MT7996_BSS_UPDATE_MAX_SIZE);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	/* bss_basic must be first */
-	mt7996_mcu_bss_basic_tlv(skb, vif, NULL, phy->mt76,
-				mvif->sta.wcid.idx, enable);
-	mt7996_mcu_bss_sec_tlv(skb, vif);
-
-	if (vif->type == NL80211_IFTYPE_MONITOR)
-		goto out;
-
-	if (enable) {
-		mt7996_mcu_bss_rfch_tlv(skb, vif, phy);
-		mt7996_mcu_bss_bmc_tlv(skb, phy);
-		mt7996_mcu_bss_ra_tlv(skb, vif, phy);
-		mt7996_mcu_bss_txcmd_tlv(skb, true);
-
-		if (vif->bss_conf.he_support)
-			mt7996_mcu_bss_he_tlv(skb, vif, phy);
-
-		/* this tag is necessary no matter if the vif is MLD */
-		mt7996_mcu_bss_mld_tlv(skb, vif);
-	}
-out:
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_WMWA_UNI_CMD(BSS_INFO_UPDATE), true);
-}
-
-static int
-mt7996_mcu_sta_ba(struct mt76_dev *dev, struct mt76_vif *mvif,
-		  struct ieee80211_ampdu_params *params,
-		  bool enable, bool tx)
-{
-	struct mt76_wcid *wcid = (struct mt76_wcid *)params->sta->drv_priv;
-	struct sta_rec_ba_uni *ba;
-	struct sk_buff *skb;
-	struct tlv *tlv;
-
-	skb = __mt76_connac_mcu_alloc_sta_req(dev, mvif, wcid,
-					      MT7996_STA_UPDATE_MAX_SIZE);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_BA, sizeof(*ba));
-
-	ba = (struct sta_rec_ba_uni *)tlv;
-	ba->ba_type = tx ? MT_BA_TYPE_ORIGINATOR : MT_BA_TYPE_RECIPIENT;
-	ba->winsize = cpu_to_le16(params->buf_size);
-	ba->ssn = cpu_to_le16(params->ssn);
-	ba->ba_en = enable << params->tid;
-	ba->amsdu = params->amsdu;
-	ba->tid = params->tid;
-
-	return mt76_mcu_skb_send_msg(dev, skb,
-				     MCU_WMWA_UNI_CMD(STA_REC_UPDATE), true);
-}
-
-/** starec & wtbl **/
-int mt7996_mcu_add_tx_ba(struct mt7996_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool enable)
-{
-	struct mt7996_sta *msta = (struct mt7996_sta *)params->sta->drv_priv;
-	struct mt7996_vif *mvif = msta->vif;
-
-	if (enable && !params->amsdu)
-		msta->wcid.amsdu = false;
-
-	return mt7996_mcu_sta_ba(&dev->mt76, &mvif->mt76, params,
-				 enable, true);
-}
-
-int mt7996_mcu_add_rx_ba(struct mt7996_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool enable)
-{
-	struct mt7996_sta *msta = (struct mt7996_sta *)params->sta->drv_priv;
-	struct mt7996_vif *mvif = msta->vif;
-
-	return mt7996_mcu_sta_ba(&dev->mt76, &mvif->mt76, params,
-				 enable, false);
-}
-
-static void
-mt7996_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
-{
-	struct ieee80211_he_cap_elem *elem = &sta->he_cap.he_cap_elem;
-	struct ieee80211_he_mcs_nss_supp mcs_map;
-	struct sta_rec_he_v2 *he;
-	struct tlv *tlv;
-	int i = 0;
-
-	if (!sta->he_cap.has_he)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HE_V2, sizeof(*he));
-
-	he = (struct sta_rec_he_v2 *)tlv;
-	for (i = 0; i < 11; i++){
-		if (i < 6)
-			he->he_mac_cap[i] = cpu_to_le16(elem->mac_cap_info[i]);
-		he->he_phy_cap[i] = cpu_to_le16(elem->phy_cap_info[i]);
-	}
-
-	mcs_map = sta->he_cap.he_mcs_nss_supp;
-	switch (sta->bandwidth) {
-	case IEEE80211_STA_RX_BW_160:
-		if (elem->phy_cap_info[0] &
-		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
-			mt7996_mcu_set_sta_he_mcs(sta,
-						  &he->max_nss_mcs[CMD_HE_MCS_BW8080],
-						  le16_to_cpu(mcs_map.rx_mcs_80p80));
-
-		mt7996_mcu_set_sta_he_mcs(sta,
-					  &he->max_nss_mcs[CMD_HE_MCS_BW160],
-					  le16_to_cpu(mcs_map.rx_mcs_160));
-		fallthrough;
-	default:
-		mt7996_mcu_set_sta_he_mcs(sta,
-					  &he->max_nss_mcs[CMD_HE_MCS_BW80],
-					  le16_to_cpu(mcs_map.rx_mcs_80));
-		break;
-	}
-
-	he->pkt_ext = 2;
-}
-
-static void
-mt7996_mcu_sta_he_6g_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
-{
-	struct sta_rec_he_6g_capa *he_6g;
-	struct tlv *tlv;
-
-	if (!sta->he_6ghz_capa.capa)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HE_6G, sizeof(*he_6g));
-
-	he_6g = (struct sta_rec_he_6g_capa *)tlv;
-	he_6g->capa = cpu_to_le16(sta->he_6ghz_capa.capa);
-
-}
-
-static void
-mt7996_mcu_sta_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
-{
-	struct sta_rec_ht *ht;
-	struct tlv *tlv;
-
-	if (!sta->ht_cap.ht_supported)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HT, sizeof(*ht));
-
-	ht = (struct sta_rec_ht *)tlv;
-	ht->ht_cap = cpu_to_le16(sta->ht_cap.cap);
-}
-
-static void
-mt7996_mcu_sta_vht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
-{
-	struct sta_rec_vht *vht;
-	struct tlv *tlv;
-
-	/* For 6G band, this tlv is necessary to let hw work normally */
-	if (!sta->he_6ghz_capa.capa && !sta->vht_cap.vht_supported)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_VHT, sizeof(*vht));
-
-	vht = (struct sta_rec_vht *)tlv;
-	vht->vht_cap = cpu_to_le32(sta->vht_cap.cap);
-	vht->vht_rx_mcs_map = sta->vht_cap.vht_mcs.rx_mcs_map;
-	vht->vht_tx_mcs_map = sta->vht_cap.vht_mcs.tx_mcs_map;
-}
-
-static void
-mt7996_mcu_sta_amsdu_tlv(struct mt7996_dev *dev, struct sk_buff *skb,
-			 struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-{
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	struct sta_rec_amsdu *amsdu;
-	struct tlv *tlv;
-
-	if (vif->type != NL80211_IFTYPE_STATION &&
-	    vif->type != NL80211_IFTYPE_AP)
-		return;
-
-	if (!sta->max_amsdu_len)
-	    return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HW_AMSDU, sizeof(*amsdu));
-	amsdu = (struct sta_rec_amsdu *)tlv;
-	amsdu->max_amsdu_num = 8;
-	amsdu->amsdu_en = true;
-	msta->wcid.amsdu = true;
-
-	switch (sta->max_amsdu_len) {
-	case IEEE80211_MAX_MPDU_LEN_VHT_11454:
-		amsdu->max_mpdu_size =
-			IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454;
-		return;
-	case IEEE80211_MAX_MPDU_LEN_HT_7935:
-	case IEEE80211_MAX_MPDU_LEN_VHT_7991:
-		amsdu->max_mpdu_size = IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991;
-		return;
-	default:
-		amsdu->max_mpdu_size = IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_3895;
-		return;
-	}
-}
-
-static inline bool
-mt7996_is_ebf_supported(struct mt7996_phy *phy, struct ieee80211_vif *vif,
-			struct ieee80211_sta *sta, bool bfee)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	int tx_ant = hweight8(phy->mt76->antenna_mask) - 1;
-
-	if (vif->type != NL80211_IFTYPE_STATION &&
-	    vif->type != NL80211_IFTYPE_AP)
-		return false;
-
-	if (!bfee && tx_ant < 2)
-		return false;
-
-	if (sta->he_cap.has_he) {
-		struct ieee80211_he_cap_elem *pe = &sta->he_cap.he_cap_elem;
-
-		if (bfee)
-			return mvif->cap.he_su_ebfee &&
-			       HE_PHY(CAP3_SU_BEAMFORMER, pe->phy_cap_info[3]);
-		else
-			return mvif->cap.he_su_ebfer &&
-			       HE_PHY(CAP4_SU_BEAMFORMEE, pe->phy_cap_info[4]);
-	}
-
-	if (sta->vht_cap.vht_supported) {
-		u32 cap = sta->vht_cap.cap;
-
-		if (bfee)
-			return mvif->cap.vht_su_ebfee &&
-			       (cap & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE);
-		else
-			return mvif->cap.vht_su_ebfer &&
-			       (cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE);
-	}
-
-	return false;
-}
-
-static void
-mt7996_mcu_sta_sounding_rate(struct sta_rec_bf *bf)
-{
-	bf->sounding_phy = MT_PHY_TYPE_OFDM;
-	bf->ndp_rate = 0;				/* mcs0 */
-	bf->ndpa_rate = MT7996_CFEND_RATE_DEFAULT;	/* ofdm 24m */
-	bf->rept_poll_rate = MT7996_CFEND_RATE_DEFAULT;	/* ofdm 24m */
-}
-
-static void
-mt7996_mcu_sta_bfer_ht(struct ieee80211_sta *sta, struct mt7996_phy *phy,
-		       struct sta_rec_bf *bf)
-{
-	struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs;
-	u8 n = 0;
-
-	bf->tx_mode = MT_PHY_TYPE_HT;
-
-	if ((mcs->tx_params & IEEE80211_HT_MCS_TX_RX_DIFF) &&
-	    (mcs->tx_params & IEEE80211_HT_MCS_TX_DEFINED))
-		n = FIELD_GET(IEEE80211_HT_MCS_TX_MAX_STREAMS_MASK,
-			      mcs->tx_params);
-	else if (mcs->rx_mask[3])
-		n = 3;
-	else if (mcs->rx_mask[2])
-		n = 2;
-	else if (mcs->rx_mask[1])
-		n = 1;
-
-	bf->nrow = hweight8(phy->mt76->antenna_mask) - 1;
-	bf->ncol = min_t(u8, bf->nrow, n);
-	bf->ibf_ncol = n;
-}
-
-static void
-mt7996_mcu_sta_bfer_vht(struct ieee80211_sta *sta, struct mt7996_phy *phy,
-			struct sta_rec_bf *bf, bool explicit)
-{
-	struct ieee80211_sta_vht_cap *pc = &sta->vht_cap;
-	struct ieee80211_sta_vht_cap *vc = &phy->mt76->sband_5g.sband.vht_cap;
-	u16 mcs_map = le16_to_cpu(pc->vht_mcs.rx_mcs_map);
-	u8 nss_mcs = mt7996_mcu_get_sta_nss(mcs_map);
-	u8 tx_ant = hweight8(phy->mt76->antenna_mask) - 1;
-
-	bf->tx_mode = MT_PHY_TYPE_VHT;
-
-	if (explicit) {
-		u8 sts, snd_dim;
-
-		mt7996_mcu_sta_sounding_rate(bf);
-
-		sts = FIELD_GET(IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK,
-				pc->cap);
-		snd_dim = FIELD_GET(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK,
-				    vc->cap);
-		bf->nrow = min_t(u8, min_t(u8, snd_dim, sts), tx_ant);
-		bf->ncol = min_t(u8, nss_mcs, bf->nrow);
-		bf->ibf_ncol = bf->ncol;
-
-		if (sta->bandwidth == IEEE80211_STA_RX_BW_160)
-			bf->nrow = 1;
-	} else {
-		bf->nrow = tx_ant;
-		bf->ncol = min_t(u8, nss_mcs, bf->nrow);
-		bf->ibf_ncol = nss_mcs;
-
-		if (sta->bandwidth == IEEE80211_STA_RX_BW_160)
-			bf->ibf_nrow = 1;
-	}
-}
-
-static void
-mt7996_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,
-		       struct mt7996_phy *phy, struct sta_rec_bf *bf)
-{
-	struct ieee80211_sta_he_cap *pc = &sta->he_cap;
-	struct ieee80211_he_cap_elem *pe = &pc->he_cap_elem;
-	const struct ieee80211_sta_he_cap *vc =
-		mt76_connac_get_he_phy_cap(phy->mt76, vif);
-	const struct ieee80211_he_cap_elem *ve = &vc->he_cap_elem;
-	u16 mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_80);
-	u8 nss_mcs = mt7996_mcu_get_sta_nss(mcs_map);
-	u8 snd_dim, sts;
-
-	bf->tx_mode = MT_PHY_TYPE_HE_SU;
-
-	mt7996_mcu_sta_sounding_rate(bf);
-
-	bf->trigger_su = HE_PHY(CAP6_TRIG_SU_BEAMFORMING_FB,
-				pe->phy_cap_info[6]);
-	bf->trigger_mu = HE_PHY(CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB,
-				pe->phy_cap_info[6]);
-	snd_dim = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK,
-			 ve->phy_cap_info[5]);
-	sts = HE_PHY(CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_MASK,
-		     pe->phy_cap_info[4]);
-	bf->nrow = min_t(u8, snd_dim, sts);
-	bf->ncol = min_t(u8, nss_mcs, bf->nrow);
-	bf->ibf_ncol = bf->ncol;
-
-	if (sta->bandwidth != IEEE80211_STA_RX_BW_160)
-		return;
-
-	/* go over for 160MHz and 80p80 */
-	if (pe->phy_cap_info[0] &
-	    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G) {
-		mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_160);
-		nss_mcs = mt7996_mcu_get_sta_nss(mcs_map);
-
-		bf->ncol_gt_bw80 = nss_mcs;
-	}
-
-	if (pe->phy_cap_info[0] &
-	    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G) {
-		mcs_map = le16_to_cpu(pc->he_mcs_nss_supp.rx_mcs_80p80);
-		nss_mcs = mt7996_mcu_get_sta_nss(mcs_map);
-
-		if (bf->ncol_gt_bw80)
-			bf->ncol_gt_bw80 = min_t(u8, bf->ncol_gt_bw80, nss_mcs);
-		else
-			bf->ncol_gt_bw80 = nss_mcs;
-	}
-
-	snd_dim = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK,
-			 ve->phy_cap_info[5]);
-	sts = HE_PHY(CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_MASK,
-		     pe->phy_cap_info[4]);
-
-	bf->nrow_gt_bw80 = min_t(int, snd_dim, sts);
-}
-
-static void
-mt7996_mcu_sta_bfer_tlv(struct mt7996_dev *dev, struct sk_buff *skb,
-		       struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_phy *phy = mvif->phy;
-	int tx_ant = hweight8(phy->mt76->antenna_mask) - 1;
-	struct sta_rec_bf *bf;
-	struct tlv *tlv;
-	const u8 matrix[4][4] = {
-		{0, 0, 0, 0},
-		{1, 1, 0, 0},	/* 2x1, 2x2, 2x3, 2x4 */
-		{2, 4, 4, 0},	/* 3x1, 3x2, 3x3, 3x4 */
-		{3, 5, 6, 0}	/* 4x1, 4x2, 4x3, 4x4 */
-	};
-	bool ebf;
-
-	if (!(sta->ht_cap.ht_supported || sta->he_cap.has_he))
-		return;
-
-	ebf = mt7996_is_ebf_supported(phy, vif, sta, false);
-	if (!ebf && !dev->ibf)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_BF, sizeof(*bf));
-	bf = (struct sta_rec_bf *)tlv;
-
-	/* he: eBF only, in accordance with spec
-	 * vht: support eBF and iBF
-	 * ht: iBF only, since mac80211 lacks of eBF support
-	 */
-	if (sta->he_cap.has_he && ebf)
-		mt7996_mcu_sta_bfer_he(sta, vif, phy, bf);
-	else if (sta->vht_cap.vht_supported)
-		mt7996_mcu_sta_bfer_vht(sta, phy, bf, ebf);
-	else if (sta->ht_cap.ht_supported)
-		mt7996_mcu_sta_bfer_ht(sta, phy, bf);
-	else
-		return;
-
-	bf->bf_cap = ebf ? ebf : dev->ibf << 1;
-	bf->bw = sta->bandwidth;
-	bf->ibf_dbw = sta->bandwidth;
-	bf->ibf_nrow = tx_ant;
-
-	if (!ebf && sta->bandwidth <= IEEE80211_STA_RX_BW_40 && !bf->ncol)
-		bf->ibf_timeout = 0x48;
-	else
-		bf->ibf_timeout = 0x18;
-
-	if (ebf && bf->nrow != tx_ant)
-		bf->mem_20m = matrix[tx_ant][bf->ncol];
-	else
-		bf->mem_20m = matrix[bf->nrow][bf->ncol];
-
-	switch (sta->bandwidth) {
-	case IEEE80211_STA_RX_BW_160:
-	case IEEE80211_STA_RX_BW_80:
-		bf->mem_total = bf->mem_20m * 2;
-		break;
-	case IEEE80211_STA_RX_BW_40:
-		bf->mem_total = bf->mem_20m;
-		break;
-	case IEEE80211_STA_RX_BW_20:
-	default:
-		break;
-	}
-}
-
-static void
-mt7996_mcu_sta_bfee_tlv(struct mt7996_dev *dev, struct sk_buff *skb,
-			struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_phy *phy = mvif->phy;
-	int tx_ant = hweight8(phy->mt76->antenna_mask) - 1;
-	struct sta_rec_bfee *bfee;
-	struct tlv *tlv;
-	u8 nrow = 0;
-
-	if (!(sta->vht_cap.vht_supported || sta->he_cap.has_he))
-		return;
-
-	if (!mt7996_is_ebf_supported(phy, vif, sta, true))
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_BFEE, sizeof(*bfee));
-	bfee = (struct sta_rec_bfee *)tlv;
-
-	if (sta->he_cap.has_he) {
-		struct ieee80211_he_cap_elem *pe = &sta->he_cap.he_cap_elem;
-
-		nrow = HE_PHY(CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK,
-			      pe->phy_cap_info[5]);
-	} else if (sta->vht_cap.vht_supported) {
-		struct ieee80211_sta_vht_cap *pc = &sta->vht_cap;
-
-		nrow = FIELD_GET(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK,
-				 pc->cap);
-	}
-
-	/* reply with identity matrix to avoid 2x2 BF negative gain */
-	bfee->fb_identity_matrix = (nrow == 1 && tx_ant == 2);
-}
-
-static void
-mt7996_mcu_sta_phy_tlv(struct mt7996_dev *dev, struct sk_buff *skb,
-		       struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-{
-	struct sta_rec_phy *phy;
-	struct tlv *tlv;
-	u8 af = 0, mm = 0;
-
-	if (!sta->ht_cap.ht_supported && !sta->he_6ghz_capa.capa)
-		return;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_PHY, sizeof(*phy));
-
-	phy = (struct sta_rec_phy *)tlv;
-	if (sta->ht_cap.ht_supported) {
-		af = sta->ht_cap.ampdu_factor;
-		mm = sta->ht_cap.ampdu_density;
-	}
-
-	if (sta->vht_cap.vht_supported) {
-		u8 vht_af = FIELD_GET(IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK,
-				      sta->vht_cap.cap);
-
-		af = max_t(u8, af, vht_af);
-	}
-
-	if (sta->he_6ghz_capa.capa) {
-		af = le16_get_bits(sta->he_6ghz_capa.capa,
-				   IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP);
-		mm = le16_get_bits(sta->he_6ghz_capa.capa,
-				   IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START);
-	}
-
-	phy->ampdu = FIELD_PREP(IEEE80211_HT_AMPDU_PARM_FACTOR, af) |
-	             FIELD_PREP(IEEE80211_HT_AMPDU_PARM_DENSITY, mm);
-	phy->max_ampdu_len = af;
-}
-
-static void
-mt7996_mcu_sta_hdrt_tlv(struct mt7996_dev *dev, struct sk_buff *skb)
-{
-	struct sta_rec_hdrt *hdrt;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HDRT, sizeof(*hdrt));
-
-	hdrt = (struct sta_rec_hdrt *)tlv;
-	hdrt->hdrt_mode = 1;
-}
-
-static void
-mt7996_mcu_sta_hdr_trans_tlv(struct mt7996_dev *dev, struct sk_buff *skb,
-			     struct ieee80211_vif *vif,
-			     struct ieee80211_sta *sta)
-{
-	struct sta_rec_hdr_trans *hdr_trans;
-	struct mt76_wcid *wcid;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HDR_TRANS, sizeof(*hdr_trans));
-	hdr_trans = (struct sta_rec_hdr_trans*) tlv;
-	hdr_trans->dis_rx_hdr_tran = true;
-
-	if (vif->type == NL80211_IFTYPE_STATION)
-		hdr_trans->to_ds = true;
-	else
-		hdr_trans->from_ds = true;
-
-	wcid = (struct mt76_wcid *)sta->drv_priv;
-	if (!wcid)
-		return;
-
-	hdr_trans->dis_rx_hdr_tran = !test_bit(MT_WCID_FLAG_HDR_TRANS, &wcid->flags);
-	if (test_bit(MT_WCID_FLAG_4ADDR, &wcid->flags)) {
-		hdr_trans->to_ds = true;
-		hdr_trans->from_ds = true;
-	}
-}
-
-static enum mcu_mmps_mode
-mt7996_mcu_get_mmps_mode(enum ieee80211_smps_mode smps)
-{
-	switch (smps) {
-	case IEEE80211_SMPS_OFF:
-		return MCU_MMPS_DISABLE;
-	case IEEE80211_SMPS_STATIC:
-		return MCU_MMPS_STATIC;
-	case IEEE80211_SMPS_DYNAMIC:
-		return MCU_MMPS_DYNAMIC;
-	default:
-		return MCU_MMPS_DISABLE;
-	}
-}
-
-int mt7996_mcu_set_fixed_rate_ctrl(struct mt7996_dev *dev,
-				   void *data, u16 version)
-{
-	struct ra_fixed_rate *req;
-	struct uni_header hdr;
-	struct sk_buff *skb;
-	struct tlv *tlv;
-	int len;
-
-	len = sizeof(hdr) + sizeof(*req);
-
-	skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, len);
-	if (!skb)
-		return -ENOMEM;
-
-	skb_put_data(skb, &hdr, sizeof(hdr));
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_RA_FIXED_RATE, sizeof(*req));
-	req = (struct ra_fixed_rate *)tlv;
-	req->version = cpu_to_le16(version);
-	memcpy(&req->rate, data, sizeof(req->rate));
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_WM_UNI_CMD(RA), true);
-}
-
-static void
-mt7996_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7996_dev *dev,
-			     struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt76_phy *mphy = mvif->phy->mt76;
-	struct cfg80211_chan_def *chandef = &mphy->chandef;
-	struct cfg80211_bitrate_mask *mask = &mvif->bitrate_mask;
-	enum nl80211_band band = chandef->chan->band;
-	struct sta_rec_ra *ra;
-	struct tlv *tlv;
-	u32 supp_rate = sta->supp_rates[band];
-	u32 cap = sta->wme ? STA_CAP_WMM : 0;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_RA, sizeof(*ra));
-	ra = (struct sta_rec_ra *)tlv;
-
-	ra->valid = true;
-	ra->auto_rate = true;
-	ra->phy_mode = mt76_connac_get_phy_mode(mphy, vif, band, sta);
-	ra->channel = chandef->chan->hw_value;
-	ra->bw = sta->bandwidth;
-	ra->phy.bw = sta->bandwidth;
-	ra->mmps_mode = mt7996_mcu_get_mmps_mode(sta->smps_mode);
-
-	if (supp_rate) {
-		supp_rate &= mask->control[band].legacy;
-		ra->rate_len = hweight32(supp_rate);
-
-		if (band == NL80211_BAND_2GHZ) {
-			ra->supp_mode = MODE_CCK;
-			ra->supp_cck_rate = supp_rate & GENMASK(3, 0);
-
-			if (ra->rate_len > 4) {
-				ra->supp_mode |= MODE_OFDM;
-				ra->supp_ofdm_rate = supp_rate >> 4;
-			}
-		} else {
-			ra->supp_mode = MODE_OFDM;
-			ra->supp_ofdm_rate = supp_rate;
-		}
-	}
-
-	if (sta->ht_cap.ht_supported) {
-		ra->supp_mode |= MODE_HT;
-		ra->af = sta->ht_cap.ampdu_factor;
-		ra->ht_gf = !!(sta->ht_cap.cap & IEEE80211_HT_CAP_GRN_FLD);
-
-		cap |= STA_CAP_HT;
-		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20)
-			cap |= STA_CAP_SGI_20;
-		if (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40)
-			cap |= STA_CAP_SGI_40;
-		if (sta->ht_cap.cap & IEEE80211_HT_CAP_TX_STBC)
-			cap |= STA_CAP_TX_STBC;
-		if (sta->ht_cap.cap & IEEE80211_HT_CAP_RX_STBC)
-			cap |= STA_CAP_RX_STBC;
-		if (mvif->cap.ht_ldpc &&
-		    (sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING))
-			cap |= STA_CAP_LDPC;
-
-		mt7996_mcu_set_sta_ht_mcs(sta, ra->ht_mcs,
-					  mask->control[band].ht_mcs);
-		ra->supp_ht_mcs = *(__le32 *)ra->ht_mcs;
-	}
-
-	if (sta->vht_cap.vht_supported) {
-		u8 af;
-
-		ra->supp_mode |= MODE_VHT;
-		af = FIELD_GET(IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK,
-			       sta->vht_cap.cap);
-		ra->af = max_t(u8, ra->af, af);
-
-		cap |= STA_CAP_VHT;
-		if (sta->vht_cap.cap & IEEE80211_VHT_CAP_SHORT_GI_80)
-			cap |= STA_CAP_VHT_SGI_80;
-		if (sta->vht_cap.cap & IEEE80211_VHT_CAP_SHORT_GI_160)
-			cap |= STA_CAP_VHT_SGI_160;
-		if (sta->vht_cap.cap & IEEE80211_VHT_CAP_TXSTBC)
-			cap |= STA_CAP_VHT_TX_STBC;
-		if (sta->vht_cap.cap & IEEE80211_VHT_CAP_RXSTBC_1)
-			cap |= STA_CAP_VHT_RX_STBC;
-		if (mvif->cap.vht_ldpc &&
-		    (sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC))
-			cap |= STA_CAP_VHT_LDPC;
-
-		mt7996_mcu_set_sta_vht_mcs(sta, ra->supp_vht_mcs,
-					   mask->control[band].vht_mcs);
-	}
-
-	if (sta->he_cap.has_he) {
-		ra->supp_mode |= MODE_HE;
-		cap |= STA_CAP_HE;
-
-		if (sta->he_6ghz_capa.capa)
-			ra->af = le16_get_bits(sta->he_6ghz_capa.capa,
-					       IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP);
-	}
-	ra->sta_cap = cpu_to_le32(cap);
-}
-
-int mt7996_mcu_add_rate_ctrl(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-			     struct ieee80211_sta *sta, bool changed)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	struct sk_buff *skb;
-
-	skb = __mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					      &msta->wcid,
-					      MT7996_STA_UPDATE_MAX_SIZE);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	/* firmware rc algorithm refers to sta_rec_he for HE control.
-	 * once dev->rc_work changes the settings driver should also
-	 * update sta_rec_he here.
-	 */
-	if (changed)
-		mt7996_mcu_sta_he_tlv(skb, sta);
-
-	/* sta_rec_ra accommodates BW, NSS and only MCS range format
-	 * i.e 0-{7,8,9} for VHT.
-	 */
-	mt7996_mcu_sta_rate_ctrl_tlv(skb, dev, vif, sta);
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_WMWA_UNI_CMD(STA_REC_UPDATE), true);
-}
-
-static int
-mt7996_mcu_add_group(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-		     struct ieee80211_sta *sta)
-{
-#define MT_STA_BSS_GROUP		1
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_sta *msta;
-	struct {
-		u8 __rsv1[4];
-
-		__le16 tag;
-		__le16 len;
-		__le16 wlan_idx;
-		u8 __rsv2[2];
-		__le32 action;
-		__le32 val;
-		u8 __rsv3[8];
-	} __packed req = {
-		.tag = cpu_to_le16(UNI_VOW_DRR_CTRL),
-		.len = cpu_to_le16(sizeof(req) - 4),
-		.action = cpu_to_le32(MT_STA_BSS_GROUP),
-		.val = cpu_to_le32(mvif->mt76.idx % 16),
-	};
-
-	msta = sta ? (struct mt7996_sta *)sta->drv_priv : &mvif->sta;
-	req.wlan_idx = cpu_to_le16(msta->wcid.idx);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(VOW), &req,
-				 sizeof(req), true);
-}
-
-int mt7996_mcu_add_sta(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta, bool enable)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_sta *msta;
-	struct sk_buff *skb;
-	int ret;
-
-	msta = sta ? (struct mt7996_sta *)sta->drv_priv : &mvif->sta;
-
-	skb = __mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					      &msta->wcid,
-					      MT7996_STA_UPDATE_MAX_SIZE);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	/* starec basic */
-	mt76_connac_mcu_sta_basic_tlv(skb, vif, sta, enable,
-			!rcu_access_pointer(dev->mt76.wcid[msta->wcid.idx]));
-	if (!enable)
-		goto out;
-
-	/* tag order is in accordance with firmware dependency. */
-	if (sta) {
-		/* starec phy */
-		mt7996_mcu_sta_phy_tlv(dev, skb, vif, sta);
-		/* starec hdrt mode */
-		mt7996_mcu_sta_hdrt_tlv(dev, skb);
-		/* starec bfer */
-		mt7996_mcu_sta_bfer_tlv(dev, skb, vif, sta);
-		/* starec ht */
-		mt7996_mcu_sta_ht_tlv(skb, sta);
-		/* starec vht */
-		mt7996_mcu_sta_vht_tlv(skb, sta);
-		/* starec uapsd */
-		mt76_connac_mcu_sta_uapsd(skb, vif, sta);
-		/* starec amsdu */
-		mt7996_mcu_sta_amsdu_tlv(dev, skb, vif, sta);
-		/* starec he */
-		mt7996_mcu_sta_he_tlv(skb, sta);
-		/* starec he 6g*/
-		mt7996_mcu_sta_he_6g_tlv(skb, sta);
-		/* TODO: starec muru */
-		/* starec bfee */
-		mt7996_mcu_sta_bfee_tlv(dev, skb, vif, sta);
-		/* starec hdr trans */
-		mt7996_mcu_sta_hdr_trans_tlv(dev, skb, vif, sta);
-	}
-
-	ret = mt7996_mcu_add_group(dev, vif, sta);
-	if (ret) {
-		dev_kfree_skb(skb);
-		return ret;
-	}
-out:
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_WMWA_UNI_CMD(STA_REC_UPDATE), true);
-}
-
-static int
-mt7996_mcu_sta_key_tlv(struct mt76_wcid *wcid,
-		       struct mt76_connac_sta_key_conf *sta_key_conf,
-		       struct sk_buff *skb,
-		       struct ieee80211_key_conf *key,
-		       enum set_key_cmd cmd)
-{
-	struct sta_rec_sec_uni *sec;
-	struct tlv *tlv;
-
-	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_KEY_V2, sizeof(*sec));
-	sec = (struct sta_rec_sec_uni *)tlv;
-	sec->add = cmd;
-
-	if (cmd == SET_KEY) {
-		struct sec_key_uni *sec_key;
-		u8 cipher;
-
-		cipher = mt76_connac_mcu_get_cipher(key->cipher);
-		if (cipher == MCU_CIPHER_NONE)
-			return -EOPNOTSUPP;
-
-		sec_key = &sec->key[0];
-		sec_key->cipher_len = sizeof(*sec_key);
-
-		if (cipher == MCU_CIPHER_BIP_CMAC_128) {
-			sec_key->wlan_idx = cpu_to_le16(wcid->idx);
-			sec_key->cipher_id = MCU_CIPHER_AES_CCMP;
-			sec_key->key_id = sta_key_conf->keyidx;
-			sec_key->key_len = 16;
-			memcpy(sec_key->key, sta_key_conf->key, 16);
-
-			sec_key = &sec->key[1];
-			sec_key->wlan_idx = cpu_to_le16(wcid->idx);
-			sec_key->cipher_id = MCU_CIPHER_BIP_CMAC_128;
-			sec_key->cipher_len = sizeof(*sec_key);
-			sec_key->key_len = 16;
-			memcpy(sec_key->key, key->key, 16);
-			sec->n_cipher = 2;
-		} else {
-			sec_key->wlan_idx = cpu_to_le16(wcid->idx);
-			sec_key->cipher_id = cipher;
-			sec_key->key_id = key->keyidx;
-			sec_key->key_len = key->keylen;
-			memcpy(sec_key->key, key->key, key->keylen);
-
-			if (cipher == MCU_CIPHER_TKIP) {
-				/* Rx/Tx MIC keys are swapped */
-				memcpy(sec_key->key + 16, key->key + 24, 8);
-				memcpy(sec_key->key + 24, key->key + 16, 8);
-			}
-
-			/* store key_conf for BIP batch update */
-			if (cipher == MCU_CIPHER_AES_CCMP) {
-				memcpy(sta_key_conf->key, key->key, key->keylen);
-				sta_key_conf->keyidx = key->keyidx;
-			}
-
-			sec->n_cipher = 1;
-		}
-	} else {
-		sec->n_cipher = 0;
-	}
-
-	return 0;
-}
-
-int mt7996_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif,
-		      struct mt76_connac_sta_key_conf *sta_key_conf,
-		      struct ieee80211_key_conf *key, int mcu_cmd,
-		      struct mt76_wcid *wcid, enum set_key_cmd cmd)
-{
-	struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
-	struct sk_buff *skb;
-	int ret;
-
-	skb = __mt76_connac_mcu_alloc_sta_req(dev, mvif, wcid,
-					      MT7996_STA_UPDATE_MAX_SIZE);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	ret = mt7996_mcu_sta_key_tlv(wcid, sta_key_conf, skb, key, cmd);
-	if (ret)
-		return ret;
-
-	return mt76_mcu_skb_send_msg(dev, skb, mcu_cmd, true);
-}
-
-int mt7996_mcu_add_dev_info(struct mt7996_phy *phy,
-			    struct ieee80211_vif *vif, bool enable)
-{
-	struct mt7996_dev *dev = phy->dev;
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct {
-		struct req_hdr {
-			u8 omac_idx;
-			u8 dbdc_idx;
-			u8 __rsv[2];
-		} __packed hdr;
-		struct req_tlv {
-			__le16 tag;
-			__le16 len;
-			u8 active;
-			u8 __rsv;
-			u8 omac_addr[ETH_ALEN];
-		} __packed tlv;
-	} data = {
-		.hdr = {
-			.omac_idx = mvif->mt76.omac_idx,
-			.dbdc_idx = mvif->mt76.band_idx,
-		},
-		.tlv = {
-			.tag = cpu_to_le16(DEV_INFO_ACTIVE),
-			.len = cpu_to_le16(sizeof(struct req_tlv)),
-			.active = enable,
-		},
-	};
-
-	if (mvif->mt76.omac_idx >= REPEATER_BSSID_START)
-		return mt7996_mcu_muar_config(phy, vif, false, enable);
-
-	memcpy(data.tlv.omac_addr, vif->addr, ETH_ALEN);
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WMWA_UNI_CMD(DEV_INFO_UPDATE),
-				 &data, sizeof(data), true);
-}
-
-static void
-mt7996_mcu_beacon_cntdwn(struct ieee80211_vif *vif, struct sk_buff *rskb,
-			 struct sk_buff *skb,
-			 struct ieee80211_mutable_offsets *offs)
-{
-	struct bss_bcn_cntdwn_tlv *info;
-	struct tlv *tlv;
-	u16 tag;
-
-	if (!offs->cntdwn_counter_offs[0])
-		return;
-
-	tag = vif->csa_active ? UNI_BSS_INFO_BCN_CSA : UNI_BSS_INFO_BCN_BCC;
-
-	tlv = mt7996_mcu_add_uni_tlv(rskb, tag, sizeof(*info));
-
-	info = (struct bss_bcn_cntdwn_tlv *)tlv;
-	info->cnt = skb->data[offs->cntdwn_counter_offs[0]];
-}
-
-static void
-mt7996_mcu_beacon_cont(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-		       struct sk_buff *rskb, struct sk_buff *skb,
-		       struct bss_bcn_content_tlv *bcn,
-		       struct ieee80211_mutable_offsets *offs)
-{
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-	u8 *buf;
-
-	bcn->pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
-	bcn->tim_ie_pos = cpu_to_le16(offs->tim_offset);
-
-	if (offs->cntdwn_counter_offs[0]) {
-		u16 offset = offs->cntdwn_counter_offs[0];
-
-		if (vif->csa_active)
-			bcn->csa_ie_pos = cpu_to_le16(offset - 4);
-		if (vif->color_change_active)
-			bcn->bcc_ie_pos = cpu_to_le16(offset - 3);
-	}
-
-	buf = (u8 *)bcn + sizeof(*bcn) - MAX_BEACON_SIZE;
-	mt7996_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, 0, NULL,
-			      BSS_CHANGED_BEACON);
-	memcpy(buf + MT_TXD_SIZE, skb->data, skb->len);
-}
-
-static void
-mt7996_mcu_beacon_check_caps(struct mt7996_phy *phy, struct ieee80211_vif *vif,
-			     struct sk_buff *skb)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_vif_cap *vc = &mvif->cap;
-	const struct ieee80211_he_cap_elem *he;
-	const struct ieee80211_vht_cap *vht;
-	const struct ieee80211_ht_cap *ht;
-	struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
-	const u8 *ie;
-	u32 len, bc;
-
-	/* Check missing configuration options to allow AP mode in mac80211
-	 * to remain in sync with hostapd settings, and get a subset of
-	 * beacon and hardware capabilities.
-	 */
-	if (WARN_ON_ONCE(skb->len <= (mgmt->u.beacon.variable - skb->data)))
-		return;
-
-	memset(vc, 0, sizeof(*vc));
-
-	len = skb->len - (mgmt->u.beacon.variable - skb->data);
-
-	ie = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, mgmt->u.beacon.variable,
-			      len);
-	if (ie && ie[1] >= sizeof(*ht)) {
-		ht = (void *)(ie + 2);
-		vc->ht_ldpc |= !!(le16_to_cpu(ht->cap_info) &
-				  IEEE80211_HT_CAP_LDPC_CODING);
-	}
-
-	ie = cfg80211_find_ie(WLAN_EID_VHT_CAPABILITY, mgmt->u.beacon.variable,
-			      len);
-	if (ie && ie[1] >= sizeof(*vht)) {
-		u32 pc = phy->mt76->sband_5g.sband.vht_cap.cap;
-
-		vht = (void *)(ie + 2);
-		bc = le32_to_cpu(vht->vht_cap_info);
-
-		vc->vht_ldpc |= !!(bc & IEEE80211_VHT_CAP_RXLDPC);
-		vc->vht_su_ebfer =
-			(bc & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE) &&
-			(pc & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE);
-		vc->vht_su_ebfee =
-			(bc & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE) &&
-			(pc & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE);
-		vc->vht_mu_ebfer =
-			(bc & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE) &&
-			(pc & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE);
-		vc->vht_mu_ebfee =
-			(bc & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE) &&
-			(pc & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE);
-	}
-
-	ie = cfg80211_find_ext_ie(WLAN_EID_EXT_HE_CAPABILITY,
-				  mgmt->u.beacon.variable, len);
-	if (ie && ie[1] >= sizeof(*he) + 1) {
-		const struct ieee80211_sta_he_cap *pc =
-			mt76_connac_get_he_phy_cap(phy->mt76, vif);
-		const struct ieee80211_he_cap_elem *pe = &pc->he_cap_elem;
-
-		he = (void *)(ie + 3);
-
-		vc->he_ldpc =
-			HE_PHY(CAP1_LDPC_CODING_IN_PAYLOAD, pe->phy_cap_info[1]);
-		vc->he_su_ebfer =
-			HE_PHY(CAP3_SU_BEAMFORMER, he->phy_cap_info[3]) &&
-			HE_PHY(CAP3_SU_BEAMFORMER, pe->phy_cap_info[3]);
-		vc->he_su_ebfee =
-			HE_PHY(CAP4_SU_BEAMFORMEE, he->phy_cap_info[4]) &&
-			HE_PHY(CAP4_SU_BEAMFORMEE, pe->phy_cap_info[4]);
-		vc->he_mu_ebfer =
-			HE_PHY(CAP4_MU_BEAMFORMER, he->phy_cap_info[4]) &&
-			HE_PHY(CAP4_MU_BEAMFORMER, pe->phy_cap_info[4]);
-	}
-}
-
-int mt7996_mcu_add_beacon(struct ieee80211_hw *hw,
-			  struct ieee80211_vif *vif, int en)
-{
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct ieee80211_mutable_offsets offs;
-	struct ieee80211_tx_info *info;
-	struct sk_buff *skb, *rskb;
-	struct tlv *tlv;
-	struct bss_bcn_content_tlv *bcn;
-
-	rskb = __mt7996_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
-					  MT7996_BEACON_UPDATE_SIZE);
-	if (IS_ERR(rskb))
-		return PTR_ERR(rskb);
-
-	tlv = mt7996_mcu_add_uni_tlv(rskb,
-				     UNI_BSS_INFO_BCN_CONTENT, sizeof(*bcn));
-	bcn = (struct bss_bcn_content_tlv *)tlv;
-	bcn->enable = en;
-
-	if (!en)
-		goto out;
-
-	skb = ieee80211_beacon_get_template(hw, vif, &offs);
-	if (!skb)
-		return -EINVAL;
-
-	if (skb->len > MAX_BEACON_SIZE - MT_TXD_SIZE) {
-		dev_err(dev->mt76.dev, "Bcn size limit exceed\n");
-		dev_kfree_skb(skb);
-		return -EINVAL;
-	}
-
-	info = IEEE80211_SKB_CB(skb);
-	info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, phy->mt76->band_idx);
-
-	mt7996_mcu_beacon_check_caps(phy, vif, skb);
-
-	mt7996_mcu_beacon_cont(dev, vif, rskb, skb, bcn, &offs);
-	/* TODO: subtag - 11v MBSSID */
-	mt7996_mcu_beacon_cntdwn(vif, rskb, skb, &offs);
-	dev_kfree_skb(skb);
-out:
-	return mt76_mcu_skb_send_msg(&phy->dev->mt76, rskb,
-				     MCU_WMWA_UNI_CMD(BSS_INFO_UPDATE), true);
-}
-
-int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev,
-				    struct ieee80211_vif *vif, u32 changed)
-{
-#define OFFLOAD_TX_MODE_SU	BIT(0)
-#define OFFLOAD_TX_MODE_MU	BIT(1)
-	struct ieee80211_hw *hw = mt76_hw(dev);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct cfg80211_chan_def *chandef = &mvif->phy->mt76->chandef;
-	enum nl80211_band band = chandef->chan->band;
-	struct mt76_wcid *wcid = &dev->mt76.global_wcid;
-	struct bss_inband_discovery_tlv *discov;
-	struct ieee80211_tx_info *info;
-	struct sk_buff *rskb, *skb = NULL;
-	struct tlv *tlv;
-	u8 *buf, interval;
-
-	rskb = __mt7996_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
-					  MT7996_INBAND_FRAME_SIZE);
-	if (IS_ERR(rskb))
-		return PTR_ERR(rskb);
-
-	if (changed & BSS_CHANGED_FILS_DISCOVERY &&
-	    vif->bss_conf.fils_discovery.max_interval) {
-		interval = vif->bss_conf.fils_discovery.max_interval;
-		skb = ieee80211_get_fils_discovery_tmpl(hw, vif);
-	} else if (changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP &&
-		   vif->bss_conf.unsol_bcast_probe_resp_interval) {
-		interval = vif->bss_conf.unsol_bcast_probe_resp_interval;
-		skb = ieee80211_get_unsol_bcast_probe_resp_tmpl(hw, vif);
-	}
-
-	if (!skb)
-		return -EINVAL;
-
-	if (skb->len > MAX_INBAND_FRAME_SIZE - MT_TXD_SIZE) {
-		dev_err(dev->mt76.dev, "inband discovery size limit exceed\n");
-		dev_kfree_skb(skb);
-		return -EINVAL;
-	}
-
-	info = IEEE80211_SKB_CB(skb);
-	info->control.vif = vif;
-	info->band = band;
-	info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, phy->mt76->band_idx);
-
-	tlv = mt7996_mcu_add_uni_tlv(rskb, UNI_BSS_INFO_OFFLOAD, sizeof(*discov));
-
-	discov = (struct bss_inband_discovery_tlv *)tlv;
-	discov->tx_mode = OFFLOAD_TX_MODE_SU;
-	/* 0: UNSOL PROBE RESP, 1: FILS DISCOV */
-	discov->tx_type = !!(changed & BSS_CHANGED_FILS_DISCOVERY);
-	discov->tx_interval = interval;
-	discov->prob_rsp_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
-	discov->enable = true;
-	discov->wcid = cpu_to_le16(MT7996_WTBL_RESERVED);
-
-	buf = (u8 *)tlv + sizeof(*discov) - MAX_INBAND_FRAME_SIZE;
-
-	mt7996_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, 0, NULL,
-			      changed);
-
-	memcpy(buf + MT_TXD_SIZE, skb->data, skb->len);
-
-	dev_kfree_skb(skb);
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, rskb,
-				     MCU_WMWA_UNI_CMD(BSS_INFO_UPDATE), true);
-}
-
-static int mt7996_driver_own(struct mt7996_dev *dev, u8 band)
-{
-	mt76_wr(dev, MT_TOP_LPCR_HOST_BAND(band), MT_TOP_LPCR_HOST_DRV_OWN);
-	if (!mt76_poll_msec(dev, MT_TOP_LPCR_HOST_BAND(band),
-			    MT_TOP_LPCR_HOST_FW_OWN_STAT, 0, 500)) {
-		dev_err(dev->mt76.dev, "Timeout for driver own\n");
-		return -EIO;
-	}
-
-	/* clear irq when the driver own success */
-	mt76_wr(dev, MT_TOP_LPCR_HOST_BAND_IRQ_STAT(band),
-		MT_TOP_LPCR_HOST_BAND_STAT);
-
-	return 0;
-}
-
-static u32 mt7996_patch_sec_mode(u32 key_info)
-{
-	u32 sec = u32_get_bits(key_info, MT7996_PATCH_SEC), key = 0;
-
-	if (key_info == GENMASK(31, 0) || sec == MT7996_SEC_MODE_PLAIN)
-		return 0;
-
-	if (sec == MT7996_SEC_MODE_AES)
-		key = u32_get_bits(key_info, MT7996_PATCH_AES_KEY);
-	else
-		key = u32_get_bits(key_info, MT7996_PATCH_SCRAMBLE_KEY);
-
-	return MT7996_SEC_ENCRYPT | MT7996_SEC_IV |
-	       u32_encode_bits(key, MT7996_SEC_KEY_IDX);
-}
-
-static int mt7996_load_patch(struct mt7996_dev *dev)
-{
-	const struct mt7996_patch_hdr *hdr;
-	const struct firmware *fw = NULL;
-	int i, ret, sem;
-
-	sem = mt76_connac_mcu_patch_sem_ctrl(&dev->mt76, 1);
-	switch (sem) {
-	case PATCH_IS_DL:
-		return 0;
-	case PATCH_NOT_DL_SEM_SUCCESS:
-		break;
-	default:
-		dev_err(dev->mt76.dev, "Failed to get patch semaphore\n");
-		return -EAGAIN;
-	}
-
-	ret = request_firmware(&fw, MT7996_ROM_PATCH, dev->mt76.dev);
-	if (ret)
-		goto out;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
-		dev_err(dev->mt76.dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const struct mt7996_patch_hdr *)(fw->data);
-
-	dev_info(dev->mt76.dev, "HW/SW Version: 0x%x, Build Time: %.16s\n",
-		 be32_to_cpu(hdr->hw_sw_ver), hdr->build_date);
-
-	for (i = 0; i < be32_to_cpu(hdr->desc.n_region); i++) {
-		struct mt7996_patch_sec *sec;
-		const u8 *dl;
-		u32 len, addr, sec_key_idx, mode = DL_MODE_NEED_RSP;
-
-		sec = (struct mt7996_patch_sec *)(fw->data + sizeof(*hdr) +
-						  i * sizeof(*sec));
-		if ((be32_to_cpu(sec->type) & PATCH_SEC_TYPE_MASK) !=
-		    PATCH_SEC_TYPE_INFO) {
-			ret = -EINVAL;
-			goto out;
-		}
-
-		addr = be32_to_cpu(sec->info.addr);
-		len = be32_to_cpu(sec->info.len);
-		sec_key_idx = be32_to_cpu(sec->info.sec_key_idx);
-		dl = fw->data + be32_to_cpu(sec->offs);
-
-		mode |= mt7996_patch_sec_mode(sec_key_idx);
-
-		ret = mt76_connac_mcu_init_download(&dev->mt76, addr, len,
-						    mode);
-		if (ret) {
-			dev_err(dev->mt76.dev, "Download request failed\n");
-			goto out;
-		}
-
-		ret = __mt76_mcu_send_firmware(&dev->mt76, MCU_CMD(FW_SCATTER),
-					       dl, len, 4096);
-		if (ret) {
-			dev_err(dev->mt76.dev, "Failed to send patch\n");
-			goto out;
-		}
-	}
-
-	ret = mt76_connac_mcu_start_patch(&dev->mt76);
-	if (ret)
-		dev_err(dev->mt76.dev, "Failed to start patch\n");
-
-out:
-	sem = mt76_connac_mcu_patch_sem_ctrl(&dev->mt76, 0);
-	switch (sem) {
-	case PATCH_REL_SEM_SUCCESS:
-		break;
-	default:
-		ret = -EAGAIN;
-		dev_err(dev->mt76.dev, "Failed to release patch semaphore\n");
-		break;
-	}
-	release_firmware(fw);
-
-	return ret;
-}
-
-static int
-mt7996_mcu_send_ram_firmware(struct mt7996_dev *dev,
-			     const struct mt7996_fw_trailer *hdr,
-			     const u8 *data, bool is_wa)
-{
-	int i, offset = 0;
-	u32 override = 0, option = 0;
-
-	for (i = 0; i < hdr->n_region; i++) {
-		const struct mt7996_fw_region *region;
-		int err;
-		u32 len, addr, mode;
-
-		region = (const struct mt7996_fw_region *)((const u8 *)hdr -
-			 (hdr->n_region - i) * sizeof(*region));
-		mode = mt76_connac_mcu_gen_dl_mode(&dev->mt76,
-						   region->feature_set, is_wa);
-		len = le32_to_cpu(region->len);
-		addr = le32_to_cpu(region->addr);
-
-		if (region->feature_set & FW_FEATURE_OVERRIDE_ADDR)
-			override = addr;
-
-		err = mt76_connac_mcu_init_download(&dev->mt76, addr, len,
-						    mode);
-		if (err) {
-			dev_err(dev->mt76.dev, "Download request failed\n");
-			return err;
-		}
-
-		err = __mt76_mcu_send_firmware(&dev->mt76, MCU_CMD(FW_SCATTER),
-					       data + offset, len, 4096);
-		if (err) {
-			dev_err(dev->mt76.dev, "Failed to send firmware.\n");
-			return err;
-		}
-
-		offset += len;
-	}
-
-	if (override)
-		option |= FW_START_OVERRIDE;
-
-	if (is_wa)
-		option |= FW_START_WORKING_PDA_CR4;
-
-	return mt76_connac_mcu_start_firmware(&dev->mt76, override, option);
-}
-
-static int mt7996_load_ram(struct mt7996_dev *dev)
-{
-	const struct mt7996_fw_trailer *hdr;
-	const struct firmware *fw;
-	int ret;
-
-	ret = request_firmware(&fw, MT7996_FIRMWARE_WM, dev->mt76.dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
-		dev_err(dev->mt76.dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const struct mt7996_fw_trailer *)(fw->data + fw->size - sizeof(*hdr));
-
-	dev_info(dev->mt76.dev, "WM Firmware Version: %.10s, Build Time: %.15s\n",
-		 hdr->fw_ver, hdr->build_date);
-
-	ret = mt7996_mcu_send_ram_firmware(dev, hdr, fw->data, false);
-	if (ret) {
-		dev_err(dev->mt76.dev, "Failed to start WM firmware\n");
-		goto out;
-	}
-
-	release_firmware(fw);
-
-	ret = request_firmware(&fw, MT7996_FIRMWARE_WA, dev->mt76.dev);
-	if (ret)
-		return ret;
-
-	if (!fw || !fw->data || fw->size < sizeof(*hdr)) {
-		dev_err(dev->mt76.dev, "Invalid firmware\n");
-		ret = -EINVAL;
-		goto out;
-	}
-
-	hdr = (const struct mt7996_fw_trailer *)(fw->data + fw->size - sizeof(*hdr));
-
-	dev_info(dev->mt76.dev, "WA Firmware Version: %.10s, Build Time: %.15s\n",
-		 hdr->fw_ver, hdr->build_date);
-
-	ret = mt7996_mcu_send_ram_firmware(dev, hdr, fw->data, true);
-	if (ret) {
-		dev_err(dev->mt76.dev, "Failed to start WA firmware\n");
-		goto out;
-	}
-
-	snprintf(dev->mt76.hw->wiphy->fw_version,
-		 sizeof(dev->mt76.hw->wiphy->fw_version),
-		 "%.10s-%.15s", hdr->fw_ver, hdr->build_date);
-
-out:
-	release_firmware(fw);
-
-	return ret;
-}
-
-static int
-mt7996_firmware_state(struct mt7996_dev *dev, bool wa)
-{
-	u32 state = FIELD_PREP(MT_TOP_MISC_FW_STATE,
-			       wa ? FW_STATE_RDY : FW_STATE_FW_DOWNLOAD);
-
-	if (!mt76_poll_msec(dev, MT_TOP_MISC, MT_TOP_MISC_FW_STATE,
-			    state, 1000)) {
-		dev_err(dev->mt76.dev, "Timeout for initializing firmware\n");
-		return -EIO;
-	}
-	return 0;
-}
-
-static int mt7996_load_firmware(struct mt7996_dev *dev)
-{
-	int ret;
-
-	/* make sure fw is download state */
-	if (mt7996_firmware_state(dev, false)) {
-		/* restart firmware once */
-		__mt76_mcu_restart(&dev->mt76);
-		ret = mt7996_firmware_state(dev, false);
-		if (ret) {
-			dev_err(dev->mt76.dev,
-				"Firmware is not ready for download\n");
-			return ret;
-		}
-	}
-
-	ret = mt7996_load_patch(dev);
-	if (ret)
-		return ret;
-
-	ret = mt7996_load_ram(dev);
-	if (ret)
-		return ret;
-
-	ret = mt7996_firmware_state(dev, true);
-	if (ret)
-		return ret;
-
-	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_FWDL], false);
-
-	dev_dbg(dev->mt76.dev, "Firmware init done\n");
-
-	return 0;
-}
-
-int mt7996_mcu_fw_log_2_host(struct mt7996_dev *dev, u8 type, u8 ctrl)
-{
-	struct {
-		u8 _rsv[4];
-
-		__le16 tag;
-		__le16 len;
-		u8 ctrl;
-		u8 interval;
-		u8 _rsv2[2];
-	} __packed data = {
-		.tag = cpu_to_le16(UNI_WSYS_CONFIG_FW_LOG_CTRL),
-		.len = cpu_to_le16(sizeof(data) - 4),
-		.ctrl = ctrl,
-	};
-
-	if (type == MCU_FW_LOG_WA)
-		return mt76_mcu_send_msg(&dev->mt76, MCU_WA_UNI_CMD(WSYS_CONFIG),
-					 &data, sizeof(data), true);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(WSYS_CONFIG), &data,
-				 sizeof(data), true);
-}
-
-int mt7996_mcu_fw_dbg_ctrl(struct mt7996_dev *dev, u32 module, u8 level)
-{
-	struct {
-		u8 _rsv[4];
-
-		__le16 tag;
-		__le16 len;
-		__le32 module_idx;
-		u8 level;
-		u8 _rsv2[3];
-	} data = {
-		.tag = cpu_to_le16(UNI_WSYS_CONFIG_FW_DBG_CTRL),
-		.len = cpu_to_le16(sizeof(data) - 4),
-		.module_idx = cpu_to_le32(module),
-		.level = level,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(WSYS_CONFIG), &data,
-				 sizeof(data), false);
-}
-
-static int mt7996_mcu_set_mwds(struct mt7996_dev *dev, bool enabled)
-{
-	struct {
-		u8 enable;
-		u8 _rsv[3];
-	} __packed req = {
-		.enable = enabled
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WA_EXT_CMD(MWDS_SUPPORT), &req,
-				 sizeof(req), false);
-}
-
-static void mt7996_add_rx_airtime_tlv(struct sk_buff *skb, u8 band_idx)
-{
-	struct vow_rx_airtime *req;
-	struct tlv *tlv;
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_VOW_RX_AT_AIRTIME_CLR_EN, sizeof(*req));
-	req = (struct vow_rx_airtime *)tlv;
-	req->enable = true;
-	req->band = band_idx;
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_VOW_RX_AT_AIRTIME_EN, sizeof(*req));
-	req = (struct vow_rx_airtime *)tlv;
-	req->enable = true;
-	req->band = band_idx;
-}
-
-static int
-mt7996_mcu_init_rx_airtime(struct mt7996_dev *dev)
-{
-	struct uni_header hdr = {};
-	struct sk_buff *skb;
-	int len, num;
-
-	num = 2 + 2 * (dev->dbdc_support + dev->tbtc_support);
-	len = sizeof(hdr) + num * sizeof(struct vow_rx_airtime);
-	skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, len);
-	if (!skb)
-		return -ENOMEM;
-
-	skb_put_data(skb, &hdr, sizeof(hdr));
-
-	mt7996_add_rx_airtime_tlv(skb, dev->mt76.phy.band_idx);
-
-	if (dev->dbdc_support)
-		mt7996_add_rx_airtime_tlv(skb, MT_BAND1);
-
-	if (dev->tbtc_support)
-		mt7996_add_rx_airtime_tlv(skb, MT_BAND2);
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_WM_UNI_CMD(VOW), true);
-}
-
-int mt7996_mcu_restart(struct mt76_dev *dev)
-{
-	struct {
-		u8 __rsv1[4];
-
-		__le16 tag;
-		__le16 len;
-		u8 power_mode;
-		u8 __rsv2[3];
-	} __packed req = {
-		.tag = cpu_to_le16(UNI_POWER_OFF),
-		.len = cpu_to_le16(sizeof(req) - 4),
-		.power_mode = 1,
-	};
-
-	return mt76_mcu_send_msg(dev, MCU_WM_UNI_CMD(POWER_CREL), &req,
-				 sizeof(req), false);
-}
-
-int mt7996_mcu_init(struct mt7996_dev *dev)
-{
-	static const struct mt76_mcu_ops mt7996_mcu_ops = {
-		.headroom = sizeof(struct mt76_connac2_mcu_txd), /* reuse */
-		.mcu_skb_send_msg = mt7996_mcu_send_message,
-		.mcu_parse_response = mt7996_mcu_parse_response,
-		.mcu_restart = mt7996_mcu_restart,
-	};
-	int ret;
-
-	dev->mt76.mcu_ops = &mt7996_mcu_ops;
-
-	/* force firmware operation mode into normal state,
-	 * which should be set before firmware download stage.
-	 */
-	mt76_wr(dev, MT_SWDEF_MODE, MT_SWDEF_NORMAL_MODE);
-
-	ret = mt7996_driver_own(dev, 0);
-	if (ret)
-		return ret;
-	/* set driver own for band1 when two hif exist */
-	if (dev->hif2) {
-		ret = mt7996_driver_own(dev, 1);
-		if (ret)
-			return ret;
-	}
-
-	ret = mt7996_load_firmware(dev);
-	if (ret)
-		return ret;
-
-	set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-	ret = mt7996_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, 0);
-	if (ret)
-		return ret;
-
-	ret = mt7996_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, 0);
-	if (ret)
-		return ret;
-
-	ret = mt7996_mcu_set_mwds(dev, 1);
-	if (ret)
-		return ret;
-
-	ret = mt7996_mcu_init_rx_airtime(dev);
-	if (ret)
-		return ret;
-
-	return mt7996_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),
-				 MCU_WA_PARAM_RED, 0, 0);
-}
-
-void mt7996_mcu_exit(struct mt7996_dev *dev)
-{
-	__mt76_mcu_restart(&dev->mt76);
-	if (mt7996_firmware_state(dev, false)) {
-		dev_err(dev->mt76.dev, "Failed to exit mcu\n");
-		return;
-	}
-
-	mt76_wr(dev, MT_TOP_LPCR_HOST_BAND(0), MT_TOP_LPCR_HOST_FW_OWN);
-	if (dev->hif2)
-		mt76_wr(dev, MT_TOP_LPCR_HOST_BAND(1),
-			MT_TOP_LPCR_HOST_FW_OWN);
-	skb_queue_purge(&dev->mt76.mcu.res_q);
-}
-
-int mt7996_mcu_set_hdr_trans(struct mt7996_dev *dev, bool hdr_trans)
-{
-	struct {
-		u8 __rsv[4];
-	} __packed hdr;
-	struct hdr_trans_blacklist *req_blacklist;
-	struct hdr_trans_en *req_en;
-	struct sk_buff *skb;
-	struct tlv *tlv;
-	int len = MT7996_HDR_TRANS_MAX_SIZE + sizeof(hdr);
-
-	skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, len);
-	if (!skb)
-		return -ENOMEM;
-
-	skb_put_data(skb, &hdr, sizeof(hdr));
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_HDR_TRANS_EN, sizeof(*req_en));
-	req_en = (struct hdr_trans_en *)tlv;
-	req_en->enable = hdr_trans;
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_HDR_TRANS_VLAN,
-				    sizeof(struct hdr_trans_vlan));
-
-	if (hdr_trans) {
-		tlv = mt7996_mcu_add_uni_tlv(skb, UNI_HDR_TRANS_BLACKLIST,
-					    sizeof(*req_blacklist));
-		req_blacklist = (struct hdr_trans_blacklist *)tlv;
-		req_blacklist->enable = 1;
-		req_blacklist->type = cpu_to_le16(ETH_P_PAE);
-	}
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_WM_UNI_CMD(RX_HDR_TRANS), true);
-}
-
-int mt7996_mcu_set_tx(struct mt7996_dev *dev, struct ieee80211_vif *vif)
-{
-#define MCU_EDCA_AC_PARAM	0
-#define WMM_AIFS_SET		BIT(0)
-#define WMM_CW_MIN_SET		BIT(1)
-#define WMM_CW_MAX_SET		BIT(2)
-#define WMM_TXOP_SET		BIT(3)
-#define WMM_PARAM_SET		(WMM_AIFS_SET | WMM_CW_MIN_SET | \
-				 WMM_CW_MAX_SET | WMM_TXOP_SET)
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct {
-		u8 bss_idx;
-		u8 __rsv[3];
-	} __packed hdr = {
-		.bss_idx = mvif->mt76.idx,
-	};
-	struct sk_buff *skb;
-	int len = sizeof(hdr) + IEEE80211_NUM_ACS * sizeof(struct edca);
-	int ac;
-
-	skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, len);
-	if (!skb)
-		return -ENOMEM;
-
-	skb_put_data(skb, &hdr, sizeof(hdr));
-
-	for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
-		struct ieee80211_tx_queue_params *q = &mvif->queue_params[ac];
-		struct edca *e;
-		struct tlv *tlv;
-
-		tlv = mt7996_mcu_add_uni_tlv(skb, MCU_EDCA_AC_PARAM, sizeof(*e));
-
-		e = (struct edca *)tlv;
-		e->set = WMM_PARAM_SET;
-		e->queue = ac + mvif->mt76.wmm_idx * MT7996_MAX_WMM_SETS;
-		e->aifs = q->aifs;
-		e->txop = cpu_to_le16(q->txop);
-
-		if (q->cw_min)
-			e->cw_min = fls(q->cw_min);
-		else
-			e->cw_min = 5;
-
-		if (q->cw_max)
-			e->cw_max = cpu_to_le16(fls(q->cw_max));
-		else
-			e->cw_max = cpu_to_le16(10);
-	}
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_WM_UNI_CMD(EDCA_UPDATE), true);
-}
-
-int mt7996_mcu_set_fcc5_lpn(struct mt7996_dev *dev, int val)
-{
-	struct {
-		__le32 tag;
-		__le16 min_lpn;
-		u8 rsv[2];
-	} __packed req = {
-		.tag = cpu_to_le32(0x1),
-		.min_lpn = cpu_to_le16(val),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_RDD_TH), &req,
-				 sizeof(req), true);
-}
-
-int mt7996_mcu_set_pulse_th(struct mt7996_dev *dev,
-			    const struct mt7996_dfs_pulse *pulse)
-{
-	struct {
-		__le32 tag;
-
-		__le32 max_width;		/* us */
-		__le32 max_pwr;			/* dbm */
-		__le32 min_pwr;			/* dbm */
-		__le32 min_stgr_pri;		/* us */
-		__le32 max_stgr_pri;		/* us */
-		__le32 min_cr_pri;		/* us */
-		__le32 max_cr_pri;		/* us */
-	} __packed req = {
-		.tag = cpu_to_le32(0x3),
-
-#define __req_field(field) .field = cpu_to_le32(pulse->field)
-		__req_field(max_width),
-		__req_field(max_pwr),
-		__req_field(min_pwr),
-		__req_field(min_stgr_pri),
-		__req_field(max_stgr_pri),
-		__req_field(min_cr_pri),
-		__req_field(max_cr_pri),
-#undef __req_field
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_RDD_TH), &req,
-				 sizeof(req), true);
-}
-
-int mt7996_mcu_set_radar_th(struct mt7996_dev *dev, int index,
-			    const struct mt7996_dfs_pattern *pattern)
-{
-	struct {
-		__le32 tag;
-		__le16 radar_type;
-
-		u8 enb;
-		u8 stgr;
-		u8 min_crpn;
-		u8 max_crpn;
-		u8 min_crpr;
-		u8 min_pw;
-		__le32 min_pri;
-		__le32 max_pri;
-		u8 max_pw;
-		u8 min_crbn;
-		u8 max_crbn;
-		u8 min_stgpn;
-		u8 max_stgpn;
-		u8 min_stgpr;
-		u8 rsv[2];
-		__le32 min_stgpr_diff;
-	} __packed req = {
-		.tag = cpu_to_le32(0x2),
-		.radar_type = cpu_to_le16(index),
-
-#define __req_field_u8(field) .field = pattern->field
-#define __req_field_u32(field) .field = cpu_to_le32(pattern->field)
-		__req_field_u8(enb),
-		__req_field_u8(stgr),
-		__req_field_u8(min_crpn),
-		__req_field_u8(max_crpn),
-		__req_field_u8(min_crpr),
-		__req_field_u8(min_pw),
-		__req_field_u32(min_pri),
-		__req_field_u32(max_pri),
-		__req_field_u8(max_pw),
-		__req_field_u8(min_crbn),
-		__req_field_u8(max_crbn),
-		__req_field_u8(min_stgpn),
-		__req_field_u8(max_stgpn),
-		__req_field_u8(min_stgpr),
-		__req_field_u32(min_stgpr_diff),
-#undef __req_field_u8
-#undef __req_field_u32
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_RDD_TH), &req,
-				 sizeof(req), true);
-}
-
-static int
-mt7996_mcu_background_chain_ctrl(struct mt7996_phy *phy,
-				 struct cfg80211_chan_def *chandef,
-				 int cmd)
-{
-	struct mt7996_dev *dev = phy->dev;
-	struct mt76_phy *mphy = phy->mt76;
-	struct ieee80211_channel *chan = mphy->chandef.chan;
-	int freq = mphy->chandef.center_freq1;
-	struct mt7996_mcu_background_chain_ctrl req = {
-		.monitor_scan_type = 2, /* simple rx */
-	};
-
-	if (!chandef && cmd != CH_SWITCH_BACKGROUND_SCAN_STOP)
-		return -EINVAL;
-
-	if (!cfg80211_chandef_valid(&mphy->chandef))
-		return -EINVAL;
-
-	switch (cmd) {
-	case CH_SWITCH_BACKGROUND_SCAN_START: {
-		req.chan = chan->hw_value;
-		req.central_chan = ieee80211_frequency_to_channel(freq);
-		req.bw = mt76_connac_chan_bw(&mphy->chandef);
-		req.monitor_chan = chandef->chan->hw_value;
-		req.monitor_central_chan =
-			ieee80211_frequency_to_channel(chandef->center_freq1);
-		req.monitor_bw = mt76_connac_chan_bw(chandef);
-		req.band_idx = phy->mt76->band_idx;
-		req.scan_mode = 1;
-		break;
-	}
-	case CH_SWITCH_BACKGROUND_SCAN_RUNNING:
-		req.monitor_chan = chandef->chan->hw_value;
-		req.monitor_central_chan =
-			ieee80211_frequency_to_channel(chandef->center_freq1);
-		req.band_idx = phy->mt76->band_idx;
-		req.scan_mode = 2;
-		break;
-	case CH_SWITCH_BACKGROUND_SCAN_STOP:
-		req.chan = chan->hw_value;
-		req.central_chan = ieee80211_frequency_to_channel(freq);
-		req.bw = mt76_connac_chan_bw(&mphy->chandef);
-		req.tx_stream = hweight8(mphy->antenna_mask);
-		req.rx_stream = mphy->antenna_mask;
-		break;
-	default:
-		return -EINVAL;
-	}
-	req.band = chandef ? chandef->chan->band == NL80211_BAND_5GHZ : 1;
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(OFFCH_SCAN_CTRL),
-				 &req, sizeof(req), false);
-}
-
-int mt7996_mcu_rdd_background_enable(struct mt7996_phy *phy,
-				     struct cfg80211_chan_def *chandef)
-{
-	struct mt7996_dev *dev = phy->dev;
-	int err, region;
-
-	if (!chandef) { /* disable offchain */
-		err = mt7996_mcu_rdd_cmd(dev, RDD_STOP, MT_RX_SEL2,
-					0, 0);
-		if (err)
-			return err;
-
-		return mt7996_mcu_background_chain_ctrl(phy, NULL,
-				CH_SWITCH_BACKGROUND_SCAN_STOP);
-	}
-
-	err = mt7996_mcu_background_chain_ctrl(phy, chandef,
-					       CH_SWITCH_BACKGROUND_SCAN_START);
-	if (err)
-		return err;
-
-	switch (dev->mt76.region) {
-	case NL80211_DFS_ETSI:
-		region = 0;
-		break;
-	case NL80211_DFS_JP:
-		region = 2;
-		break;
-	case NL80211_DFS_FCC:
-	default:
-		region = 1;
-		break;
-	}
-
-	return mt7996_mcu_rdd_cmd(dev, RDD_START, MT_RX_SEL2,
-				 0, region);
-}
-
-int mt7996_mcu_set_chan_info(struct mt7996_phy *phy, u16 tag)
-{
-	static const u8 ch_band[] = {
-		[NL80211_BAND_2GHZ] = 0,
-		[NL80211_BAND_5GHZ] = 1,
-		[NL80211_BAND_6GHZ] = 2,
-	};
-	struct mt7996_dev *dev = phy->dev;
-	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	int freq1 = chandef->center_freq1;
-	u8 band_idx = phy->mt76->band_idx;
-	struct {
-		/* fixed field */
-		u8 __rsv[4];
-
-		__le16 tag;
-		__le16 len;
-		u8 control_ch;
-		u8 center_ch;
-		u8 bw;
-		u8 tx_path_num;
-		u8 rx_path;	/* mask or num */
-		u8 switch_reason;
-		u8 band_idx;
-		u8 center_ch2;	/* for 80+80 only */
-		__le16 cac_case;
-		u8 channel_band;
-		u8 rsv0;
-		__le32 outband_freq;
-		u8 txpower_drop;
-		u8 ap_bw;
-		u8 ap_center_ch;
-		u8 rsv1[53];
-	} __packed req = {
-		.tag = cpu_to_le16(tag),
-		.len = cpu_to_le16(sizeof(req) - 4),
-		.control_ch = chandef->chan->hw_value,
-		.center_ch = ieee80211_frequency_to_channel(freq1),
-		.bw = mt76_connac_chan_bw(chandef),
-		.tx_path_num = hweight16(phy->mt76->chainmask),
-		.rx_path = phy->mt76->chainmask >> dev->chainshift[band_idx],
-		.band_idx = band_idx,
-		.channel_band = ch_band[chandef->chan->band],
-	};
-
-	if (tag == UNI_CHANNEL_RX_PATH ||
-	    dev->mt76.hw->conf.flags & IEEE80211_CONF_MONITOR)
-		req.switch_reason = CH_SWITCH_NORMAL;
-	else if (phy->mt76->hw->conf.flags & IEEE80211_CONF_OFFCHANNEL)
-		req.switch_reason = CH_SWITCH_SCAN_BYPASS_DPD;
-	else if (!cfg80211_reg_can_beacon(phy->mt76->hw->wiphy, chandef,
-					  NL80211_IFTYPE_AP))
-		req.switch_reason = CH_SWITCH_DFS;
-	else
-		req.switch_reason = CH_SWITCH_NORMAL;
-
-	if (tag == UNI_CHANNEL_SWITCH)
-		req.rx_path = hweight8(req.rx_path);
-
-	if (chandef->width == NL80211_CHAN_WIDTH_80P80) {
-		int freq2 = chandef->center_freq2;
-
-		req.center_ch2 = ieee80211_frequency_to_channel(freq2);
-	}
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WMWA_UNI_CMD(CHANNEL_SWITCH),
-				 &req, sizeof(req), true);
-}
-
-static int mt7996_mcu_set_eeprom_flash(struct mt7996_dev *dev)
-{
-#define MAX_PAGE_IDX_MASK	GENMASK(7, 5)
-#define PAGE_IDX_MASK		GENMASK(4, 2)
-#define PER_PAGE_SIZE		0x400
-	struct mt7996_mcu_eeprom req = {
-		.tag = cpu_to_le16(UNI_EFUSE_BUFFER_MODE),
-		.buffer_mode = EE_MODE_BUFFER
-	};
-	u16 eeprom_size = MT7996_EEPROM_SIZE;
-	u8 total = DIV_ROUND_UP(eeprom_size, PER_PAGE_SIZE);
-	u8 *eep = (u8 *)dev->mt76.eeprom.data;
-	int eep_len, i;
-
-	for (i = 0; i < total; i++, eep += eep_len) {
-		struct sk_buff *skb;
-		int ret, msg_len;
-
-		if (i == total - 1 && !!(eeprom_size % PER_PAGE_SIZE))
-			eep_len = eeprom_size % PER_PAGE_SIZE;
-		else
-			eep_len = PER_PAGE_SIZE;
-
-		msg_len = sizeof(req) + eep_len;
-		skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, msg_len);
-		if (!skb)
-			return -ENOMEM;
-
-		req.len = cpu_to_le16(msg_len - 4);
-		req.format = FIELD_PREP(MAX_PAGE_IDX_MASK, total - 1) |
-			     FIELD_PREP(PAGE_IDX_MASK, i) | EE_FORMAT_WHOLE;
-		req.buf_len = cpu_to_le16(eep_len);
-
-		skb_put_data(skb, &req, sizeof(req));
-		skb_put_data(skb, eep, eep_len);
-
-		ret = mt76_mcu_skb_send_msg(&dev->mt76, skb,
-					    MCU_WM_UNI_CMD(EFUSE_CTRL), true);
-		if (ret)
-			return ret;
-	}
-
-	return 0;
-}
-
-int mt7996_mcu_set_eeprom(struct mt7996_dev *dev)
-{
-	struct mt7996_mcu_eeprom req = {
-		.tag = cpu_to_le16(UNI_EFUSE_BUFFER_MODE),
-		.len = cpu_to_le16(sizeof(req) - 4),
-		.buffer_mode = EE_MODE_EFUSE,
-		.format = EE_FORMAT_WHOLE
-	};
-
-	if (dev->flash_mode)
-		return mt7996_mcu_set_eeprom_flash(dev);
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(EFUSE_CTRL),
-				 &req, sizeof(req), true);
-}
-
-int mt7996_mcu_get_eeprom(struct mt7996_dev *dev, u32 offset)
-{
-	struct {
-		u8 _rsv[4];
-
-		__le16 tag;
-		__le16 len;
-		__le32 addr;
-		__le32 valid;
-		u8 data[16];
-	} __packed req = {
-		.tag = cpu_to_le16(UNI_EFUSE_ACCESS),
-		.len = cpu_to_le16(sizeof(req) - 4),
-		.addr = cpu_to_le32(round_down(offset,
-				    MT7996_EEPROM_BLOCK_SIZE)),
-	};
-	struct sk_buff *skb;
-	bool valid;
-	int ret;
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_WM_UNI_CMD_QUERY(EFUSE_CTRL), &req,
-					sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	valid = le32_to_cpu(*(__le32 *)(skb->data + 16));
-	if (valid) {
-		u32 addr = le32_to_cpu(*(__le32 *)(skb->data + 12));
-		u8 *buf = (u8 *)dev->mt76.eeprom.data + addr;
-
-		skb_pull(skb, 64);
-		memcpy(buf, skb->data, MT7996_EEPROM_BLOCK_SIZE);
-	}
-
-	dev_kfree_skb(skb);
-
-	return 0;
-}
-
-int mt7996_mcu_get_eeprom_free_block(struct mt7996_dev *dev, u8 *block_num)
-{
-	struct {
-		u8 _rsv[4];
-
-		__le16 tag;
-		__le16 len;
-		u8 num;
-		u8 version;
-		u8 die_idx;
-		u8 _rsv2;
-	} __packed req = {
-		.tag = cpu_to_le16(UNI_EFUSE_FREE_BLOCK),
-		.len = cpu_to_le16(sizeof(req) - 4),
-		.version = 2,
-	};
-	struct sk_buff *skb;
-	int ret;
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_WM_UNI_CMD_QUERY(EFUSE_CTRL), &req,
-					sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	*block_num = *(u8 *)(skb->data + 8);
-	dev_kfree_skb(skb);
-
-	return 0;
-}
-
-int mt7996_mcu_get_chan_mib_info(struct mt7996_phy *phy, bool chan_switch)
-{
-	struct {
-		struct {
-			u8 band;
-			u8 __rsv[3];
-		} hdr;
-		struct {
-			__le16 tag;
-			__le16 len;
-			__le32 offs;
-		} data[4];
-	} __packed req = {
-		.hdr.band = phy->mt76->band_idx,
-	};
-	/* strict order */
-	static const u32 offs[] = {
-		UNI_MIB_TX_TIME,
-		UNI_MIB_RX_TIME,
-		UNI_MIB_OBSS_AIRTIME,
-		UNI_MIB_NON_WIFI_TIME,
-	};
-	struct mt76_channel_state *state = phy->mt76->chan_state;
-	struct mt76_channel_state *state_ts = &phy->state_ts;
-	struct mt7996_dev *dev = phy->dev;
-	struct mt7996_mcu_mib *res;
-	struct sk_buff *skb;
-	int i, ret;
-
-	for (i = 0; i < 4; i++) {
-		req.data[i].tag = cpu_to_le16(UNI_CMD_MIB_DATA);
-		req.data[i].len = cpu_to_le16(sizeof(req.data[i]));
-		req.data[i].offs = cpu_to_le32(offs[i]);
-	}
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_WM_UNI_CMD_QUERY(GET_MIB_INFO),
-					&req, sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	skb_pull(skb, sizeof(req.hdr));
-
-	res = (struct mt7996_mcu_mib *)(skb->data);
-
-	if (chan_switch)
-		goto out;
-
-#define __res_u64(s) le64_to_cpu(res[s].data)
-	state->cc_tx += __res_u64(1) - state_ts->cc_tx;
-	state->cc_bss_rx += __res_u64(2) - state_ts->cc_bss_rx;
-	state->cc_rx += __res_u64(2) + __res_u64(3) - state_ts->cc_rx;
-	state->cc_busy += __res_u64(0) + __res_u64(1) + __res_u64(2) + __res_u64(3) -
-			  state_ts->cc_busy;
-
-out:
-	state_ts->cc_tx = __res_u64(1);
-	state_ts->cc_bss_rx = __res_u64(2);
-	state_ts->cc_rx = __res_u64(2) + __res_u64(3);
-	state_ts->cc_busy = __res_u64(0) + __res_u64(1) + __res_u64(2) + __res_u64(3);
-#undef __res_u64
-
-	dev_kfree_skb(skb);
-
-	return 0;
-}
-
-int mt7996_mcu_set_ser(struct mt7996_dev *dev, u8 action, u8 set, u8 band)
-{
-	struct {
-		u8 action;
-		u8 set;
-		u8 band;
-		u8 rsv;
-	} req = {
-		.action = action,
-		.set = set,
-		.band = band,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(SET_SER_TRIGGER),
-				 &req, sizeof(req), false);
-}
-
-int mt7996_mcu_set_txbf(struct mt7996_dev *dev, u8 action)
-{
-#define MT7996_BF_MAX_SIZE	sizeof(union bf_tag_tlv)
-#define BF_PROCESSING	4
-	struct uni_header hdr;
-	struct sk_buff *skb;
-	struct tlv *tlv;
-	int len = sizeof(hdr) + MT7996_BF_MAX_SIZE;
-
-	memset(&hdr, 0, sizeof(hdr));
-
-	skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, len);
-	if (!skb)
-		return -ENOMEM;
-
-	skb_put_data(skb, &hdr, sizeof(hdr));
-
-	switch (action) {
-	case BF_SOUNDING_ON: {
-		struct bf_sounding_on *req_snd_on;
-
-		tlv = mt7996_mcu_add_uni_tlv(skb, action, sizeof(*req_snd_on));
-		req_snd_on = (struct bf_sounding_on *)tlv;
-		req_snd_on->snd_mode = BF_PROCESSING;
-		break;
-	}
-	case BF_HW_EN_UPDATE: {
-		struct bf_hw_en_status_update *req_hw_en;
-
-		tlv = mt7996_mcu_add_uni_tlv(skb, action, sizeof(*req_hw_en));
-		req_hw_en = (struct bf_hw_en_status_update *)tlv;
-		req_hw_en->ebf = true;
-		req_hw_en->ibf = dev->ibf;
-		break;
-	}
-	case BF_MOD_EN_CTRL: {
-		struct bf_mod_en_ctrl *req_mod_en;
-
-		tlv = mt7996_mcu_add_uni_tlv(skb, action, sizeof(*req_mod_en));
-		req_mod_en = (struct bf_mod_en_ctrl *)tlv;
-		req_mod_en->bf_num = 2;
-		req_mod_en->bf_bitmap = GENMASK(0, 0);
-		break;
-	}
-	default:
-		return -EINVAL;
-	}
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb, MCU_WM_UNI_CMD(BF), true);
-}
-
-int mt7996_mcu_add_obss_spr(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-			    bool enable)
-{
-#define MT_SPR_ENABLE		1
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct {
-		u8 dbdc_idx;
-		u8 __rsv[3];
-
-		__le16 tag;
-		__le16 len;
-		__le32 val;
-	} __packed req = {
-		.dbdc_idx = mvif->mt76.band_idx,
-		.tag = cpu_to_le16(UNI_CMD_SR_ENABLE),
-		.len = cpu_to_le16(sizeof(req) - 4),
-		.val = cpu_to_le32(enable),
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(SR),
-				 &req, sizeof(req), true);
-}
-
-int mt7996_mcu_get_rx_rate(struct mt7996_phy *phy, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta, struct rate_info *rate)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_sta *msta = (struct mt7996_sta *)sta->drv_priv;
-	struct mt7996_dev *dev = phy->dev;
-	struct mt76_phy *mphy = phy->mt76;
-	struct {
-		u8 category;
-		u8 band;
-		__le16 wcid;
-	} __packed req = {
-		.category = MCU_PHY_STATE_CONTENTION_RX_RATE,
-		.band = mvif->mt76.band_idx,
-		.wcid = cpu_to_le16(msta->wcid.idx),
-	};
-	struct ieee80211_supported_band *sband;
-	struct mt7996_mcu_phy_rx_info *res;
-	struct sk_buff *skb;
-	int ret;
-	bool cck = false;
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_CMD(PHY_STAT_INFO),
-					&req, sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	res = (struct mt7996_mcu_phy_rx_info *)skb->data;
-
-	rate->mcs = res->rate;
-	rate->nss = res->nsts + 1;
-
-	switch (res->mode) {
-	case MT_PHY_TYPE_CCK:
-		cck = true;
-		fallthrough;
-	case MT_PHY_TYPE_OFDM:
-		if (mphy->chandef.chan->band == NL80211_BAND_5GHZ)
-			sband = &mphy->sband_5g.sband;
-		else if (mphy->chandef.chan->band == NL80211_BAND_6GHZ)
-			sband = &mphy->sband_6g.sband;
-		else
-			sband = &mphy->sband_2g.sband;
-
-		rate->mcs = mt76_get_rate(&dev->mt76, sband, rate->mcs, cck);
-		rate->legacy = sband->bitrates[rate->mcs].bitrate;
-		break;
-	case MT_PHY_TYPE_HT:
-	case MT_PHY_TYPE_HT_GF:
-		if (rate->mcs > 31) {
-			ret = -EINVAL;
-			goto out;
-		}
-
-		rate->flags = RATE_INFO_FLAGS_MCS;
-		if (res->gi)
-			rate->flags |= RATE_INFO_FLAGS_SHORT_GI;
-		break;
-	case MT_PHY_TYPE_VHT:
-		if (rate->mcs > 9) {
-			ret = -EINVAL;
-			goto out;
-		}
-
-		rate->flags = RATE_INFO_FLAGS_VHT_MCS;
-		if (res->gi)
-			rate->flags |= RATE_INFO_FLAGS_SHORT_GI;
-		break;
-	case MT_PHY_TYPE_HE_SU:
-	case MT_PHY_TYPE_HE_EXT_SU:
-	case MT_PHY_TYPE_HE_TB:
-	case MT_PHY_TYPE_HE_MU:
-		if (res->gi > NL80211_RATE_INFO_HE_GI_3_2 || rate->mcs > 11) {
-			ret = -EINVAL;
-			goto out;
-		}
-		rate->he_gi = res->gi;
-		rate->flags = RATE_INFO_FLAGS_HE_MCS;
-		break;
-	default:
-		ret = -EINVAL;
-		goto out;
-	}
-
-	switch (res->bw) {
-	case IEEE80211_STA_RX_BW_160:
-		rate->bw = RATE_INFO_BW_160;
-		break;
-	case IEEE80211_STA_RX_BW_80:
-		rate->bw = RATE_INFO_BW_80;
-		break;
-	case IEEE80211_STA_RX_BW_40:
-		rate->bw = RATE_INFO_BW_40;
-		break;
-	default:
-		rate->bw = RATE_INFO_BW_20;
-		break;
-	}
-
-out:
-	dev_kfree_skb(skb);
-
-	return ret;
-}
-
-int mt7996_mcu_update_bss_color(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-				struct cfg80211_he_bss_color *he_bss_color)
-{
-	int len = sizeof(struct bss_req_hdr) + sizeof(struct bss_color_tlv);
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct bss_color_tlv *bss_color;
-	struct sk_buff *skb;
-	struct tlv *tlv;
-
-	skb = __mt7996_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76, len);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	tlv = mt76_connac_mcu_add_tlv(skb, UNI_BSS_INFO_BSS_COLOR,
-				      sizeof(*bss_color));
-	bss_color = (struct bss_color_tlv *)tlv;
-	bss_color->enable = he_bss_color->enabled;
-	bss_color->color = he_bss_color->color;
-
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_WMWA_UNI_CMD(BSS_INFO_UPDATE), true);
-}
-
-#define TWT_AGRT_TRIGGER	BIT(0)
-#define TWT_AGRT_ANNOUNCE	BIT(1)
-#define TWT_AGRT_PROTECT	BIT(2)
-
-int mt7996_mcu_twt_agrt_update(struct mt7996_dev *dev,
-			       struct mt7996_vif *mvif,
-			       struct mt7996_twt_flow *flow,
-			       int cmd)
-{
-	struct {
-		u8 _rsv[4];
-
-		__le16 tag;
-		__le16 len;
-		u8 tbl_idx;
-		u8 cmd;
-		u8 own_mac_idx;
-		u8 flowid; /* 0xff for group id */
-		__le16 peer_id; /* specify the peer_id (msb=0)
-				 * or group_id (msb=1)
-				 */
-		u8 duration; /* 256 us */
-		u8 bss_idx;
-		__le64 start_tsf;
-		__le16 mantissa;
-		u8 exponent;
-		u8 is_ap;
-		u8 agrt_params;
-		u8 __rsv2[135];
-	} __packed req = {
-		.tag = cpu_to_le16(UNI_CMD_TWT_ARGT_UPDATE),
-		.len = cpu_to_le16(sizeof(req) - 4),
-		.tbl_idx = flow->table_id,
-		.cmd = cmd,
-		.own_mac_idx = mvif->mt76.omac_idx,
-		.flowid = flow->id,
-		.peer_id = cpu_to_le16(flow->wcid),
-		.duration = flow->duration,
-		.bss_idx = mvif->mt76.idx,
-		.start_tsf = cpu_to_le64(flow->tsf),
-		.mantissa = flow->mantissa,
-		.exponent = flow->exp,
-		.is_ap = true,
-	};
-
-	if (flow->protection)
-		req.agrt_params |= TWT_AGRT_PROTECT;
-	if (!flow->flowtype)
-		req.agrt_params |= TWT_AGRT_ANNOUNCE;
-	if (flow->trigger)
-		req.agrt_params |= TWT_AGRT_TRIGGER;
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(TWT),
-				 &req, sizeof(req), true);
-}
-
-
-void mt7996_mcu_set_pm(void *priv, u8 *mac, struct ieee80211_vif *vif)
-{
-#define EXIT_PM_STATE	0
-#define ENTER_PM_STATE	1
-	struct ieee80211_hw *hw = priv;
-	struct mt7996_dev *dev = mt7996_hw_dev(hw);
-	struct mt7996_phy *phy = mt7996_hw_phy(hw);
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct bss_power_save *ps;
-	struct sk_buff *skb;
-	struct tlv *tlv;
-	bool running = test_bit(MT76_STATE_RUNNING, &phy->mt76->state);
-
-	skb = __mt7996_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
-					 MT7996_BSS_UPDATE_MAX_SIZE);
-	if (IS_ERR(skb))
-		return;
-
-	tlv = mt7996_mcu_add_uni_tlv(skb, UNI_BSS_INFO_PS, sizeof(*ps));
-	ps = (struct bss_power_save *)tlv;
-	ps->profile = running ? EXIT_PM_STATE : ENTER_PM_STATE;
-
-	mt76_mcu_skb_send_msg(&dev->mt76, skb,
-			      MCU_WMWA_UNI_CMD(BSS_INFO_UPDATE), true);
-}
-
-int mt7996_mcu_set_rts_thresh(struct mt7996_phy *phy, u32 val)
-{
-	struct {
-		u8 band_idx;
-		u8 _rsv[3];
-
-		__le16 tag;
-		__le16 len;
-		__le32 len_thresh;
-		__le32 pkt_thresh;
-	} __packed req = {
-		.band_idx = phy->mt76->band_idx,
-		.tag = cpu_to_le16(UNI_BAND_CONFIG_RTS_THRESHOLD),
-		.len = cpu_to_le16(sizeof(req) - 4),
-		.len_thresh = cpu_to_le32(val),
-		.pkt_thresh = cpu_to_le32(0x2),
-	};
-
-	return mt76_mcu_send_msg(&phy->dev->mt76, MCU_WM_UNI_CMD(BAND_CONFIG),
-				 &req, sizeof(req), true);
-}
-
-int mt7996_mcu_set_radio_en(struct mt7996_phy *phy, bool enable)
-{
-	struct {
-		u8 band_idx;
-		u8 _rsv[3];
-
-		__le16 tag;
-		__le16 len;
-		u8 enable;
-		u8 _rsv2[3];
-	} __packed req = {
-		.band_idx = phy->mt76->band_idx,
-		.tag = cpu_to_le16(UNI_BAND_CONFIG_RADIO_ENABLE),
-		.len = cpu_to_le16(sizeof(req) - 4),
-		.enable = enable,
-	};
-
-	return mt76_mcu_send_msg(&phy->dev->mt76, MCU_WM_UNI_CMD(BAND_CONFIG),
-				 &req, sizeof(req), true);
-}
-
-int mt7996_mcu_rdd_cmd(struct mt7996_dev *dev, int cmd, u8 index,
-		      u8 rx_sel, u8 val)
-{
-	struct {
-		u8 _rsv[4];
-
-		__le16 tag;
-		__le16 len;
-
-		u8 ctrl;
-		u8 rdd_idx;
-		u8 rdd_rx_sel;
-		u8 val;
-		u8 rsv[4];
-	} __packed req = {
-		.tag = cpu_to_le16(UNI_RDD_CTRL_PARM),
-		.len = cpu_to_le16(sizeof(req) - 4),
-		.ctrl = cmd,
-		.rdd_idx = index,
-		.rdd_rx_sel = rx_sel,
-		.val = val,
-	};
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(RDD_CTRL),
-				 &req, sizeof(req), true);
-}
-
-int mt7996_mcu_wtbl_update_hdr_trans(struct mt7996_dev *dev,
-			struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-{
-	struct mt7996_vif *mvif = (struct mt7996_vif *)vif->drv_priv;
-	struct mt7996_sta *msta;
-	struct sk_buff *skb;
-
-	msta = sta ? (struct mt7996_sta *)sta->drv_priv : &mvif->sta;
-
-	skb = __mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
-					      &msta->wcid,
-					      MT7996_STA_UPDATE_MAX_SIZE);
-	if (IS_ERR(skb))
-		return PTR_ERR(skb);
-
-	/* starec hdr trans */
-	mt7996_mcu_sta_hdr_trans_tlv(dev, skb, vif, sta);
-	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
-				     MCU_WMWA_UNI_CMD(STA_REC_UPDATE), true);
-}
-
-int mt7996_mcu_rf_regval(struct mt7996_dev *dev, u32 regidx, u32 *val, bool set)
-{
-	struct {
-		u8 __rsv1[4];
-
-		__le16 tag;
-		__le16 len;
-		__le16 idx;
-		u8 __rsv2[2];
-		__le32 ofs;
-		__le32 data;
-	} __packed *res, req = {
-		.tag = cpu_to_le16(UNI_CMD_ACCESS_RF_REG_BASIC),
-		.len = cpu_to_le16(sizeof(req) - 4),
-
-		.idx = cpu_to_le16(u32_get_bits(regidx, GENMASK(31, 24))),
-		.ofs = cpu_to_le32(u32_get_bits(regidx, GENMASK(23, 0))),
-		.data = set ? cpu_to_le32(*val) : 0,
-	};
-	struct sk_buff *skb;
-	int ret;
-
-	if (set)
-		return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(REG_ACCESS),
-					 &req, sizeof(req), true);
-
-	ret = mt76_mcu_send_and_get_msg(&dev->mt76,
-					MCU_WM_UNI_CMD_QUERY(REG_ACCESS),
-					&req, sizeof(req), true, &skb);
-	if (ret)
-		return ret;
-
-	res = (void *)skb->data;
-	*val = le32_to_cpu(res->data);
-	dev_kfree_skb(skb);
-
-	return 0;
-}
-
-int mt7996_mcu_set_rro(struct mt7996_dev *dev, u16 tag, u8 val)
-{
-	struct {
-		u8 __rsv1[4];
-
-		__le16 tag;
-		__le16 len;
-
-		union {
-			struct {
-				u8 type;
-				u8 __rsv2[3];
-			} __packed platform_type;
-			struct {
-				u8 type;
-				u8 dest;
-				u8 __rsv2[2];
-			} __packed bypass_mode;
-			struct {
-				u8 path;
-				u8 __rsv2[3];
-			} __packed txfree_path;
-		};
-	} __packed req = {
-		.tag = cpu_to_le16(tag),
-		.len = cpu_to_le16(sizeof(req) - 4),
-	};
-
-	switch (tag) {
-	case UNI_RRO_SET_PLATFORM_TYPE:
-		req.platform_type.type = val;
-		break;
-	case UNI_RRO_SET_BYPASS_MODE:
-		req.bypass_mode.type = val;
-		break;
-	case UNI_RRO_SET_TXFREE_PATH:
-		req.txfree_path.path = val;
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(RRO), &req,
-				 sizeof(req), true);
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mcu.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mcu.h
deleted file mode 100644
index 6e00cf3..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mcu.h
+++ /dev/null
@@ -1,636 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#ifndef __MT7996_MCU_H
-#define __MT7996_MCU_H
-
-#include "../mt76_connac_mcu.h"
-
-struct mt7996_mcu_rxd {
-	__le32 rxd[8];
-
-	__le16 len;
-	__le16 pkt_type_id;
-
-	u8 eid;
-	u8 seq;
-	u8 option;
-	u8 __rsv;
-
-	u8 ext_eid;
-	u8 __rsv1[2];
-	u8 s2d_index;
-};
-
-struct mt7996_mcu_uni_event {
-	u8 cid;
-	u8 __rsv[3];
-	__le32 status; /* 0: success, others: fail */
-} __packed;
-
-struct mt7996_mcu_csa_notify {
-	struct mt7996_mcu_rxd rxd;
-
-	u8 omac_idx;
-	u8 csa_count;
-	u8 band_idx;
-	u8 rsv;
-} __packed;
-
-struct mt7996_mcu_rdd_report {
-	struct mt7996_mcu_rxd rxd;
-
-	u8 __rsv1[4];
-
-	__le16 tag;
-	__le16 len;
-
-	u8 band_idx;
-	u8 long_detected;
-	u8 constant_prf_detected;
-	u8 staggered_prf_detected;
-	u8 radar_type_idx;
-	u8 periodic_pulse_num;
-	u8 long_pulse_num;
-	u8 hw_pulse_num;
-
-	u8 out_lpn;
-	u8 out_spn;
-	u8 out_crpn;
-	u8 out_crpw;
-	u8 out_crbn;
-	u8 out_stgpn;
-	u8 out_stgpw;
-
-	u8 __rsv2;
-
-	__le32 out_pri_const;
-	__le32 out_pri_stg[3];
-	__le32 out_pri_stg_dmin;
-
-	struct {
-		__le32 start;
-		__le16 pulse_width;
-		__le16 pulse_power;
-		u8 mdrdy_flag;
-		u8 rsv[3];
-	} long_pulse[32];
-
-	struct {
-		__le32 start;
-		__le16 pulse_width;
-		__le16 pulse_power;
-		u8 mdrdy_flag;
-		u8 rsv[3];
-	} periodic_pulse[32];
-
-	struct {
-		__le32 start;
-		__le16 pulse_width;
-		__le16 pulse_power;
-		u8 sc_pass;
-		u8 sw_reset;
-		u8 mdrdy_flag;
-		u8 tx_active;
-	} hw_pulse[32];
-} __packed;
-
-struct mt7996_mcu_background_chain_ctrl {
-	u8 chan;		/* primary channel */
-	u8 central_chan;	/* central channel */
-	u8 bw;
-	u8 tx_stream;
-	u8 rx_stream;
-
-	u8 monitor_chan;	/* monitor channel */
-	u8 monitor_central_chan;/* monitor central channel */
-	u8 monitor_bw;
-	u8 monitor_tx_stream;
-	u8 monitor_rx_stream;
-
-	u8 scan_mode;		/* 0: ScanStop
-				 * 1: ScanStart
-				 * 2: ScanRunning
-				 */
-	u8 band_idx;		/* DBDC */
-	u8 monitor_scan_type;
-	u8 band;		/* 0: 2.4GHz, 1: 5GHz */
-	u8 rsv[2];
-} __packed;
-
-struct mt7996_mcu_eeprom {
-	u8 _rsv[4];
-
-	__le16 tag;
-	__le16 len;
-	u8 buffer_mode;
-	u8 format;
-	__le16 buf_len;
-} __packed;
-
-struct mt7996_mcu_phy_rx_info {
-	u8 category;
-	u8 rate;
-	u8 mode;
-	u8 nsts;
-	u8 gi;
-	u8 coding;
-	u8 stbc;
-	u8 bw;
-};
-
-struct mt7996_mcu_mib {
-	__le16 tag;
-	__le16 len;
-	__le32 offs;
-	__le64 data;
-} __packed;
-
-enum mt7996_chan_mib_offs {
-	UNI_MIB_OBSS_AIRTIME = 26,
-	UNI_MIB_NON_WIFI_TIME = 27,
-	UNI_MIB_TX_TIME = 28,
-	UNI_MIB_RX_TIME = 29
-};
-
-struct edca {
-	__le16 tag;
-	__le16 len;
-
-	u8 queue;
-	u8 set;
-	u8 cw_min;
-	u8 cw_max;
-	__le16 txop;
-	u8 aifs;
-	u8 __rsv;
-};
-
-#define MCU_PQ_ID(p, q)			(((p) << 15) | ((q) << 10))
-#define MCU_PKT_ID			0xa0
-
-enum {
-	MCU_FW_LOG_WM,
-	MCU_FW_LOG_WA,
-	MCU_FW_LOG_TO_HOST,
-	MCU_FW_LOG_RELAY = 16
-};
-
-enum {
-	MCU_TWT_AGRT_ADD,
-	MCU_TWT_AGRT_MODIFY,
-	MCU_TWT_AGRT_DELETE,
-	MCU_TWT_AGRT_TEARDOWN,
-	MCU_TWT_AGRT_GET_TSF,
-};
-
-enum {
-	MCU_WA_PARAM_CMD_QUERY,
-	MCU_WA_PARAM_CMD_SET,
-	MCU_WA_PARAM_CMD_CAPABILITY,
-	MCU_WA_PARAM_CMD_DEBUG,
-};
-
-enum {
-	MCU_WA_PARAM_PDMA_RX = 0x04,
-	MCU_WA_PARAM_CPU_UTIL = 0x0b,
-	MCU_WA_PARAM_RED = 0x0e,
-	MCU_WA_PARAM_HW_PATH_HIF_VER = 0x2f,
-};
-
-enum mcu_mmps_mode {
-	MCU_MMPS_STATIC,
-	MCU_MMPS_DYNAMIC,
-	MCU_MMPS_RSV,
-	MCU_MMPS_DISABLE,
-};
-
-struct bss_rate_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 __rsv1[4];
-	__le16 bc_trans;
-	__le16 mc_trans;
-	u8 short_preamble;
-	u8 bc_fixed_rate;
-	u8 mc_fixed_rate;
-	u8 __rsv2[1];
-} __packed;
-
-struct bss_ra_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 short_preamble;
-	u8 force_sgi;
-	u8 force_gf;
-	u8 ht_mode;
-	u8 se_off;
-	u8 antenna_idx;
-	__le16 max_phyrate;
-	u8 force_tx_streams;
-	u8 __rsv[3];
-} __packed;
-
-struct bss_rlm_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 control_channel;
-	u8 center_chan;
-	u8 center_chan2;
-	u8 bw;
-	u8 tx_streams;
-	u8 rx_streams;
-	u8 ht_op_info;
-	u8 sco;
-	u8 band;
-	u8 __rsv[3];
-} __packed;
-
-struct bss_color_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 enable;
-	u8 color;
-	u8 rsv[2];
-} __packed;
-
-struct bss_inband_discovery_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 tx_type;
-	u8 tx_mode;
-	u8 tx_interval;
-	u8 enable;
-	__le16 wcid;
-	__le16 prob_rsp_len;
-#define MAX_INBAND_FRAME_SIZE 512
-	u8 pkt[MAX_INBAND_FRAME_SIZE];
-} __packed;
-
-struct bss_bcn_content_tlv {
-	__le16 tag;
-	__le16 len;
-	__le16 tim_ie_pos;
-	__le16 csa_ie_pos;
-	__le16 bcc_ie_pos;
-	u8 enable;
-	u8 type;
-	__le16 pkt_len;
-#define MAX_BEACON_SIZE 512
-	u8 pkt[MAX_BEACON_SIZE];
-} __packed;
-
-struct bss_bcn_cntdwn_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 cnt;
-	u8 rsv[3];
-} __packed;
-
-struct bss_bcn_mbss_tlv {
-	__le16 tag;
-	__le16 len;
-	__le32 bitmap;
-#define MAX_BEACON_NUM	32
-	__le16 offset[MAX_BEACON_NUM];
-} __packed __aligned(4);
-
-struct bss_txcmd_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 txcmd_mode;
-	u8 __rsv[3];
-} __packed;
-
-struct bss_sec_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 __rsv1[2];
-	u8 cipher;
-	u8 __rsv2[1];
-} __packed;
-
-struct bss_power_save {
-	__le16 tag;
-	__le16 len;
-	u8 profile;
-	u8 _rsv[3];
-} __packed;
-
-struct bss_mld_tlv {
-	__le16 tag;
-	__le16 len;
-	u8 group_mld_id;
-	u8 own_mld_id;
-	u8 mac_addr[ETH_ALEN];
-	u8 remap_idx;
-	u8 __rsv[3];
-} __packed;
-
-struct sta_rec_ba_uni {
-	__le16 tag;
-	__le16 len;
-	u8 tid;
-	u8 ba_type;
-	u8 amsdu;
-	u8 ba_en;
-	__le16 ssn;
-	__le16 winsize;
-	u8 ba_rdd_rro;
-	u8 __rsv[3];
-} __packed;
-
-struct sec_key_uni {
-	__le16 wlan_idx;
-	u8 mgmt_prot;
-	u8 cipher_id;
-	u8 cipher_len;
-	u8 key_id;
-	u8 key_len;
-	u8 need_resp;
-	u8 key[32];
-} __packed;
-
-struct sta_rec_sec_uni {
-	__le16 tag;
-	__le16 len;
-	u8 add;
-	u8 n_cipher;
-	u8 rsv[2];
-
-	struct sec_key_uni key[2];
-} __packed;
-
-struct sta_rec_hdrt {
-	__le16 tag;
-	__le16 len;
-	u8 hdrt_mode;
-	u8 rsv[3];
-} __packed;
-
-struct sta_rec_hdr_trans {
-	__le16 tag;
-	__le16 len;
-	u8 from_ds;
-	u8 to_ds;
-	u8 dis_rx_hdr_tran;
-	u8 rsv;
-} __packed;
-
-struct hdr_trans_en {
-	__le16 tag;
-	__le16 len;
-	u8 enable;
-	u8 check_bssid;
-	u8 mode;
-	u8 __rsv;
-} __packed;
-
-struct hdr_trans_vlan {
-	__le16 tag;
-	__le16 len;
-	u8 insert_vlan;
-	u8 remove_vlan;
-	u8 tid;
-	u8 __rsv;
-} __packed;
-
-struct hdr_trans_blacklist {
-	__le16 tag;
-	__le16 len;
-	u8 idx;
-	u8 enable;
-	__le16 type;
-} __packed;
-
-struct uni_header {
-	u8 __rsv[4];
-} __packed;
-
-struct vow_rx_airtime {
-	__le16 tag;
-	__le16 len;
-
-	u8 enable;
-	u8 band;
-	u8 __rsv[2];
-} __packed;
-
-struct bf_sounding_on {
-	__le16 tag;
-	__le16 len;
-
-	u8 snd_mode;
-	u8 sta_num;
-	u8 __rsv[2];
-	__le16 wlan_id[4];
-	__le32 snd_period;
-} __packed;
-
-struct bf_hw_en_status_update {
-	__le16 tag;
-	__le16 len;
-
-	bool ebf;
-	bool ibf;
-	u8 __rsv[2];
-} __packed;
-
-struct bf_mod_en_ctrl {
-	__le16 tag;
-	__le16 len;
-
-	u8 bf_num;
-	u8 bf_bitmap;
-	u8 bf_sel[8];
-	u8 __rsv[2];
-} __packed;
-
-union bf_tag_tlv{
-	struct bf_sounding_on bf_snd;
-	struct bf_hw_en_status_update bf_hw_en;
-	struct bf_mod_en_ctrl bf_mod_en;
-};
-
-struct ra_rate {
-	__le16 wlan_idx;
-	u8 mode;
-	u8 stbc;
-	__le16 gi;
-	u8 bw;
-	u8 ldpc;
-	u8 mcs;
-	u8 nss;
-	__le16 ltf;
-	u8 spe;
-	u8 preamble;
-	u8 __rsv[2];
-} __packed;
-
-struct ra_fixed_rate {
-	__le16 tag;
-	__le16 len;
-
-	__le16 version;
-	struct ra_rate rate;
-} __packed;
-
-enum {
-	UNI_RA_FIXED_RATE = 0xf,
-};
-
-#define MT7996_HDR_TRANS_MAX_SIZE	(sizeof(struct hdr_trans_en) +	 \
-					 sizeof(struct hdr_trans_vlan) + \
-					 sizeof(struct hdr_trans_blacklist))
-
-enum {
-	UNI_HDR_TRANS_EN,
-	UNI_HDR_TRANS_VLAN,
-	UNI_HDR_TRANS_BLACKLIST,
-};
-
-enum {
-	RATE_PARAM_FIXED = 3,
-	RATE_PARAM_MMPS_UPDATE = 5,
-	RATE_PARAM_FIXED_HE_LTF = 7,
-	RATE_PARAM_FIXED_MCS,
-	RATE_PARAM_FIXED_GI = 11,
-	RATE_PARAM_AUTO = 20,
-};
-
-enum {
-	BF_SOUNDING_ON = 1,
-	BF_HW_EN_UPDATE = 17,
-	BF_MOD_EN_CTRL = 20,
-};
-
-enum {
-	CMD_BAND_NONE,
-	CMD_BAND_24G,
-	CMD_BAND_5G,
-	CMD_BAND_6G,
-};
-
-struct bss_req_hdr {
-	u8 bss_idx;
-	u8 __rsv[3];
-} __packed;
-
-enum {
-	UNI_CHANNEL_SWITCH,
-	UNI_CHANNEL_RX_PATH,
-};
-
-#define MT7996_BSS_UPDATE_MAX_SIZE	(sizeof(struct bss_req_hdr) +		\
-					 sizeof(struct mt76_connac_bss_basic_tlv) +	\
-					 sizeof(struct bss_rlm_tlv) +		\
-					 sizeof(struct bss_ra_tlv) +		\
-					 sizeof(struct bss_info_uni_he) +	\
-					 sizeof(struct bss_rate_tlv) +		\
-					 sizeof(struct bss_txcmd_tlv) +		\
-					 sizeof(struct bss_power_save) +	\
-					 sizeof(struct bss_sec_tlv) +		\
-					 sizeof(struct bss_mld_tlv))
-
-#define MT7996_STA_UPDATE_MAX_SIZE	(sizeof(struct sta_req_hdr) +		\
-					 sizeof(struct sta_rec_basic) +		\
-					 sizeof(struct sta_rec_bf) +		\
-					 sizeof(struct sta_rec_ht) +		\
-					 sizeof(struct sta_rec_he_v2) +		\
-					 sizeof(struct sta_rec_ba_uni) +	\
-					 sizeof(struct sta_rec_vht) +		\
-					 sizeof(struct sta_rec_uapsd) + 	\
-					 sizeof(struct sta_rec_amsdu) +		\
-					 sizeof(struct sta_rec_bfee) +		\
-					 sizeof(struct sta_rec_phy) +		\
-					 sizeof(struct sta_rec_ra) +		\
-					 sizeof(struct sta_rec_sec) +		\
-					 sizeof(struct sta_rec_ra_fixed) +	\
-					 sizeof(struct sta_rec_he_6g_capa) +	\
-					 sizeof(struct sta_rec_hdrt) +		\
-					 sizeof(struct sta_rec_hdr_trans) +	\
-					 sizeof(struct tlv))
-
-#define MT7996_BEACON_UPDATE_SIZE	(sizeof(struct bss_req_hdr) +		\
-					 sizeof(struct bss_bcn_content_tlv) +	\
-					 sizeof(struct bss_bcn_cntdwn_tlv) +	\
-					 sizeof(struct bss_bcn_mbss_tlv))
-
-#define MT7996_INBAND_FRAME_SIZE	(sizeof(struct bss_req_hdr) +		\
-					 sizeof(struct bss_inband_discovery_tlv))
-
-enum {
-	UNI_BAND_CONFIG_RADIO_ENABLE,
-	UNI_BAND_CONFIG_RTS_THRESHOLD = 0x08,
-};
-
-enum {
-	UNI_WSYS_CONFIG_FW_LOG_CTRL,
-	UNI_WSYS_CONFIG_FW_DBG_CTRL,
-};
-
-enum {
-	UNI_RDD_CTRL_PARM,
-};
-
-enum {
-	UNI_EFUSE_ACCESS = 1,
-	UNI_EFUSE_BUFFER_MODE,
-	UNI_EFUSE_FREE_BLOCK,
-	UNI_EFUSE_BUFFER_RD,
-};
-
-enum {
-	UNI_VOW_DRR_CTRL,
-	UNI_VOW_RX_AT_AIRTIME_EN = 0x0b,
-	UNI_VOW_RX_AT_AIRTIME_CLR_EN = 0x0e,
-};
-
-enum {
-	UNI_CMD_MIB_DATA,
-};
-
-enum {
-	UNI_POWER_OFF,
-};
-
-enum {
-	UNI_CMD_TWT_ARGT_UPDATE = 0x0,
-	UNI_CMD_TWT_MGMT_OFFLOAD,
-};
-
-enum {
-	UNI_RRO_DEL_ENTRY = 0x1,
-	UNI_RRO_SET_PLATFORM_TYPE,
-	UNI_RRO_GET_BA_SESSION_TABLE,
-	UNI_RRO_SET_BYPASS_MODE,
-	UNI_RRO_SET_TXFREE_PATH,
-};
-
-enum{
-	UNI_CMD_SR_ENABLE = 0x1,
-};
-
-enum {
-	UNI_CMD_ACCESS_REG_BASIC = 0x0,
-	UNI_CMD_ACCESS_RF_REG_BASIC,
-};
-
-enum {
-	MT7996_SEC_MODE_PLAIN,
-	MT7996_SEC_MODE_AES,
-	MT7996_SEC_MODE_SCRAMBLE,
-	MT7996_SEC_MODE_MAX,
-};
-
-#define MT7996_PATCH_SEC		GENMASK(31, 24)
-#define MT7996_PATCH_SCRAMBLE_KEY	GENMASK(15, 8)
-#define MT7996_PATCH_AES_KEY		GENMASK(7, 0)
-
-#define MT7996_SEC_ENCRYPT		BIT(0)
-#define MT7996_SEC_KEY_IDX		GENMASK(2, 1)
-#define MT7996_SEC_IV			BIT(3)
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mmio.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mmio.c
deleted file mode 100644
index b05da9b..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mmio.c
+++ /dev/null
@@ -1,386 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/pci.h>
-
-#include "mt7996.h"
-#include "mac.h"
-#include "../trace.h"
-
-static const struct __base mt7996_reg_base[] = {
-	[WF_AGG_BASE]	= { { 0x820e2000, 0x820f2000, 0x830e2000 } },
-	[WF_MIB_BASE]	= { { 0x820ed000, 0x820fd000, 0x830ed000 } },
-	[WF_TMAC_BASE]	= { { 0x820e4000, 0x820f4000, 0x830e4000 } },
-	[WF_RMAC_BASE]	= { { 0x820e5000, 0x820f5000, 0x830e5000 } },
-	[WF_ARB_BASE]	= { { 0x820e3000, 0x820f3000, 0x830e3000 } },
-	[WF_LPON_BASE]	= { { 0x820eb000, 0x820fb000, 0x830eb000 } },
-	[WF_ETBF_BASE]	= { { 0x820ea000, 0x820fa000, 0x830ea000 } },
-	[WF_DMA_BASE]	= { { 0x820e7000, 0x820f7000, 0x830e7000 } },
-};
-
-static const struct __map mt7996_reg_map[] = {
-	{ 0x54000000, 0x02000, 0x1000 }, /* WFDMA_0 (PCIE0 MCU DMA0) */
-	{ 0x55000000, 0x03000, 0x1000 }, /* WFDMA_1 (PCIE0 MCU DMA1) */
-	{ 0x56000000, 0x04000, 0x1000 }, /* WFDMA reserved */
-	{ 0x57000000, 0x05000, 0x1000 }, /* WFDMA MCU wrap CR */
-	{ 0x58000000, 0x06000, 0x1000 }, /* WFDMA PCIE1 MCU DMA0 (MEM_DMA) */
-	{ 0x59000000, 0x07000, 0x1000 }, /* WFDMA PCIE1 MCU DMA1 */
-	{ 0x820c0000, 0x08000, 0x4000 }, /* WF_UMAC_TOP (PLE) */
-	{ 0x820c8000, 0x0c000, 0x2000 }, /* WF_UMAC_TOP (PSE) */
-	{ 0x820cc000, 0x0e000, 0x1000 }, /* WF_UMAC_TOP (PP) */
-	{ 0x74030000, 0x10000, 0x1000 }, /* PCIe MAC */
-	{ 0x820e0000, 0x20000, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_CFG) */
-	{ 0x820e1000, 0x20400, 0x0200 }, /* WF_LMAC_TOP BN0 (WF_TRB) */
-	{ 0x820e2000, 0x20800, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_AGG) */
-	{ 0x820e3000, 0x20c00, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_ARB) */
-	{ 0x820e4000, 0x21000, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_TMAC) */
-	{ 0x820e5000, 0x21400, 0x0800 }, /* WF_LMAC_TOP BN0 (WF_RMAC) */
-	{ 0x820ce000, 0x21c00, 0x0200 }, /* WF_LMAC_TOP (WF_SEC) */
-	{ 0x820e7000, 0x21e00, 0x0200 }, /* WF_LMAC_TOP BN0 (WF_DMA) */
-	{ 0x820cf000, 0x22000, 0x1000 }, /* WF_LMAC_TOP (WF_PF) */
-	{ 0x820e9000, 0x23400, 0x0200 }, /* WF_LMAC_TOP BN0 (WF_WTBLOFF) */
-	{ 0x820ea000, 0x24000, 0x0200 }, /* WF_LMAC_TOP BN0 (WF_ETBF) */
-	{ 0x820eb000, 0x24200, 0x0400 }, /* WF_LMAC_TOP BN0 (WF_LPON) */
-	{ 0x820ec000, 0x24600, 0x0200 }, /* WF_LMAC_TOP BN0 (WF_INT) */
-	{ 0x820ed000, 0x24800, 0x0800 }, /* WF_LMAC_TOP BN0 (WF_MIB) */
-	{ 0x820ca000, 0x26000, 0x2000 }, /* WF_LMAC_TOP BN0 (WF_MUCOP) */
-	{ 0x820d0000, 0x30000, 0x10000 }, /* WF_LMAC_TOP (WF_WTBLON) */
-	{ 0x40000000, 0x70000, 0x10000 }, /* WF_UMAC_SYSRAM */
-	{ 0x00400000, 0x80000, 0x10000 }, /* WF_MCU_SYSRAM */
-	{ 0x00410000, 0x90000, 0x10000 }, /* WF_MCU_SYSRAM (configure register) */
-	{ 0x820f0000, 0xa0000, 0x0400 }, /* WF_LMAC_TOP BN1 (WF_CFG) */
-	{ 0x820f1000, 0xa0600, 0x0200 }, /* WF_LMAC_TOP BN1 (WF_TRB) */
-	{ 0x820f2000, 0xa0800, 0x0400 }, /* WF_LMAC_TOP BN1 (WF_AGG) */
-	{ 0x820f3000, 0xa0c00, 0x0400 }, /* WF_LMAC_TOP BN1 (WF_ARB) */
-	{ 0x820f4000, 0xa1000, 0x0400 }, /* WF_LMAC_TOP BN1 (WF_TMAC) */
-	{ 0x820f5000, 0xa1400, 0x0800 }, /* WF_LMAC_TOP BN1 (WF_RMAC) */
-	{ 0x820f7000, 0xa1e00, 0x0200 }, /* WF_LMAC_TOP BN1 (WF_DMA) */
-	{ 0x820f9000, 0xa3400, 0x0200 }, /* WF_LMAC_TOP BN1 (WF_WTBLOFF) */
-	{ 0x820fa000, 0xa4000, 0x0200 }, /* WF_LMAC_TOP BN1 (WF_ETBF) */
-	{ 0x820fb000, 0xa4200, 0x0400 }, /* WF_LMAC_TOP BN1 (WF_LPON) */
-	{ 0x820fc000, 0xa4600, 0x0200 }, /* WF_LMAC_TOP BN1 (WF_INT) */
-	{ 0x820fd000, 0xa4800, 0x0800 }, /* WF_LMAC_TOP BN1 (WF_MIB) */
-	{ 0x820cc000, 0xa5000, 0x2000 }, /* WF_LMAC_TOP BN1 (WF_MUCOP) */
-	{ 0x820c4000, 0xa8000, 0x4000 }, /* WF_LMAC_TOP BN1 (WF_MUCOP) */
-	{ 0x820b0000, 0xae000, 0x1000 }, /* [APB2] WFSYS_ON */
-	{ 0x80020000, 0xb0000, 0x10000 }, /* WF_TOP_MISC_OFF */
-	{ 0x81020000, 0xc0000, 0x10000 }, /* WF_TOP_MISC_ON */
-	{ 0x7c020000, 0xd0000, 0x10000 }, /* CONN_INFRA, wfdma */
-	{ 0x7c060000, 0xe0000, 0x10000 }, /* CONN_INFRA, conn_host_csr_top */
-	{ 0x7c000000, 0xf0000, 0x10000 }, /* CONN_INFRA */
-	{ 0x0, 0x0, 0x0 }, /* imply end of search */
-};
-
-static u32 mt7996_reg_map_l1(struct mt7996_dev *dev, u32 addr)
-{
-	u32 offset = FIELD_GET(MT_HIF_REMAP_L1_OFFSET, addr);
-	u32 base = FIELD_GET(MT_HIF_REMAP_L1_BASE, addr);
-
-	dev->reg_l1_backup = dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L1);
-	dev->bus_ops->rmw(&dev->mt76, MT_HIF_REMAP_L1,
-			  MT_HIF_REMAP_L1_MASK,
-			  FIELD_PREP(MT_HIF_REMAP_L1_MASK, base));
-	/* use read to push write */
-	dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L1);
-
-	return MT_HIF_REMAP_BASE_L1 + offset;
-}
-
-static u32 mt7996_reg_map_l2(struct mt7996_dev *dev, u32 addr)
-{
-	u32 offset = FIELD_GET(MT_HIF_REMAP_L2_OFFSET, addr);
-	u32 base = FIELD_GET(MT_HIF_REMAP_L2_BASE, addr);
-
-	dev->reg_l2_backup = dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L2);
-	dev->bus_ops->rmw(&dev->mt76, MT_HIF_REMAP_L2,
-			  MT_HIF_REMAP_L2_MASK,
-			  FIELD_PREP(MT_HIF_REMAP_L2_MASK, base));
-	/* use read to push write */
-	dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L2);
-
-	return MT_HIF_REMAP_BASE_L2 + offset;
-}
-
-static void mt7996_reg_remap_restore(struct mt7996_dev *dev)
-{
-	/* remap to ori status */
-	if (unlikely(dev->reg_l1_backup)) {
-		dev->bus_ops->wr(&dev->mt76, MT_HIF_REMAP_L1, dev->reg_l1_backup);
-		dev->reg_l1_backup = 0;
-	}
-
-	if (dev->reg_l2_backup) {
-		dev->bus_ops->wr(&dev->mt76, MT_HIF_REMAP_L2, dev->reg_l2_backup);
-		dev->reg_l2_backup = 0;
-	}
-}
-
-static u32 __mt7996_reg_addr(struct mt7996_dev *dev, u32 addr)
-{
-	int i;
-
-	mt7996_reg_remap_restore(dev);
-
-	if (addr < 0x100000)
-		return addr;
-
-	for (i = 0; i < dev->reg.map_size; i++) {
-		u32 ofs;
-
-		if (addr < dev->reg.map[i].phys)
-			continue;
-
-		ofs = addr - dev->reg.map[i].phys;
-		if (ofs > dev->reg.map[i].size)
-			continue;
-
-		return dev->reg.map[i].mapped + ofs;
-	}
-
-	if ((addr >= MT_INFRA_BASE && addr < MT_WFSYS0_PHY_START) ||
-	    (addr >= MT_WFSYS0_PHY_START && addr < MT_WFSYS1_PHY_START) ||
-	    (addr >= MT_WFSYS1_PHY_START && addr <= MT_WFSYS1_PHY_END))
-		return mt7996_reg_map_l1(dev, addr);
-
-	if (dev_is_pci(dev->mt76.dev) &&
-	    ((addr >= MT_CBTOP1_PHY_START && addr <= MT_CBTOP1_PHY_END) ||
-	     (addr >= MT_CBTOP2_PHY_START && addr <= MT_CBTOP2_PHY_END)))
-		return mt7996_reg_map_l1(dev, addr);
-
-	/* CONN_INFRA: covert to phyiscal addr and use layer 1 remap */
-	if (addr >= MT_INFRA_MCU_START && addr <= MT_INFRA_MCU_END) {
-		addr = addr - MT_INFRA_MCU_START + MT_INFRA_BASE;
-		return mt7996_reg_map_l1(dev, addr);
-	}
-
-	return mt7996_reg_map_l2(dev, addr);
-}
-
-static u32 mt7996_rr(struct mt76_dev *mdev, u32 offset)
-{
-	struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76);
-
-	return dev->bus_ops->rr(mdev, __mt7996_reg_addr(dev, offset));
-}
-
-static void mt7996_wr(struct mt76_dev *mdev, u32 offset, u32 val)
-{
-	struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76);
-
-	dev->bus_ops->wr(mdev, __mt7996_reg_addr(dev, offset), val);
-}
-
-static u32 mt7996_rmw(struct mt76_dev *mdev, u32 offset, u32 mask, u32 val)
-{
-	struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76);
-
-	return dev->bus_ops->rmw(mdev, __mt7996_reg_addr(dev, offset), mask, val);
-}
-
-static int mt7996_mmio_init(struct mt76_dev *mdev,
-			    void __iomem *mem_base,
-			    u32 device_id)
-{
-	struct mt76_bus_ops *bus_ops;
-	struct mt7996_dev *dev;
-
-	dev = container_of(mdev, struct mt7996_dev, mt76);
-	mt76_mmio_init(&dev->mt76, mem_base);
-
-	switch (device_id) {
-	case 0x7990:
-		dev->reg.base = mt7996_reg_base;
-		dev->reg.map = mt7996_reg_map;
-		dev->reg.map_size = ARRAY_SIZE(mt7996_reg_map);
-		break;
-	default:
-		return -EINVAL;
-	}
-
-	dev->bus_ops = dev->mt76.bus;
-	bus_ops = devm_kmemdup(dev->mt76.dev, dev->bus_ops, sizeof(*bus_ops),
-			       GFP_KERNEL);
-	if (!bus_ops)
-		return -ENOMEM;
-
-	bus_ops->rr = mt7996_rr;
-	bus_ops->wr = mt7996_wr;
-	bus_ops->rmw = mt7996_rmw;
-	dev->mt76.bus = bus_ops;
-
-	mdev->rev = (device_id << 16) | (mt76_rr(dev, MT_HW_REV) & 0xff);
-
-	dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
-
-	return 0;
-}
-
-void mt7996_dual_hif_set_irq_mask(struct mt7996_dev *dev, bool write_reg,
-				  u32 clear, u32 set)
-{
-	struct mt76_dev *mdev = &dev->mt76;
-	unsigned long flags;
-
-	spin_lock_irqsave(&mdev->mmio.irq_lock, flags);
-
-	mdev->mmio.irqmask &= ~clear;
-	mdev->mmio.irqmask |= set;
-
-	if (write_reg) {
-		mt76_wr(dev, MT_INT_MASK_CSR, mdev->mmio.irqmask);
-		mt76_wr(dev, MT_INT1_MASK_CSR, mdev->mmio.irqmask);
-	}
-
-	spin_unlock_irqrestore(&mdev->mmio.irq_lock, flags);
-}
-
-
-static void mt7996_rx_poll_complete(struct mt76_dev *mdev,
-				    enum mt76_rxq_id q)
-{
-	struct mt7996_dev *dev = container_of(mdev, struct mt7996_dev, mt76);
-
-	mt7996_irq_enable(dev, MT_INT_RX(q));
-}
-
-/* TODO: support 2/4/6/8 MSI-X vectors */
-static void mt7996_irq_tasklet(struct tasklet_struct *t)
-{
-	struct mt7996_dev *dev = from_tasklet(dev, t, irq_tasklet);
-	u32 i, intr, mask, intr1;
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-	if (dev->hif2)
-		mt76_wr(dev, MT_INT1_MASK_CSR, 0);
-
-	intr = mt76_rr(dev, MT_INT_SOURCE_CSR);
-	intr &= dev->mt76.mmio.irqmask;
-	mt76_wr(dev, MT_INT_SOURCE_CSR, intr);
-
-	if (dev->hif2) {
-		intr1 = mt76_rr(dev, MT_INT1_SOURCE_CSR);
-		intr1 &= dev->mt76.mmio.irqmask;
-		mt76_wr(dev, MT_INT1_SOURCE_CSR, intr1);
-
-		intr |= intr1;
-	}
-
-	trace_dev_irq(&dev->mt76, intr, dev->mt76.mmio.irqmask);
-
-	mask = intr & MT_INT_RX_DONE_ALL;
-	if (intr & MT_INT_TX_DONE_MCU)
-		mask |= MT_INT_TX_DONE_MCU;
-	mt7996_irq_disable(dev, mask);
-
-	if (intr & MT_INT_TX_DONE_MCU)
-		napi_schedule(&dev->mt76.tx_napi);
-
-	for (i = 0; i < __MT_RXQ_MAX; i++) {
-		if ((intr & MT_INT_RX(i)))
-			napi_schedule(&dev->mt76.napi[i]);
-	}
-
-	if (intr & MT_INT_MCU_CMD) {
-		u32 val = mt76_rr(dev, MT_MCU_CMD);
-
-		mt76_wr(dev, MT_MCU_CMD, val);
-		if (val & MT_MCU_CMD_ERROR_MASK) {
-			dev->reset_state = val;
-			ieee80211_queue_work(mt76_hw(dev), &dev->reset_work);
-			wake_up(&dev->reset_wait);
-		}
-	}
-}
-
-irqreturn_t mt7996_irq_handler(int irq, void *dev_instance)
-{
-	struct mt7996_dev *dev = dev_instance;
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-	if (dev->hif2)
-		mt76_wr(dev, MT_INT1_MASK_CSR, 0);
-
-	if (!test_bit(MT76_STATE_INITIALIZED, &dev->mphy.state))
-		return IRQ_NONE;
-
-	tasklet_schedule(&dev->irq_tasklet);
-
-	return IRQ_HANDLED;
-}
-
-struct mt7996_dev *mt7996_mmio_probe(struct device *pdev,
-				     void __iomem *mem_base, u32 device_id)
-{
-	static const struct mt76_driver_ops drv_ops = {
-		/* txwi_size = txd size + txp size */
-		.txwi_size = MT_TXD_SIZE + sizeof(struct mt7996_txp),
-		.drv_flags = MT_DRV_TXWI_NO_FREE |
-			     MT_DRV_HW_MGMT_TXQ,
-		.survey_flags = SURVEY_INFO_TIME_TX |
-				SURVEY_INFO_TIME_RX |
-				SURVEY_INFO_TIME_BSS_RX,
-		.token_size = MT7996_TOKEN_SIZE,
-		.tx_prepare_skb = mt7996_tx_prepare_skb,
-		.tx_complete_skb = mt7996_tx_complete_skb,
-		.rx_skb = mt7996_queue_rx_skb,
-		.rx_check = mt7996_rx_check,
-		.rx_poll_complete = mt7996_rx_poll_complete,
-		.sta_ps = mt7996_sta_ps,
-		.sta_add = mt7996_mac_sta_add,
-		.sta_remove = mt7996_mac_sta_remove,
-		.update_survey = mt7996_update_channel,
-	};
-	struct mt7996_dev *dev;
-	struct mt76_dev *mdev;
-	int ret;
-
-	mdev = mt76_alloc_device(pdev, sizeof(*dev), &mt7996_ops, &drv_ops);
-	if (!mdev)
-		return ERR_PTR(-ENOMEM);
-
-	dev = container_of(mdev, struct mt7996_dev, mt76);
-
-	ret = mt7996_mmio_init(mdev, mem_base, device_id);
-	if (ret)
-		goto error;
-
-	tasklet_setup(&dev->irq_tasklet, mt7996_irq_tasklet);
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-
-	return dev;
-
-error:
-	mt76_free_device(&dev->mt76);
-
-	return ERR_PTR(ret);
-}
-
-static int __init mt7996_init(void)
-{
-	int ret;
-
-	ret = pci_register_driver(&mt7996_hif_driver);
-	if (ret)
-		return ret;
-
-	ret = pci_register_driver(&mt7996_pci_driver);
-	if (ret)
-		pci_unregister_driver(&mt7996_hif_driver);
-
-	return ret;
-}
-
-static void __exit mt7996_exit(void)
-{
-	pci_unregister_driver(&mt7996_pci_driver);
-	pci_unregister_driver(&mt7996_hif_driver);
-}
-
-module_init(mt7996_init);
-module_exit(mt7996_exit);
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mt7996.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mt7996.h
deleted file mode 100644
index efb6bac..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/mt7996.h
+++ /dev/null
@@ -1,520 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#ifndef __MT7996_H
-#define __MT7996_H
-
-#include <linux/interrupt.h>
-#include <linux/ktime.h>
-#include "../mt76_connac.h"
-#include "regs.h"
-
-#define MT7996_MAX_INTERFACES		19
-#define MT7996_MAX_WMM_SETS		4
-#define MT7996_WTBL_SIZE		544
-#define MT7996_WTBL_RESERVED		(MT7996_WTBL_SIZE - 1)
-#define MT7996_WTBL_STA			(MT7996_WTBL_RESERVED - \
-					 MT7996_MAX_INTERFACES)
-
-#define MT7996_WATCHDOG_TIME		(HZ / 10)
-#define MT7996_RESET_TIMEOUT		(30 * HZ)
-
-#define MT7996_TX_RING_SIZE		2048
-#define MT7996_TX_MCU_RING_SIZE		256
-#define MT7996_TX_FWDL_RING_SIZE	128
-
-#define MT7996_RX_RING_SIZE		1536
-#define MT7996_RX_MCU_RING_SIZE		512
-
-#define MT7996_FIRMWARE_WA		"mediatek/mt7996_wa.bin"
-#define MT7996_FIRMWARE_WM		"mediatek/mt7996_wm.bin"
-#define MT7996_ROM_PATCH		"mediatek/mt7996_rom_patch.bin"
-
-#define MT7996_EEPROM_DEFAULT		"mediatek/mt7996_eeprom.bin"
-#define MT7996_EEPROM_SIZE		7680
-#define MT7996_EEPROM_BLOCK_SIZE	16
-#define MT7996_TOKEN_SIZE		8192
-
-#define MT7996_CFEND_RATE_DEFAULT	0x49	/* OFDM 24M */
-#define MT7996_CFEND_RATE_11B		0x03	/* 11B LP, 11M */
-
-#define MT7996_MAX_TWT_AGRT		16
-#define MT7996_MAX_STA_TWT_AGRT		8
-#define MT7996_MAX_QUEUE		(__MT_RXQ_MAX +	__MT_MCUQ_MAX + 3)
-
-struct mt7996_vif;
-struct mt7996_sta;
-struct mt7996_dfs_pulse;
-struct mt7996_dfs_pattern;
-
-enum mt7996_txq_id {
-	MT7996_TXQ_FWDL = 16,
-	MT7996_TXQ_MCU_WM,
-	MT7996_TXQ_BAND0,
-	MT7996_TXQ_BAND1,
-	MT7996_TXQ_MCU_WA,
-	MT7996_TXQ_BAND2,
-};
-
-enum mt7996_rxq_id {
-	MT7996_RXQ_MCU_WM = 0,
-	MT7996_RXQ_MCU_WA,
-	MT7996_RXQ_MCU_WA_MAIN = 2,
-	MT7996_RXQ_MCU_WA_EXT = 2,/* unused */
-	MT7996_RXQ_MCU_WA_TRI = 3,
-	MT7996_RXQ_BAND0 = 4,
-	MT7996_RXQ_BAND1 = 4,/* unused */
-	MT7996_RXQ_BAND2 = 5,
-	MT7996_RXQ_TXFREE0 = 9,
-	MT7996_RXQ_TXFREE1 = 9,
-	MT7996_RXQ_TXFREE2 = 7,
-};
-
-struct mt7996_twt_flow {
-	struct list_head list;
-	u64 start_tsf;
-	u64 tsf;
-	u32 duration;
-	u16 wcid;
-	__le16 mantissa;
-	u8 exp;
-	u8 table_id;
-	u8 id;
-	u8 protection:1;
-	u8 flowtype:1;
-	u8 trigger:1;
-	u8 sched:1;
-};
-
-struct mt7996_sta {
-	struct mt76_wcid wcid; /* must be first */
-
-	struct mt7996_vif *vif;
-
-	struct list_head poll_list;
-	struct list_head rc_list;
-	u32 airtime_ac[8];
-
-	unsigned long changed;
-	unsigned long jiffies;
-	unsigned long ampdu_state;
-
-	struct mt76_sta_stats stats;
-
-	struct mt76_connac_sta_key_conf bip;
-
-	struct {
-		u8 flowid_mask;
-		struct mt7996_twt_flow flow[MT7996_MAX_STA_TWT_AGRT];
-	} twt;
-};
-
-struct mt7996_vif_cap {
-	bool ht_ldpc:1;
-	bool vht_ldpc:1;
-	bool he_ldpc:1;
-	bool vht_su_ebfer:1;
-	bool vht_su_ebfee:1;
-	bool vht_mu_ebfer:1;
-	bool vht_mu_ebfee:1;
-	bool he_su_ebfer:1;
-	bool he_su_ebfee:1;
-	bool he_mu_ebfer:1;
-};
-
-struct mt7996_vif {
-	struct mt76_vif mt76; /* must be first */
-
-	struct mt7996_vif_cap cap;
-	struct mt7996_sta sta;
-	struct mt7996_phy *phy;
-
-	struct ieee80211_tx_queue_params queue_params[IEEE80211_NUM_ACS];
-	struct cfg80211_bitrate_mask bitrate_mask;
-};
-
-/* per-phy stats.  */
-struct mib_stats {
-	u32 ack_fail_cnt;
-	u32 fcs_err_cnt;
-	u32 rts_cnt;
-	u32 rts_retries_cnt;
-	u32 ba_miss_cnt;
-	u32 tx_mu_bf_cnt;
-	u32 tx_mu_mpdu_cnt;
-	u32 tx_mu_acked_mpdu_cnt;
-	u32 tx_su_acked_mpdu_cnt;
-	u32 tx_bf_ibf_ppdu_cnt;
-	u32 tx_bf_ebf_ppdu_cnt;
-
-	u32 tx_bf_rx_fb_all_cnt;
-	u32 tx_bf_rx_fb_eht_cnt;
-	u32 tx_bf_rx_fb_he_cnt;
-	u32 tx_bf_rx_fb_vht_cnt;
-	u32 tx_bf_rx_fb_ht_cnt;
-
-	u32 tx_bf_rx_fb_bw; /* value of last sample, not cumulative */
-	u32 tx_bf_rx_fb_nc_cnt;
-	u32 tx_bf_rx_fb_nr_cnt;
-	u32 tx_bf_fb_cpl_cnt;
-	u32 tx_bf_fb_trig_cnt;
-
-	u32 tx_ampdu_cnt;
-	u32 tx_stop_q_empty_cnt;
-	u32 tx_mpdu_attempts_cnt;
-	u32 tx_mpdu_success_cnt;
-        /* BF counter is PPDU-based, so remove MPDU-based BF counter */
-
-	u32 tx_rwp_fail_cnt;
-	u32 tx_rwp_need_cnt;
-
-	/* rx stats */
-	u32 rx_fifo_full_cnt;
-	u32 channel_idle_cnt;
-	u32 rx_vector_mismatch_cnt;
-	u32 rx_delimiter_fail_cnt;
-	u32 rx_len_mismatch_cnt;
-	u32 rx_mpdu_cnt;
-	u32 rx_ampdu_cnt;
-	u32 rx_ampdu_bytes_cnt;
-	u32 rx_ampdu_valid_subframe_cnt;
-	u32 rx_ampdu_valid_subframe_bytes_cnt;
-	u32 rx_pfdrop_cnt;
-	u32 rx_vec_queue_overflow_drop_cnt;
-	u32 rx_ba_cnt;
-
-	u32 tx_amsdu[8];
-	u32 tx_amsdu_cnt;
-};
-
-struct mt7996_hif {
-	struct list_head list;
-
-	struct device *dev;
-	void __iomem *regs;
-	int irq;
-};
-
-struct mt7996_phy {
-	struct mt76_phy *mt76;
-	struct mt7996_dev *dev;
-
-	struct ieee80211_sband_iftype_data iftype[NUM_NL80211_BANDS][NUM_NL80211_IFTYPES];
-
-	struct ieee80211_vif *monitor_vif;
-
-	u32 rxfilter;
-	u64 omac_mask;
-
-	u16 noise;
-
-	s16 coverage_class;
-	u8 slottime;
-
-	u8 rdd_state;
-
-	u32 rx_ampdu_ts;
-	u32 ampdu_ref;
-
-	struct mib_stats mib;
-	struct mt76_channel_state state_ts;
-};
-
-struct mt7996_dev {
-	union { /* must be first */
-		struct mt76_dev mt76;
-		struct mt76_phy mphy;
-	};
-
-	struct mt7996_hif *hif2;
-	struct mt7996_reg_desc reg;
-	u8 q_id[MT7996_MAX_QUEUE];
-	u32 q_int_mask[MT7996_MAX_QUEUE];
-	u32 q_wfdma_mask;
-
-	const struct mt76_bus_ops *bus_ops;
-	struct tasklet_struct irq_tasklet;
-	struct mt7996_phy phy;
-
-	/* monitor rx chain configured channel */
-	struct cfg80211_chan_def rdd2_chandef;
-	struct mt7996_phy *rdd2_phy;
-
-	u16 chainmask;
-	u8 chainshift[__MT_MAX_BAND];
-	u32 hif_idx;
-
-	struct work_struct init_work;
-	struct work_struct rc_work;
-	struct work_struct reset_work;
-	wait_queue_head_t reset_wait;
-	u32 reset_state;
-
-	struct list_head sta_rc_list;
-	struct list_head sta_poll_list;
-	struct list_head twt_list;
-	spinlock_t sta_poll_lock;
-
-	u32 hw_pattern;
-
-	bool dbdc_support:1;
-	bool tbtc_support:1;
-	bool flash_mode:1;
-
-	bool ibf;
-	u8 fw_debug_wm;
-	u8 fw_debug_wa;
-	u8 fw_debug_bin;
-	u16 fw_debug_seq;
-
-	struct dentry *debugfs_dir;
-	struct rchan *relay_fwlog;
-
-	struct {
-		u8 table_mask;
-		u8 n_agrt;
-	} twt;
-
-	u32 reg_l1_backup;
-	u32 reg_l2_backup;
-};
-
-enum {
-	WFDMA0 = 0x0,
-	WFDMA1,
-	WFDMA_EXT,
-	__MT_WFDMA_MAX,
-};
-
-enum {
-	MT_CTX0,
-	MT_HIF0 = 0x0,
-
-	MT_LMAC_AC00 = 0x0,
-	MT_LMAC_AC01,
-	MT_LMAC_AC02,
-	MT_LMAC_AC03,
-	MT_LMAC_ALTX0 = 0x10,
-	MT_LMAC_BMC0,
-	MT_LMAC_BCN0,
-	MT_LMAC_PSMP0,
-};
-
-enum {
-	MT_RX_SEL0,
-	MT_RX_SEL1,
-	MT_RX_SEL2, /* monitor chain */
-};
-
-enum mt7996_rdd_cmd {
-	RDD_STOP,
-	RDD_START,
-	RDD_DET_MODE,
-	RDD_RADAR_EMULATE,
-	RDD_START_TXQ = 20,
-	RDD_CAC_START = 50,
-	RDD_CAC_END,
-	RDD_NORMAL_START,
-	RDD_DISABLE_DFS_CAL,
-	RDD_PULSE_DBG,
-	RDD_READ_PULSE,
-	RDD_RESUME_BF,
-	RDD_IRQ_OFF,
-};
-
-static inline struct mt7996_phy *
-mt7996_hw_phy(struct ieee80211_hw *hw)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	return phy->priv;
-}
-
-static inline struct mt7996_dev *
-mt7996_hw_dev(struct ieee80211_hw *hw)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	return container_of(phy->dev, struct mt7996_dev, mt76);
-}
-
-static inline struct mt7996_phy *
-__mt7996_phy(struct mt7996_dev *dev, enum mt76_band_id band)
-{
-	struct mt76_phy *phy = dev->mt76.phys[band];
-
-	if (!phy)
-		return NULL;
-
-	return phy->priv;
-}
-
-static inline struct mt7996_phy *
-mt7996_phy2(struct mt7996_dev *dev)
-{
-	return __mt7996_phy(dev, MT_BAND1);
-}
-
-static inline struct mt7996_phy *
-mt7996_phy3(struct mt7996_dev *dev)
-{
-	return __mt7996_phy(dev, MT_BAND2);
-}
-
-extern const struct ieee80211_ops mt7996_ops;
-extern struct pci_driver mt7996_pci_driver;
-extern struct pci_driver mt7996_hif_driver;
-
-struct mt7996_dev *mt7996_mmio_probe(struct device *pdev,
-				     void __iomem *mem_base, u32 device_id);
-void mt7996_wfsys_reset(struct mt7996_dev *dev);
-irqreturn_t mt7996_irq_handler(int irq, void *dev_instance);
-u64 __mt7996_get_tsf(struct ieee80211_hw *hw, struct mt7996_vif *mvif);
-int mt7996_register_device(struct mt7996_dev *dev);
-void mt7996_unregister_device(struct mt7996_dev *dev);
-int mt7996_eeprom_init(struct mt7996_dev *dev);
-int mt7996_eeprom_parse_hw_cap(struct mt7996_dev *dev, struct mt7996_phy *phy);
-int mt7996_eeprom_get_target_power(struct mt7996_dev *dev,
-				   struct ieee80211_channel *chan);
-s8 mt7996_eeprom_get_power_delta(struct mt7996_dev *dev, int band);
-int mt7996_dma_init(struct mt7996_dev *dev);
-void mt7996_dma_prefetch(struct mt7996_dev *dev);
-void mt7996_dma_cleanup(struct mt7996_dev *dev);
-int mt7996_mcu_init(struct mt7996_dev *dev);
-int mt7996_mcu_twt_agrt_update(struct mt7996_dev *dev,
-			       struct mt7996_vif *mvif,
-			       struct mt7996_twt_flow *flow,
-			       int cmd);
-int mt7996_mcu_add_dev_info(struct mt7996_phy *phy,
-			    struct ieee80211_vif *vif, bool enable);
-int mt7996_mcu_add_bss_info(struct mt7996_phy *phy,
-			    struct ieee80211_vif *vif, int enable);
-int mt7996_mcu_add_sta(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta, bool enable);
-int mt7996_mcu_add_tx_ba(struct mt7996_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool add);
-int mt7996_mcu_add_rx_ba(struct mt7996_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool add);
-int mt7996_mcu_update_bss_color(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-				struct cfg80211_he_bss_color *he_bss_color);
-int mt7996_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			  int enable);
-int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev,
-				    struct ieee80211_vif *vif, u32 changed);
-int mt7996_mcu_add_obss_spr(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-                            bool enable);
-int mt7996_mcu_add_rate_ctrl(struct mt7996_dev *dev, struct ieee80211_vif *vif,
-			     struct ieee80211_sta *sta, bool changed);
-int mt7996_set_channel(struct mt7996_phy *phy);
-int mt7996_mcu_set_chan_info(struct mt7996_phy *phy, u16 tag);
-int mt7996_mcu_set_tx(struct mt7996_dev *dev, struct ieee80211_vif *vif);
-int mt7996_mcu_set_fixed_rate_ctrl(struct mt7996_dev *dev,
-				   void *data, u16 version);
-int mt7996_mcu_set_eeprom(struct mt7996_dev *dev);
-int mt7996_mcu_get_eeprom(struct mt7996_dev *dev, u32 offset);
-int mt7996_mcu_get_eeprom_free_block(struct mt7996_dev *dev, u8 *block_num);
-int mt7996_mcu_set_ser(struct mt7996_dev *dev, u8 action, u8 set, u8 band);
-int mt7996_mcu_set_txbf(struct mt7996_dev *dev, u8 action);
-int mt7996_mcu_set_fcc5_lpn(struct mt7996_dev *dev, int val);
-int mt7996_mcu_set_pulse_th(struct mt7996_dev *dev,
-			    const struct mt7996_dfs_pulse *pulse);
-int mt7996_mcu_set_radar_th(struct mt7996_dev *dev, int index,
-			    const struct mt7996_dfs_pattern *pattern);
-int mt7996_mcu_set_radio_en(struct mt7996_phy *phy, bool enable);
-void mt7996_mcu_set_pm(void *priv, u8 *mac, struct ieee80211_vif *vif);
-int mt7996_mcu_set_rts_thresh(struct mt7996_phy *phy, u32 val);
-int mt7996_mcu_get_chan_mib_info(struct mt7996_phy *phy, bool chan_switch);
-int mt7996_mcu_get_rx_rate(struct mt7996_phy *phy, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta, struct rate_info *rate);
-int mt7996_mcu_rdd_cmd(struct mt7996_dev *dev, int cmd, u8 index,
-		      u8 rx_sel, u8 val);
-int mt7996_mcu_rdd_background_enable(struct mt7996_phy *phy,
-				     struct cfg80211_chan_def *chandef);
-int mt7996_mcu_rf_regval(struct mt7996_dev *dev, u32 regidx, u32 *val, bool set);
-int mt7996_mcu_set_hdr_trans(struct mt7996_dev *dev, bool hdr_trans);
-int mt7996_mcu_set_rro(struct mt7996_dev *dev, u16 tag, u8 val);
-int mt7996_mcu_wa_cmd(struct mt7996_dev *dev, int cmd, u32 a1, u32 a2, u32 a3);
-int mt7996_mcu_fw_log_2_host(struct mt7996_dev *dev, u8 type, u8 ctrl);
-int mt7996_mcu_fw_dbg_ctrl(struct mt7996_dev *dev, u32 module, u8 level);
-void mt7996_mcu_rx_event(struct mt7996_dev *dev, struct sk_buff *skb);
-void mt7996_mcu_exit(struct mt7996_dev *dev);
-
-void mt7996_dual_hif_set_irq_mask(struct mt7996_dev *dev, bool write_reg,
-			     u32 clear, u32 set);
-
-static inline void mt7996_irq_enable(struct mt7996_dev *dev, u32 mask)
-{
-	if (dev->hif2)
-		mt7996_dual_hif_set_irq_mask(dev, false, 0, mask);
-	else
-		mt76_set_irq_mask(&dev->mt76, 0, 0, mask);
-
-	tasklet_schedule(&dev->irq_tasklet);
-}
-
-static inline void mt7996_irq_disable(struct mt7996_dev *dev, u32 mask)
-{
-	if (dev->hif2)
-		mt7996_dual_hif_set_irq_mask(dev, true, mask, 0);
-	else
-		mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, mask, 0);
-}
-
-u32 mt7996_mac_wtbl_lmac_addr(struct mt7996_dev *dev, u16 wcid, u8 dw);
-bool mt7996_mac_wtbl_update(struct mt7996_dev *dev, int idx, u32 mask);
-void mt7996_mac_reset_counters(struct mt7996_phy *phy);
-void mt7996_mac_cca_stats_reset(struct mt7996_phy *phy);
-void mt7996_mac_enable_nf(struct mt7996_dev *dev, u8 band);
-void mt7996_mac_write_txwi(struct mt7996_dev *dev, __le32 *txwi,
-			   struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
-			   struct ieee80211_key_conf *key, u32 changed);
-void mt7996_mac_set_timing(struct mt7996_phy *phy);
-int mt7996_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta);
-void mt7996_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta);
-void mt7996_mac_work(struct work_struct *work);
-void mt7996_mac_reset_work(struct work_struct *work);
-void mt7996_mac_sta_rc_work(struct work_struct *work);
-void mt7996_mac_update_stats(struct mt7996_phy *phy);
-void mt7996_mac_twt_teardown_flow(struct mt7996_dev *dev,
-				  struct mt7996_sta *msta,
-				  u8 flowid);
-void mt7996_mac_add_twt_setup(struct ieee80211_hw *hw,
-			      struct ieee80211_sta *sta,
-			      struct ieee80211_twt_setup *twt);
-int mt7996_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
-			  enum mt76_txq_id qid, struct mt76_wcid *wcid,
-			  struct ieee80211_sta *sta,
-			  struct mt76_tx_info *tx_info);
-void mt7996_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e);
-void mt7996_tx_token_put(struct mt7996_dev *dev);
-void mt7996_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			 struct sk_buff *skb);
-bool mt7996_rx_check(struct mt76_dev *mdev, void *data, int len);
-void mt7996_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps);
-void mt7996_stats_work(struct work_struct *work);
-int mt76_dfs_start_rdd(struct mt7996_dev *dev, bool force);
-int mt7996_dfs_init_radar_detector(struct mt7996_phy *phy);
-void mt7996_set_stream_he_caps(struct mt7996_phy *phy);
-void mt7996_set_stream_vht_txbf_caps(struct mt7996_phy *phy);
-void mt7996_update_channel(struct mt76_phy *mphy);
-int mt7996_init_debugfs(struct mt7996_phy *phy);
-void mt7996_debugfs_rx_fw_monitor(struct mt7996_dev *dev, const void *data, int len);
-bool mt7996_debugfs_rx_log(struct mt7996_dev *dev, const void *data, int len);
-int mt7996_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif,
-		      struct mt76_connac_sta_key_conf *sta_key_conf,
-		      struct ieee80211_key_conf *key, int mcu_cmd,
-		      struct mt76_wcid *wcid, enum set_key_cmd cmd);
-int mt7996_mcu_wtbl_update_hdr_trans(struct mt7996_dev *dev,
-			struct ieee80211_vif *vif, struct ieee80211_sta *sta);
-#ifdef CONFIG_MAC80211_DEBUGFS
-void mt7996_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			    struct ieee80211_sta *sta, struct dentry *dir);
-#endif
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/pci.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/pci.c
deleted file mode 100644
index 64aee3f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/pci.c
+++ /dev/null
@@ -1,222 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/pci.h>
-
-#include "mt7996.h"
-#include "mac.h"
-#include "../trace.h"
-
-static LIST_HEAD(hif_list);
-static DEFINE_SPINLOCK(hif_lock);
-static u32 hif_idx;
-
-static const struct pci_device_id mt7996_pci_device_table[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7990) },
-	{ },
-};
-
-static const struct pci_device_id mt7996_hif_device_table[] = {
-	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7991) },
-	{ },
-};
-
-static struct mt7996_hif *mt7996_pci_get_hif2(u32 idx)
-{
-	struct mt7996_hif *hif;
-	u32 val;
-
-	spin_lock_bh(&hif_lock);
-
-	list_for_each_entry(hif, &hif_list, list) {
-		val = readl(hif->regs + MT_PCIE_RECOG_ID);
-		val &= MT_PCIE_RECOG_ID_MASK;
-		if (val != idx)
-			continue;
-
-		get_device(hif->dev);
-		goto out;
-	}
-	hif = NULL;
-
-out:
-	spin_unlock_bh(&hif_lock);
-
-	return hif;
-}
-
-static void mt7996_put_hif2(struct mt7996_hif *hif)
-{
-	if (!hif)
-		return;
-
-	put_device(hif->dev);
-}
-
-static struct mt7996_hif *mt7996_pci_init_hif2(struct pci_dev *pdev)
-{
-	hif_idx++;
-	if (!pci_get_device(PCI_VENDOR_ID_MEDIATEK, 0x7991, NULL))
-		return NULL;
-
-	writel(hif_idx | MT_PCIE_RECOG_ID_SEM,
-	       pcim_iomap_table(pdev)[0] + MT_PCIE_RECOG_ID);
-
-	return mt7996_pci_get_hif2(hif_idx);
-}
-
-static int mt7996_pci_hif2_probe(struct pci_dev *pdev)
-{
-	struct mt7996_hif *hif;
-
-	hif = devm_kzalloc(&pdev->dev, sizeof(*hif), GFP_KERNEL);
-	if (!hif)
-		return -ENOMEM;
-
-	hif->dev = &pdev->dev;
-	hif->regs = pcim_iomap_table(pdev)[0];
-	hif->irq = pdev->irq;
-	spin_lock_bh(&hif_lock);
-	list_add(&hif->list, &hif_list);
-	spin_unlock_bh(&hif_lock);
-	pci_set_drvdata(pdev, hif);
-
-	return 0;
-}
-
-static int mt7996_pci_probe(struct pci_dev *pdev,
-			    const struct pci_device_id *id)
-{
-	struct pci_dev *hif2_dev;
-	struct mt7996_dev *dev;
-	struct mt76_dev *mdev;
-	struct mt7996_hif *hif2;
-	int irq, ret;
-
-	ret = pcim_enable_device(pdev);
-	if (ret)
-		return ret;
-
-	ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
-	if (ret)
-		return ret;
-
-	pci_set_master(pdev);
-
-	ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
-	if (ret)
-		return ret;
-
-	mt76_pci_disable_aspm(pdev);
-
-	if (id->device == 0x7991)
-		return mt7996_pci_hif2_probe(pdev);
-
-	dev = mt7996_mmio_probe(&pdev->dev, pcim_iomap_table(pdev)[0],
-				id->device);
-	if (IS_ERR(dev))
-		return PTR_ERR(dev);
-
-	mdev = &dev->mt76;
-	mt7996_wfsys_reset(dev);
-	hif2 = mt7996_pci_init_hif2(pdev);
-
-	ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
-	if (ret < 0)
-		goto free_device;
-
-	irq = pdev->irq;
-	ret = devm_request_irq(mdev->dev, irq, mt7996_irq_handler,
-			       IRQF_SHARED, KBUILD_MODNAME, dev);
-	if (ret)
-		goto free_irq_vector;
-
-	mt76_wr(dev, MT_INT_MASK_CSR, 0);
-	/* master switch of PCIe tnterrupt enable */
-	mt76_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
-
-	if (hif2) {
-		hif2_dev = container_of(hif2->dev, struct pci_dev, dev);
-		dev->hif2 = hif2;
-
-		ret = pci_alloc_irq_vectors(hif2_dev, 1, 1, PCI_IRQ_ALL_TYPES);
-		if (ret < 0)
-			goto free_hif2;
-
-		dev->hif2->irq = hif2_dev->irq;
-		ret = devm_request_irq(mdev->dev, dev->hif2->irq,
-				       mt7996_irq_handler, IRQF_SHARED,
-				       KBUILD_MODNAME "-hif", dev);
-		if (ret)
-			goto free_hif2_irq_vector;
-
-		mt76_wr(dev, MT_INT1_MASK_CSR, 0);
-		/* master switch of PCIe tnterrupt enable */
-		mt76_wr(dev, MT_PCIE1_MAC_INT_ENABLE, 0xff);
-	}
-
-	ret = mt7996_register_device(dev);
-	if (ret)
-		goto free_hif2_irq;
-
-	return 0;
-
-free_hif2_irq:
-	if (dev->hif2)
-		devm_free_irq(mdev->dev, dev->hif2->irq, dev);
-free_hif2_irq_vector:
-	if (dev->hif2)
-		pci_free_irq_vectors(hif2_dev);
-free_hif2:
-	if (dev->hif2)
-		put_device(dev->hif2->dev);
-	devm_free_irq(mdev->dev, irq, dev);
-free_irq_vector:
-	pci_free_irq_vectors(pdev);
-free_device:
-	mt76_free_device(&dev->mt76);
-
-	return ret;
-}
-
-static void mt7996_hif_remove(struct pci_dev *pdev)
-{
-	struct mt7996_hif *hif = pci_get_drvdata(pdev);
-
-	list_del(&hif->list);
-}
-
-static void mt7996_pci_remove(struct pci_dev *pdev)
-{
-	struct mt76_dev *mdev;
-	struct mt7996_dev *dev;
-
-	mdev = pci_get_drvdata(pdev);
-	dev = container_of(mdev, struct mt7996_dev, mt76);
-	mt7996_put_hif2(dev->hif2);
-	mt7996_unregister_device(dev);
-}
-
-struct pci_driver mt7996_hif_driver = {
-	.name		= KBUILD_MODNAME "_hif",
-	.id_table	= mt7996_hif_device_table,
-	.probe		= mt7996_pci_probe,
-	.remove		= mt7996_hif_remove,
-};
-
-struct pci_driver mt7996_pci_driver = {
-	.name		= KBUILD_MODNAME,
-	.id_table	= mt7996_pci_device_table,
-	.probe		= mt7996_pci_probe,
-	.remove		= mt7996_pci_remove,
-};
-
-MODULE_DEVICE_TABLE(pci, mt7996_pci_device_table);
-MODULE_DEVICE_TABLE(pci, mt7996_hif_device_table);
-MODULE_FIRMWARE(MT7996_FIRMWARE_WA);
-MODULE_FIRMWARE(MT7996_FIRMWARE_WM);
-MODULE_FIRMWARE(MT7996_ROM_PATCH);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/regs.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/regs.h
deleted file mode 100644
index a93f581..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/mt7996/regs.h
+++ /dev/null
@@ -1,533 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2022 MediaTek Inc.
- */
-
-#ifndef __MT7996_REGS_H
-#define __MT7996_REGS_H
-
-struct __map {
-	u32 phys;
-	u32 mapped;
-	u32 size;
-};
-
-struct __base {
-	u32 band_base[__MT_MAX_BAND];
-};
-
-/* used to differentiate between generations */
-struct mt7996_reg_desc {
-	const struct __base *base;
-	const struct __map *map;
-	u32 map_size;
-};
-
-enum base_rev {
-	WF_AGG_BASE,
-	WF_MIB_BASE,
-	WF_TMAC_BASE,
-	WF_RMAC_BASE,
-	WF_ARB_BASE,
-	WF_LPON_BASE,
-	WF_ETBF_BASE,
-	WF_DMA_BASE,
-	__MT_REG_BASE_MAX,
-};
-
-#define __BASE(_id, _band)			(dev->reg.base[(_id)].band_base[(_band)])
-
-#define MT_MCU_INT_EVENT			0x2108
-#define MT_MCU_INT_EVENT_DMA_STOPPED		BIT(0)
-#define MT_MCU_INT_EVENT_DMA_INIT		BIT(1)
-#define MT_MCU_INT_EVENT_RESET_DONE		BIT(3)
-
-/* PLE */
-#define MT_PLE_BASE				0x820c0000
-#define MT_PLE(ofs)				(MT_PLE_BASE + (ofs))
-
-#define MT_FL_Q_EMPTY				MT_PLE(0x360)
-#define MT_FL_Q0_CTRL				MT_PLE(0x3e0)
-#define MT_FL_Q2_CTRL				MT_PLE(0x3e8)
-#define MT_FL_Q3_CTRL				MT_PLE(0x3ec)
-
-#define MT_PLE_FREEPG_CNT			MT_PLE(0x380)
-#define MT_PLE_FREEPG_HEAD_TAIL			MT_PLE(0x384)
-#define MT_PLE_PG_HIF_GROUP			MT_PLE(0x00c)
-#define MT_PLE_HIF_PG_INFO			MT_PLE(0x388)
-
-#define MT_PLE_AC_QEMPTY(ac, n)			MT_PLE(0x600 +	0x80 * (ac) + ((n) << 2))
-#define MT_PLE_AMSDU_PACK_MSDU_CNT(n)		MT_PLE(0x10e0 + ((n) << 2))
-
-/* WF MDP TOP */
-#define MT_MDP_BASE				0x820cc000
-#define MT_MDP(ofs)				(MT_MDP_BASE + (ofs))
-
-#define MT_MDP_DCR2				MT_MDP(0x8e8)
-#define MT_MDP_DCR2_RX_TRANS_SHORT		BIT(2)
-
-/* TMAC: band 0(0x820e4000), band 1(0x820f4000), band 2(0x830e4000) */
-#define MT_WF_TMAC_BASE(_band)			__BASE(WF_TMAC_BASE, (_band))
-#define MT_WF_TMAC(_band, ofs)			(MT_WF_TMAC_BASE(_band) + (ofs))
-
-#define MT_TMAC_TCR0(_band)			MT_WF_TMAC(_band, 0)
-#define MT_TMAC_TCR0_TX_BLINK			GENMASK(7, 6)
-
-#define MT_TMAC_CDTR(_band)			MT_WF_TMAC(_band, 0x0c8)
-#define MT_TMAC_ODTR(_band)			MT_WF_TMAC(_band, 0x0cc)
-#define MT_TIMEOUT_VAL_PLCP			GENMASK(15, 0)
-#define MT_TIMEOUT_VAL_CCA			GENMASK(31, 16)
-
-#define MT_TMAC_ICR0(_band)			MT_WF_TMAC(_band, 0x014)
-#define MT_IFS_EIFS_OFDM			GENMASK(8, 0)
-#define MT_IFS_RIFS				GENMASK(14, 10)
-#define MT_IFS_SIFS				GENMASK(22, 16)
-#define MT_IFS_SLOT				GENMASK(30, 24)
-
-#define MT_TMAC_ICR1(_band)			MT_WF_TMAC(_band, 0x018)
-#define MT_IFS_EIFS_CCK				GENMASK(8, 0)
-
-/* WF DMA TOP: band 0(0x820e7000), band 1(0x820f7000), band 2(0x830e7000) */
-#define MT_WF_DMA_BASE(_band)			__BASE(WF_DMA_BASE, (_band))
-#define MT_WF_DMA(_band, ofs)			(MT_WF_DMA_BASE(_band) + (ofs))
-
-#define MT_DMA_DCR0(_band)			MT_WF_DMA(_band, 0x000)
-#define MT_DMA_DCR0_RXD_G5_EN			BIT(23)
-
-#define MT_DMA_TCRF1(_band)			MT_WF_DMA(_band, 0x054)
-#define MT_DMA_TCRF1_QIDX			GENMASK(15, 13)
-
-/* ETBF: band 0(0x820ea000), band 1(0x820fa000), band 2(0x830ea000) */
-#define MT_WF_ETBF_BASE(_band)			__BASE(WF_ETBF_BASE, (_band))
-#define MT_WF_ETBF(_band, ofs)			(MT_WF_ETBF_BASE(_band) + (ofs))
-
-#define MT_ETBF_RX_FB_CONT(_band)		MT_WF_ETBF(_band, 0x100)
-#define MT_ETBF_RX_FB_BW			GENMASK(10, 8)
-#define MT_ETBF_RX_FB_NC			GENMASK(7, 4)
-#define MT_ETBF_RX_FB_NR			GENMASK(3, 0)
-
-/* LPON: band 0(0x820eb000), band 1(0x820fb000), band 2(0x830eb000) */
-#define MT_WF_LPON_BASE(_band)			__BASE(WF_LPON_BASE, (_band))
-#define MT_WF_LPON(_band, ofs)			(MT_WF_LPON_BASE(_band) + (ofs))
-
-#define MT_LPON_UTTR0(_band)			MT_WF_LPON(_band, 0x360)
-#define MT_LPON_UTTR1(_band)			MT_WF_LPON(_band, 0x364)
-#define MT_LPON_FRCR(_band)			MT_WF_LPON(_band, 0x37c)
-
-#define MT_LPON_TCR(_band, n)			MT_WF_LPON(_band, 0x0a8 + (((n) * 4) << 4))
-#define MT_LPON_TCR_SW_MODE			GENMASK(1, 0)
-#define MT_LPON_TCR_SW_WRITE			BIT(0)
-#define MT_LPON_TCR_SW_ADJUST			BIT(1)
-#define MT_LPON_TCR_SW_READ			GENMASK(1, 0)
-
-/* MIB: band 0(0x820ed000), band 1(0x820fd000), band 2(0x830ed000)*/
-/* These counters are (mostly?) clear-on-read.  So, some should not
- * be read at all in case firmware is already reading them.  These
- * are commented with 'DNR' below. The DNR stats will be read by querying
- * the firmware API for the appropriate message.  For counters the driver
- * does read, the driver should accumulate the counters.
- */
-#define MT_WF_MIB_BASE(_band)			__BASE(WF_MIB_BASE, (_band))
-#define MT_WF_MIB(_band, ofs)			(MT_WF_MIB_BASE(_band) + (ofs))
-
-#define MT_MIB_BSCR0(_band)			MT_WF_MIB(_band, 0x9cc)
-#define MT_MIB_BSCR1(_band)			MT_WF_MIB(_band, 0x9d0)
-#define MT_MIB_BSCR2(_band)			MT_WF_MIB(_band, 0x9d4)
-#define MT_MIB_BSCR3(_band)			MT_WF_MIB(_band, 0x9d8)
-#define MT_MIB_BSCR4(_band)			MT_WF_MIB(_band, 0x9dc)
-#define MT_MIB_BSCR5(_band)			MT_WF_MIB(_band, 0x9e0)
-#define MT_MIB_BSCR6(_band)			MT_WF_MIB(_band, 0x9e4)
-#define MT_MIB_BSCR7(_band)			MT_WF_MIB(_band, 0x9e8)
-#define MT_MIB_BSCR17(_band)			MT_WF_MIB(_band, 0xa10)
-
-#define MT_MIB_TSCR5(_band)			MT_WF_MIB(_band, 0x6c4)
-#define MT_MIB_TSCR6(_band)			MT_WF_MIB(_band, 0x6c8)
-#define MT_MIB_TSCR7(_band)			MT_WF_MIB(_band, 0x6d0)
-
-#define MT_MIB_RSCR1(_band)			MT_WF_MIB(_band, 0x7ac)
-/* rx mpdu counter, full 32 bits */
-#define MT_MIB_RSCR31(_band)			MT_WF_MIB(_band, 0x964)
-#define MT_MIB_RSCR33(_band)			MT_WF_MIB(_band, 0x96c)
-
-#define MT_MIB_SDR6(_band)			MT_WF_MIB(_band, 0x020)
-#define MT_MIB_SDR6_CHANNEL_IDL_CNT_MASK	GENMASK(15, 0)
-
-#define MT_MIB_RVSR0(_band)			MT_WF_MIB(_band, 0x720)
-
-#define MT_MIB_RSCR35(_band)			MT_WF_MIB(_band, 0x974)
-#define MT_MIB_RSCR36(_band)			MT_WF_MIB(_band, 0x978)
-
-/* tx ampdu cnt, full 32 bits */
-#define MT_MIB_TSCR0(_band)			MT_WF_MIB(_band, 0x6b0)
-#define MT_MIB_TSCR2(_band)			MT_WF_MIB(_band, 0x6b8)
-
-/* counts all mpdus in ampdu, regardless of success */
-#define MT_MIB_TSCR3(_band)			MT_WF_MIB(_band, 0x6bc)
-
-/* counts all successfully tx'd mpdus in ampdu */
-#define MT_MIB_TSCR4(_band)			MT_WF_MIB(_band, 0x6c0)
-
-/* rx ampdu count, 32-bit */
-#define MT_MIB_RSCR27(_band)			MT_WF_MIB(_band, 0x954)
-
-/* rx ampdu bytes count, 32-bit */
-#define MT_MIB_RSCR28(_band)			MT_WF_MIB(_band, 0x958)
-
-/* rx ampdu valid subframe count */
-#define MT_MIB_RSCR29(_band)			MT_WF_MIB(_band, 0x95c)
-
-/* rx ampdu valid subframe bytes count, 32bits */
-#define MT_MIB_RSCR30(_band)			MT_WF_MIB(_band, 0x960)
-
-/* remaining windows protected stats */
-#define MT_MIB_SDR27(_band)			MT_WF_MIB(_band, 0x080)
-#define MT_MIB_SDR27_TX_RWP_FAIL_CNT		GENMASK(15, 0)
-
-#define MT_MIB_SDR28(_band)			MT_WF_MIB(_band, 0x084)
-#define MT_MIB_SDR28_TX_RWP_NEED_CNT		GENMASK(15, 0)
-
-#define MT_MIB_RVSR1(_band)			MT_WF_MIB(_band, 0x724)
-
-/* rx blockack count, 32 bits */
-#define MT_MIB_TSCR1(_band)			MT_WF_MIB(_band, 0x6b4)
-
-#define MT_MIB_BTSCR0(_band)			MT_WF_MIB(_band, 0x5e0)
-#define MT_MIB_BTSCR5(_band)			MT_WF_MIB(_band, 0x788)
-#define MT_MIB_BTSCR6(_band)			MT_WF_MIB(_band, 0x798)
-
-#define MT_MIB_BFTFCR(_band)			MT_WF_MIB(_band, 0x5d0)
-
-#define MT_TX_AGG_CNT(_band, n)			MT_WF_MIB(_band, 0xa28 + ((n) << 2))
-#define MT_MIB_ARNG(_band, n)			MT_WF_MIB(_band, 0x0b0 + ((n) << 2))
-#define MT_MIB_ARNCR_RANGE(val, n)		(((val) >> ((n) << 4)) & GENMASK(9, 0))
-
-/* UMIB */
-#define MT_WF_UMIB_BASE				0x820cd000
-#define MT_WF_UMIB(ofs)				(MT_WF_UMIB_BASE + (ofs))
-
-#define MT_UMIB_RPDCR(_band)			(MT_WF_UMIB(0x594) + _band * 0x164)
-
-/* WTBLON TOP */
-#define MT_WTBLON_TOP_BASE			0x820d4000
-#define MT_WTBLON_TOP(ofs)			(MT_WTBLON_TOP_BASE + (ofs))
-#define MT_WTBLON_TOP_WDUCR			MT_WTBLON_TOP(0x370)
-#define MT_WTBLON_TOP_WDUCR_GROUP		GENMASK(4, 0)
-
-#define MT_WTBL_UPDATE				MT_WTBLON_TOP(0x380)
-#define MT_WTBL_UPDATE_WLAN_IDX			GENMASK(11, 0)
-#define MT_WTBL_UPDATE_ADM_COUNT_CLEAR		BIT(14)
-#define MT_WTBL_UPDATE_BUSY			BIT(31)
-
-/* WTBL */
-#define MT_WTBL_BASE				0x820d8000
-#define MT_WTBL_LMAC_ID				GENMASK(14, 8)
-#define MT_WTBL_LMAC_DW				GENMASK(7, 2)
-#define MT_WTBL_LMAC_OFFS(_id, _dw)		(MT_WTBL_BASE | \
-						 FIELD_PREP(MT_WTBL_LMAC_ID, _id) | \
-						 FIELD_PREP(MT_WTBL_LMAC_DW, _dw))
-
-/* AGG: band 0(0x820e2000), band 1(0x820f2000), band 2(0x830e2000) */
-#define MT_WF_AGG_BASE(_band)			__BASE(WF_AGG_BASE, (_band))
-#define MT_WF_AGG(_band, ofs)			(MT_WF_AGG_BASE(_band) + (ofs))
-
-#define MT_AGG_ACR0(_band)			MT_WF_AGG(_band, 0x054)
-#define MT_AGG_ACR_CFEND_RATE			GENMASK(13, 0)
-
-/* ARB: band 0(0x820e3000), band 1(0x820f3000), band 2(0x830e3000) */
-#define MT_WF_ARB_BASE(_band)			__BASE(WF_ARB_BASE, (_band))
-#define MT_WF_ARB(_band, ofs)			(MT_WF_ARB_BASE(_band) + (ofs))
-
-#define MT_ARB_SCR(_band)			MT_WF_ARB(_band, 0x000)
-#define MT_ARB_SCR_TX_DISABLE			BIT(8)
-#define MT_ARB_SCR_RX_DISABLE			BIT(9)
-
-/* RMAC: band 0(0x820e5000), band 1(0x820f5000), band 2(0x830e5000), */
-#define MT_WF_RMAC_BASE(_band)			__BASE(WF_RMAC_BASE, (_band))
-#define MT_WF_RMAC(_band, ofs)			(MT_WF_RMAC_BASE(_band) + (ofs))
-
-#define MT_WF_RFCR(_band)			MT_WF_RMAC(_band, 0x000)
-#define MT_WF_RFCR_DROP_STBC_MULTI		BIT(0)
-#define MT_WF_RFCR_DROP_FCSFAIL			BIT(1)
-#define MT_WF_RFCR_DROP_PROBEREQ		BIT(4)
-#define MT_WF_RFCR_DROP_MCAST			BIT(5)
-#define MT_WF_RFCR_DROP_BCAST			BIT(6)
-#define MT_WF_RFCR_DROP_MCAST_FILTERED		BIT(7)
-#define MT_WF_RFCR_DROP_A3_MAC			BIT(8)
-#define MT_WF_RFCR_DROP_A3_BSSID		BIT(9)
-#define MT_WF_RFCR_DROP_A2_BSSID		BIT(10)
-#define MT_WF_RFCR_DROP_OTHER_BEACON		BIT(11)
-#define MT_WF_RFCR_DROP_FRAME_REPORT		BIT(12)
-#define MT_WF_RFCR_DROP_CTL_RSV			BIT(13)
-#define MT_WF_RFCR_DROP_CTS			BIT(14)
-#define MT_WF_RFCR_DROP_RTS			BIT(15)
-#define MT_WF_RFCR_DROP_DUPLICATE		BIT(16)
-#define MT_WF_RFCR_DROP_OTHER_BSS		BIT(17)
-#define MT_WF_RFCR_DROP_OTHER_UC		BIT(18)
-#define MT_WF_RFCR_DROP_OTHER_TIM		BIT(19)
-#define MT_WF_RFCR_DROP_NDPA			BIT(20)
-#define MT_WF_RFCR_DROP_UNWANTED_CTL		BIT(21)
-
-#define MT_WF_RFCR1(_band)			MT_WF_RMAC(_band, 0x004)
-#define MT_WF_RFCR1_DROP_ACK			BIT(4)
-#define MT_WF_RFCR1_DROP_BF_POLL		BIT(5)
-#define MT_WF_RFCR1_DROP_BA			BIT(6)
-#define MT_WF_RFCR1_DROP_CFEND			BIT(7)
-#define MT_WF_RFCR1_DROP_CFACK			BIT(8)
-
-#define MT_WF_RMAC_MIB_AIRTIME0(_band)		MT_WF_RMAC(_band, 0x0380)
-#define MT_WF_RMAC_MIB_RXTIME_CLR		BIT(31)
-#define MT_WF_RMAC_MIB_ED_OFFSET		GENMASK(20, 16)
-#define MT_WF_RMAC_MIB_OBSS_BACKOFF		GENMASK(15, 0)
-
-#define MT_WF_RMAC_MIB_AIRTIME1(_band)		MT_WF_RMAC(_band, 0x0384)
-#define MT_WF_RMAC_MIB_NONQOSD_BACKOFF		GENMASK(31, 16)
-
-#define MT_WF_RMAC_MIB_AIRTIME3(_band)		MT_WF_RMAC(_band, 0x038c)
-#define MT_WF_RMAC_MIB_QOS01_BACKOFF		GENMASK(31, 0)
-
-#define MT_WF_RMAC_MIB_AIRTIME4(_band)		MT_WF_RMAC(_band, 0x0390)
-#define MT_WF_RMAC_MIB_QOS23_BACKOFF		GENMASK(31, 0)
-
-#define MT_WF_RMAC_RSVD0(_band)			MT_WF_RMAC(_band, 0x03e0)
-#define MT_WF_RMAC_RSVD0_EIFS_CLR		BIT(21)
-
-/* WFDMA0 */
-#define MT_WFDMA0_BASE				0xd4000
-#define MT_WFDMA0(ofs)				(MT_WFDMA0_BASE + (ofs))
-
-#define MT_WFDMA0_RST				MT_WFDMA0(0x100)
-#define MT_WFDMA0_RST_LOGIC_RST			BIT(4)
-#define MT_WFDMA0_RST_DMASHDL_ALL_RST		BIT(5)
-
-#define MT_WFDMA0_BUSY_ENA			MT_WFDMA0(0x13c)
-#define MT_WFDMA0_BUSY_ENA_TX_FIFO0		BIT(0)
-#define MT_WFDMA0_BUSY_ENA_TX_FIFO1		BIT(1)
-#define MT_WFDMA0_BUSY_ENA_RX_FIFO		BIT(2)
-
-#define MT_WFDMA0_RX_INT_PCIE_SEL		MT_WFDMA0(0x154)
-#define MT_WFDMA0_RX_INT_SEL_RING3		BIT(3)
-
-#define MT_WFDMA0_GLO_CFG			MT_WFDMA0(0x208)
-#define MT_WFDMA0_GLO_CFG_TX_DMA_EN		BIT(0)
-#define MT_WFDMA0_GLO_CFG_RX_DMA_EN		BIT(2)
-#define MT_WFDMA0_GLO_CFG_OMIT_TX_INFO		BIT(28)
-#define MT_WFDMA0_GLO_CFG_OMIT_RX_INFO		BIT(27)
-#define MT_WFDMA0_GLO_CFG_OMIT_RX_INFO_PFET2	BIT(21)
-
-#define WF_WFDMA0_GLO_CFG_EXT0			MT_WFDMA0(0x2b0)
-#define WF_WFDMA0_GLO_CFG_EXT0_RX_WB_RXD	BIT(18)
-#define WF_WFDMA0_GLO_CFG_EXT0_WED_MERGE_MODE	BIT(14)
-
-#define WF_WFDMA0_GLO_CFG_EXT1			MT_WFDMA0(0x2b4)
-#define WF_WFDMA0_GLO_CFG_EXT1_CALC_MODE	BIT(31)
-#define WF_WFDMA0_GLO_CFG_EXT1_TX_FCTRL_MODE	BIT(28)
-
-#define MT_WFDMA0_RST_DTX_PTR			MT_WFDMA0(0x20c)
-#define MT_WFDMA0_PRI_DLY_INT_CFG0		MT_WFDMA0(0x2f0)
-#define MT_WFDMA0_PRI_DLY_INT_CFG1		MT_WFDMA0(0x2f4)
-#define MT_WFDMA0_PRI_DLY_INT_CFG2		MT_WFDMA0(0x2f8)
-
-/* WFDMA1 */
-#define MT_WFDMA1_BASE				0xd5000
-
-/* WFDMA CSR */
-#define MT_WFDMA_EXT_CSR_BASE			0xd7000
-#define MT_WFDMA_EXT_CSR(ofs)			(MT_WFDMA_EXT_CSR_BASE + (ofs))
-
-#define MT_WFDMA_HOST_CONFIG			MT_WFDMA_EXT_CSR(0x30)
-#define MT_WFDMA_HOST_CONFIG_PDMA_BAND		BIT(0)
-
-#define MT_WFDMA_EXT_CSR_HIF_MISC		MT_WFDMA_EXT_CSR(0x44)
-#define MT_WFDMA_EXT_CSR_HIF_MISC_BUSY		BIT(0)
-
-#define MT_PCIE_RECOG_ID			0xd7090
-#define MT_PCIE_RECOG_ID_MASK			GENMASK(30, 0)
-#define MT_PCIE_RECOG_ID_SEM			BIT(31)
-
-/* WFDMA0 PCIE1 */
-#define MT_WFDMA0_PCIE1_BASE			0xd8000
-#define MT_WFDMA0_PCIE1(ofs)			(MT_WFDMA0_PCIE1_BASE + (ofs))
-
-#define MT_WFDMA0_PCIE1_BUSY_ENA		MT_WFDMA0_PCIE1(0x13c)
-#define MT_WFDMA0_PCIE1_BUSY_ENA_TX_FIFO0	BIT(0)
-#define MT_WFDMA0_PCIE1_BUSY_ENA_TX_FIFO1	BIT(1)
-#define MT_WFDMA0_PCIE1_BUSY_ENA_RX_FIFO	BIT(2)
-
-/* WFDMA COMMON */
-#define __RXQ(q)				((q) + __MT_MCUQ_MAX)
-#define __TXQ(q)				(__RXQ(q) + __MT_RXQ_MAX)
-
-#define MT_Q_ID(q)				(dev->q_id[(q)])
-#define MT_Q_BASE(q)				((dev->q_wfdma_mask >> (q)) & 0x1 ?	\
-						 MT_WFDMA1_BASE : MT_WFDMA0_BASE)
-
-#define MT_MCUQ_ID(q)				MT_Q_ID(q)
-#define MT_TXQ_ID(q)				MT_Q_ID(__TXQ(q))
-#define MT_RXQ_ID(q)				MT_Q_ID(__RXQ(q))
-
-#define MT_MCUQ_RING_BASE(q)			(MT_Q_BASE(q) + 0x300)
-#define MT_TXQ_RING_BASE(q)			(MT_Q_BASE(__TXQ(q)) + 0x300)
-#define MT_RXQ_RING_BASE(q)			(MT_Q_BASE(__RXQ(q)) + 0x500)
-
-#define MT_MCUQ_EXT_CTRL(q)			(MT_Q_BASE(q) +	0x600 +	\
-						 MT_MCUQ_ID(q)* 0x4)
-#define MT_RXQ_BAND1_CTRL(q)			(MT_Q_BASE(__RXQ(q)) + 0x680 +	\
-						 MT_RXQ_ID(q)* 0x4)
-#define MT_TXQ_EXT_CTRL(q)			(MT_Q_BASE(__TXQ(q)) + 0x600 +	\
-						 MT_TXQ_ID(q)* 0x4)
-
-#define MT_INT_SOURCE_CSR			MT_WFDMA0(0x200)
-#define MT_INT_MASK_CSR				MT_WFDMA0(0x204)
-
-#define MT_INT1_SOURCE_CSR			MT_WFDMA0_PCIE1(0x200)
-#define MT_INT1_MASK_CSR			MT_WFDMA0_PCIE1(0x204)
-
-#define MT_INT_RX_DONE_BAND0			BIT(12)
-#define MT_INT_RX_DONE_BAND1			BIT(12)
-#define MT_INT_RX_DONE_BAND2			BIT(13)
-#define MT_INT_RX_DONE_WM			BIT(0)
-#define MT_INT_RX_DONE_WA			BIT(1)
-#define MT_INT_RX_DONE_WA_MAIN			BIT(2)
-#define MT_INT_RX_DONE_WA_EXT			BIT(2)
-#define MT_INT_RX_DONE_WA_TRI			BIT(3)
-#define MT_INT_RX_TXFREE_MAIN			BIT(17)
-#define MT_INT_RX_TXFREE_TRI			BIT(15)
-#define MT_INT_MCU_CMD				BIT(29)
-
-#define MT_INT_RX(q)				(dev->q_int_mask[__RXQ(q)])
-#define MT_INT_TX_MCU(q)			(dev->q_int_mask[(q)])
-
-#define MT_INT_RX_DONE_MCU			(MT_INT_RX(MT_RXQ_MCU) |	\
-						 MT_INT_RX(MT_RXQ_MCU_WA))
-
-#define MT_INT_BAND0_RX_DONE			(MT_INT_RX(MT_RXQ_MAIN) |	\
-						 MT_INT_RX(MT_RXQ_MAIN_WA))
-
-#define MT_INT_BAND1_RX_DONE			(MT_INT_RX(MT_RXQ_BAND1) |	\
-						 MT_INT_RX(MT_RXQ_BAND1_WA) |	\
-						 MT_INT_RX(MT_RXQ_MAIN_WA))
-
-#define MT_INT_BAND2_RX_DONE			(MT_INT_RX(MT_RXQ_BAND2) |	\
-						 MT_INT_RX(MT_RXQ_BAND2_WA) |	\
-						 MT_INT_RX(MT_RXQ_MAIN_WA))
-
-#define MT_INT_RX_DONE_ALL			(MT_INT_RX_DONE_MCU |		\
-						 MT_INT_BAND0_RX_DONE |		\
-						 MT_INT_BAND1_RX_DONE |		\
-						 MT_INT_BAND2_RX_DONE)
-
-#define MT_INT_TX_DONE_FWDL			BIT(26)
-#define MT_INT_TX_DONE_MCU_WM			BIT(27)
-#define MT_INT_TX_DONE_MCU_WA			BIT(22)
-#define MT_INT_TX_DONE_BAND0			BIT(30)
-#define MT_INT_TX_DONE_BAND1			BIT(31)
-#define MT_INT_TX_DONE_BAND2			BIT(15)
-
-#define MT_INT_TX_DONE_MCU			(MT_INT_TX_MCU(MT_MCUQ_WA) |	\
-						 MT_INT_TX_MCU(MT_MCUQ_WM) |	\
-						 MT_INT_TX_MCU(MT_MCUQ_FWDL))
-
-#define MT_MCU_CMD				MT_WFDMA0(0x1f0)
-#define MT_MCU_CMD_STOP_DMA			BIT(2)
-#define MT_MCU_CMD_RESET_DONE			BIT(3)
-#define MT_MCU_CMD_RECOVERY_DONE		BIT(4)
-#define MT_MCU_CMD_NORMAL_STATE			BIT(5)
-#define MT_MCU_CMD_ERROR_MASK			GENMASK(5, 1)
-
-/* l1/l2 remap */
-#define MT_HIF_REMAP_L1				0x155024
-#define MT_HIF_REMAP_L1_MASK			GENMASK(31, 16)
-#define MT_HIF_REMAP_L1_OFFSET			GENMASK(15, 0)
-#define MT_HIF_REMAP_L1_BASE			GENMASK(31, 16)
-#define MT_HIF_REMAP_BASE_L1			0x130000
-
-#define MT_HIF_REMAP_L2				0x1b4
-#define MT_HIF_REMAP_L2_MASK			GENMASK(19, 0)
-#define MT_HIF_REMAP_L2_OFFSET			GENMASK(11, 0)
-#define MT_HIF_REMAP_L2_BASE			GENMASK(31, 12)
-#define MT_HIF_REMAP_BASE_L2			0x1000
-
-#define MT_INFRA_BASE				0x18000000
-#define MT_WFSYS0_PHY_START			0x18400000
-#define MT_WFSYS1_PHY_START			0x18800000
-#define MT_WFSYS1_PHY_END			0x18bfffff
-#define MT_CBTOP1_PHY_START			0x70000000
-#define MT_CBTOP1_PHY_END			0x77ffffff
-#define MT_CBTOP2_PHY_START			0xf0000000
-#define MT_CBTOP2_PHY_END			0xffffffff
-#define MT_INFRA_MCU_START			0x7c000000
-#define MT_INFRA_MCU_END			0x7c3fffff
-
-/* FW MODE SYNC */
-#define MT_SWDEF_MODE				0x9143c
-#define MT_SWDEF_NORMAL_MODE			0
-
-/* LED */
-#define MT_LED_TOP_BASE				0x18013000
-#define MT_LED_PHYS(_n)				(MT_LED_TOP_BASE + (_n))
-
-#define MT_LED_CTRL(_n)				MT_LED_PHYS(0x00 + ((_n) * 4))
-#define MT_LED_CTRL_KICK			BIT(7)
-#define MT_LED_CTRL_BLINK_MODE			BIT(2)
-#define MT_LED_CTRL_POLARITY			BIT(1)
-
-#define MT_LED_TX_BLINK(_n)			MT_LED_PHYS(0x10 + ((_n) * 4))
-#define MT_LED_TX_BLINK_ON_MASK			GENMASK(7, 0)
-#define MT_LED_TX_BLINK_OFF_MASK		GENMASK(15, 8)
-
-#define MT_LED_EN(_n)				MT_LED_PHYS(0x40 + ((_n) * 4))
-
-#define MT_LED_GPIO_MUX2			0x70005058 /* GPIO 18 */
-#define MT_LED_GPIO_MUX3			0x7000505C /* GPIO 26 */
-#define MT_LED_GPIO_SEL_MASK			GENMASK(11, 8)
-
-/* MT TOP */
-#define MT_TOP_BASE				0xe0000
-#define MT_TOP(ofs)				(MT_TOP_BASE + (ofs))
-
-#define MT_TOP_LPCR_HOST_BAND(_band)		MT_TOP(0x10 + ((_band) * 0x10))
-#define MT_TOP_LPCR_HOST_FW_OWN			BIT(0)
-#define MT_TOP_LPCR_HOST_DRV_OWN		BIT(1)
-#define MT_TOP_LPCR_HOST_FW_OWN_STAT		BIT(2)
-
-#define MT_TOP_LPCR_HOST_BAND_IRQ_STAT(_band)	MT_TOP(0x14 + ((_band) * 0x10))
-#define MT_TOP_LPCR_HOST_BAND_STAT		BIT(0)
-
-#define MT_TOP_MISC				MT_TOP(0xf0)
-#define MT_TOP_MISC_FW_STATE			GENMASK(2, 0)
-
-#define MT_HW_REV				0x70010204
-#define MT_WF_SUBSYS_RST			0x70002600
-
-/* PCIE MAC */
-#define MT_PCIE_MAC_BASE			0x74030000
-#define MT_PCIE_MAC(ofs)			(MT_PCIE_MAC_BASE + (ofs))
-#define MT_PCIE_MAC_INT_ENABLE			MT_PCIE_MAC(0x188)
-
-#define MT_PCIE1_MAC_BASE			0x74090000
-#define MT_PCIE1_MAC(ofs)			(MT_PCIE1_MAC_BASE + (ofs))
-
-#define MT_PCIE1_MAC_INT_ENABLE			MT_PCIE1_MAC(0x188)
-
-/* PHYRX CTRL */
-#define MT_WF_PHYRX_BAND_BASE			0x83080000
-#define MT_WF_PHYRX_BAND(_band, ofs)		(MT_WF_PHYRX_BAND_BASE + \
-						 ((_band) << 20) + (ofs))
-
-#define MT_WF_PHYRX_BAND_RX_CTRL1(_band)	MT_WF_PHYRX_BAND(_band, 0x2004)
-#define MT_WF_PHYRX_BAND_RX_CTRL1_IPI_EN	GENMASK(2, 0)
-#define MT_WF_PHYRX_BAND_RX_CTRL1_STSCNT_EN	GENMASK(11, 9)
-
-/* PHYRX CSD */
-#define MT_WF_PHYRX_CSD_BASE			0x83000000
-#define MT_WF_PHYRX_CSD(_band, _wf, ofs)	(MT_WF_PHYRX_CSD_BASE + \
-						 ((_band) << 20) + \
-						 ((_wf) << 16) + (ofs))
-#define MT_WF_PHYRX_CSD_IRPI(_band, _wf)	MT_WF_PHYRX_CSD(_band, _wf, 0x1000)
-
-/* PHYRX CSD BAND */
-#define MT_WF_PHYRX_CSD_BAND_RXTD12(_band)		MT_WF_PHYRX_BAND(_band, 0x8230)
-#define MT_WF_PHYRX_CSD_BAND_RXTD12_IRPI_SW_CLR_ONLY	BIT(18)
-#define MT_WF_PHYRX_CSD_BAND_RXTD12_IRPI_SW_CLR		BIT(29)
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/pci.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/pci.c
deleted file mode 100644
index 4c1c159..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/pci.c
+++ /dev/null
@@ -1,47 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2019 Lorenzo Bianconi <lorenzo@kernel.org>
- */
-
-#include "mt76.h"
-#include <linux/pci.h>
-
-void mt76_pci_disable_aspm(struct pci_dev *pdev)
-{
-	struct pci_dev *parent = pdev->bus->self;
-	u16 aspm_conf, parent_aspm_conf = 0;
-
-	pcie_capability_read_word(pdev, PCI_EXP_LNKCTL, &aspm_conf);
-	aspm_conf &= PCI_EXP_LNKCTL_ASPMC;
-	if (parent) {
-		pcie_capability_read_word(parent, PCI_EXP_LNKCTL,
-					  &parent_aspm_conf);
-		parent_aspm_conf &= PCI_EXP_LNKCTL_ASPMC;
-	}
-
-	if (!aspm_conf && (!parent || !parent_aspm_conf)) {
-		/* aspm already disabled */
-		return;
-	}
-
-	dev_info(&pdev->dev, "disabling ASPM %s %s\n",
-		 (aspm_conf & PCI_EXP_LNKCTL_ASPM_L0S) ? "L0s" : "",
-		 (aspm_conf & PCI_EXP_LNKCTL_ASPM_L1) ? "L1" : "");
-
-	if (IS_ENABLED(CONFIG_PCIEASPM)) {
-		int err;
-
-		err = pci_disable_link_state(pdev, aspm_conf);
-		if (!err)
-			return;
-	}
-
-	/* both device and parent should have the same ASPM setting.
-	 * disable ASPM in downstream component first and then upstream.
-	 */
-	pcie_capability_clear_word(pdev, PCI_EXP_LNKCTL, aspm_conf);
-	if (parent)
-		pcie_capability_clear_word(parent, PCI_EXP_LNKCTL,
-					   aspm_conf);
-}
-EXPORT_SYMBOL_GPL(mt76_pci_disable_aspm);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/scripts/single-sku.pl b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/scripts/single-sku.pl
deleted file mode 100644
index 9e381d2..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/scripts/single-sku.pl
+++ /dev/null
@@ -1,333 +0,0 @@
-#!/usr/bin/perl
-use strict;
-use 5.010;
-
-my $indent = 0;
-
-my %chip_types = (
-	mt7615 => "mt7615",
-	mt7622 => "mt7615",
-	mt7663 => "mt7615"
-);
-
-my $chip = shift @ARGV;
-my $chip_type;
-
-$chip or usage();
-
-sub usage() {
-	print STDERR <<EOF;
-Usage: $0 <chip> [options] <file> [[options] <file>...]
-
-Options:
-	country=XX:		Set country code
-	regdomain=XX:		Set regdomain
-
-Multiple country codes/regdomains per file are supported
-
-EOF
-	exit(1);
-}
-
-sub convert_array($) {
-	my $array = shift;
-
-	return unless $array;
-	foreach my $i (0 .. $#{$array}) {
-		$array->[$i] = int($array->[$i] * 2);
-	}
-
-	return $array;
-}
-
-sub parse_channel($$$) {
-	my $band = shift;
-	my $channels = $band->{channels};
-
-	my $ch = shift;
-	my $line = shift;
-
-	my @data = split /\s+/, $line;
-	my $data = join(" ", @data);
-
-	my $channel = {
-		chlist => [ ],
-		data => $data,
-		mcs => [],
-	};
-
-	$channels->{$ch} = $channel;
-
-	$band->{type} eq '2' and do {
-		$channel->{"rates-cck"} = convert_array([
-			$data[0], $data[0],
-			$data[1], $data[1]
-		]);
-		splice @data, 0, 2;
-	};
-
-	$channel->{"rates-ofdm"} = convert_array([
-		$data[0], $data[0],
-		$data[1], $data[1],
-		$data[2], $data[2],
-		$data[3], $data[4]
-	]);
-	splice @data, 0, 5;
-
-	my @bw = ( "bw20", "bw40", "bw80", "bw160" );
-	$band->{type} eq '2' and @bw = ( "bw20", "bw40" );
-
-	foreach my $bw (@bw) {
-		push @{$channel->{"rates-mcs"}}, convert_array([
-			$data[0],
-			$data[1], $data[1],
-			$data[2], $data[2],
-			$data[3], $data[3],
-			$data[4],
-			$data[5],
-			$data[6],
-		]);
-		splice @data, 0, 7;
-	};
-
-	@data > 0 and do {
-		$channel->{"txs-delta"} = convert_array([ reverse splice @data, 0, 3 ]);
-		delete $channel->{"txs-delta"} if join("", @{$channel->{"txs-delta"}}) =~ /^0+$/;
-	};
-}
-
-sub read_data($) {
-	my $file = shift;
-	my $band;
-	my %bands;
-
-	open FILE, "<", $file or die "Can't open file $file\n";
-	while (<FILE>) {
-		chomp;
-
-		/^Band: (2.4|5)G / and do {
-			$band = $1;
-			$band eq '2.4' and $band = "2";
-			$bands{$band} = {
-				type => $band,
-				channels => {},
-			};
-		};
-		/^Ch(\d+)\s+(.+?)\s*$/ and parse_channel($bands{$band}, $1, $2);
-	}
-	close FILE;
-
-	return \%bands;
-}
-
-sub find_matching_channel($$) {
-	my $band = shift;
-	my $channels = $band->{channels};
-
-	my $ch_idx = shift;
-	my $ch = $channels->{$ch_idx};
-
-	foreach my $cur (sort { $a <=> $b } keys %$channels) {
-		my $cur_ch;
-
-		return undef if $cur >= $ch_idx;
-
-		$cur_ch = $channels->{$cur};
-		$cur_ch->{data} eq $ch->{data} and return $cur_ch;
-	}
-}
-
-sub optimize_channels($) {
-	my $band = shift;
-	my $channels = $band->{channels};
-	my $prev;
-	my $prev_chlist;
-
-	foreach my $ch_idx (sort { $a <=> $b } keys %$channels) {
-		my $ch = $channels->{$ch_idx};
-
-		$prev and ($ch->{data} eq $prev->{data}) and do {
-			$prev_chlist->[1] = $ch_idx;
-			delete $channels->{$ch_idx};
-			next;
-		};
-
-		$prev = find_matching_channel($band, $ch_idx);
-		if ($prev) {
-			delete $channels->{$ch_idx};
-		} else {
-			$prev = $ch;
-		}
-
-		$prev_chlist = [ $ch_idx, $ch_idx ];
-		push @{$prev->{chlist}}, $prev_chlist;
-	}
-}
-
-sub add_line {
-	my $line = shift;
-	print "".("\t" x $indent).$line;
-}
-
-sub array_str($) {
-	my $a = shift;
-
-	return "<".join(" ", @$a).">";
-}
-
-sub string_array_str($) {
-	my $a = shift;
-
-	return join(", ", map { "\"$_\"" } @$a);
-}
-
-sub add_named_array($$) {
-	my $ch = shift;
-	my $type = shift;
-
-	return unless $ch->{$type};
-	add_line("$type = ".array_str($ch->{$type}).";\n");
-}
-
-sub add_named_string_array($$) {
-	my $ch = shift;
-	my $type = shift;
-
-	return unless $ch->{$type} and @{$ch->{$type}} > 0;
-	add_line("$type = ".string_array_str($ch->{$type}).";\n");
-}
-
-sub add_multi_array($$) {
-	my $name = shift;
-	my $a = shift;
-
-	add_line("$name =");
-	if (@$a > 1) {
-		my $first = 1;
-
-		print "\n";
-		$indent++;
-		foreach my $v (@$a) {
-			$first or print ",\n";
-			undef $first;
-
-			add_line(array_str($v));
-		}
-		$indent--;
-	} else {
-		print " ".array_str($a->[0]);
-	}
-	print ";\n";
-}
-
-sub print_txpower($) {
-	my $ch = shift;
-	my @data;
-
-	add_named_array($ch, "txs-delta");
-	add_named_array($ch, "rates-cck");
-	add_named_array($ch, "rates-ofdm");
-
-	my $prev;
-	foreach my $v (@{$ch->{"rates-mcs"}}) {
-		my $val = [1, @{$v}];
-
-		if ($prev and (array_str($v) eq array_str($prev))) {
-			$data[$#data]->[0]++;
-		} else {
-			push @data, $val;
-		}
-
-		$prev = $v;
-	}
-
-	add_multi_array("rates-mcs", \@data);
-};
-
-sub print_channels($) {
-	my $band = shift;
-	my $channels = $band->{channels};
-	my $r = 0;
-
-	foreach my $ch_idx (sort { $a <=> $b } keys %$channels) {
-		my $ch = $channels->{$ch_idx};
-		my $first = 1;
-
-		add_line("r$r {\n");
-		$indent++;
-
-		add_multi_array("channels", $ch->{chlist});
-		print_txpower($ch);
-
-		$indent--;
-		add_line("};\n");
-
-		$r++;
-	}
-}
-
-sub print_bands($) {
-	my $bands = shift;
-
-	foreach my $band_idx (sort keys %$bands) {
-		my $band = $bands->{$band_idx};
-
-		optimize_channels($band);
-
-		add_line("txpower-".$band->{type}."g {\n");
-		$indent++;
-
-		print_channels($band);
-
-		$indent--;
-		add_line("};\n");
-	};
-}
-
-my @files;
-my $cur = {};
-
-$chip_type = $chip_types{$chip} or die "Unsupported chip type '$chip', supported chip types: ".join(", ",sort keys %chip_types)."\n";
-
-while (@ARGV > 0) {
-	my $arg = shift @ARGV;
-
-	$cur or $cur = {
-		country => [],
-		regdomain => [],
-	};
-
-	if ($arg =~ /country=(\w+)$/) {
-		push @{$cur->{country}}, $1;
-	} elsif ($arg =~ /regdomain=(\w+)$/) {
-		push @{$cur->{regdomain}}, $1;
-	} else {
-		$cur->{bands} = read_data($arg);
-		push @files, $cur;
-		$cur = undef;
-	}
-}
-
-
-add_line("power-limits {\n");
-$indent++;
-
-my $count = 0;
-
-foreach my $domain (@files) {
-	my $name = "r$count";
-	$count++;
-
-	add_line("$name {\n");
-	$indent++;
-
-	add_named_string_array($domain, "country");
-	add_named_string_array($domain, "regdomain");
-	print_bands($domain->{bands});
-
-	$indent--;
-	add_line("};\n");
-}
-
-$indent--;
-add_line("};\n");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/sdio.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/sdio.c
deleted file mode 100644
index 0ec308f..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/sdio.c
+++ /dev/null
@@ -1,667 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc.
- *
- * This file is written based on mt76/usb.c.
- *
- * Author: Felix Fietkau <nbd@nbd.name>
- *	   Lorenzo Bianconi <lorenzo@kernel.org>
- *	   Sean Wang <sean.wang@mediatek.com>
- */
-
-#include <linux/iopoll.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/mmc/sdio_func.h>
-#include <linux/mmc/card.h>
-#include <linux/mmc/host.h>
-#include <linux/sched.h>
-#include <linux/kthread.h>
-
-#include "mt76.h"
-#include "sdio.h"
-
-static u32 mt76s_read_whisr(struct mt76_dev *dev)
-{
-	return sdio_readl(dev->sdio.func, MCR_WHISR, NULL);
-}
-
-u32 mt76s_read_pcr(struct mt76_dev *dev)
-{
-	struct mt76_sdio *sdio = &dev->sdio;
-
-	return sdio_readl(sdio->func, MCR_WHLPCR, NULL);
-}
-EXPORT_SYMBOL_GPL(mt76s_read_pcr);
-
-static u32 mt76s_read_mailbox(struct mt76_dev *dev, u32 offset)
-{
-	struct sdio_func *func = dev->sdio.func;
-	u32 val = ~0, status;
-	int err;
-
-	sdio_claim_host(func);
-
-	sdio_writel(func, offset, MCR_H2DSM0R, &err);
-	if (err < 0) {
-		dev_err(dev->dev, "failed setting address [err=%d]\n", err);
-		goto out;
-	}
-
-	sdio_writel(func, H2D_SW_INT_READ, MCR_WSICR, &err);
-	if (err < 0) {
-		dev_err(dev->dev, "failed setting read mode [err=%d]\n", err);
-		goto out;
-	}
-
-	err = readx_poll_timeout(mt76s_read_whisr, dev, status,
-				 status & H2D_SW_INT_READ, 0, 1000000);
-	if (err < 0) {
-		dev_err(dev->dev, "query whisr timeout\n");
-		goto out;
-	}
-
-	sdio_writel(func, H2D_SW_INT_READ, MCR_WHISR, &err);
-	if (err < 0) {
-		dev_err(dev->dev, "failed setting read mode [err=%d]\n", err);
-		goto out;
-	}
-
-	val = sdio_readl(func, MCR_H2DSM0R, &err);
-	if (err < 0) {
-		dev_err(dev->dev, "failed reading h2dsm0r [err=%d]\n", err);
-		goto out;
-	}
-
-	if (val != offset) {
-		dev_err(dev->dev, "register mismatch\n");
-		val = ~0;
-		goto out;
-	}
-
-	val = sdio_readl(func, MCR_D2HRM1R, &err);
-	if (err < 0)
-		dev_err(dev->dev, "failed reading d2hrm1r [err=%d]\n", err);
-
-out:
-	sdio_release_host(func);
-
-	return val;
-}
-
-static void mt76s_write_mailbox(struct mt76_dev *dev, u32 offset, u32 val)
-{
-	struct sdio_func *func = dev->sdio.func;
-	u32 status;
-	int err;
-
-	sdio_claim_host(func);
-
-	sdio_writel(func, offset, MCR_H2DSM0R, &err);
-	if (err < 0) {
-		dev_err(dev->dev, "failed setting address [err=%d]\n", err);
-		goto out;
-	}
-
-	sdio_writel(func, val, MCR_H2DSM1R, &err);
-	if (err < 0) {
-		dev_err(dev->dev,
-			"failed setting write value [err=%d]\n", err);
-		goto out;
-	}
-
-	sdio_writel(func, H2D_SW_INT_WRITE, MCR_WSICR, &err);
-	if (err < 0) {
-		dev_err(dev->dev, "failed setting write mode [err=%d]\n", err);
-		goto out;
-	}
-
-	err = readx_poll_timeout(mt76s_read_whisr, dev, status,
-				 status & H2D_SW_INT_WRITE, 0, 1000000);
-	if (err < 0) {
-		dev_err(dev->dev, "query whisr timeout\n");
-		goto out;
-	}
-
-	sdio_writel(func, H2D_SW_INT_WRITE, MCR_WHISR, &err);
-	if (err < 0) {
-		dev_err(dev->dev, "failed setting write mode [err=%d]\n", err);
-		goto out;
-	}
-
-	val = sdio_readl(func, MCR_H2DSM0R, &err);
-	if (err < 0) {
-		dev_err(dev->dev, "failed reading h2dsm0r [err=%d]\n", err);
-		goto out;
-	}
-
-	if (val != offset)
-		dev_err(dev->dev, "register mismatch\n");
-
-out:
-	sdio_release_host(func);
-}
-
-u32 mt76s_rr(struct mt76_dev *dev, u32 offset)
-{
-	if (test_bit(MT76_STATE_MCU_RUNNING, &dev->phy.state))
-		return dev->mcu_ops->mcu_rr(dev, offset);
-	else
-		return mt76s_read_mailbox(dev, offset);
-}
-EXPORT_SYMBOL_GPL(mt76s_rr);
-
-void mt76s_wr(struct mt76_dev *dev, u32 offset, u32 val)
-{
-	if (test_bit(MT76_STATE_MCU_RUNNING, &dev->phy.state))
-		dev->mcu_ops->mcu_wr(dev, offset, val);
-	else
-		mt76s_write_mailbox(dev, offset, val);
-}
-EXPORT_SYMBOL_GPL(mt76s_wr);
-
-u32 mt76s_rmw(struct mt76_dev *dev, u32 offset, u32 mask, u32 val)
-{
-	val |= mt76s_rr(dev, offset) & ~mask;
-	mt76s_wr(dev, offset, val);
-
-	return val;
-}
-EXPORT_SYMBOL_GPL(mt76s_rmw);
-
-void mt76s_write_copy(struct mt76_dev *dev, u32 offset,
-		      const void *data, int len)
-{
-	const u32 *val = data;
-	int i;
-
-	for (i = 0; i < len / sizeof(u32); i++) {
-		mt76s_wr(dev, offset, val[i]);
-		offset += sizeof(u32);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76s_write_copy);
-
-void mt76s_read_copy(struct mt76_dev *dev, u32 offset,
-		     void *data, int len)
-{
-	u32 *val = data;
-	int i;
-
-	for (i = 0; i < len / sizeof(u32); i++) {
-		val[i] = mt76s_rr(dev, offset);
-		offset += sizeof(u32);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76s_read_copy);
-
-int mt76s_wr_rp(struct mt76_dev *dev, u32 base,
-		const struct mt76_reg_pair *data,
-		int len)
-{
-	int i;
-
-	for (i = 0; i < len; i++) {
-		mt76s_wr(dev, data->reg, data->value);
-		data++;
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76s_wr_rp);
-
-int mt76s_rd_rp(struct mt76_dev *dev, u32 base,
-		struct mt76_reg_pair *data, int len)
-{
-	int i;
-
-	for (i = 0; i < len; i++) {
-		data->value = mt76s_rr(dev, data->reg);
-		data++;
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76s_rd_rp);
-
-int mt76s_hw_init(struct mt76_dev *dev, struct sdio_func *func, int hw_ver)
-{
-	u32 status, ctrl;
-	int ret;
-
-	dev->sdio.hw_ver = hw_ver;
-
-	sdio_claim_host(func);
-
-	ret = sdio_enable_func(func);
-	if (ret < 0)
-		goto release;
-
-	/* Get ownership from the device */
-	sdio_writel(func, WHLPCR_INT_EN_CLR | WHLPCR_FW_OWN_REQ_CLR,
-		    MCR_WHLPCR, &ret);
-	if (ret < 0)
-		goto disable_func;
-
-	ret = readx_poll_timeout(mt76s_read_pcr, dev, status,
-				 status & WHLPCR_IS_DRIVER_OWN, 2000, 1000000);
-	if (ret < 0) {
-		dev_err(dev->dev, "Cannot get ownership from device");
-		goto disable_func;
-	}
-
-	ret = sdio_set_block_size(func, 512);
-	if (ret < 0)
-		goto disable_func;
-
-	/* Enable interrupt */
-	sdio_writel(func, WHLPCR_INT_EN_SET, MCR_WHLPCR, &ret);
-	if (ret < 0)
-		goto disable_func;
-
-	ctrl = WHIER_RX0_DONE_INT_EN | WHIER_TX_DONE_INT_EN;
-	if (hw_ver == MT76_CONNAC2_SDIO)
-		ctrl |= WHIER_RX1_DONE_INT_EN;
-	sdio_writel(func, ctrl, MCR_WHIER, &ret);
-	if (ret < 0)
-		goto disable_func;
-
-	switch (hw_ver) {
-	case MT76_CONNAC_SDIO:
-		/* set WHISR as read clear and Rx aggregation number as 16 */
-		ctrl = FIELD_PREP(MAX_HIF_RX_LEN_NUM, 16);
-		break;
-	default:
-		ctrl = sdio_readl(func, MCR_WHCR, &ret);
-		if (ret < 0)
-			goto disable_func;
-		ctrl &= ~MAX_HIF_RX_LEN_NUM_CONNAC2;
-		ctrl &= ~W_INT_CLR_CTRL; /* read clear */
-		ctrl |= FIELD_PREP(MAX_HIF_RX_LEN_NUM_CONNAC2, 0);
-		break;
-	}
-
-	sdio_writel(func, ctrl, MCR_WHCR, &ret);
-	if (ret < 0)
-		goto disable_func;
-
-	ret = sdio_claim_irq(func, mt76s_sdio_irq);
-	if (ret < 0)
-		goto disable_func;
-
-	sdio_release_host(func);
-
-	return 0;
-
-disable_func:
-	sdio_disable_func(func);
-release:
-	sdio_release_host(func);
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt76s_hw_init);
-
-int mt76s_alloc_rx_queue(struct mt76_dev *dev, enum mt76_rxq_id qid)
-{
-	struct mt76_queue *q = &dev->q_rx[qid];
-
-	spin_lock_init(&q->lock);
-	q->entry = devm_kcalloc(dev->dev,
-				MT76S_NUM_RX_ENTRIES, sizeof(*q->entry),
-				GFP_KERNEL);
-	if (!q->entry)
-		return -ENOMEM;
-
-	q->ndesc = MT76S_NUM_RX_ENTRIES;
-	q->head = q->tail = 0;
-	q->queued = 0;
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76s_alloc_rx_queue);
-
-static struct mt76_queue *mt76s_alloc_tx_queue(struct mt76_dev *dev)
-{
-	struct mt76_queue *q;
-
-	q = devm_kzalloc(dev->dev, sizeof(*q), GFP_KERNEL);
-	if (!q)
-		return ERR_PTR(-ENOMEM);
-
-	spin_lock_init(&q->lock);
-	q->entry = devm_kcalloc(dev->dev,
-				MT76S_NUM_TX_ENTRIES, sizeof(*q->entry),
-				GFP_KERNEL);
-	if (!q->entry)
-		return ERR_PTR(-ENOMEM);
-
-	q->ndesc = MT76S_NUM_TX_ENTRIES;
-
-	return q;
-}
-
-int mt76s_alloc_tx(struct mt76_dev *dev)
-{
-	struct mt76_queue *q;
-	int i;
-
-	for (i = 0; i <= MT_TXQ_PSD; i++) {
-		q = mt76s_alloc_tx_queue(dev);
-		if (IS_ERR(q))
-			return PTR_ERR(q);
-
-		dev->phy.q_tx[i] = q;
-	}
-
-	q = mt76s_alloc_tx_queue(dev);
-	if (IS_ERR(q))
-		return PTR_ERR(q);
-
-	dev->q_mcu[MT_MCUQ_WM] = q;
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76s_alloc_tx);
-
-static struct mt76_queue_entry *
-mt76s_get_next_rx_entry(struct mt76_queue *q)
-{
-	struct mt76_queue_entry *e = NULL;
-
-	spin_lock_bh(&q->lock);
-	if (q->queued > 0) {
-		e = &q->entry[q->tail];
-		q->tail = (q->tail + 1) % q->ndesc;
-		q->queued--;
-	}
-	spin_unlock_bh(&q->lock);
-
-	return e;
-}
-
-static int
-mt76s_process_rx_queue(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	int qid = q - &dev->q_rx[MT_RXQ_MAIN];
-	int nframes = 0;
-
-	while (true) {
-		struct mt76_queue_entry *e;
-
-		if (!test_bit(MT76_STATE_INITIALIZED, &dev->phy.state))
-			break;
-
-		e = mt76s_get_next_rx_entry(q);
-		if (!e || !e->skb)
-			break;
-
-		dev->drv->rx_skb(dev, MT_RXQ_MAIN, e->skb);
-		e->skb = NULL;
-		nframes++;
-	}
-	if (qid == MT_RXQ_MAIN)
-		mt76_rx_poll_complete(dev, MT_RXQ_MAIN, NULL);
-
-	return nframes;
-}
-
-static void mt76s_net_worker(struct mt76_worker *w)
-{
-	struct mt76_sdio *sdio = container_of(w, struct mt76_sdio,
-					      net_worker);
-	struct mt76_dev *dev = container_of(sdio, struct mt76_dev, sdio);
-	int i, nframes;
-
-	do {
-		nframes = 0;
-
-		local_bh_disable();
-		rcu_read_lock();
-
-		mt76_for_each_q_rx(dev, i)
-			nframes += mt76s_process_rx_queue(dev, &dev->q_rx[i]);
-
-		rcu_read_unlock();
-		local_bh_enable();
-	} while (nframes > 0);
-}
-
-static int mt76s_process_tx_queue(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	struct mt76_queue_entry entry;
-	int nframes = 0;
-	bool mcu;
-
-	if (!q)
-		return 0;
-
-	mcu = q == dev->q_mcu[MT_MCUQ_WM];
-	while (q->queued > 0) {
-		if (!q->entry[q->tail].done)
-			break;
-
-		entry = q->entry[q->tail];
-		q->entry[q->tail].done = false;
-
-		if (mcu) {
-			dev_kfree_skb(entry.skb);
-			entry.skb = NULL;
-		}
-
-		mt76_queue_tx_complete(dev, q, &entry);
-		nframes++;
-	}
-
-	if (!q->queued)
-		wake_up(&dev->tx_wait);
-
-	return nframes;
-}
-
-static void mt76s_status_worker(struct mt76_worker *w)
-{
-	struct mt76_sdio *sdio = container_of(w, struct mt76_sdio,
-					      status_worker);
-	struct mt76_dev *dev = container_of(sdio, struct mt76_dev, sdio);
-	bool resched = false;
-	int i, nframes;
-
-	do {
-		int ndata_frames = 0;
-
-		nframes = mt76s_process_tx_queue(dev, dev->q_mcu[MT_MCUQ_WM]);
-
-		for (i = 0; i <= MT_TXQ_PSD; i++)
-			ndata_frames += mt76s_process_tx_queue(dev,
-							       dev->phy.q_tx[i]);
-		nframes += ndata_frames;
-		if (ndata_frames > 0)
-			resched = true;
-
-		if (dev->drv->tx_status_data && ndata_frames > 0 &&
-		    !test_and_set_bit(MT76_READING_STATS, &dev->phy.state) &&
-		    !test_bit(MT76_STATE_SUSPEND, &dev->phy.state))
-			ieee80211_queue_work(dev->hw, &dev->sdio.stat_work);
-	} while (nframes > 0);
-
-	if (resched)
-		mt76_worker_schedule(&dev->tx_worker);
-}
-
-static void mt76s_tx_status_data(struct work_struct *work)
-{
-	struct mt76_sdio *sdio;
-	struct mt76_dev *dev;
-	u8 update = 1;
-	u16 count = 0;
-
-	sdio = container_of(work, struct mt76_sdio, stat_work);
-	dev = container_of(sdio, struct mt76_dev, sdio);
-
-	while (true) {
-		if (test_bit(MT76_REMOVED, &dev->phy.state))
-			break;
-
-		if (!dev->drv->tx_status_data(dev, &update))
-			break;
-		count++;
-	}
-
-	if (count && test_bit(MT76_STATE_RUNNING, &dev->phy.state))
-		ieee80211_queue_work(dev->hw, &sdio->stat_work);
-	else
-		clear_bit(MT76_READING_STATS, &dev->phy.state);
-}
-
-static int
-mt76s_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
-		   enum mt76_txq_id qid, struct sk_buff *skb,
-		   struct mt76_wcid *wcid, struct ieee80211_sta *sta)
-{
-	struct mt76_tx_info tx_info = {
-		.skb = skb,
-	};
-	int err, len = skb->len;
-	u16 idx = q->head;
-
-	if (q->queued == q->ndesc)
-		return -ENOSPC;
-
-	skb->prev = skb->next = NULL;
-	err = dev->drv->tx_prepare_skb(dev, NULL, qid, wcid, sta, &tx_info);
-	if (err < 0)
-		return err;
-
-	q->entry[q->head].skb = tx_info.skb;
-	q->entry[q->head].buf_sz = len;
-	q->entry[q->head].wcid = 0xffff;
-
-	smp_wmb();
-
-	q->head = (q->head + 1) % q->ndesc;
-	q->queued++;
-
-	return idx;
-}
-
-static int
-mt76s_tx_queue_skb_raw(struct mt76_dev *dev, struct mt76_queue *q,
-		       struct sk_buff *skb, u32 tx_info)
-{
-	int ret = -ENOSPC, len = skb->len, pad;
-
-	if (q->queued == q->ndesc)
-		goto error;
-
-	pad = round_up(skb->len, 4) - skb->len;
-	ret = mt76_skb_adjust_pad(skb, pad);
-	if (ret)
-		goto error;
-
-	spin_lock_bh(&q->lock);
-
-	q->entry[q->head].buf_sz = len;
-	q->entry[q->head].skb = skb;
-	q->head = (q->head + 1) % q->ndesc;
-	q->queued++;
-
-	spin_unlock_bh(&q->lock);
-
-	return 0;
-
-error:
-	dev_kfree_skb(skb);
-
-	return ret;
-}
-
-static void mt76s_tx_kick(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	struct mt76_sdio *sdio = &dev->sdio;
-
-	mt76_worker_schedule(&sdio->txrx_worker);
-}
-
-static const struct mt76_queue_ops sdio_queue_ops = {
-	.tx_queue_skb = mt76s_tx_queue_skb,
-	.kick = mt76s_tx_kick,
-	.tx_queue_skb_raw = mt76s_tx_queue_skb_raw,
-};
-
-void mt76s_deinit(struct mt76_dev *dev)
-{
-	struct mt76_sdio *sdio = &dev->sdio;
-	int i;
-
-	mt76_worker_teardown(&sdio->txrx_worker);
-	mt76_worker_teardown(&sdio->status_worker);
-	mt76_worker_teardown(&sdio->net_worker);
-
-	cancel_work_sync(&sdio->stat_work);
-	clear_bit(MT76_READING_STATS, &dev->phy.state);
-
-	mt76_tx_status_check(dev, true);
-
-	sdio_claim_host(sdio->func);
-	sdio_release_irq(sdio->func);
-	sdio_release_host(sdio->func);
-
-	mt76_for_each_q_rx(dev, i) {
-		struct mt76_queue *q = &dev->q_rx[i];
-		int j;
-
-		for (j = 0; j < q->ndesc; j++) {
-			struct mt76_queue_entry *e = &q->entry[j];
-
-			if (!e->skb)
-				continue;
-
-			dev_kfree_skb(e->skb);
-			e->skb = NULL;
-		}
-	}
-}
-EXPORT_SYMBOL_GPL(mt76s_deinit);
-
-int mt76s_init(struct mt76_dev *dev, struct sdio_func *func,
-	       const struct mt76_bus_ops *bus_ops)
-{
-	struct mt76_sdio *sdio = &dev->sdio;
-	u32 host_max_cap;
-	int err;
-
-	err = mt76_worker_setup(dev->hw, &sdio->status_worker,
-				mt76s_status_worker, "sdio-status");
-	if (err)
-		return err;
-
-	err = mt76_worker_setup(dev->hw, &sdio->net_worker, mt76s_net_worker,
-				"sdio-net");
-	if (err)
-		return err;
-
-	sched_set_fifo_low(sdio->status_worker.task);
-	sched_set_fifo_low(sdio->net_worker.task);
-
-	INIT_WORK(&sdio->stat_work, mt76s_tx_status_data);
-
-	dev->queue_ops = &sdio_queue_ops;
-	dev->bus = bus_ops;
-	dev->sdio.func = func;
-
-	host_max_cap = min_t(u32, func->card->host->max_req_size,
-			     func->cur_blksize *
-			     func->card->host->max_blk_count);
-	dev->sdio.xmit_buf_sz = min_t(u32, host_max_cap, MT76S_XMIT_BUF_SZ);
-	dev->sdio.xmit_buf = devm_kmalloc(dev->dev, dev->sdio.xmit_buf_sz,
-					  GFP_KERNEL);
-	if (!dev->sdio.xmit_buf)
-		err = -ENOMEM;
-
-	return err;
-}
-EXPORT_SYMBOL_GPL(mt76s_init);
-
-MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
-MODULE_AUTHOR("Lorenzo Bianconi <lorenzo@kernel.org>");
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/sdio.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/sdio.h
deleted file mode 100644
index 27d5d20..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/sdio.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc.
- *
- * Author: Sean Wang <sean.wang@mediatek.com>
- */
-
-#ifndef __MT76S_H
-#define __MT76S_H
-
-#define MT_PSE_PAGE_SZ			128
-
-#define MCR_WCIR			0x0000
-#define MCR_WHLPCR			0x0004
-#define WHLPCR_FW_OWN_REQ_CLR		BIT(9)
-#define WHLPCR_FW_OWN_REQ_SET		BIT(8)
-#define WHLPCR_IS_DRIVER_OWN		BIT(8)
-#define WHLPCR_INT_EN_CLR		BIT(1)
-#define WHLPCR_INT_EN_SET		BIT(0)
-
-#define MCR_WSDIOCSR			0x0008
-#define MCR_WHCR			0x000C
-#define W_INT_CLR_CTRL			BIT(1)
-#define RECV_MAILBOX_RD_CLR_EN		BIT(2)
-#define WF_SYS_RSTB			BIT(4) /* supported in CONNAC2 */
-#define WF_WHOLE_PATH_RSTB		BIT(5) /* supported in CONNAC2 */
-#define WF_SDIO_WF_PATH_RSTB		BIT(6) /* supported in CONNAC2 */
-#define MAX_HIF_RX_LEN_NUM		GENMASK(13, 8)
-#define MAX_HIF_RX_LEN_NUM_CONNAC2	GENMASK(14, 8) /* supported in CONNAC2 */
-#define WF_RST_DONE			BIT(15) /* supported in CONNAC2 */
-#define RX_ENHANCE_MODE			BIT(16)
-
-#define MCR_WHISR			0x0010
-#define MCR_WHIER			0x0014
-#define WHIER_D2H_SW_INT		GENMASK(31, 8)
-#define WHIER_FW_OWN_BACK_INT_EN	BIT(7)
-#define WHIER_ABNORMAL_INT_EN		BIT(6)
-#define WHIER_WDT_INT_EN		BIT(5) /* supported in CONNAC2 */
-#define WHIER_RX1_DONE_INT_EN		BIT(2)
-#define WHIER_RX0_DONE_INT_EN		BIT(1)
-#define WHIER_TX_DONE_INT_EN		BIT(0)
-#define WHIER_DEFAULT			(WHIER_RX0_DONE_INT_EN	| \
-					 WHIER_RX1_DONE_INT_EN	| \
-					 WHIER_TX_DONE_INT_EN	| \
-					 WHIER_ABNORMAL_INT_EN	| \
-					 WHIER_D2H_SW_INT)
-
-#define MCR_WASR			0x0020
-#define MCR_WSICR			0x0024
-#define MCR_WTSR0			0x0028
-#define TQ0_CNT				GENMASK(7, 0)
-#define TQ1_CNT				GENMASK(15, 8)
-#define TQ2_CNT				GENMASK(23, 16)
-#define TQ3_CNT				GENMASK(31, 24)
-
-#define MCR_WTSR1			0x002c
-#define TQ4_CNT				GENMASK(7, 0)
-#define TQ5_CNT				GENMASK(15, 8)
-#define TQ6_CNT				GENMASK(23, 16)
-#define TQ7_CNT				GENMASK(31, 24)
-
-#define MCR_WTDR1			0x0034
-#define MCR_WRDR0			0x0050
-#define MCR_WRDR1			0x0054
-#define MCR_WRDR(p)			(0x0050 + 4 * (p))
-#define MCR_H2DSM0R			0x0070
-#define H2D_SW_INT_READ			BIT(16)
-#define H2D_SW_INT_WRITE		BIT(17)
-#define H2D_SW_INT_CLEAR_MAILBOX_ACK	BIT(22)
-
-#define MCR_H2DSM1R			0x0074
-#define MCR_D2HRM0R			0x0078
-#define MCR_D2HRM1R			0x007c
-#define MCR_D2HRM2R			0x0080
-#define MCR_WRPLR			0x0090
-#define RX0_PACKET_LENGTH		GENMASK(15, 0)
-#define RX1_PACKET_LENGTH		GENMASK(31, 16)
-
-#define MCR_WTMDR			0x00b0
-#define MCR_WTMCR			0x00b4
-#define MCR_WTMDPCR0			0x00b8
-#define MCR_WTMDPCR1			0x00bc
-#define MCR_WPLRCR			0x00d4
-#define MCR_WSR				0x00D8
-#define MCR_CLKIOCR			0x0100
-#define MCR_CMDIOCR			0x0104
-#define MCR_DAT0IOCR			0x0108
-#define MCR_DAT1IOCR			0x010C
-#define MCR_DAT2IOCR			0x0110
-#define MCR_DAT3IOCR			0x0114
-#define MCR_CLKDLYCR			0x0118
-#define MCR_CMDDLYCR			0x011C
-#define MCR_ODATDLYCR			0x0120
-#define MCR_IDATDLYCR1			0x0124
-#define MCR_IDATDLYCR2			0x0128
-#define MCR_ILCHCR			0x012C
-#define MCR_WTQCR0			0x0130
-#define MCR_WTQCR1			0x0134
-#define MCR_WTQCR2			0x0138
-#define MCR_WTQCR3			0x013C
-#define MCR_WTQCR4			0x0140
-#define MCR_WTQCR5			0x0144
-#define MCR_WTQCR6			0x0148
-#define MCR_WTQCR7			0x014C
-#define MCR_WTQCR(x)                   (0x130 + 4 * (x))
-#define TXQ_CNT_L			GENMASK(15, 0)
-#define TXQ_CNT_H			GENMASK(31, 16)
-
-#define MCR_SWPCDBGR			0x0154
-
-#define MCR_H2DSM2R			0x0160 /* supported in CONNAC2 */
-#define MCR_H2DSM3R			0x0164 /* supported in CONNAC2 */
-#define MCR_D2HRM3R			0x0174 /* supported in CONNAC2 */
-#define D2HRM3R_IS_DRIVER_OWN		BIT(0)
-#define MCR_WTQCR8			0x0190 /* supported in CONNAC2 */
-#define MCR_WTQCR9			0x0194 /* supported in CONNAC2 */
-#define MCR_WTQCR10			0x0198 /* supported in CONNAC2 */
-#define MCR_WTQCR11			0x019C /* supported in CONNAC2 */
-#define MCR_WTQCR12			0x01A0 /* supported in CONNAC2 */
-#define MCR_WTQCR13			0x01A4 /* supported in CONNAC2 */
-#define MCR_WTQCR14			0x01A8 /* supported in CONNAC2 */
-#define MCR_WTQCR15			0x01AC /* supported in CONNAC2 */
-
-enum mt76_connac_sdio_ver {
-	MT76_CONNAC_SDIO,
-	MT76_CONNAC2_SDIO,
-};
-
-struct mt76s_intr {
-	u32 isr;
-	u32 *rec_mb;
-	struct {
-		u32 *wtqcr;
-	} tx;
-	struct {
-		u16 *len[2];
-		u16 *num;
-	} rx;
-};
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/sdio_txrx.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/sdio_txrx.c
deleted file mode 100644
index bfc4de5..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/sdio_txrx.c
+++ /dev/null
@@ -1,380 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 MediaTek Inc.
- *
- * Author: Felix Fietkau <nbd@nbd.name>
- *	   Lorenzo Bianconi <lorenzo@kernel.org>
- *	   Sean Wang <sean.wang@mediatek.com>
- */
-
-#include <linux/kernel.h>
-#include <linux/iopoll.h>
-#include <linux/module.h>
-
-#include <linux/mmc/host.h>
-#include <linux/mmc/sdio_ids.h>
-#include <linux/mmc/sdio_func.h>
-
-#include "trace.h"
-#include "sdio.h"
-#include "mt76.h"
-
-static int mt76s_refill_sched_quota(struct mt76_dev *dev, u32 *data)
-{
-	u32 ple_ac_data_quota[] = {
-		FIELD_GET(TXQ_CNT_L, data[4]), /* VO */
-		FIELD_GET(TXQ_CNT_H, data[3]), /* VI */
-		FIELD_GET(TXQ_CNT_L, data[3]), /* BE */
-		FIELD_GET(TXQ_CNT_H, data[2]), /* BK */
-	};
-	u32 pse_ac_data_quota[] = {
-		FIELD_GET(TXQ_CNT_H, data[1]), /* VO */
-		FIELD_GET(TXQ_CNT_L, data[1]), /* VI */
-		FIELD_GET(TXQ_CNT_H, data[0]), /* BE */
-		FIELD_GET(TXQ_CNT_L, data[0]), /* BK */
-	};
-	u32 pse_mcu_quota = FIELD_GET(TXQ_CNT_L, data[2]);
-	u32 pse_data_quota = 0, ple_data_quota = 0;
-	struct mt76_sdio *sdio = &dev->sdio;
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(pse_ac_data_quota); i++) {
-		pse_data_quota += pse_ac_data_quota[i];
-		ple_data_quota += ple_ac_data_quota[i];
-	}
-
-	if (!pse_data_quota && !ple_data_quota && !pse_mcu_quota)
-		return 0;
-
-	sdio->sched.pse_mcu_quota += pse_mcu_quota;
-	sdio->sched.pse_data_quota += pse_data_quota;
-	sdio->sched.ple_data_quota += ple_data_quota;
-
-	return pse_data_quota + ple_data_quota + pse_mcu_quota;
-}
-
-static struct sk_buff *
-mt76s_build_rx_skb(void *data, int data_len, int buf_len)
-{
-	int len = min_t(int, data_len, MT_SKB_HEAD_LEN);
-	struct sk_buff *skb;
-
-	skb = alloc_skb(len, GFP_KERNEL);
-	if (!skb)
-		return NULL;
-
-	skb_put_data(skb, data, len);
-	if (data_len > len) {
-		struct page *page;
-
-		data += len;
-		page = virt_to_head_page(data);
-		skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
-				page, data - page_address(page),
-				data_len - len, buf_len);
-		get_page(page);
-	}
-
-	return skb;
-}
-
-static int
-mt76s_rx_run_queue(struct mt76_dev *dev, enum mt76_rxq_id qid,
-		   struct mt76s_intr *intr)
-{
-	struct mt76_queue *q = &dev->q_rx[qid];
-	struct mt76_sdio *sdio = &dev->sdio;
-	int len = 0, err, i;
-	struct page *page;
-	u8 *buf, *end;
-
-	for (i = 0; i < intr->rx.num[qid]; i++)
-		len += round_up(intr->rx.len[qid][i] + 4, 4);
-
-	if (!len)
-		return 0;
-
-	if (len > sdio->func->cur_blksize)
-		len = roundup(len, sdio->func->cur_blksize);
-
-	page = __dev_alloc_pages(GFP_KERNEL, get_order(len));
-	if (!page)
-		return -ENOMEM;
-
-	buf = page_address(page);
-
-	sdio_claim_host(sdio->func);
-	err = sdio_readsb(sdio->func, buf, MCR_WRDR(qid), len);
-	sdio_release_host(sdio->func);
-
-	if (err < 0) {
-		dev_err(dev->dev, "sdio read data failed:%d\n", err);
-		put_page(page);
-		return err;
-	}
-
-	end = buf + len;
-	i = 0;
-
-	while (i < intr->rx.num[qid] && buf < end) {
-		int index = (q->head + i) % q->ndesc;
-		struct mt76_queue_entry *e = &q->entry[index];
-		__le32 *rxd = (__le32 *)buf;
-
-		/* parse rxd to get the actual packet length */
-		len = le32_get_bits(rxd[0], GENMASK(15, 0));
-
-		/* Optimized path for TXS */
-		if (!dev->drv->rx_check || dev->drv->rx_check(dev, buf, len)) {
-			e->skb = mt76s_build_rx_skb(buf, len,
-						    round_up(len + 4, 4));
-			if (!e->skb)
-				break;
-
-			if (q->queued + i + 1 == q->ndesc)
-				break;
-			i++;
-		}
-		buf += round_up(len + 4, 4);
-	}
-	put_page(page);
-
-	spin_lock_bh(&q->lock);
-	q->head = (q->head + i) % q->ndesc;
-	q->queued += i;
-	spin_unlock_bh(&q->lock);
-
-	return i;
-}
-
-static int mt76s_rx_handler(struct mt76_dev *dev)
-{
-	struct mt76_sdio *sdio = &dev->sdio;
-	struct mt76s_intr intr;
-	int nframes = 0, ret;
-
-	ret = sdio->parse_irq(dev, &intr);
-	if (ret)
-		return ret;
-
-	trace_dev_irq(dev, intr.isr, 0);
-
-	if (intr.isr & WHIER_RX0_DONE_INT_EN) {
-		ret = mt76s_rx_run_queue(dev, 0, &intr);
-		if (ret > 0) {
-			mt76_worker_schedule(&sdio->net_worker);
-			nframes += ret;
-		}
-	}
-
-	if (intr.isr & WHIER_RX1_DONE_INT_EN) {
-		ret = mt76s_rx_run_queue(dev, 1, &intr);
-		if (ret > 0) {
-			mt76_worker_schedule(&sdio->net_worker);
-			nframes += ret;
-		}
-	}
-
-	nframes += !!mt76s_refill_sched_quota(dev, intr.tx.wtqcr);
-
-	return nframes;
-}
-
-static int
-mt76s_tx_pick_quota(struct mt76_sdio *sdio, bool mcu, int buf_sz,
-		    int *pse_size, int *ple_size)
-{
-	int pse_sz;
-
-	pse_sz = DIV_ROUND_UP(buf_sz + sdio->sched.deficit,
-			      sdio->sched.pse_page_size);
-
-	if (mcu && sdio->hw_ver == MT76_CONNAC2_SDIO)
-		pse_sz = 1;
-
-	if (mcu) {
-		if (sdio->sched.pse_mcu_quota < *pse_size + pse_sz)
-			return -EBUSY;
-	} else {
-		if (sdio->sched.pse_data_quota < *pse_size + pse_sz ||
-		    sdio->sched.ple_data_quota < *ple_size + 1)
-			return -EBUSY;
-
-		*ple_size = *ple_size + 1;
-	}
-	*pse_size = *pse_size + pse_sz;
-
-	return 0;
-}
-
-static void
-mt76s_tx_update_quota(struct mt76_sdio *sdio, bool mcu, int pse_size,
-		      int ple_size)
-{
-	if (mcu) {
-		sdio->sched.pse_mcu_quota -= pse_size;
-	} else {
-		sdio->sched.pse_data_quota -= pse_size;
-		sdio->sched.ple_data_quota -= ple_size;
-	}
-}
-
-static int __mt76s_xmit_queue(struct mt76_dev *dev, u8 *data, int len)
-{
-	struct mt76_sdio *sdio = &dev->sdio;
-	int err;
-
-	if (len > sdio->func->cur_blksize)
-		len = roundup(len, sdio->func->cur_blksize);
-
-	sdio_claim_host(sdio->func);
-	err = sdio_writesb(sdio->func, MCR_WTDR1, data, len);
-	sdio_release_host(sdio->func);
-
-	if (err)
-		dev_err(dev->dev, "sdio write failed: %d\n", err);
-
-	return err;
-}
-
-static int mt76s_tx_run_queue(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	int err, nframes = 0, len = 0, pse_sz = 0, ple_sz = 0;
-	bool mcu = q == dev->q_mcu[MT_MCUQ_WM];
-	struct mt76_sdio *sdio = &dev->sdio;
-	u8 pad;
-
-	while (q->first != q->head) {
-		struct mt76_queue_entry *e = &q->entry[q->first];
-		struct sk_buff *iter;
-
-		smp_rmb();
-
-		if (test_bit(MT76_MCU_RESET, &dev->phy.state))
-			goto next;
-
-		if (!test_bit(MT76_STATE_MCU_RUNNING, &dev->phy.state)) {
-			__skb_put_zero(e->skb, 4);
-			err = __mt76s_xmit_queue(dev, e->skb->data,
-						 e->skb->len);
-			if (err)
-				return err;
-
-			goto next;
-		}
-
-		pad = roundup(e->skb->len, 4) - e->skb->len;
-		if (len + e->skb->len + pad + 4 > dev->sdio.xmit_buf_sz)
-			break;
-
-		if (mt76s_tx_pick_quota(sdio, mcu, e->buf_sz, &pse_sz,
-					&ple_sz))
-			break;
-
-		memcpy(sdio->xmit_buf + len, e->skb->data, skb_headlen(e->skb));
-		len += skb_headlen(e->skb);
-		nframes++;
-
-		skb_walk_frags(e->skb, iter) {
-			memcpy(sdio->xmit_buf + len, iter->data, iter->len);
-			len += iter->len;
-			nframes++;
-		}
-
-		if (unlikely(pad)) {
-			memset(sdio->xmit_buf + len, 0, pad);
-			len += pad;
-		}
-next:
-		q->first = (q->first + 1) % q->ndesc;
-		e->done = true;
-	}
-
-	if (nframes) {
-		memset(sdio->xmit_buf + len, 0, 4);
-		err = __mt76s_xmit_queue(dev, sdio->xmit_buf, len + 4);
-		if (err)
-			return err;
-	}
-	mt76s_tx_update_quota(sdio, mcu, pse_sz, ple_sz);
-
-	mt76_worker_schedule(&sdio->status_worker);
-
-	return nframes;
-}
-
-void mt76s_txrx_worker(struct mt76_sdio *sdio)
-{
-	struct mt76_dev *dev = container_of(sdio, struct mt76_dev, sdio);
-	int i, nframes, ret;
-
-	/* disable interrupt */
-	sdio_claim_host(sdio->func);
-	sdio_writel(sdio->func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, NULL);
-	sdio_release_host(sdio->func);
-
-	do {
-		nframes = 0;
-
-		/* tx */
-		for (i = 0; i <= MT_TXQ_PSD; i++) {
-			ret = mt76s_tx_run_queue(dev, dev->phy.q_tx[i]);
-			if (ret > 0)
-				nframes += ret;
-		}
-		ret = mt76s_tx_run_queue(dev, dev->q_mcu[MT_MCUQ_WM]);
-		if (ret > 0)
-			nframes += ret;
-
-		/* rx */
-		ret = mt76s_rx_handler(dev);
-		if (ret > 0)
-			nframes += ret;
-
-		if (test_bit(MT76_MCU_RESET, &dev->phy.state) ||
-		    test_bit(MT76_STATE_SUSPEND, &dev->phy.state)) {
-			if (!mt76s_txqs_empty(dev))
-				continue;
-			else
-				wake_up(&sdio->wait);
-		}
-	} while (nframes > 0);
-
-	/* enable interrupt */
-	sdio_claim_host(sdio->func);
-	sdio_writel(sdio->func, WHLPCR_INT_EN_SET, MCR_WHLPCR, NULL);
-	sdio_release_host(sdio->func);
-}
-EXPORT_SYMBOL_GPL(mt76s_txrx_worker);
-
-void mt76s_sdio_irq(struct sdio_func *func)
-{
-	struct mt76_dev *dev = sdio_get_drvdata(func);
-	struct mt76_sdio *sdio = &dev->sdio;
-
-	if (!test_bit(MT76_STATE_INITIALIZED, &dev->phy.state) ||
-	    test_bit(MT76_MCU_RESET, &dev->phy.state))
-		return;
-
-	sdio_writel(sdio->func, WHLPCR_INT_EN_CLR, MCR_WHLPCR, NULL);
-	mt76_worker_schedule(&sdio->txrx_worker);
-}
-EXPORT_SYMBOL_GPL(mt76s_sdio_irq);
-
-bool mt76s_txqs_empty(struct mt76_dev *dev)
-{
-	struct mt76_queue *q;
-	int i;
-
-	for (i = 0; i <= MT_TXQ_PSD + 1; i++) {
-		if (i <= MT_TXQ_PSD)
-			q = dev->phy.q_tx[i];
-		else
-			q = dev->q_mcu[MT_MCUQ_WM];
-
-		if (q->first != q->head)
-			return false;
-	}
-
-	return true;
-}
-EXPORT_SYMBOL_GPL(mt76s_txqs_empty);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tags b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tags
deleted file mode 100644
index da62c7e..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tags
+++ /dev/null
@@ -1,882 +0,0 @@
-!_TAG_FILE_FORMAT	2	/extended format; --format=1 will not append ;" to lines/
-!_TAG_FILE_SORTED	1	/0=unsorted, 1=sorted, 2=foldcase/
-!_TAG_PROGRAM_AUTHOR	Darren Hiebert	/dhiebert@users.sourceforge.net/
-!_TAG_PROGRAM_NAME	Exuberant Ctags	//
-!_TAG_PROGRAM_URL	http://ctags.sourceforge.net	/official site/
-!_TAG_PROGRAM_VERSION	5.9~svn20110310	//
-BCN_TX_ESTIMATE_TIME	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	2686;"	d	file:
-BF_PROCESSING	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	3022;"	d	file:
-CHAN2G	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	9;"	d	file:
-CHAN5G	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	16;"	d	file:
-CHAN6G	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	23;"	d	file:
-CREATE_TRACE_POINTS	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/trace.c	9;"	d	file:
-DEFAULT_HE_DURATION_RTS_THRES	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	1326;"	d	file:
-DEFAULT_HE_DURATION_RTS_THRES	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	515;"	d	file:
-DEFAULT_HE_DURATION_RTS_THRES	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	564;"	d	file:
-DEFAULT_HE_PE_DURATION	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	1325;"	d	file:
-DEFAULT_HE_PE_DURATION	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	514;"	d	file:
-DEFAULT_HE_PE_DURATION	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	563;"	d	file:
-ENTER_PM_STATE	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	2782;"	d	file:
-ENTER_PM_STATE	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	3280;"	d	file:
-EXIT_PM_STATE	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	2783;"	d	file:
-EXIT_PM_STATE	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	3279;"	d	file:
-HE_BITS	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	8;"	d	file:
-HE_BITS	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	15;"	d	file:
-HE_MAC	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	614;"	d	file:
-HE_MAC	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	33;"	d	file:
-HE_MAC	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	72;"	d	file:
-HE_PHY	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	613;"	d	file:
-HE_PHY	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	32;"	d	file:
-HE_PHY	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	71;"	d	file:
-HE_PREP	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	9;"	d	file:
-HE_PREP	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	16;"	d	file:
-HIF_TXD_V2_1	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	247;"	d	file:
-HW_TICK	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	81;"	d	file:
-MAX_PAGE_IDX_MASK	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2694;"	d	file:
-MAX_PAGE_IDX_MASK	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2808;"	d	file:
-MCU_EDCA_AC_PARAM	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2495;"	d	file:
-MCU_PATCH_ADDRESS	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	51;"	d	file:
-MCU_PATCH_ADDRESS	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	30;"	d	file:
-MCU_PATCH_ADDRESS	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	69;"	d	file:
-MT76_CONNAC_SCAN_CHANNEL_TIME	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	1548;"	d	file:
-MT76_FILTER	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	513;"	d	file:
-MT76_FILTER	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	435;"	d	file:
-MT7915_SSTATS_LEN	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	1215;"	d	file:
-MT7996_BF_MAX_SIZE	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	3021;"	d	file:
-MT7996_SSTATS_LEN	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	1094;"	d	file:
-MT_BF_PROCESSING	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	3231;"	d	file:
-MT_SPR_ENABLE	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	3255;"	d	file:
-MT_SPR_ENABLE	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	3073;"	d	file:
-MT_STA_BSS_GROUP	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	1600;"	d	file:
-MT_STA_BSS_GROUP	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	1538;"	d	file:
-MU_PREP	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	775;"	d	file:
-MU_PREP	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	288;"	d	file:
-OFFLOAD_TX_MODE_MU	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	1920;"	d	file:
-OFFLOAD_TX_MODE_MU	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	1928;"	d	file:
-OFFLOAD_TX_MODE_SU	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	1919;"	d	file:
-OFFLOAD_TX_MODE_SU	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	1927;"	d	file:
-PAGE_IDX_MASK	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2695;"	d	file:
-PAGE_IDX_MASK	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2809;"	d	file:
-PER_PAGE_SIZE	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2696;"	d	file:
-PER_PAGE_SIZE	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2810;"	d	file:
-Q_READ	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	10;"	d	file:
-Q_WRITE	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	11;"	d	file:
-RATE_POWER_INFO	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	3114;"	d	file:
-RX_AIRTIME_BITWISE_CTRL	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2215;"	d	file:
-RX_AIRTIME_CLEAR_EN	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2216;"	d	file:
-RX_AIRTIME_FEATURE_CTRL	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2214;"	d	file:
-TO_HW_TICK	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	82;"	d	file:
-TWT_AGRT_ANNOUNCE	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	3407;"	d	file:
-TWT_AGRT_ANNOUNCE	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	3222;"	d	file:
-TWT_AGRT_PROTECT	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	3408;"	d	file:
-TWT_AGRT_PROTECT	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	3223;"	d	file:
-TWT_AGRT_TRIGGER	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	3406;"	d	file:
-TWT_AGRT_TRIGGER	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	3221;"	d	file:
-TXD_CMP_MAP1	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	541;"	d	file:
-TXD_CMP_MAP2	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	542;"	d	file:
-TX_CMD_MODE	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2398;"	d	file:
-UNI_EVENT_FW_LOG_FORMAT	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	350;"	d	file:
-UNI_EVENT_IE_COUNTDOWN_BCC	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	400;"	d	file:
-UNI_EVENT_IE_COUNTDOWN_CSA	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	399;"	d	file:
-WMM_AIFS_SET	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2496;"	d	file:
-WMM_CW_MAX_SET	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2498;"	d	file:
-WMM_CW_MIN_SET	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2497;"	d	file:
-WMM_PARAM_SET	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2500;"	d	file:
-WMM_TXOP_SET	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2499;"	d	file:
-__mt76_connac_mcu_alloc_sta_req	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(__mt76_connac_mcu_alloc_sta_req);$/;"	v
-__mt76_connac_mcu_alloc_sta_req	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^__mt76_connac_mcu_alloc_sta_req(struct mt76_dev *dev, struct mt76_vif *mvif,$/;"	f	signature:(struct mt76_dev *dev, struct mt76_vif *mvif, struct mt76_wcid *wcid, int len)
-__mt76_csa_check	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^__mt76_csa_check(void *priv, u8 *mac, struct ieee80211_vif *vif)$/;"	f	file:	signature:(void *priv, u8 *mac, struct ieee80211_vif *vif)
-__mt76_csa_finish	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^__mt76_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)$/;"	f	file:	signature:(void *priv, u8 *mac, struct ieee80211_vif *vif)
-__mt76_get_txwi	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^__mt76_get_txwi(struct mt76_dev *dev)$/;"	f	file:	signature:(struct mt76_dev *dev)
-__mt76_sta_remove	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(__mt76_sta_remove);$/;"	v
-__mt76_sta_remove	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void __mt76_sta_remove(struct mt76_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt76_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-__mt7915_get_tsf	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^u64 __mt7915_get_tsf(struct ieee80211_hw *hw, struct mt7915_vif *mvif)$/;"	f	signature:(struct ieee80211_hw *hw, struct mt7915_vif *mvif)
-__mt7996_get_tsf	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^u64 __mt7996_get_tsf(struct ieee80211_hw *hw, struct mt7996_vif *mvif)$/;"	f	signature:(struct ieee80211_hw *hw, struct mt7996_vif *mvif)
-__mt7996_mcu_alloc_bss_req	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^__mt7996_mcu_alloc_bss_req(struct mt76_dev *dev, struct mt76_vif *mvif, int len)$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_vif *mvif, int len)
-__packed	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^} __packed;$/;"	v	typeref:struct:mt7996_fw_region
-__packed	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^} __packed;$/;"	v	typeref:struct:mt7996_fw_trailer
-__packed	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^} __packed;$/;"	v	typeref:struct:mt7996_patch_hdr
-__packed	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^} __packed;$/;"	v	typeref:struct:mt7996_patch_sec
-__req_field	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2461;"	d	file:
-__req_field	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2469;"	d	file:
-__req_field	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2577;"	d	file:
-__req_field	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2585;"	d	file:
-__req_field_u32	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2504;"	d	file:
-__req_field_u32	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2521;"	d	file:
-__req_field_u32	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2620;"	d	file:
-__req_field_u32	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2637;"	d	file:
-__req_field_u8	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2503;"	d	file:
-__req_field_u8	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2520;"	d	file:
-__req_field_u8	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2619;"	d	file:
-__req_field_u8	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2636;"	d	file:
-__res_u64	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2974;"	d	file:
-__res_u64	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	2985;"	d	file:
-__res_u64	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2983;"	d	file:
-__res_u64	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	2995;"	d	file:
-__sta_phy_bitrate_mask_check	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	1378;"	d	file:
-__sta_phy_bitrate_mask_check	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	1406;"	d	file:
-addr	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^			__be32 addr;$/;"	m	struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-addr	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__le32 addr;$/;"	m	struct:mt7996_fw_region	file:	access:public
-align_len	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^			__be32 align_len;$/;"	m	struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-build_date	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	char build_date[15];$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-build_date	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	char build_date[16];$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-checksum	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be16 checksum;$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-chip_id	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 chip_id;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-crc	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 crc;$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-crc	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u32 crc;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-decomp_blk_sz	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__le32 decomp_blk_sz;$/;"	m	struct:mt7996_fw_region	file:	access:public
-decomp_crc	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__le32 decomp_crc;$/;"	m	struct:mt7996_fw_region	file:	access:public
-decomp_len	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__le32 decomp_len;$/;"	m	struct:mt7996_fw_region	file:	access:public
-desc	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	} desc;$/;"	m	struct:mt7996_patch_hdr	typeref:struct:mt7996_patch_hdr::__anon1	file:	access:public
-eco_code	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 eco_code;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-etsi_radar_specs	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^static const struct mt7996_dfs_radar_spec etsi_radar_specs = {$/;"	v	typeref:struct:mt7996_dfs_radar_spec	file:
-fcc_radar_specs	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^static const struct mt7996_dfs_radar_spec fcc_radar_specs = {$/;"	v	typeref:struct:mt7996_dfs_radar_spec	file:
-feature	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 feature;$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-feature_set	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 feature_set;$/;"	m	struct:mt7996_fw_region	file:	access:public
-format_flag	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 format_flag;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-format_ver	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 format_ver;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-fw_name	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	10;"	d	file:
-fw_name_var	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	26;"	d	file:
-fw_ver	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	char fw_ver[10];$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-get_free_idx	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static inline int get_free_idx(u32 mask, u8 start, u8 end)$/;"	f	file:	signature:(u32 mask, u8 start, u8 end)
-get_free_idx	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static inline int get_free_idx(u32 mask, u8 start, u8 end)$/;"	f	file:	signature:(u32 mask, u8 start, u8 end)
-get_omac_idx	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static int get_omac_idx(enum nl80211_iftype type, u64 mask)$/;"	f	file:	signature:(enum nl80211_iftype type, u64 mask)
-get_omac_idx	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static int get_omac_idx(enum nl80211_iftype type, u64 mask)$/;"	f	file:	signature:(enum nl80211_iftype type, u64 mask)
-hw_sw_ver	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be32 hw_sw_ver;$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-if_comb	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^static const struct ieee80211_iface_combination if_comb[] = {$/;"	v	typeref:struct:ieee80211_iface_combination	file:
-if_limits	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^static const struct ieee80211_iface_limit if_limits[] = {$/;"	v	typeref:struct:ieee80211_iface_limit	file:
-info	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		} info;$/;"	m	union:mt7996_patch_sec::__anon2	typeref:struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-jp_radar_specs	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^static const struct mt7996_dfs_radar_spec jp_radar_specs = {$/;"	v	typeref:struct:mt7996_dfs_radar_spec	file:
-len	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^			__be32 len;$/;"	m	struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-len	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__le32 len;$/;"	m	struct:mt7996_fw_region	file:	access:public
-mt76_add_fragment	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_add_fragment(struct mt76_dev *dev, struct mt76_queue *q, void *data,$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q, void *data, int len, bool more)
-mt76_airtime_check	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_airtime_check(struct mt76_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt76_dev *dev, struct sk_buff *skb)
-mt76_airtime_flush_ampdu	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_airtime_flush_ampdu(struct mt76_dev *dev)$/;"	f	file:	signature:(struct mt76_dev *dev)
-mt76_airtime_report	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_airtime_report(struct mt76_dev *dev, struct mt76_rx_status *status,$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_rx_status *status, int len)
-mt76_alloc_device	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_alloc_device);$/;"	v
-mt76_alloc_device	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_alloc_device(struct device *pdev, unsigned int size,$/;"	f	signature:(struct device *pdev, unsigned int size, const struct ieee80211_ops *ops, const struct mt76_driver_ops *drv_ops)
-mt76_alloc_phy	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_alloc_phy);$/;"	v
-mt76_alloc_phy	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_alloc_phy(struct mt76_dev *dev, unsigned int size,$/;"	f	signature:(struct mt76_dev *dev, unsigned int size, const struct ieee80211_ops *ops, u8 band_idx)
-mt76_alloc_txwi	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_alloc_txwi(struct mt76_dev *dev)$/;"	f	file:	signature:(struct mt76_dev *dev)
-mt76_apply_array_limit	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^mt76_apply_array_limit(s8 *pwr, size_t pwr_len, const __be32 *data,$/;"	f	file:	signature:(s8 *pwr, size_t pwr_len, const __be32 *data, s8 target_power, s8 nss_delta, s8 *max_power)
-mt76_apply_multi_array_limit	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^mt76_apply_multi_array_limit(s8 *pwr, size_t pwr_len, s8 pwr_num,$/;"	f	file:	signature:(s8 *pwr, size_t pwr_len, s8 pwr_num, const __be32 *data, size_t len, s8 target_power, s8 nss_delta, s8 *max_power)
-mt76_calculate_default_rate	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_calculate_default_rate);$/;"	v
-mt76_calculate_default_rate	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^u16 mt76_calculate_default_rate(struct mt76_phy *phy, int rateidx)$/;"	f	signature:(struct mt76_phy *phy, int rateidx)
-mt76_channel_state	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_channel_state(struct mt76_phy *phy, struct ieee80211_channel *c)$/;"	f	file:	signature:(struct mt76_phy *phy, struct ieee80211_channel *c)
-mt76_channels_2ghz	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^static const struct ieee80211_channel mt76_channels_2ghz[] = {$/;"	v	typeref:struct:ieee80211_channel	file:
-mt76_channels_5ghz	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^static const struct ieee80211_channel mt76_channels_5ghz[] = {$/;"	v	typeref:struct:ieee80211_channel	file:
-mt76_channels_6ghz	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^static const struct ieee80211_channel mt76_channels_6ghz[] = {$/;"	v	typeref:struct:ieee80211_channel	file:
-mt76_check_ccmp_pn	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_check_ccmp_pn(struct sk_buff *skb)$/;"	f	file:	signature:(struct sk_buff *skb)
-mt76_check_sband	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_check_sband(struct mt76_phy *phy, struct mt76_sband *msband,$/;"	f	file:	signature:(struct mt76_phy *phy, struct mt76_sband *msband, enum nl80211_band band)
-mt76_check_sta	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_check_sta(struct mt76_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt76_dev *dev, struct sk_buff *skb)
-mt76_connac2_get_data_mode	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^static u32 mt76_connac2_get_data_mode(struct mt76_dev *dev, u32 info)$/;"	f	file:	signature:(struct mt76_dev *dev, u32 info)
-mt76_connac2_load_patch	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac2_load_patch);$/;"	v
-mt76_connac2_load_patch	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac2_load_patch(struct mt76_dev *dev, const char *fw_name)$/;"	f	signature:(struct mt76_dev *dev, const char *fw_name)
-mt76_connac2_load_ram	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac2_load_ram);$/;"	v
-mt76_connac2_load_ram	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac2_load_ram(struct mt76_dev *dev, const char *fw_wm,$/;"	f	signature:(struct mt76_dev *dev, const char *fw_wm, const char *fw_wa)
-mt76_connac2_mac_add_txs_skb	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac2_mac_add_txs_skb);$/;"	v
-mt76_connac2_mac_add_txs_skb	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^bool mt76_connac2_mac_add_txs_skb(struct mt76_dev *dev, struct mt76_wcid *wcid,$/;"	f	signature:(struct mt76_dev *dev, struct mt76_wcid *wcid, int pid, __le32 *txs_data)
-mt76_connac2_mac_decode_he_mu_radiotap	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^mt76_connac2_mac_decode_he_mu_radiotap(struct mt76_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt76_dev *dev, struct sk_buff *skb, __le32 *rxv)
-mt76_connac2_mac_decode_he_radiotap	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac2_mac_decode_he_radiotap);$/;"	v
-mt76_connac2_mac_decode_he_radiotap	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^void mt76_connac2_mac_decode_he_radiotap(struct mt76_dev *dev,$/;"	f	signature:(struct mt76_dev *dev, struct sk_buff *skb, __le32 *rxv, u32 mode)
-mt76_connac2_mac_decode_he_radiotap_ru	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^mt76_connac2_mac_decode_he_radiotap_ru(struct mt76_rx_status *status,$/;"	f	file:	signature:(struct mt76_rx_status *status, struct ieee80211_radiotap_he *he, __le32 *rxv)
-mt76_connac2_mac_fill_rx_rate	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac2_mac_fill_rx_rate);$/;"	v
-mt76_connac2_mac_fill_rx_rate	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^int mt76_connac2_mac_fill_rx_rate(struct mt76_dev *dev,$/;"	f	signature:(struct mt76_dev *dev, struct mt76_rx_status *status, struct ieee80211_supported_band *sband, __le32 *rxv, u8 *mode)
-mt76_connac2_mac_fill_txs	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac2_mac_fill_txs);$/;"	v
-mt76_connac2_mac_fill_txs	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^bool mt76_connac2_mac_fill_txs(struct mt76_dev *dev, struct mt76_wcid *wcid,$/;"	f	signature:(struct mt76_dev *dev, struct mt76_wcid *wcid, __le32 *txs_data)
-mt76_connac2_mac_tx_rate_val	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^mt76_connac2_mac_tx_rate_val(struct mt76_phy *mphy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt76_phy *mphy, struct ieee80211_vif *vif, bool beacon, bool mcast)
-mt76_connac2_mac_write_txwi	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac2_mac_write_txwi);$/;"	v
-mt76_connac2_mac_write_txwi	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi,$/;"	f	signature:(struct mt76_dev *dev, __le32 *txwi, struct sk_buff *skb, struct mt76_wcid *wcid, struct ieee80211_key_conf *key, int pid, enum mt76_txq_id qid, u32 changed)
-mt76_connac2_mac_write_txwi_80211	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^mt76_connac2_mac_write_txwi_80211(struct mt76_dev *dev, __le32 *txwi,$/;"	f	file:	signature:(struct mt76_dev *dev, __le32 *txwi, struct sk_buff *skb, struct ieee80211_key_conf *key)
-mt76_connac2_mac_write_txwi_8023	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^mt76_connac2_mac_write_txwi_8023(__le32 *txwi, struct sk_buff *skb,$/;"	f	file:	signature:(__le32 *txwi, struct sk_buff *skb, struct mt76_wcid *wcid)
-mt76_connac2_mcu_fill_message	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac2_mcu_fill_message);$/;"	v
-mt76_connac2_mcu_fill_message	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac2_mcu_fill_message(struct mt76_dev *dev, struct sk_buff *skb,$/;"	f	signature:(struct mt76_dev *dev, struct sk_buff *skb, int cmd, int *wait_seq)
-mt76_connac2_reverse_frag0_hdr_trans	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac2_reverse_frag0_hdr_trans);$/;"	v
-mt76_connac2_reverse_frag0_hdr_trans	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^int mt76_connac2_reverse_frag0_hdr_trans(struct ieee80211_vif *vif,$/;"	f	signature:(struct ieee80211_vif *vif, struct sk_buff *skb, u16 hdr_offset)
-mt76_connac_free_pending_tx_skbs	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac_free_pending_tx_skbs);$/;"	v
-mt76_connac_free_pending_tx_skbs	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^void mt76_connac_free_pending_tx_skbs(struct mt76_connac_pm *pm,$/;"	f	signature:(struct mt76_connac_pm *pm, struct mt76_wcid *wcid)
-mt76_connac_get_ch_power	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^static s8 mt76_connac_get_ch_power(struct mt76_phy *phy,$/;"	f	file:	signature:(struct mt76_phy *phy, struct ieee80211_channel *chan, s8 target_power)
-mt76_connac_get_he_phy_cap	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_get_he_phy_cap);$/;"	v
-mt76_connac_get_he_phy_cap	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_get_he_phy_cap(struct mt76_phy *phy, struct ieee80211_vif *vif)$/;"	f	signature:(struct mt76_phy *phy, struct ieee80211_vif *vif)
-mt76_connac_get_phy_mode	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_get_phy_mode);$/;"	v
-mt76_connac_get_phy_mode	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^u8 mt76_connac_get_phy_mode(struct mt76_phy *phy, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt76_phy *phy, struct ieee80211_vif *vif, enum nl80211_band band, struct ieee80211_sta *sta)
-mt76_connac_get_phy_mode_v2	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_get_phy_mode_v2(struct mt76_phy *mphy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt76_phy *mphy, struct ieee80211_vif *vif, enum nl80211_band band, struct ieee80211_sta *sta)
-mt76_connac_init_tx_queues	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac_init_tx_queues);$/;"	v
-mt76_connac_init_tx_queues	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^int mt76_connac_init_tx_queues(struct mt76_phy *phy, int idx, int n_desc,$/;"	f	signature:(struct mt76_phy *phy, int idx, int n_desc, int ring_base, u32 flags)
-mt76_connac_mcu_add_key	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_add_key);$/;"	v
-mt76_connac_mcu_add_key	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt76_dev *dev, struct ieee80211_vif *vif, struct mt76_connac_sta_key_conf *sta_key_conf, struct ieee80211_key_conf *key, int mcu_cmd, struct mt76_wcid *wcid, enum set_key_cmd cmd)
-mt76_connac_mcu_add_nested_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_add_nested_tlv);$/;"	v
-mt76_connac_mcu_add_nested_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_add_nested_tlv(struct sk_buff *skb, int tag, int len,$/;"	f	signature:(struct sk_buff *skb, int tag, int len, void *sta_ntlv, void *sta_wtbl)
-mt76_connac_mcu_alloc_wtbl_req	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_alloc_wtbl_req);$/;"	v
-mt76_connac_mcu_alloc_wtbl_req	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_alloc_wtbl_req(struct mt76_dev *dev, struct mt76_wcid *wcid,$/;"	f	signature:(struct mt76_dev *dev, struct mt76_wcid *wcid, int cmd, void *sta_wtbl, struct sk_buff **skb)
-mt76_connac_mcu_beacon_loss_iter	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_beacon_loss_iter);$/;"	v
-mt76_connac_mcu_beacon_loss_iter	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_beacon_loss_iter(void *priv, u8 *mac,$/;"	f	signature:(void *priv, u8 *mac, struct ieee80211_vif *vif)
-mt76_connac_mcu_bss_basic_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_bss_basic_tlv);$/;"	v
-mt76_connac_mcu_bss_basic_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_bss_basic_tlv(struct sk_buff *skb,$/;"	f	signature:(struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct mt76_phy *phy, u16 wlan_idx, bool enable)
-mt76_connac_mcu_bss_ext_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_bss_ext_tlv);$/;"	v
-mt76_connac_mcu_bss_ext_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_bss_ext_tlv(struct sk_buff *skb, struct mt76_vif *mvif)$/;"	f	signature:(struct sk_buff *skb, struct mt76_vif *mvif)
-mt76_connac_mcu_bss_omac_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_bss_omac_tlv);$/;"	v
-mt76_connac_mcu_bss_omac_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_bss_omac_tlv(struct sk_buff *skb,$/;"	f	signature:(struct sk_buff *skb, struct ieee80211_vif *vif)
-mt76_connac_mcu_build_sku	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_build_sku(struct mt76_dev *dev, s8 *sku,$/;"	f	file:	signature:(struct mt76_dev *dev, s8 *sku, struct mt76_power_limits *limits, enum nl80211_band band)
-mt76_connac_mcu_cancel_hw_scan	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_cancel_hw_scan);$/;"	v
-mt76_connac_mcu_cancel_hw_scan	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_cancel_hw_scan(struct mt76_phy *phy,$/;"	f	signature:(struct mt76_phy *phy, struct ieee80211_vif *vif)
-mt76_connac_mcu_chip_config	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_chip_config);$/;"	v
-mt76_connac_mcu_chip_config	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_chip_config(struct mt76_dev *dev)$/;"	f	signature:(struct mt76_dev *dev)
-mt76_connac_mcu_coredump_event	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_coredump_event);$/;"	v
-mt76_connac_mcu_coredump_event	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_coredump_event(struct mt76_dev *dev, struct sk_buff *skb,$/;"	f	signature:(struct mt76_dev *dev, struct sk_buff *skb, struct mt76_connac_coredump *coredump)
-mt76_connac_mcu_get_nic_capability	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_get_nic_capability);$/;"	v
-mt76_connac_mcu_get_nic_capability	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_get_nic_capability(struct mt76_phy *phy)$/;"	f	signature:(struct mt76_phy *phy)
-mt76_connac_mcu_hw_scan	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_hw_scan);$/;"	v
-mt76_connac_mcu_hw_scan	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt76_phy *phy, struct ieee80211_vif *vif, struct ieee80211_scan_request *scan_req)
-mt76_connac_mcu_init_download	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_init_download);$/;"	v
-mt76_connac_mcu_init_download	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_init_download(struct mt76_dev *dev, u32 addr, u32 len,$/;"	f	signature:(struct mt76_dev *dev, u32 addr, u32 len, u32 mode)
-mt76_connac_mcu_key_iter	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_key_iter(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct ieee80211_key_conf *key, void *data)
-mt76_connac_mcu_parse_phy_cap	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^static void mt76_connac_mcu_parse_phy_cap(struct mt76_dev *dev,$/;"	f	file:	signature:(struct mt76_dev *dev, struct sk_buff *skb)
-mt76_connac_mcu_parse_tx_resource	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^static void mt76_connac_mcu_parse_tx_resource(struct mt76_dev *dev,$/;"	f	file:	signature:(struct mt76_dev *dev, struct sk_buff *skb)
-mt76_connac_mcu_patch_sem_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_patch_sem_ctrl);$/;"	v
-mt76_connac_mcu_patch_sem_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_patch_sem_ctrl(struct mt76_dev *dev, bool get)$/;"	f	signature:(struct mt76_dev *dev, bool get)
-mt76_connac_mcu_rate_txpower_band	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_rate_txpower_band(struct mt76_phy *phy,$/;"	f	file:	signature:(struct mt76_phy *phy, enum nl80211_band band)
-mt76_connac_mcu_rdd_cmd	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_rdd_cmd);$/;"	v
-mt76_connac_mcu_rdd_cmd	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_rdd_cmd(struct mt76_dev *dev, int cmd, u8 index,$/;"	f	signature:(struct mt76_dev *dev, int cmd, u8 index, u8 rx_sel, u8 val)
-mt76_connac_mcu_reg_rr	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_reg_rr);$/;"	v
-mt76_connac_mcu_reg_rr	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^u32 mt76_connac_mcu_reg_rr(struct mt76_dev *dev, u32 offset)$/;"	f	signature:(struct mt76_dev *dev, u32 offset)
-mt76_connac_mcu_reg_wr	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_reg_wr);$/;"	v
-mt76_connac_mcu_reg_wr	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_reg_wr(struct mt76_dev *dev, u32 offset, u32 val)$/;"	f	signature:(struct mt76_dev *dev, u32 offset, u32 val)
-mt76_connac_mcu_restart	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_restart);$/;"	v
-mt76_connac_mcu_restart	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_restart(struct mt76_dev *dev)$/;"	f	signature:(struct mt76_dev *dev)
-mt76_connac_mcu_sched_scan_enable	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_sched_scan_enable);$/;"	v
-mt76_connac_mcu_sched_scan_enable	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_sched_scan_enable(struct mt76_phy *phy,$/;"	f	signature:(struct mt76_phy *phy, struct ieee80211_vif *vif, bool enable)
-mt76_connac_mcu_sched_scan_req	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_sched_scan_req);$/;"	v
-mt76_connac_mcu_sched_scan_req	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_sched_scan_req(struct mt76_phy *phy,$/;"	f	signature:(struct mt76_phy *phy, struct ieee80211_vif *vif, struct cfg80211_sched_scan_request *sreq)
-mt76_connac_mcu_send_ram_firmware	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_send_ram_firmware(struct mt76_dev *dev,$/;"	f	file:	signature:(struct mt76_dev *dev, const struct mt76_connac2_fw_trailer *hdr, const u8 *data, bool is_wa)
-mt76_connac_mcu_set_arp_filter	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_set_arp_filter(struct mt76_dev *dev, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt76_dev *dev, struct ieee80211_vif *vif, bool suspend)
-mt76_connac_mcu_set_channel_domain	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_channel_domain);$/;"	v
-mt76_connac_mcu_set_channel_domain	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_set_channel_domain(struct mt76_phy *phy)$/;"	f	signature:(struct mt76_phy *phy)
-mt76_connac_mcu_set_deep_sleep	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_deep_sleep);$/;"	v
-mt76_connac_mcu_set_deep_sleep	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_set_deep_sleep(struct mt76_dev *dev, bool enable)$/;"	f	signature:(struct mt76_dev *dev, bool enable)
-mt76_connac_mcu_set_gtk_rekey	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_set_gtk_rekey(struct mt76_dev *dev, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt76_dev *dev, struct ieee80211_vif *vif, bool suspend)
-mt76_connac_mcu_set_hif_suspend	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_hif_suspend);$/;"	v
-mt76_connac_mcu_set_hif_suspend	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_set_hif_suspend(struct mt76_dev *dev, bool suspend)$/;"	f	signature:(struct mt76_dev *dev, bool suspend)
-mt76_connac_mcu_set_mac_enable	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_mac_enable);$/;"	v
-mt76_connac_mcu_set_mac_enable	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_set_mac_enable(struct mt76_dev *dev, int band, bool enable,$/;"	f	signature:(struct mt76_dev *dev, int band, bool enable, bool hdr_trans)
-mt76_connac_mcu_set_p2p_oppps	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_p2p_oppps);$/;"	v
-mt76_connac_mcu_set_p2p_oppps	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_set_p2p_oppps(struct ieee80211_hw *hw,$/;"	f	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-mt76_connac_mcu_set_pm	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_pm);$/;"	v
-mt76_connac_mcu_set_pm	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_set_pm(struct mt76_dev *dev, int band, int enter)$/;"	f	signature:(struct mt76_dev *dev, int band, int enter)
-mt76_connac_mcu_set_rate_txpower	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_rate_txpower);$/;"	v
-mt76_connac_mcu_set_rate_txpower	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_set_rate_txpower(struct mt76_phy *phy)$/;"	f	signature:(struct mt76_phy *phy)
-mt76_connac_mcu_set_rts_thresh	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_rts_thresh);$/;"	v
-mt76_connac_mcu_set_rts_thresh	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_set_rts_thresh(struct mt76_dev *dev, u32 val, u8 band)$/;"	f	signature:(struct mt76_dev *dev, u32 val, u8 band)
-mt76_connac_mcu_set_suspend_iter	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_suspend_iter);$/;"	v
-mt76_connac_mcu_set_suspend_iter	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_set_suspend_iter(void *priv, u8 *mac,$/;"	f	signature:(void *priv, u8 *mac, struct ieee80211_vif *vif)
-mt76_connac_mcu_set_suspend_mode	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_set_suspend_mode(struct mt76_dev *dev,$/;"	f	file:	signature:(struct mt76_dev *dev, struct ieee80211_vif *vif, bool enable, u8 mdtim, bool wow_suspend)
-mt76_connac_mcu_set_vif_ps	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_set_vif_ps);$/;"	v
-mt76_connac_mcu_set_vif_ps	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_set_vif_ps(struct mt76_dev *dev, struct ieee80211_vif *vif)$/;"	f	signature:(struct mt76_dev *dev, struct ieee80211_vif *vif)
-mt76_connac_mcu_set_wow_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_set_wow_ctrl(struct mt76_phy *phy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt76_phy *phy, struct ieee80211_vif *vif, bool suspend, struct cfg80211_wowlan *wowlan)
-mt76_connac_mcu_set_wow_pattern	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_set_wow_pattern(struct mt76_dev *dev,$/;"	f	file:	signature:(struct mt76_dev *dev, struct ieee80211_vif *vif, u8 index, bool enable, struct cfg80211_pkt_pattern *pattern)
-mt76_connac_mcu_sta_amsdu_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_sta_amsdu_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_sta *sta, struct ieee80211_vif *vif)
-mt76_connac_mcu_sta_ba	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_ba);$/;"	v
-mt76_connac_mcu_sta_ba	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_sta_ba(struct mt76_dev *dev, struct mt76_vif *mvif,$/;"	f	signature:(struct mt76_dev *dev, struct mt76_vif *mvif, struct ieee80211_ampdu_params *params, int cmd, bool enable, bool tx)
-mt76_connac_mcu_sta_ba_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_ba_tlv);$/;"	v
-mt76_connac_mcu_sta_ba_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_sta_ba_tlv(struct sk_buff *skb,$/;"	f	signature:(struct sk_buff *skb, struct ieee80211_ampdu_params *params, bool enable, bool tx)
-mt76_connac_mcu_sta_basic_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_basic_tlv);$/;"	v
-mt76_connac_mcu_sta_basic_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,$/;"	f	signature:(struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool enable, bool newly)
-mt76_connac_mcu_sta_cmd	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_cmd);$/;"	v
-mt76_connac_mcu_sta_cmd	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_sta_cmd(struct mt76_phy *phy,$/;"	f	signature:(struct mt76_phy *phy, struct mt76_sta_cmd_info *info)
-mt76_connac_mcu_sta_he_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_sta *sta)
-mt76_connac_mcu_sta_he_tlv_v2	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_sta_he_tlv_v2(struct sk_buff *skb, struct ieee80211_sta *sta)$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_sta *sta)
-mt76_connac_mcu_sta_key_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_sta_key_tlv(struct mt76_connac_sta_key_conf *sta_key_conf,$/;"	f	file:	signature:(struct mt76_connac_sta_key_conf *sta_key_conf, struct sk_buff *skb, struct ieee80211_key_conf *key, enum set_key_cmd cmd)
-mt76_connac_mcu_sta_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_tlv);$/;"	v
-mt76_connac_mcu_sta_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,$/;"	f	signature:(struct mt76_phy *mphy, struct sk_buff *skb, struct ieee80211_sta *sta, struct ieee80211_vif *vif, u8 rcpi, u8 sta_state)
-mt76_connac_mcu_sta_uapsd	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_uapsd);$/;"	v
-mt76_connac_mcu_sta_uapsd	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_sta_uapsd(struct sk_buff *skb, struct ieee80211_vif *vif,$/;"	f	signature:(struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt76_connac_mcu_sta_update_hdr_trans	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_sta_update_hdr_trans);$/;"	v
-mt76_connac_mcu_sta_update_hdr_trans	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_sta_update_hdr_trans(struct mt76_dev *dev,$/;"	f	signature:(struct mt76_dev *dev, struct ieee80211_vif *vif, struct mt76_wcid *wcid, int cmd)
-mt76_connac_mcu_start_firmware	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_start_firmware);$/;"	v
-mt76_connac_mcu_start_firmware	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_start_firmware(struct mt76_dev *dev, u32 addr, u32 option)$/;"	f	signature:(struct mt76_dev *dev, u32 addr, u32 option)
-mt76_connac_mcu_start_patch	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_start_patch);$/;"	v
-mt76_connac_mcu_start_patch	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_start_patch(struct mt76_dev *dev)$/;"	f	signature:(struct mt76_dev *dev)
-mt76_connac_mcu_uni_add_bss	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_uni_add_bss);$/;"	v
-mt76_connac_mcu_uni_add_bss	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_uni_add_bss(struct mt76_phy *phy,$/;"	f	signature:(struct mt76_phy *phy, struct ieee80211_vif *vif, struct mt76_wcid *wcid, bool enable)
-mt76_connac_mcu_uni_add_dev	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_uni_add_dev);$/;"	v
-mt76_connac_mcu_uni_add_dev	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_uni_add_dev(struct mt76_phy *phy,$/;"	f	signature:(struct mt76_phy *phy, struct ieee80211_vif *vif, struct mt76_wcid *wcid, bool enable)
-mt76_connac_mcu_uni_bss_he_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^mt76_connac_mcu_uni_bss_he_tlv(struct mt76_phy *phy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt76_phy *phy, struct ieee80211_vif *vif, struct tlv *tlv)
-mt76_connac_mcu_update_arp_filter	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_update_arp_filter);$/;"	v
-mt76_connac_mcu_update_arp_filter	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_update_arp_filter(struct mt76_dev *dev,$/;"	f	signature:(struct mt76_dev *dev, struct mt76_vif *vif, struct ieee80211_bss_conf *info)
-mt76_connac_mcu_update_gtk_rekey	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_update_gtk_rekey);$/;"	v
-mt76_connac_mcu_update_gtk_rekey	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_update_gtk_rekey(struct ieee80211_hw *hw,$/;"	f	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct cfg80211_gtk_rekey_data *key)
-mt76_connac_mcu_wtbl_ba_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_ba_tlv);$/;"	v
-mt76_connac_mcu_wtbl_ba_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_wtbl_ba_tlv(struct mt76_dev *dev, struct sk_buff *skb,$/;"	f	signature:(struct mt76_dev *dev, struct sk_buff *skb, struct ieee80211_ampdu_params *params, bool enable, bool tx, void *sta_wtbl, void *wtbl_tlv)
-mt76_connac_mcu_wtbl_generic_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_generic_tlv);$/;"	v
-mt76_connac_mcu_wtbl_generic_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_wtbl_generic_tlv(struct mt76_dev *dev,$/;"	f	signature:(struct mt76_dev *dev, struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta, void *sta_wtbl, void *wtbl_tlv)
-mt76_connac_mcu_wtbl_hdr_trans_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_hdr_trans_tlv);$/;"	v
-mt76_connac_mcu_wtbl_hdr_trans_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_wtbl_hdr_trans_tlv(struct sk_buff *skb,$/;"	f	signature:(struct sk_buff *skb, struct ieee80211_vif *vif, struct mt76_wcid *wcid, void *sta_wtbl, void *wtbl_tlv)
-mt76_connac_mcu_wtbl_ht_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_ht_tlv);$/;"	v
-mt76_connac_mcu_wtbl_ht_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,$/;"	f	signature:(struct mt76_dev *dev, struct sk_buff *skb, struct ieee80211_sta *sta, void *sta_wtbl, void *wtbl_tlv, bool ht_ldpc, bool vht_ldpc)
-mt76_connac_mcu_wtbl_smps_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_smps_tlv);$/;"	v
-mt76_connac_mcu_wtbl_smps_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^void mt76_connac_mcu_wtbl_smps_tlv(struct sk_buff *skb,$/;"	f	signature:(struct sk_buff *skb, struct ieee80211_sta *sta, void *sta_wtbl, void *wtbl_tlv)
-mt76_connac_mcu_wtbl_update_hdr_trans	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_update_hdr_trans);$/;"	v
-mt76_connac_mcu_wtbl_update_hdr_trans	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_mcu_wtbl_update_hdr_trans(struct mt76_dev *dev,$/;"	f	signature:(struct mt76_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt76_connac_pm_dequeue_skbs	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac_pm_dequeue_skbs);$/;"	v
-mt76_connac_pm_dequeue_skbs	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^void mt76_connac_pm_dequeue_skbs(struct mt76_phy *phy,$/;"	f	signature:(struct mt76_phy *phy, struct mt76_connac_pm *pm)
-mt76_connac_pm_queue_skb	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac_pm_queue_skb);$/;"	v
-mt76_connac_pm_queue_skb	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^void mt76_connac_pm_queue_skb(struct ieee80211_hw *hw,$/;"	f	signature:(struct ieee80211_hw *hw, struct mt76_connac_pm *pm, struct mt76_wcid *wcid, struct sk_buff *skb)
-mt76_connac_pm_wake	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac_pm_wake);$/;"	v
-mt76_connac_pm_wake	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^int mt76_connac_pm_wake(struct mt76_phy *phy, struct mt76_connac_pm *pm)$/;"	f	signature:(struct mt76_phy *phy, struct mt76_connac_pm *pm)
-mt76_connac_power_save_sched	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac_power_save_sched);$/;"	v
-mt76_connac_power_save_sched	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^void mt76_connac_power_save_sched(struct mt76_phy *phy,$/;"	f	signature:(struct mt76_phy *phy, struct mt76_connac_pm *pm)
-mt76_connac_sta_state_dp	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_sta_state_dp);$/;"	v
-mt76_connac_sta_state_dp	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^int mt76_connac_sta_state_dp(struct mt76_dev *dev,$/;"	f	signature:(struct mt76_dev *dev, enum ieee80211_sta_state old_state, enum ieee80211_sta_state new_state)
-mt76_connac_tx_complete_skb	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac_tx_complete_skb);$/;"	v
-mt76_connac_tx_complete_skb	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^void mt76_connac_tx_complete_skb(struct mt76_dev *mdev,$/;"	f	signature:(struct mt76_dev *mdev, struct mt76_queue_entry *e)
-mt76_connac_txp_skb_unmap	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac_txp_skb_unmap);$/;"	v
-mt76_connac_txp_skb_unmap	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^void mt76_connac_txp_skb_unmap(struct mt76_dev *dev,$/;"	f	signature:(struct mt76_dev *dev, struct mt76_txwi_cache *t)
-mt76_connac_txp_skb_unmap_fw	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^mt76_connac_txp_skb_unmap_fw(struct mt76_dev *mdev,$/;"	f	file:	signature:(struct mt76_dev *mdev, struct mt76_connac_fw_txp *txp)
-mt76_connac_txp_skb_unmap_hw	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^mt76_connac_txp_skb_unmap_hw(struct mt76_dev *dev,$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_connac_hw_txp *txp)
-mt76_connac_wowlan_support	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^EXPORT_SYMBOL_GPL(mt76_connac_wowlan_support);$/;"	v
-mt76_connac_wowlan_support	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mcu.c	/^const struct wiphy_wowlan_support mt76_connac_wowlan_support = {$/;"	v	typeref:struct:wiphy_wowlan_support
-mt76_connac_write_hw_txp	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^EXPORT_SYMBOL_GPL(mt76_connac_write_hw_txp);$/;"	v
-mt76_connac_write_hw_txp	/home/mtk21047/ws/mt76/mt76-upstream/mt76_connac_mac.c	/^void mt76_connac_write_hw_txp(struct mt76_dev *dev,$/;"	f	signature:(struct mt76_dev *dev, struct mt76_tx_info *tx_info, void *txp_ptr, u32 id)
-mt76_csa_check	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_csa_check);$/;"	v
-mt76_csa_check	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_csa_check(struct mt76_dev *dev)$/;"	f	signature:(struct mt76_dev *dev)
-mt76_csa_finish	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_csa_finish);$/;"	v
-mt76_csa_finish	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_csa_finish(struct mt76_dev *dev)$/;"	f	signature:(struct mt76_dev *dev)
-mt76_dma_add_buf	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_add_buf(struct mt76_dev *dev, struct mt76_queue *q,$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q, struct mt76_queue_buf *buf, int nbufs, u32 info, struct sk_buff *skb, void *txwi)
-mt76_dma_alloc_queue	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_alloc_queue(struct mt76_dev *dev, struct mt76_queue *q,$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q, int idx, int n_desc, int bufsize, u32 ring_base)
-mt76_dma_attach	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^EXPORT_SYMBOL_GPL(mt76_dma_attach);$/;"	v
-mt76_dma_attach	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^void mt76_dma_attach(struct mt76_dev *dev)$/;"	f	signature:(struct mt76_dev *dev)
-mt76_dma_cleanup	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^EXPORT_SYMBOL_GPL(mt76_dma_cleanup);$/;"	v
-mt76_dma_cleanup	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^void mt76_dma_cleanup(struct mt76_dev *dev)$/;"	f	signature:(struct mt76_dev *dev)
-mt76_dma_dequeue	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_dequeue(struct mt76_dev *dev, struct mt76_queue *q, bool flush,$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q, bool flush, int *len, u32 *info, bool *more)
-mt76_dma_get_buf	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_get_buf(struct mt76_dev *dev, struct mt76_queue *q, int idx,$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q, int idx, int *len, u32 *info, bool *more)
-mt76_dma_init	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_init(struct mt76_dev *dev,$/;"	f	file:	signature:(struct mt76_dev *dev, int (*poll)(struct napi_struct *napi, int budget))
-mt76_dma_kick_queue	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_kick_queue(struct mt76_dev *dev, struct mt76_queue *q)$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q)
-mt76_dma_ops	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^static const struct mt76_queue_ops mt76_dma_ops = {$/;"	v	typeref:struct:mt76_queue_ops	file:
-mt76_dma_queue_reset	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_queue_reset(struct mt76_dev *dev, struct mt76_queue *q)$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q)
-mt76_dma_rx_cleanup	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_rx_cleanup(struct mt76_dev *dev, struct mt76_queue *q)$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q)
-mt76_dma_rx_fill	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_rx_fill(struct mt76_dev *dev, struct mt76_queue *q)$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q)
-mt76_dma_rx_poll	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^EXPORT_SYMBOL_GPL(mt76_dma_rx_poll);$/;"	v
-mt76_dma_rx_poll	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^int mt76_dma_rx_poll(struct napi_struct *napi, int budget)$/;"	f	signature:(struct napi_struct *napi, int budget)
-mt76_dma_rx_process	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_rx_process(struct mt76_dev *dev, struct mt76_queue *q, int budget)$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q, int budget)
-mt76_dma_rx_reset	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_rx_reset(struct mt76_dev *dev, enum mt76_rxq_id qid)$/;"	f	file:	signature:(struct mt76_dev *dev, enum mt76_rxq_id qid)
-mt76_dma_sync_idx	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_sync_idx(struct mt76_dev *dev, struct mt76_queue *q)$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q)
-mt76_dma_tx_cleanup	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_tx_cleanup(struct mt76_dev *dev, struct mt76_queue *q, bool flush)$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q, bool flush)
-mt76_dma_tx_cleanup_idx	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_tx_cleanup_idx(struct mt76_dev *dev, struct mt76_queue *q, int idx,$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q, int idx, struct mt76_queue_entry *prev_e)
-mt76_dma_tx_queue_skb	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q, enum mt76_txq_id qid, struct sk_buff *skb, struct mt76_wcid *wcid, struct ieee80211_sta *sta)
-mt76_dma_tx_queue_skb_raw	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_dma_tx_queue_skb_raw(struct mt76_dev *dev, struct mt76_queue *q,$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_queue *q, struct sk_buff *skb, u32 tx_info)
-mt76_eeprom_init	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^EXPORT_SYMBOL_GPL(mt76_eeprom_init);$/;"	v
-mt76_eeprom_init	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^mt76_eeprom_init(struct mt76_dev *dev, int len)$/;"	f	signature:(struct mt76_dev *dev, int len)
-mt76_eeprom_override	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^EXPORT_SYMBOL_GPL(mt76_eeprom_override);$/;"	v
-mt76_eeprom_override	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^mt76_eeprom_override(struct mt76_phy *phy)$/;"	f	signature:(struct mt76_phy *phy)
-mt76_ethtool_worker	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_ethtool_worker);$/;"	v
-mt76_ethtool_worker	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_ethtool_worker(struct mt76_ethtool_worker_info *wi,$/;"	f	signature:(struct mt76_ethtool_worker_info *wi, struct mt76_sta_stats *stats)
-mt76_find_channel_node	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^mt76_find_channel_node(struct device_node *np, struct ieee80211_channel *chan)$/;"	f	file:	signature:(struct device_node *np, struct ieee80211_channel *chan)
-mt76_find_power_limits_node	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^mt76_find_power_limits_node(struct mt76_dev *dev)$/;"	f	file:	signature:(struct mt76_dev *dev)
-mt76_free_device	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_free_device);$/;"	v
-mt76_free_device	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_free_device(struct mt76_dev *dev)$/;"	f	signature:(struct mt76_dev *dev)
-mt76_free_pending_txwi	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_free_pending_txwi(struct mt76_dev *dev)$/;"	f	file:	signature:(struct mt76_dev *dev)
-mt76_get_antenna	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_get_antenna);$/;"	v
-mt76_get_antenna	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^int mt76_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)$/;"	f	signature:(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
-mt76_get_of_array	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^mt76_get_of_array(struct device_node *np, char *name, size_t *len, int min)$/;"	f	file:	signature:(struct device_node *np, char *name, size_t *len, int min)
-mt76_get_of_eeprom	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^EXPORT_SYMBOL_GPL(mt76_get_of_eeprom);$/;"	v
-mt76_get_of_eeprom	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^int mt76_get_of_eeprom(struct mt76_dev *dev, void *eep, int offset, int len)$/;"	f	signature:(struct mt76_dev *dev, void *eep, int offset, int len)
-mt76_get_rate	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_get_rate);$/;"	v
-mt76_get_rate	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^int mt76_get_rate(struct mt76_dev *dev,$/;"	f	signature:(struct mt76_dev *dev, struct ieee80211_supported_band *sband, int idx, bool cck)
-mt76_get_rate_power_limits	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^EXPORT_SYMBOL_GPL(mt76_get_rate_power_limits);$/;"	v
-mt76_get_rate_power_limits	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^s8 mt76_get_rate_power_limits(struct mt76_phy *phy,$/;"	f	signature:(struct mt76_phy *phy, struct ieee80211_channel *chan, struct mt76_power_limits *dest, s8 target_power)
-mt76_get_sar_power	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_get_sar_power);$/;"	v
-mt76_get_sar_power	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^int mt76_get_sar_power(struct mt76_phy *phy,$/;"	f	signature:(struct mt76_phy *phy, struct ieee80211_channel *chan, int power)
-mt76_get_survey	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_get_survey);$/;"	v
-mt76_get_survey	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^int mt76_get_survey(struct ieee80211_hw *hw, int idx,$/;"	f	signature:(struct ieee80211_hw *hw, int idx, struct survey_info *survey)
-mt76_get_txpower	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_get_txpower);$/;"	v
-mt76_get_txpower	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^int mt76_get_txpower(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, int *dbm)
-mt76_get_txs_delta	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^mt76_get_txs_delta(struct device_node *np, u8 nss)$/;"	f	file:	signature:(struct device_node *np, u8 nss)
-mt76_get_txwi	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_get_txwi(struct mt76_dev *dev)$/;"	f	file:	signature:(struct mt76_dev *dev)
-mt76_has_tx_pending	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_has_tx_pending);$/;"	v
-mt76_has_tx_pending	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^bool mt76_has_tx_pending(struct mt76_phy *phy)$/;"	f	signature:(struct mt76_phy *phy)
-mt76_init_queue	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_init_queue);$/;"	v
-mt76_init_queue	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_init_queue(struct mt76_dev *dev, int qid, int idx, int n_desc,$/;"	f	signature:(struct mt76_dev *dev, int qid, int idx, int n_desc, int ring_base)
-mt76_init_sar_power	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_init_sar_power);$/;"	v
-mt76_init_sar_power	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^int mt76_init_sar_power(struct ieee80211_hw *hw,$/;"	f	signature:(struct ieee80211_hw *hw, const struct cfg80211_sar_specs *sar)
-mt76_init_sband	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_init_sband(struct mt76_phy *phy, struct mt76_sband *msband,$/;"	f	file:	signature:(struct mt76_phy *phy, struct mt76_sband *msband, const struct ieee80211_channel *chan, int n_chan, struct ieee80211_rate *rates, int n_rates, bool ht, bool vht)
-mt76_init_sband_2g	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_init_sband_2g(struct mt76_phy *phy, struct ieee80211_rate *rates,$/;"	f	file:	signature:(struct mt76_phy *phy, struct ieee80211_rate *rates, int n_rates)
-mt76_init_sband_5g	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_init_sband_5g(struct mt76_phy *phy, struct ieee80211_rate *rates,$/;"	f	file:	signature:(struct mt76_phy *phy, struct ieee80211_rate *rates, int n_rates, bool vht)
-mt76_init_sband_6g	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_init_sband_6g(struct mt76_phy *phy, struct ieee80211_rate *rates,$/;"	f	file:	signature:(struct mt76_phy *phy, struct ieee80211_rate *rates, int n_rates)
-mt76_init_stream_cap	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^static void mt76_init_stream_cap(struct mt76_phy *phy,$/;"	f	file:	signature:(struct mt76_phy *phy, struct ieee80211_supported_band *sband, bool vht)
-mt76_insert_ccmp_hdr	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_insert_ccmp_hdr);$/;"	v
-mt76_insert_ccmp_hdr	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_insert_ccmp_hdr(struct sk_buff *skb, u8 key_id)$/;"	f	signature:(struct sk_buff *skb, u8 key_id)
-mt76_led_cleanup	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^static void mt76_led_cleanup(struct mt76_dev *dev)$/;"	f	file:	signature:(struct mt76_dev *dev)
-mt76_led_init	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^static int mt76_led_init(struct mt76_dev *dev)$/;"	f	file:	signature:(struct mt76_dev *dev)
-mt76_phy_dfs_state	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_phy_dfs_state);$/;"	v
-mt76_phy_dfs_state	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^enum mt76_dfs_state mt76_phy_dfs_state(struct mt76_phy *phy)$/;"	f	signature:(struct mt76_phy *phy)
-mt76_phy_init	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_phy_init(struct mt76_phy *phy, struct ieee80211_hw *hw)$/;"	f	file:	signature:(struct mt76_phy *phy, struct ieee80211_hw *hw)
-mt76_put_txwi	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^EXPORT_SYMBOL_GPL(mt76_put_txwi);$/;"	v
-mt76_put_txwi	/home/mtk21047/ws/mt76/mt76-upstream/dma.c	/^mt76_put_txwi(struct mt76_dev *dev, struct mt76_txwi_cache *t)$/;"	f	signature:(struct mt76_dev *dev, struct mt76_txwi_cache *t)
-mt76_rates	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_rates);$/;"	v
-mt76_rates	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^struct ieee80211_rate mt76_rates[] = {$/;"	v	typeref:struct:ieee80211_rate
-mt76_register_device	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_register_device);$/;"	v
-mt76_register_device	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^int mt76_register_device(struct mt76_dev *dev, bool vht,$/;"	f	signature:(struct mt76_dev *dev, bool vht, struct ieee80211_rate *rates, int n_rates)
-mt76_register_phy	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_register_phy);$/;"	v
-mt76_register_phy	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^int mt76_register_phy(struct mt76_phy *phy, bool vht,$/;"	f	signature:(struct mt76_phy *phy, bool vht, struct ieee80211_rate *rates, int n_rates)
-mt76_rx	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_rx);$/;"	v
-mt76_rx	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_rx(struct mt76_dev *dev, enum mt76_rxq_id q, struct sk_buff *skb)$/;"	f	signature:(struct mt76_dev *dev, enum mt76_rxq_id q, struct sk_buff *skb)
-mt76_rx_complete	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_rx_complete(struct mt76_dev *dev, struct sk_buff_head *frames,$/;"	f	signature:(struct mt76_dev *dev, struct sk_buff_head *frames, struct napi_struct *napi)
-mt76_rx_convert	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_rx_convert(struct mt76_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt76_dev *dev, struct sk_buff *skb, struct ieee80211_hw **hw, struct ieee80211_sta **sta)
-mt76_rx_poll_complete	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_rx_poll_complete);$/;"	v
-mt76_rx_poll_complete	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_rx_poll_complete(struct mt76_dev *dev, enum mt76_rxq_id q,$/;"	f	signature:(struct mt76_dev *dev, enum mt76_rxq_id q, struct napi_struct *napi)
-mt76_rx_release_amsdu	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^static void mt76_rx_release_amsdu(struct mt76_phy *phy, enum mt76_rxq_id q)$/;"	f	file:	signature:(struct mt76_phy *phy, enum mt76_rxq_id q)
-mt76_rx_release_burst	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^static void mt76_rx_release_burst(struct mt76_phy *phy, enum mt76_rxq_id q,$/;"	f	file:	signature:(struct mt76_phy *phy, enum mt76_rxq_id q, struct sk_buff *skb)
-mt76_rx_signal	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_rx_signal(struct mt76_rx_status *status)$/;"	f	file:	signature:(struct mt76_rx_status *status)
-mt76_sar_capa	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^static const struct cfg80211_sar_capa mt76_sar_capa = {$/;"	v	typeref:struct:cfg80211_sar_capa	file:
-mt76_sar_freq_ranges	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^static const struct cfg80211_sar_freq_ranges mt76_sar_freq_ranges[] = {$/;"	v	typeref:struct:cfg80211_sar_freq_ranges	file:
-mt76_set_channel	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_set_channel);$/;"	v
-mt76_set_channel	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_set_channel(struct mt76_phy *phy)$/;"	f	signature:(struct mt76_phy *phy)
-mt76_set_stream_caps	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_set_stream_caps);$/;"	v
-mt76_set_stream_caps	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_set_stream_caps(struct mt76_phy *phy, bool vht)$/;"	f	signature:(struct mt76_phy *phy, bool vht)
-mt76_set_tim	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_set_tim);$/;"	v
-mt76_set_tim	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_set_tim(struct ieee80211_hw *hw, struct ieee80211_sta *sta, bool set)$/;"	f	signature:(struct ieee80211_hw *hw, struct ieee80211_sta *sta, bool set)
-mt76_sta_add	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_sta_add(struct mt76_phy *phy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt76_phy *phy, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt76_sta_pre_rcu_remove	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_sta_pre_rcu_remove);$/;"	v
-mt76_sta_pre_rcu_remove	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_sta_pre_rcu_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt76_sta_remove	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^mt76_sta_remove(struct mt76_dev *dev, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt76_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt76_sta_state	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_sta_state);$/;"	v
-mt76_sta_state	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^int mt76_sta_state(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, enum ieee80211_sta_state old_state, enum ieee80211_sta_state new_state)
-mt76_string_prop_find	/home/mtk21047/ws/mt76/mt76-upstream/eeprom.c	/^static bool mt76_string_prop_find(struct property *prop, const char *str)$/;"	f	file:	signature:(struct property *prop, const char *str)
-mt76_sw_scan	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_sw_scan);$/;"	v
-mt76_sw_scan	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_sw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, const u8 *mac)
-mt76_sw_scan_complete	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_sw_scan_complete);$/;"	v
-mt76_sw_scan_complete	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_sw_scan_complete(struct ieee80211_hw *hw, struct ieee80211_vif *vif)$/;"	f	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-mt76_tpt_blink	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^static const struct ieee80211_tpt_blink mt76_tpt_blink[] = {$/;"	v	typeref:struct:ieee80211_tpt_blink	file:
-mt76_unregister_device	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_unregister_device);$/;"	v
-mt76_unregister_device	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_unregister_device(struct mt76_dev *dev)$/;"	f	signature:(struct mt76_dev *dev)
-mt76_unregister_phy	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_unregister_phy);$/;"	v
-mt76_unregister_phy	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_unregister_phy(struct mt76_phy *phy)$/;"	f	signature:(struct mt76_phy *phy)
-mt76_update_survey	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_update_survey);$/;"	v
-mt76_update_survey	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_update_survey(struct mt76_phy *phy)$/;"	f	signature:(struct mt76_phy *phy)
-mt76_update_survey_active_time	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL_GPL(mt76_update_survey_active_time);$/;"	v
-mt76_update_survey_active_time	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_update_survey_active_time(struct mt76_phy *phy, ktime_t time)$/;"	f	signature:(struct mt76_phy *phy, ktime_t time)
-mt76_wcid_key_setup	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^EXPORT_SYMBOL(mt76_wcid_key_setup);$/;"	v
-mt76_wcid_key_setup	/home/mtk21047/ws/mt76/mt76-upstream/mac80211.c	/^void mt76_wcid_key_setup(struct mt76_dev *dev, struct mt76_wcid *wcid,$/;"	f	signature:(struct mt76_dev *dev, struct mt76_wcid *wcid, struct ieee80211_key_conf *key)
-mt7915_add_interface	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static int mt7915_add_interface(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-mt7915_ampdu_action	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_ampdu_params *params)
-mt7915_bss_info_changed	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_bss_info_changed(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_bss_conf *info, u64 changed)
-mt7915_channel_switch_beacon	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_channel_switch_beacon(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct cfg80211_chan_def *chandef)
-mt7915_check_he_obss_narrow_bw_ru	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^static bool mt7915_check_he_obss_narrow_bw_ru(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-mt7915_check_he_obss_narrow_bw_ru_iter	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^static void mt7915_check_he_obss_narrow_bw_ru_iter(struct wiphy *wiphy,$/;"	f	file:	signature:(struct wiphy *wiphy, struct cfg80211_bss *bss, void *_data)
-mt7915_conf_tx	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, unsigned int link_id, u16 queue, const struct ieee80211_tx_queue_params *params)
-mt7915_config	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static int mt7915_config(struct ieee80211_hw *hw, u32 changed)$/;"	f	file:	signature:(struct ieee80211_hw *hw, u32 changed)
-mt7915_configure_filter	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_configure_filter(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, unsigned int changed_flags, unsigned int *total_flags, u64 multicast)
-mt7915_dev_running	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static bool mt7915_dev_running(struct mt7915_dev *dev)$/;"	f	file:	signature:(struct mt7915_dev *dev)
-mt7915_dpd_freq_idx	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^static int mt7915_dpd_freq_idx(u16 freq, u8 bw)$/;"	f	file:	signature:(u16 freq, u8 bw)
-mt7915_driver_own	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^static int mt7915_driver_own(struct mt7915_dev *dev, u8 band)$/;"	f	file:	signature:(struct mt7915_dev *dev, u8 band)
-mt7915_ethtool_worker	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_ethtool_worker(void *wi_data, struct ieee80211_sta *sta)$/;"	f	file:	signature:(void *wi_data, struct ieee80211_sta *sta)
-mt7915_find_freq_idx	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^static int mt7915_find_freq_idx(const u16 *freqs, int n_freqs, u16 cur)$/;"	f	file:	signature:(const u16 *freqs, int n_freqs, u16 cur)
-mt7915_firmware_state	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_firmware_state(struct mt7915_dev *dev, bool wa)$/;"	f	file:	signature:(struct mt7915_dev *dev, bool wa)
-mt7915_get_et_sset_count	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^int mt7915_get_et_sset_count(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, int sset)
-mt7915_get_et_stats	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^void mt7915_get_et_stats(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ethtool_stats *stats, u64 *data)
-mt7915_get_et_strings	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^void mt7915_get_et_strings(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u32 sset, u8 *data)
-mt7915_get_stats	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_get_stats(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_low_level_stats *stats)
-mt7915_get_tsf	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-mt7915_gstrings_stats	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static const char mt7915_gstrings_stats[][ETH_GSTRING_LEN] = {$/;"	v	file:
-mt7915_he_obss_narrow_bw_ru_data	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^struct mt7915_he_obss_narrow_bw_ru_data {$/;"	s	file:
-mt7915_he_obss_narrow_bw_ru_data::tolerated	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^	bool tolerated;$/;"	m	struct:mt7915_he_obss_narrow_bw_ru_data	file:	access:public
-mt7915_init_bitrate_mask	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_init_bitrate_mask(struct ieee80211_vif *vif)$/;"	f	file:	signature:(struct ieee80211_vif *vif)
-mt7915_is_ebf_supported	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_is_ebf_supported(struct mt7915_phy *phy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7915_phy *phy, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool bfee)
-mt7915_load_firmware	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^static int mt7915_load_firmware(struct mt7915_dev *dev)$/;"	f	file:	signature:(struct mt7915_dev *dev)
-mt7915_mac_sta_add	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^int mt7915_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt76_dev *mdev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_mac_sta_remove	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^void mt7915_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt76_dev *mdev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_mcu_add_beacon	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, int en, u32 changed)
-mt7915_mcu_add_bss_info	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_add_bss_info(struct mt7915_phy *phy,$/;"	f	signature:(struct mt7915_phy *phy, struct ieee80211_vif *vif, int enable)
-mt7915_mcu_add_dev_info	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_add_dev_info(struct mt7915_phy *phy,$/;"	f	signature:(struct mt7915_phy *phy, struct ieee80211_vif *vif, bool enable)
-mt7915_mcu_add_group	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_add_group(struct mt7915_dev *dev, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_mcu_add_nested_subtlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_add_nested_subtlv(struct sk_buff *skb, int sub_tag, int sub_len,$/;"	f	file:	signature:(struct sk_buff *skb, int sub_tag, int sub_len, __le16 *sub_ntlv, __le16 *len)
-mt7915_mcu_add_obss_spr	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_add_obss_spr(struct mt7915_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif, bool enable)
-mt7915_mcu_add_rate_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_add_rate_ctrl(struct mt7915_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool changed)
-mt7915_mcu_add_rate_ctrl_fixed	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_add_rate_ctrl_fixed(struct mt7915_dev *dev,$/;"	f	file:	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_mcu_add_rx_ba	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_add_rx_ba(struct mt7915_dev *dev,$/;"	f	signature:(struct mt7915_dev *dev, struct ieee80211_ampdu_params *params, bool enable)
-mt7915_mcu_add_smps	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_add_smps(struct mt7915_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_mcu_add_sta	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_add_sta(struct mt7915_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool enable)
-mt7915_mcu_add_tx_ba	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_add_tx_ba(struct mt7915_dev *dev,$/;"	f	signature:(struct mt7915_dev *dev, struct ieee80211_ampdu_params *params, bool enable)
-mt7915_mcu_apply_group_cal	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_apply_group_cal(struct mt7915_dev *dev)$/;"	f	signature:(struct mt7915_dev *dev)
-mt7915_mcu_apply_tx_dpd	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_apply_tx_dpd(struct mt7915_phy *phy)$/;"	f	signature:(struct mt7915_phy *phy)
-mt7915_mcu_background_chain_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_background_chain_ctrl(struct mt7915_phy *phy,$/;"	f	file:	signature:(struct mt7915_phy *phy, struct cfg80211_chan_def *chandef, int cmd)
-mt7915_mcu_beacon_check_caps	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_beacon_check_caps(struct mt7915_phy *phy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7915_phy *phy, struct ieee80211_vif *vif, struct sk_buff *skb)
-mt7915_mcu_beacon_cntdwn	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_beacon_cntdwn(struct ieee80211_vif *vif, struct sk_buff *rskb,$/;"	f	file:	signature:(struct ieee80211_vif *vif, struct sk_buff *rskb, struct sk_buff *skb, struct bss_info_bcn *bcn, struct ieee80211_mutable_offsets *offs)
-mt7915_mcu_beacon_cont	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_beacon_cont(struct mt7915_dev *dev, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif, struct sk_buff *rskb, struct sk_buff *skb, struct bss_info_bcn *bcn, struct ieee80211_mutable_offsets *offs)
-mt7915_mcu_beacon_inband_discov	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_beacon_inband_discov(struct mt7915_dev *dev, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif, struct sk_buff *rskb, struct bss_info_bcn *bcn, u32 changed)
-mt7915_mcu_beacon_mbss	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_beacon_mbss(struct sk_buff *rskb, struct sk_buff *skb,$/;"	f	file:	signature:(struct sk_buff *rskb, struct sk_buff *skb, struct ieee80211_vif *vif, struct bss_info_bcn *bcn, struct ieee80211_mutable_offsets *offs)
-mt7915_mcu_bss_bmc_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_bss_bmc_tlv(struct sk_buff *skb, struct mt7915_phy *phy)$/;"	f	file:	signature:(struct sk_buff *skb, struct mt7915_phy *phy)
-mt7915_mcu_bss_he_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_bss_he_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_vif *vif, struct mt7915_phy *phy)
-mt7915_mcu_bss_hw_amsdu_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_bss_hw_amsdu_tlv(struct sk_buff *skb)$/;"	f	file:	signature:(struct sk_buff *skb)
-mt7915_mcu_bss_ra_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_bss_ra_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_vif *vif, struct mt7915_phy *phy)
-mt7915_mcu_bss_rfch_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_bss_rfch_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_vif *vif, struct mt7915_phy *phy)
-mt7915_mcu_cca_finish	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_cca_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)$/;"	f	file:	signature:(void *priv, u8 *mac, struct ieee80211_vif *vif)
-mt7915_mcu_csa_finish	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)$/;"	f	file:	signature:(void *priv, u8 *mac, struct ieee80211_vif *vif)
-mt7915_mcu_exit	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^void mt7915_mcu_exit(struct mt7915_dev *dev)$/;"	f	signature:(struct mt7915_dev *dev)
-mt7915_mcu_fw_dbg_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_fw_dbg_ctrl(struct mt7915_dev *dev, u32 module, u8 level)$/;"	f	signature:(struct mt7915_dev *dev, u32 module, u8 level)
-mt7915_mcu_fw_log_2_host	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_fw_log_2_host(struct mt7915_dev *dev, u8 type, u8 ctrl)$/;"	f	signature:(struct mt7915_dev *dev, u8 type, u8 ctrl)
-mt7915_mcu_get_chan_mib_info	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch)$/;"	f	signature:(struct mt7915_phy *phy, bool chan_switch)
-mt7915_mcu_get_eeprom	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_get_eeprom(struct mt7915_dev *dev, u32 offset)$/;"	f	signature:(struct mt7915_dev *dev, u32 offset)
-mt7915_mcu_get_eeprom_free_block	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_get_eeprom_free_block(struct mt7915_dev *dev, u8 *block_num)$/;"	f	signature:(struct mt7915_dev *dev, u8 *block_num)
-mt7915_mcu_get_mmps_mode	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_get_mmps_mode(enum ieee80211_smps_mode smps)$/;"	f	file:	signature:(enum ieee80211_smps_mode smps)
-mt7915_mcu_get_rx_rate	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_get_rx_rate(struct mt7915_phy *phy, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt7915_phy *phy, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct rate_info *rate)
-mt7915_mcu_get_sta_nss	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_get_sta_nss(u16 mcs_map)$/;"	f	file:	signature:(u16 mcs_map)
-mt7915_mcu_get_temperature	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_get_temperature(struct mt7915_phy *phy)$/;"	f	signature:(struct mt7915_phy *phy)
-mt7915_mcu_get_txpower_sku	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_get_txpower_sku(struct mt7915_phy *phy, s8 *txpower, int len)$/;"	f	signature:(struct mt7915_phy *phy, s8 *txpower, int len)
-mt7915_mcu_init	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_init(struct mt7915_dev *dev)$/;"	f	signature:(struct mt7915_dev *dev)
-mt7915_mcu_init_rx_airtime	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_init_rx_airtime(struct mt7915_dev *dev)$/;"	f	file:	signature:(struct mt7915_dev *dev)
-mt7915_mcu_muar_config	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_muar_config(struct mt7915_phy *phy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7915_phy *phy, struct ieee80211_vif *vif, bool bssid, bool enable)
-mt7915_mcu_muru_debug_get	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_muru_debug_get(struct mt7915_phy *phy, void *ms)$/;"	f	signature:(struct mt7915_phy *phy, void *ms)
-mt7915_mcu_muru_debug_set	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_muru_debug_set(struct mt7915_dev *dev, bool enabled)$/;"	f	signature:(struct mt7915_dev *dev, bool enabled)
-mt7915_mcu_parse_response	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_parse_response(struct mt76_dev *mdev, int cmd,$/;"	f	file:	signature:(struct mt76_dev *mdev, int cmd, struct sk_buff *skb, int seq)
-mt7915_mcu_rdd_background_enable	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_rdd_background_enable(struct mt7915_phy *phy,$/;"	f	signature:(struct mt7915_phy *phy, struct cfg80211_chan_def *chandef)
-mt7915_mcu_rf_regval	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_rf_regval(struct mt7915_dev *dev, u32 regidx, u32 *val, bool set)$/;"	f	signature:(struct mt7915_dev *dev, u32 regidx, u32 *val, bool set)
-mt7915_mcu_rx_bcc_notify	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_rx_bcc_notify(struct mt7915_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb)
-mt7915_mcu_rx_csa_notify	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_rx_csa_notify(struct mt7915_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb)
-mt7915_mcu_rx_event	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^void mt7915_mcu_rx_event(struct mt7915_dev *dev, struct sk_buff *skb)$/;"	f	signature:(struct mt7915_dev *dev, struct sk_buff *skb)
-mt7915_mcu_rx_ext_event	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_rx_ext_event(struct mt7915_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb)
-mt7915_mcu_rx_log_message	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_rx_log_message(struct mt7915_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb)
-mt7915_mcu_rx_radar_detected	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_rx_radar_detected(struct mt7915_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb)
-mt7915_mcu_rx_thermal_notify	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_rx_thermal_notify(struct mt7915_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb)
-mt7915_mcu_rx_unsolicited_event	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_rx_unsolicited_event(struct mt7915_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb)
-mt7915_mcu_send_message	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt76_dev *mdev, struct sk_buff *skb, int cmd, int *wait_seq)
-mt7915_mcu_set_chan_info	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_chan_info(struct mt7915_phy *phy, int cmd)$/;"	f	signature:(struct mt7915_phy *phy, int cmd)
-mt7915_mcu_set_eeprom	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_eeprom(struct mt7915_dev *dev)$/;"	f	signature:(struct mt7915_dev *dev)
-mt7915_mcu_set_eeprom_flash	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^static int mt7915_mcu_set_eeprom_flash(struct mt7915_dev *dev)$/;"	f	file:	signature:(struct mt7915_dev *dev)
-mt7915_mcu_set_fcc5_lpn	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_fcc5_lpn(struct mt7915_dev *dev, int val)$/;"	f	signature:(struct mt7915_dev *dev, int val)
-mt7915_mcu_set_fixed_rate_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_fixed_rate_ctrl(struct mt7915_dev *dev,$/;"	f	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta, void *data, u32 field)
-mt7915_mcu_set_mac	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_mac(struct mt7915_dev *dev, int band,$/;"	f	signature:(struct mt7915_dev *dev, int band, bool enable, bool hdr_trans)
-mt7915_mcu_set_muru_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_muru_ctrl(struct mt7915_dev *dev, u32 cmd, u32 val)$/;"	f	signature:(struct mt7915_dev *dev, u32 cmd, u32 val)
-mt7915_mcu_set_mwds	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^static int mt7915_mcu_set_mwds(struct mt7915_dev *dev, bool enabled)$/;"	f	file:	signature:(struct mt7915_dev *dev, bool enabled)
-mt7915_mcu_set_pre_cal	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^static int mt7915_mcu_set_pre_cal(struct mt7915_dev *dev, u8 idx,$/;"	f	file:	signature:(struct mt7915_dev *dev, u8 idx, u8 *data, u32 len, int cmd)
-mt7915_mcu_set_pulse_th	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_pulse_th(struct mt7915_dev *dev,$/;"	f	signature:(struct mt7915_dev *dev, const struct mt7915_dfs_pulse *pulse)
-mt7915_mcu_set_radar_th	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_radar_th(struct mt7915_dev *dev, int index,$/;"	f	signature:(struct mt7915_dev *dev, int index, const struct mt7915_dfs_pattern *pattern)
-mt7915_mcu_set_rx_hdr_trans_blacklist	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_set_rx_hdr_trans_blacklist(struct mt7915_dev *dev, int band)$/;"	f	file:	signature:(struct mt7915_dev *dev, int band)
-mt7915_mcu_set_ser	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_ser(struct mt7915_dev *dev, u8 action, u8 set, u8 band)$/;"	f	signature:(struct mt7915_dev *dev, u8 action, u8 set, u8 band)
-mt7915_mcu_set_sku_en	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_sku_en(struct mt7915_phy *phy, bool enable)$/;"	f	signature:(struct mt7915_phy *phy, bool enable)
-mt7915_mcu_set_spe_idx	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_set_spe_idx(struct mt7915_dev *dev, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_mcu_set_sta_he_mcs	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_set_sta_he_mcs(struct ieee80211_sta *sta, __le16 *he_mcs,$/;"	f	file:	signature:(struct ieee80211_sta *sta, __le16 *he_mcs, u16 mcs_map)
-mt7915_mcu_set_sta_ht_mcs	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_set_sta_ht_mcs(struct ieee80211_sta *sta, u8 *ht_mcs,$/;"	f	file:	signature:(struct ieee80211_sta *sta, u8 *ht_mcs, const u8 *mask)
-mt7915_mcu_set_sta_vht_mcs	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_set_sta_vht_mcs(struct ieee80211_sta *sta, __le16 *vht_mcs,$/;"	f	file:	signature:(struct ieee80211_sta *sta, __le16 *vht_mcs, const u16 *mask)
-mt7915_mcu_set_test_param	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_test_param(struct mt7915_dev *dev, u8 param, bool test_mode,$/;"	f	signature:(struct mt7915_dev *dev, u8 param, bool test_mode, u8 en)
-mt7915_mcu_set_thermal_throttling	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_thermal_throttling(struct mt7915_phy *phy, u8 state)$/;"	f	signature:(struct mt7915_phy *phy, u8 state)
-mt7915_mcu_set_tx	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_tx(struct mt7915_dev *dev, struct ieee80211_vif *vif)$/;"	f	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif)
-mt7915_mcu_set_txbf	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_txbf(struct mt7915_dev *dev, u8 action)$/;"	f	signature:(struct mt7915_dev *dev, u8 action)
-mt7915_mcu_set_txpower_sku	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_set_txpower_sku(struct mt7915_phy *phy)$/;"	f	signature:(struct mt7915_phy *phy)
-mt7915_mcu_sta_amsdu_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_amsdu_tlv(struct mt7915_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_mcu_sta_bfee_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_bfee_tlv(struct mt7915_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_mcu_sta_bfer_he	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_sta *sta, struct ieee80211_vif *vif, struct mt7915_phy *phy, struct sta_rec_bf *bf)
-mt7915_mcu_sta_bfer_ht	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_bfer_ht(struct ieee80211_sta *sta, struct mt7915_phy *phy,$/;"	f	file:	signature:(struct ieee80211_sta *sta, struct mt7915_phy *phy, struct sta_rec_bf *bf)
-mt7915_mcu_sta_bfer_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_bfer_tlv(struct mt7915_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_mcu_sta_bfer_vht	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_bfer_vht(struct ieee80211_sta *sta, struct mt7915_phy *phy,$/;"	f	file:	signature:(struct ieee80211_sta *sta, struct mt7915_phy *phy, struct sta_rec_bf *bf, bool explicit)
-mt7915_mcu_sta_he_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_sta *sta, struct ieee80211_vif *vif)
-mt7915_mcu_sta_ht_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_sta *sta)
-mt7915_mcu_sta_muru_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_muru_tlv(struct mt7915_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb, struct ieee80211_sta *sta, struct ieee80211_vif *vif)
-mt7915_mcu_sta_rate_ctrl_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev,$/;"	f	file:	signature:(struct sk_buff *skb, struct mt7915_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_mcu_sta_sounding_rate	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_sounding_rate(struct sta_rec_bf *bf)$/;"	f	file:	signature:(struct sta_rec_bf *bf)
-mt7915_mcu_sta_vht_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_vht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_sta *sta)
-mt7915_mcu_sta_wtbl_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^mt7915_mcu_sta_wtbl_tlv(struct mt7915_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt7915_dev *dev, struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_mcu_twt_agrt_update	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_twt_agrt_update(struct mt7915_dev *dev,$/;"	f	signature:(struct mt7915_dev *dev, struct mt7915_vif *mvif, struct mt7915_twt_flow *flow, int cmd)
-mt7915_mcu_update_bss_color	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_update_bss_color(struct mt7915_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt7915_dev *dev, struct ieee80211_vif *vif, struct cfg80211_he_bss_color *he_bss_color)
-mt7915_mcu_update_edca	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_update_edca(struct mt7915_dev *dev, void *param)$/;"	f	signature:(struct mt7915_dev *dev, void *param)
-mt7915_mcu_wa_cmd	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^int mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)$/;"	f	signature:(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
-mt7915_net_fill_forward_path	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_net_fill_forward_path(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct net_device_path_ctx *ctx, struct net_device_path *path)
-mt7915_offset_tsf	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_offset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, s64 timestamp)
-mt7915_ops	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^const struct ieee80211_ops mt7915_ops = {$/;"	v	typeref:struct:ieee80211_ops
-mt7915_remove_interface	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_remove_interface(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-mt7915_set_antenna	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)$/;"	f	file:	signature:(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
-mt7915_set_bitrate_mask	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_set_bitrate_mask(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, const struct cfg80211_bitrate_mask *mask)
-mt7915_set_channel	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^int mt7915_set_channel(struct mt7915_phy *phy)$/;"	f	signature:(struct mt7915_phy *phy)
-mt7915_set_coverage_class	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class)$/;"	f	file:	signature:(struct ieee80211_hw *hw, s16 coverage_class)
-mt7915_set_key	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static int mt7915_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,$/;"	f	file:	signature:(struct ieee80211_hw *hw, enum set_key_cmd cmd, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct ieee80211_key_conf *key)
-mt7915_set_radar_background	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_set_radar_background(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct cfg80211_chan_def *chandef)
-mt7915_set_rts_threshold	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static int mt7915_set_rts_threshold(struct ieee80211_hw *hw, u32 val)$/;"	f	file:	signature:(struct ieee80211_hw *hw, u32 val)
-mt7915_set_sar_specs	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static int mt7915_set_sar_specs(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, const struct cfg80211_sar_specs *sar)
-mt7915_set_tsf	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u64 timestamp)
-mt7915_sta_add	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_sta_rc_update	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_sta_rc_update(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, u32 changed)
-mt7915_sta_rc_work	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_sta_rc_work(void *data, struct ieee80211_sta *sta)$/;"	f	file:	signature:(void *data, struct ieee80211_sta *sta)
-mt7915_sta_remove	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7915_sta_set_4addr	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_sta_set_4addr(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool enabled)
-mt7915_sta_set_decap_offload	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_sta_set_decap_offload(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool enabled)
-mt7915_sta_statistics	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_sta_statistics(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct station_info *sinfo)
-mt7915_start	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static int mt7915_start(struct ieee80211_hw *hw)$/;"	f	file:	signature:(struct ieee80211_hw *hw)
-mt7915_stop	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_stop(struct ieee80211_hw *hw)$/;"	f	file:	signature:(struct ieee80211_hw *hw)
-mt7915_twt_teardown_request	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_twt_teardown_request(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_sta *sta, u8 flowid)
-mt7915_tx	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^static void mt7915_tx(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_tx_control *control, struct sk_buff *skb)
-mt7915_update_bss_color	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/main.c	/^mt7915_update_bss_color(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct cfg80211_he_bss_color *bss_color)
-mt7996_add_interface	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static int mt7996_add_interface(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-mt7996_add_rx_airtime_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^static void mt7996_add_rx_airtime_tlv(struct sk_buff *skb, u8 band_idx)$/;"	f	file:	signature:(struct sk_buff *skb, u8 band_idx)
-mt7996_ampdu_action	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_ampdu_params *params)
-mt7996_bss_info_changed	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_bss_info_changed(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_bss_conf *info, u64 changed)
-mt7996_channel_switch_beacon	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_channel_switch_beacon(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct cfg80211_chan_def *chandef)
-mt7996_conf_tx	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, unsigned int link_id, u16 queue, const struct ieee80211_tx_queue_params *params)
-mt7996_config	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static int mt7996_config(struct ieee80211_hw *hw, u32 changed)$/;"	f	file:	signature:(struct ieee80211_hw *hw, u32 changed)
-mt7996_configure_filter	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_configure_filter(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, unsigned int changed_flags, unsigned int *total_flags, u64 multicast)
-mt7996_dev_running	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static bool mt7996_dev_running(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_dfs_init_radar_detector	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^int mt7996_dfs_init_radar_detector(struct mt7996_phy *phy)$/;"	f	signature:(struct mt7996_phy *phy)
-mt7996_dfs_init_radar_specs	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_dfs_init_radar_specs(struct mt7996_phy *phy)$/;"	f	file:	signature:(struct mt7996_phy *phy)
-mt7996_dfs_start_radar_detector	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^static int mt7996_dfs_start_radar_detector(struct mt7996_phy *phy)$/;"	f	file:	signature:(struct mt7996_phy *phy)
-mt7996_dfs_start_rdd	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^static int mt7996_dfs_start_rdd(struct mt7996_dev *dev, int chain)$/;"	f	file:	signature:(struct mt7996_dev *dev, int chain)
-mt7996_dfs_stop_radar_detector	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^static void mt7996_dfs_stop_radar_detector(struct mt7996_phy *phy)$/;"	f	file:	signature:(struct mt7996_phy *phy)
-mt7996_dma_reset	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_dma_reset(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_driver_own	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^static int mt7996_driver_own(struct mt7996_dev *dev, u8 band)$/;"	f	file:	signature:(struct mt7996_dev *dev, u8 band)
-mt7996_ethtool_worker	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_ethtool_worker(void *wi_data, struct ieee80211_sta *sta)$/;"	f	file:	signature:(void *wi_data, struct ieee80211_sta *sta)
-mt7996_firmware_state	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_firmware_state(struct mt7996_dev *dev, bool wa)$/;"	f	file:	signature:(struct mt7996_dev *dev, bool wa)
-mt7996_fw_region	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^struct mt7996_fw_region {$/;"	s	file:
-mt7996_fw_region::addr	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__le32 addr;$/;"	m	struct:mt7996_fw_region	file:	access:public
-mt7996_fw_region::decomp_blk_sz	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__le32 decomp_blk_sz;$/;"	m	struct:mt7996_fw_region	file:	access:public
-mt7996_fw_region::decomp_crc	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__le32 decomp_crc;$/;"	m	struct:mt7996_fw_region	file:	access:public
-mt7996_fw_region::decomp_len	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__le32 decomp_len;$/;"	m	struct:mt7996_fw_region	file:	access:public
-mt7996_fw_region::feature_set	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 feature_set;$/;"	m	struct:mt7996_fw_region	file:	access:public
-mt7996_fw_region::len	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__le32 len;$/;"	m	struct:mt7996_fw_region	file:	access:public
-mt7996_fw_region::reserved	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 reserved[4];$/;"	m	struct:mt7996_fw_region	file:	access:public
-mt7996_fw_region::reserved1	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 reserved1[15];$/;"	m	struct:mt7996_fw_region	file:	access:public
-mt7996_fw_trailer	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^struct mt7996_fw_trailer {$/;"	s	file:
-mt7996_fw_trailer::build_date	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	char build_date[15];$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-mt7996_fw_trailer::chip_id	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 chip_id;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-mt7996_fw_trailer::crc	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u32 crc;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-mt7996_fw_trailer::eco_code	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 eco_code;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-mt7996_fw_trailer::format_flag	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 format_flag;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-mt7996_fw_trailer::format_ver	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 format_ver;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-mt7996_fw_trailer::fw_ver	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	char fw_ver[10];$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-mt7996_fw_trailer::n_region	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 n_region;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-mt7996_fw_trailer::reserved	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 reserved[2];$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-mt7996_gen_ppe_thresh	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^mt7996_gen_ppe_thresh(u8 *he_ppet, int nss)$/;"	f	file:	signature:(u8 *he_ppet, int nss)
-mt7996_get_et_sset_count	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^int mt7996_get_et_sset_count(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, int sset)
-mt7996_get_et_stats	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^void mt7996_get_et_stats(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ethtool_stats *stats, u64 *data)
-mt7996_get_et_strings	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^void mt7996_get_et_strings(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u32 sset, u8 *data)
-mt7996_get_stats	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_get_stats(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_low_level_stats *stats)
-mt7996_get_tsf	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-mt7996_gstrings_stats	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static const char mt7996_gstrings_stats[][ETH_GSTRING_LEN] = {$/;"	v	file:
-mt7996_init_bitrate_mask	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_init_bitrate_mask(struct ieee80211_vif *vif)$/;"	f	file:	signature:(struct ieee80211_vif *vif)
-mt7996_init_hardware	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^static int mt7996_init_hardware(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_init_he_caps	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^mt7996_init_he_caps(struct mt7996_phy *phy, enum nl80211_band band,$/;"	f	file:	signature:(struct mt7996_phy *phy, enum nl80211_band band, struct ieee80211_sband_iftype_data *data)
-mt7996_init_txpower	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^mt7996_init_txpower(struct mt7996_dev *dev,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct ieee80211_supported_band *sband)
-mt7996_init_wiphy	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^mt7996_init_wiphy(struct ieee80211_hw *hw)$/;"	f	file:	signature:(struct ieee80211_hw *hw)
-mt7996_init_work	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^static void mt7996_init_work(struct work_struct *work)$/;"	f	file:	signature:(struct work_struct *work)
-mt7996_is_ebf_supported	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_is_ebf_supported(struct mt7996_phy *phy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7996_phy *phy, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool bfee)
-mt7996_led_set_blink	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^static int mt7996_led_set_blink(struct led_classdev *led_cdev,$/;"	f	file:	signature:(struct led_classdev *led_cdev, unsigned long *delay_on, unsigned long *delay_off)
-mt7996_led_set_brightness	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^static void mt7996_led_set_brightness(struct led_classdev *led_cdev,$/;"	f	file:	signature:(struct led_classdev *led_cdev, enum led_brightness brightness)
-mt7996_led_set_config	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^static void mt7996_led_set_config(struct led_classdev *led_cdev,$/;"	f	file:	signature:(struct led_classdev *led_cdev, u8 delay_on, u8 delay_off)
-mt7996_load_firmware	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^static int mt7996_load_firmware(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_load_patch	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^static int mt7996_load_patch(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_load_ram	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^static int mt7996_load_ram(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_mac_add_twt_setup	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_mac_add_twt_setup(struct ieee80211_hw *hw,$/;"	f	signature:(struct ieee80211_hw *hw, struct ieee80211_sta *sta, struct ieee80211_twt_setup *twt)
-mt7996_mac_add_txs	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^static void mt7996_mac_add_txs(struct mt7996_dev *dev, void *data)$/;"	f	file:	signature:(struct mt7996_dev *dev, void *data)
-mt7996_mac_add_txs_skb	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_add_txs_skb(struct mt7996_dev *dev, struct mt76_wcid *wcid, int pid,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct mt76_wcid *wcid, int pid, __le32 *txs_data, struct mt76_sta_stats *stats)
-mt7996_mac_cca_stats_reset	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_mac_cca_stats_reset(struct mt7996_phy *phy)$/;"	f	signature:(struct mt7996_phy *phy)
-mt7996_mac_check_twt_req	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^static int mt7996_mac_check_twt_req(struct ieee80211_twt_setup *twt)$/;"	f	file:	signature:(struct ieee80211_twt_setup *twt)
-mt7996_mac_decode_he_mu_radiotap	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_decode_he_mu_radiotap(struct sk_buff *skb, __le32 *rxv)$/;"	f	file:	signature:(struct sk_buff *skb, __le32 *rxv)
-mt7996_mac_decode_he_radiotap	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_decode_he_radiotap(struct sk_buff *skb, __le32 *rxv, u8 mode)$/;"	f	file:	signature:(struct sk_buff *skb, __le32 *rxv, u8 mode)
-mt7996_mac_decode_he_radiotap_ru	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_decode_he_radiotap_ru(struct mt76_rx_status *status,$/;"	f	file:	signature:(struct mt76_rx_status *status, struct ieee80211_radiotap_he *he, __le32 *rxv)
-mt7996_mac_enable_nf	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_mac_enable_nf(struct mt7996_dev *dev, u8 band)$/;"	f	signature:(struct mt7996_dev *dev, u8 band)
-mt7996_mac_fill_rx	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_fill_rx(struct mt7996_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb)
-mt7996_mac_fill_rx_rate	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_fill_rx_rate(struct mt7996_dev *dev,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct mt76_rx_status *status, struct ieee80211_supported_band *sband, __le32 *rxv, u8 *mode)
-mt7996_mac_init	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^static void mt7996_mac_init(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_mac_init_band	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^mt7996_mac_init_band(struct mt7996_dev *dev, u8 band)$/;"	f	file:	signature:(struct mt7996_dev *dev, u8 band)
-mt7996_mac_reset_counters	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_mac_reset_counters(struct mt7996_phy *phy)$/;"	f	signature:(struct mt7996_phy *phy)
-mt7996_mac_reset_work	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_mac_reset_work(struct work_struct *work)$/;"	f	signature:(struct work_struct *work)
-mt7996_mac_set_timing	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_mac_set_timing(struct mt7996_phy *phy)$/;"	f	signature:(struct mt7996_phy *phy)
-mt7996_mac_sta_add	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^int mt7996_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt76_dev *mdev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_mac_sta_poll	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^static void mt7996_mac_sta_poll(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_mac_sta_rc_work	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_mac_sta_rc_work(struct work_struct *work)$/;"	f	signature:(struct work_struct *work)
-mt7996_mac_sta_remove	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^void mt7996_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt76_dev *mdev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_mac_twt_duration_align	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_twt_duration_align(int duration)$/;"	f	file:	signature:(int duration)
-mt7996_mac_twt_sched_list_add	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_twt_sched_list_add(struct mt7996_dev *dev,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct mt7996_twt_flow *flow)
-mt7996_mac_twt_teardown_flow	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_mac_twt_teardown_flow(struct mt7996_dev *dev,$/;"	f	signature:(struct mt7996_dev *dev, struct mt7996_sta *msta, u8 flowid)
-mt7996_mac_tx_free	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_tx_free(struct mt7996_dev *dev, void *data, int len)$/;"	f	file:	signature:(struct mt7996_dev *dev, void *data, int len)
-mt7996_mac_tx_rate_val	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_tx_rate_val(struct mt76_phy *mphy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt76_phy *mphy, struct ieee80211_vif *vif, bool beacon, bool mcast)
-mt7996_mac_update_stats	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_mac_update_stats(struct mt7996_phy *phy)$/;"	f	signature:(struct mt7996_phy *phy)
-mt7996_mac_work	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_mac_work(struct work_struct *work)$/;"	f	signature:(struct work_struct *work)
-mt7996_mac_write_txwi	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_mac_write_txwi(struct mt7996_dev *dev, __le32 *txwi,$/;"	f	signature:(struct mt7996_dev *dev, __le32 *txwi, struct sk_buff *skb, struct mt76_wcid *wcid, int pid, struct ieee80211_key_conf *key, u32 changed)
-mt7996_mac_write_txwi_80211	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_write_txwi_80211(struct mt7996_dev *dev, __le32 *txwi,$/;"	f	file:	signature:(struct mt7996_dev *dev, __le32 *txwi, struct sk_buff *skb, struct ieee80211_key_conf *key)
-mt7996_mac_write_txwi_8023	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_mac_write_txwi_8023(struct mt7996_dev *dev, __le32 *txwi,$/;"	f	file:	signature:(struct mt7996_dev *dev, __le32 *txwi, struct sk_buff *skb, struct mt76_wcid *wcid)
-mt7996_mac_wtbl_lmac_addr	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^u32 mt7996_mac_wtbl_lmac_addr(struct mt7996_dev *dev, u16 wcid, u8 dw)$/;"	f	signature:(struct mt7996_dev *dev, u16 wcid, u8 dw)
-mt7996_mac_wtbl_update	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^bool mt7996_mac_wtbl_update(struct mt7996_dev *dev, int idx, u32 mask)$/;"	f	signature:(struct mt7996_dev *dev, int idx, u32 mask)
-mt7996_mcu_add_beacon	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_add_beacon(struct ieee80211_hw *hw,$/;"	f	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, int en)
-mt7996_mcu_add_bss_info	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_add_bss_info(struct mt7996_phy *phy,$/;"	f	signature:(struct mt7996_phy *phy, struct ieee80211_vif *vif, int enable)
-mt7996_mcu_add_dev_info	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_add_dev_info(struct mt7996_phy *phy,$/;"	f	signature:(struct mt7996_phy *phy, struct ieee80211_vif *vif, bool enable)
-mt7996_mcu_add_group	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_add_group(struct mt7996_dev *dev, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_mcu_add_key	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt76_dev *dev, struct ieee80211_vif *vif, struct mt76_connac_sta_key_conf *sta_key_conf, struct ieee80211_key_conf *key, int mcu_cmd, struct mt76_wcid *wcid, enum set_key_cmd cmd)
-mt7996_mcu_add_obss_spr	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_add_obss_spr(struct mt7996_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt7996_dev *dev, struct ieee80211_vif *vif, bool enable)
-mt7996_mcu_add_rate_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_add_rate_ctrl(struct mt7996_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt7996_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool changed)
-mt7996_mcu_add_rx_ba	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_add_rx_ba(struct mt7996_dev *dev,$/;"	f	signature:(struct mt7996_dev *dev, struct ieee80211_ampdu_params *params, bool enable)
-mt7996_mcu_add_sta	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_add_sta(struct mt7996_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt7996_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool enable)
-mt7996_mcu_add_tx_ba	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_add_tx_ba(struct mt7996_dev *dev,$/;"	f	signature:(struct mt7996_dev *dev, struct ieee80211_ampdu_params *params, bool enable)
-mt7996_mcu_add_uni_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_add_uni_tlv(struct sk_buff *skb, u16 tag, u16 len)$/;"	f	file:	signature:(struct sk_buff *skb, u16 tag, u16 len)
-mt7996_mcu_background_chain_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_background_chain_ctrl(struct mt7996_phy *phy,$/;"	f	file:	signature:(struct mt7996_phy *phy, struct cfg80211_chan_def *chandef, int cmd)
-mt7996_mcu_beacon_check_caps	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_beacon_check_caps(struct mt7996_phy *phy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7996_phy *phy, struct ieee80211_vif *vif, struct sk_buff *skb)
-mt7996_mcu_beacon_cntdwn	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_beacon_cntdwn(struct ieee80211_vif *vif, struct sk_buff *rskb,$/;"	f	file:	signature:(struct ieee80211_vif *vif, struct sk_buff *rskb, struct sk_buff *skb, struct ieee80211_mutable_offsets *offs)
-mt7996_mcu_beacon_cont	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_beacon_cont(struct mt7996_dev *dev, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct ieee80211_vif *vif, struct sk_buff *rskb, struct sk_buff *skb, struct bss_bcn_content_tlv *bcn, struct ieee80211_mutable_offsets *offs)
-mt7996_mcu_beacon_inband_discov	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_beacon_inband_discov(struct mt7996_dev *dev,$/;"	f	signature:(struct mt7996_dev *dev, struct ieee80211_vif *vif, u32 changed)
-mt7996_mcu_bss_basic_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_bss_basic_tlv(struct sk_buff *skb,$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct mt76_phy *phy, u16 wlan_idx, bool enable)
-mt7996_mcu_bss_bmc_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_bss_bmc_tlv(struct sk_buff *skb, struct mt7996_phy *phy)$/;"	f	file:	signature:(struct sk_buff *skb, struct mt7996_phy *phy)
-mt7996_mcu_bss_he_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_bss_he_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_vif *vif, struct mt7996_phy *phy)
-mt7996_mcu_bss_mld_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_bss_mld_tlv(struct sk_buff *skb, struct ieee80211_vif *vif)$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_vif *vif)
-mt7996_mcu_bss_ra_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_bss_ra_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_vif *vif, struct mt7996_phy *phy)
-mt7996_mcu_bss_rfch_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_bss_rfch_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_vif *vif, struct mt7996_phy *phy)
-mt7996_mcu_bss_sec_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_bss_sec_tlv(struct sk_buff *skb, struct ieee80211_vif *vif)$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_vif *vif)
-mt7996_mcu_bss_txcmd_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_bss_txcmd_tlv(struct sk_buff *skb, bool en)$/;"	f	file:	signature:(struct sk_buff *skb, bool en)
-mt7996_mcu_cca_finish	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_cca_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)$/;"	f	file:	signature:(void *priv, u8 *mac, struct ieee80211_vif *vif)
-mt7996_mcu_csa_finish	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)$/;"	f	file:	signature:(void *priv, u8 *mac, struct ieee80211_vif *vif)
-mt7996_mcu_exit	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^void mt7996_mcu_exit(struct mt7996_dev *dev)$/;"	f	signature:(struct mt7996_dev *dev)
-mt7996_mcu_fw_dbg_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_fw_dbg_ctrl(struct mt7996_dev *dev, u32 module, u8 level)$/;"	f	signature:(struct mt7996_dev *dev, u32 module, u8 level)
-mt7996_mcu_fw_log_2_host	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_fw_log_2_host(struct mt7996_dev *dev, u8 type, u8 ctrl)$/;"	f	signature:(struct mt7996_dev *dev, u8 type, u8 ctrl)
-mt7996_mcu_get_chan_mib_info	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_get_chan_mib_info(struct mt7996_phy *phy, bool chan_switch)$/;"	f	signature:(struct mt7996_phy *phy, bool chan_switch)
-mt7996_mcu_get_eeprom	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_get_eeprom(struct mt7996_dev *dev, u32 offset)$/;"	f	signature:(struct mt7996_dev *dev, u32 offset)
-mt7996_mcu_get_eeprom_free_block	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_get_eeprom_free_block(struct mt7996_dev *dev, u8 *block_num)$/;"	f	signature:(struct mt7996_dev *dev, u8 *block_num)
-mt7996_mcu_get_mmps_mode	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_get_mmps_mode(enum ieee80211_smps_mode smps)$/;"	f	file:	signature:(enum ieee80211_smps_mode smps)
-mt7996_mcu_get_rx_rate	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_get_rx_rate(struct mt7996_phy *phy, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt7996_phy *phy, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct rate_info *rate)
-mt7996_mcu_get_sta_nss	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_get_sta_nss(u16 mcs_map)$/;"	f	file:	signature:(u16 mcs_map)
-mt7996_mcu_ie_countdown	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_ie_countdown(struct mt7996_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb)
-mt7996_mcu_init	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_init(struct mt7996_dev *dev)$/;"	f	signature:(struct mt7996_dev *dev)
-mt7996_mcu_init_rx_airtime	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_init_rx_airtime(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_mcu_muar_config	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_muar_config(struct mt7996_phy *phy, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct mt7996_phy *phy, struct ieee80211_vif *vif, bool bssid, bool enable)
-mt7996_mcu_parse_response	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_parse_response(struct mt76_dev *mdev, int cmd,$/;"	f	file:	signature:(struct mt76_dev *mdev, int cmd, struct sk_buff *skb, int seq)
-mt7996_mcu_rdd_background_enable	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_rdd_background_enable(struct mt7996_phy *phy,$/;"	f	signature:(struct mt7996_phy *phy, struct cfg80211_chan_def *chandef)
-mt7996_mcu_rdd_cmd	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_rdd_cmd(struct mt7996_dev *dev, int cmd, u8 index,$/;"	f	signature:(struct mt7996_dev *dev, int cmd, u8 index, u8 rx_sel, u8 val)
-mt7996_mcu_restart	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_restart(struct mt76_dev *dev)$/;"	f	signature:(struct mt76_dev *dev)
-mt7996_mcu_rf_regval	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_rf_regval(struct mt7996_dev *dev, u32 regidx, u32 *val, bool set)$/;"	f	signature:(struct mt7996_dev *dev, u32 regidx, u32 *val, bool set)
-mt7996_mcu_rx_event	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^void mt7996_mcu_rx_event(struct mt7996_dev *dev, struct sk_buff *skb)$/;"	f	signature:(struct mt7996_dev *dev, struct sk_buff *skb)
-mt7996_mcu_rx_ext_event	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_rx_ext_event(struct mt7996_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb)
-mt7996_mcu_rx_log_message	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_rx_log_message(struct mt7996_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb)
-mt7996_mcu_rx_radar_detected	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_rx_radar_detected(struct mt7996_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb)
-mt7996_mcu_rx_unsolicited_event	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_rx_unsolicited_event(struct mt7996_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb)
-mt7996_mcu_send_message	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt76_dev *mdev, struct sk_buff *skb, int cmd, int *wait_seq)
-mt7996_mcu_send_ram_firmware	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_send_ram_firmware(struct mt7996_dev *dev,$/;"	f	file:	signature:(struct mt7996_dev *dev, const struct mt7996_fw_trailer *hdr, const u8 *data, bool is_wa)
-mt7996_mcu_set_chan_info	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_chan_info(struct mt7996_phy *phy, u16 tag)$/;"	f	signature:(struct mt7996_phy *phy, u16 tag)
-mt7996_mcu_set_eeprom	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_eeprom(struct mt7996_dev *dev)$/;"	f	signature:(struct mt7996_dev *dev)
-mt7996_mcu_set_eeprom_flash	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^static int mt7996_mcu_set_eeprom_flash(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_mcu_set_fcc5_lpn	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_fcc5_lpn(struct mt7996_dev *dev, int val)$/;"	f	signature:(struct mt7996_dev *dev, int val)
-mt7996_mcu_set_fixed_rate_ctrl	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_fixed_rate_ctrl(struct mt7996_dev *dev,$/;"	f	signature:(struct mt7996_dev *dev, void *data, u16 version)
-mt7996_mcu_set_hdr_trans	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_hdr_trans(struct mt7996_dev *dev, bool hdr_trans)$/;"	f	signature:(struct mt7996_dev *dev, bool hdr_trans)
-mt7996_mcu_set_mwds	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^static int mt7996_mcu_set_mwds(struct mt7996_dev *dev, bool enabled)$/;"	f	file:	signature:(struct mt7996_dev *dev, bool enabled)
-mt7996_mcu_set_pm	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^void mt7996_mcu_set_pm(void *priv, u8 *mac, struct ieee80211_vif *vif)$/;"	f	signature:(void *priv, u8 *mac, struct ieee80211_vif *vif)
-mt7996_mcu_set_pulse_th	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_pulse_th(struct mt7996_dev *dev,$/;"	f	signature:(struct mt7996_dev *dev, const struct mt7996_dfs_pulse *pulse)
-mt7996_mcu_set_radar_th	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_radar_th(struct mt7996_dev *dev, int index,$/;"	f	signature:(struct mt7996_dev *dev, int index, const struct mt7996_dfs_pattern *pattern)
-mt7996_mcu_set_radio_en	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_radio_en(struct mt7996_phy *phy, bool enable)$/;"	f	signature:(struct mt7996_phy *phy, bool enable)
-mt7996_mcu_set_rro	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_rro(struct mt7996_dev *dev, u16 tag, u8 val)$/;"	f	signature:(struct mt7996_dev *dev, u16 tag, u8 val)
-mt7996_mcu_set_rts_thresh	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_rts_thresh(struct mt7996_phy *phy, u32 val)$/;"	f	signature:(struct mt7996_phy *phy, u32 val)
-mt7996_mcu_set_ser	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_ser(struct mt7996_dev *dev, u8 action, u8 set, u8 band)$/;"	f	signature:(struct mt7996_dev *dev, u8 action, u8 set, u8 band)
-mt7996_mcu_set_sta_he_mcs	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_set_sta_he_mcs(struct ieee80211_sta *sta, __le16 *he_mcs,$/;"	f	file:	signature:(struct ieee80211_sta *sta, __le16 *he_mcs, u16 mcs_map)
-mt7996_mcu_set_sta_ht_mcs	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_set_sta_ht_mcs(struct ieee80211_sta *sta, u8 *ht_mcs,$/;"	f	file:	signature:(struct ieee80211_sta *sta, u8 *ht_mcs, const u8 *mask)
-mt7996_mcu_set_sta_vht_mcs	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_set_sta_vht_mcs(struct ieee80211_sta *sta, __le16 *vht_mcs,$/;"	f	file:	signature:(struct ieee80211_sta *sta, __le16 *vht_mcs, const u16 *mask)
-mt7996_mcu_set_tx	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_tx(struct mt7996_dev *dev, struct ieee80211_vif *vif)$/;"	f	signature:(struct mt7996_dev *dev, struct ieee80211_vif *vif)
-mt7996_mcu_set_txbf	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_set_txbf(struct mt7996_dev *dev, u8 action)$/;"	f	signature:(struct mt7996_dev *dev, u8 action)
-mt7996_mcu_sta_amsdu_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_amsdu_tlv(struct mt7996_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_mcu_sta_ba	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_ba(struct mt76_dev *dev, struct mt76_vif *mvif,$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_vif *mvif, struct ieee80211_ampdu_params *params, bool enable, bool tx)
-mt7996_mcu_sta_bfee_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_bfee_tlv(struct mt7996_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_mcu_sta_bfer_he	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_sta *sta, struct ieee80211_vif *vif, struct mt7996_phy *phy, struct sta_rec_bf *bf)
-mt7996_mcu_sta_bfer_ht	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_bfer_ht(struct ieee80211_sta *sta, struct mt7996_phy *phy,$/;"	f	file:	signature:(struct ieee80211_sta *sta, struct mt7996_phy *phy, struct sta_rec_bf *bf)
-mt7996_mcu_sta_bfer_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_bfer_tlv(struct mt7996_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_mcu_sta_bfer_vht	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_bfer_vht(struct ieee80211_sta *sta, struct mt7996_phy *phy,$/;"	f	file:	signature:(struct ieee80211_sta *sta, struct mt7996_phy *phy, struct sta_rec_bf *bf, bool explicit)
-mt7996_mcu_sta_hdr_trans_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_hdr_trans_tlv(struct mt7996_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_mcu_sta_hdrt_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_hdrt_tlv(struct mt7996_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb)
-mt7996_mcu_sta_he_6g_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_he_6g_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_sta *sta)
-mt7996_mcu_sta_he_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_sta *sta)
-mt7996_mcu_sta_ht_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_sta *sta)
-mt7996_mcu_sta_key_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_key_tlv(struct mt76_wcid *wcid,$/;"	f	file:	signature:(struct mt76_wcid *wcid, struct mt76_connac_sta_key_conf *sta_key_conf, struct sk_buff *skb, struct ieee80211_key_conf *key, enum set_key_cmd cmd)
-mt7996_mcu_sta_phy_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_phy_tlv(struct mt7996_dev *dev, struct sk_buff *skb,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_mcu_sta_rate_ctrl_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7996_dev *dev,$/;"	f	file:	signature:(struct sk_buff *skb, struct mt7996_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_mcu_sta_sounding_rate	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_sounding_rate(struct sta_rec_bf *bf)$/;"	f	file:	signature:(struct sta_rec_bf *bf)
-mt7996_mcu_sta_vht_tlv	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_sta_vht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)$/;"	f	file:	signature:(struct sk_buff *skb, struct ieee80211_sta *sta)
-mt7996_mcu_twt_agrt_update	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_twt_agrt_update(struct mt7996_dev *dev,$/;"	f	signature:(struct mt7996_dev *dev, struct mt7996_vif *mvif, struct mt7996_twt_flow *flow, int cmd)
-mt7996_mcu_uni_rx_unsolicited_event	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^mt7996_mcu_uni_rx_unsolicited_event(struct mt7996_dev *dev, struct sk_buff *skb)$/;"	f	file:	signature:(struct mt7996_dev *dev, struct sk_buff *skb)
-mt7996_mcu_update_bss_color	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_update_bss_color(struct mt7996_dev *dev, struct ieee80211_vif *vif,$/;"	f	signature:(struct mt7996_dev *dev, struct ieee80211_vif *vif, struct cfg80211_he_bss_color *he_bss_color)
-mt7996_mcu_wa_cmd	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_wa_cmd(struct mt7996_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)$/;"	f	signature:(struct mt7996_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
-mt7996_mcu_wtbl_update_hdr_trans	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^int mt7996_mcu_wtbl_update_hdr_trans(struct mt7996_dev *dev,$/;"	f	signature:(struct mt7996_dev *dev, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_offset_tsf	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_offset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, s64 timestamp)
-mt7996_ops	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^const struct ieee80211_ops mt7996_ops = {$/;"	v	typeref:struct:ieee80211_ops
-mt7996_patch_hdr	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^struct mt7996_patch_hdr {$/;"	s	file:
-mt7996_patch_hdr::__anon1::crc	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 crc;$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-mt7996_patch_hdr::__anon1::feature	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 feature;$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-mt7996_patch_hdr::__anon1::n_region	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 n_region;$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-mt7996_patch_hdr::__anon1::patch_ver	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 patch_ver;$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-mt7996_patch_hdr::__anon1::reserved	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		u32 reserved[11];$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-mt7996_patch_hdr::__anon1::subsys	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 subsys;$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-mt7996_patch_hdr::build_date	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	char build_date[16];$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-mt7996_patch_hdr::checksum	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be16 checksum;$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-mt7996_patch_hdr::desc	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	} desc;$/;"	m	struct:mt7996_patch_hdr	typeref:struct:mt7996_patch_hdr::__anon1	file:	access:public
-mt7996_patch_hdr::hw_sw_ver	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be32 hw_sw_ver;$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-mt7996_patch_hdr::patch_ver	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be32 patch_ver;$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-mt7996_patch_hdr::platform	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	char platform[4];$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-mt7996_patch_hdr::reserved	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u16 reserved;$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-mt7996_patch_sec	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^struct mt7996_patch_sec {$/;"	s	file:
-mt7996_patch_sec::__anon2::__anon3::addr	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^			__be32 addr;$/;"	m	struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-mt7996_patch_sec::__anon2::__anon3::align_len	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^			__be32 align_len;$/;"	m	struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-mt7996_patch_sec::__anon2::__anon3::len	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^			__be32 len;$/;"	m	struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-mt7996_patch_sec::__anon2::__anon3::reserved	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^			u32 reserved[9];$/;"	m	struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-mt7996_patch_sec::__anon2::__anon3::sec_key_idx	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^			__be32 sec_key_idx;$/;"	m	struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-mt7996_patch_sec::__anon2::info	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		} info;$/;"	m	union:mt7996_patch_sec::__anon2	typeref:struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-mt7996_patch_sec::__anon2::spec	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 spec[13];$/;"	m	union:mt7996_patch_sec::__anon2	file:	access:public
-mt7996_patch_sec::offs	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be32 offs;$/;"	m	struct:mt7996_patch_sec	file:	access:public
-mt7996_patch_sec::size	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be32 size;$/;"	m	struct:mt7996_patch_sec	file:	access:public
-mt7996_patch_sec::type	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be32 type;$/;"	m	struct:mt7996_patch_sec	file:	access:public
-mt7996_patch_sec_mode	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^static u32 mt7996_patch_sec_mode(u32 key_info)$/;"	f	file:	signature:(u32 key_info)
-mt7996_phy_get_nf	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_phy_get_nf(struct mt7996_phy *phy, u8 band_idx)$/;"	f	file:	signature:(struct mt7996_phy *phy, u8 band_idx)
-mt7996_queue_rx_skb	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,$/;"	f	signature:(struct mt76_dev *mdev, enum mt76_rxq_id q, struct sk_buff *skb)
-mt7996_regd_notifier	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^mt7996_regd_notifier(struct wiphy *wiphy,$/;"	f	file:	signature:(struct wiphy *wiphy, struct regulatory_request *request)
-mt7996_register_device	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^int mt7996_register_device(struct mt7996_dev *dev)$/;"	f	signature:(struct mt7996_dev *dev)
-mt7996_register_phy	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^static int mt7996_register_phy(struct mt7996_dev *dev, struct mt7996_phy *phy,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct mt7996_phy *phy, enum mt76_band_id band)
-mt7996_remove_interface	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_remove_interface(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
-mt7996_reverse_frag0_hdr_trans	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^static int mt7996_reverse_frag0_hdr_trans(struct sk_buff *skb, u16 hdr_gap)$/;"	f	file:	signature:(struct sk_buff *skb, u16 hdr_gap)
-mt7996_rx_check	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^bool mt7996_rx_check(struct mt76_dev *mdev, void *data, int len)$/;"	f	signature:(struct mt76_dev *mdev, void *data, int len)
-mt7996_rx_get_wcid	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^static struct mt76_wcid *mt7996_rx_get_wcid(struct mt7996_dev *dev,$/;"	f	file:	signature:(struct mt7996_dev *dev, u16 idx, bool unicast)
-mt7996_set_antenna	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)$/;"	f	file:	signature:(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
-mt7996_set_bitrate_mask	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_set_bitrate_mask(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, const struct cfg80211_bitrate_mask *mask)
-mt7996_set_channel	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^int mt7996_set_channel(struct mt7996_phy *phy)$/;"	f	signature:(struct mt7996_phy *phy)
-mt7996_set_coverage_class	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class)$/;"	f	file:	signature:(struct ieee80211_hw *hw, s16 coverage_class)
-mt7996_set_key	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static int mt7996_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,$/;"	f	file:	signature:(struct ieee80211_hw *hw, enum set_key_cmd cmd, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct ieee80211_key_conf *key)
-mt7996_set_radar_background	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_set_radar_background(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct cfg80211_chan_def *chandef)
-mt7996_set_rts_threshold	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static int mt7996_set_rts_threshold(struct ieee80211_hw *hw, u32 val)$/;"	f	file:	signature:(struct ieee80211_hw *hw, u32 val)
-mt7996_set_stream_he_caps	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^void mt7996_set_stream_he_caps(struct mt7996_phy *phy)$/;"	f	signature:(struct mt7996_phy *phy)
-mt7996_set_stream_he_txbf_caps	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^mt7996_set_stream_he_txbf_caps(struct mt7996_phy *phy,$/;"	f	file:	signature:(struct mt7996_phy *phy, struct ieee80211_sta_he_cap *he_cap, int vif)
-mt7996_set_stream_vht_txbf_caps	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^void mt7996_set_stream_vht_txbf_caps(struct mt7996_phy *phy)$/;"	f	signature:(struct mt7996_phy *phy)
-mt7996_set_tsf	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u64 timestamp)
-mt7996_sta_add	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_sta_ps	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps)$/;"	f	signature:(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps)
-mt7996_sta_rc_update	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_sta_rc_update(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, u32 changed)
-mt7996_sta_rc_work	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_sta_rc_work(void *data, struct ieee80211_sta *sta)$/;"	f	file:	signature:(void *data, struct ieee80211_sta *sta)
-mt7996_sta_remove	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta)
-mt7996_sta_set_4addr	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_sta_set_4addr(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool enabled)
-mt7996_sta_set_decap_offload	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_sta_set_decap_offload(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, bool enabled)
-mt7996_sta_statistics	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_sta_statistics(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, struct station_info *sinfo)
-mt7996_start	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static int mt7996_start(struct ieee80211_hw *hw)$/;"	f	file:	signature:(struct ieee80211_hw *hw)
-mt7996_stop	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_stop(struct ieee80211_hw *hw)$/;"	f	file:	signature:(struct ieee80211_hw *hw)
-mt7996_twt_teardown_request	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_twt_teardown_request(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_sta *sta, u8 flowid)
-mt7996_tx	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^static void mt7996_tx(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_tx_control *control, struct sk_buff *skb)
-mt7996_tx_check_aggr	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)$/;"	f	file:	signature:(struct ieee80211_sta *sta, __le32 *txwi)
-mt7996_tx_complete_skb	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e)$/;"	f	signature:(struct mt76_dev *mdev, struct mt76_queue_entry *e)
-mt7996_tx_prepare_skb	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^int mt7996_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,$/;"	f	signature:(struct mt76_dev *mdev, void *txwi_ptr, enum mt76_txq_id qid, struct mt76_wcid *wcid, struct ieee80211_sta *sta, struct mt76_tx_info *tx_info)
-mt7996_tx_token_put	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_tx_token_put(struct mt7996_dev *dev)$/;"	f	signature:(struct mt7996_dev *dev)
-mt7996_txbf_init	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^static int mt7996_txbf_init(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_txp_skb_unmap	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_txp_skb_unmap(struct mt76_dev *dev, struct mt76_txwi_cache *t)$/;"	f	file:	signature:(struct mt76_dev *dev, struct mt76_txwi_cache *t)
-mt7996_txwi_free	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_txwi_free(struct mt7996_dev *dev, struct mt76_txwi_cache *t,$/;"	f	file:	signature:(struct mt7996_dev *dev, struct mt76_txwi_cache *t, struct ieee80211_sta *sta, struct list_head *free_list)
-mt7996_unregister_device	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^void mt7996_unregister_device(struct mt7996_dev *dev)$/;"	f	signature:(struct mt7996_dev *dev)
-mt7996_unregister_phy	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^mt7996_unregister_phy(struct mt7996_phy *phy, enum mt76_band_id band)$/;"	f	file:	signature:(struct mt7996_phy *phy, enum mt76_band_id band)
-mt7996_update_beacons	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_update_beacons(struct mt7996_dev *dev)$/;"	f	file:	signature:(struct mt7996_dev *dev)
-mt7996_update_bss_color	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/main.c	/^mt7996_update_bss_color(struct ieee80211_hw *hw,$/;"	f	file:	signature:(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct cfg80211_he_bss_color *bss_color)
-mt7996_update_channel	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^void mt7996_update_channel(struct mt76_phy *mphy)$/;"	f	signature:(struct mt76_phy *mphy)
-mt7996_update_vif_beacon	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_update_vif_beacon(void *priv, u8 *mac, struct ieee80211_vif *vif)$/;"	f	file:	signature:(void *priv, u8 *mac, struct ieee80211_vif *vif)
-mt7996_wait_reset_state	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	/^mt7996_wait_reset_state(struct mt7996_dev *dev, u32 state)$/;"	f	file:	signature:(struct mt7996_dev *dev, u32 state)
-mt7996_wfsys_reset	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/init.c	/^void mt7996_wfsys_reset(struct mt7996_dev *dev)$/;"	f	signature:(struct mt7996_dev *dev)
-n_region	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 n_region;$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-n_region	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 n_region;$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-offs	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be32 offs;$/;"	m	struct:mt7996_patch_sec	file:	access:public
-patch_ver	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 patch_ver;$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-patch_ver	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be32 patch_ver;$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-platform	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	char platform[4];$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-reserved	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^			u32 reserved[9];$/;"	m	struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-reserved	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		u32 reserved[11];$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-reserved	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u16 reserved;$/;"	m	struct:mt7996_patch_hdr	file:	access:public
-reserved	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 reserved[2];$/;"	m	struct:mt7996_fw_trailer	file:	access:public
-reserved	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 reserved[4];$/;"	m	struct:mt7996_fw_region	file:	access:public
-reserved1	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	u8 reserved1[15];$/;"	m	struct:mt7996_fw_region	file:	access:public
-sec_key_idx	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^			__be32 sec_key_idx;$/;"	m	struct:mt7996_patch_sec::__anon2::__anon3	file:	access:public
-size	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be32 size;$/;"	m	struct:mt7996_patch_sec	file:	access:public
-spec	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 spec[13];$/;"	m	union:mt7996_patch_sec::__anon2	file:	access:public
-subsys	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^		__be32 subsys;$/;"	m	struct:mt7996_patch_hdr::__anon1	file:	access:public
-to_rssi	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mac.c	13;"	d	file:
-tolerated	/home/mtk21047/ws/mt76/mt76-upstream/mt7915/mcu.c	/^	bool tolerated;$/;"	m	struct:mt7915_he_obss_narrow_bw_ru_data	file:	access:public
-type	/home/mtk21047/ws/mt76/mt76-upstream/mt7996/mcu.c	/^	__be32 type;$/;"	m	struct:mt7996_patch_sec	file:	access:public
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/testmode.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/testmode.c
deleted file mode 100644
index 0accc71..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/testmode.c
+++ /dev/null
@@ -1,675 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 Felix Fietkau <nbd@nbd.name> */
-
-#include <linux/random.h>
-#include "mt76.h"
-
-const struct nla_policy mt76_tm_policy[NUM_MT76_TM_ATTRS] = {
-	[MT76_TM_ATTR_RESET] = { .type = NLA_FLAG },
-	[MT76_TM_ATTR_STATE] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_COUNT] = { .type = NLA_U32 },
-	[MT76_TM_ATTR_TX_RATE_MODE] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_RATE_NSS] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_RATE_IDX] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_RATE_SGI] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_RATE_LDPC] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_RATE_STBC] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_LTF] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_ANTENNA] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_SPE_IDX] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_POWER_CONTROL] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_POWER] = { .type = NLA_NESTED },
-	[MT76_TM_ATTR_TX_DUTY_CYCLE] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_IPG] = { .type = NLA_U32 },
-	[MT76_TM_ATTR_TX_TIME] = { .type = NLA_U32 },
-	[MT76_TM_ATTR_FREQ_OFFSET] = { .type = NLA_U32 },
-	[MT76_TM_ATTR_DRV_DATA] = { .type = NLA_NESTED },
-};
-EXPORT_SYMBOL_GPL(mt76_tm_policy);
-
-void mt76_testmode_tx_pending(struct mt76_phy *phy)
-{
-	struct mt76_testmode_data *td = &phy->test;
-	struct mt76_dev *dev = phy->dev;
-	struct mt76_wcid *wcid = &dev->global_wcid;
-	struct sk_buff *skb = td->tx_skb;
-	struct mt76_queue *q;
-	u16 tx_queued_limit;
-	int qid;
-
-	if (!skb || !td->tx_pending)
-		return;
-
-	qid = skb_get_queue_mapping(skb);
-	q = phy->q_tx[qid];
-
-	tx_queued_limit = td->tx_queued_limit ? td->tx_queued_limit : 1000;
-
-	spin_lock_bh(&q->lock);
-
-	while (td->tx_pending > 0 &&
-	       td->tx_queued - td->tx_done < tx_queued_limit &&
-	       q->queued < q->ndesc / 2) {
-		int ret;
-
-		ret = dev->queue_ops->tx_queue_skb(dev, q, qid, skb_get(skb),
-						   wcid, NULL);
-		if (ret < 0)
-			break;
-
-		td->tx_pending--;
-		td->tx_queued++;
-	}
-
-	dev->queue_ops->kick(dev, q);
-
-	spin_unlock_bh(&q->lock);
-}
-
-static u32
-mt76_testmode_max_mpdu_len(struct mt76_phy *phy, u8 tx_rate_mode)
-{
-	switch (tx_rate_mode) {
-	case MT76_TM_TX_MODE_HT:
-		return IEEE80211_MAX_MPDU_LEN_HT_7935;
-	case MT76_TM_TX_MODE_VHT:
-	case MT76_TM_TX_MODE_HE_SU:
-	case MT76_TM_TX_MODE_HE_EXT_SU:
-	case MT76_TM_TX_MODE_HE_TB:
-	case MT76_TM_TX_MODE_HE_MU:
-		if (phy->sband_5g.sband.vht_cap.cap &
-		    IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_7991)
-			return IEEE80211_MAX_MPDU_LEN_VHT_7991;
-		return IEEE80211_MAX_MPDU_LEN_VHT_11454;
-	case MT76_TM_TX_MODE_CCK:
-	case MT76_TM_TX_MODE_OFDM:
-	default:
-		return IEEE80211_MAX_FRAME_LEN;
-	}
-}
-
-static void
-mt76_testmode_free_skb(struct mt76_phy *phy)
-{
-	struct mt76_testmode_data *td = &phy->test;
-
-	dev_kfree_skb(td->tx_skb);
-	td->tx_skb = NULL;
-}
-
-int mt76_testmode_alloc_skb(struct mt76_phy *phy, u32 len)
-{
-#define MT_TXP_MAX_LEN	4095
-	u16 fc = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA |
-		 IEEE80211_FCTL_FROMDS;
-	struct mt76_testmode_data *td = &phy->test;
-	struct sk_buff **frag_tail, *head;
-	struct ieee80211_tx_info *info;
-	struct ieee80211_hdr *hdr;
-	u32 max_len, head_len;
-	int nfrags, i;
-
-	max_len = mt76_testmode_max_mpdu_len(phy, td->tx_rate_mode);
-	if (len > max_len)
-		len = max_len;
-	else if (len < sizeof(struct ieee80211_hdr))
-		len = sizeof(struct ieee80211_hdr);
-
-	nfrags = len / MT_TXP_MAX_LEN;
-	head_len = nfrags ? MT_TXP_MAX_LEN : len;
-
-	if (len > IEEE80211_MAX_FRAME_LEN)
-		fc |= IEEE80211_STYPE_QOS_DATA;
-
-	head = alloc_skb(head_len, GFP_KERNEL);
-	if (!head)
-		return -ENOMEM;
-
-	hdr = __skb_put_zero(head, sizeof(*hdr));
-	hdr->frame_control = cpu_to_le16(fc);
-	memcpy(hdr->addr1, td->addr[0], ETH_ALEN);
-	memcpy(hdr->addr2, td->addr[1], ETH_ALEN);
-	memcpy(hdr->addr3, td->addr[2], ETH_ALEN);
-	skb_set_queue_mapping(head, IEEE80211_AC_BE);
-	get_random_bytes(__skb_put(head, head_len - sizeof(*hdr)),
-			 head_len - sizeof(*hdr));
-
-	info = IEEE80211_SKB_CB(head);
-	info->flags = IEEE80211_TX_CTL_INJECTED |
-		      IEEE80211_TX_CTL_NO_ACK |
-		      IEEE80211_TX_CTL_NO_PS_BUFFER;
-
-	info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, phy->band_idx);
-	frag_tail = &skb_shinfo(head)->frag_list;
-
-	for (i = 0; i < nfrags; i++) {
-		struct sk_buff *frag;
-		u16 frag_len;
-
-		if (i == nfrags - 1)
-			frag_len = len % MT_TXP_MAX_LEN;
-		else
-			frag_len = MT_TXP_MAX_LEN;
-
-		frag = alloc_skb(frag_len, GFP_KERNEL);
-		if (!frag) {
-			mt76_testmode_free_skb(phy);
-			dev_kfree_skb(head);
-			return -ENOMEM;
-		}
-
-		get_random_bytes(__skb_put(frag, frag_len), frag_len);
-		head->len += frag->len;
-		head->data_len += frag->len;
-
-		*frag_tail = frag;
-		frag_tail = &(*frag_tail)->next;
-	}
-
-	mt76_testmode_free_skb(phy);
-	td->tx_skb = head;
-
-	return 0;
-}
-EXPORT_SYMBOL(mt76_testmode_alloc_skb);
-
-static int
-mt76_testmode_tx_init(struct mt76_phy *phy)
-{
-	struct mt76_testmode_data *td = &phy->test;
-	struct ieee80211_tx_info *info;
-	struct ieee80211_tx_rate *rate;
-	u8 max_nss = hweight8(phy->antenna_mask);
-	int ret;
-
-	ret = mt76_testmode_alloc_skb(phy, td->tx_mpdu_len);
-	if (ret)
-		return ret;
-
-	if (td->tx_rate_mode > MT76_TM_TX_MODE_VHT)
-		goto out;
-
-	if (td->tx_antenna_mask)
-		max_nss = min_t(u8, max_nss, hweight8(td->tx_antenna_mask));
-
-	info = IEEE80211_SKB_CB(td->tx_skb);
-	rate = &info->control.rates[0];
-	rate->count = 1;
-	rate->idx = td->tx_rate_idx;
-
-	switch (td->tx_rate_mode) {
-	case MT76_TM_TX_MODE_CCK:
-		if (phy->chandef.chan->band != NL80211_BAND_2GHZ)
-			return -EINVAL;
-
-		if (rate->idx > 4)
-			return -EINVAL;
-		break;
-	case MT76_TM_TX_MODE_OFDM:
-		if (phy->chandef.chan->band != NL80211_BAND_2GHZ)
-			break;
-
-		if (rate->idx > 8)
-			return -EINVAL;
-
-		rate->idx += 4;
-		break;
-	case MT76_TM_TX_MODE_HT:
-		if (rate->idx > 8 * max_nss &&
-			!(rate->idx == 32 &&
-			  phy->chandef.width >= NL80211_CHAN_WIDTH_40))
-			return -EINVAL;
-
-		rate->flags |= IEEE80211_TX_RC_MCS;
-		break;
-	case MT76_TM_TX_MODE_VHT:
-		if (rate->idx > 9)
-			return -EINVAL;
-
-		if (td->tx_rate_nss > max_nss)
-			return -EINVAL;
-
-		ieee80211_rate_set_vht(rate, td->tx_rate_idx, td->tx_rate_nss);
-		rate->flags |= IEEE80211_TX_RC_VHT_MCS;
-		break;
-	default:
-		break;
-	}
-
-	if (td->tx_rate_sgi)
-		rate->flags |= IEEE80211_TX_RC_SHORT_GI;
-
-	if (td->tx_rate_ldpc)
-		info->flags |= IEEE80211_TX_CTL_LDPC;
-
-	if (td->tx_rate_stbc)
-		info->flags |= IEEE80211_TX_CTL_STBC;
-
-	if (td->tx_rate_mode >= MT76_TM_TX_MODE_HT) {
-		switch (phy->chandef.width) {
-		case NL80211_CHAN_WIDTH_40:
-			rate->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
-			break;
-		case NL80211_CHAN_WIDTH_80:
-			rate->flags |= IEEE80211_TX_RC_80_MHZ_WIDTH;
-			break;
-		case NL80211_CHAN_WIDTH_80P80:
-		case NL80211_CHAN_WIDTH_160:
-			rate->flags |= IEEE80211_TX_RC_160_MHZ_WIDTH;
-			break;
-		default:
-			break;
-		}
-	}
-out:
-	return 0;
-}
-
-static void
-mt76_testmode_tx_start(struct mt76_phy *phy)
-{
-	struct mt76_testmode_data *td = &phy->test;
-	struct mt76_dev *dev = phy->dev;
-
-	td->tx_queued = 0;
-	td->tx_done = 0;
-	td->tx_pending = td->tx_count;
-	mt76_worker_schedule(&dev->tx_worker);
-}
-
-static void
-mt76_testmode_tx_stop(struct mt76_phy *phy)
-{
-	struct mt76_testmode_data *td = &phy->test;
-	struct mt76_dev *dev = phy->dev;
-
-	mt76_worker_disable(&dev->tx_worker);
-
-	td->tx_pending = 0;
-
-	mt76_worker_enable(&dev->tx_worker);
-
-	wait_event_timeout(dev->tx_wait, td->tx_done == td->tx_queued,
-			   MT76_TM_TIMEOUT * HZ);
-
-	mt76_testmode_free_skb(phy);
-}
-
-static inline void
-mt76_testmode_param_set(struct mt76_testmode_data *td, u16 idx)
-{
-	td->param_set[idx / 32] |= BIT(idx % 32);
-}
-
-static inline bool
-mt76_testmode_param_present(struct mt76_testmode_data *td, u16 idx)
-{
-	return td->param_set[idx / 32] & BIT(idx % 32);
-}
-
-static void
-mt76_testmode_init_defaults(struct mt76_phy *phy)
-{
-	struct mt76_testmode_data *td = &phy->test;
-
-	if (td->tx_mpdu_len > 0)
-		return;
-
-	td->tx_mpdu_len = 1024;
-	td->tx_count = 1;
-	td->tx_rate_mode = MT76_TM_TX_MODE_OFDM;
-	td->tx_rate_nss = 1;
-
-	memcpy(td->addr[0], phy->macaddr, ETH_ALEN);
-	memcpy(td->addr[1], phy->macaddr, ETH_ALEN);
-	memcpy(td->addr[2], phy->macaddr, ETH_ALEN);
-}
-
-static int
-__mt76_testmode_set_state(struct mt76_phy *phy, enum mt76_testmode_state state)
-{
-	enum mt76_testmode_state prev_state = phy->test.state;
-	struct mt76_dev *dev = phy->dev;
-	int err;
-
-	if (prev_state == MT76_TM_STATE_TX_FRAMES)
-		mt76_testmode_tx_stop(phy);
-
-	if (state == MT76_TM_STATE_TX_FRAMES) {
-		err = mt76_testmode_tx_init(phy);
-		if (err)
-			return err;
-	}
-
-	err = dev->test_ops->set_state(phy, state);
-	if (err) {
-		if (state == MT76_TM_STATE_TX_FRAMES)
-			mt76_testmode_tx_stop(phy);
-
-		return err;
-	}
-
-	if (state == MT76_TM_STATE_TX_FRAMES)
-		mt76_testmode_tx_start(phy);
-	else if (state == MT76_TM_STATE_RX_FRAMES) {
-		memset(&phy->test.rx_stats, 0, sizeof(phy->test.rx_stats));
-	}
-
-	phy->test.state = state;
-
-	return 0;
-}
-
-int mt76_testmode_set_state(struct mt76_phy *phy, enum mt76_testmode_state state)
-{
-	struct mt76_testmode_data *td = &phy->test;
-	struct ieee80211_hw *hw = phy->hw;
-
-	if (state == td->state && state == MT76_TM_STATE_OFF)
-		return 0;
-
-	if (state > MT76_TM_STATE_OFF &&
-	    (!test_bit(MT76_STATE_RUNNING, &phy->state) ||
-	     !(hw->conf.flags & IEEE80211_CONF_MONITOR)))
-		return -ENOTCONN;
-
-	if (state != MT76_TM_STATE_IDLE &&
-	    td->state != MT76_TM_STATE_IDLE) {
-		int ret;
-
-		ret = __mt76_testmode_set_state(phy, MT76_TM_STATE_IDLE);
-		if (ret)
-			return ret;
-	}
-
-	return __mt76_testmode_set_state(phy, state);
-
-}
-EXPORT_SYMBOL(mt76_testmode_set_state);
-
-static int
-mt76_tm_get_u8(struct nlattr *attr, u8 *dest, u8 min, u8 max)
-{
-	u8 val;
-
-	if (!attr)
-		return 0;
-
-	val = nla_get_u8(attr);
-	if (val < min || val > max)
-		return -EINVAL;
-
-	*dest = val;
-	return 0;
-}
-
-int mt76_testmode_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-		      void *data, int len)
-{
-	struct mt76_phy *phy = hw->priv;
-	struct mt76_dev *dev = phy->dev;
-	struct mt76_testmode_data *td = &phy->test;
-	struct nlattr *tb[NUM_MT76_TM_ATTRS];
-	u32 state;
-	int err;
-	int i;
-
-	if (!dev->test_ops)
-		return -EOPNOTSUPP;
-
-	err = nla_parse_deprecated(tb, MT76_TM_ATTR_MAX, data, len,
-				   mt76_tm_policy, NULL);
-	if (err)
-		return err;
-
-	err = -EINVAL;
-
-	mutex_lock(&dev->mutex);
-
-	if (tb[MT76_TM_ATTR_RESET]) {
-		mt76_testmode_set_state(phy, MT76_TM_STATE_OFF);
-		memset(td, 0, sizeof(*td));
-	}
-
-	mt76_testmode_init_defaults(phy);
-
-	if (tb[MT76_TM_ATTR_TX_COUNT])
-		td->tx_count = nla_get_u32(tb[MT76_TM_ATTR_TX_COUNT]);
-
-	if (tb[MT76_TM_ATTR_TX_RATE_IDX])
-		td->tx_rate_idx = nla_get_u8(tb[MT76_TM_ATTR_TX_RATE_IDX]);
-
-	if (mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_RATE_MODE], &td->tx_rate_mode,
-			   0, MT76_TM_TX_MODE_MAX) ||
-	    mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_RATE_NSS], &td->tx_rate_nss,
-			   1, hweight8(phy->antenna_mask)) ||
-	    mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_RATE_SGI], &td->tx_rate_sgi, 0, 2) ||
-	    mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_RATE_LDPC], &td->tx_rate_ldpc, 0, 1) ||
-	    mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_RATE_STBC], &td->tx_rate_stbc, 0, 1) ||
-	    mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_LTF], &td->tx_ltf, 0, 2) ||
-	    mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_ANTENNA],
-			   &td->tx_antenna_mask, 0, 0xff) ||
-	    mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_SPE_IDX], &td->tx_spe_idx, 0, 27) ||
-	    mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_DUTY_CYCLE],
-			   &td->tx_duty_cycle, 0, 99) ||
-	    mt76_tm_get_u8(tb[MT76_TM_ATTR_TX_POWER_CONTROL],
-			   &td->tx_power_control, 0, 1))
-		goto out;
-
-	if (tb[MT76_TM_ATTR_TX_LENGTH]) {
-		u32 val = nla_get_u32(tb[MT76_TM_ATTR_TX_LENGTH]);
-
-		if (val > mt76_testmode_max_mpdu_len(phy, td->tx_rate_mode) ||
-		    val < sizeof(struct ieee80211_hdr))
-			goto out;
-
-		td->tx_mpdu_len = val;
-	}
-
-	if (tb[MT76_TM_ATTR_TX_IPG])
-		td->tx_ipg = nla_get_u32(tb[MT76_TM_ATTR_TX_IPG]);
-
-	if (tb[MT76_TM_ATTR_TX_TIME])
-		td->tx_time = nla_get_u32(tb[MT76_TM_ATTR_TX_TIME]);
-
-	if (tb[MT76_TM_ATTR_FREQ_OFFSET])
-		td->freq_offset = nla_get_u32(tb[MT76_TM_ATTR_FREQ_OFFSET]);
-
-	if (tb[MT76_TM_ATTR_STATE]) {
-		state = nla_get_u32(tb[MT76_TM_ATTR_STATE]);
-		if (state > MT76_TM_STATE_MAX)
-			goto out;
-	} else {
-		state = td->state;
-	}
-
-	if (tb[MT76_TM_ATTR_TX_POWER]) {
-		struct nlattr *cur;
-		int idx = 0;
-		int rem;
-
-		nla_for_each_nested(cur, tb[MT76_TM_ATTR_TX_POWER], rem) {
-			if (nla_len(cur) != 1 ||
-			    idx >= ARRAY_SIZE(td->tx_power))
-				goto out;
-
-			td->tx_power[idx++] = nla_get_u8(cur);
-		}
-	}
-
-	if (tb[MT76_TM_ATTR_MAC_ADDRS]) {
-		struct nlattr *cur;
-		int idx = 0;
-		int rem;
-
-		nla_for_each_nested(cur, tb[MT76_TM_ATTR_MAC_ADDRS], rem) {
-			if (nla_len(cur) != ETH_ALEN || idx >= 3)
-				goto out;
-
-			memcpy(td->addr[idx], nla_data(cur), ETH_ALEN);
-			idx++;
-		}
-	}
-
-	if (dev->test_ops->set_params) {
-		err = dev->test_ops->set_params(phy, tb, state);
-		if (err)
-			goto out;
-	}
-
-	for (i = MT76_TM_ATTR_STATE; i < ARRAY_SIZE(tb); i++)
-		if (tb[i])
-			mt76_testmode_param_set(td, i);
-
-	err = 0;
-	if (tb[MT76_TM_ATTR_STATE])
-		err = mt76_testmode_set_state(phy, state);
-
-out:
-	mutex_unlock(&dev->mutex);
-
-	return err;
-}
-EXPORT_SYMBOL(mt76_testmode_cmd);
-
-static int
-mt76_testmode_dump_stats(struct mt76_phy *phy, struct sk_buff *msg)
-{
-	struct mt76_testmode_data *td = &phy->test;
-	struct mt76_dev *dev = phy->dev;
-	u64 rx_packets = 0;
-	u64 rx_fcs_error = 0;
-	int i;
-
-	if (dev->test_ops->dump_stats) {
-		int ret;
-
-		ret = dev->test_ops->dump_stats(phy, msg);
-		if (ret)
-			return ret;
-	}
-
-	for (i = 0; i < ARRAY_SIZE(td->rx_stats.packets); i++) {
-		rx_packets += td->rx_stats.packets[i];
-		rx_fcs_error += td->rx_stats.fcs_error[i];
-	}
-
-	if (nla_put_u32(msg, MT76_TM_STATS_ATTR_TX_PENDING, td->tx_pending) ||
-	    nla_put_u32(msg, MT76_TM_STATS_ATTR_TX_QUEUED, td->tx_queued) ||
-	    nla_put_u32(msg, MT76_TM_STATS_ATTR_TX_DONE, td->tx_done) ||
-	    nla_put_u64_64bit(msg, MT76_TM_STATS_ATTR_RX_PACKETS, rx_packets,
-			      MT76_TM_STATS_ATTR_PAD) ||
-	    nla_put_u64_64bit(msg, MT76_TM_STATS_ATTR_RX_FCS_ERROR, rx_fcs_error,
-			      MT76_TM_STATS_ATTR_PAD))
-		return -EMSGSIZE;
-
-	return 0;
-}
-
-int mt76_testmode_dump(struct ieee80211_hw *hw, struct sk_buff *msg,
-		       struct netlink_callback *cb, void *data, int len)
-{
-	struct mt76_phy *phy = hw->priv;
-	struct mt76_dev *dev = phy->dev;
-	struct mt76_testmode_data *td = &phy->test;
-	struct nlattr *tb[NUM_MT76_TM_ATTRS] = {};
-	int err = 0;
-	void *a;
-	int i;
-
-	if (!dev->test_ops)
-		return -EOPNOTSUPP;
-
-	if (cb->args[2]++ > 0)
-		return -ENOENT;
-
-	if (data) {
-		err = nla_parse_deprecated(tb, MT76_TM_ATTR_MAX, data, len,
-					   mt76_tm_policy, NULL);
-		if (err)
-			return err;
-	}
-
-	mutex_lock(&dev->mutex);
-
-	if (tb[MT76_TM_ATTR_STATS]) {
-		err = -EINVAL;
-
-		a = nla_nest_start(msg, MT76_TM_ATTR_STATS);
-		if (a) {
-			err = mt76_testmode_dump_stats(phy, msg);
-			nla_nest_end(msg, a);
-		}
-
-		goto out;
-	}
-
-	mt76_testmode_init_defaults(phy);
-
-	err = -EMSGSIZE;
-	if (nla_put_u32(msg, MT76_TM_ATTR_STATE, td->state))
-		goto out;
-
-	if (dev->test_mtd.name &&
-	    (nla_put_string(msg, MT76_TM_ATTR_MTD_PART, dev->test_mtd.name) ||
-	     nla_put_u32(msg, MT76_TM_ATTR_MTD_OFFSET, dev->test_mtd.offset)))
-		goto out;
-
-	if (nla_put_u32(msg, MT76_TM_ATTR_TX_COUNT, td->tx_count) ||
-	    nla_put_u32(msg, MT76_TM_ATTR_TX_LENGTH, td->tx_mpdu_len) ||
-	    nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_MODE, td->tx_rate_mode) ||
-	    nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_NSS, td->tx_rate_nss) ||
-	    nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_IDX, td->tx_rate_idx) ||
-	    nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_SGI, td->tx_rate_sgi) ||
-	    nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_LDPC, td->tx_rate_ldpc) ||
-	    nla_put_u8(msg, MT76_TM_ATTR_TX_RATE_STBC, td->tx_rate_stbc) ||
-	    (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_LTF) &&
-	     nla_put_u8(msg, MT76_TM_ATTR_TX_LTF, td->tx_ltf)) ||
-	    (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_ANTENNA) &&
-	     nla_put_u8(msg, MT76_TM_ATTR_TX_ANTENNA, td->tx_antenna_mask)) ||
-	    (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_SPE_IDX) &&
-	     nla_put_u8(msg, MT76_TM_ATTR_TX_SPE_IDX, td->tx_spe_idx)) ||
-	    (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_DUTY_CYCLE) &&
-	     nla_put_u8(msg, MT76_TM_ATTR_TX_DUTY_CYCLE, td->tx_duty_cycle)) ||
-	    (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_IPG) &&
-	     nla_put_u32(msg, MT76_TM_ATTR_TX_IPG, td->tx_ipg)) ||
-	    (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_TIME) &&
-	     nla_put_u32(msg, MT76_TM_ATTR_TX_TIME, td->tx_time)) ||
-	    (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_POWER_CONTROL) &&
-	     nla_put_u8(msg, MT76_TM_ATTR_TX_POWER_CONTROL, td->tx_power_control)) ||
-	    (mt76_testmode_param_present(td, MT76_TM_ATTR_FREQ_OFFSET) &&
-	     nla_put_u8(msg, MT76_TM_ATTR_FREQ_OFFSET, td->freq_offset)))
-		goto out;
-
-	if (mt76_testmode_param_present(td, MT76_TM_ATTR_TX_POWER)) {
-		a = nla_nest_start(msg, MT76_TM_ATTR_TX_POWER);
-		if (!a)
-			goto out;
-
-		for (i = 0; i < ARRAY_SIZE(td->tx_power); i++)
-			if (nla_put_u8(msg, i, td->tx_power[i]))
-				goto out;
-
-		nla_nest_end(msg, a);
-	}
-
-	if (mt76_testmode_param_present(td, MT76_TM_ATTR_MAC_ADDRS)) {
-		a = nla_nest_start(msg, MT76_TM_ATTR_MAC_ADDRS);
-		if (!a)
-			goto out;
-
-		for (i = 0; i < 3; i++)
-			if (nla_put(msg, i, ETH_ALEN, td->addr[i]))
-				goto out;
-
-		nla_nest_end(msg, a);
-	}
-
-	err = 0;
-
-out:
-	mutex_unlock(&dev->mutex);
-
-	return err;
-}
-EXPORT_SYMBOL(mt76_testmode_dump);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/testmode.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/testmode.h
deleted file mode 100644
index 5e2792d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/testmode.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2020 Felix Fietkau <nbd@nbd.name>
- */
-#ifndef __MT76_TESTMODE_H
-#define __MT76_TESTMODE_H
-
-#define MT76_TM_TIMEOUT	10
-
-/**
- * enum mt76_testmode_attr - testmode attributes inside NL80211_ATTR_TESTDATA
- *
- * @MT76_TM_ATTR_UNSPEC: (invalid attribute)
- *
- * @MT76_TM_ATTR_RESET: reset parameters to default (flag)
- * @MT76_TM_ATTR_STATE: test state (u32), see &enum mt76_testmode_state
- *
- * @MT76_TM_ATTR_MTD_PART: mtd partition used for eeprom data (string)
- * @MT76_TM_ATTR_MTD_OFFSET: offset of eeprom data within the partition (u32)
- *
- * @MT76_TM_ATTR_TX_COUNT: configured number of frames to send when setting
- *	state to MT76_TM_STATE_TX_FRAMES (u32)
- * @MT76_TM_ATTR_TX_PENDING: pending frames during MT76_TM_STATE_TX_FRAMES (u32)
- * @MT76_TM_ATTR_TX_LENGTH: packet tx mpdu length (u32)
- * @MT76_TM_ATTR_TX_RATE_MODE: packet tx mode (u8, see &enum mt76_testmode_tx_mode)
- * @MT76_TM_ATTR_TX_RATE_NSS: packet tx number of spatial streams (u8)
- * @MT76_TM_ATTR_TX_RATE_IDX: packet tx rate/MCS index (u8)
- * @MT76_TM_ATTR_TX_RATE_SGI: packet tx use short guard interval (u8)
- * @MT76_TM_ATTR_TX_RATE_LDPC: packet tx enable LDPC (u8)
- * @MT76_TM_ATTR_TX_RATE_STBC: packet tx enable STBC (u8)
- * @MT76_TM_ATTR_TX_LTF: packet tx LTF, set 0 to 2 for 1x, 2x, and 4x LTF (u8)
- *
- * @MT76_TM_ATTR_TX_ANTENNA: tx antenna mask (u8)
- * @MT76_TM_ATTR_TX_POWER_CONTROL: enable tx power control (u8)
- * @MT76_TM_ATTR_TX_POWER: per-antenna tx power array (nested, u8 attrs)
- *
- * @MT76_TM_ATTR_FREQ_OFFSET: RF frequency offset (u32)
- *
- * @MT76_TM_ATTR_STATS: statistics (nested, see &enum mt76_testmode_stats_attr)
- *
- * @MT76_TM_ATTR_TX_SPE_IDX: tx spatial extension index (u8)
- *
- * @MT76_TM_ATTR_TX_DUTY_CYCLE: packet tx duty cycle (u8)
- * @MT76_TM_ATTR_TX_IPG: tx inter-packet gap, in unit of us (u32)
- * @MT76_TM_ATTR_TX_TIME: packet transmission time, in unit of us (u32)
- *
- * @MT76_TM_ATTR_DRV_DATA: driver specific netlink attrs (nested)
- *
- * @MT76_TM_ATTR_MAC_ADDRS: array of nested MAC addresses (nested)
- */
-enum mt76_testmode_attr {
-	MT76_TM_ATTR_UNSPEC,
-
-	MT76_TM_ATTR_RESET,
-	MT76_TM_ATTR_STATE,
-
-	MT76_TM_ATTR_MTD_PART,
-	MT76_TM_ATTR_MTD_OFFSET,
-
-	MT76_TM_ATTR_TX_COUNT,
-	MT76_TM_ATTR_TX_LENGTH,
-	MT76_TM_ATTR_TX_RATE_MODE,
-	MT76_TM_ATTR_TX_RATE_NSS,
-	MT76_TM_ATTR_TX_RATE_IDX,
-	MT76_TM_ATTR_TX_RATE_SGI,
-	MT76_TM_ATTR_TX_RATE_LDPC,
-	MT76_TM_ATTR_TX_RATE_STBC,
-	MT76_TM_ATTR_TX_LTF,
-
-	MT76_TM_ATTR_TX_ANTENNA,
-	MT76_TM_ATTR_TX_POWER_CONTROL,
-	MT76_TM_ATTR_TX_POWER,
-
-	MT76_TM_ATTR_FREQ_OFFSET,
-
-	MT76_TM_ATTR_STATS,
-
-	MT76_TM_ATTR_TX_SPE_IDX,
-
-	MT76_TM_ATTR_TX_DUTY_CYCLE,
-	MT76_TM_ATTR_TX_IPG,
-	MT76_TM_ATTR_TX_TIME,
-
-	MT76_TM_ATTR_DRV_DATA,
-
-	MT76_TM_ATTR_MAC_ADDRS,
-
-	/* keep last */
-	NUM_MT76_TM_ATTRS,
-	MT76_TM_ATTR_MAX = NUM_MT76_TM_ATTRS - 1,
-};
-
-/**
- * enum mt76_testmode_state - statistics attributes
- *
- * @MT76_TM_STATS_ATTR_TX_PENDING: pending tx frames (u32)
- * @MT76_TM_STATS_ATTR_TX_QUEUED: queued tx frames (u32)
- * @MT76_TM_STATS_ATTR_TX_QUEUED: completed tx frames (u32)
- *
- * @MT76_TM_STATS_ATTR_RX_PACKETS: number of rx packets (u64)
- * @MT76_TM_STATS_ATTR_RX_FCS_ERROR: number of rx packets with FCS error (u64)
- * @MT76_TM_STATS_ATTR_LAST_RX: information about the last received packet
- *	see &enum mt76_testmode_rx_attr
- */
-enum mt76_testmode_stats_attr {
-	MT76_TM_STATS_ATTR_UNSPEC,
-	MT76_TM_STATS_ATTR_PAD,
-
-	MT76_TM_STATS_ATTR_TX_PENDING,
-	MT76_TM_STATS_ATTR_TX_QUEUED,
-	MT76_TM_STATS_ATTR_TX_DONE,
-
-	MT76_TM_STATS_ATTR_RX_PACKETS,
-	MT76_TM_STATS_ATTR_RX_FCS_ERROR,
-	MT76_TM_STATS_ATTR_LAST_RX,
-
-	/* keep last */
-	NUM_MT76_TM_STATS_ATTRS,
-	MT76_TM_STATS_ATTR_MAX = NUM_MT76_TM_STATS_ATTRS - 1,
-};
-
-
-/**
- * enum mt76_testmode_rx_attr - packet rx information
- *
- * @MT76_TM_RX_ATTR_FREQ_OFFSET: frequency offset (s32)
- * @MT76_TM_RX_ATTR_RCPI: received channel power indicator (array, u8)
- * @MT76_TM_RX_ATTR_IB_RSSI: internal inband RSSI (array, s8)
- * @MT76_TM_RX_ATTR_WB_RSSI: internal wideband RSSI (array, s8)
- * @MT76_TM_RX_ATTR_SNR: signal-to-noise ratio (u8)
- */
-enum mt76_testmode_rx_attr {
-	MT76_TM_RX_ATTR_UNSPEC,
-
-	MT76_TM_RX_ATTR_FREQ_OFFSET,
-	MT76_TM_RX_ATTR_RCPI,
-	MT76_TM_RX_ATTR_IB_RSSI,
-	MT76_TM_RX_ATTR_WB_RSSI,
-	MT76_TM_RX_ATTR_SNR,
-
-	/* keep last */
-	NUM_MT76_TM_RX_ATTRS,
-	MT76_TM_RX_ATTR_MAX = NUM_MT76_TM_RX_ATTRS - 1,
-};
-
-/**
- * enum mt76_testmode_state - phy test state
- *
- * @MT76_TM_STATE_OFF: test mode disabled (normal operation)
- * @MT76_TM_STATE_IDLE: test mode enabled, but idle
- * @MT76_TM_STATE_TX_FRAMES: send a fixed number of test frames
- * @MT76_TM_STATE_RX_FRAMES: receive packets and keep statistics
- * @MT76_TM_STATE_TX_CONT: waveform tx without time gap
- * @MT76_TM_STATE_ON: test mode enabled used in offload firmware
- */
-enum mt76_testmode_state {
-	MT76_TM_STATE_OFF,
-	MT76_TM_STATE_IDLE,
-	MT76_TM_STATE_TX_FRAMES,
-	MT76_TM_STATE_RX_FRAMES,
-	MT76_TM_STATE_TX_CONT,
-	MT76_TM_STATE_ON,
-
-	/* keep last */
-	NUM_MT76_TM_STATES,
-	MT76_TM_STATE_MAX = NUM_MT76_TM_STATES - 1,
-};
-
-/**
- * enum mt76_testmode_tx_mode - packet tx phy mode
- *
- * @MT76_TM_TX_MODE_CCK: legacy CCK mode
- * @MT76_TM_TX_MODE_OFDM: legacy OFDM mode
- * @MT76_TM_TX_MODE_HT: 802.11n MCS
- * @MT76_TM_TX_MODE_VHT: 802.11ac MCS
- * @MT76_TM_TX_MODE_HE_SU: 802.11ax single-user MIMO
- * @MT76_TM_TX_MODE_HE_EXT_SU: 802.11ax extended-range SU
- * @MT76_TM_TX_MODE_HE_TB: 802.11ax trigger-based
- * @MT76_TM_TX_MODE_HE_MU: 802.11ax multi-user MIMO
- */
-enum mt76_testmode_tx_mode {
-	MT76_TM_TX_MODE_CCK,
-	MT76_TM_TX_MODE_OFDM,
-	MT76_TM_TX_MODE_HT,
-	MT76_TM_TX_MODE_VHT,
-	MT76_TM_TX_MODE_HE_SU,
-	MT76_TM_TX_MODE_HE_EXT_SU,
-	MT76_TM_TX_MODE_HE_TB,
-	MT76_TM_TX_MODE_HE_MU,
-
-	/* keep last */
-	NUM_MT76_TM_TX_MODES,
-	MT76_TM_TX_MODE_MAX = NUM_MT76_TM_TX_MODES - 1,
-};
-
-extern const struct nla_policy mt76_tm_policy[NUM_MT76_TM_ATTRS];
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/CMakeLists.txt b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/CMakeLists.txt
deleted file mode 100644
index 3a83e34..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-
-PROJECT(mt76-test C)
-ADD_DEFINITIONS(-Os -Wall -Werror --std=gnu99 -g3)
-
-ADD_EXECUTABLE(mt76-test main.c fields.c eeprom.c fwlog.c)
-TARGET_LINK_LIBRARIES(mt76-test nl-tiny)
-
-SET(CMAKE_INSTALL_PREFIX /usr)
-
-INSTALL(TARGETS mt76-test
-	RUNTIME DESTINATION sbin
-)
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/README.md b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/README.md
deleted file mode 100644
index d79beaa..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/README.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# MT76 testmode utility
-
-This utility can be used to perform some support functions required for Rx/Tx calibration, similar to the ATE command set of the SDK driver.
-Its main functionality is setting test parameters and dumping statistics. It can also be used to prepare modified EEPROM data for writing into flash.
-
-## Basic syntax
-
-- Set parameters:
-	- `mt76-test phy0 set <parameter>=<value>`[...]
-- Show current parameter set:
-	- `mt76-test phy0 dump`
-- Show statistics
-	- `mt76-test phy0 dump stats`
-
-## Running tests
-
-The test state is controlled through the `state` parameter. The following state values are supported:
-
-- `off`: Normal operation (default)
-- `idle`: Testmode enabled, but no specific test active
-- `tx_frames`: Send a number of packets with configurable rate/txpower
-- `rx_frames`: Receive packets and show RSSI and packet count/PER
-
-Setting a state activates it even if the value is the same as before. Setting it to `tx_frames` triggers sending packets immediately. Setting `rx_frames` enables receive mode and can also be used to clear rx statistics.
-
-## Notes
-
-To run tests, you first need to disable all normal interfaces, set up a monitor mode interface and configure it to the channel/bandwidth you intend to use.
-
-
-## Parameters:
-
-| Parameter name | ATE parameter | Description |
-|--|--|--|
-| `state` | `ATE` | Test state |
-| `tx_count` | `ATETXCNT` | Number of packets to send |
-| `tx_length` | `ATETXLEN` | Length of packets to send |
-| `tx_rate_mode` | `ATETXMODE` | PHY mode (possible values: `cck`, `ofdm`, `ht`, `vht`) |
-| `tx_rate_nss` | | Number of spatial streams (VHT only) |
-| `tx_rate_idx` | `ATETXMCS` | MCS or legacy rate index |
-| `tx_rate_sgi` | `ATETXGI` | Enable short guard interval |
-| `tx_rate_ldpc` | `ATETXLDPC` | Enable LDPC |
-| `tx_power_control` | `ATETXPOWERCTRL` | Firmware transmit power control feature |
-| `tx_power` | `ATETXPOW0-3` | Per-chain half-dBm transmit power, `0` means default value, e.g. `10,0,0,0` |
-| `tx_antenna` | `ATETXANT` | Transmit antenna bitmask |
-| `freq_offset` | `ATETXFREQOFFSET` | Frequency offset |
-
-
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/eeprom.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/eeprom.c
deleted file mode 100644
index 68ad8d0..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/eeprom.c
+++ /dev/null
@@ -1,263 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 Felix Fietkau <nbd@nbd.name> */
-#define _GNU_SOURCE
-#include <sys/mman.h>
-#include <sys/stat.h>
-
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <fcntl.h>
-#include <errno.h>
-
-#include "mt76-test.h"
-
-static const char *mtd_part;
-static uint32_t mtd_offset;
-
-static char *eeprom_file;
-static int eeprom_fd = -1;
-unsigned char *eeprom_data;
-
-static int mt76_eeprom_dump_cb(struct nl_msg *msg, void *arg)
-{
-	struct nlattr *tb[NUM_MT76_TM_ATTRS];
-	struct nlattr *attr;
-
-	attr = unl_find_attr(&unl, msg, NL80211_ATTR_TESTDATA);
-	if (!attr)
-		return NL_SKIP;
-
-	nla_parse_nested(tb, MT76_TM_ATTR_MAX, attr, msg_field.policy);
-	if (!tb[MT76_TM_ATTR_MTD_PART] || !tb[MT76_TM_ATTR_MTD_OFFSET])
-		return NL_SKIP;
-
-	mtd_part = strdup(nla_get_string(tb[MT76_TM_ATTR_MTD_PART]));
-	mtd_offset = nla_get_u32(tb[MT76_TM_ATTR_MTD_OFFSET]);
-
-	return NL_SKIP;
-}
-
-static FILE *mtd_open(const char *mtd)
-{
-	char line[128], name[64];
-	FILE *fp;
-	int i;
-
-	fp = fopen("/proc/mtd", "r");
-	if (!fp)
-		return NULL;
-
-	snprintf(name, sizeof(name), "\"%s\"", mtd);
-	while (fgets(line, sizeof(line), fp)) {
-		if (!sscanf(line, "mtd%d:", &i) || !strstr(line, name))
-			continue;
-
-		snprintf(line, sizeof(line), "/dev/mtd%d", i);
-		fclose(fp);
-		return fopen(line, "r");
-	}
-	fclose(fp);
-
-	return NULL;
-}
-
-
-static int
-mt76_eeprom_create_file(void)
-{
-	char buf[1024];
-	ssize_t len;
-	FILE *f;
-	int fd;
-
-	f = mtd_open(mtd_part);
-	if (!f) {
-		fprintf(stderr, "Failed to open MTD device\n");
-		return -1;
-	}
-
-	fd = open(eeprom_file, O_RDWR | O_CREAT | O_EXCL, 00644);
-	if (fd < 0)
-		goto out;
-
-	while ((len = fread(buf, 1, sizeof(buf), f)) > 0) {
-		ssize_t w;
-
-retry:
-		w = write(fd, buf, len);
-		if (w > 0)
-			continue;
-
-		if (errno == EINTR)
-			goto retry;
-
-		perror("write");
-		unlink(eeprom_file);
-		close(fd);
-		fd = -1;
-		goto out;
-	}
-
-	lseek(fd, 0, SEEK_SET);
-
-out:
-	fclose(f);
-	return fd;
-}
-
-static bool
-mt76_eeprom_file_exists(void)
-{
-	struct stat st;
-
-	return stat(eeprom_file, &st) == 0;
-}
-
-static int
-mt76_eeprom_init_file(void)
-{
-	int fd;
-
-	if (!mt76_eeprom_file_exists())
-		return mt76_eeprom_create_file();
-
-	fd = open(eeprom_file, O_RDWR);
-	if (fd < 0)
-		perror("open");
-
-	return fd;
-}
-
-int mt76_eeprom_init(int phy)
-{
-	struct nl_msg *msg;
-
-	msg = unl_genl_msg(&unl, NL80211_CMD_TESTMODE, true);
-	nla_put_u32(msg, NL80211_ATTR_WIPHY, phy);
-	unl_genl_request(&unl, msg, mt76_eeprom_dump_cb, NULL);
-
-	if (!mtd_part) {
-		fprintf(stderr, "Could not find MTD partition information\n");
-		return -1;
-	}
-
-	eeprom_file = malloc(sizeof(EEPROM_FILE_PATH_FMT) + strlen(mtd_part));
-	sprintf(eeprom_file, EEPROM_FILE_PATH_FMT, mtd_part);
-
-	eeprom_fd = mt76_eeprom_init_file();
-	if (eeprom_fd < 0)
-		return -1;
-
-	eeprom_data = mmap(NULL, EEPROM_PART_SIZE, PROT_READ | PROT_WRITE,
-			   MAP_SHARED, eeprom_fd, mtd_offset);
-	if (!eeprom_data) {
-		perror("mmap");
-		close(eeprom_fd);
-		return -1;
-	}
-
-	return 0;
-}
-
-void mt76_eeprom_close(void)
-{
-	if (eeprom_fd < 0)
-		return;
-
-	msync(eeprom_data, EEPROM_PART_SIZE, MS_SYNC);
-	munmap(eeprom_data, EEPROM_PART_SIZE);
-	close(eeprom_fd);
-	eeprom_fd = -1;
-}
-
-static int
-mt76_eeprom_set(int argc, char **argv)
-{
-	for (; argc > 0; argc--, argv++) {
-		char *addr_str = argv[0];
-		char *val_str = strchr(addr_str, '=');
-		unsigned long addr, val;
-		char *err;
-
-		if (!val_str) {
-			fprintf(stderr, "Invalid argument: %s\n", addr_str);
-			return 1;
-		}
-
-		*(val_str++) = 0;
-
-		addr = strtoul(addr_str, &err, 0);
-		if ((err && *err) || addr >= EEPROM_PART_SIZE) {
-			fprintf(stderr, "Invalid address: %s\n", addr_str);
-			return 1;
-		}
-
-		val = strtoul(val_str, &err, 0);
-		if ((err && *err) || val >= 0xff) {
-			fprintf(stderr, "Invalid value: %s\n", val_str);
-			return 1;
-		}
-
-		eeprom_data[addr] = val;
-	}
-
-	return 0;
-}
-
-static int
-mt76_eeprom_changes(void)
-{
-	unsigned char *buf;
-	FILE *f;
-	int i;
-
-	f = mtd_open(mtd_part);
-	if (!f) {
-		fprintf(stderr, "Cannot open MTD device\n");
-		return 1;
-	}
-
-	buf = malloc(EEPROM_PART_SIZE);
-	fseek(f, mtd_offset, SEEK_SET);
-	fread(buf, 1, EEPROM_PART_SIZE, f);
-	for (i = 0; i < EEPROM_PART_SIZE; i++) {
-		if (buf[i] == eeprom_data[i])
-			continue;
-
-		printf("[%04x] %02x => %02x\n", i, buf[i], eeprom_data[i]);
-	}
-	free(buf);
-
-	return 0;
-}
-
-
-int mt76_eeprom(int phy, int argc, char **argv)
-{
-	const char *cmd;
-	int ret = 0;
-
-	if (argc < 1)
-		usage();
-
-	if (mt76_eeprom_init(phy))
-		return 1;
-
-	cmd = argv[0];
-	argv++;
-	argc--;
-
-	if (!strcmp(cmd, "file"))
-		printf("%s\n", eeprom_file);
-	else if (!strcmp(cmd, "set"))
-		ret = mt76_eeprom_set(argc, argv);
-	else if (!strcmp(cmd, "reset"))
-		unlink(eeprom_file);
-	else if (!strcmp(cmd, "changes"))
-		ret = mt76_eeprom_changes();
-
-	mt76_eeprom_close();
-
-	return ret;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/fields.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/fields.c
deleted file mode 100644
index e3f6908..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/fields.c
+++ /dev/null
@@ -1,336 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 Felix Fietkau <nbd@nbd.name> */
-#define _GNU_SOURCE
-#include "mt76-test.h"
-
-static char prefix[64];
-
-static const char * const testmode_state[] = {
-	[MT76_TM_STATE_OFF] = "off",
-	[MT76_TM_STATE_IDLE] = "idle",
-	[MT76_TM_STATE_TX_FRAMES] = "tx_frames",
-	[MT76_TM_STATE_RX_FRAMES] = "rx_frames",
-};
-
-static const char * const testmode_tx_mode[] = {
-	[MT76_TM_TX_MODE_CCK] = "cck",
-	[MT76_TM_TX_MODE_OFDM] = "ofdm",
-	[MT76_TM_TX_MODE_HT] = "ht",
-	[MT76_TM_TX_MODE_VHT] = "vht",
-	[MT76_TM_TX_MODE_HE_SU] = "he_su",
-	[MT76_TM_TX_MODE_HE_EXT_SU] = "he_ext_su",
-	[MT76_TM_TX_MODE_HE_TB] = "he_tb",
-	[MT76_TM_TX_MODE_HE_MU] = "he_mu",
-};
-
-static void print_enum(const struct tm_field *field, struct nlattr *attr)
-{
-	unsigned int i = nla_get_u8(attr);
-
-	if (i < field->enum_len && field->enum_str[i])
-		printf("%s", field->enum_str[i]);
-	else
-		printf("unknown (%d)", i);
-}
-
-static bool parse_enum(const struct tm_field *field, int idx,
-		       struct nl_msg *msg, const char *val)
-{
-	int i;
-
-	for (i = 0; i < field->enum_len; i++) {
-		if (strcmp(field->enum_str[i], val) != 0)
-			continue;
-
-		if (nla_put_u8(msg, idx, i))
-			return false;
-
-		return true;
-	}
-
-	printf("Invalid value for parameter '%s': %s\n", field->name, val);
-	printf("Possible values:");
-	for (i = 0; i < field->enum_len; i++)
-		printf(" %s", field->enum_str[i]);
-	printf("\n");
-
-	return false;
-}
-
-static bool parse_u8(const struct tm_field *field, int idx,
-		     struct nl_msg *msg, const char *val)
-{
-	return !nla_put_u8(msg, idx, strtoul(val, NULL, 0));
-}
-
-static void print_u8(const struct tm_field *field, struct nlattr *attr)
-{
-	printf("%d", nla_get_u8(attr));
-}
-
-static void print_s8(const struct tm_field *field, struct nlattr *attr)
-{
-	printf("%d", (int8_t)nla_get_u8(attr));
-}
-
-static bool parse_u32(const struct tm_field *field, int idx,
-		      struct nl_msg *msg, const char *val)
-{
-	return !nla_put_u32(msg, idx, strtoul(val, NULL, 0));
-}
-
-static void print_s32(const struct tm_field *field, struct nlattr *attr)
-{
-	printf("%d", (int32_t)nla_get_u32(attr));
-}
-
-static void print_u32(const struct tm_field *field, struct nlattr *attr)
-{
-	printf("%d", nla_get_u32(attr));
-}
-
-static void print_u64(const struct tm_field *field, struct nlattr *attr)
-{
-	printf("%lld", (unsigned long long)nla_get_u64(attr));
-}
-
-static bool parse_flag(const struct tm_field *field, int idx,
-		       struct nl_msg *msg, const char *val)
-{
-	bool set = strtoul(val, NULL, 0);
-
-	if (!set)
-	    return true;
-
-	return !nla_put_flag(msg, idx);
-}
-
-static void print_string(const struct tm_field *field, struct nlattr *attr)
-{
-	printf("%s", nla_get_string(attr));
-}
-
-static bool parse_array(const struct tm_field *field, int idx,
-			   struct nl_msg *msg, const char *val)
-{
-	bool ret = true;
-	char *str, *cur, *ap;
-	void *a;
-
-	ap = str = strdup(val);
-
-	a = nla_nest_start(msg, idx);
-
-	idx = 0;
-	while ((cur = strsep(&ap, ",")) != NULL) {
-		ret = field->parse2(field, idx++, msg, cur);
-		if (!ret)
-			break;
-	}
-
-	nla_nest_end(msg, a);
-
-	free(str);
-
-	return ret;
-}
-
-static void print_array(const struct tm_field *field, struct nlattr *attr)
-{
-	struct nlattr *cur;
-	int idx = 0;
-	int rem;
-
-	nla_for_each_nested(cur, attr, rem) {
-		if (idx++ > 0)
-			printf(",");
-		if (nla_len(cur) != 1)
-			continue;
-		field->print2(field, cur);
-	}
-}
-
-static void print_nested(const struct tm_field *field, struct nlattr *attr)
-{
-	struct nlattr **tb = alloca(field->len * sizeof(struct nlattr *));
-	const struct tm_field *fields = field->fields;
-	int i;
-
-	nla_parse_nested(tb, field->len - 1, attr, field->policy);
-	for (i = 0; i < field->len; i++) {
-		int prefix_len = 0;
-
-		if (!tb[i])
-			continue;
-
-		if (!fields[i].print)
-			continue;
-
-		if (fields[i].name)
-			printf("%s%s=", prefix, fields[i].name);
-
-		if (fields[i].prefix) {
-			prefix_len = strlen(prefix);
-			strncat(prefix + prefix_len, fields[i].prefix,
-				sizeof(prefix) - prefix_len - 1);
-		}
-
-		fields[i].print(&fields[i], tb[i]);
-		if (fields[i].prefix)
-			prefix[prefix_len] = 0;
-
-		if (fields[i].name)
-			printf("\n");
-	}
-
-	if (field->print_extra)
-		field->print_extra(field, tb);
-}
-
-static void print_extra_stats(const struct tm_field *field, struct nlattr **tb)
-{
-	float total, failed;
-
-	if (!tb[MT76_TM_STATS_ATTR_RX_PACKETS] ||
-	    !tb[MT76_TM_STATS_ATTR_RX_FCS_ERROR])
-		return;
-
-	total = nla_get_u64(tb[MT76_TM_STATS_ATTR_RX_PACKETS]);
-	failed = nla_get_u64(tb[MT76_TM_STATS_ATTR_RX_FCS_ERROR]);
-
-	printf("%srx_per=%.02f%%\n", prefix, 100 * failed / total);
-}
-
-
-#define FIELD_GENERIC(_field, _name, ...)	\
-	[FIELD_NAME(_field)] = {			\
-		.name = _name,				\
-		##__VA_ARGS__				\
-	}
-
-#define FIELD_RO(_type, _field, _name, ...)		\
-	FIELD_GENERIC(_field, _name,	\
-		      .print = print_##_type,		\
-		      ##__VA_ARGS__			\
-	)
-
-#define FIELD(_type, _field, _name, ...)		\
-	FIELD_RO(_type, _field, _name,			\
-		 .parse = parse_##_type,		\
-		 ##__VA_ARGS__				\
-	)
-
-#define FIELD_FLAG(_field, _name)			\
-	FIELD_GENERIC(_field, _name, .parse = parse_flag)
-
-#define FIELD_ENUM(_field, _name, _vals)		\
-	FIELD(enum, _field, _name,			\
-	      .enum_str = _vals,			\
-	      .enum_len = ARRAY_SIZE(_vals)		\
-	)
-
-#define FIELD_ARRAY_RO(_type, _field, _name, ...)	\
-	FIELD(array, _field, _name,			\
-	      .print2 = print_##_type,			\
-	      ##__VA_ARGS__				\
-	)
-
-#define FIELD_ARRAY(_type, _field, _name, ...)		\
-	FIELD_ARRAY_RO(_type, _field, _name,		\
-		       .parse2 = parse_##_type,		\
-		       ##__VA_ARGS__			\
-	)
-
-#define FIELD_NESTED_RO(_field, _data, _prefix, ...)	\
-	FIELD_RO(nested, _field, NULL,			\
-		 .prefix = _prefix,			\
-		 .fields = _data ## _fields,		\
-		 .policy = _data ## _policy,		\
-		 .len = ARRAY_SIZE(_data ## _fields),	\
-		 ##__VA_ARGS__				\
-	)
-
-#define FIELD_NAME(_field) MT76_TM_RX_ATTR_##_field
-static const struct tm_field rx_fields[NUM_MT76_TM_RX_ATTRS] = {
-	FIELD_RO(s32, FREQ_OFFSET, "freq_offset"),
-	FIELD_ARRAY_RO(u8, RCPI, "rcpi"),
-	FIELD_ARRAY_RO(s8, IB_RSSI, "ib_rssi"),
-	FIELD_ARRAY_RO(s8, WB_RSSI, "wb_rssi"),
-	FIELD_RO(s8, SNR, "snr"),
-};
-static struct nla_policy rx_policy[NUM_MT76_TM_RX_ATTRS] = {
-	[MT76_TM_RX_ATTR_FREQ_OFFSET] = { .type = NLA_U32 },
-	[MT76_TM_RX_ATTR_RCPI] = { .type = NLA_NESTED },
-	[MT76_TM_RX_ATTR_IB_RSSI] = { .type = NLA_NESTED },
-	[MT76_TM_RX_ATTR_WB_RSSI] = { .type = NLA_NESTED },
-	[MT76_TM_RX_ATTR_SNR] = { .type = NLA_U8 },
-};
-#undef FIELD_NAME
-
-#define FIELD_NAME(_field) MT76_TM_STATS_ATTR_##_field
-static const struct tm_field stats_fields[NUM_MT76_TM_STATS_ATTRS] = {
-	FIELD_RO(u32, TX_PENDING, "tx_pending"),
-	FIELD_RO(u32, TX_QUEUED, "tx_queued"),
-	FIELD_RO(u32, TX_DONE, "tx_done"),
-	FIELD_RO(u64, RX_PACKETS, "rx_packets"),
-	FIELD_RO(u64, RX_FCS_ERROR, "rx_fcs_error"),
-	FIELD_NESTED_RO(LAST_RX, rx, "last_"),
-};
-static struct nla_policy stats_policy[NUM_MT76_TM_STATS_ATTRS] = {
-	[MT76_TM_STATS_ATTR_TX_PENDING] = { .type = NLA_U32 },
-	[MT76_TM_STATS_ATTR_TX_QUEUED] = { .type = NLA_U32 },
-	[MT76_TM_STATS_ATTR_TX_DONE] = { .type = NLA_U32 },
-	[MT76_TM_STATS_ATTR_RX_PACKETS] = { .type = NLA_U64 },
-	[MT76_TM_STATS_ATTR_RX_FCS_ERROR] = { .type = NLA_U64 },
-};
-#undef FIELD_NAME
-
-#define FIELD_NAME(_field) MT76_TM_ATTR_##_field
-static const struct tm_field testdata_fields[NUM_MT76_TM_ATTRS] = {
-	FIELD_FLAG(RESET, "reset"),
-	FIELD_ENUM(STATE, "state", testmode_state),
-	FIELD_RO(string, MTD_PART, "mtd_part"),
-	FIELD_RO(u32, MTD_OFFSET, "mtd_offset"),
-	FIELD(u32, TX_COUNT, "tx_count"),
-	FIELD(u32, TX_LENGTH, "tx_length"),
-	FIELD_ENUM(TX_RATE_MODE, "tx_rate_mode", testmode_tx_mode),
-	FIELD(u8, TX_RATE_NSS, "tx_rate_nss"),
-	FIELD(u8, TX_RATE_IDX, "tx_rate_idx"),
-	FIELD(u8, TX_RATE_SGI, "tx_rate_sgi"),
-	FIELD(u8, TX_RATE_LDPC, "tx_rate_ldpc"),
-	FIELD(u8, TX_RATE_STBC, "tx_rate_stbc"),
-	FIELD(u8, TX_LTF, "tx_ltf"),
-	FIELD(u8, TX_POWER_CONTROL, "tx_power_control"),
-	FIELD_ARRAY(u8, TX_POWER, "tx_power"),
-	FIELD(u8, TX_ANTENNA, "tx_antenna"),
-	FIELD(u32, FREQ_OFFSET, "freq_offset"),
-	FIELD_NESTED_RO(STATS, stats, "",
-			.print_extra = print_extra_stats),
-};
-#undef FIELD_NAME
-
-static struct nla_policy testdata_policy[NUM_MT76_TM_ATTRS] = {
-	[MT76_TM_ATTR_STATE] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_MTD_PART] = { .type = NLA_STRING },
-	[MT76_TM_ATTR_MTD_OFFSET] = { .type = NLA_U32 },
-	[MT76_TM_ATTR_TX_COUNT] = { .type = NLA_U32 },
-	[MT76_TM_ATTR_TX_LENGTH] = { .type = NLA_U32 },
-	[MT76_TM_ATTR_TX_RATE_MODE] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_RATE_NSS] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_RATE_IDX] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_RATE_SGI] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_RATE_LDPC] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_RATE_STBC] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_LTF] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_POWER_CONTROL] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_TX_ANTENNA] = { .type = NLA_U8 },
-	[MT76_TM_ATTR_FREQ_OFFSET] = { .type = NLA_U32 },
-	[MT76_TM_ATTR_STATS] = { .type = NLA_NESTED },
-};
-
-const struct tm_field msg_field = {
-	.print = print_nested,
-	.fields = testdata_fields,
-	.policy = testdata_policy,
-	.len = ARRAY_SIZE(testdata_fields)
-};
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/fwlog.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/fwlog.c
deleted file mode 100644
index e5d4a10..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/fwlog.c
+++ /dev/null
@@ -1,177 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2022 Felix Fietkau <nbd@nbd.name> */
-#define _GNU_SOURCE
-
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <stdbool.h>
-#include <errno.h>
-#include <poll.h>
-#include <fcntl.h>
-#include <signal.h>
-#include "mt76-test.h"
-
-bool done = false;
-
-static const char *debugfs_path(const char *phyname, const char *file)
-{
-	static char path[256];
-
-	snprintf(path, sizeof(path), "/sys/kernel/debug/ieee80211/%s/mt76/%s", phyname, file);
-
-	return path;
-}
-
-static int mt76_set_fwlog_en(const char *phyname, bool en)
-{
-	FILE *f = fopen(debugfs_path(phyname, "fw_debug_bin"), "w");
-
-	if (!f) {
-		fprintf(stderr, "Could not open fw_debug_bin file\n");
-		return 1;
-	}
-
-	fprintf(f, "7");
-	fclose(f);
-
-	return 0;
-}
-
-int read_retry(int fd, void *buf, int len)
-{
-	int out_len = 0;
-	int r;
-
-	while (len > 0) {
-		if (done)
-			return -1;
-
-		r = read(fd, buf, len);
-		if (r < 0) {
-			if (errno == EINTR || errno == EAGAIN)
-				continue;
-
-			return -1;
-		}
-
-		if (!r)
-			return 0;
-
-		out_len += r;
-		len -= r;
-		buf += r;
-	}
-
-	return out_len;
-}
-
-static void handle_signal(int sig)
-{
-	done = true;
-}
-
-int mt76_fwlog(const char *phyname, int argc, char **argv)
-{
-	struct sockaddr_in local = {
-		.sin_family = AF_INET,
-		.sin_addr.s_addr = INADDR_ANY,
-	};
-	struct sockaddr_in remote = {
-		.sin_family = AF_INET,
-		.sin_port = htons(55688),
-	};
-	char buf[1504];
-	int ret = 0;
-	int yes = 1;
-	int s, fd;
-
-	if (argc < 1) {
-		fprintf(stderr, "need destination address\n");
-		return 1;
-	}
-
-	if (!inet_aton(argv[0], &remote.sin_addr)) {
-		fprintf(stderr, "invalid destination address\n");
-		return 1;
-	}
-
-	s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
-	if (s < 0) {
-		perror("socket");
-		return 1;
-	}
-
-	setsockopt(s, SOL_SOCKET, SO_BROADCAST, &yes, sizeof(yes));
-	if (bind(s, (struct sockaddr *)&local, sizeof(local)) < 0) {
-		perror("bind");
-		return 1;
-	}
-
-	if (mt76_set_fwlog_en(phyname, true))
-		return 1;
-
-	fd = open(debugfs_path(phyname, "fwlog_data"), O_RDONLY);
-	if (fd < 0) {
-		fprintf(stderr, "Could not open fwlog_data file: %s\n", strerror(errno));
-		ret = 1;
-		goto out;
-	}
-
-	signal(SIGTERM, handle_signal);
-	signal(SIGINT, handle_signal);
-	signal(SIGQUIT, handle_signal);
-
-	while (1) {
-		struct pollfd pfd = {
-			.fd = fd,
-			.events = POLLIN | POLLHUP | POLLERR,
-		};
-		uint32_t len;
-		int r;
-
-		if (done)
-			break;
-
-		poll(&pfd, 1, -1);
-
-		r = read_retry(fd, &len, sizeof(len));
-		if (r < 0)
-			break;
-
-		if (!r)
-			continue;
-
-		if (len > sizeof(buf)) {
-			fprintf(stderr, "Length error: %d > %d\n", len, (int)sizeof(buf));
-			ret = 1;
-			break;
-		}
-
-		if (done)
-			break;
-
-		r = read_retry(fd, buf, len);
-		if (done)
-			break;
-
-		if (r != len) {
-			fprintf(stderr, "Short read: %d < %d\n", r, len);
-			ret = 1;
-			break;
-		}
-
-		/* send buf */
-		sendto(s, buf, len, 0, (struct sockaddr *)&remote, sizeof(remote));
-	}
-
-	close(fd);
-
-out:
-	mt76_set_fwlog_en(phyname, false);
-
-	return ret;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/main.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/main.c
deleted file mode 100644
index 699a9ee..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/main.c
+++ /dev/null
@@ -1,207 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 Felix Fietkau <nbd@nbd.name> */
-#define _GNU_SOURCE
-
-#include <sys/types.h>
-#include <sys/uio.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <stdbool.h>
-#include <errno.h>
-#include <poll.h>
-#include <fcntl.h>
-#include <signal.h>
-#include "mt76-test.h"
-
-struct unl unl;
-static uint32_t tm_changed[DIV_ROUND_UP(NUM_MT76_TM_ATTRS, 32)];
-static const char *progname;
-
-static int phy_lookup_idx(const char *name)
-{
-	char buf[128];
-	FILE *f;
-	int len;
-
-	snprintf(buf, sizeof(buf), "/sys/class/ieee80211/%s/index", name);
-	f = fopen(buf, "r");
-	if (!f)
-		return -1;
-
-	len = fread(buf, 1, sizeof(buf) - 1, f);
-	fclose(f);
-
-	if (!len)
-		return -1;
-
-	buf[len] = 0;
-	return atoi(buf);
-}
-
-void usage(void)
-{
-	static const char *const commands[] = {
-		"set <var>=<val> [...]",
-		"dump [stats]",
-		"eeprom file",
-		"eeprom set <addr>=<val> [...]",
-		"eeprom changes",
-		"eeprom reset",
-	};
-	int i;
-
-	fprintf(stderr, "Usage:\n");
-	for (i = 0; i < ARRAY_SIZE(commands); i++)
-		printf("  %s phyX %s\n", progname, commands[i]);
-
-	exit(1);
-}
-
-static int mt76_dump_cb(struct nl_msg *msg, void *arg)
-{
-	struct nlattr *attr;
-
-	attr = unl_find_attr(&unl, msg, NL80211_ATTR_TESTDATA);
-	if (!attr) {
-		fprintf(stderr, "Testdata attribute not found\n");
-		return NL_SKIP;
-	}
-
-	msg_field.print(&msg_field, attr);
-
-	return NL_SKIP;
-}
-
-static int mt76_dump(int phy, int argc, char **argv)
-{
-	struct nl_msg *msg;
-	void *data;
-
-	msg = unl_genl_msg(&unl, NL80211_CMD_TESTMODE, true);
-	nla_put_u32(msg, NL80211_ATTR_WIPHY, phy);
-
-	data = nla_nest_start(msg, NL80211_ATTR_TESTDATA);
-
-	for (; argc > 0; argc--, argv++) {
-		if (!strcmp(argv[0], "stats"))
-			nla_put_flag(msg, MT76_TM_ATTR_STATS);
-	}
-
-	nla_nest_end(msg, data);
-
-	unl_genl_request(&unl, msg, mt76_dump_cb, NULL);
-
-	return 0;
-}
-
-static inline void tm_set_changed(uint32_t id)
-{
-	tm_changed[id / 32] |= (1U << (id % 32));
-}
-
-static inline bool tm_is_changed(uint32_t id)
-{
-	return tm_changed[id / 32] & (1U << (id % 32));
-}
-
-static int mt76_set(int phy, int argc, char **argv)
-{
-	const struct tm_field *fields = msg_field.fields;
-	struct nl_msg *msg;
-	void *data;
-	int i, ret;
-
-	if (argc < 1)
-		return 1;
-
-	msg = unl_genl_msg(&unl, NL80211_CMD_TESTMODE, false);
-	nla_put_u32(msg, NL80211_ATTR_WIPHY, phy);
-
-	data = nla_nest_start(msg, NL80211_ATTR_TESTDATA);
-	for (; argc > 0; argc--, argv++) {
-		char *name = argv[0];
-		char *val = strchr(name, '=');
-
-		if (!val) {
-			fprintf(stderr, "Invalid argument: %s\n", name);
-			return 1;
-		}
-
-		*(val++) = 0;
-
-		for (i = 0; i < msg_field.len; i++) {
-			if (!fields[i].parse)
-				continue;
-
-			if (!strcmp(fields[i].name, name))
-				break;
-		}
-
-		if (i == msg_field.len) {
-			fprintf(stderr, "Unknown field: %s\n", name);
-			return 1;
-		}
-
-		if (tm_is_changed(i)) {
-			fprintf(stderr, "Duplicate field '%s'\n", name);
-			return 1;
-		}
-
-		if (!fields[i].parse(&fields[i], i, msg, val))
-			return 1;
-
-		tm_set_changed(i);
-	}
-
-	nla_nest_end(msg, data);
-
-	ret = unl_genl_request(&unl, msg, NULL, NULL);
-	if (ret)
-		fprintf(stderr, "nl80211 call failed: %s\n", strerror(-ret));
-
-	return ret;
-}
-
-int main(int argc, char **argv)
-{
-	const char *cmd, *phyname;
-	int phy;
-	int ret = 0;
-
-	progname = argv[0];
-	if (argc < 3)
-		usage();
-
-	if (unl_genl_init(&unl, "nl80211") < 0) {
-		fprintf(stderr, "Failed to connect to nl80211\n");
-		return 2;
-	}
-
-	phyname = argv[1];
-	phy = phy_lookup_idx(phyname);
-	if (phy < 0) {
-		fprintf(stderr, "Could not find phy '%s'\n", argv[1]);
-		return 2;
-	}
-
-	cmd = argv[2];
-	argv += 3;
-	argc -= 3;
-
-	if (!strcmp(cmd, "dump"))
-		ret = mt76_dump(phy, argc, argv);
-	else if (!strcmp(cmd, "set"))
-		ret = mt76_set(phy, argc, argv);
-	else if (!strcmp(cmd, "eeprom"))
-		ret = mt76_eeprom(phy, argc, argv);
-	else if (!strcmp(cmd, "fwlog"))
-		ret = mt76_fwlog(phyname, argc, argv);
-	else
-		usage();
-
-	unl_free(&unl);
-
-	return ret;
-}
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/mt76-test.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/mt76-test.h
deleted file mode 100644
index d2fafa8..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tools/mt76-test.h
+++ /dev/null
@@ -1,65 +0,0 @@
-// SPDX-License-Identifier: ISC
-/* Copyright (C) 2020 Felix Fietkau <nbd@nbd.name> */
-#ifndef __MT76_TEST_H
-#define __MT76_TEST_H
-
-#include <stdbool.h>
-#include <stdint.h>
-
-#include <linux/nl80211.h>
-#include <unl.h>
-
-#include "../testmode.h"
-
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
-#endif
-
-#ifndef DIV_ROUND_UP
-#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
-#endif
-
-#define EEPROM_FILE_PATH_FMT	"/tmp/mt76-test-%s"
-#define EEPROM_PART_SIZE	20480
-
-struct nl_msg;
-struct nlattr;
-
-struct tm_field {
-	const char *name;
-	const char *prefix;
-
-	bool (*parse)(const struct tm_field *field, int idx, struct nl_msg *msg,
-		      const char *val);
-	void (*print)(const struct tm_field *field, struct nlattr *attr);
-
-	union {
-		struct {
-			const char * const *enum_str;
-			int enum_len;
-		};
-		struct {
-			bool (*parse2)(const struct tm_field *field, int idx,
-				       struct nl_msg *msg, const char *val);
-			void (*print2)(const struct tm_field *field,
-				       struct nlattr *attr);
-		};
-		struct {
-			void (*print_extra)(const struct tm_field *field,
-					    struct nlattr **tb);
-			const struct tm_field *fields;
-			struct nla_policy *policy;
-			int len;
-		};
-	};
-};
-
-extern struct unl unl;
-extern const struct tm_field msg_field;
-extern unsigned char *eeprom_data;
-
-void usage(void);
-int mt76_eeprom(int phy, int argc, char **argv);
-int mt76_fwlog(const char *phyname, int argc, char **argv);
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/trace.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/trace.c
deleted file mode 100644
index f199fcd..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/trace.c
+++ /dev/null
@@ -1,15 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/module.h>
-
-#ifndef __CHECKER__
-#define CREATE_TRACE_POINTS
-#include "trace.h"
-
-EXPORT_TRACEPOINT_SYMBOL_GPL(mac_txdone);
-EXPORT_TRACEPOINT_SYMBOL_GPL(dev_irq);
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/trace.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/trace.h
deleted file mode 100644
index c3d0ef8..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/trace.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#if !defined(__MT76_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
-#define __MT76_TRACE_H
-
-#include <linux/tracepoint.h>
-#include "mt76.h"
-
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM mt76
-
-#define MAXNAME		32
-#define DEV_ENTRY	__array(char, wiphy_name, 32)
-#define DEVICE_ASSIGN	strlcpy(__entry->wiphy_name,	\
-				wiphy_name(dev->hw->wiphy), MAXNAME)
-#define DEV_PR_FMT	"%s"
-#define DEV_PR_ARG	__entry->wiphy_name
-
-#define REG_ENTRY	__field(u32, reg) __field(u32, val)
-#define REG_ASSIGN	__entry->reg = reg; __entry->val = val
-#define REG_PR_FMT	" %04x=%08x"
-#define REG_PR_ARG	__entry->reg, __entry->val
-
-#define TXID_ENTRY	__field(u8, wcid) __field(u8, pktid)
-#define TXID_ASSIGN	__entry->wcid = wcid; __entry->pktid = pktid
-#define TXID_PR_FMT	" [%d:%d]"
-#define TXID_PR_ARG	__entry->wcid, __entry->pktid
-
-DECLARE_EVENT_CLASS(dev_reg_evt,
-	TP_PROTO(struct mt76_dev *dev, u32 reg, u32 val),
-	TP_ARGS(dev, reg, val),
-	TP_STRUCT__entry(
-		DEV_ENTRY
-		REG_ENTRY
-	),
-	TP_fast_assign(
-		DEVICE_ASSIGN;
-		REG_ASSIGN;
-	),
-	TP_printk(
-		DEV_PR_FMT REG_PR_FMT,
-		DEV_PR_ARG, REG_PR_ARG
-	)
-);
-
-DEFINE_EVENT(dev_reg_evt, reg_rr,
-	TP_PROTO(struct mt76_dev *dev, u32 reg, u32 val),
-	TP_ARGS(dev, reg, val)
-);
-
-DEFINE_EVENT(dev_reg_evt, reg_wr,
-	TP_PROTO(struct mt76_dev *dev, u32 reg, u32 val),
-	TP_ARGS(dev, reg, val)
-);
-
-TRACE_EVENT(dev_irq,
-	TP_PROTO(struct mt76_dev *dev, u32 val, u32 mask),
-
-	TP_ARGS(dev, val, mask),
-
-	TP_STRUCT__entry(
-		DEV_ENTRY
-		__field(u32, val)
-		__field(u32, mask)
-	),
-
-	TP_fast_assign(
-		DEVICE_ASSIGN;
-		__entry->val = val;
-		__entry->mask = mask;
-	),
-
-	TP_printk(
-		DEV_PR_FMT " %08x & %08x",
-		DEV_PR_ARG, __entry->val, __entry->mask
-	)
-);
-
-DECLARE_EVENT_CLASS(dev_txid_evt,
-	TP_PROTO(struct mt76_dev *dev, u8 wcid, u8 pktid),
-	TP_ARGS(dev, wcid, pktid),
-	TP_STRUCT__entry(
-		DEV_ENTRY
-		TXID_ENTRY
-	),
-	TP_fast_assign(
-		DEVICE_ASSIGN;
-		TXID_ASSIGN;
-	),
-	TP_printk(
-		DEV_PR_FMT TXID_PR_FMT,
-		DEV_PR_ARG, TXID_PR_ARG
-	)
-);
-
-DEFINE_EVENT(dev_txid_evt, mac_txdone,
-	TP_PROTO(struct mt76_dev *dev, u8 wcid, u8 pktid),
-	TP_ARGS(dev, wcid, pktid)
-);
-
-#endif
-
-#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
-#undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE trace
-
-#include <trace/define_trace.h>
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tx.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tx.c
deleted file mode 100644
index be43cae..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/tx.c
+++ /dev/null
@@ -1,767 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include "mt76.h"
-
-static int
-mt76_txq_get_qid(struct ieee80211_txq *txq)
-{
-	if (!txq->sta)
-		return MT_TXQ_BE;
-
-	return txq->ac;
-}
-
-void
-mt76_tx_check_agg_ssn(struct ieee80211_sta *sta, struct sk_buff *skb)
-{
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-	struct ieee80211_txq *txq;
-	struct mt76_txq *mtxq;
-	u8 tid;
-
-	if (!sta || !ieee80211_is_data_qos(hdr->frame_control) ||
-	    !ieee80211_is_data_present(hdr->frame_control))
-		return;
-
-	tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
-	txq = sta->txq[tid];
-	mtxq = (struct mt76_txq *)txq->drv_priv;
-	if (!mtxq->aggr)
-		return;
-
-	mtxq->agg_ssn = le16_to_cpu(hdr->seq_ctrl) + 0x10;
-}
-EXPORT_SYMBOL_GPL(mt76_tx_check_agg_ssn);
-
-void
-mt76_tx_status_lock(struct mt76_dev *dev, struct sk_buff_head *list)
-		   __acquires(&dev->status_lock)
-{
-	__skb_queue_head_init(list);
-	spin_lock_bh(&dev->status_lock);
-}
-EXPORT_SYMBOL_GPL(mt76_tx_status_lock);
-
-void
-mt76_tx_status_unlock(struct mt76_dev *dev, struct sk_buff_head *list)
-		      __releases(&dev->status_lock)
-{
-	struct ieee80211_hw *hw;
-	struct sk_buff *skb;
-
-	spin_unlock_bh(&dev->status_lock);
-
-	rcu_read_lock();
-	while ((skb = __skb_dequeue(list)) != NULL) {
-		struct ieee80211_tx_status status = {
-			.skb = skb,
-			.info = IEEE80211_SKB_CB(skb),
-		};
-		struct mt76_tx_cb *cb = mt76_tx_skb_cb(skb);
-		struct mt76_wcid *wcid;
-
-		wcid = rcu_dereference(dev->wcid[cb->wcid]);
-		if (wcid) {
-			status.sta = wcid_to_sta(wcid);
-
-			if (status.sta)
-				status.rate = &wcid->rate;
-		}
-
-		hw = mt76_tx_status_get_hw(dev, skb);
-		ieee80211_tx_status_ext(hw, &status);
-	}
-	rcu_read_unlock();
-}
-EXPORT_SYMBOL_GPL(mt76_tx_status_unlock);
-
-static void
-__mt76_tx_status_skb_done(struct mt76_dev *dev, struct sk_buff *skb, u8 flags,
-			  struct sk_buff_head *list)
-{
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct mt76_tx_cb *cb = mt76_tx_skb_cb(skb);
-	u8 done = MT_TX_CB_DMA_DONE | MT_TX_CB_TXS_DONE;
-
-	flags |= cb->flags;
-	cb->flags = flags;
-
-	if ((flags & done) != done)
-		return;
-
-	/* Tx status can be unreliable. if it fails, mark the frame as ACKed */
-	if (flags & MT_TX_CB_TXS_FAILED) {
-		info->status.rates[0].count = 0;
-		info->status.rates[0].idx = -1;
-		info->flags |= IEEE80211_TX_STAT_ACK;
-	}
-
-	__skb_queue_tail(list, skb);
-}
-
-void
-mt76_tx_status_skb_done(struct mt76_dev *dev, struct sk_buff *skb,
-			struct sk_buff_head *list)
-{
-	__mt76_tx_status_skb_done(dev, skb, MT_TX_CB_TXS_DONE, list);
-}
-EXPORT_SYMBOL_GPL(mt76_tx_status_skb_done);
-
-int
-mt76_tx_status_skb_add(struct mt76_dev *dev, struct mt76_wcid *wcid,
-		       struct sk_buff *skb)
-{
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct mt76_tx_cb *cb = mt76_tx_skb_cb(skb);
-	int pid;
-
-	memset(cb, 0, sizeof(*cb));
-
-	if (!wcid || !rcu_access_pointer(dev->wcid[wcid->idx]))
-		return MT_PACKET_ID_NO_ACK;
-
-	if (info->flags & IEEE80211_TX_CTL_NO_ACK)
-		return MT_PACKET_ID_NO_ACK;
-
-	if (!(info->flags & (IEEE80211_TX_CTL_REQ_TX_STATUS |
-			     IEEE80211_TX_CTL_RATE_CTRL_PROBE)))
-		return MT_PACKET_ID_NO_SKB;
-
-	spin_lock_bh(&dev->status_lock);
-
-	pid = idr_alloc(&wcid->pktid, skb, MT_PACKET_ID_FIRST,
-			MT_PACKET_ID_MASK, GFP_ATOMIC);
-	if (pid < 0) {
-		pid = MT_PACKET_ID_NO_SKB;
-		goto out;
-	}
-
-	cb->wcid = wcid->idx;
-	cb->pktid = pid;
-
-	if (list_empty(&wcid->list))
-		list_add_tail(&wcid->list, &dev->wcid_list);
-
-out:
-	spin_unlock_bh(&dev->status_lock);
-
-	return pid;
-}
-EXPORT_SYMBOL_GPL(mt76_tx_status_skb_add);
-
-struct sk_buff *
-mt76_tx_status_skb_get(struct mt76_dev *dev, struct mt76_wcid *wcid, int pktid,
-		       struct sk_buff_head *list)
-{
-	struct sk_buff *skb;
-	int id;
-
-	lockdep_assert_held(&dev->status_lock);
-
-	skb = idr_remove(&wcid->pktid, pktid);
-	if (skb)
-		goto out;
-
-	/* look for stale entries in the wcid idr queue */
-	idr_for_each_entry(&wcid->pktid, skb, id) {
-		struct mt76_tx_cb *cb = mt76_tx_skb_cb(skb);
-
-		if (pktid >= 0) {
-			if (!(cb->flags & MT_TX_CB_DMA_DONE))
-				continue;
-
-			if (time_is_after_jiffies(cb->jiffies +
-						   MT_TX_STATUS_SKB_TIMEOUT))
-				continue;
-		}
-
-		/* It has been too long since DMA_DONE, time out this packet
-		 * and stop waiting for TXS callback.
-		 */
-		idr_remove(&wcid->pktid, cb->pktid);
-		__mt76_tx_status_skb_done(dev, skb, MT_TX_CB_TXS_FAILED |
-						    MT_TX_CB_TXS_DONE, list);
-	}
-
-out:
-	if (idr_is_empty(&wcid->pktid))
-		list_del_init(&wcid->list);
-
-	return skb;
-}
-EXPORT_SYMBOL_GPL(mt76_tx_status_skb_get);
-
-void
-mt76_tx_status_check(struct mt76_dev *dev, bool flush)
-{
-	struct mt76_wcid *wcid, *tmp;
-	struct sk_buff_head list;
-
-	mt76_tx_status_lock(dev, &list);
-	list_for_each_entry_safe(wcid, tmp, &dev->wcid_list, list)
-		mt76_tx_status_skb_get(dev, wcid, flush ? -1 : 0, &list);
-	mt76_tx_status_unlock(dev, &list);
-}
-EXPORT_SYMBOL_GPL(mt76_tx_status_check);
-
-static void
-mt76_tx_check_non_aql(struct mt76_dev *dev, struct mt76_wcid *wcid,
-		      struct sk_buff *skb)
-{
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	int pending;
-
-	if (!wcid || info->tx_time_est)
-		return;
-
-	pending = atomic_dec_return(&wcid->non_aql_packets);
-	if (pending < 0)
-		atomic_cmpxchg(&wcid->non_aql_packets, pending, 0);
-}
-
-void __mt76_tx_complete_skb(struct mt76_dev *dev, u16 wcid_idx, struct sk_buff *skb,
-			    struct list_head *free_list)
-{
-	struct mt76_tx_cb *cb = mt76_tx_skb_cb(skb);
-	struct ieee80211_tx_status status = {
-		.skb = skb,
-		.free_list = free_list,
-	};
-	struct mt76_wcid *wcid = NULL;
-	struct ieee80211_hw *hw;
-	struct sk_buff_head list;
-
-	rcu_read_lock();
-
-	if (wcid_idx < ARRAY_SIZE(dev->wcid))
-		wcid = rcu_dereference(dev->wcid[wcid_idx]);
-
-	mt76_tx_check_non_aql(dev, wcid, skb);
-
-#ifdef CONFIG_NL80211_TESTMODE
-	if (mt76_is_testmode_skb(dev, skb, &hw)) {
-		struct mt76_phy *phy = hw->priv;
-
-		if (skb == phy->test.tx_skb)
-			phy->test.tx_done++;
-		if (phy->test.tx_queued == phy->test.tx_done)
-			wake_up(&dev->tx_wait);
-
-		dev_kfree_skb_any(skb);
-		goto out;
-	}
-#endif
-
-	if (cb->pktid < MT_PACKET_ID_FIRST) {
-		hw = mt76_tx_status_get_hw(dev, skb);
-		status.sta = wcid_to_sta(wcid);
-		ieee80211_tx_status_ext(hw, &status);
-		goto out;
-	}
-
-	mt76_tx_status_lock(dev, &list);
-	cb->jiffies = jiffies;
-	__mt76_tx_status_skb_done(dev, skb, MT_TX_CB_DMA_DONE, &list);
-	mt76_tx_status_unlock(dev, &list);
-
-out:
-	rcu_read_unlock();
-}
-EXPORT_SYMBOL_GPL(__mt76_tx_complete_skb);
-
-static int
-__mt76_tx_queue_skb(struct mt76_phy *phy, int qid, struct sk_buff *skb,
-		    struct mt76_wcid *wcid, struct ieee80211_sta *sta,
-		    bool *stop)
-{
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct mt76_queue *q = phy->q_tx[qid];
-	struct mt76_dev *dev = phy->dev;
-	bool non_aql;
-	int pending;
-	int idx;
-
-	non_aql = !info->tx_time_est;
-	idx = dev->queue_ops->tx_queue_skb(dev, q, qid, skb, wcid, sta);
-	if (idx < 0 || !sta)
-		return idx;
-
-	wcid = (struct mt76_wcid *)sta->drv_priv;
-	q->entry[idx].wcid = wcid->idx;
-
-	if (!non_aql)
-		return idx;
-
-	pending = atomic_inc_return(&wcid->non_aql_packets);
-	if (stop && pending >= MT_MAX_NON_AQL_PKT)
-		*stop = true;
-
-	return idx;
-}
-
-void
-mt76_tx(struct mt76_phy *phy, struct ieee80211_sta *sta,
-	struct mt76_wcid *wcid, struct sk_buff *skb)
-{
-	struct mt76_dev *dev = phy->dev;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-	struct mt76_queue *q;
-	int qid = skb_get_queue_mapping(skb);
-
-	if (mt76_testmode_enabled(phy)) {
-		ieee80211_free_txskb(phy->hw, skb);
-		return;
-	}
-
-	if (WARN_ON(qid >= MT_TXQ_PSD)) {
-		qid = MT_TXQ_BE;
-		skb_set_queue_mapping(skb, qid);
-	}
-
-	if ((dev->drv->drv_flags & MT_DRV_HW_MGMT_TXQ) &&
-	    !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) &&
-	    !ieee80211_is_data(hdr->frame_control) &&
-	    !ieee80211_is_bufferable_mmpdu(hdr->frame_control)) {
-		qid = MT_TXQ_PSD;
-	}
-
-	if (wcid && !(wcid->tx_info & MT_WCID_TX_INFO_SET))
-		ieee80211_get_tx_rates(info->control.vif, sta, skb,
-				       info->control.rates, 1);
-
-	info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, phy->band_idx);
-	q = phy->q_tx[qid];
-
-	spin_lock_bh(&q->lock);
-	__mt76_tx_queue_skb(phy, qid, skb, wcid, sta, NULL);
-	dev->queue_ops->kick(dev, q);
-	spin_unlock_bh(&q->lock);
-}
-EXPORT_SYMBOL_GPL(mt76_tx);
-
-static struct sk_buff *
-mt76_txq_dequeue(struct mt76_phy *phy, struct mt76_txq *mtxq)
-{
-	struct ieee80211_txq *txq = mtxq_to_txq(mtxq);
-	struct ieee80211_tx_info *info;
-	struct sk_buff *skb;
-
-	skb = ieee80211_tx_dequeue(phy->hw, txq);
-	if (!skb)
-		return NULL;
-
-	info = IEEE80211_SKB_CB(skb);
-	info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, phy->band_idx);
-
-	return skb;
-}
-
-static void
-mt76_queue_ps_skb(struct mt76_phy *phy, struct ieee80211_sta *sta,
-		  struct sk_buff *skb, bool last)
-{
-	struct mt76_wcid *wcid = (struct mt76_wcid *)sta->drv_priv;
-	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
-
-	info->control.flags |= IEEE80211_TX_CTRL_PS_RESPONSE;
-	if (last)
-		info->flags |= IEEE80211_TX_STATUS_EOSP |
-			       IEEE80211_TX_CTL_REQ_TX_STATUS;
-
-	mt76_skb_set_moredata(skb, !last);
-	__mt76_tx_queue_skb(phy, MT_TXQ_PSD, skb, wcid, sta, NULL);
-}
-
-void
-mt76_release_buffered_frames(struct ieee80211_hw *hw, struct ieee80211_sta *sta,
-			     u16 tids, int nframes,
-			     enum ieee80211_frame_release_type reason,
-			     bool more_data)
-{
-	struct mt76_phy *phy = hw->priv;
-	struct mt76_dev *dev = phy->dev;
-	struct sk_buff *last_skb = NULL;
-	struct mt76_queue *hwq = phy->q_tx[MT_TXQ_PSD];
-	int i;
-
-	spin_lock_bh(&hwq->lock);
-	for (i = 0; tids && nframes; i++, tids >>= 1) {
-		struct ieee80211_txq *txq = sta->txq[i];
-		struct mt76_txq *mtxq = (struct mt76_txq *)txq->drv_priv;
-		struct sk_buff *skb;
-
-		if (!(tids & 1))
-			continue;
-
-		do {
-			skb = mt76_txq_dequeue(phy, mtxq);
-			if (!skb)
-				break;
-
-			nframes--;
-			if (last_skb)
-				mt76_queue_ps_skb(phy, sta, last_skb, false);
-
-			last_skb = skb;
-		} while (nframes);
-	}
-
-	if (last_skb) {
-		mt76_queue_ps_skb(phy, sta, last_skb, true);
-		dev->queue_ops->kick(dev, hwq);
-	} else {
-		ieee80211_sta_eosp(sta);
-	}
-
-	spin_unlock_bh(&hwq->lock);
-}
-EXPORT_SYMBOL_GPL(mt76_release_buffered_frames);
-
-static bool
-mt76_txq_stopped(struct mt76_queue *q)
-{
-	return q->stopped || q->blocked ||
-	       q->queued + MT_TXQ_FREE_THR >= q->ndesc;
-}
-
-static int
-mt76_txq_send_burst(struct mt76_phy *phy, struct mt76_queue *q,
-		    struct mt76_txq *mtxq, struct mt76_wcid *wcid)
-{
-	struct mt76_dev *dev = phy->dev;
-	struct ieee80211_txq *txq = mtxq_to_txq(mtxq);
-	enum mt76_txq_id qid = mt76_txq_get_qid(txq);
-	struct ieee80211_tx_info *info;
-	struct sk_buff *skb;
-	int n_frames = 1;
-	bool stop = false;
-	int idx;
-
-	if (test_bit(MT_WCID_FLAG_PS, &wcid->flags))
-		return 0;
-
-	if (atomic_read(&wcid->non_aql_packets) >= MT_MAX_NON_AQL_PKT)
-		return 0;
-
-	skb = mt76_txq_dequeue(phy, mtxq);
-	if (!skb)
-		return 0;
-
-	info = IEEE80211_SKB_CB(skb);
-	if (!(wcid->tx_info & MT_WCID_TX_INFO_SET))
-		ieee80211_get_tx_rates(txq->vif, txq->sta, skb,
-				       info->control.rates, 1);
-
-	spin_lock(&q->lock);
-	idx = __mt76_tx_queue_skb(phy, qid, skb, wcid, txq->sta, &stop);
-	spin_unlock(&q->lock);
-	if (idx < 0)
-		return idx;
-
-	do {
-		if (test_bit(MT76_RESET, &phy->state))
-			return -EBUSY;
-
-		if (stop || mt76_txq_stopped(q))
-			break;
-
-		skb = mt76_txq_dequeue(phy, mtxq);
-		if (!skb)
-			break;
-
-		info = IEEE80211_SKB_CB(skb);
-		if (!(wcid->tx_info & MT_WCID_TX_INFO_SET))
-			ieee80211_get_tx_rates(txq->vif, txq->sta, skb,
-					       info->control.rates, 1);
-
-		spin_lock(&q->lock);
-		idx = __mt76_tx_queue_skb(phy, qid, skb, wcid, txq->sta, &stop);
-		spin_unlock(&q->lock);
-		if (idx < 0)
-			break;
-
-		n_frames++;
-	} while (1);
-
-	spin_lock(&q->lock);
-	dev->queue_ops->kick(dev, q);
-	spin_unlock(&q->lock);
-
-	return n_frames;
-}
-
-static int
-mt76_txq_schedule_list(struct mt76_phy *phy, enum mt76_txq_id qid)
-{
-	struct mt76_queue *q = phy->q_tx[qid];
-	struct mt76_dev *dev = phy->dev;
-	struct ieee80211_txq *txq;
-	struct mt76_txq *mtxq;
-	struct mt76_wcid *wcid;
-	int ret = 0;
-
-	while (1) {
-		int n_frames = 0;
-
-		if (test_bit(MT76_RESET, &phy->state))
-			return -EBUSY;
-
-		if (dev->queue_ops->tx_cleanup &&
-		    q->queued + 2 * MT_TXQ_FREE_THR >= q->ndesc) {
-			dev->queue_ops->tx_cleanup(dev, q, false);
-		}
-
-		txq = ieee80211_next_txq(phy->hw, qid);
-		if (!txq)
-			break;
-
-		mtxq = (struct mt76_txq *)txq->drv_priv;
-		wcid = rcu_dereference(dev->wcid[mtxq->wcid]);
-		if (!wcid || test_bit(MT_WCID_FLAG_PS, &wcid->flags))
-			continue;
-
-		if (mtxq->send_bar && mtxq->aggr) {
-			struct ieee80211_txq *txq = mtxq_to_txq(mtxq);
-			struct ieee80211_sta *sta = txq->sta;
-			struct ieee80211_vif *vif = txq->vif;
-			u16 agg_ssn = mtxq->agg_ssn;
-			u8 tid = txq->tid;
-
-			mtxq->send_bar = false;
-			ieee80211_send_bar(vif, sta->addr, tid, agg_ssn);
-		}
-
-		if (!mt76_txq_stopped(q))
-			n_frames = mt76_txq_send_burst(phy, q, mtxq, wcid);
-
-		ieee80211_return_txq(phy->hw, txq, false);
-
-		if (unlikely(n_frames < 0))
-			return n_frames;
-
-		ret += n_frames;
-	}
-
-	return ret;
-}
-
-void mt76_txq_schedule(struct mt76_phy *phy, enum mt76_txq_id qid)
-{
-	int len;
-
-	if (qid >= 4)
-		return;
-
-	local_bh_disable();
-	rcu_read_lock();
-
-	do {
-		ieee80211_txq_schedule_start(phy->hw, qid);
-		len = mt76_txq_schedule_list(phy, qid);
-		ieee80211_txq_schedule_end(phy->hw, qid);
-	} while (len > 0);
-
-	rcu_read_unlock();
-	local_bh_enable();
-}
-EXPORT_SYMBOL_GPL(mt76_txq_schedule);
-
-void mt76_txq_schedule_all(struct mt76_phy *phy)
-{
-	int i;
-
-	for (i = 0; i <= MT_TXQ_BK; i++)
-		mt76_txq_schedule(phy, i);
-}
-EXPORT_SYMBOL_GPL(mt76_txq_schedule_all);
-
-void mt76_tx_worker_run(struct mt76_dev *dev)
-{
-	struct mt76_phy *phy;
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(dev->phys); i++) {
-		phy = dev->phys[i];
-		if (!phy)
-			continue;
-
-		mt76_txq_schedule_all(phy);
-	}
-
-#ifdef CONFIG_NL80211_TESTMODE
-	for (i = 0; i < ARRAY_SIZE(dev->phys); i++) {
-		phy = dev->phys[i];
-		if (!phy || !phy->test.tx_pending)
-			continue;
-
-		mt76_testmode_tx_pending(phy);
-	}
-#endif
-}
-EXPORT_SYMBOL_GPL(mt76_tx_worker_run);
-
-void mt76_tx_worker(struct mt76_worker *w)
-{
-	struct mt76_dev *dev = container_of(w, struct mt76_dev, tx_worker);
-
-	mt76_tx_worker_run(dev);
-}
-
-void mt76_stop_tx_queues(struct mt76_phy *phy, struct ieee80211_sta *sta,
-			 bool send_bar)
-{
-	int i;
-
-	for (i = 0; i < ARRAY_SIZE(sta->txq); i++) {
-		struct ieee80211_txq *txq = sta->txq[i];
-		struct mt76_queue *hwq;
-		struct mt76_txq *mtxq;
-
-		if (!txq)
-			continue;
-
-		hwq = phy->q_tx[mt76_txq_get_qid(txq)];
-		mtxq = (struct mt76_txq *)txq->drv_priv;
-
-		spin_lock_bh(&hwq->lock);
-		mtxq->send_bar = mtxq->aggr && send_bar;
-		spin_unlock_bh(&hwq->lock);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76_stop_tx_queues);
-
-void mt76_wake_tx_queue(struct ieee80211_hw *hw, struct ieee80211_txq *txq)
-{
-	struct mt76_phy *phy = hw->priv;
-	struct mt76_dev *dev = phy->dev;
-
-	if (!test_bit(MT76_STATE_RUNNING, &phy->state))
-		return;
-
-	mt76_worker_schedule(&dev->tx_worker);
-}
-EXPORT_SYMBOL_GPL(mt76_wake_tx_queue);
-
-u8 mt76_ac_to_hwq(u8 ac)
-{
-	static const u8 wmm_queue_map[] = {
-		[IEEE80211_AC_BE] = 0,
-		[IEEE80211_AC_BK] = 1,
-		[IEEE80211_AC_VI] = 2,
-		[IEEE80211_AC_VO] = 3,
-	};
-
-	if (WARN_ON(ac >= IEEE80211_NUM_ACS))
-		return 0;
-
-	return wmm_queue_map[ac];
-}
-EXPORT_SYMBOL_GPL(mt76_ac_to_hwq);
-
-int mt76_skb_adjust_pad(struct sk_buff *skb, int pad)
-{
-	struct sk_buff *iter, *last = skb;
-
-	/* First packet of a A-MSDU burst keeps track of the whole burst
-	 * length, need to update length of it and the last packet.
-	 */
-	skb_walk_frags(skb, iter) {
-		last = iter;
-		if (!iter->next) {
-			skb->data_len += pad;
-			skb->len += pad;
-			break;
-		}
-	}
-
-	if (skb_pad(last, pad))
-		return -ENOMEM;
-
-	__skb_put(last, pad);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76_skb_adjust_pad);
-
-void mt76_queue_tx_complete(struct mt76_dev *dev, struct mt76_queue *q,
-			    struct mt76_queue_entry *e)
-{
-	if (e->skb)
-		dev->drv->tx_complete_skb(dev, e);
-
-	spin_lock_bh(&q->lock);
-	q->tail = (q->tail + 1) % q->ndesc;
-	q->queued--;
-	spin_unlock_bh(&q->lock);
-}
-EXPORT_SYMBOL_GPL(mt76_queue_tx_complete);
-
-void __mt76_set_tx_blocked(struct mt76_dev *dev, bool blocked)
-{
-	struct mt76_phy *phy = &dev->phy;
-	struct mt76_queue *q = phy->q_tx[0];
-
-	if (blocked == q->blocked)
-		return;
-
-	q->blocked = blocked;
-
-	phy = dev->phys[MT_BAND1];
-	if (phy) {
-		q = phy->q_tx[0];
-		q->blocked = blocked;
-	}
-	phy = dev->phys[MT_BAND2];
-	if (phy) {
-		q = phy->q_tx[0];
-		q->blocked = blocked;
-	}
-
-	if (!blocked)
-		mt76_worker_schedule(&dev->tx_worker);
-}
-EXPORT_SYMBOL_GPL(__mt76_set_tx_blocked);
-
-int mt76_token_consume(struct mt76_dev *dev, struct mt76_txwi_cache **ptxwi)
-{
-	int token;
-
-	spin_lock_bh(&dev->token_lock);
-
-	token = idr_alloc(&dev->token, *ptxwi, 0, dev->token_size, GFP_ATOMIC);
-	if (token >= 0)
-		dev->token_count++;
-
-	if (dev->token_count >= dev->token_size - MT76_TOKEN_FREE_THR)
-		__mt76_set_tx_blocked(dev, true);
-
-	spin_unlock_bh(&dev->token_lock);
-
-	return token;
-}
-EXPORT_SYMBOL_GPL(mt76_token_consume);
-
-struct mt76_txwi_cache *
-mt76_token_release(struct mt76_dev *dev, int token, bool *wake)
-{
-	struct mt76_txwi_cache *txwi;
-
-	spin_lock_bh(&dev->token_lock);
-
-	txwi = idr_remove(&dev->token, token);
-	if (txwi)
-		dev->token_count--;
-
-	if (dev->token_count < dev->token_size - MT76_TOKEN_FREE_THR &&
-	    dev->phy.q_tx[0]->blocked)
-		*wake = true;
-
-	spin_unlock_bh(&dev->token_lock);
-
-	return txwi;
-}
-EXPORT_SYMBOL_GPL(mt76_token_release);
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/usb.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/usb.c
deleted file mode 100644
index c1c9653..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/usb.c
+++ /dev/null
@@ -1,1130 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <linux/module.h>
-#include "mt76.h"
-#include "usb_trace.h"
-#include "dma.h"
-
-#define MT_VEND_REQ_MAX_RETRY	10
-#define MT_VEND_REQ_TOUT_MS	300
-
-static bool disable_usb_sg;
-module_param_named(disable_usb_sg, disable_usb_sg, bool, 0644);
-MODULE_PARM_DESC(disable_usb_sg, "Disable usb scatter-gather support");
-
-int __mt76u_vendor_request(struct mt76_dev *dev, u8 req, u8 req_type,
-			   u16 val, u16 offset, void *buf, size_t len)
-{
-	struct usb_interface *uintf = to_usb_interface(dev->dev);
-	struct usb_device *udev = interface_to_usbdev(uintf);
-	unsigned int pipe;
-	int i, ret;
-
-	lockdep_assert_held(&dev->usb.usb_ctrl_mtx);
-
-	pipe = (req_type & USB_DIR_IN) ? usb_rcvctrlpipe(udev, 0)
-				       : usb_sndctrlpipe(udev, 0);
-	for (i = 0; i < MT_VEND_REQ_MAX_RETRY; i++) {
-		if (test_bit(MT76_REMOVED, &dev->phy.state))
-			return -EIO;
-
-		ret = usb_control_msg(udev, pipe, req, req_type, val,
-				      offset, buf, len, MT_VEND_REQ_TOUT_MS);
-		if (ret == -ENODEV)
-			set_bit(MT76_REMOVED, &dev->phy.state);
-		if (ret >= 0 || ret == -ENODEV)
-			return ret;
-		usleep_range(5000, 10000);
-	}
-
-	dev_err(dev->dev, "vendor request req:%02x off:%04x failed:%d\n",
-		req, offset, ret);
-	return ret;
-}
-EXPORT_SYMBOL_GPL(__mt76u_vendor_request);
-
-int mt76u_vendor_request(struct mt76_dev *dev, u8 req,
-			 u8 req_type, u16 val, u16 offset,
-			 void *buf, size_t len)
-{
-	int ret;
-
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	ret = __mt76u_vendor_request(dev, req, req_type,
-				     val, offset, buf, len);
-	trace_usb_reg_wr(dev, offset, val);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-
-	return ret;
-}
-EXPORT_SYMBOL_GPL(mt76u_vendor_request);
-
-u32 ___mt76u_rr(struct mt76_dev *dev, u8 req, u8 req_type, u32 addr)
-{
-	struct mt76_usb *usb = &dev->usb;
-	u32 data = ~0;
-	int ret;
-
-	ret = __mt76u_vendor_request(dev, req, req_type, addr >> 16,
-				     addr, usb->data, sizeof(__le32));
-	if (ret == sizeof(__le32))
-		data = get_unaligned_le32(usb->data);
-	trace_usb_reg_rr(dev, addr, data);
-
-	return data;
-}
-EXPORT_SYMBOL_GPL(___mt76u_rr);
-
-static u32 __mt76u_rr(struct mt76_dev *dev, u32 addr)
-{
-	u8 req;
-
-	switch (addr & MT_VEND_TYPE_MASK) {
-	case MT_VEND_TYPE_EEPROM:
-		req = MT_VEND_READ_EEPROM;
-		break;
-	case MT_VEND_TYPE_CFG:
-		req = MT_VEND_READ_CFG;
-		break;
-	default:
-		req = MT_VEND_MULTI_READ;
-		break;
-	}
-
-	return ___mt76u_rr(dev, req, USB_DIR_IN | USB_TYPE_VENDOR,
-			   addr & ~MT_VEND_TYPE_MASK);
-}
-
-static u32 mt76u_rr(struct mt76_dev *dev, u32 addr)
-{
-	u32 ret;
-
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	ret = __mt76u_rr(dev, addr);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-
-	return ret;
-}
-
-void ___mt76u_wr(struct mt76_dev *dev, u8 req, u8 req_type,
-		 u32 addr, u32 val)
-{
-	struct mt76_usb *usb = &dev->usb;
-
-	put_unaligned_le32(val, usb->data);
-	__mt76u_vendor_request(dev, req, req_type, addr >> 16,
-			       addr, usb->data, sizeof(__le32));
-	trace_usb_reg_wr(dev, addr, val);
-}
-EXPORT_SYMBOL_GPL(___mt76u_wr);
-
-static void __mt76u_wr(struct mt76_dev *dev, u32 addr, u32 val)
-{
-	u8 req;
-
-	switch (addr & MT_VEND_TYPE_MASK) {
-	case MT_VEND_TYPE_CFG:
-		req = MT_VEND_WRITE_CFG;
-		break;
-	default:
-		req = MT_VEND_MULTI_WRITE;
-		break;
-	}
-	___mt76u_wr(dev, req, USB_DIR_OUT | USB_TYPE_VENDOR,
-		    addr & ~MT_VEND_TYPE_MASK, val);
-}
-
-static void mt76u_wr(struct mt76_dev *dev, u32 addr, u32 val)
-{
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	__mt76u_wr(dev, addr, val);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-}
-
-static u32 mt76u_rmw(struct mt76_dev *dev, u32 addr,
-		     u32 mask, u32 val)
-{
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	val |= __mt76u_rr(dev, addr) & ~mask;
-	__mt76u_wr(dev, addr, val);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-
-	return val;
-}
-
-static void mt76u_copy(struct mt76_dev *dev, u32 offset,
-		       const void *data, int len)
-{
-	struct mt76_usb *usb = &dev->usb;
-	const u8 *val = data;
-	int ret;
-	int current_batch_size;
-	int i = 0;
-
-	/* Assure that always a multiple of 4 bytes are copied,
-	 * otherwise beacons can be corrupted.
-	 * See: "mt76: round up length on mt76_wr_copy"
-	 * Commit 850e8f6fbd5d0003b0
-	 */
-	len = round_up(len, 4);
-
-	mutex_lock(&usb->usb_ctrl_mtx);
-	while (i < len) {
-		current_batch_size = min_t(int, usb->data_len, len - i);
-		memcpy(usb->data, val + i, current_batch_size);
-		ret = __mt76u_vendor_request(dev, MT_VEND_MULTI_WRITE,
-					     USB_DIR_OUT | USB_TYPE_VENDOR,
-					     0, offset + i, usb->data,
-					     current_batch_size);
-		if (ret < 0)
-			break;
-
-		i += current_batch_size;
-	}
-	mutex_unlock(&usb->usb_ctrl_mtx);
-}
-
-void mt76u_read_copy(struct mt76_dev *dev, u32 offset,
-		     void *data, int len)
-{
-	struct mt76_usb *usb = &dev->usb;
-	int i = 0, batch_len, ret;
-	u8 *val = data;
-
-	len = round_up(len, 4);
-	mutex_lock(&usb->usb_ctrl_mtx);
-	while (i < len) {
-		batch_len = min_t(int, usb->data_len, len - i);
-		ret = __mt76u_vendor_request(dev, MT_VEND_READ_EXT,
-					     USB_DIR_IN | USB_TYPE_VENDOR,
-					     (offset + i) >> 16, offset + i,
-					     usb->data, batch_len);
-		if (ret < 0)
-			break;
-
-		memcpy(val + i, usb->data, batch_len);
-		i += batch_len;
-	}
-	mutex_unlock(&usb->usb_ctrl_mtx);
-}
-EXPORT_SYMBOL_GPL(mt76u_read_copy);
-
-void mt76u_single_wr(struct mt76_dev *dev, const u8 req,
-		     const u16 offset, const u32 val)
-{
-	mutex_lock(&dev->usb.usb_ctrl_mtx);
-	__mt76u_vendor_request(dev, req,
-			       USB_DIR_OUT | USB_TYPE_VENDOR,
-			       val & 0xffff, offset, NULL, 0);
-	__mt76u_vendor_request(dev, req,
-			       USB_DIR_OUT | USB_TYPE_VENDOR,
-			       val >> 16, offset + 2, NULL, 0);
-	mutex_unlock(&dev->usb.usb_ctrl_mtx);
-}
-EXPORT_SYMBOL_GPL(mt76u_single_wr);
-
-static int
-mt76u_req_wr_rp(struct mt76_dev *dev, u32 base,
-		const struct mt76_reg_pair *data, int len)
-{
-	struct mt76_usb *usb = &dev->usb;
-
-	mutex_lock(&usb->usb_ctrl_mtx);
-	while (len > 0) {
-		__mt76u_wr(dev, base + data->reg, data->value);
-		len--;
-		data++;
-	}
-	mutex_unlock(&usb->usb_ctrl_mtx);
-
-	return 0;
-}
-
-static int
-mt76u_wr_rp(struct mt76_dev *dev, u32 base,
-	    const struct mt76_reg_pair *data, int n)
-{
-	if (test_bit(MT76_STATE_MCU_RUNNING, &dev->phy.state))
-		return dev->mcu_ops->mcu_wr_rp(dev, base, data, n);
-	else
-		return mt76u_req_wr_rp(dev, base, data, n);
-}
-
-static int
-mt76u_req_rd_rp(struct mt76_dev *dev, u32 base, struct mt76_reg_pair *data,
-		int len)
-{
-	struct mt76_usb *usb = &dev->usb;
-
-	mutex_lock(&usb->usb_ctrl_mtx);
-	while (len > 0) {
-		data->value = __mt76u_rr(dev, base + data->reg);
-		len--;
-		data++;
-	}
-	mutex_unlock(&usb->usb_ctrl_mtx);
-
-	return 0;
-}
-
-static int
-mt76u_rd_rp(struct mt76_dev *dev, u32 base,
-	    struct mt76_reg_pair *data, int n)
-{
-	if (test_bit(MT76_STATE_MCU_RUNNING, &dev->phy.state))
-		return dev->mcu_ops->mcu_rd_rp(dev, base, data, n);
-	else
-		return mt76u_req_rd_rp(dev, base, data, n);
-}
-
-static bool mt76u_check_sg(struct mt76_dev *dev)
-{
-	struct usb_interface *uintf = to_usb_interface(dev->dev);
-	struct usb_device *udev = interface_to_usbdev(uintf);
-
-	return (!disable_usb_sg && udev->bus->sg_tablesize > 0 &&
-		(udev->bus->no_sg_constraint ||
-		 udev->speed == USB_SPEED_WIRELESS));
-}
-
-static int
-mt76u_set_endpoints(struct usb_interface *intf,
-		    struct mt76_usb *usb)
-{
-	struct usb_host_interface *intf_desc = intf->cur_altsetting;
-	struct usb_endpoint_descriptor *ep_desc;
-	int i, in_ep = 0, out_ep = 0;
-
-	for (i = 0; i < intf_desc->desc.bNumEndpoints; i++) {
-		ep_desc = &intf_desc->endpoint[i].desc;
-
-		if (usb_endpoint_is_bulk_in(ep_desc) &&
-		    in_ep < __MT_EP_IN_MAX) {
-			usb->in_ep[in_ep] = usb_endpoint_num(ep_desc);
-			in_ep++;
-		} else if (usb_endpoint_is_bulk_out(ep_desc) &&
-			   out_ep < __MT_EP_OUT_MAX) {
-			usb->out_ep[out_ep] = usb_endpoint_num(ep_desc);
-			out_ep++;
-		}
-	}
-
-	if (in_ep != __MT_EP_IN_MAX || out_ep != __MT_EP_OUT_MAX)
-		return -EINVAL;
-	return 0;
-}
-
-static int
-mt76u_fill_rx_sg(struct mt76_dev *dev, struct mt76_queue *q, struct urb *urb,
-		 int nsgs, gfp_t gfp)
-{
-	int i;
-
-	for (i = 0; i < nsgs; i++) {
-		struct page *page;
-		void *data;
-		int offset;
-
-		data = page_frag_alloc(&q->rx_page, q->buf_size, gfp);
-		if (!data)
-			break;
-
-		page = virt_to_head_page(data);
-		offset = data - page_address(page);
-		sg_set_page(&urb->sg[i], page, q->buf_size, offset);
-	}
-
-	if (i < nsgs) {
-		int j;
-
-		for (j = nsgs; j < urb->num_sgs; j++)
-			skb_free_frag(sg_virt(&urb->sg[j]));
-		urb->num_sgs = i;
-	}
-
-	urb->num_sgs = max_t(int, i, urb->num_sgs);
-	urb->transfer_buffer_length = urb->num_sgs * q->buf_size;
-	sg_init_marker(urb->sg, urb->num_sgs);
-
-	return i ? : -ENOMEM;
-}
-
-static int
-mt76u_refill_rx(struct mt76_dev *dev, struct mt76_queue *q,
-		struct urb *urb, int nsgs, gfp_t gfp)
-{
-	enum mt76_rxq_id qid = q - &dev->q_rx[MT_RXQ_MAIN];
-
-	if (qid == MT_RXQ_MAIN && dev->usb.sg_en)
-		return mt76u_fill_rx_sg(dev, q, urb, nsgs, gfp);
-
-	urb->transfer_buffer_length = q->buf_size;
-	urb->transfer_buffer = page_frag_alloc(&q->rx_page, q->buf_size, gfp);
-
-	return urb->transfer_buffer ? 0 : -ENOMEM;
-}
-
-static int
-mt76u_urb_alloc(struct mt76_dev *dev, struct mt76_queue_entry *e,
-		int sg_max_size)
-{
-	unsigned int size = sizeof(struct urb);
-
-	if (dev->usb.sg_en)
-		size += sg_max_size * sizeof(struct scatterlist);
-
-	e->urb = kzalloc(size, GFP_KERNEL);
-	if (!e->urb)
-		return -ENOMEM;
-
-	usb_init_urb(e->urb);
-
-	if (dev->usb.sg_en && sg_max_size > 0)
-		e->urb->sg = (struct scatterlist *)(e->urb + 1);
-
-	return 0;
-}
-
-static int
-mt76u_rx_urb_alloc(struct mt76_dev *dev, struct mt76_queue *q,
-		   struct mt76_queue_entry *e)
-{
-	enum mt76_rxq_id qid = q - &dev->q_rx[MT_RXQ_MAIN];
-	int err, sg_size;
-
-	sg_size = qid == MT_RXQ_MAIN ? MT_RX_SG_MAX_SIZE : 0;
-	err = mt76u_urb_alloc(dev, e, sg_size);
-	if (err)
-		return err;
-
-	return mt76u_refill_rx(dev, q, e->urb, sg_size, GFP_KERNEL);
-}
-
-static void mt76u_urb_free(struct urb *urb)
-{
-	int i;
-
-	for (i = 0; i < urb->num_sgs; i++)
-		skb_free_frag(sg_virt(&urb->sg[i]));
-
-	if (urb->transfer_buffer)
-		skb_free_frag(urb->transfer_buffer);
-
-	usb_free_urb(urb);
-}
-
-static void
-mt76u_fill_bulk_urb(struct mt76_dev *dev, int dir, int index,
-		    struct urb *urb, usb_complete_t complete_fn,
-		    void *context)
-{
-	struct usb_interface *uintf = to_usb_interface(dev->dev);
-	struct usb_device *udev = interface_to_usbdev(uintf);
-	unsigned int pipe;
-
-	if (dir == USB_DIR_IN)
-		pipe = usb_rcvbulkpipe(udev, dev->usb.in_ep[index]);
-	else
-		pipe = usb_sndbulkpipe(udev, dev->usb.out_ep[index]);
-
-	urb->dev = udev;
-	urb->pipe = pipe;
-	urb->complete = complete_fn;
-	urb->context = context;
-}
-
-static struct urb *
-mt76u_get_next_rx_entry(struct mt76_queue *q)
-{
-	struct urb *urb = NULL;
-	unsigned long flags;
-
-	spin_lock_irqsave(&q->lock, flags);
-	if (q->queued > 0) {
-		urb = q->entry[q->tail].urb;
-		q->tail = (q->tail + 1) % q->ndesc;
-		q->queued--;
-	}
-	spin_unlock_irqrestore(&q->lock, flags);
-
-	return urb;
-}
-
-static int
-mt76u_get_rx_entry_len(struct mt76_dev *dev, u8 *data,
-		       u32 data_len)
-{
-	u16 dma_len, min_len;
-
-	dma_len = get_unaligned_le16(data);
-	if (dev->drv->drv_flags & MT_DRV_RX_DMA_HDR)
-		return dma_len;
-
-	min_len = MT_DMA_HDR_LEN + MT_RX_RXWI_LEN + MT_FCE_INFO_LEN;
-	if (data_len < min_len || !dma_len ||
-	    dma_len + MT_DMA_HDR_LEN > data_len ||
-	    (dma_len & 0x3))
-		return -EINVAL;
-	return dma_len;
-}
-
-static struct sk_buff *
-mt76u_build_rx_skb(struct mt76_dev *dev, void *data,
-		   int len, int buf_size)
-{
-	int head_room, drv_flags = dev->drv->drv_flags;
-	struct sk_buff *skb;
-
-	head_room = drv_flags & MT_DRV_RX_DMA_HDR ? 0 : MT_DMA_HDR_LEN;
-	if (SKB_WITH_OVERHEAD(buf_size) < head_room + len) {
-		struct page *page;
-
-		/* slow path, not enough space for data and
-		 * skb_shared_info
-		 */
-		skb = alloc_skb(MT_SKB_HEAD_LEN, GFP_ATOMIC);
-		if (!skb)
-			return NULL;
-
-		skb_put_data(skb, data + head_room, MT_SKB_HEAD_LEN);
-		data += head_room + MT_SKB_HEAD_LEN;
-		page = virt_to_head_page(data);
-		skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
-				page, data - page_address(page),
-				len - MT_SKB_HEAD_LEN, buf_size);
-
-		return skb;
-	}
-
-	/* fast path */
-	skb = build_skb(data, buf_size);
-	if (!skb)
-		return NULL;
-
-	skb_reserve(skb, head_room);
-	__skb_put(skb, len);
-
-	return skb;
-}
-
-static int
-mt76u_process_rx_entry(struct mt76_dev *dev, struct urb *urb,
-		       int buf_size)
-{
-	u8 *data = urb->num_sgs ? sg_virt(&urb->sg[0]) : urb->transfer_buffer;
-	int data_len = urb->num_sgs ? urb->sg[0].length : urb->actual_length;
-	int len, nsgs = 1, head_room, drv_flags = dev->drv->drv_flags;
-	struct sk_buff *skb;
-
-	if (!test_bit(MT76_STATE_INITIALIZED, &dev->phy.state))
-		return 0;
-
-	len = mt76u_get_rx_entry_len(dev, data, urb->actual_length);
-	if (len < 0)
-		return 0;
-
-	head_room = drv_flags & MT_DRV_RX_DMA_HDR ? 0 : MT_DMA_HDR_LEN;
-	data_len = min_t(int, len, data_len - head_room);
-
-	if (len == data_len &&
-	    dev->drv->rx_check && !dev->drv->rx_check(dev, data, data_len))
-		return 0;
-
-	skb = mt76u_build_rx_skb(dev, data, data_len, buf_size);
-	if (!skb)
-		return 0;
-
-	len -= data_len;
-	while (len > 0 && nsgs < urb->num_sgs) {
-		data_len = min_t(int, len, urb->sg[nsgs].length);
-		skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
-				sg_page(&urb->sg[nsgs]),
-				urb->sg[nsgs].offset, data_len,
-				buf_size);
-		len -= data_len;
-		nsgs++;
-	}
-	dev->drv->rx_skb(dev, MT_RXQ_MAIN, skb);
-
-	return nsgs;
-}
-
-static void mt76u_complete_rx(struct urb *urb)
-{
-	struct mt76_dev *dev = dev_get_drvdata(&urb->dev->dev);
-	struct mt76_queue *q = urb->context;
-	unsigned long flags;
-
-	trace_rx_urb(dev, urb);
-
-	switch (urb->status) {
-	case -ECONNRESET:
-	case -ESHUTDOWN:
-	case -ENOENT:
-	case -EPROTO:
-		return;
-	default:
-		dev_err_ratelimited(dev->dev, "rx urb failed: %d\n",
-				    urb->status);
-		fallthrough;
-	case 0:
-		break;
-	}
-
-	spin_lock_irqsave(&q->lock, flags);
-	if (WARN_ONCE(q->entry[q->head].urb != urb, "rx urb mismatch"))
-		goto out;
-
-	q->head = (q->head + 1) % q->ndesc;
-	q->queued++;
-	mt76_worker_schedule(&dev->usb.rx_worker);
-out:
-	spin_unlock_irqrestore(&q->lock, flags);
-}
-
-static int
-mt76u_submit_rx_buf(struct mt76_dev *dev, enum mt76_rxq_id qid,
-		    struct urb *urb)
-{
-	int ep = qid == MT_RXQ_MAIN ? MT_EP_IN_PKT_RX : MT_EP_IN_CMD_RESP;
-
-	mt76u_fill_bulk_urb(dev, USB_DIR_IN, ep, urb,
-			    mt76u_complete_rx, &dev->q_rx[qid]);
-	trace_submit_urb(dev, urb);
-
-	return usb_submit_urb(urb, GFP_ATOMIC);
-}
-
-static void
-mt76u_process_rx_queue(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	int qid = q - &dev->q_rx[MT_RXQ_MAIN];
-	struct urb *urb;
-	int err, count;
-
-	while (true) {
-		urb = mt76u_get_next_rx_entry(q);
-		if (!urb)
-			break;
-
-		count = mt76u_process_rx_entry(dev, urb, q->buf_size);
-		if (count > 0) {
-			err = mt76u_refill_rx(dev, q, urb, count, GFP_ATOMIC);
-			if (err < 0)
-				break;
-		}
-		mt76u_submit_rx_buf(dev, qid, urb);
-	}
-	if (qid == MT_RXQ_MAIN) {
-		local_bh_disable();
-		mt76_rx_poll_complete(dev, MT_RXQ_MAIN, NULL);
-		local_bh_enable();
-	}
-}
-
-static void mt76u_rx_worker(struct mt76_worker *w)
-{
-	struct mt76_usb *usb = container_of(w, struct mt76_usb, rx_worker);
-	struct mt76_dev *dev = container_of(usb, struct mt76_dev, usb);
-	int i;
-
-	rcu_read_lock();
-	mt76_for_each_q_rx(dev, i)
-		mt76u_process_rx_queue(dev, &dev->q_rx[i]);
-	rcu_read_unlock();
-}
-
-static int
-mt76u_submit_rx_buffers(struct mt76_dev *dev, enum mt76_rxq_id qid)
-{
-	struct mt76_queue *q = &dev->q_rx[qid];
-	unsigned long flags;
-	int i, err = 0;
-
-	spin_lock_irqsave(&q->lock, flags);
-	for (i = 0; i < q->ndesc; i++) {
-		err = mt76u_submit_rx_buf(dev, qid, q->entry[i].urb);
-		if (err < 0)
-			break;
-	}
-	q->head = q->tail = 0;
-	q->queued = 0;
-	spin_unlock_irqrestore(&q->lock, flags);
-
-	return err;
-}
-
-static int
-mt76u_alloc_rx_queue(struct mt76_dev *dev, enum mt76_rxq_id qid)
-{
-	struct mt76_queue *q = &dev->q_rx[qid];
-	int i, err;
-
-	spin_lock_init(&q->lock);
-	q->entry = devm_kcalloc(dev->dev,
-				MT_NUM_RX_ENTRIES, sizeof(*q->entry),
-				GFP_KERNEL);
-	if (!q->entry)
-		return -ENOMEM;
-
-	q->ndesc = MT_NUM_RX_ENTRIES;
-	q->buf_size = PAGE_SIZE;
-
-	for (i = 0; i < q->ndesc; i++) {
-		err = mt76u_rx_urb_alloc(dev, q, &q->entry[i]);
-		if (err < 0)
-			return err;
-	}
-
-	return mt76u_submit_rx_buffers(dev, qid);
-}
-
-int mt76u_alloc_mcu_queue(struct mt76_dev *dev)
-{
-	return mt76u_alloc_rx_queue(dev, MT_RXQ_MCU);
-}
-EXPORT_SYMBOL_GPL(mt76u_alloc_mcu_queue);
-
-static void
-mt76u_free_rx_queue(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	struct page *page;
-	int i;
-
-	for (i = 0; i < q->ndesc; i++) {
-		if (!q->entry[i].urb)
-			continue;
-
-		mt76u_urb_free(q->entry[i].urb);
-		q->entry[i].urb = NULL;
-	}
-
-	if (!q->rx_page.va)
-		return;
-
-	page = virt_to_page(q->rx_page.va);
-	__page_frag_cache_drain(page, q->rx_page.pagecnt_bias);
-	memset(&q->rx_page, 0, sizeof(q->rx_page));
-}
-
-static void mt76u_free_rx(struct mt76_dev *dev)
-{
-	int i;
-
-	mt76_worker_teardown(&dev->usb.rx_worker);
-
-	mt76_for_each_q_rx(dev, i)
-		mt76u_free_rx_queue(dev, &dev->q_rx[i]);
-}
-
-void mt76u_stop_rx(struct mt76_dev *dev)
-{
-	int i;
-
-	mt76_worker_disable(&dev->usb.rx_worker);
-
-	mt76_for_each_q_rx(dev, i) {
-		struct mt76_queue *q = &dev->q_rx[i];
-		int j;
-
-		for (j = 0; j < q->ndesc; j++)
-			usb_poison_urb(q->entry[j].urb);
-	}
-}
-EXPORT_SYMBOL_GPL(mt76u_stop_rx);
-
-int mt76u_resume_rx(struct mt76_dev *dev)
-{
-	int i;
-
-	mt76_for_each_q_rx(dev, i) {
-		struct mt76_queue *q = &dev->q_rx[i];
-		int err, j;
-
-		for (j = 0; j < q->ndesc; j++)
-			usb_unpoison_urb(q->entry[j].urb);
-
-		err = mt76u_submit_rx_buffers(dev, i);
-		if (err < 0)
-			return err;
-	}
-
-	mt76_worker_enable(&dev->usb.rx_worker);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mt76u_resume_rx);
-
-static void mt76u_status_worker(struct mt76_worker *w)
-{
-	struct mt76_usb *usb = container_of(w, struct mt76_usb, status_worker);
-	struct mt76_dev *dev = container_of(usb, struct mt76_dev, usb);
-	struct mt76_queue_entry entry;
-	struct mt76_queue *q;
-	int i;
-
-	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-		q = dev->phy.q_tx[i];
-		if (!q)
-			continue;
-
-		while (q->queued > 0) {
-			if (!q->entry[q->tail].done)
-				break;
-
-			entry = q->entry[q->tail];
-			q->entry[q->tail].done = false;
-
-			mt76_queue_tx_complete(dev, q, &entry);
-		}
-
-		if (!q->queued)
-			wake_up(&dev->tx_wait);
-
-		mt76_worker_schedule(&dev->tx_worker);
-
-		if (dev->drv->tx_status_data &&
-		    !test_and_set_bit(MT76_READING_STATS, &dev->phy.state))
-			queue_work(dev->wq, &dev->usb.stat_work);
-	}
-}
-
-static void mt76u_tx_status_data(struct work_struct *work)
-{
-	struct mt76_usb *usb;
-	struct mt76_dev *dev;
-	u8 update = 1;
-	u16 count = 0;
-
-	usb = container_of(work, struct mt76_usb, stat_work);
-	dev = container_of(usb, struct mt76_dev, usb);
-
-	while (true) {
-		if (test_bit(MT76_REMOVED, &dev->phy.state))
-			break;
-
-		if (!dev->drv->tx_status_data(dev, &update))
-			break;
-		count++;
-	}
-
-	if (count && test_bit(MT76_STATE_RUNNING, &dev->phy.state))
-		queue_work(dev->wq, &usb->stat_work);
-	else
-		clear_bit(MT76_READING_STATS, &dev->phy.state);
-}
-
-static void mt76u_complete_tx(struct urb *urb)
-{
-	struct mt76_dev *dev = dev_get_drvdata(&urb->dev->dev);
-	struct mt76_queue_entry *e = urb->context;
-
-	if (mt76u_urb_error(urb))
-		dev_err(dev->dev, "tx urb failed: %d\n", urb->status);
-	e->done = true;
-
-	mt76_worker_schedule(&dev->usb.status_worker);
-}
-
-static int
-mt76u_tx_setup_buffers(struct mt76_dev *dev, struct sk_buff *skb,
-		       struct urb *urb)
-{
-	urb->transfer_buffer_length = skb->len;
-
-	if (!dev->usb.sg_en) {
-		urb->transfer_buffer = skb->data;
-		return 0;
-	}
-
-	sg_init_table(urb->sg, MT_TX_SG_MAX_SIZE);
-	urb->num_sgs = skb_to_sgvec(skb, urb->sg, 0, skb->len);
-	if (!urb->num_sgs)
-		return -ENOMEM;
-
-	return urb->num_sgs;
-}
-
-static int
-mt76u_tx_queue_skb(struct mt76_dev *dev, struct mt76_queue *q,
-		   enum mt76_txq_id qid, struct sk_buff *skb,
-		   struct mt76_wcid *wcid, struct ieee80211_sta *sta)
-{
-	struct mt76_tx_info tx_info = {
-		.skb = skb,
-	};
-	u16 idx = q->head;
-	int err;
-
-	if (q->queued == q->ndesc)
-		return -ENOSPC;
-
-	skb->prev = skb->next = NULL;
-	err = dev->drv->tx_prepare_skb(dev, NULL, qid, wcid, sta, &tx_info);
-	if (err < 0)
-		return err;
-
-	err = mt76u_tx_setup_buffers(dev, tx_info.skb, q->entry[idx].urb);
-	if (err < 0)
-		return err;
-
-	mt76u_fill_bulk_urb(dev, USB_DIR_OUT, q2ep(q->hw_idx),
-			    q->entry[idx].urb, mt76u_complete_tx,
-			    &q->entry[idx]);
-
-	q->head = (q->head + 1) % q->ndesc;
-	q->entry[idx].skb = tx_info.skb;
-	q->entry[idx].wcid = 0xffff;
-	q->queued++;
-
-	return idx;
-}
-
-static void mt76u_tx_kick(struct mt76_dev *dev, struct mt76_queue *q)
-{
-	struct urb *urb;
-	int err;
-
-	while (q->first != q->head) {
-		urb = q->entry[q->first].urb;
-
-		trace_submit_urb(dev, urb);
-		err = usb_submit_urb(urb, GFP_ATOMIC);
-		if (err < 0) {
-			if (err == -ENODEV)
-				set_bit(MT76_REMOVED, &dev->phy.state);
-			else
-				dev_err(dev->dev, "tx urb submit failed:%d\n",
-					err);
-			break;
-		}
-		q->first = (q->first + 1) % q->ndesc;
-	}
-}
-
-static u8 mt76u_ac_to_hwq(struct mt76_dev *dev, u8 ac)
-{
-	if (mt76_chip(dev) == 0x7663) {
-		static const u8 lmac_queue_map[] = {
-			/* ac to lmac mapping */
-			[IEEE80211_AC_BK] = 0,
-			[IEEE80211_AC_BE] = 1,
-			[IEEE80211_AC_VI] = 2,
-			[IEEE80211_AC_VO] = 4,
-		};
-
-		if (WARN_ON(ac >= ARRAY_SIZE(lmac_queue_map)))
-			return 1; /* BE */
-
-		return lmac_queue_map[ac];
-	}
-
-	return mt76_ac_to_hwq(ac);
-}
-
-static int mt76u_alloc_tx(struct mt76_dev *dev)
-{
-	struct mt76_queue *q;
-	int i, j, err;
-
-	for (i = 0; i <= MT_TXQ_PSD; i++) {
-		if (i >= IEEE80211_NUM_ACS) {
-			dev->phy.q_tx[i] = dev->phy.q_tx[0];
-			continue;
-		}
-
-		q = devm_kzalloc(dev->dev, sizeof(*q), GFP_KERNEL);
-		if (!q)
-			return -ENOMEM;
-
-		spin_lock_init(&q->lock);
-		q->hw_idx = mt76u_ac_to_hwq(dev, i);
-
-		dev->phy.q_tx[i] = q;
-
-		q->entry = devm_kcalloc(dev->dev,
-					MT_NUM_TX_ENTRIES, sizeof(*q->entry),
-					GFP_KERNEL);
-		if (!q->entry)
-			return -ENOMEM;
-
-		q->ndesc = MT_NUM_TX_ENTRIES;
-		for (j = 0; j < q->ndesc; j++) {
-			err = mt76u_urb_alloc(dev, &q->entry[j],
-					      MT_TX_SG_MAX_SIZE);
-			if (err < 0)
-				return err;
-		}
-	}
-	return 0;
-}
-
-static void mt76u_free_tx(struct mt76_dev *dev)
-{
-	int i;
-
-	mt76_worker_teardown(&dev->usb.status_worker);
-
-	for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-		struct mt76_queue *q;
-		int j;
-
-		q = dev->phy.q_tx[i];
-		if (!q)
-			continue;
-
-		for (j = 0; j < q->ndesc; j++) {
-			usb_free_urb(q->entry[j].urb);
-			q->entry[j].urb = NULL;
-		}
-	}
-}
-
-void mt76u_stop_tx(struct mt76_dev *dev)
-{
-	int ret;
-
-	mt76_worker_disable(&dev->usb.status_worker);
-
-	ret = wait_event_timeout(dev->tx_wait, !mt76_has_tx_pending(&dev->phy),
-				 HZ / 5);
-	if (!ret) {
-		struct mt76_queue_entry entry;
-		struct mt76_queue *q;
-		int i, j;
-
-		dev_err(dev->dev, "timed out waiting for pending tx\n");
-
-		for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-			q = dev->phy.q_tx[i];
-			if (!q)
-				continue;
-
-			for (j = 0; j < q->ndesc; j++)
-				usb_kill_urb(q->entry[j].urb);
-		}
-
-		mt76_worker_disable(&dev->tx_worker);
-
-		/* On device removal we maight queue skb's, but mt76u_tx_kick()
-		 * will fail to submit urb, cleanup those skb's manually.
-		 */
-		for (i = 0; i < IEEE80211_NUM_ACS; i++) {
-			q = dev->phy.q_tx[i];
-			if (!q)
-				continue;
-
-			while (q->queued > 0) {
-				entry = q->entry[q->tail];
-				q->entry[q->tail].done = false;
-				mt76_queue_tx_complete(dev, q, &entry);
-			}
-		}
-
-		mt76_worker_enable(&dev->tx_worker);
-	}
-
-	cancel_work_sync(&dev->usb.stat_work);
-	clear_bit(MT76_READING_STATS, &dev->phy.state);
-
-	mt76_worker_enable(&dev->usb.status_worker);
-
-	mt76_tx_status_check(dev, true);
-}
-EXPORT_SYMBOL_GPL(mt76u_stop_tx);
-
-void mt76u_queues_deinit(struct mt76_dev *dev)
-{
-	mt76u_stop_rx(dev);
-	mt76u_stop_tx(dev);
-
-	mt76u_free_rx(dev);
-	mt76u_free_tx(dev);
-}
-EXPORT_SYMBOL_GPL(mt76u_queues_deinit);
-
-int mt76u_alloc_queues(struct mt76_dev *dev)
-{
-	int err;
-
-	err = mt76u_alloc_rx_queue(dev, MT_RXQ_MAIN);
-	if (err < 0)
-		return err;
-
-	return mt76u_alloc_tx(dev);
-}
-EXPORT_SYMBOL_GPL(mt76u_alloc_queues);
-
-static const struct mt76_queue_ops usb_queue_ops = {
-	.tx_queue_skb = mt76u_tx_queue_skb,
-	.kick = mt76u_tx_kick,
-};
-
-int __mt76u_init(struct mt76_dev *dev, struct usb_interface *intf,
-		 struct mt76_bus_ops *ops)
-{
-	struct usb_device *udev = interface_to_usbdev(intf);
-	struct mt76_usb *usb = &dev->usb;
-	int err;
-
-	INIT_WORK(&usb->stat_work, mt76u_tx_status_data);
-
-	usb->data_len = usb_maxpacket(udev, usb_sndctrlpipe(udev, 0), 1);
-	if (usb->data_len < 32)
-		usb->data_len = 32;
-
-	usb->data = devm_kmalloc(dev->dev, usb->data_len, GFP_KERNEL);
-	if (!usb->data)
-		return -ENOMEM;
-
-	mutex_init(&usb->usb_ctrl_mtx);
-	dev->bus = ops;
-	dev->queue_ops = &usb_queue_ops;
-
-	dev_set_drvdata(&udev->dev, dev);
-
-	usb->sg_en = mt76u_check_sg(dev);
-
-	err = mt76u_set_endpoints(intf, usb);
-	if (err < 0)
-		return err;
-
-	err = mt76_worker_setup(dev->hw, &usb->rx_worker, mt76u_rx_worker,
-				"usb-rx");
-	if (err)
-		return err;
-
-	err = mt76_worker_setup(dev->hw, &usb->status_worker,
-				mt76u_status_worker, "usb-status");
-	if (err)
-		return err;
-
-	sched_set_fifo_low(usb->rx_worker.task);
-	sched_set_fifo_low(usb->status_worker.task);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(__mt76u_init);
-
-int mt76u_init(struct mt76_dev *dev, struct usb_interface *intf)
-{
-	static struct mt76_bus_ops bus_ops = {
-		.rr = mt76u_rr,
-		.wr = mt76u_wr,
-		.rmw = mt76u_rmw,
-		.read_copy = mt76u_read_copy,
-		.write_copy = mt76u_copy,
-		.wr_rp = mt76u_wr_rp,
-		.rd_rp = mt76u_rd_rp,
-		.type = MT76_BUS_USB,
-	};
-
-	return __mt76u_init(dev, intf, &bus_ops);
-}
-EXPORT_SYMBOL_GPL(mt76u_init);
-
-MODULE_AUTHOR("Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>");
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/usb_trace.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/usb_trace.c
deleted file mode 100644
index 9942bdd..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/usb_trace.c
+++ /dev/null
@@ -1,12 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#include <linux/module.h>
-
-#ifndef __CHECKER__
-#define CREATE_TRACE_POINTS
-#include "usb_trace.h"
-
-#endif
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/usb_trace.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/usb_trace.h
deleted file mode 100644
index f5ab321..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/usb_trace.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/*
- * Copyright (C) 2018 Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
- */
-
-#if !defined(__MT76_USB_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
-#define __MT76_USB_TRACE_H
-
-#include <linux/tracepoint.h>
-#include "mt76.h"
-
-#undef TRACE_SYSTEM
-#define TRACE_SYSTEM mt76_usb
-
-#define MAXNAME		32
-#define DEV_ENTRY	__array(char, wiphy_name, 32)
-#define DEV_ASSIGN	strlcpy(__entry->wiphy_name,	\
-				wiphy_name(dev->hw->wiphy), MAXNAME)
-#define DEV_PR_FMT	"%s "
-#define DEV_PR_ARG	__entry->wiphy_name
-
-#define REG_ENTRY	__field(u32, reg) __field(u32, val)
-#define REG_ASSIGN	__entry->reg = reg; __entry->val = val
-#define REG_PR_FMT	"reg:0x%04x=0x%08x"
-#define REG_PR_ARG	__entry->reg, __entry->val
-
-DECLARE_EVENT_CLASS(dev_reg_evt,
-	TP_PROTO(struct mt76_dev *dev, u32 reg, u32 val),
-	TP_ARGS(dev, reg, val),
-	TP_STRUCT__entry(
-		DEV_ENTRY
-		REG_ENTRY
-	),
-	TP_fast_assign(
-		DEV_ASSIGN;
-		REG_ASSIGN;
-	),
-	TP_printk(
-		DEV_PR_FMT REG_PR_FMT,
-		DEV_PR_ARG, REG_PR_ARG
-	)
-);
-
-DEFINE_EVENT(dev_reg_evt, usb_reg_rr,
-	TP_PROTO(struct mt76_dev *dev, u32 reg, u32 val),
-	TP_ARGS(dev, reg, val)
-);
-
-DEFINE_EVENT(dev_reg_evt, usb_reg_wr,
-	TP_PROTO(struct mt76_dev *dev, u32 reg, u32 val),
-	TP_ARGS(dev, reg, val)
-);
-
-DECLARE_EVENT_CLASS(urb_transfer,
-	TP_PROTO(struct mt76_dev *dev, struct urb *u),
-	TP_ARGS(dev, u),
-	TP_STRUCT__entry(
-		DEV_ENTRY __field(unsigned int, pipe) __field(u32, len)
-	),
-	TP_fast_assign(
-		DEV_ASSIGN;
-		__entry->pipe = u->pipe;
-		__entry->len = u->transfer_buffer_length;
-	),
-	TP_printk(DEV_PR_FMT "p:%08x len:%u",
-		  DEV_PR_ARG, __entry->pipe, __entry->len)
-);
-
-DEFINE_EVENT(urb_transfer, submit_urb,
-	TP_PROTO(struct mt76_dev *dev, struct urb *u),
-	TP_ARGS(dev, u)
-);
-
-DEFINE_EVENT(urb_transfer, rx_urb,
-	TP_PROTO(struct mt76_dev *dev, struct urb *u),
-	TP_ARGS(dev, u)
-);
-
-#endif
-
-#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
-#undef TRACE_INCLUDE_FILE
-#define TRACE_INCLUDE_FILE usb_trace
-
-#include <trace/define_trace.h>
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/util.c b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/util.c
deleted file mode 100644
index 5819644..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/util.c
+++ /dev/null
@@ -1,141 +0,0 @@
-// SPDX-License-Identifier: ISC
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- */
-
-#include <linux/module.h>
-#include "mt76.h"
-
-bool __mt76_poll(struct mt76_dev *dev, u32 offset, u32 mask, u32 val,
-		 int timeout)
-{
-	u32 cur;
-
-	timeout /= 10;
-	do {
-		cur = __mt76_rr(dev, offset) & mask;
-		if (cur == val)
-			return true;
-
-		udelay(10);
-	} while (timeout-- > 0);
-
-	return false;
-}
-EXPORT_SYMBOL_GPL(__mt76_poll);
-
-bool __mt76_poll_msec(struct mt76_dev *dev, u32 offset, u32 mask, u32 val,
-		      int timeout)
-{
-	u32 cur;
-
-	timeout /= 10;
-	do {
-		cur = __mt76_rr(dev, offset) & mask;
-		if (cur == val)
-			return true;
-
-		usleep_range(10000, 20000);
-	} while (timeout-- > 0);
-
-	return false;
-}
-EXPORT_SYMBOL_GPL(__mt76_poll_msec);
-
-int mt76_wcid_alloc(u32 *mask, int size)
-{
-	int i, idx = 0, cur;
-
-	for (i = 0; i < DIV_ROUND_UP(size, 32); i++) {
-		idx = ffs(~mask[i]);
-		if (!idx)
-			continue;
-
-		idx--;
-		cur = i * 32 + idx;
-		if (cur >= size)
-			break;
-
-		mask[i] |= BIT(idx);
-		return cur;
-	}
-
-	return -1;
-}
-EXPORT_SYMBOL_GPL(mt76_wcid_alloc);
-
-int mt76_get_min_avg_rssi(struct mt76_dev *dev, bool ext_phy)
-{
-	struct mt76_wcid *wcid;
-	int i, j, min_rssi = 0;
-	s8 cur_rssi;
-
-	local_bh_disable();
-	rcu_read_lock();
-
-	for (i = 0; i < ARRAY_SIZE(dev->wcid_mask); i++) {
-		u32 mask = dev->wcid_mask[i];
-		u32 phy_mask = dev->wcid_phy_mask[i];
-
-		if (!mask)
-			continue;
-
-		for (j = i * 32; mask; j++, mask >>= 1, phy_mask >>= 1) {
-			if (!(mask & 1))
-				continue;
-
-			if (!!(phy_mask & 1) != ext_phy)
-				continue;
-
-			wcid = rcu_dereference(dev->wcid[j]);
-			if (!wcid)
-				continue;
-
-			spin_lock(&dev->rx_lock);
-			if (wcid->inactive_count++ < 5)
-				cur_rssi = -ewma_signal_read(&wcid->rssi);
-			else
-				cur_rssi = 0;
-			spin_unlock(&dev->rx_lock);
-
-			if (cur_rssi < min_rssi)
-				min_rssi = cur_rssi;
-		}
-	}
-
-	rcu_read_unlock();
-	local_bh_enable();
-
-	return min_rssi;
-}
-EXPORT_SYMBOL_GPL(mt76_get_min_avg_rssi);
-
-int __mt76_worker_fn(void *ptr)
-{
-	struct mt76_worker *w = ptr;
-
-	while (!kthread_should_stop()) {
-		set_current_state(TASK_INTERRUPTIBLE);
-
-		if (kthread_should_park()) {
-			kthread_parkme();
-			continue;
-		}
-
-		if (!test_and_clear_bit(MT76_WORKER_SCHEDULED, &w->state)) {
-			schedule();
-			continue;
-		}
-
-		set_bit(MT76_WORKER_RUNNING, &w->state);
-		set_current_state(TASK_RUNNING);
-		w->fn(w);
-		cond_resched();
-		clear_bit(MT76_WORKER_RUNNING, &w->state);
-	}
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(__mt76_worker_fn);
-
-MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/util.h b/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/util.h
deleted file mode 100644
index 260965d..0000000
--- a/autobuild_mac80211_release/mt7988_mt7996_mac80211/package/kernel/mt76/src/util.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
- * Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
- */
-
-#ifndef __MT76_UTIL_H
-#define __MT76_UTIL_H
-
-#include <linux/skbuff.h>
-#include <linux/bitops.h>
-#include <linux/bitfield.h>
-#include <net/mac80211.h>
-
-struct mt76_worker
-{
-	struct task_struct *task;
-	void (*fn)(struct mt76_worker *);
-	unsigned long state;
-};
-
-enum {
-	MT76_WORKER_SCHEDULED,
-	MT76_WORKER_RUNNING,
-};
-
-#define MT76_INCR(_var, _size) \
-	(_var = (((_var) + 1) % (_size)))
-
-int mt76_wcid_alloc(u32 *mask, int size);
-
-static inline void
-mt76_wcid_mask_set(u32 *mask, int idx)
-{
-	mask[idx / 32] |= BIT(idx % 32);
-}
-
-static inline void
-mt76_wcid_mask_clear(u32 *mask, int idx)
-{
-	mask[idx / 32] &= ~BIT(idx % 32);
-}
-
-static inline void
-mt76_skb_set_moredata(struct sk_buff *skb, bool enable)
-{
-	struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
-
-	if (enable)
-		hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_MOREDATA);
-	else
-		hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_MOREDATA);
-}
-
-int __mt76_worker_fn(void *ptr);
-
-static inline int
-mt76_worker_setup(struct ieee80211_hw *hw, struct mt76_worker *w,
-		  void (*fn)(struct mt76_worker *),
-		  const char *name)
-{
-	const char *dev_name = wiphy_name(hw->wiphy);
-	int ret;
-
-	if (fn)
-		w->fn = fn;
-	w->task = kthread_run(__mt76_worker_fn, w,
-			      "mt76-%s %s", name, dev_name);
-
-	if (IS_ERR(w->task)) {
-		ret = PTR_ERR(w->task);
-		w->task = NULL;
-		return ret;
-	}
-
-	return 0;
-}
-
-static inline void mt76_worker_schedule(struct mt76_worker *w)
-{
-	if (!w->task)
-		return;
-
-	if (!test_and_set_bit(MT76_WORKER_SCHEDULED, &w->state) &&
-	    !test_bit(MT76_WORKER_RUNNING, &w->state))
-		wake_up_process(w->task);
-}
-
-static inline void mt76_worker_disable(struct mt76_worker *w)
-{
-	if (!w->task)
-		return;
-
-	kthread_park(w->task);
-	WRITE_ONCE(w->state, 0);
-}
-
-static inline void mt76_worker_enable(struct mt76_worker *w)
-{
-	if (!w->task)
-		return;
-
-	kthread_unpark(w->task);
-	mt76_worker_schedule(w);
-}
-
-static inline void mt76_worker_teardown(struct mt76_worker *w)
-{
-	if (!w->task)
-		return;
-
-	kthread_stop(w->task);
-	w->task = NULL;
-}
-
-#endif
diff --git a/autobuild_mac80211_release/package/kernel/mt76/patches/4002-mt76-revert-some-structs-of-wireless-stack.patch b/autobuild_mac80211_release/package/kernel/mt76/patches/4002-mt76-revert-for-backports-5.15-wireless-stack.patch
similarity index 85%
rename from autobuild_mac80211_release/package/kernel/mt76/patches/4002-mt76-revert-some-structs-of-wireless-stack.patch
rename to autobuild_mac80211_release/package/kernel/mt76/patches/4002-mt76-revert-for-backports-5.15-wireless-stack.patch
index cce072c..0a0ede2 100644
--- a/autobuild_mac80211_release/package/kernel/mt76/patches/4002-mt76-revert-some-structs-of-wireless-stack.patch
+++ b/autobuild_mac80211_release/package/kernel/mt76/patches/4002-mt76-revert-for-backports-5.15-wireless-stack.patch
@@ -1,29 +1,12 @@
-From f9c04f3a99e251532db5680d6dc2d2d44f5e831b Mon Sep 17 00:00:00 2001
+From a4a4b918aa6c2895840226fc4816c265c6461131 Mon Sep 17 00:00:00 2001
 From: Shayne Chen <shayne.chen@mediatek.com>
-Date: Tue, 13 Dec 2022 10:53:12 +0800
-Subject: [PATCH 4002/4002] mt76: revert some structs of wireless stack
+Date: Mon, 12 Dec 2022 18:17:12 +0800
+Subject: [PATCH 4002/4002] mt76: revert for backports-5.15 wireless stack
 
 Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
----
- debugfs.c         |   2 +
- dma.c             |   2 +-
- mac80211.c        |   4 +-
- mt7615/main.c     |   6 +-
- mt7615/mcu.c      |   8 +--
- mt76_connac_mcu.c | 108 +++++++++++++++---------------
- mt76x02_mac.c     |   6 +-
- mt7915/debugfs.c  |   4 +-
- mt7915/dma.c      |   4 +-
- mt7915/init.c     |   3 +-
- mt7915/mac.c      |   2 +-
- mt7915/main.c     |  10 +--
- mt7915/mcu.c      | 166 +++++++++++++++++++++++-----------------------
- mt7915/testmode.c |   8 +--
- tx.c              |  11 +--
- 15 files changed, 168 insertions(+), 176 deletions(-)
 
 diff --git a/debugfs.c b/debugfs.c
-index 79064a4d..4a8e1864 100644
+index 79064a4..4a8e186 100644
 --- a/debugfs.c
 +++ b/debugfs.c
 @@ -33,8 +33,10 @@ mt76_napi_threaded_set(void *data, u64 val)
@@ -38,7 +21,7 @@
  	return 0;
  }
 diff --git a/dma.c b/dma.c
-index 0914266a..21e88a2d 100644
+index 0914266..21e88a2 100644
 --- a/dma.c
 +++ b/dma.c
 @@ -939,7 +939,7 @@ mt76_dma_init(struct mt76_dev *dev,
@@ -50,8 +33,29 @@
  		mt76_dma_rx_fill(dev, &dev->q_rx[i]);
  		napi_enable(&dev->napi[i]);
  	}
+diff --git a/eeprom.c b/eeprom.c
+index aac70ef..bb9265c 100644
+--- a/eeprom.c
++++ b/eeprom.c
+@@ -126,9 +126,15 @@ void
+ mt76_eeprom_override(struct mt76_phy *phy)
+ {
+ 	struct mt76_dev *dev = phy->dev;
++#ifdef CONFIG_OF
+ 	struct device_node *np = dev->dev->of_node;
++	const u8 *mac = NULL;
+ 
+-	of_get_mac_address(np, phy->macaddr);
++	if (np)
++		mac = of_get_mac_address(np);
++	if (!IS_ERR_OR_NULL(mac))
++		ether_addr_copy(phy->macaddr, mac);
++#endif
+ 
+ 	if (!is_valid_ether_addr(phy->macaddr)) {
+ 		eth_random_addr(phy->macaddr);
 diff --git a/mac80211.c b/mac80211.c
-index 15d300a9..be4a1408 100644
+index 15d300a..be4a140 100644
 --- a/mac80211.c
 +++ b/mac80211.c
 @@ -1511,7 +1511,7 @@ EXPORT_SYMBOL_GPL(mt76_get_sar_power);
@@ -73,7 +77,7 @@
  
  	dev->csa_complete |= ieee80211_beacon_cntdwn_is_complete(vif);
 diff --git a/mt7615/main.c b/mt7615/main.c
-index ab4c1b44..8fb5b256 100644
+index ab4c1b4..8fb5b25 100644
 --- a/mt7615/main.c
 +++ b/mt7615/main.c
 @@ -474,7 +474,7 @@ static int mt7615_config(struct ieee80211_hw *hw, u32 changed)
@@ -104,10 +108,10 @@
  	mt7615_mutex_release(dev);
  }
 diff --git a/mt7615/mcu.c b/mt7615/mcu.c
-index e917d025..b2e1f388 100644
+index 83f3030..81579a1 100644
 --- a/mt7615/mcu.c
 +++ b/mt7615/mcu.c
-@@ -353,7 +353,7 @@ out:
+@@ -352,7 +352,7 @@ out:
  static void
  mt7615_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
  {
@@ -116,7 +120,7 @@
  		ieee80211_csa_finish(vif);
  }
  
-@@ -699,7 +699,7 @@ mt7615_mcu_add_beacon_offload(struct mt7615_dev *dev,
+@@ -698,7 +698,7 @@ mt7615_mcu_add_beacon_offload(struct mt7615_dev *dev,
  	if (!enable)
  		goto out;
  
@@ -125,7 +129,7 @@
  	if (!skb)
  		return -EINVAL;
  
-@@ -1074,7 +1074,7 @@ mt7615_mcu_uni_add_beacon_offload(struct mt7615_dev *dev,
+@@ -1073,7 +1073,7 @@ mt7615_mcu_uni_add_beacon_offload(struct mt7615_dev *dev,
  	if (!enable)
  		goto out;
  
@@ -134,7 +138,7 @@
  	if (!skb)
  		return -EINVAL;
  
-@@ -2526,7 +2526,7 @@ int mt7615_mcu_set_bss_pm(struct mt7615_dev *dev, struct ieee80211_vif *vif,
+@@ -2525,7 +2525,7 @@ int mt7615_mcu_set_bss_pm(struct mt7615_dev *dev, struct ieee80211_vif *vif,
  		u8 pad;
  	} req = {
  		.bss_idx = mvif->mt76.idx,
@@ -144,10 +148,10 @@
  		.bcn_interval = cpu_to_le16(vif->bss_conf.beacon_int),
  	};
 diff --git a/mt76_connac_mcu.c b/mt76_connac_mcu.c
-index 56493774..99851dc0 100644
+index 291a7c1..d5254f9 100644
 --- a/mt76_connac_mcu.c
 +++ b/mt76_connac_mcu.c
-@@ -197,7 +197,7 @@ int mt76_connac_mcu_set_vif_ps(struct mt76_dev *dev, struct ieee80211_vif *vif)
+@@ -196,7 +196,7 @@ int mt76_connac_mcu_set_vif_ps(struct mt76_dev *dev, struct ieee80211_vif *vif)
  			      */
  	} req = {
  		.bss_idx = mvif->idx,
@@ -156,7 +160,7 @@
  	};
  
  	if (vif->type != NL80211_IFTYPE_STATION)
-@@ -409,7 +409,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
+@@ -408,7 +408,7 @@ void mt76_connac_mcu_sta_basic_tlv(struct sk_buff *skb,
  		else
  			conn_type = CONNECTION_INFRA_AP;
  		basic->conn_type = cpu_to_le32(conn_type);
@@ -165,7 +169,7 @@
  		break;
  	case NL80211_IFTYPE_ADHOC:
  		basic->conn_type = cpu_to_le32(CONNECTION_IBSS_ADHOC);
-@@ -553,7 +553,7 @@ void mt76_connac_mcu_wtbl_generic_tlv(struct mt76_dev *dev,
+@@ -552,7 +552,7 @@ void mt76_connac_mcu_wtbl_generic_tlv(struct mt76_dev *dev,
  
  	if (sta) {
  		if (vif->type == NL80211_IFTYPE_STATION)
@@ -174,7 +178,7 @@
  		else
  			generic->partial_aid = cpu_to_le16(sta->aid);
  		memcpy(generic->peer_addr, sta->addr, ETH_ALEN);
-@@ -602,14 +602,14 @@ mt76_connac_mcu_sta_amsdu_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
+@@ -601,14 +601,14 @@ mt76_connac_mcu_sta_amsdu_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
  	    vif->type != NL80211_IFTYPE_STATION)
  		return;
  
@@ -191,7 +195,7 @@
  			       IEEE80211_MAX_MPDU_LEN_VHT_7991;
  
  	wcid->amsdu = true;
-@@ -620,7 +620,7 @@ mt76_connac_mcu_sta_amsdu_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
+@@ -619,7 +619,7 @@ mt76_connac_mcu_sta_amsdu_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
  static void
  mt76_connac_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
  {
@@ -200,7 +204,7 @@
  	struct ieee80211_he_cap_elem *elem = &he_cap->he_cap_elem;
  	struct sta_rec_he *he;
  	struct tlv *tlv;
-@@ -708,7 +708,7 @@ mt76_connac_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
+@@ -707,7 +707,7 @@ mt76_connac_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
  
  	he->he_cap = cpu_to_le32(cap);
  
@@ -209,7 +213,7 @@
  	case IEEE80211_STA_RX_BW_160:
  		if (elem->phy_cap_info[0] &
  		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
-@@ -753,7 +753,7 @@ mt76_connac_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
+@@ -752,7 +752,7 @@ mt76_connac_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
  static void
  mt76_connac_mcu_sta_he_tlv_v2(struct sk_buff *skb, struct ieee80211_sta *sta)
  {
@@ -218,7 +222,7 @@
  	struct ieee80211_he_cap_elem *elem = &he_cap->he_cap_elem;
  	struct sta_rec_he_v2 *he;
  	struct tlv *tlv;
-@@ -764,7 +764,7 @@ mt76_connac_mcu_sta_he_tlv_v2(struct sk_buff *skb, struct ieee80211_sta *sta)
+@@ -763,7 +763,7 @@ mt76_connac_mcu_sta_he_tlv_v2(struct sk_buff *skb, struct ieee80211_sta *sta)
  	memcpy(he->he_phy_cap, elem->phy_cap_info, sizeof(he->he_phy_cap));
  	memcpy(he->he_mac_cap, elem->mac_cap_info, sizeof(he->he_mac_cap));
  
@@ -227,7 +231,7 @@
  	case IEEE80211_STA_RX_BW_160:
  		if (elem->phy_cap_info[0] &
  		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
-@@ -780,7 +780,7 @@ mt76_connac_mcu_sta_he_tlv_v2(struct sk_buff *skb, struct ieee80211_sta *sta)
+@@ -779,7 +779,7 @@ mt76_connac_mcu_sta_he_tlv_v2(struct sk_buff *skb, struct ieee80211_sta *sta)
  		break;
  	}
  
@@ -236,7 +240,7 @@
  }
  
  static u8
-@@ -793,9 +793,9 @@ mt76_connac_get_phy_mode_v2(struct mt76_phy *mphy, struct ieee80211_vif *vif,
+@@ -792,9 +792,9 @@ mt76_connac_get_phy_mode_v2(struct mt76_phy *mphy, struct ieee80211_vif *vif,
  	u8 mode = 0;
  
  	if (sta) {
@@ -249,7 +253,7 @@
  	} else {
  		struct ieee80211_supported_band *sband;
  
-@@ -844,25 +844,25 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
+@@ -843,25 +843,25 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
  	u16 supp_rates;
  
  	/* starec ht */
@@ -281,7 +285,7 @@
  	}
  
  	/* starec uapsd */
-@@ -871,11 +871,11 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
+@@ -870,11 +870,11 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
  	if (!is_mt7921(dev))
  		return;
  
@@ -295,7 +299,7 @@
  		mt76_connac_mcu_sta_he_tlv(skb, sta);
  		mt76_connac_mcu_sta_he_tlv_v2(skb, sta);
  		if (band == NL80211_BAND_6GHZ &&
-@@ -885,7 +885,7 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
+@@ -884,7 +884,7 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
  			tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HE_6G,
  						      sizeof(*he_6g_capa));
  			he_6g_capa = (struct sta_rec_he_6g_capa *)tlv;
@@ -304,7 +308,7 @@
  		}
  	}
  
-@@ -895,14 +895,14 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
+@@ -894,14 +894,14 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
  	phy->basic_rate = cpu_to_le16((u16)vif->bss_conf.basic_rates);
  	phy->rcpi = rcpi;
  	phy->ampdu = FIELD_PREP(IEEE80211_HT_AMPDU_PARM_FACTOR,
@@ -322,7 +326,7 @@
  	if (band == NL80211_BAND_2GHZ)
  		supp_rates = FIELD_PREP(RA_LEGACY_OFDM, supp_rates >> 4) |
  			     FIELD_PREP(RA_LEGACY_CCK, supp_rates & 0xf);
-@@ -911,18 +911,18 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
+@@ -910,18 +910,18 @@ void mt76_connac_mcu_sta_tlv(struct mt76_phy *mphy, struct sk_buff *skb,
  
  	ra_info->legacy = cpu_to_le16(supp_rates);
  
@@ -346,7 +350,7 @@
  			IEEE80211_OPMODE_NOTIF_RX_NSS_SHIFT;
  	}
  }
-@@ -938,7 +938,7 @@ void mt76_connac_mcu_wtbl_smps_tlv(struct sk_buff *skb,
+@@ -937,7 +937,7 @@ void mt76_connac_mcu_wtbl_smps_tlv(struct sk_buff *skb,
  	tlv = mt76_connac_mcu_add_nested_tlv(skb, WTBL_SMPS, sizeof(*smps),
  					     wtbl_tlv, sta_wtbl);
  	smps = (struct wtbl_smps *)tlv;
@@ -355,7 +359,7 @@
  }
  EXPORT_SYMBOL_GPL(mt76_connac_mcu_wtbl_smps_tlv);
  
-@@ -950,27 +950,27 @@ void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
+@@ -949,27 +949,27 @@ void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
  	struct tlv *tlv;
  	u32 flags = 0;
  
@@ -391,7 +395,7 @@
  		struct wtbl_vht *vht;
  		u8 af;
  
-@@ -979,18 +979,18 @@ void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
+@@ -978,18 +978,18 @@ void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
  						     sta_wtbl);
  		vht = (struct wtbl_vht *)tlv;
  		vht->ldpc = vht_ldpc &&
@@ -413,7 +417,7 @@
  		/* sgi */
  		u32 msk = MT_WTBL_W5_SHORT_GI_20 | MT_WTBL_W5_SHORT_GI_40 |
  			  MT_WTBL_W5_SHORT_GI_80 | MT_WTBL_W5_SHORT_GI_160;
-@@ -1000,15 +1000,15 @@ void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
+@@ -999,15 +999,15 @@ void mt76_connac_mcu_wtbl_ht_tlv(struct mt76_dev *dev, struct sk_buff *skb,
  						     sizeof(*raw), wtbl_tlv,
  						     sta_wtbl);
  
@@ -434,7 +438,7 @@
  				flags |= MT_WTBL_W5_SHORT_GI_160;
  		}
  		raw = (struct wtbl_raw *)tlv;
-@@ -1294,9 +1294,9 @@ u8 mt76_connac_get_phy_mode(struct mt76_phy *phy, struct ieee80211_vif *vif,
+@@ -1293,9 +1293,9 @@ u8 mt76_connac_get_phy_mode(struct mt76_phy *phy, struct ieee80211_vif *vif,
  		return 0x38;
  
  	if (sta) {
@@ -447,7 +451,7 @@
  	} else {
  		struct ieee80211_supported_band *sband;
  
-@@ -1616,7 +1616,6 @@ int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
+@@ -1615,7 +1615,6 @@ int mt76_connac_mcu_hw_scan(struct mt76_phy *phy, struct ieee80211_vif *vif,
  	for (i = 0; i < sreq->n_ssids; i++) {
  		if (!sreq->ssids[i].ssid_len)
  			continue;
@@ -455,7 +459,7 @@
  		req->ssids[i].ssid_len = cpu_to_le32(sreq->ssids[i].ssid_len);
  		memcpy(req->ssids[i].ssid, sreq->ssids[i].ssid,
  		       sreq->ssids[i].ssid_len);
-@@ -1749,7 +1748,6 @@ int mt76_connac_mcu_sched_scan_req(struct mt76_phy *phy,
+@@ -1748,7 +1747,6 @@ int mt76_connac_mcu_sched_scan_req(struct mt76_phy *phy,
  		memcpy(req->ssids[i].ssid, ssid->ssid, ssid->ssid_len);
  		req->ssids[i].ssid_len = cpu_to_le32(ssid->ssid_len);
  	}
@@ -463,7 +467,7 @@
  	req->match_num = sreq->n_match_sets;
  	for (i = 0; i < req->match_num; i++) {
  		match = &sreq->match_sets[i];
-@@ -2236,10 +2234,8 @@ int mt76_connac_mcu_update_arp_filter(struct mt76_dev *dev,
+@@ -2235,10 +2233,8 @@ int mt76_connac_mcu_update_arp_filter(struct mt76_dev *dev,
  				      struct mt76_vif *vif,
  				      struct ieee80211_bss_conf *info)
  {
@@ -475,7 +479,7 @@
  			   IEEE80211_BSS_ARP_ADDR_LIST_LEN);
  	struct {
  		struct {
-@@ -2267,7 +2263,7 @@ int mt76_connac_mcu_update_arp_filter(struct mt76_dev *dev,
+@@ -2266,7 +2262,7 @@ int mt76_connac_mcu_update_arp_filter(struct mt76_dev *dev,
  
  	skb_put_data(skb, &req_hdr, sizeof(req_hdr));
  	for (i = 0; i < len; i++)
@@ -485,7 +489,7 @@
  	return mt76_mcu_skb_send_msg(dev, skb, MCU_UNI_CMD(OFFLOAD), true);
  }
 diff --git a/mt76x02_mac.c b/mt76x02_mac.c
-index d3f74473..87ea3db1 100644
+index d3f7447..87ea3db 100644
 --- a/mt76x02_mac.c
 +++ b/mt76x02_mac.c
 @@ -404,7 +404,7 @@ void mt76x02_mac_write_txwi(struct mt76x02_dev *dev, struct mt76x02_txwi *txwi,
@@ -510,7 +514,7 @@
  		if (info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE)
  			ba_size = 0;
 diff --git a/mt7915/debugfs.c b/mt7915/debugfs.c
-index f3b039ff..47c9dfdd 100644
+index f3b039f..47c9dfd 100644
 --- a/mt7915/debugfs.c
 +++ b/mt7915/debugfs.c
 @@ -1840,8 +1840,8 @@ static ssize_t mt7915_sta_fixed_rate_set(struct file *file,
@@ -525,10 +529,10 @@
  	field = RATE_PARAM_FIXED;
  
 diff --git a/mt7915/dma.c b/mt7915/dma.c
-index 36260085..e3d4ebc4 100644
+index 50b7ed5..1dde068 100644
 --- a/mt7915/dma.c
 +++ b/mt7915/dma.c
-@@ -555,8 +555,8 @@ int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2)
+@@ -554,8 +554,8 @@ int mt7915_dma_init(struct mt7915_dev *dev, struct mt7915_phy *phy2)
  	if (ret < 0)
  		return ret;
  
@@ -540,7 +544,7 @@
  
  	mt7915_dma_enable(dev);
 diff --git a/mt7915/init.c b/mt7915/init.c
-index c347509b..e643c0e4 100755
+index c347509..e643c0e 100755
 --- a/mt7915/init.c
 +++ b/mt7915/init.c
 @@ -1148,8 +1148,7 @@ mt7915_init_he_caps(struct mt7915_phy *phy, enum nl80211_band band,
@@ -554,7 +558,7 @@
  
  		if (band == NL80211_BAND_6GHZ) {
 diff --git a/mt7915/mac.c b/mt7915/mac.c
-index d5df73db..3bbe757c 100644
+index d5df73d..3bbe757 100644
 --- a/mt7915/mac.c
 +++ b/mt7915/mac.c
 @@ -913,7 +913,7 @@ mt7915_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
@@ -567,7 +571,7 @@
  
  	tid = le32_get_bits(txwi[1], MT_TXD1_TID);
 diff --git a/mt7915/main.c b/mt7915/main.c
-index dcf1583d..5d678df8 100644
+index dcf1583..5d678df 100644
 --- a/mt7915/main.c
 +++ b/mt7915/main.c
 @@ -503,7 +503,7 @@ static int mt7915_config(struct ieee80211_hw *hw, u32 changed)
@@ -611,10 +615,10 @@
  
  	mutex_lock(&dev->mt76.mutex);
 diff --git a/mt7915/mcu.c b/mt7915/mcu.c
-index e08a96d9..3860051f 100644
+index 737a714..5bd1881 100644
 --- a/mt7915/mcu.c
 +++ b/mt7915/mcu.c
-@@ -64,7 +64,7 @@ mt7915_mcu_set_sta_he_mcs(struct ieee80211_sta *sta, __le16 *he_mcs,
+@@ -63,7 +63,7 @@ mt7915_mcu_set_sta_he_mcs(struct ieee80211_sta *sta, __le16 *he_mcs,
  	struct mt7915_dev *dev = msta->vif->phy->dev;
  	enum nl80211_band band = msta->vif->phy->mt76->chandef.chan->band;
  	const u16 *mask = msta->vif->bitrate_mask.control[band].he_mcs;
@@ -623,7 +627,7 @@
  
  	for (nss = 0; nss < max_nss; nss++) {
  		int mcs;
-@@ -104,7 +104,7 @@ mt7915_mcu_set_sta_he_mcs(struct ieee80211_sta *sta, __le16 *he_mcs,
+@@ -103,7 +103,7 @@ mt7915_mcu_set_sta_he_mcs(struct ieee80211_sta *sta, __le16 *he_mcs,
  
  		/* only support 2ss on 160MHz for mt7915 */
  		if (is_mt7915(&dev->mt76) && nss > 1 &&
@@ -632,7 +636,7 @@
  			break;
  	}
  
-@@ -117,8 +117,8 @@ mt7915_mcu_set_sta_vht_mcs(struct ieee80211_sta *sta, __le16 *vht_mcs,
+@@ -116,8 +116,8 @@ mt7915_mcu_set_sta_vht_mcs(struct ieee80211_sta *sta, __le16 *vht_mcs,
  {
  	struct mt7915_sta *msta = (struct mt7915_sta *)sta->drv_priv;
  	struct mt7915_dev *dev = msta->vif->phy->dev;
@@ -643,7 +647,7 @@
  	u16 mcs;
  
  	for (nss = 0; nss < max_nss; nss++, mcs_map >>= 2) {
-@@ -140,7 +140,7 @@ mt7915_mcu_set_sta_vht_mcs(struct ieee80211_sta *sta, __le16 *vht_mcs,
+@@ -139,7 +139,7 @@ mt7915_mcu_set_sta_vht_mcs(struct ieee80211_sta *sta, __le16 *vht_mcs,
  
  		/* only support 2ss on 160MHz for mt7915 */
  		if (is_mt7915(&dev->mt76) && nss > 1 &&
@@ -652,7 +656,7 @@
  			break;
  	}
  }
-@@ -149,10 +149,10 @@ static void
+@@ -148,10 +148,10 @@ static void
  mt7915_mcu_set_sta_ht_mcs(struct ieee80211_sta *sta, u8 *ht_mcs,
  			  const u8 *mask)
  {
@@ -665,7 +669,7 @@
  }
  
  static int
-@@ -230,7 +230,7 @@ int mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
+@@ -229,7 +229,7 @@ int mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
  static void
  mt7915_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
  {
@@ -674,7 +678,7 @@
  		ieee80211_csa_finish(vif);
  }
  
-@@ -331,7 +331,7 @@ mt7915_mcu_rx_log_message(struct mt7915_dev *dev, struct sk_buff *skb)
+@@ -330,7 +330,7 @@ mt7915_mcu_rx_log_message(struct mt7915_dev *dev, struct sk_buff *skb)
  static void
  mt7915_mcu_cca_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
  {
@@ -683,7 +687,7 @@
  		return;
  
  	ieee80211_color_change_finish(vif);
-@@ -731,13 +731,13 @@ mt7915_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
+@@ -730,13 +730,13 @@ mt7915_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
  		      struct ieee80211_vif *vif)
  {
  	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
@@ -699,7 +703,7 @@
  		return;
  
  	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HE, sizeof(*he));
-@@ -823,8 +823,8 @@ mt7915_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
+@@ -822,8 +822,8 @@ mt7915_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
  
  	he->he_cap = cpu_to_le32(cap);
  
@@ -710,7 +714,7 @@
  	case IEEE80211_STA_RX_BW_160:
  		if (elem->phy_cap_info[0] &
  		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
-@@ -874,7 +874,7 @@ mt7915_mcu_sta_muru_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
+@@ -873,7 +873,7 @@ mt7915_mcu_sta_muru_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
  			struct ieee80211_sta *sta, struct ieee80211_vif *vif)
  {
  	struct mt7915_vif *mvif = (struct mt7915_vif *)vif->drv_priv;
@@ -719,7 +723,7 @@
  	struct sta_rec_muru *muru;
  	struct tlv *tlv;
  
-@@ -898,11 +898,11 @@ mt7915_mcu_sta_muru_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
+@@ -897,11 +897,11 @@ mt7915_mcu_sta_muru_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
  	muru->cfg.ofdma_dl_en = !!(dev->dbg.muru_onoff & OFDMA_DL);
  	muru->cfg.ofdma_ul_en = !!(dev->dbg.muru_onoff & OFDMA_UL);
  
@@ -734,7 +738,7 @@
  		return;
  
  	muru->mimo_dl.partial_bw_dl_mimo =
-@@ -936,13 +936,13 @@ mt7915_mcu_sta_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
+@@ -935,13 +935,13 @@ mt7915_mcu_sta_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
  	struct sta_rec_ht *ht;
  	struct tlv *tlv;
  
@@ -750,7 +754,7 @@
  }
  
  static void
-@@ -951,15 +951,15 @@ mt7915_mcu_sta_vht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
+@@ -950,15 +950,15 @@ mt7915_mcu_sta_vht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
  	struct sta_rec_vht *vht;
  	struct tlv *tlv;
  
@@ -770,7 +774,7 @@
  }
  
  static void
-@@ -974,7 +974,7 @@ mt7915_mcu_sta_amsdu_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
+@@ -973,7 +973,7 @@ mt7915_mcu_sta_amsdu_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
  	    vif->type != NL80211_IFTYPE_AP)
  		return;
  
@@ -779,7 +783,7 @@
  	    return;
  
  	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_HW_AMSDU, sizeof(*amsdu));
-@@ -983,7 +983,7 @@ mt7915_mcu_sta_amsdu_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
+@@ -982,7 +982,7 @@ mt7915_mcu_sta_amsdu_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
  	amsdu->amsdu_en = true;
  	msta->wcid.amsdu = true;
  
@@ -788,7 +792,7 @@
  	case IEEE80211_MAX_MPDU_LEN_VHT_11454:
  		if (!is_mt7915(&dev->mt76)) {
  			amsdu->max_mpdu_size =
-@@ -1046,8 +1046,8 @@ mt7915_is_ebf_supported(struct mt7915_phy *phy, struct ieee80211_vif *vif,
+@@ -1045,8 +1045,8 @@ mt7915_is_ebf_supported(struct mt7915_phy *phy, struct ieee80211_vif *vif,
  	if (!bfee && tx_ant < 2)
  		return false;
  
@@ -799,7 +803,7 @@
  
  		if (bfee)
  			return mvif->cap.he_su_ebfee &&
-@@ -1057,8 +1057,8 @@ mt7915_is_ebf_supported(struct mt7915_phy *phy, struct ieee80211_vif *vif,
+@@ -1056,8 +1056,8 @@ mt7915_is_ebf_supported(struct mt7915_phy *phy, struct ieee80211_vif *vif,
  			       HE_PHY(CAP4_SU_BEAMFORMEE, pe->phy_cap_info[4]);
  	}
  
@@ -810,7 +814,7 @@
  
  		if (bfee)
  			return mvif->cap.vht_su_ebfee &&
-@@ -1084,7 +1084,7 @@ static void
+@@ -1083,7 +1083,7 @@ static void
  mt7915_mcu_sta_bfer_ht(struct ieee80211_sta *sta, struct mt7915_phy *phy,
  		       struct sta_rec_bf *bf)
  {
@@ -819,7 +823,7 @@
  	u8 n = 0;
  
  	bf->tx_mode = MT_PHY_TYPE_HT;
-@@ -1109,7 +1109,7 @@ static void
+@@ -1108,7 +1108,7 @@ static void
  mt7915_mcu_sta_bfer_vht(struct ieee80211_sta *sta, struct mt7915_phy *phy,
  			struct sta_rec_bf *bf, bool explicit)
  {
@@ -828,7 +832,7 @@
  	struct ieee80211_sta_vht_cap *vc = &phy->mt76->sband_5g.sband.vht_cap;
  	u16 mcs_map = le16_to_cpu(pc->vht_mcs.rx_mcs_map);
  	u8 nss_mcs = mt7915_mcu_get_sta_nss(mcs_map);
-@@ -1130,14 +1130,14 @@ mt7915_mcu_sta_bfer_vht(struct ieee80211_sta *sta, struct mt7915_phy *phy,
+@@ -1129,14 +1129,14 @@ mt7915_mcu_sta_bfer_vht(struct ieee80211_sta *sta, struct mt7915_phy *phy,
  		bf->ncol = min_t(u8, nss_mcs, bf->nrow);
  		bf->ibf_ncol = bf->ncol;
  
@@ -845,7 +849,7 @@
  			bf->ibf_nrow = 1;
  	}
  }
-@@ -1146,7 +1146,7 @@ static void
+@@ -1145,7 +1145,7 @@ static void
  mt7915_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,
  		       struct mt7915_phy *phy, struct sta_rec_bf *bf)
  {
@@ -854,7 +858,7 @@
  	struct ieee80211_he_cap_elem *pe = &pc->he_cap_elem;
  	const struct ieee80211_sta_he_cap *vc =
  		mt76_connac_get_he_phy_cap(phy->mt76, vif);
-@@ -1171,7 +1171,7 @@ mt7915_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,
+@@ -1170,7 +1170,7 @@ mt7915_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,
  	bf->ncol = min_t(u8, nss_mcs, bf->nrow);
  	bf->ibf_ncol = bf->ncol;
  
@@ -863,7 +867,7 @@
  		return;
  
  	/* go over for 160MHz and 80p80 */
-@@ -1219,7 +1219,7 @@ mt7915_mcu_sta_bfer_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
+@@ -1218,7 +1218,7 @@ mt7915_mcu_sta_bfer_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
  	};
  	bool ebf;
  
@@ -872,7 +876,7 @@
  		return;
  
  	ebf = mt7915_is_ebf_supported(phy, vif, sta, false);
-@@ -1233,21 +1233,21 @@ mt7915_mcu_sta_bfer_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
+@@ -1232,21 +1232,21 @@ mt7915_mcu_sta_bfer_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
  	 * vht: support eBF and iBF
  	 * ht: iBF only, since mac80211 lacks of eBF support
  	 */
@@ -900,7 +904,7 @@
  		bf->ibf_timeout = 0x48;
  	else
  		bf->ibf_timeout = 0x18;
-@@ -1257,7 +1257,7 @@ mt7915_mcu_sta_bfer_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
+@@ -1256,7 +1256,7 @@ mt7915_mcu_sta_bfer_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
  	else
  		bf->mem_20m = matrix[bf->nrow][bf->ncol];
  
@@ -909,7 +913,7 @@
  	case IEEE80211_STA_RX_BW_160:
  	case IEEE80211_STA_RX_BW_80:
  		bf->mem_total = bf->mem_20m * 2;
-@@ -1282,7 +1282,7 @@ mt7915_mcu_sta_bfee_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
+@@ -1281,7 +1281,7 @@ mt7915_mcu_sta_bfee_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
  	struct tlv *tlv;
  	u8 nrow = 0;
  
@@ -918,7 +922,7 @@
  		return;
  
  	if (!mt7915_is_ebf_supported(phy, vif, sta, true))
-@@ -1291,13 +1291,13 @@ mt7915_mcu_sta_bfee_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
+@@ -1290,13 +1290,13 @@ mt7915_mcu_sta_bfee_tlv(struct mt7915_dev *dev, struct sk_buff *skb,
  	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_BFEE, sizeof(*bfee));
  	bfee = (struct sta_rec_bfee *)tlv;
  
@@ -936,7 +940,7 @@
  
  		nrow = FIELD_GET(IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK,
  				 pc->cap);
-@@ -1353,7 +1353,7 @@ int mt7915_mcu_set_fixed_rate_ctrl(struct mt7915_dev *dev,
+@@ -1352,7 +1352,7 @@ int mt7915_mcu_set_fixed_rate_ctrl(struct mt7915_dev *dev,
  			ra->phy = *phy;
  		break;
  	case RATE_PARAM_MMPS_UPDATE:
@@ -945,7 +949,7 @@
  		break;
  	case RATE_PARAM_SPE_UPDATE:
  		ra->spe_idx = *(u8 *)data;
-@@ -1428,7 +1428,7 @@ mt7915_mcu_add_rate_ctrl_fixed(struct mt7915_dev *dev,
+@@ -1427,7 +1427,7 @@ mt7915_mcu_add_rate_ctrl_fixed(struct mt7915_dev *dev,
  	do {									\
  		u8 i, gi = mask->control[band]._gi;				\
  		gi = (_he) ? gi : gi == NL80211_TXRATE_FORCE_SGI;		\
@@ -954,7 +958,7 @@
  			phy.sgi |= gi << (i << (_he));				\
  			phy.he_ltf |= mask->control[band].he_ltf << (i << (_he));\
  		}								\
-@@ -1442,11 +1442,11 @@ mt7915_mcu_add_rate_ctrl_fixed(struct mt7915_dev *dev,
+@@ -1441,11 +1441,11 @@ mt7915_mcu_add_rate_ctrl_fixed(struct mt7915_dev *dev,
  		}								\
  	} while (0)
  
@@ -969,7 +973,7 @@
  		__sta_phy_bitrate_mask_check(ht_mcs, gi, 1, 0);
  	} else {
  		nrates = hweight32(mask->control[band].legacy);
-@@ -1480,7 +1480,7 @@ mt7915_mcu_add_rate_ctrl_fixed(struct mt7915_dev *dev,
+@@ -1479,7 +1479,7 @@ mt7915_mcu_add_rate_ctrl_fixed(struct mt7915_dev *dev,
  		 * actual txrate hardware sends out.
  		 */
  		addr = mt7915_mac_wtbl_lmac_addr(dev, msta->wcid.idx, 7);
@@ -978,7 +982,7 @@
  			mt76_rmw_field(dev, addr, GENMASK(31, 24), phy.sgi);
  		else
  			mt76_rmw_field(dev, addr, GENMASK(15, 12), phy.sgi);
-@@ -1513,7 +1513,7 @@ mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev,
+@@ -1512,7 +1512,7 @@ mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev,
  	enum nl80211_band band = chandef->chan->band;
  	struct sta_rec_ra *ra;
  	struct tlv *tlv;
@@ -987,7 +991,7 @@
  	u32 cap = sta->wme ? STA_CAP_WMM : 0;
  
  	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_RA, sizeof(*ra));
-@@ -1523,9 +1523,9 @@ mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev,
+@@ -1522,9 +1522,9 @@ mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev,
  	ra->auto_rate = true;
  	ra->phy_mode = mt76_connac_get_phy_mode(mphy, vif, band, sta);
  	ra->channel = chandef->chan->hw_value;
@@ -1000,7 +1004,7 @@
  
  	if (supp_rate) {
  		supp_rate &= mask->control[band].legacy;
-@@ -1545,22 +1545,22 @@ mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev,
+@@ -1544,22 +1544,22 @@ mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev,
  		}
  	}
  
@@ -1031,7 +1035,7 @@
  			cap |= STA_CAP_LDPC;
  
  		mt7915_mcu_set_sta_ht_mcs(sta, ra->ht_mcs,
-@@ -1568,37 +1568,37 @@ mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev,
+@@ -1567,37 +1567,37 @@ mt7915_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct mt7915_dev *dev,
  		ra->supp_ht_mcs = *(__le32 *)ra->ht_mcs;
  	}
  
@@ -1079,7 +1083,7 @@
  					       IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP);
  	}
  
-@@ -1807,7 +1807,7 @@ mt7915_mcu_beacon_cntdwn(struct ieee80211_vif *vif, struct sk_buff *rskb,
+@@ -1806,7 +1806,7 @@ mt7915_mcu_beacon_cntdwn(struct ieee80211_vif *vif, struct sk_buff *rskb,
  	if (!offs->cntdwn_counter_offs[0])
  		return;
  
@@ -1088,7 +1092,7 @@
  	tlv = mt7915_mcu_add_nested_subtlv(rskb, sub_tag, sizeof(*info),
  					   &bcn->sub_ntlv, &bcn->len);
  	info = (struct bss_info_bcn_cntdwn *)tlv;
-@@ -1892,9 +1892,9 @@ mt7915_mcu_beacon_cont(struct mt7915_dev *dev, struct ieee80211_vif *vif,
+@@ -1891,9 +1891,9 @@ mt7915_mcu_beacon_cont(struct mt7915_dev *dev, struct ieee80211_vif *vif,
  	if (offs->cntdwn_counter_offs[0]) {
  		u16 offset = offs->cntdwn_counter_offs[0];
  
@@ -1100,7 +1104,7 @@
  			cont->bcc_ofs = cpu_to_le16(offset - 3);
  	}
  
-@@ -2078,7 +2078,7 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -2077,7 +2077,7 @@ int mt7915_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
  	if (!en)
  		goto out;
  
@@ -1109,7 +1113,7 @@
  	if (!skb)
  		return -EINVAL;
  
-@@ -3279,17 +3279,17 @@ int mt7915_mcu_set_txpower_frame(struct mt7915_phy *phy,
+@@ -3278,17 +3278,17 @@ int mt7915_mcu_set_txpower_frame(struct mt7915_phy *phy,
  	if (txpower) {
  		u32 offs, len, i;
  
@@ -1130,29 +1134,8 @@
  					offs += len + sku_len[SKU_HE_RU26] * 3;
  					len = sku_len[SKU_HE_RU242] * 4;
  				}
-diff --git a/mt7915/testmode.c b/mt7915/testmode.c
-index 2ae6c07f..75be1ed9 100644
---- a/mt7915/testmode.c
-+++ b/mt7915/testmode.c
-@@ -360,12 +360,12 @@ mt7915_tm_entry_add(struct mt7915_phy *phy, u8 aid)
- 	}
- 
- 	if (td->tx_rate_mode >= MT76_TM_TX_MODE_HT)
--		memcpy(&sta->deflink.ht_cap, &sband->ht_cap, sizeof(sta->deflink.ht_cap));
-+		memcpy(&sta->ht_cap, &sband->ht_cap, sizeof(sta->ht_cap));
- 	if (td->tx_rate_mode >= MT76_TM_TX_MODE_VHT)
--		memcpy(&sta->deflink.vht_cap, &sband->vht_cap, sizeof(sta->deflink.vht_cap));
-+		memcpy(&sta->vht_cap, &sband->vht_cap, sizeof(sta->vht_cap));
- 	if (td->tx_rate_mode >= MT76_TM_TX_MODE_HE_SU)
--		memcpy(&sta->deflink.he_cap, &sdata[NL80211_IFTYPE_STATION].he_cap,
--		       sizeof(sta->deflink.he_cap));
-+		memcpy(&sta->he_cap, &sdata[NL80211_IFTYPE_STATION].he_cap,
-+		       sizeof(sta->he_cap));
- 	sta->aid = aid;
- 	sta->wme = 1;
- 
 diff --git a/tx.c b/tx.c
-index 6d55566f..91c8dd8d 100644
+index 6d55566..91c8dd8 100644
 --- a/tx.c
 +++ b/tx.c
 @@ -60,20 +60,15 @@ mt76_tx_status_unlock(struct mt76_dev *dev, struct sk_buff_head *list)
@@ -1180,5 +1163,5 @@
  
  		hw = mt76_tx_status_get_hw(dev, skb);
 -- 
-2.25.1
+2.36.1