xref: /wlan-dirver/qca-wifi-host-cmn/qdf/linux/src/i_qdf_nbuf_frag.h (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: i_qdf_nbuf_frag.h
21  * This file provides OS dependent nbuf frag API's.
22  */
23 
24 #ifndef _I_QDF_NBUF_FRAG_H
25 #define _I_QDF_NBUF_FRAG_H
26 
27 #include <qdf_net_types.h>
28 #include <qdf_mem.h>
29 
30 /**
31  * typedef __qdf_frag_t - Abstraction for void * for frag address
32  */
33 typedef void *__qdf_frag_t;
34 
35 /**
36  * Maximum number of frags an SKB can hold
37  */
38 #define __QDF_NBUF_MAX_FRAGS MAX_SKB_FRAGS
39 
40 /**
41  * __qdf_mem_unmap_page() - Unmap frag memory
42  * @osdev: qdf_device_t
43  * @paddr: Address to be unmapped
44  * @nbytes: Number of bytes to be unmapped
45  * @dir: qdf_dma_dir_t
46  */
47 void __qdf_mem_unmap_page(qdf_device_t osdev, qdf_dma_addr_t paddr,
48 			  size_t nbytes, qdf_dma_dir_t dir);
49 
50 /**
51  * __qdf_mem_map_page() - Map frag memory
52  * @osdev: qdf_device_t
53  * @buf: Vaddr to be mapped
54  * @dir: qdf_dma_dir_t
55  * @nbytes: Number of bytes to be mapped
56  * @paddr: Mapped physical address
57  *
58  * Return: QDF_STATUS
59  */
60 QDF_STATUS __qdf_mem_map_page(qdf_device_t osdev, __qdf_frag_t buf,
61 			      qdf_dma_dir_t dir, size_t nbytes,
62 			      qdf_dma_addr_t *phy_addr);
63 
64 /**
65  * __qdf_frag_free() - Free allocated frag memory
66  * @vaddr: Frag address to be freed
67  */
68 static inline void __qdf_frag_free(__qdf_frag_t vaddr)
69 {
70 	skb_free_frag(vaddr);
71 }
72 
73 /**
74  * __qdf_frag_alloc() - Allocate frag Memory
75  * @fragsz: Size of frag memory to be allocated
76  *
77  * Return: Allocated frag addr.
78  */
79 static inline __qdf_frag_t __qdf_frag_alloc(unsigned int fragsz)
80 {
81 	return netdev_alloc_frag(fragsz);
82 }
83 #endif /* _I_QDF_NBUF_FRAG_H */
84