/* ** Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/mgmt/cnm.h#1 */ /*! \file "cnm.h" \brief */ /* ** Log: cnm.h * * 06 23 2011 cp.wu * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module * change parameter name from PeerAddr to BSSID * * 06 20 2011 cp.wu * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module * 1. specify target's BSSID when requesting channel privilege. * 2. pass BSSID information to firmware domain * * 04 12 2011 cm.chang * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency * . * * 03 10 2011 cm.chang * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module * Add some functions to let AIS/Tethering or AIS/BOW be the same channel * * 01 12 2011 cm.chang * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module * Provide function to decide if BSS can be activated or not * * 12 07 2010 cm.chang * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk * 1. BSSINFO include RLM parameter * 2. free all sta records when network is disconnected * * 08 24 2010 cm.chang * NULL * Support RLM initail channel of Ad-hoc, P2P and BOW * * 07 19 2010 cm.chang * * Set RLM parameters and enable CNM channel manager * * 07 13 2010 cm.chang * * Rename MSG_CH_RELEASE_T to MSG_CH_ABORT_T * * 07 08 2010 cp.wu * * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository. * * 07 08 2010 cm.chang * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT * * 07 01 2010 cm.chang * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver * Need bandwidth info when requesting channel privilege * * 07 01 2010 cm.chang * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver * Modify CNM message handler for new flow * * 05 12 2010 kevin.huang * [BORA00000794][WIFISYS][New Feature]Power Management Support * Add Power Management - Legacy PS-POLL support. * * 05 05 2010 cm.chang * [BORA00000018]Integrate WIFI part into BORA for the 1st time * Add a new function to send abort message * * 03 16 2010 kevin.huang * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support * Add AdHoc Mode * * 03 10 2010 kevin.huang * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support * Add Channel Manager for arbitration of JOIN and SCAN Req * * 02 08 2010 cm.chang * [BORA00000018]Integrate WIFI part into BORA for the 1st time * Support partial part about cmd basic configuration * * Nov 18 2009 mtk01104 * [BORA00000018] Integrate WIFI part into BORA for the 1st time * Add prototype of cnmFsmEventInit() * * Nov 2 2009 mtk01104 * [BORA00000018] Integrate WIFI part into BORA for the 1st time * ** */ #ifndef _CNM_H #define _CNM_H /******************************************************************************* * C O M P I L E R F L A G S ******************************************************************************** */ /******************************************************************************* * E X T E R N A L R E F E R E N C E S ******************************************************************************** */ /******************************************************************************* * C O N S T A N T S ******************************************************************************** */ /******************************************************************************* * D A T A T Y P E S ******************************************************************************** */ typedef enum _ENUM_CH_REQ_TYPE_T { CH_REQ_TYPE_JOIN, CH_REQ_TYPE_P2P_LISTEN, CH_REQ_TYPE_NUM } ENUM_CH_REQ_TYPE_T, *P_ENUM_CH_REQ_TYPE_T; typedef struct _MSG_CH_REQ_T { MSG_HDR_T rMsgHdr; /* Must be the first member */ UINT_8 ucNetTypeIndex; UINT_8 ucTokenID; UINT_8 ucPrimaryChannel; ENUM_CHNL_EXT_T eRfSco; ENUM_BAND_T eRfBand; ENUM_CH_REQ_TYPE_T eReqType; UINT_32 u4MaxInterval; /* In unit of ms */ UINT_8 aucBSSID[6]; UINT_8 aucReserved[2]; } MSG_CH_REQ_T, *P_MSG_CH_REQ_T; typedef struct _MSG_CH_ABORT_T { MSG_HDR_T rMsgHdr; /* Must be the first member */ UINT_8 ucNetTypeIndex; UINT_8 ucTokenID; } MSG_CH_ABORT_T, *P_MSG_CH_ABORT_T; typedef struct _MSG_CH_GRANT_T { MSG_HDR_T rMsgHdr; /* Must be the first member */ UINT_8 ucNetTypeIndex; UINT_8 ucTokenID; UINT_8 ucPrimaryChannel; ENUM_CHNL_EXT_T eRfSco; ENUM_BAND_T eRfBand; ENUM_CH_REQ_TYPE_T eReqType; UINT_32 u4GrantInterval; /* In unit of ms */ } MSG_CH_GRANT_T, *P_MSG_CH_GRANT_T; typedef struct _MSG_CH_REOCVER_T { MSG_HDR_T rMsgHdr; /* Must be the first member */ UINT_8 ucNetTypeIndex; UINT_8 ucTokenID; UINT_8 ucPrimaryChannel; ENUM_CHNL_EXT_T eRfSco; ENUM_BAND_T eRfBand; ENUM_CH_REQ_TYPE_T eReqType; } MSG_CH_RECOVER_T, *P_MSG_CH_RECOVER_T; typedef struct _CNM_INFO_T { UINT_32 u4Reserved; } CNM_INFO_T, *P_CNM_INFO_T; #if CFG_ENABLE_WIFI_DIRECT /* Moved from p2p_fsm.h */ typedef struct _DEVICE_TYPE_T { UINT_16 u2CategoryId; /* Category ID */ UINT_8 aucOui[4]; /* OUI */ UINT_16 u2SubCategoryId; /* Sub Category ID */ } __KAL_ATTRIB_PACKED__ DEVICE_TYPE_T, *P_DEVICE_TYPE_T; #endif /******************************************************************************* * P U B L I C D A T A ******************************************************************************** */ /******************************************************************************* * P R I V A T E D A T A ******************************************************************************** */ /******************************************************************************* * M A C R O S ******************************************************************************** */ /******************************************************************************* * F U N C T I O N D E C L A R A T I O N S ******************************************************************************** */ VOID cnmInit(P_ADAPTER_T prAdapter); VOID cnmUninit(P_ADAPTER_T prAdapter); VOID cnmChMngrRequestPrivilege(P_ADAPTER_T prAdapter, P_MSG_HDR_T prMsgHdr); VOID cnmChMngrAbortPrivilege(P_ADAPTER_T prAdapter, P_MSG_HDR_T prMsgHdr); VOID cnmChMngrHandleChEvent(P_ADAPTER_T prAdapter, P_WIFI_EVENT_T prEvent); BOOLEAN cnmPreferredChannel(P_ADAPTER_T prAdapter, P_ENUM_BAND_T prBand, PUINT_8 pucPrimaryChannel, P_ENUM_CHNL_EXT_T prBssSCO); BOOLEAN cnmAisInfraChannelFixed(P_ADAPTER_T prAdapter, P_ENUM_BAND_T prBand, PUINT_8 pucPrimaryChannel); VOID cnmAisInfraConnectNotify(P_ADAPTER_T prAdapter); BOOLEAN cnmAisIbssIsPermitted(P_ADAPTER_T prAdapter); BOOLEAN cnmP2PIsPermitted(P_ADAPTER_T prAdapter); BOOLEAN cnmBowIsPermitted(P_ADAPTER_T prAdapter); BOOLEAN cnmBss40mBwPermitted(P_ADAPTER_T prAdapter, ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx); #if CFG_P2P_LEGACY_COEX_REVISE BOOLEAN cnmAisDetectP2PChannel(P_ADAPTER_T prAdapter, P_ENUM_BAND_T prBand, PUINT_8 pucPrimaryChannel); #endif /******************************************************************************* * F U N C T I O N S ******************************************************************************** */ #ifndef _lint /* We don't have to call following function to inspect the data structure. * It will check automatically while at compile time. * We'll need this to guarantee the same member order in different structures * to simply handling effort in some functions. */ static inline VOID cnmMsgDataTypeCheck(VOID) { DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, rMsgHdr) == 0); DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, rMsgHdr) == OFFSET_OF(MSG_CH_RECOVER_T, rMsgHdr)); DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, ucNetTypeIndex) == OFFSET_OF(MSG_CH_RECOVER_T, ucNetTypeIndex)); DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, ucTokenID) == OFFSET_OF(MSG_CH_RECOVER_T, ucTokenID)); DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, ucPrimaryChannel) == OFFSET_OF(MSG_CH_RECOVER_T, ucPrimaryChannel)); DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, eRfSco) == OFFSET_OF(MSG_CH_RECOVER_T, eRfSco)); DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, eRfBand) == OFFSET_OF(MSG_CH_RECOVER_T, eRfBand)); DATA_STRUCT_INSPECTING_ASSERT(OFFSET_OF(MSG_CH_GRANT_T, eReqType) == OFFSET_OF(MSG_CH_RECOVER_T, eReqType)); } #endif /* _lint */ #endif /* _CNM_H */