msm: ipa: add mechanism to configure aggregation timeout

Make changes to configure aggregation timeout for WAN/LAN and
RNDIS pipes to support low latency use cases.

Change-Id: I58d5c99cd1672f184ca2c8f55b5ecdd399804184
Signed-off-by: Chaitanya Pratapa <cpratapa@codeaurora.org>
This commit is contained in:
Chaitanya Pratapa 2020-10-05 22:42:19 -07:00 • committed by Armaan Siddiqui
commit f87dd2902a
3 changed files with 35 additions and 0 deletions

View file

@ -386,6 +386,8 @@ struct ipa_fmwk_contex {
int (*ipa_eth_client_conn_evt)(struct ipa_ecm_msg *msg);
int (*ipa_eth_client_disconn_evt)(struct ipa_ecm_msg *msg);
int (*ipa_get_default_aggr_time_limit)(enum ipa_client_type client,
u32 *default_aggr_time_limit);
};
static struct ipa_fmwk_contex *ipa_fmwk_ctx;
@ -486,6 +488,7 @@ int ipa_fmwk_register_ipa(const struct ipa_core_data *in)
ipa_fmwk_ctx->ipa_register_rmnet_ctl_cb = in->ipa_register_rmnet_ctl_cb;
ipa_fmwk_ctx->ipa_unregister_rmnet_ctl_cb =
in->ipa_unregister_rmnet_ctl_cb;
ipa_fmwk_ctx->ipa_get_default_aggr_time_limit = in->ipa_get_default_aggr_time_limit;
ipa_fmwk_ctx->ipa_ready = true;
ipa_trigger_ipa_ready_cbs();
@ -2043,6 +2046,18 @@ int ipa_eth_client_disconn_evt(struct ipa_ecm_msg *msg)
}
EXPORT_SYMBOL(ipa_eth_client_disconn_evt);
int ipa_get_default_aggr_time_limit(enum ipa_client_type client,
u32 *default_aggr_time_limit)
{
int ret;
IPA_FMWK_DISPATCH_RETURN(ipa_get_default_aggr_time_limit,
client, default_aggr_time_limit);
return ret;
}
EXPORT_SYMBOL(ipa_get_default_aggr_time_limit);
/* module functions */
static int __init ipa_fmwk_init(void)
{

View file

@ -1714,6 +1714,9 @@ typedef void (*ipa_rmnet_ctl_stop_cb)(void *user_data);
typedef void (*ipa_rmnet_ctl_rx_notify_cb)(void *user_data, void *rx_data);
int ipa_get_default_aggr_time_limit(enum ipa_client_type client,
u32 *default_aggr_time_limit);
/**
* ipa_register_ipa_ready_cb() - register a callback to be invoked
* when IPA core driver initialization is complete.
@ -2100,6 +2103,12 @@ static inline int ipa_uc_reg_rdyCB(
return -EPERM;
}
static inline int ipa_get_default_aggr_time_limit(enum ipa_client_type client,
u32 *default_aggr_time_limit)
{
return -EPERM;
}
#endif /* IS_ENABLED(CONFIG_IPA3) */
/* stubs - to be removed once dependent drivers remove references */

View file

@ -106,6 +106,8 @@ struct ipa_core_data {
void *user_data3);
int (*ipa_unregister_rmnet_ctl_cb)(void);
int (*ipa_get_default_aggr_time_limit)(enum ipa_client_type client,
u32 *default_aggr_time_limit);
};
struct ipa_usb_data {
@ -320,6 +322,9 @@ int ipa_fmwk_register_ipa_eth(const struct ipa_eth_data *in);
int ipa_fmwk_register_ipa_qdss(const struct ipa_qdss_data *in);
int ipa_get_default_aggr_time_limit(enum ipa_client_type client,
u32 *default_aggr_time_limit);
#else /* IS_ENABLED(CONFIG_IPA3) */
int ipa_fmwk_register_ipa(const struct ipa_core_data *in)
@ -367,6 +372,12 @@ int ipa_fmwk_register_ipa_eth(const struct ipa_eth_data *in)
return -EPERM;
}
static inline int ipa_get_default_aggr_time_limit(enum ipa_client_type client,
u32 *default_aggr_time_limit)
{
return -EPERM;
}
#endif /* IS_ENABLED(CONFIG_IPA3) */
#endif /* _IPA_FMWK_H_ */