mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-24 21:02:35 +00:00
746 lines
27 KiB
Diff
746 lines
27 KiB
Diff
From 4fb880ea9c65d5b26a2f3ac4ce7d8c5ba51f2b3d Mon Sep 17 00:00:00 2001
|
|
From: Anilkumar Kolli <akolli@codeaurora.org>
|
|
Date: Tue, 24 Mar 2020 12:09:13 +0530
|
|
Subject: [PATCH 2/9] ath11k: add hal support for qcn9000
|
|
|
|
defined the hal ring address and ring meta descriptor mask for
|
|
qcn9000. Moved the platform specific address to the ath11k_hw_regs.
|
|
defined tx_mesh_enable ops in ath11k_hw_ops since its accessing
|
|
platform specific TCL descriptor.
|
|
|
|
Note: This patch depends on below patchset
|
|
1. Add pci/mhi support for qcn9000
|
|
|
|
Tested-on: QCN9000 hw1.0 WLAN.HK.2.4.0.1-00097-QCAHKSWPL_SILICONZ-1
|
|
|
|
Signed-off-by: Karthikeyan Periyasamy <periyasa@codeaurora.org>
|
|
Signed-off-by: Anilkumar Kolli <akolli@codeaurora.org>
|
|
---
|
|
drivers/net/wireless/ath/ath11k/core.c | 11 ++-
|
|
drivers/net/wireless/ath/ath11k/dp_tx.c | 2 +-
|
|
drivers/net/wireless/ath/ath11k/hal.c | 88 ++++++++------------
|
|
drivers/net/wireless/ath/ath11k/hal.h | 18 ++---
|
|
drivers/net/wireless/ath/ath11k/hal_desc.h | 13 +--
|
|
drivers/net/wireless/ath/ath11k/hal_tx.c | 3 +
|
|
drivers/net/wireless/ath/ath11k/hal_tx.h | 1 +
|
|
drivers/net/wireless/ath/ath11k/hw.c | 125 +++++++++++++++++++++++++++++
|
|
drivers/net/wireless/ath/ath11k/hw.h | 19 +++++
|
|
9 files changed, 208 insertions(+), 72 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
|
@@ -133,6 +133,22 @@ static const struct ath11k_hw_params ath
|
|
.max_radios = 1,
|
|
.single_pdev_only = false,
|
|
.qmi_service_ins_id = ATH11K_QMI_WLFW_SERVICE_INS_ID_V01_QCN9000,
|
|
+ .regs = &qcn9000_regs,
|
|
+ .hw_ops = &qcn9000_ops,
|
|
+ .credit_flow = false,
|
|
+ .internal_sleep_clock = false,
|
|
+ .target_ce_config = ath11k_target_ce_config_wlan_qcn9000,
|
|
+ .target_ce_count = 9,
|
|
+ .svc_to_ce_map = ath11k_target_service_to_ce_map_wlan_qcn9000,
|
|
+ .svc_to_ce_map_len = 18,
|
|
+ .spectral_fft_sz = 2,
|
|
+ .needs_band_to_mac = true,
|
|
+ .rxdma1_enable = true,
|
|
+ .num_rxmda_per_pdev = 1,
|
|
+ .rx_mac_buf_ring = false,
|
|
+ .vdev_start_delay = false,
|
|
+ .htt_peer_map_v2 = true,
|
|
+ .tcl_0_only = false,
|
|
},
|
|
};
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
|
|
@@ -176,7 +176,7 @@ tcl_ring_sel:
|
|
}
|
|
|
|
if (ieee80211_vif_is_mesh(arvif->vif))
|
|
- ti.flags1 |= FIELD_PREP(HAL_TCL_DATA_CMD_INFO2_MESH_ENABLE, 1);
|
|
+ ti.enable_mesh = true;
|
|
|
|
ti.flags1 |= FIELD_PREP(HAL_TCL_DATA_CMD_INFO2_TID_OVERWRITE, 1);
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/hal.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/hal.c
|
|
@@ -89,17 +89,6 @@ static const struct hal_srng_config hw_s
|
|
.entry_size = sizeof(struct hal_ce_srng_src_desc) >> 2,
|
|
.lmac_ring = false,
|
|
.ring_dir = HAL_SRNG_DIR_SRC,
|
|
- .reg_start = {
|
|
- (HAL_SEQ_WCSS_UMAC_CE0_SRC_REG +
|
|
- HAL_CE_DST_RING_BASE_LSB),
|
|
- HAL_SEQ_WCSS_UMAC_CE0_SRC_REG + HAL_CE_DST_RING_HP,
|
|
- },
|
|
- .reg_size = {
|
|
- (HAL_SEQ_WCSS_UMAC_CE1_SRC_REG -
|
|
- HAL_SEQ_WCSS_UMAC_CE0_SRC_REG),
|
|
- (HAL_SEQ_WCSS_UMAC_CE1_SRC_REG -
|
|
- HAL_SEQ_WCSS_UMAC_CE0_SRC_REG),
|
|
- },
|
|
.max_size = HAL_CE_SRC_RING_BASE_MSB_RING_SIZE,
|
|
},
|
|
{ /* CE_DST */
|
|
@@ -108,17 +97,6 @@ static const struct hal_srng_config hw_s
|
|
.entry_size = sizeof(struct hal_ce_srng_dest_desc) >> 2,
|
|
.lmac_ring = false,
|
|
.ring_dir = HAL_SRNG_DIR_SRC,
|
|
- .reg_start = {
|
|
- (HAL_SEQ_WCSS_UMAC_CE0_DST_REG +
|
|
- HAL_CE_DST_RING_BASE_LSB),
|
|
- HAL_SEQ_WCSS_UMAC_CE0_DST_REG + HAL_CE_DST_RING_HP,
|
|
- },
|
|
- .reg_size = {
|
|
- (HAL_SEQ_WCSS_UMAC_CE1_DST_REG -
|
|
- HAL_SEQ_WCSS_UMAC_CE0_DST_REG),
|
|
- (HAL_SEQ_WCSS_UMAC_CE1_DST_REG -
|
|
- HAL_SEQ_WCSS_UMAC_CE0_DST_REG),
|
|
- },
|
|
.max_size = HAL_CE_DST_RING_BASE_MSB_RING_SIZE,
|
|
},
|
|
{ /* CE_DST_STATUS */
|
|
@@ -127,18 +105,6 @@ static const struct hal_srng_config hw_s
|
|
.entry_size = sizeof(struct hal_ce_srng_dst_status_desc) >> 2,
|
|
.lmac_ring = false,
|
|
.ring_dir = HAL_SRNG_DIR_DST,
|
|
- .reg_start = {
|
|
- (HAL_SEQ_WCSS_UMAC_CE0_DST_REG +
|
|
- HAL_CE_DST_STATUS_RING_BASE_LSB),
|
|
- (HAL_SEQ_WCSS_UMAC_CE0_DST_REG +
|
|
- HAL_CE_DST_STATUS_RING_HP),
|
|
- },
|
|
- .reg_size = {
|
|
- (HAL_SEQ_WCSS_UMAC_CE1_DST_REG -
|
|
- HAL_SEQ_WCSS_UMAC_CE0_DST_REG),
|
|
- (HAL_SEQ_WCSS_UMAC_CE1_DST_REG -
|
|
- HAL_SEQ_WCSS_UMAC_CE0_DST_REG),
|
|
- },
|
|
.max_size = HAL_CE_DST_STATUS_RING_BASE_MSB_RING_SIZE,
|
|
},
|
|
{ /* WBM_IDLE_LINK */
|
|
@@ -147,11 +113,6 @@ static const struct hal_srng_config hw_s
|
|
.entry_size = sizeof(struct hal_wbm_link_desc) >> 2,
|
|
.lmac_ring = false,
|
|
.ring_dir = HAL_SRNG_DIR_SRC,
|
|
- .reg_start = {
|
|
- (HAL_SEQ_WCSS_UMAC_WBM_REG +
|
|
- HAL_WBM_IDLE_LINK_RING_BASE_LSB),
|
|
- (HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM_IDLE_LINK_RING_HP),
|
|
- },
|
|
.max_size = HAL_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE,
|
|
},
|
|
{ /* SW2WBM_RELEASE */
|
|
@@ -160,11 +121,6 @@ static const struct hal_srng_config hw_s
|
|
.entry_size = sizeof(struct hal_wbm_release_ring) >> 2,
|
|
.lmac_ring = false,
|
|
.ring_dir = HAL_SRNG_DIR_SRC,
|
|
- .reg_start = {
|
|
- (HAL_SEQ_WCSS_UMAC_WBM_REG +
|
|
- HAL_WBM_RELEASE_RING_BASE_LSB),
|
|
- (HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM_RELEASE_RING_HP),
|
|
- },
|
|
.max_size = HAL_SW2WBM_RELEASE_RING_BASE_MSB_RING_SIZE,
|
|
},
|
|
{ /* WBM2SW_RELEASE */
|
|
@@ -173,16 +129,6 @@ static const struct hal_srng_config hw_s
|
|
.entry_size = sizeof(struct hal_wbm_release_ring) >> 2,
|
|
.lmac_ring = false,
|
|
.ring_dir = HAL_SRNG_DIR_DST,
|
|
- .reg_start = {
|
|
- (HAL_SEQ_WCSS_UMAC_WBM_REG +
|
|
- HAL_WBM0_RELEASE_RING_BASE_LSB),
|
|
- (HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM0_RELEASE_RING_HP),
|
|
- },
|
|
- .reg_size = {
|
|
- (HAL_WBM1_RELEASE_RING_BASE_LSB -
|
|
- HAL_WBM0_RELEASE_RING_BASE_LSB),
|
|
- (HAL_WBM1_RELEASE_RING_HP - HAL_WBM0_RELEASE_RING_HP),
|
|
- },
|
|
.max_size = HAL_WBM2SW_RELEASE_RING_BASE_MSB_RING_SIZE,
|
|
},
|
|
{ /* RXDMA_BUF */
|
|
@@ -953,7 +899,7 @@ void ath11k_hal_setup_link_idle_list(str
|
|
/* Enable the SRNG */
|
|
ath11k_hif_write32(ab,
|
|
HAL_SEQ_WCSS_UMAC_WBM_REG +
|
|
- HAL_WBM_IDLE_LINK_RING_MISC_ADDR, 0x40);
|
|
+ HAL_WBM_IDLE_LINK_RING_MISC_ADDR(ab), 0x40);
|
|
}
|
|
|
|
int ath11k_hal_srng_setup(struct ath11k_base *ab, enum hal_ring_type type,
|
|
@@ -1109,6 +1055,38 @@ static int ath11k_hal_srng_create_config
|
|
s->reg_start[0] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL_STATUS_RING_BASE_LSB(ab);
|
|
s->reg_start[1] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL_STATUS_RING_HP;
|
|
|
|
+ s = &hal->srng_config[HAL_CE_SRC];
|
|
+ s->reg_start[0] = HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab) + HAL_CE_DST_RING_BASE_LSB;
|
|
+ s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab) + HAL_CE_DST_RING_HP;
|
|
+ s->reg_size[0] = HAL_SEQ_WCSS_UMAC_CE1_SRC_REG(ab) - HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab);
|
|
+ s->reg_size[1] = HAL_SEQ_WCSS_UMAC_CE1_SRC_REG(ab) - HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab);
|
|
+
|
|
+ s = &hal->srng_config[HAL_CE_DST];
|
|
+ s->reg_start[0] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) + HAL_CE_DST_RING_BASE_LSB;
|
|
+ s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) + HAL_CE_DST_RING_HP;
|
|
+ s->reg_size[0] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(ab) - HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab);
|
|
+ s->reg_size[1] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(ab) - HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab);
|
|
+
|
|
+ s = &hal->srng_config[HAL_CE_DST_STATUS];
|
|
+ s->reg_start[0] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) + HAL_CE_DST_STATUS_RING_BASE_LSB;
|
|
+ s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) + HAL_CE_DST_STATUS_RING_HP;
|
|
+ s->reg_size[0] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(ab) - HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab);
|
|
+ s->reg_size[1] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(ab) - HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab);
|
|
+
|
|
+ s = &hal->srng_config[HAL_WBM_IDLE_LINK];
|
|
+ s->reg_start[0] = HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM_IDLE_LINK_RING_BASE_LSB(ab);
|
|
+ s->reg_start[1] = HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM_IDLE_LINK_RING_HP;
|
|
+
|
|
+ s = &hal->srng_config[HAL_SW2WBM_RELEASE];
|
|
+ s->reg_start[0] = HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM_RELEASE_RING_BASE_LSB(ab);
|
|
+ s->reg_start[1] = HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM_RELEASE_RING_HP;
|
|
+
|
|
+ s = &hal->srng_config[HAL_WBM2SW_RELEASE];
|
|
+ s->reg_start[0] = HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM0_RELEASE_RING_BASE_LSB(ab);
|
|
+ s->reg_start[1] = HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM0_RELEASE_RING_HP;
|
|
+ s->reg_size[0] = HAL_WBM1_RELEASE_RING_BASE_LSB(ab) - HAL_WBM0_RELEASE_RING_BASE_LSB(ab);
|
|
+ s->reg_size[1] = HAL_WBM1_RELEASE_RING_HP - HAL_WBM0_RELEASE_RING_HP;
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/hal.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/hal.h
|
|
@@ -38,10 +38,10 @@ struct ath11k_base;
|
|
#define HAL_SEQ_WCSS_UMAC_OFFSET 0x00a00000
|
|
#define HAL_SEQ_WCSS_UMAC_REO_REG 0x00a38000
|
|
#define HAL_SEQ_WCSS_UMAC_TCL_REG 0x00a44000
|
|
-#define HAL_SEQ_WCSS_UMAC_CE0_SRC_REG 0x00a00000
|
|
-#define HAL_SEQ_WCSS_UMAC_CE0_DST_REG 0x00a01000
|
|
-#define HAL_SEQ_WCSS_UMAC_CE1_SRC_REG 0x00a02000
|
|
-#define HAL_SEQ_WCSS_UMAC_CE1_DST_REG 0x00a03000
|
|
+#define HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(ab) ab->hw_params.regs->hal_seq_wcss_umac_ce0_src_reg
|
|
+#define HAL_SEQ_WCSS_UMAC_CE0_DST_REG(ab) ab->hw_params.regs->hal_seq_wcss_umac_ce0_dst_reg
|
|
+#define HAL_SEQ_WCSS_UMAC_CE1_SRC_REG(ab) ab->hw_params.regs->hal_seq_wcss_umac_ce1_src_reg
|
|
+#define HAL_SEQ_WCSS_UMAC_CE1_DST_REG(ab) ab->hw_params.regs->hal_seq_wcss_umac_ce1_dst_reg
|
|
#define HAL_SEQ_WCSS_UMAC_WBM_REG 0x00a34000
|
|
|
|
#define HAL_CE_WFSS_CE_REG_BASE 0x01b80000
|
|
@@ -197,8 +197,8 @@ struct ath11k_base;
|
|
#define HAL_REO_STATUS_HP(ab) ab->hw_params.regs->hal_reo_status_hp
|
|
|
|
/* WBM Idle R0 address */
|
|
-#define HAL_WBM_IDLE_LINK_RING_BASE_LSB 0x00000860
|
|
-#define HAL_WBM_IDLE_LINK_RING_MISC_ADDR 0x00000870
|
|
+#define HAL_WBM_IDLE_LINK_RING_BASE_LSB(ab) ab->hw_params.regs->hal_wbm_idle_link_ring_base_lsb
|
|
+#define HAL_WBM_IDLE_LINK_RING_MISC_ADDR(ab) ab->hw_params.regs->hal_wbm_idle_link_ring_misc
|
|
#define HAL_WBM_R0_IDLE_LIST_CONTROL_ADDR 0x00000048
|
|
#define HAL_WBM_R0_IDLE_LIST_SIZE_ADDR 0x0000004c
|
|
#define HAL_WBM_SCATTERED_RING_BASE_LSB 0x00000058
|
|
@@ -213,14 +213,14 @@ struct ath11k_base;
|
|
#define HAL_WBM_IDLE_LINK_RING_HP 0x000030b0
|
|
|
|
/* SW2WBM R0 release address */
|
|
-#define HAL_WBM_RELEASE_RING_BASE_LSB 0x000001d8
|
|
+#define HAL_WBM_RELEASE_RING_BASE_LSB(ab) ab->hw_params.regs->hal_wbm_release_ring_base_lsb
|
|
|
|
/* SW2WBM R2 release address */
|
|
#define HAL_WBM_RELEASE_RING_HP 0x00003018
|
|
|
|
/* WBM2SW R0 release address */
|
|
-#define HAL_WBM0_RELEASE_RING_BASE_LSB 0x00000910
|
|
-#define HAL_WBM1_RELEASE_RING_BASE_LSB 0x00000968
|
|
+#define HAL_WBM0_RELEASE_RING_BASE_LSB(ab) ab->hw_params.regs->hal_wbm0_release_ring_base_lsb
|
|
+#define HAL_WBM1_RELEASE_RING_BASE_LSB(ab) ab->hw_params.regs->hal_wbm1_release_ring_base_lsb
|
|
|
|
/* WBM2SW R2 release address */
|
|
#define HAL_WBM0_RELEASE_RING_HP 0x000030c0
|
|
--- a/drivers/net/wireless/ath/ath11k/hal_desc.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/hal_desc.h
|
|
@@ -952,16 +952,17 @@ struct hal_reo_flush_cache {
|
|
#define HAL_TCL_DATA_CMD_INFO1_TO_FW BIT(21)
|
|
#define HAL_TCL_DATA_CMD_INFO1_PKT_OFFSET GENMASK(31, 23)
|
|
|
|
-#define HAL_TCL_DATA_CMD_INFO2_BUF_TIMESTAMP GENMASK(18, 0)
|
|
-#define HAL_TCL_DATA_CMD_INFO2_BUF_T_VALID BIT(19)
|
|
-#define HAL_TCL_DATA_CMD_INFO2_MESH_ENABLE BIT(20)
|
|
-#define HAL_TCL_DATA_CMD_INFO2_TID_OVERWRITE BIT(21)
|
|
-#define HAL_TCL_DATA_CMD_INFO2_TID GENMASK(25, 22)
|
|
-#define HAL_TCL_DATA_CMD_INFO2_LMAC_ID GENMASK(27, 26)
|
|
+#define HAL_TCL_DATA_CMD_INFO2_BUF_TIMESTAMP GENMASK(18, 0)
|
|
+#define HAL_TCL_DATA_CMD_INFO2_BUF_T_VALID BIT(19)
|
|
+#define HAL_IPQ8074_TCL_DATA_CMD_INFO2_MESH_ENABLE BIT(20)
|
|
+#define HAL_TCL_DATA_CMD_INFO2_TID_OVERWRITE BIT(21)
|
|
+#define HAL_TCL_DATA_CMD_INFO2_TID GENMASK(25, 22)
|
|
+#define HAL_TCL_DATA_CMD_INFO2_LMAC_ID GENMASK(27, 26)
|
|
|
|
#define HAL_TCL_DATA_CMD_INFO3_DSCP_TID_TABLE_IDX GENMASK(5, 0)
|
|
#define HAL_TCL_DATA_CMD_INFO3_SEARCH_INDEX GENMASK(25, 6)
|
|
#define HAL_TCL_DATA_CMD_INFO3_CACHE_SET_NUM GENMASK(29, 26)
|
|
+#define HAL_QCN9000_TCL_DATA_CMD_INFO3_MESH_ENABLE GENMASK(31, 30)
|
|
|
|
#define HAL_TCL_DATA_CMD_INFO4_RING_ID GENMASK(27, 20)
|
|
#define HAL_TCL_DATA_CMD_INFO4_LOOPING_COUNT GENMASK(31, 28)
|
|
--- a/drivers/net/wireless/ath/ath11k/hal_tx.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/hal_tx.c
|
|
@@ -73,6 +73,9 @@ void ath11k_hal_tx_cmd_desc_setup(struct
|
|
FIELD_PREP(HAL_TCL_DATA_CMD_INFO3_SEARCH_INDEX,
|
|
ti->bss_ast_hash);
|
|
tcl_cmd->info4 = 0;
|
|
+
|
|
+ if (ti->enable_mesh && ab->hw_params.hw_ops->tx_mesh_enable)
|
|
+ ab->hw_params.hw_ops->tx_mesh_enable(ab, tcl_cmd);
|
|
}
|
|
|
|
void ath11k_hal_tx_set_dscp_tid_map(struct ath11k_base *ab, int id)
|
|
--- a/drivers/net/wireless/ath/ath11k/hal_tx.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/hal_tx.h
|
|
@@ -33,6 +33,7 @@ struct hal_tx_info {
|
|
u8 search_type; /* %HAL_TX_ADDR_SEARCH_ */
|
|
u8 lmac_id;
|
|
u8 dscp_tid_tbl_idx;
|
|
+ bool enable_mesh;
|
|
};
|
|
|
|
/* TODO: Check if the actual desc macros can be used instead */
|
|
--- a/drivers/net/wireless/ath/ath11k/hw.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/hw.c
|
|
@@ -31,6 +31,20 @@ static u8 ath11k_hw_ipq6018_mac_from_pde
|
|
return pdev_idx;
|
|
}
|
|
|
|
+static void ath11k_hw_ipq8074_tx_mesh_enable(struct ath11k_base *ab,
|
|
+ struct hal_tcl_data_cmd *tcl_cmd)
|
|
+{
|
|
+ tcl_cmd->info2 |= FIELD_PREP(HAL_IPQ8074_TCL_DATA_CMD_INFO2_MESH_ENABLE,
|
|
+ true);
|
|
+}
|
|
+
|
|
+static void ath11k_hw_qcn9000_tx_mesh_enable(struct ath11k_base *ab,
|
|
+ struct hal_tcl_data_cmd *tcl_cmd)
|
|
+{
|
|
+ tcl_cmd->info3 |= FIELD_PREP(HAL_QCN9000_TCL_DATA_CMD_INFO3_MESH_ENABLE,
|
|
+ true);
|
|
+}
|
|
+
|
|
static void ath11k_init_wmi_config_qca6390(struct ath11k_base *ab,
|
|
struct target_resource_config *config)
|
|
{
|
|
@@ -177,6 +191,7 @@ const struct ath11k_hw_ops ipq8074_ops =
|
|
.rx_desc_get_da_mcbc = ath11k_hw_ipq8074_rx_desc_get_da_mcbc,
|
|
.rx_desc_mac_addr2_valid = ath11k_hw_ipq8074_rx_desc_mac_addr2_valid,
|
|
.rx_desc_mpdu_start_addr2 = ath11k_hw_ipq8074_rx_desc_mpdu_start_addr2,
|
|
+ .tx_mesh_enable = ath11k_hw_ipq8074_tx_mesh_enable,
|
|
};
|
|
|
|
const struct ath11k_hw_ops ipq6018_ops = {
|
|
@@ -187,6 +202,7 @@ const struct ath11k_hw_ops ipq6018_ops =
|
|
.rx_desc_get_da_mcbc = ath11k_hw_ipq8074_rx_desc_get_da_mcbc,
|
|
.rx_desc_mac_addr2_valid = ath11k_hw_ipq8074_rx_desc_mac_addr2_valid,
|
|
.rx_desc_mpdu_start_addr2 = ath11k_hw_ipq8074_rx_desc_mpdu_start_addr2,
|
|
+ .tx_mesh_enable = ath11k_hw_ipq8074_tx_mesh_enable,
|
|
};
|
|
|
|
const struct ath11k_hw_ops qca6390_ops = {
|
|
@@ -199,6 +215,18 @@ const struct ath11k_hw_ops qca6390_ops =
|
|
.rx_desc_mac_addr2_valid,
|
|
.rx_desc_mpdu_start_addr2,
|
|
*/
|
|
+ .tx_mesh_enable = ath11k_hw_ipq8074_tx_mesh_enable,
|
|
+};
|
|
+
|
|
+const struct ath11k_hw_ops qcn9000_ops = {
|
|
+ .get_hw_mac_from_pdev_id = ath11k_hw_ipq6018_mac_from_pdev_id,
|
|
+ .wmi_init_config = ath11k_init_wmi_config_ipq8074,
|
|
+ .mac_id_to_pdev_id = ath11k_hw_mac_id_to_pdev_id_ipq8074,
|
|
+ .mac_id_to_srng_id = ath11k_hw_mac_id_to_srng_id_ipq8074,
|
|
+ .rx_desc_get_da_mcbc = ath11k_hw_ipq8074_rx_desc_get_da_mcbc,
|
|
+ .rx_desc_mac_addr2_valid = ath11k_hw_ipq8074_rx_desc_mac_addr2_valid,
|
|
+ .rx_desc_mpdu_start_addr2 = ath11k_hw_ipq8074_rx_desc_mpdu_start_addr2,
|
|
+ .tx_mesh_enable = ath11k_hw_qcn9000_tx_mesh_enable,
|
|
};
|
|
|
|
#define ATH11K_TX_RING_MASK_0 0x1
|
|
@@ -817,6 +845,206 @@ const struct service_to_pipe ath11k_targ
|
|
},
|
|
};
|
|
|
|
+/* Target firmware's Copy Engine configuration. */
|
|
+const struct ce_pipe_config ath11k_target_ce_config_wlan_qcn9000[] = {
|
|
+ /* CE0: host->target HTC control and raw streams */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(0),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE1: target->host HTT + HTC control */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(1),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE2: target->host WMI */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(2),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE3: host->target WMI */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(3),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE4: host->target HTT */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(4),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(256),
|
|
+ .nbytes_max = __cpu_to_le32(256),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS | CE_ATTR_DIS_INTR),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE5: target->host Pktlog */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(5),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_IN),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE6: Reserved for target autonomous hif_memcpy */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(6),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(16384),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE7 used only by Host */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(7),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_OUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(2048),
|
|
+ .flags = __cpu_to_le32(0x2000),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+ /* CE8 target->host used only by IPA */
|
|
+ {
|
|
+ .pipenum = __cpu_to_le32(8),
|
|
+ .pipedir = __cpu_to_le32(PIPEDIR_INOUT),
|
|
+ .nentries = __cpu_to_le32(32),
|
|
+ .nbytes_max = __cpu_to_le32(16384),
|
|
+ .flags = __cpu_to_le32(CE_ATTR_FLAGS),
|
|
+ .reserved = __cpu_to_le32(0),
|
|
+ },
|
|
+ /* CE 9, 10, 11 are used by MHI driver */
|
|
+};
|
|
+
|
|
+/* Map from service/endpoint to Copy Engine.
|
|
+ * This table is derived from the CE_PCI TABLE, above.
|
|
+ * It is passed to the Target at startup for use by firmware.
|
|
+ */
|
|
+const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qcn9000[] = {
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VO),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BK),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_BE),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_DATA_VI),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(2),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(3),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_WMI_CONTROL),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(2),
|
|
+ },
|
|
+
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(0),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_RSVD_CTRL),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(1),
|
|
+ },
|
|
+
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(0),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_TEST_RAW_STREAMS),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(1),
|
|
+ },
|
|
+
|
|
+
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
+ __cpu_to_le32(PIPEDIR_OUT), /* out = UL = host -> target */
|
|
+ __cpu_to_le32(4),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_HTT_DATA_MSG),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(1),
|
|
+ },
|
|
+ {
|
|
+ __cpu_to_le32(ATH11K_HTC_SVC_ID_PKT_LOG),
|
|
+ __cpu_to_le32(PIPEDIR_IN), /* in = DL = target -> host */
|
|
+ __cpu_to_le32(5),
|
|
+ },
|
|
+
|
|
+ /* (Additions here) */
|
|
+
|
|
+ { /* must be last */
|
|
+ __cpu_to_le32(0),
|
|
+ __cpu_to_le32(0),
|
|
+ __cpu_to_le32(0),
|
|
+ },
|
|
+
|
|
+
|
|
+};
|
|
+
|
|
const struct ath11k_hw_regs ipq8074_regs = {
|
|
/* SW2TCL(x) R0 ring configuration address */
|
|
.hal_tcl1_ring_base_lsb = 0x00000510,
|
|
@@ -866,6 +1094,22 @@ const struct ath11k_hw_regs ipq8074_regs
|
|
.hal_reo_status_ring_base_lsb = 0x00000504,
|
|
.hal_reo_status_hp = 0x00003070,
|
|
|
|
+ /* WCSS relative address */
|
|
+ .hal_seq_wcss_umac_ce0_src_reg = 0x00a00000,
|
|
+ .hal_seq_wcss_umac_ce0_dst_reg = 0x00a01000,
|
|
+ .hal_seq_wcss_umac_ce1_src_reg = 0x00a02000,
|
|
+ .hal_seq_wcss_umac_ce1_dst_reg = 0x00a03000,
|
|
+
|
|
+ /* WBM Idle address */
|
|
+ .hal_wbm_idle_link_ring_base_lsb = 0x00000860,
|
|
+ .hal_wbm_idle_link_ring_misc = 0x00000870,
|
|
+
|
|
+ /* SW2WBM release address */
|
|
+ .hal_wbm_release_ring_base_lsb = 0x000001d8,
|
|
+
|
|
+ /* WBM2SW release address */
|
|
+ .hal_wbm0_release_ring_base_lsb = 0x00000910,
|
|
+ .hal_wbm1_release_ring_base_lsb = 0x00000968,
|
|
};
|
|
|
|
const struct ath11k_hw_regs qca6390_regs = {
|
|
@@ -916,4 +1160,88 @@ const struct ath11k_hw_regs qca6390_regs
|
|
/* REO status address */
|
|
.hal_reo_status_ring_base_lsb = 0x000004ac,
|
|
.hal_reo_status_hp = 0x00003068,
|
|
+
|
|
+ /* WCSS relative address */
|
|
+ .hal_seq_wcss_umac_ce0_src_reg = 0x00a00000,
|
|
+ .hal_seq_wcss_umac_ce0_dst_reg = 0x00a01000,
|
|
+ .hal_seq_wcss_umac_ce1_src_reg = 0x00a02000,
|
|
+ .hal_seq_wcss_umac_ce1_dst_reg = 0x00a03000,
|
|
+
|
|
+ /* WBM Idle address */
|
|
+ .hal_wbm_idle_link_ring_base_lsb = 0x00000860,
|
|
+ .hal_wbm_idle_link_ring_misc = 0x00000870,
|
|
+
|
|
+ /* SW2WBM release address */
|
|
+ .hal_wbm_release_ring_base_lsb = 0x000001d8,
|
|
+
|
|
+ /* WBM2SW release address */
|
|
+ .hal_wbm0_release_ring_base_lsb = 0x00000910,
|
|
+ .hal_wbm1_release_ring_base_lsb = 0x00000968,
|
|
+};
|
|
+
|
|
+const struct ath11k_hw_regs qcn9000_regs = {
|
|
+ /* SW2TCL(x) R0 ring configuration address */
|
|
+ .hal_tcl1_ring_base_lsb = 0x000004f0,
|
|
+ .hal_tcl1_ring_base_msb = 0x000004f4,
|
|
+ .hal_tcl1_ring_id = 0x000004f8,
|
|
+ .hal_tcl1_ring_misc = 0x00000500,
|
|
+ .hal_tcl1_ring_tp_addr_lsb = 0x0000050c,
|
|
+ .hal_tcl1_ring_tp_addr_msb = 0x00000510,
|
|
+ .hal_tcl1_ring_consumer_int_setup_ix0 = 0x00000520,
|
|
+ .hal_tcl1_ring_consumer_int_setup_ix1 = 0x00000524,
|
|
+ .hal_tcl1_ring_msi1_base_lsb = 0x00000538,
|
|
+ .hal_tcl1_ring_msi1_base_msb = 0x0000053c,
|
|
+ .hal_tcl1_ring_msi1_data = 0x00000540,
|
|
+ .hal_tcl2_ring_base_lsb = 0x00000548,
|
|
+ .hal_tcl_ring_base_lsb = 0x000005f8,
|
|
+
|
|
+ /* TCL STATUS ring address */
|
|
+ .hal_tcl_status_ring_base_lsb = 0x00000700,
|
|
+
|
|
+ /* REO2SW(x) R0 ring configuration address */
|
|
+ .hal_reo1_ring_base_lsb = 0x0000029c,
|
|
+ .hal_reo1_ring_base_msb = 0x000002a0,
|
|
+ .hal_reo1_ring_id = 0x000002a4,
|
|
+ .hal_reo1_ring_misc = 0x000002ac,
|
|
+ .hal_reo1_ring_hp_addr_lsb = 0x000002b0,
|
|
+ .hal_reo1_ring_hp_addr_msb = 0x000002b4,
|
|
+ .hal_reo1_ring_producer_int_setup = 0x000002c0,
|
|
+ .hal_reo1_ring_msi1_base_lsb = 0x000002e4,
|
|
+ .hal_reo1_ring_msi1_base_msb = 0x000002e8,
|
|
+ .hal_reo1_ring_msi1_data = 0x000002ec,
|
|
+ .hal_reo2_ring_base_lsb = 0x000002f4,
|
|
+ .hal_reo1_aging_thresh_ix_0 = 0x00000564,
|
|
+ .hal_reo1_aging_thresh_ix_1 = 0x00000568,
|
|
+ .hal_reo1_aging_thresh_ix_2 = 0x0000056c,
|
|
+ .hal_reo1_aging_thresh_ix_3 = 0x00000570,
|
|
+
|
|
+ /* REO2SW(x) R2 ring pointers (head/tail) address */
|
|
+ .hal_reo1_ring_hp = 0x00003038,
|
|
+ .hal_reo1_ring_tp = 0x0000303c,
|
|
+ .hal_reo2_ring_hp = 0x00003040,
|
|
+
|
|
+ /* REO2TCL R0 ring configuration address */
|
|
+ .hal_reo_tcl_ring_base_lsb = 0x000003fc,
|
|
+ .hal_reo_tcl_ring_hp = 0x00003058,
|
|
+
|
|
+ /* REO status address */
|
|
+ .hal_reo_status_ring_base_lsb = 0x00000504,
|
|
+ .hal_reo_status_hp = 0x00003070,
|
|
+
|
|
+ /* WCSS relative address */
|
|
+ .hal_seq_wcss_umac_ce0_src_reg = 0x01b80000,
|
|
+ .hal_seq_wcss_umac_ce0_dst_reg = 0x01b81000,
|
|
+ .hal_seq_wcss_umac_ce1_src_reg = 0x01b82000,
|
|
+ .hal_seq_wcss_umac_ce1_dst_reg = 0x01b83000,
|
|
+
|
|
+ /* WBM Idle address */
|
|
+ .hal_wbm_idle_link_ring_base_lsb = 0x00000874,
|
|
+ .hal_wbm_idle_link_ring_misc = 0x00000884,
|
|
+
|
|
+ /* SW2WBM release address */
|
|
+ .hal_wbm_release_ring_base_lsb = 0x000001ec,
|
|
+
|
|
+ /* WBM2SW release address */
|
|
+ .hal_wbm0_release_ring_base_lsb = 0x00000924,
|
|
+ .hal_wbm1_release_ring_base_lsb = 0x0000097c,
|
|
};
|
|
--- a/drivers/net/wireless/ath/ath11k/hw.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/hw.h
|
|
@@ -105,6 +105,8 @@ enum ath11k_bus {
|
|
|
|
#define ATH11K_EXT_IRQ_GRP_NUM_MAX 11
|
|
|
|
+struct hal_tcl_data_cmd;
|
|
+
|
|
struct ath11k_hw_ring_mask {
|
|
u8 tx[ATH11K_EXT_IRQ_GRP_NUM_MAX];
|
|
u8 rx_mon_status[ATH11K_EXT_IRQ_GRP_NUM_MAX];
|
|
@@ -169,11 +171,14 @@ struct ath11k_hw_ops {
|
|
bool (*rx_desc_get_da_mcbc)(struct hal_rx_desc *desc);
|
|
bool (*rx_desc_mac_addr2_valid)(struct hal_rx_desc *desc);
|
|
u8* (*rx_desc_mpdu_start_addr2)(struct hal_rx_desc *desc);
|
|
+ void (*tx_mesh_enable)(struct ath11k_base *ab,
|
|
+ struct hal_tcl_data_cmd *tcl_cmd);
|
|
};
|
|
|
|
extern const struct ath11k_hw_ops ipq8074_ops;
|
|
extern const struct ath11k_hw_ops ipq6018_ops;
|
|
extern const struct ath11k_hw_ops qca6390_ops;
|
|
+extern const struct ath11k_hw_ops qcn9000_ops;
|
|
|
|
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_ipq8074;
|
|
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qca6390;
|
|
@@ -265,9 +270,23 @@ struct ath11k_hw_regs {
|
|
|
|
u32 hal_reo_status_ring_base_lsb;
|
|
u32 hal_reo_status_hp;
|
|
+
|
|
+ u32 hal_seq_wcss_umac_ce0_src_reg;
|
|
+ u32 hal_seq_wcss_umac_ce0_dst_reg;
|
|
+ u32 hal_seq_wcss_umac_ce1_src_reg;
|
|
+ u32 hal_seq_wcss_umac_ce1_dst_reg;
|
|
+
|
|
+ u32 hal_wbm_idle_link_ring_base_lsb;
|
|
+ u32 hal_wbm_idle_link_ring_misc;
|
|
+
|
|
+ u32 hal_wbm_release_ring_base_lsb;
|
|
+
|
|
+ u32 hal_wbm0_release_ring_base_lsb;
|
|
+ u32 hal_wbm1_release_ring_base_lsb;
|
|
};
|
|
|
|
extern const struct ath11k_hw_regs ipq8074_regs;
|
|
extern const struct ath11k_hw_regs qca6390_regs;
|
|
+extern const struct ath11k_hw_regs qcn9000_regs;
|
|
|
|
#endif
|
|
--- a/drivers/net/wireless/ath/ath11k/core.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
|
@@ -947,8 +947,10 @@ struct ath11k_fw_stats_bcn {
|
|
extern const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq8074[];
|
|
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq8074[];
|
|
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq6018[];
|
|
+extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qcn9000[];
|
|
|
|
extern const struct ce_pipe_config ath11k_target_ce_config_wlan_qca6390[];
|
|
+extern const struct ce_pipe_config ath11k_target_ce_config_wlan_qcn9000[];
|
|
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qca6390[];
|
|
|
|
void ath11k_peer_unmap_event(struct ath11k_base *ab, u16 peer_id);
|