hal_com_h2c.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2012 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. * You should have received a copy of the GNU General Public License along with
  15. * this program; if not, write to the Free Software Foundation, Inc.,
  16. * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
  17. *
  18. *
  19. ******************************************************************************/
  20. #ifndef __COMMON_H2C_H__
  21. #define __COMMON_H2C_H__
  22. /* ---------------------------------------------------------------------------------------------------------
  23. * ---------------------------------- H2C CMD DEFINITION ------------------------------------------------
  24. * ---------------------------------------------------------------------------------------------------------
  25. * 88e, 8723b, 8812, 8821, 92e use the same FW code base */
  26. enum h2c_cmd {
  27. /* Common Class: 000 */
  28. H2C_RSVD_PAGE = 0x00,
  29. H2C_MEDIA_STATUS_RPT = 0x01,
  30. H2C_SCAN_ENABLE = 0x02,
  31. H2C_KEEP_ALIVE = 0x03,
  32. H2C_DISCON_DECISION = 0x04,
  33. H2C_PSD_OFFLOAD = 0x05,
  34. H2C_CUSTOMER_STR_REQ = 0x06,
  35. H2C_AP_OFFLOAD = 0x08,
  36. H2C_BCN_RSVDPAGE = 0x09,
  37. H2C_PROBERSP_RSVDPAGE = 0x0A,
  38. H2C_FCS_RSVDPAGE = 0x10,
  39. H2C_FCS_INFO = 0x11,
  40. H2C_AP_WOW_GPIO_CTRL = 0x13,
  41. #ifdef CONFIG_MCC_MODE
  42. H2C_MCC_UPDATE_PARAM = 0x15,
  43. H2C_MCC_MACID_BITMAP = 0x16,
  44. H2C_MCC_LOCATION = 0x10,
  45. H2C_MCC_CTRL = 0x18,
  46. H2C_MCC_NOA_PARAM = 0x19,
  47. H2C_MCC_IQK_PARAM = 0x1A,
  48. #endif /* CONFIG_MCC_MODE */
  49. H2C_CHNL_SWITCH_OPER_OFFLOAD = 0x1C,
  50. /* PoweSave Class: 001 */
  51. H2C_SET_PWR_MODE = 0x20,
  52. H2C_PS_TUNING_PARA = 0x21,
  53. H2C_PS_TUNING_PARA2 = 0x22,
  54. H2C_P2P_LPS_PARAM = 0x23,
  55. H2C_P2P_PS_OFFLOAD = 0x24,
  56. H2C_PS_SCAN_ENABLE = 0x25,
  57. H2C_SAP_PS_ = 0x26,
  58. H2C_INACTIVE_PS_ = 0x27, /* Inactive_PS */
  59. H2C_FWLPS_IN_IPS_ = 0x28,
  60. #ifdef CONFIG_LPS_POFF
  61. H2C_LPS_POFF_CTRL = 0x29,
  62. H2C_LPS_POFF_PARAM = 0x2A,
  63. #endif
  64. #ifdef CONFIG_LPS_PG
  65. H2C_LPS_PG_INFO = 0x2B,
  66. #endif
  67. #ifdef CONFIG_FW_MULTI_PORT_SUPPORT
  68. H2C_DEFAULT_PORT_ID = 0x2C,
  69. #endif
  70. /* Dynamic Mechanism Class: 010 */
  71. H2C_MACID_CFG = 0x40,
  72. H2C_TXBF = 0x41,
  73. H2C_RSSI_SETTING = 0x42,
  74. H2C_AP_REQ_TXRPT = 0x43,
  75. H2C_INIT_RATE_COLLECT = 0x44,
  76. H2C_IQ_CALIBRATION = 0x45,
  77. H2C_RA_MASK_3SS = 0x46,/* for 8814A */
  78. H2C_RA_PARA_ADJUST = 0x47,/* CONFIG_RA_DBG_CMD */
  79. H2C_DYNAMIC_TX_PATH = 0x48,/* for 8814A */
  80. H2C_FW_TRACE_EN = 0x49,
  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. H2C_RESET_TSF = 0xC0,
  109. H2C_BCNHWSEQ = 0xC5,
  110. H2C_CUSTOMER_STR_W1 = 0xC6,
  111. H2C_CUSTOMER_STR_W2 = 0xC7,
  112. H2C_CUSTOMER_STR_W3 = 0xC8,
  113. H2C_MAXID,
  114. };
  115. #define H2C_INACTIVE_PS_LEN 3
  116. #define H2C_RSVDPAGE_LOC_LEN 5
  117. #ifdef CONFIG_FW_MULTI_PORT_SUPPORT
  118. #define H2C_DEFAULT_PORT_ID_LEN 2
  119. #define H2C_MEDIA_STATUS_RPT_LEN 4
  120. #else
  121. #define H2C_MEDIA_STATUS_RPT_LEN 3
  122. #endif
  123. #define H2C_KEEP_ALIVE_CTRL_LEN 2
  124. #define H2C_DISCON_DECISION_LEN 3
  125. #define H2C_AP_OFFLOAD_LEN 3
  126. #define H2C_AP_WOW_GPIO_CTRL_LEN 4
  127. #define H2C_AP_PS_LEN 2
  128. #define H2C_PWRMODE_LEN 7
  129. #define H2C_PSTUNEPARAM_LEN 4
  130. #define H2C_MACID_CFG_LEN 7
  131. #define H2C_BTMP_OPER_LEN 5
  132. #define H2C_WOWLAN_LEN 5
  133. #define H2C_REMOTE_WAKE_CTRL_LEN 3
  134. #define H2C_AOAC_GLOBAL_INFO_LEN 2
  135. #define H2C_AOAC_RSVDPAGE_LOC_LEN 7
  136. #define H2C_SCAN_OFFLOAD_CTRL_LEN 4
  137. #define H2C_BT_FW_PATCH_LEN 6
  138. #define H2C_RSSI_SETTING_LEN 4
  139. #define H2C_AP_REQ_TXRPT_LEN 3
  140. #define H2C_FORCE_BT_TXPWR_LEN 3
  141. #define H2C_BCN_RSVDPAGE_LEN 5
  142. #define H2C_PROBERSP_RSVDPAGE_LEN 5
  143. #define H2C_P2PRSVDPAGE_LOC_LEN 5
  144. #define H2C_P2P_OFFLOAD_LEN 3
  145. #ifdef CONFIG_MCC_MODE
  146. #define H2C_MCC_CTRL_LEN 7
  147. #define H2C_MCC_LOCATION_LEN 3
  148. #define H2C_MCC_MACID_BITMAP_LEN 6
  149. #define H2C_MCC_UPDATE_INFO_LEN 4
  150. #define H2C_MCC_NOA_PARAM_LEN 4
  151. #define H2C_MCC_IQK_PARAM_LEN 7
  152. #endif /* CONFIG_MCC_MODE */
  153. #ifdef CONFIG_LPS_PG
  154. #define H2C_LPS_PG_INFO_LEN 2
  155. #define H2C_LPSPG_LEN 16
  156. #endif
  157. #ifdef CONFIG_LPS_POFF
  158. #define H2C_LPS_POFF_CTRL_LEN 1
  159. #define H2C_LPS_POFF_PARAM_LEN 5
  160. #endif
  161. #if defined(CONFIG_BT_COEXIST) && defined(CONFIG_FW_MULTI_PORT_SUPPORT)
  162. #define H2C_BTC_WL_PORT_ID_LEN 1
  163. #endif
  164. #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)
  165. #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])
  166. #define cpIpAddr(des, src) ((des)[0] = (src)[0], (des)[1] = (src)[1], (des)[2] = (src)[2], (des)[3] = (src)[3])
  167. #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
  168. /*
  169. * ARP packet
  170. *
  171. * LLC Header */
  172. #define GET_ARP_PKT_LLC_TYPE(__pHeader) ReadLE2Byte(((u8 *)(__pHeader)) + 6)
  173. /* ARP element */
  174. #define GET_ARP_PKT_OPERATION(__pHeader) ReadLE2Byte(((u8 *)(__pHeader)) + 6)
  175. #define GET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cp_mac_addr((u8 *)(_val), ((u8 *)(__pHeader))+8)
  176. #define GET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr((u8 *)(_val), ((u8 *)(__pHeader))+14)
  177. #define GET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cp_mac_addr((u8 *)(_val), ((u8 *)(__pHeader))+18)
  178. #define GET_ARP_PKT_TARGET_IP_ADDR(__pHeader, _val) cpIpAddr((u8 *)(_val), ((u8 *)(__pHeader))+24)
  179. #define SET_ARP_PKT_HW(__pHeader, __Value) WriteLE2Byte(((u8 *)(__pHeader)) + 0, __Value)
  180. #define SET_ARP_PKT_PROTOCOL(__pHeader, __Value) WriteLE2Byte(((u8 *)(__pHeader)) + 2, __Value)
  181. #define SET_ARP_PKT_HW_ADDR_LEN(__pHeader, __Value) WriteLE1Byte(((u8 *)(__pHeader)) + 4, __Value)
  182. #define SET_ARP_PKT_PROTOCOL_ADDR_LEN(__pHeader, __Value) WriteLE1Byte(((u8 *)(__pHeader)) + 5, __Value)
  183. #define SET_ARP_PKT_OPERATION(__pHeader, __Value) WriteLE2Byte(((u8 *)(__pHeader)) + 6, __Value)
  184. #define SET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cp_mac_addr(((u8 *)(__pHeader))+8, (u8 *)(_val))
  185. #define SET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr(((u8 *)(__pHeader))+14, (u8 *)(_val))
  186. #define SET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cp_mac_addr(((u8 *)(__pHeader))+18, (u8 *)(_val))
  187. #define SET_ARP_PKT_TARGET_IP_ADDR(__pHeader, _val) cpIpAddr(((u8 *)(__pHeader))+24, (u8 *)(_val))
  188. #define FW_WOWLAN_FUN_EN BIT(0)
  189. #define FW_WOWLAN_PATTERN_MATCH BIT(1)
  190. #define FW_WOWLAN_MAGIC_PKT BIT(2)
  191. #define FW_WOWLAN_UNICAST BIT(3)
  192. #define FW_WOWLAN_ALL_PKT_DROP BIT(4)
  193. #define FW_WOWLAN_GPIO_ACTIVE BIT(5)
  194. #define FW_WOWLAN_REKEY_WAKEUP BIT(6)
  195. #define FW_WOWLAN_DEAUTH_WAKEUP BIT(7)
  196. #define FW_WOWLAN_GPIO_WAKEUP_EN BIT(0)
  197. #define FW_FW_PARSE_MAGIC_PKT BIT(1)
  198. #define FW_REMOTE_WAKE_CTRL_EN BIT(0)
  199. #define FW_REALWOWLAN_EN BIT(5)
  200. #define FW_WOWLAN_KEEP_ALIVE_EN BIT(0)
  201. #define FW_ADOPT_USER BIT(1)
  202. #define FW_WOWLAN_KEEP_ALIVE_PKT_TYPE BIT(2)
  203. #define FW_REMOTE_WAKE_CTRL_EN BIT(0)
  204. #define FW_ARP_EN BIT(1)
  205. #define FW_REALWOWLAN_EN BIT(5)
  206. #define FW_WOW_FW_UNICAST_EN BIT(7)
  207. #endif /* CONFIG_WOWLAN */
  208. /* _RSVDPAGE_LOC_CMD_0x00 */
  209. #define SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  210. #define SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  211. #define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  212. #define SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  213. #define SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(__pH2CCmd, __Value)SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
  214. /* _MEDIA_STATUS_RPT_PARM_CMD_0x01 */
  215. #define SET_H2CCMD_MSRRPT_PARM_OPMODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 1, (__Value))
  216. #define SET_H2CCMD_MSRRPT_PARM_MACID_IND(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 1, 1, (__Value))
  217. #define SET_H2CCMD_MSRRPT_PARM_MIRACAST(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 2, 1, (__Value))
  218. #define SET_H2CCMD_MSRRPT_PARM_MIRACAST_SINK(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 3, 1, (__Value))
  219. #define SET_H2CCMD_MSRRPT_PARM_ROLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 4, 4, (__Value))
  220. #define SET_H2CCMD_MSRRPT_PARM_MACID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)) + 1, 0, 8, (__Value))
  221. #define SET_H2CCMD_MSRRPT_PARM_MACID_END(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)) + 2, 0, 8, (__Value))
  222. #define SET_H2CCMD_MSRRPT_PARM_PORT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)) + 3, 0, 3, (__Value))
  223. #define GET_H2CCMD_MSRRPT_PARM_OPMODE(__pH2CCmd) LE_BITS_TO_1BYTE(((u8 *)(__pH2CCmd)), 0, 1)
  224. #define GET_H2CCMD_MSRRPT_PARM_MIRACAST(__pH2CCmd) LE_BITS_TO_1BYTE(((u8 *)(__pH2CCmd)), 2, 1)
  225. #define GET_H2CCMD_MSRRPT_PARM_MIRACAST_SINK(__pH2CCmd) LE_BITS_TO_1BYTE(((u8 *)(__pH2CCmd)), 3, 1)
  226. #define GET_H2CCMD_MSRRPT_PARM_ROLE(__pH2CCmd) LE_BITS_TO_1BYTE(((u8 *)(__pH2CCmd)), 4, 4)
  227. #define H2C_MSR_ROLE_RSVD 0
  228. #define H2C_MSR_ROLE_STA 1
  229. #define H2C_MSR_ROLE_AP 2
  230. #define H2C_MSR_ROLE_GC 3
  231. #define H2C_MSR_ROLE_GO 4
  232. #define H2C_MSR_ROLE_TDLS 5
  233. #define H2C_MSR_ROLE_ADHOC 6
  234. #define H2C_MSR_ROLE_MAX 7
  235. extern const char *const _h2c_msr_role_str[];
  236. #define h2c_msr_role_str(role) (((role) >= H2C_MSR_ROLE_MAX) ? _h2c_msr_role_str[H2C_MSR_ROLE_MAX] : _h2c_msr_role_str[(role)])
  237. #define H2C_MSR_FMT "%s %s%s"
  238. #define H2C_MSR_ARG(h2c_msr) \
  239. GET_H2CCMD_MSRRPT_PARM_OPMODE((h2c_msr)) ? " C" : "", \
  240. h2c_msr_role_str(GET_H2CCMD_MSRRPT_PARM_ROLE((h2c_msr))), \
  241. GET_H2CCMD_MSRRPT_PARM_MIRACAST((h2c_msr)) ? (GET_H2CCMD_MSRRPT_PARM_MIRACAST_SINK((h2c_msr)) ? " MSINK" : " MSRC") : ""
  242. 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);
  243. s32 rtw_hal_set_FwMediaStatusRpt_single_cmd(_adapter *adapter, bool opmode, bool miracast, bool miracast_sink, u8 role, u8 macid);
  244. s32 rtw_hal_set_FwMediaStatusRpt_range_cmd(_adapter *adapter, bool opmode, bool miracast, bool miracast_sink, u8 role, u8 macid, u8 macid_end);
  245. /* _KEEP_ALIVE_CMD_0x03 */
  246. #define SET_H2CCMD_KEEPALIVE_PARM_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  247. #define SET_H2CCMD_KEEPALIVE_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  248. #define SET_H2CCMD_KEEPALIVE_PARM_PKT_TYPE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
  249. #define SET_H2CCMD_KEEPALIVE_PARM_PORT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 3, __Value)
  250. #define SET_H2CCMD_KEEPALIVE_PARM_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value)
  251. /* _DISCONNECT_DECISION_CMD_0x04 */
  252. #define SET_H2CCMD_DISCONDECISION_PARM_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  253. #define SET_H2CCMD_DISCONDECISION_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  254. #define SET_H2CCMD_DISCONDECISION_PORT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 3, __Value)
  255. #define SET_H2CCMD_DISCONDECISION_PARM_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value)
  256. #define SET_H2CCMD_DISCONDECISION_PARM_TRY_PKT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 8, __Value)
  257. #ifdef CONFIG_RTW_CUSTOMER_STR
  258. #define RTW_CUSTOMER_STR_LEN 16
  259. #define RTW_CUSTOMER_STR_FMT "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x"
  260. #define RTW_CUSTOMER_STR_ARG(x) ((u8 *)(x))[0], ((u8 *)(x))[1], ((u8 *)(x))[2], ((u8 *)(x))[3], ((u8 *)(x))[4], ((u8 *)(x))[5], \
  261. ((u8 *)(x))[6], ((u8 *)(x))[7], ((u8 *)(x))[8], ((u8 *)(x))[9], ((u8 *)(x))[10], ((u8 *)(x))[11], \
  262. ((u8 *)(x))[12], ((u8 *)(x))[13], ((u8 *)(x))[14], ((u8 *)(x))[15]
  263. /* H2C_CUSTOMER_STR_REQ 0x06 */
  264. #define H2C_CUSTOMER_STR_REQ_LEN 1
  265. #define SET_H2CCMD_CUSTOMER_STR_REQ_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 1, (__Value))
  266. s32 rtw_hal_h2c_customer_str_req(_adapter *adapter);
  267. s32 rtw_hal_customer_str_read(_adapter *adapter, u8 *cs);
  268. /* H2C_CUSTOMER_STR_W1 0xC6 */
  269. #define H2C_CUSTOMER_STR_W1_LEN 7
  270. #define SET_H2CCMD_CUSTOMER_STR_W1_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 1, (__Value))
  271. #define H2CCMD_CUSTOMER_STR_W1_BYTE0(__pH2CCmd) (((u8 *)(__pH2CCmd)) + 1)
  272. /* H2C_CUSTOMER_STR_W2 0xC7 */
  273. #define H2C_CUSTOMER_STR_W2_LEN 7
  274. #define SET_H2CCMD_CUSTOMER_STR_W2_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 1, (__Value))
  275. #define H2CCMD_CUSTOMER_STR_W2_BYTE6(__pH2CCmd) (((u8 *)(__pH2CCmd)) + 1)
  276. /* H2C_CUSTOMER_STR_W3 0xC8 */
  277. #define H2C_CUSTOMER_STR_W3_LEN 5
  278. #define SET_H2CCMD_CUSTOMER_STR_W3_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 1, (__Value))
  279. #define H2CCMD_CUSTOMER_STR_W3_BYTE12(__pH2CCmd) (((u8 *)(__pH2CCmd)) + 1)
  280. s32 rtw_hal_h2c_customer_str_write(_adapter *adapter, const u8 *cs);
  281. s32 rtw_hal_customer_str_write(_adapter *adapter, const u8 *cs);
  282. #endif /* CONFIG_RTW_CUSTOMER_STR */
  283. /* _AP_Offload 0x08 */
  284. #define SET_H2CCMD_AP_WOWLAN_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  285. /* _BCN_RsvdPage 0x09 */
  286. #define SET_H2CCMD_AP_WOWLAN_RSVDPAGE_LOC_BCN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  287. /* _Probersp_RsvdPage 0x0a */
  288. #define SET_H2CCMD_AP_WOWLAN_RSVDPAGE_LOC_ProbeRsp(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  289. /* _Probersp_RsvdPage 0x13 */
  290. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_INDEX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value)
  291. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_C2H_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)
  292. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_PLUS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 5, 1, __Value)
  293. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_HIGH_ACTIVE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 6, 1, __Value)
  294. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value)
  295. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  296. #define SET_H2CCMD_AP_WOW_GPIO_CTRL_C2H_DURATION(__pH2CCmd, __Value)SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  297. /* _AP_PS 0x26 */
  298. #define SET_H2CCMD_AP_WOW_PS_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  299. #define SET_H2CCMD_AP_WOW_PS_32K_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  300. #define SET_H2CCMD_AP_WOW_PS_RF(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
  301. #define SET_H2CCMD_AP_WOW_PS_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  302. #ifdef CONFIG_LPS_POFF
  303. /*PARTIAL OFF Control 0x29*/
  304. #define SET_H2CCMD_LPS_POFF_CTRL_EN(__pH2CCmd, __Value) \
  305. SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  306. /*PARTIAL OFF PARAM 0x2A*/
  307. #define SET_H2CCMD_LPS_POFF_PARAM_RDVLD(__pH2CCmd, __Value) \
  308. SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  309. #define SET_H2CCMD_LPS_POFF_PARAM_WRVLD(__pH2CCmd, __Value) \
  310. SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  311. #define SET_H2CCMD_LPS_POFF_PARAM_STARTADDL(__pH2CCmd, __Value) \
  312. SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value)
  313. #define SET_H2CCMD_LPS_POFF_PARAM_STARTADDH(__pH2CCmd, __Value) \
  314. SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 8, __Value)
  315. #define SET_H2CCMD_LPS_POFF_PARAM_ENDADDL(__pH2CCmd, __Value) \
  316. SET_BITS_TO_LE_1BYTE(__pH2CCmd+3, 0, 8, __Value)
  317. #define SET_H2CCMD_LPS_POFF_PARAM_ENDADDH(__pH2CCmd, __Value) \
  318. SET_BITS_TO_LE_1BYTE(__pH2CCmd+4, 0, 8, __Value)
  319. #endif
  320. #ifdef CONFIG_FW_MULTI_PORT_SUPPORT
  321. /* DEFAULT PORT ID 0x2C*/
  322. #define SET_H2CCMD_DFTPID_PORT_ID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)), 0, 8, (__Value))
  323. #define SET_H2CCMD_DFTPID_MAC_ID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(((u8 *)(__pH2CCmd)) + 1, 0, 8, (__Value))
  324. #endif
  325. #ifdef CONFIG_MCC_MODE
  326. /* MCC LOC CMD 0x10 */
  327. #define SET_H2CCMD_MCC_RSVDPAGE_LOC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  328. /* MCC MAC ID CMD 0x16 */
  329. #define SET_H2CCMD_MCC_MACID_BITMAP_L(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  330. #define SET_H2CCMD_MCC_MACID_BITMAP_H(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  331. /* MCC INFO CMD 0x18 */
  332. #define SET_H2CCMD_MCC_CTRL_ORDER(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value)
  333. #define SET_H2CCMD_MCC_CTRL_TOTALNUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 4, __Value)
  334. #define SET_H2CCMD_MCC_CTRL_CHIDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  335. #define SET_H2CCMD_MCC_CTRL_BW(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 2, __Value)
  336. #define SET_H2CCMD_MCC_CTRL_BW40SC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 2, 3, __Value)
  337. #define SET_H2CCMD_MCC_CTRL_BW80SC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 5, 3, __Value)
  338. #define SET_H2CCMD_MCC_CTRL_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  339. #define SET_H2CCMD_MCC_CTRL_ROLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 3, __Value)
  340. #define SET_H2CCMD_MCC_CTRL_INCURCH(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 3, 1, __Value)
  341. #define SET_H2CCMD_MCC_CTRL_RSVD0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 4, 4, __Value)
  342. #define SET_H2CCMD_MCC_CTRL_RSVD1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
  343. #define SET_H2CCMD_MCC_CTRL_RFETYPE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 0, 4, __Value)
  344. #define SET_H2CCMD_MCC_CTRL_DISTXNULL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 4, 1, __Value)
  345. #define SET_H2CCMD_MCC_CTRL_C2HRPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 5, 2, __Value)
  346. #define SET_H2CCMD_MCC_CTRL_CHSCAN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 7, 1, __Value)
  347. /* MCC NoA CMD 0x19 */
  348. #define SET_H2CCMD_MCC_NOA_FW_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  349. #define SET_H2CCMD_MCC_NOA_TSF_SYNC_OFFSET(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 7, __Value)
  350. #define SET_H2CCMD_MCC_NOA_START_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  351. #define SET_H2CCMD_MCC_NOA_INTERVAL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  352. #define SET_H2CCMD_MCC_EARLY_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  353. /* MCC IQK CMD 0x1A */
  354. #define SET_H2CCMD_MCC_IQK_READY(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  355. #define SET_H2CCMD_MCC_IQK_ORDER(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 4, __Value)
  356. #define SET_H2CCMD_MCC_IQK_PATH(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 5, 2, __Value)
  357. #define SET_H2CCMD_MCC_IQK_RX_L(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  358. #define SET_H2CCMD_MCC_IQK_RX_M1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 2, __Value)
  359. #define SET_H2CCMD_MCC_IQK_RX_M2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 2, 6, __Value)
  360. #define SET_H2CCMD_MCC_IQK_RX_H(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 4, __Value)
  361. #define SET_H2CCMD_MCC_IQK_TX_L(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
  362. #define SET_H2CCMD_MCC_IQK_TX_M1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 3, __Value)
  363. #define SET_H2CCMD_MCC_IQK_TX_M2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 3, 5, __Value)
  364. #define SET_H2CCMD_MCC_IQK_TX_H(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 0, 6, __Value)
  365. #endif /* CONFIG_MCC_MODE */
  366. /* CHNL SWITCH OPER OFFLOAD 0x1C */
  367. #define SET_H2CCMD_CH_SW_OPER_OFFLOAD_CH_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  368. #define SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_MODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 0, 2, __Value)
  369. #define SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_40M_SC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 2, 3, __Value)
  370. #define SET_H2CCMD_CH_SW_OPER_OFFLOAD_BW_80M_SC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 5, 3, __Value)
  371. #define SET_H2CCMD_CH_SW_OPER_OFFLOAD_RFE_TYPE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 2, 0, 4, __Value)
  372. #if defined(CONFIG_BT_COEXIST) && defined(CONFIG_FW_MULTI_PORT_SUPPORT)
  373. #define SET_H2CCMD_BTC_WL_PORT_ID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value)
  374. #endif
  375. /* _WoWLAN PARAM_CMD_0x80 */
  376. #define SET_H2CCMD_WOWLAN_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  377. #define SET_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  378. #define SET_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
  379. #define SET_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value)
  380. #define SET_H2CCMD_WOWLAN_ALL_PKT_DROP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)
  381. #define SET_H2CCMD_WOWLAN_GPIO_ACTIVE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 5, 1, __Value)
  382. #define SET_H2CCMD_WOWLAN_REKEY_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 6, 1, __Value)
  383. #define SET_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value)
  384. #define SET_H2CCMD_WOWLAN_GPIONUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 7, __Value)
  385. #define SET_H2CCMD_WOWLAN_DATAPIN_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 7, 1, __Value)
  386. #define SET_H2CCMD_WOWLAN_GPIO_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  387. #define SET_H2CCMD_WOWLAN_GPIO_PULSE_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 1, __Value)
  388. #define SET_H2CCMD_WOWLAN_GPIO_PULSE_COUNT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 1, 7, __Value)
  389. #define SET_H2CCMD_WOWLAN_DISABLE_UPHY(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 1, __Value)
  390. #define SET_H2CCMD_WOWLAN_HST2DEV_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 1, 1, __Value)
  391. #define SET_H2CCMD_WOWLAN_GPIO_DURATION_MS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 2, 1, __Value)
  392. #define SET_H2CCMD_WOWLAN_CHANGE_UNIT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 2, 1, __Value)
  393. #define SET_H2CCMD_WOWLAN_UNIT_FOR_UPHY_DISABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 3, 1, __Value)
  394. #define SET_H2CCMD_WOWLAN_TAKE_PDN_UPHY_DIS_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 4, 1, __Value)
  395. #define SET_H2CCMD_WOWLAN_GPIO_INPUT_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 5, 1, __Value)
  396. /* _REMOTE_WAKEUP_CMD_0x81 */
  397. #define SET_H2CCMD_REMOTE_WAKECTRL_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
  398. #define SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
  399. #define SET_H2CCMD_REMOTE_WAKE_CTRL_NDP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
  400. #define SET_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value)
  401. #define SET_H2CCMD_REMOTE_WAKE_CTRL_NLO_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)
  402. #define SET_H2CCMD_REMOTE_WAKE_CTRL_FW_UNICAST_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value)
  403. #define SET_H2CCMD_REMOTE_WAKE_CTRL_P2P_OFFLAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 1, __Value)
  404. #define SET_H2CCMD_REMOTE_WAKE_CTRL_NBNS_FILTER_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 2, 1, __Value)
  405. #define SET_H2CCMD_REMOTE_WAKE_CTRL_TKIP_OFFLOAD_EN(__pH2CCmd, __Value) \
  406. SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 3, 1, __Value)
  407. #define SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_ACTION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 1, __Value)
  408. #define SET_H2CCMD_REMOTE_WAKE_CTRL_FW_PARSING_UNTIL_WAKEUP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 4, 1, __Value)
  409. /* AOAC_GLOBAL_INFO_0x82 */
  410. #define SET_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  411. #define SET_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  412. /* AOAC_RSVDPAGE_LOC_0x83 */
  413. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value)
  414. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  415. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_NEIGHBOR_ADV(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  416. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  417. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
  418. #ifdef CONFIG_GTK_OL
  419. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
  420. #endif /* CONFIG_GTK_OL */
  421. /* AOAC_RSVDPAGE_2_0x84 */
  422. /* AOAC_RSVDPAGE_3_0x88 */
  423. #ifdef CONFIG_PNO_SUPPORT
  424. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_NLO_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value)
  425. #endif
  426. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_AOAC_REPORT(__pH2CCmd, __Value) \
  427. SET_BITS_TO_LE_1BYTE((__pH2CCmd) + 1, 0, 8, __Value)
  428. #ifdef CONFIG_PNO_SUPPORT
  429. /* D0_Scan_Offload_Info_0x86 */
  430. #define SET_H2CCMD_AOAC_NLO_FUN_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 3, 1, __Value)
  431. #define SET_H2CCMD_AOAC_NLO_IPS_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 4, 1, __Value)
  432. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_PROBE_PACKET(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  433. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_SCAN_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  434. #define SET_H2CCMD_AOAC_RSVDPAGE_LOC_SSID_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  435. #endif /* CONFIG_PNO_SUPPORT */
  436. #ifdef CONFIG_P2P_WOWLAN
  437. /* P2P_RsvdPage_0x8a */
  438. #define SET_H2CCMD_RSVDPAGE_LOC_P2P_BCN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
  439. #define SET_H2CCMD_RSVDPAGE_LOC_P2P_PROBE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
  440. #define SET_H2CCMD_RSVDPAGE_LOC_P2P_NEGO_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
  441. #define SET_H2CCMD_RSVDPAGE_LOC_P2P_INVITE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
  442. #define SET_H2CCMD_RSVDPAGE_LOC_P2P_PD_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
  443. #endif /* CONFIG_P2P_WOWLAN */
  444. #ifdef CONFIG_LPS_PG
  445. #define SET_H2CCMD_LPSPG_SEC_CAM_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)/*SecurityCAM_En*/
  446. #define SET_H2CCMD_LPSPG_MBID_CAM_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)/*BSSIDCAM_En*/
  447. #define SET_H2CCMD_LPSPG_PMC_CAM_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)/*PatternMatchCAM_En*/
  448. #define SET_H2CCMD_LPSPG_MACID_SEARCH_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value)/*MACIDSearch_En*/
  449. #define SET_H2CCMD_LPSPG_TXSC_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value)/*TXSC_En*/
  450. #define SET_H2CCMD_LPSPG_MU_RATE_TB_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 5, 1, __Value)/*MURateTable_En*/
  451. #define SET_H2CCMD_LPSPG_LOC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value)/*Loc_LPS_PG*/
  452. #endif
  453. /* ---------------------------------------------------------------------------------------------------------
  454. * ------------------------------------------- Structure --------------------------------------------------
  455. * --------------------------------------------------------------------------------------------------------- */
  456. typedef struct _RSVDPAGE_LOC {
  457. u8 LocProbeRsp;
  458. u8 LocPsPoll;
  459. u8 LocNullData;
  460. u8 LocQosNull;
  461. u8 LocBTQosNull;
  462. #ifdef CONFIG_WOWLAN
  463. u8 LocRemoteCtrlInfo;
  464. u8 LocArpRsp;
  465. u8 LocNbrAdv;
  466. u8 LocGTKRsp;
  467. u8 LocGTKInfo;
  468. u8 LocProbeReq;
  469. u8 LocNetList;
  470. #ifdef CONFIG_GTK_OL
  471. u8 LocGTKEXTMEM;
  472. #endif /* CONFIG_GTK_OL */
  473. u8 LocAOACReport;
  474. #ifdef CONFIG_PNO_SUPPORT
  475. u8 LocPNOInfo;
  476. u8 LocScanInfo;
  477. u8 LocSSIDInfo;
  478. u8 LocProbePacket;
  479. #endif /* CONFIG_PNO_SUPPORT */
  480. #endif /* CONFIG_WOWLAN */
  481. u8 LocApOffloadBCN;
  482. #ifdef CONFIG_P2P_WOWLAN
  483. u8 LocP2PBeacon;
  484. u8 LocP2PProbeRsp;
  485. u8 LocNegoRsp;
  486. u8 LocInviteRsp;
  487. u8 LocPDRsp;
  488. #endif /* CONFIG_P2P_WOWLAN */
  489. } RSVDPAGE_LOC, *PRSVDPAGE_LOC;
  490. #endif
  491. void dump_TX_FIFO(PADAPTER padapter, u8 page_num, u16 page_size);
  492. u8 rtw_hal_set_fw_media_status_cmd(_adapter *adapter, u8 mstatus, u8 macid);
  493. #if defined(CONFIG_WOWLAN) || defined(CONFIG_AP_WOWLAN)
  494. /* WOW command function */
  495. void rtw_hal_set_fw_wow_related_cmd(_adapter *padapter, u8 enable);
  496. #ifdef CONFIG_P2P_WOWLAN
  497. /* H2C 0x8A */
  498. u8 rtw_hal_set_FwP2PRsvdPage_cmd(_adapter *adapter, PRSVDPAGE_LOC rsvdpageloc);
  499. /* H2C 0x8B */
  500. u8 rtw_hal_set_p2p_wowlan_offload_cmd(_adapter *adapter);
  501. #endif /* CONFIG_P2P_WOWLAN */
  502. #endif