/** @file mlan_ioctl.h
 *
 *  @brief This file declares the IOCTL data structures and APIs.
 *
 *
 *  Copyright 2008-2021 NXP
 *
 *  This software file (the File) is distributed by NXP
 *  under the terms of the GNU General Public License Version 2, June 1991
 *  (the License).  You may use, redistribute and/or modify the 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/07/2008: initial version
******************************************************/

#ifndef _MLAN_IOCTL_H_
#define _MLAN_IOCTL_H_

/** Enumeration for IOCTL request ID */
enum _mlan_ioctl_req_id {
	/* Scan Group */
	MLAN_IOCTL_SCAN = 0x00010000,
	MLAN_OID_SCAN_NORMAL = 0x00010001,
	MLAN_OID_SCAN_SPECIFIC_SSID = 0x00010002,
	MLAN_OID_SCAN_USER_CONFIG = 0x00010003,
	MLAN_OID_SCAN_CONFIG = 0x00010004,
	MLAN_OID_SCAN_GET_CURRENT_BSS = 0x00010005,
	MLAN_OID_SCAN_CANCEL = 0x00010006,
	MLAN_OID_SCAN_TABLE_FLUSH = 0x0001000A,
	MLAN_OID_SCAN_BGSCAN_CONFIG = 0x0001000B,
	/* BSS Configuration Group */
	MLAN_IOCTL_BSS = 0x00020000,
	MLAN_OID_BSS_START = 0x00020001,
	MLAN_OID_BSS_STOP = 0x00020002,
	MLAN_OID_BSS_MODE = 0x00020003,
	MLAN_OID_BSS_CHANNEL = 0x00020004,
	MLAN_OID_BSS_CHANNEL_LIST = 0x00020005,
	MLAN_OID_BSS_MAC_ADDR = 0x00020006,
	MLAN_OID_BSS_MULTICAST_LIST = 0x00020007,
	MLAN_OID_BSS_FIND_BSS = 0x00020008,
	MLAN_OID_IBSS_BCN_INTERVAL = 0x00020009,
	MLAN_OID_IBSS_ATIM_WINDOW = 0x0002000A,
	MLAN_OID_IBSS_CHANNEL = 0x0002000B,
#ifdef UAP_SUPPORT
	MLAN_OID_UAP_BSS_CONFIG = 0x0002000C,
	MLAN_OID_UAP_DEAUTH_STA = 0x0002000D,
	MLAN_OID_UAP_BSS_RESET = 0x0002000E,
#endif
#if defined(STA_SUPPORT) && defined(UAP_SUPPORT)
	MLAN_OID_BSS_ROLE = 0x0002000F,
#endif
#ifdef WIFI_DIRECT_SUPPORT
	MLAN_OID_WIFI_DIRECT_MODE = 0x00020010,
#endif
#ifdef STA_SUPPORT
	MLAN_OID_BSS_LISTEN_INTERVAL = 0x00020011,
#endif
	MLAN_OID_BSS_REMOVE = 0x00020014,
#ifdef UAP_SUPPORT
	MLAN_OID_UAP_CFG_WMM_PARAM = 0x00020015,
#endif
	MLAN_OID_BSS_11D_CHECK_CHANNEL = 0x00020016,
#ifdef UAP_SUPPORT
	MLAN_OID_UAP_ACS_SCAN = 0x00020017,
	MLAN_OID_UAP_SCAN_CHANNELS = 0x00020018,
	MLAN_OID_UAP_CHANNEL = 0x00020019,
	MLAN_OID_UAP_OPER_CTRL = 0x0002001A,
#endif
#ifdef STA_SUPPORT
	MLAN_OID_BSS_CHAN_INFO = 0x0002001B,
#endif
#ifdef UAP_SUPPORT
	MLAN_OID_UAP_ADD_STATION = 0x0002001C,
#endif

	MLAN_OID_BSS_FIND_BSSID = 0x0002001D,
#ifdef UAP_SUPPORT
	MLAN_OID_ACTION_CHAN_SWITCH = 0x0002001E,
#endif

	/* Radio Configuration Group */
	MLAN_IOCTL_RADIO_CFG = 0x00030000,
	MLAN_OID_RADIO_CTRL = 0x00030001,
	MLAN_OID_BAND_CFG = 0x00030002,
	MLAN_OID_ANT_CFG = 0x00030003,
	MLAN_OID_REMAIN_CHAN_CFG = 0x00030004,
	MLAN_OID_MIMO_SWITCH = 0x00030005,

	/* SNMP MIB Group */
	MLAN_IOCTL_SNMP_MIB = 0x00040000,
	MLAN_OID_SNMP_MIB_RTS_THRESHOLD = 0x00040001,
	MLAN_OID_SNMP_MIB_FRAG_THRESHOLD = 0x00040002,
	MLAN_OID_SNMP_MIB_RETRY_COUNT = 0x00040003,
	MLAN_OID_SNMP_MIB_DOT11D = 0x00040004,
#if defined(UAP_SUPPORT)
	MLAN_OID_SNMP_MIB_DOT11H = 0x00040005,
#endif
	MLAN_OID_SNMP_MIB_DTIM_PERIOD = 0x00040006,
	MLAN_OID_SNMP_MIB_SIGNALEXT_ENABLE = 0x00040007,
	MLAN_OID_SNMP_MIB_CTRL_DEAUTH = 0x00040008,

	/* Status Information Group */
	MLAN_IOCTL_GET_INFO = 0x00050000,
	MLAN_OID_GET_STATS = 0x00050001,
	MLAN_OID_GET_SIGNAL = 0x00050002,
	MLAN_OID_GET_FW_INFO = 0x00050003,
	MLAN_OID_GET_VER_EXT = 0x00050004,
	MLAN_OID_GET_BSS_INFO = 0x00050005,
	MLAN_OID_GET_DEBUG_INFO = 0x00050006,
#ifdef UAP_SUPPORT
	MLAN_OID_UAP_STA_LIST = 0x00050007,
#endif
	MLAN_OID_GET_SIGNAL_EXT = 0x00050008,
	MLAN_OID_LINK_STATS = 0x00050009,
	MLAN_OID_GET_UAP_STATS_LOG = 0x0005000A,
	/* Security Configuration Group */
	MLAN_IOCTL_SEC_CFG = 0x00060000,
	MLAN_OID_SEC_CFG_AUTH_MODE = 0x00060001,
	MLAN_OID_SEC_CFG_ENCRYPT_MODE = 0x00060002,
	MLAN_OID_SEC_CFG_WPA_ENABLED = 0x00060003,
	MLAN_OID_SEC_CFG_ENCRYPT_KEY = 0x00060004,
	MLAN_OID_SEC_CFG_PASSPHRASE = 0x00060005,
	MLAN_OID_SEC_CFG_EWPA_ENABLED = 0x00060006,
	MLAN_OID_SEC_CFG_ESUPP_MODE = 0x00060007,
	MLAN_OID_SEC_CFG_WAPI_ENABLED = 0x00060009,
	MLAN_OID_SEC_CFG_PORT_CTRL_ENABLED = 0x0006000A,
#ifdef UAP_SUPPORT
	MLAN_OID_SEC_CFG_REPORT_MIC_ERR = 0x0006000B,
#endif
	MLAN_OID_SEC_QUERY_KEY = 0x0006000C,

	/* Rate Group */
	MLAN_IOCTL_RATE = 0x00070000,
	MLAN_OID_RATE_CFG = 0x00070001,
	MLAN_OID_GET_DATA_RATE = 0x00070002,
	MLAN_OID_SUPPORTED_RATES = 0x00070003,

	/* Power Configuration Group */
	MLAN_IOCTL_POWER_CFG = 0x00080000,
	MLAN_OID_POWER_CFG = 0x00080001,
	MLAN_OID_POWER_CFG_EXT = 0x00080002,
	MLAN_OID_POWER_LOW_POWER_MODE = 0x00080003,

	/* Power Management Configuration Group */
	MLAN_IOCTL_PM_CFG = 0x00090000,
	MLAN_OID_PM_CFG_IEEE_PS = 0x00090001,
	MLAN_OID_PM_CFG_HS_CFG = 0x00090002,
	MLAN_OID_PM_CFG_INACTIVITY_TO = 0x00090003,
	MLAN_OID_PM_CFG_DEEP_SLEEP = 0x00090004,
	MLAN_OID_PM_CFG_SLEEP_PD = 0x00090005,
	MLAN_OID_PM_CFG_PS_CFG = 0x00090006,
	MLAN_OID_PM_CFG_SLEEP_PARAMS = 0x00090008,
#ifdef UAP_SUPPORT
	MLAN_OID_PM_CFG_PS_MODE = 0x00090009,
#endif /* UAP_SUPPORT */
	MLAN_OID_PM_INFO = 0x0009000A,
	MLAN_OID_PM_HS_WAKEUP_REASON = 0x0009000B,
	MLAN_OID_PM_MGMT_FILTER = 0x0009000C,
	MLAN_OID_PM_CFG_BCN_TIMEOUT = 0x0009000D,

	/* WMM Configuration Group */
	MLAN_IOCTL_WMM_CFG = 0x000A0000,
	MLAN_OID_WMM_CFG_ENABLE = 0x000A0001,
	MLAN_OID_WMM_CFG_QOS = 0x000A0002,
	MLAN_OID_WMM_CFG_ADDTS = 0x000A0003,
	MLAN_OID_WMM_CFG_DELTS = 0x000A0004,
	MLAN_OID_WMM_CFG_QUEUE_CONFIG = 0x000A0005,
	MLAN_OID_WMM_CFG_QUEUE_STATS = 0x000A0006,
	MLAN_OID_WMM_CFG_QUEUE_STATUS = 0x000A0007,
	MLAN_OID_WMM_CFG_TS_STATUS = 0x000A0008,

	/* WPS Configuration Group */
	MLAN_IOCTL_WPS_CFG = 0x000B0000,
	MLAN_OID_WPS_CFG_SESSION = 0x000B0001,

	/* 802.11n Configuration Group */
	MLAN_IOCTL_11N_CFG = 0x000C0000,
	MLAN_OID_11N_CFG_TX = 0x000C0001,
	MLAN_OID_11N_HTCAP_CFG = 0x000C0002,
	MLAN_OID_11N_CFG_ADDBA_REJECT = 0x000C0003,
	MLAN_OID_11N_CFG_AGGR_PRIO_TBL = 0x000C0004,
	MLAN_OID_11N_CFG_ADDBA_PARAM = 0x000C0005,
	MLAN_OID_11N_CFG_MAX_TX_BUF_SIZE = 0x000C0006,
	MLAN_OID_11N_CFG_AMSDU_AGGR_CTRL = 0x000C0007,
	MLAN_OID_11N_CFG_SUPPORTED_MCS_SET = 0x000C0008,
	MLAN_OID_11N_CFG_TX_BF_CAP = 0x000C0009,
	MLAN_OID_11N_CFG_TX_BF_CFG = 0x000C000A,
	MLAN_OID_11N_CFG_STREAM_CFG = 0x000C000B,
	MLAN_OID_11N_CFG_DELBA = 0x000C000C,
	MLAN_OID_11N_CFG_REJECT_ADDBA_REQ = 0x000C000D,
	MLAN_OID_11N_CFG_COEX_RX_WINSIZE = 0x000C000E,
	MLAN_OID_11N_CFG_TX_AGGR_CTRL = 0x000C000F,
	MLAN_OID_11N_CFG_IBSS_AMPDU_PARAM = 0x000C0010,
	MLAN_OID_11N_CFG_MIN_BA_THRESHOLD = 0x000C0011,

	/* 802.11d Configuration Group */
	MLAN_IOCTL_11D_CFG = 0x000D0000,
#ifdef STA_SUPPORT
	MLAN_OID_11D_CFG_ENABLE = 0x000D0001,
	MLAN_OID_11D_CLR_CHAN_TABLE = 0x000D0002,
#endif /* STA_SUPPORT */
#ifdef UAP_SUPPORT
	MLAN_OID_11D_DOMAIN_INFO = 0x000D0003,
#endif
	MLAN_OID_11D_DOMAIN_INFO_EXT = 0x000D0004,

	/* Register Memory Access Group */
	MLAN_IOCTL_REG_MEM = 0x000E0000,
	MLAN_OID_REG_RW = 0x000E0001,
	MLAN_OID_EEPROM_RD = 0x000E0002,
	MLAN_OID_MEM_RW = 0x000E0003,

	/* Multi-Radio Configuration Group */
	MLAN_IOCTL_MFR_CFG = 0x00100000,
	/* 802.11h Configuration Group */
	MLAN_IOCTL_11H_CFG = 0x00110000,
	MLAN_OID_11H_CHANNEL_CHECK = 0x00110001,
	MLAN_OID_11H_LOCAL_POWER_CONSTRAINT = 0x00110002,
	MLAN_OID_11H_DFS_TESTING = 0x00110003,
	MLAN_OID_11H_CHAN_REPORT_REQUEST = 0x00110004,
	MLAN_OID_11H_CHAN_SWITCH_COUNT = 0x00110005,
	MLAN_OID_11H_CHAN_NOP_INFO = 0x00110006,
	MLAN_OID_11H_DFS_W53_CFG = 0x00110008,

	/* 802.11n Configuration Group RANDYTODO for value assign */
	MLAN_IOCTL_11AC_CFG = 0x00120000,
	MLAN_OID_11AC_VHT_CFG = 0x00120001,
	MLAN_OID_11AC_CFG_SUPPORTED_MCS_SET = 0x00120002,
	MLAN_OID_11AC_OPERMODE_CFG = 0x00120003,

	/* 802.11ax Configuration Group  */
	MLAN_IOCTL_11AX_CFG = 0x00170000,
	MLAN_OID_11AX_HE_CFG = 0x00170001,
	MLAN_OID_11AX_CMD_CFG = 0x00170002,
	MLAN_OID_11AX_TWT_CFG = 0x00170003,

	/* Miscellaneous Configuration Group */
	MLAN_IOCTL_MISC_CFG = 0x00200000,
	MLAN_OID_MISC_GEN_IE = 0x00200001,
	MLAN_OID_MISC_REGION = 0x00200002,
	MLAN_OID_MISC_WARM_RESET = 0x00200003,
#ifdef SDIO
	MLAN_OID_MISC_SDIO_MPA_CTRL = 0x00200006,
#endif
	MLAN_OID_MISC_HOST_CMD = 0x00200007,
	MLAN_OID_MISC_SYS_CLOCK = 0x00200009,
	MLAN_OID_MISC_SOFT_RESET = 0x0020000A,
	MLAN_OID_MISC_WWS = 0x0020000B,
	MLAN_OID_MISC_ASSOC_RSP = 0x0020000C,
	MLAN_OID_MISC_INIT_SHUTDOWN = 0x0020000D,
	MLAN_OID_MISC_CUSTOM_IE = 0x0020000F,
	MLAN_OID_MISC_TDLS_CONFIG = 0x00200010,
	MLAN_OID_MISC_TX_DATAPAUSE = 0x00200012,
	MLAN_OID_MISC_IP_ADDR = 0x00200013,
	MLAN_OID_MISC_MAC_CONTROL = 0x00200014,
	MLAN_OID_MISC_MEF_CFG = 0x00200015,
	MLAN_OID_MISC_CFP_CODE = 0x00200016,
	MLAN_OID_MISC_COUNTRY_CODE = 0x00200017,
	MLAN_OID_MISC_THERMAL = 0x00200018,
	MLAN_OID_MISC_RX_MGMT_IND = 0x00200019,
	MLAN_OID_MISC_SUBSCRIBE_EVENT = 0x0020001A,
#ifdef DEBUG_LEVEL1
	MLAN_OID_MISC_DRVDBG = 0x0020001B,
#endif
	MLAN_OID_MISC_HOTSPOT_CFG = 0x0020001C,
	MLAN_OID_MISC_OTP_USER_DATA = 0x0020001D,
#ifdef USB
	MLAN_OID_MISC_USB_AGGR_CTRL = 0x0020001F,
#endif
	MLAN_OID_MISC_TXCONTROL = 0x00200020,
#ifdef STA_SUPPORT
	MLAN_OID_MISC_EXT_CAP_CFG = 0x00200021,
#endif
#if defined(STA_SUPPORT)
	MLAN_OID_MISC_PMFCFG = 0x00200022,
#endif
#ifdef WIFI_DIRECT_SUPPORT
	MLAN_OID_MISC_WIFI_DIRECT_CONFIG = 0x00200025,
#endif
	MLAN_OID_MISC_TDLS_OPER = 0x00200026,
	MLAN_OID_MISC_GET_TDLS_IES = 0x00200027,
	MLAN_OID_MISC_LOW_PWR_MODE = 0x00200029,
	MLAN_OID_MISC_MEF_FLT_CFG = 0x0020002A,
	MLAN_OID_MISC_DFS_REAPTER_MODE = 0x0020002B,
#ifdef RX_PACKET_COALESCE
	MLAN_OID_MISC_RX_PACKET_COALESCE = 0x0020002C,
#endif
	MLAN_OID_MISC_TDLS_CS_CHANNEL = 0x0020002D,
	MLAN_OID_MISC_COALESCE_CFG = 0x0020002E,
	MLAN_OID_MISC_TDLS_IDLE_TIME = 0x0020002F,
	MLAN_OID_MISC_GET_SENSOR_TEMP = 0x00200030,
	MLAN_OID_MISC_IPV6_RA_OFFLOAD = 0x00200036,
	MLAN_OID_MISC_GTK_REKEY_OFFLOAD = 0x00200037,
	MLAN_OID_MISC_OPER_CLASS = 0x00200038,
	MLAN_OID_MISC_PMIC_CFG = 0x00200039,
	MLAN_OID_MISC_IND_RST_CFG = 0x00200040,
	MLAN_OID_MISC_GET_TSF = 0x00200045,
	MLAN_OID_MISC_GET_CHAN_REGION_CFG = 0x00200046,
	MLAN_OID_MISC_CLOUD_KEEP_ALIVE = 0x00200048,
	MLAN_OID_MISC_OPER_CLASS_CHECK = 0x00200049,

	MLAN_OID_MISC_CWMODE_CTRL = 0x00200051,
	MLAN_OID_MISC_AGGR_CTRL = 0x00200052,
	MLAN_OID_MISC_DYN_BW = 0x00200053,
	MLAN_OID_MISC_FW_DUMP_EVENT = 0x00200054,
	MLAN_OID_MISC_PER_PKT_CFG = 0x00200055,

	MLAN_OID_MISC_ROBUSTCOEX = 0x00200056,
	MLAN_OID_MISC_GET_TX_RX_HISTOGRAM = 0x00200057,
	MLAN_OID_MISC_CFP_INFO = 0x00200060,
	MLAN_OID_MISC_BOOT_SLEEP = 0x00200061,
#if defined(PCIE)
	MLAN_OID_MISC_SSU = 0x00200062,
#endif
	MLAN_OID_MISC_DMCS_CONFIG = 0x00200065,
	MLAN_OID_MISC_RX_ABORT_CFG = 0x00200066,
	MLAN_OID_MISC_RX_ABORT_CFG_EXT = 0x00200067,
	MLAN_OID_MISC_TX_AMPDU_PROT_MODE = 0x00200068,
	MLAN_OID_MISC_RATE_ADAPT_CFG = 0x00200069,
	MLAN_OID_MISC_CCK_DESENSE_CFG = 0x00200070,
	MLAN_OID_MISC_GET_CHAN_TRPC_CFG = 0x00200072,
	MLAN_OID_MISC_BAND_STEERING = 0x00200073,
	MLAN_OID_MISC_GET_REGIONPWR_CFG = 0x00200074,
	MLAN_OID_MISC_RF_TEST_GENERIC = 0x00200075,
	MLAN_OID_MISC_RF_TEST_TX_CONT = 0x00200076,
	MLAN_OID_MISC_RF_TEST_TX_FRAME = 0x00200077,
	MLAN_OID_MISC_ARB_CONFIG = 0x00200078,
	MLAN_OID_MISC_BEACON_STUCK = 0x00200079,
	MLAN_OID_MISC_CFP_TABLE = 0x0020007A,
	MLAN_OID_MISC_RANGE_EXT = 0x0020007B,
	MLAN_OID_MISC_DOT11MC_UNASSOC_FTM_CFG = 0x0020007C,
	MLAN_OID_MISC_TP_STATE = 0x0020007D,
	MLAN_OID_MISC_HAL_PHY_CFG = 0x0020007E,
	MLAN_OID_MISC_RF_TEST_HE_POWER = 0X0020007F,
#ifdef UAP_SUPPORT
	MLAN_OID_MISC_WACP_MODE = 0x00200081,
#endif
	MLAN_OID_MISC_GPIO_TSF_LATCH = 0x00200082,
	MLAN_OID_MISC_GET_TSF_INFO = 0x00200083,
};

/** Sub command size */
#define MLAN_SUB_COMMAND_SIZE 4

/** Enumeration for the action of IOCTL request */
enum _mlan_act_ioctl {
	MLAN_ACT_SET = 1,
	MLAN_ACT_GET,
	MLAN_ACT_CANCEL,
	MLAN_ACT_CLEAR,
	MLAN_ACT_RESET,
	MLAN_ACT_DEFAULT
};

/** Enumeration for generic enable/disable */
enum _mlan_act_generic { MLAN_ACT_DISABLE = 0, MLAN_ACT_ENABLE = 1 };

/** Enumeration for scan mode */
enum _mlan_scan_mode {
	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 {
	MLAN_SCAN_TYPE_UNCHANGED = 0,
	MLAN_SCAN_TYPE_ACTIVE,
	MLAN_SCAN_TYPE_PASSIVE,
	MLAN_SCAN_TYPE_PASSIVE_TO_ACTIVE
};

/** 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
};

/** Max number of supported rates */
#define MLAN_SUPPORTED_RATES 32

/** Mrvl Proprietary Tlv base */
#define PROPRIETARY_TLV_BASE_ID 0x100

/** RSSI scan */
#define SCAN_RSSI(RSSI) (0x100 - ((t_u8)(RSSI)))

/** Max passive scan time for each channel in milliseconds */
#define MRVDRV_MAX_PASSIVE_SCAN_CHAN_TIME 2000

/** Max active scan time for each channel in milliseconds  */
#define MRVDRV_MAX_ACTIVE_SCAN_CHAN_TIME 500
/** Max gap time between 2 scan in milliseconds  */
#define MRVDRV_MAX_SCAN_CHAN_GAP_TIME 500

/** Maximum number of probes to send on each channel */
#define MAX_PROBES 5

/** Default number of probes to send on each channel */
#define DEFAULT_PROBES 4

/**
 *  @brief Sub-structure passed in wlan_ioctl_get_scan_table_entry for each BSS
 *
 *  Fixed field information returned for the scan response in the IOCTL
 *    response.
 */
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;
	/** channel load */
	t_u8 chan_load;
	/** TSF value in microseconds from the firmware at packet reception */
	t_u64 network_tsf;
} wlan_get_scan_table_fixed;

/** mlan_802_11_ssid data structure */
typedef struct _mlan_802_11_ssid {
	/** SSID Length */
	t_u32 ssid_len;
	/** SSID information field */
	t_u8 ssid[MLAN_MAX_SSID_LENGTH];
} mlan_802_11_ssid, *pmlan_802_11_ssid;

typedef MLAN_PACK_START struct _tx_status_event {
	/** packet type */
	t_u8 packet_type;
	/** tx_token_id */
	t_u8 tx_token_id;
	/** 0--success, 1--fail, 2--watchdogtimeout */
	t_u8 status;
} MLAN_PACK_END tx_status_event;

/**
 *  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;

/**
 *  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[]; */
} wlan_ioctl_get_scan_table_entry;

/** Type definition of mlan_scan_time_params */
typedef struct _mlan_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;
} mlan_scan_time_params, *pmlan_scan_time_params;

/** Type definition of mlan_user_scan */
typedef struct _mlan_user_scan {
	/** Length of scan_cfg_buf */
	t_u32 scan_cfg_len;
	/** Buffer of scan config */
	t_u8 scan_cfg_buf[1];
} mlan_user_scan, *pmlan_user_scan;

/** Type definition of mlan_scan_req */
typedef struct _mlan_scan_req {
	/** BSS mode for scanning */
	t_u32 scan_mode;
	/** Scan type */
	t_u32 scan_type;
	/** SSID */
	mlan_802_11_ssid scan_ssid;
	/** Scan time parameters */
	mlan_scan_time_params scan_time;
	/** Scan config parameters in user scan */
	mlan_user_scan user_scan;
} mlan_scan_req, *pmlan_scan_req;

/** Type defnition of mlan_scan_resp */
typedef struct _mlan_scan_resp {
	/** Number of scan result */
	t_u32 num_in_scan_table;
	/** Scan table */
	t_u8 *pscan_table;
	/* Age in seconds */
	t_u32 age_in_secs;
	/** channel statstics */
	t_u8 *pchan_stats;
	/** Number of records in the chan_stats */
	t_u32 num_in_chan_stats;
} mlan_scan_resp, *pmlan_scan_resp;

#define EXT_SCAN_TYPE_ENH 2
/** Type definition of mlan_scan_cfg */
typedef struct _mlan_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 */
	mlan_scan_time_params scan_time;
	/** First passive scan then active scan */
	t_u8 passive_to_active_scan;
	/** Ext_scan:  0 disable, 1: enable, 2: enhance scan*/
	t_u32 ext_scan;
	/** scan channel gap */
	t_u32 scan_chan_gap;
} mlan_scan_cfg, *pmlan_scan_cfg;

/** Type defnition of mlan_ds_scan for MLAN_IOCTL_SCAN */
typedef struct _mlan_ds_scan {
	/** Sub-command */
	t_u32 sub_command;
	/** Scan request/response */
	union {
		/** Scan request */
		mlan_scan_req scan_req;
		/** Scan response */
		mlan_scan_resp scan_resp;
		/** Scan config parameters in user scan */
		mlan_user_scan user_scan;
		/** Scan config parameters */
		mlan_scan_cfg scan_cfg;
	} param;
} mlan_ds_scan, *pmlan_ds_scan;

/*-----------------------------------------------------------------*/
/** BSS Configuration Group */
/*-----------------------------------------------------------------*/
/** Enumeration for BSS mode */
enum _mlan_bss_mode {
	MLAN_BSS_MODE_INFRA = 1,
	MLAN_BSS_MODE_IBSS,
	MLAN_BSS_MODE_AUTO
};

/** Maximum key length */
#define MLAN_MAX_KEY_LENGTH 32

/** Maximum atim window in milliseconds */
#define MLAN_MAX_ATIM_WINDOW 50

/** Minimum beacon interval */
#define MLAN_MIN_BEACON_INTERVAL 20
/** Maximum beacon interval */
#define MLAN_MAX_BEACON_INTERVAL 1000
/** Default beacon interval */
#define MLAN_BEACON_INTERVAL 100

/** Receive all packets */
#define MLAN_PROMISC_MODE 1
/** Receive multicast packets in multicast list */
#define MLAN_MULTICAST_MODE 2
/** Receive all multicast packets */
#define MLAN_ALL_MULTI_MODE 4

/** Maximum size of multicast list */
#define MLAN_MAX_MULTICAST_LIST_SIZE 32

/** mlan_multicast_list data structure for MLAN_OID_BSS_MULTICAST_LIST */
typedef struct _mlan_multicast_list {
	/** Multicast mode */
	t_u32 mode;
	/** Number of multicast addresses in the list */
	t_u32 num_multicast_addr;
	/** Multicast address list */
	mlan_802_11_mac_addr mac_list[MLAN_MAX_MULTICAST_LIST_SIZE];
} mlan_multicast_list, *pmlan_multicast_list;

/** Max channel */
#define MLAN_MAX_CHANNEL 165
/** Maximum number of channels in table */
#define MLAN_MAX_CHANNEL_NUM 128

/** Channel/frequence for MLAN_OID_BSS_CHANNEL */
typedef struct _chan_freq {
	/** Channel Number */
	t_u32 channel;
	/** Frequency of this Channel */
	t_u32 freq;
} chan_freq;

/** mlan_chan_list data structure for MLAN_OID_BSS_CHANNEL_LIST */
typedef struct _mlan_chan_list {
	/** Number of channel */
	t_u32 num_of_chan;
	/** Channel-Frequency table */
	chan_freq cf[MLAN_MAX_CHANNEL_NUM];
} mlan_chan_list;

/* This channel is disabled.*/
#define CHAN_FLAGS_DISABLED MBIT(0)
/* do not initiate radiation, this includes sending probe requests or beaconing
 */
#define CHAN_FLAGS_NO_IR MBIT(1)
/* Radar detection is required on this channel */
#define CHAN_FLAGS_RADAR MBIT(3)
/* extension channel above this channel is not permitted */
#define CHAN_FLAGS_NO_HT40PLUS MBIT(4)
/* extension channel below this channel is not permitted */
#define CHAN_FLAGS_NO_HT40MINUS MBIT(5)
/* OFDM is not allowed on this channel */
#define CHAN_FLAGS_NO_OFDM MBIT(6)
/** 80Mhz can not used on this channel */
#define CHAN_FLAGS_NO_80MHZ MBIT(7)
/** 180Mhz can not used on this channel */
#define CHAN_FLAGS_NO_160MHZ MBIT(8)
/* Only indoor use is permitted on this channel */
#define CHAN_FLAGS_INDOOR_ONLY MBIT(9)
/* IR operation is allowed on this channel if it's
 * connected concurrently to a BSS on the same channel on
 * the 2 GHz band or to a channel in the same UNII band (on the 5 GHz
 * band), and IEEE80211_CHAN_RADAR is not set */
#define CHAN_FLAGS_IR_CONCURRENT MBIT(10)
/* 20 MHz operation is not allowed on this channel */
#define CHAN_FLAGS_20MHZ MBIT(11)
/* 10 MHz operation is not allowed on this channel */
#define CHAN_FLAGS_NO_10MHZ MBIT(12)
/** This channel's flag is valid */
#define CHAN_FLAGS_MAX MBIT(31)

/** Maximum response buffer length */
#define ASSOC_RSP_BUF_SIZE 500

/** Type definition of mlan_ds_misc_assoc_rsp for MLAN_OID_MISC_ASSOC_RSP */
typedef struct _mlan_ds_misc_assoc_rsp {
	/** Associate response buffer */
	t_u8 assoc_resp_buf[ASSOC_RSP_BUF_SIZE];
	/** Response buffer length */
	t_u32 assoc_resp_len;
} mlan_ds_misc_assoc_rsp, *pmlan_ds_misc_assoc_rsp;

/** mlan_ssid_bssid  data structure for
 *  MLAN_OID_BSS_START and MLAN_OID_BSS_FIND_BSS
 */
typedef struct _mlan_ssid_bssid {
	/** SSID */
	mlan_802_11_ssid ssid;
	/** BSSID */
	mlan_802_11_mac_addr bssid;
	/** index in BSSID list, start from 1 */
	t_u32 idx;
	/** Receive signal strength in dBm */
	t_s32 rssi;
	/* previous bssid */
	mlan_802_11_mac_addr prev_bssid;
	/**channel*/
	t_u16 channel;
	/**mobility domain value*/
	t_u16 ft_md;
	/**ft capability*/
	t_u8 ft_cap;
	/**band*/
	t_u16 bss_band;
	/** channel flag */
	t_u32 channel_flags;
	/** host mlme flag*/
	t_u8 host_mlme;
	/** assoicate resp frame/ie from firmware */
	mlan_ds_misc_assoc_rsp assoc_rsp;
} mlan_ssid_bssid, *pmlan_ssid_bssid;

/** Data structure of WMM ECW */
typedef struct _wmm_ecw_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				/* BIG_ENDIAN_SUPPORT */
} wmm_ecw_t, *pwmm_ecw_t;

/** Data structure of WMM Aci/Aifsn */
typedef struct _wmm_aci_aifsn_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				/* BIG_ENDIAN_SUPPORT */
} wmm_aci_aifsn_t, *pwmm_aci_aifsn_t;

/** Data structure of WMM AC parameters  */
typedef struct _wmm_ac_parameters_t {
	wmm_aci_aifsn_t aci_aifsn; /**< AciAifSn */
	wmm_ecw_t ecw; /**< Ecw */
	t_u16 tx_op_limit; /**< Tx op limit */
} wmm_ac_parameters_t, *pwmm_ac_parameters_t;

/** mlan_deauth_param */
typedef struct _mlan_deauth_param {
	/** STA mac addr */
	t_u8 mac_addr[MLAN_MAC_ADDR_LENGTH];
	/** deauth reason */
	t_u16 reason_code;
} mlan_deauth_param;

#ifdef UAP_SUPPORT
/** UAP FLAG: Host based */
#define UAP_FLAG_HOST_BASED MBIT(0)
/** UAP FLAG: Host mlme */
#define UAP_FLAG_HOST_MLME MBIT(1)

/** Maximum packet forward control value */
#define MAX_PKT_FWD_CTRL 15
/** Maximum BEACON period */
#define MAX_BEACON_PERIOD 4000
/** Minimum BEACON period */
#define MIN_BEACON_PERIOD 50
/** Maximum DTIM period */
#define MAX_DTIM_PERIOD 100
/** Minimum DTIM period */
#define MIN_DTIM_PERIOD 1
/** Maximum TX Power Limit */
#define MAX_TX_POWER 20
/** Minimum TX Power Limit */
#define MIN_TX_POWER 0
/** MAX station count */
#define MAX_STA_COUNT 64
/** Maximum RTS threshold */
#define MAX_RTS_THRESHOLD 2347
/** Maximum fragmentation threshold */
#define MAX_FRAG_THRESHOLD 2346
/** Minimum fragmentation threshold */
#define MIN_FRAG_THRESHOLD 256
/** data rate 54 M */
#define DATA_RATE_54M 108
/** Maximum value of bcast_ssid_ctl */
#define MAX_BCAST_SSID_CTL 2
/** antenna A */
#define ANTENNA_MODE_A 0
/** antenna B */
#define ANTENNA_MODE_B 1
/** transmit antenna */
#define TX_ANTENNA 1
/** receive antenna */
#define RX_ANTENNA 0
/** Maximum stage out time */
#define MAX_STAGE_OUT_TIME 864000
/** Minimum stage out time */
#define MIN_STAGE_OUT_TIME 50
/** Maximum Retry Limit */
#define MAX_RETRY_LIMIT 14

/** Maximum group key timer in seconds */
#define MAX_GRP_TIMER 86400

/** Maximum value of 4 byte configuration */
#define MAX_VALID_DWORD 0x7FFFFFFF	/*  (1 << 31) - 1 */

/** default UAP BAND 2.4G */
#define DEFAULT_UAP_BAND 0
/** default UAP channel 6 */
#define DEFAULT_UAP_CHANNEL 6

/** Maximum data rates */
#define MAX_DATA_RATES 14

/** auto data rate */
#define DATA_RATE_AUTO 0

/**filter mode: disable */
#define MAC_FILTER_MODE_DISABLE 0
/**filter mode: block mac address */
#define MAC_FILTER_MODE_ALLOW_MAC 1
/**filter mode: block mac address */
#define MAC_FILTER_MODE_BLOCK_MAC 2
/** Maximum mac filter num */
#define MAX_MAC_FILTER_NUM 64

/* Bitmap for protocol to use */
/** No security */
#define PROTOCOL_NO_SECURITY 0x01
/** Static WEP */
#define PROTOCOL_STATIC_WEP 0x02
/** WPA */
#define PROTOCOL_WPA 0x08
/** WPA2 */
#define PROTOCOL_WPA2 0x20
/** WP2 Mixed */
#define PROTOCOL_WPA2_MIXED 0x28
/** EAP */
#define PROTOCOL_EAP 0x40
/** WAPI */
#define PROTOCOL_WAPI 0x80
/** WPA3 SAE */
#define PROTOCOL_WPA3_SAE 0x100

/** Key_mgmt_psk */
#define KEY_MGMT_NONE 0x04
/** Key_mgmt_none */
#define KEY_MGMT_PSK 0x02
/** Key_mgmt_eap  */
#define KEY_MGMT_EAP 0x01
/** Key_mgmt_psk_sha256 */
#define KEY_MGMT_PSK_SHA256 0x100
/** Key_mgmt_sae */
#define KEY_MGMT_SAE 0x400
/** Key_mgmt_owe */
#define KEY_MGMT_OWE 0x200

/** TKIP */
#define CIPHER_TKIP 0x04
/** AES CCMP */
#define CIPHER_AES_CCMP 0x08

/** Valid cipher bitmap */
#define VALID_CIPHER_BITMAP 0x0c

/** Packet forwarding to be done by FW or host */
#define PKT_FWD_FW_BIT 0x01
/** Intra-BSS broadcast packet forwarding allow bit */
#define PKT_FWD_INTRA_BCAST 0x02
/** Intra-BSS unicast packet forwarding allow bit */
#define PKT_FWD_INTRA_UCAST 0x04
/** Inter-BSS unicast packet forwarding allow bit */
#define PKT_FWD_INTER_UCAST 0x08
/** Intra-BSS unicast packet */
#define PKT_INTRA_UCAST 0x01
/** Inter-BSS unicast packet */
#define PKT_INTER_UCAST 0x02
/** Enable Host PKT forwarding */
#define PKT_FWD_ENABLE_BIT 0x01

/** Channel List Entry */
typedef struct _channel_list {
	/** Channel Number */
	t_u8 chan_number;
	/** Band Config */
	Band_Config_t bandcfg;
} scan_chan_list;

/** mac_filter data structure */
typedef struct _mac_filter {
	/** mac filter mode */
	t_u16 filter_mode;
	/** mac adress count */
	t_u16 mac_count;
	/** mac address list */
	mlan_802_11_mac_addr mac_list[MAX_MAC_FILTER_NUM];
} mac_filter;

/** wpa parameter */
typedef struct _wpa_param {
	/** Pairwise cipher WPA */
	t_u8 pairwise_cipher_wpa;
	/** Pairwise cipher WPA2 */
	t_u8 pairwise_cipher_wpa2;
	/** group cipher */
	t_u8 group_cipher;
	/** RSN replay protection */
	t_u8 rsn_protection;
	/** passphrase length */
	t_u32 length;
	/** passphrase */
	t_u8 passphrase[64];
	/**group key rekey time in seconds */
	t_u32 gk_rekey_time;
} wpa_param;

/** wep key */
typedef struct _wep_key {
	/** key index 0-3 */
	t_u8 key_index;
	/** is default */
	t_u8 is_default;
	/** length */
	t_u16 length;
	/** key data */
	t_u8 key[26];
} wep_key;

/** wep param */
typedef struct _wep_param {
	/** key 0 */
	wep_key key0;
	/** key 1 */
	wep_key key1;
	/** key 2 */
	wep_key key2;
	/** key 3 */
	wep_key key3;
} wep_param;

/** Data structure of WMM QoS information */
typedef struct _wmm_qos_info_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 */
} wmm_qos_info_t, *pwmm_qos_info_t;

/** Data structure of WMM parameter IE  */
typedef struct _wmm_parameter_t {
	/** OuiType:  00:50:f2:02 */
	t_u8 ouitype[4];
	/** Oui subtype: 01 */
	t_u8 ouisubtype;
	/** version: 01 */
	t_u8 version;
	/** QoS information */
	t_u8 qos_info;
	/** Reserved */
	t_u8 reserved;
	/** AC Parameters Record WMM_AC_BE, WMM_AC_BK, WMM_AC_VI, WMM_AC_VO */
	wmm_ac_parameters_t ac_params[MAX_AC_QUEUES];
} wmm_parameter_t, *pwmm_parameter_t;

/** MAX BG channel */
#define MAX_BG_CHANNEL 14
/** mlan_bss_param
 * Note: For each entry you must enter an invalid value
 * in the MOAL function woal_set_sys_config_invalid_data().
 * Otherwise for a valid data an unwanted TLV will be
 * added to that command.
 */
typedef struct _mlan_uap_bss_param {
	/** AP mac addr */
	mlan_802_11_mac_addr mac_addr;
	/** SSID */
	mlan_802_11_ssid ssid;
	/** Broadcast ssid control */
	t_u8 bcast_ssid_ctl;
	/** Radio control: on/off */
	t_u8 radio_ctl;
	/** dtim period */
	t_u8 dtim_period;
	/** beacon period */
	t_u16 beacon_period;
	/** rates */
	t_u8 rates[MAX_DATA_RATES];
	/** Tx data rate */
	t_u16 tx_data_rate;
	/** Tx beacon rate */
	t_u16 tx_beacon_rate;
	/** multicast/broadcast data rate */
	t_u16 mcbc_data_rate;
	/** Tx power level in dBm */
	t_u8 tx_power_level;
	/** Tx antenna */
	t_u8 tx_antenna;
	/** Rx antenna */
	t_u8 rx_antenna;
	/** packet forward control */
	t_u8 pkt_forward_ctl;
	/** max station count */
	t_u16 max_sta_count;
	/** mac filter */
	mac_filter filter;
	/** station ageout timer in unit of 100ms  */
	t_u32 sta_ageout_timer;
	/** PS station ageout timer in unit of 100ms  */
	t_u32 ps_sta_ageout_timer;
	/** RTS threshold */
	t_u16 rts_threshold;
	/** fragmentation threshold */
	t_u16 frag_threshold;
	/**  retry_limit */
	t_u16 retry_limit;
	/**  pairwise update timeout in milliseconds */
	t_u32 pairwise_update_timeout;
	/** pairwise handshake retries */
	t_u32 pwk_retries;
	/**  groupwise update timeout in milliseconds */
	t_u32 groupwise_update_timeout;
	/** groupwise handshake retries */
	t_u32 gwk_retries;
	/** preamble type */
	t_u8 preamble_type;
	/** band cfg */
	Band_Config_t bandcfg;
	/** channel */
	t_u8 channel;
	/** auth mode */
	t_u16 auth_mode;
	/** encryption protocol */
	t_u16 protocol;
	/** key managment type */
	t_u16 key_mgmt;
	/** wep param */
	wep_param wep_cfg;
	/** wpa param */
	wpa_param wpa_cfg;
	/** Mgmt IE passthru mask */
	t_u32 mgmt_ie_passthru_mask;
	/*
	 * 11n HT Cap  HTCap_t  ht_cap
	 */
	/** 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;
	/** Enable 2040 Coex */
	t_u8 enable_2040coex;
	/** key management operation */
	t_u16 key_mgmt_operation;
	/** BSS status */
	t_u16 bss_status;
#ifdef WIFI_DIRECT_SUPPORT
	/* pre shared key */
	t_u8 psk[MLAN_MAX_KEY_LENGTH];
#endif				/* WIFI_DIRECT_SUPPORT */
	/** Number of channels in scan_channel_list */
	t_u32 num_of_chan;
	/** scan channel list in ACS mode */
	scan_chan_list chan_list[MLAN_MAX_CHANNEL];
	/** Wmm parameters */
	wmm_parameter_t wmm_para;

	/** uap host based config */
	t_u32 uap_host_based_config;
} mlan_uap_bss_param, *pmlan_uap_bss_param;

/** mlan_uap_scan_channels */
typedef struct _mlan_uap_scan_channels {
	/** flag for remove nop channel*/
	t_u8 remove_nop_channel;
	/** num of removed channel */
	t_u8 num_remvoed_channel;
	/** Number of channels in scan_channel_list */
	t_u32 num_of_chan;
	/** scan channel list in ACS mode */
	scan_chan_list chan_list[MLAN_MAX_CHANNEL];
} mlan_uap_scan_channels;

/** mlan_chan_switch_param */
typedef struct _mlan_action_chan_switch {
	/** mode*/
	t_u8 mode;
	/** switch mode*/
	t_u8 chan_switch_mode;
	/** oper class*/
	t_u8 new_oper_class;
    /** new channel */
	t_u8 new_channel_num;
    /** chan_switch_count */
	t_u8 chan_switch_count;
} mlan_action_chan_switch;

/** mlan_uap_oper_ctrl */
typedef struct _mlan_uap_oper_ctrl {
	/** control value
	 *  0: do nothing,
	 *  2: uap stops and restarts automaticaly
	 */
	t_u16 ctrl_value;
	/** channel opt
	 *  1: uap restart on default 2.4G/channel 6
	 *  2: uap restart on the band/channel configured by driver previously
	 *  3: uap restart on the band/channel specified by band_cfg and channel
	 */
	t_u16 chan_opt;
	/** band cfg   0
	 *  0: 20Mhz  2: 40 Mhz  3: 80Mhz
	 */
	t_u8 band_cfg;
	/** channel */
	t_u8 channel;
} mlan_uap_oper_ctrl;

/** mlan_uap_acs_scan */
typedef struct _mlan_uap_acs_scan {
	/** band */
	Band_Config_t bandcfg;
	/** channel */
	t_u8 chan;
} mlan_uap_acs_scan;

/** station is authorized (802.1X) */
#define STA_FLAG_AUTHORIZED MBIT(1)
/** Station is capable of receiving frames with short barker preamble */
#define STA_FLAG_SHORT_PREAMBLE MBIT(2)
/** station is WME/QoS capable */
#define STA_FLAG_WME MBIT(3)
/** station uses management frame protection */
#define STA_FLAG_MFP MBIT(4)
/** station is authenticated */
#define STA_FLAG_AUTHENTICATED MBIT(5)
/** station is a TDLS peer */
#define STA_FLAG_TDLS_PEER MBIT(6)
/** station is associated */
#define STA_FLAG_ASSOCIATED MBIT(7)
/** mlan_ds_sta_info */
typedef struct _mlan_ds_sta_info {
	/** aid */
	t_u16 aid;
	/** peer_mac */
	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
	/** Listen Interval */
	int listen_interval;
	/** Capability Info */
	t_u16 cap_info;
	/** station flag */
	t_u32 sta_flags;
	/** tlv len */
	t_u16 tlv_len;
	/** tlv start */
	t_u8 tlv[];
} mlan_ds_sta_info;
#endif

#ifdef WIFI_DIRECT_SUPPORT
/** mode: disable wifi direct */
#define WIFI_DIRECT_MODE_DISABLE 0
/** mode: listen */
#define WIFI_DIRECT_MODE_LISTEN 1
/** mode: GO */
#define WIFI_DIRECT_MODE_GO 2
/** mode: client */
#define WIFI_DIRECT_MODE_CLIENT 3
/** mode: find */
#define WIFI_DIRECT_MODE_FIND 4
/** mode: stop find */
#define WIFI_DIRECT_MODE_STOP_FIND 5
#endif

/** Type definition of mlan_ds_bss for MLAN_IOCTL_BSS */
typedef struct _mlan_ds_bss {
	/** Sub-command */
	t_u32 sub_command;
	/** BSS parameter */
	union {
		/** SSID-BSSID for MLAN_OID_BSS_START */
		mlan_ssid_bssid ssid_bssid;
		/** BSSID for MLAN_OID_BSS_STOP */
		mlan_802_11_mac_addr bssid;
		/** BSS mode for MLAN_OID_BSS_MODE */
		t_u32 bss_mode;
		/** BSS channel/frequency for MLAN_OID_BSS_CHANNEL */
		chan_freq bss_chan;
		/** BSS channel list for MLAN_OID_BSS_CHANNEL_LIST */
		mlan_chan_list chanlist;
		/** MAC address for MLAN_OID_BSS_MAC_ADDR */
		mlan_802_11_mac_addr mac_addr;
		/** Multicast list for MLAN_OID_BSS_MULTICAST_LIST */
		mlan_multicast_list multicast_list;
		/** Beacon interval for MLAN_OID_IBSS_BCN_INTERVAL */
		t_u32 bcn_interval;
		/** ATIM window for MLAN_OID_IBSS_ATIM_WINDOW */
		t_u32 atim_window;
		/** deauth param for MLAN_OID_BSS_STOP & MLAN_OID_UAP_DEAUTH_STA
		 */
		mlan_deauth_param deauth_param;
#ifdef UAP_SUPPORT
		/** host based flag for MLAN_OID_BSS_START */
		t_u8 host_based;
		/** BSS param for AP mode for MLAN_OID_UAP_BSS_CONFIG */
		mlan_uap_bss_param bss_config;
		/** AP Wmm parameters for MLAN_OID_UAP_CFG_WMM_PARAM */
		wmm_parameter_t ap_wmm_para;
		/** ap scan channels for MLAN_OID_UAP_SCAN_CHANNELS*/
		mlan_uap_scan_channels ap_scan_channels;
	/** channel switch for MLAN_OID_UAP_CHAN_SWITCH */
		mlan_action_chan_switch chanswitch;
		/** ap channel for MLAN_OID_UAP_CHANNEL*/
		chan_band_info ap_channel;
		/** ap operation control for MLAN_OID_UAP_OPER_CTRL*/
		mlan_uap_oper_ctrl ap_oper_ctrl;
		/** AP acs scan 	    MLAN_OID_UAP_ACS_SCAN */
		mlan_uap_acs_scan ap_acs_scan;
#endif
#if defined(STA_SUPPORT) && defined(UAP_SUPPORT)
		/** BSS role for MLAN_OID_BSS_ROLE */
		t_u8 bss_role;
#endif
#ifdef WIFI_DIRECT_SUPPORT
		/** wifi direct mode for MLAN_OID_WIFI_DIRECT_MODE */
		t_u16 wfd_mode;
#endif
#ifdef STA_SUPPORT
		/** Listen interval for MLAN_OID_BSS_LISTEN_INTERVAL */
		t_u16 listen_interval;
		/** STA channel info for MLAN_OID_BSS_CHAN_INFO */
		chan_band_info sta_channel;
#endif
#ifdef UAP_SUPPORT
		/** STA info for MLAN_OID_UAP_ADD_STATION */
		mlan_ds_sta_info sta_info;
#endif
	} param;
} mlan_ds_bss, *pmlan_ds_bss;

/* OTP Region info */
typedef MLAN_PACK_START struct _otp_region_info {
	t_u8 country_code[2];
	t_u8 region_code;
	t_u8 environment;
	t_u8 force_reg:1;
	t_u8 reserved:7;
	t_u8 dfs_region;
} MLAN_PACK_END otp_region_info_t;

/** Type definition of mlan_ds_custom_reg_domain */
typedef struct _mlan_ds_custom_reg_domain {
	otp_region_info_t region;
	/** num of 2g channels in custom_reg_domain */
	t_u8 num_bg_chan;
	/** num of 5g channels in custom_reg_domain */
	t_u8 num_a_chan;
	/** cfp table */
	chan_freq_power_t cfp_tbl[];
} mlan_ds_custom_reg_domain;
/*-----------------------------------------------------------------*/
/** Radio Control Group */
/*-----------------------------------------------------------------*/
/** Enumeration for band */
enum _mlan_band_def {
	BAND_B = 1,
	BAND_G = 2,
	BAND_A = 4,
	BAND_GN = 8,
	BAND_AN = 16,
	BAND_GAC = 32,
	BAND_AAC = 64,
	BAND_GAX = 256,
	BAND_AAX = 512,

};

/** Channel bandwidth */
#define CHANNEL_BW_20MHZ 0
#define CHANNEL_BW_40MHZ_ABOVE 1
#define CHANNEL_BW_40MHZ_BELOW 3
/** secondary channel is 80Mhz bandwidth for 11ac */
#define CHANNEL_BW_80MHZ 4
#define CHANNEL_BW_160MHZ 5

/** RF antenna selection */
#define RF_ANTENNA_MASK(n) ((1 << (n)) - 1)
/** RF antenna auto select */
#define RF_ANTENNA_AUTO 0xFFFF

/** Type definition of mlan_ds_band_cfg for MLAN_OID_BAND_CFG */
typedef struct _mlan_ds_band_cfg {
	/** 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;
} mlan_ds_band_cfg;

/** Type definition of mlan_ds_ant_cfg for MLAN_OID_ANT_CFG */
typedef struct _mlan_ds_ant_cfg {
	/** Tx antenna mode */
	t_u32 tx_antenna;
	/** Rx antenna mode */
	t_u32 rx_antenna;
} mlan_ds_ant_cfg, *pmlan_ds_ant_cfg;
/** Type definition of mlan_ds_mimo_switch for MLAN_OID_MIMO_SWITCH */
typedef struct _mlan_ds_mimo_switch {
	/** Tx antenna mode */
	t_u8 txpath_antmode;
	/** Rx antenna mode */
	t_u8 rxpath_antmode;
} mlan_ds_mimo_switch, *pmlan_ds_mimo_switch;
/** Type definition of mlan_ds_ant_cfg_1x1 for MLAN_OID_ANT_CFG */
typedef struct _mlan_ds_ant_cfg_1x1 {
	/** Antenna mode */
	t_u32 antenna;
	/** Evaluate time */
	t_u16 evaluate_time;
	/** Current antenna */
	t_u16 current_antenna;
} mlan_ds_ant_cfg_1x1, *pmlan_ds_ant_cfg_1x1;

/** Type definition of mlan_ds_remain_chan for MLAN_OID_REMAIN_CHAN_CFG */
typedef struct _mlan_ds_remain_chan {
	/** remove flag */
	t_u16 remove;
	/** status */
	t_u8 status;
	/** Band cfg */
	Band_Config_t bandcfg;
	/** channel */
	t_u8 channel;
	/** remain time: Unit ms*/
	t_u32 remain_period;
} mlan_ds_remain_chan, *pmlan_ds_remain_chan;

/** Type definition of mlan_ds_radio_cfg for MLAN_IOCTL_RADIO_CFG */
typedef struct _mlan_ds_radio_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** Radio control parameter */
	union {
		/** Radio on/off for MLAN_OID_RADIO_CTRL */
		t_u32 radio_on_off;
		/** Band info for MLAN_OID_BAND_CFG */
		mlan_ds_band_cfg band_cfg;
		/** Antenna info for MLAN_OID_ANT_CFG */
		mlan_ds_ant_cfg ant_cfg;
		/** Antenna mode for MLAN_OID_MIMO_SWITCH */
		mlan_ds_mimo_switch mimo_switch_cfg;
		/** Antenna info for MLAN_OID_ANT_CFG */
		mlan_ds_ant_cfg_1x1 ant_cfg_1x1;
		/** remain on channel for MLAN_OID_REMAIN_CHAN_CFG */
		mlan_ds_remain_chan remain_chan;
	} param;
} mlan_ds_radio_cfg, *pmlan_ds_radio_cfg;

enum COALESCE_OPERATION {
	RECV_FILTER_MATCH_TYPE_EQ = 0x80,
	RECV_FILTER_MATCH_TYPE_NE,
};

enum COALESCE_PACKET_TYPE {
	PACKET_TYPE_UNICAST = 1,
	PACKET_TYPE_MULTICAST = 2,
	PACKET_TYPE_BROADCAST = 3
};

#define COALESCE_MAX_RULES 8
#define COALESCE_MAX_BYTESEQ 4	/* non-adjustable */
#define COALESCE_MAX_FILTERS 4
#define MAX_COALESCING_DELAY 100	/* in msecs */
#define MAX_PATTERN_LEN 20
#define MAX_OFFSET_LEN 100

struct filt_field_param {
	t_u8 operation;
	t_u8 operand_len;
	t_u16 offset;
	t_u8 operand_byte_stream[COALESCE_MAX_BYTESEQ];
};

struct coalesce_rule {
	t_u16 max_coalescing_delay;
	t_u8 num_of_fields;
	t_u8 pkt_type;
	struct filt_field_param params[COALESCE_MAX_FILTERS];
};

typedef struct _mlan_ds_coalesce_cfg {
	t_u16 num_of_rules;
	struct coalesce_rule rule[COALESCE_MAX_RULES];
} mlan_ds_coalesce_cfg;

/*-----------------------------------------------------------------*/
/** SNMP MIB Group */
/*-----------------------------------------------------------------*/
/** Type definition of mlan_ds_snmp_mib for MLAN_IOCTL_SNMP_MIB */
typedef struct _mlan_ds_snmp_mib {
	/** Sub-command */
	t_u32 sub_command;
	/** SNMP MIB parameter */
	union {
		/** RTS threshold for MLAN_OID_SNMP_MIB_RTS_THRESHOLD */
		t_u32 rts_threshold;
		/** Fragment threshold for MLAN_OID_SNMP_MIB_FRAG_THRESHOLD */
		t_u32 frag_threshold;
		/** Retry count for MLAN_OID_SNMP_MIB_RETRY_COUNT */
		t_u32 retry_count;
		/** OID value for MLAN_OID_SNMP_MIB_DOT11D/H */
		t_u32 oid_value;
		/** DTIM period for MLAN_OID_SNMP_MIB_DTIM_PERIOD */
		t_u32 dtim_period;
		/** Singal_ext Enable for MLAN_OID_SNMP_MIB_SIGNALEXT_ENABLE */
		t_u8 signalext_enable;
		/** Control deauth when uap switch channel */
		t_u8 deauthctrl;
	} param;
} mlan_ds_snmp_mib, *pmlan_ds_snmp_mib;

/*-----------------------------------------------------------------*/
/** Status Information Group */
/*-----------------------------------------------------------------*/
/** Enumeration for ad-hoc status */
enum _mlan_adhoc_status {
	ADHOC_IDLE,
	ADHOC_STARTED,
	ADHOC_JOINED,
	ADHOC_COALESCED,
	ADHOC_STARTING
};

typedef struct _mlan_ds_get_stats_org {
	/** Statistics counter */
	/** 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;
	/** received amsdu count*/
	t_u32 amsdu_rx_cnt;
	/** received msdu count in amsdu*/
	t_u32 msdu_in_rx_amsdu_cnt;
	/** tx amsdu count*/
	t_u32 amsdu_tx_cnt;
	/** tx msdu count in amsdu*/
	t_u32 msdu_in_tx_amsdu_cnt;
} mlan_ds_get_stats_org;

/** Type definition of mlan_ds_get_stats for MLAN_OID_GET_STATS */
typedef struct _mlan_ds_get_stats {
	/** Statistics counter */
	/** 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;
	/** received amsdu count*/
	t_u32 amsdu_rx_cnt;
	/** received msdu count in amsdu*/
	t_u32 msdu_in_rx_amsdu_cnt;
	/** tx amsdu count*/
	t_u32 amsdu_tx_cnt;
	/** tx msdu count in amsdu*/
	t_u32 msdu_in_tx_amsdu_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];
	/** CMAC ICV 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;
    /** Rx Stuck Related Info*/
    /** Rx Stuck Issue count */
	t_u32 rx_stuck_issue_cnt[2];
    /** Rx Stuck Recovery count */
	t_u32 rx_stuck_recovery_cnt;
    /** Rx Stuck TSF */
	t_u64 rx_stuck_tsf[2];
    /** Tx Watchdog Recovery Related Info */
    /** Tx Watchdog Recovery count */
	t_u32 tx_watchdog_recovery_cnt;
    /** Tx Watchdog TSF */
	t_u64 tx_watchdog_tsf[2];
    /** Channel Switch Related Info */
    /** Channel Switch Announcement Sent */
	t_u32 channel_switch_ann_sent;
    /** Channel Switch State */
	t_u32 channel_switch_state;
    /** Register Class */
	t_u32 reg_class;
    /** Channel Number */
	t_u32 channel_number;
    /** Channel Switch Mode */
	t_u32 channel_switch_mode;
    /** Reset Rx Mac Count */
	t_u32 rx_reset_mac_recovery_cnt;
    /** ISR2 Not Done Count*/
	t_u32 rx_Isr2_NotDone_Cnt;
    /** GDMA Abort Count */
	t_u32 gdma_abort_cnt;
    /** Rx Reset MAC Count */
	t_u32 g_reset_rx_mac_cnt;
	//Ownership error counters
	/*Error Ownership error count */
	t_u32 dwCtlErrCnt;
	/*Control Ownership error count */
	t_u32 dwBcnErrCnt;
	/*Control Ownership error count */
	t_u32 dwMgtErrCnt;
	/*Control Ownership error count */
	t_u32 dwDatErrCnt;
	/*BIGTK MME good count */
	t_u32 bigtk_mmeGoodCnt;
	/*BIGTK Replay error count */
	t_u32 bigtk_replayErrCnt;
	/*BIGTK MIC error count */
	t_u32 bigtk_micErrCnt;
	/*BIGTK MME not included count */
	t_u32 bigtk_mmeNotFoundCnt;
} mlan_ds_get_stats, *pmlan_ds_get_stats;

/** Type definition of mlan_ds_uap_stats for MLAN_OID_GET_STATS */
typedef struct _mlan_ds_uap_stats {
	/** tkip mic failures */
	t_u32 tkip_mic_failures;
	/** ccmp decrypt errors */
	t_u32 ccmp_decrypt_errors;
	/** wep undecryptable count */
	t_u32 wep_undecryptable_count;
	/** wep icv error count */
	t_u32 wep_icv_error_count;
	/** decrypt failure count */
	t_u32 decrypt_failure_count;
	/** dot11 multicast tx count */
	t_u32 mcast_tx_count;
	/** dot11 failed count */
	t_u32 failed_count;
	/** dot11 retry count */
	t_u32 retry_count;
	/** dot11 multi retry count */
	t_u32 multi_retry_count;
	/** dot11 frame duplicate count */
	t_u32 frame_dup_count;
	/** dot11 rts success count */
	t_u32 rts_success_count;
	/** dot11 rts failure count */
	t_u32 rts_failure_count;
	/** dot11 ack failure count */
	t_u32 ack_failure_count;
	/** dot11 rx ragment count */
	t_u32 rx_fragment_count;
	/** dot11 mcast rx frame count */
	t_u32 mcast_rx_frame_count;
	/** dot11 fcs error count */
	t_u32 fcs_error_count;
	/** dot11 tx frame count */
	t_u32 tx_frame_count;
	/** dot11 rsna tkip cm invoked */
	t_u32 rsna_tkip_cm_invoked;
	/** dot11 rsna 4way handshake failures */
	t_u32 rsna_4way_hshk_failures;
} mlan_ds_uap_stats, *pmlan_ds_uap_stats;

/** Mask of last beacon RSSI */
#define BCN_RSSI_LAST_MASK 0x00000001
/** Mask of average beacon RSSI */
#define BCN_RSSI_AVG_MASK 0x00000002
/** Mask of last data RSSI */
#define DATA_RSSI_LAST_MASK 0x00000004
/** Mask of average data RSSI */
#define DATA_RSSI_AVG_MASK 0x00000008
/** Mask of last beacon SNR */
#define BCN_SNR_LAST_MASK 0x00000010
/** Mask of average beacon SNR */
#define BCN_SNR_AVG_MASK 0x00000020
/** Mask of last data SNR */
#define DATA_SNR_LAST_MASK 0x00000040
/** Mask of average data SNR */
#define DATA_SNR_AVG_MASK 0x00000080
/** Mask of last beacon NF */
#define BCN_NF_LAST_MASK 0x00000100
/** Mask of average beacon NF */
#define BCN_NF_AVG_MASK 0x00000200
/** Mask of last data NF */
#define DATA_NF_LAST_MASK 0x00000400
/** Mask of average data NF */
#define DATA_NF_AVG_MASK 0x00000800
/** Mask of all RSSI_INFO */
#define ALL_RSSI_INFO_MASK 0x00000fff
#define MAX_PATH_NUM 3
/** path A */
#define PATH_A 0x01
/** path B */
#define PATH_B 0x02
/** path AB */
#define PATH_AB 0x03
/** ALL the path */
#define PATH_ALL 0
/** Type definition of mlan_ds_get_signal for MLAN_OID_GET_SIGNAL */
typedef struct _mlan_ds_get_signal {
	/** Selector of get operation */
	/*
	 * Bit0:  Last Beacon RSSI,  Bit1:  Average Beacon RSSI,
	 * Bit2:  Last Data RSSI,    Bit3:  Average Data RSSI,
	 * Bit4:  Last Beacon SNR,   Bit5:  Average Beacon SNR,
	 * Bit6:  Last Data SNR,     Bit7:  Average Data SNR,
	 * Bit8:  Last Beacon NF,    Bit9:  Average Beacon NF,
	 * Bit10: Last Data NF,      Bit11: Average Data NF
	 *
	 * Bit0: PATH A
	 * Bit1: PATH B
	 */
	t_u16 selector;

	/** RSSI */
	/** RSSI of last beacon */
	t_s16 bcn_rssi_last;
	/** RSSI of beacon average */
	t_s16 bcn_rssi_avg;
	/** RSSI of last data packet */
	t_s16 data_rssi_last;
	/** RSSI of data packet average */
	t_s16 data_rssi_avg;

	/** SNR */
	/** SNR of last beacon */
	t_s16 bcn_snr_last;
	/** SNR of beacon average */
	t_s16 bcn_snr_avg;
	/** SNR of last data packet */
	t_s16 data_snr_last;
	/** SNR of data packet average */
	t_s16 data_snr_avg;

	/** NF */
	/** NF of last beacon */
	t_s16 bcn_nf_last;
	/** NF of beacon average */
	t_s16 bcn_nf_avg;
	/** NF of last data packet */
	t_s16 data_nf_last;
	/** NF of data packet average */
	t_s16 data_nf_avg;
} mlan_ds_get_signal, *pmlan_ds_get_signal;

/** bit for 2.4 G antenna diversity */
#define ANT_DIVERSITY_2G MBIT(3)
/** bit for 5 G antenna diversity */
#define ANT_DIVERSITY_5G MBIT(7)

/** mlan_fw_info data structure for MLAN_OID_GET_FW_INFO */
typedef struct _mlan_fw_info {
	/** Firmware version */
	t_u32 fw_ver;
	/** Firmware Hotfix version */
	t_u8 hotfix_version;
	/** MAC address */
	mlan_802_11_mac_addr mac_addr;
	/** 802.11n device capabilities */
	t_u32 hw_dot_11n_dev_cap;
	/** Device support for MIMO abstraction of MCSs */
	t_u8 hw_dev_mcs_support;
	/** user's MCS setting */
	t_u8 usr_dev_mcs_support;
	/** 802.11ac device capabilities */
	t_u32 hw_dot_11ac_dev_cap;
	/** 802.11ac device Capabilities for 2.4GHz */
	t_u32 usr_dot_11ac_dev_cap_bg;
	/** 802.11ac device Capabilities for 5GHz */
	t_u32 usr_dot_11ac_dev_cap_a;
	/** length of hw he capability */
	t_u8 hw_hecap_len;
	/** 802.11ax HE capability */
	t_u8 hw_he_cap[54];
	/** length of hw 2.4G he capability */
	t_u8 hw_2g_hecap_len;
	/** 802.11ax 2.4G HE capability */
	t_u8 hw_2g_he_cap[54];
	/** 802.11ac device support for MIMO abstraction of MCSs */
	t_u32 hw_dot_11ac_mcs_support;
	/** User conf 802.11ac device support for MIMO abstraction of MCSs */
	t_u32 usr_dot_11ac_mcs_support;
	/** fw supported band */
	t_u16 fw_bands;
	/** region code */
	t_u16 region_code;
	/** force_reg */
	t_u8 force_reg;
	/** ECSA support */
	t_u8 ecsa_enable;
	/** Get log support */
	t_u8 getlog_enable;
	/** FW support for embedded supplicant */
	t_u8 fw_supplicant_support;
	/** ant info */
	t_u8 antinfo;
	/** max AP associated sta count supported by fw */
	t_u8 max_ap_assoc_sta;
	/** Bandwidth not support 80Mhz */
	t_u8 prohibit_80mhz;
	/** FW support beacon protection */
	t_u8 fw_beacon_prot;
} mlan_fw_info, *pmlan_fw_info;

/** Version string buffer length */
#define MLAN_MAX_VER_STR_LEN 128

/** mlan_ver_ext data structure for MLAN_OID_GET_VER_EXT */
typedef struct _mlan_ver_ext {
	/** Selected version string */
	t_u32 version_str_sel;
	/** Version string */
	char version_str[MLAN_MAX_VER_STR_LEN];
} mlan_ver_ext, *pmlan_ver_ext;

#ifdef BIG_ENDIAN_SUPPORT
/** Extended Capabilities Data */
typedef struct MLAN_PACK_START _ExtCap_t {
	/** Extended Capabilities value */
	t_u8 rsvdBit87:1;	/* bit 87 */
	t_u8 rsvdBit86:1;	/* bit 86 */
	t_u8 rsvdBit85:1;	/* bit 85 */
	t_u8 beacon_prot:1;	/* bit 84 */
	t_u8 rsvdBit83:1;	/* bit 83 */
	t_u8 rsvdBit82:1;	/* bit 82 */
	t_u8 rsvdBit81:1;	/* bit 81 */
	t_u8 rsvdBit80:1;	/* bit 80 */
	t_u8 rsvdBit79:1;	/* bit 79 */
	t_u8 TWTResp:1;		/* bit 78 */
	t_u8 TWTReq:1;		/* bit 77 */
	t_u8 rsvdBit76:1;	/* bit 76 */
	t_u8 rsvdBit75:1;	/* bit 75 */
	t_u8 rsvdBit74:1;	/* bit 74 */
	t_u8 rsvdBit73:1;	/* bit 73 */
	t_u8 FILS:1;		/* bit 72 */
	t_u8 FTMI:1;		/* bit 71 */
	t_u8 FTMR:1;		/* bit 70 */
	t_u8 CAQ:1;		/* bit 69 */
	t_u8 rsvdBit68:1;	/* bit 68 */
	t_u8 NCC:1;		/* bit 67 */
	t_u8 rsvdBit66:1;	/* bit 66 */
	t_u8 chanSchedMgnt:1;	/* bit 65 */
	t_u8 MaxAMSDU1:1;	/* bit 64 */
	t_u8 MaxAMSDU0:1;	/* bit 63 */
	t_u8 OperModeNtf:1;	/* bit 62 */
	t_u8 TDLSWildBandwidth:1;	/* bit 61 */
	t_u8 rsvdBit60:1;	/* bit 60 */
	t_u8 rsvdBit59:1;	/* bit 59 */
	t_u8 rsvdBit58:1;	/* bit 58 */
	t_u8 rsvdBit57:1;	/* bit 57 */
	t_u8 rsvdBit56:1;	/* bit 56 */
	t_u8 rsvdBit55:1;	/* bit 55 */
	t_u8 rsvdBit54:1;	/* bit 54 */
	t_u8 rsvdBit53:1;	/* bit 53 */
	t_u8 rsvdBit52:1;	/* bit 52 */
	t_u8 rsvdBit51:1;	/* bit 51 */
	t_u8 rsvdBit50:1;	/* bit 50 */
	t_u8 rsvdBit49:1;	/* bit 49 */
	t_u8 rsvdBit48:1;	/* bit 48 */
	t_u8 rsvdBit47:1;	/* bit 47 */
	t_u8 rsvdBit46:1;	/* bit 46 */
	t_u8 rsvdBit45:1;	/* bit 45 */
	t_u8 rsvdBit44:1;	/* bit 44 */
	t_u8 rsvdBit43:1;	/* bit 43 */
	t_u8 rsvdBit42:1;	/* bit 42 */
	t_u8 rsvdBit41:1;	/* bit 41 */
	t_u8 rsvdBit40:1;	/* bit 40 */
	t_u8 TDLSChlSwitchProhib:1;	/* bit 39 */
	t_u8 TDLSProhibited:1;	/* bit 38 */
	t_u8 TDLSSupport:1;	/* bit 37 */
	t_u8 MSGCF_Capa:1;	/* bit 36 */
	t_u8 Reserved35:1;	/* bit 35 */
	t_u8 SSPN_Interface:1;	/* bit 34 */
	t_u8 EBR:1;		/* bit 33 */
	t_u8 Qos_Map:1;		/* bit 32 */
	t_u8 Interworking:1;	/* bit 31 */
	t_u8 TDLSChannelSwitching:1;	/* bit 30 */
	t_u8 TDLSPeerPSMSupport:1;	/* bit 29 */
	t_u8 TDLSPeerUAPSDSupport:1;	/* bit 28 */
	t_u8 UTC:1;		/* bit 27 */
	t_u8 DMS:1;		/* bit 26 */
	t_u8 SSID_List:1;	/* bit 25 */
	t_u8 ChannelUsage:1;	/* bit 24 */
	t_u8 TimingMeasurement:1;	/* bit 23 */
	t_u8 MultipleBSSID:1;	/* bit 22 */
	t_u8 AC_StationCount:1;	/* bit 21 */
	t_u8 QoSTrafficCap:1;	/* bit 20 */
	t_u8 BSS_Transition:1;	/* bit 19 */
	t_u8 TIM_Broadcast:1;	/* bit 18 */
	t_u8 WNM_Sleep:1;	/* bit 17 */
	t_u8 TFS:1;		/* bit 16 */
	t_u8 GeospatialLocation:1;	/* bit 15 */
	t_u8 CivicLocation:1;	/* bit 14 */
	t_u8 CollocatedIntf:1;	/* bit 13 */
	t_u8 ProxyARPService:1;	/* bit 12 */
	t_u8 FMS:1;		/* bit 11 */
	t_u8 LocationTracking:1;	/* bit 10 */
	t_u8 MulticastDiagnostics:1;	/* bit 9  */
	t_u8 Diagnostics:1;	/* bit 8  */
	t_u8 Event:1;		/* bit 7  */
	t_u8 SPSMP_Support:1;	/* bit 6 */
	t_u8 Reserved5:1;	/* bit 5 */
	t_u8 PSMP_Capable:1;	/* bit 4 */
	t_u8 RejectUnadmFrame:1;	/* bit 3 */
	t_u8 ExtChanSwitching:1;	/* bit 2 */
	t_u8 Reserved1:1;	/* bit 1 */
	t_u8 BSS_CoexistSupport:1;	/* bit 0 */
} MLAN_PACK_END ExtCap_t, *pExtCap_t;
#else
/** Extended Capabilities Data */
typedef struct MLAN_PACK_START _ExtCap_t {
	/** Extended Capabilities value */
	t_u8 BSS_CoexistSupport:1;	/* bit 0 */
	t_u8 Reserved1:1;	/* bit 1 */
	t_u8 ExtChanSwitching:1;	/* bit 2 */
	t_u8 RejectUnadmFrame:1;	/* bit 3 */
	t_u8 PSMP_Capable:1;	/* bit 4 */
	t_u8 Reserved5:1;	/* bit 5 */
	t_u8 SPSMP_Support:1;	/* bit 6 */
	t_u8 Event:1;		/* bit 7  */
	t_u8 Diagnostics:1;	/* bit 8  */
	t_u8 MulticastDiagnostics:1;	/* bit 9  */
	t_u8 LocationTracking:1;	/* bit 10 */
	t_u8 FMS:1;		/* bit 11 */
	t_u8 ProxyARPService:1;	/* bit 12 */
	t_u8 CollocatedIntf:1;	/* bit 13 */
	t_u8 CivicLocation:1;	/* bit 14 */
	t_u8 GeospatialLocation:1;	/* bit 15 */
	t_u8 TFS:1;		/* bit 16 */
	t_u8 WNM_Sleep:1;	/* bit 17 */
	t_u8 TIM_Broadcast:1;	/* bit 18 */
	t_u8 BSS_Transition:1;	/* bit 19 */
	t_u8 QoSTrafficCap:1;	/* bit 20 */
	t_u8 AC_StationCount:1;	/* bit 21 */
	t_u8 MultipleBSSID:1;	/* bit 22 */
	t_u8 TimingMeasurement:1;	/* bit 23 */
	t_u8 ChannelUsage:1;	/* bit 24 */
	t_u8 SSID_List:1;	/* bit 25 */
	t_u8 DMS:1;		/* bit 26 */
	t_u8 UTC:1;		/* bit 27 */
	t_u8 TDLSPeerUAPSDSupport:1;	/* bit 28 */
	t_u8 TDLSPeerPSMSupport:1;	/* bit 29 */
	t_u8 TDLSChannelSwitching:1;	/* bit 30 */
	t_u8 Interworking:1;	/* bit 31 */
	t_u8 Qos_Map:1;		/* bit 32 */
	t_u8 EBR:1;		/* bit 33 */
	t_u8 SSPN_Interface:1;	/* bit 34 */
	t_u8 Reserved35:1;	/* bit 35 */
	t_u8 MSGCF_Capa:1;	/* bit 36 */
	t_u8 TDLSSupport:1;	/* bit 37 */
	t_u8 TDLSProhibited:1;	/* bit 38 */
	t_u8 TDLSChlSwitchProhib:1;	/* bit 39 */
	t_u8 rsvdBit40:1;	/* bit 40 */
	t_u8 rsvdBit41:1;	/* bit 41 */
	t_u8 rsvdBit42:1;	/* bit 42 */
	t_u8 rsvdBit43:1;	/* bit 43 */
	t_u8 rsvdBit44:1;	/* bit 44 */
	t_u8 rsvdBit45:1;	/* bit 45 */
	t_u8 rsvdBit46:1;	/* bit 46 */
	t_u8 rsvdBit47:1;	/* bit 47 */
	t_u8 rsvdBit48:1;	/* bit 48 */
	t_u8 rsvdBit49:1;	/* bit 49 */
	t_u8 rsvdBit50:1;	/* bit 50 */
	t_u8 rsvdBit51:1;	/* bit 51 */
	t_u8 rsvdBit52:1;	/* bit 52 */
	t_u8 rsvdBit53:1;	/* bit 53 */
	t_u8 rsvdBit54:1;	/* bit 54 */
	t_u8 rsvdBit55:1;	/* bit 55 */
	t_u8 rsvdBit56:1;	/* bit 56 */
	t_u8 rsvdBit57:1;	/* bit 57 */
	t_u8 rsvdBit58:1;	/* bit 58 */
	t_u8 rsvdBit59:1;	/* bit 59 */
	t_u8 rsvdBit60:1;	/* bit 60 */
	t_u8 TDLSWildBandwidth:1;	/* bit 61 */
	t_u8 OperModeNtf:1;	/* bit 62 */
	t_u8 MaxAMSDU0:1;	/* bit 63 */
	t_u8 MaxAMSDU1:1;	/* bit 64 */
	t_u8 chanSchedMgnt:1;	/* bit 65 */
	t_u8 rsvdBit66:1;	/* bit 66 */
	t_u8 NCC:1;		/* bit 67 */
	t_u8 rsvdBit68:1;	/* bit 68 */
	t_u8 CAQ:1;		/* bit 69 */
	t_u8 FTMR:1;		/* bit 70 */
	t_u8 FTMI:1;		/* bit 71 */
	t_u8 FILS:1;		/* bit 72 */
	t_u8 rsvdBit73:1;	/* bit 73 */
	t_u8 rsvdBit74:1;	/* bit 74 */
	t_u8 rsvdBit75:1;	/* bit 75 */
	t_u8 rsvdBit76:1;	/* bit 76 */
	t_u8 TWTReq:1;		/* bit 77 */
	t_u8 TWTResp:1;		/* bit 78 */
	t_u8 rsvdBit79:1;	/* bit 79 */
	t_u8 rsvdBit80:1;	/* bit 80 */
	t_u8 rsvdBit81:1;	/* bit 81 */
	t_u8 rsvdBit82:1;	/* bit 82 */
	t_u8 rsvdBit83:1;	/* bit 83 */
	t_u8 beacon_prot:1;	/* bit 84 */
	t_u8 rsvdBit85:1;	/* bit 85 */
	t_u8 rsvdBit86:1;	/* bit 86 */
	t_u8 rsvdBit87:1;	/* bit 87 */
} MLAN_PACK_END ExtCap_t, *pExtCap_t;
#endif

/** ExtCap : TDLS prohibited */
#define IS_EXTCAP_TDLS_PROHIBITED(ext_cap) (ext_cap.TDLSProhibited)
/** ExtCap : TDLS channel switch prohibited */
#define IS_EXTCAP_TDLS_CHLSWITCHPROHIB(ext_cap) (ext_cap.TDLSChlSwitchProhib)

/** mlan_bss_info data structure for MLAN_OID_GET_BSS_INFO */
typedef struct _mlan_bss_info {
	/** BSS mode */
	t_u32 bss_mode;
	/** SSID */
	mlan_802_11_ssid ssid;
	/** Table index */
	t_u32 scan_table_idx;
	/** Channel */
	t_u32 bss_chan;
	/** Band */
	t_u8 bss_band;
	/** Region code */
	t_u32 region_code;
	/** Connection status */
	t_u32 media_connected;
	/** Radio on */
	t_u32 radio_on;
	/** Max power level in dBm */
	t_s32 max_power_level;
	/** Min power level in dBm */
	t_s32 min_power_level;
	/** Adhoc state */
	t_u32 adhoc_state;
	/** NF of last beacon */
	t_s32 bcn_nf_last;
	/** wep status */
	t_u32 wep_status;
	/** scan block status */
	t_u8 scan_block;
	/** Host Sleep configured flag */
	t_u32 is_hs_configured;
	/** Deep Sleep flag */
	t_u32 is_deep_sleep;
	/** BSSID */
	mlan_802_11_mac_addr bssid;
#ifdef STA_SUPPORT
	/** Capability Info */
	t_u16 capability_info;
	/** Beacon Interval */
	t_u16 beacon_interval;
	/** Listen Interval */
	t_u16 listen_interval;
	/** Association Id  */
	t_u16 assoc_id;
	/** AP/Peer supported rates */
	t_u8 peer_supp_rates[MLAN_SUPPORTED_RATES];
	/** extend capability for AP */
	ExtCap_t ext_cap;
#endif				/* STA_SUPPORT */
	/** Mobility Domain ID */
	t_u16 mdid;
	/** FT Capability policy */
	t_u8 ft_cap;
	/** 11h active */
	t_bool is_11h_active;
	/** dfs check channel */
	t_u8 dfs_check_channel;
} mlan_bss_info, *pmlan_bss_info;

/** MAXIMUM number of TID */
#define MAX_NUM_TID 8

/** Max RX Win size */
#define MAX_RX_WINSIZE 64

/** rx_reorder_tbl */
typedef struct {
	/** TID */
	t_u16 tid;
	/** TA */
	t_u8 ta[MLAN_MAC_ADDR_LENGTH];
	/** Start window */
	t_u32 start_win;
	/** Window size */
	t_u32 win_size;
	/** amsdu flag */
	t_u8 amsdu;
	/** buffer status */
	t_u32 buffer[MAX_RX_WINSIZE];
} rx_reorder_tbl;

/** tx_ba_stream_tbl */
typedef struct {
	/** TID */
	t_u16 tid;
	/** RA */
	t_u8 ra[MLAN_MAC_ADDR_LENGTH];
	/** amsdu flag */
	t_u8 amsdu;
} tx_ba_stream_tbl;

/** Debug command number */
#define DBG_CMD_NUM 10

#ifdef SDIO
/** sdio mp debug number */
#define SDIO_MP_DBG_NUM 10
#endif

/** Maximum size of IEEE Information Elements */
#define IEEE_MAX_IE_SIZE 256

/** support up to 8 TDLS peer */
#define MLAN_MAX_TDLS_PEER_SUPPORTED 8
/** TDLS peer info */
typedef struct _tdls_peer_info {
	/** station mac address */
	t_u8 mac_addr[MLAN_MAC_ADDR_LENGTH];
	/** SNR */
	t_s8 snr;
	/** Noise Floor */
	t_s8 nf;
	/** Extended Capabilities IE */
	t_u8 ext_cap[IEEE_MAX_IE_SIZE];
	/** HT Capabilities IE */
	t_u8 ht_cap[IEEE_MAX_IE_SIZE];
	/** VHT Capabilities IE */
	t_u8 vht_cap[IEEE_MAX_IE_SIZE];
} tdls_peer_info;

/** max ralist num */
#define MLAN_MAX_RALIST_NUM 8
/** ralist info */
typedef struct _ralist_info {
	/** RA list buffer */
	t_u8 ra[MLAN_MAC_ADDR_LENGTH];
	/** total packets in RA list */
	t_u16 total_pkts;
	/** tid num */
	t_u8 tid;
	/** tx_pause flag */
	t_u8 tx_pause;
} ralist_info, *pralist_info;

/** mlan_debug_info data structure for MLAN_OID_GET_DEBUG_INFO */
typedef struct _mlan_debug_info {
	/* WMM AC_BK count */
	t_u32 wmm_ac_bk;
	/* WMM AC_BE count */
	t_u32 wmm_ac_be;
	/* WMM AC_VI count */
	t_u32 wmm_ac_vi;
	/* WMM AC_VO count */
	t_u32 wmm_ac_vo;
	/** Corresponds to max_tx_buf_size member of mlan_adapter*/
	t_u32 max_tx_buf_size;
	/** Corresponds to tx_buf_size member of mlan_adapter*/
	t_u32 tx_buf_size;
	/** Corresponds to curr_tx_buf_size member of mlan_adapter*/
	t_u32 curr_tx_buf_size;
	/** Tx table num */
	t_u32 tx_tbl_num;
	/** Tx ba stream table */
	tx_ba_stream_tbl tx_tbl[MLAN_MAX_TX_BASTREAM_SUPPORTED];
	/** Rx table num */
	t_u32 rx_tbl_num;
	/** Rx reorder table*/
	rx_reorder_tbl rx_tbl[MLAN_MAX_RX_BASTREAM_SUPPORTED];
	/** TDLS peer number */
	t_u32 tdls_peer_num;
	/** TDLS peer list*/
	tdls_peer_info tdls_peer_list[MLAN_MAX_TDLS_PEER_SUPPORTED];
	/** ralist num */
	t_u32 ralist_num;
	/** ralist info */
	ralist_info ralist[MLAN_MAX_RALIST_NUM];
	/** Corresponds to ps_mode member of mlan_adapter */
	t_u16 ps_mode;
	/** Corresponds to ps_state member of mlan_adapter */
	t_u32 ps_state;
#ifdef STA_SUPPORT
	/** Corresponds to is_deep_sleep member of mlan_adapter */
	t_u8 is_deep_sleep;
#endif /** STA_SUPPORT */
	/** Corresponds to pm_wakeup_card_req member of mlan_adapter */
	t_u8 pm_wakeup_card_req;
	/** Corresponds to pm_wakeup_fw_try member of mlan_adapter */
	t_u32 pm_wakeup_fw_try;
	/** time stamp when host try to wake up firmware */
	t_u32 pm_wakeup_in_secs;
	/** wake up timeout happened */
	t_u32 pm_wakeup_timeout;
	/** Corresponds to is_hs_configured member of mlan_adapter */
	t_u8 is_hs_configured;
	/** Corresponds to hs_activated member of mlan_adapter */
	t_u8 hs_activated;
	/** Corresponds to pps_uapsd_mode member of mlan_adapter */
	t_u16 pps_uapsd_mode;
	/** Corresponds to sleep_period.period member of mlan_adapter */
	t_u16 sleep_pd;
	/** Corresponds to wmm_qosinfo member of mlan_private */
	t_u8 qos_cfg;
	/** Corresponds to tx_lock_flag member of mlan_adapter */
	t_u8 tx_lock_flag;
	/** Corresponds to port_open member of mlan_private */
	t_u8 port_open;
	/** bypass pkt count */
	t_u32 bypass_pkt_count;
	/** Corresponds to scan_processing member of mlan_adapter */
	t_u32 scan_processing;
	/** Corresponds to mlan_processing member of mlan_adapter */
	t_u32 mlan_processing;
	/** Corresponds to main_lock_flag member of mlan_adapter */
	t_u32 main_lock_flag;
	/** Corresponds to main_process_cnt member of mlan_adapter */
	t_u32 main_process_cnt;
	/** Corresponds to delay_task_flag member of mlan_adapter */
	t_u32 delay_task_flag;
	/** mlan_rx_processing */
	t_u32 mlan_rx_processing;
	/** rx pkts queued */
	t_u32 rx_pkts_queued;
	/** Number of host to card command failures */
	t_u32 num_cmd_host_to_card_failure;
	/** Number of host to card sleep confirm failures */
	t_u32 num_cmd_sleep_cfm_host_to_card_failure;
	/** Number of host to card Tx failures */
	t_u32 num_tx_host_to_card_failure;
	/** Number of allocate buffer failure */
	t_u32 num_alloc_buffer_failure;
	/** Number of pkt dropped */
	t_u32 num_pkt_dropped;
#ifdef SDIO
	/** Number of card to host command/event failures */
	t_u32 num_cmdevt_card_to_host_failure;
	/** Number of card to host Rx failures */
	t_u32 num_rx_card_to_host_failure;
	/** Number of interrupt read failures */
	t_u32 num_int_read_failure;
	/** Last interrupt status */
	t_u32 last_int_status;
	/** number of interrupt receive */
	t_u32 num_of_irq;
	/** flag for sdio rx aggr */
	t_u8 sdio_rx_aggr;
	/** FW update port number */
	t_u32 mp_update[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX * 2];
	/** Invalid port update count */
	t_u32 mp_invalid_update;
	/** Number of packets tx aggr */
	t_u32 mpa_tx_count[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX];
	/** no more packets count*/
	t_u32 mpa_sent_last_pkt;
	/** no write_ports count */
	t_u32 mpa_sent_no_ports;
	/** last recv wr_bitmap */
	t_u32 last_recv_wr_bitmap;
    /** last recv rd_bitmap */
	t_u32 last_recv_rd_bitmap;
    /** mp_data_port_mask */
	t_u32 mp_data_port_mask;
	/** last mp_wr_bitmap */
	t_u32 last_mp_wr_bitmap[SDIO_MP_DBG_NUM];
	/** last ports for cmd53 write data */
	t_u32 last_mp_wr_ports[SDIO_MP_DBG_NUM];
	/** last len for cmd53 write data */
	t_u32 last_mp_wr_len[SDIO_MP_DBG_NUM];
	/** last curr_wr_port */
	t_u8 last_curr_wr_port[SDIO_MP_DBG_NUM];
	/** length info for cmd53 write data */
	t_u16 last_mp_wr_info[SDIO_MP_DBG_NUM * SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX];
	/** last mp_index */
	t_u8 last_mp_index;
	/** buffer for mp debug */
	t_u8 *mpa_buf;
	/** length info for mp buf size */
	t_u32 mpa_buf_size;
	/** Number of packets rx aggr */
	t_u32 mpa_rx_count[SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX];
	/** mp aggr_pkt limit */
	t_u8 mp_aggr_pkt_limit;
#endif
	/** Number of deauthentication events */
	t_u32 num_event_deauth;
	/** Number of disassosiation events */
	t_u32 num_event_disassoc;
	/** Number of link lost events */
	t_u32 num_event_link_lost;
	/** Number of deauthentication commands */
	t_u32 num_cmd_deauth;
	/** Number of association comamnd successes */
	t_u32 num_cmd_assoc_success;
	/** Number of association command failures */
	t_u32 num_cmd_assoc_failure;
	/** Number of consecutive association failures */
	t_u32 num_cons_assoc_failure;

	/** Number of command timeouts */
	t_u32 num_cmd_timeout;
	/** Timeout command ID */
	t_u16 timeout_cmd_id;
	/** Timeout command action */
	t_u16 timeout_cmd_act;
	/** List of last command IDs */
	t_u16 last_cmd_id[DBG_CMD_NUM];
	/** List of last command actions */
	t_u16 last_cmd_act[DBG_CMD_NUM];
	/** Last command index */
	t_u16 last_cmd_index;
	/** List of last command response IDs */
	t_u16 last_cmd_resp_id[DBG_CMD_NUM];
	/** Last command response index */
	t_u16 last_cmd_resp_index;
	/** List of last events */
	t_u16 last_event[DBG_CMD_NUM];
	/** Last event index */
	t_u16 last_event_index;
	/** Number of no free command node */
	t_u16 num_no_cmd_node;
	/** pending command id */
	t_u16 pending_cmd;
	/** time stamp for dnld last cmd */
	t_u32 dnld_cmd_in_secs;
	/** Corresponds to data_sent member of mlan_adapter */
	t_u8 data_sent;
	/** Corresponds to data_sent_cnt member of mlan_adapter */
	t_u32 data_sent_cnt;
	/** Corresponds to cmd_sent member of mlan_adapter */
	t_u8 cmd_sent;
	/** SDIO multiple port read bitmap */
	t_u32 mp_rd_bitmap;
	/** SDIO multiple port write bitmap */
	t_u32 mp_wr_bitmap;
	/** Current available port for read */
	t_u8 curr_rd_port;
	/** Current available port for write */
	t_u8 curr_wr_port;
#ifdef PCIE
	/** PCIE txbd read pointer */
	t_u32 txbd_rdptr;
	/** PCIE txbd write pointer */
	t_u32 txbd_wrptr;
	/** PCIE rxbd read pointer */
	t_u32 rxbd_rdptr;
	/** PCIE rxbd write pointer */
	t_u32 rxbd_wrptr;
	/** PCIE eventbd read pointer */
	t_u32 eventbd_rdptr;
	/** PCIE eventbd write pointer */
	t_u32 eventbd_wrptr;
	/** txrx_bd_size */
	t_u16 txrx_bd_size;
	/** txbd ring vbase */
	t_u8 *txbd_ring_vbase;
	/** txbd ring size */
	t_u32 txbd_ring_size;
	/** rxbd ring vbase */
	t_u8 *rxbd_ring_vbase;
	/** rxbd ring size */
	t_u32 rxbd_ring_size;
	/** evtbd ring vbase */
	t_u8 *evtbd_ring_vbase;
	/** evtbd ring size */
	t_u32 evtbd_ring_size;
#endif
	/** Corresponds to cmdresp_received member of mlan_adapter */
	t_u8 cmd_resp_received;
	/** Corresponds to event_received member of mlan_adapter */
	t_u8 event_received;
	/**  pendig tx pkts */
	t_u32 tx_pkts_queued;
#ifdef UAP_SUPPORT
	/**  pending bridge pkts */
	t_u16 num_bridge_pkts;
	/**  dropped pkts */
	t_u32 num_drop_pkts;
#endif
	/** FW hang report */
	t_u8 fw_hang_report;
	/** mlan_adapter pointer */
	t_void *mlan_adapter;
	/** mlan_adapter_size */
	t_u32 mlan_adapter_size;
	/** mlan_priv vector */
	t_void *mlan_priv[MLAN_MAX_BSS_NUM];
	/** mlan_priv_size */
	t_u32 mlan_priv_size[MLAN_MAX_BSS_NUM];
	/** mlan_priv_num */
	t_u8 mlan_priv_num;
} mlan_debug_info, *pmlan_debug_info;

#ifdef UAP_SUPPORT
/** Maximum number of clients supported by AP */
#define MAX_NUM_CLIENTS MAX_STA_COUNT

/** station info */
typedef struct _sta_info_data {
	/** STA MAC address */
	t_u8 mac_address[MLAN_MAC_ADDR_LENGTH];
	/** Power mgmt status */
	t_u8 power_mgmt_status;
	/** RSSI */
	t_s8 rssi;
	/** station bandmode */
	t_u16 bandmode;
	/** station stats */
	sta_stats stats;
	/** ie length */
	t_u16 ie_len;
} sta_info_data;

/** mlan_ds_sta_list structure for MLAN_OID_UAP_STA_LIST */
typedef struct _mlan_ds_sta_list {
	/** station count */
	t_u16 sta_count;
	/** station list */
	sta_info_data info[MAX_NUM_CLIENTS];
	/* ie_buf will be append at the end */
} mlan_ds_sta_list, *pmlan_ds_sta_list;
#endif

/** Type definition of mlan_ds_get_info for MLAN_IOCTL_GET_INFO */
typedef struct _mlan_ds_get_info {
	/** Sub-command */
	t_u32 sub_command;

	/** Status information parameter */
	union {
		/** Signal information for MLAN_OID_GET_SIGNAL */
		mlan_ds_get_signal signal;
		/** Signal path id for MLAN_OID_GET_SIGNAL_EXT */
		t_u16 path_id;
		/** Signal information for MLAN_OID_GET_SIGNAL_EXT */
		mlan_ds_get_signal signal_ext[MAX_PATH_NUM];
		/** Statistics information for MLAN_OID_GET_STATS */
		mlan_ds_get_stats stats;
		/** Statistics information for MLAN_OID_LINK_STATS*/
		t_u8 link_statistic[1];
		/** Firmware information for MLAN_OID_GET_FW_INFO */
		mlan_fw_info fw_info;
		/** Extended version information for MLAN_OID_GET_VER_EXT */
		mlan_ver_ext ver_ext;
		/** BSS information for MLAN_OID_GET_BSS_INFO */
		mlan_bss_info bss_info;
		/** Debug information for MLAN_OID_GET_DEBUG_INFO */
		t_u8 debug_info[1];
#ifdef UAP_SUPPORT
		/** UAP Statistics information for MLAN_OID_GET_STATS */
		mlan_ds_uap_stats ustats;
		/** UAP station list for MLAN_OID_UAP_STA_LIST */
		mlan_ds_sta_list sta_list;
#endif
	} param;
} mlan_ds_get_info, *pmlan_ds_get_info;

/*-----------------------------------------------------------------*/
/** Security Configuration Group */
/*-----------------------------------------------------------------*/
/** Enumeration for authentication mode */
enum _mlan_auth_mode {
	MLAN_AUTH_MODE_OPEN = 0x00,
	MLAN_AUTH_MODE_SHARED = 0x01,
	MLAN_AUTH_MODE_FT = 0x02,
	MLAN_AUTH_MODE_SAE = 0x03,
	MLAN_AUTH_MODE_NETWORKEAP = 0x80,
	MLAN_AUTH_MODE_AUTO = 0xFF,
};

/**Enumeration for AssocAgent authentication mode, sync from FW.*/
typedef enum {
	AssocAgentAuth_Open,
	AssocAgentAuth_Shared,
	AssocAgentAuth_FastBss,
	AssocAgentAuth_FastBss_Skip,
	AssocAgentAuth_Network_EAP,
	AssocAgentAuth_Wpa3Sae = 6,
	AssocAgentAuth_Auto,
} AssocAgentAuthType_e;

/** Enumeration for encryption mode */
enum _mlan_encryption_mode {
	MLAN_ENCRYPTION_MODE_NONE = 0,
	MLAN_ENCRYPTION_MODE_WEP40 = 1,
	MLAN_ENCRYPTION_MODE_TKIP = 2,
	MLAN_ENCRYPTION_MODE_CCMP = 3,
	MLAN_ENCRYPTION_MODE_WEP104 = 4,
	MLAN_ENCRYPTION_MODE_GCMP = 5,
	MLAN_ENCRYPTION_MODE_GCMP_256 = 6,
	MLAN_ENCRYPTION_MODE_CCMP_256 = 7,
};

/** Enumeration for PSK */
enum _mlan_psk_type {
	MLAN_PSK_PASSPHRASE = 1,
	MLAN_PSK_PMK,
	MLAN_PSK_CLEAR,
	MLAN_PSK_QUERY,
	MLAN_PSK_SAE_PASSWORD,
};

/** The bit to indicate the key is for unicast */
#define MLAN_KEY_INDEX_UNICAST 0x40000000
/** The key index to indicate default key */
#define MLAN_KEY_INDEX_DEFAULT 0x000000ff
/** Maximum key length */
/* #define MLAN_MAX_KEY_LENGTH        32 */
/** Minimum passphrase length */
#define MLAN_MIN_PASSPHRASE_LENGTH 8
/** Maximum passphrase length */
#define MLAN_MAX_PASSPHRASE_LENGTH 63
/** Minimum sae_password length */
#define MLAN_MIN_SAE_PASSWORD_LENGTH 8
/** Maximum sae_password length */
#define MLAN_MAX_SAE_PASSWORD_LENGTH 255
/** PMK length */
#define MLAN_PMK_HEXSTR_LENGTH 64
/* A few details needed for WEP (Wireless Equivalent Privacy) */
/** 104 bits */
#define MAX_WEP_KEY_SIZE 13
/** 40 bits RC4 - WEP */
#define MIN_WEP_KEY_SIZE 5
/** packet number size */
#define PN_SIZE 16
/** max seq size of wpa/wpa2 key */
#define SEQ_MAX_SIZE 8

/** key flag for tx_seq */
#define KEY_FLAG_TX_SEQ_VALID 0x00000001
/** key flag for rx_seq */
#define KEY_FLAG_RX_SEQ_VALID 0x00000002
/** key flag for group key */
#define KEY_FLAG_GROUP_KEY 0x00000004
/** key flag for tx */
#define KEY_FLAG_SET_TX_KEY 0x00000008
/** key flag for mcast IGTK */
#define KEY_FLAG_AES_MCAST_IGTK 0x00000010
/** key flag for remove key */
#define KEY_FLAG_REMOVE_KEY 0x80000000
/** key flag for GCMP */
#define KEY_FLAG_GCMP 0x00000020
/** key flag for GCMP_256 */
#define KEY_FLAG_GCMP_256 0x00000040
/** key flag for ccmp 256 */
#define KEY_FLAG_CCMP_256 0x00000080
/** key flag for GMAC_128 */
#define KEY_FLAG_GMAC_128 0x00000100
/** key flag for GMAC_256 */
#define KEY_FLAG_GMAC_256 0x00000200

/** Type definition of mlan_ds_encrypt_key for MLAN_OID_SEC_CFG_ENCRYPT_KEY */
typedef struct _mlan_ds_encrypt_key {
	/** Key disabled, all other fields will be
	 *  ignore when this flag set to MTRUE
	 */
	t_u32 key_disable;
	/** key removed flag, when this flag is set
	 *  to MTRUE, only key_index will be check
	 */
	t_u32 key_remove;
	/** Key index, used as current tx key index
	 *  when is_current_wep_key is set to MTRUE
	 */
	t_u32 key_index;
	/** Current Tx key flag */
	t_u32 is_current_wep_key;
	/** Key length */
	t_u32 key_len;
	/** Key */
	t_u8 key_material[MLAN_MAX_KEY_LENGTH];
	/** mac address */
	t_u8 mac_addr[MLAN_MAC_ADDR_LENGTH];
	/** wapi key flag */
	t_u32 is_wapi_key;
	/** Initial packet number */
	t_u8 pn[PN_SIZE];
	/** key flags */
	t_u32 key_flags;
} mlan_ds_encrypt_key, *pmlan_ds_encrypt_key;

/** Type definition of mlan_passphrase_t */
typedef struct _mlan_passphrase_t {
	/** Length of passphrase */
	t_u32 passphrase_len;
	/** Passphrase */
	t_u8 passphrase[MLAN_MAX_PASSPHRASE_LENGTH];
} mlan_passphrase_t;

/** Type definition of mlan_sae_password_t */
typedef struct _mlan_sae_password_t {
	/** Length of SAE Password */
	t_u32 sae_password_len;
	/** SAE Password */
	t_u8 sae_password[MLAN_MAX_SAE_PASSWORD_LENGTH];
} mlan_sae_password_t;

/** Type defnition of mlan_pmk_t */
typedef struct _mlan_pmk_t {
	/** PMK */
	t_u8 pmk[MLAN_MAX_KEY_LENGTH];
} mlan_pmk_t;

/** Embedded supplicant RSN type: No RSN */
#define RSN_TYPE_NO_RSN MBIT(0)
/** Embedded supplicant RSN type: WPA */
#define RSN_TYPE_WPA MBIT(3)
/** Embedded supplicant RSN type: WPA-NONE */
#define RSN_TYPE_WPANONE MBIT(4)
/** Embedded supplicant RSN type: WPA2 */
#define RSN_TYPE_WPA2 MBIT(5)
/** Embedded supplicant RSN type: RFU */
#define RSN_TYPE_VALID_BITS                                                    \
	(RSN_TYPE_NO_RSN | RSN_TYPE_WPA | RSN_TYPE_WPANONE | RSN_TYPE_WPA2)

/** Embedded supplicant cipher type: TKIP */
#define EMBED_CIPHER_TKIP MBIT(2)
/** Embedded supplicant cipher type: AES */
#define EMBED_CIPHER_AES MBIT(3)
/** Embedded supplicant cipher type: RFU */
#define EMBED_CIPHER_VALID_BITS (EMBED_CIPHER_TKIP | EMBED_CIPHER_AES)

/** Type definition of mlan_ds_passphrase for MLAN_OID_SEC_CFG_PASSPHRASE */
typedef struct _mlan_ds_passphrase {
	/** SSID may be used */
	mlan_802_11_ssid ssid;
	/** BSSID may be used */
	mlan_802_11_mac_addr bssid;
	/** Flag for passphrase or pmk used */
	t_u16 psk_type;
	/** Passphrase or PMK */
	union {
		/** Passphrase */
		mlan_passphrase_t passphrase;
		/** SAE Password */
		mlan_sae_password_t sae_password;
		/** PMK */
		mlan_pmk_t pmk;
	} psk;
} mlan_ds_passphrase, *pmlan_ds_passphrase;

/** Type definition of mlan_ds_esupp_mode for MLAN_OID_SEC_CFG_ESUPP_MODE */
typedef struct _mlan_ds_ewpa_mode {
	/** RSN mode */
	t_u32 rsn_mode;
	/** Active pairwise cipher */
	t_u32 act_paircipher;
	/** Active pairwise cipher */
	t_u32 act_groupcipher;
} mlan_ds_esupp_mode, *pmlan_ds_esupp_mode;

/** Type definition of mlan_ds_sec_cfg for MLAN_IOCTL_SEC_CFG */
typedef struct _mlan_ds_sec_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** Security configuration parameter */
	union {
		/** Authentication mode for MLAN_OID_SEC_CFG_AUTH_MODE */
		t_u32 auth_mode;
		/** Encryption mode for MLAN_OID_SEC_CFG_ENCRYPT_MODE */
		t_u32 encrypt_mode;
		/** WPA enabled flag for MLAN_OID_SEC_CFG_WPA_ENABLED */
		t_u32 wpa_enabled;
		/** WAPI enabled flag for MLAN_OID_SEC_CFG_WAPI_ENABLED */
		t_u32 wapi_enabled;
		/** Port Control enabled flag for MLAN_OID_SEC_CFG_PORT_CTRL */
		t_u32 port_ctrl_enabled;
		/** Encryption key for MLAN_OID_SEC_CFG_ENCRYPT_KEY */
		mlan_ds_encrypt_key encrypt_key;
		/** Passphrase for MLAN_OID_SEC_CFG_PASSPHRASE */
		mlan_ds_passphrase passphrase;
		/** Embedded supplicant WPA enabled flag for
		 *  MLAN_OID_SEC_CFG_EWPA_ENABLED
		 */
		t_u32 ewpa_enabled;
		/** Embedded supplicant mode for MLAN_OID_SEC_CFG_ESUPP_MODE */
		mlan_ds_esupp_mode esupp_mode;
#ifdef UAP_SUPPORT
		t_u8 sta_mac[MLAN_MAC_ADDR_LENGTH];
#endif
	} param;
} mlan_ds_sec_cfg, *pmlan_ds_sec_cfg;

#if defined(DRV_EMBEDDED_AUTHENTICATOR) || defined(DRV_EMBEDDED_SUPPLICANT)
#define BIT_TLV_TYPE_CRYPTO_KEY (1 << 0)
#define BIT_TLV_TYPE_CRYPTO_KEY_IV (1 << 1)
#define BIT_TLV_TYPE_CRYPTO_KEY_PREFIX (1 << 2)
#define BIT_TLV_TYPE_CRYPTO_KEY_DATA_BLK (1 << 3)

/** Type definition of mlan_ds_sup_cfg */
typedef struct _mlan_ds_sup_cfg {
	/** Sub-command */
	t_u8 sub_command;
	/** output length */
	t_u16 output_len;
	/** number of data blks */
	t_u16 data_blks_nr;
	/** sub action code */
	t_u8 sub_action_code;
	/** skip bytes */
	t_u16 skip_bytes;
	/** iteration */
	t_u32 iteration;
	/** count */
	t_u32 count;
	/** pointer to output */
	t_u8 *output;
	/** key length  */
	t_u16 key_len;
	/** pointer to key */
	t_u8 *key;
	/** key iv length  */
	t_u16 key_iv_len;
	/** pointer to key iv */
	t_u8 *key_iv;
	/** key prefix length */
	t_u16 key_prefix_len;
	/** pointer to key prefix */
	t_u8 *key_prefix;
	/** pointer to data blk length array */
	t_u32 *key_data_blk_len;
	/** pointer to key data blk pointer array */
	t_u8 **key_data_blk;
	/** callback */
	t_u8 call_back;
} mlan_ds_sup_cfg, *pmlan_ds_sup_cfg;
#endif

/*-----------------------------------------------------------------*/
/** Rate Configuration Group */
/*-----------------------------------------------------------------*/
/** Enumeration for rate type */
enum _mlan_rate_type { MLAN_RATE_INDEX, MLAN_RATE_VALUE, MLAN_RATE_BITMAP };

/** Enumeration for rate format */
enum _mlan_rate_format {
	MLAN_RATE_FORMAT_LG = 0,
	MLAN_RATE_FORMAT_HT,
	MLAN_RATE_FORMAT_VHT,
	MLAN_RATE_FORMAT_HE,
	MLAN_RATE_FORMAT_AUTO = 0xFF,
};

/** Max bitmap rates size */
#define MAX_BITMAP_RATES_SIZE 26

/** Type definition of mlan_rate_cfg_t for MLAN_OID_RATE_CFG */
typedef struct _mlan_rate_cfg_t {
	/** Fixed rate: 0, auto rate: 1 */
	t_u32 is_rate_auto;
	/** Rate type. 0: index; 1: value; 2: bitmap */
	t_u32 rate_type;
	/** Rate/MCS index or rate value if fixed rate */
	t_u32 rate;
	/** Rate Bitmap */
	t_u16 bitmap_rates[MAX_BITMAP_RATES_SIZE];
	/** NSS */
	t_u32 nss;
	/* LG rate: 0, HT rate: 1, VHT rate: 2 */
	t_u32 rate_format;
	/** Rate Setting */
	t_u16 rate_setting;
} mlan_rate_cfg_t;

/** 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;

/** HT guard interval */
typedef enum _mlan_ht_gi {
	MLAN_HT_LGI,
	MLAN_HT_SGI,
} mlan_ht_gi;

typedef enum _mlan_vht_stbc {
	MLAN_VHT_STBC,
	MLAN_VHT_NO_STBC,
} mlan_vht_stbc;

typedef enum _mlan_vht_ldpc {
	MLAN_VHT_LDPC,
	MLAN_VHT_NO_LDPC,
} mlan_vht_ldpc;

/** Band and BSS mode */
typedef struct _mlan_band_data_rate {
	/** Band configuration */
	t_u8 config_bands;
	/** BSS mode (Infra or IBSS) */
	t_u8 bss_mode;
} mlan_band_data_rate;

/** Type definition of mlan_data_rate for MLAN_OID_GET_DATA_RATE */
typedef struct _mlan_data_rate {
	/** Tx data rate */
	t_u32 tx_data_rate;
	/** Rx data rate */
	t_u32 rx_data_rate;

	/** Tx channel bandwidth */
	t_u32 tx_ht_bw;
	/** Tx guard interval */
	t_u32 tx_ht_gi;
	/** Rx channel bandwidth */
	t_u32 rx_ht_bw;
	/** Rx guard interval */
	t_u32 rx_ht_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;
} mlan_data_rate;

/** Type definition of mlan_ds_rate for MLAN_IOCTL_RATE */
typedef struct _mlan_ds_rate {
	/** Sub-command */
	t_u32 sub_command;
	/** Rate configuration parameter */
	union {
		/** Rate configuration for MLAN_OID_RATE_CFG */
		mlan_rate_cfg_t rate_cfg;
		/** Data rate for MLAN_OID_GET_DATA_RATE */
		mlan_data_rate data_rate;
		/** Supported rates for MLAN_OID_SUPPORTED_RATES */
		t_u8 rates[MLAN_SUPPORTED_RATES];
		/** Band/BSS mode for getting supported rates */
		mlan_band_data_rate rate_band_cfg;
	} param;
} mlan_ds_rate, *pmlan_ds_rate;

/*-----------------------------------------------------------------*/
/** Power Configuration Group */
/*-----------------------------------------------------------------*/

/** Type definition of mlan_power_cfg_t for MLAN_OID_POWER_CFG */
typedef struct _mlan_power_cfg_t {
	/** Is power auto */
	t_u32 is_power_auto;
	/** Power level in dBm */
	t_s32 power_level;
} mlan_power_cfg_t;

/** max power table size */
#define MAX_POWER_TABLE_SIZE 128
#define TX_PWR_CFG_AUTO_CTRL_OFF 0xFF
#define MAX_POWER_GROUP 64
/** Type definition of mlan_power group info */
typedef struct mlan_power_group {
	/** rate format (LG: 0, HT: 1, VHT: 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;
} mlan_power_group;

/** Type definition of mlan_power_cfg_ext for MLAN_OID_POWER_CFG_EXT */
typedef struct _mlan_power_cfg_ext {
	/** number of power_groups */
	t_u32 num_pwr_grp;
	/** array of power groups */
	mlan_power_group power_group[MAX_POWER_GROUP];
} mlan_power_cfg_ext;

/** Type definition of mlan_ds_power_cfg for MLAN_IOCTL_POWER_CFG */
typedef struct _mlan_ds_power_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** Power configuration parameter */
	union {
		/** Power configuration for MLAN_OID_POWER_CFG */
		mlan_power_cfg_t power_cfg;
		/** Extended power configuration for MLAN_OID_POWER_CFG_EXT */
		mlan_power_cfg_ext power_ext;
		/** Low power mode for MLAN_OID_POWER_LOW_POWER_MODE */
		t_u16 lpm;
	} param;
} mlan_ds_power_cfg, *pmlan_ds_power_cfg;

/** Type definition of mlan_ds_band_steer_cfg for MLAN_IOCTL_POWER_CFG */
typedef struct _mlan_ds_band_steer_cfg {
	/** Set/Get */
	t_u8 action;
	/** enable/disable band steering*/
	t_u8 state;
	/** Probe Response will be blocked to 2G channel for first
	 * block_2g_prb_req probe requests*/
	t_u8 block_2g_prb_req;
	/** When band steering is enabled, limit the btm request sent to STA at
	 * <max_btm_req_allowed>*/
	t_u8 max_btm_req_allowed;
} mlan_ds_band_steer_cfg, *pmlan_ds_band_steer_cfg;

/** Type definition of mlan_ds_beacon_stuck_param_cfg for MLAN_IOCTL_POWER_CFG */
typedef struct _mlan_ds_beacon_stuck_param_cfg {
    /** subcmd */
	t_u32 subcmd;
    /** Set/Get */
	t_u8 action;
    /** No of beacon interval after which firmware will check if beacon Tx is going fine */
	t_u8 beacon_stuck_detect_count;
    /** Upon performing MAC reset, no of beacon interval after which firmware will check if recovery was successful */
	t_u8 recovery_confirm_count;
} mlan_ds_beacon_stuck_param_cfg, *pmlan_ds_beacon_stuck_param_cfg;

/*-----------------------------------------------------------------*/
/** Power Management Configuration Group */
/*-----------------------------------------------------------------*/
/** Host sleep config conditions : Cancel */
#define HOST_SLEEP_CFG_CANCEL 0xffffffff

/** Host sleep config condition: broadcast data */
#define HOST_SLEEP_COND_BROADCAST_DATA MBIT(0)
/** Host sleep config condition: unicast data */
#define HOST_SLEEP_COND_UNICAST_DATA MBIT(1)
/** Host sleep config condition: mac event */
#define HOST_SLEEP_COND_MAC_EVENT MBIT(2)
/** Host sleep config condition: multicast data */
#define HOST_SLEEP_COND_MULTICAST_DATA MBIT(3)
/** Host sleep config condition: IPV6 packet */
#define HOST_SLEEP_COND_IPV6_PACKET MBIT(31)

/** Host sleep config conditions: Default */
#define HOST_SLEEP_DEF_COND                                                    \
	(HOST_SLEEP_COND_BROADCAST_DATA | HOST_SLEEP_COND_UNICAST_DATA |       \
	 HOST_SLEEP_COND_MAC_EVENT)

/** Host sleep config GPIO : Default */
#define HOST_SLEEP_DEF_GPIO 0xff
/** Host sleep config gap : Default */
#define HOST_SLEEP_DEF_GAP 200
/** Host sleep config min wake holdoff */
#define HOST_SLEEP_DEF_WAKE_HOLDOFF 0;
/** Host sleep config inactivity timeout */
#define HOST_SLEEP_DEF_INACTIVITY_TIMEOUT 10;

/** Type definition of mlan_ds_hs_cfg for MLAN_OID_PM_CFG_HS_CFG */
typedef struct _mlan_ds_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 for indication gpio*/
	t_u8 param_type_ind;
	/** GPIO pin for indication wakeup source */
	t_u32 ind_gpio;
	/** Level on ind_gpio pin for indication normal wakeup source */
	t_u32 level;
	/** Parameter type for extend hscfg*/
	t_u8 param_type_ext;
	/** Events that will be forced ignore*/
	t_u32 event_force_ignore;
	/** Events that will use extend gap to inform host*/
	t_u32 event_use_ext_gap;
	/** Ext gap*/
	t_u8 ext_gap;
	/** GPIO wave level for extend hscfg*/
	t_u8 gpio_wave;
} mlan_ds_hs_cfg, *pmlan_ds_hs_cfg;

#define MAX_MGMT_FRAME_FILTER 2
typedef struct _mlan_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=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;
} mlan_mgmt_frame_wakeup, *pmlan_mgmt_frame_wakeup;

/** Enable deep sleep mode */
#define DEEP_SLEEP_ON 1
/** Disable deep sleep mode */
#define DEEP_SLEEP_OFF 0

/** Default idle time in milliseconds for auto deep sleep */
#define DEEP_SLEEP_IDLE_TIME 100

typedef struct _mlan_ds_auto_ds {
	/** auto ds mode, 0 - disable, 1 - enable */
	t_u16 auto_ds;
	/** auto ds idle time in milliseconds */
	t_u16 idletime;
} mlan_ds_auto_ds;

/** Type definition of mlan_ds_inactivity_to
 *  for MLAN_OID_PM_CFG_INACTIVITY_TO
 */
typedef struct _mlan_ds_inactivity_to {
	/** Timeout unit in microsecond, 0 means 1000us (1ms) */
	t_u32 timeout_unit;
	/** Inactivity timeout for unicast data */
	t_u32 unicast_timeout;
	/** Inactivity timeout for multicast data */
	t_u32 mcast_timeout;
	/** Timeout for additional Rx traffic after Null PM1 packet exchange */
	t_u32 ps_entry_timeout;
} mlan_ds_inactivity_to, *pmlan_ds_inactivity_to;

/** Minimum sleep period in milliseconds */
#define MIN_SLEEP_PERIOD 10
/** Maximum sleep period in milliseconds */
#define MAX_SLEEP_PERIOD 60
/** Special setting for UPSD certification tests */
#define SLEEP_PERIOD_RESERVED_FF 0xFF

/** PS null interval disable */
#define PS_NULL_DISABLE (-1)

/** Local listen interval disable */
#define MRVDRV_LISTEN_INTERVAL_DISABLE (-1)
/** Minimum listen interval */
#define MRVDRV_MIN_LISTEN_INTERVAL 0

/** Minimum multiple DTIM */
#define MRVDRV_MIN_MULTIPLE_DTIM 0
/** Maximum multiple DTIM */
#define MRVDRV_MAX_MULTIPLE_DTIM 5
/** Ignore multiple DTIM */
#define MRVDRV_IGNORE_MULTIPLE_DTIM 0xfffe
/** Match listen interval to closest DTIM */
#define MRVDRV_MATCH_CLOSEST_DTIM 0xfffd

/** Minimum beacon miss timeout in milliseconds */
#define MIN_BCN_MISS_TO 0
/** Maximum beacon miss timeout in milliseconds */
#define MAX_BCN_MISS_TO 50
/** Disable beacon miss timeout */
#define DISABLE_BCN_MISS_TO 65535

/** Minimum delay to PS in milliseconds */
#define MIN_DELAY_TO_PS 0
/** Maximum delay to PS in milliseconds */
#define MAX_DELAY_TO_PS 65535
/** Delay to PS unchanged */
#define DELAY_TO_PS_UNCHANGED (-1)
/** Default delay to PS in milliseconds */
#define DELAY_TO_PS_DEFAULT 1000

/** PS mode: Unchanged */
#define PS_MODE_UNCHANGED 0
/** PS mode: Auto */
#define PS_MODE_AUTO 1
/** PS mode: Poll */
#define PS_MODE_POLL 2
/** PS mode: Null */
#define PS_MODE_NULL 3

/** Type definition of mlan_ds_ps_cfg for MLAN_OID_PM_CFG_PS_CFG */
typedef struct _mlan_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;
} mlan_ds_ps_cfg, *pmlan_ds_ps_cfg;

/** Type definition of mlan_ds_sleep_params for MLAN_OID_PM_CFG_SLEEP_PARAMS */
typedef struct _mlan_ds_sleep_params {
	/** Error */
	t_u32 error;
	/** Offset in microseconds */
	t_u32 offset;
	/** Stable time in microseconds */
	t_u32 stable_time;
	/** Calibration control */
	t_u32 cal_control;
	/** External sleep clock */
	t_u32 ext_sleep_clk;
	/** Reserved */
	t_u32 reserved;
} mlan_ds_sleep_params, *pmlan_ds_sleep_params;

/** sleep_param */
typedef struct _ps_sleep_param {
	/** control bitmap */
	t_u32 ctrl_bitmap;
	/** minimum sleep period (micro second) */
	t_u32 min_sleep;
	/** maximum sleep period (micro second) */
	t_u32 max_sleep;
} ps_sleep_param;

/** inactivity sleep_param */
typedef struct _inact_sleep_param {
	/** inactivity timeout (micro second) */
	t_u32 inactivity_to;
	/** miniumu awake period (micro second) */
	t_u32 min_awake;
	/** maximum awake period (micro second) */
	t_u32 max_awake;
} inact_sleep_param;

/** flag for ps mode */
#define PS_FLAG_PS_MODE 1
/** flag for sleep param */
#define PS_FLAG_SLEEP_PARAM 2
/** flag for inactivity sleep param */
#define PS_FLAG_INACT_SLEEP_PARAM 4

/** Enable Robust Coex mode */
#define ROBUSTCOEX_GPIOCFG_ENABLE 1
/** Disable Robust Coex mode */
#define ROBUSTCOEX_GPIOCFG_DISABLE 0

/** Disable power mode */
#define PS_MODE_DISABLE 0
/** Enable periodic dtim ps */
#define PS_MODE_PERIODIC_DTIM 1
/** Enable inactivity ps */
#define PS_MODE_INACTIVITY 2
/** FW wake up method interface */
#define FW_WAKEUP_METHOD_INTERFACE 1
/** FW wake up method gpio */
#define FW_WAKEUP_METHOD_GPIO 2
/** mlan_ds_ps_mgmt */
typedef struct _mlan_ds_ps_mgmt {
	/** flags for valid field */
	t_u16 flags;
	/** power mode */
	t_u16 ps_mode;
	/** sleep param */
	ps_sleep_param sleep_param;
	/** inactivity sleep param */
	inact_sleep_param inact_param;
} mlan_ds_ps_mgmt;

/** mlan_ds_ps_info */
typedef struct _mlan_ds_ps_info {
	/** suspend allowed flag */
	t_u32 is_suspend_allowed;
} mlan_ds_ps_info;

/** Type definition of mlan_ds_wakeup_reason for MLAN_OID_PM_HS_WAKEUP_REASON */
typedef struct _mlan_ds_hs_wakeup_reason {
	t_u16 hs_wakeup_reason;
} mlan_ds_hs_wakeup_reason;

/** Type definition of mlan_ds_ps_cfg for MLAN_OID_PM_CFG_PS_CFG */
typedef struct _mlan_ds_bcn_timeout {
	/** Beacon miss timeout period window */
	t_u16 bcn_miss_tmo_window;
	/** Beacon miss timeout period */
	t_u16 bcn_miss_tmo_period;
	/** Beacon reacquire timeout period window */
	t_u16 bcn_rq_tmo_window;
	/** Beacon reacquire timeout period */
	t_u16 bcn_rq_tmo_period;
} mlan_ds_bcn_timeout, *pmlan_ds_bcn_timeout;

/** Type definition of mlan_ds_pm_cfg for MLAN_IOCTL_PM_CFG */
typedef struct _mlan_ds_pm_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** Power management parameter */
	union {
		/** Power saving mode for MLAN_OID_PM_CFG_IEEE_PS */
		t_u32 ps_mode;
		/** Host Sleep configuration for MLAN_OID_PM_CFG_HS_CFG */
		mlan_ds_hs_cfg hs_cfg;
		/** Deep sleep mode for MLAN_OID_PM_CFG_DEEP_SLEEP */
		mlan_ds_auto_ds auto_deep_sleep;
		/** Inactivity timeout for MLAN_OID_PM_CFG_INACTIVITY_TO */
		mlan_ds_inactivity_to inactivity_to;
		/** Sleep period for MLAN_OID_PM_CFG_SLEEP_PD */
		t_u32 sleep_period;
		/** PS configuration parameters for MLAN_OID_PM_CFG_PS_CFG */
		mlan_ds_ps_cfg ps_cfg;
		/** PS configuration parameters for MLAN_OID_PM_CFG_SLEEP_PARAMS
		 */
		mlan_ds_sleep_params sleep_params;
		/** PS configuration parameters for MLAN_OID_PM_CFG_PS_MODE */
		mlan_ds_ps_mgmt ps_mgmt;
		/** power info for MLAN_OID_PM_INFO */
		mlan_ds_ps_info ps_info;
		/** hs wakeup reason for MLAN_OID_PM_HS_WAKEUP_REASON */
		mlan_ds_hs_wakeup_reason wakeup_reason;
		/** config manamgement frame for hs wakeup */
		mlan_mgmt_frame_wakeup mgmt_filter[MAX_MGMT_FRAME_FILTER];
		/** Beacon timout parameters for MLAN_OID_PM_CFG_BCN_TIMEOUT */
		mlan_ds_bcn_timeout bcn_timeout;
	} param;
} mlan_ds_pm_cfg, *pmlan_ds_pm_cfg;

#ifdef RX_PACKET_COALESCE
typedef struct {
	mlan_cmd_result_e cmd_result; /**< Firmware execution result */

	t_u32 pkt_threshold; /** Packet threshold */
	t_u16 delay; /** Timeout value in milliseconds */
} wlan_ioctl_rx_pkt_coalesce_config_t;
#endif

/*-----------------------------------------------------------------*/
/** WMM Configuration Group */
/*-----------------------------------------------------------------*/

/** WMM TSpec size */
#define MLAN_WMM_TSPEC_SIZE 63
/** WMM Add TS extra IE bytes */
#define MLAN_WMM_ADDTS_EXTRA_IE_BYTES 256
/** WMM statistics for packets hist bins */
#define MLAN_WMM_STATS_PKTS_HIST_BINS 7
/** Maximum number of AC QOS queues available */
#define MLAN_WMM_MAX_AC_QUEUES 4

/**
 *  @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 woal_wmm_addts_req_ioctl
 */
typedef struct {
	mlan_cmd_result_e cmd_result; /**< Firmware execution result */

	t_u32 timeout_ms; /**< Timeout value in milliseconds */
	t_u8 ieee_status_code; /**< IEEE status code */

	t_u32 ie_data_len; /**< Length of ie block in ie_data */
	t_u8 ie_data[MLAN_WMM_TSPEC_SIZE /**< TSPEC to send in the ADDTS */
		     + MLAN_WMM_ADDTS_EXTRA_IE_BYTES]; /**< 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 woal_wmm_delts_req_ioctl
 */
typedef struct {
	mlan_cmd_result_e cmd_result; /**< Firmware execution result */
	t_u8 ieee_reason_code; /**< IEEE reason code sent, unused for WMM */
	t_u32 ie_data_len; /**< Length of ie block in ie_data */
	t_u8 ie_data[MLAN_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.
 *
 *  - msdu_lifetime_expiry is ignored if set to 0 on a set command
 *
 *  @sa woal_wmm_queue_config_ioctl
 */
typedef struct {
	mlan_wmm_queue_config_action_e action; /**< Set, Get, or Default */
	mlan_wmm_ac_e access_category; /**< WMM_AC_BK(0) to WMM_AC_VO(3) */
	t_u16 msdu_lifetime_expiry; /**< lifetime expiry in TUs */
	t_u8 supported_rates[10]; /**< Not supported yet */
} wlan_ioctl_wmm_queue_config_t;

/**
 *  @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 woal_wmm_queue_stats_ioctl
 */
typedef struct {
	/** Action of Queue Config : Start, Stop, or Get */
	mlan_wmm_queue_stats_action_e action;
	/** User Priority */
	t_u8 user_priority;
	/** Number of successful packets transmitted */
	t_u16 pkt_count;
	/** Packets lost; not included in pkt_count */
	t_u16 pkt_loss;
	/** Average Queue delay in microseconds */
	t_u32 avg_queue_delay;
	/** Average Transmission delay in microseconds */
	t_u32 avg_tx_delay;
	/** Calculated used time in units of 32 microseconds */
	t_u16 used_time;
	/** Calculated policed time in units of 32 microseconds */
	t_u16 policed_time;
	/** 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 delay_histogram[MLAN_WMM_STATS_PKTS_HIST_BINS];
} wlan_ioctl_wmm_queue_stats_t,
	/** Type definition of mlan_ds_wmm_queue_stats
	 *  for MLAN_OID_WMM_CFG_QUEUE_STATS
	 */
mlan_ds_wmm_queue_stats, *pmlan_ds_wmm_queue_stats;

/**
 *  @brief IOCTL sub structure for a specific WMM AC Status
 */
typedef struct {
	/** WMM Acm */
	t_u8 wmm_acm;
	/** Flow required flag */
	t_u8 flow_required;
	/** Flow created flag */
	t_u8 flow_created;
	/** Disabled flag */
	t_u8 disabled;
} 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 woal_wmm_queue_status_ioctl
 */
typedef struct {
	/** WMM AC queue status */
	wlan_ioctl_wmm_queue_status_ac_t ac_status[MLAN_WMM_MAX_AC_QUEUES];
} wlan_ioctl_wmm_queue_status_t,
	/** Type definition of mlan_ds_wmm_queue_status
	 *  for MLAN_OID_WMM_CFG_QUEUE_STATUS
	 */
mlan_ds_wmm_queue_status, *pmlan_ds_wmm_queue_status;

/** Type definition of mlan_ds_wmm_addts for MLAN_OID_WMM_CFG_ADDTS */
typedef struct _mlan_ds_wmm_addts {
	/** Result of ADDTS request */
	mlan_cmd_result_e result;
	/** Timeout value in milliseconds */
	t_u32 timeout;
	/** IEEE status code */
	t_u32 status_code;
	/** Dialog token */
	t_u8 dialog_tok;
	/** TSPEC data length */
	t_u32 ie_data_len;
	/** TSPEC to send in the ADDTS + buffering for any extra IEs */
	t_u8 ie_data[MLAN_WMM_TSPEC_SIZE + MLAN_WMM_ADDTS_EXTRA_IE_BYTES];
} mlan_ds_wmm_addts, *pmlan_ds_wmm_addts;

/** Type definition of mlan_ds_wmm_delts for MLAN_OID_WMM_CFG_DELTS */
typedef struct _mlan_ds_wmm_delts {
	/** Result of DELTS request */
	mlan_cmd_result_e result;
	/** IEEE status code */
	t_u32 status_code;
	/** TSPEC data length */
	t_u8 ie_data_len;
	/** TSPEC to send in the DELTS */
	t_u8 ie_data[MLAN_WMM_TSPEC_SIZE];
} mlan_ds_wmm_delts, *pmlan_ds_wmm_delts;

/** Type definition of mlan_ds_wmm_queue_config
 *  for MLAN_OID_WMM_CFG_QUEUE_CONFIG
 */
typedef struct _mlan_ds_wmm_queue_config {
	/** Action of Queue Config : Set, Get, or Default */
	mlan_wmm_queue_config_action_e action;
	/** WMM Access Category: WMM_AC_BK(0) to WMM_AC_VO(3) */
	mlan_wmm_ac_e access_category;
	/** Lifetime expiry in TUs */
	t_u16 msdu_lifetime_expiry;
	/** Reserve for future use */
	t_u8 reserved[10];
} mlan_ds_wmm_queue_config, *pmlan_ds_wmm_queue_config;

/** Type definition of mlan_ds_wmm_cfg for MLAN_IOCTL_WMM_CFG */
typedef struct _mlan_ds_wmm_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** WMM configuration parameter */
	union {
		/** WMM enable for MLAN_OID_WMM_CFG_ENABLE */
		t_u32 wmm_enable;
		/** QoS configuration for MLAN_OID_WMM_CFG_QOS */
		t_u8 qos_cfg;
		/** WMM add TS for MLAN_OID_WMM_CFG_ADDTS */
		mlan_ds_wmm_addts addts;
		/** WMM delete TS for MLAN_OID_WMM_CFG_DELTS */
		mlan_ds_wmm_delts delts;
		/** WMM queue configuration for MLAN_OID_WMM_CFG_QUEUE_CONFIG */
		mlan_ds_wmm_queue_config q_cfg;
		/** AC Parameters Record WMM_AC_BE, WMM_AC_BK, WMM_AC_VI,
		 * WMM_AC_VO */
		wmm_ac_parameters_t ac_params[MAX_AC_QUEUES];
		/** WMM queue status for MLAN_OID_WMM_CFG_QUEUE_STATS */
		mlan_ds_wmm_queue_stats q_stats;
		/** WMM queue status for MLAN_OID_WMM_CFG_QUEUE_STATUS */
		mlan_ds_wmm_queue_status q_status;
		/** WMM TS status for MLAN_OID_WMM_CFG_TS_STATUS */
		mlan_ds_wmm_ts_status ts_status;
	} param;
} mlan_ds_wmm_cfg, *pmlan_ds_wmm_cfg;

/*-----------------------------------------------------------------*/
/** WPS Configuration Group */
/*-----------------------------------------------------------------*/
/** Enumeration for WPS session */
enum _mlan_wps_status {
	MLAN_WPS_CFG_SESSION_START = 1,
	MLAN_WPS_CFG_SESSION_END = 0
};

/** Type definition of mlan_ds_wps_cfg for MLAN_IOCTL_WPS_CFG */
typedef struct _mlan_ds_wps_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** WPS configuration parameter */
	union {
		/** WPS session for MLAN_OID_WPS_CFG_SESSION */
		t_u32 wps_session;
	} param;
} mlan_ds_wps_cfg, *pmlan_ds_wps_cfg;

/*-----------------------------------------------------------------*/
/** 802.11n Configuration Group */
/*-----------------------------------------------------------------*/
/** Maximum MCS */
#define NUM_MCS_FIELD 16

/** Supported stream modes */
#define HT_STREAM_MODE_1X1 0x11
#define HT_STREAM_MODE_2X2 0x22

/* Both 2.4G and 5G band selected */
#define BAND_SELECT_BOTH 0
/* Band 2.4G selected */
#define BAND_SELECT_BG 1
/* Band 5G selected */
#define BAND_SELECT_A 2

/** Type definition of mlan_ds_11n_htcap_cfg for MLAN_OID_11N_HTCAP_CFG */
typedef struct _mlan_ds_11n_htcap_cfg {
	/** HT Capability information */
	t_u32 htcap;
	/** Band selection */
	t_u32 misc_cfg;
	/** Hardware HT cap information required */
	t_u32 hw_cap_req;
} mlan_ds_11n_htcap_cfg, *pmlan_ds_11n_htcap_cfg;

/** Type definition of mlan_ds_11n_addba_param
 * for MLAN_OID_11N_CFG_ADDBA_PARAM
 */
typedef struct _mlan_ds_11n_addba_param {
	/** Timeout */
	t_u32 timeout;
	/** Buffer size for ADDBA request */
	t_u32 txwinsize;
	/** Buffer size for ADDBA response */
	t_u32 rxwinsize;
	/** amsdu for ADDBA request */
	t_u8 txamsdu;
	/** amsdu for ADDBA response */
	t_u8 rxamsdu;
} mlan_ds_11n_addba_param, *pmlan_ds_11n_addba_param;

/** Type definition of mlan_ds_11n_tx_cfg for MLAN_OID_11N_CFG_TX */
typedef struct _mlan_ds_11n_tx_cfg {
	/** HTTxCap */
	t_u16 httxcap;
	/** HTTxInfo */
	t_u16 httxinfo;
	/** Band selection */
	t_u32 misc_cfg;
} mlan_ds_11n_tx_cfg, *pmlan_ds_11n_tx_cfg;

/** 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

/* Maximum number of peer MAC and status/SNR tuples */
#define MAX_PEER_MAC_TUPLES 10

/** Any new subcommand structure should be declare here */

/** bf global cfg args */
typedef struct _mlan_bf_global_cfg_args {
	/** 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;
} mlan_bf_global_cfg_args;

/** trigger sounding args */
typedef struct _mlan_trigger_sound_args {
	/** Peer MAC address */
	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
	/** Status */
	t_u8 status;
} mlan_trigger_sound_args;

/** bf periodicity args */
typedef struct _mlan_bf_periodicity_args {
	/** Peer MAC address */
	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
	/** Current Tx BF Interval in milliseconds */
	t_u16 interval;
	/** Status */
	t_u8 status;
} mlan_bf_periodicity_args;

/** tx bf peer args */
typedef struct _mlan_tx_bf_peer_args {
	/** 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;
} mlan_tx_bf_peer_args;

/** SNR threshold args */
typedef struct _mlan_snr_thr_args {
	/** Peer MAC address */
	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
	/** SNR for peer */
	t_u8 snr;
} mlan_snr_thr_args;

/** Type definition of mlan_ds_11n_tx_bf_cfg for MLAN_OID_11N_CFG_TX_BF_CFG */
typedef struct _mlan_ds_11n_tx_bf_cfg {
	/** BF Action */
	t_u16 bf_action;
	/** Action */
	t_u16 action;
	/** Number of peers */
	t_u32 no_of_peers;
	union {
		mlan_bf_global_cfg_args bf_global_cfg;
		mlan_trigger_sound_args bf_sound[MAX_PEER_MAC_TUPLES];
		mlan_bf_periodicity_args bf_periodicity[MAX_PEER_MAC_TUPLES];
		mlan_tx_bf_peer_args tx_bf_peer[MAX_PEER_MAC_TUPLES];
		mlan_snr_thr_args bf_snr[MAX_PEER_MAC_TUPLES];
	} body;
} mlan_ds_11n_tx_bf_cfg, *pmlan_ds_11n_tx_bf_cfg;

/** Type definition of mlan_ds_11n_amsdu_aggr_ctrl for
 * MLAN_OID_11N_AMSDU_AGGR_CTRL*/
typedef struct _mlan_ds_11n_amsdu_aggr_ctrl {
	/** Enable/Disable */
	t_u16 enable;
	/** Current AMSDU size valid */
	t_u16 curr_buf_size;
} mlan_ds_11n_amsdu_aggr_ctrl, *pmlan_ds_11n_amsdu_aggr_ctrl;

/** Type definition of mlan_ds_11n_aggr_prio_tbl
 *  for MLAN_OID_11N_CFG_AGGR_PRIO_TBL
 */
typedef struct _mlan_ds_11n_aggr_prio_tbl {
	/** ampdu priority table */
	t_u8 ampdu[MAX_NUM_TID];
	/** amsdu priority table */
	t_u8 amsdu[MAX_NUM_TID];
} mlan_ds_11n_aggr_prio_tbl, *pmlan_ds_11n_aggr_prio_tbl;

/** DelBA All TIDs */
#define DELBA_ALL_TIDS 0xff
/** DelBA Tx */
#define DELBA_TX MBIT(0)
/** DelBA Rx */
#define DELBA_RX MBIT(1)

/** Type definition of mlan_ds_11n_delba for MLAN_OID_11N_CFG_DELBA */
typedef struct _mlan_ds_11n_delba {
	/** TID */
	t_u8 tid;
	/** Peer MAC address */
	t_u8 peer_mac_addr[MLAN_MAC_ADDR_LENGTH];
	/** Direction (Tx: bit 0, Rx: bit 1) */
	t_u8 direction;
} mlan_ds_11n_delba, *pmlan_ds_11n_delba;

/** Type definition of mlan_ds_delba for MLAN_OID_11N_CFG_REJECT_ADDBA_REQ */
typedef struct _mlan_ds_reject_addba_req {
	/** Bit0    : host sleep activated
	 *  Bit1    : auto reconnect enabled
	 *  Others  : reserved
	 */
	t_u32 conditions;
} mlan_ds_reject_addba_req, *pmlan_ds_reject_addba_req;

/** Type definition of mlan_ds_ibss_ampdu_param */
typedef struct _mlan_ds_ibss_ampdu_param {
	/** ampdu priority table */
	t_u8 ampdu[MAX_NUM_TID];
	/** rx amdpdu setting */
	t_u8 addba_reject[MAX_NUM_TID];
} mlan_ds_ibss_ampdu_param, *pmlan_ds_ibss_ampdu_param;

/** Type definition of mlan_ds_11n_cfg for MLAN_IOCTL_11N_CFG */
typedef struct _mlan_ds_11n_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** 802.11n configuration parameter */
	union {
		/** Tx param for 11n for MLAN_OID_11N_CFG_TX */
		mlan_ds_11n_tx_cfg tx_cfg;
		/** Aggr priority table for MLAN_OID_11N_CFG_AGGR_PRIO_TBL */
		mlan_ds_11n_aggr_prio_tbl aggr_prio_tbl;
		/** Add BA param for MLAN_OID_11N_CFG_ADDBA_PARAM */
		mlan_ds_11n_addba_param addba_param;
		/** Add BA Reject paramters for MLAN_OID_11N_CFG_ADDBA_REJECT */
		t_u8 addba_reject[MAX_NUM_TID];
		/** Tx buf size for MLAN_OID_11N_CFG_MAX_TX_BUF_SIZE */
		t_u32 tx_buf_size;
		/** HT cap info configuration for MLAN_OID_11N_HTCAP_CFG */
		mlan_ds_11n_htcap_cfg htcap_cfg;
		/** Tx param for 11n for MLAN_OID_11N_AMSDU_AGGR_CTRL */
		mlan_ds_11n_amsdu_aggr_ctrl amsdu_aggr_ctrl;
		/** Supported MCS Set field */
		t_u8 supported_mcs_set[NUM_MCS_FIELD];
		/** Transmit Beamforming Capabilities field */
		t_u32 tx_bf_cap;
		/** Transmit Beamforming configuration */
		mlan_ds_11n_tx_bf_cfg tx_bf;
		/** HT stream configuration */
		t_u32 stream_cfg;
		/** DelBA for MLAN_OID_11N_CFG_DELBA */
		mlan_ds_11n_delba del_ba;
		/** Reject Addba Req for MLAN_OID_11N_CFG_REJECT_ADDBA_REQ */
		mlan_ds_reject_addba_req reject_addba_req;
		/** Control coex RX window size configuration */
		t_u32 coex_rx_winsize;
		/** Control TX AMPDU configuration */
		t_u32 txaggrctrl;
		/** aggrprirotity table for MLAN_OID_11N_CFG_IBSS_AMPDU_PARAM */
		mlan_ds_ibss_ampdu_param ibss_ampdu;
		/** Minimum BA Threshold for MLAN_OID_11N_CFG_MIN_BA_THRESHOLD
		 */
		t_u8 min_ba_threshold;
	} param;
} mlan_ds_11n_cfg, *pmlan_ds_11n_cfg;

#define NUM_MCS_SUPP 20
#define VHT_MCS_SET_LEN 8

/** Type definition of mlan_ds_11ac_vhtcap_cfg for MLAN_OID_11AC_VHTCAP_CFG */
typedef struct _mlan_ds_11ac_vhtcap_cfg {
	/** HT Capability information */
	t_u32 vhtcap;
	/** Band selection */
	t_u32 misc_cfg;
	/** Hardware HT cap information required */
	t_u32 hw_cap_req;
} mlan_ds_11ac_vhtcap_cfg, *pmlan_ds_11ac_vhtcap_cfg;

/** Type definition of mlan_ds_11ac_tx_cfg for MLAN_OID_11AC_CFG_TX */
typedef struct _mlan_ds_11ac_tx_cfg {
	/** Band selection */
	t_u8 band_cfg;
	/** misc configuration */
	t_u8 misc_cfg;
	/** HTTxCap */
	t_u16 vhttxcap;
	/** HTTxInfo */
	t_u16 vhttxinfo;
} mlan_ds_11ac_tx_cfg, *pmlan_ds_11ac_tx_cfg;

/** Tx */
#define MLAN_RADIO_TX MBIT(0)
/** Rx */
#define MLAN_RADIO_RX MBIT(1)
/** Tx & Rx */
#define MLAN_RADIO_TXRX (MLAN_RADIO_TX | MLAN_RADIO_RX)

/** Type definition of mlan_ds_11ac_tx_cfg for MLAN_OID_11AC_CFG */
typedef struct _mlan_ds_11ac_vht_cfg {
	/** Band selection (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;
	/** Skip usr 11ac mcs cfg */
	t_bool skip_usr_11ac_mcs_cfg;
} mlan_ds_11ac_vht_cfg, *pmlan_ds_11ac_vht_cfg;

/** Type definition of mlan_ds_11ac_tx_cfg for MLAN_OID_11AC_CFG */
typedef struct _mlan_ds_11ac_opermode_cfg {
	/** channel width: 1-20MHz, 2-40MHz, 3-80MHz, 4-160MHz or 80+80MHz */
	t_u8 bw;
	/** Rx NSS */
	t_u8 nss;
} mlan_ds_11ac_opermode_cfg, *pmlan_ds_11ac_opermode_cfg;

/** Type definition of mlan_ds_11ac_cfg for MLAN_IOCTL_11AC_CFG */
typedef struct _mlan_ds_11ac_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** 802.11n configuration parameter */
	union {
		/** VHT configuration for MLAN_OID_11AC_VHT_CFG */
		mlan_ds_11ac_vht_cfg vht_cfg;
		/** Supported MCS Set field */
		t_u8 supported_mcs_set[NUM_MCS_SUPP];
		/** Oper mode configuration for MLAN_OID_11AC_OPERMODE_CFG */
		mlan_ds_11ac_opermode_cfg opermode_cfg;
	} param;
} mlan_ds_11ac_cfg, *pmlan_ds_11ac_cfg;

/** Type definition of mlan_ds_11ax_he_capa for MLAN_OID_11AX_HE_CFG */
typedef MLAN_PACK_START struct _mlan_ds_11ax_he_capa {
	/** tlv id of he capability */
	t_u16 id;
	/** length of the payload */
	t_u16 len;
	/** extension id */
	t_u8 ext_id;
	/** he mac capability info */
	t_u8 he_mac_cap[6];
	/** he phy capability info */
	t_u8 he_phy_cap[11];
	/** he txrx mcs support for 80MHz */
	t_u8 he_txrx_mcs_support[4];
	/** val for txrx mcs 160Mhz or 80+80, and PPE thresholds */
	t_u8 val[28];
} MLAN_PACK_END mlan_ds_11ax_he_capa, *pmlan_ds_11ax_he_capa;

/** Type definition of mlan_ds_11ax_he_cfg for MLAN_OID_11AX_HE_CFG */
typedef struct _mlan_ds_11ax_he_cfg {
	/** band, BIT0:2.4G, BIT1:5G*/
	t_u8 band;
	/** mlan_ds_11ax_he_capa */
	mlan_ds_11ax_he_capa he_cap;
} mlan_ds_11ax_he_cfg, *pmlan_ds_11ax_he_cfg;
/** Type definition of mlan_ds_11as_cfg for MLAN_IOCTL_11AX_CFG */
typedef struct _mlan_ds_11ax_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** 802.11n configuration parameter */
	union {
		/** HE configuration for MLAN_OID_11AX_HE_CFG */
		mlan_ds_11ax_he_cfg he_cfg;
	} param;
} mlan_ds_11ax_cfg, *pmlan_ds_11ax_cfg;

#define MLAN_11AXCMD_CFG_ID_SR_OBSS_PD_OFFSET 1
#define MLAN_11AXCMD_CFG_ID_SR_ENABLE 2
#define MLAN_11AXCMD_CFG_ID_BEAM_CHANGE 3
#define MLAN_11AXCMD_CFG_ID_HTC_ENABLE 4
#define MLAN_11AXCMD_CFG_ID_TXOP_RTS 5
#define MLAN_11AXCMD_CFG_ID_TX_OMI 6
#define MLAN_11AXCMD_CFG_ID_OBSSNBRU_TOLTIME 7

#define MLAN_11AXCMD_SR_SUBID 0x102
#define MLAN_11AXCMD_BEAM_SUBID 0x103
#define MLAN_11AXCMD_HTC_SUBID 0x104
#define MLAN_11AXCMD_TXOMI_SUBID 0x105
#define MLAN_11AXCMD_OBSS_TOLTIME_SUBID 0x106
#define MLAN_11AXCMD_TXOPRTS_SUBID 0x108

#define MLAN_11AX_TWT_SETUP_SUBID 0x114
#define MLAN_11AX_TWT_TEARDOWN_SUBID 0x115

#define MRVL_DOT11AX_ENABLE_SR_TLV_ID (PROPRIETARY_TLV_BASE_ID + 322)
#define MRVL_DOT11AX_OBSS_PD_OFFSET_TLV_ID (PROPRIETARY_TLV_BASE_ID + 323)

/** Type definition of mlan_11axcmdcfg_obss_pd_offset for MLAN_OID_11AX_CMD_CFG
 */
typedef struct MLAN_PACK_START _mlan_11axcmdcfg_obss_pd_offset {
	/** <NON_SRG_OffSET, SRG_OFFSET> */
	t_u8 offset[2];
} MLAN_PACK_END mlan_11axcmdcfg_obss_pd_offset;

/** Type definition of mlan_11axcmdcfg_sr_control for MLAN_OID_11AX_CMD_CFG */
typedef struct MLAN_PACK_START _mlan_11axcmdcfg_sr_control {
	/** 1 enable, 0 disable */
	t_u8 control;
} MLAN_PACK_END mlan_11axcmdcfg_sr_control;

/** Type definition of mlan_ds_11ax_sr_cmd for MLAN_OID_11AX_CMD_CFG */
typedef struct MLAN_PACK_START _mlan_ds_11ax_sr_cmd {
	/** type*/
	t_u16 type;
	/** length of TLV */
	t_u16 len;
	/** value */
	union {
		mlan_11axcmdcfg_obss_pd_offset obss_pd_offset;
		mlan_11axcmdcfg_sr_control sr_control;
	} param;
} MLAN_PACK_END mlan_ds_11ax_sr_cmd, *pmlan_ds_11ax_sr_cmd;

/** Type definition of mlan_ds_11ax_beam_cmd for MLAN_OID_11AX_CMD_CFG */
typedef struct _mlan_ds_11ax_beam_cmd {
	/** command value: 1 is disable, 0 is enable*/
	t_u8 value;
} mlan_ds_11ax_beam_cmd, *pmlan_ds_11ax_beam_cmd;

/** Type definition of mlan_ds_11ax_htc_cmd for MLAN_OID_11AX_CMD_CFG */
typedef struct _mlan_ds_11ax_htc_cmd {
	/** command value: 1 is enable, 0 is disable*/
	t_u8 value;
} mlan_ds_11ax_htc_cmd, *pmlan_ds_11ax_htc_cmd;

/** Type definition of mlan_ds_11ax_htc_cmd for MLAN_OID_11AX_CMD_CFG */
typedef struct _mlan_ds_11ax_txop_cmd {
	/** Two byte rts threshold value of which only 10 bits, bit 0 to bit 9
	 * are valid */
	t_u16 rts_thres;
} mlan_ds_11ax_txop_cmd, *pmlan_ds_11ax_txop_cmd;

/** Type definition of mlan_ds_11ax_htc_cmd for MLAN_OID_11AX_CMD_CFG */
typedef struct _mlan_ds_11ax_txomi_cmd {
	/* 11ax spec 9.2.4.6a.2 OM Control 12 bits. Bit 0 to bit 11 */
	t_u16 omi;
} mlan_ds_11ax_txomi_cmd, *pmlan_ds_11ax_txomi_cmd;

/** Type definition of mlan_ds_11ax_toltime_cmd for MLAN_OID_11AX_CMD_CFG */
typedef struct _mlan_ds_11ax_toltime_cmd {
	/* OBSS Narrow Bandwidth RU Tolerance Time */
	t_u32 tol_time;
} mlan_ds_11ax_toltime_cmd, *pmlan_ds_11ax_toltime_cmd;

/** Type definition of mlan_ds_11ax_cmd_cfg for MLAN_OID_11AX_CMD_CFG */
typedef struct _mlan_ds_11ax_cmd_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** Sub-id */
	t_u32 sub_id;
	/** 802.11n configuration parameter */
	union {
		/** SR configuration for MLAN_11AXCMD_SR_SUBID */
		mlan_ds_11ax_sr_cmd sr_cfg;
		/** Beam configuration for MLAN_11AXCMD_BEAM_SUBID */
		mlan_ds_11ax_beam_cmd beam_cfg;
		/** HTC configuration for MLAN_11AXCMD_HTC_SUBID */
		mlan_ds_11ax_htc_cmd htc_cfg;
		/** txop RTS configuration for MLAN_11AXCMD_TXOPRTS_SUBID */
		mlan_ds_11ax_txop_cmd txop_cfg;
		/** tx omi configuration for MLAN_11AXCMD_TXOMI_SUBID */
		mlan_ds_11ax_txomi_cmd txomi_cfg;
		/** OBSS tolerance time configuration for
		 * MLAN_11AXCMD_TOLTIME_SUBID */
		mlan_ds_11ax_toltime_cmd toltime_cfg;
	} param;
} mlan_ds_11ax_cmd_cfg, *pmlan_ds_11ax_cmd_cfg;

/** Type definition of mlan_ds_twt_setup for MLAN_OID_11AX_TWT_CFG */
typedef struct MLAN_PACK_START _mlan_ds_twt_setup {
	/** Implicit, 0: TWT session is explicit, 1: Session is implicit */
	t_u8 implicit;
	/** Announced, 0: Unannounced, 1: Announced TWT */
	t_u8 announced;
	/** Trigger Enabled, 0: Non-Trigger enabled, 1: Trigger enabled TWT */
	t_u8 trigger_enabled;
	/** TWT Information Disabled, 0: TWT info enabled, 1: TWT info disabled
	 */
	t_u8 twt_info_disabled;
	/** Negotiation Type, 0: Future Individual TWT SP start time, 1: Next
	 * Wake TBTT time */
	t_u8 negotiation_type;
	/** TWT Wakeup Duration, time after which the TWT requesting STA can
	 * transition to doze state */
	t_u8 twt_wakeup_duration;
	/** Flow Identifier. Range: [0-7]*/
	t_u8 flow_identifier;
	/** Hard Constraint, 0: FW can tweak the TWT setup parameters if it is
	 *rejected by AP.
	 ** 1: Firmware should not tweak any parameters. */
	t_u8 hard_constraint;
	/** TWT Exponent, Range: [0-63] */
	t_u8 twt_exponent;
	/** TWT Mantissa Range: [0-sizeof(UINT16)] */
	t_u16 twt_mantissa;
    /** TWT Request Type, 0: REQUEST_TWT, 1: SUGGEST_TWT*/
	t_u8 twt_request;
} MLAN_PACK_END mlan_ds_twt_setup, *pmlan_ds_twt_setup;

/** Type definition of mlan_ds_twt_teardown for MLAN_OID_11AX_TWT_CFG */
typedef struct MLAN_PACK_START _mlan_ds_twt_teardown {
	/** TWT Flow Identifier. Range: [0-7] */
	t_u8 flow_identifier;
	/** Negotiation Type. 0: Future Individual TWT SP start time, 1: Next
	 * Wake TBTT time */
	t_u8 negotiation_type;
	/** Tear down all TWT. 1: To teardown all TWT, 0 otherwise */
	t_u8 teardown_all_twt;
} MLAN_PACK_END mlan_ds_twt_teardown, *pmlan_ds_twt_teardown;

/** Type definition of mlan_ds_twtcfg for MLAN_OID_11AX_TWT_CFG */
typedef struct MLAN_PACK_START _mlan_ds_twtcfg {
	/** Sub-command */
	t_u32 sub_command;
	/** Sub-id */
	t_u32 sub_id;
	/** TWT Setup/Teardown configuration parameter */
	union {
		/** TWT Setup config for Sub ID: MLAN_11AX_TWT_SETUP_SUBID */
		mlan_ds_twt_setup twt_setup;
		/** TWT Teardown config for Sub ID: MLAN_11AX_TWT_TEARDOWN_SUBID
		 */
		mlan_ds_twt_teardown twt_teardown;
	} param;
} MLAN_PACK_END mlan_ds_twtcfg, *pmlan_ds_twtcfg;

/** Country code length */
#define COUNTRY_CODE_LEN 3

/*-----------------------------------------------------------------*/
/** 802.11d Configuration Group */
/*-----------------------------------------------------------------*/
/** Maximum subbands for 11d */
#define MRVDRV_MAX_SUBBAND_802_11D 83

/** Data structure for subband set */
typedef struct _mlan_ds_subband_set_t {
	/** First channel */
	t_u8 first_chan;
	/** Number of channels */
	t_u8 no_of_chan;
	/** Maximum Tx power in dBm */
	t_u8 max_tx_pwr;
} mlan_ds_subband_set_t;

/** Domain regulatory information */
typedef struct _mlan_ds_11d_domain_info {
	/** Country Code */
	t_u8 country_code[COUNTRY_CODE_LEN];
	/** Band that channels in sub_band belong to */
	t_u8 band;
	/** No. of subband in below */
	t_u8 no_of_sub_band;
	/** Subband data to send/last sent */
	mlan_ds_subband_set_t sub_band[MRVDRV_MAX_SUBBAND_802_11D];
} mlan_ds_11d_domain_info;

/** Type definition of mlan_ds_11d_cfg for MLAN_IOCTL_11D_CFG */
typedef struct _mlan_ds_11d_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** 802.11d configuration parameter */
	union {
#ifdef STA_SUPPORT
		/** Enable for MLAN_OID_11D_CFG_ENABLE */
		t_u32 enable_11d;
#endif				/* STA_SUPPORT */
		/** Domain info for MLAN_OID_11D_DOMAIN_INFO_EXT */
		mlan_ds_11d_domain_info domain_info;
#ifdef UAP_SUPPORT
		/** tlv data for MLAN_OID_11D_DOMAIN_INFO */
		t_u8 domain_tlv[MAX_IE_SIZE];
#endif				/* UAP_SUPPORT */
	} param;
} mlan_ds_11d_cfg, *pmlan_ds_11d_cfg;

/*-----------------------------------------------------------------*/
/** Register Memory Access Group */
/*-----------------------------------------------------------------*/
/** Enumeration for CSU target device type */
enum _mlan_csu_target_type {
	MLAN_CSU_TARGET_CAU = 1,
	MLAN_CSU_TARGET_PSU,
};

/** Enumeration for register type */
enum _mlan_reg_type {
	MLAN_REG_MAC = 1,
	MLAN_REG_BBP,
	MLAN_REG_RF,
	MLAN_REG_CAU = 5,
	MLAN_REG_PSU = 6,
	MLAN_REG_BCA = 7,
#if defined(PCIE9098) || defined(SD9098) || defined(USB9098) || defined(PCIE9097) || defined(USB9097) || defined(SD9097)
	MLAN_REG_MAC2 = 0x81,
	MLAN_REG_BBP2 = 0x82,
	MLAN_REG_RF2 = 0x83,
	MLAN_REG_BCA2 = 0x87
#endif
};

/** Type definition of mlan_ds_reg_rw for MLAN_OID_REG_RW */
typedef struct _mlan_ds_reg_rw {
	/** Register type */
	t_u32 type;
	/** Offset */
	t_u32 offset;
	/** Value */
	t_u32 value;
} mlan_ds_reg_rw;

/** Maximum EEPROM data */
#define MAX_EEPROM_DATA 256

/** Type definition of mlan_ds_read_eeprom for MLAN_OID_EEPROM_RD */
typedef struct _mlan_ds_read_eeprom {
	/** Multiples of 4 */
	t_u16 offset;
	/** Number of bytes */
	t_u16 byte_count;
	/** Value */
	t_u8 value[MAX_EEPROM_DATA];
} mlan_ds_read_eeprom;

/** Type definition of mlan_ds_mem_rw for MLAN_OID_MEM_RW */
typedef struct _mlan_ds_mem_rw {
	/** Address */
	t_u32 addr;
	/** Value */
	t_u32 value;
} mlan_ds_mem_rw;

/** Type definition of mlan_ds_reg_mem for MLAN_IOCTL_REG_MEM */
typedef struct _mlan_ds_reg_mem {
	/** Sub-command */
	t_u32 sub_command;
	/** Register memory access parameter */
	union {
		/** Register access for MLAN_OID_REG_RW */
		mlan_ds_reg_rw reg_rw;
		/** EEPROM access for MLAN_OID_EEPROM_RD */
		mlan_ds_read_eeprom rd_eeprom;
		/** Memory access for MLAN_OID_MEM_RW */
		mlan_ds_mem_rw mem_rw;
	} param;
} mlan_ds_reg_mem, *pmlan_ds_reg_mem;

/*-----------------------------------------------------------------*/
/** Multi-Radio Configuration Group */
/*-----------------------------------------------------------------*/
/*-----------------------------------------------------------------*/
/** 802.11h Configuration Group */
/*-----------------------------------------------------------------*/
/** Type definition of mlan_ds_11h_dfs_testing for MLAN_OID_11H_DFS_TESTING */
typedef struct _mlan_ds_11h_dfs_testing {
	/** User-configured CAC period in milliseconds, 0 to use default */
	t_u32 usr_cac_period_msec;
	/** User-configured NOP period in seconds, 0 to use default */
	t_u16 usr_nop_period_sec;
	/** User-configured skip channel change, 0 to disable */
	t_u8 usr_no_chan_change;
	/** User-configured fixed channel to change to, 0 to use random channel
	 */
	t_u8 usr_fixed_new_chan;
	/** User-configured cac restart */
	t_u8 usr_cac_restart;
} mlan_ds_11h_dfs_testing, *pmlan_ds_11h_dfs_testing;

/** Type definition of mlan_ds_11h_dfs_testing for MLAN_OID_11H_CHAN_NOP_INFO */
typedef struct _mlan_ds_11h_chan_nop_info {
	/** current channel */
	t_u8 curr_chan;
	/** channel_width */
	t_u8 chan_width;
	/** flag for chan under nop */
	t_bool chan_under_nop;
	/** chan_ban_info for new channel */
	chan_band_info new_chan;
} mlan_ds_11h_chan_nop_info, *pmlan_ds_11h_chan_nop_info;

typedef struct _mlan_ds_11h_chan_rep_req {
	t_u16 startFreq;
	Band_Config_t bandcfg;
	t_u8 chanNum;
	t_u32 millisec_dwell_time; /**< Channel dwell time in milliseconds */
	t_u8 host_based;
} mlan_ds_11h_chan_rep_req;

typedef struct _mlan_ds_11h_dfs_w53_cfg {
	/** dfs w53 cfg */
	t_u8 dfs53cfg;
} mlan_ds_11h_dfs_w53_cfg;

/** Type definition of mlan_ds_11h_cfg for MLAN_IOCTL_11H_CFG */
typedef struct _mlan_ds_11h_cfg {
	/** Sub-command */
	t_u32 sub_command;
	union {
		/** Local power constraint for
		 * MLAN_OID_11H_LOCAL_POWER_CONSTRAINT */
		t_s8 usr_local_power_constraint;
		/** User-configuation for MLAN_OID_11H_DFS_TESTING */
		mlan_ds_11h_dfs_testing dfs_testing;
		/** channel NOP information for MLAN_OID_11H_CHAN_NOP_INFO */
		mlan_ds_11h_chan_nop_info ch_nop_info;
		/** channel report req for MLAN_OID_11H_CHAN_REPORT_REQUEST */
		mlan_ds_11h_chan_rep_req chan_rpt_req;
		/** channel switch count for MLAN_OID_11H_CHAN_SWITCH_COUNT*/
		t_s8 cs_count;
		mlan_ds_11h_dfs_w53_cfg dfs_w53_cfg;
	} param;
} mlan_ds_11h_cfg, *pmlan_ds_11h_cfg;

/*-----------------------------------------------------------------*/
/** Miscellaneous Configuration Group */
/*-----------------------------------------------------------------*/

/** CMD buffer size */
#define MLAN_SIZE_OF_CMD_BUFFER (3 * 1024)

/** LDO Internal */
#define LDO_INTERNAL 0
/** LDO External */
#define LDO_EXTERNAL 1

/** Enumeration for IE type */
enum _mlan_ie_type {
	MLAN_IE_TYPE_GEN_IE = 0,
#ifdef STA_SUPPORT
	MLAN_IE_TYPE_ARP_FILTER,
#endif /* STA_SUPPORT */
};

/** Type definition of mlan_ds_misc_gen_ie for MLAN_OID_MISC_GEN_IE */
typedef struct _mlan_ds_misc_gen_ie {
	/** IE type */
	t_u32 type;
	/** IE length */
	t_u32 len;
	/** IE buffer */
	t_u8 ie_data[MAX_IE_SIZE];
} mlan_ds_misc_gen_ie;

#ifdef SDIO
/** Type definition of mlan_ds_misc_sdio_mpa_ctrl
 *  for MLAN_OID_MISC_SDIO_MPA_CTRL
 */
typedef struct _mlan_ds_misc_sdio_mpa_ctrl {
	/** SDIO MP-A TX enable/disable */
	t_u16 tx_enable;
	/** SDIO MP-A RX enable/disable */
	t_u16 rx_enable;
	/** SDIO MP-A TX buf size */
	t_u16 tx_buf_size;
	/** SDIO MP-A RX buf size */
	t_u16 rx_buf_size;
	/** SDIO MP-A TX Max Ports */
	t_u16 tx_max_ports;
	/** SDIO MP-A RX Max Ports */
	t_u16 rx_max_ports;
} mlan_ds_misc_sdio_mpa_ctrl;
#endif

/** Type definition of mlan_ds_misc_cmd for MLAN_OID_MISC_HOST_CMD */
typedef struct _mlan_ds_misc_cmd {
	/** Command length */
	t_u32 len;
	/** Command buffer */
	t_u8 cmd[MRVDRV_SIZE_OF_CMD_BUFFER];
} mlan_ds_misc_cmd;

/** Maximum number of system clocks */
#define MLAN_MAX_CLK_NUM 16

/** Clock type : Configurable */
#define MLAN_CLK_CONFIGURABLE 0
/** Clock type : Supported */
#define MLAN_CLK_SUPPORTED 1

/** Type definition of mlan_ds_misc_sys_clock for MLAN_OID_MISC_SYS_CLOCK */
typedef struct _mlan_ds_misc_sys_clock {
	/** Current system clock */
	t_u16 cur_sys_clk;
	/** Clock type */
	t_u16 sys_clk_type;
	/** Number of clocks */
	t_u16 sys_clk_num;
	/** System clocks */
	t_u16 sys_clk[MLAN_MAX_CLK_NUM];
} mlan_ds_misc_sys_clock;

/** Enumeration for function init/shutdown */
enum _mlan_func_cmd {
	MLAN_FUNC_INIT = 1,
	MLAN_FUNC_SHUTDOWN,
};

/** Type definition of mlan_ds_misc_tx_datapause
 * for MLAN_OID_MISC_TX_DATAPAUSE
 */
typedef struct _mlan_ds_misc_tx_datapause {
	/** Tx data pause flag */
	t_u16 tx_pause;
	/** Max number of Tx buffers for all PS clients */
	t_u16 tx_buf_cnt;
} mlan_ds_misc_tx_datapause;

/** Type definition of mlan_ds_misc_rx_abort_cfg
 * for MLAN_OID_MISC_RX_ABORT_CFG
 */
typedef struct _mlan_ds_misc_rx_abort_cfg {
	/** enable/disable rx abort */
	t_u8 enable;
	/** Rx weak RSSI pkt threshold */
	t_s8 rssi_threshold;
} mlan_ds_misc_rx_abort_cfg;

/** Type definition of mlan_ds_misc_rx_abort_cfg_ext
 * for MLAN_OID_MISC_RX_ABORT_CFG_EXT
 */
typedef struct _mlan_ds_misc_rx_abort_cfg_ext {
	/** enable/disable dynamic rx abort */
	t_u8 enable;
	/** rssi margin */
	t_s8 rssi_margin;
	/** specify ceil rssi threshold */
	t_s8 ceil_rssi_threshold;
} mlan_ds_misc_rx_abort_cfg_ext;

/** Type definition of mlan_ds_misc_rx_abort_cfg_ext
 * for MLAN_OID_MISC_TX_AMDPU_PROT_MODE
 */
typedef struct _mlan_ds_misc_tx_ampdu_prot_mode {
	/** set prot mode */
	t_u16 mode;
} mlan_ds_misc_tx_ampdu_prot_mode;

/** Type definition of mlan_ds_misc_dot11mc_unassoc_ftm_cfg
 * for MLAN_OID_MISC_DOT11MC_UNASSOC_FTM_CFG
 */
typedef struct _mlan_ds_misc_dot11mc_unassoc_ftm_cfg {
	/** set the state */
	t_u16 state;
} mlan_ds_misc_dot11mc_unassoc_ftm_cfg;

#define RATEADAPT_ALGO_LEGACY 0
#define RATEADAPT_ALGO_SR 1

/** Type definition of mlan_ds_misc_rate_adapt_cfg
 * for MLAN_OID_MISC_RATE_ADAPT_CFG
 */
typedef struct _mlan_ds_misc_rate_adapt_cfg {
	/** SR Rateadapt */
	t_u8 sr_rateadapt;
	/** set low threshold */
	t_u8 ra_low_thresh;
	/** set high threshold */
	t_u8 ra_high_thresh;
	/** set interval */
	t_u16 ra_interval;
} mlan_ds_misc_rate_adapt_cfg;

/** Type definition of mlan_ds_misc_cck_desense_cfg
 * for MLAN_OID_MISC_CCK_DESENSE_CFG
 */
typedef struct _mlan_ds_misc_cck_desense_cfg {
	/** cck desense mode: 0:disable 1:normal 2:dynamic */
	t_u16 mode;
	/** specify rssi margin */
	t_s8 margin;
	/** specify ceil rssi threshold */
	t_s8 ceil_thresh;
	/** cck desense "on" interval count */
	t_u8 num_on_intervals;
	/** cck desense "off" interval count */
	t_u8 num_off_intervals;
} mlan_ds_misc_cck_desense_cfg;

/** IP address length */
#define IPADDR_LEN (16)
/** Max number of ip */
#define MAX_IPADDR (4)
/** IP address type - NONE*/
#define IPADDR_TYPE_NONE (0)
/** IP address type - IPv4*/
#define IPADDR_TYPE_IPV4 (1)
/** IP operation remove */
#define MLAN_IPADDR_OP_IP_REMOVE (0)
/** IP operation ARP filter */
#define MLAN_IPADDR_OP_ARP_FILTER MBIT(0)
/** IP operation ARP response */
#define MLAN_IPADDR_OP_AUTO_ARP_RESP MBIT(1)

/** Type definition of mlan_ds_misc_ipaddr_cfg for MLAN_OID_MISC_IP_ADDR */
typedef struct _mlan_ds_misc_ipaddr_cfg {
	/** Operation code */
	t_u32 op_code;
	/** IP address type */
	t_u32 ip_addr_type;
	/** Number of IP */
	t_u32 ip_addr_num;
	/** IP address */
	t_u8 ip_addr[MAX_IPADDR][IPADDR_LEN];
} mlan_ds_misc_ipaddr_cfg;

/** Type definnition of mlan_ds_misc_ipv6_ra_offload for
 * MLAN_OID_MISC_IPV6_RA_OFFLOAD*/
typedef struct _mlan_ds_misc_ipv6_ra_offload {
	/** 0: disable; 1: enable*/
	t_u8 enable;
	t_u8 ipv6_addr[16];
} mlan_ds_misc_ipv6_ra_offload;

/* MEF configuration disable */
#define MEF_CFG_DISABLE 0
/* MEF configuration Rx filter enable */
#define MEF_CFG_RX_FILTER_ENABLE 1
/* MEF configuration auto ARP response */
#define MEF_CFG_AUTO_ARP_RESP 2
/* MEF configuration host command */
#define MEF_CFG_HOSTCMD 0xFFFF

/** Type definition of mlan_ds_misc_mef_cfg for MLAN_OID_MISC_MEF_CFG */
typedef struct _mlan_ds_misc_mef_cfg {
	/** Sub-ID for operation */
	t_u32 sub_id;
	/** Parameter according to sub-ID */
	union {
		/** MEF command buffer for MEF_CFG_HOSTCMD */
		mlan_ds_misc_cmd cmd_buf;
	} param;
} mlan_ds_misc_mef_cfg;

/** Type definition of mlan_ds_misc_cfp_code for MLAN_OID_MISC_CFP_CODE */
typedef struct _mlan_ds_misc_cfp_code {
	/** CFP table code for 2.4GHz */
	t_u32 cfp_code_bg;
	/** CFP table code for 5GHz */
	t_u32 cfp_code_a;
} mlan_ds_misc_cfp_code;

/** Type definition of mlan_ds_misc_arb_cfg
 * for MLAN_OID_MISC_ARB_CFG
 */
typedef struct _mlan_ds_misc_arb_cfg {
	/** arb mode 0-4 */
	t_u32 arb_mode;
} mlan_ds_misc_arb_cfg;

/** Type definition of mlan_ds_misc_tp_state
 *  for MLAN_OID_MISC_TP_STATE
 */
typedef struct _mlan_ds_misc_tp_state {
	/** TP account mode 0-disable 1-enable */
	t_u32 on;
	/** Packet drop point */
	t_u32 drop_point;
} mlan_ds_misc_tp_state;

/** Type definition of mlan_ds_misc_country_code
 *  for MLAN_OID_MISC_COUNTRY_CODE
 */
typedef struct _mlan_ds_misc_country_code {
	/** Country Code */
	t_u8 country_code[COUNTRY_CODE_LEN];
} mlan_ds_misc_country_code;

/** action for set */
#define SUBSCRIBE_EVT_ACT_BITWISE_SET 0x0002
/** action for clear */
#define SUBSCRIBE_EVT_ACT_BITWISE_CLR 0x0003
/** BITMAP for subscribe event rssi low */
#define SUBSCRIBE_EVT_RSSI_LOW MBIT(0)
/** BITMAP for subscribe event snr low */
#define SUBSCRIBE_EVT_SNR_LOW MBIT(1)
/** BITMAP for subscribe event max fail */
#define SUBSCRIBE_EVT_MAX_FAIL MBIT(2)
/** BITMAP for subscribe event beacon missed */
#define SUBSCRIBE_EVT_BEACON_MISSED MBIT(3)
/** BITMAP for subscribe event rssi high */
#define SUBSCRIBE_EVT_RSSI_HIGH MBIT(4)
/** BITMAP for subscribe event snr high */
#define SUBSCRIBE_EVT_SNR_HIGH MBIT(5)
/** BITMAP for subscribe event data rssi low */
#define SUBSCRIBE_EVT_DATA_RSSI_LOW MBIT(6)
/** BITMAP for subscribe event data snr low */
#define SUBSCRIBE_EVT_DATA_SNR_LOW MBIT(7)
/** BITMAP for subscribe event data rssi high */
#define SUBSCRIBE_EVT_DATA_RSSI_HIGH MBIT(8)
/** BITMAP for subscribe event data snr high */
#define SUBSCRIBE_EVT_DATA_SNR_HIGH MBIT(9)
/** BITMAP for subscribe event link quality */
#define SUBSCRIBE_EVT_LINK_QUALITY MBIT(10)
/** BITMAP for subscribe event pre_beacon_lost */
#define SUBSCRIBE_EVT_PRE_BEACON_LOST MBIT(11)
/** default PRE_BEACON_MISS_COUNT */
#define DEFAULT_PRE_BEACON_MISS 30

/** Type definition of mlan_ds_subscribe_evt for MLAN_OID_MISC_CFP_CODE */
typedef struct _mlan_ds_subscribe_evt {
	/** evt action */
	t_u16 evt_action;
	/** bitmap for subscribe event */
	t_u16 evt_bitmap;
	/** Absolute value of RSSI threshold value (dBm) */
	t_u8 low_rssi;
	/** 0--report once, 1--report everytime happen,
	 * N -- report only happend > N consecutive times
	 */
	t_u8 low_rssi_freq;
	/** SNR threshold value (dB) */
	t_u8 low_snr;
	/** 0--report once, 1--report everytime happen,
	 *  N -- report only happend > N consecutive times
	 */
	t_u8 low_snr_freq;
	/** Failure count threshold */
	t_u8 failure_count;
	/** 0--report once, 1--report everytime happen,
	 *  N -- report only happend > N consecutive times
	 */
	t_u8 failure_count_freq;
	/** num of missed beacons */
	t_u8 beacon_miss;
	/** 0--report once, 1--report everytime happen,
	 *  N -- report only happend > N consecutive times
	 */
	t_u8 beacon_miss_freq;
	/** Absolute value of RSSI threshold value (dBm) */
	t_u8 high_rssi;
	/** 0--report once, 1--report everytime happen,
	 *  N -- report only happend > N consecutive times
	 */
	t_u8 high_rssi_freq;
	/** SNR threshold value (dB) */
	t_u8 high_snr;
	/** 0--report once, 1--report everytime happen,
	 *  N -- report only happend > N consecutive times
	 */
	t_u8 high_snr_freq;
	/** Absolute value of data RSSI threshold value (dBm) */
	t_u8 data_low_rssi;
	/** 0--report once, 1--report everytime happen,
	 *  N -- report only happend > N consecutive times
	 */
	t_u8 data_low_rssi_freq;
	/** Absolute value of data SNR threshold value (dBm) */
	t_u8 data_low_snr;
	/** 0--report once, 1--report everytime happen,
	 *  N -- report only happend > N consecutive times
	 */
	t_u8 data_low_snr_freq;
	/** Absolute value of data RSSI threshold value (dBm) */
	t_u8 data_high_rssi;
	/** 0--report once, 1--report everytime happen,
	 *  N -- report only happend > N consecutive times
	 */
	t_u8 data_high_rssi_freq;
	/** Absolute value of data SNR threshold value (dBm) */
	t_u8 data_high_snr;
	/** 0--report once, 1--report everytime happen,
	 *  N -- report only happend > N consecutive times
	 */
	t_u8 data_high_snr_freq;
	/* Link SNR threshold (dB) */
	t_u16 link_snr;
	/* Link SNR frequency */
	t_u16 link_snr_freq;
	/* Second minimum rate value as per the rate table below */
	t_u16 link_rate;
	/* Second minimum rate frequency */
	t_u16 link_rate_freq;
	/* Tx latency value (us) */
	t_u16 link_tx_latency;
	/* Tx latency frequency */
	t_u16 link_tx_lantency_freq;
	/* Number of pre missed beacons */
	t_u8 pre_beacon_miss;
} mlan_ds_subscribe_evt;

/** Max OTP user data length */
#define MAX_OTP_USER_DATA_LEN 252

/** Type definition of mlan_ds_misc_otp_user_data
 * for MLAN_OID_MISC_OTP_USER_DATA
 */
typedef struct _mlan_ds_misc_otp_user_data {
	/** Reserved */
	t_u16 reserved;
	/** OTP user data length */
	t_u16 user_data_length;
	/** User data buffer */
	t_u8 user_data[MAX_OTP_USER_DATA_LEN];
} mlan_ds_misc_otp_user_data;

typedef struct _aggr_ctrl_cfg {
	/** Enable */
	t_u16 enable;
	/** Aggregation alignment */
	t_u16 aggr_align;
	/** Aggregation max size */
	t_u16 aggr_max_size;
	/** Aggregation max packet number */
	t_u16 aggr_max_num;
	/** Aggrgation timeout, in microseconds */
	t_u16 aggr_tmo;
} aggr_ctrl_cfg;

/** Type definition of mlan_ds_misc_aggr_ctrl
 *  for MLAN_OID_MISC_AGGR_CTRL
 */
typedef struct _mlan_ds_misc_aggr_ctrl {
	/** Tx aggregation control */
	aggr_ctrl_cfg tx;
} mlan_ds_misc_aggr_ctrl;

#ifdef USB
typedef struct _usb_aggr_ctrl_cfg {
	/** Enable */
	t_u16 enable;
	/** Aggregation mode */
	t_u16 aggr_mode;
	/** Aggregation alignment */
	t_u16 aggr_align;
	/** Aggregation max packet/size */
	t_u16 aggr_max;
	/** Aggrgation timeout, in microseconds */
	t_u16 aggr_tmo;
} usb_aggr_ctrl_cfg;

/** Type definition of mlan_ds_misc_usb_aggr_ctrl
 *  for MLAN_OID_MISC_USB_AGGR_CTRL
 */
typedef struct _mlan_ds_misc_usb_aggr_ctrl {
	/** Tx aggregation control */
	usb_aggr_ctrl_cfg tx_aggr_ctrl;
	/** Rx deaggregation control */
	usb_aggr_ctrl_cfg rx_deaggr_ctrl;
} mlan_ds_misc_usb_aggr_ctrl;
#endif

#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

/** Type definition of mlan_ds_gpio_tsf_latch */
typedef struct _mlan_ds_gpio_tsf_latch {
    /**clock sync Mode */
	t_u8 clock_sync_mode;
    /**clock sync Role */
	t_u8 clock_sync_Role;
    /**clock sync GPIO Pin Number */
	t_u8 clock_sync_gpio_pin_number;
    /**clock sync GPIO Level or Toggle */
	t_u8 clock_sync_gpio_level_toggle;
    /**clock sync GPIO Pulse Width */
	t_u16 clock_sync_gpio_pulse_width;
} mlan_ds_gpio_tsf_latch;

/** Type definition of mlan_ds_tsf_info */
typedef struct _mlan_ds_tsf_info {
	/**get tsf info format */
	t_u16 tsf_format;
	/**tsf info */
	t_u16 tsf_info;
	/**tsf */
	t_u64 tsf;
	/**Positive or negative offset in microsecond from Beacon TSF to GPIO toggle TSF  */
	t_s32 tsf_offset;
} mlan_ds_tsf_info;

#if defined(STA_SUPPORT)
typedef struct _mlan_ds_misc_pmfcfg {
	/** Management Frame Protection Capable */
	t_u8 mfpc;
	/** Management Frame Protection Required */
	t_u8 mfpr;
} mlan_ds_misc_pmfcfg;
#endif

#define MAX_SSID_NUM 16
#define MAX_AP_LIST 8

/**Action ID for TDLS disable link*/
#define WLAN_TDLS_DISABLE_LINK 0x00
/**Action ID for TDLS enable link*/
#define WLAN_TDLS_ENABLE_LINK 0x01
/**Action ID for TDLS create link*/
#define WLAN_TDLS_CREATE_LINK 0x02
/**Action ID for TDLS config link*/
#define WLAN_TDLS_CONFIG_LINK 0x03
/*reason code*/
#define MLAN_REASON_TDLS_TEARDOWN_UNSPECIFIED 26
/** TDLS operation buffer */
typedef struct _mlan_ds_misc_tdls_oper {
	/** TDLS Action */
	t_u16 tdls_action;
	/** TDLS peer address */
	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
	/** peer capability */
	t_u16 capability;
	/** peer qos info */
	t_u8 qos_info;
	/** peer extend capability */
	t_u8 *ext_capab;
	/** extend capability len */
	t_u8 ext_capab_len;
	/** support rates */
	t_u8 *supported_rates;
	/** supported rates len */
	t_u8 supported_rates_len;
	/** peer ht_cap */
	t_u8 *ht_capa;
	/** peer vht capability */
	t_u8 *vht_cap;
} mlan_ds_misc_tdls_oper;

/** flag for TDLS extcap */
#define TDLS_IE_FLAGS_EXTCAP 0x0001
/** flag for TDLS HTCAP */
#define TDLS_IE_FLAGS_HTCAP 0x0002
/** flag for TDLS HTINFO */
#define TDLS_IE_FLAGS_HTINFO 0x0004
/** flag for TDLS VHTCAP */
#define TDLS_IE_FLAGS_VHTCAP 0x0008
/** flag for TDLS VHTOPRAT */
#define TDLS_IE_FLAGS_VHTOPRAT 0x0010
/** flag for TDLS AID inof */
#define TDLS_IE_FLAGS_AID 0x0020
/** flag for TDLS Supported channels and regulatory class IE*/
#define TDLS_IE_FLAGS_SUPP_CS_IE 0x0040
/** flag for TDLS Qos info */
#define TDLS_IE_FLAGS_QOS_INFO 0x0080
/** flag for TDLS SETUP */
#define TDLS_IE_FLAGS_SETUP 0x0100

/** TDLS ie buffer */
typedef struct _mlan_ds_misc_tdls_ies {
	/** TDLS peer address */
	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
	/** flags for request IEs */
	t_u16 flags;
	/** Qos info */
	t_u8 QosInfo;
	/** Extended Capabilities IE */
	t_u8 ext_cap[IEEE_MAX_IE_SIZE];
	/** HT Capabilities IE */
	t_u8 ht_cap[IEEE_MAX_IE_SIZE];
	/** HT Information IE */
	t_u8 ht_info[IEEE_MAX_IE_SIZE];
	/** VHT Capabilities IE */
	t_u8 vht_cap[IEEE_MAX_IE_SIZE];
	/** VHT Operations IE */
	t_u8 vht_oprat[IEEE_MAX_IE_SIZE];
	/** aid Info */
	t_u8 aid_info[IEEE_MAX_IE_SIZE];
	/** supported channels */
	t_u8 supp_chan[IEEE_MAX_IE_SIZE];
	/** supported regulatory class */
	t_u8 regulatory_class[IEEE_MAX_IE_SIZE];
} mlan_ds_misc_tdls_ies;

#ifdef RX_PACKET_COALESCE
typedef struct _mlan_ds_misc_rx_packet_coalesce {
	/** packet threshold */
	t_u32 packet_threshold;
	/** timeout value */
	t_u16 delay;
} mlan_ds_misc_rx_packet_coalesce;
#endif

typedef struct _mlan_ds_misc_dfs_repeater {
	/** Set or Get */
	t_u16 action;
	/** 1 on or 0 off */
	t_u16 mode;
} mlan_ds_misc_dfs_repeater;

#define WOWLAN_MAX_PATTERN_LEN 20
#define WOWLAN_MAX_OFFSET_LEN 50
#define MAX_NUM_FILTERS 10
#define MEF_MODE_HOST_SLEEP (1 << 0)
#define MEF_MODE_NON_HOST_SLEEP (1 << 1)
#define MEF_ACTION_WAKE (1 << 0)
#define MEF_ACTION_ALLOW (1 << 1)
#define MEF_ACTION_ALLOW_AND_WAKEUP_HOST 3
#define MEF_AUTO_ARP 0x10
#define MEF_AUTO_PING 0x20
#define MEF_NS_RESP 0x40
#define MEF_MAGIC_PKT 0x80
#define CRITERIA_BROADCAST BIT(0)
#define CRITERIA_UNICAST BIT(1)
#define CRITERIA_MULTICAST BIT(3)

#define MAX_NUM_ENTRIES 8
#define MAX_NUM_BYTE_SEQ 6
#define MAX_NUM_MASK_SEQ 6

#define OPERAND_DNUM 1
#define OPERAND_BYTE_SEQ 2

#define MAX_OPERAND 0x40
#define TYPE_BYTE_EQ (MAX_OPERAND + 1)
#define TYPE_DNUM_EQ (MAX_OPERAND + 2)
#define TYPE_BIT_EQ (MAX_OPERAND + 3)

#define RPN_TYPE_AND (MAX_OPERAND + 4)
#define RPN_TYPE_OR (MAX_OPERAND + 5)

#define ICMP_OF_IP_PROTOCOL 0x01
#define TCP_OF_IP_PROTOCOL 0x06
#define UDP_OF_IP_PROTOCOL 0x11

#define IPV4_PKT_OFFSET 20
#define IP_PROTOCOL_OFFSET 31
#define PORT_PROTOCOL_OFFSET 44

#define FILLING_TYPE MBIT(0)
#define FILLING_PATTERN MBIT(1)
#define FILLING_OFFSET MBIT(2)
#define FILLING_NUM_BYTES MBIT(3)
#define FILLING_REPEAT MBIT(4)
#define FILLING_BYTE_SEQ MBIT(5)
#define FILLING_MASK_SEQ MBIT(6)

/** Type definition of filter_item
 *  Support three match methods:
 *  <1>Byte comparison type=0x41
 *  <2>Decimal comparison type=0x42
 *  <3>Bit comparison type=0x43
 */
typedef struct _mef_filter_t {
	/** flag*/
	t_u32 fill_flag;
	/** BYTE 0X41; Decimal 0X42; Bit 0x43*/
	t_u16 type;
	/** value*/
	t_u32 pattern;
	/** offset*/
	t_u16 offset;
	/** number of bytes*/
	t_u16 num_bytes;
	/** repeat*/
	t_u16 repeat;
	/** byte number*/
	t_u8 num_byte_seq;
	/** array*/
	t_u8 byte_seq[MAX_NUM_BYTE_SEQ];
	/** mask numbers*/
	t_u8 num_mask_seq;
	/** array*/
	t_u8 mask_seq[MAX_NUM_MASK_SEQ];
} mef_filter_t;

typedef struct _mef_entry_t {
	/** mode: bit0--hostsleep mode; bit1--non hostsleep mode */
	t_u8 mode;
	/** action: 0--discard and not wake host;
		    1--discard and wake host;
		    3--allow and wake host;*/
	t_u8 action;
	/** filter number */
	t_u8 filter_num;
	/** filter array*/
	mef_filter_t filter_item[MAX_NUM_FILTERS];
	/** rpn array*/
	t_u8 rpn[MAX_NUM_FILTERS];
} mef_entry_t;

/** Type definition of mlan_ds_nvflt_mef_entry
 *for MLAN_OID_MISC_MEF_FLT_CFG
 */
typedef struct _mlan_ds_misc_mef_flt_cfg {
	/** Type of action*/
	int mef_act_type;
	/** Operation code*/
	t_u32 op_code;
	/** NV Filter Criteria*/
	t_u32 criteria;
	/** NV MEF entry*/
	mef_entry_t mef_entry;
} mlan_ds_misc_mef_flt_cfg;

/** Enumeration for action type*/
enum _mlan_act_mef_act_type {
	MEF_ACT_ADD = 1,
	MEF_ACT_ENABLE,
	MEF_ACT_DISABLE,
	MEF_ACT_CANCEL,
	MEF_ACT_AUTOARP,
	MEF_ACT_WOWLAN,
	MEF_ACT_IPV6_NS,
};

typedef struct _mlan_ds_sensor_temp {
	t_u32 temperature;
} mlan_ds_sensor_temp;

#define MLAN_KCK_LEN 16
#define MLAN_KEK_LEN 16
#define MLAN_REPLAY_CTR_LEN 8
/** mlan_ds_misc_gtk_rekey_data */
typedef struct _mlan_ds_misc_gtk_rekey_data {
	/** key encryption key */
	t_u8 kek[MLAN_KEK_LEN];
	/** key confirmation key */
	t_u8 kck[MLAN_KCK_LEN];
	/** replay counter */
	t_u8 replay_ctr[MLAN_REPLAY_CTR_LEN];
} mlan_ds_misc_gtk_rekey_data;
typedef struct _mlan_ds_bw_chan_oper {
	/* bandwidth 20:20M 40:40M 80:80M */
	t_u8 bandwidth;
	/* channel number */
	t_u8 channel;
	/* Non-global operating class */
	t_u8 oper_class;
} mlan_ds_bw_chan_oper;

typedef struct _mlan_ds_ind_rst_cfg {
	/** Set or Get */
	t_u16 action;
	/** oob mode enable/ disable */
	t_u8 ir_mode;
	/** gpio pin */
	t_u8 gpio_pin;
} mlan_ds_ind_rst_cfg;

#define MKEEP_ALIVE_IP_PKT_MAX 256
typedef struct _mlan_ds_misc_keep_alive {
	t_u8 mkeep_alive_id;
	t_u8 enable;
	/** enable/disable tcp reset*/
	t_u8 reset;
	/**True means saved in driver, false means not saved or download*/
	t_u8 cached;
	t_u32 send_interval;
	t_u16 retry_interval;
	t_u16 retry_count;
	t_u8 dst_mac[MLAN_MAC_ADDR_LENGTH];
	t_u8 src_mac[MLAN_MAC_ADDR_LENGTH];
	t_u16 pkt_len;
	t_u8 packet[MKEEP_ALIVE_IP_PKT_MAX];
	/** Ethernet type */
	t_u16 ether_type;
} mlan_ds_misc_keep_alive, *pmlan_ds_misc_keep_alive;

/** TX and RX histogram statistic parameters*/
typedef MLAN_PACK_START struct _mlan_ds_misc_tx_rx_histogram {
	/** Enable or disable get tx/rx histogram statistic */
	t_u8 enable;
	/** Choose to get TX, RX or both histogram statistic */
	t_u16 action;
	/** Size of Tx/Rx info */
	t_u16 size;
	/** Store Tx/Rx info */
	t_u8 value[1];
} MLAN_PACK_END mlan_ds_misc_tx_rx_histogram;

typedef MLAN_PACK_START struct _mlan_ds_cw_mode_ctrl {
	/** Mode of Operation 0: Disable 1: Tx Continuous Packet 2: Tx
	 * Continuous Wave */
	t_u8 mode;
	/*channel */
	t_u8 channel;
	/* channel info */
	t_u8 chanInfo;
	/** Tx Power level in dBm */
	t_u16 txPower;
	/** Packet Length */
	t_u16 pktLength;
	/** bit rate Info */
	t_u32 rateInfo;
} MLAN_PACK_END mlan_ds_cw_mode_ctrl;

#define RX_PKT_INFO MBIT(1)
/** Struct for per-packet configuration */
typedef struct _mlan_per_pkt_cfg {
	/** Type ID*/
	t_u16 type;
	/** Length of payload*/
	t_u16 len;
	/**  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[];
} mlan_per_pkt_cfg;

/** Type definition of mlan_ds_misc_robustcoex_params for MLAN_IOCTL_MISC_CFG */
typedef struct _mlan_ds_misc_robustcoex_params {
	t_u16 method;
	/** enable/disable robustcoex gpio cfg */
	t_u8 enable;
	/** Number of GPIO */
	t_u8 gpio_num;
	/** Polarity of GPIO */
	t_u8 gpio_polarity;
} mlan_ds_misc_robustcoex_params;

#if defined(PCIE)
typedef struct _mlan_ds_ssu_params {
	t_u32 nskip;
	t_u32 nsel;
	t_u32 adcdownsample;
	t_u32 mask_adc_pkt;
	t_u32 out_16bits;
	t_u32 spec_pwr_enable;
	t_u32 rate_deduction;
	t_u32 n_pkt_avg;
} mlan_ds_ssu_params;
#endif

typedef MLAN_PACK_START struct _mlan_ds_hal_phy_cfg_params {
	/** 11b pwr spectral density mask enable/disable */
	t_u8 dot11b_psd_mask_cfg;
	/** reserved fields for future hal/phy cfg use */
	t_u8 reserved[7];
} MLAN_PACK_END mlan_ds_hal_phy_cfg_params;

#define MAX_NUM_MAC 2
/** Type definition of mlan_ds_misc_mapping_policy */
typedef struct _mlan_ds_misc_mapping_policy {
	/** Enable/disable dynamic mapping */
	t_u16 subcmd;
	/** Mapping policy */
	t_u8 mapping_policy;
} mlan_ds_misc_mapping_policy, *pmlan_ds_misc_mapping_policy;

typedef struct _dmcsChanStatus_t {
	/** Channel number */
	t_u8 channel;
	/** Number of ap on this channel */
	t_u8 ap_count;
	/** Number of sta on this channel */
	t_u8 sta_count;
} dmcsChanStatus_t, *pdmcsChanStatus_t;

typedef struct _dmcsStatus_t {
	/** Radio ID */
	t_u8 radio_id;
	/** Running mode
	** 0 - Idle
	** 1 - DBC
	** 2 - DRCS
	*/
	t_u8 running_mode;
	/** Current channel status */
	dmcsChanStatus_t chan_status[2];
} dmcsStatus_t, *pdmcsStatus_t;

/** Type definition of mlan_ds_misc_dmcs_status */
typedef struct _mlan_ds_misc_dmcs_status {
	t_u8 mapping_policy;
	dmcsStatus_t radio_status[MAX_NUM_MAC];
} mlan_ds_misc_dmcs_status, *pmlan_ds_misc_dmcs_status;

/** Type definition of mlan_ds_misc_chan_trpc_cfg for
 * MLAN_OID_MISC_GET_CHAN_TRPC_CFG */
typedef struct _mlan_ds_misc_chan_trpc_cfg {
	/** sub_band */
	t_u16 sub_band;
	/** length */
	t_u16 length;
	/** buf */
	t_u8 trpc_buf[2048];
} mlan_ds_misc_chan_trpc_cfg;

#define MFG_CMD_SET_TEST_MODE   1
#define MFG_CMD_UNSET_TEST_MODE 0
#define MFG_CMD_TX_ANT          0x1004
#define MFG_CMD_RX_ANT          0x1005
#define MFG_CMD_TX_CONT         0x1009
#define MFG_CMD_RF_CHAN         0x100A
#define MFG_CMD_CLR_RX_ERR      0x1010
#define MFG_CMD_TX_FRAME        0x1021
#define MFG_CMD_RFPWR           0x1033
#define MFG_CMD_RF_BAND_AG      0x1034
#define MFG_CMD_RF_CHANNELBW    0x1044
#define MFG_CMD_RADIO_MODE_CFG  0x1211
#define MFG_CMD_CONFIG_MAC_HE_TB_TX 0x110A
/** MFG CMD generic cfg */
struct MLAN_PACK_START mfg_cmd_generic_cfg {
	/** MFG command code */
	t_u32 mfg_cmd;
	/** Action */
	t_u16 action;
	/** Device ID */
	t_u16 device_id;
	/** MFG Error code */
	t_u32 error;
	/** value 1 */
	t_u32 data1;
	/** value 2 */
	t_u32 data2;
	/** value 3 */
	t_u32 data3;
} MLAN_PACK_END;

/** MFG CMD Tx Frame 2 */
struct MLAN_PACK_START mfg_cmd_tx_frame2 {
	/** MFG command code */
	t_u32 mfg_cmd;
	/** Action */
	t_u16 action;
	/** Device ID */
	t_u16 device_id;
	/** MFG Error code */
	t_u32 error;
	/** enable */
	t_u32 enable;
	/** data_rate */
	t_u32 data_rate;
	/** frame pattern */
	t_u32 frame_pattern;
	/** frame length */
	t_u32 frame_length;
	/** BSSID */
	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
	/** Adjust burst sifs */
	t_u16 adjust_burst_sifs;
	/** Burst sifs in us*/
	t_u32 burst_sifs_in_us;
	/** short preamble */
	t_u32 short_preamble;
	/** active sub channel */
	t_u32 act_sub_ch;
	/** short GI */
	t_u32 short_gi;
	/** Adv coding */
	t_u32 adv_coding;
	/** Tx beamforming */
	t_u32 tx_bf;
	/** HT Greenfield Mode*/
	t_u32 gf_mode;
	/** STBC */
	t_u32 stbc;
	/** power id */
	t_u32 rsvd[2];
    /** NumPkt */
	t_u32 NumPkt;
    /** MaxPE */
	t_u32 MaxPE;
    /** BeamChange */
	t_u32 BeamChange;
    /** Dcm */
	t_u32 Dcm;
    /** Doppler */
	t_u32 Doppler;
    /** MidP */
	t_u32 MidP;
    /** QNum */
	t_u32 QNum;

} MLAN_PACK_END;

/* MFG CMD Tx Continuous */
struct MLAN_PACK_START mfg_cmd_tx_cont {
	/** MFG command code */
	t_u32 mfg_cmd;
	/** Action */
	t_u16 action;
	/** Device ID */
	t_u16 device_id;
	/** MFG Error code */
	t_u32 error;
	/** enable Tx*/
	t_u32 enable_tx;
	/** Continuous Wave mode */
	t_u32 cw_mode;
	/** payload pattern */
	t_u32 payload_pattern;
	/** CS Mode */
	t_u32 cs_mode;
	/** active sub channel */
	t_u32 act_sub_ch;
	/** Tx rate */
	t_u32 tx_rate;
	/** power id */
	t_u32 rsvd;
} MLAN_PACK_END;

struct MLAN_PACK_START mfg_Cmd_HE_TBTx_t {
    /** MFG command code */
	t_u32 mfg_cmd;
    /** Action */
	t_u16 action;
    /** Device ID */
	t_u16 device_id;
    /** MFG Error code */
	t_u32 error;
    /** Enable Tx */
	t_u16 enable;
    /** Q num */
	t_u16 qnum;
    /** AID */
	t_u16 aid;
    /** AXQ Mu Timer */
	t_u16 axq_mu_timer;
    /** Tx Power */
	t_u16 tx_power;
} MLAN_PACK_END;

typedef struct _mlan_ds_misc_chnrgpwr_cfg {
	/** length */
	t_u16 length;
	/** chnrgpwr buf */
	t_u8 chnrgpwr_buf[2048];
} mlan_ds_misc_chnrgpwr_cfg;

/** dfs chan list for MLAN_OID_MISC_CFP_TABLE */
typedef struct _mlan_ds_misc_cfp_tbl {
	/** band */
	t_u8 band;
	/** num chan */
	t_u8 num_chan;
	/** cfp table */
	chan_freq_power_t cfp_tbl[];
} mlan_ds_misc_cfp_tbl;

/** Type definition of mlan_ds_misc_cfg for MLAN_IOCTL_MISC_CFG */
typedef struct _mlan_ds_misc_cfg {
	/** Sub-command */
	t_u32 sub_command;
	/** Miscellaneous configuration parameter */
	union {
		/** Generic IE for MLAN_OID_MISC_GEN_IE */
		mlan_ds_misc_gen_ie gen_ie;
		/** Region code for MLAN_OID_MISC_REGION */
		t_u32 region_code;
#ifdef SDIO
		/** SDIO MP-A Ctrl command for MLAN_OID_MISC_SDIO_MPA_CTRL */
		mlan_ds_misc_sdio_mpa_ctrl mpa_ctrl;
#endif
		/** Hostcmd for MLAN_OID_MISC_HOST_CMD */
		mlan_ds_misc_cmd hostcmd;
		/** System clock for MLAN_OID_MISC_SYS_CLOCK */
		mlan_ds_misc_sys_clock sys_clock;
		/** WWS set/get for MLAN_OID_MISC_WWS */
		t_u32 wws_cfg;
		/** Get associate response for MLAN_OID_MISC_ASSOC_RSP */
		mlan_ds_misc_assoc_rsp assoc_resp;
		/** Function init/shutdown for MLAN_OID_MISC_INIT_SHUTDOWN */
		t_u32 func_init_shutdown;
		/** Custom IE for MLAN_OID_MISC_CUSTOM_IE */
		mlan_ds_misc_custom_ie cust_ie;
		t_u16 tdls_idle_time;
		/** Config dynamic bandwidth*/
		t_u16 dyn_bw;
		/** TDLS configuration for MLAN_OID_MISC_TDLS_CONFIG */
		mlan_ds_misc_tdls_config tdls_config;
		/** TDLS operation for MLAN_OID_MISC_TDLS_OPER */
		mlan_ds_misc_tdls_oper tdls_oper;
		/** TDLS ies for  MLAN_OID_MISC_GET_TDLS_IES */
		mlan_ds_misc_tdls_ies tdls_ies;
		/**tdls cs off channel*/
		t_u8 tdls_cs_channel;
		/** Tx data pause for MLAN_OID_MISC_TX_DATAPAUSE */
		mlan_ds_misc_tx_datapause tx_datapause;
		/** IP address configuration */
		mlan_ds_misc_ipaddr_cfg ipaddr_cfg;
		/** IPv6 Router Advertisement offload configuration */
		mlan_ds_misc_ipv6_ra_offload ipv6_ra_offload;
		/** MAC control for MLAN_OID_MISC_MAC_CONTROL */
		t_u32 mac_ctrl;
		/** MEF configuration for MLAN_OID_MISC_MEF_CFG */
		mlan_ds_misc_mef_cfg mef_cfg;
		/** CFP code for MLAN_OID_MISC_CFP_CODE */
		mlan_ds_misc_cfp_code cfp_code;
		/** Country code for MLAN_OID_MISC_COUNTRY_CODE */
		mlan_ds_misc_country_code country_code;
		/** Thermal reading for MLAN_OID_MISC_THERMAL */
		t_u32 thermal;
		/** Mgmt subtype mask for MLAN_OID_MISC_RX_MGMT_IND */
		t_u32 mgmt_subtype_mask;
		/** subscribe event for MLAN_OID_MISC_SUBSCRIBE_EVENT */
		mlan_ds_subscribe_evt subscribe_event;
#ifdef DEBUG_LEVEL1
		/** Driver debug bit masks */
		t_u32 drvdbg;
#endif
		/** Hotspot config param set */
		t_u32 hotspot_cfg;
#ifdef STA_SUPPORT
		ExtCap_t ext_cap;
#endif
		mlan_ds_misc_otp_user_data otp_user_data;
#ifdef USB
		/** USB aggregation parameters for MLAN_OID_MISC_USB_AGGR_CTRL
		 */
		mlan_ds_misc_usb_aggr_ctrl usb_aggr_params;
#endif
		mlan_ds_misc_aggr_ctrl aggr_params;
		/** Tx control */
		t_u32 tx_control;
#if defined(STA_SUPPORT)
		mlan_ds_misc_pmfcfg pmfcfg;
#endif
#ifdef WIFI_DIRECT_SUPPORT
		mlan_ds_wifi_direct_config p2p_config;
#endif
		mlan_ds_gpio_tsf_latch gpio_tsf_latch_config;
		mlan_ds_tsf_info tsf_info;
		mlan_ds_coalesce_cfg coalesce_cfg;
		t_u8 low_pwr_mode;
		/** MEF-FLT-CONFIG for MLAN_OID_MISC_NV_FLT_CFG */
		mlan_ds_misc_mef_flt_cfg mef_flt_cfg;
		mlan_ds_misc_dfs_repeater dfs_repeater;
#ifdef RX_PACKET_COALESCE
		mlan_ds_misc_rx_packet_coalesce rx_coalesce;
#endif
		/** FW reload flag */
		t_u8 fw_reload;
		mlan_ds_sensor_temp sensor_temp;
		/** GTK rekey data */
		mlan_ds_misc_gtk_rekey_data gtk_rekey;
		mlan_ds_bw_chan_oper bw_chan_oper;
		mlan_ds_ind_rst_cfg ind_rst_cfg;
		t_u64 misc_tsf;
		mlan_ds_custom_reg_domain custom_reg_domain;
		mlan_ds_misc_keep_alive keep_alive;
		mlan_ds_misc_tx_rx_histogram tx_rx_histogram;
		mlan_ds_cw_mode_ctrl cwmode;
		/**  Tx/Rx per-packet control */
		t_u8 txrx_pkt_ctrl;
		mlan_ds_misc_robustcoex_params robustcoexparams;
#if defined(PCIE)
		mlan_ds_ssu_params ssu_params;
#endif
		/** boot sleep enable or disable */
		t_u16 boot_sleep;
		/** Mapping Policy */
		mlan_ds_misc_mapping_policy dmcs_policy;
		mlan_ds_misc_dmcs_status dmcs_status;
		mlan_ds_misc_rx_abort_cfg rx_abort_cfg;
		mlan_ds_misc_rx_abort_cfg_ext rx_abort_cfg_ext;
		mlan_ds_misc_tx_ampdu_prot_mode tx_ampdu_prot_mode;
		mlan_ds_misc_rate_adapt_cfg rate_adapt_cfg;
		mlan_ds_misc_cck_desense_cfg cck_desense_cfg;
		mlan_ds_misc_chan_trpc_cfg trpc_cfg;
		mlan_ds_misc_chnrgpwr_cfg rgchnpwr_cfg;

		mlan_ds_band_steer_cfg band_steer_cfg;
		mlan_ds_beacon_stuck_param_cfg beacon_stuck_cfg;
		struct mfg_cmd_generic_cfg mfg_generic_cfg;
		struct mfg_cmd_tx_cont mfg_tx_cont;
		struct mfg_cmd_tx_frame2 mfg_tx_frame2;
		struct mfg_Cmd_HE_TBTx_t mfg_he_power;
		mlan_ds_misc_arb_cfg arb_cfg;
		mlan_ds_misc_cfp_tbl cfp;
		t_u8 range_ext_mode;
		mlan_ds_misc_dot11mc_unassoc_ftm_cfg dot11mc_unassoc_ftm_cfg;
		mlan_ds_misc_tp_state tp_state;
		mlan_ds_hal_phy_cfg_params hal_phy_cfg_params;
#ifdef UAP_SUPPORT
		t_u8 wacp_mode;
#endif
	} param;
} mlan_ds_misc_cfg, *pmlan_ds_misc_cfg;

/** Hotspot status enable */
#define HOTSPOT_ENABLED MBIT(0)
/** Hotspot status disable */
#define HOTSPOT_DISABLED MFALSE
/** Keep Hotspot2.0 compatible in mwu and wpa_supplicant */
#define HOTSPOT_BY_SUPPLICANT MBIT(1)

/** Reason codes */
#define MLAN_REASON_UNSPECIFIED 1
#define MLAN_REASON_PREV_AUTH_NOT_VALID 2
#define MLAN_REASON_DEAUTH_LEAVING 3
#define MLAN_REASON_DISASSOC_DUE_TO_INACTIVITY 4
#define MLAN_REASON_DISASSOC_AP_BUSY 5
#define MLAN_REASON_CLASS2_FRAME_FROM_NOAUTH_STA 6
#define MLAN_REASON_CLASS3_FRAME_FROM_NOASSOC_STA 7
#define MLAN_REASON_DISASSOC_STA_HAS_LEFT 8
#define MLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9
#endif /* !_MLAN_IOCTL_H_ */
