浏览代码

qcacmn: add lithium rx queue setup wmi messages

WMI changes for rx reorder queue setup.

Change-Id: I4c8b1a5b8fd50cceaf754bdfdecada695871fe96
CRs-fixed: 1080338
Leo Chang 8 年之前
父节点
当前提交
e34fbde3bd
共有 5 个文件被更改,包括 172 次插入0 次删除
  1. 4 0
      wmi/inc/wmi_unified_api.h
  2. 30 0
      wmi/inc/wmi_unified_param.h
  3. 6 0
      wmi/inc/wmi_unified_priv.h
  4. 40 0
      wmi/src/wmi_unified_api.c
  5. 92 0
      wmi/src/wmi_unified_tlv.c

+ 4 - 0
wmi/inc/wmi_unified_api.h

@@ -1266,4 +1266,8 @@ QDF_STATUS wmi_unified_send_adapt_dwelltime_params_cmd(void *wmi_hdl,
 QDF_STATUS wmi_unified_fw_test_cmd(void *wmi_hdl,
 				   struct set_fwtest_params *wmi_fwtest);
 
+QDF_STATUS wmi_unified_peer_rx_reorder_queue_setup_send(void *wmi_hdl,
+					struct rx_reorder_queue_setup_params *param);
+QDF_STATUS wmi_unified_peer_rx_reorder_queue_remove_send(void *wmi_hdl,
+					struct rx_reorder_queue_remove_params *param);
 #endif /* _WMI_UNIFIED_API_H_ */

+ 30 - 0
wmi/inc/wmi_unified_param.h

@@ -4256,6 +4256,36 @@ struct rtt_keepalive_req_params {
 	bool stop;
 };
 
+/**
+ * struct rx_reorder_queue_setup_params  - Reorder queue setup params
+ * @peer_mac_addr: Peer mac address
+ * @tid: TID
+ * @vdev_id: vdev id
+ * @hw_qdesc_paddr_lo: lower 32 bits of queue desc adddress
+ * @hw_qdesc_paddr_hi: upper 32 bits of queue desc adddress
+ * @queue_no: 16-bit number assigned by host for queue
+ */
+struct rx_reorder_queue_setup_params {
+	uint8_t *peer_macaddr;
+	uint16_t tid;
+	uint16_t vdev_id;
+	uint32_t hw_qdesc_paddr_lo;
+	uint32_t hw_qdesc_paddr_hi;
+	uint16_t queue_no;
+};
+
+/**
+ * struct rx_reorder_queue_remove_params  - Reorder queue setup params
+ * @peer_mac_addr: Peer mac address
+ * @vdev_id: vdev id
+ * @peer_tid_bitmap: peer tid bitmap
+ */
+struct rx_reorder_queue_remove_params {
+	uint8_t *peer_macaddr;
+	uint16_t vdev_id;
+	uint32_t peer_tid_bitmap;
+};
+
 /**
  * struct wmi_host_stats_event - Stats event params
  * @stats_id: stats id of type wmi_host_stats_event

+ 6 - 0
wmi/inc/wmi_unified_priv.h

@@ -1132,6 +1132,12 @@ QDF_STATUS (*send_fw_test_cmd)(wmi_unified_t wmi_handle,
 
 QDF_STATUS (*send_encrypt_decrypt_send_cmd)(wmi_unified_t wmi_handle,
 				struct encrypt_decrypt_req_params *params);
+
+QDF_STATUS (*send_peer_rx_reorder_queue_setup_cmd)(wmi_unified_t wmi_handle,
+		struct rx_reorder_queue_setup_params *param);
+
+QDF_STATUS (*send_peer_rx_reorder_queue_remove_cmd)(wmi_unified_t wmi_handle,
+		struct rx_reorder_queue_remove_params *param);
 };
 
 struct target_abi_version {

+ 40 - 0
wmi/src/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/src/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,