hal_com_h2c.h 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2017 Realtek Corporation.
  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 __COMMON_H2C_H__
  16. #define __COMMON_H2C_H__
  17. /* ---------------------------------------------------------------------------------------------------------
  18. * ---------------------------------- H2C CMD DEFINITION ------------------------------------------------
  19. * ---------------------------------------------------------------------------------------------------------
  20. * 88e, 8723b, 8812, 8821, 92e use the same FW code base */
  21. enum h2c_cmd {
  22. /* Common Class: 000 */
  23. H2C_RSVD_PAGE = 0x00,
  24. H2C_MEDIA_STATUS_RPT = 0x01,
  25. H2C_SCAN_ENABLE = 0x02,
  26. H2C_KEEP_ALIVE = 0x03,
  27. H2C_DISCON_DECISION = 0x04,
  28. H2C_PSD_OFFLOAD = 0x05,
  29. H2C_CUSTOMER_STR_REQ = 0x06,
  30. H2C_AP_OFFLOAD = 0x08,
  31. H2C_BCN_RSVDPAGE = 0x09,
  32. H2C_PROBERSP_RSVDPAGE = 0x0A,
  33. H2C_FCS_RSVDPAGE = 0x10,
  34. H2C_FCS_INFO = 0x11,
  35. H2C_AP_WOW_GPIO_CTRL = 0x13,
  36. #ifdef CONFIG_MCC_MODE
  37. H2C_MCC_RQT_TSF = 0x15,
  38. H2C_MCC_MACID_BITMAP = 0x16,
  39. H2C_MCC_LOCATION = 0x10,
  40. H2C_MCC_CTRL_V2 = 0x17,
  41. H2C_MCC_CTRL = 0x18,
  42. H2C_MCC_TIME_SETTING = 0x19,
  43. H2C_MCC_IQK_PARAM = 0x1A,
  44. #endif /* CONFIG_MCC_MODE */
  45. H2C_CHNL_SWITCH_OPER_OFFLOAD = 0x1C,
  46. H2C_SINGLE_CHANNELSWITCH_V2 = 0x1D,
  47. /* PoweSave Class: 001 */
  48. H2C_SET_PWR_MODE = 0x20,
  49. H2C_PS_TUNING_PARA = 0x21,
  50. H2C_PS_TUNING_PARA2 = 0x22,
  51. H2C_P2P_LPS_PARAM = 0x23,
  52. H2C_P2P_PS_OFFLOAD = 0x24,
  53. H2C_PS_SCAN_ENABLE = 0x25,
  54. H2C_SAP_PS_ = 0x26,
  55. H2C_INACTIVE_PS_ = 0x27, /* Inactive_PS */
  56. H2C_FWLPS_IN_IPS_ = 0x28,
  57. #ifdef CONFIG_LPS_POFF
  58. H2C_LPS_POFF_CTRL = 0x29,
  59. H2C_LPS_POFF_PARAM = 0x2A,
  60. #endif
  61. #ifdef CONFIG_LPS_PG
  62. H2C_LPS_PG_INFO = 0x2B,
  63. #endif
  64. #ifdef CONFIG_FW_MULTI_PORT_SUPPORT
  65. H2C_DEFAULT_PORT_ID = 0x2C,
  66. #endif
  67. /* Dynamic Mechanism Class: 010 */
  68. H2C_MACID_CFG = 0x40,
  69. H2C_TXBF = 0x41,
  70. H2C_RSSI_SETTING = 0x42,
  71. H2C_AP_REQ_TXRPT = 0x43,
  72. H2C_INIT_RATE_COLLECT = 0x44,
  73. H2C_IQ_CALIBRATION = 0x45,
  74. H2C_RA_MASK_3SS = 0x46,/* for 8814A */
  75. H2C_RA_PARA_ADJUST = 0x47,/* CONFIG_RA_DBG_CMD */
  76. H2C_DYNAMIC_TX_PATH = 0x48,/* for 8814A */
  77. H2C_FW_TRACE_EN = 0x49,
  78. #ifdef RTW_PER_CMD_SUPPORT_FW
  79. H2C_REQ_PER_RPT = 0x4e,
  80. #endif
  81. /* BT Class: 011 */
  82. H2C_B_TYPE_TDMA = 0x60,
  83. H2C_BT_INFO = 0x61,
  84. H2C_FORCE_BT_TXPWR = 0x62,
  85. H2C_BT_IGNORE_WLANACT = 0x63,
  86. H2C_DAC_SWING_VALUE = 0x64,
  87. H2C_ANT_SEL_RSV = 0x65,
  88. H2C_WL_OPMODE = 0x66,
  89. H2C_BT_MP_OPER = 0x67,
  90. H2C_BT_CONTROL = 0x68,
  91. H2C_BT_WIFI_CTRL = 0x69,
  92. H2C_BT_FW_PATCH = 0x6A,
  93. #if defined(CONFIG_BT_COEXIST) && defined(CONFIG_FW_MULTI_PORT_SUPPORT)
  94. H2C_BTC_WL_PORT_ID = 0x71,
  95. #endif
  96. /* WOWLAN Class: 100 */
  97. H2C_WOWLAN = 0x80,
  98. H2C_REMOTE_WAKE_CTRL = 0x81,
  99. H2C_AOAC_GLOBAL_INFO = 0x82,
  100. H2C_AOAC_RSVD_PAGE = 0x83,
  101. H2C_AOAC_RSVD_PAGE2 = 0x84,
  102. H2C_D0_SCAN_OFFLOAD_CTRL = 0x85,
  103. H2C_D0_SCAN_OFFLOAD_INFO = 0x86,
  104. H2C_CHNL_SWITCH_OFFLOAD = 0x87,
  105. H2C_AOAC_RSVDPAGE3 = 0x88,
  106. H2C_P2P_OFFLOAD_RSVD_PAGE = 0x8A,
  107. H2C_P2P_OFFLOAD = 0x8B,
  108. #ifdef CONFIG_FW_HANDLE_TXBCN
  109. H2C_FW_BCN_OFFLOAD = 0xBA,
  110. #endif
  111. H2C_RESET_TSF = 0xC0,
  112. #ifdef CONFIG_FW_CORRECT_BCN
  113. H2C_BCNHWSEQ = 0xC5,
  114. #endif
  115. H2C_CUSTOMER_STR_W1 = 0xC6,
  116. H2C_CUSTOMER_STR_W2 = 0xC7,
  117. H2C_CUSTOMER_STR_W3 = 0xC8,
  118. #ifdef DBG_FW_DEBUG_MSG_PKT
  119. H2C_FW_DBG_MSG_PKT = 0xE1,
  120. #endif /*DBG_FW_DEBUG_MSG_PKT*/
  121. H2C_MAXID,
  122. };
  123. #define H2C_INACTIVE_PS_LEN 3
  124. #define H2C_RSVDPAGE_LOC_LEN 5
  125. #ifdef CONFIG_FW_MULTI_PORT_SUPPORT
  126. #define H2C_DEFAULT_PORT_ID_LEN 2
  127. #define H2C_MEDIA_STATUS_RPT_LEN 4
  128. #else
  129. #define H2C_MEDIA_STATUS_RPT_LEN 3
  130. #endif
  131. #define H2C_KEEP_ALIVE_CTRL_LEN 2
  132. #define H2C_DISCON_DECISION_LEN 3
  133. #define H2C_AP_OFFLOAD_LEN 3
  134. #define H2C_AP_WOW_GPIO_CTRL_LEN 4
  135. #define H2C_AP_PS_LEN 2
  136. #define H2C_PWRMODE_LEN 7
  137. #define H2C_PSTUNEPARAM_LEN 4
  138. #define H2C_MACID_CFG_LEN 7
  139. #define H2C_BTMP_OPER_LEN 5
  140. #define H2C_WOWLAN_LEN 7
  141. #define H2C_REMOTE_WAKE_CTRL_LEN 3
  142. #define H2C_AOAC_GLOBAL_INFO_LEN 2
  143. #define H2C_AOAC_RSVDPAGE_LOC_LEN 7
  144. #define H2C_SCAN_OFFLOAD_CTRL_LEN 4
  145. #define H2C_BT_FW_PATCH_LEN 6
  146. #define H2C_RSSI_SETTING_LEN 4
  147. #define H2C_AP_REQ_TXRPT_LEN 3
  148. #define H2C_FORCE_BT_TXPWR_LEN 3
  149. #define H2C_BCN_RSVDPAGE_LEN 5
  150. #define H2C_PROBERSP_RSVDPAGE_LEN 5
  151. #define H2C_P2PRSVDPAGE_LOC_LEN 5
  152. #define H2C_P2P_OFFLOAD_LEN 3
  153. #ifdef CONFIG_MCC_MODE
  154. #define H2C_MCC_CTRL_LEN 7
  155. #ifdef CONFIG_MCC_MODE_V2
  156. #define H2C_MCC_LOCATION_LEN 7
  157. #else
  158. #define H2C_MCC_LOCATION_LEN 3
  159. #endif
  160. #define H2C_MCC_MACID_BITMAP_LEN 6
  161. #define H2C_MCC_RQT_TSF_LEN 1
  162. #define H2C_MCC_TIME_SETTING_LEN 6
  163. #define H2C_MCC_IQK_PARAM_LEN 7
  164. #endif /* CONFIG_MCC_MODE */
  165. #ifdef CONFIG_LPS_PG
  166. #define H2C_LPS_PG_INFO_LEN 2
  167. #define H2C_LPSPG_LEN 16
  168. #endif
  169. #ifdef CONFIG_LPS_POFF
  170. #define H2C_LPS_POFF_CTRL_LEN 1
  171. #define H2C_LPS_POFF_PARAM_LEN 5
  172. #endif
  173. #if defined(CONFIG_BT_COEXIST) && defined(CONFIG_FW_MULTI_PORT_SUPPORT)
  174. #define H2C_BTC_WL_PORT_ID_LEN 1
  175. #endif
  176. #ifdef DBG_FW_DEBUG_MSG_PKT
  177. #define H2C_FW_DBG_MSG_PKT_LEN 2
  178. #endif /*DBG_FW_DEBUG_MSG_PKT*/
  179. #define H2C_SINGLE_CHANNELSWITCH_V2_LEN 2
  180. #define eq_mac_addr(a, b) (((a)[0] == (b)[0] && (a)[1] == (b)[1] && (a)[2] == (b)[2] && (a)[3] == (b)[3] && (a)[4] == (b)[4] && (a)[5] == (b)[5]) ? 1 : 0)
  181. #define cp_mac_addr(des, src) ((des)[0] = (src)[0], (des)[1] = (src)[1], (des)[2] = (src)[2], (des)[3] = (src)[3], (des)[4] = (src)[4], (des)[5] = (src)[5])
  182. #define cpIpAddr(des, src) ((des)[0] = (src)[0], (des)[1] = (src)[1], (des)[2] = (src)[2], (des)[3] = (src)[3])
  183. #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
  184. #define FW_WOWLAN_FUN_EN BIT(0)
  185. #define FW_WOWLAN_PATTERN_MATCH BIT(1)
  186. #define FW_WOWLAN_MAGIC_PKT BIT(2)
  187. #define FW_WOWLAN_UNICAST BIT(3)
  188. #define FW_WOWLAN_ALL_PKT_DROP BIT(4)
  189. #define FW_WOWLAN_GPIO_ACTIVE BIT(5)
  190. #define FW_WOWLAN_REKEY_WAKEUP BIT(6)
  191. #define FW_WOWLAN_DEAUTH_WAKEUP BIT(7)
  192. #define FW_WOWLAN_GPIO_WAKEUP_EN BIT(0)
  193. #define FW_FW_PARSE_MAGIC_PKT BIT(1)
  194. #define FW_REMOTE_WAKE_CTRL_EN BIT(0)
  195. #define FW_REALWOWLAN_EN BIT(5)
  196. #define FW_WOWLAN_KEEP_ALIVE_EN BIT(0)
  197. #define FW_ADOPT_USER BIT(1)
  198. #define FW_WOWLAN_KEEP_ALIVE_PKT_TYPE BIT(2)
  199. #define FW_REMOTE_WAKE_CTRL_EN BIT(0)
  200. #define FW_ARP_EN BIT(1)
  201. #define FW_REALWOWLAN_EN BIT(5)
  202. #define FW_WOW_FW_UNICAST_EN BIT(7)
  203. #endif /* CONFIG_WOWLAN */
  204. /* _RSVDPAGE_LOC_CMD_0x00 */
  205. #define SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  206. #define SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  207. #define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  208. #define SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  209. #define SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(__pH2CCmd, __Value)SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
  210. /* _MEDIA_STATUS_RPT_PARM_CMD_0x01 */
  211. #define SET_H2CCMD_MSRRPT_PARM_OPMODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 1, (__Value))
  212. #define SET_H2CCMD_MSRRPT_PARM_MACID_IND(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 1, 1, (__Value))
  213. #define SET_H2CCMD_MSRRPT_PARM_MIRACAST(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 2, 1, (__Value))
  214. #define SET_H2CCMD_MSRRPT_PARM_MIRACAST_SINK(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 3, 1, (__Value))
  215. #define SET_H2CCMD_MSRRPT_PARM_ROLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 4, 4, (__Value))
  216. #define SET_H2CCMD_MSRRPT_PARM_MACID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)) + 1, 0, 8, (__Value))
  217. #define SET_H2CCMD_MSRRPT_PARM_MACID_END(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)) + 2, 0, 8, (__Value))
  218. #define SET_H2CCMD_MSRRPT_PARM_PORT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)) + 3, 0, 3, (__Value))
  219. #define GET_H2CCMD_MSRRPT_PARM_OPMODE(__pH2CCmd) LE_BITS_TO_1BYTE(((u8 *)(__pH2CCmd)), 0, 1)
  220. #define GET_H2CCMD_MSRRPT_PARM_MIRACAST(__pH2CCmd) LE_BITS_TO_1BYTE(((u8 *)(__pH2CCmd)), 2, 1)
  221. #define GET_H2CCMD_MSRRPT_PARM_MIRACAST_SINK(__pH2CCmd) LE_BITS_TO_1BYTE(((u8 *)(__pH2CCmd)), 3, 1)
  222. #define GET_H2CCMD_MSRRPT_PARM_ROLE(__pH2CCmd) LE_BITS_TO_1BYTE(((u8 *)(__pH2CCmd)), 4, 4)
  223. #define H2C_MSR_ROLE_RSVD 0
  224. #define H2C_MSR_ROLE_STA 1
  225. #define H2C_MSR_ROLE_AP 2
  226. #define H2C_MSR_ROLE_GC 3
  227. #define H2C_MSR_ROLE_GO 4
  228. #define H2C_MSR_ROLE_TDLS 5
  229. #define H2C_MSR_ROLE_ADHOC 6
  230. #define H2C_MSR_ROLE_MESH 7
  231. #define H2C_MSR_ROLE_MAX 8
  232. extern const char *const _h2c_msr_role_str[];
  233. #define h2c_msr_role_str(role) (((role) >= H2C_MSR_ROLE_MAX) ? _h2c_msr_role_str[H2C_MSR_ROLE_MAX] : _h2c_msr_role_str[(role)])
  234. #define H2C_MSR_FMT "%s %s%s"
  235. #define H2C_MSR_ARG(h2c_msr) \
  236. GET_H2CCMD_MSRRPT_PARM_OPMODE((h2c_msr)) ? " C" : "", \
  237. h2c_msr_role_str(GET_H2CCMD_MSRRPT_PARM_ROLE((h2c_msr))), \
  238. GET_H2CCMD_MSRRPT_PARM_MIRACAST((h2c_msr)) ? (GET_H2CCMD_MSRRPT_PARM_MIRACAST_SINK((h2c_msr)) ? " MSINK" : " MSRC") : ""
  239. s32 rtw_hal_set_FwMediaStatusRpt_cmd(_adapter *adapter, bool opmode, bool miracast, bool miracast_sink, u8 role, u8 macid, bool macid_ind, u8 macid_end);
  240. s32 rtw_hal_set_FwMediaStatusRpt_single_cmd(_adapter *adapter, bool opmode, bool miracast, bool miracast_sink, u8 role, u8 macid);
  241. s32 rtw_hal_set_FwMediaStatusRpt_range_cmd(_adapter *adapter, bool opmode, bool miracast, bool miracast_sink, u8 role, u8 macid, u8 macid_end);
  242. /* _KEEP_ALIVE_CMD_0x03 */
  243. #define SET_H2CCMD_KEEPALIVE_PARM_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  244. #define SET_H2CCMD_KEEPALIVE_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  245. #define SET_H2CCMD_KEEPALIVE_PARM_PKT_TYPE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
  246. #define SET_H2CCMD_KEEPALIVE_PARM_PORT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 3, __Value)
  247. #define SET_H2CCMD_KEEPALIVE_PARM_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value)
  248. /* _DISCONNECT_DECISION_CMD_0x04 */
  249. #define SET_H2CCMD_DISCONDECISION_PARM_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  250. #define SET_H2CCMD_DISCONDECISION_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  251. #define SET_H2CCMD_DISCONDECISION_PORT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 3, __Value)
  252. #define SET_H2CCMD_DISCONDECISION_PARM_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value)
  253. #define SET_H2CCMD_DISCONDECISION_PARM_TRY_PKT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 8, __Value)
  254. #ifdef CONFIG_RTW_CUSTOMER_STR
  255. #define RTW_CUSTOMER_STR_LEN 16
  256. #define RTW_CUSTOMER_STR_FMT "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x"
  257. #define RTW_CUSTOMER_STR_ARG(x) ((u8 *)(x))[0], ((u8 *)(x))[1], ((u8 *)(x))[2], ((u8 *)(x))[3], ((u8 *)(x))[4], ((u8 *)(x))[5], \
  258. ((u8 *)(x))[6], ((u8 *)(x))[7], ((u8 *)(x))[8], ((u8 *)(x))[9], ((u8 *)(x))[10], ((u8 *)(x))[11], \
  259. ((u8 *)(x))[12], ((u8 *)(x))[13], ((u8 *)(x))[14], ((u8 *)(x))[15]
  260. /* H2C_CUSTOMER_STR_REQ 0x06 */
  261. #define H2C_CUSTOMER_STR_REQ_LEN 1
  262. #define SET_H2CCMD_CUSTOMER_STR_REQ_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 1, (__Value))
  263. s32 rtw_hal_h2c_customer_str_req(_adapter *adapter);
  264. s32 rtw_hal_customer_str_read(_adapter *adapter, u8 *cs);
  265. /* H2C_CUSTOMER_STR_W1 0xC6 */
  266. #define H2C_CUSTOMER_STR_W1_LEN 7
  267. #define SET_H2CCMD_CUSTOMER_STR_W1_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 1, (__Value))
  268. #define H2CCMD_CUSTOMER_STR_W1_BYTE0(__pH2CCmd) (((u8 *)(__pH2CCmd)) + 1)
  269. /* H2C_CUSTOMER_STR_W2 0xC7 */
  270. #define H2C_CUSTOMER_STR_W2_LEN 7
  271. #define SET_H2CCMD_CUSTOMER_STR_W2_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 1, (__Value))
  272. #define H2CCMD_CUSTOMER_STR_W2_BYTE6(__pH2CCmd) (((u8 *)(__pH2CCmd)) + 1)
  273. /* H2C_CUSTOMER_STR_W3 0xC8 */
  274. #define H2C_CUSTOMER_STR_W3_LEN 5
  275. #define SET_H2CCMD_CUSTOMER_STR_W3_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 1, (__Value))
  276. #define H2CCMD_CUSTOMER_STR_W3_BYTE12(__pH2CCmd) (((u8 *)(__pH2CCmd)) + 1)
  277. s32 rtw_hal_h2c_customer_str_write(_adapter *adapter, const u8 *cs);
  278. s32 rtw_hal_customer_str_write(_adapter *adapter, const u8 *cs);
  279. #endif /* CONFIG_RTW_CUSTOMER_STR */
  280. /* _AP_Offload 0x08 */
  281. #define SET_H2CCMD_AP_WOWLAN_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  282. /* _BCN_RsvdPage 0x09 */
  283. #define SET_H2CCMD_AP_WOWLAN_RSVDPAGE_LOC_BCN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  284. /* _Probersp_RsvdPage 0x0a */
  285. #define SET_H2CCMD_AP_WOWLAN_RSVDPAGE_LOC_ProbeRsp(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  286. /* _Probersp_RsvdPage 0x13 */
  287. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_INDEX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value)
  288. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_C2H_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)
  289. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_PLUS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 5, 1, __Value)
  290. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_HIGH_ACTIVE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 6, 1, __Value)
  291. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value)
  292. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  293. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_C2H_DURATION(__pH2CCmd, __Value)SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  294. /* _AP_PS 0x26 */
  295. #define SET_H2CCMD_AP_WOW_PS_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  296. #define SET_H2CCMD_AP_WOW_PS_32K_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  297. #define SET_H2CCMD_AP_WOW_PS_RF(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
  298. #define SET_H2CCMD_AP_WOW_PS_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  299. #ifdef CONFIG_LPS_POFF
  300. /*PARTIAL OFF Control 0x29*/
  301. #define SET_H2CCMD_LPS_POFF_CTRL_EN(__pH2CCmd, __Value) \
  302. SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  303. /*PARTIAL OFF PARAM 0x2A*/
  304. #define SET_H2CCMD_LPS_POFF_PARAM_RDVLD(__pH2CCmd, __Value) \
  305. SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  306. #define SET_H2CCMD_LPS_POFF_PARAM_WRVLD(__pH2CCmd, __Value) \
  307. SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  308. #define SET_H2CCMD_LPS_POFF_PARAM_STARTADDL(__pH2CCmd, __Value) \
  309. SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value)
  310. #define SET_H2CCMD_LPS_POFF_PARAM_STARTADDH(__pH2CCmd, __Value) \
  311. SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 8, __Value)
  312. #define SET_H2CCMD_LPS_POFF_PARAM_ENDADDL(__pH2CCmd, __Value) \
  313. SET_BITS_TO_LE_1BYTE(__pH2CCmd+3, 0, 8, __Value)
  314. #define SET_H2CCMD_LPS_POFF_PARAM_ENDADDH(__pH2CCmd, __Value) \
  315. SET_BITS_TO_LE_1BYTE(__pH2CCmd+4, 0, 8, __Value)
  316. #endif
  317. #ifdef CONFIG_FW_MULTI_PORT_SUPPORT
  318. /* DEFAULT PORT ID 0x2C*/
  319. #define SET_H2CCMD_DFTPID_PORT_ID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 8, (__Value))
  320. #define SET_H2CCMD_DFTPID_MAC_ID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)) + 1, 0, 8, (__Value))
  321. #endif
  322. #ifdef CONFIG_MCC_MODE
  323. /* MCC LOC CMD 0x10 */
  324. #define SET_H2CCMD_MCC_RSVDPAGE_LOC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  325. #define SET_H2CCMD_MCC_PWRIDX_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 3, 0, 1, __Value)
  326. #define SET_H2CCMD_MCC_PWRIDX_OFFLOAD_RFNUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 3, 4, 4, __Value)
  327. #define SET_H2CCMD_MCC_PWRIDX_RSVDPAGE_LOC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 4, 0, 8, __Value)
  328. /* MCC RQT TSF 0x15 */
  329. #define SET_H2CCMD_MCC_RQT_TSFX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value)
  330. #define SET_H2CCMD_MCC_RQT_TSFY(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 4, __Value)
  331. /* MCC MAC ID CMD 0x16 */
  332. #define SET_H2CCMD_MCC_MACID_BITMAP_L(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  333. #define SET_H2CCMD_MCC_MACID_BITMAP_H(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  334. /* NEW MCC CTRL CMD 0x17 */
  335. #define SET_H2CCMD_MCC_CTRL_V2_ORDER(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value)
  336. #define SET_H2CCMD_MCC_CTRL_V2_TOTALNUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 4, __Value)
  337. #define SET_H2CCMD_MCC_CTRL_V2_CENTRAL_CH(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  338. #define SET_H2CCMD_MCC_CTRL_V2_PRIMARY_CH(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 4, __Value)
  339. #define SET_H2CCMD_MCC_CTRL_V2_BW(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 4, 4, __Value)
  340. #define SET_H2CCMD_MCC_CTRL_V2_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  341. #define SET_H2CCMD_MCC_CTRL_V2_ROLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 3, __Value)
  342. #define SET_H2CCMD_MCC_CTRL_V2_INCURCH(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 3, 1, __Value)
  343. #define SET_H2CCMD_MCC_CTRL_V2_DIS_SW_RETRY(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 4, 1, __Value)
  344. #define SET_H2CCMD_MCC_CTRL_V2_DISTXNULL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 5, 1, __Value)
  345. #define SET_H2CCMD_MCC_CTRL_V2_C2HRPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 6, 2, __Value)
  346. #define SET_H2CCMD_MCC_CTRL_V2_TSFX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 4, __Value)
  347. #define SET_H2CCMD_MCC_CTRL_V2_NULL_EARLY(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 4, 4, __Value)
  348. #define SET_H2CCMD_MCC_CTRL_V2_UPDATE_PARM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 7, 1, __Value)
  349. /* MCC CTRL CMD 0x18 */
  350. #define SET_H2CCMD_MCC_CTRL_ORDER(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value)
  351. #define SET_H2CCMD_MCC_CTRL_TOTALNUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 4, __Value)
  352. #define SET_H2CCMD_MCC_CTRL_CHIDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  353. #define SET_H2CCMD_MCC_CTRL_BW(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 2, __Value)
  354. #define SET_H2CCMD_MCC_CTRL_BW40SC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 2, 3, __Value)
  355. #define SET_H2CCMD_MCC_CTRL_BW80SC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 5, 3, __Value)
  356. #define SET_H2CCMD_MCC_CTRL_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  357. #define SET_H2CCMD_MCC_CTRL_ROLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 3, __Value)
  358. #define SET_H2CCMD_MCC_CTRL_INCURCH(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 3, 1, __Value)
  359. #define SET_H2CCMD_MCC_CTRL_RSVD0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 4, 4, __Value)
  360. #define SET_H2CCMD_MCC_CTRL_RSVD1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
  361. #define SET_H2CCMD_MCC_CTRL_RFETYPE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 0, 4, __Value)
  362. #define SET_H2CCMD_MCC_CTRL_DISTXNULL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 4, 1, __Value)
  363. #define SET_H2CCMD_MCC_CTRL_C2HRPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 5, 2, __Value)
  364. #define SET_H2CCMD_MCC_CTRL_CHSCAN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 7, 1, __Value)
  365. /* MCC Time CMD 0x19 */
  366. #define SET_H2CCMD_MCC_TIME_SETTING_FW_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  367. #define SET_H2CCMD_MCC_TIME_SETTING_TSF_SYNC_OFFSET(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 7, __Value)
  368. #define SET_H2CCMD_MCC_TIME_SETTING_START_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  369. #define SET_H2CCMD_MCC_TIME_SETTING_INTERVAL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  370. #define SET_H2CCMD_MCC_TIME_SETTING_EARLY_SWITCH_RPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  371. #define SET_H2CCMD_MCC_TIME_SETTING_ORDER_BASE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 4, __Value)
  372. #define SET_H2CCMD_MCC_TIME_SETTING_ORDER_SYNC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 4, 4, __Value)
  373. #define SET_H2CCMD_MCC_TIME_SETTING_UPDATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 1, __Value)
  374. #define SET_H2CCMD_MCC_TIME_SETTING_ORDER0_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 1, 7, __Value)
  375. /* MCC IQK CMD 0x1A */
  376. #define SET_H2CCMD_MCC_IQK_READY(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  377. #define SET_H2CCMD_MCC_IQK_ORDER(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 4, __Value)
  378. #define SET_H2CCMD_MCC_IQK_PATH(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 5, 2, __Value)
  379. #define SET_H2CCMD_MCC_IQK_RX_L(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  380. #define SET_H2CCMD_MCC_IQK_RX_M1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 2, __Value)
  381. #define SET_H2CCMD_MCC_IQK_RX_M2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 2, 6, __Value)
  382. #define SET_H2CCMD_MCC_IQK_RX_H(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 4, __Value)
  383. #define SET_H2CCMD_MCC_IQK_TX_L(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
  384. #define SET_H2CCMD_MCC_IQK_TX_M1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 3, __Value)
  385. #define SET_H2CCMD_MCC_IQK_TX_M2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 3, 5, __Value)
  386. #define SET_H2CCMD_MCC_IQK_TX_H(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 0, 6, __Value)
  387. #endif /* CONFIG_MCC_MODE */
  388. /* CHNL SWITCH OPER OFFLOAD 0x1C */
  389. #define SET_H2CCMD_CH_SW_OPER_OFFLOAD_CH_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  390. #define SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_MODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 0, 2, __Value)
  391. #define SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_40M_SC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 2, 3, __Value)
  392. #define SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_80M_SC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 5, 3, __Value)
  393. #define SET_H2CCMD_CH_SW_OPER_OFFLOAD_RFE_TYPE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 2, 0, 4, __Value)
  394. /* H2C_SINGLE_CHANNELSWITCH_V2 = 0x1D */
  395. #define SET_H2CCMD_SINGLE_CH_SWITCH_V2_CENTRAL_CH_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  396. #define SET_H2CCMD_SINGLE_CH_SWITCH_V2_PRIMARY_CH_IDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 0, 4, __Value)
  397. #define SET_H2CCMD_SINGLE_CH_SWITCH_V2_BW(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 4, 4, __Value)
  398. #if defined(CONFIG_BT_COEXIST) && defined(CONFIG_FW_MULTI_PORT_SUPPORT)
  399. #define SET_H2CCMD_BTC_WL_PORT_ID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value)
  400. #endif
  401. /* _WoWLAN PARAM_CMD_0x80 */
  402. #define SET_H2CCMD_WOWLAN_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  403. #define SET_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  404. #define SET_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
  405. #define SET_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value)
  406. #define SET_H2CCMD_WOWLAN_ALL_PKT_DROP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)
  407. #define SET_H2CCMD_WOWLAN_GPIO_ACTIVE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 5, 1, __Value)
  408. #define SET_H2CCMD_WOWLAN_REKEY_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 6, 1, __Value)
  409. #define SET_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value)
  410. #define SET_H2CCMD_WOWLAN_GPIONUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 7, __Value)
  411. #define SET_H2CCMD_WOWLAN_DATAPIN_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 7, 1, __Value)
  412. #define SET_H2CCMD_WOWLAN_GPIO_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  413. #define SET_H2CCMD_WOWLAN_GPIO_PULSE_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 1, __Value)
  414. #define SET_H2CCMD_WOWLAN_GPIO_PULSE_COUNT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 1, 7, __Value)
  415. #define SET_H2CCMD_WOWLAN_DISABLE_UPHY(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 1, __Value)
  416. #define SET_H2CCMD_WOWLAN_HST2DEV_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 1, 1, __Value)
  417. #define SET_H2CCMD_WOWLAN_GPIO_DURATION_MS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 2, 1, __Value)
  418. #define SET_H2CCMD_WOWLAN_CHANGE_UNIT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 2, 1, __Value)
  419. #define SET_H2CCMD_WOWLAN_UNIT_FOR_UPHY_DISABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 3, 1, __Value)
  420. #define SET_H2CCMD_WOWLAN_TAKE_PDN_UPHY_DIS_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 4, 1, __Value)
  421. #define SET_H2CCMD_WOWLAN_GPIO_INPUT_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 5, 1, __Value)
  422. #define SET_H2CCMD_WOWLAN_DEV2HST_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 7, 1, __Value)
  423. #define SET_H2CCMD_WOWLAN_TIME_FOR_UPHY_DISABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
  424. #define SET_H2CCMD_WOWLAN_RISE_HST2DEV(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 2, 1, __Value)
  425. /* _REMOTE_WAKEUP_CMD_0x81 */
  426. #define SET_H2CCMD_REMOTE_WAKECTRL_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  427. #define SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  428. #define SET_H2CCMD_REMOTE_WAKE_CTRL_NDP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
  429. #define SET_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value)
  430. #define SET_H2CCMD_REMOTE_WAKE_CTRL_NLO_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)
  431. #define SET_H2CCMD_REMOTE_WAKE_CTRL_FW_UNICAST_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value)
  432. #define SET_H2CCMD_REMOTE_WAKE_CTRL_P2P_OFFLAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 1, __Value)
  433. #define SET_H2CCMD_REMOTE_WAKE_CTRL_NBNS_FILTER_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 2, 1, __Value)
  434. #define SET_H2CCMD_REMOTE_WAKE_CTRL_TKIP_OFFLOAD_EN(__pH2CCmd, __Value) \
  435. SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 3, 1, __Value)
  436. #define SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 1, __Value)
  437. #define SET_H2CCMD_REMOTE_WAKE_CTRL_FW_PARSING_UNTIL_WAKEUP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 4, 1, __Value)
  438. /* AOAC_GLOBAL_INFO_0x82 */
  439. #define SET_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  440. #define SET_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  441. /* AOAC_RSVDPAGE_LOC_0x83 */
  442. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value)
  443. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  444. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_NEIGHBOR_ADV(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  445. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  446. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
  447. #ifdef CONFIG_GTK_OL
  448. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
  449. #endif /* CONFIG_GTK_OL */
  450. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_NDP_INFO(__pH2CCmd, __Value) \
  451. SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 0, 8, __Value)
  452. /* AOAC_RSVDPAGE_2_0x84 */
  453. /* AOAC_RSVDPAGE_3_0x88 */
  454. #ifdef CONFIG_PNO_SUPPORT
  455. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_NLO_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value)
  456. #endif
  457. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_AOAC_REPORT(__pH2CCmd, __Value) \
  458. SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 0, 8, __Value)
  459. #ifdef CONFIG_PNO_SUPPORT
  460. /* D0_Scan_Offload_Info_0x86 */
  461. #define SET_H2CCMD_AOAC_NLO_FUN_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 3, 1, __Value)
  462. #define SET_H2CCMD_AOAC_NLO_IPS_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 4, 1, __Value)
  463. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_PROBE_PACKET(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  464. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_SCAN_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  465. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_SSID_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  466. #endif /* CONFIG_PNO_SUPPORT */
  467. #ifdef CONFIG_P2P_WOWLAN
  468. /* P2P_RsvdPage_0x8a */
  469. #define SET_H2CCMD_RSVDPAGE_LOC_P2P_BCN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  470. #define SET_H2CCMD_RSVDPAGE_LOC_P2P_PROBE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  471. #define SET_H2CCMD_RSVDPAGE_LOC_P2P_NEGO_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  472. #define SET_H2CCMD_RSVDPAGE_LOC_P2P_INVITE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  473. #define SET_H2CCMD_RSVDPAGE_LOC_P2P_PD_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
  474. #endif /* CONFIG_P2P_WOWLAN */
  475. #ifdef CONFIG_LPS_PG
  476. #define SET_H2CCMD_LPSPG_SEC_CAM_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)/*SecurityCAM_En*/
  477. #define SET_H2CCMD_LPSPG_MBID_CAM_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)/*BSSIDCAM_En*/
  478. #define SET_H2CCMD_LPSPG_PMC_CAM_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)/*PatternMatchCAM_En*/
  479. #define SET_H2CCMD_LPSPG_MACID_SEARCH_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value)/*MACIDSearch_En*/
  480. #define SET_H2CCMD_LPSPG_TXSC_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)/*TXSC_En*/
  481. #define SET_H2CCMD_LPSPG_MU_RATE_TB_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 5, 1, __Value)/*MURateTable_En*/
  482. #define SET_H2CCMD_LPSPG_LOC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value)/*Loc_LPS_PG*/
  483. #endif
  484. #ifdef DBG_FW_DEBUG_MSG_PKT
  485. #define SET_H2CCMD_FW_DBG_MSG_PKT_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)/*sniffer_dbg_en*/
  486. #define SET_H2CCMD_RSVDPAGE_LOC_FW_DBG_MSG_PKT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) /*loc_debug_packet*/
  487. #endif /*DBG_FW_DEBUG_MSG_PKT*/
  488. /* ---------------------------------------------------------------------------------------------------------
  489. * ------------------------------------------- Structure --------------------------------------------------
  490. * --------------------------------------------------------------------------------------------------------- */
  491. typedef struct _RSVDPAGE_LOC {
  492. u8 LocProbeRsp;
  493. u8 LocPsPoll;
  494. u8 LocNullData;
  495. u8 LocQosNull;
  496. u8 LocBTQosNull;
  497. #ifdef CONFIG_WOWLAN
  498. u8 LocRemoteCtrlInfo;
  499. u8 LocArpRsp;
  500. u8 LocNbrAdv;
  501. u8 LocGTKRsp;
  502. u8 LocGTKInfo;
  503. u8 LocProbeReq;
  504. u8 LocNetList;
  505. #ifdef CONFIG_GTK_OL
  506. u8 LocGTKEXTMEM;
  507. #endif /* CONFIG_GTK_OL */
  508. u8 LocNDPInfo;
  509. u8 LocAOACReport;
  510. #ifdef CONFIG_PNO_SUPPORT
  511. u8 LocPNOInfo;
  512. u8 LocScanInfo;
  513. u8 LocSSIDInfo;
  514. u8 LocProbePacket;
  515. #endif /* CONFIG_PNO_SUPPORT */
  516. #endif /* CONFIG_WOWLAN */
  517. u8 LocApOffloadBCN;
  518. #ifdef CONFIG_P2P_WOWLAN
  519. u8 LocP2PBeacon;
  520. u8 LocP2PProbeRsp;
  521. u8 LocNegoRsp;
  522. u8 LocInviteRsp;
  523. u8 LocPDRsp;
  524. #endif /* CONFIG_P2P_WOWLAN */
  525. #ifdef DBG_FW_DEBUG_MSG_PKT
  526. u8 loc_fw_dbg_msg_pkt;
  527. #endif /*DBG_FW_DEBUG_MSG_PKT*/
  528. } RSVDPAGE_LOC, *PRSVDPAGE_LOC;
  529. #endif
  530. void dump_TX_FIFO(PADAPTER padapter, u8 page_num, u16 page_size);
  531. u8 rtw_hal_set_fw_media_status_cmd(_adapter *adapter, u8 mstatus, u8 macid);
  532. #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
  533. /* WOW command function */
  534. void rtw_hal_set_fw_wow_related_cmd(_adapter *padapter, u8 enable);
  535. #ifdef CONFIG_P2P_WOWLAN
  536. /* H2C 0x8A */
  537. u8 rtw_hal_set_FwP2PRsvdPage_cmd(_adapter *adapter, PRSVDPAGE_LOC rsvdpageloc);
  538. /* H2C 0x8B */
  539. u8 rtw_hal_set_p2p_wowlan_offload_cmd(_adapter *adapter);
  540. #endif /* CONFIG_P2P_WOWLAN */
  541. #endif
  542. #ifdef RTW_PER_CMD_SUPPORT_FW
  543. u8 rtw_hal_set_req_per_rpt_cmd(_adapter *adapter, u8 group_macid,
  544. u8 rpt_type, u32 macid_bitmap);
  545. #endif