Commit 8cfb8600 authored by Prasun Maiti's avatar Prasun Maiti Committed by Kalle Valo

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: default avatarPrasun Maiti <prasunmaiti87@gmail.com>
Acked-by: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 2186f6ee
...@@ -343,16 +343,16 @@ enum { ...@@ -343,16 +343,16 @@ enum {
}; };
struct mwifiex_ds_reg_rw { struct mwifiex_ds_reg_rw {
__le32 type; u32 type;
__le32 offset; u32 offset;
__le32 value; u32 value;
}; };
#define MAX_EEPROM_DATA 256 #define MAX_EEPROM_DATA 256
struct mwifiex_ds_read_eeprom { struct mwifiex_ds_read_eeprom {
__le16 offset; u16 offset;
__le16 byte_count; u16 byte_count;
u8 value[MAX_EEPROM_DATA]; u8 value[MAX_EEPROM_DATA];
}; };
......
...@@ -1148,9 +1148,8 @@ static int mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd, ...@@ -1148,9 +1148,8 @@ static int mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd,
cmd->size = cpu_to_le16(sizeof(*mac_reg) + S_DS_GEN); cmd->size = cpu_to_le16(sizeof(*mac_reg) + S_DS_GEN);
mac_reg = &cmd->params.mac_reg; mac_reg = &cmd->params.mac_reg;
mac_reg->action = cpu_to_le16(cmd_action); mac_reg->action = cpu_to_le16(cmd_action);
mac_reg->offset = mac_reg->offset = cpu_to_le16((u16) reg_rw->offset);
cpu_to_le16((u16) le32_to_cpu(reg_rw->offset)); mac_reg->value = cpu_to_le32(reg_rw->value);
mac_reg->value = reg_rw->value;
break; break;
} }
case HostCmd_CMD_BBP_REG_ACCESS: case HostCmd_CMD_BBP_REG_ACCESS:
...@@ -1160,9 +1159,8 @@ static int mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd, ...@@ -1160,9 +1159,8 @@ static int mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd,
cmd->size = cpu_to_le16(sizeof(*bbp_reg) + S_DS_GEN); cmd->size = cpu_to_le16(sizeof(*bbp_reg) + S_DS_GEN);
bbp_reg = &cmd->params.bbp_reg; bbp_reg = &cmd->params.bbp_reg;
bbp_reg->action = cpu_to_le16(cmd_action); bbp_reg->action = cpu_to_le16(cmd_action);
bbp_reg->offset = bbp_reg->offset = cpu_to_le16((u16) reg_rw->offset);
cpu_to_le16((u16) le32_to_cpu(reg_rw->offset)); bbp_reg->value = (u8) reg_rw->value;
bbp_reg->value = (u8) le32_to_cpu(reg_rw->value);
break; break;
} }
case HostCmd_CMD_RF_REG_ACCESS: case HostCmd_CMD_RF_REG_ACCESS:
...@@ -1172,8 +1170,8 @@ static int mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd, ...@@ -1172,8 +1170,8 @@ static int mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd,
cmd->size = cpu_to_le16(sizeof(*rf_reg) + S_DS_GEN); cmd->size = cpu_to_le16(sizeof(*rf_reg) + S_DS_GEN);
rf_reg = &cmd->params.rf_reg; rf_reg = &cmd->params.rf_reg;
rf_reg->action = cpu_to_le16(cmd_action); rf_reg->action = cpu_to_le16(cmd_action);
rf_reg->offset = cpu_to_le16((u16) le32_to_cpu(reg_rw->offset)); rf_reg->offset = cpu_to_le16((u16) reg_rw->offset);
rf_reg->value = (u8) le32_to_cpu(reg_rw->value); rf_reg->value = (u8) reg_rw->value;
break; break;
} }
case HostCmd_CMD_PMIC_REG_ACCESS: case HostCmd_CMD_PMIC_REG_ACCESS:
...@@ -1183,9 +1181,8 @@ static int mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd, ...@@ -1183,9 +1181,8 @@ static int mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd,
cmd->size = cpu_to_le16(sizeof(*pmic_reg) + S_DS_GEN); cmd->size = cpu_to_le16(sizeof(*pmic_reg) + S_DS_GEN);
pmic_reg = &cmd->params.pmic_reg; pmic_reg = &cmd->params.pmic_reg;
pmic_reg->action = cpu_to_le16(cmd_action); pmic_reg->action = cpu_to_le16(cmd_action);
pmic_reg->offset = pmic_reg->offset = cpu_to_le16((u16) reg_rw->offset);
cpu_to_le16((u16) le32_to_cpu(reg_rw->offset)); pmic_reg->value = (u8) reg_rw->value;
pmic_reg->value = (u8) le32_to_cpu(reg_rw->value);
break; break;
} }
case HostCmd_CMD_CAU_REG_ACCESS: case HostCmd_CMD_CAU_REG_ACCESS:
...@@ -1195,9 +1192,8 @@ static int mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd, ...@@ -1195,9 +1192,8 @@ static int mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd,
cmd->size = cpu_to_le16(sizeof(*cau_reg) + S_DS_GEN); cmd->size = cpu_to_le16(sizeof(*cau_reg) + S_DS_GEN);
cau_reg = &cmd->params.rf_reg; cau_reg = &cmd->params.rf_reg;
cau_reg->action = cpu_to_le16(cmd_action); cau_reg->action = cpu_to_le16(cmd_action);
cau_reg->offset = cau_reg->offset = cpu_to_le16((u16) reg_rw->offset);
cpu_to_le16((u16) le32_to_cpu(reg_rw->offset)); cau_reg->value = (u8) reg_rw->value;
cau_reg->value = (u8) le32_to_cpu(reg_rw->value);
break; break;
} }
case HostCmd_CMD_802_11_EEPROM_ACCESS: case HostCmd_CMD_802_11_EEPROM_ACCESS:
...@@ -1208,8 +1204,8 @@ static int mwifiex_cmd_reg_access(struct host_cmd_ds_command *cmd, ...@@ -1208,8 +1204,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->size = cpu_to_le16(sizeof(*cmd_eeprom) + S_DS_GEN);
cmd_eeprom->action = cpu_to_le16(cmd_action); cmd_eeprom->action = cpu_to_le16(cmd_action);
cmd_eeprom->offset = rd_eeprom->offset; cmd_eeprom->offset = cpu_to_le16(rd_eeprom->offset);
cmd_eeprom->byte_count = rd_eeprom->byte_count; cmd_eeprom->byte_count = cpu_to_le16(rd_eeprom->byte_count);
cmd_eeprom->value = 0; cmd_eeprom->value = 0;
break; break;
} }
......
...@@ -786,45 +786,44 @@ static int mwifiex_ret_reg_access(u16 type, struct host_cmd_ds_command *resp, ...@@ -786,45 +786,44 @@ static int mwifiex_ret_reg_access(u16 type, struct host_cmd_ds_command *resp,
switch (type) { switch (type) {
case HostCmd_CMD_MAC_REG_ACCESS: case HostCmd_CMD_MAC_REG_ACCESS:
r.mac = &resp->params.mac_reg; r.mac = &resp->params.mac_reg;
reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.mac->offset)); reg_rw->offset = (u32) le16_to_cpu(r.mac->offset);
reg_rw->value = r.mac->value; reg_rw->value = le32_to_cpu(r.mac->value);
break; break;
case HostCmd_CMD_BBP_REG_ACCESS: case HostCmd_CMD_BBP_REG_ACCESS:
r.bbp = &resp->params.bbp_reg; r.bbp = &resp->params.bbp_reg;
reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.bbp->offset)); reg_rw->offset = (u32) le16_to_cpu(r.bbp->offset);
reg_rw->value = cpu_to_le32((u32) r.bbp->value); reg_rw->value = (u32) r.bbp->value;
break; break;
case HostCmd_CMD_RF_REG_ACCESS: case HostCmd_CMD_RF_REG_ACCESS:
r.rf = &resp->params.rf_reg; r.rf = &resp->params.rf_reg;
reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.rf->offset)); reg_rw->offset = (u32) le16_to_cpu(r.rf->offset);
reg_rw->value = cpu_to_le32((u32) r.bbp->value); reg_rw->value = (u32) r.bbp->value;
break; break;
case HostCmd_CMD_PMIC_REG_ACCESS: case HostCmd_CMD_PMIC_REG_ACCESS:
r.pmic = &resp->params.pmic_reg; r.pmic = &resp->params.pmic_reg;
reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.pmic->offset)); reg_rw->offset = (u32) le16_to_cpu(r.pmic->offset);
reg_rw->value = cpu_to_le32((u32) r.pmic->value); reg_rw->value = (u32) r.pmic->value;
break; break;
case HostCmd_CMD_CAU_REG_ACCESS: case HostCmd_CMD_CAU_REG_ACCESS:
r.rf = &resp->params.rf_reg; r.rf = &resp->params.rf_reg;
reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.rf->offset)); reg_rw->offset = (u32) le16_to_cpu(r.rf->offset);
reg_rw->value = cpu_to_le32((u32) r.rf->value); reg_rw->value = (u32) r.rf->value;
break; break;
case HostCmd_CMD_802_11_EEPROM_ACCESS: case HostCmd_CMD_802_11_EEPROM_ACCESS:
r.eeprom = &resp->params.eeprom; r.eeprom = &resp->params.eeprom;
pr_debug("info: EEPROM read len=%x\n", r.eeprom->byte_count); pr_debug("info: EEPROM read len=%x\n",
if (le16_to_cpu(eeprom->byte_count) < le16_to_cpu(r.eeprom->byte_count));
le16_to_cpu(r.eeprom->byte_count)) { if (eeprom->byte_count < le16_to_cpu(r.eeprom->byte_count)) {
eeprom->byte_count = cpu_to_le16(0); eeprom->byte_count = 0;
pr_debug("info: EEPROM read length is too big\n"); pr_debug("info: EEPROM read length is too big\n");
return -1; return -1;
} }
eeprom->offset = r.eeprom->offset; eeprom->offset = le16_to_cpu(r.eeprom->offset);
eeprom->byte_count = r.eeprom->byte_count; eeprom->byte_count = le16_to_cpu(r.eeprom->byte_count);
if (le16_to_cpu(eeprom->byte_count) > 0) if (eeprom->byte_count > 0)
memcpy(&eeprom->value, &r.eeprom->value, memcpy(&eeprom->value, &r.eeprom->value,
le16_to_cpu(r.eeprom->byte_count)); min((u16)MAX_EEPROM_DATA, eeprom->byte_count));
break; break;
default: default:
return -1; return -1;
......
...@@ -1251,7 +1251,7 @@ static int mwifiex_reg_mem_ioctl_reg_rw(struct mwifiex_private *priv, ...@@ -1251,7 +1251,7 @@ static int mwifiex_reg_mem_ioctl_reg_rw(struct mwifiex_private *priv,
{ {
u16 cmd_no; u16 cmd_no;
switch (le32_to_cpu(reg_rw->type)) { switch (reg_rw->type) {
case MWIFIEX_REG_MAC: case MWIFIEX_REG_MAC:
cmd_no = HostCmd_CMD_MAC_REG_ACCESS; cmd_no = HostCmd_CMD_MAC_REG_ACCESS;
break; break;
...@@ -1286,9 +1286,9 @@ mwifiex_reg_write(struct mwifiex_private *priv, u32 reg_type, ...@@ -1286,9 +1286,9 @@ mwifiex_reg_write(struct mwifiex_private *priv, u32 reg_type,
{ {
struct mwifiex_ds_reg_rw reg_rw; struct mwifiex_ds_reg_rw reg_rw;
reg_rw.type = cpu_to_le32(reg_type); reg_rw.type = reg_type;
reg_rw.offset = cpu_to_le32(reg_offset); reg_rw.offset = reg_offset;
reg_rw.value = cpu_to_le32(reg_value); reg_rw.value = reg_value;
return mwifiex_reg_mem_ioctl_reg_rw(priv, &reg_rw, HostCmd_ACT_GEN_SET); return mwifiex_reg_mem_ioctl_reg_rw(priv, &reg_rw, HostCmd_ACT_GEN_SET);
} }
...@@ -1306,14 +1306,14 @@ mwifiex_reg_read(struct mwifiex_private *priv, u32 reg_type, ...@@ -1306,14 +1306,14 @@ mwifiex_reg_read(struct mwifiex_private *priv, u32 reg_type,
int ret; int ret;
struct mwifiex_ds_reg_rw reg_rw; struct mwifiex_ds_reg_rw reg_rw;
reg_rw.type = cpu_to_le32(reg_type); reg_rw.type = reg_type;
reg_rw.offset = cpu_to_le32(reg_offset); reg_rw.offset = reg_offset;
ret = mwifiex_reg_mem_ioctl_reg_rw(priv, &reg_rw, HostCmd_ACT_GEN_GET); ret = mwifiex_reg_mem_ioctl_reg_rw(priv, &reg_rw, HostCmd_ACT_GEN_GET);
if (ret) if (ret)
goto done; goto done;
*value = le32_to_cpu(reg_rw.value); *value = reg_rw.value;
done: done:
return ret; return ret;
...@@ -1332,15 +1332,16 @@ mwifiex_eeprom_read(struct mwifiex_private *priv, u16 offset, u16 bytes, ...@@ -1332,15 +1332,16 @@ mwifiex_eeprom_read(struct mwifiex_private *priv, u16 offset, u16 bytes,
int ret; int ret;
struct mwifiex_ds_read_eeprom rd_eeprom; struct mwifiex_ds_read_eeprom rd_eeprom;
rd_eeprom.offset = cpu_to_le16((u16) offset); rd_eeprom.offset = offset;
rd_eeprom.byte_count = cpu_to_le16((u16) bytes); rd_eeprom.byte_count = bytes;
/* Send request to firmware */ /* Send request to firmware */
ret = mwifiex_send_cmd(priv, HostCmd_CMD_802_11_EEPROM_ACCESS, ret = mwifiex_send_cmd(priv, HostCmd_CMD_802_11_EEPROM_ACCESS,
HostCmd_ACT_GEN_GET, 0, &rd_eeprom, true); HostCmd_ACT_GEN_GET, 0, &rd_eeprom, true);
if (!ret) 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; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment