14ae34800SRipan Deuri // SPDX-License-Identifier: BSD-3-Clause-Clear 24ae34800SRipan Deuri /* 34ae34800SRipan Deuri * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved. 44ae34800SRipan Deuri * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 54ae34800SRipan Deuri */ 64ae34800SRipan Deuri 74ae34800SRipan Deuri #include "hal_desc.h" 84ae34800SRipan Deuri #include "hal_wcn7850.h" 9492dea18SPavankumar Nandeshwar #include "hw.h" 10492dea18SPavankumar Nandeshwar #include "hal.h" 11356942d3SPavankumar Nandeshwar #include "hal_tx.h" 124ae34800SRipan Deuri 13c0600b35SPavankumar Nandeshwar static const struct hal_srng_config hw_srng_config_template[] = { 14c0600b35SPavankumar Nandeshwar /* TODO: max_rings can populated by querying HW capabilities */ 15c0600b35SPavankumar Nandeshwar [HAL_REO_DST] = { 16c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_REO2SW1, 17c0600b35SPavankumar Nandeshwar .max_rings = 8, 18c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_reo_dest_ring) >> 2, 19c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 20c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_DST, 21c0600b35SPavankumar Nandeshwar .max_size = HAL_REO_REO2SW1_RING_BASE_MSB_RING_SIZE, 22c0600b35SPavankumar Nandeshwar }, 23c0600b35SPavankumar Nandeshwar [HAL_REO_EXCEPTION] = { 24c0600b35SPavankumar Nandeshwar /* Designating REO2SW0 ring as exception ring. 25c0600b35SPavankumar Nandeshwar * Any of theREO2SW rings can be used as exception ring. 26c0600b35SPavankumar Nandeshwar */ 27c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_REO2SW0, 28c0600b35SPavankumar Nandeshwar .max_rings = 1, 29c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_reo_dest_ring) >> 2, 30c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 31c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_DST, 32c0600b35SPavankumar Nandeshwar .max_size = HAL_REO_REO2SW0_RING_BASE_MSB_RING_SIZE, 33c0600b35SPavankumar Nandeshwar }, 34c0600b35SPavankumar Nandeshwar [HAL_REO_REINJECT] = { 35c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_SW2REO, 36c0600b35SPavankumar Nandeshwar .max_rings = 4, 37c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_reo_entrance_ring) >> 2, 38c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 39c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_SRC, 40c0600b35SPavankumar Nandeshwar .max_size = HAL_REO_SW2REO_RING_BASE_MSB_RING_SIZE, 41c0600b35SPavankumar Nandeshwar }, 42c0600b35SPavankumar Nandeshwar [HAL_REO_CMD] = { 43c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_REO_CMD, 44c0600b35SPavankumar Nandeshwar .max_rings = 1, 45c0600b35SPavankumar Nandeshwar .entry_size = (sizeof(struct hal_tlv_64_hdr) + 46c0600b35SPavankumar Nandeshwar sizeof(struct hal_reo_get_queue_stats)) >> 2, 47c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 48c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_SRC, 49c0600b35SPavankumar Nandeshwar .max_size = HAL_REO_CMD_RING_BASE_MSB_RING_SIZE, 50c0600b35SPavankumar Nandeshwar }, 51c0600b35SPavankumar Nandeshwar [HAL_REO_STATUS] = { 52c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_REO_STATUS, 53c0600b35SPavankumar Nandeshwar .max_rings = 1, 54c0600b35SPavankumar Nandeshwar .entry_size = (sizeof(struct hal_tlv_64_hdr) + 55c0600b35SPavankumar Nandeshwar sizeof(struct hal_reo_get_queue_stats_status)) >> 2, 56c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 57c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_DST, 58c0600b35SPavankumar Nandeshwar .max_size = HAL_REO_STATUS_RING_BASE_MSB_RING_SIZE, 59c0600b35SPavankumar Nandeshwar }, 60c0600b35SPavankumar Nandeshwar [HAL_TCL_DATA] = { 61c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_SW2TCL1, 62c0600b35SPavankumar Nandeshwar .max_rings = 6, 63c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_tcl_data_cmd) >> 2, 64c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 65c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_SRC, 66c0600b35SPavankumar Nandeshwar .max_size = HAL_SW2TCL1_RING_BASE_MSB_RING_SIZE, 67c0600b35SPavankumar Nandeshwar }, 68c0600b35SPavankumar Nandeshwar [HAL_TCL_CMD] = { 69c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_SW2TCL_CMD, 70c0600b35SPavankumar Nandeshwar .max_rings = 1, 71c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_tcl_gse_cmd) >> 2, 72c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 73c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_SRC, 74c0600b35SPavankumar Nandeshwar .max_size = HAL_SW2TCL1_CMD_RING_BASE_MSB_RING_SIZE, 75c0600b35SPavankumar Nandeshwar }, 76c0600b35SPavankumar Nandeshwar [HAL_TCL_STATUS] = { 77c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_TCL_STATUS, 78c0600b35SPavankumar Nandeshwar .max_rings = 1, 79c0600b35SPavankumar Nandeshwar .entry_size = (sizeof(struct hal_tlv_hdr) + 80c0600b35SPavankumar Nandeshwar sizeof(struct hal_tcl_status_ring)) >> 2, 81c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 82c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_DST, 83c0600b35SPavankumar Nandeshwar .max_size = HAL_TCL_STATUS_RING_BASE_MSB_RING_SIZE, 84c0600b35SPavankumar Nandeshwar }, 85c0600b35SPavankumar Nandeshwar [HAL_CE_SRC] = { 86c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_CE0_SRC, 87c0600b35SPavankumar Nandeshwar .max_rings = 16, 88c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_ce_srng_src_desc) >> 2, 89c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 90c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_SRC, 91c0600b35SPavankumar Nandeshwar .max_size = HAL_CE_SRC_RING_BASE_MSB_RING_SIZE, 92c0600b35SPavankumar Nandeshwar }, 93c0600b35SPavankumar Nandeshwar [HAL_CE_DST] = { 94c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_CE0_DST, 95c0600b35SPavankumar Nandeshwar .max_rings = 16, 96c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_ce_srng_dest_desc) >> 2, 97c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 98c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_SRC, 99c0600b35SPavankumar Nandeshwar .max_size = HAL_CE_DST_RING_BASE_MSB_RING_SIZE, 100c0600b35SPavankumar Nandeshwar }, 101c0600b35SPavankumar Nandeshwar [HAL_CE_DST_STATUS] = { 102c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_CE0_DST_STATUS, 103c0600b35SPavankumar Nandeshwar .max_rings = 16, 104c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_ce_srng_dst_status_desc) >> 2, 105c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 106c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_DST, 107c0600b35SPavankumar Nandeshwar .max_size = HAL_CE_DST_STATUS_RING_BASE_MSB_RING_SIZE, 108c0600b35SPavankumar Nandeshwar }, 109c0600b35SPavankumar Nandeshwar [HAL_WBM_IDLE_LINK] = { 110c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_WBM_IDLE_LINK, 111c0600b35SPavankumar Nandeshwar .max_rings = 1, 112c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_wbm_link_desc) >> 2, 113c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 114c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_SRC, 115c0600b35SPavankumar Nandeshwar .max_size = HAL_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE, 116c0600b35SPavankumar Nandeshwar }, 117c0600b35SPavankumar Nandeshwar [HAL_SW2WBM_RELEASE] = { 118c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_WBM_SW0_RELEASE, 119c0600b35SPavankumar Nandeshwar .max_rings = 2, 120c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_wbm_release_ring) >> 2, 121c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 122c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_SRC, 123c0600b35SPavankumar Nandeshwar .max_size = HAL_SW2WBM_RELEASE_RING_BASE_MSB_RING_SIZE, 124c0600b35SPavankumar Nandeshwar }, 125c0600b35SPavankumar Nandeshwar [HAL_WBM2SW_RELEASE] = { 126c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_WBM2SW0_RELEASE, 127c0600b35SPavankumar Nandeshwar .max_rings = 8, 128c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_wbm_release_ring) >> 2, 129c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_UMAC, 130c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_DST, 131c0600b35SPavankumar Nandeshwar .max_size = HAL_WBM2SW_RELEASE_RING_BASE_MSB_RING_SIZE, 132c0600b35SPavankumar Nandeshwar }, 133c0600b35SPavankumar Nandeshwar [HAL_RXDMA_BUF] = { 134c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_SW2RXDMA_BUF0, 135c0600b35SPavankumar Nandeshwar .max_rings = 1, 136c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_wbm_buffer_ring) >> 2, 137c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_DMAC, 138c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_SRC, 139c0600b35SPavankumar Nandeshwar .max_size = HAL_RXDMA_RING_MAX_SIZE_BE, 140c0600b35SPavankumar Nandeshwar }, 141c0600b35SPavankumar Nandeshwar [HAL_RXDMA_DST] = { 142c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_WMAC1_RXDMA2SW0, 143c0600b35SPavankumar Nandeshwar .max_rings = 0, 144c0600b35SPavankumar Nandeshwar .entry_size = 0, 145c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_PMAC, 146c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_DST, 147c0600b35SPavankumar Nandeshwar .max_size = HAL_RXDMA_RING_MAX_SIZE_BE, 148c0600b35SPavankumar Nandeshwar }, 1496250af60SPavankumar Nandeshwar [HAL_RXDMA_MONITOR_BUF] = {}, 150c0600b35SPavankumar Nandeshwar [HAL_RXDMA_MONITOR_STATUS] = { 151c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_WMAC1_SW2RXDMA1_STATBUF, 152c0600b35SPavankumar Nandeshwar .max_rings = 1, 153c0600b35SPavankumar Nandeshwar .entry_size = sizeof(struct hal_wbm_buffer_ring) >> 2, 154c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_PMAC, 155c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_SRC, 156c0600b35SPavankumar Nandeshwar .max_size = HAL_RXDMA_RING_MAX_SIZE_BE, 157c0600b35SPavankumar Nandeshwar }, 158c0600b35SPavankumar Nandeshwar [HAL_RXDMA_MONITOR_DESC] = { 0, }, 159c0600b35SPavankumar Nandeshwar [HAL_RXDMA_DIR_BUF] = { 160c0600b35SPavankumar Nandeshwar .start_ring_id = HAL_SRNG_RING_ID_RXDMA_DIR_BUF, 161c0600b35SPavankumar Nandeshwar .max_rings = 2, 162c0600b35SPavankumar Nandeshwar .entry_size = 8 >> 2, /* TODO: Define the struct */ 163c0600b35SPavankumar Nandeshwar .mac_type = ATH12K_HAL_SRNG_PMAC, 164c0600b35SPavankumar Nandeshwar .ring_dir = HAL_SRNG_DIR_SRC, 165c0600b35SPavankumar Nandeshwar .max_size = HAL_RXDMA_RING_MAX_SIZE_BE, 166c0600b35SPavankumar Nandeshwar }, 1676250af60SPavankumar Nandeshwar [HAL_PPE2TCL] = {}, 1686250af60SPavankumar Nandeshwar [HAL_PPE_RELEASE] = {}, 1696250af60SPavankumar Nandeshwar [HAL_TX_MONITOR_BUF] = {}, 1706250af60SPavankumar Nandeshwar [HAL_RXDMA_MONITOR_DST] = {}, 1716250af60SPavankumar Nandeshwar [HAL_TX_MONITOR_DST] = {} 172c0600b35SPavankumar Nandeshwar }; 173c0600b35SPavankumar Nandeshwar 174492dea18SPavankumar Nandeshwar const struct ath12k_hw_regs wcn7850_regs = { 175492dea18SPavankumar Nandeshwar /* SW2TCL(x) R0 ring configuration address */ 17625122460SRipan Deuri .tcl1_ring_id = 0x00000908, 17725122460SRipan Deuri .tcl1_ring_misc = 0x00000910, 17825122460SRipan Deuri .tcl1_ring_tp_addr_lsb = 0x0000091c, 17925122460SRipan Deuri .tcl1_ring_tp_addr_msb = 0x00000920, 18025122460SRipan Deuri .tcl1_ring_consumer_int_setup_ix0 = 0x00000930, 18125122460SRipan Deuri .tcl1_ring_consumer_int_setup_ix1 = 0x00000934, 18225122460SRipan Deuri .tcl1_ring_msi1_base_lsb = 0x00000948, 18325122460SRipan Deuri .tcl1_ring_msi1_base_msb = 0x0000094c, 18425122460SRipan Deuri .tcl1_ring_msi1_data = 0x00000950, 18525122460SRipan Deuri .tcl_ring_base_lsb = 0x00000b58, 18625122460SRipan Deuri .tcl1_ring_base_lsb = 0x00000900, 18725122460SRipan Deuri .tcl1_ring_base_msb = 0x00000904, 18825122460SRipan Deuri .tcl2_ring_base_lsb = 0x00000978, 189492dea18SPavankumar Nandeshwar 190492dea18SPavankumar Nandeshwar /* TCL STATUS ring address */ 19125122460SRipan Deuri .tcl_status_ring_base_lsb = 0x00000d38, 192492dea18SPavankumar Nandeshwar 19325122460SRipan Deuri .wbm_idle_ring_base_lsb = 0x00000d3c, 19425122460SRipan Deuri .wbm_idle_ring_misc_addr = 0x00000d4c, 19525122460SRipan Deuri .wbm_r0_idle_list_cntl_addr = 0x00000240, 19625122460SRipan Deuri .wbm_r0_idle_list_size_addr = 0x00000244, 19725122460SRipan Deuri .wbm_scattered_ring_base_lsb = 0x00000250, 19825122460SRipan Deuri .wbm_scattered_ring_base_msb = 0x00000254, 19925122460SRipan Deuri .wbm_scattered_desc_head_info_ix0 = 0x00000260, 20025122460SRipan Deuri .wbm_scattered_desc_head_info_ix1 = 0x00000264, 20125122460SRipan Deuri .wbm_scattered_desc_tail_info_ix0 = 0x00000270, 20225122460SRipan Deuri .wbm_scattered_desc_tail_info_ix1 = 0x00000274, 20325122460SRipan Deuri .wbm_scattered_desc_ptr_hp_addr = 0x00000027c, 204492dea18SPavankumar Nandeshwar 20525122460SRipan Deuri .wbm_sw_release_ring_base_lsb = 0x0000037c, 20625122460SRipan Deuri .wbm_sw1_release_ring_base_lsb = 0x00000284, 20725122460SRipan Deuri .wbm0_release_ring_base_lsb = 0x00000e08, 20825122460SRipan Deuri .wbm1_release_ring_base_lsb = 0x00000e80, 209492dea18SPavankumar Nandeshwar 210492dea18SPavankumar Nandeshwar /* PCIe base address */ 211492dea18SPavankumar Nandeshwar .pcie_qserdes_sysclk_en_sel = 0x01e0e0a8, 212492dea18SPavankumar Nandeshwar .pcie_pcs_osc_dtct_config_base = 0x01e0f45c, 213492dea18SPavankumar Nandeshwar 214492dea18SPavankumar Nandeshwar /* PPE release ring address */ 21525122460SRipan Deuri .ppe_rel_ring_base = 0x0000043c, 216492dea18SPavankumar Nandeshwar 217492dea18SPavankumar Nandeshwar /* REO DEST ring address */ 21825122460SRipan Deuri .reo2_ring_base = 0x0000055c, 21925122460SRipan Deuri .reo1_misc_ctrl_addr = 0x00000b7c, 22025122460SRipan Deuri .reo1_sw_cookie_cfg0 = 0x00000050, 22125122460SRipan Deuri .reo1_sw_cookie_cfg1 = 0x00000054, 22225122460SRipan Deuri .reo1_qdesc_lut_base0 = 0x00000058, 22325122460SRipan Deuri .reo1_qdesc_lut_base1 = 0x0000005c, 22425122460SRipan Deuri .reo1_ring_base_lsb = 0x000004e4, 22525122460SRipan Deuri .reo1_ring_base_msb = 0x000004e8, 22625122460SRipan Deuri .reo1_ring_id = 0x000004ec, 22725122460SRipan Deuri .reo1_ring_misc = 0x000004f4, 22825122460SRipan Deuri .reo1_ring_hp_addr_lsb = 0x000004f8, 22925122460SRipan Deuri .reo1_ring_hp_addr_msb = 0x000004fc, 23025122460SRipan Deuri .reo1_ring_producer_int_setup = 0x00000508, 23125122460SRipan Deuri .reo1_ring_msi1_base_lsb = 0x0000052C, 23225122460SRipan Deuri .reo1_ring_msi1_base_msb = 0x00000530, 23325122460SRipan Deuri .reo1_ring_msi1_data = 0x00000534, 23425122460SRipan Deuri .reo1_aging_thres_ix0 = 0x00000b08, 23525122460SRipan Deuri .reo1_aging_thres_ix1 = 0x00000b0c, 23625122460SRipan Deuri .reo1_aging_thres_ix2 = 0x00000b10, 23725122460SRipan Deuri .reo1_aging_thres_ix3 = 0x00000b14, 238492dea18SPavankumar Nandeshwar 239492dea18SPavankumar Nandeshwar /* REO Exception ring address */ 24025122460SRipan Deuri .reo2_sw0_ring_base = 0x000008a4, 241492dea18SPavankumar Nandeshwar 242492dea18SPavankumar Nandeshwar /* REO Reinject ring address */ 24325122460SRipan Deuri .sw2reo_ring_base = 0x00000304, 24425122460SRipan Deuri .sw2reo1_ring_base = 0x0000037c, 245492dea18SPavankumar Nandeshwar 246492dea18SPavankumar Nandeshwar /* REO cmd ring address */ 24725122460SRipan Deuri .reo_cmd_ring_base = 0x0000028c, 248492dea18SPavankumar Nandeshwar 249492dea18SPavankumar Nandeshwar /* REO status ring address */ 25025122460SRipan Deuri .reo_status_ring_base = 0x00000a84, 251492dea18SPavankumar Nandeshwar 252492dea18SPavankumar Nandeshwar /* CE base address */ 25325122460SRipan Deuri .umac_ce0_src_reg_base = 0x01b80000, 25425122460SRipan Deuri .umac_ce0_dest_reg_base = 0x01b81000, 25525122460SRipan Deuri .umac_ce1_src_reg_base = 0x01b82000, 25625122460SRipan Deuri .umac_ce1_dest_reg_base = 0x01b83000, 257492dea18SPavankumar Nandeshwar 258492dea18SPavankumar Nandeshwar .gcc_gcc_pcie_hot_rst = 0x1e40304, 259*853deed0SMiaoqing Pan 260*853deed0SMiaoqing Pan .qrtr_node_id = 0x1e03164, 261492dea18SPavankumar Nandeshwar }; 262492dea18SPavankumar Nandeshwar 263e8a1e49cSPavankumar Nandeshwar static inline 264dd33e179SRipan Deuri bool ath12k_hal_rx_desc_get_first_msdu_wcn7850(struct hal_rx_desc *desc) 2654ae34800SRipan Deuri { 2664ae34800SRipan Deuri return !!le16_get_bits(desc->u.wcn7850.msdu_end.info5, 2674ae34800SRipan Deuri RX_MSDU_END_INFO5_FIRST_MSDU); 2684ae34800SRipan Deuri } 2694ae34800SRipan Deuri 270e8a1e49cSPavankumar Nandeshwar static inline 271dd33e179SRipan Deuri bool ath12k_hal_rx_desc_get_last_msdu_wcn7850(struct hal_rx_desc *desc) 2724ae34800SRipan Deuri { 2734ae34800SRipan Deuri return !!le16_get_bits(desc->u.wcn7850.msdu_end.info5, 2744ae34800SRipan Deuri RX_MSDU_END_INFO5_LAST_MSDU); 2754ae34800SRipan Deuri } 2764ae34800SRipan Deuri 277dd33e179SRipan Deuri u8 ath12k_hal_rx_desc_get_l3_pad_bytes_wcn7850(struct hal_rx_desc *desc) 2784ae34800SRipan Deuri { 2794ae34800SRipan Deuri return le16_get_bits(desc->u.wcn7850.msdu_end.info5, 2804ae34800SRipan Deuri RX_MSDU_END_INFO5_L3_HDR_PADDING); 2814ae34800SRipan Deuri } 2824ae34800SRipan Deuri 283e8a1e49cSPavankumar Nandeshwar static inline 284dd33e179SRipan Deuri bool ath12k_hal_rx_desc_encrypt_valid_wcn7850(struct hal_rx_desc *desc) 2854ae34800SRipan Deuri { 2864ae34800SRipan Deuri return !!le32_get_bits(desc->u.wcn7850.mpdu_start.info4, 2874ae34800SRipan Deuri RX_MPDU_START_INFO4_ENCRYPT_INFO_VALID); 2884ae34800SRipan Deuri } 2894ae34800SRipan Deuri 290e8a1e49cSPavankumar Nandeshwar static inline 291dd33e179SRipan Deuri u32 ath12k_hal_rx_desc_get_encrypt_type_wcn7850(struct hal_rx_desc *desc) 2924ae34800SRipan Deuri { 293e8a1e49cSPavankumar Nandeshwar if (!ath12k_hal_rx_desc_encrypt_valid_wcn7850(desc)) 294e8a1e49cSPavankumar Nandeshwar return HAL_ENCRYPT_TYPE_OPEN; 295e8a1e49cSPavankumar Nandeshwar 2964ae34800SRipan Deuri return le32_get_bits(desc->u.wcn7850.mpdu_start.info2, 2974ae34800SRipan Deuri RX_MPDU_START_INFO2_ENC_TYPE); 2984ae34800SRipan Deuri } 2994ae34800SRipan Deuri 300e8a1e49cSPavankumar Nandeshwar static inline 301dd33e179SRipan Deuri u8 ath12k_hal_rx_desc_get_decap_type_wcn7850(struct hal_rx_desc *desc) 3024ae34800SRipan Deuri { 3034ae34800SRipan Deuri return le32_get_bits(desc->u.wcn7850.msdu_end.info11, 3044ae34800SRipan Deuri RX_MSDU_END_INFO11_DECAP_FORMAT); 3054ae34800SRipan Deuri } 3064ae34800SRipan Deuri 307e8a1e49cSPavankumar Nandeshwar static inline 308dd33e179SRipan Deuri u8 ath12k_hal_rx_desc_get_mesh_ctl_wcn7850(struct hal_rx_desc *desc) 3094ae34800SRipan Deuri { 3104ae34800SRipan Deuri return le32_get_bits(desc->u.wcn7850.msdu_end.info11, 3114ae34800SRipan Deuri RX_MSDU_END_INFO11_MESH_CTRL_PRESENT); 3124ae34800SRipan Deuri } 3134ae34800SRipan Deuri 314e8a1e49cSPavankumar Nandeshwar static inline 315dd33e179SRipan Deuri bool ath12k_hal_rx_desc_get_mpdu_seq_ctl_vld_wcn7850(struct hal_rx_desc *desc) 3164ae34800SRipan Deuri { 3174ae34800SRipan Deuri return !!le32_get_bits(desc->u.wcn7850.mpdu_start.info4, 3184ae34800SRipan Deuri RX_MPDU_START_INFO4_MPDU_SEQ_CTRL_VALID); 3194ae34800SRipan Deuri } 3204ae34800SRipan Deuri 321e8a1e49cSPavankumar Nandeshwar static inline 322dd33e179SRipan Deuri bool ath12k_hal_rx_desc_get_mpdu_fc_valid_wcn7850(struct hal_rx_desc *desc) 3234ae34800SRipan Deuri { 3244ae34800SRipan Deuri return !!le32_get_bits(desc->u.wcn7850.mpdu_start.info4, 3254ae34800SRipan Deuri RX_MPDU_START_INFO4_MPDU_FCTRL_VALID); 3264ae34800SRipan Deuri } 3274ae34800SRipan Deuri 328e8a1e49cSPavankumar Nandeshwar static inline 329dd33e179SRipan Deuri u16 ath12k_hal_rx_desc_get_mpdu_start_seq_no_wcn7850(struct hal_rx_desc *desc) 3304ae34800SRipan Deuri { 3314ae34800SRipan Deuri return le32_get_bits(desc->u.wcn7850.mpdu_start.info4, 3324ae34800SRipan Deuri RX_MPDU_START_INFO4_MPDU_SEQ_NUM); 3334ae34800SRipan Deuri } 3344ae34800SRipan Deuri 335e8a1e49cSPavankumar Nandeshwar static inline 336dd33e179SRipan Deuri u16 ath12k_hal_rx_desc_get_msdu_len_wcn7850(struct hal_rx_desc *desc) 3374ae34800SRipan Deuri { 3384ae34800SRipan Deuri return le32_get_bits(desc->u.wcn7850.msdu_end.info10, 3394ae34800SRipan Deuri RX_MSDU_END_INFO10_MSDU_LENGTH); 3404ae34800SRipan Deuri } 3414ae34800SRipan Deuri 342e8a1e49cSPavankumar Nandeshwar static inline 343dd33e179SRipan Deuri u8 ath12k_hal_rx_desc_get_msdu_sgi_wcn7850(struct hal_rx_desc *desc) 3444ae34800SRipan Deuri { 3454ae34800SRipan Deuri return le32_get_bits(desc->u.wcn7850.msdu_end.info12, 3464ae34800SRipan Deuri RX_MSDU_END_INFO12_SGI); 3474ae34800SRipan Deuri } 3484ae34800SRipan Deuri 349e8a1e49cSPavankumar Nandeshwar static inline 350dd33e179SRipan Deuri u8 ath12k_hal_rx_desc_get_msdu_rate_mcs_wcn7850(struct hal_rx_desc *desc) 3514ae34800SRipan Deuri { 3524ae34800SRipan Deuri return le32_get_bits(desc->u.wcn7850.msdu_end.info12, 3534ae34800SRipan Deuri RX_MSDU_END_INFO12_RATE_MCS); 3544ae34800SRipan Deuri } 3554ae34800SRipan Deuri 356e8a1e49cSPavankumar Nandeshwar static inline 357dd33e179SRipan Deuri u8 ath12k_hal_rx_desc_get_msdu_rx_bw_wcn7850(struct hal_rx_desc *desc) 3584ae34800SRipan Deuri { 3594ae34800SRipan Deuri return le32_get_bits(desc->u.wcn7850.msdu_end.info12, 3604ae34800SRipan Deuri RX_MSDU_END_INFO12_RECV_BW); 3614ae34800SRipan Deuri } 3624ae34800SRipan Deuri 363e8a1e49cSPavankumar Nandeshwar static inline 364dd33e179SRipan Deuri u32 ath12k_hal_rx_desc_get_msdu_freq_wcn7850(struct hal_rx_desc *desc) 3654ae34800SRipan Deuri { 3664ae34800SRipan Deuri return __le32_to_cpu(desc->u.wcn7850.msdu_end.phy_meta_data); 3674ae34800SRipan Deuri } 3684ae34800SRipan Deuri 369e8a1e49cSPavankumar Nandeshwar static inline 370dd33e179SRipan Deuri u8 ath12k_hal_rx_desc_get_msdu_pkt_type_wcn7850(struct hal_rx_desc *desc) 3714ae34800SRipan Deuri { 3724ae34800SRipan Deuri return le32_get_bits(desc->u.wcn7850.msdu_end.info12, 3734ae34800SRipan Deuri RX_MSDU_END_INFO12_PKT_TYPE); 3744ae34800SRipan Deuri } 3754ae34800SRipan Deuri 376e8a1e49cSPavankumar Nandeshwar static inline 377dd33e179SRipan Deuri u8 ath12k_hal_rx_desc_get_msdu_nss_wcn7850(struct hal_rx_desc *desc) 3784ae34800SRipan Deuri { 3794ae34800SRipan Deuri return le32_get_bits(desc->u.wcn7850.msdu_end.info12, 3804ae34800SRipan Deuri RX_MSDU_END_INFO12_MIMO_SS_BITMAP); 3814ae34800SRipan Deuri } 3824ae34800SRipan Deuri 383e8a1e49cSPavankumar Nandeshwar static inline 384dd33e179SRipan Deuri u8 ath12k_hal_rx_desc_get_mpdu_tid_wcn7850(struct hal_rx_desc *desc) 3854ae34800SRipan Deuri { 3864ae34800SRipan Deuri return le32_get_bits(desc->u.wcn7850.mpdu_start.info2, 3874ae34800SRipan Deuri RX_MPDU_START_INFO2_TID); 3884ae34800SRipan Deuri } 3894ae34800SRipan Deuri 390e8a1e49cSPavankumar Nandeshwar static inline 391dd33e179SRipan Deuri u16 ath12k_hal_rx_desc_get_mpdu_peer_id_wcn7850(struct hal_rx_desc *desc) 3924ae34800SRipan Deuri { 3934ae34800SRipan Deuri return __le16_to_cpu(desc->u.wcn7850.mpdu_start.sw_peer_id); 3944ae34800SRipan Deuri } 3954ae34800SRipan Deuri 396dd33e179SRipan Deuri void ath12k_hal_rx_desc_copy_end_tlv_wcn7850(struct hal_rx_desc *fdesc, 3974ae34800SRipan Deuri struct hal_rx_desc *ldesc) 3984ae34800SRipan Deuri { 3994ae34800SRipan Deuri memcpy(&fdesc->u.wcn7850.msdu_end, &ldesc->u.wcn7850.msdu_end, 4004ae34800SRipan Deuri sizeof(struct rx_msdu_end_qcn9274)); 4014ae34800SRipan Deuri } 4024ae34800SRipan Deuri 403dd33e179SRipan Deuri u32 ath12k_hal_rx_desc_get_mpdu_start_tag_wcn7850(struct hal_rx_desc *desc) 4044ae34800SRipan Deuri { 4054ae34800SRipan Deuri return le64_get_bits(desc->u.wcn7850.mpdu_start_tag, 4064ae34800SRipan Deuri HAL_TLV_HDR_TAG); 4074ae34800SRipan Deuri } 4084ae34800SRipan Deuri 409dd33e179SRipan Deuri u32 ath12k_hal_rx_desc_get_mpdu_ppdu_id_wcn7850(struct hal_rx_desc *desc) 4104ae34800SRipan Deuri { 4114ae34800SRipan Deuri return __le16_to_cpu(desc->u.wcn7850.mpdu_start.phy_ppdu_id); 4124ae34800SRipan Deuri } 4134ae34800SRipan Deuri 414dd33e179SRipan Deuri void ath12k_hal_rx_desc_set_msdu_len_wcn7850(struct hal_rx_desc *desc, u16 len) 4154ae34800SRipan Deuri { 4164ae34800SRipan Deuri u32 info = __le32_to_cpu(desc->u.wcn7850.msdu_end.info10); 4174ae34800SRipan Deuri 4184ae34800SRipan Deuri info &= ~RX_MSDU_END_INFO10_MSDU_LENGTH; 4194ae34800SRipan Deuri info |= u32_encode_bits(len, RX_MSDU_END_INFO10_MSDU_LENGTH); 4204ae34800SRipan Deuri 4214ae34800SRipan Deuri desc->u.wcn7850.msdu_end.info10 = __cpu_to_le32(info); 4224ae34800SRipan Deuri } 4234ae34800SRipan Deuri 424dd33e179SRipan Deuri u8 *ath12k_hal_rx_desc_get_msdu_payload_wcn7850(struct hal_rx_desc *desc) 4254ae34800SRipan Deuri { 4264ae34800SRipan Deuri return &desc->u.wcn7850.msdu_payload[0]; 4274ae34800SRipan Deuri } 4284ae34800SRipan Deuri 429dd33e179SRipan Deuri u32 ath12k_hal_rx_desc_get_mpdu_start_offset_wcn7850(void) 4304ae34800SRipan Deuri { 4314ae34800SRipan Deuri return offsetof(struct hal_rx_desc_wcn7850, mpdu_start_tag); 4324ae34800SRipan Deuri } 4334ae34800SRipan Deuri 434dd33e179SRipan Deuri u32 ath12k_hal_rx_desc_get_msdu_end_offset_wcn7850(void) 4354ae34800SRipan Deuri { 4364ae34800SRipan Deuri return offsetof(struct hal_rx_desc_wcn7850, msdu_end_tag); 4374ae34800SRipan Deuri } 4384ae34800SRipan Deuri 439e8a1e49cSPavankumar Nandeshwar static inline 440dd33e179SRipan Deuri bool ath12k_hal_rx_desc_mac_addr2_valid_wcn7850(struct hal_rx_desc *desc) 4414ae34800SRipan Deuri { 4424ae34800SRipan Deuri return __le32_to_cpu(desc->u.wcn7850.mpdu_start.info4) & 4434ae34800SRipan Deuri RX_MPDU_START_INFO4_MAC_ADDR2_VALID; 4444ae34800SRipan Deuri } 4454ae34800SRipan Deuri 446e8a1e49cSPavankumar Nandeshwar static inline 447dd33e179SRipan Deuri u8 *ath12k_hal_rx_desc_mpdu_start_addr2_wcn7850(struct hal_rx_desc *desc) 4484ae34800SRipan Deuri { 4494ae34800SRipan Deuri return desc->u.wcn7850.mpdu_start.addr2; 4504ae34800SRipan Deuri } 4514ae34800SRipan Deuri 452e8a1e49cSPavankumar Nandeshwar static inline 453dd33e179SRipan Deuri bool ath12k_hal_rx_desc_is_da_mcbc_wcn7850(struct hal_rx_desc *desc) 4544ae34800SRipan Deuri { 4554ae34800SRipan Deuri return __le32_to_cpu(desc->u.wcn7850.msdu_end.info13) & 4564ae34800SRipan Deuri RX_MSDU_END_INFO13_MCAST_BCAST; 4574ae34800SRipan Deuri } 4584ae34800SRipan Deuri 459e8a1e49cSPavankumar Nandeshwar static inline 460dd33e179SRipan Deuri bool ath12k_hal_rx_h_msdu_done_wcn7850(struct hal_rx_desc *desc) 4614ae34800SRipan Deuri { 4624ae34800SRipan Deuri return !!le32_get_bits(desc->u.wcn7850.msdu_end.info14, 4634ae34800SRipan Deuri RX_MSDU_END_INFO14_MSDU_DONE); 4644ae34800SRipan Deuri } 4654ae34800SRipan Deuri 466e8a1e49cSPavankumar Nandeshwar static inline 467dd33e179SRipan Deuri bool ath12k_hal_rx_h_l4_cksum_fail_wcn7850(struct hal_rx_desc *desc) 4684ae34800SRipan Deuri { 4694ae34800SRipan Deuri return !!le32_get_bits(desc->u.wcn7850.msdu_end.info13, 4704ae34800SRipan Deuri RX_MSDU_END_INFO13_TCP_UDP_CKSUM_FAIL); 4714ae34800SRipan Deuri } 4724ae34800SRipan Deuri 473e8a1e49cSPavankumar Nandeshwar static inline 474dd33e179SRipan Deuri bool ath12k_hal_rx_h_ip_cksum_fail_wcn7850(struct hal_rx_desc *desc) 4754ae34800SRipan Deuri { 4764ae34800SRipan Deuri return !!le32_get_bits(desc->u.wcn7850.msdu_end.info13, 4774ae34800SRipan Deuri RX_MSDU_END_INFO13_IP_CKSUM_FAIL); 4784ae34800SRipan Deuri } 4794ae34800SRipan Deuri 480e8a1e49cSPavankumar Nandeshwar static inline 481dd33e179SRipan Deuri bool ath12k_hal_rx_h_is_decrypted_wcn7850(struct hal_rx_desc *desc) 4824ae34800SRipan Deuri { 4834ae34800SRipan Deuri return (le32_get_bits(desc->u.wcn7850.msdu_end.info14, 4844ae34800SRipan Deuri RX_MSDU_END_INFO14_DECRYPT_STATUS_CODE) == 4854ae34800SRipan Deuri RX_DESC_DECRYPT_STATUS_CODE_OK); 4864ae34800SRipan Deuri } 4874ae34800SRipan Deuri 488dd33e179SRipan Deuri u32 ath12k_hal_get_rx_desc_size_wcn7850(void) 4894ae34800SRipan Deuri { 4904ae34800SRipan Deuri return sizeof(struct hal_rx_desc_wcn7850); 4914ae34800SRipan Deuri } 4924ae34800SRipan Deuri 493dd33e179SRipan Deuri u8 ath12k_hal_rx_desc_get_msdu_src_link_wcn7850(struct hal_rx_desc *desc) 4944ae34800SRipan Deuri { 4954ae34800SRipan Deuri return 0; 4964ae34800SRipan Deuri } 4974ae34800SRipan Deuri 498e8a1e49cSPavankumar Nandeshwar static u32 ath12k_hal_rx_h_mpdu_err_wcn7850(struct hal_rx_desc *desc) 4994ae34800SRipan Deuri { 5004ae34800SRipan Deuri u32 info = __le32_to_cpu(desc->u.wcn7850.msdu_end.info13); 5014ae34800SRipan Deuri u32 errmap = 0; 5024ae34800SRipan Deuri 5034ae34800SRipan Deuri if (info & RX_MSDU_END_INFO13_FCS_ERR) 5044ae34800SRipan Deuri errmap |= HAL_RX_MPDU_ERR_FCS; 5054ae34800SRipan Deuri 5064ae34800SRipan Deuri if (info & RX_MSDU_END_INFO13_DECRYPT_ERR) 5074ae34800SRipan Deuri errmap |= HAL_RX_MPDU_ERR_DECRYPT; 5084ae34800SRipan Deuri 5094ae34800SRipan Deuri if (info & RX_MSDU_END_INFO13_TKIP_MIC_ERR) 5104ae34800SRipan Deuri errmap |= HAL_RX_MPDU_ERR_TKIP_MIC; 5114ae34800SRipan Deuri 5124ae34800SRipan Deuri if (info & RX_MSDU_END_INFO13_A_MSDU_ERROR) 5134ae34800SRipan Deuri errmap |= HAL_RX_MPDU_ERR_AMSDU_ERR; 5144ae34800SRipan Deuri 5154ae34800SRipan Deuri if (info & RX_MSDU_END_INFO13_OVERFLOW_ERR) 5164ae34800SRipan Deuri errmap |= HAL_RX_MPDU_ERR_OVERFLOW; 5174ae34800SRipan Deuri 5184ae34800SRipan Deuri if (info & RX_MSDU_END_INFO13_MSDU_LEN_ERR) 5194ae34800SRipan Deuri errmap |= HAL_RX_MPDU_ERR_MSDU_LEN; 5204ae34800SRipan Deuri 5214ae34800SRipan Deuri if (info & RX_MSDU_END_INFO13_MPDU_LEN_ERR) 5224ae34800SRipan Deuri errmap |= HAL_RX_MPDU_ERR_MPDU_LEN; 5234ae34800SRipan Deuri 5244ae34800SRipan Deuri return errmap; 5254ae34800SRipan Deuri } 5264ae34800SRipan Deuri 527dd33e179SRipan Deuri void ath12k_hal_rx_desc_get_crypto_hdr_wcn7850(struct hal_rx_desc *desc, 5284ae34800SRipan Deuri u8 *crypto_hdr, 5294ae34800SRipan Deuri enum hal_encrypt_type enctype) 5304ae34800SRipan Deuri { 5314ae34800SRipan Deuri unsigned int key_id; 5324ae34800SRipan Deuri 5334ae34800SRipan Deuri switch (enctype) { 5344ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_OPEN: 5354ae34800SRipan Deuri return; 5364ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_TKIP_NO_MIC: 5374ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_TKIP_MIC: 5384ae34800SRipan Deuri crypto_hdr[0] = 5394ae34800SRipan Deuri HAL_RX_MPDU_INFO_PN_GET_BYTE2(desc->u.wcn7850.mpdu_start.pn[0]); 5404ae34800SRipan Deuri crypto_hdr[1] = 0; 5414ae34800SRipan Deuri crypto_hdr[2] = 5424ae34800SRipan Deuri HAL_RX_MPDU_INFO_PN_GET_BYTE1(desc->u.wcn7850.mpdu_start.pn[0]); 5434ae34800SRipan Deuri break; 5444ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_CCMP_128: 5454ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_CCMP_256: 5464ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_GCMP_128: 5474ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_AES_GCMP_256: 5484ae34800SRipan Deuri crypto_hdr[0] = 5494ae34800SRipan Deuri HAL_RX_MPDU_INFO_PN_GET_BYTE1(desc->u.wcn7850.mpdu_start.pn[0]); 5504ae34800SRipan Deuri crypto_hdr[1] = 5514ae34800SRipan Deuri HAL_RX_MPDU_INFO_PN_GET_BYTE2(desc->u.wcn7850.mpdu_start.pn[0]); 5524ae34800SRipan Deuri crypto_hdr[2] = 0; 5534ae34800SRipan Deuri break; 5544ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_WEP_40: 5554ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_WEP_104: 5564ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_WEP_128: 5574ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_WAPI_GCM_SM4: 5584ae34800SRipan Deuri case HAL_ENCRYPT_TYPE_WAPI: 5594ae34800SRipan Deuri return; 5604ae34800SRipan Deuri } 5614ae34800SRipan Deuri key_id = u32_get_bits(__le32_to_cpu(desc->u.wcn7850.mpdu_start.info5), 5624ae34800SRipan Deuri RX_MPDU_START_INFO5_KEY_ID); 5634ae34800SRipan Deuri crypto_hdr[3] = 0x20 | (key_id << 6); 5644ae34800SRipan Deuri crypto_hdr[4] = HAL_RX_MPDU_INFO_PN_GET_BYTE3(desc->u.wcn7850.mpdu_start.pn[0]); 5654ae34800SRipan Deuri crypto_hdr[5] = HAL_RX_MPDU_INFO_PN_GET_BYTE4(desc->u.wcn7850.mpdu_start.pn[0]); 5664ae34800SRipan Deuri crypto_hdr[6] = HAL_RX_MPDU_INFO_PN_GET_BYTE1(desc->u.wcn7850.mpdu_start.pn[1]); 5674ae34800SRipan Deuri crypto_hdr[7] = HAL_RX_MPDU_INFO_PN_GET_BYTE2(desc->u.wcn7850.mpdu_start.pn[1]); 5684ae34800SRipan Deuri } 5694ae34800SRipan Deuri 570dd33e179SRipan Deuri void ath12k_hal_rx_desc_get_dot11_hdr_wcn7850(struct hal_rx_desc *desc, 5714ae34800SRipan Deuri struct ieee80211_hdr *hdr) 5724ae34800SRipan Deuri { 5734ae34800SRipan Deuri hdr->frame_control = desc->u.wcn7850.mpdu_start.frame_ctrl; 5744ae34800SRipan Deuri hdr->duration_id = desc->u.wcn7850.mpdu_start.duration; 5754ae34800SRipan Deuri ether_addr_copy(hdr->addr1, desc->u.wcn7850.mpdu_start.addr1); 5764ae34800SRipan Deuri ether_addr_copy(hdr->addr2, desc->u.wcn7850.mpdu_start.addr2); 5774ae34800SRipan Deuri ether_addr_copy(hdr->addr3, desc->u.wcn7850.mpdu_start.addr3); 5784ae34800SRipan Deuri if (__le32_to_cpu(desc->u.wcn7850.mpdu_start.info4) & 5794ae34800SRipan Deuri RX_MPDU_START_INFO4_MAC_ADDR4_VALID) { 5804ae34800SRipan Deuri ether_addr_copy(hdr->addr4, desc->u.wcn7850.mpdu_start.addr4); 5814ae34800SRipan Deuri } 5824ae34800SRipan Deuri hdr->seq_ctrl = desc->u.wcn7850.mpdu_start.seq_ctrl; 5834ae34800SRipan Deuri } 584e8a1e49cSPavankumar Nandeshwar 585e8a1e49cSPavankumar Nandeshwar void ath12k_hal_extract_rx_desc_data_wcn7850(struct hal_rx_desc_data *rx_desc_data, 586e8a1e49cSPavankumar Nandeshwar struct hal_rx_desc *rx_desc, 587e8a1e49cSPavankumar Nandeshwar struct hal_rx_desc *ldesc) 588e8a1e49cSPavankumar Nandeshwar { 589e8a1e49cSPavankumar Nandeshwar rx_desc_data->is_first_msdu = ath12k_hal_rx_desc_get_first_msdu_wcn7850(ldesc); 590e8a1e49cSPavankumar Nandeshwar rx_desc_data->is_last_msdu = ath12k_hal_rx_desc_get_last_msdu_wcn7850(ldesc); 591e8a1e49cSPavankumar Nandeshwar rx_desc_data->l3_pad_bytes = ath12k_hal_rx_desc_get_l3_pad_bytes_wcn7850(ldesc); 592e8a1e49cSPavankumar Nandeshwar rx_desc_data->enctype = ath12k_hal_rx_desc_get_encrypt_type_wcn7850(rx_desc); 593e8a1e49cSPavankumar Nandeshwar rx_desc_data->decap_type = ath12k_hal_rx_desc_get_decap_type_wcn7850(rx_desc); 594e8a1e49cSPavankumar Nandeshwar rx_desc_data->mesh_ctrl_present = 595e8a1e49cSPavankumar Nandeshwar ath12k_hal_rx_desc_get_mesh_ctl_wcn7850(rx_desc); 596e8a1e49cSPavankumar Nandeshwar rx_desc_data->seq_ctl_valid = 597e8a1e49cSPavankumar Nandeshwar ath12k_hal_rx_desc_get_mpdu_seq_ctl_vld_wcn7850(rx_desc); 598e8a1e49cSPavankumar Nandeshwar rx_desc_data->fc_valid = ath12k_hal_rx_desc_get_mpdu_fc_valid_wcn7850(rx_desc); 599e8a1e49cSPavankumar Nandeshwar rx_desc_data->seq_no = ath12k_hal_rx_desc_get_mpdu_start_seq_no_wcn7850(rx_desc); 600e8a1e49cSPavankumar Nandeshwar rx_desc_data->msdu_len = ath12k_hal_rx_desc_get_msdu_len_wcn7850(ldesc); 601e8a1e49cSPavankumar Nandeshwar rx_desc_data->sgi = ath12k_hal_rx_desc_get_msdu_sgi_wcn7850(rx_desc); 602e8a1e49cSPavankumar Nandeshwar rx_desc_data->rate_mcs = ath12k_hal_rx_desc_get_msdu_rate_mcs_wcn7850(rx_desc); 603e8a1e49cSPavankumar Nandeshwar rx_desc_data->bw = ath12k_hal_rx_desc_get_msdu_rx_bw_wcn7850(rx_desc); 604e8a1e49cSPavankumar Nandeshwar rx_desc_data->phy_meta_data = ath12k_hal_rx_desc_get_msdu_freq_wcn7850(rx_desc); 605e8a1e49cSPavankumar Nandeshwar rx_desc_data->pkt_type = ath12k_hal_rx_desc_get_msdu_pkt_type_wcn7850(rx_desc); 606e8a1e49cSPavankumar Nandeshwar rx_desc_data->nss = hweight8(ath12k_hal_rx_desc_get_msdu_nss_wcn7850(rx_desc)); 607e8a1e49cSPavankumar Nandeshwar rx_desc_data->tid = ath12k_hal_rx_desc_get_mpdu_tid_wcn7850(rx_desc); 608e8a1e49cSPavankumar Nandeshwar rx_desc_data->peer_id = ath12k_hal_rx_desc_get_mpdu_peer_id_wcn7850(rx_desc); 609e8a1e49cSPavankumar Nandeshwar rx_desc_data->addr2_present = ath12k_hal_rx_desc_mac_addr2_valid_wcn7850(rx_desc); 610e8a1e49cSPavankumar Nandeshwar rx_desc_data->addr2 = ath12k_hal_rx_desc_mpdu_start_addr2_wcn7850(rx_desc); 611e8a1e49cSPavankumar Nandeshwar rx_desc_data->is_mcbc = ath12k_hal_rx_desc_is_da_mcbc_wcn7850(rx_desc); 612e8a1e49cSPavankumar Nandeshwar rx_desc_data->msdu_done = ath12k_hal_rx_h_msdu_done_wcn7850(ldesc); 613e8a1e49cSPavankumar Nandeshwar rx_desc_data->l4_csum_fail = ath12k_hal_rx_h_l4_cksum_fail_wcn7850(rx_desc); 614e8a1e49cSPavankumar Nandeshwar rx_desc_data->ip_csum_fail = ath12k_hal_rx_h_ip_cksum_fail_wcn7850(rx_desc); 615e8a1e49cSPavankumar Nandeshwar rx_desc_data->is_decrypted = ath12k_hal_rx_h_is_decrypted_wcn7850(rx_desc); 616e8a1e49cSPavankumar Nandeshwar rx_desc_data->err_bitmap = ath12k_hal_rx_h_mpdu_err_wcn7850(rx_desc); 617e8a1e49cSPavankumar Nandeshwar } 618c0600b35SPavankumar Nandeshwar 61928badc78SBaochen Qiang int ath12k_hal_srng_create_config_wcn7850(struct ath12k_hal *hal) 620c0600b35SPavankumar Nandeshwar { 621c0600b35SPavankumar Nandeshwar struct hal_srng_config *s; 622c0600b35SPavankumar Nandeshwar 623c0600b35SPavankumar Nandeshwar hal->srng_config = kmemdup(hw_srng_config_template, 624c0600b35SPavankumar Nandeshwar sizeof(hw_srng_config_template), 625c0600b35SPavankumar Nandeshwar GFP_KERNEL); 626c0600b35SPavankumar Nandeshwar if (!hal->srng_config) 627c0600b35SPavankumar Nandeshwar return -ENOMEM; 628c0600b35SPavankumar Nandeshwar 629c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_REO_DST]; 630b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO1_RING_BASE_LSB(hal); 631c0600b35SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO1_RING_HP; 632b3821366SPavankumar Nandeshwar s->reg_size[0] = HAL_REO2_RING_BASE_LSB(hal) - HAL_REO1_RING_BASE_LSB(hal); 633c0600b35SPavankumar Nandeshwar s->reg_size[1] = HAL_REO2_RING_HP - HAL_REO1_RING_HP; 634c0600b35SPavankumar Nandeshwar 635c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_REO_EXCEPTION]; 636b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO_SW0_RING_BASE_LSB(hal); 637c0600b35SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO_SW0_RING_HP; 638c0600b35SPavankumar Nandeshwar 639c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_REO_REINJECT]; 640c0600b35SPavankumar Nandeshwar s->max_rings = 1; 641b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_SW2REO_RING_BASE_LSB(hal); 642c0600b35SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_SW2REO_RING_HP; 643c0600b35SPavankumar Nandeshwar 644c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_REO_CMD]; 645b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO_CMD_RING_BASE_LSB(hal); 646c0600b35SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO_CMD_HP; 647c0600b35SPavankumar Nandeshwar 648c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_REO_STATUS]; 649b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO_STATUS_RING_BASE_LSB(hal); 650c0600b35SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_REO_REG + HAL_REO_STATUS_HP; 651c0600b35SPavankumar Nandeshwar 652c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_TCL_DATA]; 653c0600b35SPavankumar Nandeshwar s->max_rings = 5; 654b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL1_RING_BASE_LSB(hal); 655c0600b35SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL1_RING_HP; 656b3821366SPavankumar Nandeshwar s->reg_size[0] = HAL_TCL2_RING_BASE_LSB(hal) - HAL_TCL1_RING_BASE_LSB(hal); 657c0600b35SPavankumar Nandeshwar s->reg_size[1] = HAL_TCL2_RING_HP - HAL_TCL1_RING_HP; 658c0600b35SPavankumar Nandeshwar 659c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_TCL_CMD]; 660b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL_RING_BASE_LSB(hal); 661c0600b35SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL_RING_HP; 662c0600b35SPavankumar Nandeshwar 663c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_TCL_STATUS]; 664b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL_STATUS_RING_BASE_LSB(hal); 665c0600b35SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_TCL_REG + HAL_TCL_STATUS_RING_HP; 666c0600b35SPavankumar Nandeshwar 667c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_CE_SRC]; 668c0600b35SPavankumar Nandeshwar s->max_rings = 12; 669b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(hal) + HAL_CE_DST_RING_BASE_LSB; 670b3821366SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(hal) + HAL_CE_DST_RING_HP; 671b3821366SPavankumar Nandeshwar s->reg_size[0] = HAL_SEQ_WCSS_UMAC_CE1_SRC_REG(hal) - 672b3821366SPavankumar Nandeshwar HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(hal); 673b3821366SPavankumar Nandeshwar s->reg_size[1] = HAL_SEQ_WCSS_UMAC_CE1_SRC_REG(hal) - 674b3821366SPavankumar Nandeshwar HAL_SEQ_WCSS_UMAC_CE0_SRC_REG(hal); 675c0600b35SPavankumar Nandeshwar 676c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_CE_DST]; 677c0600b35SPavankumar Nandeshwar s->max_rings = 12; 678b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(hal) + HAL_CE_DST_RING_BASE_LSB; 679b3821366SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(hal) + HAL_CE_DST_RING_HP; 680b3821366SPavankumar Nandeshwar s->reg_size[0] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(hal) - 681b3821366SPavankumar Nandeshwar HAL_SEQ_WCSS_UMAC_CE0_DST_REG(hal); 682b3821366SPavankumar Nandeshwar s->reg_size[1] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(hal) - 683b3821366SPavankumar Nandeshwar HAL_SEQ_WCSS_UMAC_CE0_DST_REG(hal); 684c0600b35SPavankumar Nandeshwar 685c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_CE_DST_STATUS]; 686c0600b35SPavankumar Nandeshwar s->max_rings = 12; 687b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(hal) + 688c0600b35SPavankumar Nandeshwar HAL_CE_DST_STATUS_RING_BASE_LSB; 689b3821366SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_CE0_DST_REG(hal) + HAL_CE_DST_STATUS_RING_HP; 690b3821366SPavankumar Nandeshwar s->reg_size[0] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(hal) - 691b3821366SPavankumar Nandeshwar HAL_SEQ_WCSS_UMAC_CE0_DST_REG(hal); 692b3821366SPavankumar Nandeshwar s->reg_size[1] = HAL_SEQ_WCSS_UMAC_CE1_DST_REG(hal) - 693b3821366SPavankumar Nandeshwar HAL_SEQ_WCSS_UMAC_CE0_DST_REG(hal); 694c0600b35SPavankumar Nandeshwar 695c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_WBM_IDLE_LINK]; 696b3821366SPavankumar Nandeshwar s->reg_start[0] = 697b3821366SPavankumar Nandeshwar HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM_IDLE_LINK_RING_BASE_LSB(hal); 698c0600b35SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM_IDLE_LINK_RING_HP; 699c0600b35SPavankumar Nandeshwar 700c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_SW2WBM_RELEASE]; 701c0600b35SPavankumar Nandeshwar s->max_rings = 1; 702c0600b35SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_WBM_REG + 703b3821366SPavankumar Nandeshwar HAL_WBM_SW_RELEASE_RING_BASE_LSB(hal); 704c0600b35SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM_SW_RELEASE_RING_HP; 705c0600b35SPavankumar Nandeshwar 706c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_WBM2SW_RELEASE]; 707b3821366SPavankumar Nandeshwar s->reg_start[0] = HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM0_RELEASE_RING_BASE_LSB(hal); 708c0600b35SPavankumar Nandeshwar s->reg_start[1] = HAL_SEQ_WCSS_UMAC_WBM_REG + HAL_WBM0_RELEASE_RING_HP; 709b3821366SPavankumar Nandeshwar s->reg_size[0] = HAL_WBM1_RELEASE_RING_BASE_LSB(hal) - 710b3821366SPavankumar Nandeshwar HAL_WBM0_RELEASE_RING_BASE_LSB(hal); 711c0600b35SPavankumar Nandeshwar s->reg_size[1] = HAL_WBM1_RELEASE_RING_HP - HAL_WBM0_RELEASE_RING_HP; 712c0600b35SPavankumar Nandeshwar 713c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_RXDMA_BUF]; 714c0600b35SPavankumar Nandeshwar s->max_rings = 2; 715c0600b35SPavankumar Nandeshwar s->mac_type = ATH12K_HAL_SRNG_PMAC; 716c0600b35SPavankumar Nandeshwar 717c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_RXDMA_DST]; 718c0600b35SPavankumar Nandeshwar s->max_rings = 1; 719c0600b35SPavankumar Nandeshwar s->entry_size = sizeof(struct hal_reo_entrance_ring) >> 2; 720c0600b35SPavankumar Nandeshwar 721c0600b35SPavankumar Nandeshwar /* below rings are not used */ 722c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_RXDMA_DIR_BUF]; 723c0600b35SPavankumar Nandeshwar s->max_rings = 0; 724c0600b35SPavankumar Nandeshwar 725c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_PPE2TCL]; 726c0600b35SPavankumar Nandeshwar s->max_rings = 0; 727c0600b35SPavankumar Nandeshwar 728c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_PPE_RELEASE]; 729c0600b35SPavankumar Nandeshwar s->max_rings = 0; 730c0600b35SPavankumar Nandeshwar 731c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_TX_MONITOR_BUF]; 732c0600b35SPavankumar Nandeshwar s->max_rings = 0; 733c0600b35SPavankumar Nandeshwar 734c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_TX_MONITOR_DST]; 735c0600b35SPavankumar Nandeshwar s->max_rings = 0; 736c0600b35SPavankumar Nandeshwar 737c0600b35SPavankumar Nandeshwar s = &hal->srng_config[HAL_PPE2TCL]; 738c0600b35SPavankumar Nandeshwar s->max_rings = 0; 739c0600b35SPavankumar Nandeshwar 740c0600b35SPavankumar Nandeshwar return 0; 741c0600b35SPavankumar Nandeshwar } 742c0600b35SPavankumar Nandeshwar 7431c1d4b49SPavankumar Nandeshwar const struct ath12k_hal_tcl_to_wbm_rbm_map 7441c1d4b49SPavankumar Nandeshwar ath12k_hal_tcl_to_wbm_rbm_map_wcn7850[DP_TCL_NUM_RING_MAX] = { 7451c1d4b49SPavankumar Nandeshwar { 7461c1d4b49SPavankumar Nandeshwar .wbm_ring_num = 0, 7471c1d4b49SPavankumar Nandeshwar .rbm_id = HAL_RX_BUF_RBM_SW0_BM, 7481c1d4b49SPavankumar Nandeshwar }, 7491c1d4b49SPavankumar Nandeshwar { 7501c1d4b49SPavankumar Nandeshwar .wbm_ring_num = 2, 7511c1d4b49SPavankumar Nandeshwar .rbm_id = HAL_RX_BUF_RBM_SW2_BM, 7521c1d4b49SPavankumar Nandeshwar }, 7531c1d4b49SPavankumar Nandeshwar { 7541c1d4b49SPavankumar Nandeshwar .wbm_ring_num = 4, 7551c1d4b49SPavankumar Nandeshwar .rbm_id = HAL_RX_BUF_RBM_SW4_BM, 7561c1d4b49SPavankumar Nandeshwar }, 7571c1d4b49SPavankumar Nandeshwar }; 7581c1d4b49SPavankumar Nandeshwar 759492dea18SPavankumar Nandeshwar const struct ath12k_hw_hal_params ath12k_hw_hal_params_wcn7850 = { 760492dea18SPavankumar Nandeshwar .rx_buf_rbm = HAL_RX_BUF_RBM_SW1_BM, 761492dea18SPavankumar Nandeshwar .wbm2sw_cc_enable = HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW0_EN | 762492dea18SPavankumar Nandeshwar HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW2_EN | 763492dea18SPavankumar Nandeshwar HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW3_EN | 764492dea18SPavankumar Nandeshwar HAL_WBM_SW_COOKIE_CONV_CFG_WBM2SW4_EN, 765492dea18SPavankumar Nandeshwar }; 766492dea18SPavankumar Nandeshwar 767c0600b35SPavankumar Nandeshwar const struct hal_ops hal_wcn7850_ops = { 768c0600b35SPavankumar Nandeshwar .create_srng_config = ath12k_hal_srng_create_config_wcn7850, 769c0600b35SPavankumar Nandeshwar .rx_desc_set_msdu_len = ath12k_hal_rx_desc_set_msdu_len_wcn7850, 770c0600b35SPavankumar Nandeshwar .rx_desc_get_dot11_hdr = ath12k_hal_rx_desc_get_dot11_hdr_wcn7850, 771c0600b35SPavankumar Nandeshwar .rx_desc_get_crypto_header = ath12k_hal_rx_desc_get_crypto_hdr_wcn7850, 772c0600b35SPavankumar Nandeshwar .rx_desc_copy_end_tlv = ath12k_hal_rx_desc_copy_end_tlv_wcn7850, 773c0600b35SPavankumar Nandeshwar .rx_desc_get_msdu_src_link_id = ath12k_hal_rx_desc_get_msdu_src_link_wcn7850, 774c0600b35SPavankumar Nandeshwar .extract_rx_desc_data = ath12k_hal_extract_rx_desc_data_wcn7850, 775c0600b35SPavankumar Nandeshwar .rx_desc_get_l3_pad_bytes = ath12k_hal_rx_desc_get_l3_pad_bytes_wcn7850, 776c0600b35SPavankumar Nandeshwar .rx_desc_get_mpdu_start_tag = ath12k_hal_rx_desc_get_mpdu_start_tag_wcn7850, 777c0600b35SPavankumar Nandeshwar .rx_desc_get_mpdu_ppdu_id = ath12k_hal_rx_desc_get_mpdu_ppdu_id_wcn7850, 778c0600b35SPavankumar Nandeshwar .rx_desc_get_msdu_payload = ath12k_hal_rx_desc_get_msdu_payload_wcn7850, 779e9f00e22SPavankumar Nandeshwar .ce_dst_setup = ath12k_wifi7_hal_ce_dst_setup, 780e9f00e22SPavankumar Nandeshwar .srng_src_hw_init = ath12k_wifi7_hal_srng_src_hw_init, 781e9f00e22SPavankumar Nandeshwar .srng_dst_hw_init = ath12k_wifi7_hal_srng_dst_hw_init, 782e9f00e22SPavankumar Nandeshwar .set_umac_srng_ptr_addr = ath12k_wifi7_hal_set_umac_srng_ptr_addr, 783cb419f58SPavankumar Nandeshwar .srng_update_shadow_config = ath12k_wifi7_hal_srng_update_shadow_config, 784cb419f58SPavankumar Nandeshwar .srng_get_ring_id = ath12k_wifi7_hal_srng_get_ring_id, 7853d947cefSPavankumar Nandeshwar .ce_get_desc_size = ath12k_wifi7_hal_ce_get_desc_size, 7863d947cefSPavankumar Nandeshwar .ce_src_set_desc = ath12k_wifi7_hal_ce_src_set_desc, 7873d947cefSPavankumar Nandeshwar .ce_dst_set_desc = ath12k_wifi7_hal_ce_dst_set_desc, 788eba935ecSPavankumar Nandeshwar .ce_dst_status_get_length = ath12k_wifi7_hal_ce_dst_status_get_length, 789eba935ecSPavankumar Nandeshwar .set_link_desc_addr = ath12k_wifi7_hal_set_link_desc_addr, 790356942d3SPavankumar Nandeshwar .tx_set_dscp_tid_map = ath12k_wifi7_hal_tx_set_dscp_tid_map, 791356942d3SPavankumar Nandeshwar .tx_configure_bank_register = 792356942d3SPavankumar Nandeshwar ath12k_wifi7_hal_tx_configure_bank_register, 793356942d3SPavankumar Nandeshwar .reoq_lut_addr_read_enable = ath12k_wifi7_hal_reoq_lut_addr_read_enable, 794356942d3SPavankumar Nandeshwar .reoq_lut_set_max_peerid = ath12k_wifi7_hal_reoq_lut_set_max_peerid, 795356942d3SPavankumar Nandeshwar .write_reoq_lut_addr = ath12k_wifi7_hal_write_reoq_lut_addr, 796356942d3SPavankumar Nandeshwar .write_ml_reoq_lut_addr = ath12k_wifi7_hal_write_ml_reoq_lut_addr, 797356942d3SPavankumar Nandeshwar .setup_link_idle_list = ath12k_wifi7_hal_setup_link_idle_list, 7989615a672SBaochen Qiang .reo_init_cmd_ring = ath12k_wifi7_hal_reo_init_cmd_ring_tlv64, 799631ee338SJeff Johnson .reo_shared_qaddr_cache_clear = ath12k_wifi7_hal_reo_shared_qaddr_cache_clear, 80017540a7cSPavankumar Nandeshwar .reo_hw_setup = ath12k_wifi7_hal_reo_hw_setup, 80117540a7cSPavankumar Nandeshwar .rx_buf_addr_info_set = ath12k_wifi7_hal_rx_buf_addr_info_set, 80217540a7cSPavankumar Nandeshwar .rx_buf_addr_info_get = ath12k_wifi7_hal_rx_buf_addr_info_get, 803ea23813aSPavankumar Nandeshwar .cc_config = ath12k_wifi7_hal_cc_config, 804ea23813aSPavankumar Nandeshwar .get_idle_link_rbm = ath12k_wifi7_hal_get_idle_link_rbm, 805c8706025SPavankumar Nandeshwar .rx_msdu_list_get = ath12k_wifi7_hal_rx_msdu_list_get, 806c8706025SPavankumar Nandeshwar .rx_reo_ent_buf_paddr_get = ath12k_wifi7_hal_rx_reo_ent_buf_paddr_get, 8079615a672SBaochen Qiang .reo_cmd_enc_tlv_hdr = ath12k_hal_encode_tlv64_hdr, 8081f165022SBaochen Qiang .reo_status_dec_tlv_hdr = ath12k_hal_decode_tlv64_hdr, 809c0600b35SPavankumar Nandeshwar }; 810