STRUCT STRATIX10_ASYNC_CTRL(9)
π 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, sized1 << (( 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/firmwareand it's dated October 2026, and the whole thing is filed understruct stratix10_async_ctrl(9). slay, go write some async firmware code, bestie πβ¨
π¦ 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