xref: /wlan-driver/qca-wifi-host-cmn/dp/inc/cdp_txrx_mob_def.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
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