Commit 7e24cc86 authored by Ping-Ke Shih's avatar Ping-Ke Shih Committed by Kalle Valo
Browse files

wifi: rtw89: fw: add chip_ops to update CMAC table to associated station



For WiFi 7 chips, we add H2C command with rich fields to support MLO, so
add a chip_ops to generalize calling of update CMAC table.

Signed-off-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20240115033742.16372-4-pkshih@realtek.com
parent 79926193
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -3393,7 +3393,7 @@ int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
		rtw89_fw_release_general_pkt_list_vif(rtwdev, rtwvif, true);
	}

	ret = rtw89_fw_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
	ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
	if (ret) {
		rtw89_warn(rtwdev, "failed to send h2c cmac table\n");
		return ret;
@@ -3442,7 +3442,7 @@ int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
		}
	}

	ret = rtw89_fw_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
	ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
	if (ret) {
		rtw89_warn(rtwdev, "failed to send h2c cmac table\n");
		return ret;
+3 −0
Original line number Diff line number Diff line
@@ -3197,6 +3197,9 @@ struct rtw89_chip_ops {
	int (*h2c_dctl_sec_cam)(struct rtw89_dev *rtwdev,
				struct rtw89_vif *rtwvif,
				struct rtw89_sta *rtwsta);
	int (*h2c_assoc_cmac_tbl)(struct rtw89_dev *rtwdev,
				  struct ieee80211_vif *vif,
				  struct ieee80211_sta *sta);
	int (*h2c_update_beacon)(struct rtw89_dev *rtwdev,
				 struct rtw89_vif *rtwvif);
	int (*h2c_ba_cam)(struct rtw89_dev *rtwdev, struct rtw89_sta *rtwsta,
+2 −0
Original line number Diff line number Diff line
@@ -2231,6 +2231,7 @@ int rtw89_fw_h2c_assoc_cmac_tbl(struct rtw89_dev *rtwdev,

	return ret;
}
EXPORT_SYMBOL(rtw89_fw_h2c_assoc_cmac_tbl);

static void __get_sta_eht_pkt_padding(struct rtw89_dev *rtwdev,
				      struct ieee80211_sta *sta, u8 *pads)
@@ -2401,6 +2402,7 @@ int rtw89_fw_h2c_assoc_cmac_tbl_g7(struct rtw89_dev *rtwdev,

	return ret;
}
EXPORT_SYMBOL(rtw89_fw_h2c_assoc_cmac_tbl_g7);

int rtw89_fw_h2c_txtime_cmac_tbl(struct rtw89_dev *rtwdev,
				 struct rtw89_sta *rtwsta)
+9 −0
Original line number Diff line number Diff line
@@ -4094,6 +4094,15 @@ static inline int rtw89_chip_h2c_update_beacon(struct rtw89_dev *rtwdev,
	return chip->ops->h2c_update_beacon(rtwdev, rtwvif);
}

static inline int rtw89_chip_h2c_assoc_cmac_tbl(struct rtw89_dev *rtwdev,
						struct ieee80211_vif *vif,
						struct ieee80211_sta *sta)
{
	const struct rtw89_chip_info *chip = rtwdev->chip;

	return chip->ops->h2c_assoc_cmac_tbl(rtwdev, vif, sta);
}

static inline
int rtw89_chip_h2c_ba_cam(struct rtw89_dev *rtwdev, struct rtw89_sta *rtwsta,
			  bool valid, struct ieee80211_ampdu_params *params)
+2 −2
Original line number Diff line number Diff line
@@ -497,7 +497,7 @@ static int rtw89_ops_start_ap(struct ieee80211_hw *hw,
	ether_addr_copy(rtwvif->bssid, vif->bss_conf.bssid);
	rtw89_cam_bssid_changed(rtwdev, rtwvif);
	rtw89_mac_port_update(rtwdev, rtwvif);
	rtw89_fw_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
	rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
	rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, NULL, RTW89_ROLE_TYPE_CHANGE);
	rtw89_fw_h2c_join_info(rtwdev, rtwvif, NULL, true);
	rtw89_fw_h2c_cam(rtwdev, rtwvif, NULL, NULL);
@@ -518,7 +518,7 @@ void rtw89_ops_stop_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif,

	mutex_lock(&rtwdev->mutex);
	rtw89_mac_stop_ap(rtwdev, rtwvif);
	rtw89_fw_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
	rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
	rtw89_fw_h2c_join_info(rtwdev, rtwvif, NULL, true);
	mutex_unlock(&rtwdev->mutex);
}
Loading