diff --git a/qdf/inc/qdf_time.h b/qdf/inc/qdf_time.h index 97cc43d5dc13..50cec4673a5d 100644 --- a/qdf/inc/qdf_time.h +++ b/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 * diff --git a/qdf/inc/qdf_util.h b/qdf/inc/qdf_util.h index b5b19f22cda1..c2c4823d1eaa 100644 --- a/qdf/inc/qdf_util.h +++ b/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 diff --git a/qdf/linux/src/i_qdf_util.h b/qdf/linux/src/i_qdf_util.h index e419dd6498d9..6068291823ef 100644 --- a/qdf/linux/src/i_qdf_util.h +++ b/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*/ 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 66016e59cb89..bbe047c80d88 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 @@ 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,