> From: Prasun Maiti [mailto:prasunmait...@gmail.com]
> Sent: Monday, June 27, 2016 3:43 PM
> To: Amitkumar Karwar
> Cc: Nishant Sarmukadam; Linux Wireless; Linux Next; Linux Kernel; Kalle
> Valo
> Subject: [PATCH v4] mwifiex: Reduce endian conversion for REG Host
> Commands
> 
> For multiple REG Host Commands (e.g HostCmd_CMD_802_11_EEPROM_ACCESS,
> HostCmd_CMD_MAC_REG_ACCESS etc.) "cpu_to_leX"-converted values are saved
> to driver. So, "leX_to_cpu" conversion is required too many times
> afterwards in driver.
> 
> This patch reduces the endian: conversion without saving "cpu_to_leX"
> converted values in driver. This will convert endianness in prepare
> command and command response path.
> 
> Signed-off-by: Prasun Maiti <prasunmait...@gmail.com>
> ---
> Changes in v3:
>       - Fixed the following warnings:
>       * sta_ioctl.c:1339:34: warning: comparison of distinct pointer
> types lacks a cast [enabled by default]
>       * sta_cmdresp.c:821:6: warning: comparison of distinct pointer
> types lacks a cast [enabled by default]
> 
> Changes in v4:
>       - Fixed the sparse compilation warnings:
>       * warning: cast from restricted __le32
>       * warning: cast from restricted __le16
> 
>  drivers/net/wireless/marvell/mwifiex/ioctl.h       | 10 +++---
>  drivers/net/wireless/marvell/mwifiex/sta_cmd.c     | 28 +++++++--------
> -
>  drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c | 37 +++++++++++----
> -------
>  drivers/net/wireless/marvell/mwifiex/sta_ioctl.c   | 21 ++++++------
>  4 files changed, 46 insertions(+), 50 deletions(-)
> 
> diff --git a/drivers/net/wireless/marvell/mwifiex/ioctl.h
> b/drivers/net/wireless/marvell/mwifiex/ioctl.h
> index a5a48c1..4ce9330 100644
> --- a/drivers/net/wireless/marvell/mwifiex/ioctl.h
> +++ b/drivers/net/wireless/marvell/mwifiex/ioctl.h
> @@ -341,16 +341,16 @@ enum {
>  };
> 
>  struct mwifiex_ds_reg_rw {
> -     __le32 type;
> -     __le32 offset;
> -     __le32 value;
> +     u32 type;
> +     u32 offset;
> +     u32 value;
>  };
> 
>  #define MAX_EEPROM_DATA 256
> 
>  struct mwifiex_ds_read_eeprom {
> -     __le16 offset;
> -     __le16 byte_count;
> +     u16 offset;
> +     u16 byte_count;
>       u8 value[MAX_EEPROM_DATA];
>  };
> 
> diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
> b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
> index e436574..9df02ba 100644
> --- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
> +++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c
> @@ -1130,9 +1130,8 @@ static int mwifiex_cmd_reg_access(struct
> host_cmd_ds_command *cmd,
>               cmd->size = cpu_to_le16(sizeof(*mac_reg) + S_DS_GEN);
>               mac_reg = &cmd->params.mac_reg;
>               mac_reg->action = cpu_to_le16(cmd_action);
> -             mac_reg->offset =
> -                     cpu_to_le16((u16) le32_to_cpu(reg_rw->offset));
> -             mac_reg->value = reg_rw->value;
> +             mac_reg->offset = cpu_to_le16((u16) reg_rw->offset);
> +             mac_reg->value = cpu_to_le32(reg_rw->value);
>               break;
>       }
>       case HostCmd_CMD_BBP_REG_ACCESS:
> @@ -1142,9 +1141,8 @@ static int mwifiex_cmd_reg_access(struct
> host_cmd_ds_command *cmd,
>               cmd->size = cpu_to_le16(sizeof(*bbp_reg) + S_DS_GEN);
>               bbp_reg = &cmd->params.bbp_reg;
>               bbp_reg->action = cpu_to_le16(cmd_action);
> -             bbp_reg->offset =
> -                     cpu_to_le16((u16) le32_to_cpu(reg_rw->offset));
> -             bbp_reg->value = (u8) le32_to_cpu(reg_rw->value);
> +             bbp_reg->offset = cpu_to_le16((u16) reg_rw->offset);
> +             bbp_reg->value = (u8) reg_rw->value;
>               break;
>       }
>       case HostCmd_CMD_RF_REG_ACCESS:
> @@ -1154,8 +1152,8 @@ static int mwifiex_cmd_reg_access(struct
> host_cmd_ds_command *cmd,
>               cmd->size = cpu_to_le16(sizeof(*rf_reg) + S_DS_GEN);
>               rf_reg = &cmd->params.rf_reg;
>               rf_reg->action = cpu_to_le16(cmd_action);
> -             rf_reg->offset = cpu_to_le16((u16) le32_to_cpu(reg_rw-
> >offset));
> -             rf_reg->value = (u8) le32_to_cpu(reg_rw->value);
> +             rf_reg->offset = cpu_to_le16((u16) reg_rw->offset);
> +             rf_reg->value = (u8) reg_rw->value;
>               break;
>       }
>       case HostCmd_CMD_PMIC_REG_ACCESS:
> @@ -1165,9 +1163,8 @@ static int mwifiex_cmd_reg_access(struct
> host_cmd_ds_command *cmd,
>               cmd->size = cpu_to_le16(sizeof(*pmic_reg) + S_DS_GEN);
>               pmic_reg = &cmd->params.pmic_reg;
>               pmic_reg->action = cpu_to_le16(cmd_action);
> -             pmic_reg->offset =
> -                             cpu_to_le16((u16) le32_to_cpu(reg_rw->offset));
> -             pmic_reg->value = (u8) le32_to_cpu(reg_rw->value);
> +             pmic_reg->offset = cpu_to_le16((u16) reg_rw->offset);
> +             pmic_reg->value = (u8) reg_rw->value;
>               break;
>       }
>       case HostCmd_CMD_CAU_REG_ACCESS:
> @@ -1177,9 +1174,8 @@ static int mwifiex_cmd_reg_access(struct
> host_cmd_ds_command *cmd,
>               cmd->size = cpu_to_le16(sizeof(*cau_reg) + S_DS_GEN);
>               cau_reg = &cmd->params.rf_reg;
>               cau_reg->action = cpu_to_le16(cmd_action);
> -             cau_reg->offset =
> -                             cpu_to_le16((u16) le32_to_cpu(reg_rw->offset));
> -             cau_reg->value = (u8) le32_to_cpu(reg_rw->value);
> +             cau_reg->offset = cpu_to_le16((u16) reg_rw->offset);
> +             cau_reg->value = (u8) reg_rw->value;
>               break;
>       }
>       case HostCmd_CMD_802_11_EEPROM_ACCESS:
> @@ -1190,8 +1186,8 @@ static int mwifiex_cmd_reg_access(struct
> host_cmd_ds_command *cmd,
> 
>               cmd->size = cpu_to_le16(sizeof(*cmd_eeprom) + S_DS_GEN);
>               cmd_eeprom->action = cpu_to_le16(cmd_action);
> -             cmd_eeprom->offset = rd_eeprom->offset;
> -             cmd_eeprom->byte_count = rd_eeprom->byte_count;
> +             cmd_eeprom->offset = cpu_to_le16(rd_eeprom->offset);
> +             cmd_eeprom->byte_count = cpu_to_le16(rd_eeprom->byte_count);
>               cmd_eeprom->value = 0;
>               break;
>       }
> diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
> b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
> index d18c797..1832511 100644
> --- a/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
> +++ b/drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c
> @@ -781,45 +781,44 @@ static int mwifiex_ret_reg_access(u16 type, struct
> host_cmd_ds_command *resp,
>       switch (type) {
>       case HostCmd_CMD_MAC_REG_ACCESS:
>               r.mac = &resp->params.mac_reg;
> -             reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.mac-
> >offset));
> -             reg_rw->value = r.mac->value;
> +             reg_rw->offset = (u32) le16_to_cpu(r.mac->offset);
> +             reg_rw->value = le32_to_cpu(r.mac->value);
>               break;
>       case HostCmd_CMD_BBP_REG_ACCESS:
>               r.bbp = &resp->params.bbp_reg;
> -             reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.bbp-
> >offset));
> -             reg_rw->value = cpu_to_le32((u32) r.bbp->value);
> +             reg_rw->offset = (u32) le16_to_cpu(r.bbp->offset);
> +             reg_rw->value = (u32) r.bbp->value;
>               break;
> 
>       case HostCmd_CMD_RF_REG_ACCESS:
>               r.rf = &resp->params.rf_reg;
> -             reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.rf-
> >offset));
> -             reg_rw->value = cpu_to_le32((u32) r.bbp->value);
> +             reg_rw->offset = (u32) le16_to_cpu(r.rf->offset);
> +             reg_rw->value = (u32) r.bbp->value;
>               break;
>       case HostCmd_CMD_PMIC_REG_ACCESS:
>               r.pmic = &resp->params.pmic_reg;
> -             reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.pmic-
> >offset));
> -             reg_rw->value = cpu_to_le32((u32) r.pmic->value);
> +             reg_rw->offset = (u32) le16_to_cpu(r.pmic->offset);
> +             reg_rw->value = (u32) r.pmic->value;
>               break;
>       case HostCmd_CMD_CAU_REG_ACCESS:
>               r.rf = &resp->params.rf_reg;
> -             reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.rf-
> >offset));
> -             reg_rw->value = cpu_to_le32((u32) r.rf->value);
> +             reg_rw->offset = (u32) le16_to_cpu(r.rf->offset);
> +             reg_rw->value = (u32) r.rf->value;
>               break;
>       case HostCmd_CMD_802_11_EEPROM_ACCESS:
>               r.eeprom = &resp->params.eeprom;
> -             pr_debug("info: EEPROM read len=%x\n", r.eeprom-
> >byte_count);
> -             if (le16_to_cpu(eeprom->byte_count) <
> -                 le16_to_cpu(r.eeprom->byte_count)) {
> -                     eeprom->byte_count = cpu_to_le16(0);
> +             pr_debug("info: EEPROM read len=%x\n",
> +                             le16_to_cpu(r.eeprom->byte_count));
> +             if (eeprom->byte_count < le16_to_cpu(r.eeprom->byte_count))
> {
> +                     eeprom->byte_count = 0;
>                       pr_debug("info: EEPROM read length is too big\n");
>                       return -1;
>               }
> -             eeprom->offset = r.eeprom->offset;
> -             eeprom->byte_count = r.eeprom->byte_count;
> -             if (le16_to_cpu(eeprom->byte_count) > 0)
> +             eeprom->offset = le16_to_cpu(r.eeprom->offset);
> +             eeprom->byte_count = le16_to_cpu(r.eeprom->byte_count);
> +             if (eeprom->byte_count > 0)
>                       memcpy(&eeprom->value, &r.eeprom->value,
> -                            le16_to_cpu(r.eeprom->byte_count));
> -
> +                            min((u16)MAX_EEPROM_DATA, eeprom->byte_count));
>               break;
>       default:
>               return -1;
> diff --git a/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
> b/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
> index 8e08626..6dab5ca 100644
> --- a/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
> +++ b/drivers/net/wireless/marvell/mwifiex/sta_ioctl.c
> @@ -1247,7 +1247,7 @@ static int mwifiex_reg_mem_ioctl_reg_rw(struct
> mwifiex_private *priv,  {
>       u16 cmd_no;
> 
> -     switch (le32_to_cpu(reg_rw->type)) {
> +     switch (reg_rw->type) {
>       case MWIFIEX_REG_MAC:
>               cmd_no = HostCmd_CMD_MAC_REG_ACCESS;
>               break;
> @@ -1282,9 +1282,9 @@ mwifiex_reg_write(struct mwifiex_private *priv,
> u32 reg_type,  {
>       struct mwifiex_ds_reg_rw reg_rw;
> 
> -     reg_rw.type = cpu_to_le32(reg_type);
> -     reg_rw.offset = cpu_to_le32(reg_offset);
> -     reg_rw.value = cpu_to_le32(reg_value);
> +     reg_rw.type = reg_type;
> +     reg_rw.offset = reg_offset;
> +     reg_rw.value = reg_value;
> 
>       return mwifiex_reg_mem_ioctl_reg_rw(priv, &reg_rw,
> HostCmd_ACT_GEN_SET);  } @@ -1302,14 +1302,14 @@ mwifiex_reg_read(struct
> mwifiex_private *priv, u32 reg_type,
>       int ret;
>       struct mwifiex_ds_reg_rw reg_rw;
> 
> -     reg_rw.type = cpu_to_le32(reg_type);
> -     reg_rw.offset = cpu_to_le32(reg_offset);
> +     reg_rw.type = reg_type;
> +     reg_rw.offset = reg_offset;
>       ret = mwifiex_reg_mem_ioctl_reg_rw(priv, &reg_rw,
> HostCmd_ACT_GEN_GET);
> 
>       if (ret)
>               goto done;
> 
> -     *value = le32_to_cpu(reg_rw.value);
> +     *value = reg_rw.value;
> 
>  done:
>       return ret;
> @@ -1328,15 +1328,16 @@ mwifiex_eeprom_read(struct mwifiex_private
> *priv, u16 offset, u16 bytes,
>       int ret;
>       struct mwifiex_ds_read_eeprom rd_eeprom;
> 
> -     rd_eeprom.offset = cpu_to_le16((u16) offset);
> -     rd_eeprom.byte_count = cpu_to_le16((u16) bytes);
> +     rd_eeprom.offset =  offset;
> +     rd_eeprom.byte_count = bytes;
> 
>       /* Send request to firmware */
>       ret = mwifiex_send_cmd(priv, HostCmd_CMD_802_11_EEPROM_ACCESS,
>                              HostCmd_ACT_GEN_GET, 0, &rd_eeprom, true);
> 
>       if (!ret)
> -             memcpy(value, rd_eeprom.value, MAX_EEPROM_DATA);
> +             memcpy(value, rd_eeprom.value, min((u16)MAX_EEPROM_DATA,
> +                    rd_eeprom.byte_count));
>       return ret;
>  }
> 

Acked-by: Amitkumar Karwar <akar...@marvell.com>

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

Reply via email to