mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-12 17:34:31 +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
2 changed files with 51 additions and 0 deletions
|
@ -580,11 +580,13 @@ enum station_info_flags {
|
||||||
* @RATE_INFO_FLAGS_MCS: @tx_bitrate_mcs filled
|
* @RATE_INFO_FLAGS_MCS: @tx_bitrate_mcs filled
|
||||||
* @RATE_INFO_FLAGS_40_MHZ_WIDTH: 40 Mhz width transmission
|
* @RATE_INFO_FLAGS_40_MHZ_WIDTH: 40 Mhz width transmission
|
||||||
* @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval
|
* @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval
|
||||||
|
* @RATE_INFO_FLAGS_60G: 60gHz MCS
|
||||||
*/
|
*/
|
||||||
enum rate_info_flags {
|
enum rate_info_flags {
|
||||||
RATE_INFO_FLAGS_MCS = 1<<0,
|
RATE_INFO_FLAGS_MCS = 1<<0,
|
||||||
RATE_INFO_FLAGS_40_MHZ_WIDTH = 1<<1,
|
RATE_INFO_FLAGS_40_MHZ_WIDTH = 1<<1,
|
||||||
RATE_INFO_FLAGS_SHORT_GI = 1<<2,
|
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;
|
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)
|
u32 cfg80211_calculate_bitrate(struct rate_info *rate)
|
||||||
{
|
{
|
||||||
int modulation, streams, bitrate;
|
int modulation, streams, bitrate;
|
||||||
|
|
||||||
if (!(rate->flags & RATE_INFO_FLAGS_MCS))
|
if (!(rate->flags & RATE_INFO_FLAGS_MCS))
|
||||||
return rate->legacy;
|
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 */
|
/* the formula below does only work for MCS values smaller than 32 */
|
||||||
if (WARN_ON_ONCE(rate->mcs >= 32))
|
if (WARN_ON_ONCE(rate->mcs >= 32))
|
||||||
|
|
Loading…
Add table
Reference in a new issue