Explorar o código

qcacmn: Add 6GHz support for chan/freq/band usage in mesh mode

Currently mesh mode uses channel numbering which is derived
from APIs that don't support 6GHz channels numbering due to the
overloading of 6GHz channels with 2.4GHz and 5GHz.

Add support to obtain the correct channel number (and auxiliary
information like band and frequency) through the new APIs that
support 6GHz.

Change-Id: Ib0b39ebae2a22bd6b2b5d17b9058c3c2100e0d59
CRs-Fixed: 2605229
Aditya Sathish %!s(int64=5) %!d(string=hai) anos
pai
achega
041409f98f
Modificáronse 5 ficheiros con 37 adicións e 7 borrados
  1. 4 1
      dp/inc/cdp_txrx_ops.h
  2. 11 3
      dp/wifi3.0/dp_htt.c
  3. 15 1
      dp/wifi3.0/dp_rx.c
  4. 2 1
      dp/wifi3.0/dp_tx.c
  5. 5 1
      dp/wifi3.0/dp_types.h

+ 4 - 1
dp/inc/cdp_txrx_ops.h

@@ -1052,7 +1052,10 @@ struct ol_if_ops {
 				   uint16_t hdr_space);
 
 	uint8_t (*freq_to_channel)(struct cdp_ctrl_objmgr_psoc *psoc,
-				   uint8_t vdev_id, uint16_t freq);
+				   uint8_t pdev_id, uint16_t freq);
+
+	uint8_t (*freq_to_band)(struct cdp_ctrl_objmgr_psoc *psoc,
+				uint8_t pdev_id, uint16_t freq);
 
 #ifdef ATH_SUPPORT_NAC_RSSI
 	int (*config_fw_for_nac_rssi)(struct cdp_ctrl_objmgr_psoc *psoc,

+ 11 - 3
dp/wifi3.0/dp_htt.c

@@ -2136,10 +2136,18 @@ static void dp_process_ppdu_stats_common_tlv(struct dp_pdev *pdev,
 	if (freq != ppdu_desc->channel) {
 		soc = pdev->soc;
 		ppdu_desc->channel = freq;
+		pdev->operating_channel.freq = freq;
 		if (soc && soc->cdp_soc.ol_ops->freq_to_channel)
-			pdev->operating_channel =
-		soc->cdp_soc.ol_ops->freq_to_channel(soc->ctrl_psoc,
-						     pdev->pdev_id, freq);
+			pdev->operating_channel.num =
+			    soc->cdp_soc.ol_ops->freq_to_channel(soc->ctrl_psoc,
+								 pdev->pdev_id,
+								 freq);
+
+		if (soc && soc->cdp_soc.ol_ops->freq_to_band)
+			pdev->operating_channel.band =
+			       soc->cdp_soc.ol_ops->freq_to_band(soc->ctrl_psoc,
+								 pdev->pdev_id,
+								 freq);
 	}
 
 	ppdu_desc->phy_mode = HTT_PPDU_STATS_COMMON_TLV_PHY_MODE_GET(*tag_buf);

+ 15 - 1
dp/wifi3.0/dp_rx.c

@@ -546,6 +546,9 @@ void dp_rx_fill_mesh_stats(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
 	uint32_t nss;
 	uint32_t rate_mcs;
 	uint32_t bw;
+	uint8_t primary_chan_num;
+	uint32_t center_chan_freq;
+	struct dp_soc *soc;
 
 	/* fill recv mesh stats */
 	rx_info = qdf_mem_malloc(sizeof(struct mesh_recv_hdr_s));
@@ -577,7 +580,18 @@ void dp_rx_fill_mesh_stats(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
 	}
 
 	rx_info->rs_rssi = hal_rx_msdu_start_get_rssi(rx_tlv_hdr);
-	rx_info->rs_channel = hal_rx_msdu_start_get_freq(rx_tlv_hdr);
+
+	soc = vdev->pdev->soc;
+	primary_chan_num = hal_rx_msdu_start_get_freq(rx_tlv_hdr);
+	center_chan_freq = hal_rx_msdu_start_get_freq(rx_tlv_hdr) >> 16;
+
+	if (soc->cdp_soc.ol_ops && soc->cdp_soc.ol_ops->freq_to_band) {
+		rx_info->rs_band = soc->cdp_soc.ol_ops->freq_to_band(
+							soc->ctrl_psoc,
+							vdev->pdev->pdev_id,
+							center_chan_freq);
+	}
+	rx_info->rs_channel = primary_chan_num;
 	pkt_type = hal_rx_msdu_start_get_pkt_type(rx_tlv_hdr);
 	rate_mcs = hal_rx_msdu_start_rate_mcs_get(rx_tlv_hdr);
 	bw = hal_rx_msdu_start_bw_get(rx_tlv_hdr);

+ 2 - 1
dp/wifi3.0/dp_tx.c

@@ -2834,7 +2834,8 @@ void dp_tx_comp_fill_tx_completion_stats(struct dp_tx_desc_s *tx_desc,
 
 	mhdr = (struct meta_hdr_s *)qdf_nbuf_data(netbuf);
 	mhdr->rssi = ts->ack_frame_rssi;
-	mhdr->channel = tx_desc->pdev->operating_channel;
+	mhdr->band = tx_desc->pdev->operating_channel.band;
+	mhdr->channel = tx_desc->pdev->operating_channel.num;
 }
 
 #else

+ 5 - 1
dp/wifi3.0/dp_types.h

@@ -1581,7 +1581,11 @@ struct dp_pdev {
 	struct hal_rx_ppdu_info ppdu_info;
 
 	/* operating channel */
-	uint8_t operating_channel;
+	struct {
+		uint8_t num;
+		uint8_t band;
+		uint16_t freq;
+	} operating_channel;
 
 	qdf_nbuf_queue_t rx_status_q;
 	uint32_t mon_ppdu_status;