1
2
3
4#ifndef _NFP_PORT_H_
5#define _NFP_PORT_H_
6
7#include <net/devlink.h>
8
9struct net_device;
10struct netdev_phys_item_id;
11struct nfp_app;
12struct nfp_pf;
13struct nfp_port;
14
15
16
17
18
19
20
21
22
23
24enum nfp_port_type {
25 NFP_PORT_INVALID,
26 NFP_PORT_PHYS_PORT,
27 NFP_PORT_PF_PORT,
28 NFP_PORT_VF_PORT,
29};
30
31
32
33
34
35
36
37enum nfp_port_flags {
38 NFP_PORT_CHANGED = 0,
39};
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61struct nfp_port {
62 struct net_device *netdev;
63 enum nfp_port_type type;
64
65 unsigned long flags;
66 unsigned long tc_offload_cnt;
67
68 struct nfp_app *app;
69
70 struct devlink_port dl_port;
71
72 union {
73
74 struct {
75 unsigned int eth_id;
76 bool eth_forced;
77 struct nfp_eth_table_port *eth_port;
78 u8 __iomem *eth_stats;
79 };
80
81 struct {
82 unsigned int pf_id;
83 unsigned int vf_id;
84 bool pf_split;
85 unsigned int pf_split_id;
86 u8 __iomem *vnic;
87 };
88 };
89
90 struct list_head port_list;
91};
92
93extern const struct ethtool_ops nfp_port_ethtool_ops;
94
95int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type,
96 void *type_data);
97
98static inline bool nfp_port_is_vnic(const struct nfp_port *port)
99{
100 return port->type == NFP_PORT_PF_PORT || port->type == NFP_PORT_VF_PORT;
101}
102
103int
104nfp_port_set_features(struct net_device *netdev, netdev_features_t features);
105
106struct nfp_port *nfp_port_from_netdev(struct net_device *netdev);
107int nfp_port_get_port_parent_id(struct net_device *netdev,
108 struct netdev_phys_item_id *ppid);
109struct nfp_port *
110nfp_port_from_id(struct nfp_pf *pf, enum nfp_port_type type, unsigned int id);
111struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port);
112struct nfp_eth_table_port *nfp_port_get_eth_port(struct nfp_port *port);
113
114int
115nfp_port_get_phys_port_name(struct net_device *netdev, char *name, size_t len);
116int nfp_port_configure(struct net_device *netdev, bool configed);
117
118struct nfp_port *
119nfp_port_alloc(struct nfp_app *app, enum nfp_port_type type,
120 struct net_device *netdev);
121void nfp_port_free(struct nfp_port *port);
122
123int nfp_port_init_phy_port(struct nfp_pf *pf, struct nfp_app *app,
124 struct nfp_port *port, unsigned int id);
125
126int nfp_net_refresh_eth_port(struct nfp_port *port);
127void nfp_net_refresh_port_table(struct nfp_port *port);
128int nfp_net_refresh_port_table_sync(struct nfp_pf *pf);
129
130int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port);
131void nfp_devlink_port_unregister(struct nfp_port *port);
132void nfp_devlink_port_type_eth_set(struct nfp_port *port);
133void nfp_devlink_port_type_clear(struct nfp_port *port);
134
135
136
137
138
139#define NFP_MAC_STATS_BASE 0x0000
140#define NFP_MAC_STATS_SIZE 0x0200
141
142#define NFP_MAC_STATS_RX_IN_OCTETS (NFP_MAC_STATS_BASE + 0x000)
143
144#define NFP_MAC_STATS_RX_FRAME_TOO_LONG_ERRORS (NFP_MAC_STATS_BASE + 0x010)
145#define NFP_MAC_STATS_RX_RANGE_LENGTH_ERRORS (NFP_MAC_STATS_BASE + 0x018)
146#define NFP_MAC_STATS_RX_VLAN_RECEIVED_OK (NFP_MAC_STATS_BASE + 0x020)
147#define NFP_MAC_STATS_RX_IN_ERRORS (NFP_MAC_STATS_BASE + 0x028)
148#define NFP_MAC_STATS_RX_IN_BROADCAST_PKTS (NFP_MAC_STATS_BASE + 0x030)
149#define NFP_MAC_STATS_RX_DROP_EVENTS (NFP_MAC_STATS_BASE + 0x038)
150#define NFP_MAC_STATS_RX_ALIGNMENT_ERRORS (NFP_MAC_STATS_BASE + 0x040)
151#define NFP_MAC_STATS_RX_PAUSE_MAC_CTRL_FRAMES (NFP_MAC_STATS_BASE + 0x048)
152#define NFP_MAC_STATS_RX_FRAMES_RECEIVED_OK (NFP_MAC_STATS_BASE + 0x050)
153#define NFP_MAC_STATS_RX_FRAME_CHECK_SEQUENCE_ERRORS (NFP_MAC_STATS_BASE + 0x058)
154#define NFP_MAC_STATS_RX_UNICAST_PKTS (NFP_MAC_STATS_BASE + 0x060)
155#define NFP_MAC_STATS_RX_MULTICAST_PKTS (NFP_MAC_STATS_BASE + 0x068)
156#define NFP_MAC_STATS_RX_PKTS (NFP_MAC_STATS_BASE + 0x070)
157#define NFP_MAC_STATS_RX_UNDERSIZE_PKTS (NFP_MAC_STATS_BASE + 0x078)
158#define NFP_MAC_STATS_RX_PKTS_64_OCTETS (NFP_MAC_STATS_BASE + 0x080)
159#define NFP_MAC_STATS_RX_PKTS_65_TO_127_OCTETS (NFP_MAC_STATS_BASE + 0x088)
160#define NFP_MAC_STATS_RX_PKTS_512_TO_1023_OCTETS (NFP_MAC_STATS_BASE + 0x090)
161#define NFP_MAC_STATS_RX_PKTS_1024_TO_1518_OCTETS (NFP_MAC_STATS_BASE + 0x098)
162#define NFP_MAC_STATS_RX_JABBERS (NFP_MAC_STATS_BASE + 0x0a0)
163#define NFP_MAC_STATS_RX_FRAGMENTS (NFP_MAC_STATS_BASE + 0x0a8)
164#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS2 (NFP_MAC_STATS_BASE + 0x0b0)
165#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS3 (NFP_MAC_STATS_BASE + 0x0b8)
166#define NFP_MAC_STATS_RX_PKTS_128_TO_255_OCTETS (NFP_MAC_STATS_BASE + 0x0c0)
167#define NFP_MAC_STATS_RX_PKTS_256_TO_511_OCTETS (NFP_MAC_STATS_BASE + 0x0c8)
168#define NFP_MAC_STATS_RX_PKTS_1519_TO_MAX_OCTETS (NFP_MAC_STATS_BASE + 0x0d0)
169#define NFP_MAC_STATS_RX_OVERSIZE_PKTS (NFP_MAC_STATS_BASE + 0x0d8)
170#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS0 (NFP_MAC_STATS_BASE + 0x0e0)
171#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS1 (NFP_MAC_STATS_BASE + 0x0e8)
172#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS4 (NFP_MAC_STATS_BASE + 0x0f0)
173#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS5 (NFP_MAC_STATS_BASE + 0x0f8)
174#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS6 (NFP_MAC_STATS_BASE + 0x100)
175#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS7 (NFP_MAC_STATS_BASE + 0x108)
176#define NFP_MAC_STATS_RX_MAC_CTRL_FRAMES_RECEIVED (NFP_MAC_STATS_BASE + 0x110)
177#define NFP_MAC_STATS_RX_MAC_HEAD_DROP (NFP_MAC_STATS_BASE + 0x118)
178
179
180
181#define NFP_MAC_STATS_TX_QUEUE_DROP (NFP_MAC_STATS_BASE + 0x138)
182#define NFP_MAC_STATS_TX_OUT_OCTETS (NFP_MAC_STATS_BASE + 0x140)
183
184#define NFP_MAC_STATS_TX_VLAN_TRANSMITTED_OK (NFP_MAC_STATS_BASE + 0x150)
185#define NFP_MAC_STATS_TX_OUT_ERRORS (NFP_MAC_STATS_BASE + 0x158)
186#define NFP_MAC_STATS_TX_BROADCAST_PKTS (NFP_MAC_STATS_BASE + 0x160)
187#define NFP_MAC_STATS_TX_PKTS_64_OCTETS (NFP_MAC_STATS_BASE + 0x168)
188#define NFP_MAC_STATS_TX_PKTS_256_TO_511_OCTETS (NFP_MAC_STATS_BASE + 0x170)
189#define NFP_MAC_STATS_TX_PKTS_512_TO_1023_OCTETS (NFP_MAC_STATS_BASE + 0x178)
190#define NFP_MAC_STATS_TX_PAUSE_MAC_CTRL_FRAMES (NFP_MAC_STATS_BASE + 0x180)
191#define NFP_MAC_STATS_TX_FRAMES_TRANSMITTED_OK (NFP_MAC_STATS_BASE + 0x188)
192#define NFP_MAC_STATS_TX_UNICAST_PKTS (NFP_MAC_STATS_BASE + 0x190)
193#define NFP_MAC_STATS_TX_MULTICAST_PKTS (NFP_MAC_STATS_BASE + 0x198)
194#define NFP_MAC_STATS_TX_PKTS_65_TO_127_OCTETS (NFP_MAC_STATS_BASE + 0x1a0)
195#define NFP_MAC_STATS_TX_PKTS_128_TO_255_OCTETS (NFP_MAC_STATS_BASE + 0x1a8)
196#define NFP_MAC_STATS_TX_PKTS_1024_TO_1518_OCTETS (NFP_MAC_STATS_BASE + 0x1b0)
197#define NFP_MAC_STATS_TX_PKTS_1519_TO_MAX_OCTETS (NFP_MAC_STATS_BASE + 0x1b8)
198#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS0 (NFP_MAC_STATS_BASE + 0x1c0)
199#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS1 (NFP_MAC_STATS_BASE + 0x1c8)
200#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS4 (NFP_MAC_STATS_BASE + 0x1d0)
201#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS5 (NFP_MAC_STATS_BASE + 0x1d8)
202#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS2 (NFP_MAC_STATS_BASE + 0x1e0)
203#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS3 (NFP_MAC_STATS_BASE + 0x1e8)
204#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS6 (NFP_MAC_STATS_BASE + 0x1f0)
205#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS7 (NFP_MAC_STATS_BASE + 0x1f8)
206
207#endif
208