drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c

Source file repositories/reference/linux-study-clean/drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c

File Facts

System
Linux kernel
Corpus path
drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c
Extension
.c
Size
51395 bytes
Lines
1288
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: GPL-2.0+
/* Microchip Sparx5 Switch driver
 *
 * Copyright (c) 2021 Microchip Technology Inc. and its subsidiaries.
 */

#include <linux/ethtool.h>

#include "sparx5_main_regs.h"
#include "sparx5_main.h"
#include "sparx5_port.h"

/* Index of ANA_AC port counters */
#define SPX5_PORT_POLICER_DROPS 0

/* Add a potentially wrapping 32 bit value to a 64 bit counter */
static void sparx5_update_counter(u64 *cnt, u32 val)
{
	if (val < (*cnt & U32_MAX))
		*cnt += (u64)1 << 32; /* value has wrapped */
	*cnt = (*cnt & ~(u64)U32_MAX) + val;
}

enum sparx5_stats_entry {
	spx5_stats_rx_symbol_err_cnt = 0,
	spx5_stats_pmac_rx_symbol_err_cnt = 1,
	spx5_stats_tx_uc_cnt = 2,
	spx5_stats_pmac_tx_uc_cnt = 3,
	spx5_stats_tx_mc_cnt = 4,
	spx5_stats_tx_bc_cnt = 5,
	spx5_stats_tx_backoff1_cnt = 6,
	spx5_stats_tx_multi_coll_cnt = 7,
	spx5_stats_rx_uc_cnt = 8,
	spx5_stats_pmac_rx_uc_cnt = 9,
	spx5_stats_rx_mc_cnt = 10,
	spx5_stats_rx_bc_cnt = 11,
	spx5_stats_rx_crc_err_cnt = 12,
	spx5_stats_pmac_rx_crc_err_cnt = 13,
	spx5_stats_rx_alignment_lost_cnt = 14,
	spx5_stats_pmac_rx_alignment_lost_cnt = 15,
	spx5_stats_tx_ok_bytes_cnt = 16,
	spx5_stats_pmac_tx_ok_bytes_cnt = 17,
	spx5_stats_tx_defer_cnt = 18,
	spx5_stats_tx_late_coll_cnt = 19,
	spx5_stats_tx_xcoll_cnt = 20,
	spx5_stats_tx_csense_cnt = 21,
	spx5_stats_rx_ok_bytes_cnt = 22,
	spx5_stats_pmac_rx_ok_bytes_cnt = 23,
	spx5_stats_pmac_tx_mc_cnt = 24,
	spx5_stats_pmac_tx_bc_cnt = 25,
	spx5_stats_tx_xdefer_cnt = 26,
	spx5_stats_pmac_rx_mc_cnt = 27,
	spx5_stats_pmac_rx_bc_cnt = 28,
	spx5_stats_rx_in_range_len_err_cnt = 29,
	spx5_stats_pmac_rx_in_range_len_err_cnt = 30,
	spx5_stats_rx_out_of_range_len_err_cnt = 31,
	spx5_stats_pmac_rx_out_of_range_len_err_cnt = 32,
	spx5_stats_rx_oversize_cnt = 33,
	spx5_stats_pmac_rx_oversize_cnt = 34,
	spx5_stats_tx_pause_cnt = 35,
	spx5_stats_pmac_tx_pause_cnt = 36,
	spx5_stats_rx_pause_cnt = 37,
	spx5_stats_pmac_rx_pause_cnt = 38,
	spx5_stats_rx_unsup_opcode_cnt = 39,
	spx5_stats_pmac_rx_unsup_opcode_cnt = 40,
	spx5_stats_rx_undersize_cnt = 41,
	spx5_stats_pmac_rx_undersize_cnt = 42,
	spx5_stats_rx_fragments_cnt = 43,
	spx5_stats_pmac_rx_fragments_cnt = 44,
	spx5_stats_rx_jabbers_cnt = 45,
	spx5_stats_pmac_rx_jabbers_cnt = 46,
	spx5_stats_rx_size64_cnt = 47,
	spx5_stats_pmac_rx_size64_cnt = 48,
	spx5_stats_rx_size65to127_cnt = 49,
	spx5_stats_pmac_rx_size65to127_cnt = 50,
	spx5_stats_rx_size128to255_cnt = 51,
	spx5_stats_pmac_rx_size128to255_cnt = 52,
	spx5_stats_rx_size256to511_cnt = 53,
	spx5_stats_pmac_rx_size256to511_cnt = 54,
	spx5_stats_rx_size512to1023_cnt = 55,
	spx5_stats_pmac_rx_size512to1023_cnt = 56,
	spx5_stats_rx_size1024to1518_cnt = 57,
	spx5_stats_pmac_rx_size1024to1518_cnt = 58,
	spx5_stats_rx_size1519tomax_cnt = 59,
	spx5_stats_pmac_rx_size1519tomax_cnt = 60,
	spx5_stats_tx_size64_cnt = 61,
	spx5_stats_pmac_tx_size64_cnt = 62,
	spx5_stats_tx_size65to127_cnt = 63,
	spx5_stats_pmac_tx_size65to127_cnt = 64,
	spx5_stats_tx_size128to255_cnt = 65,

Annotation

Implementation Notes