* Re: [PATCH v4 3/5] cfg80211: Accept multiple RSSI thresholds for CQM
From: Andrew Zaborowski @ 2017-02-10 9:39 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless
In-Reply-To: <1486557177.24745.8.camel@sipsolutions.net>
On 8 February 2017 at 13:32, Johannes Berg <johannes@sipsolutions.net> wrote:
>> > I think it would make sense to unconditionally apply the hysteresis
>> > to low/high, i.e. always set
>> > low = low - hyst
>> > high = high + hyst
>> >
>> > so that you get "sticky" ranges once you're in them?
>>
>> Yes, maybe that's better, I guess I want to avoid just adding a lag /
>> delay in reporting changes that are not due to measurement error or
>> temporary. Could also do something in between, e.g. use "low - hyst"
>> if signal is close to low, otherwise just "low".
>
> That's sort of what you had, but except for the precise definition of
> "close", no?
>
> Actually, no, because you used "last - hyst" rather than "low - hyst"
> it's different. I think we can live with checking if it's close, say
> setting to "low - hyst" when it's within low + hyst - that avoids the
> problem I outlined above and gets a bit more responsiveness, I guess.
I sent a version with this logic but came up with values that would
still cause the continous events as in your example, specifically with
a hyst of 3 and the reported RSSI values jumping between -51 and -47.
This could be avoided by changing operators between "less than" and
"less or equal" but I eventually sent a version with the "sticky"
ranges you suggested, I think that is just as good.
Best regards
^ permalink raw reply
* Re: [PATCH v3] ath10k: Fix crash during rmmod when probe firmware fails
From: Valo, Kalle @ 2017-02-10 9:47 UTC (permalink / raw)
To: Mohammed Shafi Shajakhan
Cc: Shajakhan, Mohammed Shafi (Mohammed Shafi),
ath10k@lists.infradead.org, linux-wireless@vger.kernel.org
In-Reply-To: <20170206100448.GA13894@atheros-ThinkPad-T61>
Mohammed Shafi Shajakhan <mohammed@codeaurora.org> writes:
> the change suggested by you helps, and the device probe, scan
> is successful as well. Still good to have this change part of your
> basic sanity and regression testing !
Sure. I was sort of expecting that you would send v4 but I haven't seen
one so I guess you assumed I send that? :) I'll then submit v4.
BTW, just curious but why do you have "during rmmod" in the title? I
think I was able to reproduce this crash by removing all firmware files
and didn't use rmmod at all.
--=20
Kalle Valo=
^ permalink raw reply
* Re: [PATCH v4 3/5] cfg80211: Accept multiple RSSI thresholds for CQM
From: Johannes Berg @ 2017-02-10 9:41 UTC (permalink / raw)
To: Andrew Zaborowski; +Cc: linux-wireless
In-Reply-To: <CAOq732LLG0UwwdUAimhosjVS+P98tiY=MsGAPFFkbtH1PNj_+A@mail.gmail.com>
> I sent a version with this logic but came up with values that would
> still cause the continous events as in your example, specifically
> with a hyst of 3 and the reported RSSI values jumping between -51 and
> -47. This could be avoided by changing operators between "less than"
> and "less or equal" but I eventually sent a version with the "sticky"
> ranges you suggested, I think that is just as good.
Ah, I was just wondering why you'd sent a new version, hadn't checked
the difference yet :)
Thanks for the note.
johannes
^ permalink raw reply
* [PATCH v6 1/3] cfg80211: Accept multiple RSSI thresholds for CQM
From: Andrew Zaborowski @ 2017-02-10 9:02 UTC (permalink / raw)
To: linux-wireless
Change the SET CQM command's RSSI threshold attribute to accept any
number of thresholds as a sorted array. The API should be backwards
compatible so that if one s32 threshold value is passed, the old
mechanism is enabled. The netlink event generated is the same in both
cases.
cfg80211 handles an arbitrary number of RSSI thresholds but drivers have
to provide a method (set_cqm_rssi_range_config) that configures a range
set by a high and a low value. Drivers have to call back when the RSSI
goes out of that range and there's no additional event for each time the
range is reconfigured as there was with the current one-threshold API.
This method doesn't have a hysteresis parameter because there's no
benefit to the cfg80211 code from having the hysteresis be handled by
hardware/driver in terms of the number of wakeups. At the same time
it would likely be less consistent between drivers if offloaded or
done in the drivers.
Signed-off-by: Andrew Zaborowski <andrew.zaborowski@intel.com>
---
changes in v3:
- define NL80211_EXT_FEATURE_CQM_RSSI_LIST which drivers need to set
if they implement set_cqm_rssi_range_config (mac80211 is a special
case)
- error check the kzalloc in nl80211_set_cqm_rssi
- add a rdev->ops->get_station check before calling get_station
changes in v4:
- simplify the case of disabling CQM in nl80211_set_cqm_rssi
changed in v5:
- drop unneeded NL80211_EXT_FEATURE_CQM_RSSI_LIST check
- change the way new low/high threshold is calculated in
cfg80211_cqm_rssi_update to make sure it's "hyst" away from range
border to further reduce number of events
- clarify NL80211_EXT_FEATURE_CQM_RSSI_LIST description in nl80211.h
changed in v6:
- always add hysteresis value to the low/high thresholds used
---
include/net/cfg80211.h | 13 ++++
include/uapi/linux/nl80211.h | 9 ++-
net/wireless/core.c | 9 +++
net/wireless/core.h | 9 +++
net/wireless/nl80211.c | 138 +++++++++++++++++++++++++++++++++++++++----
net/wireless/rdev-ops.h | 12 ++++
net/wireless/trace.h | 22 +++++++
7 files changed, 198 insertions(+), 14 deletions(-)
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index c92dc03..86c12f8 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -2712,6 +2712,11 @@ struct cfg80211_nan_func {
* the current level is above/below the configured threshold; this may
* need some care when the configuration is changed (without first being
* disabled.)
+ * @set_cqm_rssi_range_config: Configure two RSSI thresholds in the
+ * connection quality monitor. An event is to be sent only when the
+ * signal level is found to be outside the two values. The driver should
+ * set %NL80211_EXT_FEATURE_CQM_RSSI_LIST if this method is implemented.
+ * If it is provided then there's no point providing @set_cqm_rssi_config.
* @set_cqm_txe_config: Configure connection quality monitor TX error
* thresholds.
* @sched_scan_start: Tell the driver to start a scheduled scan.
@@ -3001,6 +3006,10 @@ struct cfg80211_ops {
struct net_device *dev,
s32 rssi_thold, u32 rssi_hyst);
+ int (*set_cqm_rssi_range_config)(struct wiphy *wiphy,
+ struct net_device *dev,
+ s32 rssi_low, s32 rssi_high);
+
int (*set_cqm_txe_config)(struct wiphy *wiphy,
struct net_device *dev,
u32 rate, u32 pkts, u32 intvl);
@@ -3871,6 +3880,7 @@ void wiphy_free(struct wiphy *wiphy);
struct cfg80211_conn;
struct cfg80211_internal_bss;
struct cfg80211_cached_keys;
+struct cfg80211_cqm_config;
/**
* struct wireless_dev - wireless device state
@@ -3934,6 +3944,7 @@ struct cfg80211_cached_keys;
* @event_list: (private) list for internal event processing
* @event_lock: (private) lock for event list
* @owner_nlportid: (private) owner socket port ID
+ * @cqm_config: (private) nl80211 RSSI monitor state
*/
struct wireless_dev {
struct wiphy *wiphy;
@@ -4002,6 +4013,8 @@ struct wireless_dev {
bool prev_bssid_valid;
} wext;
#endif
+
+ struct cfg80211_cqm_config *cqm_config;
};
static inline u8 *wdev_address(struct wireless_dev *wdev)
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 5ed257c..9a499b1 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -3942,7 +3942,10 @@ enum nl80211_ps_state {
* @__NL80211_ATTR_CQM_INVALID: invalid
* @NL80211_ATTR_CQM_RSSI_THOLD: RSSI threshold in dBm. This value specifies
* the threshold for the RSSI level at which an event will be sent. Zero
- * to disable.
+ * to disable. Alternatively, if %NL80211_EXT_FEATURE_CQM_RSSI_LIST is
+ * set, multiple values can be supplied as a low-to-high sorted array of
+ * threshold values in dBm. Events will be sent when the RSSI value
+ * crosses any of the thresholds.
* @NL80211_ATTR_CQM_RSSI_HYST: RSSI hysteresis in dBm. This value specifies
* the minimum amount the RSSI level must change after an event before a
* new event may be issued (to reduce effects of RSSI oscillation).
@@ -4753,6 +4756,9 @@ enum nl80211_feature_flags {
* @NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI: The driver supports sched_scan
* for reporting BSSs with better RSSI than the current connected BSS
* (%NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI).
+ * @NL80211_EXT_FEATURE_CQM_RSSI_LIST: With this driver the
+ * %NL80211_ATTR_CQM_RSSI_THOLD attribute accepts a list of zero or more
+ * RSSI threshold values to monitor rather than exactly one threshold.
*
* @NUM_NL80211_EXT_FEATURES: number of extended features.
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
@@ -4771,6 +4777,7 @@ enum nl80211_ext_feature_index {
NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA,
NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED,
NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI,
+ NL80211_EXT_FEATURE_CQM_RSSI_LIST,
/* add new features before the definition below */
NUM_NL80211_EXT_FEATURES,
diff --git a/net/wireless/core.c b/net/wireless/core.c
index e55e05b..04143df 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -954,6 +954,12 @@ void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked)
}
EXPORT_SYMBOL(wiphy_rfkill_set_hw_state);
+void cfg80211_cqm_config_free(struct wireless_dev *wdev)
+{
+ kfree(wdev->cqm_config);
+ wdev->cqm_config = NULL;
+}
+
void cfg80211_unregister_wdev(struct wireless_dev *wdev)
{
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
@@ -980,6 +986,8 @@ void cfg80211_unregister_wdev(struct wireless_dev *wdev)
WARN_ON_ONCE(1);
break;
}
+
+ cfg80211_cqm_config_free(wdev);
}
EXPORT_SYMBOL(cfg80211_unregister_wdev);
@@ -1234,6 +1242,7 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
kzfree(wdev->wext.keys);
#endif
flush_work(&wdev->disconnect_wk);
+ cfg80211_cqm_config_free(wdev);
}
/*
* synchronise (so that we won't find this netdev
diff --git a/net/wireless/core.h b/net/wireless/core.h
index 58ca206..efa690a 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -272,6 +272,13 @@ struct cfg80211_iface_destroy {
u32 nlportid;
};
+struct cfg80211_cqm_config {
+ u32 rssi_hyst;
+ s32 last_rssi_event_value;
+ int n_rssi_thresholds;
+ s32 rssi_thresholds[0];
+};
+
void cfg80211_destroy_ifaces(struct cfg80211_registered_device *rdev);
/* free object */
@@ -512,4 +519,6 @@ void cfg80211_stop_nan(struct cfg80211_registered_device *rdev,
#define CFG80211_DEV_WARN_ON(cond) ({bool __r = (cond); __r; })
#endif
+void cfg80211_cqm_config_free(struct wireless_dev *wdev);
+
#endif /* __NET_WIRELESS_CORE_H */
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index b5f755b..5f0c737 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -9472,7 +9472,7 @@ static int nl80211_get_power_save(struct sk_buff *skb, struct genl_info *info)
static const struct nla_policy
nl80211_attr_cqm_policy[NL80211_ATTR_CQM_MAX + 1] = {
- [NL80211_ATTR_CQM_RSSI_THOLD] = { .type = NLA_U32 },
+ [NL80211_ATTR_CQM_RSSI_THOLD] = { .type = NLA_BINARY },
[NL80211_ATTR_CQM_RSSI_HYST] = { .type = NLA_U32 },
[NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT] = { .type = NLA_U32 },
[NL80211_ATTR_CQM_TXE_RATE] = { .type = NLA_U32 },
@@ -9501,28 +9501,123 @@ static int nl80211_set_cqm_txe(struct genl_info *info,
return rdev_set_cqm_txe_config(rdev, dev, rate, pkts, intvl);
}
+static int cfg80211_cqm_rssi_update(struct cfg80211_registered_device *rdev,
+ struct net_device *dev)
+{
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+ s32 last, low, high;
+ u32 hyst;
+ int i, n;
+ int err;
+
+ /* RSSI reporting disabled? */
+ if (!wdev->cqm_config)
+ return rdev_set_cqm_rssi_range_config(rdev, dev, 0, 0);
+
+ /*
+ * Obtain current RSSI value if possible, if not and no RSSI threshold
+ * event has been received yet, we should receive an event after a
+ * connection is established and enough beacons received to calculate
+ * the average.
+ */
+ if (!wdev->cqm_config->last_rssi_event_value && wdev->current_bss &&
+ rdev->ops->get_station) {
+ struct station_info sinfo;
+ u8 *mac_addr;
+
+ mac_addr = wdev->current_bss->pub.bssid;
+
+ err = rdev_get_station(rdev, dev, mac_addr, &sinfo);
+ if (err)
+ return err;
+
+ if (sinfo.filled & BIT(NL80211_STA_INFO_BEACON_SIGNAL_AVG))
+ wdev->cqm_config->last_rssi_event_value =
+ (s8) sinfo.rx_beacon_signal_avg;
+ }
+
+ last = wdev->cqm_config->last_rssi_event_value;
+ hyst = wdev->cqm_config->rssi_hyst;
+ n = wdev->cqm_config->n_rssi_thresholds;
+
+ for (i = 0; i < n; i++)
+ if (last < wdev->cqm_config->rssi_thresholds[i])
+ break;
+
+ low = i > 0 ?
+ (wdev->cqm_config->rssi_thresholds[i - 1] - hyst) : S32_MIN;
+ high = i < n ?
+ (wdev->cqm_config->rssi_thresholds[i] + hyst - 1) : S32_MAX;
+
+ return rdev_set_cqm_rssi_range_config(rdev, dev, low, high);
+}
+
static int nl80211_set_cqm_rssi(struct genl_info *info,
- s32 threshold, u32 hysteresis)
+ const s32 *thresholds, int n_thresholds,
+ u32 hysteresis)
{
struct cfg80211_registered_device *rdev = info->user_ptr[0];
struct net_device *dev = info->user_ptr[1];
struct wireless_dev *wdev = dev->ieee80211_ptr;
+ int i, err;
+ s32 prev = S32_MIN;
- if (threshold > 0)
- return -EINVAL;
-
- /* disabling - hysteresis should also be zero then */
- if (threshold == 0)
- hysteresis = 0;
+ /* Check all values negative and sorted */
+ for (i = 0; i < n_thresholds; i++) {
+ if (thresholds[i] > 0 || thresholds[i] <= prev)
+ return -EINVAL;
- if (!rdev->ops->set_cqm_rssi_config)
- return -EOPNOTSUPP;
+ prev = thresholds[i];
+ }
if (wdev->iftype != NL80211_IFTYPE_STATION &&
wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)
return -EOPNOTSUPP;
- return rdev_set_cqm_rssi_config(rdev, dev, threshold, hysteresis);
+ wdev_lock(wdev);
+ cfg80211_cqm_config_free(wdev);
+ wdev_unlock(wdev);
+
+ if (n_thresholds <= 1 && rdev->ops->set_cqm_rssi_config) {
+ if (n_thresholds == 0 || thresholds[0] == 0) /* Disabling */
+ return rdev_set_cqm_rssi_config(rdev, dev, 0, 0);
+
+ return rdev_set_cqm_rssi_config(rdev, dev,
+ thresholds[0], hysteresis);
+ }
+
+ if (!wiphy_ext_feature_isset(&rdev->wiphy,
+ NL80211_EXT_FEATURE_CQM_RSSI_LIST))
+ return -EOPNOTSUPP;
+
+ if (n_thresholds == 1 && thresholds[0] == 0) /* Disabling */
+ n_thresholds = 0;
+
+ wdev_lock(wdev);
+ if (n_thresholds) {
+ struct cfg80211_cqm_config *cqm_config;
+
+ cqm_config = kzalloc(sizeof(struct cfg80211_cqm_config) +
+ n_thresholds * sizeof(s32), GFP_KERNEL);
+ if (!cqm_config) {
+ err = -ENOMEM;
+ goto unlock;
+ }
+
+ cqm_config->rssi_hyst = hysteresis;
+ cqm_config->n_rssi_thresholds = n_thresholds;
+ memcpy(cqm_config->rssi_thresholds, thresholds,
+ n_thresholds * sizeof(s32));
+
+ wdev->cqm_config = cqm_config;
+ }
+
+ err = cfg80211_cqm_rssi_update(rdev, dev);
+
+unlock:
+ wdev_unlock(wdev);
+
+ return err;
}
static int nl80211_set_cqm(struct sk_buff *skb, struct genl_info *info)
@@ -9542,10 +9637,16 @@ static int nl80211_set_cqm(struct sk_buff *skb, struct genl_info *info)
if (attrs[NL80211_ATTR_CQM_RSSI_THOLD] &&
attrs[NL80211_ATTR_CQM_RSSI_HYST]) {
- s32 threshold = nla_get_s32(attrs[NL80211_ATTR_CQM_RSSI_THOLD]);
+ const s32 *thresholds =
+ nla_data(attrs[NL80211_ATTR_CQM_RSSI_THOLD]);
+ int len = nla_len(attrs[NL80211_ATTR_CQM_RSSI_THOLD]);
u32 hysteresis = nla_get_u32(attrs[NL80211_ATTR_CQM_RSSI_HYST]);
- return nl80211_set_cqm_rssi(info, threshold, hysteresis);
+ if (len % 4)
+ return -EINVAL;
+
+ return nl80211_set_cqm_rssi(info, thresholds, len / 4,
+ hysteresis);
}
if (attrs[NL80211_ATTR_CQM_TXE_RATE] &&
@@ -13982,6 +14083,8 @@ void cfg80211_cqm_rssi_notify(struct net_device *dev,
s32 rssi_level, gfp_t gfp)
{
struct sk_buff *msg;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+ struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
trace_cfg80211_cqm_rssi_notify(dev, rssi_event, rssi_level);
@@ -13989,6 +14092,15 @@ void cfg80211_cqm_rssi_notify(struct net_device *dev,
rssi_event != NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH))
return;
+ if (wdev->cqm_config) {
+ wdev->cqm_config->last_rssi_event_value = rssi_level;
+
+ cfg80211_cqm_rssi_update(rdev, dev);
+
+ if (rssi_level == 0)
+ rssi_level = wdev->cqm_config->last_rssi_event_value;
+ }
+
msg = cfg80211_prepare_cqm(dev, NULL, gfp);
if (!msg)
return;
diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h
index 2f42507..f2baf59 100644
--- a/net/wireless/rdev-ops.h
+++ b/net/wireless/rdev-ops.h
@@ -750,6 +750,18 @@ rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev,
}
static inline int
+rdev_set_cqm_rssi_range_config(struct cfg80211_registered_device *rdev,
+ struct net_device *dev, s32 low, s32 high)
+{
+ int ret;
+ trace_rdev_set_cqm_rssi_range_config(&rdev->wiphy, dev, low, high);
+ ret = rdev->ops->set_cqm_rssi_range_config(&rdev->wiphy, dev,
+ low, high);
+ trace_rdev_return_int(&rdev->wiphy, ret);
+ return ret;
+}
+
+static inline int
rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev,
struct net_device *dev, u32 rate, u32 pkts, u32 intvl)
{
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 776e80c..fd55786 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -1322,6 +1322,28 @@ TRACE_EVENT(rdev_set_cqm_rssi_config,
__entry->rssi_thold, __entry->rssi_hyst)
);
+TRACE_EVENT(rdev_set_cqm_rssi_range_config,
+ TP_PROTO(struct wiphy *wiphy,
+ struct net_device *netdev, s32 low, s32 high),
+ TP_ARGS(wiphy, netdev, low, high),
+ TP_STRUCT__entry(
+ WIPHY_ENTRY
+ NETDEV_ENTRY
+ __field(s32, rssi_low)
+ __field(s32, rssi_high)
+ ),
+ TP_fast_assign(
+ WIPHY_ASSIGN;
+ NETDEV_ASSIGN;
+ __entry->rssi_low = low;
+ __entry->rssi_high = high;
+ ),
+ TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT
+ ", range: %d - %d ",
+ WIPHY_PR_ARG, NETDEV_PR_ARG,
+ __entry->rssi_low, __entry->rssi_high)
+);
+
TRACE_EVENT(rdev_set_cqm_txe_config,
TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u32 rate,
u32 pkts, u32 intvl),
--
2.9.3
^ permalink raw reply related
* Re: [PATCH 1/3] ath10k: remove ath10k_vif_to_arvif()
From: Joe Perches @ 2017-02-10 7:37 UTC (permalink / raw)
To: Adrian Chadd, Valo, Kalle
Cc: Ben Greear, netdev@vger.kernel.org,
linux-wireless@vger.kernel.org, Amadeusz Sławiński,
ath10k@lists.infradead.org, Linux Kernel Mailing List
In-Reply-To: <CAJ-Vmom7k3Tsgs8tRHQppmL7XxADS3V24AGOQY5QgkrSgr5Qzg@mail.gmail.com>
On Thu, 2017-02-09 at 23:14 -0800, Adrian Chadd wrote:
> If there
> were accessors for the skb data / len fields (like we do for mbufs)
> then porting the code would've involved about 5,000 less changed
> lines.
What generic mechanisms would you suggest to make
porting easier between bsd and linux and what in
your opinion are the best naming schemes to make
these functions easiest to read and implement
without resorting to excessive identifier lengths?
If you have some, please provide examples.
^ permalink raw reply
* Re: [PATCH 1/3] ath10k: remove ath10k_vif_to_arvif()
From: Adrian Chadd @ 2017-02-10 7:14 UTC (permalink / raw)
To: Valo, Kalle
Cc: Ben Greear, netdev@vger.kernel.org,
linux-wireless@vger.kernel.org, Amadeusz Sławiński,
ath10k@lists.infradead.org, Linux Kernel Mailing List
In-Reply-To: <87tw82il32.fsf@kamboji.qca.qualcomm.com>
On 9 February 2017 at 23:03, Valo, Kalle <kvalo@qca.qualcomm.com> wrote:
> Ben Greear <greearb@candelatech.com> writes:
>
>> On 02/07/2017 01:14 AM, Valo, Kalle wrote:
>>> Adrian Chadd <adrian@freebsd.org> writes:
>>>
>>>> Removing this method makes the diff to FreeBSD larger, as "vif" in
>>>> FreeBSD is a different pointer.
>>>>
>>>> (Yes, I have ath10k on freebsd working and I'd like to find a way to
>>>> reduce the diff moving forward.)
>>>
>>> I don't like this "(void *) vif->drv_priv" style that much either but
>>> apparently it's commonly used in Linux wireless code and already parts
>>> of ath10k. So this patch just unifies the coding style.
>>
>> Surely the code compiles to the same thing, so why add a patch that
>> makes it more difficult for Adrian and makes the code no easier to read
>> for the rest of us?
>
> Because that's the coding style used already in Linux. It's great to see
> that parts of ath10k can be used also in other systems but in principle
> I'm not very fond of the idea starting to reject valid upstream patches
> because of driver forks.
>
> I think backports project is doing it right, it's not limiting upstream
> development in any way and handles all the API changes internally. Maybe
> FreeBSD could do something similar?
I tried, but ... well, imagine renaming vif->drv_priv to something
else. That's what you're suggesting. :-) You can do it with
coccinelle, but not via just backports API implementations. I'm a big
fan of light weight accessor APIs for the same reason.
(Since FreeBSD doesn't have that pointer in ieee80211vap, it's done a
different way.)
If you could convert other direct uses over to ath10k_vif_to_arvif()
then that'd make me happier. If not, it's fine, when I push this into
freebsd and fast-forward commits, I'll have to just maintain it.
For what it's worth - the linux skb accessors are the same. If there
were accessors for the skb data / len fields (like we do for mbufs)
then porting the code would've involved about 5,000 less changed
lines.
-adrian
^ permalink raw reply
* Re: [PATCH 1/3] ath10k: remove ath10k_vif_to_arvif()
From: Valo, Kalle @ 2017-02-10 7:03 UTC (permalink / raw)
To: Ben Greear
Cc: Adrian Chadd, netdev@vger.kernel.org,
linux-wireless@vger.kernel.org, Amadeusz Sławiński,
ath10k@lists.infradead.org, Linux Kernel Mailing List
In-Reply-To: <5899DDD7.7000605@candelatech.com>
Ben Greear <greearb@candelatech.com> writes:
> On 02/07/2017 01:14 AM, Valo, Kalle wrote:
>> Adrian Chadd <adrian@freebsd.org> writes:
>>
>>> Removing this method makes the diff to FreeBSD larger, as "vif" in
>>> FreeBSD is a different pointer.
>>>
>>> (Yes, I have ath10k on freebsd working and I'd like to find a way to
>>> reduce the diff moving forward.)
>>
>> I don't like this "(void *) vif->drv_priv" style that much either but
>> apparently it's commonly used in Linux wireless code and already parts
>> of ath10k. So this patch just unifies the coding style.
>
> Surely the code compiles to the same thing, so why add a patch that
> makes it more difficult for Adrian and makes the code no easier to read
> for the rest of us?
Because that's the coding style used already in Linux. It's great to see
that parts of ath10k can be used also in other systems but in principle
I'm not very fond of the idea starting to reject valid upstream patches
because of driver forks.
I think backports project is doing it right, it's not limiting upstream
development in any way and handles all the API changes internally. Maybe
FreeBSD could do something similar?
--=20
Kalle Valo=
^ permalink raw reply
* Re: [Patch] NFC: trf7970a:
From: Mark Greer @ 2017-02-10 4:20 UTC (permalink / raw)
To: Geoff Lansberry
Cc: Mark Greer, linux-wireless, Lauro Ramos Venancio,
Aloisio Almeida Jr, Samuel Ortiz, Justin Bronder, linux-nfc,
Jaret Cantu
In-Reply-To: <CAO7Z3W+hS1KuKdA=n=X2cgsEEUtmS51EqFRw8PXMQXPQ5=_XqQ@mail.gmail.com>
On Thu, Feb 09, 2017 at 07:41:11PM -0500, Geoff Lansberry wrote:
> On Thu, Feb 9, 2017 at 4:27 PM, Mark Greer <mgreer@animalcreek.com> wrote:
> >
> > On Thu, Feb 09, 2017 at 10:54:08AM -0500, Geoff Lansberry wrote:
> > > On Wed, Feb 8, 2017 at 5:56 PM, Mark Greer <mgreer@animalcreek.com> wrote:
> > > >
> > > > I just realized that the linux-nfc is not CC'd so adding it.
> > > >
> > > > On Wed, Feb 08, 2017 at 03:53:39PM -0700, Mark Greer wrote:
> > > > > On Sun, Dec 18, 2016 at 08:07:33PM -0700, Mark Greer wrote:
> > > > > > On Sat, Dec 17, 2016 at 04:19:04PM -0500, Geoff Lansberry wrote:
> > > > > > > Mark, from our consultant:
> > > > > > >
> > > > > > > It isn't important whether the flood script is successful in writing
> > > > > > > or not. The point of it is to force a segfault by making many
> > > > > > > requests. It needs to run for several hundred iterations (successful
> > > > > > > or not) in order to generate the segfault.
> > > > > >
> > > > > > So neard crashes even when the write fails?? Okay, I'll let it run for
> > > > > > a while tomorrow (Monday).
> > > > >
> > > > > [Okay, so not exactly "tomorrow" but I did get back to this.]
> > > > >
> > > > > Geoff, a few things:
> > > > >
> > > > > 1) Any update on these issues?
> > >
> > > Yes - I've discovered the primary trigger of my problems. I'm using
> > > some very small tags from Murata, and they don't have a strong signal.
> > > Sometimes when writing, the tags can get corrupted data written to
> > > them. When the tag is verified by re-reading it, neard bails out
> > > because it finds non-utf8 characters. So far I have found it
> > > impossible to rewrite a tag once it has been mal-formed.
> >
> > Okay, that's interesting. neard still shouldn't bail out so we'll
> > have to look at that.
>
> This is the most critical thing for us right now. Can you make a
> malformed tag and try it to see if you have the same issue? What I
> typically see is 0xFE character too early in the string, or similarly
> the length being too long for the string. If you can do that, then
> try to write or read it via neard. If you can confirm the quitting
> behavior, that will help a lot. I can live with the corruption,
> because I can detect it and re-write if it happens.
I don't have such a thing but I can always hack something to write bogus
data. I may not get to this until next week, though.
> > > > > 2) Do you have all of the NFC-related patches from the nfc-next master
> > > > > branch? In particular, do you have all of Thierry's patches to
> > > > > net/nfc/digial_*.c dated around June-July 2016? Without those patches,
> > > > > I see a panic; with them, I don't.
> > >
> > > No, we don't. the last patch I've got in our kernel version is yours
> > > from 7-21-2014. I'm inquiring with more experienced people to see how
> > > to address that.
> >
> > Oh... Then you really need to update. Look at the master branch in the
> > nfc-next repo (git://git.kernel.org/pub/scm/linux/kernel/git/sameo/nfc-next.git)
>
> Those commits are in the latest ti build,
> https://git.ti.com/ti-linux-kernel/ti-linux-kernel/commits/ti-linux-4.9.y,
> so I've built that up.
Yes, v4.9.y has everything so that's a good one to work from.
> Unfortunately bricked the board and don't
> have the dev tools to fix it with me. Bummer, should be back into it
> tomorrow.
:(
^ permalink raw reply
* [PATCH v5 3/3] wireless: Set NL80211_EXT_FEATURE_CQM_RSSI_LIST in multiple drivers
From: Andrew Zaborowski @ 2017-02-10 3:50 UTC (permalink / raw)
To: linux-wireless
In-Reply-To: <20170210035023.11471-1-andrew.zaborowski@intel.com>
Set the NL80211_EXT_FEATURE_CQM_RSSI_LIST wiphy extended feature
wholesale in all mac80211-based drivers that do not set the
IEEE80211_VIF_BEACON_FILTER flags on their interfaces. mac80211 will
be processing supplied RSSI values in ieee80211_rx_mgmt_beacon and
will detect when the thresholds set by
ieee80211_set_cqm_rssi_range_config are crossed. Remaining (few)
drivers need code to enable the firmware to monitor the thresholds.
This is mostly only compile-tested.
Signed-off-by: Andrew Zaborowski <andrew.zaborowski@intel.com>
---
drivers/net/wireless/admtek/adm8211.c | 2 ++
drivers/net/wireless/ath/ar5523/ar5523.c | 2 ++
drivers/net/wireless/ath/ath10k/mac.c | 2 ++
drivers/net/wireless/ath/ath5k/base.c | 2 ++
drivers/net/wireless/ath/ath9k/htc_drv_init.c | 2 ++
drivers/net/wireless/ath/ath9k/init.c | 2 ++
drivers/net/wireless/ath/carl9170/main.c | 2 ++
drivers/net/wireless/ath/wcn36xx/main.c | 3 +++
drivers/net/wireless/atmel/at76c50x-usb.c | 2 ++
drivers/net/wireless/broadcom/b43/main.c | 2 ++
drivers/net/wireless/broadcom/b43legacy/main.c | 2 ++
drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c | 2 ++
drivers/net/wireless/intel/iwlegacy/3945-mac.c | 2 ++
drivers/net/wireless/intel/iwlegacy/4965-mac.c | 2 ++
drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c | 2 ++
drivers/net/wireless/mac80211_hwsim.c | 2 ++
drivers/net/wireless/marvell/libertas_tf/main.c | 2 ++
drivers/net/wireless/marvell/mwl8k.c | 2 ++
drivers/net/wireless/mediatek/mt7601u/init.c | 2 ++
drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 3 +++
drivers/net/wireless/realtek/rtl818x/rtl8180/dev.c | 2 ++
drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c | 2 ++
drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 2 ++
drivers/net/wireless/rsi/rsi_91x_mac80211.c | 2 ++
drivers/net/wireless/zydas/zd1211rw/zd_mac.c | 2 ++
drivers/staging/vt6655/device_main.c | 2 ++
drivers/staging/vt6656/main_usb.c | 2 ++
27 files changed, 56 insertions(+)
diff --git a/drivers/net/wireless/admtek/adm8211.c b/drivers/net/wireless/admtek/adm8211.c
index 098c814..ed626f5 100644
--- a/drivers/net/wireless/admtek/adm8211.c
+++ b/drivers/net/wireless/admtek/adm8211.c
@@ -1917,6 +1917,8 @@ static int adm8211_probe(struct pci_dev *pdev,
dev->wiphy->bands[NL80211_BAND_2GHZ] = &priv->band;
+ wiphy_ext_feature_set(dev->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
err = ieee80211_register_hw(dev);
if (err) {
printk(KERN_ERR "%s (adm8211): Cannot register device\n",
diff --git a/drivers/net/wireless/ath/ar5523/ar5523.c b/drivers/net/wireless/ath/ar5523/ar5523.c
index 7a60d2e..f2f4ccf 100644
--- a/drivers/net/wireless/ath/ar5523/ar5523.c
+++ b/drivers/net/wireless/ath/ar5523/ar5523.c
@@ -1689,6 +1689,8 @@ static int ar5523_probe(struct usb_interface *intf,
if (error)
goto out_cancel_rx_cmd;
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
usb_set_intfdata(intf, hw);
error = ieee80211_register_hw(hw);
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index d1b7edb..dab6270 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -8189,6 +8189,8 @@ int ath10k_mac_register(struct ath10k *ar)
ar->hw->wiphy->cipher_suites = cipher_suites;
ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
+ wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
ret = ieee80211_register_hw(ar->hw);
if (ret) {
ath10k_err(ar, "failed to register ieee80211: %d\n", ret);
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index d98fd42..92ece64 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -2564,6 +2564,8 @@ ath5k_init_ah(struct ath5k_hw *ah, const struct ath_bus_ops *bus_ops)
hw->extra_tx_headroom = 2;
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
/*
* Mark the device as detached to avoid processing
* interrupts until setup is complete.
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index b65c1b6..defacc6 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -780,6 +780,8 @@ static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv,
}
SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
+
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
}
static int ath9k_init_firmware_version(struct ath9k_htc_priv *priv)
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index 084ad1b..145770d 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -953,6 +953,8 @@ static void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
ath9k_cmn_reload_chainmask(ah);
SET_IEEE80211_PERM_ADDR(hw, common->macaddr);
+
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
}
int ath9k_init_device(u16 devid, struct ath_softc *sc,
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c
index ffb22a0..988c885 100644
--- a/drivers/net/wireless/ath/carl9170/main.c
+++ b/drivers/net/wireless/ath/carl9170/main.c
@@ -1874,6 +1874,8 @@ void *carl9170_alloc(size_t priv_size)
for (i = 0; i < ARRAY_SIZE(ar->noise); i++)
ar->noise[i] = -95; /* ATH_DEFAULT_NOISE_FLOOR */
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
return ar;
err_nomem:
diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
index e1d59da..1b6c173 100644
--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -1046,6 +1046,9 @@ static int wcn36xx_init_ieee80211(struct wcn36xx *wcn)
wcn->hw->sta_data_size = sizeof(struct wcn36xx_sta);
wcn->hw->vif_data_size = sizeof(struct wcn36xx_vif);
+ wiphy_ext_feature_set(wcn->hw->wiphy,
+ NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
return ret;
}
diff --git a/drivers/net/wireless/atmel/at76c50x-usb.c b/drivers/net/wireless/atmel/at76c50x-usb.c
index 0e18067..09defbc 100644
--- a/drivers/net/wireless/atmel/at76c50x-usb.c
+++ b/drivers/net/wireless/atmel/at76c50x-usb.c
@@ -2377,6 +2377,8 @@ static int at76_init_new_device(struct at76_priv *priv,
wiphy->hw_version = priv->board_type;
+ wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
ret = ieee80211_register_hw(priv->hw);
if (ret) {
printk(KERN_ERR "cannot register mac80211 hw (status %d)!\n",
diff --git a/drivers/net/wireless/broadcom/b43/main.c b/drivers/net/wireless/broadcom/b43/main.c
index 52f3541..d23aac7 100644
--- a/drivers/net/wireless/broadcom/b43/main.c
+++ b/drivers/net/wireless/broadcom/b43/main.c
@@ -5598,6 +5598,8 @@ static struct b43_wl *b43_wireless_init(struct b43_bus_dev *dev)
hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
wl->hw_registred = false;
hw->max_rates = 2;
SET_IEEE80211_DEV(hw, dev->dev);
diff --git a/drivers/net/wireless/broadcom/b43legacy/main.c b/drivers/net/wireless/broadcom/b43legacy/main.c
index e97ab2b..44781b8 100644
--- a/drivers/net/wireless/broadcom/b43legacy/main.c
+++ b/drivers/net/wireless/broadcom/b43legacy/main.c
@@ -3850,6 +3850,8 @@ static int b43legacy_wireless_init(struct ssb_device *dev)
else
SET_IEEE80211_PERM_ADDR(hw, sprom->il0mac);
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
/* Get and initialize struct b43legacy_wl */
wl = hw_to_b43legacy_wl(hw);
memset(wl, 0, sizeof(*wl));
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
index 7c2a9a9..ddfdfe1 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
@@ -1082,6 +1082,8 @@ static int ieee_hw_init(struct ieee80211_hw *hw)
* hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD;
*/
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
hw->rate_control_algorithm = "minstrel_ht";
hw->sta_data_size = 0;
diff --git a/drivers/net/wireless/intel/iwlegacy/3945-mac.c b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
index e8e6511..38bf403 100644
--- a/drivers/net/wireless/intel/iwlegacy/3945-mac.c
+++ b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
@@ -3592,6 +3592,8 @@ il3945_setup_mac(struct il_priv *il)
il_leds_init(il);
+ wiphy_ext_feature_set(il->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
ret = ieee80211_register_hw(il->hw);
if (ret) {
IL_ERR("Failed to register hw (error %d)\n", ret);
diff --git a/drivers/net/wireless/intel/iwlegacy/4965-mac.c b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
index a91d170..54ecda5 100644
--- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c
+++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
@@ -5799,6 +5799,8 @@ il4965_mac_setup_register(struct il_priv *il, u32 max_probe_length)
il_leds_init(il);
+ wiphy_ext_feature_set(il->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
ret = ieee80211_register_hw(il->hw);
if (ret) {
IL_ERR("Failed to register hw (error %d)\n", ret);
diff --git a/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
index 8c07194..2b23c3f 100644
--- a/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/dvm/mac80211.c
@@ -213,6 +213,8 @@ int iwlagn_mac_setup_register(struct iwl_priv *priv,
iwl_leds_init(priv);
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
ret = ieee80211_register_hw(priv->hw);
if (ret) {
IWL_ERR(priv, "Failed to register hw (error %d)\n", ret);
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 1620a5d..0150747 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -2645,6 +2645,8 @@ static int mac80211_hwsim_new_radio(struct genl_info *info,
if (param->no_vif)
ieee80211_hw_set(hw, NO_AUTO_VIF);
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
err = ieee80211_register_hw(hw);
if (err < 0) {
printk(KERN_DEBUG "mac80211_hwsim: ieee80211_register_hw failed (%d)\n",
diff --git a/drivers/net/wireless/marvell/libertas_tf/main.c b/drivers/net/wireless/marvell/libertas_tf/main.c
index 54e426c..d803331 100644
--- a/drivers/net/wireless/marvell/libertas_tf/main.c
+++ b/drivers/net/wireless/marvell/libertas_tf/main.c
@@ -641,6 +641,8 @@ struct lbtf_private *lbtf_add_card(void *card, struct device *dmdev)
BIT(NL80211_IFTYPE_ADHOC);
skb_queue_head_init(&priv->bc_ps_buf);
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
SET_IEEE80211_DEV(hw, dmdev);
INIT_WORK(&priv->cmd_work, lbtf_cmd_work);
diff --git a/drivers/net/wireless/marvell/mwl8k.c b/drivers/net/wireless/marvell/mwl8k.c
index b1b400b..c295a4c 100644
--- a/drivers/net/wireless/marvell/mwl8k.c
+++ b/drivers/net/wireless/marvell/mwl8k.c
@@ -6144,6 +6144,8 @@ static int mwl8k_firmware_load_success(struct mwl8k_priv *priv)
if (priv->sta_macids_supported || priv->device_info->fw_image_sta)
hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_STATION);
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
rc = ieee80211_register_hw(hw);
if (rc) {
wiphy_err(hw->wiphy, "Cannot register device\n");
diff --git a/drivers/net/wireless/mediatek/mt7601u/init.c b/drivers/net/wireless/mediatek/mt7601u/init.c
index a6e9017..d3b611a 100644
--- a/drivers/net/wireless/mediatek/mt7601u/init.c
+++ b/drivers/net/wireless/mediatek/mt7601u/init.c
@@ -615,6 +615,8 @@ int mt7601u_register_device(struct mt7601u_dev *dev)
wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
+ wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
ret = mt76_init_sband_2g(dev);
if (ret)
return ret;
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
index 8fcbc8d..29c97a8 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
@@ -1384,6 +1384,9 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
rt2x00dev->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
+ wiphy_ext_feature_set(rt2x00dev->hw->wiphy,
+ NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
/*
* Initialize ieee80211 structure.
*/
diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8180/dev.c b/drivers/net/wireless/realtek/rtl818x/rtl8180/dev.c
index e895a84..e387dec 100644
--- a/drivers/net/wireless/realtek/rtl818x/rtl8180/dev.c
+++ b/drivers/net/wireless/realtek/rtl818x/rtl8180/dev.c
@@ -1877,6 +1877,8 @@ static int rtl8180_probe(struct pci_dev *pdev,
else
ieee80211_hw_set(dev, SIGNAL_UNSPEC);
+ wiphy_ext_feature_set(dev->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
rtl8180_eeprom_read(priv);
switch (priv->rf_type) {
diff --git a/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c b/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c
index 231f84d..274ad6d 100644
--- a/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c
+++ b/drivers/net/wireless/realtek/rtl818x/rtl8187/dev.c
@@ -1609,6 +1609,8 @@ static int rtl8187_probe(struct usb_interface *intf,
dev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
BIT(NL80211_IFTYPE_ADHOC) ;
+ wiphy_ext_feature_set(dev->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
if ((id->driver_info == DEVICE_RTL8187) && priv->is_rtl8187b)
printk(KERN_INFO "rtl8187: inconsistency between id with OEM"
" info!\n");
diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
index 3a86675..75fbb39 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
@@ -6134,6 +6134,8 @@ static int rtl8xxxu_probe(struct usb_interface *interface,
ieee80211_hw_set(hw, HAS_RATE_CONTROL);
ieee80211_hw_set(hw, AMPDU_AGGREGATION);
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
ret = ieee80211_register_hw(priv->hw);
if (ret) {
dev_err(&udev->dev, "%s: Failed to register: %i\n",
diff --git a/drivers/net/wireless/rsi/rsi_91x_mac80211.c b/drivers/net/wireless/rsi/rsi_91x_mac80211.c
index e321647..021e5ac 100644
--- a/drivers/net/wireless/rsi/rsi_91x_mac80211.c
+++ b/drivers/net/wireless/rsi/rsi_91x_mac80211.c
@@ -1261,6 +1261,8 @@ int rsi_mac80211_attach(struct rsi_common *common)
wiphy->reg_notifier = rsi_reg_notify;
+ wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
status = ieee80211_register_hw(hw);
if (status)
return status;
diff --git a/drivers/net/wireless/zydas/zd1211rw/zd_mac.c b/drivers/net/wireless/zydas/zd1211rw/zd_mac.c
index 3e37a04..fe6517a 100644
--- a/drivers/net/wireless/zydas/zd1211rw/zd_mac.c
+++ b/drivers/net/wireless/zydas/zd1211rw/zd_mac.c
@@ -1408,6 +1408,8 @@ struct ieee80211_hw *zd_mac_alloc_hw(struct usb_interface *intf)
BIT(NL80211_IFTYPE_ADHOC) |
BIT(NL80211_IFTYPE_AP);
+ wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
hw->max_signal = 100;
hw->queues = 1;
hw->extra_tx_headroom = sizeof(struct zd_ctrlset);
diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c
index da0f711..7f18f70 100644
--- a/drivers/staging/vt6655/device_main.c
+++ b/drivers/staging/vt6655/device_main.c
@@ -1661,6 +1661,8 @@ vt6655_probe(struct pci_dev *pcid, const struct pci_device_id *ent)
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
+ wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
ieee80211_hw_set(priv->hw, TIMING_BEACON_ONLY);
ieee80211_hw_set(priv->hw, SIGNAL_DBM);
ieee80211_hw_set(priv->hw, RX_INCLUDES_FCS);
diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c
index 50d02d9..80b5c73 100644
--- a/drivers/staging/vt6656/main_usb.c
+++ b/drivers/staging/vt6656/main_usb.c
@@ -986,6 +986,8 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id)
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_AP);
+ wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
ieee80211_hw_set(priv->hw, TIMING_BEACON_ONLY);
ieee80211_hw_set(priv->hw, SIGNAL_DBM);
ieee80211_hw_set(priv->hw, RX_INCLUDES_FCS);
--
2.9.3
^ permalink raw reply related
* [PATCH v5 1/3] cfg80211: Accept multiple RSSI thresholds for CQM
From: Andrew Zaborowski @ 2017-02-10 3:50 UTC (permalink / raw)
To: linux-wireless
Change the SET CQM command's RSSI threshold attribute to accept any
number of thresholds as a sorted array. The API should be backwards
compatible so that if one s32 threshold value is passed, the old
mechanism is enabled. The netlink event generated is the same in both
cases.
cfg80211 handles an arbitrary number of RSSI thresholds but drivers have
to provide a method (set_cqm_rssi_range_config) that configures a range
set by a high and a low value. Drivers have to call back when the RSSI
goes out of that range and there's no additional event for each time the
range is reconfigured as there was with the current one-threshold API.
This method doesn't have a hysteresis parameter because there's no
benefit to the cfg80211 code from having the hysteresis be handled by
hardware/driver in terms of the number of wakeups. At the same time
it would likely be less consistent between drivers if offloaded or
done in the drivers.
Signed-off-by: Andrew Zaborowski <andrew.zaborowski@intel.com>
---
changes in v3:
- define NL80211_EXT_FEATURE_CQM_RSSI_LIST which drivers need to set
if they implement set_cqm_rssi_range_config (mac80211 is a special
case)
- error check the kzalloc in nl80211_set_cqm_rssi
- add a rdev->ops->get_station check before calling get_station
changes in v4:
- simplify the case of disabling CQM in nl80211_set_cqm_rssi
changed in v5:
- drop unneeded NL80211_EXT_FEATURE_CQM_RSSI_LIST check
- change the way new low/high threshold is calculated in
cfg80211_cqm_rssi_update to make sure it's "hyst" away from range
border to further reduce number of events
- clarify NL80211_EXT_FEATURE_CQM_RSSI_LIST description in nl80211.h
---
include/net/cfg80211.h | 13 ++++
include/uapi/linux/nl80211.h | 9 ++-
net/wireless/core.c | 9 +++
net/wireless/core.h | 9 +++
net/wireless/nl80211.c | 141 +++++++++++++++++++++++++++++++++++++++----
net/wireless/rdev-ops.h | 12 ++++
net/wireless/trace.h | 22 +++++++
7 files changed, 201 insertions(+), 14 deletions(-)
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index c92dc03..86c12f8 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -2712,6 +2712,11 @@ struct cfg80211_nan_func {
* the current level is above/below the configured threshold; this may
* need some care when the configuration is changed (without first being
* disabled.)
+ * @set_cqm_rssi_range_config: Configure two RSSI thresholds in the
+ * connection quality monitor. An event is to be sent only when the
+ * signal level is found to be outside the two values. The driver should
+ * set %NL80211_EXT_FEATURE_CQM_RSSI_LIST if this method is implemented.
+ * If it is provided then there's no point providing @set_cqm_rssi_config.
* @set_cqm_txe_config: Configure connection quality monitor TX error
* thresholds.
* @sched_scan_start: Tell the driver to start a scheduled scan.
@@ -3001,6 +3006,10 @@ struct cfg80211_ops {
struct net_device *dev,
s32 rssi_thold, u32 rssi_hyst);
+ int (*set_cqm_rssi_range_config)(struct wiphy *wiphy,
+ struct net_device *dev,
+ s32 rssi_low, s32 rssi_high);
+
int (*set_cqm_txe_config)(struct wiphy *wiphy,
struct net_device *dev,
u32 rate, u32 pkts, u32 intvl);
@@ -3871,6 +3880,7 @@ void wiphy_free(struct wiphy *wiphy);
struct cfg80211_conn;
struct cfg80211_internal_bss;
struct cfg80211_cached_keys;
+struct cfg80211_cqm_config;
/**
* struct wireless_dev - wireless device state
@@ -3934,6 +3944,7 @@ struct cfg80211_cached_keys;
* @event_list: (private) list for internal event processing
* @event_lock: (private) lock for event list
* @owner_nlportid: (private) owner socket port ID
+ * @cqm_config: (private) nl80211 RSSI monitor state
*/
struct wireless_dev {
struct wiphy *wiphy;
@@ -4002,6 +4013,8 @@ struct wireless_dev {
bool prev_bssid_valid;
} wext;
#endif
+
+ struct cfg80211_cqm_config *cqm_config;
};
static inline u8 *wdev_address(struct wireless_dev *wdev)
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 5ed257c..9a499b1 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -3942,7 +3942,10 @@ enum nl80211_ps_state {
* @__NL80211_ATTR_CQM_INVALID: invalid
* @NL80211_ATTR_CQM_RSSI_THOLD: RSSI threshold in dBm. This value specifies
* the threshold for the RSSI level at which an event will be sent. Zero
- * to disable.
+ * to disable. Alternatively, if %NL80211_EXT_FEATURE_CQM_RSSI_LIST is
+ * set, multiple values can be supplied as a low-to-high sorted array of
+ * threshold values in dBm. Events will be sent when the RSSI value
+ * crosses any of the thresholds.
* @NL80211_ATTR_CQM_RSSI_HYST: RSSI hysteresis in dBm. This value specifies
* the minimum amount the RSSI level must change after an event before a
* new event may be issued (to reduce effects of RSSI oscillation).
@@ -4753,6 +4756,9 @@ enum nl80211_feature_flags {
* @NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI: The driver supports sched_scan
* for reporting BSSs with better RSSI than the current connected BSS
* (%NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI).
+ * @NL80211_EXT_FEATURE_CQM_RSSI_LIST: With this driver the
+ * %NL80211_ATTR_CQM_RSSI_THOLD attribute accepts a list of zero or more
+ * RSSI threshold values to monitor rather than exactly one threshold.
*
* @NUM_NL80211_EXT_FEATURES: number of extended features.
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
@@ -4771,6 +4777,7 @@ enum nl80211_ext_feature_index {
NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA,
NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED,
NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI,
+ NL80211_EXT_FEATURE_CQM_RSSI_LIST,
/* add new features before the definition below */
NUM_NL80211_EXT_FEATURES,
diff --git a/net/wireless/core.c b/net/wireless/core.c
index e55e05b..04143df 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -954,6 +954,12 @@ void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked)
}
EXPORT_SYMBOL(wiphy_rfkill_set_hw_state);
+void cfg80211_cqm_config_free(struct wireless_dev *wdev)
+{
+ kfree(wdev->cqm_config);
+ wdev->cqm_config = NULL;
+}
+
void cfg80211_unregister_wdev(struct wireless_dev *wdev)
{
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
@@ -980,6 +986,8 @@ void cfg80211_unregister_wdev(struct wireless_dev *wdev)
WARN_ON_ONCE(1);
break;
}
+
+ cfg80211_cqm_config_free(wdev);
}
EXPORT_SYMBOL(cfg80211_unregister_wdev);
@@ -1234,6 +1242,7 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb,
kzfree(wdev->wext.keys);
#endif
flush_work(&wdev->disconnect_wk);
+ cfg80211_cqm_config_free(wdev);
}
/*
* synchronise (so that we won't find this netdev
diff --git a/net/wireless/core.h b/net/wireless/core.h
index 58ca206..efa690a 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -272,6 +272,13 @@ struct cfg80211_iface_destroy {
u32 nlportid;
};
+struct cfg80211_cqm_config {
+ u32 rssi_hyst;
+ s32 last_rssi_event_value;
+ int n_rssi_thresholds;
+ s32 rssi_thresholds[0];
+};
+
void cfg80211_destroy_ifaces(struct cfg80211_registered_device *rdev);
/* free object */
@@ -512,4 +519,6 @@ void cfg80211_stop_nan(struct cfg80211_registered_device *rdev,
#define CFG80211_DEV_WARN_ON(cond) ({bool __r = (cond); __r; })
#endif
+void cfg80211_cqm_config_free(struct wireless_dev *wdev);
+
#endif /* __NET_WIRELESS_CORE_H */
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index b5f755b..6707ce2 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -9472,7 +9472,7 @@ static int nl80211_get_power_save(struct sk_buff *skb, struct genl_info *info)
static const struct nla_policy
nl80211_attr_cqm_policy[NL80211_ATTR_CQM_MAX + 1] = {
- [NL80211_ATTR_CQM_RSSI_THOLD] = { .type = NLA_U32 },
+ [NL80211_ATTR_CQM_RSSI_THOLD] = { .type = NLA_BINARY },
[NL80211_ATTR_CQM_RSSI_HYST] = { .type = NLA_U32 },
[NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT] = { .type = NLA_U32 },
[NL80211_ATTR_CQM_TXE_RATE] = { .type = NLA_U32 },
@@ -9501,28 +9501,126 @@ static int nl80211_set_cqm_txe(struct genl_info *info,
return rdev_set_cqm_txe_config(rdev, dev, rate, pkts, intvl);
}
+static int cfg80211_cqm_rssi_update(struct cfg80211_registered_device *rdev,
+ struct net_device *dev)
+{
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+ s32 last, low, high;
+ u32 hyst;
+ int i, n;
+ int err;
+
+ /* RSSI reporting disabled? */
+ if (!wdev->cqm_config)
+ return rdev_set_cqm_rssi_range_config(rdev, dev, 0, 0);
+
+ /*
+ * Obtain current RSSI value if possible, if not and no RSSI threshold
+ * event has been received yet, we should receive an event after a
+ * connection is established and enough beacons received to calculate
+ * the average.
+ */
+ if (!wdev->cqm_config->last_rssi_event_value && wdev->current_bss &&
+ rdev->ops->get_station) {
+ struct station_info sinfo;
+ u8 *mac_addr;
+
+ mac_addr = wdev->current_bss->pub.bssid;
+
+ err = rdev_get_station(rdev, dev, mac_addr, &sinfo);
+ if (err)
+ return err;
+
+ if (sinfo.filled & BIT(NL80211_STA_INFO_BEACON_SIGNAL_AVG))
+ wdev->cqm_config->last_rssi_event_value =
+ (s8) sinfo.rx_beacon_signal_avg;
+ }
+
+ last = wdev->cqm_config->last_rssi_event_value;
+ hyst = wdev->cqm_config->rssi_hyst;
+ n = wdev->cqm_config->n_rssi_thresholds;
+
+ for (i = 0; i < n; i++)
+ if (last < wdev->cqm_config->rssi_thresholds[i])
+ break;
+
+ low = i > 0 ? wdev->cqm_config->rssi_thresholds[i - 1] : S32_MIN;
+ high = i < n ? wdev->cqm_config->rssi_thresholds[i] : S32_MAX;
+
+ if (last < (s32) (low + hyst))
+ low -= hyst;
+ if (last > (s32) (high - hyst))
+ high += hyst;
+
+ return rdev_set_cqm_rssi_range_config(rdev, dev, low, high - 1);
+}
+
static int nl80211_set_cqm_rssi(struct genl_info *info,
- s32 threshold, u32 hysteresis)
+ const s32 *thresholds, int n_thresholds,
+ u32 hysteresis)
{
struct cfg80211_registered_device *rdev = info->user_ptr[0];
struct net_device *dev = info->user_ptr[1];
struct wireless_dev *wdev = dev->ieee80211_ptr;
+ int i, err;
+ s32 prev = S32_MIN;
- if (threshold > 0)
- return -EINVAL;
-
- /* disabling - hysteresis should also be zero then */
- if (threshold == 0)
- hysteresis = 0;
+ /* Check all values negative and sorted */
+ for (i = 0; i < n_thresholds; i++) {
+ if (thresholds[i] > 0 || thresholds[i] <= prev)
+ return -EINVAL;
- if (!rdev->ops->set_cqm_rssi_config)
- return -EOPNOTSUPP;
+ prev = thresholds[i];
+ }
if (wdev->iftype != NL80211_IFTYPE_STATION &&
wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)
return -EOPNOTSUPP;
- return rdev_set_cqm_rssi_config(rdev, dev, threshold, hysteresis);
+ wdev_lock(wdev);
+ cfg80211_cqm_config_free(wdev);
+ wdev_unlock(wdev);
+
+ if (n_thresholds <= 1 && rdev->ops->set_cqm_rssi_config) {
+ if (n_thresholds == 0 || thresholds[0] == 0) /* Disabling */
+ return rdev_set_cqm_rssi_config(rdev, dev, 0, 0);
+
+ return rdev_set_cqm_rssi_config(rdev, dev,
+ thresholds[0], hysteresis);
+ }
+
+ if (!wiphy_ext_feature_isset(&rdev->wiphy,
+ NL80211_EXT_FEATURE_CQM_RSSI_LIST))
+ return -EOPNOTSUPP;
+
+ if (n_thresholds == 1 && thresholds[0] == 0) /* Disabling */
+ n_thresholds = 0;
+
+ wdev_lock(wdev);
+ if (n_thresholds) {
+ struct cfg80211_cqm_config *cqm_config;
+
+ cqm_config = kzalloc(sizeof(struct cfg80211_cqm_config) +
+ n_thresholds * sizeof(s32), GFP_KERNEL);
+ if (!cqm_config) {
+ err = -ENOMEM;
+ goto unlock;
+ }
+
+ cqm_config->rssi_hyst = hysteresis;
+ cqm_config->n_rssi_thresholds = n_thresholds;
+ memcpy(cqm_config->rssi_thresholds, thresholds,
+ n_thresholds * sizeof(s32));
+
+ wdev->cqm_config = cqm_config;
+ }
+
+ err = cfg80211_cqm_rssi_update(rdev, dev);
+
+unlock:
+ wdev_unlock(wdev);
+
+ return err;
}
static int nl80211_set_cqm(struct sk_buff *skb, struct genl_info *info)
@@ -9542,10 +9640,16 @@ static int nl80211_set_cqm(struct sk_buff *skb, struct genl_info *info)
if (attrs[NL80211_ATTR_CQM_RSSI_THOLD] &&
attrs[NL80211_ATTR_CQM_RSSI_HYST]) {
- s32 threshold = nla_get_s32(attrs[NL80211_ATTR_CQM_RSSI_THOLD]);
+ const s32 *thresholds =
+ nla_data(attrs[NL80211_ATTR_CQM_RSSI_THOLD]);
+ int len = nla_len(attrs[NL80211_ATTR_CQM_RSSI_THOLD]);
u32 hysteresis = nla_get_u32(attrs[NL80211_ATTR_CQM_RSSI_HYST]);
- return nl80211_set_cqm_rssi(info, threshold, hysteresis);
+ if (len % 4)
+ return -EINVAL;
+
+ return nl80211_set_cqm_rssi(info, thresholds, len / 4,
+ hysteresis);
}
if (attrs[NL80211_ATTR_CQM_TXE_RATE] &&
@@ -13982,6 +14086,8 @@ void cfg80211_cqm_rssi_notify(struct net_device *dev,
s32 rssi_level, gfp_t gfp)
{
struct sk_buff *msg;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+ struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
trace_cfg80211_cqm_rssi_notify(dev, rssi_event, rssi_level);
@@ -13989,6 +14095,15 @@ void cfg80211_cqm_rssi_notify(struct net_device *dev,
rssi_event != NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH))
return;
+ if (wdev->cqm_config) {
+ wdev->cqm_config->last_rssi_event_value = rssi_level;
+
+ cfg80211_cqm_rssi_update(rdev, dev);
+
+ if (rssi_level == 0)
+ rssi_level = wdev->cqm_config->last_rssi_event_value;
+ }
+
msg = cfg80211_prepare_cqm(dev, NULL, gfp);
if (!msg)
return;
diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h
index 2f42507..f2baf59 100644
--- a/net/wireless/rdev-ops.h
+++ b/net/wireless/rdev-ops.h
@@ -750,6 +750,18 @@ rdev_set_cqm_rssi_config(struct cfg80211_registered_device *rdev,
}
static inline int
+rdev_set_cqm_rssi_range_config(struct cfg80211_registered_device *rdev,
+ struct net_device *dev, s32 low, s32 high)
+{
+ int ret;
+ trace_rdev_set_cqm_rssi_range_config(&rdev->wiphy, dev, low, high);
+ ret = rdev->ops->set_cqm_rssi_range_config(&rdev->wiphy, dev,
+ low, high);
+ trace_rdev_return_int(&rdev->wiphy, ret);
+ return ret;
+}
+
+static inline int
rdev_set_cqm_txe_config(struct cfg80211_registered_device *rdev,
struct net_device *dev, u32 rate, u32 pkts, u32 intvl)
{
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 776e80c..fd55786 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -1322,6 +1322,28 @@ TRACE_EVENT(rdev_set_cqm_rssi_config,
__entry->rssi_thold, __entry->rssi_hyst)
);
+TRACE_EVENT(rdev_set_cqm_rssi_range_config,
+ TP_PROTO(struct wiphy *wiphy,
+ struct net_device *netdev, s32 low, s32 high),
+ TP_ARGS(wiphy, netdev, low, high),
+ TP_STRUCT__entry(
+ WIPHY_ENTRY
+ NETDEV_ENTRY
+ __field(s32, rssi_low)
+ __field(s32, rssi_high)
+ ),
+ TP_fast_assign(
+ WIPHY_ASSIGN;
+ NETDEV_ASSIGN;
+ __entry->rssi_low = low;
+ __entry->rssi_high = high;
+ ),
+ TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT
+ ", range: %d - %d ",
+ WIPHY_PR_ARG, NETDEV_PR_ARG,
+ __entry->rssi_low, __entry->rssi_high)
+);
+
TRACE_EVENT(rdev_set_cqm_txe_config,
TP_PROTO(struct wiphy *wiphy, struct net_device *netdev, u32 rate,
u32 pkts, u32 intvl),
--
2.9.3
^ permalink raw reply related
* [PATCH v5 2/3] mac80211: Add set_cqm_rssi_range_config
From: Andrew Zaborowski @ 2017-02-10 3:50 UTC (permalink / raw)
To: linux-wireless
In-Reply-To: <20170210035023.11471-1-andrew.zaborowski@intel.com>
Support .set_cqm_rssi_range_config if the beacons are available for
processing in mac80211. There's no reason that this couldn't be
offloaded by mac80211-based drivers but there's no driver method for
that added in this patch.
Signed-off-by: Andrew Zaborowski <andrew.zaborowski@intel.com>
---
changes in v3:
- set NL80211_EXT_FEATURE_CQM_RSSI_LIST automatically in
ieee80211_register_hw based on the default interface's
IEEE80211_VIF_BEACON_FILTER flag.
changes in v4:
- drop the above attempt and set NL80211_EXT_FEATURE_CQM_RSSI_LIST
in a separate patch in each driver.
---
include/net/mac80211.h | 6 ++++++
net/mac80211/cfg.c | 28 ++++++++++++++++++++++++++++
net/mac80211/mlme.c | 24 ++++++++++++++++++++++++
3 files changed, 58 insertions(+)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index b9a08cd..3edb469 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -501,6 +501,10 @@ struct ieee80211_mu_group_data {
* implies disabled. As with the cfg80211 callback, a change here should
* cause an event to be sent indicating where the current value is in
* relation to the newly configured threshold.
+ * @cqm_rssi_low: Connection quality monitor RSSI lower threshold, a zero value
+ * implies disabled. This is an alternative mechanism to the single
+ * threshold event and can't be enabled simultaneously with it.
+ * @cqm_rssi_high: Connection quality monitor RSSI upper threshold.
* @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis
* @arp_addr_list: List of IPv4 addresses for hardware ARP filtering. The
* may filter ARP queries targeted for other addresses than listed here.
@@ -553,6 +557,8 @@ struct ieee80211_bss_conf {
u16 ht_operation_mode;
s32 cqm_rssi_thold;
u32 cqm_rssi_hyst;
+ s32 cqm_rssi_low;
+ s32 cqm_rssi_high;
struct cfg80211_chan_def chandef;
struct ieee80211_mu_group_data mu_group;
__be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN];
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index ac879bb..9c7490c 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -2630,6 +2630,33 @@ static int ieee80211_set_cqm_rssi_config(struct wiphy *wiphy,
bss_conf->cqm_rssi_thold = rssi_thold;
bss_conf->cqm_rssi_hyst = rssi_hyst;
+ bss_conf->cqm_rssi_low = 0;
+ bss_conf->cqm_rssi_high = 0;
+ sdata->u.mgd.last_cqm_event_signal = 0;
+
+ /* tell the driver upon association, unless already associated */
+ if (sdata->u.mgd.associated &&
+ sdata->vif.driver_flags & IEEE80211_VIF_SUPPORTS_CQM_RSSI)
+ ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_CQM);
+
+ return 0;
+}
+
+static int ieee80211_set_cqm_rssi_range_config(struct wiphy *wiphy,
+ struct net_device *dev,
+ s32 rssi_low, s32 rssi_high)
+{
+ struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ struct ieee80211_vif *vif = &sdata->vif;
+ struct ieee80211_bss_conf *bss_conf = &vif->bss_conf;
+
+ if (sdata->vif.driver_flags & IEEE80211_VIF_BEACON_FILTER)
+ return -EOPNOTSUPP;
+
+ bss_conf->cqm_rssi_low = rssi_low;
+ bss_conf->cqm_rssi_high = rssi_high;
+ bss_conf->cqm_rssi_thold = 0;
+ bss_conf->cqm_rssi_hyst = 0;
sdata->u.mgd.last_cqm_event_signal = 0;
/* tell the driver upon association, unless already associated */
@@ -3639,6 +3666,7 @@ const struct cfg80211_ops mac80211_config_ops = {
.mgmt_tx = ieee80211_mgmt_tx,
.mgmt_tx_cancel_wait = ieee80211_mgmt_tx_cancel_wait,
.set_cqm_rssi_config = ieee80211_set_cqm_rssi_config,
+ .set_cqm_rssi_range_config = ieee80211_set_cqm_rssi_range_config,
.mgmt_frame_register = ieee80211_mgmt_frame_register,
.set_antenna = ieee80211_set_antenna,
.get_antenna = ieee80211_get_antenna,
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 6e90301..2398693 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -3430,6 +3430,30 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
}
}
+ if (bss_conf->cqm_rssi_low &&
+ ifmgd->count_beacon_signal >= IEEE80211_SIGNAL_AVE_MIN_COUNT) {
+ int sig = -ewma_beacon_signal_read(&ifmgd->ave_beacon_signal);
+ int last_event = ifmgd->last_cqm_event_signal;
+ int low = bss_conf->cqm_rssi_low;
+ int high = bss_conf->cqm_rssi_high;
+
+ if (sig < low &&
+ (last_event == 0 || last_event >= low)) {
+ ifmgd->last_cqm_event_signal = sig;
+ ieee80211_cqm_rssi_notify(
+ &sdata->vif,
+ NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW,
+ sig, GFP_KERNEL);
+ } else if (sig > high &&
+ (last_event == 0 || last_event <= high)) {
+ ifmgd->last_cqm_event_signal = sig;
+ ieee80211_cqm_rssi_notify(
+ &sdata->vif,
+ NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH,
+ sig, GFP_KERNEL);
+ }
+ }
+
if (ifmgd->flags & IEEE80211_STA_CONNECTION_POLL) {
mlme_dbg_ratelimited(sdata,
"cancelling AP probe due to a received beacon\n");
--
2.9.3
^ permalink raw reply related
* Re: [Patch] NFC: trf7970a:
From: Geoff Lansberry @ 2017-02-10 0:41 UTC (permalink / raw)
To: Mark Greer
Cc: linux-wireless, Lauro Ramos Venancio, Aloisio Almeida Jr,
Samuel Ortiz, Justin Bronder, linux-nfc, Jaret Cantu
In-Reply-To: <20170209212706.GA26734@animalcreek.com>
On Thu, Feb 9, 2017 at 4:27 PM, Mark Greer <mgreer@animalcreek.com> wrote:
>
> On Thu, Feb 09, 2017 at 10:54:08AM -0500, Geoff Lansberry wrote:
> > On Wed, Feb 8, 2017 at 5:56 PM, Mark Greer <mgreer@animalcreek.com> wrote:
> > >
> > > I just realized that the linux-nfc is not CC'd so adding it.
> > >
> > > On Wed, Feb 08, 2017 at 03:53:39PM -0700, Mark Greer wrote:
> > > > On Sun, Dec 18, 2016 at 08:07:33PM -0700, Mark Greer wrote:
> > > > > On Sat, Dec 17, 2016 at 04:19:04PM -0500, Geoff Lansberry wrote:
> > > > > > Mark, from our consultant:
> > > > > >
> > > > > > It isn't important whether the flood script is successful in writing
> > > > > > or not. The point of it is to force a segfault by making many
> > > > > > requests. It needs to run for several hundred iterations (successful
> > > > > > or not) in order to generate the segfault.
> > > > >
> > > > > So neard crashes even when the write fails?? Okay, I'll let it run for
> > > > > a while tomorrow (Monday).
> > > >
> > > > [Okay, so not exactly "tomorrow" but I did get back to this.]
> > > >
> > > > Geoff, a few things:
> > > >
> > > > 1) Any update on these issues?
> >
> > Yes - I've discovered the primary trigger of my problems. I'm using
> > some very small tags from Murata, and they don't have a strong signal.
> > Sometimes when writing, the tags can get corrupted data written to
> > them. When the tag is verified by re-reading it, neard bails out
> > because it finds non-utf8 characters. So far I have found it
> > impossible to rewrite a tag once it has been mal-formed.
>
> Okay, that's interesting. neard still shouldn't bail out so we'll
> have to look at that.
This is the most critical thing for us right now. Can you make a
malformed tag and try it to see if you have the same issue? What I
typically see is 0xFE character too early in the string, or similarly
the length being too long for the string. If you can do that, then
try to write or read it via neard. If you can confirm the quitting
behavior, that will help a lot. I can live with the corruption,
because I can detect it and re-write if it happens.
>
> > > > 2) Do you have all of the NFC-related patches from the nfc-next master
> > > > branch? In particular, do you have all of Thierry's patches to
> > > > net/nfc/digial_*.c dated around June-July 2016? Without those patches,
> > > > I see a panic; with them, I don't.
> >
> > No, we don't. the last patch I've got in our kernel version is yours
> > from 7-21-2014. I'm inquiring with more experienced people to see how
> > to address that.
>
> Oh... Then you really need to update. Look at the master branch in the
> nfc-next repo (git://git.kernel.org/pub/scm/linux/kernel/git/sameo/nfc-next.git)
Those commits are in the latest ti build,
https://git.ti.com/ti-linux-kernel/ti-linux-kernel/commits/ti-linux-4.9.y,
so I've built that up. Unfortunately bricked the board and don't
have the dev tools to fix it with me. Bummer, should be back into it
tomorrow.
>
> Which kernel version are you using? If its old, you should update to the
> most recent version that you can. If you *absolutely* can't use a newer
> kernel, let me know as I may be able to help.
>
> Also, be sure to use the latest version of neard (currently 0.16).
>
> > > > 3) Assuming you have all of those patches, please revert the one with the
> > > > summary line of, "NFC: digital: Set the command pending flag", and tell me
> > > > if that stops the "Bogus state" messages. I don't know which repo/branch
> > > > you're using so I can't provide a commit id.
> >
> > No to the patches, but I found the commit you are talking about and
> > will look at it. Maybe possible to cherry pick it.
>
> No, don't cherry-pick it. I was asking you to revert that commit.
> Ignore this request for now because the commit is fine, it just seemed
> to cover up the issue so I wanted to see if it did for you too. I will
> dig into it more once I finish setting up a new SDCard for my test system
> (and get some time to look at it).
>
> Mark
> --
^ permalink raw reply
* Re: [Patch] NFC: trf7970a:
From: Mark Greer @ 2017-02-09 21:27 UTC (permalink / raw)
To: Geoff Lansberry
Cc: Mark Greer, linux-wireless, Lauro Ramos Venancio,
Aloisio Almeida Jr, Samuel Ortiz, Justin Bronder, linux-nfc,
Jaret Cantu
In-Reply-To: <CAO7Z3WKxXz1SsvOH8v5Xvy0jSdw1-NU_zXyu0QakR3UHnYgrqA@mail.gmail.com>
On Thu, Feb 09, 2017 at 10:54:08AM -0500, Geoff Lansberry wrote:
> On Wed, Feb 8, 2017 at 5:56 PM, Mark Greer <mgreer@animalcreek.com> wrote:
> >
> > I just realized that the linux-nfc is not CC'd so adding it.
> >
> > On Wed, Feb 08, 2017 at 03:53:39PM -0700, Mark Greer wrote:
> > > On Sun, Dec 18, 2016 at 08:07:33PM -0700, Mark Greer wrote:
> > > > On Sat, Dec 17, 2016 at 04:19:04PM -0500, Geoff Lansberry wrote:
> > > > > Mark, from our consultant:
> > > > >
> > > > > It isn't important whether the flood script is successful in writing
> > > > > or not. The point of it is to force a segfault by making many
> > > > > requests. It needs to run for several hundred iterations (successful
> > > > > or not) in order to generate the segfault.
> > > >
> > > > So neard crashes even when the write fails?? Okay, I'll let it run for
> > > > a while tomorrow (Monday).
> > >
> > > [Okay, so not exactly "tomorrow" but I did get back to this.]
> > >
> > > Geoff, a few things:
> > >
> > > 1) Any update on these issues?
>
> Yes - I've discovered the primary trigger of my problems. I'm using
> some very small tags from Murata, and they don't have a strong signal.
> Sometimes when writing, the tags can get corrupted data written to
> them. When the tag is verified by re-reading it, neard bails out
> because it finds non-utf8 characters. So far I have found it
> impossible to rewrite a tag once it has been mal-formed.
Okay, that's interesting. neard still shouldn't bail out so we'll
have to look at that.
> > > 2) Do you have all of the NFC-related patches from the nfc-next master
> > > branch? In particular, do you have all of Thierry's patches to
> > > net/nfc/digial_*.c dated around June-July 2016? Without those patches,
> > > I see a panic; with them, I don't.
>
> No, we don't. the last patch I've got in our kernel version is yours
> from 7-21-2014. I'm inquiring with more experienced people to see how
> to address that.
Oh... Then you really need to update. Look at the master branch in the
nfc-next repo (git://git.kernel.org/pub/scm/linux/kernel/git/sameo/nfc-next.git)
Which kernel version are you using? If its old, you should update to the
most recent version that you can. If you *absolutely* can't use a newer
kernel, let me know as I may be able to help.
Also, be sure to use the latest version of neard (currently 0.16).
> > > 3) Assuming you have all of those patches, please revert the one with the
> > > summary line of, "NFC: digital: Set the command pending flag", and tell me
> > > if that stops the "Bogus state" messages. I don't know which repo/branch
> > > you're using so I can't provide a commit id.
>
> No to the patches, but I found the commit you are talking about and
> will look at it. Maybe possible to cherry pick it.
No, don't cherry-pick it. I was asking you to revert that commit.
Ignore this request for now because the commit is fine, it just seemed
to cover up the issue so I wanted to see if it did for you too. I will
dig into it more once I finish setting up a new SDCard for my test system
(and get some time to look at it).
Mark
--
^ permalink raw reply
* Re: linux <=4.9.5, 4.10-rc7 ok, 4.9.6 - 4.9.8 nok with realtek wlan, atom
From: Larry Finger @ 2017-02-09 20:09 UTC (permalink / raw)
To: Bjorn Helgaas, rupert THURNER
Cc: linux-pci, Chaoming Li, Kalle Valo, linux-wireless, netdev,
linux-kernel
In-Reply-To: <20170209194321.GC11905@bhelgaas-glaptop.roam.corp.google.com>
On 02/09/2017 01:43 PM, Bjorn Helgaas wrote:
> [+cc rtl8192ce folks in case they've seen this]
>
> On Thu, Feb 09, 2017 at 03:45:01PM +0100, rupert THURNER wrote:
>> hi,
>>
>> not technical expert enough, i just wanted to give a short user
>> feedback. for realtek wlan on atom, kernels up to 4.9.5 are ok, and
>> kernel 4.10.0-rc7-g926af6273fc6 (arch linux-git version numbering) as
>> well. kernels 4.9.6, 4.9.7, and 4.9.8 fail, i.e. connection to a WLAN
>> hotspot is possible then drops, or connecting to wlan fails
>> alltogether.
>
> Thanks very much for your report, and sorry for the inconvenience.
>
> v4.10-rc7 works, so I guess we don't need to worry about fixing v4.10.
>
> But the stable kernels v4.9.6, v4.9.7, and v4.9.8 are broken, so we
> need to figure out why and make sure we fix the v4.9 stable series.
>
> I can't tell yet whether this is PCI-related or not. If it is,
> 4922a6a5cfa7 ("PCI: Enumerate switches below PCI-to-PCIe bridges")
> appeared in v4.9.6, and there is a known issue with that. The issue
> should be fixed by 610c2b7ff8f6 ("PCI/ASPM: Handle PCI-to-PCIe bridges
> as roots of PCIe hierarchies"), which appeared in v4.9.9, so I guess
> the first thing to do would be to test v4.9.9.
>
> If it's not fixed in v4.9.9, can you share the complete dmesg log
> (output of "dmesg" command) and "lspci -vv" output for v4.9.5 (last
> known working version) and v4.9.6 (first known broken version)? On
> v4.9.6, collect the dmesg output after the failure occurs.
>
>> 24: PCI 300.0: 0282 WLAN controller
>> [Created at pci.366]
>> Model: "Realtek RTL8188CE 802.11b/g/n WiFi Adapter"
>> Device: pci 0x8176 "RTL8188CE 802.11b/g/n WiFi Adapter"
>> Revision: 0x01
>> Driver: "rtl8192ce"
>> Driver Modules: "rtl8192ce"
>> Device File: wlp3s0
>> Features: WLAN
It would be helpful if someone were to bisect this issue. The only issue that
comes to mind was fixed in commit 52f5631a4c05 ("rtlwifi: rtl8192ce: Fix loading
of incorrect firmware") which is in 4.10-rc7 and will be backported to 4.9.
The above issue is one that could not be reproduced on my hardware, thus it took
Jurij Smakov to find the fix. Without his bisection of the problem, who knows
how long it would have taken to find my edit mistake.
Larry
^ permalink raw reply
* [PATCH] rtlwifi: btcoexist: fix semicolon.cocci warnings
From: Julia Lawall @ 2017-02-09 20:12 UTC (permalink / raw)
To: Larry Finger
Cc: Kalle Valo, Chaoming Li, Joe Perches, netdev, linux-wireless,
linux-kernel, kbuild-all
Remove unneeded semicolon.
Generated by: scripts/coccinelle/misc/semicolon.cocci
CC: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Julia Lawall <julia.lawall@lip6.fr>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
---
halbtc8821a2ant.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8821a2ant.c
+++ b/drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8821a2ant.c
@@ -2877,7 +2877,7 @@ static void halbtc8821a2ant_action_pan_e
false, false);
btc8821a2ant_sw_mech2(btcoexist, false, false,
false, 0x18);
- };
+ }
} else {
/* fw mechanism */
if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||
^ permalink raw reply
* Re: linux <=4.9.5, 4.10-rc7 ok, 4.9.6 - 4.9.8 nok with realtek wlan, atom
From: Bjorn Helgaas @ 2017-02-09 19:43 UTC (permalink / raw)
To: rupert THURNER
Cc: linux-pci, Larry Finger, Chaoming Li, Kalle Valo, linux-wireless,
netdev, linux-kernel
In-Reply-To: <CAJs9aZ9FqU-NCj2egBp6J06uD_Qp3Lje=mSSVbV4vNcYGKdumA@mail.gmail.com>
[+cc rtl8192ce folks in case they've seen this]
On Thu, Feb 09, 2017 at 03:45:01PM +0100, rupert THURNER wrote:
> hi,
>
> not technical expert enough, i just wanted to give a short user
> feedback. for realtek wlan on atom, kernels up to 4.9.5 are ok, and
> kernel 4.10.0-rc7-g926af6273fc6 (arch linux-git version numbering) as
> well. kernels 4.9.6, 4.9.7, and 4.9.8 fail, i.e. connection to a WLAN
> hotspot is possible then drops, or connecting to wlan fails
> alltogether.
Thanks very much for your report, and sorry for the inconvenience.
v4.10-rc7 works, so I guess we don't need to worry about fixing v4.10.
But the stable kernels v4.9.6, v4.9.7, and v4.9.8 are broken, so we
need to figure out why and make sure we fix the v4.9 stable series.
I can't tell yet whether this is PCI-related or not. If it is,
4922a6a5cfa7 ("PCI: Enumerate switches below PCI-to-PCIe bridges")
appeared in v4.9.6, and there is a known issue with that. The issue
should be fixed by 610c2b7ff8f6 ("PCI/ASPM: Handle PCI-to-PCIe bridges
as roots of PCIe hierarchies"), which appeared in v4.9.9, so I guess
the first thing to do would be to test v4.9.9.
If it's not fixed in v4.9.9, can you share the complete dmesg log
(output of "dmesg" command) and "lspci -vv" output for v4.9.5 (last
known working version) and v4.9.6 (first known broken version)? On
v4.9.6, collect the dmesg output after the failure occurs.
> 24: PCI 300.0: 0282 WLAN controller
> [Created at pci.366]
> Model: "Realtek RTL8188CE 802.11b/g/n WiFi Adapter"
> Device: pci 0x8176 "RTL8188CE 802.11b/g/n WiFi Adapter"
> Revision: 0x01
> Driver: "rtl8192ce"
> Driver Modules: "rtl8192ce"
> Device File: wlp3s0
> Features: WLAN
^ permalink raw reply
* Re: [Patch] NFC: trf7970a:
From: Geoff Lansberry @ 2017-02-09 15:54 UTC (permalink / raw)
To: Mark Greer
Cc: linux-wireless, Lauro Ramos Venancio, Aloisio Almeida Jr,
Samuel Ortiz, Justin Bronder, linux-nfc, Jaret Cantu
In-Reply-To: <20170208225651.GB26286@animalcreek.com>
On Wed, Feb 8, 2017 at 5:56 PM, Mark Greer <mgreer@animalcreek.com> wrote:
>
> I just realized that the linux-nfc is not CC'd so adding it.
>
> On Wed, Feb 08, 2017 at 03:53:39PM -0700, Mark Greer wrote:
> > On Sun, Dec 18, 2016 at 08:07:33PM -0700, Mark Greer wrote:
> > > On Sat, Dec 17, 2016 at 04:19:04PM -0500, Geoff Lansberry wrote:
> > > > Mark, from our consultant:
> > > >
> > > > It isn't important whether the flood script is successful in writing
> > > > or not. The point of it is to force a segfault by making many
> > > > requests. It needs to run for several hundred iterations (successful
> > > > or not) in order to generate the segfault.
> > >
> > > So neard crashes even when the write fails?? Okay, I'll let it run for
> > > a while tomorrow (Monday).
> >
> > [Okay, so not exactly "tomorrow" but I did get back to this.]
> >
> > Geoff, a few things:
> >
> > 1) Any update on these issues?
Yes - I've discovered the primary trigger of my problems. I'm using
some very small tags from Murata, and they don't have a strong signal.
Sometimes when writing, the tags can get corrupted data written to
them. When the tag is verified by re-reading it, neard bails out
because it finds non-utf8 characters. So far I have found it
impossible to rewrite a tag once it has been mal-formed.
> >
> > 2) Do you have all of the NFC-related patches from the nfc-next master
> > branch? In particular, do you have all of Thierry's patches to
> > net/nfc/digial_*.c dated around June-July 2016? Without those patches,
> > I see a panic; with them, I don't.
No, we don't. the last patch I've got in our kernel version is yours
from 7-21-2014. I'm inquiring with more experienced people to see how
to address that.
> >
> > 3) Assuming you have all of those patches, please revert the one with the
> > summary line of, "NFC: digital: Set the command pending flag", and tell me
> > if that stops the "Bogus state" messages. I don't know which repo/branch
> > you're using so I can't provide a commit id.
No to the patches, but I found the commit you are talking about and
will look at it. Maybe possible to cherry pick it.
> >
> > Thanks,
> >
> > Mark
> > --
^ permalink raw reply
* Re: [PATCH 3/3] rt2x00: remove queue_entry from skbdesc
From: Stanislaw Gruszka @ 2017-02-09 15:02 UTC (permalink / raw)
To: Jeroen Roovers; +Cc: linux-wireless, Helmut Schaa
In-Reply-To: <CANCHnQq0111TX8psb4YizjSzOOUQSxj6Cf7OX8+L60J83wudsQ@mail.gmail.com>
On Thu, Feb 09, 2017 at 04:00:19PM +0100, Jeroen Roovers wrote:
> On 8 February 2017 at 13:51, Stanislaw Gruszka <sgruszka@redhat.com> wrote:
>
> > diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
> > index 2233b91..22d1881 100644
> > --- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
> > +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
> > @@ -116,8 +116,6 @@ struct skb_frame_desc {
> > __le32 iv[2];
> >
> > dma_addr_t skb_dma;
> > -
> > - struct queue_entry *entry;
> > };
> >
> > /**
>
> That change needs this line removed above:
>
> * @entry: The entry to which this sk buffer belongs.
Thanks, I will fix comments when post next rt2x00 patch series.
Stanislaw
^ permalink raw reply
* Re: [PATCH 3/3] rt2x00: remove queue_entry from skbdesc
From: Jeroen Roovers @ 2017-02-09 15:00 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: linux-wireless, Helmut Schaa
In-Reply-To: <1486558291-1615-4-git-send-email-sgruszka@redhat.com>
On 8 February 2017 at 13:51, Stanislaw Gruszka <sgruszka@redhat.com> wrote:
> diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
> index 2233b91..22d1881 100644
> --- a/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
> +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00queue.h
> @@ -116,8 +116,6 @@ struct skb_frame_desc {
> __le32 iv[2];
>
> dma_addr_t skb_dma;
> -
> - struct queue_entry *entry;
> };
>
> /**
That change needs this line removed above:
* @entry: The entry to which this sk buffer belongs.
Cheers.
jer
^ permalink raw reply
* Re: [PATCH] mac80211: fix CSA in IBSS mode
From: Johannes Berg @ 2017-02-09 14:19 UTC (permalink / raw)
To: Koen Vandeputte; +Cc: linux-wireless, Piotr Gawlowicz, Mikołaj Chwalisz
In-Reply-To: <1486564325-14251-1-git-send-email-koen.vandeputte@ncentric.com>
On Wed, 2017-02-08 at 15:32 +0100, Koen Vandeputte wrote:
> Add the missing IBSS capability flag during capability init as it
> needs
> to be inserted into the generated beacon in order for CSA to work.
>
Applied, thanks.
johannes
^ permalink raw reply
* [PATCH v5] wlcore: disable multicast filter in AP mode
From: Iain Hunter @ 2017-02-09 14:37 UTC (permalink / raw)
To: linux-wireless; +Cc: kvalo, Iain Hunter
In-Reply-To: <20170131104840.10366-1-i-hunter1@ti.com>
Enable AP support for allmulticast for MDNS. It can be enabled by bringing
up the interface with ip command with argument allmulticast on
Signed-off-by: Iain Hunter <i-hunter1@ti.com>
---
PATCH v5: fixes indentation of other closing bracket and missing Signed Off
drivers/net/wireless/ti/wlcore/main.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index 3241e9eba73..242111cd016 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -3281,6 +3281,21 @@ static void wl1271_op_configure_filter(struct ieee80211_hw *hw,
if (ret < 0)
goto out_sleep;
}
+
+ /*
+ * If interface in AP mode and created with allmulticast then disable
+ * the firmware filters so that all multicast packets are passed
+ * This is mandatory for MDNS based discovery protocols
+ */
+ if (wlvif->bss_type == BSS_TYPE_AP_BSS) {
+ if (*total & FIF_ALLMULTI) {
+ ret = wl1271_acx_group_address_tbl(wl, wlvif,
+ false,
+ NULL, 0);
+ if (ret < 0)
+ goto out_sleep;
+ }
+ }
}
/*
--
2.11.0
^ permalink raw reply related
* Re: [PATCH 2/3] rt2x00: call entry directly in rt2x00_dump_frame
From: Jeroen Roovers @ 2017-02-09 14:34 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: linux-wireless, Helmut Schaa
In-Reply-To: <1486558291-1615-3-git-send-email-sgruszka@redhat.com>
On 8 February 2017 at 13:51, Stanislaw Gruszka <sgruszka@redhat.com> wrote:
> drivers/net/wireless/ralink/rt2x00/rt2x00.h | 4 ++--
> diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00.h b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
> index ea299c4..26869b3 100644
> --- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
> +++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
> @@ -1400,11 +1400,11 @@ struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue,
> */
> #ifdef CONFIG_RT2X00_LIB_DEBUGFS
> void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
> - enum rt2x00_dump_type type, struct sk_buff *skb);
> + enum rt2x00_dump_type type, struct queue_entry *entry);
> #else
> static inline void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
> enum rt2x00_dump_type type,
> - struct sk_buff *skb)
> + struct queue_entry *entry)
> {
> }
> #endif /* CONFIG_RT2X00_LIB_DEBUGFS */
In the comment above that, you forgot to update:
* @skb: The skb containing the frame to be dumped.
Cheers,
jer
^ permalink raw reply
* pull-request: mac80211-next 2017-02-09
From: Johannes Berg @ 2017-02-09 14:27 UTC (permalink / raw)
To: David Miller; +Cc: netdev, linux-wireless
Hi Dave,
Here are some more (final) updates for -next. Nothing here is
really interesting, mostly cleanups and small fixes.
Please pull and let me know if there's any problem.
Thanks,
johannes
The following changes since commit d140199af510ad4749dc5e38b7922135258ba5fd:
bpf, lpm: fix kfree of im_node in trie_update_elem (2017-01-23 21:17:35 -0500)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git tags/mac80211-next-for-davem-2017-02-09
for you to fetch changes up to f181d6a3bcc35633facf5f3925699021c13492c5:
mac80211: fix CSA in IBSS mode (2017-02-09 15:18:24 +0100)
----------------------------------------------------------------
Some more updates:
* use shash in mac80211 crypto code where applicable
* some documentation fixes
* pass RSSI levels up in change notifications
* remove unused rfkill-regulator
* various other cleanups
----------------------------------------------------------------
Amadeusz Sławiński (1):
mac80211: use helper function to access ieee802_1d_to_ac[]
Andrzej Zaborowski (2):
mac80211: Pass new RSSI level in CQM RSSI notification
cfg80211: Pass new RSSI level in CQM RSSI notification
Ard Biesheuvel (2):
mac80211: fils_aead: Use crypto api CMAC shash rather than bare cipher
mac80211: aes-cmac: switch to shash CMAC driver
Arend Van Spriel (1):
nl80211: fix validation of scheduled scan info for wowlan netdetect
Dan Carpenter (1):
mac80211: check for allocation failure in debugfs code
Johannes Berg (7):
cfg80211: fix a documentation warning
mac80211: fix documentation warnings
rfkill: remove rfkill-regulator
wireless: radiotap: rewrite the radiotap header file
wireless: define cipher/AKM suites using a macro
mac80211: add back lost debugfs files
nl80211: add HT/VHT capabilities to AP parameters
Koen Vandeputte (1):
mac80211: fix CSA in IBSS mode
Luca Coelho (2):
cfg80211: make rdev assignment clearer in nl80211_testmode_dump()
cfg80211: fix NAN bands definition
Pichugin Dmitry (1):
cfg80211 debugfs: Cleanup some checkpatch issues
drivers/net/wireless/intel/iwlwifi/mvm/rx.c | 2 +
drivers/net/wireless/marvell/mwifiex/sta_event.c | 4 +-
drivers/net/wireless/rndis_wlan.c | 2 +-
drivers/net/wireless/rsi/rsi_91x_mac80211.c | 2 +-
drivers/net/wireless/st/cw1200/sta.c | 2 +-
drivers/net/wireless/ti/wl1251/event.c | 4 +-
drivers/net/wireless/ti/wlcore/event.c | 3 +-
include/linux/ieee80211.h | 49 +--
include/linux/rfkill-regulator.h | 48 ---
include/net/cfg80211.h | 92 +++--
include/net/ieee80211_radiotap.h | 455 ++++++++---------------
include/net/mac80211.h | 76 ++--
include/uapi/linux/nl80211.h | 60 ++-
net/mac80211/Kconfig | 1 +
net/mac80211/aes_cmac.c | 126 ++-----
net/mac80211/aes_cmac.h | 15 +-
net/mac80211/cfg.c | 4 +-
net/mac80211/debugfs.c | 12 +-
net/mac80211/debugfs_sta.c | 1 +
net/mac80211/fils_aead.c | 74 ++--
net/mac80211/ibss.c | 4 +-
net/mac80211/key.h | 2 +-
net/mac80211/mlme.c | 9 +-
net/mac80211/rx.c | 2 +-
net/mac80211/status.c | 2 +-
net/mac80211/trace.h | 27 +-
net/mac80211/tx.c | 4 +-
net/rfkill/Kconfig | 11 -
net/rfkill/Makefile | 1 -
net/rfkill/rfkill-regulator.c | 154 --------
net/wireless/core.c | 3 +-
net/wireless/debugfs.c | 10 +-
net/wireless/nl80211.c | 114 ++++--
net/wireless/trace.h | 27 +-
34 files changed, 559 insertions(+), 843 deletions(-)
delete mode 100644 include/linux/rfkill-regulator.h
delete mode 100644 net/rfkill/rfkill-regulator.c
^ permalink raw reply
* Re: [PATCH net-next v2 00/12] net: dsa: remove unnecessary phy.h include
From: Kalle Valo @ 2017-02-09 14:10 UTC (permalink / raw)
To: Florian Fainelli
Cc: David Miller, netdev, linux-mips, linux-nfs, linux-scsi,
linux-usb, linux-wireless, target-devel, andrew, anna.schumaker,
derek.chickles, felix.manlunas, bfields, jlayton, jirislaby,
mcgrof, madalin.bucur, UNGLinuxDriver, nab, mickflemm,
nicolas.ferre, raghu.vatsavayi, ralf, satananda.burla,
thomas.petazzoni, timur, trond.myklebust, vivien.didelot,
woojung.huh
In-Reply-To: <5fe312c8-e59e-669c-cd29-f6773adcd8e5@gmail.com>
Florian Fainelli <f.fainelli@gmail.com> writes:
>>> If not, for something like this it's a must:
>>>
>>> drivers/net/wireless/ath/wil6210/cfg80211.c:24:30: error: expected =E2=
=80=98)=E2=80=99 before =E2=80=98bool=E2=80=99
>>> module_param(disable_ap_sme, bool, 0444);
>>> ^
>>> drivers/net/wireless/ath/wil6210/cfg80211.c:25:34: error: expected =E2=
=80=98)=E2=80=99 before string constant
>>> MODULE_PARM_DESC(disable_ap_sme, " let user space handle AP mode SME");
>>> ^
>>> Like like that file needs linux/module.h included.
>>=20
>> Johannes already fixed a similar (or same) problem in my tree:
>>=20
>> wil6210: include moduleparam.h
>>=20
>> https://git.kernel.org/cgit/linux/kernel/git/kvalo/wireless-drivers-next=
.git/commit/?id=3D949c2d0096753d518ef6e0bd8418c8086747196b
>>=20
>> I'm planning to send you a pull request tomorrow which contains that
>> one.
>
> Thanks Kalle!
>
> David, can you hold on this series until Kalle's pull request gets
> submitted? Past this error, allmodconfig builds fine with this patch
> series (just tested). Thanks!
Just submitted the pull request:
https://patchwork.ozlabs.org/patch/726133/
--=20
Kalle Valo
^ permalink raw reply
* pull-request: wireless-drivers-next 2017-02-09
From: Kalle Valo @ 2017-02-09 14:08 UTC (permalink / raw)
To: David Miller; +Cc: linux-wireless, netdev, linux-kernel
Hi Dave,
another pull request for net-next. If the merge window starts on Sunday
this would be the last pull request from me with new features. But if it
doesn't open, I'm planning to send one more next week.
Please let me know if there any problems.
Kalle
The following changes since commit 62e13097c46c69dbd7544ab2cd585ccf48f360a4:
net: phy: broadcom: rehook BCM54612E specific init (2017-02-01 14:20:20 -=
0500)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next=
.git tags/wireless-drivers-next-for-davem-2017-02-09
for you to fetch changes up to cbda794cf1bb2f4a2e75e11fda1f89457169772e:
Merge tag 'iwlwifi-next-for-kalle-2017-02-08' of git://git.kernel.org/pub=
/scm/linux/kernel/git/iwlwifi/iwlwifi-next (2017-02-08 21:28:36 +0200)
----------------------------------------------------------------
wireless-drivers-next patches for 4.11
Mostly smaller changeds and fixes all over, nothing really major
standing out.
Major changes:
iwlwifi
* work on support for new A000 devices continues
* fix 802.11w, which was failing to due an IGTK bug
ath10k
* add debugfs file peer_debug_trigger for debugging firmware
----------------------------------------------------------------
Ashok Raj Nagarajan (1):
ath10k: fix reading sram contents for QCA4019
Avraham Stern (1):
iwlwifi: mvm: Fix CSA received immediately after association
Beni Lev (1):
iwlwifi: mvm: Use aux queue for offchannel frames in dqa
Bjorn Andersson (1):
wcn36xx: Implement cancel_hw_scan
Emmanuel Grumbach (6):
iwlwifi: mvm: fix PS-Poll enablement
iwlwifi: mvm: use the PROBE_RESP_QUEUE to send deauth to unknown stat=
ion
iwlwifi: pcie: don't increment / decrement a bool
iwlwifi: make RTPM depend on EXPERT
iwlwifi: dvm: don't call << operator with a negative value
iwlwifi: mvm: don't call << operator with a negative value
Felix Fietkau (3):
ath9k: rename tx_complete_work to hw_check_work
ath9k_hw: check if the chip failed to wake up
ath9k: fix race condition in enabling/disabling IRQs
Ganapathi Bhat (1):
mwifiex: Avoid skipping WEP key deletion for AP
Golan Ben Ami (2):
iwlwifi: pcie: Re-configure IVAR table after stop device
iwlwifi: pcie: set STATUS_RFKILL immediately after interrupt
Golan Ben-Ami (2):
iwlwifi: mvm: support v2 of mfuart load notification
iwlwifi: mvm: avoid exceeding the allowed print length
Goodstein, Mordechay (1):
iwlwifi: mvm: avoid race condition in ADD_STA.
Gregory Greenman (1):
iwlwifi: mvm: fix a print of NSS for HT rate
Haim Dreyfuss (3):
iwlwifi: pcie: move msix conf functions above other functions
iwlwifi: pcie: separate between SW and HW MSIX configuration
iwlwifi: pcie: re-configure IVAR table after suspend-resume
Ilan Peer (1):
iwlwifi: mvm: Fix removal of IGTK
Johannes Berg (10):
iwlwifi: mvm: reduce usage of IEEE80211_SKB_CB()
iwlwifi: mvm: fix D3 replay counter value
iwlwifi: mvm: set AID to firmware only for associated stations
iwlwifi: mvm: overwrite skb info later
iwlwifi: mvm/pcie: adjust A-MSDU tx_cmd length in PCIe
iwlwifi: mvm: align copy-break SKB payload for MQ RX
iwlwifi: pcie: fix another RF-kill race
mwifiex: don't include mac80211.h
wil6210: include moduleparam.h
ath10k: select WANT_DEV_COREDUMP
Kalle Valo (6):
Merge tag 'iwlwifi-next-for-kalle-2017-02-06' of git://git.kernel.org=
/.../iwlwifi/iwlwifi-next
ath10k: prefer unsigned int over just unsigned
ath10k: use names in function definition arguments
ath10k: few whitespace fixes
Merge ath-next from git://git.kernel.org/.../kvalo/ath.git
Merge tag 'iwlwifi-next-for-kalle-2017-02-08' of git://git.kernel.org=
/.../iwlwifi/iwlwifi-next
Larry Finger (10):
rtlwifi: btcoexist: Change logging in halbtc8192e2ant.c
rtlwifi: rtl8821ae: Fix typo in symbol for bandwidth numbers
rtlwifi: btcoexist: Convert halbtc8192e2ant.c to use standard debuggi=
ng
rtlwifi: btcoexist: Convert halbtc8723b1ant.c to use standard debuggi=
ng
rtlwifi: btcoexist: Convert halbtc8723b2ant.c to use standard debuggi=
ng
rtlwifi: btcoexist: Convert halbtc8821a1ant.c to use standard debuggi=
ng
rtlwifi: btcoexist: Convert halbtc8821a2ant.c to use standard debuggi=
ng
rtlwifi: btcoexist: Convert halbtcoutsrc.c to use standard debugging
rtlwifi: rtl8192c-common: Fix "BUG: KASAN:
rtlwifi: Move items out of rtl_pci_priv and rtl_usb_priv
Liad Kaufman (1):
iwlwifi: mvm: release static queues on bcast release
Luca Coelho (2):
iwlwifi: remove unnecessary argument to iwl_drv_start()
iwlwifi: remove unnecessary cfg element in iwl_drv
Maharaja Kennadyrajan (1):
ath10k: add debugfs support to get per peer tids log via tracing
Ping-Ke Shih (10):
rtlwifi: Fix programing CAM content sequence.
rtlwifi: Set retry limit depends on vif type.
rtlwifi: Add a new enumeration value to btc_set_type
rtlwifi: btcoexist: Add vendor definition for new btcoexist
rtlwifi: rtl8723be: btcoexist: Add single_ant_path
rtlwifi: move btcoex's ant_num declaration
rtlwifi: rtl8723be: btcoex: add package_type function to btcoex
rtlwifi: btcoex: move bt_type declaration
rtlwifi: rtl8723be: fix ant_sel code
rtlwifi: Add work queue for c2h cmd.
Rafa=C5=82 Mi=C5=82ecki (6):
brcmfmac: check brcmf_bus_get_memdump result for error
brcmfmac: be more verbose when PSM's watchdog fires
brcmfmac: use wiphy_read_of_freq_limits to respect limits from DT
brcmfmac: merge two brcmf_err macros into one
brcmfmac: switch to C function (__brcmf_err) for printing errors
brcmfmac: merge two remaining brcmf_err macros
Sara Sharon (14):
iwlwifi: mvm: support unification of INIT and RT images
iwlwifi: mvm: cleanup incorrect and redundant define
iwlwifi: mvm: support new statistics APIs
iwlwifi: mvm: support new scan API
iwlwifi: mvm: always free inactive queue when moving ownership
iwlwifi: mvm: support new alive notification
iwlwifi: mvm: synchronize firmware DMA paging memory
iwlwifi: pcie: fix the set of DMA memory mask
iwlwifi: mvm: fix pending frame counter calculation
iwlwifi: mvm: cleanup iwl_mvm_tx_mpdu a bit
iwlwifi: support two phys for a000 devices
iwlwifi: mvm: support new beacon template command
iwlwifi: mvm: fix references to first_agg_queue in DQA mode
iwlwifi: mvm: fix reorder timer re-arming
Stanislaw Gruszka (6):
rt2x00: avoid introducing a USB dependency in the rt2x00lib module
rt2x00usb: do not anchor rx and tx urb's
rt2x00usb: fix anchor initialization
rt61pci: use entry directly
rt2x00: call entry directly in rt2x00_dump_frame
rt2x00: remove queue_entry from skbdesc
Tamizh chelvam (1):
ath10k: fix boot failure in UTF mode/testmode
Waldemar Rymarkiewicz (1):
ath10k: remove unneeded semicolon
drivers/net/wireless/ath/ath10k/Kconfig | 1 +
drivers/net/wireless/ath/ath10k/ahb.c | 23 +
drivers/net/wireless/ath/ath10k/ce.c | 6 +-
drivers/net/wireless/ath/ath10k/core.c | 14 +-
drivers/net/wireless/ath/ath10k/debugfs_sta.c | 65 ++
drivers/net/wireless/ath/ath10k/htt.h | 6 +-
drivers/net/wireless/ath/ath10k/htt_rx.c | 2 +-
drivers/net/wireless/ath/ath10k/pci.c | 53 +-
drivers/net/wireless/ath/ath10k/pci.h | 5 +
drivers/net/wireless/ath/ath10k/wmi.h | 3 +-
drivers/net/wireless/ath/ath9k/ath9k.h | 7 +-
drivers/net/wireless/ath/ath9k/hw.c | 4 +
drivers/net/wireless/ath/ath9k/init.c | 2 +
drivers/net/wireless/ath/ath9k/link.c | 46 +-
drivers/net/wireless/ath/ath9k/mac.c | 44 +-
drivers/net/wireless/ath/ath9k/mac.h | 1 +
drivers/net/wireless/ath/ath9k/main.c | 37 +-
drivers/net/wireless/ath/ath9k/xmit.c | 2 -
drivers/net/wireless/ath/wcn36xx/main.c | 25 +-
drivers/net/wireless/ath/wcn36xx/wcn36xx.h | 1 +
drivers/net/wireless/ath/wil6210/cfg80211.c | 1 +
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 6 +
.../wireless/broadcom/brcm80211/brcmfmac/common.c | 16 +
.../wireless/broadcom/brcm80211/brcmfmac/debug.c | 35 +-
.../wireless/broadcom/brcm80211/brcmfmac/debug.h | 24 +-
drivers/net/wireless/intel/iwlwifi/Kconfig | 7 +-
drivers/net/wireless/intel/iwlwifi/dvm/rs.c | 5 +-
drivers/net/wireless/intel/iwlwifi/iwl-a000.c | 30 +-
drivers/net/wireless/intel/iwlwifi/iwl-config.h | 3 +-
drivers/net/wireless/intel/iwlwifi/iwl-csr.h | 1 +
drivers/net/wireless/intel/iwlwifi/iwl-drv.c | 25 +-
drivers/net/wireless/intel/iwlwifi/iwl-drv.h | 4 +-
drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 4 +-
.../net/wireless/intel/iwlwifi/mvm/fw-api-mac.h | 7 +-
.../net/wireless/intel/iwlwifi/mvm/fw-api-scan.h | 106 +-
.../net/wireless/intel/iwlwifi/mvm/fw-api-stats.h | 29 +-
drivers/net/wireless/intel/iwlwifi/mvm/fw-api-tx.h | 29 +-
drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h | 90 +-
drivers/net/wireless/intel/iwlwifi/mvm/fw-dbg.c | 4 +
drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 338 +++---
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c | 105 +-
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 39 +-
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 18 +-
drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 24 +-
drivers/net/wireless/intel/iwlwifi/mvm/power.c | 44 +-
drivers/net/wireless/intel/iwlwifi/mvm/rs.c | 6 +-
drivers/net/wireless/intel/iwlwifi/mvm/rx.c | 70 +-
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 14 +-
drivers/net/wireless/intel/iwlwifi/mvm/scan.c | 230 +++--
drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 234 +++--
drivers/net/wireless/intel/iwlwifi/mvm/sta.h | 1 +
drivers/net/wireless/intel/iwlwifi/mvm/tx.c | 129 +--
drivers/net/wireless/intel/iwlwifi/mvm/utils.c | 16 +-
drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 17 +-
drivers/net/wireless/intel/iwlwifi/pcie/internal.h | 4 +-
drivers/net/wireless/intel/iwlwifi/pcie/rx.c | 12 +-
drivers/net/wireless/intel/iwlwifi/pcie/trans.c | 251 +++--
drivers/net/wireless/intel/iwlwifi/pcie/tx.c | 23 +-
drivers/net/wireless/marvell/mwifiex/decl.h | 2 +-
drivers/net/wireless/marvell/mwifiex/sta_ioctl.c | 2 -
drivers/net/wireless/ralink/rt2x00/rt2400pci.c | 2 +-
drivers/net/wireless/ralink/rt2x00/rt2500pci.c | 2 +-
drivers/net/wireless/ralink/rt2x00/rt2500usb.c | 2 +-
drivers/net/wireless/ralink/rt2x00/rt2800lib.c | 2 +-
drivers/net/wireless/ralink/rt2x00/rt2x00.h | 4 +-
drivers/net/wireless/ralink/rt2x00/rt2x00debug.c | 7 +-
drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 27 +-
drivers/net/wireless/ralink/rt2x00/rt2x00queue.c | 5 +-
drivers/net/wireless/ralink/rt2x00/rt2x00queue.h | 2 -
drivers/net/wireless/ralink/rt2x00/rt2x00usb.c | 22 +-
drivers/net/wireless/ralink/rt2x00/rt61pci.c | 5 +-
drivers/net/wireless/ralink/rt2x00/rt73usb.c | 2 +-
drivers/net/wireless/realtek/rtlwifi/base.c | 93 ++
drivers/net/wireless/realtek/rtlwifi/base.h | 3 +
.../wireless/realtek/rtlwifi/btcoexist/Makefile | 6 +-
.../realtek/rtlwifi/btcoexist/halbtc8192e2ant.c | 1082 ++++++++++------=
----
.../realtek/rtlwifi/btcoexist/halbtc8723b1ant.c | 827 ++++++++-------
.../realtek/rtlwifi/btcoexist/halbtc8723b2ant.c | 993 +++++++++-------=
--
.../realtek/rtlwifi/btcoexist/halbtc8821a1ant.c | 898 ++++++++--------
.../realtek/rtlwifi/btcoexist/halbtc8821a2ant.c | 1075 ++++++++++------=
---
.../realtek/rtlwifi/btcoexist/halbtcoutsrc.c | 36 +-
.../realtek/rtlwifi/btcoexist/halbtcoutsrc.h | 20 +-
.../wireless/realtek/rtlwifi/btcoexist/rtl_btc.c | 16 -
.../wireless/realtek/rtlwifi/btcoexist/rtl_btc.h | 5 +-
drivers/net/wireless/realtek/rtlwifi/cam.c | 6 +-
drivers/net/wireless/realtek/rtlwifi/core.c | 21 +-
drivers/net/wireless/realtek/rtlwifi/efuse.c | 5 +-
drivers/net/wireless/realtek/rtlwifi/efuse.h | 1 +
drivers/net/wireless/realtek/rtlwifi/pci.c | 7 +
drivers/net/wireless/realtek/rtlwifi/pci.h | 4 +-
drivers/net/wireless/realtek/rtlwifi/ps.c | 3 +
.../net/wireless/realtek/rtlwifi/rtl8188ee/hw.c | 14 +-
.../net/wireless/realtek/rtlwifi/rtl8188ee/led.c | 19 +-
.../wireless/realtek/rtlwifi/rtl8192c/dm_common.c | 143 ++-
.../net/wireless/realtek/rtlwifi/rtl8192ce/hw.c | 166 ++-
.../net/wireless/realtek/rtlwifi/rtl8192ce/led.c | 19 +-
.../net/wireless/realtek/rtlwifi/rtl8192cu/hw.c | 3 +-
.../net/wireless/realtek/rtlwifi/rtl8192cu/led.c | 17 +-
.../net/wireless/realtek/rtlwifi/rtl8192de/hw.c | 10 +-
.../net/wireless/realtek/rtlwifi/rtl8192de/led.c | 19 +-
.../net/wireless/realtek/rtlwifi/rtl8192ee/fw.c | 15 +-
.../net/wireless/realtek/rtlwifi/rtl8192ee/fw.h | 3 +-
.../net/wireless/realtek/rtlwifi/rtl8192ee/hw.c | 6 +-
.../net/wireless/realtek/rtlwifi/rtl8192ee/led.c | 14 +-
.../net/wireless/realtek/rtlwifi/rtl8192ee/sw.c | 1 +
.../net/wireless/realtek/rtlwifi/rtl8192se/hw.c | 12 +-
.../net/wireless/realtek/rtlwifi/rtl8192se/led.c | 19 +-
.../net/wireless/realtek/rtlwifi/rtl8723ae/hw.c | 8 +-
.../net/wireless/realtek/rtlwifi/rtl8723ae/led.c | 19 +-
.../net/wireless/realtek/rtlwifi/rtl8723be/fw.c | 18 +-
.../net/wireless/realtek/rtlwifi/rtl8723be/fw.h | 3 +-
.../net/wireless/realtek/rtlwifi/rtl8723be/hw.c | 50 +-
.../net/wireless/realtek/rtlwifi/rtl8723be/led.c | 15 +-
.../net/wireless/realtek/rtlwifi/rtl8723be/sw.c | 1 +
.../net/wireless/realtek/rtlwifi/rtl8821ae/fw.c | 18 +-
.../net/wireless/realtek/rtlwifi/rtl8821ae/fw.h | 3 +
.../net/wireless/realtek/rtlwifi/rtl8821ae/hw.c | 10 +-
.../net/wireless/realtek/rtlwifi/rtl8821ae/led.c | 24 +-
.../net/wireless/realtek/rtlwifi/rtl8821ae/phy.c | 10 +-
.../net/wireless/realtek/rtlwifi/rtl8821ae/sw.c | 1 +
drivers/net/wireless/realtek/rtlwifi/usb.h | 2 +-
drivers/net/wireless/realtek/rtlwifi/wifi.h | 33 +-
122 files changed, 4689 insertions(+), 3541 deletions(-)
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox