123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- From 5f022c4d3be32493d500be82f51032ef4fb3cdc0 Mon Sep 17 00:00:00 2001
- From: Giulio Benetti <giulio.benetti@benettiengineering.com>
- Date: Wed, 28 Dec 2022 21:08:45 +0100
- Subject: [PATCH] Fix struct station_parameters Linux 6.1 build failure
- Starting from Linux 6.1 struct station_parameters has changed by moving
- some member to its child struct link_station_parameters. Let's extract the
- values of the needed members into local values at the beginning of
- functions and substitute the member access with the local variables.
- [Upstream status: https://github.com/embeddedTS/wilc3000-external-module/pull/2]
- Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
- ---
- cfg80211.c | 48 ++++++++++++++++++++++++++++++++----------------
- hif.c | 44 ++++++++++++++++++++++++++++++++------------
- 2 files changed, 64 insertions(+), 28 deletions(-)
- diff --git a/cfg80211.c b/cfg80211.c
- index 57c777d..bdd480c 100644
- --- a/cfg80211.c
- +++ b/cfg80211.c
- @@ -1866,6 +1866,14 @@ static int add_station(struct wiphy *wiphy, struct net_device *dev,
- struct wilc_vif *vif = netdev_priv(dev);
- struct wilc_priv *priv = &vif->priv;
- u8 *assoc_bss = priv->assoc_stainfo.sta_associated_bss[params->aid];
- +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0))
- + struct link_station_parameters *link_sta_params = ¶ms->link_sta_params;
- + const struct ieee80211_ht_cap *ht_capa = link_sta_params->ht_capa;
- + u8 supported_rates_len = link_sta_params->supported_rates_len;
- +#else
- + const struct ieee80211_ht_cap *ht_capa = params->ht_capa;
- + u8 supported_rates_len = params->supported_rates_len;
- +#endif
-
- if (vif->iftype == WILC_AP_MODE || vif->iftype == WILC_GO_MODE) {
- memcpy(assoc_bss, mac, ETH_ALEN);
- @@ -1879,27 +1887,27 @@ static int add_station(struct wiphy *wiphy, struct net_device *dev,
- params->aid);
- PRINT_INFO(vif->ndev, HOSTAPD_DBG,
- "Number of supported rates = %d\n",
- - params->supported_rates_len);
- + supported_rates_len);
-
- PRINT_INFO(vif->ndev, CFG80211_DBG, "IS HT supported = %d\n",
- - (!params->ht_capa) ? false : true);
- + (!ht_capa) ? false : true);
-
- - if (params->ht_capa) {
- + if (ht_capa) {
- PRINT_INFO(vif->ndev, CFG80211_DBG,
- "Capability Info = %d\n",
- - params->ht_capa->cap_info);
- + ht_capa->cap_info);
- PRINT_INFO(vif->ndev, CFG80211_DBG,
- "AMPDU Params = %d\n",
- - params->ht_capa->ampdu_params_info);
- + ht_capa->ampdu_params_info);
- PRINT_INFO(vif->ndev, CFG80211_DBG,
- "HT Extended params= %d\n",
- - params->ht_capa->extended_ht_cap_info);
- + ht_capa->extended_ht_cap_info);
- PRINT_INFO(vif->ndev, CFG80211_DBG,
- "Tx Beamforming Cap= %d\n",
- - params->ht_capa->tx_BF_cap_info);
- + ht_capa->tx_BF_cap_info);
- PRINT_INFO(vif->ndev, CFG80211_DBG,
- "Antenna selection info = %d\n",
- - params->ht_capa->antenna_selection_info);
- + ht_capa->antenna_selection_info);
- }
-
- PRINT_INFO(vif->ndev, CFG80211_DBG, "Flag Mask = %d\n",
- @@ -1966,6 +1974,14 @@ static int change_station(struct wiphy *wiphy, struct net_device *dev,
- {
- int ret = 0;
- struct wilc_vif *vif = netdev_priv(dev);
- +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0))
- + struct link_station_parameters *link_sta_params = ¶ms->link_sta_params;
- + const struct ieee80211_ht_cap *ht_capa = link_sta_params->ht_capa;
- + u8 supported_rates_len = link_sta_params->supported_rates_len;
- +#else
- + const struct ieee80211_ht_cap *ht_capa = params->ht_capa;
- + u8 supported_rates_len = params->supported_rates_len;
- +#endif
-
- PRINT_D(vif->ndev, CFG80211_DBG, "Change station parameters\n");
-
- @@ -1976,25 +1992,25 @@ static int change_station(struct wiphy *wiphy, struct net_device *dev,
- params->aid);
- PRINT_INFO(vif->ndev, CFG80211_DBG,
- "Number of supported rates = %d\n",
- - params->supported_rates_len);
- + supported_rates_len);
- PRINT_INFO(vif->ndev, CFG80211_DBG, "IS HT supported = %d\n",
- - (!params->ht_capa) ? false : true);
- - if (params->ht_capa) {
- + (!ht_capa) ? false : true);
- + if (ht_capa) {
- PRINT_INFO(vif->ndev, CFG80211_DBG,
- "Capability Info = %d\n",
- - params->ht_capa->cap_info);
- + ht_capa->cap_info);
- PRINT_INFO(vif->ndev, CFG80211_DBG,
- "AMPDU Params = %d\n",
- - params->ht_capa->ampdu_params_info);
- + ht_capa->ampdu_params_info);
- PRINT_INFO(vif->ndev, CFG80211_DBG,
- "HT Extended params= %d\n",
- - params->ht_capa->extended_ht_cap_info);
- + ht_capa->extended_ht_cap_info);
- PRINT_INFO(vif->ndev, CFG80211_DBG,
- "Tx Beamforming Cap= %d\n",
- - params->ht_capa->tx_BF_cap_info);
- + ht_capa->tx_BF_cap_info);
- PRINT_INFO(vif->ndev, CFG80211_DBG,
- "Antenna selection info = %d\n",
- - params->ht_capa->antenna_selection_info);
- + ht_capa->antenna_selection_info);
- }
- PRINT_INFO(vif->ndev, CFG80211_DBG, "Flag Mask = %d\n",
- params->sta_flags_mask);
- diff --git a/hif.c b/hif.c
- index 3f672a0..1a7365b 100644
- --- a/hif.c
- +++ b/hif.c
- @@ -2249,6 +2249,16 @@ int wilc_add_station(struct wilc_vif *vif, const u8 *mac,
- int result;
- struct host_if_msg *msg;
- struct add_sta_param *sta_params;
- +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0))
- + struct link_station_parameters *link_sta_params = ¶ms->link_sta_params;
- + const struct ieee80211_ht_cap *ht_capa = link_sta_params->ht_capa;
- + u8 supported_rates_len = link_sta_params->supported_rates_len;
- + const u8 *supported_rates = link_sta_params->supported_rates;
- +#else
- + const struct ieee80211_ht_cap *ht_capa = params->ht_capa;
- + u8 supported_rates_len = params->supported_rates_len;
- + const u8 *supported_rates = params->supported_rates;
- +#endif
-
- PRINT_INFO(vif->ndev, HOSTINF_DBG,
- "Setting adding station message queue params\n");
- @@ -2260,20 +2270,20 @@ int wilc_add_station(struct wilc_vif *vif, const u8 *mac,
- sta_params = &msg->body.add_sta_info;
- memcpy(sta_params->bssid, mac, ETH_ALEN);
- sta_params->aid = params->aid;
- - if (!params->ht_capa) {
- + if (!ht_capa) {
- sta_params->ht_supported = false;
- } else {
- sta_params->ht_supported = true;
- - memcpy(&sta_params->ht_capa, params->ht_capa,
- + memcpy(&sta_params->ht_capa, ht_capa,
- sizeof(struct ieee80211_ht_cap));
- }
- sta_params->flags_mask = params->sta_flags_mask;
- sta_params->flags_set = params->sta_flags_set;
-
- - sta_params->supported_rates_len = params->supported_rates_len;
- - if (params->supported_rates_len > 0) {
- - sta_params->supported_rates = kmemdup(params->supported_rates,
- - params->supported_rates_len,
- + sta_params->supported_rates_len = supported_rates_len;
- + if (supported_rates_len > 0) {
- + sta_params->supported_rates = kmemdup(supported_rates,
- + supported_rates_len,
- GFP_KERNEL);
- if (!sta_params->supported_rates) {
- kfree(msg);
- @@ -2397,6 +2407,16 @@ int wilc_edit_station(struct wilc_vif *vif, const u8 *mac,
- int result;
- struct host_if_msg *msg;
- struct add_sta_param *sta_params;
- +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0))
- + struct link_station_parameters *link_sta_params = ¶ms->link_sta_params;
- + const struct ieee80211_ht_cap *ht_capa = link_sta_params->ht_capa;
- + u8 supported_rates_len = link_sta_params->supported_rates_len;
- + const u8 *supported_rates = link_sta_params->supported_rates;
- +#else
- + const struct ieee80211_ht_cap *ht_capa = params->ht_capa;
- + u8 supported_rates_len = params->supported_rates_len;
- + const u8 *supported_rates = params->supported_rates;
- +#endif
-
- PRINT_INFO(vif->ndev, HOSTINF_DBG,
- "Setting editing station message queue params\n");
- @@ -2408,20 +2428,20 @@ int wilc_edit_station(struct wilc_vif *vif, const u8 *mac,
- sta_params = &msg->body.edit_sta_info;
- memcpy(sta_params->bssid, mac, ETH_ALEN);
- sta_params->aid = params->aid;
- - if (!params->ht_capa) {
- + if (!ht_capa) {
- sta_params->ht_supported = false;
- } else {
- sta_params->ht_supported = true;
- - memcpy(&sta_params->ht_capa, params->ht_capa,
- + memcpy(&sta_params->ht_capa, ht_capa,
- sizeof(struct ieee80211_ht_cap));
- }
- sta_params->flags_mask = params->sta_flags_mask;
- sta_params->flags_set = params->sta_flags_set;
-
- - sta_params->supported_rates_len = params->supported_rates_len;
- - if (params->supported_rates_len > 0) {
- - sta_params->supported_rates = kmemdup(params->supported_rates,
- - params->supported_rates_len,
- + sta_params->supported_rates_len = supported_rates_len;
- + if (supported_rates_len > 0) {
- + sta_params->supported_rates = kmemdup(supported_rates,
- + supported_rates_len,
- GFP_KERNEL);
- if (!sta_params->supported_rates) {
- kfree(msg);
- --
- 2.34.1
|