1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /**************************************************************************** |
3 | * Driver for Solarflare network controllers and boards |
4 | * Copyright 2018 Solarflare Communications Inc. |
5 | * Copyright 2019-2020 Xilinx Inc. |
6 | * |
7 | * This program is free software; you can redistribute it and/or modify it |
8 | * under the terms of the GNU General Public License version 2 as published |
9 | * by the Free Software Foundation, incorporated herein by reference. |
10 | */ |
11 | #ifndef EFX_EF100_NIC_H |
12 | #define EFX_EF100_NIC_H |
13 | |
14 | #include "net_driver.h" |
15 | #include "nic_common.h" |
16 | |
17 | extern const struct efx_nic_type ef100_pf_nic_type; |
18 | extern const struct efx_nic_type ef100_vf_nic_type; |
19 | |
20 | int ef100_probe_netdev_pf(struct efx_nic *efx); |
21 | int ef100_probe_vf(struct efx_nic *efx); |
22 | void ef100_remove(struct efx_nic *efx); |
23 | |
24 | enum { |
25 | EF100_STAT_port_tx_bytes = GENERIC_STAT_COUNT, |
26 | EF100_STAT_port_tx_packets, |
27 | EF100_STAT_port_tx_pause, |
28 | EF100_STAT_port_tx_unicast, |
29 | EF100_STAT_port_tx_multicast, |
30 | EF100_STAT_port_tx_broadcast, |
31 | EF100_STAT_port_tx_lt64, |
32 | EF100_STAT_port_tx_64, |
33 | EF100_STAT_port_tx_65_to_127, |
34 | EF100_STAT_port_tx_128_to_255, |
35 | EF100_STAT_port_tx_256_to_511, |
36 | EF100_STAT_port_tx_512_to_1023, |
37 | EF100_STAT_port_tx_1024_to_15xx, |
38 | EF100_STAT_port_tx_15xx_to_jumbo, |
39 | EF100_STAT_port_rx_bytes, |
40 | EF100_STAT_port_rx_packets, |
41 | EF100_STAT_port_rx_good, |
42 | EF100_STAT_port_rx_bad, |
43 | EF100_STAT_port_rx_pause, |
44 | EF100_STAT_port_rx_unicast, |
45 | EF100_STAT_port_rx_multicast, |
46 | EF100_STAT_port_rx_broadcast, |
47 | EF100_STAT_port_rx_lt64, |
48 | EF100_STAT_port_rx_64, |
49 | EF100_STAT_port_rx_65_to_127, |
50 | EF100_STAT_port_rx_128_to_255, |
51 | EF100_STAT_port_rx_256_to_511, |
52 | EF100_STAT_port_rx_512_to_1023, |
53 | EF100_STAT_port_rx_1024_to_15xx, |
54 | EF100_STAT_port_rx_15xx_to_jumbo, |
55 | EF100_STAT_port_rx_gtjumbo, |
56 | EF100_STAT_port_rx_bad_gtjumbo, |
57 | EF100_STAT_port_rx_align_error, |
58 | EF100_STAT_port_rx_length_error, |
59 | EF100_STAT_port_rx_overflow, |
60 | EF100_STAT_port_rx_nodesc_drops, |
61 | EF100_STAT_COUNT |
62 | }; |
63 | |
64 | struct ef100_nic_data { |
65 | struct efx_nic *efx; |
66 | struct efx_buffer mcdi_buf; |
67 | u32 datapath_caps; |
68 | u32 datapath_caps2; |
69 | u32 datapath_caps3; |
70 | unsigned int pf_index; |
71 | u16 warm_boot_count; |
72 | u8 port_id[ETH_ALEN]; |
73 | DECLARE_BITMAP(evq_phases, EFX_MAX_CHANNELS); |
74 | u64 stats[EF100_STAT_COUNT]; |
75 | u32 base_mport; |
76 | bool have_mport; /* base_mport was populated successfully */ |
77 | u32 own_mport; |
78 | u32 local_mae_intf; /* interface_idx that corresponds to us, in mport enumerate */ |
79 | bool have_own_mport; /* own_mport was populated successfully */ |
80 | bool have_local_intf; /* local_mae_intf was populated successfully */ |
81 | bool grp_mae; /* MAE Privilege */ |
82 | u16 tso_max_hdr_len; |
83 | u16 tso_max_payload_num_segs; |
84 | u16 tso_max_frames; |
85 | unsigned int tso_max_payload_len; |
86 | }; |
87 | |
88 | #define efx_ef100_has_cap(caps, flag) \ |
89 | (!!((caps) & BIT_ULL(MC_CMD_GET_CAPABILITIES_V4_OUT_ ## flag ## _LBN))) |
90 | |
91 | int efx_ef100_init_datapath_caps(struct efx_nic *efx); |
92 | int ef100_phy_probe(struct efx_nic *efx); |
93 | int ef100_filter_table_probe(struct efx_nic *efx); |
94 | |
95 | int ef100_get_mac_address(struct efx_nic *efx, u8 *mac_address, |
96 | int client_handle, bool empty_ok); |
97 | int efx_ef100_lookup_client_id(struct efx_nic *efx, efx_qword_t pciefn, u32 *id); |
98 | #endif /* EFX_EF100_NIC_H */ |
99 | |