STRUCT HDAC_EXT2_LINK(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

okay so bestie, welcome to the struct hdac_ext2_link(9) page β€” this is straight out of the Kernel API Manual and it's literally the HDAudio extended+alternate link. yes that's a lot of adjectives. it ate. let's get into it 🫢


✨ NAME ✨

struct hdac_ext2_link β€” HDAudio extended+alternate link. that's it, that's the whole name, and it's iconic πŸ’…


🌸 SYNOPSIS 🌸

here's the whole struct, typed out exactly, no cap:

struct hdac_ext2_link {
    struct hdac_ext_link hext_link;
    bool alt;
    bool intc;
    bool ofls;
    bool lss;
    int slcount;
    int elid;
    int elver;
    u32 leptr;
    struct mutex eml_lock;
    int sublink_ref_count[HDAML_MAX_SUBLINKS];
    void __iomem *base_ptr;
    u32 instance_offset;
    u32 shim_offset;
    u32 ip_offset;
    u32 shim_vs_offset;
    unsigned long mic_privacy_mask;
};

πŸŽ€ Members πŸŽ€

okay now the member-by-member vibe check, one by one, nobody gets left out:

  • hext_link β€” a struct hdac_ext_link. it's the ext link inside the ext2 link, like a little link inception moment πŸŒ€
  • alt β€” flag set for alternate extended links. alternate as in✨different era✨
  • intc β€” boolean for interrupt capable. it can get interrupted, and honestly same 😭
  • ofls β€” boolean for offload support. it's giving delegation πŸ‘‘
  • lss β€” boolean for link synchronization capabilities. keeping everybody in sync, main character energy fr fr
  • slcount β€” sublink count. how many sublinks we're dealing with here πŸ”’
  • elid β€” extended link ID (the AZX_REG_ML_LEPTR_ID_ defines). it's the ID bestie, it has one πŸͺͺ
  • elver β€” extended link version. which version? this one. no cap πŸ’«
  • leptr β€” extended link pointer. it points at stuff. that's the job 🫑
  • eml_lock β€” mutual exclusion to access shared registers, e.g. the CPA/SPA bits in the LCTL register. do NOT touch the shared registers without holding this, that's the whole point πŸ’€
  • sublink_ref_count β€” array of refcounts, required to power-manage sublinks independently. HDAML_MAX_SUBLINKS of them, one per sublink, so each one can be power-managed on its own little journey 🌈
  • base_ptr β€” pointer to shim/ip/shim_vs space. a void __iomem *, very mysterious, very "don't ask" πŸ™ˆ
  • instance_offset β€” offset between each of the slcount instances managed by link. the spacing between the instances, literally πŸ“
  • shim_offset β€” offset to the SHIM register base. shim base located βœ…
  • ip_offset β€” offset to the IP register base. ip base located βœ…
  • shim_vs_offset β€” offset to the vendor-specific (VS) SHIM base. the VS shim, very exclusive πŸ’…
  • mic_privacy_mask β€” bitmask of sublinks where mic privacy is applied. an unsigned long, and yes it's protecting your mic, say thank you 🎀

πŸ¦‹ SEE ALSO πŸ¦‹

  • Kernel file ./sound/soc/sof/intel/hda-mlink.c β€” go read the source, iykyk πŸ“–

and that's the page!! signing off from ./sound/soc/sof/intel, dated October 2026, struct hdac_ext2_link(9) β€” mwah, slay, go power-manage those sublinks independently πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from