xref: /wlan-dirver/qca-wifi-host-cmn/qdf/inc/qdf_dev.h (revision 2f4b444fb7e689b83a4ab0e7b3b38f0bf4def8e0)
1 /*
2  * Copyright (c) 2018-2021 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_dev
21  * QCA driver framework (QDF) device management APIs
22  */
23 
24 #if !defined(__QDF_DEV_H)
25 #define __QDF_DEV_H
26 
27 /* Include Files */
28 #include <qdf_types.h>
29 #include "i_qdf_dev.h"
30 
31 #define qdf_cpumask_pr_args(maskp) __qdf_cpumask_pr_args(maskp)
32 #define qdf_for_each_possible_cpu(cpu) __qdf_for_each_possible_cpu(cpu)
33 #define qdf_for_each_online_cpu(cpu) __qdf_for_each_online_cpu(cpu)
34 #define qdf_for_each_cpu(cpu, maskp) __qdf_for_each_cpu(cpu, maskp)
35 #define qdf_for_each_cpu_not(cpu, maskp) \
36 __qdf_for_each_cpu_not(cpu, maskp)
37 
38 #ifdef ENHANCED_OS_ABSTRACTION
39 /**
40  * qdf_dev_alloc_mem() - allocate memory
41  * @qdfdev: Device handle
42  * @mrptr: Pointer to the allocated memory
43  * @reqsize: Allocation request in bytes
44  * @mask: Property mask to be associated to the allocated memory
45  *
46  * This function will acquire memory to be associated with a device
47  *
48  * Return: QDF_STATUS_SUCCESS on success
49  */
50 QDF_STATUS
51 qdf_dev_alloc_mem(struct qdf_dev *qdfdev, struct qdf_devm **mrptr,
52 		  uint32_t reqsize, uint32_t mask);
53 
54 /**
55  * qdf_dev_release_mem() - release memory
56  * @qdfdev: Device handle
57  * @mrptr: Pointer to the allocated memory
58  *
59  * This function will acquire memory to be associated with a device
60  *
61  * Return: QDF_STATUS_SUCCESS on success
62  */
63 QDF_STATUS
64 qdf_dev_release_mem(struct qdf_dev *qdfdev, struct qdf_devm *mrptr);
65 
66 /**
67  * qdf_dev_modify_irq() - modify irq
68  * @irnum: irq number
69  * @cmask: Bitmap to be cleared for the property mask
70  * @smask: Bitmap to be set for the property mask
71  *
72  * This function will acquire memory to be associated with a device
73  *
74  * Return: QDF_STATUS_SUCCESS on success
75  */
76 QDF_STATUS
77 qdf_dev_modify_irq_status(uint32_t irnum, unsigned long cmask,
78 			  unsigned long smask);
79 
80 /**
81  * qdf_dev_set_irq_affinity() - set irq affinity
82  * @irnum: irq number
83  * @cpmask: cpu affinity bitmap
84  *
85  * This function will set the affinity level for an irq
86  *
87  * Return: QDF_STATUS_SUCCESS on success
88  */
89 QDF_STATUS
90 qdf_dev_set_irq_affinity(uint32_t irnum, struct qdf_cpu_mask *cpmask);
91 
92 /**
93  * qdf_dev_set_irq_status_flags() - set irq status flags
94  * @irnum: irq number
95  * @set: status flag to set
96  *
97  * This function will set the status for an irq
98  *
99  * Return: QDF_STATUS_SUCCESS on success
100  */
101 QDF_STATUS
102 qdf_dev_set_irq_status_flags(unsigned int irnum, unsigned long set);
103 
104 /**
105  * qdf_dev_clear_irq_status_flags() - clear irq status flags
106  * @irnum: irq number
107  * @clear: status flag to clear
108  *
109  * This function will clear the status for an irq
110  *
111  * Return: QDF_STATUS_SUCCESS on success
112  */
113 QDF_STATUS
114 qdf_dev_clear_irq_status_flags(unsigned int irnum, unsigned long clr);
115 #else
116 static inline QDF_STATUS
117 qdf_dev_alloc_mem(struct qdf_dev *qdfdev, struct qdf_devm **mrptr,
118 		  uint32_t reqsize, uint32_t mask)
119 {
120 	return __qdf_dev_alloc_mem(qdfdev, mrptr, reqsize, mask);
121 }
122 
123 static inline QDF_STATUS
124 qdf_dev_release_mem(struct qdf_dev *qdfdev, struct qdf_devm *mrptr)
125 {
126 	return __qdf_dev_release_mem(qdfdev, mrptr);
127 }
128 
129 static inline QDF_STATUS
130 qdf_dev_modify_irq_status(uint32_t irnum, unsigned long cmask,
131 			  unsigned long smask)
132 {
133 	return __qdf_dev_modify_irq_status(irnum, cmask, smask);
134 }
135 
136 static inline QDF_STATUS
137 qdf_dev_set_irq_affinity(uint32_t irnum, struct qdf_cpu_mask *cpmask)
138 {
139 	return __qdf_dev_set_irq_affinity(irnum, cpmask);
140 }
141 
142 static inline QDF_STATUS
143 qdf_dev_set_irq_status_flags(unsigned int irnum, unsigned long set)
144 {
145 	return __qdf_dev_set_irq_status_flags(irnum, set);
146 }
147 
148 static inline QDF_STATUS
149 qdf_dev_clear_irq_status_flags(unsigned int irnum, unsigned long clr)
150 {
151 	return __qdf_dev_clear_irq_status_flags(irnum, clr);
152 }
153 #endif
154 
155 static inline int qdf_topology_physical_package_id(unsigned int cpu)
156 {
157 	return __qdf_topology_physical_package_id(cpu);
158 }
159 
160 static inline int qdf_cpumask_subset(qdf_cpu_mask *srcp1,
161 				     const qdf_cpu_mask *srcp2)
162 {
163 	return __qdf_cpumask_subset(srcp1, srcp2);
164 }
165 
166 static inline int qdf_cpumask_intersects(qdf_cpu_mask *srcp1,
167 					 const qdf_cpu_mask *srcp2)
168 {
169 	return __qdf_cpumask_intersects(srcp1, srcp2);
170 }
171 
172 static inline int qdf_core_ctl_set_boost(bool boost)
173 {
174 	return __qdf_core_ctl_set_boost(boost);
175 }
176 #endif /* __QDF_DEV_H */
177