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 <prasunmaiti87@gmail.com> Acked-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
2186f6eec2
commit
8cfb86003d
|
@ -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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
{
|
{
|
||||||
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,
|
||||||
{
|
{
|
||||||
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, ®_rw, HostCmd_ACT_GEN_SET);
|
return mwifiex_reg_mem_ioctl_reg_rw(priv, ®_rw, HostCmd_ACT_GEN_SET);
|
||||||
}
|
}
|
||||||
|
@ -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, ®_rw, HostCmd_ACT_GEN_GET);
|
ret = mwifiex_reg_mem_ioctl_reg_rw(priv, ®_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,
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue