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