STRUCT PDS_CORE_DEV_IDENTITY(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ‘‘ struct pds_core_dev_identity(9) β€” bestie's guide to the device identity struct ✨

okay so this is a page from the Kernel API Manual, and it's literally all about struct pds_core_dev_identity β€” the lil' bundle of info where the device tells you who it is πŸ’… think of it as the device's ID card but make it kernel.


🌸 NAME 🌸

struct pds_core_dev_identity β€” Device identity information 🫢


✨ SYNOPSIS ✨

here's the whole squad, laid out exactly as it lives in the header β€” do not touch, just admire πŸŽ€

struct pds_core_dev_identity {
    u8 version;
    u8 type;
    u8 state;
    u8 rsvd;
    __le32 nlifs;
    __le32 nintrs;
    __le32 ndbpgs_per_lif;
    __le32 intr_coal_mult;
    __le32 intr_coal_div;
    __le16 vif_types[PDS_DEV_TYPE_MAX];
    __le16 max_fw_slots;
    u8 rsvd2[6];
    __le64 capabilities;
 };

πŸ¦‹ Members πŸ¦‹

okay field-by-field, let's get into it β€” every single one, no skipping πŸ’–

  • version β€” the version of the device identify. it's giving "which era of me are you talking to" ✨
  • type β€” the identify type. and yes, it's 0 for now β€” iconic minimalism, no notes πŸ’…
  • state β€” the device state. what mood is the device in, basically 🫢
  • rsvd β€” word boundary padding. it's just there to keep the alignment cute and tidy πŸŽ€
  • nlifs β€” number of LIFs provisioned. that's how many LIFs you get, fr fr 🌸
  • nintrs β€” number of interrupts provisioned. the interrupt allowance, slay πŸ”₯
  • ndbpgs_per_lif β€” number of doorbell pages per LIF. per LIF, bestie, write that down πŸ’œ
  • intr_coal_mult β€” interrupt coalescing multiplication factor. it scales the user-supplied interrupt coalescing value in usecs into device units using:
device units = usecs * mult / div

that formula is load-bearing, do not lose it 😭

  • intr_coal_div β€” interrupt coalescing division factor. same deal, it scales the user-supplied interrupt coalescing value in usecs to device units using:
device units = usecs * mult / div

same formula, the other half of the vibe check 🌈

  • vif_types β€” how many of each VIF device type is supported. an array of PDS_DEV_TYPE_MAX of these, bestie, so it's counting per type πŸ“
  • max_fw_slots β€” number of firmware components reported by device. important caveat: this is only supported on version >= PDS_CORE_IDENTITY_VERSION_2 πŸ™ˆ so if you're on an older version, don't come for her, she's not there yet
  • rsvd2 β€” word boundary padding. again. u8 rsvd2[6] of pure alignment energy ⭐
  • capabilities β€” device capabilities. and same rule as above: only supported on version >= PDS_CORE_IDENTITY_VERSION_2 πŸ‘‘ so check your version first, no cap
lowkey the main character takeaway: max_fw_slots and capabilities are gated behind PDS_CORE_IDENTITY_VERSION_2 or later. read the version field before you go trusting them πŸ’€

πŸ”₯ SEE ALSO πŸ”₯

this list is LONG and I respect it β€” it's the whole pds_core extended universe, all of it, in order, nothing cut 😀

Kernel file ./include/linux/pds/pds_core_if.h, plus:

  • struct pds_core_drv_identity(9)
  • enum pds_core_dev_capability(9)
  • struct pds_core_dev_identify_cmd(9)
  • struct pds_core_dev_identify_comp(9)
  • struct pds_core_dev_reset_cmd(9)
  • struct pds_core_dev_reset_comp(9)
  • struct pds_core_dev_init_cmd(9)
  • struct pds_core_dev_init_comp(9)
  • struct pds_core_fw_download_cmd(9)
  • struct pds_core_fw_download_comp(9)
  • enum pds_core_fw_control_oper(9)
  • enum pds_core_fw_slot(9)
  • struct pds_core_fw_control_cmd(9)
  • struct pds_core_fw_control_comp(9)
  • enum pds_core_vf_link_status(9)
  • struct pds_core_vf_setattr_cmd(9)
  • struct pds_core_vf_getattr_cmd(9)
  • struct pds_core_vf_ctrl_cmd(9)
  • struct pds_core_vf_ctrl_comp(9)
  • struct pds_core_send_pkg_data_cmd(9)
  • struct pds_core_send_pkg_data_comp(9)
  • struct pds_core_component_tbl(9)
  • struct pds_core_send_component_tbl_cmd(9)
  • struct pds_core_send_component_tbl_comp(9)
  • enum pds_core_send_component_op(9)
  • struct pds_core_flash_component(9)
  • struct pds_core_send_component_cmd(9)
  • struct pds_core_send_component_comp(9)
  • enum pds_core_fw_component_type(9)
  • enum pds_core_component_info_flags(9)
  • struct pds_core_fw_component_info(9)
  • struct pds_core_component_list_info(9)
  • struct pds_core_get_component_info_cmd(9)
  • struct pds_core_get_component_info_comp(9)
  • struct pds_core_finalize_update_cmd(9)
  • struct pds_core_finalize_update_comp(9)
  • struct pds_core_match_record_desc_cmd(9)
  • struct pds_core_match_record_desc_comp(9)
  • enum pds_core_host_mem_oper(9)
  • struct pds_core_host_mem_cmd(9)
  • struct pds_core_host_mem_comp(9)
  • struct pds_core_dev_hwstamp_regs(9)
  • struct pds_core_dev_info_regs(9)
  • struct pds_core_dev_cmd_regs(9)
  • struct pds_core_dev_regs(9)

and that's the whole page, bestie β€” go forth and identify some devices πŸ’–βœ¨πŸŽ€

this came out of ./include/linux/pds, dated October 2026, wrapping up struct pds_core_dev_identity(9). stan the manpage, mwah πŸ’…πŸ«Ά

πŸ“¦ where this page comes from