snd_ps3.h 2.9 KB

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