mac80211: update to 6.6.15
[openwrt/staging/jow.git] / package / kernel / mac80211 / patches / ath11k / 0031-wifi-ath11k-Introduce-and-use-ath11k_sta_to_arsta.patch
1 From 10c65f97b424fcee439463f933140df2a0022f98 Mon Sep 17 00:00:00 2001
2 From: Jeff Johnson <quic_jjohnson@quicinc.com>
3 Date: Mon, 9 Oct 2023 09:39:42 -0700
4 Subject: [PATCH] wifi: ath11k: Introduce and use ath11k_sta_to_arsta()
5
6 Currently, the logic to return an ath11k_sta pointer, given a
7 ieee80211_sta pointer, uses typecasting throughout the driver. In
8 general, conversion functions are preferable to typecasting since
9 using a conversion function allows the compiler to validate the types
10 of both the input and output parameters.
11
12 ath11k already defines a conversion function ath11k_vif_to_arvif() for
13 a similar conversion. So introduce ath11k_sta_to_arsta() for this use
14 case, and convert all of the existing typecasting to use this
15 function.
16
17 No functional changes, compile tested only.
18
19 Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
20 Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
21 Link: https://lore.kernel.org/r/20231009-ath11k_sta_to_arsta-v1-1-1563e3a307e8@quicinc.com
22 ---
23 drivers/net/wireless/ath/ath11k/core.h | 5 ++++
24 drivers/net/wireless/ath/ath11k/debugfs.c | 4 +--
25 drivers/net/wireless/ath/ath11k/debugfs_sta.c | 30 +++++++++----------
26 drivers/net/wireless/ath/ath11k/dp_rx.c | 8 ++---
27 drivers/net/wireless/ath/ath11k/dp_tx.c | 4 +--
28 drivers/net/wireless/ath/ath11k/mac.c | 18 +++++------
29 drivers/net/wireless/ath/ath11k/peer.c | 2 +-
30 drivers/net/wireless/ath/ath11k/wmi.c | 6 ++--
31 8 files changed, 41 insertions(+), 36 deletions(-)
32
33 --- a/drivers/net/wireless/ath/ath11k/core.h
34 +++ b/drivers/net/wireless/ath/ath11k/core.h
35 @@ -1223,6 +1223,11 @@ static inline struct ath11k_vif *ath11k_
36 return (struct ath11k_vif *)vif->drv_priv;
37 }
38
39 +static inline struct ath11k_sta *ath11k_sta_to_arsta(struct ieee80211_sta *sta)
40 +{
41 + return (struct ath11k_sta *)sta->drv_priv;
42 +}
43 +
44 static inline struct ath11k *ath11k_ab_to_ar(struct ath11k_base *ab,
45 int mac_id)
46 {
47 --- a/drivers/net/wireless/ath/ath11k/debugfs.c
48 +++ b/drivers/net/wireless/ath/ath11k/debugfs.c
49 @@ -1459,7 +1459,7 @@ static void ath11k_reset_peer_ps_duratio
50 struct ieee80211_sta *sta)
51 {
52 struct ath11k *ar = data;
53 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
54 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
55
56 spin_lock_bh(&ar->data_lock);
57 arsta->ps_total_duration = 0;
58 @@ -1510,7 +1510,7 @@ static void ath11k_peer_ps_state_disable
59 struct ieee80211_sta *sta)
60 {
61 struct ath11k *ar = data;
62 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
63 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
64
65 spin_lock_bh(&ar->data_lock);
66 arsta->peer_ps_state = WMI_PEER_PS_STATE_DISABLED;
67 --- a/drivers/net/wireless/ath/ath11k/debugfs_sta.c
68 +++ b/drivers/net/wireless/ath/ath11k/debugfs_sta.c
69 @@ -136,7 +136,7 @@ static ssize_t ath11k_dbg_sta_dump_tx_st
70 size_t count, loff_t *ppos)
71 {
72 struct ieee80211_sta *sta = file->private_data;
73 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
74 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
75 struct ath11k *ar = arsta->arvif->ar;
76 struct ath11k_htt_data_stats *stats;
77 static const char *str_name[ATH11K_STATS_TYPE_MAX] = {"succ", "fail",
78 @@ -243,7 +243,7 @@ static ssize_t ath11k_dbg_sta_dump_rx_st
79 size_t count, loff_t *ppos)
80 {
81 struct ieee80211_sta *sta = file->private_data;
82 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
83 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
84 struct ath11k *ar = arsta->arvif->ar;
85 struct ath11k_rx_peer_stats *rx_stats = arsta->rx_stats;
86 int len = 0, i, retval = 0;
87 @@ -340,7 +340,7 @@ static int
88 ath11k_dbg_sta_open_htt_peer_stats(struct inode *inode, struct file *file)
89 {
90 struct ieee80211_sta *sta = inode->i_private;
91 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
92 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
93 struct ath11k *ar = arsta->arvif->ar;
94 struct debug_htt_stats_req *stats_req;
95 int type = ar->debug.htt_stats.type;
96 @@ -376,7 +376,7 @@ static int
97 ath11k_dbg_sta_release_htt_peer_stats(struct inode *inode, struct file *file)
98 {
99 struct ieee80211_sta *sta = inode->i_private;
100 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
101 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
102 struct ath11k *ar = arsta->arvif->ar;
103
104 mutex_lock(&ar->conf_mutex);
105 @@ -413,7 +413,7 @@ static ssize_t ath11k_dbg_sta_write_peer
106 size_t count, loff_t *ppos)
107 {
108 struct ieee80211_sta *sta = file->private_data;
109 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
110 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
111 struct ath11k *ar = arsta->arvif->ar;
112 int ret, enable;
113
114 @@ -453,7 +453,7 @@ static ssize_t ath11k_dbg_sta_read_peer_
115 size_t count, loff_t *ppos)
116 {
117 struct ieee80211_sta *sta = file->private_data;
118 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
119 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
120 struct ath11k *ar = arsta->arvif->ar;
121 char buf[32] = {0};
122 int len;
123 @@ -480,7 +480,7 @@ static ssize_t ath11k_dbg_sta_write_delb
124 size_t count, loff_t *ppos)
125 {
126 struct ieee80211_sta *sta = file->private_data;
127 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
128 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
129 struct ath11k *ar = arsta->arvif->ar;
130 u32 tid, initiator, reason;
131 int ret;
132 @@ -531,7 +531,7 @@ static ssize_t ath11k_dbg_sta_write_addb
133 size_t count, loff_t *ppos)
134 {
135 struct ieee80211_sta *sta = file->private_data;
136 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
137 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
138 struct ath11k *ar = arsta->arvif->ar;
139 u32 tid, status;
140 int ret;
141 @@ -581,7 +581,7 @@ static ssize_t ath11k_dbg_sta_write_addb
142 size_t count, loff_t *ppos)
143 {
144 struct ieee80211_sta *sta = file->private_data;
145 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
146 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
147 struct ath11k *ar = arsta->arvif->ar;
148 u32 tid, buf_size;
149 int ret;
150 @@ -632,7 +632,7 @@ static ssize_t ath11k_dbg_sta_read_aggr_
151 size_t count, loff_t *ppos)
152 {
153 struct ieee80211_sta *sta = file->private_data;
154 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
155 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
156 struct ath11k *ar = arsta->arvif->ar;
157 char buf[64];
158 int len = 0;
159 @@ -652,7 +652,7 @@ static ssize_t ath11k_dbg_sta_write_aggr
160 size_t count, loff_t *ppos)
161 {
162 struct ieee80211_sta *sta = file->private_data;
163 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
164 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
165 struct ath11k *ar = arsta->arvif->ar;
166 u32 aggr_mode;
167 int ret;
168 @@ -697,7 +697,7 @@ ath11k_write_htt_peer_stats_reset(struct
169 size_t count, loff_t *ppos)
170 {
171 struct ieee80211_sta *sta = file->private_data;
172 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
173 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
174 struct ath11k *ar = arsta->arvif->ar;
175 struct htt_ext_stats_cfg_params cfg_params = { 0 };
176 int ret;
177 @@ -756,7 +756,7 @@ static ssize_t ath11k_dbg_sta_read_peer_
178 size_t count, loff_t *ppos)
179 {
180 struct ieee80211_sta *sta = file->private_data;
181 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
182 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
183 struct ath11k *ar = arsta->arvif->ar;
184 char buf[20];
185 int len;
186 @@ -783,7 +783,7 @@ static ssize_t ath11k_dbg_sta_read_curre
187 loff_t *ppos)
188 {
189 struct ieee80211_sta *sta = file->private_data;
190 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
191 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
192 struct ath11k *ar = arsta->arvif->ar;
193 u64 time_since_station_in_power_save;
194 char buf[20];
195 @@ -817,7 +817,7 @@ static ssize_t ath11k_dbg_sta_read_total
196 size_t count, loff_t *ppos)
197 {
198 struct ieee80211_sta *sta = file->private_data;
199 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
200 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
201 struct ath11k *ar = arsta->arvif->ar;
202 char buf[20];
203 u64 power_save_duration;
204 --- a/drivers/net/wireless/ath/ath11k/dp_rx.c
205 +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
206 @@ -1099,7 +1099,7 @@ int ath11k_dp_rx_ampdu_start(struct ath1
207 struct ieee80211_ampdu_params *params)
208 {
209 struct ath11k_base *ab = ar->ab;
210 - struct ath11k_sta *arsta = (void *)params->sta->drv_priv;
211 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(params->sta);
212 int vdev_id = arsta->arvif->vdev_id;
213 int ret;
214
215 @@ -1117,7 +1117,7 @@ int ath11k_dp_rx_ampdu_stop(struct ath11
216 {
217 struct ath11k_base *ab = ar->ab;
218 struct ath11k_peer *peer;
219 - struct ath11k_sta *arsta = (void *)params->sta->drv_priv;
220 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(params->sta);
221 int vdev_id = arsta->arvif->vdev_id;
222 dma_addr_t paddr;
223 bool active;
224 @@ -1456,7 +1456,7 @@ ath11k_update_per_peer_tx_stats(struct a
225 }
226
227 sta = peer->sta;
228 - arsta = (struct ath11k_sta *)sta->drv_priv;
229 + arsta = ath11k_sta_to_arsta(sta);
230
231 memset(&arsta->txrate, 0, sizeof(arsta->txrate));
232
233 @@ -5248,7 +5248,7 @@ int ath11k_dp_rx_process_mon_status(stru
234 goto next_skb;
235 }
236
237 - arsta = (struct ath11k_sta *)peer->sta->drv_priv;
238 + arsta = ath11k_sta_to_arsta(peer->sta);
239 ath11k_dp_rx_update_peer_stats(arsta, ppdu_info);
240
241 if (ath11k_debugfs_is_pktlog_peer_valid(ar, peer->addr))
242 --- a/drivers/net/wireless/ath/ath11k/dp_tx.c
243 +++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
244 @@ -467,7 +467,7 @@ void ath11k_dp_tx_update_txcompl(struct
245 }
246
247 sta = peer->sta;
248 - arsta = (struct ath11k_sta *)sta->drv_priv;
249 + arsta = ath11k_sta_to_arsta(sta);
250
251 memset(&arsta->txrate, 0, sizeof(arsta->txrate));
252 pkt_type = FIELD_GET(HAL_TX_RATE_STATS_INFO0_PKT_TYPE,
253 @@ -627,7 +627,7 @@ static void ath11k_dp_tx_complete_msdu(s
254 ieee80211_free_txskb(ar->hw, msdu);
255 return;
256 }
257 - arsta = (struct ath11k_sta *)peer->sta->drv_priv;
258 + arsta = ath11k_sta_to_arsta(peer->sta);
259 status.sta = peer->sta;
260 status.skb = msdu;
261 status.info = info;
262 --- a/drivers/net/wireless/ath/ath11k/mac.c
263 +++ b/drivers/net/wireless/ath/ath11k/mac.c
264 @@ -2832,7 +2832,7 @@ static void ath11k_peer_assoc_prepare(st
265
266 lockdep_assert_held(&ar->conf_mutex);
267
268 - arsta = (struct ath11k_sta *)sta->drv_priv;
269 + arsta = ath11k_sta_to_arsta(sta);
270
271 memset(arg, 0, sizeof(*arg));
272
273 @@ -4313,7 +4313,7 @@ static int ath11k_mac_op_set_key(struct
274 ath11k_warn(ab, "peer %pM disappeared!\n", peer_addr);
275
276 if (sta) {
277 - arsta = (struct ath11k_sta *)sta->drv_priv;
278 + arsta = ath11k_sta_to_arsta(sta);
279
280 switch (key->cipher) {
281 case WLAN_CIPHER_SUITE_TKIP:
282 @@ -4904,7 +4904,7 @@ static int ath11k_mac_station_add(struct
283 {
284 struct ath11k_base *ab = ar->ab;
285 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
286 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
287 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
288 struct peer_create_params peer_param;
289 int ret;
290
291 @@ -5028,7 +5028,7 @@ static int ath11k_mac_op_sta_state(struc
292 {
293 struct ath11k *ar = hw->priv;
294 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
295 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
296 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
297 struct ath11k_peer *peer;
298 int ret = 0;
299
300 @@ -5194,7 +5194,7 @@ static void ath11k_mac_op_sta_set_4addr(
301 struct ieee80211_sta *sta, bool enabled)
302 {
303 struct ath11k *ar = hw->priv;
304 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
305 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
306
307 if (enabled && !arsta->use_4addr_set) {
308 ieee80211_queue_work(ar->hw, &arsta->set_4addr_wk);
309 @@ -5208,7 +5208,7 @@ static void ath11k_mac_op_sta_rc_update(
310 u32 changed)
311 {
312 struct ath11k *ar = hw->priv;
313 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
314 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
315 struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
316 struct ath11k_peer *peer;
317 u32 bw, smps;
318 @@ -6201,7 +6201,7 @@ static void ath11k_mac_op_tx(struct ieee
319 }
320
321 if (control->sta)
322 - arsta = (struct ath11k_sta *)control->sta->drv_priv;
323 + arsta = ath11k_sta_to_arsta(control->sta);
324
325 ret = ath11k_dp_tx(ar, arvif, arsta, skb);
326 if (unlikely(ret)) {
327 @@ -8233,7 +8233,7 @@ static void ath11k_mac_set_bitrate_mask_
328 struct ieee80211_sta *sta)
329 {
330 struct ath11k_vif *arvif = data;
331 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
332 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
333 struct ath11k *ar = arvif->ar;
334
335 spin_lock_bh(&ar->data_lock);
336 @@ -8637,7 +8637,7 @@ static void ath11k_mac_op_sta_statistics
337 struct ieee80211_sta *sta,
338 struct station_info *sinfo)
339 {
340 - struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
341 + struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
342 struct ath11k *ar = arsta->arvif->ar;
343 s8 signal;
344 bool db2dbm = test_bit(WMI_TLV_SERVICE_HW_DB2DBM_CONVERSION_SUPPORT,
345 --- a/drivers/net/wireless/ath/ath11k/peer.c
346 +++ b/drivers/net/wireless/ath/ath11k/peer.c
347 @@ -446,7 +446,7 @@ int ath11k_peer_create(struct ath11k *ar
348 peer->sec_type_grp = HAL_ENCRYPT_TYPE_OPEN;
349
350 if (sta) {
351 - arsta = (struct ath11k_sta *)sta->drv_priv;
352 + arsta = ath11k_sta_to_arsta(sta);
353 arsta->tcl_metadata |= FIELD_PREP(HTT_TCL_META_DATA_TYPE, 0) |
354 FIELD_PREP(HTT_TCL_META_DATA_PEER_ID,
355 peer->peer_id);
356 --- a/drivers/net/wireless/ath/ath11k/wmi.c
357 +++ b/drivers/net/wireless/ath/ath11k/wmi.c
358 @@ -6453,7 +6453,7 @@ static int ath11k_wmi_tlv_rssi_chain_par
359 goto exit;
360 }
361
362 - arsta = (struct ath11k_sta *)sta->drv_priv;
363 + arsta = ath11k_sta_to_arsta(sta);
364
365 BUILD_BUG_ON(ARRAY_SIZE(arsta->chain_signal) >
366 ARRAY_SIZE(stats_rssi->rssi_avg_beacon));
367 @@ -6541,7 +6541,7 @@ static int ath11k_wmi_tlv_fw_stats_data_
368 arvif->bssid,
369 NULL);
370 if (sta) {
371 - arsta = (struct ath11k_sta *)sta->drv_priv;
372 + arsta = ath11k_sta_to_arsta(sta);
373 arsta->rssi_beacon = src->beacon_snr;
374 ath11k_dbg(ab, ATH11K_DBG_WMI,
375 "stats vdev id %d snr %d\n",
376 @@ -7468,7 +7468,7 @@ static void ath11k_wmi_event_peer_sta_ps
377 goto exit;
378 }
379
380 - arsta = (struct ath11k_sta *)sta->drv_priv;
381 + arsta = ath11k_sta_to_arsta(sta);
382
383 spin_lock_bh(&ar->data_lock);
384