hpidebug.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. /*****************************************************************************
  2. AudioScience HPI driver
  3. Copyright (C) 1997-2010 AudioScience Inc. <support@audioscience.com>
  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of version 2 of the GNU General Public License as
  6. published by the Free Software Foundation;
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program; if not, write to the Free Software
  13. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  14. Debug macros.
  15. *****************************************************************************/
  16. #ifndef _HPIDEBUG_H
  17. #define _HPIDEBUG_H
  18. #include "hpi_internal.h"
  19. /* Define debugging levels. */
  20. enum { HPI_DEBUG_LEVEL_ERROR = 0, /* always log errors */
  21. HPI_DEBUG_LEVEL_WARNING = 1,
  22. HPI_DEBUG_LEVEL_NOTICE = 2,
  23. HPI_DEBUG_LEVEL_INFO = 3,
  24. HPI_DEBUG_LEVEL_DEBUG = 4,
  25. HPI_DEBUG_LEVEL_VERBOSE = 5 /* same printk level as DEBUG */
  26. };
  27. #define HPI_DEBUG_LEVEL_DEFAULT HPI_DEBUG_LEVEL_NOTICE
  28. /* an OS can define an extra flag string that is appended to
  29. the start of each message, eg see hpios_linux.h */
  30. #ifdef SOURCEFILE_NAME
  31. #define FILE_LINE SOURCEFILE_NAME ":" __stringify(__LINE__) " "
  32. #else
  33. #define FILE_LINE __FILE__ ":" __stringify(__LINE__) " "
  34. #endif
  35. #if defined(HPI_DEBUG) && defined(_WINDOWS)
  36. #define HPI_DEBUGBREAK() debug_break()
  37. #else
  38. #define HPI_DEBUGBREAK()
  39. #endif
  40. #define HPI_DEBUG_ASSERT(expression) \
  41. do { \
  42. if (!(expression)) {\
  43. printk(KERN_ERR FILE_LINE\
  44. "ASSERT " __stringify(expression));\
  45. HPI_DEBUGBREAK();\
  46. } \
  47. } while (0)
  48. #define HPI_DEBUG_LOG(level, ...) \
  49. do { \
  50. if (hpi_debug_level >= HPI_DEBUG_LEVEL_##level) { \
  51. printk(HPI_DEBUG_FLAG_##level \
  52. FILE_LINE __VA_ARGS__); \
  53. } \
  54. } while (0)
  55. void hpi_debug_init(void);
  56. int hpi_debug_level_set(int level);
  57. int hpi_debug_level_get(void);
  58. /* needed by Linux driver for dynamic debug level changes */
  59. extern int hpi_debug_level;
  60. void hpi_debug_message(struct hpi_message *phm, char *sz_fileline);
  61. void hpi_debug_data(u16 *pdata, u32 len);
  62. #define HPI_DEBUG_DATA(pdata, len) \
  63. do { \
  64. if (hpi_debug_level >= HPI_DEBUG_LEVEL_VERBOSE) \
  65. hpi_debug_data(pdata, len); \
  66. } while (0)
  67. #define HPI_DEBUG_MESSAGE(level, phm) \
  68. do { \
  69. if (hpi_debug_level >= HPI_DEBUG_LEVEL_##level) { \
  70. hpi_debug_message(phm,HPI_DEBUG_FLAG_##level \
  71. FILE_LINE __stringify(level));\
  72. } \
  73. } while (0)
  74. #define HPI_DEBUG_RESPONSE(phr) \
  75. do { \
  76. if ((hpi_debug_level >= HPI_DEBUG_LEVEL_DEBUG) && (phr->error))\
  77. HPI_DEBUG_LOG(ERROR, \
  78. "HPI response - error# %d\n", \
  79. phr->error); \
  80. else if (hpi_debug_level >= HPI_DEBUG_LEVEL_VERBOSE) \
  81. HPI_DEBUG_LOG(VERBOSE, "HPI response OK\n");\
  82. } while (0)
  83. #ifndef compile_time_assert
  84. #define compile_time_assert(cond, msg) \
  85. typedef char msg[(cond) ? 1 : -1]
  86. #endif
  87. /* check that size is exactly some number */
  88. #define function_count_check(sym, size) \
  89. compile_time_assert((sym##_FUNCTION_COUNT) == (size),\
  90. strings_match_defs_##sym)
  91. /* These strings should be generated using a macro which defines
  92. the corresponding symbol values. */
  93. #define HPI_OBJ_STRINGS \
  94. { \
  95. "HPI_OBJ_SUBSYSTEM", \
  96. "HPI_OBJ_ADAPTER", \
  97. "HPI_OBJ_OSTREAM", \
  98. "HPI_OBJ_ISTREAM", \
  99. "HPI_OBJ_MIXER", \
  100. "HPI_OBJ_NODE", \
  101. "HPI_OBJ_CONTROL", \
  102. "HPI_OBJ_NVMEMORY", \
  103. "HPI_OBJ_DIGITALIO", \
  104. "HPI_OBJ_WATCHDOG", \
  105. "HPI_OBJ_CLOCK", \
  106. "HPI_OBJ_PROFILE", \
  107. "HPI_OBJ_CONTROLEX" \
  108. }
  109. #define HPI_SUBSYS_STRINGS \
  110. { \
  111. "HPI_SUBSYS_OPEN", \
  112. "HPI_SUBSYS_GET_VERSION", \
  113. "HPI_SUBSYS_GET_INFO", \
  114. "HPI_SUBSYS_FIND_ADAPTERS", \
  115. "HPI_SUBSYS_CREATE_ADAPTER",\
  116. "HPI_SUBSYS_CLOSE", \
  117. "HPI_SUBSYS_DELETE_ADAPTER", \
  118. "HPI_SUBSYS_DRIVER_LOAD", \
  119. "HPI_SUBSYS_DRIVER_UNLOAD", \
  120. "HPI_SUBSYS_READ_PORT_8", \
  121. "HPI_SUBSYS_WRITE_PORT_8", \
  122. "HPI_SUBSYS_GET_NUM_ADAPTERS",\
  123. "HPI_SUBSYS_GET_ADAPTER", \
  124. "HPI_SUBSYS_SET_NETWORK_INTERFACE"\
  125. }
  126. function_count_check(HPI_SUBSYS, 14);
  127. #define HPI_ADAPTER_STRINGS \
  128. { \
  129. "HPI_ADAPTER_OPEN", \
  130. "HPI_ADAPTER_CLOSE", \
  131. "HPI_ADAPTER_GET_INFO", \
  132. "HPI_ADAPTER_GET_ASSERT", \
  133. "HPI_ADAPTER_TEST_ASSERT", \
  134. "HPI_ADAPTER_SET_MODE", \
  135. "HPI_ADAPTER_GET_MODE", \
  136. "HPI_ADAPTER_ENABLE_CAPABILITY",\
  137. "HPI_ADAPTER_SELFTEST", \
  138. "HPI_ADAPTER_FIND_OBJECT", \
  139. "HPI_ADAPTER_QUERY_FLASH", \
  140. "HPI_ADAPTER_START_FLASH", \
  141. "HPI_ADAPTER_PROGRAM_FLASH", \
  142. "HPI_ADAPTER_SET_PROPERTY", \
  143. "HPI_ADAPTER_GET_PROPERTY", \
  144. "HPI_ADAPTER_ENUM_PROPERTY", \
  145. "HPI_ADAPTER_MODULE_INFO", \
  146. "HPI_ADAPTER_DEBUG_READ" \
  147. }
  148. function_count_check(HPI_ADAPTER, 18);
  149. #define HPI_OSTREAM_STRINGS \
  150. { \
  151. "HPI_OSTREAM_OPEN", \
  152. "HPI_OSTREAM_CLOSE", \
  153. "HPI_OSTREAM_WRITE", \
  154. "HPI_OSTREAM_START", \
  155. "HPI_OSTREAM_STOP", \
  156. "HPI_OSTREAM_RESET", \
  157. "HPI_OSTREAM_GET_INFO", \
  158. "HPI_OSTREAM_QUERY_FORMAT", \
  159. "HPI_OSTREAM_DATA", \
  160. "HPI_OSTREAM_SET_VELOCITY", \
  161. "HPI_OSTREAM_SET_PUNCHINOUT", \
  162. "HPI_OSTREAM_SINEGEN", \
  163. "HPI_OSTREAM_ANC_RESET", \
  164. "HPI_OSTREAM_ANC_GET_INFO", \
  165. "HPI_OSTREAM_ANC_READ", \
  166. "HPI_OSTREAM_SET_TIMESCALE",\
  167. "HPI_OSTREAM_SET_FORMAT", \
  168. "HPI_OSTREAM_HOSTBUFFER_ALLOC", \
  169. "HPI_OSTREAM_HOSTBUFFER_FREE", \
  170. "HPI_OSTREAM_GROUP_ADD",\
  171. "HPI_OSTREAM_GROUP_GETMAP", \
  172. "HPI_OSTREAM_GROUP_RESET", \
  173. "HPI_OSTREAM_HOSTBUFFER_GET_INFO", \
  174. "HPI_OSTREAM_WAIT_START", \
  175. }
  176. function_count_check(HPI_OSTREAM, 24);
  177. #define HPI_ISTREAM_STRINGS \
  178. { \
  179. "HPI_ISTREAM_OPEN", \
  180. "HPI_ISTREAM_CLOSE", \
  181. "HPI_ISTREAM_SET_FORMAT", \
  182. "HPI_ISTREAM_READ", \
  183. "HPI_ISTREAM_START", \
  184. "HPI_ISTREAM_STOP", \
  185. "HPI_ISTREAM_RESET", \
  186. "HPI_ISTREAM_GET_INFO", \
  187. "HPI_ISTREAM_QUERY_FORMAT", \
  188. "HPI_ISTREAM_ANC_RESET", \
  189. "HPI_ISTREAM_ANC_GET_INFO", \
  190. "HPI_ISTREAM_ANC_WRITE", \
  191. "HPI_ISTREAM_HOSTBUFFER_ALLOC",\
  192. "HPI_ISTREAM_HOSTBUFFER_FREE", \
  193. "HPI_ISTREAM_GROUP_ADD", \
  194. "HPI_ISTREAM_GROUP_GETMAP", \
  195. "HPI_ISTREAM_GROUP_RESET", \
  196. "HPI_ISTREAM_HOSTBUFFER_GET_INFO", \
  197. "HPI_ISTREAM_WAIT_START", \
  198. }
  199. function_count_check(HPI_ISTREAM, 19);
  200. #define HPI_MIXER_STRINGS \
  201. { \
  202. "HPI_MIXER_OPEN", \
  203. "HPI_MIXER_CLOSE", \
  204. "HPI_MIXER_GET_INFO", \
  205. "HPI_MIXER_GET_NODE_INFO", \
  206. "HPI_MIXER_GET_CONTROL", \
  207. "HPI_MIXER_SET_CONNECTION", \
  208. "HPI_MIXER_GET_CONNECTIONS", \
  209. "HPI_MIXER_GET_CONTROL_BY_INDEX", \
  210. "HPI_MIXER_GET_CONTROL_ARRAY_BY_INDEX", \
  211. "HPI_MIXER_GET_CONTROL_MULTIPLE_VALUES", \
  212. "HPI_MIXER_STORE", \
  213. }
  214. function_count_check(HPI_MIXER, 11);
  215. #define HPI_CONTROL_STRINGS \
  216. { \
  217. "HPI_CONTROL_GET_INFO", \
  218. "HPI_CONTROL_GET_STATE", \
  219. "HPI_CONTROL_SET_STATE" \
  220. }
  221. function_count_check(HPI_CONTROL, 3);
  222. #define HPI_NVMEMORY_STRINGS \
  223. { \
  224. "HPI_NVMEMORY_OPEN", \
  225. "HPI_NVMEMORY_READ_BYTE", \
  226. "HPI_NVMEMORY_WRITE_BYTE" \
  227. }
  228. function_count_check(HPI_NVMEMORY, 3);
  229. #define HPI_DIGITALIO_STRINGS \
  230. { \
  231. "HPI_GPIO_OPEN", \
  232. "HPI_GPIO_READ_BIT", \
  233. "HPI_GPIO_WRITE_BIT", \
  234. "HPI_GPIO_READ_ALL", \
  235. "HPI_GPIO_WRITE_STATUS"\
  236. }
  237. function_count_check(HPI_GPIO, 5);
  238. #define HPI_WATCHDOG_STRINGS \
  239. { \
  240. "HPI_WATCHDOG_OPEN", \
  241. "HPI_WATCHDOG_SET_TIME", \
  242. "HPI_WATCHDOG_PING" \
  243. }
  244. #define HPI_CLOCK_STRINGS \
  245. { \
  246. "HPI_CLOCK_OPEN", \
  247. "HPI_CLOCK_SET_TIME", \
  248. "HPI_CLOCK_GET_TIME" \
  249. }
  250. #define HPI_PROFILE_STRINGS \
  251. { \
  252. "HPI_PROFILE_OPEN_ALL", \
  253. "HPI_PROFILE_START_ALL", \
  254. "HPI_PROFILE_STOP_ALL", \
  255. "HPI_PROFILE_GET", \
  256. "HPI_PROFILE_GET_IDLECOUNT", \
  257. "HPI_PROFILE_GET_NAME", \
  258. "HPI_PROFILE_GET_UTILIZATION" \
  259. }
  260. function_count_check(HPI_PROFILE, 7);
  261. #define HPI_ASYNCEVENT_STRINGS \
  262. { \
  263. "HPI_ASYNCEVENT_OPEN",\
  264. "HPI_ASYNCEVENT_CLOSE ",\
  265. "HPI_ASYNCEVENT_WAIT",\
  266. "HPI_ASYNCEVENT_GETCOUNT",\
  267. "HPI_ASYNCEVENT_GET",\
  268. "HPI_ASYNCEVENT_SENDEVENTS"\
  269. }
  270. function_count_check(HPI_ASYNCEVENT, 6);
  271. #define HPI_CONTROL_TYPE_STRINGS \
  272. { \
  273. "null control", \
  274. "HPI_CONTROL_CONNECTION", \
  275. "HPI_CONTROL_VOLUME", \
  276. "HPI_CONTROL_METER", \
  277. "HPI_CONTROL_MUTE", \
  278. "HPI_CONTROL_MULTIPLEXER", \
  279. "HPI_CONTROL_AESEBU_TRANSMITTER", \
  280. "HPI_CONTROL_AESEBU_RECEIVER", \
  281. "HPI_CONTROL_LEVEL", \
  282. "HPI_CONTROL_TUNER", \
  283. "HPI_CONTROL_ONOFFSWITCH", \
  284. "HPI_CONTROL_VOX", \
  285. "HPI_CONTROL_AES18_TRANSMITTER", \
  286. "HPI_CONTROL_AES18_RECEIVER", \
  287. "HPI_CONTROL_AES18_BLOCKGENERATOR", \
  288. "HPI_CONTROL_CHANNEL_MODE", \
  289. "HPI_CONTROL_BITSTREAM", \
  290. "HPI_CONTROL_SAMPLECLOCK", \
  291. "HPI_CONTROL_MICROPHONE", \
  292. "HPI_CONTROL_PARAMETRIC_EQ", \
  293. "HPI_CONTROL_COMPANDER", \
  294. "HPI_CONTROL_COBRANET", \
  295. "HPI_CONTROL_TONE_DETECT", \
  296. "HPI_CONTROL_SILENCE_DETECT", \
  297. "HPI_CONTROL_PAD", \
  298. "HPI_CONTROL_SRC" ,\
  299. "HPI_CONTROL_UNIVERSAL" \
  300. }
  301. compile_time_assert((HPI_CONTROL_LAST_INDEX + 1 == 27),
  302. controltype_strings_match_defs);
  303. #define HPI_SOURCENODE_STRINGS \
  304. { \
  305. "no source", \
  306. "HPI_SOURCENODE_OSTREAM", \
  307. "HPI_SOURCENODE_LINEIN", \
  308. "HPI_SOURCENODE_AESEBU_IN", \
  309. "HPI_SOURCENODE_TUNER", \
  310. "HPI_SOURCENODE_RF", \
  311. "HPI_SOURCENODE_CLOCK_SOURCE", \
  312. "HPI_SOURCENODE_RAW_BITSTREAM", \
  313. "HPI_SOURCENODE_MICROPHONE", \
  314. "HPI_SOURCENODE_COBRANET", \
  315. "HPI_SOURCENODE_ANALOG", \
  316. "HPI_SOURCENODE_ADAPTER" \
  317. }
  318. compile_time_assert((HPI_SOURCENODE_LAST_INDEX - HPI_SOURCENODE_NONE + 1) ==
  319. (12), sourcenode_strings_match_defs);
  320. #define HPI_DESTNODE_STRINGS \
  321. { \
  322. "no destination", \
  323. "HPI_DESTNODE_ISTREAM", \
  324. "HPI_DESTNODE_LINEOUT", \
  325. "HPI_DESTNODE_AESEBU_OUT", \
  326. "HPI_DESTNODE_RF", \
  327. "HPI_DESTNODE_SPEAKER", \
  328. "HPI_DESTNODE_COBRANET", \
  329. "HPI_DESTNODE_ANALOG" \
  330. }
  331. compile_time_assert((HPI_DESTNODE_LAST_INDEX - HPI_DESTNODE_NONE + 1) == (8),
  332. destnode_strings_match_defs);
  333. #define HPI_CONTROL_CHANNEL_MODE_STRINGS \
  334. { \
  335. "XXX HPI_CHANNEL_MODE_ERROR XXX", \
  336. "HPI_CHANNEL_MODE_NORMAL", \
  337. "HPI_CHANNEL_MODE_SWAP", \
  338. "HPI_CHANNEL_MODE_LEFT_ONLY", \
  339. "HPI_CHANNEL_MODE_RIGHT_ONLY" \
  340. }
  341. #endif /* _HPIDEBUG_H */