mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 18:13:26 -04:00
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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f5c86ab9b6
commit
c6346fafd1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user