sound/usb/6fire/pcm.h

Source file repositories/reference/linux-study-clean/sound/usb/6fire/pcm.h

File Facts

System
Linux kernel
Corpus path
sound/usb/6fire/pcm.h
Extension
.h
Size
1775 bytes
Lines
72
Domain
Driver Families
Bucket
sound/usb
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.

Dependency Surface

Detected Declarations

Annotated Snippet

struct pcm_urb {
	struct sfire_chip *chip;

	/* BEGIN DO NOT SEPARATE */
	struct urb instance;
	struct usb_iso_packet_descriptor packets[PCM_N_PACKETS_PER_URB];
	/* END DO NOT SEPARATE */
	u8 *buffer;

	struct pcm_urb *peer;
};

struct pcm_substream {
	spinlock_t lock;
	struct snd_pcm_substream *instance;

	bool active;

	snd_pcm_uframes_t dma_off; /* current position in alsa dma_area */
	snd_pcm_uframes_t period_off; /* current position in current period */
};

struct pcm_runtime {
	struct sfire_chip *chip;
	struct snd_pcm *instance;

	struct pcm_substream playback;
	struct pcm_substream capture;
	bool panic; /* if set driver won't do anymore pcm on device */

	struct pcm_urb in_urbs[PCM_N_URBS];
	struct pcm_urb out_urbs[PCM_N_URBS];
	int in_packet_size;
	int out_packet_size;
	int in_n_analog; /* number of analog channels soundcard sends */
	int out_n_analog; /* number of analog channels soundcard receives */

	struct mutex stream_mutex;
	u8 stream_state; /* one of STREAM_XXX (pcm.c) */
	u8 rate; /* one of PCM_RATE_XXX */
	wait_queue_head_t stream_wait_queue;
	bool stream_wait_cond;
};

int usb6fire_pcm_init(struct sfire_chip *chip);
void usb6fire_pcm_abort(struct sfire_chip *chip);
void usb6fire_pcm_destroy(struct sfire_chip *chip);
#endif /* USB6FIRE_PCM_H */

Annotation

Implementation Notes