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
95__printf(2, 3) u8 *nfp_pr_et(u8 *data, const char *fmt, ...);
96
97int nfp_port_setup_tc(struct net_device *netdev, enum tc_setup_type type,
98 void *type_data);
99
100static inline bool nfp_port_is_vnic(const struct nfp_port *port)
101{
102 return port->type == NFP_PORT_PF_PORT || port->type == NFP_PORT_VF_PORT;
103}
104
105int
106nfp_port_set_features(struct net_device *netdev, netdev_features_t features);
107
108struct nfp_port *nfp_port_from_netdev(struct net_device *netdev);
109int nfp_port_get_port_parent_id(struct net_device *netdev,
110 struct netdev_phys_item_id *ppid);
111struct nfp_port *
112nfp_port_from_id(struct nfp_pf *pf, enum nfp_port_type type, unsigned int id);
113struct nfp_eth_table_port *__nfp_port_get_eth_port(struct nfp_port *port);
114struct nfp_eth_table_port *nfp_port_get_eth_port(struct nfp_port *port);
115
116int
117nfp_port_get_phys_port_name(struct net_device *netdev, char *name, size_t len);
118int nfp_port_configure(struct net_device *netdev, bool configed);
119
120struct nfp_port *
121nfp_port_alloc(struct nfp_app *app, enum nfp_port_type type,
122 struct net_device *netdev);
123void nfp_port_free(struct nfp_port *port);
124
125int nfp_port_init_phy_port(struct nfp_pf *pf, struct nfp_app *app,
126 struct nfp_port *port, unsigned int id);
127
128int nfp_net_refresh_eth_port(struct nfp_port *port);
129void nfp_net_refresh_port_table(struct nfp_port *port);
130int nfp_net_refresh_port_table_sync(struct nfp_pf *pf);
131
132int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port);
133void nfp_devlink_port_unregister(struct nfp_port *port);
134void nfp_devlink_port_type_eth_set(struct nfp_port *port);
135void nfp_devlink_port_type_clear(struct nfp_port *port);
136
137
138
139
140
141#define NFP_MAC_STATS_BASE 0x0000
142#define NFP_MAC_STATS_SIZE 0x0200
143
144#define NFP_MAC_STATS_RX_IN_OCTETS (NFP_MAC_STATS_BASE + 0x000)
145
146#define NFP_MAC_STATS_RX_FRAME_TOO_LONG_ERRORS (NFP_MAC_STATS_BASE + 0x010)
147#define NFP_MAC_STATS_RX_RANGE_LENGTH_ERRORS (NFP_MAC_STATS_BASE + 0x018)
148#define NFP_MAC_STATS_RX_VLAN_RECEIVED_OK (NFP_MAC_STATS_BASE + 0x020)
149#define NFP_MAC_STATS_RX_IN_ERRORS (NFP_MAC_STATS_BASE + 0x028)
150#define NFP_MAC_STATS_RX_IN_BROADCAST_PKTS (NFP_MAC_STATS_BASE + 0x030)
151#define NFP_MAC_STATS_RX_DROP_EVENTS (NFP_MAC_STATS_BASE + 0x038)
152#define NFP_MAC_STATS_RX_ALIGNMENT_ERRORS (NFP_MAC_STATS_BASE + 0x040)
153#define NFP_MAC_STATS_RX_PAUSE_MAC_CTRL_FRAMES (NFP_MAC_STATS_BASE + 0x048)
154#define NFP_MAC_STATS_RX_FRAMES_RECEIVED_OK (NFP_MAC_STATS_BASE + 0x050)
155#define NFP_MAC_STATS_RX_FRAME_CHECK_SEQUENCE_ERRORS (NFP_MAC_STATS_BASE + 0x058)
156#define NFP_MAC_STATS_RX_UNICAST_PKTS (NFP_MAC_STATS_BASE + 0x060)
157#define NFP_MAC_STATS_RX_MULTICAST_PKTS (NFP_MAC_STATS_BASE + 0x068)
158#define NFP_MAC_STATS_RX_PKTS (NFP_MAC_STATS_BASE + 0x070)
159#define NFP_MAC_STATS_RX_UNDERSIZE_PKTS (NFP_MAC_STATS_BASE + 0x078)
160#define NFP_MAC_STATS_RX_PKTS_64_OCTETS (NFP_MAC_STATS_BASE + 0x080)
161#define NFP_MAC_STATS_RX_PKTS_65_TO_127_OCTETS (NFP_MAC_STATS_BASE + 0x088)
162#define NFP_MAC_STATS_RX_PKTS_512_TO_1023_OCTETS (NFP_MAC_STATS_BASE + 0x090)
163#define NFP_MAC_STATS_RX_PKTS_1024_TO_1518_OCTETS (NFP_MAC_STATS_BASE + 0x098)
164#define NFP_MAC_STATS_RX_JABBERS (NFP_MAC_STATS_BASE + 0x0a0)
165#define NFP_MAC_STATS_RX_FRAGMENTS (NFP_MAC_STATS_BASE + 0x0a8)
166#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS2 (NFP_MAC_STATS_BASE + 0x0b0)
167#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS3 (NFP_MAC_STATS_BASE + 0x0b8)
168#define NFP_MAC_STATS_RX_PKTS_128_TO_255_OCTETS (NFP_MAC_STATS_BASE + 0x0c0)
169#define NFP_MAC_STATS_RX_PKTS_256_TO_511_OCTETS (NFP_MAC_STATS_BASE + 0x0c8)
170#define NFP_MAC_STATS_RX_PKTS_1519_TO_MAX_OCTETS (NFP_MAC_STATS_BASE + 0x0d0)
171#define NFP_MAC_STATS_RX_OVERSIZE_PKTS (NFP_MAC_STATS_BASE + 0x0d8)
172#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS0 (NFP_MAC_STATS_BASE + 0x0e0)
173#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS1 (NFP_MAC_STATS_BASE + 0x0e8)
174#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS4 (NFP_MAC_STATS_BASE + 0x0f0)
175#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS5 (NFP_MAC_STATS_BASE + 0x0f8)
176#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS6 (NFP_MAC_STATS_BASE + 0x100)
177#define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS7 (NFP_MAC_STATS_BASE + 0x108)
178#define NFP_MAC_STATS_RX_MAC_CTRL_FRAMES_RECEIVED (NFP_MAC_STATS_BASE + 0x110)
179#define NFP_MAC_STATS_RX_MAC_HEAD_DROP (NFP_MAC_STATS_BASE + 0x118)
180
181
182
183#define NFP_MAC_STATS_TX_QUEUE_DROP (NFP_MAC_STATS_BASE + 0x138)
184#define NFP_MAC_STATS_TX_OUT_OCTETS (NFP_MAC_STATS_BASE + 0x140)
185
186#define NFP_MAC_STATS_TX_VLAN_TRANSMITTED_OK (NFP_MAC_STATS_BASE + 0x150)
187#define NFP_MAC_STATS_TX_OUT_ERRORS (NFP_MAC_STATS_BASE + 0x158)
188#define NFP_MAC_STATS_TX_BROADCAST_PKTS (NFP_MAC_STATS_BASE + 0x160)
189#define NFP_MAC_STATS_TX_PKTS_64_OCTETS (NFP_MAC_STATS_BASE + 0x168)
190#define NFP_MAC_STATS_TX_PKTS_256_TO_511_OCTETS (NFP_MAC_STATS_BASE + 0x170)
191#define NFP_MAC_STATS_TX_PKTS_512_TO_1023_OCTETS (NFP_MAC_STATS_BASE + 0x178)
192#define NFP_MAC_STATS_TX_PAUSE_MAC_CTRL_FRAMES (NFP_MAC_STATS_BASE + 0x180)
193#define NFP_MAC_STATS_TX_FRAMES_TRANSMITTED_OK (NFP_MAC_STATS_BASE + 0x188)
194#define NFP_MAC_STATS_TX_UNICAST_PKTS (NFP_MAC_STATS_BASE + 0x190)
195#define NFP_MAC_STATS_TX_MULTICAST_PKTS (NFP_MAC_STATS_BASE + 0x198)
196#define NFP_MAC_STATS_TX_PKTS_65_TO_127_OCTETS (NFP_MAC_STATS_BASE + 0x1a0)
197#define NFP_MAC_STATS_TX_PKTS_128_TO_255_OCTETS (NFP_MAC_STATS_BASE + 0x1a8)
198#define NFP_MAC_STATS_TX_PKTS_1024_TO_1518_OCTETS (NFP_MAC_STATS_BASE + 0x1b0)
199#define NFP_MAC_STATS_TX_PKTS_1519_TO_MAX_OCTETS (NFP_MAC_STATS_BASE + 0x1b8)
200#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS0 (NFP_MAC_STATS_BASE + 0x1c0)
201#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS1 (NFP_MAC_STATS_BASE + 0x1c8)
202#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS4 (NFP_MAC_STATS_BASE + 0x1d0)
203#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS5 (NFP_MAC_STATS_BASE + 0x1d8)
204#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS2 (NFP_MAC_STATS_BASE + 0x1e0)
205#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS3 (NFP_MAC_STATS_BASE + 0x1e8)
206#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS6 (NFP_MAC_STATS_BASE + 0x1f0)
207#define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS7 (NFP_MAC_STATS_BASE + 0x1f8)
208
209#endif
210