Browse Source

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 2 năm trước cách đây
mục cha
commit
82afb1d8d2
1 tập tin đã thay đổi với 13 bổ sung0 xóa
  1. 13 0
      dp/wifi3.0/monitor/dp_mon.c

+ 13 - 0
dp/wifi3.0/monitor/dp_mon.c

@@ -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);