xref: /wlan-dirver/qca-wifi-host-cmn/qdf/linux/src/i_qdf_dev.h (revision dd4dc88b837a295134aa9869114a2efee0f4894b)
1 /*
2  * Copyright (c) 2019 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(__I_QDF_DEV_H)
25 #define __I_QDF_DEV_H
26 
27 /* Include Files */
28 #include <qdf_types.h>
29 #include "qdf_util.h"
30 #include <linux/irq.h>
31 
32 struct qdf_cpu_mask;
33 struct qdf_devm;
34 struct qdf_dev;
35 
36 /**
37  * __qdf_dev_alloc_mem() - allocate memory
38  * @qdfdev: Device handle
39  * @mrptr: Pointer to the allocated memory
40  * @reqsize: Allocation request in bytes
41  * @mask: Property mask to be associated to the allocated memory
42  *
43  * This function will acquire memory to be associated with a device
44  *
45  * Return: QDF_STATUS_SUCCESS on success
46  */
47 static inline QDF_STATUS
48 __qdf_dev_alloc_mem(struct qdf_dev *qdfdev, struct qdf_devm **mrptr,
49 		    uint32_t reqsize, uint32_t mask)
50 {
51 	*mrptr = devm_kzalloc((struct device *)qdfdev, reqsize, mask);
52 
53 	if (!*mrptr)
54 		return QDF_STATUS_E_NOMEM;
55 
56 	return QDF_STATUS_SUCCESS;
57 }
58 
59 /**
60  * __qdf_dev_release_mem() - release memory
61  * @qdfdev: Device handle
62  * @mrptr: Pointer to the allocated memory
63  *
64  * This function will acquire memory to be associated with a device
65  *
66  * Return: QDF_STATUS_SUCCESS on success
67  */
68 static inline QDF_STATUS
69 __qdf_dev_release_mem(struct qdf_dev *qdfdev, struct qdf_devm *mrptr)
70 {
71 	devm_kfree((struct device *)qdfdev, mrptr);
72 
73 	return QDF_STATUS_SUCCESS;
74 }
75 
76 /**
77  * __qdf_dev_modify_irq() - modify irq
78  * @irnum: irq number
79  * @cmask: Bitmap to be cleared for the property mask
80  * @smask: Bitmap to be set for the property mask
81  *
82  * This function will modify the properties of the irq associated with a device
83  *
84  * Return: QDF_STATUS_SUCCESS on success
85  */
86 static inline QDF_STATUS
87 __qdf_dev_modify_irq_status(uint32_t irnum, unsigned long cmask,
88 			    unsigned long smask)
89 {
90 	irq_modify_status(irnum, cmask, smask);
91 
92 	return QDF_STATUS_SUCCESS;
93 }
94 
95 /**
96  * __qdf_dev_set_irq_affinity() - set irq affinity
97  * @irnum: irq number
98  * @cpmask: cpu affinity bitmap
99  *
100  * This function will set the affinity level for an irq
101  *
102  * Return: QDF_STATUS_SUCCESS on success
103  */
104 static inline QDF_STATUS
105 __qdf_dev_set_irq_affinity(uint32_t irnum, struct qdf_cpu_mask *cpmask)
106 {
107 	int ret;
108 
109 	ret = irq_set_affinity_hint(irnum, (struct cpumask *)cpmask);
110 
111 	return qdf_status_from_os_return(ret);
112 }
113 #endif /* __I_QDF_DEV_H */
114