[Prism54-devel] [patch 4/6] [prism54 svn trunk] various fixes for prism54 svn

jean-baptiste.note at wanadoo.fr jean-baptiste.note at wanadoo.fr
Sun May 15 11:44:13 UTC 2005


Index: trunk/ksrc/islpci_dev.c
===================================================================
--- trunk.orig/ksrc/islpci_dev.c	2005-05-15 11:44:54.000000000 +0200
+++ trunk/ksrc/islpci_dev.c	2005-05-15 11:57:32.000000000 +0200
@@ -213,12 +213,63 @@
 	return reg;
 }
 
+static void
+update_queues(islpci_private *priv) {
+	struct net_device *ndev = priv->ndev;
+
+	/* cleanup the data low transmit queue */
+	islpci_eth_cleanup_transmit(priv, priv->control_block);
+
+	/* check all three queues in priority order
+	 * call the PIMFOR receive function until the
+	 * queue is empty */
+	if (isl38xx_in_queue(priv->control_block,
+			     ISL38XX_CB_RX_MGMTQ) != 0) {
+#if VERBOSE > SHOW_ERROR_MESSAGES
+		DEBUG(SHOW_TRACING,
+		      "Received frame in Management Queue\n");
+#endif
+		islpci_mgt_receive(ndev);
+
+		islpci_mgt_cleanup_transmit(ndev);
+
+		/* Refill slots in receive queue */
+		islpci_mgmt_rx_fill(ndev);
+
+		/* no need to trigger the device, next
+		   islpci_mgt_transaction does it */
+	}
+
+	while (isl38xx_in_queue(priv->control_block,
+				ISL38XX_CB_RX_DATA_LQ) != 0) {
+#if VERBOSE > SHOW_ERROR_MESSAGES
+		DEBUG(SHOW_TRACING,
+		      "Received frame in Data Low Queue \n");
+#endif
+		islpci_eth_receive(priv);
+	}
+
+	/* check whether the data transmit queues were full */
+	if (priv->data_low_tx_full) {
+		/* check whether the transmit is not full anymore */
+		if (ISL38XX_CB_TX_QSIZE -
+		    isl38xx_in_queue(priv->control_block,
+				     ISL38XX_CB_TX_DATA_LQ) >=
+		    ISL38XX_MIN_QTHRESHOLD) {
+			/* nope, the driver is ready for more network frames */
+			netif_wake_queue(priv->ndev);
+
+			/* reset the full flag */
+			priv->data_low_tx_full = 0;
+		}
+	}
+}
+
 irqreturn_t
 islpci_interrupt(int irq, void *config, struct pt_regs *regs)
 {
 	u32 irqs;
 	islpci_private *priv = config;
-	struct net_device *ndev = priv->ndev;
 	int powerstate = ISL38XX_PSM_POWERSAVE_STATE;
 
 	/* lock the interrupt handler */
@@ -280,57 +331,11 @@
 				  device_curr_frag[5])
 			);
 #endif
-
-		/* cleanup the data low transmit queue */
-		islpci_eth_cleanup_transmit(priv, priv->control_block);
-
 		/* device is in active state, update the
 		 * powerstate flag if necessary */
 		powerstate = ISL38XX_PSM_ACTIVE_STATE;
 
-		/* check all three queues in priority order
-		 * call the PIMFOR receive function until the
-		 * queue is empty */
-		if (isl38xx_in_queue(priv->control_block,
-				     ISL38XX_CB_RX_MGMTQ) != 0) {
-#if VERBOSE > SHOW_ERROR_MESSAGES
-			DEBUG(SHOW_TRACING,
-			      "Received frame in Management Queue\n");
-#endif
-			islpci_mgt_receive(ndev);
-
-			islpci_mgt_cleanup_transmit(ndev);
-
-			/* Refill slots in receive queue */
-			islpci_mgmt_rx_fill(ndev);
-
-			/* no need to trigger the device, next
-			   islpci_mgt_transaction does it */
-		}
-
-		while (isl38xx_in_queue(priv->control_block,
-					ISL38XX_CB_RX_DATA_LQ) != 0) {
-#if VERBOSE > SHOW_ERROR_MESSAGES
-			DEBUG(SHOW_TRACING,
-			      "Received frame in Data Low Queue \n");
-#endif
-			islpci_eth_receive(priv);
-		}
-
-		/* check whether the data transmit queues were full */
-		if (priv->data_low_tx_full) {
-			/* check whether the transmit is not full anymore */
-			if (ISL38XX_CB_TX_QSIZE -
-			    isl38xx_in_queue(priv->control_block,
-					     ISL38XX_CB_TX_DATA_LQ) >=
-			    ISL38XX_MIN_QTHRESHOLD) {
-				/* nope, the driver is ready for more network frames */
-				netif_wake_queue(priv->ndev);
-
-				/* reset the full flag */
-				priv->data_low_tx_full = 0;
-			}
-		}
+		update_queues(priv);
 
 		irqs &= ~ISL38XX_INT_IDENT_UPDATE;
 		if (!irqs)

--
Jean-Baptiste Note
+33 (0)6 83 03 42 38
jean-baptiste.note at wanadoo.fr


More information about the Prism54-devel mailing list