Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c6346faf authored by Matthias Beyer's avatar Matthias Beyer Committed by Greg Kroah-Hartman
Browse files

Staging: bcm: InterfaceRx.c: Outsourced control packet handling

parent f5c86ab9
Loading
Loading
Loading
Loading
+23 −14
Original line number Diff line number Diff line
#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