STRUCT TI_SCI_MSG_REQ_MANAGE_IRQ(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… 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 for dst_id 1 - Valid bit for dst_host_irq 2 - Valid bit for ia_id 3 - Valid bit for vint 4 - Valid bit for global_event 5 - Valid bit for vint_status_bit_index 31 - Valid bit for secondary_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 the vint resides. 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