Эх сурвалжийг харах

Merge "qca-wifi: Add new feature to support protocol tags."

Linux Build Service Account 6 жил өмнө
parent
commit
290546106a

+ 13 - 0
wmi/inc/wmi_unified_ap_api.h

@@ -274,4 +274,17 @@ QDF_STATUS wmi_unified_vdev_pcp_tid_map_cmd_send(void *wmi_hdl,
  */
 QDF_STATUS wmi_unified_vdev_tidmap_prec_cmd_send(void *wmi_hdl,
 					struct vap_tidmap_prec_params *param);
+
+#ifdef WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG
+/**
+ * wmi_unified_set_rx_pkt_type_routing_tag() - api to add/delete
+ * the protocols to be tagged by CCE
+ * @wmi_hdl: wmi handle
+ * @param: Packet routing/tagging info
+ *
+ * @return: QDF_STATUS_SUCCESS for success or error code
+ */
+QDF_STATUS wmi_unified_set_rx_pkt_type_routing_tag(
+	void *wmi_hdl, struct wmi_rx_pkt_protocol_routing_info *param);
+#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
 #endif /* _WMI_UNIFIED_AP_API_H_ */

+ 21 - 0
wmi/src/wmi_unified_ap_api.c

@@ -1181,3 +1181,24 @@ wmi_unified_vdev_tidmap_prec_cmd_send(void *wmi_hdl,
 
 	return QDF_STATUS_E_FAILURE;
 }
+
+#ifdef WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG
+/**
+ * wmi_unified_set_rx_pkt_protocol_routing_tag() - api to add/delete the
+ *					protocols to be tagged by CCE
+ * @wmi_hdl: wmi handle
+ * @param: Packet routing/tagging info
+ *
+ * @return QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE on failure
+ */
+QDF_STATUS wmi_unified_set_rx_pkt_type_routing_tag(
+		void *wmi_hdl, struct wmi_rx_pkt_protocol_routing_info *param)
+{
+	wmi_unified_t wmi = (wmi_unified_t)wmi_hdl;
+
+	if (wmi->ops->set_rx_pkt_type_routing_tag_cmd)
+		return wmi->ops->set_rx_pkt_type_routing_tag_cmd(wmi, param);
+
+	return QDF_STATUS_E_FAILURE;
+}
+#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */

+ 57 - 0
wmi/src/wmi_unified_ap_tlv.c

@@ -1887,6 +1887,59 @@ static QDF_STATUS extract_pdev_caldata_version_check_ev_param_tlv(
 	return QDF_STATUS_SUCCESS;
 }
 
+#ifdef WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG
+/**
+ * set_rx_pkt_type_routing_tag_update_tlv() - add/delete protocol tag in CCE
+ * @wmi_handle: wmi handle
+ * @param evt_buf: pointer to event buffer
+ * @param param: pointer to protocol tag/routing struct
+ *
+ * @return:QDF_STATUS_SUCCESS for success or
+ *			QDF_STATUS_E_NOMEM/QDF_STATUS_E_FAILURE on failure
+*/
+static QDF_STATUS set_rx_pkt_type_routing_tag_update_tlv(
+			void *wmi_hdl,
+			struct wmi_rx_pkt_protocol_routing_info *param)
+{
+	wmi_pdev_update_pkt_routing_cmd_fixed_param *cmd;
+	wmi_buf_t buf;
+	QDF_STATUS status;
+	uint32_t len = sizeof(wmi_pdev_update_pkt_routing_cmd_fixed_param);
+
+	buf = wmi_buf_alloc(wmi_hdl, len);
+	if (!buf) {
+		WMI_LOGE("%s : wmi_buf_alloc failed", __func__);
+		return QDF_STATUS_E_NOMEM;
+	}
+	cmd = (wmi_pdev_update_pkt_routing_cmd_fixed_param *)wmi_buf_data(buf);
+		WMITLV_SET_HDR(&cmd->tlv_header,
+		WMITLV_TAG_STRUC_wmi_pdev_update_pkt_routing_cmd_fixed_param,
+		WMITLV_GET_STRUCT_TLVLEN(
+	wmi_pdev_update_pkt_routing_cmd_fixed_param));
+	cmd->pdev_id = param->pdev_id;
+	cmd->op_code = (A_UINT32) param->op_code;
+	cmd->routing_type_bitmap = param->routing_type_bitmap;
+	cmd->dest_ring = param->dest_ring;
+	cmd->meta_data = param->meta_data;
+	cmd->dest_ring_handler = param->dest_ring_handler;
+	WMI_LOGI("Set RX PKT ROUTING TYPE TAG - opcode: %u", param->op_code);
+	WMI_LOGI("routing_bitmap: %u, dest_ring: %u",
+		 param->routing_type_bitmap, param->dest_ring);
+	WMI_LOGI("dest_ring_handler: %u, meta_data: 0x%x",
+		 param->dest_ring_handler, param->meta_data);
+
+	wmi_mtrace(WMI_PDEV_UPDATE_PKT_ROUTING_CMDID, cmd->pdev_id, 0);
+	status = wmi_unified_cmd_send(wmi_hdl, buf, len,
+				      WMI_PDEV_UPDATE_PKT_ROUTING_CMDID);
+	if (status != QDF_STATUS_SUCCESS) {
+		wmi_buf_free(buf);
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	return QDF_STATUS_SUCCESS;
+}
+#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
+
 #ifdef WLAN_SUPPORT_FILS
 /**
  * send_vdev_fils_enable_cmd_tlv() - enable/Disable FD Frame command to fw
@@ -2759,4 +2812,8 @@ void wmi_ap_attach_tlv(wmi_unified_t wmi_handle)
 	ops->extract_channel_hopping_event = extract_channel_hopping_event_tlv;
 	ops->send_peer_chan_width_switch_cmd =
 					send_peer_chan_width_switch_cmd_tlv;
+#ifdef WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG
+	ops->set_rx_pkt_type_routing_tag_cmd =
+					set_rx_pkt_type_routing_tag_update_tlv;
+#endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
 }