summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/mwifiex/sta_cmdresp.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2012-04-14 13:18:27 +0200
committerIngo Molnar <mingo@kernel.org>2012-04-14 13:19:04 +0200
commit6ac1ef482d7ae0c690f1640bf6eb818ff9a2d91e (patch)
tree021cc9f6b477146fcebe6f3be4752abfa2ba18a9 /drivers/net/wireless/mwifiex/sta_cmdresp.c
parent682968e0c425c60f0dde37977e5beb2b12ddc4cc (diff)
parenta385ec4f11bdcf81af094c03e2444ee9b7fad2e5 (diff)
Merge branch 'perf/core' into perf/uprobes
Merge in latest upstream (and the latest perf development tree), to prepare for tooling changes, and also to pick up v3.4 MM changes that the uprobes code needs to take care of. Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/net/wireless/mwifiex/sta_cmdresp.c')
-rw-r--r--drivers/net/wireless/mwifiex/sta_cmdresp.c356
1 files changed, 163 insertions, 193 deletions
diff --git a/drivers/net/wireless/mwifiex/sta_cmdresp.c b/drivers/net/wireless/mwifiex/sta_cmdresp.c
index e812db8b695c..4da19ed0f078 100644
--- a/drivers/net/wireless/mwifiex/sta_cmdresp.c
+++ b/drivers/net/wireless/mwifiex/sta_cmdresp.c
@@ -49,7 +49,7 @@ mwifiex_process_cmdresp_error(struct mwifiex_private *priv,
unsigned long flags;
dev_err(adapter->dev, "CMD_RESP: cmd %#x error, result=%#x\n",
- resp->command, resp->result);
+ resp->command, resp->result);
if (adapter->curr_cmd->wait_q_enabled)
adapter->cmd_wait_q.status = -1;
@@ -57,13 +57,13 @@ mwifiex_process_cmdresp_error(struct mwifiex_private *priv,
switch (le16_to_cpu(resp->command)) {
case HostCmd_CMD_802_11_PS_MODE_ENH:
pm = &resp->params.psmode_enh;
- dev_err(adapter->dev, "PS_MODE_ENH cmd failed: "
- "result=0x%x action=0x%X\n",
- resp->result, le16_to_cpu(pm->action));
+ dev_err(adapter->dev,
+ "PS_MODE_ENH cmd failed: result=0x%x action=0x%X\n",
+ resp->result, le16_to_cpu(pm->action));
/* We do not re-try enter-ps command in ad-hoc mode. */
if (le16_to_cpu(pm->action) == EN_AUTO_PS &&
- (le16_to_cpu(pm->params.ps_bitmap) & BITMAP_STA_PS) &&
- priv->bss_mode == NL80211_IFTYPE_ADHOC)
+ (le16_to_cpu(pm->params.ps_bitmap) & BITMAP_STA_PS) &&
+ priv->bss_mode == NL80211_IFTYPE_ADHOC)
adapter->ps_mode = MWIFIEX_802_11_POWER_MODE_CAM;
break;
@@ -123,7 +123,7 @@ static int mwifiex_ret_802_11_rssi_info(struct mwifiex_private *priv,
struct mwifiex_ds_get_signal *signal)
{
struct host_cmd_ds_802_11_rssi_info_rsp *rssi_info_rsp =
- &resp->params.rssi_info_rsp;
+ &resp->params.rssi_info_rsp;
priv->data_rssi_last = le16_to_cpu(rssi_info_rsp->data_rssi_last);
priv->data_nf_last = le16_to_cpu(rssi_info_rsp->data_nf_last);
@@ -191,8 +191,8 @@ static int mwifiex_ret_802_11_snmp_mib(struct mwifiex_private *priv,
u32 ul_temp;
dev_dbg(priv->adapter->dev, "info: SNMP_RESP: oid value = %#x,"
- " query_type = %#x, buf size = %#x\n",
- oid, query_type, le16_to_cpu(smib->buf_size));
+ " query_type = %#x, buf size = %#x\n",
+ oid, query_type, le16_to_cpu(smib->buf_size));
if (query_type == HostCmd_ACT_GEN_GET) {
ul_temp = le16_to_cpu(*((__le16 *) (smib->value)));
if (data_buf)
@@ -210,6 +210,9 @@ static int mwifiex_ret_802_11_snmp_mib(struct mwifiex_private *priv,
dev_dbg(priv->adapter->dev,
"info: SNMP_RESP: TxRetryCount=%u\n", ul_temp);
break;
+ case DTIM_PERIOD_I:
+ dev_dbg(priv->adapter->dev,
+ "info: SNMP_RESP: DTIM period=%u\n", ul_temp);
default:
break;
}
@@ -324,31 +327,26 @@ static int mwifiex_ret_tx_rate_cfg(struct mwifiex_private *priv,
HostCmd_CMD_802_11_TX_RATE_QUERY,
HostCmd_ACT_GEN_GET, 0, NULL);
- if (ds_rate) {
- if (le16_to_cpu(rate_cfg->action) == HostCmd_ACT_GEN_GET) {
- if (priv->is_data_rate_auto) {
- ds_rate->is_rate_auto = 1;
- } else {
- ds_rate->rate = mwifiex_get_rate_index(priv->
- bitmap_rates,
- sizeof(priv->
- bitmap_rates));
- if (ds_rate->rate >=
- MWIFIEX_RATE_BITMAP_OFDM0
- && ds_rate->rate <=
- MWIFIEX_RATE_BITMAP_OFDM7)
- ds_rate->rate -=
- (MWIFIEX_RATE_BITMAP_OFDM0 -
- MWIFIEX_RATE_INDEX_OFDM0);
- if (ds_rate->rate >=
- MWIFIEX_RATE_BITMAP_MCS0
- && ds_rate->rate <=
- MWIFIEX_RATE_BITMAP_MCS127)
- ds_rate->rate -=
- (MWIFIEX_RATE_BITMAP_MCS0 -
- MWIFIEX_RATE_INDEX_MCS0);
- }
- }
+ if (!ds_rate)
+ return ret;
+
+ if (le16_to_cpu(rate_cfg->action) == HostCmd_ACT_GEN_GET) {
+ if (priv->is_data_rate_auto) {
+ ds_rate->is_rate_auto = 1;
+ return ret;
+ }
+ ds_rate->rate = mwifiex_get_rate_index(priv->bitmap_rates,
+ sizeof(priv->bitmap_rates));
+
+ if (ds_rate->rate >= MWIFIEX_RATE_BITMAP_OFDM0 &&
+ ds_rate->rate <= MWIFIEX_RATE_BITMAP_OFDM7)
+ ds_rate->rate -= (MWIFIEX_RATE_BITMAP_OFDM0 -
+ MWIFIEX_RATE_INDEX_OFDM0);
+
+ if (ds_rate->rate >= MWIFIEX_RATE_BITMAP_MCS0 &&
+ ds_rate->rate <= MWIFIEX_RATE_BITMAP_MCS127)
+ ds_rate->rate -= (MWIFIEX_RATE_BITMAP_MCS0 -
+ MWIFIEX_RATE_INDEX_MCS0);
}
return ret;
@@ -366,34 +364,32 @@ static int mwifiex_get_power_level(struct mwifiex_private *priv, void *data_buf)
struct mwifiex_types_power_group *pg_tlv_hdr;
struct mwifiex_power_group *pg;
- if (data_buf) {
- pg_tlv_hdr =
- (struct mwifiex_types_power_group *) ((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;
- if (length > 0) {
+ if (!data_buf)
+ return -1;
+
+ pg_tlv_hdr = (struct mwifiex_types_power_group *)
+ ((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;
+ if (length > 0) {
+ max_power = pg->power_max;
+ min_power = pg->power_min;
+ length -= sizeof(struct mwifiex_power_group);
+ }
+ while (length) {
+ pg++;
+ if (max_power < pg->power_max)
max_power = pg->power_max;
- min_power = pg->power_min;
- length -= sizeof(struct mwifiex_power_group);
- }
- while (length) {
- pg++;
- if (max_power < pg->power_max)
- max_power = pg->power_max;
- if (min_power > pg->power_min)
- min_power = pg->power_min;
+ if (min_power > pg->power_min)
+ min_power = pg->power_min;
- length -= sizeof(struct mwifiex_power_group);
- }
- if (pg_tlv_hdr->length > 0) {
- priv->min_tx_power_level = (u8) min_power;
- priv->max_tx_power_level = (u8) max_power;
- }
- } else {
- return -1;
+ length -= sizeof(struct mwifiex_power_group);
+ }
+ if (pg_tlv_hdr->length > 0) {
+ priv->min_tx_power_level = (u8) min_power;
+ priv->max_tx_power_level = (u8) max_power;
}
return 0;
@@ -417,42 +413,38 @@ static int mwifiex_ret_tx_power_cfg(struct mwifiex_private *priv,
switch (action) {
case HostCmd_ACT_GEN_GET:
- {
- pg_tlv_hdr =
- (struct mwifiex_types_power_group *) ((u8 *)
- txp_cfg +
- sizeof
- (struct
- host_cmd_ds_txpwr_cfg));
- pg = (struct mwifiex_power_group *) ((u8 *)
- pg_tlv_hdr +
- sizeof(struct
- mwifiex_types_power_group));
- if (adapter->hw_status ==
- MWIFIEX_HW_STATUS_INITIALIZING)
- mwifiex_get_power_level(priv, txp_cfg);
- priv->tx_power_level = (u16) pg->power_min;
- break;
- }
+ pg_tlv_hdr = (struct mwifiex_types_power_group *)
+ ((u8 *) txp_cfg +
+ sizeof(struct host_cmd_ds_txpwr_cfg));
+
+ pg = (struct mwifiex_power_group *)
+ ((u8 *) pg_tlv_hdr +
+ sizeof(struct mwifiex_types_power_group));
+
+ if (adapter->hw_status == MWIFIEX_HW_STATUS_INITIALIZING)
+ mwifiex_get_power_level(priv, txp_cfg);
+
+ priv->tx_power_level = (u16) pg->power_min;
+ break;
+
case HostCmd_ACT_GEN_SET:
- if (le32_to_cpu(txp_cfg->mode)) {
- pg_tlv_hdr =
- (struct mwifiex_types_power_group *) ((u8 *)
- txp_cfg +
- sizeof
- (struct
- host_cmd_ds_txpwr_cfg));
- pg = (struct mwifiex_power_group *) ((u8 *) pg_tlv_hdr
- +
- sizeof(struct
- mwifiex_types_power_group));
- if (pg->power_max == pg->power_min)
- priv->tx_power_level = (u16) pg->power_min;
- }
+ if (!le32_to_cpu(txp_cfg->mode))
+ break;
+
+ pg_tlv_hdr = (struct mwifiex_types_power_group *)
+ ((u8 *) txp_cfg +
+ sizeof(struct host_cmd_ds_txpwr_cfg));
+
+ pg = (struct mwifiex_power_group *)
+ ((u8 *) pg_tlv_hdr +
+ sizeof(struct mwifiex_types_power_group));
+
+ if (pg->power_max == pg->power_min)
+ priv->tx_power_level = (u16) pg->power_min;
break;
default:
dev_err(adapter->dev, "CMD_RESP: unknown cmd action %d\n",
- action);
+ action);
return 0;
}
dev_dbg(adapter->dev,
@@ -472,7 +464,7 @@ static int mwifiex_ret_802_11_mac_address(struct mwifiex_private *priv,
struct host_cmd_ds_command *resp)
{
struct host_cmd_ds_802_11_mac_address *cmd_mac_addr =
- &resp->params.mac_addr;
+ &resp->params.mac_addr;
memcpy(priv->curr_addr, cmd_mac_addr->mac_addr, ETH_ALEN);
@@ -557,7 +549,7 @@ static int mwifiex_ret_802_11_key_material(struct mwifiex_private *priv,
struct host_cmd_ds_command *resp)
{
struct host_cmd_ds_802_11_key_material *key =
- &resp->params.key_material;
+ &resp->params.key_material;
if (le16_to_cpu(key->action) == HostCmd_ACT_GEN_SET) {
if ((le16_to_cpu(key->key_param_set.key_info) & KEY_MCAST)) {
@@ -588,17 +580,18 @@ static int mwifiex_ret_802_11d_domain_info(struct mwifiex_private *priv,
u16 action = le16_to_cpu(domain_info->action);
u8 no_of_triplet;
- no_of_triplet = (u8) ((le16_to_cpu(domain->header.len) -
- IEEE80211_COUNTRY_STRING_LEN) /
- sizeof(struct ieee80211_country_ie_triplet));
+ no_of_triplet = (u8) ((le16_to_cpu(domain->header.len)
+ - IEEE80211_COUNTRY_STRING_LEN)
+ / sizeof(struct ieee80211_country_ie_triplet));
- dev_dbg(priv->adapter->dev, "info: 11D Domain Info Resp:"
- " no_of_triplet=%d\n", no_of_triplet);
+ dev_dbg(priv->adapter->dev,
+ "info: 11D Domain Info Resp: no_of_triplet=%d\n",
+ no_of_triplet);
if (no_of_triplet > MWIFIEX_MAX_TRIPLET_802_11D) {
dev_warn(priv->adapter->dev,
- "11D: invalid number of triplets %d "
- "returned!!\n", no_of_triplet);
+ "11D: invalid number of triplets %d returned\n",
+ no_of_triplet);
return -1;
}
@@ -632,8 +625,8 @@ static int mwifiex_ret_802_11_rf_channel(struct mwifiex_private *priv,
if (priv->curr_bss_params.bss_descriptor.channel != new_channel) {
dev_dbg(priv->adapter->dev, "cmd: Channel Switch: %d to %d\n",
- priv->curr_bss_params.bss_descriptor.channel,
- new_channel);
+ priv->curr_bss_params.bss_descriptor.channel,
+ new_channel);
/* Update the channel again */
priv->curr_bss_params.bss_descriptor.channel = new_channel;
}
@@ -676,90 +669,70 @@ static int mwifiex_ret_reg_access(u16 type, struct host_cmd_ds_command *resp,
{
struct mwifiex_ds_reg_rw *reg_rw;
struct mwifiex_ds_read_eeprom *eeprom;
+ union reg {
+ struct host_cmd_ds_mac_reg_access *mac;
+ struct host_cmd_ds_bbp_reg_access *bbp;
+ struct host_cmd_ds_rf_reg_access *rf;
+ struct host_cmd_ds_pmic_reg_access *pmic;
+ struct host_cmd_ds_802_11_eeprom_access *eeprom;
+ } r;
+
+ if (!data_buf)
+ return 0;
- if (data_buf) {
- reg_rw = data_buf;
- eeprom = data_buf;
- switch (type) {
- case HostCmd_CMD_MAC_REG_ACCESS:
- {
- struct host_cmd_ds_mac_reg_access *reg;
- reg = (struct host_cmd_ds_mac_reg_access *)
- &resp->params.mac_reg;
- reg_rw->offset = cpu_to_le32(
- (u32) le16_to_cpu(reg->offset));
- reg_rw->value = reg->value;
- break;
- }
- case HostCmd_CMD_BBP_REG_ACCESS:
- {
- struct host_cmd_ds_bbp_reg_access *reg;
- reg = (struct host_cmd_ds_bbp_reg_access *)
- &resp->params.bbp_reg;
- reg_rw->offset = cpu_to_le32(
- (u32) le16_to_cpu(reg->offset));
- reg_rw->value = cpu_to_le32((u32) reg->value);
- break;
- }
-
- case HostCmd_CMD_RF_REG_ACCESS:
- {
- struct host_cmd_ds_rf_reg_access *reg;
- reg = (struct host_cmd_ds_rf_reg_access *)
- &resp->params.rf_reg;
- reg_rw->offset = cpu_to_le32(
- (u32) le16_to_cpu(reg->offset));
- reg_rw->value = cpu_to_le32((u32) reg->value);
- break;
- }
- case HostCmd_CMD_PMIC_REG_ACCESS:
- {
- struct host_cmd_ds_pmic_reg_access *reg;
- reg = (struct host_cmd_ds_pmic_reg_access *)
- &resp->params.pmic_reg;
- reg_rw->offset = cpu_to_le32(
- (u32) le16_to_cpu(reg->offset));
- reg_rw->value = cpu_to_le32((u32) reg->value);
- break;
- }
- case HostCmd_CMD_CAU_REG_ACCESS:
- {
- struct host_cmd_ds_rf_reg_access *reg;
- reg = (struct host_cmd_ds_rf_reg_access *)
- &resp->params.rf_reg;
- reg_rw->offset = cpu_to_le32(
- (u32) le16_to_cpu(reg->offset));
- reg_rw->value = cpu_to_le32((u32) reg->value);
- break;
- }
- case HostCmd_CMD_802_11_EEPROM_ACCESS:
- {
- struct host_cmd_ds_802_11_eeprom_access
- *cmd_eeprom =
- (struct host_cmd_ds_802_11_eeprom_access
- *) &resp->params.eeprom;
- pr_debug("info: EEPROM read len=%x\n",
- cmd_eeprom->byte_count);
- if (le16_to_cpu(eeprom->byte_count) <
- le16_to_cpu(
- cmd_eeprom->byte_count)) {
- eeprom->byte_count = cpu_to_le16(0);
- pr_debug("info: EEPROM read "
- "length is too big\n");
- return -1;
- }
- eeprom->offset = cmd_eeprom->offset;
- eeprom->byte_count = cmd_eeprom->byte_count;
- if (le16_to_cpu(eeprom->byte_count) > 0)
- memcpy(&eeprom->value,
- &cmd_eeprom->value,
- le16_to_cpu(eeprom->byte_count));
-
- break;
- }
- default:
+ reg_rw = data_buf;
+ eeprom = data_buf;
+ switch (type) {
+ case HostCmd_CMD_MAC_REG_ACCESS:
+ r.mac = (struct host_cmd_ds_mac_reg_access *)
+ &resp->params.mac_reg;
+ reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.mac->offset));
+ reg_rw->value = r.mac->value;
+ break;
+ case HostCmd_CMD_BBP_REG_ACCESS:
+ r.bbp = (struct host_cmd_ds_bbp_reg_access *)
+ &resp->params.bbp_reg;
+ reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.bbp->offset));
+ reg_rw->value = cpu_to_le32((u32) r.bbp->value);
+ break;
+
+ case HostCmd_CMD_RF_REG_ACCESS:
+ r.rf = (struct host_cmd_ds_rf_reg_access *)
+ &resp->params.rf_reg;
+ reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.rf->offset));
+ reg_rw->value = cpu_to_le32((u32) r.bbp->value);
+ break;
+ case HostCmd_CMD_PMIC_REG_ACCESS:
+ r.pmic = (struct host_cmd_ds_pmic_reg_access *)
+ &resp->params.pmic_reg;
+ reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.pmic->offset));
+ reg_rw->value = cpu_to_le32((u32) r.pmic->value);
+ break;
+ case HostCmd_CMD_CAU_REG_ACCESS:
+ r.rf = (struct host_cmd_ds_rf_reg_access *)
+ &resp->params.rf_reg;
+ reg_rw->offset = cpu_to_le32((u32) le16_to_cpu(r.rf->offset));
+ reg_rw->value = cpu_to_le32((u32) r.rf->value);
+ break;
+ case HostCmd_CMD_802_11_EEPROM_ACCESS:
+ r.eeprom = (struct host_cmd_ds_802_11_eeprom_access *)
+ &resp->params.eeprom;
+ pr_debug("info: EEPROM read len=%x\n", r.eeprom->byte_count);
+ if (le16_to_cpu(eeprom->byte_count) <
+ le16_to_cpu(r.eeprom->byte_count)) {
+ eeprom->byte_count = cpu_to_le16(0);
+ pr_debug("info: EEPROM read length is too big\n");
return -1;
}
+ eeprom->offset = r.eeprom->offset;
+ eeprom->byte_count = r.eeprom->byte_count;
+ if (le16_to_cpu(eeprom->byte_count) > 0)
+ memcpy(&eeprom->value, &r.eeprom->value,
+ le16_to_cpu(r.eeprom->byte_count));
+
+ break;
+ default:
+ return -1;
}
return 0;
}
@@ -775,7 +748,7 @@ static int mwifiex_ret_ibss_coalescing_status(struct mwifiex_private *priv,
struct host_cmd_ds_command *resp)
{
struct host_cmd_ds_802_11_ibss_status *ibss_coal_resp =
- &(resp->params.ibss_coalescing);
+ &(resp->params.ibss_coalescing);
u8 zero_mac[ETH_ALEN] = { 0, 0, 0, 0, 0, 0 };
if (le16_to_cpu(ibss_coal_resp->action) == HostCmd_ACT_GEN_SET)
@@ -915,20 +888,17 @@ int mwifiex_process_sta_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no,
case HostCmd_CMD_RECONFIGURE_TX_BUFF:
adapter->tx_buf_size = (u16) le16_to_cpu(resp->params.
tx_buf.buff_size);
- adapter->tx_buf_size = (adapter->tx_buf_size /
- MWIFIEX_SDIO_BLOCK_SIZE) *
- MWIFIEX_SDIO_BLOCK_SIZE;
+ adapter->tx_buf_size = (adapter->tx_buf_size
+ / MWIFIEX_SDIO_BLOCK_SIZE)
+ * MWIFIEX_SDIO_BLOCK_SIZE;
adapter->curr_tx_buf_size = adapter->tx_buf_size;
dev_dbg(adapter->dev,
"cmd: max_tx_buf_size=%d, tx_buf_size=%d\n",
- adapter->max_tx_buf_size, adapter->tx_buf_size);
+ adapter->max_tx_buf_size, adapter->tx_buf_size);
if (adapter->if_ops.update_mp_end_port)
adapter->if_ops.update_mp_end_port(adapter,
- le16_to_cpu(resp->
- params.
- tx_buf.
- mp_end_port));
+ le16_to_cpu(resp->params.tx_buf.mp_end_port));
break;
case HostCmd_CMD_AMSDU_AGGR_CTRL:
ret = mwifiex_ret_amsdu_aggr_ctrl(resp, data_buf);
@@ -956,7 +926,7 @@ int mwifiex_process_sta_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no,
break;
default:
dev_err(adapter->dev, "CMD_RESP: unknown cmd response %#x\n",
- resp->command);
+ resp->command);
break;
}