qcacmn: Add WAR to get the vdev in invalid peer path
For QCN9224 splitphy mode do not rely on rx_desc_pool_id to get to the VDEV as desc pool is common across PDEVs Change-Id: I2552878bd56696a8df463b35e2b273ed4e591050 CRs-Fixed: 3220690
This commit is contained in:

committed by
Madan Koyyalamudi

parent
b4db8c7ec0
commit
b34fe34b48
@@ -1186,6 +1186,7 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu,
|
||||
qdf_nbuf_t curr_nbuf, next_nbuf;
|
||||
uint8_t *rx_tlv_hdr = qdf_nbuf_data(mpdu);
|
||||
uint8_t *rx_pkt_hdr = NULL;
|
||||
int i = 0;
|
||||
|
||||
if (!HAL_IS_DECAP_FORMAT_RAW(soc->hal_soc, rx_tlv_hdr)) {
|
||||
dp_rx_debug("%pK: Drop decapped frames", soc);
|
||||
@@ -1206,21 +1207,46 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu,
|
||||
goto free;
|
||||
}
|
||||
|
||||
pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
|
||||
/* In DMAC case the rx_desc_pools are common across PDEVs
|
||||
* so PDEV cannot be derived from the pool_id.
|
||||
*
|
||||
* link_id need to derived from the TLV tag word which is
|
||||
* disabled by default. For now adding a WAR to get vdev
|
||||
* with brute force this need to fixed with word based subscription
|
||||
* support is added by enabling TLV tag word
|
||||
*/
|
||||
if (soc->features.dmac_cmn_src_rxbuf_ring_enabled) {
|
||||
for (i = 0; i < MAX_PDEV_CNT; i++) {
|
||||
pdev = soc->pdev_list[i];
|
||||
|
||||
if (!pdev || qdf_unlikely(pdev->is_pdev_down)) {
|
||||
dp_rx_err("%pK: PDEV %s", soc, !pdev ? "not found" : "down");
|
||||
goto free;
|
||||
}
|
||||
if (!pdev || qdf_unlikely(pdev->is_pdev_down))
|
||||
continue;
|
||||
|
||||
if (dp_monitor_filter_neighbour_peer(pdev, rx_pkt_hdr) ==
|
||||
QDF_STATUS_SUCCESS)
|
||||
return 0;
|
||||
TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) {
|
||||
if (qdf_mem_cmp(wh->i_addr1, vdev->mac_addr.raw,
|
||||
QDF_MAC_ADDR_SIZE) == 0) {
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
pdev = dp_get_pdev_for_lmac_id(soc, mac_id);
|
||||
|
||||
TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) {
|
||||
if (qdf_mem_cmp(wh->i_addr1, vdev->mac_addr.raw,
|
||||
QDF_MAC_ADDR_SIZE) == 0) {
|
||||
goto out;
|
||||
if (!pdev || qdf_unlikely(pdev->is_pdev_down)) {
|
||||
dp_rx_err("%pK: PDEV %s",
|
||||
soc, !pdev ? "not found" : "down");
|
||||
goto free;
|
||||
}
|
||||
|
||||
if (dp_monitor_filter_neighbour_peer(pdev, rx_pkt_hdr) ==
|
||||
QDF_STATUS_SUCCESS)
|
||||
return 0;
|
||||
|
||||
TAILQ_FOREACH(vdev, &pdev->vdev_list, vdev_list_elem) {
|
||||
if (qdf_mem_cmp(wh->i_addr1, vdev->mac_addr.raw,
|
||||
QDF_MAC_ADDR_SIZE) == 0) {
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1228,7 +1254,6 @@ uint8_t dp_rx_process_invalid_peer(struct dp_soc *soc, qdf_nbuf_t mpdu,
|
||||
dp_rx_err("%pK: VDEV not found", soc);
|
||||
goto free;
|
||||
}
|
||||
|
||||
out:
|
||||
msg.wh = wh;
|
||||
qdf_nbuf_pull_head(mpdu, soc->rx_pkt_tlv_size);
|
||||
|
Reference in New Issue
Block a user