/* SPDX-License-Identifier: Apache-2.0 */
/*
 * WF200 hardware interface definitions
 *
 * Copyright (c) 2018-2020, 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,
};

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_set_multi_msg {
	u8     enable_multi_tx_conf:1;
	u8     reserved1:7;
	u8     reserved2[3];
} __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_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;

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[3];
	u8     match_data[3];
} __packed;

struct hif_mib_bcn_filter_table {
	__le32 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 {
	__le32 enable;
	__le32 bcn_count;
} __packed;

struct hif_mib_extended_count_table {
	__le32 count_drop_plcp;
	__le32 count_drop_fcs;
	__le32 count_tx_frames;
	__le32 count_rx_frames;
	__le32 count_rx_frames_failed;
	__le32 count_drop_decryption;
	__le32 count_drop_tkip_mic;
	__le32 count_drop_no_key;
	__le32 count_tx_frames_multicast;
	__le32 count_tx_frames_success;
	__le32 count_tx_frames_failed;
	__le32 count_tx_frames_retried;
	__le32 count_tx_frames_multi_retried;
	__le32 count_drop_duplicate;
	__le32 count_rts_success;
	__le32 count_rts_failed;
	__le32 count_ack_failed;
	__le32 count_rx_frames_multicast;
	__le32 count_rx_frames_success;
	__le32 count_drop_cmac_icv;
	__le32 count_drop_cmac_replay;
	__le32 count_drop_ccmp_replay;
	__le32 count_drop_bip_mic;
	__le32 count_rx_bcn_success;
	__le32 count_rx_bcn_miss;
	__le32 count_rx_bcn_dtim;
	__le32 count_rx_bcn_dtim_aid0_clr;
	__le32 count_rx_bcn_dtim_aid0_set;
	__le32 reserved[12];
} __packed;

struct hif_mib_count_table {
	__le32 count_drop_plcp;
	__le32 count_drop_fcs;
	__le32 count_tx_frames;
	__le32 count_rx_frames;
	__le32 count_rx_frames_failed;
	__le32 count_drop_decryption;
	__le32 count_drop_tkip_mic;
	__le32 count_drop_no_key;
	__le32 count_tx_frames_multicast;
	__le32 count_tx_frames_success;
	__le32 count_tx_frames_failed;
	__le32 count_tx_frames_retried;
	__le32 count_tx_frames_multi_retried;
	__le32 count_drop_duplicate;
	__le32 count_rts_success;
	__le32 count_rts_failed;
	__le32 count_ack_failed;
	__le32 count_rx_frames_multicast;
	__le32 count_rx_frames_success;
	__le32 count_drop_cmac_icv;
	__le32 count_drop_cmac_replay;
	__le32 count_drop_ccmp_replay;
	__le32 count_drop_bip_mic;
} __packed;

struct hif_mib_mac_address {
	u8     mac_addr[ETH_ALEN];
	__le16 reserved;
} __packed;

struct hif_mib_wep_default_key_id {
	u8     wep_default_key_id;
	u8     reserved[3];
} __packed;

struct hif_mib_dot11_rts_threshold {
	__le32 threshold;
} __packed;

struct hif_mib_slot_time {
	__le32 slot_time;
} __packed;

struct hif_mib_current_tx_power_level {
	__le32 power_level; /* signed value */
} __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;
	__le16 frame_length;
	u8     frame[];
} __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;

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;
	__le32 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;
	__le16 min_auto_trigger_interval;
	__le16 max_auto_trigger_interval;
	__le16 auto_trigger_step;
} __packed;

struct hif_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_TX_RETRY_POLICY_MAX     15
#define HIF_TX_RETRY_POLICY_INVALID HIF_TX_RETRY_POLICY_MAX

struct hif_mib_set_tx_rate_retry_policy {
	u8     num_tx_rate_policies;
	u8     reserved[3];
	struct hif_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_keep_alive_period {
	__le16 keep_alive_period;
	u8     reserved[2];
} __packed;

#endif
