STRUCT TI_SCI_MSG_REQ_MANAGE_IRQ(9)
π struct ti_sci_msg_req_manage_irq β a Kernel API Manual moment β¨
okay bestie, sit down, hydrate, and let me tell you about struct ti_sci_msg_req_manage_irq β it's the request that configures or releases the route between the dev and the host. yes that's the whole vibe. routes between devs and hosts. we love a matchmaker π«Ά
πΈ NAME πΈ
struct ti_sci_msg_req_manage_irq β Request to configure/release the route between the dev and the host.
like, literally it's the little message that says "hey, hook this interrupt source up to this destination" or "okay un-hook it, we're done." no cap π
β¨ SYNOPSIS β¨
struct ti_sci_msg_req_manage_irq {
struct ti_sci_msg_hdr hdr;
#define MSG_FLAG_DST_ID_VALID TI_SCI_MSG_FLAG(0);
#define MSG_FLAG_DST_HOST_IRQ_VALID TI_SCI_MSG_FLAG(1);
#define MSG_FLAG_IA_ID_VALID TI_SCI_MSG_FLAG(2);
#define MSG_FLAG_VINT_VALID TI_SCI_MSG_FLAG(3);
#define MSG_FLAG_GLB_EVNT_VALID TI_SCI_MSG_FLAG(4);
#define MSG_FLAG_VINT_STS_BIT_VALID TI_SCI_MSG_FLAG(5);
#define MSG_FLAG_SHOST_VALID TI_SCI_MSG_FLAG(31);
u32 valid_params;
u16 src_id;
u16 src_index;
u16 dst_id;
u16 dst_host_irq;
u16 ia_id;
u16 vint;
u16 global_event;
u8 vint_status_bit;
u8 secondary_host;
};
that's the whole struct, bestie, and yes every one of those #defines is doing its own little job. icon behavior tbh π
π Members π
hdrβ Generic Header. the standard little intro, every message has one, it's giving entrance music πvalid_paramsβ Bit fields defining the validity of interrupt source parameters. If a bit is not set, then corresponding field is not valid and will not be used for route set. Bit field definitions:0- Valid bit fordst_id1- Valid bit fordst_host_irq2- Valid bit foria_id3- Valid bit forvint4- Valid bit forglobal_event5- Valid bit forvint_status_bit_index31- Valid bit forsecondary_host
ngl this is the vibe-check field β if the bit isn't set, the kernel literally does not care about that field. it will not be used for route set. periodt π
src_idβ IRQ source peripheral ID. who's sending the interrupts, bestie π₯src_indexβ IRQ source index within the peripheral. which specific one, within that peripheral π¦dst_idβ IRQ Destination ID. Based on the architecture it can be IRQ controller or host processor ID. depends on the architecture, so likeβ¦ read the room π§dst_host_irqβ IRQ number of the destination host IRQ controller. the actual irq number on the other end πia_idβ Device ID of the interrupt aggregator in which thevintresides. yes, aggregator. it aggregates. it's literally in the name πΈvintβ Virtual interrupt number if the interrupt route is through an interrupt aggregator. only applies if you're going through the aggregator, iykyk βglobal_eventβ Global event that is to be mapped to interrupt aggregator virtual interrupt status bit. a whole global event, mapped to a status bit, the way that it does that πvint_status_bitβ Virtual interrupt status bit if the interrupt route utilizes an interrupt aggregator status bit. again: aggregator status bit route only. conditional queen πsecondary_hostβ Host ID of the IRQ destination computing entity. This is required only when destination host id is different from ti sci interface host id.
lowkey important caveat: it is only required when the destination host id is different from the ti sci interface host id. otherwise leave it alone π
π Description π
Request type is TI_SCI_MSG_SET/RELEASE_IRQ. Response is generic ACK / NACK message.
so yeah β you're either SETting the route or RELEASEing it, and the reply back is just a plain ACK or NACK. no essay, no drama, just yes or no. main character energy honestly π β¨
π SEE ALSO π
Kernel file ./drivers/firmware/ti_sci.h plus the whole extended friend group, fr fr:
struct ti_sci_msg_hdr(9)struct ti_sci_msg_resp_version(9)struct ti_sci_msg_req_reboot(9)struct ti_sci_msg_resp_query_fw_caps(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_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)
okay that's the whole page, bestie, go configure some routes responsibly π
sign-off szn: this little masterpiece lives in ./drivers/firmware, dated October 2026, and it's the struct ti_sci_msg_req_manage_irq(9) page from the Kernel API Manual. 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