summaryrefslogtreecommitdiffstats
path: root/drivers/staging/bcm/InterfaceRx.c
diff options
context:
space:
mode:
authorMatthias Beyer2014-06-30 10:10:03 +0200
committerGreg Kroah-Hartman2014-07-09 01:06:16 +0200
commit3a162b194890dc4bfeacc15885ffdd0e260ce167 (patch)
treeb07ba40d0c8b247de4c493bc96e81b394b95e58b /drivers/staging/bcm/InterfaceRx.c
parentStaging: bcm: InterfaceRx.c: Outsourced control packet handling (diff)
downloadkernel-qcow2-linux-3a162b194890dc4bfeacc15885ffdd0e260ce167.tar.gz
kernel-qcow2-linux-3a162b194890dc4bfeacc15885ffdd0e260ce167.tar.xz
kernel-qcow2-linux-3a162b194890dc4bfeacc15885ffdd0e260ce167.zip
Staging: bcm: InterfaceRx.c: Outsourced code chunk
This patch outsources a chunk of code into a function. Acked-by: Kevin McKinney <klmckinney1@gmail.com> Signed-off-by: Matthias Beyer <mail@beyermatthias.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/bcm/InterfaceRx.c')
-rw-r--r--drivers/staging/bcm/InterfaceRx.c129
1 files changed, 71 insertions, 58 deletions
diff --git a/drivers/staging/bcm/InterfaceRx.c b/drivers/staging/bcm/InterfaceRx.c
index 47b6de7ee80b..f2c323d6c1a2 100644
--- a/drivers/staging/bcm/InterfaceRx.c
+++ b/drivers/staging/bcm/InterfaceRx.c
@@ -21,6 +21,73 @@ static void handle_control_packet(struct bcm_interface_adapter *interface,
wake_up(&ad->process_rx_cntrlpkt);
}
+static void format_eth_hdr_to_stack(struct bcm_interface_adapter *interface,
+ struct bcm_mini_adapter *ad,
+ struct bcm_leader *p_leader,
+ struct sk_buff *skb,
+ struct urb *urb,
+ UINT ui_index,
+ int queue_index,
+ bool b_header_supression_endabled,
+ int *process_done)
+{
+ /*
+ * Data Packet, Format a proper Ethernet Header
+ * and give it to the stack
+ */
+ BCM_DEBUG_PRINT(interface->psAdapter, DBG_TYPE_RX, RX_DATA,
+ DBG_LVL_ALL, "Received Data pkt...");
+ skb_reserve(skb, 2 + SKB_RESERVE_PHS_BYTES);
+ memcpy(skb->data+ETH_HLEN, (PUCHAR)urb->transfer_buffer +
+ sizeof(struct bcm_leader), p_leader->PLength);
+ skb->dev = ad->dev;
+
+ /* currently skb->len has extra ETH_HLEN bytes in the beginning */
+ skb_put(skb, p_leader->PLength + ETH_HLEN);
+ ad->PackInfo[queue_index].uiTotalRxBytes += p_leader->PLength;
+ ad->PackInfo[queue_index].uiThisPeriodRxBytes += p_leader->PLength;
+ BCM_DEBUG_PRINT(interface->psAdapter, DBG_TYPE_RX, RX_DATA,
+ DBG_LVL_ALL, "Received Data pkt of len :0x%X",
+ p_leader->PLength);
+
+ if (netif_running(ad->dev)) {
+ /* Moving ahead by ETH_HLEN to the data ptr as received from FW */
+ skb_pull(skb, ETH_HLEN);
+ PHSReceive(ad, p_leader->Vcid, skb, &skb->len,
+ NULL, b_header_supression_endabled);
+
+ if (!ad->PackInfo[queue_index].bEthCSSupport) {
+ skb_push(skb, ETH_HLEN);
+
+ memcpy(skb->data, skb->dev->dev_addr, 6);
+ memcpy(skb->data+6, skb->dev->dev_addr, 6);
+ (*(skb->data+11))++;
+ *(skb->data+12) = 0x08;
+ *(skb->data+13) = 0x00;
+ p_leader->PLength += ETH_HLEN;
+ }
+
+ skb->protocol = eth_type_trans(skb, ad->dev);
+ *process_done = netif_rx(skb);
+ } else {
+ BCM_DEBUG_PRINT(interface->psAdapter, DBG_TYPE_RX,
+ RX_DATA, DBG_LVL_ALL,
+ "i/f not up hance freeing SKB...");
+ dev_kfree_skb(skb);
+ }
+
+ ++ad->dev->stats.rx_packets;
+ ad->dev->stats.rx_bytes += p_leader->PLength;
+
+ for (ui_index = 0; ui_index < MIBS_MAX_HIST_ENTRIES; ui_index++) {
+ if ((p_leader->PLength <=
+ MIBS_PKTSIZEHIST_RANGE*(ui_index+1)) &&
+ (p_leader->PLength > MIBS_PKTSIZEHIST_RANGE*(ui_index)))
+
+ ad->aRxPktSizeHist[ui_index]++;
+ }
+}
+
static int SearchVcid(struct bcm_mini_adapter *Adapter, unsigned short usVcid)
{
int iIndex = 0;
@@ -144,64 +211,10 @@ static void read_bulk_callback(struct urb *urb)
handle_control_packet(psIntfAdapter, Adapter, pLeader, skb,
urb);
} else {
- /*
- * Data Packet, Format a proper Ethernet Header
- * and give it to the stack
- */
- BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DATA,
- DBG_LVL_ALL, "Received Data pkt...");
- skb_reserve(skb, 2 + SKB_RESERVE_PHS_BYTES);
- memcpy(skb->data+ETH_HLEN, (PUCHAR)urb->transfer_buffer +
- sizeof(struct bcm_leader), pLeader->PLength);
- skb->dev = Adapter->dev;
-
- /* currently skb->len has extra ETH_HLEN bytes in the beginning */
- skb_put(skb, pLeader->PLength + ETH_HLEN);
- Adapter->PackInfo[QueueIndex].uiTotalRxBytes +=
- pLeader->PLength;
- Adapter->PackInfo[QueueIndex].uiThisPeriodRxBytes +=
- pLeader->PLength;
- BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX, RX_DATA,
- DBG_LVL_ALL, "Received Data pkt of len :0x%X",
- pLeader->PLength);
-
- if (netif_running(Adapter->dev)) {
- /* Moving ahead by ETH_HLEN to the data ptr as received from FW */
- skb_pull(skb, ETH_HLEN);
- PHSReceive(Adapter, pLeader->Vcid, skb, &skb->len,
- NULL, bHeaderSupressionEnabled);
-
- if (!Adapter->PackInfo[QueueIndex].bEthCSSupport) {
- skb_push(skb, ETH_HLEN);
-
- memcpy(skb->data, skb->dev->dev_addr, 6);
- memcpy(skb->data+6, skb->dev->dev_addr, 6);
- (*(skb->data+11))++;
- *(skb->data+12) = 0x08;
- *(skb->data+13) = 0x00;
- pLeader->PLength += ETH_HLEN;
- }
-
- skb->protocol = eth_type_trans(skb, Adapter->dev);
- process_done = netif_rx(skb);
- } else {
- BCM_DEBUG_PRINT(psIntfAdapter->psAdapter, DBG_TYPE_RX,
- RX_DATA, DBG_LVL_ALL,
- "i/f not up hance freeing SKB...");
- dev_kfree_skb(skb);
- }
-
- ++Adapter->dev->stats.rx_packets;
- Adapter->dev->stats.rx_bytes += pLeader->PLength;
-
- for (uiIndex = 0; uiIndex < MIBS_MAX_HIST_ENTRIES; uiIndex++) {
- if ((pLeader->PLength <=
- MIBS_PKTSIZEHIST_RANGE*(uiIndex+1)) &&
- (pLeader->PLength >
- MIBS_PKTSIZEHIST_RANGE*(uiIndex)))
-
- Adapter->aRxPktSizeHist[uiIndex]++;
- }
+ format_eth_hdr_to_stack(psIntfAdapter, Adapter, pLeader, skb,
+ urb, uiIndex, QueueIndex,
+ bHeaderSupressionEnabled,
+ &process_done);
}
Adapter->PrevNumRecvDescs++;
pRcb->bUsed = false;