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_utils_api.c 19 * This file contains mgmt rx re-ordering related public function definitions 20 */ 21 22 #include <wlan_mgmt_txrx_rx_reo_utils_api.h> 23 #include "../../core/src/wlan_mgmt_txrx_rx_reo_i.h" 24 #include <cfg_ucfg_api.h> 25 26 QDF_STATUS 27 wlan_mgmt_rx_reo_deinit(void) 28 { 29 return mgmt_rx_reo_deinit_context(); 30 } 31 32 QDF_STATUS 33 wlan_mgmt_rx_reo_init(void) 34 { 35 return mgmt_rx_reo_init_context(); 36 } 37 38 #ifndef WLAN_MGMT_RX_REO_SIM_SUPPORT 39 QDF_STATUS wlan_mgmt_txrx_process_rx_frame( 40 struct wlan_objmgr_pdev *pdev, 41 qdf_nbuf_t buf, 42 struct mgmt_rx_event_params *mgmt_rx_params) 43 { 44 return tgt_mgmt_txrx_process_rx_frame(pdev, buf, mgmt_rx_params); 45 } 46 47 QDF_STATUS 48 wlan_mgmt_rx_reo_get_snapshot_address( 49 struct wlan_objmgr_pdev *pdev, 50 enum mgmt_rx_reo_shared_snapshot_id id, 51 struct mgmt_rx_reo_snapshot **address) 52 { 53 return tgt_mgmt_rx_reo_get_snapshot_address(pdev, id, address); 54 } 55 56 /** 57 * wlan_get_mlo_link_id_from_pdev() - Helper API to get the MLO HW link id 58 * from the pdev object. 59 * @pdev: Pointer to pdev object 60 * 61 * Return: On success returns the MLO HW link id corresponding to the pdev 62 * object. On failure returns -1. 63 */ 64 int8_t 65 wlan_get_mlo_link_id_from_pdev(struct wlan_objmgr_pdev *pdev) 66 { 67 return -EINVAL; 68 } 69 70 qdf_export_symbol(wlan_get_mlo_link_id_from_pdev); 71 72 /** 73 * wlan_get_pdev_from_mlo_link_id() - Helper API to get the pdev 74 * object from the MLO HW link id. 75 * @mlo_link_id: MLO HW link id 76 * 77 * Return: On success returns the pdev object from the MLO HW link_id. 78 * On failure returns NULL. 79 */ 80 struct wlan_objmgr_pdev * 81 wlan_get_pdev_from_mlo_link_id(uint8_t mlo_link_id) 82 { 83 return NULL; 84 } 85 86 qdf_export_symbol(wlan_get_pdev_from_mlo_link_id); 87 #else 88 QDF_STATUS wlan_mgmt_txrx_process_rx_frame( 89 struct wlan_objmgr_pdev *pdev, 90 qdf_nbuf_t buf, 91 struct mgmt_rx_event_params *mgmt_rx_params) 92 { 93 QDF_STATUS status; 94 95 /* Call the legacy handler to actually process and deliver frames */ 96 status = mgmt_rx_reo_sim_process_rx_frame(pdev, buf, mgmt_rx_params); 97 98 /** 99 * Free up the mgmt rx params. 100 * nbuf shouldn't be freed here as it is taken care by 101 * rx_frame_legacy_handler. 102 */ 103 free_mgmt_rx_event_params(mgmt_rx_params); 104 105 return status; 106 } 107 108 QDF_STATUS 109 wlan_mgmt_rx_reo_get_snapshot_address( 110 struct wlan_objmgr_pdev *pdev, 111 enum mgmt_rx_reo_shared_snapshot_id id, 112 struct mgmt_rx_reo_snapshot **address) 113 { 114 return mgmt_rx_reo_sim_get_snapshot_address(pdev, id, address); 115 } 116 117 /** 118 * wlan_get_mlo_link_id_from_pdev() - Helper API to get the MLO HW link id 119 * from the pdev object. 120 * @pdev: Pointer to pdev object 121 * 122 * Return: On success returns the MLO HW link id corresponding to the pdev 123 * object. On failure returns -1. 124 */ 125 int8_t 126 wlan_get_mlo_link_id_from_pdev(struct wlan_objmgr_pdev *pdev) 127 { 128 return mgmt_rx_reo_sim_get_mlo_link_id_from_pdev(pdev); 129 } 130 131 qdf_export_symbol(wlan_get_mlo_link_id_from_pdev); 132 133 /** 134 * wlan_get_pdev_from_mlo_link_id() - Helper API to get the pdev 135 * object from the MLO HW link id. 136 * @mlo_link_id: MLO HW link id 137 * 138 * Return: On success returns the pdev object from the MLO HW link_id. 139 * On failure returns NULL. 140 */ 141 struct wlan_objmgr_pdev * 142 wlan_get_pdev_from_mlo_link_id(uint8_t mlo_link_id) 143 { 144 return mgmt_rx_reo_sim_get_pdev_from_mlo_link_id(mlo_link_id); 145 } 146 147 qdf_export_symbol(wlan_get_pdev_from_mlo_link_id); 148 #endif /* WLAN_MGMT_RX_REO_SIM_SUPPORT */ 149 150 QDF_STATUS 151 wlan_mgmt_rx_reo_pdev_obj_create_notification( 152 struct wlan_objmgr_pdev *pdev, 153 struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx) 154 { 155 return mgmt_rx_reo_pdev_obj_create_notification(pdev, 156 mgmt_txrx_pdev_ctx); 157 } 158 159 QDF_STATUS 160 wlan_mgmt_rx_reo_pdev_obj_destroy_notification( 161 struct wlan_objmgr_pdev *pdev, 162 struct mgmt_txrx_priv_pdev_context *mgmt_txrx_pdev_ctx) 163 { 164 return mgmt_rx_reo_pdev_obj_destroy_notification(pdev, 165 mgmt_txrx_pdev_ctx); 166 } 167 168 #ifndef WLAN_MGMT_RX_REO_SIM_SUPPORT 169 bool 170 wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(struct wlan_objmgr_psoc *psoc) 171 { 172 if (!psoc) { 173 mgmt_rx_reo_err("psoc is NULL!"); 174 return false; 175 } 176 177 if (!cfg_get(psoc, CFG_MGMT_RX_REO_ENABLE)) 178 return false; 179 180 return wlan_psoc_nif_feat_cap_get(psoc, WLAN_SOC_F_MGMT_RX_REO_CAPABLE); 181 } 182 183 bool 184 wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(struct wlan_objmgr_pdev *pdev) 185 { 186 if (!pdev) { 187 mgmt_rx_reo_err("pdev is NULL!"); 188 return false; 189 } 190 191 return wlan_mgmt_rx_reo_is_feature_enabled_at_psoc( 192 wlan_pdev_get_psoc(pdev)); 193 } 194 #else 195 bool 196 wlan_mgmt_rx_reo_is_feature_enabled_at_psoc(struct wlan_objmgr_psoc *psoc) 197 { 198 return true; 199 } 200 201 bool 202 wlan_mgmt_rx_reo_is_feature_enabled_at_pdev(struct wlan_objmgr_pdev *pdev) 203 { 204 return true; 205 } 206 #endif /* WLAN_MGMT_RX_REO_SIM_SUPPORT */ 207 208 QDF_STATUS 209 wlan_mgmt_rx_reo_sim_start(void) 210 { 211 return mgmt_rx_reo_sim_start(); 212 } 213 214 qdf_export_symbol(wlan_mgmt_rx_reo_sim_start); 215 216 QDF_STATUS 217 wlan_mgmt_rx_reo_sim_stop(void) 218 { 219 return mgmt_rx_reo_sim_stop(); 220 } 221 222 qdf_export_symbol(wlan_mgmt_rx_reo_sim_stop); 223