diff options
author | John W. Linville <linville@tuxdriver.com> | 2012-07-20 12:30:48 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-07-20 12:30:48 -0400 |
commit | 90b90f60c4f8e3a8525dfeb4aec46a9c7a29c857 (patch) | |
tree | 9b1d8ca6084012a02b302520bc26e5be65ba7b2a /drivers/net/wireless/libertas | |
parent | 769162e38b91e1d300752e666260fa6c7b203fbc (diff) | |
parent | 36eb22e97a2b621fb707eead58ef915ab0f46e9e (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Diffstat (limited to 'drivers/net/wireless/libertas')
-rw-r--r-- | drivers/net/wireless/libertas/cfg.c | 7 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/cmd.c | 25 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/cmd.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/dev.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/firmware.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/if_usb.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/libertas/main.c | 6 |
7 files changed, 25 insertions, 21 deletions
diff --git a/drivers/net/wireless/libertas/cfg.c b/drivers/net/wireless/libertas/cfg.c index f4a203049fb4..eb5de800ed90 100644 --- a/drivers/net/wireless/libertas/cfg.c +++ b/drivers/net/wireless/libertas/cfg.c | |||
@@ -805,7 +805,6 @@ void lbs_scan_done(struct lbs_private *priv) | |||
805 | } | 805 | } |
806 | 806 | ||
807 | static int lbs_cfg_scan(struct wiphy *wiphy, | 807 | static int lbs_cfg_scan(struct wiphy *wiphy, |
808 | struct net_device *dev, | ||
809 | struct cfg80211_scan_request *request) | 808 | struct cfg80211_scan_request *request) |
810 | { | 809 | { |
811 | struct lbs_private *priv = wiphy_priv(wiphy); | 810 | struct lbs_private *priv = wiphy_priv(wiphy); |
@@ -2181,13 +2180,15 @@ int lbs_reg_notifier(struct wiphy *wiphy, | |||
2181 | struct regulatory_request *request) | 2180 | struct regulatory_request *request) |
2182 | { | 2181 | { |
2183 | struct lbs_private *priv = wiphy_priv(wiphy); | 2182 | struct lbs_private *priv = wiphy_priv(wiphy); |
2184 | int ret; | 2183 | int ret = 0; |
2185 | 2184 | ||
2186 | lbs_deb_enter_args(LBS_DEB_CFG80211, "cfg80211 regulatory domain " | 2185 | lbs_deb_enter_args(LBS_DEB_CFG80211, "cfg80211 regulatory domain " |
2187 | "callback for domain %c%c\n", request->alpha2[0], | 2186 | "callback for domain %c%c\n", request->alpha2[0], |
2188 | request->alpha2[1]); | 2187 | request->alpha2[1]); |
2189 | 2188 | ||
2190 | ret = lbs_set_11d_domain_info(priv, request, wiphy->bands); | 2189 | memcpy(priv->country_code, request->alpha2, sizeof(request->alpha2)); |
2190 | if (lbs_iface_active(priv)) | ||
2191 | ret = lbs_set_11d_domain_info(priv); | ||
2191 | 2192 | ||
2192 | lbs_deb_leave(LBS_DEB_CFG80211); | 2193 | lbs_deb_leave(LBS_DEB_CFG80211); |
2193 | return ret; | 2194 | return ret; |
diff --git a/drivers/net/wireless/libertas/cmd.c b/drivers/net/wireless/libertas/cmd.c index d798bcc0d83a..26e68326710b 100644 --- a/drivers/net/wireless/libertas/cmd.c +++ b/drivers/net/wireless/libertas/cmd.c | |||
@@ -733,15 +733,13 @@ int lbs_get_rssi(struct lbs_private *priv, s8 *rssi, s8 *nf) | |||
733 | * to the firmware | 733 | * to the firmware |
734 | * | 734 | * |
735 | * @priv: pointer to &struct lbs_private | 735 | * @priv: pointer to &struct lbs_private |
736 | * @request: cfg80211 regulatory request structure | ||
737 | * @bands: the device's supported bands and channels | ||
738 | * | 736 | * |
739 | * returns: 0 on success, error code on failure | 737 | * returns: 0 on success, error code on failure |
740 | */ | 738 | */ |
741 | int lbs_set_11d_domain_info(struct lbs_private *priv, | 739 | int lbs_set_11d_domain_info(struct lbs_private *priv) |
742 | struct regulatory_request *request, | ||
743 | struct ieee80211_supported_band **bands) | ||
744 | { | 740 | { |
741 | struct wiphy *wiphy = priv->wdev->wiphy; | ||
742 | struct ieee80211_supported_band **bands = wiphy->bands; | ||
745 | struct cmd_ds_802_11d_domain_info cmd; | 743 | struct cmd_ds_802_11d_domain_info cmd; |
746 | struct mrvl_ie_domain_param_set *domain = &cmd.domain; | 744 | struct mrvl_ie_domain_param_set *domain = &cmd.domain; |
747 | struct ieee80211_country_ie_triplet *t; | 745 | struct ieee80211_country_ie_triplet *t; |
@@ -752,21 +750,23 @@ int lbs_set_11d_domain_info(struct lbs_private *priv, | |||
752 | u8 first_channel = 0, next_chan = 0, max_pwr = 0; | 750 | u8 first_channel = 0, next_chan = 0, max_pwr = 0; |
753 | u8 i, flag = 0; | 751 | u8 i, flag = 0; |
754 | size_t triplet_size; | 752 | size_t triplet_size; |
755 | int ret; | 753 | int ret = 0; |
756 | 754 | ||
757 | lbs_deb_enter(LBS_DEB_11D); | 755 | lbs_deb_enter(LBS_DEB_11D); |
756 | if (!priv->country_code[0]) | ||
757 | goto out; | ||
758 | 758 | ||
759 | memset(&cmd, 0, sizeof(cmd)); | 759 | memset(&cmd, 0, sizeof(cmd)); |
760 | cmd.action = cpu_to_le16(CMD_ACT_SET); | 760 | cmd.action = cpu_to_le16(CMD_ACT_SET); |
761 | 761 | ||
762 | lbs_deb_11d("Setting country code '%c%c'\n", | 762 | lbs_deb_11d("Setting country code '%c%c'\n", |
763 | request->alpha2[0], request->alpha2[1]); | 763 | priv->country_code[0], priv->country_code[1]); |
764 | 764 | ||
765 | domain->header.type = cpu_to_le16(TLV_TYPE_DOMAIN); | 765 | domain->header.type = cpu_to_le16(TLV_TYPE_DOMAIN); |
766 | 766 | ||
767 | /* Set country code */ | 767 | /* Set country code */ |
768 | domain->country_code[0] = request->alpha2[0]; | 768 | domain->country_code[0] = priv->country_code[0]; |
769 | domain->country_code[1] = request->alpha2[1]; | 769 | domain->country_code[1] = priv->country_code[1]; |
770 | domain->country_code[2] = ' '; | 770 | domain->country_code[2] = ' '; |
771 | 771 | ||
772 | /* Now set up the channel triplets; firmware is somewhat picky here | 772 | /* Now set up the channel triplets; firmware is somewhat picky here |
@@ -848,6 +848,7 @@ int lbs_set_11d_domain_info(struct lbs_private *priv, | |||
848 | 848 | ||
849 | ret = lbs_cmd_with_response(priv, CMD_802_11D_DOMAIN_INFO, &cmd); | 849 | ret = lbs_cmd_with_response(priv, CMD_802_11D_DOMAIN_INFO, &cmd); |
850 | 850 | ||
851 | out: | ||
851 | lbs_deb_leave_args(LBS_DEB_11D, "ret %d", ret); | 852 | lbs_deb_leave_args(LBS_DEB_11D, "ret %d", ret); |
852 | return ret; | 853 | return ret; |
853 | } | 854 | } |
@@ -1019,9 +1020,9 @@ static void lbs_submit_command(struct lbs_private *priv, | |||
1019 | if (ret) { | 1020 | if (ret) { |
1020 | netdev_info(priv->dev, "DNLD_CMD: hw_host_to_card failed: %d\n", | 1021 | netdev_info(priv->dev, "DNLD_CMD: hw_host_to_card failed: %d\n", |
1021 | ret); | 1022 | ret); |
1022 | /* Let the timer kick in and retry, and potentially reset | 1023 | /* Reset dnld state machine, report failure */ |
1023 | the whole thing if the condition persists */ | 1024 | priv->dnld_sent = DNLD_RES_RECEIVED; |
1024 | timeo = HZ/4; | 1025 | lbs_complete_command(priv, cmdnode, ret); |
1025 | } | 1026 | } |
1026 | 1027 | ||
1027 | if (command == CMD_802_11_DEEP_SLEEP) { | 1028 | if (command == CMD_802_11_DEEP_SLEEP) { |
diff --git a/drivers/net/wireless/libertas/cmd.h b/drivers/net/wireless/libertas/cmd.h index b280ef7a0aea..ab07608e13d0 100644 --- a/drivers/net/wireless/libertas/cmd.h +++ b/drivers/net/wireless/libertas/cmd.h | |||
@@ -128,9 +128,7 @@ int lbs_set_monitor_mode(struct lbs_private *priv, int enable); | |||
128 | 128 | ||
129 | int lbs_get_rssi(struct lbs_private *priv, s8 *snr, s8 *nf); | 129 | int lbs_get_rssi(struct lbs_private *priv, s8 *snr, s8 *nf); |
130 | 130 | ||
131 | int lbs_set_11d_domain_info(struct lbs_private *priv, | 131 | int lbs_set_11d_domain_info(struct lbs_private *priv); |
132 | struct regulatory_request *request, | ||
133 | struct ieee80211_supported_band **bands); | ||
134 | 132 | ||
135 | int lbs_get_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 *value); | 133 | int lbs_get_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 *value); |
136 | 134 | ||
diff --git a/drivers/net/wireless/libertas/dev.h b/drivers/net/wireless/libertas/dev.h index 60996ce89f77..6bd1608992b0 100644 --- a/drivers/net/wireless/libertas/dev.h +++ b/drivers/net/wireless/libertas/dev.h | |||
@@ -49,6 +49,7 @@ struct lbs_private { | |||
49 | bool wiphy_registered; | 49 | bool wiphy_registered; |
50 | struct cfg80211_scan_request *scan_req; | 50 | struct cfg80211_scan_request *scan_req; |
51 | u8 assoc_bss[ETH_ALEN]; | 51 | u8 assoc_bss[ETH_ALEN]; |
52 | u8 country_code[IEEE80211_COUNTRY_STRING_LEN]; | ||
52 | u8 disassoc_reason; | 53 | u8 disassoc_reason; |
53 | 54 | ||
54 | /* Mesh */ | 55 | /* Mesh */ |
diff --git a/drivers/net/wireless/libertas/firmware.c b/drivers/net/wireless/libertas/firmware.c index 601f2075355e..c0f9e7e862f6 100644 --- a/drivers/net/wireless/libertas/firmware.c +++ b/drivers/net/wireless/libertas/firmware.c | |||
@@ -4,9 +4,7 @@ | |||
4 | 4 | ||
5 | #include <linux/sched.h> | 5 | #include <linux/sched.h> |
6 | #include <linux/firmware.h> | 6 | #include <linux/firmware.h> |
7 | #include <linux/firmware.h> | ||
8 | #include <linux/module.h> | 7 | #include <linux/module.h> |
9 | #include <linux/sched.h> | ||
10 | 8 | ||
11 | #include "dev.h" | 9 | #include "dev.h" |
12 | #include "decl.h" | 10 | #include "decl.h" |
diff --git a/drivers/net/wireless/libertas/if_usb.c b/drivers/net/wireless/libertas/if_usb.c index 64b7dc5de126..55a77e41170a 100644 --- a/drivers/net/wireless/libertas/if_usb.c +++ b/drivers/net/wireless/libertas/if_usb.c | |||
@@ -309,7 +309,6 @@ static void if_usb_disconnect(struct usb_interface *intf) | |||
309 | cardp->surprise_removed = 1; | 309 | cardp->surprise_removed = 1; |
310 | 310 | ||
311 | if (priv) { | 311 | if (priv) { |
312 | priv->surpriseremoved = 1; | ||
313 | lbs_stop_card(priv); | 312 | lbs_stop_card(priv); |
314 | lbs_remove_card(priv); | 313 | lbs_remove_card(priv); |
315 | } | 314 | } |
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index e96ee0aa8439..58048189bd24 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c | |||
@@ -152,6 +152,12 @@ int lbs_start_iface(struct lbs_private *priv) | |||
152 | goto err; | 152 | goto err; |
153 | } | 153 | } |
154 | 154 | ||
155 | ret = lbs_set_11d_domain_info(priv); | ||
156 | if (ret) { | ||
157 | lbs_deb_net("set 11d domain info failed\n"); | ||
158 | goto err; | ||
159 | } | ||
160 | |||
155 | lbs_update_channel(priv); | 161 | lbs_update_channel(priv); |
156 | 162 | ||
157 | priv->iface_running = true; | 163 | priv->iface_running = true; |