[PATCH 4/5] Staging: bcm: LeakyBucket.c: Outsourced ctrl packet sending

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Matthias Beyer <mail@xxxxxxxxxxxxxxxx>
---
 drivers/staging/bcm/LeakyBucket.c | 76 ++++++++++++++++++++-------------------
 1 file changed, 40 insertions(+), 36 deletions(-)

diff --git a/drivers/staging/bcm/LeakyBucket.c b/drivers/staging/bcm/LeakyBucket.c
index 0d1a6e5..f2852c9 100644
--- a/drivers/staging/bcm/LeakyBucket.c
+++ b/drivers/staging/bcm/LeakyBucket.c
@@ -219,6 +219,45 @@ static void get_data_packet(struct bcm_mini_adapter *ad,
 	}
 }
 
+static void send_control_packet(struct bcm_mini_adapter *ad,
+				struct bcm_packet_info *ps_sf)
+{
+	char *ctrl_packet = NULL;
+	INT status = 0;
+
+	if ((atomic_read(&ad->CurrNumFreeTxDesc) > 0) &&
+	    (atomic_read(&ad->index_rd_txcntrlpkt) !=
+	     atomic_read(&ad->index_wr_txcntrlpkt))) {
+		ctrl_packet = ad->txctlpacket
+		[(atomic_read(&ad->index_rd_txcntrlpkt)%MAX_CNTRL_PKTS)];
+		if (ctrl_packet) {
+			BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS,
+					DBG_LVL_ALL,
+					"Sending Control packet");
+			status = SendControlPacket(ad, ctrl_packet);
+			if (STATUS_SUCCESS == status) {
+				spin_lock_bh(&ps_sf->SFQueueLock);
+				ps_sf->NumOfPacketsSent++;
+				ps_sf->uiSentBytes += ((struct bcm_leader *)ctrl_packet)->PLength;
+				ps_sf->uiSentPackets++;
+				atomic_dec(&ad->TotalPacketCount);
+				ps_sf->uiCurrentBytesOnHost -= ((struct bcm_leader *)ctrl_packet)->PLength;
+				ps_sf->uiCurrentPacketsOnHost--;
+				atomic_inc(&ad->index_rd_txcntrlpkt);
+				spin_unlock_bh(&ps_sf->SFQueueLock);
+			} else {
+				BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS,
+						DBG_LVL_ALL,
+						"SendControlPacket Failed\n");
+			}
+		} else {
+			BCM_DEBUG_PRINT(ad, DBG_TYPE_TX, TX_PACKETS,
+					DBG_LVL_ALL,
+					" Control Pkt is not available, Indexing is wrong....");
+		}
+	}
+}
+
 /************************************************************************
 * Function    - CheckAndSendPacketFromIndex()
 *
@@ -234,9 +273,6 @@ static void get_data_packet(struct bcm_mini_adapter *ad,
 static VOID CheckAndSendPacketFromIndex(struct bcm_mini_adapter *Adapter,
 					struct bcm_packet_info *psSF)
 {
-	char *pControlPacket = NULL;
-	INT Status = 0;
-
 	BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS, DBG_LVL_ALL,
 			"%zd ====>", (psSF-Adapter->PackInfo));
 	if ((psSF != &Adapter->PackInfo[HiPriority]) &&
@@ -245,39 +281,7 @@ static VOID CheckAndSendPacketFromIndex(struct bcm_mini_adapter *Adapter,
 
 		get_data_packet(Adapter, psSF);
 	} else {
-
-		if ((atomic_read(&Adapter->CurrNumFreeTxDesc) > 0) &&
-		    (atomic_read(&Adapter->index_rd_txcntrlpkt) !=
-		     atomic_read(&Adapter->index_wr_txcntrlpkt))) {
-			pControlPacket = Adapter->txctlpacket
-			[(atomic_read(&Adapter->index_rd_txcntrlpkt)%MAX_CNTRL_PKTS)];
-			if (pControlPacket) {
-				BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX, TX_PACKETS,
-						DBG_LVL_ALL,
-						"Sending Control packet");
-				Status = SendControlPacket(Adapter,
-							   pControlPacket);
-				if (STATUS_SUCCESS == Status) {
-					spin_lock_bh(&psSF->SFQueueLock);
-					psSF->NumOfPacketsSent++;
-					psSF->uiSentBytes += ((struct bcm_leader *)pControlPacket)->PLength;
-					psSF->uiSentPackets++;
-					atomic_dec(&Adapter->TotalPacketCount);
-					psSF->uiCurrentBytesOnHost -= ((struct bcm_leader *)pControlPacket)->PLength;
-					psSF->uiCurrentPacketsOnHost--;
-					atomic_inc(&Adapter->index_rd_txcntrlpkt);
-					spin_unlock_bh(&psSF->SFQueueLock);
-				} else {
-					BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX,
-							TX_PACKETS, DBG_LVL_ALL,
-							"SendControlPacket Failed\n");
-				}
-			} else {
-					BCM_DEBUG_PRINT(Adapter, DBG_TYPE_TX,
-							TX_PACKETS, DBG_LVL_ALL,
-							" Control Pkt is not available, Indexing is wrong....");
-			}
-		}
+		send_control_packet(Adapter, psSF);
 	}
 }
 
-- 
2.0.1

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux