mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-13 16:16:15 -04:00
qcacld-3.0: Fix calculation of WLAN_PHY_MODE
Fix the calculation of WLAN_PHY_MODE from dot11mode and channel width. Take care of all possible values of dot11mode and channel width. Remove the usage of vht_capable parameter. Also remove the un-necessary usage of CONFIG_160MHZ_SUPPORT. Change-Id: Ibc263aed99b0b948f60ac6f1bfe72d16fda5c20e CRs-Fixed: 1009720
This commit is contained in:
parent
df35f3ef5e
commit
046eb8a260
7 changed files with 131 additions and 77 deletions
|
|
@ -52,9 +52,15 @@
|
|||
|
||||
#define CDS_MIN_24GHZ_CHANNEL_NUMBER chan_mapping[MIN_24GHZ_CHANNEL].chan_num
|
||||
#define CDS_MAX_24GHZ_CHANNEL_NUMBER chan_mapping[MAX_24GHZ_CHANNEL].chan_num
|
||||
#define CDS_MIN_59GHZ_CHANNEL_NUMBER chan_mapping[MIN_59GHZ_CHANNEL].chan_num
|
||||
#define CDS_MAX_59GHZ_CHANNEL_NUMBER chan_mapping[MAX_59GHZ_CHANNEL].chan_num
|
||||
#define CDS_MIN_5GHZ_CHANNEL_NUMBER chan_mapping[MIN_5GHZ_CHANNEL].chan_num
|
||||
#define CDS_MAX_5GHZ_CHANNEL_NUMBER chan_mapping[MAX_5GHZ_CHANNEL].chan_num
|
||||
|
||||
#define CDS_IS_CHANNEL_DSRC(chan_num) \
|
||||
((chan_num >= CDS_MIN_59GHZ_CHANNEL_NUMBER) && \
|
||||
(chan_num <= CDS_MAX_59GHZ_CHANNEL_NUMBER))
|
||||
|
||||
#define CDS_IS_CHANNEL_5GHZ(chan_num) \
|
||||
((chan_num >= CDS_MIN_5GHZ_CHANNEL_NUMBER) && \
|
||||
(chan_num <= CDS_MAX_5GHZ_CHANNEL_NUMBER))
|
||||
|
|
@ -367,5 +373,6 @@ void cds_set_channel_params(uint16_t oper_ch, uint16_t ht_offset_2g,
|
|||
|
||||
QDF_STATUS cds_set_reg_domain(void *client_ctxt, v_REGDOMAIN_t reg_domain);
|
||||
QDF_STATUS cds_put_default_country(uint8_t *def_country);
|
||||
uint16_t cds_bw_value(enum phy_ch_width bw);
|
||||
|
||||
#endif /* __CDS_REG_SERVICE_H */
|
||||
|
|
|
|||
|
|
@ -665,6 +665,38 @@ QDF_STATUS cds_put_default_country(uint8_t *def_country)
|
|||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* cds_bw_value() - give bandwidth value
|
||||
* bw: bandwidth enum
|
||||
*
|
||||
* Return: uint16_t
|
||||
*/
|
||||
uint16_t cds_bw_value(enum phy_ch_width bw)
|
||||
{
|
||||
switch (bw) {
|
||||
case CH_WIDTH_20MHZ:
|
||||
return 20;
|
||||
case CH_WIDTH_40MHZ:
|
||||
return 40;
|
||||
case CH_WIDTH_80MHZ:
|
||||
return 80;
|
||||
case CH_WIDTH_160MHZ:
|
||||
return 160;
|
||||
case CH_WIDTH_80P80MHZ:
|
||||
return 160;
|
||||
case CH_WIDTH_INVALID:
|
||||
return 0;
|
||||
case CH_WIDTH_5MHZ:
|
||||
return 10;
|
||||
case CH_WIDTH_10MHZ:
|
||||
return 5;
|
||||
case CH_WIDTH_MAX:
|
||||
return 160;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* cds_set_ch_params() - set channel parameters
|
||||
* @ch: channel
|
||||
|
|
|
|||
|
|
@ -893,8 +893,8 @@ QDF_STATUS wma_process_lphb_conf_req(tp_wma_handle wma_handle,
|
|||
QDF_STATUS wma_process_dhcp_ind(tp_wma_handle wma_handle,
|
||||
tAniDHCPInd *ta_dhcp_ind);
|
||||
|
||||
WLAN_PHY_MODE wma_chan_to_mode(u8 chan, enum phy_ch_width chan_width,
|
||||
u8 vht_capable, u8 dot11_mode);
|
||||
WLAN_PHY_MODE wma_chan_phy_mode(u8 chan, enum phy_ch_width chan_width,
|
||||
u8 dot11_mode);
|
||||
|
||||
QDF_STATUS wma_get_link_speed(WMA_HANDLE handle, tSirLinkSpeedInfo *pLinkSpeed);
|
||||
|
||||
|
|
|
|||
|
|
@ -1741,9 +1741,8 @@ QDF_STATUS wma_vdev_start(tp_wma_handle wma,
|
|||
|
||||
/* Fill channel info */
|
||||
params.chan_freq = cds_chan_to_freq(req->chan);
|
||||
params.chan_mode = wma_chan_to_mode(req->chan, req->chan_width,
|
||||
req->vht_capable, req->dot11_mode);
|
||||
/* save channel mode */
|
||||
params.chan_mode = wma_chan_phy_mode(req->chan, req->chan_width,
|
||||
req->dot11_mode);
|
||||
intr[params.vdev_id].chanmode = params.chan_mode;
|
||||
intr[params.vdev_id].ht_capable = req->ht_capable;
|
||||
intr[params.vdev_id].vht_capable = req->vht_capable;
|
||||
|
|
|
|||
|
|
@ -906,93 +906,112 @@ QDF_STATUS wma_process_dhcp_ind(tp_wma_handle wma_handle,
|
|||
}
|
||||
|
||||
/**
|
||||
* wma_chan_to_mode() - convert channel to phy mode
|
||||
* wma_chan_phy__mode() - get WLAN_PHY_MODE for channel
|
||||
* @chan: channel number
|
||||
* @chan_width: channel width
|
||||
* @vht_capable: vht capable
|
||||
* @dot11_mode: 802.11 mode
|
||||
* @chan_width: maximum channel width possible
|
||||
* @dot11_mode: maximum phy_mode possible
|
||||
*
|
||||
* Return: return phy mode
|
||||
* Return: return WLAN_PHY_MODE
|
||||
*/
|
||||
WLAN_PHY_MODE wma_chan_to_mode(u8 chan, enum phy_ch_width chan_width,
|
||||
u8 vht_capable, u8 dot11_mode)
|
||||
WLAN_PHY_MODE wma_chan_phy_mode(u8 chan, enum phy_ch_width chan_width,
|
||||
u8 dot11_mode)
|
||||
{
|
||||
WLAN_PHY_MODE phymode = MODE_UNKNOWN;
|
||||
uint16_t bw_val = cds_bw_value(chan_width);
|
||||
|
||||
/* 2.4 GHz band */
|
||||
if ((chan >= WMA_11G_CHANNEL_BEGIN) && (chan <= WMA_11G_CHANNEL_END)) {
|
||||
switch (chan_width) {
|
||||
case CH_WIDTH_20MHZ:
|
||||
/* In case of no channel bonding, use dot11_mode
|
||||
* to set phy mode
|
||||
*/
|
||||
if (CDS_IS_CHANNEL_24GHZ(chan)) {
|
||||
if (((CH_WIDTH_5MHZ == chan_width) ||
|
||||
(CH_WIDTH_10MHZ == chan_width)) &&
|
||||
((WNI_CFG_DOT11_MODE_11B == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_11G == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_11N == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_ALL == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_11AC == dot11_mode)))
|
||||
phymode = MODE_11G;
|
||||
else {
|
||||
switch (dot11_mode) {
|
||||
case WNI_CFG_DOT11_MODE_11A:
|
||||
phymode = MODE_11A;
|
||||
break;
|
||||
case WNI_CFG_DOT11_MODE_11B:
|
||||
phymode = MODE_11B;
|
||||
if ((20 == bw_val) ||
|
||||
(40 == bw_val))
|
||||
phymode = MODE_11B;
|
||||
break;
|
||||
case WNI_CFG_DOT11_MODE_11G:
|
||||
phymode = MODE_11G;
|
||||
if ((20 == bw_val) ||
|
||||
(40 == bw_val))
|
||||
phymode = MODE_11G;
|
||||
break;
|
||||
case WNI_CFG_DOT11_MODE_11G_ONLY:
|
||||
phymode = MODE_11GONLY;
|
||||
if ((20 == bw_val) ||
|
||||
(40 == bw_val))
|
||||
phymode = MODE_11GONLY;
|
||||
break;
|
||||
case WNI_CFG_DOT11_MODE_11N:
|
||||
case WNI_CFG_DOT11_MODE_11N_ONLY:
|
||||
if (20 == bw_val)
|
||||
phymode = MODE_11NG_HT20;
|
||||
else if (40 == bw_val)
|
||||
phymode = MODE_11NG_HT40;
|
||||
break;
|
||||
case WNI_CFG_DOT11_MODE_ALL:
|
||||
case WNI_CFG_DOT11_MODE_11AC:
|
||||
case WNI_CFG_DOT11_MODE_11AC_ONLY:
|
||||
if (20 == bw_val)
|
||||
phymode = MODE_11AC_VHT20_2G;
|
||||
else if (40 == bw_val)
|
||||
phymode = MODE_11AC_VHT40_2G;
|
||||
break;
|
||||
default:
|
||||
/* Configure MODE_11NG_HT20 for
|
||||
* self vdev(for vht too)
|
||||
*/
|
||||
phymode = MODE_11NG_HT20;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CH_WIDTH_40MHZ:
|
||||
phymode = vht_capable ? MODE_11AC_VHT40 :
|
||||
MODE_11NG_HT40;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* 5 GHz band */
|
||||
if ((chan >= WMA_11A_CHANNEL_BEGIN) && (chan <= WMA_11A_CHANNEL_END)) {
|
||||
switch (chan_width) {
|
||||
case CH_WIDTH_20MHZ:
|
||||
phymode = vht_capable ? MODE_11AC_VHT20 :
|
||||
MODE_11NA_HT20;
|
||||
break;
|
||||
case CH_WIDTH_40MHZ:
|
||||
phymode = vht_capable ? MODE_11AC_VHT40 :
|
||||
MODE_11NA_HT40;
|
||||
break;
|
||||
case CH_WIDTH_80MHZ:
|
||||
phymode = MODE_11AC_VHT80;
|
||||
break;
|
||||
#if CONFIG_160MHZ_SUPPORT != 0
|
||||
case CH_WIDTH_160MHZ:
|
||||
phymode = MODE_11AC_VHT160;
|
||||
break;
|
||||
case CH_WIDTH_80P80MHZ:
|
||||
phymode = MODE_11AC_VHT80_80;
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* 5.9 GHz Band */
|
||||
if ((chan >= WMA_11P_CHANNEL_BEGIN) && (chan <= WMA_11P_CHANNEL_END))
|
||||
/* Only Legacy Modulation Schemes are supported */
|
||||
} else if (CDS_IS_CHANNEL_DSRC(chan))
|
||||
phymode = MODE_11A;
|
||||
else {
|
||||
if (((CH_WIDTH_5MHZ == chan_width) ||
|
||||
(CH_WIDTH_10MHZ == chan_width)) &&
|
||||
((WNI_CFG_DOT11_MODE_11A == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_11N == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_ALL == dot11_mode) ||
|
||||
(WNI_CFG_DOT11_MODE_11AC == dot11_mode)))
|
||||
phymode = MODE_11A;
|
||||
else {
|
||||
switch (dot11_mode) {
|
||||
case WNI_CFG_DOT11_MODE_11A:
|
||||
if (0 < bw_val)
|
||||
phymode = MODE_11A;
|
||||
break;
|
||||
case WNI_CFG_DOT11_MODE_11N:
|
||||
case WNI_CFG_DOT11_MODE_11N_ONLY:
|
||||
if (20 == bw_val)
|
||||
phymode = MODE_11NA_HT20;
|
||||
else if (40 <= bw_val)
|
||||
phymode = MODE_11NA_HT40;
|
||||
break;
|
||||
case WNI_CFG_DOT11_MODE_ALL:
|
||||
case WNI_CFG_DOT11_MODE_11AC:
|
||||
case WNI_CFG_DOT11_MODE_11AC_ONLY:
|
||||
if (20 == bw_val)
|
||||
phymode = MODE_11AC_VHT20;
|
||||
else if (40 == bw_val)
|
||||
phymode = MODE_11AC_VHT40;
|
||||
else if (80 == bw_val)
|
||||
phymode = MODE_11AC_VHT80;
|
||||
else if (CH_WIDTH_160MHZ == chan_width)
|
||||
phymode = MODE_11AC_VHT160;
|
||||
else if (CH_WIDTH_80P80MHZ == chan_width)
|
||||
phymode = MODE_11AC_VHT80_80;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WMA_LOGD("%s: phymode %d channel %d ch_width %d vht_capable %d "
|
||||
WMA_LOGD("%s: phymode %d channel %d ch_width %d"
|
||||
"dot11_mode %d", __func__, phymode, chan,
|
||||
chan_width, vht_capable, dot11_mode);
|
||||
chan_width, dot11_mode);
|
||||
|
||||
QDF_ASSERT(MODE_UNKNOWN != phymode);
|
||||
return phymode;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2493,8 +2493,8 @@ QDF_STATUS wma_switch_channel(tp_wma_handle wma, struct wma_vdev_start_req *req)
|
|||
|
||||
/* Fill channel info */
|
||||
cmd->mhz = cds_chan_to_freq(req->chan);
|
||||
chanmode = wma_chan_to_mode(req->chan, req->chan_width,
|
||||
req->vht_capable, req->dot11_mode);
|
||||
chanmode = wma_chan_phy_mode(req->chan, req->chan_width,
|
||||
req->dot11_mode);
|
||||
|
||||
intr[req->vdev_id].chanmode = chanmode; /* save channel mode */
|
||||
intr[req->vdev_id].ht_capable = req->ht_capable;
|
||||
|
|
|
|||
|
|
@ -1721,14 +1721,11 @@ WLAN_PHY_MODE wma_peer_phymode(tSirNwType nw_type, uint8_t sta_type,
|
|||
break;
|
||||
}
|
||||
if (is_vht) {
|
||||
#if CONFIG_160MHZ_SUPPORT != 0
|
||||
if (ch_width == CH_WIDTH_160MHZ)
|
||||
phymode = MODE_11AC_VHT160;
|
||||
else if (ch_width == CH_WIDTH_80P80MHZ)
|
||||
phymode = MODE_11AC_VHT80_80;
|
||||
else
|
||||
#endif
|
||||
if (ch_width == CH_WIDTH_80MHZ)
|
||||
else if (ch_width == CH_WIDTH_80MHZ)
|
||||
phymode = MODE_11AC_VHT80;
|
||||
else
|
||||
phymode = (ch_width) ?
|
||||
|
|
|
|||
Loading…
Reference in a new issue