diff options
-rw-r--r-- | drivers/net/wireless/mwifiex/cfg80211.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/fw.h | 10 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/main.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/sta_cmd.c | 38 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/sta_cmdresp.c | 31 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/sta_ioctl.c | 163 |
6 files changed, 2 insertions, 259 deletions
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c index e27b3168862c..7276a3449e17 100644 --- a/drivers/net/wireless/mwifiex/cfg80211.c +++ b/drivers/net/wireless/mwifiex/cfg80211.c | |||
@@ -349,7 +349,6 @@ mwifiex_set_rf_channel(struct mwifiex_private *priv, | |||
349 | struct ieee80211_channel *chan, | 349 | struct ieee80211_channel *chan, |
350 | enum nl80211_channel_type channel_type) | 350 | enum nl80211_channel_type channel_type) |
351 | { | 351 | { |
352 | struct mwifiex_chan_freq_power cfp; | ||
353 | u32 config_bands = 0; | 352 | u32 config_bands = 0; |
354 | struct wiphy *wiphy = priv->wdev->wiphy; | 353 | struct wiphy *wiphy = priv->wdev->wiphy; |
355 | struct mwifiex_adapter *adapter = priv->adapter; | 354 | struct mwifiex_adapter *adapter = priv->adapter; |
@@ -389,24 +388,14 @@ mwifiex_set_rf_channel(struct mwifiex_private *priv, | |||
389 | mwifiex_cfg80211_channel_type_to_sec_chan_offset | 388 | mwifiex_cfg80211_channel_type_to_sec_chan_offset |
390 | (channel_type); | 389 | (channel_type); |
391 | adapter->channel_type = channel_type; | 390 | adapter->channel_type = channel_type; |
391 | priv->adhoc_channel = | ||
392 | ieee80211_frequency_to_channel(chan->center_freq); | ||
392 | 393 | ||
393 | mwifiex_send_domain_info_cmd_fw(wiphy); | 394 | mwifiex_send_domain_info_cmd_fw(wiphy); |
394 | } | 395 | } |
395 | 396 | ||
396 | wiphy_dbg(wiphy, "info: setting band %d, chan offset %d, mode %d\n", | 397 | wiphy_dbg(wiphy, "info: setting band %d, chan offset %d, mode %d\n", |
397 | config_bands, adapter->sec_chan_offset, priv->bss_mode); | 398 | config_bands, adapter->sec_chan_offset, priv->bss_mode); |
398 | if (!chan) | ||
399 | return 0; | ||
400 | |||
401 | memset(&cfp, 0, sizeof(cfp)); | ||
402 | cfp.freq = chan->center_freq; | ||
403 | cfp.channel = ieee80211_frequency_to_channel(chan->center_freq); | ||
404 | |||
405 | if (priv->bss_type == MWIFIEX_BSS_TYPE_STA) { | ||
406 | if (mwifiex_bss_set_channel(priv, &cfp)) | ||
407 | return -EFAULT; | ||
408 | return mwifiex_drv_change_adhoc_chan(priv, cfp.channel); | ||
409 | } | ||
410 | 399 | ||
411 | return 0; | 400 | return 0; |
412 | } | 401 | } |
diff --git a/drivers/net/wireless/mwifiex/fw.h b/drivers/net/wireless/mwifiex/fw.h index 14e985d01dee..e831b440a24a 100644 --- a/drivers/net/wireless/mwifiex/fw.h +++ b/drivers/net/wireless/mwifiex/fw.h | |||
@@ -225,7 +225,6 @@ enum MWIFIEX_802_11_PRIVACY_FILTER { | |||
225 | #define HostCmd_CMD_BBP_REG_ACCESS 0x001a | 225 | #define HostCmd_CMD_BBP_REG_ACCESS 0x001a |
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 | ||
229 | #define HostCmd_CMD_RF_TX_PWR 0x001e | 228 | #define HostCmd_CMD_RF_TX_PWR 0x001e |
230 | #define HostCmd_CMD_RF_ANTENNA 0x0020 | 229 | #define HostCmd_CMD_RF_ANTENNA 0x0020 |
231 | #define HostCmd_CMD_802_11_DEAUTHENTICATE 0x0024 | 230 | #define HostCmd_CMD_802_11_DEAUTHENTICATE 0x0024 |
@@ -1292,14 +1291,6 @@ struct host_cmd_tlv_channel_band { | |||
1292 | u8 channel; | 1291 | u8 channel; |
1293 | } __packed; | 1292 | } __packed; |
1294 | 1293 | ||
1295 | struct host_cmd_ds_802_11_rf_channel { | ||
1296 | __le16 action; | ||
1297 | __le16 current_channel; | ||
1298 | __le16 rf_type; | ||
1299 | __le16 reserved; | ||
1300 | u8 reserved_1[32]; | ||
1301 | } __packed; | ||
1302 | |||
1303 | struct host_cmd_ds_version_ext { | 1294 | struct host_cmd_ds_version_ext { |
1304 | u8 version_str_sel; | 1295 | u8 version_str_sel; |
1305 | char version_str[128]; | 1296 | char version_str[128]; |
@@ -1384,7 +1375,6 @@ struct host_cmd_ds_command { | |||
1384 | struct host_cmd_ds_802_11_rssi_info rssi_info; | 1375 | struct host_cmd_ds_802_11_rssi_info rssi_info; |
1385 | struct host_cmd_ds_802_11_rssi_info_rsp rssi_info_rsp; | 1376 | struct host_cmd_ds_802_11_rssi_info_rsp rssi_info_rsp; |
1386 | struct host_cmd_ds_802_11_snmp_mib smib; | 1377 | struct host_cmd_ds_802_11_snmp_mib smib; |
1387 | struct host_cmd_ds_802_11_rf_channel rf_channel; | ||
1388 | struct host_cmd_ds_tx_rate_query tx_rate; | 1378 | struct host_cmd_ds_tx_rate_query tx_rate; |
1389 | struct host_cmd_ds_tx_rate_cfg tx_rate_cfg; | 1379 | struct host_cmd_ds_tx_rate_cfg tx_rate_cfg; |
1390 | struct host_cmd_ds_txpwr_cfg txp_cfg; | 1380 | struct host_cmd_ds_txpwr_cfg txp_cfg; |
diff --git a/drivers/net/wireless/mwifiex/main.h b/drivers/net/wireless/mwifiex/main.h index 774880d5cb56..b710649ccf15 100644 --- a/drivers/net/wireless/mwifiex/main.h +++ b/drivers/net/wireless/mwifiex/main.h | |||
@@ -953,8 +953,6 @@ int mwifiex_scan_networks(struct mwifiex_private *priv, | |||
953 | const struct mwifiex_user_scan_cfg *user_scan_in); | 953 | const struct mwifiex_user_scan_cfg *user_scan_in); |
954 | int mwifiex_set_radio(struct mwifiex_private *priv, u8 option); | 954 | int mwifiex_set_radio(struct mwifiex_private *priv, u8 option); |
955 | 955 | ||
956 | int mwifiex_drv_change_adhoc_chan(struct mwifiex_private *priv, u16 channel); | ||
957 | |||
958 | int mwifiex_set_encode(struct mwifiex_private *priv, const u8 *key, | 956 | int mwifiex_set_encode(struct mwifiex_private *priv, const u8 *key, |
959 | int key_len, u8 key_index, const u8 *mac_addr, | 957 | int key_len, u8 key_index, const u8 *mac_addr, |
960 | int disable); | 958 | int disable); |
@@ -993,8 +991,6 @@ int mwifiex_set_tx_power(struct mwifiex_private *priv, | |||
993 | 991 | ||
994 | int mwifiex_main_process(struct mwifiex_adapter *); | 992 | int mwifiex_main_process(struct mwifiex_adapter *); |
995 | 993 | ||
996 | int mwifiex_bss_set_channel(struct mwifiex_private *, | ||
997 | struct mwifiex_chan_freq_power *cfp); | ||
998 | int mwifiex_get_bss_info(struct mwifiex_private *, | 994 | int mwifiex_get_bss_info(struct mwifiex_private *, |
999 | struct mwifiex_bss_info *); | 995 | struct mwifiex_bss_info *); |
1000 | int mwifiex_fill_new_bss_desc(struct mwifiex_private *priv, | 996 | int mwifiex_fill_new_bss_desc(struct mwifiex_private *priv, |
diff --git a/drivers/net/wireless/mwifiex/sta_cmd.c b/drivers/net/wireless/mwifiex/sta_cmd.c index 75eaa6f877fa..93b06cd4e176 100644 --- a/drivers/net/wireless/mwifiex/sta_cmd.c +++ b/drivers/net/wireless/mwifiex/sta_cmd.c | |||
@@ -745,40 +745,6 @@ static int mwifiex_cmd_802_11d_domain_info(struct mwifiex_private *priv, | |||
745 | } | 745 | } |
746 | 746 | ||
747 | /* | 747 | /* |
748 | * This function prepares command to set/get RF channel. | ||
749 | * | ||
750 | * Preparation includes - | ||
751 | * - Setting command ID, action and proper size | ||
752 | * - Setting RF type and current RF channel (for SET only) | ||
753 | * - Ensuring correct endian-ness | ||
754 | */ | ||
755 | static int mwifiex_cmd_802_11_rf_channel(struct mwifiex_private *priv, | ||
756 | struct host_cmd_ds_command *cmd, | ||
757 | u16 cmd_action, u16 *channel) | ||
758 | { | ||
759 | struct host_cmd_ds_802_11_rf_channel *rf_chan = | ||
760 | &cmd->params.rf_channel; | ||
761 | uint16_t rf_type = le16_to_cpu(rf_chan->rf_type); | ||
762 | |||
763 | cmd->command = cpu_to_le16(HostCmd_CMD_802_11_RF_CHANNEL); | ||
764 | cmd->size = cpu_to_le16(sizeof(struct host_cmd_ds_802_11_rf_channel) | ||
765 | + S_DS_GEN); | ||
766 | |||
767 | if (cmd_action == HostCmd_ACT_GEN_SET) { | ||
768 | if ((priv->adapter->adhoc_start_band & BAND_A) || | ||
769 | (priv->adapter->adhoc_start_band & BAND_AN)) | ||
770 | rf_chan->rf_type = | ||
771 | cpu_to_le16(HostCmd_SCAN_RADIO_TYPE_A); | ||
772 | |||
773 | rf_type = le16_to_cpu(rf_chan->rf_type); | ||
774 | SET_SECONDARYCHAN(rf_type, priv->adapter->sec_chan_offset); | ||
775 | rf_chan->current_channel = cpu_to_le16(*channel); | ||
776 | } | ||
777 | rf_chan->action = cpu_to_le16(cmd_action); | ||
778 | return 0; | ||
779 | } | ||
780 | |||
781 | /* | ||
782 | * This function prepares command to set/get IBSS coalescing status. | 748 | * This function prepares command to set/get IBSS coalescing status. |
783 | * | 749 | * |
784 | * Preparation includes - | 750 | * Preparation includes - |
@@ -1175,10 +1141,6 @@ int mwifiex_sta_prepare_cmd(struct mwifiex_private *priv, uint16_t cmd_no, | |||
1175 | S_DS_GEN); | 1141 | S_DS_GEN); |
1176 | ret = 0; | 1142 | ret = 0; |
1177 | break; | 1143 | break; |
1178 | case HostCmd_CMD_802_11_RF_CHANNEL: | ||
1179 | ret = mwifiex_cmd_802_11_rf_channel(priv, cmd_ptr, cmd_action, | ||
1180 | data_buf); | ||
1181 | break; | ||
1182 | case HostCmd_CMD_FUNC_INIT: | 1144 | case HostCmd_CMD_FUNC_INIT: |
1183 | if (priv->adapter->hw_status == MWIFIEX_HW_STATUS_RESET) | 1145 | if (priv->adapter->hw_status == MWIFIEX_HW_STATUS_RESET) |
1184 | priv->adapter->hw_status = MWIFIEX_HW_STATUS_READY; | 1146 | priv->adapter->hw_status = MWIFIEX_HW_STATUS_READY; |
diff --git a/drivers/net/wireless/mwifiex/sta_cmdresp.c b/drivers/net/wireless/mwifiex/sta_cmdresp.c index 71c9b5b92e6d..43ede5e58851 100644 --- a/drivers/net/wireless/mwifiex/sta_cmdresp.c +++ b/drivers/net/wireless/mwifiex/sta_cmdresp.c | |||
@@ -656,34 +656,6 @@ static int mwifiex_ret_802_11d_domain_info(struct mwifiex_private *priv, | |||
656 | } | 656 | } |
657 | 657 | ||
658 | /* | 658 | /* |
659 | * This function handles the command response of get RF channel. | ||
660 | * | ||
661 | * Handling includes changing the header fields into CPU format | ||
662 | * and saving the new channel in driver. | ||
663 | */ | ||
664 | static int mwifiex_ret_802_11_rf_channel(struct mwifiex_private *priv, | ||
665 | struct host_cmd_ds_command *resp, | ||
666 | u16 *data_buf) | ||
667 | { | ||
668 | struct host_cmd_ds_802_11_rf_channel *rf_channel = | ||
669 | &resp->params.rf_channel; | ||
670 | u16 new_channel = le16_to_cpu(rf_channel->current_channel); | ||
671 | |||
672 | if (priv->curr_bss_params.bss_descriptor.channel != new_channel) { | ||
673 | dev_dbg(priv->adapter->dev, "cmd: Channel Switch: %d to %d\n", | ||
674 | priv->curr_bss_params.bss_descriptor.channel, | ||
675 | new_channel); | ||
676 | /* Update the channel again */ | ||
677 | priv->curr_bss_params.bss_descriptor.channel = new_channel; | ||
678 | } | ||
679 | |||
680 | if (data_buf) | ||
681 | *data_buf = new_channel; | ||
682 | |||
683 | return 0; | ||
684 | } | ||
685 | |||
686 | /* | ||
687 | * This function handles the command response of get extended version. | 659 | * This function handles the command response of get extended version. |
688 | * | 660 | * |
689 | * Handling includes forming the extended version string and sending it | 661 | * Handling includes forming the extended version string and sending it |
@@ -935,9 +907,6 @@ int mwifiex_process_sta_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no, | |||
935 | case HostCmd_CMD_802_11_TX_RATE_QUERY: | 907 | case HostCmd_CMD_802_11_TX_RATE_QUERY: |
936 | ret = mwifiex_ret_802_11_tx_rate_query(priv, resp); | 908 | ret = mwifiex_ret_802_11_tx_rate_query(priv, resp); |
937 | break; | 909 | break; |
938 | case HostCmd_CMD_802_11_RF_CHANNEL: | ||
939 | ret = mwifiex_ret_802_11_rf_channel(priv, resp, data_buf); | ||
940 | break; | ||
941 | case HostCmd_CMD_VERSION_EXT: | 910 | case HostCmd_CMD_VERSION_EXT: |
942 | ret = mwifiex_ret_ver_ext(priv, resp, data_buf); | 911 | ret = mwifiex_ret_ver_ext(priv, resp, data_buf); |
943 | break; | 912 | break; |
diff --git a/drivers/net/wireless/mwifiex/sta_ioctl.c b/drivers/net/wireless/mwifiex/sta_ioctl.c index f2fd2423214f..6dff01650242 100644 --- a/drivers/net/wireless/mwifiex/sta_ioctl.c +++ b/drivers/net/wireless/mwifiex/sta_ioctl.c | |||
@@ -497,169 +497,6 @@ int mwifiex_disable_auto_ds(struct mwifiex_private *priv) | |||
497 | EXPORT_SYMBOL_GPL(mwifiex_disable_auto_ds); | 497 | EXPORT_SYMBOL_GPL(mwifiex_disable_auto_ds); |
498 | 498 | ||
499 | /* | 499 | /* |
500 | * IOCTL request handler to set/get active channel. | ||
501 | * | ||
502 | * This function performs validity checking on channel/frequency | ||
503 | * compatibility and returns failure if not valid. | ||
504 | */ | ||
505 | int mwifiex_bss_set_channel(struct mwifiex_private *priv, | ||
506 | struct mwifiex_chan_freq_power *chan) | ||
507 | { | ||
508 | struct mwifiex_adapter *adapter = priv->adapter; | ||
509 | struct mwifiex_chan_freq_power *cfp = NULL; | ||
510 | |||
511 | if (!chan) | ||
512 | return -1; | ||
513 | |||
514 | if (!chan->channel && !chan->freq) | ||
515 | return -1; | ||
516 | if (adapter->adhoc_start_band & BAND_AN) | ||
517 | adapter->adhoc_start_band = BAND_G | BAND_B | BAND_GN; | ||
518 | else if (adapter->adhoc_start_band & BAND_A) | ||
519 | adapter->adhoc_start_band = BAND_G | BAND_B; | ||
520 | if (chan->channel) { | ||
521 | if (chan->channel <= MAX_CHANNEL_BAND_BG) | ||
522 | cfp = mwifiex_get_cfp(priv, 0, (u16) chan->channel, 0); | ||
523 | if (!cfp) { | ||
524 | cfp = mwifiex_get_cfp(priv, BAND_A, | ||
525 | (u16) chan->channel, 0); | ||
526 | if (cfp) { | ||
527 | if (adapter->adhoc_11n_enabled) | ||
528 | adapter->adhoc_start_band = BAND_A | ||
529 | | BAND_AN; | ||
530 | else | ||
531 | adapter->adhoc_start_band = BAND_A; | ||
532 | } | ||
533 | } | ||
534 | } else { | ||
535 | if (chan->freq <= MAX_FREQUENCY_BAND_BG) | ||
536 | cfp = mwifiex_get_cfp(priv, 0, 0, chan->freq); | ||
537 | if (!cfp) { | ||
538 | cfp = mwifiex_get_cfp(priv, BAND_A, 0, chan->freq); | ||
539 | if (cfp) { | ||
540 | if (adapter->adhoc_11n_enabled) | ||
541 | adapter->adhoc_start_band = BAND_A | ||
542 | | BAND_AN; | ||
543 | else | ||
544 | adapter->adhoc_start_band = BAND_A; | ||
545 | } | ||
546 | } | ||
547 | } | ||
548 | if (!cfp || !cfp->channel) { | ||
549 | dev_err(adapter->dev, "invalid channel/freq\n"); | ||
550 | return -1; | ||
551 | } | ||
552 | priv->adhoc_channel = (u8) cfp->channel; | ||
553 | chan->channel = cfp->channel; | ||
554 | chan->freq = cfp->freq; | ||
555 | |||
556 | return 0; | ||
557 | } | ||
558 | |||
559 | /* | ||
560 | * IOCTL request handler to set/get Ad-Hoc channel. | ||
561 | * | ||
562 | * This function prepares the correct firmware command and | ||
563 | * issues it to set or get the ad-hoc channel. | ||
564 | */ | ||
565 | static int mwifiex_bss_ioctl_ibss_channel(struct mwifiex_private *priv, | ||
566 | u16 action, u16 *channel) | ||
567 | { | ||
568 | if (action == HostCmd_ACT_GEN_GET) { | ||
569 | if (!priv->media_connected) { | ||
570 | *channel = priv->adhoc_channel; | ||
571 | return 0; | ||
572 | } | ||
573 | } else { | ||
574 | priv->adhoc_channel = (u8) *channel; | ||
575 | } | ||
576 | |||
577 | return mwifiex_send_cmd_sync(priv, HostCmd_CMD_802_11_RF_CHANNEL, | ||
578 | action, 0, channel); | ||
579 | } | ||
580 | |||
581 | /* | ||
582 | * IOCTL request handler to change Ad-Hoc channel. | ||
583 | * | ||
584 | * This function allocates the IOCTL request buffer, fills it | ||
585 | * with requisite parameters and calls the IOCTL handler. | ||
586 | * | ||
587 | * The function follows the following steps to perform the change - | ||
588 | * - Get current IBSS information | ||
589 | * - Get current channel | ||
590 | * - If no change is required, return | ||
591 | * - If not connected, change channel and return | ||
592 | * - If connected, | ||
593 | * - Disconnect | ||
594 | * - Change channel | ||
595 | * - Perform specific SSID scan with same SSID | ||
596 | * - Start/Join the IBSS | ||
597 | */ | ||
598 | int | ||
599 | mwifiex_drv_change_adhoc_chan(struct mwifiex_private *priv, u16 channel) | ||
600 | { | ||
601 | int ret; | ||
602 | struct mwifiex_bss_info bss_info; | ||
603 | struct mwifiex_ssid_bssid ssid_bssid; | ||
604 | u16 curr_chan = 0; | ||
605 | struct cfg80211_bss *bss = NULL; | ||
606 | struct ieee80211_channel *chan; | ||
607 | enum ieee80211_band band; | ||
608 | |||
609 | memset(&bss_info, 0, sizeof(bss_info)); | ||
610 | |||
611 | /* Get BSS information */ | ||
612 | if (mwifiex_get_bss_info(priv, &bss_info)) | ||
613 | return -1; | ||
614 | |||
615 | /* Get current channel */ | ||
616 | ret = mwifiex_bss_ioctl_ibss_channel(priv, HostCmd_ACT_GEN_GET, | ||
617 | &curr_chan); | ||
618 | |||
619 | if (curr_chan == channel) { | ||
620 | ret = 0; | ||
621 | goto done; | ||
622 | } | ||
623 | dev_dbg(priv->adapter->dev, "cmd: updating channel from %d to %d\n", | ||
624 | curr_chan, channel); | ||
625 | |||
626 | if (!bss_info.media_connected) { | ||
627 | ret = 0; | ||
628 | goto done; | ||
629 | } | ||
630 | |||
631 | /* Do disonnect */ | ||
632 | memset(&ssid_bssid, 0, ETH_ALEN); | ||
633 | ret = mwifiex_deauthenticate(priv, ssid_bssid.bssid); | ||
634 | |||
635 | ret = mwifiex_bss_ioctl_ibss_channel(priv, HostCmd_ACT_GEN_SET, | ||
636 | &channel); | ||
637 | |||
638 | /* Do specific SSID scanning */ | ||
639 | if (mwifiex_request_scan(priv, &bss_info.ssid)) { | ||
640 | ret = -1; | ||
641 | goto done; | ||
642 | } | ||
643 | |||
644 | band = mwifiex_band_to_radio_type(priv->curr_bss_params.band); | ||
645 | chan = __ieee80211_get_channel(priv->wdev->wiphy, | ||
646 | ieee80211_channel_to_frequency(channel, | ||
647 | band)); | ||
648 | |||
649 | /* Find the BSS we want using available scan results */ | ||
650 | bss = cfg80211_get_bss(priv->wdev->wiphy, chan, bss_info.bssid, | ||
651 | bss_info.ssid.ssid, bss_info.ssid.ssid_len, | ||
652 | WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); | ||
653 | if (!bss) | ||
654 | wiphy_warn(priv->wdev->wiphy, "assoc: bss %pM not in scan results\n", | ||
655 | bss_info.bssid); | ||
656 | |||
657 | ret = mwifiex_bss_start(priv, bss, &bss_info.ssid); | ||
658 | done: | ||
659 | return ret; | ||
660 | } | ||
661 | |||
662 | /* | ||
663 | * IOCTL request handler to get rate. | 500 | * IOCTL request handler to get rate. |
664 | * | 501 | * |
665 | * This function prepares the correct firmware command and | 502 | * This function prepares the correct firmware command and |