diff options
author | John W. Linville <linville@tuxdriver.com> | 2012-09-28 11:11:16 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-09-28 11:11:16 -0400 |
commit | c487606f835a93a725bac1aefd536be98f22474d (patch) | |
tree | c77571a519905945e24a9ea6e4e44d9032fd527d /drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | |
parent | d9f72f359e00a45a6cd7cc2d5121b04b9dc927e1 (diff) | |
parent | 97ea6d0f3eb019891038cd2dfddb749d6bf219be (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Conflicts:
net/nfc/netlink.c
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c')
-rw-r--r-- | drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | 41 |
1 files changed, 16 insertions, 25 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c index b08f3474d8e7..d7c76ce9d8cb 100644 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c | |||
@@ -272,30 +272,6 @@ static void brcmf_netdev_set_multicast_list(struct net_device *ndev) | |||
272 | schedule_work(&drvr->multicast_work); | 272 | schedule_work(&drvr->multicast_work); |
273 | } | 273 | } |
274 | 274 | ||
275 | int brcmf_sendpkt(struct brcmf_pub *drvr, int ifidx, struct sk_buff *pktbuf) | ||
276 | { | ||
277 | /* Reject if down */ | ||
278 | if (!drvr->bus_if->drvr_up || (drvr->bus_if->state == BRCMF_BUS_DOWN)) | ||
279 | return -ENODEV; | ||
280 | |||
281 | /* Update multicast statistic */ | ||
282 | if (pktbuf->len >= ETH_ALEN) { | ||
283 | u8 *pktdata = (u8 *) (pktbuf->data); | ||
284 | struct ethhdr *eh = (struct ethhdr *)pktdata; | ||
285 | |||
286 | if (is_multicast_ether_addr(eh->h_dest)) | ||
287 | drvr->tx_multicast++; | ||
288 | if (ntohs(eh->h_proto) == ETH_P_PAE) | ||
289 | atomic_inc(&drvr->pend_8021x_cnt); | ||
290 | } | ||
291 | |||
292 | /* If the protocol uses a data header, apply it */ | ||
293 | brcmf_proto_hdrpush(drvr, ifidx, pktbuf); | ||
294 | |||
295 | /* Use bus module to send data frame */ | ||
296 | return drvr->bus_if->brcmf_bus_txdata(drvr->dev, pktbuf); | ||
297 | } | ||
298 | |||
299 | static int brcmf_netdev_start_xmit(struct sk_buff *skb, struct net_device *ndev) | 275 | static int brcmf_netdev_start_xmit(struct sk_buff *skb, struct net_device *ndev) |
300 | { | 276 | { |
301 | int ret; | 277 | int ret; |
@@ -338,7 +314,22 @@ static int brcmf_netdev_start_xmit(struct sk_buff *skb, struct net_device *ndev) | |||
338 | } | 314 | } |
339 | } | 315 | } |
340 | 316 | ||
341 | ret = brcmf_sendpkt(drvr, ifp->idx, skb); | 317 | /* Update multicast statistic */ |
318 | if (skb->len >= ETH_ALEN) { | ||
319 | u8 *pktdata = (u8 *)(skb->data); | ||
320 | struct ethhdr *eh = (struct ethhdr *)pktdata; | ||
321 | |||
322 | if (is_multicast_ether_addr(eh->h_dest)) | ||
323 | drvr->tx_multicast++; | ||
324 | if (ntohs(eh->h_proto) == ETH_P_PAE) | ||
325 | atomic_inc(&drvr->pend_8021x_cnt); | ||
326 | } | ||
327 | |||
328 | /* If the protocol uses a data header, apply it */ | ||
329 | brcmf_proto_hdrpush(drvr, ifp->idx, skb); | ||
330 | |||
331 | /* Use bus module to send data frame */ | ||
332 | ret = drvr->bus_if->brcmf_bus_txdata(drvr->dev, skb); | ||
342 | 333 | ||
343 | done: | 334 | done: |
344 | if (ret) | 335 | if (ret) |