Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 1 | /* |
Sravan Goud | d207ff2 | 2019-12-19 23:58:15 +0530 | [diff] [blame] | 2 | * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 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 __CDP_TXRX_MOB_DEF_H |
| 20 | #define __CDP_TXRX_MOB_DEF_H |
| 21 | #include <sir_types.h> |
| 22 | #include <htt.h> |
| 23 | |
gbian | 630ed5a | 2017-01-24 14:22:13 +0800 | [diff] [blame] | 24 | #define TX_WMM_AC_NUM 4 |
Mohit Khanna | 7a200e7 | 2019-07-17 17:19:22 -0700 | [diff] [blame] | 25 | #define ENABLE_DP_HIST_STATS |
Mohit Khanna | c42d803 | 2019-08-08 18:44:17 -0700 | [diff] [blame] | 26 | #define DP_RX_DISABLE_NDI_MDNS_FORWARDING |
gbian | 630ed5a | 2017-01-24 14:22:13 +0800 | [diff] [blame] | 27 | |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 28 | #define OL_TXQ_PAUSE_REASON_FW (1 << 0) |
| 29 | #define OL_TXQ_PAUSE_REASON_PEER_UNAUTHORIZED (1 << 1) |
| 30 | #define OL_TXQ_PAUSE_REASON_TX_ABORT (1 << 2) |
| 31 | #define OL_TXQ_PAUSE_REASON_VDEV_STOP (1 << 3) |
| 32 | #define OL_TXQ_PAUSE_REASON_THERMAL_MITIGATION (1 << 4) |
| 33 | |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 34 | #define OL_TXRX_INVALID_NUM_PEERS (-1) |
| 35 | |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 36 | |
| 37 | /* Maximum number of station supported by data path, including BC. */ |
| 38 | #define WLAN_MAX_STA_COUNT (HAL_NUM_STA) |
| 39 | |
| 40 | /* The symbolic station ID return to HDD to specify the packet is bc/mc */ |
| 41 | #define WLAN_RX_BCMC_STA_ID (WLAN_MAX_STA_COUNT + 1) |
| 42 | |
| 43 | /* The symbolic station ID return to HDD to specify the packet is |
| 44 | to soft-AP itself */ |
| 45 | #define WLAN_RX_SAP_SELF_STA_ID (WLAN_MAX_STA_COUNT + 2) |
| 46 | |
| 47 | /* is 802.11 address multicast/broadcast? */ |
| 48 | #define IEEE80211_IS_MULTICAST(_a) (*(_a) & 0x01) |
| 49 | |
| 50 | #define MAX_PEERS 32 |
| 51 | |
| 52 | /* |
| 53 | * Bins used for reporting delay histogram: |
| 54 | * bin 0: 0 - 10 ms delay |
| 55 | * bin 1: 10 - 20 ms delay |
| 56 | * bin 2: 20 - 40 ms delay |
| 57 | * bin 3: 40 - 80 ms delay |
| 58 | * bin 4: 80 - 160 ms delay |
| 59 | * bin 5: > 160 ms delay |
| 60 | */ |
| 61 | #define QCA_TX_DELAY_HIST_REPORT_BINS 6 |
| 62 | |
| 63 | /* BA actions */ |
| 64 | #define IEEE80211_ACTION_BA_ADDBA_REQUEST 0 /* ADDBA request */ |
| 65 | #define IEEE80211_ACTION_BA_ADDBA_RESPONSE 1 /* ADDBA response */ |
| 66 | #define IEEE80211_ACTION_BA_DELBA 2 /* DELBA */ |
| 67 | |
| 68 | #define IEEE80211_BA_POLICY_DELAYED 0 |
| 69 | #define IEEE80211_BA_POLICY_IMMEDIATE 1 |
| 70 | #define IEEE80211_BA_AMSDU_SUPPORTED 1 |
| 71 | |
| 72 | /** |
| 73 | * enum netif_action_type - Type of actions on netif queues |
| 74 | * @WLAN_STOP_ALL_NETIF_QUEUE: stop all netif queues |
| 75 | * @WLAN_START_ALL_NETIF_QUEUE: start all netif queues |
| 76 | * @WLAN_WAKE_ALL_NETIF_QUEUE: wake all netif queues |
| 77 | * @WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER: stop all queues and off carrier |
| 78 | * @WLAN_START_ALL_NETIF_QUEUE_N_CARRIER: start all queues and on carrier |
| 79 | * @WLAN_NETIF_TX_DISABLE: disable tx |
| 80 | * @WLAN_NETIF_TX_DISABLE_N_CARRIER: disable tx and off carrier |
| 81 | * @WLAN_NETIF_CARRIER_ON: on carrier |
| 82 | * @WLAN_NETIF_CARRIER_OFF: off carrier |
Rakesh Pillai | d339c2d | 2017-09-27 16:56:09 +0530 | [diff] [blame] | 83 | * @WLAN_NETIF_PRIORITY_QUEUE_ON: start priority netif queues |
| 84 | * @WLAN_NETIF_PRIORITY_QUEUE_OFF: stop priority netif queues |
| 85 | * @WLAN_WAKE_NON_PRIORITY_QUEUE: wake non priority netif queues |
| 86 | * @WLAN_STOP_NON_PRIORITY_QUEUE: stop non priority netif queues |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 87 | */ |
| 88 | enum netif_action_type { |
Mohit Khanna | 6d22eeb | 2019-04-06 22:51:26 -0700 | [diff] [blame] | 89 | WLAN_NETIF_ACTION_TYPE_NONE = 0, |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 90 | WLAN_STOP_ALL_NETIF_QUEUE = 1, |
Mohit Khanna | 6d22eeb | 2019-04-06 22:51:26 -0700 | [diff] [blame] | 91 | WLAN_START_ALL_NETIF_QUEUE = 2, |
| 92 | WLAN_WAKE_ALL_NETIF_QUEUE = 3, |
| 93 | WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER = 4, |
| 94 | WLAN_START_ALL_NETIF_QUEUE_N_CARRIER = 5, |
| 95 | WLAN_NETIF_TX_DISABLE = 6, |
| 96 | WLAN_NETIF_TX_DISABLE_N_CARRIER = 7, |
| 97 | WLAN_NETIF_CARRIER_ON = 8, |
| 98 | WLAN_NETIF_CARRIER_OFF = 9, |
| 99 | WLAN_NETIF_PRIORITY_QUEUE_ON = 10, |
| 100 | WLAN_NETIF_PRIORITY_QUEUE_OFF = 11, |
| 101 | WLAN_NETIF_VO_QUEUE_ON = 12, |
| 102 | WLAN_NETIF_VO_QUEUE_OFF = 13, |
| 103 | WLAN_NETIF_VI_QUEUE_ON = 14, |
| 104 | WLAN_NETIF_VI_QUEUE_OFF = 15, |
| 105 | WLAN_NETIF_BE_BK_QUEUE_OFF = 16, |
| 106 | WLAN_WAKE_NON_PRIORITY_QUEUE = 17, |
| 107 | WLAN_STOP_NON_PRIORITY_QUEUE = 18, |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 108 | WLAN_NETIF_ACTION_TYPE_MAX, |
| 109 | }; |
| 110 | |
| 111 | /** |
| 112 | * enum netif_reason_type - reason for netif queue action |
| 113 | * @WLAN_CONTROL_PATH: action from control path |
| 114 | * @WLAN_DATA_FLOW_CONTROL: because of flow control |
| 115 | * @WLAN_FW_PAUSE: because of firmware pause |
| 116 | * @WLAN_TX_ABORT: because of tx abort |
| 117 | * @WLAN_VDEV_STOP: because of vdev stop |
| 118 | * @WLAN_PEER_UNAUTHORISED: because of peer is unauthorised |
| 119 | * @WLAN_THERMAL_MITIGATION: because of thermal mitigation |
| 120 | */ |
| 121 | enum netif_reason_type { |
| 122 | WLAN_CONTROL_PATH = 1, |
| 123 | WLAN_DATA_FLOW_CONTROL, |
| 124 | WLAN_FW_PAUSE, |
| 125 | WLAN_TX_ABORT, |
| 126 | WLAN_VDEV_STOP, |
| 127 | WLAN_PEER_UNAUTHORISED, |
| 128 | WLAN_THERMAL_MITIGATION, |
Rakesh Pillai | d339c2d | 2017-09-27 16:56:09 +0530 | [diff] [blame] | 129 | WLAN_DATA_FLOW_CONTROL_PRIORITY, |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 130 | WLAN_REASON_TYPE_MAX, |
| 131 | }; |
| 132 | |
| 133 | enum ol_rx_err_type { |
| 134 | OL_RX_ERR_DEFRAG_MIC, |
| 135 | OL_RX_ERR_PN, |
| 136 | OL_RX_ERR_UNKNOWN_PEER, |
| 137 | OL_RX_ERR_MALFORMED, |
| 138 | OL_RX_ERR_TKIP_MIC, |
| 139 | OL_RX_ERR_DECRYPT, |
| 140 | OL_RX_ERR_MPDU_LENGTH, |
| 141 | OL_RX_ERR_ENCRYPT_REQUIRED, |
| 142 | OL_RX_ERR_DUP, |
| 143 | OL_RX_ERR_UNKNOWN, |
| 144 | OL_RX_ERR_FCS, |
| 145 | OL_RX_ERR_PRIVACY, |
| 146 | OL_RX_ERR_NONE_FRAG, |
| 147 | OL_RX_ERR_NONE = 0xFF |
| 148 | }; |
| 149 | |
| 150 | enum throttle_level { |
| 151 | THROTTLE_LEVEL_0, |
| 152 | THROTTLE_LEVEL_1, |
| 153 | THROTTLE_LEVEL_2, |
| 154 | THROTTLE_LEVEL_3, |
| 155 | /* Invalid */ |
| 156 | THROTTLE_LEVEL_MAX, |
| 157 | }; |
| 158 | |
| 159 | enum { |
| 160 | OL_TX_WMM_AC_BE, |
| 161 | OL_TX_WMM_AC_BK, |
| 162 | OL_TX_WMM_AC_VI, |
| 163 | OL_TX_WMM_AC_VO, |
| 164 | OL_TX_NUM_WMM_AC |
| 165 | }; |
| 166 | |
| 167 | /** |
| 168 | * @enum ol_tx_spec |
| 169 | * @brief indicate what non-standard transmission actions to apply |
| 170 | * @details |
| 171 | * Indicate one or more of the following: |
| 172 | * - The tx frame already has a complete 802.11 header. |
| 173 | * Thus, skip 802.3/native-WiFi to 802.11 header encapsulation and |
| 174 | * A-MSDU aggregation. |
| 175 | * - The tx frame should not be aggregated (A-MPDU or A-MSDU) |
| 176 | * - The tx frame is already encrypted - don't attempt encryption. |
| 177 | * - The tx frame is a segment of a TCP jumbo frame. |
| 178 | * - This tx frame should not be unmapped and freed by the txrx layer |
| 179 | * after transmission, but instead given to a registered tx completion |
| 180 | * callback. |
| 181 | * More than one of these specification can apply, though typically |
| 182 | * only a single specification is applied to a tx frame. |
| 183 | * A compound specification can be created, as a bit-OR of these |
| 184 | * specifications. |
| 185 | */ |
| 186 | enum ol_tx_spec { |
| 187 | OL_TX_SPEC_STD = 0x0, /* do regular processing */ |
| 188 | OL_TX_SPEC_RAW = 0x1, /* skip encap + A-MSDU aggr */ |
| 189 | OL_TX_SPEC_NO_AGGR = 0x2, /* skip encap + all aggr */ |
| 190 | OL_TX_SPEC_NO_ENCRYPT = 0x4, /* skip encap + encrypt */ |
| 191 | OL_TX_SPEC_TSO = 0x8, /* TCP segmented */ |
| 192 | OL_TX_SPEC_NWIFI_NO_ENCRYPT = 0x10, /* skip encrypt for nwifi */ |
| 193 | OL_TX_SPEC_NO_FREE = 0x20, /* give to cb rather than free */ |
| 194 | }; |
| 195 | |
| 196 | /** |
Mohit Khanna | adfe908 | 2017-11-17 13:11:17 -0800 | [diff] [blame] | 197 | * @enum peer_debug_id_type: debug ids to track peer get_ref and release_ref |
| 198 | * @brief Unique peer debug IDs to track the callers. Each new usage can add to |
| 199 | * this enum list to create a new "PEER_DEBUG_ID_". |
| 200 | * @PEER_DEBUG_ID_OL_INTERNAL: debug id for OL internal usage |
| 201 | * @PEER_DEBUG_ID_WMA_PKT_DROP: debug id for wma_is_pkt_drop_candidate API |
| 202 | * @PEER_DEBUG_ID_WMA_ADDBA_REQ: debug id for ADDBA request |
| 203 | * @PEER_DEBUG_ID_WMA_DELBA_REQ: debug id for DELBA request |
| 204 | * @PEER_DEBUG_ID_LIM_SEND_ADDBA_RESP: debug id for send ADDBA response |
Jingxiang Ge | 7081c12 | 2018-01-10 10:23:50 +0800 | [diff] [blame] | 205 | * @PEER_DEBUG_ID_OL_RX_THREAD: debug id for rx thread |
Abhishek Singh | 46cb680 | 2018-06-20 16:37:47 +0530 | [diff] [blame] | 206 | * @PEER_DEBUG_ID_WMA_CCMP_REPLAY_ATTACK: debug id for CCMP replay |
Manjunathappa Prakash | d0fc0ea | 2018-08-22 15:59:09 -0700 | [diff] [blame] | 207 | * @PEER_DEBUG_ID_WMA_DEL_BSS:debug id for remove BSS |
| 208 | * @PEER_DEBUG_ID_WMA_VDEV_STOP_RESP:debug id for vdev stop response handler |
| 209 | * @PEER_DEBUG_ID_OL_PEER_MAP:debug id for peer map/unmap |
| 210 | * @PEER_DEBUG_ID_OL_PEER_ATTACH: debug id for peer attach/detach |
| 211 | * @PEER_DEBUG_ID_OL_TXQ_VDEV_FL: debug id for vdev flush |
| 212 | * @PEER_DEBUG_ID_OL_HASH_ERS:debug id for peer find hash erase |
Mohit Khanna | adfe908 | 2017-11-17 13:11:17 -0800 | [diff] [blame] | 213 | * @PEER_DEBUG_ID_MAX: debug id MAX |
| 214 | */ |
| 215 | enum peer_debug_id_type { |
Manjunathappa Prakash | d0fc0ea | 2018-08-22 15:59:09 -0700 | [diff] [blame] | 216 | PEER_DEBUG_ID_OL_INTERNAL, |
| 217 | PEER_DEBUG_ID_WMA_PKT_DROP, |
| 218 | PEER_DEBUG_ID_WMA_ADDBA_REQ, |
| 219 | PEER_DEBUG_ID_WMA_DELBA_REQ, |
| 220 | PEER_DEBUG_ID_LIM_SEND_ADDBA_RESP, |
| 221 | PEER_DEBUG_ID_OL_RX_THREAD, |
| 222 | PEER_DEBUG_ID_WMA_CCMP_REPLAY_ATTACK, |
| 223 | PEER_DEBUG_ID_WMA_DEL_BSS, |
| 224 | PEER_DEBUG_ID_WMA_VDEV_STOP_RESP, |
| 225 | PEER_DEBUG_ID_OL_PEER_MAP, |
| 226 | PEER_DEBUG_ID_OL_PEER_ATTACH, |
| 227 | PEER_DEBUG_ID_OL_TXQ_VDEV_FL, |
| 228 | PEER_DEBUG_ID_OL_HASH_ERS, |
Manjunathappa Prakash | 09387ef | 2019-01-18 15:34:48 -0800 | [diff] [blame] | 229 | PEER_DEBUG_ID_OL_UNMAP_TIMER_WORK, |
Mohit Khanna | adfe908 | 2017-11-17 13:11:17 -0800 | [diff] [blame] | 230 | PEER_DEBUG_ID_MAX |
| 231 | }; |
| 232 | |
| 233 | /** |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 234 | * struct ol_txrx_desc_type - txrx descriptor type |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 235 | * @is_qos_enabled: is station qos enabled |
| 236 | * @is_wapi_supported: is station wapi supported |
Rakshith Suresh Patkar | b3bc8ab | 2019-07-26 10:46:52 +0530 | [diff] [blame] | 237 | * @peer_addr: peer mac address |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 238 | */ |
| 239 | struct ol_txrx_desc_type { |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 240 | uint8_t is_qos_enabled; |
| 241 | uint8_t is_wapi_supported; |
Rakshith Suresh Patkar | b3bc8ab | 2019-07-26 10:46:52 +0530 | [diff] [blame] | 242 | struct qdf_mac_addr peer_addr; |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 243 | }; |
| 244 | |
| 245 | /** |
gbian | 630ed5a | 2017-01-24 14:22:13 +0800 | [diff] [blame] | 246 | * struct ol_tx_sched_wrr_ac_specs_t - the wrr ac specs params structure |
| 247 | * @wrr_skip_weight: map to ol_tx_sched_wrr_adv_category_info_t.specs. |
| 248 | * wrr_skip_weight |
| 249 | * @credit_threshold: map to ol_tx_sched_wrr_adv_category_info_t.specs. |
| 250 | * credit_threshold |
| 251 | * @send_limit: map to ol_tx_sched_wrr_adv_category_info_t.specs. |
| 252 | * send_limit |
| 253 | * @credit_reserve: map to ol_tx_sched_wrr_adv_category_info_t.specs. |
| 254 | * credit_reserve |
| 255 | * @discard_weight: map to ol_tx_sched_wrr_adv_category_info_t.specs. |
| 256 | * discard_weight |
| 257 | * |
| 258 | * This structure is for wrr ac specs params set from user, it will update |
| 259 | * its content corresponding to the ol_tx_sched_wrr_adv_category_info_t.specs. |
| 260 | */ |
| 261 | struct ol_tx_sched_wrr_ac_specs_t { |
| 262 | int wrr_skip_weight; |
| 263 | uint32_t credit_threshold; |
| 264 | uint16_t send_limit; |
| 265 | int credit_reserve; |
| 266 | int discard_weight; |
| 267 | }; |
| 268 | |
| 269 | /** |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 270 | * struct txrx_pdev_cfg_param_t - configuration information |
| 271 | * passed to the data path |
| 272 | */ |
| 273 | struct txrx_pdev_cfg_param_t { |
| 274 | uint8_t is_full_reorder_offload; |
| 275 | /* IPA Micro controller data path offload enable flag */ |
| 276 | uint8_t is_uc_offload_enabled; |
| 277 | /* IPA Micro controller data path offload TX buffer count */ |
| 278 | uint32_t uc_tx_buffer_count; |
| 279 | /* IPA Micro controller data path offload TX buffer size */ |
| 280 | uint32_t uc_tx_buffer_size; |
| 281 | /* IPA Micro controller data path offload RX indication ring count */ |
| 282 | uint32_t uc_rx_indication_ring_count; |
| 283 | /* IPA Micro controller data path offload TX partition base */ |
| 284 | uint32_t uc_tx_partition_base; |
| 285 | /* IP, TCP and UDP checksum offload */ |
| 286 | bool ip_tcp_udp_checksum_offload; |
| 287 | /* Rx processing in thread from TXRX */ |
| 288 | bool enable_rxthread; |
| 289 | /* CE classification enabled through INI */ |
| 290 | bool ce_classify_enabled; |
hangtian | 04f0ad4 | 2019-06-07 11:04:02 +0800 | [diff] [blame] | 291 | #if defined(QCA_LL_TX_FLOW_CONTROL_V2) || defined(QCA_LL_PDEV_TX_FLOW_CONTROL) |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 292 | /* Threshold to stop queue in percentage */ |
| 293 | uint32_t tx_flow_stop_queue_th; |
| 294 | /* Start queue offset in percentage */ |
| 295 | uint32_t tx_flow_start_queue_offset; |
hangtian | 04f0ad4 | 2019-06-07 11:04:02 +0800 | [diff] [blame] | 296 | #endif |
gbian | 630ed5a | 2017-01-24 14:22:13 +0800 | [diff] [blame] | 297 | |
Tiger Yu | 6f1fc00 | 2019-04-25 10:41:30 +0800 | [diff] [blame] | 298 | #ifdef QCA_SUPPORT_TXRX_DRIVER_TCP_DEL_ACK |
| 299 | /* enable the tcp delay ack feature in the driver */ |
| 300 | bool del_ack_enable; |
| 301 | /* timeout if no more tcp ack frames, unit is ms */ |
| 302 | uint16_t del_ack_timer_value; |
| 303 | /* the maximum number of replaced tcp ack frames */ |
| 304 | uint16_t del_ack_pkt_count; |
| 305 | #endif |
| 306 | |
gbian | 630ed5a | 2017-01-24 14:22:13 +0800 | [diff] [blame] | 307 | struct ol_tx_sched_wrr_ac_specs_t ac_specs[TX_WMM_AC_NUM]; |
jitiphil | 60ac9aa | 2018-10-05 19:54:04 +0530 | [diff] [blame] | 308 | bool gro_enable; |
| 309 | bool tso_enable; |
| 310 | bool lro_enable; |
| 311 | bool enable_data_stall_detection; |
| 312 | bool enable_flow_steering; |
| 313 | bool disable_intra_bss_fwd; |
Nirav Shah | aa6ca44 | 2019-11-13 18:17:05 +0530 | [diff] [blame] | 314 | |
| 315 | #ifdef WLAN_SUPPORT_TXRX_HL_BUNDLE |
| 316 | uint16_t bundle_timer_value; |
| 317 | uint16_t bundle_size; |
| 318 | #endif |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 319 | }; |
| 320 | |
Yun Park | fde6b9e | 2017-06-26 17:13:11 -0700 | [diff] [blame] | 321 | #ifdef IPA_OFFLOAD |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 322 | /** |
| 323 | * ol_txrx_ipa_resources - Resources needed for IPA |
| 324 | */ |
| 325 | struct ol_txrx_ipa_resources { |
Sravan Kumar Kairam | 58e0adf | 2018-02-27 18:37:40 +0530 | [diff] [blame] | 326 | qdf_shared_mem_t *ce_sr; |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 327 | uint32_t ce_sr_ring_size; |
| 328 | qdf_dma_addr_t ce_reg_paddr; |
| 329 | |
Sravan Kumar Kairam | 58e0adf | 2018-02-27 18:37:40 +0530 | [diff] [blame] | 330 | qdf_shared_mem_t *tx_comp_ring; |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 331 | uint32_t tx_num_alloc_buffer; |
| 332 | |
Sravan Kumar Kairam | 58e0adf | 2018-02-27 18:37:40 +0530 | [diff] [blame] | 333 | qdf_shared_mem_t *rx_rdy_ring; |
| 334 | qdf_shared_mem_t *rx_proc_done_idx; |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 335 | |
Sravan Kumar Kairam | 58e0adf | 2018-02-27 18:37:40 +0530 | [diff] [blame] | 336 | qdf_shared_mem_t *rx2_rdy_ring; |
| 337 | qdf_shared_mem_t *rx2_proc_done_idx; |
Yun Park | fde6b9e | 2017-06-26 17:13:11 -0700 | [diff] [blame] | 338 | |
| 339 | /* IPA UC doorbell registers paddr */ |
Sravan Kumar Kairam | 58e0adf | 2018-02-27 18:37:40 +0530 | [diff] [blame] | 340 | qdf_dma_addr_t tx_comp_doorbell_dmaaddr; |
| 341 | qdf_dma_addr_t rx_ready_doorbell_dmaaddr; |
Yun Park | fde6b9e | 2017-06-26 17:13:11 -0700 | [diff] [blame] | 342 | |
| 343 | uint32_t tx_pipe_handle; |
| 344 | uint32_t rx_pipe_handle; |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 345 | }; |
Yun Park | fde6b9e | 2017-06-26 17:13:11 -0700 | [diff] [blame] | 346 | #endif |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 347 | |
| 348 | struct ol_txrx_ocb_chan_info { |
| 349 | uint32_t chan_freq; |
| 350 | uint16_t disable_rx_stats_hdr:1; |
| 351 | }; |
| 352 | |
| 353 | /** |
| 354 | * ol_mic_error_info - carries the information associated with |
| 355 | * a MIC error |
| 356 | * @vdev_id: virtual device ID |
| 357 | * @key_id: Key ID |
| 358 | * @pn: packet number |
| 359 | * @sa: source address |
| 360 | * @da: destination address |
| 361 | * @ta: transmitter address |
| 362 | */ |
| 363 | struct ol_mic_error_info { |
| 364 | uint8_t vdev_id; |
| 365 | uint32_t key_id; |
| 366 | uint64_t pn; |
Srinivas Girigowda | 2751b6d | 2019-02-27 12:28:13 -0800 | [diff] [blame] | 367 | uint8_t sa[QDF_MAC_ADDR_SIZE]; |
| 368 | uint8_t da[QDF_MAC_ADDR_SIZE]; |
| 369 | uint8_t ta[QDF_MAC_ADDR_SIZE]; |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 370 | }; |
| 371 | |
| 372 | /** |
| 373 | * ol_error_info - carries the information associated with an |
| 374 | * error indicated by the firmware |
| 375 | * @mic_err: MIC error information |
| 376 | */ |
| 377 | struct ol_error_info { |
| 378 | union { |
| 379 | struct ol_mic_error_info mic_err; |
| 380 | } u; |
| 381 | }; |
| 382 | |
| 383 | |
| 384 | /** |
| 385 | * struct ol_txrx_ocb_set_chan - txrx OCB channel info |
| 386 | * @ocb_channel_count: Channel count |
| 387 | * @ocb_channel_info: OCB channel info |
| 388 | */ |
| 389 | struct ol_txrx_ocb_set_chan { |
| 390 | uint32_t ocb_channel_count; |
| 391 | struct ol_txrx_ocb_chan_info *ocb_channel_info; |
| 392 | }; |
| 393 | |
| 394 | /** |
| 395 | * @brief Parameter type to pass WMM setting to ol_txrx_set_wmm_param |
| 396 | * @details |
| 397 | * The struct is used to specify informaiton to update TX WMM scheduler. |
| 398 | */ |
| 399 | struct ol_tx_ac_param_t { |
| 400 | uint32_t aifs; |
| 401 | uint32_t cwmin; |
| 402 | uint32_t cwmax; |
| 403 | }; |
| 404 | |
| 405 | struct ol_tx_wmm_param_t { |
| 406 | struct ol_tx_ac_param_t ac[OL_TX_NUM_WMM_AC]; |
| 407 | }; |
| 408 | |
| 409 | struct ieee80211_ba_parameterset { |
| 410 | #if _BYTE_ORDER == _BIG_ENDIAN |
| 411 | uint16_t buffersize:10, /* B6-15 buffer size */ |
| 412 | tid:4, /* B2-5 TID */ |
| 413 | bapolicy:1, /* B1 block ack policy */ |
| 414 | amsdusupported:1; /* B0 amsdu supported */ |
| 415 | #else |
| 416 | uint16_t amsdusupported:1, /* B0 amsdu supported */ |
| 417 | bapolicy:1, /* B1 block ack policy */ |
| 418 | tid:4, /* B2-5 TID */ |
| 419 | buffersize:10; /* B6-15 buffer size */ |
| 420 | #endif |
| 421 | } __packed; |
| 422 | |
| 423 | struct ieee80211_ba_seqctrl { |
| 424 | #if _BYTE_ORDER == _BIG_ENDIAN |
| 425 | uint16_t startseqnum:12, /* B4-15 starting sequence number */ |
| 426 | fragnum:4; /* B0-3 fragment number */ |
| 427 | #else |
| 428 | uint16_t fragnum:4, /* B0-3 fragment number */ |
| 429 | startseqnum:12; /* B4-15 starting sequence number */ |
| 430 | #endif |
| 431 | } __packed; |
| 432 | |
| 433 | struct ieee80211_delba_parameterset { |
| 434 | #if _BYTE_ORDER == _BIG_ENDIAN |
| 435 | uint16_t tid:4, /* B12-15 tid */ |
| 436 | initiator:1, /* B11 initiator */ |
| 437 | reserved0:11; /* B0-10 reserved */ |
| 438 | #else |
| 439 | uint16_t reserved0:11, /* B0-10 reserved */ |
| 440 | initiator:1, /* B11 initiator */ |
| 441 | tid:4; /* B12-15 tid */ |
| 442 | #endif |
| 443 | } __packed; |
| 444 | |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 445 | /** |
| 446 | * ol_txrx_vdev_peer_remove_cb - wma_remove_peer callback |
| 447 | */ |
| 448 | typedef void (*ol_txrx_vdev_peer_remove_cb)(void *handle, uint8_t *bssid, |
Jiachao Wu | 5c20975 | 2018-01-21 13:34:37 +0800 | [diff] [blame] | 449 | uint8_t vdev_id, void *peer); |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 450 | |
| 451 | /** |
Manjunathappa Prakash | ced7ea6 | 2017-07-02 03:02:15 -0700 | [diff] [blame] | 452 | * @typedef tx_pause_callback |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 453 | * @brief OSIF function registered with the data path |
| 454 | */ |
Manjunathappa Prakash | ced7ea6 | 2017-07-02 03:02:15 -0700 | [diff] [blame] | 455 | typedef void (*tx_pause_callback)(uint8_t vdev_id, |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 456 | enum netif_action_type action, |
| 457 | enum netif_reason_type reason); |
| 458 | |
Yun Park | fde6b9e | 2017-06-26 17:13:11 -0700 | [diff] [blame] | 459 | typedef void (*ipa_uc_op_cb_type)(uint8_t *op_msg, |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 460 | void *osif_ctxt); |
| 461 | |
Jinwei Chen | 4673310 | 2018-08-20 15:42:08 +0800 | [diff] [blame] | 462 | /** |
| 463 | * struct ol_rx_inv_peer_params - rx invalid peer data parameters |
| 464 | * @vdev_id: Virtual device ID |
| 465 | * @ra: RX data receiver MAC address |
| 466 | * @ta: RX data transmitter MAC address |
| 467 | */ |
| 468 | struct ol_rx_inv_peer_params { |
| 469 | uint8_t vdev_id; |
Srinivas Girigowda | 2751b6d | 2019-02-27 12:28:13 -0800 | [diff] [blame] | 470 | uint8_t ra[QDF_MAC_ADDR_SIZE]; |
| 471 | uint8_t ta[QDF_MAC_ADDR_SIZE]; |
Jinwei Chen | 4673310 | 2018-08-20 15:42:08 +0800 | [diff] [blame] | 472 | }; |
| 473 | |
Sravan Goud | d207ff2 | 2019-12-19 23:58:15 +0530 | [diff] [blame] | 474 | /** |
| 475 | * cdp_txrx_ext_stats: dp extended stats |
| 476 | * tx_msdu_enqueue: tx msdu queued to hw |
| 477 | * tx_msdu_overflow: tx msdu overflow |
| 478 | * rx_mpdu_received: rx mpdu processed by hw |
| 479 | * rx_mpdu_delivered: rx mpdu received from hw |
| 480 | * rx_mpdu_error: rx mpdu error count |
| 481 | * rx_mpdu_missed: rx mpdu missed by hw |
| 482 | */ |
| 483 | struct cdp_txrx_ext_stats { |
| 484 | uint32_t tx_msdu_enqueue; |
| 485 | uint32_t tx_msdu_overflow; |
| 486 | uint32_t rx_mpdu_received; |
| 487 | uint32_t rx_mpdu_delivered; |
| 488 | uint32_t rx_mpdu_error; |
| 489 | uint32_t rx_mpdu_missed; |
| 490 | }; |
| 491 | |
Leo Chang | db6358c | 2016-09-27 17:00:52 -0700 | [diff] [blame] | 492 | #endif /* __CDP_TXRX_MOB_DEF_H */ |