xref: /wlan-driver/qcacld-3.0/os_if/qmi/inc/os_if_qmi.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
3*5113495bSYour Name  *
4*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
5*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
6*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
7*5113495bSYour Name  *
8*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*5113495bSYour Name  */
16*5113495bSYour Name 
17*5113495bSYour Name /**
18*5113495bSYour Name  * DOC: os_if_qmi.h
19*5113495bSYour Name  *
20*5113495bSYour Name  * This file contains declarations for wrapper APIs for QMI HLOS APIs
21*5113495bSYour Name  */
22*5113495bSYour Name 
23*5113495bSYour Name #ifndef _OS_IF_QMI_H_
24*5113495bSYour Name #define _OS_IF_QMI_H_
25*5113495bSYour Name 
26*5113495bSYour Name #include "wlan_qmi_public_struct.h"
27*5113495bSYour Name #include <qdf_types.h>
28*5113495bSYour Name #include <linux/soc/qcom/qmi.h>
29*5113495bSYour Name #include <linux/net.h>
30*5113495bSYour Name #include <linux/types.h>
31*5113495bSYour Name #include "wlan_cfg80211.h"
32*5113495bSYour Name #include "wlan_objmgr_psoc_obj.h"
33*5113495bSYour Name #include <qdf_time.h>
34*5113495bSYour Name 
35*5113495bSYour Name #define QMI_WFDS_MAX_RECV_BUF_SIZE  4096
36*5113495bSYour Name #define QMI_WFDS_SERVICE_INS_ID_V01 0x0
37*5113495bSYour Name #define QMI_WFDS_TIMEOUT_MS         10000
38*5113495bSYour Name #define QMI_WFDS_TIMEOUT_JF         \
39*5113495bSYour Name 	qdf_system_msecs_to_ticks(QMI_WFDS_TIMEOUT_MS)
40*5113495bSYour Name 
41*5113495bSYour Name /**
42*5113495bSYour Name  * enum os_if_qmi_wfds_ut_cmd_type - WFDS unit test command type
43*5113495bSYour Name  * @WFDS_STOP_TRAFFIC: Stop WFDS traffic
44*5113495bSYour Name  * @WFDS_START_TRAFFIC: Start WFDS Traffic
45*5113495bSYour Name  * @WFDS_GET_STATS: Get WFDS traffic stats
46*5113495bSYour Name  * @WFDS_START_WHC: Start WHC traffic
47*5113495bSYour Name  * @WFDS_START_TSF: Start TSF handshake
48*5113495bSYour Name  * @WFDS_CMD_MISC: Miscellaneous test
49*5113495bSYour Name  * @WFDS_CMD_MAX: Max test commands
50*5113495bSYour Name  */
51*5113495bSYour Name enum os_if_qmi_wfds_ut_cmd_type {
52*5113495bSYour Name 	WFDS_STOP_TRAFFIC,
53*5113495bSYour Name 	WFDS_START_TRAFFIC,
54*5113495bSYour Name 	WFDS_GET_STATS,
55*5113495bSYour Name 	WFDS_START_WHC,
56*5113495bSYour Name 	WFDS_START_TSF,
57*5113495bSYour Name 	WFDS_CMD_MISC,
58*5113495bSYour Name 	WFDS_CMD_MAX,
59*5113495bSYour Name };
60*5113495bSYour Name 
61*5113495bSYour Name /**
62*5113495bSYour Name  * struct os_if_qmi_wfds_ut_cmd_info - WFDS UT cmd info structure
63*5113495bSYour Name  * @cmd: Command type
64*5113495bSYour Name  * @duration: Traffic duration
65*5113495bSYour Name  * @num_pkts: Buffers per flush
66*5113495bSYour Name  * @flush_period: Buffer flushing periodicity
67*5113495bSYour Name  * @buf_size: Buffer size
68*5113495bSYour Name  * @ether_type: ether_type of packet
69*5113495bSYour Name  * @dest_mac: Destination MAC address
70*5113495bSYour Name  * @src_mac: Source MAC address
71*5113495bSYour Name  * @dest_ip: Destination IPv4 address
72*5113495bSYour Name  * @src_ip: Source IPv4 address
73*5113495bSYour Name  * @dest_port: Destination port
74*5113495bSYour Name  */
75*5113495bSYour Name struct os_if_qmi_wfds_ut_cmd_info {
76*5113495bSYour Name 	enum os_if_qmi_wfds_ut_cmd_type cmd;
77*5113495bSYour Name 	uint32_t duration;
78*5113495bSYour Name 	uint32_t flush_period;
79*5113495bSYour Name 	uint32_t num_pkts;
80*5113495bSYour Name 	uint32_t buf_size;
81*5113495bSYour Name 	uint16_t ether_type;
82*5113495bSYour Name 	struct qdf_mac_addr dest_mac;
83*5113495bSYour Name 	struct qdf_mac_addr src_mac;
84*5113495bSYour Name 	struct qdf_ipv4_addr dest_ip;
85*5113495bSYour Name 	struct qdf_ipv4_addr src_ip;
86*5113495bSYour Name 	uint16_t dest_port;
87*5113495bSYour Name };
88*5113495bSYour Name 
89*5113495bSYour Name #ifdef QMI_COMPONENT_ENABLE
90*5113495bSYour Name /**
91*5113495bSYour Name  * os_if_qmi_handle_init() - Initialize QMI handle
92*5113495bSYour Name  * @qmi_hdl: QMI handle to initialize
93*5113495bSYour Name  * @recv_buf_size: maximum size of incoming message
94*5113495bSYour Name  * @ops: reference to callbacks for QRTR notifications
95*5113495bSYour Name  * @qmi_msg_handlers: NULL-terminated list of QMI message handlers
96*5113495bSYour Name  *
97*5113495bSYour Name  * Returns: QDF status
98*5113495bSYour Name  */
99*5113495bSYour Name QDF_STATUS
100*5113495bSYour Name os_if_qmi_handle_init(struct qmi_handle *qmi_hdl, qdf_size_t recv_buf_size,
101*5113495bSYour Name 		      const struct qmi_ops *ops,
102*5113495bSYour Name 		      const struct qmi_msg_handler *qmi_msg_handlers);
103*5113495bSYour Name 
104*5113495bSYour Name /**
105*5113495bSYour Name  * os_if_qmi_handle_release() - Release QMI handle
106*5113495bSYour Name  * @qmi_hdl: QMI handle to release
107*5113495bSYour Name  *
108*5113495bSYour Name  * Returns: None
109*5113495bSYour Name  */
110*5113495bSYour Name void os_if_qmi_handle_release(struct qmi_handle *qmi_hdl);
111*5113495bSYour Name 
112*5113495bSYour Name /**
113*5113495bSYour Name  * os_if_qmi_add_lookup() - Register a new lookup with the name service
114*5113495bSYour Name  * @qmi_hdl: QMI handle
115*5113495bSYour Name  * @service: service id of the request
116*5113495bSYour Name  * @instance: instance id of the request
117*5113495bSYour Name  * @version: version number of the request
118*5113495bSYour Name  *
119*5113495bSYour Name  * Return: QDF status
120*5113495bSYour Name  */
121*5113495bSYour Name QDF_STATUS os_if_qmi_add_lookup(struct qmi_handle *qmi_hdl,
122*5113495bSYour Name 				unsigned int service, unsigned int version,
123*5113495bSYour Name 				unsigned int instance);
124*5113495bSYour Name 
125*5113495bSYour Name /**
126*5113495bSYour Name  * os_if_qmi_connect_to_svc() - Connect to QMI service
127*5113495bSYour Name  * @qmi_hdl: QMI handle
128*5113495bSYour Name  * @qmi_svc: QMI service handle
129*5113495bSYour Name  *
130*5113495bSYour Name  * Return: QDF status
131*5113495bSYour Name  */
132*5113495bSYour Name QDF_STATUS os_if_qmi_connect_to_svc(struct qmi_handle *qmi_hdl,
133*5113495bSYour Name 				    struct qmi_service *qmi_svc);
134*5113495bSYour Name 
135*5113495bSYour Name /**
136*5113495bSYour Name  * os_if_qmi_txn_init() - Initialize QMI transaction
137*5113495bSYour Name  * @qmi_hdl: QMI handle
138*5113495bSYour Name  * @qmi_txn: QMI transaction handle
139*5113495bSYour Name  * @qmi_ei: description of how to decode a matching response (optional)
140*5113495bSYour Name  * @resp: pointer to the object to decode the response into (optional)
141*5113495bSYour Name  *
142*5113495bSYour Name  * Return: QDF status
143*5113495bSYour Name  */
144*5113495bSYour Name QDF_STATUS os_if_qmi_txn_init(struct qmi_handle *qmi_hdl,
145*5113495bSYour Name 			      struct qmi_txn *qmi_txn,
146*5113495bSYour Name 			      struct qmi_elem_info *qmi_ei, void *resp);
147*5113495bSYour Name 
148*5113495bSYour Name /**
149*5113495bSYour Name  * os_if_qmi_send_request() - Connect to QMI service
150*5113495bSYour Name  * @qmi_hdl: QMI handle
151*5113495bSYour Name  * @sq: destination sockaddr
152*5113495bSYour Name  * @qmi_txn: QMI transaction handle
153*5113495bSYour Name  * @msg_id: message id
154*5113495bSYour Name  * @len: max length of the QMI message
155*5113495bSYour Name  * @ei: QMI message description
156*5113495bSYour Name  * @req: message to be encoded
157*5113495bSYour Name  *
158*5113495bSYour Name  * Return: QDF status
159*5113495bSYour Name  */
160*5113495bSYour Name QDF_STATUS os_if_qmi_send_request(struct qmi_handle *qmi_hdl,
161*5113495bSYour Name 				  struct sockaddr_qrtr *sq,
162*5113495bSYour Name 				  struct qmi_txn *qmi_txn, int msg_id,
163*5113495bSYour Name 				  uint32_t len, struct qmi_elem_info *ei,
164*5113495bSYour Name 				  const void *req);
165*5113495bSYour Name 
166*5113495bSYour Name /**
167*5113495bSYour Name  * os_if_qmi_txn_wait() - Wait for transaction response
168*5113495bSYour Name  * @qmi_txn: QMI transaction handle
169*5113495bSYour Name  * @timeout: Timeout value in jiffies
170*5113495bSYour Name  *
171*5113495bSYour Name  * Return: QDF status
172*5113495bSYour Name  */
173*5113495bSYour Name QDF_STATUS os_if_qmi_txn_wait(struct qmi_txn *qmi_txn, unsigned long timeout);
174*5113495bSYour Name 
175*5113495bSYour Name /**
176*5113495bSYour Name  * os_if_qmi_txn_cancel() - Cancel the QMI transaction
177*5113495bSYour Name  * @qmi_txn: QMI transaction handle
178*5113495bSYour Name  *
179*5113495bSYour Name  * Return: None
180*5113495bSYour Name  */
181*5113495bSYour Name void os_if_qmi_txn_cancel(struct qmi_txn *qmi_txn);
182*5113495bSYour Name 
183*5113495bSYour Name /**
184*5113495bSYour Name  * os_if_qmi_register_callbacks() - Register callback handlers
185*5113495bSYour Name  * @psoc: Pointer to psoc context
186*5113495bSYour Name  * @cb_obj: Callback object pointer
187*5113495bSYour Name  *
188*5113495bSYour Name  * Return: None
189*5113495bSYour Name  */
190*5113495bSYour Name void os_if_qmi_register_callbacks(struct wlan_objmgr_psoc *psoc,
191*5113495bSYour Name 				  struct wlan_qmi_psoc_callbacks *cb_obj);
192*5113495bSYour Name 
193*5113495bSYour Name #ifdef QMI_WFDS
194*5113495bSYour Name /**
195*5113495bSYour Name  * os_if_qmi_wfds_register_callbacks() - Register WFDS callback handlers
196*5113495bSYour Name  * @cb_obj: Callback object pointer
197*5113495bSYour Name  *
198*5113495bSYour Name  * Return: None
199*5113495bSYour Name  */
200*5113495bSYour Name void os_if_qmi_wfds_register_callbacks(struct wlan_qmi_psoc_callbacks *cb_obj);
201*5113495bSYour Name 
202*5113495bSYour Name /**
203*5113495bSYour Name  * os_if_qmi_wfds_send_ut_cmd_req_msg() - Send WFDS unit test command
204*5113495bSYour Name  * @cmd_info: Unit test command info
205*5113495bSYour Name  *
206*5113495bSYour Name  * Return: QDF_STATUS
207*5113495bSYour Name  */
208*5113495bSYour Name QDF_STATUS
209*5113495bSYour Name os_if_qmi_wfds_send_ut_cmd_req_msg(struct os_if_qmi_wfds_ut_cmd_info *cmd_info);
210*5113495bSYour Name 
211*5113495bSYour Name #else
212*5113495bSYour Name static inline
os_if_qmi_wfds_register_callbacks(struct wlan_qmi_psoc_callbacks * cb_obj)213*5113495bSYour Name void os_if_qmi_wfds_register_callbacks(struct wlan_qmi_psoc_callbacks *cb_obj)
214*5113495bSYour Name {
215*5113495bSYour Name }
216*5113495bSYour Name 
217*5113495bSYour Name static inline QDF_STATUS
os_if_qmi_wfds_send_ut_cmd_req_msg(struct os_if_qmi_wfds_ut_cmd_info * cmd_info)218*5113495bSYour Name os_if_qmi_wfds_send_ut_cmd_req_msg(struct os_if_qmi_wfds_ut_cmd_info *cmd_info)
219*5113495bSYour Name {
220*5113495bSYour Name }
221*5113495bSYour Name #endif
222*5113495bSYour Name #else
223*5113495bSYour Name static inline
os_if_qmi_handle_init(struct qmi_handle * qmi_hdl,qdf_size_t recv_buf_size,const struct qmi_ops * ops,const struct qmi_msg_handler * qmi_msg_handlers)224*5113495bSYour Name QDF_STATUS os_if_qmi_handle_init(struct qmi_handle *qmi_hdl,
225*5113495bSYour Name 				 qdf_size_t recv_buf_size,
226*5113495bSYour Name 				 const struct qmi_ops *ops,
227*5113495bSYour Name 				 const struct qmi_msg_handler *qmi_msg_handlers)
228*5113495bSYour Name {
229*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
230*5113495bSYour Name }
231*5113495bSYour Name 
232*5113495bSYour Name static inline
os_if_qmi_handle_release(struct qmi_handle * qmi_hdl)233*5113495bSYour Name void os_if_qmi_handle_release(struct qmi_handle *qmi_hdl)
234*5113495bSYour Name {
235*5113495bSYour Name }
236*5113495bSYour Name 
237*5113495bSYour Name static inline
os_if_qmi_add_lookup(struct qmi_handle * qmi_hdl,unsigned int service,unsigned int version,unsigned int instance)238*5113495bSYour Name QDF_STATUS os_if_qmi_add_lookup(struct qmi_handle *qmi_hdl,
239*5113495bSYour Name 				unsigned int service, unsigned int version,
240*5113495bSYour Name 				unsigned int instance)
241*5113495bSYour Name {
242*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
243*5113495bSYour Name }
244*5113495bSYour Name 
245*5113495bSYour Name static inline
os_if_qmi_connect_to_svc(struct qmi_handle * qmi_hdl,struct qmi_service * qmi_svc)246*5113495bSYour Name QDF_STATUS os_if_qmi_connect_to_svc(struct qmi_handle *qmi_hdl,
247*5113495bSYour Name 				    struct qmi_service *qmi_svc)
248*5113495bSYour Name {
249*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
250*5113495bSYour Name }
251*5113495bSYour Name 
252*5113495bSYour Name static inline
os_if_qmi_txn_init(struct qmi_handle * qmi_hdl,struct qmi_txn * qmi_txn,struct qmi_elem_info * qmi_ei,void * resp)253*5113495bSYour Name QDF_STATUS os_if_qmi_txn_init(struct qmi_handle *qmi_hdl,
254*5113495bSYour Name 			      struct qmi_txn *qmi_txn,
255*5113495bSYour Name 			      struct qmi_elem_info *qmi_ei, void *resp)
256*5113495bSYour Name {
257*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
258*5113495bSYour Name }
259*5113495bSYour Name 
260*5113495bSYour Name static inline
os_if_qmi_send_request(struct qmi_handle * qmi_hdl,struct sockaddr_qrtr * sq,struct qmi_txn * qmi_txn,int msg_id,uint32_t len,struct qmi_elem_info * ei,const void * req)261*5113495bSYour Name QDF_STATUS os_if_qmi_send_request(struct qmi_handle *qmi_hdl,
262*5113495bSYour Name 				  struct sockaddr_qrtr *sq,
263*5113495bSYour Name 				  struct qmi_txn *qmi_txn, int msg_id,
264*5113495bSYour Name 				  uint32_t len, struct qmi_elem_info *ei,
265*5113495bSYour Name 				  const void *req)
266*5113495bSYour Name {
267*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
268*5113495bSYour Name }
269*5113495bSYour Name 
270*5113495bSYour Name static inline
os_if_qmi_txn_wait(struct qmi_txn * qmi_txn,unsigned long timeout)271*5113495bSYour Name QDF_STATUS os_if_qmi_txn_wait(struct qmi_txn *qmi_txn, unsigned long timeout)
272*5113495bSYour Name {
273*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
274*5113495bSYour Name }
275*5113495bSYour Name 
276*5113495bSYour Name static inline
os_if_qmi_txn_cancel(struct qmi_txn * qmi_txn)277*5113495bSYour Name void os_if_qmi_txn_cancel(struct qmi_txn *qmi_txn)
278*5113495bSYour Name {
279*5113495bSYour Name }
280*5113495bSYour Name 
281*5113495bSYour Name static inline
os_if_qmi_register_callbacks(struct wlan_objmgr_psoc * psoc,struct wlan_qmi_psoc_callbacks * cb_obj)282*5113495bSYour Name void os_if_qmi_register_callbacks(struct wlan_objmgr_psoc *psoc,
283*5113495bSYour Name 				  struct wlan_qmi_psoc_callbacks *cb_obj)
284*5113495bSYour Name {
285*5113495bSYour Name }
286*5113495bSYour Name #endif
287*5113495bSYour Name #endif
288