diff options
-rw-r--r-- | net/mac80211/tx.c | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 1a531543bccb..9ccf4b5a9aad 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -1527,64 +1527,6 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb, | |||
1527 | return ret; | 1527 | return ret; |
1528 | } | 1528 | } |
1529 | 1529 | ||
1530 | /* | ||
1531 | * This is the transmit routine for the 802.11 type interfaces | ||
1532 | * called by upper layers of the linux networking | ||
1533 | * stack when it has a frame to transmit | ||
1534 | */ | ||
1535 | int ieee80211_mgmt_start_xmit(struct sk_buff *skb, struct net_device *dev) | ||
1536 | { | ||
1537 | struct ieee80211_sub_if_data *sdata; | ||
1538 | struct ieee80211_tx_packet_data *pkt_data; | ||
1539 | struct ieee80211_hdr *hdr; | ||
1540 | u16 fc; | ||
1541 | |||
1542 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); | ||
1543 | |||
1544 | if (skb->len < 10) { | ||
1545 | dev_kfree_skb(skb); | ||
1546 | return 0; | ||
1547 | } | ||
1548 | |||
1549 | if (skb_headroom(skb) < sdata->local->tx_headroom) { | ||
1550 | if (pskb_expand_head(skb, sdata->local->tx_headroom, | ||
1551 | 0, GFP_ATOMIC)) { | ||
1552 | dev_kfree_skb(skb); | ||
1553 | return 0; | ||
1554 | } | ||
1555 | } | ||
1556 | |||
1557 | hdr = (struct ieee80211_hdr *) skb->data; | ||
1558 | fc = le16_to_cpu(hdr->frame_control); | ||
1559 | |||
1560 | pkt_data = (struct ieee80211_tx_packet_data *) skb->cb; | ||
1561 | memset(pkt_data, 0, sizeof(struct ieee80211_tx_packet_data)); | ||
1562 | pkt_data->ifindex = sdata->dev->ifindex; | ||
1563 | |||
1564 | skb->priority = 20; /* use hardcoded priority for mgmt TX queue */ | ||
1565 | skb->dev = sdata->local->mdev; | ||
1566 | |||
1567 | /* | ||
1568 | * We're using the protocol field of the the frame control header | ||
1569 | * to request TX callback for hostapd. BIT(1) is checked. | ||
1570 | */ | ||
1571 | if ((fc & BIT(1)) == BIT(1)) { | ||
1572 | pkt_data->flags |= IEEE80211_TXPD_REQ_TX_STATUS; | ||
1573 | fc &= ~BIT(1); | ||
1574 | hdr->frame_control = cpu_to_le16(fc); | ||
1575 | } | ||
1576 | |||
1577 | if (!(fc & IEEE80211_FCTL_PROTECTED)) | ||
1578 | pkt_data->flags |= IEEE80211_TXPD_DO_NOT_ENCRYPT; | ||
1579 | |||
1580 | dev->stats.tx_packets++; | ||
1581 | dev->stats.tx_bytes += skb->len; | ||
1582 | |||
1583 | dev_queue_xmit(skb); | ||
1584 | |||
1585 | return 0; | ||
1586 | } | ||
1587 | |||
1588 | /* helper functions for pending packets for when queues are stopped */ | 1530 | /* helper functions for pending packets for when queues are stopped */ |
1589 | 1531 | ||
1590 | void ieee80211_clear_tx_pending(struct ieee80211_local *local) | 1532 | void ieee80211_clear_tx_pending(struct ieee80211_local *local) |