1 /*
2  * Copyright (c) 2017-2018 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_cpuhp (CPU hotplug)
22  * QCA driver framework (QDF) CPU hotplug APIs
23  */
24 
25 #ifndef __QDF_CPUHP_H
26 #define __QDF_CPUHP_H
27 
28 #include "qdf_status.h"
29 #include "qdf_types.h"
30 
31 /*
32  * struct qdf_cpuhp_handler - an opaque hotplug event registration handle
33  */
34 struct qdf_cpuhp_handler;
35 
36 typedef void (*qdf_cpuhp_callback)(void *context, uint32_t cpu);
37 
38 #ifdef QCA_CONFIG_SMP
39 /**
40  * qdf_cpuhp_init() - Initialize the CPU hotplug event infrastructure
41  *
42  * To be called once, globally.
43  *
44  * Return: None
45  */
46 QDF_STATUS qdf_cpuhp_init(void);
47 
48 /**
49  * qdf_cpuhp_deinit() - De-initialize the CPU hotplug event infrastructure
50  *
51  * To be called once, globally.
52  *
53  * Return: None
54  */
55 QDF_STATUS qdf_cpuhp_deinit(void);
56 
57 /**
58  * qdf_cpuhp_register() - Register for CPU up/down event notifications
59  * @handler: a double pointer to the event registration handle to allocate
60  * @context: an opaque context to pass back to event listeners
61  * @up_callback: the function pointer to invoke for CPU up events
62  * @down_callback: the function pointer to invoke for CPU down events
63  *
64  * "Up" happens just after the CPU is up. Inversely, "down" happens just before
65  * the CPU goes down.
66  *
67  * @handler will point to a valid memory address on success, or NULL on failure.
68  *
69  * Return: QDF_STATUS
70  */
71 QDF_STATUS qdf_cpuhp_register(struct qdf_cpuhp_handler **handler,
72 			      void *context,
73 			      qdf_cpuhp_callback up_callback,
74 			      qdf_cpuhp_callback down_callback);
75 
76 /**
77  * qdf_cpuhp_unregister() - Un-register for CPU up/down event notifications
78  * @handler: a double pointer to the event registration handle to de-allocate
79  *
80  * @handler point to NULL upon completion
81  *
82  * Return: None
83  */
84 void qdf_cpuhp_unregister(struct qdf_cpuhp_handler **handler);
85 #else
qdf_cpuhp_init(void)86 static inline QDF_STATUS qdf_cpuhp_init(void)
87 {
88 	return QDF_STATUS_SUCCESS;
89 }
90 
qdf_cpuhp_deinit(void)91 static inline QDF_STATUS qdf_cpuhp_deinit(void)
92 {
93 	return QDF_STATUS_SUCCESS;
94 }
95 
qdf_cpuhp_register(struct qdf_cpuhp_handler ** handler,void * context,qdf_cpuhp_callback up_callback,qdf_cpuhp_callback down_callback)96 static inline QDF_STATUS qdf_cpuhp_register(struct qdf_cpuhp_handler **handler,
97 					    void *context,
98 					    qdf_cpuhp_callback up_callback,
99 					    qdf_cpuhp_callback down_callback)
100 {
101 	return QDF_STATUS_SUCCESS;
102 }
103 
qdf_cpuhp_unregister(struct qdf_cpuhp_handler ** handler)104 static inline void qdf_cpuhp_unregister(struct qdf_cpuhp_handler **handler) {}
105 #endif /* QCA_CONFIG_SMP */
106 
107 #endif /* __QDF_CPUHP_H */
108