Browse Source

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
Yun Park 8 years ago
parent
commit
e23f9dd9c6
2 changed files with 30 additions and 0 deletions
  1. 14 0
      qdf/inc/qdf_util.h
  2. 16 0
      qdf/linux/src/i_qdf_util.h

+ 14 - 0
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*/

+ 16 - 0
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*/