/*****************************************************************************

            (c) Cambridge Silicon Radio Limited 2011
            All rights reserved and confidential information of CSR

            Refer to LICENSE.txt included with this source for details
            on the license terms.

*****************************************************************************/

/* Note: this is an auto-generated file. */

#ifndef CSR_WIFI_NME_PRIM_H__
#define CSR_WIFI_NME_PRIM_H__

#include <linux/types.h>
#include "csr_prim_defs.h"
#include "csr_sched.h"
#include "csr_wifi_common.h"
#include "csr_result.h"
#include "csr_wifi_fsm_event.h"
#include "csr_wifi_sme_prim.h"

#ifdef __cplusplus
extern "C" {
#endif

#ifndef CSR_WIFI_NME_ENABLE
#error CSR_WIFI_NME_ENABLE MUST be defined inorder to use csr_wifi_nme_prim.h
#endif

#define CSR_WIFI_NME_PRIM                                               (0x0424)

typedef CsrPrim CsrWifiNmePrim;

typedef void (*CsrWifiNmeFrameFreeFunction)(void *frame);

/*******************************************************************************

  NAME
    CsrWifiNmeAuthMode

  DESCRIPTION
    WiFi Authentication Mode

 VALUES
    CSR_WIFI_NME_AUTH_MODE_80211_OPEN
                   - Connects to an open system network (i.e. no authentication,
                     no encryption) or to a WEP enabled network.
    CSR_WIFI_NME_AUTH_MODE_80211_SHARED
                   - Connect to a WEP enabled network.
    CSR_WIFI_NME_AUTH_MODE_8021X_WPA
                   - Connects to a WPA Enterprise enabled network.
    CSR_WIFI_NME_AUTH_MODE_8021X_WPAPSK
                   - Connects to a WPA with Pre-Shared Key enabled network.
    CSR_WIFI_NME_AUTH_MODE_8021X_WPA2
                   - Connects to a WPA2 Enterprise enabled network.
    CSR_WIFI_NME_AUTH_MODE_8021X_WPA2PSK
                   - Connects to a WPA2 with Pre-Shared Key enabled network.
    CSR_WIFI_NME_AUTH_MODE_8021X_CCKM
                   - Connects to a CCKM enabled network.
    CSR_WIFI_NME_AUTH_MODE_WAPI_WAI
                   - Connects to a WAPI Enterprise enabled network.
    CSR_WIFI_NME_AUTH_MODE_WAPI_WAIPSK
                   - Connects to a WAPI with Pre-Shared Key enabled network.
    CSR_WIFI_NME_AUTH_MODE_8021X_OTHER1X
                   - For future use.

*******************************************************************************/
typedef u16 CsrWifiNmeAuthMode;
#define CSR_WIFI_NME_AUTH_MODE_80211_OPEN      ((CsrWifiNmeAuthMode) 0x0001)
#define CSR_WIFI_NME_AUTH_MODE_80211_SHARED    ((CsrWifiNmeAuthMode) 0x0002)
#define CSR_WIFI_NME_AUTH_MODE_8021X_WPA       ((CsrWifiNmeAuthMode) 0x0004)
#define CSR_WIFI_NME_AUTH_MODE_8021X_WPAPSK    ((CsrWifiNmeAuthMode) 0x0008)
#define CSR_WIFI_NME_AUTH_MODE_8021X_WPA2      ((CsrWifiNmeAuthMode) 0x0010)
#define CSR_WIFI_NME_AUTH_MODE_8021X_WPA2PSK   ((CsrWifiNmeAuthMode) 0x0020)
#define CSR_WIFI_NME_AUTH_MODE_8021X_CCKM      ((CsrWifiNmeAuthMode) 0x0040)
#define CSR_WIFI_NME_AUTH_MODE_WAPI_WAI        ((CsrWifiNmeAuthMode) 0x0080)
#define CSR_WIFI_NME_AUTH_MODE_WAPI_WAIPSK     ((CsrWifiNmeAuthMode) 0x0100)
#define CSR_WIFI_NME_AUTH_MODE_8021X_OTHER1X   ((CsrWifiNmeAuthMode) 0x0200)

/*******************************************************************************

  NAME
    CsrWifiNmeBssType

  DESCRIPTION
    Type of BSS

 VALUES
    CSR_WIFI_NME_BSS_TYPE_INFRASTRUCTURE
                   - Infrastructure BSS type where access to the network is via
                     one or several Access Points.
    CSR_WIFI_NME_BSS_TYPE_ADHOC
                   - Adhoc or Independent BSS Type where one Station acts as a
                     host and future stations can join the adhoc network without
                     needing an access point.
    CSR_WIFI_NME_BSS_TYPE_RESERVED
                   - To be in sync with SME.This is not used.
    CSR_WIFI_NME_BSS_TYPE_P2P
                   - P2P mode of operation.

*******************************************************************************/
typedef u8 CsrWifiNmeBssType;
#define CSR_WIFI_NME_BSS_TYPE_INFRASTRUCTURE   ((CsrWifiNmeBssType) 0x00)
#define CSR_WIFI_NME_BSS_TYPE_ADHOC            ((CsrWifiNmeBssType) 0x01)
#define CSR_WIFI_NME_BSS_TYPE_RESERVED         ((CsrWifiNmeBssType) 0x02)
#define CSR_WIFI_NME_BSS_TYPE_P2P              ((CsrWifiNmeBssType) 0x03)

/*******************************************************************************

  NAME
    CsrWifiNmeCcxOptionsMask

  DESCRIPTION
    Enumeration type defining possible mask values for setting CCX options.

 VALUES
    CSR_WIFI_NME_CCX_OPTION_NONE - No CCX option is set.
    CSR_WIFI_NME_CCX_OPTION_CCKM - CCX option cckm is set.

*******************************************************************************/
typedef u8 CsrWifiNmeCcxOptionsMask;
#define CSR_WIFI_NME_CCX_OPTION_NONE   ((CsrWifiNmeCcxOptionsMask) 0x00)
#define CSR_WIFI_NME_CCX_OPTION_CCKM   ((CsrWifiNmeCcxOptionsMask) 0x01)

/*******************************************************************************

  NAME
    CsrWifiNmeConfigAction

  DESCRIPTION

 VALUES
    CSR_WIFI_PIN_ENTRY_PUSH_BUTTON -
    CSR_WIFI_PIN_ENTRY_DISPLAY_PIN -
    CSR_WIFI_PIN_ENTRY_ENTER_PIN   -

*******************************************************************************/
typedef u8 CsrWifiNmeConfigAction;
#define CSR_WIFI_PIN_ENTRY_PUSH_BUTTON   ((CsrWifiNmeConfigAction) 0x00)
#define CSR_WIFI_PIN_ENTRY_DISPLAY_PIN   ((CsrWifiNmeConfigAction) 0x01)
#define CSR_WIFI_PIN_ENTRY_ENTER_PIN     ((CsrWifiNmeConfigAction) 0x02)

/*******************************************************************************

  NAME
    CsrWifiNmeConnectionStatus

  DESCRIPTION
    Indicate the NME Connection Status when connecting or when disconnecting

 VALUES
    CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_DISCONNECTED
                   - NME is disconnected.
    CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_CONNECTING
                   - NME is in the process of connecting.
    CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_AUTHENTICATING
                   - NME is in the authentication stage of a connection attempt.
    CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_CONNECTED
                   - NME is connected.
    CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_DISCONNECTING
                   - NME is in the process of disconnecting.

*******************************************************************************/
typedef u8 CsrWifiNmeConnectionStatus;
#define CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_DISCONNECTED     ((CsrWifiNmeConnectionStatus) 0x00)
#define CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_CONNECTING       ((CsrWifiNmeConnectionStatus) 0x01)
#define CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_AUTHENTICATING   ((CsrWifiNmeConnectionStatus) 0x02)
#define CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_CONNECTED        ((CsrWifiNmeConnectionStatus) 0x03)
#define CSR_WIFI_NME_CONNECTION_STATUS_CONNECTION_STATUS_DISCONNECTING    ((CsrWifiNmeConnectionStatus) 0x04)

/*******************************************************************************

  NAME
    CsrWifiNmeCredentialType

  DESCRIPTION
    NME Credential Types

 VALUES
    CSR_WIFI_NME_CREDENTIAL_TYPE_OPEN_SYSTEM
                   - Credential Type Open System.
    CSR_WIFI_NME_CREDENTIAL_TYPE_WEP64
                   - Credential Type WEP-64
    CSR_WIFI_NME_CREDENTIAL_TYPE_WEP128
                   - Credential Type WEP-128
    CSR_WIFI_NME_CREDENTIAL_TYPE_WPA_PSK
                   - Credential Type WPA Pre-Shared Key
    CSR_WIFI_NME_CREDENTIAL_TYPE_WPA_PASSPHRASE
                   - Credential Type WPA pass phrase
    CSR_WIFI_NME_CREDENTIAL_TYPE_WPA2_PSK
                   - Credential Type WPA2 Pre-Shared Key.
    CSR_WIFI_NME_CREDENTIAL_TYPE_WPA2_PASSPHRASE
                   - Credential Type WPA2 pass phrase
    CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI_PSK
                   - Credential Type WAPI Pre-Shared Key.
    CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI_PASSPHRASE
                   - Credential Type WAPI pass phrase
    CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI
                   - Credential Type WAPI certificates
    CSR_WIFI_NME_CREDENTIAL_TYPE_8021X
                   - Credential Type 802.1X: the associated type supports
                     FAST/LEAP/TLS/TTLS/PEAP/etc.

*******************************************************************************/
typedef u16 CsrWifiNmeCredentialType;
#define CSR_WIFI_NME_CREDENTIAL_TYPE_OPEN_SYSTEM       ((CsrWifiNmeCredentialType) 0x0000)
#define CSR_WIFI_NME_CREDENTIAL_TYPE_WEP64             ((CsrWifiNmeCredentialType) 0x0001)
#define CSR_WIFI_NME_CREDENTIAL_TYPE_WEP128            ((CsrWifiNmeCredentialType) 0x0002)
#define CSR_WIFI_NME_CREDENTIAL_TYPE_WPA_PSK           ((CsrWifiNmeCredentialType) 0x0003)
#define CSR_WIFI_NME_CREDENTIAL_TYPE_WPA_PASSPHRASE    ((CsrWifiNmeCredentialType) 0x0004)
#define CSR_WIFI_NME_CREDENTIAL_TYPE_WPA2_PSK          ((CsrWifiNmeCredentialType) 0x0005)
#define CSR_WIFI_NME_CREDENTIAL_TYPE_WPA2_PASSPHRASE   ((CsrWifiNmeCredentialType) 0x0006)
#define CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI_PSK          ((CsrWifiNmeCredentialType) 0x0007)
#define CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI_PASSPHRASE   ((CsrWifiNmeCredentialType) 0x0008)
#define CSR_WIFI_NME_CREDENTIAL_TYPE_WAPI              ((CsrWifiNmeCredentialType) 0x0009)
#define CSR_WIFI_NME_CREDENTIAL_TYPE_8021X             ((CsrWifiNmeCredentialType) 0x000A)

/*******************************************************************************

  NAME
    CsrWifiNmeEapMethod

  DESCRIPTION
    Outer EAP method with possibly inner method.

 VALUES
    CSR_WIFI_NME_EAP_METHOD_TLS
                   - EAP-TLS Method.
    CSR_WIFI_NME_EAP_METHOD_TTLS_MSCHAPV2
                   - EAP-TTLS Method with MSCHAPV2.
    CSR_WIFI_NME_EAP_METHOD_PEAP_GTC
                   - EAP-PEAP Method with GTC.
    CSR_WIFI_NME_EAP_METHOD_PEAP_MSCHAPV2
                   - EAP-PEAP Method with MSCHAPV2.
    CSR_WIFI_NME_EAP_METHOD_SIM
                   - EAP-SIM Method.
    CSR_WIFI_NME_EAP_METHOD_AKA
                   - EAP-AKA Method.
    CSR_WIFI_NME_EAP_METHOD_FAST_GTC
                   - EAP-FAST Method with GTC.
    CSR_WIFI_NME_EAP_METHOD_FAST_MSCHAPV2
                   - EAP-FAST Method with MSCHAPV2.
    CSR_WIFI_NME_EAP_METHOD_LEAP
                   - EAP-LEAP Method.

*******************************************************************************/
typedef u16 CsrWifiNmeEapMethod;
#define CSR_WIFI_NME_EAP_METHOD_TLS             ((CsrWifiNmeEapMethod) 0x0001)
#define CSR_WIFI_NME_EAP_METHOD_TTLS_MSCHAPV2   ((CsrWifiNmeEapMethod) 0x0002)
#define CSR_WIFI_NME_EAP_METHOD_PEAP_GTC        ((CsrWifiNmeEapMethod) 0x0004)
#define CSR_WIFI_NME_EAP_METHOD_PEAP_MSCHAPV2   ((CsrWifiNmeEapMethod) 0x0008)
#define CSR_WIFI_NME_EAP_METHOD_SIM             ((CsrWifiNmeEapMethod) 0x0010)
#define CSR_WIFI_NME_EAP_METHOD_AKA             ((CsrWifiNmeEapMethod) 0x0020)
#define CSR_WIFI_NME_EAP_METHOD_FAST_GTC        ((CsrWifiNmeEapMethod) 0x0040)
#define CSR_WIFI_NME_EAP_METHOD_FAST_MSCHAPV2   ((CsrWifiNmeEapMethod) 0x0080)
#define CSR_WIFI_NME_EAP_METHOD_LEAP            ((CsrWifiNmeEapMethod) 0x0100)

/*******************************************************************************

  NAME
    CsrWifiNmeEncryption

  DESCRIPTION
    WiFi Encryption method

 VALUES
    CSR_WIFI_NME_ENCRYPTION_CIPHER_NONE
                   - No encryprion set.
    CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_WEP40
                   - 40 bytes WEP key for peer to peer communication.
    CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_WEP104
                   - 104 bytes WEP key for peer to peer communication.
    CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_TKIP
                   - TKIP key for peer to peer communication.
    CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_CCMP
                   - CCMP key for peer to peer communication.
    CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_SMS4
                   - SMS4 key for peer to peer communication.
    CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_WEP40
                   - 40 bytes WEP key for broadcast messages.
    CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_WEP104
                   - 104 bytes WEP key for broadcast messages.
    CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_TKIP
                   - TKIP key for broadcast messages.
    CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_CCMP
                   - CCMP key for broadcast messages
    CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_SMS4
                   - SMS4 key for broadcast messages.

*******************************************************************************/
typedef u16 CsrWifiNmeEncryption;
#define CSR_WIFI_NME_ENCRYPTION_CIPHER_NONE              ((CsrWifiNmeEncryption) 0x0000)
#define CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_WEP40    ((CsrWifiNmeEncryption) 0x0001)
#define CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_WEP104   ((CsrWifiNmeEncryption) 0x0002)
#define CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_TKIP     ((CsrWifiNmeEncryption) 0x0004)
#define CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_CCMP     ((CsrWifiNmeEncryption) 0x0008)
#define CSR_WIFI_NME_ENCRYPTION_CIPHER_PAIRWISE_SMS4     ((CsrWifiNmeEncryption) 0x0010)
#define CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_WEP40       ((CsrWifiNmeEncryption) 0x0020)
#define CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_WEP104      ((CsrWifiNmeEncryption) 0x0040)
#define CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_TKIP        ((CsrWifiNmeEncryption) 0x0080)
#define CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_CCMP        ((CsrWifiNmeEncryption) 0x0100)
#define CSR_WIFI_NME_ENCRYPTION_CIPHER_GROUP_SMS4        ((CsrWifiNmeEncryption) 0x0200)

/*******************************************************************************

  NAME
    CsrWifiNmeIndications

  DESCRIPTION
    NME indications

 VALUES
    CSR_WIFI_NME_INDICATIONS_IND_AP_STATION
                   - NME AP Station Indication.
    CSR_WIFI_NME_INDICATIONS_IND_AP_STOP
                   - NME AP Stop Indication.
    CSR_WIFI_NME_INDICATIONS_IND_SIM_UMTS_AUTH
                   - NME UMTS Authentication Indication.
    CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_START
                   - NME P2P Group Start Indication.
    CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_STATUS
                   - NME P2P Group Status Indication.
    CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_ROLE
                   - NME P2P Group Role Indication.
    CSR_WIFI_NME_INDICATIONS_IND_PROFILE_DISCONNECT
                   - NME Profile Disconnect Indication.
    CSR_WIFI_NME_INDICATIONS_IND_PROFILE_UPDATE
                   - NME Profile Update Indication.
    CSR_WIFI_NME_INDICATIONS_IND_SIM_IMSI_GET
                   - NME GET IMSI Indication.
    CSR_WIFI_NME_INDICATIONS_IND_SIM_GSM_AUTH
                   - NME GSM Authentication Indication.
    CSR_WIFI_NME_INDICATIONS_ALL
                   - Used to register for all available indications

*******************************************************************************/
typedef u32 CsrWifiNmeIndications;
#define CSR_WIFI_NME_INDICATIONS_IND_AP_STATION           ((CsrWifiNmeIndications) 0x00100000)
#define CSR_WIFI_NME_INDICATIONS_IND_AP_STOP              ((CsrWifiNmeIndications) 0x00200000)
#define CSR_WIFI_NME_INDICATIONS_IND_SIM_UMTS_AUTH        ((CsrWifiNmeIndications) 0x01000000)
#define CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_START      ((CsrWifiNmeIndications) 0x02000000)
#define CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_STATUS     ((CsrWifiNmeIndications) 0x04000000)
#define CSR_WIFI_NME_INDICATIONS_IND_P2P_GROUP_ROLE       ((CsrWifiNmeIndications) 0x08000000)
#define CSR_WIFI_NME_INDICATIONS_IND_PROFILE_DISCONNECT   ((CsrWifiNmeIndications) 0x10000000)
#define CSR_WIFI_NME_INDICATIONS_IND_PROFILE_UPDATE       ((CsrWifiNmeIndications) 0x20000000)
#define CSR_WIFI_NME_INDICATIONS_IND_SIM_IMSI_GET         ((CsrWifiNmeIndications) 0x40000000)
#define CSR_WIFI_NME_INDICATIONS_IND_SIM_GSM_AUTH         ((CsrWifiNmeIndications) 0x80000000)
#define CSR_WIFI_NME_INDICATIONS_ALL                      ((CsrWifiNmeIndications) 0xFFFFFFFF)

/*******************************************************************************

  NAME
    CsrWifiNmeSecError

  DESCRIPTION
    NME Security Errors
    place holder for the security library abort reason

 VALUES
    CSR_WIFI_NME_SEC_ERROR_SEC_ERROR_UNKNOWN
                   - Unknown Security Error.

*******************************************************************************/
typedef u8 CsrWifiNmeSecError;
#define CSR_WIFI_NME_SEC_ERROR_SEC_ERROR_UNKNOWN   ((CsrWifiNmeSecError) 0x00)

/*******************************************************************************

  NAME
    CsrWifiNmeSimCardType

  DESCRIPTION
    (U)SIM Card (or UICC) types

 VALUES
    CSR_WIFI_NME_SIM_CARD_TYPE_2G   - 2G SIM card, capable of performing GSM
                                      authentication only.
    CSR_WIFI_NME_SIM_CARD_TYPE_3G   - UICC supporting USIM application, capable
                                      of performing UMTS authentication only.
    CSR_WIFI_NME_SIM_CARD_TYPE_2G3G - UICC supporting both USIM and SIM
                                      applications, capable of performing both
                                      UMTS and GSM authentications.

*******************************************************************************/
typedef u8 CsrWifiNmeSimCardType;
#define CSR_WIFI_NME_SIM_CARD_TYPE_2G     ((CsrWifiNmeSimCardType) 0x01)
#define CSR_WIFI_NME_SIM_CARD_TYPE_3G     ((CsrWifiNmeSimCardType) 0x02)
#define CSR_WIFI_NME_SIM_CARD_TYPE_2G3G   ((CsrWifiNmeSimCardType) 0x03)

/*******************************************************************************

  NAME
    CsrWifiNmeUmtsAuthResult

  DESCRIPTION
    Only relevant for UMTS Authentication. It indicates if the UICC has
    successfully authenticated the network or otherwise.

 VALUES
    CSR_WIFI_NME_UMTS_AUTH_RESULT_SUCCESS
                   - Successful outcome from USIM indicating that the card has
                     successfully authenticated the network.
    CSR_WIFI_NME_UMTS_AUTH_RESULT_SYNC_FAIL
                   - Unsuccessful outcome from USIM indicating that the card is
                     requesting the network to synchronise and re-try again. If
                     no further request is received an NME timer will expire and
                     the authentication is aborted.
    CSR_WIFI_NME_UMTS_AUTH_RESULT_REJECT
                   - Unsuccessful outcome from USIM indicating that the card has
                     rejected the network and that the authentication is
                     aborted.

*******************************************************************************/
typedef u8 CsrWifiNmeUmtsAuthResult;
#define CSR_WIFI_NME_UMTS_AUTH_RESULT_SUCCESS     ((CsrWifiNmeUmtsAuthResult) 0x00)
#define CSR_WIFI_NME_UMTS_AUTH_RESULT_SYNC_FAIL   ((CsrWifiNmeUmtsAuthResult) 0x01)
#define CSR_WIFI_NME_UMTS_AUTH_RESULT_REJECT      ((CsrWifiNmeUmtsAuthResult) 0x02)

/*******************************************************************************

  NAME
    CsrWifiNmeWmmQosInfo

  DESCRIPTION
    Defines bits for the QoS Info octect as defined in the WMM specification.
    The values of this type are used across the NME/SME/Router API's and they
    must be kept consistent with the corresponding types in the .xml of the
    other interfaces

 VALUES
    CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_ALL
                   - WMM AP may deliver all buffered frames.
    CSR_WIFI_NME_WMM_QOS_INFO_AC_VO
                   - To enable the triggering and delivery of QoS Voice.
    CSR_WIFI_NME_WMM_QOS_INFO_AC_VI
                   - To enable the triggering and delivery of QoS Video.
    CSR_WIFI_NME_WMM_QOS_INFO_AC_BK
                   - To enable the triggering and delivery of QoS Background.
    CSR_WIFI_NME_WMM_QOS_INFO_AC_BE
                   - To enable the triggering and delivery of QoS Best Effort.
    CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_TWO
                   - WMM AP may deliver a maximum of 2 buffered frames per
                     Unscheduled Service Period (USP).
    CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_FOUR
                   - WMM AP may deliver a maximum of 4 buffered frames per USP.
    CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_SIX
                   - WMM AP may deliver a maximum of 6 buffered frames per USP.

*******************************************************************************/
typedef u8 CsrWifiNmeWmmQosInfo;
#define CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_ALL    ((CsrWifiNmeWmmQosInfo) 0x00)
#define CSR_WIFI_NME_WMM_QOS_INFO_AC_VO            ((CsrWifiNmeWmmQosInfo) 0x01)
#define CSR_WIFI_NME_WMM_QOS_INFO_AC_VI            ((CsrWifiNmeWmmQosInfo) 0x02)
#define CSR_WIFI_NME_WMM_QOS_INFO_AC_BK            ((CsrWifiNmeWmmQosInfo) 0x04)
#define CSR_WIFI_NME_WMM_QOS_INFO_AC_BE            ((CsrWifiNmeWmmQosInfo) 0x08)
#define CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_TWO    ((CsrWifiNmeWmmQosInfo) 0x20)
#define CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_FOUR   ((CsrWifiNmeWmmQosInfo) 0x40)
#define CSR_WIFI_NME_WMM_QOS_INFO_AC_MAX_SP_SIX    ((CsrWifiNmeWmmQosInfo) 0x60)


/*******************************************************************************

  NAME
    CsrWifiNmeEapMethodMask

  DESCRIPTION
    Mask type for use with the values defined by CsrWifiNmeEapMethod.

*******************************************************************************/
typedef u16 CsrWifiNmeEapMethodMask;
/*******************************************************************************

  NAME
    CsrWifiNmeEncryptionMask

  DESCRIPTION
    Mask type for use with the values defined by CsrWifiNmeEncryption

*******************************************************************************/
typedef u16 CsrWifiNmeEncryptionMask;
/*******************************************************************************

  NAME
    CsrWifiNmeIndicationsMask

  DESCRIPTION
    Mask type for use with the values defined by CsrWifiNmeIndications

*******************************************************************************/
typedef u32 CsrWifiNmeIndicationsMask;
/*******************************************************************************

  NAME
    CsrWifiNmeNmeIndicationsMask

  DESCRIPTION
    Mask type for use with the values defined by CsrWifiNmeNmeIndications.
    Used to overlap the unused portion of the unifi_IndicationsMask For NME
    specific indications

*******************************************************************************/
typedef u32 CsrWifiNmeNmeIndicationsMask;
/*******************************************************************************

  NAME
    CsrWifiNmeWmmQosInfoMask

  DESCRIPTION
    Mask type for use with the values defined by CsrWifiNmeWmmQosInfo

*******************************************************************************/
typedef u8 CsrWifiNmeWmmQosInfoMask;


/*******************************************************************************

  NAME
    CsrWifiNmeEmpty

  DESCRIPTION
    Empty Structure to indicate that no credentials are available.

  MEMBERS
    empty  - Only element of the empty structure (always set to 0).

*******************************************************************************/
typedef struct
{
    u8 empty;
} CsrWifiNmeEmpty;

/*******************************************************************************

  NAME
    CsrWifiNmePassphrase

  DESCRIPTION
    Structure holding the ASCII Pass Phrase data.

  MEMBERS
    encryptionMode - Encryption type as defined in CsrWifiSmeEncryption.
    passphrase     - Pass phrase ASCII value.

*******************************************************************************/
typedef struct
{
    u16      encryptionMode;
    char *passphrase;
} CsrWifiNmePassphrase;

/*******************************************************************************

  NAME
    CsrWifiNmePsk

  DESCRIPTION
    Structure holding the Pre-Shared Key data.

  MEMBERS
    encryptionMode - Encryption type as defined in CsrWifiSmeEncryption.
    psk            - Pre-Shared Key value.

*******************************************************************************/
typedef struct
{
    u16 encryptionMode;
    u8  psk[32];
} CsrWifiNmePsk;

/*******************************************************************************

  NAME
    CsrWifiNmeWapiCredentials

  DESCRIPTION
    Structure holding WAPI credentials data.

  MEMBERS
    certificateLength   - Length in bytes of the following client certificate.
    certificate         - The actual client certificate data (if present).
                          DER/PEM format supported.
    privateKeyLength    - Length in bytes of the following private key.
    privateKey          - The actual private key. DER/PEM format.
    caCertificateLength - Length in bytes of the following certificate authority
                          certificate.
    caCertificate       - The actual certificate authority certificate data. If
                          not supplied the received certificate authority
                          certificate is assumed to be validate, if present the
                          received certificate is validated against it. DER/PEM
                          format supported.

*******************************************************************************/
typedef struct
{
    u32 certificateLength;
    u8 *certificate;
    u16 privateKeyLength;
    u8 *privateKey;
    u32 caCertificateLength;
    u8 *caCertificate;
} CsrWifiNmeWapiCredentials;

/*******************************************************************************

  NAME
    CsrWifiNmeConnectAttempt

  DESCRIPTION
    Structure holding Connection attempt data.

  MEMBERS
    bssid         - Id of Basic Service Set connections attempt have been made
                    to.
    status        - Status returned to indicate the success or otherwise of the
                    connection attempt.
    securityError - Security error status indicating the nature of the failure
                    to connect.

*******************************************************************************/
typedef struct
{
    CsrWifiMacAddress  bssid;
    CsrResult          status;
    CsrWifiNmeSecError securityError;
} CsrWifiNmeConnectAttempt;

/*******************************************************************************

  NAME
    CsrWifiNmeEapCredentials

  DESCRIPTION
    Supports the use of multiple EAP methods via a single structure. The
    methods required are indicated by the value set in the eapMethodMask

  MEMBERS
    eapMethodMask
                   - Bit mask of supported EAP methods
                     Currently only supports the setting of one bit.
                     Required for all the EAP methods.
    authMode
                   - Bit mask representing the authentication types that may be
                     supported by a suitable AP. An AP must support at least one
                     of the authentication types specified to be considered for
                     connection. Required for all EAP methods.
    encryptionMode
                   - Bit mask representing the encryption types that may be
                     supported by a suitable AP. An AP must support a suitable
                     mix of the pairwise and group encryption types requested to
                     be considered for connection. Required for all EAP methods.
    userName
                   - User name. Required for all EAP methods except: SIM or AKA.
    userPassword
                   - User Password. Required for all EAP methods except: TLS,
                     SIM or AKA.
    authServerUserIdentity
                   - Authentication server user Identity. Required for all EAP
                     methods except: TLS, SIM, AKA or FAST.
    clientCertificateLength
                   - Length in bytes of the following client certificate (if
                     present). Only required for TLS.
    clientCertificate
                   - The actual client certificate data (if present). Only
                     required for TLS. DER/PEM format supported.
    certificateAuthorityCertificateLength
                   - Length in bytes of the following certificate authority
                     certificate (if present). Optional for TLS, TTLS, PEAP.
    certificateAuthorityCertificate
                   - The actual certificate authority certificate data (if
                     present). If not supplied the received certificate
                     authority certificate is assumed to be valid, if present
                     the received certificate is validated against it. Optional
                     for TLS, TTLS, PEAP. DER/PEM format supported.
    privateKeyLength
                   - Length in bytes of the following private key (if present).
                     Only required for TLS.
    privateKey
                   - The actual private key (if present). Only required for TLS.
                     DER/PEM format, maybe password protected.
    privateKeyPassword
                   - Optional password to protect the private key.
    sessionLength
                   - Length in bytes of the following session field Supported
                     for all EAP methods except: SIM or AKA.
    session
                   - Session information to support faster re-authentication.
                     Supported for all EAP methods except: SIM or AKA.
    allowPacProvisioning
                   - If TRUE: PAC provisioning is allowed 'over-the_air';
                     If FALSE: a PAC must be supplied.
                     Only required for FAST.
    pacLength
                   - Length the following PAC field. If allowPacProvisioning is
                     FALSE then the PAC MUST be supplied (i.e. non-zero). Only
                     required for FAST.
    pac
                   - The actual PAC data. If allowPacProvisioning is FALSE then
                     the PAC MUST be supplied. Only required for FAST.
    pacPassword
                   - Optional password to protect the PAC. Only required for
                     FAST.

*******************************************************************************/
typedef struct
{
    CsrWifiNmeEapMethodMask  eapMethodMask;
    CsrWifiSmeAuthModeMask   authMode;
    CsrWifiNmeEncryptionMask encryptionMode;
    char           *userName;
    char           *userPassword;
    char           *authServerUserIdentity;
    u32                clientCertificateLength;
    u8                *clientCertificate;
    u32                certificateAuthorityCertificateLength;
    u8                *certificateAuthorityCertificate;
    u16                privateKeyLength;
    u8                *privateKey;
    char           *privateKeyPassword;
    u32                sessionLength;
    u8                *session;
    u8                  allowPacProvisioning;
    u32                pacLength;
    u8                *pac;
    char           *pacPassword;
} CsrWifiNmeEapCredentials;

/*******************************************************************************

  NAME
    CsrWifiNmePeerConfig

  DESCRIPTION
    Structure holding Peer Config data.

  MEMBERS
    p2pDeviceId         -
    groupCapabilityMask -
    groupOwnerIntent    -

*******************************************************************************/
typedef struct
{
    CsrWifiMacAddress                p2pDeviceId;
    CsrWifiSmeP2pGroupCapabilityMask groupCapabilityMask;
    u8                         groupOwnerIntent;
} CsrWifiNmePeerConfig;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileIdentity

  DESCRIPTION
    The identity of a profile is defined as the unique combination the BSSID
    and SSID.

  MEMBERS
    bssid  - ID of Basic Service Set for or the P2pDevice address of the GO for
             which a connection attempt was made.
    ssid   - Service Set Id.

*******************************************************************************/
typedef struct
{
    CsrWifiMacAddress bssid;
    CsrWifiSsid       ssid;
} CsrWifiNmeProfileIdentity;

/*******************************************************************************

  NAME
    CsrWifiNmeWep128Keys

  DESCRIPTION
    Structure holding WEP Authentication Type and WEP keys that can be used
    when using WEP128.

  MEMBERS
    wepAuthType    - Mask to select the WEP authentication type (Open or Shared)
    selectedWepKey - Index to one of the four keys below indicating the
                     currently used WEP key.
    key1           - Value for key number 1.
    key2           - Value for key number 2.
    key3           - Value for key number 3.
    key4           - Value for key number 4.

*******************************************************************************/
typedef struct
{
    CsrWifiSmeAuthModeMask wepAuthType;
    u8               selectedWepKey;
    u8               key1[13];
    u8               key2[13];
    u8               key3[13];
    u8               key4[13];
} CsrWifiNmeWep128Keys;

/*******************************************************************************

  NAME
    CsrWifiNmeWep64Keys

  DESCRIPTION
    Structure for holding WEP Authentication Type and WEP keys that can be
    used when using WEP64.

  MEMBERS
    wepAuthType    - Mask to select the WEP authentication type (Open or Shared)
    selectedWepKey - Index to one of the four keys below indicating the
                     currently used WEP key.
    key1           - Value for key number 1.
    key2           - Value for key number 2.
    key3           - Value for key number 3.
    key4           - Value for key number 4.

*******************************************************************************/
typedef struct
{
    CsrWifiSmeAuthModeMask wepAuthType;
    u8               selectedWepKey;
    u8               key1[5];
    u8               key2[5];
    u8               key3[5];
    u8               key4[5];
} CsrWifiNmeWep64Keys;

/*******************************************************************************

  NAME
    CsrWifiNmeCredentials

  DESCRIPTION
    Structure containing the Credentials data.

  MEMBERS
    credentialType            - Credential type value (as defined in the
                                enumeration type).
    credential                - Union containing credentials which depends on
                                credentialType parameter.
    credentialeap             -
    credentialwapiPassphrase  -
    credentialwpa2Passphrase  -
    credentialwpa2Psk         -
    credentialwapiPsk         -
    credentialwpaPassphrase   -
    credentialwapi            -
    credentialwep128Key       -
    credentialwpaPsk          -
    credentialopenSystem      -
    credentialwep64Key        -

*******************************************************************************/
typedef struct
{
    CsrWifiNmeCredentialType credentialType;
    union {
        CsrWifiNmeEapCredentials  eap;
        CsrWifiNmePassphrase      wapiPassphrase;
        CsrWifiNmePassphrase      wpa2Passphrase;
        CsrWifiNmePsk             wpa2Psk;
        CsrWifiNmePsk             wapiPsk;
        CsrWifiNmePassphrase      wpaPassphrase;
        CsrWifiNmeWapiCredentials wapi;
        CsrWifiNmeWep128Keys      wep128Key;
        CsrWifiNmePsk             wpaPsk;
        CsrWifiNmeEmpty           openSystem;
        CsrWifiNmeWep64Keys       wep64Key;
    } credential;
} CsrWifiNmeCredentials;

/*******************************************************************************

  NAME
    CsrWifiNmeProfile

  DESCRIPTION
    Structure containing the Profile data.

  MEMBERS
    profileIdentity - Profile Identity.
    wmmQosInfoMask  - Mask for WMM QoS information.
    bssType         - Type of BSS (Infrastructure or Adhoc).
    channelNo       - Channel Number.
    ccxOptionsMask  - Options mask for Cisco Compatible Extentions.
    cloakedSsid     - Flag to decide whether the SSID is cloaked (not
                      transmitted) or not.
    credentials     - Credentials data.

*******************************************************************************/
typedef struct
{
    CsrWifiNmeProfileIdentity profileIdentity;
    CsrWifiNmeWmmQosInfoMask  wmmQosInfoMask;
    CsrWifiNmeBssType         bssType;
    u8                  channelNo;
    u8                  ccxOptionsMask;
    u8                   cloakedSsid;
    CsrWifiNmeCredentials     credentials;
} CsrWifiNmeProfile;


/* Downstream */
#define CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST            (0x0000)

#define CSR_WIFI_NME_PROFILE_SET_REQ                      ((CsrWifiNmePrim) (0x0000 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_PROFILE_DELETE_REQ                   ((CsrWifiNmePrim) (0x0001 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_PROFILE_DELETE_ALL_REQ               ((CsrWifiNmePrim) (0x0002 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_PROFILE_ORDER_SET_REQ                ((CsrWifiNmePrim) (0x0003 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_PROFILE_CONNECT_REQ                  ((CsrWifiNmePrim) (0x0004 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_WPS_REQ                              ((CsrWifiNmePrim) (0x0005 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_WPS_CANCEL_REQ                       ((CsrWifiNmePrim) (0x0006 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_CONNECTION_STATUS_GET_REQ            ((CsrWifiNmePrim) (0x0007 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_SIM_IMSI_GET_RES                     ((CsrWifiNmePrim) (0x0008 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_SIM_GSM_AUTH_RES                     ((CsrWifiNmePrim) (0x0009 + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_SIM_UMTS_AUTH_RES                    ((CsrWifiNmePrim) (0x000A + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_WPS_CONFIG_SET_REQ                   ((CsrWifiNmePrim) (0x000B + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))
#define CSR_WIFI_NME_EVENT_MASK_SET_REQ                   ((CsrWifiNmePrim) (0x000C + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST))


#define CSR_WIFI_NME_PRIM_DOWNSTREAM_HIGHEST           (0x000C + CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST)

/* Upstream */
#define CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST              (0x0000 + CSR_PRIM_UPSTREAM)

#define CSR_WIFI_NME_PROFILE_SET_CFM                      ((CsrWifiNmePrim)(0x0000 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_PROFILE_DELETE_CFM                   ((CsrWifiNmePrim)(0x0001 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_PROFILE_DELETE_ALL_CFM               ((CsrWifiNmePrim)(0x0002 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_PROFILE_ORDER_SET_CFM                ((CsrWifiNmePrim)(0x0003 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_PROFILE_CONNECT_CFM                  ((CsrWifiNmePrim)(0x0004 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_WPS_CFM                              ((CsrWifiNmePrim)(0x0005 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_WPS_CANCEL_CFM                       ((CsrWifiNmePrim)(0x0006 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_CONNECTION_STATUS_GET_CFM            ((CsrWifiNmePrim)(0x0007 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_PROFILE_UPDATE_IND                   ((CsrWifiNmePrim)(0x0008 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_PROFILE_DISCONNECT_IND               ((CsrWifiNmePrim)(0x0009 + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_SIM_IMSI_GET_IND                     ((CsrWifiNmePrim)(0x000A + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_SIM_GSM_AUTH_IND                     ((CsrWifiNmePrim)(0x000B + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_SIM_UMTS_AUTH_IND                    ((CsrWifiNmePrim)(0x000C + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_WPS_CONFIG_SET_CFM                   ((CsrWifiNmePrim)(0x000D + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))
#define CSR_WIFI_NME_EVENT_MASK_SET_CFM                   ((CsrWifiNmePrim)(0x000E + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST))

#define CSR_WIFI_NME_PRIM_UPSTREAM_HIGHEST             (0x000E + CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST)

#define CSR_WIFI_NME_PRIM_DOWNSTREAM_COUNT             (CSR_WIFI_NME_PRIM_DOWNSTREAM_HIGHEST + 1 - CSR_WIFI_NME_PRIM_DOWNSTREAM_LOWEST)
#define CSR_WIFI_NME_PRIM_UPSTREAM_COUNT               (CSR_WIFI_NME_PRIM_UPSTREAM_HIGHEST   + 1 - CSR_WIFI_NME_PRIM_UPSTREAM_LOWEST)

/*******************************************************************************

  NAME
    CsrWifiNmeProfileSetReq

  DESCRIPTION
    Creates or updates an existing profile in the NME that matches the unique
    identity of the profile. Each profile is identified by the combination of
    BSSID and SSID. The profile contains all the required credentials for
    attempting to connect to the network. Creating or updating a profile via
    the NME PROFILE SET REQ does NOT add the profile to the preferred profile
    list within the NME used for the NME auto-connect behaviour.

  MEMBERS
    common  - Common header for use with the CsrWifiFsm Module
    profile - Specifies the identity and credentials of the network.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent   common;
    CsrWifiNmeProfile profile;
} CsrWifiNmeProfileSetReq;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileDeleteReq

  DESCRIPTION
    Will delete the profile with a matching identity, but does NOT modify the
    preferred profile list.

  MEMBERS
    common          - Common header for use with the CsrWifiFsm Module
    profileIdentity - Identity (BSSID, SSID) of profile to be deleted.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent           common;
    CsrWifiNmeProfileIdentity profileIdentity;
} CsrWifiNmeProfileDeleteReq;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileDeleteAllReq

  DESCRIPTION
    Deletes all profiles present in the NME, but does NOT modify the
    preferred profile list.

  MEMBERS
    common - Common header for use with the CsrWifiFsm Module

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
} CsrWifiNmeProfileDeleteAllReq;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileOrderSetReq

  DESCRIPTION
    Defines the preferred order that profiles present in the NME should be
    used during the NME auto-connect behaviour.
    If profileIdentitysCount == 0, it removes any existing preferred profile
    list already present in the NME, effectively disabling the auto-connect
    behaviour.
    NOTE: Profile identities that do not match any profile stored in the NME
    are ignored during the auto-connect procedure.
    NOTE: during auto-connect the NME will only attempt to join an existing
    adhoc network and it will never attempt to host an adhoc network; for
    hosting and adhoc network, use CSR_WIFI_NME_PROFILE_CONNECT_REQ

  MEMBERS
    common                - Common header for use with the CsrWifiFsm Module
    interfaceTag          - Interface Identifier; unique identifier of an
                            interface
    profileIdentitysCount - The number of profiles identities in the list.
    profileIdentitys      - Points to the list of profile identities.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent            common;
    u16                  interfaceTag;
    u8                   profileIdentitysCount;
    CsrWifiNmeProfileIdentity *profileIdentitys;
} CsrWifiNmeProfileOrderSetReq;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileConnectReq

  DESCRIPTION
    Requests the NME to attempt to connect to the specified profile.
    Overrides any current connection attempt.

  MEMBERS
    common          - Common header for use with the CsrWifiFsm Module
    interfaceTag    - Interface Identifier; unique identifier of an interface
    profileIdentity - Identity (BSSID, SSID) of profile to be connected to.
                      It must match an existing profile in the NME.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent           common;
    u16                 interfaceTag;
    CsrWifiNmeProfileIdentity profileIdentity;
} CsrWifiNmeProfileConnectReq;

/*******************************************************************************

  NAME
    CsrWifiNmeWpsReq

  DESCRIPTION
    Requests the NME to look for WPS enabled APs and attempt to perform WPS
    to determine the appropriate security credentials to connect to the AP.
    If the PIN == '00000000' then 'push button mode' is indicated, otherwise
    the PIN has to match that of the AP. 4 digit pin is passed by sending the
    pin digits in pin[0]..pin[3] and rest of the contents filled with '-'.

  MEMBERS
    common       - Common header for use with the CsrWifiFsm Module
    interfaceTag - Interface Identifier; unique identifier of an interface
    pin          - PIN value.
    ssid         - Service Set identifier
    bssid        - ID of Basic Service Set for which a WPS connection attempt is
                   being made.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent   common;
    u16         interfaceTag;
    u8          pin[8];
    CsrWifiSsid       ssid;
    CsrWifiMacAddress bssid;
} CsrWifiNmeWpsReq;

/*******************************************************************************

  NAME
    CsrWifiNmeWpsCancelReq

  DESCRIPTION
    Requests the NME to cancel any WPS procedure that it is currently
    performing. This includes WPS registrar activities started because of
    CSR_WIFI_NME_AP_REGISTER.request

  MEMBERS
    common       - Common header for use with the CsrWifiFsm Module
    interfaceTag - Interface Identifier; unique identifier of an interface

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    u16       interfaceTag;
} CsrWifiNmeWpsCancelReq;

/*******************************************************************************

  NAME
    CsrWifiNmeConnectionStatusGetReq

  DESCRIPTION
    Requests the current connection status of the NME.

  MEMBERS
    common       - Common header for use with the CsrWifiFsm Module
    interfaceTag - Interface Identifier; unique identifier of an interface

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    u16       interfaceTag;
} CsrWifiNmeConnectionStatusGetReq;

/*******************************************************************************

  NAME
    CsrWifiNmeSimImsiGetRes

  DESCRIPTION
    Response from the application that received the NME SIM IMSI GET IND.

  MEMBERS
    common   - Common header for use with the CsrWifiFsm Module
    status   - Indicates the outcome of the requested operation: STATUS_SUCCESS
               or STATUS_ERROR.
    imsi     - The value of the IMSI obtained from the UICC.
    cardType - The UICC type (GSM only (SIM), UMTS only (USIM), Both).

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent       common;
    CsrResult             status;
    char        *imsi;
    CsrWifiNmeSimCardType cardType;
} CsrWifiNmeSimImsiGetRes;

/*******************************************************************************

  NAME
    CsrWifiNmeSimGsmAuthRes

  DESCRIPTION
    Response from the application that received the NME SIM GSM AUTH IND. For
    each GSM authentication round a GSM Ciphering key (Kc) and a signed
    response (SRES) are produced. Since 2 or 3 GSM authentication rounds are
    used the 2 or 3 Kc's obtained respectively are combined into one buffer
    and similarly the 2 or 3 SRES's obtained are combined into another
    buffer. The order of Kc values (SRES values respectively) in their buffer
    is the same as that of their corresponding RAND values in the incoming
    indication.

  MEMBERS
    common     - Common header for use with the CsrWifiFsm Module
    status     - Indicates the outcome of the requested operation:
                 STATUS_SUCCESS or STATUS_ERROR
    kcsLength  - Length in Bytes of Kc buffer. Legal values are: 16 or 24.
    kcs        - Kc buffer holding 2 or 3 Kc values.
    sresLength - Length in Bytes of SRES buffer. Legal values are: 8 or 12.
    sres       - SRES buffer holding 2 or 3 SRES values.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    CsrResult       status;
    u8        kcsLength;
    u8       *kcs;
    u8        sresLength;
    u8       *sres;
} CsrWifiNmeSimGsmAuthRes;

/*******************************************************************************

  NAME
    CsrWifiNmeSimUmtsAuthRes

  DESCRIPTION
    Response from the application that received the NME SIM UMTS AUTH IND.
    The values of umtsCipherKey, umtsIntegrityKey, resParameterLength and
    resParameter are only meanigful when result = UMTS_AUTH_RESULT_SUCCESS.
    The value of auts is only meaningful when
    result=UMTS_AUTH_RESULT_SYNC_FAIL.

  MEMBERS
    common             - Common header for use with the CsrWifiFsm Module
    status             - Indicates the outcome of the requested operation:
                         STATUS_SUCCESS or STATUS_ERROR.
    result             - The result of UMTS authentication as performed by the
                         UICC which could be: Success, Authentication Reject or
                         Synchronisation Failure. For all these 3 outcomes the
                         value of status is success.
    umtsCipherKey      - The UMTS Cipher Key as calculated and returned by the
                         UICC.
    umtsIntegrityKey   - The UMTS Integrity Key as calculated and returned by
                         the UICC.
    resParameterLength - The length (in bytes) of the RES parameter (min=4; max
                         = 16).
    resParameter       - The RES parameter as calculated and returned by the
                         UICC.
    auts               - The AUTS parameter as calculated and returned by the
                         UICC.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent          common;
    CsrResult                status;
    CsrWifiNmeUmtsAuthResult result;
    u8                 umtsCipherKey[16];
    u8                 umtsIntegrityKey[16];
    u8                 resParameterLength;
    u8                *resParameter;
    u8                 auts[14];
} CsrWifiNmeSimUmtsAuthRes;

/*******************************************************************************

  NAME
    CsrWifiNmeWpsConfigSetReq

  DESCRIPTION
    This primitive passes the WPS information for the device to NME. This may
    be accepted only if no interface is active.

  MEMBERS
    common    - Common header for use with the CsrWifiFsm Module
    wpsConfig - WPS config.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent     common;
    CsrWifiSmeWpsConfig wpsConfig;
} CsrWifiNmeWpsConfigSetReq;

/*******************************************************************************

  NAME
    CsrWifiNmeEventMaskSetReq

  DESCRIPTION
    The wireless manager application may register with the NME to receive
    notification of interesting events. Indications will be sent only if the
    wireless manager explicitly registers to be notified of that event.
    indMask is a bit mask of values defined in CsrWifiNmeIndicationsMask.

  MEMBERS
    common  - Common header for use with the CsrWifiFsm Module
    indMask - Set mask with values from CsrWifiNmeIndications

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent           common;
    CsrWifiNmeIndicationsMask indMask;
} CsrWifiNmeEventMaskSetReq;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileSetCfm

  DESCRIPTION
    Reports the status of the NME PROFILE SET REQ; the request will only fail
    if the details specified in the profile contains an invalid combination
    of parameters for example specifying the profile as cloaked but not
    specifying the SSID. The NME doesn't limit the number of profiles that
    may be created. The NME assumes that the entity configuring it is aware
    of the appropriate limits.

  MEMBERS
    common - Common header for use with the CsrWifiFsm Module
    status - Indicates the success or otherwise of the requested operation.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    CsrResult       status;
} CsrWifiNmeProfileSetCfm;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileDeleteCfm

  DESCRIPTION
    Reports the status of the CSR_WIFI_NME_PROFILE_DELETE_REQ.
    Returns CSR_WIFI_NME_STATUS_NOT_FOUND if there is no matching profile.

  MEMBERS
    common - Common header for use with the CsrWifiFsm Module
    status - Indicates the success or otherwise of the requested operation.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    CsrResult       status;
} CsrWifiNmeProfileDeleteCfm;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileDeleteAllCfm

  DESCRIPTION
    Reports the status of the CSR_WIFI_NME_PROFILE_DELETE_ALL_REQ.
    Returns always CSR_WIFI_NME_STATUS_SUCCESS.

  MEMBERS
    common - Common header for use with the CsrWifiFsm Module
    status - Indicates the success or otherwise of the requested operation, but
             in this case it always set to success.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    CsrResult       status;
} CsrWifiNmeProfileDeleteAllCfm;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileOrderSetCfm

  DESCRIPTION
    Confirmation to UNIFI_NME_PROFILE_ORDER_SET.request.

  MEMBERS
    common       - Common header for use with the CsrWifiFsm Module
    interfaceTag - Interface Identifier; unique identifier of an interface
    status       - Indicates the success or otherwise of the requested
                   operation.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    u16       interfaceTag;
    CsrResult       status;
} CsrWifiNmeProfileOrderSetCfm;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileConnectCfm

  DESCRIPTION
    Reports the status of the NME PROFILE CONNECT REQ. If unsuccessful the
    connectAttempt parameters contain details of the APs that the NME
    attempted to connect to before reporting the failure of the request.

  MEMBERS
    common               - Common header for use with the CsrWifiFsm Module
    interfaceTag         - Interface Identifier; unique identifier of an
                           interface
    status               - Indicates the success or otherwise of the requested
                           operation.
    connectAttemptsCount - This parameter is relevant only if
                           status!=CSR_WIFI_NME_STATUS_SUCCESS.
                           Number of connection attempt elements provided with
                           this primitive
    connectAttempts      - This parameter is relevant only if
                           status!=CSR_WIFI_NME_STATUS_SUCCESS.
                           Points to the list of connection attempt elements
                           provided with this primitive
                           Each element of the list provides information about
                           an AP on which the connection attempt was made and
                           the error that occurred during the attempt.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent           common;
    u16                 interfaceTag;
    CsrResult                 status;
    u8                  connectAttemptsCount;
    CsrWifiNmeConnectAttempt *connectAttempts;
} CsrWifiNmeProfileConnectCfm;

/*******************************************************************************

  NAME
    CsrWifiNmeWpsCfm

  DESCRIPTION
    Reports the status of the NME WPS REQ.
    If CSR_WIFI_NME_STATUS_SUCCESS, the profile parameter contains the
    identity and credentials of the AP.

  MEMBERS
    common       - Common header for use with the CsrWifiFsm Module
    interfaceTag - Interface Identifier; unique identifier of an interface
    status       - Indicates the success or otherwise of the requested
                   operation.
    profile      - This parameter is relevant only if
                   status==CSR_WIFI_NME_STATUS_SUCCESS.
                   The identity and credentials of the network.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent   common;
    u16         interfaceTag;
    CsrResult         status;
    CsrWifiNmeProfile profile;
} CsrWifiNmeWpsCfm;

/*******************************************************************************

  NAME
    CsrWifiNmeWpsCancelCfm

  DESCRIPTION
    Reports the status of the NME WPS REQ, the request is always SUCCESSFUL.

  MEMBERS
    common       - Common header for use with the CsrWifiFsm Module
    interfaceTag - Interface Identifier; unique identifier of an interface
    status       - Only returns CSR_WIFI_NME_STATUS_SUCCESS

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    u16       interfaceTag;
    CsrResult       status;
} CsrWifiNmeWpsCancelCfm;

/*******************************************************************************

  NAME
    CsrWifiNmeConnectionStatusGetCfm

  DESCRIPTION
    Reports the connection status of the NME.

  MEMBERS
    common           - Common header for use with the CsrWifiFsm Module
    interfaceTag     - Interface Identifier; unique identifier of an interface
    status           - Indicates the success or otherwise of the requested
                       operation.
    connectionStatus - NME current connection status

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent            common;
    u16                  interfaceTag;
    CsrResult                  status;
    CsrWifiNmeConnectionStatus connectionStatus;
} CsrWifiNmeConnectionStatusGetCfm;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileUpdateInd

  DESCRIPTION
    Indication generated from the NME (if an application subscribes to
    receive it) that informs that application that the contained profile has
    changed.
    For example, either the credentials EAP-FAST PAC file or the session data
    within the profile has changed.
    It is up to the application whether it stores this updated profile or
    not.

  MEMBERS
    common       - Common header for use with the CsrWifiFsm Module
    interfaceTag - Interface Identifier; unique identifier of an interface
    profile      - The identity and credentials of the network.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent   common;
    u16         interfaceTag;
    CsrWifiNmeProfile profile;
} CsrWifiNmeProfileUpdateInd;

/*******************************************************************************

  NAME
    CsrWifiNmeProfileDisconnectInd

  DESCRIPTION
    Indication generated from the NME (if an application subscribes to
    receive it) that informs that application that the current profile
    connection has disconnected. The indication will contain information
    about APs that it attempted to maintain the connection via i.e. in the
    case of failed roaming.

  MEMBERS
    common               - Common header for use with the CsrWifiFsm Module
    interfaceTag         - Interface Identifier; unique identifier of an
                           interface
    connectAttemptsCount - Number of connection attempt elements provided with
                           this primitive
    connectAttempts      - Points to the list of connection attempt elements
                           provided with this primitive
                           Each element of the list provides information about
                           an AP on which the connection attempt was made and
                           the error occurred during the attempt.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent           common;
    u16                 interfaceTag;
    u8                  connectAttemptsCount;
    CsrWifiNmeConnectAttempt *connectAttempts;
} CsrWifiNmeProfileDisconnectInd;

/*******************************************************************************

  NAME
    CsrWifiNmeSimImsiGetInd

  DESCRIPTION
    Indication generated from the NME (if an application subscribes to
    receive it) that requests the IMSI and UICC type from the UICC Manager.
    This indication is generated when the NME is attempting to connect to a
    profile configured for EAP-SIM/AKA. An application MUST register to
    receive this indication for the NME to support the EAP-SIM/AKA credential
    types. Otherwise the NME has no route to obtain the information from the
    UICC.

  MEMBERS
    common - Common header for use with the CsrWifiFsm Module

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
} CsrWifiNmeSimImsiGetInd;

/*******************************************************************************

  NAME
    CsrWifiNmeSimGsmAuthInd

  DESCRIPTION
    Indication generated from the NME (if an application subscribes to
    receive it) that requests the UICC Manager to perform a GSM
    authentication on behalf of the NME. This indication is generated when
    the NME is attempting to connect to a profile configured for EAP-SIM. An
    application MUST register to receive this indication for the NME to
    support the EAP-SIM credential types. Otherwise the NME has no route to
    obtain the information from the UICC. EAP-SIM authentication requires 2
    or 3 GSM authentication rounds and therefore 2 or 3 RANDS (GSM Random
    Challenges) are included.

  MEMBERS
    common      - Common header for use with the CsrWifiFsm Module
    randsLength - GSM RAND is 16 bytes long hence valid values are 32 (2 RANDS)
                  or 48 (3 RANDs).
    rands       - 2 or 3 RANDs values.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    u8        randsLength;
    u8       *rands;
} CsrWifiNmeSimGsmAuthInd;

/*******************************************************************************

  NAME
    CsrWifiNmeSimUmtsAuthInd

  DESCRIPTION
    Indication generated from the NME (if an application subscribes to
    receive it) that requests the UICC Manager to perform a UMTS
    authentication on behalf of the NME. This indication is generated when
    the NME is attempting to connect to a profile configured for EAP-AKA. An
    application MUST register to receive this indication for the NME to
    support the EAP-AKA credential types. Otherwise the NME has no route to
    obtain the information from the USIM. EAP-AKA requires one UMTS
    authentication round and therefore only one RAND and one AUTN values are
    included.

  MEMBERS
    common - Common header for use with the CsrWifiFsm Module
    rand   - UMTS RAND value.
    autn   - UMTS AUTN value.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    u8        rand[16];
    u8        autn[16];
} CsrWifiNmeSimUmtsAuthInd;

/*******************************************************************************

  NAME
    CsrWifiNmeWpsConfigSetCfm

  DESCRIPTION
    Confirm.

  MEMBERS
    common - Common header for use with the CsrWifiFsm Module
    status - Status of the request.

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    CsrResult       status;
} CsrWifiNmeWpsConfigSetCfm;

/*******************************************************************************

  NAME
    CsrWifiNmeEventMaskSetCfm

  DESCRIPTION
    The NME calls the primitive to report the result of the request
    primitive.

  MEMBERS
    common - Common header for use with the CsrWifiFsm Module
    status - Reports the result of the request

*******************************************************************************/
typedef struct
{
    CsrWifiFsmEvent common;
    CsrResult       status;
} CsrWifiNmeEventMaskSetCfm;


#ifdef __cplusplus
}
#endif

#endif /* CSR_WIFI_NME_PRIM_H__ */

