scmi_get_protocol_instance(9)
π scmi_get_protocol_instance β a Kernel API Manual moment β¨
okay so bestie, welcome to the Kernel API Manual entry for scmi_get_protocol_instance(9) β this is the little helper that gets your protocol all set up and glowing π«Ά
πΈ NAME πΈ
scmi_get_protocol_instance β the protocol initialization helper, periodt. Like, it literally exists to get your protocol an instance and it ate π
β¨ SYNOPSIS β¨
struct scmi_protocol_instance * scmi_get_protocol_instance (const struct scmi_handle *handle , u8 protocol_id );
π ARGUMENTS π
handleβ a reference to the SCMI platform instance. that's your whole vibe anchor, bestie πprotocol_idβ the protocol you're requesting. the one you want. the main character π
π¦ DESCRIPTION π¦
so here's the tea β β if the protocol you want has never been requested before for this particular instance, this function goes ahead and allocates and initializes all the needed structures for you π§ and while it's doing that it handles the resource allocation with a dedicated per-protocol devres subgroup. no cap, it's very organized about it β¨
if it's been requested before? then it's already got the goods and you're chilling π
π₯ RETURN π₯
You get back a reference to an initialized protocol instance π β or an error on failure. and lowkey the one you'll wanna know about: it returns -EPROBE_DEFER in particular when the desired protocol could NOT be found π so like, don't panic, it just means try again later fr fr π
bestie if you see -EPROBE_DEFER it's not a crash, it's the protocol not being there yet. breathe. π«Ά
π SEE ALSO π
the kernel file ./drivers/firmware/arm_scmi/driver.c β literally the source of truth π
and a whole friend group of functions and structs you should also go say hi to π
struct scmi_xfers_info(9)struct scmi_protocol_instance(9)struct scmi_info(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_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)
and that's the whole page, bestie ππ this one comes from ./drivers/firmware/arm_scmi, dated October 2026 β so go forth, get your protocol instance, and slay β¨ππ
π¦ 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