qman_create_fq(9)
π qman_create_fq β the Kernel API Manual, bestie edition β¨
Okay so we're in the Kernel API Manual today, and the star of the show is qman_create_fq(9). Buckle up, this one's actually kinda iconic.
β¨ NAME β¨
qman_create_fq β literally just allocates a FQ. That's it. That's the whole vibe. π
π¦ SYNOPSIS π¦
int qman_create_fq (u32 fqid , u32 flags , struct qman_fq *fq );
πΈ ARGUMENTS πΈ
fqidβ the index of the FQD to encapsulate, and no cap it must be "Out of Service". Like, non-negotiable. πflagsβ a bit-mask ofQMAN_FQ_FLAG_***options. Mix and match, bestie.fqβ the memory for storing the'fq', with callbacks filled in. You bring the memory, it brings the callbacks. π«Ά
π DESCRIPTION π
So what it does: it creates a frame queue object for the given fqid β unless the QMAN_FQ_FLAG_DYNAMIC_FQID flag is set in flags, in which case a FQID gets dynamically allocated instead (or, plot twist, the function fails if none are available π).
Once it's created, the caller should not touch the memory at 'fq' β the only exception is adjacent memory that's been extended for user-defined fields (peep the definition of "struct qman_fq" for more info on that). Hands off, it's giving main character energy and doesn't need your help. π
Now, NO_MODIFY β that one's only intended for enqueuing to pre-existing frame-queues that aren't supposed to be otherwise interfered with. It prevents all other modifications to the frame queue. All of them. Periodt. π
Then there's the TO_DCPORTAL flag, which causes the driver to honour any context_b modifications requested in the qm_init_fq API. Why? Because that indicates the frame queue will be consumed by a direct-connect portal (PME, CAAM, or Fman). β¨
Lowkey important: when frame queues are consumed by software portals, the context_b field is controlled by the driver and can't be modified by the caller. So don't even try it. π
π₯ SEE ALSO π₯
Kernel file ./include/soc/fsl/qman.h and honestly the whole squad:
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_destroy_fq(9)qman_fq_fqid(9)qman_init_fq(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)
Okay bestie, that's the page! π§ Coming to you from ./include/soc/fsl, dated October 2026 β screenshot it, memorize it, slay the day. πβ
π¦ 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