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>
This commit is contained in:
Родитель
0df8359a88
Коммит
da8d9d937b
|
@ -205,6 +205,7 @@ struct ath9k_htc_target_stats {
|
|||
} __packed;
|
||||
|
||||
#define ATH9K_HTC_MAX_VIF 2
|
||||
#define ATH9K_HTC_MAX_BCN_VIF 2
|
||||
|
||||
#define INC_VIF(_priv, _type) do { \
|
||||
switch (_type) { \
|
||||
|
@ -214,6 +215,9 @@ struct ath9k_htc_target_stats {
|
|||
case NL80211_IFTYPE_ADHOC: \
|
||||
_priv->num_ibss_vif++; \
|
||||
break; \
|
||||
case NL80211_IFTYPE_AP: \
|
||||
_priv->num_ap_vif++; \
|
||||
break; \
|
||||
default: \
|
||||
break; \
|
||||
} \
|
||||
|
@ -227,6 +231,9 @@ struct ath9k_htc_target_stats {
|
|||
case NL80211_IFTYPE_ADHOC: \
|
||||
_priv->num_ibss_vif--; \
|
||||
break; \
|
||||
case NL80211_IFTYPE_AP: \
|
||||
_priv->num_ap_vif--; \
|
||||
break; \
|
||||
default: \
|
||||
break; \
|
||||
} \
|
||||
|
@ -395,6 +402,7 @@ struct ath9k_htc_priv {
|
|||
u8 vif_sta_pos[ATH9K_HTC_MAX_VIF];
|
||||
u8 num_ibss_vif;
|
||||
u8 num_sta_vif;
|
||||
u8 num_ap_vif;
|
||||
|
||||
u16 op_flags;
|
||||
u16 curtxpow;
|
||||
|
|
|
@ -1204,6 +1204,14 @@ static int ath9k_htc_add_interface(struct ieee80211_hw *hw,
|
|||
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);
|
||||
memset(&hvif, 0, sizeof(struct ath9k_htc_target_vif));
|
||||
memcpy(&hvif.myaddr, vif->addr, ETH_ALEN);
|
||||
|
@ -1215,6 +1223,9 @@ static int ath9k_htc_add_interface(struct ieee80211_hw *hw,
|
|||
case NL80211_IFTYPE_ADHOC:
|
||||
hvif.opmode = cpu_to_be32(HTC_M_IBSS);
|
||||
break;
|
||||
case NL80211_IFTYPE_AP:
|
||||
hvif.opmode = cpu_to_be32(HTC_M_HOSTAP);
|
||||
break;
|
||||
default:
|
||||
ath_err(common,
|
||||
"Interface type %d not yet supported\n", vif->type);
|
||||
|
|
Загрузка…
Ссылка в новой задаче