From ee1e2914c37ab412ff7e52af965ce2884aea0296 Mon Sep 17 00:00:00 2001 From: Ilia Lin Date: Mon, 16 Aug 2021 11:58:07 +0300 Subject: [PATCH] msm: ipa: update the ipa eth client interfaces 1. Deprecate the ipa_eth_client_conn_evt/ipa_eth_client_disconn_evt. 2. Change the ipa_eth_intf_info structure. a. pass the net_device structure directly. b. new boolean flag to trigger periph conn/disconn event. Change-Id: Ied288d6a914ac9c19d38adb82de239dd14913855 Acked-by: Eliad Ben Yishay Signed-off-by: Ilia Lin --- drivers/platform/msm/ipa_fmwk/ipa_fmwk.c | 31 ------------------------ include/linux/ipa_eth.h | 28 ++++++++++++--------- include/linux/ipa_fmwk.h | 4 --- include/uapi/linux/msm_ipa.h | 2 ++ 4 files changed, 18 insertions(+), 47 deletions(-) diff --git a/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c b/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c index d0ebb899fde5..259d9f8041cb 100644 --- a/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c +++ b/drivers/platform/msm/ipa_fmwk/ipa_fmwk.c @@ -427,10 +427,6 @@ struct ipa_fmwk_contex { int (*ipa_eth_client_set_perf_profile)(struct ipa_eth_client *client, struct ipa_eth_perf_profile *profile); - 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); @@ -2162,8 +2158,6 @@ int ipa_fmwk_register_ipa_eth(const struct ipa_eth_data *in) || ipa_fmwk_ctx->ipa_eth_client_reg_intf || ipa_fmwk_ctx->ipa_eth_client_unreg_intf || ipa_fmwk_ctx->ipa_eth_client_set_perf_profile - || ipa_fmwk_ctx->ipa_eth_client_conn_evt - || ipa_fmwk_ctx->ipa_eth_client_disconn_evt || ipa_fmwk_ctx->ipa_eth_get_ipa_client_type_from_eth_type || ipa_fmwk_ctx->ipa_eth_client_exist) { pr_err("ipa_eth APIs were already initialized\n"); @@ -2180,9 +2174,6 @@ int ipa_fmwk_register_ipa_eth(const struct ipa_eth_data *in) ipa_fmwk_ctx->ipa_eth_client_unreg_intf = in->ipa_eth_client_unreg_intf; ipa_fmwk_ctx->ipa_eth_client_set_perf_profile = in->ipa_eth_client_set_perf_profile; - ipa_fmwk_ctx->ipa_eth_client_conn_evt = in->ipa_eth_client_conn_evt; - ipa_fmwk_ctx->ipa_eth_client_disconn_evt = - in->ipa_eth_client_disconn_evt; ipa_fmwk_ctx->ipa_eth_get_ipa_client_type_from_eth_type = in->ipa_eth_get_ipa_client_type_from_eth_type; ipa_fmwk_ctx->ipa_eth_client_exist = @@ -2285,28 +2276,6 @@ int ipa_eth_client_set_perf_profile(struct ipa_eth_client *client, } EXPORT_SYMBOL(ipa_eth_client_set_perf_profile); -int ipa_eth_client_conn_evt(struct ipa_ecm_msg *msg) -{ - int ret; - - IPA_FMWK_DISPATCH_RETURN_DP(ipa_eth_client_conn_evt, - msg); - - return ret; -} -EXPORT_SYMBOL(ipa_eth_client_conn_evt); - -int ipa_eth_client_disconn_evt(struct ipa_ecm_msg *msg) -{ - int ret; - - IPA_FMWK_DISPATCH_RETURN_DP(ipa_eth_client_disconn_evt, - msg); - - return ret; -} -EXPORT_SYMBOL(ipa_eth_client_disconn_evt); - int ipa_get_default_aggr_time_limit(enum ipa_client_type client, u32 *default_aggr_time_limit) { diff --git a/include/linux/ipa_eth.h b/include/linux/ipa_eth.h index 3a2ba3031a0d..11c8b6e91a44 100644 --- a/include/linux/ipa_eth.h +++ b/include/linux/ipa_eth.h @@ -10,6 +10,8 @@ #include #include +#define IPA_ETH_API_VER 2 + /* New architecture prototypes */ typedef void (*ipa_eth_ready_cb)(void *user_data); @@ -41,6 +43,7 @@ enum ipa_eth_client_type { IPA_ETH_CLIENT_RTK8125B, IPA_ETH_CLIENT_NTN, IPA_ETH_CLIENT_EMAC, + IPA_ETH_CLIENT_NTN3, IPA_ETH_CLIENT_MAX, }; @@ -195,13 +198,13 @@ struct ipa_eth_client_pipe_info { * provided by offload client * @client_type: ethernet client type * @inst_id: instance id for dual NIC support + * @net_dev: network device client belongs to * @traffic_type: traffic type * @pipe_list: list of pipes with same traffic type * @priv: private data for client * @test: is test client */ struct ipa_eth_client { - /* vendor driver */ enum ipa_eth_client_type client_type; u8 inst_id; @@ -212,6 +215,9 @@ struct ipa_eth_client { /* client specific priv data*/ void *priv; bool test; + + /* vendor driver */ + struct net_device *net_dev; }; /** @@ -242,18 +248,18 @@ struct ipa_eth_hdr_info { * struct ipa_eth_intf_info - parameters for ipa offload * interface registration * - * @netdev_name: network interface name - * @hdr: hdr for ipv4/ipv6 - * @pipe_hdl_list_size: number of pipes prop needed for this interface - * @pipe_hdl_list: array of pipes used for this interface + * @client: ipa ethernet client associated with the interface + * @is_conn_evt: whether or not trigger periph conn/disconn event + * @net_dev: network device */ struct ipa_eth_intf_info { - const char *netdev_name; - struct ipa_eth_hdr_info hdr[IPA_IP_MAX]; + struct ipa_eth_client *client; - /* tx/rx pipes for same netdev */ - int pipe_hdl_list_size; - ipa_eth_hdl_t *pipe_hdl_list; + /* trigger iface peripheral event */ + bool is_conn_evt; + + /* IPA internal fields */ + struct net_device *net_dev; }; int ipa_eth_register_ready_cb(struct ipa_eth_ready *ready_info); @@ -264,8 +270,6 @@ int ipa_eth_client_reg_intf(struct ipa_eth_intf_info *intf); int ipa_eth_client_unreg_intf(struct ipa_eth_intf_info *intf); int ipa_eth_client_set_perf_profile(struct ipa_eth_client *client, struct ipa_eth_perf_profile *profile); -int ipa_eth_client_conn_evt(struct ipa_ecm_msg *msg); -int ipa_eth_client_disconn_evt(struct ipa_ecm_msg *msg); enum ipa_client_type ipa_eth_get_ipa_client_type_from_eth_type( enum ipa_eth_client_type eth_client_type, enum ipa_eth_pipe_direction dir); bool ipa_eth_client_exist( diff --git a/include/linux/ipa_fmwk.h b/include/linux/ipa_fmwk.h index 28077d869691..dd724e4f80f0 100644 --- a/include/linux/ipa_fmwk.h +++ b/include/linux/ipa_fmwk.h @@ -328,10 +328,6 @@ struct ipa_eth_data { int (*ipa_eth_client_set_perf_profile)(struct ipa_eth_client *client, struct ipa_eth_perf_profile *profile); - int (*ipa_eth_client_conn_evt)(struct ipa_ecm_msg *msg); - - int (*ipa_eth_client_disconn_evt)(struct ipa_ecm_msg *msg); - enum ipa_client_type (*ipa_eth_get_ipa_client_type_from_eth_type)( enum ipa_eth_client_type eth_client_type, enum ipa_eth_pipe_direction dir); diff --git a/include/uapi/linux/msm_ipa.h b/include/uapi/linux/msm_ipa.h index 63c58a984d8c..0be5870fe577 100644 --- a/include/uapi/linux/msm_ipa.h +++ b/include/uapi/linux/msm_ipa.h @@ -3123,6 +3123,8 @@ struct ipa_tether_device_info { */ enum ipa_vlan_ifaces { IPA_VLAN_IF_ETH, + IPA_VLAN_IF_ETH0, + IPA_VLAN_IF_ETH1, IPA_VLAN_IF_RNDIS, IPA_VLAN_IF_ECM };