STRUCT STRATIX10_ASYNC_CTRL(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– struct stratix10_async_ctrl(9) πŸ’–

okay bestie, so this is a page straight out of the Kernel API Manual (section 9, the kernel-API girlies) and it's literally all about struct stratix10_async_ctrl β€” the control structure for Stratix10 async operations. it's giving "backstage pass to the async firmware world" and ngl it's kind of iconic. let's get into it πŸŽ€


✨ NAME ✨

struct stratix10_async_ctrl β€” the control structure for Stratix10 asynchronous operations πŸ¦‹ no cap, that's the whole vibe of this struct.


🌸 SYNOPSIS 🌸

here's the whole shape of her, bestie β€” every field exactly as it lives in the source:

struct stratix10_async_ctrl {
    bool supported;
    bool initialized;
    void (*invoke_fn)(struct stratix10_async_ctrl *actrl, const struct arm_smccc_1_2_regs *args, struct arm_smccc_1_2_regs *res);
    struct ida async_id_pool;
    atomic_t common_achan_refcount;
    struct stratix10_async_chan *common_async_chan;
    spinlock_t trx_list_lock;
    unsigned long trx_list[1 << (( ASYNC_TRX_HASH_BITS) - 1)];
 };

like, look at her. main character struct energy fr fr πŸ‘‘


πŸ’… Members πŸ’…

okay so this is the part where we meet everyone in the group chat one by one:

  • supported β€” the flag that says whether the system even supports async operations. basically the "are we doing this or not" flag 🫢
  • initialized β€” the flag that says whether this control structure has actually been initialized yet. vibe check: passed or not πŸ’€
  • invoke_fn β€” the function pointer for invoking Stratix10 service calls to EL3 secure firmware. she's the connector, the plug, the one who talks to the secure firmware so you don't have to ✨
  • async_id_pool β€” a pointer to the ID pool used for asynchronous operations. it's literally the pool of IDs, keeping track of all the async kiddos πŸŽ€
  • common_achan_refcount β€” the atomic reference count for the common asynchronous channel usage. atomic, so she's thread-safe and she knows it πŸ’…
  • common_async_chan β€” a pointer to the common asynchronous channel structure. the shared channel, the communal hangout spot 🌈
  • trx_list_lock β€” a spinlock protecting the transaction list operations. do not touch the transaction list without her, she will spin 😭
  • trx_list β€” the hash table for managing asynchronous transactions. this is the actual table where the transactions live, sized 1 << (( ASYNC_TRX_HASH_BITS) - 1) πŸ“

πŸ”₯ SEE ALSO πŸ”₯

the whole fam, no gatekeeping. first up, the kernel file ./drivers/firmware/stratix10-svc.c, and then literally every sibling in the stratix10 universe:

SVC_NUM_DATA_IN_FIFO(9), struct stratix10_svc(9), struct stratix10_svc_sh_memory(9), struct stratix10_svc_data_mem(9), struct stratix10_svc_data(9), struct stratix10_svc_async_handler(9), struct stratix10_async_chan(9), struct stratix10_svc_chan(9), struct stratix10_svc_controller(9), svc_pa_to_va(9), svc_thread_cmd_data_claim(9), svc_thread_cmd_config_status(9), svc_thread_recv_status_ok(9), svc_normal_to_secure_thread(9), svc_normal_to_secure_shm_thread(9), svc_get_sh_memory(9), svc_create_memory_pool(9), svc_smccc_smc(9), svc_smccc_hvc(9), svc_smccc_1_2_full(9), get_invoke_func(9), stratix10_svc_request_channel_byname(9), stratix10_svc_add_async_client(9), stratix10_svc_remove_async_client(9), stratix10_svc_async_send(9), stratix10_svc_async_prepare_response(9), stratix10_svc_async_poll(9), stratix10_svc_async_done(9), stratix10_svc_async_init(9), stratix10_svc_async_exit(9), stratix10_svc_free_channel(9), stratix10_svc_send(9), stratix10_svc_done(9), stratix10_svc_allocate_memory(9), stratix10_svc_free_memory(9).

like... the whole roster. go read them, iykyk πŸ“šπŸ’œ


🧚 tiny lil sign-off from me to you: this page lives under ./drivers/firmware and it's dated October 2026, and the whole thing is filed under struct stratix10_async_ctrl(9). slay, go write some async firmware code, bestie πŸ’–βœ¨
πŸ“¦ where this page comes from