1dd4f32aeSBjoern A. Zeeb // SPDX-License-Identifier: BSD-3-Clause-Clear
2dd4f32aeSBjoern A. Zeeb /*
3dd4f32aeSBjoern A. Zeeb * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
4*28348caeSBjoern A. Zeeb * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
5dd4f32aeSBjoern A. Zeeb */
6dd4f32aeSBjoern A. Zeeb
7dd4f32aeSBjoern A. Zeeb #include <linux/types.h>
8dd4f32aeSBjoern A. Zeeb #include <linux/bitops.h>
9dd4f32aeSBjoern A. Zeeb #include <linux/bitfield.h>
10dd4f32aeSBjoern A. Zeeb
11dd4f32aeSBjoern A. Zeeb #include "core.h"
12dd4f32aeSBjoern A. Zeeb #include "ce.h"
13dd4f32aeSBjoern A. Zeeb #include "hif.h"
14dd4f32aeSBjoern A. Zeeb #include "hal.h"
15dd4f32aeSBjoern A. Zeeb #include "hw.h"
16dd4f32aeSBjoern A. Zeeb
17dd4f32aeSBjoern A. Zeeb /* Map from pdev index to hw mac index */
ath11k_hw_ipq8074_mac_from_pdev_id(int pdev_idx)18dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_ipq8074_mac_from_pdev_id(int pdev_idx)
19dd4f32aeSBjoern A. Zeeb {
20dd4f32aeSBjoern A. Zeeb switch (pdev_idx) {
21dd4f32aeSBjoern A. Zeeb case 0:
22dd4f32aeSBjoern A. Zeeb return 0;
23dd4f32aeSBjoern A. Zeeb case 1:
24dd4f32aeSBjoern A. Zeeb return 2;
25dd4f32aeSBjoern A. Zeeb case 2:
26dd4f32aeSBjoern A. Zeeb return 1;
27dd4f32aeSBjoern A. Zeeb default:
28dd4f32aeSBjoern A. Zeeb return ATH11K_INVALID_HW_MAC_ID;
29dd4f32aeSBjoern A. Zeeb }
30dd4f32aeSBjoern A. Zeeb }
31dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq6018_mac_from_pdev_id(int pdev_idx)32dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_ipq6018_mac_from_pdev_id(int pdev_idx)
33dd4f32aeSBjoern A. Zeeb {
34dd4f32aeSBjoern A. Zeeb return pdev_idx;
35dd4f32aeSBjoern A. Zeeb }
36dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_tx_mesh_enable(struct ath11k_base * ab,struct hal_tcl_data_cmd * tcl_cmd)37dd4f32aeSBjoern A. Zeeb static void ath11k_hw_ipq8074_tx_mesh_enable(struct ath11k_base *ab,
38dd4f32aeSBjoern A. Zeeb struct hal_tcl_data_cmd *tcl_cmd)
39dd4f32aeSBjoern A. Zeeb {
40dd4f32aeSBjoern A. Zeeb tcl_cmd->info2 |= FIELD_PREP(HAL_IPQ8074_TCL_DATA_CMD_INFO2_MESH_ENABLE,
41dd4f32aeSBjoern A. Zeeb true);
42dd4f32aeSBjoern A. Zeeb }
43dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_tx_mesh_enable(struct ath11k_base * ab,struct hal_tcl_data_cmd * tcl_cmd)44dd4f32aeSBjoern A. Zeeb static void ath11k_hw_qcn9074_tx_mesh_enable(struct ath11k_base *ab,
45dd4f32aeSBjoern A. Zeeb struct hal_tcl_data_cmd *tcl_cmd)
46dd4f32aeSBjoern A. Zeeb {
47dd4f32aeSBjoern A. Zeeb tcl_cmd->info3 |= FIELD_PREP(HAL_QCN9074_TCL_DATA_CMD_INFO3_MESH_ENABLE,
48dd4f32aeSBjoern A. Zeeb true);
49dd4f32aeSBjoern A. Zeeb }
50dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_tx_mesh_enable(struct ath11k_base * ab,struct hal_tcl_data_cmd * tcl_cmd)51dd4f32aeSBjoern A. Zeeb static void ath11k_hw_wcn6855_tx_mesh_enable(struct ath11k_base *ab,
52dd4f32aeSBjoern A. Zeeb struct hal_tcl_data_cmd *tcl_cmd)
53dd4f32aeSBjoern A. Zeeb {
54dd4f32aeSBjoern A. Zeeb tcl_cmd->info3 |= FIELD_PREP(HAL_QCN9074_TCL_DATA_CMD_INFO3_MESH_ENABLE,
55dd4f32aeSBjoern A. Zeeb true);
56dd4f32aeSBjoern A. Zeeb }
57dd4f32aeSBjoern A. Zeeb
ath11k_init_wmi_config_qca6390(struct ath11k_base * ab,struct target_resource_config * config)58dd4f32aeSBjoern A. Zeeb static void ath11k_init_wmi_config_qca6390(struct ath11k_base *ab,
59dd4f32aeSBjoern A. Zeeb struct target_resource_config *config)
60dd4f32aeSBjoern A. Zeeb {
61dd4f32aeSBjoern A. Zeeb config->num_vdevs = 4;
62dd4f32aeSBjoern A. Zeeb config->num_peers = 16;
63dd4f32aeSBjoern A. Zeeb config->num_tids = 32;
64dd4f32aeSBjoern A. Zeeb
65dd4f32aeSBjoern A. Zeeb config->num_offload_peers = 3;
66dd4f32aeSBjoern A. Zeeb config->num_offload_reorder_buffs = 3;
67dd4f32aeSBjoern A. Zeeb config->num_peer_keys = TARGET_NUM_PEER_KEYS;
68dd4f32aeSBjoern A. Zeeb config->ast_skid_limit = TARGET_AST_SKID_LIMIT;
69dd4f32aeSBjoern A. Zeeb config->tx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1;
70dd4f32aeSBjoern A. Zeeb config->rx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1;
71dd4f32aeSBjoern A. Zeeb config->rx_timeout_pri[0] = TARGET_RX_TIMEOUT_LO_PRI;
72dd4f32aeSBjoern A. Zeeb config->rx_timeout_pri[1] = TARGET_RX_TIMEOUT_LO_PRI;
73dd4f32aeSBjoern A. Zeeb config->rx_timeout_pri[2] = TARGET_RX_TIMEOUT_LO_PRI;
74dd4f32aeSBjoern A. Zeeb config->rx_timeout_pri[3] = TARGET_RX_TIMEOUT_HI_PRI;
75dd4f32aeSBjoern A. Zeeb config->rx_decap_mode = TARGET_DECAP_MODE_NATIVE_WIFI;
76dd4f32aeSBjoern A. Zeeb config->scan_max_pending_req = TARGET_SCAN_MAX_PENDING_REQS;
77dd4f32aeSBjoern A. Zeeb config->bmiss_offload_max_vdev = TARGET_BMISS_OFFLOAD_MAX_VDEV;
78dd4f32aeSBjoern A. Zeeb config->roam_offload_max_vdev = TARGET_ROAM_OFFLOAD_MAX_VDEV;
79dd4f32aeSBjoern A. Zeeb config->roam_offload_max_ap_profiles = TARGET_ROAM_OFFLOAD_MAX_AP_PROFILES;
80dd4f32aeSBjoern A. Zeeb config->num_mcast_groups = 0;
81dd4f32aeSBjoern A. Zeeb config->num_mcast_table_elems = 0;
82dd4f32aeSBjoern A. Zeeb config->mcast2ucast_mode = 0;
83dd4f32aeSBjoern A. Zeeb config->tx_dbg_log_size = TARGET_TX_DBG_LOG_SIZE;
84dd4f32aeSBjoern A. Zeeb config->num_wds_entries = 0;
85dd4f32aeSBjoern A. Zeeb config->dma_burst_size = 0;
86dd4f32aeSBjoern A. Zeeb config->rx_skip_defrag_timeout_dup_detection_check = 0;
87dd4f32aeSBjoern A. Zeeb config->vow_config = TARGET_VOW_CONFIG;
88dd4f32aeSBjoern A. Zeeb config->gtk_offload_max_vdev = 2;
89dd4f32aeSBjoern A. Zeeb config->num_msdu_desc = 0x400;
90dd4f32aeSBjoern A. Zeeb config->beacon_tx_offload_max_vdev = 2;
91dd4f32aeSBjoern A. Zeeb config->rx_batchmode = TARGET_RX_BATCHMODE;
92dd4f32aeSBjoern A. Zeeb
93dd4f32aeSBjoern A. Zeeb config->peer_map_unmap_v2_support = 0;
94dd4f32aeSBjoern A. Zeeb config->use_pdev_id = 1;
95dd4f32aeSBjoern A. Zeeb config->max_frag_entries = 0xa;
96dd4f32aeSBjoern A. Zeeb config->num_tdls_vdevs = 0x1;
97dd4f32aeSBjoern A. Zeeb config->num_tdls_conn_table_entries = 8;
98dd4f32aeSBjoern A. Zeeb config->beacon_tx_offload_max_vdev = 0x2;
99dd4f32aeSBjoern A. Zeeb config->num_multicast_filter_entries = 0x20;
100dd4f32aeSBjoern A. Zeeb config->num_wow_filters = 0x16;
101dd4f32aeSBjoern A. Zeeb config->num_keep_alive_pattern = 0;
102dd4f32aeSBjoern A. Zeeb config->flag1 |= WMI_RSRC_CFG_FLAG1_BSS_CHANNEL_INFO_64;
103dd4f32aeSBjoern A. Zeeb }
104dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_reo_setup(struct ath11k_base * ab)105dd4f32aeSBjoern A. Zeeb static void ath11k_hw_ipq8074_reo_setup(struct ath11k_base *ab)
106dd4f32aeSBjoern A. Zeeb {
107dd4f32aeSBjoern A. Zeeb u32 reo_base = HAL_SEQ_WCSS_UMAC_REO_REG;
108dd4f32aeSBjoern A. Zeeb u32 val;
109dd4f32aeSBjoern A. Zeeb /* Each hash entry uses three bits to map to a particular ring. */
110dd4f32aeSBjoern A. Zeeb u32 ring_hash_map = HAL_HASH_ROUTING_RING_SW1 << 0 |
111dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW2 << 3 |
112dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW3 << 6 |
113dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW4 << 9 |
114dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW1 << 12 |
115dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW2 << 15 |
116dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW3 << 18 |
117dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW4 << 21;
118dd4f32aeSBjoern A. Zeeb
119dd4f32aeSBjoern A. Zeeb val = ath11k_hif_read32(ab, reo_base + HAL_REO1_GEN_ENABLE);
120dd4f32aeSBjoern A. Zeeb
121dd4f32aeSBjoern A. Zeeb val &= ~HAL_REO1_GEN_ENABLE_FRAG_DST_RING;
122dd4f32aeSBjoern A. Zeeb val |= FIELD_PREP(HAL_REO1_GEN_ENABLE_FRAG_DST_RING,
123dd4f32aeSBjoern A. Zeeb HAL_SRNG_RING_ID_REO2SW1) |
124dd4f32aeSBjoern A. Zeeb FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_LIST_ENABLE, 1) |
125dd4f32aeSBjoern A. Zeeb FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_FLUSH_ENABLE, 1);
126dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_GEN_ENABLE, val);
127dd4f32aeSBjoern A. Zeeb
128dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_0(ab),
129dd4f32aeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
130dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_1(ab),
131dd4f32aeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
132dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_2(ab),
133dd4f32aeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
134dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_3(ab),
135dd4f32aeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
136dd4f32aeSBjoern A. Zeeb
137dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_0,
138dd4f32aeSBjoern A. Zeeb FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
139dd4f32aeSBjoern A. Zeeb ring_hash_map));
140dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_1,
141dd4f32aeSBjoern A. Zeeb FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
142dd4f32aeSBjoern A. Zeeb ring_hash_map));
143dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_2,
144dd4f32aeSBjoern A. Zeeb FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
145dd4f32aeSBjoern A. Zeeb ring_hash_map));
146dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_3,
147dd4f32aeSBjoern A. Zeeb FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
148dd4f32aeSBjoern A. Zeeb ring_hash_map));
149dd4f32aeSBjoern A. Zeeb }
150dd4f32aeSBjoern A. Zeeb
ath11k_init_wmi_config_ipq8074(struct ath11k_base * ab,struct target_resource_config * config)151dd4f32aeSBjoern A. Zeeb static void ath11k_init_wmi_config_ipq8074(struct ath11k_base *ab,
152dd4f32aeSBjoern A. Zeeb struct target_resource_config *config)
153dd4f32aeSBjoern A. Zeeb {
154dd4f32aeSBjoern A. Zeeb config->num_vdevs = ab->num_radios * TARGET_NUM_VDEVS(ab);
155dd4f32aeSBjoern A. Zeeb
156dd4f32aeSBjoern A. Zeeb if (ab->num_radios == 2) {
157dd4f32aeSBjoern A. Zeeb config->num_peers = TARGET_NUM_PEERS(ab, DBS);
158dd4f32aeSBjoern A. Zeeb config->num_tids = TARGET_NUM_TIDS(ab, DBS);
159dd4f32aeSBjoern A. Zeeb } else if (ab->num_radios == 3) {
160dd4f32aeSBjoern A. Zeeb config->num_peers = TARGET_NUM_PEERS(ab, DBS_SBS);
161dd4f32aeSBjoern A. Zeeb config->num_tids = TARGET_NUM_TIDS(ab, DBS_SBS);
162dd4f32aeSBjoern A. Zeeb } else {
163dd4f32aeSBjoern A. Zeeb /* Control should not reach here */
164dd4f32aeSBjoern A. Zeeb config->num_peers = TARGET_NUM_PEERS(ab, SINGLE);
165dd4f32aeSBjoern A. Zeeb config->num_tids = TARGET_NUM_TIDS(ab, SINGLE);
166dd4f32aeSBjoern A. Zeeb }
167dd4f32aeSBjoern A. Zeeb config->num_offload_peers = TARGET_NUM_OFFLD_PEERS;
168dd4f32aeSBjoern A. Zeeb config->num_offload_reorder_buffs = TARGET_NUM_OFFLD_REORDER_BUFFS;
169dd4f32aeSBjoern A. Zeeb config->num_peer_keys = TARGET_NUM_PEER_KEYS;
170dd4f32aeSBjoern A. Zeeb config->ast_skid_limit = TARGET_AST_SKID_LIMIT;
171dd4f32aeSBjoern A. Zeeb config->tx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1;
172dd4f32aeSBjoern A. Zeeb config->rx_chain_mask = (1 << ab->target_caps.num_rf_chains) - 1;
173dd4f32aeSBjoern A. Zeeb config->rx_timeout_pri[0] = TARGET_RX_TIMEOUT_LO_PRI;
174dd4f32aeSBjoern A. Zeeb config->rx_timeout_pri[1] = TARGET_RX_TIMEOUT_LO_PRI;
175dd4f32aeSBjoern A. Zeeb config->rx_timeout_pri[2] = TARGET_RX_TIMEOUT_LO_PRI;
176dd4f32aeSBjoern A. Zeeb config->rx_timeout_pri[3] = TARGET_RX_TIMEOUT_HI_PRI;
177dd4f32aeSBjoern A. Zeeb
178dd4f32aeSBjoern A. Zeeb if (test_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags))
179dd4f32aeSBjoern A. Zeeb config->rx_decap_mode = TARGET_DECAP_MODE_RAW;
180dd4f32aeSBjoern A. Zeeb else
181dd4f32aeSBjoern A. Zeeb config->rx_decap_mode = TARGET_DECAP_MODE_NATIVE_WIFI;
182dd4f32aeSBjoern A. Zeeb
183dd4f32aeSBjoern A. Zeeb config->scan_max_pending_req = TARGET_SCAN_MAX_PENDING_REQS;
184dd4f32aeSBjoern A. Zeeb config->bmiss_offload_max_vdev = TARGET_BMISS_OFFLOAD_MAX_VDEV;
185dd4f32aeSBjoern A. Zeeb config->roam_offload_max_vdev = TARGET_ROAM_OFFLOAD_MAX_VDEV;
186dd4f32aeSBjoern A. Zeeb config->roam_offload_max_ap_profiles = TARGET_ROAM_OFFLOAD_MAX_AP_PROFILES;
187dd4f32aeSBjoern A. Zeeb config->num_mcast_groups = TARGET_NUM_MCAST_GROUPS;
188dd4f32aeSBjoern A. Zeeb config->num_mcast_table_elems = TARGET_NUM_MCAST_TABLE_ELEMS;
189dd4f32aeSBjoern A. Zeeb config->mcast2ucast_mode = TARGET_MCAST2UCAST_MODE;
190dd4f32aeSBjoern A. Zeeb config->tx_dbg_log_size = TARGET_TX_DBG_LOG_SIZE;
191dd4f32aeSBjoern A. Zeeb config->num_wds_entries = TARGET_NUM_WDS_ENTRIES;
192dd4f32aeSBjoern A. Zeeb config->dma_burst_size = TARGET_DMA_BURST_SIZE;
193dd4f32aeSBjoern A. Zeeb config->rx_skip_defrag_timeout_dup_detection_check =
194dd4f32aeSBjoern A. Zeeb TARGET_RX_SKIP_DEFRAG_TIMEOUT_DUP_DETECTION_CHECK;
195dd4f32aeSBjoern A. Zeeb config->vow_config = TARGET_VOW_CONFIG;
196dd4f32aeSBjoern A. Zeeb config->gtk_offload_max_vdev = TARGET_GTK_OFFLOAD_MAX_VDEV;
197dd4f32aeSBjoern A. Zeeb config->num_msdu_desc = TARGET_NUM_MSDU_DESC;
198dd4f32aeSBjoern A. Zeeb config->beacon_tx_offload_max_vdev = ab->num_radios * TARGET_MAX_BCN_OFFLD;
199dd4f32aeSBjoern A. Zeeb config->rx_batchmode = TARGET_RX_BATCHMODE;
200dd4f32aeSBjoern A. Zeeb config->peer_map_unmap_v2_support = 1;
201dd4f32aeSBjoern A. Zeeb config->twt_ap_pdev_count = ab->num_radios;
202dd4f32aeSBjoern A. Zeeb config->twt_ap_sta_count = 1000;
203dd4f32aeSBjoern A. Zeeb config->flag1 |= WMI_RSRC_CFG_FLAG1_BSS_CHANNEL_INFO_64;
204*28348caeSBjoern A. Zeeb config->flag1 |= WMI_RSRC_CFG_FLAG1_ACK_RSSI;
205*28348caeSBjoern A. Zeeb config->ema_max_vap_cnt = ab->num_radios;
206*28348caeSBjoern A. Zeeb config->ema_max_profile_period = TARGET_EMA_MAX_PROFILE_PERIOD;
207*28348caeSBjoern A. Zeeb config->beacon_tx_offload_max_vdev += config->ema_max_vap_cnt;
208dd4f32aeSBjoern A. Zeeb }
209dd4f32aeSBjoern A. Zeeb
ath11k_hw_mac_id_to_pdev_id_ipq8074(struct ath11k_hw_params * hw,int mac_id)210dd4f32aeSBjoern A. Zeeb static int ath11k_hw_mac_id_to_pdev_id_ipq8074(struct ath11k_hw_params *hw,
211dd4f32aeSBjoern A. Zeeb int mac_id)
212dd4f32aeSBjoern A. Zeeb {
213dd4f32aeSBjoern A. Zeeb return mac_id;
214dd4f32aeSBjoern A. Zeeb }
215dd4f32aeSBjoern A. Zeeb
ath11k_hw_mac_id_to_srng_id_ipq8074(struct ath11k_hw_params * hw,int mac_id)216dd4f32aeSBjoern A. Zeeb static int ath11k_hw_mac_id_to_srng_id_ipq8074(struct ath11k_hw_params *hw,
217dd4f32aeSBjoern A. Zeeb int mac_id)
218dd4f32aeSBjoern A. Zeeb {
219dd4f32aeSBjoern A. Zeeb return 0;
220dd4f32aeSBjoern A. Zeeb }
221dd4f32aeSBjoern A. Zeeb
ath11k_hw_mac_id_to_pdev_id_qca6390(struct ath11k_hw_params * hw,int mac_id)222dd4f32aeSBjoern A. Zeeb static int ath11k_hw_mac_id_to_pdev_id_qca6390(struct ath11k_hw_params *hw,
223dd4f32aeSBjoern A. Zeeb int mac_id)
224dd4f32aeSBjoern A. Zeeb {
225dd4f32aeSBjoern A. Zeeb return 0;
226dd4f32aeSBjoern A. Zeeb }
227dd4f32aeSBjoern A. Zeeb
ath11k_hw_mac_id_to_srng_id_qca6390(struct ath11k_hw_params * hw,int mac_id)228dd4f32aeSBjoern A. Zeeb static int ath11k_hw_mac_id_to_srng_id_qca6390(struct ath11k_hw_params *hw,
229dd4f32aeSBjoern A. Zeeb int mac_id)
230dd4f32aeSBjoern A. Zeeb {
231dd4f32aeSBjoern A. Zeeb return mac_id;
232dd4f32aeSBjoern A. Zeeb }
233dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_first_msdu(struct hal_rx_desc * desc)234dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_ipq8074_rx_desc_get_first_msdu(struct hal_rx_desc *desc)
235dd4f32aeSBjoern A. Zeeb {
236dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MSDU_END_INFO2_FIRST_MSDU,
237dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_end.info2));
238dd4f32aeSBjoern A. Zeeb }
239dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_last_msdu(struct hal_rx_desc * desc)240dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_ipq8074_rx_desc_get_last_msdu(struct hal_rx_desc *desc)
241dd4f32aeSBjoern A. Zeeb {
242dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MSDU_END_INFO2_LAST_MSDU,
243dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_end.info2));
244dd4f32aeSBjoern A. Zeeb }
245dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_l3_pad_bytes(struct hal_rx_desc * desc)246dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_ipq8074_rx_desc_get_l3_pad_bytes(struct hal_rx_desc *desc)
247dd4f32aeSBjoern A. Zeeb {
248dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_END_INFO2_L3_HDR_PADDING,
249dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_end.info2));
250dd4f32aeSBjoern A. Zeeb }
251dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_hdr_status(struct hal_rx_desc * desc)252dd4f32aeSBjoern A. Zeeb static u8 *ath11k_hw_ipq8074_rx_desc_get_hdr_status(struct hal_rx_desc *desc)
253dd4f32aeSBjoern A. Zeeb {
254dd4f32aeSBjoern A. Zeeb return desc->u.ipq8074.hdr_status;
255dd4f32aeSBjoern A. Zeeb }
256dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_encrypt_valid(struct hal_rx_desc * desc)257dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_ipq8074_rx_desc_encrypt_valid(struct hal_rx_desc *desc)
258dd4f32aeSBjoern A. Zeeb {
259dd4f32aeSBjoern A. Zeeb return __le32_to_cpu(desc->u.ipq8074.mpdu_start.info1) &
260dd4f32aeSBjoern A. Zeeb RX_MPDU_START_INFO1_ENCRYPT_INFO_VALID;
261dd4f32aeSBjoern A. Zeeb }
262dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_encrypt_type(struct hal_rx_desc * desc)263dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_ipq8074_rx_desc_get_encrypt_type(struct hal_rx_desc *desc)
264dd4f32aeSBjoern A. Zeeb {
265dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MPDU_START_INFO2_ENC_TYPE,
266dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.mpdu_start.info2));
267dd4f32aeSBjoern A. Zeeb }
268dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_decap_type(struct hal_rx_desc * desc)269dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_ipq8074_rx_desc_get_decap_type(struct hal_rx_desc *desc)
270dd4f32aeSBjoern A. Zeeb {
271dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO2_DECAP_FORMAT,
272dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_start.info2));
273dd4f32aeSBjoern A. Zeeb }
274dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_mesh_ctl(struct hal_rx_desc * desc)275dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_ipq8074_rx_desc_get_mesh_ctl(struct hal_rx_desc *desc)
276dd4f32aeSBjoern A. Zeeb {
277dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO2_MESH_CTRL_PRESENT,
278dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_start.info2));
279dd4f32aeSBjoern A. Zeeb }
280dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_ldpc_support(struct hal_rx_desc * desc)281dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_ipq8074_rx_desc_get_ldpc_support(struct hal_rx_desc *desc)
282dd4f32aeSBjoern A. Zeeb {
283dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO2_LDPC,
284dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_start.info2));
285dd4f32aeSBjoern A. Zeeb }
286dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_mpdu_seq_ctl_vld(struct hal_rx_desc * desc)287dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_ipq8074_rx_desc_get_mpdu_seq_ctl_vld(struct hal_rx_desc *desc)
288dd4f32aeSBjoern A. Zeeb {
289dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MPDU_START_INFO1_MPDU_SEQ_CTRL_VALID,
290dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.mpdu_start.info1));
291dd4f32aeSBjoern A. Zeeb }
292dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_mpdu_fc_valid(struct hal_rx_desc * desc)293dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_ipq8074_rx_desc_get_mpdu_fc_valid(struct hal_rx_desc *desc)
294dd4f32aeSBjoern A. Zeeb {
295dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MPDU_START_INFO1_MPDU_FCTRL_VALID,
296dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.mpdu_start.info1));
297dd4f32aeSBjoern A. Zeeb }
298dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_mpdu_start_seq_no(struct hal_rx_desc * desc)299dd4f32aeSBjoern A. Zeeb static u16 ath11k_hw_ipq8074_rx_desc_get_mpdu_start_seq_no(struct hal_rx_desc *desc)
300dd4f32aeSBjoern A. Zeeb {
301dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MPDU_START_INFO1_MPDU_SEQ_NUM,
302dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.mpdu_start.info1));
303dd4f32aeSBjoern A. Zeeb }
304dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_msdu_len(struct hal_rx_desc * desc)305dd4f32aeSBjoern A. Zeeb static u16 ath11k_hw_ipq8074_rx_desc_get_msdu_len(struct hal_rx_desc *desc)
306dd4f32aeSBjoern A. Zeeb {
307dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO1_MSDU_LENGTH,
308dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_start.info1));
309dd4f32aeSBjoern A. Zeeb }
310dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_msdu_sgi(struct hal_rx_desc * desc)311dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_ipq8074_rx_desc_get_msdu_sgi(struct hal_rx_desc *desc)
312dd4f32aeSBjoern A. Zeeb {
313dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_SGI,
314dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_start.info3));
315dd4f32aeSBjoern A. Zeeb }
316dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_msdu_rate_mcs(struct hal_rx_desc * desc)317dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_ipq8074_rx_desc_get_msdu_rate_mcs(struct hal_rx_desc *desc)
318dd4f32aeSBjoern A. Zeeb {
319dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_RATE_MCS,
320dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_start.info3));
321dd4f32aeSBjoern A. Zeeb }
322dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_msdu_rx_bw(struct hal_rx_desc * desc)323dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_ipq8074_rx_desc_get_msdu_rx_bw(struct hal_rx_desc *desc)
324dd4f32aeSBjoern A. Zeeb {
325dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_RECV_BW,
326dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_start.info3));
327dd4f32aeSBjoern A. Zeeb }
328dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_msdu_freq(struct hal_rx_desc * desc)329dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_ipq8074_rx_desc_get_msdu_freq(struct hal_rx_desc *desc)
330dd4f32aeSBjoern A. Zeeb {
331dd4f32aeSBjoern A. Zeeb return __le32_to_cpu(desc->u.ipq8074.msdu_start.phy_meta_data);
332dd4f32aeSBjoern A. Zeeb }
333dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_msdu_pkt_type(struct hal_rx_desc * desc)334dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_ipq8074_rx_desc_get_msdu_pkt_type(struct hal_rx_desc *desc)
335dd4f32aeSBjoern A. Zeeb {
336dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_PKT_TYPE,
337dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_start.info3));
338dd4f32aeSBjoern A. Zeeb }
339dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_msdu_nss(struct hal_rx_desc * desc)340dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_ipq8074_rx_desc_get_msdu_nss(struct hal_rx_desc *desc)
341dd4f32aeSBjoern A. Zeeb {
342dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_MIMO_SS_BITMAP,
343dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.msdu_start.info3));
344dd4f32aeSBjoern A. Zeeb }
345dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_mpdu_tid(struct hal_rx_desc * desc)346dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_ipq8074_rx_desc_get_mpdu_tid(struct hal_rx_desc *desc)
347dd4f32aeSBjoern A. Zeeb {
348dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MPDU_START_INFO2_TID,
349dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.mpdu_start.info2));
350dd4f32aeSBjoern A. Zeeb }
351dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_mpdu_peer_id(struct hal_rx_desc * desc)352dd4f32aeSBjoern A. Zeeb static u16 ath11k_hw_ipq8074_rx_desc_get_mpdu_peer_id(struct hal_rx_desc *desc)
353dd4f32aeSBjoern A. Zeeb {
354dd4f32aeSBjoern A. Zeeb return __le16_to_cpu(desc->u.ipq8074.mpdu_start.sw_peer_id);
355dd4f32aeSBjoern A. Zeeb }
356dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_copy_attn_end(struct hal_rx_desc * fdesc,struct hal_rx_desc * ldesc)357dd4f32aeSBjoern A. Zeeb static void ath11k_hw_ipq8074_rx_desc_copy_attn_end(struct hal_rx_desc *fdesc,
358dd4f32aeSBjoern A. Zeeb struct hal_rx_desc *ldesc)
359dd4f32aeSBjoern A. Zeeb {
360dd4f32aeSBjoern A. Zeeb memcpy((u8 *)&fdesc->u.ipq8074.msdu_end, (u8 *)&ldesc->u.ipq8074.msdu_end,
361dd4f32aeSBjoern A. Zeeb sizeof(struct rx_msdu_end_ipq8074));
362dd4f32aeSBjoern A. Zeeb memcpy((u8 *)&fdesc->u.ipq8074.attention, (u8 *)&ldesc->u.ipq8074.attention,
363dd4f32aeSBjoern A. Zeeb sizeof(struct rx_attention));
364dd4f32aeSBjoern A. Zeeb memcpy((u8 *)&fdesc->u.ipq8074.mpdu_end, (u8 *)&ldesc->u.ipq8074.mpdu_end,
365dd4f32aeSBjoern A. Zeeb sizeof(struct rx_mpdu_end));
366dd4f32aeSBjoern A. Zeeb }
367dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_mpdu_start_tag(struct hal_rx_desc * desc)368dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_ipq8074_rx_desc_get_mpdu_start_tag(struct hal_rx_desc *desc)
369dd4f32aeSBjoern A. Zeeb {
370dd4f32aeSBjoern A. Zeeb return FIELD_GET(HAL_TLV_HDR_TAG,
371dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.ipq8074.mpdu_start_tag));
372dd4f32aeSBjoern A. Zeeb }
373dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_mpdu_ppdu_id(struct hal_rx_desc * desc)374dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_ipq8074_rx_desc_get_mpdu_ppdu_id(struct hal_rx_desc *desc)
375dd4f32aeSBjoern A. Zeeb {
376dd4f32aeSBjoern A. Zeeb return __le16_to_cpu(desc->u.ipq8074.mpdu_start.phy_ppdu_id);
377dd4f32aeSBjoern A. Zeeb }
378dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_set_msdu_len(struct hal_rx_desc * desc,u16 len)379dd4f32aeSBjoern A. Zeeb static void ath11k_hw_ipq8074_rx_desc_set_msdu_len(struct hal_rx_desc *desc, u16 len)
380dd4f32aeSBjoern A. Zeeb {
381dd4f32aeSBjoern A. Zeeb u32 info = __le32_to_cpu(desc->u.ipq8074.msdu_start.info1);
382dd4f32aeSBjoern A. Zeeb
383dd4f32aeSBjoern A. Zeeb info &= ~RX_MSDU_START_INFO1_MSDU_LENGTH;
384dd4f32aeSBjoern A. Zeeb info |= FIELD_PREP(RX_MSDU_START_INFO1_MSDU_LENGTH, len);
385dd4f32aeSBjoern A. Zeeb
386dd4f32aeSBjoern A. Zeeb desc->u.ipq8074.msdu_start.info1 = __cpu_to_le32(info);
387dd4f32aeSBjoern A. Zeeb }
388dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_mac_addr2_valid(struct hal_rx_desc * desc)389dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_ipq8074_rx_desc_mac_addr2_valid(struct hal_rx_desc *desc)
390dd4f32aeSBjoern A. Zeeb {
391dd4f32aeSBjoern A. Zeeb return __le32_to_cpu(desc->u.ipq8074.mpdu_start.info1) &
392dd4f32aeSBjoern A. Zeeb RX_MPDU_START_INFO1_MAC_ADDR2_VALID;
393dd4f32aeSBjoern A. Zeeb }
394dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_mpdu_start_addr2(struct hal_rx_desc * desc)395dd4f32aeSBjoern A. Zeeb static u8 *ath11k_hw_ipq8074_rx_desc_mpdu_start_addr2(struct hal_rx_desc *desc)
396dd4f32aeSBjoern A. Zeeb {
397dd4f32aeSBjoern A. Zeeb return desc->u.ipq8074.mpdu_start.addr2;
398dd4f32aeSBjoern A. Zeeb }
399dd4f32aeSBjoern A. Zeeb
400dd4f32aeSBjoern A. Zeeb static
ath11k_hw_ipq8074_rx_desc_get_attention(struct hal_rx_desc * desc)401dd4f32aeSBjoern A. Zeeb struct rx_attention *ath11k_hw_ipq8074_rx_desc_get_attention(struct hal_rx_desc *desc)
402dd4f32aeSBjoern A. Zeeb {
403dd4f32aeSBjoern A. Zeeb return &desc->u.ipq8074.attention;
404dd4f32aeSBjoern A. Zeeb }
405dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq8074_rx_desc_get_msdu_payload(struct hal_rx_desc * desc)406dd4f32aeSBjoern A. Zeeb static u8 *ath11k_hw_ipq8074_rx_desc_get_msdu_payload(struct hal_rx_desc *desc)
407dd4f32aeSBjoern A. Zeeb {
408dd4f32aeSBjoern A. Zeeb return &desc->u.ipq8074.msdu_payload[0];
409dd4f32aeSBjoern A. Zeeb }
410dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_first_msdu(struct hal_rx_desc * desc)411dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_qcn9074_rx_desc_get_first_msdu(struct hal_rx_desc *desc)
412dd4f32aeSBjoern A. Zeeb {
413dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MSDU_END_INFO4_FIRST_MSDU,
414dd4f32aeSBjoern A. Zeeb __le16_to_cpu(desc->u.qcn9074.msdu_end.info4));
415dd4f32aeSBjoern A. Zeeb }
416dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_last_msdu(struct hal_rx_desc * desc)417dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_qcn9074_rx_desc_get_last_msdu(struct hal_rx_desc *desc)
418dd4f32aeSBjoern A. Zeeb {
419dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MSDU_END_INFO4_LAST_MSDU,
420dd4f32aeSBjoern A. Zeeb __le16_to_cpu(desc->u.qcn9074.msdu_end.info4));
421dd4f32aeSBjoern A. Zeeb }
422dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_l3_pad_bytes(struct hal_rx_desc * desc)423dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_qcn9074_rx_desc_get_l3_pad_bytes(struct hal_rx_desc *desc)
424dd4f32aeSBjoern A. Zeeb {
425dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_END_INFO4_L3_HDR_PADDING,
426dd4f32aeSBjoern A. Zeeb __le16_to_cpu(desc->u.qcn9074.msdu_end.info4));
427dd4f32aeSBjoern A. Zeeb }
428dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_hdr_status(struct hal_rx_desc * desc)429dd4f32aeSBjoern A. Zeeb static u8 *ath11k_hw_qcn9074_rx_desc_get_hdr_status(struct hal_rx_desc *desc)
430dd4f32aeSBjoern A. Zeeb {
431dd4f32aeSBjoern A. Zeeb return desc->u.qcn9074.hdr_status;
432dd4f32aeSBjoern A. Zeeb }
433dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_encrypt_valid(struct hal_rx_desc * desc)434dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_qcn9074_rx_desc_encrypt_valid(struct hal_rx_desc *desc)
435dd4f32aeSBjoern A. Zeeb {
436dd4f32aeSBjoern A. Zeeb return __le32_to_cpu(desc->u.qcn9074.mpdu_start.info11) &
437dd4f32aeSBjoern A. Zeeb RX_MPDU_START_INFO11_ENCRYPT_INFO_VALID;
438dd4f32aeSBjoern A. Zeeb }
439dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_encrypt_type(struct hal_rx_desc * desc)440dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_qcn9074_rx_desc_get_encrypt_type(struct hal_rx_desc *desc)
441dd4f32aeSBjoern A. Zeeb {
442dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MPDU_START_INFO9_ENC_TYPE,
443dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.mpdu_start.info9));
444dd4f32aeSBjoern A. Zeeb }
445dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_decap_type(struct hal_rx_desc * desc)446dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_qcn9074_rx_desc_get_decap_type(struct hal_rx_desc *desc)
447dd4f32aeSBjoern A. Zeeb {
448dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO2_DECAP_FORMAT,
449dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.msdu_start.info2));
450dd4f32aeSBjoern A. Zeeb }
451dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_mesh_ctl(struct hal_rx_desc * desc)452dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_qcn9074_rx_desc_get_mesh_ctl(struct hal_rx_desc *desc)
453dd4f32aeSBjoern A. Zeeb {
454dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO2_MESH_CTRL_PRESENT,
455dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.msdu_start.info2));
456dd4f32aeSBjoern A. Zeeb }
457dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_ldpc_support(struct hal_rx_desc * desc)458dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_qcn9074_rx_desc_get_ldpc_support(struct hal_rx_desc *desc)
459dd4f32aeSBjoern A. Zeeb {
460dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO2_LDPC,
461dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.msdu_start.info2));
462dd4f32aeSBjoern A. Zeeb }
463dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_mpdu_seq_ctl_vld(struct hal_rx_desc * desc)464dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_qcn9074_rx_desc_get_mpdu_seq_ctl_vld(struct hal_rx_desc *desc)
465dd4f32aeSBjoern A. Zeeb {
466dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MPDU_START_INFO11_MPDU_SEQ_CTRL_VALID,
467dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.mpdu_start.info11));
468dd4f32aeSBjoern A. Zeeb }
469dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_mpdu_fc_valid(struct hal_rx_desc * desc)470dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_qcn9074_rx_desc_get_mpdu_fc_valid(struct hal_rx_desc *desc)
471dd4f32aeSBjoern A. Zeeb {
472dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MPDU_START_INFO11_MPDU_FCTRL_VALID,
473dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.mpdu_start.info11));
474dd4f32aeSBjoern A. Zeeb }
475dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_mpdu_start_seq_no(struct hal_rx_desc * desc)476dd4f32aeSBjoern A. Zeeb static u16 ath11k_hw_qcn9074_rx_desc_get_mpdu_start_seq_no(struct hal_rx_desc *desc)
477dd4f32aeSBjoern A. Zeeb {
478dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MPDU_START_INFO11_MPDU_SEQ_NUM,
479dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.mpdu_start.info11));
480dd4f32aeSBjoern A. Zeeb }
481dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_msdu_len(struct hal_rx_desc * desc)482dd4f32aeSBjoern A. Zeeb static u16 ath11k_hw_qcn9074_rx_desc_get_msdu_len(struct hal_rx_desc *desc)
483dd4f32aeSBjoern A. Zeeb {
484dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO1_MSDU_LENGTH,
485dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.msdu_start.info1));
486dd4f32aeSBjoern A. Zeeb }
487dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_msdu_sgi(struct hal_rx_desc * desc)488dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_qcn9074_rx_desc_get_msdu_sgi(struct hal_rx_desc *desc)
489dd4f32aeSBjoern A. Zeeb {
490dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_SGI,
491dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.msdu_start.info3));
492dd4f32aeSBjoern A. Zeeb }
493dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_msdu_rate_mcs(struct hal_rx_desc * desc)494dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_qcn9074_rx_desc_get_msdu_rate_mcs(struct hal_rx_desc *desc)
495dd4f32aeSBjoern A. Zeeb {
496dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_RATE_MCS,
497dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.msdu_start.info3));
498dd4f32aeSBjoern A. Zeeb }
499dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_msdu_rx_bw(struct hal_rx_desc * desc)500dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_qcn9074_rx_desc_get_msdu_rx_bw(struct hal_rx_desc *desc)
501dd4f32aeSBjoern A. Zeeb {
502dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_RECV_BW,
503dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.msdu_start.info3));
504dd4f32aeSBjoern A. Zeeb }
505dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_msdu_freq(struct hal_rx_desc * desc)506dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_qcn9074_rx_desc_get_msdu_freq(struct hal_rx_desc *desc)
507dd4f32aeSBjoern A. Zeeb {
508dd4f32aeSBjoern A. Zeeb return __le32_to_cpu(desc->u.qcn9074.msdu_start.phy_meta_data);
509dd4f32aeSBjoern A. Zeeb }
510dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_msdu_pkt_type(struct hal_rx_desc * desc)511dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_qcn9074_rx_desc_get_msdu_pkt_type(struct hal_rx_desc *desc)
512dd4f32aeSBjoern A. Zeeb {
513dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_PKT_TYPE,
514dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.msdu_start.info3));
515dd4f32aeSBjoern A. Zeeb }
516dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_msdu_nss(struct hal_rx_desc * desc)517dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_qcn9074_rx_desc_get_msdu_nss(struct hal_rx_desc *desc)
518dd4f32aeSBjoern A. Zeeb {
519dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_MIMO_SS_BITMAP,
520dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.msdu_start.info3));
521dd4f32aeSBjoern A. Zeeb }
522dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_mpdu_tid(struct hal_rx_desc * desc)523dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_qcn9074_rx_desc_get_mpdu_tid(struct hal_rx_desc *desc)
524dd4f32aeSBjoern A. Zeeb {
525dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MPDU_START_INFO9_TID,
526dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.mpdu_start.info9));
527dd4f32aeSBjoern A. Zeeb }
528dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_mpdu_peer_id(struct hal_rx_desc * desc)529dd4f32aeSBjoern A. Zeeb static u16 ath11k_hw_qcn9074_rx_desc_get_mpdu_peer_id(struct hal_rx_desc *desc)
530dd4f32aeSBjoern A. Zeeb {
531dd4f32aeSBjoern A. Zeeb return __le16_to_cpu(desc->u.qcn9074.mpdu_start.sw_peer_id);
532dd4f32aeSBjoern A. Zeeb }
533dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_copy_attn_end(struct hal_rx_desc * fdesc,struct hal_rx_desc * ldesc)534dd4f32aeSBjoern A. Zeeb static void ath11k_hw_qcn9074_rx_desc_copy_attn_end(struct hal_rx_desc *fdesc,
535dd4f32aeSBjoern A. Zeeb struct hal_rx_desc *ldesc)
536dd4f32aeSBjoern A. Zeeb {
537dd4f32aeSBjoern A. Zeeb memcpy((u8 *)&fdesc->u.qcn9074.msdu_end, (u8 *)&ldesc->u.qcn9074.msdu_end,
538dd4f32aeSBjoern A. Zeeb sizeof(struct rx_msdu_end_qcn9074));
539dd4f32aeSBjoern A. Zeeb memcpy((u8 *)&fdesc->u.qcn9074.attention, (u8 *)&ldesc->u.qcn9074.attention,
540dd4f32aeSBjoern A. Zeeb sizeof(struct rx_attention));
541dd4f32aeSBjoern A. Zeeb memcpy((u8 *)&fdesc->u.qcn9074.mpdu_end, (u8 *)&ldesc->u.qcn9074.mpdu_end,
542dd4f32aeSBjoern A. Zeeb sizeof(struct rx_mpdu_end));
543dd4f32aeSBjoern A. Zeeb }
544dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_mpdu_start_tag(struct hal_rx_desc * desc)545dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_qcn9074_rx_desc_get_mpdu_start_tag(struct hal_rx_desc *desc)
546dd4f32aeSBjoern A. Zeeb {
547dd4f32aeSBjoern A. Zeeb return FIELD_GET(HAL_TLV_HDR_TAG,
548dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.qcn9074.mpdu_start_tag));
549dd4f32aeSBjoern A. Zeeb }
550dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_mpdu_ppdu_id(struct hal_rx_desc * desc)551dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_qcn9074_rx_desc_get_mpdu_ppdu_id(struct hal_rx_desc *desc)
552dd4f32aeSBjoern A. Zeeb {
553dd4f32aeSBjoern A. Zeeb return __le16_to_cpu(desc->u.qcn9074.mpdu_start.phy_ppdu_id);
554dd4f32aeSBjoern A. Zeeb }
555dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_set_msdu_len(struct hal_rx_desc * desc,u16 len)556dd4f32aeSBjoern A. Zeeb static void ath11k_hw_qcn9074_rx_desc_set_msdu_len(struct hal_rx_desc *desc, u16 len)
557dd4f32aeSBjoern A. Zeeb {
558dd4f32aeSBjoern A. Zeeb u32 info = __le32_to_cpu(desc->u.qcn9074.msdu_start.info1);
559dd4f32aeSBjoern A. Zeeb
560dd4f32aeSBjoern A. Zeeb info &= ~RX_MSDU_START_INFO1_MSDU_LENGTH;
561dd4f32aeSBjoern A. Zeeb info |= FIELD_PREP(RX_MSDU_START_INFO1_MSDU_LENGTH, len);
562dd4f32aeSBjoern A. Zeeb
563dd4f32aeSBjoern A. Zeeb desc->u.qcn9074.msdu_start.info1 = __cpu_to_le32(info);
564dd4f32aeSBjoern A. Zeeb }
565dd4f32aeSBjoern A. Zeeb
566dd4f32aeSBjoern A. Zeeb static
ath11k_hw_qcn9074_rx_desc_get_attention(struct hal_rx_desc * desc)567dd4f32aeSBjoern A. Zeeb struct rx_attention *ath11k_hw_qcn9074_rx_desc_get_attention(struct hal_rx_desc *desc)
568dd4f32aeSBjoern A. Zeeb {
569dd4f32aeSBjoern A. Zeeb return &desc->u.qcn9074.attention;
570dd4f32aeSBjoern A. Zeeb }
571dd4f32aeSBjoern A. Zeeb
ath11k_hw_qcn9074_rx_desc_get_msdu_payload(struct hal_rx_desc * desc)572dd4f32aeSBjoern A. Zeeb static u8 *ath11k_hw_qcn9074_rx_desc_get_msdu_payload(struct hal_rx_desc *desc)
573dd4f32aeSBjoern A. Zeeb {
574dd4f32aeSBjoern A. Zeeb return &desc->u.qcn9074.msdu_payload[0];
575dd4f32aeSBjoern A. Zeeb }
576dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq9074_rx_desc_mac_addr2_valid(struct hal_rx_desc * desc)577dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_ipq9074_rx_desc_mac_addr2_valid(struct hal_rx_desc *desc)
578dd4f32aeSBjoern A. Zeeb {
579dd4f32aeSBjoern A. Zeeb return __le32_to_cpu(desc->u.qcn9074.mpdu_start.info11) &
580dd4f32aeSBjoern A. Zeeb RX_MPDU_START_INFO11_MAC_ADDR2_VALID;
581dd4f32aeSBjoern A. Zeeb }
582dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq9074_rx_desc_mpdu_start_addr2(struct hal_rx_desc * desc)583dd4f32aeSBjoern A. Zeeb static u8 *ath11k_hw_ipq9074_rx_desc_mpdu_start_addr2(struct hal_rx_desc *desc)
584dd4f32aeSBjoern A. Zeeb {
585dd4f32aeSBjoern A. Zeeb return desc->u.qcn9074.mpdu_start.addr2;
586dd4f32aeSBjoern A. Zeeb }
587dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_first_msdu(struct hal_rx_desc * desc)588dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_wcn6855_rx_desc_get_first_msdu(struct hal_rx_desc *desc)
589dd4f32aeSBjoern A. Zeeb {
590dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MSDU_END_INFO2_FIRST_MSDU_WCN6855,
591dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_end.info2));
592dd4f32aeSBjoern A. Zeeb }
593dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_last_msdu(struct hal_rx_desc * desc)594dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_wcn6855_rx_desc_get_last_msdu(struct hal_rx_desc *desc)
595dd4f32aeSBjoern A. Zeeb {
596dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MSDU_END_INFO2_LAST_MSDU_WCN6855,
597dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_end.info2));
598dd4f32aeSBjoern A. Zeeb }
599dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_l3_pad_bytes(struct hal_rx_desc * desc)600dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_wcn6855_rx_desc_get_l3_pad_bytes(struct hal_rx_desc *desc)
601dd4f32aeSBjoern A. Zeeb {
602dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_END_INFO2_L3_HDR_PADDING,
603dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_end.info2));
604dd4f32aeSBjoern A. Zeeb }
605dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_hdr_status(struct hal_rx_desc * desc)606dd4f32aeSBjoern A. Zeeb static u8 *ath11k_hw_wcn6855_rx_desc_get_hdr_status(struct hal_rx_desc *desc)
607dd4f32aeSBjoern A. Zeeb {
608dd4f32aeSBjoern A. Zeeb return desc->u.wcn6855.hdr_status;
609dd4f32aeSBjoern A. Zeeb }
610dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_encrypt_valid(struct hal_rx_desc * desc)611dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_wcn6855_rx_desc_encrypt_valid(struct hal_rx_desc *desc)
612dd4f32aeSBjoern A. Zeeb {
613dd4f32aeSBjoern A. Zeeb return __le32_to_cpu(desc->u.wcn6855.mpdu_start.info1) &
614dd4f32aeSBjoern A. Zeeb RX_MPDU_START_INFO1_ENCRYPT_INFO_VALID;
615dd4f32aeSBjoern A. Zeeb }
616dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_encrypt_type(struct hal_rx_desc * desc)617dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_wcn6855_rx_desc_get_encrypt_type(struct hal_rx_desc *desc)
618dd4f32aeSBjoern A. Zeeb {
619dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MPDU_START_INFO2_ENC_TYPE,
620dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.mpdu_start.info2));
621dd4f32aeSBjoern A. Zeeb }
622dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_decap_type(struct hal_rx_desc * desc)623dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_wcn6855_rx_desc_get_decap_type(struct hal_rx_desc *desc)
624dd4f32aeSBjoern A. Zeeb {
625dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO2_DECAP_FORMAT,
626dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_start.info2));
627dd4f32aeSBjoern A. Zeeb }
628dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_mesh_ctl(struct hal_rx_desc * desc)629dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_wcn6855_rx_desc_get_mesh_ctl(struct hal_rx_desc *desc)
630dd4f32aeSBjoern A. Zeeb {
631dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO2_MESH_CTRL_PRESENT,
632dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_start.info2));
633dd4f32aeSBjoern A. Zeeb }
634dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_mpdu_seq_ctl_vld(struct hal_rx_desc * desc)635dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_wcn6855_rx_desc_get_mpdu_seq_ctl_vld(struct hal_rx_desc *desc)
636dd4f32aeSBjoern A. Zeeb {
637dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MPDU_START_INFO1_MPDU_SEQ_CTRL_VALID,
638dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.mpdu_start.info1));
639dd4f32aeSBjoern A. Zeeb }
640dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_mpdu_fc_valid(struct hal_rx_desc * desc)641dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_wcn6855_rx_desc_get_mpdu_fc_valid(struct hal_rx_desc *desc)
642dd4f32aeSBjoern A. Zeeb {
643dd4f32aeSBjoern A. Zeeb return !!FIELD_GET(RX_MPDU_START_INFO1_MPDU_FCTRL_VALID,
644dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.mpdu_start.info1));
645dd4f32aeSBjoern A. Zeeb }
646dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_mpdu_start_seq_no(struct hal_rx_desc * desc)647dd4f32aeSBjoern A. Zeeb static u16 ath11k_hw_wcn6855_rx_desc_get_mpdu_start_seq_no(struct hal_rx_desc *desc)
648dd4f32aeSBjoern A. Zeeb {
649dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MPDU_START_INFO1_MPDU_SEQ_NUM,
650dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.mpdu_start.info1));
651dd4f32aeSBjoern A. Zeeb }
652dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_msdu_len(struct hal_rx_desc * desc)653dd4f32aeSBjoern A. Zeeb static u16 ath11k_hw_wcn6855_rx_desc_get_msdu_len(struct hal_rx_desc *desc)
654dd4f32aeSBjoern A. Zeeb {
655dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO1_MSDU_LENGTH,
656dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_start.info1));
657dd4f32aeSBjoern A. Zeeb }
658dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_msdu_sgi(struct hal_rx_desc * desc)659dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_wcn6855_rx_desc_get_msdu_sgi(struct hal_rx_desc *desc)
660dd4f32aeSBjoern A. Zeeb {
661dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_SGI,
662dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_start.info3));
663dd4f32aeSBjoern A. Zeeb }
664dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_msdu_rate_mcs(struct hal_rx_desc * desc)665dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_wcn6855_rx_desc_get_msdu_rate_mcs(struct hal_rx_desc *desc)
666dd4f32aeSBjoern A. Zeeb {
667dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_RATE_MCS,
668dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_start.info3));
669dd4f32aeSBjoern A. Zeeb }
670dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_msdu_rx_bw(struct hal_rx_desc * desc)671dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_wcn6855_rx_desc_get_msdu_rx_bw(struct hal_rx_desc *desc)
672dd4f32aeSBjoern A. Zeeb {
673dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_RECV_BW,
674dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_start.info3));
675dd4f32aeSBjoern A. Zeeb }
676dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_msdu_freq(struct hal_rx_desc * desc)677dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_wcn6855_rx_desc_get_msdu_freq(struct hal_rx_desc *desc)
678dd4f32aeSBjoern A. Zeeb {
679dd4f32aeSBjoern A. Zeeb return __le32_to_cpu(desc->u.wcn6855.msdu_start.phy_meta_data);
680dd4f32aeSBjoern A. Zeeb }
681dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_msdu_pkt_type(struct hal_rx_desc * desc)682dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_wcn6855_rx_desc_get_msdu_pkt_type(struct hal_rx_desc *desc)
683dd4f32aeSBjoern A. Zeeb {
684dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_PKT_TYPE,
685dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_start.info3));
686dd4f32aeSBjoern A. Zeeb }
687dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_msdu_nss(struct hal_rx_desc * desc)688dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_wcn6855_rx_desc_get_msdu_nss(struct hal_rx_desc *desc)
689dd4f32aeSBjoern A. Zeeb {
690dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO3_MIMO_SS_BITMAP,
691dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_start.info3));
692dd4f32aeSBjoern A. Zeeb }
693dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_mpdu_tid(struct hal_rx_desc * desc)694dd4f32aeSBjoern A. Zeeb static u8 ath11k_hw_wcn6855_rx_desc_get_mpdu_tid(struct hal_rx_desc *desc)
695dd4f32aeSBjoern A. Zeeb {
696dd4f32aeSBjoern A. Zeeb return FIELD_GET(RX_MPDU_START_INFO2_TID_WCN6855,
697dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.mpdu_start.info2));
698dd4f32aeSBjoern A. Zeeb }
699dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_mpdu_peer_id(struct hal_rx_desc * desc)700dd4f32aeSBjoern A. Zeeb static u16 ath11k_hw_wcn6855_rx_desc_get_mpdu_peer_id(struct hal_rx_desc *desc)
701dd4f32aeSBjoern A. Zeeb {
702dd4f32aeSBjoern A. Zeeb return __le16_to_cpu(desc->u.wcn6855.mpdu_start.sw_peer_id);
703dd4f32aeSBjoern A. Zeeb }
704dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_copy_attn_end(struct hal_rx_desc * fdesc,struct hal_rx_desc * ldesc)705dd4f32aeSBjoern A. Zeeb static void ath11k_hw_wcn6855_rx_desc_copy_attn_end(struct hal_rx_desc *fdesc,
706dd4f32aeSBjoern A. Zeeb struct hal_rx_desc *ldesc)
707dd4f32aeSBjoern A. Zeeb {
708dd4f32aeSBjoern A. Zeeb memcpy((u8 *)&fdesc->u.wcn6855.msdu_end, (u8 *)&ldesc->u.wcn6855.msdu_end,
709dd4f32aeSBjoern A. Zeeb sizeof(struct rx_msdu_end_wcn6855));
710dd4f32aeSBjoern A. Zeeb memcpy((u8 *)&fdesc->u.wcn6855.attention, (u8 *)&ldesc->u.wcn6855.attention,
711dd4f32aeSBjoern A. Zeeb sizeof(struct rx_attention));
712dd4f32aeSBjoern A. Zeeb memcpy((u8 *)&fdesc->u.wcn6855.mpdu_end, (u8 *)&ldesc->u.wcn6855.mpdu_end,
713dd4f32aeSBjoern A. Zeeb sizeof(struct rx_mpdu_end));
714dd4f32aeSBjoern A. Zeeb }
715dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_mpdu_start_tag(struct hal_rx_desc * desc)716dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_wcn6855_rx_desc_get_mpdu_start_tag(struct hal_rx_desc *desc)
717dd4f32aeSBjoern A. Zeeb {
718dd4f32aeSBjoern A. Zeeb return FIELD_GET(HAL_TLV_HDR_TAG,
719dd4f32aeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.mpdu_start_tag));
720dd4f32aeSBjoern A. Zeeb }
721dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_mpdu_ppdu_id(struct hal_rx_desc * desc)722dd4f32aeSBjoern A. Zeeb static u32 ath11k_hw_wcn6855_rx_desc_get_mpdu_ppdu_id(struct hal_rx_desc *desc)
723dd4f32aeSBjoern A. Zeeb {
724dd4f32aeSBjoern A. Zeeb return __le16_to_cpu(desc->u.wcn6855.mpdu_start.phy_ppdu_id);
725dd4f32aeSBjoern A. Zeeb }
726dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_set_msdu_len(struct hal_rx_desc * desc,u16 len)727dd4f32aeSBjoern A. Zeeb static void ath11k_hw_wcn6855_rx_desc_set_msdu_len(struct hal_rx_desc *desc, u16 len)
728dd4f32aeSBjoern A. Zeeb {
729dd4f32aeSBjoern A. Zeeb u32 info = __le32_to_cpu(desc->u.wcn6855.msdu_start.info1);
730dd4f32aeSBjoern A. Zeeb
731dd4f32aeSBjoern A. Zeeb info &= ~RX_MSDU_START_INFO1_MSDU_LENGTH;
732dd4f32aeSBjoern A. Zeeb info |= FIELD_PREP(RX_MSDU_START_INFO1_MSDU_LENGTH, len);
733dd4f32aeSBjoern A. Zeeb
734dd4f32aeSBjoern A. Zeeb desc->u.wcn6855.msdu_start.info1 = __cpu_to_le32(info);
735dd4f32aeSBjoern A. Zeeb }
736dd4f32aeSBjoern A. Zeeb
737dd4f32aeSBjoern A. Zeeb static
ath11k_hw_wcn6855_rx_desc_get_attention(struct hal_rx_desc * desc)738dd4f32aeSBjoern A. Zeeb struct rx_attention *ath11k_hw_wcn6855_rx_desc_get_attention(struct hal_rx_desc *desc)
739dd4f32aeSBjoern A. Zeeb {
740dd4f32aeSBjoern A. Zeeb return &desc->u.wcn6855.attention;
741dd4f32aeSBjoern A. Zeeb }
742dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_msdu_payload(struct hal_rx_desc * desc)743dd4f32aeSBjoern A. Zeeb static u8 *ath11k_hw_wcn6855_rx_desc_get_msdu_payload(struct hal_rx_desc *desc)
744dd4f32aeSBjoern A. Zeeb {
745dd4f32aeSBjoern A. Zeeb return &desc->u.wcn6855.msdu_payload[0];
746dd4f32aeSBjoern A. Zeeb }
747dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_mac_addr2_valid(struct hal_rx_desc * desc)748dd4f32aeSBjoern A. Zeeb static bool ath11k_hw_wcn6855_rx_desc_mac_addr2_valid(struct hal_rx_desc *desc)
749dd4f32aeSBjoern A. Zeeb {
750dd4f32aeSBjoern A. Zeeb return __le32_to_cpu(desc->u.wcn6855.mpdu_start.info1) &
751dd4f32aeSBjoern A. Zeeb RX_MPDU_START_INFO1_MAC_ADDR2_VALID;
752dd4f32aeSBjoern A. Zeeb }
753dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_mpdu_start_addr2(struct hal_rx_desc * desc)754dd4f32aeSBjoern A. Zeeb static u8 *ath11k_hw_wcn6855_rx_desc_mpdu_start_addr2(struct hal_rx_desc *desc)
755dd4f32aeSBjoern A. Zeeb {
756dd4f32aeSBjoern A. Zeeb return desc->u.wcn6855.mpdu_start.addr2;
757dd4f32aeSBjoern A. Zeeb }
758dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_reo_setup(struct ath11k_base * ab)759dd4f32aeSBjoern A. Zeeb static void ath11k_hw_wcn6855_reo_setup(struct ath11k_base *ab)
760dd4f32aeSBjoern A. Zeeb {
761dd4f32aeSBjoern A. Zeeb u32 reo_base = HAL_SEQ_WCSS_UMAC_REO_REG;
762dd4f32aeSBjoern A. Zeeb u32 val;
763dd4f32aeSBjoern A. Zeeb /* Each hash entry uses four bits to map to a particular ring. */
764dd4f32aeSBjoern A. Zeeb u32 ring_hash_map = HAL_HASH_ROUTING_RING_SW1 << 0 |
765dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW2 << 4 |
766dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW3 << 8 |
767dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW4 << 12 |
768dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW1 << 16 |
769dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW2 << 20 |
770dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW3 << 24 |
771dd4f32aeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW4 << 28;
772dd4f32aeSBjoern A. Zeeb
773dd4f32aeSBjoern A. Zeeb val = ath11k_hif_read32(ab, reo_base + HAL_REO1_GEN_ENABLE);
774dd4f32aeSBjoern A. Zeeb val |= FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_LIST_ENABLE, 1) |
775dd4f32aeSBjoern A. Zeeb FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_FLUSH_ENABLE, 1);
776dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_GEN_ENABLE, val);
777dd4f32aeSBjoern A. Zeeb
778*28348caeSBjoern A. Zeeb val = ath11k_hif_read32(ab, reo_base + HAL_REO1_MISC_CTL(ab));
779dd4f32aeSBjoern A. Zeeb val &= ~HAL_REO1_MISC_CTL_FRAGMENT_DST_RING;
780dd4f32aeSBjoern A. Zeeb val |= FIELD_PREP(HAL_REO1_MISC_CTL_FRAGMENT_DST_RING, HAL_SRNG_RING_ID_REO2SW1);
781*28348caeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_MISC_CTL(ab), val);
782dd4f32aeSBjoern A. Zeeb
783dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_0(ab),
784dd4f32aeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
785dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_1(ab),
786dd4f32aeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
787dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_2(ab),
788dd4f32aeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
789dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_3(ab),
790dd4f32aeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
791dd4f32aeSBjoern A. Zeeb
792dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_2,
793dd4f32aeSBjoern A. Zeeb ring_hash_map);
794dd4f32aeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_3,
795dd4f32aeSBjoern A. Zeeb ring_hash_map);
796dd4f32aeSBjoern A. Zeeb }
797dd4f32aeSBjoern A. Zeeb
ath11k_hw_ipq5018_reo_setup(struct ath11k_base * ab)798*28348caeSBjoern A. Zeeb static void ath11k_hw_ipq5018_reo_setup(struct ath11k_base *ab)
799*28348caeSBjoern A. Zeeb {
800*28348caeSBjoern A. Zeeb u32 reo_base = HAL_SEQ_WCSS_UMAC_REO_REG;
801*28348caeSBjoern A. Zeeb u32 val;
802*28348caeSBjoern A. Zeeb
803*28348caeSBjoern A. Zeeb /* Each hash entry uses three bits to map to a particular ring. */
804*28348caeSBjoern A. Zeeb u32 ring_hash_map = HAL_HASH_ROUTING_RING_SW1 << 0 |
805*28348caeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW2 << 4 |
806*28348caeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW3 << 8 |
807*28348caeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW4 << 12 |
808*28348caeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW1 << 16 |
809*28348caeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW2 << 20 |
810*28348caeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW3 << 24 |
811*28348caeSBjoern A. Zeeb HAL_HASH_ROUTING_RING_SW4 << 28;
812*28348caeSBjoern A. Zeeb
813*28348caeSBjoern A. Zeeb val = ath11k_hif_read32(ab, reo_base + HAL_REO1_GEN_ENABLE);
814*28348caeSBjoern A. Zeeb
815*28348caeSBjoern A. Zeeb val &= ~HAL_REO1_GEN_ENABLE_FRAG_DST_RING;
816*28348caeSBjoern A. Zeeb val |= FIELD_PREP(HAL_REO1_GEN_ENABLE_FRAG_DST_RING,
817*28348caeSBjoern A. Zeeb HAL_SRNG_RING_ID_REO2SW1) |
818*28348caeSBjoern A. Zeeb FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_LIST_ENABLE, 1) |
819*28348caeSBjoern A. Zeeb FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_FLUSH_ENABLE, 1);
820*28348caeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_GEN_ENABLE, val);
821*28348caeSBjoern A. Zeeb
822*28348caeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_0(ab),
823*28348caeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
824*28348caeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_1(ab),
825*28348caeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
826*28348caeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_2(ab),
827*28348caeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
828*28348caeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_3(ab),
829*28348caeSBjoern A. Zeeb HAL_DEFAULT_REO_TIMEOUT_USEC);
830*28348caeSBjoern A. Zeeb
831*28348caeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_0,
832*28348caeSBjoern A. Zeeb ring_hash_map);
833*28348caeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_1,
834*28348caeSBjoern A. Zeeb ring_hash_map);
835*28348caeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_2,
836*28348caeSBjoern A. Zeeb ring_hash_map);
837*28348caeSBjoern A. Zeeb ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_3,
838*28348caeSBjoern A. Zeeb ring_hash_map);
839*28348caeSBjoern A. Zeeb }
840*28348caeSBjoern A. Zeeb
841*28348caeSBjoern A. Zeeb static u16
ath11k_hw_ipq8074_mpdu_info_get_peerid(struct hal_rx_mpdu_info * mpdu_info)842*28348caeSBjoern A. Zeeb ath11k_hw_ipq8074_mpdu_info_get_peerid(struct hal_rx_mpdu_info *mpdu_info)
843dd4f32aeSBjoern A. Zeeb {
844dd4f32aeSBjoern A. Zeeb u16 peer_id = 0;
845dd4f32aeSBjoern A. Zeeb
846dd4f32aeSBjoern A. Zeeb peer_id = FIELD_GET(HAL_RX_MPDU_INFO_INFO0_PEERID,
847*28348caeSBjoern A. Zeeb __le32_to_cpu(mpdu_info->u.ipq8074.info0));
848dd4f32aeSBjoern A. Zeeb
849dd4f32aeSBjoern A. Zeeb return peer_id;
850dd4f32aeSBjoern A. Zeeb }
851dd4f32aeSBjoern A. Zeeb
852*28348caeSBjoern A. Zeeb static u16
ath11k_hw_qcn9074_mpdu_info_get_peerid(struct hal_rx_mpdu_info * mpdu_info)853*28348caeSBjoern A. Zeeb ath11k_hw_qcn9074_mpdu_info_get_peerid(struct hal_rx_mpdu_info *mpdu_info)
854dd4f32aeSBjoern A. Zeeb {
855dd4f32aeSBjoern A. Zeeb u16 peer_id = 0;
856*28348caeSBjoern A. Zeeb
857*28348caeSBjoern A. Zeeb peer_id = FIELD_GET(HAL_RX_MPDU_INFO_INFO0_PEERID,
858*28348caeSBjoern A. Zeeb __le32_to_cpu(mpdu_info->u.qcn9074.info0));
859*28348caeSBjoern A. Zeeb
860*28348caeSBjoern A. Zeeb return peer_id;
861*28348caeSBjoern A. Zeeb }
862*28348caeSBjoern A. Zeeb
863*28348caeSBjoern A. Zeeb static u16
ath11k_hw_wcn6855_mpdu_info_get_peerid(struct hal_rx_mpdu_info * mpdu_info)864*28348caeSBjoern A. Zeeb ath11k_hw_wcn6855_mpdu_info_get_peerid(struct hal_rx_mpdu_info *mpdu_info)
865*28348caeSBjoern A. Zeeb {
866*28348caeSBjoern A. Zeeb u16 peer_id = 0;
867dd4f32aeSBjoern A. Zeeb
868dd4f32aeSBjoern A. Zeeb peer_id = FIELD_GET(HAL_RX_MPDU_INFO_INFO0_PEERID_WCN6855,
869*28348caeSBjoern A. Zeeb __le32_to_cpu(mpdu_info->u.wcn6855.info0));
870dd4f32aeSBjoern A. Zeeb return peer_id;
871dd4f32aeSBjoern A. Zeeb }
872dd4f32aeSBjoern A. Zeeb
ath11k_hw_wcn6855_rx_desc_get_ldpc_support(struct hal_rx_desc * desc)873*28348caeSBjoern A. Zeeb static bool ath11k_hw_wcn6855_rx_desc_get_ldpc_support(struct hal_rx_desc *desc)
874*28348caeSBjoern A. Zeeb {
875*28348caeSBjoern A. Zeeb return FIELD_GET(RX_MSDU_START_INFO2_LDPC,
876*28348caeSBjoern A. Zeeb __le32_to_cpu(desc->u.wcn6855.msdu_start.info2));
877*28348caeSBjoern A. Zeeb }
878*28348caeSBjoern A. Zeeb
ath11k_hw_ipq8074_get_tcl_ring_selector(struct sk_buff * skb)879*28348caeSBjoern A. Zeeb static u32 ath11k_hw_ipq8074_get_tcl_ring_selector(struct sk_buff *skb)
880*28348caeSBjoern A. Zeeb {
881*28348caeSBjoern A. Zeeb /* Let the default ring selection be based on current processor
882*28348caeSBjoern A. Zeeb * number, where one of the 3 tcl rings are selected based on
883*28348caeSBjoern A. Zeeb * the smp_processor_id(). In case that ring
884*28348caeSBjoern A. Zeeb * is full/busy, we resort to other available rings.
885*28348caeSBjoern A. Zeeb * If all rings are full, we drop the packet.
886*28348caeSBjoern A. Zeeb *
887*28348caeSBjoern A. Zeeb * TODO: Add throttling logic when all rings are full
888*28348caeSBjoern A. Zeeb */
889*28348caeSBjoern A. Zeeb return smp_processor_id();
890*28348caeSBjoern A. Zeeb }
891*28348caeSBjoern A. Zeeb
ath11k_hw_wcn6750_get_tcl_ring_selector(struct sk_buff * skb)892*28348caeSBjoern A. Zeeb static u32 ath11k_hw_wcn6750_get_tcl_ring_selector(struct sk_buff *skb)
893*28348caeSBjoern A. Zeeb {
894*28348caeSBjoern A. Zeeb /* Select the TCL ring based on the flow hash of the SKB instead
895*28348caeSBjoern A. Zeeb * of CPU ID. Since applications pumping the traffic can be scheduled
896*28348caeSBjoern A. Zeeb * on multiple CPUs, there is a chance that packets of the same flow
897*28348caeSBjoern A. Zeeb * could end on different TCL rings, this could sometimes results in
898*28348caeSBjoern A. Zeeb * an out of order arrival of the packets at the receiver.
899*28348caeSBjoern A. Zeeb */
900*28348caeSBjoern A. Zeeb return skb_get_hash(skb);
901*28348caeSBjoern A. Zeeb }
902*28348caeSBjoern A. Zeeb
903dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_ops ipq8074_ops = {
904dd4f32aeSBjoern A. Zeeb .get_hw_mac_from_pdev_id = ath11k_hw_ipq8074_mac_from_pdev_id,
905dd4f32aeSBjoern A. Zeeb .wmi_init_config = ath11k_init_wmi_config_ipq8074,
906dd4f32aeSBjoern A. Zeeb .mac_id_to_pdev_id = ath11k_hw_mac_id_to_pdev_id_ipq8074,
907dd4f32aeSBjoern A. Zeeb .mac_id_to_srng_id = ath11k_hw_mac_id_to_srng_id_ipq8074,
908dd4f32aeSBjoern A. Zeeb .tx_mesh_enable = ath11k_hw_ipq8074_tx_mesh_enable,
909dd4f32aeSBjoern A. Zeeb .rx_desc_get_first_msdu = ath11k_hw_ipq8074_rx_desc_get_first_msdu,
910dd4f32aeSBjoern A. Zeeb .rx_desc_get_last_msdu = ath11k_hw_ipq8074_rx_desc_get_last_msdu,
911dd4f32aeSBjoern A. Zeeb .rx_desc_get_l3_pad_bytes = ath11k_hw_ipq8074_rx_desc_get_l3_pad_bytes,
912dd4f32aeSBjoern A. Zeeb .rx_desc_get_hdr_status = ath11k_hw_ipq8074_rx_desc_get_hdr_status,
913dd4f32aeSBjoern A. Zeeb .rx_desc_encrypt_valid = ath11k_hw_ipq8074_rx_desc_encrypt_valid,
914dd4f32aeSBjoern A. Zeeb .rx_desc_get_encrypt_type = ath11k_hw_ipq8074_rx_desc_get_encrypt_type,
915dd4f32aeSBjoern A. Zeeb .rx_desc_get_decap_type = ath11k_hw_ipq8074_rx_desc_get_decap_type,
916dd4f32aeSBjoern A. Zeeb .rx_desc_get_mesh_ctl = ath11k_hw_ipq8074_rx_desc_get_mesh_ctl,
917dd4f32aeSBjoern A. Zeeb .rx_desc_get_ldpc_support = ath11k_hw_ipq8074_rx_desc_get_ldpc_support,
918dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_seq_ctl_vld = ath11k_hw_ipq8074_rx_desc_get_mpdu_seq_ctl_vld,
919dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_fc_valid = ath11k_hw_ipq8074_rx_desc_get_mpdu_fc_valid,
920dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_start_seq_no = ath11k_hw_ipq8074_rx_desc_get_mpdu_start_seq_no,
921dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_len = ath11k_hw_ipq8074_rx_desc_get_msdu_len,
922dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_sgi = ath11k_hw_ipq8074_rx_desc_get_msdu_sgi,
923dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_rate_mcs = ath11k_hw_ipq8074_rx_desc_get_msdu_rate_mcs,
924dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_rx_bw = ath11k_hw_ipq8074_rx_desc_get_msdu_rx_bw,
925dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_freq = ath11k_hw_ipq8074_rx_desc_get_msdu_freq,
926dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_pkt_type = ath11k_hw_ipq8074_rx_desc_get_msdu_pkt_type,
927dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_nss = ath11k_hw_ipq8074_rx_desc_get_msdu_nss,
928dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_tid = ath11k_hw_ipq8074_rx_desc_get_mpdu_tid,
929dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_peer_id = ath11k_hw_ipq8074_rx_desc_get_mpdu_peer_id,
930dd4f32aeSBjoern A. Zeeb .rx_desc_copy_attn_end_tlv = ath11k_hw_ipq8074_rx_desc_copy_attn_end,
931dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_start_tag = ath11k_hw_ipq8074_rx_desc_get_mpdu_start_tag,
932dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_ppdu_id = ath11k_hw_ipq8074_rx_desc_get_mpdu_ppdu_id,
933dd4f32aeSBjoern A. Zeeb .rx_desc_set_msdu_len = ath11k_hw_ipq8074_rx_desc_set_msdu_len,
934dd4f32aeSBjoern A. Zeeb .rx_desc_get_attention = ath11k_hw_ipq8074_rx_desc_get_attention,
935dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_payload = ath11k_hw_ipq8074_rx_desc_get_msdu_payload,
936dd4f32aeSBjoern A. Zeeb .reo_setup = ath11k_hw_ipq8074_reo_setup,
937dd4f32aeSBjoern A. Zeeb .mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid,
938dd4f32aeSBjoern A. Zeeb .rx_desc_mac_addr2_valid = ath11k_hw_ipq8074_rx_desc_mac_addr2_valid,
939dd4f32aeSBjoern A. Zeeb .rx_desc_mpdu_start_addr2 = ath11k_hw_ipq8074_rx_desc_mpdu_start_addr2,
940*28348caeSBjoern A. Zeeb .get_ring_selector = ath11k_hw_ipq8074_get_tcl_ring_selector,
941dd4f32aeSBjoern A. Zeeb };
942dd4f32aeSBjoern A. Zeeb
943dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_ops ipq6018_ops = {
944dd4f32aeSBjoern A. Zeeb .get_hw_mac_from_pdev_id = ath11k_hw_ipq6018_mac_from_pdev_id,
945dd4f32aeSBjoern A. Zeeb .wmi_init_config = ath11k_init_wmi_config_ipq8074,
946dd4f32aeSBjoern A. Zeeb .mac_id_to_pdev_id = ath11k_hw_mac_id_to_pdev_id_ipq8074,
947dd4f32aeSBjoern A. Zeeb .mac_id_to_srng_id = ath11k_hw_mac_id_to_srng_id_ipq8074,
948dd4f32aeSBjoern A. Zeeb .tx_mesh_enable = ath11k_hw_ipq8074_tx_mesh_enable,
949dd4f32aeSBjoern A. Zeeb .rx_desc_get_first_msdu = ath11k_hw_ipq8074_rx_desc_get_first_msdu,
950dd4f32aeSBjoern A. Zeeb .rx_desc_get_last_msdu = ath11k_hw_ipq8074_rx_desc_get_last_msdu,
951dd4f32aeSBjoern A. Zeeb .rx_desc_get_l3_pad_bytes = ath11k_hw_ipq8074_rx_desc_get_l3_pad_bytes,
952dd4f32aeSBjoern A. Zeeb .rx_desc_get_hdr_status = ath11k_hw_ipq8074_rx_desc_get_hdr_status,
953dd4f32aeSBjoern A. Zeeb .rx_desc_encrypt_valid = ath11k_hw_ipq8074_rx_desc_encrypt_valid,
954dd4f32aeSBjoern A. Zeeb .rx_desc_get_encrypt_type = ath11k_hw_ipq8074_rx_desc_get_encrypt_type,
955dd4f32aeSBjoern A. Zeeb .rx_desc_get_decap_type = ath11k_hw_ipq8074_rx_desc_get_decap_type,
956dd4f32aeSBjoern A. Zeeb .rx_desc_get_mesh_ctl = ath11k_hw_ipq8074_rx_desc_get_mesh_ctl,
957dd4f32aeSBjoern A. Zeeb .rx_desc_get_ldpc_support = ath11k_hw_ipq8074_rx_desc_get_ldpc_support,
958dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_seq_ctl_vld = ath11k_hw_ipq8074_rx_desc_get_mpdu_seq_ctl_vld,
959dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_fc_valid = ath11k_hw_ipq8074_rx_desc_get_mpdu_fc_valid,
960dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_start_seq_no = ath11k_hw_ipq8074_rx_desc_get_mpdu_start_seq_no,
961dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_len = ath11k_hw_ipq8074_rx_desc_get_msdu_len,
962dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_sgi = ath11k_hw_ipq8074_rx_desc_get_msdu_sgi,
963dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_rate_mcs = ath11k_hw_ipq8074_rx_desc_get_msdu_rate_mcs,
964dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_rx_bw = ath11k_hw_ipq8074_rx_desc_get_msdu_rx_bw,
965dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_freq = ath11k_hw_ipq8074_rx_desc_get_msdu_freq,
966dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_pkt_type = ath11k_hw_ipq8074_rx_desc_get_msdu_pkt_type,
967dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_nss = ath11k_hw_ipq8074_rx_desc_get_msdu_nss,
968dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_tid = ath11k_hw_ipq8074_rx_desc_get_mpdu_tid,
969dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_peer_id = ath11k_hw_ipq8074_rx_desc_get_mpdu_peer_id,
970dd4f32aeSBjoern A. Zeeb .rx_desc_copy_attn_end_tlv = ath11k_hw_ipq8074_rx_desc_copy_attn_end,
971dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_start_tag = ath11k_hw_ipq8074_rx_desc_get_mpdu_start_tag,
972dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_ppdu_id = ath11k_hw_ipq8074_rx_desc_get_mpdu_ppdu_id,
973dd4f32aeSBjoern A. Zeeb .rx_desc_set_msdu_len = ath11k_hw_ipq8074_rx_desc_set_msdu_len,
974dd4f32aeSBjoern A. Zeeb .rx_desc_get_attention = ath11k_hw_ipq8074_rx_desc_get_attention,
975dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_payload = ath11k_hw_ipq8074_rx_desc_get_msdu_payload,
976dd4f32aeSBjoern A. Zeeb .reo_setup = ath11k_hw_ipq8074_reo_setup,
977dd4f32aeSBjoern A. Zeeb .mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid,
978dd4f32aeSBjoern A. Zeeb .rx_desc_mac_addr2_valid = ath11k_hw_ipq8074_rx_desc_mac_addr2_valid,
979dd4f32aeSBjoern A. Zeeb .rx_desc_mpdu_start_addr2 = ath11k_hw_ipq8074_rx_desc_mpdu_start_addr2,
980*28348caeSBjoern A. Zeeb .get_ring_selector = ath11k_hw_ipq8074_get_tcl_ring_selector,
981dd4f32aeSBjoern A. Zeeb };
982dd4f32aeSBjoern A. Zeeb
983dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_ops qca6390_ops = {
984dd4f32aeSBjoern A. Zeeb .get_hw_mac_from_pdev_id = ath11k_hw_ipq8074_mac_from_pdev_id,
985dd4f32aeSBjoern A. Zeeb .wmi_init_config = ath11k_init_wmi_config_qca6390,
986dd4f32aeSBjoern A. Zeeb .mac_id_to_pdev_id = ath11k_hw_mac_id_to_pdev_id_qca6390,
987dd4f32aeSBjoern A. Zeeb .mac_id_to_srng_id = ath11k_hw_mac_id_to_srng_id_qca6390,
988dd4f32aeSBjoern A. Zeeb .tx_mesh_enable = ath11k_hw_ipq8074_tx_mesh_enable,
989dd4f32aeSBjoern A. Zeeb .rx_desc_get_first_msdu = ath11k_hw_ipq8074_rx_desc_get_first_msdu,
990dd4f32aeSBjoern A. Zeeb .rx_desc_get_last_msdu = ath11k_hw_ipq8074_rx_desc_get_last_msdu,
991dd4f32aeSBjoern A. Zeeb .rx_desc_get_l3_pad_bytes = ath11k_hw_ipq8074_rx_desc_get_l3_pad_bytes,
992dd4f32aeSBjoern A. Zeeb .rx_desc_get_hdr_status = ath11k_hw_ipq8074_rx_desc_get_hdr_status,
993dd4f32aeSBjoern A. Zeeb .rx_desc_encrypt_valid = ath11k_hw_ipq8074_rx_desc_encrypt_valid,
994dd4f32aeSBjoern A. Zeeb .rx_desc_get_encrypt_type = ath11k_hw_ipq8074_rx_desc_get_encrypt_type,
995dd4f32aeSBjoern A. Zeeb .rx_desc_get_decap_type = ath11k_hw_ipq8074_rx_desc_get_decap_type,
996dd4f32aeSBjoern A. Zeeb .rx_desc_get_mesh_ctl = ath11k_hw_ipq8074_rx_desc_get_mesh_ctl,
997dd4f32aeSBjoern A. Zeeb .rx_desc_get_ldpc_support = ath11k_hw_ipq8074_rx_desc_get_ldpc_support,
998dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_seq_ctl_vld = ath11k_hw_ipq8074_rx_desc_get_mpdu_seq_ctl_vld,
999dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_fc_valid = ath11k_hw_ipq8074_rx_desc_get_mpdu_fc_valid,
1000dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_start_seq_no = ath11k_hw_ipq8074_rx_desc_get_mpdu_start_seq_no,
1001dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_len = ath11k_hw_ipq8074_rx_desc_get_msdu_len,
1002dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_sgi = ath11k_hw_ipq8074_rx_desc_get_msdu_sgi,
1003dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_rate_mcs = ath11k_hw_ipq8074_rx_desc_get_msdu_rate_mcs,
1004dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_rx_bw = ath11k_hw_ipq8074_rx_desc_get_msdu_rx_bw,
1005dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_freq = ath11k_hw_ipq8074_rx_desc_get_msdu_freq,
1006dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_pkt_type = ath11k_hw_ipq8074_rx_desc_get_msdu_pkt_type,
1007dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_nss = ath11k_hw_ipq8074_rx_desc_get_msdu_nss,
1008dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_tid = ath11k_hw_ipq8074_rx_desc_get_mpdu_tid,
1009dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_peer_id = ath11k_hw_ipq8074_rx_desc_get_mpdu_peer_id,
1010dd4f32aeSBjoern A. Zeeb .rx_desc_copy_attn_end_tlv = ath11k_hw_ipq8074_rx_desc_copy_attn_end,
1011dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_start_tag = ath11k_hw_ipq8074_rx_desc_get_mpdu_start_tag,
1012dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_ppdu_id = ath11k_hw_ipq8074_rx_desc_get_mpdu_ppdu_id,
1013dd4f32aeSBjoern A. Zeeb .rx_desc_set_msdu_len = ath11k_hw_ipq8074_rx_desc_set_msdu_len,
1014dd4f32aeSBjoern A. Zeeb .rx_desc_get_attention = ath11k_hw_ipq8074_rx_desc_get_attention,
1015dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_payload = ath11k_hw_ipq8074_rx_desc_get_msdu_payload,
1016dd4f32aeSBjoern A. Zeeb .reo_setup = ath11k_hw_ipq8074_reo_setup,
1017dd4f32aeSBjoern A. Zeeb .mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid,
1018dd4f32aeSBjoern A. Zeeb .rx_desc_mac_addr2_valid = ath11k_hw_ipq8074_rx_desc_mac_addr2_valid,
1019dd4f32aeSBjoern A. Zeeb .rx_desc_mpdu_start_addr2 = ath11k_hw_ipq8074_rx_desc_mpdu_start_addr2,
1020*28348caeSBjoern A. Zeeb .get_ring_selector = ath11k_hw_ipq8074_get_tcl_ring_selector,
1021dd4f32aeSBjoern A. Zeeb };
1022dd4f32aeSBjoern A. Zeeb
1023dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_ops qcn9074_ops = {
1024dd4f32aeSBjoern A. Zeeb .get_hw_mac_from_pdev_id = ath11k_hw_ipq6018_mac_from_pdev_id,
1025dd4f32aeSBjoern A. Zeeb .wmi_init_config = ath11k_init_wmi_config_ipq8074,
1026dd4f32aeSBjoern A. Zeeb .mac_id_to_pdev_id = ath11k_hw_mac_id_to_pdev_id_ipq8074,
1027dd4f32aeSBjoern A. Zeeb .mac_id_to_srng_id = ath11k_hw_mac_id_to_srng_id_ipq8074,
1028dd4f32aeSBjoern A. Zeeb .tx_mesh_enable = ath11k_hw_qcn9074_tx_mesh_enable,
1029dd4f32aeSBjoern A. Zeeb .rx_desc_get_first_msdu = ath11k_hw_qcn9074_rx_desc_get_first_msdu,
1030dd4f32aeSBjoern A. Zeeb .rx_desc_get_last_msdu = ath11k_hw_qcn9074_rx_desc_get_last_msdu,
1031dd4f32aeSBjoern A. Zeeb .rx_desc_get_l3_pad_bytes = ath11k_hw_qcn9074_rx_desc_get_l3_pad_bytes,
1032dd4f32aeSBjoern A. Zeeb .rx_desc_get_hdr_status = ath11k_hw_qcn9074_rx_desc_get_hdr_status,
1033dd4f32aeSBjoern A. Zeeb .rx_desc_encrypt_valid = ath11k_hw_qcn9074_rx_desc_encrypt_valid,
1034dd4f32aeSBjoern A. Zeeb .rx_desc_get_encrypt_type = ath11k_hw_qcn9074_rx_desc_get_encrypt_type,
1035dd4f32aeSBjoern A. Zeeb .rx_desc_get_decap_type = ath11k_hw_qcn9074_rx_desc_get_decap_type,
1036dd4f32aeSBjoern A. Zeeb .rx_desc_get_mesh_ctl = ath11k_hw_qcn9074_rx_desc_get_mesh_ctl,
1037dd4f32aeSBjoern A. Zeeb .rx_desc_get_ldpc_support = ath11k_hw_qcn9074_rx_desc_get_ldpc_support,
1038dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_seq_ctl_vld = ath11k_hw_qcn9074_rx_desc_get_mpdu_seq_ctl_vld,
1039dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_fc_valid = ath11k_hw_qcn9074_rx_desc_get_mpdu_fc_valid,
1040dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_start_seq_no = ath11k_hw_qcn9074_rx_desc_get_mpdu_start_seq_no,
1041dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_len = ath11k_hw_qcn9074_rx_desc_get_msdu_len,
1042dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_sgi = ath11k_hw_qcn9074_rx_desc_get_msdu_sgi,
1043dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_rate_mcs = ath11k_hw_qcn9074_rx_desc_get_msdu_rate_mcs,
1044dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_rx_bw = ath11k_hw_qcn9074_rx_desc_get_msdu_rx_bw,
1045dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_freq = ath11k_hw_qcn9074_rx_desc_get_msdu_freq,
1046dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_pkt_type = ath11k_hw_qcn9074_rx_desc_get_msdu_pkt_type,
1047dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_nss = ath11k_hw_qcn9074_rx_desc_get_msdu_nss,
1048dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_tid = ath11k_hw_qcn9074_rx_desc_get_mpdu_tid,
1049dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_peer_id = ath11k_hw_qcn9074_rx_desc_get_mpdu_peer_id,
1050dd4f32aeSBjoern A. Zeeb .rx_desc_copy_attn_end_tlv = ath11k_hw_qcn9074_rx_desc_copy_attn_end,
1051dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_start_tag = ath11k_hw_qcn9074_rx_desc_get_mpdu_start_tag,
1052dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_ppdu_id = ath11k_hw_qcn9074_rx_desc_get_mpdu_ppdu_id,
1053dd4f32aeSBjoern A. Zeeb .rx_desc_set_msdu_len = ath11k_hw_qcn9074_rx_desc_set_msdu_len,
1054dd4f32aeSBjoern A. Zeeb .rx_desc_get_attention = ath11k_hw_qcn9074_rx_desc_get_attention,
1055dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_payload = ath11k_hw_qcn9074_rx_desc_get_msdu_payload,
1056dd4f32aeSBjoern A. Zeeb .reo_setup = ath11k_hw_ipq8074_reo_setup,
1057*28348caeSBjoern A. Zeeb .mpdu_info_get_peerid = ath11k_hw_qcn9074_mpdu_info_get_peerid,
1058dd4f32aeSBjoern A. Zeeb .rx_desc_mac_addr2_valid = ath11k_hw_ipq9074_rx_desc_mac_addr2_valid,
1059dd4f32aeSBjoern A. Zeeb .rx_desc_mpdu_start_addr2 = ath11k_hw_ipq9074_rx_desc_mpdu_start_addr2,
1060*28348caeSBjoern A. Zeeb .get_ring_selector = ath11k_hw_ipq8074_get_tcl_ring_selector,
1061dd4f32aeSBjoern A. Zeeb };
1062dd4f32aeSBjoern A. Zeeb
1063dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_ops wcn6855_ops = {
1064dd4f32aeSBjoern A. Zeeb .get_hw_mac_from_pdev_id = ath11k_hw_ipq8074_mac_from_pdev_id,
1065dd4f32aeSBjoern A. Zeeb .wmi_init_config = ath11k_init_wmi_config_qca6390,
1066dd4f32aeSBjoern A. Zeeb .mac_id_to_pdev_id = ath11k_hw_mac_id_to_pdev_id_qca6390,
1067dd4f32aeSBjoern A. Zeeb .mac_id_to_srng_id = ath11k_hw_mac_id_to_srng_id_qca6390,
1068dd4f32aeSBjoern A. Zeeb .tx_mesh_enable = ath11k_hw_wcn6855_tx_mesh_enable,
1069dd4f32aeSBjoern A. Zeeb .rx_desc_get_first_msdu = ath11k_hw_wcn6855_rx_desc_get_first_msdu,
1070dd4f32aeSBjoern A. Zeeb .rx_desc_get_last_msdu = ath11k_hw_wcn6855_rx_desc_get_last_msdu,
1071dd4f32aeSBjoern A. Zeeb .rx_desc_get_l3_pad_bytes = ath11k_hw_wcn6855_rx_desc_get_l3_pad_bytes,
1072dd4f32aeSBjoern A. Zeeb .rx_desc_get_hdr_status = ath11k_hw_wcn6855_rx_desc_get_hdr_status,
1073dd4f32aeSBjoern A. Zeeb .rx_desc_encrypt_valid = ath11k_hw_wcn6855_rx_desc_encrypt_valid,
1074dd4f32aeSBjoern A. Zeeb .rx_desc_get_encrypt_type = ath11k_hw_wcn6855_rx_desc_get_encrypt_type,
1075dd4f32aeSBjoern A. Zeeb .rx_desc_get_decap_type = ath11k_hw_wcn6855_rx_desc_get_decap_type,
1076dd4f32aeSBjoern A. Zeeb .rx_desc_get_mesh_ctl = ath11k_hw_wcn6855_rx_desc_get_mesh_ctl,
1077*28348caeSBjoern A. Zeeb .rx_desc_get_ldpc_support = ath11k_hw_wcn6855_rx_desc_get_ldpc_support,
1078dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_seq_ctl_vld = ath11k_hw_wcn6855_rx_desc_get_mpdu_seq_ctl_vld,
1079dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_fc_valid = ath11k_hw_wcn6855_rx_desc_get_mpdu_fc_valid,
1080dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_start_seq_no = ath11k_hw_wcn6855_rx_desc_get_mpdu_start_seq_no,
1081dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_len = ath11k_hw_wcn6855_rx_desc_get_msdu_len,
1082dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_sgi = ath11k_hw_wcn6855_rx_desc_get_msdu_sgi,
1083dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_rate_mcs = ath11k_hw_wcn6855_rx_desc_get_msdu_rate_mcs,
1084dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_rx_bw = ath11k_hw_wcn6855_rx_desc_get_msdu_rx_bw,
1085dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_freq = ath11k_hw_wcn6855_rx_desc_get_msdu_freq,
1086dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_pkt_type = ath11k_hw_wcn6855_rx_desc_get_msdu_pkt_type,
1087dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_nss = ath11k_hw_wcn6855_rx_desc_get_msdu_nss,
1088dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_tid = ath11k_hw_wcn6855_rx_desc_get_mpdu_tid,
1089dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_peer_id = ath11k_hw_wcn6855_rx_desc_get_mpdu_peer_id,
1090dd4f32aeSBjoern A. Zeeb .rx_desc_copy_attn_end_tlv = ath11k_hw_wcn6855_rx_desc_copy_attn_end,
1091dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_start_tag = ath11k_hw_wcn6855_rx_desc_get_mpdu_start_tag,
1092dd4f32aeSBjoern A. Zeeb .rx_desc_get_mpdu_ppdu_id = ath11k_hw_wcn6855_rx_desc_get_mpdu_ppdu_id,
1093dd4f32aeSBjoern A. Zeeb .rx_desc_set_msdu_len = ath11k_hw_wcn6855_rx_desc_set_msdu_len,
1094dd4f32aeSBjoern A. Zeeb .rx_desc_get_attention = ath11k_hw_wcn6855_rx_desc_get_attention,
1095dd4f32aeSBjoern A. Zeeb .rx_desc_get_msdu_payload = ath11k_hw_wcn6855_rx_desc_get_msdu_payload,
1096dd4f32aeSBjoern A. Zeeb .reo_setup = ath11k_hw_wcn6855_reo_setup,
1097dd4f32aeSBjoern A. Zeeb .mpdu_info_get_peerid = ath11k_hw_wcn6855_mpdu_info_get_peerid,
1098dd4f32aeSBjoern A. Zeeb .rx_desc_mac_addr2_valid = ath11k_hw_wcn6855_rx_desc_mac_addr2_valid,
1099dd4f32aeSBjoern A. Zeeb .rx_desc_mpdu_start_addr2 = ath11k_hw_wcn6855_rx_desc_mpdu_start_addr2,
1100*28348caeSBjoern A. Zeeb .get_ring_selector = ath11k_hw_ipq8074_get_tcl_ring_selector,
1101dd4f32aeSBjoern A. Zeeb };
1102dd4f32aeSBjoern A. Zeeb
1103*28348caeSBjoern A. Zeeb const struct ath11k_hw_ops wcn6750_ops = {
1104*28348caeSBjoern A. Zeeb .get_hw_mac_from_pdev_id = ath11k_hw_ipq8074_mac_from_pdev_id,
1105*28348caeSBjoern A. Zeeb .wmi_init_config = ath11k_init_wmi_config_qca6390,
1106*28348caeSBjoern A. Zeeb .mac_id_to_pdev_id = ath11k_hw_mac_id_to_pdev_id_qca6390,
1107*28348caeSBjoern A. Zeeb .mac_id_to_srng_id = ath11k_hw_mac_id_to_srng_id_qca6390,
1108*28348caeSBjoern A. Zeeb .tx_mesh_enable = ath11k_hw_qcn9074_tx_mesh_enable,
1109*28348caeSBjoern A. Zeeb .rx_desc_get_first_msdu = ath11k_hw_qcn9074_rx_desc_get_first_msdu,
1110*28348caeSBjoern A. Zeeb .rx_desc_get_last_msdu = ath11k_hw_qcn9074_rx_desc_get_last_msdu,
1111*28348caeSBjoern A. Zeeb .rx_desc_get_l3_pad_bytes = ath11k_hw_qcn9074_rx_desc_get_l3_pad_bytes,
1112*28348caeSBjoern A. Zeeb .rx_desc_get_hdr_status = ath11k_hw_qcn9074_rx_desc_get_hdr_status,
1113*28348caeSBjoern A. Zeeb .rx_desc_encrypt_valid = ath11k_hw_qcn9074_rx_desc_encrypt_valid,
1114*28348caeSBjoern A. Zeeb .rx_desc_get_encrypt_type = ath11k_hw_qcn9074_rx_desc_get_encrypt_type,
1115*28348caeSBjoern A. Zeeb .rx_desc_get_decap_type = ath11k_hw_qcn9074_rx_desc_get_decap_type,
1116*28348caeSBjoern A. Zeeb .rx_desc_get_mesh_ctl = ath11k_hw_qcn9074_rx_desc_get_mesh_ctl,
1117*28348caeSBjoern A. Zeeb .rx_desc_get_ldpc_support = ath11k_hw_qcn9074_rx_desc_get_ldpc_support,
1118*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_seq_ctl_vld = ath11k_hw_qcn9074_rx_desc_get_mpdu_seq_ctl_vld,
1119*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_fc_valid = ath11k_hw_qcn9074_rx_desc_get_mpdu_fc_valid,
1120*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_start_seq_no = ath11k_hw_qcn9074_rx_desc_get_mpdu_start_seq_no,
1121*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_len = ath11k_hw_qcn9074_rx_desc_get_msdu_len,
1122*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_sgi = ath11k_hw_qcn9074_rx_desc_get_msdu_sgi,
1123*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_rate_mcs = ath11k_hw_qcn9074_rx_desc_get_msdu_rate_mcs,
1124*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_rx_bw = ath11k_hw_qcn9074_rx_desc_get_msdu_rx_bw,
1125*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_freq = ath11k_hw_qcn9074_rx_desc_get_msdu_freq,
1126*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_pkt_type = ath11k_hw_qcn9074_rx_desc_get_msdu_pkt_type,
1127*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_nss = ath11k_hw_qcn9074_rx_desc_get_msdu_nss,
1128*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_tid = ath11k_hw_qcn9074_rx_desc_get_mpdu_tid,
1129*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_peer_id = ath11k_hw_qcn9074_rx_desc_get_mpdu_peer_id,
1130*28348caeSBjoern A. Zeeb .rx_desc_copy_attn_end_tlv = ath11k_hw_qcn9074_rx_desc_copy_attn_end,
1131*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_start_tag = ath11k_hw_qcn9074_rx_desc_get_mpdu_start_tag,
1132*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_ppdu_id = ath11k_hw_qcn9074_rx_desc_get_mpdu_ppdu_id,
1133*28348caeSBjoern A. Zeeb .rx_desc_set_msdu_len = ath11k_hw_qcn9074_rx_desc_set_msdu_len,
1134*28348caeSBjoern A. Zeeb .rx_desc_get_attention = ath11k_hw_qcn9074_rx_desc_get_attention,
1135*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_payload = ath11k_hw_qcn9074_rx_desc_get_msdu_payload,
1136*28348caeSBjoern A. Zeeb .reo_setup = ath11k_hw_wcn6855_reo_setup,
1137*28348caeSBjoern A. Zeeb .mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid,
1138*28348caeSBjoern A. Zeeb .rx_desc_mac_addr2_valid = ath11k_hw_ipq9074_rx_desc_mac_addr2_valid,
1139*28348caeSBjoern A. Zeeb .rx_desc_mpdu_start_addr2 = ath11k_hw_ipq9074_rx_desc_mpdu_start_addr2,
1140*28348caeSBjoern A. Zeeb .get_ring_selector = ath11k_hw_wcn6750_get_tcl_ring_selector,
1141*28348caeSBjoern A. Zeeb };
1142*28348caeSBjoern A. Zeeb
1143*28348caeSBjoern A. Zeeb /* IPQ5018 hw ops is similar to QCN9074 except for the dest ring remap */
1144*28348caeSBjoern A. Zeeb const struct ath11k_hw_ops ipq5018_ops = {
1145*28348caeSBjoern A. Zeeb .get_hw_mac_from_pdev_id = ath11k_hw_ipq6018_mac_from_pdev_id,
1146*28348caeSBjoern A. Zeeb .wmi_init_config = ath11k_init_wmi_config_ipq8074,
1147*28348caeSBjoern A. Zeeb .mac_id_to_pdev_id = ath11k_hw_mac_id_to_pdev_id_ipq8074,
1148*28348caeSBjoern A. Zeeb .mac_id_to_srng_id = ath11k_hw_mac_id_to_srng_id_ipq8074,
1149*28348caeSBjoern A. Zeeb .tx_mesh_enable = ath11k_hw_qcn9074_tx_mesh_enable,
1150*28348caeSBjoern A. Zeeb .rx_desc_get_first_msdu = ath11k_hw_qcn9074_rx_desc_get_first_msdu,
1151*28348caeSBjoern A. Zeeb .rx_desc_get_last_msdu = ath11k_hw_qcn9074_rx_desc_get_last_msdu,
1152*28348caeSBjoern A. Zeeb .rx_desc_get_l3_pad_bytes = ath11k_hw_qcn9074_rx_desc_get_l3_pad_bytes,
1153*28348caeSBjoern A. Zeeb .rx_desc_get_hdr_status = ath11k_hw_qcn9074_rx_desc_get_hdr_status,
1154*28348caeSBjoern A. Zeeb .rx_desc_encrypt_valid = ath11k_hw_qcn9074_rx_desc_encrypt_valid,
1155*28348caeSBjoern A. Zeeb .rx_desc_get_encrypt_type = ath11k_hw_qcn9074_rx_desc_get_encrypt_type,
1156*28348caeSBjoern A. Zeeb .rx_desc_get_decap_type = ath11k_hw_qcn9074_rx_desc_get_decap_type,
1157*28348caeSBjoern A. Zeeb .rx_desc_get_mesh_ctl = ath11k_hw_qcn9074_rx_desc_get_mesh_ctl,
1158*28348caeSBjoern A. Zeeb .rx_desc_get_ldpc_support = ath11k_hw_qcn9074_rx_desc_get_ldpc_support,
1159*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_seq_ctl_vld = ath11k_hw_qcn9074_rx_desc_get_mpdu_seq_ctl_vld,
1160*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_fc_valid = ath11k_hw_qcn9074_rx_desc_get_mpdu_fc_valid,
1161*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_start_seq_no = ath11k_hw_qcn9074_rx_desc_get_mpdu_start_seq_no,
1162*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_len = ath11k_hw_qcn9074_rx_desc_get_msdu_len,
1163*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_sgi = ath11k_hw_qcn9074_rx_desc_get_msdu_sgi,
1164*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_rate_mcs = ath11k_hw_qcn9074_rx_desc_get_msdu_rate_mcs,
1165*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_rx_bw = ath11k_hw_qcn9074_rx_desc_get_msdu_rx_bw,
1166*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_freq = ath11k_hw_qcn9074_rx_desc_get_msdu_freq,
1167*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_pkt_type = ath11k_hw_qcn9074_rx_desc_get_msdu_pkt_type,
1168*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_nss = ath11k_hw_qcn9074_rx_desc_get_msdu_nss,
1169*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_tid = ath11k_hw_qcn9074_rx_desc_get_mpdu_tid,
1170*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_peer_id = ath11k_hw_qcn9074_rx_desc_get_mpdu_peer_id,
1171*28348caeSBjoern A. Zeeb .rx_desc_copy_attn_end_tlv = ath11k_hw_qcn9074_rx_desc_copy_attn_end,
1172*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_start_tag = ath11k_hw_qcn9074_rx_desc_get_mpdu_start_tag,
1173*28348caeSBjoern A. Zeeb .rx_desc_get_mpdu_ppdu_id = ath11k_hw_qcn9074_rx_desc_get_mpdu_ppdu_id,
1174*28348caeSBjoern A. Zeeb .rx_desc_set_msdu_len = ath11k_hw_qcn9074_rx_desc_set_msdu_len,
1175*28348caeSBjoern A. Zeeb .rx_desc_get_attention = ath11k_hw_qcn9074_rx_desc_get_attention,
1176*28348caeSBjoern A. Zeeb .reo_setup = ath11k_hw_ipq5018_reo_setup,
1177*28348caeSBjoern A. Zeeb .rx_desc_get_msdu_payload = ath11k_hw_qcn9074_rx_desc_get_msdu_payload,
1178*28348caeSBjoern A. Zeeb .mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid,
1179*28348caeSBjoern A. Zeeb .rx_desc_mac_addr2_valid = ath11k_hw_ipq9074_rx_desc_mac_addr2_valid,
1180*28348caeSBjoern A. Zeeb .rx_desc_mpdu_start_addr2 = ath11k_hw_ipq9074_rx_desc_mpdu_start_addr2,
1181*28348caeSBjoern A. Zeeb .get_ring_selector = ath11k_hw_ipq8074_get_tcl_ring_selector,
1182*28348caeSBjoern A. Zeeb };
1183*28348caeSBjoern A. Zeeb
1184*28348caeSBjoern A. Zeeb #define ATH11K_TX_RING_MASK_0 BIT(0)
1185*28348caeSBjoern A. Zeeb #define ATH11K_TX_RING_MASK_1 BIT(1)
1186*28348caeSBjoern A. Zeeb #define ATH11K_TX_RING_MASK_2 BIT(2)
1187*28348caeSBjoern A. Zeeb #define ATH11K_TX_RING_MASK_3 BIT(3)
1188*28348caeSBjoern A. Zeeb #define ATH11K_TX_RING_MASK_4 BIT(4)
1189dd4f32aeSBjoern A. Zeeb
1190dd4f32aeSBjoern A. Zeeb #define ATH11K_RX_RING_MASK_0 0x1
1191dd4f32aeSBjoern A. Zeeb #define ATH11K_RX_RING_MASK_1 0x2
1192dd4f32aeSBjoern A. Zeeb #define ATH11K_RX_RING_MASK_2 0x4
1193dd4f32aeSBjoern A. Zeeb #define ATH11K_RX_RING_MASK_3 0x8
1194dd4f32aeSBjoern A. Zeeb
1195dd4f32aeSBjoern A. Zeeb #define ATH11K_RX_ERR_RING_MASK_0 0x1
1196dd4f32aeSBjoern A. Zeeb
1197dd4f32aeSBjoern A. Zeeb #define ATH11K_RX_WBM_REL_RING_MASK_0 0x1
1198dd4f32aeSBjoern A. Zeeb
1199dd4f32aeSBjoern A. Zeeb #define ATH11K_REO_STATUS_RING_MASK_0 0x1
1200dd4f32aeSBjoern A. Zeeb
1201dd4f32aeSBjoern A. Zeeb #define ATH11K_RXDMA2HOST_RING_MASK_0 0x1
1202dd4f32aeSBjoern A. Zeeb #define ATH11K_RXDMA2HOST_RING_MASK_1 0x2
1203dd4f32aeSBjoern A. Zeeb #define ATH11K_RXDMA2HOST_RING_MASK_2 0x4
1204dd4f32aeSBjoern A. Zeeb
1205dd4f32aeSBjoern A. Zeeb #define ATH11K_HOST2RXDMA_RING_MASK_0 0x1
1206dd4f32aeSBjoern A. Zeeb #define ATH11K_HOST2RXDMA_RING_MASK_1 0x2
1207dd4f32aeSBjoern A. Zeeb #define ATH11K_HOST2RXDMA_RING_MASK_2 0x4
1208dd4f32aeSBjoern A. Zeeb
1209dd4f32aeSBjoern A. Zeeb #define ATH11K_RX_MON_STATUS_RING_MASK_0 0x1
1210dd4f32aeSBjoern A. Zeeb #define ATH11K_RX_MON_STATUS_RING_MASK_1 0x2
1211dd4f32aeSBjoern A. Zeeb #define ATH11K_RX_MON_STATUS_RING_MASK_2 0x4
1212dd4f32aeSBjoern A. Zeeb
1213dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_ipq8074 = {
1214dd4f32aeSBjoern A. Zeeb .tx = {
1215dd4f32aeSBjoern A. Zeeb ATH11K_TX_RING_MASK_0,
1216dd4f32aeSBjoern A. Zeeb ATH11K_TX_RING_MASK_1,
1217dd4f32aeSBjoern A. Zeeb ATH11K_TX_RING_MASK_2,
1218dd4f32aeSBjoern A. Zeeb },
1219dd4f32aeSBjoern A. Zeeb .rx_mon_status = {
1220dd4f32aeSBjoern A. Zeeb 0, 0, 0, 0,
1221dd4f32aeSBjoern A. Zeeb ATH11K_RX_MON_STATUS_RING_MASK_0,
1222dd4f32aeSBjoern A. Zeeb ATH11K_RX_MON_STATUS_RING_MASK_1,
1223dd4f32aeSBjoern A. Zeeb ATH11K_RX_MON_STATUS_RING_MASK_2,
1224dd4f32aeSBjoern A. Zeeb },
1225dd4f32aeSBjoern A. Zeeb .rx = {
1226dd4f32aeSBjoern A. Zeeb 0, 0, 0, 0, 0, 0, 0,
1227dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_0,
1228dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_1,
1229dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_2,
1230dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_3,
1231dd4f32aeSBjoern A. Zeeb },
1232dd4f32aeSBjoern A. Zeeb .rx_err = {
1233dd4f32aeSBjoern A. Zeeb ATH11K_RX_ERR_RING_MASK_0,
1234dd4f32aeSBjoern A. Zeeb },
1235dd4f32aeSBjoern A. Zeeb .rx_wbm_rel = {
1236dd4f32aeSBjoern A. Zeeb ATH11K_RX_WBM_REL_RING_MASK_0,
1237dd4f32aeSBjoern A. Zeeb },
1238dd4f32aeSBjoern A. Zeeb .reo_status = {
1239*28348caeSBjoern A. Zeeb 0, 0, 0,
1240dd4f32aeSBjoern A. Zeeb ATH11K_REO_STATUS_RING_MASK_0,
1241dd4f32aeSBjoern A. Zeeb },
1242dd4f32aeSBjoern A. Zeeb .rxdma2host = {
1243dd4f32aeSBjoern A. Zeeb ATH11K_RXDMA2HOST_RING_MASK_0,
1244dd4f32aeSBjoern A. Zeeb ATH11K_RXDMA2HOST_RING_MASK_1,
1245dd4f32aeSBjoern A. Zeeb ATH11K_RXDMA2HOST_RING_MASK_2,
1246dd4f32aeSBjoern A. Zeeb },
1247dd4f32aeSBjoern A. Zeeb .host2rxdma = {
1248dd4f32aeSBjoern A. Zeeb ATH11K_HOST2RXDMA_RING_MASK_0,
1249dd4f32aeSBjoern A. Zeeb ATH11K_HOST2RXDMA_RING_MASK_1,
1250dd4f32aeSBjoern A. Zeeb ATH11K_HOST2RXDMA_RING_MASK_2,
1251dd4f32aeSBjoern A. Zeeb },
1252dd4f32aeSBjoern A. Zeeb };
1253dd4f32aeSBjoern A. Zeeb
1254dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qca6390 = {
1255dd4f32aeSBjoern A. Zeeb .tx = {
1256dd4f32aeSBjoern A. Zeeb ATH11K_TX_RING_MASK_0,
1257dd4f32aeSBjoern A. Zeeb },
1258dd4f32aeSBjoern A. Zeeb .rx_mon_status = {
1259dd4f32aeSBjoern A. Zeeb 0, 0, 0, 0,
1260dd4f32aeSBjoern A. Zeeb ATH11K_RX_MON_STATUS_RING_MASK_0,
1261dd4f32aeSBjoern A. Zeeb ATH11K_RX_MON_STATUS_RING_MASK_1,
1262dd4f32aeSBjoern A. Zeeb ATH11K_RX_MON_STATUS_RING_MASK_2,
1263dd4f32aeSBjoern A. Zeeb },
1264dd4f32aeSBjoern A. Zeeb .rx = {
1265dd4f32aeSBjoern A. Zeeb 0, 0, 0, 0, 0, 0, 0,
1266dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_0,
1267dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_1,
1268dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_2,
1269dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_3,
1270dd4f32aeSBjoern A. Zeeb },
1271dd4f32aeSBjoern A. Zeeb .rx_err = {
1272dd4f32aeSBjoern A. Zeeb ATH11K_RX_ERR_RING_MASK_0,
1273dd4f32aeSBjoern A. Zeeb },
1274dd4f32aeSBjoern A. Zeeb .rx_wbm_rel = {
1275dd4f32aeSBjoern A. Zeeb ATH11K_RX_WBM_REL_RING_MASK_0,
1276dd4f32aeSBjoern A. Zeeb },
1277dd4f32aeSBjoern A. Zeeb .reo_status = {
1278dd4f32aeSBjoern A. Zeeb ATH11K_REO_STATUS_RING_MASK_0,
1279dd4f32aeSBjoern A. Zeeb },
1280dd4f32aeSBjoern A. Zeeb .rxdma2host = {
1281dd4f32aeSBjoern A. Zeeb ATH11K_RXDMA2HOST_RING_MASK_0,
1282dd4f32aeSBjoern A. Zeeb ATH11K_RXDMA2HOST_RING_MASK_1,
1283dd4f32aeSBjoern A. Zeeb ATH11K_RXDMA2HOST_RING_MASK_2,
1284dd4f32aeSBjoern A. Zeeb },
1285dd4f32aeSBjoern A. Zeeb .host2rxdma = {
1286dd4f32aeSBjoern A. Zeeb },
1287dd4f32aeSBjoern A. Zeeb };
1288dd4f32aeSBjoern A. Zeeb
1289dd4f32aeSBjoern A. Zeeb /* Target firmware's Copy Engine configuration. */
1290dd4f32aeSBjoern A. Zeeb const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq8074[] = {
1291dd4f32aeSBjoern A. Zeeb /* CE0: host->target HTC control and raw streams */
1292dd4f32aeSBjoern A. Zeeb {
1293dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(0),
1294dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
1295dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1296dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1297dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1298dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1299dd4f32aeSBjoern A. Zeeb },
1300dd4f32aeSBjoern A. Zeeb
1301dd4f32aeSBjoern A. Zeeb /* CE1: target->host HTT + HTC control */
1302dd4f32aeSBjoern A. Zeeb {
1303dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
1304dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
1305dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1306dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1307dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1308dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1309dd4f32aeSBjoern A. Zeeb },
1310dd4f32aeSBjoern A. Zeeb
1311dd4f32aeSBjoern A. Zeeb /* CE2: target->host WMI */
1312dd4f32aeSBjoern A. Zeeb {
1313dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1314dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
1315dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1316dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1317dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1318dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1319dd4f32aeSBjoern A. Zeeb },
1320dd4f32aeSBjoern A. Zeeb
1321dd4f32aeSBjoern A. Zeeb /* CE3: host->target WMI */
1322dd4f32aeSBjoern A. Zeeb {
1323dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1324dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
1325dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1326dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1327dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1328dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1329dd4f32aeSBjoern A. Zeeb },
1330dd4f32aeSBjoern A. Zeeb
1331dd4f32aeSBjoern A. Zeeb /* CE4: host->target HTT */
1332dd4f32aeSBjoern A. Zeeb {
1333dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(4),
1334dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
1335dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(256),
1336dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(256),
1337dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
1338dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1339dd4f32aeSBjoern A. Zeeb },
1340dd4f32aeSBjoern A. Zeeb
1341dd4f32aeSBjoern A. Zeeb /* CE5: target->host Pktlog */
1342dd4f32aeSBjoern A. Zeeb {
1343dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(5),
1344dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
1345dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1346dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1347dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(0),
1348dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1349dd4f32aeSBjoern A. Zeeb },
1350dd4f32aeSBjoern A. Zeeb
1351dd4f32aeSBjoern A. Zeeb /* CE6: Reserved for target autonomous hif_memcpy */
1352dd4f32aeSBjoern A. Zeeb {
1353dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(6),
1354dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
1355dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1356dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(65535),
1357dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1358dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1359dd4f32aeSBjoern A. Zeeb },
1360dd4f32aeSBjoern A. Zeeb
1361dd4f32aeSBjoern A. Zeeb /* CE7 used only by Host */
1362dd4f32aeSBjoern A. Zeeb {
1363dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(7),
1364dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
1365dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1366dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1367dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1368dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1369dd4f32aeSBjoern A. Zeeb },
1370dd4f32aeSBjoern A. Zeeb
1371dd4f32aeSBjoern A. Zeeb /* CE8 target->host used only by IPA */
1372dd4f32aeSBjoern A. Zeeb {
1373dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(8),
1374dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
1375dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1376dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(65535),
1377dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1378dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1379dd4f32aeSBjoern A. Zeeb },
1380dd4f32aeSBjoern A. Zeeb
1381dd4f32aeSBjoern A. Zeeb /* CE9 host->target HTT */
1382dd4f32aeSBjoern A. Zeeb {
1383dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(9),
1384dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
1385dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1386dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1387dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1388dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1389dd4f32aeSBjoern A. Zeeb },
1390dd4f32aeSBjoern A. Zeeb
1391dd4f32aeSBjoern A. Zeeb /* CE10 target->host HTT */
1392dd4f32aeSBjoern A. Zeeb {
1393dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(10),
1394dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_INOUT_H2H),
1395dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(0),
1396dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(0),
1397dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1398dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1399dd4f32aeSBjoern A. Zeeb },
1400dd4f32aeSBjoern A. Zeeb
1401dd4f32aeSBjoern A. Zeeb /* CE11 Not used */
1402dd4f32aeSBjoern A. Zeeb };
1403dd4f32aeSBjoern A. Zeeb
1404dd4f32aeSBjoern A. Zeeb /* Map from service/endpoint to Copy Engine.
1405dd4f32aeSBjoern A. Zeeb * This table is derived from the CE_PCI TABLE, above.
1406dd4f32aeSBjoern A. Zeeb * It is passed to the Target at startup for use by firmware.
1407dd4f32aeSBjoern A. Zeeb */
1408dd4f32aeSBjoern A. Zeeb const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq8074[] = {
1409dd4f32aeSBjoern A. Zeeb {
1410dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
1411dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1412dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1413dd4f32aeSBjoern A. Zeeb },
1414dd4f32aeSBjoern A. Zeeb {
1415dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
1416dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1417dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1418dd4f32aeSBjoern A. Zeeb },
1419dd4f32aeSBjoern A. Zeeb {
1420dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
1421dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1422dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1423dd4f32aeSBjoern A. Zeeb },
1424dd4f32aeSBjoern A. Zeeb {
1425dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
1426dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1427dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1428dd4f32aeSBjoern A. Zeeb },
1429dd4f32aeSBjoern A. Zeeb {
1430dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
1431dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1432dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1433dd4f32aeSBjoern A. Zeeb },
1434dd4f32aeSBjoern A. Zeeb {
1435dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
1436dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1437dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1438dd4f32aeSBjoern A. Zeeb },
1439dd4f32aeSBjoern A. Zeeb {
1440dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
1441dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1442dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1443dd4f32aeSBjoern A. Zeeb },
1444dd4f32aeSBjoern A. Zeeb {
1445dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
1446dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1447dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1448dd4f32aeSBjoern A. Zeeb },
1449dd4f32aeSBjoern A. Zeeb {
1450dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
1451dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1452dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1453dd4f32aeSBjoern A. Zeeb },
1454dd4f32aeSBjoern A. Zeeb {
1455dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
1456dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1457dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1458dd4f32aeSBjoern A. Zeeb },
1459dd4f32aeSBjoern A. Zeeb {
1460dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
1461dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1462dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(7),
1463dd4f32aeSBjoern A. Zeeb },
1464dd4f32aeSBjoern A. Zeeb {
1465dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
1466dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1467dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1468dd4f32aeSBjoern A. Zeeb },
1469dd4f32aeSBjoern A. Zeeb {
1470dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC2),
1471dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1472dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(9),
1473dd4f32aeSBjoern A. Zeeb },
1474dd4f32aeSBjoern A. Zeeb {
1475dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC2),
1476dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1477dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1478dd4f32aeSBjoern A. Zeeb },
1479dd4f32aeSBjoern A. Zeeb {
1480dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
1481dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1482dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(0),
1483dd4f32aeSBjoern A. Zeeb },
1484dd4f32aeSBjoern A. Zeeb {
1485dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
1486dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1487dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
1488dd4f32aeSBjoern A. Zeeb },
1489dd4f32aeSBjoern A. Zeeb { /* not used */
1490dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
1491dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1492dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(0),
1493dd4f32aeSBjoern A. Zeeb },
1494dd4f32aeSBjoern A. Zeeb { /* not used */
1495dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
1496dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1497dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
1498dd4f32aeSBjoern A. Zeeb },
1499dd4f32aeSBjoern A. Zeeb {
1500dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
1501dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1502dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(4),
1503dd4f32aeSBjoern A. Zeeb },
1504dd4f32aeSBjoern A. Zeeb {
1505dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
1506dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1507dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
1508dd4f32aeSBjoern A. Zeeb },
1509dd4f32aeSBjoern A. Zeeb {
1510dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_PKT_LOG),
1511dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1512dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(5),
1513dd4f32aeSBjoern A. Zeeb },
1514dd4f32aeSBjoern A. Zeeb
1515dd4f32aeSBjoern A. Zeeb /* (Additions here) */
1516dd4f32aeSBjoern A. Zeeb
1517dd4f32aeSBjoern A. Zeeb { /* terminator entry */ }
1518dd4f32aeSBjoern A. Zeeb };
1519dd4f32aeSBjoern A. Zeeb
1520dd4f32aeSBjoern A. Zeeb const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq6018[] = {
1521dd4f32aeSBjoern A. Zeeb {
1522dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
1523dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1524dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1525dd4f32aeSBjoern A. Zeeb },
1526dd4f32aeSBjoern A. Zeeb {
1527dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
1528dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1529dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1530dd4f32aeSBjoern A. Zeeb },
1531dd4f32aeSBjoern A. Zeeb {
1532dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
1533dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1534dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1535dd4f32aeSBjoern A. Zeeb },
1536dd4f32aeSBjoern A. Zeeb {
1537dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
1538dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1539dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1540dd4f32aeSBjoern A. Zeeb },
1541dd4f32aeSBjoern A. Zeeb {
1542dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
1543dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1544dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1545dd4f32aeSBjoern A. Zeeb },
1546dd4f32aeSBjoern A. Zeeb {
1547dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
1548dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1549dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1550dd4f32aeSBjoern A. Zeeb },
1551dd4f32aeSBjoern A. Zeeb {
1552dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
1553dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1554dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1555dd4f32aeSBjoern A. Zeeb },
1556dd4f32aeSBjoern A. Zeeb {
1557dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
1558dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1559dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1560dd4f32aeSBjoern A. Zeeb },
1561dd4f32aeSBjoern A. Zeeb {
1562dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
1563dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1564dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1565dd4f32aeSBjoern A. Zeeb },
1566dd4f32aeSBjoern A. Zeeb {
1567dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
1568dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1569dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1570dd4f32aeSBjoern A. Zeeb },
1571dd4f32aeSBjoern A. Zeeb {
1572dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
1573dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1574dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(7),
1575dd4f32aeSBjoern A. Zeeb },
1576dd4f32aeSBjoern A. Zeeb {
1577dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL_MAC1),
1578dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1579dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1580dd4f32aeSBjoern A. Zeeb },
1581dd4f32aeSBjoern A. Zeeb {
1582dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
1583dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1584dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(0),
1585dd4f32aeSBjoern A. Zeeb },
1586dd4f32aeSBjoern A. Zeeb {
1587dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
1588dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1589dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
1590dd4f32aeSBjoern A. Zeeb },
1591dd4f32aeSBjoern A. Zeeb { /* not used */
1592dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
1593dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1594dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(0),
1595dd4f32aeSBjoern A. Zeeb },
1596dd4f32aeSBjoern A. Zeeb { /* not used */
1597dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
1598dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1599dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
1600dd4f32aeSBjoern A. Zeeb },
1601dd4f32aeSBjoern A. Zeeb {
1602dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
1603dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1604dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(4),
1605dd4f32aeSBjoern A. Zeeb },
1606dd4f32aeSBjoern A. Zeeb {
1607dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
1608dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1609dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
1610dd4f32aeSBjoern A. Zeeb },
1611dd4f32aeSBjoern A. Zeeb {
1612dd4f32aeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_PKT_LOG),
1613dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1614dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(5),
1615dd4f32aeSBjoern A. Zeeb },
1616dd4f32aeSBjoern A. Zeeb
1617dd4f32aeSBjoern A. Zeeb /* (Additions here) */
1618dd4f32aeSBjoern A. Zeeb
1619dd4f32aeSBjoern A. Zeeb { /* terminator entry */ }
1620dd4f32aeSBjoern A. Zeeb };
1621dd4f32aeSBjoern A. Zeeb
1622dd4f32aeSBjoern A. Zeeb /* Target firmware's Copy Engine configuration. */
1623dd4f32aeSBjoern A. Zeeb const struct ce_pipe_config ath11k_target_ce_config_wlan_qca6390[] = {
1624dd4f32aeSBjoern A. Zeeb /* CE0: host->target HTC control and raw streams */
1625dd4f32aeSBjoern A. Zeeb {
1626dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(0),
1627dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
1628dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1629dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1630dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1631dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1632dd4f32aeSBjoern A. Zeeb },
1633dd4f32aeSBjoern A. Zeeb
1634dd4f32aeSBjoern A. Zeeb /* CE1: target->host HTT + HTC control */
1635dd4f32aeSBjoern A. Zeeb {
1636dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
1637dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
1638dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1639dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1640dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1641dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1642dd4f32aeSBjoern A. Zeeb },
1643dd4f32aeSBjoern A. Zeeb
1644dd4f32aeSBjoern A. Zeeb /* CE2: target->host WMI */
1645dd4f32aeSBjoern A. Zeeb {
1646dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1647dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
1648dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1649dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1650dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1651dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1652dd4f32aeSBjoern A. Zeeb },
1653dd4f32aeSBjoern A. Zeeb
1654dd4f32aeSBjoern A. Zeeb /* CE3: host->target WMI */
1655dd4f32aeSBjoern A. Zeeb {
1656dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1657dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
1658dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1659dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1660dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1661dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1662dd4f32aeSBjoern A. Zeeb },
1663dd4f32aeSBjoern A. Zeeb
1664dd4f32aeSBjoern A. Zeeb /* CE4: host->target HTT */
1665dd4f32aeSBjoern A. Zeeb {
1666dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(4),
1667dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
1668dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(256),
1669dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(256),
1670dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
1671dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1672dd4f32aeSBjoern A. Zeeb },
1673dd4f32aeSBjoern A. Zeeb
1674dd4f32aeSBjoern A. Zeeb /* CE5: target->host Pktlog */
1675dd4f32aeSBjoern A. Zeeb {
1676dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(5),
1677dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
1678dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1679dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1680dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1681dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1682dd4f32aeSBjoern A. Zeeb },
1683dd4f32aeSBjoern A. Zeeb
1684dd4f32aeSBjoern A. Zeeb /* CE6: Reserved for target autonomous hif_memcpy */
1685dd4f32aeSBjoern A. Zeeb {
1686dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(6),
1687dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
1688dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1689dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(16384),
1690dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1691dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1692dd4f32aeSBjoern A. Zeeb },
1693dd4f32aeSBjoern A. Zeeb
1694dd4f32aeSBjoern A. Zeeb /* CE7 used only by Host */
1695dd4f32aeSBjoern A. Zeeb {
1696dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(7),
1697dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_INOUT_H2H),
1698dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(0),
1699dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(0),
1700dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
1701dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1702dd4f32aeSBjoern A. Zeeb },
1703dd4f32aeSBjoern A. Zeeb
1704dd4f32aeSBjoern A. Zeeb /* CE8 target->host used only by IPA */
1705dd4f32aeSBjoern A. Zeeb {
1706dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(8),
1707dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
1708dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1709dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(16384),
1710dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1711dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1712dd4f32aeSBjoern A. Zeeb },
1713dd4f32aeSBjoern A. Zeeb /* CE 9, 10, 11 are used by MHI driver */
1714dd4f32aeSBjoern A. Zeeb };
1715dd4f32aeSBjoern A. Zeeb
1716dd4f32aeSBjoern A. Zeeb /* Map from service/endpoint to Copy Engine.
1717dd4f32aeSBjoern A. Zeeb * This table is derived from the CE_PCI TABLE, above.
1718dd4f32aeSBjoern A. Zeeb * It is passed to the Target at startup for use by firmware.
1719dd4f32aeSBjoern A. Zeeb */
1720dd4f32aeSBjoern A. Zeeb const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qca6390[] = {
1721dd4f32aeSBjoern A. Zeeb {
1722dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
1723dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1724dd4f32aeSBjoern A. Zeeb __cpu_to_le32(3),
1725dd4f32aeSBjoern A. Zeeb },
1726dd4f32aeSBjoern A. Zeeb {
1727dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
1728dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1729dd4f32aeSBjoern A. Zeeb __cpu_to_le32(2),
1730dd4f32aeSBjoern A. Zeeb },
1731dd4f32aeSBjoern A. Zeeb {
1732dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
1733dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1734dd4f32aeSBjoern A. Zeeb __cpu_to_le32(3),
1735dd4f32aeSBjoern A. Zeeb },
1736dd4f32aeSBjoern A. Zeeb {
1737dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
1738dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1739dd4f32aeSBjoern A. Zeeb __cpu_to_le32(2),
1740dd4f32aeSBjoern A. Zeeb },
1741dd4f32aeSBjoern A. Zeeb {
1742dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
1743dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1744dd4f32aeSBjoern A. Zeeb __cpu_to_le32(3),
1745dd4f32aeSBjoern A. Zeeb },
1746dd4f32aeSBjoern A. Zeeb {
1747dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
1748dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1749dd4f32aeSBjoern A. Zeeb __cpu_to_le32(2),
1750dd4f32aeSBjoern A. Zeeb },
1751dd4f32aeSBjoern A. Zeeb {
1752dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
1753dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1754dd4f32aeSBjoern A. Zeeb __cpu_to_le32(3),
1755dd4f32aeSBjoern A. Zeeb },
1756dd4f32aeSBjoern A. Zeeb {
1757dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
1758dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1759dd4f32aeSBjoern A. Zeeb __cpu_to_le32(2),
1760dd4f32aeSBjoern A. Zeeb },
1761dd4f32aeSBjoern A. Zeeb {
1762dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
1763dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1764dd4f32aeSBjoern A. Zeeb __cpu_to_le32(3),
1765dd4f32aeSBjoern A. Zeeb },
1766dd4f32aeSBjoern A. Zeeb {
1767dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
1768dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1769dd4f32aeSBjoern A. Zeeb __cpu_to_le32(2),
1770dd4f32aeSBjoern A. Zeeb },
1771dd4f32aeSBjoern A. Zeeb {
1772dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
1773dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1774dd4f32aeSBjoern A. Zeeb __cpu_to_le32(0),
1775dd4f32aeSBjoern A. Zeeb },
1776dd4f32aeSBjoern A. Zeeb {
1777dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
1778dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1779dd4f32aeSBjoern A. Zeeb __cpu_to_le32(2),
1780dd4f32aeSBjoern A. Zeeb },
1781dd4f32aeSBjoern A. Zeeb {
1782dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
1783dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1784dd4f32aeSBjoern A. Zeeb __cpu_to_le32(4),
1785dd4f32aeSBjoern A. Zeeb },
1786dd4f32aeSBjoern A. Zeeb {
1787dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
1788dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1789dd4f32aeSBjoern A. Zeeb __cpu_to_le32(1),
1790dd4f32aeSBjoern A. Zeeb },
1791dd4f32aeSBjoern A. Zeeb
1792dd4f32aeSBjoern A. Zeeb /* (Additions here) */
1793dd4f32aeSBjoern A. Zeeb
1794dd4f32aeSBjoern A. Zeeb { /* must be last */
1795dd4f32aeSBjoern A. Zeeb __cpu_to_le32(0),
1796dd4f32aeSBjoern A. Zeeb __cpu_to_le32(0),
1797dd4f32aeSBjoern A. Zeeb __cpu_to_le32(0),
1798dd4f32aeSBjoern A. Zeeb },
1799dd4f32aeSBjoern A. Zeeb };
1800dd4f32aeSBjoern A. Zeeb
1801dd4f32aeSBjoern A. Zeeb /* Target firmware's Copy Engine configuration. */
1802dd4f32aeSBjoern A. Zeeb const struct ce_pipe_config ath11k_target_ce_config_wlan_qcn9074[] = {
1803dd4f32aeSBjoern A. Zeeb /* CE0: host->target HTC control and raw streams */
1804dd4f32aeSBjoern A. Zeeb {
1805dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(0),
1806dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
1807dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1808dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1809dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1810dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1811dd4f32aeSBjoern A. Zeeb },
1812dd4f32aeSBjoern A. Zeeb
1813dd4f32aeSBjoern A. Zeeb /* CE1: target->host HTT + HTC control */
1814dd4f32aeSBjoern A. Zeeb {
1815dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
1816dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
1817dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1818dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1819dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1820dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1821dd4f32aeSBjoern A. Zeeb },
1822dd4f32aeSBjoern A. Zeeb
1823dd4f32aeSBjoern A. Zeeb /* CE2: target->host WMI */
1824dd4f32aeSBjoern A. Zeeb {
1825dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
1826dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
1827dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1828dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1829dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1830dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1831dd4f32aeSBjoern A. Zeeb },
1832dd4f32aeSBjoern A. Zeeb
1833dd4f32aeSBjoern A. Zeeb /* CE3: host->target WMI */
1834dd4f32aeSBjoern A. Zeeb {
1835dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
1836dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
1837dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1838dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1839dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1840dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1841dd4f32aeSBjoern A. Zeeb },
1842dd4f32aeSBjoern A. Zeeb
1843dd4f32aeSBjoern A. Zeeb /* CE4: host->target HTT */
1844dd4f32aeSBjoern A. Zeeb {
1845dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(4),
1846dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
1847dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(256),
1848dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(256),
1849dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
1850dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1851dd4f32aeSBjoern A. Zeeb },
1852dd4f32aeSBjoern A. Zeeb
1853dd4f32aeSBjoern A. Zeeb /* CE5: target->host Pktlog */
1854dd4f32aeSBjoern A. Zeeb {
1855dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(5),
1856dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
1857dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1858dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
1859dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1860dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1861dd4f32aeSBjoern A. Zeeb },
1862dd4f32aeSBjoern A. Zeeb
1863dd4f32aeSBjoern A. Zeeb /* CE6: Reserved for target autonomous hif_memcpy */
1864dd4f32aeSBjoern A. Zeeb {
1865dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(6),
1866dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
1867dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1868dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(16384),
1869dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1870dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1871dd4f32aeSBjoern A. Zeeb },
1872dd4f32aeSBjoern A. Zeeb
1873dd4f32aeSBjoern A. Zeeb /* CE7 used only by Host */
1874dd4f32aeSBjoern A. Zeeb {
1875dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(7),
1876dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_INOUT_H2H),
1877dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(0),
1878dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(0),
1879dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
1880dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1881dd4f32aeSBjoern A. Zeeb },
1882dd4f32aeSBjoern A. Zeeb
1883dd4f32aeSBjoern A. Zeeb /* CE8 target->host used only by IPA */
1884dd4f32aeSBjoern A. Zeeb {
1885dd4f32aeSBjoern A. Zeeb .pipenum = __cpu_to_le32(8),
1886dd4f32aeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
1887dd4f32aeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
1888dd4f32aeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(16384),
1889dd4f32aeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
1890dd4f32aeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
1891dd4f32aeSBjoern A. Zeeb },
1892dd4f32aeSBjoern A. Zeeb /* CE 9, 10, 11 are used by MHI driver */
1893dd4f32aeSBjoern A. Zeeb };
1894dd4f32aeSBjoern A. Zeeb
1895dd4f32aeSBjoern A. Zeeb /* Map from service/endpoint to Copy Engine.
1896dd4f32aeSBjoern A. Zeeb * This table is derived from the CE_PCI TABLE, above.
1897dd4f32aeSBjoern A. Zeeb * It is passed to the Target at startup for use by firmware.
1898dd4f32aeSBjoern A. Zeeb */
1899dd4f32aeSBjoern A. Zeeb const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qcn9074[] = {
1900dd4f32aeSBjoern A. Zeeb {
1901dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
1902dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1903dd4f32aeSBjoern A. Zeeb __cpu_to_le32(3),
1904dd4f32aeSBjoern A. Zeeb },
1905dd4f32aeSBjoern A. Zeeb {
1906dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
1907dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1908dd4f32aeSBjoern A. Zeeb __cpu_to_le32(2),
1909dd4f32aeSBjoern A. Zeeb },
1910dd4f32aeSBjoern A. Zeeb {
1911dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
1912dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1913dd4f32aeSBjoern A. Zeeb __cpu_to_le32(3),
1914dd4f32aeSBjoern A. Zeeb },
1915dd4f32aeSBjoern A. Zeeb {
1916dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
1917dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1918dd4f32aeSBjoern A. Zeeb __cpu_to_le32(2),
1919dd4f32aeSBjoern A. Zeeb },
1920dd4f32aeSBjoern A. Zeeb {
1921dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
1922dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1923dd4f32aeSBjoern A. Zeeb __cpu_to_le32(3),
1924dd4f32aeSBjoern A. Zeeb },
1925dd4f32aeSBjoern A. Zeeb {
1926dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
1927dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1928dd4f32aeSBjoern A. Zeeb __cpu_to_le32(2),
1929dd4f32aeSBjoern A. Zeeb },
1930dd4f32aeSBjoern A. Zeeb {
1931dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
1932dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1933dd4f32aeSBjoern A. Zeeb __cpu_to_le32(3),
1934dd4f32aeSBjoern A. Zeeb },
1935dd4f32aeSBjoern A. Zeeb {
1936dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
1937dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1938dd4f32aeSBjoern A. Zeeb __cpu_to_le32(2),
1939dd4f32aeSBjoern A. Zeeb },
1940dd4f32aeSBjoern A. Zeeb {
1941dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
1942dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1943dd4f32aeSBjoern A. Zeeb __cpu_to_le32(3),
1944dd4f32aeSBjoern A. Zeeb },
1945dd4f32aeSBjoern A. Zeeb {
1946dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
1947dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1948dd4f32aeSBjoern A. Zeeb __cpu_to_le32(2),
1949dd4f32aeSBjoern A. Zeeb },
1950dd4f32aeSBjoern A. Zeeb {
1951dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
1952dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1953dd4f32aeSBjoern A. Zeeb __cpu_to_le32(0),
1954dd4f32aeSBjoern A. Zeeb },
1955dd4f32aeSBjoern A. Zeeb {
1956dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
1957dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1958dd4f32aeSBjoern A. Zeeb __cpu_to_le32(1),
1959dd4f32aeSBjoern A. Zeeb },
1960dd4f32aeSBjoern A. Zeeb {
1961dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
1962dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1963dd4f32aeSBjoern A. Zeeb __cpu_to_le32(0),
1964dd4f32aeSBjoern A. Zeeb },
1965dd4f32aeSBjoern A. Zeeb {
1966dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
1967dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1968dd4f32aeSBjoern A. Zeeb __cpu_to_le32(1),
1969dd4f32aeSBjoern A. Zeeb },
1970dd4f32aeSBjoern A. Zeeb {
1971dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
1972dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
1973dd4f32aeSBjoern A. Zeeb __cpu_to_le32(4),
1974dd4f32aeSBjoern A. Zeeb },
1975dd4f32aeSBjoern A. Zeeb {
1976dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
1977dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1978dd4f32aeSBjoern A. Zeeb __cpu_to_le32(1),
1979dd4f32aeSBjoern A. Zeeb },
1980dd4f32aeSBjoern A. Zeeb {
1981dd4f32aeSBjoern A. Zeeb __cpu_to_le32(ATH11K_HTC_SVC_ID_PKT_LOG),
1982dd4f32aeSBjoern A. Zeeb __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
1983dd4f32aeSBjoern A. Zeeb __cpu_to_le32(5),
1984dd4f32aeSBjoern A. Zeeb },
1985dd4f32aeSBjoern A. Zeeb
1986dd4f32aeSBjoern A. Zeeb /* (Additions here) */
1987dd4f32aeSBjoern A. Zeeb
1988dd4f32aeSBjoern A. Zeeb { /* must be last */
1989dd4f32aeSBjoern A. Zeeb __cpu_to_le32(0),
1990dd4f32aeSBjoern A. Zeeb __cpu_to_le32(0),
1991dd4f32aeSBjoern A. Zeeb __cpu_to_le32(0),
1992dd4f32aeSBjoern A. Zeeb },
1993dd4f32aeSBjoern A. Zeeb };
1994dd4f32aeSBjoern A. Zeeb
1995dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qcn9074 = {
1996dd4f32aeSBjoern A. Zeeb .tx = {
1997dd4f32aeSBjoern A. Zeeb ATH11K_TX_RING_MASK_0,
1998dd4f32aeSBjoern A. Zeeb ATH11K_TX_RING_MASK_1,
1999dd4f32aeSBjoern A. Zeeb ATH11K_TX_RING_MASK_2,
2000dd4f32aeSBjoern A. Zeeb },
2001dd4f32aeSBjoern A. Zeeb .rx_mon_status = {
2002dd4f32aeSBjoern A. Zeeb 0, 0, 0,
2003dd4f32aeSBjoern A. Zeeb ATH11K_RX_MON_STATUS_RING_MASK_0,
2004dd4f32aeSBjoern A. Zeeb ATH11K_RX_MON_STATUS_RING_MASK_1,
2005dd4f32aeSBjoern A. Zeeb ATH11K_RX_MON_STATUS_RING_MASK_2,
2006dd4f32aeSBjoern A. Zeeb },
2007dd4f32aeSBjoern A. Zeeb .rx = {
2008dd4f32aeSBjoern A. Zeeb 0, 0, 0, 0,
2009dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_0,
2010dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_1,
2011dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_2,
2012dd4f32aeSBjoern A. Zeeb ATH11K_RX_RING_MASK_3,
2013dd4f32aeSBjoern A. Zeeb },
2014dd4f32aeSBjoern A. Zeeb .rx_err = {
2015dd4f32aeSBjoern A. Zeeb 0, 0, 0,
2016dd4f32aeSBjoern A. Zeeb ATH11K_RX_ERR_RING_MASK_0,
2017dd4f32aeSBjoern A. Zeeb },
2018dd4f32aeSBjoern A. Zeeb .rx_wbm_rel = {
2019dd4f32aeSBjoern A. Zeeb 0, 0, 0,
2020dd4f32aeSBjoern A. Zeeb ATH11K_RX_WBM_REL_RING_MASK_0,
2021dd4f32aeSBjoern A. Zeeb },
2022dd4f32aeSBjoern A. Zeeb .reo_status = {
2023dd4f32aeSBjoern A. Zeeb 0, 0, 0,
2024dd4f32aeSBjoern A. Zeeb ATH11K_REO_STATUS_RING_MASK_0,
2025dd4f32aeSBjoern A. Zeeb },
2026dd4f32aeSBjoern A. Zeeb .rxdma2host = {
2027dd4f32aeSBjoern A. Zeeb 0, 0, 0,
2028dd4f32aeSBjoern A. Zeeb ATH11K_RXDMA2HOST_RING_MASK_0,
2029dd4f32aeSBjoern A. Zeeb },
2030dd4f32aeSBjoern A. Zeeb .host2rxdma = {
2031dd4f32aeSBjoern A. Zeeb 0, 0, 0,
2032dd4f32aeSBjoern A. Zeeb ATH11K_HOST2RXDMA_RING_MASK_0,
2033dd4f32aeSBjoern A. Zeeb },
2034dd4f32aeSBjoern A. Zeeb };
2035dd4f32aeSBjoern A. Zeeb
2036*28348caeSBjoern A. Zeeb const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_wcn6750 = {
2037*28348caeSBjoern A. Zeeb .tx = {
2038*28348caeSBjoern A. Zeeb ATH11K_TX_RING_MASK_0,
2039*28348caeSBjoern A. Zeeb 0,
2040*28348caeSBjoern A. Zeeb ATH11K_TX_RING_MASK_2,
2041*28348caeSBjoern A. Zeeb 0,
2042*28348caeSBjoern A. Zeeb ATH11K_TX_RING_MASK_4,
2043*28348caeSBjoern A. Zeeb },
2044*28348caeSBjoern A. Zeeb .rx_mon_status = {
2045*28348caeSBjoern A. Zeeb 0, 0, 0, 0, 0, 0,
2046*28348caeSBjoern A. Zeeb ATH11K_RX_MON_STATUS_RING_MASK_0,
2047*28348caeSBjoern A. Zeeb },
2048*28348caeSBjoern A. Zeeb .rx = {
2049*28348caeSBjoern A. Zeeb 0, 0, 0, 0, 0, 0, 0,
2050*28348caeSBjoern A. Zeeb ATH11K_RX_RING_MASK_0,
2051*28348caeSBjoern A. Zeeb ATH11K_RX_RING_MASK_1,
2052*28348caeSBjoern A. Zeeb ATH11K_RX_RING_MASK_2,
2053*28348caeSBjoern A. Zeeb ATH11K_RX_RING_MASK_3,
2054*28348caeSBjoern A. Zeeb },
2055*28348caeSBjoern A. Zeeb .rx_err = {
2056*28348caeSBjoern A. Zeeb 0, ATH11K_RX_ERR_RING_MASK_0,
2057*28348caeSBjoern A. Zeeb },
2058*28348caeSBjoern A. Zeeb .rx_wbm_rel = {
2059*28348caeSBjoern A. Zeeb 0, ATH11K_RX_WBM_REL_RING_MASK_0,
2060*28348caeSBjoern A. Zeeb },
2061*28348caeSBjoern A. Zeeb .reo_status = {
2062*28348caeSBjoern A. Zeeb 0, ATH11K_REO_STATUS_RING_MASK_0,
2063*28348caeSBjoern A. Zeeb },
2064*28348caeSBjoern A. Zeeb .rxdma2host = {
2065*28348caeSBjoern A. Zeeb ATH11K_RXDMA2HOST_RING_MASK_0,
2066*28348caeSBjoern A. Zeeb ATH11K_RXDMA2HOST_RING_MASK_1,
2067*28348caeSBjoern A. Zeeb ATH11K_RXDMA2HOST_RING_MASK_2,
2068*28348caeSBjoern A. Zeeb },
2069*28348caeSBjoern A. Zeeb .host2rxdma = {
2070*28348caeSBjoern A. Zeeb },
2071*28348caeSBjoern A. Zeeb };
2072*28348caeSBjoern A. Zeeb
2073*28348caeSBjoern A. Zeeb /* Target firmware's Copy Engine configuration for IPQ5018 */
2074*28348caeSBjoern A. Zeeb const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq5018[] = {
2075*28348caeSBjoern A. Zeeb /* CE0: host->target HTC control and raw streams */
2076*28348caeSBjoern A. Zeeb {
2077*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(0),
2078*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
2079*28348caeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
2080*28348caeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
2081*28348caeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
2082*28348caeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
2083*28348caeSBjoern A. Zeeb },
2084*28348caeSBjoern A. Zeeb
2085*28348caeSBjoern A. Zeeb /* CE1: target->host HTT + HTC control */
2086*28348caeSBjoern A. Zeeb {
2087*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
2088*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
2089*28348caeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
2090*28348caeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
2091*28348caeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
2092*28348caeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
2093*28348caeSBjoern A. Zeeb },
2094*28348caeSBjoern A. Zeeb
2095*28348caeSBjoern A. Zeeb /* CE2: target->host WMI */
2096*28348caeSBjoern A. Zeeb {
2097*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
2098*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
2099*28348caeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
2100*28348caeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
2101*28348caeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
2102*28348caeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
2103*28348caeSBjoern A. Zeeb },
2104*28348caeSBjoern A. Zeeb
2105*28348caeSBjoern A. Zeeb /* CE3: host->target WMI */
2106*28348caeSBjoern A. Zeeb {
2107*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
2108*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
2109*28348caeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
2110*28348caeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
2111*28348caeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
2112*28348caeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
2113*28348caeSBjoern A. Zeeb },
2114*28348caeSBjoern A. Zeeb
2115*28348caeSBjoern A. Zeeb /* CE4: host->target HTT */
2116*28348caeSBjoern A. Zeeb {
2117*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(4),
2118*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
2119*28348caeSBjoern A. Zeeb .nentries = __cpu_to_le32(256),
2120*28348caeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(256),
2121*28348caeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
2122*28348caeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
2123*28348caeSBjoern A. Zeeb },
2124*28348caeSBjoern A. Zeeb
2125*28348caeSBjoern A. Zeeb /* CE5: target->host Pktlog */
2126*28348caeSBjoern A. Zeeb {
2127*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(5),
2128*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN),
2129*28348caeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
2130*28348caeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
2131*28348caeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
2132*28348caeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
2133*28348caeSBjoern A. Zeeb },
2134*28348caeSBjoern A. Zeeb
2135*28348caeSBjoern A. Zeeb /* CE6: Reserved for target autonomous hif_memcpy */
2136*28348caeSBjoern A. Zeeb {
2137*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(6),
2138*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
2139*28348caeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
2140*28348caeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(16384),
2141*28348caeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
2142*28348caeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
2143*28348caeSBjoern A. Zeeb },
2144*28348caeSBjoern A. Zeeb
2145*28348caeSBjoern A. Zeeb /* CE7 used only by Host */
2146*28348caeSBjoern A. Zeeb {
2147*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(7),
2148*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT),
2149*28348caeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
2150*28348caeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(2048),
2151*28348caeSBjoern A. Zeeb .flags = __cpu_to_le32(0x2000),
2152*28348caeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
2153*28348caeSBjoern A. Zeeb },
2154*28348caeSBjoern A. Zeeb
2155*28348caeSBjoern A. Zeeb /* CE8 target->host used only by IPA */
2156*28348caeSBjoern A. Zeeb {
2157*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(8),
2158*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
2159*28348caeSBjoern A. Zeeb .nentries = __cpu_to_le32(32),
2160*28348caeSBjoern A. Zeeb .nbytes_max = __cpu_to_le32(16384),
2161*28348caeSBjoern A. Zeeb .flags = __cpu_to_le32(CE_ATTR_FLAGS),
2162*28348caeSBjoern A. Zeeb .reserved = __cpu_to_le32(0),
2163*28348caeSBjoern A. Zeeb },
2164*28348caeSBjoern A. Zeeb };
2165*28348caeSBjoern A. Zeeb
2166*28348caeSBjoern A. Zeeb /* Map from service/endpoint to Copy Engine for IPQ5018.
2167*28348caeSBjoern A. Zeeb * This table is derived from the CE TABLE, above.
2168*28348caeSBjoern A. Zeeb * It is passed to the Target at startup for use by firmware.
2169*28348caeSBjoern A. Zeeb */
2170*28348caeSBjoern A. Zeeb const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq5018[] = {
2171*28348caeSBjoern A. Zeeb {
2172*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
2173*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
2174*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
2175*28348caeSBjoern A. Zeeb },
2176*28348caeSBjoern A. Zeeb {
2177*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
2178*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
2179*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
2180*28348caeSBjoern A. Zeeb },
2181*28348caeSBjoern A. Zeeb {
2182*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
2183*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
2184*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
2185*28348caeSBjoern A. Zeeb },
2186*28348caeSBjoern A. Zeeb {
2187*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
2188*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
2189*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
2190*28348caeSBjoern A. Zeeb },
2191*28348caeSBjoern A. Zeeb {
2192*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
2193*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
2194*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
2195*28348caeSBjoern A. Zeeb },
2196*28348caeSBjoern A. Zeeb {
2197*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
2198*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
2199*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
2200*28348caeSBjoern A. Zeeb },
2201*28348caeSBjoern A. Zeeb {
2202*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
2203*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
2204*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
2205*28348caeSBjoern A. Zeeb },
2206*28348caeSBjoern A. Zeeb {
2207*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
2208*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
2209*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
2210*28348caeSBjoern A. Zeeb },
2211*28348caeSBjoern A. Zeeb {
2212*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
2213*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
2214*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(3),
2215*28348caeSBjoern A. Zeeb },
2216*28348caeSBjoern A. Zeeb {
2217*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
2218*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
2219*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(2),
2220*28348caeSBjoern A. Zeeb },
2221*28348caeSBjoern A. Zeeb
2222*28348caeSBjoern A. Zeeb {
2223*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
2224*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
2225*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(0),
2226*28348caeSBjoern A. Zeeb },
2227*28348caeSBjoern A. Zeeb {
2228*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
2229*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
2230*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
2231*28348caeSBjoern A. Zeeb },
2232*28348caeSBjoern A. Zeeb
2233*28348caeSBjoern A. Zeeb {
2234*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
2235*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
2236*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(0),
2237*28348caeSBjoern A. Zeeb },
2238*28348caeSBjoern A. Zeeb {
2239*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
2240*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
2241*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
2242*28348caeSBjoern A. Zeeb },
2243*28348caeSBjoern A. Zeeb {
2244*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
2245*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
2246*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(4),
2247*28348caeSBjoern A. Zeeb },
2248*28348caeSBjoern A. Zeeb {
2249*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
2250*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
2251*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(1),
2252*28348caeSBjoern A. Zeeb },
2253*28348caeSBjoern A. Zeeb {
2254*28348caeSBjoern A. Zeeb .service_id = __cpu_to_le32(ATH11K_HTC_SVC_ID_PKT_LOG),
2255*28348caeSBjoern A. Zeeb .pipedir = __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
2256*28348caeSBjoern A. Zeeb .pipenum = __cpu_to_le32(5),
2257*28348caeSBjoern A. Zeeb },
2258*28348caeSBjoern A. Zeeb
2259*28348caeSBjoern A. Zeeb /* (Additions here) */
2260*28348caeSBjoern A. Zeeb
2261*28348caeSBjoern A. Zeeb { /* terminator entry */ }
2262*28348caeSBjoern A. Zeeb };
2263*28348caeSBjoern A. Zeeb
2264*28348caeSBjoern A. Zeeb const struct ce_ie_addr ath11k_ce_ie_addr_ipq8074 = {
2265*28348caeSBjoern A. Zeeb .ie1_reg_addr = CE_HOST_IE_ADDRESS,
2266*28348caeSBjoern A. Zeeb .ie2_reg_addr = CE_HOST_IE_2_ADDRESS,
2267*28348caeSBjoern A. Zeeb .ie3_reg_addr = CE_HOST_IE_3_ADDRESS,
2268*28348caeSBjoern A. Zeeb };
2269*28348caeSBjoern A. Zeeb
2270*28348caeSBjoern A. Zeeb const struct ce_ie_addr ath11k_ce_ie_addr_ipq5018 = {
2271*28348caeSBjoern A. Zeeb .ie1_reg_addr = CE_HOST_IPQ5018_IE_ADDRESS - HAL_IPQ5018_CE_WFSS_REG_BASE,
2272*28348caeSBjoern A. Zeeb .ie2_reg_addr = CE_HOST_IPQ5018_IE_2_ADDRESS - HAL_IPQ5018_CE_WFSS_REG_BASE,
2273*28348caeSBjoern A. Zeeb .ie3_reg_addr = CE_HOST_IPQ5018_IE_3_ADDRESS - HAL_IPQ5018_CE_WFSS_REG_BASE,
2274*28348caeSBjoern A. Zeeb };
2275*28348caeSBjoern A. Zeeb
2276*28348caeSBjoern A. Zeeb const struct ce_remap ath11k_ce_remap_ipq5018 = {
2277*28348caeSBjoern A. Zeeb .base = HAL_IPQ5018_CE_WFSS_REG_BASE,
2278*28348caeSBjoern A. Zeeb .size = HAL_IPQ5018_CE_SIZE,
2279*28348caeSBjoern A. Zeeb };
2280*28348caeSBjoern A. Zeeb
2281dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_regs ipq8074_regs = {
2282dd4f32aeSBjoern A. Zeeb /* SW2TCL(x) R0 ring configuration address */
2283dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_base_lsb = 0x00000510,
2284dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_base_msb = 0x00000514,
2285dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_id = 0x00000518,
2286dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_misc = 0x00000520,
2287dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_lsb = 0x0000052c,
2288dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_msb = 0x00000530,
2289dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix0 = 0x00000540,
2290dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix1 = 0x00000544,
2291dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_lsb = 0x00000558,
2292dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_msb = 0x0000055c,
2293dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_data = 0x00000560,
2294dd4f32aeSBjoern A. Zeeb .hal_tcl2_ring_base_lsb = 0x00000568,
2295dd4f32aeSBjoern A. Zeeb .hal_tcl_ring_base_lsb = 0x00000618,
2296dd4f32aeSBjoern A. Zeeb
2297dd4f32aeSBjoern A. Zeeb /* TCL STATUS ring address */
2298dd4f32aeSBjoern A. Zeeb .hal_tcl_status_ring_base_lsb = 0x00000720,
2299dd4f32aeSBjoern A. Zeeb
2300dd4f32aeSBjoern A. Zeeb /* REO2SW(x) R0 ring configuration address */
2301dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_base_lsb = 0x0000029c,
2302dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_base_msb = 0x000002a0,
2303dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_id = 0x000002a4,
2304dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_misc = 0x000002ac,
2305dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_lsb = 0x000002b0,
2306dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_msb = 0x000002b4,
2307dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_producer_int_setup = 0x000002c0,
2308dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_lsb = 0x000002e4,
2309dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_msb = 0x000002e8,
2310dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_data = 0x000002ec,
2311dd4f32aeSBjoern A. Zeeb .hal_reo2_ring_base_lsb = 0x000002f4,
2312dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_0 = 0x00000564,
2313dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_1 = 0x00000568,
2314dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_2 = 0x0000056c,
2315dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_3 = 0x00000570,
2316dd4f32aeSBjoern A. Zeeb
2317dd4f32aeSBjoern A. Zeeb /* REO2SW(x) R2 ring pointers (head/tail) address */
2318dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp = 0x00003038,
2319dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_tp = 0x0000303c,
2320dd4f32aeSBjoern A. Zeeb .hal_reo2_ring_hp = 0x00003040,
2321dd4f32aeSBjoern A. Zeeb
2322dd4f32aeSBjoern A. Zeeb /* REO2TCL R0 ring configuration address */
2323dd4f32aeSBjoern A. Zeeb .hal_reo_tcl_ring_base_lsb = 0x000003fc,
2324dd4f32aeSBjoern A. Zeeb .hal_reo_tcl_ring_hp = 0x00003058,
2325dd4f32aeSBjoern A. Zeeb
2326*28348caeSBjoern A. Zeeb /* REO CMD ring address */
2327*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_base_lsb = 0x00000194,
2328*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_hp = 0x00003020,
2329*28348caeSBjoern A. Zeeb
2330dd4f32aeSBjoern A. Zeeb /* REO status address */
2331dd4f32aeSBjoern A. Zeeb .hal_reo_status_ring_base_lsb = 0x00000504,
2332dd4f32aeSBjoern A. Zeeb .hal_reo_status_hp = 0x00003070,
2333dd4f32aeSBjoern A. Zeeb
2334*28348caeSBjoern A. Zeeb /* SW2REO ring address */
2335*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_base_lsb = 0x000001ec,
2336*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_hp = 0x00003028,
2337*28348caeSBjoern A. Zeeb
2338dd4f32aeSBjoern A. Zeeb /* WCSS relative address */
2339dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_src_reg = 0x00a00000,
2340dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_dst_reg = 0x00a01000,
2341dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_src_reg = 0x00a02000,
2342dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_dst_reg = 0x00a03000,
2343dd4f32aeSBjoern A. Zeeb
2344dd4f32aeSBjoern A. Zeeb /* WBM Idle address */
2345dd4f32aeSBjoern A. Zeeb .hal_wbm_idle_link_ring_base_lsb = 0x00000860,
2346dd4f32aeSBjoern A. Zeeb .hal_wbm_idle_link_ring_misc = 0x00000870,
2347dd4f32aeSBjoern A. Zeeb
2348dd4f32aeSBjoern A. Zeeb /* SW2WBM release address */
2349dd4f32aeSBjoern A. Zeeb .hal_wbm_release_ring_base_lsb = 0x000001d8,
2350dd4f32aeSBjoern A. Zeeb
2351dd4f32aeSBjoern A. Zeeb /* WBM2SW release address */
2352dd4f32aeSBjoern A. Zeeb .hal_wbm0_release_ring_base_lsb = 0x00000910,
2353dd4f32aeSBjoern A. Zeeb .hal_wbm1_release_ring_base_lsb = 0x00000968,
2354dd4f32aeSBjoern A. Zeeb
2355dd4f32aeSBjoern A. Zeeb /* PCIe base address */
2356dd4f32aeSBjoern A. Zeeb .pcie_qserdes_sysclk_en_sel = 0x0,
2357dd4f32aeSBjoern A. Zeeb .pcie_pcs_osc_dtct_config_base = 0x0,
2358*28348caeSBjoern A. Zeeb
2359*28348caeSBjoern A. Zeeb /* Shadow register area */
2360*28348caeSBjoern A. Zeeb .hal_shadow_base_addr = 0x0,
2361*28348caeSBjoern A. Zeeb
2362*28348caeSBjoern A. Zeeb /* REO misc control register, not used in IPQ8074 */
2363*28348caeSBjoern A. Zeeb .hal_reo1_misc_ctl = 0x0,
2364dd4f32aeSBjoern A. Zeeb };
2365dd4f32aeSBjoern A. Zeeb
2366dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_regs qca6390_regs = {
2367dd4f32aeSBjoern A. Zeeb /* SW2TCL(x) R0 ring configuration address */
2368dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_base_lsb = 0x00000684,
2369dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_base_msb = 0x00000688,
2370dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_id = 0x0000068c,
2371dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_misc = 0x00000694,
2372dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_lsb = 0x000006a0,
2373dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_msb = 0x000006a4,
2374dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix0 = 0x000006b4,
2375dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix1 = 0x000006b8,
2376dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_lsb = 0x000006cc,
2377dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_msb = 0x000006d0,
2378dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_data = 0x000006d4,
2379dd4f32aeSBjoern A. Zeeb .hal_tcl2_ring_base_lsb = 0x000006dc,
2380dd4f32aeSBjoern A. Zeeb .hal_tcl_ring_base_lsb = 0x0000078c,
2381dd4f32aeSBjoern A. Zeeb
2382dd4f32aeSBjoern A. Zeeb /* TCL STATUS ring address */
2383dd4f32aeSBjoern A. Zeeb .hal_tcl_status_ring_base_lsb = 0x00000894,
2384dd4f32aeSBjoern A. Zeeb
2385dd4f32aeSBjoern A. Zeeb /* REO2SW(x) R0 ring configuration address */
2386dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_base_lsb = 0x00000244,
2387dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_base_msb = 0x00000248,
2388dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_id = 0x0000024c,
2389dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_misc = 0x00000254,
2390dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_lsb = 0x00000258,
2391dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_msb = 0x0000025c,
2392dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_producer_int_setup = 0x00000268,
2393dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_lsb = 0x0000028c,
2394dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_msb = 0x00000290,
2395dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_data = 0x00000294,
2396dd4f32aeSBjoern A. Zeeb .hal_reo2_ring_base_lsb = 0x0000029c,
2397dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_0 = 0x0000050c,
2398dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_1 = 0x00000510,
2399dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_2 = 0x00000514,
2400dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_3 = 0x00000518,
2401dd4f32aeSBjoern A. Zeeb
2402dd4f32aeSBjoern A. Zeeb /* REO2SW(x) R2 ring pointers (head/tail) address */
2403dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp = 0x00003030,
2404dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_tp = 0x00003034,
2405dd4f32aeSBjoern A. Zeeb .hal_reo2_ring_hp = 0x00003038,
2406dd4f32aeSBjoern A. Zeeb
2407dd4f32aeSBjoern A. Zeeb /* REO2TCL R0 ring configuration address */
2408dd4f32aeSBjoern A. Zeeb .hal_reo_tcl_ring_base_lsb = 0x000003a4,
2409dd4f32aeSBjoern A. Zeeb .hal_reo_tcl_ring_hp = 0x00003050,
2410dd4f32aeSBjoern A. Zeeb
2411*28348caeSBjoern A. Zeeb /* REO CMD ring address */
2412*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_base_lsb = 0x00000194,
2413*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_hp = 0x00003020,
2414*28348caeSBjoern A. Zeeb
2415dd4f32aeSBjoern A. Zeeb /* REO status address */
2416dd4f32aeSBjoern A. Zeeb .hal_reo_status_ring_base_lsb = 0x000004ac,
2417dd4f32aeSBjoern A. Zeeb .hal_reo_status_hp = 0x00003068,
2418dd4f32aeSBjoern A. Zeeb
2419*28348caeSBjoern A. Zeeb /* SW2REO ring address */
2420*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_base_lsb = 0x000001ec,
2421*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_hp = 0x00003028,
2422*28348caeSBjoern A. Zeeb
2423dd4f32aeSBjoern A. Zeeb /* WCSS relative address */
2424dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_src_reg = 0x00a00000,
2425dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_dst_reg = 0x00a01000,
2426dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_src_reg = 0x00a02000,
2427dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_dst_reg = 0x00a03000,
2428dd4f32aeSBjoern A. Zeeb
2429dd4f32aeSBjoern A. Zeeb /* WBM Idle address */
2430dd4f32aeSBjoern A. Zeeb .hal_wbm_idle_link_ring_base_lsb = 0x00000860,
2431dd4f32aeSBjoern A. Zeeb .hal_wbm_idle_link_ring_misc = 0x00000870,
2432dd4f32aeSBjoern A. Zeeb
2433dd4f32aeSBjoern A. Zeeb /* SW2WBM release address */
2434dd4f32aeSBjoern A. Zeeb .hal_wbm_release_ring_base_lsb = 0x000001d8,
2435dd4f32aeSBjoern A. Zeeb
2436dd4f32aeSBjoern A. Zeeb /* WBM2SW release address */
2437dd4f32aeSBjoern A. Zeeb .hal_wbm0_release_ring_base_lsb = 0x00000910,
2438dd4f32aeSBjoern A. Zeeb .hal_wbm1_release_ring_base_lsb = 0x00000968,
2439dd4f32aeSBjoern A. Zeeb
2440dd4f32aeSBjoern A. Zeeb /* PCIe base address */
2441dd4f32aeSBjoern A. Zeeb .pcie_qserdes_sysclk_en_sel = 0x01e0c0ac,
2442dd4f32aeSBjoern A. Zeeb .pcie_pcs_osc_dtct_config_base = 0x01e0c628,
2443*28348caeSBjoern A. Zeeb
2444*28348caeSBjoern A. Zeeb /* Shadow register area */
2445*28348caeSBjoern A. Zeeb .hal_shadow_base_addr = 0x000008fc,
2446*28348caeSBjoern A. Zeeb
2447*28348caeSBjoern A. Zeeb /* REO misc control register, not used in QCA6390 */
2448*28348caeSBjoern A. Zeeb .hal_reo1_misc_ctl = 0x0,
2449dd4f32aeSBjoern A. Zeeb };
2450dd4f32aeSBjoern A. Zeeb
2451dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_regs qcn9074_regs = {
2452dd4f32aeSBjoern A. Zeeb /* SW2TCL(x) R0 ring configuration address */
2453dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_base_lsb = 0x000004f0,
2454dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_base_msb = 0x000004f4,
2455dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_id = 0x000004f8,
2456dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_misc = 0x00000500,
2457dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_lsb = 0x0000050c,
2458dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_msb = 0x00000510,
2459dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix0 = 0x00000520,
2460dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix1 = 0x00000524,
2461dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_lsb = 0x00000538,
2462dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_msb = 0x0000053c,
2463dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_data = 0x00000540,
2464dd4f32aeSBjoern A. Zeeb .hal_tcl2_ring_base_lsb = 0x00000548,
2465dd4f32aeSBjoern A. Zeeb .hal_tcl_ring_base_lsb = 0x000005f8,
2466dd4f32aeSBjoern A. Zeeb
2467dd4f32aeSBjoern A. Zeeb /* TCL STATUS ring address */
2468dd4f32aeSBjoern A. Zeeb .hal_tcl_status_ring_base_lsb = 0x00000700,
2469dd4f32aeSBjoern A. Zeeb
2470dd4f32aeSBjoern A. Zeeb /* REO2SW(x) R0 ring configuration address */
2471dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_base_lsb = 0x0000029c,
2472dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_base_msb = 0x000002a0,
2473dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_id = 0x000002a4,
2474dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_misc = 0x000002ac,
2475dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_lsb = 0x000002b0,
2476dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_msb = 0x000002b4,
2477dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_producer_int_setup = 0x000002c0,
2478dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_lsb = 0x000002e4,
2479dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_msb = 0x000002e8,
2480dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_data = 0x000002ec,
2481dd4f32aeSBjoern A. Zeeb .hal_reo2_ring_base_lsb = 0x000002f4,
2482dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_0 = 0x00000564,
2483dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_1 = 0x00000568,
2484dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_2 = 0x0000056c,
2485dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_3 = 0x00000570,
2486dd4f32aeSBjoern A. Zeeb
2487dd4f32aeSBjoern A. Zeeb /* REO2SW(x) R2 ring pointers (head/tail) address */
2488dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp = 0x00003038,
2489dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_tp = 0x0000303c,
2490dd4f32aeSBjoern A. Zeeb .hal_reo2_ring_hp = 0x00003040,
2491dd4f32aeSBjoern A. Zeeb
2492dd4f32aeSBjoern A. Zeeb /* REO2TCL R0 ring configuration address */
2493dd4f32aeSBjoern A. Zeeb .hal_reo_tcl_ring_base_lsb = 0x000003fc,
2494dd4f32aeSBjoern A. Zeeb .hal_reo_tcl_ring_hp = 0x00003058,
2495dd4f32aeSBjoern A. Zeeb
2496*28348caeSBjoern A. Zeeb /* REO CMD ring address */
2497*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_base_lsb = 0x00000194,
2498*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_hp = 0x00003020,
2499*28348caeSBjoern A. Zeeb
2500dd4f32aeSBjoern A. Zeeb /* REO status address */
2501dd4f32aeSBjoern A. Zeeb .hal_reo_status_ring_base_lsb = 0x00000504,
2502dd4f32aeSBjoern A. Zeeb .hal_reo_status_hp = 0x00003070,
2503dd4f32aeSBjoern A. Zeeb
2504*28348caeSBjoern A. Zeeb /* SW2REO ring address */
2505*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_base_lsb = 0x000001ec,
2506*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_hp = 0x00003028,
2507*28348caeSBjoern A. Zeeb
2508dd4f32aeSBjoern A. Zeeb /* WCSS relative address */
2509dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_src_reg = 0x01b80000,
2510dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_dst_reg = 0x01b81000,
2511dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_src_reg = 0x01b82000,
2512dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_dst_reg = 0x01b83000,
2513dd4f32aeSBjoern A. Zeeb
2514dd4f32aeSBjoern A. Zeeb /* WBM Idle address */
2515dd4f32aeSBjoern A. Zeeb .hal_wbm_idle_link_ring_base_lsb = 0x00000874,
2516dd4f32aeSBjoern A. Zeeb .hal_wbm_idle_link_ring_misc = 0x00000884,
2517dd4f32aeSBjoern A. Zeeb
2518dd4f32aeSBjoern A. Zeeb /* SW2WBM release address */
2519dd4f32aeSBjoern A. Zeeb .hal_wbm_release_ring_base_lsb = 0x000001ec,
2520dd4f32aeSBjoern A. Zeeb
2521dd4f32aeSBjoern A. Zeeb /* WBM2SW release address */
2522dd4f32aeSBjoern A. Zeeb .hal_wbm0_release_ring_base_lsb = 0x00000924,
2523dd4f32aeSBjoern A. Zeeb .hal_wbm1_release_ring_base_lsb = 0x0000097c,
2524dd4f32aeSBjoern A. Zeeb
2525dd4f32aeSBjoern A. Zeeb /* PCIe base address */
2526dd4f32aeSBjoern A. Zeeb .pcie_qserdes_sysclk_en_sel = 0x01e0e0a8,
2527dd4f32aeSBjoern A. Zeeb .pcie_pcs_osc_dtct_config_base = 0x01e0f45c,
2528*28348caeSBjoern A. Zeeb
2529*28348caeSBjoern A. Zeeb /* Shadow register area */
2530*28348caeSBjoern A. Zeeb .hal_shadow_base_addr = 0x0,
2531*28348caeSBjoern A. Zeeb
2532*28348caeSBjoern A. Zeeb /* REO misc control register, not used in QCN9074 */
2533*28348caeSBjoern A. Zeeb .hal_reo1_misc_ctl = 0x0,
2534dd4f32aeSBjoern A. Zeeb };
2535dd4f32aeSBjoern A. Zeeb
2536dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_regs wcn6855_regs = {
2537dd4f32aeSBjoern A. Zeeb /* SW2TCL(x) R0 ring configuration address */
2538dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_base_lsb = 0x00000690,
2539dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_base_msb = 0x00000694,
2540dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_id = 0x00000698,
2541dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_misc = 0x000006a0,
2542dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_lsb = 0x000006ac,
2543dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_msb = 0x000006b0,
2544dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix0 = 0x000006c0,
2545dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix1 = 0x000006c4,
2546dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_lsb = 0x000006d8,
2547dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_msb = 0x000006dc,
2548dd4f32aeSBjoern A. Zeeb .hal_tcl1_ring_msi1_data = 0x000006e0,
2549dd4f32aeSBjoern A. Zeeb .hal_tcl2_ring_base_lsb = 0x000006e8,
2550dd4f32aeSBjoern A. Zeeb .hal_tcl_ring_base_lsb = 0x00000798,
2551dd4f32aeSBjoern A. Zeeb
2552dd4f32aeSBjoern A. Zeeb /* TCL STATUS ring address */
2553dd4f32aeSBjoern A. Zeeb .hal_tcl_status_ring_base_lsb = 0x000008a0,
2554dd4f32aeSBjoern A. Zeeb
2555dd4f32aeSBjoern A. Zeeb /* REO2SW(x) R0 ring configuration address */
2556dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_base_lsb = 0x00000244,
2557dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_base_msb = 0x00000248,
2558dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_id = 0x0000024c,
2559dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_misc = 0x00000254,
2560dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_lsb = 0x00000258,
2561dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_msb = 0x0000025c,
2562dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_producer_int_setup = 0x00000268,
2563dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_lsb = 0x0000028c,
2564dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_msb = 0x00000290,
2565dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_msi1_data = 0x00000294,
2566dd4f32aeSBjoern A. Zeeb .hal_reo2_ring_base_lsb = 0x0000029c,
2567dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_0 = 0x000005bc,
2568dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_1 = 0x000005c0,
2569dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_2 = 0x000005c4,
2570dd4f32aeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_3 = 0x000005c8,
2571dd4f32aeSBjoern A. Zeeb
2572dd4f32aeSBjoern A. Zeeb /* REO2SW(x) R2 ring pointers (head/tail) address */
2573dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_hp = 0x00003030,
2574dd4f32aeSBjoern A. Zeeb .hal_reo1_ring_tp = 0x00003034,
2575dd4f32aeSBjoern A. Zeeb .hal_reo2_ring_hp = 0x00003038,
2576dd4f32aeSBjoern A. Zeeb
2577dd4f32aeSBjoern A. Zeeb /* REO2TCL R0 ring configuration address */
2578dd4f32aeSBjoern A. Zeeb .hal_reo_tcl_ring_base_lsb = 0x00000454,
2579dd4f32aeSBjoern A. Zeeb .hal_reo_tcl_ring_hp = 0x00003060,
2580dd4f32aeSBjoern A. Zeeb
2581*28348caeSBjoern A. Zeeb /* REO CMD ring address */
2582*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_base_lsb = 0x00000194,
2583*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_hp = 0x00003020,
2584*28348caeSBjoern A. Zeeb
2585dd4f32aeSBjoern A. Zeeb /* REO status address */
2586dd4f32aeSBjoern A. Zeeb .hal_reo_status_ring_base_lsb = 0x0000055c,
2587dd4f32aeSBjoern A. Zeeb .hal_reo_status_hp = 0x00003078,
2588dd4f32aeSBjoern A. Zeeb
2589*28348caeSBjoern A. Zeeb /* SW2REO ring address */
2590*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_base_lsb = 0x000001ec,
2591*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_hp = 0x00003028,
2592*28348caeSBjoern A. Zeeb
2593dd4f32aeSBjoern A. Zeeb /* WCSS relative address */
2594dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_src_reg = 0x1b80000,
2595dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_dst_reg = 0x1b81000,
2596dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_src_reg = 0x1b82000,
2597dd4f32aeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_dst_reg = 0x1b83000,
2598dd4f32aeSBjoern A. Zeeb
2599dd4f32aeSBjoern A. Zeeb /* WBM Idle address */
2600dd4f32aeSBjoern A. Zeeb .hal_wbm_idle_link_ring_base_lsb = 0x00000870,
2601dd4f32aeSBjoern A. Zeeb .hal_wbm_idle_link_ring_misc = 0x00000880,
2602dd4f32aeSBjoern A. Zeeb
2603dd4f32aeSBjoern A. Zeeb /* SW2WBM release address */
2604dd4f32aeSBjoern A. Zeeb .hal_wbm_release_ring_base_lsb = 0x000001e8,
2605dd4f32aeSBjoern A. Zeeb
2606dd4f32aeSBjoern A. Zeeb /* WBM2SW release address */
2607dd4f32aeSBjoern A. Zeeb .hal_wbm0_release_ring_base_lsb = 0x00000920,
2608dd4f32aeSBjoern A. Zeeb .hal_wbm1_release_ring_base_lsb = 0x00000978,
2609dd4f32aeSBjoern A. Zeeb
2610dd4f32aeSBjoern A. Zeeb /* PCIe base address */
2611dd4f32aeSBjoern A. Zeeb .pcie_qserdes_sysclk_en_sel = 0x01e0c0ac,
2612dd4f32aeSBjoern A. Zeeb .pcie_pcs_osc_dtct_config_base = 0x01e0c628,
2613*28348caeSBjoern A. Zeeb
2614*28348caeSBjoern A. Zeeb /* Shadow register area */
2615*28348caeSBjoern A. Zeeb .hal_shadow_base_addr = 0x000008fc,
2616*28348caeSBjoern A. Zeeb
2617*28348caeSBjoern A. Zeeb /* REO misc control register, used for fragment
2618*28348caeSBjoern A. Zeeb * destination ring config in WCN6855.
2619*28348caeSBjoern A. Zeeb */
2620*28348caeSBjoern A. Zeeb .hal_reo1_misc_ctl = 0x00000630,
2621*28348caeSBjoern A. Zeeb };
2622*28348caeSBjoern A. Zeeb
2623*28348caeSBjoern A. Zeeb const struct ath11k_hw_regs wcn6750_regs = {
2624*28348caeSBjoern A. Zeeb /* SW2TCL(x) R0 ring configuration address */
2625*28348caeSBjoern A. Zeeb .hal_tcl1_ring_base_lsb = 0x00000694,
2626*28348caeSBjoern A. Zeeb .hal_tcl1_ring_base_msb = 0x00000698,
2627*28348caeSBjoern A. Zeeb .hal_tcl1_ring_id = 0x0000069c,
2628*28348caeSBjoern A. Zeeb .hal_tcl1_ring_misc = 0x000006a4,
2629*28348caeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_lsb = 0x000006b0,
2630*28348caeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_msb = 0x000006b4,
2631*28348caeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix0 = 0x000006c4,
2632*28348caeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix1 = 0x000006c8,
2633*28348caeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_lsb = 0x000006dc,
2634*28348caeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_msb = 0x000006e0,
2635*28348caeSBjoern A. Zeeb .hal_tcl1_ring_msi1_data = 0x000006e4,
2636*28348caeSBjoern A. Zeeb .hal_tcl2_ring_base_lsb = 0x000006ec,
2637*28348caeSBjoern A. Zeeb .hal_tcl_ring_base_lsb = 0x0000079c,
2638*28348caeSBjoern A. Zeeb
2639*28348caeSBjoern A. Zeeb /* TCL STATUS ring address */
2640*28348caeSBjoern A. Zeeb .hal_tcl_status_ring_base_lsb = 0x000008a4,
2641*28348caeSBjoern A. Zeeb
2642*28348caeSBjoern A. Zeeb /* REO2SW(x) R0 ring configuration address */
2643*28348caeSBjoern A. Zeeb .hal_reo1_ring_base_lsb = 0x000001ec,
2644*28348caeSBjoern A. Zeeb .hal_reo1_ring_base_msb = 0x000001f0,
2645*28348caeSBjoern A. Zeeb .hal_reo1_ring_id = 0x000001f4,
2646*28348caeSBjoern A. Zeeb .hal_reo1_ring_misc = 0x000001fc,
2647*28348caeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_lsb = 0x00000200,
2648*28348caeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_msb = 0x00000204,
2649*28348caeSBjoern A. Zeeb .hal_reo1_ring_producer_int_setup = 0x00000210,
2650*28348caeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_lsb = 0x00000234,
2651*28348caeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_msb = 0x00000238,
2652*28348caeSBjoern A. Zeeb .hal_reo1_ring_msi1_data = 0x0000023c,
2653*28348caeSBjoern A. Zeeb .hal_reo2_ring_base_lsb = 0x00000244,
2654*28348caeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_0 = 0x00000564,
2655*28348caeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_1 = 0x00000568,
2656*28348caeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_2 = 0x0000056c,
2657*28348caeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_3 = 0x00000570,
2658*28348caeSBjoern A. Zeeb
2659*28348caeSBjoern A. Zeeb /* REO2SW(x) R2 ring pointers (head/tail) address */
2660*28348caeSBjoern A. Zeeb .hal_reo1_ring_hp = 0x00003028,
2661*28348caeSBjoern A. Zeeb .hal_reo1_ring_tp = 0x0000302c,
2662*28348caeSBjoern A. Zeeb .hal_reo2_ring_hp = 0x00003030,
2663*28348caeSBjoern A. Zeeb
2664*28348caeSBjoern A. Zeeb /* REO2TCL R0 ring configuration address */
2665*28348caeSBjoern A. Zeeb .hal_reo_tcl_ring_base_lsb = 0x000003fc,
2666*28348caeSBjoern A. Zeeb .hal_reo_tcl_ring_hp = 0x00003058,
2667*28348caeSBjoern A. Zeeb
2668*28348caeSBjoern A. Zeeb /* REO CMD ring address */
2669*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_base_lsb = 0x000000e4,
2670*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_hp = 0x00003010,
2671*28348caeSBjoern A. Zeeb
2672*28348caeSBjoern A. Zeeb /* REO status address */
2673*28348caeSBjoern A. Zeeb .hal_reo_status_ring_base_lsb = 0x00000504,
2674*28348caeSBjoern A. Zeeb .hal_reo_status_hp = 0x00003070,
2675*28348caeSBjoern A. Zeeb
2676*28348caeSBjoern A. Zeeb /* SW2REO ring address */
2677*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_base_lsb = 0x0000013c,
2678*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_hp = 0x00003018,
2679*28348caeSBjoern A. Zeeb
2680*28348caeSBjoern A. Zeeb /* WCSS relative address */
2681*28348caeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_src_reg = 0x01b80000,
2682*28348caeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_dst_reg = 0x01b81000,
2683*28348caeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_src_reg = 0x01b82000,
2684*28348caeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_dst_reg = 0x01b83000,
2685*28348caeSBjoern A. Zeeb
2686*28348caeSBjoern A. Zeeb /* WBM Idle address */
2687*28348caeSBjoern A. Zeeb .hal_wbm_idle_link_ring_base_lsb = 0x00000874,
2688*28348caeSBjoern A. Zeeb .hal_wbm_idle_link_ring_misc = 0x00000884,
2689*28348caeSBjoern A. Zeeb
2690*28348caeSBjoern A. Zeeb /* SW2WBM release address */
2691*28348caeSBjoern A. Zeeb .hal_wbm_release_ring_base_lsb = 0x000001ec,
2692*28348caeSBjoern A. Zeeb
2693*28348caeSBjoern A. Zeeb /* WBM2SW release address */
2694*28348caeSBjoern A. Zeeb .hal_wbm0_release_ring_base_lsb = 0x00000924,
2695*28348caeSBjoern A. Zeeb .hal_wbm1_release_ring_base_lsb = 0x0000097c,
2696*28348caeSBjoern A. Zeeb
2697*28348caeSBjoern A. Zeeb /* PCIe base address */
2698*28348caeSBjoern A. Zeeb .pcie_qserdes_sysclk_en_sel = 0x0,
2699*28348caeSBjoern A. Zeeb .pcie_pcs_osc_dtct_config_base = 0x0,
2700*28348caeSBjoern A. Zeeb
2701*28348caeSBjoern A. Zeeb /* Shadow register area */
2702*28348caeSBjoern A. Zeeb .hal_shadow_base_addr = 0x00000504,
2703*28348caeSBjoern A. Zeeb
2704*28348caeSBjoern A. Zeeb /* REO misc control register, used for fragment
2705*28348caeSBjoern A. Zeeb * destination ring config in WCN6750.
2706*28348caeSBjoern A. Zeeb */
2707*28348caeSBjoern A. Zeeb .hal_reo1_misc_ctl = 0x000005d8,
2708*28348caeSBjoern A. Zeeb };
2709*28348caeSBjoern A. Zeeb
2710*28348caeSBjoern A. Zeeb static const struct ath11k_hw_tcl2wbm_rbm_map ath11k_hw_tcl2wbm_rbm_map_ipq8074[] = {
2711*28348caeSBjoern A. Zeeb {
2712*28348caeSBjoern A. Zeeb .tcl_ring_num = 0,
2713*28348caeSBjoern A. Zeeb .wbm_ring_num = 0,
2714*28348caeSBjoern A. Zeeb .rbm_id = HAL_RX_BUF_RBM_SW0_BM,
2715*28348caeSBjoern A. Zeeb },
2716*28348caeSBjoern A. Zeeb {
2717*28348caeSBjoern A. Zeeb .tcl_ring_num = 1,
2718*28348caeSBjoern A. Zeeb .wbm_ring_num = 1,
2719*28348caeSBjoern A. Zeeb .rbm_id = HAL_RX_BUF_RBM_SW1_BM,
2720*28348caeSBjoern A. Zeeb },
2721*28348caeSBjoern A. Zeeb {
2722*28348caeSBjoern A. Zeeb .tcl_ring_num = 2,
2723*28348caeSBjoern A. Zeeb .wbm_ring_num = 2,
2724*28348caeSBjoern A. Zeeb .rbm_id = HAL_RX_BUF_RBM_SW2_BM,
2725*28348caeSBjoern A. Zeeb },
2726*28348caeSBjoern A. Zeeb };
2727*28348caeSBjoern A. Zeeb
2728*28348caeSBjoern A. Zeeb static const struct ath11k_hw_tcl2wbm_rbm_map ath11k_hw_tcl2wbm_rbm_map_wcn6750[] = {
2729*28348caeSBjoern A. Zeeb {
2730*28348caeSBjoern A. Zeeb .tcl_ring_num = 0,
2731*28348caeSBjoern A. Zeeb .wbm_ring_num = 0,
2732*28348caeSBjoern A. Zeeb .rbm_id = HAL_RX_BUF_RBM_SW0_BM,
2733*28348caeSBjoern A. Zeeb },
2734*28348caeSBjoern A. Zeeb {
2735*28348caeSBjoern A. Zeeb .tcl_ring_num = 1,
2736*28348caeSBjoern A. Zeeb .wbm_ring_num = 4,
2737*28348caeSBjoern A. Zeeb .rbm_id = HAL_RX_BUF_RBM_SW4_BM,
2738*28348caeSBjoern A. Zeeb },
2739*28348caeSBjoern A. Zeeb {
2740*28348caeSBjoern A. Zeeb .tcl_ring_num = 2,
2741*28348caeSBjoern A. Zeeb .wbm_ring_num = 2,
2742*28348caeSBjoern A. Zeeb .rbm_id = HAL_RX_BUF_RBM_SW2_BM,
2743*28348caeSBjoern A. Zeeb },
2744*28348caeSBjoern A. Zeeb };
2745*28348caeSBjoern A. Zeeb
2746*28348caeSBjoern A. Zeeb const struct ath11k_hw_regs ipq5018_regs = {
2747*28348caeSBjoern A. Zeeb /* SW2TCL(x) R0 ring configuration address */
2748*28348caeSBjoern A. Zeeb .hal_tcl1_ring_base_lsb = 0x00000694,
2749*28348caeSBjoern A. Zeeb .hal_tcl1_ring_base_msb = 0x00000698,
2750*28348caeSBjoern A. Zeeb .hal_tcl1_ring_id = 0x0000069c,
2751*28348caeSBjoern A. Zeeb .hal_tcl1_ring_misc = 0x000006a4,
2752*28348caeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_lsb = 0x000006b0,
2753*28348caeSBjoern A. Zeeb .hal_tcl1_ring_tp_addr_msb = 0x000006b4,
2754*28348caeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix0 = 0x000006c4,
2755*28348caeSBjoern A. Zeeb .hal_tcl1_ring_consumer_int_setup_ix1 = 0x000006c8,
2756*28348caeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_lsb = 0x000006dc,
2757*28348caeSBjoern A. Zeeb .hal_tcl1_ring_msi1_base_msb = 0x000006e0,
2758*28348caeSBjoern A. Zeeb .hal_tcl1_ring_msi1_data = 0x000006e4,
2759*28348caeSBjoern A. Zeeb .hal_tcl2_ring_base_lsb = 0x000006ec,
2760*28348caeSBjoern A. Zeeb .hal_tcl_ring_base_lsb = 0x0000079c,
2761*28348caeSBjoern A. Zeeb
2762*28348caeSBjoern A. Zeeb /* TCL STATUS ring address */
2763*28348caeSBjoern A. Zeeb .hal_tcl_status_ring_base_lsb = 0x000008a4,
2764*28348caeSBjoern A. Zeeb
2765*28348caeSBjoern A. Zeeb /* REO2SW(x) R0 ring configuration address */
2766*28348caeSBjoern A. Zeeb .hal_reo1_ring_base_lsb = 0x000001ec,
2767*28348caeSBjoern A. Zeeb .hal_reo1_ring_base_msb = 0x000001f0,
2768*28348caeSBjoern A. Zeeb .hal_reo1_ring_id = 0x000001f4,
2769*28348caeSBjoern A. Zeeb .hal_reo1_ring_misc = 0x000001fc,
2770*28348caeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_lsb = 0x00000200,
2771*28348caeSBjoern A. Zeeb .hal_reo1_ring_hp_addr_msb = 0x00000204,
2772*28348caeSBjoern A. Zeeb .hal_reo1_ring_producer_int_setup = 0x00000210,
2773*28348caeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_lsb = 0x00000234,
2774*28348caeSBjoern A. Zeeb .hal_reo1_ring_msi1_base_msb = 0x00000238,
2775*28348caeSBjoern A. Zeeb .hal_reo1_ring_msi1_data = 0x0000023c,
2776*28348caeSBjoern A. Zeeb .hal_reo2_ring_base_lsb = 0x00000244,
2777*28348caeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_0 = 0x00000564,
2778*28348caeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_1 = 0x00000568,
2779*28348caeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_2 = 0x0000056c,
2780*28348caeSBjoern A. Zeeb .hal_reo1_aging_thresh_ix_3 = 0x00000570,
2781*28348caeSBjoern A. Zeeb
2782*28348caeSBjoern A. Zeeb /* REO2SW(x) R2 ring pointers (head/tail) address */
2783*28348caeSBjoern A. Zeeb .hal_reo1_ring_hp = 0x00003028,
2784*28348caeSBjoern A. Zeeb .hal_reo1_ring_tp = 0x0000302c,
2785*28348caeSBjoern A. Zeeb .hal_reo2_ring_hp = 0x00003030,
2786*28348caeSBjoern A. Zeeb
2787*28348caeSBjoern A. Zeeb /* REO2TCL R0 ring configuration address */
2788*28348caeSBjoern A. Zeeb .hal_reo_tcl_ring_base_lsb = 0x000003fc,
2789*28348caeSBjoern A. Zeeb .hal_reo_tcl_ring_hp = 0x00003058,
2790*28348caeSBjoern A. Zeeb
2791*28348caeSBjoern A. Zeeb /* SW2REO ring address */
2792*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_base_lsb = 0x0000013c,
2793*28348caeSBjoern A. Zeeb .hal_sw2reo_ring_hp = 0x00003018,
2794*28348caeSBjoern A. Zeeb
2795*28348caeSBjoern A. Zeeb /* REO CMD ring address */
2796*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_base_lsb = 0x000000e4,
2797*28348caeSBjoern A. Zeeb .hal_reo_cmd_ring_hp = 0x00003010,
2798*28348caeSBjoern A. Zeeb
2799*28348caeSBjoern A. Zeeb /* REO status address */
2800*28348caeSBjoern A. Zeeb .hal_reo_status_ring_base_lsb = 0x00000504,
2801*28348caeSBjoern A. Zeeb .hal_reo_status_hp = 0x00003070,
2802*28348caeSBjoern A. Zeeb
2803*28348caeSBjoern A. Zeeb /* WCSS relative address */
2804*28348caeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_src_reg = 0x08400000
2805*28348caeSBjoern A. Zeeb - HAL_IPQ5018_CE_WFSS_REG_BASE,
2806*28348caeSBjoern A. Zeeb .hal_seq_wcss_umac_ce0_dst_reg = 0x08401000
2807*28348caeSBjoern A. Zeeb - HAL_IPQ5018_CE_WFSS_REG_BASE,
2808*28348caeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_src_reg = 0x08402000
2809*28348caeSBjoern A. Zeeb - HAL_IPQ5018_CE_WFSS_REG_BASE,
2810*28348caeSBjoern A. Zeeb .hal_seq_wcss_umac_ce1_dst_reg = 0x08403000
2811*28348caeSBjoern A. Zeeb - HAL_IPQ5018_CE_WFSS_REG_BASE,
2812*28348caeSBjoern A. Zeeb
2813*28348caeSBjoern A. Zeeb /* WBM Idle address */
2814*28348caeSBjoern A. Zeeb .hal_wbm_idle_link_ring_base_lsb = 0x00000874,
2815*28348caeSBjoern A. Zeeb .hal_wbm_idle_link_ring_misc = 0x00000884,
2816*28348caeSBjoern A. Zeeb
2817*28348caeSBjoern A. Zeeb /* SW2WBM release address */
2818*28348caeSBjoern A. Zeeb .hal_wbm_release_ring_base_lsb = 0x000001ec,
2819*28348caeSBjoern A. Zeeb
2820*28348caeSBjoern A. Zeeb /* WBM2SW release address */
2821*28348caeSBjoern A. Zeeb .hal_wbm0_release_ring_base_lsb = 0x00000924,
2822*28348caeSBjoern A. Zeeb .hal_wbm1_release_ring_base_lsb = 0x0000097c,
2823dd4f32aeSBjoern A. Zeeb };
2824dd4f32aeSBjoern A. Zeeb
2825dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_hal_params ath11k_hw_hal_params_ipq8074 = {
2826dd4f32aeSBjoern A. Zeeb .rx_buf_rbm = HAL_RX_BUF_RBM_SW3_BM,
2827*28348caeSBjoern A. Zeeb .tcl2wbm_rbm_map = ath11k_hw_tcl2wbm_rbm_map_ipq8074,
2828dd4f32aeSBjoern A. Zeeb };
2829dd4f32aeSBjoern A. Zeeb
2830dd4f32aeSBjoern A. Zeeb const struct ath11k_hw_hal_params ath11k_hw_hal_params_qca6390 = {
2831dd4f32aeSBjoern A. Zeeb .rx_buf_rbm = HAL_RX_BUF_RBM_SW1_BM,
2832*28348caeSBjoern A. Zeeb .tcl2wbm_rbm_map = ath11k_hw_tcl2wbm_rbm_map_ipq8074,
2833*28348caeSBjoern A. Zeeb };
2834*28348caeSBjoern A. Zeeb
2835*28348caeSBjoern A. Zeeb const struct ath11k_hw_hal_params ath11k_hw_hal_params_wcn6750 = {
2836*28348caeSBjoern A. Zeeb .rx_buf_rbm = HAL_RX_BUF_RBM_SW1_BM,
2837*28348caeSBjoern A. Zeeb .tcl2wbm_rbm_map = ath11k_hw_tcl2wbm_rbm_map_wcn6750,
2838*28348caeSBjoern A. Zeeb };
2839*28348caeSBjoern A. Zeeb
2840*28348caeSBjoern A. Zeeb static const struct cfg80211_sar_freq_ranges ath11k_hw_sar_freq_ranges_wcn6855[] = {
2841*28348caeSBjoern A. Zeeb {.start_freq = 2402, .end_freq = 2482 }, /* 2G ch1~ch13 */
2842*28348caeSBjoern A. Zeeb {.start_freq = 5150, .end_freq = 5250 }, /* 5G UNII-1 ch32~ch48 */
2843*28348caeSBjoern A. Zeeb {.start_freq = 5250, .end_freq = 5725 }, /* 5G UNII-2 ch50~ch144 */
2844*28348caeSBjoern A. Zeeb {.start_freq = 5725, .end_freq = 5810 }, /* 5G UNII-3 ch149~ch161 */
2845*28348caeSBjoern A. Zeeb {.start_freq = 5815, .end_freq = 5895 }, /* 5G UNII-4 ch163~ch177 */
2846*28348caeSBjoern A. Zeeb {.start_freq = 5925, .end_freq = 6165 }, /* 6G UNII-5 Ch1, Ch2 ~ Ch41 */
2847*28348caeSBjoern A. Zeeb {.start_freq = 6165, .end_freq = 6425 }, /* 6G UNII-5 ch45~ch93 */
2848*28348caeSBjoern A. Zeeb {.start_freq = 6425, .end_freq = 6525 }, /* 6G UNII-6 ch97~ch113 */
2849*28348caeSBjoern A. Zeeb {.start_freq = 6525, .end_freq = 6705 }, /* 6G UNII-7 ch117~ch149 */
2850*28348caeSBjoern A. Zeeb {.start_freq = 6705, .end_freq = 6875 }, /* 6G UNII-7 ch153~ch185 */
2851*28348caeSBjoern A. Zeeb {.start_freq = 6875, .end_freq = 7125 }, /* 6G UNII-8 ch189~ch233 */
2852*28348caeSBjoern A. Zeeb };
2853*28348caeSBjoern A. Zeeb
2854*28348caeSBjoern A. Zeeb const struct cfg80211_sar_capa ath11k_hw_sar_capa_wcn6855 = {
2855*28348caeSBjoern A. Zeeb .type = NL80211_SAR_TYPE_POWER,
2856*28348caeSBjoern A. Zeeb .num_freq_ranges = (ARRAY_SIZE(ath11k_hw_sar_freq_ranges_wcn6855)),
2857*28348caeSBjoern A. Zeeb .freq_ranges = ath11k_hw_sar_freq_ranges_wcn6855,
2858dd4f32aeSBjoern A. Zeeb };
2859