diff --git a/qdf/inc/qdf_ipa_wdi3.h b/qdf/inc/qdf_ipa_wdi3.h index dc7aa040f1..024a7ec3e9 100644 --- a/qdf/inc/qdf_ipa_wdi3.h +++ b/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 */ diff --git a/qdf/inc/qdf_status.h b/qdf/inc/qdf_status.h index 1b07b98808..4f110d28c6 100644 --- a/qdf/inc/qdf_status.h +++ b/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; diff --git a/qdf/linux/src/i_qdf_ipa_wdi3.h b/qdf/linux/src/i_qdf_ipa_wdi3.h index 9fc303d01b..e4598d2d44 100644 --- a/qdf/linux/src/i_qdf_ipa_wdi3.h +++ b/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