qcacld-3.0: SAP DFS-3 Feature support
Changes needed in protocol stack related to DFS-3 feature. Change-Id: Iec8e4e336039f5b643b9d10ee6737203222683cf CRs-Fixed: 964262
Este cometimento está contido em:

cometido por
Akash Patel

ascendente
09b5e5528b
cometimento
2f58cf8ec8
@@ -71,6 +71,10 @@
|
||||
#define IEEE80211_CHAN_VHT40MINUS 0x00400000
|
||||
/* VHT 80 channel */
|
||||
#define IEEE80211_CHAN_VHT80 0x00800000
|
||||
/* VHT 80+80 Channel */
|
||||
#define IEEE80211_CHAN_VHT80P80 0x01000000
|
||||
/* VHT 160 Channel */
|
||||
#define IEEE80211_CHAN_VHT160 0x02000000
|
||||
|
||||
/* token for ``any channel'' */
|
||||
#define DFS_IEEE80211_CHAN_ANY (-1)
|
||||
@@ -116,9 +120,11 @@
|
||||
*/
|
||||
struct dfs_ieee80211_channel {
|
||||
uint32_t ic_freq;
|
||||
uint32_t ic_freq_ext;
|
||||
uint32_t ic_flags;
|
||||
uint8_t ic_flagext;
|
||||
uint8_t ic_ieee;
|
||||
uint8_t ic_ieee_ext;
|
||||
int8_t ic_maxregpower;
|
||||
int8_t ic_maxpower;
|
||||
int8_t ic_minpower;
|
||||
@@ -127,6 +133,7 @@ struct dfs_ieee80211_channel {
|
||||
uint32_t ic_vhtop_ch_freq_seg1;
|
||||
uint32_t ic_vhtop_ch_freq_seg2;
|
||||
int ic_pri_freq_center_freq_mhz_separation;
|
||||
bool ic_80p80_both_dfs;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -7388,6 +7388,8 @@ struct dfs_ieee80211_channel *wma_dfs_configure_channel(
|
||||
struct wma_vdev_start_req
|
||||
*req)
|
||||
{
|
||||
uint8_t ext_channel;
|
||||
|
||||
if (dfs_ic == NULL) {
|
||||
WMA_LOGE("%s: DFS ic is Invalid", __func__);
|
||||
return NULL;
|
||||
@@ -7420,23 +7422,57 @@ struct dfs_ieee80211_channel *wma_dfs_configure_channel(
|
||||
(dfs_ic->ic_curchan->ic_ieee <= WMA_11A_CHANNEL_END)) {
|
||||
dfs_ic->ic_curchan->ic_flags |= IEEE80211_CHAN_5GHZ;
|
||||
}
|
||||
if (CH_WIDTH_80MHZ == req->chan_width) {
|
||||
dfs_ic->ic_curchan->ic_flags |= IEEE80211_CHAN_VHT80;
|
||||
}
|
||||
if (CH_WIDTH_40MHZ == req->chan_width) {
|
||||
|
||||
switch (req->chan_width) {
|
||||
case CH_WIDTH_20MHZ:
|
||||
dfs_ic->ic_curchan->ic_flags |=
|
||||
(req->vht_capable ? IEEE80211_CHAN_VHT20 :
|
||||
IEEE80211_CHAN_HT20);
|
||||
break;
|
||||
case CH_WIDTH_40MHZ:
|
||||
if (req->chan < req->ch_center_freq_seg0)
|
||||
dfs_ic->ic_curchan->ic_flags |= (req->vht_capable ?
|
||||
dfs_ic->ic_curchan->ic_flags |=
|
||||
(req->vht_capable ?
|
||||
IEEE80211_CHAN_VHT40PLUS :
|
||||
IEEE80211_CHAN_HT40PLUS);
|
||||
else
|
||||
dfs_ic->ic_curchan->ic_flags |= (req->vht_capable ?
|
||||
dfs_ic->ic_curchan->ic_flags |=
|
||||
(req->vht_capable ?
|
||||
IEEE80211_CHAN_VHT40MINUS :
|
||||
IEEE80211_CHAN_HT40MINUS);
|
||||
} else if (CH_WIDTH_20MHZ == req->chan_width) {
|
||||
break;
|
||||
case CH_WIDTH_80MHZ:
|
||||
dfs_ic->ic_curchan->ic_flags |= IEEE80211_CHAN_VHT80;
|
||||
break;
|
||||
case CH_WIDTH_80P80MHZ:
|
||||
ext_channel = cds_freq_to_chan(chan->band_center_freq2);
|
||||
dfs_ic->ic_curchan->ic_flags |=
|
||||
(req->vht_capable ? IEEE80211_CHAN_VHT20 :
|
||||
IEEE80211_CHAN_HT20);
|
||||
IEEE80211_CHAN_VHT80P80;
|
||||
dfs_ic->ic_curchan->ic_freq_ext =
|
||||
chan->band_center_freq2;
|
||||
dfs_ic->ic_curchan->ic_ieee_ext = ext_channel;
|
||||
|
||||
/* verify both the 80MHz are DFS bands or not */
|
||||
if ((CHANNEL_STATE_DFS ==
|
||||
cds_get_bonded_channel_state(req->chan ,
|
||||
CH_WIDTH_80MHZ)) &&
|
||||
(CHANNEL_STATE_DFS ==
|
||||
cds_get_bonded_channel_state(
|
||||
ext_channel - 6 ,
|
||||
CH_WIDTH_80MHZ)))
|
||||
dfs_ic->ic_curchan->ic_80p80_both_dfs = true;
|
||||
break;
|
||||
case CH_WIDTH_160MHZ:
|
||||
dfs_ic->ic_curchan->ic_flags |=
|
||||
IEEE80211_CHAN_VHT160;
|
||||
break;
|
||||
default:
|
||||
WMA_LOGE(
|
||||
"%s: Recieved a wrong channel width %d",
|
||||
__func__, req->chan_width);
|
||||
break;
|
||||
}
|
||||
|
||||
dfs_ic->ic_curchan->ic_flagext |= IEEE80211_CHAN_DFS;
|
||||
|
||||
if (req->oper_mode == BSS_OPERATIONAL_MODE_AP) {
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador