mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2026-01-27 15:44:19 +00:00
rtw89: extend role_maintain to support AP mode
Fill mac_id and self_role depends on the operation mode. In AP mode, echo connected station has an unique mac_id, and each vif also has one mac_id to represent itself. The self_role is assigned to vif if the operation mode is decided, and RTW89_SELF_ROLE_AP_CLIENT is assigned to the connected STA in AP mode, Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20220207063900.43643-2-pkshih@realtek.com
This commit is contained in:
parent
a954f29aea
commit
ff66964a94
@ -993,9 +993,21 @@ int rtw89_fw_h2c_update_beacon(struct rtw89_dev *rtwdev,
|
||||
#define H2C_ROLE_MAINTAIN_LEN 4
|
||||
int rtw89_fw_h2c_role_maintain(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif *rtwvif,
|
||||
struct rtw89_sta *rtwsta,
|
||||
enum rtw89_upd_mode upd_mode)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
u8 mac_id = rtwsta ? rtwsta->mac_id : rtwvif->mac_id;
|
||||
u8 self_role;
|
||||
|
||||
if (rtwvif->net_type == RTW89_NET_TYPE_AP_MODE) {
|
||||
if (rtwsta)
|
||||
self_role = RTW89_SELF_ROLE_AP_CLIENT;
|
||||
else
|
||||
self_role = rtwvif->self_role;
|
||||
} else {
|
||||
self_role = rtwvif->self_role;
|
||||
}
|
||||
|
||||
skb = rtw89_fw_h2c_alloc_skb_with_hdr(H2C_ROLE_MAINTAIN_LEN);
|
||||
if (!skb) {
|
||||
@ -1003,8 +1015,8 @@ int rtw89_fw_h2c_role_maintain(struct rtw89_dev *rtwdev,
|
||||
return -ENOMEM;
|
||||
}
|
||||
skb_put(skb, H2C_ROLE_MAINTAIN_LEN);
|
||||
SET_FWROLE_MAINTAIN_MACID(skb->data, rtwvif->mac_id);
|
||||
SET_FWROLE_MAINTAIN_SELF_ROLE(skb->data, rtwvif->self_role);
|
||||
SET_FWROLE_MAINTAIN_MACID(skb->data, mac_id);
|
||||
SET_FWROLE_MAINTAIN_SELF_ROLE(skb->data, self_role);
|
||||
SET_FWROLE_MAINTAIN_UPD_MODE(skb->data, upd_mode);
|
||||
SET_FWROLE_MAINTAIN_WIFI_ROLE(skb->data, rtwvif->wifi_role);
|
||||
|
||||
|
||||
@ -1886,6 +1886,7 @@ void rtw89_fw_c2h_irqsafe(struct rtw89_dev *rtwdev, struct sk_buff *c2h);
|
||||
void rtw89_fw_c2h_work(struct work_struct *work);
|
||||
int rtw89_fw_h2c_role_maintain(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif *rtwvif,
|
||||
struct rtw89_sta *rtwsta,
|
||||
enum rtw89_upd_mode upd_mode);
|
||||
int rtw89_fw_h2c_join_info(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
|
||||
struct rtw89_sta *rtwsta, bool dis_conn);
|
||||
|
||||
@ -3025,7 +3025,7 @@ int rtw89_mac_vif_init(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, RTW89_ROLE_CREATE);
|
||||
ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, NULL, RTW89_ROLE_CREATE);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -3048,7 +3048,7 @@ int rtw89_mac_vif_deinit(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, RTW89_ROLE_REMOVE);
|
||||
ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, NULL, RTW89_ROLE_REMOVE);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user