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/ActionTimer.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/ActionTimer.h')
| -rw-r--r-- | network/wlan/WDI/COMMON/ActionTimer.h | 168 |
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 |
