From c6346fafd12f88a53ebfe9ccf86e9de6bd1f0f1a Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Mon, 30 Jun 2014 10:10:02 +0200 Subject: [PATCH] Staging: bcm: InterfaceRx.c: Outsourced control packet handling Acked-by: Kevin McKinney Signed-off-by: Matthias Beyer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/bcm/InterfaceRx.c | 37 +++++++++++++++++++------------ 1 file 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 -- 2.34.1