1 /*
2  * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 /*
18  * DOC: contains declarations for CoAP core functions
19  */
20 
21 #ifndef _WLAN_COAP_MAIN_H_
22 #define _WLAN_COAP_MAIN_H_
23 
24 #ifdef WLAN_FEATURE_COAP
25 #include "wlan_objmgr_vdev_obj.h"
26 
27 #define coap_err(params...) \
28 	QDF_TRACE_ERROR(QDF_MODULE_ID_COAP, params)
29 #define coap_info(params...) \
30 	QDF_TRACE_INFO(QDF_MODULE_ID_COAP, params)
31 #define coap_debug(params...) \
32 	QDF_TRACE_DEBUG(QDF_MODULE_ID_COAP, params)
33 
34 /**
35  * struct wlan_coap_comp_priv - CoAP component private structure
36  * @req_id: cache get request id
37  * @cache_get_cbk: Callback function to be called with the cache get result
38  * @cache_get_context: context to be used by the caller to associate the get
39  * cache request with the response
40  */
41 struct wlan_coap_comp_priv {
42 	uint32_t req_id;
43 	coap_cache_get_callback cache_get_cbk;
44 	void *cache_get_context;
45 };
46 
47 static inline struct wlan_coap_comp_priv *
wlan_get_vdev_coap_obj(struct wlan_objmgr_vdev * vdev)48 wlan_get_vdev_coap_obj(struct wlan_objmgr_vdev *vdev)
49 {
50 	return wlan_objmgr_vdev_get_comp_private_obj(vdev,
51 						     WLAN_UMAC_COMP_COAP);
52 }
53 
54 /*
55  * wlan_coap_init() - CoAP module initialization API
56  *
57  * Return: QDF_STATUS
58  */
59 QDF_STATUS wlan_coap_init(void);
60 
61 /*
62  * wlan_coap_init() - CoAP module deinitialization API
63  *
64  * Return: QDF_STATUS
65  */
66 QDF_STATUS wlan_coap_deinit(void);
67 
68 /**
69  * wlan_coap_enable(): API to enable CoAP component
70  * @psoc: pointer to psoc
71  *
72  * This API is invoked from dispatcher psoc enable.
73  * This API will register CoAP related WMI event handlers.
74  *
75  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
76  */
77 QDF_STATUS wlan_coap_enable(struct wlan_objmgr_psoc *psoc);
78 
79 /**
80  * wlan_coap_disable(): API to disable CoAP component
81  * @psoc: pointer to psoc
82  *
83  * This API is invoked from dispatcher psoc disable.
84  * This API will unregister CoAP related WMI event handlers.
85  *
86  * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
87  */
88 QDF_STATUS wlan_coap_disable(struct wlan_objmgr_psoc *psoc);
89 
90 /**
91  * wlan_coap_offload_reply_enable() - private API to enable CoAP offload reply
92  * @vdev: pointer to vdev object
93  * @param: parameters of CoAP offload reply
94  *
95  * Return: status of operation
96  */
97 QDF_STATUS
98 wlan_coap_offload_reply_enable(struct wlan_objmgr_vdev *vdev,
99 			       struct coap_offload_reply_param *param);
100 
101 /**
102  * wlan_coap_offload_reply_disable() - private API to disable CoAP offload reply
103  * @vdev: pointer to vdev object
104  * @req_id: request id
105  * @cbk: callback function to be called with the cache info
106  * @context: context to be used by the caller to associate the disable request
107  *
108  * Return: status of operation
109  */
110 QDF_STATUS
111 wlan_coap_offload_reply_disable(struct wlan_objmgr_vdev *vdev, uint32_t req_id,
112 				coap_cache_get_callback cbk, void *context);
113 
114 /**
115  * wlan_coap_offload_periodic_tx_enable() - private API to enable CoAP offload
116  * periodic transmitting
117  * @vdev: pointer to vdev object
118  * @param: parameters of CoAP periodic transmit
119  *
120  * Return: status of operation
121  */
122 QDF_STATUS
123 wlan_coap_offload_periodic_tx_enable(struct wlan_objmgr_vdev *vdev,
124 			struct coap_offload_periodic_tx_param *param);
125 
126 /**
127  * wlan_coap_offload_periodic_tx_disable() - private API to disable CoAP
128  * offload periodic transmitting
129  * @vdev: pointer to vdev object
130  * @req_id: request id
131  *
132  * Return: status of operation
133  */
134 QDF_STATUS
135 wlan_coap_offload_periodic_tx_disable(struct wlan_objmgr_vdev *vdev,
136 				      uint32_t req_id);
137 
138 /**
139  * wlan_coap_offload_cache_get() - private API to get CoAP offload cache
140  * @vdev: pointer to vdev object
141  * @req_id: request id
142  * @cbk: callback function to be called with the cache get result
143  * @context: context to be used by the caller to associate the get
144  * cache request with the response
145  *
146  * Return: status of operation
147  */
148 QDF_STATUS
149 wlan_coap_offload_cache_get(struct wlan_objmgr_vdev *vdev, uint32_t req_id,
150 			    coap_cache_get_callback cbk, void *context);
151 #endif
152 #endif
153