1 /* 2 * Copyright (c) 2021, The Linux Foundation. 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 /** 18 * DOC: wlan_mgmt_txrx_rx_reo_tgt_api.h 19 * This file contains mgmt rx re-ordering tgt layer related APIs 20 */ 21 22 #ifndef _WLAN_MGMT_TXRX_RX_REO_TGT_API_H 23 #define _WLAN_MGMT_TXRX_RX_REO_TGT_API_H 24 #include <wlan_objmgr_pdev_obj.h> 25 #include <qdf_types.h> 26 #include <wlan_mgmt_txrx_rx_reo_public_structs.h> 27 #include <wlan_mgmt_txrx_rx_reo_utils_api.h> 28 #include <wlan_mgmt_txrx_tgt_api.h> 29 #include <wlan_lmac_if_def.h> 30 31 #ifdef WLAN_MGMT_RX_REO_SUPPORT 32 /** 33 * wlan_pdev_get_mgmt_rx_reo_txops() - Get management rx-reorder txops from pdev 34 * @pdev: Pointer to pdev object 35 * 36 * Return: Pointer to management rx-reorder txops in case of success, else NULL 37 */ 38 static inline struct wlan_lmac_if_mgmt_rx_reo_tx_ops * 39 wlan_pdev_get_mgmt_rx_reo_txops(struct wlan_objmgr_pdev *pdev) 40 { 41 struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops; 42 43 mgmt_txrx_tx_ops = wlan_pdev_get_mgmt_txrx_txops(pdev); 44 if (!mgmt_txrx_tx_ops) { 45 mgmt_txrx_err("txops is null for mgmt txrx module"); 46 return NULL; 47 } 48 49 return &mgmt_txrx_tx_ops->mgmt_rx_reo_tx_ops; 50 } 51 52 /** 53 * wlan_psoc_get_mgmt_rx_reo_txops() - Get management rx-reorder txops from psoc 54 * @psoc: Pointer to psoc object 55 * 56 * Return: Pointer to management rx-reorder txops in case of success, else NULL 57 */ 58 static inline struct wlan_lmac_if_mgmt_rx_reo_tx_ops * 59 wlan_psoc_get_mgmt_rx_reo_txops(struct wlan_objmgr_psoc *psoc) 60 { 61 struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops; 62 63 mgmt_txrx_tx_ops = wlan_psoc_get_mgmt_txrx_txops(psoc); 64 if (!mgmt_txrx_tx_ops) { 65 mgmt_txrx_err("txops is null for mgmt txrx module"); 66 return NULL; 67 } 68 69 return &mgmt_txrx_tx_ops->mgmt_rx_reo_tx_ops; 70 } 71 72 /** 73 * tgt_mgmt_rx_reo_read_snapshot() - Read management rx-reorder snapshot 74 * @pdev: Pointer to pdev object 75 * @address: Snapshot address 76 * @id: Snapshot ID 77 * @value: Pointer to the snapshot value where the snapshot 78 * should be written 79 * 80 * Read management rx-reorder snapshots from target. 81 * 82 * Return: QDF_STATUS 83 */ 84 QDF_STATUS 85 tgt_mgmt_rx_reo_read_snapshot( 86 struct wlan_objmgr_pdev *pdev, 87 struct mgmt_rx_reo_snapshot *address, 88 enum mgmt_rx_reo_shared_snapshot_id id, 89 struct mgmt_rx_reo_snapshot_params *value); 90 91 /** 92 * tgt_mgmt_rx_reo_fw_consumed_event_handler() - MGMT Rx REO FW consumed 93 * event handler 94 * @pdev: pdev for which this event is intended 95 * @params: Pointer to MGMT Rx REO parameters 96 * 97 * Return: QDF_STATUS of operation 98 */ 99 QDF_STATUS 100 tgt_mgmt_rx_reo_fw_consumed_event_handler(struct wlan_objmgr_pdev *pdev, 101 struct mgmt_rx_reo_params *params); 102 103 /** 104 * tgt_mgmt_rx_reo_filter_config() - Configure MGMT Rx REO filter 105 * @pdev: Pointer to pdev object 106 * @filter: Pointer to MGMT Rx REO filter 107 * 108 * Return: QDF_STATUS_SUCCESS for success or error code 109 */ 110 QDF_STATUS tgt_mgmt_rx_reo_filter_config(struct wlan_objmgr_pdev *pdev, 111 struct mgmt_rx_reo_filter *filter); 112 113 /** 114 * tgt_mgmt_rx_reo_get_snapshot_address() - Get management rx-reorder 115 * snapshot address(virtual address) in host memory 116 * @pdev: Pointer to pdev object 117 * @id: Snapshot ID 118 * @snapshot_address: Pointer to snapshot address where the address 119 * needs to be written 120 * 121 * Return: QDF_STATUS 122 */ 123 QDF_STATUS 124 tgt_mgmt_rx_reo_get_snapshot_address( 125 struct wlan_objmgr_pdev *pdev, 126 enum mgmt_rx_reo_shared_snapshot_id id, 127 struct mgmt_rx_reo_snapshot **address); 128 129 /** 130 * tgt_mgmt_rx_reo_frame_handler() - REO handler for management Rx frames. 131 * @pdev: pdev for which this management frame is intended 132 * @buf: buffer 133 * @mgmt_rx_params: rx event params 134 * 135 * Return: QDF_STATUS of operation. 136 */ 137 QDF_STATUS tgt_mgmt_rx_reo_frame_handler( 138 struct wlan_objmgr_pdev *pdev, 139 qdf_nbuf_t buf, 140 struct mgmt_rx_event_params *mgmt_rx_params); 141 142 /** 143 * tgt_mgmt_rx_reo_host_drop_handler() - MGMT Rx REO handler for the 144 * management Rx frames that gets dropped in the Host before entering 145 * MGMT Rx REO algorithm 146 * @pdev: pdev for which this frame was intended 147 * @params: MGMT Rx event parameters 148 * 149 * Return: QDF_STATUS of operation 150 */ 151 QDF_STATUS 152 tgt_mgmt_rx_reo_host_drop_handler(struct wlan_objmgr_pdev *pdev, 153 struct mgmt_rx_reo_params *params); 154 #else 155 /** 156 * tgt_mgmt_rx_reo_frame_handler() - REO handler for management Rx frames. 157 * @pdev: pdev for which this management frame is intended 158 * @buf: buffer 159 * @mgmt_rx_params: rx event params 160 * 161 * Return: QDF_STATUS of operation. 162 */ 163 static inline QDF_STATUS tgt_mgmt_rx_reo_frame_handler( 164 struct wlan_objmgr_pdev *pdev, 165 qdf_nbuf_t buf, 166 struct mgmt_rx_event_params *mgmt_rx_params) 167 { 168 /** 169 * If MGMT Rx REO feature is not compiled, 170 * process the frame right away. 171 */ 172 return tgt_mgmt_txrx_process_rx_frame(pdev, buf, mgmt_rx_params); 173 } 174 #endif /* WLAN_MGMT_RX_REO_SUPPORT */ 175 #endif /* _WLAN_MGMT_TXRX_RX_REO_TGT_API_H */ 176