Browse Source

qcacmn: ATF multiradio support

Changes added to support multiradio feature.
Included pdev_id and/or vdev_id in required ATF specific WMI data
structures. All ATF commands will be sent with pdev_id and/or vdev_id.

Change-Id: I723a9a6e4a67a417d4aa2b392285dc4afa590a21
CRs-Fixed: 2052786
Subrat Mishra 8 years ago
parent
commit
94a9ec829c
3 changed files with 67 additions and 26 deletions
  1. 14 0
      wmi/inc/wmi_unified_param.h
  2. 28 20
      wmi/src/wmi_unified_non_tlv.c
  3. 25 6
      wmi/src/wmi_unified_tlv.c

+ 14 - 0
wmi/inc/wmi_unified_param.h

@@ -3801,10 +3801,14 @@ struct wmi_macaddr_t {
  * struct atf_peer_info - ATF peer info params
  * @peer_macaddr: peer mac addr
  * @percentage_peer: percentage of air time for this peer
+ * @vdev_id: Associated vdev id
+ * @pdev_id: Associated pdev id
  */
 typedef struct {
 	struct wmi_macaddr_t peer_macaddr;
 	uint32_t percentage_peer;
+	uint32_t vdev_id;
+	uint32_t pdev_id;
 } atf_peer_info;
 
 /**
@@ -3814,6 +3818,8 @@ typedef struct {
  * @max_airtime: Max airtime
  * @priority: Priority level
  * @reserved: Reserved array
+ * @vdev_id: Associated vdev id
+ * @pdev_id: Associated pdev id
  */
 typedef struct {
 	struct wmi_macaddr_t peer_macaddr;
@@ -3821,6 +3827,8 @@ typedef struct {
 	uint32_t     max_airtime;
 	uint32_t     priority;
 	uint32_t     reserved[4];
+	uint32_t     vdev_id;
+	uint32_t     pdev_id;
 } bwf_peer_info;
 
 /**
@@ -3838,11 +3846,15 @@ struct set_bwf_params {
  * @peer_macaddr: peer mac address
  * @group_index: group index
  * @atf_index_reserved: ATF index rsvd
+ * @vdev_id: Associated vdev id
+ * @pdev_id: Associated pdev id
  */
 typedef struct {
 	struct wmi_macaddr_t peer_macaddr;
 	uint32_t group_index;
 	uint32_t atf_index_reserved;
+	uint16_t vdev_id;
+	uint16_t pdev_id;
 } atf_peer_ext_info;
 
 /**
@@ -3869,10 +3881,12 @@ struct atf_peer_request_params {
  * struct atf_group_info - ATF group info params
  * @percentage_group: Percentage AT for group
  * @atf_group_units_reserved: ATF group information
+ * @pdev_id: Associated pdev id
  */
 typedef struct {
 	uint32_t percentage_group;
 	uint32_t atf_group_units_reserved;
+	uint32_t pdev_id;
 } atf_group_info;
 
 /**

+ 28 - 20
wmi/src/wmi_unified_non_tlv.c

@@ -3214,14 +3214,16 @@ send_set_bwf_cmd_non_tlv(wmi_unified_t wmi_handle,
 		return QDF_STATUS_E_FAILURE;
 	}
 	cmd = (wmi_peer_bwf_request *)wmi_buf_data(buf);
-	qdf_mem_copy((void *)&(cmd->num_peers),
-			(void *)&(param->num_peers),
-			sizeof(u_int32_t));
+	qdf_mem_copy(&(cmd->num_peers), &(param->num_peers), sizeof(uint32_t));
 	peer_info = (struct wmi_bwf_peer_info *)&(cmd->peer_info[0]);
 	for (i = 0; i < param->num_peers; i++) {
-		qdf_mem_copy((void *)&(peer_info[i]),
-				(void *)&(param->peer_info[i]),
-				sizeof(struct wmi_bwf_peer_info));
+		qdf_mem_copy(&(peer_info[i].peer_macaddr),
+			&(param->peer_info[i].peer_macaddr),
+			sizeof(wmi_mac_addr));
+		peer_info[i].bwf_guaranteed_bandwidth =
+			param->peer_info[i].throughput;
+		peer_info[i].bwf_max_airtime = param->peer_info[i].max_airtime;
+		peer_info[i].bwf_peer_priority = param->peer_info[i].priority;
 	}
 
 	retval = wmi_unified_cmd_send(wmi_handle, buf, len,
@@ -3258,13 +3260,13 @@ send_set_atf_cmd_non_tlv(wmi_unified_t wmi_handle,
 	}
 
 	cmd = (wmi_peer_atf_request *)wmi_buf_data(buf);
-	qdf_mem_copy((void *)&(cmd->num_peers), (void *)&(param->num_peers),
-		sizeof(uint32_t));
+	qdf_mem_copy(&(cmd->num_peers), &(param->num_peers), sizeof(uint32_t));
 	peer_info = (struct wmi_atf_peer_info *)&(cmd->peer_info[0]);
 	for (i = 0; i < param->num_peers; i++) {
-		qdf_mem_copy((void *)&(peer_info[i]),
-			(void *)&(param->peer_info[i]),
-			sizeof(struct wmi_atf_peer_info));
+		qdf_mem_copy(&(peer_info[i].peer_macaddr),
+			&(param->peer_info[i].peer_macaddr),
+			sizeof(wmi_mac_addr));
+		peer_info[i].atf_units = param->peer_info[i].percentage_peer;
 	}
 /*	qdf_print("wmi_unified_pdev_set_atf peer_num=%d\n", cmd->num_peers); */
 	retval = wmi_unified_cmd_send(wmi_handle, buf, len,
@@ -3297,17 +3299,21 @@ send_atf_peer_request_cmd_non_tlv(wmi_unified_t wmi_handle,
 	}
 
 	cmd = (wmi_peer_atf_ext_request *)wmi_buf_data(buf);
-	qdf_mem_copy((void *)&(cmd->num_peers), (void *)&(param->num_peers),
-		sizeof(uint32_t));
+	qdf_mem_copy(&(cmd->num_peers), &(param->num_peers), sizeof(uint32_t));
 	peer_ext_info =
 	    (struct wmi_atf_peer_ext_info *)&(cmd->peer_ext_info[0]);
 	for (i = 0; i < param->num_peers; i++) {
-		qdf_mem_copy((void *)&(peer_ext_info[i]),
-				(void *)&(param->peer_ext_info[i]),
-				sizeof(struct wmi_atf_peer_ext_info));
+		qdf_mem_copy(&(peer_ext_info[i].peer_macaddr),
+			&(param->peer_ext_info[i].peer_macaddr),
+			sizeof(wmi_mac_addr));
+		peer_ext_info[i].atf_groupid =
+			param->peer_ext_info[i].group_index;
+		peer_ext_info[i].atf_units_reserved =
+			param->peer_ext_info[i].atf_index_reserved;
 	}
 	retval = wmi_unified_cmd_send(wmi_handle, buf, len,
 		WMI_PEER_ATF_EXT_REQUEST_CMDID);
+
 	return retval;
 }
 
@@ -3336,16 +3342,18 @@ send_set_atf_grouping_cmd_non_tlv(wmi_unified_t wmi_handle,
 	}
 
 	cmd = (wmi_atf_ssid_grp_request *)wmi_buf_data(buf);
-	qdf_mem_copy((void *)&(cmd->num_groups), (void *)&(param->num_groups),
+	qdf_mem_copy(&(cmd->num_groups), &(param->num_groups),
 		sizeof(uint32_t));
 	group_info = (struct wmi_atf_group_info *)&(cmd->group_info[0]);
 	for (i = 0; i < param->num_groups; i++)	{
-		qdf_mem_copy((void *)&(group_info[i]),
-			(void *)&(param->group_info[i]),
-			sizeof(struct wmi_atf_group_info));
+		group_info[i].atf_group_units =
+			param->group_info[i].percentage_group;
+		group_info[i].atf_group_units_reserved =
+			param->group_info[i].atf_group_units_reserved;
 	}
 	retval = wmi_unified_cmd_send(wmi_handle, buf, len,
 		WMI_ATF_SSID_GROUPING_REQUEST_CMDID);
+
 	return retval;
 }
 

+ 25 - 6
wmi/src/wmi_unified_tlv.c

@@ -10464,7 +10464,14 @@ send_set_atf_cmd_tlv(wmi_unified_t wmi_handle,
 			    WMITLV_TAG_STRUC_wmi_atf_peer_info,
 			    WMITLV_GET_STRUCT_TLVLEN(
 				wmi_atf_peer_info));
+		qdf_mem_copy(&(peer_info->peer_macaddr),
+				&(param->peer_info[i].peer_macaddr),
+				sizeof(wmi_mac_addr));
 		peer_info->atf_units = param->peer_info[i].percentage_peer;
+		peer_info->vdev_id = param->peer_info[i].vdev_id;
+		peer_info->pdev_id =
+			wmi_handle->ops->convert_pdev_id_host_to_target(
+				param->peer_info[i].pdev_id);
 		/*
 		 * TLV definition for peer atf request fixed param combines
 		 * extension stats. Legacy FW for WIN (Non-TLV) has peer atf
@@ -10987,6 +10994,11 @@ send_set_bwf_cmd_tlv(wmi_unified_t wmi_handle,
 		qdf_mem_copy(&peer_info->peer_macaddr,
 			     &param->peer_info[i].peer_macaddr,
 			     sizeof(param->peer_info[i].peer_macaddr));
+		peer_info->vdev_id =
+				param->peer_info[i].vdev_id;
+		peer_info->pdev_id =
+			wmi_handle->ops->convert_pdev_id_host_to_target(
+				param->peer_info[i].pdev_id);
 		peer_info++;
 	}
 
@@ -11586,6 +11598,9 @@ void wmi_copy_resource_config(wmi_resource_config *resource_cfg,
 	resource_cfg->bpf_instruction_size = tgt_res_cfg->bpf_instruction_size;
 	resource_cfg->max_bssid_rx_filters = tgt_res_cfg->max_bssid_rx_filters;
 	resource_cfg->use_pdev_id = tgt_res_cfg->use_pdev_id;
+
+	WMI_RSRC_CFG_FLAG_ATF_CONFIG_ENABLE_SET(resource_cfg->flag1,
+						tgt_res_cfg->atf_config);
 }
 #ifdef CONFIG_MCL
 /**
@@ -18272,7 +18287,7 @@ static void populate_tlv_service(uint32_t *wmi_service)
 				WMI_SERVICE_UNAVAILABLE;
 	wmi_service[wmi_service_enhanced_proxy_sta] = WMI_SERVICE_UNAVAILABLE;
 	wmi_service[wmi_service_tt] = WMI_SERVICE_UNAVAILABLE;
-	wmi_service[wmi_service_atf] = WMI_SERVICE_UNAVAILABLE;
+	wmi_service[wmi_service_atf] = WMI_SERVICE_ATF;
 	wmi_service[wmi_service_peer_caching] = WMI_SERVICE_UNAVAILABLE;
 	wmi_service[wmi_service_coex_gpio] = WMI_SERVICE_UNAVAILABLE;
 	wmi_service[wmi_service_aux_spectral_intf] = WMI_SERVICE_UNAVAILABLE;
@@ -18494,8 +18509,10 @@ static void populate_pdev_param_tlv(uint32_t *pdev_param)
 	pdev_param[wmi_pdev_param_noise_threshold] = WMI_UNAVAILABLE_PARAM;
 	pdev_param[wmi_pdev_param_dpd_enable] = WMI_UNAVAILABLE_PARAM;
 	pdev_param[wmi_pdev_param_set_mcast_bcast_echo] = WMI_UNAVAILABLE_PARAM;
-	pdev_param[wmi_pdev_param_atf_strict_sch] = WMI_UNAVAILABLE_PARAM;
-	pdev_param[wmi_pdev_param_atf_sched_duration] = WMI_UNAVAILABLE_PARAM;
+	pdev_param[wmi_pdev_param_atf_strict_sch] =
+		WMI_PDEV_PARAM_ATF_STRICT_SCH;
+	pdev_param[wmi_pdev_param_atf_sched_duration] =
+		WMI_PDEV_PARAM_ATF_SCHED_DURATION;
 	pdev_param[wmi_pdev_param_ant_plzn] = WMI_UNAVAILABLE_PARAM;
 	pdev_param[wmi_pdev_param_sensitivity_level] = WMI_UNAVAILABLE_PARAM;
 	pdev_param[wmi_pdev_param_signed_txpower_2g] = WMI_UNAVAILABLE_PARAM;
@@ -18512,11 +18529,13 @@ static void populate_pdev_param_tlv(uint32_t *pdev_param)
 	pdev_param[wmi_pdev_param_txpower_decr_db] = WMI_UNAVAILABLE_PARAM;
 	pdev_param[wmi_pdev_param_rx_batchmode] = WMI_UNAVAILABLE_PARAM;
 	pdev_param[wmi_pdev_param_packet_aggr_delay] = WMI_UNAVAILABLE_PARAM;
-	pdev_param[wmi_pdev_param_atf_obss_noise_sch] = WMI_UNAVAILABLE_PARAM;
+	pdev_param[wmi_pdev_param_atf_obss_noise_sch] =
+		WMI_PDEV_PARAM_ATF_OBSS_NOISE_SCH;
 	pdev_param[wmi_pdev_param_atf_obss_noise_scaling_factor] =
-						WMI_UNAVAILABLE_PARAM;
+		WMI_PDEV_PARAM_ATF_OBSS_NOISE_SCALING_FACTOR;
 	pdev_param[wmi_pdev_param_cust_txpower_scale] = WMI_UNAVAILABLE_PARAM;
-	pdev_param[wmi_pdev_param_atf_dynamic_enable] = WMI_UNAVAILABLE_PARAM;
+	pdev_param[wmi_pdev_param_atf_dynamic_enable] =
+		WMI_PDEV_PARAM_ATF_DYNAMIC_ENABLE;
 	pdev_param[wmi_pdev_param_atf_ssid_group_policy] =
 						WMI_UNAVAILABLE_PARAM;
 	pdev_param[wmi_pdev_param_igmpmld_override] = WMI_UNAVAILABLE_PARAM;