1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. 3*5113495bSYour Name * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4*5113495bSYour Name * 5*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for 6*5113495bSYour Name * any purpose with or without fee is hereby granted, provided that the 7*5113495bSYour Name * above copyright notice and this permission notice appear in all 8*5113495bSYour Name * copies. 9*5113495bSYour Name * 10*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11*5113495bSYour Name * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12*5113495bSYour Name * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13*5113495bSYour Name * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14*5113495bSYour Name * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15*5113495bSYour Name * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16*5113495bSYour Name * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17*5113495bSYour Name * PERFORMANCE OF THIS SOFTWARE. 18*5113495bSYour Name */ 19*5113495bSYour Name 20*5113495bSYour Name #ifndef __CDP_TXRX_MOB_DEF_H 21*5113495bSYour Name #define __CDP_TXRX_MOB_DEF_H 22*5113495bSYour Name #include <sir_types.h> 23*5113495bSYour Name #include <htt.h> 24*5113495bSYour Name 25*5113495bSYour Name #define TX_WMM_AC_NUM 4 26*5113495bSYour Name #define ENABLE_DP_HIST_STATS 27*5113495bSYour Name #define DP_MEMORY_OPT 28*5113495bSYour Name #ifndef CONFIG_BERYLLIUM 29*5113495bSYour Name #define DP_USE_SINGLE_TCL 30*5113495bSYour Name #endif 31*5113495bSYour Name 32*5113495bSYour Name #define DP_RX_DISABLE_NDI_MDNS_FORWARDING 33*5113495bSYour Name 34*5113495bSYour Name #define OL_TXQ_PAUSE_REASON_FW (1 << 0) 35*5113495bSYour Name #define OL_TXQ_PAUSE_REASON_PEER_UNAUTHORIZED (1 << 1) 36*5113495bSYour Name #define OL_TXQ_PAUSE_REASON_TX_ABORT (1 << 2) 37*5113495bSYour Name #define OL_TXQ_PAUSE_REASON_VDEV_STOP (1 << 3) 38*5113495bSYour Name #define OL_TXQ_PAUSE_REASON_THERMAL_MITIGATION (1 << 4) 39*5113495bSYour Name 40*5113495bSYour Name #define OL_TXRX_INVALID_NUM_PEERS (-1) 41*5113495bSYour Name 42*5113495bSYour Name 43*5113495bSYour Name /* Maximum number of station supported by data path, including BC. */ 44*5113495bSYour Name #define WLAN_MAX_STA_COUNT (HAL_NUM_STA) 45*5113495bSYour Name 46*5113495bSYour Name /* The symbolic station ID return to HDD to specify the packet is bc/mc */ 47*5113495bSYour Name #define WLAN_RX_BCMC_STA_ID (WLAN_MAX_STA_COUNT + 1) 48*5113495bSYour Name 49*5113495bSYour Name /* The symbolic station ID return to HDD to specify the packet is 50*5113495bSYour Name to soft-AP itself */ 51*5113495bSYour Name #define WLAN_RX_SAP_SELF_STA_ID (WLAN_MAX_STA_COUNT + 2) 52*5113495bSYour Name 53*5113495bSYour Name /* is 802.11 address multicast/broadcast? */ 54*5113495bSYour Name #define IEEE80211_IS_MULTICAST(_a) (*(_a) & 0x01) 55*5113495bSYour Name 56*5113495bSYour Name #define MAX_PEERS 32 57*5113495bSYour Name 58*5113495bSYour Name /* 59*5113495bSYour Name * Bins used for reporting delay histogram: 60*5113495bSYour Name * bin 0: 0 - 10 ms delay 61*5113495bSYour Name * bin 1: 10 - 20 ms delay 62*5113495bSYour Name * bin 2: 20 - 40 ms delay 63*5113495bSYour Name * bin 3: 40 - 80 ms delay 64*5113495bSYour Name * bin 4: 80 - 160 ms delay 65*5113495bSYour Name * bin 5: > 160 ms delay 66*5113495bSYour Name */ 67*5113495bSYour Name #define QCA_TX_DELAY_HIST_REPORT_BINS 6 68*5113495bSYour Name 69*5113495bSYour Name /* BA actions */ 70*5113495bSYour Name #define IEEE80211_ACTION_BA_ADDBA_REQUEST 0 /* ADDBA request */ 71*5113495bSYour Name #define IEEE80211_ACTION_BA_ADDBA_RESPONSE 1 /* ADDBA response */ 72*5113495bSYour Name #define IEEE80211_ACTION_BA_DELBA 2 /* DELBA */ 73*5113495bSYour Name 74*5113495bSYour Name #define IEEE80211_BA_POLICY_DELAYED 0 75*5113495bSYour Name #define IEEE80211_BA_POLICY_IMMEDIATE 1 76*5113495bSYour Name #define IEEE80211_BA_AMSDU_SUPPORTED 1 77*5113495bSYour Name 78*5113495bSYour Name /** 79*5113495bSYour Name * enum netif_action_type - Type of actions on netif queues 80*5113495bSYour Name * @WLAN_NETIF_ACTION_TYPE_NONE: perform no action 81*5113495bSYour Name * @WLAN_STOP_ALL_NETIF_QUEUE: stop all netif queues 82*5113495bSYour Name * @WLAN_START_ALL_NETIF_QUEUE: start all netif queues 83*5113495bSYour Name * @WLAN_WAKE_ALL_NETIF_QUEUE: wake all netif queues 84*5113495bSYour Name * @WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER: stop all queues and off carrier 85*5113495bSYour Name * @WLAN_START_ALL_NETIF_QUEUE_N_CARRIER: start all queues and on carrier 86*5113495bSYour Name * @WLAN_NETIF_TX_DISABLE: disable tx 87*5113495bSYour Name * @WLAN_NETIF_TX_DISABLE_N_CARRIER: disable tx and off carrier 88*5113495bSYour Name * @WLAN_NETIF_CARRIER_ON: on carrier 89*5113495bSYour Name * @WLAN_NETIF_CARRIER_OFF: off carrier 90*5113495bSYour Name * @WLAN_NETIF_PRIORITY_QUEUE_ON: start priority netif queues 91*5113495bSYour Name * @WLAN_NETIF_PRIORITY_QUEUE_OFF: stop priority netif queues 92*5113495bSYour Name * @WLAN_NETIF_VO_QUEUE_ON: start voice queue 93*5113495bSYour Name * @WLAN_NETIF_VO_QUEUE_OFF: stop voice queue 94*5113495bSYour Name * @WLAN_NETIF_VI_QUEUE_ON: start video queue 95*5113495bSYour Name * @WLAN_NETIF_VI_QUEUE_OFF: stop video queue 96*5113495bSYour Name * @WLAN_NETIF_BE_BK_QUEUE_OFF: start best-effort & background queue 97*5113495bSYour Name * @WLAN_NETIF_BE_BK_QUEUE_ON: stop best-effort & background queue 98*5113495bSYour Name * @WLAN_WAKE_NON_PRIORITY_QUEUE: wake non priority netif queues 99*5113495bSYour Name * @WLAN_STOP_NON_PRIORITY_QUEUE: stop non priority netif queues 100*5113495bSYour Name * @WLAN_NETIF_ACTION_TYPE_MAX: Maximum action 101*5113495bSYour Name */ 102*5113495bSYour Name enum netif_action_type { 103*5113495bSYour Name WLAN_NETIF_ACTION_TYPE_NONE = 0, 104*5113495bSYour Name WLAN_STOP_ALL_NETIF_QUEUE = 1, 105*5113495bSYour Name WLAN_START_ALL_NETIF_QUEUE = 2, 106*5113495bSYour Name WLAN_WAKE_ALL_NETIF_QUEUE = 3, 107*5113495bSYour Name WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER = 4, 108*5113495bSYour Name WLAN_START_ALL_NETIF_QUEUE_N_CARRIER = 5, 109*5113495bSYour Name WLAN_NETIF_TX_DISABLE = 6, 110*5113495bSYour Name WLAN_NETIF_TX_DISABLE_N_CARRIER = 7, 111*5113495bSYour Name WLAN_NETIF_CARRIER_ON = 8, 112*5113495bSYour Name WLAN_NETIF_CARRIER_OFF = 9, 113*5113495bSYour Name WLAN_NETIF_PRIORITY_QUEUE_ON = 10, 114*5113495bSYour Name WLAN_NETIF_PRIORITY_QUEUE_OFF = 11, 115*5113495bSYour Name WLAN_NETIF_VO_QUEUE_ON = 12, 116*5113495bSYour Name WLAN_NETIF_VO_QUEUE_OFF = 13, 117*5113495bSYour Name WLAN_NETIF_VI_QUEUE_ON = 14, 118*5113495bSYour Name WLAN_NETIF_VI_QUEUE_OFF = 15, 119*5113495bSYour Name WLAN_NETIF_BE_BK_QUEUE_OFF = 16, 120*5113495bSYour Name WLAN_NETIF_BE_BK_QUEUE_ON = 17, 121*5113495bSYour Name WLAN_WAKE_NON_PRIORITY_QUEUE = 18, 122*5113495bSYour Name WLAN_STOP_NON_PRIORITY_QUEUE = 19, 123*5113495bSYour Name WLAN_NETIF_ACTION_TYPE_MAX, 124*5113495bSYour Name }; 125*5113495bSYour Name 126*5113495bSYour Name /** 127*5113495bSYour Name * enum netif_reason_type - reason for netif queue action 128*5113495bSYour Name * @WLAN_CONTROL_PATH: action from control path 129*5113495bSYour Name * @WLAN_DATA_FLOW_CONTROL: because of flow control 130*5113495bSYour Name * @WLAN_FW_PAUSE: because of firmware pause 131*5113495bSYour Name * @WLAN_TX_ABORT: because of tx abort 132*5113495bSYour Name * @WLAN_VDEV_STOP: because of vdev stop 133*5113495bSYour Name * @WLAN_PEER_UNAUTHORISED: because of peer is unauthorised 134*5113495bSYour Name * @WLAN_THERMAL_MITIGATION: because of thermal mitigation 135*5113495bSYour Name * @WLAN_DATA_FLOW_CONTROL_PRIORITY: 136*5113495bSYour Name * @WLAN_DATA_FLOW_CTRL_BE_BK: 137*5113495bSYour Name * @WLAN_DATA_FLOW_CTRL_VI: 138*5113495bSYour Name * @WLAN_DATA_FLOW_CTRL_VO: 139*5113495bSYour Name * @WLAN_DATA_FLOW_CTRL_PRI: 140*5113495bSYour Name * @WLAN_REASON_TYPE_MAX: maximum reason 141*5113495bSYour Name */ 142*5113495bSYour Name enum netif_reason_type { 143*5113495bSYour Name WLAN_CONTROL_PATH = 1, 144*5113495bSYour Name WLAN_DATA_FLOW_CONTROL, 145*5113495bSYour Name WLAN_FW_PAUSE, 146*5113495bSYour Name WLAN_TX_ABORT, 147*5113495bSYour Name WLAN_VDEV_STOP, 148*5113495bSYour Name WLAN_PEER_UNAUTHORISED, 149*5113495bSYour Name WLAN_THERMAL_MITIGATION, 150*5113495bSYour Name WLAN_DATA_FLOW_CONTROL_PRIORITY, 151*5113495bSYour Name WLAN_DATA_FLOW_CTRL_BE_BK, 152*5113495bSYour Name WLAN_DATA_FLOW_CTRL_VI, 153*5113495bSYour Name WLAN_DATA_FLOW_CTRL_VO, 154*5113495bSYour Name WLAN_DATA_FLOW_CTRL_PRI, 155*5113495bSYour Name WLAN_REASON_TYPE_MAX, 156*5113495bSYour Name }; 157*5113495bSYour Name 158*5113495bSYour Name enum ol_rx_err_type { 159*5113495bSYour Name OL_RX_ERR_DEFRAG_MIC, 160*5113495bSYour Name OL_RX_ERR_PN, 161*5113495bSYour Name OL_RX_ERR_UNKNOWN_PEER, 162*5113495bSYour Name OL_RX_ERR_MALFORMED, 163*5113495bSYour Name OL_RX_ERR_TKIP_MIC, 164*5113495bSYour Name OL_RX_ERR_DECRYPT, 165*5113495bSYour Name OL_RX_ERR_MPDU_LENGTH, 166*5113495bSYour Name OL_RX_ERR_ENCRYPT_REQUIRED, 167*5113495bSYour Name OL_RX_ERR_DUP, 168*5113495bSYour Name OL_RX_ERR_UNKNOWN, 169*5113495bSYour Name OL_RX_ERR_FCS, 170*5113495bSYour Name OL_RX_ERR_PRIVACY, 171*5113495bSYour Name OL_RX_ERR_NONE_FRAG, 172*5113495bSYour Name OL_RX_ERR_NONE = 0xFF 173*5113495bSYour Name }; 174*5113495bSYour Name 175*5113495bSYour Name enum throttle_level { 176*5113495bSYour Name THROTTLE_LEVEL_0, 177*5113495bSYour Name THROTTLE_LEVEL_1, 178*5113495bSYour Name THROTTLE_LEVEL_2, 179*5113495bSYour Name THROTTLE_LEVEL_3, 180*5113495bSYour Name THROTTLE_LEVEL_4, 181*5113495bSYour Name THROTTLE_LEVEL_5, 182*5113495bSYour Name /* Invalid */ 183*5113495bSYour Name THROTTLE_LEVEL_MAX, 184*5113495bSYour Name }; 185*5113495bSYour Name 186*5113495bSYour Name enum { 187*5113495bSYour Name OL_TX_WMM_AC_BE, 188*5113495bSYour Name OL_TX_WMM_AC_BK, 189*5113495bSYour Name OL_TX_WMM_AC_VI, 190*5113495bSYour Name OL_TX_WMM_AC_VO, 191*5113495bSYour Name OL_TX_NUM_WMM_AC 192*5113495bSYour Name }; 193*5113495bSYour Name 194*5113495bSYour Name /** 195*5113495bSYour Name * enum ol_tx_spec - indicate what non-standard transmission actions to apply 196*5113495bSYour Name * @OL_TX_SPEC_STD: do regular processing 197*5113495bSYour Name * @OL_TX_SPEC_RAW: skip encap + A-MSDU aggr 198*5113495bSYour Name * @OL_TX_SPEC_NO_AGGR: skip encap + all aggr 199*5113495bSYour Name * @OL_TX_SPEC_NO_ENCRYPT: skip encap + encrypt 200*5113495bSYour Name * @OL_TX_SPEC_TSO: TCP segmented 201*5113495bSYour Name * @OL_TX_SPEC_NWIFI_NO_ENCRYPT: skip encrypt for nwifi 202*5113495bSYour Name * @OL_TX_SPEC_NO_FREE: give to cb rather than free 203*5113495bSYour Name * 204*5113495bSYour Name * Indicate one or more of the following: 205*5113495bSYour Name * - The tx frame already has a complete 802.11 header. 206*5113495bSYour Name * Thus, skip 802.3/native-WiFi to 802.11 header encapsulation and 207*5113495bSYour Name * A-MSDU aggregation. 208*5113495bSYour Name * - The tx frame should not be aggregated (A-MPDU or A-MSDU) 209*5113495bSYour Name * - The tx frame is already encrypted - don't attempt encryption. 210*5113495bSYour Name * - The tx frame is a segment of a TCP jumbo frame. 211*5113495bSYour Name * - This tx frame should not be unmapped and freed by the txrx layer 212*5113495bSYour Name * after transmission, but instead given to a registered tx completion 213*5113495bSYour Name * callback. 214*5113495bSYour Name * More than one of these specification can apply, though typically 215*5113495bSYour Name * only a single specification is applied to a tx frame. 216*5113495bSYour Name * A compound specification can be created, as a bit-OR of these 217*5113495bSYour Name * specifications. 218*5113495bSYour Name */ 219*5113495bSYour Name enum ol_tx_spec { 220*5113495bSYour Name OL_TX_SPEC_STD = 0x0, /* do regular processing */ 221*5113495bSYour Name OL_TX_SPEC_RAW = 0x1, /* skip encap + A-MSDU aggr */ 222*5113495bSYour Name OL_TX_SPEC_NO_AGGR = 0x2, /* skip encap + all aggr */ 223*5113495bSYour Name OL_TX_SPEC_NO_ENCRYPT = 0x4, /* skip encap + encrypt */ 224*5113495bSYour Name OL_TX_SPEC_TSO = 0x8, /* TCP segmented */ 225*5113495bSYour Name OL_TX_SPEC_NWIFI_NO_ENCRYPT = 0x10, /* skip encrypt for nwifi */ 226*5113495bSYour Name OL_TX_SPEC_NO_FREE = 0x20, /* give to cb rather than free */ 227*5113495bSYour Name }; 228*5113495bSYour Name 229*5113495bSYour Name /** 230*5113495bSYour Name * enum peer_debug_id_type - debug ids to track peer get_ref and release_ref 231*5113495bSYour Name * @PEER_DEBUG_ID_OL_INTERNAL: debug id for OL internal usage 232*5113495bSYour Name * @PEER_DEBUG_ID_WMA_PKT_DROP: debug id for wma_is_pkt_drop_candidate API 233*5113495bSYour Name * @PEER_DEBUG_ID_WMA_ADDBA_REQ: debug id for ADDBA request 234*5113495bSYour Name * @PEER_DEBUG_ID_WMA_DELBA_REQ: debug id for DELBA request 235*5113495bSYour Name * @PEER_DEBUG_ID_LIM_SEND_ADDBA_RESP: debug id for send ADDBA response 236*5113495bSYour Name * @PEER_DEBUG_ID_OL_RX_THREAD: debug id for rx thread 237*5113495bSYour Name * @PEER_DEBUG_ID_WMA_CCMP_REPLAY_ATTACK: debug id for CCMP replay 238*5113495bSYour Name * @PEER_DEBUG_ID_WMA_DEL_BSS:debug id for remove BSS 239*5113495bSYour Name * @PEER_DEBUG_ID_WMA_VDEV_STOP_RESP:debug id for vdev stop response handler 240*5113495bSYour Name * @PEER_DEBUG_ID_OL_PEER_MAP:debug id for peer map/unmap 241*5113495bSYour Name * @PEER_DEBUG_ID_OL_PEER_ATTACH: debug id for peer attach/detach 242*5113495bSYour Name * @PEER_DEBUG_ID_OL_TXQ_VDEV_FL: debug id for vdev flush 243*5113495bSYour Name * @PEER_DEBUG_ID_OL_HASH_ERS: debug id for peer find hash erase 244*5113495bSYour Name * @PEER_DEBUG_ID_OL_UNMAP_TIMER_WORK: debug id for peer unmap timer work 245*5113495bSYour Name * @PEER_DEBUG_ID_MAX: debug id MAX 246*5113495bSYour Name * 247*5113495bSYour Name * Unique peer debug IDs to track the callers. Each new usage can add to 248*5113495bSYour Name * this enum list to create a new "PEER_DEBUG_ID_". 249*5113495bSYour Name */ 250*5113495bSYour Name enum peer_debug_id_type { 251*5113495bSYour Name PEER_DEBUG_ID_OL_INTERNAL, 252*5113495bSYour Name PEER_DEBUG_ID_WMA_PKT_DROP, 253*5113495bSYour Name PEER_DEBUG_ID_WMA_ADDBA_REQ, 254*5113495bSYour Name PEER_DEBUG_ID_WMA_DELBA_REQ, 255*5113495bSYour Name PEER_DEBUG_ID_LIM_SEND_ADDBA_RESP, 256*5113495bSYour Name PEER_DEBUG_ID_OL_RX_THREAD, 257*5113495bSYour Name PEER_DEBUG_ID_WMA_CCMP_REPLAY_ATTACK, 258*5113495bSYour Name PEER_DEBUG_ID_WMA_DEL_BSS, 259*5113495bSYour Name PEER_DEBUG_ID_WMA_VDEV_STOP_RESP, 260*5113495bSYour Name PEER_DEBUG_ID_OL_PEER_MAP, 261*5113495bSYour Name PEER_DEBUG_ID_OL_PEER_ATTACH, 262*5113495bSYour Name PEER_DEBUG_ID_OL_TXQ_VDEV_FL, 263*5113495bSYour Name PEER_DEBUG_ID_OL_HASH_ERS, 264*5113495bSYour Name PEER_DEBUG_ID_OL_UNMAP_TIMER_WORK, 265*5113495bSYour Name PEER_DEBUG_ID_MAX 266*5113495bSYour Name }; 267*5113495bSYour Name 268*5113495bSYour Name /** 269*5113495bSYour Name * enum cdp_peer_bw - Bandwidth types 270*5113495bSYour Name * @CDP_20_MHZ: 20MHz BW 271*5113495bSYour Name * @CDP_40_MHZ: 40MHz BW 272*5113495bSYour Name * @CDP_80_MHZ: 80MHz BW 273*5113495bSYour Name * @CDP_160_MHZ: 160MHz BW 274*5113495bSYour Name * @CDP_80P80_MHZ: 80+80MHz BW 275*5113495bSYour Name * @CDP_5_MHZ: 5MHz BW 276*5113495bSYour Name * @CDP_10_MHZ: 10MHz BW 277*5113495bSYour Name * @CDP_320_MHZ: 320MHz BW 278*5113495bSYour Name * @CDP_BW_INVALID: Invalid BW 279*5113495bSYour Name * @CDP_BW_MAX: Max BW id 280*5113495bSYour Name */ 281*5113495bSYour Name enum cdp_peer_bw { 282*5113495bSYour Name CDP_20_MHZ, 283*5113495bSYour Name CDP_40_MHZ, 284*5113495bSYour Name CDP_80_MHZ, 285*5113495bSYour Name CDP_160_MHZ, 286*5113495bSYour Name CDP_80P80_MHZ, 287*5113495bSYour Name CDP_5_MHZ, 288*5113495bSYour Name CDP_10_MHZ, 289*5113495bSYour Name CDP_320_MHZ, 290*5113495bSYour Name CDP_BW_INVALID, 291*5113495bSYour Name CDP_BW_MAX 292*5113495bSYour Name }; 293*5113495bSYour Name 294*5113495bSYour Name /** 295*5113495bSYour Name * struct ol_txrx_desc_type - txrx descriptor type 296*5113495bSYour Name * @is_qos_enabled: is station qos enabled 297*5113495bSYour Name * @is_wapi_supported: is station wapi supported 298*5113495bSYour Name * @peer_addr: peer mac address 299*5113495bSYour Name * @bw: bandwidth of peer connection 300*5113495bSYour Name */ 301*5113495bSYour Name struct ol_txrx_desc_type { 302*5113495bSYour Name uint8_t is_qos_enabled; 303*5113495bSYour Name uint8_t is_wapi_supported; 304*5113495bSYour Name struct qdf_mac_addr peer_addr; 305*5113495bSYour Name enum cdp_peer_bw bw; 306*5113495bSYour Name }; 307*5113495bSYour Name 308*5113495bSYour Name /** 309*5113495bSYour Name * struct ol_tx_sched_wrr_ac_specs_t - the wrr ac specs params structure 310*5113495bSYour Name * @wrr_skip_weight: map to ol_tx_sched_wrr_adv_category_info_t.specs. 311*5113495bSYour Name * wrr_skip_weight 312*5113495bSYour Name * @credit_threshold: map to ol_tx_sched_wrr_adv_category_info_t.specs. 313*5113495bSYour Name * credit_threshold 314*5113495bSYour Name * @send_limit: map to ol_tx_sched_wrr_adv_category_info_t.specs. 315*5113495bSYour Name * send_limit 316*5113495bSYour Name * @credit_reserve: map to ol_tx_sched_wrr_adv_category_info_t.specs. 317*5113495bSYour Name * credit_reserve 318*5113495bSYour Name * @discard_weight: map to ol_tx_sched_wrr_adv_category_info_t.specs. 319*5113495bSYour Name * discard_weight 320*5113495bSYour Name * 321*5113495bSYour Name * This structure is for wrr ac specs params set from user, it will update 322*5113495bSYour Name * its content corresponding to the ol_tx_sched_wrr_adv_category_info_t.specs. 323*5113495bSYour Name */ 324*5113495bSYour Name struct ol_tx_sched_wrr_ac_specs_t { 325*5113495bSYour Name int wrr_skip_weight; 326*5113495bSYour Name uint32_t credit_threshold; 327*5113495bSYour Name uint16_t send_limit; 328*5113495bSYour Name int credit_reserve; 329*5113495bSYour Name int discard_weight; 330*5113495bSYour Name }; 331*5113495bSYour Name 332*5113495bSYour Name /** 333*5113495bSYour Name * struct txrx_pdev_cfg_param_t - configuration information 334*5113495bSYour Name * passed to the data path 335*5113495bSYour Name * @is_full_reorder_offload: 336*5113495bSYour Name * @is_uc_offload_enabled: IPA Micro controller data path offload enable flag 337*5113495bSYour Name * @uc_tx_buffer_count: IPA Micro controller data path offload TX buffer count 338*5113495bSYour Name * @uc_tx_buffer_size: IPA Micro controller data path offload TX buffer size 339*5113495bSYour Name * @uc_rx_indication_ring_count: IPA Micro controller data path offload RX 340*5113495bSYour Name * indication ring count 341*5113495bSYour Name * @uc_tx_partition_base: IPA Micro controller data path offload TX partition 342*5113495bSYour Name * base 343*5113495bSYour Name * @ip_tcp_udp_checksum_offload: IP, TCP and UDP checksum offload 344*5113495bSYour Name * @nan_ip_tcp_udp_checksum_offload: IP, TCP and UDP checksum offload for NAN 345*5113495bSYour Name * Mode 346*5113495bSYour Name * @p2p_ip_tcp_udp_checksum_offload: IP, TCP and UDP checksum offload for P2P 347*5113495bSYour Name * Mod 348*5113495bSYour Name * @legacy_mode_csum_disable: Checksum offload override flag for Legcay modes 349*5113495bSYour Name * @enable_rxthread: Rx processing in thread from TXRX 350*5113495bSYour Name * @ce_classify_enabled: CE classification enabled through INI 351*5113495bSYour Name * @tx_flow_stop_queue_th: Threshold to stop queue in percentage 352*5113495bSYour Name * @tx_flow_start_queue_offset: Start queue offset in percentage 353*5113495bSYour Name * @del_ack_enable: enable the tcp delay ack feature in the driver 354*5113495bSYour Name * @del_ack_timer_value: timeout if no more tcp ack frames, unit is ms 355*5113495bSYour Name * @del_ack_pkt_count: the maximum number of replaced tcp ack frames 356*5113495bSYour Name * @ac_specs: 357*5113495bSYour Name * @gro_enable: 358*5113495bSYour Name * @tso_enable: 359*5113495bSYour Name * @lro_enable: 360*5113495bSYour Name * @sg_enable: 361*5113495bSYour Name * @enable_data_stall_detection: 362*5113495bSYour Name * @enable_flow_steering: 363*5113495bSYour Name * @disable_intra_bss_fwd: 364*5113495bSYour Name * @bundle_timer_value: 365*5113495bSYour Name * @bundle_size: 366*5113495bSYour Name * @pktlog_buffer_size: 367*5113495bSYour Name */ 368*5113495bSYour Name struct txrx_pdev_cfg_param_t { 369*5113495bSYour Name uint8_t is_full_reorder_offload; 370*5113495bSYour Name uint8_t is_uc_offload_enabled; 371*5113495bSYour Name uint32_t uc_tx_buffer_count; 372*5113495bSYour Name uint32_t uc_tx_buffer_size; 373*5113495bSYour Name uint32_t uc_rx_indication_ring_count; 374*5113495bSYour Name uint32_t uc_tx_partition_base; 375*5113495bSYour Name bool ip_tcp_udp_checksum_offload; 376*5113495bSYour Name bool nan_ip_tcp_udp_checksum_offload; 377*5113495bSYour Name bool p2p_ip_tcp_udp_checksum_offload; 378*5113495bSYour Name bool legacy_mode_csum_disable; 379*5113495bSYour Name bool enable_rxthread; 380*5113495bSYour Name bool ce_classify_enabled; 381*5113495bSYour Name #if defined(QCA_LL_TX_FLOW_CONTROL_V2) || defined(QCA_LL_PDEV_TX_FLOW_CONTROL) 382*5113495bSYour Name uint32_t tx_flow_stop_queue_th; 383*5113495bSYour Name uint32_t tx_flow_start_queue_offset; 384*5113495bSYour Name #endif 385*5113495bSYour Name 386*5113495bSYour Name #ifdef QCA_SUPPORT_TXRX_DRIVER_TCP_DEL_ACK 387*5113495bSYour Name bool del_ack_enable; 388*5113495bSYour Name uint16_t del_ack_timer_value; 389*5113495bSYour Name uint16_t del_ack_pkt_count; 390*5113495bSYour Name #endif 391*5113495bSYour Name 392*5113495bSYour Name struct ol_tx_sched_wrr_ac_specs_t ac_specs[TX_WMM_AC_NUM]; 393*5113495bSYour Name bool gro_enable; 394*5113495bSYour Name bool tso_enable; 395*5113495bSYour Name bool lro_enable; 396*5113495bSYour Name bool sg_enable; 397*5113495bSYour Name uint32_t enable_data_stall_detection; 398*5113495bSYour Name bool enable_flow_steering; 399*5113495bSYour Name bool disable_intra_bss_fwd; 400*5113495bSYour Name 401*5113495bSYour Name #ifdef WLAN_SUPPORT_TXRX_HL_BUNDLE 402*5113495bSYour Name uint16_t bundle_timer_value; 403*5113495bSYour Name uint16_t bundle_size; 404*5113495bSYour Name #endif 405*5113495bSYour Name uint8_t pktlog_buffer_size; 406*5113495bSYour Name }; 407*5113495bSYour Name 408*5113495bSYour Name #ifdef IPA_OFFLOAD 409*5113495bSYour Name /** 410*5113495bSYour Name * struct ol_txrx_ipa_resources - Resources needed for IPA 411*5113495bSYour Name * @ce_sr: 412*5113495bSYour Name * @ce_sr_ring_size: 413*5113495bSYour Name * @ce_reg_paddr: 414*5113495bSYour Name * @tx_comp_ring: 415*5113495bSYour Name * @tx_num_alloc_buffer: 416*5113495bSYour Name * @rx_rdy_ring: 417*5113495bSYour Name * @rx_proc_done_idx: 418*5113495bSYour Name * @rx2_rdy_ring: 419*5113495bSYour Name * @rx2_proc_done_idx: 420*5113495bSYour Name * @tx_comp_doorbell_dmaaddr: IPA UC Tx Complete doorbell register paddr 421*5113495bSYour Name * @rx_ready_doorbell_dmaaddr: IPA UC Rx Ready doorbell register paddr 422*5113495bSYour Name * @tx_pipe_handle: 423*5113495bSYour Name * @rx_pipe_handle: 424*5113495bSYour Name */ 425*5113495bSYour Name struct ol_txrx_ipa_resources { 426*5113495bSYour Name qdf_shared_mem_t *ce_sr; 427*5113495bSYour Name uint32_t ce_sr_ring_size; 428*5113495bSYour Name qdf_dma_addr_t ce_reg_paddr; 429*5113495bSYour Name 430*5113495bSYour Name qdf_shared_mem_t *tx_comp_ring; 431*5113495bSYour Name uint32_t tx_num_alloc_buffer; 432*5113495bSYour Name 433*5113495bSYour Name qdf_shared_mem_t *rx_rdy_ring; 434*5113495bSYour Name qdf_shared_mem_t *rx_proc_done_idx; 435*5113495bSYour Name 436*5113495bSYour Name qdf_shared_mem_t *rx2_rdy_ring; 437*5113495bSYour Name qdf_shared_mem_t *rx2_proc_done_idx; 438*5113495bSYour Name 439*5113495bSYour Name /* IPA UC doorbell registers paddr */ 440*5113495bSYour Name qdf_dma_addr_t tx_comp_doorbell_dmaaddr; 441*5113495bSYour Name qdf_dma_addr_t rx_ready_doorbell_dmaaddr; 442*5113495bSYour Name 443*5113495bSYour Name uint32_t tx_pipe_handle; 444*5113495bSYour Name uint32_t rx_pipe_handle; 445*5113495bSYour Name }; 446*5113495bSYour Name #endif 447*5113495bSYour Name 448*5113495bSYour Name struct ol_txrx_ocb_chan_info { 449*5113495bSYour Name uint32_t chan_freq; 450*5113495bSYour Name uint16_t disable_rx_stats_hdr:1; 451*5113495bSYour Name }; 452*5113495bSYour Name 453*5113495bSYour Name /** 454*5113495bSYour Name * struct ol_mic_error_info - carries the information associated with 455*5113495bSYour Name * a MIC error 456*5113495bSYour Name * @vdev_id: virtual device ID 457*5113495bSYour Name * @key_id: Key ID 458*5113495bSYour Name * @pn: packet number 459*5113495bSYour Name * @sa: source address 460*5113495bSYour Name * @da: destination address 461*5113495bSYour Name * @ta: transmitter address 462*5113495bSYour Name */ 463*5113495bSYour Name struct ol_mic_error_info { 464*5113495bSYour Name uint8_t vdev_id; 465*5113495bSYour Name uint32_t key_id; 466*5113495bSYour Name uint64_t pn; 467*5113495bSYour Name uint8_t sa[QDF_MAC_ADDR_SIZE]; 468*5113495bSYour Name uint8_t da[QDF_MAC_ADDR_SIZE]; 469*5113495bSYour Name uint8_t ta[QDF_MAC_ADDR_SIZE]; 470*5113495bSYour Name }; 471*5113495bSYour Name 472*5113495bSYour Name /** 473*5113495bSYour Name * struct ol_error_info - carries the information associated with an 474*5113495bSYour Name * error indicated by the firmware 475*5113495bSYour Name * @u: union of error information structs 476*5113495bSYour Name * @u.mic_err: MIC error information 477*5113495bSYour Name */ 478*5113495bSYour Name struct ol_error_info { 479*5113495bSYour Name union { 480*5113495bSYour Name struct ol_mic_error_info mic_err; 481*5113495bSYour Name } u; 482*5113495bSYour Name }; 483*5113495bSYour Name 484*5113495bSYour Name 485*5113495bSYour Name /** 486*5113495bSYour Name * struct ol_txrx_ocb_set_chan - txrx OCB channel info 487*5113495bSYour Name * @ocb_channel_count: Channel count 488*5113495bSYour Name * @ocb_channel_info: OCB channel info 489*5113495bSYour Name */ 490*5113495bSYour Name struct ol_txrx_ocb_set_chan { 491*5113495bSYour Name uint32_t ocb_channel_count; 492*5113495bSYour Name struct ol_txrx_ocb_chan_info *ocb_channel_info; 493*5113495bSYour Name }; 494*5113495bSYour Name 495*5113495bSYour Name /** 496*5113495bSYour Name * struct ol_tx_ac_param_t - WMM parameters 497*5113495bSYour Name * @aifs: Arbitration Inter-Frame Space 498*5113495bSYour Name * @cwmin: Minimum contention window size 499*5113495bSYour Name * @cwmax: Maximum contention window size 500*5113495bSYour Name * 501*5113495bSYour Name * The struct is used to specify information to update TX WMM scheduler. 502*5113495bSYour Name */ 503*5113495bSYour Name struct ol_tx_ac_param_t { 504*5113495bSYour Name uint32_t aifs; 505*5113495bSYour Name uint32_t cwmin; 506*5113495bSYour Name uint32_t cwmax; 507*5113495bSYour Name }; 508*5113495bSYour Name 509*5113495bSYour Name struct ol_tx_wmm_param_t { 510*5113495bSYour Name struct ol_tx_ac_param_t ac[OL_TX_NUM_WMM_AC]; 511*5113495bSYour Name }; 512*5113495bSYour Name 513*5113495bSYour Name struct ieee80211_ba_parameterset { 514*5113495bSYour Name #if _BYTE_ORDER == _BIG_ENDIAN 515*5113495bSYour Name uint16_t buffersize:10, /* B6-15 buffer size */ 516*5113495bSYour Name tid:4, /* B2-5 TID */ 517*5113495bSYour Name bapolicy:1, /* B1 block ack policy */ 518*5113495bSYour Name amsdusupported:1; /* B0 amsdu supported */ 519*5113495bSYour Name #else 520*5113495bSYour Name uint16_t amsdusupported:1, /* B0 amsdu supported */ 521*5113495bSYour Name bapolicy:1, /* B1 block ack policy */ 522*5113495bSYour Name tid:4, /* B2-5 TID */ 523*5113495bSYour Name buffersize:10; /* B6-15 buffer size */ 524*5113495bSYour Name #endif 525*5113495bSYour Name } __packed; 526*5113495bSYour Name 527*5113495bSYour Name struct ieee80211_ba_seqctrl { 528*5113495bSYour Name #if _BYTE_ORDER == _BIG_ENDIAN 529*5113495bSYour Name uint16_t startseqnum:12, /* B4-15 starting sequence number */ 530*5113495bSYour Name fragnum:4; /* B0-3 fragment number */ 531*5113495bSYour Name #else 532*5113495bSYour Name uint16_t fragnum:4, /* B0-3 fragment number */ 533*5113495bSYour Name startseqnum:12; /* B4-15 starting sequence number */ 534*5113495bSYour Name #endif 535*5113495bSYour Name } __packed; 536*5113495bSYour Name 537*5113495bSYour Name struct ieee80211_delba_parameterset { 538*5113495bSYour Name #if _BYTE_ORDER == _BIG_ENDIAN 539*5113495bSYour Name uint16_t tid:4, /* B12-15 tid */ 540*5113495bSYour Name initiator:1, /* B11 initiator */ 541*5113495bSYour Name reserved0:11; /* B0-10 reserved */ 542*5113495bSYour Name #else 543*5113495bSYour Name uint16_t reserved0:11, /* B0-10 reserved */ 544*5113495bSYour Name initiator:1, /* B11 initiator */ 545*5113495bSYour Name tid:4; /* B12-15 tid */ 546*5113495bSYour Name #endif 547*5113495bSYour Name } __packed; 548*5113495bSYour Name 549*5113495bSYour Name /** 550*5113495bSYour Name * typedef ol_txrx_vdev_peer_remove_cb() - wma_remove_peer callback 551*5113495bSYour Name * @handle: callback handle 552*5113495bSYour Name * @bssid: BSSID 553*5113495bSYour Name * @vdev_id: virtual device ID 554*5113495bSYour Name * @peer: peer 555*5113495bSYour Name */ 556*5113495bSYour Name typedef void (*ol_txrx_vdev_peer_remove_cb)(void *handle, uint8_t *bssid, 557*5113495bSYour Name uint8_t vdev_id, void *peer); 558*5113495bSYour Name 559*5113495bSYour Name /** 560*5113495bSYour Name * typedef tx_pause_callback() - OSIF function registered with the data path 561*5113495bSYour Name * @vdev_id: virtual device id 562*5113495bSYour Name * @action: tx pause action to take 563*5113495bSYour Name * @reason: reason for the tx pause action 564*5113495bSYour Name */ 565*5113495bSYour Name typedef void (*tx_pause_callback)(uint8_t vdev_id, 566*5113495bSYour Name enum netif_action_type action, 567*5113495bSYour Name enum netif_reason_type reason); 568*5113495bSYour Name 569*5113495bSYour Name /** 570*5113495bSYour Name * struct ol_rx_inv_peer_params - rx invalid peer data parameters 571*5113495bSYour Name * @vdev_id: Virtual device ID 572*5113495bSYour Name * @ra: RX data receiver MAC address 573*5113495bSYour Name * @ta: RX data transmitter MAC address 574*5113495bSYour Name */ 575*5113495bSYour Name struct ol_rx_inv_peer_params { 576*5113495bSYour Name uint8_t vdev_id; 577*5113495bSYour Name uint8_t ra[QDF_MAC_ADDR_SIZE]; 578*5113495bSYour Name uint8_t ta[QDF_MAC_ADDR_SIZE]; 579*5113495bSYour Name }; 580*5113495bSYour Name 581*5113495bSYour Name /** 582*5113495bSYour Name * struct cdp_txrx_ext_stats: dp extended stats 583*5113495bSYour Name * @tx_msdu_enqueue: tx msdu queued to hw 584*5113495bSYour Name * @tx_msdu_overflow: tx msdu overflow 585*5113495bSYour Name * @rx_mpdu_received: rx mpdu processed by hw 586*5113495bSYour Name * @rx_mpdu_delivered: rx mpdu received from hw 587*5113495bSYour Name * @rx_mpdu_error: rx mpdu error count 588*5113495bSYour Name * @rx_mpdu_missed: rx mpdu missed by hw 589*5113495bSYour Name */ 590*5113495bSYour Name struct cdp_txrx_ext_stats { 591*5113495bSYour Name uint32_t tx_msdu_enqueue; 592*5113495bSYour Name uint32_t tx_msdu_overflow; 593*5113495bSYour Name uint32_t rx_mpdu_received; 594*5113495bSYour Name uint32_t rx_mpdu_delivered; 595*5113495bSYour Name uint32_t rx_mpdu_error; 596*5113495bSYour Name uint32_t rx_mpdu_missed; 597*5113495bSYour Name }; 598*5113495bSYour Name 599*5113495bSYour Name #endif /* __CDP_TXRX_MOB_DEF_H */ 600