1 /*
2  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: qdf_dev
22  * QCA driver framework (QDF) device management APIs
23  */
24 
25 #if !defined(__QDF_DEV_H)
26 #define __QDF_DEV_H
27 
28 /* Include Files */
29 #include <qdf_types.h>
30 #include "i_qdf_dev.h"
31 
32 #define qdf_cpumask_pr_args(maskp) __qdf_cpumask_pr_args(maskp)
33 #define qdf_for_each_possible_cpu(cpu) __qdf_for_each_possible_cpu(cpu)
34 #define qdf_for_each_online_cpu(cpu) __qdf_for_each_online_cpu(cpu)
35 #define qdf_for_each_cpu(cpu, maskp) __qdf_for_each_cpu(cpu, maskp)
36 #define qdf_for_each_cpu_not(cpu, maskp) \
37 __qdf_for_each_cpu_not(cpu, maskp)
38 
39 #ifdef ENHANCED_OS_ABSTRACTION
40 /**
41  * qdf_dev_alloc_mem() - allocate memory
42  * @qdfdev: Device handle
43  * @mrptr: Pointer to the allocated memory
44  * @reqsize: Allocation request in bytes
45  * @mask: Property mask to be associated to the allocated memory
46  *
47  * This function will acquire memory to be associated with a device
48  *
49  * Return: QDF_STATUS_SUCCESS on success
50  */
51 QDF_STATUS
52 qdf_dev_alloc_mem(struct qdf_dev *qdfdev, struct qdf_devm **mrptr,
53 		  uint32_t reqsize, uint32_t mask);
54 
55 /**
56  * qdf_dev_release_mem() - release memory
57  * @qdfdev: Device handle
58  * @mrptr: Pointer to the allocated memory
59  *
60  * This function will acquire memory to be associated with a device
61  *
62  * Return: QDF_STATUS_SUCCESS on success
63  */
64 QDF_STATUS
65 qdf_dev_release_mem(struct qdf_dev *qdfdev, struct qdf_devm *mrptr);
66 
67 /**
68  * qdf_dev_modify_irq_status() - modify irq
69  * @irnum: irq number
70  * @cmask: Bitmap to be cleared for the property mask
71  * @smask: Bitmap to be set for the property mask
72  *
73  * This function will acquire memory to be associated with a device
74  *
75  * Return: QDF_STATUS_SUCCESS on success
76  */
77 QDF_STATUS
78 qdf_dev_modify_irq_status(uint32_t irnum, unsigned long cmask,
79 			  unsigned long smask);
80 
81 /**
82  * qdf_dev_set_irq_affinity() - set irq affinity
83  * @irnum: irq number
84  * @cpmask: cpu affinity bitmap
85  *
86  * This function will set the affinity level for an irq
87  *
88  * Return: QDF_STATUS_SUCCESS on success
89  */
90 QDF_STATUS
91 qdf_dev_set_irq_affinity(uint32_t irnum, struct qdf_cpu_mask *cpmask);
92 
93 /**
94  * qdf_dev_set_irq_status_flags() - set irq status flags
95  * @irnum: irq number
96  * @set: status flag to set
97  *
98  * This function will set the status for an irq
99  *
100  * Return: QDF_STATUS_SUCCESS on success
101  */
102 QDF_STATUS
103 qdf_dev_set_irq_status_flags(unsigned int irnum, unsigned long set);
104 
105 /**
106  * qdf_dev_clear_irq_status_flags() - clear irq status flags
107  * @irnum: irq number
108  * @clr: status flag to clear
109  *
110  * This function will clear the status for an irq
111  *
112  * Return: QDF_STATUS_SUCCESS on success
113  */
114 QDF_STATUS
115 qdf_dev_clear_irq_status_flags(unsigned int irnum, unsigned long clr);
116 #else
117 static inline QDF_STATUS
qdf_dev_alloc_mem(struct qdf_dev * qdfdev,struct qdf_devm ** mrptr,uint32_t reqsize,uint32_t mask)118 qdf_dev_alloc_mem(struct qdf_dev *qdfdev, struct qdf_devm **mrptr,
119 		  uint32_t reqsize, uint32_t mask)
120 {
121 	return __qdf_dev_alloc_mem(qdfdev, mrptr, reqsize, mask);
122 }
123 
124 static inline QDF_STATUS
qdf_dev_release_mem(struct qdf_dev * qdfdev,struct qdf_devm * mrptr)125 qdf_dev_release_mem(struct qdf_dev *qdfdev, struct qdf_devm *mrptr)
126 {
127 	return __qdf_dev_release_mem(qdfdev, mrptr);
128 }
129 
130 static inline QDF_STATUS
qdf_dev_modify_irq_status(uint32_t irnum,unsigned long cmask,unsigned long smask)131 qdf_dev_modify_irq_status(uint32_t irnum, unsigned long cmask,
132 			  unsigned long smask)
133 {
134 	return __qdf_dev_modify_irq_status(irnum, cmask, smask);
135 }
136 
137 static inline QDF_STATUS
qdf_dev_set_irq_affinity(uint32_t irnum,struct qdf_cpu_mask * cpmask)138 qdf_dev_set_irq_affinity(uint32_t irnum, struct qdf_cpu_mask *cpmask)
139 {
140 	return __qdf_dev_set_irq_affinity(irnum, cpmask);
141 }
142 
143 static inline QDF_STATUS
qdf_dev_set_irq_status_flags(unsigned int irnum,unsigned long set)144 qdf_dev_set_irq_status_flags(unsigned int irnum, unsigned long set)
145 {
146 	return __qdf_dev_set_irq_status_flags(irnum, set);
147 }
148 
149 static inline QDF_STATUS
qdf_dev_clear_irq_status_flags(unsigned int irnum,unsigned long clr)150 qdf_dev_clear_irq_status_flags(unsigned int irnum, unsigned long clr)
151 {
152 	return __qdf_dev_clear_irq_status_flags(irnum, clr);
153 }
154 #endif
155 
qdf_topology_physical_package_id(unsigned int cpu)156 static inline int qdf_topology_physical_package_id(unsigned int cpu)
157 {
158 	return __qdf_topology_physical_package_id(cpu);
159 }
160 
qdf_cpumask_subset(qdf_cpu_mask * srcp1,const qdf_cpu_mask * srcp2)161 static inline int qdf_cpumask_subset(qdf_cpu_mask *srcp1,
162 				     const qdf_cpu_mask *srcp2)
163 {
164 	return __qdf_cpumask_subset(srcp1, srcp2);
165 }
166 
qdf_cpumask_intersects(qdf_cpu_mask * srcp1,const qdf_cpu_mask * srcp2)167 static inline int qdf_cpumask_intersects(qdf_cpu_mask *srcp1,
168 					 const qdf_cpu_mask *srcp2)
169 {
170 	return __qdf_cpumask_intersects(srcp1, srcp2);
171 }
172 
qdf_core_ctl_set_boost(bool boost)173 static inline int qdf_core_ctl_set_boost(bool boost)
174 {
175 	return __qdf_core_ctl_set_boost(boost);
176 }
177 #endif /* __QDF_DEV_H */
178