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

📄 rtmp.h

📁 Linux下的RT系列无线网卡驱动,可以直接在x86平台上编译
💻 H
📖 第 1 页 / 共 5 页
字号:
#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 + -