1  /*
2   * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. 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   * DOC: Contains DP public data structure definitions.
20   *
21   */
22  
23  #ifndef _WLAN_DP_PUBLIC_STRUCT_H_
24  #define _WLAN_DP_PUBLIC_STRUCT_H_
25  
26  #include "wlan_cmn.h"
27  #include "wlan_objmgr_cmn.h"
28  #include "wlan_objmgr_global_obj.h"
29  #include "qdf_status.h"
30  #include <wlan_nlink_common.h>
31  #include <qca_vendor.h>
32  #include <ani_system_defs.h>
33  #include "cdp_txrx_ops.h"
34  #include <qdf_defer.h>
35  #include <qdf_types.h>
36  #include "wlan_dp_rx_thread.h"
37  
38  #define DP_MAX_SUBTYPES_TRACKED	4
39  
40  enum dp_rx_offld_flush_cb {
41  	DP_RX_FLUSH_LRO,
42  	DP_RX_FLUSH_THREAD,
43  	DP_RX_FLUSH_NAPI,
44  };
45  
46  enum dp_nbuf_push_type {
47  	DP_NBUF_PUSH_NI,
48  	DP_NBUF_PUSH_NAPI,
49  	DP_NBUF_PUSH_BH_DISABLE,
50  	DP_NBUF_PUSH_SIMPLE,
51  };
52  
53  /**
54   * struct dp_eapol_stats - eapol debug stats count
55   * @eapol_m1_count: eapol m1 count
56   * @eapol_m2_count: eapol m2 count
57   * @eapol_m3_count: eapol m3 count
58   * @eapol_m4_count: eapol m4 count
59   * @tx_dropped: no of tx frames dropped by host
60   * @tx_noack_cnt: no of frames for which there is no ack
61   * @rx_delivered: no. of frames delivered to network stack
62   * @rx_refused: no of frames not delivered to network stack
63   */
64  struct dp_eapol_stats {
65  	uint16_t eapol_m1_count;
66  	uint16_t eapol_m2_count;
67  	uint16_t eapol_m3_count;
68  	uint16_t eapol_m4_count;
69  	uint16_t tx_dropped[DP_MAX_SUBTYPES_TRACKED];
70  	uint16_t tx_noack_cnt[DP_MAX_SUBTYPES_TRACKED];
71  	uint16_t rx_delivered[DP_MAX_SUBTYPES_TRACKED];
72  	uint16_t rx_refused[DP_MAX_SUBTYPES_TRACKED];
73  };
74  
75  /**
76   * struct dp_dhcp_stats - dhcp debug stats count
77   * @dhcp_dis_count: dhcp discovery count
78   * @dhcp_off_count: dhcp offer count
79   * @dhcp_req_count: dhcp request count
80   * @dhcp_ack_count: dhcp ack count
81   * @tx_dropped: no of tx frames dropped by host
82   * @tx_noack_cnt: no of frames for which there is no ack
83   * @rx_delivered: no. of frames delivered to network stack
84   * @rx_refused: no of frames not delivered to network stack
85   */
86  struct dp_dhcp_stats {
87  	uint16_t dhcp_dis_count;
88  	uint16_t dhcp_off_count;
89  	uint16_t dhcp_req_count;
90  	uint16_t dhcp_ack_count;
91  	uint16_t tx_dropped[DP_MAX_SUBTYPES_TRACKED];
92  	uint16_t tx_noack_cnt[DP_MAX_SUBTYPES_TRACKED];
93  	uint16_t rx_delivered[DP_MAX_SUBTYPES_TRACKED];
94  	uint16_t rx_refused[DP_MAX_SUBTYPES_TRACKED];
95  };
96  
97  #ifdef TX_MULTIQ_PER_AC
98  #define TX_GET_QUEUE_IDX(ac, off) (((ac) * TX_QUEUES_PER_AC) + (off))
99  #define TX_QUEUES_PER_AC 4
100  #else
101  #define TX_GET_QUEUE_IDX(ac, off) (ac)
102  #define TX_QUEUES_PER_AC 1
103  #endif
104  
105  /** Number of Tx Queues */
106  #if defined(QCA_LL_TX_FLOW_CONTROL_V2) || \
107  	defined(QCA_HL_NETDEV_FLOW_CONTROL) || \
108  	defined(QCA_LL_PDEV_TX_FLOW_CONTROL)
109  /* Only one HI_PRIO queue */
110  #define NUM_TX_QUEUES (4 * TX_QUEUES_PER_AC + 1)
111  #else
112  #define NUM_TX_QUEUES (4 * TX_QUEUES_PER_AC)
113  #endif
114  
115  #ifndef NUM_CPUS
116  #ifdef QCA_CONFIG_SMP
117  #define NUM_CPUS NR_CPUS
118  #else
119  #define NUM_CPUS 1
120  #endif
121  #endif
122  
123  /**
124   * struct dp_arp_stats - arp debug stats count
125   * @tx_arp_req_count: no. of arp req received from network stack
126   * @rx_arp_rsp_count: no. of arp res received from FW
127   * @tx_dropped: no. of arp req dropped at hdd layer
128   * @rx_dropped: no. of arp res dropped
129   * @rx_delivered: no. of arp res delivered to network stack
130   * @rx_refused: no of arp rsp refused (not delivered) to network stack
131   * @tx_host_fw_sent: no of arp req sent by FW OTA
132   * @rx_host_drop_reorder: no of arp res dropped by host
133   * @rx_fw_cnt: no of arp res received by FW
134   * @tx_ack_cnt: no of arp req acked by FW
135   */
136  struct dp_arp_stats {
137  	uint16_t tx_arp_req_count;
138  	uint16_t rx_arp_rsp_count;
139  	uint16_t tx_dropped;
140  	uint16_t rx_dropped;
141  	uint16_t rx_delivered;
142  	uint16_t rx_refused;
143  	uint16_t tx_host_fw_sent;
144  	uint16_t rx_host_drop_reorder;
145  	uint16_t rx_fw_cnt;
146  	uint16_t tx_ack_cnt;
147  };
148  
149  /**
150   * struct dp_set_arp_stats_params - set/reset arp stats
151   * @vdev_id: session id
152   * @flag: enable/disable stats
153   * @pkt_type: type of packet(1 - arp)
154   * @ip_addr: subnet ipv4 address in case of encrypted packets
155   * @pkt_type_bitmap: pkt bitmap
156   * @tcp_src_port: tcp src port for pkt tracking
157   * @tcp_dst_port: tcp dst port for pkt tracking
158   * @icmp_ipv4: target ipv4 address to track ping packets
159   * @reserved: reserved
160   */
161  struct dp_set_arp_stats_params {
162  	uint32_t vdev_id;
163  	uint8_t flag;
164  	uint8_t pkt_type;
165  	uint32_t ip_addr;
166  	uint32_t pkt_type_bitmap;
167  	uint32_t tcp_src_port;
168  	uint32_t tcp_dst_port;
169  	uint32_t icmp_ipv4;
170  	uint32_t reserved;
171  };
172  
173  /**
174   * struct dp_get_arp_stats_params - get arp stats from firmware
175   * @pkt_type: packet type(1 - ARP)
176   * @vdev_id: session id
177   */
178  struct dp_get_arp_stats_params {
179  	uint8_t pkt_type;
180  	uint32_t vdev_id;
181  };
182  
183  /**
184   * struct dp_dns_stats - dns debug stats count
185   * @tx_dns_req_count: no. of dns query received from network stack
186   * @rx_dns_rsp_count: no. of dns res received from FW
187   * @tx_dropped: no. of dns query dropped at hdd layer
188   * @rx_delivered: no. of dns res delivered to network stack
189   * @rx_refused: no of dns res refused (not delivered) to network stack
190   * @tx_host_fw_sent: no of dns query sent by FW OTA
191   * @rx_host_drop: no of dns res dropped by host
192   * @tx_ack_cnt: no of dns req acked by FW
193   */
194  struct dp_dns_stats {
195  	uint16_t tx_dns_req_count;
196  	uint16_t rx_dns_rsp_count;
197  	uint16_t tx_dropped;
198  	uint16_t rx_delivered;
199  	uint16_t rx_refused;
200  	uint16_t tx_host_fw_sent;
201  	uint16_t rx_host_drop;
202  	uint16_t tx_ack_cnt;
203  };
204  
205  /**
206   * struct dp_tcp_stats - tcp debug stats count
207   * @tx_tcp_syn_count: no. of tcp syn received from network stack
208   * @tx_tcp_ack_count: no. of tcp ack received from network stack
209   * @rx_tcp_syn_ack_count: no. of tcp syn ack received from FW
210   * @tx_tcp_syn_dropped: no. of tcp syn dropped at hdd layer
211   * @tx_tcp_ack_dropped: no. of tcp ack dropped at hdd layer
212   * @rx_delivered: no. of tcp syn ack delivered to network stack
213   * @rx_refused: no of tcp syn ack refused (not delivered) to network stack
214   * @tx_tcp_syn_host_fw_sent: no of tcp syn sent by FW OTA
215   * @tx_tcp_ack_host_fw_sent: no of tcp ack sent by FW OTA
216   * @rx_host_drop: no of tcp syn ack dropped by host
217   * @rx_fw_cnt: no of tcp res received by FW
218   * @tx_tcp_syn_ack_cnt: no of tcp syn acked by FW
219   * @tx_tcp_ack_ack_cnt: no of tcp ack acked by FW
220   * @is_tcp_syn_ack_rcv: flag to check tcp syn ack received or not
221   * @is_tcp_ack_sent: flag to check tcp ack sent or not
222   */
223  struct dp_tcp_stats {
224  	uint16_t tx_tcp_syn_count;
225  	uint16_t tx_tcp_ack_count;
226  	uint16_t rx_tcp_syn_ack_count;
227  	uint16_t tx_tcp_syn_dropped;
228  	uint16_t tx_tcp_ack_dropped;
229  	uint16_t rx_delivered;
230  	uint16_t rx_refused;
231  	uint16_t tx_tcp_syn_host_fw_sent;
232  	uint16_t tx_tcp_ack_host_fw_sent;
233  	uint16_t rx_host_drop;
234  	uint16_t rx_fw_cnt;
235  	uint16_t tx_tcp_syn_ack_cnt;
236  	uint16_t tx_tcp_ack_ack_cnt;
237  	bool is_tcp_syn_ack_rcv;
238  	bool is_tcp_ack_sent;
239  
240  };
241  
242  /**
243   * struct dp_icmpv4_stats - icmpv4 debug stats count
244   * @tx_icmpv4_req_count: no. of icmpv4 req received from network stack
245   * @rx_icmpv4_rsp_count: no. of icmpv4 res received from FW
246   * @tx_dropped: no. of icmpv4 req dropped at hdd layer
247   * @rx_delivered: no. of icmpv4 res delivered to network stack
248   * @rx_refused: no of icmpv4 res refused (not delivered) to network stack
249   * @tx_host_fw_sent: no of icmpv4 req sent by FW OTA
250   * @rx_host_drop: no of icmpv4 res dropped by host
251   * @rx_fw_cnt: no of icmpv4 res received by FW
252   * @tx_ack_cnt: no of icmpv4 req acked by FW
253   */
254  struct dp_icmpv4_stats {
255  	uint16_t tx_icmpv4_req_count;
256  	uint16_t rx_icmpv4_rsp_count;
257  	uint16_t tx_dropped;
258  	uint16_t rx_delivered;
259  	uint16_t rx_refused;
260  	uint16_t tx_host_fw_sent;
261  	uint16_t rx_host_drop;
262  	uint16_t rx_fw_cnt;
263  	uint16_t tx_ack_cnt;
264  };
265  
266  /**
267   * struct dp_rsp_stats - arp packet stats
268   * @vdev_id: session id
269   * @arp_req_enqueue: fw tx count
270   * @arp_req_tx_success: tx ack count
271   * @arp_req_tx_failure: tx ack fail count
272   * @arp_rsp_recvd: rx fw count
273   * @out_of_order_arp_rsp_drop_cnt: out of order count
274   * @dad_detected: dad detected
275   * @connect_status: connection status
276   * @ba_session_establishment_status: BA session status
277   * @connect_stats_present: connectivity stats present or not
278   * @tcp_ack_recvd: tcp syn ack's count
279   * @icmpv4_rsp_recvd: icmpv4 responses count
280   */
281  struct dp_rsp_stats {
282  	uint32_t vdev_id;
283  	uint32_t arp_req_enqueue;
284  	uint32_t arp_req_tx_success;
285  	uint32_t arp_req_tx_failure;
286  	uint32_t arp_rsp_recvd;
287  	uint32_t out_of_order_arp_rsp_drop_cnt;
288  	uint32_t dad_detected;
289  	uint32_t connect_status;
290  	uint32_t ba_session_establishment_status;
291  	bool connect_stats_present;
292  	uint32_t tcp_ack_recvd;
293  	uint32_t icmpv4_rsp_recvd;
294  };
295  
296  /**
297   * struct dp_txrx_soc_attach_params - SoC attach params
298   * @dp_ol_if_ops: DP ol_if ops
299   * @target_psoc: target psoc
300   * @target_type: Target type
301   */
302  struct dp_txrx_soc_attach_params {
303  	struct ol_if_ops *dp_ol_if_ops;
304  	void *target_psoc;
305  	uint32_t target_type;
306  };
307  
308  struct dp_tx_rx_stats {
309  	struct {
310  		/* start_xmit stats */
311  		__u32    tx_called;
312  		__u32    tx_dropped;
313  		__u32    tx_orphaned;
314  		__u32    tx_classified_ac[WLAN_MAX_AC];
315  		__u32    tx_dropped_ac[WLAN_MAX_AC];
316  #ifdef TX_MULTIQ_PER_AC
317  		/* Neither valid socket nor skb->hash */
318  		uint32_t inv_sk_and_skb_hash;
319  		/* skb->hash already calculated */
320  		uint32_t qselect_existing_skb_hash;
321  		/* valid tx queue id in socket */
322  		uint32_t qselect_sk_tx_map;
323  		/* skb->hash calculated in select queue */
324  		uint32_t qselect_skb_hash_calc;
325  #endif
326  		/* rx stats */
327  		__u32 rx_packets;
328  		__u32 rx_dropped;
329  		__u32 rx_delivered;
330  		__u32 rx_refused;
331  	} per_cpu[NUM_CPUS];
332  
333  	qdf_atomic_t rx_usolict_arp_n_mcast_drp;
334  
335  	/* rx gro */
336  	__u32 rx_aggregated;
337  	__u32 rx_gro_dropped;
338  	__u32 rx_non_aggregated;
339  	__u32 rx_gro_flush_skip;
340  	__u32 rx_gro_low_tput_flush;
341  
342  	/* txflow stats */
343  	bool     is_txflow_paused;
344  	__u32    txflow_pause_cnt;
345  	__u32    txflow_unpause_cnt;
346  	__u32    txflow_timer_cnt;
347  
348  	/*tx timeout stats*/
349  	__u32 tx_timeout_cnt;
350  	__u32 cont_txtimeout_cnt;
351  	u64 last_txtimeout;
352  };
353  
354  /**
355   * struct dp_dhcp_ind - DHCP Start/Stop indication message
356   * @dhcp_start: Is DHCP start idication
357   * @device_mode: Mode of the device(ex:STA, AP)
358   * @intf_mac_addr: MAC address of the interface
359   * @peer_mac_addr: MAC address of the connected peer
360   */
361  struct dp_dhcp_ind {
362  	bool dhcp_start;
363  	uint8_t device_mode;
364  	struct qdf_mac_addr intf_mac_addr;
365  	struct qdf_mac_addr peer_mac_addr;
366  };
367  
368  /**
369   * struct dp_mic_error_info - mic error info in dp
370   * @ta_mac_addr: transmitter mac address
371   * @multicast: Flag for multicast
372   * @key_id: Key ID
373   * @tsc: Sequence number
374   * @vdev_id: vdev id
375   *
376   */
377  struct dp_mic_error_info {
378  	struct qdf_mac_addr ta_mac_addr;
379  	bool multicast;
380  	uint8_t key_id;
381  	uint8_t tsc[SIR_CIPHER_SEQ_CTR_SIZE];
382  	uint16_t vdev_id;
383  };
384  
385  enum dp_mic_work_status {
386  	DP_MIC_UNINITIALIZED,
387  	DP_MIC_INITIALIZED,
388  	DP_MIC_SCHEDULED,
389  	DP_MIC_DISABLED
390  };
391  
392  /**
393   * struct dp_mic_work - mic work info in dp
394   * @work: mic error work
395   * @status: sattus of mic error work
396   * @info: Pointer to mic error information
397   * @lock: lock to synchronixe mic error work
398   *
399   */
400  struct dp_mic_work {
401  	qdf_work_t work;
402  	enum dp_mic_work_status status;
403  	struct dp_mic_error_info *info;
404  	qdf_spinlock_t lock;
405  };
406  
407  enum dp_nud_state {
408  	DP_NUD_NONE,
409  	DP_NUD_INCOMPLETE,
410  	DP_NUD_REACHABLE,
411  	DP_NUD_STALE,
412  	DP_NUD_DELAY,
413  	DP_NUD_PROBE,
414  	DP_NUD_FAILED,
415  	DP_NUD_NOARP,
416  	DP_NUD_PERMANENT,
417  	DP_NUD_STATE_INVALID
418  };
419  
420  struct opaque_hdd_callback_handle;
421  /*
422   * typedef hdd_cb_handle - HDD Handle
423   *
424   * Handle to the HDD.  The HDD handle is given to the DP component from the
425   * HDD during start modules.  The HDD handle is an input to all HDD function
426   * calls and represents an opaque handle to the HDD instance that is
427   * tied to the DP context
428   *
429   * The HDD must be able to derive it's internal instance structure
430   * pointer through this handle.
431   *
432   * NOTE WELL: struct opaque_hdd_callback_handle is not defined anywhere. This
433   * reference is used to help ensure that a hdd_cb_handle is never used
434   * where a different handle type is expected
435   */
436  typedef struct opaque_hdd_callback_handle *hdd_cb_handle;
437  
438  /**
439   * enum bus_bw_level - bus bandwidth vote levels
440   *
441   * @BUS_BW_LEVEL_NONE: No vote for bus bandwidth
442   * @BUS_BW_LEVEL_1: vote for level-1 bus bandwidth
443   * @BUS_BW_LEVEL_2: vote for level-2 bus bandwidth
444   * @BUS_BW_LEVEL_3: vote for level-3 bus bandwidth
445   * @BUS_BW_LEVEL_4: vote for level-4 bus bandwidth
446   * @BUS_BW_LEVEL_5: vote for level-5 bus bandwidth
447   * @BUS_BW_LEVEL_6: vote for level-6 bus bandwidth
448   * @BUS_BW_LEVEL_7: vote for level-7 bus bandwidth
449   * @BUS_BW_LEVEL_8: vote for level-8 bus bandwidth
450   * @BUS_BW_LEVEL_9: vote for level-9 bus bandwidth
451   * @BUS_BW_LEVEL_MAX: vote for max level bus bandwidth
452   */
453  enum bus_bw_level {
454  	BUS_BW_LEVEL_NONE,
455  	BUS_BW_LEVEL_1,
456  	BUS_BW_LEVEL_2,
457  	BUS_BW_LEVEL_3,
458  	BUS_BW_LEVEL_4,
459  	BUS_BW_LEVEL_5,
460  	BUS_BW_LEVEL_6,
461  	BUS_BW_LEVEL_7,
462  	BUS_BW_LEVEL_8,
463  	BUS_BW_LEVEL_9,
464  	BUS_BW_LEVEL_MAX,
465  };
466  
467  #define BUS_BW_LEVEL_RESUME BUS_BW_LEVEL_3
468  
469  /**
470   * enum tput_level - throughput levels
471   *
472   * @TPUT_LEVEL_NONE: No throughput
473   * @TPUT_LEVEL_IDLE: idle throughtput level
474   * @TPUT_LEVEL_LOW: low throughput level
475   * @TPUT_LEVEL_MEDIUM: medium throughtput level
476   * @TPUT_LEVEL_HIGH: high throughput level
477   * @TPUT_LEVEL_MID_HIGH: mid high throughput level
478   * @TPUT_LEVEL_VERY_HIGH: very high throughput level
479   * @TPUT_LEVEL_ULTRA_HIGH: ultra high throughput level
480   * @TPUT_LEVEL_SUPER_HIGH: super high throughput level
481   * @TPUT_LEVEL_MAX: maximum throughput level
482   */
483  enum tput_level {
484  	TPUT_LEVEL_NONE,
485  	TPUT_LEVEL_IDLE,
486  	TPUT_LEVEL_LOW,
487  	TPUT_LEVEL_MEDIUM,
488  	TPUT_LEVEL_HIGH,
489  	TPUT_LEVEL_MID_HIGH,
490  	TPUT_LEVEL_VERY_HIGH,
491  	TPUT_LEVEL_ULTRA_HIGH,
492  	TPUT_LEVEL_SUPER_HIGH,
493  	TPUT_LEVEL_MAX,
494  };
495  
496  /**
497   * enum bbm_non_per_flag - Non persistent policy related flag
498   *
499   * @BBM_APPS_RESUME: system resume flag
500   * @BBM_APPS_SUSPEND: system suspend flag
501   * @BBM_FLAG_MAX: maximum flag
502   */
503  enum bbm_non_per_flag {
504  	BBM_APPS_RESUME,
505  	BBM_APPS_SUSPEND,
506  	BBM_FLAG_MAX,
507  };
508  
509  /**
510   * enum bbm_policy - BBM policy
511   *
512   * @BBM_DRIVER_MODE_POLICY: driver mode policy
513   * @BBM_TPUT_POLICY: throughput policy
514   * @BBM_USER_POLICY: user policy
515   * @BBM_NON_PERSISTENT_POLICY: non persistent policy. For example, bus resume
516   *  sets the bus bw level to LEVEL_3 if any adapter is connected but
517   *  this is only a one time setting and is not persistent. This bus bw level
518   *  is set without taking other policy vote levels into consideration.
519   * @BBM_SELECT_TABLE_POLICY: policy where bus bw table is selected based on
520   *  the latency level.
521   * @BBM_MAX_POLICY: max policy
522   */
523  enum bbm_policy {
524  	BBM_DRIVER_MODE_POLICY,
525  	BBM_TPUT_POLICY,
526  	BBM_USER_POLICY,
527  	BBM_NON_PERSISTENT_POLICY,
528  	BBM_SELECT_TABLE_POLICY,
529  	BBM_MAX_POLICY,
530  };
531  
532  /**
533   * enum wlm_ll_level - WLM latency levels
534   *
535   * @WLM_LL_NORMAL: normal latency level
536   * @WLM_LL_LOW: low latency level
537   * @WLM_LL_MAX: max latency level
538   */
539  enum wlm_ll_level {
540  	WLM_LL_NORMAL,
541  	WLM_LL_LOW,
542  	WLM_LL_MAX,
543  };
544  
545  /**
546   * union bbm_policy_info - BBM policy specific info. Only one of the value
547   *  would be valid based on the BBM policy.
548   *
549   * @driver_mode: global driver mode. valid for BBM_DRIVER_MODE_POLICY.
550   * @flag: BBM non persistent flag. valid for BBM_NON_PERSISTENT_POLICY.
551   * @tput_level: throughput level. valid for BBM_TPUT_POLICY.
552   * @wlm_level: latency level. valid for BBM_WLM_POLICY.
553   * @user_level: user bus bandwidth vote. valid for BBM_USER_POLICY.
554   * @set: set or reset user level. valid for BBM_USER_POLICY.
555   * @usr: user specific info
556   */
557  union bbm_policy_info {
558  	enum QDF_GLOBAL_MODE driver_mode;
559  	enum bbm_non_per_flag flag;
560  	enum tput_level tput_level;
561  	enum wlm_ll_level wlm_level;
562  	struct {
563  		enum bus_bw_level user_level;
564  		bool set;
565  	} usr;
566  };
567  
568  /**
569   * struct bbm_params: BBM params
570   *
571   * @policy: BBM policy
572   * @policy_info: policy related info
573   */
574  struct bbm_params {
575  	enum bbm_policy policy;
576  	union bbm_policy_info policy_info;
577  };
578  
579  /**
580   * union wlan_tp_data: union of TCP msg for Tx and Rx Dir
581   * @tx_tp_data: msg to TCP for Tx Dir
582   * @rx_tp_data: msg to TCP for Rx Dir
583   */
584  union wlan_tp_data {
585  	struct wlan_tx_tp_data tx_tp_data;
586  	struct wlan_rx_tp_data rx_tp_data;
587  };
588  
589  /**
590   * struct wlan_dp_psoc_callbacks - struct containing callback
591   * to non-converged driver
592   * @callback_ctx : Opaque callback context
593   * @dp_get_netdev_by_vdev_mac: Callback to get netdev from vdev mac address
594   * @dp_get_tx_flow_low_watermark: Callback to get TX flow low watermark info
595   * @dp_get_tx_resource: Callback to check tx resources and take action
596   * @dp_get_tsf_time: Callback to get TSF time
597   * @dp_tsf_timestamp_rx: Callback to set rx packet timestamp
598   * @dp_nbuf_push_pkt: Callback to push rx pkt to network
599   * @dp_rx_napi_gro_flush: OS IF Callback to GRO RX/flush function.
600   * @dp_rx_thread_napi_gro_flush: OS IF Callback to do gro flush
601   * @dp_rx_napi_gro_receive: OS IF Callback for GRO RX receive function.
602   * @dp_lro_rx_cb: OS IF Callback for LRO receive function
603   * @dp_gro_rx_legacy_get_napi: Callback to get napi in legacy gro case
604   * @dp_register_rx_offld_flush_cb: OS IF Callback to get rx offld flush cb
605   * @dp_rx_check_qdisc_configured: OS IF Callback to check if any ingress qdisc
606   * configured
607   * @dp_is_gratuitous_arp_unsolicited_na: OS IF Callback to check gratuitous arp
608   * unsolicited na
609   * @dp_send_rx_pkt_over_nl: OS IF Callback to send rx pkt over nl
610   * @dp_disable_rx_ol_for_low_tput: Callback to disable Rx offload in low TPUT
611   * scenario
612   * @wlan_dp_sta_get_dot11mode: Callback to get dot11 mode
613   * @wlan_dp_get_ap_client_count: Callback to get client count connected to AP
614   * @wlan_dp_sta_ndi_connected: Callback to get NDI connected status
615   * @dp_any_adapter_connected: Callback to check if any adapter is connected
616   * @dp_send_svc_nlink_msg: Callback API to send svc nlink message
617   * @osif_dp_send_tcp_param_update_event: OS IF callback to send TCP param
618   * @dp_send_mscs_action_frame: Callback to send MSCS action frame
619   * @dp_pm_qos_add_request: Callback to send add pm qos request
620   * @dp_pm_qos_remove_request: Callback to send remove pm qos request
621   * @dp_pm_qos_update_request: Callback to send update pm qos request
622   * @dp_pld_remove_pm_qos: Callback to send remove pld pm qos request
623   * @dp_pld_request_pm_qos: Callback to send pld pm qos request
624   * @dp_pktlog_enable_disable:Callback to set packet log
625   * @dp_is_roaming_in_progress:Callback to check if roaming is in progress
626   * @dp_is_ap_active:Callback to check if AP is active
627   * @dp_napi_apply_throughput_policy:Callback to apply NAPI throughput policy
628   * @wlan_dp_display_tx_multiq_stats: Callback to display Tx Mulit queue stats
629   * @wlan_dp_display_netif_queue_history: Callback to display Netif queue
630   * history
631   * @osif_dp_process_mic_error: osif callback to process MIC error
632   * @dp_is_link_adapter: Callback API to check if adapter is link adapter
633   * @os_if_dp_nud_stats_info: osif callback to print nud stats info
634   * @dp_get_pause_map: Callback API to get pause map count
635   * @dp_nud_failure_work: Callback API to handle NUD failuire work
636   * @link_monitoring_cb: Callback API to handle link speed change
637   */
638  struct wlan_dp_psoc_callbacks {
639  	hdd_cb_handle callback_ctx;
640  
641  	qdf_netdev_t (*dp_get_netdev_by_vdev_mac)(struct qdf_mac_addr *mac_addr);
642  	unsigned int (*dp_get_tx_flow_low_watermark)(hdd_cb_handle cb_ctx,
643  						     qdf_netdev_t netdev);
644  	void (*dp_get_tx_resource)(uint8_t link_id_id,
645  				   struct qdf_mac_addr *mac_addr);
646  	void (*dp_get_tsf_time)(qdf_netdev_t netdev, uint64_t input_time,
647  				uint64_t *tsf_time);
648  	void (*dp_tsf_timestamp_rx)(hdd_cb_handle ctx, qdf_nbuf_t nbuf);
649  
650  	QDF_STATUS (*dp_nbuf_push_pkt)(qdf_nbuf_t nbuf,
651  				       enum dp_nbuf_push_type type);
652  
653  	QDF_STATUS (*dp_rx_napi_gro_flush)(qdf_napi_struct *napi_to_use,
654  					   qdf_nbuf_t nbuf,
655  					   uint8_t *force_flush);
656  	void
657  	(*dp_rx_thread_napi_gro_flush)(qdf_napi_struct *napi,
658  				       enum dp_rx_gro_flush_code flush_code);
659  	QDF_STATUS (*dp_rx_napi_gro_receive)(qdf_napi_struct *napi_to_use,
660  					     qdf_nbuf_t nbuf);
661  
662  	QDF_STATUS (*dp_lro_rx_cb)(qdf_netdev_t netdev, qdf_nbuf_t nbuf);
663  
664  	qdf_napi_struct *(*dp_gro_rx_legacy_get_napi)(qdf_nbuf_t nbuf,
665  						      bool enable_rx_thread);
666  
667  	void (*dp_register_rx_offld_flush_cb)(enum dp_rx_offld_flush_cb type);
668  
669  	QDF_STATUS (*dp_rx_check_qdisc_configured)(qdf_netdev_t dev,
670  						   uint32_t prio);
671  
672  	bool (*dp_is_gratuitous_arp_unsolicited_na)(qdf_nbuf_t nbuf);
673  
674  	bool (*dp_send_rx_pkt_over_nl)(qdf_netdev_t dev, uint8_t *addr,
675  				       qdf_nbuf_t nbuf, bool unecrypted);
676  	bool
677  	(*wlan_dp_sta_get_dot11mode)(hdd_cb_handle context, qdf_netdev_t netdev,
678  				     enum qca_wlan_802_11_mode *dot11_mode);
679  	bool (*wlan_dp_get_ap_client_count)(hdd_cb_handle context,
680  					    qdf_netdev_t netdev,
681  					    uint16_t *client_count);
682  	bool (*wlan_dp_sta_ndi_connected)(hdd_cb_handle context,
683  					  qdf_netdev_t netdev);
684  	bool (*dp_any_adapter_connected)(hdd_cb_handle context);
685  	void (*dp_send_svc_nlink_msg)(int radio, int type, void *data, int len);
686  
687  	void
688  	(*osif_dp_send_tcp_param_update_event)(struct wlan_objmgr_psoc *psoc,
689  					       union wlan_tp_data *data,
690  					       uint8_t dir);
691  	void (*dp_send_mscs_action_frame)(hdd_cb_handle context,
692  					  qdf_netdev_t netdev);
693  	void (*dp_pm_qos_add_request)(hdd_cb_handle context);
694  	void (*dp_pm_qos_remove_request)(hdd_cb_handle context);
695  	void (*dp_pm_qos_update_request)(hdd_cb_handle context,
696  					 cpumask_t *mask);
697  	void (*dp_pld_remove_pm_qos)(hdd_cb_handle context);
698  	void (*dp_pld_request_pm_qos)(hdd_cb_handle context);
699  	int (*dp_pktlog_enable_disable)(hdd_cb_handle context,
700  					bool enable_disable_flag,
701  					uint8_t user_triggered, int size);
702  	bool (*dp_is_roaming_in_progress)(hdd_cb_handle context);
703  	bool (*dp_is_ap_active)(hdd_cb_handle context, qdf_netdev_t netdev);
704  	void (*dp_disable_rx_ol_for_low_tput)(hdd_cb_handle context,
705  					      bool disable);
706  	int (*dp_napi_apply_throughput_policy)(hdd_cb_handle context,
707  					       uint64_t tx_packets,
708  					       uint64_t rx_packets);
709  	void (*wlan_dp_display_tx_multiq_stats)(hdd_cb_handle context,
710  						qdf_netdev_t netdev);
711  	void (*wlan_dp_display_netif_queue_history)(hdd_cb_handle context,
712  				enum qdf_stats_verbosity_level verb_lvl);
713  	void (*osif_dp_process_mic_error)(struct dp_mic_error_info *info,
714  					  struct wlan_objmgr_vdev *vdev);
715  	bool (*dp_is_link_adapter)(hdd_cb_handle context, uint8_t vdev_id);
716  	void (*os_if_dp_nud_stats_info)(struct wlan_objmgr_vdev *vdev);
717  	uint32_t (*dp_get_pause_map)(hdd_cb_handle context, qdf_netdev_t dev);
718  	void (*dp_nud_failure_work)(hdd_cb_handle context, qdf_netdev_t dev);
719  	void (*link_monitoring_cb)(struct wlan_objmgr_psoc *psoc,
720  				   uint8_t vdev_id,
721  				   bool is_link_speed_good);
722  };
723  
724  /**
725   * struct wlan_dp_psoc_sb_ops - struct containing callback
726   * to south bound APIs. callbacks to call traget_if APIs
727   * @dp_arp_stats_register_event_handler: Callback to register
728   * arp stas WMI handle
729   * @dp_arp_stats_unregister_event_handler: Callback to unregister
730   * arp stas WMI handle
731   * @dp_get_arp_req_stats: Callback to get arp stats
732   * @dp_set_arp_req_stats: Callback to  set arp stats
733   * @arp_request_ctx: ARP request context
734   * @dp_lro_config_cmd: Callback to  send LRO config command
735   * @dp_send_dhcp_ind: Callback to send DHCP indication
736   */
737  struct wlan_dp_psoc_sb_ops {
738  	/*TODO to add target if TX ops*/
739  	QDF_STATUS (*dp_arp_stats_register_event_handler)(struct wlan_objmgr_psoc *psoc);
740  	QDF_STATUS (*dp_arp_stats_unregister_event_handler)(struct wlan_objmgr_psoc *psoc);
741  	QDF_STATUS (*dp_get_arp_req_stats)(struct wlan_objmgr_psoc *psoc,
742  					   struct dp_get_arp_stats_params *req_buf);
743  	QDF_STATUS (*dp_set_arp_req_stats)(struct wlan_objmgr_psoc *psoc,
744  					   struct dp_set_arp_stats_params *req_buf);
745  	void *arp_request_ctx;
746  	QDF_STATUS (*dp_lro_config_cmd)(struct wlan_objmgr_psoc *psoc,
747  					struct cdp_lro_hash_config *dp_lro_cmd);
748  	QDF_STATUS (*dp_send_dhcp_ind)(uint16_t vdev_id,
749  				       struct dp_dhcp_ind *dhcp_ind);
750  };
751  
752  /**
753   * struct wlan_dp_psoc_nb_ops - struct containing callback
754   * to north bound APIs. callbacks APIs to be called by target_if APIs
755   * @osif_dp_get_arp_stats_evt: Callback called on receiving arp stats event
756   */
757  struct wlan_dp_psoc_nb_ops {
758  	/*TODO to add target if RX ops*/
759  	void (*osif_dp_get_arp_stats_evt)(struct wlan_objmgr_psoc *psoc,
760  					  struct dp_rsp_stats *rsp);
761  };
762  
763  /**
764   * struct wlan_dp_user_config - DP component user config
765   * @ipa_enable: IPA enabled/disabled config
766   * @arp_connectivity_map: ARP connectiviy map
767   */
768  struct wlan_dp_user_config {
769  	bool ipa_enable;
770  	uint32_t arp_connectivity_map;
771  };
772  
773  /**
774   * struct dp_traffic_end_indication - Traffic end indication
775   * @enabled: Feature enabled/disabled config
776   * @def_dscp: Default DSCP value in regular packets in traffic
777   * @spl_dscp: Special DSCP value to be used by packet to mark
778   *            end of data stream
779   */
780  struct dp_traffic_end_indication {
781  	bool enabled;
782  	uint8_t def_dscp;
783  	uint8_t spl_dscp;
784  };
785  #endif /* end  of _WLAN_DP_PUBLIC_STRUCT_H_ */
786