qca-wifi: legacy rx ack frames generation
use resp_type to identify packets with HTT_PPDU_STATS_ACK_EXPECTED_E. this condition triggers rx legacy ack frame. Change-Id: I17b2ce428692da655580a9365d1c3d920ac360fc
This commit is contained in:
@@ -1481,19 +1481,24 @@ QDF_STATUS dp_send_dummy_mpdu_info_to_stack(struct dp_pdev *pdev,
|
|||||||
mpdu_info->mac_address,
|
mpdu_info->mac_address,
|
||||||
QDF_MAC_ADDR_SIZE);
|
QDF_MAC_ADDR_SIZE);
|
||||||
|
|
||||||
peer = dp_peer_find_by_id(pdev->soc, user->peer_id);
|
if (subtype == IEEE80211_FC0_SUBTYPE_ACK)
|
||||||
if (peer) {
|
qdf_nbuf_set_pktlen(tx_capture_info.mpdu_nbuf,
|
||||||
struct dp_vdev *vdev = NULL;
|
sizeof(struct ieee80211_frame_min_one));
|
||||||
vdev = peer->vdev;
|
else {
|
||||||
if (vdev)
|
peer = dp_peer_find_by_id(pdev->soc, user->peer_id);
|
||||||
qdf_mem_copy(wh_min->i_addr2,
|
if (peer) {
|
||||||
vdev->mac_addr.raw,
|
struct dp_vdev *vdev = NULL;
|
||||||
QDF_MAC_ADDR_SIZE);
|
|
||||||
dp_peer_unref_del_find_by_id(peer);
|
vdev = peer->vdev;
|
||||||
|
if (vdev)
|
||||||
|
qdf_mem_copy(wh_min->i_addr2,
|
||||||
|
vdev->mac_addr.raw,
|
||||||
|
QDF_MAC_ADDR_SIZE);
|
||||||
|
dp_peer_unref_del_find_by_id(peer);
|
||||||
|
}
|
||||||
|
qdf_nbuf_set_pktlen(tx_capture_info.mpdu_nbuf, sizeof(*wh_min));
|
||||||
}
|
}
|
||||||
|
|
||||||
qdf_nbuf_set_pktlen(tx_capture_info.mpdu_nbuf,
|
|
||||||
sizeof(*wh_min));
|
|
||||||
QDF_TRACE(QDF_MODULE_ID_TX_CAPTURE,
|
QDF_TRACE(QDF_MODULE_ID_TX_CAPTURE,
|
||||||
QDF_TRACE_LEVEL_DEBUG,
|
QDF_TRACE_LEVEL_DEBUG,
|
||||||
"HTT_FTYPE[%d] frm(0x%08x): fc %x %x, dur 0x%x%x\n",
|
"HTT_FTYPE[%d] frm(0x%08x): fc %x %x, dur 0x%x%x\n",
|
||||||
@@ -1594,6 +1599,47 @@ void dp_send_dummy_rts_cts_frame(struct dp_pdev *pdev,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void dp_gen_ack_rx_frame(struct dp_pdev *pdev,
|
||||||
|
struct cdp_tx_indication_info *tx_capture_info)
|
||||||
|
{
|
||||||
|
struct cdp_tx_completion_ppdu *ppdu_desc;
|
||||||
|
struct dp_peer *peer;
|
||||||
|
struct dp_pdev_tx_capture *ptr_tx_cap;
|
||||||
|
|
||||||
|
ptr_tx_cap = &pdev->tx_capture;
|
||||||
|
ppdu_desc = &ptr_tx_cap->dummy_ppdu_desc;
|
||||||
|
ppdu_desc->channel = tx_capture_info->ppdu_desc->channel;
|
||||||
|
ppdu_desc->num_mpdu = 1;
|
||||||
|
ppdu_desc->num_msdu = 1;
|
||||||
|
ppdu_desc->user[0].ppdu_type = HTT_PPDU_STATS_PPDU_TYPE_SU;
|
||||||
|
ppdu_desc->bar_num_users = 0;
|
||||||
|
ppdu_desc->num_users = 1;
|
||||||
|
|
||||||
|
ppdu_desc->frame_type = CDP_PPDU_FTYPE_CTRL;
|
||||||
|
ppdu_desc->frame_ctrl = (IEEE80211_FC0_SUBTYPE_ACK |
|
||||||
|
IEEE80211_FC0_TYPE_CTL);
|
||||||
|
ppdu_desc->ppdu_start_timestamp =
|
||||||
|
tx_capture_info->ppdu_desc->ppdu_start_timestamp;
|
||||||
|
ppdu_desc->ppdu_end_timestamp =
|
||||||
|
tx_capture_info->ppdu_desc->ppdu_end_timestamp;
|
||||||
|
ppdu_desc->user[0].peer_id =
|
||||||
|
tx_capture_info->ppdu_desc->user[0].peer_id;
|
||||||
|
peer = dp_peer_find_by_id(pdev->soc,
|
||||||
|
tx_capture_info->ppdu_desc->user[0].peer_id);
|
||||||
|
if (peer) {
|
||||||
|
struct dp_vdev *vdev = NULL;
|
||||||
|
|
||||||
|
vdev = peer->vdev;
|
||||||
|
if (vdev)
|
||||||
|
qdf_mem_copy(&ppdu_desc->user[0].mac_addr,
|
||||||
|
vdev->mac_addr.raw,
|
||||||
|
QDF_MAC_ADDR_SIZE);
|
||||||
|
dp_peer_unref_del_find_by_id(peer);
|
||||||
|
}
|
||||||
|
|
||||||
|
dp_send_dummy_mpdu_info_to_stack(pdev, ppdu_desc);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_send_data_to_stack(): Function to deliver mpdu info to stack
|
* dp_send_data_to_stack(): Function to deliver mpdu info to stack
|
||||||
* to upper layer
|
* to upper layer
|
||||||
@@ -1673,6 +1719,9 @@ void dp_send_data_to_stack(struct dp_pdev *pdev,
|
|||||||
if (tx_capture_info.mpdu_nbuf)
|
if (tx_capture_info.mpdu_nbuf)
|
||||||
qdf_nbuf_free(tx_capture_info.mpdu_nbuf);
|
qdf_nbuf_free(tx_capture_info.mpdu_nbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ppdu_desc->resp_type == HTT_PPDU_STATS_ACK_EXPECTED_E)
|
||||||
|
dp_gen_ack_rx_frame(pdev, &tx_capture_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Reference in New Issue
Block a user