diff options
| author | Daiqian Hu <[email protected]> | 2016-11-21 08:54:24 +0800 |
|---|---|---|
| committer | Daiqian Hu <[email protected]> | 2016-11-21 08:54:24 +0800 |
| commit | a95eaad088f61aa55da9d73015cf1ed86e64a67e (patch) | |
| tree | 15b498a08a4aee4b7f8b1627d39c965b3aa3ba98 /network/wlan/WDI/COMMON/MultiChannels.h | |
| parent | 1aa0338ec5418345ea0c383e92b4fa19f7c98425 (diff) | |
Re-submit for WDI sample driver to GitHub
Submit WDI sample driver to GitHub for RS1.
Diffstat (limited to 'network/wlan/WDI/COMMON/MultiChannels.h')
| -rw-r--r-- | network/wlan/WDI/COMMON/MultiChannels.h | 438 |
1 files changed, 438 insertions, 0 deletions
diff --git a/network/wlan/WDI/COMMON/MultiChannels.h b/network/wlan/WDI/COMMON/MultiChannels.h new file mode 100644 index 00000000..d00df943 --- /dev/null +++ b/network/wlan/WDI/COMMON/MultiChannels.h @@ -0,0 +1,438 @@ + +#ifndef __INC_MULTICHANNELS_H +#define __INC_MULTICHANNELS_H + +#define MULTICHANNEL_QUEUE_FOR_EXTSTA BE_QUEUE +#define MULTICHANNEL_QUEUE_FOR_EXTCLIENT VI_QUEUE +#define MULTICHANNEL_QUEUE_FOR_EXTGO BK_QUEUE + +#define MULTICHANNEL_ACTION_NONE 0 +#define MULTICHANNEL_ACTION_STARTED 1 +#define MULTICHANNEL_ACTION_PAUSED 2 + +#define MULTICHANNEL_FCS_SUPPORT_START 1 +#define MULTICHANNEL_FCS_SUPPORT_GO 4 + +#define FCS_STATE_ACTIVE BIT0 +#define FCS_STATE_CONNECTED BIT1 +#define FCS_STATE_PKT_PAUSED BIT2 +#define FCS_STATE_PKT_DROPPED BIT3 + +#define FCS_NOTIFY_TYPE_C2H 1 +#define FCS_NOTIFY_TYPE_CHANNEL 2 +#define FCS_NOTIFY_TYPE_BT_DISABLE 3 + +typedef enum _MULTICHANNEL_FCS_COMMON_INFO{ + MULTICHANNEL_FCS_COMMON_NUMCLIENT = 1, + MULTICHANNEL_FCS_COMMON_DURATION = 2, + MULTICHANNEL_FCS_PORT_ORDER = 3, + MULTICHANNEL_FCS_PORT_CHANNEL = 4, + MULTICHANNEL_FCS_PORT_BANDWIDTH = 5, + MULTICHANNEL_FCS_PORT_EXTOFFSET_40MHZ = 6, + MULTICHANNEL_FCS_PORT_EXTOFFSET_80MHZ = 7, + MULTICHANNEL_FCS_PORT_DURATION = 8, + MULTICHANNEL_FCS_PORT_RFETYPE = 9, + MULTICHANNEL_FCS_PORT_CHANNEL_TX_NULL = 10, + MULTICHANNEL_FCS_PORT_C2H_REPORT = 11, + MULTICHANNEL_FCS_PORT_CHANNEL_SCAN = 12, + MULTICHANNEL_FCS_PORT_ROLE = 13, + MULTICHANNEL_FCS_COMMON_NOA_DURATION = 14, + MULTICHANNEL_FCS_COMMON_NOA_STARTTIME = 15, + MULTICHANNEL_FCS_COMMON_STA_BEACONTIME = 16, + MULTICHANNEL_FCS_COMMON_QPKT_LEVEL = 17, + MULTICHANNEL_FCS_PORT_MACID_BITMAP = 18, +}MULTICHANNEL_FCS_COMMON_INFO; + +// Multi-channel switch role for each port +typedef enum _FCS_ROLE{ + FCS_ROLE_STA = 0, + FCS_ROLE_AP = 1, + FCS_ROLE_GC = 2, + FCS_ROLE_GO = 3, +}FCS_ROLE; + +// Represent Channel Tx Null setting +typedef enum _FCS_CHANNEL_TX_NULL{ + FCS_ENABLE_TX_NULL = 0, + FCS_DISABLE_TX_NULL = 1, +}FCS_CHANNEL_TX_NULL, *PFCS_CHANNEL_TX_NULL; + +// Represent Channel Scan +typedef enum _FCS_CHANNEL_SCAN{ + FCS_CHIDX = 0, + FCS_SCANCH_RSVD_LOC = 1, +}FCS_CHANNEL_SCAN, *PFCS_CHANNEL_SCAN; + +// Represent C2H Report setting +typedef enum _FCS_C2H_REPORT{ + FCS_C2H_REPORT_DISABLE = 0, + FCS_C2H_REPORT_FAIL_STATUS = 1, + FCS_C2H_REPORT_ALL_STATUS = 2, +}FCS_C2H_REPORT, *PFCS_C2H_REPORT; + +// Represent FW status report of channel switch +typedef enum _FCS_STATUS_RPT{ + FCS_RPT_SUCCESS = 0, + FCS_RPT_TXNULL_FAIL = 1, + FCS_RPT_STOPFCS = 2, + FCS_RPT_READY = 3, +}FCS_STATUS, *PFCS_STATUS; + +// Represent FW status +typedef enum _FCS_FW_STATE{ + FCS_FW_IDLE = 0, + FCS_FW_STARTING = 1, + FCS_FW_STOPPED = 2, +}FCS_FW_STATE, *PFCS_FW_STATE; + +// Represent channel switch operation mode +typedef enum _FCS_CHNL_OPMODE{ + FCS_CHNL_OPMODE_NONE = 0, + FCS_CHNL_OPMODE_RESET = 1, + FCS_CHNL_OPMODE_JOINBSS = 2, + FCS_CHNL_OPMODE_DISCONNECT = 3, + FCS_CHNL_OPMODE_JOINFAIL = 4, + FCS_CHNL_OPMODE_STARTMCC = 5, +}CHNL_OPMODE, *PCHNL_OPMODE; + +// Represent queue packet setting +typedef enum _FCS_QPKT_LEVEL{ + FCS_QPKT_DEFAULT = 0, + FCS_QPKT_BY_MACID_SLEEP = 1, + FCS_QPKT_BY_DRIVER_DROP = 2, + FCS_QPKT_BY_MACID_DROP = 4, +}FCS_QPKT_LEVEL, *PFCS_QPKT_LEVEL; + + +//============================================================================ +// Multiple Channel Supported +//============================================================================ + +// Context for Each Port Specific +typedef struct _MULTICHANNEL_PORT_CONTEXT { + + //================================================== + // Client-Related Elements + //================================================== + + // This controls the offset for this port to the HW TSF counter -- + BOOLEAN bBssLocalTsfValid; + s8Byte BssLocalTsfOffset; + u8Byte BssTimestamp; + u2Byte BssBeaconInterval; + // ----------------------------------------------------- + + // Channel Information ------------------------------------ + CHANNEL_WIDTH ConnectedBandWidthMode; + u1Byte ConnectedPrimary20MhzChannel; + EXTCHNL_OFFSET ConnectedExtChnlOffsetOf40MHz; + EXTCHNL_OFFSET ConnectedExtChnlOffsetOf80MHz; + + RT_WORK_ITEM MultiChannelSwitchChannelWorkItem; + // ----------------------------------------------------- + + // Configuration Time -------------------------------------------------------- + u2Byte ConnectionConfigurationTime; // For speeding up the WPS or DHCP packets: ms + // ------------------------------------------------------------------------ + + // Order for FW fast channel switch + u1Byte FCSOrder; + u1Byte FCSPortState; + + u1Byte FcsDuration; + u1Byte Role; + u2Byte MacIdBitmap; + +} MULTICHANNEL_PORT_CONTEXT, *PMULTICHANNEL_PORT_CONTEXT; + +#define MULTICHANNEL_SIZE_OF_PORT_CONTEXT sizeof(MULTICHANNEL_PORT_CONTEXT) + + + +// Common Context for All Ports (Only Valid in Default Port) +typedef struct _MULTICHANNEL_COMMON_CONTEXT { + + // Channel Switch Timer ------------------------------------- + // + Future Goal: Handle all channel swith actions for whole driver + ACTION_TIMER_HANDLE MultiChannelActionTimer; + // ------------------------------------------------------- + + + + // HW / SW Timer Switch -------------------------------- + BOOLEAN bUseHardwareTimer; + // ---------------------------------------------------- + + + + + // Channel Switch Scheduler Status -------------------- + BOOLEAN bChannelSwitchSchedulerStarted; + u1Byte MultiChannelState; + PADAPTER pAdapterBeforeSwitch; + // ------------------------------------------------ + + // Used for HwTsf Synchronization ----------------- + u1Byte TargetApBssid[6]; + BOOLEAN bSyncHwTsfBeaconUpdateReceived; + RT_WORK_ITEM MultiChannelSyncHwTsfWorkItem; + // -------------------------------------------- + + // Tx Report Indication -------------------------------- + BOOLEAN bWaitChannelSwitchTxReport; + // ------------------------------------------------- + + // For TxPause Read in Dispatch Level: USB and SDIO --- + u1Byte TxPauseCache; + // ---------------------------------------------- + + // Record current client count + u1Byte NumCurPort; + u1Byte FcsDuration; + BOOLEAN bDownloadRSVD; + BOOLEAN bStartFwFCS; + u1Byte uFCSReport; + u8Byte uSyncTsfDiff; + u1Byte MCCNoADuration; + u1Byte MCCNoAStartTime; + u1Byte MCCStaBeaconTime; + u1Byte MCCQPktLevel; + RT_WORK_ITEM MultiChannelC2HWorkItem; + RT_WORK_ITEM MultiChannelAdjustTsfWorkItem; + // ---------------------------------------------- + + u8Byte IGBoostEndTime; // us + u4Byte IGBoostStateFlag; +} MULTICHANNEL_COMMON_CONTEXT, *PMULTICHANNEL_COMMON_CONTEXT; + +#define MULTICHANNEL_SIZE_OF_COMMON_CONTEXT sizeof(MULTICHANNEL_COMMON_CONTEXT) + +typedef struct _FCS_C2H_NOTIFY{ + u1Byte status; + u1Byte channel; +}FCS_C2H_NOTIFY, *PFCS_C2H_NOTIFY; + +#define MC_DM_INIT_GAIN_BOOST_START 0x00000001 +#define MC_DM_INIT_GAIN_BOOST_END 0x00000002 +#define MC_DM_INIT_GAIN_BOOST_END_DELAY_SEC 0x00000003 +#define MC_DM_INIT_GAIN_BOOST_CHECK 0x00000004 + + +#define MC_DM_STATE_INIT_GAIN_BOOST_STARTED BIT31 + +#define MC_DM_INIT_GAIN_BOOST_DEFAULT_DELAY_SEC 10 // 10 sec + + +//----------------------------------------------------------- +// Public Functions +//----------------------------------------------------------- + +VOID +MultiChannelWriteTxPauseCache( + PADAPTER pAdapter, + u1Byte TxPauseCommand +); + +u1Byte +MultiChannelReadTxPauseCache( + PADAPTER pAdapter +); + +VOID +MultiChannelAssociateConfirm( + PADAPTER pAdapter, + BOOLEAN bSuccess +); + +VOID +MultiChannelHandleReceivedBeacon( + PADAPTER pAdapter, + OCTET_STRING osPacket +); + +VOID +MultiChannelSwitchChannelWorkItemCallback( + IN PVOID pContext +); + +VOID +MultiChannelHandleChannelSwitchToCurrentPort( + PADAPTER pAdapterBeforeSwitch, + PADAPTER pCurrentPort +); + +VOID +MultiChannelSyncHwTsfWorkItemCallback( + IN PVOID pContext +); + +VOID +MultiChannelResetApStatus( + PADAPTER pAdapter, + BOOLEAN bSet +); + +VOID +MultiChannelStatusWatchdog( + PADAPTER pAdapter +); + +VOID +MultiChannelDumpHwQueueStatus( + PADAPTER pAdapter +); + +VOID +MultiChannelDisableEnableExactHwQueue( + PADAPTER pAdapter, + BOOLEAN bDisable +); + +VOID +MultiChannelStopChannelSwitchScheduler( + PADAPTER pAdapter, + BOOLEAN bEnableSwitchOperation +); + +BOOLEAN +MultiChannelSwitchNeeded( + PADAPTER pAdapter +); + +BOOLEAN +MultiChannelSyncHwTsfNeeded( + PADAPTER pAdapter +); + +u1Byte +MultiChannelRedirectPacketToSpecificQueue( + PRT_TCB pTcb +); + +VOID +MultiChannelUpdateSettingBeforeScanOnResetRequest( + PADAPTER pAdapter +); + +VOID +MultiChannelInitializeWorkItem( + PADAPTER pAdapter +); + +VOID +MultiChannelReleaseWorkItem( + PADAPTER pAdapter +); + +VOID +MultiChannelInitializeTimer( + PADAPTER pAdapter +); + +VOID +MultiChannelReleaseTimer( + PADAPTER pAdapter +); + +u1Byte +MultiChannelGetPortConnected20MhzChannel( + PADAPTER pAdapter +); + +VOID +MultichannelHandlePacketDuringScan( + PADAPTER pAdapter, + BOOLEAN bDisable +); + +VOID +MultichannelEnableGoQueue( + PADAPTER pAdapter +); + +PADAPTER +MultiChannelGetConnectionAdapter( + PADAPTER pAdapter, + u1Byte Order +); + +VOID +MultiChannelScanHandler( + PADAPTER pAdapter, + BOOLEAN bScan, + BOOLEAN bResume +); + +VOID +MultiChannelDisconnectClient( + PADAPTER pAdapter, + BOOLEAN bSendDisassociate +); + +VOID +MultiChannelDisconnectGo( + PADAPTER pAdapter +); + +BOOLEAN +MultiChannelCheckUpdateHwTsf( + PADAPTER pAdapter +); + +VOID +MultiChannelGetFcsCommonInfo( + PADAPTER pAdapter, + u1Byte FcsFlag, + pu1Byte value +); + +VOID +MultiChannelSetFcsCommonInfo( + PADAPTER pAdapter, + u1Byte FcsFlag, + pu1Byte value +); + +BOOLEAN +MultiChannel_IsFCSInProgress( + PADAPTER pAdapter +); + +VOID +MultiChannel_OnBss( + PADAPTER pAdapter, + u8Byte uAPTsf, + u8Byte uCurrentTsf +); + +RT_STATUS +FCS_Notify( + PADAPTER pAdapter, + ULONG NotifyType, + pu1Byte InformationBuffer, + ULONG InformationBufferLength +); + +#if (MULTICHANNEL_SUPPORT == 1) +u1Byte +MultiChannelGetConnectedChannels( + IN PADAPTER pAdapter, + OUT pu1Byte pChnlArray, + IN u1Byte maxChnlArrayNum + ); + +RT_STATUS +McDynamicMachanismSet( + IN PADAPTER pAdapter, + IN u4Byte ReqID, + IN PVOID pInputBuffer, + IN u4Byte InputBufferLen + ); + +#else // #if (MULTICHANNEL_SUPPORT != 1) + +#define MultiChannelGetConnectedChannels(_pAdapter, _pChnlArray, _maxChnlArrayNum) 0 +#define McDynamicMachanismSet(_pAdapter, _ReqID, _pInputBuffer, _InputBufferLen) RT_STATUS_NOT_SUPPORT +#endif // #if (MULTICHANNEL_SUPPORT == 1) + +#endif |
