STRUCT SCMI_INFO(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– NAME πŸ’–

struct scmi_info β€” the structure that represents one SCMI instance, bestie. It's the main character of an SCMI instance, fr fr.


✨ SYNOPSIS ✨

okay so here's the whole shape of it, no cap, copy it exactly:

struct scmi_info {
    int id;
    struct device *dev;
    const struct scmi_desc *desc;
    struct scmi_base_info version;
    struct scmi_handle handle;
    struct scmi_xfers_info tx_minfo;
    struct scmi_xfers_info rx_minfo;
    struct idr tx_idr;
    struct idr rx_idr;
    struct idr protocols;
    struct mutex protocols_mtx;
    u8 *protocols_imp;
    struct idr active_protocols;
    void *notify_priv;
    struct list_head node;
    int users;
    struct notifier_block bus_nb;
    struct notifier_block dev_req_nb;
    struct mutex devreq_mtx;
    struct scmi_debug_info *dbg;
    void *raw;
 };

πŸŽ€ Members πŸŽ€

like, every single field, explained with love πŸ’…

  • id β€” a sequence number starting from zero that identifies this instance 🫢
  • dev β€” device pointer, classic
  • desc β€” the SoC description for this instance
  • version β€” SCMI revision info: it's giving protocol version, implementation version, and (sub-)vendor identification all in one ✨
  • handle β€” the actual instance of the SCMI handle you send out to clients
  • tx_minfo β€” Universal Transmit Message management info
  • rx_minfo β€” Universal Receive Message management info (yes the receive twin, they're a matching set πŸŽ€)
  • tx_idr β€” IDR object mapping a protocol id to the Tx channel info pointer
  • rx_idr β€” IDR object mapping a protocol id to the Rx channel info pointer
  • protocols β€” IDR for the protocols' instance descriptors initialized for this SCMI instance; it gets populated on the protocol's first attempted usage πŸ‘‘
  • protocols_mtx β€” a mutex protecting protocols instances initialization, keeping it safe 🫢
  • protocols_imp β€” list of protocols implemented, currently a maximum of scmi_base_info.num_protocols elements allocated by the base protocol
  • active_protocols β€” IDR storing device_nodes for protocols actually defined in the DT and confirmed as implemented by fw. iykyk
  • notify_priv β€” pointer to a private data structure specific to notifications πŸ™ˆ
  • node β€” list head
  • users β€” number of users of this instance
  • bus_nb β€” a notifier listening for device bind/unbind on the scmi bus
  • dev_req_nb β€” a notifier listening for device request/unrequest on the scmi bus
  • devreq_mtx β€” a mutex that serializes device creation for this SCMI instance
  • dbg β€” pointer to debugfs related data (if any)
  • raw β€” an opaque reference handle used by SCMI Raw mode πŸ”₯

🌈 SEE ALSO 🌈

Kernel file ./drivers/firmware/arm_scmi/driver.c, plus the whole friend group πŸ˜­πŸ’–:


okay that's the whole thing, you ate that πŸ’… this page lives in ./drivers/firmware/arm_scmi, it's the Kernel API Manual, and the version/date stamp on it is October 2026 β€” iconic, see you in the next one bestie πŸ¦‹πŸ’œ

πŸ“¦ where this page comes from