diff options
author | Sujith Manoharan <Sujith.Manoharan@atheros.com> | 2011-02-20 21:19:23 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-02-23 16:25:27 -0500 |
commit | da8d9d937b34cf5d82e01420d015d8ee14f76467 (patch) | |
tree | dea8909be0c95012c751a3201471c09a8353e3cb /drivers/net/wireless/ath | |
parent | 0df8359a88f40ab3b0d38156a5f41ee856178aa3 (diff) |
ath9k_htc: Allow AP interface to be created
Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc.h | 8 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_main.c | 11 |
2 files changed, 19 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h index 0088c6e2f629..b21942818b13 100644 --- a/drivers/net/wireless/ath/ath9k/htc.h +++ b/drivers/net/wireless/ath/ath9k/htc.h | |||
@@ -205,6 +205,7 @@ struct ath9k_htc_target_stats { | |||
205 | } __packed; | 205 | } __packed; |
206 | 206 | ||
207 | #define ATH9K_HTC_MAX_VIF 2 | 207 | #define ATH9K_HTC_MAX_VIF 2 |
208 | #define ATH9K_HTC_MAX_BCN_VIF 2 | ||
208 | 209 | ||
209 | #define INC_VIF(_priv, _type) do { \ | 210 | #define INC_VIF(_priv, _type) do { \ |
210 | switch (_type) { \ | 211 | switch (_type) { \ |
@@ -214,6 +215,9 @@ struct ath9k_htc_target_stats { | |||
214 | case NL80211_IFTYPE_ADHOC: \ | 215 | case NL80211_IFTYPE_ADHOC: \ |
215 | _priv->num_ibss_vif++; \ | 216 | _priv->num_ibss_vif++; \ |
216 | break; \ | 217 | break; \ |
218 | case NL80211_IFTYPE_AP: \ | ||
219 | _priv->num_ap_vif++; \ | ||
220 | break; \ | ||
217 | default: \ | 221 | default: \ |
218 | break; \ | 222 | break; \ |
219 | } \ | 223 | } \ |
@@ -227,6 +231,9 @@ struct ath9k_htc_target_stats { | |||
227 | case NL80211_IFTYPE_ADHOC: \ | 231 | case NL80211_IFTYPE_ADHOC: \ |
228 | _priv->num_ibss_vif--; \ | 232 | _priv->num_ibss_vif--; \ |
229 | break; \ | 233 | break; \ |
234 | case NL80211_IFTYPE_AP: \ | ||
235 | _priv->num_ap_vif--; \ | ||
236 | break; \ | ||
230 | default: \ | 237 | default: \ |
231 | break; \ | 238 | break; \ |
232 | } \ | 239 | } \ |
@@ -395,6 +402,7 @@ struct ath9k_htc_priv { | |||
395 | u8 vif_sta_pos[ATH9K_HTC_MAX_VIF]; | 402 | u8 vif_sta_pos[ATH9K_HTC_MAX_VIF]; |
396 | u8 num_ibss_vif; | 403 | u8 num_ibss_vif; |
397 | u8 num_sta_vif; | 404 | u8 num_sta_vif; |
405 | u8 num_ap_vif; | ||
398 | 406 | ||
399 | u16 op_flags; | 407 | u16 op_flags; |
400 | u16 curtxpow; | 408 | u16 curtxpow; |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_main.c b/drivers/net/wireless/ath/ath9k/htc_drv_main.c index 39074fc72d6f..51a8c51510e8 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_main.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_main.c | |||
@@ -1204,6 +1204,14 @@ static int ath9k_htc_add_interface(struct ieee80211_hw *hw, | |||
1204 | return -ENOBUFS; | 1204 | return -ENOBUFS; |
1205 | } | 1205 | } |
1206 | 1206 | ||
1207 | if (((vif->type == NL80211_IFTYPE_AP) || | ||
1208 | (vif->type == NL80211_IFTYPE_ADHOC)) && | ||
1209 | ((priv->num_ap_vif + priv->num_ibss_vif) >= ATH9K_HTC_MAX_BCN_VIF)) { | ||
1210 | ath_err(common, "Max. number of beaconing interfaces reached\n"); | ||
1211 | mutex_unlock(&priv->mutex); | ||
1212 | return -ENOBUFS; | ||
1213 | } | ||
1214 | |||
1207 | ath9k_htc_ps_wakeup(priv); | 1215 | ath9k_htc_ps_wakeup(priv); |
1208 | memset(&hvif, 0, sizeof(struct ath9k_htc_target_vif)); | 1216 | memset(&hvif, 0, sizeof(struct ath9k_htc_target_vif)); |
1209 | memcpy(&hvif.myaddr, vif->addr, ETH_ALEN); | 1217 | memcpy(&hvif.myaddr, vif->addr, ETH_ALEN); |
@@ -1215,6 +1223,9 @@ static int ath9k_htc_add_interface(struct ieee80211_hw *hw, | |||
1215 | case NL80211_IFTYPE_ADHOC: | 1223 | case NL80211_IFTYPE_ADHOC: |
1216 | hvif.opmode = cpu_to_be32(HTC_M_IBSS); | 1224 | hvif.opmode = cpu_to_be32(HTC_M_IBSS); |
1217 | break; | 1225 | break; |
1226 | case NL80211_IFTYPE_AP: | ||
1227 | hvif.opmode = cpu_to_be32(HTC_M_HOSTAP); | ||
1228 | break; | ||
1218 | default: | 1229 | default: |
1219 | ath_err(common, | 1230 | ath_err(common, |
1220 | "Interface type %d not yet supported\n", vif->type); | 1231 | "Interface type %d not yet supported\n", vif->type); |