1 /* 2 * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 /** 21 * @file cdp_txrx_mon.h 22 * @brief Define the monitor mode API functions 23 * called by the host control SW and the OS interface module 24 */ 25 26 #ifndef _CDP_TXRX_MON_H_ 27 #define _CDP_TXRX_MON_H_ 28 #include "cdp_txrx_handle.h" 29 #include <cdp_txrx_cmn.h> 30 31 static inline QDF_STATUS cdp_reset_monitor_mode(ol_txrx_soc_handle soc, 32 uint8_t pdev_id, 33 u_int8_t smart_monitor) 34 { 35 if (!soc || !soc->ops) { 36 dp_cdp_debug("Invalid Instance"); 37 QDF_BUG(0); 38 return 0; 39 } 40 41 if (!soc->ops->mon_ops || 42 !soc->ops->mon_ops->txrx_reset_monitor_mode) 43 return 0; 44 45 return soc->ops->mon_ops->txrx_reset_monitor_mode(soc, pdev_id, 46 smart_monitor); 47 } 48 49 /** 50 * cdp_deliver_tx_mgmt() - Deliver mgmt frame for tx capture 51 * @soc: Datapath SOC handle 52 * @pdev_id: id of datapath PDEV handle 53 * @nbuf: Management frame buffer 54 */ 55 static inline QDF_STATUS 56 cdp_deliver_tx_mgmt(ol_txrx_soc_handle soc, uint8_t pdev_id, 57 qdf_nbuf_t nbuf) 58 { 59 if (!soc || !soc->ops) { 60 dp_cdp_debug("Invalid Instance"); 61 QDF_BUG(0); 62 return QDF_STATUS_E_FAILURE; 63 } 64 65 if (!soc->ops->mon_ops || 66 !soc->ops->mon_ops->txrx_deliver_tx_mgmt) 67 return QDF_STATUS_E_FAILURE; 68 69 return soc->ops->mon_ops->txrx_deliver_tx_mgmt(soc, pdev_id, nbuf); 70 } 71 72 #ifdef QCA_SUPPORT_LITE_MONITOR 73 /* 74 * cdp_set_lite_mon_config() - Set lite monitor config/filter 75 * 76 *@soc: dp soc handle 77 *@config: lite monitor config 78 *@pdev_id: pdev id 79 * 80 * This API is used to enable/disable lite monitor feature 81 * 82 * Return: QDF_STATUS_SUCCESS if value set successfully 83 * QDF_STATUS_E_INVAL false if error 84 */ 85 static inline QDF_STATUS 86 cdp_set_lite_mon_config(ol_txrx_soc_handle soc, 87 struct cdp_lite_mon_filter_config *config, 88 uint8_t pdev_id) 89 { 90 if (!soc || !soc->ops) { 91 dp_cdp_debug("Invalid Instance"); 92 return QDF_STATUS_E_INVAL; 93 } 94 95 if (!soc->ops->mon_ops || 96 !soc->ops->mon_ops->txrx_set_lite_mon_config) 97 return QDF_STATUS_E_INVAL; 98 99 return soc->ops->mon_ops->txrx_set_lite_mon_config(soc, config, 100 pdev_id); 101 } 102 103 /* 104 * cdp_get_lite_mon_config() - Get lite monitor config 105 * 106 *@soc: dp soc handle 107 *@config: lite monitor config 108 *@pdev_id: pdev id 109 * 110 * This API is used to get lite monitor feature config 111 * 112 * Return: QDF_STATUS_SUCCESS if get is successfully 113 * QDF_STATUS_E_INVAL false if error 114 */ 115 static inline QDF_STATUS 116 cdp_get_lite_mon_config(ol_txrx_soc_handle soc, 117 struct cdp_lite_mon_filter_config *config, 118 uint8_t pdev_id) 119 { 120 if (!soc || !soc->ops) { 121 dp_cdp_debug("Invalid Instance"); 122 return QDF_STATUS_E_INVAL; 123 } 124 125 if (!soc->ops->mon_ops || 126 !soc->ops->mon_ops->txrx_get_lite_mon_config) 127 return QDF_STATUS_E_INVAL; 128 129 return soc->ops->mon_ops->txrx_get_lite_mon_config(soc, config, 130 pdev_id); 131 } 132 133 /* 134 * cdp_set_lite_mon_peer_config() - Set lite monitor peer config 135 * 136 *@soc: dp soc handle 137 *@config: lite monitor peer config 138 *@pdev_id: pdev id 139 * 140 * This API is used to add/del lite monitor peers 141 * 142 * Return: QDF_STATUS_SUCCESS if value set successfully 143 * QDF_STATUS_E_INVAL false if error 144 */ 145 static inline QDF_STATUS 146 cdp_set_lite_mon_peer_config(ol_txrx_soc_handle soc, 147 struct cdp_lite_mon_peer_config *config, 148 uint8_t pdev_id) 149 { 150 if (!soc || !soc->ops) { 151 dp_cdp_debug("Invalid Instance"); 152 return QDF_STATUS_E_INVAL; 153 } 154 155 if (!soc->ops->mon_ops || 156 !soc->ops->mon_ops->txrx_set_lite_mon_peer_config) 157 return QDF_STATUS_E_INVAL; 158 159 return soc->ops->mon_ops->txrx_set_lite_mon_peer_config(soc, config, 160 pdev_id); 161 } 162 163 /* 164 * cdp_get_lite_mon_peer_config() - Get lite monitor peer list 165 * 166 *@soc: dp soc handle 167 *@info: lite monitor peer info 168 *@pdev_id: pdev id 169 * 170 * This API is used to get lite monitor peers 171 * 172 * Return: QDF_STATUS_SUCCESS if value set successfully 173 * QDF_STATUS_E_INVAL false if error 174 */ 175 static inline QDF_STATUS 176 cdp_get_lite_mon_peer_config(ol_txrx_soc_handle soc, 177 struct cdp_lite_mon_peer_info *info, 178 uint8_t pdev_id) 179 { 180 if (!soc || !soc->ops) { 181 dp_cdp_debug("Invalid Instance"); 182 return QDF_STATUS_E_INVAL; 183 } 184 185 if (!soc->ops->mon_ops || 186 !soc->ops->mon_ops->txrx_get_lite_mon_peer_config) 187 return QDF_STATUS_E_INVAL; 188 189 return soc->ops->mon_ops->txrx_get_lite_mon_peer_config(soc, info, 190 pdev_id); 191 } 192 193 /* 194 * cdp_is_lite_mon_enabled() - Get lite monitor enable status 195 * 196 *@soc: dp soc handle 197 *@pdev_id: pdev id 198 *@dir: direction tx/rx 199 * 200 * This API is used to get lite monitor enable status 201 * 202 * Return: 0 if disabled 203 * 1 if enabled 204 */ 205 static inline int 206 cdp_is_lite_mon_enabled(ol_txrx_soc_handle soc, 207 uint8_t pdev_id, uint8_t dir) 208 { 209 if (!soc || !soc->ops) { 210 dp_cdp_debug("Invalid Instance"); 211 return 0; 212 } 213 214 if (!soc->ops->mon_ops || 215 !soc->ops->mon_ops->txrx_is_lite_mon_enabled) 216 return 0; 217 218 return soc->ops->mon_ops->txrx_is_lite_mon_enabled(soc, pdev_id, dir); 219 } 220 #endif 221 222 #ifdef QCA_RSSI_DB2DBM 223 /* 224 * cdp_set_params_rssi_dbm_conversion - Set the rssi dbm conversion params 225 * into dp_pdev structure 226 * @soc: soc txrx handler 227 * @params: cdp_rssi_db2dbm_param_dp pointer 228 * 229 */ 230 static inline QDF_STATUS 231 cdp_set_params_rssi_dbm_conversion(ol_txrx_soc_handle soc, 232 struct cdp_rssi_db2dbm_param_dp *params) 233 { 234 if (!soc || !soc->ops) { 235 dp_cdp_debug("Invalid Instance:"); 236 QDF_BUG(0); 237 return QDF_STATUS_E_FAILURE; 238 } 239 240 if (!soc->ops->mon_ops || 241 !soc->ops->mon_ops->txrx_set_mon_pdev_params_rssi_dbm_conv) 242 return QDF_STATUS_E_FAILURE; 243 244 return soc->ops->mon_ops->txrx_set_mon_pdev_params_rssi_dbm_conv 245 (soc, params); 246 } 247 #endif 248 #endif 249