sound/isa/msnd/msnd.h

Source file repositories/reference/linux-study-clean/sound/isa/msnd/msnd.h

File Facts

System
Linux kernel
Corpus path
sound/isa/msnd/msnd.h
Extension
.h
Size
7418 bytes
Lines
295
Domain
Driver Families
Bucket
sound/isa
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 snd_msnd {
	void __iomem		*mappedbase;
	int			play_period_bytes;
	int			playLimit;
	int			playPeriods;
	int 			playDMAPos;
	int			banksPlayed;
	int 			captureDMAPos;
	int			capturePeriodBytes;
	int			captureLimit;
	int			capturePeriods;
	struct snd_card		*card;
	struct snd_rawmidi	*rmidi;

	/* Hardware resources */
	long io;
	int memid, irqid;
	int irq, irq_ref;
	unsigned long base;

	/* Motorola 56k DSP SMA */
	void __iomem	*SMA;
	void __iomem	*DAPQ;
	void __iomem	*DARQ;
	void __iomem	*MODQ;
	void __iomem	*MIDQ;
	void __iomem	*DSPQ;
	int dspq_data_buff, dspq_buff_size;

	/* State variables */
	enum { msndClassic, msndPinnacle } type;
	fmode_t mode;
	unsigned long flags;
#define F_RESETTING			0
#define F_HAVEDIGITAL			1
#define F_AUDIO_WRITE_INUSE		2
#define F_WRITING			3
#define F_WRITEBLOCK			4
#define F_WRITEFLUSH			5
#define F_AUDIO_READ_INUSE		6
#define F_READING			7
#define F_READBLOCK			8
#define F_EXT_MIDI_INUSE		9
#define F_HDR_MIDI_INUSE		10
#define F_DISABLE_WRITE_NDELAY		11
	spinlock_t lock;
	spinlock_t mixer_lock;
	int nresets;
	unsigned recsrc;
	u8 pm_recsrc;
	bool pm_mpu_input;
#define LEVEL_ENTRIES 32
	int left_levels[LEVEL_ENTRIES];
	int right_levels[LEVEL_ENTRIES];
	int calibrate_signal;
	int play_sample_size, play_sample_rate, play_channels;
	int play_ndelay;
	int capture_sample_size, capture_sample_rate, capture_channels;
	int capture_ndelay;
	u8 bCurrentMidiPatch;

	int last_playbank, last_recbank;
	struct snd_pcm_substream *playback_substream;
	struct snd_pcm_substream *capture_substream;

};

void snd_msnd_init_queue(void __iomem *base, int start, int size);

int snd_msnd_send_dsp_cmd(struct snd_msnd *chip, u8 cmd);
int snd_msnd_send_word(struct snd_msnd *chip,
			   unsigned char high,
			   unsigned char mid,
			   unsigned char low);
int snd_msnd_upload_host(struct snd_msnd *chip,
			     const u8 *bin, int len);
int snd_msnd_enable_irq(struct snd_msnd *chip);
int snd_msnd_disable_irq(struct snd_msnd *chip);
int snd_msnd_force_irq(struct snd_msnd *chip, bool enable);
void snd_msnd_dsp_halt(struct snd_msnd *chip, struct file *file);
int snd_msnd_DAPQ(struct snd_msnd *chip, int start);
int snd_msnd_DARQ(struct snd_msnd *chip, int start);
int snd_msnd_pcm(struct snd_card *card, int device);

void snd_msndmix_setup(struct snd_msnd *chip);
int snd_msndmix_new(struct snd_card *card);
int snd_msndmix_force_recsrc(struct snd_msnd *chip, int recsrc);
#endif /* __MSND_H */

Annotation

Implementation Notes