qcacmn: Handling vlan tagged frames for multipass phrase feature
1. Remove vlan tag in tx and enqueue to hardware. 2. Add vlan tag in rx after peer-vlan_id lookup. Change-Id: I932202540ac03cabdd20ffd4849fe759ea8a7abb
This commit is contained in:
@@ -303,8 +303,8 @@ dp_tx_desc_release(struct dp_tx_desc_s *tx_desc, uint8_t desc_pool_id)
|
||||
* Return: HTT metadata size
|
||||
*
|
||||
*/
|
||||
static uint8_t dp_tx_prepare_htt_metadata(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
|
||||
struct dp_tx_msdu_info_s *msdu_info)
|
||||
uint8_t dp_tx_prepare_htt_metadata(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
|
||||
struct dp_tx_msdu_info_s *msdu_info)
|
||||
{
|
||||
uint32_t *meta_data = msdu_info->meta_data;
|
||||
struct htt_tx_msdu_desc_ext2_t *desc_ext =
|
||||
@@ -323,12 +323,26 @@ static uint8_t dp_tx_prepare_htt_metadata(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
|
||||
htt_desc_size = sizeof(struct htt_tx_msdu_desc_ext2_t);
|
||||
htt_desc_size_aligned = (htt_desc_size + 7) & ~0x7;
|
||||
|
||||
if (vdev->mesh_vdev || msdu_info->is_tx_sniffer) {
|
||||
if (vdev->mesh_vdev || msdu_info->is_tx_sniffer ||
|
||||
HTT_TX_MSDU_EXT2_DESC_FLAG_VALID_KEY_FLAGS_GET(msdu_info->
|
||||
meta_data[0])) {
|
||||
if (qdf_unlikely(qdf_nbuf_headroom(nbuf) <
|
||||
htt_desc_size_aligned)) {
|
||||
DP_STATS_INC(vdev,
|
||||
tx_i.dropped.headroom_insufficient, 1);
|
||||
return 0;
|
||||
htt_desc_size_aligned)) {
|
||||
nbuf = qdf_nbuf_realloc_headroom(nbuf,
|
||||
htt_desc_size_aligned);
|
||||
if (!nbuf) {
|
||||
/*
|
||||
* qdf_nbuf_realloc_headroom won't do skb_clone
|
||||
* as skb_realloc_headroom does. so, no free is
|
||||
* needed here.
|
||||
*/
|
||||
DP_STATS_INC(vdev,
|
||||
tx_i.dropped.headroom_insufficient,
|
||||
1);
|
||||
qdf_print(" %s[%d] skb_realloc_headroom failed",
|
||||
__func__, __LINE__);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
/* Fill and add HTT metaheader */
|
||||
hdr = qdf_nbuf_push_head(nbuf, htt_desc_size_aligned);
|
||||
@@ -746,6 +760,11 @@ struct dp_tx_desc_s *dp_tx_prepare_desc_single(struct dp_vdev *vdev,
|
||||
|
||||
dp_tx_trace_pkt(nbuf, tx_desc->id, vdev->vdev_id);
|
||||
|
||||
if (qdf_unlikely(vdev->multipass_en)) {
|
||||
if (!dp_tx_multipass_process(soc, vdev, nbuf, msdu_info))
|
||||
goto failure;
|
||||
}
|
||||
|
||||
/*
|
||||
* For special modes (vdev_type == ocb or mesh), data frames should be
|
||||
* transmitted using varying transmit parameters (tx spec) which include
|
||||
@@ -3805,6 +3824,7 @@ QDF_STATUS dp_tx_vdev_detach(struct dp_vdev *vdev)
|
||||
|
||||
/* Reset TX desc associated to this Vdev as NULL */
|
||||
dp_tx_desc_flush(pdev, vdev, false);
|
||||
dp_tx_vdev_multipass_deinit(vdev);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
Reference in New Issue
Block a user