|
|
@@ -455,6 +455,34 @@ static ssize_t ieee80211_if_parse_uapsd_max_sp_len(
|
|
|
}
|
|
|
IEEE80211_IF_FILE_RW(uapsd_max_sp_len);
|
|
|
|
|
|
+static ssize_t ieee80211_if_fmt_tdls_wider_bw(
|
|
|
+ const struct ieee80211_sub_if_data *sdata, char *buf, int buflen)
|
|
|
+{
|
|
|
+ const struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
|
|
|
+ bool tdls_wider_bw;
|
|
|
+
|
|
|
+ tdls_wider_bw = ieee80211_hw_check(&sdata->local->hw, TDLS_WIDER_BW) &&
|
|
|
+ !ifmgd->tdls_wider_bw_prohibited;
|
|
|
+
|
|
|
+ return snprintf(buf, buflen, "%d\n", tdls_wider_bw);
|
|
|
+}
|
|
|
+
|
|
|
+static ssize_t ieee80211_if_parse_tdls_wider_bw(
|
|
|
+ struct ieee80211_sub_if_data *sdata, const char *buf, int buflen)
|
|
|
+{
|
|
|
+ struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
|
|
|
+ u8 val;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = kstrtou8(buf, 0, &val);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ ifmgd->tdls_wider_bw_prohibited = !val;
|
|
|
+ return buflen;
|
|
|
+}
|
|
|
+IEEE80211_IF_FILE_RW(tdls_wider_bw);
|
|
|
+
|
|
|
/* AP attributes */
|
|
|
IEEE80211_IF_FILE(num_mcast_sta, u.ap.num_mcast_sta, ATOMIC);
|
|
|
IEEE80211_IF_FILE(num_sta_ps, u.ap.ps.num_sta_ps, ATOMIC);
|
|
|
@@ -614,6 +642,7 @@ static void add_sta_files(struct ieee80211_sub_if_data *sdata)
|
|
|
DEBUGFS_ADD_MODE(beacon_loss, 0200);
|
|
|
DEBUGFS_ADD_MODE(uapsd_queues, 0600);
|
|
|
DEBUGFS_ADD_MODE(uapsd_max_sp_len, 0600);
|
|
|
+ DEBUGFS_ADD_MODE(tdls_wider_bw, 0600);
|
|
|
}
|
|
|
|
|
|
static void add_ap_files(struct ieee80211_sub_if_data *sdata)
|