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.
_______________________________________________
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to