diff --git a/autobuild_mac80211_release/0003-master-mt76-makefile-for-new-chip.patch b/autobuild_mac80211_release/0003-master-mt76-makefile-for-new-chip.patch
index 2eec36f..9166c81 100644
--- a/autobuild_mac80211_release/0003-master-mt76-makefile-for-new-chip.patch
+++ b/autobuild_mac80211_release/0003-master-mt76-makefile-for-new-chip.patch
@@ -1,7 +1,7 @@
 From bd0dae19286bf13e74698d753a98e46b155a5882 Mon Sep 17 00:00:00 2001
 From: Evelyn Tsai <evelyn.tsai@mediatek.com>
 Date: Wed, 30 Mar 2022 10:38:24 +0800
-Subject: [PATCH] mt76: add MT7986/MT7916/Bersa support in makefile
+Subject: [PATCH] mt76: add MT7986/MT7916/Besra support in makefile
 
 ---
  kernel/mt76/Makefile | 69 +++++++++++++++++++++++++++++++++++++++++++-
@@ -22,12 +22,12 @@
    AUTOLOAD:=$(call AutoProbe,mt7915e)
  endef
  
-+define KernelPackage/bersa
++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)/bersa/bersa.ko
-+  AUTOLOAD:=$(call AutoProbe,bersa)
++  FILES:= $(PKG_BUILD_DIR)/besra/besra.ko
++  AUTOLOAD:=$(call AutoProbe,besra)
 +endef
 +
  define KernelPackage/mt7921-common
@@ -54,8 +54,8 @@
 +  NOSTDINC_FLAGS += -DCONFIG_MT7986_WMAC
 +endif
 +endif
-+ifdef CONFIG_PACKAGE_kmod-bersa
-+  PKG_MAKE_FLAGS += CONFIG_BERSA=m
++ifdef CONFIG_PACKAGE_kmod-besra
++  PKG_MAKE_FLAGS += CONFIG_BESRA=m
  endif
  ifdef CONFIG_PACKAGE_kmod-mt7921-common
    PKG_MAKE_FLAGS += CONFIG_MT7921_COMMON=m
@@ -98,8 +98,8 @@
 +endif
  endef
  
-+ifdef CONFIG_PACKAGE_kmod-bersa
-+define KernelPackage/bersa/install
++ifdef CONFIG_PACKAGE_kmod-besra
++define KernelPackage/besra/install
 +	$(INSTALL_DIR) $(1)/lib/firmware/mediatek
 +	cp \
 +		$(PKG_BUILD_DIR)/firmware/mt7902_wa.bin \
@@ -119,7 +119,7 @@
  $(eval $(call KernelPackage,mt7921u))
  $(eval $(call KernelPackage,mt7921s))
  $(eval $(call KernelPackage,mt7921e))
-+$(eval $(call KernelPackage,bersa))
++$(eval $(call KernelPackage,besra))
  $(eval $(call KernelPackage,mt76))
  $(eval $(call BuildPackage,mt76-test))
 -- 
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/Makefile b/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/Makefile
deleted file mode 100755
index a51abe0..0000000
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/Makefile
+++ /dev/null
@@ -1,8 +0,0 @@
-# SPDX-License-Identifier: ISC
-
-obj-$(CONFIG_BERSA) += bersa.o
-
-bersa-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o \
-	     debugfs.o mmio.o
-
-bersa-$(CONFIG_NL80211_TESTMODE) += testmode.o
\ No newline at end of file
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/bersa.h b/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/bersa.h
deleted file mode 100644
index 63a9736..0000000
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/bersa.h
+++ /dev/null
@@ -1,574 +0,0 @@
-/* SPDX-License-Identifier: ISC */
-/* Copyright (C) 2020 MediaTek Inc. */
-
-#ifndef __BERSA_H
-#define __BERSA_H
-
-#include <linux/interrupt.h>
-#include <linux/ktime.h>
-#include "../mt76_connac.h"
-#include "regs.h"
-
-#define BERSA_MAX_INTERFACES		19
-#define BERSA_MAX_WMM_SETS		4
-#define BERSA_WTBL_SIZE			544
-#define BERSA_WTBL_RESERVED		201
-#define BERSA_WTBL_STA			(BERSA_WTBL_RESERVED - \
-					 BERSA_MAX_INTERFACES)
-
-#define BERSA_WATCHDOG_TIME		(HZ / 10)
-#define BERSA_RESET_TIMEOUT		(30 * HZ)
-
-#define BERSA_TX_RING_SIZE		2048
-#define BERSA_TX_MCU_RING_SIZE		256
-#define BERSA_TX_FWDL_RING_SIZE		128
-
-#define BERSA_RX_RING_SIZE		1536
-#define BERSA_RX_MCU_RING_SIZE		512
-
-#define MT7902_FIRMWARE_WA		"mediatek/mt7902_wa.bin"
-#define MT7902_FIRMWARE_WM		"mediatek/mt7902_wm.bin"
-#define MT7902_ROM_PATCH		"mediatek/mt7902_rom_patch.bin"
-#define MT7902_FIRMWARE_ROM		"mediatek/mt7902_wf_rom.bin"
-#define MT7902_FIRMWARE_ROM_SRAM	"mediatek/mt7902_wf_rom_sram.bin"
-#define MT7902_EEPROM_DEFAULT		"mediatek/mt7902_eeprom.bin"
-
-#define BERSA_EEPROM_SIZE		4096
-#define BERSA_EEPROM_BLOCK_SIZE		16
-#define BERSA_TOKEN_SIZE		8192
-
-#define BERSA_CFEND_RATE_DEFAULT	0x49	/* OFDM 24M */
-#define BERSA_CFEND_RATE_11B		0x03	/* 11B LP, 11M */
-
-#define BERSA_THERMAL_THROTTLE_MAX	100
-#define BERSA_CDEV_THROTTLE_MAX	99
-
-#define BERSA_SKU_RATE_NUM		161
-
-#define BERSA_MAX_TWT_AGRT		16
-#define BERSA_MAX_STA_TWT_AGRT		8
-#define BERSA_MAX_QUEUE		(__MT_RXQ_MAX + __MT_MCUQ_MAX + 2)
-
-struct bersa_vif;
-struct bersa_sta;
-struct bersa_dfs_pulse;
-struct bersa_dfs_pattern;
-
-enum bersa_txq_id {
-	BERSA_TXQ_FWDL = 16,
-	BERSA_TXQ_MCU_WM,
-	BERSA_TXQ_BAND0,
-	BERSA_TXQ_BAND1,
-	BERSA_TXQ_MCU_WA,
-	BERSA_TXQ_BAND2,
-};
-
-enum bersa_rxq_id {
-	BERSA_RXQ_MCU_WM = 0,
-	BERSA_RXQ_MCU_WA,
-	BERSA_RXQ_MCU_WA_MAIN,
-	BERSA_RXQ_MCU_WA_EXT = 2,
-	BERSA_RXQ_MCU_WA_TRI = 2,
-	BERSA_RXQ_BAND0 = 4,
-	BERSA_RXQ_BAND1,
-	BERSA_RXQ_BAND2 = 8,
-};
-
-struct bersa_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 bersa_sta {
-	struct mt76_wcid wcid; /* must be first */
-
-	struct bersa_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 bersa_twt_flow flow[BERSA_MAX_STA_TWT_AGRT];
-	} twt;
-};
-
-struct bersa_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 bersa_vif {
-	struct mt76_vif mt76; /* must be first */
-
-	struct bersa_vif_cap cap;
-	struct bersa_sta sta;
-	struct bersa_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 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 bersa_hif {
-	struct list_head list;
-
-	struct device *dev;
-	void __iomem *regs;
-	int irq;
-};
-
-struct bersa_phy {
-	struct mt76_phy *mt76;
-	struct bersa_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 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 bersa_dev {
-	union { /* must be first */
-		struct mt76_dev mt76;
-		struct mt76_phy mphy;
-	};
-
-	struct bersa_hif *hif2;
-	struct bersa_reg_desc reg;
-	u8 q_id[BERSA_MAX_QUEUE];
-	u32 q_int_mask[BERSA_MAX_QUEUE];
-	u32 wfdma_mask;
-
-	const struct mt76_bus_ops *bus_ops;
-	struct tasklet_struct irq_tasklet;
-	struct bersa_phy phy;
-
-	/* monitor rx chain configured channel */
-	struct cfg80211_chan_def rdd2_chandef;
-	struct bersa_phy *rdd2_phy;
-
-	u32 chainmask;
-	u16 chain_shift_ext;
-	u16 chain_shift_tri;
-	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 tbtc_support;
-	bool flash_mode;
-	bool muru_debug;
-	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;
-
-	void *cal;
-
-	struct {
-		u8 table_mask;
-		u8 n_agrt;
-	} twt;
-};
-
-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 bersa_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 bersa_phy *
-bersa_hw_phy(struct ieee80211_hw *hw)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	return phy->priv;
-}
-
-static inline struct bersa_dev *
-bersa_hw_dev(struct ieee80211_hw *hw)
-{
-	struct mt76_phy *phy = hw->priv;
-
-	return container_of(phy->dev, struct bersa_dev, mt76);
-}
-
-static inline struct bersa_phy *
-bersa_ext_phy(struct bersa_dev *dev)
-{
-	struct mt76_phy *phy = dev->mt76.phy2;
-
-	if (!phy)
-		return NULL;
-
-	return phy->priv;
-}
-
-static inline struct bersa_phy *
-bersa_tri_phy(struct bersa_dev *dev)
-{
-	struct mt76_phy *phy = dev->mt76.phy3;
-
-	if (!phy)
-		return NULL;
-
-	return phy->priv;
-}
-
-static inline u8
-bersa_get_phy_id(struct bersa_phy *phy)
-{
-	if (phy->mt76 == &phy->dev->mphy)
-		return MT_MAIN_PHY;
-
-	if (phy->mt76 == phy->dev->mt76.phy2)
-		return MT_EXT_PHY;
-
-	return MT_TRI_PHY;
-}
-
-extern const struct ieee80211_ops bersa_ops;
-extern const struct mt76_testmode_ops bersa_testmode_ops;
-extern struct pci_driver bersa_pci_driver;
-extern struct pci_driver bersa_hif_driver;
-
-struct bersa_dev *bersa_mmio_probe(struct device *pdev,
-				     void __iomem *mem_base, u32 device_id);
-void bersa_wfsys_reset(struct bersa_dev *dev);
-irqreturn_t bersa_irq_handler(int irq, void *dev_instance);
-u64 __bersa_get_tsf(struct ieee80211_hw *hw, struct bersa_vif *mvif);
-int bersa_register_device(struct bersa_dev *dev);
-void bersa_unregister_device(struct bersa_dev *dev);
-int bersa_eeprom_init(struct bersa_dev *dev);
-void bersa_eeprom_parse_hw_cap(struct bersa_dev *dev,
-				struct bersa_phy *phy);
-int bersa_eeprom_get_target_power(struct bersa_dev *dev,
-				   struct ieee80211_channel *chan,
-				   u8 chain_idx);
-s8 bersa_eeprom_get_power_delta(struct bersa_dev *dev, int band);
-int bersa_dma_init(struct bersa_dev *dev);
-void bersa_dma_prefetch(struct bersa_dev *dev);
-void bersa_dma_cleanup(struct bersa_dev *dev);
-int bersa_rom_start(struct bersa_dev *dev);
-int bersa_mcu_init(struct bersa_dev *dev);
-int bersa_mcu_twt_agrt_update(struct bersa_dev *dev,
-			       struct bersa_vif *mvif,
-			       struct bersa_twt_flow *flow,
-			       int cmd);
-int bersa_mcu_add_dev_info(struct bersa_phy *phy,
-			    struct ieee80211_vif *vif, bool enable);
-int bersa_mcu_add_bss_info(struct bersa_phy *phy,
-			    struct ieee80211_vif *vif, int enable);
-int bersa_mcu_add_sta(struct bersa_dev *dev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta, bool enable);
-int bersa_mcu_add_tx_ba(struct bersa_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool add);
-int bersa_mcu_add_rx_ba(struct bersa_dev *dev,
-			 struct ieee80211_ampdu_params *params,
-			 bool add);
-int bersa_mcu_update_bss_color(struct bersa_dev *dev, struct ieee80211_vif *vif,
-				struct cfg80211_he_bss_color *he_bss_color);
-int bersa_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
-			  int enable);
-int bersa_mcu_add_obss_spr(struct bersa_dev *dev, struct ieee80211_vif *vif,
-                            bool enable);
-int bersa_mcu_add_rate_ctrl(struct bersa_dev *dev, struct ieee80211_vif *vif,
-			     struct ieee80211_sta *sta, bool changed);
-int bersa_mcu_add_smps(struct bersa_dev *dev, struct ieee80211_vif *vif,
-			struct ieee80211_sta *sta);
-int bersa_set_channel(struct bersa_phy *phy);
-int bersa_mcu_set_chan_info(struct bersa_phy *phy, int tag);
-int bersa_mcu_set_tx(struct bersa_dev *dev, struct ieee80211_vif *vif);
-int bersa_mcu_update_edca(struct bersa_dev *dev, void *req);
-int bersa_mcu_set_fixed_rate_ctrl(struct bersa_dev *dev,
-				   struct ieee80211_vif *vif,
-				   struct ieee80211_sta *sta,
-				   void *data, u32 field);
-int bersa_mcu_set_eeprom(struct bersa_dev *dev);
-int bersa_mcu_get_eeprom(struct bersa_dev *dev, u32 offset);
-int bersa_mcu_get_eeprom_free_block(struct bersa_dev *dev, u8 *block_num);
-int bersa_mcu_set_test_param(struct bersa_dev *dev, u8 param, bool test_mode,
-			      u8 en);
-int bersa_mcu_set_ser(struct bersa_dev *dev, u8 action, u8 set, u8 band);
-int bersa_mcu_set_sku_en(struct bersa_phy *phy, bool enable);
-int bersa_mcu_set_txpower_sku(struct bersa_phy *phy);
-int bersa_mcu_get_txpower_sku(struct bersa_phy *phy, s8 *txpower, int len);
-int bersa_mcu_set_txbf(struct bersa_dev *dev, u8 action);
-int bersa_mcu_set_fcc5_lpn(struct bersa_dev *dev, int val);
-int bersa_mcu_set_pulse_th(struct bersa_dev *dev,
-			    const struct bersa_dfs_pulse *pulse);
-int bersa_mcu_set_radar_th(struct bersa_dev *dev, int index,
-			    const struct bersa_dfs_pattern *pattern);
-int bersa_mcu_set_radio_en(struct bersa_phy *phy, bool enable);
-void bersa_mcu_set_pm(void *priv, u8 *mac, struct ieee80211_vif *vif);
-int bersa_mcu_set_rts_thresh(struct bersa_phy *phy, u32 val);
-int bersa_mcu_set_edcca_thresh(struct bersa_phy *phy);
-int bersa_mcu_set_edcca_en(struct bersa_phy *phy, bool enable);
-int bersa_mcu_set_muru_ctrl(struct bersa_dev *dev, u32 cmd, u32 val);
-int bersa_mcu_apply_group_cal(struct bersa_dev *dev);
-int bersa_mcu_apply_tx_dpd(struct bersa_phy *phy);
-int bersa_mcu_get_chan_mib_info(struct bersa_phy *phy, bool chan_switch);
-int bersa_mcu_get_temperature(struct bersa_phy *phy);
-int bersa_mcu_set_thermal_throttling(struct bersa_phy *phy, u8 state);
-int bersa_mcu_get_rx_rate(struct bersa_phy *phy, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta, struct rate_info *rate);
-int bersa_mcu_rdd_cmd(struct bersa_dev *dev, int cmd, u8 index,
-		      u8 rx_sel, u8 val);
-int bersa_mcu_rdd_background_enable(struct bersa_phy *phy,
-				     struct cfg80211_chan_def *chandef);
-int bersa_mcu_rf_regval(struct bersa_dev *dev, u32 regidx, u32 *val, bool set);
-int bersa_mcu_wa_cmd(struct bersa_dev *dev, int cmd, u32 a1, u32 a2, u32 a3);
-int bersa_mcu_fw_log_2_host(struct bersa_dev *dev, u8 type, u8 ctrl);
-int bersa_mcu_fw_dbg_ctrl(struct bersa_dev *dev, u32 module, u8 level);
-void bersa_mcu_rx_event(struct bersa_dev *dev, struct sk_buff *skb);
-void bersa_mcu_exit(struct bersa_dev *dev);
-int bersa_mcu_set_hdr_trans(struct bersa_dev *dev, bool hdr_trans);
-
-void bersa_dual_hif_set_irq_mask(struct bersa_dev *dev, bool write_reg,
-				  u32 clear, u32 set);
-
-static inline void bersa_irq_enable(struct bersa_dev *dev, u32 mask)
-{
-	if (dev->hif2)
-		bersa_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 bersa_irq_disable(struct bersa_dev *dev, u32 mask)
-{
-	if (dev->hif2)
-		bersa_dual_hif_set_irq_mask(dev, true, mask, 0);
-	else
-		mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, mask, 0);
-}
-
-u32 bersa_mac_wtbl_lmac_addr(struct bersa_dev *dev, u16 wcid, u8 dw);
-bool bersa_mac_wtbl_update(struct bersa_dev *dev, int idx, u32 mask);
-void bersa_mac_reset_counters(struct bersa_phy *phy);
-void bersa_mac_cca_stats_reset(struct bersa_phy *phy);
-void bersa_mac_enable_nf(struct bersa_dev *dev, u8 band);
-void bersa_mac_write_txwi(struct bersa_dev *dev, __le32 *txwi,
-			   struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
-			   struct ieee80211_key_conf *key, bool beacon);
-void bersa_mac_set_timing(struct bersa_phy *phy);
-int bersa_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-		       struct ieee80211_sta *sta);
-void bersa_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
-			   struct ieee80211_sta *sta);
-void bersa_mac_work(struct work_struct *work);
-void bersa_mac_reset_work(struct work_struct *work);
-void bersa_mac_sta_rc_work(struct work_struct *work);
-void bersa_mac_update_stats(struct bersa_phy *phy);
-void bersa_mac_twt_teardown_flow(struct bersa_dev *dev,
-				  struct bersa_sta *msta,
-				  u8 flowid);
-void bersa_mac_add_twt_setup(struct ieee80211_hw *hw,
-			      struct ieee80211_sta *sta,
-			      struct ieee80211_twt_setup *twt);
-int bersa_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 bersa_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e);
-void bersa_tx_token_put(struct bersa_dev *dev);
-int bersa_init_tx_queues(struct bersa_phy *phy, int idx, int n_desc, int ring_base);
-void bersa_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
-			 struct sk_buff *skb);
-bool bersa_rx_check(struct mt76_dev *mdev, enum mt76_rxq_id q, void *data, int len);
-void bersa_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps);
-void bersa_stats_work(struct work_struct *work);
-int mt76_dfs_start_rdd(struct bersa_dev *dev, bool force);
-int bersa_dfs_init_radar_detector(struct bersa_phy *phy);
-void bersa_set_stream_he_caps(struct bersa_phy *phy);
-void bersa_set_stream_vht_txbf_caps(struct bersa_phy *phy);
-void bersa_update_channel(struct mt76_phy *mphy);
-int bersa_mcu_muru_debug_set(struct bersa_dev *dev, bool enable);
-int bersa_mcu_muru_debug_get(struct bersa_phy *phy, void *ms);
-int bersa_init_debugfs(struct bersa_phy *phy);
-void bersa_debugfs_rx_fw_monitor(struct bersa_dev *dev, const void *data, int len);
-bool bersa_debugfs_rx_log(struct bersa_dev *dev, const void *data, int len);
-int bersa_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 bersa_mcu_wtbl_update_hdr_trans(struct bersa_dev *dev,
-			struct ieee80211_vif *vif, struct ieee80211_sta *sta);
-#ifdef CONFIG_MAC80211_DEBUGFS
-void bersa_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/mt7986_bersa_mac80211/.config b/autobuild_mac80211_release/mt7986_besra_mac80211/.config
similarity index 99%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/.config
rename to autobuild_mac80211_release/mt7986_besra_mac80211/.config
index d4e62dd..78b8f21 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/.config
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/.config
@@ -2679,7 +2679,7 @@
 # CONFIG_PACKAGE_kmod-mt76x0u is not set
 # CONFIG_PACKAGE_kmod-mt76x2 is not set
 # CONFIG_PACKAGE_kmod-mt76x2u is not set
-CONFIG_PACKAGE_kmod-bersa=y
+CONFIG_PACKAGE_kmod-besra=y
 # CONFIG_PACKAGE_kmod-mt7915e is not set
 # CONFIG_PACKAGE_kmod-mt7921e is not set
 # CONFIG_PACKAGE_kmod-mwifiex-pcie is not set
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/lede-branch-build-sanity.sh b/autobuild_mac80211_release/mt7986_besra_mac80211/lede-branch-build-sanity.sh
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/lede-branch-build-sanity.sh
rename to autobuild_mac80211_release/mt7986_besra_mac80211/lede-branch-build-sanity.sh
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/patches/1001-mt76-bersa-add-internal-debug.patch b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/patches/1001-mt76-besra-add-internal-debug.patch
similarity index 97%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/patches/1001-mt76-bersa-add-internal-debug.patch
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/patches/1001-mt76-besra-add-internal-debug.patch
index df5c7ac..0d94923 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/patches/1001-mt76-bersa-add-internal-debug.patch
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/patches/1001-mt76-besra-add-internal-debug.patch
@@ -1,47 +1,47 @@
 From 650cb1ed09a37bcb426ec5f27ae0e65f1d65df94 Mon Sep 17 00:00:00 2001
 From: Shayne Chen <shayne.chen@mediatek.com>
 Date: Mon, 9 May 2022 15:12:22 +0800
-Subject: [PATCH] mt76: bersa: add internal debug patch
+Subject: [PATCH] mt76: besra: add internal debug patch
 
 ---
- bersa/Makefile      |    5 +-
- bersa/bersa.h       |   35 +
- bersa/debugfs.c     |   25 +-
- bersa/mac.c         |   18 +
- bersa/mcu.c         |    4 +
- bersa/mtk_debug.h   | 3716 +++++++++++++++++++++++++++++++++++++++++++
- bersa/mtk_debugfs.c | 3576 +++++++++++++++++++++++++++++++++++++++++
+ besra/Makefile      |    5 +-
+ besra/besra.h       |   35 +
+ besra/debugfs.c     |   25 +-
+ besra/mac.c         |   18 +
+ besra/mcu.c         |    4 +
+ besra/mtk_debug.h   | 3716 +++++++++++++++++++++++++++++++++++++++++++
+ besra/mtk_debugfs.c | 3576 +++++++++++++++++++++++++++++++++++++++++
  tools/fwlog.c       |   25 +-
  8 files changed, 7393 insertions(+), 11 deletions(-)
- mode change 100755 => 100644 bersa/Makefile
- create mode 100644 bersa/mtk_debug.h
- create mode 100644 bersa/mtk_debugfs.c
+ mode change 100755 => 100644 besra/Makefile
+ create mode 100644 besra/mtk_debug.h
+ create mode 100644 besra/mtk_debugfs.c
 
-diff --git a/bersa/Makefile b/bersa/Makefile
+diff --git a/besra/Makefile b/besra/Makefile
 old mode 100755
 new mode 100644
 index a51abe0c..edb7800a
---- a/bersa/Makefile
-+++ b/bersa/Makefile
+--- a/besra/Makefile
++++ b/besra/Makefile
 @@ -1,8 +1,11 @@
  # SPDX-License-Identifier: ISC
 +EXTRA_CFLAGS += -DCONFIG_MTK_DEBUG
  
- obj-$(CONFIG_BERSA) += bersa.o
+ obj-$(CONFIG_BESRA) += besra.o
  
- bersa-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o \
+ besra-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o \
  	     debugfs.o mmio.o
  
--bersa-$(CONFIG_NL80211_TESTMODE) += testmode.o
+-besra-$(CONFIG_NL80211_TESTMODE) += testmode.o
 \ No newline at end of file
-+bersa-$(CONFIG_NL80211_TESTMODE) += testmode.o
++besra-$(CONFIG_NL80211_TESTMODE) += testmode.o
 +
-+bersa-y += mtk_debugfs.o
-diff --git a/bersa/bersa.h b/bersa/bersa.h
++besra-y += mtk_debugfs.o
+diff --git a/besra/besra.h b/besra/besra.h
 index 63a97363..30c3a79b 100644
---- a/bersa/bersa.h
-+++ b/bersa/bersa.h
-@@ -301,6 +301,23 @@ struct bersa_dev {
+--- a/besra/besra.h
++++ b/besra/besra.h
+@@ -301,6 +301,23 @@ struct besra_dev {
  		u8 table_mask;
  		u8 n_agrt;
  	} twt;
@@ -65,12 +65,12 @@
  };
  
  enum {
-@@ -571,4 +588,22 @@ void bersa_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+@@ -571,4 +588,22 @@ void besra_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
  			    struct ieee80211_sta *sta, struct dentry *dir);
  #endif
  
 +#ifdef CONFIG_MTK_DEBUG
-+void bersa_packet_log_to_host(struct bersa_dev *dev, const void *data, int len, int type, int des_len);
++void besra_packet_log_to_host(struct besra_dev *dev, const void *data, int len, int type, int des_len);
 +
 +#define PKT_BIN_DEBUG_MAGIC	0xc8763123
 +enum {
@@ -81,18 +81,18 @@
 +	PKT_BIN_DEBUG_RX_RAW,
 +};
 +
-+int bersa_mtk_init_debugfs(struct bersa_phy *phy, struct dentry *dir);
-+void bersa_dump_bmac_rxd_info(struct bersa_dev *dev, __le32 *rxd);
-+void bersa_dump_bmac_txd_info(struct bersa_dev *dev, __le32 *txd, bool dump_txp);
-+void bersa_dump_bmac_txp_info(struct bersa_dev *dev, __le32 *txp);
++int besra_mtk_init_debugfs(struct besra_phy *phy, struct dentry *dir);
++void besra_dump_bmac_rxd_info(struct besra_dev *dev, __le32 *rxd);
++void besra_dump_bmac_txd_info(struct besra_dev *dev, __le32 *txd, bool dump_txp);
++void besra_dump_bmac_txp_info(struct besra_dev *dev, __le32 *txp);
 +#endif
 +
  #endif
-diff --git a/bersa/debugfs.c b/bersa/debugfs.c
+diff --git a/besra/debugfs.c b/besra/debugfs.c
 index 4be253ea..9f3e11a8 100644
---- a/bersa/debugfs.c
-+++ b/bersa/debugfs.c
-@@ -371,6 +371,9 @@ bersa_fw_debug_wm_set(void *data, u64 val)
+--- a/besra/debugfs.c
++++ b/besra/debugfs.c
+@@ -371,6 +371,9 @@ besra_fw_debug_wm_set(void *data, u64 val)
  	int ret;
  
  	dev->fw_debug_wm = val ? MCU_FW_LOG_TO_HOST : 0;
@@ -102,7 +102,7 @@
  
  	if (dev->fw_debug_bin)
  		val = MCU_FW_LOG_RELAY;
-@@ -494,6 +497,16 @@ bersa_fw_debug_bin_set(void *data, u64 val)
+@@ -494,6 +497,16 @@ besra_fw_debug_bin_set(void *data, u64 val)
  
  	relay_reset(dev->relay_fwlog);
  
@@ -116,11 +116,11 @@
 +		return 0;
 +#endif
 +
- 	return bersa_fw_debug_wm_set(dev, dev->fw_debug_wm);
+ 	return besra_fw_debug_wm_set(dev, dev->fw_debug_wm);
  }
  
-@@ -942,8 +955,13 @@ int bersa_init_debugfs(struct bersa_phy *phy)
- 					    bersa_rdd_monitor);
+@@ -942,8 +955,13 @@ int besra_init_debugfs(struct besra_phy *phy)
+ 					    besra_rdd_monitor);
  	}
  
 -	if (phy == &dev->phy)
@@ -128,15 +128,15 @@
  		dev->debugfs_dir = dir;
 +#ifdef CONFIG_MTK_DEBUG
 +		debugfs_create_u16("wlan_idx", 0600, dir, &dev->wlan_idx);
-+		bersa_mtk_init_debugfs(phy, dir);
++		besra_mtk_init_debugfs(phy, dir);
 +#endif
 +	}
  
  	return 0;
  }
-@@ -1000,7 +1018,12 @@ void bersa_debugfs_rx_fw_monitor(struct bersa_dev *dev, const void *data, int le
+@@ -1000,7 +1018,12 @@ void besra_debugfs_rx_fw_monitor(struct besra_dev *dev, const void *data, int le
  
- bool bersa_debugfs_rx_log(struct bersa_dev *dev, const void *data, int len)
+ bool besra_debugfs_rx_log(struct besra_dev *dev, const void *data, int len)
  {
 +#ifdef CONFIG_MTK_DEBUG
 +	if (get_unaligned_le32(data) != FW_BIN_LOG_MAGIC &&
@@ -147,69 +147,69 @@
  		return false;
  
  	if (dev->relay_fwlog)
-diff --git a/bersa/mac.c b/bersa/mac.c
+diff --git a/besra/mac.c b/besra/mac.c
 index 2d48a1a4..b726e2d8 100644
---- a/bersa/mac.c
-+++ b/bersa/mac.c
-@@ -589,6 +589,11 @@ bersa_mac_fill_rx(struct bersa_dev *dev, struct sk_buff *skb)
+--- a/besra/mac.c
++++ b/besra/mac.c
+@@ -589,6 +589,11 @@ besra_mac_fill_rx(struct besra_dev *dev, struct sk_buff *skb)
  	int idx;
  	u8 band_idx;
  
 +#ifdef CONFIG_MTK_DEBUG
 +	if (dev->dbg.dump_rx_raw)
-+		bersa_packet_log_to_host(dev, skb->data, skb->len, PKT_BIN_DEBUG_RX_RAW, 0);
-+	bersa_dump_bmac_rxd_info(dev, rxd);
++		besra_packet_log_to_host(dev, skb->data, skb->len, PKT_BIN_DEBUG_RX_RAW, 0);
++	besra_dump_bmac_rxd_info(dev, rxd);
 +#endif
  	memset(status, 0, sizeof(*status));
  
  	band_idx = FIELD_GET(MT_RXD1_NORMAL_BAND_IDX, rxd1);
-@@ -763,6 +768,10 @@ bersa_mac_fill_rx(struct bersa_dev *dev, struct sk_buff *skb)
+@@ -763,6 +768,10 @@ besra_mac_fill_rx(struct besra_dev *dev, struct sk_buff *skb)
  	}
  
  	hdr_gap = (u8 *)rxd - skb->data + 2 * remove_pad;
 +#ifdef CONFIG_MTK_DEBUG
 +	if (dev->dbg.dump_rx_pkt)
-+		bersa_packet_log_to_host(dev, skb->data, skb->len, PKT_BIN_DEBUG_RX, hdr_gap);
++		besra_packet_log_to_host(dev, skb->data, skb->len, PKT_BIN_DEBUG_RX, hdr_gap);
 +#endif
  	if (hdr_trans && ieee80211_has_morefrags(fc)) {
- 		if (bersa_reverse_frag0_hdr_trans(skb, hdr_gap))
+ 		if (besra_reverse_frag0_hdr_trans(skb, hdr_gap))
  			return -EINVAL;
-@@ -1330,6 +1339,15 @@ int bersa_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
+@@ -1330,6 +1339,15 @@ int besra_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
  	tx_info->buf[1].skip_unmap = true;
  	tx_info->nbuf = MT_CT_DMA_BUF_NUM;
  
 +#ifdef CONFIG_MTK_DEBUG
-+	bersa_dump_bmac_txd_info(dev, (__le32 *)txwi, true);
++	besra_dump_bmac_txd_info(dev, (__le32 *)txwi, true);
 +
 +	if (dev->dbg.dump_txd)
-+		bersa_packet_log_to_host(dev, txwi, MT_TXD_SIZE, PKT_BIN_DEBUG_TXD, 0);
++		besra_packet_log_to_host(dev, txwi, MT_TXD_SIZE, PKT_BIN_DEBUG_TXD, 0);
 +	if (dev->dbg.dump_tx_pkt)
-+		bersa_packet_log_to_host(dev, t->skb->data, t->skb->len, PKT_BIN_DEBUG_TX, 0);
++		besra_packet_log_to_host(dev, t->skb->data, t->skb->len, PKT_BIN_DEBUG_TX, 0);
 +#endif
 +
  	return 0;
  }
  
-diff --git a/bersa/mcu.c b/bersa/mcu.c
+diff --git a/besra/mcu.c b/besra/mcu.c
 index 5276552c..6fc175c6 100644
---- a/bersa/mcu.c
-+++ b/bersa/mcu.c
-@@ -299,6 +299,10 @@ bersa_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
+--- a/besra/mcu.c
++++ b/besra/mcu.c
+@@ -299,6 +299,10 @@ besra_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
  		mcu_txd->s2d_index = MCU_S2D_H2N;
  
  exit:
 +#ifdef CONFIG_MTK_DEBUG
 +	if (dev->dbg.dump_mcu_pkt)
-+		bersa_packet_log_to_host(dev, skb->data, skb->len, PKT_BIN_DEBUG_MCU, 0);
++		besra_packet_log_to_host(dev, skb->data, skb->len, PKT_BIN_DEBUG_MCU, 0);
 +#endif
  	if (wait_seq)
  		*wait_seq = seq;
  
-diff --git a/bersa/mtk_debug.h b/bersa/mtk_debug.h
+diff --git a/besra/mtk_debug.h b/besra/mtk_debug.h
 new file mode 100644
 index 00000000..1a797c81
 --- /dev/null
-+++ b/bersa/mtk_debug.h
++++ b/besra/mtk_debug.h
 @@ -0,0 +1,3716 @@
 +#ifndef __MTK_DEBUG_H
 +#define __MTK_DEBUG_H
@@ -280,7 +280,7 @@
 +};
 +
 +/* WTBL */
-+enum bersa_wtbl_type {
++enum besra_wtbl_type {
 +	WTBL_TYPE_LMAC, 	/* WTBL in LMAC */
 +	WTBL_TYPE_UMAC, 	/* WTBL in UMAC */
 +	WTBL_TYPE_KEY,		/* Key Table */
@@ -3927,14 +3927,14 @@
 +
 +#endif
 +#endif
-diff --git a/bersa/mtk_debugfs.c b/bersa/mtk_debugfs.c
+diff --git a/besra/mtk_debugfs.c b/besra/mtk_debugfs.c
 new file mode 100644
 index 00000000..ea6a2620
 --- /dev/null
-+++ b/bersa/mtk_debugfs.c
++++ b/besra/mtk_debugfs.c
 @@ -0,0 +1,3576 @@
 +#include<linux/inet.h>
-+#include "bersa.h"
++#include "besra.h"
 +#include "mtk_debug.h"
 +#include "../mt76.h"
 +#include "mcu.h"
@@ -3942,7 +3942,7 @@
 +
 +#ifdef CONFIG_MTK_DEBUG
 +
-+void bersa_packet_log_to_host(struct bersa_dev *dev, const void *data, int len, int type, int des_len)
++void besra_packet_log_to_host(struct besra_dev *dev, const void *data, int len, int type, int des_len)
 +{
 +	struct bin_debug_hdr *hdr;
 +	char *buf;
@@ -3963,57 +3963,57 @@
 +
 +	memcpy(buf + sizeof(*hdr), data, len);
 +
-+	bersa_debugfs_rx_log(dev, buf, sizeof(*hdr) + len);
++	besra_debugfs_rx_log(dev, buf, sizeof(*hdr) + len);
 +}
 +
 +/* DBG MODLE */
 +static int
-+bersa_fw_debug_module_set(void *data, u64 module)
++besra_fw_debug_module_set(void *data, u64 module)
 +{
-+	struct bersa_dev *dev = data;
++	struct besra_dev *dev = data;
 +
 +	dev->dbg.fw_dbg_module = module;
 +	return 0;
 +}
 +
 +static int
-+bersa_fw_debug_module_get(void *data, u64 *module)
++besra_fw_debug_module_get(void *data, u64 *module)
 +{
-+	struct bersa_dev *dev = data;
++	struct besra_dev *dev = data;
 +
 +	*module = dev->dbg.fw_dbg_module;
 +	return 0;
 +}
 +
-+DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_module, bersa_fw_debug_module_get,
-+			 bersa_fw_debug_module_set, "%lld\n");
++DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_module, besra_fw_debug_module_get,
++			 besra_fw_debug_module_set, "%lld\n");
 +
 +static int
-+bersa_fw_debug_level_set(void *data, u64 level)
++besra_fw_debug_level_set(void *data, u64 level)
 +{
-+	struct bersa_dev *dev = data;
++	struct besra_dev *dev = data;
 +
 +	dev->dbg.fw_dbg_lv = level;
-+	bersa_mcu_fw_dbg_ctrl(dev, dev->dbg.fw_dbg_module, dev->dbg.fw_dbg_lv);
++	besra_mcu_fw_dbg_ctrl(dev, dev->dbg.fw_dbg_module, dev->dbg.fw_dbg_lv);
 +	return 0;
 +}
 +
 +static int
-+bersa_fw_debug_level_get(void *data, u64 *level)
++besra_fw_debug_level_get(void *data, u64 *level)
 +{
-+	struct bersa_dev *dev = data;
++	struct besra_dev *dev = data;
 +
 +	*level = dev->dbg.fw_dbg_lv;
 +	return 0;
 +}
 +
-+DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_level, bersa_fw_debug_level_get,
-+			 bersa_fw_debug_level_set, "%lld\n");
++DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_level, besra_fw_debug_level_get,
++			 besra_fw_debug_level_set, "%lld\n");
 +
 +/* WTBL INFO */
 +static int
-+bersa_wtbl_read_raw(struct bersa_dev *dev, u16 idx,
-+			 enum bersa_wtbl_type type, u16 start_dw,
++besra_wtbl_read_raw(struct besra_dev *dev, u16 idx,
++			 enum besra_wtbl_type type, u16 start_dw,
 +			 u16 len, void *buf)
 +{
 +	u32 *dest_cpy = (u32 *)buf;
@@ -4047,8 +4047,8 @@
 +}
 +
 +static int
-+bersa_wtbl_write_raw(struct bersa_dev *dev, u16 idx,
-+			  enum bersa_wtbl_type type, u16 start_dw,
++besra_wtbl_write_raw(struct besra_dev *dev, u16 idx,
++			  enum besra_wtbl_type type, u16 start_dw,
 +			  u32 val)
 +{
 +	u32 addr = 0;
@@ -5136,7 +5136,7 @@
 +)
 +{
 +#define ONE_KEY_ENTRY_LEN_IN_DW                8
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	u8 keytbl[ONE_KEY_ENTRY_LEN_IN_DW*4] = {0};
 +	uint16_t x;
 +
@@ -5147,7 +5147,7 @@
 +		/* Don't swap below two lines, halWtblReadRaw will
 +		* write new value WF_WTBLON_TOP_WDUCR_ADDR
 +		*/
-+		bersa_wtbl_read_raw(dev, keyloc0,
++		besra_wtbl_read_raw(dev, keyloc0,
 +			WTBL_TYPE_KEY, 0, ONE_KEY_ENTRY_LEN_IN_DW, keytbl);
 +		seq_printf(s, "\t\tKEY WTBL Addr: group:0x%x=0x%x addr: 0x%x\n",
 +			MT_DBG_UWTBL_TOP_WDUCR_ADDR,
@@ -5168,7 +5168,7 @@
 +		/* Don't swap below two lines, halWtblReadRaw will
 +		* write new value WF_WTBLON_TOP_WDUCR_ADDR
 +		*/
-+		bersa_wtbl_read_raw(dev, keyloc1,
++		besra_wtbl_read_raw(dev, keyloc1,
 +			WTBL_TYPE_KEY, 0, ONE_KEY_ENTRY_LEN_IN_DW, keytbl);
 +		seq_printf(s, "\t\tKEY WTBL Addr: group:0x%x=0x%x addr: 0x%x\n",
 +			MT_DBG_UWTBL_TOP_WDUCR_ADDR,
@@ -5189,7 +5189,7 @@
 +		/* Don't swap below two lines, halWtblReadRaw will
 +		* write new value WF_WTBLON_TOP_WDUCR_ADDR
 +		*/
-+		bersa_wtbl_read_raw(dev, keyloc2,
++		besra_wtbl_read_raw(dev, keyloc2,
 +			WTBL_TYPE_KEY, 0, ONE_KEY_ENTRY_LEN_IN_DW, keytbl);
 +		seq_printf(s, "\t\tKEY WTBL Addr: group:0x%x=0x%x addr: 0x%x\n",
 +			MT_DBG_UWTBL_TOP_WDUCR_ADDR,
@@ -5304,14 +5304,14 @@
 +		(dw_value & WTBL_AMSDU_NUM_MASK) >> WTBL_AMSDU_NUM_OFFSET);
 +}
 +
-+static int bersa_wtbl_read(struct seq_file *s, void *data)
++static int besra_wtbl_read(struct seq_file *s, void *data)
 +{
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	u8 lwtbl[LWTBL_LEN_IN_DW * 4] = {0};
 +	u8 uwtbl[UWTBL_LEN_IN_DW * 4] = {0};
 +	int x;
 +
-+	bersa_wtbl_read_raw(dev, dev->wlan_idx, WTBL_TYPE_LMAC, 0,
++	besra_wtbl_read_raw(dev, dev->wlan_idx, WTBL_TYPE_LMAC, 0,
 +				 LWTBL_LEN_IN_DW, lwtbl);
 +	seq_printf(s, "Dump WTBL info of WLAN_IDX:%d\n", dev->wlan_idx);
 +	seq_printf(s, "LMAC WTBL Addr: group:0x%x=0x%x addr: 0x%lx\n",
@@ -5347,7 +5347,7 @@
 +	parse_fmac_lwtbl_dw32(s, lwtbl);
 +	parse_fmac_lwtbl_rx_stats(s, lwtbl);
 +
-+	bersa_wtbl_read_raw(dev, dev->wlan_idx, WTBL_TYPE_UMAC, 0,
++	besra_wtbl_read_raw(dev, dev->wlan_idx, WTBL_TYPE_UMAC, 0,
 +				 UWTBL_LEN_IN_DW, uwtbl);
 +	seq_printf(s, "Dump WTBL info of WLAN_IDX:%d\n", dev->wlan_idx);
 +	seq_printf(s, "UMAC WTBL Addr: group:0x%x=0x%x addr: 0x%lx\n",
@@ -5441,7 +5441,7 @@
 +};
 +
 +static void
-+dump_dma_tx_ring_info(struct seq_file *s, struct bersa_dev *dev,  char *str1, char *str2, u32 ring_base)
++dump_dma_tx_ring_info(struct seq_file *s, struct besra_dev *dev,  char *str1, char *str2, u32 ring_base)
 +{
 +	u32 base, cnt, cidx, didx, queue_cnt;
 +
@@ -5455,7 +5455,7 @@
 +}
 +
 +static void
-+dump_dma_rx_ring_info(struct seq_file *s, struct bersa_dev *dev,  char *str1, char *str2, u32 ring_base)
++dump_dma_rx_ring_info(struct seq_file *s, struct besra_dev *dev,  char *str1, char *str2, u32 ring_base)
 +{
 +	u32 base, cnt, cidx, didx, queue_cnt;
 +
@@ -5469,7 +5469,7 @@
 +}
 +
 +static void
-+bersa_show_dma_info(struct seq_file *s, struct bersa_dev *dev)
++besra_show_dma_info(struct seq_file *s, struct besra_dev *dev)
 +{
 +	u32 sys_ctrl[10];
 +
@@ -5633,9 +5633,9 @@
 +		WF_WFDMA_MEM_DMA_WPDMA_RX_RING1_CTRL0_ADDR);
 +}
 +
-+static int bersa_trinfo_read(struct seq_file *s, void *data)
++static int besra_trinfo_read(struct seq_file *s, void *data)
 +{
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	const struct queue_desc *tx_ring_layout;
 +	const struct queue_desc *rx_ring_layout;
 +	u32 tx_ring_num, rx_ring_num;
@@ -5698,15 +5698,15 @@
 +			   rbase[idx], rcnt[idx], rcidx[idx], rdidx[idx], queue_cnt);
 +	}
 +
-+	bersa_show_dma_info(s, dev);
++	besra_show_dma_info(s, dev);
 +	return 0;
 +}
 +
 +/* MIB INFO */
-+static int bersa_mibinfo_read_per_band(struct seq_file *s, int band_idx)
++static int besra_mibinfo_read_per_band(struct seq_file *s, int band_idx)
 +{
 +#define BSS_NUM	4
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	u8 bss_nums = BSS_NUM;
 +	u32 idx;
 +	u32 mac_val, band_offset = 0, band_offset_umib = 0;
@@ -5920,26 +5920,26 @@
 +	return 0;
 +}
 +
-+static int bersa_mibinfo_band0(struct seq_file *s, void *data)
++static int besra_mibinfo_band0(struct seq_file *s, void *data)
 +{
-+	bersa_mibinfo_read_per_band(s, MT_BAND0);
++	besra_mibinfo_read_per_band(s, MT_BAND0);
 +	return 0;
 +}
 +
-+static int bersa_mibinfo_band1(struct seq_file *s, void *data)
++static int besra_mibinfo_band1(struct seq_file *s, void *data)
 +{
-+	bersa_mibinfo_read_per_band(s, MT_BAND1);
++	besra_mibinfo_read_per_band(s, MT_BAND1);
 +	return 0;
 +}
 +
-+static int bersa_mibinfo_band2(struct seq_file *s, void *data)
++static int besra_mibinfo_band2(struct seq_file *s, void *data)
 +{
-+	bersa_mibinfo_read_per_band(s, MT_BAND2);
++	besra_mibinfo_read_per_band(s, MT_BAND2);
 +	return 0;
 +}
 +
 +//bmac dump txp
-+void bersa_dump_bmac_txp_info(struct bersa_dev *dev, __le32 *txp)
++void besra_dump_bmac_txp_info(struct besra_dev *dev, __le32 *txp)
 +{
 +	int i, j = 0;
 +	u32 dw;
@@ -6029,7 +6029,7 @@
 +}
 +
 +/* bmac txd dump */
-+void bersa_dump_bmac_txd_info(struct bersa_dev *dev, __le32 *txd, bool dump_txp)
++void besra_dump_bmac_txd_info(struct besra_dev *dev, __le32 *txd, bool dump_txp)
 +{
 +	/* dump stop */
 +	if (!dev->dbg.txd_read_cnt)
@@ -6233,17 +6233,17 @@
 +	if (dump_txp) {
 +		__le32 *txp = txd + 8;
 +
-+		bersa_dump_bmac_txp_info(dev, txp);
++		besra_dump_bmac_txp_info(dev, txp);
 +	}
 +}
 +
 +static void
-+bersa_dump_bmac_txd_by_fid(u32 fid)
++besra_dump_bmac_txd_by_fid(u32 fid)
 +{
 +	//TDO
 +}
 +
-+void bersa_dump_bmac_rxd_info(struct bersa_dev *dev, __le32 *rxd)
++void besra_dump_bmac_rxd_info(struct besra_dev *dev, __le32 *rxd)
 +{
 +	/* dump stop */
 +	if (!dev->dbg.rxd_read_cnt)
@@ -6439,9 +6439,9 @@
 +			le32_to_cpu(rxd[11])) : 0);
 +}
 +
-+static int bersa_token_read(struct seq_file *s, void *data)
++static int besra_token_read(struct seq_file *s, void *data)
 +{
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	int id, count = 0;
 +	struct mt76_txwi_cache *txwi;
 +
@@ -6459,9 +6459,9 @@
 +	return 0;
 +}
 +
-+static int bersa_token_txd_read(struct seq_file *s, void *data)
++static int besra_token_txd_read(struct seq_file *s, void *data)
 +{
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	struct mt76_txwi_cache *t;
 +	u8* txwi;
 +
@@ -6476,7 +6476,7 @@
 +		txwi = ((u8*)(t)) - (mdev->drv->txwi_size);
 +		/* dump one txd info */
 +		dev->dbg.txd_read_cnt = 1;
-+		bersa_dump_bmac_txd_info(dev, (__le32 *)txwi, false);
++		besra_dump_bmac_txd_info(dev, (__le32 *)txwi, false);
 +		printk("\n");
 +		printk("[SKB]\n");
 +		print_hex_dump(KERN_ERR , "", DUMP_PREFIX_OFFSET, 16, 1, (u8 *)t->skb->data, t->skb->len, false);
@@ -6486,9 +6486,9 @@
 +}
 +
 +/* AMSDU INFO */
-+static int bersa_amsdu_read(struct seq_file *s, void *data)
++static int besra_amsdu_read(struct seq_file *s, void *data)
 +{
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	u32 ple_stat[8] = {0}, total_amsdu = 0;
 +	u8 i;
 +
@@ -6513,9 +6513,9 @@
 +
 +/* AGG INFO */
 +static int
-+bersa_agginfo_read_per_band(struct seq_file *s, int band_idx)
++besra_agginfo_read_per_band(struct seq_file *s, int band_idx)
 +{
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	u64 total_burst, total_ampdu, ampdu_cnt[16];
 +	u32 value, idx, row_idx, col_idx, start_range, agg_rang_sel[16], burst_cnt[16], band_offset = 0;
 +	u8 readFW = 0, partial_str[16] = {}, full_str[64] = {};
@@ -6707,21 +6707,21 @@
 +	return 0;
 +}
 +
-+static int bersa_agginfo_read_band0(struct seq_file *s, void *data)
++static int besra_agginfo_read_band0(struct seq_file *s, void *data)
 +{
-+	bersa_agginfo_read_per_band(s, MT_BAND0);
++	besra_agginfo_read_per_band(s, MT_BAND0);
 +	return 0;
 +}
 +
-+static int bersa_agginfo_read_band1(struct seq_file *s, void *data)
++static int besra_agginfo_read_band1(struct seq_file *s, void *data)
 +{
-+	bersa_agginfo_read_per_band(s, MT_BAND1);
++	besra_agginfo_read_per_band(s, MT_BAND1);
 +	return 0;
 +}
 +
-+static int bersa_agginfo_read_band2(struct seq_file *s, void *data)
++static int besra_agginfo_read_band2(struct seq_file *s, void *data)
 +{
-+	bersa_agginfo_read_per_band(s, MT_BAND2);
++	besra_agginfo_read_per_band(s, MT_BAND2);
 +	return 0;
 +}
 +
@@ -6784,9 +6784,9 @@
 +};
 +
 +static int
-+bersa_pseinfo_read(struct seq_file *s, void *data)
++besra_pseinfo_read(struct seq_file *s, void *data)
 +{
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	u32 pse_buf_ctrl, pg_sz, pg_num;
 +	u32 pse_stat[2], pg_flow_ctrl[28] = {0};
 +	u32 fpg_cnt, ffa_cnt, fpg_head, fpg_tail;
@@ -7114,7 +7114,7 @@
 +};
 +
 +static void
-+bersa_get_ple_acq_stat(struct bersa_dev *dev, u32 *ple_stat)
++besra_get_ple_acq_stat(struct besra_dev *dev, u32 *ple_stat)
 +{
 +	ple_stat[0] = mt76_rr(dev, WF_PLE_TOP_QUEUE_EMPTY_ADDR);
 +
@@ -7160,13 +7160,13 @@
 +}
 +
 +static void
-+bersa_get_ple_txcmd_stat(struct bersa_dev *dev, u32 *ple_txcmd_stat)
++besra_get_ple_txcmd_stat(struct besra_dev *dev, u32 *ple_txcmd_stat)
 +{
 +	*ple_txcmd_stat = mt76_rr(dev, WF_PLE_TOP_NATIVE_TXCMD_QUEUE_EMPTY_ADDR);
 +}
 +
 +static void
-+bersa_get_dis_sta_map(struct bersa_dev *dev, u32 *dis_sta_map)
++besra_get_dis_sta_map(struct besra_dev *dev, u32 *dis_sta_map)
 +{
 +	dis_sta_map[0] = mt76_rr(dev, WF_PLE_TOP_DIS_STA_MAP0_ADDR);
 +	dis_sta_map[1] = mt76_rr(dev, WF_PLE_TOP_DIS_STA_MAP1_ADDR);
@@ -7180,17 +7180,17 @@
 +}
 +
 +static void
-+bersa_get_sta_pause(struct bersa_dev *dev, u32 *sta_pause)
++besra_get_sta_pause(struct besra_dev *dev, u32 *sta_pause)
 +{
 +	/* BELLWETHER TODO: Wait MIB counter API implement complete */
 +}
 +
 +static int
-+bersa_show_sta_acq_info(struct seq_file *s, u32 *ple_stat,
++besra_show_sta_acq_info(struct seq_file *s, u32 *ple_stat,
 +				   u32 *sta_pause, u32 *dis_sta_map,
 +				   u32 dumptxd)
 +{
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	int i, j;
 +	u32 total_nonempty_cnt = 0;
 +
@@ -7200,7 +7200,7 @@
 +				u32 hfid, tfid, pktcnt, ac_num = j / CR_NUM_OF_AC, ctrl = 0;
 +				u32 sta_num = i + (j % CR_NUM_OF_AC) * 32, fl_que_ctrl[3] = {0};
 +				u32 wmmidx = 0;
-+				struct bersa_sta *msta;
++				struct besra_sta *msta;
 +				struct mt76_wcid *wcid;
 +				struct ieee80211_sta *sta = NULL;
 +
@@ -7210,7 +7210,7 @@
 +					printk("ERROR!! no found STA wcid=%d\n", sta_num);
 +					return 0;
 +				}
-+				msta = container_of(wcid, struct bersa_sta, wcid);
++				msta = container_of(wcid, struct besra_sta, wcid);
 +				wmmidx = msta->vif->mt76.wmm_idx;
 +
 +				printk("\tSTA%d AC%d: ", sta_num, ac_num);
@@ -7244,7 +7244,7 @@
 +				total_nonempty_cnt++;
 +
 +				if (pktcnt > 0 && dumptxd > 0)
-+					bersa_dump_bmac_txd_by_fid(hfid);
++					besra_dump_bmac_txd_by_fid(hfid);
 +			}
 +		}
 +	}
@@ -7253,9 +7253,9 @@
 +}
 +
 +static void
-+bersa_show_txcmdq_info(struct seq_file *s, u32 ple_txcmd_stat)
++besra_show_txcmdq_info(struct seq_file *s, u32 ple_txcmd_stat)
 +{
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	int i;
 +
 +	printk("Nonempty TXCMD Q info:\n");
@@ -7290,9 +7290,9 @@
 +}
 +
 +static int
-+bersa_pleinfo_read(struct seq_file *s, void *data)
++besra_pleinfo_read(struct seq_file *s, void *data)
 +{
-+	struct bersa_dev *dev = dev_get_drvdata(s->private);
++	struct besra_dev *dev = dev_get_drvdata(s->private);
 +	u32 ple_buf_ctrl, pg_sz, pg_num;
 +	u32 ple_stat[ALL_CR_NUM_OF_ALL_AC + 1] = {0}, pg_flow_ctrl[10] = {0};
 +	u32 ple_native_txcmd_stat;
@@ -7304,9 +7304,9 @@
 +	u32 dumptxd = 1;
 +
 +	ple_buf_ctrl = mt76_rr(dev, WF_PLE_TOP_PBUF_CTRL_ADDR);
-+	bersa_get_ple_acq_stat(dev, ple_stat);
++	besra_get_ple_acq_stat(dev, ple_stat);
 +	ple_txcmd_stat = mt76_rr(dev, WF_PLE_TOP_TXCMD_QUEUE_EMPTY_ADDR);
-+	bersa_get_ple_txcmd_stat(dev, &ple_native_txcmd_stat);
++	besra_get_ple_txcmd_stat(dev, &ple_native_txcmd_stat);
 +	pg_flow_ctrl[0] = mt76_rr(dev, WF_PLE_TOP_FREEPG_CNT_ADDR);
 +	pg_flow_ctrl[1] = mt76_rr(dev, WF_PLE_TOP_FREEPG_HEAD_TAIL_ADDR);
 +	pg_flow_ctrl[2] = mt76_rr(dev, WF_PLE_TOP_PG_HIF_GROUP_ADDR);
@@ -7317,8 +7317,8 @@
 +	pg_flow_ctrl[7] = mt76_rr(dev, WF_PLE_TOP_HIF_TXCMD_PG_INFO_ADDR);
 +	pg_flow_ctrl[8] = mt76_rr(dev, WF_PLE_TOP_PG_HIF_WMTXD_GROUP_ADDR);
 +	pg_flow_ctrl[9] = mt76_rr(dev, WF_PLE_TOP_HIF_WMTXD_PG_INFO_ADDR);
-+	bersa_get_dis_sta_map(dev, dis_sta_map);
-+	bersa_get_sta_pause(dev, sta_pause);
++	besra_get_dis_sta_map(dev, dis_sta_map);
++	besra_get_sta_pause(dev, sta_pause);
 +
 +	/* Configuration Info */
 +	printk("PLE Configuration Info:\n");
@@ -7436,29 +7436,29 @@
 +					  tfid, hfid, pktcnt);
 +
 +			if (pktcnt > 0 && dumptxd > 0)
-+				bersa_dump_bmac_txd_by_fid(hfid);
++				besra_dump_bmac_txd_by_fid(hfid);
 +		}
 +	}
 +
-+	bersa_show_sta_acq_info(s, ple_stat, sta_pause, dis_sta_map, dumptxd);
-+	bersa_show_txcmdq_info(s, ple_native_txcmd_stat);
++	besra_show_sta_acq_info(s, ple_stat, sta_pause, dis_sta_map, dumptxd);
++	besra_show_txcmdq_info(s, ple_native_txcmd_stat);
 +
 +	return true;
 +}
 +
 +/* DRR */
 +static int
-+bersa_drr_info(struct seq_file *s, void *data)
++besra_drr_info(struct seq_file *s, void *data)
 +{
 +	/* BELLWETHER TODO: Wait MIB counter API implement complete */
 +	return 0;
 +}
 +
-+int bersa_mtk_init_debugfs(struct bersa_phy *phy, struct dentry *dir)
++int besra_mtk_init_debugfs(struct besra_phy *phy, struct dentry *dir)
 +{
-+	struct bersa_dev *dev = phy->dev;
++	struct besra_dev *dev = phy->dev;
 +
-+	bersa_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, 0);
++	besra_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, 0);
 +
 +	debugfs_create_file("fw_debug_module", 0600, dir, dev,
 +			    &fops_fw_debug_module);
@@ -7466,44 +7466,44 @@
 +			    &fops_fw_debug_level);
 +
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "wtbl_info", dir,
-+				    bersa_wtbl_read);
++				    besra_wtbl_read);
 +
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "tr_info", dir,
-+				    bersa_trinfo_read);
++				    besra_trinfo_read);
 +
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "drr_info", dir,
-+				    bersa_drr_info);
++				    besra_drr_info);
 +
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "ple_info", dir,
-+				    bersa_pleinfo_read);
++				    besra_pleinfo_read);
 +
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "pse_info", dir,
-+				    bersa_pseinfo_read);
++				    besra_pseinfo_read);
 +
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "mib_info0", dir,
-+				    bersa_mibinfo_band0);
++				    besra_mibinfo_band0);
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "mib_info1", dir,
-+				    bersa_mibinfo_band1);
++				    besra_mibinfo_band1);
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "mib_info2", dir,
-+				    bersa_mibinfo_band2);
++				    besra_mibinfo_band2);
 +
 +	debugfs_create_u32("token_idx", 0600, dir, &dev->dbg.token_idx);
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "token", dir,
-+				    bersa_token_read);
++				    besra_token_read);
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "token_txd", dir,
-+				    bersa_token_txd_read);
++				    besra_token_txd_read);
 +	debugfs_create_u32("txd_dump", 0600, dir, &dev->dbg.txd_read_cnt);
 +	debugfs_create_u32("rxd_dump", 0600, dir, &dev->dbg.rxd_read_cnt);
 +
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "amsdu_info", dir,
-+				    bersa_amsdu_read);
++				    besra_amsdu_read);
 +
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "agg_info0", dir,
-+				    bersa_agginfo_read_band0);
++				    besra_agginfo_read_band0);
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "agg_info1", dir,
-+				    bersa_agginfo_read_band1);
++				    besra_agginfo_read_band1);
 +	debugfs_create_devm_seqfile(dev->mt76.dev, "agg_info2", dir,
-+				    bersa_agginfo_read_band2);
++				    besra_agginfo_read_band2);
 +
 +	return 0;
 +}
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/patches/3000-mt76-remove-WED-support-patch-for-build-err.patch b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/patches/3000-mt76-remove-WED-support-patch-for-build-err.patch
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/patches/3000-mt76-remove-WED-support-patch-for-build-err.patch
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/patches/3000-mt76-remove-WED-support-patch-for-build-err.patch
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/Makefile b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/Makefile
similarity index 97%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/Makefile
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/Makefile
index 8e4f75c..a876dcc 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/Makefile
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/Makefile
@@ -36,4 +36,4 @@
 obj-$(CONFIG_MT7615_COMMON) += mt7615/
 obj-$(CONFIG_MT7915E) += mt7915/
 obj-$(CONFIG_MT7921_COMMON) += mt7921/
-obj-$(CONFIG_BERSA) += bersa/
+obj-$(CONFIG_BESRA) += besra/
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/agg-rx.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/agg-rx.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/agg-rx.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/agg-rx.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/Kconfig b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/Kconfig
similarity index 96%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/Kconfig
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/Kconfig
index f4361cc..72dcb7a 100755
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/Kconfig
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/Kconfig
@@ -1,5 +1,5 @@
 # SPDX-License-Identifier: ISC
-config BERSA
+config BESRA
 	tristate "MediaTek MT7902/MT7990 (PCIe) support"
 	select MT76_CONNAC_LIB
 	depends on MAC80211
diff --git a/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/Makefile b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/Makefile
new file mode 100755
index 0000000..a1424e3
--- /dev/null
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/Makefile
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: ISC
+
+obj-$(CONFIG_BESRA) += besra.o
+
+besra-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o \
+	     debugfs.o mmio.o
+
+besra-$(CONFIG_NL80211_TESTMODE) += testmode.o
\ No newline at end of file
diff --git a/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/besra.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/besra.h
new file mode 100644
index 0000000..0701f01
--- /dev/null
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/besra.h
@@ -0,0 +1,574 @@
+/* SPDX-License-Identifier: ISC */
+/* Copyright (C) 2020 MediaTek Inc. */
+
+#ifndef __BESRA_H
+#define __BESRA_H
+
+#include <linux/interrupt.h>
+#include <linux/ktime.h>
+#include "../mt76_connac.h"
+#include "regs.h"
+
+#define BESRA_MAX_INTERFACES		19
+#define BESRA_MAX_WMM_SETS		4
+#define BESRA_WTBL_SIZE			544
+#define BESRA_WTBL_RESERVED		201
+#define BESRA_WTBL_STA			(BESRA_WTBL_RESERVED - \
+					 BESRA_MAX_INTERFACES)
+
+#define BESRA_WATCHDOG_TIME		(HZ / 10)
+#define BESRA_RESET_TIMEOUT		(30 * HZ)
+
+#define BESRA_TX_RING_SIZE		2048
+#define BESRA_TX_MCU_RING_SIZE		256
+#define BESRA_TX_FWDL_RING_SIZE		128
+
+#define BESRA_RX_RING_SIZE		1536
+#define BESRA_RX_MCU_RING_SIZE		512
+
+#define MT7902_FIRMWARE_WA		"mediatek/mt7902_wa.bin"
+#define MT7902_FIRMWARE_WM		"mediatek/mt7902_wm.bin"
+#define MT7902_ROM_PATCH		"mediatek/mt7902_rom_patch.bin"
+#define MT7902_FIRMWARE_ROM		"mediatek/mt7902_wf_rom.bin"
+#define MT7902_FIRMWARE_ROM_SRAM	"mediatek/mt7902_wf_rom_sram.bin"
+#define MT7902_EEPROM_DEFAULT		"mediatek/mt7902_eeprom.bin"
+
+#define BESRA_EEPROM_SIZE		4096
+#define BESRA_EEPROM_BLOCK_SIZE		16
+#define BESRA_TOKEN_SIZE		8192
+
+#define BESRA_CFEND_RATE_DEFAULT	0x49	/* OFDM 24M */
+#define BESRA_CFEND_RATE_11B		0x03	/* 11B LP, 11M */
+
+#define BESRA_THERMAL_THROTTLE_MAX	100
+#define BESRA_CDEV_THROTTLE_MAX	99
+
+#define BESRA_SKU_RATE_NUM		161
+
+#define BESRA_MAX_TWT_AGRT		16
+#define BESRA_MAX_STA_TWT_AGRT		8
+#define BESRA_MAX_QUEUE		(__MT_RXQ_MAX + __MT_MCUQ_MAX + 2)
+
+struct besra_vif;
+struct besra_sta;
+struct besra_dfs_pulse;
+struct besra_dfs_pattern;
+
+enum besra_txq_id {
+	BESRA_TXQ_FWDL = 16,
+	BESRA_TXQ_MCU_WM,
+	BESRA_TXQ_BAND0,
+	BESRA_TXQ_BAND1,
+	BESRA_TXQ_MCU_WA,
+	BESRA_TXQ_BAND2,
+};
+
+enum besra_rxq_id {
+	BESRA_RXQ_MCU_WM = 0,
+	BESRA_RXQ_MCU_WA,
+	BESRA_RXQ_MCU_WA_MAIN,
+	BESRA_RXQ_MCU_WA_EXT = 2,
+	BESRA_RXQ_MCU_WA_TRI = 2,
+	BESRA_RXQ_BAND0 = 4,
+	BESRA_RXQ_BAND1,
+	BESRA_RXQ_BAND2 = 8,
+};
+
+struct besra_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 besra_sta {
+	struct mt76_wcid wcid; /* must be first */
+
+	struct besra_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 besra_twt_flow flow[BESRA_MAX_STA_TWT_AGRT];
+	} twt;
+};
+
+struct besra_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 besra_vif {
+	struct mt76_vif mt76; /* must be first */
+
+	struct besra_vif_cap cap;
+	struct besra_sta sta;
+	struct besra_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 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 besra_hif {
+	struct list_head list;
+
+	struct device *dev;
+	void __iomem *regs;
+	int irq;
+};
+
+struct besra_phy {
+	struct mt76_phy *mt76;
+	struct besra_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 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 besra_dev {
+	union { /* must be first */
+		struct mt76_dev mt76;
+		struct mt76_phy mphy;
+	};
+
+	struct besra_hif *hif2;
+	struct besra_reg_desc reg;
+	u8 q_id[BESRA_MAX_QUEUE];
+	u32 q_int_mask[BESRA_MAX_QUEUE];
+	u32 wfdma_mask;
+
+	const struct mt76_bus_ops *bus_ops;
+	struct tasklet_struct irq_tasklet;
+	struct besra_phy phy;
+
+	/* monitor rx chain configured channel */
+	struct cfg80211_chan_def rdd2_chandef;
+	struct besra_phy *rdd2_phy;
+
+	u32 chainmask;
+	u16 chain_shift_ext;
+	u16 chain_shift_tri;
+	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 tbtc_support;
+	bool flash_mode;
+	bool muru_debug;
+	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;
+
+	void *cal;
+
+	struct {
+		u8 table_mask;
+		u8 n_agrt;
+	} twt;
+};
+
+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 besra_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 besra_phy *
+besra_hw_phy(struct ieee80211_hw *hw)
+{
+	struct mt76_phy *phy = hw->priv;
+
+	return phy->priv;
+}
+
+static inline struct besra_dev *
+besra_hw_dev(struct ieee80211_hw *hw)
+{
+	struct mt76_phy *phy = hw->priv;
+
+	return container_of(phy->dev, struct besra_dev, mt76);
+}
+
+static inline struct besra_phy *
+besra_ext_phy(struct besra_dev *dev)
+{
+	struct mt76_phy *phy = dev->mt76.phy2;
+
+	if (!phy)
+		return NULL;
+
+	return phy->priv;
+}
+
+static inline struct besra_phy *
+besra_tri_phy(struct besra_dev *dev)
+{
+	struct mt76_phy *phy = dev->mt76.phy3;
+
+	if (!phy)
+		return NULL;
+
+	return phy->priv;
+}
+
+static inline u8
+besra_get_phy_id(struct besra_phy *phy)
+{
+	if (phy->mt76 == &phy->dev->mphy)
+		return MT_MAIN_PHY;
+
+	if (phy->mt76 == phy->dev->mt76.phy2)
+		return MT_EXT_PHY;
+
+	return MT_TRI_PHY;
+}
+
+extern const struct ieee80211_ops besra_ops;
+extern const struct mt76_testmode_ops besra_testmode_ops;
+extern struct pci_driver besra_pci_driver;
+extern struct pci_driver besra_hif_driver;
+
+struct besra_dev *besra_mmio_probe(struct device *pdev,
+				     void __iomem *mem_base, u32 device_id);
+void besra_wfsys_reset(struct besra_dev *dev);
+irqreturn_t besra_irq_handler(int irq, void *dev_instance);
+u64 __besra_get_tsf(struct ieee80211_hw *hw, struct besra_vif *mvif);
+int besra_register_device(struct besra_dev *dev);
+void besra_unregister_device(struct besra_dev *dev);
+int besra_eeprom_init(struct besra_dev *dev);
+void besra_eeprom_parse_hw_cap(struct besra_dev *dev,
+				struct besra_phy *phy);
+int besra_eeprom_get_target_power(struct besra_dev *dev,
+				   struct ieee80211_channel *chan,
+				   u8 chain_idx);
+s8 besra_eeprom_get_power_delta(struct besra_dev *dev, int band);
+int besra_dma_init(struct besra_dev *dev);
+void besra_dma_prefetch(struct besra_dev *dev);
+void besra_dma_cleanup(struct besra_dev *dev);
+int besra_rom_start(struct besra_dev *dev);
+int besra_mcu_init(struct besra_dev *dev);
+int besra_mcu_twt_agrt_update(struct besra_dev *dev,
+			       struct besra_vif *mvif,
+			       struct besra_twt_flow *flow,
+			       int cmd);
+int besra_mcu_add_dev_info(struct besra_phy *phy,
+			    struct ieee80211_vif *vif, bool enable);
+int besra_mcu_add_bss_info(struct besra_phy *phy,
+			    struct ieee80211_vif *vif, int enable);
+int besra_mcu_add_sta(struct besra_dev *dev, struct ieee80211_vif *vif,
+		       struct ieee80211_sta *sta, bool enable);
+int besra_mcu_add_tx_ba(struct besra_dev *dev,
+			 struct ieee80211_ampdu_params *params,
+			 bool add);
+int besra_mcu_add_rx_ba(struct besra_dev *dev,
+			 struct ieee80211_ampdu_params *params,
+			 bool add);
+int besra_mcu_update_bss_color(struct besra_dev *dev, struct ieee80211_vif *vif,
+				struct cfg80211_he_bss_color *he_bss_color);
+int besra_mcu_add_beacon(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+			  int enable);
+int besra_mcu_add_obss_spr(struct besra_dev *dev, struct ieee80211_vif *vif,
+                            bool enable);
+int besra_mcu_add_rate_ctrl(struct besra_dev *dev, struct ieee80211_vif *vif,
+			     struct ieee80211_sta *sta, bool changed);
+int besra_mcu_add_smps(struct besra_dev *dev, struct ieee80211_vif *vif,
+			struct ieee80211_sta *sta);
+int besra_set_channel(struct besra_phy *phy);
+int besra_mcu_set_chan_info(struct besra_phy *phy, int tag);
+int besra_mcu_set_tx(struct besra_dev *dev, struct ieee80211_vif *vif);
+int besra_mcu_update_edca(struct besra_dev *dev, void *req);
+int besra_mcu_set_fixed_rate_ctrl(struct besra_dev *dev,
+				   struct ieee80211_vif *vif,
+				   struct ieee80211_sta *sta,
+				   void *data, u32 field);
+int besra_mcu_set_eeprom(struct besra_dev *dev);
+int besra_mcu_get_eeprom(struct besra_dev *dev, u32 offset);
+int besra_mcu_get_eeprom_free_block(struct besra_dev *dev, u8 *block_num);
+int besra_mcu_set_test_param(struct besra_dev *dev, u8 param, bool test_mode,
+			      u8 en);
+int besra_mcu_set_ser(struct besra_dev *dev, u8 action, u8 set, u8 band);
+int besra_mcu_set_sku_en(struct besra_phy *phy, bool enable);
+int besra_mcu_set_txpower_sku(struct besra_phy *phy);
+int besra_mcu_get_txpower_sku(struct besra_phy *phy, s8 *txpower, int len);
+int besra_mcu_set_txbf(struct besra_dev *dev, u8 action);
+int besra_mcu_set_fcc5_lpn(struct besra_dev *dev, int val);
+int besra_mcu_set_pulse_th(struct besra_dev *dev,
+			    const struct besra_dfs_pulse *pulse);
+int besra_mcu_set_radar_th(struct besra_dev *dev, int index,
+			    const struct besra_dfs_pattern *pattern);
+int besra_mcu_set_radio_en(struct besra_phy *phy, bool enable);
+void besra_mcu_set_pm(void *priv, u8 *mac, struct ieee80211_vif *vif);
+int besra_mcu_set_rts_thresh(struct besra_phy *phy, u32 val);
+int besra_mcu_set_edcca_thresh(struct besra_phy *phy);
+int besra_mcu_set_edcca_en(struct besra_phy *phy, bool enable);
+int besra_mcu_set_muru_ctrl(struct besra_dev *dev, u32 cmd, u32 val);
+int besra_mcu_apply_group_cal(struct besra_dev *dev);
+int besra_mcu_apply_tx_dpd(struct besra_phy *phy);
+int besra_mcu_get_chan_mib_info(struct besra_phy *phy, bool chan_switch);
+int besra_mcu_get_temperature(struct besra_phy *phy);
+int besra_mcu_set_thermal_throttling(struct besra_phy *phy, u8 state);
+int besra_mcu_get_rx_rate(struct besra_phy *phy, struct ieee80211_vif *vif,
+			   struct ieee80211_sta *sta, struct rate_info *rate);
+int besra_mcu_rdd_cmd(struct besra_dev *dev, int cmd, u8 index,
+		      u8 rx_sel, u8 val);
+int besra_mcu_rdd_background_enable(struct besra_phy *phy,
+				     struct cfg80211_chan_def *chandef);
+int besra_mcu_rf_regval(struct besra_dev *dev, u32 regidx, u32 *val, bool set);
+int besra_mcu_wa_cmd(struct besra_dev *dev, int cmd, u32 a1, u32 a2, u32 a3);
+int besra_mcu_fw_log_2_host(struct besra_dev *dev, u8 type, u8 ctrl);
+int besra_mcu_fw_dbg_ctrl(struct besra_dev *dev, u32 module, u8 level);
+void besra_mcu_rx_event(struct besra_dev *dev, struct sk_buff *skb);
+void besra_mcu_exit(struct besra_dev *dev);
+int besra_mcu_set_hdr_trans(struct besra_dev *dev, bool hdr_trans);
+
+void besra_dual_hif_set_irq_mask(struct besra_dev *dev, bool write_reg,
+				  u32 clear, u32 set);
+
+static inline void besra_irq_enable(struct besra_dev *dev, u32 mask)
+{
+	if (dev->hif2)
+		besra_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 besra_irq_disable(struct besra_dev *dev, u32 mask)
+{
+	if (dev->hif2)
+		besra_dual_hif_set_irq_mask(dev, true, mask, 0);
+	else
+		mt76_set_irq_mask(&dev->mt76, MT_INT_MASK_CSR, mask, 0);
+}
+
+u32 besra_mac_wtbl_lmac_addr(struct besra_dev *dev, u16 wcid, u8 dw);
+bool besra_mac_wtbl_update(struct besra_dev *dev, int idx, u32 mask);
+void besra_mac_reset_counters(struct besra_phy *phy);
+void besra_mac_cca_stats_reset(struct besra_phy *phy);
+void besra_mac_enable_nf(struct besra_dev *dev, u8 band);
+void besra_mac_write_txwi(struct besra_dev *dev, __le32 *txwi,
+			   struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
+			   struct ieee80211_key_conf *key, bool beacon);
+void besra_mac_set_timing(struct besra_phy *phy);
+int besra_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
+		       struct ieee80211_sta *sta);
+void besra_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
+			   struct ieee80211_sta *sta);
+void besra_mac_work(struct work_struct *work);
+void besra_mac_reset_work(struct work_struct *work);
+void besra_mac_sta_rc_work(struct work_struct *work);
+void besra_mac_update_stats(struct besra_phy *phy);
+void besra_mac_twt_teardown_flow(struct besra_dev *dev,
+				  struct besra_sta *msta,
+				  u8 flowid);
+void besra_mac_add_twt_setup(struct ieee80211_hw *hw,
+			      struct ieee80211_sta *sta,
+			      struct ieee80211_twt_setup *twt);
+int besra_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 besra_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e);
+void besra_tx_token_put(struct besra_dev *dev);
+int besra_init_tx_queues(struct besra_phy *phy, int idx, int n_desc, int ring_base);
+void besra_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
+			 struct sk_buff *skb);
+bool besra_rx_check(struct mt76_dev *mdev, enum mt76_rxq_id q, void *data, int len);
+void besra_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps);
+void besra_stats_work(struct work_struct *work);
+int mt76_dfs_start_rdd(struct besra_dev *dev, bool force);
+int besra_dfs_init_radar_detector(struct besra_phy *phy);
+void besra_set_stream_he_caps(struct besra_phy *phy);
+void besra_set_stream_vht_txbf_caps(struct besra_phy *phy);
+void besra_update_channel(struct mt76_phy *mphy);
+int besra_mcu_muru_debug_set(struct besra_dev *dev, bool enable);
+int besra_mcu_muru_debug_get(struct besra_phy *phy, void *ms);
+int besra_init_debugfs(struct besra_phy *phy);
+void besra_debugfs_rx_fw_monitor(struct besra_dev *dev, const void *data, int len);
+bool besra_debugfs_rx_log(struct besra_dev *dev, const void *data, int len);
+int besra_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 besra_mcu_wtbl_update_hdr_trans(struct besra_dev *dev,
+			struct ieee80211_vif *vif, struct ieee80211_sta *sta);
+#ifdef CONFIG_MAC80211_DEBUGFS
+void besra_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/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/debugfs.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/debugfs.c
similarity index 77%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/debugfs.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/debugfs.c
index 4be253e..48305df 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/debugfs.c
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/debugfs.c
@@ -2,7 +2,7 @@
 /* Copyright (C) 2020 MediaTek Inc. */
 
 #include <linux/relay.h>
-#include "bersa.h"
+#include "besra.h"
 #include "eeprom.h"
 #include "mcu.h"
 #include "mac.h"
@@ -19,33 +19,33 @@
 };
 
 static int
-bersa_implicit_txbf_set(void *data, u64 val)
+besra_implicit_txbf_set(void *data, u64 val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 
 	if (test_bit(MT76_STATE_RUNNING, &dev->mphy.state))
 		return -EBUSY;
 
 	dev->ibf = !!val;
 
-	return bersa_mcu_set_txbf(dev, MT_BF_TYPE_UPDATE);
+	return besra_mcu_set_txbf(dev, MT_BF_TYPE_UPDATE);
 }
 
 static int
-bersa_implicit_txbf_get(void *data, u64 *val)
+besra_implicit_txbf_get(void *data, u64 *val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 
 	*val = dev->ibf;
 
 	return 0;
 }
 
-DEFINE_DEBUGFS_ATTRIBUTE(fops_implicit_txbf, bersa_implicit_txbf_get,
-			 bersa_implicit_txbf_set, "%lld\n");
+DEFINE_DEBUGFS_ATTRIBUTE(fops_implicit_txbf, besra_implicit_txbf_get,
+			 besra_implicit_txbf_set, "%lld\n");
 
 /* test knob of system layer 1/2 error recovery */
-static int bersa_ser_trigger_set(void *data, u64 val)
+static int besra_ser_trigger_set(void *data, u64 val)
 {
 	enum {
 		SER_SET_RECOVER_L1 = 1,
@@ -53,17 +53,17 @@
 		SER_ENABLE = 2,
 		SER_RECOVER
 	};
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 	int ret = 0;
 
 	switch (val) {
 	case SER_SET_RECOVER_L1:
 	case SER_SET_RECOVER_L2:
-		ret = bersa_mcu_set_ser(dev, SER_ENABLE, BIT(val), 0);
+		ret = besra_mcu_set_ser(dev, SER_ENABLE, BIT(val), 0);
 		if (ret)
 			return ret;
 
-		return bersa_mcu_set_ser(dev, SER_RECOVER, val, 0);
+		return besra_mcu_set_ser(dev, SER_RECOVER, val, 0);
 	default:
 		break;
 	}
@@ -72,52 +72,52 @@
 }
 
 DEFINE_DEBUGFS_ATTRIBUTE(fops_ser_trigger, NULL,
-			 bersa_ser_trigger_set, "%lld\n");
+			 besra_ser_trigger_set, "%lld\n");
 
 static int
-bersa_radar_trigger(void *data, u64 val)
+besra_radar_trigger(void *data, u64 val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 
 	if (val > MT_RX_SEL2)
 		return -EINVAL;
 
-	return bersa_mcu_rdd_cmd(dev, RDD_RADAR_EMULATE,
+	return besra_mcu_rdd_cmd(dev, RDD_RADAR_EMULATE,
 				 val, 0, 0);
 }
 
 DEFINE_DEBUGFS_ATTRIBUTE(fops_radar_trigger, NULL,
-			 bersa_radar_trigger, "%lld\n");
+			 besra_radar_trigger, "%lld\n");
 
 static int
-bersa_muru_debug_set(void *data, u64 val)
+besra_muru_debug_set(void *data, u64 val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 
 	dev->muru_debug = val;
-	bersa_mcu_muru_debug_set(dev, dev->muru_debug);
+	besra_mcu_muru_debug_set(dev, dev->muru_debug);
 
 	return 0;
 }
 
 static int
-bersa_muru_debug_get(void *data, u64 *val)
+besra_muru_debug_get(void *data, u64 *val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 
 	*val = dev->muru_debug;
 
 	return 0;
 }
 
-DEFINE_DEBUGFS_ATTRIBUTE(fops_muru_debug, bersa_muru_debug_get,
-			 bersa_muru_debug_set, "%lld\n");
+DEFINE_DEBUGFS_ATTRIBUTE(fops_muru_debug, besra_muru_debug_get,
+			 besra_muru_debug_set, "%lld\n");
 
-static int bersa_muru_stats_show(struct seq_file *file, void *data)
+static int besra_muru_stats_show(struct seq_file *file, void *data)
 {
-	struct bersa_phy *phy = file->private;
-	struct bersa_dev *dev = phy->dev;
-	struct bersa_mcu_muru_stats mu_stats = {};
+	struct besra_phy *phy = file->private;
+	struct besra_dev *dev = phy->dev;
+	struct besra_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"
@@ -141,7 +141,7 @@
 
 	mutex_lock(&dev->mt76.mutex);
 
-	ret = bersa_mcu_muru_debug_get(phy, &mu_stats);
+	ret = besra_mcu_muru_debug_get(phy, &mu_stats);
 	if (ret)
 		goto exit;
 
@@ -306,12 +306,12 @@
 
 	return ret;
 }
-DEFINE_SHOW_ATTRIBUTE(bersa_muru_stats);
+DEFINE_SHOW_ATTRIBUTE(besra_muru_stats);
 
 static int
-bersa_rdd_monitor(struct seq_file *s, void *data)
+besra_rdd_monitor(struct seq_file *s, void *data)
 {
-	struct bersa_dev *dev = dev_get_drvdata(s->private);
+	struct besra_dev *dev = dev_get_drvdata(s->private);
 	struct cfg80211_chan_def *chandef = &dev->rdd2_chandef;
 	const char *bw;
 	int ret = 0;
@@ -356,9 +356,9 @@
 }
 
 static int
-bersa_fw_debug_wm_set(void *data, u64 val)
+besra_fw_debug_wm_set(void *data, u64 val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 	enum {
 		DEBUG_TXCMD = 62,
 		DEBUG_CMD_RPT_TX,
@@ -381,7 +381,7 @@
 	rx = dev->fw_debug_wm || (dev->fw_debug_bin & BIT(2));
 	en = dev->fw_debug_wm || (dev->fw_debug_bin & BIT(0));
 
-	ret = bersa_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, val);
+	ret = besra_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, val);
 	if (ret)
 		return ret;
 
@@ -394,7 +394,7 @@
 		else
 			val = en && tx;
 
-		ret = bersa_mcu_fw_dbg_ctrl(dev, debug, val);
+		ret = besra_mcu_fw_dbg_ctrl(dev, debug, val);
 		if (ret)
 			return ret;
 	}
@@ -410,46 +410,46 @@
 }
 
 static int
-bersa_fw_debug_wm_get(void *data, u64 *val)
+besra_fw_debug_wm_get(void *data, u64 *val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 
 	*val = dev->fw_debug_wm;
 
 	return 0;
 }
 
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_wm, bersa_fw_debug_wm_get,
-			 bersa_fw_debug_wm_set, "%lld\n");
+DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_wm, besra_fw_debug_wm_get,
+			 besra_fw_debug_wm_set, "%lld\n");
 
 static int
-bersa_fw_debug_wa_set(void *data, u64 val)
+besra_fw_debug_wa_set(void *data, u64 val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 	int ret;
 
 	dev->fw_debug_wa = val ? MCU_FW_LOG_TO_HOST : 0;
 
-	ret = bersa_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, dev->fw_debug_wa);
+	ret = besra_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, dev->fw_debug_wa);
 	if (ret)
 		return ret;
 
-	return bersa_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET), MCU_WA_PARAM_PDMA_RX,
+	return besra_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET), MCU_WA_PARAM_PDMA_RX,
 				 !!dev->fw_debug_wa, 0);
 }
 
 static int
-bersa_fw_debug_wa_get(void *data, u64 *val)
+besra_fw_debug_wa_get(void *data, u64 *val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 
 	*val = dev->fw_debug_wa;
 
 	return 0;
 }
 
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_wa, bersa_fw_debug_wa_get,
-			 bersa_fw_debug_wa_set, "%lld\n");
+DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_wa, besra_fw_debug_wa_get,
+			 besra_fw_debug_wa_set, "%lld\n");
 
 static struct dentry *
 create_buf_file_cb(const char *filename, struct dentry *parent, umode_t mode,
@@ -476,13 +476,13 @@
 }
 
 static int
-bersa_fw_debug_bin_set(void *data, u64 val)
+besra_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 bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 
 	if (!dev->relay_fwlog)
 		dev->relay_fwlog = relay_open("fwlog_data", dev->debugfs_dir,
@@ -494,26 +494,26 @@
 
 	relay_reset(dev->relay_fwlog);
 
-	return bersa_fw_debug_wm_set(dev, dev->fw_debug_wm);
+	return besra_fw_debug_wm_set(dev, dev->fw_debug_wm);
 }
 
 static int
-bersa_fw_debug_bin_get(void *data, u64 *val)
+besra_fw_debug_bin_get(void *data, u64 *val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 
 	*val = dev->fw_debug_bin;
 
 	return 0;
 }
 
-DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_bin, bersa_fw_debug_bin_get,
-			 bersa_fw_debug_bin_set, "%lld\n");
+DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_bin, besra_fw_debug_bin_get,
+			 besra_fw_debug_bin_set, "%lld\n");
 
 static int
-bersa_fw_util_wm_show(struct seq_file *file, void *data)
+besra_fw_util_wm_show(struct seq_file *file, void *data)
 {
-	struct bersa_dev *dev = file->private;
+	struct besra_dev *dev = file->private;
 
 	if (dev->fw_debug_wm) {
 		seq_printf(file, "Busy: %u%%  Peak busy: %u%%\n",
@@ -527,27 +527,27 @@
 	return 0;
 }
 
-DEFINE_SHOW_ATTRIBUTE(bersa_fw_util_wm);
+DEFINE_SHOW_ATTRIBUTE(besra_fw_util_wm);
 
 static int
-bersa_fw_util_wa_show(struct seq_file *file, void *data)
+besra_fw_util_wa_show(struct seq_file *file, void *data)
 {
-	struct bersa_dev *dev = file->private;
+	struct besra_dev *dev = file->private;
 
 	if (dev->fw_debug_wa)
-		return bersa_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(QUERY),
+		return besra_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(QUERY),
 					 MCU_WA_PARAM_CPU_UTIL, 0, 0);
 
 	return 0;
 }
 
-DEFINE_SHOW_ATTRIBUTE(bersa_fw_util_wa);
+DEFINE_SHOW_ATTRIBUTE(besra_fw_util_wa);
 
 static void
-bersa_ampdu_stat_read_phy(struct bersa_phy *phy,
+besra_ampdu_stat_read_phy(struct besra_phy *phy,
 			   struct seq_file *file)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	int bound[15], range[4], i, n;
 
 	/* Tx ampdu stat */
@@ -574,7 +574,7 @@
 }
 
 static void
-bersa_txbf_stat_read_phy(struct bersa_phy *phy, struct seq_file *s)
+besra_txbf_stat_read_phy(struct besra_phy *phy, struct seq_file *s)
 {
 	static const char * const bw[] = {
 		"BW20", "BW40", "BW80", "BW160"
@@ -621,18 +621,18 @@
 }
 
 static int
-bersa_tx_stats_show(struct seq_file *file, void *data)
+besra_tx_stats_show(struct seq_file *file, void *data)
 {
-	struct bersa_phy *phy = file->private;
-	struct bersa_dev *dev = phy->dev;
+	struct besra_phy *phy = file->private;
+	struct besra_dev *dev = phy->dev;
 	struct mib_stats *mib = &phy->mib;
 	int i;
 
 	mutex_lock(&dev->mt76.mutex);
 
-	bersa_ampdu_stat_read_phy(phy, file);
-	bersa_mac_update_stats(phy);
-	bersa_txbf_stat_read_phy(phy, file);
+	besra_ampdu_stat_read_phy(phy, file);
+	besra_mac_update_stats(phy);
+	besra_txbf_stat_read_phy(phy, file);
 
 	/* Tx amsdu info */
 	seq_puts(file, "Tx MSDU statistics:\n");
@@ -651,14 +651,14 @@
 	return 0;
 }
 
-DEFINE_SHOW_ATTRIBUTE(bersa_tx_stats);
+DEFINE_SHOW_ATTRIBUTE(besra_tx_stats);
 
 static void
-bersa_hw_queue_read(struct seq_file *s, u32 size,
+besra_hw_queue_read(struct seq_file *s, u32 size,
 		     const struct hw_queue_map *map)
 {
-	struct bersa_phy *phy = s->private;
-	struct bersa_dev *dev = phy->dev;
+	struct besra_phy *phy = s->private;
+	struct besra_dev *dev = phy->dev;
 	u32 i, val;
 
 	val = mt76_rr(dev, MT_FL_Q_EMPTY);
@@ -685,10 +685,10 @@
 }
 
 static void
-bersa_sta_hw_queue_read(void *data, struct ieee80211_sta *sta)
+besra_sta_hw_queue_read(void *data, struct ieee80211_sta *sta)
 {
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
-	struct bersa_dev *dev = msta->vif->phy->dev;
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
+	struct besra_dev *dev = msta->vif->phy->dev;
 	struct seq_file *s = data;
 	u8 ac;
 
@@ -713,10 +713,10 @@
 }
 
 static int
-bersa_hw_queues_show(struct seq_file *file, void *data)
+besra_hw_queues_show(struct seq_file *file, void *data)
 {
-	struct bersa_phy *phy = file->private;
-	struct bersa_dev *dev = phy->dev;
+	struct besra_phy *phy = file->private;
+	struct besra_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	      },
@@ -766,27 +766,27 @@
 		   val, head, tail);
 
 	seq_puts(file, "PLE non-empty queue info:\n");
-	bersa_hw_queue_read(file, ARRAY_SIZE(ple_queue_map),
+	besra_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,
-					  bersa_sta_hw_queue_read, file);
+					  besra_sta_hw_queue_read, file);
 	/* pse queue */
 	seq_puts(file, "PSE non-empty queue info:\n");
-	bersa_hw_queue_read(file, ARRAY_SIZE(pse_queue_map),
+	besra_hw_queue_read(file, ARRAY_SIZE(pse_queue_map),
 			     &pse_queue_map[0]);
 
 	return 0;
 }
 
-DEFINE_SHOW_ATTRIBUTE(bersa_hw_queues);
+DEFINE_SHOW_ATTRIBUTE(besra_hw_queues);
 
 static int
-bersa_xmit_queues_show(struct seq_file *file, void *data)
+besra_xmit_queues_show(struct seq_file *file, void *data)
 {
-	struct bersa_phy *phy = file->private;
-	struct bersa_dev *dev = phy->dev;
+	struct besra_phy *phy = file->private;
+	struct besra_dev *dev = phy->dev;
 	struct {
 		struct mt76_queue *q;
 		char *queue;
@@ -813,10 +813,10 @@
 	return 0;
 }
 
-DEFINE_SHOW_ATTRIBUTE(bersa_xmit_queues);
+DEFINE_SHOW_ATTRIBUTE(besra_xmit_queues);
 
 static int
-bersa_rate_txpower_show(struct seq_file *file, void *data)
+besra_rate_txpower_show(struct seq_file *file, void *data)
 {
 	static const char * const sku_group_name[] = {
 		"CCK", "OFDM", "HT20", "HT40",
@@ -824,32 +824,32 @@
 		"RU26", "RU52", "RU106", "RU242/SU20",
 		"RU484/SU40", "RU996/SU80", "RU2x996/SU160"
 	};
-	struct bersa_phy *phy = file->private;
-	s8 txpower[BERSA_SKU_RATE_NUM], *buf;
+	struct besra_phy *phy = file->private;
+	s8 txpower[BESRA_SKU_RATE_NUM], *buf;
 	int i;
 
 	seq_printf(file, "\nBand %d\n", phy->band_idx);
-	bersa_mcu_get_txpower_sku(phy, txpower, sizeof(txpower));
-	for (i = 0, buf = txpower; i < ARRAY_SIZE(bersa_sku_group_len); i++) {
-		u8 mcs_num = bersa_sku_group_len[i];
+	besra_mcu_get_txpower_sku(phy, txpower, sizeof(txpower));
+	for (i = 0, buf = txpower; i < ARRAY_SIZE(besra_sku_group_len); i++) {
+		u8 mcs_num = besra_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 += bersa_sku_group_len[i];
+		buf += besra_sku_group_len[i];
 	}
 
 	return 0;
 }
 
-DEFINE_SHOW_ATTRIBUTE(bersa_rate_txpower);
+DEFINE_SHOW_ATTRIBUTE(besra_rate_txpower);
 
 static int
-bersa_twt_stats(struct seq_file *s, void *data)
+besra_twt_stats(struct seq_file *s, void *data)
 {
-	struct bersa_dev *dev = dev_get_drvdata(s->private);
-	struct bersa_twt_flow *iter;
+	struct besra_dev *dev = dev_get_drvdata(s->private);
+	struct besra_twt_flow *iter;
 
 	rcu_read_lock();
 
@@ -875,13 +875,13 @@
  * WF selection [31:28] and offset [27:0].
  */
 static int
-bersa_rf_regval_get(void *data, u64 *val)
+besra_rf_regval_get(void *data, u64 *val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 	u32 regval;
 	int ret;
 
-	ret = bersa_mcu_rf_regval(dev, dev->mt76.debugfs_reg, &regval, false);
+	ret = besra_mcu_rf_regval(dev, dev->mt76.debugfs_reg, &regval, false);
 	if (ret)
 		return ret;
 
@@ -891,19 +891,19 @@
 }
 
 static int
-bersa_rf_regval_set(void *data, u64 val)
+besra_rf_regval_set(void *data, u64 val)
 {
-	struct bersa_dev *dev = data;
+	struct besra_dev *dev = data;
 
-	return bersa_mcu_rf_regval(dev, dev->mt76.debugfs_reg, (u32 *)&val, true);
+	return besra_mcu_rf_regval(dev, dev->mt76.debugfs_reg, (u32 *)&val, true);
 }
 
-DEFINE_DEBUGFS_ATTRIBUTE(fops_rf_regval, bersa_rf_regval_get,
-			 bersa_rf_regval_set, "0x%08llx\n");
+DEFINE_DEBUGFS_ATTRIBUTE(fops_rf_regval, besra_rf_regval_get,
+			 besra_rf_regval_set, "0x%08llx\n");
 
-int bersa_init_debugfs(struct bersa_phy *phy)
+int besra_init_debugfs(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	struct dentry *dir;
 
 	dir = mt76_register_debugfs_fops(phy->mt76, NULL);
@@ -911,25 +911,25 @@
 		return -ENOMEM;
 	debugfs_create_file("muru_debug", 0600, dir, dev, &fops_muru_debug);
 	debugfs_create_file("muru_stats", 0400, dir, phy,
-			    &bersa_muru_stats_fops);
+			    &besra_muru_stats_fops);
 	debugfs_create_file("hw-queues", 0400, dir, phy,
-			    &bersa_hw_queues_fops);
+			    &besra_hw_queues_fops);
 	debugfs_create_file("xmit-queues", 0400, dir, phy,
-			    &bersa_xmit_queues_fops);
-	debugfs_create_file("tx_stats", 0400, dir, phy, &bersa_tx_stats_fops);
+			    &besra_xmit_queues_fops);
+	debugfs_create_file("tx_stats", 0400, dir, phy, &besra_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);
 	debugfs_create_file("fw_util_wm", 0400, dir, dev,
-			    &bersa_fw_util_wm_fops);
+			    &besra_fw_util_wm_fops);
 	debugfs_create_file("fw_util_wa", 0400, dir, dev,
-			    &bersa_fw_util_wa_fops);
+			    &besra_fw_util_wa_fops);
 	debugfs_create_file("implicit_txbf", 0600, dir, dev,
 			    &fops_implicit_txbf);
 	debugfs_create_file("txpower_sku", 0400, dir, phy,
-			    &bersa_rate_txpower_fops);
+			    &besra_rate_txpower_fops);
 	debugfs_create_devm_seqfile(dev->mt76.dev, "twt_stats", dir,
-				    bersa_twt_stats);
+				    besra_twt_stats);
 	debugfs_create_file("ser_trigger", 0200, dir, dev, &fops_ser_trigger);
 	debugfs_create_file("rf_regval", 0600, dir, dev, &fops_rf_regval);
 
@@ -939,7 +939,7 @@
 		debugfs_create_file("radar_trigger", 0200, dir, dev,
 				    &fops_radar_trigger);
 		debugfs_create_devm_seqfile(dev->mt76.dev, "rdd_monitor", dir,
-					    bersa_rdd_monitor);
+					    besra_rdd_monitor);
 	}
 
 	if (phy == &dev->phy)
@@ -949,7 +949,7 @@
 }
 
 static void
-bersa_debugfs_write_fwlog(struct bersa_dev *dev, const void *hdr, int hdrlen,
+besra_debugfs_write_fwlog(struct besra_dev *dev, const void *hdr, int hdrlen,
 			 const void *data, int len)
 {
 	static DEFINE_SPINLOCK(lock);
@@ -973,7 +973,7 @@
 	spin_unlock_irqrestore(&lock, flags);
 }
 
-void bersa_debugfs_rx_fw_monitor(struct bersa_dev *dev, const void *data, int len)
+void besra_debugfs_rx_fw_monitor(struct besra_dev *dev, const void *data, int len)
 {
 	struct {
 		__le32 magic;
@@ -995,16 +995,16 @@
 	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;
-	bersa_debugfs_write_fwlog(dev, &hdr, sizeof(hdr), data, len);
+	besra_debugfs_write_fwlog(dev, &hdr, sizeof(hdr), data, len);
 }
 
-bool bersa_debugfs_rx_log(struct bersa_dev *dev, const void *data, int len)
+bool besra_debugfs_rx_log(struct besra_dev *dev, const void *data, int len)
 {
 	if (get_unaligned_le32(data) != FW_BIN_LOG_MAGIC)
 		return false;
 
 	if (dev->relay_fwlog)
-		bersa_debugfs_write_fwlog(dev, NULL, 0, data, len);
+		besra_debugfs_write_fwlog(dev, NULL, 0, data, len);
 
 	return true;
 }
@@ -1012,13 +1012,13 @@
 #ifdef CONFIG_MAC80211_DEBUGFS
 /** per-station debugfs **/
 
-static ssize_t bersa_sta_fixed_rate_set(struct file *file,
+static ssize_t besra_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 bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
-	struct bersa_dev *dev = msta->vif->phy->dev;
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
+	struct besra_dev *dev = msta->vif->phy->dev;
 	struct ieee80211_vif *vif;
 	struct sta_phy phy = {};
 	char buf[100];
@@ -1064,7 +1064,7 @@
 
 out:
 	vif = container_of((void *)msta->vif, struct ieee80211_vif, drv_priv);
-	ret = bersa_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy, field);
+	ret = besra_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy, field);
 	if (ret)
 		return -EFAULT;
 
@@ -1072,29 +1072,29 @@
 }
 
 static const struct file_operations fops_fixed_rate = {
-	.write = bersa_sta_fixed_rate_set,
+	.write = besra_sta_fixed_rate_set,
 	.open = simple_open,
 	.owner = THIS_MODULE,
 	.llseek = default_llseek,
 };
 
 static int
-bersa_queues_show(struct seq_file *s, void *data)
+besra_queues_show(struct seq_file *s, void *data)
 {
 	struct ieee80211_sta *sta = s->private;
 
-	bersa_sta_hw_queue_read(s, sta);
+	besra_sta_hw_queue_read(s, sta);
 
 	return 0;
 }
 
-DEFINE_SHOW_ATTRIBUTE(bersa_queues);
+DEFINE_SHOW_ATTRIBUTE(besra_queues);
 
-void bersa_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+void besra_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, &bersa_queues_fops);
+	debugfs_create_file("hw-queues", 0400, dir, sta, &besra_queues_fops);
 }
 
 #endif
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/dma.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/dma.c
similarity index 77%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/dma.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/dma.c
index 50b955d..e042262 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/dma.c
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/dma.c
@@ -1,11 +1,11 @@
 // SPDX-License-Identifier: ISC
 /* Copyright (C) 2020 MediaTek Inc. */
 
-#include "bersa.h"
+#include "besra.h"
 #include "../dma.h"
 #include "mac.h"
 
-int bersa_init_tx_queues(struct bersa_phy *phy, int idx, int n_desc, int ring_base)
+int besra_init_tx_queues(struct besra_phy *phy, int idx, int n_desc, int ring_base)
 {
 	int i, err;
 
@@ -20,22 +20,22 @@
 }
 
 static void
-bersa_tx_cleanup(struct bersa_dev *dev)
+besra_tx_cleanup(struct besra_dev *dev)
 {
 	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WM], false);
 	mt76_queue_tx_cleanup(dev, dev->mt76.q_mcu[MT_MCUQ_WA], false);
 }
 
-static int bersa_poll_tx(struct napi_struct *napi, int budget)
+static int besra_poll_tx(struct napi_struct *napi, int budget)
 {
-	struct bersa_dev *dev;
+	struct besra_dev *dev;
 
-	dev = container_of(napi, struct bersa_dev, mt76.tx_napi);
+	dev = container_of(napi, struct besra_dev, mt76.tx_napi);
 
-	bersa_tx_cleanup(dev);
+	besra_tx_cleanup(dev);
 
 	if (napi_complete_done(napi, 0))
-		bersa_irq_enable(dev, MT_INT_TX_DONE_MCU);
+		besra_irq_enable(dev, MT_INT_TX_DONE_MCU);
 
 	return 0;
 }
@@ -51,27 +51,27 @@
 #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))
 
-static void bersa_dma_config(struct bersa_dev *dev)
+static void besra_dma_config(struct besra_dev *dev)
 {
-	RXQ_CONFIG(MT_RXQ_MAIN, WFDMA0, MT_INT_RX_DONE_BAND0, BERSA_RXQ_BAND0);
-	RXQ_CONFIG(MT_RXQ_MCU, WFDMA0, MT_INT_RX_DONE_WM, BERSA_RXQ_MCU_WM);
-	RXQ_CONFIG(MT_RXQ_MCU_WA, WFDMA0, MT_INT_RX_DONE_WA, BERSA_RXQ_MCU_WA);
-	RXQ_CONFIG(MT_RXQ_EXT, WFDMA0, MT_INT_RX_DONE_BAND1, BERSA_RXQ_BAND1);
-	RXQ_CONFIG(MT_RXQ_EXT_WA, WFDMA0, MT_INT_RX_DONE_WA_EXT, BERSA_RXQ_MCU_WA_EXT);
-	RXQ_CONFIG(MT_RXQ_MAIN_WA, WFDMA0, MT_INT_RX_DONE_WA_MAIN, BERSA_RXQ_MCU_WA_MAIN);
-	RXQ_CONFIG(MT_RXQ_TRI, WFDMA0, MT_INT_RX_DONE_BAND2, BERSA_RXQ_BAND2);
-	RXQ_CONFIG(MT_RXQ_TRI_WA, WFDMA0, MT_INT_RX_DONE_WA_TRI, BERSA_RXQ_MCU_WA_TRI);
+	RXQ_CONFIG(MT_RXQ_MAIN, WFDMA0, MT_INT_RX_DONE_BAND0, BESRA_RXQ_BAND0);
+	RXQ_CONFIG(MT_RXQ_MCU, WFDMA0, MT_INT_RX_DONE_WM, BESRA_RXQ_MCU_WM);
+	RXQ_CONFIG(MT_RXQ_MCU_WA, WFDMA0, MT_INT_RX_DONE_WA, BESRA_RXQ_MCU_WA);
+	RXQ_CONFIG(MT_RXQ_EXT, WFDMA0, MT_INT_RX_DONE_BAND1, BESRA_RXQ_BAND1);
+	RXQ_CONFIG(MT_RXQ_EXT_WA, WFDMA0, MT_INT_RX_DONE_WA_EXT, BESRA_RXQ_MCU_WA_EXT);
+	RXQ_CONFIG(MT_RXQ_MAIN_WA, WFDMA0, MT_INT_RX_DONE_WA_MAIN, BESRA_RXQ_MCU_WA_MAIN);
+	RXQ_CONFIG(MT_RXQ_TRI, WFDMA0, MT_INT_RX_DONE_BAND2, BESRA_RXQ_BAND2);
+	RXQ_CONFIG(MT_RXQ_TRI_WA, WFDMA0, MT_INT_RX_DONE_WA_TRI, BESRA_RXQ_MCU_WA_TRI);
 
-	TXQ_CONFIG(0, WFDMA0, MT_INT_TX_DONE_BAND0, BERSA_TXQ_BAND0);
-	TXQ_CONFIG(1, WFDMA0, MT_INT_TX_DONE_BAND1, BERSA_TXQ_BAND1);
-	TXQ_CONFIG(2, WFDMA0, MT_INT_TX_DONE_BAND2, BERSA_TXQ_BAND2);
+	TXQ_CONFIG(0, WFDMA0, MT_INT_TX_DONE_BAND0, BESRA_TXQ_BAND0);
+	TXQ_CONFIG(1, WFDMA0, MT_INT_TX_DONE_BAND1, BESRA_TXQ_BAND1);
+	TXQ_CONFIG(2, WFDMA0, MT_INT_TX_DONE_BAND2, BESRA_TXQ_BAND2);
 
-	MCUQ_CONFIG(MT_MCUQ_WM, WFDMA0, MT_INT_TX_DONE_MCU_WM, BERSA_TXQ_MCU_WM);
-	MCUQ_CONFIG(MT_MCUQ_WA, WFDMA0, MT_INT_TX_DONE_MCU_WA, BERSA_TXQ_MCU_WA);
-	MCUQ_CONFIG(MT_MCUQ_FWDL, WFDMA0, MT_INT_TX_DONE_FWDL, BERSA_TXQ_FWDL);
+	MCUQ_CONFIG(MT_MCUQ_WM, WFDMA0, MT_INT_TX_DONE_MCU_WM, BESRA_TXQ_MCU_WM);
+	MCUQ_CONFIG(MT_MCUQ_WA, WFDMA0, MT_INT_TX_DONE_MCU_WA, BESRA_TXQ_MCU_WA);
+	MCUQ_CONFIG(MT_MCUQ_FWDL, WFDMA0, MT_INT_TX_DONE_FWDL, BESRA_TXQ_FWDL);
 }
 
-static void __bersa_dma_prefetch(struct bersa_dev *dev, u32 ofs)
+static void __besra_dma_prefetch(struct besra_dev *dev, u32 ofs)
 {
 #define PREFETCH(_base, _depth)	((_base) << 16 | (_depth))
 
@@ -92,14 +92,14 @@
 	mt76_wr(dev, MT_RXQ_EXT_CTRL(MT_RXQ_TRI) + ofs, PREFETCH(0x2c0, 0x4));
 }
 
-void bersa_dma_prefetch(struct bersa_dev *dev)
+void besra_dma_prefetch(struct besra_dev *dev)
 {
-	__bersa_dma_prefetch(dev, 0);
+	__besra_dma_prefetch(dev, 0);
 	if (dev->hif2)
-		__bersa_dma_prefetch(dev, MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0));
+		__besra_dma_prefetch(dev, MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0));
 }
 
-static void bersa_dma_disable(struct bersa_dev *dev, bool rst)
+static void besra_dma_disable(struct besra_dev *dev, bool rst)
 {
 	u32 hif1_ofs = 0;
 
@@ -145,7 +145,7 @@
 	}
 }
 
-static int bersa_dma_enable(struct bersa_dev *dev)
+static int besra_dma_enable(struct besra_dev *dev)
 {
 	u32 hif1_ofs = 0;
 	u32 irq_mask;
@@ -170,7 +170,7 @@
 	}
 
 	/* configure perfetch settings */
-	bersa_dma_prefetch(dev);
+	besra_dma_prefetch(dev);
 
 	/* hif wait WFDMA idle */
 	mt76_set(dev, MT_WFDMA0_BUSY_ENA,
@@ -219,29 +219,29 @@
 	if (dev->tbtc_support)
 		irq_mask |= MT_INT_BAND2_RX_DONE;
 
-	bersa_irq_enable(dev, irq_mask);
+	besra_irq_enable(dev, irq_mask);
 
 	return 0;
 }
 
-int bersa_dma_init(struct bersa_dev *dev)
+int besra_dma_init(struct besra_dev *dev)
 {
 	u32 hif1_ofs = 0;
 	int ret;
 
-	bersa_dma_config(dev);
+	besra_dma_config(dev);
 
 	mt76_dma_attach(&dev->mt76);
 
 	if (dev->hif2)
 		hif1_ofs = MT_WFDMA0_PCIE1(0) - MT_WFDMA0(0);
 
-	bersa_dma_disable(dev, true);
+	besra_dma_disable(dev, true);
 
 	/* init tx queue */
-	ret = bersa_init_tx_queues(&dev->phy,
+	ret = besra_init_tx_queues(&dev->phy,
 				    MT_TXQ_ID(dev->phy.band_idx),
-				    BERSA_TX_RING_SIZE,
+				    BESRA_TX_RING_SIZE,
 				    MT_TXQ_RING_BASE(0));
 	if (ret)
 		return ret;
@@ -249,7 +249,7 @@
 	/* command to WM */
 	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WM,
 				  MT_MCUQ_ID(MT_MCUQ_WM),
-				  BERSA_TX_MCU_RING_SIZE,
+				  BESRA_TX_MCU_RING_SIZE,
 				  MT_MCUQ_RING_BASE(MT_MCUQ_WM));
 	if (ret)
 		return ret;
@@ -257,7 +257,7 @@
 	/* command to WA */
 	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_WA,
 				  MT_MCUQ_ID(MT_MCUQ_WA),
-				  BERSA_TX_MCU_RING_SIZE,
+				  BESRA_TX_MCU_RING_SIZE,
 				  MT_MCUQ_RING_BASE(MT_MCUQ_WA));
 	if (ret)
 		return ret;
@@ -265,7 +265,7 @@
 	/* firmware download */
 	ret = mt76_init_mcu_queue(&dev->mt76, MT_MCUQ_FWDL,
 				  MT_MCUQ_ID(MT_MCUQ_FWDL),
-				  BERSA_TX_FWDL_RING_SIZE,
+				  BESRA_TX_FWDL_RING_SIZE,
 				  MT_MCUQ_RING_BASE(MT_MCUQ_FWDL));
 	if (ret)
 		return ret;
@@ -273,7 +273,7 @@
 	/* event from WM */
 	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU],
 			       MT_RXQ_ID(MT_RXQ_MCU),
-			       BERSA_RX_MCU_RING_SIZE,
+			       BESRA_RX_MCU_RING_SIZE,
 			       MT_RX_BUF_SIZE,
 			       MT_RXQ_RING_BASE(MT_RXQ_MCU));
 	if (ret)
@@ -282,7 +282,7 @@
 	/* event from WA */
 	ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MCU_WA],
 			       MT_RXQ_ID(MT_RXQ_MCU_WA),
-			       BERSA_RX_MCU_RING_SIZE,
+			       BESRA_RX_MCU_RING_SIZE,
 			       MT_RX_BUF_SIZE,
 			       MT_RXQ_RING_BASE(MT_RXQ_MCU_WA));
 	if (ret)
@@ -292,7 +292,7 @@
 	if (!dev->phy.band_idx) {
 		ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_MAIN],
 				       MT_RXQ_ID(MT_RXQ_MAIN),
-				       BERSA_RX_RING_SIZE,
+				       BESRA_RX_RING_SIZE,
 				       MT_RX_BUF_SIZE,
 				       MT_RXQ_RING_BASE(MT_RXQ_MAIN));
 		if (ret)
@@ -302,7 +302,7 @@
 	/* 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),
-			       BERSA_RX_MCU_RING_SIZE,
+			       BESRA_RX_MCU_RING_SIZE,
 			       MT_RX_BUF_SIZE,
 			       MT_RXQ_RING_BASE(MT_RXQ_MAIN_WA));
 	if (ret)
@@ -312,7 +312,7 @@
 		/* rx data queue for band1 */
 		ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_EXT],
 				       MT_RXQ_ID(MT_RXQ_EXT),
-				       BERSA_RX_RING_SIZE,
+				       BESRA_RX_RING_SIZE,
 				       MT_RX_BUF_SIZE,
 				       MT_RXQ_RING_BASE(MT_RXQ_EXT) + hif1_ofs);
 		if (ret)
@@ -321,7 +321,7 @@
 		/* tx free notify event from WA for band1 */
 		ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_EXT_WA],
 				       MT_RXQ_ID(MT_RXQ_EXT_WA),
-				       BERSA_RX_MCU_RING_SIZE,
+				       BESRA_RX_MCU_RING_SIZE,
 				       MT_RX_BUF_SIZE,
 				       MT_RXQ_RING_BASE(MT_RXQ_EXT_WA) + hif1_ofs);
 		if (ret)
@@ -332,7 +332,7 @@
 		/* rx data queue for band2 */
 		ret = mt76_queue_alloc(dev, &dev->mt76.q_rx[MT_RXQ_TRI],
 				       MT_RXQ_ID(MT_RXQ_TRI),
-				       BERSA_RX_RING_SIZE,
+				       BESRA_RX_RING_SIZE,
 				       MT_RX_BUF_SIZE,
 				       MT_RXQ_RING_BASE(MT_RXQ_TRI) + hif1_ofs);
 		if (ret)
@@ -344,17 +344,17 @@
 		return ret;
 
 	netif_tx_napi_add(&dev->mt76.tx_napi_dev, &dev->mt76.tx_napi,
-			  bersa_poll_tx, NAPI_POLL_WEIGHT);
+			  besra_poll_tx, NAPI_POLL_WEIGHT);
 	napi_enable(&dev->mt76.tx_napi);
 
-	bersa_dma_enable(dev);
+	besra_dma_enable(dev);
 
 	return 0;
 }
 
-void bersa_dma_cleanup(struct bersa_dev *dev)
+void besra_dma_cleanup(struct besra_dev *dev)
 {
-	bersa_dma_disable(dev, true);
+	besra_dma_disable(dev, true);
 
 	mt76_dma_cleanup(&dev->mt76);
 }
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/eeprom.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/eeprom.c
similarity index 78%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/eeprom.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/eeprom.c
index ab8eede..0c172db 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/eeprom.c
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/eeprom.c
@@ -2,10 +2,10 @@
 /* Copyright (C) 2020 MediaTek Inc. */
 
 #include <linux/firmware.h>
-#include "bersa.h"
+#include "besra.h"
 #include "eeprom.h"
 
-static int bersa_eeprom_load_precal(struct bersa_dev *dev)
+static int besra_eeprom_load_precal(struct besra_dev *dev)
 {
 	struct mt76_dev *mdev = &dev->mt76;
 	u8 *eeprom = mdev->eeprom.data;
@@ -25,7 +25,7 @@
 	return mt76_get_of_eeprom(mdev, dev->cal, MT_EE_PRECAL_V2, val);
 }
 
-static int bersa_check_eeprom(struct bersa_dev *dev)
+static int besra_check_eeprom(struct besra_dev *dev)
 {
 	u8 *eeprom = dev->mt76.eeprom.data;
 	u16 val = get_unaligned_le16(eeprom);
@@ -40,19 +40,19 @@
 	}
 }
 
-static char *bersa_eeprom_name(struct bersa_dev *dev)
+static char *besra_eeprom_name(struct besra_dev *dev)
 {
 	return MT7902_EEPROM_DEFAULT;
 }
 
 static int
-bersa_eeprom_load_default(struct bersa_dev *dev)
+besra_eeprom_load_default(struct besra_dev *dev)
 {
 	u8 *eeprom = dev->mt76.eeprom.data;
 	const struct firmware *fw = NULL;
 	int ret;
 
-	ret = request_firmware(&fw, bersa_eeprom_name(dev), dev->mt76.dev);
+	ret = request_firmware(&fw, besra_eeprom_name(dev), dev->mt76.dev);
 	if (ret)
 		return ret;
 
@@ -62,7 +62,7 @@
 		goto out;
 	}
 
-	memcpy(eeprom, fw->data, BERSA_EEPROM_SIZE);
+	memcpy(eeprom, fw->data, BESRA_EEPROM_SIZE);
 	dev->flash_mode = true;
 
 out:
@@ -71,11 +71,11 @@
 	return ret;
 }
 
-static int bersa_eeprom_load(struct bersa_dev *dev)
+static int besra_eeprom_load(struct besra_dev *dev)
 {
 	int ret;
 
-	ret = mt76_eeprom_init(&dev->mt76, BERSA_EEPROM_SIZE);
+	ret = mt76_eeprom_init(&dev->mt76, BESRA_EEPROM_SIZE);
 	if (ret < 0)
 		return ret;
 
@@ -85,25 +85,25 @@
 		u8 free_block_num;
 		u32 block_num, i;
 
-		bersa_mcu_get_eeprom_free_block(dev, &free_block_num);
+		besra_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(BERSA_EEPROM_SIZE,
-					 BERSA_EEPROM_BLOCK_SIZE);
+		block_num = DIV_ROUND_UP(BESRA_EEPROM_SIZE,
+					 BESRA_EEPROM_BLOCK_SIZE);
 		for (i = 0; i < block_num; i++)
-			bersa_mcu_get_eeprom(dev,
-					      i * BERSA_EEPROM_BLOCK_SIZE);
+			besra_mcu_get_eeprom(dev,
+					      i * BESRA_EEPROM_BLOCK_SIZE);
 	}
 
-	return bersa_check_eeprom(dev);
+	return besra_check_eeprom(dev);
 }
 
-static void bersa_eeprom_parse_band_config(struct bersa_phy *phy)
+static void besra_eeprom_parse_band_config(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	u8 *eeprom = dev->mt76.eeprom.data;
 	u32 val;
 
@@ -138,14 +138,14 @@
 	}
 }
 
-void bersa_eeprom_parse_hw_cap(struct bersa_dev *dev,
-				struct bersa_phy *phy)
+void besra_eeprom_parse_hw_cap(struct besra_dev *dev,
+				struct besra_phy *phy)
 {
 	u8 nss, nss_band, nss_band_max, *eeprom = dev->mt76.eeprom.data;
 	struct mt76_phy *mphy = phy->mt76;
-	u8 phy_idx = bersa_get_phy_id(phy);
+	u8 phy_idx = besra_get_phy_id(phy);
 
-	bersa_eeprom_parse_band_config(phy);
+	besra_eeprom_parse_band_config(phy);
 
 	/* read tx/rx mask from eeprom */
 	nss = FIELD_GET(MT_EE_WIFI_CONF0_TX_PATH,
@@ -201,26 +201,26 @@
 		 mphy->chainmask, mphy->antenna_mask, dev->chainmask);
 }
 
-int bersa_eeprom_init(struct bersa_dev *dev)
+int besra_eeprom_init(struct besra_dev *dev)
 {
 	int ret;
 
-	ret = bersa_eeprom_load(dev);
+	ret = besra_eeprom_load(dev);
 	if (ret < 0) {
 		if (ret != -EINVAL)
 			return ret;
 
 		dev_warn(dev->mt76.dev, "eeprom load fail, use default bin\n");
-		ret = bersa_eeprom_load_default(dev);
+		ret = besra_eeprom_load_default(dev);
 		if (ret)
 			return ret;
 	}
 
-	ret = bersa_eeprom_load_precal(dev);
+	ret = besra_eeprom_load_precal(dev);
 	if (ret)
 		return ret;
 
-	bersa_eeprom_parse_hw_cap(dev, &dev->phy);
+	besra_eeprom_parse_hw_cap(dev, &dev->phy);
 	memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR,
 	       ETH_ALEN);
 
@@ -229,7 +229,7 @@
 	return 0;
 }
 
-int bersa_eeprom_get_target_power(struct bersa_dev *dev,
+int besra_eeprom_get_target_power(struct besra_dev *dev,
 				   struct ieee80211_channel *chan,
 				   u8 chain_idx)
 {
@@ -240,7 +240,7 @@
 	if (chain_idx > 3)
 		return -EINVAL;
 
-	tssi_on = bersa_tssi_enabled(dev, chan->band);
+	tssi_on = besra_tssi_enabled(dev, chan->band);
 
 	if (chan->band == NL80211_BAND_2GHZ) {
 		index = MT_EE_TX0_POWER_2G_V2 + chain_idx * 3;
@@ -249,7 +249,7 @@
 		if (!tssi_on)
 			target_power += eeprom[index + 1];
 	} else {
-		int group = bersa_get_channel_group(chan->hw_value);
+		int group = besra_get_channel_group(chan->hw_value);
 
 		index = MT_EE_TX0_POWER_5G_V2 + chain_idx * 12;
 		target_power = eeprom[index + group];
@@ -261,7 +261,7 @@
 	return target_power;
 }
 
-s8 bersa_eeprom_get_power_delta(struct bersa_dev *dev, int band)
+s8 besra_eeprom_get_power_delta(struct besra_dev *dev, int band)
 {
 	u8 *eeprom = dev->mt76.eeprom.data;
 	u32 val;
@@ -280,7 +280,7 @@
 	return val & MT_EE_RATE_DELTA_SIGN ? delta : -delta;
 }
 
-const u8 bersa_sku_group_len[] = {
+const u8 besra_sku_group_len[] = {
 	[SKU_CCK] = 4,
 	[SKU_OFDM] = 8,
 	[SKU_HT_BW20] = 8,
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/eeprom.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/eeprom.h
similarity index 89%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/eeprom.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/eeprom.h
index 21e04e9..c9481c7 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/eeprom.h
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/eeprom.h
@@ -1,17 +1,17 @@
 /* SPDX-License-Identifier: ISC */
 /* Copyright (C) 2020 MediaTek Inc. */
 
-#ifndef __BERSA_EEPROM_H
-#define __BERSA_EEPROM_H
+#ifndef __BESRA_EEPROM_H
+#define __BESRA_EEPROM_H
 
-#include "bersa.h"
+#include "besra.h"
 
 struct cal_data {
 	u8 count;
 	u16 offset[60];
 };
 
-enum bersa_eeprom_field {
+enum besra_eeprom_field {
 	MT_EE_CHIP_ID =		0x000,
 	MT_EE_VERSION =		0x002,
 	MT_EE_MAC_ADDR =	0x004,
@@ -61,7 +61,7 @@
 #define MT_EE_NSS_MAX_MA7986			4
 #define MT_EE_NSS_MAX_DBDC_MA7986		4
 
-enum bersa_adie_sku {
+enum besra_adie_sku {
 	MT7976_ONE_ADIE_DBDC = 0x7,
 	MT7975_ONE_ADIE	= 0x8,
 	MT7976_ONE_ADIE	= 0xa,
@@ -69,7 +69,7 @@
 	MT7976_DUAL_ADIE = 0xf,
 };
 
-enum bersa_eeprom_band {
+enum besra_eeprom_band {
 	MT_EE_BAND_SEL_DEFAULT,
 	MT_EE_BAND_SEL_5GHZ,
 	MT_EE_BAND_SEL_2GHZ,
@@ -83,7 +83,7 @@
 	MT_EE_V2_BAND_SEL_5GHZ_6GHZ,
 };
 
-enum bersa_sku_rate_group {
+enum besra_sku_rate_group {
 	SKU_CCK,
 	SKU_OFDM,
 	SKU_HT_BW20,
@@ -103,7 +103,7 @@
 };
 
 static inline int
-bersa_get_channel_group(int channel)
+besra_get_channel_group(int channel)
 {
 	if (channel >= 184 && channel <= 196)
 		return 0;
@@ -123,7 +123,7 @@
 }
 
 static inline bool
-bersa_tssi_enabled(struct bersa_dev *dev, enum nl80211_band band)
+besra_tssi_enabled(struct besra_dev *dev, enum nl80211_band band)
 {
 	u8 *eep = dev->mt76.eeprom.data;
 	u8 val = eep[MT_EE_WIFI_CONF + 7];
@@ -137,6 +137,6 @@
 		return val & MT_EE_WIFI_CONF7_TSSI0_5G;
 }
 
-extern const u8 bersa_sku_group_len[MAX_SKU_RATE_GROUP_NUM];
+extern const u8 besra_sku_group_len[MAX_SKU_RATE_GROUP_NUM];
 
 #endif
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/init.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/init.c
similarity index 77%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/init.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/init.c
index 613ca84..9ef5fcc 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/init.c
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/init.c
@@ -5,7 +5,7 @@
 #include <linux/hwmon.h>
 #include <linux/hwmon-sysfs.h>
 #include <linux/thermal.h>
-#include "bersa.h"
+#include "besra.h"
 #include "mac.h"
 #include "mcu.h"
 #include "eeprom.h"
@@ -21,7 +21,7 @@
 			 | BIT(NL80211_IFTYPE_MESH_POINT)
 #endif
 	}, {
-		.max = BERSA_MAX_INTERFACES,
+		.max = BESRA_MAX_INTERFACES,
 		.types = BIT(NL80211_IFTYPE_STATION)
 	}
 };
@@ -30,7 +30,7 @@
 	{
 		.limits = if_limits,
 		.n_limits = ARRAY_SIZE(if_limits),
-		.max_interfaces = BERSA_MAX_INTERFACES,
+		.max_interfaces = BESRA_MAX_INTERFACES,
 		.num_different_channels = 1,
 		.beacon_int_infra_match = true,
 		.radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) |
@@ -42,17 +42,17 @@
 	}
 };
 
-static ssize_t bersa_thermal_temp_show(struct device *dev,
+static ssize_t besra_thermal_temp_show(struct device *dev,
 					struct device_attribute *attr,
 					char *buf)
 {
-	struct bersa_phy *phy = dev_get_drvdata(dev);
+	struct besra_phy *phy = dev_get_drvdata(dev);
 	int i = to_sensor_dev_attr(attr)->index;
 	int temperature;
 
 	switch (i) {
 	case 0:
-		temperature = bersa_mcu_get_temperature(phy);
+		temperature = besra_mcu_get_temperature(phy);
 		if (temperature < 0)
 			return temperature;
 		/* display in millidegree celcius */
@@ -68,11 +68,11 @@
 	}
 }
 
-static ssize_t bersa_thermal_temp_store(struct device *dev,
+static ssize_t besra_thermal_temp_store(struct device *dev,
 					 struct device_attribute *attr,
 					 const char *buf, size_t count)
 {
-	struct bersa_phy *phy = dev_get_drvdata(dev);
+	struct besra_phy *phy = dev_get_drvdata(dev);
 	int ret, i = to_sensor_dev_attr(attr)->index;
 	long val;
 
@@ -88,34 +88,34 @@
 	return count;
 }
 
-static SENSOR_DEVICE_ATTR_RO(temp1_input, bersa_thermal_temp, 0);
-static SENSOR_DEVICE_ATTR_RW(temp1_crit, bersa_thermal_temp, 1);
-static SENSOR_DEVICE_ATTR_RW(temp1_max, bersa_thermal_temp, 2);
-static SENSOR_DEVICE_ATTR_RO(throttle1, bersa_thermal_temp, 3);
+static SENSOR_DEVICE_ATTR_RO(temp1_input, besra_thermal_temp, 0);
+static SENSOR_DEVICE_ATTR_RW(temp1_crit, besra_thermal_temp, 1);
+static SENSOR_DEVICE_ATTR_RW(temp1_max, besra_thermal_temp, 2);
+static SENSOR_DEVICE_ATTR_RO(throttle1, besra_thermal_temp, 3);
 
-static struct attribute *bersa_hwmon_attrs[] = {
+static struct attribute *besra_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(bersa_hwmon);
+ATTRIBUTE_GROUPS(besra_hwmon);
 
 static int
-bersa_thermal_get_max_throttle_state(struct thermal_cooling_device *cdev,
+besra_thermal_get_max_throttle_state(struct thermal_cooling_device *cdev,
 				      unsigned long *state)
 {
-	*state = BERSA_CDEV_THROTTLE_MAX;
+	*state = BESRA_CDEV_THROTTLE_MAX;
 
 	return 0;
 }
 
 static int
-bersa_thermal_get_cur_throttle_state(struct thermal_cooling_device *cdev,
+besra_thermal_get_cur_throttle_state(struct thermal_cooling_device *cdev,
 				      unsigned long *state)
 {
-	struct bersa_phy *phy = cdev->devdata;
+	struct besra_phy *phy = cdev->devdata;
 
 	*state = phy->cdev_state;
 
@@ -123,14 +123,14 @@
 }
 
 static int
-bersa_thermal_set_cur_throttle_state(struct thermal_cooling_device *cdev,
+besra_thermal_set_cur_throttle_state(struct thermal_cooling_device *cdev,
 				      unsigned long state)
 {
-	struct bersa_phy *phy = cdev->devdata;
-	u8 throttling = BERSA_THERMAL_THROTTLE_MAX - state;
+	struct besra_phy *phy = cdev->devdata;
+	u8 throttling = BESRA_THERMAL_THROTTLE_MAX - state;
 	int ret;
 
-	if (state > BERSA_CDEV_THROTTLE_MAX)
+	if (state > BESRA_CDEV_THROTTLE_MAX)
 		return -EINVAL;
 
 	if (phy->throttle_temp[0] > phy->throttle_temp[1])
@@ -143,7 +143,7 @@
 	 * cooling_device convention: 0 = no cooling, more = more cooling
 	 * mcu convention: 1 = max cooling, more = less cooling
 	 */
-	ret = bersa_mcu_set_thermal_throttling(phy, throttling);
+	ret = besra_mcu_set_thermal_throttling(phy, throttling);
 	if (ret)
 		return ret;
 
@@ -152,13 +152,13 @@
 	return 0;
 }
 
-static const struct thermal_cooling_device_ops bersa_thermal_ops = {
-	.get_max_state = bersa_thermal_get_max_throttle_state,
-	.get_cur_state = bersa_thermal_get_cur_throttle_state,
-	.set_cur_state = bersa_thermal_set_cur_throttle_state,
+static const struct thermal_cooling_device_ops besra_thermal_ops = {
+	.get_max_state = besra_thermal_get_max_throttle_state,
+	.get_cur_state = besra_thermal_get_cur_throttle_state,
+	.set_cur_state = besra_thermal_set_cur_throttle_state,
 };
 
-static void bersa_unregister_thermal(struct bersa_phy *phy)
+static void besra_unregister_thermal(struct besra_phy *phy)
 {
 	struct wiphy *wiphy = phy->mt76->hw->wiphy;
 
@@ -169,17 +169,17 @@
 	thermal_cooling_device_unregister(phy->cdev);
 }
 
-static int bersa_thermal_init(struct bersa_phy *phy)
+static int besra_thermal_init(struct besra_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, "bersa_%s",
+	name = devm_kasprintf(&wiphy->dev, GFP_KERNEL, "besra_%s",
 			      wiphy_name(wiphy));
 
-	cdev = thermal_cooling_device_register(name, phy, &bersa_thermal_ops);
+	cdev = thermal_cooling_device_register(name, phy, &besra_thermal_ops);
 	if (!IS_ERR(cdev)) {
 		if (sysfs_create_link(&wiphy->dev.kobj, &cdev->device.kobj,
 				      "cooling_device") < 0)
@@ -192,7 +192,7 @@
 		return 0;
 
 	hwmon = devm_hwmon_device_register_with_groups(&wiphy->dev, name, phy,
-						       bersa_hwmon_groups);
+						       besra_hwmon_groups);
 	if (IS_ERR(hwmon))
 		return PTR_ERR(hwmon);
 
@@ -200,19 +200,19 @@
 	phy->throttle_temp[0] = 110;
 	phy->throttle_temp[1] = 120;
 
-	return bersa_mcu_set_thermal_throttling(phy,
-						 BERSA_THERMAL_THROTTLE_MAX);
+	return besra_mcu_set_thermal_throttling(phy,
+						 BESRA_THERMAL_THROTTLE_MAX);
 }
 
-static void bersa_led_set_config(struct led_classdev *led_cdev,
+static void besra_led_set_config(struct led_classdev *led_cdev,
 				  u8 delay_on, u8 delay_off)
 {
-	struct bersa_dev *dev;
+	struct besra_dev *dev;
 	struct mt76_dev *mt76;
 	u32 val;
 
 	mt76 = container_of(led_cdev, struct mt76_dev, led_cdev);
-	dev = container_of(mt76, struct bersa_dev, mt76);
+	dev = container_of(mt76, struct besra_dev, mt76);
 
 	/* select TX blink mode, 2: only data frames */
 	mt76_rmw_field(dev, MT_TMAC_TCR0(0), MT_TMAC_TCR0_TX_BLINK, 2);
@@ -234,7 +234,7 @@
 	mt76_clear(dev, MT_LED_CTRL(0), MT_LED_CTRL_KICK);
 }
 
-static int bersa_led_set_blink(struct led_classdev *led_cdev,
+static int besra_led_set_blink(struct led_classdev *led_cdev,
 				unsigned long *delay_on,
 				unsigned long *delay_off)
 {
@@ -248,27 +248,27 @@
 	if (*delay_off)
 		delta_off = TO_HW_TICK(*delay_off);
 
-	bersa_led_set_config(led_cdev, delta_on, delta_off);
+	besra_led_set_config(led_cdev, delta_on, delta_off);
 
 	return 0;
 }
 
-static void bersa_led_set_brightness(struct led_classdev *led_cdev,
+static void besra_led_set_brightness(struct led_classdev *led_cdev,
 				      enum led_brightness brightness)
 {
 	if (!brightness)
-		bersa_led_set_config(led_cdev, 0, 0xff);
+		besra_led_set_config(led_cdev, 0, 0xff);
 	else
-		bersa_led_set_config(led_cdev, 0xff, 0);
+		besra_led_set_config(led_cdev, 0xff, 0);
 }
 
 static void
-bersa_init_txpower(struct bersa_dev *dev,
+besra_init_txpower(struct besra_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 = bersa_eeprom_get_power_delta(dev, sband->band);
+	int pwr_delta = besra_eeprom_get_power_delta(dev, sband->band);
 	struct mt76_power_limits limits;
 
 	for (i = 0; i < sband->n_channels; i++) {
@@ -279,7 +279,7 @@
 		for (j = 0; j < n_chains; j++) {
 			u32 val;
 
-			val = bersa_eeprom_get_target_power(dev, chan, j);
+			val = besra_eeprom_get_target_power(dev, chan, j);
 			target_power = max(target_power, val);
 		}
 
@@ -296,31 +296,31 @@
 }
 
 static void
-bersa_regd_notifier(struct wiphy *wiphy,
+besra_regd_notifier(struct wiphy *wiphy,
 		     struct regulatory_request *request)
 {
 	struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);
-	struct bersa_dev *dev = bersa_hw_dev(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
 	struct mt76_phy *mphy = hw->priv;
-	struct bersa_phy *phy = mphy->priv;
+	struct besra_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)
-		bersa_mcu_rdd_background_enable(phy, NULL);
+		besra_mcu_rdd_background_enable(phy, NULL);
 
-	bersa_init_txpower(dev, &mphy->sband_2g.sband);
-	bersa_init_txpower(dev, &mphy->sband_5g.sband);
+	besra_init_txpower(dev, &mphy->sband_2g.sband);
+	besra_init_txpower(dev, &mphy->sband_5g.sband);
 
 	mphy->dfs_state = MT_DFS_STATE_UNKNOWN;
-	bersa_dfs_init_radar_detector(phy);
+	besra_dfs_init_radar_detector(phy);
 }
 
 static void
-bersa_init_wiphy(struct ieee80211_hw *hw)
+besra_init_wiphy(struct ieee80211_hw *hw)
 {
-	struct bersa_phy *phy = bersa_hw_phy(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
 	struct mt76_dev *mdev = &phy->dev->mt76;
 	struct wiphy *wiphy = hw->wiphy;
 
@@ -334,12 +334,12 @@
 
 	phy->slottime = 9;
 
-	hw->sta_data_size = sizeof(struct bersa_sta);
-	hw->vif_data_size = sizeof(struct bersa_vif);
+	hw->sta_data_size = sizeof(struct besra_sta);
+	hw->vif_data_size = sizeof(struct besra_vif);
 
 	wiphy->iface_combinations = if_comb;
 	wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
-	wiphy->reg_notifier = bersa_regd_notifier;
+	wiphy->reg_notifier = besra_regd_notifier;
 	wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
 
 	wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_BSS_COLOR);
@@ -386,15 +386,15 @@
 	}
 
 	mt76_set_stream_caps(phy->mt76, true);
-	bersa_set_stream_vht_txbf_caps(phy);
-	bersa_set_stream_he_caps(phy);
+	besra_set_stream_vht_txbf_caps(phy);
+	besra_set_stream_he_caps(phy);
 
 	wiphy->available_antennas_rx = phy->mt76->antenna_mask;
 	wiphy->available_antennas_tx = phy->mt76->antenna_mask;
 }
 
 static void
-bersa_mac_init_band(struct bersa_dev *dev, u8 band)
+besra_mac_init_band(struct besra_dev *dev, u8 band)
 {
 	u32 mask, set;
 
@@ -422,11 +422,11 @@
 
 	mt76_rmw_field(dev, MT_DMA_DCR0(band), MT_DMA_DCR0_MAX_RX_LEN, 0x680);
 
-	/* bersa: disable rx rate report by default due to hw issues */
+	/* besra: 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 bersa_mac_init(struct bersa_dev *dev)
+static void besra_mac_init(struct besra_dev *dev)
 {
 	int i;
 
@@ -442,12 +442,12 @@
 	/* enable hardware de-agg */
 	/* mt76_set(dev, MT_MDP_DCR0, MT_MDP_DCR0_DAMSDU_EN); */
 
-	for (i = 0; i < BERSA_WTBL_SIZE; i++)
-		bersa_mac_wtbl_update(dev, i,
+	for (i = 0; i < BESRA_WTBL_SIZE; i++)
+		besra_mac_wtbl_update(dev, i,
 				       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
 	/* TODO: to be checked which are necessary */
 	/* for (i = 0; i < __MT_MAX_BAND; i++) */
-	/* 	bersa_mac_init_band(dev, i); */
+	/* 	besra_mac_init_band(dev, i); */
 
 	if (IS_ENABLED(CONFIG_MT76_LEDS)) {
 		i = dev->mt76.led_pin ? MT_LED_GPIO_MUX3 : MT_LED_GPIO_MUX2;
@@ -455,28 +455,28 @@
 	}
 }
 
-static int bersa_txbf_init(struct bersa_dev *dev)
+static int besra_txbf_init(struct besra_dev *dev)
 {
 	int ret;
 
 	if (dev->dbdc_support) {
-		ret = bersa_mcu_set_txbf(dev, MT_BF_MODULE_UPDATE);
+		ret = besra_mcu_set_txbf(dev, MT_BF_MODULE_UPDATE);
 		if (ret)
 			return ret;
 	}
 
 	/* trigger sounding packets */
-	ret = bersa_mcu_set_txbf(dev, MT_BF_SOUNDING_ON);
+	ret = besra_mcu_set_txbf(dev, MT_BF_SOUNDING_ON);
 	if (ret)
 		return ret;
 
 	/* enable eBF */
-	return bersa_mcu_set_txbf(dev, MT_BF_TYPE_UPDATE);
+	return besra_mcu_set_txbf(dev, MT_BF_TYPE_UPDATE);
 }
 
-static int bersa_register_ext_phy(struct bersa_dev *dev)
+static int besra_register_ext_phy(struct besra_dev *dev)
 {
-	struct bersa_phy *phy = bersa_ext_phy(dev);
+	struct besra_phy *phy = besra_ext_phy(dev);
 	struct mt76_phy *mphy;
 	int ret;
 
@@ -486,7 +486,7 @@
 	if (phy)
 		return 0;
 
-	mphy = mt76_alloc_phy(&dev->mt76, sizeof(*phy), &bersa_ops, MT_BAND1);
+	mphy = mt76_alloc_phy(&dev->mt76, sizeof(*phy), &besra_ops, MT_BAND1);
 	if (!mphy)
 		return -ENOMEM;
 
@@ -496,9 +496,9 @@
 	phy->band_idx = MT_BAND1;
 	mphy->dev->phy2 = mphy;
 
-	INIT_DELAYED_WORK(&mphy->mac_work, bersa_mac_work);
+	INIT_DELAYED_WORK(&mphy->mac_work, besra_mac_work);
 
-	bersa_eeprom_parse_hw_cap(dev, phy);
+	besra_eeprom_parse_hw_cap(dev, phy);
 
 	memcpy(mphy->macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR2,
 	       ETH_ALEN);
@@ -514,9 +514,9 @@
 	mt76_eeprom_override(mphy);
 
 	/* init wiphy according to mphy and phy */
-	bersa_init_wiphy(mphy->hw);
-	ret = bersa_init_tx_queues(phy, MT_TXQ_ID(phy->band_idx),
-				    BERSA_TX_RING_SIZE,
+	besra_init_wiphy(mphy->hw);
+	ret = besra_init_tx_queues(phy, MT_TXQ_ID(phy->band_idx),
+				    BESRA_TX_RING_SIZE,
 				    MT_TXQ_RING_BASE(1));
 	if (ret)
 		goto error;
@@ -526,11 +526,11 @@
 	if (ret)
 		goto error;
 
-	ret = bersa_thermal_init(phy);
+	ret = besra_thermal_init(phy);
 	if (ret)
 		goto error;
 
-	ret = bersa_init_debugfs(phy);
+	ret = besra_init_debugfs(phy);
 	if (ret)
 		goto error;
 
@@ -542,9 +542,9 @@
 	return ret;
 }
 
-static int bersa_register_tri_phy(struct bersa_dev *dev)
+static int besra_register_tri_phy(struct besra_dev *dev)
 {
-	struct bersa_phy *phy = bersa_tri_phy(dev);
+	struct besra_phy *phy = besra_tri_phy(dev);
 	struct mt76_phy *mphy;
 	int ret;
 
@@ -554,7 +554,7 @@
 	if (phy)
 		return 0;
 
-	mphy = mt76_alloc_phy(&dev->mt76, sizeof(*phy), &bersa_ops, MT_BAND2);
+	mphy = mt76_alloc_phy(&dev->mt76, sizeof(*phy), &besra_ops, MT_BAND2);
 	if (!mphy)
 		return -ENOMEM;
 
@@ -564,9 +564,9 @@
 	phy->band_idx = MT_BAND2;
 	mphy->dev->phy3 = mphy;
 
-	INIT_DELAYED_WORK(&mphy->mac_work, bersa_mac_work);
+	INIT_DELAYED_WORK(&mphy->mac_work, besra_mac_work);
 
-	bersa_eeprom_parse_hw_cap(dev, phy);
+	besra_eeprom_parse_hw_cap(dev, phy);
 
 	/* Make the secondary PHY MAC address local without overlapping with
 	 * the usual MAC address allocation scheme on multiple virtual interfaces
@@ -581,9 +581,9 @@
 	mt76_eeprom_override(mphy);
 
 	/* init wiphy according to mphy and phy */
-	bersa_init_wiphy(mphy->hw);
-	ret = bersa_init_tx_queues(phy, MT_TXQ_ID(phy->band_idx),
-				    BERSA_TX_RING_SIZE,
+	besra_init_wiphy(mphy->hw);
+	ret = besra_init_tx_queues(phy, MT_TXQ_ID(phy->band_idx),
+				    BESRA_TX_RING_SIZE,
 				    MT_TXQ_RING_BASE(2));
 	if (ret)
 		goto error;
@@ -593,11 +593,11 @@
 	if (ret)
 		goto error;
 
-	ret = bersa_thermal_init(phy);
+	ret = besra_thermal_init(phy);
 	if (ret)
 		goto error;
 
-	ret = bersa_init_debugfs(phy);
+	ret = besra_init_debugfs(phy);
 	if (ret)
 		goto error;
 
@@ -609,19 +609,19 @@
 	return ret;
 }
 
-static void bersa_init_work(struct work_struct *work)
+static void besra_init_work(struct work_struct *work)
 {
-	struct bersa_dev *dev = container_of(work, struct bersa_dev,
+	struct besra_dev *dev = container_of(work, struct besra_dev,
 				 init_work);
 
-	bersa_mcu_set_eeprom(dev);
-	bersa_mac_init(dev);
-	bersa_init_txpower(dev, &dev->mphy.sband_2g.sband);
-	bersa_init_txpower(dev, &dev->mphy.sband_5g.sband);
-	bersa_txbf_init(dev);
+	besra_mcu_set_eeprom(dev);
+	besra_mac_init(dev);
+	besra_init_txpower(dev, &dev->mphy.sband_2g.sband);
+	besra_init_txpower(dev, &dev->mphy.sband_5g.sband);
+	besra_txbf_init(dev);
 }
 
-void bersa_wfsys_reset(struct bersa_dev *dev)
+void besra_wfsys_reset(struct besra_dev *dev)
 {
 	if (is_mt7902(&dev->mt76))
 		return;
@@ -633,7 +633,7 @@
 	msleep(20);
 }
 
-static bool bersa_band_config(struct bersa_dev *dev)
+static bool besra_band_config(struct besra_dev *dev)
 {
 	dev->phy.band_idx = MT_BAND0;
 	dev->mphy.band_idx = MT_BAND0;
@@ -648,45 +648,45 @@
 	return true;
 }
 
-static int bersa_init_hardware(struct bersa_dev *dev)
+static int besra_init_hardware(struct besra_dev *dev)
 {
 	int ret, idx;
 
 	mt76_wr(dev, MT_INT_SOURCE_CSR, ~0);
 
-	INIT_WORK(&dev->init_work, bersa_init_work);
+	INIT_WORK(&dev->init_work, besra_init_work);
 
-	dev->dbdc_support = bersa_band_config(dev);
+	dev->dbdc_support = besra_band_config(dev);
 
 	/* bellwether do rom dl */
 	if (is_mt7902(&dev->mt76)) {
-		ret = bersa_rom_start(dev);
+		ret = besra_rom_start(dev);
 		if (ret)
 			return ret;
 	}
 
-	ret = bersa_dma_init(dev);
+	ret = besra_dma_init(dev);
 	if (ret)
 		return ret;
 
 	set_bit(MT76_STATE_INITIALIZED, &dev->mphy.state);
 
-	ret = bersa_mcu_init(dev);
+	ret = besra_mcu_init(dev);
 	if (ret)
 		return ret;
 
-	ret = bersa_eeprom_init(dev);
+	ret = besra_eeprom_init(dev);
 	if (ret < 0)
 		return ret;
 
 	if (dev->flash_mode) {
-		ret = bersa_mcu_apply_group_cal(dev);
+		ret = besra_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, BERSA_WTBL_STA);
+	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, BESRA_WTBL_STA);
 	if (idx)
 		return -ENOSPC;
 
@@ -698,7 +698,7 @@
 	return 0;
 }
 
-void bersa_set_stream_vht_txbf_caps(struct bersa_phy *phy)
+void besra_set_stream_vht_txbf_caps(struct besra_phy *phy)
 {
 	int nss;
 	u32 *cap;
@@ -727,7 +727,7 @@
 }
 
 static void
-bersa_set_stream_he_txbf_caps(struct ieee80211_sta_he_cap *he_cap,
+besra_set_stream_he_txbf_caps(struct ieee80211_sta_he_cap *he_cap,
 			       int vif, int nss)
 {
 	struct ieee80211_he_cap_elem *elem = &he_cap->he_cap_elem;
@@ -798,7 +798,7 @@
 }
 
 static void
-bersa_gen_ppe_thresh(u8 *he_ppet, int nss)
+besra_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};
@@ -819,7 +819,7 @@
 }
 
 static int
-bersa_init_he_caps(struct bersa_phy *phy, enum nl80211_band band,
+besra_init_he_caps(struct besra_phy *phy, enum nl80211_band band,
 		    struct ieee80211_sband_iftype_data *data)
 {
 	int i, idx = 0, nss = hweight8(phy->mt76->chainmask);
@@ -827,7 +827,7 @@
 	u16 mcs_map_160 = 0;
 	u8 nss_160;
 
-	/* Can do 1/2 of NSS streams in 160Mhz mode for bersa */
+	/* Can do 1/2 of NSS streams in 160Mhz mode for besra */
 	nss_160 = nss;
 
 	for (i = 0; i < 8; i++) {
@@ -952,12 +952,12 @@
 		he_mcs->rx_mcs_80p80 = cpu_to_le16(mcs_map_160);
 		he_mcs->tx_mcs_80p80 = cpu_to_le16(mcs_map_160);
 
-		bersa_set_stream_he_txbf_caps(he_cap, i, nss);
+		besra_set_stream_he_txbf_caps(he_cap, i, nss);
 
 		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) {
-			bersa_gen_ppe_thresh(he_cap->ppe_thres, nss);
+			besra_gen_ppe_thresh(he_cap->ppe_thres, nss);
 		} else {
 			he_cap_elem->phy_cap_info[9] |=
 				IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_16US;
@@ -983,7 +983,7 @@
 	return idx;
 }
 
-void bersa_set_stream_he_caps(struct bersa_phy *phy)
+void besra_set_stream_he_caps(struct besra_phy *phy)
 {
 	struct ieee80211_sband_iftype_data *data;
 	struct ieee80211_supported_band *band;
@@ -991,7 +991,7 @@
 
 	if (phy->mt76->cap.has_2ghz) {
 		data = phy->iftype[NL80211_BAND_2GHZ];
-		n = bersa_init_he_caps(phy, NL80211_BAND_2GHZ, data);
+		n = besra_init_he_caps(phy, NL80211_BAND_2GHZ, data);
 
 		band = &phy->mt76->sband_2g.sband;
 		band->iftype_data = data;
@@ -1000,7 +1000,7 @@
 
 	if (phy->mt76->cap.has_5ghz) {
 		data = phy->iftype[NL80211_BAND_5GHZ];
-		n = bersa_init_he_caps(phy, NL80211_BAND_5GHZ, data);
+		n = besra_init_he_caps(phy, NL80211_BAND_5GHZ, data);
 
 		band = &phy->mt76->sband_5g.sband;
 		band->iftype_data = data;
@@ -1009,7 +1009,7 @@
 
 	if (phy->mt76->cap.has_6ghz) {
 		data = phy->iftype[NL80211_BAND_6GHZ];
-		n = bersa_init_he_caps(phy, NL80211_BAND_6GHZ, data);
+		n = besra_init_he_caps(phy, NL80211_BAND_6GHZ, data);
 
 		band = &phy->mt76->sband_6g.sband;
 		band->iftype_data = data;
@@ -1017,35 +1017,35 @@
 	}
 }
 
-static void bersa_unregister_ext_phy(struct bersa_dev *dev)
+static void besra_unregister_ext_phy(struct besra_dev *dev)
 {
-	struct bersa_phy *phy = bersa_ext_phy(dev);
+	struct besra_phy *phy = besra_ext_phy(dev);
 	struct mt76_phy *mphy = dev->mt76.phy2;
 
 	if (!phy)
 		return;
 
-	bersa_unregister_thermal(phy);
+	besra_unregister_thermal(phy);
 	mt76_unregister_phy(mphy);
 	ieee80211_free_hw(mphy->hw);
 	dev->mt76.phy2 = NULL;
 }
 
-static void bersa_unregister_tri_phy(struct bersa_dev *dev)
+static void besra_unregister_tri_phy(struct besra_dev *dev)
 {
-	struct bersa_phy *phy = bersa_tri_phy(dev);
+	struct besra_phy *phy = besra_tri_phy(dev);
 	struct mt76_phy *mphy = dev->mt76.phy3;
 
 	if (!phy)
 		return;
 
-	bersa_unregister_thermal(phy);
+	besra_unregister_thermal(phy);
 	mt76_unregister_phy(mphy);
 	ieee80211_free_hw(mphy->hw);
 	dev->mt76.phy3 = NULL;
 }
 
-int bersa_register_device(struct bersa_dev *dev)
+int besra_register_device(struct besra_dev *dev)
 {
 	struct ieee80211_hw *hw = mt76_hw(dev);
 	int ret;
@@ -1053,30 +1053,30 @@
 	dev->phy.dev = dev;
 	dev->phy.mt76 = &dev->mt76.phy;
 	dev->mt76.phy.priv = &dev->phy;
-	INIT_WORK(&dev->rc_work, bersa_mac_sta_rc_work);
-	INIT_DELAYED_WORK(&dev->mphy.mac_work, bersa_mac_work);
+	INIT_WORK(&dev->rc_work, besra_mac_sta_rc_work);
+	INIT_DELAYED_WORK(&dev->mphy.mac_work, besra_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, bersa_mac_reset_work);
+	INIT_WORK(&dev->reset_work, besra_mac_reset_work);
 
-	ret = bersa_init_hardware(dev);
+	ret = besra_init_hardware(dev);
 	if (ret)
 		return ret;
 
-	bersa_init_wiphy(hw);
+	besra_init_wiphy(hw);
 
 #ifdef CONFIG_NL80211_TESTMODE
-	dev->mt76.test_ops = &bersa_testmode_ops;
+	dev->mt76.test_ops = &besra_testmode_ops;
 #endif
 
 	/* init led callbacks */
 	if (IS_ENABLED(CONFIG_MT76_LEDS)) {
-		dev->mt76.led_cdev.brightness_set = bersa_led_set_brightness;
-		dev->mt76.led_cdev.blink_set = bersa_led_set_blink;
+		dev->mt76.led_cdev.brightness_set = besra_led_set_brightness;
+		dev->mt76.led_cdev.blink_set = besra_led_set_blink;
 	}
 
 	ret = mt76_register_device(&dev->mt76, true, mt76_rates,
@@ -1084,32 +1084,32 @@
 	if (ret)
 		return ret;
 
-	ret = bersa_thermal_init(&dev->phy);
+	ret = besra_thermal_init(&dev->phy);
 	if (ret)
 		return ret;
 
 	ieee80211_queue_work(mt76_hw(dev), &dev->init_work);
 
-	ret = bersa_register_ext_phy(dev);
+	ret = besra_register_ext_phy(dev);
 	if (ret)
 		return ret;
 
-	ret = bersa_register_tri_phy(dev);
+	ret = besra_register_tri_phy(dev);
 	if (ret)
 		return ret;
 
-	return bersa_init_debugfs(&dev->phy);
+	return besra_init_debugfs(&dev->phy);
 }
 
-void bersa_unregister_device(struct bersa_dev *dev)
+void besra_unregister_device(struct besra_dev *dev)
 {
-	bersa_unregister_tri_phy(dev);
-	bersa_unregister_ext_phy(dev);
-	bersa_unregister_thermal(&dev->phy);
+	besra_unregister_tri_phy(dev);
+	besra_unregister_ext_phy(dev);
+	besra_unregister_thermal(&dev->phy);
 	mt76_unregister_device(&dev->mt76);
-	bersa_mcu_exit(dev);
-	bersa_tx_token_put(dev);
-	bersa_dma_cleanup(dev);
+	besra_mcu_exit(dev);
+	besra_tx_token_put(dev);
+	besra_dma_cleanup(dev);
 	tasklet_disable(&dev->irq_tasklet);
 
 	mt76_free_device(&dev->mt76);
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mac.c
similarity index 86%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mac.c
index 2d48a1a..8ff8deb 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mac.c
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mac.c
@@ -3,7 +3,7 @@
 
 #include <linux/etherdevice.h>
 #include <linux/timekeeping.h>
-#include "bersa.h"
+#include "besra.h"
 #include "../dma.h"
 #include "mac.h"
 #include "mcu.h"
@@ -14,7 +14,7 @@
 #define HE_PREP(f, m, v)	le16_encode_bits(le32_get_bits(v, MT_CRXV_HE_##m),\
 						 IEEE80211_RADIOTAP_HE_##f)
 
-static const struct bersa_dfs_radar_spec etsi_radar_specs = {
+static const struct besra_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 },
@@ -28,7 +28,7 @@
 	},
 };
 
-static const struct bersa_dfs_radar_spec fcc_radar_specs = {
+static const struct besra_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 },
@@ -39,7 +39,7 @@
 	},
 };
 
-static const struct bersa_dfs_radar_spec jp_radar_specs = {
+static const struct besra_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 },
@@ -53,10 +53,10 @@
 	},
 };
 
-static struct mt76_wcid *bersa_rx_get_wcid(struct bersa_dev *dev,
+static struct mt76_wcid *besra_rx_get_wcid(struct besra_dev *dev,
 					    u16 idx, bool unicast)
 {
-	struct bersa_sta *sta;
+	struct besra_sta *sta;
 	struct mt76_wcid *wcid;
 
 	if (idx >= ARRAY_SIZE(dev->mt76.wcid))
@@ -69,18 +69,18 @@
 	if (!wcid->sta)
 		return NULL;
 
-	sta = container_of(wcid, struct bersa_sta, wcid);
+	sta = container_of(wcid, struct besra_sta, wcid);
 	if (!sta->vif)
 		return NULL;
 
 	return &sta->vif->sta.wcid;
 }
 
-void bersa_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps)
+void besra_sta_ps(struct mt76_dev *mdev, struct ieee80211_sta *sta, bool ps)
 {
 }
 
-bool bersa_mac_wtbl_update(struct bersa_dev *dev, int idx, u32 mask)
+bool besra_mac_wtbl_update(struct besra_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);
@@ -89,7 +89,7 @@
 			 0, 5000);
 }
 
-u32 bersa_mac_wtbl_lmac_addr(struct bersa_dev *dev, u16 wcid, u8 dw)
+u32 besra_mac_wtbl_lmac_addr(struct besra_dev *dev, u16 wcid, u8 dw)
 {
 	mt76_wr(dev, MT_WTBLON_TOP_WDUCR,
 		FIELD_PREP(MT_WTBLON_TOP_WDUCR_GROUP, (wcid >> 7)));
@@ -97,7 +97,7 @@
 	return MT_WTBL_LMAC_OFFS(wcid, dw);
 }
 
-static void bersa_mac_sta_poll(struct bersa_dev *dev)
+static void besra_mac_sta_poll(struct besra_dev *dev)
 {
 	static const u8 ac_to_tid[] = {
 		[IEEE80211_AC_BE] = 0,
@@ -106,7 +106,7 @@
 		[IEEE80211_AC_VO] = 6
 	};
 	struct ieee80211_sta *sta;
-	struct bersa_sta *msta;
+	struct besra_sta *msta;
 	struct rate_info *rate;
 	u32 tx_time[IEEE80211_NUM_ACS], rx_time[IEEE80211_NUM_ACS];
 	LIST_HEAD(sta_poll_list);
@@ -130,12 +130,12 @@
 			break;
 		}
 		msta = list_first_entry(&sta_poll_list,
-					struct bersa_sta, poll_list);
+					struct besra_sta, poll_list);
 		list_del_init(&msta->poll_list);
 		spin_unlock_bh(&dev->sta_poll_lock);
 
 		idx = msta->wcid.idx;
-		addr = bersa_mac_wtbl_lmac_addr(dev, idx, 20);
+		addr = besra_mac_wtbl_lmac_addr(dev, idx, 20);
 
 		for (i = 0; i < IEEE80211_NUM_ACS; i++) {
 			u32 tx_last = msta->airtime_ac[i];
@@ -154,7 +154,7 @@
 		}
 
 		if (clear) {
-			bersa_mac_wtbl_update(dev, idx,
+			besra_mac_wtbl_update(dev, idx,
 					       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
 			memset(msta->airtime_ac, 0, sizeof(msta->airtime_ac));
 		}
@@ -184,7 +184,7 @@
 		 * from per-sta counters directly.
 		 */
 		rate = &msta->wcid.rate;
-		addr = bersa_mac_wtbl_lmac_addr(dev, idx, 6);
+		addr = besra_mac_wtbl_lmac_addr(dev, idx, 6);
 		val = mt76_rr(dev, addr);
 
 		switch (rate->bw) {
@@ -219,7 +219,7 @@
 }
 
 static void
-bersa_mac_decode_he_radiotap_ru(struct mt76_rx_status *status,
+besra_mac_decode_he_radiotap_ru(struct mt76_rx_status *status,
 				 struct ieee80211_radiotap_he *he,
 				 __le32 *rxv)
 {
@@ -268,7 +268,7 @@
 }
 
 static void
-bersa_mac_decode_he_mu_radiotap(struct sk_buff *skb, __le32 *rxv)
+besra_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 = {
@@ -309,7 +309,7 @@
 }
 
 static void
-bersa_mac_decode_he_radiotap(struct sk_buff *skb, __le32 *rxv, u8 mode)
+besra_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 = {
@@ -369,8 +369,8 @@
 		he->data3 |= HE_PREP(DATA3_UL_DL, UPLINK, rxv[2]);
 		he->data4 |= HE_PREP(DATA4_MU_STA_ID, MU_AID, rxv[7]);
 
-		bersa_mac_decode_he_radiotap_ru(status, he, rxv);
-		bersa_mac_decode_he_mu_radiotap(skb, rxv);
+		besra_mac_decode_he_radiotap_ru(status, he, rxv);
+		besra_mac_decode_he_mu_radiotap(skb, rxv);
 		break;
 	case MT_PHY_TYPE_HE_TB:
 		he->data1 |= HE_BITS(DATA1_FORMAT_TRIG) |
@@ -383,7 +383,7 @@
 			     HE_PREP(DATA4_TB_SPTL_REUSE3, SR2_MASK, rxv[11]) |
 			     HE_PREP(DATA4_TB_SPTL_REUSE4, SR3_MASK, rxv[11]);
 
-		bersa_mac_decode_he_radiotap_ru(status, he, rxv);
+		besra_mac_decode_he_radiotap_ru(status, he, rxv);
 		break;
 	default:
 		break;
@@ -391,11 +391,11 @@
 }
 
 /* The HW does not translate the mac header to 802.3 for mesh point */
-static int bersa_reverse_frag0_hdr_trans(struct sk_buff *skb, u16 hdr_gap)
+static int besra_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 bersa_sta *msta = (struct bersa_sta *)status->wcid;
+	struct besra_sta *msta = (struct besra_sta *)status->wcid;
 	__le32 *rxd = (__le32 *)skb->data;
 	struct ieee80211_sta *sta;
 	struct ieee80211_vif *vif;
@@ -471,7 +471,7 @@
 }
 
 static int
-bersa_mac_fill_rx_rate(struct bersa_dev *dev,
+besra_mac_fill_rx_rate(struct besra_dev *dev,
 			struct mt76_rx_status *status,
 			struct ieee80211_supported_band *sband,
 			__le32 *rxv, u8 *mode)
@@ -565,11 +565,11 @@
 }
 
 static int
-bersa_mac_fill_rx(struct bersa_dev *dev, struct sk_buff *skb)
+besra_mac_fill_rx(struct besra_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 bersa_phy *phy = &dev->phy;
+	struct besra_phy *phy = &dev->phy;
 	struct ieee80211_supported_band *sband;
 	__le32 *rxd = (__le32 *)skb->data;
 	__le32 *rxv = NULL;
@@ -612,12 +612,12 @@
 
 	unicast = FIELD_GET(MT_RXD3_NORMAL_ADDR_TYPE, rxd3) == MT_RXD3_NORMAL_U2M;
 	idx = FIELD_GET(MT_RXD1_NORMAL_WLAN_IDX, rxd1);
-	status->wcid = bersa_rx_get_wcid(dev, idx, unicast);
+	status->wcid = besra_rx_get_wcid(dev, idx, unicast);
 
 	if (status->wcid) {
-		struct bersa_sta *msta;
+		struct besra_sta *msta;
 
-		msta = container_of(status->wcid, struct bersa_sta, wcid);
+		msta = container_of(status->wcid, struct besra_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);
@@ -750,7 +750,7 @@
 		}
 
 		/* TODO: parse rx rate from rxv */
-		ret = bersa_mac_fill_rx_rate(dev, status, sband, rxv, &mode);
+		ret = besra_mac_fill_rx_rate(dev, status, sband, rxv, &mode);
 		if (ret < 0)
 			return ret;
 	}
@@ -764,7 +764,7 @@
 
 	hdr_gap = (u8 *)rxd - skb->data + 2 * remove_pad;
 	if (hdr_trans && ieee80211_has_morefrags(fc)) {
-		if (bersa_reverse_frag0_hdr_trans(skb, hdr_gap))
+		if (besra_reverse_frag0_hdr_trans(skb, hdr_gap))
 			return -EINVAL;
 		hdr_trans = false;
 	} else {
@@ -815,7 +815,7 @@
 	}
 
 	if (rxv && mode >= MT_PHY_TYPE_HE_SU && !(status->flag & RX_FLAG_8023))
-		bersa_mac_decode_he_radiotap(skb, rxv, mode);
+		besra_mac_decode_he_radiotap(skb, rxv, mode);
 
 	if (!status->wcid || !ieee80211_is_data_qos(fc))
 		return 0;
@@ -829,10 +829,10 @@
 }
 
 static void
-bersa_mac_fill_rx_vector(struct bersa_dev *dev, struct sk_buff *skb)
+besra_mac_fill_rx_vector(struct besra_dev *dev, struct sk_buff *skb)
 {
 #ifdef CONFIG_NL80211_TESTMODE
-	struct bersa_phy *phy = &dev->phy;
+	struct besra_phy *phy = &dev->phy;
 	__le32 *rxd = (__le32 *)skb->data;
 	__le32 *rxv_hdr = rxd + 2;
 	__le32 *rxv = rxd + 4;
@@ -844,13 +844,13 @@
 
 	phy_idx = le32_get_bits(rxv_hdr[1], MT_RXV_HDR_BAND_IDX);
 	if (phy_idx == MT_EXT_PHY) {
-		phy = bersa_ext_phy(dev);
+		phy = besra_ext_phy(dev);
 		if (!phy)
 			goto out;
 	}
 
 	if (phy_idx == MT_TRI_PHY) {
-		phy = bersa_tri_phy(dev);
+		phy = besra_tri_phy(dev);
 		if (!phy)
 			goto out;
 	}
@@ -884,7 +884,7 @@
 }
 
 static void
-bersa_mac_write_txwi_tm(struct bersa_phy *phy, __le32 *txwi,
+besra_mac_write_txwi_tm(struct besra_phy *phy, __le32 *txwi,
 			 struct sk_buff *skb)
 {
 #ifdef CONFIG_NL80211_TESTMODE
@@ -999,7 +999,7 @@
 }
 
 static void
-bersa_mac_write_txwi_8023(struct bersa_dev *dev, __le32 *txwi,
+besra_mac_write_txwi_8023(struct besra_dev *dev, __le32 *txwi,
 			   struct sk_buff *skb, struct mt76_wcid *wcid)
 {
 
@@ -1035,7 +1035,7 @@
 }
 
 static void
-bersa_mac_write_txwi_80211(struct bersa_dev *dev, __le32 *txwi,
+besra_mac_write_txwi_80211(struct besra_dev *dev, __le32 *txwi,
 			    struct sk_buff *skb, struct ieee80211_key_conf *key,
 			    bool *mcast)
 {
@@ -1105,7 +1105,7 @@
 }
 
 static u16
-bersa_mac_tx_rate_val(struct mt76_phy *mphy, struct ieee80211_vif *vif,
+besra_mac_tx_rate_val(struct mt76_phy *mphy, struct ieee80211_vif *vif,
 		       bool beacon, bool mcast)
 {
 	u8 mode = 0, band = mphy->chandef.chan->band;
@@ -1149,13 +1149,13 @@
 	       FIELD_PREP(MT_TX_RATE_MODE, mode);
 }
 
-void bersa_mac_write_txwi(struct bersa_dev *dev, __le32 *txwi,
+void besra_mac_write_txwi(struct besra_dev *dev, __le32 *txwi,
 			   struct sk_buff *skb, struct mt76_wcid *wcid, int pid,
 			   struct ieee80211_key_conf *key, bool beacon)
 {
 	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 	struct ieee80211_vif *vif = info->control.vif;
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 	struct mt76_phy *mphy = &dev->mphy;
 	u8 phy_idx = (info->hw_queue & MT_TX_HW_QUEUE_PHY) >> 2;
 	u8 p_fmt, q_idx, omac_idx = 0, wmm_idx = 0, band_idx = 0;
@@ -1165,7 +1165,7 @@
 	u32 val;
 
 	if (vif) {
-		struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+		struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 
 		omac_idx = mvif->mt76.omac_idx;
 		wmm_idx = mvif->mt76.wmm_idx;
@@ -1182,7 +1182,7 @@
 		q_idx = MT_LMAC_ALTX0;
 	} else {
 		p_fmt = MT_TX_TYPE_CT;
-		q_idx = wmm_idx * BERSA_MAX_WMM_SETS +
+		q_idx = wmm_idx * BESRA_MAX_WMM_SETS +
 			mt76_connac_lmac_mapping(skb_get_queue_mapping(skb));
 	}
 
@@ -1226,12 +1226,12 @@
 	txwi[7] = 0;
 
 	if (is_8023)
-		bersa_mac_write_txwi_8023(dev, txwi, skb, wcid);
+		besra_mac_write_txwi_8023(dev, txwi, skb, wcid);
 	else
-		bersa_mac_write_txwi_80211(dev, txwi, skb, key, &mcast);
+		besra_mac_write_txwi_80211(dev, txwi, skb, key, &mcast);
 
 	if (txwi[1] & cpu_to_le32(MT_TXD1_FIXED_RATE)) {
-		u16 rate = bersa_mac_tx_rate_val(mphy, vif, beacon, mcast);
+		u16 rate = besra_mac_tx_rate_val(mphy, vif, beacon, mcast);
 
 		/* hardware won't add HTC for mgmt/ctrl frame */
 		/* txwi[2] |= cpu_to_le32(MT_TXD2_HTC_VLD); */
@@ -1243,21 +1243,21 @@
 	}
 
 	if (mt76_testmode_enabled(mphy))
-		bersa_mac_write_txwi_tm(mphy->priv, txwi, skb);
+		besra_mac_write_txwi_tm(mphy->priv, txwi, skb);
 }
 
-int bersa_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
+int besra_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 bersa_dev *dev = container_of(mdev, struct bersa_dev, mt76);
+	struct besra_dev *dev = container_of(mdev, struct besra_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 bersa_txp *txp;
+	struct besra_txp *txp;
 	int id, i, nbuf = tx_info->nbuf - 1;
 	bool is_8023 = info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP;
 	u8 *txwi = (u8 *)txwi_ptr;
@@ -1270,9 +1270,9 @@
 		wcid = &dev->mt76.global_wcid;
 
 	if (sta) {
-		struct bersa_sta *msta;
+		struct besra_sta *msta;
 
-		msta = (struct bersa_sta *)sta->drv_priv;
+		msta = (struct besra_sta *)sta->drv_priv;
 
 		if (time_after(jiffies, msta->jiffies + HZ / 4)) {
 			info->flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
@@ -1291,10 +1291,10 @@
 	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)
-		bersa_mac_write_txwi(dev, txwi_ptr, tx_info->skb, wcid, pid,
+		besra_mac_write_txwi(dev, txwi_ptr, tx_info->skb, wcid, pid,
 				     key, false);
 
-	txp = (struct bersa_txp *)(txwi + MT_TXD_SIZE);
+	txp = (struct besra_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);
@@ -1313,7 +1313,7 @@
 		txp->flags |= cpu_to_le16(MT_CT_INFO_MGMT_FRAME);
 
 	if (vif) {
-		struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+		struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 
 		txp->bss_idx = mvif->mt76.idx;
 	}
@@ -1334,9 +1334,9 @@
 }
 
 static void
-bersa_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
+besra_tx_check_aggr(struct ieee80211_sta *sta, __le32 *txwi)
 {
-	struct bersa_sta *msta;
+	struct besra_sta *msta;
 	u16 fc, tid;
 	u32 val;
 
@@ -1353,25 +1353,25 @@
 	if (unlikely(fc != (IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_DATA)))
 		return;
 
-	msta = (struct bersa_sta *)sta->drv_priv;
+	msta = (struct besra_sta *)sta->drv_priv;
 	if (!test_and_set_bit(tid, &msta->ampdu_state))
 		ieee80211_start_tx_ba_session(sta, tid, 0);
 }
 
 static void
-bersa_txp_skb_unmap(struct mt76_dev *dev, struct mt76_txwi_cache *t)
+besra_txp_skb_unmap(struct mt76_dev *dev, struct mt76_txwi_cache *t)
 {
-	struct bersa_txp *txp;
+	struct besra_txp *txp;
 	int i;
 
-	txp = bersa_txwi_to_txp(dev, t);
+	txp = besra_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
-bersa_txwi_free(struct bersa_dev *dev, struct mt76_txwi_cache *t,
+besra_txwi_free(struct besra_dev *dev, struct mt76_txwi_cache *t,
 		 struct ieee80211_sta *sta, struct list_head *free_list)
 {
 	struct mt76_dev *mdev = &dev->mt76;
@@ -1379,7 +1379,7 @@
 	__le32 *txwi;
 	u16 wcid_idx;
 
-	bersa_txp_skb_unmap(mdev, t);
+	besra_txp_skb_unmap(mdev, t);
 	if (!t->skb)
 		goto out;
 
@@ -1389,7 +1389,7 @@
 		wcid_idx = wcid->idx;
 
 		if (likely(t->skb->protocol != cpu_to_be16(ETH_P_PAE)))
-			bersa_tx_check_aggr(sta, txwi);
+			besra_tx_check_aggr(sta, txwi);
 	} else {
 		wcid_idx = le32_get_bits(txwi[1], MT_TXD1_WLAN_IDX);
 	}
@@ -1402,9 +1402,9 @@
 }
 
 static void
-bersa_mac_tx_free(struct bersa_dev *dev, void *data, int len)
+besra_mac_tx_free(struct besra_dev *dev, void *data, int len)
 {
-	struct bersa_tx_free *free = (struct bersa_tx_free *)data;
+	struct besra_tx_free *free = (struct besra_tx_free *)data;
 	struct mt76_dev *mdev = &dev->mt76;
 	struct mt76_phy *mphy_ext = mdev->phy2;
 	struct mt76_phy *mphy_tri = mdev->phy3;
@@ -1444,7 +1444,7 @@
 		 * 1'b0: msdu_id with the same 'wcid pair' as above.
 		 */
 		if (info & MT_TX_FREE_PAIR) {
-			struct bersa_sta *msta;
+			struct besra_sta *msta;
 			struct mt76_wcid *wcid;
 			u16 idx;
 
@@ -1454,7 +1454,7 @@
 			if (!sta)
 				continue;
 
-			msta = container_of(wcid, struct bersa_sta, wcid);
+			msta = container_of(wcid, struct besra_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);
@@ -1478,11 +1478,11 @@
 			if (!txwi)
 				continue;
 
-			bersa_txwi_free(dev, txwi, sta, &free_list);
+			besra_txwi_free(dev, txwi, sta, &free_list);
 		}
 	}
 
-	bersa_mac_sta_poll(dev);
+	besra_mac_sta_poll(dev);
 
 	if (wake)
 		mt76_set_tx_blocked(&dev->mt76, false);
@@ -1496,7 +1496,7 @@
 }
 
 static bool
-bersa_mac_add_txs_skb(struct bersa_dev *dev, struct mt76_wcid *wcid, int pid,
+besra_mac_add_txs_skb(struct besra_dev *dev, struct mt76_wcid *wcid, int pid,
 		       __le32 *txs_data, struct mt76_sta_stats *stats)
 {
 	struct ieee80211_supported_band *sband;
@@ -1615,9 +1615,9 @@
 	return !!skb;
 }
 
-static void bersa_mac_add_txs(struct bersa_dev *dev, void *data)
+static void besra_mac_add_txs(struct besra_dev *dev, void *data)
 {
-	struct bersa_sta *msta = NULL;
+	struct besra_sta *msta = NULL;
 	struct mt76_wcid *wcid;
 	__le32 *txs_data = data;
 	u16 wcidx;
@@ -1632,7 +1632,7 @@
 	if (pid < MT_PACKET_ID_FIRST)
 		return;
 
-	if (wcidx >= BERSA_WTBL_SIZE)
+	if (wcidx >= BESRA_WTBL_SIZE)
 		return;
 
 	rcu_read_lock();
@@ -1641,9 +1641,9 @@
 	if (!wcid)
 		goto out;
 
-	msta = container_of(wcid, struct bersa_sta, wcid);
+	msta = container_of(wcid, struct besra_sta, wcid);
 
-	bersa_mac_add_txs_skb(dev, wcid, pid, txs_data, &msta->stats);
+	besra_mac_add_txs_skb(dev, wcid, pid, txs_data, &msta->stats);
 
 	if (!wcid->sta)
 		goto out;
@@ -1657,9 +1657,9 @@
 	rcu_read_unlock();
 }
 
-bool bersa_rx_check(struct mt76_dev *mdev, enum mt76_rxq_id q, void *data, int len)
+bool besra_rx_check(struct mt76_dev *mdev, enum mt76_rxq_id q, void *data, int len)
 {
-	struct bersa_dev *dev = container_of(mdev, struct bersa_dev, mt76);
+	struct besra_dev *dev = container_of(mdev, struct besra_dev, mt76);
 	__le32 *rxd = (__le32 *)data;
 	__le32 *end = (__le32 *)&rxd[len / 4];
 	enum rx_pkt_type type;
@@ -1675,24 +1675,24 @@
 
 	switch (type) {
 	case PKT_TYPE_TXRX_NOTIFY:
-		bersa_mac_tx_free(dev, data, len);
+		besra_mac_tx_free(dev, data, len);
 		return false;
 	case PKT_TYPE_TXS:
 		for (rxd += 4; rxd + 8 <= end; rxd += 8)
-			bersa_mac_add_txs(dev, rxd);
+			besra_mac_add_txs(dev, rxd);
 		return false;
 	case PKT_TYPE_RX_FW_MONITOR:
-		bersa_debugfs_rx_fw_monitor(dev, data, len);
+		besra_debugfs_rx_fw_monitor(dev, data, len);
 		return false;
 	default:
 		return true;
 	}
 }
 
-void bersa_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
+void besra_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,
 			 struct sk_buff *skb)
 {
-	struct bersa_dev *dev = container_of(mdev, struct bersa_dev, mt76);
+	struct besra_dev *dev = container_of(mdev, struct besra_dev, mt76);
 	__le32 *rxd = (__le32 *)skb->data;
 	__le32 *end = (__le32 *)&skb->data[skb->len];
 	enum rx_pkt_type type;
@@ -1708,26 +1708,26 @@
 
 	switch (type) {
 	case PKT_TYPE_TXRX_NOTIFY:
-		bersa_mac_tx_free(dev, skb->data, skb->len);
+		besra_mac_tx_free(dev, skb->data, skb->len);
 		napi_consume_skb(skb, 1);
 		break;
 	case PKT_TYPE_RX_EVENT:
-		bersa_mcu_rx_event(dev, skb);
+		besra_mcu_rx_event(dev, skb);
 		break;
 	case PKT_TYPE_TXRXV:
-		bersa_mac_fill_rx_vector(dev, skb);
+		besra_mac_fill_rx_vector(dev, skb);
 		break;
 	case PKT_TYPE_TXS:
 		for (rxd += 4; rxd + 8 <= end; rxd += 8)
-			bersa_mac_add_txs(dev, rxd);
+			besra_mac_add_txs(dev, rxd);
 		dev_kfree_skb(skb);
 		break;
 	case PKT_TYPE_RX_FW_MONITOR:
-		bersa_debugfs_rx_fw_monitor(dev, skb->data, skb->len);
+		besra_debugfs_rx_fw_monitor(dev, skb->data, skb->len);
 		dev_kfree_skb(skb);
 		break;
 	case PKT_TYPE_NORMAL:
-		if (!bersa_mac_fill_rx(dev, skb)) {
+		if (!besra_mac_fill_rx(dev, skb)) {
 			mt76_rx(&dev->mt76, q, skb);
 			return;
 		}
@@ -1738,7 +1738,7 @@
 	}
 }
 
-void bersa_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e)
+void besra_tx_complete_skb(struct mt76_dev *mdev, struct mt76_queue_entry *e)
 {
 	if (!e->txwi) {
 		dev_kfree_skb_any(e->skb);
@@ -1748,9 +1748,9 @@
 	/* error path */
 	if (e->skb == DMA_DUMMY_DATA) {
 		struct mt76_txwi_cache *t;
-		struct bersa_txp *txp;
+		struct besra_txp *txp;
 
-		txp = bersa_txwi_to_txp(mdev, e->txwi);
+		txp = besra_txwi_to_txp(mdev, e->txwi);
 		t = mt76_token_put(mdev, le16_to_cpu(txp->token));
 		e->skb = t ? t->skb : NULL;
 	}
@@ -1759,18 +1759,18 @@
 		mt76_tx_complete_skb(mdev, e->wcid, e->skb);
 }
 
-void bersa_mac_cca_stats_reset(struct bersa_phy *phy)
+void besra_mac_cca_stats_reset(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_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 bersa_mac_reset_counters(struct bersa_phy *phy)
+void besra_mac_reset_counters(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	int i;
 
 	for (i = 0; i < 4; i++) {
@@ -1789,15 +1789,15 @@
 	mt76_set(dev, MT_WF_RMAC_MIB_AIRTIME0(phy->band_idx),
 		 MT_WF_RMAC_MIB_RXTIME_CLR);
 
-	bersa_mcu_get_chan_mib_info(phy, true);
+	besra_mcu_get_chan_mib_info(phy, true);
 }
 
-void bersa_mac_set_timing(struct bersa_phy *phy)
+void besra_mac_set_timing(struct besra_phy *phy)
 {
 	s16 coverage_class = phy->coverage_class;
-	struct bersa_dev *dev = phy->dev;
-	struct bersa_phy *ext_phy = bersa_ext_phy(dev);
-	struct bersa_phy *tri_phy = bersa_tri_phy(dev);
+	struct besra_dev *dev = phy->dev;
+	struct besra_phy *ext_phy = besra_ext_phy(dev);
+	struct besra_phy *tri_phy = besra_tri_phy(dev);
 	u32 val, reg_offset;
 	u32 cck = FIELD_PREP(MT_TIMEOUT_VAL_PLCP, 231) |
 		  FIELD_PREP(MT_TIMEOUT_VAL_CCA, 48);
@@ -1837,16 +1837,16 @@
 		FIELD_PREP(MT_IFS_EIFS_CCK, 314));
 
 	if (phy->slottime < 20 || a_band)
-		val = BERSA_CFEND_RATE_DEFAULT;
+		val = BESRA_CFEND_RATE_DEFAULT;
 	else
-		val = BERSA_CFEND_RATE_11B;
+		val = BESRA_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 bersa_mac_enable_nf(struct bersa_dev *dev, u8 band)
+void besra_mac_enable_nf(struct besra_dev *dev, u8 band)
 {
 	mt76_set(dev, MT_WF_PHY_RXTD12(band),
 		 MT_WF_PHY_RXTD12_IRPI_SW_CLR_ONLY |
@@ -1857,10 +1857,10 @@
 }
 
 static u8
-bersa_phy_get_nf(struct bersa_phy *phy, int idx)
+besra_phy_get_nf(struct besra_phy *phy, int idx)
 {
 	static const u8 nf_power[] = { 92, 89, 86, 83, 80, 75, 70, 65, 60, 55, 52 };
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	u32 val, sum = 0, n = 0;
 	int nss, i;
 
@@ -1880,15 +1880,15 @@
 	return sum / n;
 }
 
-void bersa_update_channel(struct mt76_phy *mphy)
+void besra_update_channel(struct mt76_phy *mphy)
 {
-	struct bersa_phy *phy = (struct bersa_phy *)mphy->priv;
+	struct besra_phy *phy = (struct besra_phy *)mphy->priv;
 	struct mt76_channel_state *state = mphy->chan_state;
 	int nf;
 
-	bersa_mcu_get_chan_mib_info(phy, false);
+	besra_mcu_get_chan_mib_info(phy, false);
 
-	nf = bersa_phy_get_nf(phy, phy->band_idx);
+	nf = besra_phy_get_nf(phy, phy->band_idx);
 	if (!phy->noise)
 		phy->noise = nf << 4;
 	else if (nf)
@@ -1898,20 +1898,20 @@
 }
 
 static bool
-bersa_wait_reset_state(struct bersa_dev *dev, u32 state)
+besra_wait_reset_state(struct besra_dev *dev, u32 state)
 {
 	bool ret;
 
 	ret = wait_event_timeout(dev->reset_wait,
 				 (READ_ONCE(dev->reset_state) & state),
-				 BERSA_RESET_TIMEOUT);
+				 BESRA_RESET_TIMEOUT);
 
 	WARN(!ret, "Timeout waiting for MCU reset state %x\n", state);
 	return ret;
 }
 
 static void
-bersa_update_vif_beacon(void *priv, u8 *mac, struct ieee80211_vif *vif)
+besra_update_vif_beacon(void *priv, u8 *mac, struct ieee80211_vif *vif)
 {
 	struct ieee80211_hw *hw = priv;
 
@@ -1919,7 +1919,7 @@
 	case NL80211_IFTYPE_MESH_POINT:
 	case NL80211_IFTYPE_ADHOC:
 	case NL80211_IFTYPE_AP:
-		bersa_mcu_add_beacon(hw, vif, vif->bss_conf.enable_beacon);
+		besra_mcu_add_beacon(hw, vif, vif->bss_conf.enable_beacon);
 		break;
 	default:
 		break;
@@ -1927,29 +1927,29 @@
 }
 
 static void
-bersa_update_beacons(struct bersa_dev *dev)
+besra_update_beacons(struct besra_dev *dev)
 {
 	ieee80211_iterate_active_interfaces(dev->mt76.hw,
 		IEEE80211_IFACE_ITER_RESUME_ALL,
-		bersa_update_vif_beacon, dev->mt76.hw);
+		besra_update_vif_beacon, dev->mt76.hw);
 
 	if (!dev->mt76.phy2)
 		return;
 
 	ieee80211_iterate_active_interfaces(dev->mt76.phy2->hw,
 		IEEE80211_IFACE_ITER_RESUME_ALL,
-		bersa_update_vif_beacon, dev->mt76.phy2->hw);
+		besra_update_vif_beacon, dev->mt76.phy2->hw);
 
 	if (!dev->mt76.phy3)
 		return;
 
 	ieee80211_iterate_active_interfaces(dev->mt76.phy3->hw,
 		IEEE80211_IFACE_ITER_RESUME_ALL,
-		bersa_update_vif_beacon, dev->mt76.phy3->hw);
+		besra_update_vif_beacon, dev->mt76.phy3->hw);
 }
 
 static void
-bersa_dma_reset(struct bersa_dev *dev)
+besra_dma_reset(struct besra_dev *dev)
 {
 	struct mt76_phy *mphy_ext = dev->mt76.phy2;
 	struct mt76_phy *mphy_tri = dev->mt76.phy3;
@@ -1984,7 +1984,7 @@
 	mt76_tx_status_check(&dev->mt76, true);
 
 	/* re-init prefetch settings after reset */
-	bersa_dma_prefetch(dev);
+	besra_dma_prefetch(dev);
 
 	mt76_set(dev, MT_WFDMA0_GLO_CFG,
 		 MT_WFDMA0_GLO_CFG_TX_DMA_EN | MT_WFDMA0_GLO_CFG_RX_DMA_EN);
@@ -1995,14 +1995,14 @@
 			 MT_WFDMA0_GLO_CFG_RX_DMA_EN);
 }
 
-void bersa_tx_token_put(struct bersa_dev *dev)
+void besra_tx_token_put(struct besra_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) {
-		bersa_txwi_free(dev, txwi, NULL, NULL);
+		besra_txwi_free(dev, txwi, NULL, NULL);
 		dev->mt76.token_count--;
 	}
 	spin_unlock_bh(&dev->mt76.token_lock);
@@ -2010,13 +2010,13 @@
 }
 
 /* system error recovery */
-void bersa_mac_reset_work(struct work_struct *work)
+void besra_mac_reset_work(struct work_struct *work)
 {
-	struct bersa_phy *phy2, *phy3;
+	struct besra_phy *phy2, *phy3;
 	struct mt76_phy *ext_phy, *tri_phy;
-	struct bersa_dev *dev;
+	struct besra_dev *dev;
 
-	dev = container_of(work, struct bersa_dev, reset_work);
+	dev = container_of(work, struct besra_dev, reset_work);
 	ext_phy = dev->mt76.phy2;
 	phy2 = ext_phy ? ext_phy->priv : NULL;
 
@@ -2054,14 +2054,14 @@
 
 	mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_DMA_STOPPED);
 
-	if (bersa_wait_reset_state(dev, MT_MCU_CMD_RESET_DONE)) {
-		bersa_dma_reset(dev);
+	if (besra_wait_reset_state(dev, MT_MCU_CMD_RESET_DONE)) {
+		besra_dma_reset(dev);
 
-		bersa_tx_token_put(dev);
+		besra_tx_token_put(dev);
 		idr_init(&dev->mt76.token);
 
 		mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_DMA_INIT);
-		bersa_wait_reset_state(dev, MT_MCU_CMD_RECOVERY_DONE);
+		besra_wait_reset_state(dev, MT_MCU_CMD_RECOVERY_DONE);
 	}
 
 	clear_bit(MT76_MCU_RESET, &dev->mphy.state);
@@ -2085,7 +2085,7 @@
 	tasklet_schedule(&dev->irq_tasklet);
 
 	mt76_wr(dev, MT_MCU_INT_EVENT, MT_MCU_INT_EVENT_RESET_DONE);
-	bersa_wait_reset_state(dev, MT_MCU_CMD_NORMAL_STATE);
+	besra_wait_reset_state(dev, MT_MCU_CMD_NORMAL_STATE);
 
 	mt76_worker_enable(&dev->mt76.tx_worker);
 
@@ -2100,23 +2100,23 @@
 
 	mutex_unlock(&dev->mt76.mutex);
 
-	bersa_update_beacons(dev);
+	besra_update_beacons(dev);
 
 	ieee80211_queue_delayed_work(mt76_hw(dev), &dev->mphy.mac_work,
-				     BERSA_WATCHDOG_TIME);
+				     BESRA_WATCHDOG_TIME);
 	if (phy2)
 		ieee80211_queue_delayed_work(ext_phy->hw,
 					     &phy2->mt76->mac_work,
-					     BERSA_WATCHDOG_TIME);
+					     BESRA_WATCHDOG_TIME);
 	if (phy3)
 		ieee80211_queue_delayed_work(tri_phy->hw,
 					     &phy3->mt76->mac_work,
-					     BERSA_WATCHDOG_TIME);
+					     BESRA_WATCHDOG_TIME);
 }
 
-void bersa_mac_update_stats(struct bersa_phy *phy)
+void besra_mac_update_stats(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	struct mib_stats *mib = &phy->mib;
 	int i, aggr0, cnt;
 	u32 val;
@@ -2258,12 +2258,12 @@
 	}
 }
 
-void bersa_mac_sta_rc_work(struct work_struct *work)
+void besra_mac_sta_rc_work(struct work_struct *work)
 {
-	struct bersa_dev *dev = container_of(work, struct bersa_dev, rc_work);
+	struct besra_dev *dev = container_of(work, struct besra_dev, rc_work);
 	struct ieee80211_sta *sta;
 	struct ieee80211_vif *vif;
-	struct bersa_sta *msta;
+	struct besra_sta *msta;
 	u32 changed;
 	LIST_HEAD(list);
 
@@ -2271,7 +2271,7 @@
 	list_splice_init(&dev->sta_rc_list, &list);
 
 	while (!list_empty(&list)) {
-		msta = list_first_entry(&list, struct bersa_sta, rc_list);
+		msta = list_first_entry(&list, struct besra_sta, rc_list);
 		list_del_init(&msta->rc_list);
 		changed = msta->changed;
 		msta->changed = 0;
@@ -2283,10 +2283,10 @@
 		if (changed & (IEEE80211_RC_SUPP_RATES_CHANGED |
 			       IEEE80211_RC_NSS_CHANGED |
 			       IEEE80211_RC_BW_CHANGED))
-			bersa_mcu_add_rate_ctrl(dev, vif, sta, true);
+			besra_mcu_add_rate_ctrl(dev, vif, sta, true);
 
 		if (changed & IEEE80211_RC_SMPS_CHANGED)
-			bersa_mcu_add_smps(dev, vif, sta);
+			besra_mcu_add_smps(dev, vif, sta);
 
 		spin_lock_bh(&dev->sta_poll_lock);
 	}
@@ -2294,9 +2294,9 @@
 	spin_unlock_bh(&dev->sta_poll_lock);
 }
 
-void bersa_mac_work(struct work_struct *work)
+void besra_mac_work(struct work_struct *work)
 {
-	struct bersa_phy *phy;
+	struct besra_phy *phy;
 	struct mt76_phy *mphy;
 
 	mphy = (struct mt76_phy *)container_of(work, struct mt76_phy,
@@ -2310,7 +2310,7 @@
 	/* if (++mphy->mac_work_count == 5) { */
 	/* 	mphy->mac_work_count = 0; */
 
-	/* 	bersa_mac_update_stats(phy); */
+	/* 	besra_mac_update_stats(phy); */
 	/* } */
 
 	mutex_unlock(&mphy->dev->mutex);
@@ -2318,22 +2318,22 @@
 	mt76_tx_status_check(mphy->dev, false);
 
 	ieee80211_queue_delayed_work(mphy->hw, &mphy->mac_work,
-				     BERSA_WATCHDOG_TIME);
+				     BESRA_WATCHDOG_TIME);
 }
 
-static void bersa_dfs_stop_radar_detector(struct bersa_phy *phy)
+static void besra_dfs_stop_radar_detector(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 
 	if (phy->rdd_state & BIT(0))
-		bersa_mcu_rdd_cmd(dev, RDD_STOP, 0,
+		besra_mcu_rdd_cmd(dev, RDD_STOP, 0,
 				  MT_RX_SEL0, 0);
 	if (phy->rdd_state & BIT(1))
-		bersa_mcu_rdd_cmd(dev, RDD_STOP, 1,
+		besra_mcu_rdd_cmd(dev, RDD_STOP, 1,
 				  MT_RX_SEL0, 0);
 }
 
-static int bersa_dfs_start_rdd(struct bersa_dev *dev, int chain)
+static int besra_dfs_start_rdd(struct besra_dev *dev, int chain)
 {
 	int err, region;
 
@@ -2350,28 +2350,28 @@
 		break;
 	}
 
-	err = bersa_mcu_rdd_cmd(dev, RDD_START, chain,
+	err = besra_mcu_rdd_cmd(dev, RDD_START, chain,
 				MT_RX_SEL0, region);
 	if (err < 0)
 		return err;
 
-	return bersa_mcu_rdd_cmd(dev, RDD_DET_MODE, chain,
+	return besra_mcu_rdd_cmd(dev, RDD_DET_MODE, chain,
 				 MT_RX_SEL0, 1);
 }
 
-static int bersa_dfs_start_radar_detector(struct bersa_phy *phy)
+static int besra_dfs_start_radar_detector(struct besra_phy *phy)
 {
 	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	int err;
 
 	/* start CAC */
-	err = bersa_mcu_rdd_cmd(dev, RDD_CAC_START, phy->band_idx,
+	err = besra_mcu_rdd_cmd(dev, RDD_CAC_START, phy->band_idx,
 				MT_RX_SEL0, 0);
 	if (err < 0)
 		return err;
 
-	err = bersa_dfs_start_rdd(dev, phy->band_idx);
+	err = besra_dfs_start_rdd(dev, phy->band_idx);
 	if (err < 0)
 		return err;
 
@@ -2382,7 +2382,7 @@
 
 	if (chandef->width == NL80211_CHAN_WIDTH_160 ||
 	    chandef->width == NL80211_CHAN_WIDTH_80P80) {
-		err = bersa_dfs_start_rdd(dev, 1);
+		err = besra_dfs_start_rdd(dev, 1);
 		if (err < 0)
 			return err;
 
@@ -2393,16 +2393,16 @@
 }
 
 static int
-bersa_dfs_init_radar_specs(struct bersa_phy *phy)
+besra_dfs_init_radar_specs(struct besra_phy *phy)
 {
-	const struct bersa_dfs_radar_spec *radar_specs;
-	struct bersa_dev *dev = phy->dev;
+	const struct besra_dfs_radar_spec *radar_specs;
+	struct besra_dev *dev = phy->dev;
 	int err, i;
 
 	switch (dev->mt76.region) {
 	case NL80211_DFS_FCC:
 		radar_specs = &fcc_radar_specs;
-		err = bersa_mcu_set_fcc5_lpn(dev, 8);
+		err = besra_mcu_set_fcc5_lpn(dev, 8);
 		if (err < 0)
 			return err;
 		break;
@@ -2417,18 +2417,18 @@
 	}
 
 	for (i = 0; i < ARRAY_SIZE(radar_specs->radar_pattern); i++) {
-		err = bersa_mcu_set_radar_th(dev, i,
+		err = besra_mcu_set_radar_th(dev, i,
 					      &radar_specs->radar_pattern[i]);
 		if (err < 0)
 			return err;
 	}
 
-	return bersa_mcu_set_pulse_th(dev, &radar_specs->pulse_th);
+	return besra_mcu_set_pulse_th(dev, &radar_specs->pulse_th);
 }
 
-int bersa_dfs_init_radar_detector(struct bersa_phy *phy)
+int besra_dfs_init_radar_detector(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	enum mt76_dfs_state dfs_state, prev_state;
 	int err;
 
@@ -2439,17 +2439,17 @@
 		return 0;
 
 	if (prev_state == MT_DFS_STATE_UNKNOWN)
-		bersa_dfs_stop_radar_detector(phy);
+		besra_dfs_stop_radar_detector(phy);
 
 	if (dfs_state == MT_DFS_STATE_DISABLED)
 		goto stop;
 
 	if (prev_state <= MT_DFS_STATE_DISABLED) {
-		err = bersa_dfs_init_radar_specs(phy);
+		err = besra_dfs_init_radar_specs(phy);
 		if (err < 0)
 			return err;
 
-		err = bersa_dfs_start_radar_detector(phy);
+		err = besra_dfs_start_radar_detector(phy);
 		if (err < 0)
 			return err;
 
@@ -2459,7 +2459,7 @@
 	if (dfs_state == MT_DFS_STATE_CAC)
 		return 0;
 
-	err = bersa_mcu_rdd_cmd(dev, RDD_CAC_END,
+	err = besra_mcu_rdd_cmd(dev, RDD_CAC_END,
 				phy->band_idx, MT_RX_SEL0, 0);
 	if (err < 0) {
 		phy->mt76->dfs_state = MT_DFS_STATE_UNKNOWN;
@@ -2470,33 +2470,33 @@
 	return 0;
 
 stop:
-	err = bersa_mcu_rdd_cmd(dev, RDD_NORMAL_START,
+	err = besra_mcu_rdd_cmd(dev, RDD_NORMAL_START,
 				phy->band_idx, MT_RX_SEL0, 0);
 	if (err < 0)
 		return err;
 
-	bersa_dfs_stop_radar_detector(phy);
+	besra_dfs_stop_radar_detector(phy);
 	phy->mt76->dfs_state = MT_DFS_STATE_DISABLED;
 
 	return 0;
 }
 
 static int
-bersa_mac_twt_duration_align(int duration)
+besra_mac_twt_duration_align(int duration)
 {
 	return duration << 8;
 }
 
 static u64
-bersa_mac_twt_sched_list_add(struct bersa_dev *dev,
-			      struct bersa_twt_flow *flow)
+besra_mac_twt_sched_list_add(struct besra_dev *dev,
+			      struct besra_twt_flow *flow)
 {
-	struct bersa_twt_flow *iter, *iter_next;
+	struct besra_twt_flow *iter, *iter_next;
 	u32 duration = flow->duration << 8;
 	u64 start_tsf;
 
 	iter = list_first_entry_or_null(&dev->twt_list,
-					struct bersa_twt_flow, list);
+					struct besra_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);
@@ -2505,7 +2505,7 @@
 
 	list_for_each_entry_safe(iter, iter_next, &dev->twt_list, list) {
 		start_tsf = iter->start_tsf +
-			    bersa_mac_twt_duration_align(iter->duration);
+			    besra_mac_twt_duration_align(iter->duration);
 		if (list_is_last(&iter->list, &dev->twt_list))
 			break;
 
@@ -2522,7 +2522,7 @@
 	return start_tsf;
 }
 
-static int bersa_mac_check_twt_req(struct ieee80211_twt_setup *twt)
+static int besra_mac_check_twt_req(struct ieee80211_twt_setup *twt)
 {
 	struct ieee80211_twt_params *twt_agrt;
 	u64 interval, duration;
@@ -2555,26 +2555,26 @@
 	return 0;
 }
 
-void bersa_mac_add_twt_setup(struct ieee80211_hw *hw,
+void besra_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 bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_sta *msta = (struct besra_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 bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_twt_flow *flow;
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_twt_flow *flow;
 	int flowid, table_id;
 	u8 exp;
 
-	if (bersa_mac_check_twt_req(twt))
+	if (besra_mac_check_twt_req(twt))
 		goto out;
 
 	mutex_lock(&dev->mt76.mutex);
 
-	if (dev->twt.n_agrt == BERSA_MAX_TWT_AGRT)
+	if (dev->twt.n_agrt == BESRA_MAX_TWT_AGRT)
 		goto unlock;
 
 	if (hweight8(msta->twt.flowid_mask) == ARRAY_SIZE(msta->twt.flow))
@@ -2608,8 +2608,8 @@
 		u32 rem;
 
 		flow->sched = true;
-		flow->start_tsf = bersa_mac_twt_sched_list_add(dev, flow);
-		curr_tsf = __bersa_get_tsf(hw, msta->vif);
+		flow->start_tsf = besra_mac_twt_sched_list_add(dev, flow);
+		curr_tsf = __besra_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);
@@ -2618,7 +2618,7 @@
 	}
 	flow->tsf = le64_to_cpu(twt_agrt->twt);
 
-	if (bersa_mcu_twt_agrt_update(dev, msta->vif, flow, MCU_TWT_AGRT_ADD))
+	if (besra_mcu_twt_agrt_update(dev, msta->vif, flow, MCU_TWT_AGRT_ADD))
 		goto unlock;
 
 	setup_cmd = TWT_SETUP_CMD_ACCEPT;
@@ -2635,11 +2635,11 @@
 		       (twt->control & IEEE80211_TWT_CONTROL_RX_DISABLED);
 }
 
-void bersa_mac_twt_teardown_flow(struct bersa_dev *dev,
-				  struct bersa_sta *msta,
+void besra_mac_twt_teardown_flow(struct besra_dev *dev,
+				  struct besra_sta *msta,
 				  u8 flowid)
 {
-	struct bersa_twt_flow *flow;
+	struct besra_twt_flow *flow;
 
 	lockdep_assert_held(&dev->mt76.mutex);
 
@@ -2650,7 +2650,7 @@
 		return;
 
 	flow = &msta->twt.flow[flowid];
-	if (bersa_mcu_twt_agrt_update(dev, msta->vif, flow,
+	if (besra_mcu_twt_agrt_update(dev, msta->vif, flow,
 				       MCU_TWT_AGRT_DELETE))
 		return;
 
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mac.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mac.h
similarity index 96%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mac.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mac.h
index 5182e34..a80a793 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mac.h
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mac.h
@@ -1,8 +1,8 @@
 /* SPDX-License-Identifier: ISC */
 /* Copyright (C) 2020 MediaTek Inc. */
 
-#ifndef __BERSA_MAC_H
-#define __BERSA_MAC_H
+#ifndef __BESRA_MAC_H
+#define __BESRA_MAC_H
 
 #define MT_CT_PARSE_LEN			72
 #define MT_CT_DMA_BUF_NUM		2
@@ -272,7 +272,7 @@
 
 #define MT_TXP_MAX_BUF_NUM		6
 
-struct bersa_txp {
+struct besra_txp {
 	__le16 flags;
 	__le16 token;
 	u8 bss_idx;
@@ -282,7 +282,7 @@
 	__le16 len[MT_TXP_MAX_BUF_NUM];
 } __packed __aligned(4);
 
-struct bersa_tx_free {
+struct besra_tx_free {
 	__le16 rx_byte_cnt;
 	__le16 ctrl;
 	__le32 txd;
@@ -359,7 +359,7 @@
 #define MT_TXS7_F1_MPDU_RETRY_COUNT	GENMASK(31, 24)
 #define MT_TXS7_F1_MPDU_RETRY_BYTES	GENMASK(23, 0)
 
-struct bersa_dfs_pulse {
+struct besra_dfs_pulse {
 	u32 max_width;		/* us */
 	int max_pwr;		/* dbm */
 	int min_pwr;		/* dbm */
@@ -369,7 +369,7 @@
 	u32 max_cr_pri;		/* us */
 };
 
-struct bersa_dfs_pattern {
+struct besra_dfs_pattern {
 	u8 enb;
 	u8 stgr;
 	u8 min_crpn;
@@ -388,13 +388,13 @@
 	u32 min_stgpr_diff;
 } __packed;
 
-struct bersa_dfs_radar_spec {
-	struct bersa_dfs_pulse pulse_th;
-	struct bersa_dfs_pattern radar_pattern[16];
+struct besra_dfs_radar_spec {
+	struct besra_dfs_pulse pulse_th;
+	struct besra_dfs_pattern radar_pattern[16];
 };
 
-static inline struct bersa_txp *
-bersa_txwi_to_txp(struct mt76_dev *dev, struct mt76_txwi_cache *t)
+static inline struct besra_txp *
+besra_txwi_to_txp(struct mt76_dev *dev, struct mt76_txwi_cache *t)
 {
 	u8 *txwi;
 
@@ -403,7 +403,7 @@
 
 	txwi = mt76_get_txwi_ptr(dev, t);
 
-	return (struct bersa_txp *)(txwi + MT_TXD_SIZE);
+	return (struct besra_txp *)(txwi + MT_TXD_SIZE);
 }
 
 #endif
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/main.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/main.c
similarity index 68%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/main.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/main.c
index 1b07905..7806761 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/main.c
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/main.c
@@ -5,30 +5,30 @@
 #include <linux/platform_device.h>
 #include <linux/pci.h>
 #include <linux/module.h>
-#include "bersa.h"
+#include "besra.h"
 #include "mcu.h"
 
-static bool bersa_dev_running(struct bersa_dev *dev)
+static bool besra_dev_running(struct besra_dev *dev)
 {
-	struct bersa_phy *phy;
+	struct besra_phy *phy;
 
 	if (test_bit(MT76_STATE_RUNNING, &dev->mphy.state))
 		return true;
 
-	phy = bersa_ext_phy(dev);
+	phy = besra_ext_phy(dev);
 	if (phy && test_bit(MT76_STATE_RUNNING, &phy->mt76->state))
 		return true;
 
-	phy = bersa_tri_phy(dev);
+	phy = besra_tri_phy(dev);
 
 	return phy && test_bit(MT76_STATE_RUNNING, &phy->mt76->state);
 }
 
-static int bersa_start(struct ieee80211_hw *hw)
+static int besra_start(struct ieee80211_hw *hw)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	u8 phy_idx = bersa_get_phy_id(phy);
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
+	u8 phy_idx = besra_get_phy_id(phy);
 	bool running;
 	int ret;
 
@@ -36,15 +36,15 @@
 
 	mutex_lock(&dev->mt76.mutex);
 
-	running = bersa_dev_running(dev);
+	running = besra_dev_running(dev);
 
 	/* TODO: to be reworked */
 	if (!running) {
-		ret = bersa_mcu_set_hdr_trans(dev, true);
+		ret = besra_mcu_set_hdr_trans(dev, true);
 		if (ret)
 			goto out;
 
-		/* 	bersa_mac_enable_nf(dev, dev->phy.band_idx); */
+		/* 	besra_mac_enable_nf(dev, dev->phy.band_idx); */
 	}
 
 	/* if (phy_idx != MT_MAIN_PHY) { */
@@ -52,27 +52,27 @@
 	/* 	if (ret) */
 	/* 		goto out; */
 
-	/* 	bersa_mac_enable_nf(dev, phy->band_idx); */
+	/* 	besra_mac_enable_nf(dev, phy->band_idx); */
 	/* } */
 
-	ret = bersa_mcu_set_rts_thresh(phy, 0x92b);
+	ret = besra_mcu_set_rts_thresh(phy, 0x92b);
 	if (ret)
 		goto out;
 
-	ret = bersa_mcu_set_edcca_thresh(phy);
+	ret = besra_mcu_set_edcca_thresh(phy);
 	if (ret)
 		goto out;
 
-	ret = bersa_mcu_set_edcca_en(phy, true);
+	ret = besra_mcu_set_edcca_en(phy, true);
 	if (ret)
 		goto out;
 
 	/* TODO: to be reworked */
-	/* ret = bersa_mcu_set_sku_en(phy, true); */
+	/* ret = besra_mcu_set_sku_en(phy, true); */
 	/* if (ret) */
 	/* 	goto out; */
 
-	ret = bersa_mcu_set_chan_info(phy, UNI_CHANNEL_RX_PATH);
+	ret = besra_mcu_set_chan_info(phy, UNI_CHANNEL_RX_PATH);
 	if (ret)
 		goto out;
 
@@ -80,14 +80,14 @@
 
 	ieee80211_iterate_interfaces(dev->mt76.hw,
 				     IEEE80211_IFACE_ITER_RESUME_ALL,
-				     bersa_mcu_set_pm, dev->mt76.hw);
+				     besra_mcu_set_pm, dev->mt76.hw);
 
 	if (!mt76_testmode_enabled(phy->mt76))
 		ieee80211_queue_delayed_work(hw, &phy->mt76->mac_work,
-					     BERSA_WATCHDOG_TIME);
+					     BESRA_WATCHDOG_TIME);
 
 	if (!running)
-		bersa_mac_reset_counters(phy);
+		besra_mac_reset_counters(phy);
 
 out:
 	mutex_unlock(&dev->mt76.mutex);
@@ -95,11 +95,11 @@
 	return ret;
 }
 
-static void bersa_stop(struct ieee80211_hw *hw)
+static void besra_stop(struct ieee80211_hw *hw)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	u8 phy_idx = bersa_get_phy_id(phy);
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
+	u8 phy_idx = besra_get_phy_id(phy);
 
 	cancel_delayed_work_sync(&phy->mt76->mac_work);
 
@@ -109,11 +109,11 @@
 
 	clear_bit(MT76_STATE_RUNNING, &phy->mt76->state);
 
-	bersa_mcu_set_edcca_en(phy, false);
+	besra_mcu_set_edcca_en(phy, false);
 
 	ieee80211_iterate_interfaces(dev->mt76.hw,
 				     IEEE80211_IFACE_ITER_RESUME_ALL,
-				     bersa_mcu_set_pm, dev->mt76.hw);
+				     besra_mcu_set_pm, dev->mt76.hw);
 
 	mutex_unlock(&dev->mt76.mutex);
 }
@@ -166,9 +166,9 @@
 	return -1;
 }
 
-static void bersa_init_bitrate_mask(struct ieee80211_vif *vif)
+static void besra_init_bitrate_mask(struct ieee80211_vif *vif)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 	int i;
 
 	for (i = 0; i < ARRAY_SIZE(mvif->bitrate_mask.control); i++) {
@@ -185,14 +185,14 @@
 	}
 }
 
-static int bersa_add_interface(struct ieee80211_hw *hw,
+static int besra_add_interface(struct ieee80211_hw *hw,
 				struct ieee80211_vif *vif)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
 	struct mt76_txq *mtxq;
-	u8 phy_idx = bersa_get_phy_id(phy);
+	u8 phy_idx = besra_get_phy_id(phy);
 	int idx, ret = 0;
 
 	mutex_lock(&dev->mt76.mutex);
@@ -204,7 +204,7 @@
 		phy->monitor_vif = vif;
 
 	mvif->mt76.idx = __ffs64(~dev->mt76.vif_mask);
-	if (mvif->mt76.idx >= (BERSA_MAX_INTERFACES << dev->dbdc_support)) {
+	if (mvif->mt76.idx >= (BESRA_MAX_INTERFACES << dev->dbdc_support)) {
 		ret = -ENOSPC;
 		goto out;
 	}
@@ -225,11 +225,11 @@
 	else
 		mvif->mt76.wmm_idx = 2;
 
-	ret = bersa_mcu_add_dev_info(phy, vif, true);
+	ret = besra_mcu_add_dev_info(phy, vif, true);
 	if (ret)
 		goto out;
 
-	ret = bersa_mcu_set_radio_en(phy, true);
+	ret = besra_mcu_set_radio_en(phy, true);
 	if (ret)
 		goto out;
 
@@ -237,7 +237,7 @@
 	phy->omac_mask |= BIT_ULL(mvif->mt76.omac_idx);
 
 	/* TODO: force this to 201 during devlopment stage */
-	idx = BERSA_WTBL_RESERVED + mvif->mt76.idx;
+	idx = BESRA_WTBL_RESERVED + mvif->mt76.idx;
 
 	INIT_LIST_HEAD(&mvif->sta.rc_list);
 	INIT_LIST_HEAD(&mvif->sta.poll_list);
@@ -247,7 +247,7 @@
 	mvif->sta.wcid.tx_info |= MT_WCID_TX_INFO_SET;
 	mt76_packet_id_init(&mvif->sta.wcid);
 
-	bersa_mac_wtbl_update(dev, idx,
+	besra_mac_wtbl_update(dev, idx,
 			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
 
 	rcu_assign_pointer(dev->mt76.wcid[idx], &mvif->sta.wcid);
@@ -261,11 +261,11 @@
 		vif->offload_flags = 0;
 	vif->offload_flags |= IEEE80211_OFFLOAD_ENCAP_4ADDR;
 
-	bersa_init_bitrate_mask(vif);
+	besra_init_bitrate_mask(vif);
 	memset(&mvif->cap, -1, sizeof(mvif->cap));
 
-	bersa_mcu_add_bss_info(phy, vif, true);
-	bersa_mcu_add_sta(dev, vif, NULL, true);
+	besra_mcu_add_bss_info(phy, vif, true);
+	besra_mcu_add_sta(dev, vif, NULL, true);
 
 out:
 	mutex_unlock(&dev->mt76.mutex);
@@ -273,17 +273,17 @@
 	return ret;
 }
 
-static void bersa_remove_interface(struct ieee80211_hw *hw,
+static void besra_remove_interface(struct ieee80211_hw *hw,
 				    struct ieee80211_vif *vif)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_sta *msta = &mvif->sta;
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_sta *msta = &mvif->sta;
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
 	int idx = msta->wcid.idx;
 
-	bersa_mcu_add_bss_info(phy, vif, false);
-	bersa_mcu_add_sta(dev, vif, NULL, false);
+	besra_mcu_add_bss_info(phy, vif, false);
+	besra_mcu_add_sta(dev, vif, NULL, false);
 
 	mutex_lock(&dev->mt76.mutex);
 	mt76_testmode_reset(phy->mt76, true);
@@ -292,8 +292,8 @@
 	if (vif == phy->monitor_vif)
 		phy->monitor_vif = NULL;
 
-	bersa_mcu_add_dev_info(phy, vif, false);
-	bersa_mcu_set_radio_en(phy, false);
+	besra_mcu_add_dev_info(phy, vif, false);
+	besra_mcu_set_radio_en(phy, false);
 
 	rcu_assign_pointer(dev->mt76.wcid[idx], NULL);
 
@@ -310,9 +310,9 @@
 	mt76_packet_id_flush(&dev->mt76, &msta->wcid);
 }
 
-int bersa_set_channel(struct bersa_phy *phy)
+int besra_set_channel(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	int ret;
 
 	cancel_delayed_work_sync(&phy->mt76->mac_work);
@@ -323,20 +323,20 @@
 	mt76_set_channel(phy->mt76);
 
 	if (dev->flash_mode) {
-		ret = bersa_mcu_apply_tx_dpd(phy);
+		ret = besra_mcu_apply_tx_dpd(phy);
 		if (ret)
 			goto out;
 	}
 
-	ret = bersa_mcu_set_chan_info(phy, UNI_CHANNEL_SWITCH);
+	ret = besra_mcu_set_chan_info(phy, UNI_CHANNEL_SWITCH);
 	if (ret)
 		goto out;
 
-	bersa_mac_set_timing(phy);
-	ret = bersa_dfs_init_radar_detector(phy);
-	bersa_mac_cca_stats_reset(phy);
+	besra_mac_set_timing(phy);
+	ret = besra_dfs_init_radar_detector(phy);
+	besra_mac_cca_stats_reset(phy);
 
-	bersa_mac_reset_counters(phy);
+	besra_mac_reset_counters(phy);
 	phy->noise = 0;
 
 out:
@@ -348,19 +348,19 @@
 	if (!mt76_testmode_enabled(phy->mt76))
 		ieee80211_queue_delayed_work(phy->mt76->hw,
 					     &phy->mt76->mac_work,
-					     BERSA_WATCHDOG_TIME);
+					     BESRA_WATCHDOG_TIME);
 
 	return ret;
 }
 
-static int bersa_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
+static int besra_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 bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_sta *msta = sta ? (struct bersa_sta *)sta->drv_priv :
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_sta *msta = sta ? (struct besra_sta *)sta->drv_priv :
 				  &mvif->sta;
 	struct mt76_wcid *wcid = &msta->wcid;
 	u8 *wcid_keyidx = &wcid->hw_key_idx;
@@ -400,7 +400,7 @@
 
 	if (cmd == SET_KEY && !sta && !mvif->mt76.cipher) {
 		mvif->mt76.cipher = mt76_connac_mcu_get_cipher(key->cipher);
-		bersa_mcu_add_bss_info(phy, vif, true);
+		besra_mcu_add_bss_info(phy, vif, true);
 	}
 
 	if (cmd == SET_KEY)
@@ -413,7 +413,7 @@
 	mt76_wcid_key_setup(&dev->mt76, wcid,
 			    cmd == SET_KEY ? key : NULL);
 
-	err = bersa_mcu_add_key(&dev->mt76, vif, &msta->bip,
+	err = besra_mcu_add_key(&dev->mt76, vif, &msta->bip,
 				key, MCU_WMWA_UNI_CMD(STA_REC_UPDATE),
 				&msta->wcid, cmd);
 out:
@@ -422,11 +422,11 @@
 	return err;
 }
 
-static int bersa_set_sar_specs(struct ieee80211_hw *hw,
+static int besra_set_sar_specs(struct ieee80211_hw *hw,
 				const struct cfg80211_sar_specs *sar)
 {
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	struct bersa_dev *dev = bersa_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
 	int err = -EINVAL;
 
 	mutex_lock(&dev->mt76.mutex);
@@ -438,17 +438,17 @@
 		goto out;
 
 	/* TODO: need check */
-	/* err = bersa_mcu_set_txpower_sku(phy); */
+	/* err = besra_mcu_set_txpower_sku(phy); */
 out:
 	mutex_unlock(&dev->mt76.mutex);
 
 	return err;
 }
 
-static int bersa_config(struct ieee80211_hw *hw, u32 changed)
+static int besra_config(struct ieee80211_hw *hw, u32 changed)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
 	int ret;
 
 	if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
@@ -460,7 +460,7 @@
 		}
 #endif
 		ieee80211_stop_queues(hw);
-		ret = bersa_set_channel(phy);
+		ret = besra_set_channel(phy);
 		if (ret)
 			return ret;
 		ieee80211_wake_queues(hw);
@@ -468,7 +468,7 @@
 
 	/* TODO: need check */
 	/* if (changed & IEEE80211_CONF_CHANGE_POWER) { */
-	/* 	ret = bersa_mcu_set_txpower_sku(phy); */
+	/* 	ret = besra_mcu_set_txpower_sku(phy); */
 	/* 	if (ret) */
 	/* 		return ret; */
 	/* } */
@@ -495,10 +495,10 @@
 }
 
 static int
-bersa_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
+besra_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u16 queue,
 	       const struct ieee80211_tx_queue_params *params)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 
 	/* no need to update right away, we'll get BSS_CHANGED_QOS */
 	queue = mt76_connac_lmac_mapping(queue);
@@ -507,13 +507,13 @@
 	return 0;
 }
 
-static void bersa_configure_filter(struct ieee80211_hw *hw,
+static void besra_configure_filter(struct ieee80211_hw *hw,
 				    unsigned int changed_flags,
 				    unsigned int *total_flags,
 				    u64 multicast)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
 	u32 ctl_flags = MT_WF_RFCR1_DROP_ACK |
 			MT_WF_RFCR1_DROP_BF_POLL |
 			MT_WF_RFCR1_DROP_BA |
@@ -564,35 +564,35 @@
 }
 
 static void
-bersa_update_bss_color(struct ieee80211_hw *hw,
+besra_update_bss_color(struct ieee80211_hw *hw,
 			struct ieee80211_vif *vif,
 			struct cfg80211_he_bss_color *bss_color)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
 
 	switch (vif->type) {
 	case NL80211_IFTYPE_AP: {
-		struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+		struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 
 		if (mvif->mt76.omac_idx > HW_BSSID_MAX)
 			return;
 		fallthrough;
 	}
 	case NL80211_IFTYPE_STATION:
-		bersa_mcu_update_bss_color(dev, vif, bss_color);
+		besra_mcu_update_bss_color(dev, vif, bss_color);
 		break;
 	default:
 		break;
 	}
 }
 
-static void bersa_bss_info_changed(struct ieee80211_hw *hw,
+static void besra_bss_info_changed(struct ieee80211_hw *hw,
 				    struct ieee80211_vif *vif,
 				    struct ieee80211_bss_conf *info,
 				    u32 changed)
 {
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	struct bersa_dev *dev = bersa_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
 
 	mutex_lock(&dev->mt76.mutex);
 
@@ -604,13 +604,13 @@
 	    vif->type == NL80211_IFTYPE_STATION) {
 		bool join = !is_zero_ether_addr(info->bssid);
 
-		bersa_mcu_add_bss_info(phy, vif, join);
-		bersa_mcu_add_sta(dev, vif, NULL, join);
+		besra_mcu_add_bss_info(phy, vif, join);
+		besra_mcu_add_sta(dev, vif, NULL, join);
 	}
 
 	if (changed & BSS_CHANGED_ASSOC) {
-		bersa_mcu_add_bss_info(phy, vif, info->assoc);
-		bersa_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
+		besra_mcu_add_bss_info(phy, vif, info->assoc);
+		besra_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
 	}
 
 	if (changed & BSS_CHANGED_ERP_SLOT) {
@@ -618,54 +618,54 @@
 
 		if (slottime != phy->slottime) {
 			phy->slottime = slottime;
-			bersa_mac_set_timing(phy);
+			besra_mac_set_timing(phy);
 		}
 	}
 
 	if (changed & BSS_CHANGED_BEACON_ENABLED && info->enable_beacon) {
-		bersa_mcu_add_bss_info(phy, vif, true);
-		bersa_mcu_add_sta(dev, vif, NULL, true);
+		besra_mcu_add_bss_info(phy, vif, true);
+		besra_mcu_add_sta(dev, vif, NULL, true);
 	}
 
 	/* ensure that enable txcmd_mode after bss_info */
 	if (changed & (BSS_CHANGED_QOS | BSS_CHANGED_BEACON_ENABLED))
-		bersa_mcu_set_tx(dev, vif);
+		besra_mcu_set_tx(dev, vif);
 
 	if (changed & BSS_CHANGED_HE_OBSS_PD)
-		bersa_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
+		besra_mcu_add_obss_spr(dev, vif, info->he_obss_pd.enable);
 
 	if (changed & BSS_CHANGED_HE_BSS_COLOR)
-		bersa_update_bss_color(hw, vif, &info->he_bss_color);
+		besra_update_bss_color(hw, vif, &info->he_bss_color);
 
 	if (changed & (BSS_CHANGED_BEACON |
 		       BSS_CHANGED_BEACON_ENABLED))
-		bersa_mcu_add_beacon(hw, vif, info->enable_beacon);
+		besra_mcu_add_beacon(hw, vif, info->enable_beacon);
 
 	mutex_unlock(&dev->mt76.mutex);
 }
 
 static void
-bersa_channel_switch_beacon(struct ieee80211_hw *hw,
+besra_channel_switch_beacon(struct ieee80211_hw *hw,
 			     struct ieee80211_vif *vif,
 			     struct cfg80211_chan_def *chandef)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
 
 	mutex_lock(&dev->mt76.mutex);
-	bersa_mcu_add_beacon(hw, vif, true);
+	besra_mcu_add_beacon(hw, vif, true);
 	mutex_unlock(&dev->mt76.mutex);
 }
 
-int bersa_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
+int besra_mac_sta_add(struct mt76_dev *mdev, struct ieee80211_vif *vif,
 		       struct ieee80211_sta *sta)
 {
-	struct bersa_dev *dev = container_of(mdev, struct bersa_dev, mt76);
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	u8 phy_idx = bersa_get_phy_id(mvif->phy);
+	struct besra_dev *dev = container_of(mdev, struct besra_dev, mt76);
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	u8 phy_idx = besra_get_phy_id(mvif->phy);
 	int ret, idx;
 
-	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, BERSA_WTBL_STA);
+	idx = mt76_wcid_alloc(dev->mt76.wcid_mask, BESRA_WTBL_STA);
 	if (idx < 0)
 		return -ENOSPC;
 
@@ -678,30 +678,30 @@
 	msta->wcid.tx_info |= MT_WCID_TX_INFO_SET;
 	msta->jiffies = jiffies;
 
-	bersa_mac_wtbl_update(dev, idx,
+	besra_mac_wtbl_update(dev, idx,
 			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
 
-	ret = bersa_mcu_add_sta(dev, vif, sta, true);
+	ret = besra_mcu_add_sta(dev, vif, sta, true);
 	if (ret)
 		return ret;
 
-	return bersa_mcu_add_rate_ctrl(dev, vif, sta, false);
+	return besra_mcu_add_rate_ctrl(dev, vif, sta, false);
 }
 
-void bersa_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
+void besra_mac_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
 			   struct ieee80211_sta *sta)
 {
-	struct bersa_dev *dev = container_of(mdev, struct bersa_dev, mt76);
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_dev *dev = container_of(mdev, struct besra_dev, mt76);
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
 	int i;
 
-	bersa_mcu_add_sta(dev, vif, sta, false);
+	besra_mcu_add_sta(dev, vif, sta, false);
 
-	bersa_mac_wtbl_update(dev, msta->wcid.idx,
+	besra_mac_wtbl_update(dev, msta->wcid.idx,
 			       MT_WTBL_UPDATE_ADM_COUNT_CLEAR);
 
 	for (i = 0; i < ARRAY_SIZE(msta->twt.flow); i++)
-		bersa_mac_twt_teardown_flow(dev, msta, i);
+		besra_mac_twt_teardown_flow(dev, msta, i);
 
 	spin_lock_bh(&dev->sta_poll_lock);
 	if (!list_empty(&msta->poll_list))
@@ -711,55 +711,55 @@
 	spin_unlock_bh(&dev->sta_poll_lock);
 }
 
-static void bersa_tx(struct ieee80211_hw *hw,
+static void besra_tx(struct ieee80211_hw *hw,
 		      struct ieee80211_tx_control *control,
 		      struct sk_buff *skb)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
+	struct besra_dev *dev = besra_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 bersa_sta *sta;
+		struct besra_sta *sta;
 
-		sta = (struct bersa_sta *)control->sta->drv_priv;
+		sta = (struct besra_sta *)control->sta->drv_priv;
 		wcid = &sta->wcid;
 	}
 
 	if (vif && !control->sta) {
-		struct bersa_vif *mvif;
+		struct besra_vif *mvif;
 
-		mvif = (struct bersa_vif *)vif->drv_priv;
+		mvif = (struct besra_vif *)vif->drv_priv;
 		wcid = &mvif->sta.wcid;
 	}
 
 	mt76_tx(mphy, control->sta, wcid, skb);
 }
 
-static int bersa_set_rts_threshold(struct ieee80211_hw *hw, u32 val)
+static int besra_set_rts_threshold(struct ieee80211_hw *hw, u32 val)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
 	int ret;
 
 	mutex_lock(&dev->mt76.mutex);
-	ret = bersa_mcu_set_rts_thresh(phy, val);
+	ret = besra_mcu_set_rts_thresh(phy, val);
 	mutex_unlock(&dev->mt76.mutex);
 
 	return ret;
 }
 
 static int
-bersa_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+besra_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 		    struct ieee80211_ampdu_params *params)
 {
 	enum ieee80211_ampdu_mlme_action action = params->action;
-	struct bersa_dev *dev = bersa_hw_dev(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
 	struct ieee80211_sta *sta = params->sta;
 	struct ieee80211_txq *txq = sta->txq[params->tid];
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
 	u16 tid = params->tid;
 	u16 ssn = params->ssn;
 	struct mt76_txq *mtxq;
@@ -775,22 +775,22 @@
 	case IEEE80211_AMPDU_RX_START:
 		mt76_rx_aggr_start(&dev->mt76, &msta->wcid, tid, ssn,
 				   params->buf_size);
-		ret = bersa_mcu_add_rx_ba(dev, params, true);
+		ret = besra_mcu_add_rx_ba(dev, params, true);
 		break;
 	case IEEE80211_AMPDU_RX_STOP:
 		mt76_rx_aggr_stop(&dev->mt76, &msta->wcid, tid);
-		ret = bersa_mcu_add_rx_ba(dev, params, false);
+		ret = besra_mcu_add_rx_ba(dev, params, false);
 		break;
 	case IEEE80211_AMPDU_TX_OPERATIONAL:
 		mtxq->aggr = true;
 		mtxq->send_bar = false;
-		ret = bersa_mcu_add_tx_ba(dev, params, true);
+		ret = besra_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 = bersa_mcu_add_tx_ba(dev, params, false);
+		ret = besra_mcu_add_tx_ba(dev, params, false);
 		break;
 	case IEEE80211_AMPDU_TX_START:
 		set_bit(tid, &msta->ampdu_state);
@@ -799,7 +799,7 @@
 	case IEEE80211_AMPDU_TX_STOP_CONT:
 		mtxq->aggr = false;
 		clear_bit(tid, &msta->ampdu_state);
-		ret = bersa_mcu_add_tx_ba(dev, params, false);
+		ret = besra_mcu_add_tx_ba(dev, params, false);
 		ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
 		break;
 	}
@@ -809,7 +809,7 @@
 }
 
 static int
-bersa_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+besra_sta_add(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 	       struct ieee80211_sta *sta)
 {
 	return mt76_sta_state(hw, vif, sta, IEEE80211_STA_NOTEXIST,
@@ -817,7 +817,7 @@
 }
 
 static int
-bersa_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+besra_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 		  struct ieee80211_sta *sta)
 {
 	return mt76_sta_state(hw, vif, sta, IEEE80211_STA_NONE,
@@ -825,11 +825,11 @@
 }
 
 static int
-bersa_get_stats(struct ieee80211_hw *hw,
+besra_get_stats(struct ieee80211_hw *hw,
 		 struct ieee80211_low_level_stats *stats)
 {
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	struct bersa_dev *dev = bersa_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
 	struct mib_stats *mib = &phy->mib;
 
 	mutex_lock(&dev->mt76.mutex);
@@ -844,10 +844,10 @@
 	return 0;
 }
 
-u64 __bersa_get_tsf(struct ieee80211_hw *hw, struct bersa_vif *mvif)
+u64 __besra_get_tsf(struct ieee80211_hw *hw, struct besra_vif *mvif)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
 	union {
 		u64 t64;
 		u32 t32[2];
@@ -868,26 +868,26 @@
 }
 
 static u64
-bersa_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
+besra_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_dev *dev = bersa_hw_dev(hw);
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_dev *dev = besra_hw_dev(hw);
 	u64 ret;
 
 	mutex_lock(&dev->mt76.mutex);
-	ret = __bersa_get_tsf(hw, mvif);
+	ret = __besra_get_tsf(hw, mvif);
 	mutex_unlock(&dev->mt76.mutex);
 
 	return ret;
 }
 
 static void
-bersa_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+besra_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 	       u64 timestamp)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
 	union {
 		u64 t64;
 		u32 t32[2];
@@ -908,12 +908,12 @@
 }
 
 static void
-bersa_offset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+besra_offset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 		  s64 timestamp)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
 	union {
 		u64 t64;
 		u32 t32[2];
@@ -934,24 +934,24 @@
 }
 
 static void
-bersa_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class)
+besra_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class)
 {
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	struct bersa_dev *dev = phy->dev;
+	struct besra_phy *phy = besra_hw_phy(hw);
+	struct besra_dev *dev = phy->dev;
 
 	mutex_lock(&dev->mt76.mutex);
 	phy->coverage_class = max_t(s16, coverage_class, 0);
-	bersa_mac_set_timing(phy);
+	besra_mac_set_timing(phy);
 	mutex_unlock(&dev->mt76.mutex);
 }
 
 static int
-bersa_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
+besra_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
 	int max_nss = hweight8(hw->wiphy->available_antennas_tx);
-	u8 phy_idx = bersa_get_phy_id(phy);
+	u8 phy_idx = besra_get_phy_id(phy);
 	u16 chainshift;
 
 	if (!tx_ant || tx_ant != rx_ant || ffs(tx_ant) > max_nss)
@@ -976,20 +976,20 @@
 	phy->mt76->chainmask = tx_ant;
 
 	mt76_set_stream_caps(phy->mt76, true);
-	bersa_set_stream_vht_txbf_caps(phy);
-	bersa_set_stream_he_caps(phy);
+	besra_set_stream_vht_txbf_caps(phy);
+	besra_set_stream_he_caps(phy);
 
 	mutex_unlock(&dev->mt76.mutex);
 
 	return 0;
 }
 
-static void bersa_sta_statistics(struct ieee80211_hw *hw,
+static void besra_sta_statistics(struct ieee80211_hw *hw,
 				  struct ieee80211_vif *vif,
 				  struct ieee80211_sta *sta,
 				  struct station_info *sinfo)
 {
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
 	struct rate_info *txrate = &msta->wcid.rate;
 
 	if (!txrate->legacy && !txrate->flags)
@@ -1009,10 +1009,10 @@
 	sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BITRATE);
 }
 
-static void bersa_sta_rc_work(void *data, struct ieee80211_sta *sta)
+static void besra_sta_rc_work(void *data, struct ieee80211_sta *sta)
 {
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
-	struct bersa_dev *dev = msta->vif->phy->dev;
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
+	struct besra_dev *dev = msta->vif->phy->dev;
 	u32 *changed = data;
 
 	spin_lock_bh(&dev->sta_poll_lock);
@@ -1022,25 +1022,25 @@
 	spin_unlock_bh(&dev->sta_poll_lock);
 }
 
-static void bersa_sta_rc_update(struct ieee80211_hw *hw,
+static void besra_sta_rc_update(struct ieee80211_hw *hw,
 				 struct ieee80211_vif *vif,
 				 struct ieee80211_sta *sta,
 				 u32 changed)
 {
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	struct bersa_dev *dev = phy->dev;
+	struct besra_phy *phy = besra_hw_phy(hw);
+	struct besra_dev *dev = phy->dev;
 
-	bersa_sta_rc_work(&changed, sta);
+	besra_sta_rc_work(&changed, sta);
 	ieee80211_queue_work(hw, &dev->rc_work);
 }
 
 static int
-bersa_set_bitrate_mask(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+besra_set_bitrate_mask(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 			const struct cfg80211_bitrate_mask *mask)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	struct bersa_dev *dev = phy->dev;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_phy *phy = besra_hw_phy(hw);
+	struct besra_dev *dev = phy->dev;
 	u32 changed = IEEE80211_RC_SUPP_RATES_CHANGED;
 
 	mvif->bitrate_mask = *mask;
@@ -1053,45 +1053,45 @@
 	 * - 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, bersa_sta_rc_work, &changed);
+	ieee80211_iterate_stations_atomic(hw, besra_sta_rc_work, &changed);
 	ieee80211_queue_work(hw, &dev->rc_work);
 
 	return 0;
 }
 
-static void bersa_sta_set_4addr(struct ieee80211_hw *hw,
+static void besra_sta_set_4addr(struct ieee80211_hw *hw,
 				 struct ieee80211_vif *vif,
 				 struct ieee80211_sta *sta,
 				 bool enabled)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_sta *msta = (struct besra_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);
 
-	bersa_mcu_wtbl_update_hdr_trans(dev, vif, sta);
+	besra_mcu_wtbl_update_hdr_trans(dev, vif, sta);
 }
 
-static void bersa_sta_set_decap_offload(struct ieee80211_hw *hw,
+static void besra_sta_set_decap_offload(struct ieee80211_hw *hw,
 				 struct ieee80211_vif *vif,
 				 struct ieee80211_sta *sta,
 				 bool enabled)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_sta *msta = (struct besra_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);
 
-	bersa_mcu_wtbl_update_hdr_trans(dev, vif, sta);
+	besra_mcu_wtbl_update_hdr_trans(dev, vif, sta);
 }
 
-static const char bersa_gstrings_stats[][ETH_GSTRING_LEN] = {
+static const char besra_gstrings_stats[][ETH_GSTRING_LEN] = {
 	"tx_ampdu_cnt",
 	"tx_stop_q_empty_cnt",
 	"tx_mpdu_attempts",
@@ -1183,33 +1183,33 @@
 	"v_tx_mcs_11",
 };
 
-#define BERSA_SSTATS_LEN ARRAY_SIZE(bersa_gstrings_stats)
+#define BESRA_SSTATS_LEN ARRAY_SIZE(besra_gstrings_stats)
 
 /* Ethtool related API */
 static
-void bersa_get_et_strings(struct ieee80211_hw *hw,
+void besra_get_et_strings(struct ieee80211_hw *hw,
 			   struct ieee80211_vif *vif,
 			   u32 sset, u8 *data)
 {
 	if (sset == ETH_SS_STATS)
-		memcpy(data, *bersa_gstrings_stats,
-		       sizeof(bersa_gstrings_stats));
+		memcpy(data, *besra_gstrings_stats,
+		       sizeof(besra_gstrings_stats));
 }
 
 static
-int bersa_get_et_sset_count(struct ieee80211_hw *hw,
+int besra_get_et_sset_count(struct ieee80211_hw *hw,
 			     struct ieee80211_vif *vif, int sset)
 {
 	if (sset == ETH_SS_STATS)
-		return BERSA_SSTATS_LEN;
+		return BESRA_SSTATS_LEN;
 
 	return 0;
 }
 
-static void bersa_ethtool_worker(void *wi_data, struct ieee80211_sta *sta)
+static void besra_ethtool_worker(void *wi_data, struct ieee80211_sta *sta)
 {
 	struct mt76_ethtool_worker_info *wi = wi_data;
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
 
 	if (msta->vif->mt76.idx != wi->idx)
 		return;
@@ -1218,24 +1218,24 @@
 }
 
 static
-void bersa_get_et_stats(struct ieee80211_hw *hw,
+void besra_get_et_stats(struct ieee80211_hw *hw,
 			 struct ieee80211_vif *vif,
 			 struct ethtool_stats *stats, u64 *data)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 	struct mt76_ethtool_worker_info wi = {
 		.data = data,
 		.idx = mvif->mt76.idx,
 	};
 	struct mib_stats *mib = &phy->mib;
-	/* See bersa_ampdu_stat_read_phy, etc */
+	/* See besra_ampdu_stat_read_phy, etc */
 	int i, n, ei = 0;
 
 	mutex_lock(&dev->mt76.mutex);
 
-	bersa_mac_update_stats(phy);
+	besra_mac_update_stats(phy);
 
 	data[ei++] = mib->tx_ampdu_cnt;
 	data[ei++] = mib->tx_stop_q_empty_cnt;
@@ -1298,7 +1298,7 @@
 
 	/* Add values for all stations owned by this vif */
 	wi.initial_stat_idx = ei;
-	ieee80211_iterate_stations_atomic(hw, bersa_ethtool_worker, &wi);
+	ieee80211_iterate_stations_atomic(hw, besra_ethtool_worker, &wi);
 
 	mutex_unlock(&dev->mt76.mutex);
 
@@ -1306,30 +1306,30 @@
 		return;
 
 	ei += wi.worker_stat_count;
-	if (ei != BERSA_SSTATS_LEN)
-		dev_err(dev->mt76.dev, "ei: %d  BERSA_SSTATS_LEN: %d",
-			ei, (int)BERSA_SSTATS_LEN);
+	if (ei != BESRA_SSTATS_LEN)
+		dev_err(dev->mt76.dev, "ei: %d  BESRA_SSTATS_LEN: %d",
+			ei, (int)BESRA_SSTATS_LEN);
 }
 
 static void
-bersa_twt_teardown_request(struct ieee80211_hw *hw,
+besra_twt_teardown_request(struct ieee80211_hw *hw,
 			    struct ieee80211_sta *sta,
 			    u8 flowid)
 {
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
-	struct bersa_dev *dev = bersa_hw_dev(hw);
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
+	struct besra_dev *dev = besra_hw_dev(hw);
 
 	mutex_lock(&dev->mt76.mutex);
-	bersa_mac_twt_teardown_flow(dev, msta, flowid);
+	besra_mac_twt_teardown_flow(dev, msta, flowid);
 	mutex_unlock(&dev->mt76.mutex);
 }
 
 static int
-bersa_set_radar_background(struct ieee80211_hw *hw,
+besra_set_radar_background(struct ieee80211_hw *hw,
 			    struct cfg80211_chan_def *chandef)
 {
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	struct bersa_dev *dev = phy->dev;
+	struct besra_phy *phy = besra_hw_phy(hw);
+	struct besra_dev *dev = phy->dev;
 	int ret = -EINVAL;
 	bool running;
 
@@ -1351,7 +1351,7 @@
 
 	if (!chandef || running ||
 	    !(chandef->chan->flags & IEEE80211_CHAN_RADAR)) {
-		ret = bersa_mcu_rdd_background_enable(phy, NULL);
+		ret = besra_mcu_rdd_background_enable(phy, NULL);
 		if (ret)
 			goto out;
 
@@ -1359,7 +1359,7 @@
 			goto update_phy;
 	}
 
-	ret = bersa_mcu_rdd_background_enable(phy, chandef);
+	ret = besra_mcu_rdd_background_enable(phy, chandef);
 	if (ret)
 		goto out;
 
@@ -1373,51 +1373,51 @@
 	return ret;
 }
 
-const struct ieee80211_ops bersa_ops = {
-	.tx = bersa_tx,
-	.start = bersa_start,
-	.stop = bersa_stop,
-	.add_interface = bersa_add_interface,
-	.remove_interface = bersa_remove_interface,
-	.config = bersa_config,
-	.conf_tx = bersa_conf_tx,
-	.configure_filter = bersa_configure_filter,
-	.bss_info_changed = bersa_bss_info_changed,
-	.sta_add = bersa_sta_add,
-	.sta_remove = bersa_sta_remove,
+const struct ieee80211_ops besra_ops = {
+	.tx = besra_tx,
+	.start = besra_start,
+	.stop = besra_stop,
+	.add_interface = besra_add_interface,
+	.remove_interface = besra_remove_interface,
+	.config = besra_config,
+	.conf_tx = besra_conf_tx,
+	.configure_filter = besra_configure_filter,
+	.bss_info_changed = besra_bss_info_changed,
+	.sta_add = besra_sta_add,
+	.sta_remove = besra_sta_remove,
 	.sta_pre_rcu_remove = mt76_sta_pre_rcu_remove,
-	.sta_rc_update = bersa_sta_rc_update,
-	.set_key = bersa_set_key,
-	.ampdu_action = bersa_ampdu_action,
-	.set_rts_threshold = bersa_set_rts_threshold,
+	.sta_rc_update = besra_sta_rc_update,
+	.set_key = besra_set_key,
+	.ampdu_action = besra_ampdu_action,
+	.set_rts_threshold = besra_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 = bersa_set_sar_specs,
-	.channel_switch_beacon = bersa_channel_switch_beacon,
-	.get_stats = bersa_get_stats,
-	.get_et_sset_count = bersa_get_et_sset_count,
-	.get_et_stats = bersa_get_et_stats,
-	.get_et_strings = bersa_get_et_strings,
-	.get_tsf = bersa_get_tsf,
-	.set_tsf = bersa_set_tsf,
-	.offset_tsf = bersa_offset_tsf,
+	.set_sar_specs = besra_set_sar_specs,
+	.channel_switch_beacon = besra_channel_switch_beacon,
+	.get_stats = besra_get_stats,
+	.get_et_sset_count = besra_get_et_sset_count,
+	.get_et_stats = besra_get_et_stats,
+	.get_et_strings = besra_get_et_strings,
+	.get_tsf = besra_get_tsf,
+	.set_tsf = besra_set_tsf,
+	.offset_tsf = besra_offset_tsf,
 	.get_survey = mt76_get_survey,
 	.get_antenna = mt76_get_antenna,
-	.set_antenna = bersa_set_antenna,
-	.set_bitrate_mask = bersa_set_bitrate_mask,
-	.set_coverage_class = bersa_set_coverage_class,
-	.sta_statistics = bersa_sta_statistics,
-	.sta_set_4addr = bersa_sta_set_4addr,
-	.sta_set_decap_offload = bersa_sta_set_decap_offload,
-	.add_twt_setup = bersa_mac_add_twt_setup,
-	.twt_teardown_request = bersa_twt_teardown_request,
+	.set_antenna = besra_set_antenna,
+	.set_bitrate_mask = besra_set_bitrate_mask,
+	.set_coverage_class = besra_set_coverage_class,
+	.sta_statistics = besra_sta_statistics,
+	.sta_set_4addr = besra_sta_set_4addr,
+	.sta_set_decap_offload = besra_sta_set_decap_offload,
+	.add_twt_setup = besra_mac_add_twt_setup,
+	.twt_teardown_request = besra_twt_teardown_request,
 	CFG80211_TESTMODE_CMD(mt76_testmode_cmd)
 	CFG80211_TESTMODE_DUMP(mt76_testmode_dump)
 #ifdef CONFIG_MAC80211_DEBUGFS
-	.sta_add_debugfs = bersa_sta_add_debugfs,
+	.sta_add_debugfs = besra_sta_add_debugfs,
 #endif
-	.set_radar_background = bersa_set_radar_background,
+	.set_radar_background = besra_set_radar_background,
 };
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mcu.c
similarity index 80%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mcu.c
index 5276552..00acb09 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mcu.c
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mcu.c
@@ -3,12 +3,12 @@
 
 #include <linux/firmware.h>
 #include <linux/fs.h>
-#include "bersa.h"
+#include "besra.h"
 #include "mcu.h"
 #include "mac.h"
 #include "eeprom.h"
 
-struct bersa_patch_hdr {
+struct besra_patch_hdr {
 	char build_date[16];
 	char platform[4];
 	__be32 hw_sw_ver;
@@ -25,7 +25,7 @@
 	} desc;
 } __packed;
 
-struct bersa_patch_sec {
+struct besra_patch_sec {
 	__be32 type;
 	__be32 offs;
 	__be32 size;
@@ -41,7 +41,7 @@
 	};
 } __packed;
 
-struct bersa_fw_trailer {
+struct besra_fw_trailer {
 	u8 chip_id;
 	u8 eco_code;
 	u8 n_region;
@@ -53,7 +53,7 @@
 	u32 crc;
 } __packed;
 
-struct bersa_fw_region {
+struct besra_fw_region {
 	__le32 decomp_crc;
 	__le32 decomp_len;
 	__le32 decomp_blk_sz;
@@ -70,7 +70,7 @@
 #define HE_MAC(m, c)			u8_get_bits(c, IEEE80211_HE_MAC_##m)
 
 static u8
-bersa_mcu_get_sta_nss(u16 mcs_map)
+besra_mcu_get_sta_nss(u16 mcs_map)
 {
 	u8 nss;
 
@@ -85,10 +85,10 @@
 }
 
 static void
-bersa_mcu_set_sta_he_mcs(struct ieee80211_sta *sta, __le16 *he_mcs,
+besra_mcu_set_sta_he_mcs(struct ieee80211_sta *sta, __le16 *he_mcs,
 			  u16 mcs_map)
 {
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_sta *msta = (struct besra_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;
@@ -134,7 +134,7 @@
 }
 
 static void
-bersa_mcu_set_sta_vht_mcs(struct ieee80211_sta *sta, __le16 *vht_mcs,
+besra_mcu_set_sta_vht_mcs(struct ieee80211_sta *sta, __le16 *vht_mcs,
 			   const u16 *mask)
 {
 	u16 mcs_map = le16_to_cpu(sta->vht_cap.vht_mcs.rx_mcs_map);
@@ -161,7 +161,7 @@
 }
 
 static void
-bersa_mcu_set_sta_ht_mcs(struct ieee80211_sta *sta, u8 *ht_mcs,
+besra_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;
@@ -171,11 +171,11 @@
 }
 
 static int
-bersa_mcu_parse_response(struct mt76_dev *mdev, int cmd,
+besra_mcu_parse_response(struct mt76_dev *mdev, int cmd,
 			  struct sk_buff *skb, int seq)
 {
-	struct bersa_mcu_rxd *rxd;
-	struct bersa_mcu_uni_event *event;
+	struct besra_mcu_rxd *rxd;
+	struct besra_mcu_uni_event *event;
 	int mcu_cmd = FIELD_GET(__MCU_CMD_FIELD_ID, cmd);
 	int ret = 0;
 
@@ -185,7 +185,7 @@
 		return -ETIMEDOUT;
 	}
 
-	rxd = (struct bersa_mcu_rxd *)skb->data;
+	rxd = (struct besra_mcu_rxd *)skb->data;
 	if (seq != rxd->seq)
 		return -EAGAIN;
 
@@ -198,26 +198,26 @@
 	} else if ((rxd->option & MCU_UNI_CMD_EVENT) &&
 		    rxd->eid == MCU_UNI_EVENT_RESULT) {
 		skb_pull(skb, sizeof(*rxd));
-		event = (struct bersa_mcu_uni_event *)skb->data;
+		event = (struct besra_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 bersa_mcu_rxd));
+		skb_pull(skb, sizeof(struct besra_mcu_rxd));
 	}
 
 	return ret;
 }
 
 static int
-bersa_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
+besra_mcu_send_message(struct mt76_dev *mdev, struct sk_buff *skb,
 			int cmd, int *wait_seq)
 {
-	struct bersa_dev *dev = container_of(mdev, struct bersa_dev, mt76);
+	struct besra_dev *dev = container_of(mdev, struct besra_dev, mt76);
 	int txd_len, mcu_cmd = FIELD_GET(__MCU_CMD_FIELD_ID, cmd);
-	struct bersa_uni_txd *uni_txd;
-	struct bersa_mcu_txd *mcu_txd;
+	struct besra_uni_txd *uni_txd;
+	struct besra_mcu_txd *mcu_txd;
 	enum mt76_mcuq_id qid;
 	__le32 *txd;
 	u32 val;
@@ -251,7 +251,7 @@
 	txd[1] = cpu_to_le32(val);
 
 	if (cmd & __MCU_CMD_FIELD_UNI) {
-		uni_txd = (struct bersa_uni_txd *)txd;
+		uni_txd = (struct besra_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;
@@ -273,7 +273,7 @@
 		goto exit;
 	}
 
-	mcu_txd = (struct bersa_mcu_txd *)txd;
+	mcu_txd = (struct besra_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));
@@ -305,7 +305,7 @@
 	return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[qid], skb, 0);
 }
 
-int bersa_mcu_wa_cmd(struct bersa_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
+int besra_mcu_wa_cmd(struct besra_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
 {
 	struct {
 		__le32 args[3];
@@ -321,36 +321,36 @@
 }
 
 static void
-bersa_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
+besra_mcu_csa_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
 {
 	if (vif->csa_active)
 		ieee80211_csa_finish(vif);
 }
 
 static void
-bersa_mcu_rx_thermal_notify(struct bersa_dev *dev, struct sk_buff *skb)
+besra_mcu_rx_thermal_notify(struct besra_dev *dev, struct sk_buff *skb)
 {
 	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct bersa_mcu_thermal_notify *t;
-	struct bersa_phy *phy;
+	struct besra_mcu_thermal_notify *t;
+	struct besra_phy *phy;
 
-	t = (struct bersa_mcu_thermal_notify *)skb->data;
+	t = (struct besra_mcu_thermal_notify *)skb->data;
 	if (t->ctrl.ctrl_id != THERMAL_PROTECT_ENABLE)
 		return;
 
 	mphy = mt76_dev_phy_by_band(&dev->mt76, t->ctrl.ctrl_id);
 
-	phy = (struct bersa_phy *)mphy->priv;
+	phy = (struct besra_phy *)mphy->priv;
 	phy->throttle_state = t->ctrl.duty.duty_cycle;
 }
 
 static void
-bersa_mcu_rx_radar_detected(struct bersa_dev *dev, struct sk_buff *skb)
+besra_mcu_rx_radar_detected(struct besra_dev *dev, struct sk_buff *skb)
 {
 	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct bersa_mcu_rdd_report *r;
+	struct besra_mcu_rdd_report *r;
 
-	r = (struct bersa_mcu_rdd_report *)skb->data;
+	r = (struct besra_mcu_rdd_report *)skb->data;
 
 	mphy = mt76_dev_phy_by_band(&dev->mt76, r->band_idx);
 
@@ -364,10 +364,10 @@
 }
 
 static void
-bersa_mcu_rx_log_message(struct bersa_dev *dev, struct sk_buff *skb)
+besra_mcu_rx_log_message(struct besra_dev *dev, struct sk_buff *skb)
 {
 #define UNI_EVENT_FW_LOG_FORMAT 0
-	struct bersa_mcu_rxd *rxd = (struct bersa_mcu_rxd *)skb->data;
+	struct besra_mcu_rxd *rxd = (struct besra_mcu_rxd *)skb->data;
 	const char *data = (char *)&rxd[1] + 4, *type;
 	struct tlv *tlv = (struct tlv *)data;
 	int len;
@@ -380,7 +380,7 @@
 
 	switch (rxd->s2d_index) {
 	case 0:
-		if (bersa_debugfs_rx_log(dev, data, len))
+		if (besra_debugfs_rx_log(dev, data, len))
 			return;
 
 		type = "WM";
@@ -397,7 +397,7 @@
 }
 
 static void
-bersa_mcu_cca_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
+besra_mcu_cca_finish(void *priv, u8 *mac, struct ieee80211_vif *vif)
 {
 	if (!vif->color_change_active)
 		return;
@@ -406,7 +406,7 @@
 }
 
 static void
-bersa_mcu_ie_countdown(struct bersa_dev *dev, struct sk_buff *skb)
+besra_mcu_ie_countdown(struct besra_dev *dev, struct sk_buff *skb)
 {
 #define UNI_EVENT_IE_COUNTDOWN_CSA 0
 #define UNI_EVENT_IE_COUNTDOWN_BCC 1
@@ -415,7 +415,7 @@
 		u8 rsv[3];
 	};
 	struct mt76_phy *mphy = &dev->mt76.phy;
-	struct bersa_mcu_rxd *rxd = (struct bersa_mcu_rxd *)skb->data;
+	struct besra_mcu_rxd *rxd = (struct besra_mcu_rxd *)skb->data;
 	const char *data = (char *)&rxd[1], *tail;
 	struct header *hdr = (struct header *) data;
 	struct tlv *tlv = (struct tlv *)(data + 4);
@@ -430,12 +430,12 @@
 		case UNI_EVENT_IE_COUNTDOWN_CSA:
 			ieee80211_iterate_active_interfaces_atomic(mphy->hw,
 				IEEE80211_IFACE_ITER_RESUME_ALL,
-				bersa_mcu_csa_finish, mphy->hw);
+				besra_mcu_csa_finish, mphy->hw);
 			break;
 		case UNI_EVENT_IE_COUNTDOWN_BCC:
 			ieee80211_iterate_active_interfaces_atomic(mphy->hw,
 				IEEE80211_IFACE_ITER_RESUME_ALL,
-				bersa_mcu_cca_finish, mphy->hw);
+				besra_mcu_cca_finish, mphy->hw);
 			break;
 		}
 
@@ -446,24 +446,24 @@
 
 #if 0
 static void
-bersa_mcu_rx_ext_event(struct bersa_dev *dev, struct sk_buff *skb)
+besra_mcu_rx_ext_event(struct besra_dev *dev, struct sk_buff *skb)
 {
-	struct bersa_mcu_rxd *rxd = (struct bersa_mcu_rxd *)skb->data;
+	struct besra_mcu_rxd *rxd = (struct besra_mcu_rxd *)skb->data;
 
 	switch (rxd->ext_eid) {
 	case MCU_EXT_EVENT_THERMAL_PROTECT:
-		bersa_mcu_rx_thermal_notify(dev, skb);
+		besra_mcu_rx_thermal_notify(dev, skb);
 		break;
 	case MCU_EXT_EVENT_RDD_REPORT:
-		bersa_mcu_rx_radar_detected(dev, skb);
+		besra_mcu_rx_radar_detected(dev, skb);
 		break;
 	case MCU_EXT_EVENT_CSA_NOTIFY:
-		bersa_mcu_rx_csa_notify(dev, skb);
+		besra_mcu_rx_csa_notify(dev, skb);
 		break;
 	case MCU_EXT_EVENT_BCC_NOTIFY:
 		ieee80211_iterate_active_interfaces_atomic(dev->mt76.hw,
 				IEEE80211_IFACE_ITER_RESUME_ALL,
-				bersa_mcu_cca_finish, dev);
+				besra_mcu_cca_finish, dev);
 		break;
 	default:
 		break;
@@ -471,13 +471,13 @@
 }
 
 static void
-bersa_mcu_rx_unsolicited_event(struct bersa_dev *dev, struct sk_buff *skb)
+besra_mcu_rx_unsolicited_event(struct besra_dev *dev, struct sk_buff *skb)
 {
-	struct bersa_mcu_rxd *rxd = (struct bersa_mcu_rxd *)skb->data;
+	struct besra_mcu_rxd *rxd = (struct besra_mcu_rxd *)skb->data;
 
 	switch (rxd->eid) {
 	case MCU_EVENT_EXT:
-		bersa_mcu_rx_ext_event(dev, skb);
+		besra_mcu_rx_ext_event(dev, skb);
 		break;
 	default:
 		break;
@@ -487,16 +487,16 @@
 #endif
 
 static void
-bersa_mcu_uni_rx_unsolicited_event(struct bersa_dev *dev, struct sk_buff *skb)
+besra_mcu_uni_rx_unsolicited_event(struct besra_dev *dev, struct sk_buff *skb)
 {
-	struct bersa_mcu_rxd *rxd = (struct bersa_mcu_rxd *)skb->data;
+	struct besra_mcu_rxd *rxd = (struct besra_mcu_rxd *)skb->data;
 
 	switch (rxd->eid) {
 	case MCU_UNI_EVENT_FW_LOG_2_HOST:
-		bersa_mcu_rx_log_message(dev, skb);
+		besra_mcu_rx_log_message(dev, skb);
 		break;
 	case MCU_UNI_EVENT_IE_COUNTDOWN:
-		bersa_mcu_ie_countdown(dev, skb);
+		besra_mcu_ie_countdown(dev, skb);
 		break;
 	default:
 		break;
@@ -504,12 +504,12 @@
 	dev_kfree_skb(skb);
 }
 
-void bersa_mcu_rx_event(struct bersa_dev *dev, struct sk_buff *skb)
+void besra_mcu_rx_event(struct besra_dev *dev, struct sk_buff *skb)
 {
-	struct bersa_mcu_rxd *rxd = (struct bersa_mcu_rxd *)skb->data;
+	struct besra_mcu_rxd *rxd = (struct besra_mcu_rxd *)skb->data;
 
 	if (rxd->option & MCU_UNI_CMD_UNSOLICITED_EVENT) {
-		bersa_mcu_uni_rx_unsolicited_event(dev, skb);
+		besra_mcu_uni_rx_unsolicited_event(dev, skb);
 		return;
 	}
 
@@ -520,7 +520,7 @@
 	/*      rxd->ext_eid == MCU_EXT_EVENT_PS_SYNC || */
 	/*      rxd->ext_eid == MCU_EXT_EVENT_BCC_NOTIFY || */
 	/*      !rxd->seq)) { */
-	/* 		bersa_mcu_rx_unsolicited_event(dev, skb); */
+	/* 		besra_mcu_rx_unsolicited_event(dev, skb); */
 	/* 		return; */
 	/* } */
 
@@ -528,7 +528,7 @@
 }
 
 static struct tlv *
-bersa_mcu_add_uni_tlv(struct sk_buff *skb, int tag, int len)
+besra_mcu_add_uni_tlv(struct sk_buff *skb, int tag, int len)
 {
 	struct tlv *ptlv, tlv = {
 		.tag = cpu_to_le16(tag),
@@ -542,11 +542,11 @@
 }
 
 /** bss info **/
-struct bersa_he_obss_narrow_bw_ru_data {
+struct besra_he_obss_narrow_bw_ru_data {
 	bool tolerated;
 };
 
-static inline u8 bersa_get_band(enum nl80211_band band)
+static inline u8 besra_get_band(enum nl80211_band band)
 {
 	static const u8 convert_to_fw[] = {
 		[NL80211_BAND_2GHZ] = CMD_BAND_24G,
@@ -561,15 +561,15 @@
 }
 
 static void
-bersa_mcu_bss_rfch_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
-			struct bersa_phy *phy)
+besra_mcu_bss_rfch_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
+			struct besra_phy *phy)
 {
 	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
 	struct bss_rlm_tlv *ch;
 	struct tlv *tlv;
 	int freq1 = chandef->center_freq1;
 
-	tlv = bersa_mcu_add_uni_tlv(skb, UNI_BSS_INFO_RLM, sizeof(*ch));
+	tlv = besra_mcu_add_uni_tlv(skb, UNI_BSS_INFO_RLM, sizeof(*ch));
 
 	ch = (struct bss_rlm_tlv *)tlv;
 	ch->control_channel = chandef->chan->hw_value;
@@ -577,7 +577,7 @@
 	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 = bersa_get_band(chandef->chan->band);
+	ch->band = besra_get_band(chandef->chan->band);
 
 	if (chandef->width == NL80211_CHAN_WIDTH_80P80) {
 		int freq2 = chandef->center_freq2;
@@ -587,21 +587,21 @@
 }
 
 static void
-bersa_mcu_bss_ra_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
-		      struct bersa_phy *phy)
+besra_mcu_bss_ra_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
+		      struct besra_phy *phy)
 {
 	struct bss_ra_tlv *ra;
 	struct tlv *tlv;
 
-	tlv = bersa_mcu_add_uni_tlv(skb, UNI_BSS_INFO_RA, sizeof(*ra));
+	tlv = besra_mcu_add_uni_tlv(skb, UNI_BSS_INFO_RA, sizeof(*ra));
 
 	ra = (struct bss_ra_tlv *)tlv;
 	ra->short_preamble = true;
 }
 
 static void
-bersa_mcu_bss_he_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
-		      struct bersa_phy *phy)
+besra_mcu_bss_he_tlv(struct sk_buff *skb, struct ieee80211_vif *vif,
+		      struct besra_phy *phy)
 {
 #define DEFAULT_HE_PE_DURATION		4
 #define DEFAULT_HE_DURATION_RTS_THRES	1023
@@ -611,7 +611,7 @@
 
 	cap = mt76_connac_get_he_phy_cap(phy->mt76, vif);
 
-	tlv = bersa_mcu_add_uni_tlv(skb, UNI_BSS_INFO_HE_BASIC, sizeof(*he));
+	tlv = besra_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;
@@ -628,14 +628,14 @@
 }
 
 static void
-bersa_mcu_bss_bmc_tlv(struct sk_buff *skb, struct bersa_phy *phy)
+besra_mcu_bss_bmc_tlv(struct sk_buff *skb, struct besra_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 = bersa_mcu_add_uni_tlv(skb, UNI_BSS_INFO_RATE, sizeof(*bmc));
+	tlv = besra_mcu_add_uni_tlv(skb, UNI_BSS_INFO_RATE, sizeof(*bmc));
 
 	bmc = (struct bss_rate_tlv *)tlv;
 	if (band == NL80211_BAND_2GHZ) {
@@ -650,24 +650,24 @@
 }
 
 static void
-bersa_mcu_bss_txcmd_tlv(struct sk_buff *skb, bool en)
+besra_mcu_bss_txcmd_tlv(struct sk_buff *skb, bool en)
 {
 	struct bss_txcmd_tlv *txcmd;
 	struct tlv *tlv;
 
-	tlv = bersa_mcu_add_uni_tlv(skb, UNI_BSS_INFO_TXCMD, sizeof(*txcmd));
+	tlv = besra_mcu_add_uni_tlv(skb, UNI_BSS_INFO_TXCMD, sizeof(*txcmd));
 
 	txcmd = (struct bss_txcmd_tlv *)tlv;
 	txcmd->txcmd_mode = en;
 }
 
 static void
-bersa_mcu_bss_mld_tlv(struct sk_buff *skb)
+besra_mcu_bss_mld_tlv(struct sk_buff *skb)
 {
 	struct bss_mld_tlv *mld;
 	struct tlv *tlv;
 
-	tlv = bersa_mcu_add_uni_tlv(skb, UNI_BSS_INFO_MLD, sizeof(*mld));
+	tlv = besra_mcu_add_uni_tlv(skb, UNI_BSS_INFO_MLD, sizeof(*mld));
 
 	mld = (struct bss_mld_tlv *)tlv;
 	mld->group_mld_id = 0xff;
@@ -675,24 +675,24 @@
 }
 
 static void
-bersa_mcu_bss_sec_tlv(struct sk_buff *skb, struct ieee80211_vif *vif)
+besra_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 = bersa_mcu_add_uni_tlv(skb, UNI_BSS_INFO_SEC, sizeof(*sec));
+	tlv = besra_mcu_add_uni_tlv(skb, UNI_BSS_INFO_SEC, sizeof(*sec));
 
 	sec = (struct bss_sec_tlv *)tlv;
 	sec->cipher = mvif->cipher;
 }
 
 static int
-bersa_mcu_muar_config(struct bersa_phy *phy, struct ieee80211_vif *vif,
+besra_mcu_muar_config(struct besra_phy *phy, struct ieee80211_vif *vif,
 		       bool bssid, bool enable)
 {
-	struct bersa_dev *dev = phy->dev;
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_dev *dev = phy->dev;
+	struct besra_vif *mvif = (struct besra_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;
@@ -726,7 +726,7 @@
 }
 
 static int
-bersa_mcu_bss_basic_tlv(struct sk_buff *skb,
+besra_mcu_bss_basic_tlv(struct sk_buff *skb,
 			struct ieee80211_vif *vif,
 			struct ieee80211_sta *sta,
 			struct mt76_phy *phy, u16 wlan_idx,
@@ -770,7 +770,7 @@
 		break;
 	}
 
-	tlv = bersa_mcu_add_uni_tlv(skb, UNI_BSS_INFO_BASIC, sizeof(*bss));
+	tlv = besra_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);
@@ -804,7 +804,7 @@
 }
 
 static struct sk_buff *
-__bersa_mcu_alloc_bss_req(struct mt76_dev *dev, struct mt76_vif *mvif, int len)
+__besra_mcu_alloc_bss_req(struct mt76_dev *dev, struct mt76_vif *mvif, int len)
 {
 	struct bss_req_hdr hdr = {
 		.bss_idx = mvif->idx,
@@ -820,49 +820,49 @@
 	return skb;
 }
 
-int bersa_mcu_add_bss_info(struct bersa_phy *phy,
+int besra_mcu_add_bss_info(struct besra_phy *phy,
 			    struct ieee80211_vif *vif, int enable)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_dev *dev = phy->dev;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_dev *dev = phy->dev;
 	struct sk_buff *skb;
 
 	if (mvif->mt76.omac_idx >= REPEATER_BSSID_START) {
-		bersa_mcu_muar_config(phy, vif, false, enable);
-		bersa_mcu_muar_config(phy, vif, true, enable);
+		besra_mcu_muar_config(phy, vif, false, enable);
+		besra_mcu_muar_config(phy, vif, true, enable);
 	}
 
-	skb = __bersa_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
-					BERSA_BSS_UPDATE_MAX_SIZE);
+	skb = __besra_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
+					BESRA_BSS_UPDATE_MAX_SIZE);
 	if (IS_ERR(skb))
 		return PTR_ERR(skb);
 
 	/* bss_basic must be first */
-	bersa_mcu_bss_basic_tlv(skb, vif, NULL, phy->mt76,
+	besra_mcu_bss_basic_tlv(skb, vif, NULL, phy->mt76,
 				mvif->sta.wcid.idx, enable);
-	bersa_mcu_bss_sec_tlv(skb, vif);
+	besra_mcu_bss_sec_tlv(skb, vif);
 
 	if (vif->type == NL80211_IFTYPE_MONITOR)
 		goto out;
 
 	if (enable) {
-		bersa_mcu_bss_rfch_tlv(skb, vif, phy);
-		bersa_mcu_bss_bmc_tlv(skb, phy);
-		bersa_mcu_bss_ra_tlv(skb, vif, phy);
-		bersa_mcu_bss_txcmd_tlv(skb, true);
+		besra_mcu_bss_rfch_tlv(skb, vif, phy);
+		besra_mcu_bss_bmc_tlv(skb, phy);
+		besra_mcu_bss_ra_tlv(skb, vif, phy);
+		besra_mcu_bss_txcmd_tlv(skb, true);
 
 		if (vif->bss_conf.he_support)
-			bersa_mcu_bss_he_tlv(skb, vif, phy);
+			besra_mcu_bss_he_tlv(skb, vif, phy);
 
 		/* all besra ic need this tlv, no matter it supports EHT or not */
-		bersa_mcu_bss_mld_tlv(skb);
+		besra_mcu_bss_mld_tlv(skb);
 	}
 out:
 	return mt76_mcu_skb_send_msg(&dev->mt76, skb,
 				     MCU_WMWA_UNI_CMD(BSS_INFO_UPDATE), true);
 }
 
-int bersa_mcu_sta_ba(struct mt76_dev *dev, struct mt76_vif *mvif,
+int besra_mcu_sta_ba(struct mt76_dev *dev, struct mt76_vif *mvif,
 			   struct ieee80211_ampdu_params *params,
 			   bool enable, bool tx)
 {
@@ -890,33 +890,33 @@
 }
 
 /** starec & wtbl **/
-int bersa_mcu_add_tx_ba(struct bersa_dev *dev,
+int besra_mcu_add_tx_ba(struct besra_dev *dev,
 			 struct ieee80211_ampdu_params *params,
 			 bool enable)
 {
-	struct bersa_sta *msta = (struct bersa_sta *)params->sta->drv_priv;
-	struct bersa_vif *mvif = msta->vif;
+	struct besra_sta *msta = (struct besra_sta *)params->sta->drv_priv;
+	struct besra_vif *mvif = msta->vif;
 
 	if (enable && !params->amsdu)
 		msta->wcid.amsdu = false;
 
-	return bersa_mcu_sta_ba(&dev->mt76, &mvif->mt76, params,
+	return besra_mcu_sta_ba(&dev->mt76, &mvif->mt76, params,
 				enable, true);
 }
 
-int bersa_mcu_add_rx_ba(struct bersa_dev *dev,
+int besra_mcu_add_rx_ba(struct besra_dev *dev,
 			 struct ieee80211_ampdu_params *params,
 			 bool enable)
 {
-	struct bersa_sta *msta = (struct bersa_sta *)params->sta->drv_priv;
-	struct bersa_vif *mvif = msta->vif;
+	struct besra_sta *msta = (struct besra_sta *)params->sta->drv_priv;
+	struct besra_vif *mvif = msta->vif;
 
-	return bersa_mcu_sta_ba(&dev->mt76, &mvif->mt76, params,
+	return besra_mcu_sta_ba(&dev->mt76, &mvif->mt76, params,
 				enable, false);
 }
 
 static void
-bersa_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
+besra_mcu_sta_he_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
 		      struct ieee80211_vif *vif)
 {
 	struct ieee80211_he_cap_elem *elem = &sta->he_cap.he_cap_elem;
@@ -942,16 +942,16 @@
 	case IEEE80211_STA_RX_BW_160:
 		if (elem->phy_cap_info[0] &
 		    IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G)
-			bersa_mcu_set_sta_he_mcs(sta,
+			besra_mcu_set_sta_he_mcs(sta,
 						  &he->max_nss_mcs[CMD_HE_MCS_BW8080],
 						  le16_to_cpu(mcs_map.rx_mcs_80p80));
 
-		bersa_mcu_set_sta_he_mcs(sta,
+		besra_mcu_set_sta_he_mcs(sta,
 					  &he->max_nss_mcs[CMD_HE_MCS_BW160],
 					  le16_to_cpu(mcs_map.rx_mcs_160));
 		fallthrough;
 	default:
-		bersa_mcu_set_sta_he_mcs(sta,
+		besra_mcu_set_sta_he_mcs(sta,
 					  &he->max_nss_mcs[CMD_HE_MCS_BW80],
 					  le16_to_cpu(mcs_map.rx_mcs_80));
 		break;
@@ -961,7 +961,7 @@
 }
 
 static void
-bersa_mcu_sta_he_6g_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
+besra_mcu_sta_he_6g_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
 		      struct ieee80211_vif *vif)
 {
 	struct sta_rec_he_6g_capa *he_6g;
@@ -978,10 +978,10 @@
 }
 
 static void
-bersa_mcu_sta_muru_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
+besra_mcu_sta_muru_tlv(struct sk_buff *skb, struct ieee80211_sta *sta,
 			struct ieee80211_vif *vif)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 	struct ieee80211_he_cap_elem *elem = &sta->he_cap.he_cap_elem;
 	struct sta_rec_muru *muru;
 	struct tlv *tlv;
@@ -1038,7 +1038,7 @@
 }
 
 static void
-bersa_mcu_sta_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
+besra_mcu_sta_ht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
 {
 	struct sta_rec_ht *ht;
 	struct tlv *tlv;
@@ -1053,7 +1053,7 @@
 }
 
 static void
-bersa_mcu_sta_vht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
+besra_mcu_sta_vht_tlv(struct sk_buff *skb, struct ieee80211_sta *sta)
 {
 	struct sta_rec_vht *vht;
 	struct tlv *tlv;
@@ -1070,10 +1070,10 @@
 }
 
 static void
-bersa_mcu_sta_amsdu_tlv(struct bersa_dev *dev, struct sk_buff *skb,
+besra_mcu_sta_amsdu_tlv(struct besra_dev *dev, struct sk_buff *skb,
 			 struct ieee80211_vif *vif, struct ieee80211_sta *sta)
 {
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
 	struct sta_rec_amsdu *amsdu;
 	struct tlv *tlv;
 
@@ -1107,16 +1107,16 @@
 
 #if 0
 static int
-bersa_mcu_sta_wtbl_tlv(struct bersa_dev *dev, struct sk_buff *skb,
+besra_mcu_sta_wtbl_tlv(struct besra_dev *dev, struct sk_buff *skb,
 			struct ieee80211_vif *vif, struct ieee80211_sta *sta)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_sta *msta;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_sta *msta;
 	struct wtbl_req_hdr *wtbl_hdr;
 	struct mt76_wcid *wcid;
 	struct tlv *tlv;
 
-	msta = sta ? (struct bersa_sta *)sta->drv_priv : &mvif->sta;
+	msta = sta ? (struct besra_sta *)sta->drv_priv : &mvif->sta;
 	wcid = sta ? &msta->wcid : NULL;
 
 	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_WTBL, sizeof(struct tlv));
@@ -1138,10 +1138,10 @@
 #endif
 
 static inline bool
-bersa_is_ebf_supported(struct bersa_phy *phy, struct ieee80211_vif *vif,
+besra_is_ebf_supported(struct besra_phy *phy, struct ieee80211_vif *vif,
 			struct ieee80211_sta *sta, bool bfee)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 	int tx_ant = hweight8(phy->mt76->chainmask) - 1;
 
 	if (vif->type != NL80211_IFTYPE_STATION &&
@@ -1177,16 +1177,16 @@
 }
 
 static void
-bersa_mcu_sta_sounding_rate(struct sta_rec_bf *bf)
+besra_mcu_sta_sounding_rate(struct sta_rec_bf *bf)
 {
 	bf->sounding_phy = MT_PHY_TYPE_OFDM;
 	bf->ndp_rate = 0;				/* mcs0 */
-	bf->ndpa_rate = BERSA_CFEND_RATE_DEFAULT;	/* ofdm 24m */
-	bf->rept_poll_rate = BERSA_CFEND_RATE_DEFAULT;	/* ofdm 24m */
+	bf->ndpa_rate = BESRA_CFEND_RATE_DEFAULT;	/* ofdm 24m */
+	bf->rept_poll_rate = BESRA_CFEND_RATE_DEFAULT;	/* ofdm 24m */
 }
 
 static void
-bersa_mcu_sta_bfer_ht(struct ieee80211_sta *sta, struct bersa_phy *phy,
+besra_mcu_sta_bfer_ht(struct ieee80211_sta *sta, struct besra_phy *phy,
 		       struct sta_rec_bf *bf)
 {
 	struct ieee80211_mcs_info *mcs = &sta->ht_cap.mcs;
@@ -1211,13 +1211,13 @@
 }
 
 static void
-bersa_mcu_sta_bfer_vht(struct ieee80211_sta *sta, struct bersa_phy *phy,
+besra_mcu_sta_bfer_vht(struct ieee80211_sta *sta, struct besra_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 = bersa_mcu_get_sta_nss(mcs_map);
+	u8 nss_mcs = besra_mcu_get_sta_nss(mcs_map);
 	u8 tx_ant = hweight8(phy->mt76->chainmask) - 1;
 
 	bf->tx_mode = MT_PHY_TYPE_VHT;
@@ -1225,7 +1225,7 @@
 	if (explicit) {
 		u8 sts, snd_dim;
 
-		bersa_mcu_sta_sounding_rate(bf);
+		besra_mcu_sta_sounding_rate(bf);
 
 		sts = FIELD_GET(IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK,
 				pc->cap);
@@ -1248,8 +1248,8 @@
 }
 
 static void
-bersa_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,
-		       struct bersa_phy *phy, struct sta_rec_bf *bf)
+besra_mcu_sta_bfer_he(struct ieee80211_sta *sta, struct ieee80211_vif *vif,
+		       struct besra_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;
@@ -1257,12 +1257,12 @@
 		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 = bersa_mcu_get_sta_nss(mcs_map);
+	u8 nss_mcs = besra_mcu_get_sta_nss(mcs_map);
 	u8 snd_dim, sts;
 
 	bf->tx_mode = MT_PHY_TYPE_HE_SU;
 
-	bersa_mcu_sta_sounding_rate(bf);
+	besra_mcu_sta_sounding_rate(bf);
 
 	bf->trigger_su = HE_PHY(CAP6_TRIG_SU_BEAMFORMING_FB,
 				pe->phy_cap_info[6]);
@@ -1283,7 +1283,7 @@
 	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 = bersa_mcu_get_sta_nss(mcs_map);
+		nss_mcs = besra_mcu_get_sta_nss(mcs_map);
 
 		bf->ncol_bw160 = nss_mcs;
 	}
@@ -1291,7 +1291,7 @@
 	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 = bersa_mcu_get_sta_nss(mcs_map);
+		nss_mcs = besra_mcu_get_sta_nss(mcs_map);
 
 		if (bf->ncol_bw160)
 			bf->ncol_bw160 = min_t(u8, bf->ncol_bw160, nss_mcs);
@@ -1308,11 +1308,11 @@
 }
 
 static void
-bersa_mcu_sta_bfer_tlv(struct bersa_dev *dev, struct sk_buff *skb,
+besra_mcu_sta_bfer_tlv(struct besra_dev *dev, struct sk_buff *skb,
 		       struct ieee80211_vif *vif, struct ieee80211_sta *sta)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_phy *phy = mvif->phy;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_phy *phy = mvif->phy;
 	int tx_ant = hweight8(phy->mt76->chainmask) - 1;
 	struct sta_rec_bf *bf;
 	struct tlv *tlv;
@@ -1327,7 +1327,7 @@
 	if (!(sta->ht_cap.ht_supported || sta->he_cap.has_he))
 		return;
 
-	ebf = bersa_is_ebf_supported(phy, vif, sta, false);
+	ebf = besra_is_ebf_supported(phy, vif, sta, false);
 	if (!ebf && !dev->ibf)
 		return;
 
@@ -1339,11 +1339,11 @@
 	 * ht: iBF only, since mac80211 lacks of eBF support
 	 */
 	if (sta->he_cap.has_he && ebf)
-		bersa_mcu_sta_bfer_he(sta, vif, phy, bf);
+		besra_mcu_sta_bfer_he(sta, vif, phy, bf);
 	else if (sta->vht_cap.vht_supported)
-		bersa_mcu_sta_bfer_vht(sta, phy, bf, ebf);
+		besra_mcu_sta_bfer_vht(sta, phy, bf, ebf);
 	else if (sta->ht_cap.ht_supported)
-		bersa_mcu_sta_bfer_ht(sta, phy, bf);
+		besra_mcu_sta_bfer_ht(sta, phy, bf);
 	else
 		return;
 
@@ -1377,11 +1377,11 @@
 }
 
 static void
-bersa_mcu_sta_bfee_tlv(struct bersa_dev *dev, struct sk_buff *skb,
+besra_mcu_sta_bfee_tlv(struct besra_dev *dev, struct sk_buff *skb,
 			struct ieee80211_vif *vif, struct ieee80211_sta *sta)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_phy *phy = mvif->phy;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_phy *phy = mvif->phy;
 	int tx_ant = hweight8(phy->mt76->chainmask) - 1;
 	struct sta_rec_bfee *bfee;
 	struct tlv *tlv;
@@ -1390,7 +1390,7 @@
 	if (!(sta->vht_cap.vht_supported || sta->he_cap.has_he))
 		return;
 
-	if (!bersa_is_ebf_supported(phy, vif, sta, true))
+	if (!besra_is_ebf_supported(phy, vif, sta, true))
 		return;
 
 	tlv = mt76_connac_mcu_add_tlv(skb, STA_REC_BFEE, sizeof(*bfee));
@@ -1413,10 +1413,10 @@
 }
 
 static void
-bersa_mcu_sta_phy_tlv(struct bersa_dev *dev, struct sk_buff *skb,
+besra_mcu_sta_phy_tlv(struct besra_dev *dev, struct sk_buff *skb,
 		      struct ieee80211_vif *vif, struct ieee80211_sta *sta)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 	struct cfg80211_chan_def *chandef = &mvif->phy->mt76->chandef;
 	enum nl80211_band band = chandef->chan->band;
 	struct mt76_phy *mphy = &dev->mphy;
@@ -1447,7 +1447,7 @@
 }
 
 static void
-bersa_mcu_sta_hdr_trans_tlv(struct bersa_dev *dev, struct sk_buff *skb,
+besra_mcu_sta_hdr_trans_tlv(struct besra_dev *dev, struct sk_buff *skb,
 			 struct ieee80211_vif *vif, struct ieee80211_sta *sta)
 {
 	struct sta_rec_hdr_trans *hdr_trans;
@@ -1473,7 +1473,7 @@
 }
 
 static enum mcu_mmps_mode
-bersa_mcu_get_mmps_mode(enum ieee80211_smps_mode smps)
+besra_mcu_get_mmps_mode(enum ieee80211_smps_mode smps)
 {
 	switch (smps) {
 	case IEEE80211_SMPS_OFF:
@@ -1487,13 +1487,13 @@
 	}
 }
 
-int bersa_mcu_set_fixed_rate_ctrl(struct bersa_dev *dev,
+int besra_mcu_set_fixed_rate_ctrl(struct besra_dev *dev,
 				   struct ieee80211_vif *vif,
 				   struct ieee80211_sta *sta,
 				   void *data, u32 field)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
 	struct sta_phy *phy = data;
 	struct sta_rec_ra_fixed *ra;
 	struct sk_buff *skb;
@@ -1518,7 +1518,7 @@
 			ra->phy = *phy;
 		break;
 	case RATE_PARAM_MMPS_UPDATE:
-		ra->mmps_mode = bersa_mcu_get_mmps_mode(sta->smps_mode);
+		ra->mmps_mode = besra_mcu_get_mmps_mode(sta->smps_mode);
 		break;
 	default:
 		break;
@@ -1529,12 +1529,12 @@
 				     MCU_WMWA_UNI_CMD(STA_REC_UPDATE), true);
 }
 
-int bersa_mcu_add_smps(struct bersa_dev *dev, struct ieee80211_vif *vif,
+int besra_mcu_add_smps(struct besra_dev *dev, struct ieee80211_vif *vif,
 			struct ieee80211_sta *sta)
 {
 #if 0
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
 	struct wtbl_req_hdr *wtbl_hdr;
 	struct tlv *sta_wtbl;
 	struct sk_buff *skb;
@@ -1561,16 +1561,16 @@
 #endif
 	printk("Remove smps tag in wtbl. Todo: check it is corrected or not");
 
-	return bersa_mcu_set_fixed_rate_ctrl(dev, vif, sta, NULL,
+	return besra_mcu_set_fixed_rate_ctrl(dev, vif, sta, NULL,
 					      RATE_PARAM_MMPS_UPDATE);
 }
 
 static int
-bersa_mcu_add_rate_ctrl_fixed(struct bersa_dev *dev,
+besra_mcu_add_rate_ctrl_fixed(struct besra_dev *dev,
 			       struct ieee80211_vif *vif,
 			       struct ieee80211_sta *sta)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_vif *mvif = (struct besra_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;
@@ -1614,7 +1614,7 @@
 
 	/* fixed single rate */
 	if (nrates == 1) {
-		ret = bersa_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy,
+		ret = besra_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy,
 						     RATE_PARAM_FIXED_MCS);
 		if (ret)
 			return ret;
@@ -1623,20 +1623,20 @@
 	/* fixed GI */
 	if (mask->control[band].gi != NL80211_TXRATE_DEFAULT_GI ||
 	    mask->control[band].he_gi != GENMASK(7, 0)) {
-		struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+		struct besra_sta *msta = (struct besra_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 = bersa_mac_wtbl_lmac_addr(dev, msta->wcid.idx, 7);
+		addr = besra_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 = bersa_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy,
+		ret = besra_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy,
 						     RATE_PARAM_FIXED_GI);
 		if (ret)
 			return ret;
@@ -1644,7 +1644,7 @@
 
 	/* fixed HE_LTF */
 	if (mask->control[band].he_ltf != GENMASK(7, 0)) {
-		ret = bersa_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy,
+		ret = besra_mcu_set_fixed_rate_ctrl(dev, vif, sta, &phy,
 						     RATE_PARAM_FIXED_HE_LTF);
 		if (ret)
 			return ret;
@@ -1654,10 +1654,10 @@
 }
 
 static void
-bersa_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct bersa_dev *dev,
+besra_mcu_sta_rate_ctrl_tlv(struct sk_buff *skb, struct besra_dev *dev,
 			     struct ieee80211_vif *vif, struct ieee80211_sta *sta)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_vif *mvif = (struct besra_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;
@@ -1676,7 +1676,7 @@
 	ra->channel = chandef->chan->hw_value;
 	ra->bw = sta->bandwidth;
 	ra->phy.bw = sta->bandwidth;
-	ra->mmps_mode = bersa_mcu_get_mmps_mode(sta->smps_mode);
+	ra->mmps_mode = besra_mcu_get_mmps_mode(sta->smps_mode);
 
 	if (supp_rate) {
 		supp_rate &= mask->control[band].legacy;
@@ -1714,7 +1714,7 @@
 		    (sta->ht_cap.cap & IEEE80211_HT_CAP_LDPC_CODING))
 			cap |= STA_CAP_LDPC;
 
-		bersa_mcu_set_sta_ht_mcs(sta, ra->ht_mcs,
+		besra_mcu_set_sta_ht_mcs(sta, ra->ht_mcs,
 					  mask->control[band].ht_mcs);
 		ra->supp_ht_mcs = *(__le32 *)ra->ht_mcs;
 	}
@@ -1740,7 +1740,7 @@
 		    (sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC))
 			cap |= STA_CAP_VHT_LDPC;
 
-		bersa_mcu_set_sta_vht_mcs(sta, ra->supp_vht_mcs,
+		besra_mcu_set_sta_vht_mcs(sta, ra->supp_vht_mcs,
 					   mask->control[band].vht_mcs);
 	}
 
@@ -1756,11 +1756,11 @@
 	ra->sta_cap = cpu_to_le32(cap);
 }
 
-int bersa_mcu_add_rate_ctrl(struct bersa_dev *dev, struct ieee80211_vif *vif,
+int besra_mcu_add_rate_ctrl(struct besra_dev *dev, struct ieee80211_vif *vif,
 			     struct ieee80211_sta *sta, bool changed)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
 	struct sk_buff *skb;
 	int ret;
 
@@ -1774,12 +1774,12 @@
 	 * update sta_rec_he here.
 	 */
 	if (changed)
-		bersa_mcu_sta_he_tlv(skb, sta, vif);
+		besra_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.
 	 */
-	bersa_mcu_sta_rate_ctrl_tlv(skb, dev, vif, sta);
+	besra_mcu_sta_rate_ctrl_tlv(skb, dev, vif, sta);
 
 	ret = mt76_mcu_skb_send_msg(&dev->mt76, skb,
 				    MCU_WMWA_UNI_CMD(STA_REC_UPDATE), true);
@@ -1790,16 +1790,16 @@
 	 * and updates as peer fixed rate parameters, which overrides
 	 * sta_rec_ra and firmware rate control algorithm.
 	 */
-	return bersa_mcu_add_rate_ctrl_fixed(dev, vif, sta);
+	return besra_mcu_add_rate_ctrl_fixed(dev, vif, sta);
 }
 
 static int
-bersa_mcu_add_group(struct bersa_dev *dev, struct ieee80211_vif *vif,
+besra_mcu_add_group(struct besra_dev *dev, struct ieee80211_vif *vif,
 		     struct ieee80211_sta *sta)
 {
 #define MT_STA_BSS_GROUP		1
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_sta *msta;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_sta *msta;
 	struct {
 		/* fixed field */
 		u8 __rsv1[4];
@@ -1818,22 +1818,22 @@
 		.val = cpu_to_le32(mvif->mt76.idx % 16),
 	};
 
-	msta = sta ? (struct bersa_sta *)sta->drv_priv : &mvif->sta;
+	msta = sta ? (struct besra_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 bersa_mcu_add_sta(struct bersa_dev *dev, struct ieee80211_vif *vif,
+int besra_mcu_add_sta(struct besra_dev *dev, struct ieee80211_vif *vif,
 		       struct ieee80211_sta *sta, bool enable)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_sta *msta;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_sta *msta;
 	struct sk_buff *skb;
 	int ret;
 
-	msta = sta ? (struct bersa_sta *)sta->drv_priv : &mvif->sta;
+	msta = sta ? (struct besra_sta *)sta->drv_priv : &mvif->sta;
 
 	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
 					    &msta->wcid);
@@ -1849,30 +1849,30 @@
 	if (sta) {
 		/* starec phy */
 		if (mt76_chip(&dev->mt76) != 0x7902)
-			bersa_mcu_sta_phy_tlv(dev, skb, vif, sta);
+			besra_mcu_sta_phy_tlv(dev, skb, vif, sta);
 		/* starec bfer */
-		bersa_mcu_sta_bfer_tlv(dev, skb, vif, sta);
+		besra_mcu_sta_bfer_tlv(dev, skb, vif, sta);
 		/* starec ht */
-		bersa_mcu_sta_ht_tlv(skb, sta);
+		besra_mcu_sta_ht_tlv(skb, sta);
 		/* starec vht */
-		bersa_mcu_sta_vht_tlv(skb, sta);
+		besra_mcu_sta_vht_tlv(skb, sta);
 		/* starec uapsd */
 		mt76_connac_mcu_sta_uapsd(skb, vif, sta);
 		/* starec amsdu */
-		bersa_mcu_sta_amsdu_tlv(dev, skb, vif, sta);
+		besra_mcu_sta_amsdu_tlv(dev, skb, vif, sta);
 		/* starec he */
-		bersa_mcu_sta_he_tlv(skb, sta, vif);
+		besra_mcu_sta_he_tlv(skb, sta, vif);
 		/* starec he 6g*/
-		bersa_mcu_sta_he_6g_tlv(skb, sta, vif);
+		besra_mcu_sta_he_6g_tlv(skb, sta, vif);
 		/* starec muru */
-		bersa_mcu_sta_muru_tlv(skb, sta, vif);
+		besra_mcu_sta_muru_tlv(skb, sta, vif);
 		/* starec bfee */
-		bersa_mcu_sta_bfee_tlv(dev, skb, vif, sta);
+		besra_mcu_sta_bfee_tlv(dev, skb, vif, sta);
 		/* starec hdr trans */
-		bersa_mcu_sta_hdr_trans_tlv(dev, skb, vif, sta);
+		besra_mcu_sta_hdr_trans_tlv(dev, skb, vif, sta);
 	}
 
-	ret = bersa_mcu_add_group(dev, vif, sta);
+	ret = besra_mcu_add_group(dev, vif, sta);
 	if (ret) {
 		dev_kfree_skb(skb);
 		return ret;
@@ -1883,7 +1883,7 @@
 }
 
 static int
-bersa_mcu_sta_key_tlv(struct mt76_wcid *wcid,
+besra_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,
@@ -1949,7 +1949,7 @@
 	return 0;
 }
 
-int bersa_mcu_add_key(struct mt76_dev *dev, struct ieee80211_vif *vif,
+int besra_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)
@@ -1962,18 +1962,18 @@
 	if (IS_ERR(skb))
 		return PTR_ERR(skb);
 
-	ret = bersa_mcu_sta_key_tlv(wcid, sta_key_conf, skb, key, cmd);
+	ret = besra_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 bersa_mcu_add_dev_info(struct bersa_phy *phy,
+int besra_mcu_add_dev_info(struct besra_phy *phy,
 			    struct ieee80211_vif *vif, bool enable)
 {
-	struct bersa_dev *dev = phy->dev;
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_dev *dev = phy->dev;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 	struct {
 		struct req_hdr {
 			u8 omac_idx;
@@ -2000,7 +2000,7 @@
 	};
 
 	if (mvif->mt76.omac_idx >= REPEATER_BSSID_START)
-		return bersa_mcu_muar_config(phy, vif, false, enable);
+		return besra_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),
@@ -2008,7 +2008,7 @@
 }
 
 static void
-bersa_mcu_beacon_cntdwn(struct ieee80211_vif *vif, struct sk_buff *rskb,
+besra_mcu_beacon_cntdwn(struct ieee80211_vif *vif, struct sk_buff *rskb,
 			 struct sk_buff *skb,
 			 struct ieee80211_mutable_offsets *offs)
 {
@@ -2021,14 +2021,14 @@
 
 	tag = vif->csa_active ? UNI_BSS_INFO_BCN_CSA : UNI_BSS_INFO_BCN_BCC;
 
-	tlv = bersa_mcu_add_uni_tlv(rskb, tag, sizeof(*info));
+	tlv = besra_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
-bersa_mcu_beacon_cont(struct bersa_dev *dev, struct ieee80211_vif *vif,
+besra_mcu_beacon_cont(struct besra_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)
@@ -2049,17 +2049,17 @@
 	}
 
 	buf = (u8 *)bcn + sizeof(*bcn) - MAX_BEACON_SIZE;
-	bersa_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, 0, NULL,
+	besra_mac_write_txwi(dev, (__le32 *)buf, skb, wcid, 0, NULL,
 			     true);
 	memcpy(buf + MT_TXD_SIZE, skb->data, skb->len);
 }
 
 static void
-bersa_mcu_beacon_check_caps(struct bersa_phy *phy, struct ieee80211_vif *vif,
+besra_mcu_beacon_check_caps(struct besra_phy *phy, struct ieee80211_vif *vif,
 			     struct sk_buff *skb)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_vif_cap *vc = &mvif->cap;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_vif_cap *vc = &mvif->cap;
 	const struct ieee80211_he_cap_elem *he;
 	const struct ieee80211_vht_cap *vht;
 	const struct ieee80211_ht_cap *ht;
@@ -2132,25 +2132,25 @@
 	}
 }
 
-int bersa_mcu_add_beacon(struct ieee80211_hw *hw,
+int besra_mcu_add_beacon(struct ieee80211_hw *hw,
 			  struct ieee80211_vif *vif, int en)
 {
-	struct bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
+	struct besra_vif *mvif = (struct besra_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;
-	u8 phy_idx = bersa_get_phy_id(phy);
+	u8 phy_idx = besra_get_phy_id(phy);
 
-	rskb = __bersa_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
-					 BERSA_BEACON_UPDATE_SIZE);
+	rskb = __besra_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
+					 BESRA_BEACON_UPDATE_SIZE);
 	if (IS_ERR(rskb))
 		return PTR_ERR(rskb);
 
-	tlv = bersa_mcu_add_uni_tlv(rskb,
+	tlv = besra_mcu_add_uni_tlv(rskb,
 				    UNI_BSS_INFO_BCN_CONTENT, sizeof(*bcn));
 	bcn = (struct bss_bcn_content_tlv *)tlv;
 	bcn->enable = en;
@@ -2171,18 +2171,18 @@
 	info = IEEE80211_SKB_CB(skb);
 	info->hw_queue |= FIELD_PREP(MT_TX_HW_QUEUE_PHY, phy_idx);
 
-	bersa_mcu_beacon_check_caps(phy, vif, skb);
+	besra_mcu_beacon_check_caps(phy, vif, skb);
 
-	bersa_mcu_beacon_cont(dev, vif, rskb, skb, bcn, &offs);
+	besra_mcu_beacon_cont(dev, vif, rskb, skb, bcn, &offs);
 	/* TODO: subtag - 11v MBSSID */
-	bersa_mcu_beacon_cntdwn(vif, rskb, skb, &offs);
+	besra_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);
 }
 
-static int bersa_driver_own(struct bersa_dev *dev, u8 band)
+static int besra_driver_own(struct besra_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),
@@ -2198,9 +2198,9 @@
 	return 0;
 }
 
-static int bersa_load_patch(struct bersa_dev *dev)
+static int besra_load_patch(struct besra_dev *dev)
 {
-	const struct bersa_patch_hdr *hdr;
+	const struct besra_patch_hdr *hdr;
 	const struct firmware *fw = NULL;
 	int i, ret, sem;
 
@@ -2226,17 +2226,17 @@
 		goto out;
 	}
 
-	hdr = (const struct bersa_patch_hdr *)(fw->data);
+	hdr = (const struct besra_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 bersa_patch_sec *sec;
+		struct besra_patch_sec *sec;
 		const u8 *dl;
 		u32 len, addr;
 
-		sec = (struct bersa_patch_sec *)(fw->data + sizeof(*hdr) +
+		sec = (struct besra_patch_sec *)(fw->data + sizeof(*hdr) +
 						  i * sizeof(*sec));
 		if ((be32_to_cpu(sec->type) & PATCH_SEC_TYPE_MASK) !=
 		    PATCH_SEC_TYPE_INFO) {
@@ -2283,19 +2283,19 @@
 }
 
 static int
-bersa_mcu_send_ram_firmware(struct bersa_dev *dev,
-			     const struct bersa_fw_trailer *hdr,
+besra_mcu_send_ram_firmware(struct besra_dev *dev,
+			     const struct besra_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 bersa_fw_region *region;
+		const struct besra_fw_region *region;
 		int err;
 		u32 len, addr, mode;
 
-		region = (const struct bersa_fw_region *)((const u8 *)hdr -
+		region = (const struct besra_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);
@@ -2331,9 +2331,9 @@
 	return mt76_connac_mcu_start_firmware(&dev->mt76, override, option);
 }
 
-static int bersa_load_ram(struct bersa_dev *dev)
+static int besra_load_ram(struct besra_dev *dev)
 {
-	const struct bersa_fw_trailer *hdr;
+	const struct besra_fw_trailer *hdr;
 	const struct firmware *fw;
 	int ret;
 
@@ -2348,13 +2348,13 @@
 		goto out;
 	}
 
-	hdr = (const struct bersa_fw_trailer *)(fw->data + fw->size -
+	hdr = (const struct besra_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 = bersa_mcu_send_ram_firmware(dev, hdr, fw->data, false);
+	ret = besra_mcu_send_ram_firmware(dev, hdr, fw->data, false);
 	if (ret) {
 		dev_err(dev->mt76.dev, "Failed to start WM firmware\n");
 		goto out;
@@ -2373,13 +2373,13 @@
 		goto out;
 	}
 
-	hdr = (const struct bersa_fw_trailer *)(fw->data + fw->size -
+	hdr = (const struct besra_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 = bersa_mcu_send_ram_firmware(dev, hdr, fw->data, true);
+	ret = besra_mcu_send_ram_firmware(dev, hdr, fw->data, true);
 	if (ret) {
 		dev_err(dev->mt76.dev, "Failed to start WA firmware\n");
 		goto out;
@@ -2396,7 +2396,7 @@
 }
 
 static int
-bersa_firmware_state(struct bersa_dev *dev, bool wa)
+besra_firmware_state(struct besra_dev *dev, bool wa)
 {
 	u32 state = FIELD_PREP(MT_TOP_MISC_FW_STATE,
 			       wa ? FW_STATE_RDY : FW_STATE_FW_DOWNLOAD);
@@ -2409,15 +2409,15 @@
 	return 0;
 }
 
-static int bersa_load_firmware(struct bersa_dev *dev)
+static int besra_load_firmware(struct besra_dev *dev)
 {
 	int ret;
 
 	/* make sure fw is download state */
-	if (bersa_firmware_state(dev, false)) {
+	if (besra_firmware_state(dev, false)) {
 		/* restart firmware once */
 		__mt76_mcu_restart(&dev->mt76);
-		ret = bersa_firmware_state(dev, false);
+		ret = besra_firmware_state(dev, false);
 		if (ret) {
 			dev_err(dev->mt76.dev,
 				"Firmware is not ready for download\n");
@@ -2425,15 +2425,15 @@
 		}
 	}
 
-	ret = bersa_load_patch(dev);
+	ret = besra_load_patch(dev);
 	if (ret)
 		return ret;
 
-	ret = bersa_load_ram(dev);
+	ret = besra_load_ram(dev);
 	if (ret)
 		return ret;
 
-	ret = bersa_firmware_state(dev, true);
+	ret = besra_firmware_state(dev, true);
 	if (ret)
 		return ret;
 
@@ -2444,7 +2444,7 @@
 	return 0;
 }
 
-int bersa_mcu_fw_log_2_host(struct bersa_dev *dev, u8 type, u8 ctrl)
+int besra_mcu_fw_log_2_host(struct besra_dev *dev, u8 type, u8 ctrl)
 {
 	struct {
 		u8 _rsv[4];
@@ -2468,7 +2468,7 @@
 				 sizeof(data), true);
 }
 
-int bersa_mcu_fw_dbg_ctrl(struct bersa_dev *dev, u32 module, u8 level)
+int besra_mcu_fw_dbg_ctrl(struct besra_dev *dev, u32 module, u8 level)
 {
 	struct {
 		u8 _rsv[4];
@@ -2489,7 +2489,7 @@
 				 sizeof(data), false);
 }
 
-int bersa_mcu_muru_debug_set(struct bersa_dev *dev, bool enabled)
+int besra_mcu_muru_debug_set(struct besra_dev *dev, bool enabled)
 {
 	struct {
 		__le32 cmd;
@@ -2503,12 +2503,12 @@
 				sizeof(data), false);
 }
 
-int bersa_mcu_muru_debug_get(struct bersa_phy *phy, void *ms)
+int besra_mcu_muru_debug_get(struct besra_phy *phy, void *ms)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	struct sk_buff *skb;
-	struct bersa_mcu_muru_stats *mu_stats =
-				(struct bersa_mcu_muru_stats *)ms;
+	struct besra_mcu_muru_stats *mu_stats =
+				(struct besra_mcu_muru_stats *)ms;
 	int ret;
 
 	struct {
@@ -2524,13 +2524,13 @@
 	if (ret)
 		return ret;
 
-	memcpy(mu_stats, skb->data, sizeof(struct bersa_mcu_muru_stats));
+	memcpy(mu_stats, skb->data, sizeof(struct besra_mcu_muru_stats));
 	dev_kfree_skb(skb);
 
 	return 0;
 }
 
-static int bersa_mcu_set_mwds(struct bersa_dev *dev, bool enabled)
+static int besra_mcu_set_mwds(struct besra_dev *dev, bool enabled)
 {
 	struct {
 		u8 enable;
@@ -2543,7 +2543,7 @@
 				 sizeof(req), false);
 }
 
-int bersa_mcu_set_muru_ctrl(struct bersa_dev *dev, u32 cmd, u32 val)
+int besra_mcu_set_muru_ctrl(struct besra_dev *dev, u32 cmd, u32 val)
 {
 	struct {
 		__le32 cmd;
@@ -2559,7 +2559,7 @@
 }
 
 static int
-bersa_mcu_init_rx_airtime(struct bersa_dev *dev)
+besra_mcu_init_rx_airtime(struct besra_dev *dev)
 {
 #define RX_AIRTIME_FEATURE_CTRL		1
 #define RX_AIRTIME_BITWISE_CTRL		2
@@ -2600,7 +2600,7 @@
 }
 
 static int
-bersa_load_rom(struct bersa_dev *dev, bool is_sram)
+besra_load_rom(struct besra_dev *dev, bool is_sram)
 {
 #define MCU_FIRMWARE_ROM_ADDR		0x00800000
 #define MCU_FIRMWARE_ROM_SRAM_ADDR	0xE0048000
@@ -2656,7 +2656,7 @@
 
 }
 
-int bersa_rom_start(struct bersa_dev *dev)
+int besra_rom_start(struct besra_dev *dev)
 {
 #define WF_IDLE			0xBE11
 #define WF_STATE_MASK		GENMASK(15, 0)
@@ -2674,11 +2674,11 @@
 	mt76_rmw(dev, MT_INFRA_RGU_RGU_ON_SW_RST_B,
 		 MT_INFRA_RGU_RGU_ON_SW_RST_B_MASK, 0);
 
-	ret = bersa_load_rom(dev, false);
+	ret = besra_load_rom(dev, false);
 	if (ret)
 		return ret;
 
-	ret = bersa_load_rom(dev, true);
+	ret = besra_load_rom(dev, true);
 	if (ret)
 		return ret;
 
@@ -2707,67 +2707,67 @@
 	return ret;
 }
 
-int bersa_mcu_init(struct bersa_dev *dev)
+int besra_mcu_init(struct besra_dev *dev)
 {
-	static const struct mt76_mcu_ops bersa_mcu_ops = {
-		.headroom = sizeof(struct bersa_mcu_txd),
-		.mcu_skb_send_msg = bersa_mcu_send_message,
-		.mcu_parse_response = bersa_mcu_parse_response,
+	static const struct mt76_mcu_ops besra_mcu_ops = {
+		.headroom = sizeof(struct besra_mcu_txd),
+		.mcu_skb_send_msg = besra_mcu_send_message,
+		.mcu_parse_response = besra_mcu_parse_response,
 		.mcu_restart = mt76_connac_mcu_restart,
 	};
 	int ret;
 
-	dev->mt76.mcu_ops = &bersa_mcu_ops;
+	dev->mt76.mcu_ops = &besra_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 = bersa_driver_own(dev, 0);
+	ret = besra_driver_own(dev, 0);
 	if (ret)
 		return ret;
 	/* set driver own for band1 when two hif exist */
 	if (dev->hif2) {
-		ret = bersa_driver_own(dev, 1);
+		ret = besra_driver_own(dev, 1);
 		if (ret)
 			return ret;
 	}
 
-	ret = bersa_load_firmware(dev);
+	ret = besra_load_firmware(dev);
 	if (ret)
 		return ret;
 
 	set_bit(MT76_STATE_MCU_RUNNING, &dev->mphy.state);
-	ret = bersa_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, 0);
+	ret = besra_mcu_fw_log_2_host(dev, MCU_FW_LOG_WM, 0);
 	if (ret)
 		return ret;
 
-	ret = bersa_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, 0);
+	ret = besra_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, 0);
 	if (ret)
 		return ret;
 
-	ret = bersa_mcu_set_mwds(dev, 1);
+	ret = besra_mcu_set_mwds(dev, 1);
 	if (ret)
 		return ret;
 
-	ret = bersa_mcu_set_muru_ctrl(dev, MURU_SET_PLATFORM_TYPE,
+	ret = besra_mcu_set_muru_ctrl(dev, MURU_SET_PLATFORM_TYPE,
 				       MURU_PLATFORM_TYPE_PERF_LEVEL_2);
 	if (ret)
 		return ret;
 
-	ret = bersa_mcu_init_rx_airtime(dev);
+	ret = besra_mcu_init_rx_airtime(dev);
 	if (ret)
 		return ret;
 
-	return bersa_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),
+	return besra_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET),
 				 MCU_WA_PARAM_RED, 0, 0);
 }
 
-void bersa_mcu_exit(struct bersa_dev *dev)
+void besra_mcu_exit(struct besra_dev *dev)
 {
 	__mt76_mcu_restart(&dev->mt76);
-	if (bersa_firmware_state(dev, false)) {
+	if (besra_firmware_state(dev, false)) {
 		dev_err(dev->mt76.dev, "Failed to exit mcu\n");
 		return;
 	}
@@ -2779,7 +2779,7 @@
 	skb_queue_purge(&dev->mt76.mcu.res_q);
 }
 
-int bersa_mcu_set_hdr_trans(struct bersa_dev *dev, bool hdr_trans)
+int besra_mcu_set_hdr_trans(struct besra_dev *dev, bool hdr_trans)
 {
 	struct {
 		u8 __rsv[4];
@@ -2788,7 +2788,7 @@
 	struct hdr_trans_en *req_en;
 	struct sk_buff *skb;
 	struct tlv *tlv;
-	int len = BERSA_HDR_TRANS_MAX_SIZE + sizeof(hdr);
+	int len = BESRA_HDR_TRANS_MAX_SIZE + sizeof(hdr);
 	int ret;
 
 	skb = mt76_mcu_msg_alloc(&dev->mt76, NULL, len);
@@ -2797,15 +2797,15 @@
 
 	skb_put_data(skb, &hdr, sizeof(hdr));
 
-	tlv = bersa_mcu_add_uni_tlv(skb, UNI_HDR_TRANS_EN, sizeof(*req_en));
+	tlv = besra_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 = bersa_mcu_add_uni_tlv(skb, UNI_HDR_TRANS_VLAN,
+	tlv = besra_mcu_add_uni_tlv(skb, UNI_HDR_TRANS_VLAN,
 				    sizeof(struct hdr_trans_vlan));
 
 	if (hdr_trans) {
-		tlv = bersa_mcu_add_uni_tlv(skb, UNI_HDR_TRANS_BLACKLIST,
+		tlv = besra_mcu_add_uni_tlv(skb, UNI_HDR_TRANS_BLACKLIST,
 					    sizeof(*req_blacklist));
 		req_blacklist = (struct hdr_trans_blacklist *)tlv;
 		req_blacklist->enable = 1;
@@ -2816,9 +2816,9 @@
 				     MCU_WM_UNI_CMD(RX_HDR_TRANS), true);
 }
 
-int bersa_mcu_set_tx(struct bersa_dev *dev, struct ieee80211_vif *vif)
+int besra_mcu_set_tx(struct besra_dev *dev, struct ieee80211_vif *vif)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 	struct {
 		u8 bss_idx;
 		u8 __rsv[3];
@@ -2840,11 +2840,11 @@
 		struct edca *e;
 		struct tlv *tlv;
 
-		tlv = bersa_mcu_add_uni_tlv(skb, MCU_EDCA_AC_PARAM, sizeof(*e));
+		tlv = besra_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 * BERSA_MAX_WMM_SETS;
+		e->queue = ac + mvif->mt76.wmm_idx * BESRA_MAX_WMM_SETS;
 		e->aifs = q->aifs;
 		e->txop = cpu_to_le16(q->txop);
 
@@ -2862,7 +2862,7 @@
 				     MCU_WM_UNI_CMD(EDCA), true);
 }
 
-int bersa_mcu_set_fcc5_lpn(struct bersa_dev *dev, int val)
+int besra_mcu_set_fcc5_lpn(struct besra_dev *dev, int val)
 {
 	struct {
 		__le32 tag;
@@ -2877,8 +2877,8 @@
 				 sizeof(req), true);
 }
 
-int bersa_mcu_set_pulse_th(struct bersa_dev *dev,
-			    const struct bersa_dfs_pulse *pulse)
+int besra_mcu_set_pulse_th(struct besra_dev *dev,
+			    const struct besra_dfs_pulse *pulse)
 {
 	struct {
 		__le32 tag;
@@ -2908,8 +2908,8 @@
 				 sizeof(req), true);
 }
 
-int bersa_mcu_set_radar_th(struct bersa_dev *dev, int index,
-			    const struct bersa_dfs_pattern *pattern)
+int besra_mcu_set_radar_th(struct besra_dev *dev, int index,
+			    const struct besra_dfs_pattern *pattern)
 {
 	struct {
 		__le32 tag;
@@ -2961,15 +2961,15 @@
 }
 
 static int
-bersa_mcu_background_chain_ctrl(struct bersa_phy *phy,
+besra_mcu_background_chain_ctrl(struct besra_phy *phy,
 				 struct cfg80211_chan_def *chandef,
 				 int cmd)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	struct mt76_phy *mphy = phy->mt76;
 	struct ieee80211_channel *chan = mphy->chandef.chan;
 	int freq = mphy->chandef.center_freq1;
-	struct bersa_mcu_background_chain_ctrl req = {
+	struct besra_mcu_background_chain_ctrl req = {
 		.monitor_scan_type = 2, /* simple rx */
 	};
 
@@ -3015,23 +3015,23 @@
 				 &req, sizeof(req), false);
 }
 
-int bersa_mcu_rdd_background_enable(struct bersa_phy *phy,
+int besra_mcu_rdd_background_enable(struct besra_phy *phy,
 				     struct cfg80211_chan_def *chandef)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	int err, region;
 
 	if (!chandef) { /* disable offchain */
-		err = bersa_mcu_rdd_cmd(dev, RDD_STOP, MT_RX_SEL2,
+		err = besra_mcu_rdd_cmd(dev, RDD_STOP, MT_RX_SEL2,
 					0, 0);
 		if (err)
 			return err;
 
-		return bersa_mcu_background_chain_ctrl(phy, NULL,
+		return besra_mcu_background_chain_ctrl(phy, NULL,
 				CH_SWITCH_BACKGROUND_SCAN_STOP);
 	}
 
-	err = bersa_mcu_background_chain_ctrl(phy, chandef,
+	err = besra_mcu_background_chain_ctrl(phy, chandef,
 					       CH_SWITCH_BACKGROUND_SCAN_START);
 	if (err)
 		return err;
@@ -3049,21 +3049,21 @@
 		break;
 	}
 
-	return bersa_mcu_rdd_cmd(dev, RDD_START, MT_RX_SEL2,
+	return besra_mcu_rdd_cmd(dev, RDD_START, MT_RX_SEL2,
 				 0, region);
 }
 
-int bersa_mcu_set_chan_info(struct bersa_phy *phy, int tag)
+int besra_mcu_set_chan_info(struct besra_phy *phy, int tag)
 {
 	static const u8 ch_band[] = {
 		[NL80211_BAND_2GHZ] = 0,
 		[NL80211_BAND_5GHZ] = 1,
 		[NL80211_BAND_6GHZ] = 2,
 	};
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	struct cfg80211_chan_def *chandef = &phy->mt76->chandef;
 	int freq1 = chandef->center_freq1;
-	u8 phy_idx = bersa_get_phy_id(phy);
+	u8 phy_idx = besra_get_phy_id(phy);
 	u16 chainshift;
 	struct {
 		/* fixed field */
@@ -3143,16 +3143,16 @@
 				 &req, sizeof(req), true);
 }
 
-static int bersa_mcu_set_eeprom_flash(struct bersa_dev *dev)
+static int besra_mcu_set_eeprom_flash(struct besra_dev *dev)
 {
 #define MAX_PAGE_IDX_MASK	GENMASK(7, 5)
 #define PAGE_IDX_MASK		GENMASK(4, 2)
 #define PER_PAGE_SIZE		0x400
-	struct bersa_mcu_eeprom req = {
+	struct besra_mcu_eeprom req = {
 		.tag = cpu_to_le16(UNI_EFUSE_BUFFER_MODE),
 		.buffer_mode = EE_MODE_BUFFER
 	};
-	u16 eeprom_size = BERSA_EEPROM_SIZE;
+	u16 eeprom_size = BESRA_EEPROM_SIZE;
 	u8 total = DIV_ROUND_UP(eeprom_size, PER_PAGE_SIZE);
 	u8 *eep = (u8 *)dev->mt76.eeprom.data;
 	int eep_len, i;
@@ -3188,9 +3188,9 @@
 	return 0;
 }
 
-int bersa_mcu_set_eeprom(struct bersa_dev *dev)
+int besra_mcu_set_eeprom(struct besra_dev *dev)
 {
-	struct bersa_mcu_eeprom req = {
+	struct besra_mcu_eeprom req = {
 		.tag = cpu_to_le16(UNI_EFUSE_BUFFER_MODE),
 		.len = cpu_to_le16(sizeof(req) - 4),
 		.buffer_mode = EE_MODE_EFUSE,
@@ -3198,19 +3198,19 @@
 	};
 
 	if (dev->flash_mode)
-		return bersa_mcu_set_eeprom_flash(dev);
+		return besra_mcu_set_eeprom_flash(dev);
 
 	return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(EFUSE_CTRL),
 				 &req, sizeof(req), true);
 }
 
-int bersa_mcu_get_eeprom(struct bersa_dev *dev, u32 offset)
+int besra_mcu_get_eeprom(struct besra_dev *dev, u32 offset)
 {
-	struct bersa_mcu_eeprom_info req = {
+	struct besra_mcu_eeprom_info req = {
 		.addr = cpu_to_le32(round_down(offset,
-				    BERSA_EEPROM_BLOCK_SIZE)),
+				    BESRA_EEPROM_BLOCK_SIZE)),
 	};
-	struct bersa_mcu_eeprom_info *res;
+	struct besra_mcu_eeprom_info *res;
 	struct sk_buff *skb;
 	int ret;
 	u8 *buf;
@@ -3220,15 +3220,15 @@
 	if (ret)
 		return ret;
 
-	res = (struct bersa_mcu_eeprom_info *)skb->data;
+	res = (struct besra_mcu_eeprom_info *)skb->data;
 	buf = dev->mt76.eeprom.data + le32_to_cpu(res->addr);
-	memcpy(buf, res->data, BERSA_EEPROM_BLOCK_SIZE);
+	memcpy(buf, res->data, BESRA_EEPROM_BLOCK_SIZE);
 	dev_kfree_skb(skb);
 
 	return 0;
 }
 
-int bersa_mcu_get_eeprom_free_block(struct bersa_dev *dev, u8 *block_num)
+int besra_mcu_get_eeprom_free_block(struct besra_dev *dev, u8 *block_num)
 {
 	struct {
 		u8 _rsv;
@@ -3252,7 +3252,7 @@
 	return 0;
 }
 
-static int bersa_mcu_set_pre_cal(struct bersa_dev *dev, u8 idx,
+static int besra_mcu_set_pre_cal(struct besra_dev *dev, u8 idx,
 				  u8 *data, u32 len, int cmd)
 {
 	struct {
@@ -3280,7 +3280,7 @@
 	return mt76_mcu_skb_send_msg(&dev->mt76, skb, cmd, false);
 }
 
-int bersa_mcu_apply_group_cal(struct bersa_dev *dev)
+int besra_mcu_apply_group_cal(struct besra_dev *dev)
 {
 	u8 idx = 0, *cal = dev->cal, *eep = dev->mt76.eeprom.data;
 	u32 total = MT_EE_CAL_GROUP_SIZE;
@@ -3297,7 +3297,7 @@
 
 		len = min_t(u32, total, MT_EE_CAL_UNIT);
 
-		ret = bersa_mcu_set_pre_cal(dev, idx, cal, len,
+		ret = besra_mcu_set_pre_cal(dev, idx, cal, len,
 					     MCU_EXT_CMD(GROUP_PRE_CAL_INFO));
 		if (ret)
 			return ret;
@@ -3310,7 +3310,7 @@
 	return 0;
 }
 
-static int bersa_find_freq_idx(const u16 *freqs, int n_freqs, u16 cur)
+static int besra_find_freq_idx(const u16 *freqs, int n_freqs, u16 cur)
 {
 	int i;
 
@@ -3321,7 +3321,7 @@
 	return -1;
 }
 
-static int bersa_dpd_freq_idx(u16 freq, u8 bw)
+static int besra_dpd_freq_idx(u16 freq, u8 bw)
 {
 	static const u16 freq_list[] = {
 		5180, 5200, 5220, 5240,
@@ -3347,23 +3347,23 @@
 		return -1;
 
 	if (bw != NL80211_CHAN_WIDTH_20) {
-		idx = bersa_find_freq_idx(freq_list, ARRAY_SIZE(freq_list),
+		idx = besra_find_freq_idx(freq_list, ARRAY_SIZE(freq_list),
 					   freq + 10);
 		if (idx >= 0)
 			return idx;
 
-		idx = bersa_find_freq_idx(freq_list, ARRAY_SIZE(freq_list),
+		idx = besra_find_freq_idx(freq_list, ARRAY_SIZE(freq_list),
 					   freq - 10);
 		if (idx >= 0)
 			return idx;
 	}
 
-	return bersa_find_freq_idx(freq_list, ARRAY_SIZE(freq_list), freq);
+	return besra_find_freq_idx(freq_list, ARRAY_SIZE(freq_list), freq);
 }
 
-int bersa_mcu_apply_tx_dpd(struct bersa_phy *phy)
+int besra_mcu_apply_tx_dpd(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_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;
@@ -3372,7 +3372,7 @@
 	if (1 || !(eep[MT_EE_DO_PRE_CAL] & MT_EE_WIFI_CAL_DPD))
 		return 0;
 
-	idx = bersa_dpd_freq_idx(center_freq, chandef->width);
+	idx = besra_dpd_freq_idx(center_freq, chandef->width);
 	if (idx < 0)
 		return -EINVAL;
 
@@ -3384,7 +3384,7 @@
 		int ret;
 
 		cal += (idx * MT_EE_CAL_UNIT);
-		ret = bersa_mcu_set_pre_cal(dev, idx, cal, MT_EE_CAL_UNIT,
+		ret = besra_mcu_set_pre_cal(dev, idx, cal, MT_EE_CAL_UNIT,
 					     MCU_EXT_CMD(DPD_PRE_CAL_INFO));
 		if (ret)
 			return ret;
@@ -3395,7 +3395,7 @@
 	return 0;
 }
 
-int bersa_mcu_get_chan_mib_info(struct bersa_phy *phy, bool chan_switch)
+int besra_mcu_get_chan_mib_info(struct besra_phy *phy, bool chan_switch)
 {
 	struct {
 		struct {
@@ -3417,8 +3417,8 @@
 	};
 	struct mt76_channel_state *state = phy->mt76->chan_state;
 	struct mt76_channel_state *state_ts = &phy->state_ts;
-	struct bersa_dev *dev = phy->dev;
-	struct bersa_mcu_mib *res;
+	struct besra_dev *dev = phy->dev;
+	struct besra_mcu_mib *res;
 	struct sk_buff *skb;
 	int i, ret;
 
@@ -3435,7 +3435,7 @@
 
 	skb_pull(skb, sizeof(req.hdr));
 
-	res = (struct bersa_mcu_mib *)(skb->data);
+	res = (struct besra_mcu_mib *)(skb->data);
 
 	if (chan_switch)
 		goto out;
@@ -3458,9 +3458,9 @@
 	return 0;
 }
 
-int bersa_mcu_get_temperature(struct bersa_phy *phy)
+int besra_mcu_get_temperature(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	struct {
 		u8 ctrl_id;
 		u8 action;
@@ -3475,11 +3475,11 @@
 				 sizeof(req), true);
 }
 
-int bersa_mcu_set_thermal_throttling(struct bersa_phy *phy, u8 state)
+int besra_mcu_set_thermal_throttling(struct besra_phy *phy, u8 state)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	struct {
-		struct bersa_mcu_thermal_ctrl ctrl;
+		struct besra_mcu_thermal_ctrl ctrl;
 
 		__le32 trigger_temp;
 		__le32 restore_temp;
@@ -3528,16 +3528,16 @@
 }
 
 #if 0
-int bersa_mcu_set_txpower_sku(struct bersa_phy *phy)
+int besra_mcu_set_txpower_sku(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	struct mt76_phy *mphy = phy->mt76;
 	struct ieee80211_hw *hw = mphy->hw;
-	struct bersa_sku_val {
+	struct besra_sku_val {
 		u8 format_id;
 		u8 limit_type;
 		u8 band;
-		s8 val[BERSA_SKU_RATE_NUM];
+		s8 val[BESRA_SKU_RATE_NUM];
 	} __packed req = {
 		.format_id = 4,
 		.band = phy->band_idx,
@@ -3554,8 +3554,8 @@
 					      &limits_array, tx_power);
 	mphy->txpower_cur = tx_power;
 
-	for (i = 0, idx = 0; i < ARRAY_SIZE(bersa_sku_group_len); i++) {
-		u8 mcs_num, len = bersa_sku_group_len[i];
+	for (i = 0, idx = 0; i < ARRAY_SIZE(besra_sku_group_len); i++) {
+		u8 mcs_num, len = besra_sku_group_len[i];
 		int j;
 
 		if (i >= SKU_HT_BW20 && i <= SKU_VHT_BW160) {
@@ -3580,10 +3580,10 @@
 }
 #endif
 
-int bersa_mcu_get_txpower_sku(struct bersa_phy *phy, s8 *txpower, int len)
+int besra_mcu_get_txpower_sku(struct besra_phy *phy, s8 *txpower, int len)
 {
 #define RATE_POWER_INFO	2
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	struct {
 		u8 _rsv[4];
 
@@ -3601,7 +3601,7 @@
 		.category = RATE_POWER_INFO,
 		.band = phy->band_idx,
 	};
-	s8 res[BERSA_SKU_RATE_NUM][3];
+	s8 res[BESRA_SKU_RATE_NUM][3];
 	struct sk_buff *skb;
 	int ret, i;
 
@@ -3621,7 +3621,7 @@
 	return 0;
 }
 
-int bersa_mcu_set_test_param(struct bersa_dev *dev, u8 param, bool test_mode,
+int besra_mcu_set_test_param(struct besra_dev *dev, u8 param, bool test_mode,
 			      u8 en)
 {
 	struct {
@@ -3643,10 +3643,10 @@
 				 sizeof(req), false);
 }
 
-int bersa_mcu_set_sku_en(struct bersa_phy *phy, bool enable)
+int besra_mcu_set_sku_en(struct besra_phy *phy, bool enable)
 {
-	struct bersa_dev *dev = phy->dev;
-	struct bersa_sku {
+	struct besra_dev *dev = phy->dev;
+	struct besra_sku {
 		u8 format_id;
 		u8 sku_enable;
 		u8 band;
@@ -3662,7 +3662,7 @@
 				 sizeof(req), true);
 }
 
-int bersa_mcu_set_ser(struct bersa_dev *dev, u8 action, u8 set, u8 band)
+int besra_mcu_set_ser(struct besra_dev *dev, u8 action, u8 set, u8 band)
 {
 	struct {
 		u8 action;
@@ -3679,7 +3679,7 @@
 				 &req, sizeof(req), false);
 }
 
-int bersa_mcu_set_txbf(struct bersa_dev *dev, u8 action)
+int besra_mcu_set_txbf(struct besra_dev *dev, u8 action)
 {
 	struct {
 		u8 action;
@@ -3728,11 +3728,11 @@
 				 sizeof(req), true);
 }
 
-int bersa_mcu_add_obss_spr(struct bersa_dev *dev, struct ieee80211_vif *vif,
+int besra_mcu_add_obss_spr(struct besra_dev *dev, struct ieee80211_vif *vif,
 			    bool enable)
 {
 #define MT_SPR_ENABLE		1
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 	struct {
 		u8 action;
 		u8 arg_num;
@@ -3753,12 +3753,12 @@
 				 sizeof(req), true);
 }
 
-int bersa_mcu_get_rx_rate(struct bersa_phy *phy, struct ieee80211_vif *vif,
+int besra_mcu_get_rx_rate(struct besra_phy *phy, struct ieee80211_vif *vif,
 			   struct ieee80211_sta *sta, struct rate_info *rate)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_sta *msta = (struct bersa_sta *)sta->drv_priv;
-	struct bersa_dev *dev = phy->dev;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_sta *msta = (struct besra_sta *)sta->drv_priv;
+	struct besra_dev *dev = phy->dev;
 	struct mt76_phy *mphy = phy->mt76;
 	struct {
 		u8 category;
@@ -3770,7 +3770,7 @@
 		.wcid = cpu_to_le16(msta->wcid.idx),
 	};
 	struct ieee80211_supported_band *sband;
-	struct bersa_mcu_phy_rx_info *res;
+	struct besra_mcu_phy_rx_info *res;
 	struct sk_buff *skb;
 	int ret;
 	bool cck = false;
@@ -3780,7 +3780,7 @@
 	if (ret)
 		return ret;
 
-	res = (struct bersa_mcu_phy_rx_info *)skb->data;
+	res = (struct besra_mcu_phy_rx_info *)skb->data;
 
 	rate->mcs = res->rate;
 	rate->nss = res->nsts + 1;
@@ -3858,16 +3858,16 @@
 	return ret;
 }
 
-int bersa_mcu_update_bss_color(struct bersa_dev *dev, struct ieee80211_vif *vif,
+int besra_mcu_update_bss_color(struct besra_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 bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
 	struct bss_color_tlv *bss_color;
 	struct sk_buff *skb;
 	struct tlv *tlv;
 
-	skb = __bersa_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76, len);
+	skb = __besra_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76, len);
 	if (IS_ERR(skb))
 		return PTR_ERR(skb);
 
@@ -3885,9 +3885,9 @@
 #define TWT_AGRT_ANNOUNCE	BIT(1)
 #define TWT_AGRT_PROTECT	BIT(2)
 
-int bersa_mcu_twt_agrt_update(struct bersa_dev *dev,
-			       struct bersa_vif *mvif,
-			       struct bersa_twt_flow *flow,
+int besra_mcu_twt_agrt_update(struct besra_dev *dev,
+			       struct besra_vif *mvif,
+			       struct besra_twt_flow *flow,
 			       int cmd)
 {
 	struct {
@@ -3932,25 +3932,25 @@
 }
 
 
-void bersa_mcu_set_pm(void *priv, u8 *mac, struct ieee80211_vif *vif)
+void besra_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 bersa_dev *dev = bersa_hw_dev(hw);
-	struct bersa_phy *phy = bersa_hw_phy(hw);
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
+	struct besra_dev *dev = besra_hw_dev(hw);
+	struct besra_phy *phy = besra_hw_phy(hw);
+	struct besra_vif *mvif = (struct besra_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 = __bersa_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
-					BERSA_BSS_UPDATE_MAX_SIZE);
+	skb = __besra_mcu_alloc_bss_req(&dev->mt76, &mvif->mt76,
+					BESRA_BSS_UPDATE_MAX_SIZE);
 	if (IS_ERR(skb))
 		return;
 
-	tlv = bersa_mcu_add_uni_tlv(skb, UNI_BSS_INFO_PS, sizeof(*ps));
+	tlv = besra_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;
 
@@ -3958,7 +3958,7 @@
 			      MCU_WMWA_UNI_CMD(BSS_INFO_UPDATE), true);
 }
 
-int bersa_mcu_set_rts_thresh(struct bersa_phy *phy, u32 val)
+int besra_mcu_set_rts_thresh(struct besra_phy *phy, u32 val)
 {
 	struct {
 		u8 band_idx;
@@ -3980,7 +3980,7 @@
 				 &req, sizeof(req), true);
 }
 
-int bersa_mcu_set_radio_en(struct bersa_phy *phy, bool enable)
+int besra_mcu_set_radio_en(struct besra_phy *phy, bool enable)
 {
 	struct {
 		u8 band_idx;
@@ -4001,7 +4001,7 @@
 				 &req, sizeof(req), true);
 }
 
-int bersa_mcu_set_edcca_thresh(struct bersa_phy *phy)
+int besra_mcu_set_edcca_thresh(struct besra_phy *phy)
 {
 	struct {
 		u8 band_idx;
@@ -4023,7 +4023,7 @@
 				 &req, sizeof(req), true);
 }
 
-int bersa_mcu_set_edcca_en(struct bersa_phy *phy, bool enable)
+int besra_mcu_set_edcca_en(struct besra_phy *phy, bool enable)
 {
 	struct {
 		u8 band_idx;
@@ -4044,7 +4044,7 @@
 				 &req, sizeof(req), true);
 }
 
-int bersa_mcu_rdd_cmd(struct bersa_dev *dev, int cmd, u8 index,
+int besra_mcu_rdd_cmd(struct besra_dev *dev, int cmd, u8 index,
 		      u8 rx_sel, u8 val)
 {
 	struct {
@@ -4076,14 +4076,14 @@
 }
 
 
-int bersa_mcu_wtbl_update_hdr_trans(struct bersa_dev *dev,
+int besra_mcu_wtbl_update_hdr_trans(struct besra_dev *dev,
 			struct ieee80211_vif *vif, struct ieee80211_sta *sta)
 {
-	struct bersa_vif *mvif = (struct bersa_vif *)vif->drv_priv;
-	struct bersa_sta *msta;
+	struct besra_vif *mvif = (struct besra_vif *)vif->drv_priv;
+	struct besra_sta *msta;
 	struct sk_buff *skb;
 
-	msta = sta ? (struct bersa_sta *)sta->drv_priv : &mvif->sta;
+	msta = sta ? (struct besra_sta *)sta->drv_priv : &mvif->sta;
 
 	skb = mt76_connac_mcu_alloc_sta_req(&dev->mt76, &mvif->mt76,
 					    &msta->wcid);
@@ -4091,12 +4091,12 @@
 		return PTR_ERR(skb);
 
 	/* starec hdr trans */
-	bersa_mcu_sta_hdr_trans_tlv(dev, skb, vif, sta);
+	besra_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 bersa_mcu_rf_regval(struct bersa_dev *dev, u32 regidx, u32 *val, bool set)
+int besra_mcu_rf_regval(struct besra_dev *dev, u32 regidx, u32 *val, bool set)
 {
 	struct {
 		__le32 idx;
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mcu.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mcu.h
similarity index 92%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mcu.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mcu.h
index c3bd8af..11ce801 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mcu.h
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mcu.h
@@ -1,12 +1,12 @@
 /* SPDX-License-Identifier: ISC */
 /* Copyright (C) 2020 MediaTek Inc. */
 
-#ifndef __BERSA_MCU_H
-#define __BERSA_MCU_H
+#ifndef __BESRA_MCU_H
+#define __BESRA_MCU_H
 
 #include "../mt76_connac_mcu.h"
 
-struct bersa_mcu_txd {
+struct besra_mcu_txd {
 	__le32 txd[8];
 
 	__le16 len;
@@ -26,7 +26,7 @@
 } __packed __aligned(4);
 
 /**
- * struct bersa_uni_txd - mcu command descriptor for firmware v3
+ * struct besra_uni_txd - mcu command descriptor for firmware v3
  * @txd: hardware descriptor
  * @len: total length not including txd
  * @cid: command identifier
@@ -54,7 +54,7 @@
  *          0: QUERY command
  *          1: SET command
  */
-struct bersa_uni_txd {
+struct besra_uni_txd {
 	__le32 txd[8];
 
 	/* DW1 */
@@ -83,7 +83,7 @@
 	MCU_ATE_CLEAN_TXQUEUE = 0x1c,
 };
 
-struct bersa_mcu_rxd {
+struct besra_mcu_rxd {
 	__le32 rxd[8];
 
 	__le16 len;
@@ -99,13 +99,13 @@
 	u8 s2d_index;
 };
 
-struct bersa_mcu_uni_event {
+struct besra_mcu_uni_event {
 	u8 cid;
 	u8 __rsv[3];
 	__le32 status; /* 0: success, others: fail */
 } __packed;
 
-struct bersa_mcu_thermal_ctrl {
+struct besra_mcu_thermal_ctrl {
 	u8 ctrl_id;
 	u8 band_idx;
 	union {
@@ -120,16 +120,16 @@
 	};
 } __packed;
 
-struct bersa_mcu_thermal_notify {
-	struct bersa_mcu_rxd rxd;
+struct besra_mcu_thermal_notify {
+	struct besra_mcu_rxd rxd;
 
-	struct bersa_mcu_thermal_ctrl ctrl;
+	struct besra_mcu_thermal_ctrl ctrl;
 	__le32 temperature;
 	u8 rsv[8];
 } __packed;
 
-struct bersa_mcu_csa_notify {
-	struct bersa_mcu_rxd rxd;
+struct besra_mcu_csa_notify {
+	struct besra_mcu_rxd rxd;
 
 	u8 omac_idx;
 	u8 csa_count;
@@ -137,8 +137,8 @@
 	u8 rsv;
 } __packed;
 
-struct bersa_mcu_rdd_report {
-	struct bersa_mcu_rxd rxd;
+struct besra_mcu_rdd_report {
+	struct besra_mcu_rxd rxd;
 
 	u8 band_idx;
 	u8 long_detected;
@@ -189,7 +189,7 @@
 	} hw_pulse[32];
 } __packed;
 
-struct bersa_mcu_background_chain_ctrl {
+struct besra_mcu_background_chain_ctrl {
 	u8 chan;		/* primary channel */
 	u8 central_chan;	/* central channel */
 	u8 bw;
@@ -212,7 +212,7 @@
 	u8 rsv[2];
 } __packed;
 
-struct bersa_mcu_eeprom {
+struct besra_mcu_eeprom {
 	u8 _rsv[4];
 
 	__le16 tag;
@@ -222,13 +222,13 @@
 	__le16 buf_len;
 } __packed;
 
-struct bersa_mcu_eeprom_info {
+struct besra_mcu_eeprom_info {
 	__le32 addr;
 	__le32 valid;
 	u8 data[16];
 } __packed;
 
-struct bersa_mcu_phy_rx_info {
+struct besra_mcu_phy_rx_info {
 	u8 category;
 	u8 rate;
 	u8 mode;
@@ -239,15 +239,15 @@
 	u8 bw;
 };
 
-struct bersa_mcu_mib {
+struct besra_mcu_mib {
 	__le16 tag;
 	__le16 len;
 	__le32 offs;
 	__le64 data;
 } __packed;
 
-enum bersa_chan_mib_offs {
-	/* bersa */
+enum besra_chan_mib_offs {
+	/* besra */
 	MIB_BUSY_TIME = 0,
 	MIB_TX_TIME = 6,
 	MIB_RX_TIME = 8,
@@ -267,7 +267,7 @@
 	u8 __rsv;
 };
 
-struct bersa_mcu_muru_stats {
+struct besra_mcu_muru_stats {
 	__le32 event_id;
 	struct {
 		__le32 cck_cnt;
@@ -484,7 +484,7 @@
 	__le16 type;
 } __packed;
 
-#define BERSA_HDR_TRANS_MAX_SIZE	(sizeof(struct hdr_trans_en) + \
+#define BESRA_HDR_TRANS_MAX_SIZE	(sizeof(struct hdr_trans_en) + \
 					 sizeof(struct hdr_trans_vlan) + \
 					 sizeof(struct hdr_trans_blacklist))
 
@@ -561,7 +561,7 @@
 	UNI_CHANNEL_SWITCH,
 	UNI_CHANNEL_RX_PATH,
 };
-#define BERSA_BSS_UPDATE_MAX_SIZE	(sizeof(struct bss_req_hdr) +	\
+#define BESRA_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) + \
@@ -572,7 +572,7 @@
 					 sizeof(struct bss_sec_tlv) +\
 					 sizeof(struct bss_mld_tlv))
 
-#define BERSA_BEACON_UPDATE_SIZE	(sizeof(struct bss_req_hdr) +	\
+#define BESRA_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))
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mmio.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mmio.c
similarity index 75%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mmio.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mmio.c
index 4cb92e6..dbcc78c 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/mmio.c
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/mmio.c
@@ -6,7 +6,7 @@
 #include <linux/platform_device.h>
 #include <linux/pci.h>
 
-#include "bersa.h"
+#include "besra.h"
 #include "mac.h"
 #include "../trace.h"
 
@@ -75,24 +75,24 @@
 };
 
 enum {
-	BERSA_REG_RR = 0x0,
-	BERSA_REG_WR,
-	BERSA_REG_RMW,
-	__BERSA_REG_OPS_MAX,
+	BESRA_REG_RR = 0x0,
+	BESRA_REG_WR,
+	BESRA_REG_RMW,
+	__BESRA_REG_OPS_MAX,
 };
 
-static u32 bersa_reg_wr(struct bersa_dev *dev, u32 addr, u32 mask, u32 val, u8 wr)
+static u32 besra_reg_wr(struct besra_dev *dev, u32 addr, u32 mask, u32 val, u8 wr)
 {
 	u32 ret = 0;
 
 	switch (wr) {
-	case BERSA_REG_RR:
+	case BESRA_REG_RR:
 		ret = dev->bus_ops->rr(&dev->mt76, addr);
 		break;
-	case BERSA_REG_WR:
+	case BESRA_REG_WR:
 		dev->bus_ops->wr(&dev->mt76, addr, val);
 		break;
-	case BERSA_REG_RMW:
+	case BESRA_REG_RMW:
 		ret = dev->bus_ops->rmw(&dev->mt76, addr, mask, val);
 		break;
 	default:
@@ -102,7 +102,7 @@
 	return ret;
 }
 
-static u32 bersa_reg_map_l1(struct bersa_dev *dev, u32 addr, u32 mask, u32 val, u8 wr)
+static u32 besra_reg_map_l1(struct besra_dev *dev, u32 addr, u32 mask, u32 val, u8 wr)
 {
 	u32 offset = FIELD_GET(MT_HIF_REMAP_L1_OFFSET, addr);
 	u32 base = FIELD_GET(MT_HIF_REMAP_L1_BASE, addr);
@@ -115,7 +115,7 @@
 	/* use read to push write */
 	dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L1);
 
-	ret = bersa_reg_wr(dev, MT_HIF_REMAP_BASE_L1 + offset, mask, val, wr);
+	ret = besra_reg_wr(dev, MT_HIF_REMAP_BASE_L1 + offset, mask, val, wr);
 
 	/* remap to ori status */
 	dev->bus_ops->wr(&dev->mt76, MT_HIF_REMAP_L1, backup);
@@ -123,7 +123,7 @@
 	return ret;
 }
 
-static u32 bersa_reg_map_l2(struct bersa_dev *dev, u32 addr, u32 mask, u32 val, u8 wr)
+static u32 besra_reg_map_l2(struct besra_dev *dev, u32 addr, u32 mask, u32 val, u8 wr)
 {
 	u32 offset = FIELD_GET(MT_HIF_REMAP_L2_OFFSET, addr);
 	u32 base = FIELD_GET(MT_HIF_REMAP_L2_BASE, addr);
@@ -137,7 +137,7 @@
 	/* use read to push write */
 	dev->bus_ops->rr(&dev->mt76, MT_HIF_REMAP_L2);
 
-	ret = bersa_reg_wr(dev, MT_HIF_REMAP_BASE_L2 + offset, mask, val, wr);
+	ret = besra_reg_wr(dev, MT_HIF_REMAP_BASE_L2 + offset, mask, val, wr);
 
 	/* remap to ori status */
 	dev->bus_ops->wr(&dev->mt76, MT_HIF_REMAP_L2, backup);
@@ -145,12 +145,12 @@
 	return ret;
 }
 
-static u32 __bersa_reg_addr(struct bersa_dev *dev, u32 addr, u32 mask, u32 val, u8 wr)
+static u32 __besra_reg_addr(struct besra_dev *dev, u32 addr, u32 mask, u32 val, u8 wr)
 {
 	int i;
 
 	if (addr < 0x100000)
-		return bersa_reg_wr(dev, addr, mask, val, wr);
+		return besra_reg_wr(dev, addr, mask, val, wr);
 
 	for (i = 0; i < dev->reg.map_size; i++) {
 		u32 ofs;
@@ -164,57 +164,57 @@
 
 		addr = dev->reg.map[i].mapped + ofs;
 
-		return bersa_reg_wr(dev, addr, mask, val, wr);
+		return besra_reg_wr(dev, addr, mask, val, wr);
 	}
 
 	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 bersa_reg_map_l1(dev, addr, mask, val, wr);
+		return besra_reg_map_l1(dev, addr, mask, val, wr);
 
 	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 bersa_reg_map_l1(dev, addr, mask, val, wr);
+		return besra_reg_map_l1(dev, addr, mask, val, wr);
 
 	/* 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 bersa_reg_map_l1(dev, addr, mask, val, wr);
+		return besra_reg_map_l1(dev, addr, mask, val, wr);
 	}
 
-	return bersa_reg_map_l2(dev, addr, mask, val, wr);
+	return besra_reg_map_l2(dev, addr, mask, val, wr);
 }
 
-static u32 bersa_rr(struct mt76_dev *mdev, u32 offset)
+static u32 besra_rr(struct mt76_dev *mdev, u32 offset)
 {
-	struct bersa_dev *dev = container_of(mdev, struct bersa_dev, mt76);
+	struct besra_dev *dev = container_of(mdev, struct besra_dev, mt76);
 
-	return __bersa_reg_addr(dev, offset, 0, 0, BERSA_REG_RR);
+	return __besra_reg_addr(dev, offset, 0, 0, BESRA_REG_RR);
 }
 
-static void bersa_wr(struct mt76_dev *mdev, u32 offset, u32 val)
+static void besra_wr(struct mt76_dev *mdev, u32 offset, u32 val)
 {
-	struct bersa_dev *dev = container_of(mdev, struct bersa_dev, mt76);
+	struct besra_dev *dev = container_of(mdev, struct besra_dev, mt76);
 
-	__bersa_reg_addr(dev, offset, 0, val, BERSA_REG_WR);
+	__besra_reg_addr(dev, offset, 0, val, BESRA_REG_WR);
 }
 
-static u32 bersa_rmw(struct mt76_dev *mdev, u32 offset, u32 mask, u32 val)
+static u32 besra_rmw(struct mt76_dev *mdev, u32 offset, u32 mask, u32 val)
 {
-	struct bersa_dev *dev = container_of(mdev, struct bersa_dev, mt76);
+	struct besra_dev *dev = container_of(mdev, struct besra_dev, mt76);
 
-	return __bersa_reg_addr(dev, offset, mask, val, BERSA_REG_RMW);
+	return __besra_reg_addr(dev, offset, mask, val, BESRA_REG_RMW);
 }
 
-static int bersa_mmio_init(struct mt76_dev *mdev,
+static int besra_mmio_init(struct mt76_dev *mdev,
 			    void __iomem *mem_base,
 			    u32 device_id)
 {
 	struct mt76_bus_ops *bus_ops;
-	struct bersa_dev *dev;
+	struct besra_dev *dev;
 
-	dev = container_of(mdev, struct bersa_dev, mt76);
+	dev = container_of(mdev, struct besra_dev, mt76);
 	mt76_mmio_init(&dev->mt76, mem_base);
 
 	switch (device_id) {
@@ -233,9 +233,9 @@
 	if (!bus_ops)
 		return -ENOMEM;
 
-	bus_ops->rr = bersa_rr;
-	bus_ops->wr = bersa_wr;
-	bus_ops->rmw = bersa_rmw;
+	bus_ops->rr = besra_rr;
+	bus_ops->wr = besra_wr;
+	bus_ops->rmw = besra_rmw;
 	dev->mt76.bus = bus_ops;
 
 	mdev->rev = (device_id << 16) |
@@ -245,7 +245,7 @@
 	return 0;
 }
 
-void bersa_dual_hif_set_irq_mask(struct bersa_dev *dev,
+void besra_dual_hif_set_irq_mask(struct besra_dev *dev,
 				  bool write_reg,
 				  u32 clear, u32 set)
 {
@@ -265,18 +265,18 @@
 	spin_unlock_irqrestore(&mdev->mmio.irq_lock, flags);
 }
 
-static void bersa_rx_poll_complete(struct mt76_dev *mdev,
+static void besra_rx_poll_complete(struct mt76_dev *mdev,
 				    enum mt76_rxq_id q)
 {
-	struct bersa_dev *dev = container_of(mdev, struct bersa_dev, mt76);
+	struct besra_dev *dev = container_of(mdev, struct besra_dev, mt76);
 
-	bersa_irq_enable(dev, MT_INT_RX(q));
+	besra_irq_enable(dev, MT_INT_RX(q));
 }
 
 /* TODO: support 2/4/6/8 MSI-X vectors */
-static void bersa_irq_tasklet(struct tasklet_struct *t)
+static void besra_irq_tasklet(struct tasklet_struct *t)
 {
-	struct bersa_dev *dev = from_tasklet(dev, t, irq_tasklet);
+	struct besra_dev *dev = from_tasklet(dev, t, irq_tasklet);
 	u32 intr, intr1, mask;
 
 	mt76_wr(dev, MT_INT_MASK_CSR, 0);
@@ -301,7 +301,7 @@
 	if (intr & MT_INT_TX_DONE_MCU)
 		mask |= MT_INT_TX_DONE_MCU;
 
-	bersa_irq_disable(dev, mask);
+	besra_irq_disable(dev, mask);
 
 	if (intr & MT_INT_TX_DONE_MCU)
 		napi_schedule(&dev->mt76.tx_napi);
@@ -342,9 +342,9 @@
 	}
 }
 
-irqreturn_t bersa_irq_handler(int irq, void *dev_instance)
+irqreturn_t besra_irq_handler(int irq, void *dev_instance)
 {
-	struct bersa_dev *dev = dev_instance;
+	struct besra_dev *dev = dev_instance;
 
 	mt76_wr(dev, MT_INT_MASK_CSR, 0);
 	if (dev->hif2)
@@ -358,33 +358,33 @@
 	return IRQ_HANDLED;
 }
 
-struct bersa_dev *bersa_mmio_probe(struct device *pdev,
+struct besra_dev *besra_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 bersa_txp),
+		.txwi_size = MT_TXD_SIZE + sizeof(struct besra_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 = BERSA_TOKEN_SIZE,
-		.tx_prepare_skb = bersa_tx_prepare_skb,
-		.tx_complete_skb = bersa_tx_complete_skb,
-		.rx_skb = bersa_queue_rx_skb,
-		.rx_check = bersa_rx_check,
-		.rx_poll_complete = bersa_rx_poll_complete,
-		.sta_ps = bersa_sta_ps,
-		.sta_add = bersa_mac_sta_add,
-		.sta_remove = bersa_mac_sta_remove,
-		.update_survey = bersa_update_channel,
+		.token_size = BESRA_TOKEN_SIZE,
+		.tx_prepare_skb = besra_tx_prepare_skb,
+		.tx_complete_skb = besra_tx_complete_skb,
+		.rx_skb = besra_queue_rx_skb,
+		.rx_check = besra_rx_check,
+		.rx_poll_complete = besra_rx_poll_complete,
+		.sta_ps = besra_sta_ps,
+		.sta_add = besra_mac_sta_add,
+		.sta_remove = besra_mac_sta_remove,
+		.update_survey = besra_update_channel,
 	};
 	struct ieee80211_ops *ops;
-	struct bersa_dev *dev;
+	struct besra_dev *dev;
 	struct mt76_dev *mdev;
 	int ret;
 
-	ops = devm_kmemdup(pdev, &bersa_ops, sizeof(bersa_ops), GFP_KERNEL);
+	ops = devm_kmemdup(pdev, &besra_ops, sizeof(besra_ops), GFP_KERNEL);
 	if (!ops)
 		return ERR_PTR(-ENOMEM);
 
@@ -392,13 +392,13 @@
 	if (!mdev)
 		return ERR_PTR(-ENOMEM);
 
-	dev = container_of(mdev, struct bersa_dev, mt76);
+	dev = container_of(mdev, struct besra_dev, mt76);
 
-	ret = bersa_mmio_init(mdev, mem_base, device_id);
+	ret = besra_mmio_init(mdev, mem_base, device_id);
 	if (ret)
 		goto error;
 
-	tasklet_setup(&dev->irq_tasklet, bersa_irq_tasklet);
+	tasklet_setup(&dev->irq_tasklet, besra_irq_tasklet);
 
 	mt76_wr(dev, MT_INT_MASK_CSR, 0);
 
@@ -410,27 +410,27 @@
 	return ERR_PTR(ret);
 }
 
-static int __init bersa_init(void)
+static int __init besra_init(void)
 {
 	int ret;
 
-	ret = pci_register_driver(&bersa_hif_driver);
+	ret = pci_register_driver(&besra_hif_driver);
 	if (ret)
 		return ret;
 
-	ret = pci_register_driver(&bersa_pci_driver);
+	ret = pci_register_driver(&besra_pci_driver);
 	if (ret)
-		pci_unregister_driver(&bersa_hif_driver);
+		pci_unregister_driver(&besra_hif_driver);
 
 	return ret;
 }
 
-static void __exit bersa_exit(void)
+static void __exit besra_exit(void)
 {
-	pci_unregister_driver(&bersa_pci_driver);
-	pci_unregister_driver(&bersa_hif_driver);
+	pci_unregister_driver(&besra_pci_driver);
+	pci_unregister_driver(&besra_hif_driver);
 }
 
-module_init(bersa_init);
-module_exit(bersa_exit);
+module_init(besra_init);
+module_exit(besra_exit);
 MODULE_LICENSE("Dual BSD/GPL");
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/pci.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/pci.c
similarity index 67%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/pci.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/pci.c
index 6656ef5..90c8709 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/pci.c
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/pci.c
@@ -8,7 +8,7 @@
 #include <linux/module.h>
 #include <linux/pci.h>
 
-#include "bersa.h"
+#include "besra.h"
 #include "mac.h"
 #include "../trace.h"
 
@@ -16,18 +16,18 @@
 static DEFINE_SPINLOCK(hif_lock);
 static u32 hif_idx;
 
-static const struct pci_device_id bersa_pci_device_table[] = {
+static const struct pci_device_id besra_pci_device_table[] = {
 	{ PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7902) }, //bellwether
 	{ },
 };
 
-static const struct pci_device_id bersa_hif_device_table[] = {
+static const struct pci_device_id besra_hif_device_table[] = {
 	{ },
 };
 
-static struct bersa_hif *bersa_pci_get_hif2(u32 idx)
+static struct besra_hif *besra_pci_get_hif2(u32 idx)
 {
-	struct bersa_hif *hif;
+	struct besra_hif *hif;
 	u32 val;
 
 	spin_lock_bh(&hif_lock);
@@ -49,7 +49,7 @@
 	return hif;
 }
 
-static void bersa_put_hif2(struct bersa_hif *hif)
+static void besra_put_hif2(struct besra_hif *hif)
 {
 	if (!hif)
 		return;
@@ -57,7 +57,7 @@
 	put_device(hif->dev);
 }
 
-static struct bersa_hif *bersa_pci_init_hif2(struct pci_dev *pdev)
+static struct besra_hif *besra_pci_init_hif2(struct pci_dev *pdev)
 {
 	hif_idx++;
 	if (!pci_get_device(PCI_VENDOR_ID_MEDIATEK, 0x7916, NULL) &&
@@ -67,12 +67,12 @@
 	writel(hif_idx | MT_PCIE_RECOG_ID_SEM,
 	       pcim_iomap_table(pdev)[0] + MT_PCIE_RECOG_ID);
 
-	return bersa_pci_get_hif2(hif_idx);
+	return besra_pci_get_hif2(hif_idx);
 }
 
-static int bersa_pci_hif2_probe(struct pci_dev *pdev)
+static int besra_pci_hif2_probe(struct pci_dev *pdev)
 {
-	struct bersa_hif *hif;
+	struct besra_hif *hif;
 
 	hif = devm_kzalloc(&pdev->dev, sizeof(*hif), GFP_KERNEL);
 	if (!hif)
@@ -89,12 +89,12 @@
 	return 0;
 }
 
-static int bersa_pci_probe(struct pci_dev *pdev,
+static int besra_pci_probe(struct pci_dev *pdev,
 			    const struct pci_device_id *id)
 {
-	struct bersa_dev *dev;
+	struct besra_dev *dev;
 	struct mt76_dev *mdev;
-	struct bersa_hif *hif2;
+	struct besra_hif *hif2;
 	int irq;
 	int ret;
 
@@ -115,23 +115,23 @@
 	mt76_pci_disable_aspm(pdev);
 
 	if (id->device == 0x790a)
-		return bersa_pci_hif2_probe(pdev);
+		return besra_pci_hif2_probe(pdev);
 
-	dev = bersa_mmio_probe(&pdev->dev, pcim_iomap_table(pdev)[0],
+	dev = besra_mmio_probe(&pdev->dev, pcim_iomap_table(pdev)[0],
 				id->device);
 	if (IS_ERR(dev))
 		return PTR_ERR(dev);
 
 	mdev = &dev->mt76;
-	bersa_wfsys_reset(dev);
-	hif2 = bersa_pci_init_hif2(pdev);
+	besra_wfsys_reset(dev);
+	hif2 = besra_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, bersa_irq_handler,
+	ret = devm_request_irq(mdev->dev, irq, besra_irq_handler,
 			       IRQF_SHARED, KBUILD_MODNAME, dev);
 	if (ret)
 		goto free_irq_vector;
@@ -149,13 +149,13 @@
 		mt76_wr(dev, MT_PCIE1_MAC_INT_ENABLE, 0xff);
 
 		ret = devm_request_irq(mdev->dev, dev->hif2->irq,
-				       bersa_irq_handler, IRQF_SHARED,
+				       besra_irq_handler, IRQF_SHARED,
 				       KBUILD_MODNAME "-hif", dev);
 		if (ret)
 			goto free_hif2;
 	}
 
-	ret = bersa_register_device(dev);
+	ret = besra_register_device(dev);
 	if (ret)
 		goto free_hif2_irq;
 
@@ -176,40 +176,40 @@
 	return ret;
 }
 
-static void bersa_hif_remove(struct pci_dev *pdev)
+static void besra_hif_remove(struct pci_dev *pdev)
 {
-	struct bersa_hif *hif = pci_get_drvdata(pdev);
+	struct besra_hif *hif = pci_get_drvdata(pdev);
 
 	list_del(&hif->list);
 }
 
-static void bersa_pci_remove(struct pci_dev *pdev)
+static void besra_pci_remove(struct pci_dev *pdev)
 {
 	struct mt76_dev *mdev;
-	struct bersa_dev *dev;
+	struct besra_dev *dev;
 
 	mdev = pci_get_drvdata(pdev);
-	dev = container_of(mdev, struct bersa_dev, mt76);
-	bersa_put_hif2(dev->hif2);
-	bersa_unregister_device(dev);
+	dev = container_of(mdev, struct besra_dev, mt76);
+	besra_put_hif2(dev->hif2);
+	besra_unregister_device(dev);
 }
 
-struct pci_driver bersa_hif_driver = {
+struct pci_driver besra_hif_driver = {
 	.name		= KBUILD_MODNAME "_hif",
-	.id_table	= bersa_hif_device_table,
-	.probe		= bersa_pci_probe,
-	.remove		= bersa_hif_remove,
+	.id_table	= besra_hif_device_table,
+	.probe		= besra_pci_probe,
+	.remove		= besra_hif_remove,
 };
 
-struct pci_driver bersa_pci_driver = {
+struct pci_driver besra_pci_driver = {
 	.name		= KBUILD_MODNAME,
-	.id_table	= bersa_pci_device_table,
-	.probe		= bersa_pci_probe,
-	.remove		= bersa_pci_remove,
+	.id_table	= besra_pci_device_table,
+	.probe		= besra_pci_probe,
+	.remove		= besra_pci_remove,
 };
 
-MODULE_DEVICE_TABLE(pci, bersa_pci_device_table);
-MODULE_DEVICE_TABLE(pci, bersa_hif_device_table);
+MODULE_DEVICE_TABLE(pci, besra_pci_device_table);
+MODULE_DEVICE_TABLE(pci, besra_hif_device_table);
 MODULE_FIRMWARE(MT7902_FIRMWARE_WA);
 MODULE_FIRMWARE(MT7902_FIRMWARE_WM);
 MODULE_FIRMWARE(MT7902_ROM_PATCH);
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/regs.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/regs.h
similarity index 99%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/regs.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/regs.h
index c3182e3..c7205ab 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/regs.h
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/regs.h
@@ -1,8 +1,8 @@
 /* SPDX-License-Identifier: ISC */
 /* Copyright (C) 2020 MediaTek Inc. */
 
-#ifndef __BERSA_REGS_H
-#define __BERSA_REGS_H
+#ifndef __BESRA_REGS_H
+#define __BESRA_REGS_H
 
 struct __map {
 	u32 phys;
@@ -15,7 +15,7 @@
 };
 
 /* used to differentiate between generations */
-struct bersa_reg_desc {
+struct besra_reg_desc {
 	const struct __base *base;
 	const struct __map *map;
 	u32 map_size;
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/testmode.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/testmode.c
similarity index 80%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/testmode.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/testmode.c
index 197a922..9c398f6 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/testmode.c
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/testmode.c
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: ISC
 /* Copyright (C) 2020 MediaTek Inc. */
 
-#include "bersa.h"
+#include "besra.h"
 #include "mac.h"
 #include "mcu.h"
 #include "testmode.h"
@@ -35,9 +35,9 @@
 
 
 static int
-bersa_tm_set_tx_power(struct bersa_phy *phy)
+besra_tm_set_tx_power(struct besra_phy *phy)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	struct mt76_phy *mphy = phy->mt76;
 	struct cfg80211_chan_def *chandef = &mphy->chandef;
 	int freq = chandef->center_freq1;
@@ -71,10 +71,10 @@
 }
 
 static int
-bersa_tm_set_freq_offset(struct bersa_phy *phy, bool en, u32 val)
+besra_tm_set_freq_offset(struct besra_phy *phy, bool en, u32 val)
 {
-	struct bersa_dev *dev = phy->dev;
-	struct bersa_tm_cmd req = {
+	struct besra_dev *dev = phy->dev;
+	struct besra_tm_cmd req = {
 		.testmode_en = en,
 		.param_idx = MCU_ATE_SET_FREQ_OFFSET,
 		.param.freq.band = phy->band_idx,
@@ -86,7 +86,7 @@
 }
 
 static int
-bersa_tm_mode_ctrl(struct bersa_dev *dev, bool enable)
+besra_tm_mode_ctrl(struct besra_dev *dev, bool enable)
 {
 	struct {
 		u8 format_id;
@@ -103,10 +103,10 @@
 }
 
 static int
-bersa_tm_set_trx(struct bersa_phy *phy, int type, bool en)
+besra_tm_set_trx(struct besra_phy *phy, int type, bool en)
 {
-	struct bersa_dev *dev = phy->dev;
-	struct bersa_tm_cmd req = {
+	struct besra_dev *dev = phy->dev;
+	struct besra_tm_cmd req = {
 		.testmode_en = 1,
 		.param_idx = MCU_ATE_SET_TRX,
 		.param.trx.type = type,
@@ -119,10 +119,10 @@
 }
 
 static int
-bersa_tm_clean_hwq(struct bersa_phy *phy, u8 wcid)
+besra_tm_clean_hwq(struct besra_phy *phy, u8 wcid)
 {
-	struct bersa_dev *dev = phy->dev;
-	struct bersa_tm_cmd req = {
+	struct besra_dev *dev = phy->dev;
+	struct besra_tm_cmd req = {
 		.testmode_en = 1,
 		.param_idx = MCU_ATE_CLEAN_TXQUEUE,
 		.param.clean.wcid = wcid,
@@ -134,10 +134,10 @@
 }
 
 static int
-bersa_tm_set_slot_time(struct bersa_phy *phy, u8 slot_time, u8 sifs)
+besra_tm_set_slot_time(struct besra_phy *phy, u8 slot_time, u8 sifs)
 {
-	struct bersa_dev *dev = phy->dev;
-	struct bersa_tm_cmd req = {
+	struct besra_dev *dev = phy->dev;
+	struct besra_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,
@@ -152,9 +152,9 @@
 }
 
 static int
-bersa_tm_set_tam_arb(struct bersa_phy *phy, bool enable, bool mu)
+besra_tm_set_tam_arb(struct besra_phy *phy, bool enable, bool mu)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	u32 op_mode;
 
 	if (!enable)
@@ -164,15 +164,15 @@
 	else
 		op_mode = TAM_ARB_OP_MODE_FORCE_SU;
 
-	return bersa_mcu_set_muru_ctrl(dev, MURU_SET_ARB_OP_MODE, op_mode);
+	return besra_mcu_set_muru_ctrl(dev, MURU_SET_ARB_OP_MODE, op_mode);
 }
 
 static int
-bersa_tm_set_wmm_qid(struct bersa_dev *dev, u8 qid, u8 aifs, u8 cw_min,
+besra_tm_set_wmm_qid(struct besra_dev *dev, u8 qid, u8 aifs, u8 cw_min,
 		      u16 cw_max, u16 txop)
 {
 #if 0
-	struct bersa_mcu_tx req = { .total = 1 };
+	struct besra_mcu_tx req = { .total = 1 };
 	struct edca *e = &req.edca[0];
 
 	e->queue = qid;
@@ -183,20 +183,20 @@
 	e->cw_max = cpu_to_le16(cw_max);
 	e->txop = cpu_to_le16(txop);
 
-	return bersa_mcu_update_edca(dev, &req);
+	return besra_mcu_update_edca(dev, &req);
 #endif
 	return 0;
 }
 
 static int
-bersa_tm_set_ipg_params(struct bersa_phy *phy, u32 ipg, u8 mode)
+besra_tm_set_ipg_params(struct besra_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 bersa_dev *dev = phy->dev;
+	struct besra_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;
@@ -245,15 +245,15 @@
 		 FIELD_PREP(MT_TMAC_TRCR0_TR2T_CHK, tr2t_time) |
 		 FIELD_PREP(MT_TMAC_TRCR0_I2T_CHK, i2t_time));
 
-	bersa_tm_set_slot_time(phy, slot_time, sifs);
+	besra_tm_set_slot_time(phy, slot_time, sifs);
 
-	return bersa_tm_set_wmm_qid(dev,
+	return besra_tm_set_wmm_qid(dev,
 				     mt76_connac_lmac_mapping(IEEE80211_AC_BE),
 				     aifsn, cw, cw, 0);
 }
 
 static int
-bersa_tm_set_tx_len(struct bersa_phy *phy, u32 tx_time)
+besra_tm_set_tx_len(struct besra_phy *phy, u32 tx_time)
 {
 	struct mt76_phy *mphy = phy->mt76;
 	struct mt76_testmode_data *td = &mphy->test;
@@ -333,10 +333,10 @@
 }
 
 static void
-bersa_tm_reg_backup_restore(struct bersa_phy *phy)
+besra_tm_reg_backup_restore(struct besra_phy *phy)
 {
 	int n_regs = ARRAY_SIZE(reg_backup_list);
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 	u32 *b = phy->test.reg_backup;
 	int i;
 
@@ -401,56 +401,56 @@
 }
 
 static void
-bersa_tm_init(struct bersa_phy *phy, bool en)
+besra_tm_init(struct besra_phy *phy, bool en)
 {
-	struct bersa_dev *dev = phy->dev;
+	struct besra_dev *dev = phy->dev;
 
 	if (!test_bit(MT76_STATE_RUNNING, &phy->mt76->state))
 		return;
 
 	/* TODO: need check */
-	/* bersa_mcu_set_sku_en(phy, !en); */
+	/* besra_mcu_set_sku_en(phy, !en); */
 
-	bersa_tm_mode_ctrl(dev, en);
-	bersa_tm_reg_backup_restore(phy);
-	bersa_tm_set_trx(phy, TM_MAC_TXRX, !en);
+	besra_tm_mode_ctrl(dev, en);
+	besra_tm_reg_backup_restore(phy);
+	besra_tm_set_trx(phy, TM_MAC_TXRX, !en);
 
-	bersa_mcu_add_bss_info(phy, phy->monitor_vif, en);
-	bersa_mcu_add_sta(dev, phy->monitor_vif, NULL, en);
+	besra_mcu_add_bss_info(phy, phy->monitor_vif, en);
+	besra_mcu_add_sta(dev, phy->monitor_vif, NULL, en);
 
 	if (!en)
-		bersa_tm_set_tam_arb(phy, en, 0);
+		besra_tm_set_tam_arb(phy, en, 0);
 }
 
 static void
-bersa_tm_update_channel(struct bersa_phy *phy)
+besra_tm_update_channel(struct besra_phy *phy)
 {
 	mutex_unlock(&phy->dev->mt76.mutex);
-	bersa_set_channel(phy);
+	besra_set_channel(phy);
 	mutex_lock(&phy->dev->mt76.mutex);
 
-	bersa_mcu_set_chan_info(phy, UNI_CHANNEL_RX_PATH);
+	besra_mcu_set_chan_info(phy, UNI_CHANNEL_RX_PATH);
 }
 
 static void
-bersa_tm_set_tx_frames(struct bersa_phy *phy, bool en)
+besra_tm_set_tx_frames(struct besra_phy *phy, bool en)
 {
 	static const u8 spe_idx_map[] = {0, 0, 1, 0, 3, 2, 4, 0,
 					 9, 8, 6, 10, 16, 12, 18, 0};
 	struct mt76_testmode_data *td = &phy->mt76->test;
-	struct bersa_dev *dev = phy->dev;
+	struct besra_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;
-	u8 phy_idx = bersa_get_phy_id(phy);
+	u8 phy_idx = besra_get_phy_id(phy);
 	u16 chainshift;
 
-	bersa_tm_set_trx(phy, TM_MAC_RX_RXV, false);
-	bersa_tm_clean_hwq(phy, dev->mt76.global_wcid.idx);
+	besra_tm_set_trx(phy, TM_MAC_RX_RXV, false);
+	besra_tm_clean_hwq(phy, dev->mt76.global_wcid.idx);
 
 	if (en) {
-		bersa_tm_update_channel(phy);
+		besra_tm_update_channel(phy);
 
 		if (td->tx_spe_idx) {
 			phy->test.spe_idx = td->tx_spe_idx;
@@ -469,7 +469,7 @@
 		}
 	}
 
-	bersa_tm_set_tam_arb(phy, en,
+	besra_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 */
@@ -480,8 +480,8 @@
 			tx_time = duty_cycle * ipg / (100 - duty_cycle);
 	}
 
-	bersa_tm_set_ipg_params(phy, ipg, td->tx_rate_mode);
-	bersa_tm_set_tx_len(phy, tx_time);
+	besra_tm_set_ipg_params(phy, ipg, td->tx_rate_mode);
+	besra_tm_set_tx_len(phy, tx_time);
 
 	if (ipg)
 		td->tx_queued_limit = MT76_TM_TIMEOUT * 1000000 / ipg / 2;
@@ -492,29 +492,29 @@
 	info = IEEE80211_SKB_CB(td->tx_skb);
 	info->control.vif = phy->monitor_vif;
 
-	bersa_tm_set_trx(phy, TM_MAC_TX, en);
+	besra_tm_set_trx(phy, TM_MAC_TX, en);
 }
 
 static void
-bersa_tm_set_rx_frames(struct bersa_phy *phy, bool en)
+besra_tm_set_rx_frames(struct besra_phy *phy, bool en)
 {
-	bersa_tm_set_trx(phy, TM_MAC_RX_RXV, false);
+	besra_tm_set_trx(phy, TM_MAC_RX_RXV, false);
 
 	if (en) {
-		struct bersa_dev *dev = phy->dev;
+		struct besra_dev *dev = phy->dev;
 
-		bersa_tm_update_channel(phy);
+		besra_tm_update_channel(phy);
 
 		/* read-clear */
 		mt76_rr(dev, MT_MIB_SDR3(phy->band_idx));
-		bersa_tm_set_trx(phy, TM_MAC_RX_RXV, en);
+		besra_tm_set_trx(phy, TM_MAC_RX_RXV, en);
 	}
 }
 
 static int
-bersa_tm_rf_switch_mode(struct bersa_dev *dev, u32 oper)
+besra_tm_rf_switch_mode(struct besra_dev *dev, u32 oper)
 {
-	struct bersa_tm_rf_test req = {
+	struct besra_tm_rf_test req = {
 		.op.op_mode = cpu_to_le32(oper),
 	};
 
@@ -523,18 +523,18 @@
 }
 
 static int
-bersa_tm_set_tx_cont(struct bersa_phy *phy, bool en)
+besra_tm_set_tx_cont(struct besra_phy *phy, bool en)
 {
 #define TX_CONT_START	0x05
 #define TX_CONT_STOP	0x06
-	struct bersa_dev *dev = phy->dev;
+	struct besra_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 bersa_tm_rf_test req = {
+	struct besra_tm_rf_test req = {
 		.action = 1,
 		.icap_len = 120,
 		.op.rf.func_idx = cpu_to_le32(func_idx),
@@ -637,49 +637,49 @@
 		if (ret)
 			return ret;
 
-		return bersa_tm_rf_switch_mode(dev, RF_OPER_NORMAL);
+		return besra_tm_rf_switch_mode(dev, RF_OPER_NORMAL);
 	}
 
-	bersa_tm_rf_switch_mode(dev, RF_OPER_RF_TEST);
-	bersa_tm_update_channel(phy);
+	besra_tm_rf_switch_mode(dev, RF_OPER_RF_TEST);
+	besra_tm_update_channel(phy);
 
 	return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(RF_TEST), &req,
 				 sizeof(req), true);
 }
 
 static void
-bersa_tm_update_params(struct bersa_phy *phy, u32 changed)
+besra_tm_update_params(struct besra_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))
-		bersa_tm_set_freq_offset(phy, en, en ? td->freq_offset : 0);
+		besra_tm_set_freq_offset(phy, en, en ? td->freq_offset : 0);
 	if (changed & BIT(TM_CHANGED_TXPOWER))
-		bersa_tm_set_tx_power(phy);
+		besra_tm_set_tx_power(phy);
 }
 
 static int
-bersa_tm_set_state(struct mt76_phy *mphy, enum mt76_testmode_state state)
+besra_tm_set_state(struct mt76_phy *mphy, enum mt76_testmode_state state)
 {
 	struct mt76_testmode_data *td = &mphy->test;
-	struct bersa_phy *phy = mphy->priv;
+	struct besra_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)
-		bersa_tm_set_tx_frames(phy, state == MT76_TM_STATE_TX_FRAMES);
+		besra_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)
-		bersa_tm_set_rx_frames(phy, state == MT76_TM_STATE_RX_FRAMES);
+		besra_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)
-		bersa_tm_set_tx_cont(phy, state == MT76_TM_STATE_TX_CONT);
+		besra_tm_set_tx_cont(phy, state == MT76_TM_STATE_TX_CONT);
 	else if (prev_state == MT76_TM_STATE_OFF ||
 		 state == MT76_TM_STATE_OFF)
-		bersa_tm_init(phy, !(state == MT76_TM_STATE_OFF));
+		besra_tm_init(phy, !(state == MT76_TM_STATE_OFF));
 
 	if ((state == MT76_TM_STATE_IDLE &&
 	     prev_state == MT76_TM_STATE_OFF) ||
@@ -695,18 +695,18 @@
 				changed |= BIT(i);
 		}
 
-		bersa_tm_update_params(phy, changed);
+		besra_tm_update_params(phy, changed);
 	}
 
 	return 0;
 }
 
 static int
-bersa_tm_set_params(struct mt76_phy *mphy, struct nlattr **tb,
+besra_tm_set_params(struct mt76_phy *mphy, struct nlattr **tb,
 		     enum mt76_testmode_state new_state)
 {
 	struct mt76_testmode_data *td = &mphy->test;
-	struct bersa_phy *phy = mphy->priv;
+	struct besra_phy *phy = mphy->priv;
 	u32 changed = 0;
 	int i;
 
@@ -724,16 +724,16 @@
 			changed |= BIT(i);
 	}
 
-	bersa_tm_update_params(phy, changed);
+	besra_tm_update_params(phy, changed);
 
 	return 0;
 }
 
 static int
-bersa_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
+besra_tm_dump_stats(struct mt76_phy *mphy, struct sk_buff *msg)
 {
-	struct bersa_phy *phy = mphy->priv;
-	struct bersa_dev *dev = phy->dev;
+	struct besra_phy *phy = mphy->priv;
+	struct besra_dev *dev = phy->dev;
 	enum mt76_rxq_id q;
 	void *rx, *rssi;
 	u16 fcs_err;
@@ -792,8 +792,8 @@
 	return 0;
 }
 
-const struct mt76_testmode_ops bersa_testmode_ops = {
-	.set_state = bersa_tm_set_state,
-	.set_params = bersa_tm_set_params,
-	.dump_stats = bersa_tm_dump_stats,
+const struct mt76_testmode_ops besra_testmode_ops = {
+	.set_state = besra_tm_set_state,
+	.set_params = besra_tm_set_params,
+	.dump_stats = besra_tm_dump_stats,
 };
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/testmode.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/testmode.h
similarity index 76%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/testmode.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/testmode.h
index 3a10087..10406ff 100644
--- a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/bersa/testmode.h
+++ b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/besra/testmode.h
@@ -1,22 +1,22 @@
 /* SPDX-License-Identifier: ISC */
 /* Copyright (C) 2020 MediaTek Inc. */
 
-#ifndef __BERSA_TESTMODE_H
-#define __BERSA_TESTMODE_H
+#ifndef __BESRA_TESTMODE_H
+#define __BESRA_TESTMODE_H
 
-struct bersa_tm_trx {
+struct besra_tm_trx {
 	u8 type;
 	u8 enable;
 	u8 band;
 	u8 rsv;
 };
 
-struct bersa_tm_freq_offset {
+struct besra_tm_freq_offset {
 	u8 band;
 	__le32 freq_offset;
 };
 
-struct bersa_tm_slot_time {
+struct besra_tm_slot_time {
 	u8 slot_time;
 	u8 sifs;
 	u8 rifs;
@@ -26,23 +26,23 @@
 	u8 _rsv1[5];
 };
 
-struct bersa_tm_clean_txq {
+struct besra_tm_clean_txq {
 	bool sta_pause;
 	u8 wcid;	/* 256 sta */
 	u8 band;
 	u8 rsv;
 };
 
-struct bersa_tm_cmd {
+struct besra_tm_cmd {
 	u8 testmode_en;
 	u8 param_idx;
 	u8 _rsv[2];
 	union {
 		__le32 data;
-		struct bersa_tm_trx trx;
-		struct bersa_tm_freq_offset freq;
-		struct bersa_tm_slot_time slot;
-		struct bersa_tm_clean_txq clean;
+		struct besra_tm_trx trx;
+		struct besra_tm_freq_offset freq;
+		struct besra_tm_slot_time slot;
+		struct besra_tm_clean_txq clean;
 		u8 test[72];
 	} param;
 } __packed;
@@ -66,7 +66,7 @@
 	u8 txfd_mode;
 };
 
-struct bersa_tm_rf_test {
+struct besra_tm_rf_test {
 	u8 action;
 	u8 icap_len;
 	u8 _rsv[2];
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/debugfs.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/debugfs.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/debugfs.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/debugfs.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/dma.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/dma.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/dma.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/dma.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/dma.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/dma.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/dma.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/dma.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/eeprom.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/eeprom.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/eeprom.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/eeprom.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_eeprom.bin b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_eeprom.bin
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_eeprom.bin
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_eeprom.bin
Binary files differ
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_rom_patch.bin b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_rom_patch.bin
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_rom_patch.bin
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_rom_patch.bin
Binary files differ
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_wa.bin b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_wa.bin
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_wa.bin
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_wa.bin
Binary files differ
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom.bin b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom.bin
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom.bin
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom.bin
Binary files differ
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_sram.bin b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_sram.bin
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_sram.bin
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_wf_rom_sram.bin
Binary files differ
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_wm.bin b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_wm.bin
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/firmware/mt7902_wm.bin
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/firmware/mt7902_wm.bin
Binary files differ
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mac80211.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mac80211.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mac80211.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mac80211.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mmio.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mmio.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mmio.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mmio.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/Makefile b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/Makefile
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/Makefile
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/Makefile
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/beacon.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/beacon.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/beacon.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/beacon.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/core.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/core.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/core.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/core.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/debugfs.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/debugfs.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/debugfs.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/debugfs.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/dma.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/dma.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/dma.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/dma.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/eeprom.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/eeprom.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/eeprom.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/eeprom.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/eeprom.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/eeprom.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/eeprom.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/eeprom.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/init.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/init.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/init.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/init.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/mac.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/mac.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/mac.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/mac.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/main.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/main.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/main.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/main.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/mcu.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/mcu.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/mcu.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/mcu.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/mt7603.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/mt7603.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/mt7603.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/mt7603.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/pci.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/pci.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/pci.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/pci.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/regs.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/regs.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/regs.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/regs.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/soc.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/soc.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7603/soc.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7603/soc.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/Kconfig b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/Kconfig
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/Kconfig
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/Kconfig
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/Makefile b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/Makefile
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/Makefile
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/Makefile
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/debugfs.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/debugfs.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/debugfs.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/debugfs.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/dma.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/dma.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/dma.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/dma.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/eeprom.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/eeprom.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/eeprom.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/eeprom.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/eeprom.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/eeprom.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/eeprom.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/eeprom.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/init.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/init.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/init.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/init.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mac.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mac.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mac.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mac.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/main.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/main.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/main.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/main.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mcu.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mcu.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mcu.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mcu.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mmio.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mmio.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mmio.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mmio.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mt7615.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mt7615.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mt7615.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mt7615.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mt7615_trace.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mt7615_trace.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/mt7615_trace.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/mt7615_trace.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/pci.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/pci.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/pci.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/pci.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/pci_init.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/pci_init.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/pci_init.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/pci_init.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/pci_mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/pci_mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/pci_mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/pci_mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/regs.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/regs.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/regs.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/regs.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/sdio.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/sdio.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/sdio.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/sdio.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/sdio_mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/sdio_mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/sdio_mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/sdio_mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/soc.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/soc.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/soc.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/soc.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/testmode.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/testmode.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/testmode.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/testmode.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/trace.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/trace.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/trace.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/trace.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/usb.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/usb.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/usb.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/usb.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/usb_mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/usb_mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/usb_mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/usb_mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/usb_sdio.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/usb_sdio.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7615/usb_sdio.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7615/usb_sdio.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76_connac.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76_connac.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76_connac.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76_connac.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76_connac_mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76_connac_mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76_connac_mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76_connac_mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76_connac_mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76_connac_mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76_connac_mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76_connac_mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76_connac_mcu.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76_connac_mcu.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76_connac_mcu.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76_connac_mcu.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/Makefile b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/Makefile
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/Makefile
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/Makefile
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/eeprom.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/eeprom.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/eeprom.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/eeprom.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/eeprom.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/eeprom.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/eeprom.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/eeprom.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/init.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/init.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/init.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/init.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/initvals.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/initvals.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/initvals.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/initvals.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/initvals_init.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/initvals_init.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/initvals_init.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/initvals_init.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/initvals_phy.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/initvals_phy.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/initvals_phy.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/initvals_phy.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/main.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/main.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/main.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/main.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/mcu.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/mcu.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/mcu.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/mcu.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/mt76x0.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/mt76x0.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/mt76x0.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/mt76x0.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/pci.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/pci.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/pci.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/pci.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/pci_mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/pci_mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/pci_mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/pci_mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/phy.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/phy.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/phy.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/phy.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/phy.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/phy.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/phy.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/phy.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/usb.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/usb.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/usb.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/usb.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/usb_mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/usb_mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x0/usb_mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x0/usb_mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_beacon.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_beacon.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_beacon.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_beacon.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_debugfs.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_debugfs.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_debugfs.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_debugfs.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_dfs.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_dfs.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_dfs.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_dfs.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_dfs.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_dfs.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_dfs.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_dfs.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_dma.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_dma.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_dma.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_dma.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_eeprom.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_eeprom.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_eeprom.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_eeprom.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_eeprom.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_eeprom.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_eeprom.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_eeprom.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_mac.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_mac.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_mac.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_mac.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_mcu.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_mcu.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_mcu.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_mcu.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_mmio.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_mmio.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_mmio.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_mmio.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_phy.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_phy.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_phy.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_phy.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_phy.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_phy.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_phy.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_phy.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_regs.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_regs.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_regs.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_regs.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_trace.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_trace.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_trace.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_trace.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_trace.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_trace.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_trace.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_trace.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_txrx.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_txrx.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_txrx.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_txrx.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_usb.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_usb.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_usb.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_usb.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_usb_core.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_usb_core.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_usb_core.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_usb_core.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_usb_mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_usb_mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_usb_mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_usb_mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_util.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_util.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x02_util.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x02_util.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/Makefile b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/Makefile
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/Makefile
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/Makefile
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/debugfs.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/debugfs.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/debugfs.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/debugfs.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/eeprom.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/eeprom.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/eeprom.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/eeprom.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/eeprom.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/eeprom.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/eeprom.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/eeprom.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/init.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/init.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/init.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/init.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mac.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mac.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mac.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mac.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mcu.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mcu.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mcu.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mcu.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mt76x2.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mt76x2.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mt76x2.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mt76x2.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mt76x2u.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mt76x2u.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/mt76x2u.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/mt76x2u.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/pci.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/pci.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/pci.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/pci.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/pci_init.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/pci_init.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/pci_init.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/pci_init.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/pci_main.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/pci_main.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/pci_main.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/pci_main.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/pci_mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/pci_mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/pci_mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/pci_mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/pci_phy.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/pci_phy.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/pci_phy.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/pci_phy.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/phy.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/phy.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/phy.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/phy.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb_init.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb_init.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb_init.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb_init.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb_mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb_mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb_mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb_mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb_main.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb_main.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb_main.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb_main.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb_mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb_mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb_mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb_mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb_phy.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb_phy.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt76x2/usb_phy.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt76x2/usb_phy.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/Kconfig b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/Kconfig
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/Kconfig
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/Kconfig
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/Makefile b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/Makefile
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/Makefile
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/Makefile
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/debugfs.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/debugfs.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/debugfs.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/debugfs.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/dma.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/dma.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/dma.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/dma.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/eeprom.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/eeprom.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/eeprom.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/eeprom.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/eeprom.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/eeprom.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/eeprom.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/eeprom.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/init.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/init.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/init.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/init.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mac.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mac.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mac.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mac.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/main.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/main.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/main.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/main.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mcu.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mcu.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mcu.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mcu.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mmio.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mmio.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mmio.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mmio.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mt7915.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mt7915.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/mt7915.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/mt7915.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/pci.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/pci.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/pci.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/pci.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/regs.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/regs.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/regs.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/regs.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/soc.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/soc.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/soc.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/soc.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/testmode.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/testmode.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/testmode.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/testmode.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/testmode.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/testmode.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7915/testmode.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7915/testmode.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/Kconfig b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/Kconfig
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/Kconfig
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/Kconfig
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/Makefile b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/Makefile
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/Makefile
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/Makefile
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/debugfs.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/debugfs.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/debugfs.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/debugfs.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/dma.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/dma.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/dma.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/dma.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/eeprom.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/eeprom.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/eeprom.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/eeprom.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/init.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/init.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/init.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/init.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mac.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mac.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mac.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mac.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/main.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/main.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/main.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/main.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mcu.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mcu.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mcu.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mcu.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mt7921.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mt7921.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mt7921.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mt7921.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mt7921_trace.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mt7921_trace.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/mt7921_trace.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/mt7921_trace.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/pci.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/pci.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/pci.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/pci.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/pci_mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/pci_mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/pci_mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/pci_mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/pci_mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/pci_mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/pci_mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/pci_mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/regs.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/regs.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/regs.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/regs.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/sdio.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/sdio.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/sdio.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/sdio.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/sdio_mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/sdio_mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/sdio_mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/sdio_mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/sdio_mcu.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/sdio_mcu.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/sdio_mcu.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/sdio_mcu.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/testmode.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/testmode.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/testmode.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/testmode.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/trace.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/trace.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/trace.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/trace.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/usb.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/usb.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/usb.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/usb.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/usb_mac.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/usb_mac.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/mt7921/usb_mac.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/mt7921/usb_mac.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/pci.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/pci.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/pci.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/pci.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/scripts/single-sku.pl b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/scripts/single-sku.pl
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/scripts/single-sku.pl
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/scripts/single-sku.pl
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/sdio.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/sdio.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/sdio.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/sdio.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/sdio.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/sdio.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/sdio.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/sdio.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/sdio_txrx.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/sdio_txrx.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/sdio_txrx.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/sdio_txrx.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/testmode.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/testmode.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/testmode.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/testmode.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/testmode.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/testmode.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/testmode.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/testmode.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/CMakeLists.txt b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/CMakeLists.txt
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/CMakeLists.txt
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/CMakeLists.txt
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/README.md b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/README.md
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/README.md
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/README.md
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/eeprom.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/eeprom.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/eeprom.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/eeprom.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/fields.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/fields.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/fields.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/fields.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/fwlog.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/fwlog.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/fwlog.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/fwlog.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/main.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/main.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/main.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/main.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/mt76-test.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/mt76-test.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tools/mt76-test.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tools/mt76-test.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/trace.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/trace.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/trace.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/trace.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/trace.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/trace.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/trace.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/trace.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tx.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tx.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/tx.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/tx.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/usb.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/usb.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/usb.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/usb.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/usb_trace.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/usb_trace.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/usb_trace.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/usb_trace.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/usb_trace.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/usb_trace.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/usb_trace.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/usb_trace.h
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/util.c b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/util.c
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/util.c
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/util.c
diff --git a/autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/util.h b/autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/util.h
similarity index 100%
rename from autobuild_mac80211_release/mt7986_bersa_mac80211/package/kernel/mt76/src/util.h
rename to autobuild_mac80211_release/mt7986_besra_mac80211/package/kernel/mt76/src/util.h
