⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wlan_pmufsm.h

📁 marvell8385 GSPI开发驱动
💻 H
字号:
/************************************************************
Copyright (c) Paragon Wireless Co.,LTD.
ALL RIGHTS RESERVED
Description:  WLAN PMU模块状态机的相关定义,包括:
              fsm;
              fsm_callbacks;
              宏定义;
*************************************************************/
#ifndef ParaWlanPMUFsm_H
#define ParaWlanPMUFsm_H

#ifdef __cplusplus
extern "C" {
#endif

#include "precomp.h"
#include "Pmpolicy.h"
#include "Nkintr.h"
#ifdef _WIN32_WCE
#include <Iphlpapi.h>
#endif
#include <pm.h>
#include "Omap730_gspx.h"

/////////////roaming process
#include "ParaRoamingProc.h"

#ifdef DEBUG_PARA_ROAMING
extern PRIVATE_PARAROAMING_ADAPTER priv;
#endif

//power state
#define WLAN_PMU_FSM_STATUS_DISCONNECTED    0
#define WLAN_PMU_FSM_STATUS_CONNECTED          1
#define WLAN_PMU_FSM_STATUS_SLEEP                   2
#define WLAN_PMU_FSM_STATUS_DEEP_SLEEP         3
#define WLAN_PMU_FSM_STATUS_POWER_OFF          4

//timer
#define WLAN_PMU_TIMEOUT_VALUE (3000)
#define WLAN_PMU_HOST_SLEEP_CONFIRM_TIMEOUT_VALUE (3000)
#define WLAN_PMU_EXIT_DEEP_SLEEP_TIMEOUT_VALUE (3000)
#define WLAN_PMU_EXIT_SLEEP_TIMEOUT_VALUE (5000)
#define WLAN_PMU_TIMEOUT_TIMES 5
#define WLAN_PMU_CMD_TIMEOUT (20000)
#define WLAN_PMU_SLEEP_MODE_LOCALNET_TIMEOUT (90000)
#define WLAN_PMU_SLEEP_MODE_CPU_RUN_TIMEOUT (90000)
#define WLAN_PMU_DHCP_BUSY_TIMEOUT (40000)
#define WLAN_PMU_GET_IP_TABLE_TIMEOUT (10000)
#define WLAN_PMU_TX_PKT_STAT_INTERVAL (60000)
#define WLAN_PMU_ARP_ENTRY_KEEPING_INTERVAL (30000)
#define WLAN_PMU_ADAPTER_CHECK_TIMEOUT (5000)
//
#define WLAN_PMU_HIGH_PRIO_CMD_RESUME_DEV  0x01   
#define WLAN_PMU_HIGH_PRIO_CMD_CPU_STANDBY 0x02  
#define WLAN_PMU_HIGH_PRIO_CMD_PS_CONFIRM  0x04  
#define WLAN_PMU_HIGH_PRIO_CMD_CARD_RESTART 0x08

#define WLAN_PMU_PACKET_FILTER_ARP 1    
#define WLAN_PMU_PACKET_FILTER_SIP 2    

//wakeup source
#define WLAN_PMU_WAKEUP_RTC        1    
#define WLAN_PMU_WAKEUP_GPIO93     2    
#define WLAN_PMU_WAKEUP_GPIO15     3    
#define WLAN_PMU_WAKEUP_GPIO1     4    
#define WLAN_PMU_WAKEUP_GPIO0     5    
#define WLAN_PMU_WAKEUP_GPIO10    6
#define WLAN_PMU_WAKEUP_MODULE  7
#define WLAN_PMU_WAKEUP_FLIP    8
#define WLAN_PMU_WAKEUP_SD  9

//fsm command
#define WLAN_PMU_CMD_APP_SLEEP   1
#define WLAN_PMU_CMD_LINKSTATUS 3
#define WLAN_PMU_CMD_NET_EVENT  4
#define WLAN_PMU_CMD_SLEEP_CONFIRM 5
#define WLAN_PMU_CMD_APP_WAKEUP 6
#define WLAN_PMU_CMD_GET_SLEEP_RESPONSE 7
#define WLAN_PMU_CMD_GET_SLEEP_MODE_AWAKE_RESPONSE 8
#define WLAN_PMU_CMD_ENTER_SLEEP_TIMEOUT 9
#define WLAN_PMU_CMD_ENTER_DEEP_SLEEP_AWAKE 10
#define WLAN_PMU_CMD_DEEP_SLEEP_ASSOCIATE_FAILED 11
#define WLAN_PMU_CMD_EXIT_DEEP_SLEEP_TIMEOUT 12
#define WLAN_PMU_CMD_APP_BACKLIGHT_CTRL 13
#define WLAN_PMU_CMD_DEEP_SLEEP_SCAN_ASSOCIATE 14
#define WLAN_PMU_CMD_EXIT_SLEEP_TIMEOUT 15
#define WLAN_PMU_CMD_DEEP_SLEEP_CLOSE_CPU_TIMEOUT 16
#define WLAN_PMU_CMD_TX_PACKET_TIMEOUT 17
#define WLAN_PMU_CMD_TX_CMD_TIMEOUT 18
#define WLAN_PMU_CMD_SLEEP_MODE_CPU_RUN_TIMEOUT 19
#define WLAN_PMU_CMD_LOCALNET_WAKEUP 20
#define WLAN_PMU_CMD_LOCALNET_SLEEP 21
#define WLAN_PMU_CMD_REBOOT_CARD 22
#define WLAN_PMU_CMD_REASSO_TIMEOUT 23
#define WLAN_PMU_CMD_SLEEP_AWAKE 24
#define WLAN_PMU_CMD_HOST_SLEEP_AWAKE 25
#define WLAN_PMU_CMD_POWER_DOWN 26
#define WLAN_PMU_CMD_POWER_UP 27
#define WLAN_PMU_CMD_PKT_DELAY_TX_TIMEOUT 28
#define WLAN_PMU_CMD_ENTER_DEEP_SLEEP_TIMEOUT 29
#define WLAN_PMU_CMD_HOST_SLEEP_CONFIRM_TIMEOUT 30
#define WLAN_PMU_CMD_GET_HOST_SLEEP_CONFIRM_RESP 31
#define WLAN_PMU_CMD_ENTER_DEEP_SLEEP_RESP 32
#define WLAN_PMU_CMD_LOW_DATA_RATE 33
#define WLAN_PMU_CMD_HOST_WAKEUP_CARD 34
#define WLAN_PMU_CMD_TURN_OFF_CARD_TIMEOUT 35

typedef struct WlanPmuCmdListNode{
	int cmd_type;
	int args;
	unsigned int argv[3];
	struct WlanPmuCmdListNode *next;
}WlanPmuCmdListNode;
#define HOST_NAME_MAX_LEN 20
#define MAXRPNAMELEN		16

typedef struct tagNetReportUnit
{
	char RPName[MAXRPNAMELEN];
	long RPValue;
}NetReportUnit;

typedef struct tagNetReport
{
	long RPNumber;
	NetReportUnit	RPUnit[9];
}NetReport;
typedef struct WlanPmuArpPacket{
	unsigned char dst_mac[6];
	unsigned char src_mac[6];
	unsigned short type;
	unsigned short hw_type;
	unsigned short protocol_type;
	unsigned char hw_size;
	unsigned char protocol_size;
	unsigned short code;
	unsigned char sender_mac[6];
	unsigned char sender_ip[4];
	unsigned char target_mac[6];
	unsigned char target_ip[4];
	unsigned char trailer[18];
}WlanPmuArpPacket; //__attribute__((packed)) 

/* FINITE STATE MACHINE */
typedef struct WlanPmuCB{
    PMRVDRV_ADAPTER   adapter;                       /* WLAN设备控制块 */
#ifdef DEBUG_PARA_ROAMING
    PPRIVATE_PARAROAMING_ADAPTER ppriv;
#endif

    int  iState;                                /* State */
    HANDLE   queue;
    HANDLE standby_que;
    int iCPUSleepMode;							/* 0 SLEEP/1 DEEP SLEEP */

    int iHighPrioCmdType;						/* 0 SLEEP/1 DEEP SLEEP */
    WlanPmuCmdListNode *head;
    WlanPmuCmdListNode *tail;
    HANDLE 	queue_mutex;
    int iCurrentCmdCount;
    unsigned long dwSleepRTCTimeout;        	/* Sleep RTC timeout value */
    unsigned long dwDeepSleepRTCTimeout;        /* Deep sleep RTC timeout value */
    unsigned long dwDTIMMultiple;
    int iDeviceShutDown;
    int iLocalNetBusy;

    //Wlan App Busy flag bit def:  bit0:sysInit value; bit1:VoIP; bit2:MSN/IE; 
    int iWlanAppStatusActive; // wlan app status
    int iLinkStatus;
    
    struct PMUFsmCallbacks *callbacks;          /* Callback routines */
    int iSleepCmdTimeoutTimes;
    int iExitSleepCmdTimeoutTimes;
    int iEnterDSCmdTimeoutTimes;
    int iExitDSAssociateTimeoutTimes;
    int iExitDSCmdTimeoutTimes;
    #define DEEP_SLEEP_RTC_WAKEUP_MAX_COUNT 3
    int iDeepSleepRTCWakeUpCount;
    int iDeepSleepRTCWakeUpTotalCount;
    unsigned long ulBackLightLevel;
    int iIsExitingDeepSleep;
    int iIsinSleepMode;
    BOOLEAN iNoenterSleepBecauseInroaming;
    BOOLEAN bSwitchSleepNoSleep;
    BOOLEAN bFromUserIdleToOnState;
    BOOLEAN bSetReassociateTimer;
    PNDIS_PACKET skb;
    int iIsIncomingCallWakeup;
    CRITICAL_SECTION     IntCriticalSection;     


    NDIS_MINIPORT_TIMER 	stSleepCmdTimer;
    NDIS_MINIPORT_TIMER 	stHostSleepConfirmTimer;
    int iHostSleepConfirmTimerSetted;
    NDIS_MINIPORT_TIMER 	stExitDSCmdTimer;    
    NDIS_MINIPORT_TIMER 	stEnterDSCmdTimer;    
    NDIS_MINIPORT_TIMER  stExitSleepCmdTimer;
    NDIS_MINIPORT_TIMER  stExitDSAssociateTimer;
    NDIS_MINIPORT_TIMER stTxCmdTimer;
#ifndef _WIN32_WCE
    NDIS_MINIPORT_TIMER stSleepModeCPURunTimer;
#endif
 
    NDIS_MINIPORT_TIMER 	stDHCPTimer;
    int iDHCPTimerSetted;
    NDIS_MINIPORT_TIMER 	stAdapterCheckTimer;
    int iAdapterCheckTimerSetted;
    
#ifdef CONFIG_WLAN_PMU_ARP_RESPONSE
    NDIS_MINIPORT_TIMER 	stGetIPNetTableTimer;
    int iGetIPNetTableTimerSetted;
#endif    
    NDIS_MINIPORT_TIMER 	stReassociateTimer;
    NDIS_MINIPORT_TIMER 	stTxPktStatTimer;
    int iTxPktStatTimerSeted;
    DWORD dwTxPktCount;
    NDIS_MINIPORT_TIMER 	stHostWakeUpTimer;
    int iHostWakeUpTimerSeted;
#ifdef CONFIG_WLAN_PMU_ARP_REQUEST
    NDIS_MINIPORT_TIMER 	stArpReqSendTimer;
    int iArpReqSendTimerSeted;
#endif
    DWORD dwIfIndex;
    DWORD dwLastHostWakeTime;
    int iRebootTimerCount;
#ifdef CONFIG_WLAN_PMU_ARP_RESPONSE
    int iARPFieldGot;
    int iARPRespCount;
#endif
    WlanPmuArpPacket	stARPBuffer;
#ifdef _WIN32_WCE
    IP_ADDR_STRING IPAddr;
    IP_ADDR_STRING Gateway;
    unsigned int AddressLength;
    BYTE MacAddress[MAX_ADAPTER_ADDRESS_LENGTH];
    unsigned long dwSIPSvrIpaddr;
    BYTE abySIPMacAddr[MAX_ADAPTER_ADDRESS_LENGTH];
    BYTE abyGWMacAddr[MAX_ADAPTER_ADDRESS_LENGTH];
#else
    NetReport	stIfNetPrep;
#endif
    int iGotIfNetPrep;
    int iGotRelatedAPs;
    int iGotRelatedAPsOldStatus;
    int iCurrentDeepSleepIntervalIndex;
    int iSendIndex;
    int iSDBusAppStatus;
    int iDeepSleepRestartInterval;
    int iInitCompleted;
    HANDLE	wakeup_q;	
    HANDLE hPowerNotify;
    
    HHOOK hKeyBDHook;
    HANDLE hSnapShot;

    HANDLE hWlanSleepStatusThread;
    HANDLE hWlanSleepStatusEvent;
    HANDLE hKeybadProcEvent;
    HANDLE hAppStatusCheckTimerEvent;
    HANDLE hIPAddrChangedEvent;	
    HANDLE hIPAddrChangedRegisted;	
    HANDLE hAdapterCheckEvent;
    BOOLEAN registerKeyboard;
    PROCESSENTRY32 keybadinfo;
    NDIS_MINIPORT_TIMER 	stKeybadProcTimer;
    NDIS_MINIPORT_TIMER 	stTurnWlanProcTimer;
}WlanPmuCB;

/* 定义状态机的动作 */
typedef struct PMUFsmCallbacks PMUFsmCallbacks;
struct PMUFsmCallbacks
{
    int (*ResetCBInfo)          (WlanPmuCB *);
    int (*CardEnterSleep)       (WlanPmuCB *);
    int (*CardExitSleep)        (WlanPmuCB *);
    int (*CardEnterDeepSleep)   (WlanPmuCB *);
    int (*CardReEnterDeepSleep)   (WlanPmuCB *);
    int (*CardExitDeepSleep)    (WlanPmuCB *);
    DWORD (*CardEnterStandby)      (WlanPmuCB *f, int iRTCMod);
    int (*RebootCard)	(WlanPmuCB *);
    int (*PowerDownCard)	(WlanPmuCB *);
    int (*PowerUpCard)	(WlanPmuCB *);
};

/* 对外接口 */
void wlan_PMUInit (IN PMRVDRV_ADAPTER adapter);
void wlan_PMUAppSleep (void);
void wlan_PMUAppWakeUp (void);
int wlan_PMUPacketsFilter (PNDIS_PACKET skb, BYTE * data, int iLength);
void wlan_PMUSleepConfirmed (void);

/* function declare*/
static void pmu_FsmSleepCmdTimeout (WlanPmuCB *pCB);
static void pmu_FsmRebootCard (WlanPmuCB *pCB);
static void pmu_FsmExitSleepCmdTimeout (WlanPmuCB *pCB);
static void pmu_FsmDSScanAndAssociate (WlanPmuCB *pCB);
static void pmu_FsmRTCTimeout (WlanPmuCB *pCB);
static void pmu_FsmSleepModeCPURunTimeout (WlanPmuCB *pCB);
static void pmu_FsmExitDeepSleepCmdTimeout (WlanPmuCB *pCB);
//static void pmu_FsmDeepSleepCloseCPUTimeout (WlanPmuCB *pCB);
void wlan_TurnOnCard();
void wlan_TurnOffCard();
void wlan_PMUSystemEventThread(PVOID pContext);


#ifdef __cplusplus
}
#endif


#endif /* ParaWlanPMUFsm_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -