aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmitkumar Karwar <akarwar@marvell.com>2012-06-27 22:57:57 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-06-28 14:37:49 -0400
commitcaa8984f59b8be220767886ae27de855f77e6a61 (patch)
treec7fe8bcf7a390f5982fe68a40f7e2d996446704c
parent1a1fb970472d66d1668ff66bc46c2cd977f9a4fc (diff)
mwifiex: use correct firmware command to get power limits
"priv->max_tx_power_level" and "priv->min_tx_power_level" variables are initialized to maximum and minimum power levels supported by hardware by sending correct firmware command. 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>
-rw-r--r--drivers/net/wireless/mwifiex/fw.h9
-rw-r--r--drivers/net/wireless/mwifiex/sta_cmd.c23
-rw-r--r--drivers/net/wireless/mwifiex/sta_cmdresp.c27
3 files changed, 58 insertions, 1 deletions
diff --git a/drivers/net/wireless/mwifiex/fw.h b/drivers/net/wireless/mwifiex/fw.h
index 1184141839ae..ffb6cdfdb797 100644
--- a/drivers/net/wireless/mwifiex/fw.h
+++ b/drivers/net/wireless/mwifiex/fw.h
@@ -226,6 +226,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
226#define HostCmd_CMD_RF_REG_ACCESS 0x001b 226#define HostCmd_CMD_RF_REG_ACCESS 0x001b
227#define HostCmd_CMD_PMIC_REG_ACCESS 0x00ad 227#define HostCmd_CMD_PMIC_REG_ACCESS 0x00ad
228#define HostCmd_CMD_802_11_RF_CHANNEL 0x001d 228#define HostCmd_CMD_802_11_RF_CHANNEL 0x001d
229#define HostCmd_CMD_RF_TX_PWR 0x001e
229#define HostCmd_CMD_802_11_DEAUTHENTICATE 0x0024 230#define HostCmd_CMD_802_11_DEAUTHENTICATE 0x0024
230#define HostCmd_CMD_MAC_CONTROL 0x0028 231#define HostCmd_CMD_MAC_CONTROL 0x0028
231#define HostCmd_CMD_802_11_AD_HOC_START 0x002b 232#define HostCmd_CMD_802_11_AD_HOC_START 0x002b
@@ -876,6 +877,13 @@ struct host_cmd_ds_txpwr_cfg {
876 __le32 mode; 877 __le32 mode;
877} __packed; 878} __packed;
878 879
880struct host_cmd_ds_rf_tx_pwr {
881 __le16 action;
882 __le16 cur_level;
883 u8 max_power;
884 u8 min_power;
885} __packed;
886
879struct mwifiex_bcn_param { 887struct mwifiex_bcn_param {
880 u8 bssid[ETH_ALEN]; 888 u8 bssid[ETH_ALEN];
881 u8 rssi; 889 u8 rssi;
@@ -1361,6 +1369,7 @@ struct host_cmd_ds_command {
1361 struct host_cmd_ds_tx_rate_query tx_rate; 1369 struct host_cmd_ds_tx_rate_query tx_rate;
1362 struct host_cmd_ds_tx_rate_cfg tx_rate_cfg; 1370 struct host_cmd_ds_tx_rate_cfg tx_rate_cfg;
1363 struct host_cmd_ds_txpwr_cfg txp_cfg; 1371 struct host_cmd_ds_txpwr_cfg txp_cfg;
1372 struct host_cmd_ds_rf_tx_pwr txp;
1364 struct host_cmd_ds_802_11_ps_mode_enh psmode_enh; 1373 struct host_cmd_ds_802_11_ps_mode_enh psmode_enh;
1365 struct host_cmd_ds_802_11_hs_cfg_enh opt_hs_cfg; 1374 struct host_cmd_ds_802_11_hs_cfg_enh opt_hs_cfg;
1366 struct host_cmd_ds_802_11_scan scan; 1375 struct host_cmd_ds_802_11_scan scan;
diff --git a/drivers/net/wireless/mwifiex/sta_cmd.c b/drivers/net/wireless/mwifiex/sta_cmd.c
index 40e025da6bc2..2d4319a8941f 100644
--- a/drivers/net/wireless/mwifiex/sta_cmd.c
+++ b/drivers/net/wireless/mwifiex/sta_cmd.c
@@ -260,6 +260,23 @@ static int mwifiex_cmd_tx_power_cfg(struct host_cmd_ds_command *cmd,
260} 260}
261 261
262/* 262/*
263 * This function prepares command to get RF Tx power.
264 */
265static int mwifiex_cmd_rf_tx_power(struct mwifiex_private *priv,
266 struct host_cmd_ds_command *cmd,
267 u16 cmd_action, void *data_buf)
268{
269 struct host_cmd_ds_rf_tx_pwr *txp = &cmd->params.txp;
270
271 cmd->size = cpu_to_le16(sizeof(struct host_cmd_ds_rf_tx_pwr)
272 + S_DS_GEN);
273 cmd->command = cpu_to_le16(HostCmd_CMD_RF_TX_PWR);
274 txp->action = cpu_to_le16(cmd_action);
275
276 return 0;
277}
278
279/*
263 * This function prepares command to set Host Sleep configuration. 280 * This function prepares command to set Host Sleep configuration.
264 * 281 *
265 * Preparation includes - 282 * Preparation includes -
@@ -1055,6 +1072,10 @@ int mwifiex_sta_prepare_cmd(struct mwifiex_private *priv, uint16_t cmd_no,
1055 ret = mwifiex_cmd_tx_power_cfg(cmd_ptr, cmd_action, 1072 ret = mwifiex_cmd_tx_power_cfg(cmd_ptr, cmd_action,
1056 data_buf); 1073 data_buf);
1057 break; 1074 break;
1075 case HostCmd_CMD_RF_TX_PWR:
1076 ret = mwifiex_cmd_rf_tx_power(priv, cmd_ptr, cmd_action,
1077 data_buf);
1078 break;
1058 case HostCmd_CMD_802_11_PS_MODE_ENH: 1079 case HostCmd_CMD_802_11_PS_MODE_ENH:
1059 ret = mwifiex_cmd_enh_power_mode(priv, cmd_ptr, cmd_action, 1080 ret = mwifiex_cmd_enh_power_mode(priv, cmd_ptr, cmd_action,
1060 (uint16_t)cmd_oid, data_buf); 1081 (uint16_t)cmd_oid, data_buf);
@@ -1283,7 +1304,7 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta)
1283 priv->data_rate = 0; 1304 priv->data_rate = 0;
1284 1305
1285 /* get tx power */ 1306 /* get tx power */
1286 ret = mwifiex_send_cmd_async(priv, HostCmd_CMD_TXPWR_CFG, 1307 ret = mwifiex_send_cmd_async(priv, HostCmd_CMD_RF_TX_PWR,
1287 HostCmd_ACT_GEN_GET, 0, NULL); 1308 HostCmd_ACT_GEN_GET, 0, NULL);
1288 if (ret) 1309 if (ret)
1289 return -1; 1310 return -1;
diff --git a/drivers/net/wireless/mwifiex/sta_cmdresp.c b/drivers/net/wireless/mwifiex/sta_cmdresp.c
index a79ed9bd9695..4cb2c1c78397 100644
--- a/drivers/net/wireless/mwifiex/sta_cmdresp.c
+++ b/drivers/net/wireless/mwifiex/sta_cmdresp.c
@@ -451,6 +451,30 @@ static int mwifiex_ret_tx_power_cfg(struct mwifiex_private *priv,
451} 451}
452 452
453/* 453/*
454 * This function handles the command response of get RF Tx power.
455 */
456static int mwifiex_ret_rf_tx_power(struct mwifiex_private *priv,
457 struct host_cmd_ds_command *resp)
458{
459 struct host_cmd_ds_rf_tx_pwr *txp = &resp->params.txp;
460 u16 action = le16_to_cpu(txp->action);
461
462 priv->tx_power_level = le16_to_cpu(txp->cur_level);
463
464 if (action == HostCmd_ACT_GEN_GET) {
465 priv->max_tx_power_level = txp->max_power;
466 priv->min_tx_power_level = txp->min_power;
467 }
468
469 dev_dbg(priv->adapter->dev,
470 "Current TxPower Level=%d, Max Power=%d, Min Power=%d\n",
471 priv->tx_power_level, priv->max_tx_power_level,
472 priv->min_tx_power_level);
473
474 return 0;
475}
476
477/*
454 * This function handles the command response of set/get MAC address. 478 * This function handles the command response of set/get MAC address.
455 * 479 *
456 * Handling includes saving the MAC address in driver. 480 * Handling includes saving the MAC address in driver.
@@ -847,6 +871,9 @@ int mwifiex_process_sta_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no,
847 case HostCmd_CMD_TXPWR_CFG: 871 case HostCmd_CMD_TXPWR_CFG:
848 ret = mwifiex_ret_tx_power_cfg(priv, resp); 872 ret = mwifiex_ret_tx_power_cfg(priv, resp);
849 break; 873 break;
874 case HostCmd_CMD_RF_TX_PWR:
875 ret = mwifiex_ret_rf_tx_power(priv, resp);
876 break;
850 case HostCmd_CMD_802_11_PS_MODE_ENH: 877 case HostCmd_CMD_802_11_PS_MODE_ENH:
851 ret = mwifiex_ret_enh_power_mode(priv, resp, data_buf); 878 ret = mwifiex_ret_enh_power_mode(priv, resp, data_buf);
852 break; 879 break;