qcacmn: Stop FISA if frame rings mismatch

If frames from the same FISA flow goes into different REO2SW rings, it
will result in an unexpected FISA behavior. This can happen if the
frames have been reinjected from FW offload module since FW will select
REO2SW1 ring. If the same flow frames hash to other REO2SW rings, then
the same flow UDP frames will do to different rings.
Reo_destination_indication of 6 indicates if the frame has been
reinjected from FW. If so, then continue to deliver the packet without
FISA.

Change-Id: I14a17a10d04909adfb30557d58beb1610e59bf70
CRs-Fixed: 2790292
这个提交包含在:
Saket Jha
2020-10-02 13:35:56 -07:00
提交者 snandini
父节点 650f0ffd7d
当前提交 a64da56134
修改 12 个文件,包含 92 行新增7 行删除

查看文件

@@ -3370,6 +3370,32 @@ hal_rx_msdu_flow_idx_get(hal_soc_handle_t hal_soc_hdl,
return hal_soc->ops->hal_rx_msdu_flow_idx_get(buf);
}
/**
* hal_rx_msdu_get_reo_destination_indication: API to get reo
* destination index from rx_msdu_end TLV
* @buf: pointer to the start of RX PKT TLV headers
* @reo_destination_indication: pointer to return value of
* reo_destination_indication
*
* Return: reo_destination_indication value from MSDU END TLV
*/
static inline void
hal_rx_msdu_get_reo_destination_indication(hal_soc_handle_t hal_soc_hdl,
uint8_t *buf,
uint32_t *reo_destination_indication)
{
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;
}
hal_soc->ops->hal_rx_msdu_get_reo_destination_indication(buf,
reo_destination_indication);
}
/**
* hal_rx_msdu_flow_idx_timeout: API to get flow index timeout
* from rx_msdu_end TLV