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