+ add-bcm43xx-hw-rng-support.patch added to -mm tree

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

 



The patch titled

     Add bcm43xx HW RNG support

has been added to the -mm tree.  Its filename is

     add-bcm43xx-hw-rng-support.patch

See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find
out what to do about this


From: Michael Buesch <mb@xxxxxxxxx>

Signed-off-by: Michael Buesch <mb@xxxxxxxxx>
Cc: Jeff Garzik <jeff@xxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxx>
---

 drivers/net/wireless/bcm43xx/Kconfig        |    1 
 drivers/net/wireless/bcm43xx/bcm43xx.h      |    6 ++
 drivers/net/wireless/bcm43xx/bcm43xx_main.c |   37 ++++++++++++++++++
 3 files changed, 44 insertions(+)

diff -puN drivers/net/wireless/bcm43xx/bcm43xx.h~add-bcm43xx-hw-rng-support drivers/net/wireless/bcm43xx/bcm43xx.h
--- 25/drivers/net/wireless/bcm43xx/bcm43xx.h~add-bcm43xx-hw-rng-support	Mon May 15 15:07:43 2006
+++ 25-akpm/drivers/net/wireless/bcm43xx/bcm43xx.h	Mon May 15 15:07:43 2006
@@ -1,6 +1,7 @@
 #ifndef BCM43xx_H_
 #define BCM43xx_H_
 
+#include <linux/hw_random.h>
 #include <linux/version.h>
 #include <linux/kernel.h>
 #include <linux/spinlock.h>
@@ -82,6 +83,7 @@
 #define BCM43xx_MMIO_TSF_1		0x634 /* core rev < 3 only */
 #define BCM43xx_MMIO_TSF_2		0x636 /* core rev < 3 only */
 #define BCM43xx_MMIO_TSF_3		0x638 /* core rev < 3 only */
+#define BCM43xx_MMIO_RNG		0x65A
 #define BCM43xx_MMIO_POWERUP_DELAY	0x6A8
 
 /* SPROM offsets. */
@@ -740,6 +742,10 @@ struct bcm43xx_private {
 	const struct firmware *initvals0;
 	const struct firmware *initvals1;
 
+	/* Random Number Generator. */
+	struct hwrng rng;
+	char rng_name[20 + 1];
+
 	/* Debugging stuff follows. */
 #ifdef CONFIG_BCM43XX_DEBUG
 	struct bcm43xx_dfsentry *dfsentry;
diff -puN drivers/net/wireless/bcm43xx/bcm43xx_main.c~add-bcm43xx-hw-rng-support drivers/net/wireless/bcm43xx/bcm43xx_main.c
--- 25/drivers/net/wireless/bcm43xx/bcm43xx_main.c~add-bcm43xx-hw-rng-support	Mon May 15 15:07:43 2006
+++ 25-akpm/drivers/net/wireless/bcm43xx/bcm43xx_main.c	Mon May 15 15:07:43 2006
@@ -3152,6 +3152,39 @@ static void bcm43xx_security_init(struct
 	bcm43xx_clear_keys(bcm);
 }
 
+static int bcm43xx_rng_read(struct hwrng *rng, u32 *data)
+{
+	struct bcm43xx_private *bcm = (struct bcm43xx_private *)rng->priv;
+	unsigned long flags;
+
+	bcm43xx_lock(bcm, flags);
+	*data = bcm43xx_read16(bcm, BCM43xx_MMIO_RNG);
+	bcm43xx_unlock(bcm, flags);
+
+	return (sizeof(u16));
+}
+
+static void bcm43xx_rng_exit(struct bcm43xx_private *bcm)
+{
+	hwrng_unregister(&bcm->rng);
+}
+
+static int bcm43xx_rng_init(struct bcm43xx_private *bcm)
+{
+	int err;
+
+	snprintf(bcm->rng_name, ARRAY_SIZE(bcm->rng_name),
+		 "%s_%s", KBUILD_MODNAME, bcm->net_dev->name);
+	bcm->rng.name = bcm->rng_name;
+	bcm->rng.data_read = bcm43xx_rng_read;
+	bcm->rng.priv = (unsigned long)bcm;
+	err = hwrng_register(&bcm->rng);
+	if (err)
+		printk(KERN_ERR PFX "RNG init failed (%d)\n", err);
+
+	return err;
+}
+
 /* This is the opposite of bcm43xx_init_board() */
 static void bcm43xx_free_board(struct bcm43xx_private *bcm)
 {
@@ -3167,6 +3200,7 @@ static void bcm43xx_free_board(struct bc
 	bcm->shutting_down = 1;
 	bcm43xx_unlock(bcm, flags);
 
+	bcm43xx_rng_exit(bcm);
 	for (i = 0; i < BCM43xx_MAX_80211_CORES; i++) {
 		if (!bcm->core_80211[i].available)
 			continue;
@@ -3248,6 +3282,9 @@ static int bcm43xx_init_board(struct bcm
 		bcm43xx_switch_core(bcm, &bcm->core_80211[0]);
 		bcm43xx_mac_enable(bcm);
 	}
+	err = bcm43xx_rng_init(bcm);
+	if (err)
+		goto err_80211_unwind;
 	bcm43xx_macfilter_clear(bcm, BCM43xx_MACFILTER_ASSOC);
 	bcm43xx_macfilter_set(bcm, BCM43xx_MACFILTER_SELF, (u8 *)(bcm->net_dev->dev_addr));
 	dprintk(KERN_INFO PFX "80211 cores initialized\n");
diff -puN drivers/net/wireless/bcm43xx/Kconfig~add-bcm43xx-hw-rng-support drivers/net/wireless/bcm43xx/Kconfig
--- 25/drivers/net/wireless/bcm43xx/Kconfig~add-bcm43xx-hw-rng-support	Mon May 15 15:07:43 2006
+++ 25-akpm/drivers/net/wireless/bcm43xx/Kconfig	Mon May 15 15:07:43 2006
@@ -2,6 +2,7 @@ config BCM43XX
 	tristate "Broadcom BCM43xx wireless support"
 	depends on PCI && IEEE80211 && IEEE80211_SOFTMAC && NET_RADIO && EXPERIMENTAL
 	select FW_LOADER
+	select HW_RANDOM
 	---help---
 	  This is an experimental driver for the Broadcom 43xx wireless chip,
 	  found in the Apple Airport Extreme and various other devices.
_

Patches currently in -mm which might be from mb@xxxxxxxxx are

git-netdev-all.patch
remove-old-hw-rng-support.patch
add-new-generic-hw-rng-core.patch
add-intel-hw-rng-driver.patch
add-amd-hw-rng-driver.patch
add-geode-hw-rng-driver.patch
add-via-hw-rng-driver.patch
add-ixp4xx-hw-rng-driver.patch
add-ti-omap-cpu-family-hw-rng-driver.patch
add-bcm43xx-hw-rng-support.patch
capi-crash--race-condition.patch

-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux