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