xref: /linux/drivers/net/wireless/ath/ath12k/wifi7/wmi.c (revision 37a93dd5c49b5fda807fd204edf2547c3493319c)
1a7202704SKiran Venkatappa // SPDX-License-Identifier: BSD-3-Clause-Clear
2a7202704SKiran Venkatappa /*
3a7202704SKiran Venkatappa  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
4a7202704SKiran Venkatappa  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
5a7202704SKiran Venkatappa  */
6a7202704SKiran Venkatappa 
7a7202704SKiran Venkatappa #include "../core.h"
8a7202704SKiran Venkatappa #include "wmi.h"
9a7202704SKiran Venkatappa 
10bce3b73dSKiran Venkatappa void ath12k_wifi7_wmi_init_qcn9274(struct ath12k_base *ab,
11a7202704SKiran Venkatappa 				   struct ath12k_wmi_resource_config_arg *config)
12a7202704SKiran Venkatappa {
13a7202704SKiran Venkatappa 	config->num_vdevs = ab->num_radios * TARGET_NUM_VDEVS(ab);
14a7202704SKiran Venkatappa 	config->num_peers = ab->num_radios *
15a7202704SKiran Venkatappa 		ath12k_core_get_max_peers_per_radio(ab);
16a7202704SKiran Venkatappa 	config->num_offload_peers = TARGET_NUM_OFFLD_PEERS;
17a7202704SKiran Venkatappa 	config->num_offload_reorder_buffs = TARGET_NUM_OFFLD_REORDER_BUFFS;
18a7202704SKiran Venkatappa 	config->num_peer_keys = TARGET_NUM_PEER_KEYS;
19a7202704SKiran Venkatappa 	config->ast_skid_limit = TARGET_AST_SKID_LIMIT;
20a7202704SKiran Venkatappa 	config->tx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1;
21a7202704SKiran Venkatappa 	config->rx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1;
22a7202704SKiran Venkatappa 	config->rx_timeout_pri[0] = TARGET_RX_TIMEOUT_LO_PRI;
23a7202704SKiran Venkatappa 	config->rx_timeout_pri[1] = TARGET_RX_TIMEOUT_LO_PRI;
24a7202704SKiran Venkatappa 	config->rx_timeout_pri[2] = TARGET_RX_TIMEOUT_LO_PRI;
25a7202704SKiran Venkatappa 	config->rx_timeout_pri[3] = TARGET_RX_TIMEOUT_HI_PRI;
26a7202704SKiran Venkatappa 
27a7202704SKiran Venkatappa 	if (test_bit(ATH12K_FLAG_RAW_MODE, &ab->dev_flags))
28a7202704SKiran Venkatappa 		config->rx_decap_mode = TARGET_DECAP_MODE_RAW;
29a7202704SKiran Venkatappa 	else
30a7202704SKiran Venkatappa 		config->rx_decap_mode = TARGET_DECAP_MODE_NATIVE_WIFI;
31a7202704SKiran Venkatappa 
32a7202704SKiran Venkatappa 	config->scan_max_pending_req = TARGET_SCAN_MAX_PENDING_REQS;
33a7202704SKiran Venkatappa 	config->bmiss_offload_max_vdev = TARGET_BMISS_OFFLOAD_MAX_VDEV;
34a7202704SKiran Venkatappa 	config->roam_offload_max_vdev = TARGET_ROAM_OFFLOAD_MAX_VDEV;
35a7202704SKiran Venkatappa 	config->roam_offload_max_ap_profiles = TARGET_ROAM_OFFLOAD_MAX_AP_PROFILES;
36a7202704SKiran Venkatappa 	config->num_mcast_groups = TARGET_NUM_MCAST_GROUPS;
37a7202704SKiran Venkatappa 	config->num_mcast_table_elems = TARGET_NUM_MCAST_TABLE_ELEMS;
38a7202704SKiran Venkatappa 	config->mcast2ucast_mode = TARGET_MCAST2UCAST_MODE;
39a7202704SKiran Venkatappa 	config->tx_dbg_log_size = TARGET_TX_DBG_LOG_SIZE;
40a7202704SKiran Venkatappa 	config->num_wds_entries = TARGET_NUM_WDS_ENTRIES;
41a7202704SKiran Venkatappa 	config->dma_burst_size = TARGET_DMA_BURST_SIZE;
42a7202704SKiran Venkatappa 	config->rx_skip_defrag_timeout_dup_detection_check =
43a7202704SKiran Venkatappa 		TARGET_RX_SKIP_DEFRAG_TIMEOUT_DUP_DETECTION_CHECK;
44a7202704SKiran Venkatappa 	config->vow_config = TARGET_VOW_CONFIG;
45a7202704SKiran Venkatappa 	config->gtk_offload_max_vdev = TARGET_GTK_OFFLOAD_MAX_VDEV;
46a7202704SKiran Venkatappa 	config->num_msdu_desc = TARGET_NUM_MSDU_DESC;
47a7202704SKiran Venkatappa 	config->beacon_tx_offload_max_vdev = ab->num_radios * TARGET_MAX_BCN_OFFLD;
48a7202704SKiran Venkatappa 	config->rx_batchmode = TARGET_RX_BATCHMODE;
49a7202704SKiran Venkatappa 	/* Indicates host supports peer map v3 and unmap v2 support */
50a7202704SKiran Venkatappa 	config->peer_map_unmap_version = 0x32;
51a7202704SKiran Venkatappa 	config->twt_ap_pdev_count = ab->num_radios;
52a7202704SKiran Venkatappa 	config->twt_ap_sta_count = 1000;
53a7202704SKiran Venkatappa 	config->ema_max_vap_cnt = ab->num_radios;
54a7202704SKiran Venkatappa 	config->ema_max_profile_period = TARGET_EMA_MAX_PROFILE_PERIOD;
55a7202704SKiran Venkatappa 	config->beacon_tx_offload_max_vdev += config->ema_max_vap_cnt;
56a7202704SKiran Venkatappa 
57a7202704SKiran Venkatappa 	if (test_bit(WMI_TLV_SERVICE_PEER_METADATA_V1A_V1B_SUPPORT, ab->wmi_ab.svc_map))
58a7202704SKiran Venkatappa 		config->peer_metadata_ver = ATH12K_PEER_METADATA_V1B;
59a7202704SKiran Venkatappa }
60a7202704SKiran Venkatappa 
61bce3b73dSKiran Venkatappa void ath12k_wifi7_wmi_init_wcn7850(struct ath12k_base *ab,
62a7202704SKiran Venkatappa 				   struct ath12k_wmi_resource_config_arg *config)
63a7202704SKiran Venkatappa {
64a7202704SKiran Venkatappa 	config->num_vdevs = 4;
65a7202704SKiran Venkatappa 	config->num_peers = 16;
66a7202704SKiran Venkatappa 	config->num_tids = 32;
67a7202704SKiran Venkatappa 
68a7202704SKiran Venkatappa 	config->num_offload_peers = 3;
69a7202704SKiran Venkatappa 	config->num_offload_reorder_buffs = 3;
70a7202704SKiran Venkatappa 	config->num_peer_keys = TARGET_NUM_PEER_KEYS;
71a7202704SKiran Venkatappa 	config->ast_skid_limit = TARGET_AST_SKID_LIMIT;
72a7202704SKiran Venkatappa 	config->tx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1;
73a7202704SKiran Venkatappa 	config->rx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1;
74a7202704SKiran Venkatappa 	config->rx_timeout_pri[0] = TARGET_RX_TIMEOUT_LO_PRI;
75a7202704SKiran Venkatappa 	config->rx_timeout_pri[1] = TARGET_RX_TIMEOUT_LO_PRI;
76a7202704SKiran Venkatappa 	config->rx_timeout_pri[2] = TARGET_RX_TIMEOUT_LO_PRI;
77a7202704SKiran Venkatappa 	config->rx_timeout_pri[3] = TARGET_RX_TIMEOUT_HI_PRI;
78a7202704SKiran Venkatappa 	config->rx_decap_mode = TARGET_DECAP_MODE_NATIVE_WIFI;
79a7202704SKiran Venkatappa 	config->scan_max_pending_req = TARGET_SCAN_MAX_PENDING_REQS;
80a7202704SKiran Venkatappa 	config->bmiss_offload_max_vdev = TARGET_BMISS_OFFLOAD_MAX_VDEV;
81a7202704SKiran Venkatappa 	config->roam_offload_max_vdev = TARGET_ROAM_OFFLOAD_MAX_VDEV;
82a7202704SKiran Venkatappa 	config->roam_offload_max_ap_profiles = TARGET_ROAM_OFFLOAD_MAX_AP_PROFILES;
83a7202704SKiran Venkatappa 	config->num_mcast_groups = 0;
84a7202704SKiran Venkatappa 	config->num_mcast_table_elems = 0;
85a7202704SKiran Venkatappa 	config->mcast2ucast_mode = 0;
86a7202704SKiran Venkatappa 	config->tx_dbg_log_size = TARGET_TX_DBG_LOG_SIZE;
87a7202704SKiran Venkatappa 	config->num_wds_entries = 0;
88a7202704SKiran Venkatappa 	config->dma_burst_size = 0;
89a7202704SKiran Venkatappa 	config->rx_skip_defrag_timeout_dup_detection_check = 0;
90a7202704SKiran Venkatappa 	config->vow_config = TARGET_VOW_CONFIG;
91a7202704SKiran Venkatappa 	config->gtk_offload_max_vdev = 2;
92a7202704SKiran Venkatappa 	config->num_msdu_desc = 0x400;
93a7202704SKiran Venkatappa 	config->beacon_tx_offload_max_vdev = 2;
94a7202704SKiran Venkatappa 	config->rx_batchmode = TARGET_RX_BATCHMODE;
95a7202704SKiran Venkatappa 
96a7202704SKiran Venkatappa 	config->peer_map_unmap_version = 0x1;
97a7202704SKiran Venkatappa 	config->use_pdev_id = 1;
98a7202704SKiran Venkatappa 	config->max_frag_entries = 0xa;
99a7202704SKiran Venkatappa 	config->num_tdls_vdevs = 0x1;
100a7202704SKiran Venkatappa 	config->num_tdls_conn_table_entries = 8;
101a7202704SKiran Venkatappa 	config->beacon_tx_offload_max_vdev = 0x2;
102a7202704SKiran Venkatappa 	config->num_multicast_filter_entries = 0x20;
103a7202704SKiran Venkatappa 	config->num_wow_filters = 0x16;
104a7202704SKiran Venkatappa 	config->num_keep_alive_pattern = 0;
105*d6c5d412SBaochen Qiang 
106*d6c5d412SBaochen Qiang 	if (test_bit(WMI_TLV_SERVICE_PEER_METADATA_V1A_V1B_SUPPORT, ab->wmi_ab.svc_map))
107*d6c5d412SBaochen Qiang 		config->peer_metadata_ver = ATH12K_PEER_METADATA_V1A;
108*d6c5d412SBaochen Qiang 	else
109*d6c5d412SBaochen Qiang 		config->peer_metadata_ver = ab->wmi_ab.dp_peer_meta_data_ver;
110a7202704SKiran Venkatappa }
111