xref: /wlan-driver/qca-wifi-host-cmn/dp/inc/cdp_txrx_mlo.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2021-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 #ifndef _CDP_TXRX_MLO_H_
17*5113495bSYour Name #define _CDP_TXRX_MLO_H_
18*5113495bSYour Name #include "cdp_txrx_ops.h"
19*5113495bSYour Name 
20*5113495bSYour Name struct cdp_mlo_ctxt;
21*5113495bSYour Name 
22*5113495bSYour Name static inline
cdp_mlo_ctxt_attach(ol_txrx_soc_handle soc,struct cdp_ctrl_mlo_mgr * ctrl_ctxt)23*5113495bSYour Name struct cdp_mlo_ctxt *cdp_mlo_ctxt_attach(ol_txrx_soc_handle soc,
24*5113495bSYour Name 					 struct cdp_ctrl_mlo_mgr *ctrl_ctxt)
25*5113495bSYour Name {
26*5113495bSYour Name 	if (!soc || !soc->ops) {
27*5113495bSYour Name 		QDF_BUG(0);
28*5113495bSYour Name 		return NULL;
29*5113495bSYour Name 	}
30*5113495bSYour Name 
31*5113495bSYour Name 	if (!soc->ops->mlo_ops ||
32*5113495bSYour Name 	    !soc->ops->mlo_ops->mlo_ctxt_attach)
33*5113495bSYour Name 		return NULL;
34*5113495bSYour Name 
35*5113495bSYour Name 	return soc->ops->mlo_ops->mlo_ctxt_attach(ctrl_ctxt);
36*5113495bSYour Name }
37*5113495bSYour Name 
38*5113495bSYour Name static inline
cdp_mlo_ctxt_detach(ol_txrx_soc_handle soc,struct cdp_mlo_ctxt * ml_ctxt)39*5113495bSYour Name void cdp_mlo_ctxt_detach(ol_txrx_soc_handle soc,
40*5113495bSYour Name 			 struct cdp_mlo_ctxt *ml_ctxt)
41*5113495bSYour Name {
42*5113495bSYour Name 	if (!soc || !soc->ops) {
43*5113495bSYour Name 		QDF_BUG(0);
44*5113495bSYour Name 		return;
45*5113495bSYour Name 	}
46*5113495bSYour Name 
47*5113495bSYour Name 	if (!soc->ops->mlo_ops ||
48*5113495bSYour Name 	    !soc->ops->mlo_ops->mlo_ctxt_detach)
49*5113495bSYour Name 		return;
50*5113495bSYour Name 
51*5113495bSYour Name 	soc->ops->mlo_ops->mlo_ctxt_detach(ml_ctxt);
52*5113495bSYour Name }
53*5113495bSYour Name 
cdp_soc_mlo_soc_setup(ol_txrx_soc_handle soc,struct cdp_mlo_ctxt * mlo_ctx)54*5113495bSYour Name static inline void cdp_soc_mlo_soc_setup(ol_txrx_soc_handle soc,
55*5113495bSYour Name 					 struct cdp_mlo_ctxt *mlo_ctx)
56*5113495bSYour Name {
57*5113495bSYour Name 	if (!soc || !soc->ops) {
58*5113495bSYour Name 		QDF_BUG(0);
59*5113495bSYour Name 		return;
60*5113495bSYour Name 	}
61*5113495bSYour Name 
62*5113495bSYour Name 	if (!soc->ops->mlo_ops ||
63*5113495bSYour Name 	    !soc->ops->mlo_ops->mlo_soc_setup)
64*5113495bSYour Name 		return;
65*5113495bSYour Name 
66*5113495bSYour Name 	soc->ops->mlo_ops->mlo_soc_setup(soc, mlo_ctx);
67*5113495bSYour Name }
68*5113495bSYour Name 
cdp_soc_mlo_soc_teardown(ol_txrx_soc_handle soc,struct cdp_mlo_ctxt * mlo_ctx,bool is_force_down)69*5113495bSYour Name static inline void cdp_soc_mlo_soc_teardown(ol_txrx_soc_handle soc,
70*5113495bSYour Name 					    struct cdp_mlo_ctxt *mlo_ctx,
71*5113495bSYour Name 					    bool is_force_down)
72*5113495bSYour Name {
73*5113495bSYour Name 	if (!soc || !soc->ops) {
74*5113495bSYour Name 		QDF_BUG(0);
75*5113495bSYour Name 		return;
76*5113495bSYour Name 	}
77*5113495bSYour Name 
78*5113495bSYour Name 	if (!soc->ops->mlo_ops ||
79*5113495bSYour Name 	    !soc->ops->mlo_ops->mlo_soc_teardown)
80*5113495bSYour Name 		return;
81*5113495bSYour Name 
82*5113495bSYour Name 	soc->ops->mlo_ops->mlo_soc_teardown(soc, mlo_ctx, is_force_down);
83*5113495bSYour Name }
84*5113495bSYour Name 
cdp_mlo_setup_complete(ol_txrx_soc_handle soc,struct cdp_mlo_ctxt * mlo_ctx)85*5113495bSYour Name static inline void cdp_mlo_setup_complete(ol_txrx_soc_handle soc,
86*5113495bSYour Name 					  struct cdp_mlo_ctxt *mlo_ctx)
87*5113495bSYour Name {
88*5113495bSYour Name 	if (!soc || !soc->ops) {
89*5113495bSYour Name 		QDF_BUG(0);
90*5113495bSYour Name 		return;
91*5113495bSYour Name 	}
92*5113495bSYour Name 
93*5113495bSYour Name 	if (!soc->ops->mlo_ops ||
94*5113495bSYour Name 	    !soc->ops->mlo_ops->mlo_setup_complete)
95*5113495bSYour Name 		return;
96*5113495bSYour Name 
97*5113495bSYour Name 	soc->ops->mlo_ops->mlo_setup_complete(mlo_ctx);
98*5113495bSYour Name }
99*5113495bSYour Name 
100*5113495bSYour Name /*
101*5113495bSYour Name  * cdp_mlo_update_delta_tsf2 - Update delta_tsf2
102*5113495bSYour Name  * @soc: soc handle
103*5113495bSYour Name  * @pdev_id: pdev id
104*5113495bSYour Name  * @delta_tsf2: delta_tsf2
105*5113495bSYour Name  *
106*5113495bSYour Name  * return: none
107*5113495bSYour Name  */
cdp_mlo_update_delta_tsf2(ol_txrx_soc_handle soc,uint8_t pdev_id,uint64_t delta_tsf2)108*5113495bSYour Name static inline void cdp_mlo_update_delta_tsf2(ol_txrx_soc_handle soc,
109*5113495bSYour Name 					     uint8_t pdev_id,
110*5113495bSYour Name 					     uint64_t delta_tsf2)
111*5113495bSYour Name {
112*5113495bSYour Name 	if (!soc || !soc->ops) {
113*5113495bSYour Name 		QDF_BUG(0);
114*5113495bSYour Name 		return;
115*5113495bSYour Name 	}
116*5113495bSYour Name 
117*5113495bSYour Name 	if (!soc->ops->mlo_ops ||
118*5113495bSYour Name 	    !soc->ops->mlo_ops->mlo_update_delta_tsf2)
119*5113495bSYour Name 		return;
120*5113495bSYour Name 
121*5113495bSYour Name 	soc->ops->mlo_ops->mlo_update_delta_tsf2(soc, pdev_id, delta_tsf2);
122*5113495bSYour Name }
123*5113495bSYour Name 
124*5113495bSYour Name /*
125*5113495bSYour Name  * cdp_mlo_update_delta_tqm - Update delta_tqm
126*5113495bSYour Name  * @soc: soc handle
127*5113495bSYour Name  * @delta_tqm: delta_tqm
128*5113495bSYour Name  *
129*5113495bSYour Name  * return: none
130*5113495bSYour Name  */
cdp_mlo_update_delta_tqm(ol_txrx_soc_handle soc,uint64_t delta_tqm)131*5113495bSYour Name static inline void cdp_mlo_update_delta_tqm(ol_txrx_soc_handle soc,
132*5113495bSYour Name 					    uint64_t delta_tqm)
133*5113495bSYour Name {
134*5113495bSYour Name 	if (!soc || !soc->ops) {
135*5113495bSYour Name 		QDF_BUG(0);
136*5113495bSYour Name 		return;
137*5113495bSYour Name 	}
138*5113495bSYour Name 
139*5113495bSYour Name 	if (!soc->ops->mlo_ops ||
140*5113495bSYour Name 	    !soc->ops->mlo_ops->mlo_update_delta_tqm)
141*5113495bSYour Name 		return;
142*5113495bSYour Name 
143*5113495bSYour Name 	soc->ops->mlo_ops->mlo_update_delta_tqm(soc, delta_tqm);
144*5113495bSYour Name }
145*5113495bSYour Name 
146*5113495bSYour Name /*
147*5113495bSYour Name  * cdp_mlo_get_mld_vdev_stats - Get MLD vdev stats
148*5113495bSYour Name  * @soc: soc handle
149*5113495bSYour Name  * @vdev_id: vdev_id of one of the vdev's of the MLD group
150*5113495bSYour Name  * @buf: buffer to hold vdev_stats
151*5113495bSYour Name  * @link_vdev_only: flag to indicate if stats are required for specific vdev
152*5113495bSYour Name  *
153*5113495bSYour Name  * return: QDF_STATUS
154*5113495bSYour Name  */
155*5113495bSYour Name static inline QDF_STATUS
cdp_mlo_get_mld_vdev_stats(ol_txrx_soc_handle soc,uint8_t vdev_id,struct cdp_vdev_stats * buf,bool link_vdev_only)156*5113495bSYour Name cdp_mlo_get_mld_vdev_stats(ol_txrx_soc_handle soc,
157*5113495bSYour Name 			   uint8_t vdev_id, struct cdp_vdev_stats *buf,
158*5113495bSYour Name 			   bool link_vdev_only)
159*5113495bSYour Name {
160*5113495bSYour Name 	if (!soc || !soc->ops) {
161*5113495bSYour Name 		QDF_BUG(0);
162*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
163*5113495bSYour Name 	}
164*5113495bSYour Name 
165*5113495bSYour Name 	if (!soc->ops->mlo_ops || !soc->ops->mlo_ops->mlo_get_mld_vdev_stats)
166*5113495bSYour Name 		return QDF_STATUS_E_FAILURE;
167*5113495bSYour Name 
168*5113495bSYour Name 	return soc->ops->mlo_ops->mlo_get_mld_vdev_stats(soc,
169*5113495bSYour Name 							 vdev_id,
170*5113495bSYour Name 							 buf,
171*5113495bSYour Name 							 link_vdev_only);
172*5113495bSYour Name }
173*5113495bSYour Name #endif /*_CDP_TXRX_MLO_H_*/
174