wlan: Complete PMF (802.11w) support for Soft AP

These changes complete Protected Management Frames (802.11w)
support for the device in Soft AP mode.

The changes allow support for this feature without any changes
needed in hostapd or the cfg80211/nl80211 interface.  Support
is completely done within the driver.

Change-Id: I3bb0ab9ae4eed0ff02f5d0d1d570b0886278d1e0
CRs-Fixed: 505740
diff --git a/CORE/MAC/src/include/dot11f.h b/CORE/MAC/src/include/dot11f.h
index f35a2a0..b549e11 100644
--- a/CORE/MAC/src/include/dot11f.h
+++ b/CORE/MAC/src/include/dot11f.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012 - 2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -38,11 +38,10 @@
   * for working with 802.11 Frames
   *
   *
-
   *
   *
   * This file was automatically generated by 'framesc'
-  * Fri Feb  7 16:55:44 2014 from the following file(s):
+  * Thu Feb 13 15:40:58 2014 from the following file(s):
   *
   * dot11f.frms
   *
@@ -308,6 +307,16 @@
 
 void dot11fPackFfDialogToken(tpAniSirGlobal, tDot11fFfDialogToken*, tANI_U8*);
 
+typedef struct sDot11fFfLeader {
+    tANI_U8 mac[6];
+} tDot11fFfLeader;
+
+#define DOT11F_FF_LEADER_LEN ( 6 )
+
+void dot11fUnpackFfLeader(tpAniSirGlobal, tANI_U8*, tDot11fFfLeader*);
+
+void dot11fPackFfLeader(tpAniSirGlobal, tDot11fFfLeader*, tANI_U8*);
+
 typedef struct sDot11fFfLinkMargin {
     tANI_U8 linkMargin;
 } tDot11fFfLinkMargin;
@@ -328,6 +337,16 @@
 
 void dot11fPackFfListenInterval(tpAniSirGlobal, tDot11fFfListenInterval*, tANI_U8*);
 
+typedef struct sDot11fFfMagicCode {
+    tANI_U8 magic[6];
+} tDot11fFfMagicCode;
+
+#define DOT11F_FF_MAGICCODE_LEN ( 6 )
+
+void dot11fUnpackFfMagicCode(tpAniSirGlobal, tANI_U8*, tDot11fFfMagicCode*);
+
+void dot11fPackFfMagicCode(tpAniSirGlobal, tDot11fFfMagicCode*, tANI_U8*);
+
 typedef struct sDot11fFfMaxTxPower {
     tANI_U8 maxTxPower;
 } tDot11fFfMaxTxPower;
@@ -400,6 +419,36 @@
 
 void dot11fPackFfRCPI(tpAniSirGlobal, tDot11fFfRCPI*, tANI_U8*);
 
+typedef struct sDot11fFfRMCDialogToken {
+    tANI_U32 token;
+} tDot11fFfRMCDialogToken;
+
+#define DOT11F_FF_RMCDIALOGTOKEN_LEN ( 4 )
+
+void dot11fUnpackFfRMCDialogToken(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCDialogToken*);
+
+void dot11fPackFfRMCDialogToken(tpAniSirGlobal, tDot11fFfRMCDialogToken*, tANI_U8*);
+
+typedef struct sDot11fFfRMCOUI {
+    tANI_U8 oui[3];
+} tDot11fFfRMCOUI;
+
+#define DOT11F_FF_RMCOUI_LEN ( 3 )
+
+void dot11fUnpackFfRMCOUI(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCOUI*);
+
+void dot11fPackFfRMCOUI(tpAniSirGlobal, tDot11fFfRMCOUI*, tANI_U8*);
+
+typedef struct sDot11fFfRMCVersion {
+    tANI_U8 version;
+} tDot11fFfRMCVersion;
+
+#define DOT11F_FF_RMCVERSION_LEN ( 1 )
+
+void dot11fUnpackFfRMCVersion(tpAniSirGlobal, tANI_U8*, tDot11fFfRMCVersion*);
+
+void dot11fPackFfRMCVersion(tpAniSirGlobal, tDot11fFfRMCVersion*, tANI_U8*);
+
 typedef struct sDot11fFfRSNI {
     tANI_U8 rsni;
 } tDot11fFfRSNI;
@@ -3762,32 +3811,6 @@
 #ifdef __cplusplus
 }; /* End extern "C". */
 #endif /* C++ */
-// EID 56 (0x38)
-typedef struct sDot11fIEFTTimeoutInterval {
-    tANI_U8      present;
-    tANI_U8      timeoutType;
-    tANI_U32     timeoutValue;
-} tDot11fIEFTTimeoutInterval;
-
-#define DOT11F_EID_FTTIMEOUTINTERVAL ( 56 )
-
-// N.B. These #defines do *not* include the EID & length
-#define DOT11F_IE_FTTIMEOUTINTERVAL_MIN_LEN ( 5 )
-
-#define DOT11F_IE_FTTIMEOUTINTERVAL_MAX_LEN ( 5 )
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* C++ */
-tANI_U32 dot11fUnpackIeFTTimeoutInterval(tpAniSirGlobal, tANI_U8*,tANI_U8, tDot11fIEFTTimeoutInterval*);
-
-tANI_U32 dot11fPackIeFTTimeoutInterval(tpAniSirGlobal, tDot11fIEFTTimeoutInterval*, tANI_U8*, tANI_U32, tANI_U32*);
-
-tANI_U32 dot11fGetPackedIEFTTimeoutInterval(tpAniSirGlobal, tDot11fIEFTTimeoutInterval*, tANI_U32*);
-
-#ifdef __cplusplus
-}; /* End extern "C". */
-#endif /* C++ */
 // EID 45 (0x2d)
 typedef struct sDot11fIEHTCaps {
     tANI_U8      present;
@@ -5357,6 +5380,32 @@
 #ifdef __cplusplus
 }; /* End extern "C". */
 #endif /* C++ */
+// EID 56 (0x38)
+typedef struct sDot11fIETimeoutInterval {
+    tANI_U8      present;
+    tANI_U8      timeoutType;
+    tANI_U32     timeoutValue;
+} tDot11fIETimeoutInterval;
+
+#define DOT11F_EID_TIMEOUTINTERVAL ( 56 )
+
+// N.B. These #defines do *not* include the EID & length
+#define DOT11F_IE_TIMEOUTINTERVAL_MIN_LEN ( 5 )
+
+#define DOT11F_IE_TIMEOUTINTERVAL_MAX_LEN ( 5 )
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+tANI_U32 dot11fUnpackIeTimeoutInterval(tpAniSirGlobal, tANI_U8*,tANI_U8, tDot11fIETimeoutInterval*);
+
+tANI_U32 dot11fPackIeTimeoutInterval(tpAniSirGlobal, tDot11fIETimeoutInterval*, tANI_U8*, tANI_U32, tANI_U32*);
+
+tANI_U32 dot11fGetPackedIETimeoutInterval(tpAniSirGlobal, tDot11fIETimeoutInterval*, tANI_U32*);
+
+#ifdef __cplusplus
+}; /* End extern "C". */
+#endif /* C++ */
 // EID 191 (0xbf)
 typedef struct sDot11fIEVHTCaps {
     tANI_U8      present;
@@ -6283,6 +6332,7 @@
     tANI_U16                    num_RICDataDesc;
     tDot11fIERICDataDesc        RICDataDesc[2];
     tDot11fIEWPA                WPA;
+    tDot11fIETimeoutInterval    TimeoutInterval;
     tDot11fIEHTCaps             HTCaps;
     tDot11fIEHTInfo             HTInfo;
     tDot11fIEWMMParams          WMMParams;
@@ -6316,16 +6366,16 @@
 #endif /* C++ */
 
 typedef struct sDot11fAuthentication{
-    tDot11fFfAuthAlgo          AuthAlgo;
-    tDot11fFfAuthSeqNo         AuthSeqNo;
-    tDot11fFfStatus            Status;
-    tDot11fIEChallengeText     ChallengeText;
-    tDot11fIERSNOpaque         RSNOpaque;
-    tDot11fIEMobilityDomain    MobilityDomain;
-    tDot11fIEFTInfo            FTInfo;
-    tDot11fIEFTTimeoutInterval FTTimeoutInterval;
-    tANI_U16                   num_RICDataDesc;
-    tDot11fIERICDataDesc       RICDataDesc[2];
+    tDot11fFfAuthAlgo        AuthAlgo;
+    tDot11fFfAuthSeqNo       AuthSeqNo;
+    tDot11fFfStatus          Status;
+    tDot11fIEChallengeText   ChallengeText;
+    tDot11fIERSNOpaque       RSNOpaque;
+    tDot11fIEMobilityDomain  MobilityDomain;
+    tDot11fIEFTInfo          FTInfo;
+    tDot11fIETimeoutInterval TimeoutInterval;
+    tANI_U16                 num_RICDataDesc;
+    tDot11fIERICDataDesc     RICDataDesc[2];
 } tDot11fAuthentication;
 
 #define DOT11F_AUTHENTICATION ( 7 )
@@ -7182,6 +7232,30 @@
 } /* End extern "C". */
 #endif /* C++ */
 
+typedef struct sDot11fRMC{
+    tDot11fFfCategory       Category;
+    tDot11fFfRMCOUI         RMCOUI;
+    tDot11fFfMagicCode      MagicCode;
+    tDot11fFfRMCVersion     RMCVersion;
+    tDot11fFfAction         Action;
+    tDot11fFfRMCDialogToken RMCDialogToken;
+    tDot11fFfLeader         Leader;
+} tDot11fRMC;
+
+#define DOT11F_RMC ( 39 )
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+
+tANI_U32 dot11fUnpackRMC(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fRMC *pFrm);
+tANI_U32 dot11fPackRMC(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed);
+tANI_U32 dot11fGetPackedRMCSize(tpAniSirGlobal pCtx, tDot11fRMC *pFrm, tANI_U32 *pnNeeded);
+
+#ifdef __cplusplus
+} /* End extern "C". */
+#endif /* C++ */
+
 typedef struct sDot11fRadioMeasurementReport{
     tDot11fFfCategory          Category;
     tDot11fFfAction            Action;
@@ -7190,7 +7264,7 @@
     tDot11fIEMeasurementReport MeasurementReport[4];
 } tDot11fRadioMeasurementReport;
 
-#define DOT11F_RADIOMEASUREMENTREPORT ( 39 )
+#define DOT11F_RADIOMEASUREMENTREPORT ( 40 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7213,7 +7287,7 @@
     tDot11fIEMeasurementRequest MeasurementRequest[2];
 } tDot11fRadioMeasurementRequest;
 
-#define DOT11F_RADIOMEASUREMENTREQUEST ( 40 )
+#define DOT11F_RADIOMEASUREMENTREQUEST ( 41 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7263,7 +7337,7 @@
     tDot11fIEOperatingMode      OperatingMode;
 } tDot11fReAssocRequest;
 
-#define DOT11F_REASSOCREQUEST ( 41 )
+#define DOT11F_REASSOCREQUEST ( 42 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7293,6 +7367,7 @@
     tANI_U16                    num_RICDataDesc;
     tDot11fIERICDataDesc        RICDataDesc[2];
     tDot11fIEWPA                WPA;
+    tDot11fIETimeoutInterval    TimeoutInterval;
     tDot11fIEHTCaps             HTCaps;
     tDot11fIEHTInfo             HTInfo;
     tDot11fIEWMMParams          WMMParams;
@@ -7311,7 +7386,7 @@
     tDot11fIEOBSSScanParameters OBSSScanParameters;
 } tDot11fReAssocResponse;
 
-#define DOT11F_REASSOCRESPONSE ( 42 )
+#define DOT11F_REASSOCRESPONSE ( 43 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7331,7 +7406,7 @@
     tDot11fFfSMPowerModeSet SMPowerModeSet;
 } tDot11fSMPowerSave;
 
-#define DOT11F_SMPOWERSAVE ( 43 )
+#define DOT11F_SMPOWERSAVE ( 44 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7345,13 +7420,33 @@
 } /* End extern "C". */
 #endif /* C++ */
 
+typedef struct sDot11fSaQueryReq{
+    tDot11fFfCategory      Category;
+    tDot11fFfAction        Action;
+    tDot11fFfTransactionId TransactionId;
+} tDot11fSaQueryReq;
+
+#define DOT11F_SAQUERYREQ ( 45 )
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+
+tANI_U32 dot11fUnpackSaQueryReq(tpAniSirGlobal pCtx, tANI_U8 *pBuf, tANI_U32 nBuf, tDot11fSaQueryReq *pFrm);
+tANI_U32 dot11fPackSaQueryReq(tpAniSirGlobal pCtx, tDot11fSaQueryReq *pFrm, tANI_U8 *pBuf, tANI_U32 nBuf, tANI_U32 *pnConsumed);
+tANI_U32 dot11fGetPackedSaQueryReqSize(tpAniSirGlobal pCtx, tDot11fSaQueryReq *pFrm, tANI_U32 *pnNeeded);
+
+#ifdef __cplusplus
+} /* End extern "C". */
+#endif /* C++ */
+
 typedef struct sDot11fSaQueryRsp{
     tDot11fFfCategory      Category;
     tDot11fFfAction        Action;
     tDot11fFfTransactionId TransactionId;
 } tDot11fSaQueryRsp;
 
-#define DOT11F_SAQUERYRSP ( 44 )
+#define DOT11F_SAQUERYRSP ( 46 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7372,7 +7467,7 @@
     tDot11fIELinkIdentifier LinkIdentifier;
 } tDot11fTDLSDisReq;
 
-#define DOT11F_TDLSDISREQ ( 45 )
+#define DOT11F_TDLSDISREQ ( 47 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7398,14 +7493,14 @@
     tDot11fIERSN                  RSN;
     tDot11fIEExtCap               ExtCap;
     tDot11fIEFTInfo               FTInfo;
-    tDot11fIEFTTimeoutInterval    FTTimeoutInterval;
+    tDot11fIETimeoutInterval      TimeoutInterval;
     tDot11fIERICData              RICData;
     tDot11fIEHTCaps               HTCaps;
     tDot11fIELinkIdentifier       LinkIdentifier;
     tDot11fIEVHTCaps              VHTCaps;
 } tDot11fTDLSDisRsp;
 
-#define DOT11F_TDLSDISRSP ( 46 )
+#define DOT11F_TDLSDISRSP ( 48 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7428,7 +7523,7 @@
     tDot11fIEPUBufferStatus PUBufferStatus;
 } tDot11fTDLSPeerTrafficInd;
 
-#define DOT11F_TDLSPEERTRAFFICIND ( 47 )
+#define DOT11F_TDLSPEERTRAFFICIND ( 49 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7449,7 +7544,7 @@
     tDot11fIELinkIdentifier LinkIdentifier;
 } tDot11fTDLSPeerTrafficRsp;
 
-#define DOT11F_TDLSPEERTRAFFICRSP ( 48 )
+#define DOT11F_TDLSPEERTRAFFICRSP ( 50 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7464,22 +7559,22 @@
 #endif /* C++ */
 
 typedef struct sDot11fTDLSSetupCnf{
-    tDot11fFfCategory          Category;
-    tDot11fFfAction            Action;
-    tDot11fFfStatus            Status;
-    tDot11fFfDialogToken       DialogToken;
-    tDot11fIERSN               RSN;
-    tDot11fIEEDCAParamSet      EDCAParamSet;
-    tDot11fIEFTInfo            FTInfo;
-    tDot11fIEFTTimeoutInterval FTTimeoutInterval;
-    tDot11fIEHTInfo            HTInfo;
-    tDot11fIELinkIdentifier    LinkIdentifier;
-    tDot11fIEWMMInfoStation    WMMInfoStation;
-    tDot11fIEVHTOperation      VHTOperation;
-    tDot11fIEOperatingMode     OperatingMode;
+    tDot11fFfCategory        Category;
+    tDot11fFfAction          Action;
+    tDot11fFfStatus          Status;
+    tDot11fFfDialogToken     DialogToken;
+    tDot11fIERSN             RSN;
+    tDot11fIEEDCAParamSet    EDCAParamSet;
+    tDot11fIEFTInfo          FTInfo;
+    tDot11fIETimeoutInterval TimeoutInterval;
+    tDot11fIEHTInfo          HTInfo;
+    tDot11fIELinkIdentifier  LinkIdentifier;
+    tDot11fIEWMMInfoStation  WMMInfoStation;
+    tDot11fIEVHTOperation    VHTOperation;
+    tDot11fIEOperatingMode   OperatingMode;
 } tDot11fTDLSSetupCnf;
 
-#define DOT11F_TDLSSETUPCNF ( 49 )
+#define DOT11F_TDLSSETUPCNF ( 51 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7507,7 +7602,7 @@
     tDot11fIESuppOperatingClasses SuppOperatingClasses;
     tDot11fIEQOSCapsStation       QOSCapsStation;
     tDot11fIEFTInfo               FTInfo;
-    tDot11fIEFTTimeoutInterval    FTTimeoutInterval;
+    tDot11fIETimeoutInterval      TimeoutInterval;
     tDot11fIERICData              RICData;
     tDot11fIEHTCaps               HTCaps;
     tDot11fIELinkIdentifier       LinkIdentifier;
@@ -7516,7 +7611,7 @@
     tDot11fIEVHTCaps              VHTCaps;
 } tDot11fTDLSSetupReq;
 
-#define DOT11F_TDLSSETUPREQ ( 50 )
+#define DOT11F_TDLSSETUPREQ ( 52 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7545,7 +7640,7 @@
     tDot11fIESuppOperatingClasses SuppOperatingClasses;
     tDot11fIEQOSCapsStation       QOSCapsStation;
     tDot11fIEFTInfo               FTInfo;
-    tDot11fIEFTTimeoutInterval    FTTimeoutInterval;
+    tDot11fIETimeoutInterval      TimeoutInterval;
     tDot11fIERICData              RICData;
     tDot11fIEHTCaps               HTCaps;
     tDot11fIELinkIdentifier       LinkIdentifier;
@@ -7555,7 +7650,7 @@
     tDot11fIEOperatingMode        OperatingMode;
 } tDot11fTDLSSetupRsp;
 
-#define DOT11F_TDLSSETUPRSP ( 51 )
+#define DOT11F_TDLSSETUPRSP ( 53 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7577,7 +7672,7 @@
     tDot11fIELinkIdentifier LinkIdentifier;
 } tDot11fTDLSTeardown;
 
-#define DOT11F_TDLSTEARDOWN ( 52 )
+#define DOT11F_TDLSTEARDOWN ( 54 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7598,7 +7693,7 @@
     tDot11fIETPCReport   TPCReport;
 } tDot11fTPCReport;
 
-#define DOT11F_TPCREPORT ( 53 )
+#define DOT11F_TPCREPORT ( 55 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7619,7 +7714,7 @@
     tDot11fIETPCRequest  TPCRequest;
 } tDot11fTPCRequest;
 
-#define DOT11F_TPCREQUEST ( 54 )
+#define DOT11F_TPCREQUEST ( 56 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7640,7 +7735,7 @@
     tDot11fFfVhtUserPositionArray     VhtUserPositionArray;
 } tDot11fVHTGidManagementActionFrame;
 
-#define DOT11F_VHTGIDMANAGEMENTACTIONFRAME ( 55 )
+#define DOT11F_VHTGIDMANAGEMENTACTIONFRAME ( 57 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7663,7 +7758,7 @@
     tDot11fIECCXTrafStrmRateSet CCXTrafStrmRateSet;
 } tDot11fWMMAddTSRequest;
 
-#define DOT11F_WMMADDTSREQUEST ( 56 )
+#define DOT11F_WMMADDTSREQUEST ( 58 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7686,7 +7781,7 @@
     tDot11fIECCXTrafStrmMet CCXTrafStrmMet;
 } tDot11fWMMAddTSResponse;
 
-#define DOT11F_WMMADDTSRESPONSE ( 57 )
+#define DOT11F_WMMADDTSRESPONSE ( 59 )
 
 #ifdef __cplusplus
 extern "C" {
@@ -7708,7 +7803,7 @@
     tDot11fIEWMMTSPEC    WMMTSPEC;
 } tDot11fWMMDelTS;
 
-#define DOT11F_WMMDELTS ( 58 )
+#define DOT11F_WMMDELTS ( 60 )
 
 #ifdef __cplusplus
 extern "C" {