|
@@ -159,6 +159,7 @@ mwifiex_set_ht_params(struct mwifiex_private *priv,
|
|
struct cfg80211_ap_settings *params)
|
|
struct cfg80211_ap_settings *params)
|
|
{
|
|
{
|
|
const u8 *ht_ie;
|
|
const u8 *ht_ie;
|
|
|
|
+ u16 cap_info;
|
|
|
|
|
|
if (!ISSUPP_11NENABLED(priv->adapter->fw_cap_info))
|
|
if (!ISSUPP_11NENABLED(priv->adapter->fw_cap_info))
|
|
return;
|
|
return;
|
|
@@ -168,6 +169,25 @@ mwifiex_set_ht_params(struct mwifiex_private *priv,
|
|
if (ht_ie) {
|
|
if (ht_ie) {
|
|
memcpy(&bss_cfg->ht_cap, ht_ie + 2,
|
|
memcpy(&bss_cfg->ht_cap, ht_ie + 2,
|
|
sizeof(struct ieee80211_ht_cap));
|
|
sizeof(struct ieee80211_ht_cap));
|
|
|
|
+ cap_info = le16_to_cpu(bss_cfg->ht_cap.cap_info);
|
|
|
|
+ memset(&bss_cfg->ht_cap.mcs, 0,
|
|
|
|
+ priv->adapter->number_of_antenna);
|
|
|
|
+ switch (GET_RXSTBC(cap_info)) {
|
|
|
|
+ case MWIFIEX_RX_STBC1:
|
|
|
|
+ /* HT_CAP 1X1 mode */
|
|
|
|
+ memset(&bss_cfg->ht_cap.mcs, 0xff, 1);
|
|
|
|
+ break;
|
|
|
|
+ case MWIFIEX_RX_STBC12: /* fall through */
|
|
|
|
+ case MWIFIEX_RX_STBC123:
|
|
|
|
+ /* HT_CAP 2X2 mode */
|
|
|
|
+ memset(&bss_cfg->ht_cap.mcs, 0xff, 2);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ dev_warn(priv->adapter->dev,
|
|
|
|
+ "Unsupported RX-STBC, default to 2x2\n");
|
|
|
|
+ memset(&bss_cfg->ht_cap.mcs, 0xff, 2);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
priv->ap_11n_enabled = 1;
|
|
priv->ap_11n_enabled = 1;
|
|
} else {
|
|
} else {
|
|
memset(&bss_cfg->ht_cap , 0, sizeof(struct ieee80211_ht_cap));
|
|
memset(&bss_cfg->ht_cap , 0, sizeof(struct ieee80211_ht_cap));
|