On Thursday 07 September 2006 03:34, Larry Finger wrote:
> John,
>
> Please apply this patch by Martin Langer to wireless-2.6. It must follow the
> patch to "Add firmware
> version printout to wireless-2.6 (bcm43xx-softmac)". As originally submitted,
> the patch was
> appropriate for an obsolete version of bcm43xx-softmac, but I have updated
> and tested.
>
> Thanks,
>
> Larry
>
> This patch prints out the ucode debug status to sysfs. So, users can
> watch the microcode status of their hardware.
>
> Signed-off-by: Martin Langer <[EMAIL PROTECTED]>
> Signed-off-by: Larry Finger <[EMAIL PROTECTED]>
>
> =========================================
>
> diff --git a/drivers/net/wireless/bcm43xx/bcm43xx.h
> b/drivers/net/wireless/bcm43xx/bcm43xx.h
> index 62fd7e2..7c2163e 100644
> Index: wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx.h
> ===================================================================
> --- wireless-2.6.orig/drivers/net/wireless/bcm43xx/bcm43xx.h
> +++ wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx.h
> @@ -311,6 +311,7 @@
> #define BCM43xx_UCODE_PATCHLEVEL 0x0002
> #define BCM43xx_UCODE_DATE 0x0004
> #define BCM43xx_UCODE_TIME 0x0006
> +#define BCM43xx_UCODE_STATUS 0x0040
>
> /* MicrocodeFlagsBitfield (addr + lo-word values?)*/
> #define BCM43xx_UCODEFLAGS_OFFSET 0x005E
> Index: wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c
> ===================================================================
> --- wireless-2.6.orig/drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c
> +++ wireless-2.6/drivers/net/wireless/bcm43xx/bcm43xx_sysfs.c
> @@ -373,6 +373,56 @@ static DEVICE_ATTR(phymode, 0644,
> bcm43xx_attr_phymode_show,
> bcm43xx_attr_phymode_store);
>
> +static ssize_t bcm43xx_attr_microcode_show(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + struct bcm43xx_private *bcm = dev_to_bcm(dev);
> + ssize_t count = 0;
> + u16 status;
> +
> + if (!capable(CAP_NET_ADMIN))
> + return -EPERM;
> +
you want to take the spinlock lock here, too.
> + mutex_lock(&(bcm)->mutex);
> + status = bcm43xx_shm_read16(bcm, BCM43xx_SHM_SHARED,
> + BCM43xx_UCODE_STATUS);
can unlock both here.
> + switch (status) {
> + case 0x0000:
> + count = snprintf(buf, PAGE_SIZE, "0x%.4x (invalid)\n",
> + status);
> + break;
> + case 0x0001:
> + count = snprintf(buf, PAGE_SIZE, "0x%.4x (init)\n",
> + status);
> + break;
> + case 0x0002:
> + count = snprintf(buf, PAGE_SIZE, "0x%.4x (active)\n",
> + status);
> + break;
> + case 0x0003:
> + count = snprintf(buf, PAGE_SIZE, "0x%.4x (suspended)\n",
> + status);
> + break;
> + case 0x0004:
> + count = snprintf(buf, PAGE_SIZE, "0x%.4x (asleep)\n",
> + status);
> + break;
> + default:
> + count = snprintf(buf, PAGE_SIZE, "0x%.4x (unknown)\n",
> + status);
> + break;
> + }
> + mutex_unlock(&(bcm)->mutex);
> +
> + return count;
> +}
> +
> +static DEVICE_ATTR(microcodestatus, 0444,
> + bcm43xx_attr_microcode_show,
> + NULL);
> +
> int bcm43xx_sysfs_register(struct bcm43xx_private *bcm)
> {
> struct device *dev = &bcm->pci_dev->dev;
> @@ -392,9 +442,14 @@ int bcm43xx_sysfs_register(struct bcm43x
> err = device_create_file(dev, &dev_attr_phymode);
> if (err)
> goto err_remove_shortpreamble;
> + err = device_create_file(dev, &dev_attr_microcodestatus);
> + if (err)
> + goto err_remove_phymode;
>
> out:
> return err;
> +err_remove_phymode:
> + device_remove_file(dev, &dev_attr_phymode);
> err_remove_shortpreamble:
> device_remove_file(dev, &dev_attr_shortpreamble);
> err_remove_interfmode:
> @@ -408,6 +463,7 @@ void bcm43xx_sysfs_unregister(struct bcm
> {
> struct device *dev = &bcm->pci_dev->dev;
>
> + device_remove_file(dev, &dev_attr_microcodestatus);
> device_remove_file(dev, &dev_attr_phymode);
> device_remove_file(dev, &dev_attr_shortpreamble);
> device_remove_file(dev, &dev_attr_interference);
>
>
>
> ===========
>
--
Greetings Michael.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html