diff options
author | Amitkumar Karwar <akarwar@marvell.com> | 2012-06-27 22:57:57 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-06-28 14:37:49 -0400 |
commit | caa8984f59b8be220767886ae27de855f77e6a61 (patch) | |
tree | c7fe8bcf7a390f5982fe68a40f7e2d996446704c | |
parent | 1a1fb970472d66d1668ff66bc46c2cd977f9a4fc (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.h | 9 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/sta_cmd.c | 23 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/sta_cmdresp.c | 27 |
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 | ||
880 | struct host_cmd_ds_rf_tx_pwr { | ||
881 | __le16 action; | ||
882 | __le16 cur_level; | ||
883 | u8 max_power; | ||
884 | u8 min_power; | ||
885 | } __packed; | ||
886 | |||
879 | struct mwifiex_bcn_param { | 887 | struct 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 | */ | ||
265 | static 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 | */ | ||
456 | static 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; |