bnx2: Add SA_SAMPLE_RANDOM flag to bnx2 as a module option

This patch allows for the bnx2 to add to the /dev/random entropy pool
via a module parameter, entropy.  

0 - default for EL5 - do not populate the entropy pool
1 - optional  - Uses SA_SAMPLE_RANDOM flag on request_irq calls to populate
                the /dev/random pool

Signed-off-by: John Sobecki <john.sobecki@oracle.com>

--- linux-2.6.18.x86_64/drivers/net/bnx2.c.orig	2007-05-15 11:45:49.158082000 -0700
+++ linux-2.6.18.x86_64/drivers/net/bnx2.c	2007-05-15 12:03:39.268976000 -0700
@@ -56,7 +56,7 @@
 
 #define DRV_MODULE_NAME		"bnx2"
 #define PFX DRV_MODULE_NAME	": "
-#define DRV_MODULE_VERSION	"1.4.44-1"
+#define DRV_MODULE_VERSION	"1.4.44-1ora"
 #define DRV_MODULE_RELDATE	"August 10, 2006"
 
 #define RUN_AT(x) (jiffies + (x))
@@ -77,6 +77,10 @@
 module_param(disable_msi, int, 0);
 MODULE_PARM_DESC(disable_msi, "Disable Message Signaled Interrupt (MSI)");
 
+static int entropy = 0;
+
+module_param(entropy, int, 0);
+MODULE_PARM_DESC(entropy, "Allow bnx2 to populate the /dev/random entropy pool");
 typedef enum {
 	BCM5706 = 0,
 	NC370T,
@@ -4263,16 +4267,31 @@
 
 		if (pci_enable_msi(bp->pdev) == 0) {
 			bp->flags |= USING_MSI_FLAG;
-			rc = request_irq(bp->pdev->irq, bnx2_msi, 0, dev->name,
-					dev);
+                        if (entropy)
+			  rc = request_irq(bp->pdev->irq, bnx2_msi, 
+					   SA_SAMPLE_RANDOM, dev->name, dev);
+                        else
+			  rc = request_irq(bp->pdev->irq, bnx2_msi, 0, 
+			       		   dev->name, dev);
 		}
 		else {
-			rc = request_irq(bp->pdev->irq, bnx2_interrupt,
-					IRQF_SHARED, dev->name, dev);
+			if (entropy)
+  			  rc = request_irq(bp->pdev->irq, bnx2_interrupt,
+					   IRQF_SHARED|SA_SAMPLE_RANDOM, 
+					   dev->name, dev);
+			else
+                          rc = request_irq(bp->pdev->irq, bnx2_interrupt,
+                                           IRQF_SHARED, dev->name, dev);
+
 		}
 	}
 	else {
-		rc = request_irq(bp->pdev->irq, bnx2_interrupt, IRQF_SHARED,
+		if (entropy)
+		  rc = request_irq(bp->pdev->irq, bnx2_interrupt, 
+				   IRQF_SHARED|SA_SAMPLE_RANDOM,
+                                   dev->name, dev);
+		else
+		  rc = request_irq(bp->pdev->irq, bnx2_interrupt, IRQF_SHARED,
 				dev->name, dev);
 	}
 	if (rc) {
@@ -4318,8 +4337,15 @@
 			rc = bnx2_init_nic(bp);
 
 			if (!rc) {
-				rc = request_irq(bp->pdev->irq, bnx2_interrupt,
-					IRQF_SHARED, dev->name, dev);
+				if (entropy)
+				  rc = request_irq(bp->pdev->irq,
+						bnx2_interrupt,
+				  		IRQF_SHARED|SA_SAMPLE_RANDOM,
+				  		dev->name, dev);
+				else
+				  rc = request_irq(bp->pdev->irq, 
+						bnx2_interrupt,
+					        IRQF_SHARED, dev->name, dev);
 			}
 			if (rc) {
 				bnx2_free_skbs(bp);
