18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/****************************************************************************
38c2ecf20Sopenharmony_ci * Driver for Solarflare network controllers and boards
48c2ecf20Sopenharmony_ci * Copyright 2018 Solarflare Communications Inc.
58c2ecf20Sopenharmony_ci * Copyright 2019-2020 Xilinx Inc.
68c2ecf20Sopenharmony_ci *
78c2ecf20Sopenharmony_ci * This program is free software; you can redistribute it and/or modify it
88c2ecf20Sopenharmony_ci * under the terms of the GNU General Public License version 2 as published
98c2ecf20Sopenharmony_ci * by the Free Software Foundation, incorporated herein by reference.
108c2ecf20Sopenharmony_ci */
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include "net_driver.h"
138c2ecf20Sopenharmony_ci#include "nic_common.h"
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ciextern const struct efx_nic_type ef100_pf_nic_type;
168c2ecf20Sopenharmony_ciextern const struct efx_nic_type ef100_vf_nic_type;
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_ciint ef100_probe_pf(struct efx_nic *efx);
198c2ecf20Sopenharmony_ciint ef100_probe_vf(struct efx_nic *efx);
208c2ecf20Sopenharmony_civoid ef100_remove(struct efx_nic *efx);
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cienum {
238c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_bytes = GENERIC_STAT_COUNT,
248c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_packets,
258c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_pause,
268c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_unicast,
278c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_multicast,
288c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_broadcast,
298c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_lt64,
308c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_64,
318c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_65_to_127,
328c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_128_to_255,
338c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_256_to_511,
348c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_512_to_1023,
358c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_1024_to_15xx,
368c2ecf20Sopenharmony_ci	EF100_STAT_port_tx_15xx_to_jumbo,
378c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_bytes,
388c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_packets,
398c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_good,
408c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_bad,
418c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_pause,
428c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_unicast,
438c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_multicast,
448c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_broadcast,
458c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_lt64,
468c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_64,
478c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_65_to_127,
488c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_128_to_255,
498c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_256_to_511,
508c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_512_to_1023,
518c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_1024_to_15xx,
528c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_15xx_to_jumbo,
538c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_gtjumbo,
548c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_bad_gtjumbo,
558c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_align_error,
568c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_length_error,
578c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_overflow,
588c2ecf20Sopenharmony_ci	EF100_STAT_port_rx_nodesc_drops,
598c2ecf20Sopenharmony_ci	EF100_STAT_COUNT
608c2ecf20Sopenharmony_ci};
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_cistruct ef100_nic_data {
638c2ecf20Sopenharmony_ci	struct efx_nic *efx;
648c2ecf20Sopenharmony_ci	struct efx_buffer mcdi_buf;
658c2ecf20Sopenharmony_ci	u32 datapath_caps;
668c2ecf20Sopenharmony_ci	u32 datapath_caps2;
678c2ecf20Sopenharmony_ci	u32 datapath_caps3;
688c2ecf20Sopenharmony_ci	unsigned int pf_index;
698c2ecf20Sopenharmony_ci	u16 warm_boot_count;
708c2ecf20Sopenharmony_ci	u8 port_id[ETH_ALEN];
718c2ecf20Sopenharmony_ci	DECLARE_BITMAP(evq_phases, EFX_MAX_CHANNELS);
728c2ecf20Sopenharmony_ci	u64 stats[EF100_STAT_COUNT];
738c2ecf20Sopenharmony_ci	u16 tso_max_hdr_len;
748c2ecf20Sopenharmony_ci	u16 tso_max_payload_num_segs;
758c2ecf20Sopenharmony_ci	u16 tso_max_frames;
768c2ecf20Sopenharmony_ci	unsigned int tso_max_payload_len;
778c2ecf20Sopenharmony_ci};
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ci#define efx_ef100_has_cap(caps, flag) \
808c2ecf20Sopenharmony_ci	(!!((caps) & BIT_ULL(MC_CMD_GET_CAPABILITIES_V4_OUT_ ## flag ## _LBN)))
81