}
 
        if (obj->type == ACPI_TYPE_INTEGER) {
-               ab->acpi.func_bit = obj->integer.value;
+               switch (func) {
+               case ATH12K_ACPI_DSM_FUNC_SUPPORT_FUNCS:
+                       ab->acpi.func_bit = obj->integer.value;
+                       break;
+               case ATH12K_ACPI_DSM_FUNC_DISABLE_FLAG:
+                       ab->acpi.bit_flag = obj->integer.value;
+                       break;
+               }
        } else if (obj->type == ACPI_TYPE_BUFFER) {
                switch (func) {
                case ATH12K_ACPI_DSM_FUNC_SUPPORT_FUNCS:
        return 0;
 }
 
+bool ath12k_acpi_get_disable_rfkill(struct ath12k_base *ab)
+{
+       return ab->acpi.acpi_disable_rfkill;
+}
+
+bool ath12k_acpi_get_disable_11be(struct ath12k_base *ab)
+{
+       return ab->acpi.acpi_disable_11be;
+}
+
 int ath12k_acpi_start(struct ath12k_base *ab)
 {
        acpi_status status;
        u8 *buf;
        int ret;
 
+       ab->acpi.acpi_tas_enable = false;
+       ab->acpi.acpi_disable_11be = false;
+       ab->acpi.acpi_disable_rfkill = false;
+
        if (!ab->hw_params->acpi_guid)
                /* not supported with this hardware */
                return 0;
 
-       ab->acpi.acpi_tas_enable = false;
-
        ret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_SUPPORT_FUNCS);
        if (ret) {
                ath12k_dbg(ab, ATH12K_DBG_BOOT, "failed to get ACPI DSM data: %d\n", ret);
                return ret;
        }
 
+       if (ATH12K_ACPI_FUNC_BIT_VALID(ab->acpi, ATH12K_ACPI_FUNC_BIT_DISABLE_FLAG)) {
+               ret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_DISABLE_FLAG);
+               if (ret) {
+                       ath12k_warn(ab, "failed to get ACPI DISABLE FLAG: %d\n", ret);
+                       return ret;
+               }
+
+               if (ATH12K_ACPI_CHEK_BIT_VALID(ab->acpi,
+                                              ATH12K_ACPI_DSM_DISABLE_11BE_BIT))
+                       ab->acpi.acpi_disable_11be = true;
+
+               if (!ATH12K_ACPI_CHEK_BIT_VALID(ab->acpi,
+                                               ATH12K_ACPI_DSM_DISABLE_RFKILL_BIT))
+                       ab->acpi.acpi_disable_rfkill = true;
+       }
+
        if (ATH12K_ACPI_FUNC_BIT_VALID(ab->acpi, ATH12K_ACPI_FUNC_BIT_TAS_CFG)) {
                ret = ath12k_acpi_dsm_get_data(ab, ATH12K_ACPI_DSM_FUNC_TAS_CFG);
                if (ret) {
 
 #include <linux/acpi.h>
 
 #define ATH12K_ACPI_DSM_FUNC_SUPPORT_FUNCS     0
+#define ATH12K_ACPI_DSM_FUNC_DISABLE_FLAG      2
 #define ATH12K_ACPI_DSM_FUNC_BIOS_SAR          4
 #define ATH12K_ACPI_DSM_FUNC_GEO_OFFSET                5
 #define ATH12K_ACPI_DSM_FUNC_INDEX_CCA         6
 #define ATH12K_ACPI_DSM_FUNC_TAS_DATA          9
 #define ATH12K_ACPI_DSM_FUNC_INDEX_BAND_EDGE           10
 
+#define ATH12K_ACPI_FUNC_BIT_DISABLE_FLAG              BIT(1)
 #define ATH12K_ACPI_FUNC_BIT_BIOS_SAR                  BIT(3)
 #define ATH12K_ACPI_FUNC_BIT_GEO_OFFSET                        BIT(4)
 #define ATH12K_ACPI_FUNC_BIT_CCA                       BIT(5)
 
 #define ATH12K_ACPI_NOTIFY_EVENT                       0x86
 #define ATH12K_ACPI_FUNC_BIT_VALID(_acdata, _func)     (((_acdata).func_bit) & (_func))
+#define ATH12K_ACPI_CHEK_BIT_VALID(_acdata, _func)     (((_acdata).bit_flag) & (_func))
 
 #define ATH12K_ACPI_TAS_DATA_VERSION           0x1
 #define ATH12K_ACPI_TAS_DATA_ENABLE            0x1
 #define ATH12K_ACPI_DSM_FUNC_MIN_BITMAP_SIZE   1
 #define ATH12K_ACPI_DSM_FUNC_MAX_BITMAP_SIZE   4
 
+#define ATH12K_ACPI_DSM_DISABLE_11BE_BIT       BIT(0)
+#define ATH12K_ACPI_DSM_DISABLE_RFKILL_BIT     BIT(2)
+
 #define ATH12K_ACPI_DSM_GEO_OFFSET_DATA_SIZE (ATH12K_ACPI_GEO_OFFSET_DATA_OFFSET + \
                                              ATH12K_ACPI_BIOS_SAR_GEO_OFFSET_LEN)
 #define ATH12K_ACPI_DSM_BIOS_SAR_DATA_SIZE (ATH12K_ACPI_POWER_LIMIT_DATA_OFFSET + \
 
 int ath12k_acpi_start(struct ath12k_base *ab);
 void ath12k_acpi_stop(struct ath12k_base *ab);
+bool ath12k_acpi_get_disable_rfkill(struct ath12k_base *ab);
+bool ath12k_acpi_get_disable_11be(struct ath12k_base *ab);
 
 #else
 
 {
 }
 
+static inline bool ath12k_acpi_get_disable_rfkill(struct ath12k_base *ab)
+{
+       return false;
+}
+
+static inline bool ath12k_acpi_get_disable_11be(struct ath12k_base *ab)
+{
+       return false;
+}
+
 #endif /* CONFIG_ACPI */
 
 #endif /* ATH12K_ACPI_H */
 
        if (!(ab->target_caps.sys_cap_info & WMI_SYS_CAP_INFO_RFKILL))
                return 0;
 
+       if (ath12k_acpi_get_disable_rfkill(ab))
+               return 0;
+
        for (i = 0; i < ab->num_radios; i++) {
                ar = ab->pdevs[i].ar;
 
 
                u32 func_bit;
                bool acpi_tas_enable;
                bool acpi_bios_sar_enable;
+               bool acpi_disable_11be;
+               bool acpi_disable_rfkill;
+               u32 bit_flag;
                u8 tas_cfg[ATH12K_ACPI_DSM_TAS_CFG_SIZE];
                u8 tas_sar_power_table[ATH12K_ACPI_DSM_TAS_DATA_SIZE];
                u8 bios_sar_data[ATH12K_ACPI_DSM_BIOS_SAR_DATA_SIZE];
 
 
        memset(eht_cap, 0, sizeof(struct ieee80211_sta_eht_cap));
 
-       if (!(test_bit(WMI_TLV_SERVICE_11BE, ar->ab->wmi_ab.svc_map)))
+       if (!(test_bit(WMI_TLV_SERVICE_11BE, ar->ab->wmi_ab.svc_map)) ||
+           ath12k_acpi_get_disable_11be(ar->ab))
                return;
 
        eht_cap->has_eht = true;