Skip to content

Commit

Permalink
wil6210: fix reordering for MCAST
Browse files Browse the repository at this point in the history
In the reordering block, Ethernet DA was checked for MCAST, this is wrong.
Check instead MCAST indication from 802.11 MAC header. Hardware saves
this into Rx descriptor.

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  • Loading branch information
Vladimir Kondratiev authored and Kalle Valo committed Jan 15, 2015
1 parent ab95462 commit e4373d8
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 9 deletions.
10 changes: 8 additions & 2 deletions drivers/net/wireless/ath/wil6210/rx_reorder.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,14 +97,20 @@ void wil_rx_reorder(struct wil6210_priv *wil, struct sk_buff *skb)
int cid = wil_rxdesc_cid(d);
int mid = wil_rxdesc_mid(d);
u16 seq = wil_rxdesc_seq(d);
int mcast = wil_rxdesc_mcast(d);
struct wil_sta_info *sta = &wil->sta[cid];
struct wil_tid_ampdu_rx *r;
u16 hseq;
int index;
unsigned long flags;

wil_dbg_txrx(wil, "MID %d CID %d TID %d Seq 0x%03x\n",
mid, cid, tid, seq);
wil_dbg_txrx(wil, "MID %d CID %d TID %d Seq 0x%03x mcast %01x\n",
mid, cid, tid, seq, mcast);

if (unlikely(mcast)) {
wil_netif_rx_any(skb, ndev);
return;
}

spin_lock_irqsave(&sta->tid_rx_lock, flags);

Expand Down
8 changes: 1 addition & 7 deletions drivers/net/wireless/ath/wil6210/txrx.c
Original file line number Diff line number Diff line change
Expand Up @@ -581,14 +581,8 @@ void wil_rx_handle(struct wil6210_priv *wil, int *quota)
skb->protocol = htons(ETH_P_802_2);
wil_netif_rx_any(skb, ndev);
} else {
struct ethhdr *eth = (void *)skb->data;

skb->protocol = eth_type_trans(skb, ndev);

if (is_unicast_ether_addr(eth->h_dest))
wil_rx_reorder(wil, skb);
else
wil_netif_rx_any(skb, ndev);
wil_rx_reorder(wil, skb);
}
}
wil_rx_refill(wil, v->size);
Expand Down
5 changes: 5 additions & 0 deletions drivers/net/wireless/ath/wil6210/txrx.h
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,11 @@ static inline int wil_rxdesc_mcs(struct vring_rx_desc *d)
return WIL_GET_BITS(d->mac.d1, 21, 24);
}

static inline int wil_rxdesc_mcast(struct vring_rx_desc *d)
{
return WIL_GET_BITS(d->mac.d1, 13, 14);
}

static inline int wil_rxdesc_phy_length(struct vring_rx_desc *d)
{
return WIL_GET_BITS(d->dma.d0, 16, 29);
Expand Down

0 comments on commit e4373d8

Please sign in to comment.