STRUCT IDPF_ADAPTER(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸŽ€ NAME πŸŽ€

struct idpf_adapter β€” the device data struct that gets generated on probe ✨

(okay so this is from the Kernel API Manual, section 9, and it's genuinely the main-character struct of the whole idpf show πŸ’…)


πŸ¦‹ SYNOPSIS πŸ¦‹

struct idpf_adapter {
    struct pci_dev *pdev;
    u32 virt_ver_maj;
    u32 virt_ver_min;
    u32 msg_enable;
    u32 mb_wait_count;
    enum idpf_state state;
    unsigned long flags[BITS_TO_LONGS( IDPF_FLAGS_NBITS)];
    struct idpf_reset_reg reset_reg;
    struct libie_ctlq_ctx ctlq_ctx;
    struct libie_ctlq_info *asq;
    struct libie_ctlq_info *arq;
    struct libie_ctlq_xn_manager *xnm;
    u16 num_avail_msix;
    u16 num_msix_entries;
    struct msix_entry *msix_entries;
    u16 num_rdma_msix_entries;
    struct msix_entry *rdma_msix_entries;
    struct virtchnl2_alloc_vectors *req_vec_chunks;
    struct idpf_q_vector mb_vector;
    struct idpf_vector_lifo vector_stack;
    irqreturn_t (*irq_mb_handler)(int irq, void *data);
    u32 tx_timeout_count;
    struct idpf_avail_queue_info avail_queues;
    struct idpf_vport **vports;
    struct net_device **netdevs;
    struct virtchnl2_create_vport **vport_params_recvd;
    u32 *vport_ids;
    struct libeth_rx_pt *singleq_pt_lkup;
    struct libeth_rx_pt *splitq_pt_lkup;
    struct idpf_vport_config **vport_config;
    u16 max_vports;
    u16 num_alloc_vports;
    u16 next_vport;
    struct delayed_work init_task;
    struct workqueue_struct *init_wq;
    struct delayed_work serv_task;
    struct workqueue_struct *serv_wq;
    struct delayed_work mbx_task;
    struct workqueue_struct *mbx_wq;
    struct delayed_work vc_event_task;
    struct workqueue_struct *vc_event_wq;
    struct delayed_work stats_task;
    struct workqueue_struct *stats_wq;
    struct virtchnl2_get_capabilities caps;
    struct idpf_dev_ops dev_ops;
    struct iidc_rdma_core_dev_info *cdev_info;
    int num_vfs;
    bool crc_enable;
    bool req_tx_splitq;
    bool req_rx_splitq;
    struct mutex vport_ctrl_lock;
    struct mutex vector_lock;
    struct mutex queue_lock;
    struct mutex vc_buf_lock;
    struct idpf_ptp *ptp;
 };

πŸ’– Members πŸ’–

like, every field, bestie, in order, no skips 🫢

  • pdev β€” the PCI device struct they hand you on probe πŸŽ€
  • virt_ver_maj β€” Virtchnl version, the major one
  • virt_ver_min β€” Virtchnl version, the minor one
  • msg_enable β€” debug message level that's currently enabled πŸ‘€
  • mb_wait_count β€” how many times the mailbox got attempted-initialized
  • state β€” the init state machine 🌈
  • flags β€” peep enum idpf_flags
  • reset_reg β€” peep struct idpf_reset_reg
  • ctlq_ctx β€” controlq context
  • asq β€” Send control queue info πŸ“€
  • arq β€” Receive control queue info πŸ“₯
  • xnm β€” Xn transaction manager
  • num_avail_msix β€” how many MSIX vectors are available
  • num_msix_entries β€” how many entries are in the MSIX table
  • msix_entries β€” the MSIX table itself
  • num_rdma_msix_entries β€” how many MSIX vectors are available for RDMA
  • rdma_msix_entries β€” the RDMA MSIX table
  • req_vec_chunks β€” requested vector chunk data
  • mb_vector β€” mailbox vector data πŸ’Œ
  • vector_stack β€” stack that stores the msix vector indexes
  • irq_mb_handler β€” handler for the hard interrupt for the mailbox ⚑
  • tx_timeout_count β€” how many TX timeouts have happened 😭
  • avail_queues β€” queue limits that the device gave you
  • vports β€” array holding the vports the driver created
  • netdevs β€” the associated Vport netdevs
  • vport_params_recvd β€” vport params that got received
  • vport_ids β€” array of vport identifiers handed out by the device
  • singleq_pt_lkup β€” lookup table for singleq RX ptypes
  • splitq_pt_lkup β€” lookup table for splitq RX ptypes
  • vport_config β€” vport config parameters
  • max_vports β€” max vports that can be allocated
  • num_alloc_vports β€” current number of vports allocated
  • next_vport β€” next free slot in pf->vport[] β€” 0-based! 🚨
  • init_task β€” initialization task
  • init_wq β€” workqueue for the initialization task
  • serv_task β€” the periodically recurring maintenance task
  • serv_wq β€” workqueue for the service task
  • mbx_task β€” task that handles mailbox interrupts
  • mbx_wq β€” workqueue for mailbox responses
  • vc_event_task β€” task that handles out-of-band virtchnl event notifications
  • vc_event_wq β€” workqueue for virtchnl events
  • stats_task β€” periodic statistics retrieval task πŸ“Š
  • stats_wq β€” workqueue for the statistics task
  • caps β€” negotiated capabilities with the device 🀝
  • dev_ops β€” peep idpf_dev_ops
  • cdev_info β€” IDC core device info pointer
  • num_vfs β€” number of allocated VFs through sysfs. The PF does not directly talk to VFs, but it is used to initialize them
  • crc_enable β€” enable CRC insertion offload
  • req_tx_splitq β€” TX split or single queue model to request
  • req_rx_splitq β€” RX split or single queue model to request
  • vport_ctrl_lock β€” lock protecting the vport control flow πŸ”’
  • vector_lock β€” lock protecting vector distribution
  • queue_lock β€” lock protecting queue distribution
  • vc_buf_lock β€” lock protecting virtchnl buffer
  • ptp β€” storage for PTP-related data ⏰

πŸ‘‘ SEE ALSO πŸ‘‘

Kernel file ./drivers/net/ethernet/intel/idpf/idpf.h (that's where the goods live, iykyk):


lowkey a whole ecosystem in here fr fr β€” read the friends too, don't leave them on read πŸ™ˆ

okay that's the whole page, bestie!! this one came from ./drivers/net/ethernet/intel/idpf, dated October 2026, and it's struct idpf_adapter(9) from the Kernel API Manual β€” go forth and slay your probe path πŸ’…βœ¨πŸ¦‹

πŸ“¦ where this page comes from