Răsfoiți Sursa

qcacmn: add lithium rx queue setup wmi messages

WMI changes for rx reorder queue setup.

Change-Id: I4c8b1a5b8fd50cceaf754bdfdecada695871fe96
CRs-fixed: 1080338
Leo Chang 8 ani în urmă
părinte
comite
eee40879de
2 a modificat fișierele cu 132 adăugiri și 0 ștergeri
  1. 40 0
      wmi_unified_api.c
  2. 92 0
      wmi_unified_tlv.c

+ 40 - 0
wmi_unified_api.c

@@ -251,6 +251,46 @@ QDF_STATUS wmi_unified_peer_create_send(void *wmi_hdl,
 	return QDF_STATUS_E_FAILURE;
 }
 
+/**
+ * wmi_unified_peer_rx_reorder_queue_setup_send() - send rx reorder queue
+ * 	setup command to fw
+ * @wmi: wmi handle
+ * @rx_reorder_queue_setup_params: Rx reorder queue setup parameters
+ *
+ * Return: QDF_STATUS for success and QDF_STATUS_E_FAILURE for failure
+ */
+QDF_STATUS wmi_unified_peer_rx_reorder_queue_setup_send(void *wmi_hdl,
+					struct rx_reorder_queue_setup_params *param)
+{
+	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
+
+	if (wmi_handle->ops->send_peer_rx_reorder_queue_setup_cmd)
+		return wmi_handle->ops->send_peer_rx_reorder_queue_setup_cmd(
+			wmi_handle, param);
+
+	return QDF_STATUS_E_FAILURE;
+}
+
+/**
+ * wmi_unified_peer_rx_reorder_queue_remove_send() - send rx reorder queue
+ * 	remove command to fw
+ * @wmi: wmi handle
+ * @rx_reorder_queue_remove_params: Rx reorder queue remove parameters
+ *
+ * Return: QDF_STATUS for success and QDF_STATUS_E_FAILURE for failure
+ */
+QDF_STATUS wmi_unified_peer_rx_reorder_queue_remove_send(void *wmi_hdl,
+					struct rx_reorder_queue_remove_params *param)
+{
+	wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl;
+
+	if (wmi_handle->ops->send_peer_rx_reorder_queue_remove_cmd)
+		return wmi_handle->ops->send_peer_rx_reorder_queue_remove_cmd(
+			wmi_handle, param);
+
+	return QDF_STATUS_E_FAILURE;
+}
+
 #if defined(FEATURE_GREEN_AP) || defined(ATH_SUPPORT_GREEN_AP)
 /**
  * wmi_unified_green_ap_ps_send() - enable green ap powersave command

+ 92 - 0
wmi_unified_tlv.c

@@ -721,6 +721,94 @@ QDF_STATUS send_peer_create_cmd_tlv(wmi_unified_t wmi,
 	return 0;
 }
 
+/**
+ * send_peer_rx_reorder_queue_setup_cmd_tlv() - send rx reorder setup
+ * 	command to fw
+ * @wmi: wmi handle
+ * @rx_reorder_queue_setup_params: Rx reorder queue setup parameters
+ *
+ * Return: 0 for success or error code
+ */
+QDF_STATUS send_peer_rx_reorder_queue_setup_cmd_tlv(wmi_unified_t wmi,
+		struct rx_reorder_queue_setup_params *param)
+{
+	wmi_peer_reorder_queue_setup_cmd_fixed_param *cmd;
+	wmi_buf_t buf;
+	int32_t len = sizeof(*cmd);
+
+	buf = wmi_buf_alloc(wmi, len);
+	if (!buf) {
+		WMI_LOGP("%s: wmi_buf_alloc failed", __func__);
+		return QDF_STATUS_E_NOMEM;
+	}
+	cmd = (wmi_peer_reorder_queue_setup_cmd_fixed_param *)wmi_buf_data(buf);
+	WMITLV_SET_HDR(&cmd->tlv_header,
+		WMITLV_TAG_STRUC_wmi_peer_reorder_queue_setup_cmd_fixed_param,
+		WMITLV_GET_STRUCT_TLVLEN
+			(wmi_peer_reorder_queue_setup_cmd_fixed_param));
+	WMI_CHAR_ARRAY_TO_MAC_ADDR(param->peer_macaddr, &cmd->peer_macaddr);
+	cmd->vdev_id = param->vdev_id;
+	cmd->tid = param->tid;
+	cmd->queue_ptr_lo = param->hw_qdesc_paddr_lo;
+	cmd->queue_ptr_hi = param->hw_qdesc_paddr_hi;
+	cmd->queue_no = param->queue_no;
+
+	if (wmi_unified_cmd_send(wmi, buf, len,
+			WMI_PEER_REORDER_QUEUE_SETUP_CMDID)) {
+		WMI_LOGP("%s: fail to send WMI_PEER_REORDER_QUEUE_SETUP_CMDID",
+			__func__);
+		qdf_nbuf_free(buf);
+		return QDF_STATUS_E_FAILURE;
+	}
+	WMI_LOGD("%s: peer_macaddr %pM vdev_id %d, tid %d\n", __func__,
+		param->peer_macaddr, param->vdev_id, param->tid);
+
+	return QDF_STATUS_SUCCESS;
+}
+
+/**
+ * send_peer_rx_reorder_queue_remove_cmd_tlv() - send rx reorder remove
+ * 	command to fw
+ * @wmi: wmi handle
+ * @rx_reorder_queue_remove_params: Rx reorder queue remove parameters
+ *
+ * Return: 0 for success or error code
+ */
+QDF_STATUS send_peer_rx_reorder_queue_remove_cmd_tlv(wmi_unified_t wmi,
+		struct rx_reorder_queue_remove_params *param)
+{
+	wmi_peer_reorder_queue_remove_cmd_fixed_param *cmd;
+	wmi_buf_t buf;
+	int32_t len = sizeof(*cmd);
+
+	buf = wmi_buf_alloc(wmi, len);
+	if (!buf) {
+		WMI_LOGP("%s: wmi_buf_alloc failed", __func__);
+		return QDF_STATUS_E_NOMEM;
+	}
+	cmd = (wmi_peer_reorder_queue_remove_cmd_fixed_param *)
+			wmi_buf_data(buf);
+	WMITLV_SET_HDR(&cmd->tlv_header,
+		WMITLV_TAG_STRUC_wmi_peer_reorder_queue_remove_cmd_fixed_param,
+		WMITLV_GET_STRUCT_TLVLEN
+			(wmi_peer_reorder_queue_remove_cmd_fixed_param));
+	WMI_CHAR_ARRAY_TO_MAC_ADDR(param->peer_macaddr, &cmd->peer_macaddr);
+	cmd->vdev_id = param->vdev_id;
+	cmd->tid_mask = param->peer_tid_bitmap;
+
+	if (wmi_unified_cmd_send(wmi, buf, len,
+			WMI_PEER_REORDER_QUEUE_REMOVE_CMDID)) {
+		WMI_LOGP("%s: fail to send WMI_PEER_REORDER_QUEUE_REMOVE_CMDID",
+			__func__);
+		qdf_nbuf_free(buf);
+		return QDF_STATUS_E_FAILURE;
+	}
+	WMI_LOGD("%s: peer_macaddr %pM vdev_id %d, tid_map %d", __func__,
+		param->peer_macaddr, param->vdev_id, param->peer_tid_bitmap);
+
+	return QDF_STATUS_SUCCESS;
+}
+
 /**
  * send_green_ap_ps_cmd_tlv() - enable green ap powersave command
  * @wmi_handle: wmi handle
@@ -12437,6 +12525,10 @@ struct wmi_ops tlv_ops =  {
 	.send_vdev_stop_cmd = send_vdev_stop_cmd_tlv,
 	.send_peer_create_cmd = send_peer_create_cmd_tlv,
 	.send_peer_delete_cmd = send_peer_delete_cmd_tlv,
+	.send_peer_rx_reorder_queue_setup_cmd =
+		send_peer_rx_reorder_queue_setup_cmd_tlv,
+	.send_peer_rx_reorder_queue_remove_cmd =
+		send_peer_rx_reorder_queue_remove_cmd_tlv,
 	.send_green_ap_ps_cmd = send_green_ap_ps_cmd_tlv,
 	.send_pdev_utf_cmd = send_pdev_utf_cmd_tlv,
 	.send_pdev_param_cmd = send_pdev_param_cmd_tlv,