scmi_rx_callback(9)
π scmi_rx_callback(9) β bestie's guide to the receive callback π
okay so we're in the Kernel API Manual today, and this page is literally all about scmi_rx_callback β the callback for receiving messages. it's short, it's sweet, it's giving "small function, big responsibilities." let's get into it π
β¨ NAME β¨
scmi_rx_callback β callback for receiving messages
like, that's it. that's the whole job. it receives messages. icon behavior tbh π
πΈ SYNOPSIS πΈ
void scmi_rx_callback (struct scmi_chan_info *cinfo , u32 msg_hdr , void
*priv );
three args, no return value (void, she gives nothing back and that's fine, we respect it π
). the line break in the middle of the synopsis is just how the page renders it β the signature is exactly the one above, no cap.
π¦ ARGUMENTS π¦
cinfoβ the SCMI channel info. this is your channel's whole little identity card, and yes she matters πmsg_hdrβ the message header. it's au32and it's literally the header of the message being received. that's the vibe.privβ transport specific private data. every transport gets to shove its own little bag of secrets in here, and we do not ask questions π
β DESCRIPTION β
so what does she actually do? she processes one received message β just one β and routes it to the appropriate transfer information, then signals completion of the transfer. that's the whole glow-up arc: message comes in β finds its transfer β "we're done here, bestie" β
no extra steps, no side quests. one message, one transfer, one completion signal. periodt.
π₯ NOTE π₯
bestie. listen. this function will be invoked in IRQ context, so it should be as optimal as possible. like, keep it tight, keep it lean, don't be doing anything extra in here. this is not the place for a little treat. this is the place for speed πβ‘
fr fr, interrupt context does not play around, so optimal is the whole assignment.
π SEE ALSO π
the obligatory link dump, and honestly there's so much here β the kernel file it lives in plus a whole friend group of structs and functions. all of them, exactly as listed, no skips:
kernel file:
./drivers/firmware/arm_scmi/driver.c
structs:
struct scmi_xfers_info(9)struct scmi_protocol_instance(9)struct scmi_info(9)struct scmi_iterator(9)
functions:
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)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)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)
and that's the page!! mwah π this little cutie lives in ./drivers/firmware/arm_scmi, and she was dated October 2026 β so mark your calendars, bestie, that's the version you're reading ποΈπ go forth and keep your IRQ handler optimal!! 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