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;
|
||||
|
||||
struct mwifiex_types_power_group {
|
||||
u16 type;
|
||||
u16 length;
|
||||
__le16 type;
|
||||
__le16 length;
|
||||
} __packed;
|
||||
|
||||
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,
|
||||
sizeof(struct host_cmd_ds_txpwr_cfg) +
|
||||
sizeof(struct mwifiex_types_power_group) +
|
||||
pg_tlv->length);
|
||||
le16_to_cpu(pg_tlv->length));
|
||||
|
||||
pg_tlv = (struct mwifiex_types_power_group *) ((u8 *)
|
||||
cmd_txp_cfg +
|
||||
sizeof(struct host_cmd_ds_txpwr_cfg));
|
||||
cmd->size = cpu_to_le16(le16_to_cpu(cmd->size) +
|
||||
sizeof(struct mwifiex_types_power_group) +
|
||||
pg_tlv->length);
|
||||
le16_to_cpu(pg_tlv->length));
|
||||
} else {
|
||||
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));
|
||||
pg = (struct mwifiex_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) {
|
||||
max_power = pg->power_max;
|
||||
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);
|
||||
}
|
||||
if (pg_tlv_hdr->length > 0) {
|
||||
if (le16_to_cpu(pg_tlv_hdr->length) > 0) {
|
||||
priv->min_tx_power_level = (u8) min_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);
|
||||
pg_tlv = (struct mwifiex_types_power_group *)
|
||||
(buf + sizeof(struct host_cmd_ds_txpwr_cfg));
|
||||
pg_tlv->type = TLV_TYPE_POWER_GROUP;
|
||||
pg_tlv->length = 4 * sizeof(struct mwifiex_power_group);
|
||||
pg_tlv->type = cpu_to_le16(TLV_TYPE_POWER_GROUP);
|
||||
pg_tlv->length =
|
||||
cpu_to_le16(4 * sizeof(struct mwifiex_power_group));
|
||||
pg = (struct mwifiex_power_group *)
|
||||
(buf + sizeof(struct host_cmd_ds_txpwr_cfg)
|
||||
+ sizeof(struct mwifiex_types_power_group));
|
||||
|
|
Loading…
Reference in New Issue