From 833f1ea3b0c1665ef227428cc4a88179e6a66447 Mon Sep 17 00:00:00 2001 From: Michael Adisumarta Date: Wed, 22 Sep 2021 12:20:10 -0700 Subject: [PATCH] msm_rmnet.h: Add new ioctls for rmnet to reg/unreg for notification Add new ioctls for rmnet to reg/unreg for yellow water mark hit notifications. Change-Id: Ib1162213e8fc463efaaa1149330e889110dc3dab Signed-off-by: Michael Adisumarta --- drivers/platform/msm/ipa_fmwk/ipa_fmwk.c | 26 +++++++++++++++ include/linux/ipa.h | 40 ++++++++++++++++++++++++ include/linux/ipa_fmwk.h | 2 ++ 3 files changed, 68 insertions(+) diff --git a/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c b/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c index 259d9f8041cb..cd3ef31151e6 100644 --- a/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c +++ b/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c @@ -225,6 +225,10 @@ struct ipa_fmwk_contex { int (*ipa_unregister_rmnet_ll_cb)(void); + int (*ipa_register_notifier)(void *fn_ptr); + + int (*ipa_unregister_notifier)(void *fn_ptr); + /* ipa_usb APIs */ int (*ipa_usb_init_teth_prot)(enum ipa_usb_teth_prot teth_prot, struct ipa_usb_teth_params *teth_params, @@ -552,6 +556,8 @@ int ipa_fmwk_register_ipa(const struct ipa_core_data *in) ipa_fmwk_ctx->ipa_register_rmnet_ll_cb = in->ipa_register_rmnet_ll_cb; ipa_fmwk_ctx->ipa_unregister_rmnet_ll_cb = in->ipa_unregister_rmnet_ll_cb; + ipa_fmwk_ctx->ipa_register_notifier = + in->ipa_unregister_notifier; ipa_fmwk_ctx->ipa_ready = true; ipa_trigger_ipa_ready_cbs(); @@ -1051,6 +1057,26 @@ int ipa_unregister_rmnet_ll_cb(void) } EXPORT_SYMBOL(ipa_unregister_rmnet_ll_cb); +int ipa_register_notifier(void *fn_ptr) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_register_notifier, fn_ptr); + + return ret; +} +EXPORT_SYMBOL(ipa_register_notifier); + +int ipa_unregister_notifier(void *fn_ptr) +{ + int ret; + + IPA_FMWK_DISPATCH_RETURN(ipa_unregister_notifier, fn_ptr); + + return ret; +} +EXPORT_SYMBOL(ipa_unregister_notifier); + /* registration API for IPA usb module */ int ipa_fmwk_register_ipa_usb(const struct ipa_usb_data *in) { diff --git a/include/linux/ipa.h b/include/linux/ipa.h index 0b921b291178..fa528096b133 100644 --- a/include/linux/ipa.h +++ b/include/linux/ipa.h @@ -36,6 +36,12 @@ #define IPA_SOCKsv5_ADD_V4_V6_COM_PM 2 #define IPA_SOCKsv5_ADD_V6_V6_COM_PM 3 +/* Notifiers for rmnet driver */ +#define BUFF_ABOVE_HIGH_THRESHOLD_FOR_DEFAULT_PIPE 1 +#define BUFF_ABOVE_HIGH_THRESHOLD_FOR_COAL_PIPE 2 +#define BUFF_BELOW_LOW_THRESHOLD_FOR_DEFAULT_PIPE 3 +#define BUFF_BELOW_LOW_THRESHOLD_FOR_COAL_PIPE 4 + /** * enum ipa_transport_type * transport type: either GSI or SPS @@ -1577,6 +1583,24 @@ int ipa_rmnet_ctl_xmit(struct sk_buff *skb); */ int ipa_rmnet_ll_xmit(struct sk_buff *skb); +/* + * ipa_register_notifier - Register for IPA atomic notifier + * + * @fn_ptr - Function pointer to get the notification + * + * This funciton will return 0 on success, -EAGAIN if reg fails. + */ +int ipa_register_notifier(void *fn_ptr); + +/* + * ipa_unregister_notifier - Unregister for IPA atomic notifier + * + * @fn_ptr - Function pointer to get the notification + * + * This funciton will return 0 on success, -EAGAIN if reg fails. + */ +int ipa_unregister_notifier(void *fn_ptr); + void ipa_free_skb(struct ipa_rx_data *data); /* @@ -2008,6 +2032,22 @@ static inline int ipa_rmnet_ll_xmit(struct sk_buff *skb) return -EPERM; } +/* + * Rmnet Notifier register + */ +static inline int ipa_register_notifier(struct sk_buff *skb) +{ + return -EPERM; +} + +/* + * Rmnet Notifier unregister + */ +static inline int ipa_unregister_notifier(struct sk_buff *skb) +{ + return -EPERM; +} + static inline void ipa_free_skb(struct ipa_rx_data *rx_in) { } diff --git a/include/linux/ipa_fmwk.h b/include/linux/ipa_fmwk.h index dd724e4f80f0..3ce9f2e9107c 100644 --- a/include/linux/ipa_fmwk.h +++ b/include/linux/ipa_fmwk.h @@ -135,6 +135,8 @@ struct ipa_core_data { void *user_data3); int (*ipa_unregister_rmnet_ll_cb)(void); + int (*ipa_register_notifier)(void *fn_ptr); + int (*ipa_unregister_notifier)(void *fn_ptr); }; struct ipa_usb_data {