xref: /OK3568_Linux_fs/kernel/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /* Copyright (c) 2013-2014, 2016-2018 The Linux Foundation. All rights reserved.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * RMNET Data configuration engine
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #include <linux/skbuff.h>
8*4882a593Smuzhiyun #include <net/gro_cells.h>
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef _RMNET_CONFIG_H_
11*4882a593Smuzhiyun #define _RMNET_CONFIG_H_
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #define RMNET_MAX_LOGICAL_EP 255
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun struct rmnet_endpoint {
16*4882a593Smuzhiyun 	u8 mux_id;
17*4882a593Smuzhiyun 	struct net_device *egress_dev;
18*4882a593Smuzhiyun 	struct hlist_node hlnode;
19*4882a593Smuzhiyun };
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun /* One instance of this structure is instantiated for each real_dev associated
22*4882a593Smuzhiyun  * with rmnet.
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun struct rmnet_port {
25*4882a593Smuzhiyun 	struct net_device *dev;
26*4882a593Smuzhiyun 	u32 data_format;
27*4882a593Smuzhiyun 	u8 nr_rmnet_devs;
28*4882a593Smuzhiyun 	u8 rmnet_mode;
29*4882a593Smuzhiyun 	struct hlist_head muxed_ep[RMNET_MAX_LOGICAL_EP];
30*4882a593Smuzhiyun 	struct net_device *bridge_ep;
31*4882a593Smuzhiyun 	struct net_device *rmnet_dev;
32*4882a593Smuzhiyun };
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun extern struct rtnl_link_ops rmnet_link_ops;
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun struct rmnet_vnd_stats {
37*4882a593Smuzhiyun 	u64 rx_pkts;
38*4882a593Smuzhiyun 	u64 rx_bytes;
39*4882a593Smuzhiyun 	u64 tx_pkts;
40*4882a593Smuzhiyun 	u64 tx_bytes;
41*4882a593Smuzhiyun 	u32 tx_drops;
42*4882a593Smuzhiyun };
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun struct rmnet_pcpu_stats {
45*4882a593Smuzhiyun 	struct rmnet_vnd_stats stats;
46*4882a593Smuzhiyun 	struct u64_stats_sync syncp;
47*4882a593Smuzhiyun };
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun struct rmnet_priv_stats {
50*4882a593Smuzhiyun 	u64 csum_ok;
51*4882a593Smuzhiyun 	u64 csum_valid_unset;
52*4882a593Smuzhiyun 	u64 csum_validation_failed;
53*4882a593Smuzhiyun 	u64 csum_err_bad_buffer;
54*4882a593Smuzhiyun 	u64 csum_err_invalid_ip_version;
55*4882a593Smuzhiyun 	u64 csum_err_invalid_transport;
56*4882a593Smuzhiyun 	u64 csum_fragmented_pkt;
57*4882a593Smuzhiyun 	u64 csum_skipped;
58*4882a593Smuzhiyun 	u64 csum_sw;
59*4882a593Smuzhiyun };
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun struct rmnet_priv {
62*4882a593Smuzhiyun 	u8 mux_id;
63*4882a593Smuzhiyun 	struct net_device *real_dev;
64*4882a593Smuzhiyun 	struct rmnet_pcpu_stats __percpu *pcpu_stats;
65*4882a593Smuzhiyun 	struct gro_cells gro_cells;
66*4882a593Smuzhiyun 	struct rmnet_priv_stats stats;
67*4882a593Smuzhiyun };
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun struct rmnet_port *rmnet_get_port_rcu(struct net_device *real_dev);
70*4882a593Smuzhiyun struct rmnet_endpoint *rmnet_get_endpoint(struct rmnet_port *port, u8 mux_id);
71*4882a593Smuzhiyun int rmnet_add_bridge(struct net_device *rmnet_dev,
72*4882a593Smuzhiyun 		     struct net_device *slave_dev,
73*4882a593Smuzhiyun 		     struct netlink_ext_ack *extack);
74*4882a593Smuzhiyun int rmnet_del_bridge(struct net_device *rmnet_dev,
75*4882a593Smuzhiyun 		     struct net_device *slave_dev);
76*4882a593Smuzhiyun struct rmnet_port*
77*4882a593Smuzhiyun rmnet_get_port_rtnl(const struct net_device *real_dev);
78*4882a593Smuzhiyun #endif /* _RMNET_CONFIG_H_ */
79