mixart_core.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607
  1. /*
  2. * Driver for Digigram miXart soundcards
  3. *
  4. * low level interface with interrupt handling and mail box implementation
  5. *
  6. * Copyright (c) 2003 by Digigram <alsa@digigram.com>
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  21. */
  22. #ifndef __SOUND_MIXART_CORE_H
  23. #define __SOUND_MIXART_CORE_H
  24. enum mixart_message_id {
  25. MSG_CONNECTOR_GET_AUDIO_INFO = 0x050008,
  26. MSG_CONNECTOR_GET_OUT_AUDIO_LEVEL = 0x050009,
  27. MSG_CONNECTOR_SET_OUT_AUDIO_LEVEL = 0x05000A,
  28. MSG_CONSOLE_MANAGER = 0x070000,
  29. MSG_CONSOLE_GET_CLOCK_UID = 0x070003,
  30. MSG_PHYSICALIO_SET_LEVEL = 0x0F0008,
  31. MSG_STREAM_ADD_INPUT_GROUP = 0x130000,
  32. MSG_STREAM_ADD_OUTPUT_GROUP = 0x130001,
  33. MSG_STREAM_DELETE_GROUP = 0x130004,
  34. MSG_STREAM_START_STREAM_GRP_PACKET = 0x130006,
  35. MSG_STREAM_START_INPUT_STAGE_PACKET = 0x130007,
  36. MSG_STREAM_START_OUTPUT_STAGE_PACKET = 0x130008,
  37. MSG_STREAM_STOP_STREAM_GRP_PACKET = 0x130009,
  38. MSG_STREAM_STOP_INPUT_STAGE_PACKET = 0x13000A,
  39. MSG_STREAM_STOP_OUTPUT_STAGE_PACKET = 0x13000B,
  40. MSG_STREAM_SET_INPUT_STAGE_PARAM = 0x13000F,
  41. MSG_STREAM_SET_OUTPUT_STAGE_PARAM = 0x130010,
  42. MSG_STREAM_SET_IN_AUDIO_LEVEL = 0x130015,
  43. MSG_STREAM_SET_OUT_STREAM_LEVEL = 0x130017,
  44. MSG_SYSTEM_FIRST_ID = 0x160000,
  45. MSG_SYSTEM_ENUM_PHYSICAL_IO = 0x16000E,
  46. MSG_SYSTEM_ENUM_PLAY_CONNECTOR = 0x160017,
  47. MSG_SYSTEM_ENUM_RECORD_CONNECTOR = 0x160018,
  48. MSG_SYSTEM_WAIT_SYNCHRO_CMD = 0x16002C,
  49. MSG_SYSTEM_SEND_SYNCHRO_CMD = 0x16002D,
  50. MSG_SERVICES_TIMER_NOTIFY = 0x1D0404,
  51. MSG_SERVICES_REPORT_TRACES = 0x1D0700,
  52. MSG_CLOCK_CHECK_PROPERTIES = 0x200001,
  53. MSG_CLOCK_SET_PROPERTIES = 0x200002,
  54. };
  55. typedef struct mixart_msg mixart_msg_t;
  56. struct mixart_msg
  57. {
  58. u32 message_id;
  59. mixart_uid_t uid;
  60. void* data;
  61. size_t size;
  62. };
  63. /* structs used to communicate with miXart */
  64. typedef struct mixart_enum_connector_resp mixart_enum_connector_resp_t;
  65. struct mixart_enum_connector_resp
  66. {
  67. u32 error_code;
  68. u32 first_uid_offset;
  69. u32 uid_count;
  70. u32 current_uid_index;
  71. mixart_uid_t uid[MIXART_MAX_PHYS_CONNECTORS];
  72. } __attribute__((packed));
  73. /* used for following struct */
  74. #define MIXART_FLOAT_P_22_0_TO_HEX 0x41b00000 /* 22.0f */
  75. #define MIXART_FLOAT_M_20_0_TO_HEX 0xc1a00000 /* -20.0f */
  76. #define MIXART_FLOAT____0_0_TO_HEX 0x00000000 /* 0.0f */
  77. typedef struct mixart_audio_info_req mixart_audio_info_req_t;
  78. struct mixart_audio_info_req
  79. {
  80. u32 line_max_level; /* float */
  81. u32 micro_max_level; /* float */
  82. u32 cd_max_level; /* float */
  83. } __attribute__((packed));
  84. typedef struct mixart_analog_hw_info mixart_analog_hw_info_t;
  85. struct mixart_analog_hw_info
  86. {
  87. u32 is_present;
  88. u32 hw_connection_type;
  89. u32 max_level; /* float */
  90. u32 min_var_level; /* float */
  91. u32 max_var_level; /* float */
  92. u32 step_var_level; /* float */
  93. u32 fix_gain; /* float */
  94. u32 zero_var; /* float */
  95. } __attribute__((packed));
  96. typedef struct mixart_digital_hw_info mixart_digital_hw_info_t;
  97. struct mixart_digital_hw_info
  98. {
  99. u32 hw_connection_type;
  100. u32 presence;
  101. u32 clock;
  102. u32 reserved;
  103. } __attribute__((packed));
  104. typedef struct mixart_analog_info mixart_analog_info_t;
  105. struct mixart_analog_info
  106. {
  107. u32 type_mask;
  108. mixart_analog_hw_info_t micro_info;
  109. mixart_analog_hw_info_t line_info;
  110. mixart_analog_hw_info_t cd_info;
  111. u32 analog_level_present;
  112. } __attribute__((packed));
  113. typedef struct mixart_digital_info mixart_digital_info_t;
  114. struct mixart_digital_info
  115. {
  116. u32 type_mask;
  117. mixart_digital_hw_info_t aes_info;
  118. mixart_digital_hw_info_t adat_info;
  119. } __attribute__((packed));
  120. typedef struct mixart_audio_info mixart_audio_info_t;
  121. struct mixart_audio_info
  122. {
  123. u32 clock_type_mask;
  124. mixart_analog_info_t analog_info;
  125. mixart_digital_info_t digital_info;
  126. } __attribute__((packed));
  127. typedef struct mixart_audio_info_resp mixart_audio_info_resp_t;
  128. struct mixart_audio_info_resp
  129. {
  130. u32 txx_status;
  131. mixart_audio_info_t info;
  132. } __attribute__((packed));
  133. /* used for nb_bytes_max_per_sample */
  134. #define MIXART_FLOAT_P__4_0_TO_HEX 0x40800000 /* +4.0f */
  135. #define MIXART_FLOAT_P__8_0_TO_HEX 0x41000000 /* +8.0f */
  136. typedef struct mixart_stream_info mixart_stream_info_t;
  137. struct mixart_stream_info
  138. {
  139. u32 size_max_byte_frame;
  140. u32 size_max_sample_frame;
  141. u32 nb_bytes_max_per_sample; /* float */
  142. } __attribute__((packed));
  143. /* MSG_STREAM_ADD_INPUT_GROUP */
  144. /* MSG_STREAM_ADD_OUTPUT_GROUP */
  145. typedef struct mixart_streaming_group_req mixart_streaming_group_req_t;
  146. struct mixart_streaming_group_req
  147. {
  148. u32 stream_count;
  149. u32 channel_count;
  150. u32 user_grp_number;
  151. u32 first_phys_audio;
  152. u32 latency;
  153. mixart_stream_info_t stream_info[32];
  154. mixart_uid_t connector;
  155. u32 flow_entry[32];
  156. } __attribute__((packed));
  157. typedef struct mixart_stream_desc mixart_stream_desc_t;
  158. struct mixart_stream_desc
  159. {
  160. mixart_uid_t stream_uid;
  161. u32 stream_desc;
  162. } __attribute__((packed));
  163. typedef struct mixart_streaming_group mixart_streaming_group_t;
  164. struct mixart_streaming_group
  165. {
  166. u32 status;
  167. mixart_uid_t group;
  168. u32 pipe_desc;
  169. u32 stream_count;
  170. mixart_stream_desc_t stream[32];
  171. } __attribute__((packed));
  172. /* MSG_STREAM_DELETE_GROUP */
  173. /* request : mixart_uid_t group */
  174. typedef struct mixart_delete_group_resp mixart_delete_group_resp_t;
  175. struct mixart_delete_group_resp
  176. {
  177. u32 status;
  178. u32 unused[2];
  179. } __attribute__((packed));
  180. /* MSG_STREAM_START_INPUT_STAGE_PACKET = 0x130000 + 7,
  181. MSG_STREAM_START_OUTPUT_STAGE_PACKET = 0x130000 + 8,
  182. MSG_STREAM_STOP_INPUT_STAGE_PACKET = 0x130000 + 10,
  183. MSG_STREAM_STOP_OUTPUT_STAGE_PACKET = 0x130000 + 11,
  184. */
  185. typedef struct mixart_fx_couple_uid mixart_fx_couple_uid_t;
  186. struct mixart_fx_couple_uid
  187. {
  188. mixart_uid_t uid_fx_code;
  189. mixart_uid_t uid_fx_data;
  190. } __attribute__((packed));
  191. typedef struct mixart_txx_stream_desc mixart_txx_stream_desc_t;
  192. struct mixart_txx_stream_desc
  193. {
  194. mixart_uid_t uid_pipe;
  195. u32 stream_idx;
  196. u32 fx_number;
  197. mixart_fx_couple_uid_t uid_fx[4];
  198. } __attribute__((packed));
  199. typedef struct mixart_flow_info mixart_flow_info_t;
  200. struct mixart_flow_info
  201. {
  202. mixart_txx_stream_desc_t stream_desc;
  203. u32 flow_entry;
  204. u32 flow_phy_addr;
  205. } __attribute__((packed));
  206. typedef struct mixart_stream_state_req mixart_stream_state_req_t;
  207. struct mixart_stream_state_req
  208. {
  209. u32 delayed;
  210. u64 scheduler;
  211. u32 reserved4np[3];
  212. u32 stream_count; /* set to 1 for instance */
  213. mixart_flow_info_t stream_info; /* could be an array[stream_count] */
  214. } __attribute__((packed));
  215. /* MSG_STREAM_START_STREAM_GRP_PACKET = 0x130000 + 6
  216. MSG_STREAM_STOP_STREAM_GRP_PACKET = 0x130000 + 9
  217. */
  218. typedef struct mixart_group_state_req mixart_group_state_req_t;
  219. struct mixart_group_state_req
  220. {
  221. u32 delayed;
  222. u64 scheduler;
  223. u32 reserved4np[2];
  224. u32 pipe_count; /* set to 1 for instance */
  225. mixart_uid_t pipe_uid[1]; /* could be an array[pipe_count] */
  226. } __attribute__((packed));
  227. typedef struct mixart_group_state_resp mixart_group_state_resp_t;
  228. struct mixart_group_state_resp
  229. {
  230. u32 txx_status;
  231. u64 scheduler;
  232. } __attribute__((packed));
  233. /* Structures used by the MSG_SERVICES_TIMER_NOTIFY command */
  234. typedef struct mixart_sample_pos mixart_sample_pos_t;
  235. struct mixart_sample_pos
  236. {
  237. u32 buffer_id;
  238. u32 validity;
  239. u32 sample_pos_high_part;
  240. u32 sample_pos_low_part;
  241. } __attribute__((packed));
  242. typedef struct mixart_timer_notify mixart_timer_notify_t;
  243. struct mixart_timer_notify
  244. {
  245. u32 stream_count;
  246. mixart_sample_pos_t streams[MIXART_MAX_STREAM_PER_CARD * MIXART_MAX_CARDS];
  247. } __attribute__((packed));
  248. /* MSG_CONSOLE_GET_CLOCK_UID = 0x070003,
  249. */
  250. /* request is a uid with desc = MSG_CONSOLE_MANAGER | cardindex */
  251. typedef struct mixart_return_uid mixart_return_uid_t;
  252. struct mixart_return_uid
  253. {
  254. u32 error_code;
  255. mixart_uid_t uid;
  256. } __attribute__((packed));
  257. /* MSG_CLOCK_CHECK_PROPERTIES = 0x200001,
  258. MSG_CLOCK_SET_PROPERTIES = 0x200002,
  259. */
  260. enum mixart_clock_generic_type {
  261. CGT_NO_CLOCK,
  262. CGT_INTERNAL_CLOCK,
  263. CGT_PROGRAMMABLE_CLOCK,
  264. CGT_INTERNAL_ENSLAVED_CLOCK,
  265. CGT_EXTERNAL_CLOCK,
  266. CGT_CURRENT_CLOCK
  267. };
  268. enum mixart_clock_mode {
  269. CM_UNDEFINED,
  270. CM_MASTER,
  271. CM_SLAVE,
  272. CM_STANDALONE,
  273. CM_NOT_CONCERNED
  274. };
  275. typedef struct mixart_clock_properties mixart_clock_properties_t;
  276. struct mixart_clock_properties
  277. {
  278. u32 error_code;
  279. u32 validation_mask;
  280. u32 frequency;
  281. u32 reference_frequency;
  282. u32 clock_generic_type;
  283. u32 clock_mode;
  284. mixart_uid_t uid_clock_source;
  285. mixart_uid_t uid_event_source;
  286. u32 event_mode;
  287. u32 synchro_signal_presence;
  288. u32 format;
  289. u32 board_mask;
  290. u32 nb_callers; /* set to 1 (see below) */
  291. mixart_uid_t uid_caller[1];
  292. } __attribute__((packed));
  293. typedef struct mixart_clock_properties_resp mixart_clock_properties_resp_t;
  294. struct mixart_clock_properties_resp
  295. {
  296. u32 status;
  297. u32 clock_mode;
  298. } __attribute__((packed));
  299. /* MSG_STREAM_SET_INPUT_STAGE_PARAM = 0x13000F */
  300. /* MSG_STREAM_SET_OUTPUT_STAGE_PARAM = 0x130010 */
  301. enum mixart_coding_type {
  302. CT_NOT_DEFINED,
  303. CT_LINEAR,
  304. CT_MPEG_L1,
  305. CT_MPEG_L2,
  306. CT_MPEG_L3,
  307. CT_MPEG_L3_LSF,
  308. CT_GSM
  309. };
  310. enum mixart_sample_type {
  311. ST_NOT_DEFINED,
  312. ST_FLOATING_POINT_32BE,
  313. ST_FLOATING_POINT_32LE,
  314. ST_FLOATING_POINT_64BE,
  315. ST_FLOATING_POINT_64LE,
  316. ST_FIXED_POINT_8,
  317. ST_FIXED_POINT_16BE,
  318. ST_FIXED_POINT_16LE,
  319. ST_FIXED_POINT_24BE,
  320. ST_FIXED_POINT_24LE,
  321. ST_FIXED_POINT_32BE,
  322. ST_FIXED_POINT_32LE,
  323. ST_INTEGER_8,
  324. ST_INTEGER_16BE,
  325. ST_INTEGER_16LE,
  326. ST_INTEGER_24BE,
  327. ST_INTEGER_24LE,
  328. ST_INTEGER_32BE,
  329. ST_INTEGER_32LE
  330. };
  331. typedef struct mixart_stream_param_desc mixart_stream_param_desc_t;
  332. struct mixart_stream_param_desc
  333. {
  334. u32 coding_type; /* use enum mixart_coding_type */
  335. u32 sample_type; /* use enum mixart_sample_type */
  336. union {
  337. struct {
  338. u32 linear_endian_ness;
  339. u32 linear_bits;
  340. u32 is_signed;
  341. u32 is_float;
  342. } linear_format_info;
  343. struct {
  344. u32 mpeg_layer;
  345. u32 mpeg_mode;
  346. u32 mpeg_mode_extension;
  347. u32 mpeg_pre_emphasis;
  348. u32 mpeg_has_padding_bit;
  349. u32 mpeg_has_crc;
  350. u32 mpeg_has_extension;
  351. u32 mpeg_is_original;
  352. u32 mpeg_has_copyright;
  353. } mpeg_format_info;
  354. } format_info;
  355. u32 delayed;
  356. u64 scheduler;
  357. u32 sample_size;
  358. u32 has_header;
  359. u32 has_suffix;
  360. u32 has_bitrate;
  361. u32 samples_per_frame;
  362. u32 bytes_per_frame;
  363. u32 bytes_per_sample;
  364. u32 sampling_freq;
  365. u32 number_of_channel;
  366. u32 stream_number;
  367. u32 buffer_size;
  368. u32 differed_time;
  369. u32 reserved4np[3];
  370. u32 pipe_count; /* set to 1 (array size !) */
  371. u32 stream_count; /* set to 1 (array size !) */
  372. mixart_txx_stream_desc_t stream_desc[1]; /* only one stream per command, but this could be an array */
  373. } __attribute__((packed));
  374. /* MSG_CONNECTOR_GET_OUT_AUDIO_LEVEL = 0x050009,
  375. */
  376. typedef struct mixart_get_out_audio_level mixart_get_out_audio_level_t;
  377. struct mixart_get_out_audio_level
  378. {
  379. u32 txx_status;
  380. u32 digital_level; /* float */
  381. u32 analog_level; /* float */
  382. u32 monitor_level; /* float */
  383. u32 mute;
  384. u32 monitor_mute1;
  385. u32 monitor_mute2;
  386. } __attribute__((packed));
  387. /* MSG_CONNECTOR_SET_OUT_AUDIO_LEVEL = 0x05000A,
  388. */
  389. /* used for valid_mask below */
  390. #define MIXART_AUDIO_LEVEL_ANALOG_MASK 0x01
  391. #define MIXART_AUDIO_LEVEL_DIGITAL_MASK 0x02
  392. #define MIXART_AUDIO_LEVEL_MONITOR_MASK 0x04
  393. #define MIXART_AUDIO_LEVEL_MUTE_MASK 0x08
  394. #define MIXART_AUDIO_LEVEL_MUTE_M1_MASK 0x10
  395. #define MIXART_AUDIO_LEVEL_MUTE_M2_MASK 0x20
  396. typedef struct mixart_set_out_audio_level mixart_set_out_audio_level_t;
  397. struct mixart_set_out_audio_level
  398. {
  399. u32 delayed;
  400. u64 scheduler;
  401. u32 valid_mask1;
  402. u32 valid_mask2;
  403. u32 digital_level; /* float */
  404. u32 analog_level; /* float */
  405. u32 monitor_level; /* float */
  406. u32 mute;
  407. u32 monitor_mute1;
  408. u32 monitor_mute2;
  409. u32 reserved4np;
  410. } __attribute__((packed));
  411. /* MSG_SYSTEM_ENUM_PHYSICAL_IO = 0x16000E,
  412. */
  413. #define MIXART_MAX_PHYS_IO (MIXART_MAX_CARDS * 2 * 2) /* 4 * (analog+digital) * (playback+capture) */
  414. typedef struct mixart_uid_enumeration mixart_uid_enumeration_t;
  415. struct mixart_uid_enumeration
  416. {
  417. u32 error_code;
  418. u32 first_uid_offset;
  419. u32 nb_uid;
  420. u32 current_uid_index;
  421. mixart_uid_t uid[MIXART_MAX_PHYS_IO];
  422. } __attribute__((packed));
  423. /* MSG_PHYSICALIO_SET_LEVEL = 0x0F0008,
  424. MSG_PHYSICALIO_GET_LEVEL = 0x0F000C,
  425. */
  426. typedef struct mixart_io_channel_level mixart_io_channel_level_t;
  427. struct mixart_io_channel_level
  428. {
  429. u32 analog_level; /* float */
  430. u32 unused[2];
  431. } __attribute__((packed));
  432. typedef struct mixart_io_level mixart_io_level_t;
  433. struct mixart_io_level
  434. {
  435. s32 channel; /* 0=left, 1=right, -1=both, -2=both same */
  436. mixart_io_channel_level_t level[2];
  437. } __attribute__((packed));
  438. /* MSG_STREAM_SET_IN_AUDIO_LEVEL = 0x130015,
  439. */
  440. typedef struct mixart_in_audio_level_info mixart_in_audio_level_info_t;
  441. struct mixart_in_audio_level_info
  442. {
  443. mixart_uid_t connector;
  444. u32 valid_mask1;
  445. u32 valid_mask2;
  446. u32 digital_level;
  447. u32 analog_level;
  448. } __attribute__((packed));
  449. typedef struct mixart_set_in_audio_level_req mixart_set_in_audio_level_req_t;
  450. struct mixart_set_in_audio_level_req
  451. {
  452. u32 delayed;
  453. u64 scheduler;
  454. u32 audio_count; /* set to <= 2 */
  455. u32 reserved4np;
  456. mixart_in_audio_level_info_t level[2];
  457. } __attribute__((packed));
  458. /* response is a 32 bit status */
  459. /* MSG_STREAM_SET_OUT_STREAM_LEVEL = 0x130017,
  460. */
  461. /* defines used for valid_mask1 */
  462. #define MIXART_OUT_STREAM_SET_LEVEL_LEFT_AUDIO1 0x01
  463. #define MIXART_OUT_STREAM_SET_LEVEL_LEFT_AUDIO2 0x02
  464. #define MIXART_OUT_STREAM_SET_LEVEL_RIGHT_AUDIO1 0x04
  465. #define MIXART_OUT_STREAM_SET_LEVEL_RIGHT_AUDIO2 0x08
  466. #define MIXART_OUT_STREAM_SET_LEVEL_STREAM_1 0x10
  467. #define MIXART_OUT_STREAM_SET_LEVEL_STREAM_2 0x20
  468. #define MIXART_OUT_STREAM_SET_LEVEL_MUTE_1 0x40
  469. #define MIXART_OUT_STREAM_SET_LEVEL_MUTE_2 0x80
  470. typedef struct mixart_out_stream_level_info mixart_out_stream_level_info_t;
  471. struct mixart_out_stream_level_info
  472. {
  473. u32 valid_mask1;
  474. u32 valid_mask2;
  475. u32 left_to_out1_level;
  476. u32 left_to_out2_level;
  477. u32 right_to_out1_level;
  478. u32 right_to_out2_level;
  479. u32 digital_level1;
  480. u32 digital_level2;
  481. u32 mute1;
  482. u32 mute2;
  483. } __attribute__((packed));
  484. typedef struct mixart_set_out_stream_level mixart_set_out_stream_level_t;
  485. struct mixart_set_out_stream_level
  486. {
  487. mixart_txx_stream_desc_t desc;
  488. mixart_out_stream_level_info_t out_level;
  489. } __attribute__((packed));
  490. typedef struct mixart_set_out_stream_level_req mixart_set_out_stream_level_req_t;
  491. struct mixart_set_out_stream_level_req
  492. {
  493. u32 delayed;
  494. u64 scheduler;
  495. u32 reserved4np[2];
  496. u32 nb_of_stream; /* set to 1 */
  497. mixart_set_out_stream_level_t stream_level; /* could be an array */
  498. } __attribute__((packed));
  499. /* response to this request is a u32 status value */
  500. /* exported */
  501. void snd_mixart_init_mailbox(mixart_mgr_t *mgr);
  502. void snd_mixart_exit_mailbox(mixart_mgr_t *mgr);
  503. int snd_mixart_send_msg(mixart_mgr_t *mgr, mixart_msg_t *request, int max_resp_size, void *resp_data);
  504. int snd_mixart_send_msg_wait_notif(mixart_mgr_t *mgr, mixart_msg_t *request, u32 notif_event);
  505. int snd_mixart_send_msg_nonblock(mixart_mgr_t *mgr, mixart_msg_t *request);
  506. irqreturn_t snd_mixart_interrupt(int irq, void *dev_id, struct pt_regs *regs);
  507. void snd_mixart_msg_tasklet( unsigned long arg);
  508. void snd_mixart_reset_board(mixart_mgr_t *mgr);
  509. #endif /* __SOUND_MIXART_CORE_H */