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