* [PATCH v3 0/5] initial S1G defines
@ 2020-04-30 1:06 Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API Thomas Pedersen
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: Thomas Pedersen @ 2020-04-30 1:06 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Thomas Pedersen
This patchset finishes the work to make channels work on a KHz offset,
and includes the initial definitions for S1G (802.11ah).
These patches on top of wt-2020-04-29 with hostap c54a5e96b505 gives the
following hwsim test results:
Failed even on retry:
proxyarp_open_ebtables wpas_config_file fst_dynamic_iface_attach
TOTAL=3531 PASS=3265 FAIL=12 SKIP=251
Which is what we currently expect of HEAD.
Changes from v3 are rebasing on latest wireless-testing and making the
SCAN_FREQ_KHZ more robust so userspace can omit the MHZ-only scan
frequencies in the request, and kernel can do the same in the results.
Also some breakage introduced by patch #1 has been addressed by leaving
the existing cfg80211 API intact.
Thomas Pedersen (5):
cfg80211: add KHz variants of frame RX API
nl80211: add KHz frequency offset for most wifi commands
nl80211: support scan frequencies in KHz
ieee80211: S1G defines
nl80211: S1G band and channel definitions
include/linux/ieee80211.h | 222 +++++++++++++++++++++++++++++++++++
include/net/cfg80211.h | 71 ++++++++++-
include/uapi/linux/nl80211.h | 77 +++++++++---
net/mac80211/chan.c | 7 +-
net/mac80211/main.c | 2 +
net/mac80211/rx.c | 8 +-
net/mac80211/scan.c | 1 +
net/mac80211/tx.c | 5 +
net/mac80211/util.c | 5 +
net/wireless/chan.c | 29 +++++
net/wireless/core.c | 5 +-
net/wireless/mlme.c | 8 +-
net/wireless/nl80211.c | 135 +++++++++++++++------
net/wireless/trace.h | 12 +-
net/wireless/util.c | 8 ++
15 files changed, 521 insertions(+), 74 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API
2020-04-30 1:06 [PATCH v3 0/5] initial S1G defines Thomas Pedersen
@ 2020-04-30 1:06 ` Thomas Pedersen
2020-04-30 8:06 ` kbuild test robot
` (2 more replies)
2020-04-30 1:06 ` [PATCH v3 2/5] nl80211: add KHz frequency offset for most wifi commands Thomas Pedersen
` (3 subsequent siblings)
4 siblings, 3 replies; 12+ messages in thread
From: Thomas Pedersen @ 2020-04-30 1:06 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Thomas Pedersen
Drivers may wish to report the RX frequency in units of
KHz. Provide cfg80211_rx_mgmt_khz() and wrap it with
cfg80211_rx_mgmt() so exisiting drivers which can't report
KHz anyway don't need to change. Add a similar wrapper for
cfg80211_report_obss_beacon() so the frequency units stay
somewhat consistent.
This doesn't actually change the nl80211 API yet.
Signed-off-by: Thomas Pedersen <thomas@adapt-ip.com>
---
v3:
wrap functions with _khz() (Johannes)
update trace entries with PR_KHZ()
---
include/linux/ieee80211.h | 1 +
include/net/cfg80211.h | 54 +++++++++++++++++++++++++++++++++++----
net/mac80211/rx.c | 8 +++---
net/wireless/mlme.c | 8 +++---
net/wireless/nl80211.c | 14 +++++-----
net/wireless/trace.h | 12 ++++-----
6 files changed, 72 insertions(+), 25 deletions(-)
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index a561db435a4b..a152f7cfc8de 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -3333,6 +3333,7 @@ static inline int ieee80211_get_tdls_action(struct sk_buff *skb, u32 hdr_size)
/* convert frequencies */
#define MHZ_TO_KHZ(freq) ((freq) * 1000)
#define KHZ_TO_MHZ(freq) ((freq) / 1000)
+#define PR_KHZ(f) KHZ_TO_MHZ((float) f)
/* convert powers */
#define DBI_TO_MBI(gain) ((gain) * 100)
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index a82fc59a1d82..3746b52c954e 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -6986,6 +6986,26 @@ void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
enum nl80211_connect_failed_reason reason,
gfp_t gfp);
+/**
+ * cfg80211_rx_mgmt_khz - notification of received, unprocessed management frame
+ * @wdev: wireless device receiving the frame
+ * @freq: Frequency on which the frame was received in KHz
+ * @sig_dbm: signal strength in dBm, or 0 if unknown
+ * @buf: Management frame (header + body)
+ * @len: length of the frame data
+ * @flags: flags, as defined in enum nl80211_rxmgmt_flags
+ *
+ * This function is called whenever an Action frame is received for a station
+ * mode interface, but is not processed in kernel.
+ *
+ * Return: %true if a user space application has registered for this frame.
+ * For action frames, that makes it responsible for rejecting unrecognized
+ * action frames; %false otherwise, in which case for action frames the
+ * driver is responsible for rejecting the frame.
+ */
+bool cfg80211_rx_mgmt_khz(struct wireless_dev *wdev, int freq, int sig_dbm,
+ const u8 *buf, size_t len, u32 flags);
+
/**
* cfg80211_rx_mgmt - notification of received, unprocessed management frame
* @wdev: wireless device receiving the frame
@@ -7003,8 +7023,13 @@ void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
* action frames; %false otherwise, in which case for action frames the
* driver is responsible for rejecting the frame.
*/
-bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
- const u8 *buf, size_t len, u32 flags);
+static inline bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq,
+ int sig_dbm, const u8 *buf, size_t len,
+ u32 flags)
+{
+ return cfg80211_rx_mgmt_khz(wdev, MHZ_TO_KHZ(freq), sig_dbm, buf, len,
+ flags);
+}
/**
* cfg80211_mgmt_tx_status - notification of TX status for management frame
@@ -7202,6 +7227,21 @@ void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
u64 cookie, bool acked, s32 ack_signal,
bool is_valid_ack_signal, gfp_t gfp);
+/**
+ * cfg80211_report_obss_beacon_khz - report beacon from other APs
+ * @wiphy: The wiphy that received the beacon
+ * @frame: the frame
+ * @len: length of the frame
+ * @freq: frequency the frame was received on in KHz
+ * @sig_dbm: signal strength in dBm, or 0 if unknown
+ *
+ * Use this function to report to userspace when a beacon was
+ * received. It is not useful to call this when there is no
+ * netdev that is in AP/GO mode.
+ */
+void cfg80211_report_obss_beacon_khz(struct wiphy *wiphy, const u8 *frame,
+ size_t len, int freq, int sig_dbm);
+
/**
* cfg80211_report_obss_beacon - report beacon from other APs
* @wiphy: The wiphy that received the beacon
@@ -7214,9 +7254,13 @@ void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
* received. It is not useful to call this when there is no
* netdev that is in AP/GO mode.
*/
-void cfg80211_report_obss_beacon(struct wiphy *wiphy,
- const u8 *frame, size_t len,
- int freq, int sig_dbm);
+static inline void cfg80211_report_obss_beacon(struct wiphy *wiphy,
+ const u8 *frame, size_t len,
+ int freq, int sig_dbm)
+{
+ cfg80211_report_obss_beacon_khz(wiphy, frame, len, MHZ_TO_KHZ(freq),
+ sig_dbm);
+}
/**
* cfg80211_reg_can_beacon - check if beaconing is allowed
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index eaf8931e4627..007eca52afe6 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -3097,7 +3097,8 @@ ieee80211_rx_h_mgmt_check(struct ieee80211_rx_data *rx)
cfg80211_report_obss_beacon(rx->local->hw.wiphy,
rx->skb->data, rx->skb->len,
- status->freq, sig);
+ ieee80211_rx_status_to_khz(status),
+ sig);
rx->flags |= IEEE80211_RX_BEACON_REPORTED;
}
@@ -3443,8 +3444,9 @@ ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx)
!(status->flag & RX_FLAG_NO_SIGNAL_VAL))
sig = status->signal;
- if (cfg80211_rx_mgmt(&rx->sdata->wdev, status->freq, sig,
- rx->skb->data, rx->skb->len, 0)) {
+ if (cfg80211_rx_mgmt_khz(&rx->sdata->wdev,
+ ieee80211_rx_status_to_khz(status), sig,
+ rx->skb->data, rx->skb->len, 0)) {
if (rx->sta)
rx->sta->rx_stats.packets++;
dev_kfree_skb(rx->skb);
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c
index 409497a3527d..ca51fbf89b80 100644
--- a/net/wireless/mlme.c
+++ b/net/wireless/mlme.c
@@ -729,8 +729,8 @@ int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev,
return rdev_mgmt_tx(rdev, wdev, params, cookie);
}
-bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
- const u8 *buf, size_t len, u32 flags)
+bool cfg80211_rx_mgmt_khz(struct wireless_dev *wdev, int freq, int sig_dbm,
+ const u8 *buf, size_t len, u32 flags)
{
struct wiphy *wiphy = wdev->wiphy;
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
@@ -745,7 +745,7 @@ bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE);
u16 stype;
- trace_cfg80211_rx_mgmt(wdev, freq, sig_dbm);
+ trace_cfg80211_rx_mgmt_khz(wdev, freq, sig_dbm);
stype = (le16_to_cpu(mgmt->frame_control) & IEEE80211_FCTL_STYPE) >> 4;
if (!(stypes->rx & BIT(stype))) {
@@ -785,7 +785,7 @@ bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
trace_cfg80211_return_bool(result);
return result;
}
-EXPORT_SYMBOL(cfg80211_rx_mgmt);
+EXPORT_SYMBOL(cfg80211_rx_mgmt_khz);
void cfg80211_sched_dfs_chan_update(struct cfg80211_registered_device *rdev)
{
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 3d27b24c68b2..755701132d71 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -16256,7 +16256,7 @@ int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
netdev->ifindex)) ||
nla_put_u64_64bit(msg, NL80211_ATTR_WDEV, wdev_id(wdev),
NL80211_ATTR_PAD) ||
- nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq) ||
+ nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, KHZ_TO_MHZ(freq)) ||
(sig_dbm &&
nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) ||
nla_put(msg, NL80211_ATTR_FRAME, len, buf) ||
@@ -16882,16 +16882,15 @@ void cfg80211_probe_status(struct net_device *dev, const u8 *addr,
}
EXPORT_SYMBOL(cfg80211_probe_status);
-void cfg80211_report_obss_beacon(struct wiphy *wiphy,
- const u8 *frame, size_t len,
- int freq, int sig_dbm)
+void cfg80211_report_obss_beacon_khz(struct wiphy *wiphy, const u8 *frame,
+ size_t len, int freq, int sig_dbm)
{
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
struct sk_buff *msg;
void *hdr;
struct cfg80211_beacon_registration *reg;
- trace_cfg80211_report_obss_beacon(wiphy, frame, len, freq, sig_dbm);
+ trace_cfg80211_report_obss_beacon_khz(wiphy, frame, len, freq, sig_dbm);
spin_lock_bh(&rdev->beacon_registrations_lock);
list_for_each_entry(reg, &rdev->beacon_registrations, list) {
@@ -16907,7 +16906,8 @@ void cfg80211_report_obss_beacon(struct wiphy *wiphy,
if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
(freq &&
- nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq)) ||
+ nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ,
+ KHZ_TO_MHZ(freq))) ||
(sig_dbm &&
nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) ||
nla_put(msg, NL80211_ATTR_FRAME, len, frame))
@@ -16924,7 +16924,7 @@ void cfg80211_report_obss_beacon(struct wiphy *wiphy,
spin_unlock_bh(&rdev->beacon_registrations_lock);
nlmsg_free(msg);
}
-EXPORT_SYMBOL(cfg80211_report_obss_beacon);
+EXPORT_SYMBOL(cfg80211_report_obss_beacon_khz);
#ifdef CONFIG_PM
static int cfg80211_net_detect_results(struct sk_buff *msg,
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 53c887ea67c7..889c1784fd86 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -2827,7 +2827,7 @@ DEFINE_EVENT(cfg80211_netdev_mac_evt, cfg80211_del_sta,
TP_ARGS(netdev, macaddr)
);
-TRACE_EVENT(cfg80211_rx_mgmt,
+TRACE_EVENT(cfg80211_rx_mgmt_khz,
TP_PROTO(struct wireless_dev *wdev, int freq, int sig_dbm),
TP_ARGS(wdev, freq, sig_dbm),
TP_STRUCT__entry(
@@ -2840,8 +2840,8 @@ TRACE_EVENT(cfg80211_rx_mgmt,
__entry->freq = freq;
__entry->sig_dbm = sig_dbm;
),
- TP_printk(WDEV_PR_FMT ", freq: %d, sig dbm: %d",
- WDEV_PR_ARG, __entry->freq, __entry->sig_dbm)
+ TP_printk(WDEV_PR_FMT ", freq: %g, sig dbm: %d",
+ WDEV_PR_ARG, PR_KHZ(__entry->freq), __entry->sig_dbm)
);
TRACE_EVENT(cfg80211_mgmt_tx_status,
@@ -3107,7 +3107,7 @@ TRACE_EVENT(cfg80211_pmksa_candidate_notify,
BOOL_TO_STR(__entry->preauth))
);
-TRACE_EVENT(cfg80211_report_obss_beacon,
+TRACE_EVENT(cfg80211_report_obss_beacon_khz,
TP_PROTO(struct wiphy *wiphy, const u8 *frame, size_t len,
int freq, int sig_dbm),
TP_ARGS(wiphy, frame, len, freq, sig_dbm),
@@ -3121,8 +3121,8 @@ TRACE_EVENT(cfg80211_report_obss_beacon,
__entry->freq = freq;
__entry->sig_dbm = sig_dbm;
),
- TP_printk(WIPHY_PR_FMT ", freq: %d, sig_dbm: %d",
- WIPHY_PR_ARG, __entry->freq, __entry->sig_dbm)
+ TP_printk(WIPHY_PR_FMT ", freq: %g, sig_dbm: %d",
+ WIPHY_PR_ARG, PR_KHZ(__entry->freq), __entry->sig_dbm)
);
TRACE_EVENT(cfg80211_tdls_oper_request,
--
2.20.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 2/5] nl80211: add KHz frequency offset for most wifi commands
2020-04-30 1:06 [PATCH v3 0/5] initial S1G defines Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API Thomas Pedersen
@ 2020-04-30 1:06 ` Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 3/5] nl80211: support scan frequencies in KHz Thomas Pedersen
` (2 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Thomas Pedersen @ 2020-04-30 1:06 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Thomas Pedersen
cfg80211 recently gained the ability to understand a
frequency offset component in KHz. Expose this in nl80211
through the new attributes NL80211_ATTR_WIPHY_FREQ_OFFSET,
NL80211_FREQUENCY_ATTR_OFFSET,
NL80211_ATTR_CENTER_FREQ1_OFFSET, and
NL80211_BSS_FREQUENCY_OFFSET.
These add support to send and receive a KHz offset
component with the following NL80211 commands:
- NL80211_CMD_FRAME
- NL80211_CMD_GET_SCAN
- NL80211_CMD_AUTHENTICATE
- NL80211_CMD_ASSOCIATE
- NL80211_CMD_CONNECT
Along with any other command which takes a chandef, ie:
- NL80211_CMD_SET_CHANNEL
- NL80211_CMD_SET_WIPHY
- NL80211_CMD_START_AP
- NL80211_CMD_RADAR_DETECT
- NL80211_CMD_NOTIFY_RADAR
- NL80211_CMD_CHANNEL_SWITCH
- NL80211_JOIN_IBSS
- NL80211_CMD_REMAIN_ON_CHANNEL
- NL80211_CMD_JOIN_OCB
- NL80211_CMD_JOIN_MESH
- NL80211_CMD_TDLS_CHANNEL_SWITCH
If the driver advertises a band containing channels with
frequency offset, it must also verify support for
frequency offset channels in its cfg80211 ops, or return
an error.
Signed-off-by: Thomas Pedersen <thomas@adapt-ip.com>
---
v2:
use NLA_POLICY_RANGE for the freq offsets (Johannes)
---
include/uapi/linux/nl80211.h | 50 +++++++++++++++---------
net/wireless/nl80211.c | 73 ++++++++++++++++++++++++++----------
2 files changed, 87 insertions(+), 36 deletions(-)
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 9679d561f7d0..0ceb4de52d9a 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -296,13 +296,14 @@
* to get a list of all present wiphys.
* @NL80211_CMD_SET_WIPHY: set wiphy parameters, needs %NL80211_ATTR_WIPHY or
* %NL80211_ATTR_IFINDEX; can be used to set %NL80211_ATTR_WIPHY_NAME,
- * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ (and the
- * attributes determining the channel width; this is used for setting
- * monitor mode channel), %NL80211_ATTR_WIPHY_RETRY_SHORT,
- * %NL80211_ATTR_WIPHY_RETRY_LONG, %NL80211_ATTR_WIPHY_FRAG_THRESHOLD,
- * and/or %NL80211_ATTR_WIPHY_RTS_THRESHOLD.
- * However, for setting the channel, see %NL80211_CMD_SET_CHANNEL
- * instead, the support here is for backward compatibility only.
+ * %NL80211_ATTR_WIPHY_TXQ_PARAMS, %NL80211_ATTR_WIPHY_FREQ,
+ * %NL80211_ATTR_WIPHY_FREQ_OFFSET (and the attributes determining the
+ * channel width; this is used for setting monitor mode channel),
+ * %NL80211_ATTR_WIPHY_RETRY_SHORT, %NL80211_ATTR_WIPHY_RETRY_LONG,
+ * %NL80211_ATTR_WIPHY_FRAG_THRESHOLD, and/or
+ * %NL80211_ATTR_WIPHY_RTS_THRESHOLD. However, for setting the channel,
+ * see %NL80211_CMD_SET_CHANNEL instead, the support here is for backward
+ * compatibility only.
* @NL80211_CMD_NEW_WIPHY: Newly created wiphy, response to get request
* or rename notification. Has attributes %NL80211_ATTR_WIPHY and
* %NL80211_ATTR_WIPHY_NAME.
@@ -351,7 +352,8 @@
* %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_INACTIVITY_TIMEOUT,
* %NL80211_ATTR_ACL_POLICY and %NL80211_ATTR_MAC_ADDRS.
* The channel to use can be set on the interface or be given using the
- * %NL80211_ATTR_WIPHY_FREQ and the attributes determining channel width.
+ * %NL80211_ATTR_WIPHY_FREQ and %NL80211_ATTR_WIPHY_FREQ_OFFSET, and the
+ * attributes determining channel width.
* @NL80211_CMD_NEW_BEACON: old alias for %NL80211_CMD_START_AP
* @NL80211_CMD_STOP_AP: Stop AP operation on the given interface
* @NL80211_CMD_DEL_BEACON: old alias for %NL80211_CMD_STOP_AP
@@ -536,11 +538,12 @@
* interface. %NL80211_ATTR_MAC is used to specify PeerSTAAddress (and
* BSSID in case of station mode). %NL80211_ATTR_SSID is used to specify
* the SSID (mainly for association, but is included in authentication
- * request, too, to help BSS selection. %NL80211_ATTR_WIPHY_FREQ is used
- * to specify the frequence of the channel in MHz. %NL80211_ATTR_AUTH_TYPE
- * is used to specify the authentication type. %NL80211_ATTR_IE is used to
- * define IEs (VendorSpecificInfo, but also including RSN IE and FT IEs)
- * to be added to the frame.
+ * request, too, to help BSS selection. %NL80211_ATTR_WIPHY_FREQ +
+ * %NL80211_ATTR_WIPHY_FREQ_OFFSET is used to specify the frequence of the
+ * channel in MHz. %NL80211_ATTR_AUTH_TYPE is used to specify the
+ * authentication type. %NL80211_ATTR_IE is used to define IEs
+ * (VendorSpecificInfo, but also including RSN IE and FT IEs) to be added
+ * to the frame.
* When used as an event, this reports reception of an Authentication
* frame in station and IBSS modes when the local MLME processed the
* frame, i.e., it was for the local STA and was received in correct
@@ -595,8 +598,9 @@
* requests to connect to a specified network but without separating
* auth and assoc steps. For this, you need to specify the SSID in a
* %NL80211_ATTR_SSID attribute, and can optionally specify the association
- * IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_USE_MFP,
- * %NL80211_ATTR_MAC, %NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT,
+ * IEs in %NL80211_ATTR_IE, %NL80211_ATTR_AUTH_TYPE,
+ * %NL80211_ATTR_USE_MFP, %NL80211_ATTR_MAC, %NL80211_ATTR_WIPHY_FREQ,
+ * %NL80211_ATTR_WIPHY_FREQ_OFFSET, %NL80211_ATTR_CONTROL_PORT,
* %NL80211_ATTR_CONTROL_PORT_ETHERTYPE,
* %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT,
* %NL80211_ATTR_CONTROL_PORT_OVER_NL80211, %NL80211_ATTR_MAC_HINT, and
@@ -1433,7 +1437,8 @@ enum nl80211_commands {
* of &enum nl80211_chan_width, describing the channel width. See the
* documentation of the enum for more information.
* @NL80211_ATTR_CENTER_FREQ1: Center frequency of the first part of the
- * channel, used for anything but 20 MHz bandwidth
+ * channel, used for anything but 20 MHz bandwidth. In S1G this is the
+ * operating channel center frequency.
* @NL80211_ATTR_CENTER_FREQ2: Center frequency of the second part of the
* channel, used only for 80+80 MHz bandwidth
* @NL80211_ATTR_WIPHY_CHANNEL_TYPE: included with NL80211_ATTR_WIPHY_FREQ
@@ -2480,9 +2485,14 @@ enum nl80211_commands {
* entry without having to force a disconnection after the PMK timeout. If
* no roaming occurs between the reauth threshold and PMK expiration,
* disassociation is still forced.
- *
* @NL80211_ATTR_RECEIVE_MULTICAST: multicast flag for the
* %NL80211_CMD_REGISTER_FRAME command, see the description there.
+ * @NL80211_ATTR_WIPHY_FREQ_OFFSET: offset of the associated
+ * %NL80211_ATTR_WIPHY_FREQ in positive KHz. Only valid when supplied with
+ * an %NL80211_ATTR_WIPHY_FREQ_OFFSET.
+ * @NL80211_ATTR_CENTER_FREQ1_OFFSET: Center frequency offset in KHz for the
+ * first channel segment specified in %NL80211_ATTR_CENTER_FREQ1.
+ *
*
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
* @NL80211_ATTR_MAX: highest attribute number currently defined
@@ -2960,6 +2970,8 @@ enum nl80211_attrs {
NL80211_ATTR_PMK_REAUTH_THRESHOLD,
NL80211_ATTR_RECEIVE_MULTICAST,
+ NL80211_ATTR_WIPHY_FREQ_OFFSET,
+ NL80211_ATTR_CENTER_FREQ1_OFFSET,
/* add attributes here, update the policy in nl80211.c */
@@ -3682,6 +3694,7 @@ enum nl80211_wmm_rule {
* (see &enum nl80211_wmm_rule)
* @NL80211_FREQUENCY_ATTR_NO_HE: HE operation is not allowed on this channel
* in current regulatory domain.
+ * @NL80211_FREQUENCY_ATTR_OFFSET: frequency offset in KHz
* @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number
* currently defined
* @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use
@@ -3712,6 +3725,7 @@ enum nl80211_frequency_attr {
NL80211_FREQUENCY_ATTR_NO_10MHZ,
NL80211_FREQUENCY_ATTR_WMM,
NL80211_FREQUENCY_ATTR_NO_HE,
+ NL80211_FREQUENCY_ATTR_OFFSET,
/* keep last */
__NL80211_FREQUENCY_ATTR_AFTER_LAST,
@@ -4482,6 +4496,7 @@ enum nl80211_bss_scan_width {
* @NL80211_BSS_CHAIN_SIGNAL: per-chain signal strength of last BSS update.
* Contains a nested array of signal strength attributes (u8, dBm),
* using the nesting index as the antenna number.
+ * @NL80211_BSS_FREQUENCY_OFFSET: frequency offset in KHz
* @__NL80211_BSS_AFTER_LAST: internal
* @NL80211_BSS_MAX: highest BSS attribute
*/
@@ -4506,6 +4521,7 @@ enum nl80211_bss {
NL80211_BSS_PARENT_TSF,
NL80211_BSS_PARENT_BSSID,
NL80211_BSS_CHAIN_SIGNAL,
+ NL80211_BSS_FREQUENCY_OFFSET,
/* keep last */
__NL80211_BSS_AFTER_LAST,
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 755701132d71..fb056613a23f 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -365,6 +365,7 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
[NL80211_ATTR_CHANNEL_WIDTH] = { .type = NLA_U32 },
[NL80211_ATTR_CENTER_FREQ1] = { .type = NLA_U32 },
+ [NL80211_ATTR_CENTER_FREQ1_OFFSET] = NLA_POLICY_RANGE(NLA_U32, 0, 999),
[NL80211_ATTR_CENTER_FREQ2] = { .type = NLA_U32 },
[NL80211_ATTR_WIPHY_RETRY_SHORT] = NLA_POLICY_MIN(NLA_U8, 1),
@@ -662,6 +663,7 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
[NL80211_ATTR_PMK_LIFETIME] = NLA_POLICY_MIN(NLA_U32, 1),
[NL80211_ATTR_PMK_REAUTH_THRESHOLD] = NLA_POLICY_RANGE(NLA_U8, 1, 100),
[NL80211_ATTR_RECEIVE_MULTICAST] = { .type = NLA_FLAG },
+ [NL80211_ATTR_WIPHY_FREQ_OFFSET] = NLA_POLICY_RANGE(NLA_U32, 0, 999),
};
/* policy for the key attributes */
@@ -946,6 +948,9 @@ static int nl80211_msg_put_channel(struct sk_buff *msg, struct wiphy *wiphy,
chan->center_freq))
goto nla_put_failure;
+ if (nla_put_u32(msg, NL80211_FREQUENCY_ATTR_OFFSET, chan->freq_offset))
+ goto nla_put_failure;
+
if ((chan->flags & IEEE80211_CHAN_DISABLED) &&
nla_put_flag(msg, NL80211_FREQUENCY_ATTR_DISABLED))
goto nla_put_failure;
@@ -1351,13 +1356,11 @@ static int nl80211_key_allowed(struct wireless_dev *wdev)
}
static struct ieee80211_channel *nl80211_get_valid_chan(struct wiphy *wiphy,
- struct nlattr *tb)
+ u32 freq)
{
struct ieee80211_channel *chan;
- if (tb == NULL)
- return NULL;
- chan = ieee80211_get_channel(wiphy, nla_get_u32(tb));
+ chan = ieee80211_get_channel_khz(wiphy, freq);
if (!chan || chan->flags & IEEE80211_CHAN_DISABLED)
return NULL;
return chan;
@@ -2812,13 +2815,17 @@ int nl80211_parse_chandef(struct cfg80211_registered_device *rdev,
if (!attrs[NL80211_ATTR_WIPHY_FREQ])
return -EINVAL;
- control_freq = nla_get_u32(attrs[NL80211_ATTR_WIPHY_FREQ]);
+ control_freq = MHZ_TO_KHZ(
+ nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]));
+ if (info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
+ control_freq +=
+ nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]);
memset(chandef, 0, sizeof(*chandef));
-
- chandef->chan = ieee80211_get_channel(&rdev->wiphy, control_freq);
+ chandef->chan = ieee80211_get_channel_khz(&rdev->wiphy, control_freq);
chandef->width = NL80211_CHAN_WIDTH_20_NOHT;
- chandef->center_freq1 = control_freq;
+ chandef->center_freq1 = KHZ_TO_MHZ(control_freq);
+ chandef->freq1_offset = control_freq % 1000;
chandef->center_freq2 = 0;
/* Primary channel not allowed */
@@ -2869,6 +2876,9 @@ int nl80211_parse_chandef(struct cfg80211_registered_device *rdev,
if (attrs[NL80211_ATTR_CENTER_FREQ1])
chandef->center_freq1 =
nla_get_u32(attrs[NL80211_ATTR_CENTER_FREQ1]);
+ if (attrs[NL80211_ATTR_CENTER_FREQ1_OFFSET])
+ chandef->freq1_offset = nla_get_u32(
+ attrs[NL80211_ATTR_CENTER_FREQ1_OFFSET]);
if (attrs[NL80211_ATTR_CENTER_FREQ2])
chandef->center_freq2 =
nla_get_u32(attrs[NL80211_ATTR_CENTER_FREQ2]);
@@ -3301,6 +3311,9 @@ static int nl80211_send_chandef(struct sk_buff *msg,
if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ,
chandef->chan->center_freq))
return -ENOBUFS;
+ if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ_OFFSET,
+ chandef->chan->freq_offset))
+ return -ENOBUFS;
switch (chandef->width) {
case NL80211_CHAN_WIDTH_20_NOHT:
case NL80211_CHAN_WIDTH_20:
@@ -8918,6 +8931,8 @@ static int nl80211_send_bss(struct sk_buff *msg, struct netlink_callback *cb,
goto nla_put_failure;
if (nla_put_u16(msg, NL80211_BSS_CAPABILITY, res->capability) ||
nla_put_u32(msg, NL80211_BSS_FREQUENCY, res->channel->center_freq) ||
+ nla_put_u32(msg, NL80211_BSS_FREQUENCY_OFFSET,
+ res->channel->freq_offset) ||
nla_put_u32(msg, NL80211_BSS_CHAN_WIDTH, res->scan_width) ||
nla_put_u32(msg, NL80211_BSS_SEEN_MS_AGO,
jiffies_to_msecs(jiffies - intbss->ts)))
@@ -9186,6 +9201,7 @@ static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info)
enum nl80211_auth_type auth_type;
struct key_parse key;
bool local_state_change;
+ u32 freq;
if (!info->attrs[NL80211_ATTR_MAC])
return -EINVAL;
@@ -9242,8 +9258,12 @@ static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info)
return -EOPNOTSUPP;
bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
- chan = nl80211_get_valid_chan(&rdev->wiphy,
- info->attrs[NL80211_ATTR_WIPHY_FREQ]);
+ freq = MHZ_TO_KHZ(nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]));
+ if (info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
+ freq +=
+ nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]);
+
+ chan = nl80211_get_valid_chan(&rdev->wiphy, freq);
if (!chan)
return -EINVAL;
@@ -9433,6 +9453,7 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info)
struct cfg80211_assoc_request req = {};
const u8 *bssid, *ssid;
int err, ssid_len = 0;
+ u32 freq;
if (dev->ieee80211_ptr->conn_owner_nlportid &&
dev->ieee80211_ptr->conn_owner_nlportid != info->snd_portid)
@@ -9452,8 +9473,11 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info)
bssid = nla_data(info->attrs[NL80211_ATTR_MAC]);
- chan = nl80211_get_valid_chan(&rdev->wiphy,
- info->attrs[NL80211_ATTR_WIPHY_FREQ]);
+ freq = MHZ_TO_KHZ(nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]));
+ if (info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
+ freq +=
+ nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]);
+ chan = nl80211_get_valid_chan(&rdev->wiphy, freq);
if (!chan)
return -EINVAL;
@@ -10133,6 +10157,7 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
struct cfg80211_connect_params connect;
struct wiphy *wiphy;
struct cfg80211_cached_keys *connkeys = NULL;
+ u32 freq = 0;
int err;
memset(&connect, 0, sizeof(connect));
@@ -10203,14 +10228,21 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
connect.prev_bssid =
nla_data(info->attrs[NL80211_ATTR_PREV_BSSID]);
- if (info->attrs[NL80211_ATTR_WIPHY_FREQ]) {
- connect.channel = nl80211_get_valid_chan(
- wiphy, info->attrs[NL80211_ATTR_WIPHY_FREQ]);
+ if (info->attrs[NL80211_ATTR_WIPHY_FREQ])
+ freq = MHZ_TO_KHZ(nla_get_u32(
+ info->attrs[NL80211_ATTR_WIPHY_FREQ]));
+ if (info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET])
+ freq +=
+ nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]);
+
+ if (freq) {
+ connect.channel = nl80211_get_valid_chan(wiphy, freq);
if (!connect.channel)
return -EINVAL;
} else if (info->attrs[NL80211_ATTR_WIPHY_FREQ_HINT]) {
- connect.channel_hint = nl80211_get_valid_chan(
- wiphy, info->attrs[NL80211_ATTR_WIPHY_FREQ_HINT]);
+ freq = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ_HINT]);
+ freq = MHZ_TO_KHZ(freq);
+ connect.channel_hint = nl80211_get_valid_chan(wiphy, freq);
if (!connect.channel_hint)
return -EINVAL;
}
@@ -16257,6 +16289,7 @@ int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
nla_put_u64_64bit(msg, NL80211_ATTR_WDEV, wdev_id(wdev),
NL80211_ATTR_PAD) ||
nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, KHZ_TO_MHZ(freq)) ||
+ nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ_OFFSET, freq % 1000) ||
(sig_dbm &&
nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) ||
nla_put(msg, NL80211_ATTR_FRAME, len, buf) ||
@@ -16906,8 +16939,10 @@ void cfg80211_report_obss_beacon_khz(struct wiphy *wiphy, const u8 *frame,
if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
(freq &&
- nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ,
- KHZ_TO_MHZ(freq))) ||
+ (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ,
+ KHZ_TO_MHZ(freq)) ||
+ nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ_OFFSET,
+ freq % 1000))) ||
(sig_dbm &&
nla_put_u32(msg, NL80211_ATTR_RX_SIGNAL_DBM, sig_dbm)) ||
nla_put(msg, NL80211_ATTR_FRAME, len, frame))
--
2.20.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 3/5] nl80211: support scan frequencies in KHz
2020-04-30 1:06 [PATCH v3 0/5] initial S1G defines Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 2/5] nl80211: add KHz frequency offset for most wifi commands Thomas Pedersen
@ 2020-04-30 1:06 ` Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 4/5] ieee80211: S1G defines Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 5/5] nl80211: S1G band and channel definitions Thomas Pedersen
4 siblings, 0 replies; 12+ messages in thread
From: Thomas Pedersen @ 2020-04-30 1:06 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Thomas Pedersen
If the driver advertises NL80211_EXT_FEATURE_SCAN_FREQ_KHZ
userspace can omit NL80211_ATTR_SCAN_FREQUENCIES in favor
of an NL80211_ATTR_SCAN_FREQ_KHZ. To get scan results in
KHz userspace must also set the
NL80211_SCAN_FLAG_FREQ_KHZ.
This lets nl80211 remain compatible with older userspaces
while not requring and sending redundant (and potentially
incorrect) scan frequency sets.
Signed-off-by: Thomas Pedersen <thomas@adapt-ip.com>
---
v3:
- report SCAN_FREQ_KHZ in scan results
- advertise SCAN_FREQ_KHZ support in feature flag
- add SCAN_FLAG_FREQ_KHZ so user can select scan result
frequency units
---
include/uapi/linux/nl80211.h | 13 ++++++++-
net/mac80211/main.c | 2 ++
net/wireless/nl80211.c | 52 +++++++++++++++++++++++++++---------
3 files changed, 54 insertions(+), 13 deletions(-)
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 0ceb4de52d9a..b6012aa5103b 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -2492,7 +2492,7 @@ enum nl80211_commands {
* an %NL80211_ATTR_WIPHY_FREQ_OFFSET.
* @NL80211_ATTR_CENTER_FREQ1_OFFSET: Center frequency offset in KHz for the
* first channel segment specified in %NL80211_ATTR_CENTER_FREQ1.
- *
+ * @NL80211_ATTR_SCAN_FREQ_KHZ: nested attribute with KHz frequencies
*
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
* @NL80211_ATTR_MAX: highest attribute number currently defined
@@ -2972,6 +2972,7 @@ enum nl80211_attrs {
NL80211_ATTR_RECEIVE_MULTICAST,
NL80211_ATTR_WIPHY_FREQ_OFFSET,
NL80211_ATTR_CENTER_FREQ1_OFFSET,
+ NL80211_ATTR_SCAN_FREQ_KHZ,
/* add attributes here, update the policy in nl80211.c */
@@ -5721,6 +5722,11 @@ enum nl80211_feature_flags {
* @NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS: management frame registrations
* are possible for multicast frames and those will be reported properly.
*
+ * @NL80211_EXT_FEATURE_SCAN_FREQ_KHZ: This driver supports receiving and
+ * reporting scan request with %NL80211_ATTR_SCAN_FREQ_KHZ. In order to
+ * report %NL80211_ATTR_SCAN_FREQ_KHZ, %NL80211_SCAN_FLAG_FREQ_KHZ must be
+ * included in the scan request.
+ *
* @NUM_NL80211_EXT_FEATURES: number of extended features.
* @MAX_NL80211_EXT_FEATURES: highest extended feature index.
*/
@@ -5774,6 +5780,7 @@ enum nl80211_ext_feature_index {
NL80211_EXT_FEATURE_DEL_IBSS_STA,
NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS,
NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT,
+ NL80211_EXT_FEATURE_SCAN_FREQ_KHZ,
/* add new features before the definition below */
NUM_NL80211_EXT_FEATURES,
@@ -5885,6 +5892,9 @@ enum nl80211_timeout_reason {
* @NL80211_SCAN_FLAG_MIN_PREQ_CONTENT: minimize probe request content to
* only have supported rates and no additional capabilities (unless
* added by userspace explicitly.)
+ * @NL80211_SCAN_FLAG_FREQ_KHZ: report scan results with
+ * %NL80211_ATTR_SCAN_FREQ_KHZ. This also means
+ * %NL80211_ATTR_SCAN_FREQUENCIES will not be included.
*/
enum nl80211_scan_flags {
NL80211_SCAN_FLAG_LOW_PRIORITY = 1<<0,
@@ -5900,6 +5910,7 @@ enum nl80211_scan_flags {
NL80211_SCAN_FLAG_HIGH_ACCURACY = 1<<10,
NL80211_SCAN_FLAG_RANDOM_SN = 1<<11,
NL80211_SCAN_FLAG_MIN_PREQ_CONTENT = 1<<12,
+ NL80211_SCAN_FLAG_FREQ_KHZ = 1<<13,
};
/**
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 06c90d360633..ac74bd780b42 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -596,6 +596,8 @@ struct ieee80211_hw *ieee80211_alloc_hw_nm(size_t priv_data_len,
NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211);
wiphy_ext_feature_set(wiphy,
NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH);
+ wiphy_ext_feature_set(wiphy,
+ NL80211_EXT_FEATURE_SCAN_FREQ_KHZ);
if (!ops->hw_scan) {
wiphy->features |= NL80211_FEATURE_LOW_PRIORITY_SCAN |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index fb056613a23f..decd37fd470e 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -664,6 +664,7 @@ const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
[NL80211_ATTR_PMK_REAUTH_THRESHOLD] = NLA_POLICY_RANGE(NLA_U8, 1, 100),
[NL80211_ATTR_RECEIVE_MULTICAST] = { .type = NLA_FLAG },
[NL80211_ATTR_WIPHY_FREQ_OFFSET] = NLA_POLICY_RANGE(NLA_U32, 0, 999),
+ [NL80211_ATTR_SCAN_FREQ_KHZ] = { .type = NLA_NESTED },
};
/* policy for the key attributes */
@@ -7761,6 +7762,8 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
struct cfg80211_registered_device *rdev = info->user_ptr[0];
struct wireless_dev *wdev = info->user_ptr[1];
struct cfg80211_scan_request *request;
+ struct nlattr *scan_freqs = NULL;
+ bool scan_freqs_khz = false;
struct nlattr *attr;
struct wiphy *wiphy;
int err, tmp, n_ssids = 0, n_channels, i;
@@ -7779,9 +7782,17 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
goto unlock;
}
- if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) {
- n_channels = validate_scan_freqs(
- info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]);
+ if (info->attrs[NL80211_ATTR_SCAN_FREQ_KHZ]) {
+ if (!wiphy_ext_feature_isset(wiphy,
+ NL80211_EXT_FEATURE_SCAN_FREQ_KHZ))
+ return -EOPNOTSUPP;
+ scan_freqs = info->attrs[NL80211_ATTR_SCAN_FREQ_KHZ];
+ scan_freqs_khz = true;
+ } else if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES])
+ scan_freqs = info->attrs[NL80211_ATTR_SCAN_FREQUENCIES];
+
+ if (scan_freqs) {
+ n_channels = validate_scan_freqs(scan_freqs);
if (!n_channels) {
err = -EINVAL;
goto unlock;
@@ -7829,13 +7840,16 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
}
i = 0;
- if (info->attrs[NL80211_ATTR_SCAN_FREQUENCIES]) {
+ if (scan_freqs) {
/* user specified, bail out if channel not found */
- nla_for_each_nested(attr, info->attrs[NL80211_ATTR_SCAN_FREQUENCIES], tmp) {
+ nla_for_each_nested(attr, scan_freqs, tmp) {
struct ieee80211_channel *chan;
+ int freq = nla_get_u32(attr);
- chan = ieee80211_get_channel(wiphy, nla_get_u32(attr));
+ if (!scan_freqs_khz)
+ freq = MHZ_TO_KHZ(freq);
+ chan = ieee80211_get_channel_khz(wiphy, freq);
if (!chan) {
err = -EINVAL;
goto out_free;
@@ -15270,14 +15284,28 @@ static int nl80211_add_scan_req(struct sk_buff *msg,
}
nla_nest_end(msg, nest);
- nest = nla_nest_start_noflag(msg, NL80211_ATTR_SCAN_FREQUENCIES);
- if (!nest)
- goto nla_put_failure;
- for (i = 0; i < req->n_channels; i++) {
- if (nla_put_u32(msg, i, req->channels[i]->center_freq))
+ if (req->flags & NL80211_SCAN_FLAG_FREQ_KHZ) {
+ nest = nla_nest_start_noflag(msg,
+ NL80211_ATTR_SCAN_FREQ_KHZ);
+ if (!nest)
+ goto nla_put_failure;
+ for (i = 0; i < req->n_channels; i++) {
+ if (nla_put_u32(msg, i,
+ ieee80211_channel_to_khz(req->channels[i])))
+ goto nla_put_failure;
+ }
+ nla_nest_end(msg, nest);
+ } else {
+ nest = nla_nest_start_noflag(msg,
+ NL80211_ATTR_SCAN_FREQUENCIES);
+ if (!nest)
goto nla_put_failure;
+ for (i = 0; i < req->n_channels; i++) {
+ if (nla_put_u32(msg, i, req->channels[i]->center_freq))
+ goto nla_put_failure;
+ }
+ nla_nest_end(msg, nest);
}
- nla_nest_end(msg, nest);
if (req->ie &&
nla_put(msg, NL80211_ATTR_IE, req->ie_len, req->ie))
--
2.20.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 4/5] ieee80211: S1G defines
2020-04-30 1:06 [PATCH v3 0/5] initial S1G defines Thomas Pedersen
` (2 preceding siblings ...)
2020-04-30 1:06 ` [PATCH v3 3/5] nl80211: support scan frequencies in KHz Thomas Pedersen
@ 2020-04-30 1:06 ` Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 5/5] nl80211: S1G band and channel definitions Thomas Pedersen
4 siblings, 0 replies; 12+ messages in thread
From: Thomas Pedersen @ 2020-04-30 1:06 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Thomas Pedersen
These are found in IEEE-802.11ah-2016.
Signed-off-by: Thomas Pedersen <thomas@adapt-ip.com>
---
include/linux/ieee80211.h | 221 ++++++++++++++++++++++++++++++++++++++
1 file changed, 221 insertions(+)
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index a152f7cfc8de..c2a2839411b2 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -105,6 +105,51 @@
/* extension, added by 802.11ad */
#define IEEE80211_STYPE_DMG_BEACON 0x0000
+#define IEEE80211_STYPE_S1G_BEACON 0x0010
+
+/* bits unique to S1G beacon */
+#define IEEE80211_S1G_BCN_NEXT_TBTT 0x100
+
+/* see 802.11ah-2016 9.9 NDP CMAC frames */
+#define IEEE80211_S1G_1MHZ_NDP_BITS 25
+#define IEEE80211_S1G_1MHZ_NDP_BYTES 4
+#define IEEE80211_S1G_2MHZ_NDP_BITS 37
+#define IEEE80211_S1G_2MHZ_NDP_BYTES 5
+
+#define IEEE80211_NDP_FTYPE_CTS 0
+#define IEEE80211_NDP_FTYPE_CF_END 0
+#define IEEE80211_NDP_FTYPE_PS_POLL 1
+#define IEEE80211_NDP_FTYPE_ACK 2
+#define IEEE80211_NDP_FTYPE_PS_POLL_ACK 3
+#define IEEE80211_NDP_FTYPE_BA 4
+#define IEEE80211_NDP_FTYPE_BF_REPORT_POLL 5
+#define IEEE80211_NDP_FTYPE_PAGING 6
+#define IEEE80211_NDP_FTYPE_PREQ 7
+
+#define SM64(f, v) ((((u64)v) << f##_S) & f)
+
+/* NDP CMAC frame fields */
+#define IEEE80211_NDP_FTYPE 0x0000000000000007
+#define IEEE80211_NDP_FTYPE_S 0x0000000000000000
+
+/* 1M Probe Request 11ah 9.9.3.1.1 */
+#define IEEE80211_NDP_1M_PREQ_ANO 0x0000000000000008
+#define IEEE80211_NDP_1M_PREQ_ANO_S 3
+#define IEEE80211_NDP_1M_PREQ_CSSID 0x00000000000FFFF0
+#define IEEE80211_NDP_1M_PREQ_CSSID_S 4
+#define IEEE80211_NDP_1M_PREQ_RTYPE 0x0000000000100000
+#define IEEE80211_NDP_1M_PREQ_RTYPE_S 20
+#define IEEE80211_NDP_1M_PREQ_RSV 0x0000000001E00000
+#define IEEE80211_NDP_1M_PREQ_RSV 0x0000000001E00000
+/* 2M Probe Request 11ah 9.9.3.1.2 */
+#define IEEE80211_NDP_2M_PREQ_ANO 0x0000000000000008
+#define IEEE80211_NDP_2M_PREQ_ANO_S 3
+#define IEEE80211_NDP_2M_PREQ_CSSID 0x0000000FFFFFFFF0
+#define IEEE80211_NDP_2M_PREQ_CSSID_S 4
+#define IEEE80211_NDP_2M_PREQ_RTYPE 0x0000001000000000
+#define IEEE80211_NDP_2M_PREQ_RTYPE_S 36
+
+#define IEEE80211_ANO_NETTYPE_WILD 15
/* control extension - for IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTL_EXT */
#define IEEE80211_CTL_EXT_POLL 0x2000
@@ -121,6 +166,21 @@
#define IEEE80211_MAX_SN IEEE80211_SN_MASK
#define IEEE80211_SN_MODULO (IEEE80211_MAX_SN + 1)
+
+/* PV1 Layout 11ah 9.8.3.1 */
+#define IEEE80211_PV1_FCTL_VERS 0x0003
+#define IEEE80211_PV1_FCTL_FTYPE 0x001c
+#define IEEE80211_PV1_FCTL_STYPE 0x00e0
+#define IEEE80211_PV1_FCTL_TODS 0x0100
+#define IEEE80211_PV1_FCTL_MOREFRAGS 0x0200
+#define IEEE80211_PV1_FCTL_PM 0x0400
+#define IEEE80211_PV1_FCTL_MOREDATA 0x0800
+#define IEEE80211_PV1_FCTL_PROTECTED 0x1000
+#define IEEE80211_PV1_FCTL_END_SP 0x2000
+#define IEEE80211_PV1_FCTL_RELAYED 0x4000
+#define IEEE80211_PV1_FCTL_ACK_POLICY 0x8000
+#define IEEE80211_PV1_FCTL_CTL_EXT 0x0f00
+
static inline bool ieee80211_sn_less(u16 sn1, u16 sn2)
{
return ((sn1 - sn2) & IEEE80211_SN_MASK) > (IEEE80211_SN_MODULO >> 1);
@@ -148,6 +208,7 @@ static inline u16 ieee80211_sn_sub(u16 sn1, u16 sn2)
#define IEEE80211_MAX_FRAG_THRESHOLD 2352
#define IEEE80211_MAX_RTS_THRESHOLD 2353
#define IEEE80211_MAX_AID 2007
+#define IEEE80211_MAX_AID_S1G 8191
#define IEEE80211_MAX_TIM_LEN 251
#define IEEE80211_MAX_MESH_PEERINGS 63
/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section
@@ -371,6 +432,17 @@ static inline bool ieee80211_is_data(__le16 fc)
cpu_to_le16(IEEE80211_FTYPE_DATA);
}
+/**
+ * ieee80211_is_ext - check if type is IEEE80211_FTYPE_EXT
+ * @fc: frame control bytes in little-endian byteorder
+ */
+static inline bool ieee80211_is_ext(__le16 fc)
+{
+ return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE)) ==
+ cpu_to_le16(IEEE80211_FTYPE_EXT);
+}
+
+
/**
* ieee80211_is_data_qos - check if type is IEEE80211_FTYPE_DATA and IEEE80211_STYPE_QOS_DATA is set
* @fc: frame control bytes in little-endian byteorder
@@ -469,6 +541,18 @@ static inline bool ieee80211_is_beacon(__le16 fc)
cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON);
}
+/**
+ * ieee80211_is_s1g_beacon - check if IEEE80211_FTYPE_EXT &&
+ * IEEE80211_STYPE_S1G_BEACON
+ * @fc: frame control bytes in little-endian byteorder
+ */
+static inline bool ieee80211_is_s1g_beacon(__le16 fc)
+{
+ return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE |
+ IEEE80211_FCTL_STYPE)) ==
+ cpu_to_le16(IEEE80211_FTYPE_EXT | IEEE80211_STYPE_S1G_BEACON);
+}
+
/**
* ieee80211_is_atim - check if IEEE80211_FTYPE_MGMT && IEEE80211_STYPE_ATIM
* @fc: frame control bytes in little-endian byteorder
@@ -900,6 +984,59 @@ struct ieee80211_addba_ext_ie {
u8 data;
} __packed;
+/**
+ * struct ieee80211_s1g_bcn_compat_ie
+ *
+ * S1G Beacon Compatibility element
+ */
+struct ieee80211_s1g_bcn_compat_ie {
+ __le16 compat_info;
+ __le16 beacon_int;
+ __le32 tsf_completion;
+} __packed;
+
+/**
+ * struct ieee80211_s1g_oper_ie
+ *
+ * S1G Operation element
+ */
+struct ieee80211_s1g_oper_ie {
+ u8 ch_width;
+ u8 oper_class;
+ u8 primary_ch;
+ u8 oper_ch;
+ __le16 basic_mcs_nss;
+} __packed;
+
+/**
+ * struct ieee80211_aid_response_ie
+ *
+ * AID Response element
+ */
+struct ieee80211_aid_response_ie {
+ __le16 aid;
+ u8 switch_count;
+ __le16 response_int;
+} __packed;
+
+struct ieee80211_s1g_cap {
+ u8 capab_info[10];
+ u8 supp_mcs_nss[5];
+} __packed;
+
+struct ieee80211_ext {
+ __le16 frame_control;
+ __le16 duration;
+ union {
+ struct {
+ u8 sa[ETH_ALEN];
+ __le32 timestamp;
+ u8 change_seq;
+ u8 variable[0];
+ } __packed s1g_beacon;
+ } u;
+} __packed __aligned(2);
+
struct ieee80211_mgmt {
__le16 frame_control;
__le16 duration;
@@ -2137,6 +2274,86 @@ ieee80211_he_spr_size(const u8 *he_spr_ie)
return spr_len;
}
+/* S1G Capabilities Information field */
+#define S1G_CAPAB_B0_S1G_LONG BIT(0)
+#define S1G_CAPAB_B0_SGI_1MHZ BIT(1)
+#define S1G_CAPAB_B0_SGI_2MHZ BIT(2)
+#define S1G_CAPAB_B0_SGI_4MHZ BIT(3)
+#define S1G_CAPAB_B0_SGI_8MHZ BIT(4)
+#define S1G_CAPAB_B0_SGI_16MHZ BIT(5)
+#define S1G_CAPAB_B0_SUPP_CH_WIDTH_MASK (BIT(6) | BIT(7))
+#define S1G_CAPAB_B0_SUPP_CH_WIDTH_SHIFT 6
+
+#define S1G_CAPAB_B1_RX_LDPC BIT(0)
+#define S1G_CAPAB_B1_TX_STBC BIT(1)
+#define S1G_CAPAB_B1_RX_STBC BIT(2)
+#define S1G_CAPAB_B1_SU_BFER BIT(3)
+#define S1G_CAPAB_B1_SU_BFEE BIT(4)
+#define S1G_CAPAB_B1_BFEE_STS_MASK (BIT(5) | BIT(6) | BIT(7))
+#define S1G_CAPAB_B1_BFEE_STS_SHIFT 5
+
+#define S1G_CAPAB_B2_SOUNDING_DIMENSIONS_MASK (BIT(0) | BIT(1) | BIT(2))
+#define S1G_CAPAB_B2_SOUNDING_DIMENSIONS_SHIFT 0
+#define S1G_CAPAB_B2_MU_BFER BIT(3)
+#define S1G_CAPAB_B2_MU_BFEE BIT(4)
+#define S1G_CAPAB_B2_PLUS_HTC_VHT BIT(5)
+#define S1G_CAPAB_B2_TRAVELING_PILOT_MASK (BIT(6) | BIT(7))
+#define S1G_CAPAB_B2_TRAVELING_PILOT_SHIFT 6
+
+#define S1G_CAPAB_B3_RD_RESPONDER BIT(0)
+#define S1G_CAPAB_B3_HT_DELAYED_BA BIT(1)
+#define S1G_CAPAB_B3_MAX_MPDU_LEN BIT(2)
+#define S1G_CAPAB_B3_MAX_AMPDU_LEN_EXP_MASK (BIT(3) | BIT(4))
+#define S1G_CAPAB_B3_MAX_AMPDU_LEN_EXP_SHIFT 3
+#define S1G_CAPAB_B3_MIN_MPDU_START_MASK (BIT(5) | BIT(6) | BIT(7))
+#define S1G_CAPAB_B3_MIN_MPDU_START_SHIFT 5
+
+#define S1G_CAPAB_B4_UPLINK_SYNC BIT(0)
+#define S1G_CAPAB_B4_DYNAMIC_AID BIT(1)
+#define S1G_CAPAB_B4_BAT BIT(2)
+#define S1G_CAPAB_B4_TIME_ADE BIT(3)
+#define S1G_CAPAB_B4_NON_TIM BIT(4)
+#define S1G_CAPAB_B4_GROUP_AID BIT(5)
+#define S1G_CAPAB_B4_STA_TYPE_MASK (BIT(6) | BIT(7))
+#define S1G_CAPAB_B4_STA_TYPE_SHIFT 6
+
+#define S1G_CAPAB_B5_CENT_AUTH_CONTROL BIT(0)
+#define S1G_CAPAB_B5_DIST_AUTH_CONTROL BIT(1)
+#define S1G_CAPAB_B5_AMSDU BIT(2)
+#define S1G_CAPAB_B5_AMPDU BIT(3)
+#define S1G_CAPAB_B5_ASYMMETRIC_BA BIT(4)
+#define S1G_CAPAB_B5_FLOW_CONTROL BIT(5)
+#define S1G_CAPAB_B5_SECTORIZED_BEAM_MASK (BIT(6) | BIT(7))
+#define S1G_CAPAB_B5_SECTORIZED_BEAM_SHIFT 6
+
+#define S1G_CAPAB_B6_OBSS_MITIGATION BIT(0)
+#define S1G_CAPAB_B6_FRAGMENT_BA BIT(1)
+#define S1G_CAPAB_B6_NDP_PS_POLL BIT(2)
+#define S1G_CAPAB_B6_RAW_OPERATION BIT(3)
+#define S1G_CAPAB_B6_PAGE_SLICING BIT(4)
+#define S1G_CAPAB_B6_TXOP_SHARING_IMP_ACK BIT(5)
+#define S1G_CAPAB_B6_VHT_LINK_ADAPT_MASK (BIT(6) | BIT(7))
+#define S1G_CAPAB_B6_VHT_LINK_ADAPT_SHIFT 6
+
+#define S1G_CAPAB_B7_TACK_AS_PS_POLL BIT(0)
+#define S1G_CAPAB_B7_DUP_1MHZ BIT(1)
+#define S1G_CAPAB_B7_MCS_NEGOTIATION BIT(2)
+#define S1G_CAPAB_B7_1MHZ_CTL_RESPONSE_PREAMBLE BIT(3)
+#define S1G_CAPAB_B7_NDP_BFING_REPORT_POLL BIT(4)
+#define S1G_CAPAB_B7_UNSOLICITED_DYN_AID BIT(5)
+#define S1G_CAPAB_B7_SECTOR_TRAINING_OPERATION BIT(6)
+#define S1G_CAPAB_B7_TEMP_PS_MODE_SWITCH BIT(7)
+
+#define S1G_CAPAB_B8_TWT_GROUPING BIT(0)
+#define S1G_CAPAB_B8_BDT BIT(1)
+#define S1G_CAPAB_B8_COLOR_MASK (BIT(2) | BIT(3) | BIT(4))
+#define S1G_CAPAB_B8_COLOR_SHIFT 2
+#define S1G_CAPAB_B8_TWT_REQUEST BIT(5)
+#define S1G_CAPAB_B8_TWT_RESPOND BIT(6)
+#define S1G_CAPAB_B8_PV1_FRAME BIT(7)
+
+#define S1G_CAPAB_B9_LINK_ADAPT_PER_CONTROL_RESPONSE BIT(0)
+
/* Authentication algorithms */
#define WLAN_AUTH_OPEN 0
#define WLAN_AUTH_SHARED_KEY 1
@@ -2532,8 +2749,12 @@ enum ieee80211_eid {
WLAN_EID_QUIET_CHANNEL = 198,
WLAN_EID_OPMODE_NOTIF = 199,
+ WLAN_EID_S1G_BCN_COMPAT = 213,
+ WLAN_EID_S1G_SHORT_BCN_INTERVAL = 214,
+ WLAN_EID_S1G_CAPABILITIES = 217,
WLAN_EID_VENDOR_SPECIFIC = 221,
WLAN_EID_QOS_PARAMETER = 222,
+ WLAN_EID_S1G_OPERATION = 232,
WLAN_EID_CAG_NUMBER = 237,
WLAN_EID_AP_CSN = 239,
WLAN_EID_FILS_INDICATION = 240,
--
2.20.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 5/5] nl80211: S1G band and channel definitions
2020-04-30 1:06 [PATCH v3 0/5] initial S1G defines Thomas Pedersen
` (3 preceding siblings ...)
2020-04-30 1:06 ` [PATCH v3 4/5] ieee80211: S1G defines Thomas Pedersen
@ 2020-04-30 1:06 ` Thomas Pedersen
4 siblings, 0 replies; 12+ messages in thread
From: Thomas Pedersen @ 2020-04-30 1:06 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, Thomas Pedersen
Gives drivers the definitions needed to advertise support
for S1G bands.
Signed-off-by: Thomas Pedersen <thomas@adapt-ip.com>
---
include/net/cfg80211.h | 17 +++++++++++++++++
include/uapi/linux/nl80211.h | 16 ++++++++++++++++
net/mac80211/chan.c | 7 ++++++-
net/mac80211/scan.c | 1 +
net/mac80211/tx.c | 5 +++++
net/mac80211/util.c | 5 +++++
net/wireless/chan.c | 29 +++++++++++++++++++++++++++++
net/wireless/core.c | 5 +++--
net/wireless/util.c | 8 ++++++++
9 files changed, 90 insertions(+), 3 deletions(-)
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 3746b52c954e..40c3f2fe4167 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -414,6 +414,22 @@ struct ieee80211_edmg {
enum ieee80211_edmg_bw_config bw_config;
};
+/**
+ * struct ieee80211_sta_s1g_cap - STA's S1G capabilities
+ *
+ * This structure describes most essential parameters needed
+ * to describe 802.11ah S1G capabilities for a STA.
+ *
+ * @s1g_supported: is STA an S1G STA
+ * @cap: S1G capabilities information
+ * @nss_mcs: Supported NSS MCS set
+ */
+struct ieee80211_sta_s1g_cap {
+ bool s1g;
+ u8 cap[10]; /* use S1G_CAPAB_ */
+ u8 nss_mcs[5];
+};
+
/**
* struct ieee80211_supported_band - frequency band definition
*
@@ -445,6 +461,7 @@ struct ieee80211_supported_band {
int n_bitrates;
struct ieee80211_sta_ht_cap ht_cap;
struct ieee80211_sta_vht_cap vht_cap;
+ struct ieee80211_sta_s1g_cap s1g_cap;
struct ieee80211_edmg edmg_cap;
u16 n_iftype_data;
const struct ieee80211_sband_iftype_data *iftype_data;
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index b6012aa5103b..332ec138b507 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -4421,6 +4421,11 @@ enum nl80211_key_mode {
* attribute must be provided as well
* @NL80211_CHAN_WIDTH_5: 5 MHz OFDM channel
* @NL80211_CHAN_WIDTH_10: 10 MHz OFDM channel
+ * @NL80211_CHAN_WIDTH_1: 1 MHz OFDM channel
+ * @NL80211_CHAN_WIDTH_2: 2 MHz OFDM channel
+ * @NL80211_CHAN_WIDTH_4: 4 MHz OFDM channel
+ * @NL80211_CHAN_WIDTH_8: 8 MHz OFDM channel
+ * @NL80211_CHAN_WIDTH_16: 16 MHz OFDM channel
*/
enum nl80211_chan_width {
NL80211_CHAN_WIDTH_20_NOHT,
@@ -4431,6 +4436,11 @@ enum nl80211_chan_width {
NL80211_CHAN_WIDTH_160,
NL80211_CHAN_WIDTH_5,
NL80211_CHAN_WIDTH_10,
+ NL80211_CHAN_WIDTH_1,
+ NL80211_CHAN_WIDTH_2,
+ NL80211_CHAN_WIDTH_4,
+ NL80211_CHAN_WIDTH_8,
+ NL80211_CHAN_WIDTH_16,
};
/**
@@ -4441,11 +4451,15 @@ enum nl80211_chan_width {
* @NL80211_BSS_CHAN_WIDTH_20: control channel is 20 MHz wide or compatible
* @NL80211_BSS_CHAN_WIDTH_10: control channel is 10 MHz wide
* @NL80211_BSS_CHAN_WIDTH_5: control channel is 5 MHz wide
+ * @NL80211_BSS_CHAN_WIDTH_1: control channel is 1 MHz wide
+ * @NL80211_BSS_CHAN_WIDTH_2: control channel is 2 MHz wide
*/
enum nl80211_bss_scan_width {
NL80211_BSS_CHAN_WIDTH_20,
NL80211_BSS_CHAN_WIDTH_10,
NL80211_BSS_CHAN_WIDTH_5,
+ NL80211_BSS_CHAN_WIDTH_1,
+ NL80211_BSS_CHAN_WIDTH_2,
};
/**
@@ -4724,6 +4738,7 @@ enum nl80211_txrate_gi {
* @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz)
* @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 69.12 GHz)
* @NL80211_BAND_6GHZ: around 6 GHz band (5.9 - 7.2 GHz)
+ * @NL80211_BAND_S1GHZ: around 900MHz, supported by S1G PHYs
* @NUM_NL80211_BANDS: number of bands, avoid using this in userspace
* since newer kernel versions may support more bands
*/
@@ -4732,6 +4747,7 @@ enum nl80211_band {
NL80211_BAND_5GHZ,
NL80211_BAND_60GHZ,
NL80211_BAND_6GHZ,
+ NL80211_BAND_S1GHZ,
NUM_NL80211_BANDS,
};
diff --git a/net/mac80211/chan.c b/net/mac80211/chan.c
index e6e192f53e4e..08cf9da9c1e3 100644
--- a/net/mac80211/chan.c
+++ b/net/mac80211/chan.c
@@ -313,9 +313,14 @@ void ieee80211_recalc_chanctx_min_def(struct ieee80211_local *local,
lockdep_assert_held(&local->chanctx_mtx);
- /* don't optimize 5MHz, 10MHz, and radar_enabled confs */
+ /* don't optimize non-20MHz based and radar_enabled confs */
if (ctx->conf.def.width == NL80211_CHAN_WIDTH_5 ||
ctx->conf.def.width == NL80211_CHAN_WIDTH_10 ||
+ ctx->conf.def.width == NL80211_CHAN_WIDTH_1 ||
+ ctx->conf.def.width == NL80211_CHAN_WIDTH_2 ||
+ ctx->conf.def.width == NL80211_CHAN_WIDTH_4 ||
+ ctx->conf.def.width == NL80211_CHAN_WIDTH_8 ||
+ ctx->conf.def.width == NL80211_CHAN_WIDTH_16 ||
ctx->conf.radar_enabled) {
ctx->conf.min_def = ctx->conf.def;
return;
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
index 5db15996524f..d3935e308ea3 100644
--- a/net/mac80211/scan.c
+++ b/net/mac80211/scan.c
@@ -906,6 +906,7 @@ static void ieee80211_scan_state_set_channel(struct ieee80211_local *local,
case NL80211_BSS_CHAN_WIDTH_10:
local->scan_chandef.width = NL80211_CHAN_WIDTH_10;
break;
+ default:
case NL80211_BSS_CHAN_WIDTH_20:
/* If scanning on oper channel, use whatever channel-type
* is currently in use.
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 3dc1990e15c5..cf0ba8d229e4 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -80,6 +80,10 @@ static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
sband = local->hw.wiphy->bands[info->band];
txrate = &sband->bitrates[tx->rate.idx];
+ if (sband->band == NL80211_BAND_S1GHZ)
+ /* TODO */
+ return 0;
+
erp = txrate->flags & IEEE80211_RATE_ERP_G;
/*
@@ -166,6 +170,7 @@ static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
if (r->flags & IEEE80211_RATE_MANDATORY_A)
mrate = r->bitrate;
break;
+ case NL80211_BAND_S1GHZ:
case NL80211_BAND_60GHZ:
/* TODO, for now fall through */
case NUM_NL80211_BANDS:
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index 20436c86b9bf..c48e75dfdcdb 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -3456,6 +3456,11 @@ u32 ieee80211_chandef_downgrade(struct cfg80211_chan_def *c)
c->width = NL80211_CHAN_WIDTH_20_NOHT;
ret = IEEE80211_STA_DISABLE_HT | IEEE80211_STA_DISABLE_VHT;
break;
+ case NL80211_CHAN_WIDTH_1:
+ case NL80211_CHAN_WIDTH_2:
+ case NL80211_CHAN_WIDTH_4:
+ case NL80211_CHAN_WIDTH_8:
+ case NL80211_CHAN_WIDTH_16:
case NL80211_CHAN_WIDTH_5:
case NL80211_CHAN_WIDTH_10:
WARN_ON_ONCE(1);
diff --git a/net/wireless/chan.c b/net/wireless/chan.c
index e111c08daa0e..9ceea5f5b891 100644
--- a/net/wireless/chan.c
+++ b/net/wireless/chan.c
@@ -153,6 +153,11 @@ bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef)
control_freq = chandef->chan->center_freq;
switch (chandef->width) {
+ case NL80211_CHAN_WIDTH_1:
+ case NL80211_CHAN_WIDTH_2:
+ case NL80211_CHAN_WIDTH_4:
+ case NL80211_CHAN_WIDTH_8:
+ case NL80211_CHAN_WIDTH_16:
case NL80211_CHAN_WIDTH_5:
case NL80211_CHAN_WIDTH_10:
case NL80211_CHAN_WIDTH_20:
@@ -263,6 +268,21 @@ static int cfg80211_chandef_get_width(const struct cfg80211_chan_def *c)
int width;
switch (c->width) {
+ case NL80211_CHAN_WIDTH_1:
+ width = 1;
+ break;
+ case NL80211_CHAN_WIDTH_2:
+ width = 2;
+ break;
+ case NL80211_CHAN_WIDTH_4:
+ width = 4;
+ break;
+ case NL80211_CHAN_WIDTH_8:
+ width = 8;
+ break;
+ case NL80211_CHAN_WIDTH_16:
+ width = 16;
+ break;
case NL80211_CHAN_WIDTH_5:
width = 5;
break;
@@ -911,6 +931,15 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
control_freq = chandef->chan->center_freq;
switch (chandef->width) {
+ case NL80211_CHAN_WIDTH_1:
+ width = 1;
+ break;
+ case NL80211_CHAN_WIDTH_2:
+ width = 2;
+ break;
+ case NL80211_CHAN_WIDTH_4:
+ width = 4;
+ break;
case NL80211_CHAN_WIDTH_5:
width = 5;
break;
diff --git a/net/wireless/core.c b/net/wireless/core.c
index b795f363d004..14b617fb160c 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -800,10 +800,11 @@ int wiphy_register(struct wiphy *wiphy)
if (WARN_ON(!sband->n_channels))
return -EINVAL;
/*
- * on 60GHz band, there are no legacy rates, so
+ * on 60GHz or sub-1Ghz band, there are no legacy rates, so
* n_bitrates is 0
*/
- if (WARN_ON(band != NL80211_BAND_60GHZ &&
+ if (WARN_ON((band != NL80211_BAND_60GHZ &&
+ band != NL80211_BAND_S1GHZ) &&
!sband->n_bitrates))
return -EINVAL;
diff --git a/net/wireless/util.c b/net/wireless/util.c
index df75e58eca5d..3ba1f4873541 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -100,6 +100,8 @@ u32 ieee80211_channel_to_freq_khz(int chan, enum nl80211_band band)
if (chan < 7)
return MHZ_TO_KHZ(56160 + chan * 2160);
break;
+ case NL80211_BAND_S1GHZ:
+ return 902000 + chan * 500;
default:
;
}
@@ -208,6 +210,12 @@ static void set_mandatory_flags_band(struct ieee80211_supported_band *sband)
WARN_ON(!sband->ht_cap.ht_supported);
WARN_ON((sband->ht_cap.mcs.rx_mask[0] & 0x1e) != 0x1e);
break;
+ case NL80211_BAND_S1GHZ:
+ /* Figure 9-589bd: 3 means unsupported, so != 3 means at least
+ * mandatory is ok.
+ */
+ WARN_ON((sband->s1g_cap.nss_mcs[0] & 0x3) == 0x3);
+ break;
case NUM_NL80211_BANDS:
default:
WARN_ON(1);
--
2.20.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API
2020-04-30 1:06 ` [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API Thomas Pedersen
@ 2020-04-30 8:06 ` kbuild test robot
2020-04-30 9:05 ` kbuild test robot
2020-04-30 11:37 ` Johannes Berg
2 siblings, 0 replies; 12+ messages in thread
From: kbuild test robot @ 2020-04-30 8:06 UTC (permalink / raw)
To: Thomas Pedersen, Johannes Berg
Cc: kbuild-all, linux-wireless, Thomas Pedersen
[-- Attachment #1: Type: text/plain, Size: 9583 bytes --]
Hi Thomas,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on mac80211-next/master]
[cannot apply to mac80211/master v5.7-rc3 next-20200429]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Thomas-Pedersen/initial-S1G-defines/20200430-091307
base: https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master
config: parisc-allyesconfig (attached as .config)
compiler: hppa-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=parisc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from include/trace/define_trace.h:102,
from net/wireless/trace.h:3537,
from net/wireless/trace.c:5:
net/wireless/./trace.h: In function 'trace_raw_output_cfg80211_rx_mgmt_khz':
>> include/trace/trace_events.h:359:9: error: unable to generate reloads for:
359 | struct trace_event_raw_##call *field; \
| ^~~~~~~~~~~~~~~~
include/trace/trace_events.h:75:2: note: in expansion of macro 'DECLARE_EVENT_CLASS'
75 | DECLARE_EVENT_CLASS(name, \
| ^~~~~~~~~~~~~~~~~~~
net/wireless/./trace.h:2830:1: note: in expansion of macro 'TRACE_EVENT'
2830 | TRACE_EVENT(cfg80211_rx_mgmt_khz,
| ^~~~~~~~~~~
(insn 27 26 22 4 (set (reg:SF 28 %r28 [113])
(float:SF (reg:SI 28 %r28 [orig:114 field_12->freq ] [114]))) "net/wireless/./trace.h":2830:1 96 {floatsisf2}
(expr_list:REG_DEAD (reg:SI 28 %r28 [orig:114 field_12->freq ] [114])
(nil)))
during RTL pass: reload
include/trace/trace_events.h:359:9: internal compiler error: in find_reloads, at reload.c:3814
359 | struct trace_event_raw_##call *field; \
| ^~~~~~~~~~~~~~~~
include/trace/trace_events.h:75:2: note: in expansion of macro 'DECLARE_EVENT_CLASS'
75 | DECLARE_EVENT_CLASS(name, \
| ^~~~~~~~~~~~~~~~~~~
net/wireless/./trace.h:2830:1: note: in expansion of macro 'TRACE_EVENT'
2830 | TRACE_EVENT(cfg80211_rx_mgmt_khz,
| ^~~~~~~~~~~
0x513fa0 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*)
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/rtl-error.c:108
0x513967 find_reloads(rtx_insn*, int, int, int, short*)
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/reload.c:3814
0x984bb6 calculate_needs_all_insns
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/reload1.c:1474
0x984bb6 reload(rtx_insn*, int)
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/reload1.c:986
0x847ef0 do_reload
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/ira.c:5535
0x847ef0 execute
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/ira.c:5707
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
vim +359 include/trace/trace_events.h
2fc1b6f0d0a719 include/trace/ftrace.h liubo 2011-04-19 328
5a2e3995951176 include/trace/ftrace.h Kei Tokunaga 2010-04-01 329 #undef __print_hex
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann 2017-01-25 330 #define __print_hex(buf, buf_len) \
3898fac1f488c7 include/trace/trace_events.h Daniel Borkmann 2017-02-02 331 trace_print_hex_seq(p, buf, buf_len, false)
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann 2017-01-25 332
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann 2017-01-25 333 #undef __print_hex_str
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann 2017-01-25 334 #define __print_hex_str(buf, buf_len) \
3898fac1f488c7 include/trace/trace_events.h Daniel Borkmann 2017-02-02 335 trace_print_hex_seq(p, buf, buf_len, true)
5a2e3995951176 include/trace/ftrace.h Kei Tokunaga 2010-04-01 336
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 337 #undef __print_array
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 338 #define __print_array(array, count, el_size) \
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 339 ({ \
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 340 BUILD_BUG_ON(el_size != 1 && el_size != 2 && \
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 341 el_size != 4 && el_size != 8); \
645df987f7c174 include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-04 342) trace_print_array_seq(p, array, count, el_size); \
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 343 })
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 344
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 345 #undef __print_hex_dump
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 346 #define __print_hex_dump(prefix_str, prefix_type, \
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 347 rowsize, groupsize, buf, len, ascii) \
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 348 trace_print_hex_dump_seq(p, prefix_str, prefix_type, \
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 349 rowsize, groupsize, buf, len, ascii)
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 350
091ad3658e3c76 include/trace/ftrace.h Ingo Molnar 2009-11-26 351 #undef DECLARE_EVENT_CLASS
091ad3658e3c76 include/trace/ftrace.h Ingo Molnar 2009-11-26 352 #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \
83f0d53993b296 include/trace/ftrace.h Steven Rostedt 2010-02-16 353 static notrace enum print_line_t \
892c505aac2bdd include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-05 354) trace_raw_output_##call(struct trace_iterator *iter, int flags, \
80decc70afc57c include/trace/ftrace.h Steven Rostedt 2010-04-23 355 struct trace_event *trace_event) \
f42c85e74faa42 include/trace/ftrace.h Steven Rostedt 2009-04-13 356 { \
f42c85e74faa42 include/trace/ftrace.h Steven Rostedt 2009-04-13 357 struct trace_seq *s = &iter->seq; \
f71130de5c7fba include/trace/ftrace.h Li Zefan 2013-02-21 358 struct trace_seq __maybe_unused *p = &iter->tmp_seq; \
a7237765730a10 include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-13 @359) struct trace_event_raw_##call *field; \
f42c85e74faa42 include/trace/ftrace.h Steven Rostedt 2009-04-13 360 int ret; \
f42c85e74faa42 include/trace/ftrace.h Steven Rostedt 2009-04-13 361 \
f71130de5c7fba include/trace/ftrace.h Li Zefan 2013-02-21 362 field = (typeof(field))iter->ent; \
80decc70afc57c include/trace/ftrace.h Steven Rostedt 2010-04-23 363 \
892c505aac2bdd include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-05 364) ret = trace_raw_output_prep(iter, trace_event); \
8e2e095cbecad2 include/trace/ftrace.h Steven Rostedt (Red Hat 2014-11-14 365) if (ret != TRACE_TYPE_HANDLED) \
f71130de5c7fba include/trace/ftrace.h Li Zefan 2013-02-21 366 return ret; \
f71130de5c7fba include/trace/ftrace.h Li Zefan 2013-02-21 367 \
19a7fe206232cc include/trace/ftrace.h Steven Rostedt (Red Hat 2014-11-12 368) trace_seq_printf(s, print); \
f42c85e74faa42 include/trace/ftrace.h Steven Rostedt 2009-04-13 369 \
19a7fe206232cc include/trace/ftrace.h Steven Rostedt (Red Hat 2014-11-12 370) return trace_handle_return(s); \
80decc70afc57c include/trace/ftrace.h Steven Rostedt 2010-04-23 371 } \
3ad017bac94ac8 include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-13 372) static struct trace_event_functions trace_event_type_funcs_##call = { \
892c505aac2bdd include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-05 373) .trace = trace_raw_output_##call, \
80decc70afc57c include/trace/ftrace.h Steven Rostedt 2010-04-23 374 };
ff038f5c37c207 include/trace/ftrace.h Steven Rostedt 2009-11-18 375
:::::: The code at line 359 was first introduced by commit
:::::: a7237765730a10d429736f47ac4b89779ec6c534 tracing: Rename ftrace_raw_##call event structures to trace_event_raw_##call
:::::: TO: Steven Rostedt (Red Hat) <rostedt@goodmis.org>
:::::: CC: Steven Rostedt <rostedt@goodmis.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 61609 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API
@ 2020-04-30 8:06 ` kbuild test robot
0 siblings, 0 replies; 12+ messages in thread
From: kbuild test robot @ 2020-04-30 8:06 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 9714 bytes --]
Hi Thomas,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on mac80211-next/master]
[cannot apply to mac80211/master v5.7-rc3 next-20200429]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Thomas-Pedersen/initial-S1G-defines/20200430-091307
base: https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master
config: parisc-allyesconfig (attached as .config)
compiler: hppa-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=parisc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from include/trace/define_trace.h:102,
from net/wireless/trace.h:3537,
from net/wireless/trace.c:5:
net/wireless/./trace.h: In function 'trace_raw_output_cfg80211_rx_mgmt_khz':
>> include/trace/trace_events.h:359:9: error: unable to generate reloads for:
359 | struct trace_event_raw_##call *field; \
| ^~~~~~~~~~~~~~~~
include/trace/trace_events.h:75:2: note: in expansion of macro 'DECLARE_EVENT_CLASS'
75 | DECLARE_EVENT_CLASS(name, \
| ^~~~~~~~~~~~~~~~~~~
net/wireless/./trace.h:2830:1: note: in expansion of macro 'TRACE_EVENT'
2830 | TRACE_EVENT(cfg80211_rx_mgmt_khz,
| ^~~~~~~~~~~
(insn 27 26 22 4 (set (reg:SF 28 %r28 [113])
(float:SF (reg:SI 28 %r28 [orig:114 field_12->freq ] [114]))) "net/wireless/./trace.h":2830:1 96 {floatsisf2}
(expr_list:REG_DEAD (reg:SI 28 %r28 [orig:114 field_12->freq ] [114])
(nil)))
during RTL pass: reload
include/trace/trace_events.h:359:9: internal compiler error: in find_reloads, at reload.c:3814
359 | struct trace_event_raw_##call *field; \
| ^~~~~~~~~~~~~~~~
include/trace/trace_events.h:75:2: note: in expansion of macro 'DECLARE_EVENT_CLASS'
75 | DECLARE_EVENT_CLASS(name, \
| ^~~~~~~~~~~~~~~~~~~
net/wireless/./trace.h:2830:1: note: in expansion of macro 'TRACE_EVENT'
2830 | TRACE_EVENT(cfg80211_rx_mgmt_khz,
| ^~~~~~~~~~~
0x513fa0 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*)
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/rtl-error.c:108
0x513967 find_reloads(rtx_insn*, int, int, int, short*)
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/reload.c:3814
0x984bb6 calculate_needs_all_insns
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/reload1.c:1474
0x984bb6 reload(rtx_insn*, int)
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/reload1.c:986
0x847ef0 do_reload
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/ira.c:5535
0x847ef0 execute
/tmp/build-crosstools-xh-9.3.0-2.34/gcc/gcc-9.3.0/gcc/ira.c:5707
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
vim +359 include/trace/trace_events.h
2fc1b6f0d0a719 include/trace/ftrace.h liubo 2011-04-19 328
5a2e3995951176 include/trace/ftrace.h Kei Tokunaga 2010-04-01 329 #undef __print_hex
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann 2017-01-25 330 #define __print_hex(buf, buf_len) \
3898fac1f488c7 include/trace/trace_events.h Daniel Borkmann 2017-02-02 331 trace_print_hex_seq(p, buf, buf_len, false)
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann 2017-01-25 332
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann 2017-01-25 333 #undef __print_hex_str
2acae0d5b0f73a include/trace/trace_events.h Daniel Borkmann 2017-01-25 334 #define __print_hex_str(buf, buf_len) \
3898fac1f488c7 include/trace/trace_events.h Daniel Borkmann 2017-02-02 335 trace_print_hex_seq(p, buf, buf_len, true)
5a2e3995951176 include/trace/ftrace.h Kei Tokunaga 2010-04-01 336
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 337 #undef __print_array
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 338 #define __print_array(array, count, el_size) \
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 339 ({ \
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 340 BUILD_BUG_ON(el_size != 1 && el_size != 2 && \
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 341 el_size != 4 && el_size != 8); \
645df987f7c174 include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-04 342) trace_print_array_seq(p, array, count, el_size); \
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 343 })
6ea22486ba46bc include/trace/ftrace.h Dave Martin 2015-01-28 344
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 345 #undef __print_hex_dump
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 346 #define __print_hex_dump(prefix_str, prefix_type, \
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 347 rowsize, groupsize, buf, len, ascii) \
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 348 trace_print_hex_dump_seq(p, prefix_str, prefix_type, \
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 349 rowsize, groupsize, buf, len, ascii)
ef56e047b2bd4d include/trace/trace_events.h Piotr Maziarz 2019-11-07 350
091ad3658e3c76 include/trace/ftrace.h Ingo Molnar 2009-11-26 351 #undef DECLARE_EVENT_CLASS
091ad3658e3c76 include/trace/ftrace.h Ingo Molnar 2009-11-26 352 #define DECLARE_EVENT_CLASS(call, proto, args, tstruct, assign, print) \
83f0d53993b296 include/trace/ftrace.h Steven Rostedt 2010-02-16 353 static notrace enum print_line_t \
892c505aac2bdd include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-05 354) trace_raw_output_##call(struct trace_iterator *iter, int flags, \
80decc70afc57c include/trace/ftrace.h Steven Rostedt 2010-04-23 355 struct trace_event *trace_event) \
f42c85e74faa42 include/trace/ftrace.h Steven Rostedt 2009-04-13 356 { \
f42c85e74faa42 include/trace/ftrace.h Steven Rostedt 2009-04-13 357 struct trace_seq *s = &iter->seq; \
f71130de5c7fba include/trace/ftrace.h Li Zefan 2013-02-21 358 struct trace_seq __maybe_unused *p = &iter->tmp_seq; \
a7237765730a10 include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-13 @359) struct trace_event_raw_##call *field; \
f42c85e74faa42 include/trace/ftrace.h Steven Rostedt 2009-04-13 360 int ret; \
f42c85e74faa42 include/trace/ftrace.h Steven Rostedt 2009-04-13 361 \
f71130de5c7fba include/trace/ftrace.h Li Zefan 2013-02-21 362 field = (typeof(field))iter->ent; \
80decc70afc57c include/trace/ftrace.h Steven Rostedt 2010-04-23 363 \
892c505aac2bdd include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-05 364) ret = trace_raw_output_prep(iter, trace_event); \
8e2e095cbecad2 include/trace/ftrace.h Steven Rostedt (Red Hat 2014-11-14 365) if (ret != TRACE_TYPE_HANDLED) \
f71130de5c7fba include/trace/ftrace.h Li Zefan 2013-02-21 366 return ret; \
f71130de5c7fba include/trace/ftrace.h Li Zefan 2013-02-21 367 \
19a7fe206232cc include/trace/ftrace.h Steven Rostedt (Red Hat 2014-11-12 368) trace_seq_printf(s, print); \
f42c85e74faa42 include/trace/ftrace.h Steven Rostedt 2009-04-13 369 \
19a7fe206232cc include/trace/ftrace.h Steven Rostedt (Red Hat 2014-11-12 370) return trace_handle_return(s); \
80decc70afc57c include/trace/ftrace.h Steven Rostedt 2010-04-23 371 } \
3ad017bac94ac8 include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-13 372) static struct trace_event_functions trace_event_type_funcs_##call = { \
892c505aac2bdd include/trace/trace_events.h Steven Rostedt (Red Hat 2015-05-05 373) .trace = trace_raw_output_##call, \
80decc70afc57c include/trace/ftrace.h Steven Rostedt 2010-04-23 374 };
ff038f5c37c207 include/trace/ftrace.h Steven Rostedt 2009-11-18 375
:::::: The code at line 359 was first introduced by commit
:::::: a7237765730a10d429736f47ac4b89779ec6c534 tracing: Rename ftrace_raw_##call event structures to trace_event_raw_##call
:::::: TO: Steven Rostedt (Red Hat) <rostedt@goodmis.org>
:::::: CC: Steven Rostedt <rostedt@goodmis.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 61609 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API
2020-04-30 1:06 ` [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API Thomas Pedersen
@ 2020-04-30 9:05 ` kbuild test robot
2020-04-30 9:05 ` kbuild test robot
2020-04-30 11:37 ` Johannes Berg
2 siblings, 0 replies; 12+ messages in thread
From: kbuild test robot @ 2020-04-30 9:05 UTC (permalink / raw)
To: Thomas Pedersen, Johannes Berg
Cc: kbuild-all, linux-wireless, Thomas Pedersen
[-- Attachment #1: Type: text/plain, Size: 1927 bytes --]
Hi Thomas,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on mac80211-next/master]
[cannot apply to mac80211/master v5.7-rc3 next-20200429]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Thomas-Pedersen/initial-S1G-defines/20200430-091307
base: https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master
config: arm-exynos_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
arm-linux-gnueabi-ld: net/wireless/trace.o: in function `trace_raw_output_cfg80211_rx_mgmt_khz':
>> trace.c:(.text+0x4ef4): undefined reference to `__aeabi_i2f'
>> arm-linux-gnueabi-ld: trace.c:(.text+0x4f00): undefined reference to `__aeabi_fdiv'
>> arm-linux-gnueabi-ld: trace.c:(.text+0x4f04): undefined reference to `__aeabi_f2d'
arm-linux-gnueabi-ld: net/wireless/trace.o: in function `trace_raw_output_cfg80211_report_obss_beacon_khz':
trace.c:(.text+0x56b0): undefined reference to `__aeabi_i2f'
arm-linux-gnueabi-ld: trace.c:(.text+0x56bc): undefined reference to `__aeabi_fdiv'
arm-linux-gnueabi-ld: trace.c:(.text+0x56c0): undefined reference to `__aeabi_f2d'
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 33187 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API
@ 2020-04-30 9:05 ` kbuild test robot
0 siblings, 0 replies; 12+ messages in thread
From: kbuild test robot @ 2020-04-30 9:05 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 1966 bytes --]
Hi Thomas,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on mac80211-next/master]
[cannot apply to mac80211/master v5.7-rc3 next-20200429]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Thomas-Pedersen/initial-S1G-defines/20200430-091307
base: https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master
config: arm-exynos_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day GCC_VERSION=9.3.0 make.cross ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
arm-linux-gnueabi-ld: net/wireless/trace.o: in function `trace_raw_output_cfg80211_rx_mgmt_khz':
>> trace.c:(.text+0x4ef4): undefined reference to `__aeabi_i2f'
>> arm-linux-gnueabi-ld: trace.c:(.text+0x4f00): undefined reference to `__aeabi_fdiv'
>> arm-linux-gnueabi-ld: trace.c:(.text+0x4f04): undefined reference to `__aeabi_f2d'
arm-linux-gnueabi-ld: net/wireless/trace.o: in function `trace_raw_output_cfg80211_report_obss_beacon_khz':
trace.c:(.text+0x56b0): undefined reference to `__aeabi_i2f'
arm-linux-gnueabi-ld: trace.c:(.text+0x56bc): undefined reference to `__aeabi_fdiv'
arm-linux-gnueabi-ld: trace.c:(.text+0x56c0): undefined reference to `__aeabi_f2d'
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 33187 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API
2020-04-30 1:06 ` [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API Thomas Pedersen
2020-04-30 8:06 ` kbuild test robot
2020-04-30 9:05 ` kbuild test robot
@ 2020-04-30 11:37 ` Johannes Berg
2020-04-30 16:57 ` Thomas Pedersen
2 siblings, 1 reply; 12+ messages in thread
From: Johannes Berg @ 2020-04-30 11:37 UTC (permalink / raw)
To: Thomas Pedersen; +Cc: linux-wireless
On Wed, 2020-04-29 at 18:06 -0700, Thomas Pedersen wrote:
>
> +#define PR_KHZ(f) KHZ_TO_MHZ((float) f)
You can't use float, sorry.
johannes
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API
2020-04-30 11:37 ` Johannes Berg
@ 2020-04-30 16:57 ` Thomas Pedersen
0 siblings, 0 replies; 12+ messages in thread
From: Thomas Pedersen @ 2020-04-30 16:57 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless
On 4/30/20 4:37 AM, Johannes Berg wrote:
> On Wed, 2020-04-29 at 18:06 -0700, Thomas Pedersen wrote:
>>
>> +#define PR_KHZ(f) KHZ_TO_MHZ((float) f)
>
> You can't use float, sorry.
OK, I'll need to do something else, thanks.
--
thomas
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2020-04-30 16:57 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-30 1:06 [PATCH v3 0/5] initial S1G defines Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 1/5] cfg80211: add KHz variants of frame RX API Thomas Pedersen
2020-04-30 8:06 ` kbuild test robot
2020-04-30 8:06 ` kbuild test robot
2020-04-30 9:05 ` kbuild test robot
2020-04-30 9:05 ` kbuild test robot
2020-04-30 11:37 ` Johannes Berg
2020-04-30 16:57 ` Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 2/5] nl80211: add KHz frequency offset for most wifi commands Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 3/5] nl80211: support scan frequencies in KHz Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 4/5] ieee80211: S1G defines Thomas Pedersen
2020-04-30 1:06 ` [PATCH v3 5/5] nl80211: S1G band and channel definitions Thomas Pedersen
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.