diff options
author | John W. Linville <linville@tuxdriver.com> | 2011-10-17 15:05:26 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-10-17 15:05:26 -0400 |
commit | 41ebe9cde738a972d05c7282e09f5ed54cff0e8d (patch) | |
tree | 223bf0feb7305e46989b60c3f070bef87d5fcab4 /drivers/net/wireless/libertas/main.c | |
parent | fd38f734cb8200529e281338514945fcbff2364b (diff) | |
parent | 5c1381ac3f3f49ab1e0886ea8f1432c9a5def519 (diff) |
Merge branch 'master' of git://git.infradead.org/users/linville/wireless-next into for-davem
Diffstat (limited to 'drivers/net/wireless/libertas/main.c')
-rw-r--r-- | drivers/net/wireless/libertas/main.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/net/wireless/libertas/main.c b/drivers/net/wireless/libertas/main.c index c50ae07e2e89..b03779bcd547 100644 --- a/drivers/net/wireless/libertas/main.c +++ b/drivers/net/wireless/libertas/main.c | |||
@@ -99,6 +99,32 @@ u8 lbs_data_rate_to_fw_index(u32 rate) | |||
99 | return 0; | 99 | return 0; |
100 | } | 100 | } |
101 | 101 | ||
102 | int lbs_set_iface_type(struct lbs_private *priv, enum nl80211_iftype type) | ||
103 | { | ||
104 | int ret = 0; | ||
105 | |||
106 | switch (type) { | ||
107 | case NL80211_IFTYPE_MONITOR: | ||
108 | ret = lbs_set_monitor_mode(priv, 1); | ||
109 | break; | ||
110 | case NL80211_IFTYPE_STATION: | ||
111 | if (priv->wdev->iftype == NL80211_IFTYPE_MONITOR) | ||
112 | ret = lbs_set_monitor_mode(priv, 0); | ||
113 | if (!ret) | ||
114 | ret = lbs_set_snmp_mib(priv, SNMP_MIB_OID_BSS_TYPE, 1); | ||
115 | break; | ||
116 | case NL80211_IFTYPE_ADHOC: | ||
117 | if (priv->wdev->iftype == NL80211_IFTYPE_MONITOR) | ||
118 | ret = lbs_set_monitor_mode(priv, 0); | ||
119 | if (!ret) | ||
120 | ret = lbs_set_snmp_mib(priv, SNMP_MIB_OID_BSS_TYPE, 2); | ||
121 | break; | ||
122 | default: | ||
123 | ret = -ENOTSUPP; | ||
124 | } | ||
125 | return ret; | ||
126 | } | ||
127 | |||
102 | int lbs_start_iface(struct lbs_private *priv) | 128 | int lbs_start_iface(struct lbs_private *priv) |
103 | { | 129 | { |
104 | struct cmd_ds_802_11_mac_address cmd; | 130 | struct cmd_ds_802_11_mac_address cmd; |
@@ -120,6 +146,12 @@ int lbs_start_iface(struct lbs_private *priv) | |||
120 | goto err; | 146 | goto err; |
121 | } | 147 | } |
122 | 148 | ||
149 | ret = lbs_set_iface_type(priv, priv->wdev->iftype); | ||
150 | if (ret) { | ||
151 | lbs_deb_net("set iface type failed\n"); | ||
152 | goto err; | ||
153 | } | ||
154 | |||
123 | lbs_update_channel(priv); | 155 | lbs_update_channel(priv); |
124 | 156 | ||
125 | priv->iface_running = true; | 157 | priv->iface_running = true; |