mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
wifi: rtw89: handle entity active flag per PHY
Originally, we have an active flag to record whether we have set PHY once. After impending MLO support, there will be dual-PHY and they can be set individually on Wi-Fi 7 chips. So, we now have active flag per PHY and handle them individually. Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20240925020119.13170-3-pkshih@realtek.com
This commit is contained in:
parent
f82a4471fc
commit
ad95bb3b92
|
|
@ -43,18 +43,21 @@ struct rtw89_entity_weight {
|
|||
unsigned int active_roles;
|
||||
};
|
||||
|
||||
static inline bool rtw89_get_entity_state(struct rtw89_dev *rtwdev)
|
||||
static inline bool rtw89_get_entity_state(struct rtw89_dev *rtwdev,
|
||||
enum rtw89_phy_idx phy_idx)
|
||||
{
|
||||
struct rtw89_hal *hal = &rtwdev->hal;
|
||||
|
||||
return READ_ONCE(hal->entity_active);
|
||||
return READ_ONCE(hal->entity_active[phy_idx]);
|
||||
}
|
||||
|
||||
static inline void rtw89_set_entity_state(struct rtw89_dev *rtwdev, bool active)
|
||||
static inline void rtw89_set_entity_state(struct rtw89_dev *rtwdev,
|
||||
enum rtw89_phy_idx phy_idx,
|
||||
bool active)
|
||||
{
|
||||
struct rtw89_hal *hal = &rtwdev->hal;
|
||||
|
||||
WRITE_ONCE(hal->entity_active, active);
|
||||
WRITE_ONCE(hal->entity_active[phy_idx], active);
|
||||
}
|
||||
|
||||
static inline
|
||||
|
|
|
|||
|
|
@ -352,10 +352,6 @@ void rtw89_core_set_chip_txpwr(struct rtw89_dev *rtwdev)
|
|||
enum rtw89_entity_mode mode;
|
||||
bool entity_active;
|
||||
|
||||
entity_active = rtw89_get_entity_state(rtwdev);
|
||||
if (!entity_active)
|
||||
return;
|
||||
|
||||
mode = rtw89_get_entity_mode(rtwdev);
|
||||
switch (mode) {
|
||||
case RTW89_ENTITY_MODE_SCC:
|
||||
|
|
@ -375,6 +371,11 @@ void rtw89_core_set_chip_txpwr(struct rtw89_dev *rtwdev)
|
|||
chanctx_idx = roc_idx;
|
||||
|
||||
phy_idx = RTW89_PHY_0;
|
||||
|
||||
entity_active = rtw89_get_entity_state(rtwdev, phy_idx);
|
||||
if (!entity_active)
|
||||
return;
|
||||
|
||||
chan = rtw89_chan_get(rtwdev, chanctx_idx);
|
||||
chip->ops->set_txpwr(rtwdev, chan, phy_idx);
|
||||
}
|
||||
|
|
@ -393,8 +394,6 @@ int rtw89_set_channel(struct rtw89_dev *rtwdev)
|
|||
enum rtw89_entity_mode mode;
|
||||
bool entity_active;
|
||||
|
||||
entity_active = rtw89_get_entity_state(rtwdev);
|
||||
|
||||
mode = rtw89_entity_recalc(rtwdev);
|
||||
switch (mode) {
|
||||
case RTW89_ENTITY_MODE_SCC:
|
||||
|
|
@ -416,6 +415,8 @@ int rtw89_set_channel(struct rtw89_dev *rtwdev)
|
|||
mac_idx = RTW89_MAC_0;
|
||||
phy_idx = RTW89_PHY_0;
|
||||
|
||||
entity_active = rtw89_get_entity_state(rtwdev, phy_idx);
|
||||
|
||||
chan = rtw89_chan_get(rtwdev, chanctx_idx);
|
||||
chan_rcd = rtw89_chan_rcd_get(rtwdev, chanctx_idx);
|
||||
|
||||
|
|
@ -432,7 +433,7 @@ int rtw89_set_channel(struct rtw89_dev *rtwdev)
|
|||
rtw89_chip_rfk_band_changed(rtwdev, phy_idx, chan);
|
||||
}
|
||||
|
||||
rtw89_set_entity_state(rtwdev, true);
|
||||
rtw89_set_entity_state(rtwdev, phy_idx, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4669,7 +4669,7 @@ struct rtw89_hal {
|
|||
struct rtw89_chanctx chanctx[NUM_OF_RTW89_CHANCTX];
|
||||
struct cfg80211_chan_def roc_chandef;
|
||||
|
||||
bool entity_active;
|
||||
bool entity_active[RTW89_PHY_MAX];
|
||||
bool entity_pause;
|
||||
enum rtw89_entity_mode entity_mode;
|
||||
|
||||
|
|
|
|||
|
|
@ -1483,7 +1483,8 @@ static int rtw89_mac_power_switch(struct rtw89_dev *rtwdev, bool on)
|
|||
clear_bit(RTW89_FLAG_CMAC1_FUNC, rtwdev->flags);
|
||||
clear_bit(RTW89_FLAG_FW_RDY, rtwdev->flags);
|
||||
rtw89_write8(rtwdev, R_AX_SCOREBOARD + 3, MAC_AX_NOTIFY_PWR_MAJOR);
|
||||
rtw89_set_entity_state(rtwdev, false);
|
||||
rtw89_set_entity_state(rtwdev, RTW89_PHY_0, false);
|
||||
rtw89_set_entity_state(rtwdev, RTW89_PHY_1, false);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user