On 1/10/2024 8:50 PM, Sriram R wrote: > Since the vdev create for a corresponding vif is deferred > until a channel is assigned, cache the information which > are received through mac80211 ops between add_interface() > and assign_vif_chanctx() and set them once the vdev is > created on one of the ath12k radios as the channel gets > assigned via assign_vif_chanctx(). > > Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1 > Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 > > Signed-off-by: Sriram R <quic_srirrama@xxxxxxxxxxx> > --- ... > +static int ath12k_mac_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, > + struct ieee80211_vif *vif, struct ieee80211_sta *sta, > + struct ieee80211_key_conf *key) > +{ > + struct ath12k_hw *ah = ath12k_hw_to_ah(hw); > + struct ath12k *ar; > + struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif); > + int ret; > + > + /* BIP needs to be done in software */ > + if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC || > + key->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_128 || > + key->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_256 || > + key->cipher == WLAN_CIPHER_SUITE_BIP_CMAC_256) > + return 1; I know this in the existing code, but what is the significance of returning 1? Should this be returning a -errno like the error cases that follow? > + > + if (key->keyidx > WMI_MAX_KEY_INDEX) > + return -ENOSPC; > + > + mutex_lock(&ah->conf_mutex); > + > + ar = ath12k_get_ar_by_vif(hw, vif); > + if (!ar) { > + /* ar is expected to be valid when sta ptr is available */ > + if (sta) { > + mutex_unlock(&ah->conf_mutex); > + WARN_ON_ONCE(1); > + return -EINVAL; > + } > + arvif->cache.key_conf.cmd = cmd; > + arvif->cache.key_conf.key = key; > + arvif->cache.key_conf.changed = true; > + mutex_unlock(&ah->conf_mutex); > + return 0; > + } > + > + mutex_lock(&ar->conf_mutex); > + ret = ath12k_mac_set_key(ar, cmd, vif, sta, key); > mutex_unlock(&ar->conf_mutex); > + > mutex_unlock(&ah->conf_mutex); > return ret; > }