1
2
3
4
5
6
7
8#ifndef WFX_HIF_API_MIB_H
9#define WFX_HIF_API_MIB_H
10
11#include "hif_api_general.h"
12
13#define HIF_API_IPV4_ADDRESS_SIZE 4
14#define HIF_API_IPV6_ADDRESS_SIZE 16
15
16enum hif_mib_ids {
17 HIF_MIB_ID_GL_OPERATIONAL_POWER_MODE = 0x2000,
18 HIF_MIB_ID_GL_BLOCK_ACK_INFO = 0x2001,
19 HIF_MIB_ID_GL_SET_MULTI_MSG = 0x2002,
20 HIF_MIB_ID_CCA_CONFIG = 0x2003,
21 HIF_MIB_ID_ETHERTYPE_DATAFRAME_CONDITION = 0x2010,
22 HIF_MIB_ID_PORT_DATAFRAME_CONDITION = 0x2011,
23 HIF_MIB_ID_MAGIC_DATAFRAME_CONDITION = 0x2012,
24 HIF_MIB_ID_MAC_ADDR_DATAFRAME_CONDITION = 0x2013,
25 HIF_MIB_ID_IPV4_ADDR_DATAFRAME_CONDITION = 0x2014,
26 HIF_MIB_ID_IPV6_ADDR_DATAFRAME_CONDITION = 0x2015,
27 HIF_MIB_ID_UC_MC_BC_DATAFRAME_CONDITION = 0x2016,
28 HIF_MIB_ID_CONFIG_DATA_FILTER = 0x2017,
29 HIF_MIB_ID_SET_DATA_FILTERING = 0x2018,
30 HIF_MIB_ID_ARP_IP_ADDRESSES_TABLE = 0x2019,
31 HIF_MIB_ID_NS_IP_ADDRESSES_TABLE = 0x201A,
32 HIF_MIB_ID_RX_FILTER = 0x201B,
33 HIF_MIB_ID_BEACON_FILTER_TABLE = 0x201C,
34 HIF_MIB_ID_BEACON_FILTER_ENABLE = 0x201D,
35 HIF_MIB_ID_GRP_SEQ_COUNTER = 0x2030,
36 HIF_MIB_ID_TSF_COUNTER = 0x2031,
37 HIF_MIB_ID_STATISTICS_TABLE = 0x2032,
38 HIF_MIB_ID_COUNTERS_TABLE = 0x2033,
39 HIF_MIB_ID_MAX_TX_POWER_LEVEL = 0x2034,
40 HIF_MIB_ID_EXTENDED_COUNTERS_TABLE = 0x2035,
41 HIF_MIB_ID_DOT11_MAC_ADDRESS = 0x2040,
42 HIF_MIB_ID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME = 0x2041,
43 HIF_MIB_ID_DOT11_MAX_RECEIVE_LIFETIME = 0x2042,
44 HIF_MIB_ID_DOT11_WEP_DEFAULT_KEY_ID = 0x2043,
45 HIF_MIB_ID_DOT11_RTS_THRESHOLD = 0x2044,
46 HIF_MIB_ID_SLOT_TIME = 0x2045,
47 HIF_MIB_ID_CURRENT_TX_POWER_LEVEL = 0x2046,
48 HIF_MIB_ID_NON_ERP_PROTECTION = 0x2047,
49 HIF_MIB_ID_TEMPLATE_FRAME = 0x2048,
50 HIF_MIB_ID_BEACON_WAKEUP_PERIOD = 0x2049,
51 HIF_MIB_ID_RCPI_RSSI_THRESHOLD = 0x204A,
52 HIF_MIB_ID_BLOCK_ACK_POLICY = 0x204B,
53 HIF_MIB_ID_OVERRIDE_INTERNAL_TX_RATE = 0x204C,
54 HIF_MIB_ID_SET_ASSOCIATION_MODE = 0x204D,
55 HIF_MIB_ID_SET_UAPSD_INFORMATION = 0x204E,
56 HIF_MIB_ID_SET_TX_RATE_RETRY_POLICY = 0x204F,
57 HIF_MIB_ID_PROTECTED_MGMT_POLICY = 0x2050,
58 HIF_MIB_ID_SET_HT_PROTECTION = 0x2051,
59 HIF_MIB_ID_KEEP_ALIVE_PERIOD = 0x2052,
60 HIF_MIB_ID_ARP_KEEP_ALIVE_PERIOD = 0x2053,
61 HIF_MIB_ID_INACTIVITY_TIMER = 0x2054,
62 HIF_MIB_ID_INTERFACE_PROTECTION = 0x2055,
63 HIF_MIB_ID_BEACON_STATS = 0x2056,
64};
65
66#define HIF_OP_POWER_MODE_MASK 0xf
67
68enum hif_op_power_mode {
69 HIF_OP_POWER_MODE_ACTIVE = 0x0,
70 HIF_OP_POWER_MODE_DOZE = 0x1,
71 HIF_OP_POWER_MODE_QUIESCENT = 0x2
72};
73
74struct hif_mib_gl_operational_power_mode {
75 u8 power_mode:4;
76 u8 reserved1:3;
77 u8 wup_ind_activation:1;
78 u8 reserved2[3];
79} __packed;
80
81struct hif_mib_gl_block_ack_info {
82 u8 rx_buffer_size;
83 u8 rx_max_num_agreements;
84 u8 tx_buffer_size;
85 u8 tx_max_num_agreements;
86} __packed;
87
88struct hif_mib_gl_set_multi_msg {
89 u8 enable_multi_tx_conf:1;
90 u8 reserved1:7;
91 u8 reserved2[3];
92} __packed;
93
94enum hif_cca_thr_mode {
95 HIF_CCA_THR_MODE_RELATIVE = 0x0,
96 HIF_CCA_THR_MODE_ABSOLUTE = 0x1
97};
98
99struct hif_mib_gl_cca_config {
100 u8 cca_thr_mode;
101 u8 reserved[3];
102} __packed;
103
104#define MAX_NUMBER_DATA_FILTERS 0xA
105
106#define MAX_NUMBER_IPV4_ADDR_CONDITIONS 0x4
107#define MAX_NUMBER_IPV6_ADDR_CONDITIONS 0x4
108#define MAX_NUMBER_MAC_ADDR_CONDITIONS 0x4
109#define MAX_NUMBER_UC_MC_BC_CONDITIONS 0x4
110#define MAX_NUMBER_ETHER_TYPE_CONDITIONS 0x4
111#define MAX_NUMBER_PORT_CONDITIONS 0x4
112#define MAX_NUMBER_MAGIC_CONDITIONS 0x4
113#define MAX_NUMBER_ARP_CONDITIONS 0x2
114#define MAX_NUMBER_NS_CONDITIONS 0x2
115
116struct hif_mib_ethertype_data_frame_condition {
117 u8 condition_idx;
118 u8 reserved;
119 u16 ether_type;
120} __packed;
121
122enum hif_udp_tcp_protocol {
123 HIF_PROTOCOL_UDP = 0x0,
124 HIF_PROTOCOL_TCP = 0x1,
125 HIF_PROTOCOL_BOTH_UDP_TCP = 0x2
126};
127
128enum hif_which_port {
129 HIF_PORT_DST = 0x0,
130 HIF_PORT_SRC = 0x1,
131 HIF_PORT_SRC_OR_DST = 0x2
132};
133
134struct hif_mib_ports_data_frame_condition {
135 u8 condition_idx;
136 u8 protocol;
137 u8 which_port;
138 u8 reserved1;
139 u16 port_number;
140 u8 reserved2[2];
141} __packed;
142
143#define HIF_API_MAGIC_PATTERN_SIZE 32
144
145struct hif_mib_magic_data_frame_condition {
146 u8 condition_idx;
147 u8 offset;
148 u8 magic_pattern_length;
149 u8 reserved;
150 u8 magic_pattern[HIF_API_MAGIC_PATTERN_SIZE];
151} __packed;
152
153enum hif_mac_addr_type {
154 HIF_MAC_ADDR_A1 = 0x0,
155 HIF_MAC_ADDR_A2 = 0x1,
156 HIF_MAC_ADDR_A3 = 0x2
157};
158
159struct hif_mib_mac_addr_data_frame_condition {
160 u8 condition_idx;
161 u8 address_type;
162 u8 mac_address[ETH_ALEN];
163} __packed;
164
165enum hif_ip_addr_mode {
166 HIF_IP_ADDR_SRC = 0x0,
167 HIF_IP_ADDR_DST = 0x1
168};
169
170struct hif_mib_ipv4_addr_data_frame_condition {
171 u8 condition_idx;
172 u8 address_mode;
173 u8 reserved[2];
174 u8 i_pv4_address[HIF_API_IPV4_ADDRESS_SIZE];
175} __packed;
176
177struct hif_mib_ipv6_addr_data_frame_condition {
178 u8 condition_idx;
179 u8 address_mode;
180 u8 reserved[2];
181 u8 i_pv6_address[HIF_API_IPV6_ADDRESS_SIZE];
182} __packed;
183
184#define HIF_FILTER_UNICAST 0x1
185#define HIF_FILTER_MULTICAST 0x2
186#define HIF_FILTER_BROADCAST 0x4
187
188struct hif_mib_uc_mc_bc_data_frame_condition {
189 u8 condition_idx;
190 u8 allowed_frames;
191 u8 reserved[2];
192} __packed;
193
194struct hif_mib_config_data_filter {
195 u8 filter_idx;
196 u8 enable;
197 u8 reserved1[2];
198 u8 eth_type_cond;
199 u8 port_cond;
200 u8 magic_cond;
201 u8 mac_cond;
202 u8 ipv4_cond;
203 u8 ipv6_cond;
204 u8 uc_mc_bc_cond;
205 u8 reserved2;
206} __packed;
207
208struct hif_mib_set_data_filtering {
209 u8 invert_matching:1;
210 u8 reserved1:7;
211 u8 enable:1;
212 u8 reserved2:7;
213 u8 reserved3[2];
214} __packed;
215
216enum hif_arp_ns_frame_treatment {
217 HIF_ARP_NS_FILTERING_DISABLE = 0x0,
218 HIF_ARP_NS_FILTERING_ENABLE = 0x1,
219 HIF_ARP_NS_REPLY_ENABLE = 0x2
220};
221
222struct hif_mib_arp_ip_addr_table {
223 u8 condition_idx;
224 u8 arp_enable;
225 u8 reserved[2];
226 u8 ipv4_address[HIF_API_IPV4_ADDRESS_SIZE];
227} __packed;
228
229struct hif_mib_ns_ip_addr_table {
230 u8 condition_idx;
231 u8 ns_enable;
232 u8 reserved[2];
233 u8 ipv6_address[HIF_API_IPV6_ADDRESS_SIZE];
234} __packed;
235
236struct hif_mib_rx_filter {
237 u8 reserved1:1;
238 u8 bssid_filter:1;
239 u8 reserved2:1;
240 u8 fwd_probe_req:1;
241 u8 keep_alive_filter:1;
242 u8 reserved3:3;
243 u8 reserved4[3];
244} __packed;
245
246#define HIF_API_OUI_SIZE 3
247#define HIF_API_MATCH_DATA_SIZE 3
248
249struct hif_ie_table_entry {
250 u8 ie_id;
251 u8 has_changed:1;
252 u8 no_longer:1;
253 u8 has_appeared:1;
254 u8 reserved:1;
255 u8 num_match_data:4;
256 u8 oui[HIF_API_OUI_SIZE];
257 u8 match_data[HIF_API_MATCH_DATA_SIZE];
258} __packed;
259
260struct hif_mib_bcn_filter_table {
261 u32 num_of_info_elmts;
262 struct hif_ie_table_entry ie_table[];
263} __packed;
264
265enum hif_beacon_filter {
266 HIF_BEACON_FILTER_DISABLE = 0x0,
267 HIF_BEACON_FILTER_ENABLE = 0x1,
268 HIF_BEACON_FILTER_AUTO_ERP = 0x2
269};
270
271struct hif_mib_bcn_filter_enable {
272 u32 enable;
273 u32 bcn_count;
274} __packed;
275
276struct hif_mib_group_seq_counter {
277 u32 bits4716;
278 u16 bits1500;
279 u16 reserved;
280} __packed;
281
282struct hif_mib_tsf_counter {
283 u32 tsf_counterlo;
284 u32 tsf_counterhi;
285} __packed;
286
287struct hif_mib_stats_table {
288 s16 latest_snr;
289 u8 latest_rcpi;
290 s8 latest_rssi;
291} __packed;
292
293struct hif_mib_extended_count_table {
294 u32 count_plcp_errors;
295 u32 count_fcs_errors;
296 u32 count_tx_packets;
297 u32 count_rx_packets;
298 u32 count_rx_packet_errors;
299 u32 count_rx_decryption_failures;
300 u32 count_rx_mic_failures;
301 u32 count_rx_no_key_failures;
302 u32 count_tx_multicast_frames;
303 u32 count_tx_frames_success;
304 u32 count_tx_frame_failures;
305 u32 count_tx_frames_retried;
306 u32 count_tx_frames_multi_retried;
307 u32 count_rx_frame_duplicates;
308 u32 count_rts_success;
309 u32 count_rts_failures;
310 u32 count_ack_failures;
311 u32 count_rx_multicast_frames;
312 u32 count_rx_frames_success;
313 u32 count_rx_cmacicv_errors;
314 u32 count_rx_cmac_replays;
315 u32 count_rx_mgmt_ccmp_replays;
316 u32 count_rx_bipmic_errors;
317 u32 count_rx_beacon;
318 u32 count_miss_beacon;
319 u32 reserved[15];
320} __packed;
321
322struct hif_mib_count_table {
323 u32 count_plcp_errors;
324 u32 count_fcs_errors;
325 u32 count_tx_packets;
326 u32 count_rx_packets;
327 u32 count_rx_packet_errors;
328 u32 count_rx_decryption_failures;
329 u32 count_rx_mic_failures;
330 u32 count_rx_no_key_failures;
331 u32 count_tx_multicast_frames;
332 u32 count_tx_frames_success;
333 u32 count_tx_frame_failures;
334 u32 count_tx_frames_retried;
335 u32 count_tx_frames_multi_retried;
336 u32 count_rx_frame_duplicates;
337 u32 count_rts_success;
338 u32 count_rts_failures;
339 u32 count_ack_failures;
340 u32 count_rx_multicast_frames;
341 u32 count_rx_frames_success;
342 u32 count_rx_cmacicv_errors;
343 u32 count_rx_cmac_replays;
344 u32 count_rx_mgmt_ccmp_replays;
345 u32 count_rx_bipmic_errors;
346} __packed;
347
348struct hif_mib_max_tx_power_level {
349 s32 max_tx_power_level_rf_port1;
350 s32 max_tx_power_level_rf_port2;
351} __packed;
352
353struct hif_mib_beacon_stats {
354 s32 latest_tbtt_diff;
355 u32 reserved[4];
356} __packed;
357
358struct hif_mib_mac_address {
359 u8 mac_addr[ETH_ALEN];
360 u16 reserved;
361} __packed;
362
363struct hif_mib_dot11_max_transmit_msdu_lifetime {
364 u32 max_life_time;
365} __packed;
366
367struct hif_mib_dot11_max_receive_lifetime {
368 u32 max_life_time;
369} __packed;
370
371struct hif_mib_wep_default_key_id {
372 u8 wep_default_key_id;
373 u8 reserved[3];
374} __packed;
375
376struct hif_mib_dot11_rts_threshold {
377 u32 threshold;
378} __packed;
379
380struct hif_mib_slot_time {
381 u32 slot_time;
382} __packed;
383
384struct hif_mib_current_tx_power_level {
385 s32 power_level;
386} __packed;
387
388struct hif_mib_non_erp_protection {
389 u8 use_cts_to_self:1;
390 u8 reserved1:7;
391 u8 reserved2[3];
392} __packed;
393
394enum hif_tmplt {
395 HIF_TMPLT_PRBREQ = 0x0,
396 HIF_TMPLT_BCN = 0x1,
397 HIF_TMPLT_NULL = 0x2,
398 HIF_TMPLT_QOSNUL = 0x3,
399 HIF_TMPLT_PSPOLL = 0x4,
400 HIF_TMPLT_PRBRES = 0x5,
401 HIF_TMPLT_ARP = 0x6,
402 HIF_TMPLT_NA = 0x7
403};
404
405#define HIF_API_MAX_TEMPLATE_FRAME_SIZE 700
406
407struct hif_mib_template_frame {
408 u8 frame_type;
409 u8 init_rate:7;
410 u8 mode:1;
411 u16 frame_length;
412 u8 frame[HIF_API_MAX_TEMPLATE_FRAME_SIZE];
413} __packed;
414
415struct hif_mib_beacon_wake_up_period {
416 u8 wakeup_period_min;
417 u8 receive_dtim:1;
418 u8 reserved1:7;
419 u8 wakeup_period_max;
420 u8 reserved2;
421} __packed;
422
423struct hif_mib_rcpi_rssi_threshold {
424 u8 detection:1;
425 u8 rcpi_rssi:1;
426 u8 upperthresh:1;
427 u8 lowerthresh:1;
428 u8 reserved:4;
429 u8 lower_threshold;
430 u8 upper_threshold;
431 u8 rolling_average_count;
432} __packed;
433
434#define DEFAULT_BA_MAX_RX_BUFFER_SIZE 16
435
436struct hif_mib_block_ack_policy {
437 u8 block_ack_tx_tid_policy;
438 u8 reserved1;
439 u8 block_ack_rx_tid_policy;
440 u8 block_ack_rx_max_buffer_size;
441} __packed;
442
443struct hif_mib_override_int_rate {
444 u8 internal_tx_rate;
445 u8 non_erp_internal_tx_rate;
446 u8 reserved[2];
447} __packed;
448
449enum hif_mpdu_start_spacing {
450 HIF_MPDU_START_SPACING_NO_RESTRIC = 0x0,
451 HIF_MPDU_START_SPACING_QUARTER = 0x1,
452 HIF_MPDU_START_SPACING_HALF = 0x2,
453 HIF_MPDU_START_SPACING_ONE = 0x3,
454 HIF_MPDU_START_SPACING_TWO = 0x4,
455 HIF_MPDU_START_SPACING_FOUR = 0x5,
456 HIF_MPDU_START_SPACING_EIGHT = 0x6,
457 HIF_MPDU_START_SPACING_SIXTEEN = 0x7
458};
459
460struct hif_mib_set_association_mode {
461 u8 preambtype_use:1;
462 u8 mode:1;
463 u8 rateset:1;
464 u8 spacing:1;
465 u8 reserved1:4;
466 u8 short_preamble:1;
467 u8 reserved2:7;
468 u8 greenfield:1;
469 u8 reserved3:7;
470 u8 mpdu_start_spacing;
471 u32 basic_rate_set;
472} __packed;
473
474struct hif_mib_set_uapsd_information {
475 u8 trig_bckgrnd:1;
476 u8 trig_be:1;
477 u8 trig_video:1;
478 u8 trig_voice:1;
479 u8 reserved1:4;
480 u8 deliv_bckgrnd:1;
481 u8 deliv_be:1;
482 u8 deliv_video:1;
483 u8 deliv_voice:1;
484 u8 reserved2:4;
485 u16 min_auto_trigger_interval;
486 u16 max_auto_trigger_interval;
487 u16 auto_trigger_step;
488} __packed;
489
490struct hif_mib_tx_rate_retry_policy {
491 u8 policy_index;
492 u8 short_retry_count;
493 u8 long_retry_count;
494 u8 first_rate_sel:2;
495 u8 terminate:1;
496 u8 count_init:1;
497 u8 reserved1:4;
498 u8 rate_recovery_count;
499 u8 reserved2[3];
500 u8 rates[12];
501} __packed;
502
503#define HIF_MIB_NUM_TX_RATE_RETRY_POLICIES 15
504
505struct hif_mib_set_tx_rate_retry_policy {
506 u8 num_tx_rate_policies;
507 u8 reserved[3];
508 struct hif_mib_tx_rate_retry_policy tx_rate_retry_policy[];
509} __packed;
510
511struct hif_mib_protected_mgmt_policy {
512 u8 pmf_enable:1;
513 u8 unpmf_allowed:1;
514 u8 host_enc_auth_frames:1;
515 u8 reserved1:5;
516 u8 reserved2[3];
517} __packed;
518
519struct hif_mib_set_ht_protection {
520 u8 dual_cts_prot:1;
521 u8 reserved1:7;
522 u8 reserved2[3];
523} __packed;
524
525struct hif_mib_keep_alive_period {
526 u16 keep_alive_period;
527 u8 reserved[2];
528} __packed;
529
530struct hif_mib_arp_keep_alive_period {
531 u16 arp_keep_alive_period;
532 u8 encr_type;
533 u8 reserved;
534 u8 sender_ipv4_address[HIF_API_IPV4_ADDRESS_SIZE];
535 u8 target_ipv4_address[HIF_API_IPV4_ADDRESS_SIZE];
536} __packed;
537
538struct hif_mib_inactivity_timer {
539 u8 min_active_time;
540 u8 max_active_time;
541 u16 reserved;
542} __packed;
543
544struct hif_mib_interface_protection {
545 u8 use_cts_prot:1;
546 u8 reserved1:7;
547 u8 reserved2[3];
548} __packed;
549
550#endif
551