📄 rtmp.h
字号:
/* *************************************************************************** * Ralink Tech Inc. * 4F, No. 2 Technology 5th Rd. * Science-based Industrial Park * Hsin-chu, Taiwan, R.O.C. * * (c) Copyright 2002-2006, Ralink Technology, Inc. * * All rights reserved. Ralink's source code is an unpublished work and the * use of a copyright notice does not imply otherwise. This source code * contains confidential trade secret material of Ralink Tech. Any attemp * or participation in deciphering, decoding, reverse engineering or in any * way altering the source code is stricitly prohibited, unless the prior * written consent of Ralink Technology, Inc. is obtained. *************************************************************************** Module Name: rtmp.h Abstract: Revision History: Who When What -------- ---------- ----------------------------------------------*/#ifndef __RTMP_H__#define __RTMP_H__#include "link_list.h"#include "mlme.h"#include "oid.h"#include "wpa.h"//// Extern//extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];extern ULONG BIT32[32];extern UCHAR BIT8[8];extern char* CipherName[];extern UCHAR SNAP_802_1H[6];extern UCHAR SNAP_BRIDGE_TUNNEL[6];extern UCHAR EAPOL_LLC_SNAP[8];extern UCHAR EAPOL[2];extern UCHAR IPX[2];extern UCHAR APPLE_TALK[2];extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14extern UCHAR OfdmSignalToRateId[16] ;extern UCHAR default_cwmin[4];extern UCHAR default_cwmax[4];extern UCHAR default_sta_aifsn[4];extern UCHAR MapUserPriorityToAccessCategory[8];extern UCHAR Phy11BNextRateDownward[];extern UCHAR Phy11BNextRateUpward[];extern UCHAR Phy11BGNextRateDownward[];extern UCHAR Phy11BGNextRateUpward[];extern UCHAR Phy11ANextRateDownward[];extern UCHAR Phy11ANextRateUpward[];extern CHAR RssiSafeLevelForTxRate[];extern UCHAR RateIdToMbps[];extern USHORT RateIdTo500Kbps[];extern UCHAR CipherSuiteWpaNoneTkip[];extern UCHAR CipherSuiteWpaNoneTkipLen;extern UCHAR CipherSuiteWpaNoneAes[];extern UCHAR CipherSuiteWpaNoneAesLen;extern UCHAR SsidIe;extern UCHAR SupRateIe;extern UCHAR ExtRateIe;extern UCHAR ErpIe;extern UCHAR DsIe;extern UCHAR TimIe;extern UCHAR WpaIe;extern UCHAR Wpa2Ie;extern UCHAR IbssIe;extern UCHAR WPA_OUI[];extern UCHAR RSN_OUI[];extern UCHAR WME_INFO_ELEM[];extern UCHAR WME_PARM_ELEM[];extern UCHAR RALINK_OUI[];extern struct usb_device_id rtusb_usb_id[];extern INT const rtusb_usb_id_len;//// MACRO for linux usb//typedef struct urb *purbb_t;typedef struct usb_ctrlrequest devctrlrequest;// for vendor-specific control operations#define CONTROL_TIMEOUT_MS (1000) /* msec */ // lengthen timeout for loading firmware#define CONTROL_TIMEOUT_JIFFIES ((CONTROL_TIMEOUT_MS * HZ)/1000)#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7)#define RTUSB_UNLINK_URB(urb) usb_kill_urb(urb)#else#define RTUSB_UNLINK_URB(urb) usb_unlink_urb(urb)#endif/* map devrequest fields onto usb_ctrlrequest's */#define DEVREQ_REQUEST(x) ((x)->bRequest)#define DEVREQ_REQUESTTYPE(x) ((x)->bRequestType)#define DEVREQ_VALUE(x) ((x)->wValue)#define DEVREQ_INDEX(x) ((x)->wIndex)#define DEVREQ_LENGTH(x) ((x)->wLength)#define PURB purbb_t#define PIRP PVOID#define PMDL PVOID#define NDIS_OID UINT #define STATUS_SUCCESS 0x00#define STATUS_UNSUCCESSFUL 0x01typedef LONG NTSTATUS;typedef NTSTATUS *PNTSTATUS;typedef struct net_device * PNET_DEV;typedef struct sk_buff * PNDIS_PACKET;typedef struct sk_buff NDIS_PACKET;typedef PNDIS_PACKET * PPNDIS_PACKET;static inline void NdisGetSystemUpTime(ULONG *time){ *time = jiffies;}//// Queue structure and macros//typedef struct _QUEUE_ENTRY { struct _QUEUE_ENTRY *Next;} QUEUE_ENTRY, *PQUEUE_ENTRY;// Queue structuretypedef struct _QUEUE_HEADER { PQUEUE_ENTRY Head; PQUEUE_ENTRY Tail; ULONG Number;} QUEUE_HEADER, *PQUEUE_HEADER;#define InitializeQueueHeader(QueueHeader) \{ \ (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \ (QueueHeader)->Number = 0; \}#define RemoveHeadQueue(QueueHeader) \(QueueHeader)->Head; \{ \ PQUEUE_ENTRY pNext; \ if ((QueueHeader)->Head != NULL) \ { \ pNext = (QueueHeader)->Head->Next; \ (QueueHeader)->Head = pNext; \ if (pNext == NULL) \ (QueueHeader)->Tail = NULL; \ (QueueHeader)->Number--; \ } \}#define InsertHeadQueue(QueueHeader, QueueEntry) \{ \ ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \ (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \ if ((QueueHeader)->Tail == NULL) \ (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \ (QueueHeader)->Number++; \}#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); \ (QueueHeader)->Number++; \}//// Macro for debugging information//#ifdef DBGextern ULONG RTDebugLevel;#define DBGPRINT(Level, fmt, args...) \{ \ if (Level <= RTDebugLevel) \ { \ printk(NIC_DBG_STRING); \ printk(KERN_DEBUG fmt, ## args); \ } \}#define DBGPRINT_ERR(fmt, args...) \{ \ printk("ERROR!!! "); \ printk(KERN_DEBUG fmt, ## args); \}#define DBGPRINT_RAW(Level, fmt, args...) \{ \ if (Level <= RTDebugLevel) \ { \ printk(" "); \ printk(KERN_DEBUG fmt, ## args); \ } \}#else#define DBGPRINT(Level, fmt, args...)#define DBGPRINT_ERR(fmt, args...)#define DBGPRINT_RAW(Level, fmt, args...)#endif/*John said that this function will crash in some platforms. So, I removed it.(//2007/12/21,by KH)# define assert(expr) \ if(unlikely(!(expr))) { \ printk(KERN_ERR "Assertion failed! %s,%s,%s,line=%d\n", \ #expr,__FILE__,__FUNCTION__,__LINE__); \ }*///// spin_lock enhanced for Nested spin lock//#define NdisAllocateSpinLock(lock) \{ \ spin_lock_init(lock); \}#if 0#define NdisReleaseSpinLock(lock, flagg) \{ \ if (in_interrupt()) \ spin_unlock_irqrestore(lock, flagg);\ else \ spin_unlock(lock); \}#define NdisAcquireSpinLock(lock, flagg) \{ \ if (in_interrupt()) \ spin_lock_irqsave(lock, flagg); \ else \ spin_lock(lock); \}#else#define NdisReleaseSpinLock(lock, flagg) \{ \ spin_unlock_irqrestore(lock, flagg); \}#define NdisAcquireSpinLock(lock, flagg) \{ \ spin_lock_irqsave(lock, flagg); \}#endif#define NdisFreeSpinLock(lock) \{ \}#define RTUSBFreeSkbBuffer(skb) \{ \ dev_kfree_skb_any(skb); \}#define RTUSBMlmeUp(pAd) \{ \ if(pAd->MLMEThr_pid>0) \ up(&(pAd->mlme_semaphore)); \}//2008/01/07:KH add to solve the racing condition of Mac Registers#define RTUSBMacRegDown(pAd) \{ \ down_trylock(&pAd->MaCRegWrite_semaphore); \ pAd->MacRegWrite_Processing=1;\}#define RTUSBMacRegUp(pAd) \{ \ pAd->MacRegWrite_Processing=0;\ up(&(pAd->MaCRegWrite_semaphore)); \}#define RTUSBCMDUp(pAd) \{ \ if(pAd->RTUSBCmdThr_pid>0) \ up(&(pAd->RTUSBCmd_semaphore)); \}//Setup Packet used in Ctrl urb's filler....#define FILL_REQUEST(a,aa,ab,ac,ad,ae) \ do { \ (a)->devreq->request = aa; \ (a)->devreq->requesttype = ab; \ (a)->devreq->value = cpu_to_le16(ac); \ (a)->devreq->index = cpu_to_le16(ad); \ (a)->devreq->length = cpu_to_le16(ae);\ }while(0);// direction is specified in TransferFlags#define URB_FUNCTION_RESERVED0 0x0016//// These are for sending vendor and class commands// on the default pipe//// direction is specified in TransferFlags#define URB_FUNCTION_VENDOR_DEVICE 0x0017#define URB_FUNCTION_VENDOR_INTERFACE 0x0018#define URB_FUNCTION_VENDOR_ENDPOINT 0x0019#define URB_FUNCTION_VENDOR_OTHER 0x0020#define URB_FUNCTION_CLASS_DEVICE 0x001A#define URB_FUNCTION_CLASS_INTERFACE 0x001B#define URB_FUNCTION_CLASS_ENDPOINT 0x001C#define URB_FUNCTION_CLASS_OTHER 0x001F//// Reserved function codes// #define URB_FUNCTION_RESERVED 0x001D#define URB_FUNCTION_GET_CONFIGURATION 0x0026#define URB_FUNCTION_GET_INTERFACE 0x0027 #define URB_FUNCTION_LAST 0x0029//// Assert MACRO to make sure program running//#undef ASSERT#define ASSERT(x) \{ \ if (!(x)) \ { \ printk(KERN_WARNING __FILE__ ":%d assert " #x "failed\n", __LINE__); \ } \}//// Macros for flag and ref count operations//#define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))#define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))#define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)#define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)#define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))// Flags control for RT2500 USB bulk out frame type#define RTUSB_SET_BULK_FLAG(_M, _F) ((_M)->BulkFlags |= (_F))#define RTUSB_CLEAR_BULK_FLAG(_M, _F) ((_M)->BulkFlags &= ~(_F))#define RTUSB_TEST_BULK_FLAG(_M, _F) (((_M)->BulkFlags & (_F)) != 0)#define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->PortCfg.OpStatusFlags |= (_F))#define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->PortCfg.OpStatusFlags &= ~(_F))#define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->PortCfg.OpStatusFlags & (_F)) != 0)#define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))#define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))#define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)#define INC_RING_INDEX(_idx, _RingSize) \{ \ (_idx)++; \ if ((_idx) >= (_RingSize)) _idx=0; \}// Increase TxTsc value for next transmission// TODO: // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs// Should send a special event microsoft defined to request re-key#define INC_TX_TSC(_tsc) \{ \ int i=0; \ while (++_tsc[i] == 0x0) \ { \ i++; \ if (i == 6) \ break; \ } \}#undef NdisMoveMemory#undef NdisZeroMemory#undef NdisFillMemory#undef NdisEqualMemory#define NdisMoveMemory(Destination, Source, Length) RTMPMoveMemory(Destination, Source, Length)#define NdisZeroMemory(Destination, Length) RTMPZeroMemory(Destination, Length)#define NdisFillMemory(Destination, Length, Fill) RTMPFillMemory(Destination, Length, Fill)#define NdisEqualMemory(Source1, Source2, Length) RTMPEqualMemory(Source1, Source2, Length)#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)#define COPY_MAC_ADDR(Addr1, Addr2) memcpy((Addr1), (Addr2), MAC_ADDR_LEN)#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))#define NdisMSleep mdelay#define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \ switch (ch) \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -