1 /* 2 * Copyright (c) 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 any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 /** 19 * DOC: wlan_mgmt_txrx_rx_reo_tgt_api.h 20 * This file contains mgmt rx re-ordering tgt layer related APIs 21 */ 22 23 #ifndef _WLAN_MGMT_TXRX_RX_REO_TGT_API_H 24 #define _WLAN_MGMT_TXRX_RX_REO_TGT_API_H 25 #include <wlan_objmgr_pdev_obj.h> 26 #include <qdf_types.h> 27 #include <wlan_mgmt_txrx_rx_reo_public_structs.h> 28 #include <wlan_mgmt_txrx_rx_reo_utils_api.h> 29 #include <wlan_mgmt_txrx_tgt_api.h> 30 #include <wlan_lmac_if_def.h> 31 32 #ifdef WLAN_MGMT_RX_REO_SUPPORT 33 /** 34 * wlan_pdev_get_mgmt_rx_reo_txops() - Get management rx-reorder txops from pdev 35 * @pdev: Pointer to pdev object 36 * 37 * Return: Pointer to management rx-reorder txops in case of success, else NULL 38 */ 39 static inline struct wlan_lmac_if_mgmt_rx_reo_tx_ops * 40 wlan_pdev_get_mgmt_rx_reo_txops(struct wlan_objmgr_pdev *pdev) 41 { 42 struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops; 43 44 mgmt_txrx_tx_ops = wlan_pdev_get_mgmt_txrx_txops(pdev); 45 if (!mgmt_txrx_tx_ops) { 46 mgmt_txrx_err("txops is null for mgmt txrx module"); 47 return NULL; 48 } 49 50 return &mgmt_txrx_tx_ops->mgmt_rx_reo_tx_ops; 51 } 52 53 /** 54 * wlan_psoc_get_mgmt_rx_reo_txops() - Get management rx-reorder txops from psoc 55 * @psoc: Pointer to psoc object 56 * 57 * Return: Pointer to management rx-reorder txops in case of success, else NULL 58 */ 59 static inline struct wlan_lmac_if_mgmt_rx_reo_tx_ops * 60 wlan_psoc_get_mgmt_rx_reo_txops(struct wlan_objmgr_psoc *psoc) 61 { 62 struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops; 63 64 mgmt_txrx_tx_ops = wlan_psoc_get_mgmt_txrx_txops(psoc); 65 if (!mgmt_txrx_tx_ops) { 66 mgmt_txrx_err("txops is null for mgmt txrx module"); 67 return NULL; 68 } 69 70 return &mgmt_txrx_tx_ops->mgmt_rx_reo_tx_ops; 71 } 72 73 /** 74 * tgt_mgmt_rx_reo_get_num_active_hw_links() - Get number of active MLO HW 75 * links 76 * @psoc: Pointer to psoc object 77 * @num_active_hw_links: pointer to number of active MLO HW links 78 * 79 * Get number of active MLO HW links from the MLO global shared memory arena. 80 * 81 * Return: QDF_STATUS 82 */ 83 QDF_STATUS 84 tgt_mgmt_rx_reo_get_num_active_hw_links(struct wlan_objmgr_psoc *psoc, 85 int8_t *num_active_hw_links); 86 87 /** 88 * tgt_mgmt_rx_reo_get_valid_hw_link_bitmap() - Get valid MLO HW link bitmap 89 * @psoc: Pointer to psoc object 90 * @valid_hw_link_bitmap: Pointer to valid MLO HW link bitmap 91 * 92 * Get valid MLO HW link bitmap from the MLO global shared memory arena. 93 * 94 * Return: QDF_STATUS 95 */ 96 QDF_STATUS 97 tgt_mgmt_rx_reo_get_valid_hw_link_bitmap(struct wlan_objmgr_psoc *psoc, 98 uint16_t *valid_hw_link_bitmap); 99 100 /** 101 * tgt_mgmt_rx_reo_read_snapshot() - Read management rx-reorder snapshot 102 * @pdev: Pointer to pdev object 103 * @snapshot_info: Snapshot info 104 * @id: Snapshot ID 105 * @value: Pointer to the snapshot value where the snapshot 106 * should be written 107 * 108 * Read management rx-reorder snapshots from target. 109 * 110 * Return: QDF_STATUS 111 */ 112 QDF_STATUS 113 tgt_mgmt_rx_reo_read_snapshot( 114 struct wlan_objmgr_pdev *pdev, 115 struct mgmt_rx_reo_snapshot_info *snapshot_info, 116 enum mgmt_rx_reo_shared_snapshot_id id, 117 struct mgmt_rx_reo_snapshot_params *value, 118 struct mgmt_rx_reo_shared_snapshot (*raw_snapshot) 119 [MGMT_RX_REO_SNAPSHOT_B2B_READ_SWAR_RETRY_LIMIT]); 120 121 /** 122 * tgt_mgmt_rx_reo_fw_consumed_event_handler() - MGMT Rx REO FW consumed 123 * event handler 124 * @pdev: pdev for which this event is intended 125 * @params: Pointer to MGMT Rx REO parameters 126 * 127 * Return: QDF_STATUS of operation 128 */ 129 QDF_STATUS 130 tgt_mgmt_rx_reo_fw_consumed_event_handler(struct wlan_objmgr_pdev *pdev, 131 struct mgmt_rx_reo_params *params); 132 133 /** 134 * tgt_mgmt_rx_reo_filter_config() - Configure MGMT Rx REO filter 135 * @pdev: Pointer to pdev object 136 * @filter: Pointer to MGMT Rx REO filter 137 * 138 * Return: QDF_STATUS_SUCCESS for success or error code 139 */ 140 QDF_STATUS tgt_mgmt_rx_reo_filter_config(struct wlan_objmgr_pdev *pdev, 141 struct mgmt_rx_reo_filter *filter); 142 143 /** 144 * tgt_mgmt_rx_reo_get_snapshot_info() - Get information regarding management 145 * rx-reorder snapshot 146 * @pdev: Pointer to pdev object 147 * @id: Snapshot ID 148 * @snapshot_info: Pointer to snapshot info 149 * 150 * Return: QDF_STATUS 151 */ 152 QDF_STATUS 153 tgt_mgmt_rx_reo_get_snapshot_info 154 (struct wlan_objmgr_pdev *pdev, 155 enum mgmt_rx_reo_shared_snapshot_id id, 156 struct mgmt_rx_reo_snapshot_info *snapshot_info); 157 158 /** 159 * tgt_mgmt_rx_reo_frame_handler() - REO handler for management Rx frames. 160 * @pdev: pdev for which this management frame is intended 161 * @buf: buffer 162 * @mgmt_rx_params: rx event params 163 * 164 * Return: QDF_STATUS of operation. 165 */ 166 QDF_STATUS tgt_mgmt_rx_reo_frame_handler( 167 struct wlan_objmgr_pdev *pdev, 168 qdf_nbuf_t buf, 169 struct mgmt_rx_event_params *mgmt_rx_params); 170 171 /** 172 * tgt_mgmt_rx_reo_host_drop_handler() - MGMT Rx REO handler for the 173 * management Rx frames that gets dropped in the Host before entering 174 * MGMT Rx REO algorithm 175 * @pdev: pdev for which this frame was intended 176 * @params: MGMT Rx event parameters 177 * 178 * Return: QDF_STATUS of operation 179 */ 180 QDF_STATUS 181 tgt_mgmt_rx_reo_host_drop_handler(struct wlan_objmgr_pdev *pdev, 182 struct mgmt_rx_reo_params *params); 183 #else 184 /** 185 * tgt_mgmt_rx_reo_frame_handler() - REO handler for 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 * Return: QDF_STATUS of operation. 191 */ 192 static inline QDF_STATUS tgt_mgmt_rx_reo_frame_handler( 193 struct wlan_objmgr_pdev *pdev, 194 qdf_nbuf_t buf, 195 struct mgmt_rx_event_params *mgmt_rx_params) 196 { 197 /** 198 * If MGMT Rx REO feature is not compiled, 199 * process the frame right away. 200 */ 201 return tgt_mgmt_txrx_process_rx_frame(pdev, buf, mgmt_rx_params); 202 } 203 #endif /* WLAN_MGMT_RX_REO_SUPPORT */ 204 #endif /* _WLAN_MGMT_TXRX_RX_REO_TGT_API_H */ 205