brintos

brintos / linux-shallow public Read only

0
0
Text · 1.7 KiB · 021b132 Raw
69 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/* aica.h3 * Header file for ALSA driver for4 * Sega Dreamcast Yamaha AICA sound5 * Copyright Adrian McMenamin6 * <adrian@mcmen.demon.co.uk>7 * 20068 */9 10/* SPU memory and register constants etc */11#define G2_FIFO 0xa05f688c12#define SPU_MEMORY_BASE 0xA080000013#define ARM_RESET_REGISTER 0xA0702C0014#define SPU_REGISTER_BASE 0xA070000015 16/* AICA channels stuff */17#define AICA_CONTROL_POINT 0xA081000018#define AICA_CONTROL_CHANNEL_SAMPLE_NUMBER 0xA081000819#define AICA_CHANNEL0_CONTROL_OFFSET 0x1000420 21/* Command values */22#define AICA_CMD_KICK 0x8000000023#define AICA_CMD_NONE 024#define AICA_CMD_START 125#define AICA_CMD_STOP 226#define AICA_CMD_VOL 327 28/* Sound modes */29#define SM_8BIT		130#define SM_16BIT	031#define SM_ADPCM	232 33/* Buffer and period size */34#define AICA_BUFFER_SIZE 0x800035#define AICA_PERIOD_SIZE 0x80036#define AICA_PERIOD_NUMBER 1637 38#define AICA_CHANNEL0_OFFSET 0x1100039#define AICA_CHANNEL1_OFFSET 0x2100040#define CHANNEL_OFFSET 0x1000041 42#define AICA_DMA_CHANNEL 543#define AICA_DMA_MODE 544 45#define SND_AICA_DRIVER "AICA"46 47struct aica_channel {48	uint32_t cmd;		/* Command ID           */49	uint32_t pos;		/* Sample position      */50	uint32_t length;	/* Sample length        */51	uint32_t freq;		/* Frequency            */52	uint32_t vol;		/* Volume 0-255         */53	uint32_t pan;		/* Pan 0-255            */54	uint32_t sfmt;		/* Sound format         */55	uint32_t flags;		/* Bit flags            */56};57 58struct snd_card_aica {59	struct work_struct spu_dma_work;60	struct snd_card *card;61	struct aica_channel *channel;62	struct snd_pcm_substream *substream;63	int clicks;64	int current_period;65	struct timer_list timer;66	int master_volume;67	int dma_check;68};69