Commit 16573e7c authored by Jakub Kicinski's avatar Jakub Kicinski

Merge tag 'mac80211-next-for-net-next-2020-10-08' of...

Merge tag 'mac80211-next-for-net-next-2020-10-08' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next

Johannes Berg says:

====================
A handful of changes:
 * fixes for the recent S1G work
 * a docbook build time improvement
 * API to pass beacon rate to lower-level driver
====================
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents c77fb07f ba6ff70a
This diff is collapsed.
...@@ -15,25 +15,14 @@ appropriate trigger, which will then be triggered appropriately by ...@@ -15,25 +15,14 @@ appropriate trigger, which will then be triggered appropriately by
mac80211. mac80211.
.. kernel-doc:: include/net/mac80211.h .. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_get_tx_led_name :functions:
ieee80211_get_tx_led_name
.. kernel-doc:: include/net/mac80211.h ieee80211_get_rx_led_name
:functions: ieee80211_get_rx_led_name ieee80211_get_assoc_led_name
ieee80211_get_radio_led_name
.. kernel-doc:: include/net/mac80211.h ieee80211_tpt_blink
:functions: ieee80211_get_assoc_led_name ieee80211_tpt_led_trigger_flags
ieee80211_create_tpt_led_trigger
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_get_radio_led_name
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_tpt_blink
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_tpt_led_trigger_flags
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_create_tpt_led_trigger
Hardware crypto acceleration Hardware crypto acceleration
============================ ============================
...@@ -42,22 +31,13 @@ Hardware crypto acceleration ...@@ -42,22 +31,13 @@ Hardware crypto acceleration
:doc: Hardware crypto acceleration :doc: Hardware crypto acceleration
.. kernel-doc:: include/net/mac80211.h .. kernel-doc:: include/net/mac80211.h
:functions: set_key_cmd :functions:
set_key_cmd
.. kernel-doc:: include/net/mac80211.h ieee80211_key_conf
:functions: ieee80211_key_conf ieee80211_key_flags
ieee80211_get_tkip_p1k
.. kernel-doc:: include/net/mac80211.h ieee80211_get_tkip_p1k_iv
:functions: ieee80211_key_flags ieee80211_get_tkip_p2k
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_get_tkip_p1k
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_get_tkip_p1k_iv
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_get_tkip_p2k
Powersave support Powersave support
================= =================
...@@ -99,28 +79,15 @@ support for powersaving clients ...@@ -99,28 +79,15 @@ support for powersaving clients
:doc: AP support for powersaving clients :doc: AP support for powersaving clients
.. kernel-doc:: include/net/mac80211.h .. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_get_buffered_bc :functions:
ieee80211_get_buffered_bc
.. kernel-doc:: include/net/mac80211.h ieee80211_beacon_get
:functions: ieee80211_beacon_get ieee80211_sta_eosp
ieee80211_frame_release_type
.. kernel-doc:: include/net/mac80211.h ieee80211_sta_ps_transition
:functions: ieee80211_sta_eosp ieee80211_sta_ps_transition_ni
ieee80211_sta_set_buffered
.. kernel-doc:: include/net/mac80211.h ieee80211_sta_block_awake
:functions: ieee80211_frame_release_type
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_sta_ps_transition
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_sta_ps_transition_ni
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_sta_set_buffered
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_sta_block_awake
Supporting multiple virtual interfaces Supporting multiple virtual interfaces
====================================== ======================================
...@@ -134,10 +101,9 @@ addresses here, note which configurations are supported by mac80211, add ...@@ -134,10 +101,9 @@ addresses here, note which configurations are supported by mac80211, add
notes about supporting hw crypto with it. notes about supporting hw crypto with it.
.. kernel-doc:: include/net/mac80211.h .. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_iterate_active_interfaces :functions:
ieee80211_iterate_active_interfaces
.. kernel-doc:: include/net/mac80211.h ieee80211_iterate_active_interfaces_atomic
:functions: ieee80211_iterate_active_interfaces_atomic
Station handling Station handling
================ ================
...@@ -145,16 +111,11 @@ Station handling ...@@ -145,16 +111,11 @@ Station handling
TODO TODO
.. kernel-doc:: include/net/mac80211.h .. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_sta :functions:
ieee80211_sta
.. kernel-doc:: include/net/mac80211.h sta_notify_cmd
:functions: sta_notify_cmd ieee80211_find_sta
ieee80211_find_sta_by_ifaddr
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_find_sta
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_find_sta_by_ifaddr
Hardware scan offload Hardware scan offload
===================== =====================
...@@ -193,10 +154,9 @@ Spatial Multiplexing Powersave (SMPS) ...@@ -193,10 +154,9 @@ Spatial Multiplexing Powersave (SMPS)
:doc: Spatial multiplexing power save :doc: Spatial multiplexing power save
.. kernel-doc:: include/net/mac80211.h .. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_request_smps :functions:
ieee80211_request_smps
.. kernel-doc:: include/net/mac80211.h ieee80211_smps_mode
:functions: ieee80211_smps_mode
TBD TBD
...@@ -209,22 +169,13 @@ Rate Control API ...@@ -209,22 +169,13 @@ Rate Control API
TBD TBD
.. kernel-doc:: include/net/mac80211.h .. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_start_tx_ba_session :functions:
ieee80211_start_tx_ba_session
.. kernel-doc:: include/net/mac80211.h ieee80211_start_tx_ba_cb_irqsafe
:functions: ieee80211_start_tx_ba_cb_irqsafe ieee80211_stop_tx_ba_session
ieee80211_stop_tx_ba_cb_irqsafe
.. kernel-doc:: include/net/mac80211.h ieee80211_rate_control_changed
:functions: ieee80211_stop_tx_ba_session ieee80211_tx_rate_control
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_stop_tx_ba_cb_irqsafe
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_rate_control_changed
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_tx_rate_control
TBD TBD
...@@ -261,10 +212,9 @@ Programming information ...@@ -261,10 +212,9 @@ Programming information
----------------------- -----------------------
.. kernel-doc:: net/mac80211/sta_info.h .. kernel-doc:: net/mac80211/sta_info.h
:functions: sta_info :functions:
sta_info
.. kernel-doc:: net/mac80211/sta_info.h ieee80211_sta_info_flags
:functions: ieee80211_sta_info_flags
STA information lifetime rules STA information lifetime rules
------------------------------ ------------------------------
...@@ -276,13 +226,10 @@ Aggregation Functions ...@@ -276,13 +226,10 @@ Aggregation Functions
===================== =====================
.. kernel-doc:: net/mac80211/sta_info.h .. kernel-doc:: net/mac80211/sta_info.h
:functions: sta_ampdu_mlme :functions:
sta_ampdu_mlme
.. kernel-doc:: net/mac80211/sta_info.h tid_ampdu_tx
:functions: tid_ampdu_tx tid_ampdu_rx
.. kernel-doc:: net/mac80211/sta_info.h
:functions: tid_ampdu_rx
Synchronisation Functions Synchronisation Functions
========================= =========================
......
...@@ -30,31 +30,16 @@ Finally, a discussion of hardware capabilities should be done with ...@@ -30,31 +30,16 @@ Finally, a discussion of hardware capabilities should be done with
references to other parts of the book. references to other parts of the book.
.. kernel-doc:: include/net/mac80211.h .. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_hw :functions:
ieee80211_hw
.. kernel-doc:: include/net/mac80211.h ieee80211_hw_flags
:functions: ieee80211_hw_flags SET_IEEE80211_DEV
SET_IEEE80211_PERM_ADDR
.. kernel-doc:: include/net/mac80211.h ieee80211_ops
:functions: SET_IEEE80211_DEV ieee80211_alloc_hw
ieee80211_register_hw
.. kernel-doc:: include/net/mac80211.h ieee80211_unregister_hw
:functions: SET_IEEE80211_PERM_ADDR ieee80211_free_hw
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_ops
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_alloc_hw
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_register_hw
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_unregister_hw
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_free_hw
PHY configuration PHY configuration
================= =================
...@@ -65,10 +50,9 @@ This chapter should describe PHY handling including start/stop callbacks ...@@ -65,10 +50,9 @@ This chapter should describe PHY handling including start/stop callbacks
and the various structures used. and the various structures used.
.. kernel-doc:: include/net/mac80211.h .. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_conf :functions:
ieee80211_conf
.. kernel-doc:: include/net/mac80211.h ieee80211_conf_flags
:functions: ieee80211_conf_flags
Virtual interfaces Virtual interfaces
================== ==================
...@@ -123,79 +107,32 @@ functions/definitions ...@@ -123,79 +107,32 @@ functions/definitions
--------------------- ---------------------
.. kernel-doc:: include/net/mac80211.h .. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_rx_status :functions:
ieee80211_rx_status
.. kernel-doc:: include/net/mac80211.h mac80211_rx_encoding_flags
:functions: mac80211_rx_encoding_flags mac80211_rx_flags
mac80211_tx_info_flags
.. kernel-doc:: include/net/mac80211.h mac80211_tx_control_flags
:functions: mac80211_rx_flags mac80211_rate_control_flags
ieee80211_tx_rate
.. kernel-doc:: include/net/mac80211.h ieee80211_tx_info
:functions: mac80211_tx_info_flags ieee80211_tx_info_clear_status
ieee80211_rx
.. kernel-doc:: include/net/mac80211.h ieee80211_rx_ni
:functions: mac80211_tx_control_flags ieee80211_rx_irqsafe
ieee80211_tx_status
.. kernel-doc:: include/net/mac80211.h ieee80211_tx_status_ni
:functions: mac80211_rate_control_flags ieee80211_tx_status_irqsafe
ieee80211_rts_get
.. kernel-doc:: include/net/mac80211.h ieee80211_rts_duration
:functions: ieee80211_tx_rate ieee80211_ctstoself_get
ieee80211_ctstoself_duration
.. kernel-doc:: include/net/mac80211.h ieee80211_generic_frame_duration
:functions: ieee80211_tx_info ieee80211_wake_queue
ieee80211_stop_queue
.. kernel-doc:: include/net/mac80211.h ieee80211_wake_queues
:functions: ieee80211_tx_info_clear_status ieee80211_stop_queues
ieee80211_queue_stopped
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_rx
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_rx_ni
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_rx_irqsafe
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_tx_status
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_tx_status_ni
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_tx_status_irqsafe
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_rts_get
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_rts_duration
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_ctstoself_get
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_ctstoself_duration
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_generic_frame_duration
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_wake_queue
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_stop_queue
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_wake_queues
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_stop_queues
.. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_queue_stopped
Frame filtering Frame filtering
=============== ===============
...@@ -213,7 +150,6 @@ The mac80211 workqueue ...@@ -213,7 +150,6 @@ The mac80211 workqueue
:doc: mac80211 workqueue :doc: mac80211 workqueue
.. kernel-doc:: include/net/mac80211.h .. kernel-doc:: include/net/mac80211.h
:functions: ieee80211_queue_work :functions:
ieee80211_queue_work
.. kernel-doc:: include/net/mac80211.h ieee80211_queue_delayed_work
:functions: ieee80211_queue_delayed_work
...@@ -628,6 +628,8 @@ struct ieee80211_fils_discovery { ...@@ -628,6 +628,8 @@ struct ieee80211_fils_discovery {
* @unsol_bcast_probe_resp_interval: Unsolicited broadcast probe response * @unsol_bcast_probe_resp_interval: Unsolicited broadcast probe response
* interval. * interval.
* @s1g: BSS is S1G BSS (affects Association Request format). * @s1g: BSS is S1G BSS (affects Association Request format).
* @beacon_tx_rate: The configured beacon transmit rate that needs to be passed
* to driver when rate control is offloaded to firmware.
*/ */
struct ieee80211_bss_conf { struct ieee80211_bss_conf {
const u8 *bssid; const u8 *bssid;
...@@ -698,6 +700,7 @@ struct ieee80211_bss_conf { ...@@ -698,6 +700,7 @@ struct ieee80211_bss_conf {
struct ieee80211_fils_discovery fils_discovery; struct ieee80211_fils_discovery fils_discovery;
u32 unsol_bcast_probe_resp_interval; u32 unsol_bcast_probe_resp_interval;
bool s1g; bool s1g;
struct cfg80211_bitrate_mask beacon_tx_rate;
}; };
/** /**
......
...@@ -13,6 +13,7 @@ mac80211-y := \ ...@@ -13,6 +13,7 @@ mac80211-y := \
ht.o agg-tx.o agg-rx.o \ ht.o agg-tx.o agg-rx.o \
vht.o \ vht.o \
he.o \ he.o \
s1g.o \
ibss.o \ ibss.o \
iface.o \ iface.o \
rate.o \ rate.o \
......
...@@ -709,7 +709,8 @@ void sta_set_rate_info_tx(struct sta_info *sta, ...@@ -709,7 +709,8 @@ void sta_set_rate_info_tx(struct sta_info *sta,
u16 brate; u16 brate;
sband = ieee80211_get_sband(sta->sdata); sband = ieee80211_get_sband(sta->sdata);
if (sband) { WARN_ON_ONCE(sband && !sband->bitrates);
if (sband && sband->bitrates) {
brate = sband->bitrates[rate->idx].bitrate; brate = sband->bitrates[rate->idx].bitrate;
rinfo->legacy = DIV_ROUND_UP(brate, 1 << shift); rinfo->legacy = DIV_ROUND_UP(brate, 1 << shift);
} }
...@@ -1153,6 +1154,9 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev, ...@@ -1153,6 +1154,9 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
} }
} }
if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL))
sdata->vif.bss_conf.beacon_tx_rate = params->beacon_rate;
err = ieee80211_assign_beacon(sdata, &params->beacon, NULL); err = ieee80211_assign_beacon(sdata, &params->beacon, NULL);
if (err < 0) if (err < 0)
goto error; goto error;
......
...@@ -1928,6 +1928,9 @@ void ...@@ -1928,6 +1928,9 @@ void
ieee80211_he_op_ie_to_bss_conf(struct ieee80211_vif *vif, ieee80211_he_op_ie_to_bss_conf(struct ieee80211_vif *vif,
const struct ieee80211_he_operation *he_op_ie_elem); const struct ieee80211_he_operation *he_op_ie_elem);
/* S1G */
void ieee80211_s1g_sta_rate_init(struct sta_info *sta);
/* Spectrum management */ /* Spectrum management */
void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata, void ieee80211_process_measurement_req(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt, struct ieee80211_mgmt *mgmt,
......
...@@ -5190,8 +5190,10 @@ static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata, ...@@ -5190,8 +5190,10 @@ static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata,
int shift = ieee80211_vif_get_shift(&sdata->vif); int shift = ieee80211_vif_get_shift(&sdata->vif);
/* TODO: S1G Basic Rate Set is expressed elsewhere */ /* TODO: S1G Basic Rate Set is expressed elsewhere */
if (cbss->channel->band == NL80211_BAND_S1GHZ) if (cbss->channel->band == NL80211_BAND_S1GHZ) {
ieee80211_s1g_sta_rate_init(new_sta);
goto skip_rates; goto skip_rates;
}
ieee80211_get_rates(sband, bss->supp_rates, ieee80211_get_rates(sband, bss->supp_rates,
bss->supp_rates_len, bss->supp_rates_len,
......
...@@ -53,6 +53,7 @@ void rate_control_rate_init(struct sta_info *sta) ...@@ -53,6 +53,7 @@ void rate_control_rate_init(struct sta_info *sta)
/* TODO: check for minstrel_s1g ? */ /* TODO: check for minstrel_s1g ? */
if (sband->band == NL80211_BAND_S1GHZ) { if (sband->band == NL80211_BAND_S1GHZ) {
ieee80211_s1g_sta_rate_init(sta);
rcu_read_unlock(); rcu_read_unlock();
return; return;
} }
......
// SPDX-License-Identifier: GPL-2.0
/*
* S1G handling
* Copyright(c) 2020 Adapt-IP
*/
#include <linux/ieee80211.h>
#include <net/mac80211.h>
#include "ieee80211_i.h"
void ieee80211_s1g_sta_rate_init(struct sta_info *sta)
{
/* avoid indicating legacy bitrates for S1G STAs */
sta->tx_stats.last_rate.flags |= IEEE80211_TX_RC_S1G_MCS;
sta->rx_stats.last_rate =
STA_STATS_FIELD(TYPE, STA_STATS_RATE_TYPE_S1G);
}
...@@ -2122,6 +2122,10 @@ static void sta_stats_decode_rate(struct ieee80211_local *local, u32 rate, ...@@ -2122,6 +2122,10 @@ static void sta_stats_decode_rate(struct ieee80211_local *local, u32 rate,
int rate_idx = STA_STATS_GET(LEGACY_IDX, rate); int rate_idx = STA_STATS_GET(LEGACY_IDX, rate);
sband = local->hw.wiphy->bands[band]; sband = local->hw.wiphy->bands[band];
if (WARN_ON_ONCE(!sband->bitrates))
break;
brate = sband->bitrates[rate_idx].bitrate; brate = sband->bitrates[rate_idx].bitrate;
if (rinfo->bw == RATE_INFO_BW_5) if (rinfo->bw == RATE_INFO_BW_5)
shift = 2; shift = 2;
......
...@@ -823,6 +823,7 @@ enum sta_stats_type { ...@@ -823,6 +823,7 @@ enum sta_stats_type {
STA_STATS_RATE_TYPE_HT, STA_STATS_RATE_TYPE_HT,
STA_STATS_RATE_TYPE_VHT, STA_STATS_RATE_TYPE_VHT,
STA_STATS_RATE_TYPE_HE, STA_STATS_RATE_TYPE_HE,
STA_STATS_RATE_TYPE_S1G,
}; };
#define STA_STATS_FIELD_HT_MCS GENMASK( 7, 0) #define STA_STATS_FIELD_HT_MCS GENMASK( 7, 0)
......
...@@ -207,7 +207,6 @@ bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef) ...@@ -207,7 +207,6 @@ bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef)
control_freq = chandef->chan->center_freq; control_freq = chandef->chan->center_freq;
switch (chandef->width) { switch (chandef->width) {
case NL80211_CHAN_WIDTH_1:
case NL80211_CHAN_WIDTH_5: case NL80211_CHAN_WIDTH_5:
case NL80211_CHAN_WIDTH_10: case NL80211_CHAN_WIDTH_10:
case NL80211_CHAN_WIDTH_20: case NL80211_CHAN_WIDTH_20:
...@@ -218,10 +217,14 @@ bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef) ...@@ -218,10 +217,14 @@ bool cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef)
if (chandef->center_freq2) if (chandef->center_freq2)
return false; return false;
break; break;
case NL80211_CHAN_WIDTH_1:
case NL80211_CHAN_WIDTH_2: case NL80211_CHAN_WIDTH_2:
case NL80211_CHAN_WIDTH_4: case NL80211_CHAN_WIDTH_4:
case NL80211_CHAN_WIDTH_8: case NL80211_CHAN_WIDTH_8:
case NL80211_CHAN_WIDTH_16: case NL80211_CHAN_WIDTH_16:
if (chandef->chan->band != NL80211_BAND_S1GHZ)
return false;
control_freq = ieee80211_channel_to_khz(chandef->chan); control_freq = ieee80211_channel_to_khz(chandef->chan);
oper_freq = ieee80211_chandef_to_khz(chandef); oper_freq = ieee80211_chandef_to_khz(chandef);
control_width = nl80211_chan_width_to_mhz( control_width = nl80211_chan_width_to_mhz(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment