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:
Amitkumar Karwar 2013-10-22 15:24:43 -07:00 committed by John W. Linville
parent 95edbc30db
commit 930fd35c8d
4 changed files with 9 additions and 8 deletions

View File

@ -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 {

View File

@ -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));
} }

View File

@ -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;
} }

View File

@ -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));