diff options
| author | Thomas Pedersen <c_tpeder@qca.qualcomm.com> | 2012-02-28 15:08:46 -0800 | 
|---|---|---|
| committer | Kalle Valo <kvalo@qca.qualcomm.com> | 2012-03-01 08:39:12 +0200 | 
| commit | 67cd22e48d4acd3ac8c0032b628537bb27e92a24 (patch) | |
| tree | f4c013ad8df65a2894d60a2c26285c867f5fde2e | |
| parent | 080eec4fb478f10c6f171875634fc3174da1a1c3 (diff) | |
| download | olio-linux-3.10-67cd22e48d4acd3ac8c0032b628537bb27e92a24.tar.xz olio-linux-3.10-67cd22e48d4acd3ac8c0032b628537bb27e92a24.zip  | |
ath6kl: implement hidden ssid
The ath6kl FW does not distinguish between different types of hidden
SSIDs (empty or null), so treat all cfg80211 requests for hidden ssid
the same.
Signed-off-by: Thomas Pedersen <c_tpeder@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/cfg80211.c | 7 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/wmi.c | 16 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/wmi.h | 5 | 
3 files changed, 27 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c index 0becddd8b58..ff916ca7a23 100644 --- a/drivers/net/wireless/ath/ath6kl/cfg80211.c +++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c @@ -2282,6 +2282,7 @@ static int ath6kl_ap_beacon(struct wiphy *wiphy, struct net_device *dev,  	struct ath6kl *ar = ath6kl_priv(dev);  	struct ath6kl_vif *vif = netdev_priv(dev);  	struct ieee80211_mgmt *mgmt; +	bool hidden = false;  	u8 *ies;  	int ies_len;  	struct wmi_connect_cmd p; @@ -2341,7 +2342,11 @@ static int ath6kl_ap_beacon(struct wiphy *wiphy, struct net_device *dev,  	memcpy(vif->ssid, info->ssid, info->ssid_len);  	vif->ssid_len = info->ssid_len;  	if (info->hidden_ssid != NL80211_HIDDEN_SSID_NOT_IN_USE) -		return -EOPNOTSUPP; /* TODO */ +		hidden = true; + +	res = ath6kl_wmi_ap_hidden_ssid(ar->wmi, vif->fw_vif_idx, hidden); +	if (res) +		return res;  	ret = ath6kl_set_auth_type(vif, info->auth_type);  	if (ret) diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c index dc6230dea86..0a57dcc6041 100644 --- a/drivers/net/wireless/ath/ath6kl/wmi.c +++ b/drivers/net/wireless/ath/ath6kl/wmi.c @@ -3013,6 +3013,22 @@ int ath6kl_wmi_ap_set_mlme(struct wmi *wmip, u8 if_idx, u8 cmd, const u8 *mac,  				   NO_SYNC_WMIFLAG);  } +int ath6kl_wmi_ap_hidden_ssid(struct wmi *wmi, u8 if_idx, bool enable) +{ +	struct sk_buff *skb; +	struct wmi_ap_hidden_ssid_cmd *cmd; + +	skb = ath6kl_wmi_get_new_buf(sizeof(*cmd)); +	if (!skb) +		return -ENOMEM; + +	cmd = (struct wmi_ap_hidden_ssid_cmd *) skb->data; +	cmd->hidden_ssid = enable ? 1 : 0; + +	return ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_AP_HIDDEN_SSID_CMDID, +				   NO_SYNC_WMIFLAG); +} +  /* This command will be used to enable/disable AP uAPSD feature */  int ath6kl_wmi_ap_set_apsd(struct wmi *wmi, u8 if_idx, u8 enable)  { diff --git a/drivers/net/wireless/ath/ath6kl/wmi.h b/drivers/net/wireless/ath/ath6kl/wmi.h index 38907f41122..cea7429a8a0 100644 --- a/drivers/net/wireless/ath/ath6kl/wmi.h +++ b/drivers/net/wireless/ath/ath6kl/wmi.h @@ -2129,6 +2129,10 @@ struct wmi_rx_frame_format_cmd {  	u8 reserved[1];  } __packed; +struct wmi_ap_hidden_ssid_cmd { +	u8 hidden_ssid; +} __packed; +  /* AP mode events */  struct wmi_ap_set_apsd_cmd {  	u8 enable; @@ -2485,6 +2489,7 @@ u8 ath6kl_wmi_get_traffic_class(u8 user_priority);  u8 ath6kl_wmi_determine_user_priority(u8 *pkt, u32 layer2_pri);  /* AP mode */ +int ath6kl_wmi_ap_hidden_ssid(struct wmi *wmi, u8 if_idx, bool enable);  int ath6kl_wmi_ap_profile_commit(struct wmi *wmip, u8 if_idx,  				 struct wmi_connect_cmd *p);  |