summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/COMMON/MultiChannels.h
diff options
context:
space:
mode:
authorDaiqian Hu <[email protected]>2016-11-21 08:54:24 +0800
committerDaiqian Hu <[email protected]>2016-11-21 08:54:24 +0800
commita95eaad088f61aa55da9d73015cf1ed86e64a67e (patch)
tree15b498a08a4aee4b7f8b1627d39c965b3aa3ba98 /network/wlan/WDI/COMMON/MultiChannels.h
parent1aa0338ec5418345ea0c383e92b4fa19f7c98425 (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.h438
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