Browse Source

qcacmn: Qdf changes to support optional wifi dp feature

Qdf changes to support optional wifi dp feature.

Change-Id: Iaec8374548a991e4660f0a0a31f1d6309b572bea
CRs-Fixed: 3403427
Namita Nair 2 năm trước cách đây
mục cha
commit
c9c59b99ed
3 tập tin đã thay đổi với 127 bổ sung4 xóa
  1. 59 3
      qdf/inc/qdf_ipa_wdi3.h
  2. 3 1
      qdf/inc/qdf_status.h
  3. 65 0
      qdf/linux/src/i_qdf_ipa_wdi3.h

+ 59 - 3
qdf/inc/qdf_ipa_wdi3.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017-2019, 2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -88,6 +88,8 @@ typedef __qdf_ipa_wdi_init_out_params_t qdf_ipa_wdi_init_out_params_t;
 	__QDF_IPA_WDI_INIT_OUT_PARAMS_IS_SMMU_ENABLED(out_params)
 #define QDF_IPA_WDI_INIT_OUT_PARAMS_HANDLE(out_params)	\
 	__QDF_IPA_WDI_INIT_OUT_PARAMS_HANDLE(out_params)
+#define QDF_IPA_WDI_INIT_OUT_PARAMS_OPT_WIFI_DP(out_params)   \
+	__QDF_IPA_WDI_INIT_OUT_PARAMS_OPT_WIFI_DP(out_params)
 
 /**
  * qdf_ipa_wdi_pipe_setup_info_smmu_t - WDI TX/Rx configuration
@@ -216,7 +218,6 @@ typedef __qdf_ipa_wdi_reg_intf_in_params_t qdf_ipa_wdi_reg_intf_in_params_t;
 	__QDF_IPA_WDI_REG_INTF_IN_PARAMS_IS_RX1_USED(in)
 #endif
 
-
 /**
  * qdf_ipa_wdi_pipe_setup_info_t - WDI TX/Rx configuration
  */
@@ -507,7 +508,62 @@ static inline int qdf_ipa_uc_bw_monitor(qdf_ipa_wdi_bw_info_t *bw_info)
 {
 	return __qdf_ipa_uc_bw_monitor(bw_info);
 }
+
 #endif
 
+#ifdef IPA_OPT_WIFI_DP
+/**
+ * qdf_ipa_wdi_register_flt_cb() - register cb functions with IPA
+ * for optional wifi datapath
+ * @hdl: ipa hdl
+ * @flt_rsrv_cb: cb for filter reservation
+ * @flt_rsrv_rel_cb: cb for filter release
+ * @flt_add_cb: cb for filter addition
+ * @flt_rem_cb: cb for filter removal
+ *
+ * Return: 0 on success, negative on failure
+ */
+static inline int qdf_ipa_wdi_register_flt_cb(
+			ipa_wdi_hdl_t hdl,
+			ipa_wdi_opt_dpath_flt_rsrv_cb flt_rsrv_cb,
+			ipa_wdi_opt_dpath_flt_rsrv_rel_cb flt_rsrv_rel_cb,
+			ipa_wdi_opt_dpath_flt_add_cb flt_add_cb,
+			ipa_wdi_opt_dpath_flt_rem_cb flt_rem_cb)
+{
+	return __qdf_ipa_wdi_register_flt_cb((__qdf_ipa_wdi_hdl_t)hdl,
+					     flt_rsrv_cb, flt_rsrv_rel_cb,
+					     flt_add_cb, flt_rem_cb);
+}
+
+/**
+ * ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst() - notify IPA with filter
+ * reserve response for optional wifi datapath
+ * @hdl: ipa hdl
+ * @is_succes: true for success, false or failure
+ *
+ * Return: 0 on success, negative on failure
+ */
+static inline int qdf_ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst(
+					    ipa_wdi_hdl_t hdl, bool is_success)
+{
+	return __qdf_ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst(hdl,
+								is_success);
+}
+
+/**
+ * qdf_ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst() - notify IPA with filter
+ * release response for optional wifi datapath
+ * @hdl: ipa hdl
+ * @is_succes: true for success, false or failure
+ *
+ * Return: 0 on success, negative on failure
+ */
+static inline int qdf_ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst(
+				ipa_wdi_hdl_t hdl, bool is_success)
+{
+	return __qdf_ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst(hdl,
+								is_success);
+}
+#endif /* IPA_OPT_WIFI_DP  */
 #endif /* IPA_OFFLOAD */
-#endif /* _QDF_IPA_WDI3_H */
+#endif /* QDF_IPA_WDI3_H */

+ 3 - 1
qdf/inc/qdf_status.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2014-2020 The Linux Foundation. All rights reserved.
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -76,6 +76,7 @@
  * @QDF_STATUS_E_RANGE: result/parameter/operation was out of range
  * @QDF_STATUS_E_GRO_DROP: return code for GRO drop
  * @QDF_STATUS_E_RESTART: return error code for wait_event_interruptible
+ * @QDF_STATUS_FILT_REQ_ERROR: return error code cee filter rule request
  * @QDF_STATUS_MAX: not a real value just a place holder for max
  */
 typedef enum {
@@ -128,6 +129,7 @@ typedef enum {
 	QDF_STATUS_E_RANGE,
 	QDF_STATUS_E_GRO_DROP,
 	QDF_STATUS_E_RESTART,
+	QDF_STATUS_FILT_REQ_ERROR,
 	QDF_STATUS_MAX
 } QDF_STATUS;
 

+ 65 - 0
qdf/linux/src/i_qdf_ipa_wdi3.h

@@ -140,6 +140,10 @@ typedef struct ipa_wdi_init_out_params __qdf_ipa_wdi_init_out_params_t;
 	(((struct ipa_wdi_init_out_params *)(out_params))->is_uC_ready)
 #define __QDF_IPA_WDI_INIT_OUT_PARAMS_IS_SMMU_ENABLED(out_params)	\
 	(((struct ipa_wdi_init_out_params *)(out_params))->is_smmu_enabled)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0))
+#define __QDF_IPA_WDI_INIT_OUT_PARAMS_OPT_WIFI_DP(out_params)	\
+	(((struct ipa_wdi_init_out_params *)(out_params))->opt_wdi_dpath)
+#endif
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0))
 #define __QDF_IPA_WDI_INIT_OUT_PARAMS_HANDLE(out_params)	\
@@ -424,6 +428,67 @@ static inline int __qdf_ipa_wdi_reg_intf(
 	return ipa_wdi_reg_intf_per_inst(in);
 }
 
+#ifdef IPA_OPT_WIFI_DP
+/**
+ * __qdf_ipa_wdi_register_flt_cb() - register callbacks for optional wifi dp
+ * @hdl: ipa_hdl
+ * @flt_rsrv_cb: filter reserve cb function
+ * @flt_rsrv_rel_cb: filter release cb function
+ * @flt_add_cb: filter add cb function
+ * @flt_rem_cb: filter remove cb
+ *
+ * Note: Should not be called from atomic context and only
+ * after checking IPA readiness using ipa_register_ipa_ready_cb()
+ *
+ * @Return 0 on successful register of filter cb, negative on failure
+ */
+static inline int __qdf_ipa_wdi_register_flt_cb(
+			ipa_wdi_hdl_t hdl,
+			ipa_wdi_opt_dpath_flt_rsrv_cb flt_rsrv_cb,
+			ipa_wdi_opt_dpath_flt_rsrv_rel_cb flt_rsrv_rel_cb,
+			ipa_wdi_opt_dpath_flt_add_cb flt_add_cb,
+			ipa_wdi_opt_dpath_flt_rem_cb flt_rem_cb)
+{
+	return ipa_wdi_opt_dpath_register_flt_cb_per_inst(
+					hdl, flt_rsrv_cb,
+					flt_rsrv_rel_cb,
+					flt_add_cb, flt_rem_cb);
+}
+
+/**
+ * __qdf_ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst() - notify response to
+ * filter reserve request from IPA
+ * @hdl: ipa_hdl
+ * @is_success: result of filter reservation
+ *
+ * Note: Should not be called from atomic context and only
+ * after checking IPA readiness using ipa_register_ipa_ready_cb()
+ *
+ * @Return 0 if ipa received the notification, negative on failure
+ */
+static inline int __qdf_ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst(
+			ipa_wdi_hdl_t hdl, bool is_success)
+{
+	return ipa_wdi_opt_dpath_notify_flt_rsvd_per_inst(hdl, is_success);
+}
+
+/**
+ *__qdf_ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst() notify response to
+ *filter release request from IPA
+ * @hdl: ipa_hdl
+ * @is_success: result of filter release
+ *
+ * Note: Should not be called from atomic context and only
+ * after checking IPA readiness using ipa_register_ipa_ready_cb()
+ *
+ * @Return 0 if ipa received the notification, negative on failure
+ */
+static inline int __qdf_ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst(
+			ipa_wdi_hdl_t hdl, bool is_success)
+{
+	return ipa_wdi_opt_dpath_notify_flt_rlsd_per_inst(hdl, is_success);
+}
+#endif /*IPA_OPT_WIFI_DP */
 /**
  * __qdf_ipa_wdi_dereg_intf - Client Driver should call this
  * function to deregister before unload and after disconnect