emu8000_reg.h 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. #ifndef __SOUND_EMU8000_REG_H
  3. #define __SOUND_EMU8000_REG_H
  4. /*
  5. * Register operations for the EMU8000
  6. *
  7. * Copyright (C) 1999 Steve Ratcliffe
  8. *
  9. * Based on awe_wave.c by Takashi Iwai
  10. */
  11. /*
  12. * Data port addresses relative to the EMU base.
  13. */
  14. #define EMU8000_DATA0(e) ((e)->port1)
  15. #define EMU8000_DATA1(e) ((e)->port2)
  16. #define EMU8000_DATA2(e) ((e)->port2+2)
  17. #define EMU8000_DATA3(e) ((e)->port3)
  18. #define EMU8000_PTR(e) ((e)->port3+2)
  19. /*
  20. * Make a command from a register and channel.
  21. */
  22. #define EMU8000_CMD(reg, chan) ((reg)<<5 | (chan))
  23. /*
  24. * Commands to read and write the EMU8000 registers.
  25. * These macros should be used for all register accesses.
  26. */
  27. #define EMU8000_CPF_READ(emu, chan) \
  28. snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(0, (chan)))
  29. #define EMU8000_PTRX_READ(emu, chan) \
  30. snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(1, (chan)))
  31. #define EMU8000_CVCF_READ(emu, chan) \
  32. snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(2, (chan)))
  33. #define EMU8000_VTFT_READ(emu, chan) \
  34. snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(3, (chan)))
  35. #define EMU8000_PSST_READ(emu, chan) \
  36. snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(6, (chan)))
  37. #define EMU8000_CSL_READ(emu, chan) \
  38. snd_emu8000_peek_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(7, (chan)))
  39. #define EMU8000_CCCA_READ(emu, chan) \
  40. snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(0, (chan)))
  41. #define EMU8000_HWCF4_READ(emu) \
  42. snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 9))
  43. #define EMU8000_HWCF5_READ(emu) \
  44. snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 10))
  45. #define EMU8000_HWCF6_READ(emu) \
  46. snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 13))
  47. #define EMU8000_SMALR_READ(emu) \
  48. snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 20))
  49. #define EMU8000_SMARR_READ(emu) \
  50. snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 21))
  51. #define EMU8000_SMALW_READ(emu) \
  52. snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 22))
  53. #define EMU8000_SMARW_READ(emu) \
  54. snd_emu8000_peek_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 23))
  55. #define EMU8000_SMLD_READ(emu) \
  56. snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 26))
  57. #define EMU8000_SMRD_READ(emu) \
  58. snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(1, 26))
  59. #define EMU8000_WC_READ(emu) \
  60. snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(1, 27))
  61. #define EMU8000_HWCF1_READ(emu) \
  62. snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 29))
  63. #define EMU8000_HWCF2_READ(emu) \
  64. snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 30))
  65. #define EMU8000_HWCF3_READ(emu) \
  66. snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 31))
  67. #define EMU8000_INIT1_READ(emu, chan) \
  68. snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(2, (chan)))
  69. #define EMU8000_INIT2_READ(emu, chan) \
  70. snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(2, (chan)))
  71. #define EMU8000_INIT3_READ(emu, chan) \
  72. snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(3, (chan)))
  73. #define EMU8000_INIT4_READ(emu, chan) \
  74. snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(3, (chan)))
  75. #define EMU8000_ENVVOL_READ(emu, chan) \
  76. snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(4, (chan)))
  77. #define EMU8000_DCYSUSV_READ(emu, chan) \
  78. snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(5, (chan)))
  79. #define EMU8000_ENVVAL_READ(emu, chan) \
  80. snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(6, (chan)))
  81. #define EMU8000_DCYSUS_READ(emu, chan) \
  82. snd_emu8000_peek((emu), EMU8000_DATA1(emu), EMU8000_CMD(7, (chan)))
  83. #define EMU8000_ATKHLDV_READ(emu, chan) \
  84. snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(4, (chan)))
  85. #define EMU8000_LFO1VAL_READ(emu, chan) \
  86. snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(5, (chan)))
  87. #define EMU8000_ATKHLD_READ(emu, chan) \
  88. snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(6, (chan)))
  89. #define EMU8000_LFO2VAL_READ(emu, chan) \
  90. snd_emu8000_peek((emu), EMU8000_DATA2(emu), EMU8000_CMD(7, (chan)))
  91. #define EMU8000_IP_READ(emu, chan) \
  92. snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(0, (chan)))
  93. #define EMU8000_IFATN_READ(emu, chan) \
  94. snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(1, (chan)))
  95. #define EMU8000_PEFE_READ(emu, chan) \
  96. snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(2, (chan)))
  97. #define EMU8000_FMMOD_READ(emu, chan) \
  98. snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(3, (chan)))
  99. #define EMU8000_TREMFRQ_READ(emu, chan) \
  100. snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(4, (chan)))
  101. #define EMU8000_FM2FRQ2_READ(emu, chan) \
  102. snd_emu8000_peek((emu), EMU8000_DATA3(emu), EMU8000_CMD(5, (chan)))
  103. #define EMU8000_CPF_WRITE(emu, chan, val) \
  104. snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(0, (chan)), (val))
  105. #define EMU8000_PTRX_WRITE(emu, chan, val) \
  106. snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(1, (chan)), (val))
  107. #define EMU8000_CVCF_WRITE(emu, chan, val) \
  108. snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(2, (chan)), (val))
  109. #define EMU8000_VTFT_WRITE(emu, chan, val) \
  110. snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(3, (chan)), (val))
  111. #define EMU8000_PSST_WRITE(emu, chan, val) \
  112. snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(6, (chan)), (val))
  113. #define EMU8000_CSL_WRITE(emu, chan, val) \
  114. snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(7, (chan)), (val))
  115. #define EMU8000_CCCA_WRITE(emu, chan, val) \
  116. snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(0, (chan)), (val))
  117. #define EMU8000_HWCF4_WRITE(emu, val) \
  118. snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 9), (val))
  119. #define EMU8000_HWCF5_WRITE(emu, val) \
  120. snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 10), (val))
  121. #define EMU8000_HWCF6_WRITE(emu, val) \
  122. snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 13), (val))
  123. /* this register is not documented */
  124. #define EMU8000_HWCF7_WRITE(emu, val) \
  125. snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 14), (val))
  126. #define EMU8000_SMALR_WRITE(emu, val) \
  127. snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 20), (val))
  128. #define EMU8000_SMARR_WRITE(emu, val) \
  129. snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 21), (val))
  130. #define EMU8000_SMALW_WRITE(emu, val) \
  131. snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 22), (val))
  132. #define EMU8000_SMARW_WRITE(emu, val) \
  133. snd_emu8000_poke_dw((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 23), (val))
  134. #define EMU8000_SMLD_WRITE(emu, val) \
  135. snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 26), (val))
  136. #define EMU8000_SMRD_WRITE(emu, val) \
  137. snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(1, 26), (val))
  138. #define EMU8000_WC_WRITE(emu, val) \
  139. snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(1, 27), (val))
  140. #define EMU8000_HWCF1_WRITE(emu, val) \
  141. snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 29), (val))
  142. #define EMU8000_HWCF2_WRITE(emu, val) \
  143. snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 30), (val))
  144. #define EMU8000_HWCF3_WRITE(emu, val) \
  145. snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(1, 31), (val))
  146. #define EMU8000_INIT1_WRITE(emu, chan, val) \
  147. snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(2, (chan)), (val))
  148. #define EMU8000_INIT2_WRITE(emu, chan, val) \
  149. snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(2, (chan)), (val))
  150. #define EMU8000_INIT3_WRITE(emu, chan, val) \
  151. snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(3, (chan)), (val))
  152. #define EMU8000_INIT4_WRITE(emu, chan, val) \
  153. snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(3, (chan)), (val))
  154. #define EMU8000_ENVVOL_WRITE(emu, chan, val) \
  155. snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(4, (chan)), (val))
  156. #define EMU8000_DCYSUSV_WRITE(emu, chan, val) \
  157. snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(5, (chan)), (val))
  158. #define EMU8000_ENVVAL_WRITE(emu, chan, val) \
  159. snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(6, (chan)), (val))
  160. #define EMU8000_DCYSUS_WRITE(emu, chan, val) \
  161. snd_emu8000_poke((emu), EMU8000_DATA1(emu), EMU8000_CMD(7, (chan)), (val))
  162. #define EMU8000_ATKHLDV_WRITE(emu, chan, val) \
  163. snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(4, (chan)), (val))
  164. #define EMU8000_LFO1VAL_WRITE(emu, chan, val) \
  165. snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(5, (chan)), (val))
  166. #define EMU8000_ATKHLD_WRITE(emu, chan, val) \
  167. snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(6, (chan)), (val))
  168. #define EMU8000_LFO2VAL_WRITE(emu, chan, val) \
  169. snd_emu8000_poke((emu), EMU8000_DATA2(emu), EMU8000_CMD(7, (chan)), (val))
  170. #define EMU8000_IP_WRITE(emu, chan, val) \
  171. snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(0, (chan)), (val))
  172. #define EMU8000_IFATN_WRITE(emu, chan, val) \
  173. snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(1, (chan)), (val))
  174. #define EMU8000_PEFE_WRITE(emu, chan, val) \
  175. snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(2, (chan)), (val))
  176. #define EMU8000_FMMOD_WRITE(emu, chan, val) \
  177. snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(3, (chan)), (val))
  178. #define EMU8000_TREMFRQ_WRITE(emu, chan, val) \
  179. snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(4, (chan)), (val))
  180. #define EMU8000_FM2FRQ2_WRITE(emu, chan, val) \
  181. snd_emu8000_poke((emu), EMU8000_DATA3(emu), EMU8000_CMD(5, (chan)), (val))
  182. #define EMU8000_0080_WRITE(emu, chan, val) \
  183. snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(4, (chan)), (val))
  184. #define EMU8000_00A0_WRITE(emu, chan, val) \
  185. snd_emu8000_poke_dw((emu), EMU8000_DATA0(emu), EMU8000_CMD(5, (chan)), (val))
  186. #endif /* __SOUND_EMU8000_REG_H */