mirror of
https://github.com/nxp-imx/mwifiex.git
synced 2025-01-16 00:35:33 +00:00
2968 lines
80 KiB
C
2968 lines
80 KiB
C
|
/** @file mlanutl.h
|
||
|
*
|
||
|
* @brief This file contains definitions for application
|
||
|
*
|
||
|
* Copyright (C) 2011-2019, Marvell International Ltd.
|
||
|
*
|
||
|
* This software file (the "File") is distributed by Marvell International
|
||
|
* Ltd. under the terms of the GNU General Public License Version 2, June 1991
|
||
|
* (the "License"). You may use, redistribute and/or modify this File in
|
||
|
* accordance with the terms and conditions of the License, a copy of which
|
||
|
* is available by writing to the Free Software Foundation, Inc.,
|
||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
|
||
|
* worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
|
||
|
*
|
||
|
* THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
|
||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
|
||
|
* ARE EXPRESSLY DISCLAIMED. The License provides additional details about
|
||
|
* this warranty disclaimer.
|
||
|
*
|
||
|
*/
|
||
|
/************************************************************************
|
||
|
Change log:
|
||
|
11/26/2008: initial version
|
||
|
************************************************************************/
|
||
|
#ifndef _MLANUTL_H_
|
||
|
#define _MLANUTL_H_
|
||
|
|
||
|
/** Include header files */
|
||
|
#include <stdio.h>
|
||
|
#include <unistd.h>
|
||
|
#include <string.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <ctype.h>
|
||
|
#include <sys/socket.h>
|
||
|
#include <sys/ioctl.h>
|
||
|
#include <errno.h>
|
||
|
#include <linux/if.h>
|
||
|
#include <linux/wireless.h>
|
||
|
#include <sys/types.h>
|
||
|
#include <sys/time.h>
|
||
|
#include <arpa/inet.h>
|
||
|
|
||
|
#include <netinet/ether.h>
|
||
|
#include <linux/if_packet.h>
|
||
|
|
||
|
/** Type definition: boolean */
|
||
|
typedef enum { FALSE, TRUE } boolean;
|
||
|
|
||
|
/** 16 bits byte swap */
|
||
|
#define swap_byte_16(x) \
|
||
|
((t_u16)((((t_u16)(x) & 0x00ffU) << 8) | \
|
||
|
(((t_u16)(x) & 0xff00U) >> 8)))
|
||
|
|
||
|
/** 32 bits byte swap */
|
||
|
#define swap_byte_32(x) \
|
||
|
((t_u32)((((t_u32)(x) & 0x000000ffUL) << 24) | \
|
||
|
(((t_u32)(x) & 0x0000ff00UL) << 8) | \
|
||
|
(((t_u32)(x) & 0x00ff0000UL) >> 8) | \
|
||
|
(((t_u32)(x) & 0xff000000UL) >> 24)))
|
||
|
|
||
|
/** Convert to correct endian format */
|
||
|
#ifdef BIG_ENDIAN_SUPPORT
|
||
|
/** CPU to little-endian convert for 16-bit */
|
||
|
#define cpu_to_le16(x) swap_byte_16(x)
|
||
|
/** CPU to little-endian convert for 32-bit */
|
||
|
#define cpu_to_le32(x) swap_byte_32(x)
|
||
|
/** Little-endian to CPU convert for 16-bit */
|
||
|
#define le16_to_cpu(x) swap_byte_16(x)
|
||
|
/** Little-endian to CPU convert for 32-bit */
|
||
|
#define le32_to_cpu(x) swap_byte_32(x)
|
||
|
#else
|
||
|
/** Do nothing */
|
||
|
#define cpu_to_le16(x) (x)
|
||
|
/** Do nothing */
|
||
|
#define cpu_to_le32(x) (x)
|
||
|
/** Do nothing */
|
||
|
#define le16_to_cpu(x) (x)
|
||
|
/** Do nothing */
|
||
|
#define le32_to_cpu(x) (x)
|
||
|
#endif
|
||
|
|
||
|
/** TLV header */
|
||
|
#define TLVHEADER /** Tag */ \
|
||
|
t_u16 tag; \
|
||
|
/** Length */ \
|
||
|
t_u16 length
|
||
|
|
||
|
/** Length of TLV header */
|
||
|
#define TLVHEADER_LEN 4
|
||
|
|
||
|
/** Character, 1 byte */
|
||
|
typedef signed char t_s8;
|
||
|
/** Unsigned character, 1 byte */
|
||
|
typedef unsigned char t_u8;
|
||
|
|
||
|
/** Short integer */
|
||
|
typedef signed short t_s16;
|
||
|
/** Unsigned short integer */
|
||
|
typedef unsigned short t_u16;
|
||
|
|
||
|
/** Integer */
|
||
|
typedef signed int t_s32;
|
||
|
/** Unsigned integer */
|
||
|
typedef unsigned int t_u32;
|
||
|
|
||
|
/** Long long integer */
|
||
|
typedef signed long long t_s64;
|
||
|
/** Unsigned long long integer */
|
||
|
typedef unsigned long long t_u64;
|
||
|
|
||
|
/** Void pointer (4-bytes) */
|
||
|
typedef void t_void;
|
||
|
|
||
|
/** The attribute pack used for structure packing */
|
||
|
#ifndef __ATTRIB_PACK__
|
||
|
#define __ATTRIB_PACK__ __attribute__((packed))
|
||
|
#endif
|
||
|
|
||
|
/** Success */
|
||
|
#define MLAN_STATUS_SUCCESS (0)
|
||
|
/** Failure */
|
||
|
#define MLAN_STATUS_FAILURE (-1)
|
||
|
/** Not found */
|
||
|
#define MLAN_STATUS_NOTFOUND (1)
|
||
|
|
||
|
/** IOCTL number */
|
||
|
#define MLAN_ETH_PRIV (SIOCDEVPRIVATE + 14)
|
||
|
|
||
|
/** Command buffer max length */
|
||
|
#define BUFFER_LENGTH (2 * 1024)
|
||
|
|
||
|
/** Find number of elements */
|
||
|
#define NELEMENTS(x) (sizeof(x)/sizeof(x[0]))
|
||
|
|
||
|
/** BIT value */
|
||
|
#define MBIT(x) (((t_u32)1) << (x))
|
||
|
|
||
|
#ifndef MIN
|
||
|
/** Find minimum value */
|
||
|
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
||
|
#endif /* MIN */
|
||
|
|
||
|
/** Length of ethernet address */
|
||
|
#ifndef ETH_ALEN
|
||
|
#define ETH_ALEN 6
|
||
|
#endif
|
||
|
|
||
|
/** Action field value : get */
|
||
|
#define ACTION_GET 0
|
||
|
/** Action field value : set */
|
||
|
#define ACTION_SET 1
|
||
|
|
||
|
/** Channel usability flags */
|
||
|
#define MARVELL_CHANNEL_DISABLED MBIT(7)
|
||
|
#define MARVELL_CHANNEL_NOHT160 MBIT(4)
|
||
|
#define MARVELL_CHANNEL_NOHT80 MBIT(3)
|
||
|
#define MARVELL_CHANNEL_NOHT40 MBIT(2)
|
||
|
#define MARVELL_CHANNEL_DFS MBIT(1)
|
||
|
#define MARVELL_CHANNEL_PASSIVE MBIT(0)
|
||
|
|
||
|
char mod_conv_bg_1x1[10][35] = { "CCK (1,2,5.5,11 Mbps)",
|
||
|
"OFDM_PSK (6,9,12,18 Mbps)",
|
||
|
"OFDM_QAM16 (24,36 Mbps)",
|
||
|
"OFDM_QAM64 (48,54 Mbps)",
|
||
|
"HT_20_PSK (MCS 0,1,2)",
|
||
|
"HT_20_QAM16 (MCS 3,4)",
|
||
|
"HT_20_QAM64 (MCS 5,6,7)",
|
||
|
"HT_40_PSK (MCS 0,1,2)",
|
||
|
"HT_40_QAM16 (MCS 3,4)",
|
||
|
"HT_40_QAM64 (MCS 5,6,7)"
|
||
|
};
|
||
|
|
||
|
char mod_conv_a_1x1[6][35] = { "VHT_20_QAM256 (MCS 8)",
|
||
|
"VHT_40_QAM256 (MCS 8,9)",
|
||
|
"VHT_80_PSK (MCS 0,1,2)",
|
||
|
"VHT_80_QAM16 (MCS 3,4)",
|
||
|
"VHT_80_QAM64 (MCS 5,6,7)",
|
||
|
"VHT_80_QAM256 (MCS 8,9)"
|
||
|
};
|
||
|
|
||
|
char mod_conv_bg_2x2[6][35] = { "HT2_20_PSK (MCS 8,9,10)",
|
||
|
"HT2_20_QAM16 (MCS 11,12)",
|
||
|
"HT2_20_QAM64 (MCS 13,14,15)",
|
||
|
"HT2_40_PSK (MCS 8,9,10)",
|
||
|
"HT2_40_QAM16 (MCS 11,12)",
|
||
|
"HT2_40_QAM64 (MCS 13,14,15)"
|
||
|
};
|
||
|
|
||
|
char mod_conv_a_2x2[6][35] = { "VHT2_20_QAM256 (MCS 8)",
|
||
|
"VHT2_40_QAM256 (MCS 8,9)",
|
||
|
"VHT2_80_PSK (MCS 0,1,2)",
|
||
|
"VHT2_80_QAM16 (MCS 3,4)",
|
||
|
"VHT2_80_QAM64 (MCS 5,6,7)",
|
||
|
"VHT2_80_QAM256 (MCS 8,9)"
|
||
|
};
|
||
|
|
||
|
/** Socket */
|
||
|
extern t_s32 sockfd;
|
||
|
|
||
|
/** Device name */
|
||
|
extern char dev_name[IFNAMSIZ + 1];
|
||
|
|
||
|
#define HOSTCMD "hostcmd"
|
||
|
|
||
|
/** Marvell private command identifier */
|
||
|
#define CMD_MARVELL "MRVL_CMD"
|
||
|
|
||
|
struct command_node {
|
||
|
char *name;
|
||
|
int (*handler) (int, char **);
|
||
|
};
|
||
|
|
||
|
/** Private command structure */
|
||
|
#ifdef USERSPACE_32BIT_OVER_KERNEL_64BIT
|
||
|
struct eth_priv_cmd {
|
||
|
/** Command buffer pointer */
|
||
|
t_u64 buf;
|
||
|
/** buffer updated by driver */
|
||
|
int used_len;
|
||
|
/** buffer sent by application */
|
||
|
int total_len;
|
||
|
} __ATTRIB_PACK__;
|
||
|
#else
|
||
|
struct eth_priv_cmd {
|
||
|
/** Command buffer */
|
||
|
t_u8 *buf;
|
||
|
/** Used length */
|
||
|
int used_len;
|
||
|
/** Total length */
|
||
|
int total_len;
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#if defined(STA_SUPPORT)
|
||
|
struct eth_priv_pmfcfg {
|
||
|
/* Management Frame Protection Capability */
|
||
|
t_u8 mfpc;
|
||
|
/* Management Frame Protection Required */
|
||
|
t_u8 mfpr;
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
struct eth_priv_htcapinfo {
|
||
|
t_u32 ht_cap_info_bg;
|
||
|
t_u32 ht_cap_info_a;
|
||
|
};
|
||
|
|
||
|
struct eth_priv_addba {
|
||
|
t_u32 time_out;
|
||
|
t_u32 tx_win_size;
|
||
|
t_u32 rx_win_size;
|
||
|
t_u32 tx_amsdu;
|
||
|
t_u32 rx_amsdu;
|
||
|
};
|
||
|
|
||
|
/** data_structure for cmd vhtcfg */
|
||
|
struct eth_priv_vhtcfg {
|
||
|
/** Band (1: 2.4G, 2: 5 G, 3: both 2.4G and 5G) */
|
||
|
t_u32 band;
|
||
|
/** TxRx (1: Tx, 2: Rx, 3: both Tx and Rx) */
|
||
|
t_u32 txrx;
|
||
|
/** BW CFG (0: 11N CFG, 1: vhtcap) */
|
||
|
t_u32 bwcfg;
|
||
|
/** VHT capabilities. */
|
||
|
t_u32 vht_cap_info;
|
||
|
/** VHT Tx mcs */
|
||
|
t_u32 vht_tx_mcs;
|
||
|
/** VHT Rx mcs */
|
||
|
t_u32 vht_rx_mcs;
|
||
|
/** VHT rx max rate */
|
||
|
t_u16 vht_rx_max_rate;
|
||
|
/** VHT max tx rate */
|
||
|
t_u16 vht_tx_max_rate;
|
||
|
};
|
||
|
|
||
|
/** data_structure for cmd opermodecfg */
|
||
|
struct eth_priv_opermodecfg {
|
||
|
/** channel width: 1-20MHz, 2-40MHz, 3-80MHz, 4-160MHz or 80+80MHz */
|
||
|
t_u8 bw;
|
||
|
/** Rx NSS */
|
||
|
t_u8 nss;
|
||
|
};
|
||
|
|
||
|
/** data structure for cmd getdatarate */
|
||
|
struct eth_priv_data_rate {
|
||
|
/** Tx data rate */
|
||
|
t_u32 tx_data_rate;
|
||
|
/** Rx data rate */
|
||
|
t_u32 rx_data_rate;
|
||
|
|
||
|
/** Tx channel bandwidth */
|
||
|
t_u32 tx_bw;
|
||
|
/** Tx guard interval */
|
||
|
t_u32 tx_gi;
|
||
|
/** Rx channel bandwidth */
|
||
|
t_u32 rx_bw;
|
||
|
/** Rx guard interval */
|
||
|
t_u32 rx_gi;
|
||
|
/** MCS index */
|
||
|
t_u32 tx_mcs_index;
|
||
|
t_u32 rx_mcs_index;
|
||
|
/** NSS */
|
||
|
t_u32 tx_nss;
|
||
|
t_u32 rx_nss;
|
||
|
/* LG rate: 0, HT rate: 1, VHT rate: 2 */
|
||
|
t_u32 tx_rate_format;
|
||
|
t_u32 rx_rate_format;
|
||
|
};
|
||
|
|
||
|
/** data structure for cmd bandcfg */
|
||
|
struct eth_priv_bandcfg {
|
||
|
/** Infra band */
|
||
|
t_u32 config_bands;
|
||
|
/** Ad-hoc start band */
|
||
|
t_u32 adhoc_start_band;
|
||
|
/** Ad-hoc start channel */
|
||
|
t_u32 adhoc_channel;
|
||
|
/** fw supported band */
|
||
|
t_u32 fw_bands;
|
||
|
};
|
||
|
|
||
|
/** data structure for cmd txratecfg */
|
||
|
struct eth_priv_tx_rate_cfg {
|
||
|
/* LG rate: 0, HT rate: 1, VHT rate: 2 */
|
||
|
t_u32 rate_format;
|
||
|
/** Rate/MCS index (0xFF: auto) */
|
||
|
t_u32 rate_index;
|
||
|
/** Rate rate */
|
||
|
t_u32 rate;
|
||
|
/** NSS */
|
||
|
t_u32 nss;
|
||
|
};
|
||
|
|
||
|
/** data structure for cmd getlog */
|
||
|
struct eth_priv_get_log {
|
||
|
/** Multicast transmitted frame count */
|
||
|
t_u32 mcast_tx_frame;
|
||
|
/** Failure count */
|
||
|
t_u32 failed;
|
||
|
/** Retry count */
|
||
|
t_u32 retry;
|
||
|
/** Multi entry count */
|
||
|
t_u32 multi_retry;
|
||
|
/** Duplicate frame count */
|
||
|
t_u32 frame_dup;
|
||
|
/** RTS success count */
|
||
|
t_u32 rts_success;
|
||
|
/** RTS failure count */
|
||
|
t_u32 rts_failure;
|
||
|
/** Ack failure count */
|
||
|
t_u32 ack_failure;
|
||
|
/** Rx fragmentation count */
|
||
|
t_u32 rx_frag;
|
||
|
/** Multicast Tx frame count */
|
||
|
t_u32 mcast_rx_frame;
|
||
|
/** FCS error count */
|
||
|
t_u32 fcs_error;
|
||
|
/** Tx frame count */
|
||
|
t_u32 tx_frame;
|
||
|
/** WEP ICV error count */
|
||
|
t_u32 wep_icv_error[4];
|
||
|
/** beacon recv count */
|
||
|
t_u32 bcn_rcv_cnt;
|
||
|
/** beacon miss count */
|
||
|
t_u32 bcn_miss_cnt;
|
||
|
/** Tx frag count */
|
||
|
t_u32 tx_frag_cnt;
|
||
|
/** Qos Tx frag count */
|
||
|
t_u32 qos_tx_frag_cnt[8];
|
||
|
/** Qos failed count */
|
||
|
t_u32 qos_failed_cnt[8];
|
||
|
/** Qos retry count */
|
||
|
t_u32 qos_retry_cnt[8];
|
||
|
/** Qos multi retry count */
|
||
|
t_u32 qos_multi_retry_cnt[8];
|
||
|
/** Qos frame dup count */
|
||
|
t_u32 qos_frm_dup_cnt[8];
|
||
|
/** Qos rts success count */
|
||
|
t_u32 qos_rts_suc_cnt[8];
|
||
|
/** Qos rts failure count */
|
||
|
t_u32 qos_rts_failure_cnt[8];
|
||
|
/** Qos ack failure count */
|
||
|
t_u32 qos_ack_failure_cnt[8];
|
||
|
/** Qos Rx frag count */
|
||
|
t_u32 qos_rx_frag_cnt[8];
|
||
|
/** Qos Tx frame count */
|
||
|
t_u32 qos_tx_frm_cnt[8];
|
||
|
/** Qos discarded frame count */
|
||
|
t_u32 qos_discarded_frm_cnt[8];
|
||
|
/** Qos mpdus Rx count */
|
||
|
t_u32 qos_mpdus_rx_cnt[8];
|
||
|
/** Qos retry rx count */
|
||
|
t_u32 qos_retries_rx_cnt[8];
|
||
|
/** CMACICV errors count */
|
||
|
t_u32 cmacicv_errors;
|
||
|
/** CMAC replays count */
|
||
|
t_u32 cmac_replays;
|
||
|
/** mgmt CCMP replays count */
|
||
|
t_u32 mgmt_ccmp_replays;
|
||
|
/** TKIP ICV errors count */
|
||
|
t_u32 tkipicv_errors;
|
||
|
/** TKIP replays count */
|
||
|
t_u32 tkip_replays;
|
||
|
/** CCMP decrypt errors count */
|
||
|
t_u32 ccmp_decrypt_errors;
|
||
|
/** CCMP replays count */
|
||
|
t_u32 ccmp_replays;
|
||
|
/** Tx amsdu count */
|
||
|
t_u32 tx_amsdu_cnt;
|
||
|
/** failed amsdu count */
|
||
|
t_u32 failed_amsdu_cnt;
|
||
|
/** retry amsdu count */
|
||
|
t_u32 retry_amsdu_cnt;
|
||
|
/** multi-retry amsdu count */
|
||
|
t_u32 multi_retry_amsdu_cnt;
|
||
|
/** Tx octets in amsdu count */
|
||
|
t_u64 tx_octets_in_amsdu_cnt;
|
||
|
/** amsdu ack failure count */
|
||
|
t_u32 amsdu_ack_failure_cnt;
|
||
|
/** Rx amsdu count */
|
||
|
t_u32 rx_amsdu_cnt;
|
||
|
/** Rx octets in amsdu count */
|
||
|
t_u64 rx_octets_in_amsdu_cnt;
|
||
|
/** Tx ampdu count */
|
||
|
t_u32 tx_ampdu_cnt;
|
||
|
/** tx mpdus in ampdu count */
|
||
|
t_u32 tx_mpdus_in_ampdu_cnt;
|
||
|
/** tx octets in ampdu count */
|
||
|
t_u64 tx_octets_in_ampdu_cnt;
|
||
|
/** ampdu Rx count */
|
||
|
t_u32 ampdu_rx_cnt;
|
||
|
/** mpdu in Rx ampdu count */
|
||
|
t_u32 mpdu_in_rx_ampdu_cnt;
|
||
|
/** Rx octets ampdu count */
|
||
|
t_u64 rx_octets_in_ampdu_cnt;
|
||
|
/** ampdu delimiter CRC error count */
|
||
|
t_u32 ampdu_delimiter_crc_error_cnt;
|
||
|
};
|
||
|
|
||
|
struct eth_priv_esuppmode_cfg {
|
||
|
/* RSN mode */
|
||
|
t_u16 rsn_mode;
|
||
|
/* Pairwise cipher */
|
||
|
t_u8 pairwise_cipher;
|
||
|
/* Group cipher */
|
||
|
t_u8 group_cipher;
|
||
|
};
|
||
|
|
||
|
/** MLAN MAC Address Length */
|
||
|
#define MLAN_MAC_ADDR_LENGTH 6
|
||
|
#ifdef UAP_SUPPORT
|
||
|
/** Max clients supported by AP */
|
||
|
#define MAX_AP_CLIENTS 10
|
||
|
|
||
|
/** associated station info */
|
||
|
struct ap_client_info {
|
||
|
/** STA MAC address */
|
||
|
t_u8 mac_address[MLAN_MAC_ADDR_LENGTH];
|
||
|
/** Power mfg status */
|
||
|
t_u8 power_mfg_status;
|
||
|
/** RSSI */
|
||
|
t_s8 rssi;
|
||
|
};
|
||
|
|
||
|
/** Type definition of eth_priv_getstalist */
|
||
|
struct eth_priv_getstalist {
|
||
|
/** station count */
|
||
|
t_u16 sta_count;
|
||
|
/** station list */
|
||
|
struct ap_client_info client_info[MAX_AP_CLIENTS];
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
#define COUNTRY_CODE_LEN 3
|
||
|
/** Type definition of eth_priv_countrycode for CMD_COUNTRYCODE */
|
||
|
struct eth_priv_countrycode {
|
||
|
/** Country Code */
|
||
|
t_u8 country_code[COUNTRY_CODE_LEN];
|
||
|
};
|
||
|
|
||
|
/** Type definition of mlan_ds_hs_cfg for MLAN_OID_PM_CFG_HS_CFG */
|
||
|
struct eth_priv_hs_cfg {
|
||
|
/** MTRUE to invoke the HostCmd, MFALSE otherwise */
|
||
|
t_u32 is_invoke_hostcmd;
|
||
|
/** Host sleep config condition */
|
||
|
/** Bit0: broadcast data
|
||
|
* Bit1: unicast data
|
||
|
* Bit2: mac event
|
||
|
* Bit3: multicast data
|
||
|
*/
|
||
|
t_u32 conditions;
|
||
|
/** GPIO pin or 0xff for interface */
|
||
|
t_u32 gpio;
|
||
|
/** Gap in milliseconds or or 0xff for special setting when GPIO is used to wakeup host */
|
||
|
t_u32 gap;
|
||
|
/** Host sleep wake interval */
|
||
|
t_u32 hs_wake_interval;
|
||
|
/** Parameter type*/
|
||
|
t_u8 param_type_ind;
|
||
|
/** Indication GPIO pin number */
|
||
|
t_u32 ind_gpio;
|
||
|
/** Level on ind_GPIO pin for normal wakeup source */
|
||
|
t_u32 level;
|
||
|
/** Parameter type*/
|
||
|
t_u8 param_type_ext;
|
||
|
/** Force ignore events*/
|
||
|
t_u32 event_force_ignore;
|
||
|
/** Events use ext gap to wake up host*/
|
||
|
t_u32 event_use_ext_gap;
|
||
|
/** Ext gap*/
|
||
|
t_u8 ext_gap;
|
||
|
/** GPIO wave level*/
|
||
|
t_u8 gpio_wave;
|
||
|
};
|
||
|
|
||
|
typedef struct _eth_priv_mgmt_frame_wakeup {
|
||
|
/** action - bitmap
|
||
|
** On matching rx'd pkt and filter during NON_HOSTSLEEP mode:
|
||
|
** Action[1]=0 Discard
|
||
|
** Action[1]=1 Allow
|
||
|
** Note that default action on non-match is "Allow".
|
||
|
**
|
||
|
** On matching rx'd pkt and filter during HOSTSLEEP mode:
|
||
|
** Action[1:0]=00 Discard and Not Wake host
|
||
|
** Action[1:0]=01 Discard and Wake host
|
||
|
** Action[1:0]=10 Invalid
|
||
|
** Note that default action on non-match is "Discard and Not Wake host".
|
||
|
**/
|
||
|
t_u32 action;
|
||
|
/** Frame type(p2p, tdls...)
|
||
|
** type=0: invalid
|
||
|
** type=1: p2p
|
||
|
** type=0xff: management frames(assoc res/rsp,probe req/rsp,...)
|
||
|
** type=others: reserved
|
||
|
**/
|
||
|
t_u32 type;
|
||
|
/** Frame mask according to each type
|
||
|
** When type=1 for p2p, frame-mask have following define:
|
||
|
** Bit Frame
|
||
|
** 0 GO Negotiation Request
|
||
|
** 1 GO Negotiation Response
|
||
|
** 2 GO Negotiation Confirmation
|
||
|
** 3 P2P Invitation Request
|
||
|
** 4 P2P Invitation Response
|
||
|
** 5 Device Discoverability Request
|
||
|
** 6 Device Discoverability Response
|
||
|
** 7 Provision Discovery Request
|
||
|
** 8 Provision Discovery Response
|
||
|
** 9 Notice of Absence
|
||
|
** 10 P2P Presence Request
|
||
|
** 11 P2P Presence Response
|
||
|
** 12 GO Discoverability Request
|
||
|
** 13-31 Reserved
|
||
|
**
|
||
|
** When type=others, frame-mask is reserved.
|
||
|
**/
|
||
|
t_u32 frame_mask;
|
||
|
} eth_priv_mgmt_frame_wakeup;
|
||
|
|
||
|
/** Type definition of eth_priv_scan_time_params */
|
||
|
struct eth_priv_scan_time_params {
|
||
|
/** Scan channel time for specific scan in milliseconds */
|
||
|
t_u32 specific_scan_time;
|
||
|
/** Scan channel time for active scan in milliseconds */
|
||
|
t_u32 active_scan_time;
|
||
|
/** Scan channel time for passive scan in milliseconds */
|
||
|
t_u32 passive_scan_time;
|
||
|
};
|
||
|
|
||
|
/** Type definition of eth_priv_scan_cfg */
|
||
|
struct eth_priv_scan_cfg {
|
||
|
/** Scan type */
|
||
|
t_u32 scan_type;
|
||
|
/** BSS mode for scanning */
|
||
|
t_u32 scan_mode;
|
||
|
/** Scan probe */
|
||
|
t_u32 scan_probe;
|
||
|
/** Scan time parameters */
|
||
|
struct eth_priv_scan_time_params scan_time;
|
||
|
/** First passive scan then active scan */
|
||
|
t_u8 passive_to_active_scan;
|
||
|
/** Extended Scan */
|
||
|
t_u32 ext_scan;
|
||
|
};
|
||
|
|
||
|
enum _mlan_rate_format {
|
||
|
MLAN_RATE_FORMAT_LG = 0,
|
||
|
MLAN_RATE_FORMAT_HT,
|
||
|
MLAN_RATE_FORMAT_VHT,
|
||
|
MLAN_RATE_FORMAT_AUTO = 0xFF,
|
||
|
};
|
||
|
|
||
|
/** HT channel bandwidth */
|
||
|
typedef enum _mlan_ht_bw {
|
||
|
MLAN_HT_BW20,
|
||
|
MLAN_HT_BW40,
|
||
|
/** VHT channel bandwidth */
|
||
|
MLAN_VHT_BW80,
|
||
|
MLAN_VHT_BW160,
|
||
|
} mlan_ht_bw;
|
||
|
/** Type definition of mlan_power group info */
|
||
|
struct eth_priv_power_group {
|
||
|
/** rate format (LG rate: 0; HT rate: 1; VHT rate: 2; no auto ctrl: 0xFF) */
|
||
|
t_u32 rate_format;
|
||
|
/** bandwidth (LG: 20 MHz; HT: 20/40 MHz; VHT: 80/160/80+80 MHz) */
|
||
|
t_u8 bandwidth;
|
||
|
/** NSS */
|
||
|
t_u32 nss;
|
||
|
/** LG: first rate index; HT/VHT: first MCS */
|
||
|
t_u8 first_rate_ind;
|
||
|
/** LG: last rate index; HT/VHT: last MCS */
|
||
|
t_u8 last_rate_ind;
|
||
|
/** minmum tx power (dBm) */
|
||
|
t_s8 power_min;
|
||
|
/** maximum tx power (dBm) */
|
||
|
t_s8 power_max;
|
||
|
/** tx power step (dB) */
|
||
|
t_s8 power_step;
|
||
|
};
|
||
|
|
||
|
/** max of power groups */
|
||
|
#define MAX_POWER_GROUP 64
|
||
|
/** Type definition of mlan_power_cfg_ext */
|
||
|
struct eth_priv_power_cfg_ext {
|
||
|
/** number of power_groups */
|
||
|
t_u32 num_pwr_grp;
|
||
|
/** array of power groups */
|
||
|
struct eth_priv_power_group power_group[MAX_POWER_GROUP];
|
||
|
};
|
||
|
|
||
|
/** Type definition of eth_priv_ds_ps_cfg */
|
||
|
struct eth_priv_ds_ps_cfg {
|
||
|
/** PS null interval in seconds */
|
||
|
t_u32 ps_null_interval;
|
||
|
/** Multiple DTIM interval */
|
||
|
t_u32 multiple_dtim_interval;
|
||
|
/** Listen interval */
|
||
|
t_u32 listen_interval;
|
||
|
/** Beacon miss timeout in milliseconds */
|
||
|
t_u32 bcn_miss_timeout;
|
||
|
/** Delay to PS in milliseconds */
|
||
|
t_s32 delay_to_ps;
|
||
|
/** PS mode */
|
||
|
t_u32 ps_mode;
|
||
|
};
|
||
|
|
||
|
#ifdef STA_SUPPORT
|
||
|
|
||
|
/** Maximum length of SSID */
|
||
|
#define MRVDRV_MAX_SSID_LENGTH 32
|
||
|
|
||
|
/** Maximum length of SSID list */
|
||
|
#define MRVDRV_MAX_SSID_LIST_LENGTH 10
|
||
|
|
||
|
/** Maximum number of channels that can be sent in a setuserscan ioctl */
|
||
|
#define WLAN_IOCTL_USER_SCAN_CHAN_MAX 50
|
||
|
|
||
|
/** Maximum channel scratch */
|
||
|
#define MAX_CHAN_SCRATCH 100
|
||
|
|
||
|
/** Maximum channel number for b/g band */
|
||
|
#define MAX_CHAN_BG_BAND 14
|
||
|
|
||
|
/** Maximum number of probes to send on each channel */
|
||
|
#define MAX_PROBES 4
|
||
|
|
||
|
/** Scan all the channels in specified band */
|
||
|
#define BAND_SPECIFIED 0x80
|
||
|
|
||
|
/** Maximum size of IEEE Information Elements */
|
||
|
#define IEEE_MAX_IE_SIZE 256
|
||
|
|
||
|
/** Maximum number of TID */
|
||
|
#define MAX_NUM_TID 8
|
||
|
|
||
|
/** Type enumeration of WMM AC_QUEUES */
|
||
|
typedef enum _mlan_wmm_ac_e {
|
||
|
WMM_AC_BK,
|
||
|
WMM_AC_BE,
|
||
|
WMM_AC_VI,
|
||
|
WMM_AC_VO
|
||
|
} __ATTRIB_PACK__ mlan_wmm_ac_e;
|
||
|
|
||
|
/** Enumeration for scan mode */
|
||
|
enum {
|
||
|
MLAN_SCAN_MODE_UNCHANGED = 0,
|
||
|
MLAN_SCAN_MODE_BSS,
|
||
|
MLAN_SCAN_MODE_IBSS,
|
||
|
MLAN_SCAN_MODE_ANY
|
||
|
};
|
||
|
|
||
|
/** Enumeration for scan type */
|
||
|
enum {
|
||
|
MLAN_SCAN_TYPE_UNCHANGED = 0,
|
||
|
MLAN_SCAN_TYPE_ACTIVE,
|
||
|
MLAN_SCAN_TYPE_PASSIVE
|
||
|
};
|
||
|
|
||
|
/** Enumeration for passive to active scan */
|
||
|
enum _mlan_pass_to_act_scan {
|
||
|
MLAN_PASS_TO_ACT_SCAN_UNCHANGED = 0,
|
||
|
MLAN_PASS_TO_ACT_SCAN_EN,
|
||
|
MLAN_PASS_TO_ACT_SCAN_DIS
|
||
|
};
|
||
|
|
||
|
/** IEEE Type definitions */
|
||
|
typedef enum _IEEEtypes_ElementId_e {
|
||
|
SSID = 0,
|
||
|
SUPPORTED_RATES = 1,
|
||
|
FH_PARAM_SET = 2,
|
||
|
DS_PARAM_SET = 3,
|
||
|
CF_PARAM_SET = 4,
|
||
|
|
||
|
IBSS_PARAM_SET = 6,
|
||
|
|
||
|
COUNTRY_INFO = 7,
|
||
|
|
||
|
TCLAS = 14,
|
||
|
|
||
|
POWER_CONSTRAINT = 32,
|
||
|
POWER_CAPABILITY = 33,
|
||
|
TPC_REQUEST = 34,
|
||
|
TPC_REPORT = 35,
|
||
|
SUPPORTED_CHANNELS = 36,
|
||
|
CHANNEL_SWITCH_ANN = 37,
|
||
|
QUIET = 40,
|
||
|
IBSS_DFS = 41,
|
||
|
HT_CAPABILITY = 45,
|
||
|
HT_OPERATION = 61,
|
||
|
BSSCO_2040 = 72,
|
||
|
OVERLAPBSSSCANPARAM = 74,
|
||
|
EXT_CAPABILITY = 127,
|
||
|
|
||
|
VHT_CAPABILITY = 191,
|
||
|
VHT_OPERATION = 192,
|
||
|
EXT_BSS_LOAD = 193,
|
||
|
BW_CHANNEL_SWITCH = 194,
|
||
|
VHT_TX_POWER_ENV = 195,
|
||
|
EXT_POWER_CONSTR = 196,
|
||
|
AID_INFO = 197,
|
||
|
QUIET_CHAN = 198,
|
||
|
OPER_MODE_NTF = 199,
|
||
|
|
||
|
ERP_INFO = 42,
|
||
|
EXTENDED_SUPPORTED_RATES = 50,
|
||
|
|
||
|
VENDOR_SPECIFIC_221 = 221,
|
||
|
WMM_IE = VENDOR_SPECIFIC_221,
|
||
|
|
||
|
WPS_IE = VENDOR_SPECIFIC_221,
|
||
|
|
||
|
WPA_IE = VENDOR_SPECIFIC_221,
|
||
|
RSN_IE = 48,
|
||
|
} __ATTRIB_PACK__ IEEEtypes_ElementId_e;
|
||
|
|
||
|
/** Capability Bit Map*/
|
||
|
#ifdef BIG_ENDIAN_SUPPORT
|
||
|
typedef struct _IEEEtypes_CapInfo_t {
|
||
|
t_u8 rsrvd1:2;
|
||
|
t_u8 dsss_ofdm:1;
|
||
|
t_u8 rsvrd2:2;
|
||
|
t_u8 short_slot_time:1;
|
||
|
t_u8 rsrvd3:1;
|
||
|
t_u8 spectrum_mgmt:1;
|
||
|
t_u8 chan_agility:1;
|
||
|
t_u8 pbcc:1;
|
||
|
t_u8 short_preamble:1;
|
||
|
t_u8 privacy:1;
|
||
|
t_u8 cf_poll_rqst:1;
|
||
|
t_u8 cf_pollable:1;
|
||
|
t_u8 ibss:1;
|
||
|
t_u8 ess:1;
|
||
|
} __ATTRIB_PACK__ IEEEtypes_CapInfo_t, *pIEEEtypes_CapInfo_t;
|
||
|
#else
|
||
|
typedef struct _IEEEtypes_CapInfo_t {
|
||
|
/** Capability Bit Map : ESS */
|
||
|
t_u8 ess:1;
|
||
|
/** Capability Bit Map : IBSS */
|
||
|
t_u8 ibss:1;
|
||
|
/** Capability Bit Map : CF pollable */
|
||
|
t_u8 cf_pollable:1;
|
||
|
/** Capability Bit Map : CF poll request */
|
||
|
t_u8 cf_poll_rqst:1;
|
||
|
/** Capability Bit Map : privacy */
|
||
|
t_u8 privacy:1;
|
||
|
/** Capability Bit Map : Short preamble */
|
||
|
t_u8 short_preamble:1;
|
||
|
/** Capability Bit Map : PBCC */
|
||
|
t_u8 pbcc:1;
|
||
|
/** Capability Bit Map : Channel agility */
|
||
|
t_u8 chan_agility:1;
|
||
|
/** Capability Bit Map : Spectrum management */
|
||
|
t_u8 spectrum_mgmt:1;
|
||
|
/** Capability Bit Map : Reserved */
|
||
|
t_u8 rsrvd3:1;
|
||
|
/** Capability Bit Map : Short slot time */
|
||
|
t_u8 short_slot_time:1;
|
||
|
/** Capability Bit Map : APSD */
|
||
|
t_u8 apsd:1;
|
||
|
/** Capability Bit Map : Reserved */
|
||
|
t_u8 rsvrd2:1;
|
||
|
/** Capability Bit Map : DSS OFDM */
|
||
|
t_u8 dsss_ofdm:1;
|
||
|
/** Capability Bit Map : Reserved */
|
||
|
t_u8 rsrvd1:2;
|
||
|
} __ATTRIB_PACK__ IEEEtypes_CapInfo_t, *pIEEEtypes_CapInfo_t;
|
||
|
#endif /* BIG_ENDIAN_SUPPORT */
|
||
|
|
||
|
/** IEEE IE header */
|
||
|
typedef struct _IEEEtypes_Header_t {
|
||
|
/** Element ID */
|
||
|
t_u8 element_id;
|
||
|
/** Length */
|
||
|
t_u8 len;
|
||
|
} __ATTRIB_PACK__ IEEEtypes_Header_t, *pIEEEtypes_Header_t;
|
||
|
|
||
|
/** IEEE IE header */
|
||
|
#define IEEE_HEADER_LEN sizeof(IEEEtypes_Header_t)
|
||
|
|
||
|
/** Vendor specific IE header */
|
||
|
typedef struct _IEEEtypes_VendorHeader_t {
|
||
|
/** Element ID */
|
||
|
t_u8 element_id;
|
||
|
/** Length */
|
||
|
t_u8 len;
|
||
|
/** OUI */
|
||
|
t_u8 oui[3];
|
||
|
/** OUI type */
|
||
|
t_u8 oui_type;
|
||
|
/** OUI subtype */
|
||
|
t_u8 oui_subtype;
|
||
|
/** Version */
|
||
|
t_u8 version;
|
||
|
} __ATTRIB_PACK__ IEEEtypes_VendorHeader_t, *pIEEEtypes_VendorHeader_t;
|
||
|
|
||
|
/** Vendor specific IE */
|
||
|
typedef struct _IEEEtypes_VendorSpecific_t {
|
||
|
/** Vendor specific IE header */
|
||
|
IEEEtypes_VendorHeader_t vend_hdr;
|
||
|
/** IE Max - size of previous fields */
|
||
|
t_u8 data[IEEE_MAX_IE_SIZE - sizeof(IEEEtypes_VendorHeader_t)];
|
||
|
} __ATTRIB_PACK__ IEEEtypes_VendorSpecific_t, *pIEEEtypes_VendorSpecific_t;
|
||
|
|
||
|
/** IEEE IE */
|
||
|
typedef struct _IEEEtypes_Generic_t {
|
||
|
/** Generic IE header */
|
||
|
IEEEtypes_Header_t ieee_hdr;
|
||
|
/** IE Max - size of previous fields */
|
||
|
t_u8 data[IEEE_MAX_IE_SIZE - sizeof(IEEEtypes_Header_t)];
|
||
|
} __ATTRIB_PACK__ IEEEtypes_Generic_t, *pIEEEtypes_Generic_t;
|
||
|
|
||
|
typedef struct _wlan_get_scan_table_fixed {
|
||
|
/** BSSID of this network */
|
||
|
t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
|
||
|
/** Channel this beacon/probe response was detected */
|
||
|
t_u8 channel;
|
||
|
/** RSSI for the received packet */
|
||
|
t_u8 rssi;
|
||
|
/** TSF value from the firmware at packet reception */
|
||
|
t_u64 network_tsf;
|
||
|
} wlan_get_scan_table_fixed;
|
||
|
|
||
|
/**
|
||
|
* Structure passed in the wlan_ioctl_get_scan_table_info for each
|
||
|
* BSS returned in the WLAN_GET_SCAN_RESP IOCTL
|
||
|
*/
|
||
|
typedef struct _wlan_ioctl_get_scan_table_entry {
|
||
|
/**
|
||
|
* Fixed field length included in the response.
|
||
|
*
|
||
|
* Length value is included so future fixed fields can be added to the
|
||
|
* response without breaking backwards compatibility. Use the length
|
||
|
* to find the offset for the bssInfoLength field, not a sizeof() calc.
|
||
|
*/
|
||
|
t_u32 fixed_field_length;
|
||
|
|
||
|
/**
|
||
|
* Length of the BSS Information (probe resp or beacon) that
|
||
|
* follows after the fixed_field_length
|
||
|
*/
|
||
|
t_u32 bss_info_length;
|
||
|
|
||
|
/**
|
||
|
* Always present, fixed length data fields for the BSS
|
||
|
*/
|
||
|
wlan_get_scan_table_fixed fixed_fields;
|
||
|
|
||
|
/*
|
||
|
* Probe response or beacon scanned for the BSS.
|
||
|
*
|
||
|
* Field layout:
|
||
|
* - TSF 8 octets
|
||
|
* - Beacon Interval 2 octets
|
||
|
* - Capability Info 2 octets
|
||
|
*
|
||
|
* - IEEE Infomation Elements; variable number & length per 802.11 spec
|
||
|
*/
|
||
|
/* t_u8 bss_info_buffer[1]; */
|
||
|
} wlan_ioctl_get_scan_table_entry;
|
||
|
|
||
|
/**
|
||
|
* Structure to store BSS info (probe resp or beacon) & IEEE IE info for each
|
||
|
* BSS returned in WLAN_GET_SCAN_RESP IOCTL
|
||
|
*/
|
||
|
typedef struct _wlan_ioctl_get_bss_info {
|
||
|
/**
|
||
|
* Length of the BSS Information (probe resp or beacon) that
|
||
|
* follows after the fixed_field
|
||
|
*/
|
||
|
t_u32 bss_info_length;
|
||
|
|
||
|
/**
|
||
|
* Probe response or beacon scanned for the BSS.
|
||
|
*
|
||
|
* Field layout:
|
||
|
*/
|
||
|
/** TSF 8 octets */
|
||
|
t_u8 tsf[8];
|
||
|
/** Beacon Interval 2 octets */
|
||
|
t_u16 beacon_interval;
|
||
|
/** Capability Info 2 octets */
|
||
|
IEEEtypes_CapInfo_t cap_info;
|
||
|
|
||
|
/**
|
||
|
* IEEE Infomation Elements; variable number & length per 802.11 spec
|
||
|
*/
|
||
|
/** SSID */
|
||
|
char ssid[MRVDRV_MAX_SSID_LENGTH + 1];
|
||
|
/** SSID Length */
|
||
|
t_u32 ssid_len;
|
||
|
/** WMM Capability */
|
||
|
char wmm_cap;
|
||
|
/** WPS Capability */
|
||
|
char wps_cap;
|
||
|
/** Privacy Capability - WEP/WPA/RSN */
|
||
|
char priv_cap;
|
||
|
/** HT (11N) Capability */
|
||
|
char ht_cap;
|
||
|
/** VHT (11AC) Capability */
|
||
|
char vht_cap[2];
|
||
|
/* 802.11k Capability */
|
||
|
char dot11k_cap;
|
||
|
/** 802.11r Capability */
|
||
|
char dot11r_cap;
|
||
|
} wlan_ioctl_get_bss_info;
|
||
|
|
||
|
/**
|
||
|
* Structure to save of scan table info for each BSS returned
|
||
|
* in WLAN_GET_SCAN_RESP IOCTL
|
||
|
*/
|
||
|
struct wlan_ioctl_get_scan_list {
|
||
|
/** fixed info */
|
||
|
wlan_ioctl_get_scan_table_entry fixed_buf;
|
||
|
/** variable info - BSS info (probe resp or beacon) & IEEE IE info */
|
||
|
wlan_ioctl_get_bss_info bss_info_buf;
|
||
|
/** pointer to next node in list */
|
||
|
struct wlan_ioctl_get_scan_list *next;
|
||
|
/** pointer to previous node in list */
|
||
|
struct wlan_ioctl_get_scan_list *prev;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Sructure to retrieve the scan table
|
||
|
*/
|
||
|
typedef struct {
|
||
|
/**
|
||
|
* - Zero based scan entry to start retrieval in command request
|
||
|
* - Number of scans entries returned in command response
|
||
|
*/
|
||
|
t_u32 scan_number;
|
||
|
/**
|
||
|
* Buffer marker for multiple wlan_ioctl_get_scan_table_entry structures.
|
||
|
* Each struct is padded to the nearest 32 bit boundary.
|
||
|
*/
|
||
|
t_u8 scan_table_entry_buf[1];
|
||
|
|
||
|
} wlan_ioctl_get_scan_table_info;
|
||
|
|
||
|
typedef struct {
|
||
|
t_u8 chan_number;
|
||
|
/**< Channel Number to scan */
|
||
|
t_u8 radio_type;
|
||
|
/**< Radio type: 'B/G' Band = 0, 'A' Band = 1 */
|
||
|
t_u8 scan_type;/**< Scan type: Active = 1, Passive = 2 */
|
||
|
t_u8 reserved;/**< Reserved */
|
||
|
t_u32 scan_time;
|
||
|
/**< Scan duration in milliseconds; if 0 default used */
|
||
|
} __ATTRIB_PACK__ wlan_ioctl_user_scan_chan;
|
||
|
|
||
|
typedef struct {
|
||
|
char ssid[MRVDRV_MAX_SSID_LENGTH + 1];
|
||
|
/**< SSID */
|
||
|
t_u8 max_len; /**< Maximum length of SSID */
|
||
|
} __ATTRIB_PACK__ wlan_ioctl_user_scan_ssid;
|
||
|
|
||
|
typedef struct {
|
||
|
|
||
|
/** Flag set to keep the previous scan table intact */
|
||
|
t_u8 keep_previous_scan; /* Do not erase the existing scan results */
|
||
|
|
||
|
/** BSS mode to be sent in the firmware command */
|
||
|
t_u8 bss_mode;
|
||
|
|
||
|
/** Configure the number of probe requests for active chan scans */
|
||
|
t_u8 num_probes;
|
||
|
|
||
|
/** Reserved */
|
||
|
t_u8 reserved;
|
||
|
|
||
|
/** BSSID filter sent in the firmware command to limit the results */
|
||
|
t_u8 specific_bssid[ETH_ALEN];
|
||
|
|
||
|
/** SSID filter list used in the to limit the scan results */
|
||
|
wlan_ioctl_user_scan_ssid ssid_list[MRVDRV_MAX_SSID_LIST_LENGTH];
|
||
|
|
||
|
/** Variable number (fixed maximum) of channels to scan up */
|
||
|
wlan_ioctl_user_scan_chan chan_list[WLAN_IOCTL_USER_SCAN_CHAN_MAX];
|
||
|
|
||
|
/** Gap between two scans */
|
||
|
t_u16 scan_chan_gap;
|
||
|
/** scan type: 0 legacy, 1: enhance scan*/
|
||
|
t_u8 ext_scan_type;
|
||
|
|
||
|
} __ATTRIB_PACK__ wlan_ioctl_user_scan_cfg;
|
||
|
|
||
|
/** Max Ie length */
|
||
|
#define MAX_IE_SIZE 256
|
||
|
|
||
|
/** custom IE */
|
||
|
typedef struct _custom_ie {
|
||
|
/** IE Index */
|
||
|
t_u16 ie_index;
|
||
|
/** Mgmt Subtype Mask */
|
||
|
t_u16 mgmt_subtype_mask;
|
||
|
/** IE Length */
|
||
|
t_u16 ie_length;
|
||
|
/** IE buffer */
|
||
|
t_u8 ie_buffer[0];
|
||
|
} __ATTRIB_PACK__ custom_ie;
|
||
|
|
||
|
/** Convert character to integer */
|
||
|
#define CHAR2INT(x) (((x) >= 'A') ? ((x) - 'A' + 10) : ((x) - '0'))
|
||
|
|
||
|
/**
|
||
|
* Hex or Decimal to Integer
|
||
|
* @param num string to convert into decimal or hex
|
||
|
*/
|
||
|
#define A2HEXDECIMAL(num) \
|
||
|
(strncasecmp("0x", (num), 2) ? (unsigned int) strtoll((num), NULL, 0) : a2hex((num)))
|
||
|
|
||
|
/** Convert TLV header from little endian format to CPU format */
|
||
|
#define endian_convert_tlv_header_in(x) \
|
||
|
{ \
|
||
|
(x)->tag = le16_to_cpu((x)->tag); \
|
||
|
(x)->length = le16_to_cpu((x)->length); \
|
||
|
}
|
||
|
|
||
|
/** Convert TLV header to little endian format from CPU format */
|
||
|
#define endian_convert_tlv_header_out(x) \
|
||
|
{ \
|
||
|
(x)->tag = cpu_to_le16((x)->tag); \
|
||
|
(x)->length = cpu_to_le16((x)->length); \
|
||
|
}
|
||
|
/** Max IE index to FW */
|
||
|
#define MAX_MGMT_IE_INDEX_TO_FW 4
|
||
|
/** Max IE index per BSS */
|
||
|
#define MAX_MGMT_IE_INDEX 16
|
||
|
|
||
|
/** Private command ID to pass custom IE list */
|
||
|
#define CUSTOM_IE_CFG (SIOCDEVPRIVATE + 13)
|
||
|
/* TLV Definitions */
|
||
|
|
||
|
/** Maximum IE buffer length */
|
||
|
#define MAX_IE_BUFFER_LEN 256
|
||
|
|
||
|
/** TLV: Management IE list */
|
||
|
#define MRVL_MGMT_IE_LIST_TLV_ID (PROPRIETARY_TLV_BASE_ID + 0x69) /* 0x0169 */
|
||
|
|
||
|
/** TLV: Max Management IE */
|
||
|
#define MRVL_MAX_MGMT_IE_TLV_ID (PROPRIETARY_TLV_BASE_ID + 0xaa) /* 0x01aa */
|
||
|
|
||
|
/** custom IE info */
|
||
|
typedef struct _custom_ie_info {
|
||
|
/** size of buffer */
|
||
|
t_u16 buf_size;
|
||
|
/** no of buffers of buf_size */
|
||
|
t_u16 buf_count;
|
||
|
} __ATTRIB_PACK__ custom_ie_info;
|
||
|
|
||
|
/** TLV buffer : Max Mgmt IE */
|
||
|
typedef struct _tlvbuf_max_mgmt_ie {
|
||
|
/** Type */
|
||
|
t_u16 type;
|
||
|
/** Length */
|
||
|
t_u16 len;
|
||
|
/** No of tuples */
|
||
|
t_u16 count;
|
||
|
/** custom IE info tuples */
|
||
|
custom_ie_info info[0];
|
||
|
} __ATTRIB_PACK__ tlvbuf_max_mgmt_ie;
|
||
|
|
||
|
/** TLV buffer : custom IE */
|
||
|
typedef struct _eth_priv_ds_misc_custom_ie {
|
||
|
/** Type */
|
||
|
t_u16 type;
|
||
|
/** Length */
|
||
|
t_u16 len;
|
||
|
/** IE data */
|
||
|
custom_ie ie_data[0];
|
||
|
} __ATTRIB_PACK__ eth_priv_ds_misc_custom_ie;
|
||
|
|
||
|
/*-----------------------------------------------------------------*/
|
||
|
/** Register Memory Access Group */
|
||
|
/*-----------------------------------------------------------------*/
|
||
|
/** Enumeration for register type */
|
||
|
enum _mlan_reg_type {
|
||
|
MLAN_REG_MAC = 1,
|
||
|
MLAN_REG_BBP,
|
||
|
MLAN_REG_RF,
|
||
|
MLAN_REG_CAU = 5,
|
||
|
};
|
||
|
|
||
|
/** Type definition of mlan_ds_reg_rw for MLAN_OID_REG_RW */
|
||
|
struct eth_priv_ds_reg_rw {
|
||
|
/** Register type */
|
||
|
t_u32 type;
|
||
|
/** Offset */
|
||
|
t_u32 offset;
|
||
|
/** Value */
|
||
|
t_u32 value;
|
||
|
};
|
||
|
|
||
|
/** Maximum EEPROM data */
|
||
|
#define MAX_EEPROM_DATA 256
|
||
|
|
||
|
/** Type definition of mlan_ds_read_eeprom for MLAN_OID_EEPROM_RD */
|
||
|
struct eth_priv_ds_read_eeprom {
|
||
|
/** Multiples of 4 */
|
||
|
t_u16 offset;
|
||
|
/** Number of bytes */
|
||
|
t_u16 byte_count;
|
||
|
/** Value */
|
||
|
t_u8 value[MAX_EEPROM_DATA];
|
||
|
};
|
||
|
|
||
|
/** Type definition of mlan_ds_mem_rw for MLAN_OID_MEM_RW */
|
||
|
struct eth_priv_ds_mem_rw {
|
||
|
/** Address */
|
||
|
t_u32 addr;
|
||
|
/** Value */
|
||
|
t_u32 value;
|
||
|
};
|
||
|
|
||
|
/** Type definition of mlan_ds_reg_mem for MLAN_IOCTL_REG_MEM */
|
||
|
struct eth_priv_ds_reg_mem {
|
||
|
/** Sub-command */
|
||
|
t_u32 sub_command;
|
||
|
/** Register memory access parameter */
|
||
|
union {
|
||
|
/** Register access for MLAN_OID_REG_RW */
|
||
|
struct eth_priv_ds_reg_rw reg_rw;
|
||
|
/** EEPROM access for MLAN_OID_EEPROM_RD */
|
||
|
struct eth_priv_ds_read_eeprom rd_eeprom;
|
||
|
/** Memory access for MLAN_OID_MEM_RW */
|
||
|
struct eth_priv_ds_mem_rw mem_rw;
|
||
|
} param;
|
||
|
};
|
||
|
|
||
|
/** Data structure of WMM QoS information */
|
||
|
typedef struct _IEEEtypes_WmmQosInfo_t {
|
||
|
#ifdef BIG_ENDIAN_SUPPORT
|
||
|
/** QoS UAPSD */
|
||
|
t_u8 qos_uapsd:1;
|
||
|
/** Reserved */
|
||
|
t_u8 reserved:3;
|
||
|
/** Parameter set count */
|
||
|
t_u8 para_set_count:4;
|
||
|
#else
|
||
|
/** Parameter set count */
|
||
|
t_u8 para_set_count:4;
|
||
|
/** Reserved */
|
||
|
t_u8 reserved:3;
|
||
|
/** QoS UAPSD */
|
||
|
t_u8 qos_uapsd:1;
|
||
|
#endif /* BIG_ENDIAN_SUPPORT */
|
||
|
} __ATTRIB_PACK__ IEEEtypes_WmmQosInfo_t;
|
||
|
|
||
|
/** band BG */
|
||
|
#define BAND_BG_TDLS 0
|
||
|
/** band A */
|
||
|
#define BAND_A_TDLS 1
|
||
|
/** NO PERIODIC SWITCH */
|
||
|
#define NO_PERIODIC_SWITCH 0
|
||
|
/** Enable periodic channel switch */
|
||
|
#define ENABLE_PERIODIC_SWITCH 1
|
||
|
/** Min channel value for BG band */
|
||
|
#define MIN_BG_CHANNEL 1
|
||
|
/** Max channel value for BG band */
|
||
|
#define MAX_BG_CHANNEL 14
|
||
|
/** Max channel value for A band */
|
||
|
#define MIN_A_CHANNEL 36
|
||
|
/** Max channel value for A band */
|
||
|
#define MAX_A_CHANNEL 252
|
||
|
|
||
|
/** Host Command ioctl number */
|
||
|
#define TDLS_IOCTL (SIOCDEVPRIVATE + 5)
|
||
|
/** TDLS action definitions */
|
||
|
/** Action ID for TDLS config */
|
||
|
#define ACTION_TDLS_CONFIG 0x0000
|
||
|
/** Action ID for TDLS setinfo request */
|
||
|
#define ACTION_TDLS_SETINFO 0x0001
|
||
|
/** Action ID for TDLS Discovery request */
|
||
|
#define ACTION_TDLS_DISCOVERY 0x0002
|
||
|
/** Action ID for TDLS setup request */
|
||
|
#define ACTION_TDLS_SETUP 0x0003
|
||
|
/** Action ID for TDLS Teardown request */
|
||
|
#define ACTION_TDLS_TEARDOWN 0x0004
|
||
|
/** Action ID for TDLS power mode */
|
||
|
#define ACTION_TDLS_POWER_MODE 0x0005
|
||
|
/**Action ID for init TDLS Channel Switch*/
|
||
|
#define ACTION_TDLS_INIT_CHAN_SWITCH 0x06
|
||
|
/** Action ID for stop TDLS Channel Switch */
|
||
|
#define ACTION_TDLS_STOP_CHAN_SWITCH 0x07
|
||
|
/** Action ID for configure CS related parameters */
|
||
|
#define ACTION_TDLS_CS_PARAMS 0x08
|
||
|
/** Action ID for TDLS Disable Channel switch */
|
||
|
#define ACTION_TDLS_CS_DISABLE 0x09
|
||
|
/** Action ID for TDLS Link status */
|
||
|
#define ACTION_TDLS_LINK_STATUS 0x000A
|
||
|
/** Action ID for Host TDLS config uapsd and CS */
|
||
|
#define ACTION_HOST_TDLS_CONFIG 0x000D
|
||
|
/** Action ID for TDLS CS immediate return */
|
||
|
#define ACTION_TDLS_DEBUG_CS_RET_IM 0xFFF7
|
||
|
/** Action ID for TDLS Stop RX */
|
||
|
#define ACTION_TDLS_DEBUG_STOP_RX 0xFFF8
|
||
|
/** Action ID for TDLS Allow weak security */
|
||
|
#define ACTION_TDLS_DEBUG_ALLOW_WEAK_SECURITY 0xFFF9
|
||
|
/** Action ID for TDLS Ignore key lifetime expiry */
|
||
|
#define ACTION_TDLS_DEBUG_IGNORE_KEY_EXPIRY 0xFFFA
|
||
|
/** Action ID for TDLS Higher/Lower mac Test */
|
||
|
#define ACTION_TDLS_DEBUG_HIGHER_LOWER_MAC 0xFFFB
|
||
|
/** Action ID for TDLS Prohibited Test */
|
||
|
#define ACTION_TDLS_DEBUG_SETUP_PROHIBITED 0xFFFC
|
||
|
/** Action ID for TDLS Existing link Test */
|
||
|
#define ACTION_TDLS_DEBUG_SETUP_SAME_LINK 0xFFFD
|
||
|
/** Action ID for TDLS Fail Setup Confirm */
|
||
|
#define ACTION_TDLS_DEBUG_FAIL_SETUP_CONFIRM 0xFFFE
|
||
|
/** Action ID for TDLS WRONG BSS Test */
|
||
|
#define ACTION_TDLS_DEBUG_WRONG_BSS 0xFFFF
|
||
|
|
||
|
/** TLV type : Rates */
|
||
|
#define TLV_TYPE_RATES 0x0001
|
||
|
/** TLV type : Domain */
|
||
|
#define TLV_TYPE_DOMAIN 0x0007
|
||
|
/** TLV type : Supported channels */
|
||
|
#define TLV_TYPE_SUPPORTED_CHANNELS 0x0024
|
||
|
/** TLV type : HT Capabilities */
|
||
|
#define TLV_TYPE_HT_CAP 0x002d
|
||
|
/** TLV type : Qos Info */
|
||
|
#define TLV_TYPE_QOSINFO 0x002e
|
||
|
/** TLV type : RSN IE */
|
||
|
#define TLV_TYPE_RSN_IE 0x0030
|
||
|
/** TLV type : extended supported rates */
|
||
|
#define TLV_EXTENDED_SUPPORTED_RATES 0x0032
|
||
|
/** TLV type : timeout interval */
|
||
|
#define TLV_TIMEOUT_INTERVAL 0x0038
|
||
|
/** TLV type : Regulatory classes */
|
||
|
#define TLV_TYPE_REGULATORY_CLASSES 0x003b
|
||
|
/** TLV type : HT Information */
|
||
|
#define TLV_TYPE_HT_INFO 0x003d
|
||
|
/** TLV type : 20/40 BSS Coexistence */
|
||
|
#define TLV_TYPE_2040BSS_COEXISTENCE 0x0048
|
||
|
/** TLv Type : Link identifier */
|
||
|
#define TLV_LINK_IDENTIFIER 0x0065
|
||
|
|
||
|
/** Country code length */
|
||
|
#define COUNTRY_CODE_LEN 3
|
||
|
/** Length of Group Cipher Suite */
|
||
|
#define GROUP_CIPHER_SUITE_LEN 4
|
||
|
/** Length of Pairwise Cipher Suite */
|
||
|
#define PAIRWISE_CIPHER_SUITE_LEN 4
|
||
|
/** Length of AKM Suite */
|
||
|
#define AKM_SUITE_LEN 4
|
||
|
/** PMKID length */
|
||
|
#define PMKID_LEN 16
|
||
|
/** Maximum number of pairwise_cipher_suite */
|
||
|
#define MAX_PAIRWISE_CIPHER_SUITE_COUNT 2
|
||
|
/** Maximum number of AKM suite */
|
||
|
#define MAX_AKM_SUITE_COUNT 2
|
||
|
/** Maximum number of PMKID list count */
|
||
|
#define MAX_PMKID_COUNT 2
|
||
|
/** Length of MCS set */
|
||
|
#define MCS_SET_LEN 16
|
||
|
/** Version in RSN IE */
|
||
|
#define VERSION_RSN_IE 0x0001
|
||
|
|
||
|
/** tdls setinfo */
|
||
|
typedef struct _tdls_setinfo {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** (TLV + capInfo) length */
|
||
|
t_u16 tlv_len;
|
||
|
/** Capability Info */
|
||
|
t_u16 cap_info;
|
||
|
/** tdls info */
|
||
|
t_u8 tlv_buffer[0];
|
||
|
} __ATTRIB_PACK__ tdls_setinfo;
|
||
|
|
||
|
/** tdls discovery */
|
||
|
typedef struct _tdls_discovery {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** Peer MAC address */
|
||
|
t_u8 peer_mac[ETH_ALEN];
|
||
|
} __ATTRIB_PACK__ tdls_discovery;
|
||
|
|
||
|
/** tdls link status */
|
||
|
typedef struct _tdls_links_status {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
} __ATTRIB_PACK__ tdls_link_status;
|
||
|
|
||
|
/** tdls discovery response */
|
||
|
typedef struct _tdls_discovery_resp {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** payload length */
|
||
|
t_u16 payload_len;
|
||
|
/** peer mac Address */
|
||
|
t_u8 peer_mac[ETH_ALEN];
|
||
|
/** RSSI */
|
||
|
t_s8 rssi;
|
||
|
/** Cap Info */
|
||
|
t_u16 cap_info;
|
||
|
/** TLV buffer */
|
||
|
t_u8 tlv_buffer[0];
|
||
|
} __ATTRIB_PACK__ tdls_discovery_resp;
|
||
|
|
||
|
/** tdls each link rate information */
|
||
|
typedef struct _tdls_link_rate_info {
|
||
|
/** Tx Data Rate */
|
||
|
t_u8 tx_data_rate;
|
||
|
/** Tx Rate HT info*/
|
||
|
t_u8 tx_rate_htinfo;
|
||
|
} __ATTRIB_PACK__ tdls_link_rate_info;
|
||
|
|
||
|
/** tdls each link status */
|
||
|
typedef struct _tdls_each_link_status {
|
||
|
/** peer mac Address */
|
||
|
t_u8 peer_mac[ETH_ALEN];
|
||
|
/** Link Flags */
|
||
|
t_u8 link_flags;
|
||
|
/** Traffic Status */
|
||
|
t_u8 traffic_status;
|
||
|
/** Tx Failure Count */
|
||
|
t_u8 tx_fail_count;
|
||
|
/** Channel Number */
|
||
|
t_u32 active_channel;
|
||
|
/** Last Data RSSI in dBm */
|
||
|
t_s16 data_rssi_last;
|
||
|
/** Last Data NF in dBm */
|
||
|
t_s16 data_nf_last;
|
||
|
/** AVG DATA RSSI in dBm */
|
||
|
t_s16 data_rssi_avg;
|
||
|
/** AVG DATA NF in dBm */
|
||
|
t_s16 data_nf_avg;
|
||
|
union {
|
||
|
/** tdls rate info */
|
||
|
tdls_link_rate_info rate_info;
|
||
|
/** final rate value*/
|
||
|
t_u16 final_data_rate;
|
||
|
} u;
|
||
|
/** Security Method */
|
||
|
t_u8 security_method;
|
||
|
/** Key Lifetime */
|
||
|
t_u32 key_lifetime;
|
||
|
/** Key Length */
|
||
|
t_u8 key_length;
|
||
|
/** actual key */
|
||
|
t_u8 key[0];
|
||
|
} __ATTRIB_PACK__ tdls_each_link_status;
|
||
|
|
||
|
/** tdls link status response */
|
||
|
typedef struct _tdls_link_status_resp {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** payload length */
|
||
|
t_u16 payload_len;
|
||
|
/** number of links */
|
||
|
t_u8 active_links;
|
||
|
/** structure for link status */
|
||
|
tdls_each_link_status link_stats[1];
|
||
|
} __ATTRIB_PACK__ tdls_link_status_resp;
|
||
|
|
||
|
/** tdls setup */
|
||
|
typedef struct _tdls_setup {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** Peer MAC address */
|
||
|
t_u8 peer_mac[ETH_ALEN];
|
||
|
/** Time to wait for response from peer*/
|
||
|
t_u32 wait_time;
|
||
|
/** Key Life Time */
|
||
|
t_u32 key_life_time;
|
||
|
} __ATTRIB_PACK__ tdls_setup;
|
||
|
|
||
|
/** tdls tear down */
|
||
|
typedef struct _tdls_tear_down {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** Peer MAC address */
|
||
|
t_u8 peer_mac[ETH_ALEN];
|
||
|
/** Reason code */
|
||
|
t_u16 reason_code;
|
||
|
} __ATTRIB_PACK__ tdls_teardown;
|
||
|
|
||
|
/** tdls power mode */
|
||
|
typedef struct _tdls_power_mode {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** Peer MAC address */
|
||
|
t_u8 peer_mac[ETH_ALEN];
|
||
|
/** Power mode */
|
||
|
t_u16 power_mode;
|
||
|
} __ATTRIB_PACK__ tdls_powermode;
|
||
|
|
||
|
/** tdls channel switch info */
|
||
|
typedef struct _tdls_channel_switch {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** peer mac Address */
|
||
|
t_u8 peer_mac[ETH_ALEN];
|
||
|
/** Channel Switch primary channel no */
|
||
|
t_u8 primary_channel;
|
||
|
/** Channel Switch secondary channel offset */
|
||
|
t_u8 secondary_channel_offset;
|
||
|
/** Channel Switch Band */
|
||
|
t_u8 band;
|
||
|
/** Channel Switch time*/
|
||
|
t_u16 switch_time;
|
||
|
/** Channel Switch timeout*/
|
||
|
t_u16 switch_timeout;
|
||
|
/** Channel Regulatory class*/
|
||
|
t_u8 regulatory_class;
|
||
|
/** Channel Switch periodicity*/
|
||
|
t_u8 periodicity;
|
||
|
} __ATTRIB_PACK__ tdls_channel_switch;
|
||
|
|
||
|
/** tdls stop channel switch */
|
||
|
typedef struct _tdls_stop_chan_switch {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** Peer MAC address */
|
||
|
t_u8 peer_mac[ETH_ALEN];
|
||
|
} __ATTRIB_PACK__ tdls_stop_chan_switch;
|
||
|
|
||
|
/** tdls disable channel switch */
|
||
|
typedef struct _tdls_disable_cs {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** Data*/
|
||
|
t_u16 data;
|
||
|
} __ATTRIB_PACK__ tdls_disable_cs, tdls_config;
|
||
|
|
||
|
/** tdls channel switch parameters */
|
||
|
typedef struct _tdls_cs_params {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** unit time, multiples of 10ms */
|
||
|
t_u8 unit_time;
|
||
|
/** threshold for other link */
|
||
|
t_u8 threshold_otherlink;
|
||
|
/** threshold for direct link */
|
||
|
t_u8 threshold_directlink;
|
||
|
} __ATTRIB_PACK__ tdls_cs_params;
|
||
|
|
||
|
/** Host tdls config */
|
||
|
typedef struct _host_tdls_cfg {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** support uapsd */
|
||
|
t_u8 uapsd_support;
|
||
|
/** channel_switch */
|
||
|
t_u8 cs_support;
|
||
|
/** TLV length */
|
||
|
t_u16 tlv_len;
|
||
|
/** tdls info */
|
||
|
t_u8 tlv_buffer[0];
|
||
|
} __ATTRIB_PACK__ host_tdls_cfg;
|
||
|
|
||
|
/** tdls debug */
|
||
|
typedef struct _tdls_debug {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** Data */
|
||
|
t_u8 data[0];
|
||
|
} __ATTRIB_PACK__ tdls_debug;
|
||
|
|
||
|
/** TLV header */
|
||
|
#define TLVHEADER /** Tag */ \
|
||
|
t_u16 tag; \
|
||
|
/** Length */ \
|
||
|
t_u16 length
|
||
|
|
||
|
/** Length of TLV header */
|
||
|
#define TLVHEADER_LEN 4
|
||
|
|
||
|
/** Data structure for subband set */
|
||
|
typedef struct _IEEEtypes_SubbandSet_t {
|
||
|
/** First channel */
|
||
|
t_u8 first_chan;
|
||
|
/** Number of channels */
|
||
|
t_u8 no_of_chan;
|
||
|
/** Maximum Tx power */
|
||
|
t_u8 max_tx_pwr;
|
||
|
} __ATTRIB_PACK__ IEEEtypes_SubbandSet_t, *pIEEEtypes_SubbandSet_t;
|
||
|
|
||
|
/** tlvbuf_DomainParamSet_t */
|
||
|
typedef struct _tlvbuf_DomainParamSet {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
/** Country code */
|
||
|
t_u8 country_code[COUNTRY_CODE_LEN];
|
||
|
/** Set of subbands */
|
||
|
IEEEtypes_SubbandSet_t sub_band[0];
|
||
|
} __ATTRIB_PACK__ tlvbuf_DomainParamSet_t;
|
||
|
|
||
|
/** Qos Info TLV */
|
||
|
typedef struct _tlvbuf_QosInfo_t {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
/** QosInfo */
|
||
|
union {
|
||
|
/** QosInfo bitfield */
|
||
|
IEEEtypes_WmmQosInfo_t qos_info;
|
||
|
/** QosInfo byte */
|
||
|
t_u8 qos_info_byte;
|
||
|
} u;
|
||
|
} __ATTRIB_PACK__ tlvbuf_QosInfo_t;
|
||
|
|
||
|
/** HT Capabilities Data */
|
||
|
typedef struct _HTCap_t {
|
||
|
/** HT Capabilities Info field */
|
||
|
t_u16 ht_cap_info;
|
||
|
/** A-MPDU Parameters field */
|
||
|
t_u8 ampdu_param;
|
||
|
/** Supported MCS Set field */
|
||
|
t_u8 supported_mcs_set[16];
|
||
|
/** HT Extended Capabilities field */
|
||
|
t_u16 ht_ext_cap;
|
||
|
/** Transmit Beamforming Capabilities field */
|
||
|
t_u32 tx_bf_cap;
|
||
|
/** Antenna Selection Capability field */
|
||
|
t_u8 asel;
|
||
|
} __ATTRIB_PACK__ HTCap_t, *pHTCap_t;
|
||
|
|
||
|
/** HT Information Data */
|
||
|
typedef struct _HTInfo_t {
|
||
|
/** Primary channel */
|
||
|
t_u8 pri_chan;
|
||
|
/** Field 2 */
|
||
|
t_u8 field2;
|
||
|
/** Field 3 */
|
||
|
t_u16 field3;
|
||
|
/** Field 4 */
|
||
|
t_u16 field4;
|
||
|
/** Bitmap indicating MCSs supported by all HT STAs in the BSS */
|
||
|
t_u8 basic_mcs_set[16];
|
||
|
} __ATTRIB_PACK__ HTInfo_t, *pHTInfo_t;
|
||
|
|
||
|
/** 20/40 BSS Coexistence Data */
|
||
|
typedef struct _BSSCo2040_t {
|
||
|
/** 20/40 BSS Coexistence value */
|
||
|
t_u8 bss_co_2040_value;
|
||
|
} __ATTRIB_PACK__ BSSCo2040_t, *pBSSCo2040_t;
|
||
|
|
||
|
/** HT Capabilities element */
|
||
|
typedef struct _tlvbuf_HTCap_t {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
/** HTCap struct */
|
||
|
HTCap_t ht_cap;
|
||
|
} __ATTRIB_PACK__ tlvbuf_HTCap_t;
|
||
|
|
||
|
/** HT Information element */
|
||
|
typedef struct _tlvbuf_HTInfo_t {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
|
||
|
/** HTInfo struct */
|
||
|
HTInfo_t ht_info;
|
||
|
} __ATTRIB_PACK__ tlvbuf_HTInfo_t;
|
||
|
|
||
|
/** 20/40 BSS Coexistence element */
|
||
|
typedef struct _tlvbuf_2040BSSCo_t {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
|
||
|
/** BSSCo2040_t struct */
|
||
|
BSSCo2040_t bss_co_2040;
|
||
|
} __ATTRIB_PACK__ tlvbuf_2040BSSCo_t;
|
||
|
|
||
|
/** Extended Capabilities element */
|
||
|
typedef struct _tlvbuf_ExtCap_t {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
/** ExtCap_t struct */
|
||
|
t_u8 ext_cap[0];
|
||
|
} __ATTRIB_PACK__ tlvbuf_ExtCap_t;
|
||
|
|
||
|
/** tlvbuf_RatesParamSet_t */
|
||
|
typedef struct _tlvbuf_RatesParamSet_t {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
/** Rates */
|
||
|
t_u8 rates[0];
|
||
|
} __ATTRIB_PACK__ tlvbuf_RatesParamSet_t;
|
||
|
|
||
|
/* IEEE Supported Channel sub-band description (7.3.2.19) */
|
||
|
/* Sub-band description used in the supported channels element. */
|
||
|
typedef struct _IEEEtypes_SupportChan_Subband_t {
|
||
|
t_u8 start_chan;/**< Starting channel in the subband */
|
||
|
t_u8 num_chans; /**< Number of channels in the subband */
|
||
|
|
||
|
} __ATTRIB_PACK__ IEEEtypes_SupportChan_Subband_t;
|
||
|
|
||
|
/* IEEE Supported Channel element (7.3.2.19) */
|
||
|
/**
|
||
|
* Sent in association requests. Details the sub-bands and number
|
||
|
* of channels supported in each subband
|
||
|
*/
|
||
|
typedef struct _tlvbuf_SupportedChannels_t {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
/**< IEEE Element ID = 36 */
|
||
|
/** Configured sub-bands information in the element */
|
||
|
IEEEtypes_SupportChan_Subband_t subband[0];
|
||
|
} __ATTRIB_PACK__ tlvbuf_SupportedChannels_t;
|
||
|
|
||
|
#define VHT_MCS_MAP_LEN 2
|
||
|
/** VHT MCS rate set field, refer to 802.11ac */
|
||
|
typedef struct _VHT_MCS_set {
|
||
|
t_u16 rx_mcs_map;
|
||
|
t_u16 rx_max_rate; /* bit 29-31 reserved */
|
||
|
t_u16 tx_mcs_map;
|
||
|
t_u16 tx_max_rate; /* bit 61-63 reserved */
|
||
|
} __ATTRIB_PACK__ VHT_MCS_set_t, *pVHT_MCS_set_t;
|
||
|
|
||
|
typedef struct _VHT_capa {
|
||
|
t_u32 vht_cap_info;
|
||
|
VHT_MCS_set_t mcs_sets;
|
||
|
} __ATTRIB_PACK__ VHT_capa_t, *pVHT_capa_t;
|
||
|
|
||
|
/** VHT Capabilities IE */
|
||
|
typedef struct _IEEEtypes_VHTCap_t {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
/** VHTInfo struct */
|
||
|
VHT_capa_t vht_cap;
|
||
|
} __ATTRIB_PACK__ tlvbuf_VHTCap_t, *ptlvbuf_VHTCap_t;
|
||
|
|
||
|
/** VHT Operations IE */
|
||
|
typedef struct _IEEEtypes_VHTOprat_t {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
/** VHTOpra struct */
|
||
|
t_u8 chan_width;
|
||
|
t_u8 chan_cf1;
|
||
|
t_u8 chan_cf2;
|
||
|
/** Basic MCS set map, each 2 bits stands for a Nss */
|
||
|
t_u8 basic_mcs_map[VHT_MCS_MAP_LEN];
|
||
|
} __ATTRIB_PACK__ tlvbuf_VHTOpra_t, *ptlvbuf_VHTOpra_t;
|
||
|
|
||
|
/* IEEE Supported Regulatory Classes description (7.3.2.54) */
|
||
|
typedef struct _IEEEtypes_RegulatoryClass_t {
|
||
|
/** current regulatory class */
|
||
|
t_u8 cur_regulatory_class;
|
||
|
/** supported regulatory class list */
|
||
|
t_u8 regulatory_classes_list[0];
|
||
|
|
||
|
} __ATTRIB_PACK__ IEEEtypes_RegulatoryClass_t;
|
||
|
|
||
|
/* IEEE Supported Regulatory Classes TLV (7.3.2.54) */
|
||
|
typedef struct _tlvbuf_RegulatoryClass_t {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
/**< IEEE Element ID = 59 */
|
||
|
/** supported regulatory class */
|
||
|
IEEEtypes_RegulatoryClass_t regulatory_class;
|
||
|
} __ATTRIB_PACK__ tlvbuf_RegulatoryClass_t;
|
||
|
|
||
|
/** tlvbuf_RsnParamSet_t */
|
||
|
typedef struct _tlvbuf_RsnParamSet_t {
|
||
|
/** Header */
|
||
|
TLVHEADER;
|
||
|
/** Version */
|
||
|
t_u16 version;
|
||
|
/** Group Cipher Suite */
|
||
|
t_u8 group_cipher_suite[4];
|
||
|
/** Pairwise Cipher Suite count */
|
||
|
t_u16 pairwise_cipher_count;
|
||
|
/** Pairwise Cipher Suite */
|
||
|
t_u8 pairwise_cipher_suite[0];
|
||
|
/** AKM Suite Sount */
|
||
|
t_u16 akm_suite_count;
|
||
|
/** AKM Suite */
|
||
|
t_u8 akm_suite[0];
|
||
|
/** RSN Capability */
|
||
|
t_u16 rsn_capability;
|
||
|
/** PMKID Count */
|
||
|
t_u16 pmkid_count;
|
||
|
/** PMKID list */
|
||
|
t_u8 pmkid_list[0];
|
||
|
} __ATTRIB_PACK__ tlvbuf_RsnParamSet_t;
|
||
|
|
||
|
/** Size of a TSPEC. Used to allocate necessary buffer space in commands */
|
||
|
#define WMM_TSPEC_SIZE 63
|
||
|
|
||
|
/** Maximum number of AC QOS queues available in the driver/firmware */
|
||
|
#define MAX_AC_QUEUES 4
|
||
|
|
||
|
/** Maximum number of User Priorities */
|
||
|
#define MAX_USER_PRIORITIES 8
|
||
|
|
||
|
/** Extra IE bytes allocated in messages for appended IEs after a TSPEC */
|
||
|
#define WMM_ADDTS_EXTRA_IE_BYTES 256
|
||
|
|
||
|
/**
|
||
|
* @brief Enumeration for the command result from an ADDTS or DELTS command
|
||
|
*/
|
||
|
typedef enum {
|
||
|
TSPEC_RESULT_SUCCESS = 0,
|
||
|
TSPEC_RESULT_EXEC_FAILURE = 1,
|
||
|
TSPEC_RESULT_TIMEOUT = 2,
|
||
|
TSPEC_RESULT_DATA_INVALID = 3,
|
||
|
} __ATTRIB_PACK__ mlan_wmm_tspec_result_e;
|
||
|
|
||
|
/**
|
||
|
* @brief Enumeration for the action field in the Queue configure command
|
||
|
*/
|
||
|
typedef enum {
|
||
|
WMM_QUEUE_CONFIG_ACTION_GET = 0,
|
||
|
WMM_QUEUE_CONFIG_ACTION_SET = 1,
|
||
|
WMM_QUEUE_CONFIG_ACTION_DEFAULT = 2,
|
||
|
|
||
|
WMM_QUEUE_CONFIG_ACTION_MAX
|
||
|
} __ATTRIB_PACK__ mlan_wmm_queue_config_action_e;
|
||
|
|
||
|
/**
|
||
|
* @brief Enumeration for the action field in the queue stats command
|
||
|
*/
|
||
|
typedef enum {
|
||
|
WMM_STATS_ACTION_START = 0,
|
||
|
WMM_STATS_ACTION_STOP = 1,
|
||
|
WMM_STATS_ACTION_GET_CLR = 2,
|
||
|
WMM_STATS_ACTION_SET_CFG = 3, /* Not currently used */
|
||
|
WMM_STATS_ACTION_GET_CFG = 4, /* Not currently used */
|
||
|
|
||
|
WMM_STATS_ACTION_MAX
|
||
|
} __ATTRIB_PACK__ mlan_wmm_stats_action_e;
|
||
|
|
||
|
/** Data structure of WMM Aci/Aifsn */
|
||
|
typedef struct _IEEEtypes_WmmAciAifsn_t {
|
||
|
#ifdef BIG_ENDIAN_SUPPORT
|
||
|
/** Reserved */
|
||
|
t_u8 reserved:1;
|
||
|
/** Aci */
|
||
|
t_u8 aci:2;
|
||
|
/** Acm */
|
||
|
t_u8 acm:1;
|
||
|
/** Aifsn */
|
||
|
t_u8 aifsn:4;
|
||
|
#else
|
||
|
/** Aifsn */
|
||
|
t_u8 aifsn:4;
|
||
|
/** Acm */
|
||
|
t_u8 acm:1;
|
||
|
/** Aci */
|
||
|
t_u8 aci:2;
|
||
|
/** Reserved */
|
||
|
t_u8 reserved:1;
|
||
|
#endif
|
||
|
} __ATTRIB_PACK__ IEEEtypes_WmmAciAifsn_t, *pIEEEtypes_WmmAciAifsn_t;
|
||
|
|
||
|
/** Data structure of WMM ECW */
|
||
|
typedef struct _IEEEtypes_WmmEcw_t {
|
||
|
#ifdef BIG_ENDIAN_SUPPORT
|
||
|
/** Maximum Ecw */
|
||
|
t_u8 ecw_max:4;
|
||
|
/** Minimum Ecw */
|
||
|
t_u8 ecw_min:4;
|
||
|
#else
|
||
|
/** Minimum Ecw */
|
||
|
t_u8 ecw_min:4;
|
||
|
/** Maximum Ecw */
|
||
|
t_u8 ecw_max:4;
|
||
|
#endif
|
||
|
} __ATTRIB_PACK__ IEEEtypes_WmmEcw_t, *pIEEEtypes_WmmEcw_t;
|
||
|
|
||
|
/** Data structure of WMM AC parameters */
|
||
|
typedef struct _IEEEtypes_WmmAcParameters_t {
|
||
|
IEEEtypes_WmmAciAifsn_t aci_aifsn; /**< AciAifSn */
|
||
|
IEEEtypes_WmmEcw_t ecw; /**< Ecw */
|
||
|
t_u16 tx_op_limit; /**< Tx op limit */
|
||
|
} __ATTRIB_PACK__ IEEEtypes_WmmAcParameters_t, *pIEEEtypes_WmmAcParameters_t;
|
||
|
|
||
|
/** Data structure of WMM Info IE */
|
||
|
typedef struct _IEEEtypes_WmmInfo_t {
|
||
|
|
||
|
/**
|
||
|
* WMM Info IE - Vendor Specific Header:
|
||
|
* element_id [221/0xdd]
|
||
|
* Len [7]
|
||
|
* Oui [00:50:f2]
|
||
|
* OuiType [2]
|
||
|
* OuiSubType [0]
|
||
|
* Version [1]
|
||
|
*/
|
||
|
IEEEtypes_VendorHeader_t vend_hdr;
|
||
|
|
||
|
/** QoS information */
|
||
|
IEEEtypes_WmmQosInfo_t qos_info;
|
||
|
|
||
|
} __ATTRIB_PACK__ IEEEtypes_WmmInfo_t, *pIEEEtypes_WmmInfo_t;
|
||
|
|
||
|
/** Data structure of WMM parameter IE */
|
||
|
typedef struct _IEEEtypes_WmmParameter_t {
|
||
|
/**
|
||
|
* WMM Parameter IE - Vendor Specific Header:
|
||
|
* element_id [221/0xdd]
|
||
|
* Len [24]
|
||
|
* Oui [00:50:f2]
|
||
|
* OuiType [2]
|
||
|
* OuiSubType [1]
|
||
|
* Version [1]
|
||
|
*/
|
||
|
IEEEtypes_VendorHeader_t vend_hdr;
|
||
|
|
||
|
/** QoS information */
|
||
|
IEEEtypes_WmmQosInfo_t qos_info;
|
||
|
/** Reserved */
|
||
|
t_u8 reserved;
|
||
|
|
||
|
/** AC Parameters Record WMM_AC_BE, WMM_AC_BK, WMM_AC_VI, WMM_AC_VO */
|
||
|
IEEEtypes_WmmAcParameters_t ac_params[MAX_AC_QUEUES];
|
||
|
|
||
|
} __ATTRIB_PACK__ IEEEtypes_WmmParameter_t, *pIEEEtypes_WmmParameter_t;
|
||
|
|
||
|
/**
|
||
|
* @brief IOCTL structure to send an ADDTS request and retrieve the response.
|
||
|
*
|
||
|
* IOCTL structure from the application layer relayed to firmware to
|
||
|
* instigate an ADDTS management frame with an appropriate TSPEC IE as well
|
||
|
* as any additional IEs appended in the ADDTS Action frame.
|
||
|
*
|
||
|
* @sa wlan_wmm_addts_req_ioctl
|
||
|
*/
|
||
|
typedef struct {
|
||
|
mlan_wmm_tspec_result_e commandResult;
|
||
|
/**< Firmware execution result */
|
||
|
|
||
|
t_u32 timeout_ms; /**< Timeout value in milliseconds */
|
||
|
t_u8 ieeeStatusCode; /**< IEEE status code */
|
||
|
|
||
|
t_u32 ieDataLen;
|
||
|
t_u8 ieData[WMM_TSPEC_SIZE
|
||
|
/**< TSPEC to send in the ADDTS */
|
||
|
+ WMM_ADDTS_EXTRA_IE_BYTES];
|
||
|
/**< ADDTS extra IE buf */
|
||
|
} wlan_ioctl_wmm_addts_req_t;
|
||
|
|
||
|
/**
|
||
|
* @brief IOCTL structure to send a DELTS request.
|
||
|
*
|
||
|
* IOCTL structure from the application layer relayed to firmware to
|
||
|
* instigate an DELTS management frame with an appropriate TSPEC IE.
|
||
|
*
|
||
|
* @sa wlan_wmm_delts_req_ioctl
|
||
|
*/
|
||
|
typedef struct {
|
||
|
mlan_wmm_tspec_result_e commandResult;
|
||
|
/**< Firmware execution result */
|
||
|
t_u8 ieeeReasonCode; /**< IEEE reason code sent, unused for WMM */
|
||
|
|
||
|
t_u32 ieDataLen;
|
||
|
t_u8 ieData[WMM_TSPEC_SIZE];
|
||
|
/**< TSPEC to send in the DELTS */
|
||
|
} wlan_ioctl_wmm_delts_req_t;
|
||
|
|
||
|
/**
|
||
|
* @brief IOCTL structure to configure a specific AC Queue's parameters
|
||
|
*
|
||
|
* IOCTL structure from the application layer relayed to firmware to
|
||
|
* get, set, or default the WMM AC queue parameters.
|
||
|
*
|
||
|
* - msduLifetimeExpiry is ignored if set to 0 on a set command
|
||
|
*
|
||
|
* @sa wlan_wmm_queue_config_ioctl
|
||
|
*/
|
||
|
typedef struct {
|
||
|
mlan_wmm_queue_config_action_e action;
|
||
|
/**< Set, Get, or Default */
|
||
|
mlan_wmm_ac_e accessCategory; /**< WMM_AC_BK(0) to WMM_AC_VO(3) */
|
||
|
t_u16 msduLifetimeExpiry; /**< lifetime expiry in TUs */
|
||
|
t_u8 supportedRates[10]; /**< Not supported yet */
|
||
|
} wlan_ioctl_wmm_queue_config_t;
|
||
|
|
||
|
/** Number of bins in the histogram for the HostCmd_DS_WMM_QUEUE_STATS */
|
||
|
#define WMM_STATS_PKTS_HIST_BINS 7
|
||
|
|
||
|
/**
|
||
|
* @brief IOCTL structure to start, stop, and get statistics for a WMM AC
|
||
|
*
|
||
|
* IOCTL structure from the application layer relayed to firmware to
|
||
|
* start or stop statistical collection for a given AC. Also used to
|
||
|
* retrieve and clear the collected stats on a given AC.
|
||
|
*
|
||
|
* @sa wlan_wmm_queue_stats_ioctl
|
||
|
*/
|
||
|
typedef struct {
|
||
|
mlan_wmm_stats_action_e action;
|
||
|
/**< Start, Stop, or Get */
|
||
|
t_u8 userPriority;
|
||
|
/**< User Priority (0 to 7) */
|
||
|
t_u16 pktCount; /**< Number of successful packets transmitted */
|
||
|
t_u16 pktLoss; /**< Packets lost; not included in pktCount */
|
||
|
t_u32 avgQueueDelay;
|
||
|
/**< Average Queue delay in microseconds */
|
||
|
t_u32 avgTxDelay;/**< Average Transmission delay in microseconds */
|
||
|
t_u16 usedTime; /**< Calculated used time - units of 32 microsec */
|
||
|
t_u16 policedTime;
|
||
|
/**< Calculated policed time - units of 32 microsec */
|
||
|
|
||
|
/** @brief Queue Delay Histogram; number of packets per queue delay range
|
||
|
*
|
||
|
* [0] - 0ms <= delay < 5ms
|
||
|
* [1] - 5ms <= delay < 10ms
|
||
|
* [2] - 10ms <= delay < 20ms
|
||
|
* [3] - 20ms <= delay < 30ms
|
||
|
* [4] - 30ms <= delay < 40ms
|
||
|
* [5] - 40ms <= delay < 50ms
|
||
|
* [6] - 50ms <= delay < msduLifetime (TUs)
|
||
|
*/
|
||
|
t_u16 delayHistogram[WMM_STATS_PKTS_HIST_BINS];
|
||
|
} wlan_ioctl_wmm_queue_stats_t;
|
||
|
|
||
|
/**
|
||
|
* @brief IOCTL and command sub structure for a Traffic stream status.
|
||
|
*/
|
||
|
typedef struct {
|
||
|
t_u8 tid; /**< TSID: Range: 0->7 */
|
||
|
t_u8 valid; /**< TSID specified is valid */
|
||
|
t_u8 accessCategory;/**< AC TSID is active on */
|
||
|
t_u8 userPriority; /**< UP specified for the TSID */
|
||
|
|
||
|
t_u8 psb; /**< Power save mode for TSID: 0 (legacy), 1 (UAPSD) */
|
||
|
t_u8 flowDir; /**< Upstream (0), Downlink(1), Bidirectional(3) */
|
||
|
t_u16 mediumTime; /**< Medium time granted for the TSID */
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_WMM_TS_STATUS,
|
||
|
wlan_ioctl_wmm_ts_status_t, wlan_cmd_wmm_ts_status_t;
|
||
|
|
||
|
/**
|
||
|
* @brief IOCTL sub structure for a specific WMM AC Status
|
||
|
*/
|
||
|
typedef struct {
|
||
|
/** WMM Acm */
|
||
|
t_u8 wmmAcm;
|
||
|
/** Flow required flag */
|
||
|
t_u8 flowRequired;
|
||
|
/** Flow created flag */
|
||
|
t_u8 flowCreated;
|
||
|
/** Disabled flag */
|
||
|
t_u8 disabled;
|
||
|
/** delivery enabled */
|
||
|
t_u8 deliveryEnabled;
|
||
|
/** trigger enabled */
|
||
|
t_u8 triggerEnabled;
|
||
|
} wlan_ioctl_wmm_queue_status_ac_t;
|
||
|
|
||
|
/**
|
||
|
* @brief IOCTL structure to retrieve the WMM AC Queue status
|
||
|
*
|
||
|
* IOCTL structure from the application layer to retrieve:
|
||
|
* - ACM bit setting for the AC
|
||
|
* - Firmware status (flow required, flow created, flow disabled)
|
||
|
*
|
||
|
* @sa wlan_wmm_queue_status_ioctl
|
||
|
*/
|
||
|
typedef struct {
|
||
|
/** WMM AC queue status */
|
||
|
wlan_ioctl_wmm_queue_status_ac_t acStatus[MAX_AC_QUEUES];
|
||
|
} wlan_ioctl_wmm_queue_status_t;
|
||
|
#endif /* STA_SUPPORT */
|
||
|
|
||
|
/** Command RET code, MSB is set to 1 */
|
||
|
#define HostCmd_RET_BIT 0x8000
|
||
|
/** General purpose action : Get */
|
||
|
#define HostCmd_ACT_GEN_GET 0x0000
|
||
|
/** General purpose action : Set */
|
||
|
#define HostCmd_ACT_GEN_SET 0x0001
|
||
|
/** General purpose action : Clear */
|
||
|
#define HostCmd_ACT_GEN_CLEAR 0x0004
|
||
|
/** General purpose action : Remove */
|
||
|
#define HostCmd_ACT_GEN_REMOVE 0x0004
|
||
|
|
||
|
/** TLV type ID definition */
|
||
|
#define PROPRIETARY_TLV_BASE_ID 0x0100
|
||
|
|
||
|
/** MrvlIEtypesHeader_t */
|
||
|
typedef struct MrvlIEtypesHeader {
|
||
|
/** Header type */
|
||
|
t_u16 type;
|
||
|
/** Header length */
|
||
|
t_u16 len;
|
||
|
} __ATTRIB_PACK__ MrvlIEtypesHeader_t;
|
||
|
|
||
|
/** MrvlIEtypes_Data_t */
|
||
|
typedef struct MrvlIEtypes_Data_t {
|
||
|
/** Header */
|
||
|
MrvlIEtypesHeader_t header;
|
||
|
/** Data */
|
||
|
t_u8 data[1];
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_Data_t;
|
||
|
|
||
|
/** HostCmd_DS_802_11_SUBSCRIBE_EVENT */
|
||
|
typedef struct MAPP_HostCmd_DS_802_11_SUBSCRIBE_EVENT {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** Events */
|
||
|
t_u16 events;
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_802_11_SUBSCRIBE_EVENT;
|
||
|
|
||
|
/** MrvlIEtypes_RssiParamSet_t */
|
||
|
typedef struct MrvlIEtypes_RssiThreshold {
|
||
|
/** Header */
|
||
|
MrvlIEtypesHeader_t header;
|
||
|
/** RSSI value */
|
||
|
t_u8 RSSI_value;
|
||
|
/** RSSI frequency */
|
||
|
t_u8 RSSI_freq;
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_RssiThreshold_t;
|
||
|
|
||
|
/** MrvlIEtypes_SnrThreshold_t */
|
||
|
typedef struct MrvlIEtypes_SnrThreshold {
|
||
|
/** Header */
|
||
|
MrvlIEtypesHeader_t header;
|
||
|
/** SNR value */
|
||
|
t_u8 SNR_value;
|
||
|
/** SNR frequency */
|
||
|
t_u8 SNR_freq;
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_SnrThreshold_t;
|
||
|
|
||
|
/** MrvlIEtypes_FailureCount_t */
|
||
|
typedef struct MrvlIEtypes_FailureCount {
|
||
|
/** Header */
|
||
|
MrvlIEtypesHeader_t header;
|
||
|
/** Failure value */
|
||
|
t_u8 fail_value;
|
||
|
/** Failure frequency */
|
||
|
t_u8 fail_freq;
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_FailureCount_t;
|
||
|
|
||
|
/** MrvlIEtypes_BeaconsMissed_t */
|
||
|
typedef struct MrvlIEtypes_BeaconsMissed {
|
||
|
/** Header */
|
||
|
MrvlIEtypesHeader_t header;
|
||
|
/** Number of beacons missed */
|
||
|
t_u8 beacon_missed;
|
||
|
/** Reserved */
|
||
|
t_u8 reserved;
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_BeaconsMissed_t;
|
||
|
|
||
|
/** MrvlIEtypes_LinkQuality_t */
|
||
|
typedef struct MrvlIEtypes_LinkQuality {
|
||
|
/** Header */
|
||
|
MrvlIEtypesHeader_t header;
|
||
|
/** Link SNR threshold */
|
||
|
t_u16 link_SNR_thrs;
|
||
|
/** Link SNR frequency */
|
||
|
t_u16 link_SNR_freq;
|
||
|
/** Minimum rate value */
|
||
|
t_u16 min_rate_val;
|
||
|
/** Minimum rate frequency */
|
||
|
t_u16 min_rate_freq;
|
||
|
/** Tx latency value */
|
||
|
t_u32 tx_latency_val;
|
||
|
/** Tx latency threshold */
|
||
|
t_u32 tx_latency_thrs;
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_LinkQuality_t;
|
||
|
|
||
|
/** Host Command ID : 802.11 subscribe event */
|
||
|
#define HostCmd_CMD_802_11_SUBSCRIBE_EVENT 0x0075
|
||
|
|
||
|
/** TLV type : Beacon RSSI low */
|
||
|
#define TLV_TYPE_RSSI_LOW (PROPRIETARY_TLV_BASE_ID + 0x04) /* 0x0104 */
|
||
|
/** TLV type : Beacon SNR low */
|
||
|
#define TLV_TYPE_SNR_LOW (PROPRIETARY_TLV_BASE_ID + 0x05) /* 0x0105 */
|
||
|
/** TLV type : Fail count */
|
||
|
#define TLV_TYPE_FAILCOUNT (PROPRIETARY_TLV_BASE_ID + 0x06) /* 0x0106 */
|
||
|
/** TLV type : BCN miss */
|
||
|
#define TLV_TYPE_BCNMISS (PROPRIETARY_TLV_BASE_ID + 0x07) /* 0x0107 */
|
||
|
/** TLV type : Beacon RSSI high */
|
||
|
#define TLV_TYPE_RSSI_HIGH (PROPRIETARY_TLV_BASE_ID + 0x16) /* 0x0116 */
|
||
|
/** TLV type : Beacon SNR high */
|
||
|
#define TLV_TYPE_SNR_HIGH (PROPRIETARY_TLV_BASE_ID + 0x17) /* 0x0117 */
|
||
|
|
||
|
/** TLV type :Link Quality */
|
||
|
#define TLV_TYPE_LINK_QUALITY (PROPRIETARY_TLV_BASE_ID + 0x24) /* 0x0124 */
|
||
|
|
||
|
/** TLV type : Data RSSI low */
|
||
|
#define TLV_TYPE_RSSI_LOW_DATA (PROPRIETARY_TLV_BASE_ID + 0x26) /* 0x0126 */
|
||
|
/** TLV type : Data SNR low */
|
||
|
#define TLV_TYPE_SNR_LOW_DATA (PROPRIETARY_TLV_BASE_ID + 0x27) /* 0x0127 */
|
||
|
/** TLV type : Data RSSI high */
|
||
|
#define TLV_TYPE_RSSI_HIGH_DATA (PROPRIETARY_TLV_BASE_ID + 0x28) /* 0x0128 */
|
||
|
/** TLV type : Data SNR high */
|
||
|
#define TLV_TYPE_SNR_HIGH_DATA (PROPRIETARY_TLV_BASE_ID + 0x29) /* 0x0129 */
|
||
|
|
||
|
/** MrvlIEtypes_PreBeaconLost_t */
|
||
|
typedef struct MrvlIEtypes_PreBeaconLost {
|
||
|
/** Header */
|
||
|
MrvlIEtypesHeader_t header;
|
||
|
/** Pre-Beacon Lost */
|
||
|
t_u8 pre_beacon_lost;
|
||
|
/** Reserved */
|
||
|
t_u8 reserved;
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_PreBeaconLost_t;
|
||
|
|
||
|
/** TLV type: Pre-Beacon Lost */
|
||
|
#define TLV_TYPE_PRE_BEACON_LOST (PROPRIETARY_TLV_BASE_ID + 0x49) /* 0x0149 */
|
||
|
|
||
|
/** TLV type : Extended capabilities */
|
||
|
#define TLV_TYPE_EXTCAP 0x007f
|
||
|
|
||
|
/** AutoTx_MacFrame_t */
|
||
|
typedef struct AutoTx_MacFrame {
|
||
|
t_u16 interval; /**< in seconds */
|
||
|
t_u8 priority; /**< User Priority: 0~7, ignored if non-WMM */
|
||
|
t_u8 reserved; /**< set to 0 */
|
||
|
t_u16 frame_len; /**< Length of MAC frame payload */
|
||
|
t_u8 dest_mac_addr[MLAN_MAC_ADDR_LENGTH]; /**< Destination MAC address */
|
||
|
t_u8 src_mac_addr[MLAN_MAC_ADDR_LENGTH]; /**< Source MAC address */
|
||
|
t_u8 payload[]; /**< Payload */
|
||
|
} __ATTRIB_PACK__ AutoTx_MacFrame_t;
|
||
|
|
||
|
/** MrvlIEtypes_AutoTx_t */
|
||
|
typedef struct MrvlIEtypes_AutoTx {
|
||
|
MrvlIEtypesHeader_t header; /**< Header */
|
||
|
AutoTx_MacFrame_t auto_tx_mac_frame; /**< Auto Tx MAC frame */
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_AutoTx_t;
|
||
|
|
||
|
/** HostCmd_DS_802_11_AUTO_TX */
|
||
|
typedef struct MAPP_HostCmd_DS_802_11_AUTO_TX {
|
||
|
/** Action */
|
||
|
t_u16 action; /* 0 = ACT_GET; 1 = ACT_SET; */
|
||
|
MrvlIEtypes_AutoTx_t auto_tx; /**< Auto Tx */
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_802_11_AUTO_TX;
|
||
|
|
||
|
/** Host Command ID : 802.11 auto Tx */
|
||
|
#define HostCmd_CMD_802_11_AUTO_TX 0x0082
|
||
|
|
||
|
/** TLV type : Auto Tx */
|
||
|
#define TLV_TYPE_AUTO_TX (PROPRIETARY_TLV_BASE_ID + 0x18) /* 0x0118 */
|
||
|
|
||
|
/** HostCmd_DS_802_11_CFG_DATA */
|
||
|
typedef struct MAPP_HostCmd_DS_802_11_CFG_DATA {
|
||
|
/** Action */
|
||
|
t_u16 action;
|
||
|
/** Type */
|
||
|
t_u16 type;
|
||
|
/** Data length */
|
||
|
t_u16 data_len;
|
||
|
/** Data */
|
||
|
t_u8 data[1];
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_802_11_CFG_DATA;
|
||
|
|
||
|
/** Host Command ID : Configuration data */
|
||
|
#define HostCmd_CMD_CFG_DATA 0x008f
|
||
|
|
||
|
/** mlan_ioctl_11h_tpc_resp */
|
||
|
typedef struct {
|
||
|
int status_code;
|
||
|
/**< Firmware command result status code */
|
||
|
int tx_power;/**< Reported TX Power from the TPC Report */
|
||
|
int link_margin;
|
||
|
/**< Reported Link margin from the TPC Report */
|
||
|
int rssi; /**< RSSI of the received TPC Report frame */
|
||
|
} __ATTRIB_PACK__ mlan_ioctl_11h_tpc_resp;
|
||
|
|
||
|
/** Host Command ID : 802.11 TPC adapt req */
|
||
|
#define HostCmd_CMD_802_11_TPC_ADAPT_REQ 0x0060
|
||
|
|
||
|
/** HostCmd_DS_802_11_CRYPTO */
|
||
|
typedef struct MAPP_HostCmd_DS_802_11_CRYPTO {
|
||
|
t_u16 encdec; /**< Decrypt=0, Encrypt=1 */
|
||
|
t_u16 algorithm; /**< RC4=1 AES=2 , AES_KEY_WRAP=3 */
|
||
|
t_u16 key_IV_length;/**< Length of Key IV (bytes) */
|
||
|
t_u8 keyIV[32]; /**< Key IV */
|
||
|
t_u16 key_length; /**< Length of Key (bytes) */
|
||
|
t_u8 key[32]; /**< Key */
|
||
|
MrvlIEtypes_Data_t data;
|
||
|
/**< Plain text if encdec=Encrypt, Ciphertext data if encdec=Decrypt*/
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_802_11_CRYPTO;
|
||
|
|
||
|
/** HostCmd_DS_802_11_CRYPTO_AES_CCM */
|
||
|
typedef struct MAPP_HostCmd_DS_802_11_CRYPTO_AES_CCM {
|
||
|
t_u16 encdec; /**< Decrypt=0, Encrypt=1 */
|
||
|
t_u16 algorithm; /**< AES_CCM=4 */
|
||
|
t_u16 key_length; /**< Length of Key (bytes) */
|
||
|
t_u8 key[32]; /**< Key */
|
||
|
t_u16 nonce_length;/**< Length of Nonce (bytes) */
|
||
|
t_u8 nonce[14]; /**< Nonce */
|
||
|
t_u16 AAD_length; /**< Length of AAD (bytes) */
|
||
|
t_u8 AAD[32]; /**< AAD */
|
||
|
MrvlIEtypes_Data_t data;
|
||
|
/**< Plain text if encdec=Encrypt, Ciphertext data if encdec=Decrypt*/
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_802_11_CRYPTO_AES_CCM;
|
||
|
|
||
|
/** HostCmd_DS_802_11_CRYPTO_WAPI */
|
||
|
typedef struct MAPP_HostCmd_DS_802_11_CRYPTO_WAPI {
|
||
|
t_u16 encdec; /**< Decrypt=0, Encrypt=1 */
|
||
|
t_u16 algorithm; /**< WAPI =5 */
|
||
|
t_u16 key_length; /**< Length of Key (bytes) */
|
||
|
t_u8 key[32]; /**< Key */
|
||
|
t_u16 nonce_length;/**< Length of Nonce (bytes) */
|
||
|
t_u8 nonce[16]; /**< Nonce */
|
||
|
t_u16 AAD_length; /**< Length of AAD (bytes) */
|
||
|
t_u8 AAD[48]; /**< AAD */
|
||
|
t_u16 data_length; /**< Length of data (bytes) */
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_802_11_CRYPTO_WAPI;
|
||
|
|
||
|
/** WAPI cipher test */
|
||
|
#define CIPHER_TEST_WAPI (5)
|
||
|
/** AES CCM cipher test */
|
||
|
#define CIPHER_TEST_AES_CCM (4)
|
||
|
/** GCMP cipher test */
|
||
|
#define CIPHER_TEST_GCMP (6)
|
||
|
/** Host Command ID : 802.11 crypto */
|
||
|
#define HostCmd_CMD_802_11_CRYPTO 0x0078
|
||
|
/** Get the current TSF */
|
||
|
#define HostCmd_CMD_GET_TSF 0x0080
|
||
|
|
||
|
/** Read/Write Mac register */
|
||
|
#define HostCmd_CMD_MAC_REG_ACCESS 0x0019
|
||
|
/** Read/Write BBP register */
|
||
|
#define HostCmd_CMD_BBP_REG_ACCESS 0x001a
|
||
|
/** Read/Write RF register */
|
||
|
#define HostCmd_CMD_RF_REG_ACCESS 0x001b
|
||
|
|
||
|
/** Host Command ID : CAU register access */
|
||
|
#define HostCmd_CMD_CAU_REG_ACCESS 0x00ed
|
||
|
|
||
|
/** Host Command ID : Memory access */
|
||
|
#define HostCmd_CMD_MEM_ACCESS 0x0086
|
||
|
|
||
|
/** channel band */
|
||
|
enum {
|
||
|
BAND_2GHZ = 0,
|
||
|
BAND_5GHZ = 1,
|
||
|
BAND_4GHZ = 2,
|
||
|
};
|
||
|
|
||
|
/** channel offset */
|
||
|
enum {
|
||
|
SEC_CHAN_NONE = 0,
|
||
|
SEC_CHAN_ABOVE = 1,
|
||
|
SEC_CHAN_5MHZ = 2,
|
||
|
SEC_CHAN_BELOW = 3
|
||
|
};
|
||
|
|
||
|
/** channel bandwidth */
|
||
|
enum {
|
||
|
CHAN_BW_20MHZ = 0,
|
||
|
CHAN_BW_10MHZ,
|
||
|
CHAN_BW_40MHZ,
|
||
|
CHAN_BW_80MHZ,
|
||
|
};
|
||
|
|
||
|
/** scan mode */
|
||
|
enum {
|
||
|
SCAN_MODE_MANUAL = 0,
|
||
|
SCAN_MODE_ACS,
|
||
|
SCAN_MODE_USER,
|
||
|
};
|
||
|
|
||
|
/** Band_Config_t */
|
||
|
typedef struct _Band_Config_t {
|
||
|
#ifdef BIG_ENDIAN_SUPPORT
|
||
|
/** Channel Selection Mode - (00)=manual, (01)=ACS, (02)=user*/
|
||
|
t_u8 scanMode:2;
|
||
|
/** Secondary Channel Offset - (00)=None, (01)=Above, (11)=Below */
|
||
|
t_u8 chan2Offset:2;
|
||
|
/** Channel Width - (00)=20MHz, (10)=40MHz, (11)=80MHz */
|
||
|
t_u8 chanWidth:2;
|
||
|
/** Band Info - (00)=2.4GHz, (01)=5GHz */
|
||
|
t_u8 chanBand:2;
|
||
|
#else
|
||
|
/** Band Info - (00)=2.4GHz, (01)=5GHz */
|
||
|
t_u8 chanBand:2;
|
||
|
/** Channel Width - (00)=20MHz, (10)=40MHz, (11)=80MHz */
|
||
|
t_u8 chanWidth:2;
|
||
|
/** Secondary Channel Offset - (00)=None, (01)=Above, (11)=Below */
|
||
|
t_u8 chan2Offset:2;
|
||
|
/** Channel Selection Mode - (00)=manual, (01)=ACS, (02)=Adoption mode*/
|
||
|
t_u8 scanMode:2;
|
||
|
#endif
|
||
|
} __ATTRIB_PACK__ Band_Config_t;
|
||
|
|
||
|
/** Failure */
|
||
|
#define MLAN_EVENT_FAILURE -1
|
||
|
|
||
|
/** Netlink protocol number */
|
||
|
#define NETLINK_MARVELL (MAX_LINKS - 1)
|
||
|
/** Netlink maximum payload size */
|
||
|
#define NL_MAX_PAYLOAD 1024
|
||
|
/** Netlink multicast group number */
|
||
|
#define NL_MULTICAST_GROUP 1
|
||
|
/** Default wait time in seconds for events */
|
||
|
#define UAP_RECV_WAIT_DEFAULT 10
|
||
|
/** Maximum number of devices */
|
||
|
#define MAX_NO_OF_DEVICES 4
|
||
|
|
||
|
/* Event buffer */
|
||
|
typedef struct _evt_buf {
|
||
|
/** Flag to check if event data is present in the buffer or not */
|
||
|
int flag;
|
||
|
/** Event length */
|
||
|
int length;
|
||
|
/** Event data */
|
||
|
t_u8 buffer[NL_MAX_PAYLOAD];
|
||
|
} __ATTRIB_PACK__ evt_buf;
|
||
|
|
||
|
/** Event header */
|
||
|
typedef struct _event_header {
|
||
|
/** Event ID */
|
||
|
t_u32 event_id;
|
||
|
/** Event data */
|
||
|
t_u8 event_data[0];
|
||
|
} __ATTRIB_PACK__ event_header;
|
||
|
|
||
|
/** Event ID length */
|
||
|
#define EVENT_ID_LEN 4
|
||
|
|
||
|
/** Event definition: Radar Detected by card */
|
||
|
#define EVENT_CHANNEL_REPORT_RDY 0x00000054
|
||
|
|
||
|
/** Host Command ID : Channel report request */
|
||
|
#define HostCmd_CMD_CHAN_REPORT_REQUEST 0x00dd
|
||
|
/** TLV type : Chan Load */
|
||
|
#define TLV_TYPE_CHANRPT_CHAN_LOAD (PROPRIETARY_TLV_BASE_ID + 0x59) /* 0x0159 */
|
||
|
/** TLV type : Noise Historgram */
|
||
|
#define TLV_TYPE_CHANRPT_NOISE_HIST (PROPRIETARY_TLV_BASE_ID + 0x5a) /* 0x015a */
|
||
|
|
||
|
typedef struct {
|
||
|
t_u16 startFreq;
|
||
|
t_u8 chanWidth;
|
||
|
t_u8 chanNum;
|
||
|
|
||
|
} __ATTRIB_PACK__ MrvlChannelDesc_t;
|
||
|
|
||
|
typedef struct {
|
||
|
MrvlChannelDesc_t chanDesc;
|
||
|
/**< Channel band, number */
|
||
|
t_u32 millisecDwellTime; /**< Channel dwell time in milliseconds */
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_CHAN_RPT_REQ;
|
||
|
|
||
|
typedef struct {
|
||
|
|
||
|
t_u32 commandResult;
|
||
|
/**< Rpt request command result (0 == SUCCESS) */
|
||
|
t_u64 startTsf; /**< TSF Measurement started */
|
||
|
t_u32 duration; /**< Duration of measurement in microsecs */
|
||
|
|
||
|
t_u8 tlvBuffer[1];
|
||
|
/**< TLV Buffer */
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_CHAN_RPT_RSP;
|
||
|
|
||
|
typedef struct {
|
||
|
MrvlIEtypesHeader_t Header; /**< Header */
|
||
|
|
||
|
t_u8 ccaBusyFraction; /**< Parts per 255 channel was busy */
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_ChanRptChanLoad_t;
|
||
|
|
||
|
typedef struct {
|
||
|
MrvlIEtypesHeader_t header; /**< Header */
|
||
|
|
||
|
t_s16 anpi; /**< ANPI calculated from the histogram */
|
||
|
/** RPI histogram bins. The number of bins utilized is variable and must
|
||
|
be calculated by the header length */
|
||
|
t_u8 rpiDensities[11];
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_ChanRptNoiseHist_t;
|
||
|
|
||
|
/** Maximum length of lines in configuration file */
|
||
|
#define MAX_CONFIG_LINE 1024
|
||
|
/** MAC BROADCAST */
|
||
|
#define MAC_BROADCAST 0x1FF
|
||
|
/** MAC MULTICAST */
|
||
|
#define MAC_MULTICAST 0x1FE
|
||
|
|
||
|
/** HostCmd_DS_REG */
|
||
|
typedef struct MAPP_HostCmd_DS_REG {
|
||
|
/** Read or write */
|
||
|
t_u16 action;
|
||
|
/** Register offset */
|
||
|
t_u16 offset;
|
||
|
/** Value */
|
||
|
t_u32 value;
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_REG;
|
||
|
|
||
|
/** HostCmd_DS_MEM */
|
||
|
typedef struct MAPP_HostCmd_DS_MEM {
|
||
|
/** Read or write */
|
||
|
t_u16 action;
|
||
|
/** Reserved */
|
||
|
t_u16 reserved;
|
||
|
/** Address */
|
||
|
t_u32 addr;
|
||
|
/** Value */
|
||
|
t_u32 value;
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_MEM;
|
||
|
|
||
|
typedef struct _HostCmd_DS_MEF_CFG {
|
||
|
/** Criteria */
|
||
|
t_u32 Criteria;
|
||
|
/** Number of entries */
|
||
|
t_u16 NumEntries;
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_MEF_CFG;
|
||
|
|
||
|
typedef struct _MEF_CFG_DATA {
|
||
|
/** Size */
|
||
|
t_u16 size;
|
||
|
/** Data */
|
||
|
HostCmd_DS_MEF_CFG data;
|
||
|
} __ATTRIB_PACK__ MEF_CFG_DATA;
|
||
|
|
||
|
/** HostCmd_DS_GEN */
|
||
|
typedef struct MAPP_HostCmd_DS_GEN {
|
||
|
/** Command */
|
||
|
t_u16 command;
|
||
|
/** Size */
|
||
|
t_u16 size;
|
||
|
/** Sequence number */
|
||
|
t_u16 seq_num;
|
||
|
/** Result */
|
||
|
t_u16 result;
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_GEN;
|
||
|
|
||
|
/** Size of HostCmd_DS_GEN */
|
||
|
#define S_DS_GEN sizeof(HostCmd_DS_GEN)
|
||
|
|
||
|
/** pkt_header */
|
||
|
typedef struct _pkt_header {
|
||
|
/** pkt_len */
|
||
|
t_u32 pkt_len;
|
||
|
/** pkt_type */
|
||
|
t_u32 TxPktType;
|
||
|
/** tx control */
|
||
|
t_u32 TxControl;
|
||
|
} pkt_header;
|
||
|
|
||
|
/** eth_priv_802_11_header packet from FW with length */
|
||
|
typedef struct _eth_priv_mgmt_frame_tx {
|
||
|
/** Packet Length */
|
||
|
t_u16 frm_len;
|
||
|
/** Frame Control */
|
||
|
t_u16 frm_ctl;
|
||
|
/** Duration ID */
|
||
|
t_u16 duration_id;
|
||
|
/** Address1 */
|
||
|
t_u8 addr1[ETH_ALEN];
|
||
|
/** Address2 */
|
||
|
t_u8 addr2[ETH_ALEN];
|
||
|
/** Address3 */
|
||
|
t_u8 addr3[ETH_ALEN];
|
||
|
/** Sequence Control */
|
||
|
t_u16 seq_ctl;
|
||
|
/** Address4 */
|
||
|
t_u8 addr4[ETH_ALEN];
|
||
|
/** Frame payload */
|
||
|
t_u8 payload[0];
|
||
|
} __ATTRIB_PACK__ eth_priv_mgmt_frame_tx;
|
||
|
|
||
|
/** frame tx ioctl number */
|
||
|
#define FRAME_TX_IOCTL (SIOCDEVPRIVATE + 12)
|
||
|
|
||
|
typedef struct {
|
||
|
t_u32 timeSinceLastQuery_ms; /**< Duration of stats collection */
|
||
|
|
||
|
t_u16 bcnCnt; /**< Number of beacons received */
|
||
|
t_u16 bcnMiss; /**< Estimate of beacons missed */
|
||
|
t_s16 bcnRssiAvg; /**< Avg beacon RSSI */
|
||
|
t_s16 bcnSnrAvg; /**< Avg beacon SNR */
|
||
|
|
||
|
t_u32 rxPkts; /**< Number of packets received */
|
||
|
t_s16 rxRssiAvg; /**< Avg received packet RSSI */
|
||
|
t_s16 rxSnrAvg; /**< Avg received packet SNR */
|
||
|
|
||
|
t_u32 txPkts; /**< Number of packets transmitted */
|
||
|
t_u32 txAttempts; /**< Number of attempts made */
|
||
|
t_u32 txFailures; /**< Number of pkts that failed */
|
||
|
t_u8 txInitRate; /**< Current rate adaptation TX rateid */
|
||
|
t_u8 reserved[3]; /**< Reserved */
|
||
|
|
||
|
t_u16 txQueuePktCnt[MAX_AC_QUEUES];
|
||
|
/**< Number of packets per AC */
|
||
|
t_u32 txQueueDelay[MAX_AC_QUEUES];
|
||
|
/**< Averge queue delay per AC*/
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_LINK_STATS_SUMMARY;
|
||
|
|
||
|
#define HostCmd_CMD_LINK_STATS_SUMMARY 0x00d3
|
||
|
|
||
|
/** Type enumeration of WMM AC_QUEUES */
|
||
|
typedef enum _wmm_ac {
|
||
|
AC_BE,
|
||
|
AC_BK,
|
||
|
AC_VI,
|
||
|
AC_VO,
|
||
|
} wmm_ac;
|
||
|
|
||
|
/** Data structure of Host command WMM_PARAM_CFG */
|
||
|
typedef struct _HostCmd_DS_WMM_PARAM_CONFIG {
|
||
|
/** action */
|
||
|
t_u16 action;
|
||
|
/** AC Parameters Record WMM_AC_BE, WMM_AC_BK, WMM_AC_VI, WMM_AC_VO */
|
||
|
IEEEtypes_WmmAcParameters_t ac_params[MAX_AC_QUEUES];
|
||
|
} __ATTRIB_PACK__ HostCmd_DS_WMM_PARAM_CONFIG;
|
||
|
|
||
|
/** Host Command ID : Configure ADHOC_OVER_IP parameters */
|
||
|
#define HostCmd_CMD_WMM_PARAM_CONFIG 0x023a
|
||
|
|
||
|
/** TLV ID for multi chan info */
|
||
|
#define MULTI_CHAN_INFO_TLV_ID (PROPRIETARY_TLV_BASE_ID + 0xb7)
|
||
|
/** TLV ID for multi chan group info */
|
||
|
#define MULTI_CHAN_GROUP_INFO_TLV_ID (PROPRIETARY_TLV_BASE_ID + 0xb8)
|
||
|
/** BSS number mask */
|
||
|
#define BSS_NUM_MASK 0xf
|
||
|
|
||
|
typedef struct _eth_priv_multi_chan_cfg {
|
||
|
/** Channel Time in us*/
|
||
|
t_u32 channel_time;
|
||
|
/** Buffer Weight */
|
||
|
t_u8 buffer_weight;
|
||
|
/** tlv len */
|
||
|
t_u16 tlv_len;
|
||
|
/** TLV Buffer */
|
||
|
t_u8 tlv_buf[0];
|
||
|
} __ATTRIB_PACK__ eth_priv_multi_chan_cfg;
|
||
|
|
||
|
typedef struct _eth_priv_drcs_cfg {
|
||
|
/** Channel Index*/
|
||
|
t_u16 chan_idx;
|
||
|
/** Channel time (in TU) for chan_idx*/
|
||
|
t_u8 chantime;
|
||
|
/** Channel swith time (in TU) for chan_idx*/
|
||
|
t_u8 switchtime;
|
||
|
/** Undoze time (in TU) for chan_idx*/
|
||
|
t_u8 undozetime;
|
||
|
/** Rx traffic control scheme when channel switch*/
|
||
|
/** only valid for GC/STA interface*/
|
||
|
t_u8 mode;
|
||
|
} __ATTRIB_PACK__ eth_priv_drcs_cfg;
|
||
|
|
||
|
typedef struct _ChannelBandInfo {
|
||
|
Band_Config_t bandcfg;
|
||
|
t_u8 chan_num;
|
||
|
} __ATTRIB_PACK__ ChannelBandInfo;
|
||
|
|
||
|
typedef struct _MrvlIETypes_multi_chan_group_info_t {
|
||
|
/** Header */
|
||
|
MrvlIEtypesHeader_t header;
|
||
|
t_u8 chan_group_id;
|
||
|
t_u8 chan_buff_weight;
|
||
|
ChannelBandInfo chan_band_info;
|
||
|
t_u32 channel_time;
|
||
|
t_u32 reserved;
|
||
|
union {
|
||
|
t_u8 sdio_func_num;
|
||
|
t_u8 usb_epnum;
|
||
|
} __ATTRIB_PACK__ hid_num;
|
||
|
t_u8 num_intf;
|
||
|
t_u8 bss_type_numlist[0];
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_multi_chan_group_info_t;
|
||
|
|
||
|
typedef struct _MrvlIETypes_multi_chan_info_t {
|
||
|
/** Header */
|
||
|
MrvlIEtypesHeader_t header;
|
||
|
/** multi channel operation status */
|
||
|
t_u16 status;
|
||
|
/** Tlv buffer */
|
||
|
t_u8 tlv_buffer[0];
|
||
|
} __ATTRIB_PACK__ MrvlIEtypes_multi_chan_info_t;
|
||
|
|
||
|
#ifdef WIFI_DIRECT_SUPPORT
|
||
|
/** flag for NOA */
|
||
|
#define WIFI_DIRECT_NOA 1
|
||
|
/** flag for OPP_PS */
|
||
|
#define WIFI_DIRECT_OPP_PS 2
|
||
|
/** Type definition of mlan_ds_wifi_direct_config for MLAN_OID_MISC_WIFI_DIRECT_CONFIG */
|
||
|
typedef struct _mlan_ds_wifi_direct_config {
|
||
|
/** flags for NOA/OPP_PS */
|
||
|
t_u8 flags;
|
||
|
/** NoA enable/disable */
|
||
|
t_u8 noa_enable;
|
||
|
/** index */
|
||
|
t_u16 index;
|
||
|
/** NoA count */
|
||
|
t_u8 noa_count;
|
||
|
/** NoA duration */
|
||
|
t_u32 noa_duration;
|
||
|
/** NoA interval */
|
||
|
t_u32 noa_interval;
|
||
|
/** opp ps enable/disable */
|
||
|
t_u8 opp_ps_enable;
|
||
|
/** CT window value */
|
||
|
t_u8 ct_window;
|
||
|
} mlan_ds_wifi_direct_config;
|
||
|
#endif
|
||
|
|
||
|
/** DFS repeater mode configuration */
|
||
|
typedef struct _dfs_repeater {
|
||
|
/** Enable DFS repeater mode */
|
||
|
t_u16 action;
|
||
|
/** 1 on and 0 off */
|
||
|
t_u16 mode;
|
||
|
} dfs_repeater;
|
||
|
|
||
|
#ifdef RX_PACKET_COALESCE
|
||
|
/** RX packet coalesce tlv */
|
||
|
typedef struct _tlvbuf_rx_pkt_coal_t {
|
||
|
/** threshold for rx packets */
|
||
|
t_u32 rx_pkt_count;
|
||
|
/** timeout for rx coalescing timer */
|
||
|
t_u16 delay;
|
||
|
} tlvbuf_rx_pkt_coal_t;
|
||
|
#endif
|
||
|
|
||
|
/** Maximum SSID length */
|
||
|
#define MAX_SSID_LENGTH 32
|
||
|
/** Maximum SSID length */
|
||
|
#define MIN_SSID_LENGTH 1
|
||
|
/** Maximum WPA passphrase length */
|
||
|
#define MAX_WPA_PASSPHRASE_LENGTH 64
|
||
|
/** Minimum WPA passphrase length */
|
||
|
#define MIN_WPA_PASSPHRASE_LENGTH 8
|
||
|
|
||
|
#define TLV_TYPE_PER_PKT_CFG 0x0001
|
||
|
#define MAX_NUM_ETHER_TYPE 8
|
||
|
#define MAX_TXRX_CTRL 3
|
||
|
#define TX_PKT_CTRL MBIT(0)
|
||
|
#define RX_PKT_INFO MBIT(1)
|
||
|
/** PER_PKT_CFG_TLV for per-packet configuration */
|
||
|
typedef struct _MrvlIEtypes_per_pkt_cfg_t {
|
||
|
/** Header */
|
||
|
MrvlIEtypesHeader_t header;
|
||
|
/** Tx/Rx per-packet control */
|
||
|
t_u8 tx_rx_control;
|
||
|
/** Number of ethernet types in ether_type array */
|
||
|
t_u8 proto_type_num;
|
||
|
/** Array of ether_type for per-packet control */
|
||
|
t_u16 ether_type[0];
|
||
|
} MrvlIEtypes_per_pkt_cfg_t;
|
||
|
|
||
|
#define FLAG_TX_HISTOGRAM 0x01
|
||
|
#define FLAG_RX_HISTOGRAM 0x02
|
||
|
#define DISABLE_TX_RX_HISTOGRAM 0x00
|
||
|
#define ENABLE_TX_RX_HISTOGRAM 0x01
|
||
|
#define GET_TX_RX_HISTOGRAM 0x02
|
||
|
/** TX histogram statistic parameters*/
|
||
|
typedef struct _tx_pkt_rate_info {
|
||
|
/** tx packet counter of MCS0~MCS15 */
|
||
|
t_u32 htmcs_txcnt[16];
|
||
|
/** tx packet's short GI counter of MCS0~MCS15 */
|
||
|
t_u32 htsgi_txcnt[16];
|
||
|
/** tx STBC packet counter of MCS0~MCS15 */
|
||
|
t_u32 htstbcrate_txcnt[16];
|
||
|
/** tx packet counter of MCS0~MCS9 */
|
||
|
t_u32 vhtmcs_txcnt[10];
|
||
|
/** tx packet's short GI counter of MCS0~MCS9 */
|
||
|
t_u32 vhtsgi_txcnt[10];
|
||
|
/** tx STBC packet counter of MCS0~MCS9 */
|
||
|
t_u32 vhtstbcrate_txcnt[10];
|
||
|
/** tx packet counter of every NSS, NSS=1,2 */
|
||
|
t_u32 nss_txcnt[2];
|
||
|
/** tx packet counter of every bandwith */
|
||
|
t_u32 bandwidth_txcnt[3];
|
||
|
/** different preamble tx packet counter */
|
||
|
t_u32 preamble_txcnt[4];
|
||
|
/** tx packet counter of using LDPC coding */
|
||
|
t_u32 ldpc_txcnt;
|
||
|
/** transmitted RTS counter */
|
||
|
t_u32 rts_txcnt;
|
||
|
/** RSSI of ack */
|
||
|
t_s32 ack_RSSI;
|
||
|
} tx_pkt_rate_info;
|
||
|
/** RX histogram statistic parameters*/
|
||
|
typedef struct _rx_pkt_rate_info {
|
||
|
/** Rx packet counter of MCS0~MCS15 */
|
||
|
t_u32 htmcs_rxcnt[16];
|
||
|
/** Rx packet's short GI counter of MCS0~MCS15 */
|
||
|
t_u32 htsgi_rxcnt[16];
|
||
|
/** Rx STBC packet counter of MCS0~MCS15 */
|
||
|
t_u32 htstbcrate_rxcnt[16];
|
||
|
/** Rx packet counter of MCS0~MCS9 */
|
||
|
t_u32 vhtmcs_rxcnt[10];
|
||
|
/** Rx packet's short GI counter of MCS0~MCS9 */
|
||
|
t_u32 vhtsgi_rxcnt[10];
|
||
|
/** Rx STBC packet counter of MCS0~MCS9 */
|
||
|
t_u32 vhtstbcrate_rxcnt[10];
|
||
|
/** Rx packet counter of every NSS, NSS=1,2 */
|
||
|
t_u32 nss_rxcnt[2];
|
||
|
/** Received packet counter which using STBC */
|
||
|
t_u32 nsts_rxcnt;
|
||
|
/** Rx packet counter of every bandwith */
|
||
|
t_u32 bandwidth_rxcnt[3];
|
||
|
/** Different preamble Rx packet counter */
|
||
|
t_u32 preamble_rxcnt[6];
|
||
|
/** VHT SIGA2 LDPC bit*/
|
||
|
t_u32 ldpc_txbfcnt[2];
|
||
|
/** Average RSSI */
|
||
|
t_s32 rssi_value[2];
|
||
|
/** RSSI value of path A */
|
||
|
t_s32 rssi_chain0[4];
|
||
|
/** RSSI value of path B */
|
||
|
t_s32 rssi_chain1[4];
|
||
|
} rx_pkt_rate_info;
|
||
|
/** TX and RX histogram statistic parameters*/
|
||
|
typedef struct _tx_rx_histogram {
|
||
|
/** Enable or disable get tx/rx histogram statistic */
|
||
|
t_u8 enable;
|
||
|
/** Choose to get TX, RX or both histogram statistic */
|
||
|
t_u8 action;
|
||
|
} __ATTRIB_PACK__ tx_rx_histogram;
|
||
|
|
||
|
#define ETH_P_WSMP 0x88dc
|
||
|
#define BUF_SIZ 1024
|
||
|
typedef struct {
|
||
|
t_u8 version;
|
||
|
t_u8 sec_type;
|
||
|
t_u8 chan;
|
||
|
t_u8 rate;
|
||
|
t_u8 tx_pow;
|
||
|
t_u8 app_class;
|
||
|
t_u8 acm_len;
|
||
|
t_u16 len;
|
||
|
} __ATTRIB_PACK__ wsmp_header;
|
||
|
|
||
|
typedef struct {
|
||
|
t_u16 rx_datarate; //Data rate
|
||
|
t_u8 rx_channel; //Channel number
|
||
|
t_u8 rx_antenna; //received antenna
|
||
|
t_s8 rx_RSSI; //RSSI info
|
||
|
t_u8 reserved[3]; //Reserved fields
|
||
|
} __ATTRIB_PACK__ dot11_rxcontrol;
|
||
|
|
||
|
typedef struct {
|
||
|
t_u16 tx_datarate; //Data rate in unit of 0.5Mbps
|
||
|
t_u8 tx_channel; //Channel number to transmit the frame
|
||
|
t_u8 tx_Bw; //Bandwidth to transmit the frame
|
||
|
t_u8 tx_power; //Power to be used for transmission
|
||
|
t_u8 pkt_priority; //Priority of the packet to be transmitted
|
||
|
t_u8 retry_limit; //tx retry limit
|
||
|
t_u8 reserved[1]; //Reserved fields
|
||
|
} __ATTRIB_PACK__ dot11_txcontrol;
|
||
|
|
||
|
/* CW_MODE_CTRL structure*/
|
||
|
typedef struct {
|
||
|
t_u8 mode;
|
||
|
t_u8 channel;
|
||
|
t_u8 chanInfo;
|
||
|
t_u16 txPower;
|
||
|
t_u16 pktLength;
|
||
|
t_u32 rateInfo;
|
||
|
} __ATTRIB_PACK__ cw_mode_ctrl;
|
||
|
|
||
|
#define TX_AMPDU_RTS_CTS 0
|
||
|
#define TX_AMPDU_CTS_2_SELF 1
|
||
|
#define TX_AMPDU_DISABLE_PROTECTION 2
|
||
|
/** tx_ampdu_prot_mode parameters */
|
||
|
typedef struct _tx_ampdu_prot_mode_para {
|
||
|
/** set prot mode */
|
||
|
int mode;
|
||
|
} tx_ampdu_prot_mode_para;
|
||
|
|
||
|
/** channel statictics */
|
||
|
typedef struct _ChStat_t {
|
||
|
/** channle number */
|
||
|
t_u8 chan_num;
|
||
|
/** total network */
|
||
|
t_u16 total_networks;
|
||
|
/** busy duration */
|
||
|
t_u16 cca_busy_duration;
|
||
|
} ChStat_t, *pChStat_t;
|
||
|
|
||
|
#define MAX_CH_STATS MAX_BG_CHANNEL
|
||
|
/** Type definition of mlan_acs_scan */
|
||
|
typedef struct _acs_result {
|
||
|
/** Best Channel Number */
|
||
|
t_u8 best_ch;
|
||
|
/** Channel Statistics Number */
|
||
|
t_u8 ch_stats_num;
|
||
|
/** Channel Statistics */
|
||
|
ChStat_t ch_stats[0];
|
||
|
} acs_result, *pacs_result;
|
||
|
|
||
|
/** BF Global Configuration */
|
||
|
#define BF_GLOBAL_CONFIGURATION 0x00
|
||
|
/** Performs NDP sounding for PEER specified */
|
||
|
#define TRIGGER_SOUNDING_FOR_PEER 0x01
|
||
|
/** TX BF interval for channel sounding */
|
||
|
#define SET_GET_BF_PERIODICITY 0x02
|
||
|
/** Tell FW not to perform any sounding for peer */
|
||
|
#define TX_BF_FOR_PEER_ENBL 0x03
|
||
|
/** TX BF SNR threshold for peer */
|
||
|
#define SET_SNR_THR_PEER 0x04
|
||
|
/** TX Sounding*/
|
||
|
#define TX_SOUNDING_CFG 0x05
|
||
|
|
||
|
/** bf global cfg args */
|
||
|
typedef struct _bf_global_cfg {
|
||
|
/** Global enable/disable bf */
|
||
|
t_u8 bf_enbl;
|
||
|
/** Global enable/disable sounding */
|
||
|
t_u8 sounding_enbl;
|
||
|
/** FB Type */
|
||
|
t_u8 fb_type;
|
||
|
/** SNR Threshold */
|
||
|
t_u8 snr_threshold;
|
||
|
/** Sounding interval in milliseconds */
|
||
|
t_u16 sounding_interval;
|
||
|
/** BF mode */
|
||
|
t_u8 bf_mode;
|
||
|
/** Reserved */
|
||
|
t_u8 reserved;
|
||
|
} bf_global_cfg;
|
||
|
|
||
|
/** trigger sounding args */
|
||
|
typedef struct _trigger_sound {
|
||
|
/** Peer MAC address */
|
||
|
t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
|
||
|
/** Status */
|
||
|
t_u8 status;
|
||
|
} trigger_sound;
|
||
|
|
||
|
/** bf periodicity args */
|
||
|
typedef struct _bf_periodicity_cfg {
|
||
|
/** Peer MAC address */
|
||
|
t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
|
||
|
/** Current Tx BF Interval in milliseconds */
|
||
|
t_u16 interval;
|
||
|
/** Status */
|
||
|
t_u8 status;
|
||
|
} bf_periodicity_cfg;
|
||
|
|
||
|
/** tx bf peer args */
|
||
|
typedef struct _tx_bf_peer_cfg {
|
||
|
/** Peer MAC address */
|
||
|
t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
|
||
|
/** Reserved */
|
||
|
t_u16 reserved;
|
||
|
/** Enable/Disable Beamforming */
|
||
|
t_u8 bf_enbl;
|
||
|
/** Enable/Disable sounding */
|
||
|
t_u8 sounding_enbl;
|
||
|
/** FB Type */
|
||
|
t_u8 fb_type;
|
||
|
} tx_bf_peer_cfg;
|
||
|
|
||
|
/** SNR threshold args */
|
||
|
typedef struct _snr_thr_cfg {
|
||
|
/** Peer MAC address */
|
||
|
t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
|
||
|
/** SNR for peer */
|
||
|
t_u8 snr;
|
||
|
} snr_thr_cfg;
|
||
|
|
||
|
/** tx sounding cfg */
|
||
|
typedef struct _tx_sounding_cfg {
|
||
|
/** enable/disable tx sounding */
|
||
|
t_u8 tx_sounding_enbl;
|
||
|
/** Sounding Type */
|
||
|
t_u8 sounding_type;
|
||
|
/** Sounding interval in milliseconds */
|
||
|
t_u16 sounding_interval;
|
||
|
} tx_sounding_cfg;
|
||
|
|
||
|
/**
|
||
|
* Type definitions for TCLAS element
|
||
|
*/
|
||
|
#define TCLAS_CLASSIFIER_TYPE_4 4
|
||
|
|
||
|
/**
|
||
|
* IEEE TCLAS Classifier Type 4
|
||
|
*
|
||
|
* Type definition for Classifier Type 4 in TCLAS element
|
||
|
*
|
||
|
*/
|
||
|
typedef struct _IEEEtypes_TCLAS_IPv4_t {
|
||
|
/** Version */
|
||
|
t_u8 version;
|
||
|
/** Source IP address */
|
||
|
t_u8 source_ip_addr[4];
|
||
|
/** Dest IP address */
|
||
|
t_u8 dest_ip_addr[4];
|
||
|
/** Source port */
|
||
|
t_u8 source_port[2];
|
||
|
/** Dest port */
|
||
|
t_u8 dest_port[2];
|
||
|
/** DSCP value */
|
||
|
t_u8 dscp;
|
||
|
/** Protocol value */
|
||
|
t_u8 protocol;
|
||
|
/** Reserved */
|
||
|
t_u8 reserved;
|
||
|
} __ATTRIB_PACK__ IEEEtypes_TCLAS_IPv4_t;
|
||
|
|
||
|
/**
|
||
|
* IEEE TCLAS base
|
||
|
*
|
||
|
* Type definition for common parameters for every
|
||
|
* classifier type
|
||
|
*
|
||
|
*/
|
||
|
typedef struct _IEEEtypes_TCLAS_Base_t {
|
||
|
/** Element id */
|
||
|
IEEEtypes_ElementId_e element_id;
|
||
|
/** Element len */
|
||
|
t_u8 element_len;
|
||
|
/** User priority */
|
||
|
t_u8 user_priority;
|
||
|
/** Classifier type */
|
||
|
t_u8 classifier_type;
|
||
|
/** Classifier mask */
|
||
|
t_u8 classifier_mask;
|
||
|
} __ATTRIB_PACK__ IEEEtypes_TCLAS_Base_t;
|
||
|
|
||
|
/**
|
||
|
* IEEE TCLAS element
|
||
|
*
|
||
|
* Type definition for TCLAS element with different
|
||
|
* classifier types
|
||
|
*
|
||
|
*/
|
||
|
typedef struct _IEEEtypes_TCLAS_t {
|
||
|
/** Base structure for TCLAS */
|
||
|
IEEEtypes_TCLAS_Base_t tclas_base;
|
||
|
|
||
|
union {
|
||
|
/** Classifier type 4 */
|
||
|
IEEEtypes_TCLAS_IPv4_t ipv4;
|
||
|
} __ATTRIB_PACK__ classifier;
|
||
|
} __ATTRIB_PACK__ IEEEtypes_TCLAS_t;
|
||
|
|
||
|
/**
|
||
|
* TCLAS element TLV
|
||
|
*
|
||
|
* Structure that defines TLV for TCLAS element with different
|
||
|
* classifier types
|
||
|
*
|
||
|
*/
|
||
|
typedef struct tclasElemen_tlv {
|
||
|
/** Header */
|
||
|
MrvlIEtypesHeader_t header;
|
||
|
/** Tclas Ie */
|
||
|
IEEEtypes_TCLAS_t tclas_ie;
|
||
|
} __ATTRIB_PACK__ tclas_element_tlv_t;
|
||
|
|
||
|
#endif /* _MLANUTL_H_ */
|