📄 rt2870.h
字号:
#ifdef RT2870#define GET_TXRING_FREENO(_pAd, _QueIdx) (_QueIdx) //(_pAd->TxRing[_QueIdx].TxSwFreeIdx)#define GET_MGMTRING_FREENO(_pAd) (_pAd->MgmtRing.TxSwFreeIdx)#endif // RT2870 ///* ----------------- RX Related MACRO ----------------- *///#define RT28XX_RX_ERROR_CHECK RTMPCheckRxWI#define RT28XX_RV_ALL_BUF_END(bBulkReceive) \ /* We return STATUS_MORE_PROCESSING_REQUIRED so that the completion */ \ /* routine (IofCompleteRequest) will stop working on the irp. */ \ if (bBulkReceive == TRUE) RTUSBBulkReceive(pAd);/* ----------------- ASIC Related MACRO ----------------- */// reset MAC of a station entry to 0xFFFFFFFFFFFF#define RT28XX_STA_ENTRY_MAC_RESET(pAd, Wcid) \ { RT_SET_ASIC_WCID SetAsicWcid; \ SetAsicWcid.WCID = Wcid; \ SetAsicWcid.SetTid = 0xffffffff; \ SetAsicWcid.DeleteTid = 0xffffffff; \ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID, \ &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); }// add this entry into ASIC RX WCID search table#define RT28XX_STA_ENTRY_ADD(pAd, pEntry) \ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_CLIENT_MAC_ENTRY, \ pEntry, sizeof(MAC_TABLE_ENTRY));// add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet// Set MAC register value according operation mode#define RT28XX_UPDATE_PROTECT(pAd) \ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_UPDATE_PROTECT, NULL, 0);// end johnli// remove Pair-wise key material from ASIC// yet implement#define RT28XX_STA_ENTRY_KEY_DEL(pAd, BssIdx, Wcid)// add Client security information into ASIC WCID table and IVEIV table#define RT28XX_STA_SECURITY_INFO_ADD(pAd, apidx, KeyID, pEntry) \ { RT28XX_STA_ENTRY_MAC_RESET(pAd, pEntry->Aid); \ if (pEntry->Aid >= 1) { \ RT_SET_ASIC_WCID_ATTRI SetAsicWcidAttri; \ SetAsicWcidAttri.WCID = pEntry->Aid; \ if ((pEntry->AuthMode <= Ndis802_11AuthModeAutoSwitch) && \ (pEntry->WepStatus == Ndis802_11Encryption1Enabled)) \ { \ SetAsicWcidAttri.Cipher = pAd->SharedKey[apidx][KeyID].CipherAlg; \ } \ else if (pEntry->AuthMode == Ndis802_11AuthModeWPANone) \ { \ SetAsicWcidAttri.Cipher = pAd->SharedKey[apidx][KeyID].CipherAlg; \ } \ else SetAsicWcidAttri.Cipher = 0; \ DBGPRINT(RT_DEBUG_TRACE, ("aid cipher = %ld\n",SetAsicWcidAttri.Cipher)); \ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_SET_ASIC_WCID_CIPHER, \ &SetAsicWcidAttri, sizeof(RT_SET_ASIC_WCID_ATTRI)); } }// Insert the BA bitmap to ASIC for the Wcid entry#define RT28XX_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ do{ \ RT_SET_ASIC_WCID SetAsicWcid; \ SetAsicWcid.WCID = (_Aid); \ SetAsicWcid.SetTid = (0x10000<<(_TID)); \ SetAsicWcid.DeleteTid = 0xffffffff; \ RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); \ }while(0)// Remove the BA bitmap from ASIC for the Wcid entry#define RT28XX_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ do{ \ RT_SET_ASIC_WCID SetAsicWcid; \ SetAsicWcid.WCID = (_Wcid); \ SetAsicWcid.SetTid = (0xffffffff); \ SetAsicWcid.DeleteTid = (0x10000<<(_TID) ); \ RTUSBEnqueueInternalCmd((_pAd), CMDTHREAD_SET_ASIC_WCID, &SetAsicWcid, sizeof(RT_SET_ASIC_WCID)); \ }while(0) /* ----------------- PCI/USB Related MACRO ----------------- */#define RT28XX_HANDLE_DEV_ASSIGN(handle, dev_p) \ ((POS_COOKIE)handle)->pUsb_Dev = dev_p;// no use#define RT28XX_UNMAP()#define RT28XX_IRQ_REQUEST(net_dev)#define RT28XX_IRQ_RELEASE(net_dev)#define RT28XX_IRQ_INIT(pAd)#define RT28XX_IRQ_ENABLE(pAd)/* ----------------- MLME Related MACRO ----------------- */#define RT28XX_MLME_HANDLER(pAd) RTUSBMlmeUp(pAd)#define RT28XX_MLME_PRE_SANITY_CHECK(pAd) \ { if ((pAd->CommonCfg.bHardwareRadio == TRUE) && \ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && \ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))) { \ RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_CHECK_GPIO, NULL, 0); } }#define RT28XX_MLME_STA_QUICK_RSP_WAKE_UP(pAd) \ { RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_QKERIODIC_EXECUT, NULL, 0); \ RTUSBMlmeUp(pAd); }#define RT28XX_MLME_RESET_STATE_MACHINE(pAd) \ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_RESET_CONF, 0, NULL); \ RTUSBMlmeUp(pAd);#define RT28XX_HANDLE_COUNTER_MEASURE(_pAd, _pEntry) \ { RTUSBEnqueueInternalCmd(_pAd, CMDTHREAD_802_11_COUNTER_MEASURE, _pEntry, sizeof(MAC_TABLE_ENTRY)); \ RTUSBMlmeUp(_pAd); \ }/* ----------------- Power Save Related MACRO ----------------- */#define RT28XX_PS_POLL_ENQUEUE(pAd) \ { RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL); \ RTUSBKickBulkOut(pAd); }#define RT28xx_CHIP_NAME "RT2870"#define USB_CYC_CFG 0x02a4#define NT_SUCCESS(status) (((status) > 0) ? (1):(0))#define InterlockedIncrement atomic_inc#define NdisInterlockedIncrement atomic_inc#define InterlockedDecrement atomic_dec#define NdisInterlockedDecrement atomic_dec#define InterlockedExchange atomic_set//#define NdisMSendComplete RTMP_SendComplete#define NdisMCancelTimer RTMPCancelTimer#define NdisAllocMemory(_ptr, _size, _flag) \ do{_ptr = kmalloc((_size),(_flag));}while(0)#define NdisFreeMemory(a, b, c) kfree((a))#define NdisMSleep RTMPusecDelay /* unit: microsecond */#define USBD_TRANSFER_DIRECTION_OUT 0#define USBD_TRANSFER_DIRECTION_IN 0#define USBD_SHORT_TRANSFER_OK 0#define PURB purbb_t#define RTUSB_FREE_URB(pUrb) usb_free_urb(pUrb)//#undef MlmeAllocateMemory//#undef MlmeFreeMemorytypedef struct usb_device * PUSB_DEV;/* MACRO for linux usb */typedef struct urb *purbb_t;typedef struct usb_ctrlrequest devctrlrequest;#define PIRP PVOID#define PMDL PVOID#define NDIS_OID UINT#ifndef USB_ST_NOERROR#define USB_ST_NOERROR 0#endif// vendor-specific control operations#define CONTROL_TIMEOUT_JIFFIES ( (100 * HZ) / 1000)#define UNLINK_TIMEOUT_MS 3/* unlink urb */#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,7)#define RTUSB_UNLINK_URB(pUrb) usb_kill_urb(pUrb)#else#define RTUSB_UNLINK_URB(pUrb) usb_unlink_urb(pUrb)#endif// Prototypes of completion funuc.#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)#define RTUSBBulkOutDataPacketComplete(purb, pt_regs) RTUSBBulkOutDataPacketComplete(purb)#define RTUSBBulkOutMLMEPacketComplete(pUrb, pt_regs) RTUSBBulkOutMLMEPacketComplete(pUrb)#define RTUSBBulkOutNullFrameComplete(pUrb, pt_regs) RTUSBBulkOutNullFrameComplete(pUrb)#define RTUSBBulkOutRTSFrameComplete(pUrb, pt_regs) RTUSBBulkOutRTSFrameComplete(pUrb)#define RTUSBBulkOutPsPollComplete(pUrb, pt_regs) RTUSBBulkOutPsPollComplete(pUrb)#define RTUSBBulkRxComplete(pUrb, pt_regs) RTUSBBulkRxComplete(pUrb)#endifVOID RTUSBBulkOutDataPacketComplete(purbb_t purb, struct pt_regs *pt_regs);VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs);VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs);VOID RTUSBBulkOutRTSFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs);VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb, struct pt_regs *pt_regs);VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs);#define RTUSBMlmeUp(pAd) \{ \ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; \ if(pObj->MLMEThr_pid>0) \ up(&(pAd->mlme_semaphore)); \}#define RTUSBCMDUp(pAd) \{ \ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie; \ if(pObj->RTUSBCmdThr_pid>0) \ up(&(pAd->RTUSBCmd_semaphore)); \}static inline NDIS_STATUS RTMPAllocateMemory( OUT PVOID *ptr, IN size_t size){ *ptr = kmalloc(size, GFP_ATOMIC); if(*ptr) return NDIS_STATUS_SUCCESS; else return NDIS_STATUS_RESOURCES;}/* rtmp.h */#define BEACON_RING_SIZE 2#define DEVICE_VENDOR_REQUEST_OUT 0x40#define DEVICE_VENDOR_REQUEST_IN 0xc0#define INTERFACE_VENDOR_REQUEST_OUT 0x41#define INTERFACE_VENDOR_REQUEST_IN 0xc1#define MGMTPIPEIDX 0 // EP6 is highest priority#define BULKOUT_MGMT_RESET_FLAG 0x80#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 EnqueueCmd(cmdq, cmdqelmt) \{ \ if (cmdq->size == 0) \ cmdq->head = cmdqelmt; \ else \ cmdq->tail->next = cmdqelmt; \ cmdq->tail = cmdqelmt; \ cmdqelmt->next = NULL; \ cmdq->size++; \}typedef struct _RT_SET_ASIC_WCID { ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based ULONG SetTid; // time-based: seconds, packet-based: kilo-packets ULONG DeleteTid; // time-based: seconds, packet-based: kilo-packets} RT_SET_ASIC_WCID,*PRT_SET_ASIC_WCID;typedef struct _RT_SET_ASIC_WCID_ATTRI { ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based ULONG Cipher; // ASIC Cipher definition UCHAR Addr[ETH_LENGTH_OF_ADDRESS]; } RT_SET_ASIC_WCID_ATTRI,*PRT_SET_ASIC_WCID_ATTRI;typedef struct _MLME_MEMORY_STRUCT { PVOID AllocVa; //Pointer to the base virtual address of the allocated memory struct _MLME_MEMORY_STRUCT *Next; //Pointer to the next virtual address of the allocated memory} MLME_MEMORY_STRUCT, *PMLME_MEMORY_STRUCT;typedef struct _MLME_MEMORY_HANDLER { BOOLEAN MemRunning; //The flag of the Mlme memory handler's status UINT MemoryCount; //Total nonpaged system-space memory not size UINT InUseCount; //Nonpaged system-space memory in used counts UINT UnUseCount; //Nonpaged system-space memory available counts INT PendingCount; //Nonpaged system-space memory for free counts PMLME_MEMORY_STRUCT pInUseHead; //Pointer to the first nonpaed memory not used PMLME_MEMORY_STRUCT pInUseTail; //Pointer to the last nonpaged memory not used PMLME_MEMORY_STRUCT pUnUseHead; //Pointer to the first nonpaged memory in used PMLME_MEMORY_STRUCT pUnUseTail; //Pointer to the last nonpaged memory in used PULONG MemFreePending[MAX_MLME_HANDLER_MEMORY]; //an array to keep pending free-memory's pointer (32bits)} MLME_MEMORY_HANDLER, *PMLME_MEMORY_HANDLER;typedef struct _CmdQElmt { UINT command; PVOID buffer; ULONG bufferlength; BOOLEAN CmdFromNdis; BOOLEAN SetOperation; struct _CmdQElmt *next;} CmdQElmt, *PCmdQElmt;typedef struct _CmdQ { UINT size; CmdQElmt *head; CmdQElmt *tail; UINT32 CmdQState;}CmdQ, *PCmdQ;// // For WPA SUPPLICANT: WIRELESS EXT support wireless events: v14 or newer//#if WIRELESS_EXT >= 14//#define WPA_SUPPLICANT_SUPPORT 1#endif/* oid.h */// Cipher suite type for mixed mode group cipher, P802.11i-2004typedef enum _RT_802_11_CIPHER_SUITE_TYPE { Cipher_Type_NONE, Cipher_Type_WEP40, Cipher_Type_TKIP, Cipher_Type_RSVD, Cipher_Type_CCMP, Cipher_Type_WEP104} RT_802_11_CIPHER_SUITE_TYPE, *PRT_802_11_CIPHER_SUITE_TYPE;//CMDTHREAD_MULTI_READ_MAC//CMDTHREAD_MULTI_WRITE_MAC//CMDTHREAD_VENDOR_EEPROM_READ//CMDTHREAD_VENDOR_EEPROM_WRITEtypedef struct _CMDHandler_TLV { USHORT Offset; USHORT Length; UCHAR DataFirst;} CMDHandler_TLV, *PCMDHandler_TLV;// New for MeetingHouse Api support#define CMDTHREAD_VENDOR_RESET 0x0D730101 // cmd#define CMDTHREAD_VENDOR_UNPLUG 0x0D730102 // cmd#define CMDTHREAD_VENDOR_SWITCH_FUNCTION 0x0D730103 // cmd#define CMDTHREAD_MULTI_WRITE_MAC 0x0D730107 // cmd#define CMDTHREAD_MULTI_READ_MAC 0x0D730108 // cmd#define CMDTHREAD_VENDOR_EEPROM_WRITE 0x0D73010A // cmd#define CMDTHREAD_VENDOR_EEPROM_READ 0x0D73010B // cmd#define CMDTHREAD_VENDOR_ENTER_TESTMODE 0x0D73010C // cmd#define CMDTHREAD_VENDOR_EXIT_TESTMODE 0x0D73010D // cmd#define CMDTHREAD_VENDOR_WRITE_BBP 0x0D730119 // cmd#define CMDTHREAD_VENDOR_READ_BBP 0x0D730118 // cmd#define CMDTHREAD_VENDOR_WRITE_RF 0x0D73011A // cmd#define CMDTHREAD_VENDOR_FLIP_IQ 0x0D73011D // cmd#define CMDTHREAD_RESET_BULK_OUT 0x0D730210 // cmd#define CMDTHREAD_RESET_BULK_IN 0x0D730211 // cmd#define CMDTHREAD_SET_PSM_BIT_SAVE 0x0D730212 // cmd#define CMDTHREAD_SET_RADIO 0x0D730214 // cmd#define CMDTHREAD_UPDATE_TX_RATE 0x0D730216 // cmd#define CMDTHREAD_802_11_ADD_KEY_WEP 0x0D730218 // cmd#define CMDTHREAD_RESET_FROM_ERROR 0x0D73021A // cmd#define CMDTHREAD_LINK_DOWN 0x0D73021B // cmd#define CMDTHREAD_RESET_FROM_NDIS 0x0D73021C // cmd#define CMDTHREAD_CHECK_GPIO 0x0D730215 // cmd#define CMDTHREAD_FORCE_WAKE_UP 0x0D730222 // cmd#define CMDTHREAD_SET_BW 0x0D730225 // cmd#define CMDTHREAD_SET_ASIC_WCID 0x0D730226 // cmd#define CMDTHREAD_SET_ASIC_WCID_CIPHER 0x0D730227 // cmd#define CMDTHREAD_QKERIODIC_EXECUT 0x0D73023D // cmd#define RT_CMD_SET_KEY_TABLE 0x0D730228 // cmd#define RT_CMD_SET_RX_WCID_TABLE 0x0D730229 // cmd#define CMDTHREAD_SET_CLIENT_MAC_ENTRY 0x0D73023E // cmd#define CMDTHREAD_802_11_QUERY_HARDWARE_REGISTER 0x0D710105 // cmd#define CMDTHREAD_802_11_SET_PHY_MODE 0x0D79010C // cmd#define CMDTHREAD_802_11_SET_STA_CONFIG 0x0D790111 // cmd#define CMDTHREAD_802_11_SET_PREAMBLE 0x0D790101 // cmd#define CMDTHREAD_802_11_COUNTER_MEASURE 0x0D790102 // cmd// add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet#define CMDTHREAD_UPDATE_PROTECT 0x0D790103 // cmd// end johnli#define WPA1AKMBIT 0x01#define WPA2AKMBIT 0x02#define WPA1PSKAKMBIT 0x04#define WPA2PSKAKMBIT 0x08#define TKIPBIT 0x01#define CCMPBIT 0x02#define RT28XX_STA_FORCE_WAKEUP(pAd, bFromTx) \ RT28xxUsbStaAsicForceWakeup(pAd, bFromTx);#define RT28XX_STA_SLEEP_THEN_AUTO_WAKEUP(pAd, TbttNumToNextWakeUp) \ RT28xxUsbStaAsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp);#define RT28XX_MLME_RADIO_ON(pAd) \ RT28xxUsbMlmeRadioOn(pAd);#define RT28XX_MLME_RADIO_OFF(pAd) \ RT28xxUsbMlmeRadioOFF(pAd);#endif //__RT2870_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -