halmac_fw_offload_c2h_ap.h 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2016 - 2018 Realtek Corporation. All rights reserved.
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms of version 2 of the GNU General Public License as
  7. * published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  12. * more details.
  13. *
  14. ******************************************************************************/
  15. #ifndef _HAL_FWOFFLOADC2HFORMAT_H2C_C2H_AP_H_
  16. #define _HAL_FWOFFLOADC2HFORMAT_H2C_C2H_AP_H_
  17. #define C2H_SUB_CMD_ID_C2H_DBG 0X00
  18. #define C2H_SUB_CMD_ID_BT_COEX_INFO 0X02
  19. #define C2H_SUB_CMD_ID_SCAN_STATUS_RPT 0X03
  20. #define C2H_SUB_CMD_ID_H2C_ACK_HDR 0X01
  21. #define C2H_SUB_CMD_ID_CFG_PARAM_ACK 0X01
  22. #define C2H_SUB_CMD_ID_BT_COEX_ACK 0X01
  23. #define C2H_SUB_CMD_ID_DUMP_PHYSICAL_EFUSE_ACK 0X01
  24. #define C2H_SUB_CMD_ID_UPDATE_PKT_ACK 0X01
  25. #define C2H_SUB_CMD_ID_UPDATE_DATAPACK_ACK 0X01
  26. #define C2H_SUB_CMD_ID_RUN_DATAPACK_ACK 0X01
  27. #define C2H_SUB_CMD_ID_CH_SWITCH_ACK 0X01
  28. #define C2H_SUB_CMD_ID_IQK_ACK 0X01
  29. #define C2H_SUB_CMD_ID_PWR_TRK_ACK 0X01
  30. #define C2H_SUB_CMD_ID_PSD_ACK 0X01
  31. #define C2H_SUB_CMD_ID_FW_MEM_DUMP_ACK 0X01
  32. #define C2H_SUB_CMD_ID_PSD_DATA 0X04
  33. #define C2H_SUB_CMD_ID_EFUSE_DATA 0X05
  34. #define C2H_SUB_CMD_ID_IQK_DATA 0X06
  35. #define C2H_SUB_CMD_ID_C2H_PKT_FTM_DBG 0X07
  36. #define C2H_SUB_CMD_ID_C2H_PKT_FTM_2_DBG 0X08
  37. #define C2H_SUB_CMD_ID_C2H_PKT_FTM_3_DBG 0X09
  38. #define C2H_SUB_CMD_ID_C2H_PKT_FTM_4_DBG 0X0A
  39. #define C2H_SUB_CMD_ID_FTMACKRPT_HDL_DBG 0X0B
  40. #define C2H_SUB_CMD_ID_FTMC2H_RPT 0X0C
  41. #define C2H_SUB_CMD_ID_DRVFTMC2H_RPT 0X0D
  42. #define C2H_SUB_CMD_ID_C2H_PKT_FTM_5_DBG 0X0E
  43. #define C2H_SUB_CMD_ID_CCX_RPT 0X0F
  44. #define C2H_SUB_CMD_ID_C2H_PKT_NAN_RPT 0X10
  45. #define C2H_SUB_CMD_ID_C2H_PKT_ATM_RPT 0X11
  46. #define C2H_SUB_CMD_ID_C2H_PKT_FTMSESSION_END 0X1C
  47. #define C2H_SUB_CMD_ID_C2H_PKT_DETECT_THERMAL 0X1D
  48. #define C2H_SUB_CMD_ID_FW_DBG_MSG 0XFF
  49. #define C2H_SUB_CMD_ID_FW_SNDING_ACK 0X01
  50. #define C2H_SUB_CMD_ID_FW_FWCTRL_RPT 0X1F
  51. #define C2H_SUB_CMD_ID_H2C_LOOPBACK_ACK 0X20
  52. #define C2H_SUB_CMD_ID_FWCMD_LOOPBACK_ACK 0X21
  53. #define C2H_SUB_CMD_ID_FW_TBTT_RPT 0X23
  54. #define H2C_SUB_CMD_ID_CFG_PARAM_ACK SUB_CMD_ID_CFG_PARAM
  55. #define H2C_SUB_CMD_ID_BT_COEX_ACK SUB_CMD_ID_BT_COEX
  56. #define H2C_SUB_CMD_ID_DUMP_PHYSICAL_EFUSE_ACK SUB_CMD_ID_DUMP_PHYSICAL_EFUSE
  57. #define H2C_SUB_CMD_ID_UPDATE_PKT_ACK SUB_CMD_ID_UPDATE_PKT
  58. #define H2C_SUB_CMD_ID_UPDATE_DATAPACK_ACK SUB_CMD_ID_UPDATE_DATAPACK
  59. #define H2C_SUB_CMD_ID_RUN_DATAPACK_ACK SUB_CMD_ID_RUN_DATAPACK
  60. #define H2C_SUB_CMD_ID_CH_SWITCH_ACK SUB_CMD_ID_CH_SWITCH
  61. #define H2C_SUB_CMD_ID_IQK_ACK SUB_CMD_ID_IQK
  62. #define H2C_SUB_CMD_ID_PWR_TRK_ACK SUB_CMD_ID_PWR_TRK
  63. #define H2C_SUB_CMD_ID_PSD_ACK SUB_CMD_ID_PSD
  64. #define H2C_SUB_CMD_ID_FW_MEM_DUMP_ACK SUB_CMD_ID_FW_MEM_DUMP
  65. #define H2C_SUB_CMD_ID_CCX_RPT SUB_CMD_ID_CCX_RPT
  66. #define H2C_SUB_CMD_ID_FW_DBG_MSG SUB_CMD_ID_FW_DBG_MSG
  67. #define H2C_SUB_CMD_ID_FW_SNDING_ACK SUB_CMD_ID_FW_SNDING
  68. #define H2C_SUB_CMD_ID_FW_FWCTRL_RPT SUB_CMD_ID_FW_FWCTRL_RPT
  69. #define H2C_SUB_CMD_ID_H2C_LOOPBACK_ACK SUB_CMD_ID_H2C_LOOPBACK
  70. #define H2C_SUB_CMD_ID_FWCMD_LOOPBACK_ACK SUB_CMD_ID_FWCMD_LOOPBACK
  71. #define H2C_CMD_ID_CFG_PARAM_ACK 0XFF
  72. #define H2C_CMD_ID_BT_COEX_ACK 0XFF
  73. #define H2C_CMD_ID_DUMP_PHYSICAL_EFUSE_ACK 0XFF
  74. #define H2C_CMD_ID_UPDATE_PKT_ACK 0XFF
  75. #define H2C_CMD_ID_UPDATE_DATAPACK_ACK 0XFF
  76. #define H2C_CMD_ID_RUN_DATAPACK_ACK 0XFF
  77. #define H2C_CMD_ID_CH_SWITCH_ACK 0XFF
  78. #define H2C_CMD_ID_IQK_ACK 0XFF
  79. #define H2C_CMD_ID_PWR_TRK_ACK 0XFF
  80. #define H2C_CMD_ID_PSD_ACK 0XFF
  81. #define H2C_CMD_ID_FW_MEM_DUMP_ACK 0XFF
  82. #define H2C_CMD_ID_CCX_RPT 0XFF
  83. #define H2C_CMD_ID_FW_DBG_MSG 0XFF
  84. #define H2C_CMD_ID_FW_SNDING_ACK 0XFF
  85. #define H2C_CMD_ID_FW_FWCTRL_RPT 0XFF
  86. #define H2C_CMD_ID_H2C_LOOPBACK_ACK 0XFF
  87. #define H2C_CMD_ID_FWCMD_LOOPBACK_ACK 0XFF
  88. #define C2H_HDR_GET_CMD_ID(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X00, 0, 8)
  89. #define C2H_HDR_SET_CMD_ID(c2h_pkt, value) \
  90. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 0, 8, value)
  91. #define C2H_HDR_SET_CMD_ID_NO_CLR(c2h_pkt, value) \
  92. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 0, 8, value)
  93. #define C2H_HDR_GET_SEQ(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X00, 8, 8)
  94. #define C2H_HDR_SET_SEQ(c2h_pkt, value) \
  95. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 8, 8, value)
  96. #define C2H_HDR_SET_SEQ_NO_CLR(c2h_pkt, value) \
  97. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 8, 8, value)
  98. #define C2H_HDR_GET_C2H_SUB_CMD_ID(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X00, 16, 8)
  99. #define C2H_HDR_SET_C2H_SUB_CMD_ID(c2h_pkt, value) \
  100. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 16, 8, value)
  101. #define C2H_HDR_SET_C2H_SUB_CMD_ID_NO_CLR(c2h_pkt, value) \
  102. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 16, 8, value)
  103. #define C2H_HDR_GET_LEN(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X00, 24, 8)
  104. #define C2H_HDR_SET_LEN(c2h_pkt, value) \
  105. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 24, 8, value)
  106. #define C2H_HDR_SET_LEN_NO_CLR(c2h_pkt, value) \
  107. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 24, 8, value)
  108. #define C2H_DBG_GET_DBG_MSG(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 0, 8)
  109. #define C2H_DBG_SET_DBG_MSG(c2h_pkt, value) \
  110. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 0, 8, value)
  111. #define C2H_DBG_SET_DBG_MSG_NO_CLR(c2h_pkt, value) \
  112. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 0, 8, value)
  113. #define BT_COEX_INFO_GET_DATA_START(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 0, 8)
  114. #define BT_COEX_INFO_SET_DATA_START(c2h_pkt, value) \
  115. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 0, 8, value)
  116. #define BT_COEX_INFO_SET_DATA_START_NO_CLR(c2h_pkt, value) \
  117. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 0, 8, value)
  118. #define SCAN_STATUS_RPT_GET_H2C_RETURN_CODE(c2h_pkt) \
  119. GET_C2H_FIELD(c2h_pkt + 0X04, 0, 8)
  120. #define SCAN_STATUS_RPT_SET_H2C_RETURN_CODE(c2h_pkt, value) \
  121. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 0, 8, value)
  122. #define SCAN_STATUS_RPT_SET_H2C_RETURN_CODE_NO_CLR(c2h_pkt, value) \
  123. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 0, 8, value)
  124. #define SCAN_STATUS_RPT_GET_H2C_SEQ(c2h_pkt) \
  125. GET_C2H_FIELD(c2h_pkt + 0X04, 16, 16)
  126. #define SCAN_STATUS_RPT_SET_H2C_SEQ(c2h_pkt, value) \
  127. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 16, 16, value)
  128. #define SCAN_STATUS_RPT_SET_H2C_SEQ_NO_CLR(c2h_pkt, value) \
  129. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 16, 16, value)
  130. #define H2C_ACK_HDR_GET_H2C_RETURN_CODE(c2h_pkt) \
  131. GET_C2H_FIELD(c2h_pkt + 0X04, 0, 8)
  132. #define H2C_ACK_HDR_SET_H2C_RETURN_CODE(c2h_pkt, value) \
  133. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 0, 8, value)
  134. #define H2C_ACK_HDR_SET_H2C_RETURN_CODE_NO_CLR(c2h_pkt, value) \
  135. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 0, 8, value)
  136. #define H2C_ACK_HDR_GET_H2C_CMD_ID(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 8, 8)
  137. #define H2C_ACK_HDR_SET_H2C_CMD_ID(c2h_pkt, value) \
  138. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 8, 8, value)
  139. #define H2C_ACK_HDR_SET_H2C_CMD_ID_NO_CLR(c2h_pkt, value) \
  140. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 8, 8, value)
  141. #define H2C_ACK_HDR_GET_H2C_SUB_CMD_ID(c2h_pkt) \
  142. GET_C2H_FIELD(c2h_pkt + 0X04, 16, 16)
  143. #define H2C_ACK_HDR_SET_H2C_SUB_CMD_ID(c2h_pkt, value) \
  144. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 16, 16, value)
  145. #define H2C_ACK_HDR_SET_H2C_SUB_CMD_ID_NO_CLR(c2h_pkt, value) \
  146. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 16, 16, value)
  147. #define H2C_ACK_HDR_GET_H2C_SEQ(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X08, 0, 16)
  148. #define H2C_ACK_HDR_SET_H2C_SEQ(c2h_pkt, value) \
  149. SET_C2H_FIELD_CLR(c2h_pkt + 0X08, 0, 16, value)
  150. #define H2C_ACK_HDR_SET_H2C_SEQ_NO_CLR(c2h_pkt, value) \
  151. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X08, 0, 16, value)
  152. #define CFG_PARAM_ACK_GET_OFFSET_ACCUMULATION(c2h_pkt) \
  153. GET_C2H_FIELD(c2h_pkt + 0XC, 0, 32)
  154. #define CFG_PARAM_ACK_SET_OFFSET_ACCUMULATION(c2h_pkt, value) \
  155. SET_C2H_FIELD_CLR(c2h_pkt + 0XC, 0, 32, value)
  156. #define CFG_PARAM_ACK_SET_OFFSET_ACCUMULATION_NO_CLR(c2h_pkt, value) \
  157. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0XC, 0, 32, value)
  158. #define CFG_PARAM_ACK_GET_VALUE_ACCUMULATION(c2h_pkt) \
  159. GET_C2H_FIELD(c2h_pkt + 0X10, 0, 32)
  160. #define CFG_PARAM_ACK_SET_VALUE_ACCUMULATION(c2h_pkt, value) \
  161. SET_C2H_FIELD_CLR(c2h_pkt + 0X10, 0, 32, value)
  162. #define CFG_PARAM_ACK_SET_VALUE_ACCUMULATION_NO_CLR(c2h_pkt, value) \
  163. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X10, 0, 32, value)
  164. #define BT_COEX_ACK_GET_DATA_START(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0XC, 0, 8)
  165. #define BT_COEX_ACK_SET_DATA_START(c2h_pkt, value) \
  166. SET_C2H_FIELD_CLR(c2h_pkt + 0XC, 0, 8, value)
  167. #define BT_COEX_ACK_SET_DATA_START_NO_CLR(c2h_pkt, value) \
  168. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0XC, 0, 8, value)
  169. #define PSD_DATA_GET_SEGMENT_ID(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 0, 7)
  170. #define PSD_DATA_SET_SEGMENT_ID(c2h_pkt, value) \
  171. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 0, 7, value)
  172. #define PSD_DATA_SET_SEGMENT_ID_NO_CLR(c2h_pkt, value) \
  173. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 0, 7, value)
  174. #define PSD_DATA_GET_END_SEGMENT(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 7, 1)
  175. #define PSD_DATA_SET_END_SEGMENT(c2h_pkt, value) \
  176. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 7, 1, value)
  177. #define PSD_DATA_SET_END_SEGMENT_NO_CLR(c2h_pkt, value) \
  178. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 7, 1, value)
  179. #define PSD_DATA_GET_SEGMENT_SIZE(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 8, 8)
  180. #define PSD_DATA_SET_SEGMENT_SIZE(c2h_pkt, value) \
  181. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 8, 8, value)
  182. #define PSD_DATA_SET_SEGMENT_SIZE_NO_CLR(c2h_pkt, value) \
  183. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 8, 8, value)
  184. #define PSD_DATA_GET_TOTAL_SIZE(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 16, 16)
  185. #define PSD_DATA_SET_TOTAL_SIZE(c2h_pkt, value) \
  186. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 16, 16, value)
  187. #define PSD_DATA_SET_TOTAL_SIZE_NO_CLR(c2h_pkt, value) \
  188. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 16, 16, value)
  189. #define PSD_DATA_GET_H2C_SEQ(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X8, 0, 16)
  190. #define PSD_DATA_SET_H2C_SEQ(c2h_pkt, value) \
  191. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 0, 16, value)
  192. #define PSD_DATA_SET_H2C_SEQ_NO_CLR(c2h_pkt, value) \
  193. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 0, 16, value)
  194. #define PSD_DATA_GET_DATA_START(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X8, 16, 8)
  195. #define PSD_DATA_SET_DATA_START(c2h_pkt, value) \
  196. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 16, 8, value)
  197. #define PSD_DATA_SET_DATA_START_NO_CLR(c2h_pkt, value) \
  198. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 16, 8, value)
  199. #define EFUSE_DATA_GET_SEGMENT_ID(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 0, 7)
  200. #define EFUSE_DATA_SET_SEGMENT_ID(c2h_pkt, value) \
  201. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 0, 7, value)
  202. #define EFUSE_DATA_SET_SEGMENT_ID_NO_CLR(c2h_pkt, value) \
  203. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 0, 7, value)
  204. #define EFUSE_DATA_GET_END_SEGMENT(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 7, 1)
  205. #define EFUSE_DATA_SET_END_SEGMENT(c2h_pkt, value) \
  206. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 7, 1, value)
  207. #define EFUSE_DATA_SET_END_SEGMENT_NO_CLR(c2h_pkt, value) \
  208. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 7, 1, value)
  209. #define EFUSE_DATA_GET_SEGMENT_SIZE(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 8, 8)
  210. #define EFUSE_DATA_SET_SEGMENT_SIZE(c2h_pkt, value) \
  211. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 8, 8, value)
  212. #define EFUSE_DATA_SET_SEGMENT_SIZE_NO_CLR(c2h_pkt, value) \
  213. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 8, 8, value)
  214. #define EFUSE_DATA_GET_TOTAL_SIZE(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 16, 16)
  215. #define EFUSE_DATA_SET_TOTAL_SIZE(c2h_pkt, value) \
  216. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 16, 16, value)
  217. #define EFUSE_DATA_SET_TOTAL_SIZE_NO_CLR(c2h_pkt, value) \
  218. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 16, 16, value)
  219. #define EFUSE_DATA_GET_H2C_SEQ(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X8, 0, 16)
  220. #define EFUSE_DATA_SET_H2C_SEQ(c2h_pkt, value) \
  221. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 0, 16, value)
  222. #define EFUSE_DATA_SET_H2C_SEQ_NO_CLR(c2h_pkt, value) \
  223. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 0, 16, value)
  224. #define EFUSE_DATA_GET_DATA_START(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X8, 16, 8)
  225. #define EFUSE_DATA_SET_DATA_START(c2h_pkt, value) \
  226. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 16, 8, value)
  227. #define EFUSE_DATA_SET_DATA_START_NO_CLR(c2h_pkt, value) \
  228. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 16, 8, value)
  229. #define IQK_DATA_GET_SEGMENT_ID(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 0, 7)
  230. #define IQK_DATA_SET_SEGMENT_ID(c2h_pkt, value) \
  231. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 0, 7, value)
  232. #define IQK_DATA_SET_SEGMENT_ID_NO_CLR(c2h_pkt, value) \
  233. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 0, 7, value)
  234. #define IQK_DATA_GET_END_SEGMENT(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 7, 1)
  235. #define IQK_DATA_SET_END_SEGMENT(c2h_pkt, value) \
  236. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 7, 1, value)
  237. #define IQK_DATA_SET_END_SEGMENT_NO_CLR(c2h_pkt, value) \
  238. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 7, 1, value)
  239. #define IQK_DATA_GET_SEGMENT_SIZE(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 8, 8)
  240. #define IQK_DATA_SET_SEGMENT_SIZE(c2h_pkt, value) \
  241. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 8, 8, value)
  242. #define IQK_DATA_SET_SEGMENT_SIZE_NO_CLR(c2h_pkt, value) \
  243. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 8, 8, value)
  244. #define IQK_DATA_GET_TOTAL_SIZE(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 16, 16)
  245. #define IQK_DATA_SET_TOTAL_SIZE(c2h_pkt, value) \
  246. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 16, 16, value)
  247. #define IQK_DATA_SET_TOTAL_SIZE_NO_CLR(c2h_pkt, value) \
  248. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 16, 16, value)
  249. #define IQK_DATA_GET_H2C_SEQ(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X8, 0, 16)
  250. #define IQK_DATA_SET_H2C_SEQ(c2h_pkt, value) \
  251. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 0, 16, value)
  252. #define IQK_DATA_SET_H2C_SEQ_NO_CLR(c2h_pkt, value) \
  253. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 0, 16, value)
  254. #define IQK_DATA_GET_DATA_START(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X8, 16, 8)
  255. #define IQK_DATA_SET_DATA_START(c2h_pkt, value) \
  256. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 16, 8, value)
  257. #define IQK_DATA_SET_DATA_START_NO_CLR(c2h_pkt, value) \
  258. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 16, 8, value)
  259. #define CCX_RPT_GET_POLLUTED(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X4, 0, 1)
  260. #define CCX_RPT_SET_POLLUTED(c2h_pkt, value) \
  261. SET_C2H_FIELD_CLR(c2h_pkt + 0X4, 0, 1, value)
  262. #define CCX_RPT_SET_POLLUTED_NO_CLR(c2h_pkt, value) \
  263. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X4, 0, 1, value)
  264. #define CCX_RPT_GET_RPT_SEL(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X4, 5, 3)
  265. #define CCX_RPT_SET_RPT_SEL(c2h_pkt, value) \
  266. SET_C2H_FIELD_CLR(c2h_pkt + 0X4, 5, 3, value)
  267. #define CCX_RPT_SET_RPT_SEL_NO_CLR(c2h_pkt, value) \
  268. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X4, 5, 3, value)
  269. #define CCX_RPT_GET_QSEL(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X4, 8, 5)
  270. #define CCX_RPT_SET_QSEL(c2h_pkt, value) \
  271. SET_C2H_FIELD_CLR(c2h_pkt + 0X4, 8, 5, value)
  272. #define CCX_RPT_SET_QSEL_NO_CLR(c2h_pkt, value) \
  273. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X4, 8, 5, value)
  274. #define CCX_RPT_GET_MISSED_RPT_NUM(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X4, 13, 3)
  275. #define CCX_RPT_SET_MISSED_RPT_NUM(c2h_pkt, value) \
  276. SET_C2H_FIELD_CLR(c2h_pkt + 0X4, 13, 3, value)
  277. #define CCX_RPT_SET_MISSED_RPT_NUM_NO_CLR(c2h_pkt, value) \
  278. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X4, 13, 3, value)
  279. #define CCX_RPT_GET_MACID(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X4, 16, 7)
  280. #define CCX_RPT_SET_MACID(c2h_pkt, value) \
  281. SET_C2H_FIELD_CLR(c2h_pkt + 0X4, 16, 7, value)
  282. #define CCX_RPT_SET_MACID_NO_CLR(c2h_pkt, value) \
  283. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X4, 16, 7, value)
  284. #define CCX_RPT_GET_INITIAL_DATA_RATE(c2h_pkt) \
  285. GET_C2H_FIELD(c2h_pkt + 0X4, 24, 7)
  286. #define CCX_RPT_SET_INITIAL_DATA_RATE(c2h_pkt, value) \
  287. SET_C2H_FIELD_CLR(c2h_pkt + 0X4, 24, 7, value)
  288. #define CCX_RPT_SET_INITIAL_DATA_RATE_NO_CLR(c2h_pkt, value) \
  289. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X4, 24, 7, value)
  290. #define CCX_RPT_GET_INITIAL_SGI(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X4, 31, 1)
  291. #define CCX_RPT_SET_INITIAL_SGI(c2h_pkt, value) \
  292. SET_C2H_FIELD_CLR(c2h_pkt + 0X4, 31, 1, value)
  293. #define CCX_RPT_SET_INITIAL_SGI_NO_CLR(c2h_pkt, value) \
  294. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X4, 31, 1, value)
  295. #define CCX_RPT_GET_QUEUE_TIME(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X8, 0, 16)
  296. #define CCX_RPT_SET_QUEUE_TIME(c2h_pkt, value) \
  297. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 0, 16, value)
  298. #define CCX_RPT_SET_QUEUE_TIME_NO_CLR(c2h_pkt, value) \
  299. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 0, 16, value)
  300. #define CCX_RPT_GET_SW_DEFINE_BYTE0(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X8, 16, 8)
  301. #define CCX_RPT_SET_SW_DEFINE_BYTE0(c2h_pkt, value) \
  302. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 16, 8, value)
  303. #define CCX_RPT_SET_SW_DEFINE_BYTE0_NO_CLR(c2h_pkt, value) \
  304. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 16, 8, value)
  305. #define CCX_RPT_GET_RTS_RETRY_COUNT(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X8, 24, 4)
  306. #define CCX_RPT_SET_RTS_RETRY_COUNT(c2h_pkt, value) \
  307. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 24, 4, value)
  308. #define CCX_RPT_SET_RTS_RETRY_COUNT_NO_CLR(c2h_pkt, value) \
  309. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 24, 4, value)
  310. #define CCX_RPT_GET_BMC(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X8, 29, 1)
  311. #define CCX_RPT_SET_BMC(c2h_pkt, value) \
  312. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 29, 1, value)
  313. #define CCX_RPT_SET_BMC_NO_CLR(c2h_pkt, value) \
  314. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 29, 1, value)
  315. #define CCX_RPT_GET_TX_STATE(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X8, 30, 2)
  316. #define CCX_RPT_SET_TX_STATE(c2h_pkt, value) \
  317. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 30, 2, value)
  318. #define CCX_RPT_SET_TX_STATE_NO_CLR(c2h_pkt, value) \
  319. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 30, 2, value)
  320. #define CCX_RPT_GET_DATA_RETRY_COUNT(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0XC, 0, 6)
  321. #define CCX_RPT_SET_DATA_RETRY_COUNT(c2h_pkt, value) \
  322. SET_C2H_FIELD_CLR(c2h_pkt + 0XC, 0, 6, value)
  323. #define CCX_RPT_SET_DATA_RETRY_COUNT_NO_CLR(c2h_pkt, value) \
  324. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0XC, 0, 6, value)
  325. #define CCX_RPT_GET_FINAL_DATA_RATE(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0XC, 8, 7)
  326. #define CCX_RPT_SET_FINAL_DATA_RATE(c2h_pkt, value) \
  327. SET_C2H_FIELD_CLR(c2h_pkt + 0XC, 8, 7, value)
  328. #define CCX_RPT_SET_FINAL_DATA_RATE_NO_CLR(c2h_pkt, value) \
  329. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0XC, 8, 7, value)
  330. #define CCX_RPT_GET_FINAL_SGI(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0XC, 15, 1)
  331. #define CCX_RPT_SET_FINAL_SGI(c2h_pkt, value) \
  332. SET_C2H_FIELD_CLR(c2h_pkt + 0XC, 15, 1, value)
  333. #define CCX_RPT_SET_FINAL_SGI_NO_CLR(c2h_pkt, value) \
  334. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0XC, 15, 1, value)
  335. #define CCX_RPT_GET_RF_CH_NUM(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0XC, 16, 10)
  336. #define CCX_RPT_SET_RF_CH_NUM(c2h_pkt, value) \
  337. SET_C2H_FIELD_CLR(c2h_pkt + 0XC, 16, 10, value)
  338. #define CCX_RPT_SET_RF_CH_NUM_NO_CLR(c2h_pkt, value) \
  339. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0XC, 16, 10, value)
  340. #define CCX_RPT_GET_SC(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0XC, 26, 4)
  341. #define CCX_RPT_SET_SC(c2h_pkt, value) \
  342. SET_C2H_FIELD_CLR(c2h_pkt + 0XC, 26, 4, value)
  343. #define CCX_RPT_SET_SC_NO_CLR(c2h_pkt, value) \
  344. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0XC, 26, 4, value)
  345. #define CCX_RPT_GET_BW(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0XC, 30, 2)
  346. #define CCX_RPT_SET_BW(c2h_pkt, value) \
  347. SET_C2H_FIELD_CLR(c2h_pkt + 0XC, 30, 2, value)
  348. #define CCX_RPT_SET_BW_NO_CLR(c2h_pkt, value) \
  349. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0XC, 30, 2, value)
  350. #define FW_DBG_MSG_GET_CMD_ID(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X00, 0, 8)
  351. #define FW_DBG_MSG_SET_CMD_ID(c2h_pkt, value) \
  352. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 0, 8, value)
  353. #define FW_DBG_MSG_SET_CMD_ID_NO_CLR(c2h_pkt, value) \
  354. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 0, 8, value)
  355. #define FW_DBG_MSG_GET_C2H_SUB_CMD_ID(c2h_pkt) \
  356. GET_C2H_FIELD(c2h_pkt + 0X00, 16, 8)
  357. #define FW_DBG_MSG_SET_C2H_SUB_CMD_ID(c2h_pkt, value) \
  358. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 16, 8, value)
  359. #define FW_DBG_MSG_SET_C2H_SUB_CMD_ID_NO_CLR(c2h_pkt, value) \
  360. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 16, 8, value)
  361. #define FW_DBG_MSG_GET_FULL(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X00, 24, 1)
  362. #define FW_DBG_MSG_SET_FULL(c2h_pkt, value) \
  363. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 24, 1, value)
  364. #define FW_DBG_MSG_SET_FULL_NO_CLR(c2h_pkt, value) \
  365. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 24, 1, value)
  366. #define FW_DBG_MSG_GET_OWN(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X00, 31, 1)
  367. #define FW_DBG_MSG_SET_OWN(c2h_pkt, value) \
  368. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 31, 1, value)
  369. #define FW_DBG_MSG_SET_OWN_NO_CLR(c2h_pkt, value) \
  370. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 31, 1, value)
  371. #define FW_FWCTRL_RPT_GET_EVT_TYPE(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X00, 0, 8)
  372. #define FW_FWCTRL_RPT_SET_EVT_TYPE(c2h_pkt, value) \
  373. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 0, 8, value)
  374. #define FW_FWCTRL_RPT_SET_EVT_TYPE_NO_CLR(c2h_pkt, value) \
  375. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 0, 8, value)
  376. #define FW_FWCTRL_RPT_GET_LENGTH(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X00, 8, 8)
  377. #define FW_FWCTRL_RPT_SET_LENGTH(c2h_pkt, value) \
  378. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 8, 8, value)
  379. #define FW_FWCTRL_RPT_SET_LENGTH_NO_CLR(c2h_pkt, value) \
  380. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 8, 8, value)
  381. #define FW_FWCTRL_RPT_GET_SEQ_NUM(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X00, 16, 8)
  382. #define FW_FWCTRL_RPT_SET_SEQ_NUM(c2h_pkt, value) \
  383. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 16, 8, value)
  384. #define FW_FWCTRL_RPT_SET_SEQ_NUM_NO_CLR(c2h_pkt, value) \
  385. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 16, 8, value)
  386. #define FW_FWCTRL_RPT_GET_IS_ACK(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X00, 24, 1)
  387. #define FW_FWCTRL_RPT_SET_IS_ACK(c2h_pkt, value) \
  388. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 24, 1, value)
  389. #define FW_FWCTRL_RPT_SET_IS_ACK_NO_CLR(c2h_pkt, value) \
  390. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 24, 1, value)
  391. #define FW_FWCTRL_RPT_GET_MORE_CONTENT(c2h_pkt) \
  392. GET_C2H_FIELD(c2h_pkt + 0X00, 25, 1)
  393. #define FW_FWCTRL_RPT_SET_MORE_CONTENT(c2h_pkt, value) \
  394. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 25, 1, value)
  395. #define FW_FWCTRL_RPT_SET_MORE_CONTENT_NO_CLR(c2h_pkt, value) \
  396. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 25, 1, value)
  397. #define FW_FWCTRL_RPT_GET_CONTENT_IDX(c2h_pkt) \
  398. GET_C2H_FIELD(c2h_pkt + 0X00, 26, 6)
  399. #define FW_FWCTRL_RPT_SET_CONTENT_IDX(c2h_pkt, value) \
  400. SET_C2H_FIELD_CLR(c2h_pkt + 0X00, 26, 6, value)
  401. #define FW_FWCTRL_RPT_SET_CONTENT_IDX_NO_CLR(c2h_pkt, value) \
  402. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X00, 26, 6, value)
  403. #define FW_FWCTRL_RPT_GET_CLASS_ID(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 0, 8)
  404. #define FW_FWCTRL_RPT_SET_CLASS_ID(c2h_pkt, value) \
  405. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 0, 8, value)
  406. #define FW_FWCTRL_RPT_SET_CLASS_ID_NO_CLR(c2h_pkt, value) \
  407. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 0, 8, value)
  408. #define FW_FWCTRL_RPT_GET_CONTENT(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 16, 16)
  409. #define FW_FWCTRL_RPT_SET_CONTENT(c2h_pkt, value) \
  410. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 16, 16, value)
  411. #define FW_FWCTRL_RPT_SET_CONTENT_NO_CLR(c2h_pkt, value) \
  412. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 16, 16, value)
  413. #define H2C_LOOPBACK_ACK_GET_H2C_BYTE_0(c2h_pkt) \
  414. GET_C2H_FIELD(c2h_pkt + 0X04, 0, 8)
  415. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_0(c2h_pkt, value) \
  416. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 0, 8, value)
  417. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_0_NO_CLR(c2h_pkt, value) \
  418. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 0, 8, value)
  419. #define H2C_LOOPBACK_ACK_GET_H2C_BYTE_1(c2h_pkt) \
  420. GET_C2H_FIELD(c2h_pkt + 0X04, 8, 8)
  421. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_1(c2h_pkt, value) \
  422. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 8, 8, value)
  423. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_1_NO_CLR(c2h_pkt, value) \
  424. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 8, 8, value)
  425. #define H2C_LOOPBACK_ACK_GET_H2C_BYTE_2(c2h_pkt) \
  426. GET_C2H_FIELD(c2h_pkt + 0X04, 16, 8)
  427. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_2(c2h_pkt, value) \
  428. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 16, 8, value)
  429. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_2_NO_CLR(c2h_pkt, value) \
  430. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 16, 8, value)
  431. #define H2C_LOOPBACK_ACK_GET_H2C_BYTE_3(c2h_pkt) \
  432. GET_C2H_FIELD(c2h_pkt + 0X04, 24, 8)
  433. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_3(c2h_pkt, value) \
  434. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 24, 8, value)
  435. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_3_NO_CLR(c2h_pkt, value) \
  436. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 24, 8, value)
  437. #define H2C_LOOPBACK_ACK_GET_H2C_BYTE_4(c2h_pkt) \
  438. GET_C2H_FIELD(c2h_pkt + 0X8, 0, 8)
  439. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_4(c2h_pkt, value) \
  440. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 0, 8, value)
  441. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_4_NO_CLR(c2h_pkt, value) \
  442. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 0, 8, value)
  443. #define H2C_LOOPBACK_ACK_GET_H2C_BYTE_5(c2h_pkt) \
  444. GET_C2H_FIELD(c2h_pkt + 0X8, 8, 8)
  445. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_5(c2h_pkt, value) \
  446. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 8, 8, value)
  447. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_5_NO_CLR(c2h_pkt, value) \
  448. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 8, 8, value)
  449. #define H2C_LOOPBACK_ACK_GET_H2C_BYTE_6(c2h_pkt) \
  450. GET_C2H_FIELD(c2h_pkt + 0X8, 16, 8)
  451. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_6(c2h_pkt, value) \
  452. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 16, 8, value)
  453. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_6_NO_CLR(c2h_pkt, value) \
  454. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 16, 8, value)
  455. #define H2C_LOOPBACK_ACK_GET_H2C_BYTE_7(c2h_pkt) \
  456. GET_C2H_FIELD(c2h_pkt + 0X8, 24, 8)
  457. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_7(c2h_pkt, value) \
  458. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 24, 8, value)
  459. #define H2C_LOOPBACK_ACK_SET_H2C_BYTE_7_NO_CLR(c2h_pkt, value) \
  460. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 24, 8, value)
  461. #define FWCMD_LOOPBACK_ACK_GET_H2C_BYTE_0(c2h_pkt) \
  462. GET_C2H_FIELD(c2h_pkt + 0X04, 0, 8)
  463. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_0(c2h_pkt, value) \
  464. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 0, 8, value)
  465. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_0_NO_CLR(c2h_pkt, value) \
  466. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 0, 8, value)
  467. #define FWCMD_LOOPBACK_ACK_GET_H2C_BYTE_1(c2h_pkt) \
  468. GET_C2H_FIELD(c2h_pkt + 0X04, 8, 8)
  469. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_1(c2h_pkt, value) \
  470. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 8, 8, value)
  471. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_1_NO_CLR(c2h_pkt, value) \
  472. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 8, 8, value)
  473. #define FWCMD_LOOPBACK_ACK_GET_H2C_BYTE_2(c2h_pkt) \
  474. GET_C2H_FIELD(c2h_pkt + 0X04, 16, 8)
  475. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_2(c2h_pkt, value) \
  476. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 16, 8, value)
  477. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_2_NO_CLR(c2h_pkt, value) \
  478. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 16, 8, value)
  479. #define FWCMD_LOOPBACK_ACK_GET_H2C_BYTE_3(c2h_pkt) \
  480. GET_C2H_FIELD(c2h_pkt + 0X04, 24, 8)
  481. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_3(c2h_pkt, value) \
  482. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 24, 8, value)
  483. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_3_NO_CLR(c2h_pkt, value) \
  484. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 24, 8, value)
  485. #define FWCMD_LOOPBACK_ACK_GET_H2C_BYTE_4(c2h_pkt) \
  486. GET_C2H_FIELD(c2h_pkt + 0X8, 0, 8)
  487. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_4(c2h_pkt, value) \
  488. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 0, 8, value)
  489. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_4_NO_CLR(c2h_pkt, value) \
  490. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 0, 8, value)
  491. #define FWCMD_LOOPBACK_ACK_GET_H2C_BYTE_5(c2h_pkt) \
  492. GET_C2H_FIELD(c2h_pkt + 0X8, 8, 8)
  493. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_5(c2h_pkt, value) \
  494. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 8, 8, value)
  495. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_5_NO_CLR(c2h_pkt, value) \
  496. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 8, 8, value)
  497. #define FWCMD_LOOPBACK_ACK_GET_H2C_BYTE_6(c2h_pkt) \
  498. GET_C2H_FIELD(c2h_pkt + 0X8, 16, 8)
  499. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_6(c2h_pkt, value) \
  500. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 16, 8, value)
  501. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_6_NO_CLR(c2h_pkt, value) \
  502. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 16, 8, value)
  503. #define FWCMD_LOOPBACK_ACK_GET_H2C_BYTE_7(c2h_pkt) \
  504. GET_C2H_FIELD(c2h_pkt + 0X8, 24, 8)
  505. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_7(c2h_pkt, value) \
  506. SET_C2H_FIELD_CLR(c2h_pkt + 0X8, 24, 8, value)
  507. #define FWCMD_LOOPBACK_ACK_SET_H2C_BYTE_7_NO_CLR(c2h_pkt, value) \
  508. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X8, 24, 8, value)
  509. #define FW_TBTT_RPT_GET_PORT_NUMBER(c2h_pkt) GET_C2H_FIELD(c2h_pkt + 0X04, 0, 8)
  510. #define FW_TBTT_RPT_SET_PORT_NUMBER(c2h_pkt, value) \
  511. SET_C2H_FIELD_CLR(c2h_pkt + 0X04, 0, 8, value)
  512. #define FW_TBTT_RPT_SET_PORT_NUMBER_NO_CLR(c2h_pkt, value) \
  513. SET_C2H_FIELD_NO_CLR(c2h_pkt + 0X04, 0, 8, value)
  514. #endif