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

            (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"

#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;

#endif /* CSR_WIFI_NME_PRIM_H__ */

