STRUCT HDA_DAI_WIDGET_DMA_OPS(9)
โจ struct hda_dai_widget_dma_ops โ NAME โจ
okay so, bestie, this is struct hda_dai_widget_dma_ops, and it's the DAI DMA ops struct ๐
โ and here's the vibe: it's optional by default unless you specify otherwise. That's it, that's the whole personality. From the Kernel API Manual, obviously ๐
๐ SYNOPSIS ๐
no cap, here's the whole struct, character for character, don't @ me:
struct hda_dai_widget_dma_ops {
struct hdac_ext_stream *(*get_hext_stream)(struct snd_sof_dev *sdev,
struct snd_soc_dai *cpu_dai, struct snd_pcm_substream *substream);
struct hdac_ext_stream *(*assign_hext_stream)(struct snd_sof_dev
*sdev, struct snd_soc_dai *cpu_dai, struct snd_pcm_substream *substream,
struct hdac_ext_link *hlink);
void (*release_hext_stream)(struct snd_sof_dev *sdev, struct
snd_soc_dai *cpu_dai, struct snd_pcm_substream *substream);
void (*setup_hext_stream)(struct snd_sof_dev *sdev, struct
hdac_ext_stream *hext_stream, unsigned int format_val);
void (*reset_hext_stream)(struct snd_sof_dev *sdev, struct
hdac_ext_stream *hext_sream);
int (*pre_trigger)(struct snd_sof_dev *sdev, struct snd_soc_dai
*cpu_dai, struct snd_pcm_substream *substream, int cmd);
int (*trigger)(struct snd_sof_dev *sdev, struct snd_soc_dai
*cpu_dai, struct snd_pcm_substream *substream, int cmd);
int (*post_trigger)(struct snd_sof_dev *sdev, struct snd_soc_dai
*cpu_dai, struct snd_pcm_substream *substream, int cmd);
void (*codec_dai_set_stream)(struct snd_sof_dev *sdev, struct
snd_pcm_substream *substream, struct hdac_stream *hstream);
unsigned int (*calc_stream_format)(struct snd_sof_dev *sdev, struct
snd_pcm_substream *substream, struct snd_pcm_hw_params *params);
struct hdac_ext_link * (*get_hlink)(struct snd_sof_dev *sdev, struct
snd_pcm_substream *substream);
};
(yes, hext_sream in reset_hext_stream is spelled exactly like that in the source โ not me, I would never ๐ โ and yes, get_hlink has that lil space before the (. copying faithfully is the whole assignment ๐ซถ)
๐ Members ๐
okay so let's go member by member, this is the main character section:
get_hext_streamโ ngl this one is mandatory, bestie. it's the function pointer that grabs the saved pointer tostruct hdac_ext_stream. you literally cannot skip it. periodt.assign_hext_streamโ function pointer that assigns ahdac_ext_stream. lowkey essential to the plot.release_hext_streamโ function pointer that releases thehdac_ext_stream. letting it go, giving it space to heal ๐ธsetup_hext_streamโ function pointer forhdac_ext_streamsetup. the getting-ready-for-the-party part โจreset_hext_streamโ function pointer forhdac_ext_streamreset. hitting refresh, we love a fresh start ๐ฆpre_triggerโ function pointer for DAI DMA pre-trigger actions. the before energy.triggerโ function pointer for DAI DMA trigger actions. the main event, the moment, the slay ๐ฅpost_triggerโ function pointer for DAI DMA post-trigger actions. the after energy, the debrief.codec_dai_set_streamโ function pointer that sets the codec-side stream information. codec side said "I also have lore" ๐calc_stream_formatโ function pointer that determines the stream format fromhw_params, and for HDaudio codec DAI it does it from the.sigbits. the math girlie of the group ๐งฎget_hlinkโ mandatory function pointer โ๏ธ no skipping! it retrieves the hlink, mainly to programLOSIDVfor legacy HDaudio links, or to program HDaudio Extended Link registers. iconic behavior, tbh ๐
๐ฆ SEE ALSO ๐ฆ
- Kernel file
./sound/soc/sof/intel/hda.hโ go read it, iykyk ๐
fr fr: everything this struct does is optional by default unless specified otherwise โ exceptget_hext_streamandget_hlink, those two are mandatory and they know it ๐
and that's the whole page, bestie!! ๐ source is ./sound/soc/sof/intel, dated October 2026, from the Kernel API Manual โ mwah, go forth and program those Extended Link registers ๐
โจ๐
๐ฆ 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