Merge "qcacmn: For STA mode, set ucast key for bsspeer macaddr in crypto setkey"
diff --git a/qdf/inc/qdf_time.h b/qdf/inc/qdf_time.h
index 97cc43d..50cec46 100644
--- a/qdf/inc/qdf_time.h
+++ b/qdf/inc/qdf_time.h
@@ -91,11 +91,20 @@
* Return:
* The time since system booted in nanoseconds
*/
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(3, 10, 0))
static inline s64 qdf_get_bootbased_boottime_ns(void)
{
return ktime_get_boot_ns();
}
+#else
+static inline s64 qdf_get_bootbased_boottime_ns(void)
+{
+ return ktime_to_ns(ktime_get_boottime());
+}
+#endif
+
/**
* qdf_get_system_timestamp - Return current timestamp
*
diff --git a/qdf/inc/qdf_util.h b/qdf/inc/qdf_util.h
index b5b19f2..c2c4823 100644
--- a/qdf/inc/qdf_util.h
+++ b/qdf/inc/qdf_util.h
@@ -603,6 +603,19 @@
}
/**
+ * qdf_do_div() - wrapper function for kernel macro(do_div).
+ * @dividend: Dividend value
+ * @divisor : Divisor value
+ *
+ * Return: Quotient
+ */
+static inline
+uint64_t qdf_do_div(uint64_t dividend, uint32_t divisor)
+{
+ return __qdf_do_div(dividend, divisor);
+}
+
+/**
* qdf_get_random_bytes() - returns nbytes bytes of random
* data
*
diff --git a/qdf/linux/src/i_qdf_util.h b/qdf/linux/src/i_qdf_util.h
index e419dd6..6068291 100644
--- a/qdf/linux/src/i_qdf_util.h
+++ b/qdf/linux/src/i_qdf_util.h
@@ -422,4 +422,19 @@
return get_random_bytes(buf, nbytes);
}
+/**
+ * __qdf_do_div() - wrapper function for kernel macro(do_div).
+ * @dividend: Dividend value
+ * @divisor : Divisor value
+ *
+ * Return: Quotient
+ */
+static inline
+uint64_t __qdf_do_div(uint64_t dividend, uint32_t divisor)
+{
+ do_div(dividend, divisor);
+ /*do_div macro updates dividend with Quotient of dividend/divisor */
+ return dividend;
+}
+
#endif /*_I_QDF_UTIL_H*/
diff --git a/umac/cmn_services/crypto/src/wlan_crypto_global_api.c b/umac/cmn_services/crypto/src/wlan_crypto_global_api.c
index 66016e5..bbe047c 100644
--- a/umac/cmn_services/crypto/src/wlan_crypto_global_api.c
+++ b/umac/cmn_services/crypto/src/wlan_crypto_global_api.c
@@ -382,6 +382,20 @@
}
key = crypto_priv->key[req_key->keyix];
}
+ if (vdev_mode == QDF_STA_MODE) {
+ peer = wlan_vdev_get_bsspeer(vdev);
+ if (!peer) {
+ qdf_print("%s[%d] peer is null\n",
+ __func__, __LINE__);
+ return QDF_STATUS_E_INVAL;
+ }
+ wlan_objmgr_peer_try_get_ref(peer, WLAN_CRYPTO_ID);
+ wlan_peer_obj_lock(peer);
+ qdf_mem_copy(macaddr, wlan_peer_get_macaddr(peer),
+ WLAN_ALEN);
+ wlan_peer_obj_unlock(peer);
+ wlan_objmgr_peer_release_ref(peer, WLAN_CRYPTO_ID);
+ }
} else {
peer = wlan_objmgr_get_peer_by_mac_n_vdev(
psoc,