diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2014-06-30 10:10:02 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-07-08 16:06:16 -0700 |
commit | c6346fafd12f88a53ebfe9ccf86e9de6bd1f0f1a (patch) | |
tree | d8df1a30f19122951096bca2f1128c0a09993350 | |
parent | f5c86ab9b622a526a37e7217eef7227d77fb00c1 (diff) | |
download | linux-c6346fafd12f88a53ebfe9ccf86e9de6bd1f0f1a.tar.gz linux-c6346fafd12f88a53ebfe9ccf86e9de6bd1f0f1a.tar.bz2 linux-c6346fafd12f88a53ebfe9ccf86e9de6bd1f0f1a.zip |
Staging: bcm: InterfaceRx.c: Outsourced control packet handling
Acked-by: Kevin McKinney <klmckinney1@gmail.com>
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/bcm/InterfaceRx.c | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/drivers/staging/bcm/InterfaceRx.c b/drivers/staging/bcm/InterfaceRx.c index 9d6e1d0a7254..47b6de7ee80b 100644 --- a/drivers/staging/bcm/InterfaceRx.c +++ b/drivers/staging/bcm/InterfaceRx.c @@ -1,5 +1,26 @@ #include "headers.h" +static void handle_control_packet(struct bcm_interface_adapter *interface, + struct bcm_mini_adapter *ad, + struct bcm_leader *leader, + struct sk_buff *skb, + struct urb *urb) +{ + BCM_DEBUG_PRINT(interface->psAdapter, DBG_TYPE_RX, RX_CTRL, DBG_LVL_ALL, + "Received control pkt..."); + *(PUSHORT)skb->data = leader->Status; + memcpy(skb->data+sizeof(USHORT), urb->transfer_buffer + + (sizeof(struct bcm_leader)), leader->PLength); + skb->len = leader->PLength + sizeof(USHORT); + + spin_lock(&ad->control_queue_lock); + ENQUEUEPACKET(ad->RxControlHead, ad->RxControlTail, skb); + spin_unlock(&ad->control_queue_lock); + + atomic_inc(&ad->cntrlpktCnt); + wake_up(&ad->process_rx_cntrlpkt); +} + static int SearchVcid(struct bcm_mini_adapter *Adapter, unsigned short usVcid) { int iIndex = 0; @@ -120,20 +141,8 @@ static void read_bulk_callback(struct urb *urb) /* If it is a control Packet, then call handle_bcm_packet ()*/ if ((ntohs(pLeader->Vcid) == VCID_CONTROL_PACKET) || (!(pLeader->Status >= 0x20 && pLeader->Status <= 0x3F))) { - BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_CTRL, - DBG_LVL_ALL, "Received control pkt..."); - *(PUSHORT)skb->data = pLeader->Status; - memcpy(skb->data+sizeof(USHORT), urb->transfer_buffer + - (sizeof(struct bcm_leader)), pLeader->PLength); - skb->len = pLeader->PLength + sizeof(USHORT); - - spin_lock(&Adapter->control_queue_lock); - ENQUEUEPACKET(Adapter->RxControlHead, Adapter->RxControlTail, - skb); - spin_unlock(&Adapter->control_queue_lock); - - atomic_inc(&Adapter->cntrlpktCnt); - wake_up(&Adapter->process_rx_cntrlpkt); + handle_control_packet(psIntfAdapter, Adapter, pLeader, skb, + urb); } else { /* * Data Packet, Format a proper Ethernet Header |