125 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Audio support for PS34 * Copyright (C) 2007 Sony Computer Entertainment Inc.5 * All rights reserved.6 * Copyright 2006, 2007 Sony Corporation7 */8 9#if !defined(_SND_PS3_H_)10#define _SND_PS3_H_11 12#include <linux/irqreturn.h>13 14#define SND_PS3_DRIVER_NAME "snd_ps3"15 16enum snd_ps3_out_channel {17 SND_PS3_OUT_SPDIF_0,18 SND_PS3_OUT_SPDIF_1,19 SND_PS3_OUT_SERIAL_0,20 SND_PS3_OUT_DEVS21};22 23enum snd_ps3_dma_filltype {24 SND_PS3_DMA_FILLTYPE_FIRSTFILL,25 SND_PS3_DMA_FILLTYPE_RUNNING,26 SND_PS3_DMA_FILLTYPE_SILENT_FIRSTFILL,27 SND_PS3_DMA_FILLTYPE_SILENT_RUNNING28};29 30enum snd_ps3_ch {31 SND_PS3_CH_L = 0,32 SND_PS3_CH_R = 1,33 SND_PS3_CH_MAX = 234};35 36struct snd_ps3_avsetting_info {37 uint32_t avs_audio_ch; /* fixed */38 uint32_t avs_audio_rate;39 uint32_t avs_audio_width;40 uint32_t avs_audio_format; /* fixed */41 uint32_t avs_audio_source; /* fixed */42 unsigned char avs_cs_info[8];43};44/*45 * PS3 audio 'card' instance46 * there should be only ONE hardware.47 */48struct snd_ps3_card_info {49 struct ps3_system_bus_device *ps3_dev;50 struct snd_card *card;51 52 struct snd_pcm *pcm;53 struct snd_pcm_substream *substream;54 55 /* hvc info */56 u64 audio_lpar_addr;57 u64 audio_lpar_size;58 59 /* registers */60 void __iomem *mapped_mmio_vaddr;61 62 /* irq */63 u64 audio_irq_outlet;64 unsigned int irq_no;65 66 /* remember avsetting */67 struct snd_ps3_avsetting_info avs;68 69 /* dma buffer management */70 spinlock_t dma_lock;71 /* dma_lock start */72 void * dma_start_vaddr[2]; /* 0 for L, 1 for R */73 dma_addr_t dma_start_bus_addr[2];74 size_t dma_buffer_size;75 void * dma_last_transfer_vaddr[2];76 void * dma_next_transfer_vaddr[2];77 int silent;78 /* dma_lock end */79 80 int running;81 82 /* null buffer */83 void *null_buffer_start_vaddr;84 dma_addr_t null_buffer_start_dma_addr;85 86 /* start delay */87 unsigned int start_delay;88 89};90 91 92/* PS3 audio DMAC block size in bytes */93#define PS3_AUDIO_DMAC_BLOCK_SIZE (128)94/* one stage (stereo) of audio FIFO in bytes */95#define PS3_AUDIO_FIFO_STAGE_SIZE (256)96/* how many stages the fifo have */97#define PS3_AUDIO_FIFO_STAGE_COUNT (8)98/* fifo size 128 bytes * 8 stages * stereo (2ch) */99#define PS3_AUDIO_FIFO_SIZE \100 (PS3_AUDIO_FIFO_STAGE_SIZE * PS3_AUDIO_FIFO_STAGE_COUNT)101 102/* PS3 audio DMAC max block count in one dma shot = 128 (0x80) blocks*/103#define PS3_AUDIO_DMAC_MAX_BLOCKS (PS3_AUDIO_DMASIZE_BLOCKS_MASK + 1)104 105#define PS3_AUDIO_NORMAL_DMA_START_CH (0)106#define PS3_AUDIO_NORMAL_DMA_COUNT (8)107#define PS3_AUDIO_NULL_DMA_START_CH \108 (PS3_AUDIO_NORMAL_DMA_START_CH + PS3_AUDIO_NORMAL_DMA_COUNT)109#define PS3_AUDIO_NULL_DMA_COUNT (2)110 111#define SND_PS3_MAX_VOL (0x0F)112#define SND_PS3_MIN_VOL (0x00)113#define SND_PS3_MIN_ATT SND_PS3_MIN_VOL114#define SND_PS3_MAX_ATT SND_PS3_MAX_VOL115 116#define SND_PS3_PCM_PREALLOC_SIZE \117 (PS3_AUDIO_DMAC_BLOCK_SIZE * PS3_AUDIO_DMAC_MAX_BLOCKS * 4)118 119#define SND_PS3_DMA_REGION_SIZE \120 (SND_PS3_PCM_PREALLOC_SIZE + PAGE_SIZE)121 122#define PS3_AUDIO_IOID (1UL)123 124#endif /* _SND_PS3_H_ */125