Browse Source

qcacmn: add function for multi-pages memory zero operation

Add function qdf_mem_multi_pages_zero() to support multi-pages
memory zero operation.

Change-Id: I08b5c2722c02881550d3a1da27d5137c0957fd51
CRs-Fixed: 2776365
Jinwei Chen 4 years ago
parent
commit
21d6fd0ac6
2 changed files with 37 additions and 0 deletions
  1. 12 0
      qdf/inc/qdf_mem.h
  2. 25 0
      qdf/linux/src/qdf_mem.c

+ 12 - 0
qdf/inc/qdf_mem.h

@@ -299,6 +299,18 @@ void qdf_mem_multi_pages_free(qdf_device_t osdev,
 
 #endif /* MEMORY_DEBUG */
 
+/**
+ * qdf_mem_multi_pages_zero() - zero out each page memory
+ * @pages: Multi page information storage
+ * @cacheable: Coherent memory or cacheable memory
+ *
+ * This function will zero out each page memory
+ *
+ * Return: None
+ */
+void qdf_mem_multi_pages_zero(struct qdf_mem_multi_page_t *pages,
+			      bool cacheable);
+
 /**
  * qdf_aligned_malloc() - allocates aligned QDF memory.
  * @size: Size to be allocated

+ 25 - 0
qdf/linux/src/qdf_mem.c

@@ -1847,6 +1847,31 @@ void qdf_mem_multi_pages_free(qdf_device_t osdev,
 qdf_export_symbol(qdf_mem_multi_pages_free);
 #endif
 
+void qdf_mem_multi_pages_zero(struct qdf_mem_multi_page_t *pages,
+			      bool cacheable)
+{
+	unsigned int page_idx;
+	struct qdf_mem_dma_page_t *dma_pages;
+
+	if (!pages->page_size)
+		pages->page_size = qdf_page_size;
+
+	if (cacheable) {
+		for (page_idx = 0; page_idx < pages->num_pages; page_idx++)
+			qdf_mem_zero(pages->cacheable_pages[page_idx],
+				     pages->page_size);
+	} else {
+		dma_pages = pages->dma_pages;
+		for (page_idx = 0; page_idx < pages->num_pages; page_idx++) {
+			qdf_mem_zero(dma_pages->page_v_addr_start,
+				     pages->page_size);
+			dma_pages++;
+		}
+	}
+}
+
+qdf_export_symbol(qdf_mem_multi_pages_zero);
+
 void __qdf_mem_free(void *ptr)
 {
 	if (!ptr)