mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
nl80211: Add support for EDMG channels
802.11ay specification defines Enhanced Directional Multi-Gigabit (EDMG) STA and AP which allow channel bonding of 2 channels and more. Introduce new NL attributes that are needed for enabling and configuring EDMG support. Two new attributes are used by kernel to publish driver's EDMG capabilities to the userspace: NL80211_BAND_ATTR_EDMG_CHANNELS - bitmap field that indicates the 2.16 GHz channel(s) that are supported by the driver. When this attribute is not set it means driver does not support EDMG. NL80211_BAND_ATTR_EDMG_BW_CONFIG - represent the channel bandwidth configurations supported by the driver. Additional two new attributes are used by the userspace for connect command and for AP configuration: NL80211_ATTR_WIPHY_EDMG_CHANNELS NL80211_ATTR_WIPHY_EDMG_BW_CONFIG New rate info flag - RATE_INFO_FLAGS_EDMG, can be reported from driver and used for bitrate calculation that will take into account EDMG according to the 802.11ay specification. Signed-off-by: Alexei Avshalom Lazar <ailizaro@codeaurora.org> Link: https://lore.kernel.org/r/1566138918-3823-2-git-send-email-ailizaro@codeaurora.org Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
5db16ba82f
commit
2a38075cd0
8 changed files with 349 additions and 9 deletions
|
@ -1043,7 +1043,7 @@ static u32 cfg80211_calculate_bitrate_ht(struct rate_info *rate)
|
|||
return (bitrate + 50000) / 100000;
|
||||
}
|
||||
|
||||
static u32 cfg80211_calculate_bitrate_60g(struct rate_info *rate)
|
||||
static u32 cfg80211_calculate_bitrate_dmg(struct rate_info *rate)
|
||||
{
|
||||
static const u32 __mcs2bitrate[] = {
|
||||
/* control PHY */
|
||||
|
@ -1090,6 +1090,40 @@ static u32 cfg80211_calculate_bitrate_60g(struct rate_info *rate)
|
|||
return __mcs2bitrate[rate->mcs];
|
||||
}
|
||||
|
||||
static u32 cfg80211_calculate_bitrate_edmg(struct rate_info *rate)
|
||||
{
|
||||
static const u32 __mcs2bitrate[] = {
|
||||
/* control PHY */
|
||||
[0] = 275,
|
||||
/* SC PHY */
|
||||
[1] = 3850,
|
||||
[2] = 7700,
|
||||
[3] = 9625,
|
||||
[4] = 11550,
|
||||
[5] = 12512, /* 1251.25 mbps */
|
||||
[6] = 13475,
|
||||
[7] = 15400,
|
||||
[8] = 19250,
|
||||
[9] = 23100,
|
||||
[10] = 25025,
|
||||
[11] = 26950,
|
||||
[12] = 30800,
|
||||
[13] = 38500,
|
||||
[14] = 46200,
|
||||
[15] = 50050,
|
||||
[16] = 53900,
|
||||
[17] = 57750,
|
||||
[18] = 69300,
|
||||
[19] = 75075,
|
||||
[20] = 80850,
|
||||
};
|
||||
|
||||
if (WARN_ON_ONCE(rate->mcs >= ARRAY_SIZE(__mcs2bitrate)))
|
||||
return 0;
|
||||
|
||||
return __mcs2bitrate[rate->mcs] * rate->n_bonded_ch;
|
||||
}
|
||||
|
||||
static u32 cfg80211_calculate_bitrate_vht(struct rate_info *rate)
|
||||
{
|
||||
static const u32 base[4][10] = {
|
||||
|
@ -1262,8 +1296,10 @@ u32 cfg80211_calculate_bitrate(struct rate_info *rate)
|
|||
{
|
||||
if (rate->flags & RATE_INFO_FLAGS_MCS)
|
||||
return cfg80211_calculate_bitrate_ht(rate);
|
||||
if (rate->flags & RATE_INFO_FLAGS_60G)
|
||||
return cfg80211_calculate_bitrate_60g(rate);
|
||||
if (rate->flags & RATE_INFO_FLAGS_DMG)
|
||||
return cfg80211_calculate_bitrate_dmg(rate);
|
||||
if (rate->flags & RATE_INFO_FLAGS_EDMG)
|
||||
return cfg80211_calculate_bitrate_edmg(rate);
|
||||
if (rate->flags & RATE_INFO_FLAGS_VHT_MCS)
|
||||
return cfg80211_calculate_bitrate_vht(rate);
|
||||
if (rate->flags & RATE_INFO_FLAGS_HE_MCS)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue