162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * NXP Wireless LAN device driver: ioctl data structures & APIs
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright 2011-2020 NXP
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef _MWIFIEX_IOCTL_H_
962306a36Sopenharmony_ci#define _MWIFIEX_IOCTL_H_
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <net/lib80211.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cienum {
1462306a36Sopenharmony_ci	MWIFIEX_SCAN_TYPE_UNCHANGED = 0,
1562306a36Sopenharmony_ci	MWIFIEX_SCAN_TYPE_ACTIVE,
1662306a36Sopenharmony_ci	MWIFIEX_SCAN_TYPE_PASSIVE
1762306a36Sopenharmony_ci};
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistruct mwifiex_user_scan {
2062306a36Sopenharmony_ci	u32 scan_cfg_len;
2162306a36Sopenharmony_ci	u8 scan_cfg_buf[1];
2262306a36Sopenharmony_ci};
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#define MWIFIEX_PROMISC_MODE            1
2562306a36Sopenharmony_ci#define MWIFIEX_MULTICAST_MODE		2
2662306a36Sopenharmony_ci#define	MWIFIEX_ALL_MULTI_MODE		4
2762306a36Sopenharmony_ci#define MWIFIEX_MAX_MULTICAST_LIST_SIZE	32
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct mwifiex_multicast_list {
3062306a36Sopenharmony_ci	u32 mode;
3162306a36Sopenharmony_ci	u32 num_multicast_addr;
3262306a36Sopenharmony_ci	u8 mac_list[MWIFIEX_MAX_MULTICAST_LIST_SIZE][ETH_ALEN];
3362306a36Sopenharmony_ci};
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistruct mwifiex_chan_freq {
3662306a36Sopenharmony_ci	u32 channel;
3762306a36Sopenharmony_ci	u32 freq;
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cistruct mwifiex_ssid_bssid {
4162306a36Sopenharmony_ci	struct cfg80211_ssid ssid;
4262306a36Sopenharmony_ci	u8 bssid[ETH_ALEN];
4362306a36Sopenharmony_ci};
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cienum {
4662306a36Sopenharmony_ci	BAND_B = 1,
4762306a36Sopenharmony_ci	BAND_G = 2,
4862306a36Sopenharmony_ci	BAND_A = 4,
4962306a36Sopenharmony_ci	BAND_GN = 8,
5062306a36Sopenharmony_ci	BAND_AN = 16,
5162306a36Sopenharmony_ci	BAND_AAC = 32,
5262306a36Sopenharmony_ci};
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#define MWIFIEX_WPA_PASSHPHRASE_LEN 64
5562306a36Sopenharmony_cistruct wpa_param {
5662306a36Sopenharmony_ci	u8 pairwise_cipher_wpa;
5762306a36Sopenharmony_ci	u8 pairwise_cipher_wpa2;
5862306a36Sopenharmony_ci	u8 group_cipher;
5962306a36Sopenharmony_ci	u32 length;
6062306a36Sopenharmony_ci	u8 passphrase[MWIFIEX_WPA_PASSHPHRASE_LEN];
6162306a36Sopenharmony_ci};
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_cistruct wep_key {
6462306a36Sopenharmony_ci	u8 key_index;
6562306a36Sopenharmony_ci	u8 is_default;
6662306a36Sopenharmony_ci	u16 length;
6762306a36Sopenharmony_ci	u8 key[WLAN_KEY_LEN_WEP104];
6862306a36Sopenharmony_ci};
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci#define KEY_MGMT_ON_HOST        0x03
7162306a36Sopenharmony_ci#define MWIFIEX_AUTH_MODE_AUTO  0xFF
7262306a36Sopenharmony_ci#define BAND_CONFIG_BG          0x00
7362306a36Sopenharmony_ci#define BAND_CONFIG_A           0x01
7462306a36Sopenharmony_ci#define MWIFIEX_SEC_CHAN_BELOW	0x30
7562306a36Sopenharmony_ci#define MWIFIEX_SEC_CHAN_ABOVE	0x10
7662306a36Sopenharmony_ci#define MWIFIEX_SUPPORTED_RATES                 14
7762306a36Sopenharmony_ci#define MWIFIEX_SUPPORTED_RATES_EXT             32
7862306a36Sopenharmony_ci#define MWIFIEX_TDLS_SUPPORTED_RATES		8
7962306a36Sopenharmony_ci#define MWIFIEX_TDLS_DEF_QOS_CAPAB		0xf
8062306a36Sopenharmony_ci#define MWIFIEX_PRIO_BK				2
8162306a36Sopenharmony_ci#define MWIFIEX_PRIO_VI				5
8262306a36Sopenharmony_ci#define MWIFIEX_SUPPORTED_CHANNELS		2
8362306a36Sopenharmony_ci#define MWIFIEX_OPERATING_CLASSES		16
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_cistruct mwifiex_uap_bss_param {
8662306a36Sopenharmony_ci	u8 channel;
8762306a36Sopenharmony_ci	u8 band_cfg;
8862306a36Sopenharmony_ci	u16 rts_threshold;
8962306a36Sopenharmony_ci	u16 frag_threshold;
9062306a36Sopenharmony_ci	u8 retry_limit;
9162306a36Sopenharmony_ci	struct mwifiex_802_11_ssid ssid;
9262306a36Sopenharmony_ci	u8 bcast_ssid_ctl;
9362306a36Sopenharmony_ci	u8 radio_ctl;
9462306a36Sopenharmony_ci	u8 dtim_period;
9562306a36Sopenharmony_ci	u16 beacon_period;
9662306a36Sopenharmony_ci	u16 auth_mode;
9762306a36Sopenharmony_ci	u16 protocol;
9862306a36Sopenharmony_ci	u16 key_mgmt;
9962306a36Sopenharmony_ci	u16 key_mgmt_operation;
10062306a36Sopenharmony_ci	struct wpa_param wpa_cfg;
10162306a36Sopenharmony_ci	struct wep_key wep_cfg[NUM_WEP_KEYS];
10262306a36Sopenharmony_ci	struct ieee80211_ht_cap ht_cap;
10362306a36Sopenharmony_ci	struct ieee80211_vht_cap vht_cap;
10462306a36Sopenharmony_ci	u8 rates[MWIFIEX_SUPPORTED_RATES];
10562306a36Sopenharmony_ci	u32 sta_ao_timer;
10662306a36Sopenharmony_ci	u32 ps_sta_ao_timer;
10762306a36Sopenharmony_ci	u8 qos_info;
10862306a36Sopenharmony_ci	u8 power_constraint;
10962306a36Sopenharmony_ci	struct mwifiex_types_wmm_info wmm_info;
11062306a36Sopenharmony_ci	u8 mac_addr[ETH_ALEN];
11162306a36Sopenharmony_ci};
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_cienum {
11462306a36Sopenharmony_ci	ADHOC_IDLE,
11562306a36Sopenharmony_ci	ADHOC_STARTED,
11662306a36Sopenharmony_ci	ADHOC_JOINED,
11762306a36Sopenharmony_ci	ADHOC_COALESCED
11862306a36Sopenharmony_ci};
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_cistruct mwifiex_ds_get_stats {
12162306a36Sopenharmony_ci	u32 mcast_tx_frame;
12262306a36Sopenharmony_ci	u32 failed;
12362306a36Sopenharmony_ci	u32 retry;
12462306a36Sopenharmony_ci	u32 multi_retry;
12562306a36Sopenharmony_ci	u32 frame_dup;
12662306a36Sopenharmony_ci	u32 rts_success;
12762306a36Sopenharmony_ci	u32 rts_failure;
12862306a36Sopenharmony_ci	u32 ack_failure;
12962306a36Sopenharmony_ci	u32 rx_frag;
13062306a36Sopenharmony_ci	u32 mcast_rx_frame;
13162306a36Sopenharmony_ci	u32 fcs_error;
13262306a36Sopenharmony_ci	u32 tx_frame;
13362306a36Sopenharmony_ci	u32 wep_icv_error[4];
13462306a36Sopenharmony_ci	u32 bcn_rcv_cnt;
13562306a36Sopenharmony_ci	u32 bcn_miss_cnt;
13662306a36Sopenharmony_ci};
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ci#define MWIFIEX_MAX_VER_STR_LEN    128
13962306a36Sopenharmony_ci
14062306a36Sopenharmony_cistruct mwifiex_ver_ext {
14162306a36Sopenharmony_ci	u32 version_str_sel;
14262306a36Sopenharmony_ci	char version_str[MWIFIEX_MAX_VER_STR_LEN];
14362306a36Sopenharmony_ci};
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_cistruct mwifiex_bss_info {
14662306a36Sopenharmony_ci	u32 bss_mode;
14762306a36Sopenharmony_ci	struct cfg80211_ssid ssid;
14862306a36Sopenharmony_ci	u32 bss_chan;
14962306a36Sopenharmony_ci	u8 country_code[3];
15062306a36Sopenharmony_ci	u32 media_connected;
15162306a36Sopenharmony_ci	u32 max_power_level;
15262306a36Sopenharmony_ci	u32 min_power_level;
15362306a36Sopenharmony_ci	u32 adhoc_state;
15462306a36Sopenharmony_ci	signed int bcn_nf_last;
15562306a36Sopenharmony_ci	u32 wep_status;
15662306a36Sopenharmony_ci	u32 is_hs_configured;
15762306a36Sopenharmony_ci	u32 is_deep_sleep;
15862306a36Sopenharmony_ci	u8 bssid[ETH_ALEN];
15962306a36Sopenharmony_ci};
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci#define MAX_NUM_TID     8
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci#define MAX_RX_WINSIZE  64
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_cistruct mwifiex_ds_rx_reorder_tbl {
16662306a36Sopenharmony_ci	u16 tid;
16762306a36Sopenharmony_ci	u8 ta[ETH_ALEN];
16862306a36Sopenharmony_ci	u32 start_win;
16962306a36Sopenharmony_ci	u32 win_size;
17062306a36Sopenharmony_ci	u32 buffer[MAX_RX_WINSIZE];
17162306a36Sopenharmony_ci};
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_cistruct mwifiex_ds_tx_ba_stream_tbl {
17462306a36Sopenharmony_ci	u16 tid;
17562306a36Sopenharmony_ci	u8 ra[ETH_ALEN];
17662306a36Sopenharmony_ci	u8 amsdu;
17762306a36Sopenharmony_ci};
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci#define DBG_CMD_NUM    5
18062306a36Sopenharmony_ci#define MWIFIEX_DBG_SDIO_MP_NUM    10
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_cistruct tdls_peer_info {
18362306a36Sopenharmony_ci	u8 peer_addr[ETH_ALEN];
18462306a36Sopenharmony_ci};
18562306a36Sopenharmony_ci
18662306a36Sopenharmony_cistruct mwifiex_debug_info {
18762306a36Sopenharmony_ci	unsigned int debug_mask;
18862306a36Sopenharmony_ci	u32 int_counter;
18962306a36Sopenharmony_ci	u32 packets_out[MAX_NUM_TID];
19062306a36Sopenharmony_ci	u32 tx_buf_size;
19162306a36Sopenharmony_ci	u32 curr_tx_buf_size;
19262306a36Sopenharmony_ci	u32 tx_tbl_num;
19362306a36Sopenharmony_ci	struct mwifiex_ds_tx_ba_stream_tbl
19462306a36Sopenharmony_ci		tx_tbl[MWIFIEX_MAX_TX_BASTREAM_SUPPORTED];
19562306a36Sopenharmony_ci	u32 rx_tbl_num;
19662306a36Sopenharmony_ci	struct mwifiex_ds_rx_reorder_tbl rx_tbl
19762306a36Sopenharmony_ci		[MWIFIEX_MAX_RX_BASTREAM_SUPPORTED];
19862306a36Sopenharmony_ci	u32 tdls_peer_num;
19962306a36Sopenharmony_ci	struct tdls_peer_info tdls_list
20062306a36Sopenharmony_ci		[MWIFIEX_MAX_TDLS_PEER_SUPPORTED];
20162306a36Sopenharmony_ci	u16 ps_mode;
20262306a36Sopenharmony_ci	u32 ps_state;
20362306a36Sopenharmony_ci	u8 is_deep_sleep;
20462306a36Sopenharmony_ci	u8 pm_wakeup_card_req;
20562306a36Sopenharmony_ci	u32 pm_wakeup_fw_try;
20662306a36Sopenharmony_ci	u8 is_hs_configured;
20762306a36Sopenharmony_ci	u8 hs_activated;
20862306a36Sopenharmony_ci	u32 num_cmd_host_to_card_failure;
20962306a36Sopenharmony_ci	u32 num_cmd_sleep_cfm_host_to_card_failure;
21062306a36Sopenharmony_ci	u32 num_tx_host_to_card_failure;
21162306a36Sopenharmony_ci	u32 num_event_deauth;
21262306a36Sopenharmony_ci	u32 num_event_disassoc;
21362306a36Sopenharmony_ci	u32 num_event_link_lost;
21462306a36Sopenharmony_ci	u32 num_cmd_deauth;
21562306a36Sopenharmony_ci	u32 num_cmd_assoc_success;
21662306a36Sopenharmony_ci	u32 num_cmd_assoc_failure;
21762306a36Sopenharmony_ci	u32 num_tx_timeout;
21862306a36Sopenharmony_ci	u8 is_cmd_timedout;
21962306a36Sopenharmony_ci	u16 timeout_cmd_id;
22062306a36Sopenharmony_ci	u16 timeout_cmd_act;
22162306a36Sopenharmony_ci	u16 last_cmd_id[DBG_CMD_NUM];
22262306a36Sopenharmony_ci	u16 last_cmd_act[DBG_CMD_NUM];
22362306a36Sopenharmony_ci	u16 last_cmd_index;
22462306a36Sopenharmony_ci	u16 last_cmd_resp_id[DBG_CMD_NUM];
22562306a36Sopenharmony_ci	u16 last_cmd_resp_index;
22662306a36Sopenharmony_ci	u16 last_event[DBG_CMD_NUM];
22762306a36Sopenharmony_ci	u16 last_event_index;
22862306a36Sopenharmony_ci	u8 data_sent;
22962306a36Sopenharmony_ci	u8 cmd_sent;
23062306a36Sopenharmony_ci	u8 cmd_resp_received;
23162306a36Sopenharmony_ci	u8 event_received;
23262306a36Sopenharmony_ci	u32 last_mp_wr_bitmap[MWIFIEX_DBG_SDIO_MP_NUM];
23362306a36Sopenharmony_ci	u32 last_mp_wr_ports[MWIFIEX_DBG_SDIO_MP_NUM];
23462306a36Sopenharmony_ci	u32 last_mp_wr_len[MWIFIEX_DBG_SDIO_MP_NUM];
23562306a36Sopenharmony_ci	u32 last_mp_curr_wr_port[MWIFIEX_DBG_SDIO_MP_NUM];
23662306a36Sopenharmony_ci	u8 last_sdio_mp_index;
23762306a36Sopenharmony_ci};
23862306a36Sopenharmony_ci
23962306a36Sopenharmony_ci#define MWIFIEX_KEY_INDEX_UNICAST	0x40000000
24062306a36Sopenharmony_ci#define PN_LEN				16
24162306a36Sopenharmony_ci
24262306a36Sopenharmony_cistruct mwifiex_ds_encrypt_key {
24362306a36Sopenharmony_ci	u32 key_disable;
24462306a36Sopenharmony_ci	u32 key_index;
24562306a36Sopenharmony_ci	u32 key_len;
24662306a36Sopenharmony_ci	u8 key_material[WLAN_MAX_KEY_LEN];
24762306a36Sopenharmony_ci	u8 mac_addr[ETH_ALEN];
24862306a36Sopenharmony_ci	u32 is_wapi_key;
24962306a36Sopenharmony_ci	u8 pn[PN_LEN];		/* packet number */
25062306a36Sopenharmony_ci	u8 pn_len;
25162306a36Sopenharmony_ci	u8 is_igtk_key;
25262306a36Sopenharmony_ci	u8 is_current_wep_key;
25362306a36Sopenharmony_ci	u8 is_rx_seq_valid;
25462306a36Sopenharmony_ci	u8 is_igtk_def_key;
25562306a36Sopenharmony_ci};
25662306a36Sopenharmony_ci
25762306a36Sopenharmony_cistruct mwifiex_power_cfg {
25862306a36Sopenharmony_ci	u32 is_power_auto;
25962306a36Sopenharmony_ci	u32 is_power_fixed;
26062306a36Sopenharmony_ci	u32 power_level;
26162306a36Sopenharmony_ci};
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_cistruct mwifiex_ds_hs_cfg {
26462306a36Sopenharmony_ci	u32 is_invoke_hostcmd;
26562306a36Sopenharmony_ci	/*  Bit0: non-unicast data
26662306a36Sopenharmony_ci	 *  Bit1: unicast data
26762306a36Sopenharmony_ci	 *  Bit2: mac events
26862306a36Sopenharmony_ci	 *  Bit3: magic packet
26962306a36Sopenharmony_ci	 */
27062306a36Sopenharmony_ci	u32 conditions;
27162306a36Sopenharmony_ci	u32 gpio;
27262306a36Sopenharmony_ci	u32 gap;
27362306a36Sopenharmony_ci};
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_cistruct mwifiex_ds_wakeup_reason {
27662306a36Sopenharmony_ci	u16  hs_wakeup_reason;
27762306a36Sopenharmony_ci};
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ci#define DEEP_SLEEP_ON  1
28062306a36Sopenharmony_ci#define DEEP_SLEEP_OFF 0
28162306a36Sopenharmony_ci#define DEEP_SLEEP_IDLE_TIME	100
28262306a36Sopenharmony_ci#define PS_MODE_AUTO		1
28362306a36Sopenharmony_ci
28462306a36Sopenharmony_cistruct mwifiex_ds_auto_ds {
28562306a36Sopenharmony_ci	u16 auto_ds;
28662306a36Sopenharmony_ci	u16 idle_time;
28762306a36Sopenharmony_ci};
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_cistruct mwifiex_ds_pm_cfg {
29062306a36Sopenharmony_ci	union {
29162306a36Sopenharmony_ci		u32 ps_mode;
29262306a36Sopenharmony_ci		struct mwifiex_ds_hs_cfg hs_cfg;
29362306a36Sopenharmony_ci		struct mwifiex_ds_auto_ds auto_deep_sleep;
29462306a36Sopenharmony_ci		u32 sleep_period;
29562306a36Sopenharmony_ci	} param;
29662306a36Sopenharmony_ci};
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_cistruct mwifiex_11ac_vht_cfg {
29962306a36Sopenharmony_ci	u8 band_config;
30062306a36Sopenharmony_ci	u8 misc_config;
30162306a36Sopenharmony_ci	u32 cap_info;
30262306a36Sopenharmony_ci	u32 mcs_tx_set;
30362306a36Sopenharmony_ci	u32 mcs_rx_set;
30462306a36Sopenharmony_ci};
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_cistruct mwifiex_ds_11n_tx_cfg {
30762306a36Sopenharmony_ci	u16 tx_htcap;
30862306a36Sopenharmony_ci	u16 tx_htinfo;
30962306a36Sopenharmony_ci	u16 misc_config; /* Needed for 802.11AC cards only */
31062306a36Sopenharmony_ci};
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_cistruct mwifiex_ds_11n_amsdu_aggr_ctrl {
31362306a36Sopenharmony_ci	u16 enable;
31462306a36Sopenharmony_ci	u16 curr_buf_size;
31562306a36Sopenharmony_ci};
31662306a36Sopenharmony_ci
31762306a36Sopenharmony_cistruct mwifiex_ds_ant_cfg {
31862306a36Sopenharmony_ci	u32 tx_ant;
31962306a36Sopenharmony_ci	u32 rx_ant;
32062306a36Sopenharmony_ci};
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ci#define MWIFIEX_NUM_OF_CMD_BUFFER	50
32362306a36Sopenharmony_ci#define MWIFIEX_SIZE_OF_CMD_BUFFER	2048
32462306a36Sopenharmony_ci
32562306a36Sopenharmony_cienum {
32662306a36Sopenharmony_ci	MWIFIEX_IE_TYPE_GEN_IE = 0,
32762306a36Sopenharmony_ci	MWIFIEX_IE_TYPE_ARP_FILTER,
32862306a36Sopenharmony_ci};
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_cienum {
33162306a36Sopenharmony_ci	MWIFIEX_REG_MAC = 1,
33262306a36Sopenharmony_ci	MWIFIEX_REG_BBP,
33362306a36Sopenharmony_ci	MWIFIEX_REG_RF,
33462306a36Sopenharmony_ci	MWIFIEX_REG_PMIC,
33562306a36Sopenharmony_ci	MWIFIEX_REG_CAU,
33662306a36Sopenharmony_ci};
33762306a36Sopenharmony_ci
33862306a36Sopenharmony_cistruct mwifiex_ds_reg_rw {
33962306a36Sopenharmony_ci	u32 type;
34062306a36Sopenharmony_ci	u32 offset;
34162306a36Sopenharmony_ci	u32 value;
34262306a36Sopenharmony_ci};
34362306a36Sopenharmony_ci
34462306a36Sopenharmony_ci#define MAX_EEPROM_DATA 256
34562306a36Sopenharmony_ci
34662306a36Sopenharmony_cistruct mwifiex_ds_read_eeprom {
34762306a36Sopenharmony_ci	u16 offset;
34862306a36Sopenharmony_ci	u16 byte_count;
34962306a36Sopenharmony_ci	u8 value[MAX_EEPROM_DATA];
35062306a36Sopenharmony_ci};
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_cistruct mwifiex_ds_mem_rw {
35362306a36Sopenharmony_ci	u32 addr;
35462306a36Sopenharmony_ci	u32 value;
35562306a36Sopenharmony_ci};
35662306a36Sopenharmony_ci
35762306a36Sopenharmony_ci#define IEEE_MAX_IE_SIZE		256
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ci#define MWIFIEX_IE_HDR_SIZE	(sizeof(struct mwifiex_ie) - IEEE_MAX_IE_SIZE)
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_cistruct mwifiex_ds_misc_gen_ie {
36262306a36Sopenharmony_ci	u32 type;
36362306a36Sopenharmony_ci	u32 len;
36462306a36Sopenharmony_ci	u8 ie_data[IEEE_MAX_IE_SIZE];
36562306a36Sopenharmony_ci};
36662306a36Sopenharmony_ci
36762306a36Sopenharmony_cistruct mwifiex_ds_misc_cmd {
36862306a36Sopenharmony_ci	u32 len;
36962306a36Sopenharmony_ci	u8 cmd[MWIFIEX_SIZE_OF_CMD_BUFFER];
37062306a36Sopenharmony_ci};
37162306a36Sopenharmony_ci
37262306a36Sopenharmony_ci#define BITMASK_BCN_RSSI_LOW	BIT(0)
37362306a36Sopenharmony_ci#define BITMASK_BCN_RSSI_HIGH	BIT(4)
37462306a36Sopenharmony_ci
37562306a36Sopenharmony_cienum subsc_evt_rssi_state {
37662306a36Sopenharmony_ci	EVENT_HANDLED,
37762306a36Sopenharmony_ci	RSSI_LOW_RECVD,
37862306a36Sopenharmony_ci	RSSI_HIGH_RECVD
37962306a36Sopenharmony_ci};
38062306a36Sopenharmony_ci
38162306a36Sopenharmony_cistruct subsc_evt_cfg {
38262306a36Sopenharmony_ci	u8 abs_value;
38362306a36Sopenharmony_ci	u8 evt_freq;
38462306a36Sopenharmony_ci};
38562306a36Sopenharmony_ci
38662306a36Sopenharmony_cistruct mwifiex_ds_misc_subsc_evt {
38762306a36Sopenharmony_ci	u16 action;
38862306a36Sopenharmony_ci	u16 events;
38962306a36Sopenharmony_ci	struct subsc_evt_cfg bcn_l_rssi_cfg;
39062306a36Sopenharmony_ci	struct subsc_evt_cfg bcn_h_rssi_cfg;
39162306a36Sopenharmony_ci};
39262306a36Sopenharmony_ci
39362306a36Sopenharmony_ci#define MWIFIEX_MEF_MAX_BYTESEQ		6	/* non-adjustable */
39462306a36Sopenharmony_ci#define MWIFIEX_MEF_MAX_FILTERS		10
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_cistruct mwifiex_mef_filter {
39762306a36Sopenharmony_ci	u16 repeat;
39862306a36Sopenharmony_ci	u16 offset;
39962306a36Sopenharmony_ci	s8 byte_seq[MWIFIEX_MEF_MAX_BYTESEQ + 1];
40062306a36Sopenharmony_ci	u8 filt_type;
40162306a36Sopenharmony_ci	u8 filt_action;
40262306a36Sopenharmony_ci};
40362306a36Sopenharmony_ci
40462306a36Sopenharmony_cistruct mwifiex_mef_entry {
40562306a36Sopenharmony_ci	u8 mode;
40662306a36Sopenharmony_ci	u8 action;
40762306a36Sopenharmony_ci	struct mwifiex_mef_filter filter[MWIFIEX_MEF_MAX_FILTERS];
40862306a36Sopenharmony_ci};
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_cistruct mwifiex_ds_mef_cfg {
41162306a36Sopenharmony_ci	u32 criteria;
41262306a36Sopenharmony_ci	u16 num_entries;
41362306a36Sopenharmony_ci	struct mwifiex_mef_entry *mef_entry;
41462306a36Sopenharmony_ci};
41562306a36Sopenharmony_ci
41662306a36Sopenharmony_ci#define MWIFIEX_MAX_VSIE_LEN       (256)
41762306a36Sopenharmony_ci#define MWIFIEX_MAX_VSIE_NUM       (8)
41862306a36Sopenharmony_ci#define MWIFIEX_VSIE_MASK_CLEAR    0x00
41962306a36Sopenharmony_ci#define MWIFIEX_VSIE_MASK_SCAN     0x01
42062306a36Sopenharmony_ci#define MWIFIEX_VSIE_MASK_ASSOC    0x02
42162306a36Sopenharmony_ci#define MWIFIEX_VSIE_MASK_ADHOC    0x04
42262306a36Sopenharmony_ci#define MWIFIEX_VSIE_MASK_BGSCAN   0x08
42362306a36Sopenharmony_ci
42462306a36Sopenharmony_cienum {
42562306a36Sopenharmony_ci	MWIFIEX_FUNC_INIT = 1,
42662306a36Sopenharmony_ci	MWIFIEX_FUNC_SHUTDOWN,
42762306a36Sopenharmony_ci};
42862306a36Sopenharmony_ci
42962306a36Sopenharmony_cienum COALESCE_OPERATION {
43062306a36Sopenharmony_ci	RECV_FILTER_MATCH_TYPE_EQ = 0x80,
43162306a36Sopenharmony_ci	RECV_FILTER_MATCH_TYPE_NE,
43262306a36Sopenharmony_ci};
43362306a36Sopenharmony_ci
43462306a36Sopenharmony_cienum COALESCE_PACKET_TYPE {
43562306a36Sopenharmony_ci	PACKET_TYPE_UNICAST = 1,
43662306a36Sopenharmony_ci	PACKET_TYPE_MULTICAST = 2,
43762306a36Sopenharmony_ci	PACKET_TYPE_BROADCAST = 3
43862306a36Sopenharmony_ci};
43962306a36Sopenharmony_ci
44062306a36Sopenharmony_ci#define MWIFIEX_COALESCE_MAX_RULES	8
44162306a36Sopenharmony_ci#define MWIFIEX_COALESCE_MAX_BYTESEQ	4	/* non-adjustable */
44262306a36Sopenharmony_ci#define MWIFIEX_COALESCE_MAX_FILTERS	4
44362306a36Sopenharmony_ci#define MWIFIEX_MAX_COALESCING_DELAY	100     /* in msecs */
44462306a36Sopenharmony_ci
44562306a36Sopenharmony_cistruct filt_field_param {
44662306a36Sopenharmony_ci	u8 operation;
44762306a36Sopenharmony_ci	u8 operand_len;
44862306a36Sopenharmony_ci	u16 offset;
44962306a36Sopenharmony_ci	u8 operand_byte_stream[MWIFIEX_COALESCE_MAX_BYTESEQ];
45062306a36Sopenharmony_ci};
45162306a36Sopenharmony_ci
45262306a36Sopenharmony_cistruct mwifiex_coalesce_rule {
45362306a36Sopenharmony_ci	u16 max_coalescing_delay;
45462306a36Sopenharmony_ci	u8 num_of_fields;
45562306a36Sopenharmony_ci	u8 pkt_type;
45662306a36Sopenharmony_ci	struct filt_field_param params[MWIFIEX_COALESCE_MAX_FILTERS];
45762306a36Sopenharmony_ci};
45862306a36Sopenharmony_ci
45962306a36Sopenharmony_cistruct mwifiex_ds_coalesce_cfg {
46062306a36Sopenharmony_ci	u16 num_of_rules;
46162306a36Sopenharmony_ci	struct mwifiex_coalesce_rule rule[MWIFIEX_COALESCE_MAX_RULES];
46262306a36Sopenharmony_ci};
46362306a36Sopenharmony_ci
46462306a36Sopenharmony_cistruct mwifiex_ds_tdls_oper {
46562306a36Sopenharmony_ci	u16 tdls_action;
46662306a36Sopenharmony_ci	u8 peer_mac[ETH_ALEN];
46762306a36Sopenharmony_ci	u16 capability;
46862306a36Sopenharmony_ci	u8 qos_info;
46962306a36Sopenharmony_ci	u8 *ext_capab;
47062306a36Sopenharmony_ci	u8 ext_capab_len;
47162306a36Sopenharmony_ci	u8 *supp_rates;
47262306a36Sopenharmony_ci	u8 supp_rates_len;
47362306a36Sopenharmony_ci	u8 *ht_capab;
47462306a36Sopenharmony_ci};
47562306a36Sopenharmony_ci
47662306a36Sopenharmony_ci#endif /* !_MWIFIEX_IOCTL_H_ */
477