xref: /wlan-driver/qca-wifi-host-cmn/dp/inc/cdp_txrx_ppe.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 #ifndef _CDP_TXRX_PPE_H_
18*5113495bSYour Name #define _CDP_TXRX_PPE_H_
19*5113495bSYour Name 
20*5113495bSYour Name /**
21*5113495bSYour Name  * cdp_ppesds_vp_setup_fw_recovery() - Setup DS VP on FW recovery.
22*5113495bSYour Name  * @soc: data path soc handle
23*5113495bSYour Name  * @vdev_id: vdev id
24*5113495bSYour Name  * @profile_idx: DS profile index.
25*5113495bSYour Name  *
26*5113495bSYour Name  * return: qdf_status where DS VP setup is done or not.
27*5113495bSYour Name  */
28*5113495bSYour Name static inline
cdp_ppesds_vp_setup_fw_recovery(struct cdp_soc_t * soc,uint8_t vdev_id,uint16_t profile_idx)29*5113495bSYour Name QDF_STATUS cdp_ppesds_vp_setup_fw_recovery(struct cdp_soc_t *soc,
30*5113495bSYour Name 					   uint8_t vdev_id,
31*5113495bSYour Name 					   uint16_t profile_idx)
32*5113495bSYour Name {
33*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->ppeds_ops) {
34*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
35*5113495bSYour Name 			  "%s invalid instance", __func__);
36*5113495bSYour Name 		return QDF_STATUS_E_NOSUPPORT;
37*5113495bSYour Name 	}
38*5113495bSYour Name 
39*5113495bSYour Name 	if (soc->ops->ppeds_ops->ppeds_vp_setup_recovery)
40*5113495bSYour Name 		return soc->ops->ppeds_ops->ppeds_vp_setup_recovery(soc,
41*5113495bSYour Name 								    vdev_id,
42*5113495bSYour Name 								    profile_idx);
43*5113495bSYour Name 
44*5113495bSYour Name 	return QDF_STATUS_E_INVAL;
45*5113495bSYour Name }
46*5113495bSYour Name 
47*5113495bSYour Name /*
48*5113495bSYour Name  * cdp_ppesds_update_dev_stats() - Update dev stats for PPE-DS mode.
49*5113495bSYour Name  * @soc: data path soc handle
50*5113495bSYour Name  * @vp_params: VP params
51*5113495bSYour Name  * @vdev_id: vdev id
52*5113495bSYour Name  * @stats: stats pointer from ppe
53*5113495bSYour Name  *
54*5113495bSYour Name  * return: void
55*5113495bSYour Name  */
56*5113495bSYour Name static inline
cdp_ppesds_update_dev_stats(struct cdp_soc_t * soc,struct cdp_ds_vp_params * vp_params,uint16_t vdev_id,void * stats)57*5113495bSYour Name void cdp_ppesds_update_dev_stats(struct cdp_soc_t *soc,
58*5113495bSYour Name 				 struct cdp_ds_vp_params *vp_params,
59*5113495bSYour Name 				 uint16_t vdev_id, void *stats)
60*5113495bSYour Name {
61*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->ppeds_ops) {
62*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
63*5113495bSYour Name 			  "%s invalid instance", __func__);
64*5113495bSYour Name 		return;
65*5113495bSYour Name 	}
66*5113495bSYour Name 
67*5113495bSYour Name 	if (soc->ops->ppeds_ops->ppeds_stats_sync)
68*5113495bSYour Name 		return soc->ops->ppeds_ops->ppeds_stats_sync(soc,
69*5113495bSYour Name 							     vdev_id,
70*5113495bSYour Name 							     vp_params,
71*5113495bSYour Name 							     stats);
72*5113495bSYour Name }
73*5113495bSYour Name 
74*5113495bSYour Name /**
75*5113495bSYour Name  * cdp_ppesds_entry_attach() - attach the ppe vp interface.
76*5113495bSYour Name  * @soc: data path soc handle
77*5113495bSYour Name  * @vdev_id: vdev id
78*5113495bSYour Name  * @vpai: PPE VP opaque
79*5113495bSYour Name  * @ppe_vp_num: Allocated VP Port number
80*5113495bSYour Name  * @vp_params: VP params
81*5113495bSYour Name  *
82*5113495bSYour Name  * return: qdf_status where vp entry got allocated or not.
83*5113495bSYour Name  */
84*5113495bSYour Name static inline
cdp_ppesds_entry_attach(struct cdp_soc_t * soc,uint8_t vdev_id,void * vpai,int32_t * ppe_vp_num,struct cdp_ds_vp_params * vp_params)85*5113495bSYour Name QDF_STATUS cdp_ppesds_entry_attach(struct cdp_soc_t *soc, uint8_t vdev_id,
86*5113495bSYour Name 				   void *vpai, int32_t *ppe_vp_num,
87*5113495bSYour Name 				   struct cdp_ds_vp_params *vp_params)
88*5113495bSYour Name {
89*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->ppeds_ops) {
90*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
91*5113495bSYour Name 			  "%s invalid instance", __func__);
92*5113495bSYour Name 		return QDF_STATUS_E_NOSUPPORT;
93*5113495bSYour Name 	}
94*5113495bSYour Name 
95*5113495bSYour Name 	if (soc->ops->ppeds_ops->ppeds_entry_attach)
96*5113495bSYour Name 		return soc->ops->ppeds_ops->ppeds_entry_attach(soc, vdev_id,
97*5113495bSYour Name 							       vpai,
98*5113495bSYour Name 							       ppe_vp_num,
99*5113495bSYour Name 							       vp_params);
100*5113495bSYour Name 
101*5113495bSYour Name 	return QDF_STATUS_E_INVAL;
102*5113495bSYour Name }
103*5113495bSYour Name 
104*5113495bSYour Name /**
105*5113495bSYour Name  * cdp_ppesds_entry_detach() - Detach the PPE VP interface.
106*5113495bSYour Name  * @soc: data path soc handle
107*5113495bSYour Name  * @vdev_id: vdev ID
108*5113495bSYour Name  * @vp_params: VP params
109*5113495bSYour Name  *
110*5113495bSYour Name  * return: void
111*5113495bSYour Name  */
112*5113495bSYour Name static inline
cdp_ppesds_entry_detach(struct cdp_soc_t * soc,uint8_t vdev_id,struct cdp_ds_vp_params * vp_params)113*5113495bSYour Name void cdp_ppesds_entry_detach(struct cdp_soc_t *soc, uint8_t vdev_id,
114*5113495bSYour Name 			     struct cdp_ds_vp_params *vp_params)
115*5113495bSYour Name {
116*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->ppeds_ops) {
117*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
118*5113495bSYour Name 			  "%s invalid instance", __func__);
119*5113495bSYour Name 		return;
120*5113495bSYour Name 	}
121*5113495bSYour Name 
122*5113495bSYour Name 	if (soc->ops->ppeds_ops->ppeds_entry_detach)
123*5113495bSYour Name 		return soc->ops->ppeds_ops->ppeds_entry_detach(soc,
124*5113495bSYour Name 							       vdev_id,
125*5113495bSYour Name 							       vp_params);
126*5113495bSYour Name }
127*5113495bSYour Name 
128*5113495bSYour Name /**
129*5113495bSYour Name  * cdp_ppeds_attached() - Check whether ppeds attached
130*5113495bSYour Name  * @soc: data path soc handle
131*5113495bSYour Name  *
132*5113495bSYour Name  * return: true for ppeds attached otherwise false.
133*5113495bSYour Name  */
134*5113495bSYour Name static inline
cdp_ppeds_attached(struct cdp_soc_t * soc)135*5113495bSYour Name QDF_STATUS cdp_ppeds_attached(struct cdp_soc_t *soc)
136*5113495bSYour Name {
137*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->ppeds_ops)
138*5113495bSYour Name 		return false;
139*5113495bSYour Name 
140*5113495bSYour Name 	return true;
141*5113495bSYour Name }
142*5113495bSYour Name 
143*5113495bSYour Name /**
144*5113495bSYour Name  * cdp_ppesds_set_int_pri2tid() - Set the INT_PRI to TID
145*5113495bSYour Name  * @soc: data path soc handle
146*5113495bSYour Name  * @pri2tid: PRI2TID table
147*5113495bSYour Name  *
148*5113495bSYour Name  * return: void
149*5113495bSYour Name  */
150*5113495bSYour Name static inline
cdp_ppesds_set_int_pri2tid(struct cdp_soc_t * soc,uint8_t * pri2tid)151*5113495bSYour Name void cdp_ppesds_set_int_pri2tid(struct cdp_soc_t *soc,
152*5113495bSYour Name 				uint8_t *pri2tid)
153*5113495bSYour Name {
154*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->ppeds_ops) {
155*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
156*5113495bSYour Name 			  "%s invalid instance", __func__);
157*5113495bSYour Name 		return;
158*5113495bSYour Name 	}
159*5113495bSYour Name 
160*5113495bSYour Name 	if (soc->ops->ppeds_ops->ppeds_set_int_pri2tid)
161*5113495bSYour Name 		return soc->ops->ppeds_ops->ppeds_set_int_pri2tid(soc, pri2tid);
162*5113495bSYour Name }
163*5113495bSYour Name 
164*5113495bSYour Name /**
165*5113495bSYour Name  * cdp_ppesds_update_int_pri2tid() - Update the INT_PRI to TID
166*5113495bSYour Name  * @soc: data path soc handle
167*5113495bSYour Name  * @pri: Priority index
168*5113495bSYour Name  * @tid: TID mapped to the input priority
169*5113495bSYour Name  *
170*5113495bSYour Name  * return: void
171*5113495bSYour Name  */
172*5113495bSYour Name static inline
cdp_ppesds_update_int_pri2tid(struct cdp_soc_t * soc,uint8_t pri,uint8_t tid)173*5113495bSYour Name void cdp_ppesds_update_int_pri2tid(struct cdp_soc_t *soc,
174*5113495bSYour Name 				   uint8_t pri, uint8_t tid)
175*5113495bSYour Name {
176*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->ppeds_ops) {
177*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
178*5113495bSYour Name 			  "%s invalid instance", __func__);
179*5113495bSYour Name 	}
180*5113495bSYour Name 
181*5113495bSYour Name 	if (soc->ops->ppeds_ops->ppeds_update_int_pri2tid)
182*5113495bSYour Name 		return soc->ops->ppeds_ops->ppeds_update_int_pri2tid(soc, pri,
183*5113495bSYour Name 								     tid);
184*5113495bSYour Name }
185*5113495bSYour Name 
186*5113495bSYour Name /**
187*5113495bSYour Name  * cdp_ppesds_entry_dump() - Dump the PPE VP entries
188*5113495bSYour Name  * @soc: data path soc handle
189*5113495bSYour Name  *
190*5113495bSYour Name  * return: void
191*5113495bSYour Name  */
192*5113495bSYour Name static inline
cdp_ppesds_entry_dump(struct cdp_soc_t * soc)193*5113495bSYour Name void cdp_ppesds_entry_dump(struct cdp_soc_t *soc)
194*5113495bSYour Name {
195*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->ppeds_ops) {
196*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
197*5113495bSYour Name 			  "%s invalid instance", __func__);
198*5113495bSYour Name 		return;
199*5113495bSYour Name 	}
200*5113495bSYour Name 
201*5113495bSYour Name 	if (soc->ops->ppeds_ops->ppeds_entry_dump)
202*5113495bSYour Name 		soc->ops->ppeds_ops->ppeds_entry_dump(soc);
203*5113495bSYour Name }
204*5113495bSYour Name 
205*5113495bSYour Name /**
206*5113495bSYour Name  * cdp_ppesds_enable_pri2tid() - Enable PPE VP PRI2TID table
207*5113495bSYour Name  * @soc: data path soc handle
208*5113495bSYour Name  * @vdev_id: vdev id
209*5113495bSYour Name  * @val: Boolean value to enable/disable
210*5113495bSYour Name  *
211*5113495bSYour Name  * return: QDF_STATUS
212*5113495bSYour Name  */
213*5113495bSYour Name static inline
cdp_ppesds_enable_pri2tid(struct cdp_soc_t * soc,uint8_t vdev_id,bool val)214*5113495bSYour Name QDF_STATUS cdp_ppesds_enable_pri2tid(struct cdp_soc_t *soc,
215*5113495bSYour Name 				     uint8_t vdev_id, bool val)
216*5113495bSYour Name {
217*5113495bSYour Name 	if (!soc || !soc->ops || !soc->ops->ppeds_ops) {
218*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
219*5113495bSYour Name 			  "%s invalid instance", __func__);
220*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
221*5113495bSYour Name 	}
222*5113495bSYour Name 
223*5113495bSYour Name 	if (soc->ops->ppeds_ops->ppeds_enable_pri2tid)
224*5113495bSYour Name 		return soc->ops->ppeds_ops->ppeds_enable_pri2tid(soc, vdev_id,
225*5113495bSYour Name 								 val);
226*5113495bSYour Name 
227*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
228*5113495bSYour Name }
229*5113495bSYour Name #endif /* _CDP_TXRX_PPE_H_ */
230