qcacmn: Mask ppdu_id received in Tx HTT PPDU completion path

FW sends ppdu_id for every TLV in Tx HTT PPDU completion path.
This ppdu_id has 8 MSB bits filled with FW metadata which is different
for every TLV. Host uses this ppdu_id for list maintenance.
Presence of the FW metadata results in ppdu_id mismatch for different
TLVs even when they belong to the same PPDU.
Consider only LSB 24 bits for ppdu_id on host side.

Change-Id: Ic6ec780fe97f0597fcd841b33ac0dce33ad986c9
CRs-Fixed: 3445603
此提交包含在:
Harsh Kumar Bijlani
2023-03-31 11:54:49 +05:30
提交者 Madan Koyyalamudi
父節點 63843ae368
當前提交 82afb1d8d2

查看文件

@@ -5113,6 +5113,18 @@ struct ppdu_info *dp_get_ppdu_desc(struct dp_pdev *pdev, uint32_t ppdu_id,
return ppdu_info;
}
#define DP_HTT_PPDU_ID_MASK 0x00FFFFFF
/**
* dp_htt_mask_ppdu_id() - Function to mask ppdu_id
* @ppdu_id: PPDU ID
*
* Return: Masked ppdu_id
*/
static inline uint32_t dp_htt_mask_ppdu_id(uint32_t ppdu_id)
{
return (ppdu_id & DP_HTT_PPDU_ID_MASK);
}
/**
* dp_htt_process_tlv() - Function to process each PPDU TLVs
* @pdev: DP pdev handle
@@ -5140,6 +5152,7 @@ static struct ppdu_info *dp_htt_process_tlv(struct dp_pdev *pdev,
msg_word = msg_word + 1;
ppdu_id = HTT_T2H_PPDU_STATS_PPDU_ID_GET(*msg_word);
ppdu_id = dp_htt_mask_ppdu_id(ppdu_id);
msg_word = msg_word + 1;
tsf_l32 = (uint32_t)(*msg_word);