From 63dd1b61be3f9355d89f499e221173ffcfaa69d2 Mon Sep 17 00:00:00 2001 From: Wu Gao Date: Fri, 12 Aug 2016 13:38:57 +0800 Subject: [PATCH] qcacmn: Process PPDU status TLVs and parse CFR information Channel Frequency Response(CFR) feature requires PPDU information for correlation with CFR data. Host subscribes for the relevant PPDU status TLVs via the Host RX monitor status ring. During monitor status ring reap, all information needed for CFR correlation is accumulated in a HAL PPDU structure and delivered to WDI event subscribers. Add this change for HSP. Change-Id: If3060271cf2923171487d30f99f2ab5c55370601 CRs-Fixed: 2634766 --- hal/wifi3.0/qca6490/hal_6490.c | 6 +++++ hal/wifi3.0/qca6490/hal_6490_rx.h | 45 +++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/hal/wifi3.0/qca6490/hal_6490.c b/hal/wifi3.0/qca6490/hal_6490.c index 6ab01fed6921..49c4a23d84d0 100644 --- a/hal/wifi3.0/qca6490/hal_6490.c +++ b/hal/wifi3.0/qca6490/hal_6490.c @@ -1500,8 +1500,14 @@ struct hal_hw_txrx_ops qca6490_hal_hw_txrx_ops = { hal_rx_msdu_get_flow_params_6490, hal_rx_tlv_get_tcp_chksum_6490, hal_rx_get_rx_sequence_6490, +#if defined(QCA_WIFI_QCA6490) && defined(WLAN_CFR_ENABLE) && \ + defined(WLAN_ENH_CFR_ENABLE) + hal_rx_get_bb_info_6490, + hal_rx_get_rtt_info_6490, +#else NULL, NULL, +#endif /* rx - msdu end fast path info fields */ hal_rx_msdu_packet_metadata_get_generic, hal_rx_get_fisa_cumulative_l4_checksum_6490, diff --git a/hal/wifi3.0/qca6490/hal_6490_rx.h b/hal/wifi3.0/qca6490/hal_6490_rx.h index bd2ac82d25c3..260e0dc0bdde 100644 --- a/hal/wifi3.0/qca6490/hal_6490_rx.h +++ b/hal/wifi3.0/qca6490/hal_6490_rx.h @@ -402,4 +402,49 @@ RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_RESERVED_0A_OFFSET)) RX_MSDU_END_18_CUMULATIVE_IP_LENGTH_OFFSET)), \ RX_MSDU_END_18_CUMULATIVE_IP_LENGTH_MASK, \ RX_MSDU_END_18_CUMULATIVE_IP_LENGTH_LSB)) + +#if defined(QCA_WIFI_QCA6490) && defined(WLAN_CFR_ENABLE) && \ + defined(WLAN_ENH_CFR_ENABLE) +static inline +void hal_rx_get_bb_info_6490(void *rx_tlv, + void *ppdu_info_hdl) +{ + struct hal_rx_ppdu_info *ppdu_info = ppdu_info_hdl; + + ppdu_info->cfr_info.bb_captured_channel = + HAL_RX_GET(rx_tlv, RXPCU_PPDU_END_INFO_3, BB_CAPTURED_CHANNEL); + + ppdu_info->cfr_info.bb_captured_timeout = + HAL_RX_GET(rx_tlv, RXPCU_PPDU_END_INFO_3, BB_CAPTURED_TIMEOUT); + + ppdu_info->cfr_info.bb_captured_reason = + HAL_RX_GET(rx_tlv, RXPCU_PPDU_END_INFO_3, BB_CAPTURED_REASON); +} + +static inline +void hal_rx_get_rtt_info_6490(void *rx_tlv, + void *ppdu_info_hdl) +{ + struct hal_rx_ppdu_info *ppdu_info = ppdu_info_hdl; + + ppdu_info->cfr_info.rx_location_info_valid = + HAL_RX_GET(rx_tlv, PHYRX_PKT_END_13_RX_PKT_END_DETAILS, + RX_LOCATION_INFO_DETAILS_RX_LOCATION_INFO_VALID); + + ppdu_info->cfr_info.rtt_che_buffer_pointer_low32 = + HAL_RX_GET(rx_tlv, + PHYRX_PKT_END_12_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS, + RTT_CHE_BUFFER_POINTER_LOW32); + + ppdu_info->cfr_info.rtt_che_buffer_pointer_high8 = + HAL_RX_GET(rx_tlv, + PHYRX_PKT_END_11_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS, + RTT_CHE_BUFFER_POINTER_HIGH8); + + ppdu_info->cfr_info.chan_capture_status = + HAL_RX_GET(rx_tlv, + PHYRX_PKT_END_13_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS, + RESERVED_8); +} +#endif #endif