1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33#ifndef __MLX5E_IPOB_H__
34#define __MLX5E_IPOB_H__
35
36#include <linux/mlx5/fs.h>
37#include "en.h"
38
39#define MLX5I_MAX_NUM_TC 1
40
41extern const struct ethtool_ops mlx5i_ethtool_ops;
42extern const struct ethtool_ops mlx5i_pkey_ethtool_ops;
43
44#define MLX5_IB_GRH_BYTES 40
45#define MLX5_IPOIB_ENCAP_LEN 4
46#define MLX5_IPOIB_PSEUDO_LEN 20
47#define MLX5_IPOIB_HARD_LEN (MLX5_IPOIB_PSEUDO_LEN + MLX5_IPOIB_ENCAP_LEN)
48
49
50struct mlx5i_priv {
51 struct rdma_netdev rn;
52 struct mlx5_core_qp qp;
53 bool sub_interface;
54 u32 qkey;
55 u16 pkey_index;
56 struct mlx5i_pkey_qpn_ht *qpn_htbl;
57 char *mlx5e_priv[0];
58};
59
60
61int mlx5i_create_underlay_qp(struct mlx5_core_dev *mdev, struct mlx5_core_qp *qp);
62void mlx5i_destroy_underlay_qp(struct mlx5_core_dev *mdev, struct mlx5_core_qp *qp);
63
64
65int mlx5i_init_underlay_qp(struct mlx5e_priv *priv);
66void mlx5i_uninit_underlay_qp(struct mlx5e_priv *priv);
67
68
69int mlx5i_pkey_qpn_ht_init(struct net_device *netdev);
70void mlx5i_pkey_qpn_ht_cleanup(struct net_device *netdev);
71
72
73int mlx5i_pkey_add_qpn(struct net_device *netdev, u32 qpn);
74int mlx5i_pkey_del_qpn(struct net_device *netdev, u32 qpn);
75
76
77struct net_device *mlx5i_pkey_get_netdev(struct net_device *netdev, u32 qpn);
78
79
80int mlx5i_dev_init(struct net_device *dev);
81void mlx5i_dev_cleanup(struct net_device *dev);
82int mlx5i_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
83
84
85void mlx5i_init(struct mlx5_core_dev *mdev,
86 struct net_device *netdev,
87 const struct mlx5e_profile *profile,
88 void *ppriv);
89
90
91const struct mlx5e_profile *mlx5i_pkey_get_profile(void);
92
93
94#define mlx5i_epriv(netdev) ((void *)(((struct mlx5i_priv *)netdev_priv(netdev))->mlx5e_priv))
95
96netdev_tx_t mlx5i_sq_xmit(struct mlx5e_txqsq *sq, struct sk_buff *skb,
97 struct mlx5_av *av, u32 dqpn, u32 dqkey);
98void mlx5i_handle_rx_cqe(struct mlx5e_rq *rq, struct mlx5_cqe64 *cqe);
99
100#endif
101