1: a6bccf00a299 ! 1: 4d9f11059012 wifi: rtw89: add firmware-assisted regulatory domain learning @@ drivers/net/wireless/realtek/rtw89/mac80211.c: static int rtw89_ops_assign_vif_c return rtw89_chanctx_ops_assign_vif(rtwdev, rtwvif_link, ctx); }  -@@ drivers/net/wireless/realtek/rtw89/mac80211.c: static void rtw89_ops_unassign_vif_chanctx(struct ieee80211_hw *hw, - struct rtw89_dev *rtwdev = hw->priv; - struct rtw89_vif *rtwvif = vif_to_rtwvif(vif); - struct rtw89_vif_link *rtwvif_link; -+ unsigned int count = 0; -  - lockdep_assert_wiphy(hw->wiphy); -   @@ drivers/net/wireless/realtek/rtw89/mac80211.c: static void rtw89_ops_unassign_vif_chanctx(struct ieee80211_hw *hw, }  rtw89_chanctx_ops_unassign_vif(rtwdev, rtwvif_link, ctx);  + -+ rtw89_for_each_active_rtwvif(rtwdev, rtwvif) -+ count++; -+ -+ if (count == 0) ++ if (rtw89_no_active_rtwvif(rtwdev))  + rtw89_regd_learn_init(rtwdev); }  @@ drivers/net/wireless/realtek/rtw89/ser.c: static void ser_l2_reset_st_pre_hdl(st ser_reset_mac_binding(rtwdev); rtw89_core_stop(rtwdev); rtw89_entity_init(rtwdev); + + ## drivers/net/wireless/realtek/rtw89/util.h ## +@@ + #define rtw89_for_each_active_rtwvif(rtwdev, rtwvif) \ + list_for_each_entry(rtwvif, &(rtwdev)->hal.entity_mgnt.active_list, mgnt_entry) +  ++static inline bool rtw89_no_active_rtwvif(struct rtw89_dev *rtwdev) ++{ ++ struct rtw89_hal *hal = &rtwdev->hal; ++ struct rtw89_entity_mgnt *mgnt = &hal->entity_mgnt; ++ ++ return list_empty(&mgnt->active_list); ++} ++ + /* Before adding rtwvif to list, we need to check if it already exist, beacase + * in some case such as SER L2 happen during WoWLAN flow, calling reconfig + * twice cause the list to be added twice. 2: 6cf1d4bb68ca = 2: 88904541753a wifi: rtw89: debug: support to disable regd learn