mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-25 22:23:14 -04:00
qcacmn: Populate DFS_CFREQ2 and BW-NSS mapping
Make the following TLV WMI layer changes related to 160/80+80 MHz
functionality:
- While forming the VDEV start/restart command, if the request from
the upper layer indicates the dfs_set_cfreq2 flag, then enable the
WMI_CHAN_FLAG_DFS_CFREQ2 channel flag. This is needed in order to
enable radar event reporting for the secondary 80 MHz segment.
Make this change only in the WIN specific implementation of
copy_channel_info(). If required for MCL, to be handled separately.
- Move the 'peer_bw_rxnss_override' member in
'struct peer_assoc_params' to outside the '#ifndef CONFIG_MCL'
section so that it is available both on MCL and WIN. Since
in MCL code peer_assoc_params is initialized to all zeros and
peer_bw_rxnss_override is not set anywhere later, this should
have no side effects.
- While forming the PEER assoc completion command, populate the
peer_bw_rxnss_override field as per the corresponding parameter
sent by the upper layer. This is required for providing override
values of Rx NSS for bandwidths higher than 80 MHz.
Testing:
- Tested on QCA8074 that the WMI_CHAN_FLAG_DFS_CFREQ2 channel flag
is being set in the VDEV start command if the secondary 80 MHz
lies on DFS channels (tried VHT160 and VHT80_80)
- Tested on QCA8074 AP and STA that the peer_bw_rxnss_override
value is being set in the PEER assoc completion command to
indicate Rx NSS value 2, when NSS value 4 is used for <=80 MHz
(tried VHT160 and VHT80_80). Also tested ping.
Change-Id: Ic45d80567eeed3707f76e513f772ce4da71d6ee0
CRs-Fixed: 2022037
This commit is contained in:
parent
33d0d707bd
commit
5ded5dd1bd
2 changed files with 13 additions and 3 deletions
|
|
@ -1080,9 +1080,9 @@ struct peer_assoc_params {
|
|||
uint32_t tx_max_rate;
|
||||
uint32_t tx_mcs_set;
|
||||
uint8_t vht_capable;
|
||||
uint32_t peer_bw_rxnss_override;
|
||||
#ifndef CONFIG_MCL
|
||||
uint32_t tx_max_mcs_nss;
|
||||
uint32_t peer_bw_rxnss_override;
|
||||
bool is_pmf_enabled;
|
||||
bool is_wme_set;
|
||||
bool qos_flag;
|
||||
|
|
|
|||
|
|
@ -286,6 +286,9 @@ static inline void copy_channel_info(
|
|||
cmd->disable_hw_ack = req->disable_hw_ack;
|
||||
}
|
||||
|
||||
if (req->channel.dfs_set_cfreq2)
|
||||
WMI_SET_CHANNEL_FLAG(chan, WMI_CHAN_FLAG_DFS_CFREQ2);
|
||||
|
||||
/* FIXME: Find out min, max and regulatory power levels */
|
||||
WMI_SET_CHANNEL_REG_POWER(chan, req->channel.maxregpower);
|
||||
WMI_SET_CHANNEL_MAX_TX_POWER(chan, req->channel.maxpower);
|
||||
|
|
@ -1917,6 +1920,11 @@ static QDF_STATUS send_peer_assoc_cmd_tlv(wmi_unified_t wmi_handle,
|
|||
WMITLV_GET_STRUCT_TLVLEN(wmi_vht_rate_set));
|
||||
|
||||
cmd->peer_nss = param->peer_nss;
|
||||
|
||||
/* Update bandwidth-NSS mapping */
|
||||
cmd->peer_bw_rxnss_override = 0;
|
||||
cmd->peer_bw_rxnss_override |= param->peer_bw_rxnss_override;
|
||||
|
||||
mcs = (wmi_vht_rate_set *) buf_ptr;
|
||||
if (param->vht_capable) {
|
||||
mcs->rx_max_rate = param->rx_max_rate;
|
||||
|
|
@ -1951,7 +1959,8 @@ static QDF_STATUS send_peer_assoc_cmd_tlv(wmi_unified_t wmi_handle,
|
|||
"nss %d phymode %d peer_mpdu_density %d "
|
||||
"cmd->peer_vht_caps %x "
|
||||
"HE cap_info %x ops %x "
|
||||
"HE phy %x %x %x ", __func__,
|
||||
"HE phy %x %x %x "
|
||||
"peer_bw_rxnss_override %x", __func__,
|
||||
cmd->vdev_id, cmd->peer_associd, cmd->peer_flags,
|
||||
cmd->peer_rate_caps, cmd->peer_caps,
|
||||
cmd->peer_listen_intval, cmd->peer_ht_caps,
|
||||
|
|
@ -1959,7 +1968,8 @@ static QDF_STATUS send_peer_assoc_cmd_tlv(wmi_unified_t wmi_handle,
|
|||
cmd->peer_mpdu_density,
|
||||
cmd->peer_vht_caps, cmd->peer_he_cap_info,
|
||||
cmd->peer_he_ops, cmd->peer_he_cap_phy[0],
|
||||
cmd->peer_he_cap_phy[1], cmd->peer_he_cap_phy[2]);
|
||||
cmd->peer_he_cap_phy[1], cmd->peer_he_cap_phy[2],
|
||||
cmd->peer_bw_rxnss_override);
|
||||
|
||||
ret = wmi_unified_cmd_send(wmi_handle, buf, len,
|
||||
WMI_PEER_ASSOC_CMDID);
|
||||
|
|
|
|||
Loading…
Reference in a new issue