From e23f9dd9c62c6ebc214927ab3e34a1deefeb42fb Mon Sep 17 00:00:00 2001 From: Yun Park Date: Wed, 9 Nov 2016 10:21:38 -0800 Subject: [PATCH] qcacmn: IPA uC: Round down Tx/Rx buffer count to nearest power of two qcacld-2.0 to qcacmn propagation In certain situation, allocated Tx buffer count could be an arbitrary number, so not power of two. This could violate F/W ring buffer count requirement. If allocated Tx buffer count is not power of two, round down it to the nearest power of two. The same change is also applicable for INI parameters IpaUcTxBufCount and IpaUcRxIndRingCount. Change-Id: I7c119886a669c79adbc7bd9b2c1c1d93de41cf72 CRs-Fixed: 973723 --- qdf/inc/qdf_util.h | 14 ++++++++++++++ qdf/linux/src/i_qdf_util.h | 16 ++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/qdf/inc/qdf_util.h b/qdf/inc/qdf_util.h index 8f6f1af8f2..0e5f6065a8 100644 --- a/qdf/inc/qdf_util.h +++ b/qdf/inc/qdf_util.h @@ -506,4 +506,18 @@ uint32_t qdf_get_upper_32_bits(qdf_dma_addr_t addr) return __qdf_get_upper_32_bits(addr); } +/** + * qdf_rounddown_pow_of_two() - Round down to nearest power of two + * @n: number to be tested + * + * Test if the input number is power of two, and return the nearest power of two + * + * Return: number rounded down to the nearest power of two + */ +static inline +unsigned long qdf_rounddown_pow_of_two(unsigned long n) +{ + return __qdf_rounddown_pow_of_two(n); +} + #endif /*_QDF_UTIL_H*/ diff --git a/qdf/linux/src/i_qdf_util.h b/qdf/linux/src/i_qdf_util.h index da2b83a470..b7c51dfc70 100644 --- a/qdf/linux/src/i_qdf_util.h +++ b/qdf/linux/src/i_qdf_util.h @@ -346,5 +346,21 @@ uint32_t __qdf_get_upper_32_bits(__qdf_dma_addr_t addr) return upper_32_bits(addr); } +/** + * __qdf_rounddown_pow_of_two() - Round down to nearest power of two + * @n: number to be tested + * + * Test if the input number is power of two, and return the nearest power of two + * + * Return: number rounded down to the nearest power of two + */ +static inline +unsigned long __qdf_rounddown_pow_of_two(unsigned long n) +{ + if (is_power_of_2(n)) + return n; /* already a power of 2 */ + + return __rounddown_pow_of_two(n); +} #endif /*_I_QDF_UTIL_H*/