include/sound/hdaudio_ext.h
Source file repositories/reference/linux-study-clean/include/sound/hdaudio_ext.h
File Facts
- System
- Linux kernel
- Corpus path
include/sound/hdaudio_ext.h- Extension
.h- Size
- 4956 bytes
- Lines
- 150
- Domain
- Driver Families
- Bucket
- include/sound
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
sound/hdaudio.h
Detected Declarations
struct hdac_ext_streamstruct hdac_ext_linkstruct hdac_ext_devicestruct hdac_ext_codec_opsstruct hda_dai_mapstruct hdac_ext_dma_paramsenum hdac_ext_stream_type
Annotated Snippet
struct hdac_ext_stream {
struct hdac_stream hstream;
void __iomem *pphc_addr;
void __iomem *pplc_addr;
u32 pphcllpl;
u32 pphcllpu;
u32 pphcldpl;
u32 pphcldpu;
u32 pplcllpl;
u32 pplcllpu;
bool decoupled:1;
bool link_locked:1;
bool link_prepared;
int (*host_setup)(struct hdac_stream *, bool);
struct snd_pcm_substream *link_substream;
};
#define hdac_stream(s) (&(s)->hstream)
#define stream_to_hdac_ext_stream(s) \
container_of(s, struct hdac_ext_stream, hstream)
int snd_hdac_ext_stream_init_all(struct hdac_bus *bus, int start_idx,
int num_stream, int dir);
void snd_hdac_ext_stream_free_all(struct hdac_bus *bus);
void snd_hdac_ext_link_free_all(struct hdac_bus *bus);
struct hdac_ext_stream *snd_hdac_ext_stream_assign(struct hdac_bus *bus,
struct snd_pcm_substream *substream,
int type);
void snd_hdac_ext_stream_release(struct hdac_ext_stream *hext_stream, int type);
struct hdac_ext_stream *snd_hdac_ext_cstream_assign(struct hdac_bus *bus,
struct snd_compr_stream *cstream);
void snd_hdac_ext_stream_decouple_locked(struct hdac_bus *bus,
struct hdac_ext_stream *hext_stream, bool decouple);
void snd_hdac_ext_stream_decouple(struct hdac_bus *bus,
struct hdac_ext_stream *azx_dev, bool decouple);
void snd_hdac_ext_stream_start(struct hdac_ext_stream *hext_stream);
void snd_hdac_ext_stream_clear(struct hdac_ext_stream *hext_stream);
void snd_hdac_ext_stream_reset(struct hdac_ext_stream *hext_stream);
int snd_hdac_ext_stream_setup(struct hdac_ext_stream *hext_stream, int fmt);
int snd_hdac_ext_host_stream_setup(struct hdac_ext_stream *hext_stream, bool code_loading);
struct hdac_ext_link {
struct hdac_bus *bus;
int index;
void __iomem *ml_addr; /* link output stream reg pointer */
u32 lcaps; /* link capablities */
u16 lsdiid; /* link sdi identifier */
u32 id;
u8 slcount;
int ref_count;
struct list_head list;
};
#define hdac_ext_link_alt(link) ((link)->lcaps & AZX_ML_HDA_LCAP_ALT)
#define hdac_ext_link_ofls(link) ((link)->lcaps & AZX_ML_HDA_LCAP_OFLS)
int snd_hdac_ext_bus_link_power_up(struct hdac_ext_link *hlink);
int snd_hdac_ext_bus_link_power_down(struct hdac_ext_link *hlink);
int snd_hdac_ext_bus_link_power_up_all(struct hdac_bus *bus);
int snd_hdac_ext_bus_link_power_down_all(struct hdac_bus *bus);
void snd_hdac_ext_bus_link_set_stream_id(struct hdac_ext_link *hlink,
int stream);
void snd_hdac_ext_bus_link_clear_stream_id(struct hdac_ext_link *hlink,
int stream);
int snd_hdac_ext_bus_link_get(struct hdac_bus *bus, struct hdac_ext_link *hlink);
int snd_hdac_ext_bus_link_put(struct hdac_bus *bus, struct hdac_ext_link *hlink);
void snd_hdac_ext_bus_link_power(struct hdac_device *codec, bool enable);
struct hdac_ext_device;
/* ops common to all codec drivers */
struct hdac_ext_codec_ops {
int (*build_controls)(struct hdac_ext_device *dev);
int (*init)(struct hdac_ext_device *dev);
void (*free)(struct hdac_ext_device *dev);
};
struct hda_dai_map {
char *dai_name;
Annotation
- Immediate include surface: `sound/hdaudio.h`.
- Detected declarations: `struct hdac_ext_stream`, `struct hdac_ext_link`, `struct hdac_ext_device`, `struct hdac_ext_codec_ops`, `struct hda_dai_map`, `struct hdac_ext_dma_params`, `enum hdac_ext_stream_type`.
- Atlas domain: Driver Families / include/sound.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.