Commit da8d9d93 authored by Sujith Manoharan's avatar Sujith Manoharan Committed by John W. Linville

ath9k_htc: Allow AP interface to be created

Signed-off-by: default avatarSujith Manoharan <Sujith.Manoharan@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 0df8359a
...@@ -205,6 +205,7 @@ struct ath9k_htc_target_stats { ...@@ -205,6 +205,7 @@ struct ath9k_htc_target_stats {
} __packed; } __packed;
#define ATH9K_HTC_MAX_VIF 2 #define ATH9K_HTC_MAX_VIF 2
#define ATH9K_HTC_MAX_BCN_VIF 2
#define INC_VIF(_priv, _type) do { \ #define INC_VIF(_priv, _type) do { \
switch (_type) { \ switch (_type) { \
...@@ -214,6 +215,9 @@ struct ath9k_htc_target_stats { ...@@ -214,6 +215,9 @@ struct ath9k_htc_target_stats {
case NL80211_IFTYPE_ADHOC: \ case NL80211_IFTYPE_ADHOC: \
_priv->num_ibss_vif++; \ _priv->num_ibss_vif++; \
break; \ break; \
case NL80211_IFTYPE_AP: \
_priv->num_ap_vif++; \
break; \
default: \ default: \
break; \ break; \
} \ } \
...@@ -227,6 +231,9 @@ struct ath9k_htc_target_stats { ...@@ -227,6 +231,9 @@ struct ath9k_htc_target_stats {
case NL80211_IFTYPE_ADHOC: \ case NL80211_IFTYPE_ADHOC: \
_priv->num_ibss_vif--; \ _priv->num_ibss_vif--; \
break; \ break; \
case NL80211_IFTYPE_AP: \
_priv->num_ap_vif--; \
break; \
default: \ default: \
break; \ break; \
} \ } \
...@@ -395,6 +402,7 @@ struct ath9k_htc_priv { ...@@ -395,6 +402,7 @@ struct ath9k_htc_priv {
u8 vif_sta_pos[ATH9K_HTC_MAX_VIF]; u8 vif_sta_pos[ATH9K_HTC_MAX_VIF];
u8 num_ibss_vif; u8 num_ibss_vif;
u8 num_sta_vif; u8 num_sta_vif;
u8 num_ap_vif;
u16 op_flags; u16 op_flags;
u16 curtxpow; u16 curtxpow;
......
...@@ -1204,6 +1204,14 @@ static int ath9k_htc_add_interface(struct ieee80211_hw *hw, ...@@ -1204,6 +1204,14 @@ static int ath9k_htc_add_interface(struct ieee80211_hw *hw,
return -ENOBUFS; return -ENOBUFS;
} }
if (((vif->type == NL80211_IFTYPE_AP) ||
(vif->type == NL80211_IFTYPE_ADHOC)) &&
((priv->num_ap_vif + priv->num_ibss_vif) >= ATH9K_HTC_MAX_BCN_VIF)) {
ath_err(common, "Max. number of beaconing interfaces reached\n");
mutex_unlock(&priv->mutex);
return -ENOBUFS;
}
ath9k_htc_ps_wakeup(priv); ath9k_htc_ps_wakeup(priv);
memset(&hvif, 0, sizeof(struct ath9k_htc_target_vif)); memset(&hvif, 0, sizeof(struct ath9k_htc_target_vif));
memcpy(&hvif.myaddr, vif->addr, ETH_ALEN); memcpy(&hvif.myaddr, vif->addr, ETH_ALEN);
...@@ -1215,6 +1223,9 @@ static int ath9k_htc_add_interface(struct ieee80211_hw *hw, ...@@ -1215,6 +1223,9 @@ static int ath9k_htc_add_interface(struct ieee80211_hw *hw,
case NL80211_IFTYPE_ADHOC: case NL80211_IFTYPE_ADHOC:
hvif.opmode = cpu_to_be32(HTC_M_IBSS); hvif.opmode = cpu_to_be32(HTC_M_IBSS);
break; break;
case NL80211_IFTYPE_AP:
hvif.opmode = cpu_to_be32(HTC_M_HOSTAP);
break;
default: default:
ath_err(common, ath_err(common,
"Interface type %d not yet supported\n", vif->type); "Interface type %d not yet supported\n", vif->type);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment