blob: dffac81f1817c10605f901aa6ee0ee954a44b7c6 [file] [log] [blame]
/******************************************************************************
*
* This file is provided under a dual license. When you use or
* distribute this software, you may choose to be licensed under
* version 2 of the GNU General Public License ("GPLv2 License")
* or BSD License.
*
* GPLv2 License
*
* Copyright(C) 2016 MediaTek Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of version 2 of the GNU General Public License as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See http://www.gnu.org/licenses/gpl-2.0.html for more details.
*
* BSD LICENSE
*
* Copyright(C) 2016 MediaTek Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*****************************************************************************/
/*
** Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/wlan_lib.h#3
*/
/*! \file "wlan_lib.h"
* \brief The declaration of the functions of the wlanAdpater objects
*
* Detail description.
*/
#ifndef _WLAN_LIB_H
#define _WLAN_LIB_H
/*******************************************************************************
* C O M P I L E R F L A G S
********************************************************************************
*/
/*******************************************************************************
* E X T E R N A L R E F E R E N C E S
********************************************************************************
*/
#include "CFG_Wifi_File.h"
#include "rlm_domain.h"
#include "nic_init_cmd_event.h"
/*******************************************************************************
* C O N S T A N T S
********************************************************************************
*/
#define MAX_NUM_GROUP_ADDR 32 /* max number of group addresses */
#define AUTO_RATE_NUM 8
#define AR_RATE_TABLE_ENTRY_MAX 25
#define AR_RATE_ENTRY_INDEX_NULL 0x80
#define TX_CS_TCP_UDP_GEN BIT(1)
#define TX_CS_IP_GEN BIT(0)
#define CSUM_OFFLOAD_EN_TX_TCP BIT(0)
#define CSUM_OFFLOAD_EN_TX_UDP BIT(1)
#define CSUM_OFFLOAD_EN_TX_IP BIT(2)
#define CSUM_OFFLOAD_EN_RX_TCP BIT(3)
#define CSUM_OFFLOAD_EN_RX_UDP BIT(4)
#define CSUM_OFFLOAD_EN_RX_IPv4 BIT(5)
#define CSUM_OFFLOAD_EN_RX_IPv6 BIT(6)
#define CSUM_OFFLOAD_EN_TX_MASK BITS(0, 2)
#define CSUM_OFFLOAD_EN_ALL BITS(0, 6)
/* TCP, UDP, IP Checksum */
#define RX_CS_TYPE_UDP BIT(7)
#define RX_CS_TYPE_TCP BIT(6)
#define RX_CS_TYPE_IPv6 BIT(5)
#define RX_CS_TYPE_IPv4 BIT(4)
#define RX_CS_STATUS_UDP BIT(3)
#define RX_CS_STATUS_TCP BIT(2)
#define RX_CS_STATUS_IP BIT(0)
#define CSUM_NOT_SUPPORTED 0x0
#define TXPWR_USE_PDSLOPE 0
/* NVRAM error code definitions */
#define NVRAM_ERROR_VERSION_MISMATCH BIT(1)
#define NVRAM_ERROR_INVALID_TXPWR BIT(2)
#define NVRAM_ERROR_INVALID_DPD BIT(3)
#define NVRAM_ERROR_INVALID_MAC_ADDR BIT(4)
#if CFG_SUPPORT_PWR_LIMIT_COUNTRY
#define NVRAM_POWER_LIMIT_TABLE_INVALID BIT(5)
#endif
#define NUM_TC_RESOURCE_TO_STATISTICS 4
#define WLAN_CFG_ARGV_MAX 23
#define WLAN_CFG_ARGV_MAX_LONG 22 /* for WOW, 2+20 */
#define WLAN_CFG_ENTRY_NUM_MAX 200 /* 128 */
#define WLAN_CFG_KEY_LEN_MAX 32 /* include \x00 EOL */
#define WLAN_CFG_VALUE_LEN_MAX 32 /* include \x00 EOL */
#define WLAN_CFG_FLAG_SKIP_CB BIT(0)
#define WLAN_CFG_FILE_BUF_SIZE 2048
#define WLAN_CFG_REC_ENTRY_NUM_MAX 200
#define WLAN_CFG_REC_FLAG_BIT BIT(0)
#define WLAN_CFG_SET_CHIP_LEN_MAX 10
#define WLAN_CFG_SET_DEBUG_LEVEL_LEN_MAX 10
#define WLAN_CFG_SET_SW_CTRL_LEN_MAX 10
#define WLAN_OID_TIMEOUT_THRESHOLD 2000 /* OID timeout (in ms) */
#define WLAN_OID_TIMEOUT_THRESHOLD_MAX 10000 /* OID max timeout (in ms) */
#define WLAN_OID_TIMEOUT_THRESHOLD_IN_RESETTING 300 /* OID timeout during chip-resetting (in ms) */
#define WLAN_OID_NO_ACK_THRESHOLD 3
#define WLAN_THREAD_TASK_PRIORITY 0 /* If not setting the priority, 0 is the default */
#define WLAN_THREAD_TASK_NICE (-10) /* If not setting the nice, -10 is the default */
#define WLAN_TX_STATS_LOG_TIMEOUT 30000
#define WLAN_TX_STATS_LOG_DURATION 1500
/* Define for wifi path usage */
#define WLAN_FLAG_2G4_WF0 BIT(0) /*1: support, 0: NOT support */
#define WLAN_FLAG_5G_WF0 BIT(1) /*1: support, 0: NOT support */
#define WLAN_FLAG_2G4_WF1 BIT(2) /*1: support, 0: NOT support */
#define WLAN_FLAG_5G_WF1 BIT(3) /*1: support, 0: NOT support */
#define WLAN_FLAG_2G4_COANT_SUPPORT BIT(4) /*1: support, 0: NOT support */
#define WLAN_FLAG_2G4_COANT_PATH BIT(5) /*1: WF1, 0:WF0 */
#define WLAN_FLAG_5G_COANT_SUPPORT BIT(6) /*1: support, 0: NOT support */
#define WLAN_FLAG_5G_COANT_PATH BIT(7) /*1: WF1, 0:WF0 */
#if CFG_SUPPORT_EASY_DEBUG
#define MAX_CMD_ITEM_MAX 4 /* Max item per cmd. */
#define MAX_CMD_NAME_MAX_LENGTH 32 /* Max name string length */
#define MAX_CMD_VALUE_MAX_LENGTH 32 /* Max value string length */
#define MAX_CMD_TYPE_LENGTH 1
#define MAX_CMD_STRING_LENGTH 1
#define MAX_CMD_VALUE_LENGTH 1
#define MAX_CMD_RESERVE_LENGTH 1
#define CMD_FORMAT_V1_LENGTH \
(MAX_CMD_NAME_MAX_LENGTH + MAX_CMD_VALUE_MAX_LENGTH + \
MAX_CMD_TYPE_LENGTH + MAX_CMD_STRING_LENGTH + MAX_CMD_VALUE_LENGTH + MAX_CMD_RESERVE_LENGTH)
#define MAX_CMD_BUFFER_LENGTH (CMD_FORMAT_V1_LENGTH * MAX_CMD_ITEM_MAX)
#if 1
#define ED_STRING_SITE 0
#define ED_VALUE_SITE 1
#else
#define ED_ITEMTYPE_SITE 0
#define ED_STRING_SITE 1
#define ED_VALUE_SITE 2
#endif
#if CFG_AUTO_CHANNEL_SEL_SUPPORT
#define ACS_AP_RSSI_LEVEL_HIGH -50
#define ACS_AP_RSSI_LEVEL_LOW -80
#define ACS_DIRTINESS_LEVEL_HIGH 52
#define ACS_DIRTINESS_LEVEL_MID 40
#define ACS_DIRTINESS_LEVEL_LOW 32
#endif
#if CFG_WOW_SUPPORT
#define INVALID_WOW_WAKE_UP_REASON 255
#endif
#if CFG_SUPPORT_ADVANCE_CONTROL
#define KEEP_FULL_PWR_TRAFFIC_REPORT_BIT BIT(0)
#define KEEP_FULL_PWR_NOISE_HISTOGRAM_BIT BIT(1)
#endif
typedef enum _CMD_VER_T {
CMD_VER_1, /* Type[2]+String[32]+Value[32] */
CMD_VER_2 /* for furtur define. */
} CMD_VER_T, *P_CMD_VER_T;
#if 0
typedef enum _ENUM_AIS_REQUEST_TYPE_T {
AIS_REQUEST_SCAN,
AIS_REQUEST_RECONNECT,
AIS_REQUEST_ROAMING_SEARCH,
AIS_REQUEST_ROAMING_CONNECT,
AIS_REQUEST_REMAIN_ON_CHANNEL,
AIS_REQUEST_NUM
} ENUM_AIS_REQUEST_TYPE_T;
#endif
typedef enum _CMD_TYPE_T {
CMD_TYPE_QUERY,
CMD_TYPE_SET
} CMD_TYPE_T, *P_CMD_TYPE_T;
#define ITEM_TYPE_DEC 1
#define ITEM_TYPE_HEX 2
#define ITEM_TYPE_STR 3
typedef enum _CMD_DEFAULT_SETTING_VALUE {
CMD_PNO_ENABLE,
CMD_PNO_SCAN_PERIOD,
CMD_SCN_CHANNEL_PLAN,
CMD_SCN_DWELL_TIME,
CMD_SCN_STOP_SCAN,
CMD_MAX,
} CMD_DEFAULT_SETTING_VALUE;
typedef enum _CMD_DEFAULT_STR_SETTING_VALUE {
CMD_STR_TEST_STR,
CMD_STR_MAX,
} CMD_DEFAULT_STR_SETTING_VALUE;
typedef struct _CMD_FORMAT_V1_T {
UINT_8 itemType;
UINT_8 itemStringLength;
UINT_8 itemValueLength;
UINT_8 Reserved;
UINT_8 itemString[MAX_CMD_NAME_MAX_LENGTH];
UINT_8 itemValue[MAX_CMD_VALUE_MAX_LENGTH];
} CMD_FORMAT_V1_T, *P_CMD_FORMAT_V1_T;
typedef struct _CMD_HEADER_T {
CMD_VER_T cmdVersion;
CMD_TYPE_T cmdType;
UINT_8 itemNum;
UINT_16 cmdBufferLen;
UINT_8 buffer[MAX_CMD_BUFFER_LENGTH];
} CMD_HEADER_T, *P_CMD_HEADER_T;
typedef struct _CFG_DEFAULT_SETTING_TABLE_T {
UINT_32 itemNum;
const char *String;
UINT_8 itemType;
UINT_32 defaultValue;
UINT_32 minValue;
UINT_32 maxValue;
} CFG_DEFAULT_SETTING_TABLE_T, *P_CFG_DEFAULT_SETTING_TABLE_T;
typedef struct _CFG_DEFAULT_SETTING_STR_TABLE_T {
UINT_32 itemNum;
const char *String;
UINT_8 itemType;
const char *DefString;
UINT_16 minLen;
UINT_16 maxLen;
} CFG_DEFAULT_SETTING_STR_TABLE_T, *P_CFG_DEFAULT_SETTING_STR_TABLE_T;
typedef struct _CFG_QUERY_FORMAT_T {
UINT_32 Length;
UINT_32 Value;
UINT_32 Type;
PUINT_32 ptr;
} CFG_QUERY_FORMAT_T, *P_CFG_QUERY_FORMAT_T;
/*Globol Configure define */
typedef struct _CFG_SETTING_T {
UINT_8 PnoEnable;
UINT_32 PnoScanPeriod;
UINT_8 ScnChannelPlan;
UINT_16 ScnDwellTime;
UINT_8 ScnStopScan;
UINT_8 TestStr[80];
} CFG_SETTING_T, *P_CFG_SETTING_T;
#endif
/*******************************************************************************
* D A T A T Y P E S
********************************************************************************
*/
typedef WLAN_STATUS(*PFN_OID_HANDLER_FUNC) (IN P_ADAPTER_T prAdapter,
IN PVOID pvBuf, IN UINT_32 u4BufLen, OUT PUINT_32 pu4OutInfoLen);
typedef enum _ENUM_CSUM_TYPE_T {
CSUM_TYPE_IPV4,
CSUM_TYPE_IPV6,
CSUM_TYPE_TCP,
CSUM_TYPE_UDP,
CSUM_TYPE_NUM
} ENUM_CSUM_TYPE_T, *P_ENUM_CSUM_TYPE_T;
typedef enum _ENUM_CSUM_RESULT_T {
CSUM_RES_NONE,
CSUM_RES_SUCCESS,
CSUM_RES_FAILED,
CSUM_RES_NUM
} ENUM_CSUM_RESULT_T, *P_ENUM_CSUM_RESULT_T;
typedef enum _ENUM_PHY_MODE_T {
ENUM_PHY_2G4_CCK,
ENUM_PHY_2G4_OFDM_BPSK,
ENUM_PHY_2G4_OFDM_QPSK,
ENUM_PHY_2G4_OFDM_16QAM,
ENUM_PHY_2G4_OFDM_48M,
ENUM_PHY_2G4_OFDM_54M,
ENUM_PHY_2G4_HT20_BPSK,
ENUM_PHY_2G4_HT20_QPSK,
ENUM_PHY_2G4_HT20_16QAM,
ENUM_PHY_2G4_HT20_MCS5,
ENUM_PHY_2G4_HT20_MCS6,
ENUM_PHY_2G4_HT20_MCS7,
ENUM_PHY_2G4_HT40_BPSK,
ENUM_PHY_2G4_HT40_QPSK,
ENUM_PHY_2G4_HT40_16QAM,
ENUM_PHY_2G4_HT40_MCS5,
ENUM_PHY_2G4_HT40_MCS6,
ENUM_PHY_2G4_HT40_MCS7,
ENUM_PHY_5G_OFDM_BPSK,
ENUM_PHY_5G_OFDM_QPSK,
ENUM_PHY_5G_OFDM_16QAM,
ENUM_PHY_5G_OFDM_48M,
ENUM_PHY_5G_OFDM_54M,
ENUM_PHY_5G_HT20_BPSK,
ENUM_PHY_5G_HT20_QPSK,
ENUM_PHY_5G_HT20_16QAM,
ENUM_PHY_5G_HT20_MCS5,
ENUM_PHY_5G_HT20_MCS6,
ENUM_PHY_5G_HT20_MCS7,
ENUM_PHY_5G_HT40_BPSK,
ENUM_PHY_5G_HT40_QPSK,
ENUM_PHY_5G_HT40_16QAM,
ENUM_PHY_5G_HT40_MCS5,
ENUM_PHY_5G_HT40_MCS6,
ENUM_PHY_5G_HT40_MCS7,
ENUM_PHY_MODE_NUM
} ENUM_PHY_MODE_T, *P_ENUM_PHY_MODE_T;
typedef enum _ENUM_POWER_SAVE_POLL_MODE_T {
ENUM_POWER_SAVE_POLL_DISABLE,
ENUM_POWER_SAVE_POLL_LEGACY_NULL,
ENUM_POWER_SAVE_POLL_QOS_NULL,
ENUM_POWER_SAVE_POLL_NUM
} ENUM_POWER_SAVE_POLL_MODE_T, *P_ENUM_POWER_SAVE_POLL_MODE_T;
typedef enum _ENUM_AC_TYPE_T {
ENUM_AC_TYPE_AC0,
ENUM_AC_TYPE_AC1,
ENUM_AC_TYPE_AC2,
ENUM_AC_TYPE_AC3,
ENUM_AC_TYPE_AC4,
ENUM_AC_TYPE_AC5,
ENUM_AC_TYPE_AC6,
ENUM_AC_TYPE_BMC,
ENUM_AC_TYPE_NUM
} ENUM_AC_TYPE_T, *P_ENUM_AC_TYPE_T;
typedef enum _ENUM_ADV_AC_TYPE_T {
ENUM_ADV_AC_TYPE_RX_NSW,
ENUM_ADV_AC_TYPE_RX_PTA,
ENUM_ADV_AC_TYPE_RX_SP,
ENUM_ADV_AC_TYPE_TX_PTA,
ENUM_ADV_AC_TYPE_TX_RSP,
ENUM_ADV_AC_TYPE_NUM
} ENUM_ADV_AC_TYPE_T, *P_ENUM_ADV_AC_TYPE_T;
typedef enum _ENUM_REG_CH_MAP_T {
REG_CH_MAP_COUNTRY_CODE,
REG_CH_MAP_TBL_IDX,
REG_CH_MAP_CUSTOMIZED,
REG_CH_MAP_NUM
} ENUM_REG_CH_MAP_T, *P_ENUM_REG_CH_MAP_T;
typedef enum _ENUM_FEATURE_OPTION_T {
FEATURE_DISABLED,
FEATURE_ENABLED,
FEATURE_FORCE_ENABLED
} ENUM_FEATURE_OPTION_T, *P_ENUM_FEATURE_OPTION_T;
/* This enum is for later added feature options which use command reserved field as option switch */
typedef enum _ENUM_FEATURE_OPTION_IN_CMD_T {
FEATURE_OPT_CMD_AUTO,
FEATURE_OPT_CMD_DISABLED,
FEATURE_OPT_CMD_ENABLED,
FEATURE_OPT_CMD_FORCE_ENABLED
} ENUM_FEATURE_OPTION_IN_CMD_T, *P_ENUM_FEATURE_OPTION_IN_CMD_T;
#define DEBUG_MSG_SIZE_MAX 1200
enum {
DEBUG_MSG_ID_UNKNOWN = 0x00,
DEBUG_MSG_ID_PRINT = 0x01,
DEBUG_MSG_ID_FWLOG = 0x02,
DEBUG_MSG_ID_END
};
enum {
DEBUG_MSG_TYPE_UNKNOWN = 0x00,
DEBUG_MSG_TYPE_MEM8 = 0x01,
DEBUG_MSG_TYPE_MEM32 = 0x02,
DEBUG_MSG_TYPE_ASCII = 0x03,
DEBUG_MSG_TYPE_BINARY = 0x04,
DEBUG_MSG_TYPE_END
};
#define CHIP_CONFIG_RESP_SIZE 320
enum {
CHIP_CONFIG_TYPE_WO_RESPONSE = 0x00,
CHIP_CONFIG_TYPE_MEM8 = 0x01,
CHIP_CONFIG_TYPE_MEM32 = 0x02,
CHIP_CONFIG_TYPE_ASCII = 0x03,
CHIP_CONFIG_TYPE_BINARY = 0x04,
CHIP_CONFIG_TYPE_DRV_PASSTHROUGH = 0x05,
CHIP_CONFIG_TYPE_END
};
typedef struct _SET_TXPWR_CTRL_T {
INT_8 c2GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0 */
INT_8 c2GHotspotPwrOffset;
INT_8 c2GP2pPwrOffset;
INT_8 c2GBowPwrOffset;
INT_8 c5GLegacyStaPwrOffset; /* Unit: 0.5dBm, default: 0 */
INT_8 c5GHotspotPwrOffset;
INT_8 c5GP2pPwrOffset;
INT_8 c5GBowPwrOffset;
UINT_8 ucConcurrencePolicy; /* TX power policy when concurrence
* in the same channel
* 0: Highest power has priority
* 1: Lowest power has priority
*/
INT_8 acReserved1[3]; /* Must be zero */
/* Power limit by channel for all data rates */
INT_8 acTxPwrLimit2G[14]; /* Channel 1~14, Unit: 0.5dBm */
INT_8 acTxPwrLimit5G[4]; /* UNII 1~4 */
INT_8 acReserved2[2]; /* Must be zero */
} SET_TXPWR_CTRL_T, *P_SET_TXPWR_CTRL_T;
#if CFG_WOW_SUPPORT
typedef struct _WOW_WAKE_HIF_T {
UINT_8 ucWakeupHif; /* use in-band signal to wakeup system, ENUM_HIF_TYPE */
UINT_8 ucGpioPin; /* GPIO Pin */
UINT_8 ucTriggerLvl; /* refer to PF_WAKEUP_CMD_BIT0_OUTPUT_MODE_EN */
UINT_32 u4GpioInterval;/* non-zero means output reverse wakeup signal after delay time */
UINT_8 aucResv[5];
} WOW_WAKE_HIF_T, *P_WOW_WAKE_HIF_T;
typedef struct _WOW_PORT_T {
UINT_8 ucIPv4UdpPortCnt;
UINT_8 ucIPv4TcpPortCnt;
UINT_8 ucIPv6UdpPortCnt;
UINT_8 ucIPv6TcpPortCnt;
UINT_16 ausIPv4UdpPort[MAX_TCP_UDP_PORT];
UINT_16 ausIPv4TcpPort[MAX_TCP_UDP_PORT];
UINT_16 ausIPv6UdpPort[MAX_TCP_UDP_PORT];
UINT_16 ausIPv6TcpPort[MAX_TCP_UDP_PORT];
} WOW_PORT_T, *P_WOW_PORT_T;
typedef struct _WOW_CTRL_T {
UINT_8 fgWowEnable; /* 0: disable, 1: wow enable */
UINT_8 ucScenarioId; /* just a profile ID */
UINT_8 ucBlockCount;
UINT_8 aucReserved1[1];
WOW_WAKE_HIF_T astWakeHif[2];
WOW_PORT_T stWowPort;
UINT_8 ucReason;
} WOW_CTRL_T, *P_WOW_CTRL_T;
#endif
typedef enum _ENUM_NVRAM_MTK_FEATURE_T {
MTK_FEATURE_2G_256QAM_DISABLED = 0,
MTK_FEATURE_NUM
} ENUM_NVRAM_MTK_FEATURES_T, *P_ENUM_NVRAM_MTK_FEATURES_T;
/* For storing driver initialization value from glue layer */
typedef struct _REG_INFO_T {
UINT_32 u4SdBlockSize; /* SDIO block size */
UINT_32 u4SdBusWidth; /* SDIO bus width. 1 or 4 */
UINT_32 u4SdClockRate; /* SDIO clock rate. (in unit of HZ) */
UINT_32 u4StartFreq; /* Start Frequency for Ad-Hoc network : in unit of KHz */
UINT_32 u4AdhocMode; /* Default mode for Ad-Hoc network : ENUM_PARAM_AD_HOC_MODE_T */
UINT_32 u4RddStartFreq;
UINT_32 u4RddStopFreq;
UINT_32 u4RddTestMode;
UINT_32 u4RddShutFreq;
UINT_32 u4RddDfs;
INT_32 i4HighRssiThreshold;
INT_32 i4MediumRssiThreshold;
INT_32 i4LowRssiThreshold;
INT_32 au4TxPriorityTag[ENUM_AC_TYPE_NUM];
INT_32 au4RxPriorityTag[ENUM_AC_TYPE_NUM];
INT_32 au4AdvPriorityTag[ENUM_ADV_AC_TYPE_NUM];
UINT_32 u4FastPSPoll;
UINT_32 u4PTA; /* 0: disable, 1: enable */
UINT_32 u4TXLimit; /* 0: disable, 1: enable */
UINT_32 u4SilenceWindow; /* range: 100 - 625, unit: us */
UINT_32 u4TXLimitThreshold; /* range: 250 - 1250, unit: us */
UINT_32 u4PowerMode;
UINT_32 fgEnArpFilter;
UINT_32 u4PsCurrentMeasureEn;
UINT_32 u4UapsdAcBmp;
UINT_32 u4MaxSpLen;
UINT_32 fgDisOnlineScan; /* 0: enable online scan, non-zero: disable online scan */
UINT_32 fgDisBcnLostDetection; /* 0: enable online scan, non-zero: disable online scan */
UINT_32 u4FixedRate; /* 0: automatic, non-zero: fixed rate */
UINT_32 u4ArSysParam0;
UINT_32 u4ArSysParam1;
UINT_32 u4ArSysParam2;
UINT_32 u4ArSysParam3;
UINT_32 fgDisRoaming; /* 0:enable roaming 1:disable */
/* NVRAM - MP Data -START- */
#if 1
UINT_16 u2Part1OwnVersion;
UINT_16 u2Part1PeerVersion;
#endif
UINT_8 aucMacAddr[6];
UINT_16 au2CountryCode[4]; /* Country code (in ISO 3166-1 expression, ex: "US", "TW") */
TX_PWR_PARAM_T rTxPwr;
UINT_8 aucEFUSE[144];
UINT_8 ucTxPwrValid;
UINT_8 ucSupport5GBand;
UINT_8 fg2G4BandEdgePwrUsed;
INT_8 cBandEdgeMaxPwrCCK;
INT_8 cBandEdgeMaxPwrOFDM20;
INT_8 cBandEdgeMaxPwrOFDM40;
ENUM_REG_CH_MAP_T eRegChannelListMap;
UINT_8 ucRegChannelListIndex;
DOMAIN_INFO_ENTRY rDomainInfo;
RSSI_PATH_COMPASATION_T rRssiPathCompasation;
UINT_8 ucRssiPathCompasationUsed;
/* NVRAM - MP Data -END- */
/* NVRAM - Functional Data -START- */
UINT_8 uc2G4BwFixed20M;
UINT_8 uc5GBwFixed20M;
UINT_8 ucEnable5GBand;
UINT_8 ucGpsDesense;
UINT_8 ucRxDiversity;
/* NVRAM - Functional Data -END- */
P_NEW_EFUSE_MAPPING2NVRAM_T prOldEfuseMapping;
UINT_8 aucNvram[512];
P_WIFI_CFG_PARAM_STRUCT prNvramSettings;
} REG_INFO_T, *P_REG_INFO_T;
/* for divided firmware loading */
typedef struct _FWDL_SECTION_INFO_T {
#if 0
UINT_32 u4Offset;
UINT_32 u4Reserved;
UINT_32 u4Length;
UINT_32 u4DestAddr;
#endif
UINT_32 u4DestAddr;
UINT_8 ucChipInfo;
UINT_8 ucFeatureSet;
UINT_8 ucEcoCode;
UINT_8 aucReserved[9];
UINT_8 aucBuildDate[16];
UINT_32 u4Length;
} FWDL_SECTION_INFO_T, *P_FWDL_SECTION_INFO_T;
typedef struct _FIRMWARE_DIVIDED_DOWNLOAD_T {
#if 0
UINT_32 u4Signature;
UINT_32 u4CRC; /* CRC calculated without first 8 bytes included */
UINT_32 u4NumOfEntries;
UINT_32 u4Reserved;
FWDL_SECTION_INFO_T arSection[];
#endif
FWDL_SECTION_INFO_T arSection[2];
} FIRMWARE_DIVIDED_DOWNLOAD_T, *P_FIRMWARE_DIVIDED_DOWNLOAD_T;
#if (CFG_UMAC_GENERATION >= 0x20)
#define LEN_4_BYTE_CRC (4)
typedef struct _tailer_format_tag {
UINT_32 addr;
UINT_8 chip_info;
UINT_8 feature_set;
UINT_8 eco_code;
UINT_8 ram_version[10];
UINT_8 ram_built_date[15];
UINT_32 len;
} tailer_format_t;
typedef struct _fw_image_tailer_tag {
tailer_format_t ilm_info;
tailer_format_t dlm_info;
} fw_image_tailer_t;
#if CFG_SUPPORT_COMPRESSION_FW_OPTION
typedef struct _tailer_format_tag_2 {
UINT_32 crc;
UINT_32 addr;
UINT_32 block_size;
UINT_32 real_size;
UINT_8 chip_info;
UINT_8 feature_set;
UINT_8 eco_code;
UINT_8 ram_version[10];
UINT_8 ram_built_date[15];
UINT_32 len;
} tailer_format_t_2;
typedef struct _fw_image_tailer_tag_2 {
tailer_format_t_2 ilm_info;
tailer_format_t_2 dlm_info;
} fw_image_tailer_t_2;
typedef struct _fw_image_tailer_check {
UINT_8 chip_info;
UINT_8 feature_set;
UINT_8 eco_code;
UINT_8 ram_version[10];
UINT_8 ram_built_date[15];
UINT_32 len;
} fw_image_tailer_check;
#endif
typedef struct _PATCH_FORMAT_T {
UINT_8 aucBuildDate[16];
UINT_8 aucPlatform[4];
UINT_32 u4SwHwVersion;
UINT_32 u4PatchVersion;
UINT_16 u2CRC; /* CRC calculated for image only */
UINT_8 ucPatchImage[0];
} PATCH_FORMAT_T, *P_PATCH_FORMAT_T;
#if 0
#define DATA_MODE_BIT_SHFT_ENCRYPT_MODE (0) /* bit0 */
#define DATA_MODE_MASK_ENCRYPT_MODE (0x01 << DATA_MODE_BIT_SHFT_ENCRYPT_MODE) /* bit0 */
#define DATA_MODE_BIT_SHFT_KEY_INDEX (1) /* bit[2:1] */
#define DATA_MODE_MASK_KEY_INDEX (0x03 << DATA_MODE_BIT_SHFT_KEY_INDEX) /* bit[2:1] */
#define DATA_MODE_BIT_SHFT_RESET_IV (3) /* bit3 */
#define DATA_MODE_MASK_RESET_IV (0x1 << DATA_MODE_BIT_SHFT_RESET_IV)
#define DATA_MODE_BIT_SHFT_WORKING_PDA_OPTION (4) /* bit4 */
#define DATA_MODE_MASK_WORKING_PDA_OPTION (0x1 << DATA_MODE_BIT_SHFT_WORKING_PDA_OPTION)
#define DATA_MODE_BIT_SHFT_NEED_ACK (31) /* bit31 */
#define DATA_MODE_MASK_NEED_ACK (0x01 << DATA_MODE_BIT_SHFT_NEED_ACK) /* bit31 */
#endif
/* PDA - Patch Decryption Accelerator */
#define PDA_N9 0
#define PDA_CR4 1
#define CR4_FWDL_SECTION_NUM HIF_CR4_FWDL_SECTION_NUM
#define IMG_DL_STATUS_PORT_IDX HIF_IMG_DL_STATUS_PORT_IDX
typedef enum _ENUM_IMG_DL_IDX_T {
IMG_DL_IDX_N9_FW,
IMG_DL_IDX_CR4_FW,
IMG_DL_IDX_PATCH
} ENUM_IMG_DL_IDX_T, *P_ENUM_IMG_DL_IDX_T;
#endif
typedef struct _PARAM_MCR_RW_STRUCT_T {
UINT_32 u4McrOffset;
UINT_32 u4McrData;
} PARAM_MCR_RW_STRUCT_T, *P_PARAM_MCR_RW_STRUCT_T;
/* per access category statistics */
typedef struct _WIFI_WMM_AC_STAT_T {
UINT_32 u4TxMsdu;
UINT_32 u4RxMsdu;
UINT_32 u4TxDropMsdu;
UINT_32 u4TxFailMsdu;
UINT_32 u4TxRetryMsdu;
} WIFI_WMM_AC_STAT_T, *P_WIFI_WMM_AC_STAT_T;
typedef struct _TX_VECTOR_BBP_LATCH_T {
UINT_32 u4TxVector1;
UINT_32 u4TxVector2;
UINT_32 u4TxVector4;
} TX_VECTOR_BBP_LATCH_T, *P_TX_VECTOR_BBP_LATCH_T;
typedef struct _MIB_INFO_STAT_T {
UINT_32 u4RxMpduCnt;
UINT_32 u4FcsError;
UINT_32 u4RxFifoFull;
UINT_32 u4AmpduTxSfCnt;
UINT_32 u4AmpduTxAckSfCnt;
UINT_16 u2TxRange1AmpduCnt;
UINT_16 u2TxRange2AmpduCnt;
UINT_16 u2TxRange3AmpduCnt;
UINT_16 u2TxRange4AmpduCnt;
UINT_16 u2TxRange5AmpduCnt;
UINT_16 u2TxRange6AmpduCnt;
UINT_16 u2TxRange7AmpduCnt;
UINT_16 u2TxRange8AmpduCnt;
} MIB_INFO_STAT_T, *P_MIB_INFO_STAT_T;
typedef struct _PARAM_GET_STA_STATISTICS {
/* Per-STA statistic */
UINT_8 aucMacAddr[MAC_ADDR_LEN];
UINT_32 u4Flag;
UINT_8 ucReadClear;
UINT_8 ucLlsReadClear;
/* From driver */
UINT_32 u4TxTotalCount;
UINT_32 u4TxExceedThresholdCount;
UINT_32 u4TxMaxTime;
UINT_32 u4TxAverageProcessTime;
UINT_32 u4RxTotalCount;
UINT_32 au4TcResourceEmptyCount[NUM_TC_RESOURCE_TO_STATISTICS];
UINT_32 au4TcQueLen[NUM_TC_RESOURCE_TO_STATISTICS];
/* From FW */
UINT_8 ucPer; /* base: 128 */
UINT_8 ucRcpi;
UINT_32 u4PhyMode;
UINT_16 u2LinkSpeed; /* unit is 0.5 Mbits */
UINT_32 u4TxFailCount;
UINT_32 u4TxLifeTimeoutCount;
UINT_32 u4TxAverageAirTime;
UINT_32 u4TransmitCount; /* Transmit in the air (wtbl) */
UINT_32 u4TransmitFailCount; /* Transmit without ack/ba in the air (wtbl) */
WIFI_WMM_AC_STAT_T arLinkStatistics[AC_NUM]; /*link layer statistics */
/* Global queue management statistic */
UINT_32 au4TcAverageQueLen[NUM_TC_RESOURCE_TO_STATISTICS];
UINT_32 au4TcCurrentQueLen[NUM_TC_RESOURCE_TO_STATISTICS];
UINT_8 ucTemperature;
UINT_8 ucSkipAr;
UINT_8 ucArTableIdx;
UINT_8 ucRateEntryIdx;
UINT_8 ucRateEntryIdxPrev;
UINT_8 ucTxSgiDetectPassCnt;
UINT_8 ucAvePer;
UINT_8 aucArRatePer[AR_RATE_TABLE_ENTRY_MAX];
UINT_8 aucRateEntryIndex[AUTO_RATE_NUM];
UINT_8 ucArStateCurr;
UINT_8 ucArStatePrev;
UINT_8 ucArActionType;
UINT_8 ucHighestRateCnt;
UINT_8 ucLowestRateCnt;
UINT_16 u2TrainUp;
UINT_16 u2TrainDown;
UINT_32 u4Rate1TxCnt;
UINT_32 u4Rate1FailCnt;
TX_VECTOR_BBP_LATCH_T rTxVector[ENUM_BAND_NUM];
MIB_INFO_STAT_T rMibInfo[ENUM_BAND_NUM];
UINT_8 ucResetCounter;
BOOLEAN fgIsForceTxStream;
BOOLEAN fgIsForceSeOff;
/* Reserved fields */
UINT_8 au4Reserved[20];
} PARAM_GET_STA_STA_STATISTICS, *P_PARAM_GET_STA_STATISTICS;
typedef struct _PARAM_GET_BSS_STATISTICS {
/* Per-STA statistic */
UINT_8 aucMacAddr[MAC_ADDR_LEN];
UINT_32 u4Flag;
UINT_8 ucReadClear;
UINT_8 ucLlsReadClear;
UINT_8 ucBssIndex;
/* From driver */
UINT_32 u4TxTotalCount;
UINT_32 u4TxExceedThresholdCount;
UINT_32 u4TxMaxTime;
UINT_32 u4TxAverageProcessTime;
UINT_32 u4RxTotalCount;
UINT_32 au4TcResourceEmptyCount[NUM_TC_RESOURCE_TO_STATISTICS];
UINT_32 au4TcQueLen[NUM_TC_RESOURCE_TO_STATISTICS];
/* From FW */
UINT_8 ucPer; /* base: 128 */
UINT_8 ucRcpi;
UINT_32 u4PhyMode;
UINT_16 u2LinkSpeed; /* unit is 0.5 Mbits */
UINT_32 u4TxFailCount;
UINT_32 u4TxLifeTimeoutCount;
UINT_32 u4TxAverageAirTime;
UINT_32 u4TransmitCount; /* Transmit in the air (wtbl) */
UINT_32 u4TransmitFailCount; /* Transmit without ack/ba in the air (wtbl) */
WIFI_WMM_AC_STAT_T arLinkStatistics[AC_NUM]; /*link layer statistics */
/* Global queue management statistic */
UINT_32 au4TcAverageQueLen[NUM_TC_RESOURCE_TO_STATISTICS];
UINT_32 au4TcCurrentQueLen[NUM_TC_RESOURCE_TO_STATISTICS];
/* Reserved fields */
UINT_8 au4Reserved[32]; /* insufficient for LLS?? */
} PARAM_GET_BSS_STATISTICS, *P_PARAM_GET_BSS_STATISTICS;
typedef struct _PARAM_GET_DRV_STATISTICS {
INT_32 i4TxPendingFrameNum;
INT_32 i4TxPendingSecurityFrameNum;
INT_32 i4TxPendingCmdNum;
INT_32 i4PendingFwdFrameCount; /* sync i4PendingFwdFrameCount in _TX_CTRL_T */
UINT_32 u4MsduNumElem; /* sync pad->rTxCtrl.rFreeMsduInfoList.u4NumElem */
UINT_32 u4TxMgmtTxringQueueNumElem; /* sync pad->rTxCtrl.rTxMgmtTxingQueue.u4NumElem */
UINT_32 u4RxFreeSwRfbMsduNumElem; /* sync pad->prRxCtrl.rFreeSwRfbList.u4NumElem */
UINT_32 u4RxReceivedRfbNumElem; /* sync pad->prRxCtrl.rReceivedRfbList.u4NumElem */
UINT_32 u4RxIndicatedNumElem; /* sync pad->prRxCtrl.rIndicatedRfbList.u4NumElem */
} PARAM_GET_DRV_STATISTICS, *P_PARAM_GET_DRV_STATISTICS;
typedef struct _NET_INTERFACE_INFO_T {
UINT_8 ucBssIndex;
PVOID pvNetInterface;
} NET_INTERFACE_INFO_T, *P_NET_INTERFACE_INFO_T;
typedef enum _ENUM_TX_RESULT_CODE_T {
TX_RESULT_SUCCESS = 0,
TX_RESULT_LIFE_TIMEOUT,
TX_RESULT_RTS_ERROR,
TX_RESULT_MPDU_ERROR,
TX_RESULT_AGING_TIMEOUT,
TX_RESULT_FLUSHED,
TX_RESULT_BIP_ERROR,
TX_RESULT_UNSPECIFIED_ERROR,
TX_RESULT_DROPPED_IN_DRIVER = 32,
TX_RESULT_DROPPED_IN_FW,
TX_RESULT_QUEUE_CLEARANCE,
TX_RESULT_NUM
} ENUM_TX_RESULT_CODE_T, *P_ENUM_TX_RESULT_CODE_T;
struct _WLAN_CFG_ENTRY_T {
UINT_8 aucKey[WLAN_CFG_KEY_LEN_MAX];
UINT_8 aucValue[WLAN_CFG_VALUE_LEN_MAX];
WLAN_CFG_SET_CB pfSetCb;
PVOID pPrivate;
UINT_32 u4Flags;
};
struct _WLAN_CFG_T {
UINT_32 u4WlanCfgEntryNumMax;
UINT_32 u4WlanCfgKeyLenMax;
UINT_32 u4WlanCfgValueLenMax;
WLAN_CFG_ENTRY_T arWlanCfgBuf[WLAN_CFG_ENTRY_NUM_MAX];
};
struct _WLAN_CFG_REC_T {
UINT_32 u4WlanCfgEntryNumMax;
UINT_32 u4WlanCfgKeyLenMax;
UINT_32 u4WlanCfgValueLenMax;
WLAN_CFG_ENTRY_T arWlanCfgBuf[WLAN_CFG_REC_ENTRY_NUM_MAX];
};
typedef enum _ENUM_MAX_BANDWIDTH_SETTING_T {
MAX_BW_20MHZ = 0,
MAX_BW_40MHZ,
MAX_BW_80MHZ,
MAX_BW_160MHZ,
MAX_BW_80_80_MHZ
} ENUM_MAX_BANDWIDTH_SETTING, *P_ENUM_MAX_BANDWIDTH_SETTING_T;
typedef struct _TX_PACKET_INFO {
UINT_8 ucPriorityParam;
UINT_32 u4PacketLen;
UINT_8 aucEthDestAddr[MAC_ADDR_LEN];
UINT_16 u2Flag;
#if 0
BOOLEAN fgIs1X;
BOOLEAN fgIsPAL;
BOOLEAN fgIs802_3;
BOOLEAN fgIsVlanExists;
BOOLEAN fgIsDhcp;
BOOLEAN fgIsArp;
#endif
} TX_PACKET_INFO, *P_TX_PACKET_INFO;
typedef enum _ENUM_TX_PROFILING_TAG_T {
TX_PROF_TAG_OS_TO_DRV = 0,
TX_PROF_TAG_DRV_ENQUE,
TX_PROF_TAG_DRV_DEQUE,
TX_PROF_TAG_DRV_TX_DONE,
TX_PROF_TAG_MAC_TX_DONE
} ENUM_TX_PROFILING_TAG_T, *P_ENUM_TX_PROFILING_TAG_T;
enum ENUM_WF_PATH_FAVOR_T {
ENUM_WF_NON_FAVOR = 0xff,
ENUM_WF_0_ONE_STREAM_PATH_FAVOR = 0,
ENUM_WF_1_ONE_STREAM_PATH_FAVOR = 1,
ENUM_WF_0_1_TWO_STREAM_PATH_FAVOR = 2,
ENUM_WF_0_1_DUP_STREAM_PATH_FAVOR = 3,
};
/*******************************************************************************
* P U B L I C D A T A
********************************************************************************
*/
/*******************************************************************************
* P R I V A T E D A T A
********************************************************************************
*/
/*******************************************************************************
* M A C R O S
********************************************************************************
*/
#define BUILD_SIGN(ch0, ch1, ch2, ch3) \
((UINT_32)(UINT_8)(ch0) | ((UINT_32)(UINT_8)(ch1) << 8) | \
((UINT_32)(UINT_8)(ch2) << 16) | ((UINT_32)(UINT_8)(ch3) << 24))
#define MTK_WIFI_SIGNATURE BUILD_SIGN('M', 'T', 'K', 'W')
#define IS_FEATURE_ENABLED(_ucFeature) \
(((_ucFeature) == FEATURE_ENABLED) || ((_ucFeature) == FEATURE_FORCE_ENABLED))
#define IS_FEATURE_FORCE_ENABLED(_ucFeature) ((_ucFeature) == FEATURE_FORCE_ENABLED)
#define IS_FEATURE_DISABLED(_ucFeature) ((_ucFeature) == FEATURE_DISABLED)
/* This macro is for later added feature options which use command reserved field as option switch */
/* 0: AUTO
* 1: Disabled
* 2: Enabled
* 3: Force disabled
*/
#define FEATURE_OPT_IN_COMMAND(_ucFeature) ((_ucFeature) + 1)
/*******************************************************************************
* F U N C T I O N D E C L A R A T I O N S
********************************************************************************
*/
P_ADAPTER_T wlanAdapterCreate(IN P_GLUE_INFO_T prGlueInfo);
VOID wlanAdapterDestroy(IN P_ADAPTER_T prAdapter);
VOID wlanCardEjected(IN P_ADAPTER_T prAdapter);
VOID wlanIST(IN P_ADAPTER_T prAdapter);
BOOL wlanISR(IN P_ADAPTER_T prAdapter, IN BOOLEAN fgGlobalIntrCtrl);
WLAN_STATUS wlanProcessCommandQueue(IN P_ADAPTER_T prAdapter, IN P_QUE_T prCmdQue);
WLAN_STATUS wlanSendCommand(IN P_ADAPTER_T prAdapter, IN P_CMD_INFO_T prCmdInfo);
#if CFG_SUPPORT_MULTITHREAD
WLAN_STATUS wlanSendCommandMthread(IN P_ADAPTER_T prAdapter, IN P_CMD_INFO_T prCmdInfo);
WLAN_STATUS wlanTxCmdMthread(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanTxCmdDoneMthread(IN P_ADAPTER_T prAdapter);
VOID wlanClearTxCommandQueue(IN P_ADAPTER_T prAdapter);
VOID wlanClearTxCommandDoneQueue(IN P_ADAPTER_T prAdapter);
VOID wlanClearDataQueue(IN P_ADAPTER_T prAdapter);
VOID wlanClearRxToOsQueue(IN P_ADAPTER_T prAdapter);
#endif
VOID wlanReleaseCommand(IN P_ADAPTER_T prAdapter, IN P_CMD_INFO_T prCmdInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
VOID wlanReleasePendingOid(IN P_ADAPTER_T prAdapter, IN ULONG ulParamPtr);
VOID wlanReleasePendingCMDbyBssIdx(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIndex);
VOID wlanReturnPacketDelaySetupTimeout(IN P_ADAPTER_T prAdapter, IN ULONG ulParamPtr);
VOID wlanReturnPacket(IN P_ADAPTER_T prAdapter, IN PVOID pvPacket);
WLAN_STATUS
wlanQueryInformation(IN P_ADAPTER_T prAdapter,
IN PFN_OID_HANDLER_FUNC pfOidQryHandler,
IN PVOID pvInfoBuf, IN UINT_32 u4InfoBufLen, OUT PUINT_32 pu4QryInfoLen);
WLAN_STATUS
wlanSetInformation(IN P_ADAPTER_T prAdapter,
IN PFN_OID_HANDLER_FUNC pfOidSetHandler,
IN PVOID pvInfoBuf, IN UINT_32 u4InfoBufLen, OUT PUINT_32 pu4SetInfoLen);
WLAN_STATUS wlanAdapterStart(IN P_ADAPTER_T prAdapter, IN P_REG_INFO_T prRegInfo);
WLAN_STATUS wlanAdapterStop(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanCheckWifiFunc(IN P_ADAPTER_T prAdapter, IN BOOLEAN fgRdyChk);
#if CFG_SUPPORT_WAPI
BOOLEAN wlanQueryWapiMode(IN P_ADAPTER_T prAdapter);
#endif
VOID wlanReturnRxPacket(IN PVOID pvAdapter, IN PVOID pvPacket);
VOID wlanRxSetBroadcast(IN P_ADAPTER_T prAdapter, IN BOOLEAN fgEnableBroadcast);
BOOLEAN wlanIsHandlerNeedHwAccess(IN PFN_OID_HANDLER_FUNC pfnOidHandler, IN BOOLEAN fgSetInfo);
VOID wlanSetPromiscuousMode(IN P_ADAPTER_T prAdapter, IN BOOLEAN fgEnablePromiscuousMode);
#if CFG_SUPPORT_COMPRESSION_FW_OPTION
WLAN_STATUS wlanImageSectionDownloadStage(IN P_ADAPTER_T prAdapter,
IN PVOID pvFwImageMapFile, IN UINT_32 u4FwImageFileLength,
UINT_8 ucSectionNumber, IN ENUM_IMG_DL_IDX_T eDlIdx,
OUT PUINT_8 ucIsCompressed,
OUT P_INIT_CMD_WIFI_DECOMPRESSION_START prFwImageInFo);
#else
WLAN_STATUS wlanImageSectionDownloadStage(IN P_ADAPTER_T prAdapter,
IN PVOID pvFwImageMapFile, IN UINT_32 u4FwImageFileLength,
UINT_8 ucSectionNumber, IN ENUM_IMG_DL_IDX_T eDlIdx);
#endif
#if CFG_ENABLE_FW_DOWNLOAD
WLAN_STATUS wlanImageSectionConfig(IN P_ADAPTER_T prAdapter,
IN UINT_32 u4DestAddr, IN UINT_32 u4ImgSecSize, IN UINT_32 u4DataMode,
IN ENUM_IMG_DL_IDX_T eDlIdx);
WLAN_STATUS wlanImageSectionDownload(IN P_ADAPTER_T prAdapter, IN UINT_32 u4ImgSecSize, IN PUINT_8 pucImgSecBuf);
WLAN_STATUS wlanImageQueryStatus(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanImageSectionDownloadStatus(IN P_ADAPTER_T prAdapter, IN UINT_8 ucCmdSeqNum);
#define wlanConfigWifiFuncStatus wlanImageSectionDownloadStatus
WLAN_STATUS wlanConfigWifiFunc(IN P_ADAPTER_T prAdapter,
IN BOOLEAN fgEnable, IN UINT_32 u4StartAddress, IN UINT_8 ucPDA);
UINT_32 wlanCRC32(PUINT_8 buf, UINT_32 len);
#endif
WLAN_STATUS wlanSendDummyCmd(IN P_ADAPTER_T prAdapter, IN BOOLEAN fgIsReqTxRsrc);
WLAN_STATUS wlanSendNicPowerCtrlCmd(IN P_ADAPTER_T prAdapter, IN UINT_8 ucPowerMode);
WLAN_STATUS wlanKeepFullPwr(IN P_ADAPTER_T prAdapter, IN BOOLEAN fgEnable);
BOOLEAN wlanIsHandlerAllowedInRFTest(IN PFN_OID_HANDLER_FUNC pfnOidHandler, IN BOOLEAN fgSetInfo);
WLAN_STATUS wlanProcessQueuedSwRfb(IN P_ADAPTER_T prAdapter, IN P_SW_RFB_T prSwRfbListHead);
WLAN_STATUS wlanProcessQueuedMsduInfo(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfoListHead);
BOOLEAN wlanoidTimeoutCheck(IN P_ADAPTER_T prAdapter, IN PFN_OID_HANDLER_FUNC pfnOidHandler, IN UINT_32 u4Timeout);
VOID wlanoidClearTimeoutCheck(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanUpdateNetworkAddress(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanUpdateBasicConfig(IN P_ADAPTER_T prAdapter);
BOOLEAN wlanQueryTestMode(IN P_ADAPTER_T prAdapter);
BOOLEAN wlanProcessTxFrame(IN P_ADAPTER_T prAdapter, IN P_NATIVE_PACKET prPacket);
/* Security Frame Handling */
BOOLEAN wlanProcessSecurityFrame(IN P_ADAPTER_T prAdapter, IN P_NATIVE_PACKET prPacket);
VOID wlanSecurityFrameTxDone(IN P_ADAPTER_T prAdapter, IN P_CMD_INFO_T prCmdInfo, IN PUINT_8 pucEventBuf);
VOID wlanSecurityFrameTxTimeout(IN P_ADAPTER_T prAdapter, IN P_CMD_INFO_T prCmdInfo);
/*----------------------------------------------------------------------------*/
/* OID/IOCTL Handling */
/*----------------------------------------------------------------------------*/
VOID wlanClearScanningResult(IN P_ADAPTER_T prAdapter);
VOID wlanClearBssInScanningResult(IN P_ADAPTER_T prAdapter, IN PUINT_8 arBSSID);
#if CFG_TEST_WIFI_DIRECT_GO
VOID wlanEnableP2pFunction(IN P_ADAPTER_T prAdapter);
VOID wlanEnableATGO(IN P_ADAPTER_T prAdapter);
#endif
/*----------------------------------------------------------------------------*/
/* NIC Capability Retrieve by Polling */
/*----------------------------------------------------------------------------*/
WLAN_STATUS wlanQueryNicCapability(IN P_ADAPTER_T prAdapter);
/*----------------------------------------------------------------------------*/
/* PD MCR Retrieve by Polling */
/*----------------------------------------------------------------------------*/
WLAN_STATUS wlanQueryPdMcr(IN P_ADAPTER_T prAdapter, IN P_PARAM_MCR_RW_STRUCT_T prMcrRdInfo);
/*----------------------------------------------------------------------------*/
/* Loading Manufacture Data */
/*----------------------------------------------------------------------------*/
WLAN_STATUS wlanLoadManufactureData(IN P_ADAPTER_T prAdapter, IN P_REG_INFO_T prRegInfo);
/*----------------------------------------------------------------------------*/
/* Media Stream Mode */
/*----------------------------------------------------------------------------*/
BOOLEAN wlanResetMediaStreamMode(IN P_ADAPTER_T prAdapter);
/*----------------------------------------------------------------------------*/
/* Timer Timeout Check (for Glue Layer) */
/*----------------------------------------------------------------------------*/
WLAN_STATUS wlanTimerTimeoutCheck(IN P_ADAPTER_T prAdapter);
/*----------------------------------------------------------------------------*/
/* Mailbox Message Check (for Glue Layer) */
/*----------------------------------------------------------------------------*/
WLAN_STATUS wlanProcessMboxMessage(IN P_ADAPTER_T prAdapter);
/*----------------------------------------------------------------------------*/
/* TX Pending Packets Handling (for Glue Layer) */
/*----------------------------------------------------------------------------*/
WLAN_STATUS wlanEnqueueTxPacket(IN P_ADAPTER_T prAdapter, IN P_NATIVE_PACKET prNativePacket);
WLAN_STATUS wlanFlushTxPendingPackets(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanTxPendingPackets(IN P_ADAPTER_T prAdapter, IN OUT PBOOLEAN pfgHwAccess);
/*----------------------------------------------------------------------------*/
/* Low Power Acquire/Release (for Glue Layer) */
/*----------------------------------------------------------------------------*/
WLAN_STATUS wlanAcquirePowerControl(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanReleasePowerControl(IN P_ADAPTER_T prAdapter);
/*----------------------------------------------------------------------------*/
/* Pending Packets Number Reporting (for Glue Layer) */
/*----------------------------------------------------------------------------*/
UINT_32 wlanGetTxPendingFrameCount(IN P_ADAPTER_T prAdapter);
/*----------------------------------------------------------------------------*/
/* ACPI state inquiry (for Glue Layer) */
/*----------------------------------------------------------------------------*/
ENUM_ACPI_STATE_T wlanGetAcpiState(IN P_ADAPTER_T prAdapter);
VOID wlanSetAcpiState(IN P_ADAPTER_T prAdapter, IN ENUM_ACPI_STATE_T ePowerState);
VOID wlanDefTxPowerCfg(IN P_ADAPTER_T prAdapter);
/*----------------------------------------------------------------------------*/
/* get ECO version from Revision ID register (for Win32) */
/*----------------------------------------------------------------------------*/
UINT_8 wlanGetEcoVersion(IN P_ADAPTER_T prAdapter);
/*----------------------------------------------------------------------------*/
/* set preferred band configuration corresponding to network type */
/*----------------------------------------------------------------------------*/
VOID wlanSetPreferBandByNetwork(IN P_ADAPTER_T prAdapter, IN ENUM_BAND_T eBand, IN UINT_8 ucBssIndex);
/*----------------------------------------------------------------------------*/
/* get currently operating channel information */
/*----------------------------------------------------------------------------*/
UINT_8 wlanGetChannelNumberByNetwork(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIndex);
/*----------------------------------------------------------------------------*/
/* check for system configuration to generate message on scan list */
/*----------------------------------------------------------------------------*/
WLAN_STATUS wlanCheckSystemConfiguration(IN P_ADAPTER_T prAdapter);
/*----------------------------------------------------------------------------*/
/* query bss statistics information from driver and firmware */
/*----------------------------------------------------------------------------*/
WLAN_STATUS
wlanoidQueryBssStatistics(IN P_ADAPTER_T prAdapter,
IN PVOID pvQueryBuffer, IN UINT_32 u4QueryBufferLen, OUT PUINT_32 pu4QueryInfoLen);
/*----------------------------------------------------------------------------*/
/* dump per-BSS statistics */
/*----------------------------------------------------------------------------*/
VOID wlanDumpBssStatistics(IN P_ADAPTER_T prAdapter, UINT_8 ucBssIndex);
/*----------------------------------------------------------------------------*/
/* query sta statistics information from driver and firmware */
/*----------------------------------------------------------------------------*/
WLAN_STATUS
wlanoidQueryStaStatistics(IN P_ADAPTER_T prAdapter,
IN PVOID pvQueryBuffer, IN UINT_32 u4QueryBufferLen, OUT PUINT_32 pu4QueryInfoLen);
/*----------------------------------------------------------------------------*/
/* query NIC resource information from chip and reset Tx resource for normal operation */
/*----------------------------------------------------------------------------*/
VOID wlanQueryNicResourceInformation(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanQueryNicCapabilityV2(IN P_ADAPTER_T prAdapter);
VOID wlanUpdateNicResourceInformation(IN P_ADAPTER_T prAdapter);
/*----------------------------------------------------------------------------*/
/* GET/SET BSS index mapping for network interfaces */
/*----------------------------------------------------------------------------*/
VOID wlanBindNetInterface(IN P_GLUE_INFO_T prGlueInfo, IN UINT_8 ucNetInterfaceIndex, IN PVOID pvNetInterface);
VOID wlanBindBssIdxToNetInterface(IN P_GLUE_INFO_T prGlueInfo, IN UINT_8 ucBssIndex, IN PVOID pvNetInterface);
UINT_8 wlanGetBssIdxByNetInterface(IN P_GLUE_INFO_T prGlueInfo, IN PVOID pvNetInterface);
PVOID wlanGetNetInterfaceByBssIdx(IN P_GLUE_INFO_T prGlueInfo, IN UINT_8 ucBssIndex);
/* for windows as windows glue cannot see through P_ADAPTER_T */
UINT_8 wlanGetAisBssIndex(IN P_ADAPTER_T prAdapter);
VOID wlanInitFeatureOption(IN P_ADAPTER_T prAdapter);
VOID wlanCfgSetSwCtrl(IN P_ADAPTER_T prAdapter);
VOID wlanCfgSetChip(IN P_ADAPTER_T prAdapter);
VOID wlanCfgSetDebugLevel(IN P_ADAPTER_T prAdapter);
VOID wlanCfgSetCountryCode(IN P_ADAPTER_T prAdapter);
P_WLAN_CFG_ENTRY_T wlanCfgGetEntry(IN P_ADAPTER_T prAdapter, const PCHAR pucKey, BOOLEAN fgGetCfgRec);
WLAN_STATUS
wlanCfgGet(IN P_ADAPTER_T prAdapter, const PCHAR pucKey, PCHAR pucValue, PCHAR pucValueDef, UINT_32 u4Flags);
UINT_32 wlanCfgGetUint32(IN P_ADAPTER_T prAdapter, const PCHAR pucKey, UINT_32 u4ValueDef);
INT_32 wlanCfgGetInt32(IN P_ADAPTER_T prAdapter, const PCHAR pucKey, INT_32 i4ValueDef);
WLAN_STATUS wlanCfgSetUint32(IN P_ADAPTER_T prAdapter, const PCHAR pucKey, UINT_32 u4Value);
WLAN_STATUS wlanCfgSet(IN P_ADAPTER_T prAdapter, const PCHAR pucKey, PCHAR pucValue, UINT_32 u4Flags);
WLAN_STATUS
wlanCfgSetCb(IN P_ADAPTER_T prAdapter, const PCHAR pucKey, WLAN_CFG_SET_CB pfSetCb, void *pPrivate, UINT_32 u4Flags);
#if CFG_SUPPORT_EASY_DEBUG
WLAN_STATUS wlanCfgParse(IN P_ADAPTER_T prAdapter, PUINT_8 pucConfigBuf, UINT_32 u4ConfigBufLen, BOOLEAN isFwConfig);
VOID wlanFeatureToFw(IN P_ADAPTER_T prAdapter);
#endif
VOID wlanLoadDefaultCustomerSetting(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanCfgInit(IN P_ADAPTER_T prAdapter, PUINT_8 pucConfigBuf, UINT_32 u4ConfigBufLen, UINT_32 u4Flags);
WLAN_STATUS wlanCfgParseArgument(CHAR *cmdLine, INT_32 *argc, CHAR *argv[]);
#if CFG_WOW_SUPPORT
WLAN_STATUS wlanCfgParseArgumentLong(CHAR *cmdLine, INT_32 *argc, CHAR *argv[]);
#endif
INT_32 wlanHexToNum(CHAR c);
INT_32 wlanHexToByte(PCHAR hex);
INT_32 wlanHwAddrToBin(PCHAR txt, UINT_8 *addr);
BOOLEAN wlanIsChipNoAck(IN P_ADAPTER_T prAdapter);
BOOLEAN wlanIsChipRstRecEnabled(IN P_ADAPTER_T prAdapter);
BOOLEAN wlanIsChipAssert(IN P_ADAPTER_T prAdapter);
VOID wlanChipRstPreAct(IN P_ADAPTER_T prAdapter);
VOID wlanTxProfilingTagPacket(IN P_ADAPTER_T prAdapter, IN P_NATIVE_PACKET prPacket, IN ENUM_TX_PROFILING_TAG_T eTag);
VOID wlanTxProfilingTagMsdu(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_PROFILING_TAG_T eTag);
#if CFG_ASSERT_DUMP
VOID wlanCorDumpTimerReset(IN P_ADAPTER_T prAdapter, BOOLEAN fgIsResetN9);
VOID wlanN9CorDumpTimeOut(IN P_ADAPTER_T prAdapter, IN ULONG ulParamPtr);
VOID wlanCr4CorDumpTimeOut(IN P_ADAPTER_T prAdapter, IN ULONG ulParamPtr);
#endif
#endif /* _WLAN_LIB_H */
BOOL wlanGetWlanIdxByAddress(IN P_ADAPTER_T prAdapter, IN PUINT_8 pucAddr, OUT PUINT_8 pucIndex);
PUINT_8 wlanGetStaAddrByWlanIdx(IN P_ADAPTER_T prAdapter, IN UINT_8 ucIndex);
P_WLAN_CFG_ENTRY_T wlanCfgGetEntryByIndex(IN P_ADAPTER_T prAdapter, const UINT_8 ucIdx, UINT_32 flag);
WLAN_STATUS wlanGetStaIdxByWlanIdx(IN P_ADAPTER_T prAdapter, IN UINT_8 ucIndex, OUT PUINT_8 pucStaIdx);
/*----------------------------------------------------------------------------*/
/* update per-AC statistics for LLS */
/*----------------------------------------------------------------------------*/
VOID wlanUpdateTxStatistics(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo, BOOLEAN fgTxDrop);
VOID wlanUpdateRxStatistics(IN P_ADAPTER_T prAdapter, IN P_SW_RFB_T prSwRfb);
WLAN_STATUS wlanTriggerStatsLog(IN P_ADAPTER_T prAdapter, IN UINT_32 u4DurationInMs);
WLAN_STATUS wlanDhcpTxDone(IN P_ADAPTER_T prAdapter,
IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
WLAN_STATUS wlanArpTxDone(IN P_ADAPTER_T prAdapter,
IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
WLAN_STATUS wlan1xTxDone(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo,
IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
WLAN_STATUS wlanDownloadFW(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanDownloadPatch(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanGetPatchInfo(IN P_ADAPTER_T prAdapter);
WLAN_STATUS wlanPowerOffWifi(IN P_ADAPTER_T prAdapter);
VOID wlanPrintVersion(P_ADAPTER_T prAdapter);
WLAN_STATUS wlanAccessRegister(IN P_ADAPTER_T prAdapter,
IN UINT_32 u4Addr, IN UINT_32 *pru4Result, IN UINT_32 u4Data,
IN UINT_8 ucSetQuery);
WLAN_STATUS wlanAccessRegisterStatus(IN P_ADAPTER_T prAdapter, IN UINT_8 ucCmdSeqNum,
IN UINT_8 ucSetQuery, IN PVOID prEvent, IN UINT_32 u4EventLen);
WLAN_STATUS wlanSetChipEcoInfo(IN P_ADAPTER_T prAdapter);
VOID wlanNotifyFwSuspend(P_GLUE_INFO_T prGlueInfo, struct net_device *prDev, BOOLEAN fgSuspend);
VOID wlanClearPendingInterrupt(IN P_ADAPTER_T prAdapter);
#if (MTK_WCN_HIF_SDIO && CFG_WMT_WIFI_PATH_SUPPORT)
extern INT_32 mtk_wcn_wmt_wifi_fem_cfg_report(PVOID pvInfoBuf);
#endif
UINT_8 wlanGetAntPathType(IN P_ADAPTER_T prAdapter, IN enum ENUM_WF_PATH_FAVOR_T eWfPathFavor);
UINT_8 wlanGetSpeIdx(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIndex, IN enum ENUM_WF_PATH_FAVOR_T eWfPathFavor);
UINT_8 wlanGetSupportNss(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIndex);
INT_32 wlanGetFileContent(P_ADAPTER_T prAdapter,
const PUINT_8 pcFileName, PUINT_8 pucBuf,
UINT_32 u4MaxFileLen, PUINT_32 pu4ReadFileLen, BOOL bReqFw);
#if CFG_SUPPORT_ANT_SELECT
WLAN_STATUS wlanUpdateExtInfo(IN P_ADAPTER_T prAdapter);
#endif
int wlanSuspendRekeyOffload(P_GLUE_INFO_T prGlueInfo, IN UINT_8 ucRekeyMode);
VOID wlanSuspendPmHandle(P_GLUE_INFO_T prGlueInfo);
VOID wlanResumePmHandle(P_GLUE_INFO_T prGlueInfo);