blob: 3ca067ebe157e668bfb0110c909928b2bd73e9a1 [file] [log] [blame]
/*!
* @file coreconfigurator.h
* @brief
* @author
* @sa coreconfigurator.c
* @date 1 Mar 2012
* @version 1.0
*/
#ifndef CORECONFIGURATOR_H
#define CORECONFIGURATOR_H
#include "wilc_wlan_if.h"
/*****************************************************************************/
/* Constants */
/*****************************************************************************/
/* Number of WID Options Supported */
#define NUM_BASIC_SWITCHES 45
#define NUM_FHSS_SWITCHES 0
#define NUM_RSSI 5
#ifdef MAC_802_11N
#define NUM_11N_BASIC_SWITCHES 25
#define NUM_11N_HUT_SWITCHES 47
#else /* MAC_802_11N */
#define NUM_11N_BASIC_SWITCHES 0
#define NUM_11N_HUT_SWITCHES 0
#endif /* MAC_802_11N */
extern u16 g_num_total_switches;
#define MAC_HDR_LEN 24 /* No Address4 - non-ESS */
#define MAX_SSID_LEN 33
#define FCS_LEN 4
#define TIME_STAMP_LEN 8
#define BEACON_INTERVAL_LEN 2
#define CAP_INFO_LEN 2
#define STATUS_CODE_LEN 2
#define AID_LEN 2
#define IE_HDR_LEN 2
/* Operating Mode: SET */
#define SET_CFG 0
/* Operating Mode: GET */
#define GET_CFG 1
#define MAX_PACKET_BUFF_SIZE 1596
#define MAX_STRING_LEN 256
#define MAX_SURVEY_RESULT_FRAG_SIZE MAX_STRING_LEN
#define SURVEY_RESULT_LENGTH 44
#define MAX_ASSOC_RESP_FRAME_SIZE MAX_STRING_LEN
#define STATUS_MSG_LEN 12
#define MAC_CONNECTED 1
#define MAC_DISCONNECTED 0
/*****************************************************************************/
/* Function Macros */
/*****************************************************************************/
#define MAKE_WORD16(lsb, msb) ((((u16)(msb) << 8) & 0xFF00) | (lsb))
#define MAKE_WORD32(lsw, msw) ((((u32)(msw) << 16) & 0xFFFF0000) | (lsw))
/*****************************************************************************/
/* Type Definitions */
/*****************************************************************************/
/* WID Data Types */
#if 0
typedef enum {
WID_CHAR = 0,
WID_SHORT = 1,
WID_INT = 2,
WID_STR = 3,
WID_ADR = 4,
WID_BIN = 5,
WID_IP = 6,
WID_UNDEF = 7,
WID_TYPE_FORCE_32BIT = 0xFFFFFFFF
} tenuWIDtype;
/* WLAN Identifiers */
typedef enum {
WID_NIL = -1,
/* EMAC Character WID list */
WID_BSS_TYPE = 0x0000,
WID_CURRENT_TX_RATE = 0x0001,
WID_CURRENT_CHANNEL = 0x0002,
WID_PREAMBLE = 0x0003,
WID_11G_OPERATING_MODE = 0x0004,
WID_STATUS = 0x0005,
WID_11G_PROT_MECH = 0x0006,
WID_SCAN_TYPE = 0x0007,
WID_PRIVACY_INVOKED = 0x0008,
WID_KEY_ID = 0x0009,
WID_QOS_ENABLE = 0x000A,
WID_POWER_MANAGEMENT = 0x000B,
WID_11I_MODE = 0x000C,
WID_AUTH_TYPE = 0x000D,
WID_SITE_SURVEY = 0x000E,
WID_LISTEN_INTERVAL = 0x000F,
WID_DTIM_PERIOD = 0x0010,
WID_ACK_POLICY = 0x0011,
WID_RESET = 0x0012,
WID_PCF_MODE = 0x0013,
WID_CFP_PERIOD = 0x0014,
WID_BCAST_SSID = 0x0015,
WID_PHY_TEST_PATTERN = 0x0016,
WID_DISCONNECT = 0x0016,
WID_READ_ADDR_SDRAM = 0x0017,
WID_TX_POWER_LEVEL_11A = 0x0018,
WID_REKEY_POLICY = 0x0019,
WID_SHORT_SLOT_ALLOWED = 0x001A,
WID_PHY_ACTIVE_REG = 0x001B,
WID_PHY_ACTIVE_REG_VAL = 0x001C,
WID_TX_POWER_LEVEL_11B = 0x001D,
WID_START_SCAN_REQ = 0x001E,
WID_RSSI = 0x001F,
WID_JOIN_REQ = 0x0020,
WID_ANTENNA_SELECTION = 0x0021,
WID_USER_CONTROL_ON_TX_POWER = 0x0027,
WID_MEMORY_ACCESS_8BIT = 0x0029,
WID_UAPSD_SUPPORT_AP = 0x002A,
WID_CURRENT_MAC_STATUS = 0x0031,
WID_AUTO_RX_SENSITIVITY = 0x0032,
WID_DATAFLOW_CONTROL = 0x0033,
WID_SCAN_FILTER = 0x0036,
WID_LINK_LOSS_THRESHOLD = 0x0037,
WID_AUTORATE_TYPE = 0x0038,
WID_CCA_THRESHOLD = 0x0039,
WID_802_11H_DFS_MODE = 0x003B,
WID_802_11H_TPC_MODE = 0x003C,
WID_DEVICE_READY = 0x003D,
WID_PM_NULL_FRAME_INTERVAL = 0x003E,
WID_PM_ACTIVITY_TIMER = 0x003F,
WID_PM_NULL_FRAME_WAIT_ENABLE = 0x0040,
WID_SCAN_WAIT_TIME = 0x0041,
WID_WSC_IE_EN = 0x0042,
WID_WPS_START = 0x0043,
WID_WPS_DEV_MODE = 0x0044,
WID_BT_COEXISTENCE = 0x0050,
WID_TRACKING_ROAMING = 0x0070,
WID_NUM_PKTS_FOR_RSSI_AVG = 0x0071,
WID_FHSS_SCAN_CHAN_INDEX = 0x0072,
WID_FHSS_SCAN_STEP_INDEX = 0x0073,
/* NMAC Character WID list */
WID_11N_PROT_MECH = 0x0080,
WID_11N_ERP_PROT_TYPE = 0x0081,
WID_11N_ENABLE = 0x0082,
WID_11N_OPERATING_MODE = 0x0083,
WID_11N_OBSS_NONHT_DETECTION = 0x0084,
WID_11N_HT_PROT_TYPE = 0x0085,
WID_11N_RIFS_PROT_ENABLE = 0x0086,
WID_11N_SMPS_MODE = 0x0087,
WID_11N_CURRENT_TX_MCS = 0x0088,
WID_11N_PRINT_STATS = 0x0089,
WID_HUT_FCS_CORRUPT_MODE = 0x008A,
WID_HUT_RESTART = 0x008B,
WID_HUT_TX_FORMAT = 0x008C,
WID_11N_SHORT_GI_20MHZ_ENABLE = 0x008D,
WID_HUT_BANDWIDTH = 0x008E,
WID_HUT_OP_BAND = 0x008F,
WID_HUT_STBC = 0x0090,
WID_HUT_ESS = 0x0091,
WID_HUT_ANTSET = 0x0092,
WID_HUT_HT_OP_MODE = 0x0093,
WID_HUT_RIFS_MODE = 0x0094,
WID_HUT_SMOOTHING_REC = 0x0095,
WID_HUT_SOUNDING_PKT = 0x0096,
WID_HUT_HT_CODING = 0x0097,
WID_HUT_TEST_DIR = 0x0098,
WID_HUT_CAPTURE_MODE = 0x0099,
WID_HUT_PHY_TEST_MODE = 0x009A,
WID_HUT_PHY_TEST_RATE_HI = 0x009B,
WID_HUT_PHY_TEST_RATE_LO = 0x009C,
WID_HUT_DISABLE_RXQ_REPLENISH = 0x009D,
WID_HUT_KEY_ORIGIN = 0x009E,
WID_HUT_BCST_PERCENT = 0x009F,
WID_HUT_GROUP_CIPHER_TYPE = 0x00A0,
WID_TX_ABORT_CONFIG = 0x00A1,
WID_HOST_DATA_IF_TYPE = 0x00A2,
WID_HOST_CONFIG_IF_TYPE = 0x00A3,
WID_HUT_TSF_TEST_MODE = 0x00A4,
WID_HUT_TSSI_VALUE = 0x00A5,
WID_HUT_PKT_TSSI_VALUE = 0x00A5,
WID_REG_TSSI_11B_VALUE = 0x00A6,
WID_REG_TSSI_11G_VALUE = 0x00A7,
WID_REG_TSSI_11N_VALUE = 0x00A8,
WID_TX_CALIBRATION = 0x00A9,
WID_DSCR_TSSI_11B_VALUE = 0x00AA,
WID_DSCR_TSSI_11G_VALUE = 0x00AB,
WID_DSCR_TSSI_11N_VALUE = 0x00AC,
WID_HUT_RSSI_EX = 0x00AD,
WID_HUT_ADJ_RSSI_EX = 0x00AE,
WID_11N_IMMEDIATE_BA_ENABLED = 0x00AF,
WID_11N_TXOP_PROT_DISABLE = 0x00B0,
WID_TX_POWER_LEVEL_11N = 0x00B1,
WID_HUT_MGMT_PERCENT = 0x00B3,
WID_HUT_MGMT_BCST_PERCENT = 0x00B4,
WID_HUT_MGMT_ALLOW_HT = 0x00B5,
WID_HUT_UC_MGMT_TYPE = 0x00B6,
WID_HUT_BC_MGMT_TYPE = 0x00B7,
WID_HUT_11W_MFP_REQUIRED_TX = 0x00B8,
WID_HUT_11W_MFP_PEER_CAPABLE = 0x00B9,
WID_HUT_11W_TX_IGTK_ID = 0x00BA,
WID_11W_ENABLE = 0x00BB,
WID_11W_MGMT_PROT_REQ = 0x00BC,
WID_USER_SEC_CHANNEL_OFFSET = 0x00C0,
WID_2040_COEXISTENCE = 0x00C1,
WID_HUT_FC_TXOP_MOD = 0x00C2,
WID_HUT_FC_PROT_TYPE = 0x00C3,
WID_HUT_SEC_CCA_ASSERT = 0x00C4,
WID_2040_ENABLE = 0x00C5,
WID_2040_CURR_CHANNEL_OFFSET = 0x00C6,
WID_2040_40MHZ_INTOLERANT = 0x00C7,
/* Custom Character WID list */
WID_POWER_SAVE = 0x0100,
WID_WAKE_STATUS = 0x0101,
WID_WAKE_CONTROL = 0x0102,
WID_CCA_BUSY_START = 0x0103,
/* EMAC Short WID list */
WID_RTS_THRESHOLD = 0x1000,
WID_FRAG_THRESHOLD = 0x1001,
WID_SHORT_RETRY_LIMIT = 0x1002,
WID_LONG_RETRY_LIMIT = 0x1003,
WID_CFP_MAX_DUR = 0x1004,
WID_PHY_TEST_FRAME_LEN = 0x1005,
WID_BEACON_INTERVAL = 0x1006,
WID_MEMORY_ACCESS_16BIT = 0x1008,
WID_RX_SENSE = 0x100B,
WID_ACTIVE_SCAN_TIME = 0x100C,
WID_PASSIVE_SCAN_TIME = 0x100D,
WID_SITE_SURVEY_SCAN_TIME = 0x100E,
WID_JOIN_START_TIMEOUT = 0x100F,
WID_AUTH_TIMEOUT = 0x1010,
WID_ASOC_TIMEOUT = 0x1011,
WID_11I_PROTOCOL_TIMEOUT = 0x1012,
WID_EAPOL_RESPONSE_TIMEOUT = 0x1013,
WID_WPS_PASS_ID = 0x1017,
WID_WPS_CONFIG_METHOD = 0x1018,
WID_FHSS_INIT_SCAN_TIME = 0x1070,
WID_FHSS_ROAM_SCAN_TIME = 0x1071,
/* NMAC Short WID list */
WID_11N_RF_REG_VAL = 0x1080,
WID_HUT_FRAME_LEN = 0x1081,
WID_HUT_TXOP_LIMIT = 0x1082,
WID_HUT_SIG_QUAL_AVG = 0x1083,
WID_HUT_SIG_QUAL_AVG_CNT = 0x1084,
WID_11N_SIG_QUAL_VAL = 0x1085,
WID_HUT_RSSI_EX_COUNT = 0x1086,
WID_HUT_UC_MGMT_FRAME_LEN = 0x1088,
WID_HUT_BC_MGMT_FRAME_LEN = 0x1089,
/* Custom Short WID list */
WID_CCA_BUSY_STATUS = 0x1100,
/* EMAC Integer WID list */
WID_FAILED_COUNT = 0x2000,
WID_RETRY_COUNT = 0x2001,
WID_MULTIPLE_RETRY_COUNT = 0x2002,
WID_FRAME_DUPLICATE_COUNT = 0x2003,
WID_ACK_FAILURE_COUNT = 0x2004,
WID_RECEIVED_FRAGMENT_COUNT = 0x2005,
WID_MCAST_RECEIVED_FRAME_COUNT = 0x2006,
WID_FCS_ERROR_COUNT = 0x2007,
WID_SUCCESS_FRAME_COUNT = 0x2008,
WID_PHY_TEST_PKT_CNT = 0x2009,
WID_HUT_TX_COUNT = 0x200A,
WID_TX_FRAGMENT_COUNT = 0x200B,
WID_TX_MULTICAST_FRAME_COUNT = 0x200C,
WID_RTS_SUCCESS_COUNT = 0x200D,
WID_RTS_FAILURE_COUNT = 0x200E,
WID_WEP_UNDECRYPTABLE_COUNT = 0x200F,
WID_REKEY_PERIOD = 0x2010,
WID_REKEY_PACKET_COUNT = 0x2011,
WID_1X_SERV_ADDR = 0x2012,
WID_STACK_IP_ADDR = 0x2013,
WID_STACK_NETMASK_ADDR = 0x2014,
WID_HW_RX_COUNT = 0x2015,
WID_MEMORY_ADDRESS = 0x201E,
WID_MEMORY_ACCESS_32BIT = 0x201F,
WID_RF_REG_VAL = 0x2021,
WID_FIRMWARE_INFO = 0x2023,
WID_DEV_OS_VERSION = 0x2025,
WID_ROAM_RSSI_THESHOLDS = 0x2070,
WID_TRACK_INTERVAL_SEC = 0x2071,
WID_FHSS_HOPPING_PARAMS = 0x2072,
WID_FHSS_HOP_DWELL_TIME = 0x2073,
/* NMAC Integer WID list */
WID_11N_PHY_ACTIVE_REG_VAL = 0x2080,
WID_HUT_NUM_TX_PKTS = 0x2081,
WID_HUT_TX_TIME_TAKEN = 0x2082,
WID_HUT_TX_TEST_TIME = 0x2083,
WID_HUT_LOG_INTERVAL = 0x2084,
/* EMAC String WID list */
WID_SSID = 0x3000,
WID_FIRMWARE_VERSION = 0x3001,
WID_OPERATIONAL_RATE_SET = 0x3002,
WID_BSSID = 0x3003,
#if 0
WID_WEP_KEY_VALUE0 = 0x3004,
#endif
WID_11I_PSK = 0x3008,
WID_11E_P_ACTION_REQ = 0x3009,
WID_1X_KEY = 0x300A,
WID_HARDWARE_VERSION = 0x300B,
WID_MAC_ADDR = 0x300C,
WID_HUT_DEST_ADDR = 0x300D,
/*WID_HUT_STATS = 0x300E,*/
WID_PHY_VERSION = 0x300F,
WID_SUPP_USERNAME = 0x3010,
WID_SUPP_PASSWORD = 0x3011,
WID_SITE_SURVEY_RESULTS = 0x3012,
WID_RX_POWER_LEVEL = 0x3013,
WID_MANUFACTURER = 0x3026, /*Added for CAPI tool */
WID_MODEL_NAME = 0x3027, /*Added for CAPI tool */
WID_MODEL_NUM = 0x3028, /*Added for CAPI tool */
WID_DEVICE_NAME = 0x3029, /*Added for CAPI tool */
WID_ASSOC_RES_INFO = 0x3020,
/* NMAC String WID list */
WID_11N_P_ACTION_REQ = 0x3080,
WID_HUT_TEST_ID = 0x3081,
WID_PMKID_INFO = 0x3082,
/* Custom String WID list */
WID_FLASH_DATA = 0x3100,
WID_EEPROM_DATA = 0x3101,
WID_SERIAL_NUMBER = 0x3102,
/* EMAC Binary WID list */
WID_UAPSD_CONFIG = 0x4001,
WID_UAPSD_STATUS = 0x4002,
WID_AC_PARAMS_AP = 0x4003,
WID_AC_PARAMS_STA = 0x4004,
WID_NEWORK_INFO = 0x4005,
WID_WPS_CRED_LIST = 0x4006,
WID_PRIM_DEV_TYPE = 0x4007,
WID_STA_JOIN_INFO = 0x4008,
WID_CONNECTED_STA_LIST = 0x4009,
/* NMAC Binary WID list */
WID_11N_AUTORATE_TABLE = 0x4080,
WID_HUT_TX_PATTERN = 0x4081,
WID_HUT_STATS = 0x4082,
WID_HUT_LOG_STATS = 0x4083,
/*BugID_3746 WID to add IE to be added in next probe request*/
WID_INFO_ELEMENT_PROBE = 0x4085,
/*BugID_3746 WID to add IE to be added in next associate request*/
WID_INFO_ELEMENT_ASSOCIATE = 0x4086,
/* Miscellaneous WIDs */
WID_ALL = 0x7FFE,
WID_MAX = 0xFFFF
} tenuWIDid;
#endif
/* Status Codes for Authentication and Association Frames */
typedef enum {
SUCCESSFUL_STATUSCODE = 0,
UNSPEC_FAIL = 1,
UNSUP_CAP = 10,
REASOC_NO_ASOC = 11,
FAIL_OTHER = 12,
UNSUPT_ALG = 13,
AUTH_SEQ_FAIL = 14,
CHLNG_FAIL = 15,
AUTH_TIMEOUT = 16,
AP_FULL = 17,
UNSUP_RATE = 18,
SHORT_PREAMBLE_UNSUP = 19,
PBCC_UNSUP = 20,
CHANNEL_AGIL_UNSUP = 21,
SHORT_SLOT_UNSUP = 25,
OFDM_DSSS_UNSUP = 26,
CONNECT_STS_FORCE_16_BIT = 0xFFFF
} tenuConnectSts;
typedef struct {
u16 u16WIDid;
tenuWIDtype enuWIDtype;
s32 s32ValueSize;
s8 *ps8WidVal;
} tstrWID;
typedef struct {
u8 u8Full;
u8 u8Index;
s8 as8RSSI[NUM_RSSI];
} tstrRSSI;
/* This structure is used to support parsing of the received 'N' message */
typedef struct {
s8 s8rssi;
u16 u16CapInfo;
u8 au8ssid[MAX_SSID_LEN];
u8 u8SsidLen;
u8 au8bssid[6];
u16 u16BeaconPeriod;
u8 u8DtimPeriod;
u8 u8channel;
unsigned long u32TimeRcvdInScanCached; /* of type unsigned long to be accepted by the linux kernel macro time_after() */
unsigned long u32TimeRcvdInScan;
bool bNewNetwork;
#ifdef AGING_ALG
u8 u8Found;
#endif
#ifdef WILC_P2P
u32 u32Tsf; /* time-stamp [Low only 32 bit] */
#endif
u8 *pu8IEs;
u16 u16IEsLen;
void *pJoinParams;
tstrRSSI strRssi;
u64 u64Tsf; /* time-stamp [Low and High 64 bit] */
} tstrNetworkInfo;
/* This structure is used to support parsing of the received Association Response frame */
typedef struct {
u16 u16capability;
u16 u16ConnectStatus;
u16 u16AssocID;
u8 *pu8RespIEs;
u16 u16RespIEsLen;
} tstrConnectRespInfo;
typedef struct {
u8 au8bssid[6];
u8 *pu8ReqIEs;
size_t ReqIEsLen;
u8 *pu8RespIEs;
u16 u16RespIEsLen;
u16 u16ConnectStatus;
} tstrConnectInfo;
typedef struct {
u16 u16reason;
u8 *ie;
size_t ie_len;
} tstrDisconnectNotifInfo;
#ifndef CONNECT_DIRECT
typedef struct wid_site_survey_reslts {
char SSID[MAX_SSID_LEN];
u8 BssType;
u8 Channel;
u8 SecurityStatus;
u8 BSSID[6];
char RxPower;
u8 Reserved;
} wid_site_survey_reslts_s;
#endif
extern s32 CoreConfiguratorInit(void);
extern s32 CoreConfiguratorDeInit(void);
extern s32 SendConfigPkt(u8 u8Mode, tstrWID *pstrWIDs,
u32 u32WIDsCount, bool bRespRequired, u32 drvHandler);
extern s32 ParseNetworkInfo(u8 *pu8MsgBuffer, tstrNetworkInfo **ppstrNetworkInfo);
extern s32 DeallocateNetworkInfo(tstrNetworkInfo *pstrNetworkInfo);
extern s32 ParseAssocRespInfo(u8 *pu8Buffer, u32 u32BufferLen,
tstrConnectRespInfo **ppstrConnectRespInfo);
extern s32 DeallocateAssocRespInfo(tstrConnectRespInfo *pstrConnectRespInfo);
#ifndef CONNECT_DIRECT
extern s32 ParseSurveyResults(u8 ppu8RcvdSiteSurveyResults[][MAX_SURVEY_RESULT_FRAG_SIZE],
wid_site_survey_reslts_s **ppstrSurveyResults, u32 *pu32SurveyResultsCount);
extern s32 DeallocateSurveyResults(wid_site_survey_reslts_s *pstrSurveyResults);
#endif
extern s32 SendRawPacket(s8 *pspacket, s32 s32PacketLen);
extern void NetworkInfoReceived(u8 *pu8Buffer, u32 u32Length);
void GnrlAsyncInfoReceived(u8 *pu8Buffer, u32 u32Length);
void host_int_ScanCompleteReceived(u8 *pu8Buffer, u32 u32Length);
#endif