drivers/net/ethernet/hisilicon/hibmcge/hbg_ethtool.c
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/hisilicon/hibmcge/hbg_ethtool.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/hisilicon/hibmcge/hbg_ethtool.c- Extension
.c- Size
- 17946 bytes
- Lines
- 501
- 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.
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/ethtool.hlinux/phy.hlinux/rtnetlink.hhbg_common.hhbg_err.hhbg_ethtool.hhbg_hw.h
Detected Declarations
struct hbg_ethtool_statsstruct hbg_reg_infoenum hbg_reg_dump_typefunction hbg_ethtool_get_regs_lenfunction hbg_ethtool_get_regsfunction hbg_ethtool_get_pauseparamfunction hbg_ethtool_set_pauseparamfunction hbg_ethtool_resetfunction hbg_update_stats_by_infofunction hbg_update_statsfunction hbg_ethtool_get_sset_countfunction hbg_ethtool_get_stringsfunction hbg_ethtool_get_statsfunction hbg_ethtool_get_pause_statsfunction hbg_ethtool_get_eth_mac_statsfunction hbg_ethtool_get_eth_ctrl_statsfunction hbg_ethtool_get_rmon_statsfunction hbg_ethtool_set_ops
Annotated Snippet
struct hbg_ethtool_stats {
char name[ETH_GSTRING_LEN];
unsigned long offset;
u32 reg; /* set to 0 if stats is not updated via dump reg */
};
#define HBG_STATS_I(stats) { #stats, HBG_STATS_FIELD_OFF(stats), 0}
#define HBG_STATS_REG_I(stats, reg) { #stats, HBG_STATS_FIELD_OFF(stats), reg}
static const struct hbg_ethtool_stats hbg_ethtool_stats_info[] = {
HBG_STATS_I(rx_desc_l2_err_cnt),
HBG_STATS_I(rx_desc_pkt_len_err_cnt),
HBG_STATS_I(rx_desc_l3_wrong_head_cnt),
HBG_STATS_I(rx_desc_l3_csum_err_cnt),
HBG_STATS_I(rx_desc_l3_len_err_cnt),
HBG_STATS_I(rx_desc_l3_zero_ttl_cnt),
HBG_STATS_I(rx_desc_l3_other_cnt),
HBG_STATS_I(rx_desc_l4_wrong_head_cnt),
HBG_STATS_I(rx_desc_l4_len_err_cnt),
HBG_STATS_I(rx_desc_l4_csum_err_cnt),
HBG_STATS_I(rx_desc_l4_zero_port_num_cnt),
HBG_STATS_I(rx_desc_l4_other_cnt),
HBG_STATS_I(rx_desc_ip_ver_err_cnt),
HBG_STATS_I(rx_desc_ipv4_pkt_cnt),
HBG_STATS_I(rx_desc_ipv6_pkt_cnt),
HBG_STATS_I(rx_desc_no_ip_pkt_cnt),
HBG_STATS_I(rx_desc_ip_pkt_cnt),
HBG_STATS_I(rx_desc_tcp_pkt_cnt),
HBG_STATS_I(rx_desc_udp_pkt_cnt),
HBG_STATS_I(rx_desc_vlan_pkt_cnt),
HBG_STATS_I(rx_desc_icmp_pkt_cnt),
HBG_STATS_I(rx_desc_arp_pkt_cnt),
HBG_STATS_I(rx_desc_rarp_pkt_cnt),
HBG_STATS_I(rx_desc_multicast_pkt_cnt),
HBG_STATS_I(rx_desc_broadcast_pkt_cnt),
HBG_STATS_I(rx_desc_ipsec_pkt_cnt),
HBG_STATS_I(rx_desc_ip_opt_pkt_cnt),
HBG_STATS_I(rx_desc_key_not_match_cnt),
HBG_STATS_REG_I(rx_octets_bad_cnt, HBG_REG_RX_OCTETS_BAD_ADDR),
HBG_STATS_REG_I(rx_octets_total_filt_cnt,
HBG_REG_RX_OCTETS_TOTAL_FILT_ADDR),
HBG_STATS_REG_I(rx_uc_pkt_cnt, HBG_REG_RX_UC_PKTS_ADDR),
HBG_STATS_REG_I(rx_vlan_pkt_cnt, HBG_REG_RX_TAGGED_ADDR),
HBG_STATS_REG_I(rx_filt_pkt_cnt, HBG_REG_RX_FILT_PKT_CNT_ADDR),
HBG_STATS_REG_I(rx_data_error_cnt, HBG_REG_RX_DATA_ERR_ADDR),
HBG_STATS_REG_I(rx_frame_long_err_cnt, HBG_REG_RX_LONG_ERRORS_ADDR),
HBG_STATS_REG_I(rx_jabber_err_cnt, HBG_REG_RX_JABBER_ERRORS_ADDR),
HBG_STATS_REG_I(rx_frame_very_long_err_cnt,
HBG_REG_RX_VERY_LONG_ERR_CNT_ADDR),
HBG_STATS_REG_I(rx_frame_runt_err_cnt, HBG_REG_RX_RUNT_ERR_CNT_ADDR),
HBG_STATS_REG_I(rx_frame_short_err_cnt, HBG_REG_RX_SHORT_ERR_CNT_ADDR),
HBG_STATS_REG_I(rx_overflow_cnt, HBG_REG_RX_OVER_FLOW_CNT_ADDR),
HBG_STATS_REG_I(rx_bufrq_err_cnt, HBG_REG_RX_BUFRQ_ERR_CNT_ADDR),
HBG_STATS_REG_I(rx_we_err_cnt, HBG_REG_RX_WE_ERR_CNT_ADDR),
HBG_STATS_REG_I(rx_overrun_cnt, HBG_REG_RX_OVERRUN_CNT_ADDR),
HBG_STATS_REG_I(rx_lengthfield_err_cnt,
HBG_REG_RX_LENGTHFIELD_ERR_CNT_ADDR),
HBG_STATS_REG_I(rx_fail_comma_cnt, HBG_REG_RX_FAIL_COMMA_CNT_ADDR),
HBG_STATS_I(rx_dma_err_cnt),
HBG_STATS_I(rx_fifo_less_empty_thrsld_cnt),
HBG_STATS_REG_I(tx_uc_pkt_cnt, HBG_REG_TX_UC_PKTS_ADDR),
HBG_STATS_REG_I(tx_vlan_pkt_cnt, HBG_REG_TX_TAGGED_ADDR),
HBG_STATS_REG_I(tx_octets_bad_cnt, HBG_REG_OCTETS_TRANSMITTED_BAD_ADDR),
HBG_STATS_REG_I(tx_underrun_err_cnt, HBG_REG_TX_UNDERRUN_ADDR),
HBG_STATS_REG_I(tx_add_cs_fail_cnt, HBG_REG_TX_CS_FAIL_CNT_ADDR),
HBG_STATS_REG_I(tx_bufrl_err_cnt, HBG_REG_TX_BUFRL_ERR_CNT_ADDR),
HBG_STATS_REG_I(tx_crc_err_cnt, HBG_REG_TX_CRC_ERROR_ADDR),
HBG_STATS_REG_I(tx_drop_cnt, HBG_REG_TX_DROP_CNT_ADDR),
HBG_STATS_REG_I(tx_excessive_length_drop_cnt,
HBG_REG_TX_EXCESSIVE_LENGTH_DROP_ADDR),
HBG_STATS_I(tx_dma_err_cnt),
HBG_STATS_I(tx_timeout_cnt),
HBG_STATS_I(reset_fail_cnt),
};
static const struct hbg_ethtool_stats hbg_ethtool_rmon_stats_info[] = {
HBG_STATS_I(rx_desc_frag_cnt),
HBG_STATS_REG_I(rx_framesize_64, HBG_REG_RX_PKTS_64OCTETS_ADDR),
HBG_STATS_REG_I(rx_framesize_65_127,
HBG_REG_RX_PKTS_65TO127OCTETS_ADDR),
HBG_STATS_REG_I(rx_framesize_128_255,
HBG_REG_RX_PKTS_128TO255OCTETS_ADDR),
HBG_STATS_REG_I(rx_framesize_256_511,
HBG_REG_RX_PKTS_256TO511OCTETS_ADDR),
HBG_STATS_REG_I(rx_framesize_512_1023,
HBG_REG_RX_PKTS_512TO1023OCTETS_ADDR),
HBG_STATS_REG_I(rx_framesize_1024_1518,
Annotation
- Immediate include surface: `linux/ethtool.h`, `linux/phy.h`, `linux/rtnetlink.h`, `hbg_common.h`, `hbg_err.h`, `hbg_ethtool.h`, `hbg_hw.h`.
- Detected declarations: `struct hbg_ethtool_stats`, `struct hbg_reg_info`, `enum hbg_reg_dump_type`, `function hbg_ethtool_get_regs_len`, `function hbg_ethtool_get_regs`, `function hbg_ethtool_get_pauseparam`, `function hbg_ethtool_set_pauseparam`, `function hbg_ethtool_reset`, `function hbg_update_stats_by_info`, `function hbg_update_stats`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.