mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
cfg80211: bitrate calculation for 60g
60g band uses different from .11n MCS scheme, so bitrate should be calculated differently Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
8eb41c8dfb
commit
95ddc1fc45
@ -580,11 +580,13 @@ enum station_info_flags {
|
||||
* @RATE_INFO_FLAGS_MCS: @tx_bitrate_mcs filled
|
||||
* @RATE_INFO_FLAGS_40_MHZ_WIDTH: 40 Mhz width transmission
|
||||
* @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval
|
||||
* @RATE_INFO_FLAGS_60G: 60gHz MCS
|
||||
*/
|
||||
enum rate_info_flags {
|
||||
RATE_INFO_FLAGS_MCS = 1<<0,
|
||||
RATE_INFO_FLAGS_40_MHZ_WIDTH = 1<<1,
|
||||
RATE_INFO_FLAGS_SHORT_GI = 1<<2,
|
||||
RATE_INFO_FLAGS_60G = 1<<3,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -900,12 +900,61 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
|
||||
return err;
|
||||
}
|
||||
|
||||
static u32 cfg80211_calculate_bitrate_60g(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] = 15400,
|
||||
[7] = 19250,
|
||||
[8] = 23100,
|
||||
[9] = 25025,
|
||||
[10] = 30800,
|
||||
[11] = 38500,
|
||||
[12] = 46200,
|
||||
/* OFDM PHY */
|
||||
[13] = 6930,
|
||||
[14] = 8662, /* 866.25 mbps */
|
||||
[15] = 13860,
|
||||
[16] = 17325,
|
||||
[17] = 20790,
|
||||
[18] = 27720,
|
||||
[19] = 34650,
|
||||
[20] = 41580,
|
||||
[21] = 45045,
|
||||
[22] = 51975,
|
||||
[23] = 62370,
|
||||
[24] = 67568, /* 6756.75 mbps */
|
||||
/* LP-SC PHY */
|
||||
[25] = 6260,
|
||||
[26] = 8340,
|
||||
[27] = 11120,
|
||||
[28] = 12510,
|
||||
[29] = 16680,
|
||||
[30] = 22240,
|
||||
[31] = 25030,
|
||||
};
|
||||
|
||||
if (WARN_ON_ONCE(rate->mcs >= ARRAY_SIZE(__mcs2bitrate)))
|
||||
return 0;
|
||||
|
||||
return __mcs2bitrate[rate->mcs];
|
||||
}
|
||||
|
||||
u32 cfg80211_calculate_bitrate(struct rate_info *rate)
|
||||
{
|
||||
int modulation, streams, bitrate;
|
||||
|
||||
if (!(rate->flags & RATE_INFO_FLAGS_MCS))
|
||||
return rate->legacy;
|
||||
if (rate->flags & RATE_INFO_FLAGS_60G)
|
||||
return cfg80211_calculate_bitrate_60g(rate);
|
||||
|
||||
/* the formula below does only work for MCS values smaller than 32 */
|
||||
if (WARN_ON_ONCE(rate->mcs >= 32))
|
||||
|
Loading…
Reference in New Issue
Block a user