mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-20 09:59:27 -05:00
wifi: rtw89: chan: tweak bitmap recalc ahead before MLO
Originally, we just declared two sub-entity, and according to rolling down mechanism, we ensured that index 0 contained sub-entity as long as there are sub-entity. So, we could use for-loop after deciding the last index. But, we are preparing to expand num of sub-entity for MLO. Then, there won't be just two sub-entity. And, there might be holes between two bits in the bitmap. So, we cannot simply do for-loop as before. Instead, we need to follow the set bits. Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://msgid.link/20240206030624.23382-4-pkshih@realtek.com
This commit is contained in:
committed by
Kalle Valo
parent
4f0beeefcc
commit
ab12a3bfbf
@@ -214,31 +214,32 @@ void rtw89_entity_init(struct rtw89_dev *rtwdev)
|
||||
|
||||
enum rtw89_entity_mode rtw89_entity_recalc(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
DECLARE_BITMAP(recalc_map, NUM_OF_RTW89_SUB_ENTITY) = {};
|
||||
struct rtw89_hal *hal = &rtwdev->hal;
|
||||
const struct cfg80211_chan_def *chandef;
|
||||
enum rtw89_entity_mode mode;
|
||||
struct rtw89_chan chan;
|
||||
u8 weight;
|
||||
u8 last;
|
||||
u8 idx;
|
||||
|
||||
lockdep_assert_held(&rtwdev->mutex);
|
||||
|
||||
bitmap_copy(recalc_map, hal->entity_map, NUM_OF_RTW89_SUB_ENTITY);
|
||||
|
||||
weight = bitmap_weight(hal->entity_map, NUM_OF_RTW89_SUB_ENTITY);
|
||||
switch (weight) {
|
||||
default:
|
||||
rtw89_warn(rtwdev, "unknown ent chan weight: %d\n", weight);
|
||||
bitmap_zero(hal->entity_map, NUM_OF_RTW89_SUB_ENTITY);
|
||||
bitmap_zero(recalc_map, NUM_OF_RTW89_SUB_ENTITY);
|
||||
fallthrough;
|
||||
case 0:
|
||||
rtw89_config_default_chandef(rtwdev);
|
||||
set_bit(RTW89_SUB_ENTITY_0, recalc_map);
|
||||
fallthrough;
|
||||
case 1:
|
||||
last = RTW89_SUB_ENTITY_0;
|
||||
mode = RTW89_ENTITY_MODE_SCC;
|
||||
break;
|
||||
case 2:
|
||||
last = RTW89_SUB_ENTITY_1;
|
||||
mode = rtw89_get_entity_mode(rtwdev);
|
||||
if (mode == RTW89_ENTITY_MODE_MCC)
|
||||
break;
|
||||
@@ -247,7 +248,7 @@ enum rtw89_entity_mode rtw89_entity_recalc(struct rtw89_dev *rtwdev)
|
||||
break;
|
||||
}
|
||||
|
||||
for (idx = 0; idx <= last; idx++) {
|
||||
for_each_set_bit(idx, recalc_map, NUM_OF_RTW89_SUB_ENTITY) {
|
||||
chandef = rtw89_chandef_get(rtwdev, idx);
|
||||
rtw89_get_channel_params(chandef, &chan);
|
||||
if (chan.channel == 0) {
|
||||
|
||||
Reference in New Issue
Block a user