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