summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/nxp/mxm_wifiex/wlan_src/mlinux/mlan_decl.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/nxp/mxm_wifiex/wlan_src/mlinux/mlan_decl.h')
-rw-r--r--drivers/net/wireless/nxp/mxm_wifiex/wlan_src/mlinux/mlan_decl.h1988
1 files changed, 1988 insertions, 0 deletions
diff --git a/drivers/net/wireless/nxp/mxm_wifiex/wlan_src/mlinux/mlan_decl.h b/drivers/net/wireless/nxp/mxm_wifiex/wlan_src/mlinux/mlan_decl.h
new file mode 100644
index 000000000000..7d0b75cc3c54
--- /dev/null
+++ b/drivers/net/wireless/nxp/mxm_wifiex/wlan_src/mlinux/mlan_decl.h
@@ -0,0 +1,1988 @@
+/** @file mlan_decl.h
+ *
+ * @brief This file declares the generic data structures and APIs.
+ *
+ *
+ * Copyright 2014-2020 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.
+ *
+ */
+
+#ifndef _MLAN_DECL_H_
+#define _MLAN_DECL_H_
+
+/** MLAN release version */
+#define MLAN_RELEASE_VERSION "215.p2"
+
+/** Re-define generic data types for MLAN/MOAL */
+/** Signed char (1-byte) */
+typedef signed char t_s8, *t_ps8;
+/** Unsigned char (1-byte) */
+typedef unsigned char t_u8, *t_pu8;
+/** Signed short (2-bytes) */
+typedef short t_s16, *t_ps16;
+/** Unsigned short (2-bytes) */
+typedef unsigned short t_u16, *t_pu16;
+/** Signed long (4-bytes) */
+typedef int t_s32, *t_ps32;
+/** Unsigned long (4-bytes) */
+typedef unsigned int t_u32, *t_pu32;
+/** Signed long long 8-bytes) */
+typedef long long t_s64, *t_ps64;
+/** Unsigned long long 8-bytes) */
+typedef unsigned long long t_u64, *t_pu64;
+/** Void pointer (4-bytes) */
+typedef void t_void, *t_pvoid;
+/** Size type */
+typedef t_u32 t_size;
+/** Boolean type */
+typedef t_u8 t_bool;
+
+#ifdef MLAN_64BIT
+/** Pointer type (64-bit) */
+typedef t_u64 t_ptr;
+/** Signed value (64-bit) */
+typedef t_s64 t_sval;
+#else
+/** Pointer type (32-bit) */
+typedef t_u32 t_ptr;
+/** Signed value (32-bit) */
+typedef t_s32 t_sval;
+#endif
+
+/** Constants below */
+
+#ifdef __GNUC__
+/** Structure packing begins */
+#define MLAN_PACK_START
+/** Structure packeing end */
+#define MLAN_PACK_END __attribute__((packed))
+#else /* !__GNUC__ */
+#ifdef PRAGMA_PACK
+/** Structure packing begins */
+#define MLAN_PACK_START
+/** Structure packeing end */
+#define MLAN_PACK_END
+#else /* !PRAGMA_PACK */
+/** Structure packing begins */
+#define MLAN_PACK_START __packed
+/** Structure packing end */
+#define MLAN_PACK_END
+#endif /* PRAGMA_PACK */
+#endif /* __GNUC__ */
+
+#ifndef INLINE
+#ifdef __GNUC__
+/** inline directive */
+#define INLINE inline
+#else
+/** inline directive */
+#define INLINE __inline
+#endif
+#endif
+
+/** MLAN TRUE */
+#define MTRUE (1)
+/** MLAN FALSE */
+#define MFALSE (0)
+
+#ifndef MACSTR
+/** MAC address security format */
+#define MACSTR "%02x:XX:XX:XX:%02x:%02x"
+#endif
+
+#ifndef MAC2STR
+/** MAC address security print arguments */
+#define MAC2STR(a) (a)[0], (a)[4], (a)[5]
+#endif
+
+#ifndef FULL_MACSTR
+#define FULL_MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
+#endif
+#ifndef FULL_MAC2STR
+#define FULL_MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
+#endif
+
+/** Macros for Data Alignment : size */
+#define ALIGN_SZ(p, a) (((p) + ((a)-1)) & ~((a)-1))
+
+/** Macros for Data Alignment : address */
+#define ALIGN_ADDR(p, a) \
+ ((((t_ptr)(p)) + (((t_ptr)(a)) - 1)) & ~(((t_ptr)(a)) - 1))
+
+/** Return the byte offset of a field in the given structure */
+#define MLAN_FIELD_OFFSET(type, field) ((t_u32)(t_ptr) & (((type *)0)->field))
+/** Return aligned offset */
+#define OFFSET_ALIGN_ADDR(p, a) (t_u32)(ALIGN_ADDR(p, a) - (t_ptr)p)
+
+#if defined(WIFI_DIRECT_SUPPORT)
+/** Maximum BSS numbers */
+#define MLAN_MAX_BSS_NUM (16)
+#else
+/** Maximum BSS numbers */
+#define MLAN_MAX_BSS_NUM (2)
+#endif
+
+/** NET IP alignment */
+#define MLAN_NET_IP_ALIGN 2
+
+/** DMA alignment */
+/* SDIO3.0 Inrevium Adapter require 32 bit DMA alignment */
+#define DMA_ALIGNMENT 32
+
+/** max size of TxPD */
+#define MAX_TXPD_SIZE 32
+
+/** Minimum data header length */
+#define MLAN_MIN_DATA_HEADER_LEN (DMA_ALIGNMENT + MAX_TXPD_SIZE)
+
+/** rx data header length */
+#define MLAN_RX_HEADER_LEN MLAN_MIN_DATA_HEADER_LEN
+
+/** This is current limit on Maximum Tx AMPDU allowed */
+#define MLAN_MAX_TX_BASTREAM_SUPPORTED 16
+#define MLAN_MAX_TX_BASTREAM_DEFAULT 2
+/** This is current limit on Maximum Rx AMPDU allowed */
+#define MLAN_MAX_RX_BASTREAM_SUPPORTED 16
+
+#ifdef STA_SUPPORT
+/** Default Win size attached during ADDBA request */
+#define MLAN_STA_AMPDU_DEF_TXWINSIZE 64
+/** Default Win size attached during ADDBA response */
+#define MLAN_STA_AMPDU_DEF_RXWINSIZE 64
+/** RX winsize for COEX */
+#define MLAN_STA_COEX_AMPDU_DEF_RXWINSIZE 16
+#endif /* STA_SUPPORT */
+#ifdef UAP_SUPPORT
+/** Default Win size attached during ADDBA request */
+#define MLAN_UAP_AMPDU_DEF_TXWINSIZE 64
+/** Default Win size attached during ADDBA response */
+#define MLAN_UAP_AMPDU_DEF_RXWINSIZE 64
+/** RX winsize for COEX */
+#define MLAN_UAP_COEX_AMPDU_DEF_RXWINSIZE 16
+#endif /* UAP_SUPPORT */
+
+#ifdef WIFI_DIRECT_SUPPORT
+/** WFD use the same window size for tx/rx */
+#define MLAN_WFD_AMPDU_DEF_TXRXWINSIZE 64
+/** RX winsize for COEX */
+#define MLAN_WFD_COEX_AMPDU_DEF_RXWINSIZE 16
+#endif
+
+/** Block ack timeout value */
+#define MLAN_DEFAULT_BLOCK_ACK_TIMEOUT 0xffff
+/** Maximum Tx Win size configured for ADDBA request [10 bits] */
+#define MLAN_AMPDU_MAX_TXWINSIZE 0x3ff
+/** Maximum Rx Win size configured for ADDBA request [10 bits] */
+#define MLAN_AMPDU_MAX_RXWINSIZE 0x3ff
+
+/** Rate index for HR/DSSS 0 */
+#define MLAN_RATE_INDEX_HRDSSS0 0
+/** Rate index for HR/DSSS 3 */
+#define MLAN_RATE_INDEX_HRDSSS3 3
+/** Rate index for OFDM 0 */
+#define MLAN_RATE_INDEX_OFDM0 4
+/** Rate index for OFDM 7 */
+#define MLAN_RATE_INDEX_OFDM7 11
+/** Rate index for MCS 0 */
+#define MLAN_RATE_INDEX_MCS0 0
+/** Rate index for MCS 2 */
+#define MLAN_RATE_INDEX_MCS2 2
+/** Rate index for MCS 4 */
+#define MLAN_RATE_INDEX_MCS4 4
+/** Rate index for MCS 7 */
+#define MLAN_RATE_INDEX_MCS7 7
+/** Rate index for MCS 9 */
+#define MLAN_RATE_INDEX_MCS9 9
+/** Rate index for MCS11 */
+#define MLAN_RATE_INDEX_MCS11 11
+/** Rate index for MCS15 */
+#define MLAN_RATE_INDEX_MCS15 15
+/** Rate index for MCS 32 */
+#define MLAN_RATE_INDEX_MCS32 32
+/** Rate index for MCS 127 */
+#define MLAN_RATE_INDEX_MCS127 127
+#define MLAN_RATE_NSS1 1
+#define MLAN_RATE_NSS2 2
+
+/** Rate bitmap for OFDM 0 */
+#define MLAN_RATE_BITMAP_OFDM0 16
+/** Rate bitmap for OFDM 7 */
+#define MLAN_RATE_BITMAP_OFDM7 23
+/** Rate bitmap for MCS 0 */
+#define MLAN_RATE_BITMAP_MCS0 32
+/** Rate bitmap for MCS 127 */
+#define MLAN_RATE_BITMAP_MCS127 159
+#define MLAN_RATE_BITMAP_NSS1_MCS0 160
+#define MLAN_RATE_BITMAP_NSS1_MCS9 169
+#define MLAN_RATE_BITMAP_NSS2_MCS0 176
+#define MLAN_RATE_BITMAP_NSS2_MCS9 185
+
+/** MU beamformer */
+#define DEFALUT_11AC_CAP_BEAMFORMING_RESET_MASK (MBIT(19))
+
+/** Size of rx data buffer 4096+256 */
+#define MLAN_RX_DATA_BUF_SIZE 4352
+
+/** Size of command buffer */
+/** because cal_data_size 2.4 k */
+#define MRVDRV_SIZE_OF_CMD_BUFFER (4 * 1024)
+/** Size of rx command buffer */
+#define MLAN_RX_CMD_BUF_SIZE MRVDRV_SIZE_OF_CMD_BUFFER
+/** Upload size */
+#define WLAN_UPLD_SIZE MRVDRV_SIZE_OF_CMD_BUFFER
+
+#if defined(PCIE)
+#define MLAN_SSU_MAX_PKT_SIZE (283 * 4)
+#define MLAN_SSU_HEADER_SIZE 256
+/**
+ * Size of DMA buffer to collect 10ms SSU data:
+ * 2500 spectral packets, plus header
+ */
+#define MLAN_SSU_BUF_SIZE_1MS (MLAN_SSU_MAX_PKT_SIZE * 250)
+#define MLAN_SSU_BUF_SIZE (MLAN_SSU_HEADER_SIZE + MLAN_SSU_BUF_SIZE_1MS * 10)
+#define MLAN_SSU_BUF_SIZE_HOST (MLAN_SSU_BUF_SIZE)
+#endif
+
+/** driver initial the fw reset */
+#define FW_RELOAD_SDIO_INBAND_RESET 1
+/** out band reset trigger reset, no interface re-emulation */
+#define FW_RELOAD_NO_EMULATION 2
+/** out band reset with interface re-emulation */
+#define FW_RELOAD_WITH_EMULATION 3
+#ifdef PCIE
+/** pcie card reset */
+#define FW_RELOAD_PCIE_RESET 4
+#endif
+
+#ifdef USB
+#define MLAN_USB_BLOCK_SIZE (512)
+#define MLAN_USB_AGGR_MODE_NUM (0)
+#define MLAN_USB_AGGR_MODE_LEN (1)
+#define MLAN_USB_AGGR_MODE_LEN_V2 (2)
+#define MLAN_USB_TX_AGGR_MAX_LEN (16000)
+#define MLAN_USB_TX_AGGR_MAX_NUM 10
+#define MLAN_USB_TX_AGGR_V2_ALIGN 4
+#define MLAN_USB_TX_AGGR_HEADER 4
+#define MLAN_USB_MAX_PKT_SIZE (MLAN_USB_BLOCK_SIZE * 4)
+
+#define MLAN_USB_RX_ALIGN_SIZE MLAN_USB_BLOCK_SIZE
+#define MLAN_USB_RX_MAX_AGGR_NUM (8)
+#define MLAN_USB_RX_DEAGGR_TIMEOUT_USEC (200)
+
+#define MLAN_USB_TX_AGGR_ALIGN (MLAN_USB_BLOCK_SIZE * 4)
+#define MLAN_USB_TX_MAX_AGGR_NUM (8)
+#define MLAN_USB_TX_MAX_AGGR_SIZE \
+ (MLAN_USB_BLOCK_SIZE * 4 * MLAN_USB_TX_MAX_AGGR_NUM)
+#define MLAN_USB_TX_MIN_AGGR_TIMEOUT (1)
+#define MLAN_USB_TX_MAX_AGGR_TIMEOUT (4)
+#define MLAN_USB_TX_AGGR_TIMEOUT_MSEC MLAN_USB_TX_MIN_AGGR_TIMEOUT
+#define MLAN_USB_TX_AGGR_TIMEOUT_DYN (0xFFFF)
+#endif /*USB*/
+
+/** MLAN MAC Address Length */
+#define MLAN_MAC_ADDR_LENGTH (6)
+/** MLAN 802.11 MAC Address */
+typedef t_u8 mlan_802_11_mac_addr[MLAN_MAC_ADDR_LENGTH];
+
+/** MLAN Maximum SSID Length */
+#define MLAN_MAX_SSID_LENGTH (32)
+
+/** RTS/FRAG related defines */
+/** Minimum RTS value */
+#define MLAN_RTS_MIN_VALUE (0)
+/** Maximum RTS value */
+#define MLAN_RTS_MAX_VALUE (2347)
+/** Minimum FRAG value */
+#define MLAN_FRAG_MIN_VALUE (256)
+/** Maximum FRAG value */
+#define MLAN_FRAG_MAX_VALUE (2346)
+
+/** Minimum tx retry count */
+#define MLAN_TX_RETRY_MIN (0)
+/** Maximum tx retry count */
+#define MLAN_TX_RETRY_MAX (14)
+
+/** max Wmm AC queues */
+#define MAX_AC_QUEUES 4
+
+#ifdef SDIO
+/** define SDIO block size for data Tx/Rx */
+/* We support up to 480-byte block size due to FW buffer limitation. */
+#define MLAN_SDIO_BLOCK_SIZE 256
+
+/** define SDIO block size for firmware download */
+#define MLAN_SDIO_BLOCK_SIZE_FW_DNLD MLAN_SDIO_BLOCK_SIZE
+
+/** define allocated buffer size */
+#define ALLOC_BUF_SIZE MLAN_RX_DATA_BUF_SIZE
+/** SDIO MP aggr pkt limit */
+#define SDIO_MP_AGGR_DEF_PKT_LIMIT (16)
+/** max SDIO MP aggr pkt limit */
+#define SDIO_MP_AGGR_DEF_PKT_LIMIT_MAX (16)
+
+/** SDIO IO Port mask */
+#define MLAN_SDIO_IO_PORT_MASK 0xfffff
+/** SDIO Block/Byte mode mask */
+#define MLAN_SDIO_BYTE_MODE_MASK 0x80000000
+#endif /* SDIO */
+
+/** SD Interface */
+#define INTF_SD MBIT(0)
+#define IS_SD(ct) (ct & (INTF_SD << 8))
+/** PCIE Interface */
+#define INTF_PCIE MBIT(1)
+#define IS_PCIE(ct) (ct & (INTF_PCIE << 8))
+/** USB Interface */
+#define INTF_USB MBIT(2)
+#define IS_USB(ct) (ct & (INTF_USB << 8))
+
+/** 8887 card type */
+#define CARD_TYPE_8887 0x01
+/** 8897 card type */
+#define CARD_TYPE_8897 0x02
+/** 8977 card type */
+#define CARD_TYPE_8977 0x03
+/** 8997 card type */
+#define CARD_TYPE_8997 0x04
+/** 8987 card type */
+#define CARD_TYPE_8987 0x05
+/** 9098 card type */
+#define CARD_TYPE_9098 0x06
+/** 9097 card type */
+#define CARD_TYPE_9097 0x07
+/** 8978 card type */
+#define CARD_TYPE_8978 0x08
+
+/** 9098 A0 reverion num */
+#define CHIP_9098_REV_A0 1
+#define CHIP_9098_REV_A1 2
+/** 9097 CHIP REV */
+#define CHIP_9097_REV_B0 1
+
+#define INTF_MASK 0xff
+#define CARD_TYPE_MASK 0xff
+
+#ifdef SDIO
+/** SD8887 card type */
+#define CARD_TYPE_SD8887 (CARD_TYPE_8887 | (INTF_SD << 8))
+/** SD8897 card type */
+#define CARD_TYPE_SD8897 (CARD_TYPE_8897 | (INTF_SD << 8))
+/** SD8977 card type */
+#define CARD_TYPE_SD8977 (CARD_TYPE_8977 | (INTF_SD << 8))
+/** SD8978 card type */
+#define CARD_TYPE_SD8978 (CARD_TYPE_8978 | (INTF_SD << 8))
+/** SD8997 card type */
+#define CARD_TYPE_SD8997 (CARD_TYPE_8997 | (INTF_SD << 8))
+/** SD8987 card type */
+#define CARD_TYPE_SD8987 (CARD_TYPE_8987 | (INTF_SD << 8))
+/** SD9097 card type */
+#define CARD_TYPE_SD9097 (CARD_TYPE_9097 | (INTF_SD << 8))
+/** SD9098 card type */
+#define CARD_TYPE_SD9098 (CARD_TYPE_9098 | (INTF_SD << 8))
+
+#define IS_SD8887(ct) (CARD_TYPE_SD8887 == (ct))
+#define IS_SD8897(ct) (CARD_TYPE_SD8897 == (ct))
+#define IS_SD8977(ct) (CARD_TYPE_SD8977 == (ct))
+#define IS_SD8978(ct) (CARD_TYPE_SD8978 == (ct))
+#define IS_SD8997(ct) (CARD_TYPE_SD8997 == (ct))
+#define IS_SD8987(ct) (CARD_TYPE_SD8987 == (ct))
+#define IS_SD9097(ct) (CARD_TYPE_SD9097 == (ct))
+#define IS_SD9098(ct) (CARD_TYPE_SD9098 == (ct))
+
+/** SD8887 Card */
+#define CARD_SD8887 "SD8887"
+/** SD8897 Card */
+#define CARD_SD8897 "SD8897"
+/** SD8977 Card */
+#define CARD_SD8977 "SD8977"
+/** SD8978 Card */
+#define CARD_SD8978 "SD8978"
+/** SD8997 Card */
+#define CARD_SD8997 "SD8997"
+/** SD8987 Card */
+#define CARD_SD8987 "SD8987"
+/** SD9097 Card */
+#define CARD_SD9097 "SD9097"
+/** SD9098 Card */
+#define CARD_SD9098 "SD9098"
+#endif
+
+#ifdef PCIE
+/** PCIE8897 card type */
+#define CARD_TYPE_PCIE8897 (CARD_TYPE_8897 | (INTF_PCIE << 8))
+/** PCIE8997 card type */
+#define CARD_TYPE_PCIE8997 (CARD_TYPE_8997 | (INTF_PCIE << 8))
+/** PCIE9097 card type */
+#define CARD_TYPE_PCIE9097 (CARD_TYPE_9097 | (INTF_PCIE << 8))
+/** PCIE9098 card type */
+#define CARD_TYPE_PCIE9098 (CARD_TYPE_9098 | (INTF_PCIE << 8))
+
+#define IS_PCIE8897(ct) (CARD_TYPE_PCIE8897 == (ct))
+#define IS_PCIE8997(ct) (CARD_TYPE_PCIE8997 == (ct))
+#define IS_PCIE9097(ct) (CARD_TYPE_PCIE9097 == (ct))
+#define IS_PCIE9098(ct) (CARD_TYPE_PCIE9098 == (ct))
+
+/** PCIE8897 Card */
+#define CARD_PCIE8897 "PCIE8897"
+/** PCIE8997 Card */
+#define CARD_PCIE8997 "PCIE8997"
+/** PCIE9097 Card */
+#define CARD_PCIE9097 "PCIE9097"
+/** PCIE9000S Card */
+#define CARD_PCIE9000S "PCIE9000S"
+/** PCIE9098 Card */
+#define CARD_PCIE9098 "PCIE9098"
+#endif
+
+#ifdef USB
+/** USB8897 card type */
+#define CARD_TYPE_USB8897 (CARD_TYPE_8897 | (INTF_USB << 8))
+/** USB8997 card type */
+#define CARD_TYPE_USB8997 (CARD_TYPE_8997 | (INTF_USB << 8))
+/** USB8978 card type */
+#define CARD_TYPE_USB8978 (CARD_TYPE_8978 | (INTF_USB << 8))
+/** USB9098 card type */
+#define CARD_TYPE_USB9098 (CARD_TYPE_9098 | (INTF_USB << 8))
+/** USB9097 card type */
+#define CARD_TYPE_USB9097 (CARD_TYPE_9097 | (INTF_USB << 8))
+
+#define IS_USB8897(ct) (CARD_TYPE_USB8897 == (ct))
+#define IS_USB8997(ct) (CARD_TYPE_USB8997 == (ct))
+#define IS_USB8978(ct) (CARD_TYPE_USB8978 == (ct))
+#define IS_USB9098(ct) (CARD_TYPE_USB9098 == (ct))
+#define IS_USB9097(ct) (CARD_TYPE_USB9097 == (ct))
+
+/** USB8897 Card */
+#define CARD_USB8897 "USB8897"
+/** USB8997 Card */
+#define CARD_USB8997 "USB8997"
+/** USB8978 Card */
+#define CARD_USB8978 "USB8978"
+/** USB9098 Card */
+#define CARD_USB9098 "USB9098"
+/** USB9097 Card */
+#define CARD_USB9097 "USB9097"
+#endif
+
+#define IS_CARD8887(ct) (CARD_TYPE_8887 == ((ct)&0xf))
+#define IS_CARD8897(ct) (CARD_TYPE_8897 == ((ct)&0xf))
+#define IS_CARD8977(ct) (CARD_TYPE_8977 == ((ct)&0xf))
+#define IS_CARD8997(ct) (CARD_TYPE_8997 == ((ct)&0xf))
+#define IS_CARD8987(ct) (CARD_TYPE_8987 == ((ct)&0xf))
+#define IS_CARD9098(ct) (CARD_TYPE_9098 == ((ct)&0xf))
+#define IS_CARD9097(ct) (CARD_TYPE_9097 == ((ct)&0xf))
+
+typedef struct _card_type_entry {
+ t_u16 card_type;
+ t_u16 func_id;
+ char *name;
+} card_type_entry;
+
+#if defined(SDIO) || defined(PCIE)
+/** Max retry number of IO write */
+#define MAX_WRITE_IOMEM_RETRY 2
+#endif /* SDIO || PCIE */
+
+#ifdef PCIE
+typedef enum {
+ PCIE_INT_MODE_LEGACY = 0,
+ PCIE_INT_MODE_MSI,
+ PCIE_INT_MODE_MSIX,
+ PCIE_INT_MODE_MAX,
+} PCIE_INT_MODE;
+#endif /* PCIE */
+
+/** IN parameter */
+#define IN
+/** OUT parameter */
+#define OUT
+
+/** BIT value */
+#define MBIT(x) (((t_u32)1) << (x))
+
+/** Buffer flag for requeued packet */
+#define MLAN_BUF_FLAG_REQUEUED_PKT MBIT(0)
+/** Buffer flag for transmit buf from moal */
+#define MLAN_BUF_FLAG_MOAL_TX_BUF MBIT(1)
+/** Buffer flag for malloc mlan_buffer */
+#define MLAN_BUF_FLAG_MALLOC_BUF MBIT(2)
+
+/** Buffer flag for bridge packet */
+#define MLAN_BUF_FLAG_BRIDGE_BUF MBIT(3)
+
+#ifdef USB
+/** Buffer flag for deaggregated rx packet */
+#define MLAN_BUF_FLAG_RX_DEAGGR MBIT(5)
+
+/** Buffer flag for sleep confirm resp packet */
+#define MLAN_BUF_FLAG_SLEEPCFM_RESP MBIT(6)
+
+/** Buffer flag for USB TX AGGR */
+#define MLAN_BUF_FLAG_USB_TX_AGGR MBIT(7)
+#endif
+
+/** Buffer flag for TCP_ACK */
+#define MLAN_BUF_FLAG_TCP_ACK MBIT(9)
+
+/** Buffer flag for TX_STATUS */
+#define MLAN_BUF_FLAG_TX_STATUS MBIT(10)
+
+/** Buffer flag for NULL data packet */
+#define MLAN_BUF_FLAG_NULL_PKT MBIT(12)
+/** Buffer flag for Diag pkt */
+#define MLAN_BUF_FLAG_DIAG_BUF MBIT(13)
+
+#define MLAN_BUF_FLAG_TX_CTRL MBIT(14)
+
+#ifdef DEBUG_LEVEL1
+/** Debug level bit definition */
+#define MMSG MBIT(0)
+#define MFATAL MBIT(1)
+#define MERROR MBIT(2)
+#define MDATA MBIT(3)
+#define MCMND MBIT(4)
+#define MEVENT MBIT(5)
+#define MINTR MBIT(6)
+#define MIOCTL MBIT(7)
+
+#define MREG_D MBIT(9)
+
+#define MMPA_D MBIT(15)
+#define MDAT_D MBIT(16)
+#define MCMD_D MBIT(17)
+#define MEVT_D MBIT(18)
+#define MFW_D MBIT(19)
+#define MIF_D MBIT(20)
+
+#define MENTRY MBIT(28)
+#define MWARN MBIT(29)
+#define MINFO MBIT(30)
+#define MHEX_DUMP MBIT(31)
+#endif /* DEBUG_LEVEL1 */
+
+/** Memory allocation type: DMA */
+#define MLAN_MEM_DMA MBIT(0)
+
+/** Default memory allocation flag */
+#define MLAN_MEM_DEF 0
+
+/** mlan_status */
+typedef enum _mlan_status {
+ MLAN_STATUS_FAILURE = 0xffffffff,
+ MLAN_STATUS_SUCCESS = 0,
+ MLAN_STATUS_PENDING,
+ MLAN_STATUS_RESOURCE,
+#ifdef USB
+ /* Status pending and no resource */
+ MLAN_STATUS_PRESOURCE,
+#endif
+ MLAN_STATUS_COMPLETE,
+ MLAN_STATUS_FILE_ERR,
+} mlan_status;
+
+/** mlan_error_code */
+typedef enum _mlan_error_code {
+ /** No error */
+ MLAN_ERROR_NO_ERROR = 0,
+ /** Firmware/device errors below (MSB=0) */
+ MLAN_ERROR_FW_NOT_READY = 0x00000001,
+ MLAN_ERROR_FW_BUSY = 0x00000002,
+ MLAN_ERROR_FW_CMDRESP = 0x00000003,
+ MLAN_ERROR_DATA_TX_FAIL = 0x00000004,
+ MLAN_ERROR_DATA_RX_FAIL = 0x00000005,
+ /** Driver errors below (MSB=1) */
+ MLAN_ERROR_PKT_SIZE_INVALID = 0x80000001,
+ MLAN_ERROR_PKT_TIMEOUT = 0x80000002,
+ MLAN_ERROR_PKT_INVALID = 0x80000003,
+ MLAN_ERROR_CMD_INVALID = 0x80000004,
+ MLAN_ERROR_CMD_TIMEOUT = 0x80000005,
+ MLAN_ERROR_CMD_DNLD_FAIL = 0x80000006,
+ MLAN_ERROR_CMD_CANCEL = 0x80000007,
+ MLAN_ERROR_CMD_RESP_FAIL = 0x80000008,
+ MLAN_ERROR_CMD_ASSOC_FAIL = 0x80000009,
+ MLAN_ERROR_CMD_SCAN_FAIL = 0x8000000A,
+ MLAN_ERROR_IOCTL_INVALID = 0x8000000B,
+ MLAN_ERROR_IOCTL_FAIL = 0x8000000C,
+ MLAN_ERROR_EVENT_UNKNOWN = 0x8000000D,
+ MLAN_ERROR_INVALID_PARAMETER = 0x8000000E,
+ MLAN_ERROR_NO_MEM = 0x8000000F,
+ /** More to add */
+} mlan_error_code;
+
+/** mlan_buf_type */
+typedef enum _mlan_buf_type {
+ MLAN_BUF_TYPE_CMD = 1,
+ MLAN_BUF_TYPE_DATA,
+ MLAN_BUF_TYPE_EVENT,
+ MLAN_BUF_TYPE_RAW_DATA,
+#ifdef SDIO
+ MLAN_BUF_TYPE_SPA_DATA,
+#endif
+} mlan_buf_type;
+
+#ifdef USB
+/** mlan_usb_ep */
+typedef enum _mlan_usb_ep {
+ MLAN_USB_EP_CTRL = 0,
+ MLAN_USB_EP_CMD_EVENT = 1,
+ MLAN_USB_EP_DATA = 2,
+ MLAN_USB_EP_DATA_CH2 = 3,
+ MLAN_USB_EP_CMD_EVENT_IF2 = 4,
+ MLAN_USB_EP_DATA_IF2 = 5,
+ MLAN_USB_EP_DATA_CH2_IF2 = 6,
+} mlan_usb_ep;
+
+/** Timeout in milliseconds for usb_bulk_msg function */
+#define MLAN_USB_BULK_MSG_TIMEOUT 100
+#endif /* USB */
+
+/** MLAN BSS type */
+typedef enum _mlan_bss_type {
+ MLAN_BSS_TYPE_STA = 0,
+ MLAN_BSS_TYPE_UAP = 1,
+#ifdef WIFI_DIRECT_SUPPORT
+ MLAN_BSS_TYPE_WIFIDIRECT = 2,
+#endif
+ MLAN_BSS_TYPE_ANY = 0xff,
+} mlan_bss_type;
+
+/** MLAN BSS role */
+typedef enum _mlan_bss_role {
+ MLAN_BSS_ROLE_STA = 0,
+ MLAN_BSS_ROLE_UAP = 1,
+ MLAN_BSS_ROLE_ANY = 0xff,
+} mlan_bss_role;
+
+/** BSS role mask */
+#define BSS_ROLE_MASK (MBIT(0) | MBIT(1))
+
+/** Get BSS role */
+#define GET_BSS_ROLE(priv) ((priv)->bss_role & BSS_ROLE_MASK)
+
+/** mlan_data_frame_type */
+typedef enum _mlan_data_frame_type {
+ MLAN_DATA_FRAME_TYPE_ETH_II = 0,
+ MLAN_DATA_FRAME_TYPE_802_11,
+} mlan_data_frame_type;
+
+/** mlan_event_id */
+typedef enum _mlan_event_id {
+ /* Event generated by firmware (MSB=0) */
+ MLAN_EVENT_ID_FW_UNKNOWN = 0x00000001,
+ MLAN_EVENT_ID_FW_ADHOC_LINK_SENSED = 0x00000002,
+ MLAN_EVENT_ID_FW_ADHOC_LINK_LOST = 0x00000003,
+ MLAN_EVENT_ID_FW_DISCONNECTED = 0x00000004,
+ MLAN_EVENT_ID_FW_MIC_ERR_UNI = 0x00000005,
+ MLAN_EVENT_ID_FW_MIC_ERR_MUL = 0x00000006,
+ MLAN_EVENT_ID_FW_BCN_RSSI_LOW = 0x00000007,
+ MLAN_EVENT_ID_FW_BCN_RSSI_HIGH = 0x00000008,
+ MLAN_EVENT_ID_FW_BCN_SNR_LOW = 0x00000009,
+ MLAN_EVENT_ID_FW_BCN_SNR_HIGH = 0x0000000A,
+ MLAN_EVENT_ID_FW_MAX_FAIL = 0x0000000B,
+ MLAN_EVENT_ID_FW_DATA_RSSI_LOW = 0x0000000C,
+ MLAN_EVENT_ID_FW_DATA_RSSI_HIGH = 0x0000000D,
+ MLAN_EVENT_ID_FW_DATA_SNR_LOW = 0x0000000E,
+ MLAN_EVENT_ID_FW_DATA_SNR_HIGH = 0x0000000F,
+ MLAN_EVENT_ID_FW_LINK_QUALITY = 0x00000010,
+ MLAN_EVENT_ID_FW_PORT_RELEASE = 0x00000011,
+ MLAN_EVENT_ID_FW_PRE_BCN_LOST = 0x00000012,
+ MLAN_EVENT_ID_FW_DEBUG_INFO = 0x00000013,
+ MLAN_EVENT_ID_FW_WMM_CONFIG_CHANGE = 0x0000001A,
+ MLAN_EVENT_ID_FW_HS_WAKEUP = 0x0000001B,
+ MLAN_EVENT_ID_FW_BG_SCAN = 0x0000001D,
+ MLAN_EVENT_ID_FW_BG_SCAN_STOPPED = 0x0000001E,
+ MLAN_EVENT_ID_FW_WEP_ICV_ERR = 0x00000020,
+ MLAN_EVENT_ID_FW_STOP_TX = 0x00000021,
+ MLAN_EVENT_ID_FW_START_TX = 0x00000022,
+ MLAN_EVENT_ID_FW_CHANNEL_SWITCH_ANN = 0x00000023,
+ MLAN_EVENT_ID_FW_RADAR_DETECTED = 0x00000024,
+ MLAN_EVENT_ID_FW_CHANNEL_REPORT_RDY = 0x00000025,
+ MLAN_EVENT_ID_FW_BW_CHANGED = 0x00000026,
+ MLAN_EVENT_ID_FW_REMAIN_ON_CHAN_EXPIRED = 0x0000002B,
+
+#ifdef UAP_SUPPORT
+ MLAN_EVENT_ID_UAP_FW_BSS_START = 0x0000002C,
+ MLAN_EVENT_ID_UAP_FW_BSS_ACTIVE = 0x0000002D,
+ MLAN_EVENT_ID_UAP_FW_BSS_IDLE = 0x0000002E,
+ MLAN_EVENT_ID_UAP_FW_MIC_COUNTERMEASURES = 0x0000002F,
+ MLAN_EVENT_ID_UAP_FW_STA_CONNECT = 0x00000030,
+ MLAN_EVENT_ID_UAP_FW_STA_DISCONNECT = 0x00000031,
+#endif
+
+ MLAN_EVENT_ID_FW_DUMP_INFO = 0x00000033,
+
+ MLAN_EVENT_ID_FW_TX_STATUS = 0x00000034,
+ MLAN_EVENT_ID_FW_CHAN_SWITCH_COMPLETE = 0x00000036,
+#if defined(PCIE)
+ MLAN_EVENT_ID_SSU_DUMP_FILE = 0x00000039,
+#endif /* SSU_SUPPORT */
+ /* Event generated by MLAN driver (MSB=1) */
+ MLAN_EVENT_ID_DRV_CONNECTED = 0x80000001,
+ MLAN_EVENT_ID_DRV_DEFER_HANDLING = 0x80000002,
+ MLAN_EVENT_ID_DRV_HS_ACTIVATED = 0x80000003,
+ MLAN_EVENT_ID_DRV_HS_DEACTIVATED = 0x80000004,
+ MLAN_EVENT_ID_DRV_MGMT_FRAME = 0x80000005,
+ MLAN_EVENT_ID_DRV_OBSS_SCAN_PARAM = 0x80000006,
+ MLAN_EVENT_ID_DRV_PASSTHRU = 0x80000007,
+ MLAN_EVENT_ID_DRV_SCAN_REPORT = 0x80000009,
+ MLAN_EVENT_ID_DRV_MEAS_REPORT = 0x8000000A,
+ MLAN_EVENT_ID_DRV_ASSOC_FAILURE_REPORT = 0x8000000B,
+ MLAN_EVENT_ID_DRV_REPORT_STRING = 0x8000000F,
+ MLAN_EVENT_ID_DRV_DBG_DUMP = 0x80000012,
+ MLAN_EVENT_ID_DRV_BGSCAN_RESULT = 0x80000013,
+ MLAN_EVENT_ID_DRV_FLUSH_RX_WORK = 0x80000015,
+ MLAN_EVENT_ID_DRV_DEFER_RX_WORK = 0x80000016,
+ MLAN_EVENT_ID_DRV_FT_RESPONSE = 0x80000018,
+ MLAN_EVENT_ID_DRV_FLUSH_MAIN_WORK = 0x80000019,
+#ifdef UAP_SUPPORT
+ MLAN_EVENT_ID_DRV_UAP_CHAN_INFO = 0x80000020,
+#endif
+ MLAN_EVENT_ID_DRV_ASSOC_FAILURE_LOGGER = 0x80000026,
+ MLAN_EVENT_ID_DRV_ASSOC_SUCC_LOGGER = 0x80000027,
+ MLAN_EVENT_ID_DRV_DISCONNECT_LOGGER = 0x80000028,
+ MLAN_EVENT_ID_DRV_WIFI_STATUS = 0x80000029,
+ MLAN_EVENT_ID_STORE_HOST_CMD_RESP = 0x80000030,
+} mlan_event_id;
+
+/** Data Structures */
+/** mlan_image data structure */
+typedef struct _mlan_fw_image {
+ /** Firmware image buffer pointer */
+ t_u8 *pfw_buf;
+ /** Firmware image length */
+ t_u32 fw_len;
+ /** Firmware reload flag */
+ t_u8 fw_reload;
+} mlan_fw_image, *pmlan_fw_image;
+
+/** MrvlIEtypesHeader_t */
+typedef MLAN_PACK_START struct _MrvlIEtypesHeader {
+ /** Header type */
+ t_u16 type;
+ /** Header length */
+ t_u16 len;
+} MLAN_PACK_END MrvlIEtypesHeader_t;
+
+/** MrvlExtIEtypesHeader_t */
+typedef MLAN_PACK_START struct _MrvlExtIEtypesHeader {
+ /** Header type */
+ t_u16 type;
+ /** Header length */
+ t_u16 len;
+ /** ext id */
+ t_u8 ext_id;
+} MLAN_PACK_END MrvlExtIEtypesHeader_t;
+
+/** MrvlIEtypes_Data_t */
+typedef MLAN_PACK_START struct _MrvlExtIEtypes_Data_t {
+ /** Header */
+ MrvlExtIEtypesHeader_t header;
+ /** Data */
+ t_u8 data[];
+} MLAN_PACK_END MrvlExtIEtypes_Data_t;
+
+/** MrvlIEtypes_Data_t */
+typedef MLAN_PACK_START struct _MrvlIEtypes_Data_t {
+ /** Header */
+ MrvlIEtypesHeader_t header;
+ /** Data */
+ t_u8 data[];
+} MLAN_PACK_END MrvlIEtypes_Data_t;
+
+#define OID_TYPE_CAL 0x2
+#define OID_TYPE_DPD 0xa
+#define UNKNOW_DPD_LENGTH 0xffffffff
+
+/** Custom data structure */
+typedef struct _mlan_init_param {
+ /** DPD data buffer pointer */
+ t_u8 *pdpd_data_buf;
+ /** DPD data length */
+ t_u32 dpd_data_len;
+ /** region txpowerlimit cfg data buffer pointer */
+ t_u8 *ptxpwr_data_buf;
+ /** region txpowerlimit cfg data length */
+ t_u32 txpwr_data_len;
+ /** Cal data buffer pointer */
+ t_u8 *pcal_data_buf;
+ /** Cal data length */
+ t_u32 cal_data_len;
+ /** Other custom data */
+} mlan_init_param, *pmlan_init_param;
+
+/** channel type */
+enum mlan_channel_type {
+ CHAN_NO_HT,
+ CHAN_HT20,
+ CHAN_HT40MINUS,
+ CHAN_HT40PLUS,
+ CHAN_VHT80
+};
+
+/** channel band */
+enum { BAND_2GHZ = 0,
+ BAND_5GHZ = 1,
+ BAND_4GHZ = 2,
+};
+
+/** channel offset */
+enum { SEC_CHAN_NONE = 0,
+ SEC_CHAN_ABOVE = 1,
+ SEC_CHAN_5MHZ = 2,
+ SEC_CHAN_BELOW = 3 };
+
+/** channel bandwidth */
+enum { CHAN_BW_20MHZ = 0,
+ CHAN_BW_10MHZ,
+ CHAN_BW_40MHZ,
+ CHAN_BW_80MHZ,
+};
+
+/** scan mode */
+enum { SCAN_MODE_MANUAL = 0,
+ SCAN_MODE_ACS,
+ SCAN_MODE_USER,
+};
+
+/** max cac time 10 minutes */
+#define MAX_CAC_DWELL_TIME 600000
+/** default cac time 60 seconds */
+#define DEF_CAC_DWELL_TIME 60000
+/** start freq for 5G */
+#define START_FREQ_11A_BAND 5000
+/** DFS state */
+typedef enum _dfs_state_t {
+ /** Channel can be used, CAC (Channel Availability Check) must be done
+ before using it */
+ DFS_USABLE = 0,
+ /** Channel is not available, radar was detected */
+ DFS_UNAVAILABLE = 1,
+ /** Channel is Available, CAC is done and is free of radar */
+ DFS_AVAILABLE = 2,
+} dfs_state_t;
+
+typedef enum _dfs_w53_cfg_t {
+ /** DFS W53 Default Fw Value */
+ DFS_W53_DEFAULT_FW = 0,
+ /** DFS W53 New W53 Rules/Standard */
+ DFS_W53_NEW = 1,
+ /** DFS W53 Old W53 Rules/Standard */
+ DFS_W53_OLD = 2
+} dfs_w53_cfg_t;
+
+/** Band_Config_t */
+typedef MLAN_PACK_START struct _Band_Config_t {
+#ifdef BIG_ENDIAN_SUPPORT
+ /** Channel Selection Mode - (00)=manual, (01)=ACS, (02)=user*/
+ t_u8 scanMode : 2;
+ /** Secondary Channel Offset - (00)=None, (01)=Above, (11)=Below */
+ t_u8 chan2Offset : 2;
+ /** Channel Width - (00)=20MHz, (10)=40MHz, (11)=80MHz */
+ t_u8 chanWidth : 2;
+ /** Band Info - (00)=2.4GHz, (01)=5GHz */
+ t_u8 chanBand : 2;
+#else
+ /** Band Info - (00)=2.4GHz, (01)=5GHz */
+ t_u8 chanBand : 2;
+ /** Channel Width - (00)=20MHz, (10)=40MHz, (11)=80MHz */
+ t_u8 chanWidth : 2;
+ /** Secondary Channel Offset - (00)=None, (01)=Above, (11)=Below */
+ t_u8 chan2Offset : 2;
+ /** Channel Selection Mode - (00)=manual, (01)=ACS, (02)=Adoption mode*/
+ t_u8 scanMode : 2;
+#endif
+} MLAN_PACK_END Band_Config_t;
+
+/** channel_band_t */
+typedef MLAN_PACK_START struct _chan_band_info {
+ /** Band Configuration */
+ Band_Config_t bandcfg;
+ /** channel */
+ t_u8 channel;
+ /** 11n flag */
+ t_u8 is_11n_enabled;
+ /** center channel */
+ t_u8 center_chan;
+ /** dfs channel flag */
+ t_u8 is_dfs_chan;
+} MLAN_PACK_END chan_band_info, *pchan_band_info;
+
+/** Channel usability flags */
+#define NXP_CHANNEL_NO_OFDM MBIT(9)
+#define NXP_CHANNEL_NO_CCK MBIT(8)
+#define NXP_CHANNEL_DISABLED MBIT(7)
+/* BIT 5/6 resevered for FW */
+#define NXP_CHANNEL_NOHT160 MBIT(4)
+#define NXP_CHANNEL_NOHT80 MBIT(3)
+#define NXP_CHANNEL_NOHT40 MBIT(2)
+#define NXP_CHANNEL_DFS MBIT(1)
+#define NXP_CHANNEL_PASSIVE MBIT(0)
+
+/** CFP dynamic (non-const) elements */
+typedef struct _cfp_dyn_t {
+ /** extra flags to specify channel usability
+ * bit 9 : if set, channel is non-OFDM
+ * bit 8 : if set, channel is non-CCK
+ * bit 7 : if set, channel is disabled
+ * bit 5/6 resevered for FW
+ * bit 4 : if set, 160MHz on channel is disabled
+ * bit 3 : if set, 80MHz on channel is disabled
+ * bit 2 : if set, 40MHz on channel is disabled
+ * bit 1 : if set, channel is DFS channel
+ * bit 0 : if set, channel is passive
+ */
+ t_u16 flags;
+ /** TRUE: Channel is blacklisted (do not use) */
+ t_bool blacklist;
+} cfp_dyn_t;
+
+/** Chan-Freq-TxPower mapping table*/
+typedef struct _chan_freq_power_t {
+ /** Channel Number */
+ t_u16 channel;
+ /** Frequency of this Channel */
+ t_u32 freq;
+ /** Max allowed Tx power level */
+ t_u16 max_tx_power;
+ /** TRUE:radar detect required for BAND A or passive scan for BAND B/G;
+ * FALSE:radar detect not required for BAND A or active scan for BAND
+ * B/G*/
+ t_bool passive_scan_or_radar_detect;
+ /** Elements associated to cfp that change at run-time */
+ cfp_dyn_t dynamic;
+} chan_freq_power_t;
+
+/** mlan_event data structure */
+typedef struct _mlan_event {
+ /** BSS index number for multiple BSS support */
+ t_u32 bss_index;
+ /** Event ID */
+ mlan_event_id event_id;
+ /** Event length */
+ t_u32 event_len;
+ /** Event buffer */
+ t_u8 event_buf[];
+} mlan_event, *pmlan_event;
+
+/** mlan_cmdresp_event data structure */
+typedef struct _mlan_cmdresp_event {
+ /** BSS index number for multiple BSS support */
+ t_u32 bss_index;
+ /** Event ID */
+ mlan_event_id event_id;
+ /** Event length */
+ t_u32 event_len;
+ /** resp buffer pointer */
+ t_u8 *resp;
+} mlan_cmdresp_event, *pmlan_cmdresp_event;
+
+/** csi event data structure */
+
+/** mlan_ioctl_req data structure */
+typedef struct _mlan_ioctl_req {
+ /** Pointer to previous mlan_ioctl_req */
+ struct _mlan_ioctl_req *pprev;
+ /** Pointer to next mlan_ioctl_req */
+ struct _mlan_ioctl_req *pnext;
+ /** Status code from firmware/driver */
+ t_u32 status_code;
+ /** BSS index number for multiple BSS support */
+ t_u32 bss_index;
+ /** Request id */
+ t_u32 req_id;
+ /** Action: set or get */
+ t_u32 action;
+ /** Pointer to buffer */
+ t_u8 *pbuf;
+ /** Length of buffer */
+ t_u32 buf_len;
+ /** Length of the data read/written in buffer */
+ t_u32 data_read_written;
+ /** Length of buffer needed */
+ t_u32 buf_len_needed;
+ /** Reserved for MOAL module */
+ t_ptr reserved_1;
+} mlan_ioctl_req, *pmlan_ioctl_req;
+
+/** txpower structure */
+typedef MLAN_PACK_START struct {
+#ifdef BIG_ENDIAN_SUPPORT
+ /** Host tx power ctrl:
+ 0x0: use fw setting for TX power
+ 0x1: value specified in bit[6] and bit[5:0] are valid */
+ t_u8 hostctl : 1;
+ /** Sign of the power specified in bit[5:0] */
+ t_u8 sign : 1;
+ /** Power to be used for transmission(in dBm) */
+ t_u8 abs_val : 6;
+#else
+ /** Power to be used for transmission(in dBm) */
+ t_u8 abs_val : 6;
+ /** Sign of the power specified in bit[5:0] */
+ t_u8 sign : 1;
+ /** Host tx power ctrl:
+ 0x0: use fw setting for TX power
+ 0x1: value specified in bit[6] and bit[5:0] are valid */
+ t_u8 hostctl : 1;
+#endif
+} MLAN_PACK_END tx_power_t;
+/* pkt_txctrl */
+typedef MLAN_PACK_START struct _pkt_txctrl {
+ /**Data rate in unit of 0.5Mbps */
+ t_u16 data_rate;
+ /*Channel number to transmit the frame */
+ t_u8 channel;
+ /** Bandwidth to transmit the frame*/
+ t_u8 bw;
+ /** Power to be used for transmission*/
+ union {
+ tx_power_t tp;
+ t_u8 val;
+ } tx_power;
+ /** Retry time of tx transmission*/
+ t_u8 retry_limit;
+} MLAN_PACK_END pkt_txctrl, *ppkt_txctrl;
+
+/** pkt_rxinfo */
+typedef MLAN_PACK_START struct _pkt_rxinfo {
+ /** Data rate of received paccket*/
+ t_u16 data_rate;
+ /** Channel on which packet was received*/
+ t_u8 channel;
+ /** Rx antenna*/
+ t_u8 antenna;
+ /** Rx Rssi*/
+ t_u8 rssi;
+} MLAN_PACK_END pkt_rxinfo, *ppkt_rxinfo;
+
+/** mlan_buffer data structure */
+typedef struct _mlan_buffer {
+ /** Pointer to previous mlan_buffer */
+ struct _mlan_buffer *pprev;
+ /** Pointer to next mlan_buffer */
+ struct _mlan_buffer *pnext;
+ /** Status code from firmware/driver */
+ t_u32 status_code;
+ /** Flags for this buffer */
+ t_u32 flags;
+ /** BSS index number for multiple BSS support */
+ t_u32 bss_index;
+ /** Buffer descriptor, e.g. skb in Linux */
+ t_void *pdesc;
+ /** Pointer to buffer */
+ t_u8 *pbuf;
+#ifdef PCIE
+ /** Physical address of the pbuf pointer */
+ t_u64 buf_pa;
+ t_u32 total_pcie_buf_len;
+#endif
+ /** Offset to data */
+ t_u32 data_offset;
+ /** Data length */
+ t_u32 data_len;
+ /** Buffer type: data, cmd, event etc. */
+ mlan_buf_type buf_type;
+
+ /** Fields below are valid for data packet only */
+ /** QoS priority */
+ t_u32 priority;
+ /** Time stamp when packet is received (seconds) */
+ t_u32 in_ts_sec;
+ /** Time stamp when packet is received (micro seconds) */
+ t_u32 in_ts_usec;
+ /** Time stamp when packet is processed (seconds) */
+ t_u32 out_ts_sec;
+ /** Time stamp when packet is processed (micro seconds) */
+ t_u32 out_ts_usec;
+ /** tx_seq_num */
+ t_u32 tx_seq_num;
+
+ /** Fields below are valid for MLAN module only */
+ /** Pointer to parent mlan_buffer */
+ struct _mlan_buffer *pparent;
+ /** Use count for this buffer */
+ t_u32 use_count;
+ union {
+ pkt_txctrl tx_info;
+ pkt_rxinfo rx_info;
+ } u;
+} mlan_buffer, *pmlan_buffer, **ppmlan_buffer;
+
+/** mlan_fw_info data structure */
+typedef struct _mlan_hw_info {
+ t_u32 fw_cap;
+} mlan_hw_info, *pmlan_hw_info;
+
+/** mlan_bss_attr data structure */
+typedef struct _mlan_bss_attr {
+ /** BSS type */
+ t_u32 bss_type;
+ /** Data frame type: Ethernet II, 802.11, etc. */
+ t_u32 frame_type;
+ /** The BSS is active (non-0) or not (0). */
+ t_u32 active;
+ /** BSS Priority */
+ t_u32 bss_priority;
+ /** BSS number */
+ t_u32 bss_num;
+ /** The BSS is virtual */
+ t_u32 bss_virtual;
+} mlan_bss_attr, *pmlan_bss_attr;
+
+/** bss tbl data structure */
+typedef struct _mlan_bss_tbl {
+ /** BSS Attributes */
+ mlan_bss_attr bss_attr[MLAN_MAX_BSS_NUM];
+} mlan_bss_tbl, *pmlan_bss_tbl;
+
+#ifdef PRAGMA_PACK
+#pragma pack(push, 1)
+#endif
+
+/** Type enumeration for the command result */
+typedef MLAN_PACK_START enum _mlan_cmd_result_e {
+ MLAN_CMD_RESULT_SUCCESS = 0,
+ MLAN_CMD_RESULT_FAILURE = 1,
+ MLAN_CMD_RESULT_TIMEOUT = 2,
+ MLAN_CMD_RESULT_INVALID_DATA = 3
+} MLAN_PACK_END mlan_cmd_result_e;
+
+/** Type enumeration of WMM AC_QUEUES */
+typedef MLAN_PACK_START enum _mlan_wmm_ac_e {
+ WMM_AC_BK,
+ WMM_AC_BE,
+ WMM_AC_VI,
+ WMM_AC_VO
+} MLAN_PACK_END mlan_wmm_ac_e;
+
+/** Type enumeration for the action field in the Queue Config command */
+typedef MLAN_PACK_START enum _mlan_wmm_queue_config_action_e {
+ MLAN_WMM_QUEUE_CONFIG_ACTION_GET = 0,
+ MLAN_WMM_QUEUE_CONFIG_ACTION_SET = 1,
+ MLAN_WMM_QUEUE_CONFIG_ACTION_DEFAULT = 2,
+ MLAN_WMM_QUEUE_CONFIG_ACTION_MAX
+} MLAN_PACK_END mlan_wmm_queue_config_action_e;
+
+/** Type enumeration for the action field in the queue stats command */
+typedef MLAN_PACK_START enum _mlan_wmm_queue_stats_action_e {
+ MLAN_WMM_STATS_ACTION_START = 0,
+ MLAN_WMM_STATS_ACTION_STOP = 1,
+ MLAN_WMM_STATS_ACTION_GET_CLR = 2,
+ MLAN_WMM_STATS_ACTION_SET_CFG = 3, /* Not currently used */
+ MLAN_WMM_STATS_ACTION_GET_CFG = 4, /* Not currently used */
+ MLAN_WMM_STATS_ACTION_MAX
+} MLAN_PACK_END mlan_wmm_queue_stats_action_e;
+
+/**
+ * @brief IOCTL structure for a Traffic stream status.
+ *
+ */
+typedef MLAN_PACK_START struct {
+ /** TSID: Range: 0->7 */
+ t_u8 tid;
+ /** TSID specified is valid */
+ t_u8 valid;
+ /** AC TSID is active on */
+ t_u8 access_category;
+ /** UP specified for the TSID */
+ t_u8 user_priority;
+ /** Power save mode for TSID: 0 (legacy), 1 (UAPSD) */
+ t_u8 psb;
+ /** Upstream(0), Downlink(1), Bidirectional(3) */
+ t_u8 flow_dir;
+ /** Medium time granted for the TSID */
+ t_u16 medium_time;
+} MLAN_PACK_END wlan_ioctl_wmm_ts_status_t,
+ /** Type definition of mlan_ds_wmm_ts_status for
+ MLAN_OID_WMM_CFG_TS_STATUS */
+ mlan_ds_wmm_ts_status, *pmlan_ds_wmm_ts_status;
+
+/** Max Ie length */
+#define MAX_IE_SIZE 256
+
+/** custom IE */
+typedef MLAN_PACK_START struct _custom_ie {
+ /** IE Index */
+ t_u16 ie_index;
+ /** Mgmt Subtype Mask */
+ t_u16 mgmt_subtype_mask;
+ /** IE Length */
+ t_u16 ie_length;
+ /** IE buffer */
+ t_u8 ie_buffer[MAX_IE_SIZE];
+} MLAN_PACK_END custom_ie;
+
+/** Max IE index to FW */
+#define MAX_MGMT_IE_INDEX_TO_FW 4
+/** Max IE index per BSS */
+#define MAX_MGMT_IE_INDEX 26
+
+/** custom IE info */
+typedef MLAN_PACK_START struct _custom_ie_info {
+ /** size of buffer */
+ t_u16 buf_size;
+ /** no of buffers of buf_size */
+ t_u16 buf_count;
+} MLAN_PACK_END custom_ie_info;
+
+/** TLV buffer : Max Mgmt IE */
+typedef MLAN_PACK_START struct _tlvbuf_max_mgmt_ie {
+ /** Type */
+ t_u16 type;
+ /** Length */
+ t_u16 len;
+ /** No of tuples */
+ t_u16 count;
+ /** custom IE info tuples */
+ custom_ie_info info[MAX_MGMT_IE_INDEX];
+} MLAN_PACK_END tlvbuf_max_mgmt_ie;
+
+/** TLV buffer : custom IE */
+typedef MLAN_PACK_START struct _tlvbuf_custom_ie {
+ /** Type */
+ t_u16 type;
+ /** Length */
+ t_u16 len;
+ /** IE data */
+ custom_ie ie_data_list[MAX_MGMT_IE_INDEX_TO_FW];
+ /** Max mgmt IE TLV */
+ tlvbuf_max_mgmt_ie max_mgmt_ie;
+} MLAN_PACK_END mlan_ds_misc_custom_ie;
+
+/** channel width */
+typedef enum wifi_channel_width {
+ WIFI_CHAN_WIDTH_20 = 0,
+ WIFI_CHAN_WIDTH_40 = 1,
+ WIFI_CHAN_WIDTH_80 = 2,
+ WIFI_CHAN_WIDTH_160 = 3,
+ WIFI_CHAN_WIDTH_80P80 = 4,
+ WIFI_CHAN_WIDTH_5 = 5,
+ WIFI_CHAN_WIDTH_10 = 6,
+ WIFI_CHAN_WIDTH_INVALID = -1
+} wifi_channel_width_t;
+
+/** channel information */
+typedef struct {
+ /** channel width (20, 40, 80, 80+80, 160) */
+ wifi_channel_width_t width;
+ /** primary 20 MHz channel */
+ int center_freq;
+ /** center frequency (MHz) first segment */
+ int center_freq0;
+ /** center frequency (MHz) second segment */
+ int center_freq1;
+} wifi_channel_info;
+
+/** wifi rate */
+typedef struct {
+ /** 0: OFDM, 1:CCK, 2:HT 3:VHT 4..7 reserved */
+ t_u32 preamble : 3;
+ /** 0:1x1, 1:2x2, 3:3x3, 4:4x4 */
+ t_u32 nss : 2;
+ /** 0:20MHz, 1:40Mhz, 2:80Mhz, 3:160Mhz */
+ t_u32 bw : 3;
+ /** OFDM/CCK rate code would be as per ieee std in the units of 0.5mbps
+ */
+ /** HT/VHT it would be mcs index */
+ t_u32 rateMcsIdx : 8;
+ /** reserved */
+ t_u32 reserved : 16;
+ /** units of 100 Kbps */
+ t_u32 bitrate;
+} wifi_rate;
+
+/** wifi Preamble type */
+typedef enum {
+ WIFI_PREAMBLE_LEGACY = 0x1,
+ WIFI_PREAMBLE_HT = 0x2,
+ WIFI_PREAMBLE_VHT = 0x4
+} wifi_preamble;
+
+/** timeval */
+typedef struct {
+ /** Time (seconds) */
+ t_u32 time_sec;
+ /** Time (micro seconds) */
+ t_u32 time_usec;
+} wifi_timeval;
+
+#define MAX_NUM_RATE 32
+#define MAX_RADIO 2
+#define MAX_NUM_CHAN 1
+#define VHT_NUM_SUPPORT_MCS 10
+#define MCS_NUM_SUPP 16
+
+#define BUF_MAXLEN 4096
+/** connection state */
+typedef enum {
+ MLAN_DISCONNECTED = 0,
+ MLAN_AUTHENTICATING = 1,
+ MLAN_ASSOCIATING = 2,
+ MLAN_ASSOCIATED = 3,
+ /** if done by firmware/driver */
+ MLAN_EAPOL_STARTED = 4,
+ /** if done by firmware/driver */
+ MLAN_EAPOL_COMPLETED = 5,
+} mlan_connection_state;
+/** roam state */
+typedef enum {
+ MLAN_ROAMING_IDLE = 0,
+ MLAN_ROAMING_ACTIVE = 1,
+} mlan_roam_state;
+/** interface mode */
+typedef enum {
+ MLAN_INTERFACE_STA = 0,
+ MLAN_INTERFACE_SOFTAP = 1,
+ MLAN_INTERFACE_IBSS = 2,
+ MLAN_INTERFACE_P2P_CLIENT = 3,
+ MLAN_INTERFACE_P2P_GO = 4,
+ MLAN_INTERFACE_NAN = 5,
+ MLAN_INTERFACE_MESH = 6,
+} mlan_interface_mode;
+
+/** set for QOS association */
+#define MLAN_CAPABILITY_QOS 0x00000001
+/** set for protected association (802.11 beacon frame control protected bit
+ * set) */
+#define MLAN_CAPABILITY_PROTECTED 0x00000002
+/** set if 802.11 Extended Capabilities element interworking bit is set */
+#define MLAN_CAPABILITY_INTERWORKING 0x00000004
+/** set for HS20 association */
+#define MLAN_CAPABILITY_HS20 0x00000008
+/** set is 802.11 Extended Capabilities element UTF-8 SSID bit is set */
+#define MLAN_CAPABILITY_SSID_UTF8 0x00000010
+/** set is 802.11 Country Element is present */
+#define MLAN_CAPABILITY_COUNTRY 0x00000020
+
+/** link layer status */
+typedef struct {
+ /** interface mode */
+ mlan_interface_mode mode;
+ /** interface mac address (self) */
+ t_u8 mac_addr[6];
+ /** connection state (valid for STA, CLI only) */
+ mlan_connection_state state;
+ /** roaming state */
+ mlan_roam_state roaming;
+ /** WIFI_CAPABILITY_XXX (self) */
+ t_u32 capabilities;
+ /** null terminated SSID */
+ t_u8 ssid[33];
+ /** bssid */
+ t_u8 bssid[6];
+ /** country string advertised by AP */
+ t_u8 ap_country_str[3];
+ /** country string for this association */
+ t_u8 country_str[3];
+} mlan_interface_link_layer_info, *mlan_interface_handle;
+
+/** channel statistics */
+typedef struct {
+ /** channel */
+ wifi_channel_info channel;
+ /** msecs the radio is awake (32 bits number accruing over time) */
+ t_u32 on_time;
+ /** msecs the CCA register is busy (32 bits number accruing over time)
+ */
+ t_u32 cca_busy_time;
+} wifi_channel_stat;
+
+#define timeval_to_msec(timeval) \
+ (t_u64)((t_u64)(timeval.time_sec) * 1000 + \
+ (t_u64)(timeval.time_usec) / 1000)
+#define timeval_to_usec(timeval) \
+ (t_u64)((t_u64)(timeval.time_sec) * 1000 * 1000 + \
+ (t_u64)(timeval.time_usec))
+#define is_zero_timeval(timeval) \
+ ((timeval.time_sec == 0) && (timeval.time_usec == 0))
+
+/** radio statistics */
+typedef struct {
+ /** wifi radio (if multiple radio supported) */
+ int radio;
+ /** msecs the radio is awake (32 bits number accruing over time) */
+ t_u32 on_time;
+ /** msecs the radio is transmitting (32 bits number accruing over time)
+ */
+ t_u32 tx_time;
+ /** TBD: num_tx_levels: number of radio transmit power levels */
+ t_u32 reserved0;
+ /** TBD: tx_time_per_levels: pointer to an array of radio transmit per
+ * power levels in msecs accured over time */
+ /* t_u32 *reserved1;*/
+ /** msecs the radio is in active receive (32 bits number accruing over
+ * time) */
+ t_u32 rx_time;
+ /** msecs the radio is awake due to all scan (32 bits number accruing
+ * over time) */
+ t_u32 on_time_scan;
+ /** msecs the radio is awake due to NAN (32 bits number accruing over
+ * time) */
+ t_u32 on_time_nbd;
+ /** msecs the radio is awake due to G?scan (32 bits number accruing over
+ * time) */
+ t_u32 on_time_gscan;
+ /** msecs the radio is awake due to roam?scan (32 bits number accruing
+ * over time) */
+ t_u32 on_time_roam_scan;
+ /** msecs the radio is awake due to PNO scan (32 bits number accruing
+ * over time) */
+ t_u32 on_time_pno_scan;
+ /** msecs the radio is awake due to HS2.0 scans and GAS exchange (32
+ * bits number accruing over time) */
+ t_u32 on_time_hs20;
+ /** number of channels */
+ t_u32 num_channels;
+ /** channel statistics */
+ wifi_channel_stat channels[MAX_NUM_CHAN];
+} wifi_radio_stat;
+
+/** per rate statistics */
+typedef struct {
+ /** rate information */
+ wifi_rate rate;
+ /** number of successfully transmitted data pkts (ACK rcvd) */
+ t_u32 tx_mpdu;
+ /** number of received data pkts */
+ t_u32 rx_mpdu;
+ /** number of data packet losses (no ACK) */
+ t_u32 mpdu_lost;
+ /** total number of data pkt retries */
+ t_u32 retries;
+ /** number of short data pkt retries */
+ t_u32 retries_short;
+ /** number of long data pkt retries */
+ t_u32 retries_long;
+} wifi_rate_stat;
+
+/** wifi peer type */
+typedef enum {
+ WIFI_PEER_STA,
+ WIFI_PEER_AP,
+ WIFI_PEER_P2P_GO,
+ WIFI_PEER_P2P_CLIENT,
+ WIFI_PEER_NAN,
+ WIFI_PEER_TDLS,
+ WIFI_PEER_INVALID,
+} wifi_peer_type;
+
+/** per peer statistics */
+typedef struct {
+ /** peer type (AP, TDLS, GO etc.) */
+ wifi_peer_type type;
+ /** mac address */
+ t_u8 peer_mac_address[6];
+ /** peer WIFI_CAPABILITY_XXX */
+ t_u32 capabilities;
+ /** number of rates */
+ t_u32 num_rate;
+ /** per rate statistics, number of entries = num_rate */
+ wifi_rate_stat rate_stats[];
+} wifi_peer_info;
+
+/** per access category statistics */
+typedef struct {
+ /** access category (VI, VO, BE, BK) */
+ mlan_wmm_ac_e ac;
+ /** number of successfully transmitted unicast data pkts (ACK rcvd) */
+ t_u32 tx_mpdu;
+ /** number of received unicast mpdus */
+ t_u32 rx_mpdu;
+ /** number of succesfully transmitted multicast data packets */
+ /** STA case: implies ACK received from AP for the unicast packet in
+ * which mcast pkt was sent */
+ t_u32 tx_mcast;
+ /** number of received multicast data packets */
+ t_u32 rx_mcast;
+ /** number of received unicast a-mpdus */
+ t_u32 rx_ampdu;
+ /** number of transmitted unicast a-mpdus */
+ t_u32 tx_ampdu;
+ /** number of data pkt losses (no ACK) */
+ t_u32 mpdu_lost;
+ /** total number of data pkt retries */
+ t_u32 retries;
+ /** number of short data pkt retries */
+ t_u32 retries_short;
+ /** number of long data pkt retries */
+ t_u32 retries_long;
+ /** data pkt min contention time (usecs) */
+ t_u32 contention_time_min;
+ /** data pkt max contention time (usecs) */
+ t_u32 contention_time_max;
+ /** data pkt avg contention time (usecs) */
+ t_u32 contention_time_avg;
+ /** num of data pkts used for contention statistics */
+ t_u32 contention_num_samples;
+} wifi_wmm_ac_stat;
+
+/** interface statistics */
+typedef struct {
+ /** wifi interface */
+ /* wifi_interface_handle iface;*/
+ /** current state of the interface */
+ mlan_interface_link_layer_info info;
+ /** access point beacon received count from connected AP */
+ t_u32 beacon_rx;
+ /** Average beacon offset encountered (beacon_TSF - TBTT)
+ * the average_tsf_offset field is used so as to calculate the
+ * typical beacon contention time on the channel as well may be
+ * used to debug beacon synchronization and related power consumption
+ * issue
+ */
+ t_u64 average_tsf_offset;
+ /** indicate that this AP typically leaks packets beyond the driver
+ * guard time */
+ t_u32 leaky_ap_detected;
+ /** average number of frame leaked by AP after frame with PM bit set was
+ * ACK'ed by AP */
+ t_u32 leaky_ap_avg_num_frames_leaked;
+ /** Guard time currently in force (when implementing IEEE power
+ * management based on frame control PM bit), How long driver waits
+ * before shutting down the radio and after receiving an ACK for a data
+ * frame with PM bit set)
+ */
+ t_u32 leaky_ap_guard_time;
+ /** access point mgmt frames received count from connected AP (including
+ * Beacon) */
+ t_u32 mgmt_rx;
+ /** action frames received count */
+ t_u32 mgmt_action_rx;
+ /** action frames transmit count */
+ t_u32 mgmt_action_tx;
+ /** access Point Beacon and Management frames RSSI (averaged) */
+ t_s32 rssi_mgmt;
+ /** access Point Data Frames RSSI (averaged) from connected AP */
+ t_s32 rssi_data;
+ /** access Point ACK RSSI (averaged) from connected AP */
+ t_s32 rssi_ack;
+ /** per ac data packet statistics */
+ wifi_wmm_ac_stat ac[MAX_AC_QUEUES];
+ /** number of peers */
+ t_u32 num_peers;
+ /** per peer statistics */
+ wifi_peer_info peer_info[];
+} wifi_iface_stat;
+
+/** link layer stat configuration params */
+typedef struct {
+ /** threshold to classify the pkts as short or long */
+ t_u32 mpdu_size_threshold;
+ /** wifi statistics bitmap */
+ t_u32 aggressive_statistics_gathering;
+} wifi_link_layer_params;
+
+/** wifi statistics bitmap */
+#define WIFI_STATS_RADIO 0x00000001 /** all radio statistics */
+#define WIFI_STATS_RADIO_CCA \
+ 0x00000002 /** cca_busy_time (within radio statistics) */
+#define WIFI_STATS_RADIO_CHANNELS \
+ 0x00000004 /** all channel statistics (within radio statistics) */
+#define WIFI_STATS_RADIO_SCAN \
+ 0x00000008 /** all scan statistics (within radio statistics) */
+#define WIFI_STATS_IFACE 0x00000010 /** all interface statistics */
+#define WIFI_STATS_IFACE_TXRATE \
+ 0x00000020 /** all tx rate statistics (within interface statistics) */
+#define WIFI_STATS_IFACE_AC \
+ 0x00000040 /** all ac statistics (within interface statistics) */
+#define WIFI_STATS_IFACE_CONTENTION \
+ 0x00000080 /** all contention (min, max, avg) statistics (within ac \
+ statisctics) */
+
+/** station stats */
+typedef struct _sta_stats {
+ t_u64 last_rx_in_msec;
+} sta_stats;
+
+#ifdef PRAGMA_PACK
+#pragma pack(pop)
+#endif
+
+/** mlan_callbacks data structure */
+typedef struct _mlan_callbacks {
+ /** moal_get_fw_data */
+ mlan_status (*moal_get_fw_data)(t_void *pmoal_handle, t_u32 offset,
+ t_u32 len, t_u8 *pbuf);
+ mlan_status (*moal_get_vdll_data)(t_void *pmoal_handle, t_u32 len,
+ t_u8 *pbuf);
+ /** moal_get_hw_spec_complete */
+ mlan_status (*moal_get_hw_spec_complete)(t_void *pmoal_handle,
+ mlan_status status,
+ pmlan_hw_info phw,
+ pmlan_bss_tbl ptbl);
+ /** moal_init_fw_complete */
+ mlan_status (*moal_init_fw_complete)(t_void *pmoal_handle,
+ mlan_status status);
+ /** moal_shutdown_fw_complete */
+ mlan_status (*moal_shutdown_fw_complete)(t_void *pmoal_handle,
+ mlan_status status);
+ /** moal_send_packet_complete */
+ mlan_status (*moal_send_packet_complete)(t_void *pmoal_handle,
+ pmlan_buffer pmbuf,
+ mlan_status status);
+ /** moal_recv_complete */
+ mlan_status (*moal_recv_complete)(t_void *pmoal_handle,
+ pmlan_buffer pmbuf, t_u32 port,
+ mlan_status status);
+ /** moal_recv_packet */
+ mlan_status (*moal_recv_packet)(t_void *pmoal_handle,
+ pmlan_buffer pmbuf);
+ /** moal_recv_event */
+ mlan_status (*moal_recv_event)(t_void *pmoal_handle,
+ pmlan_event pmevent);
+ /** moal_ioctl_complete */
+ mlan_status (*moal_ioctl_complete)(t_void *pmoal_handle,
+ pmlan_ioctl_req pioctl_req,
+ mlan_status status);
+
+ /** moal_alloc_mlan_buffer */
+ mlan_status (*moal_alloc_mlan_buffer)(t_void *pmoal_handle, t_u32 size,
+ ppmlan_buffer pmbuf);
+ /** moal_free_mlan_buffer */
+ mlan_status (*moal_free_mlan_buffer)(t_void *pmoal_handle,
+ pmlan_buffer pmbuf);
+
+#ifdef USB
+ /** moal_write_data_async */
+ mlan_status (*moal_write_data_async)(t_void *pmoal_handle,
+ pmlan_buffer pmbuf, t_u32 port);
+#endif /* USB */
+#if defined(SDIO) || defined(PCIE)
+ /** moal_write_reg */
+ mlan_status (*moal_write_reg)(t_void *pmoal_handle, t_u32 reg,
+ t_u32 data);
+ /** moal_read_reg */
+ mlan_status (*moal_read_reg)(t_void *pmoal_handle, t_u32 reg,
+ t_u32 *data);
+#endif /* SDIO || PCIE */
+ /** moal_write_data_sync */
+ mlan_status (*moal_write_data_sync)(t_void *pmoal_handle,
+ pmlan_buffer pmbuf, t_u32 port,
+ t_u32 timeout);
+ /** moal_read_data_sync */
+ mlan_status (*moal_read_data_sync)(t_void *pmoal_handle,
+ pmlan_buffer pmbuf, t_u32 port,
+ t_u32 timeout);
+ /** moal_malloc */
+ mlan_status (*moal_malloc)(t_void *pmoal_handle, t_u32 size, t_u32 flag,
+ t_u8 **ppbuf);
+ /** moal_mfree */
+ mlan_status (*moal_mfree)(t_void *pmoal_handle, t_u8 *pbuf);
+ /** moal_vmalloc */
+ mlan_status (*moal_vmalloc)(t_void *pmoal_handle, t_u32 size,
+ t_u8 **ppbuf);
+ /** moal_vfree */
+ mlan_status (*moal_vfree)(t_void *pmoal_handle, t_u8 *pbuf);
+#ifdef PCIE
+ /** moal_malloc_consistent */
+ mlan_status (*moal_malloc_consistent)(t_void *pmoal_handle, t_u32 size,
+ t_u8 **ppbuf, t_u64 *pbuf_pa);
+ /** moal_mfree_consistent */
+ mlan_status (*moal_mfree_consistent)(t_void *pmoal_handle, t_u32 size,
+ t_u8 *pbuf, t_u64 buf_pa);
+ /** moal_map_memory */
+ mlan_status (*moal_map_memory)(t_void *pmoal_handle, t_u8 *pbuf,
+ t_u64 *pbuf_pa, t_u32 size, t_u32 flag);
+ /** moal_unmap_memory */
+ mlan_status (*moal_unmap_memory)(t_void *pmoal_handle, t_u8 *pbuf,
+ t_u64 buf_pa, t_u32 size, t_u32 flag);
+#endif /* PCIE */
+ /** moal_memset */
+ t_void *(*moal_memset)(t_void *pmoal_handle, t_void *pmem, t_u8 byte,
+ t_u32 num);
+ /** moal_memcpy */
+ t_void *(*moal_memcpy)(t_void *pmoal_handle, t_void *pdest,
+ const t_void *psrc, t_u32 num);
+ /** moal_memcpy_ext */
+ t_void *(*moal_memcpy_ext)(t_void *pmoal_handle, t_void *pdest,
+ const t_void *psrc, t_u32 num,
+ t_u32 dest_size);
+ /** moal_memmove */
+ t_void *(*moal_memmove)(t_void *pmoal_handle, t_void *pdest,
+ const t_void *psrc, t_u32 num);
+ /** moal_memcmp */
+ t_s32 (*moal_memcmp)(t_void *pmoal_handle, const t_void *pmem1,
+ const t_void *pmem2, t_u32 num);
+ /** moal_udelay */
+ t_void (*moal_udelay)(t_void *pmoal_handle, t_u32 udelay);
+ /** moal_usleep_range */
+ t_void (*moal_usleep_range)(t_void *pmoal_handle, t_u32 min_delay,
+ t_u32 max_delay);
+ /** moal_get_boot_ktime */
+ mlan_status (*moal_get_boot_ktime)(t_void *pmoal_handle, t_u64 *pnsec);
+ /** moal_get_system_time */
+ mlan_status (*moal_get_system_time)(t_void *pmoal_handle, t_u32 *psec,
+ t_u32 *pusec);
+ /** moal_init_timer*/
+ mlan_status (*moal_init_timer)(t_void *pmoal_handle, t_void **pptimer,
+ IN t_void (*callback)(t_void *pcontext),
+ t_void *pcontext);
+ /** moal_free_timer */
+ mlan_status (*moal_free_timer)(t_void *pmoal_handle, t_void *ptimer);
+ /** moal_start_timer*/
+ mlan_status (*moal_start_timer)(t_void *pmoal_handle, t_void *ptimer,
+ t_u8 periodic, t_u32 msec);
+ /** moal_stop_timer*/
+ mlan_status (*moal_stop_timer)(t_void *pmoal_handle, t_void *ptimer);
+ /** moal_init_lock */
+ mlan_status (*moal_init_lock)(t_void *pmoal_handle, t_void **pplock);
+ /** moal_free_lock */
+ mlan_status (*moal_free_lock)(t_void *pmoal_handle, t_void *plock);
+ /** moal_spin_lock */
+ mlan_status (*moal_spin_lock)(t_void *pmoal_handle, t_void *plock);
+ /** moal_spin_unlock */
+ mlan_status (*moal_spin_unlock)(t_void *pmoal_handle, t_void *plock);
+ /** moal_print */
+ t_void (*moal_print)(t_void *pmoal_handle, t_u32 level, char *pformat,
+ IN...);
+ /** moal_print_netintf */
+ t_void (*moal_print_netintf)(t_void *pmoal_handle, t_u32 bss_index,
+ t_u32 level);
+ /** moal_assert */
+ t_void (*moal_assert)(t_void *pmoal_handle, t_u32 cond);
+
+ /** moal_hist_data_add */
+ t_void (*moal_hist_data_add)(t_void *pmoal_handle, t_u32 bss_index,
+ t_u16 rx_rate, t_s8 snr, t_s8 nflr,
+ t_u8 antenna);
+#if defined(DRV_EMBEDDED_AUTHENTICATOR) || defined(DRV_EMBEDDED_SUPPLICANT)
+ mlan_status (*moal_wait_hostcmd_complete)(t_void *pmoal_handle,
+ t_u32 bss_index);
+ mlan_status (*moal_notify_hostcmd_complete)(t_void *pmoal_handle,
+ t_u32 bss_index);
+#endif
+ void (*moal_tp_accounting)(t_void *pmoal_handle, t_void *buf,
+ t_u32 drop_point);
+ void (*moal_tp_accounting_rx_param)(t_void *pmoal_handle,
+ unsigned int type,
+ unsigned int rsvd1);
+
+} mlan_callbacks, *pmlan_callbacks;
+
+/** Parameter unchanged, use MLAN default setting */
+#define ROBUSTCOEX_GPIO_UNCHANGED 0
+/** Parameter enabled, override MLAN default setting */
+#define ROBUSTCOEX_GPIO_CFG 1
+
+#if defined(SDIO)
+/** Interrupt Mode SDIO */
+#define INT_MODE_SDIO 0
+/** Interrupt Mode GPIO */
+#define INT_MODE_GPIO 1
+/** New mode: GPIO-1 as a duplicated signal of interrupt as appear of SDIO_DAT1
+ */
+#define GPIO_INT_NEW_MODE 255
+#endif
+
+/** Parameter unchanged, use MLAN default setting */
+#define MLAN_INIT_PARA_UNCHANGED 0
+/** Parameter enabled, override MLAN default setting */
+#define MLAN_INIT_PARA_ENABLED 1
+/** Parameter disabled, override MLAN default setting */
+#define MLAN_INIT_PARA_DISABLED 2
+
+/** Control bit for stream 2X2 */
+#define FEATURE_CTRL_STREAM_2X2 MBIT(0)
+/** Control bit for DFS support */
+#define FEATURE_CTRL_DFS_SUPPORT MBIT(1)
+#ifdef USB
+/** Control bit for winner check & not wait for FW ready event */
+#define FEATURE_CTRL_USB_NEW_INIT MBIT(2)
+#endif
+/** Default feature control */
+#define FEATURE_CTRL_DEFAULT 0xffffffff
+/** Check if stream 2X2 enabled */
+#define IS_STREAM_2X2(x) ((x)&FEATURE_CTRL_STREAM_2X2)
+/** Check if DFS support enabled */
+#define IS_DFS_SUPPORT(x) ((x)&FEATURE_CTRL_DFS_SUPPORT)
+#ifdef USB
+/** Check if winner check & not wait for FW ready event */
+#define IS_USB_NEW_INIT(x) ((x)&FEATURE_CTRL_USB_NEW_INIT)
+#endif
+
+/*
+#define DRV_MODE_NAN MBIT(4)
+#define DRV_MODE_11P MBIT(5)
+#define DRV_MODE_MAC80211 MBIT(6)
+#define DRV_MODE_DFS MBIT(7)*/
+#define DRV_MODE_MASK (MBIT(4) | MBIT(5) | MBIT(6) | MBIT(7))
+
+/** mlan_device data structure */
+typedef struct _mlan_device {
+ /** MOAL Handle */
+ t_void *pmoal_handle;
+ /** BSS Attributes */
+ mlan_bss_attr bss_attr[MLAN_MAX_BSS_NUM];
+ /** Callbacks */
+ mlan_callbacks callbacks;
+#ifdef MFG_CMD_SUPPORT
+ /** MFG mode */
+ t_u32 mfg_mode;
+#endif
+#if defined(SDIO)
+ /** SDIO interrupt mode (0: INT_MODE_SDIO, 1: INT_MODE_GPIO) */
+ t_u32 int_mode;
+ /** GPIO interrupt pin number */
+ t_u32 gpio_pin;
+#endif
+#ifdef DEBUG_LEVEL1
+ /** Driver debug bit masks */
+ t_u32 drvdbg;
+#endif
+ /** allocate fixed buffer size for scan beacon buffer*/
+ t_u32 fixed_beacon_buffer;
+ /** SDIO MPA Tx */
+ t_u32 mpa_tx_cfg;
+ /** SDIO MPA Rx */
+ t_u32 mpa_rx_cfg;
+#ifdef SDIO
+ /** SDIO Single port rx aggr */
+ t_u8 sdio_rx_aggr_enable;
+ /* see blk_queue_max_segment_size */
+ t_u32 max_seg_size;
+ /* see blk_queue_max_segments */
+ t_u16 max_segs;
+#endif
+ /** Auto deep sleep */
+ t_u32 auto_ds;
+ /** IEEE PS mode */
+ t_u32 ps_mode;
+ /** Max Tx buffer size */
+ t_u32 max_tx_buf;
+#if defined(STA_SUPPORT)
+ /** 802.11d configuration */
+ t_u32 cfg_11d;
+#endif
+ /** Feature control bitmask */
+ t_u32 feature_control;
+ /** enable/disable rx work */
+ t_u8 rx_work;
+ /** dev cap mask */
+ t_u32 dev_cap_mask;
+ /** oob independent reset */
+ t_u32 indrstcfg;
+ /** dtim interval */
+ t_u16 multi_dtim;
+ /** IEEE ps inactivity timeout value */
+ t_u16 inact_tmo;
+ /** card type */
+ t_u16 card_type;
+ /** card rev */
+ t_u8 card_rev;
+ /** Host sleep wakeup interval */
+ t_u32 hs_wake_interval;
+ /** GPIO to indicate wakeup source */
+ t_u8 indication_gpio;
+ /** Dynamic MIMO-SISO switch for hscfg*/
+ t_u8 hs_mimo_switch;
+#ifdef USB
+ /** Tx CMD endpoint address */
+ t_u8 tx_cmd_ep;
+ /** Rx CMD/EVT endpoint address */
+ t_u8 rx_cmd_ep;
+
+ /** Rx data endpoint address */
+ t_u8 rx_data_ep;
+ /** Tx data endpoint address */
+ t_u8 tx_data_ep;
+#endif
+ /** fw region */
+ t_bool fw_region;
+ /** passive to active scan */
+ t_u8 passive_to_active_scan;
+ /** uap max supported station per chip */
+ t_u8 uap_max_sta;
+ /** drv mode */
+ t_u32 drv_mode;
+ /** dfs w53 cfg */
+ t_u8 dfs53cfg;
+} mlan_device, *pmlan_device;
+
+/** MLAN API function prototype */
+#define MLAN_API
+
+/** Registration */
+MLAN_API mlan_status mlan_register(pmlan_device pmdevice,
+ t_void **ppmlan_adapter);
+
+/** Un-registration */
+MLAN_API mlan_status mlan_unregister(t_void *pmlan_adapter);
+
+/** Firmware Downloading */
+MLAN_API mlan_status mlan_dnld_fw(t_void *pmlan_adapter, pmlan_fw_image pmfw);
+
+/** Custom data pass API */
+MLAN_API mlan_status mlan_set_init_param(t_void *pmlan_adapter,
+ pmlan_init_param pparam);
+
+/** Firmware Initialization */
+MLAN_API mlan_status mlan_init_fw(t_void *pmlan_adapter);
+
+/** Firmware Shutdown */
+MLAN_API mlan_status mlan_shutdown_fw(t_void *pmlan_adapter);
+
+/** Main Process */
+MLAN_API mlan_status mlan_main_process(t_void *pmlan_adapter);
+
+/** Rx process */
+mlan_status mlan_rx_process(t_void *pmlan_adapter, t_u8 *rx_pkts);
+
+/** Packet Transmission */
+MLAN_API mlan_status mlan_send_packet(t_void *pmlan_adapter,
+ pmlan_buffer pmbuf);
+
+#ifdef USB
+/** mlan_write_data_async_complete */
+MLAN_API mlan_status mlan_write_data_async_complete(t_void *pmlan_adapter,
+ pmlan_buffer pmbuf,
+ t_u32 port,
+ mlan_status status);
+
+/** Packet Reception */
+MLAN_API mlan_status mlan_recv(t_void *pmlan_adapter, pmlan_buffer pmbuf,
+ t_u32 port);
+#endif /* USB */
+
+/** Packet Reception complete callback */
+MLAN_API mlan_status mlan_recv_packet_complete(t_void *pmlan_adapter,
+ pmlan_buffer pmbuf,
+ mlan_status status);
+
+#if defined(SDIO) || defined(PCIE)
+/** interrupt handler */
+MLAN_API mlan_status mlan_interrupt(t_u16 msg_id, t_void *pmlan_adapter);
+
+#if defined(SYSKT)
+/** GPIO IRQ callback function */
+MLAN_API t_void mlan_hs_callback(t_void *pctx);
+#endif /* SYSKT_MULTI || SYSKT */
+#endif /* SDIO || PCIE */
+
+MLAN_API t_void mlan_pm_wakeup_card(t_void *pmlan_adapter, t_u8 keep_wakeup);
+
+MLAN_API t_u8 mlan_is_main_process_running(t_void *adapter);
+#ifdef PCIE
+MLAN_API t_void mlan_set_int_mode(t_void *adapter, t_u32 int_mode,
+ t_u8 func_num);
+#endif
+/** mlan ioctl */
+MLAN_API mlan_status mlan_ioctl(t_void *pmlan_adapter,
+ pmlan_ioctl_req pioctl_req);
+/** mlan select wmm queue */
+MLAN_API t_u8 mlan_select_wmm_queue(t_void *pmlan_adapter, t_u8 bss_num,
+ t_u8 tid);
+
+#endif /* !_MLAN_DECL_H_ */