* [PATCH 0/2] mwifiex: manufacturing mode
@ 2016-06-30 15:01 Amitkumar Karwar
2016-06-30 15:01 ` [PATCH 1/2] mwifiex: add hostcmd wext ioctl support Amitkumar Karwar
2016-06-30 15:01 ` [PATCH 2/2] mwifiex: add manufacturing mode support Amitkumar Karwar
0 siblings, 2 replies; 5+ messages in thread
From: Amitkumar Karwar @ 2016-06-30 15:01 UTC (permalink / raw)
To: linux-wireless; +Cc: Nishant Sarmukadam, Cathy Luo, Amitkumar Karwar
This patch series adds support for loading the driver in manufacturing
mode. It's needed to perform certain factory tests.
Amitkumar Karwar (1):
mwifiex: add manufacturing mode support
Xinming Hu (1):
mwifiex: add hostcmd wext ioctl support
drivers/net/wireless/marvell/mwifiex/cmdevt.c | 67 ++++++++++++++++++++++++
drivers/net/wireless/marvell/mwifiex/init.c | 22 +++++---
drivers/net/wireless/marvell/mwifiex/main.c | 73 +++++++++++++++++++++++++--
drivers/net/wireless/marvell/mwifiex/main.h | 13 ++++-
drivers/net/wireless/marvell/mwifiex/pcie.c | 2 +-
drivers/net/wireless/marvell/mwifiex/sdio.c | 2 +-
drivers/net/wireless/marvell/mwifiex/usb.c | 2 +-
7 files changed, 166 insertions(+), 15 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] mwifiex: add hostcmd wext ioctl support
2016-06-30 15:01 [PATCH 0/2] mwifiex: manufacturing mode Amitkumar Karwar
@ 2016-06-30 15:01 ` Amitkumar Karwar
2016-06-30 17:49 ` kbuild test robot
2016-06-30 18:00 ` kbuild test robot
2016-06-30 15:01 ` [PATCH 2/2] mwifiex: add manufacturing mode support Amitkumar Karwar
1 sibling, 2 replies; 5+ messages in thread
From: Amitkumar Karwar @ 2016-06-30 15:01 UTC (permalink / raw)
To: linux-wireless
Cc: Nishant Sarmukadam, Cathy Luo, Xinming Hu, Amitkumar Karwar
From: Xinming Hu <huxm@marvell.com>
This patch adds ndo_ioctl support to mwifiex netdev handlers.
This will be used to download hostcmds to firmware from userspace.
This is needed for manufacturing mode support in mwifiex. ndo_ioctl
is allowed only when mfg mode is enabled via module load parameters.
Signed-off-by: Xinming Hu <huxm@marvell.com>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
---
drivers/net/wireless/marvell/mwifiex/cmdevt.c | 59 +++++++++++++++++++++++++++
drivers/net/wireless/marvell/mwifiex/main.c | 38 +++++++++++++++++
drivers/net/wireless/marvell/mwifiex/main.h | 9 +++-
3 files changed, 105 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
index c29f26d..fcfe556 100644
--- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
@@ -818,6 +818,8 @@ int mwifiex_process_cmdresp(struct mwifiex_adapter *adapter)
hostcmd = adapter->curr_cmd->data_buf;
hostcmd->len = size;
memcpy(hostcmd->cmd, resp, size);
+ adapter->hostcmd_resp_data.len = size;
+ memcpy(adapter->hostcmd_resp_data.cmd, resp, size);
}
}
orig_cmdresp_no = le16_to_cpu(resp->command);
@@ -1200,6 +1202,63 @@ mwifiex_process_hs_config(struct mwifiex_adapter *adapter)
false);
}
EXPORT_SYMBOL_GPL(mwifiex_process_hs_config);
+/* This function get hostcmd data from userspace and construct a cmd
+ * to be download to FW.
+ */
+int mwifiex_process_host_command(struct mwifiex_private *priv,
+ struct iwreq *wrq)
+{
+ struct mwifiex_ds_misc_cmd *hostcmd_buf;
+ struct host_cmd_ds_command *cmd;
+ struct mwifiex_adapter *adapter = priv->adapter;
+ int ret;
+
+ hostcmd_buf = kzalloc(sizeof(*hostcmd_buf), GFP_KERNEL);
+ if (!hostcmd_buf)
+ return -ENOMEM;
+
+ cmd = (void *)hostcmd_buf->cmd;
+
+ if (copy_from_user(cmd, wrq->u.data.pointer,
+ sizeof(cmd->command) + sizeof(cmd->size))) {
+ ret = -EFAULT;
+ goto done;
+ }
+
+ hostcmd_buf->len = le16_to_cpu(cmd->size);
+ if (hostcmd_buf->len > MWIFIEX_SIZE_OF_CMD_BUFFER) {
+ ret = -EINVAL;
+ goto done;
+ }
+
+ if (copy_from_user(cmd, wrq->u.data.pointer, hostcmd_buf->len)) {
+ ret = -EFAULT;
+ goto done;
+ }
+
+ if (mwifiex_send_cmd(priv, 0, 0, 0, hostcmd_buf, true)) {
+ dev_err(priv->adapter->dev, "Failed to process hostcmd\n");
+ ret = -EFAULT;
+ goto done;
+ }
+
+ if (adapter->hostcmd_resp_data.len > hostcmd_buf->len) {
+ ret = -EFBIG;
+ goto done;
+ }
+
+ if (copy_to_user(wrq->u.data.pointer, adapter->hostcmd_resp_data.cmd,
+ adapter->hostcmd_resp_data.len)) {
+ ret = -EFAULT;
+ goto done;
+ }
+ wrq->u.data.length = adapter->hostcmd_resp_data.len;
+
+ ret = 0;
+done:
+ kfree(hostcmd_buf);
+ return ret;
+}
/*
* This function handles the command response of a sleep confirm command.
diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
index 0e280f8..8b06d1d 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.c
+++ b/drivers/net/wireless/marvell/mwifiex/main.c
@@ -1211,17 +1211,54 @@ mwifiex_netdev_select_wmm_queue(struct net_device *dev, struct sk_buff *skb,
return mwifiex_1d_to_wmm_queue[skb->priority];
}
+static int mwifiex_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
+{
+ struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
+ struct iwreq *wrq = (struct iwreq *)req;
+ int ret;
+
+ if (!priv->adapter->mfg_mode)
+ return -EINVAL;
+
+ dev_dbg(priv->adapter->dev, "ioctl cmd = 0x%x\n", cmd);
+
+ switch (cmd) {
+ case MWIFIEX_HOSTCMD_IOCTL:
+ ret = mwifiex_process_host_command(priv, wrq);
+ break;
+ default:
+ ret = -EINVAL;
+ break;
+ }
+
+ return ret;
+}
+
/* Network device handlers */
static const struct net_device_ops mwifiex_netdev_ops = {
.ndo_open = mwifiex_open,
.ndo_stop = mwifiex_close,
.ndo_start_xmit = mwifiex_hard_start_xmit,
.ndo_set_mac_address = mwifiex_set_mac_address,
+ .ndo_do_ioctl = mwifiex_do_ioctl,
.ndo_validate_addr = eth_validate_addr,
.ndo_tx_timeout = mwifiex_tx_timeout,
.ndo_get_stats = mwifiex_get_stats,
.ndo_set_rx_mode = mwifiex_set_multicast_list,
.ndo_select_queue = mwifiex_netdev_select_wmm_queue,
+ };
+
+static const struct iw_priv_args mwifiex_iwpriv_args[] = {
+ { MWIFIEX_HOSTCMD_IOCTL,
+ IW_PRIV_TYPE_BYTE | 2047,
+ IW_PRIV_TYPE_BYTE | 2047,
+ "hostcmd"
+ },
+};
+
+static struct iw_handler_def mwifiex_iwpriv_handler_def = {
+ .num_private_args = ARRAY_SIZE(mwifiex_iwpriv_args),
+ .private_args = (struct iw_priv_args *)mwifiex_iwpriv_args,
};
/*
@@ -1249,6 +1286,7 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
{
dev->netdev_ops = &mwifiex_netdev_ops;
dev->destructor = free_netdev;
+ dev->wireless_handlers = &mwifiex_iwpriv_handler_def;
/* Initialize private structure */
priv->current_key_index = 0;
priv->media_connected = false;
diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h
index 9f6bb40..23532cf 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.h
+++ b/drivers/net/wireless/marvell/mwifiex/main.h
@@ -48,6 +48,8 @@
#include <linux/pm_runtime.h>
#include <linux/slab.h>
#include <linux/of_irq.h>
+#include <linux/wireless.h>
+#include <net/iw_handler.h>
#include "decl.h"
#include "ioctl.h"
@@ -157,6 +159,9 @@ enum {
/* Threshold for tx_timeout_cnt before we trigger a card reset */
#define TX_TIMEOUT_THRESHOLD 6
+/* IOCTL number used for hostcmd process*/
+#define MWIFIEX_HOSTCMD_IOCTL (SIOCIWFIRSTPRIV + 17)
+
#define MWIFIEX_DRV_INFO_SIZE_MAX 0x40000
/* Address alignment */
@@ -892,6 +897,7 @@ struct mwifiex_adapter {
u8 event_received;
u8 data_received;
u16 seq_num;
+ struct mwifiex_ds_misc_cmd hostcmd_resp_data;
struct cmd_ctrl_node *cmd_pool;
struct cmd_ctrl_node *curr_cmd;
/* spin lock for command */
@@ -1553,7 +1559,8 @@ bool mwifiex_is_bss_in_11ac_mode(struct mwifiex_private *priv);
u8 mwifiex_get_center_freq_index(struct mwifiex_private *priv, u8 band,
u32 pri_chan, u8 chan_bw);
int mwifiex_init_channel_scan_gap(struct mwifiex_adapter *adapter);
-
+int mwifiex_process_host_command(struct mwifiex_private *priv,
+ struct iwreq *wrq);
int mwifiex_tdls_check_tx(struct mwifiex_private *priv, struct sk_buff *skb);
void mwifiex_flush_auto_tdls_list(struct mwifiex_private *priv);
void mwifiex_auto_tdls_update_peer_status(struct mwifiex_private *priv,
--
1.9.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] mwifiex: add manufacturing mode support
2016-06-30 15:01 [PATCH 0/2] mwifiex: manufacturing mode Amitkumar Karwar
2016-06-30 15:01 ` [PATCH 1/2] mwifiex: add hostcmd wext ioctl support Amitkumar Karwar
@ 2016-06-30 15:01 ` Amitkumar Karwar
1 sibling, 0 replies; 5+ messages in thread
From: Amitkumar Karwar @ 2016-06-30 15:01 UTC (permalink / raw)
To: linux-wireless; +Cc: Nishant Sarmukadam, Cathy Luo, Amitkumar Karwar
By default normal mode is chosen when driver is loaded. This patch adds
a provision to choose manufacturing mode via module parameters.
Command to load driver in manufacturing mode
insmod mwifiex.ko mfg_mode=1 and mfg_firmware=mrvl/firmware.
Tested-by: chunfan chen <jeffc@marvell.com>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
---
drivers/net/wireless/marvell/mwifiex/cmdevt.c | 8 ++++++
drivers/net/wireless/marvell/mwifiex/init.c | 22 +++++++++++------
drivers/net/wireless/marvell/mwifiex/main.c | 35 ++++++++++++++++++++++++---
drivers/net/wireless/marvell/mwifiex/main.h | 4 +++
drivers/net/wireless/marvell/mwifiex/pcie.c | 2 +-
drivers/net/wireless/marvell/mwifiex/sdio.c | 2 +-
drivers/net/wireless/marvell/mwifiex/usb.c | 2 +-
7 files changed, 61 insertions(+), 14 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cmdevt.c b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
index fcfe556..d961305 100644
--- a/drivers/net/wireless/marvell/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/marvell/mwifiex/cmdevt.c
@@ -581,6 +581,14 @@ int mwifiex_send_cmd(struct mwifiex_private *priv, u16 cmd_no,
return -1;
}
}
+ /* We don't expect commands in manufacturing mode. They are cooked
+ * in application and ready to download buffer is passed to the driver
+ */
+ if (adapter->mfg_mode && cmd_no) {
+ dev_dbg(adapter->dev, "Ignoring commands in manufacturing mode\n");
+ return -1;
+ }
+
/* Get a new command node */
cmd_node = mwifiex_get_cmd_node(adapter);
diff --git a/drivers/net/wireless/marvell/mwifiex/init.c b/drivers/net/wireless/marvell/mwifiex/init.c
index 1489c90..82839d9 100644
--- a/drivers/net/wireless/marvell/mwifiex/init.c
+++ b/drivers/net/wireless/marvell/mwifiex/init.c
@@ -298,6 +298,7 @@ static void mwifiex_init_adapter(struct mwifiex_adapter *adapter)
memset(&adapter->arp_filter, 0, sizeof(adapter->arp_filter));
adapter->arp_filter_size = 0;
adapter->max_mgmt_ie_index = MAX_MGMT_IE_INDEX;
+ adapter->mfg_mode = mfg_mode;
adapter->key_api_major_ver = 0;
adapter->key_api_minor_ver = 0;
eth_broadcast_addr(adapter->perm_addr);
@@ -553,15 +554,22 @@ int mwifiex_init_fw(struct mwifiex_adapter *adapter)
return -1;
}
}
+ if (adapter->mfg_mode) {
+ adapter->hw_status = MWIFIEX_HW_STATUS_READY;
+ ret = -EINPROGRESS;
+ } else {
+ for (i = 0; i < adapter->priv_num; i++) {
+ if (adapter->priv[i]) {
+ ret = mwifiex_sta_init_cmd(adapter->priv[i],
+ first_sta, true);
+ if (ret == -1)
+ return -1;
+
+ first_sta = false;
+ }
+
- for (i = 0; i < adapter->priv_num; i++) {
- if (adapter->priv[i]) {
- ret = mwifiex_sta_init_cmd(adapter->priv[i], first_sta,
- true);
- if (ret == -1)
- return -1;
- first_sta = false;
}
}
diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c
index 8b06d1d..e3e1fe9 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.c
+++ b/drivers/net/wireless/marvell/mwifiex/main.c
@@ -36,6 +36,14 @@ static unsigned short driver_mode;
module_param(driver_mode, ushort, 0);
MODULE_PARM_DESC(driver_mode,
"station=0x1(default), ap-sta=0x3, station-p2p=0x5, ap-sta-p2p=0x7");
+bool mfg_mode;
+module_param(mfg_mode, bool, 0);
+MODULE_PARM_DESC(mfg_mode, "0:disable 1:enable (bool)");
+
+char *mfg_firmware = "";
+module_param(mfg_firmware, charp, 0);
+MODULE_PARM_DESC(mfg_firmware, "firmware path");
+
/*
* This function registers the device and performs all the necessary
@@ -559,10 +567,12 @@ static void mwifiex_fw_dpc(const struct firmware *firmware, void *context)
goto done;
}
/* Wait for mwifiex_init to complete */
- wait_event_interruptible(adapter->init_wait_q,
- adapter->init_wait_q_woken);
- if (adapter->hw_status != MWIFIEX_HW_STATUS_READY)
- goto err_init_fw;
+ if (!adapter->mfg_mode) {
+ wait_event_interruptible(adapter->init_wait_q,
+ adapter->init_wait_q_woken);
+ if (adapter->hw_status != MWIFIEX_HW_STATUS_READY)
+ goto err_init_fw;
+ }
priv = adapter->priv[MWIFIEX_BSS_ROLE_STA];
if (mwifiex_register_cfg80211(adapter)) {
@@ -666,6 +676,23 @@ static int mwifiex_init_hw_fw(struct mwifiex_adapter *adapter)
{
int ret;
+ if (mfg_mode && !strlen(mfg_firmware)) {
+ pr_err("%s: mfg firmware missing. Ignoring manufacturing mode\n",
+ __func__);
+ mfg_mode = false;
+ }
+
+ /* Override default firmware with manufacturing one if
+ * manufacturing mode is enabled
+ */
+ if (mfg_mode) {
+ if (strlcpy(adapter->fw_name, mfg_firmware,
+ sizeof(adapter->fw_name)) >=
+ sizeof(adapter->fw_name)) {
+ pr_err("%s: fw_name too long!\n", __func__);
+ return -1;
+ }
+ }
ret = request_firmware_nowait(THIS_MODULE, 1, adapter->fw_name,
adapter->dev, GFP_KERNEL, adapter,
mwifiex_fw_dpc);
diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h
index 23532cf..5713fe5 100644
--- a/drivers/net/wireless/marvell/mwifiex/main.h
+++ b/drivers/net/wireless/marvell/mwifiex/main.h
@@ -60,6 +60,9 @@
#include "sdio.h"
extern const char driver_version[];
+extern bool mfg_mode;
+extern char *mfg_firmware;
+
struct mwifiex_adapter;
struct mwifiex_private;
@@ -995,6 +998,7 @@ struct mwifiex_adapter {
u32 drv_info_size;
bool scan_chan_gap_enabled;
struct sk_buff_head rx_data_q;
+ bool mfg_mode;
struct mwifiex_chan_stats *chan_stats;
u32 num_in_chan_stats;
int survey_idx;
diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c
index 1b1e266..e15c483 100644
--- a/drivers/net/wireless/marvell/mwifiex/pcie.c
+++ b/drivers/net/wireless/marvell/mwifiex/pcie.c
@@ -226,7 +226,7 @@ static void mwifiex_pcie_remove(struct pci_dev *pdev)
if (!adapter || !adapter->priv_num)
return;
- if (user_rmmod) {
+ if (user_rmmod && !adapter->mfg_mode) {
#ifdef CONFIG_PM_SLEEP
if (adapter->is_suspended)
mwifiex_pcie_resume(&pdev->dev);
diff --git a/drivers/net/wireless/marvell/mwifiex/sdio.c b/drivers/net/wireless/marvell/mwifiex/sdio.c
index d3e1561..6dba409 100644
--- a/drivers/net/wireless/marvell/mwifiex/sdio.c
+++ b/drivers/net/wireless/marvell/mwifiex/sdio.c
@@ -289,7 +289,7 @@ mwifiex_sdio_remove(struct sdio_func *func)
mwifiex_dbg(adapter, INFO, "info: SDIO func num=%d\n", func->num);
- if (user_rmmod) {
+ if (user_rmmod && !adapter->mfg_mode) {
if (adapter->is_suspended)
mwifiex_sdio_resume(adapter->dev);
diff --git a/drivers/net/wireless/marvell/mwifiex/usb.c b/drivers/net/wireless/marvell/mwifiex/usb.c
index 0857575..ba616ec 100644
--- a/drivers/net/wireless/marvell/mwifiex/usb.c
+++ b/drivers/net/wireless/marvell/mwifiex/usb.c
@@ -611,7 +611,7 @@ static void mwifiex_usb_disconnect(struct usb_interface *intf)
if (!adapter->priv_num)
return;
- if (user_rmmod) {
+ if (user_rmmod && !adapter->mfg_mode) {
#ifdef CONFIG_PM
if (adapter->is_suspended)
mwifiex_usb_resume(intf);
--
1.9.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] mwifiex: add hostcmd wext ioctl support
2016-06-30 15:01 ` [PATCH 1/2] mwifiex: add hostcmd wext ioctl support Amitkumar Karwar
@ 2016-06-30 17:49 ` kbuild test robot
2016-06-30 18:00 ` kbuild test robot
1 sibling, 0 replies; 5+ messages in thread
From: kbuild test robot @ 2016-06-30 17:49 UTC (permalink / raw)
To: Amitkumar Karwar
Cc: kbuild-all, linux-wireless, Nishant Sarmukadam, Cathy Luo,
Xinming Hu, Amitkumar Karwar
[-- Attachment #1: Type: text/plain, Size: 4998 bytes --]
Hi,
[auto build test ERROR on wireless-drivers-next/master]
[also build test ERROR on v4.7-rc5 next-20160630]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Amitkumar-Karwar/mwifiex-add-hostcmd-wext-ioctl-support/20160630-231444
base: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master
config: arm-at91_dt_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 5.3.1-8) 5.3.1 20160205
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=arm
All error/warnings (new ones prefixed by >>):
drivers/net/wireless/marvell/mwifiex/main.c: In function 'mwifiex_do_ioctl':
drivers/net/wireless/marvell/mwifiex/main.c:1220:20: error: 'struct mwifiex_adapter' has no member named 'mfg_mode'
if (!priv->adapter->mfg_mode)
^
drivers/net/wireless/marvell/mwifiex/main.c: At top level:
>> drivers/net/wireless/marvell/mwifiex/main.c:1260:2: error: unknown field 'num_private_args' specified in initializer
.num_private_args = ARRAY_SIZE(mwifiex_iwpriv_args),
^
In file included from drivers/net/wireless/marvell/mwifiex/main.h:23:0,
from drivers/net/wireless/marvell/mwifiex/main.c:20:
>> include/linux/kernel.h:54:25: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^
>> drivers/net/wireless/marvell/mwifiex/main.c:1260:22: note: in expansion of macro 'ARRAY_SIZE'
.num_private_args = ARRAY_SIZE(mwifiex_iwpriv_args),
^
include/linux/kernel.h:54:25: note: (near initialization for 'mwifiex_iwpriv_handler_def.standard')
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^
>> drivers/net/wireless/marvell/mwifiex/main.c:1260:22: note: in expansion of macro 'ARRAY_SIZE'
.num_private_args = ARRAY_SIZE(mwifiex_iwpriv_args),
^
>> drivers/net/wireless/marvell/mwifiex/main.c:1261:2: error: unknown field 'private_args' specified in initializer
.private_args = (struct iw_priv_args *)mwifiex_iwpriv_args,
^
>> drivers/net/wireless/marvell/mwifiex/main.c:1261:18: warning: initialization makes integer from pointer without a cast [-Wint-conversion]
.private_args = (struct iw_priv_args *)mwifiex_iwpriv_args,
^
drivers/net/wireless/marvell/mwifiex/main.c:1261:18: note: (near initialization for 'mwifiex_iwpriv_handler_def.num_standard')
>> drivers/net/wireless/marvell/mwifiex/main.c:1261:18: error: initializer element is not computable at load time
drivers/net/wireless/marvell/mwifiex/main.c:1261:18: note: (near initialization for 'mwifiex_iwpriv_handler_def.num_standard')
vim +/num_private_args +1260 drivers/net/wireless/marvell/mwifiex/main.c
1214 static int mwifiex_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
1215 {
1216 struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
1217 struct iwreq *wrq = (struct iwreq *)req;
1218 int ret;
1219
> 1220 if (!priv->adapter->mfg_mode)
1221 return -EINVAL;
1222
1223 dev_dbg(priv->adapter->dev, "ioctl cmd = 0x%x\n", cmd);
1224
1225 switch (cmd) {
1226 case MWIFIEX_HOSTCMD_IOCTL:
1227 ret = mwifiex_process_host_command(priv, wrq);
1228 break;
1229 default:
1230 ret = -EINVAL;
1231 break;
1232 }
1233
1234 return ret;
1235 }
1236
1237 /* Network device handlers */
1238 static const struct net_device_ops mwifiex_netdev_ops = {
1239 .ndo_open = mwifiex_open,
1240 .ndo_stop = mwifiex_close,
1241 .ndo_start_xmit = mwifiex_hard_start_xmit,
1242 .ndo_set_mac_address = mwifiex_set_mac_address,
1243 .ndo_do_ioctl = mwifiex_do_ioctl,
1244 .ndo_validate_addr = eth_validate_addr,
1245 .ndo_tx_timeout = mwifiex_tx_timeout,
1246 .ndo_get_stats = mwifiex_get_stats,
1247 .ndo_set_rx_mode = mwifiex_set_multicast_list,
1248 .ndo_select_queue = mwifiex_netdev_select_wmm_queue,
1249 };
1250
1251 static const struct iw_priv_args mwifiex_iwpriv_args[] = {
1252 { MWIFIEX_HOSTCMD_IOCTL,
1253 IW_PRIV_TYPE_BYTE | 2047,
1254 IW_PRIV_TYPE_BYTE | 2047,
1255 "hostcmd"
1256 },
1257 };
1258
1259 static struct iw_handler_def mwifiex_iwpriv_handler_def = {
> 1260 .num_private_args = ARRAY_SIZE(mwifiex_iwpriv_args),
> 1261 .private_args = (struct iw_priv_args *)mwifiex_iwpriv_args,
1262 };
1263
1264 /*
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 21340 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] mwifiex: add hostcmd wext ioctl support
2016-06-30 15:01 ` [PATCH 1/2] mwifiex: add hostcmd wext ioctl support Amitkumar Karwar
2016-06-30 17:49 ` kbuild test robot
@ 2016-06-30 18:00 ` kbuild test robot
1 sibling, 0 replies; 5+ messages in thread
From: kbuild test robot @ 2016-06-30 18:00 UTC (permalink / raw)
To: Amitkumar Karwar
Cc: kbuild-all, linux-wireless, Nishant Sarmukadam, Cathy Luo,
Xinming Hu, Amitkumar Karwar
[-- Attachment #1: Type: text/plain, Size: 5072 bytes --]
Hi,
[auto build test ERROR on wireless-drivers-next/master]
[also build test ERROR on v4.7-rc5 next-20160630]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Amitkumar-Karwar/mwifiex-add-hostcmd-wext-ioctl-support/20160630-231444
base: https://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git master
config: arm-exynos_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 5.3.1-8) 5.3.1 20160205
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=arm
All errors (new ones prefixed by >>):
drivers/net/wireless/marvell/mwifiex/main.c: In function 'mwifiex_do_ioctl':
drivers/net/wireless/marvell/mwifiex/main.c:1220:20: error: 'struct mwifiex_adapter' has no member named 'mfg_mode'
if (!priv->adapter->mfg_mode)
^
drivers/net/wireless/marvell/mwifiex/main.c: At top level:
drivers/net/wireless/marvell/mwifiex/main.c:1260:2: error: unknown field 'num_private_args' specified in initializer
.num_private_args = ARRAY_SIZE(mwifiex_iwpriv_args),
^
In file included from drivers/net/wireless/marvell/mwifiex/main.h:23:0,
from drivers/net/wireless/marvell/mwifiex/main.c:20:
include/linux/kernel.h:54:25: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^
drivers/net/wireless/marvell/mwifiex/main.c:1260:22: note: in expansion of macro 'ARRAY_SIZE'
.num_private_args = ARRAY_SIZE(mwifiex_iwpriv_args),
^
include/linux/kernel.h:54:25: note: (near initialization for 'mwifiex_iwpriv_handler_def.standard')
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
^
drivers/net/wireless/marvell/mwifiex/main.c:1260:22: note: in expansion of macro 'ARRAY_SIZE'
.num_private_args = ARRAY_SIZE(mwifiex_iwpriv_args),
^
drivers/net/wireless/marvell/mwifiex/main.c:1261:2: error: unknown field 'private_args' specified in initializer
.private_args = (struct iw_priv_args *)mwifiex_iwpriv_args,
^
drivers/net/wireless/marvell/mwifiex/main.c:1261:18: warning: initialization makes integer from pointer without a cast [-Wint-conversion]
.private_args = (struct iw_priv_args *)mwifiex_iwpriv_args,
^
drivers/net/wireless/marvell/mwifiex/main.c:1261:18: note: (near initialization for 'mwifiex_iwpriv_handler_def.num_standard')
drivers/net/wireless/marvell/mwifiex/main.c:1261:18: error: initializer element is not computable at load time
drivers/net/wireless/marvell/mwifiex/main.c:1261:18: note: (near initialization for 'mwifiex_iwpriv_handler_def.num_standard')
drivers/net/wireless/marvell/mwifiex/main.c: In function 'mwifiex_init_priv_params':
>> drivers/net/wireless/marvell/mwifiex/main.c:1289:5: error: 'struct net_device' has no member named 'wireless_handlers'
dev->wireless_handlers = &mwifiex_iwpriv_handler_def;
^
vim +1289 drivers/net/wireless/marvell/mwifiex/main.c
1255 "hostcmd"
1256 },
1257 };
1258
1259 static struct iw_handler_def mwifiex_iwpriv_handler_def = {
1260 .num_private_args = ARRAY_SIZE(mwifiex_iwpriv_args),
> 1261 .private_args = (struct iw_priv_args *)mwifiex_iwpriv_args,
1262 };
1263
1264 /*
1265 * This function initializes the private structure parameters.
1266 *
1267 * The following wait queues are initialized -
1268 * - IOCTL wait queue
1269 * - Command wait queue
1270 * - Statistics wait queue
1271 *
1272 * ...and the following default parameters are set -
1273 * - Current key index : Set to 0
1274 * - Rate index : Set to auto
1275 * - Media connected : Set to disconnected
1276 * - Adhoc link sensed : Set to false
1277 * - Nick name : Set to null
1278 * - Number of Tx timeout : Set to 0
1279 * - Device address : Set to current address
1280 * - Rx histogram statistc : Set to 0
1281 *
1282 * In addition, the CFG80211 work queue is also created.
1283 */
1284 void mwifiex_init_priv_params(struct mwifiex_private *priv,
1285 struct net_device *dev)
1286 {
1287 dev->netdev_ops = &mwifiex_netdev_ops;
1288 dev->destructor = free_netdev;
> 1289 dev->wireless_handlers = &mwifiex_iwpriv_handler_def;
1290 /* Initialize private structure */
1291 priv->current_key_index = 0;
1292 priv->media_connected = false;
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 24961 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-06-30 18:02 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-30 15:01 [PATCH 0/2] mwifiex: manufacturing mode Amitkumar Karwar
2016-06-30 15:01 ` [PATCH 1/2] mwifiex: add hostcmd wext ioctl support Amitkumar Karwar
2016-06-30 17:49 ` kbuild test robot
2016-06-30 18:00 ` kbuild test robot
2016-06-30 15:01 ` [PATCH 2/2] mwifiex: add manufacturing mode support Amitkumar Karwar
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.