From 89270803f3d4995c9ad9398d1817d43cc34870ff Mon Sep 17 00:00:00 2001 From: Mohit Khanna Date: Tue, 20 Apr 2021 22:50:23 -0700 Subject: [PATCH] qcacmn: Refactor fisa packet history for BE Refactor FISA packet history to not access "struct rx_pkt_tlvs". This is because this structure may be different for Li and BE chips and should not be accessed directly and only via hal_soc->ops in common code. CRs-Fixed: 2888556 Change-Id: I0d9f2785a81c130a2dc506020a02ee5581c0bbd3 --- dp/wifi3.0/dp_rx.c | 1 - dp/wifi3.0/dp_types.h | 18 +++++------------- hal/wifi3.0/be/hal_be_rx_tlv.h | 21 +++++++++++---------- hal/wifi3.0/li/hal_li_generic_api.c | 23 +++++++++++------------ 4 files changed, 27 insertions(+), 36 deletions(-) diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 2f7e2d7f11..3347abdd4b 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -1152,7 +1152,6 @@ void dp_rx_fill_gro_info(struct dp_soc *soc, uint8_t *rx_tlv, if (!wlan_cfg_is_gro_enabled(soc->wlan_cfg_ctx)) return; - /* Filling up RX offload info only for TCP packets */ if (hal_rx_tlv_get_offload_info(soc->hal_soc, rx_tlv, &offload_info)) return; diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index fc9dfb825c..655809bc5d 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -3291,23 +3291,15 @@ enum fisa_aggr_ret { FISA_FLUSH_FLOW }; -/** - * struct fisa_pkt_hist_elem - FISA Packet history element - * @ts: timestamp indicating when the packet was received by FISA framework. - * @tlvs: record of TLVS for the packet coming to FISA framework - */ -struct fisa_pkt_hist_elem { - qdf_time_t ts; - struct rx_pkt_tlvs tlvs; -}; - /** * struct fisa_pkt_hist - FISA Packet history structure - * @hist_elem: array of hist elements + * @tlv_hist: array of TLV history + * @ts: array of timestamps of fisa packets * @idx: index indicating the next location to be used in the array. */ struct fisa_pkt_hist { - struct fisa_pkt_hist_elem hist_elem[FISA_FLOW_MAX_AGGR_COUNT]; + uint8_t *tlv_hist; + qdf_time_t ts_hist[FISA_FLOW_MAX_AGGR_COUNT]; uint32_t idx; }; @@ -3359,7 +3351,7 @@ struct dp_fisa_rx_sw_ft { qdf_time_t flow_init_ts; qdf_time_t last_accessed_ts; #ifdef WLAN_SUPPORT_RX_FISA_HIST - struct fisa_pkt_hist *pkt_hist; + struct fisa_pkt_hist pkt_hist; #endif }; diff --git a/hal/wifi3.0/be/hal_be_rx_tlv.h b/hal/wifi3.0/be/hal_be_rx_tlv.h index c5ecedd4ff..a44fdee851 100644 --- a/hal/wifi3.0/be/hal_be_rx_tlv.h +++ b/hal/wifi3.0/be/hal_be_rx_tlv.h @@ -1602,20 +1602,21 @@ hal_rx_tlv_get_offload_info_be(uint8_t *rx_tlv, struct hal_offload_info *offload_info) { struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)rx_tlv; - offload_info->tcp_proto = HAL_RX_TLV_GET_TCP_PROTO(rx_pkt_tlvs); - - if (!offload_info->tcp_proto) - return -EINVAL; offload_info->lro_eligible = HAL_RX_TLV_GET_LRO_ELIGIBLE(rx_pkt_tlvs); - offload_info->tcp_pure_ack = HAL_RX_TLV_GET_TCP_PURE_ACK(rx_pkt_tlvs); - offload_info->ipv6_proto = HAL_RX_TLV_GET_IPV6(rx_pkt_tlvs); - offload_info->tcp_offset = HAL_RX_TLV_GET_TCP_OFFSET(rx_pkt_tlvs); - offload_info->tcp_win = HAL_RX_TLV_GET_TCP_WIN(rx_pkt_tlvs); - offload_info->tcp_seq_num = HAL_RX_TLV_GET_TCP_SEQ(rx_pkt_tlvs); - offload_info->tcp_ack_num = HAL_RX_TLV_GET_TCP_ACK(rx_pkt_tlvs); offload_info->flow_id = HAL_RX_TLV_GET_FLOW_ID_TOEPLITZ(rx_pkt_tlvs); + offload_info->ipv6_proto = HAL_RX_TLV_GET_IPV6(rx_pkt_tlvs); + offload_info->tcp_proto = HAL_RX_TLV_GET_TCP_PROTO(rx_pkt_tlvs); + if (offload_info->tcp_proto) { + offload_info->tcp_pure_ack = + HAL_RX_TLV_GET_TCP_PURE_ACK(rx_pkt_tlvs); + offload_info->tcp_offset = + HAL_RX_TLV_GET_TCP_OFFSET(rx_pkt_tlvs); + offload_info->tcp_win = HAL_RX_TLV_GET_TCP_WIN(rx_pkt_tlvs); + offload_info->tcp_seq_num = HAL_RX_TLV_GET_TCP_SEQ(rx_pkt_tlvs); + offload_info->tcp_ack_num = HAL_RX_TLV_GET_TCP_ACK(rx_pkt_tlvs); + } return 0; } diff --git a/hal/wifi3.0/li/hal_li_generic_api.c b/hal/wifi3.0/li/hal_li_generic_api.c index 9699785a9e..54db682249 100644 --- a/hal/wifi3.0/li/hal_li_generic_api.c +++ b/hal/wifi3.0/li/hal_li_generic_api.c @@ -430,20 +430,19 @@ static int hal_rx_tlv_get_offload_info_li(uint8_t *rx_tlv, struct hal_offload_info *offload_info) { + offload_info->flow_id = HAL_RX_TLV_GET_FLOW_ID_TOEPLITZ(rx_tlv); + offload_info->ipv6_proto = HAL_RX_TLV_GET_IPV6(rx_tlv); + offload_info->lro_eligible = HAL_RX_TLV_GET_LRO_ELIGIBLE(rx_tlv); offload_info->tcp_proto = HAL_RX_TLV_GET_TCP_PROTO(rx_tlv); - if (!offload_info->tcp_proto) - return -EINVAL; - - offload_info->lro_eligible = HAL_RX_TLV_GET_LRO_ELIGIBLE(rx_tlv); - offload_info->tcp_pure_ack = HAL_RX_TLV_GET_TCP_PURE_ACK(rx_tlv); - offload_info->ipv6_proto = HAL_RX_TLV_GET_IPV6(rx_tlv); - offload_info->tcp_offset = HAL_RX_TLV_GET_TCP_OFFSET(rx_tlv); - offload_info->tcp_win = HAL_RX_TLV_GET_TCP_WIN(rx_tlv); - offload_info->tcp_seq_num = HAL_RX_TLV_GET_TCP_SEQ(rx_tlv); - offload_info->tcp_ack_num = HAL_RX_TLV_GET_TCP_ACK(rx_tlv); - offload_info->flow_id = HAL_RX_TLV_GET_FLOW_ID_TOEPLITZ(rx_tlv); - + if (offload_info->tcp_proto) { + offload_info->tcp_pure_ack = + HAL_RX_TLV_GET_TCP_PURE_ACK(rx_tlv); + offload_info->tcp_offset = HAL_RX_TLV_GET_TCP_OFFSET(rx_tlv); + offload_info->tcp_win = HAL_RX_TLV_GET_TCP_WIN(rx_tlv); + offload_info->tcp_seq_num = HAL_RX_TLV_GET_TCP_SEQ(rx_tlv); + offload_info->tcp_ack_num = HAL_RX_TLV_GET_TCP_ACK(rx_tlv); + } return 0; }