📄 rtmp.h
字号:
#define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))#define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)#ifdef CONFIG_STA_SUPPORT#define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)#define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)#define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)#define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)#endif // CONFIG_STA_SUPPORT //#define INC_RING_INDEX(_idx, _RingSize) \{ \ (_idx) = (_idx+1) % (_RingSize); \}#define RING_PACKET_INIT(_TxRing, _idx) \{ \ _TxRing->Cell[_idx].pNdisPacket = NULL; \ _TxRing->Cell[_idx].pNextNdisPacket = NULL; \}#define TXDT_INIT(_TxD) \{ \ NdisZeroMemory(_TxD, TXD_SIZE); \ _TxD->DMADONE = 1; \}//Set last data segment#define RING_SET_LASTDS(_TxD, _IsSD0) \{ \ if (_IsSD0) {_TxD->LastSec0 = 1;} \ else {_TxD->LastSec1 = 1;} \}// 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; \ } \}// StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.#define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \{ \ _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \ _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \ _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \ _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \ _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \ _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \ _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \ _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \ _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \ _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \ _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \}#define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \{ \ _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \ _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \ _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \}//// MACRO for 32-bit PCI register read / write//// Usage : RTMP_IO_READ32(// PRTMP_ADAPTER pAd,// ULONG Register_Offset,// PULONG pValue)//// RTMP_IO_WRITE32(// PRTMP_ADAPTER pAd,// ULONG Register_Offset,// ULONG Value)////// BBP & RF are using indirect access. Before write any value into it.// We have to make sure there is no outstanding command pending via checking busy bit.//#define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register//#define RTMP_RF_IO_WRITE32(_A, _V) \{ \ PHY_CSR4_STRUC Value; \ ULONG BusyCnt = 0; \ do { \ RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \ if (Value.field.Busy == IDLE) \ break; \ BusyCnt++; \ } while (BusyCnt < MAX_BUSY_COUNT); \ if (BusyCnt < MAX_BUSY_COUNT) \ { \ RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \ } \}#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \{ \ BBP_CSR_CFG_STRUC BbpCsr; \ int i, k; \ for (i=0; i<MAX_BUSY_COUNT; i++) \ { \ RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \ if (BbpCsr.field.Busy == BUSY) \ { \ continue; \ } \ BbpCsr.word = 0; \ BbpCsr.field.fRead = 1; \ BbpCsr.field.BBP_RW_MODE = 1; \ BbpCsr.field.Busy = 1; \ BbpCsr.field.RegNum = _I; \ RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \ for (k=0; k<MAX_BUSY_COUNT; k++) \ { \ RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \ if (BbpCsr.field.Busy == IDLE) \ break; \ } \ if ((BbpCsr.field.Busy == IDLE) && \ (BbpCsr.field.RegNum == _I)) \ { \ *(_pV) = (UCHAR)BbpCsr.field.Value; \ break; \ } \ } \ if (BbpCsr.field.Busy == BUSY) \ { \ DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \ *(_pV) = (_A)->BbpWriteLatch[_I]; \ } \}//#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {}// Read BBP register by register's ID. Generate PER to test BA#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \{ \ BBP_CSR_CFG_STRUC BbpCsr; \ int i, k; \ for (i=0; i<MAX_BUSY_COUNT; i++) \ { \ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ if (BbpCsr.field.Busy == BUSY) \ { \ continue; \ } \ BbpCsr.word = 0; \ BbpCsr.field.fRead = 1; \ BbpCsr.field.BBP_RW_MODE = 1; \ BbpCsr.field.Busy = 1; \ BbpCsr.field.RegNum = _I; \ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \ RTMPusecDelay(1000); \ for (k=0; k<MAX_BUSY_COUNT; k++) \ { \ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ if (BbpCsr.field.Busy == IDLE) \ break; \ } \ if ((BbpCsr.field.Busy == IDLE) && \ (BbpCsr.field.RegNum == _I)) \ { \ *(_pV) = (UCHAR)BbpCsr.field.Value; \ break; \ } \ } \ if (BbpCsr.field.Busy == BUSY) \ { \ DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \ *(_pV) = (_A)->BbpWriteLatch[_I]; \ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ BbpCsr.field.Busy = 0; \ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ } \}#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \{ \ BBP_CSR_CFG_STRUC BbpCsr; \ int BusyCnt; \ for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \ { \ RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \ if (BbpCsr.field.Busy == BUSY) \ continue; \ BbpCsr.word = 0; \ BbpCsr.field.fRead = 0; \ BbpCsr.field.BBP_RW_MODE = 1; \ BbpCsr.field.Busy = 1; \ BbpCsr.field.Value = _V; \ BbpCsr.field.RegNum = _I; \ RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \ (_A)->BbpWriteLatch[_I] = _V; \ break; \ } \ if (BusyCnt == MAX_BUSY_COUNT) \ { \ DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \ } \}// Write BBP register by register's ID & value#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \{ \ BBP_CSR_CFG_STRUC BbpCsr; \ int BusyCnt; \ for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \ { \ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ if (BbpCsr.field.Busy == BUSY) \ continue; \ BbpCsr.word = 0; \ BbpCsr.field.fRead = 0; \ BbpCsr.field.BBP_RW_MODE = 1; \ BbpCsr.field.Busy = 1; \ BbpCsr.field.Value = _V; \ BbpCsr.field.RegNum = _I; \ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \ RTMPusecDelay(1000); \ (_A)->BbpWriteLatch[_I] = _V; \ break; \ } \ if (BusyCnt == MAX_BUSY_COUNT) \ { \ DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ BbpCsr.field.Busy = 0; \ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ } \}#define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \ switch (ch) \ { \ case 1: khz = 2412000; break; \ case 2: khz = 2417000; break; \ case 3: khz = 2422000; break; \ case 4: khz = 2427000; break; \ case 5: khz = 2432000; break; \ case 6: khz = 2437000; break; \ case 7: khz = 2442000; break; \ case 8: khz = 2447000; break; \ case 9: khz = 2452000; break; \ case 10: khz = 2457000; break; \ case 11: khz = 2462000; break; \ case 12: khz = 2467000; break; \ case 13: khz = 2472000; break; \ case 14: khz = 2484000; break; \ case 36: /* UNII */ khz = 5180000; break; \ case 40: /* UNII */ khz = 5200000; break; \ case 44: /* UNII */ khz = 5220000; break; \ case 48: /* UNII */ khz = 5240000; break; \ case 52: /* UNII */ khz = 5260000; break; \ case 56: /* UNII */ khz = 5280000; break; \ case 60: /* UNII */ khz = 5300000; break; \ case 64: /* UNII */ khz = 5320000; break; \ case 149: /* UNII */ khz = 5745000; break; \ case 153: /* UNII */ khz = 5765000; break; \ case 157: /* UNII */ khz = 5785000; break; \ case 161: /* UNII */ khz = 5805000; break; \ case 165: /* UNII */ khz = 5825000; break; \ case 100: /* HiperLAN2 */ khz = 5500000; break; \ case 104: /* HiperLAN2 */ khz = 5520000; break; \ case 108: /* HiperLAN2 */ khz = 5540000; break; \ case 112: /* HiperLAN2 */ khz = 5560000; break; \ case 116: /* HiperLAN2 */ khz = 5580000; break; \ case 120: /* HiperLAN2 */ khz = 5600000; break; \ case 124: /* HiperLAN2 */ khz = 5620000; break; \ case 128: /* HiperLAN2 */ khz = 5640000; break; \ case 132: /* HiperLAN2 */ khz = 5660000; break; \ case 136: /* HiperLAN2 */ khz = 5680000; break; \ case 140: /* HiperLAN2 */ khz = 5700000; break; \ case 34: /* Japan MMAC */ khz = 5170000; break; \ case 38: /* Japan MMAC */ khz = 5190000; break; \ case 42: /* Japan MMAC */ khz = 5210000; break; \ case 46: /* Japan MMAC */ khz = 5230000; break; \ case 184: /* Japan */ khz = 4920000; break; \ case 188: /* Japan */ khz = 4940000; break; \ case 192: /* Japan */ khz = 4960000; break; \ case 196: /* Japan */ khz = 4980000; break; \ case 208: /* Japan, means J08 */ khz = 5040000; break; \ case 212: /* Japan, means J12 */ khz = 5060000; break; \ case 216: /* Japan, means J16 */ khz = 5080000; break; \ default: khz = 2412000; break; \ } \ }#define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \ switch (khz) \ { \ case 2412000: ch = 1; break; \ case 2417000: ch = 2; break; \ case 2422000: ch = 3; break; \ case 2427000: ch = 4; break; \ case 2432000: ch = 5; break; \ case 2437000: ch = 6; break; \ case 2442000: ch = 7; break; \ case 2447000: ch = 8; break; \ case 2452000: ch = 9; break; \ case 2457000: ch = 10; break; \ case 2462000: ch = 11; break; \ case 2467000: ch = 12; break; \ case 2472000: ch = 13; break; \ case 2484000: ch = 14; break; \ case 5180000: ch = 36; /* UNII */ break; \ case 5200000: ch = 40; /* UNII */ break; \ case 5220000: ch = 44; /* UNII */ break; \ case 5240000: ch = 48; /* UNII */ break; \ case 5260000: ch = 52; /* UNII */ break; \ case 5280000: ch = 56; /* UNII */ break; \ case 5300000: ch = 60; /* UNII */ break; \ case 5320000: ch = 64; /* UNII */ break; \ case 5745000: ch = 149; /* UNII */ break; \ case 5765000: ch = 153; /* UNII */ break; \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -