Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * Audio support for PS3
0004  * Copyright (C) 2007 Sony Computer Entertainment Inc.
0005  * All rights reserved.
0006  * Copyright 2006, 2007 Sony Corporation
0007  */
0008 
0009 #if !defined(_SND_PS3_H_)
0010 #define _SND_PS3_H_
0011 
0012 #include <linux/irqreturn.h>
0013 
0014 #define SND_PS3_DRIVER_NAME "snd_ps3"
0015 
0016 enum snd_ps3_out_channel {
0017     SND_PS3_OUT_SPDIF_0,
0018     SND_PS3_OUT_SPDIF_1,
0019     SND_PS3_OUT_SERIAL_0,
0020     SND_PS3_OUT_DEVS
0021 };
0022 
0023 enum snd_ps3_dma_filltype {
0024     SND_PS3_DMA_FILLTYPE_FIRSTFILL,
0025     SND_PS3_DMA_FILLTYPE_RUNNING,
0026     SND_PS3_DMA_FILLTYPE_SILENT_FIRSTFILL,
0027     SND_PS3_DMA_FILLTYPE_SILENT_RUNNING
0028 };
0029 
0030 enum snd_ps3_ch {
0031     SND_PS3_CH_L = 0,
0032     SND_PS3_CH_R = 1,
0033     SND_PS3_CH_MAX = 2
0034 };
0035 
0036 struct snd_ps3_avsetting_info {
0037     uint32_t avs_audio_ch;     /* fixed */
0038     uint32_t avs_audio_rate;
0039     uint32_t avs_audio_width;
0040     uint32_t avs_audio_format; /* fixed */
0041     uint32_t avs_audio_source; /* fixed */
0042     unsigned char avs_cs_info[8];
0043 };
0044 /*
0045  * PS3 audio 'card' instance
0046  * there should be only ONE hardware.
0047  */
0048 struct snd_ps3_card_info {
0049     struct ps3_system_bus_device *ps3_dev;
0050     struct snd_card *card;
0051 
0052     struct snd_pcm *pcm;
0053     struct snd_pcm_substream *substream;
0054 
0055     /* hvc info */
0056     u64 audio_lpar_addr;
0057     u64 audio_lpar_size;
0058 
0059     /* registers */
0060     void __iomem *mapped_mmio_vaddr;
0061 
0062     /* irq */
0063     u64 audio_irq_outlet;
0064     unsigned int irq_no;
0065 
0066     /* remember avsetting */
0067     struct snd_ps3_avsetting_info avs;
0068 
0069     /* dma buffer management */
0070     spinlock_t dma_lock;
0071         /* dma_lock start */
0072         void * dma_start_vaddr[2]; /* 0 for L, 1 for R */
0073         dma_addr_t dma_start_bus_addr[2];
0074         size_t dma_buffer_size;
0075         void * dma_last_transfer_vaddr[2];
0076         void * dma_next_transfer_vaddr[2];
0077         int    silent;
0078         /* dma_lock end */
0079 
0080     int running;
0081 
0082     /* null buffer */
0083     void *null_buffer_start_vaddr;
0084     dma_addr_t null_buffer_start_dma_addr;
0085 
0086     /* start delay */
0087     unsigned int start_delay;
0088 
0089 };
0090 
0091 
0092 /* PS3 audio DMAC block size in bytes */
0093 #define PS3_AUDIO_DMAC_BLOCK_SIZE (128)
0094 /* one stage (stereo)  of audio FIFO in bytes */
0095 #define PS3_AUDIO_FIFO_STAGE_SIZE (256)
0096 /* how many stages the fifo have */
0097 #define PS3_AUDIO_FIFO_STAGE_COUNT (8)
0098 /* fifo size 128 bytes * 8 stages * stereo (2ch) */
0099 #define PS3_AUDIO_FIFO_SIZE \
0100     (PS3_AUDIO_FIFO_STAGE_SIZE * PS3_AUDIO_FIFO_STAGE_COUNT)
0101 
0102 /* PS3 audio DMAC max block count in one dma shot = 128 (0x80) blocks*/
0103 #define PS3_AUDIO_DMAC_MAX_BLOCKS  (PS3_AUDIO_DMASIZE_BLOCKS_MASK + 1)
0104 
0105 #define PS3_AUDIO_NORMAL_DMA_START_CH (0)
0106 #define PS3_AUDIO_NORMAL_DMA_COUNT    (8)
0107 #define PS3_AUDIO_NULL_DMA_START_CH \
0108     (PS3_AUDIO_NORMAL_DMA_START_CH + PS3_AUDIO_NORMAL_DMA_COUNT)
0109 #define PS3_AUDIO_NULL_DMA_COUNT      (2)
0110 
0111 #define SND_PS3_MAX_VOL (0x0F)
0112 #define SND_PS3_MIN_VOL (0x00)
0113 #define SND_PS3_MIN_ATT SND_PS3_MIN_VOL
0114 #define SND_PS3_MAX_ATT SND_PS3_MAX_VOL
0115 
0116 #define SND_PS3_PCM_PREALLOC_SIZE \
0117     (PS3_AUDIO_DMAC_BLOCK_SIZE * PS3_AUDIO_DMAC_MAX_BLOCKS * 4)
0118 
0119 #define SND_PS3_DMA_REGION_SIZE \
0120     (SND_PS3_PCM_PREALLOC_SIZE + PAGE_SIZE)
0121 
0122 #define PS3_AUDIO_IOID       (1UL)
0123 
0124 #endif /* _SND_PS3_H_ */