Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 930fd35c authored by Amitkumar Karwar's avatar Amitkumar Karwar Committed by John W. Linville
Browse files

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: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarBing Zhao <bzhao@marvell.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 95edbc30
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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 {
+2 −2
Original line number Diff line number Diff line
@@ -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));
		}
+2 −2
Original line number Diff line number Diff line
@@ -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;
	}
+3 −2
Original line number Diff line number Diff line
@@ -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));