]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: Move HAL CE desc related APIs to wifi7 directory
authorPavankumar Nandeshwar <quic_pnandesh@quicinc.com>
Thu, 9 Oct 2025 11:10:37 +0000 (16:40 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Fri, 10 Oct 2025 14:06:18 +0000 (07:06 -0700)
Move the hardware specific HAL APIs to hal.c file
inside wifi7 directory. These APIs will be called
through the hal_ops mechanism, which are registered
separately by qcn and wcn

Handling following APIs:
ath12k_wifi7_hal_ce_get_desc_size
ath12k_wifi7_hal_ce_src_set_desc
ath12k_wifi7_hal_ce_dst_set_desc

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Signed-off-by: Pavankumar Nandeshwar <quic_pnandesh@quicinc.com>
Signed-off-by: Ripan Deuri <quic_rdeuri@quicinc.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20251009111045.1763001-11-quic_rdeuri@quicinc.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/ce.c
drivers/net/wireless/ath/ath12k/hal.c
drivers/net/wireless/ath/ath12k/hal.h
drivers/net/wireless/ath/ath12k/wifi7/hal.c
drivers/net/wireless/ath/ath12k/wifi7/hal.h
drivers/net/wireless/ath/ath12k/wifi7/hal_qcn9274.c
drivers/net/wireless/ath/ath12k/wifi7/hal_wcn7850.c

index 6e380b773f05627ddc76541af845f4969a0f206a..ae8fda8689ab66cbf0c189eb409ee776f5e1ee45 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: BSD-3-Clause-Clear
 /*
  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2022, 2024-2025 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
  */
 
 #include "dp_rx.h"
@@ -40,7 +40,7 @@ static int ath12k_ce_rx_buf_enqueue_pipe(struct ath12k_ce_pipe *pipe,
                goto exit;
        }
 
-       ath12k_hal_ce_dst_set_desc(desc, paddr);
+       ath12k_hal_ce_dst_set_desc(&ab->hal, desc, paddr);
 
        ring->skb[write_index] = skb;
        write_index = CE_RING_IDX_INCR(nentries_mask, write_index);
@@ -364,6 +364,7 @@ ath12k_ce_alloc_ring(struct ath12k_base *ab, int nentries, int desc_sz)
 
 static int ath12k_ce_alloc_pipe(struct ath12k_base *ab, int ce_id)
 {
+       struct ath12k_hal *hal = &ab->hal;
        struct ath12k_ce_pipe *pipe = &ab->ce.ce_pipe[ce_id];
        const struct ce_attr *attr = &ab->hw_params->host_ce_config[ce_id];
        struct ath12k_ce_ring *ring;
@@ -375,7 +376,7 @@ static int ath12k_ce_alloc_pipe(struct ath12k_base *ab, int ce_id)
        if (attr->src_nentries) {
                pipe->send_cb = ath12k_ce_send_done_cb;
                nentries = roundup_pow_of_two(attr->src_nentries);
-               desc_sz = ath12k_hal_ce_get_desc_size(HAL_CE_DESC_SRC);
+               desc_sz = ath12k_hal_ce_get_desc_size(hal, HAL_CE_DESC_SRC);
                ring = ath12k_ce_alloc_ring(ab, nentries, desc_sz);
                if (IS_ERR(ring))
                        return PTR_ERR(ring);
@@ -385,13 +386,13 @@ static int ath12k_ce_alloc_pipe(struct ath12k_base *ab, int ce_id)
        if (attr->dest_nentries) {
                pipe->recv_cb = attr->recv_cb;
                nentries = roundup_pow_of_two(attr->dest_nentries);
-               desc_sz = ath12k_hal_ce_get_desc_size(HAL_CE_DESC_DST);
+               desc_sz = ath12k_hal_ce_get_desc_size(hal, HAL_CE_DESC_DST);
                ring = ath12k_ce_alloc_ring(ab, nentries, desc_sz);
                if (IS_ERR(ring))
                        return PTR_ERR(ring);
                pipe->dest_ring = ring;
 
-               desc_sz = ath12k_hal_ce_get_desc_size(HAL_CE_DESC_DST_STATUS);
+               desc_sz = ath12k_hal_ce_get_desc_size(hal, HAL_CE_DESC_DST_STATUS);
                ring = ath12k_ce_alloc_ring(ab, nentries, desc_sz);
                if (IS_ERR(ring))
                        return PTR_ERR(ring);
@@ -484,7 +485,7 @@ int ath12k_ce_send(struct ath12k_base *ab, struct sk_buff *skb, u8 pipe_id,
        if (pipe->attr_flags & CE_ATTR_BYTE_SWAP_DATA)
                byte_swap_data = 1;
 
-       ath12k_hal_ce_src_set_desc(desc, ATH12K_SKB_CB(skb)->paddr,
+       ath12k_hal_ce_src_set_desc(&ab->hal, desc, ATH12K_SKB_CB(skb)->paddr,
                                   skb->len, transfer_id, byte_swap_data);
 
        pipe->src_ring->skb[write_index] = skb;
@@ -670,6 +671,7 @@ int ath12k_ce_init_pipes(struct ath12k_base *ab)
 
 void ath12k_ce_free_pipes(struct ath12k_base *ab)
 {
+       struct ath12k_hal *hal = &ab->hal;
        struct ath12k_ce_pipe *pipe;
        int desc_sz;
        int i;
@@ -678,7 +680,8 @@ void ath12k_ce_free_pipes(struct ath12k_base *ab)
                pipe = &ab->ce.ce_pipe[i];
 
                if (pipe->src_ring) {
-                       desc_sz = ath12k_hal_ce_get_desc_size(HAL_CE_DESC_SRC);
+                       desc_sz = ath12k_hal_ce_get_desc_size(hal,
+                                                             HAL_CE_DESC_SRC);
                        dma_free_coherent(ab->dev,
                                          pipe->src_ring->nentries * desc_sz +
                                          CE_DESC_RING_ALIGN,
@@ -689,7 +692,8 @@ void ath12k_ce_free_pipes(struct ath12k_base *ab)
                }
 
                if (pipe->dest_ring) {
-                       desc_sz = ath12k_hal_ce_get_desc_size(HAL_CE_DESC_DST);
+                       desc_sz = ath12k_hal_ce_get_desc_size(hal,
+                                                             HAL_CE_DESC_DST);
                        dma_free_coherent(ab->dev,
                                          pipe->dest_ring->nentries * desc_sz +
                                          CE_DESC_RING_ALIGN,
@@ -701,7 +705,8 @@ void ath12k_ce_free_pipes(struct ath12k_base *ab)
 
                if (pipe->status_ring) {
                        desc_sz =
-                         ath12k_hal_ce_get_desc_size(HAL_CE_DESC_DST_STATUS);
+                         ath12k_hal_ce_get_desc_size(hal,
+                                                     HAL_CE_DESC_DST_STATUS);
                        dma_free_coherent(ab->dev,
                                          pipe->status_ring->nentries * desc_sz +
                                          CE_DESC_RING_ALIGN,
index d4dd83d9e67f60ad0966a7b2548baa1fac90fc41..490a483b8c306ccce4376ba3da5ed1a5e350de4c 100644 (file)
@@ -51,6 +51,11 @@ int ath12k_hal_srng_update_shadow_config(struct ath12k_base *ab,
                                                          ring_num);
 }
 
+u32 ath12k_hal_ce_get_desc_size(struct ath12k_hal *hal, enum hal_ce_desc type)
+{
+       return hal->hal_ops->ce_get_desc_size(type);
+}
+
 static int ath12k_hal_alloc_cont_rdp(struct ath12k_hal *hal)
 {
        size_t size;
@@ -185,40 +190,19 @@ dma_addr_t ath12k_hal_srng_get_tp_addr(struct ath12k_base *ab,
                        (unsigned long)ab->hal.wrp.vaddr);
 }
 
-u32 ath12k_hal_ce_get_desc_size(enum hal_ce_desc type)
-{
-       switch (type) {
-       case HAL_CE_DESC_SRC:
-               return sizeof(struct hal_ce_srng_src_desc);
-       case HAL_CE_DESC_DST:
-               return sizeof(struct hal_ce_srng_dest_desc);
-       case HAL_CE_DESC_DST_STATUS:
-               return sizeof(struct hal_ce_srng_dst_status_desc);
-       }
-
-       return 0;
-}
-
-void ath12k_hal_ce_src_set_desc(struct hal_ce_srng_src_desc *desc, dma_addr_t paddr,
-                               u32 len, u32 id, u8 byte_swap_data)
+void ath12k_hal_ce_src_set_desc(struct ath12k_hal *hal,
+                               struct hal_ce_srng_src_desc *desc,
+                               dma_addr_t paddr, u32 len, u32 id,
+                               u8 byte_swap_data)
 {
-       desc->buffer_addr_low = cpu_to_le32(paddr & HAL_ADDR_LSB_REG_MASK);
-       desc->buffer_addr_info =
-               le32_encode_bits(((u64)paddr >> HAL_ADDR_MSB_REG_SHIFT),
-                                HAL_CE_SRC_DESC_ADDR_INFO_ADDR_HI) |
-               le32_encode_bits(byte_swap_data,
-                                HAL_CE_SRC_DESC_ADDR_INFO_BYTE_SWAP) |
-               le32_encode_bits(0, HAL_CE_SRC_DESC_ADDR_INFO_GATHER) |
-               le32_encode_bits(len, HAL_CE_SRC_DESC_ADDR_INFO_LEN);
-       desc->meta_info = le32_encode_bits(id, HAL_CE_SRC_DESC_META_INFO_DATA);
+       hal->hal_ops->ce_src_set_desc(desc, paddr, len, id, byte_swap_data);
 }
 
-void ath12k_hal_ce_dst_set_desc(struct hal_ce_srng_dest_desc *desc, dma_addr_t paddr)
+void ath12k_hal_ce_dst_set_desc(struct ath12k_hal *hal,
+                               struct hal_ce_srng_dest_desc *desc,
+                               dma_addr_t paddr)
 {
-       desc->buffer_addr_low = cpu_to_le32(paddr & HAL_ADDR_LSB_REG_MASK);
-       desc->buffer_addr_info =
-               le32_encode_bits(((u64)paddr >> HAL_ADDR_MSB_REG_SHIFT),
-                                HAL_CE_DEST_DESC_ADDR_INFO_ADDR_HI);
+       hal->hal_ops->ce_dst_set_desc(desc, paddr);
 }
 
 u32 ath12k_hal_ce_dst_status_get_length(struct hal_ce_srng_dst_status_desc *desc)
index 774322f1f67076ed6c2d70369053bc072798e14c..74f05aa1fc6d9e46d809a83329ee6d9efcdf55fb 100644 (file)
@@ -1707,6 +1707,12 @@ struct hal_ops {
                                         int ring_num);
        int (*srng_get_ring_id)(struct ath12k_hal *hal, enum hal_ring_type type,
                                int ring_num, int mac_id);
+       u32 (*ce_get_desc_size)(enum hal_ce_desc type);
+       void (*ce_src_set_desc)(struct hal_ce_srng_src_desc *desc,
+                               dma_addr_t paddr, u32 len, u32 id,
+                               u8 byte_swap_data);
+       void (*ce_dst_set_desc)(struct hal_ce_srng_dest_desc *desc,
+                               dma_addr_t paddr);
 };
 
 u32 ath12k_wifi7_hal_reo_qdesc_size(u32 ba_window_size, u8 tid);
@@ -1729,10 +1735,14 @@ dma_addr_t ath12k_hal_srng_get_hp_addr(struct ath12k_base *ab,
 void ath12k_hal_set_link_desc_addr(struct hal_wbm_link_desc *desc, u32 cookie,
                                   dma_addr_t paddr,
                                   enum hal_rx_buf_return_buf_manager rbm);
-u32 ath12k_hal_ce_get_desc_size(enum hal_ce_desc type);
-void ath12k_hal_ce_src_set_desc(struct hal_ce_srng_src_desc *desc, dma_addr_t paddr,
-                               u32 len, u32 id, u8 byte_swap_data);
-void ath12k_hal_ce_dst_set_desc(struct hal_ce_srng_dest_desc *desc, dma_addr_t paddr);
+u32 ath12k_hal_ce_get_desc_size(struct ath12k_hal *hal, enum hal_ce_desc type);
+void ath12k_hal_ce_dst_set_desc(struct ath12k_hal *hal,
+                               struct hal_ce_srng_dest_desc *desc,
+                               dma_addr_t paddr);
+void ath12k_hal_ce_src_set_desc(struct ath12k_hal *hal,
+                               struct hal_ce_srng_src_desc *desc,
+                               dma_addr_t paddr, u32 len, u32 id,
+                               u8 byte_swap_data);
 u32 ath12k_hal_ce_dst_status_get_length(struct hal_ce_srng_dst_status_desc *desc);
 int ath12k_hal_srng_get_entrysize(struct ath12k_base *ab, u32 ring_type);
 int ath12k_hal_srng_get_max_entries(struct ath12k_base *ab, u32 ring_type);
index 565f43a30deb94da224e14e07d893a27975b2400..06a6af8c9c8a7bbe556e4be039b1705fcdc06605 100644 (file)
@@ -382,6 +382,20 @@ void ath12k_wifi7_hal_srng_update_hp_tp_addr(struct ath12k_base *ab,
                                                   (unsigned long)ab->mem);
 }
 
+u32 ath12k_wifi7_hal_ce_get_desc_size(enum hal_ce_desc type)
+{
+       switch (type) {
+       case HAL_CE_DESC_SRC:
+               return sizeof(struct hal_ce_srng_src_desc);
+       case HAL_CE_DESC_DST:
+               return sizeof(struct hal_ce_srng_dest_desc);
+       case HAL_CE_DESC_DST_STATUS:
+               return sizeof(struct hal_ce_srng_dst_status_desc);
+       }
+
+       return 0;
+}
+
 int ath12k_wifi7_hal_srng_update_shadow_config(struct ath12k_base *ab,
                                               enum hal_ring_type ring_type,
                                               int ring_num)
@@ -419,3 +433,27 @@ int ath12k_wifi7_hal_srng_update_shadow_config(struct ath12k_base *ab,
 
        return 0;
 }
+
+void ath12k_wifi7_hal_ce_src_set_desc(struct hal_ce_srng_src_desc *desc,
+                                     dma_addr_t paddr,
+                                     u32 len, u32 id, u8 byte_swap_data)
+{
+       desc->buffer_addr_low = cpu_to_le32(paddr & HAL_ADDR_LSB_REG_MASK);
+       desc->buffer_addr_info =
+               le32_encode_bits(((u64)paddr >> HAL_ADDR_MSB_REG_SHIFT),
+                                HAL_CE_SRC_DESC_ADDR_INFO_ADDR_HI) |
+               le32_encode_bits(byte_swap_data,
+                                HAL_CE_SRC_DESC_ADDR_INFO_BYTE_SWAP) |
+               le32_encode_bits(0, HAL_CE_SRC_DESC_ADDR_INFO_GATHER) |
+               le32_encode_bits(len, HAL_CE_SRC_DESC_ADDR_INFO_LEN);
+       desc->meta_info = le32_encode_bits(id, HAL_CE_SRC_DESC_META_INFO_DATA);
+}
+
+void ath12k_wifi7_hal_ce_dst_set_desc(struct hal_ce_srng_dest_desc *desc,
+                                     dma_addr_t paddr)
+{
+       desc->buffer_addr_low = cpu_to_le32(paddr & HAL_ADDR_LSB_REG_MASK);
+       desc->buffer_addr_info =
+               le32_encode_bits(((u64)paddr >> HAL_ADDR_MSB_REG_SHIFT),
+                                HAL_CE_DEST_DESC_ADDR_INFO_ADDR_HI);
+}
index 1ea7b025ed7134abb6b22a1ed9ad0bb2b09713c2..b0b591eb5a0a4b453c916b040e34480474c18847 100644 (file)
@@ -22,4 +22,10 @@ int ath12k_wifi7_hal_srng_update_shadow_config(struct ath12k_base *ab,
 int ath12k_wifi7_hal_srng_get_ring_id(struct ath12k_hal *hal,
                                      enum hal_ring_type type,
                                      int ring_num, int mac_id);
+u32 ath12k_wifi7_hal_ce_get_desc_size(enum hal_ce_desc type);
+void ath12k_wifi7_hal_ce_src_set_desc(struct hal_ce_srng_src_desc *desc,
+                                     dma_addr_t paddr,
+                                     u32 len, u32 id, u8 byte_swap_data);
+void ath12k_wifi7_hal_ce_dst_set_desc(struct hal_ce_srng_dest_desc *desc,
+                                     dma_addr_t paddr);
 #endif
index 92769a525c6d251590793e8c0f2166754b2e2741..113a0424d5eb20832fa47955f88d7773648fe695 100644 (file)
@@ -1006,5 +1006,8 @@ const struct hal_ops hal_qcn9274_ops = {
        .set_umac_srng_ptr_addr = ath12k_wifi7_hal_set_umac_srng_ptr_addr,
        .srng_update_shadow_config = ath12k_wifi7_hal_srng_update_shadow_config,
        .srng_get_ring_id = ath12k_wifi7_hal_srng_get_ring_id,
+       .ce_get_desc_size = ath12k_wifi7_hal_ce_get_desc_size,
+       .ce_src_set_desc = ath12k_wifi7_hal_ce_src_set_desc,
+       .ce_dst_set_desc = ath12k_wifi7_hal_ce_dst_set_desc,
 };
 EXPORT_SYMBOL(hal_qcn9274_ops);
index a941bb4783ae4386630ecf1b2ff3a33c07138fd4..60a21137bd3589ddacdd009659e7697404ce5438 100644 (file)
@@ -821,5 +821,8 @@ const struct hal_ops hal_wcn7850_ops = {
        .set_umac_srng_ptr_addr = ath12k_wifi7_hal_set_umac_srng_ptr_addr,
        .srng_update_shadow_config = ath12k_wifi7_hal_srng_update_shadow_config,
        .srng_get_ring_id = ath12k_wifi7_hal_srng_get_ring_id,
+       .ce_get_desc_size = ath12k_wifi7_hal_ce_get_desc_size,
+       .ce_src_set_desc = ath12k_wifi7_hal_ce_src_set_desc,
+       .ce_dst_set_desc = ath12k_wifi7_hal_ce_dst_set_desc,
 };
 EXPORT_SYMBOL(hal_wcn7850_ops);