[rt2x00-users] [RFC/RFT 1/8] rt2x00: Introduce concept of driver data in struct rt2x00_dev.

Helmut Schaa helmut.schaa at googlemail.com
Mon Jan 30 19:36:18 AEDT 2012


Hi Gertjan,

no objection to this patch :) in general, but in the long term we might
also consider a driver split like iwlwifi did some time ago. Something
like rt2x00_legacy (everything till rt61pci & rt73usb) vs rt2x00 (rt2800
and later).

This would also help to remove some complexity introduced due
to the differences between different chipsets ...

Helmut

On Sun, Jan 29, 2012 at 5:59 PM, Gertjan van Wingerde
<gwingerde at gmail.com> wrote:
> We are getting more and more fields in struct rt2x00_dev that are
> specific to one or two of the low-level drivers. Instead of putting
> these fields inside the main structure and thus clobbering all low-level
> drivers with these fields, introduce the concept of driver data inside
> struct rt2x00_dev, whose size is indicated by the low-level driver and
> which can be populated by the low-level driver.
>
> Signed-off-by: Gertjan van Wingerde <gwingerde at gmail.com>
> ---
>  drivers/net/wireless/rt2x00/rt2x00.h    |    6 ++++++
>  drivers/net/wireless/rt2x00/rt2x00dev.c |   18 ++++++++++++++++++
>  2 files changed, 24 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
> index b03b22c..b4260bfb6 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00.h
> +++ b/drivers/net/wireless/rt2x00/rt2x00.h
> @@ -647,6 +647,7 @@ struct rt2x00lib_ops {
>  */
>  struct rt2x00_ops {
>        const char *name;
> +       const unsigned int drv_data_size;
>        const unsigned int max_sta_intf;
>        const unsigned int max_ap_intf;
>        const unsigned int eeprom_size;
> @@ -742,6 +743,11 @@ struct rt2x00_dev {
>        const struct rt2x00_ops *ops;
>
>        /*
> +        * Driver data.
> +        */
> +       void *drv_data;
> +
> +       /*
>         * IEEE80211 control structure.
>         */
>        struct ieee80211_hw *hw;
> diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
> index c3e1aa7..bae5b01 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00dev.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
> @@ -1121,6 +1121,18 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
>  {
>        int retval = -ENOMEM;
>
> +       /*
> +        * Allocate the driver data memory, if necessary.
> +        */
> +       if (rt2x00dev->ops->drv_data_size > 0) {
> +               rt2x00dev->drv_data = kzalloc(rt2x00dev->ops->drv_data_size,
> +                                             GFP_KERNEL);
> +               if (!rt2x00dev->drv_data) {
> +                       retval = -ENOMEM;
> +                       goto exit;
> +               }
> +       }
> +
>        spin_lock_init(&rt2x00dev->irqmask_lock);
>        mutex_init(&rt2x00dev->csr_mutex);
>
> @@ -1261,6 +1273,12 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
>         * Free queue structures.
>         */
>        rt2x00queue_free(rt2x00dev);
> +
> +       /*
> +        * Free the driver data.
> +        */
> +       if (rt2x00dev->drv_data)
> +               kfree(rt2x00dev->drv_data);
>  }
>  EXPORT_SYMBOL_GPL(rt2x00lib_remove_dev);
>
> --
> 1.7.7.4
>
>
> _______________________________________________
> users mailing list
> users at rt2x00.serialmonkey.com
> http://rt2x00.serialmonkey.com/mailman/listinfo/users_rt2x00.serialmonkey.com




More information about the users mailing list