return 0;
 }
 
+static void wcn36xx_set_rekey_data(struct ieee80211_hw *hw,
+                                  struct ieee80211_vif *vif,
+                                  struct cfg80211_gtk_rekey_data *data)
+{
+       struct wcn36xx *wcn = hw->priv;
+       struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif);
+
+       mutex_lock(&wcn->conf_mutex);
+
+       memcpy(vif_priv->rekey_data.kek, data->kek, NL80211_KEK_LEN);
+       memcpy(vif_priv->rekey_data.kck, data->kck, NL80211_KCK_LEN);
+       vif_priv->rekey_data.replay_ctr =
+               cpu_to_le64(be64_to_cpup((__be64 *)data->replay_ctr));
+       vif_priv->rekey_data.valid = true;
+
+       mutex_unlock(&wcn->conf_mutex);
+}
+
 #endif
 
 static int wcn36xx_ampdu_action(struct ieee80211_hw *hw,
 #ifdef CONFIG_PM
        .suspend                = wcn36xx_suspend,
        .resume                 = wcn36xx_resume,
+       .set_rekey_data         = wcn36xx_set_rekey_data,
 #endif
        .config                 = wcn36xx_config,
        .prepare_multicast      = wcn36xx_prepare_multicast,
 
        unsigned long tentative_addrs[BITS_TO_LONGS(WCN36XX_HAL_IPV6_OFFLOAD_ADDR_MAX)];
        int num_target_ipv6_addrs;
 #endif
+       /* WoWLAN GTK rekey data */
+       struct {
+               u8 kck[NL80211_KCK_LEN], kek[NL80211_KEK_LEN];
+               __le64 replay_ctr;
+               bool valid;
+       } rekey_data;
 
        struct list_head sta_list;
 };