STRUCT EFX_EF10_NIC_DATA(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct efx_ef10_nic_data(9) β€” like, the EF10 architecture NIC state, bestie

okay so this is a page from the Kernel API Manual, and it's literally all about struct efx_ef10_nic_data, which is the EF10 architecture NIC state. yes. the whole vibe. come sit with me 🫢


✨ NAME ✨

struct efx_ef10_nic_data β€” EF10 architecture NIC state, no cap πŸ’…


🌸 SYNOPSIS 🌸

here's the whole struct, copied exactly, because we do not paraphrase code in this house:

struct efx_ef10_nic_data {
    struct efx_buffer mcdi_buf;
    u16 warm_boot_count;
    unsigned int vi_base;
    unsigned int n_allocated_vis;
    unsigned int n_piobufs;
    void __iomem *wc_membase, *pio_write_base;
    unsigned int pio_write_vi_base;
    unsigned int piobuf_handle[EF10_TX_PIOBUF_COUNT];
    u16 piobuf_size;
    bool must_restore_piobufs;
    __le64 *mc_stats;
    u64 stats[EF10_STAT_COUNT];
    bool workaround_35388;
    bool workaround_26807;
    bool workaround_61265;
    bool must_check_datapath_caps;
    u32 datapath_caps;
    u32 datapath_caps2;
    u32 datapath_caps3;
    unsigned int rx_dpcpu_fw_id;
    unsigned int tx_dpcpu_fw_id;
    bool must_probe_vswitching;
    unsigned int pf_index;
    u8 port_id[ETH_ALEN];
  #ifdef CONFIG_SFC_SRIOV;
    unsigned int vf_index;
    struct ef10_vf *vf;
  #endif;
    u8 vport_mac[ETH_ALEN];
    struct list_head vlan_list;
    struct mutex vlan_lock;
    struct efx_udp_tunnel udp_tunnels[16];
    bool udp_tunnels_dirty;
    struct mutex udp_tunnels_lock;
    u64 licensed_features;
 };

πŸ¦‹ Members πŸ¦‹

time for the field-by-field tour, and yes I'm gonna be excited about every single one, that's just who I am πŸ’–

  • mcdi_buf β€” the DMA buffer for MCDI. it's giving "important little scratch space" ✨
  • warm_boot_count β€” the last seen MC warm boot count. lowkey a little counter for the warm boots πŸ‘‘
  • vi_base β€” the absolute index of the first VI in this function. absolute, bestie, not relative 🌈
  • n_allocated_vis β€” how many VIs got allocated to this function. the VI headcount fr fr
  • n_piobufs β€” how many PIO buffers got allocated to this function. PIO buffer headcount, part two πŸŽ€
  • wc_membase β€” base address of the write-combining mapping of the memory BAR. that's the whole thing, I'm not adding lore
  • pio_write_base β€” base address for writing PIO buffers πŸ’…
  • pio_write_vi_base β€” the relative VI number for pio_write_base. see, relative this time, told you 🫢
  • piobuf_handle β€” handle of each PIO buffer allocated. each one. every single handle has a home here 🧚
  • piobuf_size β€” size of a single PIO buffer. one (1) buffer's size
  • must_restore_piobufs β€” a flag: the PIO buffers have yet to be restored after an MC reboot. so like, they're not back yet 😭
  • mc_stats β€” scratch buffer for converting statistics to the kernel's format. a little translation station ✨
  • stats β€” hardware statistics. the numbers themselves, iconic
  • workaround_35388 β€” flag: firmware supports the workaround for bug 35388 🩹
  • workaround_26807 β€” flag: firmware supports the workaround for bug 26807 🩹
  • workaround_61265 β€” flag: firmware supports the workaround for bug 61265 🩹 (three workarounds, three bugs, three flags, we love a pattern)
  • must_check_datapath_caps β€” flag: datapath_caps needs to be revalidated after an MC reboot. revalidate, don't skip πŸ‘€
  • datapath_caps β€” capabilities of datapath firmware, specifically the FLAGS1 field of the MC_CMD_GET_CAPABILITIES response πŸ”₯
  • datapath_caps2 β€” further capabilities of datapath firmware, the FLAGS2 field of the MC_CMD_GET_CAPABILITIES response
  • datapath_caps3 β€” further capabilities of datapath firmware, the FLAGS3 field of the MC_CMD_GET_CAPABILITIES response. yes there's a third one, she ate 🌟
  • rx_dpcpu_fw_id β€” firmware ID of the RxDPCPU πŸ‘‘
  • tx_dpcpu_fw_id β€” firmware ID of the TxDPCPU πŸ‘‘
  • must_probe_vswitching β€” flag: vswitching has yet to be set up after an MC reboot. same energy as the piobufs one, different subsystem πŸ’€
  • pf_index β€” the number for this PF, or the parent PF if this is a VF. got it? got it ✨
  • port_id β€” the Ethernet address of the owning PF, used for phys_port_id πŸŽ€
  • vf_index β€” the number for this VF, or 0xFFFF if this is a VF. that's literally what it says, I'm not touching it πŸ™ˆ
  • vf β€” for a PF, an array of VF data structures indexed by the VF's vf_index πŸ’œ
  • vport_mac β€” the MAC address on the vport, only for PFs; VFs will be zero. PFs only, bestie, read the room 🌸
  • vlan_list β€” list of VLANs added over the interface. serialised by vlan_lock. πŸ”’
  • vlan_lock β€” lock to serialize access to vlan_list. the bouncer for the VLAN list πŸ’…
  • udp_tunnels β€” UDP tunnel port numbers and types. there are 16 of them, in case you were wondering, and now you're not wondering πŸ¦‹
  • udp_tunnels_dirty β€” flag indicating a reboot happened while pushing udp_tunnels to hardware, and thus the push must be re-done. redo the push, fr fr 😭
  • udp_tunnels_lock β€” serialises writes to udp_tunnels and udp_tunnels_dirty. one at a time, please 🫢
  • licensed_features β€” flags for licensed firmware features. licensed, iconic, periodt πŸ‘‘

πŸ”₯ SEE ALSO πŸ”₯

  • Kernel file ./drivers/net/ethernet/sfc/nic.h β€” go read it, iykyk πŸ“–

ok that's the whole page, nothing skipped, nothing merged, nothing invented. every field, every flag, every 0xFFFF accounted for πŸ’…

and that's a wrap, bestie πŸŽ€ this beauty lives in ./drivers/net/ethernet/sfc, dated October 2026, in the Kernel API Manual β€” mwah, go forth and read your NIC state πŸŒˆβœ¨πŸ’–

πŸ“¦ where this page comes from