xref: /wlan-dirver/qca-wifi-host-cmn/dp/inc/cdp_txrx_mob_def.h (revision 91abaccb452c5ef80225d45a998644d4cdd55543)
1 /*
2  * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved.
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 
24 #define TX_WMM_AC_NUM	4
25 
26 #define OL_TXQ_PAUSE_REASON_FW                (1 << 0)
27 #define OL_TXQ_PAUSE_REASON_PEER_UNAUTHORIZED (1 << 1)
28 #define OL_TXQ_PAUSE_REASON_TX_ABORT          (1 << 2)
29 #define OL_TXQ_PAUSE_REASON_VDEV_STOP         (1 << 3)
30 #define OL_TXQ_PAUSE_REASON_THERMAL_MITIGATION (1 << 4)
31 
32 #define OL_TXRX_INVALID_NUM_PEERS (-1)
33 
34 #define OL_TXRX_MAC_ADDR_LEN 6
35 
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
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
87  */
88 enum netif_action_type {
89 	WLAN_STOP_ALL_NETIF_QUEUE = 1,
90 	WLAN_START_ALL_NETIF_QUEUE,
91 	WLAN_WAKE_ALL_NETIF_QUEUE,
92 	WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER,
93 	WLAN_START_ALL_NETIF_QUEUE_N_CARRIER,
94 	WLAN_NETIF_TX_DISABLE,
95 	WLAN_NETIF_TX_DISABLE_N_CARRIER,
96 	WLAN_NETIF_CARRIER_ON,
97 	WLAN_NETIF_CARRIER_OFF,
98 	WLAN_NETIF_PRIORITY_QUEUE_ON,
99 	WLAN_NETIF_PRIORITY_QUEUE_OFF,
100 	WLAN_WAKE_NON_PRIORITY_QUEUE,
101 	WLAN_STOP_NON_PRIORITY_QUEUE,
102 	WLAN_NETIF_ACTION_TYPE_MAX,
103 };
104 
105 /**
106  * enum netif_reason_type - reason for netif queue action
107  * @WLAN_CONTROL_PATH: action from control path
108  * @WLAN_DATA_FLOW_CONTROL: because of flow control
109  * @WLAN_FW_PAUSE: because of firmware pause
110  * @WLAN_TX_ABORT: because of tx abort
111  * @WLAN_VDEV_STOP: because of vdev stop
112  * @WLAN_PEER_UNAUTHORISED: because of peer is unauthorised
113  * @WLAN_THERMAL_MITIGATION: because of thermal mitigation
114  */
115 enum netif_reason_type {
116 	WLAN_CONTROL_PATH = 1,
117 	WLAN_DATA_FLOW_CONTROL,
118 	WLAN_FW_PAUSE,
119 	WLAN_TX_ABORT,
120 	WLAN_VDEV_STOP,
121 	WLAN_PEER_UNAUTHORISED,
122 	WLAN_THERMAL_MITIGATION,
123 	WLAN_DATA_FLOW_CONTROL_PRIORITY,
124 	WLAN_REASON_TYPE_MAX,
125 };
126 
127 enum ol_rx_err_type {
128 	OL_RX_ERR_DEFRAG_MIC,
129 	OL_RX_ERR_PN,
130 	OL_RX_ERR_UNKNOWN_PEER,
131 	OL_RX_ERR_MALFORMED,
132 	OL_RX_ERR_TKIP_MIC,
133 	OL_RX_ERR_DECRYPT,
134 	OL_RX_ERR_MPDU_LENGTH,
135 	OL_RX_ERR_ENCRYPT_REQUIRED,
136 	OL_RX_ERR_DUP,
137 	OL_RX_ERR_UNKNOWN,
138 	OL_RX_ERR_FCS,
139 	OL_RX_ERR_PRIVACY,
140 	OL_RX_ERR_NONE_FRAG,
141 	OL_RX_ERR_NONE = 0xFF
142 };
143 
144 enum throttle_level {
145 	THROTTLE_LEVEL_0,
146 	THROTTLE_LEVEL_1,
147 	THROTTLE_LEVEL_2,
148 	THROTTLE_LEVEL_3,
149 	/* Invalid */
150 	THROTTLE_LEVEL_MAX,
151 };
152 
153 enum {
154 	OL_TX_WMM_AC_BE,
155 	OL_TX_WMM_AC_BK,
156 	OL_TX_WMM_AC_VI,
157 	OL_TX_WMM_AC_VO,
158 	OL_TX_NUM_WMM_AC
159 };
160 
161 /**
162  * @enum ol_tx_spec
163  * @brief indicate what non-standard transmission actions to apply
164  * @details
165  *  Indicate one or more of the following:
166  *    - The tx frame already has a complete 802.11 header.
167  *      Thus, skip 802.3/native-WiFi to 802.11 header encapsulation and
168  *      A-MSDU aggregation.
169  *    - The tx frame should not be aggregated (A-MPDU or A-MSDU)
170  *    - The tx frame is already encrypted - don't attempt encryption.
171  *    - The tx frame is a segment of a TCP jumbo frame.
172  *    - This tx frame should not be unmapped and freed by the txrx layer
173  *      after transmission, but instead given to a registered tx completion
174  *      callback.
175  *  More than one of these specification can apply, though typically
176  *  only a single specification is applied to a tx frame.
177  *  A compound specification can be created, as a bit-OR of these
178  *  specifications.
179  */
180 enum ol_tx_spec {
181 	OL_TX_SPEC_STD = 0x0,   /* do regular processing */
182 	OL_TX_SPEC_RAW = 0x1,   /* skip encap + A-MSDU aggr */
183 	OL_TX_SPEC_NO_AGGR = 0x2,       /* skip encap + all aggr */
184 	OL_TX_SPEC_NO_ENCRYPT = 0x4,    /* skip encap + encrypt */
185 	OL_TX_SPEC_TSO = 0x8,   /* TCP segmented */
186 	OL_TX_SPEC_NWIFI_NO_ENCRYPT = 0x10,     /* skip encrypt for nwifi */
187 	OL_TX_SPEC_NO_FREE = 0x20,      /* give to cb rather than free */
188 };
189 
190 /**
191  * struct ol_txrx_desc_type - txrx descriptor type
192  * @sta_id: sta id
193  * @is_qos_enabled: is station qos enabled
194  * @is_wapi_supported: is station wapi supported
195  */
196 struct ol_txrx_desc_type {
197 	uint8_t sta_id;
198 	uint8_t is_qos_enabled;
199 	uint8_t is_wapi_supported;
200 };
201 
202 /**
203  * struct ol_tx_sched_wrr_ac_specs_t - the wrr ac specs params structure
204  * @wrr_skip_weight: map to ol_tx_sched_wrr_adv_category_info_t.specs.
205  *                            wrr_skip_weight
206  * @credit_threshold: map to ol_tx_sched_wrr_adv_category_info_t.specs.
207  *                            credit_threshold
208  * @send_limit: map to ol_tx_sched_wrr_adv_category_info_t.specs.
209  *                            send_limit
210  * @credit_reserve: map to ol_tx_sched_wrr_adv_category_info_t.specs.
211  *                            credit_reserve
212  * @discard_weight: map to ol_tx_sched_wrr_adv_category_info_t.specs.
213  *                            discard_weight
214  *
215  * This structure is for wrr ac specs params set from user, it will update
216  * its content corresponding to the ol_tx_sched_wrr_adv_category_info_t.specs.
217  */
218 struct ol_tx_sched_wrr_ac_specs_t {
219 	int wrr_skip_weight;
220 	uint32_t credit_threshold;
221 	uint16_t send_limit;
222 	int credit_reserve;
223 	int discard_weight;
224 };
225 
226 /**
227  * struct txrx_pdev_cfg_param_t - configuration information
228  * passed to the data path
229  */
230 struct txrx_pdev_cfg_param_t {
231 	uint8_t is_full_reorder_offload;
232 	/* IPA Micro controller data path offload enable flag */
233 	uint8_t is_uc_offload_enabled;
234 	/* IPA Micro controller data path offload TX buffer count */
235 	uint32_t uc_tx_buffer_count;
236 	/* IPA Micro controller data path offload TX buffer size */
237 	uint32_t uc_tx_buffer_size;
238 	/* IPA Micro controller data path offload RX indication ring count */
239 	uint32_t uc_rx_indication_ring_count;
240 	/* IPA Micro controller data path offload TX partition base */
241 	uint32_t uc_tx_partition_base;
242 	/* IP, TCP and UDP checksum offload */
243 	bool ip_tcp_udp_checksum_offload;
244 	/* Rx processing in thread from TXRX */
245 	bool enable_rxthread;
246 	/* CE classification enabled through INI */
247 	bool ce_classify_enabled;
248 #ifdef QCA_LL_TX_FLOW_CONTROL_V2
249 	/* Threshold to stop queue in percentage */
250 	uint32_t tx_flow_stop_queue_th;
251 	/* Start queue offset in percentage */
252 	uint32_t tx_flow_start_queue_offset;
253 #endif
254 
255 	struct ol_tx_sched_wrr_ac_specs_t ac_specs[TX_WMM_AC_NUM];
256 };
257 
258 #ifdef IPA_OFFLOAD
259 /**
260  * ol_txrx_ipa_resources - Resources needed for IPA
261  */
262 struct ol_txrx_ipa_resources {
263 	qdf_dma_addr_t ce_sr_base_paddr;
264 	uint32_t ce_sr_ring_size;
265 	qdf_dma_addr_t ce_reg_paddr;
266 
267 	qdf_dma_addr_t tx_comp_ring_base_paddr;
268 	uint32_t tx_comp_ring_size;
269 	uint32_t tx_num_alloc_buffer;
270 
271 	qdf_dma_addr_t rx_rdy_ring_base_paddr;
272 	uint32_t rx_rdy_ring_size;
273 	qdf_dma_addr_t rx_proc_done_idx_paddr;
274 	void *rx_proc_done_idx_vaddr;
275 
276 	qdf_dma_addr_t rx2_rdy_ring_base_paddr;
277 	uint32_t rx2_rdy_ring_size;
278 	qdf_dma_addr_t rx2_proc_done_idx_paddr;
279 	void *rx2_proc_done_idx_vaddr;
280 
281 	/* IPA UC doorbell registers paddr */
282 	qdf_dma_addr_t tx_comp_doorbell_paddr;
283 	qdf_dma_addr_t rx_ready_doorbell_paddr;
284 
285 	uint32_t tx_pipe_handle;
286 	uint32_t rx_pipe_handle;
287 };
288 #endif
289 
290 struct ol_txrx_ocb_chan_info {
291 	uint32_t chan_freq;
292 	uint16_t disable_rx_stats_hdr:1;
293 };
294 
295 /**
296  * ol_mic_error_info - carries the information associated with
297  * a MIC error
298  * @vdev_id: virtual device ID
299  * @key_id: Key ID
300  * @pn: packet number
301  * @sa: source address
302  * @da: destination address
303  * @ta: transmitter address
304  */
305 struct ol_mic_error_info {
306 	uint8_t vdev_id;
307 	uint32_t key_id;
308 	uint64_t pn;
309 	uint8_t sa[OL_TXRX_MAC_ADDR_LEN];
310 	uint8_t da[OL_TXRX_MAC_ADDR_LEN];
311 	uint8_t ta[OL_TXRX_MAC_ADDR_LEN];
312 };
313 
314 /**
315  * ol_error_info - carries the information associated with an
316  * error indicated by the firmware
317  * @mic_err: MIC error information
318  */
319 struct ol_error_info {
320 	union {
321 		struct ol_mic_error_info mic_err;
322 	} u;
323 };
324 
325 
326 /**
327  * struct ol_txrx_ocb_set_chan - txrx OCB channel info
328  * @ocb_channel_count: Channel count
329  * @ocb_channel_info: OCB channel info
330  */
331 struct ol_txrx_ocb_set_chan {
332 	uint32_t ocb_channel_count;
333 	struct ol_txrx_ocb_chan_info *ocb_channel_info;
334 };
335 
336 /**
337  * @brief Parameter type to pass WMM setting to ol_txrx_set_wmm_param
338  * @details
339  *   The struct is used to specify informaiton to update TX WMM scheduler.
340  */
341 struct ol_tx_ac_param_t {
342 	uint32_t aifs;
343 	uint32_t cwmin;
344 	uint32_t cwmax;
345 };
346 
347 struct ol_tx_wmm_param_t {
348 	struct ol_tx_ac_param_t ac[OL_TX_NUM_WMM_AC];
349 };
350 
351 struct ieee80211_ba_parameterset {
352 #if _BYTE_ORDER == _BIG_ENDIAN
353 	uint16_t buffersize:10, /* B6-15  buffer size */
354 		 tid:4,       /* B2-5   TID */
355 		 bapolicy:1,  /* B1   block ack policy */
356 		 amsdusupported:1; /* B0   amsdu supported */
357 #else
358 	uint16_t amsdusupported:1,      /* B0   amsdu supported */
359 		 bapolicy:1,  /* B1   block ack policy */
360 		 tid:4,       /* B2-5   TID */
361 		 buffersize:10; /* B6-15  buffer size */
362 #endif
363 } __packed;
364 
365 struct ieee80211_ba_seqctrl {
366 #if _BYTE_ORDER == _BIG_ENDIAN
367 	uint16_t startseqnum:12,        /* B4-15  starting sequence number */
368 		 fragnum:4;   /* B0-3  fragment number */
369 #else
370 	uint16_t fragnum:4,     /* B0-3  fragment number */
371 		 startseqnum:12; /* B4-15  starting sequence number */
372 #endif
373 } __packed;
374 
375 struct ieee80211_delba_parameterset {
376 #if _BYTE_ORDER == _BIG_ENDIAN
377 	uint16_t tid:4,         /* B12-15  tid */
378 		 initiator:1, /* B11     initiator */
379 		 reserved0:11; /* B0-10   reserved */
380 #else
381 	uint16_t reserved0:11,  /* B0-10   reserved */
382 		 initiator:1, /* B11     initiator */
383 		 tid:4;       /* B12-15  tid */
384 #endif
385 } __packed;
386 
387 /**
388  * ol_txrx_vdev_peer_remove_cb - wma_remove_peer callback
389  */
390 typedef void (*ol_txrx_vdev_peer_remove_cb)(void *handle, uint8_t *bssid,
391 		uint8_t vdev_id, void *peer, bool roam_synch_in_progress);
392 
393 /**
394  * ol_txrx_tx_flow_control_fp - tx flow control notification
395  * function from txrx to OS shim
396  * @osif_dev - the virtual device's OS shim object
397  * @tx_resume - tx os q should be resumed or not
398  */
399 typedef void (*ol_txrx_tx_flow_control_fp)(void *osif_dev, bool tx_resume);
400 
401 /**
402  * ol_txrx_tx_flow_control_is_pause_fp - is tx paused by flow control
403  * function from txrx to OS shim
404  * @osif_dev - the virtual device's OS shim object
405  *
406  * Return: true if tx is paused by flow control
407  */
408 typedef bool (*ol_txrx_tx_flow_control_is_pause_fp)(void *osif_dev);
409 
410 /**
411  * ol_txrx_tx_flow_control_fp - tx flow control notification
412  * function from txrx to OS shim
413  * @osif_dev - the virtual device's OS shim object
414  * @tx_resume - tx os q should be resumed or not
415  */
416 typedef void (*tx_flow_control_fp)(void *osif_dev,
417 			 bool tx_resume);
418 
419 /**
420  * @typedef tx_pause_callback
421  * @brief OSIF function registered with the data path
422  */
423 typedef void (*tx_pause_callback)(uint8_t vdev_id,
424 		enum netif_action_type action,
425 		enum netif_reason_type reason);
426 
427 typedef void (*ipa_uc_op_cb_type)(uint8_t *op_msg,
428 			void *osif_ctxt);
429 
430 #endif /* __CDP_TXRX_MOB_DEF_H */
431