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