STRUCT SCMI_INFO(9)
π 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, classicdescβ the SoC description for this instanceversionβ 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 clientstx_minfoβ Universal Transmit Message management inforx_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 pointerrx_idrβ IDR object mapping a protocol id to the Rx channel info pointerprotocolsβ 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 ofscmi_base_info.num_protocolselements allocated by the base protocolactive_protocolsβ IDR storing device_nodes for protocols actually defined in the DT and confirmed as implemented by fw. iykyknotify_privβ pointer to a private data structure specific to notifications πnodeβ list headusersβ number of users of this instancebus_nbβ a notifier listening for device bind/unbind on the scmi busdev_req_nbβ a notifier listening for device request/unrequest on the scmi busdevreq_mtxβ a mutex that serializes device creation for this SCMI instancedbgβ 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 ππ:
struct scmi_xfers_info(9)struct scmi_protocol_instance(9)scmi_create_protocol_devices(9)scmi_xfer_token_set(9)scmi_xfer_token_clear(9)scmi_xfer_inflight_register_unlocked(9)scmi_xfer_inflight_register(9)scmi_xfer_raw_inflight_register(9)scmi_xfer_pending_set(9)scmi_xfer_get(9)scmi_xfer_raw_get(9)scmi_xfer_raw_channel_get(9)__scmi_xfer_put(9)scmi_xfer_raw_put(9)scmi_xfer_lookup_unlocked(9)scmi_bad_message_trace(9)scmi_msg_response_validate(9)scmi_xfer_state_update(9)scmi_xfer_command_acquire(9)scmi_rx_callback(9)xfer_put(9)scmi_wait_for_message_response(9)scmi_xfer_raw_wait_for_message_response(9)do_xfer(9)do_xfer_with_response(9)xfer_get_init(9)version_get(9)scmi_set_protocol_priv(9)scmi_get_protocol_priv(9)scmi_common_extended_name_get(9)scmi_common_get_max_msg_size(9)scmi_protocol_msg_check(9)struct scmi_iterator(9)scmi_revision_area_get(9)scmi_protocol_version_negotiate(9)scmi_protocol_version_initialize(9)scmi_alloc_init_protocol_instance(9)scmi_get_protocol_instance(9)scmi_protocol_acquire(9)scmi_protocol_release(9)scmi_devm_protocol_get(9)scmi_devm_protocol_acquire(9)scmi_devm_protocol_put(9)scmi_is_transport_atomic(9)scmi_handle_get(9)scmi_handle_put(9)scmi_channels_setup(9)
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
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms