Hi Kalle,
        
> From: Amitkumar Karwar [mailto:[email protected]]
> Sent: Friday, April 29, 2016 9:28 PM
> To: [email protected]
> Cc: Jeff CF Chen; Amitkumar Karwar
> Subject: [PATCH] mwifiex: handle edmac vendor command
> 
> From: chunfan chen <[email protected]>
> 
> Userspace can configure edmac values through a custom vendor command.
> They will be used by hardware for adaptivity.
> 
> Signed-off-by: chunfan chen <[email protected]>
> Signed-off-by: Amitkumar Karwar <[email protected]>
> ---
>  drivers/net/wireless/marvell/mwifiex/Makefile   |  1 +
>  drivers/net/wireless/marvell/mwifiex/cfg80211.c |  2 +
>  drivers/net/wireless/marvell/mwifiex/main.h     |  4 ++
>  drivers/net/wireless/marvell/mwifiex/sta_cmd.c  | 20 ++++++---
>  drivers/net/wireless/marvell/mwifiex/vendor.c   | 59
> +++++++++++++++++++++++++
>  drivers/net/wireless/marvell/mwifiex/vendor.h   | 27 +++++++++++
>  6 files changed, 108 insertions(+), 5 deletions(-)  create mode 100644
> drivers/net/wireless/marvell/mwifiex/vendor.c
>  create mode 100644 drivers/net/wireless/marvell/mwifiex/vendor.h
> 
> diff --git a/drivers/net/wireless/marvell/mwifiex/Makefile
> b/drivers/net/wireless/marvell/mwifiex/Makefile
> index fdfd9bf..8b34ce9 100644
> --- a/drivers/net/wireless/marvell/mwifiex/Makefile
> +++ b/drivers/net/wireless/marvell/mwifiex/Makefile
> @@ -42,6 +42,7 @@ mwifiex-y += cfg80211.o  mwifiex-y += ethtool.o
> mwifiex-y += 11h.o  mwifiex-y += tdls.o
> +mwifiex-y += vendor.o
>  mwifiex-$(CONFIG_DEBUG_FS) += debugfs.o
>  obj-$(CONFIG_MWIFIEX) += mwifiex.o
> 
> diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> index ff948a9..00aca7e 100644
> --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
> @@ -4118,6 +4118,8 @@ int mwifiex_register_cfg80211(struct
> mwifiex_adapter *adapter)
>       if (adapter->fw_api_ver == MWIFIEX_FW_V15)
>               wiphy->features |= NL80211_FEATURE_SK_TX_STATUS;
> 
> +     marvell_set_vendor_commands(wiphy);
> +
>       /* Reserve space for mwifiex specific private data for BSS */
>       wiphy->bss_priv_size = sizeof(struct mwifiex_bss_priv);
> 
> diff --git a/drivers/net/wireless/marvell/mwifiex/main.h
> b/drivers/net/wireless/marvell/mwifiex/main.h
> index 0207af0..66ba5c0 100644
> --- a/drivers/net/wireless/marvell/mwifiex/main.h
> +++ b/drivers/net/wireless/marvell/mwifiex/main.h
> @@ -1002,6 +1002,8 @@ struct mwifiex_adapter {
>       bool usb_mc_status;
>       bool usb_mc_setup;
>       struct cfg80211_wowlan_nd_info *nd_info;
> +     u8 *cfg_data;
> +     int cfg_len;
>  };
> 
>  void mwifiex_process_tx_queue(struct mwifiex_adapter *adapter); @@ -
> 1614,6 +1616,8 @@ void mwifiex_process_multi_chan_event(struct
> mwifiex_private *priv,
>                                     struct sk_buff *event_skb);
>  void mwifiex_multi_chan_resync(struct mwifiex_adapter *adapter);
> 
> +void marvell_set_vendor_commands(struct wiphy *wiphy);
> +
>  #ifdef CONFIG_DEBUG_FS
>  void mwifiex_debugfs_init(void);
>  void mwifiex_debugfs_remove(void);
> diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
> b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
> index e436574..6b8cc39 100644
> --- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
> +++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
> @@ -1487,9 +1487,10 @@ static int mwifiex_cmd_cfg_data(struct
> mwifiex_private *priv,  {
>       struct mwifiex_adapter *adapter = priv->adapter;
>       struct property *prop = data_buf;
> -     u32 len;
> +     u32 len = 0;
>       u8 *data = (u8 *)cmd + S_DS_GEN;
>       int ret;
> +     const struct firmware *cal_data = adapter->cal_data;
> 
>       if (prop) {
>               len = prop->length;
> @@ -1500,11 +1501,20 @@ static int mwifiex_cmd_cfg_data(struct
> mwifiex_private *priv,
>               mwifiex_dbg(adapter, INFO,
>                           "download cfg_data from device tree: %s\n",
>                           prop->name);
> -     } else if (adapter->cal_data->data && adapter->cal_data->size > 0)
> {
> -             len = mwifiex_parse_cal_cfg((u8 *)adapter->cal_data->data,
> -                                         adapter->cal_data->size, data);
> +     } else if (cal_data) {
> +             if (cal_data->data && cal_data->size > 0) {
> +                     len = mwifiex_parse_cal_cfg((u8 *)cal_data->data,
> +                                                 cal_data->size, data);
> +                     mwifiex_dbg(adapter, INFO,
> +                                 "download cfg_data from config file\n");
> +             } else {
> +                     return -1;
> +             }
> +     } else if (adapter->cfg_data && adapter->cfg_len > 0) {
> +             len = mwifiex_parse_cal_cfg(adapter->cfg_data,
> +                                         adapter->cfg_len, data);
>               mwifiex_dbg(adapter, INFO,
> -                         "download cfg_data from config file\n");
> +                         "download cfg_data from iw vendor command\n");
>       } else {
>               return -1;
>       }
> diff --git a/drivers/net/wireless/marvell/mwifiex/vendor.c
> b/drivers/net/wireless/marvell/mwifiex/vendor.c
> new file mode 100644
> index 0000000..ecdc10c
> --- /dev/null
> +++ b/drivers/net/wireless/marvell/mwifiex/vendor.c
> @@ -0,0 +1,59 @@
> +/* Marvell Wireless LAN device driver: TDLS handling
> + *
> + * Copyright (C) 2014, Marvell International Ltd.
> + *
> + * This software file (the "File") is distributed by Marvell
> +International
> + * Ltd. under the terms of the GNU General Public License Version 2,
> +June 1991
> + * (the "License").  You may use, redistribute and/or modify this File
> +in
> + * accordance with the terms and conditions of the License, a copy of
> +which
> + * is available on the worldwide web at
> + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
> + *
> + * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
> +PURPOSE
> + * ARE EXPRESSLY DISCLAIMED.  The License provides additional details
> +about
> + * this warranty disclaimer.
> + */
> +
> +#include <net/mac80211.h>
> +#include <net/netlink.h>
> +#include "vendor.h"
> +#include "main.h"
> +
> +static int
> +mwifiex_vendor_cmd_set_edmac_data(struct wiphy *wiphy,
> +                               struct wireless_dev *wdev,
> +                               const void *data, int data_len)
> +{
> +     struct mwifiex_private *priv = mwifiex_netdev_get_priv(wdev-
> >netdev);
> +     int ret;
> +
> +     priv->adapter->cfg_data = (u8 *)data;
> +     priv->adapter->cfg_len = data_len;
> +
> +     ret = mwifiex_send_cmd(priv, HostCmd_CMD_CFG_DATA,
> +                            HostCmd_ACT_GEN_SET, 0, NULL, true);
> +
> +     priv->adapter->cfg_data = NULL;
> +     priv->adapter->cfg_len = 0;
> +
> +     return 0;
> +}
> +
> +static const struct wiphy_vendor_command marvell_vendor_commands[] = {
> +     {
> +             .info = {
> +                     .vendor_id = MARVELL_OUI,
> +                     .subcmd = MARVELL_VENDOR_CMD_SET_EDMAC_DATA,
> +             },
> +             .flags = WIPHY_VENDOR_CMD_NEED_NETDEV |
> +                      WIPHY_VENDOR_CMD_NEED_RUNNING,
> +             .doit = mwifiex_vendor_cmd_set_edmac_data,
> +     },
> +};
> +
> +void marvell_set_vendor_commands(struct wiphy *wiphy) {
> +     wiphy->vendor_commands = marvell_vendor_commands;
> +     wiphy->n_vendor_commands = ARRAY_SIZE(marvell_vendor_commands);
> +}
> diff --git a/drivers/net/wireless/marvell/mwifiex/vendor.h
> b/drivers/net/wireless/marvell/mwifiex/vendor.h
> new file mode 100644
> index 0000000..e5d6fe8
> --- /dev/null
> +++ b/drivers/net/wireless/marvell/mwifiex/vendor.h
> @@ -0,0 +1,27 @@
> +/* Marvell Wireless LAN device driver: TDLS handling
> + *
> + * Copyright (C) 2014, Marvell International Ltd.
> + *
> + * This software file (the "File") is distributed by Marvell
> +International
> + * Ltd. under the terms of the GNU General Public License Version 2,
> +June 1991
> + * (the "License").  You may use, redistribute and/or modify this File
> +in
> + * accordance with the terms and conditions of the License, a copy of
> +which
> + * is available on the worldwide web at
> + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
> + *
> + * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
> +PURPOSE
> + * ARE EXPRESSLY DISCLAIMED.  The License provides additional details
> +about
> + * this warranty disclaimer.
> + */
> +
> +#ifndef __MARVELL_VENDOR_H__
> +#define __MARVELL_VENDOR_H__
> +
> +#define MARVELL_OUI  0x005043
> +
> +enum marvell_vendor_commands {
> +     MARVELL_VENDOR_CMD_SET_EDMAC_DATA,
> +};
> +
> +#endif /* __MARVELL_VENDOR_H__ */
> --

This patch seems to have deferred.
We basically want a way to download a vendor specific configuration to our 
firmware.
Do you have any suggestions on how can achieve this in better way?

I can see below iw command suits our requirement.

iw dev <devname> vendor send <oui> <subcmd> <filename|-|hex data>

Please guide.

Regards,
Amitkumar
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to