blob: 0c67cd4c159302c2a5db16f021dc119b51c7f943 [file] [log] [blame]
/* SPDX-License-Identifier: Apache-2.0 */
/*
* WFx hardware interface definitions
*
* Copyright (c) 2018-2019, Silicon Laboratories Inc.
*/
#ifndef WFX_HIF_API_MIB_H
#define WFX_HIF_API_MIB_H
#include "hif_api_general.h"
#define HIF_API_IPV4_ADDRESS_SIZE 4
#define HIF_API_IPV6_ADDRESS_SIZE 16
enum hif_mib_ids {
HIF_MIB_ID_GL_OPERATIONAL_POWER_MODE = 0x2000,
HIF_MIB_ID_GL_BLOCK_ACK_INFO = 0x2001,
HIF_MIB_ID_GL_SET_MULTI_MSG = 0x2002,
HIF_MIB_ID_CCA_CONFIG = 0x2003,
HIF_MIB_ID_ETHERTYPE_DATAFRAME_CONDITION = 0x2010,
HIF_MIB_ID_PORT_DATAFRAME_CONDITION = 0x2011,
HIF_MIB_ID_MAGIC_DATAFRAME_CONDITION = 0x2012,
HIF_MIB_ID_MAC_ADDR_DATAFRAME_CONDITION = 0x2013,
HIF_MIB_ID_IPV4_ADDR_DATAFRAME_CONDITION = 0x2014,
HIF_MIB_ID_IPV6_ADDR_DATAFRAME_CONDITION = 0x2015,
HIF_MIB_ID_UC_MC_BC_DATAFRAME_CONDITION = 0x2016,
HIF_MIB_ID_CONFIG_DATA_FILTER = 0x2017,
HIF_MIB_ID_SET_DATA_FILTERING = 0x2018,
HIF_MIB_ID_ARP_IP_ADDRESSES_TABLE = 0x2019,
HIF_MIB_ID_NS_IP_ADDRESSES_TABLE = 0x201A,
HIF_MIB_ID_RX_FILTER = 0x201B,
HIF_MIB_ID_BEACON_FILTER_TABLE = 0x201C,
HIF_MIB_ID_BEACON_FILTER_ENABLE = 0x201D,
HIF_MIB_ID_GRP_SEQ_COUNTER = 0x2030,
HIF_MIB_ID_TSF_COUNTER = 0x2031,
HIF_MIB_ID_STATISTICS_TABLE = 0x2032,
HIF_MIB_ID_COUNTERS_TABLE = 0x2033,
HIF_MIB_ID_MAX_TX_POWER_LEVEL = 0x2034,
HIF_MIB_ID_EXTENDED_COUNTERS_TABLE = 0x2035,
HIF_MIB_ID_DOT11_MAC_ADDRESS = 0x2040,
HIF_MIB_ID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME = 0x2041,
HIF_MIB_ID_DOT11_MAX_RECEIVE_LIFETIME = 0x2042,
HIF_MIB_ID_DOT11_WEP_DEFAULT_KEY_ID = 0x2043,
HIF_MIB_ID_DOT11_RTS_THRESHOLD = 0x2044,
HIF_MIB_ID_SLOT_TIME = 0x2045,
HIF_MIB_ID_CURRENT_TX_POWER_LEVEL = 0x2046,
HIF_MIB_ID_NON_ERP_PROTECTION = 0x2047,
HIF_MIB_ID_TEMPLATE_FRAME = 0x2048,
HIF_MIB_ID_BEACON_WAKEUP_PERIOD = 0x2049,
HIF_MIB_ID_RCPI_RSSI_THRESHOLD = 0x204A,
HIF_MIB_ID_BLOCK_ACK_POLICY = 0x204B,
HIF_MIB_ID_OVERRIDE_INTERNAL_TX_RATE = 0x204C,
HIF_MIB_ID_SET_ASSOCIATION_MODE = 0x204D,
HIF_MIB_ID_SET_UAPSD_INFORMATION = 0x204E,
HIF_MIB_ID_SET_TX_RATE_RETRY_POLICY = 0x204F,
HIF_MIB_ID_PROTECTED_MGMT_POLICY = 0x2050,
HIF_MIB_ID_SET_HT_PROTECTION = 0x2051,
HIF_MIB_ID_KEEP_ALIVE_PERIOD = 0x2052,
HIF_MIB_ID_ARP_KEEP_ALIVE_PERIOD = 0x2053,
HIF_MIB_ID_INACTIVITY_TIMER = 0x2054,
HIF_MIB_ID_INTERFACE_PROTECTION = 0x2055,
HIF_MIB_ID_BEACON_STATS = 0x2056,
};
#define HIF_OP_POWER_MODE_MASK 0xf
enum hif_op_power_mode {
HIF_OP_POWER_MODE_ACTIVE = 0x0,
HIF_OP_POWER_MODE_DOZE = 0x1,
HIF_OP_POWER_MODE_QUIESCENT = 0x2
};
struct hif_mib_gl_operational_power_mode {
u8 power_mode:4;
u8 reserved1:3;
u8 wup_ind_activation:1;
u8 reserved2[3];
} __packed;
struct hif_mib_gl_block_ack_info {
u8 rx_buffer_size;
u8 rx_max_num_agreements;
u8 tx_buffer_size;
u8 tx_max_num_agreements;
} __packed;
struct hif_mib_gl_set_multi_msg {
u8 enable_multi_tx_conf:1;
u8 reserved1:7;
u8 reserved2[3];
} __packed;
enum hif_cca_thr_mode {
HIF_CCA_THR_MODE_RELATIVE = 0x0,
HIF_CCA_THR_MODE_ABSOLUTE = 0x1
};
struct hif_mib_gl_cca_config {
u8 cca_thr_mode;
u8 reserved[3];
} __packed;
#define MAX_NUMBER_DATA_FILTERS 0xA
#define MAX_NUMBER_IPV4_ADDR_CONDITIONS 0x4
#define MAX_NUMBER_IPV6_ADDR_CONDITIONS 0x4
#define MAX_NUMBER_MAC_ADDR_CONDITIONS 0x4
#define MAX_NUMBER_UC_MC_BC_CONDITIONS 0x4
#define MAX_NUMBER_ETHER_TYPE_CONDITIONS 0x4
#define MAX_NUMBER_PORT_CONDITIONS 0x4
#define MAX_NUMBER_MAGIC_CONDITIONS 0x4
#define MAX_NUMBER_ARP_CONDITIONS 0x2
#define MAX_NUMBER_NS_CONDITIONS 0x2
struct hif_mib_ethertype_data_frame_condition {
u8 condition_idx;
u8 reserved;
u16 ether_type;
} __packed;
enum hif_udp_tcp_protocol {
HIF_PROTOCOL_UDP = 0x0,
HIF_PROTOCOL_TCP = 0x1,
HIF_PROTOCOL_BOTH_UDP_TCP = 0x2
};
enum hif_which_port {
HIF_PORT_DST = 0x0,
HIF_PORT_SRC = 0x1,
HIF_PORT_SRC_OR_DST = 0x2
};
struct hif_mib_ports_data_frame_condition {
u8 condition_idx;
u8 protocol;
u8 which_port;
u8 reserved1;
u16 port_number;
u8 reserved2[2];
} __packed;
#define HIF_API_MAGIC_PATTERN_SIZE 32
struct hif_mib_magic_data_frame_condition {
u8 condition_idx;
u8 offset;
u8 magic_pattern_length;
u8 reserved;
u8 magic_pattern[HIF_API_MAGIC_PATTERN_SIZE];
} __packed;
enum hif_mac_addr_type {
HIF_MAC_ADDR_A1 = 0x0,
HIF_MAC_ADDR_A2 = 0x1,
HIF_MAC_ADDR_A3 = 0x2
};
struct hif_mib_mac_addr_data_frame_condition {
u8 condition_idx;
u8 address_type;
u8 mac_address[ETH_ALEN];
} __packed;
enum hif_ip_addr_mode {
HIF_IP_ADDR_SRC = 0x0,
HIF_IP_ADDR_DST = 0x1
};
struct hif_mib_ipv4_addr_data_frame_condition {
u8 condition_idx;
u8 address_mode;
u8 reserved[2];
u8 i_pv4_address[HIF_API_IPV4_ADDRESS_SIZE];
} __packed;
struct hif_mib_ipv6_addr_data_frame_condition {
u8 condition_idx;
u8 address_mode;
u8 reserved[2];
u8 i_pv6_address[HIF_API_IPV6_ADDRESS_SIZE];
} __packed;
#define HIF_FILTER_UNICAST 0x1
#define HIF_FILTER_MULTICAST 0x2
#define HIF_FILTER_BROADCAST 0x4
struct hif_mib_uc_mc_bc_data_frame_condition {
u8 condition_idx;
u8 allowed_frames;
u8 reserved[2];
} __packed;
struct hif_mib_config_data_filter {
u8 filter_idx;
u8 enable;
u8 reserved1[2];
u8 eth_type_cond;
u8 port_cond;
u8 magic_cond;
u8 mac_cond;
u8 ipv4_cond;
u8 ipv6_cond;
u8 uc_mc_bc_cond;
u8 reserved2;
} __packed;
struct hif_mib_set_data_filtering {
u8 invert_matching:1;
u8 reserved1:7;
u8 enable:1;
u8 reserved2:7;
u8 reserved3[2];
} __packed;
enum hif_arp_ns_frame_treatment {
HIF_ARP_NS_FILTERING_DISABLE = 0x0,
HIF_ARP_NS_FILTERING_ENABLE = 0x1,
HIF_ARP_NS_REPLY_ENABLE = 0x2
};
struct hif_mib_arp_ip_addr_table {
u8 condition_idx;
u8 arp_enable;
u8 reserved[2];
u8 ipv4_address[HIF_API_IPV4_ADDRESS_SIZE];
} __packed;
struct hif_mib_ns_ip_addr_table {
u8 condition_idx;
u8 ns_enable;
u8 reserved[2];
u8 ipv6_address[HIF_API_IPV6_ADDRESS_SIZE];
} __packed;
struct hif_mib_rx_filter {
u8 reserved1:1;
u8 bssid_filter:1;
u8 reserved2:1;
u8 fwd_probe_req:1;
u8 keep_alive_filter:1;
u8 reserved3:3;
u8 reserved4[3];
} __packed;
#define HIF_API_OUI_SIZE 3
#define HIF_API_MATCH_DATA_SIZE 3
struct hif_ie_table_entry {
u8 ie_id;
u8 has_changed:1;
u8 no_longer:1;
u8 has_appeared:1;
u8 reserved:1;
u8 num_match_data:4;
u8 oui[HIF_API_OUI_SIZE];
u8 match_data[HIF_API_MATCH_DATA_SIZE];
} __packed;
struct hif_mib_bcn_filter_table {
u32 num_of_info_elmts;
struct hif_ie_table_entry ie_table[];
} __packed;
enum hif_beacon_filter {
HIF_BEACON_FILTER_DISABLE = 0x0,
HIF_BEACON_FILTER_ENABLE = 0x1,
HIF_BEACON_FILTER_AUTO_ERP = 0x2
};
struct hif_mib_bcn_filter_enable {
u32 enable;
u32 bcn_count;
} __packed;
struct hif_mib_group_seq_counter {
u32 bits4716;
u16 bits1500;
u16 reserved;
} __packed;
struct hif_mib_tsf_counter {
u32 tsf_counterlo;
u32 tsf_counterhi;
} __packed;
struct hif_mib_stats_table {
s16 latest_snr;
u8 latest_rcpi;
s8 latest_rssi;
} __packed;
struct hif_mib_extended_count_table {
u32 count_plcp_errors;
u32 count_fcs_errors;
u32 count_tx_packets;
u32 count_rx_packets;
u32 count_rx_packet_errors;
u32 count_rx_decryption_failures;
u32 count_rx_mic_failures;
u32 count_rx_no_key_failures;
u32 count_tx_multicast_frames;
u32 count_tx_frames_success;
u32 count_tx_frame_failures;
u32 count_tx_frames_retried;
u32 count_tx_frames_multi_retried;
u32 count_rx_frame_duplicates;
u32 count_rts_success;
u32 count_rts_failures;
u32 count_ack_failures;
u32 count_rx_multicast_frames;
u32 count_rx_frames_success;
u32 count_rx_cmacicv_errors;
u32 count_rx_cmac_replays;
u32 count_rx_mgmt_ccmp_replays;
u32 count_rx_bipmic_errors;
u32 count_rx_beacon;
u32 count_miss_beacon;
u32 reserved[15];
} __packed;
struct hif_mib_count_table {
u32 count_plcp_errors;
u32 count_fcs_errors;
u32 count_tx_packets;
u32 count_rx_packets;
u32 count_rx_packet_errors;
u32 count_rx_decryption_failures;
u32 count_rx_mic_failures;
u32 count_rx_no_key_failures;
u32 count_tx_multicast_frames;
u32 count_tx_frames_success;
u32 count_tx_frame_failures;
u32 count_tx_frames_retried;
u32 count_tx_frames_multi_retried;
u32 count_rx_frame_duplicates;
u32 count_rts_success;
u32 count_rts_failures;
u32 count_ack_failures;
u32 count_rx_multicast_frames;
u32 count_rx_frames_success;
u32 count_rx_cmacicv_errors;
u32 count_rx_cmac_replays;
u32 count_rx_mgmt_ccmp_replays;
u32 count_rx_bipmic_errors;
} __packed;
struct hif_mib_max_tx_power_level {
s32 max_tx_power_level_rf_port1;
s32 max_tx_power_level_rf_port2;
} __packed;
struct hif_mib_beacon_stats {
s32 latest_tbtt_diff;
u32 reserved[4];
} __packed;
struct hif_mib_mac_address {
u8 mac_addr[ETH_ALEN];
u16 reserved;
} __packed;
struct hif_mib_dot11_max_transmit_msdu_lifetime {
u32 max_life_time;
} __packed;
struct hif_mib_dot11_max_receive_lifetime {
u32 max_life_time;
} __packed;
struct hif_mib_wep_default_key_id {
u8 wep_default_key_id;
u8 reserved[3];
} __packed;
struct hif_mib_dot11_rts_threshold {
u32 threshold;
} __packed;
struct hif_mib_slot_time {
u32 slot_time;
} __packed;
struct hif_mib_current_tx_power_level {
s32 power_level;
} __packed;
struct hif_mib_non_erp_protection {
u8 use_cts_to_self:1;
u8 reserved1:7;
u8 reserved2[3];
} __packed;
enum hif_tmplt {
HIF_TMPLT_PRBREQ = 0x0,
HIF_TMPLT_BCN = 0x1,
HIF_TMPLT_NULL = 0x2,
HIF_TMPLT_QOSNUL = 0x3,
HIF_TMPLT_PSPOLL = 0x4,
HIF_TMPLT_PRBRES = 0x5,
HIF_TMPLT_ARP = 0x6,
HIF_TMPLT_NA = 0x7
};
#define HIF_API_MAX_TEMPLATE_FRAME_SIZE 700
struct hif_mib_template_frame {
u8 frame_type;
u8 init_rate:7;
u8 mode:1;
u16 frame_length;
u8 frame[HIF_API_MAX_TEMPLATE_FRAME_SIZE];
} __packed;
struct hif_mib_beacon_wake_up_period {
u8 wakeup_period_min;
u8 receive_dtim:1;
u8 reserved1:7;
u8 wakeup_period_max;
u8 reserved2;
} __packed;
struct hif_mib_rcpi_rssi_threshold {
u8 detection:1;
u8 rcpi_rssi:1;
u8 upperthresh:1;
u8 lowerthresh:1;
u8 reserved:4;
u8 lower_threshold;
u8 upper_threshold;
u8 rolling_average_count;
} __packed;
#define DEFAULT_BA_MAX_RX_BUFFER_SIZE 16
struct hif_mib_block_ack_policy {
u8 block_ack_tx_tid_policy;
u8 reserved1;
u8 block_ack_rx_tid_policy;
u8 block_ack_rx_max_buffer_size;
} __packed;
struct hif_mib_override_int_rate {
u8 internal_tx_rate;
u8 non_erp_internal_tx_rate;
u8 reserved[2];
} __packed;
enum hif_mpdu_start_spacing {
HIF_MPDU_START_SPACING_NO_RESTRIC = 0x0,
HIF_MPDU_START_SPACING_QUARTER = 0x1,
HIF_MPDU_START_SPACING_HALF = 0x2,
HIF_MPDU_START_SPACING_ONE = 0x3,
HIF_MPDU_START_SPACING_TWO = 0x4,
HIF_MPDU_START_SPACING_FOUR = 0x5,
HIF_MPDU_START_SPACING_EIGHT = 0x6,
HIF_MPDU_START_SPACING_SIXTEEN = 0x7
};
struct hif_mib_set_association_mode {
u8 preambtype_use:1;
u8 mode:1;
u8 rateset:1;
u8 spacing:1;
u8 reserved1:4;
u8 short_preamble:1;
u8 reserved2:7;
u8 greenfield:1;
u8 reserved3:7;
u8 mpdu_start_spacing;
u32 basic_rate_set;
} __packed;
struct hif_mib_set_uapsd_information {
u8 trig_bckgrnd:1;
u8 trig_be:1;
u8 trig_video:1;
u8 trig_voice:1;
u8 reserved1:4;
u8 deliv_bckgrnd:1;
u8 deliv_be:1;
u8 deliv_video:1;
u8 deliv_voice:1;
u8 reserved2:4;
u16 min_auto_trigger_interval;
u16 max_auto_trigger_interval;
u16 auto_trigger_step;
} __packed;
struct hif_mib_tx_rate_retry_policy {
u8 policy_index;
u8 short_retry_count;
u8 long_retry_count;
u8 first_rate_sel:2;
u8 terminate:1;
u8 count_init:1;
u8 reserved1:4;
u8 rate_recovery_count;
u8 reserved2[3];
u8 rates[12];
} __packed;
#define HIF_MIB_NUM_TX_RATE_RETRY_POLICIES 15
struct hif_mib_set_tx_rate_retry_policy {
u8 num_tx_rate_policies;
u8 reserved[3];
struct hif_mib_tx_rate_retry_policy tx_rate_retry_policy[];
} __packed;
struct hif_mib_protected_mgmt_policy {
u8 pmf_enable:1;
u8 unpmf_allowed:1;
u8 host_enc_auth_frames:1;
u8 reserved1:5;
u8 reserved2[3];
} __packed;
struct hif_mib_set_ht_protection {
u8 dual_cts_prot:1;
u8 reserved1:7;
u8 reserved2[3];
} __packed;
struct hif_mib_keep_alive_period {
u16 keep_alive_period;
u8 reserved[2];
} __packed;
struct hif_mib_arp_keep_alive_period {
u16 arp_keep_alive_period;
u8 encr_type;
u8 reserved;
u8 sender_ipv4_address[HIF_API_IPV4_ADDRESS_SIZE];
u8 target_ipv4_address[HIF_API_IPV4_ADDRESS_SIZE];
} __packed;
struct hif_mib_inactivity_timer {
u8 min_active_time;
u8 max_active_time;
u16 reserved;
} __packed;
struct hif_mib_interface_protection {
u8 use_cts_prot:1;
u8 reserved1:7;
u8 reserved2[3];
} __packed;
#endif