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