summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/COMMON/ActionTimer.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/ActionTimer.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/ActionTimer.h')
-rw-r--r--network/wlan/WDI/COMMON/ActionTimer.h168
1 files changed, 168 insertions, 0 deletions
diff --git a/network/wlan/WDI/COMMON/ActionTimer.h b/network/wlan/WDI/COMMON/ActionTimer.h
new file mode 100644
index 00000000..4b575d9a
--- /dev/null
+++ b/network/wlan/WDI/COMMON/ActionTimer.h
@@ -0,0 +1,168 @@
+
+#ifndef __INC_ACTION_TIMER_H
+#define __INC_ACTION_TIMER_H
+
+
+// Use Handle instead of pointer for private access ------
+typedef u1Byte ACTION_TIMER_HANDLE;
+#define INVALID_ACTION_TIMER_HANDLE 0
+#define MAX_ACTION_TIMER_HANDLE 255
+// ----------------------------------------------
+
+
+typedef enum _ACTION_TIMER_REFERENCED_CLOCK
+{
+ CLOCK_INVALID = 0,
+ SW_OS_SYSTEM_CLOCK,
+ HW_TSF_CLOCK
+
+} ACTION_TIMER_REFERENCED_CLOCK, *PACTION_TIMER_REFERENCED_CLOCK;
+
+
+typedef enum _ACTION_TIMER_HW_TIMER
+{
+ HW_TIMER_NO_USE = 0,
+ HW_TSF_CLOCK_PS_TIMER,
+ HW_TIMER_MAX
+
+} ACTION_TIMER_HW_TIMER, *PACTION_TIMER_HW_TIMER;
+
+
+
+#define US_CLOCK_TO_MS(_usClock) ((_usClock) / 1000)
+
+#define ACTION_TIMER_HW_TIMER_INTERRUPT_DELAY_US (50)
+
+#define ACTION_TIMER_ITEM_FIRE_TOLERANCE_TIME_US (1000)
+#define ACTION_TIMER_ITEM_MAX_PENDING_TIME_MS (30 * 1000)
+
+#define ACTION_TIMER_ITEM_MAX_TOTAL_EXECUTION_TIME_US (3000)
+#define ACTION_TIMER_ITEM_MAX_SINGLE_EXECUTION_TIME_US (1000)
+
+typedef struct _ACTION_TIMER_ITEM ACTION_TIMER_ITEM, *PACTION_TIMER_ITEM;
+
+typedef enum _ACTION_TYPE
+{
+ ACTION_TYPE_INVALID = 0,
+ ACTION_TYPE_MULTICHANNEL_SWITCH,
+ ACTION_TYPE_CUSTOMIZED_SCAN,
+ ACTION_TYPE_P2P_POWERSAVE,
+ ACTION_TYPE_ALL,
+ ACTION_TYPE_MAX
+
+} ACTION_TYPE, *PACTION_TYPE;
+
+
+typedef VOID
+(*ACTION_TIMER_ITEM_CALLBACK)(
+ const ACTION_TIMER_ITEM * const pOneShotActionItem
+);
+
+typedef struct _ACTION_TIMER_ITEM
+{
+ // Internal Use for ActionTimer ---------------------------------------------
+ RT_LIST_ENTRY List;
+ ACTION_TIMER_HANDLE ActionOwner; // Owner of this action item
+ // ---------------------------------------------------------------------
+
+ // Fill the Following to Register an Item --------------------------------------------------------------------
+ ACTION_TYPE ActionType; // Category for a set of action items implementing a single feature
+ u8Byte usTimeout; // Absolute system us time specifying the timeout
+ PVOID pContext; // User-specified data context
+ ACTION_TIMER_ITEM_CALLBACK CallbackFunc; // Timeout callback function
+ // ---------------------------------------------------------------------------------------------------
+
+} ACTION_TIMER_ITEM, *PACTION_TIMER_ITEM;
+
+
+typedef struct _ACTION_TIMER
+{
+ RT_LIST_ENTRY List;
+
+ ACTION_TIMER_HANDLE TimerHandle;
+
+ ACTION_TIMER_REFERENCED_CLOCK ClockType;
+
+ // For Tsf Shared Hardware Timer -------------
+ ACTION_TIMER_HW_TIMER HwTimer;
+ // ---------------------------------------
+
+ // For SW_OS_SYSTEM_CLOCK ---------------
+ RT_TIMER SoftTimer;
+ // ---------------------------------------
+
+ RT_LIST_ENTRY TimeOrderedActionItemQueue; // Protected by ACTION_TIMER_COMMON_CONTEXT.ActionTimerLock
+ u4Byte uNumberOfActionItems; // Protected by ACTION_TIMER_COMMON_CONTEXT.ActionTimerLock
+
+} ACTION_TIMER, *PACTION_TIMER;
+
+
+typedef struct _ACTION_TIMER_COMMON_CONTEXT {
+
+ RT_SPIN_LOCK ActionTimerLock;
+
+ // Preallocated Hw Action Timer (Indexed by ACTION_TIMER_HW_TIMER) -------------------------
+ ACTION_TIMER HwActionTimer[HW_TIMER_MAX];
+ // ------------------------------------------------------------------------------------
+
+ RT_LIST_ENTRY ActionTimerQueue; // Protected by ACTION_TIMER_COMMON_CONTEXT.ActionTimerLock
+ u4Byte uNumberOfActionTimers; // Protected by ACTION_TIMER_COMMON_CONTEXT.ActionTimerLock
+ u1Byte LastAssignedTimerHandle; // Protected by ACTION_TIMER_COMMON_CONTEXT.ActionTimerLock
+
+
+ // Check if the dynamic memory is returned completely ------
+ u4Byte uAllocatedMemory;
+ u4Byte uReleasedMemory;
+ // --------------------------------------------------
+
+} ACTION_TIMER_COMMON_CONTEXT, *PACTION_TIMER_COMMON_CONTEXT;
+
+#define ACTION_TIMER_SIZE_OF_COMMON_CONTEXT sizeof(ACTION_TIMER_COMMON_CONTEXT)
+
+
+
+VOID
+ActionTimerInitializeCommonContext(
+ PADAPTER pAdapter
+);
+
+VOID
+ActionTimerDeInitializeCommonContext(
+ PADAPTER pAdapter
+);
+
+VOID
+ActionTimerRegisterActionItem(
+ PADAPTER pAdapter,
+ PACTION_TIMER_ITEM pInputDataItem,
+ ACTION_TIMER_HANDLE ActionTimerHandle
+);
+
+ACTION_TIMER_HANDLE
+ActionTimerAllocate(
+ PADAPTER pAdapter,
+ const char* pTimerName,
+ ACTION_TIMER_REFERENCED_CLOCK ClockType,
+ ACTION_TIMER_HW_TIMER HwTimerSelect
+);
+
+VOID
+ActionTimerRelease(
+ PADAPTER pAdapter,
+ ACTION_TIMER_HANDLE ActionTimerHandle
+);
+
+VOID
+ActionTimerFlushActionItem(
+ PADAPTER pAdapter,
+ ACTION_TIMER_HANDLE ActionTimerHandle,
+ ACTION_TYPE ActionType
+);
+
+VOID
+ActionTimerHwTimerCallback(
+ PADAPTER pAdapter,
+ ACTION_TIMER_HW_TIMER HwTimer
+);
+
+#endif