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 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 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 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 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 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 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 156 static inline int qdf_topology_physical_package_id(unsigned int cpu) 157 { 158 return __qdf_topology_physical_package_id(cpu); 159 } 160 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 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 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