Răsfoiți Sursa

qcacmn: HAL Changes for RX packet capture

Add HAL apis for populate RX packet capture params.

CRs-Fixed: 2891049
Change-Id: I0befd3001a40fd286704699f4ec682f7c390fbda
Mohit Khanna 4 ani în urmă
părinte
comite
f3e19b41d3
3 a modificat fișierele cu 42 adăugiri și 1 ștergeri
  1. 9 0
      hal/wifi3.0/hal_internal.h
  2. 12 0
      hal/wifi3.0/hal_rx.h
  3. 21 1
      hal/wifi3.0/li/hal_li_generic_api.c

+ 9 - 0
hal/wifi3.0/hal_internal.h

@@ -623,6 +623,15 @@ enum hal_reo_cmd_type {
 	CMD_UPDATE_RX_REO_QUEUE = 5
 };
 
+struct hal_rx_pkt_capture_flags {
+	uint8_t encrypt_type;
+	uint8_t fragment_flag;
+	uint8_t fcs_err;
+	uint32_t chan_freq;
+	uint32_t rssi_comb;
+	uint64_t tsft;
+};
+
 struct hal_hw_txrx_ops {
 	/* init and setup */
 	void (*hal_srng_dst_hw_init)(struct hal_soc *hal,

+ 12 - 0
hal/wifi3.0/hal_rx.h

@@ -21,6 +21,7 @@
 
 #include <hal_api.h>
 #include "hal_rx_hw_defines.h"
+#include "hal_hw_headers.h"
 
 /*************************************
  * Ring desc offset/shift/masks
@@ -2697,6 +2698,17 @@ hal_rx_tlv_csum_err_get(hal_soc_handle_t hal_soc_hdl, uint8_t *rx_tlv_hdr,
 						     tcp_udp_csum_err);
 }
 
+static inline void
+hal_rx_tlv_get_pkt_capture_flags(hal_soc_handle_t hal_soc_hdl,
+				 uint8_t *rx_tlv_hdr,
+				 struct hal_rx_pkt_capture_flags *flags)
+{
+	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
+
+	return hal_soc->ops->hal_rx_tlv_get_pkt_capture_flags(rx_tlv_hdr,
+							      flags);
+}
+
 static inline uint8_t
 hal_rx_err_status_get(hal_soc_handle_t hal_soc_hdl, hal_ring_desc_t rx_desc)
 {

+ 21 - 1
hal/wifi3.0/li/hal_li_generic_api.c

@@ -20,7 +20,7 @@
 #include "hal_li_hw_headers.h"
 #include "hal_li_reo.h"
 
-#include "hal_rx.h"	// hal_reo_config
+#include "hal_rx.h"
 #include "hal_li_rx.h"
 #include "hal_tx.h"
 #include <hal_api_mon.h>
@@ -919,6 +919,26 @@ hal_rx_tlv_csum_err_get_li(uint8_t *rx_tlv_hdr, uint32_t *ip_csum_err,
 	*tcp_udp_csum_err = hal_rx_attn_tcp_udp_cksum_fail_get(rx_tlv_hdr);
 }
 
+static
+void hal_rx_tlv_get_pkt_capture_flags_li(uint8_t *rx_tlv_pkt_hdr,
+					    struct hal_rx_pkt_capture_flags *flags)
+{
+	struct rx_pkt_tlvs *rx_tlv_hdr = (struct rx_pkt_tlvs *)rx_tlv_pkt_hdr;
+	struct rx_attention *rx_attn = &rx_tlv_hdr->attn_tlv.rx_attn;
+	struct rx_mpdu_start *mpdu_start =
+				&rx_tlv_hdr->mpdu_start_tlv.rx_mpdu_start;
+	struct rx_mpdu_end *mpdu_end = &rx_tlv_hdr->mpdu_end_tlv.rx_mpdu_end;
+	struct rx_msdu_start *msdu_start =
+				&rx_tlv_hdr->msdu_start_tlv.rx_msdu_start;
+
+	flags->encrypt_type = mpdu_start->rx_mpdu_info_details.encrypt_type;
+	flags->fcs_err = mpdu_end->fcs_err;
+	flags->fragment_flag = rx_attn->fragment_flag;
+	flags->chan_freq = HAL_RX_MSDU_START_FREQ_GET(msdu_start);
+	flags->rssi_comb = HAL_RX_MSDU_START_RSSI_GET(msdu_start);
+	flags->tsft = msdu_start->ppdu_start_timestamp;
+}
+
 static uint8_t hal_rx_err_status_get_li(hal_ring_desc_t rx_desc)
 {
 	return HAL_RX_ERROR_STATUS_GET(rx_desc);