1 /*
2  * Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #ifndef _OL_CFG__H_
21 #define _OL_CFG__H_
22 
23 #include <qdf_types.h>          /* uint32_t */
24 #include <cdp_txrx_cmn.h>       /* ol_pdev_handle */
25 #include <cds_ieee80211_common.h>   /* ieee80211_qosframe_htc_addr4 */
26 #include <enet.h>               /* LLC_SNAP_HDR_LEN */
27 #if defined(CONFIG_HL_SUPPORT)
28 #include "wlan_tgt_def_config_hl.h"
29 #else
30 #include "wlan_tgt_def_config.h"
31 #endif
32 #include "ol_txrx_ctrl_api.h"   /* txrx_pdev_cfg_param_t */
33 #include <cdp_txrx_handle.h>
34 #include "qca_vendor.h"
35 
36 /**
37  * @brief format of data frames delivered to/from the WLAN driver by/to the OS
38  */
39 enum wlan_frm_fmt {
40 	wlan_frm_fmt_unknown,
41 	wlan_frm_fmt_raw,
42 	wlan_frm_fmt_native_wifi,
43 	wlan_frm_fmt_802_3,
44 };
45 
46 /* Max throughput */
47 #ifdef SLUB_MEM_OPTIMIZE
48 #define MAX_THROUGHPUT 400
49 #else
50 #define MAX_THROUGHPUT 800
51 #endif
52 
53 /* Throttle period Different level Duty Cycle values*/
54 #define THROTTLE_DUTY_CYCLE_LEVEL0 (0)
55 #define THROTTLE_DUTY_CYCLE_LEVEL1 (50)
56 #define THROTTLE_DUTY_CYCLE_LEVEL2 (75)
57 #define THROTTLE_DUTY_CYCLE_LEVEL3 (94)
58 
59 struct wlan_ipa_uc_rsc_t {
60 	u8 uc_offload_enabled;
61 	u32 tx_max_buf_cnt;
62 	u32 tx_buf_size;
63 	u32 rx_ind_ring_size;
64 	u32 tx_partition_base;
65 };
66 
67 /* Config parameters for txrx_pdev */
68 struct txrx_pdev_cfg_t {
69 	u8 is_high_latency;
70 	u8 defrag_timeout_check;
71 	u8 rx_pn_check;
72 	u8 pn_rx_fwd_check;
73 	u8 host_addba;
74 	u8 tx_free_at_download;
75 	u8 rx_fwd_inter_bss;
76 	u32 max_thruput_mbps;
77 	u32 target_tx_credit;
78 	u32 vow_config;
79 	u32 tx_download_size;
80 	u32 max_peer_id;
81 	u32 max_vdev;
82 	u32 max_nbuf_frags;
83 	u32 throttle_period_ms;
84 	u8 dutycycle_level[THROTTLE_LEVEL_MAX];
85 	enum wlan_frm_fmt frame_type;
86 	u8 rx_fwd_disabled;
87 	u8 is_packet_log_enabled;
88 	u8 is_full_reorder_offload;
89 #ifdef WLAN_FEATURE_TSF_PLUS
90 	u8 is_ptp_rx_opt_enabled;
91 #endif
92 	struct wlan_ipa_uc_rsc_t ipa_uc_rsc;
93 	bool ip_tcp_udp_checksum_offload;
94 	bool p2p_ip_tcp_udp_checksum_offload;
95 	/* IP, TCP and UDP checksum offload for NAN Mode*/
96 	bool nan_tcp_udp_checksumoffload;
97 	bool enable_rxthread;
98 	bool ce_classify_enabled;
99 #if defined(QCA_LL_TX_FLOW_CONTROL_V2) || defined(QCA_LL_PDEV_TX_FLOW_CONTROL)
100 	uint32_t tx_flow_stop_queue_th;
101 	uint32_t tx_flow_start_queue_offset;
102 #endif
103 	bool flow_steering_enabled;
104 	/*
105 	 * To track if credit reporting through
106 	 * HTT_T2H_MSG_TYPE_TX_CREDIT_UPDATE_IND is enabled/disabled.
107 	 * In Genoa(QCN7605) credits are reported through
108 	 * HTT_T2H_MSG_TYPE_TX_CREDIT_UPDATE_IND only.
109 	 */
110 	u8 credit_update_enabled;
111 	struct ol_tx_sched_wrr_ac_specs_t ac_specs[QCA_WLAN_AC_ALL];
112 	bool gro_enable;
113 	bool tso_enable;
114 	bool lro_enable;
115 	bool sg_enable;
116 	uint32_t enable_data_stall_detection;
117 	bool enable_flow_steering;
118 	bool disable_intra_bss_fwd;
119 	/* IPA Micro controller data path offload TX buffer size */
120 	uint32_t uc_tx_buffer_size;
121 	/* IPA Micro controller data path offload RX indication ring count */
122 	uint32_t uc_rx_indication_ring_count;
123 	/* IPA Micro controller data path offload TX partition base */
124 	uint32_t uc_tx_partition_base;
125 	/* Flag to indicate whether new htt format is supported */
126 	bool new_htt_format_enabled;
127 
128 #ifdef QCA_SUPPORT_TXRX_DRIVER_TCP_DEL_ACK
129 	/* enable the tcp delay ack feature in the driver */
130 	bool  del_ack_enable;
131 	/* timeout if no more tcp ack frames, unit is ms */
132 	uint16_t del_ack_timer_value;
133 	/* the maximum number of replaced tcp ack frames */
134 	uint16_t del_ack_pkt_count;
135 #endif
136 
137 #ifdef WLAN_SUPPORT_TXRX_HL_BUNDLE
138 	uint16_t bundle_timer_value;
139 	uint16_t bundle_size;
140 #endif
141 	uint8_t pktlog_buffer_size;
142 };
143 
144 /**
145  * ol_tx_set_flow_control_parameters() - set flow control parameters
146  * @cfg_ctx: cfg context
147  * @cfg_param: cfg parameters
148  *
149  * Return: none
150  */
151 #if defined(QCA_LL_TX_FLOW_CONTROL_V2) || defined(QCA_LL_PDEV_TX_FLOW_CONTROL)
152 void ol_tx_set_flow_control_parameters(struct cdp_cfg *cfg_ctx,
153 				       struct txrx_pdev_cfg_param_t *cfg_param);
154 #else
155 static inline
ol_tx_set_flow_control_parameters(struct cdp_cfg * cfg_ctx,struct txrx_pdev_cfg_param_t * cfg_param)156 void ol_tx_set_flow_control_parameters(struct cdp_cfg *cfg_ctx,
157 				       struct txrx_pdev_cfg_param_t *cfg_param)
158 {
159 }
160 #endif
161 
162 /**
163  * ol_pdev_cfg_attach - setup configuration parameters
164  * @osdev: OS handle needed as an argument for some OS primitives
165  * @cfg_param: configuration parameters
166  *
167  * Allocation configuration context that will be used across data path
168  *
169  * Return: the control device object
170  */
171 struct cdp_cfg *ol_pdev_cfg_attach(qdf_device_t osdev, void *pcfg_param);
172 
173 /**
174  * @brief Specify whether the system is high-latency or low-latency.
175  * @details
176  *  Indicate whether the system is operating in high-latency (message
177  *  based, e.g. USB) mode or low-latency (memory-mapped, e.g. PCIe) mode.
178  *  Some chips support just one type of host / target interface.
179  *  Other chips support both LL and HL interfaces (e.g. PCIe and USB),
180  *  so the selection will be made based on which bus HW is present, or
181  *  which is preferred if both are present.
182  *
183  * @param pdev - handle to the physical device
184  * @return 1 -> high-latency -OR- 0 -> low-latency
185  */
186 int ol_cfg_is_high_latency(struct cdp_cfg *cfg_pdev);
187 
188 /**
189  * @brief Specify whether credit reporting through
190  * HTT_T2H_MSG_TYPE_TX_CREDIT_UPDATE_IND is enabled by default.
191  * In Genoa credits are reported only through
192  * HTT_T2H_MSG_TYPE_TX_CREDIT_UPDATE_IND
193  * @details
194  * @param pdev - handle to the physical device
195  * @return 1 -> enabled -OR- 0 -> disabled
196  */
197 int ol_cfg_is_credit_update_enabled(struct cdp_cfg *cfg_pdev);
198 
199 /**
200  * @brief Specify the range of peer IDs.
201  * @details
202  *  Specify the maximum peer ID.  This is the maximum number of peers,
203  *  minus one.
204  *  This is used by the host to determine the size of arrays indexed by
205  *  peer ID.
206  *
207  * @param pdev - handle to the physical device
208  * @return maximum peer ID
209  */
210 int ol_cfg_max_peer_id(struct cdp_cfg *cfg_pdev);
211 
212 /**
213  * @brief Specify the max number of virtual devices within a physical device.
214  * @details
215  *  Specify how many virtual devices may exist within a physical device.
216  *
217  * @param pdev - handle to the physical device
218  * @return maximum number of virtual devices
219  */
220 int ol_cfg_max_vdevs(struct cdp_cfg *cfg_pdev);
221 
222 /**
223  * @brief Check whether host-side rx PN check is enabled or disabled.
224  * @details
225  *  Choose whether to allocate rx PN state information and perform
226  *  rx PN checks (if applicable, based on security type) on the host.
227  *  If the rx PN check is specified to be done on the host, the host SW
228  *  will determine which peers are using a security type (e.g. CCMP) that
229  *  requires a PN check.
230  *
231  * @param pdev - handle to the physical device
232  * @return 1 -> host performs rx PN check -OR- 0 -> no host-side rx PN check
233  */
234 int ol_cfg_rx_pn_check(struct cdp_cfg *cfg_pdev);
235 
236 /**
237  * @brief Check whether host-side rx forwarding is enabled or disabled.
238  * @details
239  *  Choose whether to check whether to forward rx frames to tx on the host.
240  *  For LL systems, this rx -> tx host-side forwarding check is typically
241  *  enabled.
242  *  For HL systems, the rx -> tx forwarding check is typically done on the
243  *  target.  However, even in HL systems, the host-side rx -> tx forwarding
244  *  will typically be enabled, as a second-tier safety net in case the
245  *  target doesn't have enough memory to store all rx -> tx forwarded frames.
246  *
247  * @param pdev - handle to the physical device
248  * @return 1 -> host does rx->tx forward -OR- 0 -> no host-side rx->tx forward
249  */
250 int ol_cfg_rx_fwd_check(struct cdp_cfg *cfg_pdev);
251 
252 /**
253  * ol_set_cfg_rx_fwd_disabled - set rx fwd disable/enable
254  *
255  * @pdev - handle to the physical device
256  * @disable_rx_fwd 1 -> no rx->tx forward -> rx->tx forward
257  *
258  * Choose whether to forward rx frames to tx (where applicable) within the
259  * WLAN driver, or to leave all forwarding up to the operating system.
260  * Currently only intra-bss fwd is supported.
261  *
262  */
263 void ol_set_cfg_rx_fwd_disabled(struct cdp_cfg *ppdev, uint8_t disable_rx_fwd);
264 
265 /**
266  * ol_set_cfg_packet_log_enabled - Set packet log config in HTT
267  * config based on CFG ini configuration
268  *
269  * @pdev - handle to the physical device
270  * @val - 0 - disable, 1 - enable
271  */
272 void ol_set_cfg_packet_log_enabled(struct cdp_cfg *ppdev, uint8_t val);
273 
274 /**
275  * @brief Check whether rx forwarding is enabled or disabled.
276  * @details
277  *  Choose whether to forward rx frames to tx (where applicable) within the
278  *  WLAN driver, or to leave all forwarding up to the operating system.
279  *
280  * @param pdev - handle to the physical device
281  * @return 1 -> no rx->tx forward -OR- 0 -> rx->tx forward (in host or target)
282  */
283 int ol_cfg_rx_fwd_disabled(struct cdp_cfg *cfg_pdev);
284 
285 /**
286  * @brief Check whether to perform inter-BSS or intra-BSS rx->tx forwarding.
287  * @details
288  *  Check whether data received by an AP on one virtual device destined
289  *  to a STA associated with a different virtual device within the same
290  *  physical device should be forwarded within the driver, or whether
291  *  forwarding should only be done within a virtual device.
292  *
293  * @param pdev - handle to the physical device
294  * @return
295  *      1 -> forward both within and between vdevs
296  *      -OR-
297  *      0 -> forward only within a vdev
298  */
299 int ol_cfg_rx_fwd_inter_bss(struct cdp_cfg *cfg_pdev);
300 
301 /**
302  * @brief Specify data frame format used by the OS.
303  * @details
304  *  Specify what type of frame (802.3 or native WiFi) the host data SW
305  *  should expect from and provide to the OS shim.
306  *
307  * @param pdev - handle to the physical device
308  * @return enumerated data frame format
309  */
310 enum wlan_frm_fmt ol_cfg_frame_type(struct cdp_cfg *cfg_pdev);
311 
312 /**
313  * @brief Specify the peak throughput.
314  * @details
315  *  Specify the peak throughput that a system is expected to support.
316  *  The data SW uses this configuration to help choose the size for its
317  *  tx descriptor pool and rx buffer ring.
318  *  The data SW assumes that the peak throughput applies to either rx or tx,
319  *  rather than having separate specs of the rx max throughput vs. the tx
320  *  max throughput.
321  *
322  * @param pdev - handle to the physical device
323  * @return maximum supported throughput in Mbps (not MBps)
324  */
325 int ol_cfg_max_thruput_mbps(struct cdp_cfg *cfg_pdev);
326 
327 /**
328  * @brief Specify the maximum number of fragments per tx network buffer.
329  * @details
330  *  Specify the maximum number of fragments that a tx frame provided to
331  *  the WLAN driver by the OS may contain.
332  *  In LL systems, the host data SW uses this maximum fragment count to
333  *  determine how many elements to allocate in the fragmentation descriptor
334  *  it creates to specify to the tx MAC DMA where to locate the tx frame's
335  *  data.
336  *  This maximum fragments count is only for regular frames, not TSO frames,
337  *  since TSO frames are sent in segments with a limited number of fragments
338  *  per segment.
339  *
340  * @param pdev - handle to the physical device
341  * @return maximum number of fragments that can occur in a regular tx frame
342  */
343 int ol_cfg_netbuf_frags_max(struct cdp_cfg *cfg_pdev);
344 
345 /**
346  * @brief For HL systems, specify when to free tx frames.
347  * @details
348  *  In LL systems, the host's tx frame is referenced by the MAC DMA, and
349  *  thus cannot be freed until the target indicates that it is finished
350  *  transmitting the frame.
351  *  In HL systems, the entire tx frame is downloaded to the target.
352  *  Consequently, the target has its own copy of the tx frame, and the
353  *  host can free the tx frame as soon as the download completes.
354  *  Alternatively, the HL host can keep the frame allocated until the
355  *  target explicitly tells the HL host it is done transmitting the frame.
356  *  This gives the target the option of discarding its copy of the tx
357  *  frame, and then later getting a new copy from the host.
358  *  This function tells the host whether it should retain its copy of the
359  *  transmit frames until the target explicitly indicates it is finished
360  *  transmitting them, or if it should free its copy as soon as the
361  *  tx frame is downloaded to the target.
362  *
363  * @param pdev - handle to the physical device
364  * @return
365  *      0 -> retain the tx frame until the target indicates it is done
366  *          transmitting the frame
367  *      -OR-
368  *      1 -> free the tx frame as soon as the download completes
369  */
370 int ol_cfg_tx_free_at_download(struct cdp_cfg *cfg_pdev);
371 void ol_cfg_set_tx_free_at_download(struct cdp_cfg *cfg_pdev);
372 
373 /**
374  * @brief Low water mark for target tx credit.
375  * Tx completion handler is invoked to reap the buffers when the target tx
376  * credit goes below Low Water Mark.
377  */
378 #define OL_CFG_NUM_MSDU_REAP 512
379 #define ol_cfg_tx_credit_lwm(pdev)					       \
380 	((CFG_TGT_NUM_MSDU_DESC >  OL_CFG_NUM_MSDU_REAP) ?		       \
381 	 (CFG_TGT_NUM_MSDU_DESC -  OL_CFG_NUM_MSDU_REAP) : 0)
382 
383 /**
384  * @brief In a HL system, specify the target initial credit count.
385  * @details
386  *  The HL host tx data SW includes a module for determining which tx frames
387  *  to download to the target at a given time.
388  *  To make this judgement, the HL tx download scheduler has to know
389  *  how many buffers the HL target has available to hold tx frames.
390  *  Due to the possibility that a single target buffer pool can be shared
391  *  between rx and tx frames, the host may not be able to obtain a precise
392  *  specification of the tx buffer space available in the target, but it
393  *  uses the best estimate, as provided by this configuration function,
394  *  to determine how best to schedule the tx frame downloads.
395  *
396  * @param pdev - handle to the physical device
397  * @return the number of tx buffers available in a HL target
398  */
399 uint16_t ol_cfg_target_tx_credit(struct cdp_cfg *cfg_pdev);
400 
401 /**
402  * @brief Specify the LL tx MSDU header download size.
403  * @details
404  *  In LL systems, determine how many bytes from a tx frame to download,
405  *  in order to provide the target FW's Descriptor Engine with enough of
406  *  the packet's payload to interpret what kind of traffic this is,
407  *  and who it is for.
408  *  This download size specification does not include the 802.3 / 802.11
409  *  frame encapsulation headers; it starts with the encapsulated IP packet
410  *  (or whatever ethertype is carried within the ethernet-ish frame).
411  *  The LL host data SW will determine how many bytes of the MSDU header to
412  *  download by adding this download size specification to the size of the
413  *  frame header format specified by the ol_cfg_frame_type configuration
414  *  function.
415  *
416  * @param pdev - handle to the physical device
417  * @return the number of bytes beyond the 802.3 or native WiFi header to
418  *      download to the target for tx classification
419  */
420 int ol_cfg_tx_download_size(struct cdp_cfg *cfg_pdev);
421 
422 /**
423  * brief Specify where defrag timeout and duplicate detection is handled
424  * @details
425  *   non-aggregate duplicate detection and timing out stale fragments
426  *   requires additional target memory. To reach max client
427  *   configurations (128+), non-aggregate duplicate detection and the
428  *   logic to time out stale fragments is moved to the host.
429  *
430  * @param pdev - handle to the physical device
431  * @return
432  *  0 -> target is responsible non-aggregate duplicate detection and
433  *          timing out stale fragments.
434  *
435  *  1 -> host is responsible non-aggregate duplicate detection and
436  *          timing out stale fragments.
437  */
438 int ol_cfg_rx_host_defrag_timeout_duplicate_check(struct cdp_cfg *cfg_pdev);
439 
440 /**
441  * brief Query for the period in ms used for throttling for
442  * thermal mitigation
443  * @details
444  *   In LL systems, transmit data throttling is used for thermal
445  *   mitigation where data is paused and resumed during the
446  *   throttle period i.e. the throttle period consists of an
447  *   "on" phase when transmit is allowed and an "off" phase when
448  *   transmit is suspended. This function returns the total
449  *   period used for throttling.
450  *
451  * @param pdev - handle to the physical device
452  * @return the total throttle period in ms
453  */
454 int ol_cfg_throttle_period_ms(struct cdp_cfg *cfg_pdev);
455 
456 /**
457  * brief Query for the duty cycle in percentage used for throttling for
458  * thermal mitigation
459  *
460  * @param pdev - handle to the physical device
461  * @param level - duty cycle level
462  * @return the duty cycle level in percentage
463  */
464 int ol_cfg_throttle_duty_cycle_level(struct cdp_cfg *cfg_pdev, int level);
465 
466 /**
467  * brief Check whether full reorder offload is
468  * enabled/disable by the host
469  * @details
470  *   If the host does not support receive reorder (i.e. the
471  *   target performs full receive re-ordering) this will return
472  *   "enabled"
473  *
474  * @param pdev - handle to the physical device
475  * @return 1 - enable, 0 - disable
476  */
477 int ol_cfg_is_full_reorder_offload(struct cdp_cfg *cfg_pdev);
478 
479 int ol_cfg_is_rx_thread_enabled(struct cdp_cfg *cfg_pdev);
480 
481 #ifdef WLAN_FEATURE_TSF_PLUS
482 void ol_set_cfg_ptp_rx_opt_enabled(struct cdp_cfg *cfg_pdev, u_int8_t val);
483 u_int8_t ol_cfg_is_ptp_rx_opt_enabled(struct cdp_cfg *cfg_pdev);
484 #else
485 static inline void
ol_set_cfg_ptp_rx_opt_enabled(struct cdp_cfg * cfg_pdev,u_int8_t val)486 ol_set_cfg_ptp_rx_opt_enabled(struct cdp_cfg *cfg_pdev, u_int8_t val)
487 {
488 }
489 
490 static inline u_int8_t
ol_cfg_is_ptp_rx_opt_enabled(struct cdp_cfg * cfg_pdev)491 ol_cfg_is_ptp_rx_opt_enabled(struct cdp_cfg *cfg_pdev)
492 {
493 	return 0;
494 }
495 #endif
496 
497 /**
498  * ol_cfg_is_ip_tcp_udp_checksum_offload_enabled() - return
499  *                        ip_tcp_udp_checksum_offload is enable/disable
500  * @pdev : handle to the physical device
501  *
502  * Return: 1 - enable, 0 - disable
503  */
504 static inline
ol_cfg_is_ip_tcp_udp_checksum_offload_enabled(struct cdp_cfg * cfg_pdev)505 int ol_cfg_is_ip_tcp_udp_checksum_offload_enabled(struct cdp_cfg *cfg_pdev)
506 {
507 	struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)cfg_pdev;
508 
509 	return cfg->ip_tcp_udp_checksum_offload;
510 }
511 
512 
513 #if defined(QCA_LL_TX_FLOW_CONTROL_V2) || defined(QCA_LL_PDEV_TX_FLOW_CONTROL)
514 int ol_cfg_get_tx_flow_stop_queue_th(struct cdp_cfg *cfg_pdev);
515 
516 int ol_cfg_get_tx_flow_start_queue_offset(struct cdp_cfg *cfg_pdev);
517 #endif
518 
519 bool ol_cfg_is_ce_classify_enabled(struct cdp_cfg *cfg_pdev);
520 
521 enum wlan_target_fmt_translation_caps {
522 	wlan_frm_tran_cap_raw = 0x01,
523 	wlan_frm_tran_cap_native_wifi = 0x02,
524 	wlan_frm_tran_cap_8023 = 0x04,
525 };
526 
527 /**
528  * @brief Specify the maximum header size added by SW tx encapsulation
529  * @details
530  *  This function returns the maximum size of the new L2 header, not the
531  *  difference between the new and old L2 headers.
532  *  Thus, this function returns the maximum 802.11 header size that the
533  *  tx SW may need to add to tx data frames.
534  *
535  * @param pdev - handle to the physical device
536  */
ol_cfg_sw_encap_hdr_max_size(struct cdp_cfg * cfg_pdev)537 static inline int ol_cfg_sw_encap_hdr_max_size(struct cdp_cfg *cfg_pdev)
538 {
539 	/*
540 	 *  24 byte basic 802.11 header
541 	 * + 6 byte 4th addr
542 	 * + 2 byte QoS control
543 	 * + 4 byte HT control
544 	 * + 8 byte LLC/SNAP
545 	 */
546 	return sizeof(struct ieee80211_qosframe_htc_addr4) + LLC_SNAP_HDR_LEN;
547 }
548 
ol_cfg_tx_encap(struct cdp_cfg * cfg_pdev)549 static inline uint8_t ol_cfg_tx_encap(struct cdp_cfg *cfg_pdev)
550 {
551 	/* tx encap done in HW */
552 	return 0;
553 }
554 
ol_cfg_host_addba(struct cdp_cfg * cfg_pdev)555 static inline int ol_cfg_host_addba(struct cdp_cfg *cfg_pdev)
556 {
557 	/*
558 	 * ADDBA negotiation is handled by the target FW for Peregrine + Rome.
559 	 */
560 	return 0;
561 }
562 
563 /**
564  * @brief If the host SW's ADDBA negotiation fails, should it be retried?
565  *
566  * @param pdev - handle to the physical device
567  */
ol_cfg_addba_retry(struct cdp_cfg * cfg_pdev)568 static inline int ol_cfg_addba_retry(struct cdp_cfg *cfg_pdev)
569 {
570 	return 0;               /* disabled for now */
571 }
572 
573 /**
574  * @brief How many frames to hold in a paused vdev's tx queue in LL systems
575  */
ol_tx_cfg_max_tx_queue_depth_ll(struct cdp_cfg * cfg_pdev)576 static inline int ol_tx_cfg_max_tx_queue_depth_ll(struct cdp_cfg *cfg_pdev)
577 {
578 	/*
579 	 * Store up to 1500 frames for a paused vdev.
580 	 * For example, if the vdev is sending 300 Mbps of traffic, and the
581 	 * PHY is capable of 600 Mbps, then it will take 56 ms for the PHY to
582 	 * drain both the 700 frames that are queued initially, plus the next
583 	 * 700 frames that come in while the PHY is catching up.
584 	 * So in this example scenario, the PHY will remain fully utilized
585 	 * in a MCC system that has a channel-switching period of 56 ms or less.
586 	 * 700 frames calculation was correct when FW drain packet without
587 	 * any overhead. Actual situation drain overhead will slowdown drain
588 	 * speed. And channel period is less than 56 msec
589 	 * Worst scenario, 1500 frames should be stored in host.
590 	 */
591 	return 1500;
592 }
593 
594 /**
595  * @brief Get packet log config from HTT config
596  */
597 uint8_t ol_cfg_is_packet_log_enabled(struct cdp_cfg *cfg_pdev);
598 
599 #ifdef IPA_OFFLOAD
600 /**
601  * @brief IPA micro controller data path offload enable or not
602  * @detail
603  *  This function returns IPA micro controller data path offload
604  *  feature enabled or not
605  *
606  * @param pdev - handle to the physical device
607  */
608 unsigned int ol_cfg_ipa_uc_offload_enabled(struct cdp_cfg *cfg_pdev);
609 /**
610  * @brief IPA micro controller data path TX buffer size
611  * @detail
612  *  This function returns IPA micro controller data path offload
613  *  TX buffer size which should be pre-allocated by driver.
614  *  Default buffer size is 2K
615  *
616  * @param pdev - handle to the physical device
617  */
618 unsigned int ol_cfg_ipa_uc_tx_buf_size(struct cdp_cfg *cfg_pdev);
619 /**
620  * @brief IPA micro controller data path TX buffer size
621  * @detail
622  *  This function returns IPA micro controller data path offload
623  *  TX buffer count which should be pre-allocated by driver.
624  *
625  * @param pdev - handle to the physical device
626  */
627 unsigned int ol_cfg_ipa_uc_tx_max_buf_cnt(struct cdp_cfg *cfg_pdev);
628 /**
629  * @brief IPA micro controller data path TX buffer size
630  * @detail
631  *  This function returns IPA micro controller data path offload
632  *  RX indication ring size which will notified by WLAN FW to IPA
633  *  micro controller
634  *
635  * @param pdev - handle to the physical device
636  */
637 unsigned int ol_cfg_ipa_uc_rx_ind_ring_size(struct cdp_cfg *cfg_pdev);
638 /**
639  * @brief IPA micro controller data path TX buffer size
640  * @param pdev - handle to the physical device
641  */
642 unsigned int ol_cfg_ipa_uc_tx_partition_base(struct cdp_cfg *cfg_pdev);
643 void ol_cfg_set_ipa_uc_tx_partition_base(struct cdp_cfg *cfg_pdev,
644 					 uint32_t value);
645 #else
ol_cfg_ipa_uc_offload_enabled(struct cdp_cfg * cfg_pdev)646 static inline unsigned int ol_cfg_ipa_uc_offload_enabled(
647 	struct cdp_cfg *cfg_pdev)
648 {
649 	return 0;
650 }
651 
ol_cfg_ipa_uc_tx_buf_size(struct cdp_cfg * cfg_pdev)652 static inline unsigned int ol_cfg_ipa_uc_tx_buf_size(
653 	struct cdp_cfg *cfg_pdev)
654 {
655 	return 0;
656 }
657 
ol_cfg_ipa_uc_tx_max_buf_cnt(struct cdp_cfg * cfg_pdev)658 static inline unsigned int ol_cfg_ipa_uc_tx_max_buf_cnt(
659 	struct cdp_cfg *cfg_pdev)
660 {
661 	return 0;
662 }
663 
ol_cfg_ipa_uc_rx_ind_ring_size(struct cdp_cfg * cfg_pdev)664 static inline unsigned int ol_cfg_ipa_uc_rx_ind_ring_size(
665 	struct cdp_cfg *cfg_pdev)
666 {
667 	return 0;
668 }
669 
ol_cfg_ipa_uc_tx_partition_base(struct cdp_cfg * cfg_pdev)670 static inline unsigned int ol_cfg_ipa_uc_tx_partition_base(
671 	struct cdp_cfg *cfg_pdev)
672 {
673 	return 0;
674 }
675 
ol_cfg_set_ipa_uc_tx_partition_base(void * cfg_pdev,uint32_t value)676 static inline void ol_cfg_set_ipa_uc_tx_partition_base(
677 	void *cfg_pdev, uint32_t value)
678 {
679 }
680 #endif /* IPA_OFFLOAD */
681 
682 /**
683  * ol_set_cfg_flow_steering - Set Rx flow steering config based on CFG ini
684  *			      config.
685  *
686  * @pdev - handle to the physical device
687  * @val - 0 - disable, 1 - enable
688  *
689  * Return: None
690  */
ol_set_cfg_flow_steering(struct cdp_cfg * cfg_pdev,uint8_t val)691 static inline void ol_set_cfg_flow_steering(struct cdp_cfg *cfg_pdev,
692 				uint8_t val)
693 {
694 	struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)cfg_pdev;
695 
696 	cfg->flow_steering_enabled = val;
697 }
698 
699 /**
700  * ol_cfg_is_flow_steering_enabled - Return Rx flow steering config.
701  *
702  * @pdev - handle to the physical device
703  *
704  * Return: value of configured flow steering value.
705  */
ol_cfg_is_flow_steering_enabled(struct cdp_cfg * cfg_pdev)706 static inline uint8_t ol_cfg_is_flow_steering_enabled(struct cdp_cfg *cfg_pdev)
707 {
708 	struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)cfg_pdev;
709 
710 	return cfg->flow_steering_enabled;
711 }
712 
713 /**
714  * ol_set_cfg_new_htt_format - Set whether FW supports new htt format
715  *
716  * @pdev - handle to the physical device
717  * @val - true - supported, false - not supported
718  *
719  * Return: None
720  */
721 static inline void
ol_set_cfg_new_htt_format(struct cdp_cfg * cfg_pdev,bool val)722 ol_set_cfg_new_htt_format(struct cdp_cfg *cfg_pdev, bool val)
723 {
724 	struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)cfg_pdev;
725 
726 	cfg->new_htt_format_enabled = val;
727 }
728 
729 /**
730  * ol_cfg_is_htt_new_format_enabled - Return whether FW supports new htt format
731  *
732  * @pdev - handle to the physical device
733  *
734  * Return: value of configured htt_new_format
735  */
736 static inline bool
ol_cfg_is_htt_new_format_enabled(struct cdp_cfg * cfg_pdev)737 ol_cfg_is_htt_new_format_enabled(struct cdp_cfg *cfg_pdev)
738 {
739 	struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)cfg_pdev;
740 
741 	return cfg->new_htt_format_enabled;
742 }
743 
744 #ifdef QCA_SUPPORT_TXRX_DRIVER_TCP_DEL_ACK
745 /**
746  * ol_cfg_get_del_ack_timer_value() - get delayed ack timer value
747  * @cfg_pdev: pdev handle
748  *
749  * Return: timer value
750  */
751 int ol_cfg_get_del_ack_timer_value(struct cdp_cfg *cfg_pdev);
752 
753 /**
754  * ol_cfg_get_del_ack_enable_value() - get delayed ack enable value
755  * @cfg_pdev: pdev handle
756  *
757  * Return: enable/disable
758  */
759 bool ol_cfg_get_del_ack_enable_value(struct cdp_cfg *cfg_pdev);
760 
761 /**
762  * ol_cfg_get_del_ack_count_value() - get delayed ack count value
763  * @cfg_pdev: pdev handle
764  *
765  * Return: count value
766  */
767 int ol_cfg_get_del_ack_count_value(struct cdp_cfg *cfg_pdev);
768 
769 /**
770  * ol_cfg_update_del_ack_params() - update delayed ack params
771  * @cfg_ctx: cfg context
772  * @cfg_param: parameters
773  *
774  * Return: none
775  */
776 void ol_cfg_update_del_ack_params(struct txrx_pdev_cfg_t *cfg_ctx,
777 				  struct txrx_pdev_cfg_param_t *cfg_param);
778 #else
779 /**
780  * ol_cfg_update_del_ack_params() - update delayed ack params
781  * @cfg_ctx: cfg context
782  * @cfg_param: parameters
783  *
784  * Return: none
785  */
786 static inline
ol_cfg_update_del_ack_params(struct txrx_pdev_cfg_t * cfg_ctx,struct txrx_pdev_cfg_param_t * cfg_param)787 void ol_cfg_update_del_ack_params(struct txrx_pdev_cfg_t *cfg_ctx,
788 				  struct txrx_pdev_cfg_param_t *cfg_param)
789 {
790 }
791 #endif
792 
793 #ifdef WLAN_SUPPORT_TXRX_HL_BUNDLE
794 int ol_cfg_get_bundle_timer_value(struct cdp_cfg *cfg_pdev);
795 int ol_cfg_get_bundle_size(struct cdp_cfg *cfg_pdev);
796 #else
797 #endif
798 /**
799  * ol_cfg_get_wrr_skip_weight() - brief Query for the param of wrr_skip_weight
800  * @pdev: handle to the physical device.
801  * @ac: access control, it will be BE, BK, VI, VO
802  *
803  * Return: wrr_skip_weight for specified ac.
804  */
805 int ol_cfg_get_wrr_skip_weight(struct cdp_cfg *pdev, int ac);
806 
807 /**
808  * ol_cfg_get_credit_threshold() - Query for the param of credit_threshold
809  * @pdev: handle to the physical device.
810  * @ac: access control, it will be BE, BK, VI, VO
811  *
812  * Return: credit_threshold for specified ac.
813  */
814 uint32_t ol_cfg_get_credit_threshold(struct cdp_cfg *pdev, int ac);
815 
816 /**
817  * ol_cfg_get_send_limit() - Query for the param of send_limit
818  * @pdev: handle to the physical device.
819  * @ac: access control, it will be BE, BK, VI, VO
820  *
821  * Return: send_limit for specified ac.
822  */
823 uint16_t ol_cfg_get_send_limit(struct cdp_cfg *pdev, int ac);
824 
825 /**
826  * ol_cfg_get_credit_reserve() - Query for the param of credit_reserve
827  * @pdev: handle to the physical device.
828  * @ac: access control, it will be BE, BK, VI, VO
829  *
830  * Return: credit_reserve for specified ac.
831  */
832 int ol_cfg_get_credit_reserve(struct cdp_cfg *pdev, int ac);
833 
834 /**
835  * ol_cfg_get_discard_weight() - Query for the param of discard_weight
836  * @pdev: handle to the physical device.
837  * @ac: access control, it will be BE, BK, VI, VO
838  *
839  * Return: discard_weight for specified ac.
840  */
841 int ol_cfg_get_discard_weight(struct cdp_cfg *pdev, int ac);
842 #endif /* _OL_CFG__H_ */
843