📄 wt.h
字号:
#ifndef _WT_H#define _WT_Htypedef enum { PRV_STATE_OFF = 0, /* this means hw_unavailable is != 0 */ PRV_STATE_PREBOOT, /* we are in a pre-boot state (empty RAM) */ PRV_STATE_BOOT, /* boot state (fw upload, run fw) */ PRV_STATE_POSTBOOT, /* after boot state, need reset now */ PRV_STATE_PREINIT, /* pre-init state */ PRV_STATE_INIT, /* init state (restore MIB backup to device) */ PRV_STATE_READY, /* driver&device are in operational state */ PRV_STATE_SLEEP /* device in sleep mode */} islpci_state_t;struct wt_acl { enum { MAC_POLICY_OPEN=0, MAC_POLICY_ACCEPT=1, MAC_POLICY_REJECT=2 } policy; struct list_head mac_list; /* a list of mac_entry */ int size; /* size of queue */ struct semaphore sem; /* accessed in ioctls and trap_work */}; ///////////////////////////////////////////////////////////////////////////////////////#ifdef NDIS50_MINIPORT#define WT_NDIS_MAJOR_VERSION 5#define WT_NDIS_MINOR_VERSION 0#endif#ifdef NDIS51_MINIPORT#define WT_NDIS_MAJOR_VERSION 5#define WT_NDIS_MINOR_VERSION 1#endif#define ALIGN_16 16#ifndef MIN#define MIN(a, b) ((a) > (b) ? b: a)#endif//#define MASK_TXBUFF_AVAIABLE 0X4524 //check later#define MASK_TXBUFF_AVAIABLE 0X924 //check, no bank4#define WT_TXHW_RESOURCES_AVAIABLE(_M) ((_M)&MASK_TXBUFF_AVAIABLE)#define MASK_TX_NOT_BUSY 0X4924 //#define MASK_TX_NOT_EMPTY 0X36DB#define WT_TXHW_DONE(_M) (((_M)&MASK_TX_NOT_BUSY)&&(0!=((_M)&MASK_TX_NOT_EMPTY)))#define MAX_REQUEUE_COUNT 1//--------------------------------------// Queue structure and macros//--------------------------------------typedef struct _QUEUE_ENTRY{ struct _QUEUE_ENTRY *Next;} QUEUE_ENTRY, *PQUEUE_ENTRY;typedef struct _QUEUE_HEADER{ PQUEUE_ENTRY Head; PQUEUE_ENTRY Tail;} QUEUE_HEADER, *PQUEUE_HEADER;#define InitializeQueueHeader(QueueHeader) \ { \ (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \ }#define IsQueueEmpty(QueueHeader) ((QueueHeader)->Head == NULL)#define RemoveHeadQueue(QueueHeader) \ (QueueHeader)->Head; \ { \ PQUEUE_ENTRY pNext; \ ASSERT((QueueHeader)->Head); \ pNext = (QueueHeader)->Head->Next; \ (QueueHeader)->Head = pNext; \ if (pNext == NULL) \ (QueueHeader)->Tail = NULL; \ }#define InsertHeadQueue(QueueHeader, QueueEntry) \ { \ ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \ (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ if ((QueueHeader)->Tail == NULL) \ (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ }#define InsertTailQueue(QueueHeader, QueueEntry) \ { \ ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \ if ((QueueHeader)->Tail) \ (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \ else \ (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ }//--------------------------------------// Some utility macros //--------------------------------------#ifndef min#define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))#endif#ifndef max#define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))#endif#define wt_min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))#define wt_max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))#define GetListHeadEntry(ListHead) ((ListHead)->Flink)#define GetListTailEntry(ListHead) ((ListHead)->Blink)#define GetListFLink(ListEntry) ((ListEntry)->Flink)//#define IsSListEmpty(ListHead) (((PSINGLE_LIST_ENTRY)ListHead)->Next == NULL)#define IsSListEmpty(ListHead) (!((PSINGLE_LIST_ENTRY)ListHead)->Next)//edited by hk 2004.11.24#define WT_EXIT goto exit#ifdef WIN_PLATFORM#define WT_MEMCOPY(Destn, Source, Length) NdisMoveMemory((Destn), (Source), (Length))#define WTMemCmp(Destn, Source, Length) \#define WT_MEMSET(Pointer, Length, Value) NdisFillMemory(Pointer, Length, Value)#else#define WT_MEMCOPY(Destn, Source, Length) memmove((Destn), (Source), (Length))#define WT_MEMSET(Pointer, Length, Value) memset(Pointer, Value, Length)#define WTMemCmp(Destn, Source, Length) \ memcmp((PUCHAR)(Destn), (PUCHAR)(Source), (ULONG)(Length)) #endif#if DBG#define WT_ALLOCMEM(pptr, size, flags, highest) \ WTAuditAllocMem(pptr, size, flags, highest, _FILENUMBER, __LINE__);#define WT_ALLOCMEMTAG(pptr, size) \ WTAuditAllocMemTag(pptr, size, _FILENUMBER, __LINE__);#define WT_FREEMEM(ptr, size, flags) WTAuditFreeMem(ptr, size, flags)#else // DBG#define WT_ALLOCMEM(pptr, size, flags, highest) \ NdisAllocateMemory(pptr, size, flags, highest)#ifdef WIN_PLATFORM#define WT_ALLOCMEMTAG(pptr, size) \ NdisAllocateMemoryWithTag(pptr, size, NIC_TAG)#define WT_FREEMEM(ptr, size, flags) NdisFreeMemory(ptr, size, flags)#endif //WIN_PLATFORM#endif #define WT_FREE_NDIS_STRING(str) \ WT_FREEMEM((str)->Buffer, (str)->MaximumLength, 0); \ (str)->Length = 0; \ (str)->MaximumLength = 0; \ (str)->Buffer = NULL;//--------------------------------------// Macros for flag and ref count operations //--------------------------------------#define WT_SET_FLAG(_M, _F) ((_M)->Flags |= (_F)) #define WT_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))#define WT_CLEAR_FLAGS(_M) ((_M)->Flags = 0)#define WT_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)#define WT_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))#define WT_INC_REF(_A) NdisInterlockedIncrement(&(_A)->RefCount)#define WT_DEC_REF(_A) NdisInterlockedDecrement(&(_A)->RefCount); ASSERT(_A->RefCount >= 0)#define WT_GET_REF(_A) ((_A)->RefCount)#define WT_INC_RCV_REF(_A) ((_A)->RcvRefCount++)#define WT_DEC_RCV_REF(_A) ((_A)->RcvRefCount--)#define WT_GET_RCV_REF(_A) ((_A)->RcvRefCount)//--------------------------------------// TCB (Transmit Control Block)//--------------------------------------//Maybe useful late for dmatypedef struct _WTWLAN_TCB{ struct _WTWLAN_TCB *Next; ULONG Flags; ULONG Count; #ifdef WIN_PLATFORM PNDIS_PACKET Packet; //who define it??? #endif} WTWLAN_TCB, *PWTWLAN_TCB;// Structure for pended OID query request//--------------------------------------typedef struct _WT_QUERY_REQUEST{ IN ULONG Oid; //IN NDIS_OID Oid:edited by WL!!! IN PVOID InformationBuffer; IN ULONG InformationBufferLength; OUT PULONG BytesWritten; OUT PULONG BytesNeeded;} WT_QUERY_REQUEST, *PWT_QUERY_REQUEST;//--------------------------------------// Structure for pended OID set request//--------------------------------------typedef struct _WT_SET_REQUEST{ IN ULONG Oid;//IN NDIS_OID Oid:edited by WL!!! IN PVOID InformationBuffer; IN ULONG InformationBufferLength; OUT PULONG BytesRead; OUT PULONG BytesNeeded;} WT_SET_REQUEST, *PWT_SET_REQUEST;typedef struct _WT_POWER_MGMT{ UINT PowerState;} WT_POWER_MGMT, *PWT_POWER_MGMT;//--------------------------------------// Macros specific to miniport adapter structure //--------------------------------------#define WT_TCB_RESOURCES_AVAIABLE(_M) ((_M)->nBusySend < (_M)->NumTcb)#define WT_SHOULD_FAIL_SEND(_M) ((_M)->Flags & fWT_ADAPTER_FAIL_SEND_MASK) #define WT_IS_NOT_READY(_M) ((_M)->Flags & fWT_ADAPTER_NOT_READY_MASK)#define WT_IS_READY(_M) !((_M)->Flags & fWT_ADAPTER_NOT_READY_MASK)#define WT_SET_READY(_M) ((_M)->Flags &= (~fWT_ADAPTER_NOT_READY_MASK))#define WT_SET_NOT_READY(_M) ((_M)->Flags |= fWT_ADAPTER_NOT_READY_MASK)#define WT_SET_PACKET_RFD(_p, _rfd) *((PWTWLAN_RXBUF *)&(_p)->MiniportReserved[0]) = _rfd#define WT_GET_PACKET_RFD(_p) *((PWTWLAN_RXBUF *)&(_p)->MiniportReserved[0])#define WT_GET_PACKET_MR(_p) (&(_p)->MiniportReserved[0]) #define WT_GET_TX_BUFFER_SLIST(_p) (&(_p)->List) //edited by wl 2005.6.22#define WT_GET_RX_BUFFER_LIST(_p) (&(_p)->List)#define WT_SET_HARDWARE_ERROR(adapter) WT_SET_FLAG(adapter, fWT_ADAPTER_HARDWARE_ERROR) #define WT_SET_NON_RECOVER_ERROR(adapter) WT_SET_FLAG(adapter, fWT_ADAPTER_NON_RECOVER_ERROR)#define WT_OFFSET(field) ((UINT)FIELD_OFFSET(WT_ADAPTER,field))#define WT_SIZE(field) sizeof(((PWT_ADAPTER)0)->field) typedef struct _MacCache{ MacAddr TA; //MacAddr TA:edited by wl!!! UCHAR PowerState; ULONG Rate; /*bit mask for station*/ int SeqNum; int count; char FragmentNum; BOOL used;//BOOL used:edited by wl!!! ULONGLONG RxTime; WTWLAN_KEY nKey; struct _MacCache *next; struct _MacCache *prev;}MacCache, *PMacCache;typedef struct _HASHENTRY { ULONG Length; MacCache *HashTab[MAX_STA_HASH_ENTRY];}HASHENTRY, *PHASHENTRY;typedef struct _WTWLAN_TXBUF{ #ifdef WIN_PLATFORM SINGLE_LIST_ENTRY SList; PNDIS_BUFFER NdisBuffer; PNDIS_PACKET NdisPacket; NDIS_PHYSICAL_ADDRESS AllocPa; NDIS_PHYSICAL_ADDRESS BufferPa; PNDIS_BUFFER FirstBuffer; #else struct list_head List; UCHAR AuxHeadBuf[ sizeof(WTWLAN_TAUXB) + MAX_HW_HEAD_LEN + MAX_LLC_LEN ]; ULONG LlcHeadLen; struct sk_buff *skb;#endif ULONG AllocSize; PVOID AllocVa; ULONG BufferSize; union { PUCHAR pBuffer; PWTWLAN_HWTXBUF pHwTxBuf; }TXHwBuf; UCHAR QosTag; UCHAR PowerState; ULONGLONG TxTimer; ULONG PhysBufCount; ULONG BufferCount; ULONG PacketLength; ULONG Flags; UINT16 Frmtype; p80211mgmt_fr_t ParseData; int SendStatus;//edited by wl:NDIS_STATUS SendStatus:for int has been typedeffed as BOOL!!! PQUEUE_HEADER pQueue; BOOL bMgmtFrm; BOOL bUrgency; // immediate send struct _WTWLAN_TXBUF *pAtimPsBuf; UCHAR TxStatus; UCHAR TxBank; UCHAR ReQueueCount; PsState PsMode; //enum MacAddr DA; BOOL bPowerMgtPend; // request send not frame exchange BOOL bPsFrm; ULONG AnRetryCount; // retry count during one atim window ULONG AtimWinCount; // re-queue atim window count //added by hk 2006.6.1 ULONG PairwiseKeyAddress; }WTWLAN_TXBUF, *PWTWLAN_TXBUF;//--------------------------------------//--------------------------------------typedef struct _WTWLAN_FRAG_ENTRY{ BOOL bFrag; BOOL bRetry; UCHAR FragNum; UCHAR FragIndex; ULONGLONG RxMask; //bit 0 --1 fragment; bit 1 --2 fragment; ... ULONGLONG TFirstRxStart; ULONGLONG TFirstRxEnd; ULONGLONG TRxStart; ULONGLONG TRxEnd;} WTWLAN_FRAG_ENTRY, *PWTWLAN_FRAG_ENTRY;//--------------------------------------//--------------------------------------typedef struct _WTWLAN_RXBUF{#ifdef WIN_PLATFORM LIST_ENTRY List; PNDIS_PACKET NdisPacket; PNDIS_BUFFER NdisBuffer; // Pointer to Buffer NDIS_PHYSICAL_ADDRESS AllocPa; NDIS_PHYSICAL_ADDRESS HwRxBufPa; // physical address of RFD LIST_ENTRY *pQueue;#else struct list_head List; struct list_head *pQueue; struct sk_buff *skb;#endif ULONG PacketSize; ULONG AllocSize; PVOID AllocVa; ULONG BufferSize; union { PUCHAR pRxBuffer; PWTWLAN_HWRXBUF pHwRxBuf; }RXHwBuf; ULONG HwRfdPhys; // lower part of HwRfdPa ULONG Flags; UINT16 Frmtype; p80211mgmt_fr_t ParseData; UCHAR QosTag; BOOL bMgmtFrm; WTWLAN_FRAG_ENTRY FragStatus; int NDISPacketOffset; USHORT CopyLen; UINT16 ftype; UINT fstype; UINT16 FrmCtl;// USHORT TypeLength; } WTWLAN_RXBUF, *PWTWLAN_RXBUF;//Transmit Buffer Descriptortypedef struct _WTWLAN_TBD { TXSTATUS TxFrmStatus; // PWTWLAN_TXBUF pTxbuf[TX_BUF_NUM];//define lock& counter here later} WTWLAN_TBD, *PWTWLAN_TBD;//Receive Frame Descriptortypedef struct _WTWLAN_RFD { RXSTATUS RxFrmStatus; // PWTWLAN_RXBUF pRxBuf[RX_BUF_NUM];//define lock& counter here later} WTWLAN_RFD, *PWTWLAN_RFD;typedef struct{ BssType BssType; MacAddr BSSID; Essid SSID; ScanType ScanType; int ProbeDelay; Intstring ChannelList; int MinChannelTime; int MaxChannelTime; PWTWLAN_TXBUF PTxScanFrame;}MlmeScanRequest;typedef struct _WTWLAN_MAC_DOT11MIB{ int dot11FragmentThreshold; ULONGLONG dot11BeaconPeriod; int dot11DtimPeriod; Ratestring dot11OperationalRateSet; ULONGLONG dot11AssociationResponseTimeout; PwrSave dot11PowerMangementMode; //-new add MacAddr dot11DesiredSSID; BssType dot11DesiredBssType;}WTWLAN_MAC_DOT11MIB, *PWTWLAN_MAC_DOT11MIB;/*-- MAC modes --*/typedef enum { WLAN_MACMODE_NONE = 0, WLAN_MACMODE_IBSS_STA = 1, WLAN_MACMODE_ESS_STA = 2, WLAN_MACMODE_ESS_AP = 3, WLAN_MACMODE_REPEAT = 4, WLAN_MACMODE_SECOND = 5, WLAN_MACMODE_MONITOR = 6}WTWLAN_MACMODE;///////////////////////////////////////////////////////////////////////////////////////////////#ifdef WIN_PLATFORMtypedef struct _WTWLAN_MAC_TIMER{ NDIS_TIMER TBeacon; NDIS_TIMER TAsoc; NDIS_TIMER TReasoc; NDIS_TIMER TAuth; NDIS_TIMER TScan; NDIS_TIMER TJoin; NDIS_TIMER TATIM; //-new add }WTWLAN_MAC_TIMER, *PWTWLAN_MAC_TIMER;#elsetypedef struct _WTWLAN_MAC_TIMER{ struct timer_list BeaconProcTimer; struct timer_list ATIMProcTimer; struct timer_list ScanProcTimer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -