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,