qman_init_fq(9)
π qman_init_fq(9) β like, the Kernel API Manual one π
okay bestie so this is a page straight out of the Kernel API Manual, and it's all about one tiny little function with main character energy: qman_init_fq. it sets up FQ fields and leaves the FQ either "parked" or "scheduled". that's the whole vibe. let's get into it π
β¨ NAME β¨
qman_init_fq β initialises FQ fields, and leaves the FQ "parked" or "scheduled". no cap, that's it. π¦
πΈ SYNOPSIS πΈ
int qman_init_fq (struct qman_fq *fq , u32 flags , struct qm_mcc_initfq
*opts );
literally copy-paste that signature into your brain, bestie. it's giving three args, one int back. π«Ά
π ARGUMENTS π
fqβ the frame queue object you're modifying, and it must be'parked'or brand new. no exceptions, periodt. πflagsβ a bit-mask ofQMAN_INITFQ_FLAG_***options. mix and match, it's a bit-mask, that's the whole point β¨optsβ the FQ-modification settings, exactly as defined in the low-level API. yep, it's the low-level one. π
π₯ DESCRIPTION π₯
so the opts parameter comes from the low-level portal API. if you select QMAN_INITFQ_FLAG_SCHED in flags, the frame queue gets scheduled instead of parked. that's the flex. π
NB βoptscan beNULL. yes bestie,NULLis fine here, no jump scare π
also heads up: some fields and options within opts may legitimately be ignored or overwritten by the driver. not a bug, that's just how it is. π here's the whole breakdown:
- the
'count'and'fqid'fields are always ignored β because this operation only affects one frame queue:fq. one FQ, one job, focused queen energy π - the
QM_INITFQ_WE_CONTEXTBoption of the'we_mask'field and the associated- if
fqwas not created withQMAN_FQ_FLAG_TO_DCPORTAL, thencontext_bis initialised to a value used by the driver for demux. π§ - if
context_bis initialised for demux, so iscontext_ain case stashing is requested (see item 4). (So caller control ofcontext_bis only possible forTO_DCPORTALframe queue objects.) β
- if
- if
flagscontainsQMAN_INITFQ_FLAG_LOCAL, the'fqd'structure's the command. If theWE_DESTWQwrite-enable bit had already been set by the caller, the channel workqueue will be left as-is, otherwise the write-enable bit is set and the workqueue is set to a default of4. If the"LOCAL"flag isn't set, the destination channel/workqueue fields and the write-enable bit are left as-is. π
(yeah, that item 3 sentence does just go off a cliff in the original β I'm not about to invent lore that isn't there, bestie π)
- if the driver overwrites
context_a/context_bfor demux, then ifQM_INITFQ_WE_CONTEXTAis set, the driver will only overwritecontext_a.addressfields and will leave the stashing fields provided by the user alone, otherwise it will zero out thecontext_a.stashingfields. π
π SEE ALSO π
the kernel file ./include/soc/fsl/qman.h and literally this whole friend group:
qman_p_irqsource_add(9)qman_p_irqsource_remove(9)qman_affine_cpus(9)qman_affine_channel(9)qman_get_affine_portal(9)qman_start_using_portal(9)qman_p_poll_dqrr(9)qman_p_static_dequeue_add(9)qman_create_fq(9)qman_destroy_fq(9)qman_fq_fqid(9)qman_schedule_fq(9)qman_retire_fq(9)qman_oos_fq(9)qman_enqueue(9)qman_alloc_fqid_range(9)qman_release_fqid(9)qman_query_fq_np(9)qman_alloc_pool_range(9)qman_release_pool(9)qman_create_cgr(9)qman_delete_cgr(9)qman_delete_cgr_safe(9)qman_update_cgr_safe(9)qman_query_cgr_congested(9)qman_alloc_cgrid_range(9)qman_release_cgrid(9)qman_is_probed(9)qman_portals_probed(9)qman_dqrr_get_ithresh(9)qman_dqrr_set_ithresh(9)
and that's the page, bestie π«Άπ this one lives under ./include/soc/fsl, and the date stamp on it is October 2026 β so yeah, it's already iconic in the future timeline πβ¨ go init those frame queues, ilysm π
π¦ 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