STRUCT VFDI_STATUS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– struct vfdi_status β€” it's in section (9) of the Kernel API Manual, bestie πŸ’–

okay so picture this: the PF driver (that's the physical function, the main character) needs to hand the VF driver a little status report. and that little report is struct vfdi_status. it's literally the status provided by the PF driver to the VF driver, no cap. 🫢


✨ SYNOPSIS ✨

struct vfdi_status {
    u32 generation_start;
    u32 generation_end;
    u32 version;
    u32 length;
    u8 vi_scale;
    u8 max_tx_channels;
    u8 rss_rxq_count;
    u8 reserved1;
    u16 peer_count;
    u16 reserved2;
    struct vfdi_endpoint local;
    struct vfdi_endpoint peers[256];
    u32 timer_quantum_ns;
 };

look at her. πŸŽ€ she's got reserved fields and everything. iconic.


🌸 Members 🌸

  • generation_start β€” a generation count that gets DMA'd over to the VF before the rest of the structure shows up. like a little "heads up bestie, incoming" text message. πŸ’Œ
  • generation_end β€” same vibe, but a generation count DMA'd to the VF after the rest of the structure. the "okay that's everything, love u" follow-up text. ✨
  • version β€” the version of this structure, and rn it's set to 1. later versions have to either stay layout-compatible or only get sent to VFs that specifically ask for them. no sneaky surprise reshuffles, periodt. πŸ‘‘
  • length β€” total length of this structure, including the embedded tables. the whole package, not just the bow on top. 🎁
  • vi_scale β€” log2 of the number of VIs available on this VF. the hardware uses this quantity for register decoding, iykyk. πŸ”₯
  • max_tx_channels β€” the maximum number of transmit queues the VF can use. that's her ceiling, that's her limit. πŸ’…
  • rss_rxq_count β€” the number of receive queues present in the shared RSS indirection table. πŸ’œ
  • peer_count β€” total number of peers in the complete peer list. and listen: if this is larger than ARRAY_SIZE(peers), then the VF must provide enough additional pages, each one filled with vfdi_endpoint structures. so like, do your homework, VF. πŸ“š
  • local β€” the MAC address and outer VLAN tag of this VF. it's giving main character energy because it's literally about herself. πŸ’–
  • peers β€” table of peer addresses. important detail: the tci fields in these structures are currently unused and must be ignored πŸ™ˆ. any additional peers get written into whatever additional pages the VF provided.
  • timer_quantum_ns β€” the timer quantum (nominal period between timer ticks) for interrupt moderation timers, in nanoseconds. ⏱️ this member is only present if length is sufficiently large β€” so she's a conditional appearance kinda queen. not always invited to the function.
πŸ’€ real talk bestie: those reserved1 and reserved2 fields are sitting up in the struct too. this page doesn't describe them, so don't go assigning meaning to them, okay? just vibe and move on. πŸ¦‹

🌈 SEE ALSO 🌈

  • Kernel file ./drivers/net/ethernet/sfc/siena/vfdi.h Virtual Function Driver Interface(9)
  • enum vfdi_op(9)
  • struct vfdi_req(9)

and that's the page!! sourced straight from ./drivers/net/ethernet/sfc/siena, dated October 2026, and yes it's struct vfdi_status(9) forever and ever πŸ’…βœ¨ go read the header file, it's right there, you're gonna slay πŸ§šβ€β™€οΈπŸ’œ

πŸ“¦ where this page comes from