hdahw.h 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098
  1. /*++
  2. Copyright (c) 2017 Minoca Corp.
  3. This file is licensed under the terms of the GNU General Public License
  4. version 3. Alternative licensing terms are available. Contact
  5. info@minocacorp.com for details. See the LICENSE file at the root of this
  6. project for complete licensing information.
  7. Module Name:
  8. hdahw.h
  9. Abstract:
  10. This header contains hardware definitions for Intel High Definition Audio
  11. controllers.
  12. Author:
  13. Chris Stevens 3-Apr-2017
  14. --*/
  15. //
  16. // ------------------------------------------------------------------- Includes
  17. //
  18. //
  19. // --------------------------------------------------------------------- Macros
  20. //
  21. //
  22. // These macros read and write to general HD Audio controller registers.
  23. //
  24. #define HDA_READ32(_Controller, _Register) \
  25. HlReadRegister32((_Controller)->ControllerBase + (_Register))
  26. #define HDA_WRITE32(_Controller, _Register, _Value) \
  27. HlWriteRegister32((_Controller)->ControllerBase + (_Register), (_Value))
  28. #define HDA_READ16(_Controller, _Register) \
  29. HlReadRegister16((_Controller)->ControllerBase + (_Register))
  30. #define HDA_WRITE16(_Controller, _Register, _Value) \
  31. HlWriteRegister16((_Controller)->ControllerBase + (_Register), (_Value))
  32. #define HDA_READ8(_Controller, _Register) \
  33. HlReadRegister8((_Controller)->ControllerBase + (_Register))
  34. #define HDA_WRITE8(_Controller, _Register, _Value) \
  35. HlWriteRegister8((_Controller)->ControllerBase + (_Register), (_Value))
  36. //
  37. // These macros read and write to stream descriptor registers.
  38. //
  39. #define HDA_STREAM_REGISTER(_Index, _Register) \
  40. (HdaRegisterStreamDescriptorBase + \
  41. (HDA_STREAM_DESCRIPTOR_SIZE * (_Index)) + \
  42. (_Register))
  43. #define HDA_STREAM_READ32(_Controller, _Index, _Register) \
  44. HDA_READ32(_Controller, HDA_STREAM_REGISTER(_Index, _Register))
  45. #define HDA_STREAM_WRITE32(_Controller, _Index, _Register, _Value) \
  46. HDA_WRITE32(_Controller, HDA_STREAM_REGISTER(_Index, _Register), (_Value))
  47. #define HDA_STREAM_READ16(_Controller, _Index, _Register) \
  48. HDA_READ16(_Controller, HDA_STREAM_REGISTER(_Index, _Register))
  49. #define HDA_STREAM_WRITE16(_Controller, _Index, _Register, _Value) \
  50. HDA_WRITE16(_Controller, HDA_STREAM_REGISTER(_Index, _Register), (_Value))
  51. #define HDA_STREAM_READ8(_Controller, _Index, _Register) \
  52. HDA_READ8(_Controller, HDA_STREAM_REGISTER(_Index, _Register))
  53. #define HDA_STREAM_WRITE8(_Controller, _Index, _Register, _Value) \
  54. HDA_WRITE8(_Controller, HDA_STREAM_REGISTER(_Index, _Register), (_Value))
  55. //
  56. // ---------------------------------------------------------------- Definitions
  57. //
  58. //
  59. // Define the root node ID, guaranteed to be present for all codecs.
  60. //
  61. #define HDA_ROOT_NODE_ID 0
  62. //
  63. // Define the delay necessary after issuing a controller reset.
  64. //
  65. #define HDA_CONTROLLER_RESET_DELAY 100
  66. //
  67. // Define the delay necessary to allow codecs to self-enumerate, in
  68. // microseconds.
  69. //
  70. #define HDA_CODEC_ENUMERATION_DELAY 521
  71. //
  72. // Define the maximum number of codecs that may be attached to an HD Audio
  73. // device.
  74. //
  75. #define HDA_MAX_CODEC_COUNT 15
  76. //
  77. // Define the maximum verb value that can take a 16-bit payload. All others
  78. // take and 8-bit payload.
  79. //
  80. #define HDA_MAX_16_BIT_PAYLOAD_VERB 0xF
  81. //
  82. // Define the size of a stream descriptor, in bytes.
  83. //
  84. #define HDA_STREAM_DESCRIPTOR_SIZE 0x20
  85. //
  86. // Define the alignment of the DMA buffers.
  87. //
  88. #define HDA_DMA_BUFFER_ALIGNMENT 128
  89. //
  90. // Define the bits for the global capabilities register.
  91. //
  92. #define HDA_GLOBAL_CAPABILITIES_OUTPUT_STREAMS_SUPPORTED_MASK 0xF000
  93. #define HDA_GLOBAL_CAPABILITIES_OUTPUT_STREAMS_SUPPORTED_SHIFT 12
  94. #define HDA_GLOBAL_CAPABILITIES_INPUT_STREAMS_SUPPORTED_MASK 0x0F00
  95. #define HDA_GLOBAL_CAPABILITIES_INPUT_STREAMS_SUPPORTED_SHIFT 8
  96. #define HDA_GLOBAL_CAPABILITIES_BIDIRECTIONAL_STREAMS_SUPPORTED_MASK 0x00F8
  97. #define HDA_GLOBAL_CAPABILITIES_BIDIRECTIONAL_STREAMS_SUPPORTED_SHIFT 3
  98. #define HDA_GLOBAL_CAPABILITIES_SERIAL_DATA_OUT_SIGNALS_MASK 0x0006
  99. #define HDA_GLOBAL_CAPABILITIES_SERIAL_DATA_OUT_SIGNALS_SHIFT 1
  100. #define HDA_GLOBAL_CAPABILITIES_64_BIT_ADDRESSES_SUPPORTED 0x0001
  101. //
  102. // Define the bits for the global control register.
  103. //
  104. #define HDA_GLOBAL_CONTROL_ACCEPT_UNSOLICITED_RESPONSE_ENABLE 0x00000100
  105. #define HDA_GLOBAL_CONTROL_FLUSH_CONTROL 0x00000002
  106. #define HDA_GLOBAL_CONTROL_CONTROLLER_RESET 0x00000001
  107. //
  108. // Define the bits for the global status register.
  109. //
  110. #define HDA_GLOBAL_STATUS_FLUSH_STATUS 0x0002
  111. //
  112. // Define the bits for the interrupt control register.
  113. //
  114. #define HDA_INTERRUPT_CONTROL_GLOBAL_ENABLE 0x80000000
  115. #define HDA_INTERRUPT_CONTROL_CONTROLLER_ENABLE 0x40000000
  116. #define HDA_INTERRUPT_CONTROL_STREAM_ENABLE_MASK 0x3FFFFFFF
  117. #define HDA_INTERRUPT_CONTROL_STREAM_ENABLE_SHIFT 0
  118. //
  119. // Define the bits for the interrupt status register.
  120. //
  121. #define HDA_INTERRUPT_STATUS_GLOBAL 0x80000000
  122. #define HDA_INTERRUPT_STATUS_CONTROLLER 0x40000000
  123. #define HDA_INTERRUPT_STATUS_STREAM_MASK 0x3FFFFFFF
  124. #define HDA_INTERRUPT_STATUS_STREAM_SHIFT 0
  125. //
  126. // Define the alignment of the command output ring buffer (CORB), in bytes.
  127. //
  128. #define HDA_CORB_ALIGNMENT 128
  129. //
  130. // Define the bits for the CORB write pointer register.
  131. //
  132. #define HDA_CORB_WRITE_POINTER_MASK 0x00FF
  133. #define HDA_CORB_WRITE_POINTER_SHIFT 0
  134. #define HDA_CORB_WRITE_POINTER_MAX 0xFF
  135. //
  136. // Define the bits for the CORB read pointer register.
  137. //
  138. #define HDA_CORB_READ_POINTER_RESET 0x8000
  139. #define HDA_CORB_READ_POINTER_MASK 0x00FF
  140. #define HDA_CORB_READ_POINTER_SHIFT 0
  141. #define HDA_CORB_READ_POINTER_MAX 0xFF
  142. //
  143. // Define the bits for the CORB control register.
  144. //
  145. #define HDA_CORB_CONTROL_DMA_ENABLE 0x02
  146. #define HDA_CORB_CONTROL_MEMORY_ERROR_INTERRUPT_ENABLE 0x01
  147. //
  148. // Define the bits for the CORB status register.
  149. //
  150. #define HDA_CORB_STATUS_MEMORY_ERROR_INDICATION 0x01
  151. //
  152. // Define the bits of the CORB size register.
  153. //
  154. #define HDA_CORB_SIZE_CAPABILITY_256 0x40
  155. #define HDA_CORB_SIZE_CAPABILITY_16 0x20
  156. #define HDA_CORB_SIZE_CAPABILITY_2 0x10
  157. #define HDA_CORB_SIZE_MASK 0x03
  158. #define HDA_CORB_SIZE_SHIFT 0
  159. #define HDA_CORB_SIZE_256 0x2
  160. #define HDA_CORB_SIZE_16 0x1
  161. #define HDA_CORB_SIZE_2 0x0
  162. //
  163. // Define the alignment of the response input ring buffer (RIRB), in bytes.
  164. //
  165. #define HDA_RIRB_ALIGNMENT 128
  166. //
  167. // Define the bits for the RIRB write pointer register.
  168. //
  169. #define HDA_RIRB_WRITE_POINTER_RESET 0x8000
  170. #define HDA_RIRB_WRITE_POINTER_MASK 0x00FF
  171. #define HDA_RIRB_WRITE_POINTER_SHIFT 0
  172. #define HDA_RIRB_WRITE_POINTER_MAX 0xFF
  173. //
  174. // Define the response interrupt count register bits.
  175. //
  176. #define HDA_RESPONSE_INTERRUPT_COUNT_MASK 0x00FF
  177. #define HDA_RESPONSE_INTERRUPT_COUNT_SHIFT 0
  178. //
  179. // Define the RIRB control register bits.
  180. //
  181. #define HDA_RIRB_CONTROL_OVERRUN_INTERRUPT_ENABLE 0x04
  182. #define HDA_RIRB_CONTROL_DMA_ENABLE 0x02
  183. #define HDA_RIRB_CONTROL_INTERRUPT_ENABLE 0x01
  184. //
  185. // Define the RIRB status register bits.
  186. //
  187. #define HDA_RIRB_STATUS_OVERRUN_INTERRUPT 0x04
  188. #define HDA_RIRB_STATUS_INTERRUPT 0x01
  189. //
  190. // Define the bits of the RIRB size register.
  191. //
  192. #define HDA_RIRB_SIZE_CAPABILITY_256 0x40
  193. #define HDA_RIRB_SIZE_CAPABILITY_16 0x20
  194. #define HDA_RIRB_SIZE_CAPABILITY_2 0x10
  195. #define HDA_RIRB_SIZE_MASK 0x03
  196. #define HDA_RIRB_SIZE_SHIFT 0
  197. #define HDA_RIRB_SIZE_256 0x2
  198. #define HDA_RIRB_SIZE_16 0x1
  199. #define HDA_RIRB_SIZE_2 0x0
  200. //
  201. // Define the DMA position buffer address alignment.
  202. //
  203. #define HDA_DMA_POSITION_ALIGNMENT 128
  204. //
  205. // Define the bits of the DMA position lower base address register.
  206. //
  207. #define HDA_DMA_POSITION_BUFFER_LOWER_BASE_ENABLE 0x00000001
  208. //
  209. // Define the bits for the stream descriptor control registers.
  210. //
  211. #define HDA_STREAM_CONTROL_STREAM_NUMBER_MASK 0xF00000
  212. #define HDA_STREAM_CONTROL_STREAM_NUMBER_SHIFT 20
  213. #define HDA_STREAM_CONTROL_BIDIRECTIONAL_OUTPUT 0x080000
  214. #define HDA_STREAM_CONTROL_TRAFFIC_PRIORITY 0x040000
  215. #define HDA_STREAM_CONTROL_STRIPE_CONTROL_MASK 0x030000
  216. #define HDA_STREAM_CONTROL_STRIPE_CONTROL_SHIFT 16
  217. #define HDA_STREAM_CONTROL_STRIPE_CONTROL_1 0x0
  218. #define HDA_STREAM_CONTROL_STRIPE_CONTROL_2 0x1
  219. #define HDA_STREAM_CONTROL_STRIPE_CONTROL_4 0x2
  220. #define HDA_STREAM_CONTROL_DESCRIPTOR_ERROR_INTERRUPT_ENABLE 0x000010
  221. #define HDA_STREAM_CONTROL_FIFO_ERROR_INTERRUPT_ENABLE 0x000008
  222. #define HDA_STREAM_CONTROL_COMPLETION_INTERRUPT_ENABLE 0x000004
  223. #define HDA_STREAM_CONTROL_DMA_ENABLE 0x000002
  224. #define HDA_STREAM_CONTROL_RESET 0x000001
  225. //
  226. // Define the bits for the stream descriptor status registers.
  227. //
  228. #define HDA_STREAM_STATUS_FIFO_READY 0x20
  229. #define HDA_STREAM_STATUS_DESCRIPTOR_ERROR 0x10
  230. #define HDA_STREAM_STATUS_FIFO_ERROR 0x08
  231. #define HDA_STREAM_STATUS_BUFFER_COMPLETE 0x04
  232. //
  233. // Define the bits for the stream descriptor last valid index registers.
  234. //
  235. #define HDA_STREAM_LAST_VALID_INDEX_MASK 0x00FF
  236. #define HDA_STREAM_LAST_VALID_INDEX_SHIFT 0
  237. //
  238. // Define the bits for the stream format. This is programmed in both the
  239. // stream descriptor and the converter stream channel verb.
  240. //
  241. #define HDA_FORMAT_NON_PCM 0x8000
  242. #define HDA_FORMAT_SAMPLE_BASE_RATE_MASK 0x7F00
  243. #define HDA_FORMAT_SAMPLE_BASE_RATE_SHIFT 8
  244. #define HDA_FORMAT_SAMPLE_BASE_RATE_8000 0x05
  245. #define HDA_FORMAT_SAMPLE_BASE_RATE_11025 0x03
  246. #define HDA_FORMAT_SAMPLE_BASE_RATE_16000 0x02
  247. #define HDA_FORMAT_SAMPLE_BASE_RATE_22050 0x41
  248. #define HDA_FORMAT_SAMPLE_BASE_RATE_24000 0x01
  249. #define HDA_FORMAT_SAMPLE_BASE_RATE_32000 0x0A
  250. #define HDA_FORMAT_SAMPLE_BASE_RATE_44100 0x40
  251. #define HDA_FORMAT_SAMPLE_BASE_RATE_48000 0x00
  252. #define HDA_FORMAT_SAMPLE_BASE_RATE_88200 0x48
  253. #define HDA_FORMAT_SAMPLE_BASE_RATE_96000 0x08
  254. #define HDA_FORMAT_SAMPLE_BASE_RATE_176400 0x58
  255. #define HDA_FORMAT_SAMPLE_BASE_RATE_192000 0x18
  256. #define HDA_FORMAT_SAMPLE_BASE_RATE_384000 0x38
  257. #define HDA_FORMAT_SAMPLE_BASE_RATE_44KHZ 0x4000
  258. #define HDA_FORMAT_SAMPLE_BASE_RATE_48KHZ 0x0000
  259. #define HDA_FORMAT_SAMPLE_BASE_RATE_MULTIPLE_MASK 0x3800
  260. #define HDA_FORMAT_SAMPLE_BASE_RATE_MULTIPLE_SHIFT 11
  261. #define HDA_FORMAT_SAMPLE_BASE_RATE_MULTIPLE_X2 0x1
  262. #define HDA_FORMAT_SAMPLE_BASE_RATE_MULTIPLE_X3 0x2
  263. #define HDA_FORMAT_SAMPLE_BASE_RATE_MULTIPLE_X4 0x3
  264. #define HDA_FORMAT_SAMPLE_BASE_RATE_DIVISOR_MASK 0x0700
  265. #define HDA_FORMAT_SAMPLE_BASE_RATE_DIVISOR_SHIFT 8
  266. #define HDA_FORMAT_SAMPLE_BASE_RATE_DIVISOR_1 0x0
  267. #define HDA_FORMAT_SAMPLE_BASE_RATE_DIVISOR_2 0x1
  268. #define HDA_FORMAT_SAMPLE_BASE_RATE_DIVISOR_3 0x2
  269. #define HDA_FORMAT_SAMPLE_BASE_RATE_DIVISOR_4 0x3
  270. #define HDA_FORMAT_SAMPLE_BASE_RATE_DIVISOR_5 0x4
  271. #define HDA_FORMAT_SAMPLE_BASE_RATE_DIVISOR_6 0x5
  272. #define HDA_FORMAT_SAMPLE_BASE_RATE_DIVISOR_7 0x6
  273. #define HDA_FORMAT_SAMPLE_BASE_RATE_DIVISOR_8 0x7
  274. #define HDA_FORMAT_BITS_PER_SAMPLE_MASK 0x0070
  275. #define HDA_FORMAT_BITS_PER_SAMPLE_SHIFT 4
  276. #define HDA_FORMAT_BITS_PER_SAMPLE_8 0x0
  277. #define HDA_FORMAT_BITS_PER_SAMPLE_16 0x1
  278. #define HDA_FORMAT_BITS_PER_SAMPLE_20 0x2
  279. #define HDA_FORMAT_BITS_PER_SAMPLE_24 0x3
  280. #define HDA_FORMAT_BITS_PER_SAMPLE_32 0x4
  281. #define HDA_FORMAT_NUMBER_OF_CHANNELS_MASK 0x000F
  282. #define HDA_FORMAT_NUMBER_OF_CHANNELS_SHIFT 0
  283. //
  284. // Define the buffer descriptor list alignment.
  285. //
  286. #define HDA_BUFFER_DESCRIPTOR_LIST_ALIGNMENT 128
  287. //
  288. // Define the bits for the immediate command status register.
  289. //
  290. #define HDA_IMMEDIATE_COMMAND_STATUS_RESPONSE_RESULT_ADDRESS_MASK 0x00F0
  291. #define HDA_IMMEDIATE_COMMAND_STATUS_RESPONSE_RESULT_ADDRESS_SHIFT 4
  292. #define HDA_IMMEDIATE_COMMAND_STATUS_RESPONSE_RESULT_UNSOLICITED 0x0008
  293. #define HDA_IMMEDIATE_COMMAND_STATUS_VERSION_EXTENDED 0x0004
  294. #define HDA_IMMEDIATE_COMMAND_STATUS_RESULT_VALID 0x0002
  295. #define HDA_IMMEDIATE_COMMAND_STATUS_BUSY 0x0001
  296. //
  297. // Define the bits for the buffer descriptor list entry flags.
  298. //
  299. #define HDA_BUFFER_DESCRIPTOR_FLAG_INTERRUPT_ON_COMPLETION 0x00000001
  300. //
  301. // Define the broadcast codec address.
  302. //
  303. #define HDA_CODEC_BROADCAST_ADDRESS 0xF
  304. //
  305. // Define the command verb bits.
  306. //
  307. #define HDA_COMMAND_VERB_CODEC_ADDRESS_MASK 0xF0000000
  308. #define HDA_COMMAND_VERB_CODEC_ADDRESS_SHIFT 28
  309. #define HDA_COMMAND_VERB_INDIRECT_NODE_ID 0x08000000
  310. #define HDA_COMMAND_VERB_NODE_ID_MASK 0x0FF00000
  311. #define HDA_COMMAND_VERB_NODE_ID_SHIFT 20
  312. #define HDA_COMMAND_VERB_PAYLOAD_MASK 0x000FFFFF
  313. #define HDA_COMMAND_VERB_PAYLOAD_SHIFT 0
  314. //
  315. // Define the response extended flags.
  316. //
  317. #define HDA_RESPONSE_EXTENDED_FLAG_UNSOLICITED 0x00000010
  318. #define HDA_RESPONSE_EXTENDED_FLAG_CODEC_ADDRESS_MASK 0x0000000F
  319. #define HDA_RESPONSE_EXTENDED_FLAG_CODEC_ADDRESS_SHIFT 0
  320. //
  321. // Define the bits for the get amplifier gain/mute payload.
  322. //
  323. #define HDA_GET_AMPLIFIER_GAIN_PAYLOAD_OUTPUT 0x8000
  324. #define HDA_GET_AMPLIFIER_GAIN_PAYLOAD_INPUT 0x0000
  325. #define HDA_GET_AMPLIFIER_GAIN_PAYLOAD_LEFT 0x2000
  326. #define HDA_GET_AMPLIFIER_GAIN_PAYLOAD_RIGHT 0x0000
  327. #define HDA_GET_AMPLIFIER_GAIN_PAYLOAD_INDEX_MASK 0x000F
  328. #define HDA_GET_AMPLIFIER_GAIN_PAYLOAD_INDEX_SHIFT 0
  329. //
  330. // Define the bits for the get amplifier gain/mute response.
  331. //
  332. #define HDA_GET_AMPLIFIER_GAIN_RESPONSE_MUTE 0x00000080
  333. #define HDA_GET_AMPLIFIER_GAIN_RESPONSE_GAIN_MASK 0x0000007F
  334. #define HDA_GET_AMPLIFIER_GAIN_RESPONSE_GAIN_SHIFT 0
  335. //
  336. // Define the bits for the set amplifier/gain payload.
  337. //
  338. #define HDA_SET_AMPLIFIER_GAIN_PAYLOAD_OUTPUT 0x8000
  339. #define HDA_SET_AMPLIFIER_GAIN_PAYLOAD_INPUT 0x4000
  340. #define HDA_SET_AMPLIFIER_GAIN_PAYLOAD_LEFT 0x2000
  341. #define HDA_SET_AMPLIFIER_GAIN_PAYLOAD_RIGHT 0x1000
  342. #define HDA_SET_AMPLIFIER_GAIN_PAYLOAD_INDEX_MASK 0x0F00
  343. #define HDA_SET_AMPLIFIER_GAIN_PAYLOAD_INDEX_SHIFT 8
  344. #define HDA_SET_AMPLIFIER_GAIN_PAYLOAD_MUTE 0x0080
  345. #define HDA_SET_AMPLIFIER_GAIN_PAYLOAD_GAIN_MASK 0x007F
  346. #define HDA_SET_AMPLIFIER_GAIN_PAYLOAD_GAIN_SHIFT 0
  347. //
  348. // Define the bits for the S/PDIF IEC Control (SIC) payload and response. This
  349. // is for the digital converter control verbs.
  350. //
  351. #define HDA_SIC_KEEP_ALIVE_ENABLE 0x00800000
  352. #define HDA_SIC_IEC_CODING_TYPE_MASK 0x000F0000
  353. #define HDA_SIC_IEC_CODING_TYPE_SHIFT 16
  354. #define HDA_SIC_CATEGORY_CODE_MASK 0x00007F00
  355. #define HDA_SIC_CATEGORY_CODE_SHIFT 8
  356. #define HDA_SIC_GENERATION_LEVEL 0x00000080
  357. #define HDA_SIC_PROFESSIONAL 0x00000040
  358. #define HDA_SIC_NON_PCM 0x00000020
  359. #define HDA_SIC_NO_COPYRIGHT 0x00000010
  360. #define HDA_SIC_PREEMPHASIS 0x00000008
  361. #define HDA_SIC_VALIDITY_CONFIG 0x00000004
  362. #define HDA_SIC_VALIDITY 0x00000002
  363. #define HDA_SIC_DIGITAL_ENABLE 0x00000001
  364. //
  365. // Define the bits for the get power state response.
  366. //
  367. #define HDA_POWER_STATE_RESPONSE_SETTINGS_RESET 0x00000400
  368. #define HDA_POWER_STATE_RESPONSE_CLOCK_STOP_OK 0x00000200
  369. #define HDA_POWER_STATE_RESPONSE_ERROR 0x00000100
  370. #define HDA_POWER_STATE_RESPONSE_ACTUAL_MASK 0x000000F0
  371. #define HDA_POWER_STATE_RESPONSE_ACTUAL_SHIFT 4
  372. #define HDA_POWER_STATE_RESPONSE_SETTING_MASK 0x0000000F
  373. #define HDA_POWER_STATE_RESPONSE_SETTING_SHIFT 0
  374. //
  375. // Define the bits for the set power state payload.
  376. //
  377. #define HDA_POWER_STATE_PAYLOAD_SETTING_MASK 0x0F
  378. #define HDA_POWER_STATE_PAYLOAD_SETTING_SHIFT 0
  379. #define HDA_POWER_STATE_D0 0x00
  380. #define HDA_POWER_STATE_D1 0x01
  381. #define HDA_POWER_STATE_D2 0x02
  382. #define HDA_POWER_STATE_D3 0x03
  383. #define HDA_POWER_STATE_D3_COLD 0x04
  384. //
  385. // Define the bits for the converter control bits.
  386. //
  387. #define HDA_CONVERTER_CONTROL_STREAM_MASK 0x000000F0
  388. #define HDA_CONVERTER_CONTROL_STREAM_SHIFT 4
  389. #define HDA_CONVERTER_CONTROL_CHANNEL_MASK 0x0000000F
  390. #define HDA_CONVERTER_CONTROL_CHANNEL_SHIFT 0
  391. //
  392. // Define the pin widget control payload and response format.
  393. //
  394. #define HDA_PIN_WIDGET_CONTROL_HEAD_PHONE_ENABLE 0x80
  395. #define HDA_PIN_WIDGET_CONTROL_OUT_ENABLE 0x40
  396. #define HDA_PIN_WIDGET_CONTROL_IN_ENABLE 0x20
  397. #define HDA_PIN_WIDGET_CONTROL_VOLTAGE_REFERENCE_ENABLE_MASK 0x07
  398. #define HDA_PIN_WIDGET_CONTROL_VOLTAGE_REFERENCE_ENABLE_SHIFT 0
  399. #define HDA_PIN_WIDGET_CONTROL_VOLTAGE_REFERENCE_ENABLE_HI_Z 0x0
  400. #define HDA_PIN_WIDGET_CONTROL_VOLTAGE_REFERENCE_ENABLE_50_PERCENT 0x1
  401. #define HDA_PIN_WIDGET_CONTROL_VOLTAGE_REFERENCE_ENABLE_GROUND 0x2
  402. #define HDA_PIN_WIDGET_CONTROL_VOLTAGE_REFERENCE_ENABLE_80_PERCENT 0x4
  403. #define HDA_PIN_WIDGET_CONTROL_VOLTAGE_REFERENCE_ENABLE_100_PERCENT 0x5
  404. #define HDA_PIN_WIDGET_ENCODED_PACKET_TYPE_MASK 0x03
  405. #define HDA_PIN_WIDGET_ENCODED_PACKET_TYPE_SHIFT 0
  406. #define HDA_PIN_WIDGET_ENCODED_PACKET_TYPE_NATIVE 0x0
  407. #define HDA_PIN_WIDGET_ENCODED_PACKET_TYPE_HIGH_BIT_RATE 0x3
  408. //
  409. // Define the bits for the unsolicited response control payload and response.
  410. //
  411. #define HDA_UNSOLICITED_RESPONSE_CONTROL_ENABLE 0x80
  412. #define HDA_UNSOLICITED_RESPONSE_CONTROL_TAG_MASK 0x3F
  413. #define HDA_UNSOLICITED_RESPONSE_CONTROL_TAG_SHIFT 0
  414. //
  415. // Define the bits for an unsolicited response.
  416. //
  417. #define HDA_UNSOLICITED_RESPONSE_TAG_MASK 0xFC000000
  418. #define HDA_UNSOLICITED_RESPONSE_TAG_SHIFT 26
  419. #define HDA_UNSOLICITED_RESPONSE_SUB_TAG_MASK 0x03E00000
  420. #define HDA_UNSOLICITED_RESPONSE_SUB_TAG_SHIFT 21
  421. #define HDA_UNSOLICITED_RESPONSE_ELD_VALID 0x00000002
  422. #define HDA_UNSOLICITED_RESPONSE_PRESENCE_DETECT 0x00000001
  423. //
  424. // Define the bits for the get pin sense response.
  425. //
  426. #define HDA_PIN_SENSE_RESPONSE_PRESENCE_DETECT 0x80000000
  427. #define HDA_PIN_SENSE_RESPONSE_ANALOG_IMPEDANCE_MASK 0x7FFFFFFF
  428. #define HDA_PIN_SENSE_REPSONSE_ANALOG_IMEPDANCE_SHIFT 0
  429. #define HDA_PIN_SENSE_RESPONSE_DIGITAL_ELD_VALID 0x40000000
  430. //
  431. // Define the bits for the pin sense execute payload.
  432. //
  433. #define HDA_PIN_SENSE_EXECUTE_ANALOG_RIGHT_CHANNEL 0x01
  434. //
  435. // Define the bits for the EAPD/BTL enable payload and response.
  436. //
  437. #define HDA_EAPD_BTL_ENABLE_LEFT_RIGHT_SWAP 0x04
  438. #define HDA_EAPD_BTL_ENABLE_EAPD 0x02
  439. #define HDA_EAPD_BTL_ENABLE_BTL 0x01
  440. //
  441. // Define the bits for the volume knob payload and response.
  442. //
  443. #define HDA_VOLUME_KNOB_DIRECT 0x80
  444. #define HDA_VOLUME_KNOB_VOLUME_MASK 0x7F
  445. #define HDA_VOLUME_KNOB_VOLUME_SHIFT 0
  446. //
  447. // Define the bits and mask values for the configuration default register.
  448. //
  449. #define HDA_CONFIGURATION_DEFAULT_PORT_CONNECTIVITY_MASK 0xC0000000
  450. #define HDA_CONFIGURATION_DEFAULT_PORT_CONNECTIVITY_SHIFT 30
  451. #define HDA_CONFIGURATION_DEFAULT_LOCATION_MASK 0x3F000000
  452. #define HDA_CONFIGURATION_DEFAULT_LOCATION_SHIFT 24
  453. #define HDA_CONFIGURATION_DEFAULT_DEVICE_MASK 0x00F00000
  454. #define HDA_CONFIGURATION_DEFAULT_DEVICE_SHIFT 20
  455. #define HDA_CONFIGURATION_DEFAULT_CONNECTION_TYPE_MASK 0x000F0000
  456. #define HDA_CONFIGURATION_DEFAULT_CONNECTION_TYPE_SHIFT 16
  457. #define HDA_CONFIGURATION_DEFAULT_COLOR_MASK 0x0000F000
  458. #define HDA_CONFIGURATION_DEFAULT_COLOR_SHIFT 12
  459. #define HDA_CONFIGURATION_DEFAULT_MISC_MASK 0x00000F00
  460. #define HDA_CONFIGURATION_DEFAULT_MISC_SHIFT 8
  461. #define HDA_CONFIGURATION_DEFAULT_ASSOCIATION_MASK 0x000000F0
  462. #define HDA_CONFIGURATION_DEFAULT_ASSOCIATION_SHIFT 4
  463. #define HDA_CONFIGURATION_DEFAULT_SEQUENCE_MASK 0x0000000F
  464. #define HDA_CONFIGURATION_DEFAULT_SEQUENCE_SHIFT 0
  465. #define HDA_PORT_CONNECTIVITY_JACK 0x0
  466. #define HDA_PORT_CONNECTIVITY_NONE 0x1
  467. #define HDA_PORT_CONNECTIVITY_FIXED_FUNCTION 0x2
  468. #define HDA_PORT_CONNECTIVITY_BOTH 0x3
  469. #define HDA_LOCATION_GROSS_EXTERNAL 0x00
  470. #define HDA_LOCATION_GROSS_INTERNAL 0x10
  471. #define HDA_LOCATION_GROSS_SEPARATE 0x20
  472. #define HDA_LOCATION_GROSS_OTHER 0x30
  473. #define HDA_LOCATION_GEOMETRIC_NONE 0x00
  474. #define HDA_LOCATION_GEOMETRIC_REAR 0x01
  475. #define HDA_LOCATION_GEOMETRIC_FRONT 0x02
  476. #define HDA_LOCATION_GEOMETRIC_LEFT 0x03
  477. #define HDA_LOCATION_GEOMETRIC_TOP 0x05
  478. #define HDA_LOCATION_GEOMETRIC_BOTTOM 0x06
  479. #define HDA_LOCATION_REAR_PANEL 0x07
  480. #define HDA_LOCATION_RISER 0x17
  481. #define HDA_LOCATION_MOBILE_LID_INSIDE 0x37
  482. #define HDA_LOCATION_DRIVE_BAY 0x08
  483. #define HDA_LOCATION_DIGITAL_DISPLAY 0x18
  484. #define HDA_LOCATION_MOBILE_LID_OUTSIDE 0x38
  485. #define HDA_LOCATION_ATAPI 0x19
  486. #define HDA_DEVICE_LINE_OUT 0x0
  487. #define HDA_DEVICE_SPEAKER 0x1
  488. #define HDA_DEVICE_HP_OUT 0x2
  489. #define HDA_DEVICE_CD 0x3
  490. #define HDA_DEVICE_SPDIF_OUT 0x4
  491. #define HDA_DEVICE_DIGITAL_OTHER_OUT 0x5
  492. #define HDA_DEVICE_MODEM_LINE_SIDE 0x6
  493. #define HDA_DEVICE_MODEM_HANDSET_SIDE 0x7
  494. #define HDA_DEVICE_LINE_IN 0x8
  495. #define HDA_DEVICE_AUX 0x9
  496. #define HDA_DEVICE_MIC_IN 0xA
  497. #define HDA_DEVICE_TELEPHONY 0xB
  498. #define HDA_DEVICE_SPDIF_IN 0xC
  499. #define HDA_DEVICE_DIGITAL_OTHER_IN 0xD
  500. #define HDA_DEVICE_OTHER 0xF
  501. #define HDA_CONNECTION_TYPE_UNKNOWN 0x0
  502. #define HDA_CONNECTION_TYPE_1_8_STEREO_MONO 0x1
  503. #define HDA_CONNECTION_TYPE_1_4_STEREO_MONO 0x2
  504. #define HDA_CONNECTION_TYPE_ATAPI_INTERNAL 0x3
  505. #define HDA_CONNECTION_TYPE_RCA 0x4
  506. #define HDA_CONNECTION_TYPE_OPTICAL 0x5
  507. #define HDA_CONNECTION_TYPE_OTHER_DIGITAL 0x6
  508. #define HDA_CONNECTION_TYPE_OTHER_ANALOG 0x7
  509. #define HDA_CONNECTION_TYPE_MULTICHANNEL_ANALOG 0x8
  510. #define HDA_CONNECTION_TYPE_XLR_PROFESSION 0x9
  511. #define HDA_CONNECTION_TYPE_RJ11_MODEM 0xA
  512. #define HDA_CONNECTION_TYPE_COMBINATION 0xB
  513. #define HDA_CONNECTION_TYPE_OTHER 0xF
  514. #define HDA_COLOR_UNKNOWN 0x0
  515. #define HDA_COLOR_BLACK 0x1
  516. #define HDA_COLOR_GREY 0x2
  517. #define HDA_COLOR_BLUE 0x3
  518. #define HDA_COLOR_GREEN 0x4
  519. #define HDA_COLOR_RED 0x5
  520. #define HDA_COLOR_ORANGE 0x6
  521. #define HDA_COLOR_YELLOW 0x7
  522. #define HDA_COLOR_PURPLE 0x8
  523. #define HDA_COLOR_PINK 0x9
  524. #define HDA_COLOR_WHITE 0xE
  525. #define HDA_COLOR_OTHER 0xF
  526. #define HDA_MISC_JACK_DETECT_OVERRIDE 0x1
  527. //
  528. // Define the bits for the stripe control register.
  529. //
  530. #define HDA_STRIPE_CONTROL_CAPABILITY_MASK 0x00700000
  531. #define HDA_STRIPE_CONTROL_CAPABILITY_SHIFT 20
  532. #define HDA_STRIPE_CONTROL_MASK 0x00000003
  533. #define HDA_STRIPE_CONTROL_SHIFT 0
  534. //
  535. // Define the bits for the EDID-Like Data (ELD) data response.
  536. //
  537. #define HDA_ELD_VALID 0x80000000
  538. #define HDA_ELD_BYTE_MASK 0x000000FF
  539. #define HDA_ELD_BYTE_SHIFT 0
  540. //
  541. // Define the bits for the Data Island Packet (DIP) size payload.
  542. //
  543. #define HDA_DIP_SIZE_PAYLOAD_ELD_SIZE 0x08
  544. #define HDA_DIP_SIZE_PAYLOAD_PACKET_INDEX_MASK 0x07
  545. #define HDA_DIP_SIZE_PAYLOAD_PACKET_INDEX_SHIFT 0
  546. //
  547. // Define the bits for the Data Island Packet (DIP) size response.
  548. //
  549. #define HDA_DIP_SIZE_RESPONSE_SIZE_MASK 0x000000FF
  550. #define HDA_DIP_SIZE_RESPONSE_SIZE_SHIFT 0
  551. //
  552. // Define the bits for the vendor and device ID parameter.
  553. //
  554. #define HDA_VENDOR_ID_VENDOR_MASK 0xFFFF0000
  555. #define HDA_VENDOR_ID_VENDOR_SHIFT 16
  556. #define HDA_VENDOR_ID_DEVICE_MASK 0x0000FFFF
  557. #define HDA_VENDOR_ID_DEVICE_SHIFT 0
  558. //
  559. // Define the bits for the subordinate node parameter.
  560. //
  561. #define HDA_SUBORDINATE_NODE_START_MASK 0x00FF0000
  562. #define HDA_SUBORDINATE_NODE_START_SHIFT 16
  563. #define HDA_SUBORDINATE_NODE_COUNT_MASK 0x000000FF
  564. #define HDA_SUBORDINATE_NODE_COUNT_SHIFT 0
  565. //
  566. // Define the bits for function group type parameter.
  567. //
  568. #define HDA_FUNCTION_GROUP_UNSOLICITED_RESPONSE_CAPABLE 0x00000100
  569. #define HDA_FUNCTION_GROUP_TYPE_MASK 0x000000FF
  570. #define HDA_FUNCTION_GROUP_TYPE_SHIFT 0
  571. #define HDA_FUNCTION_GROUP_TYPE_AUDIO 0x01
  572. #define HDA_FUNCTION_GROUP_TYPE_MODEM 0x02
  573. //
  574. // Define the bits for the audio widget capabilities parameter.
  575. //
  576. #define HDA_AUDIO_WIDGET_TYPE_MASK 0x00F00000
  577. #define HDA_AUDIO_WIDGET_TYPE_SHIFT 20
  578. #define HDA_AUDIO_WIDGET_TYPE_OUTPUT 0x0
  579. #define HDA_AUDIO_WIDGET_TYPE_INPUT 0x1
  580. #define HDA_AUDIO_WIDGET_TYPE_MIXER 0x2
  581. #define HDA_AUDIO_WIDGET_TYPE_SELECTOR 0x3
  582. #define HDA_AUDIO_WIDGET_TYPE_PIN 0x4
  583. #define HDA_AUDIO_WIDGET_TYPE_POWER 0x5
  584. #define HDA_AUDIO_WIDGET_TYPE_VOLUME_KNOB 0x6
  585. #define HDA_AUDIO_WIDGET_TYPE_BEEP_GENERATOR 0x7
  586. #define HDA_AUDIO_WIDGET_TYPE_VENDOR_DEFINED 0xF
  587. #define HDA_AUDIO_WIDGET_DELAY_MASK 0x000F0000
  588. #define HDA_AUDIO_WIDGET_DELAY_SHIFT 16
  589. #define HDA_AUDIO_WIDGET_CHANNEL_COUNT_EXT_MASK 0x0000E000
  590. #define HDA_AUDIO_WIDGET_CHANNEL_COUNT_EXT_SHIFT 13
  591. #define HDA_AUDIO_WIDGET_CONTENT_PROTECTION 0x00001000
  592. #define HDA_AUDIO_WIDGET_LEFT_RIGHT_SWAP 0x00000800
  593. #define HDA_AUDIO_WIDGET_POWER_CONTROL 0x00000400
  594. #define HDA_AUDIO_WIDGET_DIGITAL 0x00000200
  595. #define HDA_AUDIO_WIDGET_CONNECTION_LIST 0x00000100
  596. #define HDA_AUDIO_WIDGET_UNSOLICITED_CAPABLE 0x00000080
  597. #define HDA_AUDIO_WIDGET_PROCESSING_CONTROLS 0x00000040
  598. #define HDA_AUDIO_WIDGET_STRIPE 0x00000020
  599. #define HDA_AUDIO_WIDGET_FORMAT_OVERRIDE 0x00000010
  600. #define HDA_AUDIO_WIDGET_AMP_OVERRIDE 0x00000008
  601. #define HDA_AUDIO_WIDGET_OUT_AMP_PRESENT 0x00000004
  602. #define HDA_AUDIO_WIDGET_IN_AMP_PRESENT 0x00000002
  603. #define HDA_AUDIO_WIDGET_CHANNEL_COUNT_LSB 0x00000001
  604. //
  605. // Define the bits for the pin capabilities parameter.
  606. //
  607. #define HDA_PIN_CAPABILITIES_HIGH_BIT_RATE 0x08000000
  608. #define HDA_PIN_CAPABILITIES_DISPLAY_PORT 0x01000000
  609. #define HDA_PIN_CAPABILITIES_EAPD 0x00010000
  610. #define HDA_PIN_CAPABILITIES_VREF_CONTROL_MASK 0x0000FF00
  611. #define HDA_PIN_CAPABILITIES_VREF_CONTROL_SHIFT 8
  612. #define HDA_PIN_CAPABILITIES_HDMI 0x00000080
  613. #define HDA_PIN_CAPABILITIES_BALANCED_IO_PINS 0x00000040
  614. #define HDA_PIN_CAPABILITIES_INPUT 0x00000020
  615. #define HDA_PIN_CAPABILITIES_OUTPUT 0x00000010
  616. #define HDA_PIN_CAPABILITIES_HEADPHONE_CAPABLE 0x00000008
  617. #define HDA_PIN_CAPABILITIES_PRESENCE_DETECT 0x00000004
  618. #define HDA_PIN_CAPABILITIES_TRIGGER_REQUIRED 0x00000002
  619. #define HDA_PIN_CAPABILITIES_IMPEDENCE_SENSE 0x00000001
  620. //
  621. // Define the bits for the supported PCM sizes and rates.
  622. //
  623. #define HDA_PCM_SIZE_RATES_SIZE_MASK 0xFFFF0000
  624. #define HDA_PCM_SIZE_RATES_SIZE_SHIFT 16
  625. #define HDA_PCM_SIZE_RATES_RATE_MASK 0x0000FFFF
  626. #define HDA_PCM_SIZE_RATES_RATE_SHIFT 0
  627. #define HDA_PCM_SIZE_32_BIT 0x0010
  628. #define HDA_PCM_SIZE_24_BIT 0x0008
  629. #define HDA_PCM_SIZE_20_BIT 0x0004
  630. #define HDA_PCM_SIZE_16_BIT 0x0002
  631. #define HDA_PCM_SIZE_8_BIT 0x0001
  632. #define HDA_SAMPLE_RATE_384_KHZ 0x0800
  633. #define HDA_SAMPLE_RATE_192_KHZ 0x0400
  634. #define HDA_SAMPLE_RATE_176_KHZ 0x0200
  635. #define HDA_SAMPLE_RATE_96_KHZ 0x0100
  636. #define HDA_SAMPLE_RATE_88_KHZ 0x0080
  637. #define HDA_SAMPLE_RATE_48_KHZ 0x0040
  638. #define HDA_SAMPLE_RATE_44_KHZ 0x0020
  639. #define HDA_SAMPLE_RATE_32_KHZ 0x0010
  640. #define HDA_SAMPLE_RATE_22_KHZ 0x0008
  641. #define HDA_SAMPLE_RATE_16_KHZ 0x0004
  642. #define HDA_SAMPLE_RATE_11_KHZ 0x0002
  643. #define HDA_SAMPLE_RATE_8_KHZ 0x0001
  644. //
  645. // Define the bits for the supported stream format parameter.
  646. //
  647. #define HDA_STREAM_FORMAT_AC3 0x00000004
  648. #define HDA_STREAM_FORMAT_FLOAT32 0x00000002
  649. #define HDA_STREAM_FORMAT_PCM 0x00000001
  650. //
  651. // Define the bits for the input and output amplifier capabilities parameters.
  652. //
  653. #define HDA_AMP_CAPABILITIES_MUTE 0x80000000
  654. #define HDA_AMP_CAPABILITIES_STEP_SIZE_MASK 0x007F0000
  655. #define HDA_AMP_CAPABILITIES_STEP_SIZE_SHIFT 16
  656. #define HDA_AMP_CAPABILITIES_STEP_COUNT_MASK 0x00007F00
  657. #define HDA_AMP_CAPABILITIES_STEP_COUNT_SHIFT 8
  658. #define HDA_AMP_CAPABILITIES_OFFSET_MASK 0x0000007F
  659. #define HDA_AMP_CAPABILITIES_OFFSET_SHIFT 0
  660. //
  661. // Define the bits for the connection list length parameter.
  662. //
  663. #define HDA_CONNECTION_LIST_LENGTH_LONG_FORM 0x00000080
  664. #define HDA_CONNECTION_LIST_LENGTH_MASK 0x0000007F
  665. #define HDA_CONNECTION_LIST_LENGTH_SHIFT 0
  666. #define HDA_CONNECTION_LIST_LONG_FORM_RANGE 0x8000
  667. #define HDA_CONNECTION_LIST_LONG_FORM_NODE_ID_MASK 0x7FFF
  668. #define HDA_CONNECTION_LIST_LONG_FORM_NODE_ID_SHIFT 0
  669. #define HDA_CONNECTION_LIST_SHORT_FORM_RANGE 0x80
  670. #define HDA_CONNECTION_LIST_SHORT_FORM_NODE_ID_MASK 0x7F
  671. #define HDA_CONNECTION_LIST_SHORT_FORM_NODE_ID_SHIFT 0
  672. //
  673. // Define the bits for the supported power states parameter.
  674. //
  675. #define HDA_SUPPORTED_POWER_STATES_EXTENDED 0x80000000
  676. #define HDA_SUPPORTED_POWER_STATES_CLOCK_STOP 0x40000000
  677. #define HDA_SUPPORTED_POWER_STATES_S3_D3_COLD 0x20000000
  678. #define HDA_SUPPORTED_POWER_STATES_D3_COLD 0x00000010
  679. #define HDA_SUPPORTED_POWER_STATES_D3 0x00000008
  680. #define HDA_SUPPORTED_POWER_STATES_D2 0x00000004
  681. #define HDA_SUPPORTED_POWER_STATES_D1 0x00000002
  682. #define HDA_SUPPORTED_POWER_STATES_D0 0x00000001
  683. //
  684. // Define the bits for the volume knob parameter.
  685. //
  686. #define HDA_VOLUME_KNOB_DELTA 0x00000080
  687. #define HDA_VOLUME_KNOB_STEP_COUNT_MASK 0x0000007F
  688. #define HDA_VOLUME_KNOB_STEP_COUNT_SHIFT 0
  689. //
  690. // ------------------------------------------------------ Data Type Definitions
  691. //
  692. typedef enum _HDA_REGISTER {
  693. HdaRegisterGlobalCapabilities = 0x00,
  694. HdaRegisterMinorVersion = 0x02,
  695. HdaRegisterMajorVersion = 0x03,
  696. HdaRegisterOutputPayloadCapability = 0x04,
  697. HdaRegisterInputPayloadCapability = 0x06,
  698. HdaRegisterGlobalControl = 0x08,
  699. HdaRegisterWakeEnable = 0x0C,
  700. HdaRegisterStateChangeStatus = 0x0E,
  701. HdaRegisterGlobalStatus = 0x10,
  702. HdaRegisterOutputStreamPayloadCapability = 0x18,
  703. HdaRegisterInputStreamPayloadCapability = 0x1A,
  704. HdaRegisterInterruptControl = 0x20,
  705. HdaRegisterInterruptStatus = 0x24,
  706. HdaRegisterWallClockCounter = 0x30,
  707. HdaRegisterLegacyStreamSynchronization = 0x34,
  708. HdaRegisterStreamSynchronization = 0x38,
  709. HdaRegisterCorbLowerBaseAddress = 0x40,
  710. HdaRegisterCorbUpperBaseAddress = 0x44,
  711. HdaRegisterCorbWritePointer = 0x48,
  712. HdaRegisterCorbReadPointer = 0x4A,
  713. HdaRegisterCorbControl = 0x4C,
  714. HdaRegisterCorbStatus = 0x4D,
  715. HdaRegisterCorbSize = 0x4E,
  716. HdaRegisterRirbLowerBaseAddress = 0x50,
  717. HdaRegisterRirbUpperBaseAddress = 0x54,
  718. HdaRegisterRirbWritePointer = 0x58,
  719. HdaRegisterResponseInterruptCount = 0x5A,
  720. HdaRegisterRirbControl = 0x5C,
  721. HdaRegisterRirbStatus = 0x5D,
  722. HdaRegisterRirbSize = 0x5E,
  723. HdaRegisterImmediateCommandOutputInterface = 0x60,
  724. HdaRegisterImmediateCommandInputInterface = 0x64,
  725. HdaRegisterImmediateCommandStatus = 0x68,
  726. HdaRegisterDmaPositionBufferLowerBase = 0x70,
  727. HdaRegisterDmaPositionBufferUpperBase = 0x74,
  728. HdaRegisterStreamDescriptorBase = 0x80,
  729. HdaRegisterWallClockCounterAlias = 0x2030,
  730. } HDA_REGISTER, *PHDA_REGISTER;
  731. typedef enum _HDA_STREAM_REGISTER {
  732. HdaStreamRegisterControl = 0x00,
  733. HdaStreamRegisterStatus = 0x03,
  734. HdaStreamRegisterLinkPositionInBuffer = 0x04,
  735. HdaStreamRegisterCyclicBufferLength = 0x08,
  736. HdaStreamRegisterLastValidIndex = 0x0C,
  737. HdaStreamRegisterFifoSize = 0x10,
  738. HdaStreamRegisterFormat = 0x12,
  739. HdaStreamRegisterBdlLowerBaseAddress = 0x18,
  740. HdaStreamRegisterBdlUpperBaseAddress = 0x1C,
  741. } HDA_STREAM_REGISTER, *PHDA_STREAM_REGISTER;
  742. typedef enum _HDA_VERB {
  743. HdaVerbSetConverterFormat = 0x2,
  744. HdaVerbSetAmplifierGain = 0x3,
  745. HdaVerbSetProcessingCoefficient = 0x4,
  746. HdaVerbSetCoefficientIndex = 0x5,
  747. HdaVerbGetConverterFormat = 0xA,
  748. HdaVerbGetAmplifierGain = 0xB,
  749. HdaVerbGetProcessingCoefficient = 0xC,
  750. HdaVerbGetCoefficientIndex = 0xD,
  751. HdaVerbSetConnectionSelectControl = 0x701,
  752. HdaVerbSetProcessingState = 0x703,
  753. HdaVerbSetInputConverterSdiSelect = 0x704,
  754. HdaVerbSetPowerState = 0x705,
  755. HdaVerbSetConverterStreamChannel = 0x706,
  756. HdaVerbSetPinWidgetControl = 0x707,
  757. HdaVerbSetUnsolicitedResponseControl = 0x708,
  758. HdaVerbExecutePinSense = 0x709,
  759. HdaVerbSetEapdBtlEnable = 0x70C,
  760. HdaVerbSetBeepGeneration = 0x70A,
  761. HdaVerbSetSic1 = 0x70D,
  762. HdaVerbSetSic2 = 0x70E,
  763. HdaVerbSetVolumeKnob = 0x70F,
  764. HdaVerbSetGpiData = 0x710,
  765. HdaVerbSetGpiWake = 0x711,
  766. HdaVerbSetGpiUnsolicited = 0x712,
  767. HdaVerbSetGpiSticky = 0x713,
  768. HdaVerbSetGpoData = 0x714,
  769. HdaVerbSetGpioData = 0x715,
  770. HdaVerbSetGpioEnable = 0x716,
  771. HdaVerbSetGpioDirection = 0x717,
  772. HdaVerbSetGpioWake = 0x718,
  773. HdaVerbSetGpioUnsolicited = 0x719,
  774. HdaVerbSetGpioSticky = 0x71A,
  775. HdaVerbSetConfigurationDefault1 = 0x71C,
  776. HdaVerbsetConfigurationDefault2 = 0x71D,
  777. HdaVerbSetConfigurationDefault3 = 0x71E,
  778. HdaVerbSetConfigurationDefault4 = 0x71F,
  779. HdaVerbSetImplementationId1 = 0x720,
  780. HdaVerbSetImplementationId2 = 0x721,
  781. HdaVerbSetImplementationId3 = 0x722,
  782. HdaVerbSetImplementationId4 = 0x723,
  783. HdaVerbSetStripeControl = 0x724,
  784. HdaVerbSetConverterChannelCount = 0x72D,
  785. HdaVerbSetDipIndex = 0x730,
  786. HdaVerbSetDipData = 0x731,
  787. HdaVerbSetDipTransmitControl = 0x732,
  788. HdaVerbSetContentProtectionControl = 0x733,
  789. HdaVerbSetAspChannelMapping = 0x734,
  790. HdaVerbSetSic3 = 0x73E,
  791. HdaVerbSetSic4 = 0x73F,
  792. HdaVerbExecuteFunctionGroupReset = 0x7FF,
  793. HdaVerbGetParameter = 0xF00,
  794. HdaVerbGetConnectionSelectControl = 0xF01,
  795. HdaVerbGetConnectionListEntry = 0xF02,
  796. HdaVerbGetProcessingState = 0xF03,
  797. HdaVerbGetInputConverterSdiSelect = 0xF04,
  798. HdaVerbGetPowerState = 0xF05,
  799. HdaVerbGetConverterStreamChannel = 0xF06,
  800. HdaVerbGetPinWidgetControl = 0xF07,
  801. HdaVerbGetUnsolicitedResponseControl = 0xF08,
  802. HdaVerbGetPinSense = 0xF09,
  803. HdaVerbGetBeepGeneration = 0xF0A,
  804. HdaVerbGetEapdBtlEnable = 0xF0C,
  805. HdaVerbGetSic = 0xF0D,
  806. HdaVerbGetVolumeKnob = 0xF0F,
  807. HdaVerbGetGpiData = 0xF10,
  808. HdaVerbGetGpiWake = 0xF11,
  809. HdaVerbGetGpiUnsolicited = 0xF12,
  810. HdaVerbGetGpiSticky = 0xF13,
  811. HdaVerbGetGpoData = 0xF14,
  812. HdaVerbGetGpioData = 0xF15,
  813. HdaVerbGetGpioEnable = 0xF16,
  814. HdaVerbGetGpioDirection = 0xF17,
  815. HdaVerbGetGpioWake = 0xF18,
  816. HdaVerbGetGpioUnsolicited = 0xF19,
  817. HdaVerbGetGpioSticky = 0xF1A,
  818. HdaVerbGetConfigurationDefault = 0xF1C,
  819. HdaVerbGetImplementationId = 0xF20,
  820. HdaVerbGetStripeControl = 0xF24,
  821. HdaVerbGetConverterChannelCount = 0xF2D,
  822. HdaVerbGetDipSize = 0xF2E,
  823. HdaVerbGetEld = 0xF2F,
  824. HdaVerbGetDipIndex = 0xF30,
  825. HdaVerbGetDipData = 0xF31,
  826. HdaVerbGetDipTransmitControl = 0xF32,
  827. HdaVerbGetContentProtectionControl = 0xF33,
  828. HdaVerbGetAspChannelMapping = 0xF34,
  829. } HDA_VERB, *PHDA_VERB;
  830. typedef enum _HDA_PARAMETER {
  831. HdaParameterVendorId = 0x00,
  832. HdaParameterRevisionId = 0x02,
  833. HdaParameterSubordinateNodeCount = 0x04,
  834. HdaParameterFunctionGroupType = 0x05,
  835. HdaParameterAudioFunctionGroupCapabilities = 0x08,
  836. HdaParameterAudioWidgetCapabilities = 0x09,
  837. HdaParameterSupportedPcmSizeRates = 0x0A,
  838. HdaParameterSupportedStreamFormats = 0x0B,
  839. HdaParameterPinCapabilities = 0x0C,
  840. HdaParameterInputAmplifierCapabilities = 0x0D,
  841. HdaParameterConnectionListLength = 0x0E,
  842. HdaParameterSupportedPowerStates = 0x0F,
  843. HdaParameterProcessingCapabilities = 0x10,
  844. HdaParameterGpioCount = 0x011,
  845. HdaParameterOutputAmplifierCapabilities = 0x12,
  846. HdaParameterVolumeKnobCapabilities = 0x13,
  847. } HDA_PARAMETER, *PHDA_PARAMETER;
  848. /*++
  849. Structure Description:
  850. This structure defines a buffer descriptor list entry.
  851. Members:
  852. Address - Stores the 64-bit address of the buffer. This must be 128-byte
  853. aligned.
  854. Length - Stores the length of the buffer in bytes. The buffer must be at
  855. least 4 bytes in length.
  856. Flags - Stores a bitmask of descriptor flags. See
  857. HDA_BUFFER_DESCRIPTOR_FLAG_* for definitions.
  858. --*/
  859. #pragma pack(push, 1)
  860. typedef struct _HDA_BUFFER_DESCRIPTOR_LIST_ENTRY {
  861. ULONGLONG Address;
  862. ULONG Length;
  863. ULONG Flags;
  864. } PACKED HDA_BUFFER_DESCRIPTOR_LIST_ENTRY, *PHDA_BUFFER_DESCRIPTOR_LIST_ENTRY;
  865. /*++
  866. Structure Description:
  867. This structure defines a command output ring buffer entry.
  868. Members:
  869. Verb - Stores the codec command verb.
  870. --*/
  871. typedef struct _HDA_COMMAND_ENTRY {
  872. ULONG Verb;
  873. } PACKED HDA_COMMAND_ENTRY, *PHDA_COMMAND_ENTRY;
  874. /*++
  875. Structure Description:
  876. This structure defines a response input ring buffer entry.
  877. Members:
  878. Response - Stores the codec's raw response.
  879. ResponseExtended - Stores the controller's information about the response,
  880. including which codec it came from and whether or not it was solicited.
  881. See HDA_RESPONSE_EXTENDED_FLAG_* for details.
  882. --*/
  883. typedef struct _HDA_RESPONSE_ENTRY {
  884. ULONG Response;
  885. ULONG ResponseExtended;
  886. } PACKED HDA_RESPONSE_ENTRY, *PHDA_RESPONSE_ENTRY;
  887. #pragma pack(pop)
  888. //
  889. // -------------------------------------------------------------------- Globals
  890. //
  891. //
  892. // -------------------------------------------------------- Function Prototypes
  893. //