hif_api_mib.h 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. /* SPDX-License-Identifier: Apache-2.0 */
  2. /*
  3. * WFx hardware interface definitions
  4. *
  5. * Copyright (c) 2018-2020, Silicon Laboratories Inc.
  6. */
  7. #ifndef WFX_HIF_API_MIB_H
  8. #define WFX_HIF_API_MIB_H
  9. #include "hif_api_general.h"
  10. #define HIF_API_IPV4_ADDRESS_SIZE 4
  11. #define HIF_API_IPV6_ADDRESS_SIZE 16
  12. enum hif_mib_ids {
  13. HIF_MIB_ID_GL_OPERATIONAL_POWER_MODE = 0x2000,
  14. HIF_MIB_ID_GL_BLOCK_ACK_INFO = 0x2001,
  15. HIF_MIB_ID_GL_SET_MULTI_MSG = 0x2002,
  16. HIF_MIB_ID_CCA_CONFIG = 0x2003,
  17. HIF_MIB_ID_ETHERTYPE_DATAFRAME_CONDITION = 0x2010,
  18. HIF_MIB_ID_PORT_DATAFRAME_CONDITION = 0x2011,
  19. HIF_MIB_ID_MAGIC_DATAFRAME_CONDITION = 0x2012,
  20. HIF_MIB_ID_MAC_ADDR_DATAFRAME_CONDITION = 0x2013,
  21. HIF_MIB_ID_IPV4_ADDR_DATAFRAME_CONDITION = 0x2014,
  22. HIF_MIB_ID_IPV6_ADDR_DATAFRAME_CONDITION = 0x2015,
  23. HIF_MIB_ID_UC_MC_BC_DATAFRAME_CONDITION = 0x2016,
  24. HIF_MIB_ID_CONFIG_DATA_FILTER = 0x2017,
  25. HIF_MIB_ID_SET_DATA_FILTERING = 0x2018,
  26. HIF_MIB_ID_ARP_IP_ADDRESSES_TABLE = 0x2019,
  27. HIF_MIB_ID_NS_IP_ADDRESSES_TABLE = 0x201A,
  28. HIF_MIB_ID_RX_FILTER = 0x201B,
  29. HIF_MIB_ID_BEACON_FILTER_TABLE = 0x201C,
  30. HIF_MIB_ID_BEACON_FILTER_ENABLE = 0x201D,
  31. HIF_MIB_ID_GRP_SEQ_COUNTER = 0x2030,
  32. HIF_MIB_ID_TSF_COUNTER = 0x2031,
  33. HIF_MIB_ID_STATISTICS_TABLE = 0x2032,
  34. HIF_MIB_ID_COUNTERS_TABLE = 0x2033,
  35. HIF_MIB_ID_MAX_TX_POWER_LEVEL = 0x2034,
  36. HIF_MIB_ID_EXTENDED_COUNTERS_TABLE = 0x2035,
  37. HIF_MIB_ID_DOT11_MAC_ADDRESS = 0x2040,
  38. HIF_MIB_ID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME = 0x2041,
  39. HIF_MIB_ID_DOT11_MAX_RECEIVE_LIFETIME = 0x2042,
  40. HIF_MIB_ID_DOT11_WEP_DEFAULT_KEY_ID = 0x2043,
  41. HIF_MIB_ID_DOT11_RTS_THRESHOLD = 0x2044,
  42. HIF_MIB_ID_SLOT_TIME = 0x2045,
  43. HIF_MIB_ID_CURRENT_TX_POWER_LEVEL = 0x2046,
  44. HIF_MIB_ID_NON_ERP_PROTECTION = 0x2047,
  45. HIF_MIB_ID_TEMPLATE_FRAME = 0x2048,
  46. HIF_MIB_ID_BEACON_WAKEUP_PERIOD = 0x2049,
  47. HIF_MIB_ID_RCPI_RSSI_THRESHOLD = 0x204A,
  48. HIF_MIB_ID_BLOCK_ACK_POLICY = 0x204B,
  49. HIF_MIB_ID_OVERRIDE_INTERNAL_TX_RATE = 0x204C,
  50. HIF_MIB_ID_SET_ASSOCIATION_MODE = 0x204D,
  51. HIF_MIB_ID_SET_UAPSD_INFORMATION = 0x204E,
  52. HIF_MIB_ID_SET_TX_RATE_RETRY_POLICY = 0x204F,
  53. HIF_MIB_ID_PROTECTED_MGMT_POLICY = 0x2050,
  54. HIF_MIB_ID_SET_HT_PROTECTION = 0x2051,
  55. HIF_MIB_ID_KEEP_ALIVE_PERIOD = 0x2052,
  56. HIF_MIB_ID_ARP_KEEP_ALIVE_PERIOD = 0x2053,
  57. HIF_MIB_ID_INACTIVITY_TIMER = 0x2054,
  58. HIF_MIB_ID_INTERFACE_PROTECTION = 0x2055,
  59. HIF_MIB_ID_BEACON_STATS = 0x2056,
  60. };
  61. enum hif_op_power_mode {
  62. HIF_OP_POWER_MODE_ACTIVE = 0x0,
  63. HIF_OP_POWER_MODE_DOZE = 0x1,
  64. HIF_OP_POWER_MODE_QUIESCENT = 0x2
  65. };
  66. struct hif_mib_gl_operational_power_mode {
  67. u8 power_mode:4;
  68. u8 reserved1:3;
  69. u8 wup_ind_activation:1;
  70. u8 reserved2[3];
  71. } __packed;
  72. struct hif_mib_gl_set_multi_msg {
  73. u8 enable_multi_tx_conf:1;
  74. u8 reserved1:7;
  75. u8 reserved2[3];
  76. } __packed;
  77. enum hif_arp_ns_frame_treatment {
  78. HIF_ARP_NS_FILTERING_DISABLE = 0x0,
  79. HIF_ARP_NS_FILTERING_ENABLE = 0x1,
  80. HIF_ARP_NS_REPLY_ENABLE = 0x2
  81. };
  82. struct hif_mib_arp_ip_addr_table {
  83. u8 condition_idx;
  84. u8 arp_enable;
  85. u8 reserved[2];
  86. u8 ipv4_address[HIF_API_IPV4_ADDRESS_SIZE];
  87. } __packed;
  88. struct hif_mib_rx_filter {
  89. u8 reserved1:1;
  90. u8 bssid_filter:1;
  91. u8 reserved2:1;
  92. u8 fwd_probe_req:1;
  93. u8 keep_alive_filter:1;
  94. u8 reserved3:3;
  95. u8 reserved4[3];
  96. } __packed;
  97. struct hif_ie_table_entry {
  98. u8 ie_id;
  99. u8 has_changed:1;
  100. u8 no_longer:1;
  101. u8 has_appeared:1;
  102. u8 reserved:1;
  103. u8 num_match_data:4;
  104. u8 oui[3];
  105. u8 match_data[3];
  106. } __packed;
  107. struct hif_mib_bcn_filter_table {
  108. __le32 num_of_info_elmts;
  109. struct hif_ie_table_entry ie_table[];
  110. } __packed;
  111. enum hif_beacon_filter {
  112. HIF_BEACON_FILTER_DISABLE = 0x0,
  113. HIF_BEACON_FILTER_ENABLE = 0x1,
  114. HIF_BEACON_FILTER_AUTO_ERP = 0x2
  115. };
  116. struct hif_mib_bcn_filter_enable {
  117. __le32 enable;
  118. __le32 bcn_count;
  119. } __packed;
  120. struct hif_mib_extended_count_table {
  121. __le32 count_plcp_errors;
  122. __le32 count_fcs_errors;
  123. __le32 count_tx_packets;
  124. __le32 count_rx_packets;
  125. __le32 count_rx_packet_errors;
  126. __le32 count_rx_decryption_failures;
  127. __le32 count_rx_mic_failures;
  128. __le32 count_rx_no_key_failures;
  129. __le32 count_tx_multicast_frames;
  130. __le32 count_tx_frames_success;
  131. __le32 count_tx_frame_failures;
  132. __le32 count_tx_frames_retried;
  133. __le32 count_tx_frames_multi_retried;
  134. __le32 count_rx_frame_duplicates;
  135. __le32 count_rts_success;
  136. __le32 count_rts_failures;
  137. __le32 count_ack_failures;
  138. __le32 count_rx_multicast_frames;
  139. __le32 count_rx_frames_success;
  140. __le32 count_rx_cmacicv_errors;
  141. __le32 count_rx_cmac_replays;
  142. __le32 count_rx_mgmt_ccmp_replays;
  143. __le32 count_rx_bipmic_errors;
  144. __le32 count_rx_beacon;
  145. __le32 count_miss_beacon;
  146. __le32 reserved[15];
  147. } __packed;
  148. struct hif_mib_count_table {
  149. __le32 count_plcp_errors;
  150. __le32 count_fcs_errors;
  151. __le32 count_tx_packets;
  152. __le32 count_rx_packets;
  153. __le32 count_rx_packet_errors;
  154. __le32 count_rx_decryption_failures;
  155. __le32 count_rx_mic_failures;
  156. __le32 count_rx_no_key_failures;
  157. __le32 count_tx_multicast_frames;
  158. __le32 count_tx_frames_success;
  159. __le32 count_tx_frame_failures;
  160. __le32 count_tx_frames_retried;
  161. __le32 count_tx_frames_multi_retried;
  162. __le32 count_rx_frame_duplicates;
  163. __le32 count_rts_success;
  164. __le32 count_rts_failures;
  165. __le32 count_ack_failures;
  166. __le32 count_rx_multicast_frames;
  167. __le32 count_rx_frames_success;
  168. __le32 count_rx_cmacicv_errors;
  169. __le32 count_rx_cmac_replays;
  170. __le32 count_rx_mgmt_ccmp_replays;
  171. __le32 count_rx_bipmic_errors;
  172. } __packed;
  173. struct hif_mib_mac_address {
  174. u8 mac_addr[ETH_ALEN];
  175. __le16 reserved;
  176. } __packed;
  177. struct hif_mib_wep_default_key_id {
  178. u8 wep_default_key_id;
  179. u8 reserved[3];
  180. } __packed;
  181. struct hif_mib_dot11_rts_threshold {
  182. __le32 threshold;
  183. } __packed;
  184. struct hif_mib_slot_time {
  185. __le32 slot_time;
  186. } __packed;
  187. struct hif_mib_current_tx_power_level {
  188. __le32 power_level; // signed value
  189. } __packed;
  190. struct hif_mib_non_erp_protection {
  191. u8 use_cts_to_self:1;
  192. u8 reserved1:7;
  193. u8 reserved2[3];
  194. } __packed;
  195. enum hif_tmplt {
  196. HIF_TMPLT_PRBREQ = 0x0,
  197. HIF_TMPLT_BCN = 0x1,
  198. HIF_TMPLT_NULL = 0x2,
  199. HIF_TMPLT_QOSNUL = 0x3,
  200. HIF_TMPLT_PSPOLL = 0x4,
  201. HIF_TMPLT_PRBRES = 0x5,
  202. HIF_TMPLT_ARP = 0x6,
  203. HIF_TMPLT_NA = 0x7
  204. };
  205. #define HIF_API_MAX_TEMPLATE_FRAME_SIZE 700
  206. struct hif_mib_template_frame {
  207. u8 frame_type;
  208. u8 init_rate:7;
  209. u8 mode:1;
  210. __le16 frame_length;
  211. u8 frame[];
  212. } __packed;
  213. struct hif_mib_beacon_wake_up_period {
  214. u8 wakeup_period_min;
  215. u8 receive_dtim:1;
  216. u8 reserved1:7;
  217. u8 wakeup_period_max;
  218. u8 reserved2;
  219. } __packed;
  220. struct hif_mib_rcpi_rssi_threshold {
  221. u8 detection:1;
  222. u8 rcpi_rssi:1;
  223. u8 upperthresh:1;
  224. u8 lowerthresh:1;
  225. u8 reserved:4;
  226. u8 lower_threshold;
  227. u8 upper_threshold;
  228. u8 rolling_average_count;
  229. } __packed;
  230. #define DEFAULT_BA_MAX_RX_BUFFER_SIZE 16
  231. struct hif_mib_block_ack_policy {
  232. u8 block_ack_tx_tid_policy;
  233. u8 reserved1;
  234. u8 block_ack_rx_tid_policy;
  235. u8 block_ack_rx_max_buffer_size;
  236. } __packed;
  237. enum hif_mpdu_start_spacing {
  238. HIF_MPDU_START_SPACING_NO_RESTRIC = 0x0,
  239. HIF_MPDU_START_SPACING_QUARTER = 0x1,
  240. HIF_MPDU_START_SPACING_HALF = 0x2,
  241. HIF_MPDU_START_SPACING_ONE = 0x3,
  242. HIF_MPDU_START_SPACING_TWO = 0x4,
  243. HIF_MPDU_START_SPACING_FOUR = 0x5,
  244. HIF_MPDU_START_SPACING_EIGHT = 0x6,
  245. HIF_MPDU_START_SPACING_SIXTEEN = 0x7
  246. };
  247. struct hif_mib_set_association_mode {
  248. u8 preambtype_use:1;
  249. u8 mode:1;
  250. u8 rateset:1;
  251. u8 spacing:1;
  252. u8 reserved1:4;
  253. u8 short_preamble:1;
  254. u8 reserved2:7;
  255. u8 greenfield:1;
  256. u8 reserved3:7;
  257. u8 mpdu_start_spacing;
  258. __le32 basic_rate_set;
  259. } __packed;
  260. struct hif_mib_set_uapsd_information {
  261. u8 trig_bckgrnd:1;
  262. u8 trig_be:1;
  263. u8 trig_video:1;
  264. u8 trig_voice:1;
  265. u8 reserved1:4;
  266. u8 deliv_bckgrnd:1;
  267. u8 deliv_be:1;
  268. u8 deliv_video:1;
  269. u8 deliv_voice:1;
  270. u8 reserved2:4;
  271. __le16 min_auto_trigger_interval;
  272. __le16 max_auto_trigger_interval;
  273. __le16 auto_trigger_step;
  274. } __packed;
  275. struct hif_tx_rate_retry_policy {
  276. u8 policy_index;
  277. u8 short_retry_count;
  278. u8 long_retry_count;
  279. u8 first_rate_sel:2;
  280. u8 terminate:1;
  281. u8 count_init:1;
  282. u8 reserved1:4;
  283. u8 rate_recovery_count;
  284. u8 reserved2[3];
  285. u8 rates[12];
  286. } __packed;
  287. #define HIF_TX_RETRY_POLICY_MAX 15
  288. #define HIF_TX_RETRY_POLICY_INVALID HIF_TX_RETRY_POLICY_MAX
  289. struct hif_mib_set_tx_rate_retry_policy {
  290. u8 num_tx_rate_policies;
  291. u8 reserved[3];
  292. struct hif_tx_rate_retry_policy tx_rate_retry_policy[];
  293. } __packed;
  294. struct hif_mib_protected_mgmt_policy {
  295. u8 pmf_enable:1;
  296. u8 unpmf_allowed:1;
  297. u8 host_enc_auth_frames:1;
  298. u8 reserved1:5;
  299. u8 reserved2[3];
  300. } __packed;
  301. struct hif_mib_keep_alive_period {
  302. __le16 keep_alive_period;
  303. u8 reserved[2];
  304. } __packed;
  305. #endif