]> Pileus Git - ~andy/linux/commitdiff
ath6kl: add pointer to the skb in htc_packet
authorKalle Valo <kvalo@qca.qualcomm.com>
Sun, 25 Mar 2012 14:15:24 +0000 (17:15 +0300)
committerKalle Valo <kvalo@qca.qualcomm.com>
Mon, 26 Mar 2012 13:36:45 +0000 (16:36 +0300)
Needed by the USB code.

Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath6kl/htc.h
drivers/net/wireless/ath/ath6kl/txrx.c

index 51f2485e29f5b70efe8a5f2fa9d0d5ecc42fbf79..e97ebc33aad10ca558483db8740462f612a75748 100644 (file)
@@ -311,6 +311,14 @@ struct htc_packet {
 
        void (*completion) (struct htc_target *, struct htc_packet *);
        struct htc_target *context;
+
+       /*
+        * optimization for network-oriented data, the HTC packet
+        * can pass the network buffer corresponding to the HTC packet
+        * lower layers may optimized the transfer knowing this is
+        * a network buffer
+        */
+       struct sk_buff *skb;
 };
 
 enum htc_send_full_action {
index befe305847da9a7a418fe19817a5795d83fade86..53d033478d3f5e0560c952e2277fcd505f249619 100644 (file)
@@ -322,6 +322,7 @@ int ath6kl_control_tx(void *devt, struct sk_buff *skb,
        cookie->map_no = 0;
        set_htc_pkt_info(&cookie->htc_pkt, cookie, skb->data, skb->len,
                         eid, ATH6KL_CONTROL_PKT_TAG);
+       cookie->htc_pkt.skb = skb;
 
        /*
         * This interface is asynchronous, if there is an error, cleanup
@@ -490,6 +491,7 @@ int ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev)
        cookie->map_no = map_no;
        set_htc_pkt_info(&cookie->htc_pkt, cookie, skb->data, skb->len,
                         eid, htc_tag);
+       cookie->htc_pkt.skb = skb;
 
        ath6kl_dbg_dump(ATH6KL_DBG_RAW_BYTES, __func__, "tx ",
                        skb->data, skb->len);
@@ -888,6 +890,7 @@ void ath6kl_rx_refill(struct htc_target *target, enum htc_endpoint_id endpoint)
                        skb->data = PTR_ALIGN(skb->data - 4, 4);
                set_htc_rxpkt_info(packet, skb, skb->data,
                                   ATH6KL_BUFFER_SIZE, endpoint);
+               packet->skb = skb;
                list_add_tail(&packet->list, &queue);
        }
 
@@ -910,6 +913,8 @@ void ath6kl_refill_amsdu_rxbufs(struct ath6kl *ar, int count)
                        skb->data = PTR_ALIGN(skb->data - 4, 4);
                set_htc_rxpkt_info(packet, skb, skb->data,
                                   ATH6KL_AMSDU_BUFFER_SIZE, 0);
+               packet->skb = skb;
+
                spin_lock_bh(&ar->lock);
                list_add_tail(&packet->list, &ar->amsdu_rx_buffer_queue);
                spin_unlock_bh(&ar->lock);