STRUCT TI_SCI_MSG_RESP_QUERY_FW_CAPS(9)
πΈ NAME πΈ
struct ti_sci_msg_resp_query_fw_caps β the response struct for query firmware caps, aka the little envelope the firmware sends back when you ask "hey bestie what can u even do?" It's from the Kernel API Manual, and yes we're gonna read it together, don't worry π
β¨ SYNOPSIS β¨
struct ti_sci_msg_resp_query_fw_caps {
struct ti_sci_msg_hdr hdr;
#define MSG_FLAG_CAPS_GENERIC TI_SCI_MSG_FLAG(0);
#define MSG_FLAG_CAPS_LPM_PARTIAL_IO TI_SCI_MSG_FLAG(4);
#define MSG_FLAG_CAPS_LPM_DM_MANAGED TI_SCI_MSG_FLAG(5);
#define MSG_FLAG_CAPS_LPM_ABORT TI_SCI_MSG_FLAG(9);
#define MSG_FLAG_CAPS_IO_ISOLATION TI_SCI_MSG_FLAG(7);
#define MSG_FLAG_CAPS_LPM_BOARDCFG_MANAGED TI_SCI_MSG_FLAG(12);
#define MSG_FLAG_CAPS_LPM_IRQ_CONTEXT_LOST TI_SCI_MSG_FLAG(14);
#define MSG_FLAG_CAPS_LPM_CLK_CONTEXT_LOST TI_SCI_MSG_FLAG(15);
#define MSG_MASK_CAPS_LPM GENMASK_ULL(4, 1);
u64 fw_caps;
};
Like, look at her π«Ά all those #defines living rent-free inside the struct body. That's just how this one is written, okay, we don't question it.
π MEMBERS π
hdr
The generic header. Every message in this family has one, it's giving "wash your hands before dinner" energy. Mandatory. Iconic. Non-negotiable.
fw_caps
Okay so this is the main character π β a u64 where each bit in fw_caps indicating one FW/SOC capability. Think of it like a little bingo card of what the firmware can actually do. Here's the full card, no bits skipped:
MSG_FLAG_CAPS_GENERICβ Generic capability (LPM not supported). Translation: she's basic and she knows it, no low power modes here πMSG_FLAG_CAPS_LPM_PARTIAL_IOβ Partial IO in LPM. Yes, but only partially, we stan a flexible queen.MSG_FLAG_CAPS_LPM_DM_MANAGEDβ LPM can be managed by DM. She's handing the aux cord to DM.MSG_FLAG_CAPS_LPM_ABORTβ Abort entry to LPM. Sometimes you gotta back out of the low power plan, and that's valid πMSG_FLAG_CAPS_IO_ISOLATIONβ IO Isolation support. Boundaries! We love boundaries! π¦MSG_FLAG_CAPS_LPM_BOARDCFG_MANAGEDβ LPM config done statically for the DM via boardcfg. Set in advance, no last-minute chaos, very planner-girl of her.MSG_FLAG_CAPS_LPM_IRQ_CONTEXT_LOSTβ DM is not able to restore IRQ context. Not a slay, more of a heads-up: that context is gone gone πMSG_FLAG_CAPS_LPM_CLK_CONTEXT_LOSTβ DM is not able to restore Clock context. Same deal, but with the clock. She's not putting that back either β°
π DESCRIPTION π
So this struct is the Response to a generic message with message type TI_SCI_MSG_QUERY_FW_CAPS providing currently available SOC/firmware capabilities. In other words: you send the query, this is the reply, and it tells you what the silicon + firmware combo can actually pull off right now.
And the little plot twist β SoC that don't support low power modes return only MSG_FLAG_CAPS_GENERIC capability. So if you read the flags and it's just MSG_FLAG_CAPS_GENERIC, don't panic, that's not a bug, that's just a chip that said "low power? never met her" π€·ββοΈ
π SEE ALSO π
Bestie the reading list is LONG, hydrate first π
- Kernel file
./drivers/firmware/ti_sci.h struct ti_sci_msg_hdr(9)struct ti_sci_msg_resp_version(9)struct ti_sci_msg_req_reboot(9)struct ti_sci_msg_req_set_device_state(9)struct ti_sci_msg_req_get_device_state(9)struct ti_sci_msg_resp_get_device_state(9)struct ti_sci_msg_req_set_device_resets(9)struct ti_sci_msg_req_set_clock_state(9)struct ti_sci_msg_req_get_clock_state(9)struct ti_sci_msg_resp_get_clock_state(9)struct ti_sci_msg_req_set_clock_parent(9)struct ti_sci_msg_req_get_clock_parent(9)struct ti_sci_msg_resp_get_clock_parent(9)struct ti_sci_msg_req_get_clock_num_parents(9)struct ti_sci_msg_resp_get_clock_num_parents(9)struct ti_sci_msg_req_query_clock_freq(9)struct ti_sci_msg_resp_query_clock_freq(9)struct ti_sci_msg_req_set_clock_freq(9)struct ti_sci_msg_req_get_clock_freq(9)struct ti_sci_msg_resp_get_clock_freq(9)struct ti_sci_msg_req_prepare_sleep(9)struct ti_sci_msg_req_set_io_isolation(9)struct ti_sci_msg_resp_lpm_wake_reason(9)struct ti_sci_msg_req_lpm_set_device_constraint(9)struct ti_sci_msg_req_lpm_set_latency_constraint(9)struct ti_sci_msg_req_get_resource_range(9)struct ti_sci_msg_resp_get_resource_range(9)struct ti_sci_msg_req_manage_irq(9)struct ti_sci_msg_rm_ring_cfg_req(9)struct ti_sci_msg_psil_pair(9)struct ti_sci_msg_psil_unpair(9)struct ti_sci_msg_udmap_rx_flow_cfg(9)struct rm_ti_sci_msg_udmap_rx_flow_opt_cfg(9)struct ti_sci_msg_rm_udmap_tx_ch_cfg_req(9)struct ti_sci_msg_rm_udmap_rx_ch_cfg_req(9)struct ti_sci_msg_rm_udmap_flow_cfg_req(9)struct ti_sci_msg_req_proc_request(9)struct ti_sci_msg_req_proc_release(9)struct ti_sci_msg_req_proc_handover(9)struct ti_sci_msg_req_set_config(9)struct ti_sci_msg_req_set_ctrl(9)struct ti_sci_msg_req_get_status(9)struct ti_sci_msg_resp_get_status(9)
fr fr, that's the whole thing β every flag, every field, every reference, nothing dropped π
okay bye ily, this page lives in ./drivers/firmware and it's dated October 2026 β go touch some grass and then come back and read the kernel docs again π±π
π¦ 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