]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ath11k: add support to get peer id for WCN6855
authorBaochen Qiang <bqiang@codeaurora.org>
Mon, 31 May 2021 14:41:27 +0000 (17:41 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Sat, 12 Jun 2021 10:31:04 +0000 (13:31 +0300)
For WCN6855, the layout of hal rx mpdu info is different, so need to
handle this target differently when getting peer id.

Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1
Tested-on: QCA6390 hw2.0 PCI WLAN.HST.1.0.1-01740-QCAHSTSWPLZ_V2_TO_X86-1

Signed-off-by: Baochen Qiang <bqiang@codeaurora.org>
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210511162214.29475-6-jouni@codeaurora.org
drivers/net/wireless/ath/ath11k/hal_rx.c
drivers/net/wireless/ath/ath11k/hal_rx.h
drivers/net/wireless/ath/ath11k/hw.c
drivers/net/wireless/ath/ath11k/hw.h

index 80999bae0958933dd99ccf8ca4e89c3527abbf11..325055ca41abd186a8e5145a7fbd54c1bad40970 100644 (file)
@@ -1091,12 +1091,9 @@ ath11k_hal_rx_parse_mon_status_tlv(struct ath11k_base *ab,
                break;
        }
        case HAL_RX_MPDU_START: {
-               struct hal_rx_mpdu_info *mpdu_info =
-                       (struct hal_rx_mpdu_info *)tlv_data;
                u16 peer_id;
 
-               peer_id = FIELD_GET(HAL_RX_MPDU_INFO_INFO0_PEERID,
-                                   __le32_to_cpu(mpdu_info->info0));
+               peer_id = ab->hw_params.hw_ops->mpdu_info_get_peerid(tlv_data);
                if (peer_id)
                        ppdu_info->peer_id = peer_id;
                break;
index d464a270c049f594c150b1dc11420b2c232c963b..0f1f04b812b92ceba6d87c67b78ddd5da7d2374f 100644 (file)
@@ -254,12 +254,20 @@ struct hal_rx_phyrx_rssi_legacy_info {
 } __packed;
 
 #define HAL_RX_MPDU_INFO_INFO0_PEERID  GENMASK(31, 16)
+#define HAL_RX_MPDU_INFO_INFO0_PEERID_WCN6855  GENMASK(15, 0)
+
 struct hal_rx_mpdu_info {
        __le32 rsvd0;
        __le32 info0;
        __le32 rsvd1[21];
 } __packed;
 
+struct hal_rx_mpdu_info_wcn6855 {
+       __le32 rsvd0[8];
+       __le32 info0;
+       __le32 rsvd1[14];
+} __packed;
+
 #define HAL_RX_PPDU_END_DURATION       GENMASK(23, 0)
 struct hal_rx_ppdu_end_duration {
        __le32 rsvd0[9];
index 01207b50a4547824966158fdfb44712269692ccf..d9596903b0a588fafd68237f5e2ba61f51070b71 100644 (file)
@@ -742,6 +742,29 @@ static void ath11k_hw_wcn6855_reo_setup(struct ath11k_base *ab)
                           ring_hash_map);
 }
 
+static u16 ath11k_hw_ipq8074_mpdu_info_get_peerid(u8 *tlv_data)
+{
+       u16 peer_id = 0;
+       struct hal_rx_mpdu_info *mpdu_info =
+               (struct hal_rx_mpdu_info *)tlv_data;
+
+       peer_id = FIELD_GET(HAL_RX_MPDU_INFO_INFO0_PEERID,
+                           __le32_to_cpu(mpdu_info->info0));
+
+       return peer_id;
+}
+
+static u16 ath11k_hw_wcn6855_mpdu_info_get_peerid(u8 *tlv_data)
+{
+       u16 peer_id = 0;
+       struct hal_rx_mpdu_info_wcn6855 *mpdu_info =
+               (struct hal_rx_mpdu_info_wcn6855 *)tlv_data;
+
+       peer_id = FIELD_GET(HAL_RX_MPDU_INFO_INFO0_PEERID_WCN6855,
+                           __le32_to_cpu(mpdu_info->info0));
+       return peer_id;
+}
+
 const struct ath11k_hw_ops ipq8074_ops = {
        .get_hw_mac_from_pdev_id = ath11k_hw_ipq8074_mac_from_pdev_id,
        .wmi_init_config = ath11k_init_wmi_config_ipq8074,
@@ -775,6 +798,7 @@ const struct ath11k_hw_ops ipq8074_ops = {
        .rx_desc_get_attention = ath11k_hw_ipq8074_rx_desc_get_attention,
        .rx_desc_get_msdu_payload = ath11k_hw_ipq8074_rx_desc_get_msdu_payload,
        .reo_setup = ath11k_hw_ipq8074_reo_setup,
+       .mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid,
 };
 
 const struct ath11k_hw_ops ipq6018_ops = {
@@ -810,6 +834,7 @@ const struct ath11k_hw_ops ipq6018_ops = {
        .rx_desc_get_attention = ath11k_hw_ipq8074_rx_desc_get_attention,
        .rx_desc_get_msdu_payload = ath11k_hw_ipq8074_rx_desc_get_msdu_payload,
        .reo_setup = ath11k_hw_ipq8074_reo_setup,
+       .mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid,
 };
 
 const struct ath11k_hw_ops qca6390_ops = {
@@ -845,6 +870,7 @@ const struct ath11k_hw_ops qca6390_ops = {
        .rx_desc_get_attention = ath11k_hw_ipq8074_rx_desc_get_attention,
        .rx_desc_get_msdu_payload = ath11k_hw_ipq8074_rx_desc_get_msdu_payload,
        .reo_setup = ath11k_hw_ipq8074_reo_setup,
+       .mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid,
 };
 
 const struct ath11k_hw_ops qcn9074_ops = {
@@ -880,6 +906,7 @@ const struct ath11k_hw_ops qcn9074_ops = {
        .rx_desc_get_attention = ath11k_hw_qcn9074_rx_desc_get_attention,
        .rx_desc_get_msdu_payload = ath11k_hw_qcn9074_rx_desc_get_msdu_payload,
        .reo_setup = ath11k_hw_ipq8074_reo_setup,
+       .mpdu_info_get_peerid = ath11k_hw_ipq8074_mpdu_info_get_peerid,
 };
 
 const struct ath11k_hw_ops wcn6855_ops = {
@@ -915,6 +942,7 @@ const struct ath11k_hw_ops wcn6855_ops = {
        .rx_desc_get_attention = ath11k_hw_wcn6855_rx_desc_get_attention,
        .rx_desc_get_msdu_payload = ath11k_hw_wcn6855_rx_desc_get_msdu_payload,
        .reo_setup = ath11k_hw_wcn6855_reo_setup,
+       .mpdu_info_get_peerid = ath11k_hw_wcn6855_mpdu_info_get_peerid,
 };
 
 #define ATH11K_TX_RING_MASK_0 0x1
index afe3b3c7169535fd71961c489846aaf9940573e5..be62f0c2e25e1d3d6b5bd0ff28566154133131a8 100644 (file)
@@ -200,6 +200,7 @@ struct ath11k_hw_ops {
        struct rx_attention *(*rx_desc_get_attention)(struct hal_rx_desc *desc);
        u8 *(*rx_desc_get_msdu_payload)(struct hal_rx_desc *desc);
        void (*reo_setup)(struct ath11k_base *ab);
+       u16 (*mpdu_info_get_peerid)(u8 *tlv_data);
 };
 
 extern const struct ath11k_hw_ops ipq8074_ops;