qca-wifi: Fix WDS header fields
Fix address fields in WDS case. Change-Id: I0f94bcd42783a6840a714ca0f5541e7299de1d81
This commit is contained in:
@@ -63,6 +63,8 @@
|
|||||||
#define DP_NOACK_STOKEN_POS_SHIFT (2)
|
#define DP_NOACK_STOKEN_POS_SHIFT (2)
|
||||||
#define DP_NDPA_TOKEN_POS (16)
|
#define DP_NDPA_TOKEN_POS (16)
|
||||||
|
|
||||||
|
#define IEEE80211_FC1_SHIFT (8)
|
||||||
|
|
||||||
/* Macros to handle sequence number bitmaps */
|
/* Macros to handle sequence number bitmaps */
|
||||||
|
|
||||||
/* HW generated rts frame flag */
|
/* HW generated rts frame flag */
|
||||||
@@ -2281,12 +2283,27 @@ void dp_ppdu_desc_debug_print(struct cdp_tx_completion_ppdu *ppdu_desc,
|
|||||||
static
|
static
|
||||||
void dp_peer_tx_wds_addr_add(struct dp_peer *peer, uint8_t *addr4_mac_addr)
|
void dp_peer_tx_wds_addr_add(struct dp_peer *peer, uint8_t *addr4_mac_addr)
|
||||||
{
|
{
|
||||||
struct ieee80211_frame_addr4 *ptr_wh;
|
struct ieee80211_frame_addr4 *ptr_wh = NULL;
|
||||||
|
struct dp_vdev *vdev = NULL;
|
||||||
|
|
||||||
if (!peer)
|
if (!peer) {
|
||||||
|
qdf_err("peer is NULL!");
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
vdev = peer->vdev;
|
||||||
|
if (!vdev) {
|
||||||
|
qdf_err("vdev is NULL!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ptr_wh = &peer->tx_capture.tx_wifi_addr4_hdr;
|
ptr_wh = &peer->tx_capture.tx_wifi_addr4_hdr;
|
||||||
|
qdf_mem_copy(ptr_wh->i_addr1,
|
||||||
|
peer->mac_addr.raw,
|
||||||
|
QDF_MAC_ADDR_SIZE);
|
||||||
|
qdf_mem_copy(ptr_wh->i_addr2,
|
||||||
|
vdev->mac_addr.raw,
|
||||||
|
QDF_MAC_ADDR_SIZE);
|
||||||
qdf_mem_copy(ptr_wh->i_addr4,
|
qdf_mem_copy(ptr_wh->i_addr4,
|
||||||
addr4_mac_addr,
|
addr4_mac_addr,
|
||||||
QDF_MAC_ADDR_SIZE);
|
QDF_MAC_ADDR_SIZE);
|
||||||
@@ -2309,7 +2326,7 @@ static uint32_t dp_tx_update_80211_wds_hdr(struct dp_pdev *pdev,
|
|||||||
void *data,
|
void *data,
|
||||||
qdf_nbuf_t nbuf,
|
qdf_nbuf_t nbuf,
|
||||||
uint16_t ether_type,
|
uint16_t ether_type,
|
||||||
uint8_t *src_addr,
|
uint8_t *dst_addr,
|
||||||
uint8_t usr_idx)
|
uint8_t usr_idx)
|
||||||
{
|
{
|
||||||
struct cdp_tx_completion_ppdu *ppdu_desc;
|
struct cdp_tx_completion_ppdu *ppdu_desc;
|
||||||
@@ -2338,8 +2355,9 @@ static uint32_t dp_tx_update_80211_wds_hdr(struct dp_pdev *pdev,
|
|||||||
|
|
||||||
ptr_wh->i_qos[1] = (user->qos_ctrl & 0xFF00) >> 8;
|
ptr_wh->i_qos[1] = (user->qos_ctrl & 0xFF00) >> 8;
|
||||||
ptr_wh->i_qos[0] = (user->qos_ctrl & 0xFF);
|
ptr_wh->i_qos[0] = (user->qos_ctrl & 0xFF);
|
||||||
/* Update Addr 3 (SA) with SA derived from ether packet */
|
|
||||||
qdf_mem_copy(ptr_wh->i_addr3, src_addr, QDF_MAC_ADDR_SIZE);
|
/* Update Addr 3 (DA) with DA derived from ether packet */
|
||||||
|
qdf_mem_copy(ptr_wh->i_addr3, dst_addr, QDF_MAC_ADDR_SIZE);
|
||||||
|
|
||||||
peer->tx_capture.tx_wifi_ppdu_id = ppdu_desc->ppdu_id;
|
peer->tx_capture.tx_wifi_ppdu_id = ppdu_desc->ppdu_id;
|
||||||
}
|
}
|
||||||
@@ -2522,8 +2540,9 @@ dp_tx_mon_restitch_mpdu(struct dp_pdev *pdev, struct dp_peer *peer,
|
|||||||
|
|
||||||
if ((qdf_likely((peer->vdev->tx_encap_type !=
|
if ((qdf_likely((peer->vdev->tx_encap_type !=
|
||||||
htt_cmn_pkt_type_raw))) &&
|
htt_cmn_pkt_type_raw))) &&
|
||||||
((ppdu_desc->frame_ctrl & IEEE80211_FC1_DIR_MASK) &&
|
(((ppdu_desc->frame_ctrl >> IEEE80211_FC1_SHIFT) &
|
||||||
(IEEE80211_FC1_DIR_TODS | IEEE80211_FC1_DIR_FROMDS)))
|
IEEE80211_FC1_DIR_MASK) ==
|
||||||
|
(IEEE80211_FC1_DIR_TODS | IEEE80211_FC1_DIR_FROMDS)))
|
||||||
dp_peer_tx_wds_addr_add(peer, eh->ether_shost);
|
dp_peer_tx_wds_addr_add(peer, eh->ether_shost);
|
||||||
|
|
||||||
if (first_msdu && first_msdu_not_seen) {
|
if (first_msdu && first_msdu_not_seen) {
|
||||||
@@ -2596,13 +2615,14 @@ dp_tx_mon_restitch_mpdu(struct dp_pdev *pdev, struct dp_peer *peer,
|
|||||||
goto free_ppdu_desc_mpdu_q;
|
goto free_ppdu_desc_mpdu_q;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((ppdu_desc->frame_ctrl & IEEE80211_FC1_DIR_MASK) &&
|
if (((ppdu_desc->frame_ctrl >> IEEE80211_FC1_SHIFT) &
|
||||||
|
IEEE80211_FC1_DIR_MASK) ==
|
||||||
(IEEE80211_FC1_DIR_TODS |
|
(IEEE80211_FC1_DIR_TODS |
|
||||||
IEEE80211_FC1_DIR_FROMDS))) {
|
IEEE80211_FC1_DIR_FROMDS)) {
|
||||||
dp_tx_update_80211_wds_hdr(pdev, peer,
|
dp_tx_update_80211_wds_hdr(pdev, peer,
|
||||||
ppdu_desc, mpdu_nbuf,
|
ppdu_desc, mpdu_nbuf,
|
||||||
ether_type,
|
ether_type,
|
||||||
eh->ether_shost,
|
eh->ether_dhost,
|
||||||
usr_idx);
|
usr_idx);
|
||||||
} else {
|
} else {
|
||||||
dp_tx_update_80211_hdr(pdev, peer,
|
dp_tx_update_80211_hdr(pdev, peer,
|
||||||
|
Reference in New Issue
Block a user