1 /* 2 * Copyright (c) 2016-2018, 2021 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 #ifndef _WLAN_MGMT_TXRX_TGT_API_H_ 20 #define _WLAN_MGMT_TXRX_TGT_API_H_ 21 22 /** 23 * DOC: wlan_mgmt_txrx_tgt_api.h 24 * 25 * management tx/rx layer public API and structures for 26 * umac southbound interface. 27 * 28 */ 29 30 #include "wlan_objmgr_cmn.h" 31 #include <wlan_objmgr_pdev_obj.h> 32 #include "wlan_mgmt_txrx_utils_api.h" 33 #include "qdf_nbuf.h" 34 #include <wlan_lmac_if_def.h> 35 36 /** 37 * tgt_mgmt_txrx_rx_frame_handler() - handles rx mgmt. frames 38 * @psoc: psoc context 39 * @buf: buffer 40 * @mgmt_rx_params: rx event params 41 * 42 * This function handles mgmt. rx frames and is registered to southbound 43 * interface through rx ops. 44 * 45 * Return: QDF_STATUS_SUCCESS - in case of success 46 */ 47 QDF_STATUS tgt_mgmt_txrx_rx_frame_handler( 48 struct wlan_objmgr_psoc *psoc, 49 qdf_nbuf_t buf, 50 struct mgmt_rx_event_params *mgmt_rx_params); 51 52 /** 53 * tgt_mgmt_txrx_tx_completion_handler() - handles mgmt. tx completions 54 * @pdev: pdev context 55 * @desc_id: mgmt desc. id 56 * @status: status of download of tx packet 57 * @tx_compl_params: tx completion params 58 * 59 * This function handles tx completions of mgmt. frames and is registered to 60 * LMAC_if layer through lmac_if cbs.The cb needs to free the nbuf. In case no 61 * callback is registered, this function will free the nbuf. 62 * 63 * Return: QDF_STATUS_SUCCESS - in case of success 64 */ 65 QDF_STATUS tgt_mgmt_txrx_tx_completion_handler( 66 struct wlan_objmgr_pdev *pdev, 67 uint32_t desc_id, uint32_t status, 68 void *tx_compl_params); 69 70 /** 71 * tgt_mgmt_txrx_get_nbuf_from_desc_id() - extracts nbuf from mgmt desc 72 * @pdev: pdev context 73 * @desc_id: desc_id 74 * 75 * This function extracts nbuf from mgmt desc extracted from desc id. 76 * 77 * Return: nbuf - in case of success 78 * NULL - in case of failure 79 */ 80 qdf_nbuf_t tgt_mgmt_txrx_get_nbuf_from_desc_id( 81 struct wlan_objmgr_pdev *pdev, 82 uint32_t desc_id); 83 84 /** 85 * tgt_mgmt_txrx_get_peer_from_desc_id() - extracts peer from mgmt desc 86 * @pdev: pdev context 87 * @desc_id: desc_id 88 * 89 * This function extracts peer from mgmt desc extracted from desc id. 90 * 91 * Return: peer - in case of success 92 * NULL - in case of failure 93 */ 94 struct wlan_objmgr_peer * 95 tgt_mgmt_txrx_get_peer_from_desc_id( 96 struct wlan_objmgr_pdev *pdev, 97 uint32_t desc_id); 98 99 /** 100 * tgt_mgmt_txrx_get_vdev_id_from_desc_id() - extracts vdev id from mgmt desc 101 * @pdev: pdev context 102 * @desc_id: desc_id 103 * 104 * This function extracts vdev id from mgmt desc extracted from desc id. 105 * 106 * Return: vdev_id - in case of success 107 * WLAN_UMAC_VDEV_ID_MAX - in case of failure 108 */ 109 uint8_t tgt_mgmt_txrx_get_vdev_id_from_desc_id( 110 struct wlan_objmgr_pdev *pdev, 111 uint32_t desc_id); 112 113 /** 114 * tgt_mgmt_txrx_get_free_desc_pool_count() - get free mgmt desc count 115 * @pdev: pdev context 116 * 117 * This function returns the count of free mgmt descriptors. 118 * 119 * Return: free descpriptor count 120 */ 121 uint32_t tgt_mgmt_txrx_get_free_desc_pool_count( 122 struct wlan_objmgr_pdev *pdev); 123 124 /** 125 * tgt_mgmt_txrx_register_ev_handler() - Register to mgmt txrx WMI events 126 * @psoc: Pointer to psoc object 127 * 128 * Return: QDF_STATUS of operation 129 */ 130 QDF_STATUS 131 tgt_mgmt_txrx_register_ev_handler(struct wlan_objmgr_psoc *psoc); 132 133 /** 134 * tgt_mgmt_txrx_unregister_ev_handler() - Unregister to mgmt txrx WMI events 135 * @psoc: Pointer to psoc object 136 * 137 * Return: QDF_STATUS of operation 138 */ 139 QDF_STATUS 140 tgt_mgmt_txrx_unregister_ev_handler(struct wlan_objmgr_psoc *psoc); 141 142 /** 143 * wlan_psoc_get_mgmt_txrx_txops() - Get txops of MGMT TxRx module using psoc 144 * @psoc: Pointer to psoc object 145 * 146 * Return: txops of MGMT TxRx module on success, otherwise NULL 147 */ 148 static inline struct wlan_lmac_if_mgmt_txrx_tx_ops * 149 wlan_psoc_get_mgmt_txrx_txops(struct wlan_objmgr_psoc *psoc) 150 { 151 struct wlan_lmac_if_tx_ops *tx_ops; 152 153 if (!psoc) { 154 mgmt_txrx_err("psoc is null"); 155 return NULL; 156 } 157 158 tx_ops = wlan_psoc_get_lmac_if_txops(psoc); 159 if (!tx_ops) { 160 mgmt_txrx_err("tx_ops is NULL"); 161 return NULL; 162 } 163 164 return &tx_ops->mgmt_txrx_tx_ops; 165 } 166 167 /** 168 * wlan_pdev_get_mgmt_txrx_txops() - Get txops of MGMT TxRx module using pdev 169 * @pdev: Pointer to pdev object 170 * 171 * Return: txops of MGMT TxRx module on success, otherwise NULL 172 */ 173 static inline struct wlan_lmac_if_mgmt_txrx_tx_ops * 174 wlan_pdev_get_mgmt_txrx_txops(struct wlan_objmgr_pdev *pdev) 175 { 176 if (!pdev) { 177 mgmt_txrx_err("pdev is null"); 178 return NULL; 179 } 180 181 return wlan_psoc_get_mgmt_txrx_txops(wlan_pdev_get_psoc(pdev)); 182 } 183 184 /** 185 * tgt_mgmt_txrx_process_rx_frame() - Process management rx frames 186 * @pdev: pdev for which this management frame is intended 187 * @buf: buffer 188 * @mgmt_rx_params: rx event params 189 * 190 * This API processes MGMT Rx frames and delivers them to the upper layers. 191 * 192 * Return: QDF_STATUS of operation. 193 */ 194 QDF_STATUS tgt_mgmt_txrx_process_rx_frame( 195 struct wlan_objmgr_pdev *pdev, 196 qdf_nbuf_t buf, 197 struct mgmt_rx_event_params *mgmt_rx_params); 198 199 /** 200 * tgt_mgmt_txrx_rx_frame_entry() - Entry point to the MGMT TxRx module for 201 * management Rx frames. 202 * @pdev: pdev for which this management frame is intended 203 * @buf: buffer 204 * @mgmt_rx_params: rx event params 205 * 206 * Return: QDF_STATUS of operation. 207 */ 208 QDF_STATUS tgt_mgmt_txrx_rx_frame_entry( 209 struct wlan_objmgr_pdev *pdev, 210 qdf_nbuf_t buf, 211 struct mgmt_rx_event_params *mgmt_rx_params); 212 #endif 213