return 0;
 }
 
+static u16 ath12k_hal_qcn9274_rx_mpdu_start_wmask_get(void)
+{
+       return QCN9274_MPDU_START_WMASK;
+}
+
+static u32 ath12k_hal_qcn9274_rx_msdu_end_wmask_get(void)
+{
+       return QCN9274_MSDU_END_WMASK;
+}
+
+static const struct hal_rx_ops *ath12k_hal_qcn9274_get_hal_rx_compact_ops(void)
+{
+       return &hal_rx_qcn9274_compact_ops;
+}
+
 static bool ath12k_hw_qcn9274_dp_rx_h_msdu_done(struct hal_rx_desc *desc)
 {
        return !!le32_get_bits(desc->u.qcn9274.msdu_end.info14,
        .rx_desc_get_desc_size = ath12k_hw_qcn9274_get_rx_desc_size,
 };
 
+static bool ath12k_hw_qcn9274_compact_rx_desc_get_first_msdu(struct hal_rx_desc *desc)
+{
+       return !!le16_get_bits(desc->u.qcn9274_compact.msdu_end.info5,
+                              RX_MSDU_END_INFO5_FIRST_MSDU);
+}
+
+static bool ath12k_hw_qcn9274_compact_rx_desc_get_last_msdu(struct hal_rx_desc *desc)
+{
+       return !!le16_get_bits(desc->u.qcn9274_compact.msdu_end.info5,
+                              RX_MSDU_END_INFO5_LAST_MSDU);
+}
+
+static u8 ath12k_hw_qcn9274_compact_rx_desc_get_l3_pad_bytes(struct hal_rx_desc *desc)
+{
+       return le16_get_bits(desc->u.qcn9274_compact.msdu_end.info5,
+                            RX_MSDU_END_INFO5_L3_HDR_PADDING);
+}
+
+static bool ath12k_hw_qcn9274_compact_rx_desc_encrypt_valid(struct hal_rx_desc *desc)
+{
+       return !!le32_get_bits(desc->u.qcn9274_compact.mpdu_start.info4,
+                              RX_MPDU_START_INFO4_ENCRYPT_INFO_VALID);
+}
+
+static u32 ath12k_hw_qcn9274_compact_rx_desc_get_encrypt_type(struct hal_rx_desc *desc)
+{
+       return le32_get_bits(desc->u.qcn9274_compact.mpdu_start.info2,
+                            RX_MPDU_START_INFO2_ENC_TYPE);
+}
+
+static u8 ath12k_hw_qcn9274_compact_rx_desc_get_decap_type(struct hal_rx_desc *desc)
+{
+       return le32_get_bits(desc->u.qcn9274_compact.msdu_end.info11,
+                            RX_MSDU_END_INFO11_DECAP_FORMAT);
+}
+
+static u8 ath12k_hw_qcn9274_compact_rx_desc_get_mesh_ctl(struct hal_rx_desc *desc)
+{
+       return le32_get_bits(desc->u.qcn9274.msdu_end.info11,
+                            RX_MSDU_END_INFO11_MESH_CTRL_PRESENT);
+}
+
+static bool
+ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_seq_ctl_vld(struct hal_rx_desc *desc)
+{
+       return !!le32_get_bits(desc->u.qcn9274_compact.mpdu_start.info4,
+                              RX_MPDU_START_INFO4_MPDU_SEQ_CTRL_VALID);
+}
+
+static bool ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_fc_valid(struct hal_rx_desc *desc)
+{
+       return !!le32_get_bits(desc->u.qcn9274_compact.mpdu_start.info4,
+                              RX_MPDU_START_INFO4_MPDU_FCTRL_VALID);
+}
+
+static u16
+ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_start_seq_no(struct hal_rx_desc *desc)
+{
+       return le32_get_bits(desc->u.qcn9274_compact.mpdu_start.info4,
+                            RX_MPDU_START_INFO4_MPDU_SEQ_NUM);
+}
+
+static u16 ath12k_hw_qcn9274_compact_rx_desc_get_msdu_len(struct hal_rx_desc *desc)
+{
+       return le32_get_bits(desc->u.qcn9274_compact.msdu_end.info10,
+                            RX_MSDU_END_INFO10_MSDU_LENGTH);
+}
+
+static u8 ath12k_hw_qcn9274_compact_rx_desc_get_msdu_sgi(struct hal_rx_desc *desc)
+{
+       return le32_get_bits(desc->u.qcn9274_compact.msdu_end.info12,
+                            RX_MSDU_END_INFO12_SGI);
+}
+
+static u8 ath12k_hw_qcn9274_compact_rx_desc_get_msdu_rate_mcs(struct hal_rx_desc *desc)
+{
+       return le32_get_bits(desc->u.qcn9274_compact.msdu_end.info12,
+                            RX_MSDU_END_INFO12_RATE_MCS);
+}
+
+static u8 ath12k_hw_qcn9274_compact_rx_desc_get_msdu_rx_bw(struct hal_rx_desc *desc)
+{
+       return le32_get_bits(desc->u.qcn9274_compact.msdu_end.info12,
+                            RX_MSDU_END_INFO12_RECV_BW);
+}
+
+static u32 ath12k_hw_qcn9274_compact_rx_desc_get_msdu_freq(struct hal_rx_desc *desc)
+{
+       return __le32_to_cpu(desc->u.qcn9274_compact.msdu_end.phy_meta_data);
+}
+
+static u8 ath12k_hw_qcn9274_compact_rx_desc_get_msdu_pkt_type(struct hal_rx_desc *desc)
+{
+       return le32_get_bits(desc->u.qcn9274_compact.msdu_end.info12,
+                            RX_MSDU_END_INFO12_PKT_TYPE);
+}
+
+static u8 ath12k_hw_qcn9274_compact_rx_desc_get_msdu_nss(struct hal_rx_desc *desc)
+{
+       return le32_get_bits(desc->u.qcn9274_compact.msdu_end.info12,
+                            RX_MSDU_END_QCN9274_INFO12_MIMO_SS_BITMAP);
+}
+
+static u8 ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_tid(struct hal_rx_desc *desc)
+{
+       return le16_get_bits(desc->u.qcn9274_compact.msdu_end.info5,
+                            RX_MSDU_END_QCN9274_INFO5_TID);
+}
+
+static u16 ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_peer_id(struct hal_rx_desc *desc)
+{
+       return __le16_to_cpu(desc->u.qcn9274_compact.mpdu_start.sw_peer_id);
+}
+
+static void ath12k_hw_qcn9274_compact_rx_desc_copy_end_tlv(struct hal_rx_desc *fdesc,
+                                                          struct hal_rx_desc *ldesc)
+{
+       fdesc->u.qcn9274_compact.msdu_end = ldesc->u.qcn9274_compact.msdu_end;
+}
+
+static u32 ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_ppdu_id(struct hal_rx_desc *desc)
+{
+       return __le16_to_cpu(desc->u.qcn9274_compact.mpdu_start.phy_ppdu_id);
+}
+
+static void
+ath12k_hw_qcn9274_compact_rx_desc_set_msdu_len(struct hal_rx_desc *desc, u16 len)
+{
+       u32 info = __le32_to_cpu(desc->u.qcn9274_compact.msdu_end.info10);
+
+       info = u32_replace_bits(info, len, RX_MSDU_END_INFO10_MSDU_LENGTH);
+       desc->u.qcn9274_compact.msdu_end.info10 = __cpu_to_le32(info);
+}
+
+static u8 *ath12k_hw_qcn9274_compact_rx_desc_get_msdu_payload(struct hal_rx_desc *desc)
+{
+       return &desc->u.qcn9274_compact.msdu_payload[0];
+}
+
+static u32 ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_start_offset(void)
+{
+       return offsetof(struct hal_rx_desc_qcn9274_compact, mpdu_start);
+}
+
+static u32 ath12k_hw_qcn9274_compact_rx_desc_get_msdu_end_offset(void)
+{
+       return offsetof(struct hal_rx_desc_qcn9274_compact, msdu_end);
+}
+
+static bool ath12k_hw_qcn9274_compact_rx_desc_mac_addr2_valid(struct hal_rx_desc *desc)
+{
+       return __le32_to_cpu(desc->u.qcn9274_compact.mpdu_start.info4) &
+                            RX_MPDU_START_INFO4_MAC_ADDR2_VALID;
+}
+
+static u8 *ath12k_hw_qcn9274_compact_rx_desc_mpdu_start_addr2(struct hal_rx_desc *desc)
+{
+       return desc->u.qcn9274_compact.mpdu_start.addr2;
+}
+
+static bool ath12k_hw_qcn9274_compact_rx_desc_is_da_mcbc(struct hal_rx_desc *desc)
+{
+       return __le32_to_cpu(desc->u.qcn9274_compact.mpdu_start.info6) &
+              RX_MPDU_START_INFO6_MCAST_BCAST;
+}
+
+static void ath12k_hw_qcn9274_compact_rx_desc_get_dot11_hdr(struct hal_rx_desc *desc,
+                                                           struct ieee80211_hdr *hdr)
+{
+       hdr->frame_control = desc->u.qcn9274_compact.mpdu_start.frame_ctrl;
+       hdr->duration_id = desc->u.qcn9274_compact.mpdu_start.duration;
+       ether_addr_copy(hdr->addr1, desc->u.qcn9274_compact.mpdu_start.addr1);
+       ether_addr_copy(hdr->addr2, desc->u.qcn9274_compact.mpdu_start.addr2);
+       ether_addr_copy(hdr->addr3, desc->u.qcn9274_compact.mpdu_start.addr3);
+       if (__le32_to_cpu(desc->u.qcn9274_compact.mpdu_start.info4) &
+                       RX_MPDU_START_INFO4_MAC_ADDR4_VALID) {
+               ether_addr_copy(hdr->addr4, desc->u.qcn9274_compact.mpdu_start.addr4);
+       }
+       hdr->seq_ctrl = desc->u.qcn9274_compact.mpdu_start.seq_ctrl;
+}
+
+static void
+ath12k_hw_qcn9274_compact_rx_desc_get_crypto_hdr(struct hal_rx_desc *desc,
+                                                u8 *crypto_hdr,
+                                                enum hal_encrypt_type enctype)
+{
+       unsigned int key_id;
+
+       switch (enctype) {
+       case HAL_ENCRYPT_TYPE_OPEN:
+               return;
+       case HAL_ENCRYPT_TYPE_TKIP_NO_MIC:
+       case HAL_ENCRYPT_TYPE_TKIP_MIC:
+               crypto_hdr[0] =
+               HAL_RX_MPDU_INFO_PN_GET_BYTE2(desc->u.qcn9274_compact.mpdu_start.pn[0]);
+               crypto_hdr[1] = 0;
+               crypto_hdr[2] =
+               HAL_RX_MPDU_INFO_PN_GET_BYTE1(desc->u.qcn9274_compact.mpdu_start.pn[0]);
+               break;
+       case HAL_ENCRYPT_TYPE_CCMP_128:
+       case HAL_ENCRYPT_TYPE_CCMP_256:
+       case HAL_ENCRYPT_TYPE_GCMP_128:
+       case HAL_ENCRYPT_TYPE_AES_GCMP_256:
+               crypto_hdr[0] =
+               HAL_RX_MPDU_INFO_PN_GET_BYTE1(desc->u.qcn9274_compact.mpdu_start.pn[0]);
+               crypto_hdr[1] =
+               HAL_RX_MPDU_INFO_PN_GET_BYTE2(desc->u.qcn9274_compact.mpdu_start.pn[0]);
+               crypto_hdr[2] = 0;
+               break;
+       case HAL_ENCRYPT_TYPE_WEP_40:
+       case HAL_ENCRYPT_TYPE_WEP_104:
+       case HAL_ENCRYPT_TYPE_WEP_128:
+       case HAL_ENCRYPT_TYPE_WAPI_GCM_SM4:
+       case HAL_ENCRYPT_TYPE_WAPI:
+               return;
+       }
+       key_id = le32_get_bits(desc->u.qcn9274_compact.mpdu_start.info5,
+                              RX_MPDU_START_INFO5_KEY_ID);
+       crypto_hdr[3] = 0x20 | (key_id << 6);
+       crypto_hdr[4] =
+               HAL_RX_MPDU_INFO_PN_GET_BYTE3(desc->u.qcn9274_compact.mpdu_start.pn[0]);
+       crypto_hdr[5] =
+               HAL_RX_MPDU_INFO_PN_GET_BYTE4(desc->u.qcn9274_compact.mpdu_start.pn[0]);
+       crypto_hdr[6] =
+               HAL_RX_MPDU_INFO_PN_GET_BYTE1(desc->u.qcn9274_compact.mpdu_start.pn[1]);
+       crypto_hdr[7] =
+               HAL_RX_MPDU_INFO_PN_GET_BYTE2(desc->u.qcn9274_compact.mpdu_start.pn[1]);
+}
+
+static u16 ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_frame_ctl(struct hal_rx_desc *desc)
+{
+       return __le16_to_cpu(desc->u.qcn9274_compact.mpdu_start.frame_ctrl);
+}
+
+static bool ath12k_hw_qcn9274_compact_dp_rx_h_msdu_done(struct hal_rx_desc *desc)
+{
+       return !!le32_get_bits(desc->u.qcn9274_compact.msdu_end.info14,
+                              RX_MSDU_END_INFO14_MSDU_DONE);
+}
+
+static bool ath12k_hw_qcn9274_compact_dp_rx_h_l4_cksum_fail(struct hal_rx_desc *desc)
+{
+       return !!le32_get_bits(desc->u.qcn9274_compact.msdu_end.info13,
+                              RX_MSDU_END_INFO13_TCP_UDP_CKSUM_FAIL);
+}
+
+static bool ath12k_hw_qcn9274_compact_dp_rx_h_ip_cksum_fail(struct hal_rx_desc *desc)
+{
+       return !!le32_get_bits(desc->u.qcn9274_compact.msdu_end.info13,
+                              RX_MSDU_END_INFO13_IP_CKSUM_FAIL);
+}
+
+static bool ath12k_hw_qcn9274_compact_dp_rx_h_is_decrypted(struct hal_rx_desc *desc)
+{
+       return (le32_get_bits(desc->u.qcn9274_compact.msdu_end.info14,
+                             RX_MSDU_END_INFO14_DECRYPT_STATUS_CODE) ==
+                       RX_DESC_DECRYPT_STATUS_CODE_OK);
+}
+
+static u32 ath12k_hw_qcn9274_compact_dp_rx_h_mpdu_err(struct hal_rx_desc *desc)
+{
+       u32 info = __le32_to_cpu(desc->u.qcn9274_compact.msdu_end.info13);
+       u32 errmap = 0;
+
+       if (info & RX_MSDU_END_INFO13_FCS_ERR)
+               errmap |= HAL_RX_MPDU_ERR_FCS;
+
+       if (info & RX_MSDU_END_INFO13_DECRYPT_ERR)
+               errmap |= HAL_RX_MPDU_ERR_DECRYPT;
+
+       if (info & RX_MSDU_END_INFO13_TKIP_MIC_ERR)
+               errmap |= HAL_RX_MPDU_ERR_TKIP_MIC;
+
+       if (info & RX_MSDU_END_INFO13_A_MSDU_ERROR)
+               errmap |= HAL_RX_MPDU_ERR_AMSDU_ERR;
+
+       if (info & RX_MSDU_END_INFO13_OVERFLOW_ERR)
+               errmap |= HAL_RX_MPDU_ERR_OVERFLOW;
+
+       if (info & RX_MSDU_END_INFO13_MSDU_LEN_ERR)
+               errmap |= HAL_RX_MPDU_ERR_MSDU_LEN;
+
+       if (info & RX_MSDU_END_INFO13_MPDU_LEN_ERR)
+               errmap |= HAL_RX_MPDU_ERR_MPDU_LEN;
+
+       return errmap;
+}
+
+static u32 ath12k_hw_qcn9274_compact_get_rx_desc_size(void)
+{
+       return sizeof(struct hal_rx_desc_qcn9274_compact);
+}
+
+const struct hal_rx_ops hal_rx_qcn9274_compact_ops = {
+       .rx_desc_get_first_msdu = ath12k_hw_qcn9274_compact_rx_desc_get_first_msdu,
+       .rx_desc_get_last_msdu = ath12k_hw_qcn9274_compact_rx_desc_get_last_msdu,
+       .rx_desc_get_l3_pad_bytes = ath12k_hw_qcn9274_compact_rx_desc_get_l3_pad_bytes,
+       .rx_desc_encrypt_valid = ath12k_hw_qcn9274_compact_rx_desc_encrypt_valid,
+       .rx_desc_get_encrypt_type = ath12k_hw_qcn9274_compact_rx_desc_get_encrypt_type,
+       .rx_desc_get_decap_type = ath12k_hw_qcn9274_compact_rx_desc_get_decap_type,
+       .rx_desc_get_mesh_ctl = ath12k_hw_qcn9274_compact_rx_desc_get_mesh_ctl,
+       .rx_desc_get_mpdu_seq_ctl_vld =
+               ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_seq_ctl_vld,
+       .rx_desc_get_mpdu_fc_valid = ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_fc_valid,
+       .rx_desc_get_mpdu_start_seq_no =
+               ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_start_seq_no,
+       .rx_desc_get_msdu_len = ath12k_hw_qcn9274_compact_rx_desc_get_msdu_len,
+       .rx_desc_get_msdu_sgi = ath12k_hw_qcn9274_compact_rx_desc_get_msdu_sgi,
+       .rx_desc_get_msdu_rate_mcs = ath12k_hw_qcn9274_compact_rx_desc_get_msdu_rate_mcs,
+       .rx_desc_get_msdu_rx_bw = ath12k_hw_qcn9274_compact_rx_desc_get_msdu_rx_bw,
+       .rx_desc_get_msdu_freq = ath12k_hw_qcn9274_compact_rx_desc_get_msdu_freq,
+       .rx_desc_get_msdu_pkt_type = ath12k_hw_qcn9274_compact_rx_desc_get_msdu_pkt_type,
+       .rx_desc_get_msdu_nss = ath12k_hw_qcn9274_compact_rx_desc_get_msdu_nss,
+       .rx_desc_get_mpdu_tid = ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_tid,
+       .rx_desc_get_mpdu_peer_id = ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_peer_id,
+       .rx_desc_copy_end_tlv = ath12k_hw_qcn9274_compact_rx_desc_copy_end_tlv,
+       .rx_desc_get_mpdu_ppdu_id = ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_ppdu_id,
+       .rx_desc_set_msdu_len = ath12k_hw_qcn9274_compact_rx_desc_set_msdu_len,
+       .rx_desc_get_msdu_payload = ath12k_hw_qcn9274_compact_rx_desc_get_msdu_payload,
+       .rx_desc_get_mpdu_start_offset =
+               ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_start_offset,
+       .rx_desc_get_msdu_end_offset =
+               ath12k_hw_qcn9274_compact_rx_desc_get_msdu_end_offset,
+       .rx_desc_mac_addr2_valid = ath12k_hw_qcn9274_compact_rx_desc_mac_addr2_valid,
+       .rx_desc_mpdu_start_addr2 = ath12k_hw_qcn9274_compact_rx_desc_mpdu_start_addr2,
+       .rx_desc_is_da_mcbc = ath12k_hw_qcn9274_compact_rx_desc_is_da_mcbc,
+       .rx_desc_get_dot11_hdr = ath12k_hw_qcn9274_compact_rx_desc_get_dot11_hdr,
+       .rx_desc_get_crypto_header = ath12k_hw_qcn9274_compact_rx_desc_get_crypto_hdr,
+       .rx_desc_get_mpdu_frame_ctl =
+               ath12k_hw_qcn9274_compact_rx_desc_get_mpdu_frame_ctl,
+       .dp_rx_h_msdu_done = ath12k_hw_qcn9274_compact_dp_rx_h_msdu_done,
+       .dp_rx_h_l4_cksum_fail = ath12k_hw_qcn9274_compact_dp_rx_h_l4_cksum_fail,
+       .dp_rx_h_ip_cksum_fail = ath12k_hw_qcn9274_compact_dp_rx_h_ip_cksum_fail,
+       .dp_rx_h_is_decrypted = ath12k_hw_qcn9274_compact_dp_rx_h_is_decrypted,
+       .dp_rx_h_mpdu_err = ath12k_hw_qcn9274_compact_dp_rx_h_mpdu_err,
+       .rx_desc_get_desc_size = ath12k_hw_qcn9274_compact_get_rx_desc_size,
+};
+
 const struct hal_ops hal_qcn9274_ops = {
        .create_srng_config = ath12k_hal_srng_create_config_qcn9274,
        .tcl_to_wbm_rbm_map = ath12k_hal_qcn9274_tcl_to_wbm_rbm_map,
+       .rxdma_ring_wmask_rx_mpdu_start = ath12k_hal_qcn9274_rx_mpdu_start_wmask_get,
+       .rxdma_ring_wmask_rx_msdu_end = ath12k_hal_qcn9274_rx_msdu_end_wmask_get,
+       .get_hal_rx_compact_ops = ath12k_hal_qcn9274_get_hal_rx_compact_ops,
 };
 
 static bool ath12k_hw_wcn7850_rx_desc_get_first_msdu(struct hal_rx_desc *desc)
 const struct hal_ops hal_wcn7850_ops = {
        .create_srng_config = ath12k_hal_srng_create_config_wcn7850,
        .tcl_to_wbm_rbm_map = ath12k_hal_wcn7850_tcl_to_wbm_rbm_map,
+       .rxdma_ring_wmask_rx_mpdu_start = NULL,
+       .rxdma_ring_wmask_rx_msdu_end = NULL,
+       .get_hal_rx_compact_ops = NULL,
 };
 
 static int ath12k_hal_alloc_cont_rdp(struct ath12k_base *ab)
 
 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
 /*
  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 #ifndef ATH12K_RX_DESC_H
 #define ATH12K_RX_DESC_H
        __le32 res1;
 } __packed;
 
+#define QCN9274_MPDU_START_SELECT_MPDU_START_TAG                       BIT(0)
+#define QCN9274_MPDU_START_SELECT_INFO0_REO_QUEUE_DESC_LO              BIT(1)
+#define QCN9274_MPDU_START_SELECT_INFO1_PN_31_0                                BIT(2)
+#define QCN9274_MPDU_START_SELECT_PN_95_32                             BIT(3)
+#define QCN9274_MPDU_START_SELECT_PN_127_96_INFO2                      BIT(4)
+#define QCN9274_MPDU_START_SELECT_PEER_MDATA_INFO3_PHY_PPDU_ID         BIT(5)
+#define QCN9274_MPDU_START_SELECT_AST_IDX_SW_PEER_ID_INFO4             BIT(6)
+#define QCN9274_MPDU_START_SELECT_INFO5_INFO6                          BIT(7)
+#define QCN9274_MPDU_START_SELECT_FRAME_CTRL_DURATION_ADDR1_31_0       BIT(8)
+#define QCN9274_MPDU_START_SELECT_ADDR2_47_0_ADDR1_47_32               BIT(9)
+#define QCN9274_MPDU_START_SELECT_ADDR3_47_0_SEQ_CTRL                  BIT(10)
+#define QCN9274_MPDU_START_SELECT_ADDR4_47_0_QOS_CTRL                  BIT(11)
+#define QCN9274_MPDU_START_SELECT_HT_CTRL_INFO7                                BIT(12)
+#define QCN9274_MPDU_START_SELECT_ML_ADDR1_47_0_ML_ADDR2_15_0          BIT(13)
+#define QCN9274_MPDU_START_SELECT_ML_ADDR2_47_16_INFO8                 BIT(14)
+#define QCN9274_MPDU_START_SELECT_RES_0_RES_1                          BIT(15)
+
+#define QCN9274_MPDU_START_WMASK (QCN9274_MPDU_START_SELECT_INFO1_PN_31_0 |    \
+               QCN9274_MPDU_START_SELECT_PN_95_32 |                            \
+               QCN9274_MPDU_START_SELECT_PN_127_96_INFO2 |                     \
+               QCN9274_MPDU_START_SELECT_PEER_MDATA_INFO3_PHY_PPDU_ID |        \
+               QCN9274_MPDU_START_SELECT_AST_IDX_SW_PEER_ID_INFO4 |            \
+               QCN9274_MPDU_START_SELECT_INFO5_INFO6 |                         \
+               QCN9274_MPDU_START_SELECT_FRAME_CTRL_DURATION_ADDR1_31_0 |      \
+               QCN9274_MPDU_START_SELECT_ADDR2_47_0_ADDR1_47_32 |              \
+               QCN9274_MPDU_START_SELECT_ADDR3_47_0_SEQ_CTRL |                 \
+               QCN9274_MPDU_START_SELECT_ADDR4_47_0_QOS_CTRL)
+
+/* The below rx_mpdu_start_qcn9274_compact structure is tied with the mask
+ * value QCN9274_MPDU_START_WMASK. If the mask value changes the structure
+ * will also change.
+ */
+
+struct rx_mpdu_start_qcn9274_compact {
+       __le32 info1;
+       __le32 pn[4];
+       __le32 info2;
+       __le32 peer_meta_data;
+       __le16 info3;
+       __le16 phy_ppdu_id;
+       __le16 ast_index;
+       __le16 sw_peer_id;
+       __le32 info4;
+       __le32 info5;
+       __le32 info6;
+       __le16 frame_ctrl;
+       __le16 duration;
+       u8 addr1[ETH_ALEN];
+       u8 addr2[ETH_ALEN];
+       u8 addr3[ETH_ALEN];
+       __le16 seq_ctrl;
+       u8 addr4[ETH_ALEN];
+       __le16 qos_ctrl;
+} __packed;
+
 /* rx_mpdu_start
  *
  * reo_destination_indication
        __le32 info14;
 } __packed;
 
+#define QCN9274_MSDU_END_SELECT_MSDU_END_TAG                           BIT(0)
+#define QCN9274_MSDU_END_SELECT_INFO0_PHY_PPDUID_IP_HDR_CSUM_INFO1     BIT(1)
+#define QCN9274_MSDU_END_SELECT_INFO2_CUMULATIVE_CSUM_RULE_IND_0       BIT(2)
+#define QCN9274_MSDU_END_SELECT_IPV6_OP_CRC_INFO3_TYPE13               BIT(3)
+#define QCN9274_MSDU_END_SELECT_RULE_IND_1_TCP_SEQ_NUM                 BIT(4)
+#define QCN9274_MSDU_END_SELECT_TCP_ACK_NUM_INFO4_WINDOW_SIZE          BIT(5)
+#define QCN9274_MSDU_END_SELECT_SA_SW_PER_ID_INFO5_SA_DA_ID            BIT(6)
+#define QCN9274_MSDU_END_SELECT_INFO6_FSE_METADATA                     BIT(7)
+#define QCN9274_MSDU_END_SELECT_CCE_MDATA_TCP_UDP_CSUM_INFO7_IP_LEN    BIT(8)
+#define QCN9274_MSDU_END_SELECT_INFO8_INFO9                            BIT(9)
+#define QCN9274_MSDU_END_SELECT_INFO10_INFO11                          BIT(10)
+#define QCN9274_MSDU_END_SELECT_VLAN_CTAG_STAG_CI_PEER_MDATA           BIT(11)
+#define QCN9274_MSDU_END_SELECT_INFO12_AND_FLOW_ID_TOEPLITZ            BIT(12)
+#define QCN9274_MSDU_END_SELECT_PPDU_START_TS_63_32_PHY_MDATA          BIT(13)
+#define QCN9274_MSDU_END_SELECT_PPDU_START_TS_31_0_TOEPLITZ_HASH_2_4   BIT(14)
+#define QCN9274_MSDU_END_SELECT_RES0_SA_47_0                           BIT(15)
+#define QCN9274_MSDU_END_SELECT_INFO13_INFO14                          BIT(16)
+
+#define QCN9274_MSDU_END_WMASK (QCN9274_MSDU_END_SELECT_MSDU_END_TAG | \
+               QCN9274_MSDU_END_SELECT_SA_SW_PER_ID_INFO5_SA_DA_ID |   \
+               QCN9274_MSDU_END_SELECT_INFO10_INFO11 |                 \
+               QCN9274_MSDU_END_SELECT_INFO12_AND_FLOW_ID_TOEPLITZ |   \
+               QCN9274_MSDU_END_SELECT_PPDU_START_TS_63_32_PHY_MDATA | \
+               QCN9274_MSDU_END_SELECT_INFO13_INFO14)
+
+/* The below rx_msdu_end_qcn9274_compact structure is tied with the mask value
+ * QCN9274_MSDU_END_WMASK. If the mask value changes the structure will also
+ * change.
+ */
+
+struct rx_msdu_end_qcn9274_compact {
+       __le64 msdu_end_tag;
+       __le16 sa_sw_peer_id;
+       __le16 info5;
+       __le16 sa_idx;
+       __le16 da_idx_or_sw_peer_id;
+       __le32 info10;
+       __le32 info11;
+       __le32 info12;
+       __le32 flow_id_toeplitz;
+       __le32 ppdu_start_timestamp_63_32;
+       __le32 phy_meta_data;
+       __le32 info13;
+       __le32 info14;
+} __packed;
+
 /* These macro definitions are only used for WCN7850 */
 #define RX_MSDU_END_WCN7850_INFO2_KEY_ID                       BIT(7, 0)
 
  *
  */
 
-/* TODO: Move to compact TLV approach
- * By default these tlv's are not aligned to 128b boundary
- * Need to remove unused qwords and make them compact/aligned
- */
 struct hal_rx_desc_qcn9274 {
        struct rx_msdu_end_qcn9274 msdu_end;
        struct rx_mpdu_start_qcn9274 mpdu_start;
        u8 msdu_payload[];
 } __packed;
 
+struct hal_rx_desc_qcn9274_compact {
+       struct rx_msdu_end_qcn9274_compact msdu_end;
+       struct rx_mpdu_start_qcn9274_compact mpdu_start;
+       u8 msdu_payload[];
+} __packed;
+
 #define RX_BE_PADDING0_BYTES 8
 #define RX_BE_PADDING1_BYTES 8
 
 struct hal_rx_desc {
        union {
                struct hal_rx_desc_qcn9274 qcn9274;
+               struct hal_rx_desc_qcn9274_compact qcn9274_compact;
                struct hal_rx_desc_wcn7850 wcn7850;
        } u;
 } __packed;