فهرست منبع

Merge "qcacmn: For STA mode, set ucast key for bsspeer macaddr in crypto setkey"

Linux Build Service Account 7 سال پیش
والد
کامیت
cc203fd391
4فایلهای تغییر یافته به همراه51 افزوده شده و 0 حذف شده
  1. 9 0
      qdf/inc/qdf_time.h
  2. 13 0
      qdf/inc/qdf_util.h
  3. 15 0
      qdf/linux/src/i_qdf_util.h
  4. 14 0
      umac/cmn_services/crypto/src/wlan_crypto_global_api.c

+ 9 - 0
qdf/inc/qdf_time.h

@@ -91,11 +91,20 @@ static inline qdf_time_t qdf_get_system_uptime(void)
  * 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
  *

+ 13 - 0
qdf/inc/qdf_util.h

@@ -602,6 +602,19 @@ int qdf_set_dma_coherent_mask(struct device *dev, uint8_t addr_bits)
 	return __qdf_set_dma_coherent_mask(dev, addr_bits);
 }
 
+/**
+ * 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

+ 15 - 0
qdf/linux/src/i_qdf_util.h

@@ -422,4 +422,19 @@ void __qdf_get_random_bytes(void *buf, int nbytes)
 	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*/

+ 14 - 0
umac/cmn_services/crypto/src/wlan_crypto_global_api.c

@@ -382,6 +382,20 @@ QDF_STATUS wlan_crypto_setkey(struct wlan_objmgr_vdev *vdev,
 			}
 			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,