qcacmn: Add Support for Inspect Path for Lithium

Add peer-id in the meta data for the reinjected by the FW
and queue them to the HW.

Change-Id: I3f25d5f928b6891c06cad6ce3ed81df77d4e33ed
CRs-Fixed: 2024450
This commit is contained in:
Ishank Jain
2017-03-24 18:18:50 +05:30
کامیت شده توسط snandini
والد adeb66e07c
کامیت 997955e336
2فایلهای تغییر یافته به همراه53 افزوده شده و 4 حذف شده

مشاهده پرونده

@@ -1423,22 +1423,71 @@ static
void dp_tx_reinject_handler(struct dp_tx_desc_s *tx_desc, uint8_t *status)
{
struct dp_vdev *vdev;
struct dp_peer *peer = NULL;
uint32_t peer_id = HTT_INVALID_PEER;
qdf_nbuf_t nbuf = tx_desc->nbuf;
qdf_nbuf_t nbuf_copy = NULL;
struct dp_tx_msdu_info_s msdu_info;
vdev = tx_desc->vdev;
qdf_assert(vdev);
qdf_mem_set(&msdu_info, sizeof(msdu_info), 0x0);
dp_tx_get_queue(vdev, nbuf, &msdu_info.tx_queue);
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
"%s Tx reinject path\n", __func__);
DP_STATS_INC_PKT(vdev, tx_i.reinject_pkts, 1,
qdf_nbuf_len(tx_desc->nbuf));
if (!vdev->osif_proxy_arp) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
"function pointer to proxy arp not present\n");
return;
}
if (qdf_unlikely(vdev->mesh_vdev)) {
DP_TX_FREE_SINGLE_BUF(vdev->pdev->soc, tx_desc->nbuf);
} else
dp_tx_send(vdev, tx_desc->nbuf);
} else {
TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
if ((peer->peer_ids[0] != HTT_INVALID_PEER) &&
(peer->bss_peer || peer->nawds_enabled)
&& !(vdev->osif_proxy_arp(
vdev->osif_vdev,
nbuf))) {
nbuf_copy = qdf_nbuf_copy(nbuf);
if (!nbuf_copy) {
QDF_TRACE(QDF_MODULE_ID_DP,
QDF_TRACE_LEVEL_ERROR,
FL("nbuf copy failed"));
break;
}
if (peer->nawds_enabled)
peer_id = peer->peer_ids[0];
else
peer_id = HTT_INVALID_PEER;
nbuf_copy = dp_tx_send_msdu_single(vdev,
nbuf_copy, msdu_info.tid,
&msdu_info.tx_queue,
msdu_info.meta_data, peer_id);
if (nbuf_copy) {
QDF_TRACE(QDF_MODULE_ID_DP,
QDF_TRACE_LEVEL_ERROR,
FL("pkt send failed"));
qdf_nbuf_free(nbuf_copy);
}
}
}
}
qdf_nbuf_free(nbuf);
dp_tx_desc_release(tx_desc, tx_desc->pool_id);
}