Explorar o código

qcacmn: Add WMI API to send beacon offload control

Beacon offload control WMI command is used to control beacon tx in
beacon offload enabled mode. Add WMI API to send this command to FW.

Change-Id: I8b340b69ff508aaf80b9a80de044b0189b947a66
CRs-Fixed: 2140255
Kiran Venkatappa %!s(int64=7) %!d(string=hai) anos
pai
achega
7fe3afc311
Modificáronse 2 ficheiros con 70 adicións e 0 borrados
  1. 19 0
      wmi_unified_api.c
  2. 51 0
      wmi_unified_tlv.c

+ 19 - 0
wmi_unified_api.c

@@ -6889,3 +6889,22 @@ QDF_STATUS wmi_unified_send_limit_off_chan_cmd(void *wmi_hdl,
 
 
 	return QDF_STATUS_E_FAILURE;
 	return QDF_STATUS_E_FAILURE;
 }
 }
+
+/**
+ * wmi_send_bcn_offload_control_cmd - send beacon ofload control cmd to fw
+ * @wmi_hdl: wmi handle
+ * @bcn_ctrl_param: pointer to bcn_offload_control param
+ *
+ * Return: QDF_STATUS_SUCCESS for success or error code
+ */
+QDF_STATUS wmi_send_bcn_offload_control_cmd(void *wmi_hdl,
+			struct bcn_offload_control *bcn_ctrl_param)
+{
+	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
+
+	if (wmi_handle->ops->send_bcn_offload_control_cmd)
+		return wmi_handle->ops->send_bcn_offload_control_cmd(wmi_handle,
+				bcn_ctrl_param);
+
+	return QDF_STATUS_E_FAILURE;
+}

+ 51 - 0
wmi_unified_tlv.c

@@ -16290,6 +16290,54 @@ static QDF_STATUS init_cmd_send_tlv(wmi_unified_t wmi_handle,
 
 
 }
 }
 
 
+/**
+ * send_bcn_offload_control_cmd_tlv - send beacon ofload control cmd to fw
+ * @wmi_handle: wmi handle
+ * @bcn_ctrl_param: pointer to bcn_offload_control param
+ *
+ * Return: QDF_STATUS_SUCCESS for success or error code
+ */
+static
+QDF_STATUS send_bcn_offload_control_cmd_tlv(wmi_unified_t wmi_handle,
+			struct bcn_offload_control *bcn_ctrl_param)
+{
+	wmi_buf_t buf;
+	wmi_bcn_offload_ctrl_cmd_fixed_param *cmd;
+	QDF_STATUS ret;
+	uint32_t len;
+
+	len = sizeof(*cmd);
+
+	buf = wmi_buf_alloc(wmi_handle, len);
+	if (!buf) {
+		qdf_print("%s: wmi_buf_alloc failed\n", __func__);
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	cmd = (wmi_bcn_offload_ctrl_cmd_fixed_param *) wmi_buf_data(buf);
+	WMITLV_SET_HDR(&cmd->tlv_header,
+			WMITLV_TAG_STRUC_wmi_bcn_offload_ctrl_cmd_fixed_param,
+			WMITLV_GET_STRUCT_TLVLEN
+			(wmi_bcn_offload_ctrl_cmd_fixed_param));
+	cmd->vdev_id = bcn_ctrl_param->vdev_id;
+	if (bcn_ctrl_param->bcn_tx_enable)
+		cmd->bcn_ctrl_op = WMI_BEACON_CTRL_TX_ENABLE;
+	else
+		cmd->bcn_ctrl_op = WMI_BEACON_CTRL_TX_DISABLE;
+
+
+	ret = wmi_unified_cmd_send(wmi_handle, buf, len,
+			WMI_BCN_OFFLOAD_CTRL_CMDID);
+
+	if (QDF_IS_STATUS_ERROR(ret)) {
+		WMI_LOGE("WMI_BCN_OFFLOAD_CTRL_CMDID send returned Error %d",
+				ret);
+		wmi_buf_free(buf);
+	}
+
+	return ret;
+}
+
 /**
 /**
  * save_service_bitmap_tlv() - save service bitmap
  * save_service_bitmap_tlv() - save service bitmap
  * @wmi_handle: wmi handle
  * @wmi_handle: wmi handle
@@ -19977,6 +20025,7 @@ struct wmi_ops tlv_ops =  {
 				 send_process_update_edca_param_cmd_tlv,
 				 send_process_update_edca_param_cmd_tlv,
 	.send_coex_config_cmd = send_coex_config_cmd_tlv,
 	.send_coex_config_cmd = send_coex_config_cmd_tlv,
 	.send_set_country_cmd = send_set_country_cmd_tlv,
 	.send_set_country_cmd = send_set_country_cmd_tlv,
+	.send_bcn_offload_control_cmd = send_bcn_offload_control_cmd_tlv,
 	.get_target_cap_from_service_ready = extract_service_ready_tlv,
 	.get_target_cap_from_service_ready = extract_service_ready_tlv,
 	.extract_hal_reg_cap = extract_hal_reg_cap_tlv,
 	.extract_hal_reg_cap = extract_hal_reg_cap_tlv,
 	.extract_host_mem_req = extract_host_mem_req_tlv,
 	.extract_host_mem_req = extract_host_mem_req_tlv,
@@ -20527,6 +20576,8 @@ static void populate_tlv_service(uint32_t *wmi_service)
 	wmi_service[wmi_service_extended_nss_support] =
 	wmi_service[wmi_service_extended_nss_support] =
 				WMI_SERVICE_EXTENDED_NSS_SUPPORT;
 				WMI_SERVICE_EXTENDED_NSS_SUPPORT;
 	wmi_service[wmi_service_widebw_scan] = WMI_SERVICE_SCAN_PHYMODE_SUPPORT;
 	wmi_service[wmi_service_widebw_scan] = WMI_SERVICE_SCAN_PHYMODE_SUPPORT;
+	wmi_service[wmi_service_bcn_offload_start_stop_support] =
+				WMI_SERVICE_BCN_OFFLOAD_START_STOP_SUPPORT;
 }
 }
 
 
 /**
 /**