diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index be83cff5be..4494613593 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -4968,6 +4968,18 @@ static QDF_STATUS dp_mon_htt_srng_setup(struct dp_soc *soc, } #endif +#ifdef QCA_HOST2FW_RXBUF_RING +static struct dp_srng *dp_get_rxdma_ring(struct dp_pdev *pdev, int lmac_id) +{ + return &pdev->rx_mac_buf_ring[lmac_id]; +} +#else +static struct dp_srng *dp_get_rxdma_ring(struct dp_pdev *pdev, int lmac_id) +{ + return &pdev->soc->rx_refill_buf_ring[lmac_id]; +} +#endif + /* * dp_rxdma_ring_config() - configure the RX DMA rings * @@ -5221,10 +5233,86 @@ dp_rxdma_ring_sel_cfg(struct dp_soc *soc) return status; } #else + static QDF_STATUS dp_rxdma_ring_sel_cfg(struct dp_soc *soc) { - return QDF_STATUS_SUCCESS; + int i; + int mac_id; + struct htt_rx_ring_tlv_filter htt_tlv_filter = {0}; + struct dp_srng *rx_mac_srng; + QDF_STATUS status = QDF_STATUS_SUCCESS; + + htt_tlv_filter.mpdu_start = 1; + htt_tlv_filter.msdu_start = 1; + htt_tlv_filter.mpdu_end = 1; + htt_tlv_filter.msdu_end = 1; + htt_tlv_filter.attention = 1; + htt_tlv_filter.packet = 1; + htt_tlv_filter.packet_header = 1; + + htt_tlv_filter.ppdu_start = 0; + htt_tlv_filter.ppdu_end = 0; + htt_tlv_filter.ppdu_end_user_stats = 0; + htt_tlv_filter.ppdu_end_user_stats_ext = 0; + htt_tlv_filter.ppdu_end_status_done = 0; + htt_tlv_filter.enable_fp = 1; + htt_tlv_filter.enable_md = 0; + htt_tlv_filter.enable_md = 0; + htt_tlv_filter.enable_mo = 0; + + htt_tlv_filter.fp_mgmt_filter = 0; + htt_tlv_filter.fp_ctrl_filter = FILTER_CTRL_BA_REQ; + htt_tlv_filter.fp_data_filter = (FILTER_DATA_UCAST | + FILTER_DATA_MCAST | + FILTER_DATA_DATA); + htt_tlv_filter.mo_mgmt_filter = 0; + htt_tlv_filter.mo_ctrl_filter = 0; + htt_tlv_filter.mo_data_filter = 0; + htt_tlv_filter.md_data_filter = 0; + + htt_tlv_filter.offset_valid = true; + + htt_tlv_filter.rx_packet_offset = RX_PKT_TLVS_LEN; + htt_tlv_filter.rx_header_offset = + hal_rx_pkt_tlv_offset_get(soc->hal_soc); + htt_tlv_filter.rx_mpdu_start_offset = + hal_rx_mpdu_start_offset_get(soc->hal_soc); + htt_tlv_filter.rx_mpdu_end_offset = + hal_rx_mpdu_end_offset_get(soc->hal_soc); + htt_tlv_filter.rx_msdu_start_offset = + hal_rx_msdu_start_offset_get(soc->hal_soc); + htt_tlv_filter.rx_msdu_end_offset = + hal_rx_msdu_end_offset_get(soc->hal_soc); + htt_tlv_filter.rx_attn_offset = + hal_rx_attn_offset_get(soc->hal_soc); + + for (i = 0; i < MAX_PDEV_CNT; i++) { + struct dp_pdev *pdev = soc->pdev_list[i]; + + if (!pdev) + continue; + + for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) { + int mac_for_pdev = + dp_get_mac_id_for_pdev(mac_id, pdev->pdev_id); + /* + * Obtain lmac id from pdev to access the LMAC ring + * in soc context + */ + int lmac_id = + dp_get_lmac_id_for_pdev_id(soc, mac_id, + pdev->pdev_id); + + rx_mac_srng = dp_get_rxdma_ring(pdev, lmac_id); + htt_h2t_rx_ring_cfg(soc->htt_handle, mac_for_pdev, + rx_mac_srng->hal_srng, + RXDMA_BUF, RX_DATA_BUFFER_SIZE, + &htt_tlv_filter); + } + } + return status; + } #endif diff --git a/hal/wifi3.0/hal_generic_api.h b/hal/wifi3.0/hal_generic_api.h index ece3255575..aae3014234 100644 --- a/hal/wifi3.0/hal_generic_api.h +++ b/hal/wifi3.0/hal_generic_api.h @@ -2535,4 +2535,11 @@ static uint32_t hal_rx_mpdu_end_offset_get_generic(void) { return RX_PKT_TLV_OFFSET(mpdu_end_tlv); } + +#ifndef NO_RX_PKT_HDR_TLV +static uint32_t hal_rx_pkt_tlv_offset_get_generic(void) +{ + return RX_PKT_TLV_OFFSET(pkt_hdr_tlv); +} +#endif #endif /* HAL_GENERIC_API_H_ */ diff --git a/hal/wifi3.0/hal_internal.h b/hal/wifi3.0/hal_internal.h index 1c3bcc069c..f9ab526903 100644 --- a/hal/wifi3.0/hal_internal.h +++ b/hal/wifi3.0/hal_internal.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -627,6 +627,7 @@ struct hal_hw_txrx_ops { uint32_t (*hal_rx_msdu_start_offset_get)(void); uint32_t (*hal_rx_mpdu_start_offset_get)(void); uint32_t (*hal_rx_mpdu_end_offset_get)(void); + uint32_t (*hal_rx_pkt_tlv_offset_get)(void); void * (*hal_rx_flow_setup_fse)(uint8_t *rx_fst, uint32_t table_offset, uint8_t *rx_flow); diff --git a/hal/wifi3.0/hal_rx.h b/hal/wifi3.0/hal_rx.h index 3392c2a7f0..29f5c6847d 100644 --- a/hal/wifi3.0/hal_rx.h +++ b/hal/wifi3.0/hal_rx.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -3981,6 +3981,20 @@ uint32_t hal_rx_mpdu_start_offset_get(hal_soc_handle_t hal_soc_hdl) return hal_soc->ops->hal_rx_mpdu_start_offset_get(); } +static inline +uint32_t hal_rx_pkt_tlv_offset_get(hal_soc_handle_t hal_soc_hdl) +{ + struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl; + + if (!hal_soc || !hal_soc->ops) { + hal_err("hal handle is NULL"); + QDF_BUG(0); + return 0; + } + + return hal_soc->ops->hal_rx_pkt_tlv_offset_get(); +} + /** * hal_rx_mpdu_end_offset_get(): Get the MPDU end offset from * rx_pkt_tlvs structure diff --git a/hal/wifi3.0/qca5018/hal_5018.c b/hal/wifi3.0/qca5018/hal_5018.c index a3145d9498..919223ceed 100644 --- a/hal/wifi3.0/qca5018/hal_5018.c +++ b/hal/wifi3.0/qca5018/hal_5018.c @@ -1767,6 +1767,9 @@ struct hal_hw_txrx_ops qca5018_hal_hw_txrx_ops = { .hal_rx_msdu_start_offset_get = hal_rx_msdu_start_offset_get_generic, .hal_rx_mpdu_start_offset_get = hal_rx_mpdu_start_offset_get_generic, .hal_rx_mpdu_end_offset_get = hal_rx_mpdu_end_offset_get_generic, +#ifndef NO_RX_PKT_HDR_TLV + .hal_rx_pkt_tlv_offset_get = hal_rx_pkt_tlv_offset_get_generic, +#endif .hal_rx_flow_setup_fse = hal_rx_flow_setup_fse_5018, .hal_compute_reo_remap_ix2_ix3 = hal_compute_reo_remap_ix2_ix3_5018, }; diff --git a/hal/wifi3.0/qca6290/hal_6290.c b/hal/wifi3.0/qca6290/hal_6290.c index fa9dc50afa..43400d41b3 100644 --- a/hal/wifi3.0/qca6290/hal_6290.c +++ b/hal/wifi3.0/qca6290/hal_6290.c @@ -1147,6 +1147,9 @@ struct hal_hw_txrx_ops qca6290_hal_hw_txrx_ops = { .hal_rx_msdu_start_offset_get = hal_rx_msdu_start_offset_get_generic, .hal_rx_mpdu_start_offset_get = hal_rx_mpdu_start_offset_get_generic, .hal_rx_mpdu_end_offset_get = hal_rx_mpdu_end_offset_get_generic, +#ifndef NO_RX_PKT_HDR_TLV + .hal_rx_pkt_tlv_offset_get = hal_rx_pkt_tlv_offset_get_generic, +#endif .hal_compute_reo_remap_ix2_ix3 = hal_compute_reo_remap_ix2_ix3_6290, }; diff --git a/hal/wifi3.0/qca6390/hal_6390.c b/hal/wifi3.0/qca6390/hal_6390.c index 41c84cd3e7..a7a507a4f4 100644 --- a/hal/wifi3.0/qca6390/hal_6390.c +++ b/hal/wifi3.0/qca6390/hal_6390.c @@ -1202,6 +1202,9 @@ struct hal_hw_txrx_ops qca6390_hal_hw_txrx_ops = { .hal_rx_msdu_start_offset_get = hal_rx_msdu_start_offset_get_generic, .hal_rx_mpdu_start_offset_get = hal_rx_mpdu_start_offset_get_generic, .hal_rx_mpdu_end_offset_get = hal_rx_mpdu_end_offset_get_generic, +#ifndef NO_RX_PKT_HDR_TLV + .hal_rx_pkt_tlv_offset_get = hal_rx_pkt_tlv_offset_get_generic, +#endif .hal_compute_reo_remap_ix2_ix3 = hal_compute_reo_remap_ix2_ix3_6390, }; diff --git a/hal/wifi3.0/qca6490/hal_6490.c b/hal/wifi3.0/qca6490/hal_6490.c index 66694807ce..cca5cebb2d 100644 --- a/hal/wifi3.0/qca6490/hal_6490.c +++ b/hal/wifi3.0/qca6490/hal_6490.c @@ -1791,6 +1791,9 @@ struct hal_hw_txrx_ops qca6490_hal_hw_txrx_ops = { .hal_rx_msdu_start_offset_get = hal_rx_msdu_start_offset_get_generic, .hal_rx_mpdu_start_offset_get = hal_rx_mpdu_start_offset_get_generic, .hal_rx_mpdu_end_offset_get = hal_rx_mpdu_end_offset_get_generic, +#ifndef NO_RX_PKT_HDR_TLV + .hal_rx_pkt_tlv_offset_get = hal_rx_pkt_tlv_offset_get_generic, +#endif .hal_rx_flow_setup_fse = hal_rx_flow_setup_fse_6490, .hal_compute_reo_remap_ix2_ix3 = hal_compute_reo_remap_ix2_ix3_6490, .hal_rx_msdu_get_reo_destination_indication = diff --git a/hal/wifi3.0/qca6750/hal_6750.c b/hal/wifi3.0/qca6750/hal_6750.c index b4739eb06c..0b83b3da6b 100644 --- a/hal/wifi3.0/qca6750/hal_6750.c +++ b/hal/wifi3.0/qca6750/hal_6750.c @@ -1926,6 +1926,9 @@ struct hal_hw_txrx_ops qca6750_hal_hw_txrx_ops = { .hal_rx_msdu_start_offset_get = hal_rx_msdu_start_offset_get_generic, .hal_rx_mpdu_start_offset_get = hal_rx_mpdu_start_offset_get_generic, .hal_rx_mpdu_end_offset_get = hal_rx_mpdu_end_offset_get_generic, +#ifndef NO_RX_PKT_HDR_TLV + .hal_rx_pkt_tlv_offset_get = hal_rx_pkt_tlv_offset_get_generic, +#endif .hal_rx_flow_setup_fse = hal_rx_flow_setup_fse_6750, .hal_compute_reo_remap_ix2_ix3 = hal_compute_reo_remap_ix2_ix3_6750, diff --git a/hal/wifi3.0/qca8074v1/hal_8074v1.c b/hal/wifi3.0/qca8074v1/hal_8074v1.c index 5684fac7aa..a0df6f2a44 100644 --- a/hal/wifi3.0/qca8074v1/hal_8074v1.c +++ b/hal/wifi3.0/qca8074v1/hal_8074v1.c @@ -1327,6 +1327,9 @@ struct hal_hw_txrx_ops qca8074_hal_hw_txrx_ops = { .hal_rx_msdu_start_offset_get = hal_rx_msdu_start_offset_get_generic, .hal_rx_mpdu_start_offset_get = hal_rx_mpdu_start_offset_get_generic, .hal_rx_mpdu_end_offset_get = hal_rx_mpdu_end_offset_get_generic, +#ifndef NO_RX_PKT_HDR_TLV + .hal_rx_pkt_tlv_offset_get = hal_rx_pkt_tlv_offset_get_generic, +#endif .hal_rx_flow_setup_fse = hal_rx_flow_setup_fse_8074v1, .hal_compute_reo_remap_ix2_ix3 = hal_compute_reo_remap_ix2_ix3_8074v1, }; diff --git a/hal/wifi3.0/qca8074v2/hal_8074v2.c b/hal/wifi3.0/qca8074v2/hal_8074v2.c index 4fac6e4c22..1b66315776 100644 --- a/hal/wifi3.0/qca8074v2/hal_8074v2.c +++ b/hal/wifi3.0/qca8074v2/hal_8074v2.c @@ -1329,6 +1329,9 @@ struct hal_hw_txrx_ops qca8074v2_hal_hw_txrx_ops = { .hal_rx_msdu_start_offset_get = hal_rx_msdu_start_offset_get_generic, .hal_rx_mpdu_start_offset_get = hal_rx_mpdu_start_offset_get_generic, .hal_rx_mpdu_end_offset_get = hal_rx_mpdu_end_offset_get_generic, +#ifndef NO_RX_PKT_HDR_TLV + .hal_rx_pkt_tlv_offset_get = hal_rx_pkt_tlv_offset_get_generic, +#endif .hal_rx_flow_setup_fse = hal_rx_flow_setup_fse_8074v2, .hal_compute_reo_remap_ix2_ix3 = hal_compute_reo_remap_ix2_ix3_8074v2, }; diff --git a/hal/wifi3.0/qcn6122/hal_qcn6122.c b/hal/wifi3.0/qcn6122/hal_qcn6122.c index 72dfe7c35d..4cde8050a9 100644 --- a/hal/wifi3.0/qcn6122/hal_qcn6122.c +++ b/hal/wifi3.0/qcn6122/hal_qcn6122.c @@ -1824,6 +1824,9 @@ struct hal_hw_txrx_ops qcn6122_hal_hw_txrx_ops = { .hal_rx_msdu_start_offset_get = hal_rx_msdu_start_offset_get_generic, .hal_rx_mpdu_start_offset_get = hal_rx_mpdu_start_offset_get_generic, .hal_rx_mpdu_end_offset_get = hal_rx_mpdu_end_offset_get_generic, +#ifndef NO_RX_PKT_HDR_TLV + .hal_rx_pkt_tlv_offset_get = hal_rx_pkt_tlv_offset_get_generic, +#endif .hal_rx_flow_setup_fse = hal_rx_flow_setup_fse_6122, .hal_compute_reo_remap_ix2_ix3 = hal_compute_reo_remap_ix2_ix3_6122, }; diff --git a/hal/wifi3.0/qcn9000/hal_9000.c b/hal/wifi3.0/qcn9000/hal_9000.c index 17e213c5cc..7c82c808e1 100644 --- a/hal/wifi3.0/qcn9000/hal_9000.c +++ b/hal/wifi3.0/qcn9000/hal_9000.c @@ -1849,6 +1849,9 @@ struct hal_hw_txrx_ops qcn9000_hal_hw_txrx_ops = { .hal_rx_msdu_start_offset_get = hal_rx_msdu_start_offset_get_generic, .hal_rx_mpdu_start_offset_get = hal_rx_mpdu_start_offset_get_generic, .hal_rx_mpdu_end_offset_get = hal_rx_mpdu_end_offset_get_generic, +#ifndef NO_RX_PKT_HDR_TLV + .hal_rx_pkt_tlv_offset_get = hal_rx_pkt_tlv_offset_get_generic, +#endif .hal_rx_flow_setup_fse = hal_rx_flow_setup_fse_9000, .hal_compute_reo_remap_ix2_ix3 = hal_compute_reo_remap_ix2_ix3_9000, };