mirror of https://gitee.com/openkylin/linux.git
mwifiex: replace u16 with __le16 in struct mwifiex_types_power_group
__le16 to u16 conversion is missing for "pg_tlv_hdr->length" in mwifiex_get_power_level(). This creates a problem on big endian machines. It is resolved by changing definition of the structure and making required endianness changes. Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Bing Zhao <bzhao@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
95edbc30db
commit
930fd35c8d
|
@ -1020,8 +1020,8 @@ struct mwifiex_power_group {
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
struct mwifiex_types_power_group {
|
struct mwifiex_types_power_group {
|
||||||
u16 type;
|
__le16 type;
|
||||||
u16 length;
|
__le16 length;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
struct host_cmd_ds_txpwr_cfg {
|
struct host_cmd_ds_txpwr_cfg {
|
||||||
|
|
|
@ -239,14 +239,14 @@ static int mwifiex_cmd_tx_power_cfg(struct host_cmd_ds_command *cmd,
|
||||||
memmove(cmd_txp_cfg, txp,
|
memmove(cmd_txp_cfg, txp,
|
||||||
sizeof(struct host_cmd_ds_txpwr_cfg) +
|
sizeof(struct host_cmd_ds_txpwr_cfg) +
|
||||||
sizeof(struct mwifiex_types_power_group) +
|
sizeof(struct mwifiex_types_power_group) +
|
||||||
pg_tlv->length);
|
le16_to_cpu(pg_tlv->length));
|
||||||
|
|
||||||
pg_tlv = (struct mwifiex_types_power_group *) ((u8 *)
|
pg_tlv = (struct mwifiex_types_power_group *) ((u8 *)
|
||||||
cmd_txp_cfg +
|
cmd_txp_cfg +
|
||||||
sizeof(struct host_cmd_ds_txpwr_cfg));
|
sizeof(struct host_cmd_ds_txpwr_cfg));
|
||||||
cmd->size = cpu_to_le16(le16_to_cpu(cmd->size) +
|
cmd->size = cpu_to_le16(le16_to_cpu(cmd->size) +
|
||||||
sizeof(struct mwifiex_types_power_group) +
|
sizeof(struct mwifiex_types_power_group) +
|
||||||
pg_tlv->length);
|
le16_to_cpu(pg_tlv->length));
|
||||||
} else {
|
} else {
|
||||||
memmove(cmd_txp_cfg, txp, sizeof(*txp));
|
memmove(cmd_txp_cfg, txp, sizeof(*txp));
|
||||||
}
|
}
|
||||||
|
|
|
@ -340,7 +340,7 @@ static int mwifiex_get_power_level(struct mwifiex_private *priv, void *data_buf)
|
||||||
((u8 *) data_buf + sizeof(struct host_cmd_ds_txpwr_cfg));
|
((u8 *) data_buf + sizeof(struct host_cmd_ds_txpwr_cfg));
|
||||||
pg = (struct mwifiex_power_group *)
|
pg = (struct mwifiex_power_group *)
|
||||||
((u8 *) pg_tlv_hdr + sizeof(struct mwifiex_types_power_group));
|
((u8 *) pg_tlv_hdr + sizeof(struct mwifiex_types_power_group));
|
||||||
length = pg_tlv_hdr->length;
|
length = le16_to_cpu(pg_tlv_hdr->length);
|
||||||
if (length > 0) {
|
if (length > 0) {
|
||||||
max_power = pg->power_max;
|
max_power = pg->power_max;
|
||||||
min_power = pg->power_min;
|
min_power = pg->power_min;
|
||||||
|
@ -356,7 +356,7 @@ static int mwifiex_get_power_level(struct mwifiex_private *priv, void *data_buf)
|
||||||
|
|
||||||
length -= sizeof(struct mwifiex_power_group);
|
length -= sizeof(struct mwifiex_power_group);
|
||||||
}
|
}
|
||||||
if (pg_tlv_hdr->length > 0) {
|
if (le16_to_cpu(pg_tlv_hdr->length) > 0) {
|
||||||
priv->min_tx_power_level = (u8) min_power;
|
priv->min_tx_power_level = (u8) min_power;
|
||||||
priv->max_tx_power_level = (u8) max_power;
|
priv->max_tx_power_level = (u8) max_power;
|
||||||
}
|
}
|
||||||
|
|
|
@ -638,8 +638,9 @@ int mwifiex_set_tx_power(struct mwifiex_private *priv,
|
||||||
txp_cfg->mode = cpu_to_le32(1);
|
txp_cfg->mode = cpu_to_le32(1);
|
||||||
pg_tlv = (struct mwifiex_types_power_group *)
|
pg_tlv = (struct mwifiex_types_power_group *)
|
||||||
(buf + sizeof(struct host_cmd_ds_txpwr_cfg));
|
(buf + sizeof(struct host_cmd_ds_txpwr_cfg));
|
||||||
pg_tlv->type = TLV_TYPE_POWER_GROUP;
|
pg_tlv->type = cpu_to_le16(TLV_TYPE_POWER_GROUP);
|
||||||
pg_tlv->length = 4 * sizeof(struct mwifiex_power_group);
|
pg_tlv->length =
|
||||||
|
cpu_to_le16(4 * sizeof(struct mwifiex_power_group));
|
||||||
pg = (struct mwifiex_power_group *)
|
pg = (struct mwifiex_power_group *)
|
||||||
(buf + sizeof(struct host_cmd_ds_txpwr_cfg)
|
(buf + sizeof(struct host_cmd_ds_txpwr_cfg)
|
||||||
+ sizeof(struct mwifiex_types_power_group));
|
+ sizeof(struct mwifiex_types_power_group));
|
||||||
|
|
Loading…
Reference in New Issue