xref: /linux/net/mac80211/uhr.c (revision c17ee635fd3a482b2ad2bf5e269755c2eae5f25e)
1*a1085114SJohannes Berg // SPDX-License-Identifier: GPL-2.0-only
2*a1085114SJohannes Berg /*
3*a1085114SJohannes Berg  * UHR handling
4*a1085114SJohannes Berg  *
5*a1085114SJohannes Berg  * Copyright(c) 2025-2026 Intel Corporation
6*a1085114SJohannes Berg  */
7*a1085114SJohannes Berg 
8*a1085114SJohannes Berg #include "ieee80211_i.h"
9*a1085114SJohannes Berg 
10*a1085114SJohannes Berg void
11*a1085114SJohannes Berg ieee80211_uhr_cap_ie_to_sta_uhr_cap(struct ieee80211_sub_if_data *sdata,
12*a1085114SJohannes Berg 				    struct ieee80211_supported_band *sband,
13*a1085114SJohannes Berg 				    const struct ieee80211_uhr_cap *uhr_cap,
14*a1085114SJohannes Berg 				    u8 uhr_cap_len,
15*a1085114SJohannes Berg 				    struct link_sta_info *link_sta)
16*a1085114SJohannes Berg {
17*a1085114SJohannes Berg 	struct ieee80211_sta_uhr_cap *sta_uhr_cap = &link_sta->pub->uhr_cap;
18*a1085114SJohannes Berg 	bool from_ap;
19*a1085114SJohannes Berg 
20*a1085114SJohannes Berg 	memset(sta_uhr_cap, 0, sizeof(*sta_uhr_cap));
21*a1085114SJohannes Berg 
22*a1085114SJohannes Berg 	if (!ieee80211_get_uhr_iftype_cap_vif(sband, &sdata->vif))
23*a1085114SJohannes Berg 		return;
24*a1085114SJohannes Berg 
25*a1085114SJohannes Berg 	sta_uhr_cap->has_uhr = true;
26*a1085114SJohannes Berg 
27*a1085114SJohannes Berg 	sta_uhr_cap->mac = uhr_cap->mac;
28*a1085114SJohannes Berg 	from_ap = sdata->vif.type == NL80211_IFTYPE_STATION;
29*a1085114SJohannes Berg 	sta_uhr_cap->phy = *ieee80211_uhr_phy_cap(uhr_cap, from_ap);
30*a1085114SJohannes Berg }
31