Procházet zdrojové kódy

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
Krishna Rao před 8 roky
rodič
revize
5ded5dd1bd
2 změnil soubory, kde provedl 13 přidání a 3 odebrání
  1. 1 1
      wmi/inc/wmi_unified_param.h
  2. 12 2
      wmi/src/wmi_unified_tlv.c

+ 1 - 1
wmi/inc/wmi_unified_param.h

@@ -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;

+ 12 - 2
wmi/src/wmi_unified_tlv.c

@@ -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);