xref: /wlan-dirver/qca-wifi-host-cmn/qdf/linux/src/qdf_nbuf_frag.c (revision 45a38684b07295822dc8eba39e293408f203eec8)
1 /*
2  * Copyright (c) 2020 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /**
20  * DOC: qdf_nbuf_frag.c
21  * QCA driver framework(QDF) network nbuf frag management APIs
22  */
23 
24 #include <qdf_module.h>
25 #include <qdf_nbuf_frag.h>
26 
27 #if defined(HIF_PCI)
28 QDF_STATUS __qdf_mem_map_page(qdf_device_t osdev, __qdf_frag_t buf,
29 			      qdf_dma_dir_t dir, size_t nbytes,
30 			      qdf_dma_addr_t *phy_addr)
31 {
32 	struct page *page;
33 	unsigned long offset;
34 
35 	page = virt_to_head_page(buf);
36 	offset = buf - page_address(page);
37 	*phy_addr = dma_map_page(osdev->dev, page, offset, nbytes,
38 				 __qdf_dma_dir_to_os(dir));
39 
40 	return dma_mapping_error(osdev->dev, *phy_addr) ?
41 		QDF_STATUS_E_FAILURE : QDF_STATUS_SUCCESS;
42 }
43 #else
44 QDF_STATUS __qdf_mem_map_page(qdf_device_t osdev, __qdf_frag_t buf,
45 			      qdf_dma_dir_t dir, size_t nbytes,
46 			      qdf_dma_addr_t *phy_addr)
47 {
48 	return QDF_STATUS_SUCCESS;
49 }
50 #endif
51 
52 qdf_export_symbol(__qdf_mem_map_page);
53 
54 #if defined(HIF_PCI)
55 void __qdf_mem_unmap_page(qdf_device_t osdev, qdf_dma_addr_t paddr,
56 			  size_t nbytes, qdf_dma_dir_t dir)
57 {
58 	dma_unmap_page(osdev->dev, paddr, nbytes,
59 		       __qdf_dma_dir_to_os(dir));
60 }
61 #else
62 void __qdf_mem_unmap_page(qdf_device_t osdev, qdf_dma_addr_t paddr,
63 			  size_t nbytes, qdf_dma_dir_t dir)
64 {
65 }
66 #endif
67 
68 qdf_export_symbol(__qdf_mem_unmap_page);
69