linux/drivers/staging/wfx/hif_api_mib.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: Apache-2.0 */
   2/*
   3 * WFx hardware interface definitions
   4 *
   5 * Copyright (c) 2018-2019, Silicon Laboratories Inc.
   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